ZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vc2NzaS8wMC1JTkRFWCBiL0RvY3VtZW50YXRpb24vc2NzaS8wMC1JTkRFWApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mOWNiNWJkCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9zY3NpLzAwLUlOREVYCkBAIC0wLDAgKzEsNzAgQEAKKzAwLUlOREVYCisJLSB0aGlzIGZpbGUKKzUzYzcwMC50eHQKKwktIGluZm8gb24gZHJpdmVyIGZvciA1M2M3MDAgYmFzZWQgYWRhcHRlcnMKK0FNNTNDOTc0LnR4dAorCS0gaW5mbyBvbiBkcml2ZXIgZm9yIEFNNTNjOTc0IGJhc2VkIGFkYXB0ZXJzCitCdXNMb2dpYy50eHQKKwktIGluZm8gb24gZHJpdmVyIGZvciBhZGFwdGVycyB3aXRoIEJ1c0xvZ2ljIGNoaXBzCitDaGFuZ2VMb2cKKwktIENoYW5nZXMgdG8gc2NzaSBmaWxlcywgaWYgbm90IGxpc3RlZCBlbHNld2hlcmUKK0NoYW5nZUxvZy5pcHMKKwktIElCTSBTZXJ2ZVJBSUQgZHJpdmVyIENoYW5nZWxvZworQ2hhbmdlTG9nLm5jcjUzYzh4eAorCS0gQ2hhbmdlcyB0byBuY3I1M2M4eHggZHJpdmVyCitDaGFuZ2VMb2cuc3ltNTNjOHh4CisJLSBDaGFuZ2VzIHRvIHN5bTUzYzh4eCBkcml2ZXIKK0NoYW5nZUxvZy5zeW01M2M4eHhfMgorCS0gQ2hhbmdlcyB0byBzZWNvbmQgZ2VuZXJhdGlvbiBvZiBzeW01M2M4eHggZHJpdmVyCitGbGFzaFBvaW50LnR4dAorCS0gaW5mbyBvbiBkcml2ZXIgZm9yIEJ1c0xvZ2ljIEZsYXNoUG9pbnQgYWRhcHRlcnMKK0xJQ0VOU0UuRmxhc2hQb2ludAorCS0gTGljZW5jZSBvZiB0aGUgRmxhc2hwb2ludCBkcml2ZXIKK015bGV4LnR4dAorCS0gaW5mbyBvbiBkcml2ZXIgZm9yIE15bGV4IGFkYXB0ZXJzCitOaW5qYVNDU0kudHh0CisJLSBpbmZvIG9uIFdvcmtCaVQgTmluamFTQ1NJLTMyLzMyQmkgZHJpdmVyCithaGExNTJ4LnR4dAorCS0gaW5mbyBvbiBkcml2ZXIgZm9yIEFkYXB0ZWMgQUhBMTUyeCBiYXNlZCBhZGFwdGVycworYWljN3h4eC50eHQKKwktIGluZm8gb24gZHJpdmVyIGZvciBBZGFwdGVjIGNvbnRyb2xsZXJzCithaWM3eHh4X29sZC50eHQKKwktIGluZm8gb24gZHJpdmVyIGZvciBBZGFwdGVjIGNvbnRyb2xsZXJzLCBvbGQgZ2VuZXJhdGlvbgorY3BxZmMudHh0CisJLSBpbmZvIG9uIGRyaXZlciBmb3IgQ29tcGFxIFRhY2h5b24gVFMgYWRhcHRlcnMKK2RwdGkudHh0CisJLSBpbmZvIG9uIGRyaXZlciBmb3IgRFBUIFNtYXJ0UkFJRCBhbmQgQWRhcHRlYyBJMk8gUkFJRCBiYXNlZCBhZGFwdGVycworZHRjM3g4MC50eHQKKwktIGluZm8gb24gZHJpdmVyIGZvciBEVEMgMng4MCBiYXNlZCBhZGFwdGVycworZ19OQ1I1MzgwLnR4dAorCS0gaW5mbyBvbiBkcml2ZXIgZm9yIE5DUjUzODAgYW5kIE5DUjUzYzQwMCBiYXNlZCBhZGFwdGVycworaWJtbWNhLnR4dAorCS0gaW5mbyBvbiBkcml2ZXIgZm9yIElCTSBhZGFwdGVycyB3aXRoIE1DQSBidXMKK2luMjAwMC50eHQKKwktIGluZm8gb24gaW4yMDAwIGRyaXZlcgorbmNyNTNjN3h4LnR4dAorCS0gaW5mbyBvbiBkcml2ZXIgZm9yIE5DUjUzYzd4eCBiYXNlZCBhZGFwdGVycworbmNyNTNjOHh4LnR4dAorCS0gaW5mbyBvbiBkcml2ZXIgZm9yIE5DUjUzYzh4eCBiYXNlZCBhZGFwdGVycworb3NzdC50eHQKKwktIGluZm8gb24gZHJpdmVyIGZvciBPblN0cmVhbSBTQy14MCBTQ1NJIHRhcGUKK3BwYS50eHQKKwktIGluZm8gb24gZHJpdmVyIGZvciBJT21lZ2EgemlwIGRyaXZlCitxbG9naWNmYXMudHh0CisJLSBpbmZvIG9uIGRyaXZlciBmb3IgUUxvZ2ljIEZBU3h4eCBiYXNlZCBhZGFwdGVycworcWxvZ2ljaXNwLnR4dAorCS0gaW5mbyBvbiBkcml2ZXIgZm9yIFFMb2dpYyBJU1AgMTAyMCBiYXNlZCBhZGFwdGVycworc2NzaS1nZW5lcmljLnR4dAorCS0gaW5mbyBvbiB0aGUgc2cgZHJpdmVyIGZvciBnZW5lcmljIChub24tZGlzay9DRC90YXBlKSBTQ1NJIGRldmljZXMuCitzY3NpLnR4dAorCS0gc2hvcnQgYmx1cmIgb24gdXNpbmcgU0NTSSBzdXBwb3J0IGFzIGEgbW9kdWxlLgorc2NzaV9taWRfbG93X2FwaS50eHQKKwktIGluZm8gb24gQVBJIGJldHdlZW4gU0NTSSBsYXllciBhbmQgbG93IGxldmVsIGRyaXZlcnMKK3N0LnR4dAorCS0gaW5mbyBvbiBzY3NpIHRhcGUgZHJpdmVyCitzeW01M2M1MDBfY3MudHh0CisJLSBpbmZvIG9uIFBDTUNJQSBkcml2ZXIgZm9yIFN5bWJpb3MgTG9naWMgNTNjNTAwIGJhc2VkIGFkYXB0ZXJzCitzeW01M2M4eHhfMi50eHQKKwktIGluZm8gb24gc2Vjb25kIGdlbmVyYXRpb24gZHJpdmVyIGZvciBzeW01M2M4eHggYmFzZWQgYWRhcHRlcnMKK3Rtc2NzaW0udHh0CisJLSBpbmZvIG9uIGRyaXZlciBmb3IgQU01M2M5NzQgYmFzZWQgYWRhcHRlcnMKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vc2NzaS81M2M3MDAudHh0IGIvRG9jdW1lbnRhdGlvbi9zY3NpLzUzYzcwMC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGRhNjgxZAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vc2NzaS81M2M3MDAudHh0CkBAIC0wLDAgKzEsMTU0IEBACitHZW5lcmFsIERlc2NyaXB0aW9uCis9PT09PT09PT09PT09PT09PT09CisKK1RoaXMgZHJpdmVyIHN1cHBvcnRzIHRoZSA1M2M3MDAgYW5kIDUzYzcwMC02NiBjaGlwcy4gIEl0IGFsc28gc3VwcG9ydHMKK3RoZSA1M2M3MTAgYnV0IG9ubHkgaW4gNTNjNzAwIGVtdWxhdGlvbiBtb2RlLiAgSXQgaXMgZnVsbCBmZWF0dXJlZCBhbmQKK2RvZXMgc3luYyAoLTY2IGFuZCA3MTAgb25seSksIGRpc2Nvbm5lY3RzIGFuZCB0YWcgY29tbWFuZCBxdWV1ZWluZy4KKworU2luY2UgdGhlIDUzYzcwMCBtdXN0IGJlIGludGVyZmFjZWQgdG8gYSBidXMsIHlvdSBuZWVkIHRvIHdyYXBwZXIgdGhlCitjYXJkIGRldGVjdG9yIGFyb3VuZCB0aGlzIGRyaXZlci4gIEZvciBhbiBleGFtcGxlLCBzZWUgdGhlCitOQ1JfRDcwMC5bY2hdIG9yIGxhc2k3MDAuW2NoXSBmaWxlcy4KKworVGhlIGNvbW1lbnRzIGluIHRoZSA1M2M3MDAuW2NoXSBmaWxlcyB0ZWxsIHlvdSB3aGljaCBwYXJ0cyB5b3UgbmVlZCB0bworZmlsbCBpbiB0byBnZXQgdGhlIGRyaXZlciB3b3JraW5nLgorCisKK0NvbXBpbGUgVGltZSBGbGFncworPT09PT09PT09PT09PT09PT09CisKK1RoZSBkcml2ZXIgbWF5IGJlIGVpdGhlciBpbyBtYXBwZWQgb3IgbWVtb3J5IG1hcHBlZC4gIFRoaXMgaXMKK3NlbGVjdGFibGUgYnkgY29uZmlndXJhdGlvbiBmbGFnczoKKworQ09ORklHXzUzQzcwMF9NRU1fTUFQUEVECisKK2RlZmluZSBpZiB0aGUgZHJpdmVyIGlzIG1lbW9yeSBtYXBwZWQuCisKK0NPTkZJR181M0M3MDBfSU9fTUFQUEVECisKK2RlZmluZSBpZiB0aGUgZHJpdmVyIGlzIHRvIGJlIGlvIG1hcHBlZC4KKworT25lIG9yIG90aGVyIG9mIHRoZSBhYm92ZSBmbGFncyAqbXVzdCogYmUgZGVmaW5lZC4KKworT3RoZXIgZmxhZ3MgYXJlOgorCitDT05GSUdfNTNDNzAwX0xFX09OX0JFCisKK2RlZmluZSBpZiB0aGUgY2hpcHNldCBtdXN0IGJlIHN1cHBvcnRlZCBpbiBsaXR0bGUgZW5kaWFuIG1vZGUgb24gYSBiaWcKK2VuZGlhbiBhcmNoaXRlY3R1cmUgKHVzZWQgZm9yIHRoZSA3MDAgb24gcGFyaXNjKS4KKworQ09ORklHXzUzQzcwMF9VU0VfQ09OU0lTVEVOVAorCithbGxvY2F0ZSBjb25zaXN0ZW50IG1lbW9yeSAoc2hvdWxkIG9ubHkgYmUgdXNlZCBpZiB5b3VyIGFyY2hpdGVjdHVyZQoraGFzIGEgbWl4dHVyZSBvZiBjb25zaXN0ZW50IGFuZCBpbmNvbnNpc3RlbnQgbWVtb3J5KS4gIEZ1bGx5Citjb25zaXN0ZW50IG9yIGZ1bGx5IGluY29uc2lzdGVudCBhcmNoaXRlY3R1cmVzIHNob3VsZCBub3QgZGVmaW5lIHRoaXMuCisKKworVXNpbmcgdGhlIENoaXAgQ29yZSBEcml2ZXIKKz09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0luIG9yZGVyIHRvIHBsdW1iIHRoZSA1M2M3MDAgY2hpcCBjb3JlIGRyaXZlciBpbnRvIGEgd29ya2luZyBTQ1NJCitkcml2ZXIsIHlvdSBuZWVkIHRvIGtub3cgdGhyZWUgdGhpbmdzIGFib3V0IHRoZSB3YXkgdGhlIGNoaXAgaXMgd2lyZWQKK2ludG8geW91ciBzeXN0ZW0gKG9yIGV4cGFuc2lvbiBjYXJkKS4KKworMS4gVGhlIGNsb2NrIHNwZWVkIG9mIHRoZSBTQ1NJIGNvcmUKKzIuIFRoZSBpbnRlcnJ1cHQgbGluZSB1c2VkCiszLiBUaGUgbWVtb3J5IChvciBpbyBzcGFjZSkgbG9jYXRpb24gb2YgdGhlIDUzYzcwMCByZWdpc3RlcnMuCisKK09wdGlvbmFsbHksIHlvdSBtYXkgYWxzbyBuZWVkIHRvIGtub3cgb3RoZXIgdGhpbmdzLCBsaWtlIGhvdyB0byByZWFkCit0aGUgU0NTSSBJZCBmcm9tIHRoZSBjYXJkIGJpb3Mgb3Igd2hldGhlciB0aGUgY2hpcCBpcyB3aXJlZCBmb3IKK2RpZmZlcmVudGlhbCBvcGVyYXRpb24uCisKK1VzdWFsbHkgeW91IGNhbiBmaW5kIGl0ZW1zIDIuIGFuZCAzLiBmcm9tIGdlbmVyYWwgc3BlYy4gZG9jdW1lbnRzIG9yCitldmVuIGJ5IGV4YW1pbmluZyB0aGUgY29uZmlndXJhdGlvbiBvZiBhIHdvcmtpbmcgZHJpdmVyIHVuZGVyIGFub3RoZXIKK29wZXJhdGluZyBzeXN0ZW0uCisKK1RoZSBjbG9jayBzcGVlZCBpcyB1c3VhbGx5IGJ1cmllZCBkZWVwIGluIHRoZSB0ZWNobmljYWwgbGl0ZXJhdHVyZS4KK0l0IGlzIHJlcXVpcmVkIGJlY2F1c2UgaXQgaXMgdXNlZCB0byBzZXQgdXAgYm90aCB0aGUgc3luY2hyb25vdXMgYW5kCithc3luY2hyb25vdXMgZGl2aWRlcnMgZm9yIHRoZSBjaGlwLiAgQXMgYSBnZW5lcmFsIHJ1bGUgb2YgdGh1bWIsCittYW51ZmFjdHVyZXJzIHNldCB0aGUgY2xvY2sgc3BlZWQgYXQgdGhlIGxvd2VzdCBwb3NzaWJsZSBzZXR0aW5nCitjb25zaXN0ZW50IHdpdGggdGhlIGJlc3Qgb3BlcmF0aW9uIG9mIHRoZSBjaGlwIChhbHRob3VnaCBzb21lIGNob29zZQordG8gZHJpdmUgaXQgb2ZmIHRoZSBDUFUgb3IgYnVzIGNsb2NrIHJhdGhlciB0aGFuIGdvaW5nIHRvIHRoZSBleHBlbnNlCitvZiBhbiBleHRyYSBjbG9jayBjaGlwKS4gIFRoZSBiZXN0IG9wZXJhdGlvbiBjbG9jayBzcGVlZHMgYXJlOgorCis1M2M3MDAgLSAyNU1IegorNTNjNzAwLTY2IC0gNTBNSHoKKzUzYzcxMCAtIDQwTWh6CisKK1dyaXRpbmcgWW91ciBHbHVlIERyaXZlcgorPT09PT09PT09PT09PT09PT09PT09PT09CisKK1RoaXMgd2lsbCBiZSBhIHN0YW5kYXJkIFNDU0kgZHJpdmVyIChJIGRvbid0IGtub3cgb2YgYSBnb29kIGRvY3VtZW50CitkZXNjcmliaW5nIHRoaXMsIGp1c3QgY29weSBmcm9tIHNvbWUgb3RoZXIgZHJpdmVyKSB3aXRoIGF0IGxlYXN0IGEKK2RldGVjdCBhbmQgcmVsZWFzZSBlbnRyeS4KKworSW4gdGhlIGRldGVjdCByb3V0aW5lLCB5b3UgbmVlZCB0byBhbGxvY2F0ZSBhIHN0cnVjdAorTkNSXzcwMF9Ib3N0X1BhcmFtZXRlcnMgc2l6ZWQgbWVtb3J5IGFyZWEgYW5kIGNsZWFyIGl0IChzbyB0aGF0IHRoZQorZGVmYXVsdCB2YWx1ZXMgZm9yIGV2ZXJ5dGhpbmcgYXJlIDApLiAgVGhlbiB5b3UgbXVzdCBmaWxsIGluIHRoZQorcGFyYW1ldGVycyB0aGF0IG1hdHRlciB0byB5b3UgKHNlZSBiZWxvdyksIHBsdW1iIHRoZSBOQ1JfNzAwX2ludHIKK3JvdXRpbmUgaW50byB0aGUgaW50ZXJydXB0IGxpbmUgYW5kIGNhbGwgTkNSXzcwMF9kZXRlY3Qgd2l0aCB0aGUgaG9zdAordGVtcGxhdGUgYW5kIHRoZSBuZXcgcGFyYW1ldGVycyBhcyBhcmd1bWVudHMuICBZb3Ugc2hvdWxkIGFsc28gY2FsbAordGhlIHJlbGV2YW50IHJlcXVlc3RfKl9yZWdpb24gZnVuY3Rpb24gYW5kIHBsYWNlIHRoZSByZWdpc3RlciBiYXNlCithZGRyZXNzIGludG8gdGhlIGBiYXNlJyBwb2ludGVyIG9mIHRoZSBob3N0IHBhcmFtZXRlcnMuCisKK0luIHRoZSByZWxlYXNlIHJvdXRpbmUsIHlvdSBtdXN0IGZyZWUgdGhlIE5DUl83MDBfSG9zdF9QYXJhbWV0ZXJzIHRoYXQKK3lvdSBhbGxvY2F0ZWQsIGNhbGwgdGhlIGNvcnJlc3BvbmRpbmcgcmVsZWFzZV8qX3JlZ2lvbiBhbmQgZnJlZSB0aGUKK2ludGVycnVwdC4KKworSGFuZGxpbmcgSW50ZXJydXB0cworLS0tLS0tLS0tLS0tLS0tLS0tLQorCitJbiBnZW5lcmFsLCB5b3Ugc2hvdWxkIGp1c3QgcGx1bWIgdGhlIGNhcmQncyBpbnRlcnJ1cHQgbGluZSBpbiB3aXRoIAorCityZXF1ZXN0X2lycShpcnEsIE5DUl83MDBfaW50ciwgPGlycSBmbGFncz4sIDxkcml2ZXIgbmFtZT4sIGhvc3QpOworCit3aGVyZSBob3N0IGlzIHRoZSByZXR1cm4gZnJvbSB0aGUgcmVsZXZhbnQgTkNSXzcwMF9kZXRlY3QoKSByb3V0aW5lLgorCitZb3UgbWF5IGFsc28gd3JpdGUgeW91ciBvd24gaW50ZXJydXB0IGhhbmRsaW5nIHJvdXRpbmUgd2hpY2ggY2FsbHMKK05DUl83MDBfaW50cigpIGRpcmVjdGx5LiAgSG93ZXZlciwgeW91IHNob3VsZCBvbmx5IHJlYWxseSBkbyB0aGlzIGlmCit5b3UgaGF2ZSBhIGNhcmQgd2l0aCBtb3JlIHRoYW4gb25lIGNoaXAgb24gaXQgYW5kIHlvdSBjYW4gcmVhZCBhCityZWdpc3RlciB0byB0ZWxsIHdoaWNoIHNldCBvZiBjaGlwcyB3YW50cyB0aGUgaW50ZXJydXB0LgorCitTZXR0YWJsZSBOQ1JfNzAwX0hvc3RfUGFyYW1ldGVycworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlIGZvbGxvd2luZyBhcmUgYSBsaXN0IG9mIHRoZSB1c2VyIHNldHRhYmxlIHBhcmFtZXRlcnM6CisKK2Nsb2NrOiAoTUFOREFUT1JZKQorCitTZXQgdG8gdGhlIGNsb2NrIHNwZWVkIG9mIHRoZSBjaGlwIGluIE1Iei4KKworYmFzZTogKE1BTkRBVE9SWSkKKworc2V0IHRvIHRoZSBiYXNlIG9mIHRoZSBpbyBvciBtZW0gcmVnaW9uIGZvciB0aGUgcmVnaXN0ZXIgc2V0LiBPbiA2NAorYml0IGFyY2hpdGVjdHVyZXMgdGhpcyBpcyBvbmx5IDMyIGJpdHMgd2lkZSwgc28gdGhlIHJlZ2lzdGVycyBtdXN0IGJlCittYXBwZWQgaW50byB0aGUgbG93IDMyIGJpdHMgb2YgbWVtb3J5LgorCitwY2lfZGV2OiAoT1BUSU9OQUwpCisKK3NldCB0byB0aGUgUENJIGJvYXJkIGRldmljZS4gIExlYXZlIE5VTEwgZm9yIGEgbm9uLXBjaSBib2FyZC4gIFRoaXMgaXMKK3VzZWQgZm9yIHRoZSBwY2lfYWxsb2NfY29uc2lzdGVudCgpIGFuZCBwY2lfbWFwXyooKSBmdW5jdGlvbnMuCisKK2Rtb2RlX2V4dHJhOiAoT1BUSU9OQUwsIDUzYzcxMCBvbmx5KQorCitleHRyYSBmbGFncyBmb3IgdGhlIERNT0RFIHJlZ2lzdGVyLiAgVGhlc2UgYXJlIHVzZWQgdG8gY29udHJvbCBidXMKK291dHB1dCBwaW5zIG9uIHRoZSA3MTAuICBUaGUgc2V0dGluZ3Mgc2hvdWxkIGJlIGEgY29tYmluYXRpb24gb2YKK0RNT0RFX0ZDMSBhbmQgRE1PREVfRkMyLiAgV2hhdCB0aGVzZSBwaW5zIGFjdHVhbGx5IGRvIGlzIGVudGlyZWx5IHVwCit0byB0aGUgYm9hcmQgZGVzaWduZXIuICBVc3VhbGx5IGl0IGlzIHNhZmUgdG8gaWdub3JlIHRoaXMgc2V0dGluZy4KKworZGlmZmVyZW50aWFsOiAoT1BUSU9OQUwpCisKK3NldCB0byAxIGlmIHRoZSBjaGlwIGRyaXZlcyBhIGRpZmZlcmVudGlhbCBidXMuCisKK2ZvcmNlX2xlX29uX2JlOiAoT1BUSU9OQUwsIG9ubHkgaWYgQ09ORklHXzUzQzcwMF9MRV9PTl9CRSBpcyBzZXQpCisKK3NldCB0byAxIGlmIHRoZSBjaGlwIGlzIG9wZXJhdGluZyBpbiBsaXR0bGUgZW5kaWFuIG1vZGUgb24gYSBiaWcKK2VuZGlhbiBhcmNoaXRlY3R1cmUuCisKK2NoaXA3MTA6IChPUFRJT05BTCkKKworc2V0IHRvIDEgaWYgdGhlIGNoaXAgaXMgYSA1M2M3MTAuCisKK2J1cnN0X2Rpc2FibGU6IChPUFRJT05BTCwgNTNjNzEwIG9ubHkpCisKK2Rpc2FibGUgOCBieXRlIGJ1cnN0aW5nIGZvciBETUEgdHJhbnNmZXJzLgorCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3Njc2kvQnVzTG9naWMudHh0IGIvRG9jdW1lbnRhdGlvbi9zY3NpL0J1c0xvZ2ljLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ODAyM2JhCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9zY3NpL0J1c0xvZ2ljLnR4dApAQCAtMCwwICsxLDU2NiBAQAorCSAgIEJ1c0xvZ2ljIE11bHRpTWFzdGVyIGFuZCBGbGFzaFBvaW50IFNDU0kgRHJpdmVyIGZvciBMaW51eAorCisJCQkgVmVyc2lvbiAyLjAuMTUgZm9yIExpbnV4IDIuMAorCQkJIFZlcnNpb24gMi4xLjE1IGZvciBMaW51eCAyLjEKKworCQkJICAgICAgUFJPRFVDVElPTiBSRUxFQVNFCisKKwkJCQkxNyBBdWd1c3QgMTk5OAorCisJCQkgICAgICAgTGVvbmFyZCBOLiBadWJrb2ZmCisJCQkgICAgICAgRGFuZGVsaW9uIERpZ2l0YWwKKwkJCSAgICAgICBsbnpAZGFuZGVsaW9uLmNvbQorCisJIENvcHlyaWdodCAxOTk1LTE5OTggYnkgTGVvbmFyZCBOLiBadWJrb2ZmIDxsbnpAZGFuZGVsaW9uLmNvbT4KKworCisJCQkJIElOVFJPRFVDVElPTgorCitCdXNMb2dpYywgSW5jLiBkZXNpZ25lZCBhbmQgbWFudWZhY3R1cmVkIGEgdmFyaWV0eSBvZiBoaWdoIHBlcmZvcm1hbmNlIFNDU0kKK2hvc3QgYWRhcHRlcnMgd2hpY2ggc2hhcmUgYSBjb21tb24gcHJvZ3JhbW1pbmcgaW50ZXJmYWNlIGFjcm9zcyBhIGRpdmVyc2UKK2NvbGxlY3Rpb24gb2YgYnVzIGFyY2hpdGVjdHVyZXMgYnkgdmlydHVlIG9mIHRoZWlyIE11bHRpTWFzdGVyIEFTSUMgdGVjaG5vbG9neS4KK0J1c0xvZ2ljIHdhcyBhY3F1aXJlZCBieSBNeWxleCBDb3Jwb3JhdGlvbiBpbiBGZWJydWFyeSAxOTk2LCBidXQgdGhlIHByb2R1Y3RzCitzdXBwb3J0ZWQgYnkgdGhpcyBkcml2ZXIgb3JpZ2luYXRlZCB1bmRlciB0aGUgQnVzTG9naWMgbmFtZSBhbmQgc28gdGhhdCBuYW1lIGlzCityZXRhaW5lZCBpbiB0aGUgc291cmNlIGNvZGUgYW5kIGRvY3VtZW50YXRpb24uCisKK1RoaXMgZHJpdmVyIHN1cHBvcnRzIGFsbCBwcmVzZW50IEJ1c0xvZ2ljIE11bHRpTWFzdGVyIEhvc3QgQWRhcHRlcnMsIGFuZCBzaG91bGQKK3N1cHBvcnQgYW55IGZ1dHVyZSBNdWx0aU1hc3RlciBkZXNpZ25zIHdpdGggbGl0dGxlIG9yIG5vIG1vZGlmaWNhdGlvbi4gIE1vcmUKK3JlY2VudGx5LCBCdXNMb2dpYyBpbnRyb2R1Y2VkIHRoZSBGbGFzaFBvaW50IEhvc3QgQWRhcHRlcnMsIHdoaWNoIGFyZSBsZXNzCitjb3N0bHkgYW5kIHJlbHkgb24gdGhlIGhvc3QgQ1BVLCByYXRoZXIgdGhhbiBpbmNsdWRpbmcgYW4gb25ib2FyZCBwcm9jZXNzb3IuCitEZXNwaXRlIG5vdCBoYXZpbmcgYW4gb25ib2FyZCBDUFUsIHRoZSBGbGFzaFBvaW50IEhvc3QgQWRhcHRlcnMgcGVyZm9ybSB2ZXJ5Cit3ZWxsIGFuZCBoYXZlIHZlcnkgbG93IGNvbW1hbmQgbGF0ZW5jeS4gIEJ1c0xvZ2ljIGhhcyByZWNlbnRseSBwcm92aWRlZCBtZSB3aXRoCit0aGUgRmxhc2hQb2ludCBEcml2ZXIgRGV2ZWxvcGVyJ3MgS2l0LCB3aGljaCBjb21wcmlzZXMgZG9jdW1lbnRhdGlvbiBhbmQgZnJlZWx5CityZWRpc3RyaWJ1dGFibGUgc291cmNlIGNvZGUgZm9yIHRoZSBGbGFzaFBvaW50IFNDQ0IgTWFuYWdlci4gIFRoZSBTQ0NCIE1hbmFnZXIKK2lzIHRoZSBsaWJyYXJ5IG9mIGNvZGUgdGhhdCBydW5zIG9uIHRoZSBob3N0IENQVSBhbmQgcGVyZm9ybXMgZnVuY3Rpb25zCithbmFsb2dvdXMgdG8gdGhlIGZpcm13YXJlIG9uIHRoZSBNdWx0aU1hc3RlciBIb3N0IEFkYXB0ZXJzLiAgVGhhbmtzIHRvIHRoZWlyCitoYXZpbmcgcHJvdmlkZWQgdGhlIFNDQ0IgTWFuYWdlciwgdGhpcyBkcml2ZXIgbm93IHN1cHBvcnRzIHRoZSBGbGFzaFBvaW50IEhvc3QKK0FkYXB0ZXJzIGFzIHdlbGwuCisKK015IHByaW1hcnkgZ29hbHMgaW4gd3JpdGluZyB0aGlzIGNvbXBsZXRlbHkgbmV3IEJ1c0xvZ2ljIGRyaXZlciBmb3IgTGludXggYXJlCit0byBhY2hpZXZlIHRoZSBmdWxsIHBlcmZvcm1hbmNlIHRoYXQgQnVzTG9naWMgU0NTSSBIb3N0IEFkYXB0ZXJzIGFuZCBtb2Rlcm4KK1NDU0kgcGVyaXBoZXJhbHMgYXJlIGNhcGFibGUgb2YsIGFuZCB0byBwcm92aWRlIGEgaGlnaGx5IHJvYnVzdCBkcml2ZXIgdGhhdCBjYW4KK2JlIGRlcGVuZGVkIHVwb24gZm9yIGhpZ2ggcGVyZm9ybWFuY2UgbWlzc2lvbiBjcml0aWNhbCBhcHBsaWNhdGlvbnMuICBBbGwgb2YKK3RoZSBtYWpvciBwZXJmb3JtYW5jZSBmZWF0dXJlcyBjYW4gYmUgY29uZmlndXJlZCBmcm9tIHRoZSBMaW51eCBrZXJuZWwgY29tbWFuZAorbGluZSBvciBhdCBtb2R1bGUgaW5pdGlhbGl6YXRpb24gdGltZSwgYWxsb3dpbmcgaW5kaXZpZHVhbCBpbnN0YWxsYXRpb25zIHRvCit0dW5lIGRyaXZlciBwZXJmb3JtYW5jZSBhbmQgZXJyb3IgcmVjb3ZlcnkgdG8gdGhlaXIgcGFydGljdWxhciBuZWVkcy4KKworVGhlIGxhdGVzdCBpbmZvcm1hdGlvbiBvbiBMaW51eCBzdXBwb3J0IGZvciBCdXNMb2dpYyBTQ1NJIEhvc3QgQWRhcHRlcnMsIGFzCit3ZWxsIGFzIHRoZSBtb3N0IHJlY2VudCByZWxlYXNlIG9mIHRoaXMgZHJpdmVyIGFuZCB0aGUgbGF0ZXN0IGZpcm13YXJlIGZvciB0aGUKK0JULTk0OC85NTgvOTU4RCwgd2lsbCBhbHdheXMgYmUgYXZhaWxhYmxlIGZyb20gbXkgTGludXggSG9tZSBQYWdlIGF0IFVSTAorImh0dHA6Ly93d3cuZGFuZGVsaW9uLmNvbS9MaW51eC8iLgorCitCdWcgcmVwb3J0cyBzaG91bGQgYmUgc2VudCB2aWEgZWxlY3Ryb25pYyBtYWlsIHRvICJsbnpAZGFuZGVsaW9uLmNvbSIuICBQbGVhc2UKK2luY2x1ZGUgd2l0aCB0aGUgYnVnIHJlcG9ydCB0aGUgY29tcGxldGUgY29uZmlndXJhdGlvbiBtZXNzYWdlcyByZXBvcnRlZCBieSB0aGUKK2RyaXZlciBhbmQgU0NTSSBzdWJzeXN0ZW0gYXQgc3RhcnR1cCwgYWxvbmcgd2l0aCBhbnkgc3Vic2VxdWVudCBzeXN0ZW0gbWVzc2FnZXMKK3JlbGV2YW50IHRvIFNDU0kgb3BlcmF0aW9ucywgYW5kIGEgZGV0YWlsZWQgZGVzY3JpcHRpb24gb2YgeW91ciBzeXN0ZW0ncworaGFyZHdhcmUgY29uZmlndXJhdGlvbi4KKworTXlsZXggaGFzIGJlZW4gYW4gZXhjZWxsZW50IGNvbXBhbnkgdG8gd29yayB3aXRoIGFuZCBJIGhpZ2hseSByZWNvbW1lbmQgdGhlaXIKK3Byb2R1Y3RzIHRvIHRoZSBMaW51eCBjb21tdW5pdHkuICBJbiBOb3ZlbWJlciAxOTk1LCBJIHdhcyBvZmZlcmVkIHRoZQorb3Bwb3J0dW5pdHkgdG8gYmVjb21lIGEgYmV0YSB0ZXN0IHNpdGUgZm9yIHRoZWlyIGxhdGVzdCBNdWx0aU1hc3RlciBwcm9kdWN0LAordGhlIEJULTk0OCBQQ0kgVWx0cmEgU0NTSSBIb3N0IEFkYXB0ZXIsIGFuZCB0aGVuIGFnYWluIGZvciB0aGUgQlQtOTU4IFBDSSBXaWRlCitVbHRyYSBTQ1NJIEhvc3QgQWRhcHRlciBpbiBKYW51YXJ5IDE5OTYuICBUaGlzIHdhcyBtdXR1YWxseSBiZW5lZmljaWFsIHNpbmNlCitNeWxleCByZWNlaXZlZCBhIGRlZ3JlZSBhbmQga2luZCBvZiB0ZXN0aW5nIHRoYXQgdGhlaXIgb3duIHRlc3RpbmcgZ3JvdXAgY2Fubm90CityZWFkaWx5IGFjaGlldmUsIGFuZCB0aGUgTGludXggY29tbXVuaXR5IGhhcyBhdmFpbGFibGUgaGlnaCBwZXJmb3JtYW5jZSBob3N0CithZGFwdGVycyB0aGF0IGhhdmUgYmVlbiB3ZWxsIHRlc3RlZCB3aXRoIExpbnV4IGV2ZW4gYmVmb3JlIGJlaW5nIGJyb3VnaHQgdG8KK21hcmtldC4gIFRoaXMgcmVsYXRpb25zaGlwIGhhcyBhbHNvIGdpdmVuIG1lIHRoZSBvcHBvcnR1bml0eSB0byBpbnRlcmFjdAorZGlyZWN0bHkgd2l0aCB0aGVpciB0ZWNobmljYWwgc3RhZmYsIHRvIHVuZGVyc3RhbmQgbW9yZSBhYm91dCB0aGUgaW50ZXJuYWwKK3dvcmtpbmdzIG9mIHRoZWlyIHByb2R1Y3RzLCBhbmQgaW4gdHVybiB0byBlZHVjYXRlIHRoZW0gYWJvdXQgdGhlIG5lZWRzIGFuZAorcG90ZW50aWFsIG9mIHRoZSBMaW51eCBjb21tdW5pdHkuCisKK01vcmUgcmVjZW50bHksIE15bGV4IGhhcyByZWFmZmlybWVkIHRoZSBjb21wYW55J3MgaW50ZXJlc3QgaW4gc3VwcG9ydGluZyB0aGUKK0xpbnV4IGNvbW11bml0eSwgYW5kIEkgYW0gbm93IHdvcmtpbmcgb24gYSBMaW51eCBkcml2ZXIgZm9yIHRoZSBEQUM5NjAgUENJIFJBSUQKK0NvbnRyb2xsZXJzLiAgTXlsZXgncyBpbnRlcmVzdCBhbmQgc3VwcG9ydCBpcyBncmVhdGx5IGFwcHJlY2lhdGVkLgorCitVbmxpa2Ugc29tZSBvdGhlciB2ZW5kb3JzLCBpZiB5b3UgY29udGFjdCBNeWxleCBUZWNobmljYWwgU3VwcG9ydCB3aXRoIGEKK3Byb2JsZW0gYW5kIGFyZSBydW5uaW5nIExpbnV4LCB0aGV5IHdpbGwgbm90IHRlbGwgeW91IHRoYXQgeW91ciB1c2Ugb2YgdGhlaXIKK3Byb2R1Y3RzIGlzIHVuc3VwcG9ydGVkLiAgVGhlaXIgbGF0ZXN0IHByb2R1Y3QgbWFya2V0aW5nIGxpdGVyYXR1cmUgZXZlbiBzdGF0ZXMKKyJNeWxleCBTQ1NJIGhvc3QgYWRhcHRlcnMgYXJlIGNvbXBhdGlibGUgd2l0aCBhbGwgbWFqb3Igb3BlcmF0aW5nIHN5c3RlbXMKK2luY2x1ZGluZzogLi4uIExpbnV4IC4uLiIuCisKK015bGV4IENvcnBvcmF0aW9uIGlzIGxvY2F0ZWQgYXQgMzQ1NTEgQXJkZW53b29kIEJsdmQuLCBGcmVtb250LCBDYWxpZm9ybmlhCis5NDU1NSwgVVNBIGFuZCBjYW4gYmUgcmVhY2hlZCBhdCA1MTAvNzk2LTYxMDAgb3Igb24gdGhlIFdvcmxkIFdpZGUgV2ViIGF0CitodHRwOi8vd3d3Lm15bGV4LmNvbS4gIE15bGV4IEhCQSBUZWNobmljYWwgU3VwcG9ydCBjYW4gYmUgcmVhY2hlZCBieSBlbGVjdHJvbmljCittYWlsIGF0IHRlY2hzdXBAbXlsZXguY29tLCBieSBWb2ljZSBhdCA1MTAvNjA4LTI0MDAsIG9yIGJ5IEZBWCBhdCA1MTAvNzQ1LTc3MTUuCitDb250YWN0IGluZm9ybWF0aW9uIGZvciBvZmZpY2VzIGluIEV1cm9wZSBhbmQgSmFwYW4gaXMgYXZhaWxhYmxlIG9uIHRoZSBXZWIKK3NpdGUuCisKKworCQkJCURSSVZFUiBGRUFUVVJFUworCitvIENvbmZpZ3VyYXRpb24gUmVwb3J0aW5nIGFuZCBUZXN0aW5nCisKKyAgRHVyaW5nIHN5c3RlbSBpbml0aWFsaXphdGlvbiwgdGhlIGRyaXZlciByZXBvcnRzIGV4dGVuc2l2ZWx5IG9uIHRoZSBob3N0CisgIGFkYXB0ZXIgaGFyZHdhcmUgY29uZmlndXJhdGlvbiwgaW5jbHVkaW5nIHRoZSBzeW5jaHJvbm91cyB0cmFuc2ZlciBwYXJhbWV0ZXJzCisgIHJlcXVlc3RlZCBhbmQgbmVnb3RpYXRlZCB3aXRoIGVhY2ggdGFyZ2V0IGRldmljZS4gIEF1dG9TQ1NJIHNldHRpbmdzIGZvcgorICBTeW5jaHJvbm91cyBOZWdvdGlhdGlvbiwgV2lkZSBOZWdvdGlhdGlvbiwgYW5kIERpc2Nvbm5lY3QvUmVjb25uZWN0IGFyZQorICByZXBvcnRlZCBmb3IgZWFjaCB0YXJnZXQgZGV2aWNlLCBhcyB3ZWxsIGFzIHRoZSBzdGF0dXMgb2YgVGFnZ2VkIFF1ZXVpbmcuCisgIElmIHRoZSBzYW1lIHNldHRpbmcgaXMgaW4gZWZmZWN0IGZvciBhbGwgdGFyZ2V0IGRldmljZXMsIHRoZW4gYSBzaW5nbGUgd29yZAorICBvciBwaHJhc2UgaXMgdXNlZDsgb3RoZXJ3aXNlLCBhIGxldHRlciBpcyBwcm92aWRlZCBmb3IgZWFjaCB0YXJnZXQgZGV2aWNlIHRvCisgIGluZGljYXRlIHRoZSBpbmRpdmlkdWFsIHN0YXR1cy4gIFRoZSBmb2xsb3dpbmcgZXhhbXBsZXMKKyAgc2hvdWxkIGNsYXJpZnkgdGhpcyByZXBvcnRpbmcgZm9ybWF0OgorCisgICAgU3luY2hyb25vdXMgTmVnb3RpYXRpb246IFVsdHJhCisKKyAgICAgIFN5bmNocm9ub3VzIG5lZ290aWF0aW9uIGlzIGVuYWJsZWQgZm9yIGFsbCB0YXJnZXQgZGV2aWNlcyBhbmQgdGhlIGhvc3QKKyAgICAgIGFkYXB0ZXIgd2lsbCBhdHRlbXB0IHRvIG5lZ290aWF0ZSBmb3IgMjAuMCBtZWdhLXRyYW5zZmVycy9zZWNvbmQuCisKKyAgICBTeW5jaHJvbm91cyBOZWdvdGlhdGlvbjogRmFzdAorCisgICAgICBTeW5jaHJvbm91cyBuZWdvdGlhdGlvbiBpcyBlbmFibGVkIGZvciBhbGwgdGFyZ2V0IGRldmljZXMgYW5kIHRoZSBob3N0CisgICAgICBhZGFwdGVyIHdpbGwgYXR0ZW1wdCB0byBuZWdvdGlhdGUgZm9yIDEwLjAgbWVnYS10cmFuc2ZlcnMvc2Vjb25kLgorCisgICAgU3luY2hyb25vdXMgTmVnb3RpYXRpb246IFNsb3cKKworICAgICAgU3luY2hyb25vdXMgbmVnb3RpYXRpb24gaXMgZW5hYmxlZCBmb3IgYWxsIHRhcmdldCBkZXZpY2VzIGFuZCB0aGUgaG9zdAorICAgICAgYWRhcHRlciB3aWxsIGF0dGVtcHQgdG8gbmVnb3RpYXRlIGZvciA1LjAgbWVnYS10cmFuc2ZlcnMvc2Vjb25kLgorCisgICAgU3luY2hyb25vdXMgTmVnb3RpYXRpb246IERpc2FibGVkCisKKyAgICAgIFN5bmNocm9ub3VzIG5lZ290aWF0aW9uIGlzIGRpc2FibGVkIGFuZCBhbGwgdGFyZ2V0IGRldmljZXMgYXJlIGxpbWl0ZWQgdG8KKyAgICAgIGFzeW5jaHJvbm91cyBvcGVyYXRpb24uCisKKyAgICBTeW5jaHJvbm91cyBOZWdvdGlhdGlvbjogVUZTTlVVVSNVVVVVVVVVVQorCisgICAgICBTeW5jaHJvbm91cyBuZWdvdGlhdGlvbiB0byBVbHRyYSBzcGVlZCBpcyBlbmFibGVkIGZvciB0YXJnZXQgZGV2aWNlcyAwCisgICAgICBhbmQgNCB0aHJvdWdoIDE1LCB0byBGYXN0IHNwZWVkIGZvciB0YXJnZXQgZGV2aWNlIDEsIHRvIFNsb3cgc3BlZWQgZm9yCisgICAgICB0YXJnZXQgZGV2aWNlIDIsIGFuZCBpcyBub3QgcGVybWl0dGVkIHRvIHRhcmdldCBkZXZpY2UgMy4gIFRoZSBob3N0CisgICAgICBhZGFwdGVyJ3MgU0NTSSBJRCBpcyByZXByZXNlbnRlZCBieSB0aGUgIiMiLgorCisgICAgVGhlIHN0YXR1cyBvZiBXaWRlIE5lZ290aWF0aW9uLCBEaXNjb25uZWN0L1JlY29ubmVjdCwgYW5kIFRhZ2dlZCBRdWV1aW5nCisgICAgYXJlIHJlcG9ydGVkIGFzICJFbmFibGVkIiwgRGlzYWJsZWQiLCBvciBhIHNlcXVlbmNlIG9mICJZIiBhbmQgIk4iIGxldHRlcnMuCisKK28gUGVyZm9ybWFuY2UgRmVhdHVyZXMKKworICBCdXNMb2dpYyBTQ1NJIEhvc3QgQWRhcHRlcnMgZGlyZWN0bHkgaW1wbGVtZW50IFNDU0ktMiBUYWdnZWQgUXVldWluZywgYW5kIHNvCisgIHN1cHBvcnQgaGFzIGJlZW4gaW5jbHVkZWQgaW4gdGhlIGRyaXZlciB0byB1dGlsaXplIHRhZ2dlZCBxdWV1aW5nIHdpdGggYW55CisgIHRhcmdldCBkZXZpY2VzIHRoYXQgcmVwb3J0IGhhdmluZyB0aGUgdGFnZ2VkIHF1ZXVpbmcgY2FwYWJpbGl0eS4gIFRhZ2dlZAorICBxdWV1aW5nIGFsbG93cyBmb3IgbXVsdGlwbGUgb3V0c3RhbmRpbmcgY29tbWFuZHMgdG8gYmUgaXNzdWVkIHRvIGVhY2ggdGFyZ2V0CisgIGRldmljZSBvciBsb2dpY2FsIHVuaXQsIGFuZCBjYW4gaW1wcm92ZSBJL08gcGVyZm9ybWFuY2Ugc3Vic3RhbnRpYWxseS4gIEluCisgIGFkZGl0aW9uLCBCdXNMb2dpYydzIFN0cmljdCBSb3VuZCBSb2JpbiBNb2RlIGlzIHVzZWQgdG8gb3B0aW1pemUgaG9zdCBhZGFwdGVyCisgIHBlcmZvcm1hbmNlLCBhbmQgc2NhdHRlci9nYXRoZXIgSS9PIGNhbiBzdXBwb3J0IGFzIG1hbnkgc2VnbWVudHMgYXMgY2FuIGJlCisgIGVmZmVjdGl2ZWx5IHV0aWxpemVkIGJ5IHRoZSBMaW51eCBJL08gc3Vic3lzdGVtLiAgQ29udHJvbCBvdmVyIHRoZSB1c2Ugb2YKKyAgdGFnZ2VkIHF1ZXVpbmcgZm9yIGVhY2ggdGFyZ2V0IGRldmljZSBhcyB3ZWxsIGFzIGluZGl2aWR1YWwgc2VsZWN0aW9uIG9mIHRoZQorICB0YWdnZWQgcXVldWUgZGVwdGggaXMgYXZhaWxhYmxlIHRocm91Z2ggZHJpdmVyIG9wdGlvbnMgcHJvdmlkZWQgb24gdGhlIGtlcm5lbAorICBjb21tYW5kIGxpbmUgb3IgYXQgbW9kdWxlIGluaXRpYWxpemF0aW9uIHRpbWUuICBCeSBkZWZhdWx0LCB0aGUgcXVldWUgZGVwdGgKKyAgaXMgZGV0ZXJtaW5lZCBhdXRvbWF0aWNhbGx5IGJhc2VkIG9uIHRoZSBob3N0IGFkYXB0ZXIncyB0b3RhbCBxdWV1ZSBkZXB0aCBhbmQKKyAgdGhlIG51bWJlciwgdHlwZSwgc3BlZWQsIGFuZCBjYXBhYmlsaXRpZXMgb2YgdGhlIHRhcmdldCBkZXZpY2VzIGZvdW5kLiAgSW4KKyAgYWRkaXRpb24sIHRhZ2dlZCBxdWV1aW5nIGlzIGF1dG9tYXRpY2FsbHkgZGlzYWJsZWQgd2hlbmV2ZXIgdGhlIGhvc3QgYWRhcHRlcgorICBmaXJtd2FyZSB2ZXJzaW9uIGlzIGtub3duIG5vdCB0byBpbXBsZW1lbnQgaXQgY29ycmVjdGx5LCBvciB3aGVuZXZlciBhIHRhZ2dlZAorICBxdWV1ZSBkZXB0aCBvZiAxIGlzIHNlbGVjdGVkLiAgVGFnZ2VkIHF1ZXVpbmcgaXMgYWxzbyBkaXNhYmxlZCBmb3IgaW5kaXZpZHVhbAorICB0YXJnZXQgZGV2aWNlcyBpZiBkaXNjb25uZWN0L3JlY29ubmVjdCBpcyBkaXNhYmxlZCBmb3IgdGhhdCBkZXZpY2UuCisKK28gUm9idXN0bmVzcyBGZWF0dXJlcworCisgIFRoZSBkcml2ZXIgaW1wbGVtZW50cyBleHRlbnNpdmUgZXJyb3IgcmVjb3ZlcnkgcHJvY2VkdXJlcy4gIFdoZW4gdGhlIGhpZ2hlcgorICBsZXZlbCBwYXJ0cyBvZiB0aGUgU0NTSSBzdWJzeXN0ZW0gcmVxdWVzdCB0aGF0IGEgdGltZWQgb3V0IGNvbW1hbmQgYmUgcmVzZXQsCisgIGEgc2VsZWN0aW9uIGlzIG1hZGUgYmV0d2VlbiBhIGZ1bGwgaG9zdCBhZGFwdGVyIGhhcmQgcmVzZXQgYW5kIFNDU0kgYnVzIHJlc2V0CisgIHZlcnN1cyBzZW5kaW5nIGEgYnVzIGRldmljZSByZXNldCBtZXNzYWdlIHRvIHRoZSBpbmRpdmlkdWFsIHRhcmdldCBkZXZpY2UKKyAgYmFzZWQgb24gdGhlIHJlY29tbWVuZGF0aW9uIG9mIHRoZSBTQ1NJIHN1YnN5c3RlbS4gIEVycm9yIHJlY292ZXJ5IHN0cmF0ZWdpZXMKKyAgYXJlIHNlbGVjdGFibGUgdGhyb3VnaCBkcml2ZXIgb3B0aW9ucyBpbmRpdmlkdWFsbHkgZm9yIGVhY2ggdGFyZ2V0IGRldmljZSwKKyAgYW5kIGFsc28gaW5jbHVkZSBzZW5kaW5nIGEgYnVzIGRldmljZSByZXNldCB0byB0aGUgc3BlY2lmaWMgdGFyZ2V0IGRldmljZQorICBhc3NvY2lhdGVkIHdpdGggdGhlIGNvbW1hbmQgYmVpbmcgcmVzZXQsIGFzIHdlbGwgYXMgc3VwcHJlc3NpbmcgZXJyb3IKKyAgcmVjb3ZlcnkgZW50aXJlbHkgdG8gYXZvaWQgcGVydHVyYmluZyBhbiBpbXByb3Blcmx5IGZ1bmN0aW9uaW5nIGRldmljZS4gIElmCisgIHRoZSBidXMgZGV2aWNlIHJlc2V0IGVycm9yIHJlY292ZXJ5IHN0cmF0ZWd5IGlzIHNlbGVjdGVkIGFuZCBzZW5kaW5nIGEgYnVzCisgIGRldmljZSByZXNldCBkb2VzIG5vdCByZXN0b3JlIGNvcnJlY3Qgb3BlcmF0aW9uLCB0aGUgbmV4dCBjb21tYW5kIHRoYXQgaXMKKyAgcmVzZXQgd2lsbCBmb3JjZSBhIGZ1bGwgaG9zdCBhZGFwdGVyIGhhcmQgcmVzZXQgYW5kIFNDU0kgYnVzIHJlc2V0LiAgU0NTSSBidXMKKyAgcmVzZXRzIGNhdXNlZCBieSBvdGhlciBkZXZpY2VzIGFuZCBkZXRlY3RlZCBieSB0aGUgaG9zdCBhZGFwdGVyIGFyZSBhbHNvCisgIGhhbmRsZWQgYnkgaXNzdWluZyBhIHNvZnQgcmVzZXQgdG8gdGhlIGhvc3QgYWRhcHRlciBhbmQgcmUtaW5pdGlhbGl6YXRpb24uCisgIEZpbmFsbHksIGlmIHRhZ2dlZCBxdWV1aW5nIGlzIGFjdGl2ZSBhbmQgbW9yZSB0aGFuIG9uZSBjb21tYW5kIHJlc2V0IG9jY3VycworICBpbiBhIDEwIG1pbnV0ZSBpbnRlcnZhbCwgb3IgaWYgYSBjb21tYW5kIHJlc2V0IG9jY3VycyB3aXRoaW4gdGhlIGZpcnN0IDEwCisgIG1pbnV0ZXMgb2Ygb3BlcmF0aW9uLCB0aGVuIHRhZ2dlZCBxdWV1aW5nIHdpbGwgYmUgZGlzYWJsZWQgZm9yIHRoYXQgdGFyZ2V0CisgIGRldmljZS4gIFRoZXNlIGVycm9yIHJlY292ZXJ5IG9wdGlvbnMgaW1wcm92ZSBvdmVyYWxsIHN5c3RlbSByb2J1c3RuZXNzIGJ5CisgIHByZXZlbnRpbmcgaW5kaXZpZHVhbCBlcnJhbnQgZGV2aWNlcyBmcm9tIGNhdXNpbmcgdGhlIHN5c3RlbSBhcyBhIHdob2xlIHRvCisgIGxvY2sgdXAgb3IgY3Jhc2gsIGFuZCB0aGVyZWJ5IGFsbG93aW5nIGEgY2xlYW4gc2h1dGRvd24gYW5kIHJlc3RhcnQgYWZ0ZXIgdGhlCisgIG9mZmVuZGluZyBjb21wb25lbnQgaXMgcmVtb3ZlZC4KKworbyBQQ0kgQ29uZmlndXJhdGlvbiBTdXBwb3J0CisKKyAgT24gUENJIHN5c3RlbXMgcnVubmluZyBrZXJuZWxzIGNvbXBpbGVkIHdpdGggUENJIEJJT1Mgc3VwcG9ydCBlbmFibGVkLCB0aGlzCisgIGRyaXZlciB3aWxsIGludGVycm9nYXRlIHRoZSBQQ0kgY29uZmlndXJhdGlvbiBzcGFjZSBhbmQgdXNlIHRoZSBJL08gcG9ydAorICBhZGRyZXNzZXMgYXNzaWduZWQgYnkgdGhlIHN5c3RlbSBCSU9TLCByYXRoZXIgdGhhbiB0aGUgSVNBIGNvbXBhdGlibGUgSS9PCisgIHBvcnQgYWRkcmVzc2VzLiAgVGhlIElTQSBjb21wYXRpYmxlIEkvTyBwb3J0IGFkZHJlc3MgaXMgdGhlbiBkaXNhYmxlZCBieSB0aGUKKyAgZHJpdmVyLiAgT24gUENJIHN5c3RlbXMgaXQgaXMgYWxzbyByZWNvbW1lbmRlZCB0aGF0IHRoZSBBdXRvU0NTSSB1dGlsaXR5IGJlCisgIHVzZWQgdG8gZGlzYWJsZSB0aGUgSVNBIGNvbXBhdGlibGUgSS9PIHBvcnQgZW50aXJlbHkgYXMgaXQgaXMgbm90IG5lY2Vzc2FyeS4KKyAgVGhlIElTQSBjb21wYXRpYmxlIEkvTyBwb3J0IGlzIGRpc2FibGVkIGJ5IGRlZmF1bHQgb24gdGhlIEJULTk0OC85NTgvOTU4RC4KKworbyAvcHJvYyBGaWxlIFN5c3RlbSBTdXBwb3J0CisKKyAgQ29waWVzIG9mIHRoZSBob3N0IGFkYXB0ZXIgY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbiB0b2dldGhlciB3aXRoIHVwZGF0ZWQKKyAgZGF0YSB0cmFuc2ZlciBhbmQgZXJyb3IgcmVjb3Zlcnkgc3RhdGlzdGljcyBhcmUgYXZhaWxhYmxlIHRocm91Z2ggdGhlCisgIC9wcm9jL3Njc2kvQnVzTG9naWMvPE4+IGludGVyZmFjZS4KKworbyBTaGFyZWQgSW50ZXJydXB0cyBTdXBwb3J0CisKKyAgT24gc3lzdGVtcyB0aGF0IHN1cHBvcnQgc2hhcmVkIGludGVycnVwdHMsIGFueSBudW1iZXIgb2YgQnVzTG9naWMgSG9zdAorICBBZGFwdGVycyBtYXkgc2hhcmUgdGhlIHNhbWUgaW50ZXJydXB0IHJlcXVlc3QgY2hhbm5lbC4KKworCisJCQkgICAgU1VQUE9SVEVEIEhPU1QgQURBUFRFUlMKKworVGhlIGZvbGxvd2luZyBsaXN0IGNvbXByaXNlcyB0aGUgc3VwcG9ydGVkIEJ1c0xvZ2ljIFNDU0kgSG9zdCBBZGFwdGVycyBhcyBvZgordGhlIGRhdGUgb2YgdGhpcyBkb2N1bWVudC4gIEl0IGlzIHJlY29tbWVuZGVkIHRoYXQgYW55b25lIHB1cmNoYXNpbmcgYSBCdXNMb2dpYworSG9zdCBBZGFwdGVyIG5vdCBpbiB0aGUgZm9sbG93aW5nIHRhYmxlIGNvbnRhY3QgdGhlIGF1dGhvciBiZWZvcmVoYW5kIHRvIHZlcmlmeQordGhhdCBpdCBpcyBvciB3aWxsIGJlIHN1cHBvcnRlZC4KKworRmxhc2hQb2ludCBTZXJpZXMgUENJIEhvc3QgQWRhcHRlcnM6CisKK0ZsYXNoUG9pbnQgTFQgKEJULTkzMCkJVWx0cmEgU0NTSS0zCitGbGFzaFBvaW50IExUIChCVC05MzBSKQlVbHRyYSBTQ1NJLTMgd2l0aCBSQUlEUGx1cworRmxhc2hQb2ludCBMVCAoQlQtOTIwKQlVbHRyYSBTQ1NJLTMgKEJULTkzMCB3aXRob3V0IEJJT1MpCitGbGFzaFBvaW50IERMIChCVC05MzIpCUR1YWwgQ2hhbm5lbCBVbHRyYSBTQ1NJLTMKK0ZsYXNoUG9pbnQgREwgKEJULTkzMlIpCUR1YWwgQ2hhbm5lbCBVbHRyYSBTQ1NJLTMgd2l0aCBSQUlEUGx1cworRmxhc2hQb2ludCBMVyAoQlQtOTUwKQlXaWRlIFVsdHJhIFNDU0ktMworRmxhc2hQb2ludCBMVyAoQlQtOTUwUikJV2lkZSBVbHRyYSBTQ1NJLTMgd2l0aCBSQUlEUGx1cworRmxhc2hQb2ludCBEVyAoQlQtOTUyKQlEdWFsIENoYW5uZWwgV2lkZSBVbHRyYSBTQ1NJLTMKK0ZsYXNoUG9pbnQgRFcgKEJULTk1MlIpCUR1YWwgQ2hhbm5lbCBXaWRlIFVsdHJhIFNDU0ktMyB3aXRoIFJBSURQbHVzCisKK011bHRpTWFzdGVyICJXIiBTZXJpZXMgSG9zdCBBZGFwdGVyczoKKworQlQtOTQ4CSAgICBQQ0kJCVVsdHJhIFNDU0ktMworQlQtOTU4CSAgICBQQ0kJCVdpZGUgVWx0cmEgU0NTSS0zCitCVC05NThECSAgICBQQ0kJCVdpZGUgRGlmZmVyZW50aWFsIFVsdHJhIFNDU0ktMworCitNdWx0aU1hc3RlciAiQyIgU2VyaWVzIEhvc3QgQWRhcHRlcnM6CisKK0JULTk0NkMJICAgIFBDSQkJRmFzdCBTQ1NJLTIKK0JULTk1NkMJICAgIFBDSQkJV2lkZSBGYXN0IFNDU0ktMgorQlQtOTU2Q0QgICAgUENJCQlXaWRlIERpZmZlcmVudGlhbCBGYXN0IFNDU0ktMgorQlQtNDQ1QwkgICAgVkxCCQlGYXN0IFNDU0ktMgorQlQtNzQ3QwkgICAgRUlTQQlGYXN0IFNDU0ktMgorQlQtNzU3QwkgICAgRUlTQQlXaWRlIEZhc3QgU0NTSS0yCitCVC03NTdDRCAgICBFSVNBCVdpZGUgRGlmZmVyZW50aWFsIEZhc3QgU0NTSS0yCitCVC01NDVDCSAgICBJU0EJCUZhc3QgU0NTSS0yCitCVC01NDBDRiAgICBJU0EJCUZhc3QgU0NTSS0yCisKK011bHRpTWFzdGVyICJTIiBTZXJpZXMgSG9zdCBBZGFwdGVyczoKKworQlQtNDQ1UwkgICAgVkxCCQlGYXN0IFNDU0ktMgorQlQtNzQ3UwkgICAgRUlTQQlGYXN0IFNDU0ktMgorQlQtNzQ3RAkgICAgRUlTQQlEaWZmZXJlbnRpYWwgRmFzdCBTQ1NJLTIKK0JULTc1N1MJICAgIEVJU0EJV2lkZSBGYXN0IFNDU0ktMgorQlQtNzU3RAkgICAgRUlTQQlXaWRlIERpZmZlcmVudGlhbCBGYXN0IFNDU0ktMgorQlQtNTQ1UwkgICAgSVNBCQlGYXN0IFNDU0ktMgorQlQtNTQyRAkgICAgSVNBCQlEaWZmZXJlbnRpYWwgRmFzdCBTQ1NJLTIKK0JULTc0MkEJICAgIEVJU0EJU0NTSS0yICg3NDJBIHJldmlzaW9uIEgpCitCVC01NDJCCSAgICBJU0EJCVNDU0ktMiAoNTQyQiByZXZpc2lvbiBIKQorCitNdWx0aU1hc3RlciAiQSIgU2VyaWVzIEhvc3QgQWRhcHRlcnM6CisKK0JULTc0MkEJICAgIEVJU0EJU0NTSS0yICg3NDJBIHJldmlzaW9ucyBBIC0gRykKK0JULTU0MkIJICAgIElTQQkJU0NTSS0yICg1NDJCIHJldmlzaW9ucyBBIC0gRykKKworQU1JIEZhc3REaXNrIEhvc3QgQWRhcHRlcnMgdGhhdCBhcmUgdHJ1ZSBCdXNMb2dpYyBNdWx0aU1hc3RlciBjbG9uZXMgYXJlIGFsc28KK3N1cHBvcnRlZCBieSB0aGlzIGRyaXZlci4KKworQnVzTG9naWMgU0NTSSBIb3N0IEFkYXB0ZXJzIGFyZSBhdmFpbGFibGUgcGFja2FnZWQgYm90aCBhcyBiYXJlIGJvYXJkcyBhbmQgYXMKK3JldGFpbCBraXRzLiAgVGhlIEJULSBtb2RlbCBudW1iZXJzIGFib3ZlIHJlZmVyIHRvIHRoZSBiYXJlIGJvYXJkIHBhY2thZ2luZy4KK1RoZSByZXRhaWwga2l0IG1vZGVsIG51bWJlcnMgYXJlIGZvdW5kIGJ5IHJlcGxhY2luZyBCVC0gd2l0aCBLVC0gaW4gdGhlIGFib3ZlCitsaXN0LiAgVGhlIHJldGFpbCBraXQgaW5jbHVkZXMgdGhlIGJhcmUgYm9hcmQgYW5kIG1hbnVhbCBhcyB3ZWxsIGFzIGNhYmxpbmcgYW5kCitkcml2ZXIgbWVkaWEgYW5kIGRvY3VtZW50YXRpb24gdGhhdCBhcmUgbm90IHByb3ZpZGVkIHdpdGggYmFyZSBib2FyZHMuCisKKworCQkJIEZMQVNIUE9JTlQgSU5TVEFMTEFUSU9OIE5PVEVTCisKK28gUkFJRFBsdXMgU3VwcG9ydAorCisgIEZsYXNoUG9pbnQgSG9zdCBBZGFwdGVycyBub3cgaW5jbHVkZSBSQUlEUGx1cywgTXlsZXgncyBib290YWJsZSBzb2Z0d2FyZQorICBSQUlELiAgUkFJRFBsdXMgaXMgbm90IHN1cHBvcnRlZCBvbiBMaW51eCwgYW5kIHRoZXJlIGFyZSBubyBwbGFucyB0byBzdXBwb3J0CisgIGl0LiAgVGhlIE1EIGRyaXZlciBpbiBMaW51eCAyLjAgcHJvdmlkZXMgZm9yIGNvbmNhdGVuYXRpb24gKExJTkVBUikgYW5kCisgIHN0cmlwaW5nIChSQUlELTApLCBhbmQgc3VwcG9ydCBmb3IgbWlycm9yaW5nIChSQUlELTEpLCBmaXhlZCBwYXJpdHkgKFJBSUQtNCksCisgIGFuZCBkaXN0cmlidXRlZCBwYXJpdHkgKFJBSUQtNSkgaXMgYXZhaWxhYmxlIHNlcGFyYXRlbHkuICBUaGUgYnVpbHQtaW4gTGludXgKKyAgUkFJRCBzdXBwb3J0IGlzIGdlbmVyYWxseSBtb3JlIGZsZXhpYmxlIGFuZCBpcyBleHBlY3RlZCB0byBwZXJmb3JtIGJldHRlcgorICB0aGFuIFJBSURQbHVzLCBzbyB0aGVyZSBpcyBsaXR0bGUgaW1wZXR1cyB0byBpbmNsdWRlIFJBSURQbHVzIHN1cHBvcnQgaW4gdGhlCisgIEJ1c0xvZ2ljIGRyaXZlci4KKworbyBFbmFibGluZyBVbHRyYVNDU0kgVHJhbnNmZXJzCisKKyAgRmxhc2hQb2ludCBIb3N0IEFkYXB0ZXJzIHNoaXAgd2l0aCB0aGVpciBjb25maWd1cmF0aW9uIHNldCB0byAiRmFjdG9yeQorICBEZWZhdWx0IiBzZXR0aW5ncyB0aGF0IGFyZSBjb25zZXJ2YXRpdmUgYW5kIGRvIG5vdCBhbGxvdyBmb3IgVWx0cmFTQ1NJIHNwZWVkCisgIHRvIGJlIG5lZ290aWF0ZWQuICBUaGlzIHJlc3VsdHMgaW4gZmV3ZXIgcHJvYmxlbXMgd2hlbiB0aGVzZSBob3N0IGFkYXB0ZXJzCisgIGFyZSBpbnN0YWxsZWQgaW4gc3lzdGVtcyB3aXRoIGNhYmxpbmcgb3IgdGVybWluYXRpb24gdGhhdCBpcyBub3Qgc3VmZmljaWVudAorICBmb3IgVWx0cmFTQ1NJIG9wZXJhdGlvbiwgb3Igd2hlcmUgZXhpc3RpbmcgU0NTSSBkZXZpY2VzIGRvIG5vdCBwcm9wZXJseQorICByZXNwb25kIHRvIHN5bmNocm9ub3VzIHRyYW5zZmVyIG5lZ290aWF0aW9uIGZvciBVbHRyYVNDU0kgc3BlZWQuICBBdXRvU0NTSQorICBtYXkgYmUgdXNlZCB0byBsb2FkICJPcHRpbXVtIFBlcmZvcm1hbmNlIiBzZXR0aW5ncyB3aGljaCBhbGxvdyBVbHRyYVNDU0kKKyAgc3BlZWQgdG8gYmUgbmVnb3RpYXRlZCB3aXRoIGFsbCBkZXZpY2VzLCBvciBVbHRyYVNDU0kgc3BlZWQgY2FuIGJlIGVuYWJsZWQgb24KKyAgYW4gaW5kaXZpZHVhbCBiYXNpcy4gIEl0IGlzIHJlY29tbWVuZGVkIHRoYXQgU0NBTSBiZSBtYW51YWxseSBkaXNhYmxlZCBhZnRlcgorICB0aGUgIk9wdGltdW0gUGVyZm9ybWFuY2UiIHNldHRpbmdzIGFyZSBsb2FkZWQuCisKKworCQkgICAgICBCVC05NDgvOTU4Lzk1OEQgSU5TVEFMTEFUSU9OIE5PVEVTCisKK1RoZSBCVC05NDgvOTU4Lzk1OEQgUENJIFVsdHJhIFNDU0kgSG9zdCBBZGFwdGVycyBoYXZlIHNvbWUgZmVhdHVyZXMgd2hpY2ggbWF5CityZXF1aXJlIGF0dGVudGlvbiBpbiBzb21lIGNpcmN1bXN0YW5jZXMgd2hlbiBpbnN0YWxsaW5nIExpbnV4LgorCitvIFBDSSBJL08gUG9ydCBBc3NpZ25tZW50cworCisgIFdoZW4gY29uZmlndXJlZCB0byBmYWN0b3J5IGRlZmF1bHQgc2V0dGluZ3MsIHRoZSBCVC05NDgvOTU4Lzk1OEQgd2lsbCBvbmx5CisgIHJlY29nbml6ZSB0aGUgUENJIEkvTyBwb3J0IGFzc2lnbm1lbnRzIG1hZGUgYnkgdGhlIG1vdGhlcmJvYXJkJ3MgUENJIEJJT1MuCisgIFRoZSBCVC05NDgvOTU4Lzk1OEQgd2lsbCBub3QgcmVzcG9uZCB0byBhbnkgb2YgdGhlIElTQSBjb21wYXRpYmxlIEkvTyBwb3J0cworICB0aGF0IHByZXZpb3VzIEJ1c0xvZ2ljIFNDU0kgSG9zdCBBZGFwdGVycyByZXNwb25kIHRvLiAgVGhpcyBkcml2ZXIgc3VwcG9ydHMKKyAgdGhlIFBDSSBJL08gcG9ydCBhc3NpZ25tZW50cywgc28gdGhpcyBpcyB0aGUgcHJlZmVycmVkIGNvbmZpZ3VyYXRpb24uCisgIEhvd2V2ZXIsIGlmIHRoZSBvYnNvbGV0ZSBCdXNMb2dpYyBkcml2ZXIgbXVzdCBiZSB1c2VkIGZvciBhbnkgcmVhc29uLCBzdWNoIGFzCisgIGEgTGludXggZGlzdHJpYnV0aW9uIHRoYXQgZG9lcyBub3QgeWV0IHVzZSB0aGlzIGRyaXZlciBpbiBpdHMgYm9vdCBrZXJuZWwsCisgIEJ1c0xvZ2ljIGhhcyBwcm92aWRlZCBhbiBBdXRvU0NTSSBjb25maWd1cmF0aW9uIG9wdGlvbiB0byBlbmFibGUgYSBsZWdhY3kgSVNBCisgIGNvbXBhdGlibGUgSS9PIHBvcnQuCisKKyAgVG8gZW5hYmxlIHRoaXMgYmFja3dhcmQgY29tcGF0aWJpbGl0eSBvcHRpb24sIGludm9rZSB0aGUgQXV0b1NDU0kgdXRpbGl0eSB2aWEKKyAgQ3RybC1CIGF0IHN5c3RlbSBzdGFydHVwIGFuZCBzZWxlY3QgIkFkYXB0ZXIgQ29uZmlndXJhdGlvbiIsICJWaWV3L01vZGlmeQorICBDb25maWd1cmF0aW9uIiwgYW5kIHRoZW4gY2hhbmdlIHRoZSAiSVNBIENvbXBhdGlibGUgUG9ydCIgc2V0dGluZyBmcm9tCisgICJEaXNhYmxlIiB0byAiUHJpbWFyeSIgb3IgIkFsdGVybmF0ZSIuICBPbmNlIHRoaXMgZHJpdmVyIGhhcyBiZWVuIGluc3RhbGxlZCwKKyAgdGhlICJJU0EgQ29tcGF0aWJsZSBQb3J0IiBvcHRpb24gc2hvdWxkIGJlIHNldCBiYWNrIHRvICJEaXNhYmxlIiB0byBhdm9pZAorICBwb3NzaWJsZSBmdXR1cmUgSS9PIHBvcnQgY29uZmxpY3RzLiAgVGhlIG9sZGVyIEJULTk0NkMvOTU2Qy85NTZDRCBhbHNvIGhhdmUKKyAgdGhpcyBjb25maWd1cmF0aW9uIG9wdGlvbiwgYnV0IHRoZSBmYWN0b3J5IGRlZmF1bHQgc2V0dGluZyBpcyAiUHJpbWFyeSIuCisKK28gUENJIFNsb3QgU2Nhbm5pbmcgT3JkZXIKKworICBJbiBzeXN0ZW1zIHdpdGggbXVsdGlwbGUgQnVzTG9naWMgUENJIEhvc3QgQWRhcHRlcnMsIHRoZSBvcmRlciBpbiB3aGljaCB0aGUKKyAgUENJIHNsb3RzIGFyZSBzY2FubmVkIG1heSBhcHBlYXIgcmV2ZXJzZWQgd2l0aCB0aGUgQlQtOTQ4Lzk1OC85NThEIGFzCisgIGNvbXBhcmVkIHRvIHRoZSBCVC05NDZDLzk1NkMvOTU2Q0QuICBGb3IgYm9vdGluZyBmcm9tIGEgU0NTSSBkaXNrIHRvIHdvcmsKKyAgY29ycmVjdGx5LCBpdCBpcyBuZWNlc3NhcnkgdGhhdCB0aGUgaG9zdCBhZGFwdGVyJ3MgQklPUyBhbmQgdGhlIGtlcm5lbCBhZ3JlZQorICBvbiB3aGljaCBkaXNrIGlzIHRoZSBib290IGRldmljZSwgd2hpY2ggcmVxdWlyZXMgdGhhdCB0aGV5IHJlY29nbml6ZSB0aGUgUENJCisgIGhvc3QgYWRhcHRlcnMgaW4gdGhlIHNhbWUgb3JkZXIuICBUaGUgbW90aGVyYm9hcmQncyBQQ0kgQklPUyBwcm92aWRlcyBhCisgIHN0YW5kYXJkIHdheSBvZiBlbnVtZXJhdGluZyB0aGUgUENJIGhvc3QgYWRhcHRlcnMsIHdoaWNoIGlzIHVzZWQgYnkgdGhlIExpbnV4CisgIGtlcm5lbC4gIFNvbWUgUENJIEJJT1MgaW1wbGVtZW50YXRpb25zIGVudW1lcmF0ZSB0aGUgUENJIHNsb3RzIGluIG9yZGVyIG9mCisgIGluY3JlYXNpbmcgYnVzIG51bWJlciBhbmQgZGV2aWNlIG51bWJlciwgd2hpbGUgb3RoZXJzIGRvIHNvIGluIHRoZSBvcHBvc2l0ZQorICBkaXJlY3Rpb24uCisKKyAgVW5mb3J0dW5hdGVseSwgTWljcm9zb2Z0IGRlY2lkZWQgdGhhdCBXaW5kb3dzIDk1IHdvdWxkIGFsd2F5cyBlbnVtZXJhdGUgdGhlCisgIFBDSSBzbG90cyBpbiBvcmRlciBvZiBpbmNyZWFzaW5nIGJ1cyBudW1iZXIgYW5kIGRldmljZSBudW1iZXIgcmVnYXJkbGVzcyBvZgorICB0aGUgUENJIEJJT1MgZW51bWVyYXRpb24sIGFuZCByZXF1aXJlcyB0aGF0IHRoZWlyIHNjaGVtZSBiZSBzdXBwb3J0ZWQgYnkgdGhlCisgIGhvc3QgYWRhcHRlcidzIEJJT1MgdG8gcmVjZWl2ZSBXaW5kb3dzIDk1IGNlcnRpZmljYXRpb24uICBUaGVyZWZvcmUsIHRoZQorICBmYWN0b3J5IGRlZmF1bHQgc2V0dGluZ3Mgb2YgdGhlIEJULTk0OC85NTgvOTU4RCBlbnVtZXJhdGUgdGhlIGhvc3QgYWRhcHRlcnMKKyAgYnkgaW5jcmVhc2luZyBidXMgbnVtYmVyIGFuZCBkZXZpY2UgbnVtYmVyLiAgVG8gZGlzYWJsZSB0aGlzIGZlYXR1cmUsIGludm9rZQorICB0aGUgQXV0b1NDU0kgdXRpbGl0eSB2aWEgQ3RybC1CIGF0IHN5c3RlbSBzdGFydHVwIGFuZCBzZWxlY3QgIkFkYXB0ZXIKKyAgQ29uZmlndXJhdGlvbiIsICJWaWV3L01vZGlmeSBDb25maWd1cmF0aW9uIiwgcHJlc3MgQ3RybC1GMTAsIGFuZCB0aGVuIGNoYW5nZQorICB0aGUgIlVzZSBCdXMgQW5kIERldmljZSAjIEZvciBQQ0kgU2Nhbm5pbmcgU2VxLiIgb3B0aW9uIHRvIE9GRi4KKworICBUaGlzIGRyaXZlciB3aWxsIGludGVycm9nYXRlIHRoZSBzZXR0aW5nIG9mIHRoZSBQQ0kgU2Nhbm5pbmcgU2VxdWVuY2Ugb3B0aW9uCisgIHNvIGFzIHRvIHJlY29nbml6ZSB0aGUgaG9zdCBhZGFwdGVycyBpbiB0aGUgc2FtZSBvcmRlciBhcyB0aGV5IGFyZSBlbnVtZXJhdGVkCisgIGJ5IHRoZSBob3N0IGFkYXB0ZXIncyBCSU9TLgorCitvIEVuYWJsaW5nIFVsdHJhU0NTSSBUcmFuc2ZlcnMKKworICBUaGUgQlQtOTQ4Lzk1OC85NThEIHNoaXAgd2l0aCB0aGVpciBjb25maWd1cmF0aW9uIHNldCB0byAiRmFjdG9yeSBEZWZhdWx0IgorICBzZXR0aW5ncyB0aGF0IGFyZSBjb25zZXJ2YXRpdmUgYW5kIGRvIG5vdCBhbGxvdyBmb3IgVWx0cmFTQ1NJIHNwZWVkIHRvIGJlCisgIG5lZ290aWF0ZWQuICBUaGlzIHJlc3VsdHMgaW4gZmV3ZXIgcHJvYmxlbXMgd2hlbiB0aGVzZSBob3N0IGFkYXB0ZXJzIGFyZQorICBpbnN0YWxsZWQgaW4gc3lzdGVtcyB3aXRoIGNhYmxpbmcgb3IgdGVybWluYXRpb24gdGhhdCBpcyBub3Qgc3VmZmljaWVudCBmb3IKKyAgVWx0cmFTQ1NJIG9wZXJhdGlvbiwgb3Igd2hlcmUgZXhpc3RpbmcgU0NTSSBkZXZpY2VzIGRvIG5vdCBwcm9wZXJseSByZXNwb25kCisgIHRvIHN5bmNocm9ub3VzIHRyYW5zZmVyIG5lZ290aWF0aW9uIGZvciBVbHRyYVNDU0kgc3BlZWQuICBBdXRvU0NTSSBtYXkgYmUKKyAgdXNlZCB0byBsb2FkICJPcHRpbXVtIFBlcmZvcm1hbmNlIiBzZXR0aW5ncyB3aGljaCBhbGxvdyBVbHRyYVNDU0kgc3BlZWQgdG8gYmUKKyAgbmVnb3RpYXRlZCB3aXRoIGFsbCBkZXZpY2VzLCBvciBVbHRyYVNDU0kgc3BlZWQgY2FuIGJlIGVuYWJsZWQgb24gYW4KKyAgaW5kaXZpZHVhbCBiYXNpcy4gIEl0IGlzIHJlY29tbWVuZGVkIHRoYXQgU0NBTSBiZSBtYW51YWxseSBkaXNhYmxlZCBhZnRlciB0aGUKKyAgIk9wdGltdW0gUGVyZm9ybWFuY2UiIHNldHRpbmdzIGFyZSBsb2FkZWQuCisKKworCQkJCURSSVZFUiBPUFRJT05TCisKK0J1c0xvZ2ljIERyaXZlciBPcHRpb25zIG1heSBiZSBzcGVjaWZpZWQgZWl0aGVyIHZpYSB0aGUgTGludXggS2VybmVsIENvbW1hbmQKK0xpbmUgb3IgdmlhIHRoZSBMb2FkYWJsZSBLZXJuZWwgTW9kdWxlIEluc3RhbGxhdGlvbiBGYWNpbGl0eS4gIERyaXZlciBPcHRpb25zCitmb3IgbXVsdGlwbGUgaG9zdCBhZGFwdGVycyBtYXkgYmUgc3BlY2lmaWVkIGVpdGhlciBieSBzZXBhcmF0aW5nIHRoZSBvcHRpb24KK3N0cmluZ3MgYnkgYSBzZW1pY29sb24sIG9yIGJ5IHNwZWNpZnlpbmcgbXVsdGlwbGUgIkJ1c0xvZ2ljPSIgc3RyaW5ncyBvbiB0aGUKK2NvbW1hbmQgbGluZS4gIEluZGl2aWR1YWwgb3B0aW9uIHNwZWNpZmljYXRpb25zIGZvciBhIHNpbmdsZSBob3N0IGFkYXB0ZXIgYXJlCitzZXBhcmF0ZWQgYnkgY29tbWFzLiAgVGhlIFByb2JpbmcgYW5kIERlYnVnZ2luZyBPcHRpb25zIGFwcGx5IHRvIGFsbCBob3N0CithZGFwdGVycyB3aGVyZWFzIHRoZSByZW1haW5pbmcgb3B0aW9ucyBhcHBseSBpbmRpdmlkdWFsbHkgb25seSB0byB0aGUKK3NlbGVjdGVkIGhvc3QgYWRhcHRlci4KKworVGhlIEJ1c0xvZ2ljIERyaXZlciBQcm9iaW5nIE9wdGlvbnMgY29tcHJpc2UgdGhlIGZvbGxvd2luZzoKKworSU86PGludGVnZXI+CisKKyAgVGhlICJJTzoiIG9wdGlvbiBzcGVjaWZpZXMgYW4gSVNBIEkvTyBBZGRyZXNzIHRvIGJlIHByb2JlZCBmb3IgYSBub24tUENJCisgIE11bHRpTWFzdGVyIEhvc3QgQWRhcHRlci4gIElmIG5laXRoZXIgIklPOiIgbm9yICJOb1Byb2JlSVNBIiBvcHRpb25zIGFyZQorICBzcGVjaWZpZWQsIHRoZW4gdGhlIHN0YW5kYXJkIGxpc3Qgb2YgQnVzTG9naWMgTXVsdGlNYXN0ZXIgSVNBIEkvTyBBZGRyZXNzZXMKKyAgd2lsbCBiZSBwcm9iZWQgKDB4MzMwLCAweDMzNCwgMHgyMzAsIDB4MjM0LCAweDEzMCwgYW5kIDB4MTM0KS4gIE11bHRpcGxlCisgICJJTzoiIG9wdGlvbnMgbWF5IGJlIHNwZWNpZmllZCB0byBwcmVjaXNlbHkgZGV0ZXJtaW5lIHRoZSBJL08gQWRkcmVzc2VzIHRvCisgIGJlIHByb2JlZCwgYnV0IHRoZSBwcm9iZSBvcmRlciB3aWxsIGFsd2F5cyBmb2xsb3cgdGhlIHN0YW5kYXJkIGxpc3QuCisKK05vUHJvYmUKKworICBUaGUgIk5vUHJvYmUiIG9wdGlvbiBkaXNhYmxlcyBhbGwgcHJvYmluZyBhbmQgdGhlcmVmb3JlIG5vIEJ1c0xvZ2ljIEhvc3QKKyAgQWRhcHRlcnMgd2lsbCBiZSBkZXRlY3RlZC4KKworTm9Qcm9iZUlTQQorCisgIFRoZSAiTm9Qcm9iZUlTQSIgb3B0aW9uIGRpc2FibGVzIHByb2Jpbmcgb2YgdGhlIHN0YW5kYXJkIEJ1c0xvZ2ljIElTQSBJL08KKyAgQWRkcmVzc2VzIGFuZCB0aGVyZWZvcmUgb25seSBQQ0kgTXVsdGlNYXN0ZXIgYW5kIEZsYXNoUG9pbnQgSG9zdCBBZGFwdGVycworICB3aWxsIGJlIGRldGVjdGVkLgorCitOb1Byb2JlUENJCisKKyAgVGhlICJOb1Byb2JlUENJIiBvcHRpb25zIGRpc2FibGVzIHRoZSBpbnRlcnJvZ2F0aW9uIG9mIFBDSSBDb25maWd1cmF0aW9uCisgIFNwYWNlIGFuZCB0aGVyZWZvcmUgb25seSBJU0EgTXVsdGltYXN0ZXIgSG9zdCBBZGFwdGVycyB3aWxsIGJlIGRldGVjdGVkLCBhcworICB3ZWxsIGFzIFBDSSBNdWx0aW1hc3RlciBIb3N0IEFkYXB0ZXJzIHRoYXQgaGF2ZSB0aGVpciBJU0EgQ29tcGF0aWJsZSBJL08KKyAgUG9ydCBzZXQgdG8gIlByaW1hcnkiIG9yICJBbHRlcm5hdGUiLgorCitOb1NvcnRQQ0kKKworICBUaGUgIk5vU29ydFBDSSIgb3B0aW9uIGZvcmNlcyBQQ0kgTXVsdGlNYXN0ZXIgSG9zdCBBZGFwdGVycyB0byBiZQorICBlbnVtZXJhdGVkIGluIHRoZSBvcmRlciBwcm92aWRlZCBieSB0aGUgUENJIEJJT1MsIGlnbm9yaW5nIGFueSBzZXR0aW5nIG9mCisgIHRoZSBBdXRvU0NTSSAiVXNlIEJ1cyBBbmQgRGV2aWNlICMgRm9yIFBDSSBTY2FubmluZyBTZXEuIiBvcHRpb24uCisKK011bHRpTWFzdGVyRmlyc3QKKworICBUaGUgIk11bHRpTWFzdGVyRmlyc3QiIG9wdGlvbiBmb3JjZXMgTXVsdGlNYXN0ZXIgSG9zdCBBZGFwdGVycyB0byBiZSBwcm9iZWQKKyAgYmVmb3JlIEZsYXNoUG9pbnQgSG9zdCBBZGFwdGVycy4gIEJ5IGRlZmF1bHQsIGlmIGJvdGggRmxhc2hQb2ludCBhbmQgUENJCisgIE11bHRpTWFzdGVyIEhvc3QgQWRhcHRlcnMgYXJlIHByZXNlbnQsIHRoaXMgZHJpdmVyIHdpbGwgcHJvYmUgZm9yCisgIEZsYXNoUG9pbnQgSG9zdCBBZGFwdGVycyBmaXJzdCB1bmxlc3MgdGhlIEJJT1MgcHJpbWFyeSBkaXNrIGlzIGNvbnRyb2xsZWQKKyAgYnkgdGhlIGZpcnN0IFBDSSBNdWx0aU1hc3RlciBIb3N0IEFkYXB0ZXIsIGluIHdoaWNoIGNhc2UgTXVsdGlNYXN0ZXIgSG9zdAorICBBZGFwdGVycyB3aWxsIGJlIHByb2JlZCBmaXJzdC4KKworRmxhc2hQb2ludEZpcnN0CisKKyAgVGhlICJGbGFzaFBvaW50Rmlyc3QiIG9wdGlvbiBmb3JjZXMgRmxhc2hQb2ludCBIb3N0IEFkYXB0ZXJzIHRvIGJlIHByb2JlZAorICBiZWZvcmUgTXVsdGlNYXN0ZXIgSG9zdCBBZGFwdGVycy4KKworVGhlIEJ1c0xvZ2ljIERyaXZlciBUYWdnZWQgUXVldWluZyBPcHRpb25zIGFsbG93IGZvciBleHBsaWNpdGx5IHNwZWNpZnlpbmcKK3RoZSBRdWV1ZSBEZXB0aCBhbmQgd2hldGhlciBUYWdnZWQgUXVldWluZyBpcyBwZXJtaXR0ZWQgZm9yIGVhY2ggVGFyZ2V0CitEZXZpY2UgKGFzc3VtaW5nIHRoYXQgdGhlIFRhcmdldCBEZXZpY2Ugc3VwcG9ydHMgVGFnZ2VkIFF1ZXVpbmcpLiAgVGhlIFF1ZXVlCitEZXB0aCBpcyB0aGUgbnVtYmVyIG9mIFNDU0kgQ29tbWFuZHMgdGhhdCBhcmUgYWxsb3dlZCB0byBiZSBjb25jdXJyZW50bHkKK3ByZXNlbnRlZCBmb3IgZXhlY3V0aW9uIChlaXRoZXIgdG8gdGhlIEhvc3QgQWRhcHRlciBvciBUYXJnZXQgRGV2aWNlKS4gIE5vdGUKK3RoYXQgZXhwbGljaXRseSBlbmFibGluZyBUYWdnZWQgUXVldWluZyBtYXkgbGVhZCB0byBwcm9ibGVtczsgdGhlIG9wdGlvbiB0bworZW5hYmxlIG9yIGRpc2FibGUgVGFnZ2VkIFF1ZXVpbmcgaXMgcHJvdmlkZWQgcHJpbWFyaWx5IHRvIGFsbG93IGRpc2FibGluZworVGFnZ2VkIFF1ZXVpbmcgb24gVGFyZ2V0IERldmljZXMgdGhhdCBkbyBub3QgaW1wbGVtZW50IGl0IGNvcnJlY3RseS4gIFRoZQorZm9sbG93aW5nIG9wdGlvbnMgYXJlIGF2YWlsYWJsZToKKworUXVldWVEZXB0aDo8aW50ZWdlcj4KKworICBUaGUgIlF1ZXVlRGVwdGg6IiBvciBRRDoiIG9wdGlvbiBzcGVjaWZpZXMgdGhlIFF1ZXVlIERlcHRoIHRvIHVzZSBmb3IgYWxsCisgIFRhcmdldCBEZXZpY2VzIHRoYXQgc3VwcG9ydCBUYWdnZWQgUXVldWluZywgYXMgd2VsbCBhcyB0aGUgbWF4aW11bSBRdWV1ZQorICBEZXB0aCBmb3IgZGV2aWNlcyB0aGF0IGRvIG5vdCBzdXBwb3J0IFRhZ2dlZCBRdWV1aW5nLiAgSWYgbm8gUXVldWUgRGVwdGgKKyAgb3B0aW9uIGlzIHByb3ZpZGVkLCB0aGUgUXVldWUgRGVwdGggd2lsbCBiZSBkZXRlcm1pbmVkIGF1dG9tYXRpY2FsbHkgYmFzZWQKKyAgb24gdGhlIEhvc3QgQWRhcHRlcidzIFRvdGFsIFF1ZXVlIERlcHRoIGFuZCB0aGUgbnVtYmVyLCB0eXBlLCBzcGVlZCwgYW5kCisgIGNhcGFiaWxpdGllcyBvZiB0aGUgZGV0ZWN0ZWQgVGFyZ2V0IERldmljZXMuICBGb3IgSG9zdCBBZGFwdGVycyB0aGF0CisgIHJlcXVpcmUgSVNBIEJvdW5jZSBCdWZmZXJzLCB0aGUgUXVldWUgRGVwdGggaXMgYXV0b21hdGljYWxseSBzZXQgYnkgZGVmYXVsdAorICB0byBCdXNMb2dpY19UYWdnZWRRdWV1ZURlcHRoQkIgb3IgQnVzTG9naWNfVW50YWdnZWRRdWV1ZURlcHRoQkIgdG8gYXZvaWQKKyAgZXhjZXNzaXZlIHByZWFsbG9jYXRpb24gb2YgRE1BIEJvdW5jZSBCdWZmZXIgbWVtb3J5LiAgVGFyZ2V0IERldmljZXMgdGhhdAorICBkbyBub3Qgc3VwcG9ydCBUYWdnZWQgUXVldWluZyBhbHdheXMgaGF2ZSB0aGVpciBRdWV1ZSBEZXB0aCBzZXQgdG8KKyAgQnVzTG9naWNfVW50YWdnZWRRdWV1ZURlcHRoIG9yIEJ1c0xvZ2ljX1VudGFnZ2VkUXVldWVEZXB0aEJCLCB1bmxlc3MgYQorICBsb3dlciBRdWV1ZSBEZXB0aCBvcHRpb24gaXMgcHJvdmlkZWQuICBBIFF1ZXVlIERlcHRoIG9mIDEgYXV0b21hdGljYWxseQorICBkaXNhYmxlcyBUYWdnZWQgUXVldWluZy4KKworUXVldWVEZXB0aDpbPGludGVnZXI+LDxpbnRlZ2VyPi4uLl0KKworICBUaGUgIlF1ZXVlRGVwdGg6Wy4uLl0iIG9yICJRRDpbLi4uXSIgb3B0aW9uIHNwZWNpZmllcyB0aGUgUXVldWUgRGVwdGgKKyAgaW5kaXZpZHVhbGx5IGZvciBlYWNoIFRhcmdldCBEZXZpY2UuICBJZiBhbiA8aW50ZWdlcj4gaXMgb21pdHRlZCwgdGhlCisgIGFzc29jaWF0ZWQgVGFyZ2V0IERldmljZSB3aWxsIGhhdmUgaXRzIFF1ZXVlIERlcHRoIHNlbGVjdGVkIGF1dG9tYXRpY2FsbHkuCisKK1RhZ2dlZFF1ZXVpbmc6RGVmYXVsdAorCisgIFRoZSAiVGFnZ2VkUXVldWluZzpEZWZhdWx0IiBvciAiVFE6RGVmYXVsdCIgb3B0aW9uIHBlcm1pdHMgVGFnZ2VkIFF1ZXVpbmcKKyAgYmFzZWQgb24gdGhlIGZpcm13YXJlIHZlcnNpb24gb2YgdGhlIEJ1c0xvZ2ljIEhvc3QgQWRhcHRlciBhbmQgYmFzZWQgb24KKyAgd2hldGhlciB0aGUgUXVldWUgRGVwdGggYWxsb3dzIHF1ZXVpbmcgbXVsdGlwbGUgY29tbWFuZHMuCisKK1RhZ2dlZFF1ZXVpbmc6RW5hYmxlCisKKyAgVGhlICJUYWdnZWRRdWV1aW5nOkVuYWJsZSIgb3IgIlRROkVuYWJsZSIgb3B0aW9uIGVuYWJsZXMgVGFnZ2VkIFF1ZXVpbmcgZm9yCisgIGFsbCBUYXJnZXQgRGV2aWNlcyBvbiB0aGlzIEhvc3QgQWRhcHRlciwgb3ZlcnJpZGluZyBhbnkgbGltaXRhdGlvbiB0aGF0CisgIHdvdWxkIG90aGVyd2lzZSBiZSBpbXBvc2VkIGJhc2VkIG9uIHRoZSBIb3N0IEFkYXB0ZXIgZmlybXdhcmUgdmVyc2lvbi4KKworVGFnZ2VkUXVldWluZzpEaXNhYmxlCisKKyAgVGhlICJUYWdnZWRRdWV1aW5nOkRpc2FibGUiIG9yICJUUTpEaXNhYmxlIiBvcHRpb24gZGlzYWJsZXMgVGFnZ2VkIFF1ZXVpbmcKKyAgZm9yIGFsbCBUYXJnZXQgRGV2aWNlcyBvbiB0aGlzIEhvc3QgQWRhcHRlci4KKworVGFnZ2VkUXVldWluZzo8VGFyZ2V0LVNwZWM+CisKKyAgVGhlICJUYWdnZWRRdWV1aW5nOjxUYXJnZXQtU3BlYz4iIG9yICJUUTo8VGFyZ2V0LVNwZWM+IiBvcHRpb24gY29udHJvbHMKKyAgVGFnZ2VkIFF1ZXVpbmcgaW5kaXZpZHVhbGx5IGZvciBlYWNoIFRhcmdldCBEZXZpY2UuICA8VGFyZ2V0LVNwZWM+IGlzIGEKKyAgc2VxdWVuY2Ugb2YgIlkiLCAiTiIsIGFuZCAiWCIgY2hhcmFjdGVycy4gICJZIiBlbmFibGVzIFRhZ2dlZCBRdWV1aW5nLCAiTiIKKyAgZGlzYWJsZXMgVGFnZ2VkIFF1ZXVpbmcsIGFuZCAiWCIgYWNjZXB0cyB0aGUgZGVmYXVsdCBiYXNlZCBvbiB0aGUgZmlybXdhcmUKKyAgdmVyc2lvbi4gIFRoZSBmaXJzdCBjaGFyYWN0ZXIgcmVmZXJzIHRvIFRhcmdldCBEZXZpY2UgMCwgdGhlIHNlY29uZCB0bworICBUYXJnZXQgRGV2aWNlIDEsIGFuZCBzbyBvbjsgaWYgdGhlIHNlcXVlbmNlIG9mICJZIiwgIk4iLCBhbmQgIlgiIGNoYXJhY3RlcnMKKyAgZG9lcyBub3QgY292ZXIgYWxsIHRoZSBUYXJnZXQgRGV2aWNlcywgdW5zcGVjaWZpZWQgY2hhcmFjdGVycyBhcmUgYXNzdW1lZAorICB0byBiZSAiWCIuCisKK1RoZSBCdXNMb2dpYyBEcml2ZXIgTWlzY2VsbGFuZW91cyBPcHRpb25zIGNvbXByaXNlIHRoZSBmb2xsb3dpbmc6CisKK0J1c1NldHRsZVRpbWU6PHNlY29uZHM+CisKKyAgVGhlICJCdXNTZXR0bGVUaW1lOiIgb3IgIkJTVDoiIG9wdGlvbiBzcGVjaWZpZXMgdGhlIEJ1cyBTZXR0bGUgVGltZSBpbgorICBzZWNvbmRzLiAgVGhlIEJ1cyBTZXR0bGUgVGltZSBpcyB0aGUgYW1vdW50IG9mIHRpbWUgdG8gd2FpdCBiZXR3ZWVuIGEgSG9zdAorICBBZGFwdGVyIEhhcmQgUmVzZXQgd2hpY2ggaW5pdGlhdGVzIGEgU0NTSSBCdXMgUmVzZXQgYW5kIGlzc3VpbmcgYW55IFNDU0kKKyAgQ29tbWFuZHMuICBJZiB1bnNwZWNpZmllZCwgaXQgZGVmYXVsdHMgdG8gQnVzTG9naWNfRGVmYXVsdEJ1c1NldHRsZVRpbWUuCisKK0luaGliaXRUYXJnZXRJbnF1aXJ5CisKKyAgVGhlICJJbmhpYml0VGFyZ2V0SW5xdWlyeSIgb3B0aW9uIGluaGliaXRzIHRoZSBleGVjdXRpb24gb2YgYW4gSW5xdWlyZQorICBUYXJnZXQgRGV2aWNlcyBvciBJbnF1aXJlIEluc3RhbGxlZCBEZXZpY2VzIGNvbW1hbmQgb24gTXVsdGlNYXN0ZXIgSG9zdAorICBBZGFwdGVycy4gIFRoaXMgbWF5IGJlIG5lY2Vzc2FyeSB3aXRoIHNvbWUgb2xkZXIgVGFyZ2V0IERldmljZXMgdGhhdCBkbyBub3QKKyAgcmVzcG9uZCBjb3JyZWN0bHkgd2hlbiBMb2dpY2FsIFVuaXRzIGFib3ZlIDAgYXJlIGFkZHJlc3NlZC4KKworVGhlIEJ1c0xvZ2ljIERyaXZlciBEZWJ1Z2dpbmcgT3B0aW9ucyBjb21wcmlzZSB0aGUgZm9sbG93aW5nOgorCitUcmFjZVByb2JlCisKKyAgVGhlICJUcmFjZVByb2JlIiBvcHRpb24gZW5hYmxlcyB0cmFjaW5nIG9mIEhvc3QgQWRhcHRlciBQcm9iaW5nLgorCitUcmFjZUhhcmR3YXJlUmVzZXQKKworICBUaGUgIlRyYWNlSGFyZHdhcmVSZXNldCIgb3B0aW9uIGVuYWJsZXMgdHJhY2luZyBvZiBIb3N0IEFkYXB0ZXIgSGFyZHdhcmUKKyAgUmVzZXQuCisKK1RyYWNlQ29uZmlndXJhdGlvbgorCisgIFRoZSAiVHJhY2VDb25maWd1cmF0aW9uIiBvcHRpb24gZW5hYmxlcyB0cmFjaW5nIG9mIEhvc3QgQWRhcHRlcgorICBDb25maWd1cmF0aW9uLgorCitUcmFjZUVycm9ycworCisgIFRoZSAiVHJhY2VFcnJvcnMiIG9wdGlvbiBlbmFibGVzIHRyYWNpbmcgb2YgU0NTSSBDb21tYW5kcyB0aGF0IHJldHVybiBhbgorICBlcnJvciBmcm9tIHRoZSBUYXJnZXQgRGV2aWNlLiAgVGhlIENEQiBhbmQgU2Vuc2UgRGF0YSB3aWxsIGJlIHByaW50ZWQgZm9yCisgIGVhY2ggU0NTSSBDb21tYW5kIHRoYXQgZmFpbHMuCisKK0RlYnVnCisKKyAgVGhlICJEZWJ1ZyIgb3B0aW9uIGVuYWJsZXMgYWxsIGRlYnVnZ2luZyBvcHRpb25zLgorCitUaGUgZm9sbG93aW5nIGV4YW1wbGVzIGRlbW9uc3RyYXRlIHNldHRpbmcgdGhlIFF1ZXVlIERlcHRoIGZvciBUYXJnZXQgRGV2aWNlcworMSBhbmQgMiBvbiB0aGUgZmlyc3QgaG9zdCBhZGFwdGVyIHRvIDcgYW5kIDE1LCB0aGUgUXVldWUgRGVwdGggZm9yIGFsbCBUYXJnZXQKK0RldmljZXMgb24gdGhlIHNlY29uZCBob3N0IGFkYXB0ZXIgdG8gMzEsIGFuZCB0aGUgQnVzIFNldHRsZSBUaW1lIG9uIHRoZQorc2Vjb25kIGhvc3QgYWRhcHRlciB0byAzMCBzZWNvbmRzLgorCitMaW51eCBLZXJuZWwgQ29tbWFuZCBMaW5lOgorCisgIGxpbnV4IEJ1c0xvZ2ljPVF1ZXVlRGVwdGg6Wyw3LDE1XTtRdWV1ZURlcHRoOjMxLEJ1c1NldHRsZVRpbWU6MzAKKworTElMTyBMaW51eCBCb290IExvYWRlciAoaW4gL2V0Yy9saWxvLmNvbmYpOgorCisgIGFwcGVuZCA9ICJCdXNMb2dpYz1RdWV1ZURlcHRoOlssNywxNV07UXVldWVEZXB0aDozMSxCdXNTZXR0bGVUaW1lOjMwIgorCitJTlNNT0QgTG9hZGFibGUgS2VybmVsIE1vZHVsZSBJbnN0YWxsYXRpb24gRmFjaWxpdHk6CisKKyAgaW5zbW9kIEJ1c0xvZ2ljLm8gXAorICAgICAgJ0J1c0xvZ2ljPSJRdWV1ZURlcHRoOlssNywxNV07UXVldWVEZXB0aDozMSxCdXNTZXR0bGVUaW1lOjMwIicKKworTk9URTogTW9kdWxlIFV0aWxpdGllcyAyLjEuNzEgb3IgbGF0ZXIgaXMgcmVxdWlyZWQgZm9yIGNvcnJlY3QgcGFyc2luZworICAgICAgb2YgZHJpdmVyIG9wdGlvbnMgY29udGFpbmluZyBjb21tYXMuCisKKworCQkJICAgICAgRFJJVkVSIElOU1RBTExBVElPTgorCitUaGlzIGRpc3RyaWJ1dGlvbiB3YXMgcHJlcGFyZWQgZm9yIExpbnV4IGtlcm5lbCB2ZXJzaW9uIDIuMC4zNSwgYnV0IHNob3VsZCBiZQorY29tcGF0aWJsZSB3aXRoIDIuMC40IG9yIGFueSBsYXRlciAyLjAgc2VyaWVzIGtlcm5lbC4KKworVG8gaW5zdGFsbCB0aGUgbmV3IEJ1c0xvZ2ljIFNDU0kgZHJpdmVyLCB5b3UgbWF5IHVzZSB0aGUgZm9sbG93aW5nIGNvbW1hbmRzLAorcmVwbGFjaW5nICIvdXNyL3NyYyIgd2l0aCB3aGVyZXZlciB5b3Uga2VlcCB5b3VyIExpbnV4IGtlcm5lbCBzb3VyY2UgdHJlZToKKworICBjZCAvdXNyL3NyYworICB0YXIgLXh2emYgQnVzTG9naWMtMi4wLjE1LnRhci5negorICBtdiBSRUFETUUuKiBMSUNFTlNFLiogQnVzTG9naWMuW2NoXSBGbGFzaFBvaW50LmMgbGludXgvZHJpdmVycy9zY3NpCisgIHBhdGNoIC1wMCA8IEJ1c0xvZ2ljLnBhdGNoIChvbmx5IGZvciAyLjAuMzMgYW5kIGJlbG93KQorICBjZCBsaW51eAorICBtYWtlIGNvbmZpZworICBtYWtlIHpJbWFnZQorCitUaGVuIGluc3RhbGwgImFyY2gvaTM4Ni9ib290L3pJbWFnZSIgYXMgeW91ciBzdGFuZGFyZCBrZXJuZWwsIHJ1biBsaWxvIGlmCithcHByb3ByaWF0ZSwgYW5kIHJlYm9vdC4KKworCisJCSAgICAgIEJVU0xPR0lDIEFOTk9VTkNFTUVOVFMgTUFJTElORyBMSVNUCisKK1RoZSBCdXNMb2dpYyBBbm5vdW5jZW1lbnRzIE1haWxpbmcgTGlzdCBwcm92aWRlcyBhIGZvcnVtIGZvciBpbmZvcm1pbmcgTGludXgKK3VzZXJzIG9mIG5ldyBkcml2ZXIgcmVsZWFzZXMgYW5kIG90aGVyIGFubm91bmNlbWVudHMgcmVnYXJkaW5nIExpbnV4IHN1cHBvcnQKK2ZvciBCdXNMb2dpYyBTQ1NJIEhvc3QgQWRhcHRlcnMuICBUbyBqb2luIHRoZSBtYWlsaW5nIGxpc3QsIHNlbmQgYSBtZXNzYWdlIHRvCisiYnVzbG9naWMtYW5ub3VuY2UtcmVxdWVzdEBkYW5kZWxpb24uY29tIiB3aXRoIHRoZSBsaW5lICJzdWJzY3JpYmUiIGluIHRoZQorbWVzc2FnZSBib2R5LgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9zY3NpL0NoYW5nZUxvZy4xOTkyLTE5OTcgYi9Eb2N1bWVudGF0aW9uL3Njc2kvQ2hhbmdlTG9nLjE5OTItMTk5NwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYzg4ZWUyCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9zY3NpL0NoYW5nZUxvZy4xOTkyLTE5OTcKQEAgLTAsMCArMSwyMDIzIEBACitTYXQgSmFuIDE4IDE1OjUxOjQ1IDE5OTcgIFJpY2hhcmQgSGVuZGVyc29uICA8cnRoQHRhbXUuZWR1PgorCisJKiBEb24ndCBwbGF5IHdpdGggdXNhZ2VfY291bnQgZGlyZWN0bHksIGluc3RlYWQgaGFuZCBhcm91bmQKKwl0aGUgbW9kdWxlIGhlYWRlciBhbmQgdXNlIHRoZSBtb2R1bGUgbWFjcm9zLgorCitGcmkgTWF5IDE3IDAwOjAwOjAwIDE5OTYgIExlb25hcmQgTi4gWnVia29mZiA8bG56QGRhbmRlbGlvbi5jb20+CisKKwkqIEJ1c0xvZ2ljIERyaXZlciBWZXJzaW9uIDIuMC4zIFJlbGVhc2VkLgorCitUdWUgQXByIDE2IDIxOjAwOjAwIDE5OTYgIExlb25hcmQgTi4gWnVia29mZiA8bG56QGRhbmRlbGlvbi5jb20+CisKKwkqIEJ1c0xvZ2ljIERyaXZlciBWZXJzaW9uIDEuMy4yIFJlbGVhc2VkLgorCitTdW4gRGVjIDMxIDIzOjI2OjAwIDE5OTUgIExlb25hcmQgTi4gWnVia29mZiA8bG56QGRhbmRlbGlvbi5jb20+CisKKwkqIEJ1c0xvZ2ljIERyaXZlciBWZXJzaW9uIDEuMy4xIFJlbGVhc2VkLgorCitGcmkgTm92IDEwIDE1OjI5OjQ5IDE5OTUgIExlb25hcmQgTi4gWnVia29mZiA8bG56QGRhbmRlbGlvbi5jb20+CisKKwkqIFJlbGVhc2VkIG5ldyBCdXNMb2dpYyBkcml2ZXIuCisKK1dlZCBBdWcgIDkgMjI6Mzc6MDQgMTk5NSAgQW5kcmllcyBCcm91d2VyICA8YWViQGN3aS5ubD4KKworCUFzIGEgcHJlcGFyYXRpb24gZm9yIG5ldyBkZXZpY2UgY29kZSwgc2VwYXJhdGVkIHRoZSB2YXJpb3VzCisJZnVuY3Rpb25zIHRoZSByZXF1ZXN0LT5kZXYgZmllbGQgaGFkIGludG8gdGhlIGRldmljZSBwcm9wZXIsCisJcmVxdWVzdC0+cnFfZGV2IGFuZCBhIHN0YXR1cyBmaWVsZCByZXF1ZXN0LT5ycV9zdGF0dXMuCisKKwlUaGUgMm5kIGFyZ3VtZW50IG9mIGJpb3NfcGFyYW0gaXMgbm93IGEga2Rldl90LgorCitXZWQgSnVsIDE5IDEwOjQzOjE1IDE5OTUgIE1pY2hhZWwgTmV1ZmZlciAgPG5ldWZmZXJAZ29vZnkuemR2LnVuaS1tYWluei5kZT4KKworICAgICAgICAqIHNjc2kuYyAoc2NzaV9wcm9jX2luZm8pOiAvcHJvYy9zY3NpL3Njc2kgbm93IGFsc28gbGlzdHMgYWxsCisJYXR0YWNoZWQgZGV2aWNlcy4KKworCSogc2NzaV9wcm9jLmMgKHByb2NfcHJpbnRfc2NzaWRldmljZSk6IEFkZGVkLiBVc2VkIGJ5IHNjc2kuYyBhbmQKKwllYXRhX2RtYV9wcm9jLmMgdG8gcHJvZHVjZSBzb21lIGRldmljZSBpbmZvIGZvciAvcHJvYy9zY3NpLgorCisJKiBlYXRhX2RtYS5jIChlYXRhX3F1ZXVlKShlYXRhX2ludF9oYW5kbGVyKShlYXRhX3Njc2lfZG9uZSk6CisJQ2hhbmdlZCBoYW5kbGluZyBvZiBpbnRlcm5hbCBTQ1NJIGNvbW1hbmRzIHNlbmQgdG8gdGhlIEhCQS4KKworCitXZWQgSnVsIDE5IDEwOjA5OjE3IDE5OTUgIE1pY2hhZWwgTmV1ZmZlciAgPG5ldWZmZXJAZ29vZnkuemR2LnVuaS1tYWluei5kZT4KKworCSogTGludXggMS4zLjExIHJlbGVhc2VkLgorCisJKiBlYXRhX2RtYS5jIChlYXRhX3F1ZXVlKShlYXRhX2ludF9oYW5kbGVyKTogQWRkZWQgY29kZSB0byBkbworCWNvbW1hbmQgbGF0ZW5jeSBtZWFzdXJlbWVudHMgaWYgcmVxdWVzdGVkIGJ5IHJvb3QgdGhyb3VnaAorCS9wcm9jL3Njc2kgaW50ZXJmYWNlLgorCVRocm91Z2hvdXQgVXNlIEhaIGNvbnN0YW50IGZvciB0aW1lIHJlZmVyZW5jZXMuCisKKwkqIGVhdGFfcGlvLmM6IFVzZSBIWiBjb25zdGFudCBmb3IgdGltZSByZWZlcmVuY2VzLgorCisJKiBhaWM3eHh4LmMsIGFpYzd4eHguaCwgYWljN3h4eF9hc20uYzogQ2hhbmdlZCBjb3B5cmlnaHQgZnJvbSBCU0QKKwl0byBHTlUgc3R5bGUuCisKKwkqIHNjc2kuaDogQWRkZWQgUkVBRF8xMiBjb21tYW5kIG9wY29kZSBjb25zdGFudAorCitXZWQgSnVsIDE5IDA5OjI1OjMwIDE5OTUgIE1pY2hhZWwgTmV1ZmZlciA8bmV1ZmZlckBnb29meS56ZHYudW5pLW1haW56LmRlPgorCisJKiBMaW51eCAxLjMuMTAgcmVsZWFzZWQuCisKKwkqIHNjc2lfcHJvYy5jIChkaXNwYXRjaF9zY3NpX2luZm8pOiBSZW1vdmVkIHVudXNlZCB2YXJpYWJsZS4KKworV2VkIEp1bCAxOSAwOToyNTozMCAxOTk1ICBNaWNoYWVsIE5ldWZmZXIgIDxuZXVmZmVyQGdvb2Z5Lnpkdi51bmktbWFpbnouZGU+CisKKwkqIExpbnV4IDEuMy45IHJlbGVhc2VkLgorCisJKiBzY3NpLmMgQmxhY2tsaXN0IGNvbmNlcHQgZXhwYW5kZWQgdG8gJ3N1cHBvcnQnIG1vcmUgZGV2aWNlCisJZGVmaWNpZW5jaWVzLiBibGFja2xpc3RbXSByZW5hbWVkIHRvIGRldmljZV9saXN0W10KKwkoc2Nhbl9zY3Npcyk6IENvZGUgY2xlYW51cC4KKworCSogc2NzaV9kZWJ1Zy5jIChzY3NpX2RlYnVnX3Byb2NfaW5mbyk6IEFkZGVkIHN1cHBvcnQgdG8gY29udHJvbAorCWRldmljZSBsb2NrdXAgc2ltdWxhdGlvbiB2aWEgL3Byb2Mvc2NzaSBpbnRlcmZhY2UuCisKKworV2VkIEp1bCAxOSAwOToyMjozNCAxOTk1ICBNaWNoYWVsIE5ldWZmZXIgIDxuZXVmZmVyQGdvb2Z5Lnpkdi51bmktbWFpbnouZGU+CisKKwkqIExpbnV4IDEuMy43IHJlbGVhc2VkLgorCisJKiBzY3NpX3Byb2MuYzogRml4ZWQgYSBudW1iZXIgb2YgYnVncyBpbiBkaXJlY3RvcnkgaGFuZGxpbmcKKworV2VkIEp1bCAxOSAwOToxODoyOCAxOTk1ICBNaWNoYWVsIE5ldWZmZXIgIDxuZXVmZmVyQGdvb2Z5Lnpkdi51bmktbWFpbnouZGU+CisKKwkqIExpbnV4IDEuMy41IHJlbGVhc2VkLgorCisJKiBOYXRpdmUgd2lkZSwgbXVsdGljaGFubmVsIGFuZCAvcHJvYy9zY3NpIHN1cHBvcnQgbm93IGluIG9mZmljaWFsCisJa2VybmVsIGRpc3RyaWJ1dGlvbi4KKworICAgICAgICAqIHNjc2kuYy9oLCBob3N0cy5jL2ggZXQgYWwgcmVpbmRlbnRlZCB0byBpbmNyZWFzZSByZWFkYWJpbGl0eQorCShlc3BlY2lhbGx5IG9uIDgwIGNvbHVtbiB3aWRlIHRlcm1pbmFscykuCisKKwkqIHNjc2kuYywgc2NzaV9wcm9jLmMsIC4uLy4uL2ZzL3Byb2MvaW5vZGUuYzogQWRkZWQKKwkvcHJvYy9zY3NpL3Njc2kgd2hpY2ggYWxsb3dzIHJvb3QgdG8gc2NhbiBmb3IgaG90cGx1Z2dlZCBkZXZpY2VzLgorCisJKiBzY3NpLmMgKHNjc2lfcHJvY19pbmZvKTogQWRkZWQsIHRvIHN1cHBvcnQgL3Byb2Mvc2NzaS9zY3NpLgorCShzY2FuX3Njc2lzKTogQWRkZWQgc29tZSAnc3BhZ2hldHRpJyBjb2RlIHRvIGFsbG93IHNjYW5uaW5nIGZvcgorCXNpbmdsZSBkZXZpY2VzLgorCQorCitUaHUgSnVuIDIwIDE1OjIwOjI3IDE5OTUgIE1pY2hhZWwgTmV1ZmZlciAgPG5ldWZmZXJAZ29vZnkuemR2LnVuaS1tYWluei5kZT4KKworICAgICAgICAqIHByb2MuYzogUmVuYW1lZCB0byBzY3NpX3Byb2MuYworCitNb24gSnVuIDEyIDIwOjMyOjQ1IDE5OTUgIE1pY2hhZWwgTmV1ZmZlciAgPG5ldWZmZXJAZ29vZnkuemR2LnVuaS1tYWluei5kZT4KKworCSogTGludXggMS4zLjAgcmVsZWFzZWQuCisKK01vbiBNYXkgMTUgMTk6MzM6MTQgMTk5NSAgTWljaGFlbCBOZXVmZmVyICA8bmV1ZmZlckBnb29meS56ZHYudW5pLW1haW56LmRlPgorCisJKiBzY3NpLmM6IEFkZGVkIG5hdGl2ZSBtdWx0aWNoYW5uZWwgYW5kIHdpZGUgc2NzaSBzdXBwb3J0LgorCisJKiBwcm9jLmMgKGRpc3BhdGNoX3Njc2lfaW5mbykgKGJ1aWxkX3Byb2NfZGlyX2hiYV9lbnRyaWVzKToKKwlVcGRhdGVkIC9wcm9jL3Njc2kgaW50ZXJmYWNlLgorCitUaHUgTWF5ICA0IDE3OjU4OjQ4IDE5OTUgIE1pY2hhZWwgTmV1ZmZlciAgPG5ldWZmZXJAZ29vZnkuemR2LnVuaS1tYWluei5kZT4KKworCSogc2QuYyAocmVxdWV1ZV9zZF9yZXF1ZXN0KTogWmVybyBvdXQgdGhlIHNjYXR0ZXJsaXN0IG9ubHkgaWYKKwlzY3NpX21hbGxvYyByZXR1cm5lZCBtZW1vcnkgZm9yIGl0LgorCisJKiBlYXRhX2RtYS5jIChyZWdpc3Rlcl9IQkEpIChlYXRhX3F1ZXVlKTogQWRkIHN1cHBvcnQgZm9yCisJbGFyZ2Ugc2NhdHRlci9nYXRoZXIgdGFibGVzIGFuZCBzZXQgdXNlX2NsdXN0ZXJpbmcgYWNjb3JkaW5nbHkKKworCSogaG9zdHMuYzogTWFrZSB1c2VfY2x1c3RlcmluZyBjaGFuZ2VhYmxlIGluIHRoZSBTY3NpX0hvc3Qgc3RydWN0dXJlLgorCitXZWQgQXByIDEyIDE1OjI1OjUyIDE5OTUgIEVyaWMgWW91bmdkYWxlICAoZXJpY0BhbmRhbnRlKQorCisJKiBMaW51eCAxLjIuNSByZWxlYXNlZC4KKworCSogYnVzbG9naWMuYzogVXBkYXRlIHRvIHZlcnNpb24gMS4xNSAoRnJvbSBMZW9uYXJkIE4uIFp1YmtvZmYpLgorCUZpeGVkIGludGVycnVwdCByb3V0aW5lIHRvIGF2b2lkIHJhY2VzIHdoZW4gaGFuZGxpbmcgbXVsdGlwbGUKKwljb21wbGV0ZSBjb21tYW5kcyBwZXIgaW50ZXJydXB0LiAgU2VlbXMgdG8gY29tZSB1cCB3aXRoIGZhc3RlcgorCWNhcmRzLgorCisJKiBlYXRhX2RtYS5jOiBVcGRhdGUgdG8gMi4zLjVyLiBNb2R1bGFyaXplLiBJbXByb3ZlZCBlcnJvciBoYW5kbGluZworICAgICAgICB0aHJvdWdob3V0IGFuZCBmaXhlZCBidWcgaW50ZXJydXB0IHJvdXRpbmUgd2hpY2ggcmVzdWx0ZWQgaW4gc2hpZnRlZAorICAgICAgICBzdGF0dXMgYnl0ZXMuIEFkZGVkIGJsaW5rIExFRCBzdGF0ZSBjaGVja3MgZm9yIElTQSBhbmQgRUlTQSBIQkFzLgorICAgICAgICBNZW1vcnkgbWFuYWdlbWVudCBidWcgc2VlbXMgdG8gaGF2ZSBkaXNhcHBlYXJlZCA9PT4gaW5jcmVhc2luZworICAgICAgICBDX1BfTF9DVVJSRU5UX01BWCB0byAxNiBmb3Igbm93LiBEZWNyZWFzaW5nIENfUF9MX0RJViB0byAzIGZvcgorICAgICAgICBwZXJmb3JtYW5jZSByZWFzb25zLgorCisJKiBzY3NpLmM6IElmIHdlIGdldCBhIEZNSywgRU9NLCBvciBJTEkgd2hlbiBhdHRlbXB0aW5nIHRvIHNjYW4KKwl0aGUgYnVzLCBhc3N1bWUgdGhhdCBpdCB3YXMganVzdCBub2lzZSBvbiB0aGUgYnVzLCBhbmQgaWdub3JlCisJdGhlIGRldmljZS4KKworCSogc2NzaS5oOiBVcGRhdGUgYW5kIGFkZCBhIGJ1bmNoIG9mIG1pc3NpbmcgY29tbWFuZHMgd2hpY2ggd2UKKwl3ZXJlIG5ldmVyIHVzaW5nLgorCisJKiBzZC5jOiBVc2UgcmVzdG9yZV9mbGFncyBpbiBkb19zZF9yZXF1ZXN0IC0gdGhpcyBtYXkgcmVzdWx0IGluCisJbGF0ZW5jeSBjb25kaXRpb25zLCBidXQgaXQgZ2V0cyByaWQgb2YgcmFjZXMgYW5kIGNyYXNoZXMuCisJRG8gbm90IHNhdmUgZmxhZ3MgYWdhaW4gd2hlbiBzZWFyY2hpbmcgZm9yIGEgc2Vjb25kIGNvbW1hbmQgdG8KKwlxdWV1ZS4KKworCSogc3QuYzogVXNlIGJ5dGVzLCBub3QgU1RQLT5idWZmZXItPmJ1ZmZlcl9zaXplIHdoZW4gcmVhZGluZworCWZyb20gdGFwZS4KKworCitUdWUgQXByICA0IDA5OjQyOjA4IDE5OTUgIEVyaWMgWW91bmdkYWxlICAoZXJpY0BhbmRhbnRlKQorCisJKiBMaW51eCAxLjIuNCByZWxlYXNlZC4KKworCSogc3QuYzogRml4IHR5cG8gLSByZXN0b3Jpbmcgd3JvbmcgZmxhZ3MuCisKK1dlZCBNYXIgMjkgMDY6NTU6MTIgMTk5NSAgRXJpYyBZb3VuZ2RhbGUgIChlcmljQGFuZGFudGUpCisKKwkqIExpbnV4IDEuMi4zIHJlbGVhc2VkLgorCisJKiBzdC5jOiBQZXJmb3JtIHNvbWUgd2FpdGluZyBvcGVyYXRpb25zIHdpdGggaW50ZXJydXB0cyBvZmYuCisJSXMgdGhpcyBjb3JyZWN0Pz8/CisKK1dlZCBNYXIgMjIgMTA6MzQ6MjYgMTk5NSAgRXJpYyBZb3VuZ2RhbGUgIChlcmljQGFuZGFudGUpCisKKwkqIExpbnV4IDEuMi4yIHJlbGVhc2VkLgorCisJKiBhaGExNTJ4LmM6IE1vZHVsYXJpemUuICBBZGQgc3VwcG9ydCBmb3IgUENNQ0lBLgorCisJKiBlYXRhLmM6IFVwZGF0ZSB0byB2ZXJzaW9uIDIuMC4gIEZpeGVkIGJ1ZyBwcmV2ZW50aW5nIG1lZGlhCisJZGV0ZWN0aW9uLiAgSWYgc2NzaV9yZWdpc3Rlcl9ob3N0IHJldHVybnMgTlVMTCwgZmFpbCBncmFjZWZ1bGx5LgorCisJKiBzY3NpLmM6IERldGVjdCBhcyBORUMgKGZvciBwaG90by1jZCBwdXJwb3NlcykgZm9yIHRoZSA4NAorCWFuZCAyNSBtb2RlbHMgYXMgIk5FQ19PTERDRFIiLgorCisJKiBzY3NpLmg6IEFkZCBkZWZpbmUgZm9yIE5FQ19PTERDRFIKKworCSogc3IuYzogQWRkIGhhbmRsaW5nIGZvciBORUNfT0xEQ0RSLiAgVHJlYXQgYXMgdW5rbm93bi4KKworCSogdTE0LTM0Zi5jOiBVcGRhdGUgdG8gdmVyc2lvbiAyLjAuICBGaXhlZCBzYW1lIGJ1ZyBhcyBpbgorCWVhdGEuYy4KKworCitNb24gTWFyICA2IDExOjExOjIwIDE5OTUgIEVyaWMgWW91bmdkYWxlICAoZXJpY0BhbmRhbnRlKQorCisJKiBMaW51eCAxLjIuMCByZWxlYXNlZC4gIFllYWghISEKKworCSogTWlub3Igc3BlbGxpbmcvcHVuY3R1YXRpb24gY2hhbmdlcyB0aHJvdWdob3V0LiAgTm90aGluZworCXN1YnN0YW50aXZlLgorCitNb24gRmViIDIwIDIxOjMzOjAzIDE5OTUgIEVyaWMgWW91bmdkYWxlICAoZXJpY0BhbmRhbnRlKQorCisJKiBMaW51eCAxLjEuOTUgcmVsZWFzZWQuCisKKwkqIHFsb2dpYy5jOiBVcGRhdGUgdG8gdmVyc2lvbiAwLjQxLgorCisJKiBzZWFnYXRlLmM6IENoYW5nZSBzb21lIG1lc3NhZ2UgdG8gYmUgbW9yZSBkZXNjcmlwdGl2ZSBhYm91dCB3aGF0CisJd2UgZGV0ZWN0ZWQuCisKKwkqIHNyLmM6IHNwZWxsaW5nL3doaXRlc3BhY2UgY2hhbmdlcy4KKworTW9uIEZlYiAyMCAyMTozMzowMyAxOTk1ICBFcmljIFlvdW5nZGFsZSAgKGVyaWNAYW5kYW50ZSkKKworCSogTGludXggMS4xLjk0IHJlbGVhc2VkLgorCitNb24gRmViIDIwIDA4OjU3OjE3IDE5OTUgIEVyaWMgWW91bmdkYWxlICAoZXJpY0BhbmRhbnRlKQorCisJKiBMaW51eCAxLjEuOTMgcmVsZWFzZWQuCisKKwkqIGhvc3RzLmg6IENoYW5nZSBpb19wb3J0IHRvIGxvbmcgaW50IGZyb20gc2hvcnQuCisKKyAJKiA1M2M3LDh4eC5jOiBjcmFzaCBvbiBBRU4gZml4ZWQsIFNDU0kgcmVzZXQgaXMgbm8gbG9uZ2VyIGEgTk9QLAorIAkgIE5VTEwgcG9pbnRlciBwYW5pYyBvbiBvZGQgVURDcyBmaXhlZCwgdHdvIGJ1Z3MgaW4gZGlhZ25vc3RpYyBvdXRwdXQKKyAJICBmaXhlZCwgc2hvdWxkIGluaXRpYWxpemUgY29ycmVjdGx5IGlmIGxlZnQgcnVubmluZywgbm93IGxvYWRhYmxlLAorICAJICBuZXcgbWVtb3J5IGFsbG9jYXRpb24sIGV4dHJhbmVvdXMgZGlhZ25vc3RpYyBvdXRwdXQgc3VwcHJlc3NlZCwKKyAJICBzcGx4KCkgcmVwbGFjZWQgd2l0aCBzYXZlL3Jlc3RvcmUgZmxhZ3MuIFsgRHJldyBdCisKKwkqIGhvc3RzLmMsIGhvc3RzLmgsIHNjc2lfaW9jdGwuYywgc2QuYywgc2RfaW9jdGwuYywgc2cuYywgc3IuYywKKwlzcl9pb2N0bC5jOiBBZGQgc3BlY2lhbCBqdW5rIGF0IGVuZCB0aGF0IEVtYWNzIHdpbGwgdXNlIGZvcgorCWZvcm1hdHRpbmcgdGhlIGZpbGUuCisKKwkqIHFsb2dpYy5jOiBVcGRhdGUgdG8gdjAuNDBhLiAgSW1wcm92ZSBwYXJpdHkgaGFuZGxpbmcuCisKKwkqIHNjc2kuYzogQWRkIEhpdGFjaGkgREszMTJDIHRvIGJsYWNrbGlzdC4gIENoYW5nZSAifTsiIHRvICJ9IiBpbgorCW1hbnkgcGxhY2VzLiAgVXNlIHNjc2lfaW5pdF9tYWxsb2MgdG8gZ2V0IGNvbW1hbmQgYmxvY2sgLSBtYXkKKwluZWVkIHRoaXMgdG8gYmUgZG1hIGNvbXBhdGlibGUgZm9yIHNvbWUgaG9zdCBhZGFwdGVycy4KKwlSZXN0b3JlIGludGVycnVwdHMgYWZ0ZXIgdW5yZWdpc3RlcmluZyBhIGhvc3QuCisKKwkqIHNkLmM6IFVzZSBzdGkgaW5zdGVhZCBvZiByZXN0b3JlIGZsYWdzIC0gY2F1c2VzIGxhdGVuY3kgcHJvYmxlbXMuCisKKwkqIHNlYWdhdGUuYzogVXNlIGNvbnRyb2xsZXJfdHlwZSB0byBkZXRlcm1pbmUgc3RyaW5nIHVzZWQgd2hlbgorCXJlZ2lzdGVyaW5nIGlycS4KKworCSogc3IuYzogTW9yZSBwaG90by1jZCBoYWNrcyB0byBtYWtlIHN1cmUgd2UgZ2V0IHRoZSB4YSBzdHVmZiByaWdodC4KKwkqIHNyLmgsIHNyLmM6IENoYW5nZSBpc194YSB0byB4YV9mbGFncyBmaWVsZC4KKworCSogc3QuYzogRGlzYWJsZSByZXRyaWVzIGZvciB3cml0ZSBvcGVyYXRpb25zLgorCitXZWQgRmViIDE1IDEwOjUyOjU2IDE5OTUgIEVyaWMgWW91bmdkYWxlICAoZXJpY0BhbmRhbnRlKQorCisJKiBMaW51eCAxLjEuOTIgcmVsZWFzZWQuCisKKwkqIGVhdGEuYzogVXBkYXRlIHRvIDEuMTcuCisKKwkqIGVhdGFfZG1hLmM6IFVwZGF0ZSB0byAyLjMxYS4gQWRkIG1vcmUgc3VwcG9ydCBmb3IgL3Byb2Mvc2NzaS4KKyAgICAgICAgQ29udGludWluZyBtb2R1bGFyaXphdGlvbi4gTGVzcyBjcmFzaGVzIGJlY2F1c2Ugb2YgdGhlIGJ1ZyBpbiB0aGUKKyAgICAgICAgbWVtb3J5IG1hbmFnZW1lbnQgPT0+IGluY3JlYXNlIENfUF9MX0NVUlJFTlRfTUFYIHRvIDEwCisgICAgICAgIGFuZCBkZWNyZWFzZSBDX1BfTF9ESVYgdG8gNC4KKworCSogaG9zdHMuYzogSWYgd2UgcmVtb3ZlIGxhc3QgaG9zdCByZWdpc3RlcmVkLCByZXVzZSBob3N0IG51bWJlci4KKwlXaGVuIGZyZWVpbmcgbWVtb3J5IGZyb20gaG9zdCBiZWluZyBkZXJlZ2lzdGVyZWQsIGZyZWUgZXh0cmFfYnl0ZXMKKwl0b28uCisKKwkqIHNjc2kuYyAoc2Nhbl9zY3Npcyk6IG1lbXNldChTRHBudCwgMCkgYW5kIHNldCBTQ21kLmRldmljZSB0byBTRHBudC4KKwlDaGFuZ2UgbWVtb3J5IGFsbG9jYXRpb24gdG8gd29yayBhcm91bmQgYnVncyBpbiBfX2dldF9kbWFfcGFnZXMuCisJRG8gbm90IGZyZWUgaG9zdCBpZiB1c2FnZSBjb3VudCBpcyBub3QgemVybyAoZm9yIG1vZHVsZXMpLgorCisJKiBzcl9pb2N0bC5jOiBJbmNyZWFzZSBJT0NUTF9USU1FT1VUIHRvIDMwMDAuCisKKwkqIHN0LmM6IEFsbG93IGZvciBTVF9FWFRSQV9ERVZTIGluIHN0IGRhdGEgc3RydWN0dXJlcy4KKworCSogdTE0LTM0Zi5jOiBVcGRhdGUgdG8gMS4xNy4KKworVGh1IEZlYiAgOSAxMDoxMToxNiAxOTk1ICBFcmljIFlvdW5nZGFsZSAgKGVyaWNAYW5kYW50ZSkKKworCSogTGludXggMS4xLjkxIHJlbGVhc2VkLgorCisJKiBlYXRhLmM6IFVwZGF0ZSB0byAxLjE2LiAgVXNlIHdpc2hfYmxvY2sgaW5zdGVhZCBvZiBob3N0LT5ibG9jay4KKworCSogaG9zdHMuYzogSW5pdGlhbGl6ZSB3aXNoX2Jsb2NrIHRvIDAuCisKKwkqIGhvc3RzLmg6IEFkZCB3aXNoX2Jsb2NrLgorCisJKiBzY3NpLmM6IFVzZSB3aXNoX2Jsb2NrIGFzIGluZGljYXRvciB0aGF0IHRoZSBob3N0IHNob3VsZCBiZSBhZGRlZAorCXRvIGJsb2NrIGxpc3QuCisKKwkqIHNnLmM6IEFkZCBTR19FWFRSQV9ERVZTIHRvIG51bWJlciBvZiBzbG90cy4KKworCSogdTE0LTM0Zi5jOiBVc2Ugd2lzaF9ibG9jay4KKworVHVlIEZlYiAgNyAxMTo0NjowNCAxOTk1ICBFcmljIFlvdW5nZGFsZSAgKGVyaWNAYW5kYW50ZSkKKworCSogTGludXggMS4xLjkwIHJlbGVhc2VkLgorCisJKiBlYXRhLmM6IENoYW5nZSBuYW1pbmcgZnJvbSBlYXRhXyogdG8gZWF0YTJ4XyouICBOb3cgYXQgdmVycyAxLjE1LgorCVVwZGF0ZSBpbnRlcnJ1cHQgaGFuZGxlciB0byB0YWtlIHB0X3JlZ3MgYXMgYXJnLiAgQWxsb3cgYmxvY2tpbmcKKwlldmVuIGlmIGxvYWRlZCBhcyBtb2R1bGUuICBJbml0aWFsaXplIHRhcmdldF90aW1lX291dCBhcnJheS4KKwlEbyBub3QgcHV0IHN0aSgpOyBpbiB0aW1pbmcgbG9vcC4KKworCSogaG9zdHMuYzogRG8gbm90IHJldXNlIGhvc3QgbnVtYmVycy4KKwlVc2Ugc2NzaV9tYWtlX2Jsb2NrZWRfbGlzdCB0byBnZW5lcmF0ZSBibG9ja2luZyBsaXN0LgorCisJKiBzY3JpcHRfYXNtLnBsOiAgQmVhdHMgbWUuICBEb24ndCBrbm93IHBlcmwuICBTb21ldGhpbmcgdG8gZG8gd2l0aAorCXBoYXNlIGluZGV4LgorCisJKiBzY3NpLmMgKHNjc2lfbWFrZV9ibG9ja2VkX2xpc3QpOiBOZXcgZnVuY3Rpb24gLSBjb2RlIGNvcGllZCBmcm9tCisJaG9zdHMuYy4KKworCSogc2NzaS5jOiBVcGRhdGUgY29kZSB0byBkaXNhYmxlIHBob3RvIENEIGZvciBUb3NoaWJhIGNkcm9tcy4KKwlVc2UganVzdCBtYW51ZmFjdHVyZXIgbmFtZSwgbm90IG1vZGVsIG51bWJlci4KKworCSogc3IuYzogRml4IHNldHRpbmcgZGVuc2l0eSBmb3IgVG9zaGliYSBkcml2ZXMuCisKKwkqIHUxNC0zNGYuYzogQ2xlYXIgdGFyZ2V0X3RpbWVfb3V0IGFycmF5IGR1cmluZyByZXNldC4KKworV2VkIEZlYiAgMSAwOToyMDo0NSAxOTk1ICBFcmljIFlvdW5nZGFsZSAgKGVyaWNAYW5kYW50ZSkKKworCSogTGludXggMS4xLjg5IHJlbGVhc2VkLgorCisJKiBNYWtlZmlsZSwgdTE0LTM0Zi5jOiBNb2R1bGFyaXplLgorCisJKiBNYWtlZmlsZSwgZWF0YS5jOiBNb2R1bGFyaXplLiAgTm93IHZlcnNpb24gMS4xNAorCisJKiBOQ1I1MzgwLmM6IFVwZGF0ZSBpbnRlcnJ1cHQgaGFuZGxlciB3aXRoIG5ldyBhcmdsaXN0LiAgTWlub3IKKwljbGVhbnVwcy4KKworCSogZWF0YV9kbWEuYzogQmVnaW4gdG8gbW9kdWxhcml6ZS4gIEFkZCBob29rcyBmb3IgL3Byb2Mvc2NzaS4KKwlOZXcgdmVyc2lvbiAyLjMuMGEuIEFkZCBjb2RlIGluIGludGVycnVwdCBoYW5kbGVyIHRvIGFsbG93CisgICAgICAgIGNlcnRhaW4gQ0RST00gZHJpdmVycyB0byBiZSBkZXRlY3RlZCB3aGljaCByZXR1cm4gYQorICAgICAgICBDSEVDS19DT05ESVRJT04gZHVyaW5nIFNDU0kgYnVzIHNjYW4uIEFkZCBvcGNvZGUgY2hlY2sgdG8gZ2V0CisgICAgICAgIGFsbCBEQVRBIElOIGFuZCBEQVRBIE9VVCBwaGFzZXMgcmlnaHQuIFV0aWxpemUgSEJBX2ludGVycHJldCBmbGFnLgorCUltcHJvdmVtZW50cyBpbiBIQkEgaWRlbnRpZmljYXRpb24uIFZhcmlvdXMgb3RoZXIgbWlub3Igc3R1ZmYuCisKKwkqIGhvc3RzLmM6IEluaXRpYWxpemUgLT5kbWFfY2hhbm5lbCBhbmQgLT5pb19wb3J0IHdoZW4gcmVnaXN0ZXJpbmcKKwlhIG5ldyBob3N0LgorCisJKiBxbG9naWMuYzogTW9kdWxhcml6ZSBhbmQgYWRkIFBDTUNJQSBzdXBwb3J0LgorCisJKiBzY3NpLmM6IEFkZCBIaXRhY2hpIHRvIGJsYWNrbGlzdC4KKworCSogc2NzaS5jOiBDaGFuZ2UgZGVmYXVsdCB0byBubyBsdW4gc2NhbiAodG9vIG1hbnkgcHJvYmxlbSBkZXZpY2VzKS4KKworCSogc2NzaS5oOiBEZWZpbmUgUVVFVUVfRlVMTCBjb25kaXRpb24uCisKKwkqIHNkLmM6IERvIG5vdCBjaGVjayBmb3Igbm9uLWV4aXN0ZW50IHBhcnRpdGlvbiB1bnRpbCBhZnRlcgorCW5ldyBtZWRpYSBjaGVjay4KKworCSogc2cuYzogVW5kbyBwcmV2aW91cyBjaGFuZ2Ugd2hpY2ggd2FzIHdyb25nLgorCisJKiBzcl9pb2N0bC5jOiBJbmNyZWFzZSBJT0NUTF9USU1FT1VUIHRvIDIwMDAuCisKKwkqIHN0LmM6IFBhdGNoZXMgZnJvbSBLYWkgLSBpbXByb3ZlIGZpbGVtYXJrIGhhbmRsaW5nLgorCitUdWUgSmFuIDMxIDE3OjMyOjEyIDE5OTUgIEVyaWMgWW91bmdkYWxlICAoZXJpY0BhbmRhbnRlKQorCisJKiBMaW51eCAxLjEuODggcmVsZWFzZWQuCisKKwkqIFRocm91Z2hvdXQgLSBzcGVsbGluZy9ncmFtbWFyIGZpeHVwcy4KKworCSogc2NzaS5jOiBNYWtlIHN1cmUgdGhhdCBhbGwgYnVmZmVycyBhcmUgMTYgYnl0ZSBhbGlnbmVkIC0gc29tZQorCWRyaXZlcnMgKGJ1c2xvZ2ljKSBuZWVkIHRoaXMuCisKKwkqIHNjc2kuYyAoc2Nhbl9zY3Npcyk6IFJlbW92ZSBtZXNzYWdlIHByaW50ZWQuCisKKwkqIHNjc2kuYyAoc2NzaV9pbml0KTogTW92ZSBtZXNzYWdlIGhlcmUuCisKK01vbiBKYW4gMzAgMDY6NDA6MjUgMTk5NSAgRXJpYyBZb3VuZ2RhbGUgIChlcmljQGFuZGFudGUpCisKKwkqIExpbnV4IDEuMS44NyByZWxlYXNlZC4KKworCSogc3IuYzogUGhvdG8tY2QgcmVsYXRlZCBjaGFuZ2VzLiAoR2VyZCBLbm9ycj8/KS4KKworCSogc3QuYzogQ2hhbmdlcyBmcm9tIEthaSByZWxhdGVkIHRvIEVPTSBkZXRlY3Rpb24uCisKK01vbiBKYW4gMjMgMjM6NTM6MTAgMTk5NSAgRXJpYyBZb3VuZ2RhbGUgIChlcmljQGFuZGFudGUpCisKKwkqIExpbnV4IDEuMS44NiByZWxlYXNlZC4KKworCSogNTNjNyw4eHguaDogQ2hhbmdlIFNHIHNpemUgdG8gMTI3LgorCisJKiBlYXRhX2RtYTogVXBkYXRlIHRvIHZlcnNpb24gMi4xMGkuIFJlbW92ZSBidWcgaW4gdGhlIHJlZ2lzdHJhdGlvbgorICAgICAgICBvZiBtdWx0aXBsZSBIQkFzIGFuZCBjaGFubmVscy4gTWlub3Igb3RoZXIgaW1wcm92ZW1lbnRzIGFuZCBzdHlsaXN0aWMKKyAgICAgICAgY2hhbmdlcy4KKworCSogc2NzaS5jOiBUZXN0IGZvciBUb3NoaWJhIFhNLTM0MDFUQSBhbmQgZXhjbHVkZSBmcm9tIGRldGVjdGlvbgorCWFzIHRvc2hpYmEgZHJpdmUgLSBwaG90byBjZCBkb2VzIG5vdCB3b3JrIHdpdGggdGhpcyBkcml2ZS4KKworCSogc3IuYzogIFVwZGF0ZSBwaG90b2NkIGNvZGUuCisKK01vbiBKYW4gMjMgMjM6NTM6MTAgMTk5NSAgRXJpYyBZb3VuZ2RhbGUgIChlcmljQGFuZGFudGUpCisKKwkqIExpbnV4IDEuMS44NSByZWxlYXNlZC4KKworCSogc3QuYywgc3RfaW9jdGwuYywgc2cuYywgc2RfaW9jdGwuYywgc2NzaV9pb2N0bC5jLCBob3N0cy5jOgorCWluY2x1ZGUgbGludXgvbW0uaAorCisJKiBxbG9naWMuYywgYnVzbG9naWMuYywgYWhhMTU0Mi5jOiBJbmNsdWRlIGxpbnV4L21vZHVsZS5oLgorCitTdW4gSmFuIDIyIDIyOjA4OjQ2IDE5OTUgIEVyaWMgWW91bmdkYWxlICAoZXJpY0BhbmRhbnRlKQorCisJKiBMaW51eCAxLjEuODQgcmVsZWFzZWQuCisKKwkqIE1ha2VmaWxlOiBTdXBwb3J0IGZvciBsb2FkYWJsZSBRTE9HSUMgYm9hcmRzLgorCisJKiBhaGExNTJ4LmM6IFVwZGF0ZSB0byB2ZXJzaW9uIDEuOCBmcm9tIEp1ZXJnZW4uCisKKwkqIGVhdGFfZG1hLmM6IFVwZGF0ZSBmcm9tIE1pY2hhZWwgTmV1ZmZlci4KKyAgICAgICAgUmVtb3ZlIGhhcmQgbGltaXQgb2YgMiBjb21tYW5kcyBwZXIgbHVuIGFuZCBtYWtlIGl0IGJldHRlcgorICAgICAgICBjb25maWd1cmFibGUuIEltcHJvdmVtZW50cyBpbiBIQkEgaWRlbnRpZmljYXRpb24uCisKKwkqIGluMjAwMC5jOiBGaXggYmlvc3BhcmFtIHRvIHN1cHBvcnQgbGFyZ2UgZGlza3MuCisKKwkqIHFsb2dpYy5jOiBNaW5vciBjaGFuZ2VzIChjaGFuZ2Ugc3RpIC0+IHJlc3RvcmVfZmxhZ3MpLgorCitXZWQgSmFuIDE4IDIzOjMzOjA5IDE5OTUgIEVyaWMgWW91bmdkYWxlICAoZXJpY0BhbmRhbnRlKQorCisJKiBMaW51eCAxLjEuODMgcmVsZWFzZWQuCisKKwkqIGFoYTE1NDIuYyhhaGExNTQyX2ludHJfaGFuZGxlKTogVXNlIGFyZ3VtZW50cyBoYW5kZWQgZG93biB0byBmaW5kCisJd2hpY2ggaXJxLgorCisJKiBidXNsb2dpYy5jOiBMaWtld2lzZS4KKworCSogZWF0YV9kbWEuYzogVXNlIG1pbiBvZiAyIGNtZF9wZXJfbHVuIGZvciBPQ1NfZW5hYmxlZCBib2FyZHMuCisKKwkqIHNjc2kuYzogTWFrZSBSRUNPVkVSRURfRVJST1IgYSBTVUdHRVNUX0lTX09LLgorCisJKiBzZC5jOiBGYWlsIGlmIHdlIGFyZSBvcGVuaW5nIGEgbm9uLWV4aXN0ZW50IHBhcnRpdGlvbi4KKworCSogc3IuYzogQnVtcCBTUl9USU1FT1VUIHRvIDE1MDAwLgorCURvIG5vdCBwcm9iZSBmb3IgbWVkaWEgc2l6ZSBhdCBib290IHRpbWUoaGFyZCBvbiBjaGFuZ2VycykuCisJRmxhZyBkZXZpY2UgYXMgbmVlZGluZyBzZWN0b3Igc2l6ZSBpbnN0ZWFkLgorCisJKiBzcl9pb2N0bC5jOiBSZW1vdmUgQ0RST01NVUxUSVNFU1NJT05fU1lTIGlvY3RsLgorCisJKiB1bHRyYXN0b3IuYzogRml4IGJ1ZyBpbiBjYWxsIHRvIHVsdHJhc3Rvcl9pbnRlcnJ1cHQgKHdyb25nICNhcmdzKS4KKworTW9uIEphbiAxNiAwNzoxODoyMyAxOTk1ICBFcmljIFlvdW5nZGFsZSAgKGVyaWNAYW5kYW50ZSkKKworCSogTGludXggMS4xLjgyIHJlbGVhc2VkLgorCisJVGhyb3VnaG91dC4KKwktIENoYW5nZSBhbGwgaW50ZXJydXB0IGhhbmRsZXJzIHRvIGFjY2VwdCBuZXcgY2FsbGluZyBjb252ZW50aW9uLgorCUluIHBhcnRpY3VsYXIsIHdlIG5vdyByZWNlaXZlIHRoZSBpcnEgbnVtYmVyIGFzIG9uZSBvZiB0aGUgYXJndW1lbnRzLgorCisJKiBNb3JlIG1pbm9yIHNwZWxsaW5nIGNvcnJlY3Rpb25zIGluIHNvbWUgb2YgdGhlIG5ldyBmaWxlcy4KKworCSogYWhhMTU0Mi5jLCBidXNsb2dpYy5jOiBDbGVhbiB1cCBpbnRlcnJ1cHQgaGFuZGxlciBhIGxpdHRsZSBub3cKKwl0aGF0IHdlIHJlY2VpdmUgdGhlIGlycSBhcyBhbiBhcmcuCisKKwkqIGFoYTI3NHguYzogcy9zbmFyZl9yZWdpb24vcmVxdWVzdF9yZWdpb24vCisKKwkqIGVhdGEuYzogVXBkYXRlIHRvIHZlcnNpb24gMS4xMi4gICBGaXggc29tZSBjb21tZW50cyBhbmQgZGlzcGxheSBhCisJbWVzc2FnZSBpZiB3ZSBjYW5ub3QgcmVzZXJ2ZSB0aGUgcG9ydCBhZGRyZXNzZXMuCisKKwkqIHUxNC0zNGYuYzogVXBkYXRlIHRvIHZlcnNpb24gMS4xMy4gICBGaXggc29tZSBjb21tZW50cyBhbmQgZGlzcGxheSBhCisJbWVzc2FnZSBpZiB3ZSBjYW5ub3QgcmVzZXJ2ZSB0aGUgcG9ydCBhZGRyZXNzZXMuCisKKwkqIGVhdGFfZG1hLmM6IERlZmluZSBnZXRfYm9hcmRfZGF0YSBmdW5jdGlvbiAoc2VuZCBJTlFVSVJZIGNvbW1hbmQpLgorCVVzZSB0byBpbXByb3ZlIGRldGVjdGlvbiBvZiB2YXJpYW50cyBvZiBkaWZmZXJlbnQgRFBUIGJvYXJkcy4gIENoYW5nZQorCXZlcnNpb24gc3VibnVtYmVyIHRvICIwZyIuCisKKwkqIGZkb21haW4uYzogIFVwZGF0ZSB0byB2ZXJzaW9uIDUuMjYuICBJbXByb3ZlIGRldGVjdGlvbiBvZiBzb21lIGJvYXJkcworCXJlcGFja2FnZWQgYnkgSUJNLgorCisJKiBzY3NpLmMgKHNjc2lfcmVnaXN0ZXJfaG9zdCk6IENoYW5nZSAibmFtZSIgdG8gY29uc3QgY2hhciAqLgorCisJKiBzci5jOiBGaXggcHJvYmxlbSBpbiBzZXQgbW9kZSBjb21tYW5kIGZvciBUb3NoaWJhIGRyaXZlcy4KKworCSogc3IuYzogRml4IHR5cG8gZnJvbSBwYXRjaCA4MS4KKworRnJpIEphbiAxMyAxMjo1NDo0NiAxOTk1ICBFcmljIFlvdW5nZGFsZSAgKGVyaWNAYW5kYW50ZSkKKworCSogTGludXggMS4xLjgxIHJlbGVhc2VkLiAgQ29kZWZyZWV6ZSBmb3IgMS4yIHJlbGVhc2UgYW5ub3VuY2VkLgorCisJQmlnIGNoYW5nZXMgaGVyZS4KKworCSogZWF0YV9kbWEuKjogTmV3IGZpbGVzIGZyb20gTWljaGFlbCBOZXVmZmVyLgorCShuZXVmZmVyQGdvb2Z5Lnpkdi51bmktbWFpbnouZGUpLiAgU2hvdWxkIHN1cHBvcnQKKwlhbGwgZWF0YS9kcHQgY2FyZHMuCisKKwkqIGhvc3RzLmMsIE1ha2VmaWxlOiBBZGQgZWF0YV9kbWEuCisKKwkqIFJFQURNRS5zdDogRG9jdW1lbnQgTVRFT00uCisKKwlQYXRjaGVzIGZyb20gbWUgKEVSWSkgdG8gZmluaXNoIHN1cHBvcnQgZm9yIGxvdy1sZXZlbCBsb2FkYWJsZSBzY3NpLgorCUl0IG5vdyB3b3JrcywgYW5kIGlzIGFjdHVhbGx5IHVzZWZ1bC4KKworCSogVGhyb3VnaG91dCAtIGFkZCBuZXcgYXJndW1lbnQgdG8gc2NzaV9pbml0X21hbGxvYyB0aGF0IHRha2VzIGFuCisJYWRkaXRpb25hbCBwYXJhbWV0ZXIuICBUaGlzIGlzIHVzZWQgYXMgYSBwcmlvcml0eSB0byBrbWFsbG9jLAorCWFuZCB5b3UgY2FuIHNwZWNpZnkgdGhlIEdGUF9ETUEgZmxhZyBpZiB5b3UgbmVlZCBETUEtYWJsZSBtZW1vcnkuCisKKwkqIE1ha2VmaWxlOiBGb3Igc291cmNlIGZpbGVzIHRoYXQgYXJlIGxvYWRhYmxlLCBhbHdheXMgYWRkIG5hbWUKKwl0byBTQ1NJX1NSQ1MuICBGaWxsIGluIG1vZHVsZXM6IHRhcmdldC4KKworCSogaG9zdHMuYzogIENoYW5nZSBuZXh0X2hvc3QgdG8gbmV4dF9zY3NpX2hvc3QsIGFuZCBtYWtlIGdsb2JhbC4KKwlQcmludCBob3N0cyBhZnRlciB3ZSBoYXZlIGlkZW50aWZpZWQgYWxsIG9mIHRoZW0uICBVc2UgaW5mbygpCisJZnVuY3Rpb24gaWYgcHJlc2VudCwgb3RoZXJ3aXNlIHVzZSBuYW1lIGZpZWxkLgorCisJKiBob3N0cy5oOiBDaGFuZ2UgYXR0YWNoIGZ1bmN0aW9uIHRvIHJldHVybiBpbnQsIG5vdCB2b2lkLgorCURlZmluZSBudW1iZXIgb2YgZGV2aWNlIHNsb3RzIHRvIGFsbG93IGZvciBsb2FkYWJsZSBkZXZpY2VzLgorCURlZmluZSB0YWdzIHRvIHRlbGwgc2NzaSBtb2R1bGUgY29kZSB3aGF0IHR5cGUgb2YgbW9kdWxlIHdlCisJYXJlIGxvYWRpbmcuCisKKwkqIHNjc2kuYzogRml4IHNjYW5fc2NzaXMgc28gdGhhdCBpdCBjYW4gYmUgcnVuIGJ5IGEgdXNlciBwcm9jZXNzLgorCURvIG5vdCB1c2Ugd2FpdGluZyBsb29wcyAtIHVzZSB1cCBhbmQgZG93biBtZWNoYW5pc20gYXMgbG9uZworCWFzIGN1cnJlbnQgIT0gdGFza1swXS4KKworCSogc2NzaS5jKHNjYW5fc2NzaXMpOiBEbyBub3QgdXNlIHN0YWNrIHZhcmlhYmxlcyBmb3IgSS9PIC0gdGhpcworCWNvdWxkIGJlID4gMTZNYiBpZiB3ZSBhcmUgbG9hZGluZyBhIG1vZHVsZSBhdCBydW50aW1lIChpLmUuIHVzZQorCXNjc2lfaW5pdF9tYWxsb2MgdG8gZ2V0IHNvbWUgbWVtb3J5IHdlIGtub3cgd2lsbCBiZSBzYWZlKS4KKworCSogc2NzaS5jOiBDaGFuZ2UgZG1hIGZyZWVsaXN0IHRvIGJlIGEgc2V0IG9mIHBhZ2VzLiAgVGhpcyBhbGxvd3MKKwl1cyB0byBkeW5hbWljYWxseSBhZGp1c3QgdGhlIHNpemUgb2YgdGhlIGxpc3QgYnkgYWRkaW5nIG1vcmUgcGFnZXMKKwl0byB0aGUgcGFnZWxpc3QuICBGaXggc2NzaV9tYWxsb2MgYW5kIHNjc2lfZnJlZSBhY2NvcmRpbmdseS4KKworCSogc2NzaV9tb2R1bGUuYzogRml4IGluY2x1ZGUuCisKKwkqIHNkLmM6IERlY2xhcmUgZGV0YWNoIGZ1bmN0aW9uLiAgSW5jcmVtZW50L2RlY3JlbWVudCBtb2R1bGUgdXNhZ2UKKwljb3VudCBhcyByZXF1aXJlZC4gIEZpeCBpbml0IGZ1bmN0aW9ucyB0byBhbGxvdyBsb2FkZWQgZGV2aWNlcy4KKwlSZXZhbGlkYXRlIGFsbCBuZXcgZGlza3Mgc28gd2UgZ2V0IHRoZSBwYXJ0aXRpb24gdGFibGVzLiAgRGVmaW5lCisJZGV0YWNoIGZ1bmN0aW9uLgorCisJKiBzci5jOiBMaWtld2lzZS4KKworCSogc2cuYzogRGVjbGFyZSBkZXRhY2ggZnVuY3Rpb24uICBBbGxvdyBhdHRhY2htZW50IG9mIGRldmljZXMgb24KKwlsb2FkZWQgZHJpdmVycy4KKworCSogc3QuYzogRGVjbGFyZSBkZXRhY2ggZnVuY3Rpb24uICBJbmNyZW1lbnQvZGVjcmVtZW50IG1vZHVsZSB1c2FnZQorCWNvdW50IGFzIHJlcXVpcmVkLgorCitUdWUgSmFuIDEwIDEwOjA5OjU4IDE5OTUgIEVyaWMgWW91bmdkYWxlICAoZXJpY0BhbmRhbnRlKQorCisJKiBMaW51eCAxLjEuNzkgcmVsZWFzZWQuCisKKwlQYXRjaCBmcm9tIHNvbWUgdW5kZXRlcm1pbmVkIGluZGl2aWR1YWwgd2hvIG5lZWRzIHRvIGdldCBhIGxpZmUgOi0pLgorCisJKiBzci5jOiBBdHRhY2tlZCBieSBzcGVsbGluZyBiZWUuLi4KKworCVBhdGNoZXMgZnJvbSBHZXJkIEtub3JyOgorCisJKiBzci5jOiBtYWtlIHByaW50ayBtZXNzYWdlcyBmb3IgcGhvdG9DRCBhIGxpdHRsZSBtb3JlIGluZm9ybWF0aXZlLgorCisJKiBzcl9pb2N0bC5jOiBGaXggQ0RST01NVUxUSVNFU1NJT05fU1lTIGlvY3RsLgorCitNb24gSmFuICA5IDEwOjAxOjM3IDE5OTUgIEVyaWMgWW91bmdkYWxlICAoZXJpY0BhbmRhbnRlKQorCisJKiBMaW51eCAxLjEuNzggcmVsZWFzZWQuCisKKwkqIE1ha2VmaWxlOiBBZGQgZW1wdHkgbW9kdWxlczogdGFyZ2V0LgorCisJKiBXaGVlZS4gIE5vdyBjaGFuZ2UgcmVnaXN0ZXJfaW9tZW0gdG8gcmVxdWVzdF9yZWdpb24uCisKKwkqIGluMjAwMC5jOiBCdWdmaXggLSBhcHBhcmVudGx5IHRoaXMgaXMgdGhlIGZpeCB0aGF0IHdlIGhhdmUKKwlhbGwgYmVlbiB3YWl0aW5nIGZvci4gIEl0IGZpeGVzIGEgcHJvYmxlbSB3aGVyZWJ5IHRoZSBkcml2ZXIKKwlpcyBub3Qgc3RhYmxlIHVuZGVyIGhlYXZ5IGxvYWQuICBSYWNlIGNvbmRpdGlvbiBhbmQgYWxsIHRoYXQuCisJUGF0Y2ggZnJvbSBQZXRlciBMdS4KKworV2VkIEphbiAgNCAyMToxNzo0MCAxOTk1ICBFcmljIFlvdW5nZGFsZSAgKGVyaWNAYW5kYW50ZSkKKworCSogTGludXggMS4xLjc3IHJlbGVhc2VkLgorCisJKiA1M2M3LDh4eC5jOiBGaXggZnJvbSBMaW51cyAtIGVtdWxhdGUgc3BseC4KKworCVRocm91Z2hvdXQ6CisKKwkJQ2hhbmdlICJzbmFyZl9yZWdpb24iIHdpdGggInJlZ2lzdGVyX2lvbWVtIi4KKworCSogc2NzaV9tb2R1bGUuYzogTmV3IGZpbGUuICBDb250YWlucyBzdXBwb3J0IGZvciBsb3ctbGV2ZWwgbG9hZGFibGUKKwkgIHNjc2kgZHJpdmVycy4gW0VSWV0uCisKKwkqIHNkLmM6IE1vcmUgcy9pbnQvbG9uZy8gY2hhbmdlcy4KKworCSogc2VhZ2F0ZS5jOiBFeHBsaWNpdGx5IGluY2x1ZGUgbGludXgvY29uZmlnLmgKKworCSogc2cuYzogSW5jcmVtZW50L2RlY3JlbWVudCBtb2R1bGUgdXNhZ2UgY291bnQgb24gb3Blbi9jbG9zZS4KKworCSogc2cuYzogQmUgYSBiaXQgbW9yZSBjYXJlZnVsIGFib3V0IHRoZSB1c2VyIG5vdCBzdXBwbHlpbmcgZW5vdWdoCisJICBpbmZvcm1hdGlvbiBmb3IgYSB2YWxpZCBjb21tYW5kLiAgUGFzcyBjb3JyZWN0IHNpemUgZG93biB0bworCSAgc2NzaV9kb19jbWQuCisKKwkqIHNyLmM6ICBNb3JlIGNoYW5nZXMgZm9yIFBob3RvLUNELiAgVGhpcyBhcHBhcmVudGx5IGJyZWFrcyBORUMgZHJpdmVzLgorCisJKiBzcl9pb2N0bC5jOiAgU3VwcG9ydCBDRFJPTU1VTFRJU0VTU0lPTiBpb2N0bC4KKworCitTdW4gSmFuICAxIDE5OjU1OjIxIDE5OTUgIEVyaWMgWW91bmdkYWxlICAoZXJpY0BhbmRhbnRlKQorCisJKiBMaW51eCAxLjEuNzYgcmVsZWFzZWQuCisKKwkqIGNvbnN0YW50cy5jOiBBZGQgdHlwZSBjYXN0IGluIHN3aXRjaCBzdGF0ZW1lbnQuCisKKwkqIHNjc2kuYyAoc2NzaV9mcmVlKTogQ2hhbmdlIGRhdGF0eXBlIG9mICJvZmZzZXQiIHRvIGxvbmcuCisJICAoc2NzaV9tYWxsb2MpOiBDaGFuZ2UgYSBmZXcgbW9yZSB2YXJpYWJsZXMgdG8gbG9uZy4gIFdobworCSAgZGlkIHRoaXMgYW5kIHdoeSB3YXMgaXQgaW1wb3J0YW50PyAgNjQgYml0IG1hY2hpbmVzPworCisKKwlMb3RzIG9mIGNoYW5nZXMgdG8gdXNlIHNhdmVfc3RhdGUvcmVzdG9yZV9zdGF0ZSBpbnN0ZWFkIG9mIGNsaS9zdGkuCisJRmlsZXMgY2hhbmdlZCBpbmNsdWRlOgorCisJKiBhaGExNTQyLmM6CisJKiBhaGExNzQwLmM6CisJKiBidXNsb2dpYy5jOgorCSogaW4yMDAwLmM6CisJKiBzY3NpLmM6CisJKiBzY3NpX2RlYnVnLmM6CisJKiBzZC5jOgorCSogc3IuYzoKKwkqIHN0LmM6CisKK1dlZCBEZWMgMjggMTY6Mzg6MjkgMTk5NCAgRXJpYyBZb3VuZ2RhbGUgIChlcmljQGFuZGFudGUpCisKKwkqIExpbnV4IDEuMS43NSByZWxlYXNlZC4KKworCSogYnVzbG9naWMuYzogU3BlbGxpbmcgZml4LgorCisJKiBzY3NpLmM6IEFkZCBIUCBDMTc5MEEgYW5kIEMyNTAwQSBzY2FuamV0IHRvIGJsYWNrbGlzdC4KKworCSogc2NzaS5jOiBTcGVsbGluZyBmaXh1cC4KKworCSogc2QuYzogQWRkIHN1cHBvcnQgZm9yIHNkX2hhcmRzaXplcyAoaGFyZCBzZWN0b3Igc2l6ZXMpLgorCisJKiB1bHRyYXN0b3IuYzogVXNlIHNhdmVfZmxhZ3MvcmVzdG9yZV9mbGFncyBpbnN0ZWFkIG9mIGNsaS9zdGkuCisKK0ZyaSBEZWMgMjMgMTM6MzY6MjUgMTk5NCAgRXJpYyBZb3VuZ2RhbGUgIChlcmljQGFuZGFudGUpCisKKwkqIExpbnV4IDEuMS43NCByZWxlYXNlZC4KKworCSogUkVBRE1FLnN0OiBVcGRhdGUgZnJvbSBLYWkgTWFraXNhcmEuCisKKwkqIGVhdGEuYzogTmV3IHZlcnNpb24gZnJvbSBEYXJpbyAtIHZlcnNpb24gMS4xMS4KKwkgIHVzZSBzY3NpY2FtIGJpb3NfcGFyYW0gcm91dGluZS4gIEFkZCBzdXBwb3J0IGZvciAyMDExCisJICBhbmQgMjAyMSBib2FyZHMuCisKKwkqIGhvc3RzLmM6IEFkZCBzdXBwb3J0IGZvciBibG9ja2luZy4gIExpbmtlZCBsaXN0IGF1dG9tYXRpY2FsbHkKKwkgIGdlbmVyYXRlZCB3aGVuIHNocG50LT5ibG9jayBpcyBzZXQuCisKKwkqIHNjc2kuYzogQWRkIHNhbmt5byAmIEhQIHNjYW5qZXQgdG8gYmxhY2tsaXN0LiAgQWRkIHN1cHBvcnQgZm9yCisJICBraWNraW5nIHRoaW5ncyBsb29zZSB3aGVuIHdlIGRlYWRsb2NrLgorCisJKiBzY3NpLmM6IFJlY29nbml6ZSBzY2FubmVycyBhbmQgcHJvY2Vzc29ycyBpbiBzY2FuX3Njc2lzLgorCisJKiBzY3NpX2lvY3RsLmg6IEluY3JlYXNlIHRpbWVvdXQgdG8gOSBzZWNvbmRzLgorCisJKiBzdC5jOiBOZXcgdmVyc2lvbiBmcm9tIEthaSAtIGFkZCBiZXR0ZXIgc3VwcG9ydCBmb3IgYmFja3NwYWNlLgorCisJKiB1MTQtMzRmLmM6IE5ldyB2ZXJzaW9uIGZyb20gRGFyaW8uICBTdXBwb3J0cyBibG9ja2luZy4KKworV2VkIERlYyAxNCAxNDo0NjozMCAxOTk0ICBFcmljIFlvdW5nZGFsZSAgKGVyaWNAYW5kYW50ZSkKKworCSogTGludXggMS4xLjczIHJlbGVhc2VkLgorCisJKiBidXNsb2dpYy5jOiBVcGRhdGUgZnJvbSBEYXZlIEdlbnR6ZWwuICBWZXJzaW9uIDEuMTQuCisJICBBZGQgbW9kdWxlIHJlbGF0ZWQgc3R1ZmYuICAgTW9yZSBmYXVsdCB0b2xlcmFudCBpZiBvdXQgb2YKKwkgIERNQSBtZW1vcnkuCisKKwkqIGZkb21haW4uYzogTmV3IHZlcnNpb24gZnJvbSBSaWsgRmFpdGggLSB2ZXJzaW9uIDUuMjIuICBBZGQgc3VwcG9ydAorCSAgZm9yIElTQS0yMDBTIFNDU0kgYWRhcHRlci4KKworCSogaG9zdHMuYzogU3BlbGxpbmcuCisKKwkqIHFsb2dpYy5jOiBVcGRhdGUgdG8gdmVyc2lvbiAwLjM4YS4gIEFkZCBtb3JlIHN1cHBvcnQgZm9yIFBDTUNJQS4KKworCSogc2NzaS5jOiBNYXNrIGRldmljZSB0eXBlIHdpdGggMHgxZiBkdXJpbmcgc2Nhbl9zY3Npcy4KKwkgIEFkZCBzdXBwb3J0IGZvciBkZWFkbG9ja2luZywgZXJyLCBtYWtlIHRoYXQgZ2V0dGluZyBvdXQgb2YKKwkgIGRlYWRsb2NrIHNpdHVhdGlvbnMgdGhhdCBhcmUgY3JlYXRlZCB3aGVuIHdlIGFsbG93IHRoZSB1c2VyCisJICB0byBsaW1pdCByZXF1ZXN0cyB0byBvbmUgaG9zdCBhZGFwdGVyIGF0IGEgdGltZS4KKworCSogc2NzaS5jOiBCdWdmaXggLSBwYXNzIHBpZCwgbm90IFNDcG50IGFzIHNlY29uZCBhcmcgdG8KKwkgIHNjc2lfdGltZXNfb3V0LgorCisJKiBzY3NpLmM6IFJlc3RvcmUgaW50ZXJydXB0IHN0YXRlIHRvIHByZXZpb3VzIHZhbHVlIGluc3RlYWQgb2YgdXNpbmcKKwkgIGNsaS9zdGkgcGFpcnMuCisKKwkqIHNjc2kuYzogQWRkIGEgYnVuY2ggb2YgbW9kdWxlIHN0dWZmIChhbGwgY29tbWVudGVkIG91dCBmb3Igbm93KS4KKworCSogc2NzaS5jOiBDbGVhbiB1cCBzY3NpX2R1bXBfc3RhdHVzLgorCitUdWUgRGVjICA2IDEyOjM0OjIwIDE5OTQgIEVyaWMgWW91bmdkYWxlICAoZXJpY0BhbmRhbnRlKQorCisJKiBMaW51eCAxLjEuNzIgcmVsZWFzZWQuCisKKwkqIHNnLmM6IEJ1Z2ZpeCAtIGFsd2F5cyB1c2Ugc2dfZnJlZSwgc2luY2Ugd2UgbWlnaHQgaGF2ZSBiaWcgYnVmZi4KKworRnJpIERlYyAgMiAxMToyNDo1MyAxOTk0ICBFcmljIFlvdW5nZGFsZSAgKGVyaWNAYW5kYW50ZSkKKworCSogTGludXggMS4xLjcxIHJlbGVhc2VkLgorCisJKiBzZy5jOiBDbGVhciBidWZmIGZpZWxkIHdoZW4gbm90IGluIHVzZS4gIE9ubHkgY2FsbCBzY3NpX2ZyZWUgaWYKKwlub24tbnVsbC4KKworCSogc2NzaS5oOiBDYWxsIHdha2VfdXAoJndhaXRfZm9yX3JlcXVlc3QpIHdoZW4gZG9uZSB3aXRoIGEKKwljb21tYW5kLgorCisJKiBzY3NpLmMgKHNjc2lfdGltZXNfb3V0KTogUGFzcyBwaWQgZG93biBzbyB0aGF0IHdlIGNhbiBwcm90ZWN0CisJYWdhaW5zdCByYWNlIGNvbmRpdGlvbnMuCisKKwkqIHNjc2kuYyAoc2NzaV9hYm9ydCk6IFplcm8gdGltZW91dCBmaWVsZCBpZiB3ZSBnZXQgdGhlCisJTk9UX1JVTk5JTkcgbWVzc2FnZSBiYWNrIGZyb20gbG93LWxldmVsIGRyaXZlci4KKworCisJKiBzY3NpLmMgKHNjc2lfZG9uZSk6IFJlc3RvcmUgY21kX2xlbiwgdXNlX3NnIGhlcmUuCisKKwkqIHNjc2kuYyAocmVxdWVzdF9zZW5zZSk6IE5vdCBoZXJlLgorCisJKiBob3N0cy5oOiBBZGQgbmV3IGZvcmJpZGRlbl9hZGRyLCBmb3JiaWRkZW5fc2l6ZSBmaWVsZHMuICBXaG8KKwlhZGRlZCB0aGVzZSBhbmQgd2h5Pz8/PworCisJKiBob3N0cy5jIChzY3NpX21lbV9pbml0KTogTWFyayBwYWdlcyBhcyByZXNlcnZlZCBpZiB0aGV5IGZhbGwgaW4KKwl0aGUgZm9yYmlkZGVuIHJlZ2lvbnMuICBJIGFtIG5vdCBzdXJlIC0gSSB0aGluayB0aGlzIGlzIHNvIHRoYXQKKwl3ZSBjYW4gZGVhbCB3aXRoIGJvYXJkcyB0aGF0IGRvIGluY29tcGxldGUgZGVjb2Rpbmcgb2YgdGhlaXIKKwlhZGRyZXNzIGxpbmVzIGZvciB0aGUgYmlvcyBjaGlwcywgYnV0IEkgYW0gbm90IGVudGlyZWx5IHN1cmUuCisKKwkqIGJ1c2xvZ2ljLmM6IFNldCBmb3JiaWRkZW5fYWRkciBzdHVmZiBpZiB1c2luZyBhIGJ1Z2d5IGJvYXJkLgorCisJKiBhaGExNzQwLmM6IFRlc3QgZm9yIE5VTEwgcG9pbnRlciBpbiBTQ3RtcC4gIFRoaXMgc2hvdWxkIG5vdAorCW9jY3VyLCBidXQgYSBuaWNlIG1lc3NhZ2UgaXMgYmV0dGVyIHRoYW4gYSBrZXJuZWwgc2VnZmF1bHQuCisKKwkqIDUzYzcsOHh4LmM6IEFkZCBuZXcgUENJIGNoaXAgSUQgZm9yIDgxNS4KKworRnJpIERlYyAgMiAxMToyNDo1MyAxOTk0ICBFcmljIFlvdW5nZGFsZSAgKGVyaWNAYW5kYW50ZSkKKworCSogTGludXggMS4xLjcwIHJlbGVhc2VkLgorCisJKiBDaGFuZ2VMb2csIHN0LmM6IFNwZWxsaW5nLgorCitUdWUgTm92IDI5IDE4OjQ4OjQyIDE5OTQgIEVyaWMgWW91bmdkYWxlICAoZXJpY0BhbmRhbnRlKQorCisJKiBMaW51eCAxLjEuNjkgcmVsZWFzZWQuCisKKwkqIHUxNC0zNGYuaDogTm9uLWZ1bmN0aW9uYWwgY2hhbmdlLiAgW0RhcmlvXS4KKworCSogdTE0LTM0Zi5jOiBVc2UgYmxvY2sgZmllbGQgaW4gU2NzaV9Ib3N0IHRvIHByZXZlbnQgY29tbWFuZHMgZnJvbQorCWJlaW5nIHF1ZXVlZCB0byBtb3JlIHRoYW4gb25lIGhvc3QgYXQgdGhlIHNhbWUgdGltZSAodXNlZCB3aGVuCisJbW90aGVyYm9hcmQgZG9lcyBub3QgZGVhbCB3aXRoIG11bHRpcGxlIGJ1cy1tYXN0ZXJzIHZlcnkgd2VsbCkuCisJT25seSB3aGVuIFNJTkdMRV9IT1NUX09QRVJBVElPTlMgaXMgZGVmaW5lZC4KKwlVc2UgbmV3IGNtZF9wZXJfbHVuIGZpZWxkLiAgW0RhcmlvXQorCisJKiBlYXRhLmM6IExpa2V3aXNlLgorCisJKiBzdC5jOiBNb3JlIGNoYW5nZXMgZnJvbSBLYWkuICBBZGQgcmVhZHkgZmxhZyB0byBpbmRpY2F0ZSBkcml2ZQorCXN0YXR1cy4KKworCSogUkVBRE1FLnN0OiBEb2N1bWVudCB0aGlzLgorCisJKiBzci5jOiBCdWdmaXggKGRvIG5vdCBzdWJ0cmFjdCBDRF9CTE9DS19PRkZTRVQpIGZvciBwaG90by1jZAorCWNvZGUuCisKKwkqIHNnLmM6IEJ1Z2ZpeCAtIGZpeCBwcm9ibGVtIHdoZXJlIG9wY29kZSBpcyBub3QgY29ycmVjdGx5IHNldCB1cC4KKworCSogc2VhZ2F0ZS5bYyxoXTogVXNlICNkZWZpbmVzIHRvIHNldCBkcml2ZXIgbmFtZS4KKworCSogc2NzaV9pb2N0bC5jOiBaZXJvIGJ1ZmZlciBiZWZvcmUgZXhlY3V0aW5nIGNvbW1hbmQuCisKKwkqIHNjc2kuYzogVXNlIG5ldyBjbWRfcGVyX2x1biBmaWVsZCBpbiBTY3NpX0hvc3RzIGFzIGFwcHJvcHJpYXRlLgorCUFkZCBTb255IENEVTU1UyB0byBibGFja2xpc3QuCisKKwkqIGhvc3RzLmg6IEFkZCBuZXcgY21kX3Blcl9sdW4gZmllbGQgdG8gU2NzaV9Ib3N0cy4KKworCSogaG9zdHMuYzogSW5pdGlhbGl6ZSBjbWRfcGVyX2x1biBpbiBTY3NpX0hvc3RzIGZyb20gdGVtcGxhdGUuCisKKwkqIGJ1c2xvZ2ljLmM6IFVzZSBjbWRfcGVyX2x1biBmaWVsZCAtIGluaXRpYWxpemUgdG8gZGlmZmVyZW50CisJdmFsdWVzIGRlcGVuZGluZyB1cG9uIGJ1cyB0eXBlIChpLmUuIHVzZSAxIGlmIElTQSwgc28gd2UgZG8gbm90CisJaG9nIG1lbW9yeSkuICBVc2Ugb3RoZXIgcGF0Y2hlcyB3aGljaCBnb3QgbG9zdCBmcm9tIDEuMS42OC4KKworCSogYWhhMTU0Mi5jOiBTcGVsbGluZy4KKworVHVlIE5vdiAyOSAxNTo0Mzo1MCAxOTk0ICBFcmljIFlvdW5nZGFsZSAgKGVyaWNAYW5kYW50ZS5haWIuY29tKQorCisJKiBMaW51eCAxLjEuNjggcmVsZWFzZWQuCisKKwlBZGQgc3VwcG9ydCBmb3IgMTIgYnl0ZSB2ZW5kb3Igc3BlY2lmaWMgY29tbWFuZHMgaW4gc2NzaS1nZW5lcmljcywKKwltb3JlIChpLmUuIHRoZSBsYXN0IG1hbmRhdG9yeSkgbG93LWxldmVsIGNoYW5nZXMgdG8gc3VwcG9ydAorCWxvYWRhYmxlIG1vZHVsZXMsIHBsdXMgYSBmZXcgb3RoZXIgY2hhbmdlcyBwZW9wbGUgaGF2ZSByZXF1ZXN0ZWQKKwlsYXRlbHkuICBDaGFuZ2VzIGJ5IG1lIChFUlkpIHVubGVzcyBvdGhlcndpc2Ugbm90ZWQuICBTcGVsbGluZworCWNoYW5nZXMgYXBwZWFyIGZyb20gc29tZSB1bmtub3duIGNvcm5lciBvZiB0aGUgdW5pdmVyc2UuCisKKwkqIFRocm91Z2hvdXQ6IENoYW5nZSBDT01NQU5EX1NJWkUoKSB0byB1c2UgU0NwbnQtPmNtZF9sZW4uCisKKwkqIFRocm91Z2hvdXQ6IENoYW5nZSBpbmZvKCkgbG93IGxldmVsIGZ1bmN0aW9uIHRvIHRha2UgYSBTY3NpX0hvc3QKKwlwb2ludGVyLiAgVGhpcyB3YXkgdGhlIGluZm8gZnVuY3Rpb24gY2FuIHJldHVybiBzcGVjaWZpYworCWluZm9ybWF0aW9uIGFib3V0IHRoZSBob3N0IGluIHF1ZXN0aW9uLCBpZiBkZXNpcmVkLgorCisJKiBBbGwgbG93LWxldmVsIGRyaXZlcnM6IEFkZCBOVUxMIGluIGluaXRpYWxpemVyIGZvciB0aGUKKwl1c2FnZV9jb3VudCBmaWVsZCBhZGRlZCB0byBTY3NpX0hvc3RfVGVtcGxhdGUuCisKKwkqIGFoYTE1MnguW2MsaF06IFJlbW92ZSByZWR1bmRhbnQgaW5mbygpIGZ1bmN0aW9uLgorCisJKiBhaGExNTQyLltjLGhdOiBMaWtld2lzZS4KKworCSogYWhhMTc0MC5bYyxoXTogTGlrZXdpc2UuCisKKwkqIGFoYTI3NHguW2MsaF06IExpa2V3aXNlLgorCisJKiBlYXRhLltjLGhdOiBMaWtld2lzZS4KKworCSogcGFzMTYuW2MsaF06IExpa2V3aXNlLgorCisJKiBzY3NpX2RlYnVnLltjLGhdOiBMaWtld2lzZS4KKworCSogdDEyOC5bYyxoXTogTGlrZXdpc2UuCisKKwkqIHUxNC0zNGYuW2MsaF06IExpa2V3aXNlLgorCisJKiB1bHRyYXN0b3IuW2MsaF06IExpa2V3aXNlLgorCisJKiB3ZDcwMDAuW2MsaF06IExpa2V3aXNlLgorCisJKiBhaGExNTQyLmM6IEFkZCBzdXBwb3J0IGZvciBjb21tYW5kIGxpbmUgb3B0aW9ucyB3aXRoIGxpbG8gdG8gc2V0CisJRE1BIHBhcmFtZXRlcnMsIEkvTyBwb3J0LiAgRnJvbSBNYXR0IEFhcm5pby4KKworCSogYnVzbG9naWMuW2MsaF06IE5ldyB2ZXJzaW9uICgxLjEzKSBmcm9tIERhdmUgR2VudHplbC4KKworCSogaG9zdHMuaDogQWRkIG5ldyBmaWVsZCB0byBTY3NpX0hvc3RzICJibG9jayIgdG8gYWxsb3cgYmxvY2tpbmcKKwlhbGwgSS9PIHRvIGNlcnRhaW4gb3RoZXIgY2FyZHMuICBIZWxwcyBwcmV2ZW50IHByb2JsZW1zIHdpdGggc29tZQorCUlTQSBtb3RoZXJib2FyZHMuCisKKwkqIGhvc3RzLmg6IEFkZCB1c2FnZV9jb3VudCB0byBTY3NpX0hvc3RfVGVtcGxhdGUuCisKKwkqIGhvc3RzLmg6IEFkZCBuX2lvX3BvcnQgdG8gU2NzaV9Ib3N0ICh1c2VkIHdoZW4gcmVsZWFzaW5nIG1vZHVsZSkuCisKKwkqIGhvc3RzLmM6IEluaXRpYWxpemUgYmxvY2sgZmllbGQuCisKKwkqIGluMjAwMC5jOiBSZW1vdmUgInN0YXRpYyIgZGVjbGFyYXRpb25zIGZyb20gZXhwb3J0ZWQgZnVuY3Rpb25zLgorCisJKiBpbjIwMDAuaDogTGlrZXdpc2UuCisKKwkqIHNjc2kuYzogQ29ycmVjdGx5IHNldCBjbWRfbGVuIGZpZWxkIGFzIHJlcXVpcmVkLiAgU2F2ZSBhbmQKKwljaGFuZ2Ugc2V0dGluZyB3aGVuIGRvaW5nIGEgcmVxdWVzdF9zZW5zZSwgcmVzdG9yZSB3aGVuIGRvbmUuCisJTW92ZSBhYm9ydCB0aW1lb3V0IG1lc3NhZ2UuICBGaXggcGFuaWMgaW4gcmVxdWVzdF9xdWV1ZWFibGUgdG8KKwlwcmludCBjb3JyZWN0IGZ1bmN0aW9uIG5hbWUuCisKKwkqIHNjc2kuYzogV2hlbiBpbmNyZW1lbnRpbmcgdXNhZ2UgY291bnQsIHdhbGsgYmxvY2sgbGlua2VkIGxpc3QKKwlmb3IgaG9zdCwgYW5kIG9yIGluIFNDU0lfSE9TVF9CTE9DSyBiaXQuICBXaGVuIGRlY3JlbWVudGluZyB1c2FnZQorCWNvdW50IHRvIDAsIGNsZWFyIHRoaXMgYml0IHRvIGFsbG93IHVzYWdlIHRvIGNvbnRpbnVlLCB3YWtlIHVwCisJcHJvY2Vzc2VzIHdhaXRpbmcuCisKKworCSogc2NzaV9pb2N0bC5jOiBJZiB3ZSBoYXZlIGFuIGluZm8oKSBmdW5jdGlvbiwgY2FsbCBpdCwgb3RoZXJ3aXNlCisJaWYgd2UgaGF2ZSBhICJuYW1lIiBmaWVsZCwgdXNlIGl0LCBlbHNlIGRvIG5vdGhpbmcuCisKKwkqIHNkLmMsIHNyLmM6IENsZWFyIGNtZF9sZW4gZmllbGQgcHJpb3IgdG8gZWFjaCBjb21tYW5kIHdlCisJZ2VuZXJhdGUuCisKKwkqIHNkLmg6IEFkZCAiaGFzX3BhcnRfdGFibGUiIGJpdCB0byByc2NzaV9kaXNrcy4KKworCSogc2cuW2MsaF06IEFkZCBzdXBwb3J0IGZvciB2ZW5kb3Igc3BlY2lmaWMgMTIgYnl0ZSBjb21tYW5kcyAoaS5lLgorCW92ZXJyaWRlIGNvbW1hbmQgbGVuZ3RoIGluIENPTU1BTkRfU0laRSkuCisKKwkqIHNyLmM6IEJ1Z2ZpeCBmcm9tIEdlcmQgaW4gcGhvdG9jZCBjb2RlLgorCisJKiBzci5jOiBCdWdmaXggaW4gZ2V0X3NlY3RvcnNpemUgLSBhbHdheXMgdXNlIHNjc2lfbWFsbG9jIGJ1ZmZlciAtCisJd2UgY2Fubm90IGd1YXJhbnRlZSB0aGF0IHRoZSBzdGFjayBpcyA8IDE2TWIuCisKK1R1ZSBOb3YgMjIgMTU6NDA6NDYgMTk5NCAgRXJpYyBZb3VuZ2RhbGUgIChlcmljQGFuZGFudGUuYWliLmNvbSkKKworCSogTGludXggMS4xLjY3IHJlbGVhc2VkLgorCisJKiBzci5jOiBDaGFuZ2Ugc3BlbGxpbmcgb2YgbWFudWZhY3RvciB0byBtYW51ZmFjdHVyZXIuCisKKwkqIHNjc2kuaDogTGlrZXdpc2UuCisKKwkqIHNjc2kuYzogTGlrZXdpc2UuCisKKwkqIHFsb2dpYy5jOiBTcGVsbGluZyBjb3JyZWN0aW9ucy4KKworCSogaW4yMDAwLmg6IFNwZWxsaW5nIGNvcnJlY3Rpb25zLgorCisJKiBpbjIwMDAuYzogVXBkYXRlIGZyb20gQmlsbCBFYXJuZXN0LCBjaGFuZ2UgZnJvbQorCWpzaGlmZmxlQG5ldGNvbS5jb20uICBTdXBwb3J0IG5ldyBiaW9zIHZlcnNpb25zLgorCisJKiBSRUFETUUucWxvZ2ljOiBTcGVsbGluZyBjb3JyZWN0aW9uLgorCitUdWUgTm92IDIyIDE1OjQwOjQ2IDE5OTQgIEVyaWMgWW91bmdkYWxlICAoZXJpY0BhbmRhbnRlLmFpYi5jb20pCisKKwkqIExpbnV4IDEuMS42NiByZWxlYXNlZC4KKworCSogdTE0LTM0Zi5jOiBTcGVsbGluZyBjb3JyZWN0aW9ucy4KKworCSogc3IuW2gsY106IEFkZCBzdXBwb3J0IGZvciBtdWx0aS1zZXNzaW9uIENEcyBmcm9tIEdlcmQgS25vcnIuCisKKwkqIHNjc2kuaDogQWRkIG1hbnVmYWN0b3IgZmllbGQgZm9yIGtlZXBpbmcgdHJhY2sgb2YgZGV2aWNlCisJbWFudWZhY3R1cmVyLgorCisJKiBzY3NpLmM6IE1vcmUgc3BlbGxpbmcgY29ycmVjdGlvbnMuCisKKwkqIHFsb2dpYy5oLCBxbG9naWMuYywgUkVBRE1FLnFsb2dpYzogTmV3IGRyaXZlciBmcm9tIFRvbSBaZXJ1Y2hhLgorCisJKiBpbjIwMDAuYywgaW4yMDAwLmg6IE5ldyBkcml2ZXIgZnJvbSBCcmFkIE1jTGVhbi9CaWxsIEVhcm5lc3QuCisKKwkqIGZkb21haW4uYzogU3BlbGxpbmcgY29ycmVjdGlvbi4KKworCSogZWF0YS5jOiBTcGVsbGluZyBjb3JyZWN0aW9uLgorCitGcmkgTm92IDE4IDE1OjIyOjQ0IDE5OTQgIEVyaWMgWW91bmdkYWxlICAoZXJpY0BhbmRhbnRlLmFpYi5jb20pCisKKwkqIExpbnV4IDEuMS42NSByZWxlYXNlZC4KKworCSogZWF0YS5oOiBVcGRhdGUgdmVyc2lvbiBzdHJpbmcgdG8gMS4wOC4wMC4KKworCSogZWF0YS5jOiBTZXQgc2dfdGFibGVzaXplIGNvcnJlY3RseSBmb3IgRFBUIFBNMjAxMiBib2FyZHMuCisKKwkqIGFoYTI3NHguc2VxOiBTcGVsbCBjaGVja2luZy4KKworCSogUkVBRE1FLnN0OiBMaWtld2lzZS4KKworCSogUkVBRE1FLmFoYTI3NHg6IExpa2V3aXNlLgorCisJKiBDaGFuZ2VMb2c6IExpa2V3aXNlLgorCitUdWUgTm92IDE1IDE1OjM1OjA4IDE5OTQgIEVyaWMgWW91bmdkYWxlICAoZXJpY0BhbmRhbnRlLmFpYi5jb20pCisKKwkqIExpbnV4IDEuMS42NCByZWxlYXNlZC4KKworCSogdTE0LTM0Zi5oOiBVcGRhdGUgdmVyc2lvbiBudW1iZXIgdG8gMS4xMC4wMS4KKworCSogdTE0LTM0Zi5jOiBVc2UgU2NzaV9Ib3N0IGNhbl9xdWV1ZSB2YXJpYWJsZSBpbnN0ZWFkIG9mIG9uZSBmcm9tIHRlbXBsYXRlLgorCisJKiBlYXRhLltjLGhdOiBOZXcgZHJpdmVyIGZvciBEUFQgYm9hcmRzIGZyb20gRGFyaW8gQmFsbGFiaW8uCisKKwkqIGJ1c2xvZ2ljLmM6IFVzZSBjYW5fcXVldWUgZmllbGQuCisKK1dlZCBOb3YgMzAgMTI6MDk6MDkgMTk5NCAgRXJpYyBZb3VuZ2RhbGUgIChlcmljQGFuZGFudGUuYWliLmNvbSkKKworCSogTGludXggMS4xLjYzIHJlbGVhc2VkLgorCisJKiBzZC5jOiBHaXZlIEkvTyBlcnJvciBpZiB3ZSBhdHRlbXB0IDUxMiBieXRlIEkvTyB0byBhIGRpc2sgd2l0aAorCTEwMjQgYnl0ZSBzZWN0b3JzLgorCisJKiBzY3NpY2FtLmM6IE1ha2Ugc3VyZSB3ZSBkbyByZWFkIGZyb20gd2hvbGUgZGlzayAobWFzayBvZmYKKwlwYXJ0aXRpb24pLgorCisJKiBzY3NpLmM6IFVzZSBjYW5fcXVldWUgaW4gU2NzaV9Ib3N0IHN0cnVjdHVyZS4KKwlGaXggcGFuaWMgbWVzc2FnZSBhYm91dCBpbnZhbGlkIGhvc3QuCisKKwkqIGhvc3RzLmM6IEluaXRpYWxpemUgY2FuX3F1ZXVlIGZyb20gdGVtcGxhdGUuCisKKwkqIGhvc3RzLmg6IEFkZCBjYW5fcXVldWUgdG8gU2NzaV9Ib3N0IHN0cnVjdHVyZS4KKworCSogYWhhMTc0MC5jOiBQcmludCBvdXQgd2FybmluZyBhYm91dCBOVUxMIGVjYnB0ci4KKworRnJpIE5vdiAgNCAxMjo0MDozMCAxOTk0ICBFcmljIFlvdW5nZGFsZSAgKGVyaWNAYW5kYW50ZS5haWIuY29tKQorCisJKiBMaW51eCAxLjEuNjIgcmVsZWFzZWQuCisKKwkqIGZkb21haW4uYzogVXBkYXRlIHRvIHZlcnNpb24gNS4yMC4gKEZyb20gUmlrIEZhaXRoKS4gIFN1cHBvcnQKKwlCSU9TIHZlcnNpb24gMy41LgorCisJKiBzdC5oOiBBZGQgU1RfRU9EIHN5bWJvbC4KKworCSogc3QuYzogUGF0Y2hlcyBmcm9tIEthaSBNYWtpc2FyYSAtIHN1cHBvcnQgYWRkaXRpb25hbCBkZW5zaXRpZXMsCisJYWRkIHN1cHBvcnQgZm9yIE1URlNTLCBNVEJTUywgTVRXU00gY29tbWFuZHMuCisKKwkqIFJFQURNRS5zdDogVXBkYXRlIHRvIGRvY3VtZW50IG5ldyBjb21tYW5kcy4KKworCSogc2NzaS5jOiBBZGQgTWVkaWF2aXNpb24gQ0RSLUg5M01WIHRvIGJsYWNrbGlzdC4KKworU2F0IE9jdCAyOSAyMDo1NzozNiAxOTk0ICBFcmljIFlvdW5nZGFsZSAgKGVyaWNAYW5kYW50ZS5haWIuY29tKQorCisJKiBMaW51eCAxLjEuNjAgcmVsZWFzZWQuCisKKwkqIHUxNC0zNGYuW2MsaF06IE5ldyBkcml2ZXIgZnJvbSBEYXJpbyBCYWxsYWJpby4KKworCSogYWljNzc3MC5jLCBhaGEyNzR4X3NlcS5oLCBhaGEyNzR4LnNlcSwgYWhhMjc0eC5oLCBhaGEyNzR4LmMsCisJUkVBRE1FLmFoYTI3NHg6IE5ldyBmaWxlcywgbmV3IGRyaXZlciBmcm9tIEpvaG4gQXljb2NrLgorCisKK1R1ZSBPY3QgMTEgMDg6NDc6MzkgMTk5NCAgRXJpYyBZb3VuZ2RhbGUgIChlcmljQGFuZGFudGUpCisKKwkqIExpbnV4IDEuMS41NCByZWxlYXNlZC4KKworCSogQWRkIHRoaXJkIFBDSSBjaGlwIGlkLiAgW0RyZXddCisKKwkqIGJ1c2xvZ2ljLmM6IFNldCBCVVNMT0dJQ19DTURMVU4gYmFjayB0byAxIFtFcmljXS4KKworCSogdWx0cmFzdG9yLmM6IEZpeCBhc20gZGlyZWN0aXZlcyBmb3IgbmV3IEdDQy4KKworCSogc3IuYywgc2QuYzogVXNlIG5ldyBlbmRfc2NzaV9yZXF1ZXN0IGZ1bmN0aW9uLgorCisJKiBzY3NpLmgoZW5kX3Njc2lfcmVxdWVzdCk6IFJldHVybiBwb2ludGVyIHRvIGJsb2NrIGlmIHN0aWxsCisJYWN0aXZlLCBlbHNlIHJldHVybiBOVUxMIGlmIGluYWN0aXZlLiAgRml4ZXMgcmFjZSBjb25kaXRpb24uCisKK1N1biBPY3QgIDkgMjA6MjM6MTQgMTk5NCAgRXJpYyBZb3VuZ2RhbGUgIChlcmljQGFuZGFudGUpCisKKwkqIExpbnV4IDEuMS41MyByZWxlYXNlZC4KKworCSogc2NzaS5jOiBEbyBub3QgYWxsb2NhdGUgZG1hIGJvdW5jZSBidWZmZXJzIGlmIHdlIGhhdmUgZXhhY3RseQorCTE2TWIuCisKK0ZyaSBTZXAgIDkgMDU6MzU6MzAgMTk5NCAgRXJpYyBZb3VuZ2RhbGUgIChlcmljQGFuZGFudGUpCisKKwkqIExpbnV4IDEuMS41MSByZWxlYXNlZC4KKworCSogYWhhMTUyeC5jOiBBZGQgc3VwcG9ydCBmb3IgZGlzYWJsaW5nIHRoZSBwYXJpdHkgY2hlY2suICBVcGRhdGUKKwl0byB2ZXJzaW9uIDEuNC4gW0p1ZXJnZW5dLgorCisJKiBzZWFnYXRlLmM6IFR3ZWFrIGRlYnVnZ2luZyBtZXNzYWdlLgorCitXZWQgQXVnIDMxIDEwOjE1OjU1IDE5OTQgIEVyaWMgWW91bmdkYWxlICAoZXJpY0BhbmRhbnRlKQorCisJKiBMaW51eCAxLjEuNTAgcmVsZWFzZWQuCisKKwkqIGFoYTE1MnguYzogQWRkIGViODAwIGZvciBWdGVjaCBQbGF0aW51bSBTTVAgYm9hcmRzLiBbSnVlcmdlbl0uCisKKwkqIHNjc2kuYzogQWRkIFF1YW50dW0gUEQxMjI1UyB0byBibGFja2xpc3QuCisKK0ZyaSBBdWcgMjYgMDk6Mzg6NDUgMTk5NCAgRXJpYyBZb3VuZ2RhbGUgIChlcmljQGFuZGFudGUpCisKKwkqIExpbnV4IDEuMS40OSByZWxlYXNlZC4KKworCSogc2QuYzogRml4IGJ1ZyB3aGVuIHdlIHdlcmUgZGVsZXRpbmcgdGhlIHdyb25nIGVudHJ5IGlmIHdlCisJZ2V0IGFuIHVuc3VwcG9ydGVkIHNlY3RvciBzaXplIGRldmljZS4KKworCSogc3IuYzogQW5vdGhlciBzcGVsbGluZyBwYXRjaC4KKworVGh1IEF1ZyAyNSAwOToxNToyNyAxOTk0ICBFcmljIFlvdW5nZGFsZSAgKGVyaWNAYW5kYW50ZSkKKworCSogTGludXggMS4xLjQ4IHJlbGVhc2VkLgorCisJKiBUaHJvdWdob3V0OiBVc2UgbmV3IHNlbWFudGljcyBmb3IgcmVxdWVzdF9kbWEsIGFzIGFwcHJvcHJpYXRlLgorCisJKiBzci5jOiBQcmludCBjb3JyZWN0IGRldmljZSBudW1iZXIuCisKK1N1biBBdWcgMjEgMTc6NDk6MjMgMTk5NCAgRXJpYyBZb3VuZ2RhbGUgIChlcmljQGFuZGFudGUpCisKKwkqIExpbnV4IDEuMS40NyByZWxlYXNlZC4KKworCSogTkNSNTM4MC5jOiBBZGQgc3VwcG9ydCBmb3IgTElNSVRfVFJBTlNGRVJTSVpFLgorCisJKiBjb25zdGFudHMuaDogQWRkIHByb3RvdHlwZSBmb3IgcHJpbnRfU2NzaV9DbW5kLgorCisJKiBwYXMxNi5jOiBTb21lIG1vcmUgbWlub3IgdHdlYWtzLiAgVGVzdCBmb3IgTWVkaWF2aXNpb24gYm9hcmQuCisJQWxsb3cgZm9yIGRpc2tzID4gMUdiLiAgW0RyZXc/P10KKworCSogc3IuYzogU2V0IFNDcG50LT50cmFuc2ZlcnNpemUuCisKK1R1ZSBBdWcgMTYgMTc6Mjk6MzUgMTk5NCAgRXJpYyBZb3VuZ2RhbGUgIChlcmljQGFuZGFudGUpCisKKwkqIExpbnV4IDEuMS40NiByZWxlYXNlZC4KKworCSogVGhyb3VnaG91dDogTW9yZSBzcGVsbGluZyBmaXh1cHMuCisKKwkqIGJ1c2xvZ2ljLmM6IEFkZCBhIGZldyBtb3JlIGZpeHVwcyBmcm9tIERhdmUuICBEaXNrIHRyYW5zbGF0aW9uCisJbWFpbmx5LgorCisJKiBwYXMxNi5jOiBBZGQgYSBmZXcgcGF0Y2hlcyAoRHJldz8pLgorCisKK1RodSBBdWcgMTEgMjA6NDU6MTUgMTk5NCAgRXJpYyBZb3VuZ2RhbGUgIChlcmljQGFuZGFudGUpCisKKwkqIExpbnV4IDEuMS40NCByZWxlYXNlZC4KKworCSogaG9zdHMuYzogQWRkIHR5cGUgY2FzdHMgZm9yIHNjc2lfaW5pdF9tYWxsb2MuCisKKwkqIHNjc2ljYW0uYzogQWRkIHR5cGUgY2FzdC4KKworV2VkIEF1ZyAxMCAxOToyMzowMSAxOTk0ICBFcmljIFlvdW5nZGFsZSAgKGVyaWNAYW5kYW50ZSkKKworCSogTGludXggMS4xLjQzIHJlbGVhc2VkLgorCisJKiBUaHJvdWdob3V0OiBTcGVsbGluZyBjbGVhbnVwcy4gWz8/XQorCisJKiBhaGExNTJ4LmMsIE5DUjUzKi5jLCBmZG9tYWluLmMsIGdfTkNSNTM4MC5jLCBwYXMxNi5jLCBzZWFnYXRlLmMsCisJIHQxMjguYzogVXNlIHJlcXVlc3RfaXJxLCBub3QgaXJxYWN0aW9uLiBbPz9dCisKKwkqIGFoYTE1NDIuYzogTW92ZSB0ZXN0IGZvciBzaG9zdCBiZWZvcmUgd2Ugc3RhcnQgdG8gdXNlIHNob3N0LgorCisJKiBhaGExNTQyLmMsIGFoYTE3NDAuYywgdWx0cmFzdG9yLmMsIHdkNzAwMC5jOiBVc2UgbmV3CisJY2FsbGluZyBzZXF1ZW5jZSBmb3IgcmVxdWVzdF9pcnEuCisKKwkqIGJ1c2xvZ2ljLmM6IFVwZGF0ZSBmcm9tIERhdmUgR2VudHplbC4KKworVHVlIEF1ZyAgOSAwOTozMjo1OSAxOTk0ICBFcmljIFlvdW5nZGFsZSAgKGVyaWNAYW5kYW50ZSkKKworCSogTGludXggMS4xLjQyIHJlbGVhc2VkLgorCisJKiBOQ1I1MzgwLmM6IENoYW5nZSBOQ1I1MzgwX3ByaW50X3N0YXR1cyB0byBzdGF0aWMuCisKKwkqIHNlYWdhdGUuYzogQSBmZXcgbW9yZSBidWdmaXhlcy4gIE9ubHkgRHJldyBrbm93cyB3aGF0IHRoZXkgYXJlCisJZm9yLgorCisJKiB1bHRyYXN0b3IuYzogVHdlYWsgc29tZSBfX2FzbV9fIGRpcmVjdGl2ZXMgc28gdGhhdCBpdCB3b3JrcworCXdpdGggbmV3ZXIgY29tcGlsZXJzLiBbPz9dCisKK1NhdCBBdWcgIDYgMjE6Mjk6MzYgMTk5NCAgRXJpYyBZb3VuZ2RhbGUgIChlcmljQGFuZGFudGUpCisKKwkqIExpbnV4IDEuMS40MCByZWxlYXNlZC4KKworCSogTkNSNTM4MC5jOiBSZXR1cm4gU0NTSV9SRVNFVF9XQUtFVVAgZnJvbSByZXNldCBmdW5jdGlvbi4KKworCSogYWhhMTU0Mi5jOiBSZXNldCBtYWlsYm94IHN0YXR1cyBhZnRlciBhIGJ1cyBkZXZpY2UgcmVzZXQuCisKKwkqIGNvbnN0YW50cy5jOiBGaXggdHlwbyAoOzspLgorCisJKiBnX05DUjUzODAuYzoKKwkqIHBhczE2LmM6ICBDb3JyZWN0IHVzYWdlIG9mIE5DUjUzODBfaW5pdC4KKworCSogc2NzaS5jOiBSZW1vdmUgcmVkdW5kYW50IChhbmQgdW51c2VkIHZhcmlhYmxlcykuCisKKwkqIHNkLmM6IFVzZSBtZW1zZXQgdG8gY2xlYXIgYWxsIG9mIHJzY3NpX2Rpc2tzIGJlZm9yZSB3ZSB1c2UgaXQuCisKKwkqIHNnLmM6IERpdHRvLCBleGNlcHQgZm9yIHNjc2lfZ2VuZXJpY3MuCisKKwkqIHNyLmM6IERpdHRvLCBleGNlcHQgZm9yIHNjc2lfQ0RzLgorCisJKiBzdC5jOiBJbml0aWFsaXplIFNUcC0+ZGV2aWNlLgorCisJKiBzZWFnYXRlLmM6IEZpeCBidWcuIFtEcmV3XQorCitUaHUgQXVnICA0IDA4OjQ3OjI3IDE5OTQgIEVyaWMgWW91bmdkYWxlICAoZXJpY0BhbmRhbnRlKQorCisJKiBMaW51eCAxLjEuMzkgcmVsZWFzZWQuCisKKwkqIE1ha2VmaWxlOiBGaXggdHlwbyBpbiBOQ1I1M0M3eHguCisKKwkqIHN0LmM6IFByaW50IGNvcnJlY3QgbnVtYmVyIGZvciBkZXZpY2UuCisKK1R1ZSBBdWcgIDIgMTE6Mjk6MTQgMTk5NCAgRXJpYyBZb3VuZ2RhbGUgIChlcmljQGVzcDIyKQorCisJKiBMaW51eCAxLjEuMzggcmVsZWFzZWQuCisKKwlMb3RzIG9mIGNoYW5nZXMgaW4gMS4xLjM4LiAgQWxsIGZyb20gRHJldyB1bmxlc3Mgb3RoZXJ3aXNlIG5vdGVkLgorCisJKiA1M2M3LDh4eC5jOiBOZXcgZmlsZSBmcm9tIERyZXcuICBQQ0kgZHJpdmVyLgorCisJKiA1M2M3LDh4eC5oOiBMaWtld2lzZS4KKworCSogNTNjNyw4eHguc2NyOiBMaWtld2lzZS4KKworCSogNTNjOHh4X2QuaCwgNTNjOHh4X3UuaCwgc2NyaXB0X2FzbS5wbDogTGlrZXdpc2UuCisKKwkqIHNjc2ljYW0uYzogTmV3IGZpbGUgZnJvbSBEcmV3LiAgUmVhZCBibG9jayAwIG9uIHRoZSBkaXNrIGFuZAorCXJlYWQgdGhlIHBhcnRpdGlvbiB0YWJsZS4gIEF0dGVtcHQgdG8gZGVkdWNlIHRoZSBnZW9tZXRyeSBmcm9tCisJdGhlIHBhcnRpdGlvbiB0YWJsZSBpZiBwb3NzaWJsZS4gIE9ubHkgdXNlZCBieSA1M2NbNyw4XXh4IHJpZ2h0CisJbm93LCBidXQgY291bGQgYmUgdXNlZCBieSBhbnkgZGV2aWNlIGZvciB3aGljaCB3ZSBoYXZlIG5vIHdheQorCW9mIGlkZW50aWZ5aW5nIHRoZSBnZW9tZXRyeS4KKworCSogc2QuYzogVXNlIGRldmljZSBsZXR0ZXJzIGluc3RlYWQgb2Ygc2QlZCBpbiBhIGxvdCBvZiBtZXNzYWdlcy4KKworCSogc2VhZ2F0ZS5jOiBGaXggYnVnIHRoYXQgcmVzdWx0ZWQgaW4gbG9ja3VwcyB3aXRoIHNvbWUgZGV2aWNlcy4KKworCSogc3IuYyAoc3Jfb3Blbik6IFJldHVybiAtRVJPRlMsIG5vdCAtRUFDQ0VTIGlmIHdlIGF0dGVtcHQgdG8gb3BlbgorCWRldmljZSBmb3Igd3JpdGUuCisKKwkqIGhvc3RzLmMsIE1ha2VmaWxlOiBVcGRhdGUgZm9yIG5ldyBkcml2ZXIuCisKKwkqIE5DUjUzODAuYywgTkNSNTM4MC5oLCBnX05DUjUzODAuaDogVXBkYXRlIGZyb20gRHJldyB0byBzdXBwb3J0CisJNTNDNDAwIGNoaXAuCisKKwkqIGNvbnN0YW50cy5jOiBEZWZpbmUgQ09OU1RfQ01ORCBhbmQgQ09OU1RfTVNHLiAgT3RoZXIgbWlub3IKKwljbGVhbnVwcyBhbG9uZyB0aGUgd2F5LiAgSW1wcm92ZSBoYW5kbGluZyBvZiBDT05TVF9NU0cuCisKKwkqIGZkb21haW4uYywgZmRvbWFpbi5oOiBOZXcgdmVyc2lvbiBmcm9tIFJpayBGYWl0aC4gIFVwZGF0ZSB0bworCTUuMTguICBTaG91bGQgbm93IHN1cHBvcnQgVE1DLTMyNjAgUENJIGNhcmQgd2l0aCAxOEMzMCBjaGlwLgorCisJKiBwYXMxNi5jOiBVcGRhdGUgd2l0aCBuZXcgaXJxIGluaXRpYWxpemF0aW9uLgorCisJKiB0MTI4LmM6IFVwZGF0ZSB3aXRoIG1pbm9yIGNsZWFudXBzLgorCisJKiBzY3NpLmMgKHNjc2lfcGlkKTogTmV3IHZhcmlhYmxlIC0gZ2l2ZXMgZWFjaCBjb21tYW5kIGEgdW5pcXVlCisJaWQuIEFkZCBRdWFudHVtIExQUzUyMzVTIHRvIGJsYWNrbGlzdC4gIENoYW5nZSBpbl9zY2FuIHRvCisJaW5fc2Nhbl9zY3NpcyBhbmQgbWFrZSBnbG9iYWwuCisKKwkqIHNjc2kuaDogQWRkIHNvbWUgZGVmaW5lcyBmb3IgZXh0ZW5kZWQgbWVzc2FnZSBoYW5kbGluZywKKwlJTklUSUFURS9SRUxFQVNFX1JFQ09WRVJZLiAgQWRkIGEgZmV3IG5ldyBmaWVsZHMgdG8gc3VwcG9ydCBzeW5jCisJdHJhbnNmZXJzLgorCisJKiBzY3NpX2lvY3RsLmg6IEFkZCBpb2N0bCB0byByZXF1ZXN0IHN5bmNocm9ub3VzIHRyYW5zZmVycy4KKworCitUdWUgSnVsIDI2IDIxOjM2OjU4IDE5OTQgIEVyaWMgWW91bmdkYWxlICAoZXJpY0Blc3AyMikKKworCSogTGludXggMS4xLjM3IHJlbGVhc2VkLgorCisJKiBhaGExNTQyLmM6IEFsd2F5cyBjYWxsIGFoYTE1NDJfbWJlbmFibGUsIHVzZSBuZXcgdWRlbGF5CisJbWVjaGFuaXNtIHNvIHdlIGRvIG5vdCB3YWl0IGEgbG9uZyB0aW1lIGlmIHRoZSBib2FyZCBkb2VzIG5vdAorCWltcGxlbWVudCB0aGlzIGNvbW1hbmQuCisKKwkqIGdfTkNSNTM4MC5jOiBSZW1vdmUgI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPiBhbmQgI2lmCisJZGVmaW5lZChDT05GSUdfU0NTSV8qKS4KKworCSogc2VhZ2F0ZS5jOiBMaWtld2lzZS4KKworCU5leHQgcm91bmQgb2YgY2hhbmdlcyB0byBzdXBwb3J0IGxvYWRhYmxlIG1vZHVsZXMuICBHZXR0aW5nIGNsb3NlcgorCW5vdywgc3RpbGwgbm90IHBvc3NpYmxlIHRvIGRvIGFueXRoaW5nIHJlbW90ZWx5IHVzYWJsZS4KKworCWhvc3RzLmM6IENyZWF0ZSBhIGxpbmtlZCBsaXN0IG9mIGRldGVjdGVkIGhpZ2ggbGV2ZWwgZGV2aWNlcy4KKwkoc2NzaV9yZWdpc3Rlcl9kZXZpY2UpOiBOZXcgZnVuY3Rpb24gdG8gaW5zZXJ0IGludG8gdGhpcyBsaXN0LgorCShzY3NpX2luaXQpOiBDYWxsIHNjc2lfcmVnaXN0ZXJfZGV2aWNlIGZvciBlYWNoIG9mIHRoZSBrbm93biBoaWdoCisJbGV2ZWwgZHJpdmVycy4KKworCWhvc3RzLmg6IEFkZCBwcm90b3R5cGUgZm9yIGxpbmtlZCBsaXN0IGhlYWRlci4gIEFkZCBzdHJ1Y3R1cmUKKwlkZWZpbml0aW9uIGZvciBkZXZpY2UgdGVtcGxhdGUgc3RydWN0dXJlIHdoaWNoIGRlZmluZXMgdGhlIGxpbmtlZAorCWxpc3QuCisKKwlzY3NpLmM6IChzY2FuX3Njc2lzKTogVXNlIGxpbmtlZCBsaXN0IGluc3RlYWQgb2Yga25vd2xlZGdlIGFib3V0CisJZXhpc3RpbmcgaGlnaCBsZXZlbCBkZXZpY2UgZHJpdmVycy4KKwkoc2NzaV9kZXZfaW5pdCk6IFVzZSBpbml0IGZ1bmN0aW9ucyBmb3IgZHJpdmVycyBvbiBsaW5rZWQgbGlzdAorCWluc3RlYWQgb2YgZXhwbGljaXQgbGlzdCB0byBpbml0aWFsaXplIGFuZCBhdHRhY2ggZGV2aWNlcyB0byBoaWdoCisJbGV2ZWwgZHJpdmVycy4KKworCXNjc2kuaDogQWRkIG5ldyBmaWVsZCAiYXR0YWNoZWQiIHRvIHNjc2lfZGV2aWNlIC0gY291bnQgb2YgbnVtYmVyCisJb2YgaGlnaCBsZXZlbCBkZXZpY2VzIGF0dGFjaGVkLgorCisJc2QuYywgc3IuYywgc2cuYywgc3QuYzogQWRqdXN0IGluaXQvYXR0YWNoIGZ1bmN0aW9ucyB0byB1c2UgbmV3CisJc2NoZW1lLgorCitTYXQgSnVsIDIzIDEzOjAzOjE3IDE5OTQgIEVyaWMgWW91bmdkYWxlICAoZXJpY0Blc3AyMikKKworCSogTGludXggMS4xLjM1IHJlbGVhc2VkLgorCisJKiB1bHRyYXN0b3IuYzogQ2hhbmdlIGNvbnN0cmFpbnQgb24gYXNtKCkgb3BlcmFuZCBzbyB0aGF0IGl0IHdvcmtzCisJd2l0aCBnY2MgMi42LjAuCisKK1RodSBKdWwgMjEgMTA6Mzc6MzkgMTk5NCAgRXJpYyBZb3VuZ2RhbGUgIChlcmljQGVzcDIyKQorCisJKiBMaW51eCAxLjEuMzMgcmVsZWFzZWQuCisKKwkqIHNyLmMoc3Jfb3Blbik6IERvIG5vdCBhbGxvdyBvcGVucyB3aXRoIHdyaXRlIGFjY2Vzcy4KKworTW9uIEp1bCAxOCAwOTo1MToyMiAxOTk0IDE5OTQgIEVyaWMgWW91bmdkYWxlICAoZXJpY0Blc3AyMikKKworCSogTGludXggMS4xLjMxIHJlbGVhc2VkLgorCisJKiBzZC5jOiBJbmNyZWFzZSBTRF9USU1FT1VUIGZyb20gMzAwIHRvIDYwMC4KKworCSogc3IuYzogUmVtb3ZlIHN0cmF5IHRhc2tfc3RydWN0KiB2YXJpYWJsZSB0aGF0IHdhcyBubyBsb25nZXIKKwl1c2VkLgorCisJKiBzcl9pb2N0bC5jOiBGaXggdHlwbyBpbiB1cCgpIGNhbGwuCisKK1N1biBKdWwgMTcgMTY6MjU6MjkgMTk5NCAgRXJpYyBZb3VuZ2RhbGUgIChlcmljQGVzcDIyKQorCisJKiBMaW51eCAxLjEuMzAgcmVsZWFzZWQuCisKKwkqIHNjc2kuYyAoc2Nhbl9zY3Npcyk6IEZpeCBkZXRlY3Rpb24gb2Ygc29tZSBUb3NoaWJhIENEUk9NIGRyaXZlcworCXRoYXQgcmVwb3J0IHRoZW1zZWx2ZXMgYXMgZGlzayBkcml2ZXMuCisKKwkqIChUaHJvdWdob3V0KTogVXNlIHJlcXVlc3Quc2VtIGluc3RlYWQgb2YgcmVxdWVzdC53YWl0aW5nLgorCVNob3VsZCBmaXggc3dhcCBwcm9ibGVtIHdpdGggZmRvbWFpbi4KKworVGh1IEp1bCAxNCAxMDo1MTo0MiAxOTk0ICBFcmljIFlvdW5nZGFsZSAgKGVyaWNAZXNwMjIpCisKKwkqIExpbnV4IDEuMS4yOSByZWxlYXNlZC4KKworCSogc2NzaS5jIChzY2FuX3Njc2lzKTogQWRkIG5ldyBkZXZpY2VzIHRvIGVuZCBvZiBsaW5rZWQgbGlzdCwgbm90CisJdG8gdGhlIGJlZ2lubmluZy4KKworCSogc2NzaS5oIChTQ1NJX1NMRUVQKTogUmVtb3ZlIGJyYWluIGRlYWQgaGFjayB0byB0cnkgdG8gc2F2ZQorCXRoZSB0YXNrIHN0YXRlIGJlZm9yZSBzbGVlcGluZy4KKworU2F0IEp1bCAgOSAxNTowMTowMyAxOTk0ICBFcmljIFlvdW5nZGFsZSAgKGVyaWNAZXNwMjIpCisKKwlNb3JlIGNoYW5nZXMgdG8gZXZlbnR1YWxseSBzdXBwb3J0IGxvYWRhYmxlIG1vZHVsZXMuICBNYWlubHkKKwl3ZSB3YW50IHRvIHVzZSBsaW5rZWQgbGlzdHMgaW5zdGVhZCBvZiBhcnJheXMgYmVjYXVzZSBpdCBpcyBlYXNpZXIKKwl0byBkeW5hbWljYWxseSBhZGQgYW5kIHJlbW92ZSB0aGluZ3MgdGhpcyB3YXkuCisKKwlRdWl0ZSBhIGJpdCBtb3JlIHdvcmsgaXMgbmVlZGVkIGJlZm9yZSBsb2FkYWJsZSBtb2R1bGVzIGFyZQorCXBvc3NpYmxlIChhbmQgdXNhYmxlKSB3aXRoIHNjc2ksIGJ1dCB0aGlzIGlzIG1vc3Qgb2YgdGhlIGdydW5nZQorCXdvcmsuCisKKwkqIExpbnV4IDEuMS4yOCByZWxlYXNlZC4KKworCSogc2NzaS5jLCBzY3NpLmggKGFsbG9jYXRlX2RldmljZSwgcmVxdWVzdF9xdWV1ZWFibGUpOiBDaGFuZ2UKKwlhcmd1bWVudCBmcm9tIGluZGV4IGludG8gc2NzaV9kZXZpY2VzIHRvIGEgcG9pbnRlciB0byB0aGUKKwlTY3NpX0RldmljZSBzdHJ1Y3QuCisKKwkqIFRocm91Z2hvdXQ6IENoYW5nZSBhbGwgY2FsbHMgdG8gYWxsb2NhdGVfZGV2aWNlLAorCXJlcXVlc3RfcXVldWVhYmxlIHRvIHVzZSBuZXcgY2FsbGluZyBzZXF1ZW5jZS4KKworCSogVGhyb3VnaG91dDogVXNlIFNDcG50LT5kZXZpY2UgaW5zdGVhZCBvZgorCXNjc2lfZGV2aWNlc1tTQ3BudC0+aW5kZXhdLiAgVWdoIC0gdGhlIHBvaW50ZXIgd2FzIHRoZXJlIGFsbCBhbG9uZworCS0gbXVjaCBjbGVhbmVyIHRoaXMgd2F5LgorCisJKiBzY3NpLmMgKHNjc2lfaW5pdF9tYWxsb2MsIHNjc2lfZnJlZV9tYWxsb2MpOiBOZXcgZnVuY3Rpb25zIC0KKwlhbGxvdyB1cyB0byBwcmV0ZW5kIHRoYXQgd2UgaGF2ZSBhIHdvcmtpbmcgbWFsbG9jIHdoZW4gd2UKKwlpbml0aWFsaXplLiAgVXNlIHRoaXMgaW5zdGVhZCBvZiBwYXNzaW5nIG1lbW9yeV9zdGFydCwgbWVtb3J5X2VuZAorCWFyb3VuZCBhbGwgb3ZlciB0aGUgcGxhY2UuCisKKwkqIHNjc2kuaCwgc3QuYywgc3IuYywgc2QuYywgc2cuYzogQ2hhbmdlICpfaW5pdDEgZnVuY3Rpb25zIHRvIHVzZQorCXNjc2lfaW5pdF9tYWxsb2MsIHJlbW92ZSBhbGwgYXJndW1lbnRzLCBubyByZXR1cm4gdmFsdWUuCisKKwkqIHNjc2kuaDogUmVtb3ZlIGluZGV4IGZpZWxkIGZyb20gU2NzaV9EZXZpY2UgYW5kIFNjc2lfQ21uZAorCXN0cnVjdHMuCisKKwkqIHNjc2kuYyAoc2NzaV9kZXZfaW5pdCk6IFNldCB1cCBmb3Igc2NzaV9pbml0X21hbGxvYy4KKwkoc2Nhbl9zY3Npcyk6IEdldCBTRHBudCBmcm9tIHNjc2lfaW5pdF9tYWxsb2MsIGFuZCByZWZyZXNoCisJd2hlbiB3ZSBkaXNjb3ZlciBhIGRldmljZS4gIEZyZWUgcG9pbnRlciBiZWZvcmUgcmV0dXJuaW5nLgorCUNoYW5nZSBzY3NpX2RldmljZXMgaW50byBhIGxpbmtlZCBsaXN0LgorCisJKiBzY3NpLmMgKHNjYW5fc2NzaXMpOiBDaGFuZ2UgdG8gb25seSBzY2FuIG9uZSBob3N0LgorCShzY3NpX2Rldl9pbml0KTogTG9vcCBvdmVyIGFsbCBkZXRlY3RlZCBob3N0cywgYW5kIHNjYW4gdGhlbS4KKworCSogaG9zdHMuYyAgKHNjc2lfaW5pdF9mcmVlKTogQ2hhbmdlIHNvIHRoYXQgIG51bWJlciBvZiBleHRyYSBieXRlcworCWlzIHN0b3JlZCBpbiBzdHJ1Y3QsIGFuZCB3ZSBkbyBub3QgaGF2ZSB0byBwYXNzIGl0IGVhY2ggdGltZS4KKworCSogaG9zdHMuaDogQ2hhbmdlIFNjc2lfSG9zdF9UZW1wbGF0ZSBzdHJ1Y3QgdG8gaW5jbHVkZSAibmV4dCIgYW5kCisJInJlbGVhc2UiIGZ1bmN0aW9ucy4gIEluaXRpYWxpemUgdG8gTlVMTCBpbiBhbGwgbG93IGxldmVsCisJYWRhcHRlcnMuCisKKwkqIGhvc3RzLmM6IFJlbmFtZSBzY3NpX2hvc3RzIHRvIGJ1aWx0aW5fc2NzaV9ob3N0cywgY3JlYXRlIGxpbmtlZAorCWxpc3Qgc2NzaV9ob3N0cywgbGlua2VkIHRvZ2V0aGVyIHdpdGggdGhlIG5ldyAibmV4dCIgZmllbGQuCisKK1dlZCBKdWwgIDYgMDU6NDU6MDIgMTk5NCAgRXJpYyBZb3VuZ2RhbGUgIChlcmljQGVzcDIyKQorCisJKiBMaW51eCAxLjEuMjUgcmVsZWFzZWQuCisKKwkqIGFoYTE1MnguYzogQ2hhbmdlcyBmcm9tIEp1ZXJnZW4gLSBjbGVhbnVwcyBhbmQgdXBkYXRlcy4KKworCSogc2QuYywgc3IuYzogVXNlIG5ldyBjaGVja19tZWRpYV9jaGFuZ2UgYW5kIHJldmFsaWRhdGUKKwlmaWxlX29wZXJhdGlvbnMgZmllbGRzLgorCisJKiBzdC5jLCBzdC5oOiBBZGQgY2hhbmdlcyBmcm9tIEthaSBNYWtpc2FyYSwgZGF0ZWQgSnVuIDIyLgorCisJKiBob3N0cy5oOiBDaGFuZ2UgU0dfQUxMIGJhY2sgdG8gMHhmZi4gIEFwcGFyZW50bHkgc29mdCBlcnJvcgorCWluIC9kZXYvYnJhaW4gcmVzdWx0ZWQgaW4gaGF2aW5nIHRoaXMgYnVtcGVkIHVwLgorCUNoYW5nZSBmaXJzdCBwYXJhbWV0ZXIgaW4gYmlvc19wYXJhbSBmdW5jdGlvbiB0byBiZSBEaXNrICogaW5zdGVhZAorCW9mIGluZGV4IGludG8gcnNjc2lfZGlza3MuCisKKwkqIHNkX2lvY3RsLmM6IFBhc3MgcG9pbnRlciB0byByc2NzaV9kaXNrcyBlbGVtZW50IGluc3RlYWQgb2YgaW5kZXgKKwl0byBhcnJheS4KKworCSogc2QuaDogQWRkIHN0cnVjdCBuYW1lICJzY3NpX2Rpc2siIHRvIHR5cGVkZWYgZm9yIFNjc2lfRGlzay4KKworCSogc2NzaS5jOiBSZW1vdmUgcmVkdW5kYW50IE1heHRvciBYVDg3NjBTIGZyb20gYmxhY2tsaXN0LgorCUluIHNjc2lfcmVzZXQsIGFkZCBwcmludGsgd2hlbiBERUJVRyBkZWZpbmVkLgorCisJKiBBbGwgbG93IGxldmVsIGRyaXZlcnM6IE1vZGlmeSBkZWZpbml0aW9ucyBvZiBiaW9zX3BhcmFtIGluCisJYXBwcm9wcmlhdGUgd2F5LgorCitUaHUgSnVuIDE2IDEwOjMxOjU5IDE5OTQgIEVyaWMgWW91bmdkYWxlICAoZXJpY0Blc3AyMikKKworCSogTGludXggMS4xLjIwIHJlbGVhc2VkLgorCisJKiBzY3NpX2lvY3RsLmM6IE9ubHkgcGFzcyBkb3duIHRoZSBhY3R1YWwgbnVtYmVyIG9mIGNoYXJhY3RlcnMKKwlyZXF1aXJlZCB0byBzY3NpX2RvX2NtZCwgbm90IHRoZSBvbmUgcm91bmRlZCB1cCB0byBhIGV2ZW4gbnVtYmVyCisJb2Ygc2VjdG9ycy4KKworCSogdWx0cmFzdG9yLmM6IENoYW5nZXMgZnJvbSBDYWxlYiBFcHN0ZWluIGZvciAyNGYgY2FyZHMuICBTdXBwb3J0CisJbGFyZ2VyIFNHIGxpc3RzLgorCisJKiB1bHRyYXN0b3IuYzogQ2hhbmdlcyBmcm9tIG1lIC0gdXNlIHNjc2lfcmVnaXN0ZXIgdG8gcmVnaXN0ZXIKKwlob3N0LiAgQWRkIHNvbWUgY29uc2lzdGVuY3kgY2hlY2tpbmcsCisKK1dlZCBKdW4gIDEgMjE6MTI6MTMgMTk5NCAgRXJpYyBZb3VuZ2RhbGUgIChlcmljQGVzcDIyKQorCisJKiBMaW51eCAxLjEuMTkgcmVsZWFzZWQuCisKKwkqIHNjc2kuaDogQWRkIG5ldyByZXR1cm4gY29kZSBmb3IgcmVzZXQoKSBmdW5jdGlvbjoKKwlTQ1NJX1JFU0VUX1BVTlQuCisKKwkqIHNjc2kuYzogTWFrZSBTQ1NJX1JFU0VUX1BVTlQgdGhlIHNhbWUgYXMgU0NTSV9SRVNFVF9XQUtFVVAgZm9yCisJbm93LgorCisJKiBhaGExNTQyLmM6IElmIHRoZSBjb21tYW5kIHJlc3BvbnNpYmxlIGZvciB0aGUgcmVzZXQgaXMgbm90CisJcGVuZGluZywgcmV0dXJuIFNDU0lfUkVTRVRfUFVOVC4KKworCSogYWhhMTc0MC5jLCBidXNsb2dpYy5jLCB3ZDcwMDAuYywgdWx0cmFzdG9yLmM6IFJldHVybgorCVNDU0lfUkVTRVRfUFVOVCBpbnN0ZWFkIG9mIFNDU0lfUkVTRVRfU05PT1pFLgorCitUdWUgTWF5IDMxIDE5OjM2OjAxIDE5OTQgIEVyaWMgWW91bmdkYWxlICAoZXJpY0Blc3AyMikKKworCSogYnVzbG9naWMuYzogRG8gbm90IHByaW50IG91dCBtZXNzYWdlIGFib3V0ICJtdXN0IGJlIEFkYXB0ZWMiCisJaWYgd2UgaGF2ZSBkZXRlY3RlZCBhIGJ1c2xvZ2ljIGNhcmQuICBQcmludCBvdXQgYSB3YXJuaW5nIG1lc3NhZ2UKKwlpZiB3ZSBhcmUgY29uZmlndXJpbmcgZm9yID4xNk1iLCBzaW5jZSB0aGUgNDQ1UyBhdCBib2FyZCBsZXZlbAorCUQgb3IgZWFybGllciBkb2VzIG5vdCB3b3JrIHJpZ2h0LiAgVGhlICJEIiBsZXZlbCBib2FyZCBjYW4gYmUgbWFkZQorCXRvIHdvcmsgYnkgZmxpcHBpbmcgYW4gdW5kb2N1bWVudGVkIHN3aXRjaCwgYnV0IHRoaXMgaXMgdG9vIHN1YnRsZS4KKworICAgIENoYW5nZXMgYmFzZWQgdXBvbiBwYXRjaGVzIGluIFlnZ2RyYXNpbCBkaXN0cmlidXRpb24uCisKKwkqIHNnLmMsIHNnLmg6IFJldHVybiBzZW5zZSBkYXRhIHRvIHVzZXIuCisKKwkqIGFoYTE1NDIuYywgYWhhMTc0MC5jLCBidXNsb2dpYy5jOiBEbyBub3QgcGFuaWMgaWYKKwlzZW5zZSBidWZmZXIgaXMgd3Jvbmcgc2l6ZS4KKworCSogaG9zdHMuYzogVGVzdCBmb3IgdWx0cmFzdG9yIGNhcmQgYmVmb3JlIGFueSBvZiB0aGUgb3RoZXJzLgorCisJKiBzY3NpLmM6IEFsbG93IGJvb3QtdGltZSBvcHRpb24gZm9yIG1heF9zY3NpX2x1bnM9PyBzbyB0aGF0CisJYnVnZ3kgZmlybXdhcmUgaGFzIGFuIGVhc3kgd29yay1hcm91bmQuCisKK1N1biBNYXkgMTUgMjA6MjQ6MzQgMTk5NCAgRXJpYyBZb3VuZ2RhbGUgIChlcmljQGVzcDIyKQorCisJKiBMaW51eCAxLjEuMTUgcmVsZWFzZWQuCisKKwlQb3N0LWNvZGVmcmVlemUgdGhhdy4uLgorCisJKiBidXNsb2dpYy5bYyxoXTogTmV3IGRyaXZlciBmcm9tIERhdmlkIEdlbnR6ZWwuCisKKwkqIGhvc3RzLmg6IEFkZCB1c2VfY2x1c3RlcmluZyBmaWVsZCB0byBleHBsaWNpdGx5IHNheSB3aGV0aGVyCisJY2x1c3RlcmluZyBzaG91bGQgYmUgdXNlZCBmb3IgZGV2aWNlcyBhdHRhY2hlZCB0byB0aGlzIGhvc3QKKwlhZGFwdGVyLiAgVGhlIGJ1c2xvZ2ljIGJvYXJkIGFwcGFyZW50bHkgc3VwcG9ydHMgbGFyZ2UgU0cgbGlzdHMsCisJYnV0IGl0IGlzIGFwcGFyZW50bHkgZmFzdGVyIGlmIHNkLmMgY29uZGVuc2VzIHRoaXMgaW50byBhIHNtYWxsZXIKKwlsaXN0LgorCisJKiBzZC5jOiBVc2UgdGhpcyBmaWVsZCBpbnN0ZWFkIG9mIGhldXJpc3RpYy4KKworCSogQWxsIGhvc3QgYWRhcHRlciBpbmNsdWRlIGZpbGVzOiBBZGQgYXBwcm9wcmlhdGUgaW5pdGlhbGl6ZXIgZm9yCisJdXNlX2NsdXN0ZXJpbmcgZmllbGQuCisKKwkqIHNjc2kuaDogQWRkICNkZWZpbmVzIGZvciByZXR1cm4gY29kZXMgZm9yIHRoZSBhYm9ydCBhbmQgcmVzZXQKKwlmdW5jdGlvbnMuICBUaGVyZSBhcmUgbm93IGEgc3BlY2lmaWMgc2V0IG9mIHJldHVybiBjb2RlcyB0byBmdWxseQorCXNwZWNpZnkgYWxsIG9mIHRoZSBwb3NzaWJsZSB0aGluZ3MgdGhhdCB0aGUgbG93LWxldmVsIGFkYXB0ZXIKKwljb3VsZCBkby4KKworCSogc2NzaS5jOiBBY3QgYmFzZWQgdXBvbiByZXR1cm4gY29kZXMgZnJvbSBhYm9ydC9yZXNldCBmdW5jdGlvbnMuCisKKwkqIEFsbCBob3N0IGFkYXB0ZXIgYWJvcnQvcmVzZXQgZnVuY3Rpb25zOiBSZXR1cm4gbmV3IHJldHVybiBjb2RlLgorCisJKiBBZGQgY29kZSBpbiBzY3NpLmMgdG8gaGVscCBkZWJ1ZyB0aW1lb3V0cy4gIFVzZSAjZGVmaW5lCisJREVCVUdfVElNRU9VVCB0byBlbmFibGUgdGhpcy4KKworCSogc2NzaS5jOiBJZiB0aGUgaG9zdC0+aXJxIGZpZWxkIGlzIHNldCwgdXNlCisJZGlzYWJsZV9pcnEvZW5hYmxlX2lycSBiZWZvcmUgY2FsbGluZyBxdWV1ZWNvbW1hbmQgaWYgd2UKKwlhcmUgbm90IGFscmVhZHkgaW4gYW4gaW50ZXJydXB0LiAgUmVkdWNlIHJhY2VzLCBhbmQgd2UKKwljYW4gYmUgc2xvcHBpZXIgYWJvdXQgY2xpL3N0aSBpbiB0aGUgaW50ZXJydXB0IHJvdXRpbmVzIG5vdworCShyZWR1Y2UgaW50ZXJydXB0IGxhdGVuY3kpLgorCisJKiBjb25zdGFudHMuYzogRml4IHNvbWUgdGhpbmdzIHRvIGVsaW1pbmF0ZSB3YXJuaW5ncy4gIEFkZCBzb21lCisJc2Vuc2UgZGVzY3JpcHRpb25zIHRoYXQgd2VyZSBvbWl0dGVkIGJlZm9yZS4KKworCSogYWhhMTU0Mi5jOiBXYXRjaCBmb3IgU0NSRCBmcm9tIGhvc3QgYWRhcHRlciAtIGlmIHdlIHNlZSBpdCwgc2V0CisJYSBmbGFnLiAgQ3VycmVudGx5IHdlIG9ubHkgcHJpbnQgb3V0IHRoZSBudW1iZXIgb2YgcGVuZGluZworCWNvbW1hbmRzIHRoYXQgbWlnaHQgbmVlZCB0byBiZSByZXN0YXJ0ZWQuCisKKwkqIGFoYTE1NDIuYyAoYWhhMTU0Ml9hYm9ydCk6IExvb2sgZm9yIGxvc3QgaW50ZXJydXB0cywgT0dNQiBzdGlsbAorCWZ1bGwsIGFuZCBhdHRlbXB0IHRvIHJlY292ZXIuICBPdGhlcndpc2UgZ2l2ZSB1cC4KKworCSogYWhhMTU0Mi5jIChhaGExNTQyX3Jlc2V0KTogVHJ5IEJVUyBERVZJQ0UgUkVTRVQsIGFuZCB0aGVuIHBhc3MKKwlESURfUkVTRVQgYmFjayB1cCB0byB0aGUgdXBwZXIgbGV2ZWwgY29kZSBmb3IgYWxsIGNvbW1hbmRzIHJ1bm5pbmcKKwlvbiB0aGlzIHRhcmdldCAoZXZlbiBvbiBkaWZmZXJlbnQgTFVOcykuCisKK1NhdCBNYXkgIDcgMTQ6NTQ6MDEgMTk5NAorCisJKiBMaW51eCAxLjEuMTIgcmVsZWFzZWQuCisKKwkqIHN0LmMsIHN0Lmg6IE5ldyB2ZXJzaW9uIGZyb20gS2FpLiAgU3VwcG9ydHMgYm9vdCB0aW1lCisJc3BlY2lmaWNhdGlvbiBvZiBudW1iZXIgb2YgYnVmZmVycy4KKworCSogd2Q3MDAwLltjLGhdOiBVcGRhdGVkIGRyaXZlciBmcm9tIEpvaG4gQm95ZC4gIE5vdyBzdXBwb3J0cworCW1vcmUgdGhhbiBvbmUgd2Q3MDAwIGJvYXJkIGluIG1hY2hpbmUgYXQgb25lIHRpbWUsIGFtb25nIG90aGVyIHRoaW5ncy4KKworV2VkIEFwciAyMCAyMjoyMDozNSAxOTk0CisKKwkqIExpbnV4IDEuMS44IHJlbGVhc2VkLgorCisJKiBzZC5jOiBBZGQgYSBmZXcgdHlwZSBjYXN0cyB3aGVyZSBzY3NpX21hbGxvYyBpcyBjYWxsZWQuCisKK1dlZCBBcHIgMTMgMTI6NTM6MjkgMTk5NAorCisJKiBMaW51eCAxLjEuNCByZWxlYXNlZC4KKworCSogc2NzaS5jOiBDbGVhbiB1cCBhIGZldyBwcmludGtzICh1c2UgJXAgdG8gcHJpbnQgcG9pbnRlcnMpLgorCitXZWQgQXByIDEzIDExOjMzOjAyIDE5OTQKKworCSogTGludXggMS4xLjMgcmVsZWFzZWQuCisKKwkqIGZkb21haW4uYzogVXBkYXRlIHRvIHZlcnNpb24gNS4xNiAoSGFuZGxlIGRpZmZlcmVudCBGSUZPIHNpemVzCisJYmV0dGVyKS4KKworRnJpIEFwciAgOCAwODo1NzoxOSAxOTk0CisKKwkqIExpbnV4IDEuMS4yIHJlbGVhc2VkLgorCisJKiBUaHJvdWdob3V0OiBTQ1NJIHBvcnRpb24gb2YgY2x1c3RlciBkaWZmcyBhZGRlZC4KKworVHVlIEFwciAgNSAwNzo0MTo1MCAxOTk0CisKKwkqIExpbnV4IDEuMSBkZXZlbG9wbWVudCB0cmVlIGluaXRpYXRlZC4KKworCSogVGhlIGxpbnV4IDEuMCBkZXZlbG9wbWVudCB0cmVlIGlzIG5vdyBlZmZlY3RpdmVseSBmcm96ZW4gZXhjZXB0CisJZm9yIG9idmlvdXMgYnVnZml4ZXMuCisKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCitTdW4gQXByIDE3IDAwOjE3OjM5IDE5OTQKKworCSogTGludXggMS4wLCBwYXRjaGxldmVsIDkgcmVsZWFzZWQuCisKKwkqIGZkb21haW4uYzogVXBkYXRlIHRvIHZlcnNpb24gNS4xNiAoSGFuZGxlIGRpZmZlcmVudCBGSUZPIHNpemVzCisJYmV0dGVyKS4KKworVGh1IEFwciAgNyAwODozNjoyMCAxOTk0CisKKwkqIExpbnV4IDEuMCwgcGF0Y2hsZXZlbDggcmVsZWFzZWQuCisKKwkqIGZkb21haW4uYzogVXBkYXRlIHRvIHZlcnNpb24gNS4xNSBmcm9tIDUuOS4gIEhhbmRsZXMgMy40IGJpb3MuCisKK1N1biBBcHIgIDMgMTQ6NDM6MDMgMTk5NAorCisJKiBMaW51eCAxLjAsIHBhdGNobGV2ZWw2IHJlbGVhc2VkLgorCisJKiB3ZDcwMDAuYzogTWFrZSBzdGFiIGF0IGZpeGluZyByYWNlIGNvbmRpdGlvbi4KKworU2F0IE1hciAyNiAxNDoxNDo1MCAxOTk0CisKKwkqIExpbnV4IDEuMCwgcGF0Y2hsZXZlbDUgcmVsZWFzZWQuCisKKwkqIGFoYTE1MnguYywgTWFrZWZpbGU6IEZpeCBhIGZldyBidWdzICh0b28gbXVjaCBkYXRhIG1lc3NhZ2UpLgorCUFkZCBhIGZldyBtb3JlIGJpb3Mgc2lnbmF0dXJlcy4gKFBhdGNoZXMgZnJvbSBKdWVyZ2VuKS4KKworCSogYWhhMTU0Mi5jOiBGaXggcmFjZSBjb25kaXRpb24gaW4gYWhhMTU0Ml9vdXQuCisKK01vbiBNYXIgMjEgMTY6MzY6MjAgMTk5NAorCisJKiBMaW51eCAxLjAsIHBhdGNobGV2ZWwzIHJlbGVhc2VkLgorCisJKiBzZC5jLCBzdC5jLCBzci5jLCBzZy5jOiBSZXR1cm4gLUVOWElPLCBub3QgLUVOT0RFViBpZiB3ZSBhdHRlbXB0CisJdG8gb3BlbiBhIG5vbi1leGlzdGVudCBkZXZpY2UuCisKKwkqIHNjc2kuYzogQWRkIENoaW5vbiBjZHJvbSB0byBibGFja2xpc3QuCisKKwkqIHNyX2lvY3RsLmM6IENoZWNrIHJldHVybiBzdGF0dXMgb2YgdmVyaWZ5X2FyZWEuCisKK1NhdCBNYXIgIDYgMTY6MDY6MTkgMTk5NAorCisJKiBMaW51eCAxLjAgcmVsZWFzZWQgKHRlY2huaWNhbGx5IGEgcHJlLXJlbGVhc2UpLgorCisJKiBzY3NpLmM6IEFkZCBJTVMgQ0RENTIxLCBNYXh0b3IgWFQtODc2MFMgdG8gYmxhY2tsaXN0LgorCitUdWUgRmViIDE1IDEwOjU4OjIwIDE5OTQKKworICAgICAgICAqIHBsMTVlIHJlbGVhc2VkLgorCisgICAgICAgICogYWhhMTU0Mi5jOiBGb3IgMTU0MkMsIGFsbG93IGR5bmFtaWMgZGV2aWNlIHNjYW4gd2l0aCA+MUdiIHR1cm5lZAorCW9mZi4KKworCSogY29uc3RhbnRzLmM6IEZpeCB0eXBvIGluIGRlZmluaXRpb24gb2YgQ09OU1RBTlRTLgorCisgICAgICAgICogcGwxNWQgcmVsZWFzZWQuCisKK0ZyaSBGZWIgMTEgMTA6MTA6MTYgMTk5NAorCisgICAgICAgICogcGwxNWMgcmVsZWFzZWQuCisKKwkqIHNjc2kuYzogQWRkIE1heHRvciBYVC0zMjgwIGFuZCBSb2RpbWUgUk8zMDAwUyB0byBibGFja2xpc3QuCisKKwkqIHNjc2kuYzogQWxsb3cgdGFnZ2VkIHF1ZXVlaW5nIGZvciBzY3NpIDMgZGV2aWNlcyBhcyB3ZWxsLgorCVNvbWUgcmVhbGx5IG9sZCBkZXZpY2VzIHJlcG9ydCBhIHZlcnNpb24gbnVtYmVyIG9mIDAuICBEaXNhbGxvdworCUxVTiAhPSAwIGZvciB0aGVzZS4KKworVGh1IEZlYiAxMCAwOTo0ODo1NyAxOTk0CisKKyAgICAgICAgKiBwbDE1YiByZWxlYXNlZC4KKworU3VuIEZlYiAgNiAxMjoxOTo0NiAxOTk0CisKKyAgICAgICAgKiBwbDE1YSByZWxlYXNlZC4KKworRnJpIEZlYiAgNCAwOTowMjoxNyAxOTk0CisKKyAgICAgICAgKiBzY3NpLmM6IEFkZCBUZWFjIGNkcm9tIHRvIGJsYWNrbGlzdC4KKworVGh1IEZlYiAgMyAxNDoxNjo0MyAxOTk0CisKKwkqIHBsMTUgcmVsZWFzZWQuCisKK1R1ZSBGZWIgIDEgMTU6NDc6NDMgMTk5NAorCisJKiBwbDE0dyByZWxlYXNlZC4KKworCSogd2Q3MDAwLmMgKHdkX2Jhc2VzKTogRml4IHR5cG8gaW4gbGFzdCBjaGFuZ2UuCisKK01vbiBKYW4gMjQgMTc6Mzc6MjMgMTk5NAorCisJKiBwbDE0dSByZWxlYXNlZC4KKworCSogYWhhMTU0Mi5jOiBTdXBwb3J0IDE1NDJDRi9leHRlbmRlZCBiaW9zLiAgRGlmZmVyZW50IGZyb20gMTU0MkMKKworCSogd2Q3MDAwLmM6IEFsbG93IGJpb3MgYXQgMHhkODAwMCBhcyB3ZWxsLgorCisJKiB1bHRyYXN0b3IuYzogRG8gbm90IHRydW5jYXRlIGN5bGluZGVycyB0byAxMDI0LgorCisJKiBmZG9tYWluLmM6IFVwZGF0ZSB0byB2ZXJzaW9uIDUuOSAoYWRkIG5ldyBiaW9zIHNpZ25hdHVyZSkuCisKKwkqIE5DUjUzODAuYzogVXBkYXRlIGZyb20gRHJldyAtIHNob3VsZCB3b3JrIGEgbG90IGJldHRlciBub3cuCisKK1NhdCBKYW4gIDggMTU6MTM6MTAgMTk5NAorCisJKiBwbDE0byByZWxlYXNlZC4KKworCSogc3JfaW9jdGwuYzogWmVybyByZXNlcnZlZCBmaWVsZCBiZWZvcmUgdHJ5aW5nIHRvIHNldCBhdWRpbyB2b2x1bWUuCisKK1dlZCBKYW4gIDUgMTM6MjE6MTAgMTk5NAorCisJKiBwbDE0bSByZWxlYXNlZC4KKworCSogZmRvbWFpbi5jOiBVcGRhdGUgdG8gdmVyc2lvbiA1LjguICBObyBmdW5jdGlvbmFsIGRpZmZlcmVuY2U/Pz8KKworVHVlIEphbiAgNCAxNDoyNjoxMyAxOTk0CisKKwkqIHBsMTRsIHJlbGVhc2VkLgorCisJKiB1bHRyYXN0b3IuYzogUmVtb3ZlIG91dGwsIGlubCBmdW5jdGlvbnMgKG5vdyBwcm92aWRlZCBlbHNld2hlcmUpLgorCitNb24gSmFuICAzIDEyOjI3OjI1IDE5OTQKKworCSogcGwxNGsgcmVsZWFzZWQuCisKKwkqIGFoYTE1MnguYzogUmVtb3ZlIGluc3cgYW5kIG91dHN3IGZ1bmN0aW9ucy4KKworCSogZmRvbWFpbi5jOiBEaXR0by4KKworV2VkIERlYyAyOSAwOTo0NzoyMCAxOTkzCisKKwkqIHBsMTRpIHJlbGVhc2VkLgorCisJKiBzY3NpLmM6IFN1cHBvcnQgUkVDT1ZFUkVEX0VSUk9SIGZvciB0YXBlIGRyaXZlcy4KKworCSogc3QuYzogVXBkYXRlIG9mIHRhcGUgZHJpdmVyIGZyb20gS2FpLgorCitUdWUgRGVjIDIxIDA5OjE4OjMwIDE5OTMKKworCSogcGwxNGcgcmVsZWFzZWQuCisKKwkqIGFoYTE1NDIuW2MsaF06IFN1cHBvcnQgZXh0ZW5kZWQgQklPUyBzdHVmZi4KKworCSogc2NzaS5jOiBDbGVhbiB1cCBtZXNzYWdlcyBhYm91dCBkaXNrcywgc28gdGhleSBhcmUgZGlzcGxheWVkIGFzCisJc2RhLCBzZGIsIGV0YyBpbnN0ZWFkIG9mIHNkMCwgc2QxLCBldGMuCisKKwkqIHNyLmM6ICBGb3JjZSByZXJlYWQgb2YgY2FwYWNpdHkgaWYgZGlzayB3YXMgY2hhbmdlZC4KKwlDbGVhciBidWZmZXIgYmVmb3JlIGFza2luZyBmb3IgY2FwYWNpdHkvc2VjdG9yc2l6ZSAoc29tZSBkcml2ZXMKKwlkbyBub3QgcmVwb3J0IHRoaXMgcHJvcGVybHkpLiAgU2V0IG5lZWRzX3NlY3Rvcl9zaXplIGZsYWcgaWYKKwlkcml2ZSBkaWQgbm90IHJldHVybiBzZW5zaWJsZSBzZWN0b3Igc2l6ZS4KKworTW9uIERlYyAxMyAxMjoxMzo0NyAxOTkzCisKKwkqIGFoYTE1MnguYzogVXBkYXRlIHRvIHZlcnNpb24gLjEwMSBmcm9tIEp1ZXJnZW4uCisKK01vbiBOb3YgMjkgMDM6MDM6MDAgMTk5MworCisgICAgICAgICogbGludXggMC45OS4xNCByZWxlYXNlZC4KKworCSogQWxsIHNjc2kgc3R1ZmYgbW92ZWQgZnJvbSBrZXJuZWwvYmxrX2Rydi9zY3NpIHRvIGRyaXZlcnMvc2NzaS4KKworCSogVGhyb3VnaG91dDogR3JhbW1hdGljYWwgY29ycmVjdGlvbnMgdG8gdmFyaW91cyBjb21tZW50cy4KKworCSogTWFrZWZpbGU6IGZpeCBzbyB0aGF0IHdlIGRvIG5vdCBuZWVkIHRvIGNvbXBpbGUgdGhpbmdzIHdlIGFyZQorCW5vdCBnb2luZyB0byB1c2UuCisKKwkqIE5DUjUzODAuYywgTkNSNTM4MC5oLCBnX05DUjUzODAuYywgZ19OQ1I1MzgwLmgsIHBhczE2LmMsCisJcGFzMTYuaCwgdDEyOC5jLCB0MTI4Lmg6ICBOZXcgZmlsZXMgZnJvbSBEcmV3LgorCisJKiBhaGExNTJ4LmMsIGFoYTE1MnguaDogTmV3IGZpbGVzIGZyb20gSnVlcmdlbiBGaXNjaGVyLgorCisJKiBhaGExNTQyLmM6IFN1cHBvcnQgZm9yIG1vcmUgdGhhbiBvbmUgMTU0MiBpbiB0aGUgbWFjaGluZQorCWF0IHRoZSBzYW1lIHRpbWUuICBNYWtlIGZ1bmN0aW9ucyBzdGF0aWMgdGhhdCBkbyBub3QgbmVlZAorCXZpc2liaWxpdHkuCisKKwkqIGFoYTE3NDAuYzogU2V0IE5FRURTX0pVTVBTVEFSVCBmbGFnIGluIHJlc2V0IGZ1bmN0aW9uLCBzbyB3ZQorCWtub3cgdG8gcmVzdGFydCB0aGUgY29tbWFuZC4gIENoYW5nZSBwcm90b3R5cGUgb2YgYWhhMTc0MF9yZXNldAorCXRvIHRha2UgYSBjb21tYW5kIHBvaW50ZXIuCisKKwkqIGNvbnN0YW50cy5jOiBDbGVhbiB1cCBhIGZldyB0aGluZ3MuCisKKwkqIGZkb21haW4uYzogVXBkYXRlIHRvIHZlcnNpb24gNS42LiAgTW92ZSBzbmFyZl9yZWdpb24uICBBbGxvdworCWJvYXJkIHRvIGJlIHNldCBhdCBkaWZmZXJlbnQgU0NTSSBpZHMuICBSZW1vdmUgc3VwcG9ydCBmb3IKKwlyZXNlbGVjdGlvbiAoZGlkIG5vdCB3b3JrIHdlbGwpLiAgU2V0IEpVTVBTVEFSVCBmbGFnIGluIHJlc2V0CisJY29kZS4KKworCSogaG9zdHMuYzogU3VwcG9ydCBuZXcgbG93LWxldmVsIGFkYXB0ZXJzLiAgQWxsb3cgZm9yIG1vcmUgdGhhbgorCW9uZSBhZGFwdGVyIG9mIGEgZ2l2ZW4gdHlwZS4KKworCSogaG9zdHMuaDogQWxsb3cgZm9yIG1vcmUgdGhhbiBvbmUgYWRhcHRlciBvZiBhIGdpdmVuIHR5cGUuCisKKwkqIHNjc2kuYzogIEFkZCBzY3NpX2RldmljZV90eXBlcyBhcnJheSwgaWYgTkVFRFNfSlVNUFNUQVJUIGlzIHNldAorCWFmdGVyIGEgbG93LWxldmVsIHJlc2V0LCBzdGFydCB0aGUgY29tbWFuZCBhZ2Fpbi4gIFNvcnQgYmxhY2tsaXN0LAorCWFuZCBhZGQgTWF4dG9yIE1YVC0xMjQwUywgWFQtNDE3MFMsIE5FQyBDRFJPTSA4NCwgU2VhZ2F0ZSBTVDE1N04uCisKKwkqIHNjc2kuaDogQWRkIGNvbnN0YW50cyBmb3IgdGFnZ2VkIHF1ZXVlaW5nLgorCisJKiBUaHJvdWdob3V0OiBVc2UgY29uc3RhbnRzIGZyb20gbWFqb3IuaCBpbnN0ZWFkIG9mIGhhcmRjb2RlZAorCW51bWJlcnMgZm9yIG1ham9yIG51bWJlcnMuCisKKwkqIHNjc2lfaW9jdGwuYzogRml4IGJ1ZyBpbiBidWZmZXIgbGVuZ3RoIGluIGlvY3RsX2NvbW1hbmQuICBVc2UKKwl2ZXJpZnlfYXJlYSBpbiBHRVRfSURMVU4gaW9jdGwuICBBZGQgbmV3IGlvY3RscyBmb3IKKwlUQUdHRURfUVVFVUVfRU5BQkxFLCBESVNBQkxFLiAgT25seSBhbGxvdyBJT0NUTF9TRU5EX0NPTU1BTkQgYnkKKwlzdXBlcnVzZXIuCisKKwkqIHNkLmM6IE9ubHkgcGF5IGF0dGVudGlvbiB0byBVTklUX0FUVEVOVElPTiBmb3IgcmVtb3ZhYmxlIGRpc2tzLgorCUZpeCBidWcgd2hlcmUgc29tZXRpbWVzIHBvcnRpb25zIG9mIGJsb2NrcyB3b3VsZCBnZXQgbG9zdAorCXJlc3VsdGluZyBpbiBwcm9jZXNzZXMgaGFuZ2luZy4gIEFkZCBtZXNzYWdlcyB3aGVuIHdlIHNwaW4gdXAgYQorCWRpc2ssIGFuZCBmaXggYSBidWcgaW4gdGhlIHRpbWluZy4gIEluY3JlYXNlIHJlYWQtYWhlYWQgZm9yIGRpc2tzCisJdGhhdCBhcmUgb24gYSBzY2F0dGVyLWdhdGhlciBjYXBhYmxlIGhvc3QgYWRhcHRlci4KKworCSogc2VhZ2F0ZS5jOiBGaXggc28gdGhhdCBzb21lIHBhcmFtZXRlcnMgY2FuIGJlIHNldCBmcm9tIHRoZSBsaWxvCisJcHJvbXB0LiAgU3VwcGx5IGp1bXBzdGFydCBmbGFnIGlmIHdlIGFyZSByZXNldHRpbmcgYW5kIG5lZWQgdGhlCisJY29tbWFuZCByZXN0YXJ0ZWQuICAgRml4IHNvIHRoYXQgd2UgcmV0dXJuIDEgaWYgd2UgZGV0ZWN0IGEgY2FyZAorCXNvIHRoYXQgbXVsdGlwbGUgY2FyZCBkZXRlY3Rpb24gd29ya3MgY29ycmVjdGx5LiAgQWRkIHlldCBhbm90aGVyCisJc2lnbmF0dXJlIGZvciBGRCBjYXJkcyAoOTUwKS4gIEFkZCBhbm90aGVyIHNpZ25hdHVyZSBmb3IgU1QweC4KKworCSogc2cuYywgc2cuaDogTmV3IGZpbGVzIGZyb20gTGF3cmVuY2UgRm9hcmQgZm9yIGdlbmVyaWMgc2NzaQorCWFjY2Vzcy4KKworCSogc3IuYzogIEFkZCB0eXBlIGNhc3RzIGZvciAodm9pZCopIHNvIHRoYXQgd2UgY2FuIGRvIHBvaW50ZXIKKwlhcml0aG1ldGljLiAgV29ya3Mgd2l0aCBHQ0Mgd2l0aG91dCB0aGlzLCBidXQgaXQgaXMgbm90IHN0cmljdGx5CisJY29ycmVjdC4gIFNhbWUgYnVnZml4IGFzIHdhcyBpbiBzZC5jLiAgSW5jcmVhc2UgcmVhZC1haGVhZCBhIGxhCisJZGlzayBkcml2ZXIuCisKKwkqIHNyX2lvY3RsLmM6IFVzZSBzY3NpX21hbGxvYyBidWZmZXIgaW5zdGVhZCBvZiBidWZmZXIgZnJvbSBzdGFjaworCXNpbmNlIHdlIGNhbm5vdCBndWFyYW50ZWUgdGhhdCB0aGUgc3RhY2sgaXMgPCAxNk1iLgorCisJdWx0cmFzdG9yLmM6IFVwZGF0ZSB0byBzdXBwb3J0IDI0ZiBwcm9wZXJseSAoSkZDJ3MgZHJpdmVyKS4KKworCXdkNzAwMC5jOiBTdXBwbHkganVtcHN0YXJ0IGZsYWcgZm9yIHJlc2V0LiAgRG8gbm90IHJvdW5kIHVwCisJbnVtYmVyIG9mIGN5bGluZGVycyBpbiBiaW9zcGFyYW0gZnVuY3Rpb24uCisKK1NhdCBTZXAgIDQgMjA6NDk6NTYgMTk5MworCisgICAgKiAwLjk5cGwxMyByZWxlYXNlZC4KKworICAgICogVGhyb3VnaG91dDogIFVzZSBjaGVja19yZWdpb24vc25hcmZfcmVnaW9uIGZvciBhbGwgbG93LWxldmVsCisgICAgZHJpdmVycy4KKworICAgICogYWhhMTU0Mi5jOiBEbyBoYXJkIHJlc2V0IGluc3RlYWQgb2Ygc29mdCAoc29tZSBldGhlcmNhcmQgcHJvYmVzCisgICAgc2NyZXcgdXMgdXApLgorCisgICAgKiBzY3NpLmM6IEFkZCBuZXcgZmxhZyBBU0tFRF9GT1JfU0VOU0Ugc28gdGhhdCB3ZSBjYW4gdGVsbCBpZiB3ZSBhcmUKKyAgICBpbiBhIGxvb3Agd2hlcmVieSB0aGUgZGV2aWNlIHJldHVybnMgbnVsbCBzZW5zZSBkYXRhLgorCisgICAgKiBzZC5jOiBBZGQgY29kZSB0byBzcGluIHVwIGEgZHJpdmUgaWYgaXQgaXMgbm90IGFscmVhZHkgc3Bpbm5pbmcuCisgICAgRG8gdGhpcyBvbmUgYXQgYSB0aW1lIHRvIG1ha2UgaXQgZWFzaWVyIG9uIHBvd2VyIHN1cHBsaWVzLgorCisgICAgKiBzZF9pb2N0bC5jOiBVc2Ugc3luY19kZXYgaW5zdGVhZCBvZiBmc3luY19kZXYgaW4gQkxLRkxTQlVGIGlvY3RsLgorCisgICAgKiBzZWFnYXRlLmM6IFN3aXRjaCBhcm91bmQgREFUQS9DT05UUk9MIGxpbmVzLgorCisgICAgKiBzdC5jOiBDaGFuZ2Ugc2Vuc2UgdG8gdW5zaWduZWQuCisKK1RodSBBdWcgIDUgMTE6NTk6MTggMTk5MworCisgICAgKiAwLjk5cGwxMiByZWxlYXNlZC4KKworICAgICogY29uc3RhbnRzLmMsIGNvbnN0YW50cy5oOiBOZXcgZmlsZXMgd2l0aCBhc2NpaSBkZXNjcmlwdGlvbnMgb2YKKyAgICB2YXJpb3VzIGNvbmRpdGlvbnMuCisKKyAgICAqIE1ha2VmaWxlOiBEbyBub3QgdHJ5IHRvIGNvdW50IHRoZSBudW1iZXIgb2YgbG93LWxldmVsIGRyaXZlcnMsCisgICAganVzdCBnZW5lcmF0ZSB0aGUgbGlzdCBvZiAubyBmaWxlcy4KKworICAgICogYWhhMTU0Mi5jOiBSZXBsYWNlIDE2IHdpdGggc2l6ZW9mKFNDcG50LT5zZW5zZV9idWZmZXIpLiAgQWRkIHRlc3RzCisgICAgZm9yIGFkZHJlc3NlcyA+IDE2TWIsIHBhbmljIGlmIHdlIGZpbmQgb25lLgorCisgICAgKiBhaGExNzQwLmM6IERpdHRvIHdpdGggc2l6ZW9mKCkuCisKKyAgICAqIGZkb21haW4uYzogVXBkYXRlIHRvIHZlcnNpb24gMy4xOC4gIEFkZCBuZXcgc2lnbmF0dXJlLCByZWdpc3RlciBJUlEKKyAgICB3aXRoIGlycWFjdGlvbi4gIFVzZSBJRCA3IGZvciBuZXcgYm9hcmQuICBCZSBtb3JlIGludGVsbGlnZW50IGFib3V0CisgICAgb2J0YWluaW5nIHRoZSBoL3MvYyBudW1iZXJzIGZvciBiaW9zcGFyYW0uCisKKyAgICAqIGhvc3RzLmM6IERvIG5vdCBkZXBlbmQgdXBvbiBNYWtlZmlsZSBnZW5lcmF0ZWQgY291bnQgb2YgdGhlIG51bWJlcgorICAgIG9mIGxvdy1sZXZlbCBob3N0IGFkYXB0ZXJzLgorCisgICAgKiBzY3NpLmM6IFVzZSBhcnJheSBmb3Igc2NzaV9jb21tYW5kX3NpemUgaW5zdGVhZCBvZiBhIGZ1bmN0aW9uLiAgQWRkCisgICAgVGV4ZWwgY2Ryb20gYW5kIE1heHRvciBYVC00MzgwUyB0byBibGFja2xpc3QuICBBbGxvdyBjb21waWxlIHRpbWUKKyAgICBvcHRpb24gZm9yIG5vLW11bHRpIGx1biBzY2FuLiAgQWRkIHNlbWFwaG9yZSBmb3IgcG9zc2libGUgcHJvYmxlbXMKKyAgICB3aXRoIGhhbmRzaGFraW5nLCBhc3N1bWUgZGV2aWNlIGlzIGZhdWx0eSB1bnRpbCB3ZSBrbm93IGl0IG5vdCB0byBiZQorICAgIHRoZSBjYXNlLiAgQWRkIERFQlVHX0lOSVQgc3ltYm9sIHRvIGR1bXAgaW5mbyBhcyB3ZSBzY2FuIGZvciBkZXZpY2VzLgorICAgIFplcm8gc2Vuc2UgYnVmZmVyIHNvIHdlIGNhbiB0ZWxsIGlmIHdlIG5lZWQgdG8gcmVxdWVzdCBpdC4gIFdoZW4KKyAgICBleGFtaW5pbmcgc2Vuc2UgaW5mb3JtYXRpb24sIHJlcXVlc3Qgc2Vuc2UgaWYgYnVmZmVyIGlzIGFsbCB6ZXJvLgorICAgIElmIFJFU0VULCByZXF1ZXN0IHNlbnNlIGluZm9ybWF0aW9uIHRvIHNlZSB3aGF0IHRvIGRvIG5leHQuCisKKyAgICAqIHNjc2lfZGVidWcuYzogQ2hhbmdlIHNvbWUgY29uc3RhbnRzIHRvIHVzZSBzeW1ib2xzIGxpa2UgSU5UX01BWC4KKworICAgICogc2NzaV9pb2N0bC5jIChrZXJuZWxfc2NzaV9pb2N0bCk6IE5ldyBmdW5jdGlvbiAtZm9yIG1ha2luZyBpb2N0bAorICAgIGNhbGxzIGZyb20ga2VybmVsIHNwYWNlLgorCisgICAgKiBzZC5jOiBJbmNyZWFzZSB0aW1lb3V0IHRvIDMwMC4gIFVzZSBmdW5jdGlvbnMgaW4gY29uc3RhbnRzLmggdG8KKyAgICBkaXNwbGF5IGluZm8uICBVc2Ugc2NzaV9tYWxsb2MgYnVmZmVyIGZvciBSRUFEX0NBUEFDSVRZLCBzaW5jZQorICAgIHdlIGNhbm5vdCBndWFyYW50ZWUgdGhhdCBhIHN0YWNrIGJhc2VkIGJ1ZmZlciBpcyA8IDE2TWIuCisKKyAgICAqIHNkX2lvY3RsLmM6IEFkZCBCTEtGTFNCVUYgaW9jdGwuCisKKyAgICAqIHNlYWdhdGUuYzogQWRkIG5ldyBjb21waWxlIHRpbWUgb3B0aW9ucyBmb3IgQVJCSVRSQVRFLAorICAgIFNMT1dfSEFORFNIQUtFLCBhbmQgU0xPV19SQVRFLiAgVXBkYXRlIGFzc2VtYmx5IGxvb3BzIGZvciB0cmFuc2ZlcnJpbmcKKyAgICBkYXRhLiAgVXNlIGtlcm5lbF9zY3NpX2lvY3RsIHRvIHJlcXVlc3QgbW9kZSBwYWdlIHdpdGggZ2VvbWV0cnkuCisKKyAgICAqIHNyLmM6IFVzZSBmdW5jdGlvbnMgaW4gY29uc3RhbnRzLmMgdG8gZGlzcGxheSBtZXNzYWdlcy4KKworICAgICogc3QuYzogU3VwcG9ydCBmb3IgdmFyaWFibGUgYmxvY2sgc2l6ZS4KKworICAgICogdWx0cmFzdG9yLmM6IERvIG5vdCB1c2UgY2FjaGUgZm9yIHRhcGUgZHJpdmVzLiAgU2V0CisgICAgdW5jaGVja2VkX2lzYV9kbWEgZmxhZywgZXZlbiB0aG91Z2ggdGhpcyBtYXkgbm90IGJlIG5lZWRlZCAoZ2V0cyBzZXQKKyAgICBsYXRlcikuCisKK1NhdCBKdWwgMTcgMTg6MzI6NDQgMTk5MworCisgICAgKiAwLjk5cGwxMSByZWxlYXNlZC4gIEMrKyBjb21waWxhYmxlLgorCisgICAgKiBUaHJvdWdob3V0OiBBZGQgdHlwZSBjYXN0cyBhbGwgb3ZlciB0aGUgcGxhY2UsIGFuZCB1c2UgImlwIiBpbnN0ZWFkCisgICAgb2YgImluZm8iIGluIHRoZSB2YXJpb3VzIGJpb3NwYXJhbSBmdW5jdGlvbnMuCisKKyAgICAqIE1ha2VmaWxlOiBDb21waWxlIHNlYWdhdGUuYyB3aXRoIEMrKyBjb21waWxlci4KKworICAgICogYWhhMTU0Mi5jOiBBbHdheXMgc2V0IGNjYiBwb2ludGVyIGFzIHRoaXMgZ2V0cyB0cmFzaGVkIHNvbWVob3cgb24KKyAgICBzb21lIHN5c3RlbXMuICBBZGQgYSBmZXcgdHlwZSBjYXN0cy4gIFVwZGF0ZSBiaW9zcGFyYW0gZnVuY3Rpb24gYSBsaXR0bGUuCisKKyAgICAqIGFoYTE3NDAuYzogQWRkIGEgZmV3IHR5cGUgY2FzdHMuCisKKyAgICAqIGZkb21haW4uYzogVXBkYXRlIHRvIHZlcnNpb24gMy4xNyBmcm9tIDMuNi4gIE5vdyB3b3JrcyB3aXRoCisgICAgVE1DLTE4QzUwLgorCisgICAgKiBzY3NpLmM6IE1pbm9yIGNoYW5nZXMgaGVyZSBhbmQgdGhlcmUgd2l0aCBkYXRhdHlwZXMuICBTYXZlIHVzZV9zZworICAgIHdoZW4gcmVxdWVzdGluZyBzZW5zZSBpbmZvcm1hdGlvbiBzbyB0aGF0IHRoaXMgY2FuIHByb3Blcmx5IGJlCisgICAgcmVzdG9yZWQgaWYgd2UgcmV0cnkgdGhlIGNvbW1hbmQuICBTZXQgYXNpZGUgZG1hIGJ1ZmZlcnMgYXNzdW1pbmcgZWFjaAorICAgIGJsb2NrIGlzIDEgcGFnZSwgbm90IDFLYiBtaW5peCBibG9jay4KKworICAgICogc2NzaV9pb2N0bC5jOiBBZGQgYSBmZXcgdHlwZSBjYXN0cy4gIE90aGVyIG1pbm9yIGNoYW5nZXMuCisKKyAgICAqIHNkLmM6ICBDb3JyZWN0bHkgIGZyZWUgYWxsIHNjc2lfbWFsbG9jJ2QgbWVtb3J5IGlmIHdlIHJ1biBvdXQgb2YKKyAgICBkbWFfcG9vbC4gU3RvcmUgYmxvY2tzaXplIGluZm9ybWF0aW9uIGZvciBlYWNoIHBhcnRpdGlvbi4KKworICAgICogc2VhZ2F0ZS5jOiBNaW5vciBjbGVhbnVwcyBoZXJlIGFuZCB0aGVyZS4KKworICAgICogc3IuYzogU2V0IHVwIGJsb2Nrc2l6ZSBhcnJheSBmb3IgYWxsIGRpc2NzLiAgRml4IGJ1ZyBpbiBmcmVlaW5nCisgICAgYnVmZmVycyBpZiB3ZSBydW4gb3V0IG9mIGRtYSBwb29sLgorCitUaHUgSnVuICAyIDE3OjU4OjExIDE5OTMKKworICAgICogMC45OXBsMTAgcmVsZWFzZWQuCisKKyAgICAqIGFoYTE1NDIuYzogU3VwcG9ydCBmb3IgQlQgNDQ1UyAoVkwtYnVzIGJvYXJkIHdpdGggbm8gZG1hIGNoYW5uZWwpLgorCisgICAgKiBmZG9tYWluLmM6IFVwZ3JhZGUgdG8gdmVyc2lvbiAzLjYuIFByZWxpbWluYXJ5IHN1cHBvcnQgZm9yIFROQy0xOEM1MC4KKworICAgICogc2NzaS5jOiBGaXJzdCBhdHRlbXB0IHRvIGZpeCBwcm9ibGVtIHdpdGggb2xkX3VzZV9zZy4gIENoYW5nZQorICAgIE5PVF9SRUFEWSB0byBhIFNVR0dFU1RfQUJPUlQuICBGaXggdGltZW91dCByYWNlIHdoZXJlIHRpbWUgbWlnaHQKKyAgICBnZXQgZGVjcmVtZW50ZWQgcGFzdCB6ZXJvLgorCisgICAgKiBzZC5jOiBBZGQgYmxvY2tfZnN5bmMgZnVuY3Rpb24gdG8gZGlzcGF0Y2ggdGFibGUuCisKKyAgICAqIHNyLmM6IEluY3JlYXNlIHRpbWVvdXQgdG8gNTAwIGZyb20gMjUwLiAgQWRkIGVudHJ5IGZvciBzeW5jIGluCisgICAgZGlzcGF0Y2ggdGFibGUgKHN1cHBseSBOVUxMKS4gIElmIHdlIGRvIG5vdCBoYXZlIGEgc2VjdG9yc2l6ZSwKKyAgICB0cnkgdG8gZ2V0IGl0IGluIHRoZSBzZF9vcGVuIGZ1bmN0aW9uLiAgQWRkIG5ldyBmdW5jdGlvbiBqdXN0IHRvCisgICAgb2J0YWluIHNlY3RvcnNpemUuCisKKyAgICAqIHNyLmg6IEFkZCBuZWVkc19zZWN0b3Jfc2l6ZSBzZW1hcGhvcmUuCisKKyAgICAqIHN0LmM6IEFkZCBOVUxMIGZvciBmc3luYyBpbiBkaXNwYXRjaCB0YWJsZS4KKworICAgICogd2Q3MDAwLmM6IEFsbG93IGFub3RoZXIgY29uZGl0aW9uIGZvciBwb3dlciBvbiB0aGF0IGFyZSBub3JtYWwKKyAgICBhbmQgZG8gbm90IHJlcXVpcmUgYSBwYW5pYy4KKworVGh1IEFwciAyMiAyMzoxMDoxMSAxOTkzCisKKyAgICAqIDAuOTlwbDkgcmVsZWFzZWQuCisKKyAgICAqIGFoYTE1NDIuYzogVXNlICh2b2lkKSBpbnN0ZWFkIG9mICgpIGluIHNldHVwX21haWxib3hlcy4KKworICAgICogc2NzaS5jOiBJbml0aWFsaXplIHRyYW5zZmVyc2l6ZSBhbmQgdW5kZXJmbG93IGZpZWxkcyBpbiBTQ21kIHRvIDAuCisgICAgRG8gbm90IHBhbmljIGZvciB1bnN1cHBvcnRlZCBtZXNzYWdlIGJ5dGVzLgorCisgICAgKiBzY3NpLmg6IEFsbG9jYXRlIDEyIGJ5dGVzIGluc3RlYWQgb2YgMTAgZm9yIGNvbW1hbmRzLiAgQWRkCisgICAgdHJhbnNmZXJzaXplIGFuZCB1bmRlcmZsb3cgZmllbGRzLgorCisgICAgKiBzY3NpX2lvY3RsLmM6IEZ1cnRoZXIgYnVnZml4IHRvIGlvY3RsX3Byb2JlLgorCisgICAgKiBzZC5jOiBVc2UgbG9uZyBpbnN0ZWFkIG9mIGludCBmb3IgbGFzdCBwYXJhbWV0ZXIgaW4gc2RfaW9jdGwuCisgICAgSW5pdGlhbGl6ZSB0cmFuc2ZlcnNpemUgYW5kIHVuZGVyZmxvdyBmaWVsZHMuCisKKyAgICAqIHNkX2lvY3RsLmM6IERpdHRvIGZvciBzZF9pb2N0bCgsLCwsKTsKKworICAgICogc2VhZ2F0ZS5jOiBOZXcgdmVyc2lvbiBmcm9tIERyZXcuICBJbmNsdWRlcyBuZXcgc2lnbmF0dXJlcyBmb3IgRkQKKyAgICBjYXJkcy4gIFN1cHBvcnQgZm9yIDB3cyBqdW1wZXIuIENvcnJlY3RseSBpbml0aWFsaXplCisgICAgc2NzaV9ob3N0c1tob3N0bnVtXS50aGlzX2lkLiAgSW1wcm92ZWQgaGFuZGluZyBvZgorICAgIGRpc2Nvbm5lY3QvcmVjb25uZWN0LCBhbmQgc3VwcG9ydCBjb21tYW5kIGxpbmtpbmcuICBVc2UKKyAgICB0cmFuc2ZlcnNpemUgYW5kIHVuZGVyZmxvdyBmaWVsZHMuICBTdXBwb3J0IHNjYXR0ZXItZ2F0aGVyLgorCisgICAgKiBzci5jLCBzcl9pb2N0bC5jOiBVc2UgbG9uZyBpbnN0ZWFkIG9mIGludCBmb3IgbGFzdCBwYXJhbWV0ZXIgaW4gc3JfaW9jdGwuCisgICAgVXNlIGJ1ZmZlciBhbmQgYnVmbGVuZ3RoIGluIGRvX2lvY3RsLiAgUGF0Y2hlcyBmcm9tIENocmlzIE5ld2JvbGQgZm9yCisgICAgc2NzaS0yIGF1ZGlvIGNvbW1hbmRzLgorCisgICAgKiB1bHRyYXN0b3IuYzogQ29tbWVudCBvdXQgaW5fYnl0ZSAoY29tcGlsZXIgd2FybmluZykuCisKKyAgICAqIHdkNzAwMC5jOiBDaGFuZ2UgKCkgdG8gKHZvaWQpIGluIHdkNzAwMF9lbmFibGVfZG1hLgorCitXZWQgTWFyIDMxIDE2OjM2OjI1IDE5OTMKKworICAgICogMC45OXBsOCByZWxlYXNlZC4KKworICAgICogYWhhMTU0Mi5jOiBIYW5kbGUgbWFpbGJveGVzIGJldHRlciBmb3IgMTU0MkMuCisgICAgICAgIERvIG5vdCB0cnVuY2F0ZSBudW1iZXIgb2YgY3lsaW5kZXJzIGF0IDEwMjQgZm9yIGJpb3NwYXJhbSBjYWxsLgorCisgICAgKiBhaGExNzQwLmM6IEZpeCBhIGZldyBtaW5vciBidWdzIGZvciBtdWx0aXBsZSBkZXZpY2VzLgorICAgICAgICBTYW1lIGFzIGFib3ZlIGZvciBiaW9zcGFyYW0uCisKKyAgICAqIHNjc2kuYzogQWRkIGxvY2thYmxlIHNlbWFwaG9yZSBmb3IgcmVtb3ZhYmxlIGRldmljZXMgdGhhdCBjYW4gaGF2ZQorICAgIG1lZGlhIHJlbW92YWwgcHJldmVudGVkLiAgQWRkIGFub3RoZXIgc2lnbmF0dXJlIGZvciBmbG9wdGljYWxzLgorICAgIChhbGxvY2F0ZV9kZXZpY2UpOiBGaXggcmFjZSBjb25kaXRpb24uICBBbGxvdyBtb3JlIHNwYWNlIGluIGRtYSBwb29sCisgICAgZm9yIGJsb2Nrc2l6ZXMgb2YgdXAgdG8gNEtiLgorCisgICAgKiBzY3NpLmg6IERlZmluZSBDT01NQU5EX1NJWkUuICBEZWZpbmUgYSBTQ1NJIHNwZWNpZmljIHZlcnNpb24gb2YKKyAgICBJTklUX1JFUVVFU1QgdGhhdCBjYW4gcnVuIHdpdGggaW50ZXJydXB0cyBvZmYuCisKKyAgICAqIHNjc2lfaW9jdGwuYzogTWFrZSBpb2N0bF9wcm9iZSBmdW5jdGlvbiBtb3JlIGlkaW90LXByb29mLiAgSWYKKyAgICBhIHJlbW92YWJsZSBkZXZpY2Ugc2F5cyBJTExFR0FMIFJFUVVFU1QgdG8gYSBkb29yLWxvY2tpbmcgY29tbWFuZCwKKyAgICBjbGVhciBsb2NrYWJsZSBmbGFnLiAgQWRkIFNDU0lfSU9DVExfR0VUX0lETFVOIGlvY3RsLiAgRG8gbm90IGF0dGVtcHQKKyAgICB0byBsb2NrIGRvb3IgZm9yIGRldmljZXMgdGhhdCBkbyBub3QgaGF2ZSBsb2NrYWJsZSBzZW1hcGhvcmUgc2V0LgorCisgICAgKiBzZC5jOiBGaXggcmFjZSBjb25kaXRpb24gZm9yIG11bHRpcGxlIGRpc2tzLiAgVXNlIElOSVRfU0NTSV9SRVFVRVNUCisgICAgaW5zdGVhZCBvZiBJTklUX1JFUVVFU1QuICBBbGxvdyBzZWN0b3Igc2l6ZXMgb2YgMTAyNCBhbmQgMjU2LiAgRm9yCisgICAgcmVtb3ZhYmxlIGRpc2tzIHRoYXQgYXJlIG5vdCByZWFkeSwgbWFyayB0aGVtIGFzIGhhdmluZyBhIG1lZGlhIGNoYW5nZQorICAgIChzb21lIGRyaXZlcyBkbyBub3QgcmVwb3J0IHRoaXMgbGF0ZXIpLgorCisgICAgKiBzZWFnYXRlLmM6IFVzZSB2b2xhdGlsZSBrZXl3b3JkIGZvciBtZW1vcnktbWFwcGVkIHJlZ2lzdGVyIHBvaW50ZXJzLgorCisgICAgKiBzci5jOiBGaXggcmFjZSBjb25kaXRpb24sIGEgbGEgc2QuYy4gIEluY3JlYXNlIHRoZSBudW1iZXIgb2YgcmV0cmllcworICAgIHRvIDEuICBVc2UgSU5JVF9TQ1NJX1JFUVVFU1QuICBBbGxvdyA1MTIgYnl0ZSBzZWN0b3Igc2l6ZXMuICBEbyBhCisgICAgcmVhZF9jYXBhY2l0eSB3aGVuIHdlIGluaXQgdGhlIGRldmljZSBzbyB3ZSBrbm93IHRoZSBzaXplIGFuZAorICAgIHNlY3RvcnNpemUuCisKKyAgICAqIHN0LmM6IElmIGlvY3RsIG5vdCBmb3VuZCBpbiBzdC5jLCB0cnkgc2NzaV9pb2N0bCBmb3Igb3RoZXJzLgorCisgICAgKiB1bHRyYXN0b3IuYzogRG8gbm90IHRydW5jYXRlIG51bWJlciBvZiBjeWxpbmRlcnMgYXQgMTAyNCBmb3IKKyAgICBiaW9zcGFyYW0gY2FsbC4KKworICAgICogd2Q3MDAwLmM6IERpdHRvLgorICAgIFRocm91Z2hvdXQ6IFVzZSBDT01NQU5EX1NJWkUgbWFjcm8gdG8gZGV0ZXJtaW5lIGxlbmd0aCBvZiBzY3NpCisgICAgY29tbWFuZC4KKworCisKK1NhdCBNYXIgMTMgMTc6MzE6MjkgMTk5MworCisgICAgKiAwLjk5cGw3IHJlbGVhc2VkLgorCisgICAgVGhyb3VnaG91dDogSW1wcm92ZSBwdW5jdHVhdGlvbiBpbiBzb21lIG1lc3NhZ2VzLCBhbmQgdXNlIG5ldworICAgIHZlcmlmeV9hcmVhIHN5bnRheC4KKworICAgICogYWhhMTU0Mi5jOiBIYW5kbGUgdW5leHBlY3RlZCBpbnRlcnJ1cHRzIGJldHRlci4KKworICAgICogc2NzaS5jOiBEaXR0by4gIEhhbmRsZSByZXNldCBjb25kaXRpb25zIGEgYml0IGJldHRlciwgYXNraW5nIGZvcgorICAgIHNlbnNlIGluZm9ybWF0aW9uIGFuZCByZXRyeWluZyBpZiByZXF1aXJlZC4KKworICAgICogc2NzaV9pb2N0bC5jOiBBbGxvdyBmb3IgMTIgYnl0ZSBzY3NpIGNvbW1hbmRzLgorCisgICAgKiB1bHRyYXN0b3IuYzogVXBkYXRlIHRvIHVzZSBzY2F0dGVyLWdhdGhlci4KKworU2F0IEZlYiAyMCAxNzo1NzoxNSAxOTkzCisKKyAgICAqIDAuOTlwbDYgcmVsZWFzZWQuCisKKyAgICAqIGZkb21haW4uYzogVXBkYXRlIHRvIHZlcnNpb24gMy41LiAgSGFuZGxlIHNwdXJpb3VzIGludGVycnVwdHMKKyAgICBiZXR0ZXIuCisKKyAgICAqIHNkLmM6IFVzZSByZWdpc3Rlcl9ibGtkZXYgZnVuY3Rpb24uCisKKyAgICAqIHNyLmM6IERpdHRvLgorCisgICAgKiBzdC5jOiBVc2UgcmVnaXN0ZXJfY2hyZGV2IGZ1bmN0aW9uLgorCisgICAgKiB3ZDcwMDAuYzogVW5kbyBwcmV2aW91cyBjaGFuZ2UuCisKK1NhdCBGZWIgIDYgMTE6MjA6NDMgMTk5MworCisgICAgKiAwLjk5cGw1IHJlbGVhc2VkLgorCisgICAgKiBzY3NpLmM6IEZpeCBidWcgaW4gdGVzdGluZyBmb3IgVU5JVF9BVFRFTlRJT04uCisKKyAgICAqIHdkNzAwMC5jOiBDaGVjayBhdCBtb3JlIGFkZHJlc3NlcyBmb3IgYmlvcy4gIEZpeCBidWcgaW4gYmlvc3BhcmFtCisgICAgKGhlYWRzICYgc2VjdG9ycyB0dXJuZWQgYXJvdW5kKS4KKworV2VkIEphbiAyMCAxODoxMzo1OSAxOTkzCisKKyAgICAqIDAuOTlwbDQgcmVsZWFzZWQuCisKKyAgICAqIHNjc2kuYzogSWdub3JlIGxlYWRpbmcgc3BhY2VzIHdoZW4gbG9va2luZyBmb3IgYmxhY2tsaXN0ZWQgZGV2aWNlcy4KKworICAgICogc2VhZ2F0ZS5jOiBBZGQgYSBmZXcgbmV3IHNpZ25hdHVyZXMgZm9yIEZEIGNhcmRzLiAgQW5vdGhlciBwYXRjaAorICAgIHdpdGggU0NpbnQgdG8gZml4IHJhY2UgY29uZGl0aW9uLiAgVXNlIHJlY3Vyc2lvbl9kZXB0aCB0byBrZWVwIHRyYWNrCisgICAgb2YgaG93IG1hbnkgdGltZXMgd2UgaGF2ZSBiZWVuIHJlY3Vyc2l2ZWx5IGNhbGxlZCwgYW5kIGRvIG5vdCBzdGFydAorICAgIGFub3RoZXIgY29tbWFuZCB1bmxlc3Mgd2UgYXJlIG9uIHRoZSBvdXRlciBsZXZlbC4gIEZpeGVzIGJ1ZworICAgIHdpdGggU3lxdWVzdCBjYXJ0cmlkZ2UgZHJpdmVzICh1c2VkIHRvIGNyYXNoIGtlcm5lbCksIGJlY2F1c2UKKyAgICB0aGV5IGRvIG5vdCBkaXNjb25uZWN0IHdpdGggbGFyZ2UgZGF0YSB0cmFuc2ZlcnMuCisKK1R1ZSBKYW4gMTIgMTQ6MzM6MzYgMTk5MworCisgICAgKiAwLjk5cGwzIHJlbGVhc2VkLgorCisgICAgKiBmZG9tYWluLmM6IFVwZGF0ZSB0byB2ZXJzaW9uIDMuMyAoYSBmZXcgbmV3IHNpZ25hdHVyZXMpLgorCisgICAgKiBzY3NpLmM6IEFkZCBDRFUtNTQxLCBEZW5vbiBEUkQtMjVYIHRvIGJsYWNrbGlzdC4KKyAgICAoYWxsb2NhdGVfcmVxdWVzdCwgcmVxdWVzdF9xdWV1ZWFibGUpOiBJbml0IHJlcXVlc3Qud2FpdGluZyB0byBOVUxMIGlmCisgICAgbm9uLWJ1ZmZlciB0eXBlIG9mIHJlcXVlc3QuCisKKyAgICAqIHNlYWdhdGUuYzogIEFsbG93IGNvbnRyb2xsZXIgdG8gYmUgb3ZlcnJpZGRlbiB3aXRoIENPTlRST0xMRVIgc3ltYm9sLgorICAgIFNldCBTQ2ludD1OVUxMIHdoZW4gd2UgYXJlIGRvbmUsIHRvIHJlbW92ZSByYWNlIGNvbmRpdGlvbi4KKworICAgICogc3QuYzogQ2hhbmdlcyBmcm9tIEthaS4KKworV2VkIERlYyAzMCAyMDowMzo0NyAxOTkyCisKKyAgICAqIDAuOTlwbDIgcmVsZWFzZWQuCisKKyAgICAqIHNjc2kuYzogQmxhY2tsaXN0IGJhY2sgaW4uICBSZW1vdmUgTmV3YnVyeSBkcml2ZSBhcyBvdGhlciBidWdmaXgKKyAgICBlbGltaW5hdGVzIG5lZWQgZm9yIGl0IGhlcmUuCisKKyAgICAqIHNkLmM6IFJldHVybiBFTk9ERVYgaW5zdGVhZCBvZiBFQUNDRVMgaWYgbm8gc3VjaCBkZXZpY2UgYXZhaWxhYmxlLgorICAgIChzZF9pbml0KSBJbml0IGJsa2Rldl9mb3BzIGVhcmxpZXIgc28gdGhhdCBzZF9vcGVuIGlzIGF2YWlsYWJsZSBzb29uZXIuCisKKyAgICAqIHNyLmM6IFNhbWUgYXMgYWJvdmUgZm9yIHNkLmMuCisKKyAgICAqIHN0LmM6IFJldHVybiBFTk9ERVYgaW5zdGVhZCBvZiBFTlhJTyBpZiBubyBkZXZpY2UuICBJbml0IGNocmRldl9mb3BzCisgICAgc29vbmVyLCBzbyB0aGF0IGl0IGlzIGFsd2F5cyB0aGVyZSBldmVuIGlmIG5vIHRhcGVzLgorCisgICAgKiBzZWFnYXRlLmMgKGNvbnRyb2xsZXJfdHlwZSk6IE5ldyB2YXJpYWJsZSB0byBrZWVwIHRyYWNrIG9mIFNUMHggb3IKKyAgICBGRC4gIE1vZGlmeSBzaWduYXR1cmVzIGxpc3QgdG8gaW5kaWNhdGUgY29udHJvbGxlciB0eXBlLCBhbmQgaW5pdAorICAgIGNvbnRyb2xsZXJfdHlwZSBvbmNlIHdlIGZpbmQgYSBtYXRjaC4KKworICAgICogd2Q3MDAwLmMgKHdkNzAwMF9zZXRfc3luYyk6IFJlbW92ZSByZWR1bmRhbnQgZnVuY3Rpb24uCisKK1N1biBEZWMgMjAgMTY6MjY6MjQgMTk5MgorCisgICAgKiAwLjk5cGwxIHJlbGVhc2VkLgorCisgICAgKiBzY3NpX2lvY3RsLmM6IEJ1Z2ZpeCAtIGNoZWNrIGRldi0+aW5kZXgsIG5vdCBkZXYtPmlkIGFnYWluc3QKKyAgICBOUl9TQ1NJX0RFVklDRVMuCisKKyAgICAqIHNyX2lvY3RsLmM6IFZlcmlmeSB0aGF0IGRldmljZSBleGlzdHMgYmVmb3JlIGFsbG93aW5nIGFuIGlvY3RsLgorCisgICAgKiBzdC5jOiBQYXRjaGVzIGZyb20gS2FpIC0gY2hhbmdlIHRpbWVvdXQgdmFsdWVzLCBpbXByb3ZlIGVuZCBvZiB0YXBlCisgICAgaGFuZGxpbmcuCisKK1N1biBEZWMgMTMgMTg6MTU6MjMgMTk5MgorCisgICAgKiAwLjk5IGtlcm5lbCByZWxlYXNlZC4gIEJhc2VsaW5lIGZvciB0aGlzIENoYW5nZUxvZy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vc2NzaS9DaGFuZ2VMb2cuaXBzIGIvRG9jdW1lbnRhdGlvbi9zY3NpL0NoYW5nZUxvZy5pcHMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTAxOWY1MQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vc2NzaS9DaGFuZ2VMb2cuaXBzCkBAIC0wLDAgKzEsMTIyIEBACitJQk0gU2VydmVSQUlEIGRyaXZlciBDaGFuZ2UgTG9nCit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CisKKyAgICAgICAgNS4wMC4wMSAgLSBTYXJhc290YSAoIDVpICkgYWRhcHRlcnMgbXVzdCBhbHdheXMgYmUgc2Nhbm5lZCBmaXJzdCAgCisgICAgICAgICAgICAgICAgIC0gR2V0IHJpZCBvbiBJT0NUTF9ORVdfQ09NTUFORCBjb2RlICAKKyAgICAgICAgICAgICAgICAgLSBBZGQgRXh0ZW5kZWQgRENEQiBDb21tYW5kcyBmb3IgVGFwZSBTdXBwb3J0IGluIDVJICAgICAgICAgICAgICAgICAgCisgICAgICAgIAorICAgICAgICA0LjkwLjExICAtIERvbid0IGFjdHVhbGx5IFJFU0VUIHVubGVzcyBpdCdzIHBoeXNpY2FsbHkgcmVxdWlyZWQKKyAgICAgICAgICAgICAgICAgLSBSZW1vdmUgdW51c2VkIGNvbXBpbGUgb3B0aW9ucworICAgICAgICAKKyAgICAgICAgNC45MC4wOCAgLSBEYXRhIENvcnJ1cHRpb24gaWYgRmlyc3QgU2NhdHRlciBHYXRoZXIgRWxlbWVudCBpcyA+IDY0SworICAgICAgICAKKyAgICAgICAgNC45MC4wOCAgLSBJbmNyZWFzZSBEZWxheXMgaW4gRmxhc2hpbmcgKCBUcm9tYm9uZSBPbmx5IC0gNEggKSAgICAgICAgCisgICAgICAgIAorICAgICAgICA0LjkwLjA1ICAtIFVzZSBOZXcgUENJIEFyY2hpdGVjdHVyZSB0byBmYWNpbGl0YXRlIEhvdCBQbHVnIERldmVsb3BtZW50CisgICAgICAgIAorICAgICAgICA0LjkwLjAxICAtIEFkZCBTZXJ2ZVJBSUQgVmVyc2lvbiBDaGVja2luZworCisgICAgICAgIDQuODAuMjYgIC0gQ2xlYW4gdXAgcG90ZW50aWFsIGNvZGUgcHJvYmxlbXMgKCBBcmphbidzIHJlY29tbWVuZGF0aW9ucyApCisgICAgICAgIAorICAgICAgICA0LjgwLjIxICAtIENoYW5nZSBtZW1jcHkoKSB0byBjb3B5X3RvX3VzZXIoKSBpbiBOVlJBTSBQYWdlIDUgSU9DVEwgcGF0aCAgIAorICAgICAgICAKKyAgICAgICAgNC44MC4yMCAgLSBTZXQgbWF4X3NlY3RvcnMgaW4gU2NzaV9Ib3N0IHN0cnVjdHVyZSAoIGlmID49IDIuNC43IGtlcm5lbCApCisgICAgICAgICAgICAgICAgIC0gNSBzZWNvbmQgZGVsYXkgbmVlZGVkIGFmdGVyIHJlc2V0dGluZyBhbiBpOTYwIGFkYXB0ZXIKKyAgICAgICAgCisgICAgICAgIDQuODAuMTQgIC0gVGFrZSBhbGwgc2VtYXBob3JlcyBvZmYgc3RhY2sgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAtIENsZWFuIFVwIE5ld19JT0NUTCBwYXRoCisgICAgICAgICAgICAgICAgICAgCisgICAgICAgIDQuODAuMDQgIC0gRWxpbWluYXRlIGNhbGxzIHRvIHN0cnRvaygpIGlmIDIuNC54IG9yIGdyZWF0ZXIgCisgICAgICAgICAgICAgICAgIC0gQWRqdXN0bWVudHMgdG8gRGV2aWNlIFF1ZXVlIERlcHRoICAgICAgICAgICAgICAgCisKKyAgICAgICAgNC44MC4wMCAgLSBNYWtlIGlhNjQgU2FmZSAgICAKKyAgICAgICAgCisgICAgICAgIDQuNzIuMDEgIC0gSS9PIE1hcHBlZCBNZW1vcnkgcmVsZWFzZSAoIHNvICJpbnNtb2QgaXBzIiBkb2VzIG5vdCBGYWlsICkgICAgCisgICAgICAgICAgICAgICAgIC0gRG9uJ3QgSXNzdWUgSW50ZXJuYWwgRkZEQyBDb21tYW5kIGlmIHRoZXJlIGFyZSBBY3RpdmUgQ29tbWFuZHMgCisgICAgICAgICAgICAgICAgIC0gQ2xvc2UgV2luZG93IGZvciBnZXR0aW5nIHRvbyBtYW55IElPQ1RMJ3MgYWN0aXZlIAorICAgICAgICAgICAgICAgICAgIAorICAgICAgICA0LjcyLjAwICAtIEFsbG93IGZvciBhIFNjYXR0ZXItR2F0aGVyIEVsZW1lbnQgdG8gZXhjZWVkIE1BWF9YRkVSIFNpemUgICAgIAorICAgICAgICAKKyAgICAgICAgNC43MS4wMCAgLSBDaGFuZ2UgYWxsIG1lbW9yeSBhbGxvY2F0aW9ucyB0byBub3QgdXNlIEdGUF9ETUEgZmxhZyAKKyAgICAgICAgICAgICAgICAgLSBDb2RlIENsZWFuLVVwIGZvciAyLjQueCBrZXJuZWwgICAgICAKKyAgICAgICAgCisgICAgICAgIDQuNzAuMTUgIC0gRml4IEJyZWFrdXAgZm9yIHZlcnkgbGFyZ2UgKCBub24tU0cgKSByZXF1ZXN0cworICAgICAgICAKKyAgICAgICAgNC43MC4xMyAgLSBEb24ndCByZWxlYXNlIEhBIExvY2sgaW4gaXBzX25leHQoKSB1bnRpbCBTQyB0YWtlbiBvZmYgcXVldWUgIAorICAgICAgICAgICAgICAgICAtIFVucmVnaXN0ZXIgU0NTSSBkZXZpY2UgaW4gaXBzX3JlbGVhc2UoKSAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAtIERvbid0IFNlbmQgQ0RCJ3MgaWYgd2UgYWxyZWFkeSBrbm93IHRoZSBkZXZpY2UgaXMgbm90IHByZXNlbnQgIAorICAgICAgICAgICAgICAgICAKKyAgICAgICAgNC43MC4xMiAgLSBDb3JyZWN0aXZlIGFjdGlvbnMgZm9yIGJhZCBjb250cm9sbGVyICggZHVyaW5nIGluaXRpYWxpemF0aW9uICkKKyAgICAgICAgCisgICAgICAgIDQuNzAuMDkgIC0gVXNlIGEgQ29tbW9uICggTGFyZ2UgQnVmZmVyICkgZm9yIEZsYXNoaW5nIGZyb20gdGhlIEpDUk0gQ0QgICAgCisgICAgICAgICAgICAgICAgIC0gQWRkIElQU1NFTkQgRmxhc2ggU3VwcG9ydCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgIC0gU2V0IFNlbnNlIERhdGEgZm9yIFVua25vd24gU0NTSSBDb21tYW5kICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgIC0gVXNlIFNsb3QgTnVtYmVyIGZyb20gTlZSQU0gUGFnZSA1IAorICAgICAgICAgICAgICAgICAtIFJlc3RvcmUgY2FsbGVyJ3MgRENEQiBTdHJ1Y3R1cmUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICA0LjIwLjE0ICAtIFVwZGF0ZSBwYXRjaCBmaWxlcyBmb3Iga2VybmVsIDIuNC4wLXRlc3Q1CisKKyAgICAgICAgNC4yMC4xMyAgLSBGaXggc29tZSBmYWlsdXJlIGNhc2VzIC8gcmVzZXQgY29kZQorICAgICAgICAgICAgICAgICAtIEhvb2sgaW50byB0aGUgcmVib290X25vdGlmaWVyIHRvIGZsdXNoIHRoZSBjb250cm9sbGVyCisgICAgICAgICAgICAgICAgICAgY2FjaGUKKworICAgICAgICA0LjIwLjAzIC0gUmVuYW1lIHZlcnNpb24gdG8gY29pbmNpZGUgd2l0aCBuZXcgcmVsZWFzZSBzY2hlZHVsZXMKKyAgICAgICAgICAgICAgICAtIFBlcmZvcm1hbmNlIGZpeGVzCisgICAgICAgICAgICAgICAgLSBGaXggdHJ1bmNhdGlvbiBvZiAvcHJvYyBmaWxlcyB3aXRoIGNhdAorICAgICAgICAgICAgICAgIC0gTWVyZ2UgaW4gY2hhbmdlcyB0aHJvdWdoIGtlcm5lbCAyLjQuMHRlc3QxYWMyMQorCisgICAgICAgIDQuMTAuMTMgLSBGaXggZm9yIGR5bmFtaWMgdW5sb2FkIGFuZCBwcm9jIGZpbGUgc3lzdGVtCisKKyAgICAgICAgNC4xMC4wMCAtIEFkZCBzdXBwb3J0IGZvciBTZXJ2ZVJBSUQgNE0vNEwKKworICAgICAgICA0LjAwLjA2IC0gRml4IHRpbWVvdXQgd2l0aCBpbml0aWFsIEZGREMgY29tbWFuZAorCisgICAgICAgIDQuMDAuMDUgLSBSZW1vdmUgd2lzaF9ibG9jayBmcm9tIGluaXQgcm91dGluZQorICAgICAgICAgICAgICAgIC0gVXNlIGxpbnV4L3NwaW5sb2NrLmggaW5zdGVhZCBvZiBhc20vc3BpbmxvY2suaCBmb3Iga2VybmVscworICAgICAgICAgICAgICAgICAgMi4zLjE4IGFuZCBsYXRlcgorICAgICAgICAgICAgICAgIC0gU3luYyB3aXRoIG90aGVyIGNoYW5nZXMgZnJvbSB0aGUgMi4zIGtlcm5lbHMKKworICAgICAgICA0LjAwLjA0IC0gUmVuYW1lIHN0cnVjdHVyZXMvY29uc3RhbnRzIHRvIGJlIHByZWZpeGVkIHdpdGggSVBTXworCisgICAgICAgIDQuMDAuMDMgLSBBZGQgYWx0ZXJuYXRpdmUgcGFzc3RocnUgaW50ZXJmYWNlCisgICAgICAgICAgICAgICAgLSBBZGQgYWJpbGl0eSB0byBmbGFzaCBTZXJ2ZVJBSUQgQklPUworCisgICAgICAgIDQuMDAuMDIgLSBGaXggcHJvYmxlbSB3aXRoIFBUIERDREIgd2l0aCBubyBidWZmZXIKKworICAgICAgICA0LjAwLjAxIC0gQWRkIHN1cHBvcnQgZm9yIEZpcnN0IEZhaWx1cmUgRGF0YSBDYXB0dXJlCisKKyAgICAgICAgNC4wMC4wMCAtIEFkZCBzdXBwb3J0IGZvciBTZXJ2ZVJBSUQgNAorCisgICAgICAgIDMuNjAuMDIgLSBNYWtlIERDREIgZGlyZWN0aW9uIGJhc2VkIG9uIGxvb2t1cCB0YWJsZS4KKyAgICAgICAgICAgICAgICAtIE9ubHkgYWxsb3cgb25lIERDREIgY29tbWFuZCB0byBhIFNDU0kgSUQgYXQgYSB0aW1lLgorCisgICAgICAgIDMuNjAuMDEgLSBSZW1vdmUgYm9ndXMgZXJyb3IgY2hlY2sgaW4gcGFzc3RocnUgcm91dGluZS4KKworICAgICAgICAzLjYwLjAwIC0gQnVtcCBtYXggY29tbWFuZHMgdG8gMTI4IGZvciB1c2Ugd2l0aCBTZXJ2ZVJBSUQKKyAgICAgICAgICAgICAgICAgIGZpcm13YXJlIDMuNjAuCisgICAgICAgICAgICAgICAgLSBDaGFuZ2UgdmVyc2lvbiB0byAzLjYwIHRvIGNvaW5jaWRlIHdpdGggU2VydmVSQUlEIHJlbGVhc2UKKyAgICAgICAgICAgICAgICAgIG51bWJlcmluZy4KKworICAgICAgICAxLjAwLjAwIC0gSW5pdGlhbCBQdWJsaWMgUmVsZWFzZQorICAgICAgICAgICAgICAgIC0gRnVuY3Rpb25hbGx5IGVxdWl2YWxlbnQgdG8gMC45OS4wNQorCisgICAgICAgIDAuOTkuMDUgLSBGaXggYW4gb29wcyBvbiBjZXJ0YWluIHBhc3N0aHJ1IGNvbW1hbmRzCisKKyAgICAgICAgMC45OS4wNCAtIEZpeCByYWNlIGNvbmRpdGlvbiBpbiB0aGUgcGFzc3RocnUgbWVjaGFuaXNtCisgICAgICAgICAgICAgICAgICAtLSB0aGlzIHJlcXVpcmVkIHRoZSBpbnRlcmZhY2UgdG8gdGhlIHV0aWxpdGllcyB0byBjaGFuZ2UKKyAgICAgICAgICAgICAgICAtIEZpeCBlcnJvciByZWNvdmVyeSBjb2RlCisKKyAgICAgICAgMC45OS4wMyAtIE1ha2UgaW50ZXJydXB0IHJvdXRpbmUgaGFuZGxlIGFsbCBjb21wbGV0ZWQgcmVxdWVzdCBvbiB0aGUKKyAgICAgICAgICAgICAgICAgIGFkYXB0ZXIgbm90IGp1c3QgdGhlIGZpcnN0IG9uZQorICAgICAgICAgICAgICAgIC0gTWFrZSBzdXJlIHBhc3N0aHJ1IGNvbW1hbmRzIGdldCB3b2tlbiB1cCBpZiB3ZSBydW4gb3V0IG9mCisgICAgICAgICAgICAgICAgICBTQ0JzCisgICAgICAgICAgICAgICAgLSBTZW5kIGFsbCBvZiB0aGUgY29tbWFuZHMgb24gdGhlIHF1ZXVlIGF0IG9uY2UgcmF0aGVyIHRoYW4KKyAgICAgICAgICAgICAgICAgIG9uZSBhdCBhIHRpbWUgc2luY2UgdGhlIGNhcmQgd2lsbCBzdXBwb3J0IGl0LgorCisgICAgICAgIDAuOTkuMDIgLSBBZGRlZCBzb21lIGFkZGl0aW9uYWwgZGVidWcgc3RhdGVtZW50cyB0byBwcmludCBvdXQKKyAgICAgICAgICAgICAgICAgIGVycm9ycyBpZiBhbiBlcnJvciBvY2N1cnMgd2hpbGUgdHJ5aW5nIHRvIHJlYWQvd3JpdGUKKyAgICAgICAgICAgICAgICAgIHRvIGEgbG9naWNhbCBkcml2ZSAoSVBTX0RFQlVHKS4KKworICAgICAgICAgICAgICAgIC0gRml4ZWQgcmVhZC93cml0ZSBlcnJvcnMgd2hlbiB0aGUgYWRhcHRlciBpcyB1c2luZyBhbgorICAgICAgICAgICAgICAgICAgOEsgc3RyaXBlIHNpemUuCisKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vc2NzaS9DaGFuZ2VMb2cubWVnYXJhaWQgYi9Eb2N1bWVudGF0aW9uL3Njc2kvQ2hhbmdlTG9nLm1lZ2FyYWlkCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE5MzU2YzYKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL3Njc2kvQ2hhbmdlTG9nLm1lZ2FyYWlkCkBAIC0wLDAgKzEsMzQ5IEBACitSZWxlYXNlIERhdGUJOiBUaHUgRmViIDAzIDEyOjI3OjIyIEVTVCAyMDA1IC0gU2Vva21hbm4gSnUgPHNqdUBsc2lsLmNvbT4KK0N1cnJlbnQgVmVyc2lvbgk6IDIuMjAuNC41IChzY3NpIG1vZHVsZSksIDIuMjAuMi41IChjbW0gbW9kdWxlKQorT2xkZXIgVmVyc2lvbgk6IDIuMjAuNC40IChzY3NpIG1vZHVsZSksIDIuMjAuMi40IChjbW0gbW9kdWxlKQorCisxLglNb2RpZmllZCBuYW1lIG9mIHR3byBhdHRyaWJ1dGVzIGluIHNjc2lfaG9zdF90ZW1wbGF0ZS4KKwlPbiBXZWQsIDIwMDUtMDItMDIgYXQgMTA6NTYgLTA1MDAsIEp1LCBTZW9rbWFubiB3cm90ZToKKwk+ICsJLnNkZXZfYXR0cnMJCQk9IG1lZ2FyYWlkX2RldmljZV9hdHRycywKKwk+ICsJLnNob3N0X2F0dHJzCQkJPSBtZWdhcmFpZF9jbGFzc19kZXZpY2VfYXR0cnMsCisKKwlUaGVzZSBhcmUsIHBlcmhhcHMsIHNsaWdodGx5IGNvbmZ1c2luZyBuYW1lcy4KKwlUaGUgdGVybXMgZGV2aWNlIGFuZCBjbGFzc19kZXZpY2UgaGF2ZSB3ZWxsIGRlZmluZWQgbWVhbmluZ3MgaW4gdGhlCisJZ2VuZXJpYyBkZXZpY2UgbW9kZWwsIG5laXRoZXIgb2Ygd2hpY2ggaXMgd2hhdCB5b3UgbWVhbiBoZXJlLgorCVdoeSBub3Qgc2ltcGx5IG1lZ2FyYWlkX3NkZXZfYXR0cnMgYW5kIG1lZ2FyYWlkX3Nob3N0X2F0dHJzPworCisJT3RoZXIgdGhhbiB0aGlzLCBpdCBsb29rcyBmaW5lIHRvIG1lIHRvby4KKworUmVsZWFzZSBEYXRlCTogVGh1IEphbiAyNyAwMDowMTowMyBFU1QgMjAwNSAtIEF0dWwgTXVra2VyIDxhdHVsbUBsc2lsLmNvbT4KK0N1cnJlbnQgVmVyc2lvbgk6IDIuMjAuNC40IChzY3NpIG1vZHVsZSksIDIuMjAuMi41IChjbW0gbW9kdWxlKQorT2xkZXIgVmVyc2lvbgk6IDIuMjAuNC4zIChzY3NpIG1vZHVsZSksIDIuMjAuMi40IChjbW0gbW9kdWxlKQorCisxLglCdW1wIHVwIHRoZSB2ZXJzaW9uIG9mIHNjc2kgbW9kdWxlIGR1ZSB0byBpdHMgY29uZmxpY3QuCisKK1JlbGVhc2UgRGF0ZQk6IFRodSBKYW4gMjEgMDA6MDE6MDMgRVNUIDIwMDUgLSBBdHVsIE11a2tlciA8YXR1bG1AbHNpbC5jb20+CitDdXJyZW50IFZlcnNpb24JOiAyLjIwLjQuMyAoc2NzaSBtb2R1bGUpLCAyLjIwLjIuNSAoY21tIG1vZHVsZSkKK09sZGVyIFZlcnNpb24JOiAyLjIwLjQuMiAoc2NzaSBtb2R1bGUpLCAyLjIwLjIuNCAoY21tIG1vZHVsZSkKKworMS4JUmVtb3ZlIGRyaXZlciBpb2N0bCBmb3IgbG9naWNhbCBkcml2ZSB0byBzY3NpIGFkZHJlc3MgdHJhbnNsYXRpb24gYW5kCisJcmVwbGFjZSB3aXRoIHRoZSBzeXNmcyBhdHRyaWJ1dGUuIFRvIHJlbW92ZSBkcml2ZXMgYW5kIGNoYW5nZQorCWNhcGFjaXR5LCBhcHBsaWNhdGlvbiBzaGFsbCBub3cgdXNlIHRoZSBkZXZpY2UgYXR0cmlidXRlIHRvIGdldCB0aGUKKwlsb2dpY2FsIGRyaXZlIG51bWJlciBmb3IgYSBzY3NpIGRldmljZS4gRm9yIGFkZGluZyBuZXdseSBjcmVhdGVkCisJbG9naWNhbCBkcml2ZXMsIGNsYXNzIGRldmljZSBhdHRyaWJ1dGUgd291bGQgYmUgcmVxdWlyZWQgdG8gdW5pcXVlbHkKKwlpZGVudGlmeSBlYWNoIGNvbnRyb2xsZXIuCisJCS0gQXR1bCBNdWtrZXIgPGF0dWxtQGxzaWwuY29tPgorCisJIkphbWVzLCBJJ3ZlIGJlZW4gdGhpbmtpbmcgYWJvdXQgdGhpcyBhIGxpdHRsZSBtb3JlLCBhbmQgeW91IG1heSBiZSBvbgorCXRvIHNvbWV0aGluZyBoZXJlLiBMZXQgZWFjaCBkcml2ZXIgYWRkIGZpbGVzIGFzIHN1Y2g6IgorCisJCS0gTWF0dCBEb21zY2ggPE1hdHRfRG9tc2NoQGRlbGwuY29tPiwgMTIuMTUuMjAwNAorCQkgbGludXgtc2NzaSBtYWlsaW5nIGxpc3QKKworCisJIlRoZW4sIGlmIHlvdSBzaW1wbHkgcHVibGlzaCB5b3VyIExEIG51bWJlciBhcyBhbiBleHRyYSBwYXJhbWV0ZXIgb2YKKwl0aGUgZGV2aWNlLCB5b3UgY2FuIGxvb2sgdGhyb3VnaCAvc3lzIHRvIGZpbmQgaXQuIgorCisJCS0gSmFtZXMgQm90dG9tbGV5IDxKYW1lcy5Cb3R0b21sZXlAU3RlZWxFeWUuY29tPiwgMDEuMDMuMjAwNQorCQkgbGludXgtc2NzaSBtYWlsaW5nIGxpc3QKKworCisJIkkgZG9uJ3Qgc2VlIHdoeSBub3QgLi4uIGl0J3MgeW91ciBkcml2ZXIsIHlvdSBjYW4gcHVibGlzaCB3aGF0ZXZlcgorCWV4dHJhIGluZm9ybWF0aW9uIHlvdSBuZWVkIGFzIHNjc2lfZGV2aWNlIGF0dHJpYnV0ZXM7IHRoYXQgd2FzIG9uZSBvZgorCXRoZSBkZXNpZ25zIG9mIHRoZSBleHRlbnNpYmxlIGF0dHJpYnV0ZSBzeXN0ZW0uIgorCisJCS0gSmFtZXMgQm90dG9tbGV5IDxKYW1lcy5Cb3R0b21sZXlAU3RlZWxFeWUuY29tPiwgMDEuMDYuMjAwNQorCQkgbGludXgtc2NzaSBtYWlsaW5nIGxpc3QKKworMi4JQWRkIEFNSSBtZWdhcmFpZCBzdXBwb3J0IC0gQnJpYW4gS2luZyA8YnJraW5nQGNoYXJ0ZXIubmV0PgorCQlQQ0lfVkVORE9SX0lEX0FNSSwgUENJX0RFVklDRV9JRF9BTUlfTUVHQVJBSUQzLAorCQlQQ0lfVkVORE9SX0lEX0FNSSwgUENJX1NVQlNZU19JRF9QRVJDM19EQywKKworMy4JTWFrZSBzb21lIGNvZGUgc3RhdGljIC0gQWRyaWFuIEJ1bmsgPGJ1bmtAc3R1c3RhLmRlPgorCURhdGU6CU1vbiwgMTUgTm92IDIwMDQgMDM6MTQ6NTcgKzAxMDAKKworCVRoZSBwYXRjaCBiZWxvdyBtYWtlcyBzb21lIG5lZWRsZXNzbHkgZ2xvYmFsIGNvZGUgc3RhdGljLgorCS13YWl0X3F1ZXVlX2hlYWRfdCB3YWl0X3E7CisJK3N0YXRpYyB3YWl0X3F1ZXVlX2hlYWRfdCB3YWl0X3E7CisKKwlTaWduZWQtb2ZmLWJ5OiBBZHJpYW4gQnVuayA8YnVua0BzdHVzdGEuZGU+CisKKzQuCUFkZGVkIE5FQyBST01CIHN1cHBvcnQgLSBORUMgTWVnYVJBSUQgUENJIEV4cHJlc3MgUk9NQiBjb250cm9sbGVyCisJCVBDSV9WRU5ET1JfSURfTFNJX0xPR0lDLCBQQ0lfREVWSUNFX0lEX01FR0FSQUlEX05FQ19ST01CXzJFLAorCQlQQ0lfU1VCU1lTX0lEX05FQywgUENJX1NVQlNZU19JRF9NRUdBUkFJRF9ORUNfUk9NQl8yRSwKKworNS4JRml4ZWQgVGFwZSBkcml2ZSBpc3N1ZSA6IEZvciBhbnkgRGlyZWN0IENEQiBjb21tYW5kIHRvIHBoeXNpY2FsIGRldmljZQorCWluY2x1ZGluZyB0YXBlLCB0aW1lb3V0IHZhbHVlIHNldCBieSBkcml2ZXIgd2FzIDEwIG1pbnV0ZXMuIFdpdGggdGhpcyAKKwl2YWx1ZSwgbW9zdCBvZiBjb21tYW5kIHdpbGwgcmV0dXJuIHdpdGhpbiB0aW1lb3V0LiBIb3dldmVyLCBmb3IgdGhvc2UKKwljb21tYW5kIGxpa2UgRVJBU0Ugb3IgRk9STUFULCBpdCB0YWtlcyBtb3JlIHRoYW4gYW4gaG91ciBkZXBlbmRzIG9uCisJY2FwYWNpdHkgb2YgdGhlIGRldmljZSBhbmQgdGhlIGNvbW1hbmQgY291bGQgYmUgdGVybWluYXRlZCBiZWZvcmUgaXQgCisJY29tcGxldGVzLgorCVRvIGFkZHJlc3MgdGhpcyBpc3N1ZSwgdGhlICd0aW1lb3V0JyBmaWVsZCBpbiB0aGUgRENEQiBjb21tYW5kIHdpbGwgCisJaGF2ZSBOTyBUSU1FT1VUIChpLmUuLCA0KSB2YWx1ZSBhcyBpdHMgdGltZW91dCBvbiBEQ0RCIGNvbW1hbmQuCisKKworCitSZWxlYXNlIERhdGUJOiBUaHUgRGVjICA5IDE5OjEwOjIzIEVTVCAyMDA0CisJLSBTcmVlbml2YXMgQmFnYWxrb3RlIDxzcmVlbmliQGxzaWwuY29tPgorCitDdXJyZW50IFZlcnNpb24JOiAyLjIwLjQuMiAoc2NzaSBtb2R1bGUpLCAyLjIwLjIuNCAoY21tIG1vZHVsZSkKK09sZGVyIFZlcnNpb24JOiAyLjIwLjQuMSAoc2NzaSBtb2R1bGUpLCAyLjIwLjIuMyAoY21tIG1vZHVsZSkKKworaS4JSW50cm9kdWNlZCBkcml2ZXIgaW9jdGwgdGhhdCByZXR1cm5zIHNjc2kgYWRkcmVzcyBmb3IgYSBnaXZlbiBsZC4KKwkKKwkiV2h5IGNhbid0IHRoZSBleGlzdGluZyBzeXNmcyBpbnRlcmZhY2VzIGJlIHVzZWQgdG8gZG8gdGhpcz8iCisJCS0gQnJpYW4gS2luZyAoYnJraW5nQHVzLmlibS5jb20pCisJCisJIkkndmUgbG9va2VkIGludG8gc29sdmluZyB0aGlzIGFub3RoZXIgd2F5LCBidXQgSSBjYW5ub3Qgc2VlIGhvdworCXRvIGdldCB0aGlzIGRyaXZlci1wcml2YXRlIG1hcHBpbmcgb2YgbG9naWNhbCBkcml2ZSBudW1iZXItPiBIQ1RMCisJd2l0aG91dCBwdXR0aW5nIGNvZGUgc29tZXRoaW5nIGxpa2UgdGhpcyBpbnRvIHRoZSBkcml2ZXIuIgorCisJIi4uLmFuZCBieSBwcm92aWRpbmcgYSBtYXBwaW5nIGEgZnVuY3Rpb24gdG8gdXNlcnNwYWNlLCB0aGUgZHJpdmVyCisJaXMgZnJlZSB0byBjaGFuZ2UgaXRzIG1hcHBpbmcgYWxnb3JpdGhtIGluIHRoZSBmdXR1cmUgaWYgbmVjZXNzYXJ5IC4uIgorCQktIE1hdHQgRG9tc2NoIChNYXR0X0RvbXNjaEBkZWxsLmNvbSkKKworUmVsZWFzZSBEYXRlCTogVGh1IERlYyAgOSAxOTowMjoxNCBFU1QgMjAwNCAtIFNyZWVuaXZhcyBCYWdhbGtvdGUgPHNyZWVuaWJAbHNpbC5jb20+CisKK0N1cnJlbnQgVmVyc2lvbgk6IDIuMjAuNC4xIChzY3NpIG1vZHVsZSksIDIuMjAuMi4zIChjbW0gbW9kdWxlKQorT2xkZXIgVmVyc2lvbgk6IDIuMjAuNC4xIChzY3NpIG1vZHVsZSksIDIuMjAuMi4yIChjbW0gbW9kdWxlKQorCitpLglGaXggYSBidWcgaW4ga2lvYydzIGRtYSBidWZmZXIgZGVhbGxvY2F0aW9uCisKK1JlbGVhc2UgRGF0ZQk6IFRodSBOb3YgIDQgMTg6MjQ6NTYgRVNUIDIwMDQgLSBTcmVlbml2YXMgQmFnYWxrb3RlIDxzcmVlbmliQGxzaWwuY29tPgorCitDdXJyZW50IFZlcnNpb24JOiAyLjIwLjQuMSAoc2NzaSBtb2R1bGUpLCAyLjIwLjIuMiAoY21tIG1vZHVsZSkKK09sZGVyIFZlcnNpb24JOiAyLjIwLjQuMCAoc2NzaSBtb2R1bGUpLCAyLjIwLjIuMSAoY21tIG1vZHVsZSkKKworaS4JSGFuZGxlIElPQ1RMIGNtZCB0aW1lb3V0cyBtb3JlIHByb3Blcmx5LgorCitpaS4JcGNpX2RtYV9zeW5jX3tzZyxzaW5nbGV9X2Zvcl9jcHUgd2FzIGludHJvZHVjZWQgaW50byBtZWdhcmFpZF9tYm94CisJaW5jb3JyZWN0bHkgKGluc3RlYWQgb2YgX2Zvcl9kZXZpY2UpLiBDaGFuZ2VkIHRvIGFwcHJvcHJpYXRlIAorCXBjaV9kbWFfc3luY197c2csc2luZ2xlfV9mb3JfZGV2aWNlLgorCitSZWxlYXNlIERhdGUJOiBXZWQgT2N0IDA2IDExOjE1OjI5IEVEVCAyMDA0IC0gU3JlZW5pdmFzIEJhZ2Fsa290ZSA8c3JlZW5pYkBsc2lsLmNvbT4KK0N1cnJlbnQgVmVyc2lvbgk6IDIuMjAuNC4wIChzY3NpIG1vZHVsZSksIDIuMjAuMi4xIChjbW0gbW9kdWxlKQorT2xkZXIgVmVyc2lvbgk6IDIuMjAuNC4wIChzY3NpIG1vZHVsZSksIDIuMjAuMi4wIChjbW0gbW9kdWxlKQorCitpLglSZW1vdmUgQ09ORklHX0NPTVBBVCBhcm91bmQgcmVnaXN0ZXJfaW9jdGwzMl9jb252ZXJzaW9uCisKK1JlbGVhc2UgRGF0ZQk6IE1vbiBTZXAgMjcgMjI6MTU6MDcgRURUIDIwMDQgLSBBdHVsIE11a2tlciA8YXR1bG1AbHNpbC5jb20+CitDdXJyZW50IFZlcnNpb24JOiAyLjIwLjQuMCAoc2NzaSBtb2R1bGUpLCAyLjIwLjIuMCAoY21tIG1vZHVsZSkKK09sZGVyIFZlcnNpb24JOiAyLjIwLjMuMSAoc2NzaSBtb2R1bGUpLCAyLjIwLjIuMCAoY21tIG1vZHVsZSkKKworaS4JRml4IGRhdGEgY29ycnVwdGlvbi4gQmVjYXVzZSBvZiBhIHR5cG8gaW4gdGhlIGRyaXZlciwgdGhlIElPIHBhY2tldHMKKwl3ZXJlIHdyb25nbHkgc2hhcmVkIGJ5IHRoZSBpb2N0bCBwYXRoLiBUaGlzIGNhdXNlcyBhIHdob2xlIElPIGNvbW1hbmQKKwl0byBiZSByZXBsYWNlZCBieSBhbiBpbmNvbWluZyBpb2N0bCBjb21tYW5kLgorCitSZWxlYXNlIERhdGUJOiBUdWUgQXVnIDI0IDA5OjQzOjM1IEVEVCAyMDA0IC0gQXR1bCBNdWtrZXIgPGF0dWxtQGxzaWwuY29tPgorQ3VycmVudCBWZXJzaW9uCTogMi4yMC4zLjEgKHNjc2kgbW9kdWxlKSwgMi4yMC4yLjAgKGNtbSBtb2R1bGUpCitPbGRlciBWZXJzaW9uCTogMi4yMC4zLjAgKHNjc2kgbW9kdWxlKSwgMi4yMC4yLjAgKGNtbSBtb2R1bGUpCisKK2kuCUZ1bmN0aW9uIHJlb3JkZXJpbmcgc28gdGhhdCBpbmxpbmUgZnVuY3Rpb25zIGFyZSBkZWZpbmVkIGJlZm9yZSB0aGV5CisJYXJlIGFjdHVhbGx5IHVzZWQuIEl0IGlzIG5vdyBtYW5kYXRvcnkgZm9yIEdDQyAzLjQuMSAoY3VycmVudCBzdGFibGUpCisKKwlEZWNsYXJlIHNvbWUgaGVhdnktd2VpZ2h0IGZ1bmN0aW9ucyB0byBiZSBub24taW5saW5lZCwKKwltZWdhcmFpZF9tYm94X2J1aWxkX2NtZCwgbWVnYXJhaWRfbWJveF9ydW5wZW5kcSwKKwltZWdhcmFpZF9tYm94X3ByZXBhcmVfcHRocnUsIG1lZ2FyYWlkX21ib3hfcHJlcGFyZV9lcHRocnUsCisJbWVnYXJhaWRfYnVzeXdhaXRfbWJveAorCisJCS0gQW5kcmV3IE1vcnRvbiA8YWtwbUBvc2RsLm9yZz4sIDA4LjE5LjIwMDQKKwkJbGludXgtc2NzaSBtYWlsaW5nIGxpc3QKKworCSJTb21ldGhpbmcgZWxzZSB0byBjbGVhbiB1cCBhZnRlciBpbmNsdXNpb246IGV2ZXJ5IGluc3RhbmNlIG9mIGFuCisJaW5saW5lIGZ1bmN0aW9uIGlzIGFjdHVhbGx5IHJlbmRlcmVkIGFzIGEgZnVsbCBmdW5jdGlvbiBjYWxsLCBiZWNhdXNlCisJdGhlIGZ1bmN0aW9uIGlzIGFsd2F5cyB1c2VkIGJlZm9yZSBpdCBpcyBkZWZpbmVkLiAgQXR1bCwgcGxlYXNlCisJcmUtYXJyYW5nZSB0aGUgY29kZSB0byBlbGltaW5hdGUgdGhlIG5lZWQgZm9yIG1vc3QgKGFsbCkgb2YgdGhlCisJZnVuY3Rpb24gcHJvdG90eXBlcyBhdCB0aGUgdG9wIG9mIGVhY2ggZmlsZSwgYW5kIGRlZmluZSAobm90IGp1c3QKKwlkZWNsYXJlIHdpdGggYSBwcm90b3R5cGUpIGVhY2ggaW5saW5lIGZ1bmN0aW9uIGJlZm9yZSBpdHMgZmlyc3QgdXNlIgorCisJCS0gTWF0dCBEb21zY2ggPE1hdHRfRG9tc2NoQGRlbGwuY29tPiwgMDcuMjcuMjAwNAorCQlsaW51eC1zY3NpIG1haWxpbmcgbGlzdAorCisKK2lpLglEaXNwbGF5IGVsYXBzZWQgdGltZSAoY291bnRkb3duKSB3aGlsZSB3YWl0aW5nIGZvciBGVyB0byBib290LgorCitpaWkuCU1vZHVsZSBjb21waWxhdGlvbiByZW9yZGVyIGluIE1ha2VmaWxlIHNvIHRoYXQgdW5yZXNvbHZlZCBzeW1ib2xzIGRvCisJbm90IG9jY3VyIHdoZW4gZHJpdmVyIGlzIGNvbXBpbGVkIG5vbi1tb2R1bGFyLgorCisJCVBhdHJpY2sgSi4gTG9QcmVzdGkgPHBhdGxAdXNlcnMuc291cmNlZm9yZ2UubmV0PiwgOC4yMi4yMDA0CisJCWxpbnV4LXNjc2kgbWFpbGluZyBsaXN0CisKKworUmVsZWFzZSBEYXRlCTogVGh1IEF1ZyAxOSAwOTo1ODozMyBFRFQgMjAwNCAtIEF0dWwgTXVra2VyIDxhdHVsbUBsc2lsLmNvbT4KK0N1cnJlbnQgVmVyc2lvbgk6IDIuMjAuMy4wIChzY3NpIG1vZHVsZSksIDIuMjAuMi4wIChjbW0gbW9kdWxlKQorT2xkZXIgVmVyc2lvbgk6IDIuMjAuMi4wIChzY3NpIG1vZHVsZSksIDIuMjAuMS4wIChjbW0gbW9kdWxlKQorCitpLglXaGVuIGNvcHlpbmcgdGhlIG1haWxib3ggcGFja2V0cywgY29weSBvbmx5IGZpcnN0IDE0IGJ5dGVzIChmb3IgMzItYml0CisJbWFpbGJveGVzKSBhbmQgb25seSBmaXJzdCAyMiBieXRlcyAoZm9yIDY0LWJpdCBtYWlsYm94ZXMpLiBUaGlzIGlzIHRvCisJYXZvaWQgZ2V0dGluZyB0aGUgc3RhbGUgdmFsdWVzIGZvciBidXN5IGJpdC4gV2Ugd2FudCB0byBzZXQgdGhlIGJ1c3kKKwliaXQganVzdCBiZWZvcmUgaXNzdWluZyBjb21tYW5kIHRvIHRoZSBGVy4KKworaWkuCUluIHRoZSByZXNldCBoYW5kbGluZywgaWYgdGhlIHJlc2V0ZWQgY29tbWFuZCBpcyBub3Qgb3duZWQgYnkgdGhlCisJZHJpdmVyLCBkbyBub3QgKHdyb25nbHkpIHByaW50IGluZm9ybWF0aW9uIGZvciB0aGUgImF0dGFjaGVkIiBkcml2ZXIKKwlwYWNrZXQuCisKK2lpaS4JSGF2ZSBleHRlbmRlZCB3YWl0IHdoZW4gaXNzdWluZyBjb21tYW5kIGluIHN5bmNocm9ub3VzIG1vZGUuIFRoaXMgaXMKKwlyZXF1aXJlZCBmb3IgdGhlIGNhc2VzIHdoZXJlIHRoZSBvcHRpb24gUk9NIGlzIGRpc2FibGVkIGFuZCB0aGVyZSBpcworCW5vIEJJT1MgdG8gc3RhcnQgdGhlIGNvbnRyb2xsZXIuIFRoZSBGVyBzdGFydHMgdG8gYm9vdCBhZnRlciByZWNlaXZpbmcKKwl0aGUgZmlyc3QgY29tbWFuZCBmcm9tIHRoZSBkcml2ZXIuIFRoZSBjdXJyZW50IGRyaXZlciBoYXMgMSBzZWNvbmQKKwl0aW1lb3V0IGZvciB0aGUgc3luY2hyb25vdXMgY29tbWFuZHMsIHdoaWNoIGlzIGZhciBsZXNzIHRoYW4gd2hhdCBpcworCWFjdHVhbGx5IHJlcXVpcmVkLiBXZSBub3cgd2FpdCB1cCB0byBNQk9YX1JFU0VUX1RJTUUgKDE4MCBzZWNvbmRzKSBmb3IKKwlGVyBib290IHByb2Nlc3MuCisKK2l2LglJbiBtZWdhcmFpZF9tYm94X3Byb2R1Y3RfaW5mbywgY2xlYXIgdGhlIG1haWxib3ggY29udGVudHMgY29tcGxldGVseQorCWJlZm9yZSBwcmVwYXJpbmcgdGhlIGNvbW1hbmQgZm9yIGlucXVpcnkzLiBUaGlzIGlzIHRvIGVuc3VyZSB0aGF0IHRoZQorCUZXIGRvZXMgbm90IGdldCBqdW5rIHZhbHVlcyBpbiB0aGUgY29tbWFuZC4KKwordi4JRG8gYXdheSB3aXRoIHRoZSByZWR1bmRhbnQgTFNJX0NPTkZJR19DT01QQVQgcmVkZWZpbml0aW9uIGZvcgorCUNPTkZJR19DT01QQVQuIFJlcGxhY2UgPGFzbS9pb2N0bDMyLmg+IHdpdGggPGxpbnV4L2lvY3RsMzIuaD4KKworCQktIEphbWVzIEJvdHRvbWxleSA8SmFtZXMuQm90dG9tbGV5QFN0ZWVsRXllLmNvbT4sIDA4LjE3LjIwMDQKKwkJIGxpbnV4LXNjc2kgbWFpbGluZyBsaXN0CisKK3ZpLglBZGQgc3VwcG9ydCBmb3IgNjQtYml0IGFwcGxpY2F0aW9ucy4gQ3VycmVudCBkcml2ZXJzIGFzc3VtZSBvbmx5CisJMzItYml0IGFwcGxpY2F0aW9ucywgZXZlbiBvbiA2NC1iaXQgcGxhdGZvcm1zLiBVc2UgdGhlICJkYXRhIiBhbmQKKwkiYnVmZmVyIiBmaWVsZHMgb2YgdGhlIG1pbWRfdCBzdHJ1Y3R1cmUsIGluc3RlYWQgb2YgZW1iZWRkZWQgMzItYml0CisJYWRkcmVzc2VzIGluIGFwcGxpY2F0aW9uIG1haWxib3ggYW5kIHBhc3N0aHJ1IHN0cnVjdHVyZXMuCisKK3ZpaS4JTW92ZSB0aGUgZnVuY3Rpb24gZGVjbGFyYXRpb25zIGZvciB0aGUgbWFuYWdlbWVudCBtb2R1bGUgZnJvbQorCW1lZ2FyYWlkX21tLmggdG8gbWVnYXJhaWRfbW0uYworCisJCS0gQW5kcmV3IE1vcnRvbiA8YWtwbUBvc2RsLm9yZz4sIDA4LjE5LjIwMDQKKwkJbGludXgtc2NzaSBtYWlsaW5nIGxpc3QKKwordmlpaS4JQ2hhbmdlIGRlZmF1bHQgdmFsdWVzIGZvciBNRUdBUkFJRF9ORVdHRU4sIE1FR0FSQUlEX01NLCBhbmQKKwlNRUdBUkFJRF9NQUlMQk9YIHRvICduJyBpbiBLY29uZmlnLm1lZ2FyYWlkCisKKwkJLSBBbmRyZXcgTW9ydG9uIDxha3BtQG9zZGwub3JnPiwgMDguMTkuMjAwNAorCQlsaW51eC1zY3NpIG1haWxpbmcgbGlzdAorCitpeC4JcmVwbGFjZSB1ZGVsYXkgd2l0aCBtc2xlZXAKKworeC4JVHlwb3MgY29ycmVjdGVkIGluIGNvbW1lbnRzIGFuZCB3aGl0ZXNwYWNlIGFkanVzdG1lbnRzLCBleHBsaWNpdAorCWdyb3VwaW5nIG9mIGV4cHJlc3Npb25zLgorCisKK1JlbGVhc2UgRGF0ZQk6IEZyaSBKdWwgMjMgMTU6MjI6MDcgRURUIDIwMDQgLSBBdHVsIE11a2tlciA8YXR1bG1AbHNpbC5jb20+CitDdXJyZW50IFZlcnNpb24JOiAyLjIwLjIuMCAoc2NzaSBtb2R1bGUpLCAyLjIwLjEuMCAoY21tIG1vZHVsZSkKK09sZGVyIFZlcnNpb24JOiAyLjIwLjEuMCAoc2NzaSBtb2R1bGUpLCAyLjIwLjAuMCAoY21tIG1vZHVsZSkKKworaS4JQWRkIFBDSSBpZHMgZm9yIEFjZXIgUk9NQiAyRSBzb2x1dGlvbgorCitpaS4JQWRkIFBDSSBpZHMgZm9yIEk0CisKK2lpaS4JVHlwbyBjb3JyZWN0ZWQgZm9yIHN1YnN5cyBpZCBmb3IgbWVnYXJhaWQgc2F0YSAzMDAtNHgKKworaXYuCVJlbW92ZSB5aWVsZCgpIHdoaWxlIG1haWxib3ggaGFuZHNoYWtlIGluIHN5bmNocm9ub3VzIGNvbW1hbmRzCisKKworCSJNeSBvdGhlciBtYWluIGdyaXBlIGlzIHRoaW5ncyBsaWtlIHRoaXM6CisKKwkrCS8vIHdhaXQgZm9yIG1heGltdW0gMSBzZWNvbmQgZm9yIHN0YXR1cyB0byBwb3N0CisJKwlmb3IgKGkgPSAwOyBpIDwgNDAwMDA7IGkrKykgeworCSsJCWlmIChtYm94LT5udW1zdGF0dXMgIT0gMHhGRikgYnJlYWs7CisJKwkJdWRlbGF5KDI1KTsgeWllbGQoKTsKKwkrCX0KKworCXdoaWNoIGxpdHRlciB0aGUgZHJpdmVyLiAgVXNlIG9mIHlpZWxkKCkgaW4gZHJpdmVycyBpcyBkZXByZWNhdGVkLiIKKworCQktIEphbWVzIEJvdHRvbWxleSA8SmFtZXMuQm90dG9tbGV5QFN0ZWVsRXllLmNvbT4sIDA3LjE0LjIwMDQKKwkJIGxpbnV4LXNjc2kgbWFpbGluZyBsaXN0CisKK3YuCVJlbW92ZSByZWR1bmRhbnQgX19tZWdhcmFpZF9idXN5d2FpdF9tYm94IHJvdXRpbmUKKwordmkuCUZpeCBidWcgaW4gdGhlIG1hbmFnbWVudCBtb2R1bGUsIHdoaWNoIGNhdXNlcyBhIHN5c3RlbSBsb2NrdXAgd2hlbiB0aGUKKwlJTyBtb2R1bGUgaXMgbG9hZGVkIGFuZCB0aGVuIHVubG9hZGVkLCBmb2xsb3dlZCBieSBleGVjdXRpbmcgYW55CisJbWFuYWdlbWVudCB1dGlsaXR5LiBUaGUgY3VycmVudCB2ZXJzaW9uIG9mIG1hbmFnZW1lbnQgbW9kdWxlIGRvZXMgbm90CisJaGFuZGxlIHRoZSBhZGFwdGVyIHVucmVnaXN0ZXIgcHJvcGVybHkuCisKKwlTcGVjaWZpY2FsbHksIGl0IHN0aWxsIGtlZXBzIGEgcmVmZXJlbmNlIHRvIHRoZSB1bnJlZ2lzdGVyZWQKKwljb250cm9sbGVycy4gVG8gYXZvaWQgdGhpcywgdGhlIHN0YXRpYyBhcnJheSBhZGFwdGVycyBoYXMgYmVlbgorCXJlcGxhY2VkIGJ5IGEgZHluYW1pYyBsaXN0LCB3aGljaCBnZXRzIHVwZGF0ZWQgZXZlcnkgdGltZSBhbiBhZGFwdGVyCisJaXMgYWRkZWQgb3IgcmVtb3ZlZC4KKworCUFsc28sIGR1cmluZyB1bnJlZ2lzdHJhdGlvbiBvZiB0aGUgSU8gbW9kdWxlLCB0aGUgcmVzb3VyY2VzIGFyZQorCW5vdyByZWxlYXNlZCBpbiB0aGUgZXhhY3QgcmV2ZXJzZSBvcmRlciBvZiB0aGUgYWxsb2NhdGlvbiB0aW1lCisJc2VxdWVuY2UuCisKKworUmVsZWFzZSBEYXRlCTogRnJpIEp1biAyNSAxODo1ODo0MyBFRFQgMjAwNCAtIEF0dWwgTXVra2VyIDxhdHVsbUBsc2lsLmNvbT4KK0N1cnJlbnQgVmVyc2lvbgk6IDIuMjAuMS4wCitPbGRlciBWZXJzaW9uCTogbWVnYXJhaWQgMi4yMC4wLjEKKworaS4JU3RhbGUgbGlzdCBwb2ludGVyIGluIGFkYXB0ZXIgY2F1c2VzIGtlcm5lbCBwYW5pYyB3aGVuIG1vZHVsZQorCW1lZ2FyYWlkX21ib3ggaXMgdW5sb2FkZWQKKworCitSZWxlYXNlIERhdGUJOiBUaHUgSnVuIDI0IDIwOjM3OjExIEVEVCAyMDA0IC0gQXR1bCBNdWtrZXIgPGF0dWxtQGxzaWwuY29tPgorQ3VycmVudCBWZXJzaW9uCTogMi4yMC4wLjEKK09sZGVyIFZlcnNpb24JOiBtZWdhcmFpZCAyLjIwLjAuMDAKKworaS4JTW9kdWxlcyBhcmUgbm90ICd5JyBieSBkZWZhdWx0LCBidXQgZGVwZW5kIG9uIGN1cnJlbnQgZGVmaW5pdGlvbiBvZgorCVNDU0kgJiBQQ0kuCisKK2lpLglSZWR1bmRhbnQgc3RydWN0dXJlIG1yYWlkX2RyaXZlcl90IHJlbW92ZWQuCisKK2lpaS4JTWlzY2VsbGFuZW91cyBpbmRlbnRhdGlvbiBhbmQgZ290by9sYWJlbCBmaXhlcy4KKwkJLSBDaHJpc3RvcGggSGVsbHdpZyA8aGNoQGluZnJhZGVhZC5vcmc+LCAwNi4yNC4yMDA0IGxpbnV4LXNjc2kKKworaXYuCXNjc2lfaG9zdF9wdXQoKSwgZG8ganVzdCBiZWZvcmUgY29tcGxldGluZyBIQkEgc2h1dGRvd24uCisKKworCitSZWxlYXNlIERhdGUJOiBNb24gSnVuIDIxIDE5OjUzOjU0IEVEVCAyMDA0IC0gQXR1bCBNdWtrZXIgPGF0dWxtQGxzaWwuY29tPgorQ3VycmVudCBWZXJzaW9uCTogMi4yMC4wLjAKK09sZGVyIFZlcnNpb24JOiBtZWdhcmFpZCAyLjIwLjAucmMyIGFuZCAyLjAwLjMKKworaS4JSW5kZXBlbmRlbnQgbW9kdWxlIHRvIGludGVyYWN0IHdpdGggdXNlcmxhbmQgYXBwbGljYXRpb25zIGFuZAorCW11bHRpcGxleCBjb21tYW5kIHRvIGxvdyBsZXZlbCBSQUlEIG1vZHVsZShzKS4KKworCSJTaGFyZWQgY29kZSBpbiBhIHRoaXJkIG1vZHVsZSwgYSAibGlicmFyeSBtb2R1bGUiLCBpcyBhbiBhY2NlcHRhYmxlCisJc29sdXRpb24uIG1vZHByb2JlIGF1dG9tYXRpY2FsbHkgbG9hZHMgZGVwZW5kZW50IG1vZHVsZXMsIHNvIHVzZXJzCisJcnVubmluZyAibW9kcHJvYmUgZHJpdmVyMSIgb3IgIm1vZHByb2JlIGRyaXZlcjIiIHdvdWxkIGF1dG9tYXRpY2FsbHkKKwlsb2FkIHRoZSBzaGFyZWQgbGlicmFyeSBtb2R1bGUuIgorCisJCS0gSmVmZiBHYXJ6aWsgPGpnYXJ6aWtAcG9ib3guY29tPiAwMi4yNS4yMDA0IExLTUwKKworCSJBcyBKZWZmIGhpbnRlZCwgaWYgeW91ciB1c2Vyc3BhY2U8LT5kcml2ZXIgQVBJIGlzIGNvbnNpc3RlbnQgYmV0d2VlbgorCXlvdXIgbmV3IE1QVC1iYXNlZCBSQUlEIGNvbnRyb2xsZXJzIGFuZCB5b3VyIGV4aXN0aW5nIG1lZ2FyYWlkIGRyaXZlciwKKwl0aGVuIHBlcmhhcHMgeW91IG5lZWQgYSBzaW5nbGUgc21hbGwgaGVscGVyIG1vZHVsZSAobHNpaW9jdGwgb3Igc29tZQorCWJldHRlciBuYW1lKSwgbG9hZGVkIGJ5IGJvdGggbXB0cmFpZCBhbmQgbWVnYXJhaWQgYXV0b21hdGljYWxseSwgd2hpY2gKKwloYW5kbGVzIHJlZ2lzdGVyaW5nIHRoZSAvZGV2L21lZ2FyYWlkIG5vZGUgZHluYW1pY2FsbHkuIEluIHRoaXMgY2FzZSwKKwlib3RoIG1wdHJhaWQgYW5kIG1lZ2FyYWlkIHdvdWxkIHJlZ2lzdGVyIHdpdGggbHNpaW9jdGwgZm9yIGVhY2gKKwlhZGFwdGVyIGRpc2NvdmVyZWQsIGFuZCBsc2lpb2N0bCB3b3VsZCBlc3NlbnRpYWxseSBiZSBhIHN3aXRjaCwKKwlyZWRpcmVjdGluZyB1c2Vyc3BhY2UgdG9vbCBpb2N0bHMgdG8gdGhlIGFwcHJvcHJpYXRlIGRyaXZlci4iCisKKwkJLSBNYXR0IERvbXNjaCA8TWF0dF9Eb21zY2hAZGVsbC5jb20+IDAyLjI1LjIwMDQgTEtNTAorCitpaS4JUmVtb3ZlIEM5OSBpbml0aWFsaXphdGlvbnMgZnJvbSBwY2lfZGV2aWNlIGlkLgorCisJInBjaV9pZF90YWJsZV9nIHdvdWxkIGJlIG11Y2ggbW9yZSByZWFkYWJsZSB3aGVuIG5vdCB1c2luZyBDOTkKKwlpbml0aWFsaXplcnMuCisJUENJIHRhYmxlIGRvZXNuJ3QgY2hhbmdlLCB0aGVyZSdzIGxvdHMgb2YgdXNlcnMgdGhhdCBwcmVmZXIgdGhlIG1vcmUKKwlyZWFkYWJsZSB2YXJpYW50LiAgQW5kIGl0J3MgcmVhbGx5IGZhciBsZXNzIGFuZCBtdWNoIGVhc2llciB0byBncm9rCisJbGluZXMgd2l0aG91dCBDOTkgaW5pdGlhbGl6ZXJzLiIKKworCQktIENocmlzdG9waCBIZWxsd2lnIDxoY2hAaW5mcmFkZWFkLm9yZz4sIDA1LjI4LjIwMDQgbGludXgtc2NzaQorCitpaWkuCU1hbnkgZml4ZXMgYXMgc3VnZ2VzdGVkIGJ5IENocmlzdG9waCBIZWxsd2lnIDxoY2hAaW5mcmFkZWFkLm9yZz4gb24KKwlsaW51eC1zY3NpLCAwNS4yOC4yMDA0CisKK2l2LglXZSBub3cgc3VwcG9ydCB1cCB0byAzMiBwYXJhbGxlbCBpb2N0bCBjb21tYW5kcyBpbnN0ZWFkIG9mIGN1cnJlbnQgMS4KKwlUaGVyZSBpcyBhIGNvbnNjaW91cyBlZmZvcnQgdG8gbGV0IG1lbW9yeSBhbGxvY2F0aW9uIG5vdCBmYWlsIGZvciBpb2N0bAorCWNvbW1hbmRzLgorCit2LglEbyBhd2F5IHdpdGggaW50ZXJuYWwgbWVtb3J5IG1hbmFnZW1lbnQuIFVzZSBwY2lfcG9vbF8oY3JlYXRlfGFsbG9jKQorCWluc3RlYWQuCisKK3ZpLglLaWxsIHRhc2tsZXQgd2hlbiB1bmxvYWRpbmcgdGhlIGRyaXZlci4KKwordmlpLglEbyBub3QgdXNlICJob3N0X2xvY2snLCBkcml2ZXIgaGFzIGZpbmUtZ3JhaW4gbG9ja3Mgbm93IHRvIHByb3RlY3QgYWxsCisJZGF0YSBzdHJ1Y3R1cmVzLgorCit2aWlpLglPcHRpbWl6ZSB0aGUgYnVpbGQgc2NhdHRlci1nYXRoZXIgbGlzdCByb3V0aW5lLiBUaGUgY2FsbGVycyBhbHJlYWR5CisJa25vdyB0aGUgZGF0YSB0cmFuc2ZlciBhZGRyZXNzIGFuZCBsZW5ndGguCisKK2l4LglCZXR0ZXIgaW1wbGVtZW50YXRpb24gb2YgZXJyb3IgaGFuZGxpbmcgYW5kIHJlY292ZXJ5LiBEcml2ZXIgbm93CisJcGVyZm9ybXMgZXh0ZW5kZWQgZXJyb3JzIHJlY292ZXJ5IGZvciBpbnN0YW5jZXMgbGlrZSBzY3NpIGNhYmxlIHB1bGwuCisKK3guCURpc2Fzc29jaWF0ZSB0aGUgbWFuYWdlbWVudCBjb21tYW5kcyB3aXRoIGFuIG92ZXJsYWlkIHNjc2kgY29tbWFuZC4KKwlEcml2ZXIgbm93IHRyZWF0cyB0aGUgbWFuYWdlbWVudCBwYWNrZXRzIGFzIHNwZWNpYWwgcGFja2V0cyBhbmQgaGFzIGEKKwlkZWRpY2F0ZWQgY2FsbGJhY2sgcm91dGluZS4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vc2NzaS9DaGFuZ2VMb2cubmNyNTNjOHh4IGIvRG9jdW1lbnRhdGlvbi9zY3NpL0NoYW5nZUxvZy5uY3I1M2M4eHgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2QwM2U5ZAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vc2NzaS9DaGFuZ2VMb2cubmNyNTNjOHh4CkBAIC0wLDAgKzEsNDk1IEBACitTYXQgTWF5IDEyIDEyOjAwIDIwMDEgR2VyYXJkIFJvdWRpZXIgKGdyb3VkaWVyQGNsdWItaW50ZXJuZXQuZnIpCisJKiB2ZXJzaW9uIG5jcjUzYzh4eC0zLjQuM2IKKwktIEVuc3VyZSBMRURDIGJpdCBpbiBHUENOVEwgaXMgY2xlYXJlZCB3aGVuIHJlYWRpbmcgdGhlIE5WUkFNLgorCSAgRml4IHNlbnQgYnkgU3RpZyBUZWxmZXIgPHN0aWdAYXBpLW5ldHdvcmtzLmNvbT4uCisJLSBEZWZpbmUgc2NzaV9zZXRfcGNpX2RldmljZSgpIGFzIG5pbCBmb3Iga2VybmVsIDwgMi40LjQuCisKK01vbiBGZWIgMTIgMjI6MzAgMjAwMSBHZXJhcmQgUm91ZGllciAoZ3JvdWRpZXJAY2x1Yi1pbnRlcm5ldC5mcikKKwkqIHZlcnNpb24gbmNyNTNjOHh4LTMuNC4zCisJLSBDYWxsIHBjaV9lbmFibGVfZGV2aWNlKCkgYXMgQUMgd2FudHMgdGhpcyB0byBiZSBkb25lLgorCS0gR2V0IGJvdGggdGhlIEJBUiBjb29raWVzIGFjdHVhbCBhbmQgUENJIEJBUiB2YWx1ZXMuCisJICAoc2VlIENoYW5nZWxvZy5zeW01M2M4eHggcmV2LiAxLjcuMyBmb3IgZGV0YWlscykKKwktIE1lcmdlIGNoYW5nZXMgZm9yIGxpbnV4LTIuNCB0aGF0IGRlY2xhcmUgdGhlIGhvc3QgdGVtcGxhdGUgCisJICBpbiB0aGUgZHJpdmVyIG9iamVjdCBhbHNvIHdoZW4gdGhlIGRyaXZlciBpcyBzdGF0aWNhbGx5IAorCSAgbGlua2VkIHdpdGggdGhlIGtlcm5lbC4KKworU3VuIFNlcCAyNCAyMTozMCAyMDAwIEdlcmFyZCBSb3VkaWVyIChncm91ZGllckBjbHViLWludGVybmV0LmZyKQorCSogdmVyc2lvbiBuY3I1M2M4eHgtMy40LjIKKwktIFNlZSBDaGFuZ2Vsb2cuc3ltNTNjOHh4LCBkcml2ZXIgdmVyc2lvbiAxLjcuMi4KKworV2VkIEp1bCAyNiAyMzozMCAyMDAwIEdlcmFyZCBSb3VkaWVyIChncm91ZGllckBjbHViLWludGVybmV0LmZyKQorCSogdmVyc2lvbiBuY3I1M2M4eHgtMy40LjEKKwktIFByb3ZpZGUgT3BlbkZpcm1hcmUgcGF0aCB0aHJvdWdoIHRoZSBwcm9jIEZTIG9uIFBQQy4KKwktIFJlbW92ZSB0cmFpbGluZyBhcmd1bWVudCAjMiBmcm9tIGEgY291cGxlIG9mICN1bmRlZnMuCisKK1N1biBKdWwgMDkgMTY6MzAgMjAwMCBHZXJhcmQgUm91ZGllciAoZ3JvdWRpZXJAY2x1Yi1pbnRlcm5ldC5mcikKKwkqIHZlcnNpb24gbmNyNTNjOHh4LTMuNC4wCisJLSBSZW1vdmUgdGhlIFBST0ZJTEUgQyBhbmQgU0NSSVBUUyBjb2RlLgorCSAgVGhpcyBmYWNpbGl0eSB3YXMgbm90IHRoaXMgdXNlZnVsIGFuZCB0aHVzIHdhcyBub3QgbG9uZ2VyIAorCSAgZGVzaXJhYmxlIGdpdmVuIHRoZSBpbmNyZWFzaW5nIGNvbXBsZXhpdHkgb2YgdGhlIGRyaXZlciBjb2RlLgorCS0gTWVyZ2VzIGZyb20gRnJlZUJTRCBzeW0tMS42LjIgZHJpdmVyOgorCSAgKiBDbGFyaWZ5IG1lbW9yeSBiYXJyaWVycyBuZWVkZWQgYnkgdGhlIGRyaXZlciBmb3IgYXJjaGl0ZWN0dXJlcyAKKwkgICAgdGhhdCBpbXBsZW1lbnQgYSB3ZWFrIG1lbW9yeSBvcmRlcmluZy4KKwktIEdlbmVyYWwgY2xlYW51cDoKKwkgIE1vdmUgZGVmaW5pdGlvbnMgZm9yIGJhcnJpZXJzIGFuZCBJTy9NTUlPIG9wZXJhdGlvbnMgdG8gdGhlIAorCSAgc3ltNTNjOHh4X2RlZnMuaCBoZWFkZXIgZmlsZXMuIFRoZXkgYXJlIG5vdyBzaGFyZWQgYnkgdGhlIAorCSAgYm90aCBkcml2ZXJzLgorCSAgVXNlIFNDU0lfTkNSX0lPTUFQUEVEIGluc3RlYWQgb2YgTkNSX0lPTUFQUEVELgorCitUaHUgTWF5IDExICAgMTI6MzAgMjAwMCBQYW0gRGVsYW5leSAocGFtLmRlbGFuZXlAbHNpbC5jb20pCisJKiByZXZpc2lvbiAzLjNiCisgCitNb24gQXByIDI0IDEyOjAwIDIwMDAgR2VyYXJkIFJvdWRpZXIgKGdyb3VkaWVyQGNsdWItaW50ZXJuZXQuZnIpCisJKiByZXZpc2lvbiAzLjJpCisJLSBSZXR1cm4gdmFsdWUgMSAoaW5zdGVhZCBvZiAwKSBmcm9tIHRoZSBkcml2ZXIgc2V0dXAgcm91dGluZS4KKwktIExldCB0aGUgZHJpdmVyIGFsc28gYXR0YWNoIGNvbnRyb2xsZXJzIHRoYXQgaGF2ZSBiZWVuIHNldCB0byAKKwkgIE9GRiBpbiB0aGUgTlZSQU0gYXMgaXQgZGlkIHByaW9yIHRvIHJldmlzaW9uIDMuMmcuCisKK1NhdCBBcHIgMSAgMTI6MDAgMjAwMCBHZXJhcmQgUm91ZGllciAoZ3JvdWRpZXJAY2x1Yi1pbnRlcm5ldC5mcikKKwkqIHJldmlzaW9uIDMuMmgKKwktIEZpeCBhIGNvbXBpbGF0aW9uIHByb2JsZW0gb24gQWxwaGEgaW50cm9kdWNlZCBpbiB2ZXJzaW9uIDMuMmcuCisgICAgICAgICAgKGBwb3J0JyBjaGFuZ2VkIHRvIGBiYXNlX2lvJykuCisJLSBNb3ZlIGZyb20gYHN5bScgdG8gdGhpcyBkcml2ZXIgYSB0aW55IGNoYW5nZSBmb3IgX19zcGFyY19fIHRoYXQgCisJICBhcHBsaWVzIHRvIGNhY2hlIGxpbmUgc2l6ZSAoPyBQcm9iYWJseSBmcm9tIERhdmlkIFMgTWlsbGVyKS4KKwktIE1ha2Ugc3VyZSBubyBkYXRhIHRyYW5zZmVyIHdpbGwgaGFwcGVuIGZvciBTY3NpX0NtbmQgcmVxdWVzdHMgCisJICB0aGF0IHN1cHBseSBTQ1NJX0RBVEFfTk9ORSBkaXJlY3Rpb24gKHRoaXMgYXZvaWRzIHNvbWUgQlVHKCkgCisJICBzdGF0ZW1lbnQgaW4gdGhlIFBDSSBjb2RlIHdoZW4gYSBkYXRhIGJ1ZmZlciBpcyBhbHNvIHN1cHBsaWVkKS4KKworVGh1IE1hciAxNiAgIDk6MzAgMjAwMCBQYW0gRGVsYW5leSAocGFtLmRlbGFuZXlAbHNpbC5jb20pCisJKiByZXZpc2lvbiAzLjNiLTMKKyAJLSBBZGRlZCBleGNsdXNpb24gZm9yIHRoZSA1M0MxMDEwIGFuZCA1M0MxMDEwXzY2IGNoaXBzCisJICB0byB0aGUgZHJpdmVyIChjaGFuZ2UgdG8gc3ltNTNjOHh4X2NvbW0uaCkuCisKK01vbiBNYXJjaCA2ICAyMzoxNSAyMDAwIEdlcmFyZCBSb3VkaWVyIChncm91ZGllckBjbHViLWludGVybmV0LmZyKQorCSogcmV2aXNpb24gMy4yZworCS0gQWRkIHRoZSBmaWxlIHN5bTUzYzh4eF9jb21tLmggdGhhdCBjb2xsZWN0cyBjb2RlIHRoYXQgc2hvdWxkIAorCSAgYmUgc2hhcmVkIGJ5IHN5bTUzYzh4eCBhbmQgbmNyNTNjOHh4IGRyaXZlcnMuIEZvciBub3csIGl0IGlzICAKKwkgIGEgaGVhZGVyIGZpbGUgdGhhdCBpcyBvbmx5IGluY2x1ZGVkIGJ5IHRoZSBuY3I1M2M4eHggZHJpdmVyLCAKKwkgIGJ1dCB0aGluZ3Mgd2lsbCBiZSBjbGVhbmVkIHVwIGxhdGVyLiBUaGlzIGNvZGUgYWRkcmVzc2VzIAorCSAgbm90YWJseToKKwkgICogQ2hpcCBkZXRlY3Rpb24gYW5kIFBDSSByZWxhdGVkIGluaXRpYWxpc2F0aW9ucworCSAgKiBOVlJBTSBkZXRlY3Rpb24gYW5kIHJlYWRpbmcKKwkgICogRE1BIG1hcHBpbmcKKwkgICogQm9vdCBzZXR1cCBjb21tYW5kCisJICAqIEFuZCBzb21lIG90aGVyIC4uLgorCS0gQWRkIHN1cHBvcnQgZm9yIHRoZSBuZXcgZHluYW1pYyBkbWEgbWFwcGluZyBrZXJuZWwgaW50ZXJmYWNlLgorCSAgUmVxdWlyZXMgTGludXgtMi4zLjQ3ICh0ZXN0ZWQgd2l0aCBwcmUtMi4zLjQ3LTYpLgorCS0gR2V0IGRhdGEgdHJhbnNmZXIgZGlyZWN0aW9uIGZyb20gdGhlIHNjc2kgY29tbWFuZCBzdHJ1Y3R1cmUgCisJICAoU2NzaV9DbW5kKSB3aGVuIHRoaXMgaW5mb3JtYXRpb24gaXMgYXZhaWxhYmxlLgorCitNb24gTWFyY2ggNiAgMjM6MTUgMjAwMCBHZXJhcmQgUm91ZGllciAoZ3JvdWRpZXJAY2x1Yi1pbnRlcm5ldC5mcikKKyAgICAgICAgKiByZXZpc2lvbiAzLjJnCisgICAgICAgIC0gQWRkIHRoZSBmaWxlIHN5bTUzYzh4eF9jb21tLmggdGhhdCBjb2xsZWN0cyBjb2RlIHRoYXQgc2hvdWxkCisgICAgICAgICAgYmUgc2hhcmVkIGJ5IHN5bTUzYzh4eCBhbmQgbmNyNTNjOHh4IGRyaXZlcnMuIEZvciBub3csIGl0IGlzCisgICAgICAgICAgYSBoZWFkZXIgZmlsZSB0aGF0IGlzIG9ubHkgaW5jbHVkZWQgYnkgdGhlIG5jcjUzYzh4eCBkcml2ZXIsCisgICAgICAgICAgYnV0IHRoaW5ncyB3aWxsIGJlIGNsZWFuZWQgdXAgbGF0ZXIuIFRoaXMgY29kZSBhZGRyZXNzZXMKKyAgICAgICAgICBub3RhYmx5OgorICAgICAgICAgICogQ2hpcCBkZXRlY3Rpb24gYW5kIFBDSSByZWxhdGVkIGluaXRpYWxpc2F0aW9ucworICAgICAgICAgICogTlZSQU0gZGV0ZWN0aW9uIGFuZCByZWFkaW5nCisgICAgICAgICAgKiBETUEgbWFwcGluZworICAgICAgICAgICogQm9vdCBzZXR1cCBjb21tYW5kCisgICAgICAgICAgKiBBbmQgc29tZSBvdGhlciAuLi4KKyAgICAgICAgLSBBZGQgc3VwcG9ydCBmb3IgdGhlIG5ldyBkeW5hbWljIGRtYSBtYXBwaW5nIGtlcm5lbCBpbnRlcmZhY2UuCisgICAgICAgICAgUmVxdWlyZXMgTGludXgtMi4zLjQ3ICh0ZXN0ZWQgd2l0aCBwcmUtMi4zLjQ3LTYpLgorICAgICAgICAtIEdldCBkYXRhIHRyYW5zZmVyIGRpcmVjdGlvbiBmcm9tIHRoZSBzY3NpIGNvbW1hbmQgc3RydWN0dXJlCisgICAgICAgICAgKFNjc2lfQ21uZCkgd2hlbiB0aGlzIGluZm9ybWF0aW9uIGlzIGF2YWlsYWJsZS4KKworRnJpIEphbiAxNCAxNDowMCAyMDAwIFBhbSBEZWxhbmV5IChwYW0uZGVsYW5leUBsc2lsLmNvbSkKKwkqIHJldmlzaW9uIHByZS0zLjNiLTEKKwktIE1lcmdlIHBhcmFsbGVsIGRyaXZlciBzZXJpZXMgMy4zMSBhbmQgMy4yZSAKKworVHVlIEphbiAxMSAxNDowMCAyMDAwIFBhbSBEZWxhbmV5IChwYW0uZGVsYW5leUBsc2lsLmNvbSkKKwkqIHJldmlzaW9uIDMuMzEKKwktIEFkZGVkIHN1cHBvcnQgZm9yIG1vdW50aW5nIGRpc2tzIG9uIHdpZGUtbmFycm93LXdpZGUKKwkgIHNjc2kgY29uZmlndXJhdGlvbnMuICAKKwktIEJ1aWx0IG9mZiBvZiB2ZXJzaW9uIDMuMzAKKworTW9uIEphbiAxMCAxMzozMCAyMDAwIFBhbSBEZWxhbmV5IChwYW0uZGVsYW5leUBsc2lsLmNvbSkKKwkqIHJldmlzaW9uIDMuMzAKKwktIEFkZGVkIGNhcGFiaWxpdHkgdG8gdXNlIHRoZSBpbnRlZ3JpdHkgY2hlY2tpbmcgY29kZQorCSAgaW4gdGhlIGtlcm5lbCAob3B0aW9uYWwpLgorCS0gRGlzYWJsZWQgc3VwcG9ydCBmb3IgdGhlIDUzQzEwMTAuCisJLSBCdWlsdCBvZmYgb2YgdmVyc2lvbiAzLjJjCisKK1NhdCBKYW4gOCAgMjI6MDAgMjAwMCBHZXJhcmQgUm91ZGllciAoZ3JvdWRpZXJAY2x1Yi1pbnRlcm5ldC5mcikKKwkqIHJldmlzaW9uIDMuMmUKKwktIEFkZCB5ZWFyIDIwMDAgY29weXJpZ2h0LgorCS0gRGlzcGxheSBjb3JyZWN0bHkgYnVzIHNpZ25hbHMgd2hlbiBidXMgaXMgZGV0ZWN0ZWQgd3JvbmcuCisJLSBSZW1vdmUgdGhlIGRlYWQgY29kZSB0aGF0IGJyb2tlIGRyaXZlciAzLjJkLgorCitNb24gRGVjIDYgIDIyOjAwIDE5OTkgR2VyYXJkIFJvdWRpZXIgKGdyb3VkaWVyQGNsdWItaW50ZXJuZXQuZnIpCisJKiByZXZpc2lvbiAzLjJkCisJLSBDaGFuZ2UgbWVzc2FnZXMgd3JpdHRlbiBieSB0aGUgZHJpdmVyIGF0IGluaXRpYWxpc2F0aW9uIGFuZCAKKwkgIHRocm91Z2ggdGhlIC9wcm9jIEZTIChyYXRoZXIgY29zbWV0aWMgY2hhbmdlcyB0aGF0IGNvbnNpc3QgaW4KKwkgIHByaW50aW5nIG91dCB0aGUgUENJIGJ1cyBudW1iZXIgYW5kIGRldmljZS9mdW5jdGlvbikuCisJLSBHZXQgcmlkIG9mIHRoZSBvbGQgUENJIGJpb3MgaW50ZXJmYWNlLCBidXQgcHJlc2VydmUga2VybmVsIDIuMCAKKwkgIGNvbXBhdGliaWxpdHkgZnJvbSBhIHNpbXBsZSB3cmFwcGVyLgorCS0gUmVtb3ZlIHRoZSBjb21waWxhdGlvbiBjb25kaXRpb24gYWJvdXQgaGF2aW5nIHRvIGFjcXVpcmUgdGhlIAorCSAgaW9fcmVxdWVzdF9sb2NrIHNpbmNlIGl0IHNlZW1zIHRvIGJlIGEgZGVmaW5pdGUgZmVhdHVyZSBub3cuOikKKwktIHByb2NfZGlyIHN0cnVjdHVyZSBubyBsb25nZXIgbmVlZGVkIGZvciBrZXJuZWwgPj0gMi4zLjI3LgorCS0gQ2hhbmdlIHRoZSBkcml2ZXIgZGV0ZWN0aW9uIGNvZGUgYnkgdGhlIHN5bTUzYzh4eCBvbmUsIG1vZHVsbyAKKwkgIHNvbWUgbWlub3IgY2hhbmdlcy4gVGhlIGRyaXZlciBjYW4gbm93IGF0dGFjaCBhbnkgbnVtYmVyIG9mIAorCSAgY29udHJvbGxlcnMgKD40MCkgYW5kIGRvZXMgbm8gbG9uZ2VyIGhvZ2VyIHN0YWNrIHNwYWNlIGF0IAorCSAgaW5pdGlhbGlzYXRpb24uCisJLSBEZWZpbml0ZWx5IGRpc2FibGUgb3ZlcmxhcHBlZCBQQ0kgYXJiaXRyYXRpb24gZm9yIGFsbCBkdWFsIAorCSAgZnVuY3Rpb24gY2hpcHMsIHNpbmNlIEkgY2Fubm90IG1ha2Ugc3VyZSBmb3Igd2hhdCBjaGlwIHJldmlzaW9ucyAKKwkgIGl0IGlzIGFjdHVhbGx5IHNhZmUuCisJLSBBZGQgc3VwcG9ydCBmb3IgdGhlIFNZTTUzQzE1MTBELgorCS0gVXBkYXRlIHRoZSBwb29yIFRla3JhbSBzeW5jIGZhY3RvciB0YWJsZS4KKwktIFJlbW92ZSB0aGUgY29tcGlsYXRpb24gY29uZGl0aW9uIGFib3V0IGhhdmluZyB0byBhY3F1aXJlIHRoZSAKKwkgIGlvX3JlcXVlc3RfbG9jayBzaW5jZSBpdCBzZWVtcyB0byBiZSBhIGRlZmluaXRlIGZlYXR1cmUgbm93LjopCisJLSBwcm9jX2RpciBzdHJ1Y3R1cmUgbm8gbG9uZ2VyIG5lZWRlZCBmb3Iga2VybmVsID49IDIuMy4yNy4KKworU2F0IFNlcCAxMSAgMTg6MDAgMTk5OSBHZXJhcmQgUm91ZGllciAoZ3JvdWRpZXJAY2x1Yi1pbnRlcm5ldC5mcikKKwkqIHJldmlzaW9uIDMuMmMKKwktIEhhbmRsZSBjb3JyZWN0bHkgKGhvcGVmdWxseSkgamlmZmllcyB3cmFwLWFyb3VuZC4KKwktIFJlc3RvcmUgdGhlIGVudHJ5IHVzZWQgdG8gZGV0ZWN0IDg3NSB1bnRpbCByZXZpc2lvbiAweGZmLgorCSAgKEkgcmVtb3ZlZCBpdCBpbmFkdmVydGVudGx5LCBpdCBzZWVtcyA6KSApCisJLSBSZXBsYWNlIF9faW5pdGZ1bmMoKSB3aGljaCBpcyBkZXByZWNhdGVkIHN0dWZmIGJ5IF9faW5pdCB3aGljaCAKKwkgIGlzIG5vdCB5ZXQgc28uIDstKQorCS0gQWRkIHN1cHBvcnQgb2Ygc29tZSAncmVzb3VyY2UgaGFuZGxpbmcnIGZvciBsaW51eC0yLjMuMTMuCisJICBCYXNpY2FsbHkgdGhlIEJBUnMgaGF2ZSBiZWVuIGNoYW5nZWQgdG8gc29tZXRoaW5nIG1vcmUgY29tcGxleCAKKwkgIGluIHRoZSBwY2lfZGV2IHN0cnVjdHVyZS4KKwktIFJlbW92ZSBzb21lIGRlcHJlY2F0ZWQgY29kZS4KKworU2F0IE1heSAxMCAgMTE6MDAgMTk5OSBHZXJhcmQgUm91ZGllciAoZ3JvdWRpZXJAY2x1Yi1pbnRlcm5ldC5mcikKKwkqIHJldmlzaW9uIHByZS0zLjJiLTEKKwktIFN1cHBvcnQgZm9yIHRoZSA1M0M4OTVBIGJ5IFBhbWVsYSBEZWxhbmV5IDxwYW0uZGVsYW5leUBsc2lsLmNvbT4KKwkgIFRoZSA1M0M4OTVBIGNvbnRhaW5zIGFsbCBvZiB0aGUgZmVhdHVyZXMgb2YgdGhlIDg5NiBidXQgaGFzIG9ubHkgCisJICBvbmUgY2hhbm5lbCBhbmQgaGFzIGEgMzIgYml0IFBDSSBidXMuIEl0IGRvZXMgNjQgYml0IFBDSSBhZGRyZXNzaW5nIAorCSAgdXNpbmcgZHVhbCBjeWNsZSBQQ0kgZGF0YSB0cmFuc2ZlcnMuCisJLSBNaXNjZWxsYW5lb3VzIG1pbm9yIGZpeGVzLgorCS0gU29tZSBhZGRpdGlvbnMgdG8gdGhlIFJFQURNRS5uY3I1M2M4eHggZmlsZS4KKworU3VuIEFwciAxMSAgMTA6MDAgMTk5OSBHZXJhcmQgUm91ZGllciAoZ3JvdWRpZXJAY2x1Yi1pbnRlcm5ldC5mcikKKwkqIHJldmlzaW9uIDMuMmEKKwktIEFkZCAnaG9zdGlkOiNpZCcgYm9vdCBvcHRpb24uIFRoaXMgb3B0aW9uIGFsbG93cyB0byBjaGFuZ2UgdGhlIAorCSAgZGVmYXVsdCBTQ1NJIGlkIHRoZSBkcml2ZXIgdXNlcyBmb3IgY29udHJvbGxlcnMuCisJLSBSZW1vdmUgbnZyYW0gbGF5b3V0cyBhbmQgZHJpdmVyIHNldC11cCBzdHJ1Y3R1cmVzIGZyb20gdGhlIEMgc291cmNlLAorCSAgYW5kIHVzZSB0aGUgb25lIGRlZmluZWQgaW4gc3ltNTNjOHh4X2RlZnMuaCBmaWxlLgorCSAgKHNoYXJlZCBieSBib3RoIGRyaXZlcnMpLgorCS0gU2V0IGZvciBub3cgTUFYIExVTlMgdG8gMTYgKGluc3RlYWQgb2YgOCkuCisKK1RodSBNYXIgMTEgIDIzOjAwIDE5OTkgR2VyYXJkIFJvdWRpZXIgKGdyb3VkaWVyQGNsdWItaW50ZXJuZXQuZnIpCisJKiByZXZpc2lvbiAzLjIJICAoOHh4LTg5NiBkcml2ZXIgYnVuZGxlKQorCS0gT25seSBkZWZpbmUgdGhlIGhvc3QgdGVtcGxhdGUgaW4gbmNyNTNjOHh4LmggYW5kIGluY2x1ZGUgdGhlIAorCSAgc3ltNTNjOHh4X2RlZnMuaCBmaWxlLgorCS0gRGVjbGFyZSBzdGF0aWMgYWxsIHN5bWJvbHMgdGhhdCBkbyBub3QgbmVlZCB0byBiZSB2aXNpYmxlIGZyb20gCisJICBvdXRzaWRlIHRoZSBkcml2ZXIgY29kZS4KKwktIEFkZCAnZXhjbCcgYm9vdCBjb21tYW5kIG9wdGlvbiB0aGF0IGFsbG93cyB0byBwYXNzIHRvIHRoZSBkcml2ZXIgCisJICBpbyBhZGRyZXNzIG9mIGRldmljZXMgbm90IHRvIGF0dGFjaC4KKwktIEFkZCBpbmZvKCkgZnVuY3Rpb24gY2FsbGVkIGZyb20gdGhlIGhvc3QgdGVtcGxhdGUgdG8gcHJpbnQgCisJICBkcml2ZXIvaG9zdCBpbmZvcm1hdGlvbi4KKwktIE1pbm9yIGRvY3VtZW50YXRpb24gYWRkaXRpb25zLgorCitTYXQgTWFyIDYgIDExOjAwIDE5OTkgR2VyYXJkIFJvdWRpZXIgKGdyb3VkaWVyQGNsdWItaW50ZXJuZXQuZnIpCisJKiByZXZpc2lvbiAzLjFoCisJLSBGaXggc29tZSBvb29vbGQgYnVnIHRoYXQgaGFuZ3MgdGhlIGJ1cyBpZiBhIGRldmljZSByZWplY3RzIGEgCisJICBuZWdvdGlhdGlvbi4gQnR3LCB0aGUgY29ycmVzcG9uZGluZyBzdHVmZiBhbHNvIG5lZWRlZCBzb21lIGNsZWFudXAgCisJICBhbmQgdGh1cyB0aGUgY2hhbmdlIGlzIGEgYml0IGxhcmdlciB0aGFuIGl0IGNvdWxkIGhhdmUgYmVlbi4KKwktIFN0aWxsIHNvbWUgdHlwbyB0aGF0IG1hZGUgY29tcGlsYXRpb24gZmFpbCBmb3IgNjQgYml0ICh0cml2aWFsIGZpeCkuCisKK1N1biBGZWIgIDE0OjAwIDE5OTkgR2VyYXJkIFJvdWRpZXIgKGdyb3VkaWVyQGNsdWItaW50ZXJuZXQuZnIpCisJKiByZXZpc2lvbiAzLjFnCisJLSBEZWFsIGNvcnJlY3RseSB3aXRoIDY0IGJpdCBQQ0kgYWRkcmVzcyByZWdpc3RlcnMgb24gTGludXggMi4yLgorCSAgUG9pbnRlZCBvdXQgYnkgTGVvbmFyZCBadWJrb2ZmLgorCS0gQWxsb3cgdG8gdHVuZSByZXF1ZXN0X2lycSgpIGZsYWdzIGZyb20gdGhlIGJvb3QgY29tbWFuZCBsaW5lIHVzaW5nIAorCSAgbmNyNTNjOHh4PWlycW06Pz8sIGFzIGZvbGxvd3M6CisJICBhKSBJZiBiaXQgMHgxMCBpcyBzZXQgaW4gaXJxbSwgU0FfU0hJUlEgZmxhZyBpcyBub3QgdXNlZC4KKwkgIGIpIElmIGJpdCAweDIwIGlzIHNldCBpbiBpcnFtLCBTQV9JTlRFUlJVUFQgZmxhZyBpcyBub3QgdXNlZC4KKwkgIEJ5IGRlZmF1bHQgdGhlIGRyaXZlciB1c2VzIGJvdGggU0FfU0hJUlEgYW5kIFNBX0lOVEVSUlVQVC4KKwkgIE9wdGlvbiAnbmNyNTNjOHh4PWlycW06MHgyMCcgbWF5IGJlIHVzZWQgd2hlbiBhbiBJUlEgaXMgc2hhcmVkIGJ5IAorCSAgYSA1M0M4WFggYWRhcHRlciBhbmQgYSBuZXR3b3JrIGJvYXJkLgorCS0gVGlueSBtaXNwZWxsaW5nIGZpeGVkIChBQk9SVCBpbnN0ZWFkIG9mIEFCUlQpLiBXYXMgZm9ydHVuYXRlbHkgCisJICBoYXJtbGVzcy4KKwktIE5lZ290aWF0ZSBTWU5DIGRhdGEgdHJhbnNmZXJzIHdpdGggQ0NTIGRldmljZXMuCisKK1NhdCBKYW4gMTYgIDE3OjMwIDE5OTkgR2VyYXJkIFJvdWRpZXIgKGdyb3VkaWVyQGNsdWItaW50ZXJuZXQuZnIpCisJKiByZXZpc2lvbiAzLjFmCisJLSBTb21lIFBDSSBmaXgtdXBzIG5vdCBuZWVkZWQgYW55IG1vcmUgZm9yIFBQQyAoZnJvbSBDb3J0KS4KKwktIENhY2hlIGxpbmUgc2l6ZSBzZXQgdG8gMTYgRFdPUkRTIGZvciBTcGFyYyAgIChmcm9tIERTTSkuCisJLSBXYWl0aW5nIGxpc3QgbG9vay11cCBkaWRuJ3Qgd29yayBmb3IgdGhlIGZpcnN0IGNvbW1hbmQgb2YgdGhlIGxpc3QuCisJLSBSZW1vdmUgMiB1c2VsZXNzIGxpbmVzIG9mIGNvZGUuCisKK1N1biBEZWMgMTMgIDE4OjAwIDE5OTggR2VyYXJkIFJvdWRpZXIgKGdyb3VkaWVyQGNsdWItaW50ZXJuZXQuZnIpCisJKiByZXZpc2lvbiAzLjFlCisJLSBTYW1lIHdvcmstYXJvdW5kIGFzIGZvciB0aGUgNTNjODc2IHJldiA8PSAweDE1IGZvciA1M2M4OTYgcmV2IDE6CisJICBEaXNhYmxlIG92ZXJsYXBwZWQgYXJiaXRyYXRpb24uIFRoaXMgd2lsbCBub3QgbWFrZSBkaWZmZXJlbmNlIAorCSAgc2luY2UgdGhlIGNoaXAgaGFzIG9uLWNoaXAgUkFNLgorCitUaHUgTm92IDI2ICAyMjowMCAxOTk4IEdlcmFyZCBSb3VkaWVyIChncm91ZGllckBjbHViLWludGVybmV0LmZyKQorCSogcmV2aXNpb24gMy4xZAorCS0gVGhlIFNJU0wgUkFJRCBjaGFuZ2UgcmVxdWlyZXMgbm93IHJlbWFwX3BjaV9tZW0oKSBzdHVmZiB0byBiZSAKKwkgIGNvbXBpbGVkIGZvciBfX2kzODZfXyB3aGVuIG5vcm1hbCBJT3MgYXJlIHVzZWQuCisJLSBNaW5vciBzcGVsbGluZyBmaXhlcyBpbiBkb2MgZmlsZXMuCisKK1NhdCBOb3YgMjEgIDE4OjAwIDE5OTggR2VyYXJkIFJvdWRpZXIgKGdyb3VkaWVyQGNsdWItaW50ZXJuZXQuZnIpCisJKiByZXZpc2lvbiAzLjFjCisJLSBJZ25vcmUgY2hpcHMgdGhhdCBhcmUgZHJpdmVuIGJ5IFNJU0wgUkFJRCAoREFDIDk2MCkuCisJICBDaGFuZ2Ugc2VudCBieSBMZW9uYXJkIFp1YmtvZmYgYW5kIHNsaWdodGx5IHJld29ya2VkLgorCS0gU3RpbGwgYSBidWdsZXQgaW4gdGhlIHRhZ3MgaW5pdGlhbCBzZXR0aW5ncyB0aGF0IG5lZWRlZCB0byBiZSBmaXhlZC4KKwkgIEl0IHdhcyBub3QgcG9zc2libGUgdG8gZGlzYWJsZSBUR1EgYXQgc3lzdGVtIHN0YXJ0dXAgZm9yIGRldmljZXMgCisJICB0aGF0IGNsYWltIFRHUSBzdXBwb3J0LiBUaGUgZHJpdmVyIHVzZWQgYXQgbGVhc3QgMiBmb3IgdGhlIHF1ZXVlIAorCSAgZGVwdGggYnV0IGRpZCdudCBrZWVwIHRyYWNrIG9mIHVzZXIgc2V0dGluZ3MgZm9yIHRhZ3MgZGVwdGggbG93ZXIgCisJICB0aGFuIDIuCisKK1dlZCBOb3YgMTEgIDEwOjAwIDE5OTggR2VyYXJkIFJvdWRpZXIgKGdyb3VkaWVyQGNsdWItaW50ZXJuZXQuZnIpCisJKiByZXZpc2lvbiAzLjFiCisJLSBUaGUgZHJpdmVyIHdhcyB1bmhhcHB5IHdoZW4gY29uZmlndXJlZCB3aXRoIGRlZmF1bHRfdGFncyA+IE1BWF9UQUdTCisJICBIb3BlZnVsbHkgZG91Ymx5LWZpeGVkLgorCS0gVXBkYXRlIHRoZSBDb25maWd1cmUuaGVscCBkcml2ZXIgc2VjdGlvbiB0aGF0IHNwZWFrcyBvZiBUQUdTLgorCitXZWQgT2N0IDIxIDIxOjAwIDE5OTggR2VyYXJkIFJvdWRpZXIgKGdyb3VkaWVyQGNsdWItaW50ZXJuZXQuZnIpCisJKiByZXZpc2lvbiAzLjFhCisJLSBDaGFuZ2VzIGZyb20gRWRkaWUgRG9zdCBmb3IgU3BhcmMgYW5kIEFscGhhOgorCSAgaW9yZW1hcC9pb3VubWFwIHN1cHBvcnQgZm9yIFNwYXJjLgorCSAgcGNpdnRvcGh5cyBjaGFuZ2VkIHRvIGJ1c19kdm1hX3RvX3BoeXMuCisJLSBBZGQgdGhlIDUzYzg3NiBkZXNjcmlwdGlvbiB0byB0aGUgY2hpcCB0YWJsZS4gVGhpcyBpcyBvbmx5IHVzZWZ1bCAKKwkgIGZvciBwcmludGluZyB0aGUgcmlnaHQgbmFtZSBvZiB0aGUgY29udHJvbGxlci4KKwktIERFTC00NDEgSXRlbSAyIHdvcmstYXJvdW5kIGZvciB0aGUgNTNjODc2IHJldiA8PSA1ICgweDE1KS4KKwktIEFkZCBhZGRpdGlvbmFsIGNoZWNraW5nIG9mIElOUVVJUlkgZGF0YToKKwkgIENoZWNrIElOUVVJUlkgZGF0YSByZWNlaXZlZCBsZW5ndGggaXMgYXQgbGVhc3QgNy4gQnl0ZSA3IG9mIAorCSAgaW5xdWlyeSBkYXRhIGNvbnRhaW5zIGRldmljZSBmZWF0dXJlcyBiaXRzIGFuZCB0aGUgZHJpdmVyIG1pZ2h0IAorCSAgYmUgY29uZnVzZWQgYnkgZ2FyYmFnZS4gQWxzbyBjaGVjayBwZXJpcGhlcmFsIHF1YWxpZmllci4KKwktIENsZWFudXAgb2YgdGhlIFNDU0kgdGFza3MgbWFuYWdlbWVudDoKKwkgIFJlbW92ZSB0aGUgc3BlY2lhbCBjYXNlIGZvciAzMiB0YWdzLiBOb3cgdGhlIGRyaXZlciBvbmx5IHVzZXMgdGhlIAorCSAgc2NoZW1lIHRoYXQgYWxsb3dzIHVwIHRvIDY0IHRhZ3MgcGVyIExVTi4KKwkgIE1lcmdlIHNvbWUgY29kZSBmcm9tIHRoZSA4OTYgZHJpdmVyLgorCSAgVXNlIGEgMSwzLDUsLi4uTUFYVEFHUyoyKzEgdGFnIG51bWJlcmluZy4gUHJldmlvdXMgZHJpdmVyIGNvdWxkICAKKwkgIHVzZSBhbnkgdGFnIG51bWJlciBmcm9tIDEgdG8gMjUzIGFuZCBzb21lIG5vbiBjb25mb3JtYW50IGRldmljZXMgIAorCSAgbWlnaHQgaGF2ZSBwcm9ibGVtcyB3aXRoIGxhcmdlIHRhZyBudW1iZXJzLgorCS0gJ25vX3N5bmMnIGNoYW5nZWQgdG8gJ25vX2Rpc2MnIGluIHRoZSBSRUFETUUgZmlsZS4gVGhpcyBpcyBhbiBvbGQgCisJICBhbmQgdHJpdmlhbCBtaXN0YWtlIHRoYXQgc2VlbXMgdG8gZGVtb25zdHJhdGUgdGhlIFJFQURNRSBmaWxlIGlzIAorCSAgbm90IG9mdGVuIHJlYWQuIDopCisKK1N1biBPY3QgIDQgMTQ6MDAgMTk5OCBHZXJhcmQgUm91ZGllciAoZ3JvdWRpZXJAY2x1Yi1pbnRlcm5ldC5mcikKKwkqIHJldmlzaW9uIDMuMGkKKwktIENvc21ldGljIGNoYW5nZXMgZm9yIHNwYXJjIChidXQgbm90IGZvciB0aGUgZHJpdmVyKSB0aGF0IG5lZWRzICAKKwkgIF9faXJxX2l0b2EoKSB0byBiZSB1c2VkIGZvciBwcmludGVkIElSUSB2YWx1ZSB0byBiZSB1bmRlcnN0YW5kYWJsZS4KKwktIFNvbWUgcHJvYmxlbXMgd2l0aCB0aGUgZHJpdmVyIHRoYXQgZGlkbid0IG9jY3VyIHVzaW5nIGRyaXZlciAyLjVmIAorCSAgd2VyZSBkdWUgdG8gYSBTQ1NJIHNlbGVjdGlvbiBwcm9ibGVtIHRyaWdnZXJlZCBieSBhIGNsZWFybHkgCisJICBkb2N1bWVudGVkIGZlYXR1cmUgdGhhdCBpbiBmYWN0IHNlZW1zIG5vdCB0byB3b3JrOiAoNTNDOFhYIGNoaXBzICAKKwkgIGFyZSBjbGFpbWVkIGJ5IHRoZSBtYW51YWxzIHRvIGJlIGFibGUgdG8gZXhlY3V0ZSBTQ1NJIHNjcmlwdHMganVzdCAKKwkgIGFmdGVyIGFiaXRyYXRpb24gd2hpbGUgdGhlIFNDU0kgY29yZSBpcyBwZXJmb3JtaW5nIFNDU0kgc2VsZWN0aW9uKS4KKwkgIFRoaXMgb3B0aW1pemF0aW9uIGlzIGJyb2tlbiBhbmQgaGFzIGJlZW4gcmVtb3ZlZC4KKwktIFNvbWUgYnJva2VuIHNjc2kgZGV2aWNlcyBhcmUgY29uZnVzZWQgd2hlbiBhIG5lZ290aWF0aW9uIGlzIHN0YXJ0ZWQgCisJICBvbiBhIExVTiB0aGF0IGRvZXMgbm90IGNvcnJlc3BvbmQgdG8gYSByZWFsIGRldmljZS4gQWNjb3JkaW5nIHRvIAorCSAgU0NTSSBzcGVjcywgdGhpcyBpcyBhIGRldmljZSBmaXJtd2FyZSBidWcuIFRoaXMgaGFzIGJlZW4gd29ya2VkIAorCSAgYXJvdW5kIGJ5IG9ubHkgc3RhcnRpbmcgbmVnb3RpYXRpb24gaWYgdGhlIExVTiBoYXMgcHJldmlvdXNseSBiZSAKKwkgIHVzZWQgZm9yIGF0IGxlYXN0IDEgc3VjY2Vzc2Z1bCBTQ1NJIGNvbW1hbmQuCisJLSBUaGUgJ2xhc3QgbWVzc2FnZSBzZW50JyBwcmludGVkIG91dCBvbiBNX1JFSkVDVCBtZXNzYWdlIHJlY2VwdGlvbiAKKwkgIHdhcyByZWFkIGZyb20gdGhlIFNGQlIgaS9vIHJlZ2lzdGVyIGFmdGVyIHRoZSBwcmV2aW91cyBtZXNzYWdlIGhhZCAKKwkgIGJlZW4gc2VudC4gCisJICBUaGlzIHdhcyBub3QgY29ycmVjdCBhbmQgYWZmZWN0cyBhbGwgcHJldmlvdXMgZHJpdmVyIHZlcnNpb25zIGFuZCAKKwkgIHRoZSBvcmlnaW5hbCBGcmVlQlNEIG9uZSBhcyB3ZWxsLiBUaGUgU0NTSSBzY3JpcHRzIGhhcyBiZWVuIGZpeGVkIAorCSAgc28gdGhhdCBpdCBub3cgcHJvdmlkZXMgdGhlIHJpZ2h0IGluZm9ybWF0aW9uIHRvIHRoZSBDIGNvZGUuCisKK1NhdCBKdWwgMTggMTM6MDAgMTk5OCBHZXJhcmQgUm91ZGllciAoZ3JvdWRpZXJAY2x1Yi1pbnRlcm5ldC5mcikKKwkqIHJldmlzaW9uIDMuMGcKKwktIFByZWxpbWluYXJ5IGZpeGVzIGZvciBCaWcgRW5kaWFuIChzZW50IGJ5IEVkZGllIEMuIERvc3QpLgorCSAgQmlnIEVuZGlhbiBhcmNoaXRlY3R1cmVzIHNob3VsZCB3b3JrIGFnYWluIHdpdGggdGhlIGRyaXZlci4KKwkgIEVkZGllJ3MgcGF0Y2ggaGFzIGJlZW4gcGFydGlhbGx5IGFwcGxpZWQgc2luY2UgY3VycmVudCAyLjEuMTA5IAorCSAgZG9lcyBub3QgaGF2ZSBhbGwgdGhlIFNwYXJjIGNoYW5nZXMgb2YgdGhlIHZnZXIgdHJlZS4KKwktIFVzZSBvZiBCSVRTX1BFUl9MT05HIGluc3RlYWQgb2YgKH4wVUwgPT0gMHhmZmZmZmZmZlVMKSBoYXMgZml4ZWQKKwkgIHRoZSBwcm9ibGVtIG9ic2VydmVkIHdoZW4gdGhlIGRyaXZlciB3YXMgY29tcGlsZWQgdXNpbmcgRUdDUyBvciAKKwkgIFBHQ0MuCisKK01vbiBKdWwgMTMgMjA6MDAgMTk5OCBHZXJhcmQgUm91ZGllciAoZ3JvdWRpZXJAY2x1Yi1pbnRlcm5ldC5mcikKKwkqIHJldmlzaW9uIDMuMGYKKwktIFNvbWUgc3BlbGxpbmcgZml4ZXMuCisJLSBsaW51eC9jb25maWcuaCBtaXNwbGFjZWQgaW4gbmNyNTNjOHh4LmgKKwktIE1PRFVMRV9QQVJNIHN0dWZmIGFkZGVkIGZvciBsaW51eCAyLjEuCisJLSBjaGVjayBJTlFVSVJZIHJlc3BvbnNlIGRhdGEgZm9ybWF0IGlzIGV4YWN0bHkgMi4gCisJLSB1c2UgQklUU19QRVJfTE9ORyBpZiBkZWZpbmVkLiAKKworU3VuIEp1biAyOCAxMjowMCAxOTk4IEdlcmFyZCBSb3VkaWVyIChncm91ZGllckBjbHViLWludGVybmV0LmZyKQorCSogcmV2aXNpb24gMy4wZQorCS0gU29tZSBjbGVhbnVwLCBzcGVsbGluZyBmaXhlcywgdmVyc2lvbiBjaGVja3MsIGRvY3VtZW50YXRpb25zIAorCSAgY2hhbmdlcywgZXRjIC4uLgorCitTYXQgSnVuIDIwIDIwOjAwIDE5OTggR2VyYXJkIFJvdWRpZXIgKGdyb3VkaWVyQGNsdWItaW50ZXJuZXQuZnIpCisJKiByZXZpc2lvbiAzLjBjCisJLSBBZGQgYSBib290IHNldHVwIG9wdGlvbiB0aGF0IGFsbG93cyB0byBzZXQgdXAgZGV2aWNlIHF1ZXVlIGRlcHRocyAKKwkgIGF0IGJvb3QtdXAuIFRoaXMgb3B0aW9uIGlzIHZlcnkgdXNlZnVsIHNpbmNlIExpbnV4IGRvZXMgbm90IAorCSAgYWxsb3cgdG8gY2hhbmdlIHNjc2kgZGV2aWNlIHF1ZXVlIGRlcHRoIG9uY2UgdGhlIHN5c3RlbSBoYXMgYmVlbiAKKwkgIGJvb3RlZCB1cC4KKworU3VuIEp1biAxNSAyMzowMCAxOTk4IEdlcmFyZCBSb3VkaWVyIChncm91ZGllckBjbHViLWludGVybmV0LmZyKQorCSogcmV2aXNpb24gMy4wYQorCS0gU3VwcG9ydCBmb3IgdXAgdG8gNjQgVEFHUyBwZXIgTFVOLgorCS0gUmV3cml0ZSB0aGUgVEFSR0VUIHZzIExVTiBjYXBhYmlsaXRpZXMgbWFuYWdlbWVudC4KKwkgIENtZFF1ZXVlIGlzIG5vdyBoYW5kbGVkIGFzIGEgTFVOIGNhcGFiaWxpdHkgYXMgaXQgc2hhbGwgYmUuCisJICBUaGlzIGFsc28gZml4ZXMgYSBidWcgdHJpZ2dlcmVkIHdoZW4gZGlzYWJsaW5nIHRhZ2dlZCBjb21tYW5kIAorCSAgcXVldWluZyBmb3IgYSBkZXZpY2UgdGhhdCBoYWQgdGhpcyBmZWF0dXJlIGVuYWJsZWQuCisJLSBSZW1vdmUgdGhlIG5jcl9vcGVubmluZ3MoKSBzdHVmZiB0aGF0IHdhcyB1c2VsZXNzIHVuZGVyIExpbnV4IAorCSAgYW5kIGhhcmQgdG8gdW5kZXJzdGFuZCB0byBtZS4KKwktIEFkZCAic2V0dmVyYm9zZSIgcHJvY2ZzIGRyaXZlciBjb21tYW5kLiBJdCBhbGxvd3MgdG8gdHVuZSAKKwkgIHZlcmJvc2UgbGV2ZWwgYWZ0ZXIgYm9vdC11cC4gU2V0dGluZyB0aGlzIGxldmVsIHRvIHplcm8sIGZvciAKKwkgIGV4YW1wbGUgYXZvaWQgZmxvb2RpbmcgdGhlIHN5c2xvZyBmaWxlLgorCS0gQWRkIEtFUk5fWFhYIHRvIHNvbWUgcHJpbnRrJ3MuCisKK1R1ZSBKdW4gMTAgMjM6MDAgMTk5OCBHZXJhcmQgUm91ZGllciAoZ3JvdWRpZXJAY2x1Yi1pbnRlcm5ldC5mcikKKwkqIHJldmlzaW9uIDMuMAorCS0gTGludXggY29uZmlnIGNoYW5nZXMgZm9yIDIuMC4zNDoKKwkgIFJlbW92ZSBOVlJBTSBkZXRlY3Rpb24gY29uZmlnIG9wdGlvbi4gVGhpcyBvcHRpb24gaXMgbm93IGVuYWJsZWQgCisJICBieSBkZWZhdWx0IGJ1dCBjYW4gYmUgZGlzYWJsZWQgYnkgZWRpdGluZyB0aGUgZHJpdmVyIGhlYWRlciBmaWxlLgorCSAgQWRkIGEgUFJPRklMRSBjb25maWcgb3B0aW9uLgorCS0gVXBkYXRlIENvbmZpZ3VyZS5oZWxwCisJLSBBZGQgY2FsbHMgdG8gbmV3IGZ1bmN0aW9uIG1kZWxheSgpIGZvciBtaWxsaS1zZWNvbmRzIGRlbGF5IGlmIAorCSAga2VybmVsIHZlcnNpb24gPj0gMi4xLjEwNS4KKwktIFJlcGxhY2UgYWxsIHByaW50ZihzKSBieSBwcmludGsocykuIEFmdGVyIGFsbCwgdGhlIG5jcjUzYzh4eCBpcyAKKwkgIGEgZHJpdmVyIGZvciBMaW51eC4KKwktIFBlcmZvcm0gYXV0by1zZW5zZSBvbiBDT01NQU5EIFRFUk1JTkFURUQuIE5vdCBzdXJlIGl0IGlzIHVzZWZ1bC4KKwktIFNvbWUgb3RoZXIgbWlub3IgY2hhbmdlcy4KKworVHVlIEp1biA0IDIzOjAwIDE5OTggR2VyYXJkIFJvdWRpZXIgKGdyb3VkaWVyQGNsdWItaW50ZXJuZXQuZnIpCisJKiByZXZpc2lvbiAyLjZuCisJLSBDb2RlIGNsZWFudXAgYW5kIHNpbXBsaWZpY2F0aW9uOgorCSAgUmVtb3ZlIGtlcm5lbCAxLjIuWCBhbmQgMS4zLlggc3VwcG9ydC4KKwkgIFJlbW92ZSB0aGUgX29sZF8gdGFyZ2V0IGNhcGFiaWxpdGllcyB0YWJsZS4KKwkgIFJlbW92ZSB0aGUgZXJyb3IgcmVjb3ZlcnkgY29kZSB0aGF0IGhhdmUnbnQgYmVlbiByZWFsbHkgdXNlZnVsLgorCSAgVXNlIGEgc2luZ2xlIGFsaWdubWVudCBib3VuZGFyeSAoQ0FDSEVfTElORV9TSVpFKSBmb3IgZGF0YSAKKwkgIHN0cnVjdHVyZXMuCisJLSBTZXZlcmFsIGFnZ3Jlc3NpdmUgU0NSSVBUUyBvcHRpbWl6YXRpb25zIGFuZCBjaGFuZ2VzOgorCSAgUmVzZWxlY3QgU0NSSVBUUyBjb2RlIHJld3JpdHRlbi4KKwkgIFN1cHBvcnQgZm9yIHNlbGVjdGlvbi9yZXNlbGVjdGlvbiB3aXRob3V0IEFUTi4KKwkgIEFuZCBzb21lIG90aGVycy4KKwktIE1pc2NhbGxhbmVvdXMgY2hhbmdlcyBpbiB0aGUgQyBjb2RlOgorCSAgQ291bnQgYWN0dWFsIG51bWJlciBvZiBDQ0IgcXVldWVkIHRvIHRoZSBjb250cm9sbGVyIChmdXR1cmUgdXNlKS4KKwkgIExvdHMgb2Ygb3RoZXIgbWlub3IgY2hhbmdlcy4KKworV2VkIE1heSAxMyAyMDowMCAxOTk4IEdlcmFyZCBSb3VkaWVyIChncm91ZGllckBjbHViLWludGVybmV0LmZyKQorCSogcmV2aXNpb24gMi42bQorCS0gUHJvYmxlbSBvZiBtaXNzZWQgU0NTSSBidXMgcmVzZXQgd2l0aCB0aGUgNTNDODk1IGZpeGVkIGJ5IAorCSAgUmljaGFyZCBXYWx0aGFtLiBUaGUgNTNDODk1IG5lZWRzIGFib3V0IDY1MCB1cyBmb3IgdGhlIGJ1cyAKKwkgIG1vZGUgdG8gc2V0dGxlLiBEZWxheXMgdXNlZCB3aGlsZSByZXNldHRpbmcgdGhlIGNvbnRyb2xsZXIgCisJICBhbmQgdGhlIGJ1cyBoYXZlIGJlZW4gYWRqdXN0ZWQuIFRoYW5rcyBSaWNoYXJkIQorCS0gU29tZSBzaW1wbGlmaWNhdGlvbiBmb3IgNjQgYml0IGFyY2ggZG9uZSBjY2IgYWRkcmVzcyB0ZXN0aW5nLgorCS0gQWRkIGEgY2hlY2sgb2YgdGhlIE1TR19PVVQgcGhhc2UgYWZ0ZXIgU2VsZWN0aW9uIHdpdGggQVROLgorCS0gVGhlIG5ldyB0YWdnZWQgcXVldWUgc3R1ZmYgc2VlbXMgb2ssIHNvIHNvbWUgaW5mb3JtYXRpb25uYWwgCisJICBtZXNzYWdlIGhhdmUgYmVlbiBjb25kaXRpb25uZWQgYnkgdmVyYm9zZSA+PSAzLgorCS0gRG9ubm90IHJlc2V0IGlmIGEgU0JNQyBpbnRlcnJ1cHQgcmVwb3J0cyB0aGUgc2FtZSBidXMgbW9kZS4KKwktIFByaW50IG91dCB0aGUgd2hvbGUgZHJpdmVyIHNldC11cC4gU29tZSBvcHRpb25zIHdlcmUgbWlzc2luZyBhbmQgCisJICB0aGUgcHJpbnQgc3RhdGVtZW50IHdhcyBtaXNwbGFjZWQgZm9yIG1vZHVsZXMuCisJLSBJZ25vcmUgYSBTQ1NJIHBhcml0eSBpbnRlcnJ1cHQgaWYgdGhlIGNoaXAgaXMgbm90IGNvbm5lY3RlZCB0byAKKwkgIHRoZSBTQ1NJIGJ1cy4KKworU2F0IE1heSAxIDE2OjAwIDE5OTggR2VyYXJkIFJvdWRpZXIgKGdyb3VkaWVyQGNsdWItaW50ZXJuZXQuZnIpCisJKiByZXZpc2lvbiAyLjZsCisJLSBBZGQgQ0NCIGRvbmUgcXVldWUgc3VwcG9ydCBmb3IgQWxwaGEgYW5kIHBlcmhhcHMgc29tZSBvdGhlciAKKwkgIGFyY2hpdGVjdHVyZXMuCisJLSBBZGQgc29tZSBiYXJyaWVycyB0byBlbmZvcmNlIG1lbW9yeSBvcmRlcmluZyBmb3IgeDg2IGFuZCAKKwkgIEFscGhhIGFyY2hpdGVjdHVyZXMuCisJLSBGaXggc29tZXRoaW5nIHRoYXQgbG9va3MgbGlrZSBhbiBvbGQgYnVnIGluIHRoZSBuZWdvIFNJUiAKKwkgIGludGVycnVwdCBjb2RlIGluIGNhc2Ugb2YgbmVnb3RpYXRpb24gZmFpbHVyZS4KKworU2F0IEFwciAyNSAyMTowMCAxOTk4IEdlcmFyZCBSb3VkaWVyIChncm91ZGllckBjbHViLWludGVybmV0LmZyKQorCSogcmV2aXNpb24gMi42aworCS0gUmVtb3ZlIGFsbCBhY2Nlc3NlcyB0byB0aGUgb24tY2hpcCBSQU0gZnJvbSB0aGUgQyBjb2RlOgorCSAgVXNlIFNDUklQVFMgdG8gbG9hZCB0aGUgb24tY2hpcCBSQU0uCisJICBVc2UgU0NSSVBUUyB0byByZXBhaXIgdGhlIHN0YXJ0IHF1ZXVlIG9uIHNlbGVjdGlvbiB0aW1lb3V0LgorCSAgVXNlIHRoZSBjb3B5IG9mIHNjcmlwdCBpbiBtYWluIG1lbW9yeSB0byBjYWxjdWxhdGUgdGhlIGNoaXAgCisJICBjb250ZXh0IG9uIHBoYXNlIG1pc21hdGNoLgorCS0gVGhlIGFib3ZlIGFsbG93cyBub3cgdG8gdXNlIHRoZSBvbi1jaGlwIFJBTSB3aXRob3V0IHJlcXVpcmluZyAKKwkgIHRvIGdldCBhY2Nlc3MgdG8gdGhlIG9uLWNoaXAgUkFNIGZyb20gdGhlIEMgY29kZS4gVGhpcyBtYWtlcyAKKwkgIG9uLWNoaXAgUkFNIHVzZWFibGUgZm9yIGxpbnV4LTEuMi4xMyBhbmQgZm9yIExpbnV4LUFscGhhIGZvciAKKwkgIGluc3RhbmNlLgorCS0gU29tZSBzaW1wbGlmaWNhdGlvbnMgYW5kIGNsZWFudXBzIGluIHRoZSBTQ1JJUFRTIGFuZCBDIGNvZGUuCisJLSBCdWdsZXQgZml4ZWQgaW4gcGFyaXR5IGVycm9yIHJlY292ZXJ5IFNDUklQVFMgKG5ldmVyIHRlc3RlZCkuCisJLSBNaW5vciB1cGRhdGVzIGluIFJFQURNRS5uY3I1M2M4eHguCisKK1dlZCBBcHIgMTUgMjE6MDAgMTk5OCBHZXJhcmQgUm91ZGllciAoZ3JvdWRpZXJAY2x1Yi1pbnRlcm5ldC5mcikKKwkqIHJldmlzaW9uIDIuNmoKKwktIEluY29ycG9yYXRlIGNoYW5nZXMgZnJvbSBsaW51eC0yLjEuOTUgbmNyNTNjOHh4IGRyaXZlciB2ZXJzaW9uLgorCS0gQWRkIFNNUCBzdXBwb3J0IGZvciBsaW51eC0yLjEuOTUgYW5kIGFib3ZlLgorCS0gRml4IGEgYnVnIHdoZW4gUVVFVUUgRlVMTCBpcyByZXR1cm5lZCBhbmQgbm8gY29tbWFuZHMgYXJlIAorCSAgZGlzY29ubmVjdGVkLiBUaGlzIGhhcHBlbnMgd2l0aCBBdGxhcyBJIC8gTDkxMiBhbmQgbWF5IGhhcHBlbiAKKwkgIHdpdGggQXRsYXMgSUkgLyBMWFk0LgorCS0gTmFpbCBhbm90aGVyIG9uZSBvbiBDSEVDSyBjb25kaXRpb24gd2hlbiByZXF1ZXVpbmcgdGhlIGNvbW1hbmQgCisJICBmb3IgYXV0by1zZW5zZS4KKwktIENhbGwgc2NzaV9kb25lKCkgZm9yIGFsbCBjb21wbGV0ZWQgY29tbWFuZHMgYWZ0ZXIgaW50ZXJydXB0IAorCSAgaGFuZGxpbmcuCisJLSBJbmNyZWFzZSB0aGUgZG9uZSBxdWV1ZSB0byAyNCBlbnRyaWVzLgorCitTYXQgQXByIDQgMjA6MDAgMTk5OCBHZXJhcmQgUm91ZGllciAoZ3JvdWRpZXJAY2x1Yi1pbnRlcm5ldC5mcikKKwkqIHJldmlzaW9uIDIuNmkKKwktIENURVNUMCBpcyB1c2VkIGJ5IHRoZSA1M0M4ODUgZm9yIFBvd2VyIE1hbmFnZW1lbnQgYW5kIAorCSAgcHJpb3JpdHkgc2V0dGluZyBiZXR3ZWVuIHRoZSAyIGZ1bmN0aW9ucy4KKwkgIFVzZSBTRElEIGluc3RlYWQgYXMgYWN0dWFsIHRhcmdldCBudW1iZXIuIEp1c3QgaGF2ZSBoYWQgdG8gCisJICBvdmVyd3JpdGUgaXQgd2l0aCBTU0lEIG9uIHJlc2VsZWN0aW9uLgorCS0gU3BsaXQgREFUQV9JTiBhbmQgREFUQV9PVVQgc2NyaXB0cyBpbnRvIDIgc3ViLXNjcmlwdHMuCisJICA2NCBzZWdtZW50cyBhcmUgbW92ZWQgZnJvbSBvbi1jaGlwIFJBTSBzY3JpcHRzLgorCSAgSWYgbW9yZSBzZWdtZW50cywgYSBzY3JpcHQgaW4gbWFpbiBtZW1vcnkgaXMgdXNlZCBmb3IgdGhlIAorCSAgYWRkaXRpb25hbCBzZWdtZW50cy4KKwktIFNpbmNlIHRoZSBTQ1JJUFRTIHByb2Nlc3NvciBjb250aW51ZXMgU0NSSVBUUyBleGVjdXRpb24gYWZ0ZXIgCisJICBoYXZpbmcgd29uIGFyYml0cmF0aW9uLCBkbyBzb21lIHN0dWZmIHByaW9yIHRvIHRlc3RpbmcgYW55IFNDU0kgCisJICBwaGFzZSBvbiByZXNlbGVjdGlvbi4gVGhpcyBzaG91bGQgaGF2ZSB0aGUgdmVydHVlIHRvIHByb2Nlc3MgCisJICBzY3JpcHRzIGluIHBhcmFsbGVsIHdpdGggdGhlIFNDU0kgY29yZSBwZXJmb3JtaW5nIHNlbGVjdGlvbi4KKwktIEluY3JlYXNlIHRoZSBkb25lIHF1ZXVlIHRvIDEyIGVudHJpZXMuCisKK1N1biBNYXIgMjkgMTI6MDAgMTk5OCBHZXJhcmQgUm91ZGllciAoZ3JvdWRpZXJAY2x1Yi1pbnRlcm5ldC5mcikKKwkqIHJldmlzaW9uIDIuNmgKKwktIFNvbWUgZml4ZXMuCisKK1R1ZSBNYXIgMjYgMjM6MDAgMTk5OCBHZXJhcmQgUm91ZGllciAoZ3JvdWRpZXJAY2x1Yi1pbnRlcm5ldC5mcikKKwkqIHJldmlzaW9uIDIuNmcKKwktIE5ldyBkb25lIHF1ZXVlLiA4IGVudHJpZXMgYnkgZGVmYXVsdCAoNiBhbHdheXMgdXNlYWJsZSkuCisJICBDYW4gYmUgaW5jcmVhc2VkIGlmIG5lZWRlZC4KKwktIFJlc291cmNlcyBtYW5hZ2VtZW50IHVzaW5nIGRvdWJseSBsaW5rZWQgcXVldWVzLgorCS0gTmV3IGF1dG8tc2Vuc2UgYW5kIFFVRVVFIEZVTEwgaGFuZGxpbmcgdGhhdCBkb2VzIG5vdCBuZWVkIHRvIAorCSAgc3RhbGwgdGhlIE5DUiBxdWV1ZSBhbnkgbW9yZS4KKwktIE5ldyBDQ0Igc3RhcnZhdGlvbiBhdm9pZGluZyBhbGdvcml0aG0uCisJLSBQcmVwYXJlIENDQnMgZm9yIFNDU0kgY29tbWFuZHMgdGhhdCBjYW5ub3QgYmUgcXVldWVkLCBpbnN0ZWFkIG9mIAorCSAgaW5zZXJ0aW5nIHRoZXNlIGNvbW1hbmRzIGludG8gdGhlIHdhaXRpbmcgbGlzdC4gVGhlIHdhaXRpbmcgbGlzdCAKKwkgIGlzIG5vdyBvbmx5IHVzZWQgd2hpbGUgcmVzZXR0aW5nIGFuZCB3aGVuIG1lbW9yeSBmb3IgQ0NCcyBpcyBub3QgCisJICB5ZXQgYXZhaWxhYmxlPworCitTdW4gRmViIDggMjI6MDAgMTk5OCBHZXJhcmQgUm91ZGllciAoZ3JvdWRpZXJAY2x1Yi1pbnRlcm5ldC5mcikKKwkqIHJldmlzaW9uIDIuNmYKKwktIFNvbWUgZml4ZXMgaW4gb3JkZXIgdG8gcmVhbGx5IHN1cHBvcnQgdGhlIDUzQzg5NSwgYXQgbGVhc3Qgd2l0aCAKKwkgIEZBU1QtMjAgZGV2aWNlcy4KKwktIEhlYXZ5IGNoYW5nZXMgaW4gdGhlIHRhcmdldC9sdW4gcmVzb3VyY2VzIG1hbmFnZW1lbnQgdG8gYWxsb3cgCisJICB0aGUgc2NyaXB0cyB0byBqdW1wIGRpcmVjdGx5IHRvIHRoZSBDQ0Igb24gcmVzZWxlY3Rpb24gaW5zdGVhZCAKKwkgIG9mIHdhbGtpbmcgb24gdGhlIGx1biBDQ0JzIGxpc3QuIFVwIHRvIDMyIHRhZ3MgcGVyIGx1biBhcmUgbm93IAorCSAgc3VwcG9ydGVkIHdpdGhvdXQgc2NyaXB0IHByb2Nlc3NvciBhbmQgUENJIHRyYWZmaWMgb3ZlcmhlYWQuCisKK1N1biBKYW4gMTEgMjI6MDAgMTk5OCBHZXJhcmQgUm91ZGllciAoZ3JvdWRpZXJAY2x1Yi1pbnRlcm5ldC5mcikKKwkqIHJldmlzaW9uIDIuNmQKKwktIG5ldyAoZGlmZmVyZW50ID8pIGltcGxlbWVudGF0aW9uIG9mIHRoZSBzdGFydCBxdWV1ZToKKyAgICAgICAgICBVc2UgYSBzaW1wbGUgQ0FMTCB0byBhIGxhdW5jaCBzY3JpcHQgaW4gdGhlIENDQi4KKwktIGltcGxlbWVudCBhIG1pbmltYWwgZG9uZSBxdWV1ZSAoMSBlbnRyeSA6LSkgKS4KKyAgICAgICAgICB0aGlzIGF2b2lkIHNjYW5uaW5nIGFsbCBDQ0JzIG9uIElOVCBGTFkgKE9ubHkgc2NhbiBhbGwgQ0NCcywgb24gCisgICAgICAgICAgb3ZlcmZsb3cpLiBIaXQgcmF0aW8gaXMgYmV0dGVyIHRoYW4gOTkuOSAlIG9uIG15IHN5c3RlbSwgc28gbm8gCisgICAgICAgICAgbmVlZCB0byBoYXZlIGEgbGFyZ2VyIGRvbmUgcXVldWUuCisJLSBnZW5lcmFsaXphdGlvbiBvZiB0aGUgcmVzdGFydCBvZiBDQ0Igb24gc3BlY2lhbCBjb25kaXRpb24gYXMgCisgICAgICAgICAgQWJvcnQsIFFVRVVFIEZVTEwsIENIRUNLIENPTkRJVElPTi4KKyAgICAgICAgICBUaGlzIGhhcyBiZWVuIGNhbGxlZCAnc2lsbHkgc2NoZWR1bGVyJy4KKwktIG1ha2UgYWxsIHRoZSBwcm9maWxpbmcgY29kZSBjb25kaXRpb25uZWQgYnkgYSBjb25maWcgb3B0aW9uLgorCSAgVGhpcyBzcGFyZSBzb21lIFBDSSB0cmFmZmljIGFuZCBDIGNvZGUgd2hlbiB0aGlzIGZlYXR1cmUgaXMgbm90IAorICAgICAgICAgIG5lZWRlZC4KKwktIGhhbmRsZSBtb3JlIGNsZWFubHkgdGhlIHNpdHVhdGlvbiB3aGVyZSBkaXJlY3Rpb24gaXMgdW5rbm93bi4KKwkgIFRoZSBwb2ludGVycyBwYXRjaGluZyBpcyBub3cgcGVyZm9ybWVkIGJ5IHRoZSBTQ1JJUFRTIHByb2Nlc3Nvci4KKwktIHJlbW92ZSBzb21lIHVzZWxlc3Mgc2NyaXB0cyBpbnN0cnVjdGlvbnMuCisKKwlQb3J0ZWQgZnJvbSBkcml2ZXIgMi41IHNlcmllczoKKyAgICAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJLSBVc2UgRkFTVC01IGluc3RlYWQgb2YgU0xPVyBmb3Igc2xvdyBzY3NpIGRldmljZXMgYWNjb3JkaW5nIHRvIAorCSAgbmV3IFNQSS0yIGRyYWZ0LgorCS0gTWFrZSBzb21lIGNoYW5nZXMgaW4gb3JkZXIgdG8gYWNjb21tb2RhdGUgd2l0aCA4NzUgcmV2IDw9IDMgCisJICBkZXZpY2UgZXJyYXRhIGxpc3RpbmcgMzk3LiBNaW5vciBjb25zZXF1ZW5jZXMgYXJlOgorCSAgLiBMZWF2ZSB1c2Ugb2YgUENJIFdyaXRlIGFuZCBJbnZhbGlkYXRlIHVuZGVyIHVzZXIgY29udHJvbC4KKwkgICAgTm93LCBieSBkZWZhdWx0IHRoZSBkcml2ZXIgZG9lcyBub3QgZW5hYmxlIFBDSSBNV0kgYW5kIG9wdGlvbgorCSAgICAnc3BlY2Y6eScgaXMgcmVxdWlyZWQgaW4gb3JkZXIgdG8gZW5hYmxlIHRoaXMgZmVhdHVyZS4KKwkgIC4gTWVtb3J5IFJlYWQgTGluZSBpcyBub3QgZW5hYmxlZCBmb3IgODc1IGFuZCA4NzUtbGlrZSBjaGlwcy4KKwkgIC4gUHJvZ3JhbW1lZCBidXJzdCBsZW5ndGggc2V0IHRvIDY0IERXT1JEUyAoaW5zdGVhZCBvZiAxMjgpLgorCSAgICAoTm90ZTogU1lNQklPUyB1c2VzIDMyIERXT1JEUyBmb3IgdGhlIFNETVMgQklPUykKKwktIEFkZCAnYnVzY2hrJyBib290IG9wdGlvbi4KKwkgIFRoaXMgb3B0aW9uIGVuYWJsZXMgY2hlY2tpbmcgb2YgU0NTSSBCVVMgZGF0YSBsaW5lcyBhZnRlciBTQ1NJIAorCSAgUkVTRVQgKHNldCBieSBkZWZhdWx0KS4gKFN1Ym1pdHRlZCBieSBSaWNoYXJkIFdhbHRoYW0pLgorCS0gVXBkYXRlIHRoZSBSRUFETUUgZmlsZS4KKwktIERpc3BhdGNoIENPTkRJVElPTiBNRVQgYW5kIFJFU0VSVkFUSU9OIENPTkZMSUNUIHNjc2kgc3RhdHVzIAorCSAgYXMgT0sgZHJpdmVyIHN0YXR1cy4KKwktIFVwZGF0ZSB0aGUgUkVBRE1FIGZpbGUgYW5kIHRoZSBTeW1iaW9zIE5WUkFNIGZvcm1hdCBkZWZpbml0aW9uIAorCSAgd2l0aCByZW1vdmFibGUgbWVkaWEgZmxhZ3MgdmFsdWVzIChhdmFpbGFibGUgd2l0aCBTRE1TIDQuMDkpLgorCS0gU2V2ZXJhbCBQQ0kgY29uZmlndXJhdGlvbiByZWdpc3RlcnMgZml4LXVwcyBmb3IgcG93ZXJwYy4KKwkgIChQYXRjaCBzZW50IGJ5IENvcnQpLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9zY3NpL0NoYW5nZUxvZy5zeW01M2M4eHggYi9Eb2N1bWVudGF0aW9uL3Njc2kvQ2hhbmdlTG9nLnN5bTUzYzh4eApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZjk4NWVjCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9zY3NpL0NoYW5nZUxvZy5zeW01M2M4eHgKQEAgLTAsMCArMSw1OTMgQEAKK1NhdCBNYXkgMTIgMTI6MDAgMjAwMSBHZXJhcmQgUm91ZGllciAoZ3JvdWRpZXJAY2x1Yi1pbnRlcm5ldC5mcikKKwkqIHZlcnNpb24gc3ltNTNjOHh4LTEuNy4zYworCS0gRW5zdXJlIExFREMgYml0IGluIEdQQ05UTCBpcyBjbGVhcmVkIHdoZW4gcmVhZGluZyB0aGUgTlZSQU0uCisJICBGaXggc2VudCBieSBTdGlnIFRlbGZlciA8c3RpZ0BhcGktbmV0d29ya3MuY29tPi4KKwktIEJhY2twb3J0IGZyb20gU1lNLTIgdGhlIHdvcmstYXJvdW5kIHRoYXQgYWxsb3dzIHRvIHN1cHBvcnQgCisJICBoYXJkd2FyZXMgdGhhdCBmYWlsIFBDSSBwYXJpdHkgY2hlY2tpbmcuCisJLSBDaGVjayB0aGF0IHdlIHJlY2VpdmVkIGF0IGxlYXN0IDggYnl0ZXMgb2YgSU5RVUlSWSByZXNwb25zZSAKKwkgIGZvciBieXRlIDcsIHRoYXQgY29udGFpbnMgZGV2aWNlIGNhcGFiaWxpdGllcywgdG8gYmUgdmFsaWQuCisJLSBEZWZpbmUgc2NzaV9zZXRfcGNpX2RldmljZSgpIGFzIG5pbCBmb3Iga2VybmVsIDwgMi40LjQuCisJLSArIEEgY291cGxlIG9mIG1pbm9yIGNoYW5nZXMuCisJICAKK1NhdCBBcHIgNyAxOTozMCAyMDAxIEdlcmFyZCBSb3VkaWVyIChncm91ZGllckBjbHViLWludGVybmV0LmZyKQorCSogdmVyc2lvbiBzeW01M2M4eHgtMS43LjNiCisJLSBGaXggYW4gdW5hbGlnbmVkIExPQUQgZnJvbSBzY3JpcHRzICh3YXMgdXNlZCBhcyBkdW1teSByZWFkKS4KKwktIEluIG5jcl9zb2Z0X3Jlc2V0KCksIG9ubHkgdHJ5IHRvIEFCT1JUIHRoZSBjdXJyZW50IG9wZXJhdGlvbiAKKwkgIGZvciBjaGlwcyB0aGF0IHN1cHBvcnQgU1JVTiBiaXQgaW4gSVNUQVQxIGFuZCBpZiBTQ1JJUFRTIGFyZSAKKwkgIGN1cnJlbnRseSBydW5uaW5nLCBhcyA4OTYgYW5kIDEwMTAgbWFudWFscyBzdWdnZXN0LgorCS0gSW4gdGhlIENDQiBhYm9ydCBwYXRoLCBkbyBub3QgYXNzdW1lIHRoYXQgdGhlIENDQiBpcyBjdXJyZW50bHkgCisJICBxdWV1ZWQgdG8gU0NSSVBUUy4gVGhpcyBpcyBub3QgYWx3YXlzIHRydWUsIG5vdGFibHkgYWZ0ZXIgYSAKKwkgIFFVRVVFIEZVTEwgc3RhdHVzIG9yIHdoZW4gdXNpbmcgdW50YWdnZWQgY29tbWFuZHMuCisKK1N1biBNYXIgNCAxODozMCAyMDAxIEdlcmFyZCBSb3VkaWVyIChncm91ZGllckBjbHViLWludGVybmV0LmZyKQorCSogdmVyc2lvbiBzeW01M2M4eHgtMS43LjNhCisJLSBGaXggYW4gaXNzdWUgaW4gdGhlIG5jcl9pbnRfdWRjKCkgKHVuZXhwZWN0ZWQgZGlzY29ubmVjdCkKKwkgIGhhbmRsaW5nLiBJZiB0aGUgRFNBIGRpZG4ndCBtYXRjaCBhIENDQiwgYSBiYWQgd3JpdGUgdG8gCisJICBtZW1vcnkgY291bGQgaGFwcGVuLgorCitNb24gRmViIDEyIDIyOjMwIDIwMDEgR2VyYXJkIFJvdWRpZXIgKGdyb3VkaWVyQGNsdWItaW50ZXJuZXQuZnIpCisJKiB2ZXJzaW9uIHN5bTUzYzh4eC0xLjcuMworCS0gU3VwcG9ydCBmb3IgaHBwYS4KKwkgIFRpbnkgcGF0Y2ggc2VudCB0byBtZSBieSBSb2JlcnQgSGlyc3QuCisJLSBUaW55IHBhdGNoIGZvciBpYTY0IHNlbnQgdG8gbWUgYnkgUGFtZWxhIERlbGFuZXkuCisKK1R1ZSBGZWIgNiAxMzozMCAyMDAxIEdlcmFyZCBSb3VkaWVyIChncm91ZGllckBjbHViLWludGVybmV0LmZyKQorCSogdmVyc2lvbiBzeW01M2M4eHgtMS43LjMtcHJlMQorCS0gQ2FsbCBwY2lfZW5hYmxlX2RldmljZSgpIGFzIEFDIHdhbnRzIHRoaXMgdG8gYmUgZG9uZS4KKwktIEdldCBib3RoIHRoZSBCQVIgY29va2llcyB1c2VkIGJ5IENQVSBhbmQgYWN0dWFsIFBDSSBCQVIgCisJICB2YWx1ZXMgdXNlZCBmcm9tIFNDUklQVFMuIFJlY2VudCBQQ0kgY2hpcHMgYXJlIGFibGUgdG8gCisJICBhY2Nlc3MgdGhlbXNlbHZlcyB1c2luZyBpbnRlcm5hbCBjeWNsZXMsIGJ1dCB0aGV5IGNvbXBhcmUgCisJICBCQVIgdmFsdWVzIHRvIGRlc3RpbmF0aW9uIGFkZHJlc3MgdG8gbWFrZSBkZWNpc2lvbi4KKwkgIEVhcmxpZXIgY2hpcHMgc2ltcGx5IHVzZSBQQ0kgdHJhbnNhY3Rpb25zIHRvIGFjY2VzcyBJTyAKKwkgIHJlZ2lzdGVycyBmcm9tIFNDUklQVFMuCisJICBUaGUgYnVzX2R2bWFfdG9fbWVtKCkgaW50ZXJmYWNlIHRoYXQgcmV2ZXJzZXMgdGhlIGFjdHVhbCAKKwkgIFBDSSBCQVIgdmFsdWUgZnJvbSB0aGUgQkFSIGNvb2tpZSBpcyBub3cgdXNlbGVzcy4KKwkgIFRoaXMgcG9pbnQgaGFkIGJlZW4gZGlzY3Vzc2VkIGF0IHRoZSBsaXN0IGFuZCB0aGUgc29sdXRpb24gCisJICBnb3QgYXBwcm92ZWQgYnkgUENJIGNvZGUgbWFpbnRhaW5lciAoTWFydGluIE1hcmVzKS4KKwktIE1lcmdlIGNoYW5nZXMgZm9yIGxpbnV4LTIuNCB0aGF0IGRlY2xhcmUgdGhlIGhvc3QgdGVtcGxhdGUgCisJICBpbiB0aGUgZHJpdmVyIG9iamVjdCBhbHNvIHdoZW4gdGhlIGRyaXZlciBpcyBzdGF0aWNhbGx5IAorCSAgbGlua2VkIHdpdGggdGhlIGtlcm5lbC4KKwktIEluY3JlYXNlIFNDU0kgbWVzc2FnZSBzaXplIHVwIHRvIDEyIGJ5dGVzLCBnaXZlbiB0aGF0IDggCisJICBieXRlcyB3YXMgbm90IGVub3VnaCBmb3IgdGhlIFBQUiBtZXNzYWdlIChmaXgpLgorCS0gQWRkIGZpZWxkICdtYXhvZmZzX3N0JyAobWF4IG9mZnNldCBmb3IgU1QgZGF0YSB0cmFuc2ZlcnMpLgorCSAgVGhlIEMxMDEwIHN1cHBvcnRzIG9mZnNldCA2MiBpbiBEVCBtb2RlIGJ1dCBvbmx5IDMxIGluIAorCSAgU1QgbW9kZSwgdG8gMiBkaWZmZXJlbnQgdmFsdWVzIGZvciB0aGUgbWF4IFNDU0kgb2Zmc2V0IAorCSAgYXJlIG5lZWRlZC4gUmVwbGFjZSB0aGUgb2J2aW91c2x5IHdyb25nIG1hc2tpbmcgb2YgdGhlIAorCSAgb2Zmc2V0IGFnYWluc3QgMHgxZiBmb3IgU1QgbW9kZSBieSBhIGxvd2VyaW5nIHRvIAorCSAgbWF4b2Zmc19zdCBvZiB0aGUgU0NTSSBvZmZzZXQgaW4gU1QgbW9kZS4KKwktIFJlZmluZSBhIHdvcmstYXJvdW5kIGZvciB0aGUgQzEwMTAtNjYuIFJldmlzaW9uIDEgZG9lcyAKKwkgIG5vdCByZXF1aXJlcyBleHRyYSBjeWNsZXMgaW4gRFQgREFUQSBPVVQgcGhhc2UuCisJLSBBZGQgYSBtaXNzaW5nIGVuZGlhbi1pemF0aW9uIChhYnJ0X3RibC5hZGRyKS4KKwktIE1pbm9yIGNsZWFuLXVwIGluIHRoZSBucCBzdHJ1Y3R1cmUgZm9yIGZpZWxkcyBhY2Nlc3NlZCAKKwkgIGZyb20gU0NSSVBUUyB0aGF0IHJlcXVpcmVzIHNwZWNpYWwgYWxpZ25tZW50cy4KKworU3VuIFNlcCAyNCAyMTozMCAyMDAwIEdlcmFyZCBSb3VkaWVyIChncm91ZGllckBjbHViLWludGVybmV0LmZyKQorCSogdmVyc2lvbiBzeW01M2M4eHgtMS43LjIKKwktIFJlbW92ZSB0aGUgaGFjayBmb3IgUFBDIGFkZGVkIGluIHByZXZpb3VzIGRyaXZlciB2ZXJzaW9uLgorCS0gQWRkIEZFX0RBQyBmZWF0dXJlIGJpdCB0byBkaXN0aW5ndWlzaCBiZXR3ZWVuIDY0IGJpdCBQQ0kgCisJICBhZGRyZXNzaW5nIChGRV9EQUMpIGFuZCA2NCBiaXQgUENJIGludGVyZmFjZSAoRkVfNjRCSVQpLgorCS0gR2V0IHJpZCBvZiB0aGUgYm9vdCBjb21tYW5kIGxpbmUgInVsdHJhOiIgYXJndW1lbnQuCisJICBUaGlzIHBhcmFtZXRlciB3YXNuJ3QgdGhhdCBjbGV2ZXIgc2luY2Ugd2UgY2FuIHVzZSAic3luYzoiIAorCSAgZm9yIFVsdHJhL1VsdHJhMiBzZXR0aW5ncywgYW5kIGZvciBVbHRyYTMgd2UgbWF5IHdhbnQgdG8gCisJICBwYXNzIFBQUiBvcHRpb25zIChmb3Igbm93IG9ubHkgRFQgY2xvY2tpbmcpLgorCS0gQWRkIEZFX1ZBUkNMSyBmZWF0dXJlIGJpdCB0aGF0IGluZGljYXRlcyB0aGF0IFNDU0kgY2xvY2sgCisJICBmcmVxdWVuY3kgbWF5IHZhcnkgZGVwZW5kaW5nIG9uIGJvYXJkIGRlc2lnbiBhbmQgdGh1cywgCisJICB0aGUgZHJpdmVyIHNob3VsZCB0cnkgdG8gZXZhbHVhdGUgdGhlIFNDU0kgY2xvY2suCisJLSBTaW1wbGlmeSB0aGUgd2F5IHRoZSBkcml2ZXIgZGV0ZXJtaW5lIHRoZSBTQ1NJIGNsb2NrOgorCSAgVUxUUkEzIC0+IDE2MCBNSHosIFVMVFJBMiAtPiA4MCBNSHogb3RoZXJ3aXNlIDQwIE1Iei4KKwkgIE1lYXN1cmUgdGhlIFNDU0kgY2xvY2sgZnJlcXVlbmN5IGlmIEZFX1ZBUkNMSyBpcyBzZXQuCisJLSBSZW1vdmUgRkVfQ0xLODAgZmVhdHVyZSBiaXQgdGhhdCBnb3QgdXNlbGVzcy4KKwktIEFkZCBzdXBwb3J0IGZvciB0aGUgU1lNNTNDODc1QSAoUGFtZWxhIERlbGFuZXkpLgorCitXZWQgSnVsIDI2IDIzOjMwIDIwMDAgR2VyYXJkIFJvdWRpZXIgKGdyb3VkaWVyQGNsdWItaW50ZXJuZXQuZnIpCisJKiB2ZXJzaW9uIHN5bTUzYzh4eC0xLjcuMQorCS0gUHJvdmlkZSBPcGVuRmlybWFyZSBwYXRoIHRocm91Z2ggdGhlIHByb2MgRlMgb24gUFBDLgorCS0gRG93bmxvYWQgb2Ygb24tY2hpcCBTUkFNIHVzaW5nIG1lbWNweV90b2lvKCkgZG9lc24ndCB3b3JrIAorCSAgb24gUFBDLiBSZXN0b3JlIHByZXZpb3VzIG1ldGhvZCAoTUVNT1JZIE1PVkUgZnJvbSBTQ1JJUFRTKS4KKwktIFJlbW92ZSB0cmFpbGluZyBhcmd1bWVudCAjMiBmcm9tIGEgY291cGxlIG9mICN1bmRlZnMuCisKK1N1biBKdWwgMDkgMTY6MzAgMjAwMCBHZXJhcmQgUm91ZGllciAoZ3JvdWRpZXJAY2x1Yi1pbnRlcm5ldC5mcikKKwkqIHZlcnNpb24gc3ltNTNjOHh4LTEuNy4wCisJLSBSZW1vdmUgdGhlIFBST0ZJTEUgQyBhbmQgU0NSSVBUUyBjb2RlLgorCSAgVGhpcyBmYWNpbGl0eSB3YXMgbm90IHRoaXMgdXNlZnVsIGFuZCB0aHVzIHdhcyBub3QgbG9uZ2VyIAorCSAgZGVzaXJhYmxlIGdpdmVuIHRoZSBpbmNyZWFzaW5nIGNvbXBsZXhpdHkgb2YgdGhlIGRyaXZlciBjb2RlLgorCS0gTWVyZ2VzIGZyb20gRnJlZUJTRCBzeW0tMS42LjIgZHJpdmVyOgorCSAgKiBDbGFyaWZ5IG1lbW9yeSBiYXJyaWVycyBuZWVkZWQgYnkgdGhlIGRyaXZlciBmb3IgYXJjaGl0ZWN0dXJlcyAKKwkgICAgdGhhdCBpbXBsZW1lbnQgYSB3ZWFrIG1lbW9yeSBvcmRlcmluZy4KKwkgICogU2ltcGxlciBoYW5kbGluZyBvZiBpbGxlZ2FsIHBoYXNlcyBhbmQgZGF0YSBvdmVycnVuIGZyb20gCisJICAgIFNDUklQVFMuIFRoZXNlIGVycm9ycyBhcmUgbm93IGltbWVkaWF0ZWx5IHJlcG9ydGVkIHRvIAorCSAgICB0aGUgQyBjb2RlIGJ5IGFuIGludGVycnVwdC4KKwkgICogU3luYyB0aGUgcmVzaWR1YWwgaGFuZGxpbmcgY29kZSB3aXRoIHN5bS0xLjYuMiBhbmQgbm93IAorCSAgICByZXBvcnQgYHJlc2lkJyB0byB1c2VyIGZvciBsaW51eCB2ZXJzaW9uID49IDIuMy45OSAKKwktIEdlbmVyYWwgY2xlYW51cDoKKwkgIE1vdmUgZGVmaW5pdGlvbnMgZm9yIGJhcnJpZXJzIGFuZCBJTy9NTUlPIG9wZXJhdGlvbnMgdG8gdGhlIAorCSAgc3ltNTNjOHh4X2RlZnMuaCBoZWFkZXIgZmlsZXMuIFRoZXkgYXJlIG5vdyBzaGFyZWQgYnkgdGhlIAorCSAgYm90aCBkcml2ZXJzLgorCSAgUmVtb3ZlIHVudXNlZCBvcHRpb25zIHRoYXQgY2xhaW1lZCB0byBvcHRpbWl6ZSBmb3IgdGhlIDg5Ni4KKwkgIElmIGZhY3QsIHRoZXkgd2VyZSBub3QgdGhpcyBjbGV2ZXIuIDopCisJICBVc2UgU0NTSV9OQ1JfSU9NQVBQRUQgaW5zdGVhZCBvZiBOQ1JfSU9NQVBQRUQuCisJICBSZW1vdmUgYSBjb3VwbGUgb2YgdW51c2VkIGZpZWxkcyBmcm9tIGRhdGEgc3RydWN0dXJlcy4KKworVGh1IE1heSAxMSAxMjo0MCAyMDAwIFBhbSBEZWxhbmV5IChwYW0uZGVsYW5leUBsc2lsLmNvbSkKKwkqIHZlcnNpb24gc3ltNTNjOHh4LTEuNmIKKwktIE1lcmdlZCB2ZXJzaW9uLgorCitNb24gQXByIDI0IDEyOjAwIDIwMDAgR2VyYXJkIFJvdWRpZXIgKGdyb3VkaWVyQGNsdWItaW50ZXJuZXQuZnIpCisJKiB2ZXJzaW9uIHN5bTUzYzh4eC0xLjVtCisJLSBSZXR1cm4gdmFsdWUgMSAoaW5zdGVhZCBvZiAwKSBmcm9tIHRoZSBkcml2ZXIgc2V0dXAgcm91dGluZS4KKwktIERvIG5vdCBlbmFibGUgUENJIERBQyBjeWNsZXMuIFRoaXMganVzdCBicm9rZSBzdXBwb3J0IGZvciAKKwkgIFNZTTUzNEM4OTYgb24gc3BhcmM2NC4gUHJvYmxlbSBmaXhlZCBieSBEYXZpZCBTLiBNaWxsZXIuCisKK0ZyaSBBcHIgMTQgOTowMCAyMDAwIFBhbSBEZWxhbmV5IChwYW0uZGVsYW5leUBsc2lsLmNvbSkKKwkqIHZlcnNpb24gc3ltNTNjOHh4LTEuNmItOQorCS0gQWRkZWQgNTNDMTAxMF82NiBzdXBwb3J0LgorCS0gU21hbGwgZml4IHRvIGludGVncml0eSBjaGVja2luZyBjb2RlLgorCS0gUmVtb3ZlZCByZXF1aXJlbWVudCBmb3IgaW50ZWdyaXR5IGNoZWNraW5nIGlmIHdhbnQgdG8gcnVuCisJICBhdCB1bHRyYSAzLgorIAorU2F0IEFwciAxICAxMjowMCAyMDAwIEdlcmFyZCBSb3VkaWVyIChncm91ZGllckBjbHViLWludGVybmV0LmZyKQorCSogdmVyc2lvbiBzeW01M2M4eHgtMS41bAorCS0gVGlueSBjaGFuZ2UgZm9yIF9fc3BhcmNfXyBhcHBlYXJlZCBpbiAyLjMuOTktcHJlNC4xIHRoYXQgCisJICBhcHBsaWVzIHRvIGNhY2hlIGxpbmUgc2l6ZSAoPyBQcm9iYWJseSBmcm9tIERhdmlkIFMgTWlsbGVyKS4KKwktIE1ha2Ugc3VyZSBubyBkYXRhIHRyYW5zZmVyIHdpbGwgaGFwcGVuIGZvciBTY3NpX0NtbmQgcmVxdWVzdHMgCisJICB0aGF0IHN1cHBseSBTQ1NJX0RBVEFfTk9ORSBkaXJlY3Rpb24gKHRoaXMgYXZvaWRzIHNvbWUgQlVHKCkgCisJICBzdGF0ZW1lbnQgaW4gdGhlIFBDSSBjb2RlIHdoZW4gYSBkYXRhIGJ1ZmZlciBpcyBhbHNvIHN1cHBsaWVkKS4KKworU2F0IE1hciAxMSAxMjowMCAyMDAwIEdlcmFyZCBSb3VkaWVyIChncm91ZGllckBjbHViLWludGVybmV0LmZyKQorCSogdmVyc2lvbiBzeW01M2M4eHgtMS42Yi01CisJLSBUZXN0IGFnYWluc3QgZXhwZWN0ZWQgZGF0YSB0cmFuc2ZlciBkaXJlY3Rpb24gZnJvbSBTQ1JJUFRTLgorCS0gQWRkIHN1cHBvcnQgZm9yIHRoZSBuZXcgZHluYW1pYyBkbWEgbWFwcGluZyBrZXJuZWwgaW50ZXJmYWNlLgorCSAgUmVxdWlyZXMgTGludXgtMi4zLjQ3ICh0ZXN0ZWQgd2l0aCBwcmUtMi4zLjQ3LTYpLgorCSAgTWFueSB0aGFua3MgdG8gRGF2aWQgUy4gTWlsbGVyIGZvciBoaXMgcHJlbGltaW5hcnkgY2hhbmdlcyAKKwkgIHRoYXQgaGF2ZSBiZWVuIHVzZWZ1bCBndWlkZWxpbmVzLgorCS0gR2V0IGRhdGEgdHJhbnNmZXIgZGlyZWN0aW9uIGZyb20gdGhlIHNjc2kgY29tbWFuZCBzdHJ1Y3R1cmUgCisJICAoU2NzaV9DbW5kKSB3aXRoIGtlcm5lbHMgdGhhdCBwcm92aWRlIHRoaXMgaW5mb3JtYXRpb24uCisKK01vbiBNYXIgIDYgMjM6MzAgMjAwMCBHZXJhcmQgUm91ZGllciAoZ3JvdWRpZXJAY2x1Yi1pbnRlcm5ldC5mcikKKwkqIHZlcnNpb24gc3ltNTNjOHh4LTEuNWsKKwktIFRlc3QgYWdhaW5zdCBleHBlY3RlZCBkYXRhIHRyYW5zZmVyIGRpcmVjdGlvbiBmcm9tIFNDUklQVFMuCisJLSBSZXZlcnQgdGhlIGNoYW5nZSBpbiAnbmNyX2ZsdXNoX2RvbmVfY21kcygpJyBidXQgdW5tYXAgdGhlIAorCSAgc2NzaSBkbWEgYnVmZmVyIHByaW9yIHRvIHF1ZXVlaW5nIHRoZSBjb21tYW5kIHRvIG91ciBkb25lIAorCSAgbGlzdC4KKwktIE1pc2NlbGxhbmVvdXMgKG1pbm9yKSBmaXhlcyBpbiB0aGUgY29kZSBhZGRlZCBpbiBkcml2ZXIgCisJICB2ZXJzaW9uIDEuNWouCisKK01vbiBGZWIgMTQgNDowMCAyMDAwIFBhbSBEZWxhbmV5IChwYW0uZGVsYW5leUBsc2lsLmNvbSkKKyAJKiB2ZXJzaW9uIHN5bTUzYzh4eC1wcmUtMS42Yi0yLgorCS0gVXBkYXRlZCB0aGUgU0NSSVBUUyBlcnJvciBoYW5kbGluZyBvZiB0aGUgU1dJREUKKwkgIGNvbmRpdGlvbiAtIHRvIHJlbW92ZSBhbnkgcmVhZHMgb2YgdGhlIHNiZGwKKwkgIHJlZ2lzdGVyLiBDaGFuZ2VzIG5lZWRlZCBiZWNhdXNlIHRoZSA4OTYgYW5kIDEwMTAKKwkgIGNoaXBzIHdpbGwgY2hlY2sgcGFyaXR5IGluIHNvbWUgc3BlY2lhbCBjaXJjdW1zdGFuY2VzLgorCSAgVGhpcyB3aWxsIGNhdXNlIGEgcGFyaXR5IGVycm9yIGludGVycnVwdCBpZiBub3QgaW4KKwkgIGRhdGEgcGhhc2UuICBDaGFuZ2VzIGJhc2VkIG9uIHRob3NlIG1hZGUgaW4gdGhlCisJICBGcmVlQlNEIGRyaXZlciB2ZXJzaW9uIDEuMy4yLgorCitTdW4gRmViIDIwIDExOjAwIDIwMDAgR2VyYXJkIFJvdWRpZXIgKGdyb3VkaWVyQGNsdWItaW50ZXJuZXQuZnIpCisJKiB2ZXJzaW9uIHN5bTUzYzh4eC0xLjVqCisJLSBBZGQgc3VwcG9ydCBmb3IgdGhlIG5ldyBkeW5hbWljIGRtYSBtYXBwaW5nIGtlcm5lbCBpbnRlcmZhY2UuCisJICBSZXF1aXJlcyBMaW51eC0yLjMuNDcgKHRlc3RlZCB3aXRoIHByZS0yLjMuNDctNikuCisJICBNYW55IHRoYW5rcyB0byBEYXZpZCBTLiBNaWxsZXIgZm9yIGhpcyBwcmVsaW1pbmFyeSBjaGFuZ2VzIAorCSAgdGhhdCBoYXZlIGJlZW4gdXNlZnVsIGd1aWRlbGluZXMsIGZvciBoYXZpbmcgcmV2aWV3ZWQgdGhlIAorCSAgY29kZSBhbmQgaGF2aW5nIHRlc3RlZCB0aGlzIGRyaXZlciB2ZXJzaW9uIG9uIFVsdHJhLVNwYXJjLgorCS0gMiB0aW55IGJ1Z3MgZml4ZWQgaW4gdGhlIFBDSSB3cmFwcGVyIHRoYXQgcHJvdmlkZXMgc3VwcG9ydCAKKwkgIGZvciBlYXJseSBrZXJuZWxzIHdpdGhvdXQgcGNpIGRldmljZSBzdHJ1Y3R1cmUuCisJLSBHZXQgZGF0YSB0cmFuc2ZlciBkaXJlY3Rpb24gZnJvbSB0aGUgc2NzaSBjb21tYW5kIHN0cnVjdHVyZSAKKwkgIChTY3NpX0NtbmQpIHdpdGgga2VybmVscyB0aGF0IHByb3ZpZGUgdGhpcyBpbmZvcm1hdGlvbi4KKwktIEZpeCBhbiBvbGQgYnVnIHRoYXQgb25seSBhZmZlY3RlZCA4OTYgcmV2LiAxIHdoZW4gZHJpdmVyIAorCSAgcHJvZmlsZSBzdXBwb3J0IG9wdGlvbiB3YXMgc2V0IGluIGtlcm5lbCBjb25maWd1cmF0aW9uLgorCitGcmkgSmFuIDE0IDE0OjAwIDIwMDAgUGFtIERlbGFuZXkgKHBhbS5kZWxhbmV5QGxzaWwuY29tKQorIAkqIHZlcnNpb24gc3ltNTNjOHh4LXByZS0xLjZiLTEuCisJLSBNZXJnZSBwYXJhbGxlbCBkcml2ZXIgc2VyaWVzIDEuNjEgYW5kIDEuNWUgCisKK1R1ZSBKYW4gMTEgMTQ6MDAgMjAwMCBQYW0gRGVsYW5leSAocGFtLmRlbGFuZXlAbHNpbC5jb20pCisJKiB2ZXJzaW9uIHN5bTUzYzh4eC0xLjYxCisJLSBBZGRlZCBzdXBwb3J0IGZvciBtb3VudGluZyBkaXNrcyBvbiB3aWRlLW5hcnJvdy13aWRlCisJICBzY3NpIGNvbmZpZ3VyYXRpb25zLiAKKwktIE1vZGlmaWVkIG9mZnNldCB0byBiZSBhIG1heGltdW0gb2YgMzEgaW4gU1QgbW9kZSwgCisJICA2MiBpbiBEVCBtb2RlLgorCS0gQmFzZWQgb2ZmIG9mIDEuNjAKKworTW9uIEphbiAxMCAxMDowMCAyMDAwIFBhbSBEZWxhbmV5IChwYW0uZGVsYW5leUBsc2lsLmNvbSkKKwkqIHZlcnNpb24gc3ltNTNjOHh4LTEuNjAKKwktIEFkZGVkIGNhcGFiaWxpdHkgdG8gdXNlIHRoZSBpbnRlZ3JpdHkgY2hlY2tpbmcgY29kZQorCSAgaW4gdGhlIGtlcm5lbCAob3B0aW9uYWwpLgorCS0gIEFkZGVkIFBQUiBuZWdvdGlhdGlvbi4KKwktIEFkZGVkIHN1cHBvcnQgZm9yIDUzQzEwMTAgVWx0cmEgMyBwYXJ0LgorCS0gQmFzZWQgb2ZmIG9mIDEuNWYKKworU2F0IEphbiA4ICAyMjowMCAyMDAwIEdlcmFyZCBSb3VkaWVyIChncm91ZGllckBjbHViLWludGVybmV0LmZyKQorCSogdmVyc2lvbiBzeW01M2M4eHgtMS41aAorCS0gQWRkIHllYXIgMjAwMCBjb3B5cmlnaHQuCisJLSBEaXNwbGF5IGNvcnJlY3RseSBidXMgc2lnbmFscyB3aGVuIGJ1cyBpcyBkZXRlY3RlZCB3cm9uZy4KKwktIFNvbWUgZml4IGZvciBTcGFyYyBmcm9tIERTTSB0aGF0IHdlbnQgZGlyZWN0bHkgdG8ga2VybmVsIHRyZWUuCisKK01vbiBEZWMgNiAgMjI6MDAgMTk5OSBHZXJhcmQgUm91ZGllciAoZ3JvdWRpZXJAY2x1Yi1pbnRlcm5ldC5mcikKKwkqIHZlcnNpb24gc3ltNTNjOHh4LTEuNWcKKwktIENoYW5nZSBtZXNzYWdlcyB3cml0dGVuIGJ5IHRoZSBkcml2ZXIgYXQgaW5pdGlhbGlzYXRpb24gYW5kIAorCSAgdGhyb3VnaCB0aGUgL3Byb2MgRlMgKHJhdGhlciBjb3NtZXRpYyBjaGFuZ2VzIHRoYXQgY29uc2lzdCBpbgorCSAgcHJpbnRpbmcgb3V0IHRoZSBQQ0kgYnVzIG51bWJlciBhbmQgUENJIGRldmljZS9mdW5jdGlvbikuCisJLSBFbnN1cmUgdGhlIFNDUklQVFMgcHJvY2Vzc29yIGlzIHN0b3BwZWQgd2hpbGUgY2FsaWJyYXRpbmcgdGhlIAorCSAgU0NTSSBjbG9jayAodGhlIGluaXRpYWxpc2F0aW9uIGNvZGUgaGFzIGJlZW4gYSBiaXQgcmV3b3JrZWQpLgorCSAgQ2hhbmdlIG1vdmVkIHRvIHRoZSBGcmVlQlNEIHN5bV9oaXBkIGRyaXZlcikuCisJLSBTb21lIGZpeGVzIGluIHRoZSBNT0RJRllfRFAvSUdOX1JFU0lEVUUgY29kZSBhbmQgcmVzaWR1YWwgCisJICBjYWxjdWxhdGlvbiAobW92ZWQgZnJvbSBGcmVlQlNEIHN5bV9oaXBkIGRyaXZlcikuCisJLSBBZGQgTlZSQU0gc3VwcG9ydCBmb3IgVGVrcmFtIGJvYXJkcyB0aGF0IHVzZSAyNEMxNiBFRVBST00uCisJICBDb2RlIG1vdmVkIGZyb20gdGhlIEZyZWVCU0Qgc3ltX2hpcGQgZHJpdmVyLCBzaW5jZSBpdCBoYXMgCisJICBiZWVuIHRoYXQgb25lIHRoYXQgZ290IHRoaXMgZmVhdHVyZSBmaXJzdC4KKwktIERlZmluaXRlbHkgZGlzYWJsZSBvdmVybGFwcGVkIFBDSSBhcmJpdHJhdGlvbiBmb3IgYWxsIGR1YWwgCisJICBmdW5jdGlvbiBjaGlwcywgc2luY2UgSSBjYW5ub3QgbWFrZSBzdXJlIGZvciB3aGF0IGNoaXAgcmV2aXNpb25zIAorCSAgaXQgaXMgYWN0dWFsbHkgc2FmZS4KKwktIEFkZCBzdXBwb3J0IGZvciB0aGUgU1lNNTNDMTUxMEQgKGFsc28gZm9yIG5jcjUzYzh4eCkuCisJLSBGaXggdXAgcHJvcGVybHkgdGhlIFBDSSBsYXRlbmN5IHRpbWVyIHdoZW4gbmVlZGVkIG9yIGFza2VkIGZvci4KKwktIEdldCByaWQgb2YgdGhlIG9sZCBQQ0kgYmlvcyBpbnRlcmZhY2UsIGJ1dCBwcmVzZXJ2ZSBrZXJuZWwgMi4wIAorCSAgY29tcGF0aWJpbGl0eSBmcm9tIGEgc2ltcGxlIHdyYXBwZXIuCisJLSBVcGRhdGUgdGhlIHBvb3IgVGVrcmFtIHN5bmMgZmFjdG9yIHRhYmxlLgorCS0gRml4IGluIGEgdGlueSAncHJpbnRrJyBidWcgdGhhdCBtYXkgb29wcyBpbiBjYXNlIG9mIGV4dGVuZGVkIAorCSAgZXJyb3JzICh1bnJlY292ZXJlZCBwYXJpdHkgZXJyb3IsIGRhdGEgb3ZlcnJ1biwgZXRjIC4uLikKKwkgIChTZW50IGJ5IFBhbWVsYSBEZWxhbmV5IGZyb20gTFNJTE9HSUMpCisJLSBSZW1vdmUgdGhlIGNvbXBpbGF0aW9uIGNvbmRpdGlvbiBhYm91dCBoYXZpbmcgdG8gYWNxdWlyZSB0aGUgCisJICBpb19yZXF1ZXN0X2xvY2sgc2luY2UgaXQgc2VlbXMgdG8gYmUgYSBkZWZpbml0ZSBmZWF0dXJlIG5vdy46KQorCS0gQ2hhbmdlIGdldF9wYWdlcyBieSBHZXRQYWdlcyBzaW5jZSBMaW51eCA+PSAyLjMuMjcgbm93IHdhbnRzIAorCSAgZ2V0X3BhZ2VzIHRvIGV2ZXIgYmUgdXNlZCBhcyBhIGtlcm5lbCBzeW1ib2wgKGZyb20gMi4zLjI3KS4KKwktIHByb2NfZGlyIHN0cnVjdHVyZSBubyBsb25nZXIgbmVlZGVkIGZvciBrZXJuZWwgPj0gMi4zLjI3LgorCitTdW4gT2N0ICAzICAxOTowMCAxOTk5IEdlcmFyZCBSb3VkaWVyIChncm91ZGllckBjbHViLWludGVybmV0LmZyKQorCSogdmVyc2lvbiBzeW01M2M4eHgtMS41ZgorCS0gQ2hhbmdlIHRoZSB3YXkgdGhlIGRyaXZlciBjaGVja3MgdGhlIFBDSSBjbG9jayBmcmVxdWVuY3ksIHNvIAorCSAgdGhhdCBvdmVyY2xvY2tlZCBQQ0kgQlVTIHVwIHRvIDQ4IE1IeiB3aWxsIG5vdCBiZSByZWZ1c2VkLgorCSAgVGhlIG1vcmUgdGhlIEJVUyBpcyBvdmVyY2xvY2tlZCwgdGhlIGxlc3MgdGhlIGRyaXZlciB3aWxsIAorCSAgZ3VhcmFudGVlIHRoYXQgaXRzIG1lYXN1cmUgb2YgdGhlIFNDU0kgY2xvY2sgaXMgY29ycmVjdC4KKwktIEJhY2twb3J0IHNvbWUgbWlub3IgaW1wcm92ZW1lbnRzIG9mIFNDUklQVFMgZnJvbSB0aGUgc3ltX2hpcGQgCisJICBkcml2ZXIuCisJLSBCYWNrcG9ydCB0aGUgY29kZSByZXdyaXRlIG9mIHRoZSBTVEFSVCBRVUVVRSBkZXF1ZXVpbmcgKG9uIAorCSAgYmFkIHNjc2kgc3RhdHVzIHJlY2VpdmVkKSBmcm9tIHRoZSBzeW1faGlwZCBkcml2ZXIuCisKK1NhdCBTZXAgMTEgIDExOjAwIDE5OTkgR2VyYXJkIFJvdWRpZXIgKGdyb3VkaWVyQGNsdWItaW50ZXJuZXQuZnIpCisJKiB2ZXJzaW9uIHN5bTUzYzh4eC0xLjVlCisJLSBOZXcgbGludXgtMi4zLjEzIF9fc2V0dXAgc2NoZW1lIHN1cHBvcnQgYWRkZWQuCisJLSBDbGVhbnVwIG9mIHRoZSBleHRlbmRlZCBlcnJvciBzdGF0dXMgaGFuZGxpbmc6CisJICBVc2UgMSBiaXQgcGVyIGVycm9yIHR5cGUuCisJLSBBbHNvIHNhdmUgdGhlIGV4dGVuZGVkIGVycm9yIHN0YXR1cyBwcmlvciB0byBhdXRvLXNlbnNlLgorCS0gQWRkIHRoZSBGRV9ESUZGIGNoaXAgZmVhdHVyZSBiaXQgdG8gaW5kaWNhdGUgc3VwcG9ydCBvZiAKKwkgIGRpZmYgcHJvYmluZyBmcm9tIEdQSU8zICg4MjUvODI1QS84NzYvODc1KS4KKwktIFJlbW92ZSB0aGUgcXVpcmsgaGFuZGxpbmcgdGhhdCBoYXMgYmVlbiB1c2VsZXNzIHNpbmNlIGRheSBvbmUuCisJLSBXb3JrLWFyb3VuZCBQQ0kgY2hpcHMgYmVpbmcgcmVwb3J0ZWQgdHdpY2Ugb24gc29tZSBwbGF0Zm9ybXMuCisJLSBBZGQgc29tZSByZWR1bmRhbnQgUENJIHJlYWRzIGluIG9yZGVyIHRvIGRlYWwgd2l0aCBjb21tb24gCisJICBicmlkZ2UgbWlzYmVoYXZpb3VyIHJlZ2FyZGluZyBwb3N0ZWQgd3JpdGUgZmx1c2hpbmcuCisJLSBBZGQgc29tZSBvdGhlciBjb25kaXRpb25uYWwgY29kZSBmb3IgcGVvcGxlIHdobyBoYXZlIHRvIGRlYWwgCisJICB3aXRoIHJlYWxseSBicm9rZW4gYnJpZGdlcyAodGhleSB3aWxsIGhhdmUgdG8gZWRpdCBhIHNvdXJjZSAKKwkgIGZpbGUgdG8gdHJ5IHRoZXNlIG9wdGlvbnMpLgorCS0gSGFuZGxlIGNvcnJlY3RseSAoaG9wZWZ1bGx5KSBqaWZmaWVzIHdyYXAtYXJvdW5kLgorCS0gUmVzdG9yZSB0aGUgZW50cnkgdXNlZCB0byBkZXRlY3QgODc1IHVudGlsIHJldmlzaW9uIDB4ZmYuCisJICAoSSByZW1vdmVkIGl0IGluYWR2ZXJ0ZW50bHksIGl0IHNlZW1zIDopICkKKwktIFJlcGxhY2UgX19pbml0ZnVuYygpIHdoaWNoIGlzIGRlcHJlY2F0ZWQgc3R1ZmYgYnkgX19pbml0IHdoaWNoIAorCSAgaXMgbm90IHlldCBzby4gOy0pCisJLSBSZXdyaXRlIHRoZSBNRVNTQUdFIElOIHNjcmlwdHMgbW9yZSBnZW5lcmljIGJ5IHVzaW5nIGEgTU9WRSAKKwkgIHRhYmxlIGluZGlyZWN0LiBFeHRlbmRlZCBtZXNzYWdlcyBvZiBhbnkgc2l6ZSBhcmUgYWNjZXB0ZWQgbm93LgorCSAgKFNpemUgaXMgbGltaXRlZCB0byA4IGZvciBub3csIGJ1dCBhIGNvbnN0YW50IGlzIGp1c3QgdG8gYmUgCisJICBpbmNyZWFzZWQgaWYgbmVjZXNzYXJ5KQorCS0gRml4IHNvbWUgYnVnIGluIHRoZSBmdWxseSB1bnRlc3RlZCBNRFAgaGFuZGxpbmc6KSBhbmQgc2hhcmUgCisJICBzb21lIGNvZGUgYmV0d2VlbiBNRFAgaGFuZGxpbmcgYW5kIHJlc2lkdWFsIGNhbGN1bGF0aW9uLgorCS0gQ2FsY3VsYXRlIHRoZSBkYXRhIHRyYW5zZmVyIHJlc2lkdWFsIGFzIHRoZSAyJ3MgY29tcGxlbWVudCAKKwkgIGludGVnZXIgKEEgcG9zaXRpdmUgdmFsdWUgaW4gcmV0dXJuZWQgb24gZGF0YSBvdmVycnVuLCBhbmQgCisJICBhIG5lZ2F0aXZlIG9uZSBvbiB1bmRlcnJ1bikuCisJLSBBZGQgc3VwcG9ydCBvZiBzb21lICdyZXNvdXJjZSBoYW5kbGluZycgZm9yIGxpbnV4LTIuMy4xMy4KKwkgIEJhc2ljYWxseSB0aGUgQkFScyBoYXZlIGJlZW4gY2hhbmdlZCB0byBzb21ldGhpbmcgbW9yZSBjb21wbGV4IAorCSAgaW4gdGhlIHBjaV9kZXYgc3RydWN0dXJlLgorCS0gUmVtb3ZlIHNvbWUgZGVwcmVjYXRlZCBjb2RlLgorCitTYXQgSnVuICA1ICAxMTowMCAxOTk5IEdlcmFyZCBSb3VkaWVyIChncm91ZGllckBjbHViLWludGVybmV0LmZyKQorCSogdmVyc2lvbiBzeW01M2M4eHgtMS41YworCS0gRG8gbm90IG5lZ290aWF0ZSBvbiBhdXRvLXNlbnNlIGlmIHdlIGFyZSBjdXJyZW50bHkgdXNpbmcgOCBiaXQgCisJICBhc3luYyB0cmFuc2ZlciBmb3IgdGhlIHRhcmdldC4KKwktIE9ubHkgY2hlY2sgZm9yIFNJU0wvUkFJRCBvbiBpMzg2IHBsYXRmb3Jtcy4KKwkgIChBIHByb2JsZW0gaGFzIGJlZW4gcmVwb3J0ZWQgb24gUFBDIHdpdGggdGhhdCBjb2RlKS4KKwktIE9uIE1TRyBSRUpFQ1QgZm9yIGEgbmVnb3RpYXRpb24sIHRoZSBkcml2ZXIgYXR0ZW1wdGVkIHRvIHJlc3RhcnQgCisJICB0aGUgU0NSSVBUIHByb2Nlc3NvciB3aGVuIHRoaXMgb25lIHdhcyBhbHJlYWR5IHJ1bm5pbmcuCisKK1NhdCBNYXkgMjkgIDEyOjAwIDE5OTkgR2VyYXJkIFJvdWRpZXIgKGdyb3VkaWVyQGNsdWItaW50ZXJuZXQuZnIpCisJKiB2ZXJzaW9uIHN5bTUzYzh4eC0xLjViCisJLSBGb3JjZSBuZWdvdGlhdGlvbiBwcmlvciBhdXRvLXNlbnNlLgorCSAgVGhpcyBlbnN1cmVzIHRoYXQgdGhlIGRyaXZlciB3aWxsIGJlIGFibGUgdG8gZ3JhYiB0aGUgc2Vuc2UgZGF0YSAKKwkgIGZyb20gYSBkZXZpY2UgdGhhdCBoYXMgcmVjZWl2ZWQgYSBCVVMgREVWSUNFIFJFU0VUIG1lc3NhZ2UgZnJvbSAKKwkgIGFub3RoZXIgaW5pdGlhdG9yLgorCS0gQ29tcGxldGUgYWxsIGRpc2Nvbm5lY3RlZCBDQ0JzIGZvciBhIGxvZ2ljYWwgVU5JVCBpZiB3ZSBhcmUgdG9sZCAKKwkgIGFib3V0IGEgVU5JVCBBVFRFTlRJT04gZm9yIGEgUkVTRVQgY29uZGl0aW9uIGJ5IHRoaXMgdGFyZ2V0LgorCS0gQWRkIHRoZSBjb250cm9sIGNvbW1hbmQgJ2NsZWFyZGV2JyB0aGF0IGFsbG93cyB0byBzZW5kIGEgQUJPUlQgIAorCSAgbWVzc2FnZSB0byBhIGxvZ2ljYWwgVU5JVCAoZm9yIHRlc3QgcHVycG9zZSkuCisKK1R1ZSBNYXkgMjUgIDIzOjAwIDE5OTkgR2VyYXJkIFJvdWRpZXIgKGdyb3VkaWVyQGNsdWItaW50ZXJuZXQuZnIpCisJKiB2ZXJzaW9uIHN5bTUzYzh4eC0xLjVhCisJLSBBZGQgc3VwcG9ydCBmb3IgdGFzayBhYm9ydCBhbmQgYnVzIGRldmljZSByZXNldCBTQ1NJIG1lc3NhZ2UgCisJICBhbmQgaW1wbGVtZW50IHByb3BlciBzeW5jaG9uaXNhdGlvbiB3aXRoIFNDUklQVFMgdG8gaGFuZGxlIAorICAgICAgICAgIGNvcnJlY3RseSB0YXNrIGFib3J0aW9uIHdpdGhvdXQgcmFjZXMuCisJLSBTZW5kIGFuIEFCT1JUIG1lc3NhZ2UgKGlmIHVudGFnZ2VkKSBvciBBQk9SVCBUQUcgbWVzc2FnZSAoaWYgdGFnZ2VkKQorCSAgd2hlbiB0aGUgZHJpdmVyIGlzIHRvbGQgdG8gYWJvcnQgYSBjb21tYW5kIHRoYXQgaXMgZGlzY29ubmVjdGVkIGFuZCAKKwkgIGNvbXBsZXRlIHRoZSBjb21tYW5kIHdpdGggYXBwcm9wcmlhdGUgZXJyb3IuCisJICBJZiB0aGUgYWJvcnRlZCBjb21tYW5kIGlzIG5vdCB5ZXQgc3RhcnRlZCwgcmVtb3ZlIGl0IGZyb20gdGhlIHN0YXJ0IAorCSAgcXVldWUgYW5kIGNvbXBsZXRlIGl0IHdpdGggZXJyb3IuCisJLSBBZGQgdGhlIGNvbnRyb2wgY29tbWFuZCAncmVzZXRkZXYnIHRoYXQgYWxsb3dzIHRvIHNlbmQgYSBCVVMgCisJICBERVZJQ0UgUkVTRVQgbWVzc2FnZSB0byBhIHRhcmdldCAoZm9yIHRlc3QgcHVycG9zZSkuCisJLSBDbGVhbi11cCBzb21lIHVudXNlZCBvciB1c2VsZXNzIGNvZGUuCisKK0ZyaSBNYXkgMjEgIDIzOjAwIDE5OTkgR2VyYXJkIFJvdWRpZXIgKGdyb3VkaWVyQGNsdWItaW50ZXJuZXQuZnIpCisJKiB2ZXJzaW9uIHN5bTUzYzh4eC0xLjUKKwktIEFkZCBzdXBwb3J0IGZvciBDSE1PViB3aXRoIFdpZGUgY29udHJvbGxlcnMuCisJLSBIYW5kbGluZyBvZiB0aGUgU1dJREUgKGxvdyBieXRlIHJlc2lkdWUgYXQgdGhlIGVuZCBvZiBhIENITU9WIAorCSAgaW4gREFUQSBJTiBwaGFzZSB3aXRoIFdJREUgdHJhbnNmZXIgd2hlbiB0aGUgYnl0ZSBjb3VudCBnZXRzIG9kZCkuCisJLSBIYW5kbGluZyBvZiB0aGUgSUdOT1JFIFdJREUgUkVTSURVRSBtZXNzYWdlLgorCSAgSGFuZGxlZCBmcm9tIFNDUklQVFMgYXMgcG9zc2libGUgd2l0aCBzb21lIG9wdGltaXphdGlvbnMgd2hlbiBib3RoIAorCSAgYSB3aWRlIGRldmljZSBhbmQgdGhlIGNvbnRyb2xsZXIgYXJlIG9kZCBhdCB0aGUgc2FtZSB0aW1lIChTV0lERSAKKwkgIHByZXNlbnQgYW5kIElHTk9SRSBXSURFIFJFU0lEVUUgbWVzc2FnZSBvbiB0aGUgQlVTIGF0IHRoZSBzYW1lIHRpbWUpLgorCS0gQ2hlY2sgYWdhaW5zdCBkYXRhIE9WRVJSVU4vVU5ERVJSVU4gY29uZGl0aW9uIGF0IHRoZSBlbmQgb2YgYSBkYXRhIAorCSAgdHJhbnNmZXIsIHdoYXRldmVyIGEgU1dJREUgaXMgcHJlc2VudCAoT1ZFUlJVTiBpbiBEQVRBIElOIHBoYXNlKSAKKwkgIG9yIHRoZSBTT0RMIGlzIGZ1bGwgKFVOREVSUlVOIGluIERBVEEgb3V0IHBoYXNlKS4KKwktIEhhbmRsaW5nIG9mIHRoZSBNT0RJRlkgREFUQSBQT0lOVEVSIG1lc3NhZ2UuCisJICBUaGlzIG9uZSBjYW5ub3QgYmUgaGFuZGxlZCBmcm9tIFNDUklQVFMsIGJ1dCBob3BlZnVsbHkgaXQgd2lsbCBub3QKKwkgIGhhcHBlbiB2ZXJ5IG9mdGVuLiA6KQorCS0gTGFyZ2UgcmV3cml0ZSBvZiB0aGUgU0NTSSBNRVNTQUdFIGhhbmRsaW5nLgorCitTdW4gTWF5IDkgIDExOjAwIDE5OTkgR2VyYXJkIFJvdWRpZXIgKGdyb3VkaWVyQGNsdWItaW50ZXJuZXQuZnIpCisJKiB2ZXJzaW9uIHN5bTUzYzh4eC0xLjQKKwktIFN1cHBvcnQgZm9yIElNTUVESUFURSBBUkJJVFJBVElPTi4KKwkgIFNlZSB0aGUgUkVBRE1FIGZpbGUgZm9yIGRldGFpbGVkIGluZm9ybWF0aW9uIGFib3V0IHRoaXMgZmVhdHVyZS4KKwkgIFJlcXVpcmVzIGJvdGggYSBjb21waWxlIG9wdGlvbiBhbmQgYSBib290IG9wdGlvbi4KKwktIE1pbm9yIFNDUklQVFMgb3B0aW1pemF0aW9uIGluIHJlc2VsZWN0aW9uIHBhdHRlcm4gZm9yIExVTiAwLgorCS0gU2ltcGxlciBhbGdvcml0aG0gdG8gZGVhbCB3aXRoIFNDU0kgY29tbWFuZCBzdGFydmF0aW9uLgorCSAgSnVzdCB1c2UgMiB0YWcgY291bnRlcnMgaW4gZmxpcC9mbG9wIGFuZCBzd2l0Y2ggdG8gdGhlIG90aGVyIAorCSAgb25lIGV2ZXJ5IDMgc2Vjb25kcy4KKwktIERvIHNvbWUgd29yayBpbiBTQ1JJUFRTIGFmdGVyIHRoZSBTRUxFQ1QgaW5zdHJ1Y3Rpb24gYW5kIHByaW9yIAorCSAgdG8gdGVzdGluZyBmb3IgYSBQSEFTRS4gU1lNQklPUyBzYXkgdGhpcyBmZWF0dXJlIGlzIHdvcmtpbmcgZmluZS4gCisJICAoQnR3LCBvbmx5IHByb2JsZW1zIHdpdGggVG9zaGliYSAzNDAxQiBoYWQgYmVlbiByZXBvcnRlZCkuCisJLSBNZWFzdXJlIHRoZSBQQ0kgY2xvY2sgc3BlZWQgYW5kIGRvIG5vdCBhdHRhY2ggY29udHJvbGxlcnMgaWYgCisJICByZXN1bHQgaXMgZ3JlYXRlciB0aGFuIDM3IE1Iei4gU2luY2UgdGhlIHByZWNpc2lvbiBvZiB0aGUgCisJICBhbGdvcml0aG0gKGZyb20gU3RlZmFuIEVzc2VyKSBpcyBiZXR0ZXIgdGhhbiAyJSwgdGhpcyBzaG91bGQgCisJICBiZSBmaW5lLgorCS0gRml4IHRoZSBtaXNkZXRlY3Rpb24gb2YgU1lNNTNDODc1RSAod2FzIGRldGVjdGVkIGFzIGEgODc2KS4KKwktIEZpeCB0aGUgbWlzZGV0ZWN0aW9uIG9mIFNZTTUzQzgxMCBub3QgQSAod2FzIGRldGVjdGVkIGFzIGEgODEwQSkuCisJLSBTdXBwb3J0IGZvciB1cCB0byAyNTYgVEFHUyBwZXIgTFVOIChDTURfUEVSX0xVTikuCisJICBDdXJyZW50bHkgbGltaXRlZCB0byAyNTUgZHVlIHRvIExpbnV4IGxpbWl0YXRpb24uIDopCisJLSBTdXBwb3J0IGZvciB1cCB0byA1MDggYWN0aXZlIGNvbW1hbmRzIChDQU5fUVVFVUUpLgorCS0gU3VwcG9ydCBmb3IgdGhlIDUzQzg5NUEgYnkgUGFtZWxhIERlbGFuZXkgPHBhbS5kZWxhbmV5QGxzaWwuY29tPgorCSAgVGhlIDUzQzg5NUEgY29udGFpbnMgYWxsIG9mIHRoZSBmZWF0dXJlcyBvZiB0aGUgODk2IGJ1dCBoYXMgb25seSAKKwkgIG9uZSBjaGFubmVsIGFuZCBoYXMgYSAzMiBiaXQgUENJIGJ1cy4gSXQgZG9lcyA2NCBiaXQgUENJIGFkZHJlc3NpbmcgCisJICB1c2luZyBkdWFsIGN5Y2xlIFBDSSBkYXRhIHRyYW5zZmVycy4KKwktIE1pc2NlbGxhbmVvdXMgbWlub3IgZml4ZXMuCisJLSBTb21lIGFkZGl0aW9ucyB0byB0aGUgUkVBRE1FLm5jcjUzYzh4eCBmaWxlLgorCitUdWUgQXByIDE1ICAxMDowMCAxOTk5IEdlcmFyZCBSb3VkaWVyIChncm91ZGllckBjbHViLWludGVybmV0LmZyKQorCSogdmVyc2lvbiBzeW01M2M4eHgtMS4zZQorCS0gU3VwcG9ydCBmb3IgYW55IG51bWJlciBvZiBMVU5zICg2NCkgKFNQSTItY29tcGxpYW50KS4KKwkgIChCdHcsIHRoaXMgbWF5IG9ubHkgYmUgZXZlciB1c2VmdWwgdW5kZXIgbGludXgtMi4yIDstKSkKKworU3VuIEFwciAxMSAgMTA6MDAgMTk5OSBHZXJhcmQgUm91ZGllciAoZ3JvdWRpZXJAY2x1Yi1pbnRlcm5ldC5mcikKKwkqIHZlcnNpb24gc3ltNTNjOHh4LTEuM2QKKwktIEFkZCAnaG9zdGlkOiNpZCcgYm9vdCBvcHRpb24uIFRoaXMgb3B0aW9uIGFsbG93cyB0byBjaGFuZ2UgdGhlIAorCSAgZGVmYXVsdCBTQ1NJIGlkIHRoZSBkcml2ZXIgdXNlcyBmb3IgY29udHJvbGxlcnMuCisJLSBNYWtlIFNDUklQVFMgbm90IHVzZSBzZWxmLW1hc3RlcmluZyBmb3IgUENJLgorCSAgVGhlcmUgd2VyZSBzdGlsbCAyIHBsYWNlcyB0aGUgZHJpdmVyIHVzZWQgdGhpcyBmZWF0dXJlIG9mIHRoZSAKKwkgIDUzQzhYWCBmYW1pbHkuCisJLSBNb3ZlIHNvbWUgZGF0YSBzdHJ1Y3R1cmVzIChudnJhbSBsYXlvdXRzIGFuZCBkcml2ZXIgc2V0LXVwKSB0byAKKwkgIHRoZSBzeW01M2M4eHhfZGVmcy5oIGZpbGUuIFNvLCB0aGUgYm90aCBkcml2ZXJzIHdpbGwgc2hhcmUgdGhlbS4KKwktIFNldCBNQVggTFVOUyB0byAxNiAoaW5zdGVhZCBvZiA4KS4KKworU2F0IE1hciAyMCAgMjE6MDAgMTk5OSBHZXJhcmQgUm91ZGllciAoZ3JvdWRpZXJAY2x1Yi1pbnRlcm5ldC5mcikKKwkqIHZlcnNpb24gc3ltNTNjOHh4LTEuM2IKKwktIEFkZCBzdXBwb3J0IGZvciBOQ1IgUFFTIFBEUy4KKwkgIEphbWVzIEJvdHRvbWxleSA8SmFtZXMuQm90dG9tbGV5QGNvbHVtYmlhc2MubmNyLmNvbT4KKwktIEFsbG93IHZhbHVlIDAgZm9yIGhvc3QgSUQuCisJLSBTdXBwb3J0IG1vcmUgdGhhbiA4IGNvbnRyb2xsZXJzICg+IDQwIGluIGZhY3QgOi0pICkKKwktIEFkZCAnZXhjbD0jaW9hZGRyJyBib290IG9wdGlvbjogZXhjbHVkZSBjb250cm9sbGVyLgorCSAgKFZlcnNpb24gMS4zYSBkcml2ZXIpCisKK1RodSBNYXIgMTEgIDIzOjAwIDE5OTkgR2VyYXJkIFJvdWRpZXIgKGdyb3VkaWVyQGNsdWItaW50ZXJuZXQuZnIpCisJKiB2ZXJzaW9uIHN5bTUzYzh4eC0xLjMgICAoOHh4LTg5NiBkcml2ZXIgYnVuZGxlKQorCS0gRXF1aXZhbGVudCBjaGFuZ2VzIGFzIG5jcjUzYzh4eC0zLjIgZHVlIHRvIHRoZSBkcml2ZXIgYnVuZGxlLgorCSAgKFNlZSBDaGFuZ2Vsb2cubmNyNTNjOHh4KQorCS0gRG8gYSBub3JtYWwgc29mdCByZXNldCBhcyBmaXJzdCBjaGlwIHJlc2V0LCBzaW5jZSBhYm9ydGluZyBjdXJyZW50IAorCSAgb3BlcmF0aW9uIG1heSByYWlzZSBhbiBpbnRlcnJ1cHQgd2UgYXJlIG5vdCBhYmxlIHRvIGhhbmRsZSBzaW5jZSAKKwkgIHRoZSBpbnRlcnJ1cHQgaGFuZGxlciBpcyBub3QgeWV0IGVzdGFibGlzaGVkLgorCitTYXQgTWFyIDYgIDExOjAwIDE5OTkgR2VyYXJkIFJvdWRpZXIgKGdyb3VkaWVyQGNsdWItaW50ZXJuZXQuZnIpCisJKiB2ZXJzaW9uIHN5bTUzYzh4eC0xLjJiCisJLSBGaXggc29tZSBvb29vbGQgYnVnIHRoYXQgaGFuZ3MgdGhlIGJ1cyBpZiBhIGRldmljZSByZWplY3RzIGEgCisJICBuZWdvdGlhdGlvbi4gQnR3LCB0aGUgY29ycmVzcG9uZGluZyBzdHVmZiBhbHNvIG5lZWRlZCBzb21lIGNsZWFudXAgCisJICBhbmQgdGh1cyB0aGUgY2hhbmdlIGlzIGEgYml0IGxhcmdlciB0aGFuIGl0IGNvdWxkIGhhdmUgYmVlbi4KKwktIFN0aWxsIHNvbWUgdHlwbyB0aGF0IG1hZGUgY29tcGlsYXRpb24gZmFpbCBmb3IgNjQgYml0ICh0cml2aWFsIGZpeCkuCisKK1N1biBGZWIgMjEgIDIwOjAwIDE5OTkgR2VyYXJkIFJvdWRpZXIgKGdyb3VkaWVyQGNsdWItaW50ZXJuZXQuZnIpCisJKiB2ZXJzaW9uIHN5bTUzYzh4eC0xLjJhCisJLSBUaGUgcmV3cml0ZSBvZiB0aGUgaW50ZXJydXB0IGhhbmRsaW5nIGJyb2tlIHRoZSBTQk1DIGludGVycnVwdCAKKwkgIGhhbmRsaW5nIGR1ZSB0byBhIDEgYml0IG1hc2sgdGlueSBlcnJvci4gSG9wZWZ1bGx5IGZpeGVkLgorCS0gSWYgSU5RVUlSWSBjYW1lIGZyb20gYSBzY2F0dGVyIGxpc3QsIHRoZSBkcml2ZXIgbG9va2VkIGludG8gCisJICB0aGUgc2NhdHRlcmxpc3QgaW5zdGVhZCBvZiB0aGUgZGF0YS46KSBTaW5jZSB0aGlzIHNob3VsZCBuZXZlcgorCSAgaGFwcGVuLCB3ZSBqdXN0IGRpc2NhcmQgdGhlIGRhdGEgaWYgdXNlX3NnIGlzIG5vdCB6ZXJvLgorCitGcmkgRmViIDEyICAyMzowMCAxOTk5IEdlcmFyZCBSb3VkaWVyIChncm91ZGllckBjbHViLWludGVybmV0LmZyKQorCSogdmVyc2lvbiBzeW01M2M4eHgtMS4yCisJLSBNYWpvciByZXdyaXRlIG9mIHRoZSBpbnRlcnJ1cHQgaGFuZGxpbmcgYW5kIHJlY292ZXJ5IHN0dWZmIGZvciAKKwkgIHRoZSBzdXBwb3J0IG9mIG5vbiBjb21wbGlhbnQgU0NTSSByZW1vdmFsLCBpbnNlcnRpb24gYW5kIGFsbCAKKwkgIGtpbmRzIG9mIHNjcmV3LXVwIHRoYXQgbWF5IGhhcHBlbiBvbiB0aGUgU0NTSSBCVVMuCisJICBIb3BlZnVsbHksIHRoZSBkcml2ZXIgaXMgbm93IHVuYnJlYWthYmxlIG9yIG1heS1iZSwgaXQgaXMganVzdCAKKwkgIHF1aXRlIGJyb2NrZW4uIDotKQorCSAgTWFueSB0aGFua3MgdG8gSm9obnNvbiBSdXNzZWwgKFN5bWJpb3MpIGZvciBoYXZpbmcgcmVzcG9uZGVkIHRvIAorCSAgbXkgcXVlc3Rpb25zIGFuZCBmb3IgaGlzIGludGVyZXN0aW5nIGFkdmljZXMgYW5kIGNvbW1lbnRzIGFib3V0IAorCSAgc3VwcG9ydCBvZiBTQ1NJIGhvdC1wbHVnLgorCS0gQWRkICdyZWNvdmVyeScgb3B0aW9uIHRvIGRyaXZlciBzZXQtdXAuCisJLSBOZWdvdGlhdGUgU1lOQyBkYXRhIHRyYW5zZmVycyB3aXRoIENDUyBkZXZpY2VzLgorCS0gRGVhbCBjb3JyZWN0bHkgd2l0aCA2NCBiaXQgUENJIGFkZHJlc3MgcmVnaXN0ZXJzIG9uIExpbnV4IDIuMi4KKwkgIFBvaW50ZWQgb3V0IGJ5IExlb25hcmQgWnVia29mZi4KKworU3VuIEphbiAzMSAgMTg6MDAgMTk5OSBHZXJhcmQgUm91ZGllciAoZ3JvdWRpZXJAY2x1Yi1pbnRlcm5ldC5mcikKKwkqIHZlcnNpb24gc3ltNTNjOHh4LTEuMWEKKwktIFNvbWUgODk2IGNoaXAgcmV2aXNpb25zIChhbGwgZm9yIG5vdyA6LSkpLCBtYXkgaGFuZy11cCBpZiB0aGUgCisJICBzb2Z0IHJlc2V0IGJpdCBpcyBzZXQgYXQgdGhlIHdyb25nIHRpbWUgd2hpbGUgU0NSSVBUUyBhcmUgcnVubmluZy4KKwkgIFdlIG5lZWQgdG8gZmlyc3QgYWJvcnQgdGhlIGN1cnJlbnQgU0NSSVBUUyBvcGVyYXRpb24gcHJpb3IgdG8gCisJICByZXNldHRpbmcgdGhlIGNoaXAuIFRoaXMgZml4IGhhcyBiZWVuIHNlbnQgdG8gbWUgYnkgU1lNQklPUy9MU0kgCisJICBhbmQgSSBqdXN0IHRyYW5zbGF0ZWQgaXQgaW50byBuY3I1M2M4eHggc3ludGF4LgorCSAgTXVzdCBiZSBjb25zaWRlcmVkIDEwMCAlIHRydXN0YWJsZSwgdW5sZXNzIEkgZGlkIHNvbWUgbWlzdGFrZSAKKwkgIHdoZW4gdHJhbnNsYXRpbmcgaXQuIDotKQorCitTdW4gSmFuIDI0ICAxODowMCAxOTk5IEdlcmFyZCBSb3VkaWVyIChncm91ZGllckBjbHViLWludGVybmV0LmZyKQorCSogdmVyc2lvbiBzeW01M2M4eHgtMS4xCisJLSBNYWpvciByZXdyaXRlIG9mIHRoZSBTQ1NJIHBhcml0eSBlcnJvciBoYW5kbGluZy4KKwkgIFRoZSBpbmZvcm1hdGlvbnMgY29udGFpbmVkIGluIHRoZSBkYXRhIG1hbnVhbHMgYXJlIGluY29tcGxldGUgYWJvdXQgCisJICB0aGlzIGZlYXR1cmUuCisJICBJIGFza2VkIFNZTUJJT1MgYWJvdXQgYW5kIGdvdCBpbiByZXBseSB0aGUgZXhwbGFuYXRpb25zIHRoYXQgYXJlIAorCSAgX2luZGVlZF8gbWlzc2luZyBpbiB0aGUgZGF0YSBtYW51YWxzLgorCS0gQWxsb3cgdG8gdHVuZSByZXF1ZXN0X2lycSgpIGZsYWdzIGZyb20gdGhlIGJvb3QgY29tbWFuZCBsaW5lIHVzaW5nIAorCSAgbmNyNTNjOHh4PWlycW06Pz8sIGFzIGZvbGxvd3M6CisJICBhKSBJZiBiaXQgMHgxMCBpcyBzZXQgaW4gaXJxbSwgU0FfU0hJUlEgZmxhZyBpcyBub3QgdXNlZC4KKwkgIGIpIElmIGJpdCAweDIwIGlzIHNldCBpbiBpcnFtLCBTQV9JTlRFUlJVUFQgZmxhZyBpcyBub3QgdXNlZC4KKwkgIEJ5IGRlZmF1bHQgdGhlIGRyaXZlciB1c2VzIGJvdGggU0FfU0hJUlEgYW5kIFNBX0lOVEVSUlVQVC4KKwkgIE9wdGlvbiAnbmNyNTNjOHh4PWlycW06MHgyMCcgbWF5IGJlIHVzZWQgd2hlbiBhbiBJUlEgaXMgc2hhcmVkIGJ5IAorCSAgYSA1M0M4WFggYWRhcHRlciBhbmQgYSBuZXR3b3JrIGJvYXJkLgorCS0gRml4IGZvciA2NCBiaXQgUENJIGFkZHJlc3MgcmVnaXN0ZXIgY2FsY3VsYXRpb24uIChMYW5jZSBSb2JpbnNvbikKKwktIEZpeCBmb3IgYmlnLWVuZGlhbiBpbiBwaGFzZSBtaXNtYXRjaCBoYW5kbGluZy4gKE1pY2hhbCBKYWVnZXJtYW5uKQorCitGcmkgSmFuICAxICAyMDowMCAxOTk5IEdlcmFyZCBSb3VkaWVyIChncm91ZGllckBjbHViLWludGVybmV0LmZyKQorCSogdmVyc2lvbiBzeW01M2M4eHgtMS4wYQorCS0gV2FpdGluZyBsaXN0IGxvb2stdXAgZGlkbid0IHdvcmsgZm9yIHRoZSBmaXJzdCBjb21tYW5kIG9mIHRoZSBsaXN0LgorCSAgSG9wZWZ1bGx5IGZpeGVkLCBidXQgdGVzdGVkIG9uIHBhcGVyIG9ubHkuIDspCisJLSBSZW1vdmUgdGhlIG1vc3QgcGFydCBvZiBQUEMgc3BlY2lmaWMgY29kZSBmb3IgTGludXgtMi4yLgorCSAgVGhhbmtzIHRvIENvcnQuCisJLSBTb21lIG90aGVyIG1pbm9ycyBjaGFuZ2VzLgorCitTYXQgRGVjIDE5ICAyMTowMCAxOTk4IEdlcmFyZCBSb3VkaWVyIChncm91ZGllckBjbHViLWludGVybmV0LmZyKQorCSogdmVyc2lvbiBzeW01M2M4eHgtMS4wCisJLSBEZWZpbmUgc29tZSBuZXcgSU8gcmVnaXN0ZXJzIGZvciB0aGUgODk2IChpc3RhdDEsIG1ib3gwLCBtYm94MSkKKwktIFJldmFtcCBzbGlnaGx5IHRoZSBTeW1iaW9zIE5WUkFNIGxheS1vdXQgYmFzZWQgb24gdGhlIGV4Y2VycHQgb2YgCisJICB0aGUgaGVhZGVyIGZpbGUgSSByZWNlaXZlZCBmcm9tIFN5bWJpb3MuCisJLSBDaGVjayB0aGUgUENJIGJ1cyBudW1iZXIgZm9yIHRoZSBib290IG9yZGVyIChVc2luZyBhIGZhc3QgCisJICBQQ0kgY29udHJvbGxlciBiZWhpbmcgYSBQQ0ktUENJIGJyaWRnZSBzZWVtcyBzdWItb3B0aW1hbCkuCisJLSBEaXNhYmxlIG92ZXJsYXBwZWQgUENJIGFyYml0cmF0aW9uIGZvciB0aGUgODk2IHJldmlzaW9uIDEuCisJLSBSZWR1Y2UgYSBiaXQgdGhlIG51bWJlciBvZiBJTyByZWdpc3RlciByZWFkcyBmb3IgcGhhc2UgbWlzbWF0Y2ggCisJICBieSByZWFkaW5nIERXT1JEUyBhdCBhIHRpbWUgaW5zdGVhZCBvZiBCWVRFUy4KKworVGh1IERlYyAgMyAgMjQ6MDAgMTk5OCBHZXJhcmQgUm91ZGllciAoZ3JvdWRpZXJAY2x1Yi1pbnRlcm5ldC5mcikKKwkqIHZlcnNpb24gcHJlLXN5bTUzYzh4eC0wLjE4CisJLSBJIHJlY2VpdmVkIHRoaXMgYWZ0ZXJub29uIGEgODk2IGZyb20gU1lNQklPUyBhbmQgc3RhcnRlZCB0ZXN0aW5nICAKKwkgIHRoZSBkcml2ZXIgd2l0aCB0aGlzIGJlYXN0LiBBZnRlciBoYXZpbmcgZml4ZWQgMyBidWdsZXRzLCBpdCB3b3JrZWQgIAorCSAgd2l0aCBhbGwgZmVhdHVyZXMgZW5hYmxlZCBpbmNsdWRpbmcgdGhlIHBoYXNlIG1pc21hdGNoIGhhbmRsaW5nIAorCSAgZnJvbSBTQ1JJUFRTLiBTaW5jZSB0aGlzIGZlYXR1cmUgaXMgbm90IHlldCB0ZXN0ZWQgZW5vdWdoLCB0aGUgCisJICBib290IG9wdGlvbiAnbmNyNTNjOHh4PXNwZWNmOjEnIGlzIHN0aWxsIHJlcXVpcmVkIHRvIGVuYWJsZSB0aGUgCisJICBkcml2ZXIgdG8gaGFuZGxlIFBNIGZyb20gU0NSSVBUUy4gCisKK1N1biBOb3YgMjkgIDE4OjAwIDE5OTggR2VyYXJkIFJvdWRpZXIgKGdyb3VkaWVyQGNsdWItaW50ZXJuZXQuZnIpCisJKiB2ZXJzaW9uIHByZS1zeW01M2M4eHgtMC4xNworCS0gVGhlIFNJU0wgUkFJRCBjaGFuZ2UgcmVxdWlyZXMgbm93IHJlbWFwX3BjaV9tZW0oKSBzdHVmZiB0byBiZSAKKwkgIGNvbXBpbGVkIGZvciBfX2kzODZfXyB3aGVuIG5vcm1hbCBJT3MgYXJlIHVzZWQuCisJLSBUaGUgUENJIG1lbW9yeSByZWFkIGZyb20gU0NSSVBUUyB0aGF0IHNob3VsZCBlbnN1cmUgb3JkZXJpbmcgCisJICB3YXMgaW4gZmFjdCBtaXNwbGFjZWQuIEJUVywgdGhpcyBtYXkgZXhwbGFpbiB3aHkgYnJva2VuIFBDSSAKKwkgIGRldmljZSBkcml2ZXJzIHJlZ2FyZGluZyBvcmRlcmluZyBhcmUgd29ya2luZyBzbyB3ZWxsLiA7LSkKKwktIFJld3JpdGUgbmNyNTNjOHh4X3NldHVwIChib290IGNvbW1hbmQgbGluZSBvcHRpb25zKSBzaW5jZSB0aGUgIAorCSAgYmluYXJ5IGNvZGUgd2FzIGEgYml0IHRvbyBibG9hdGVkIGluIG15IG9waW5pb24uCisJLSBNYWtlIHRoZSBjb2RlIHNpbXBsZXIgaW4gdGhlIHdha2V1cF9kb25lIHJvdXRpbmUuCisKK1R1ZSBOb3YgMjQgIDIzOjAwIDE5OTggR2VyYXJkIFJvdWRpZXIgKGdyb3VkaWVyQGNsdWItaW50ZXJuZXQuZnIpCisJKiB2ZXJzaW9uIHByZS1zeW01M2M4eHgtMC4xNgorCS0gQWRkIFNDU0lfTkNSX09QVElNSVpFXzg5Nl8xIGNvbXBpbGUgb3B0aW9uIGFuZCAnb3B0aW0nIGJvb3Qgb3B0aW9uLgorCSAgV2hlbiBzZXQsIHRoZSBkcml2ZXIgdW5jb25kaXRpb25uYWx5IGFzc3VtZXMgdGhhdCB0aGUgaW50ZXJydXB0IAorCSAgaGFuZGxlciBpcyBjYWxsZWQgZm9yIGNvbW1hbmQgY29tcGxldGlvbiwgdGhlbiBjbGVhcnMgSU5URiwgc2NhbnMgCisJICB0aGUgZG9uZSBxdWV1ZSBhbmQgcmV0dXJucyBpZiBzb21lIGNvbXBsZXRlZCBDQ0IgaXMgZm91bmQuIElmIG5vIAorCSAgY29tcGxldGVkIENDQiBhcmUgZm91bmQsIGludGVycnVwdCBoYW5kbGluZyB3aWxsIHByb2NlZWQgbm9ybWFsbHkuCisJICBXaXRoIGEgODk2IHRoYXQgaGFuZGxlcyBNQSBmcm9tIFNDUklQVFMsIHRoaXMgY2FuIGJlIGEgZ3JlYXQgd2luLCAKKwkgIHNpbmNlIHRoZSBkcml2ZXIgd2lsbCBuZXZlciBwZXJmb3JtcyBQQ0kgcmVhZCB0cmFuc2FjdGlvbnMsIGJ1dCAKKwkgIG9ubHkgUENJIHdyaXRlIHRyYW5zYWN0aW9ucyB0aGF0IG1heSBiZSBwb3N0ZWQuCisJICBJZiB0aGUgZHJpdmVyIGhhdmVuJ3QgdG8gYWxzbyByYWlzZSB0aGUgU0lHUCB0aGlzIHdvdWxkIGJlIHBlcmZlY3QuCisJICBFdmVuIHdpdGggdGhpcyBwZW5hbHR5LCBJIHRoaW5rIHRoYXQgdGhpcyB3aWxsIHdvcmsgZ3JlYXQuCisJICBPYnZpb3VzbHkgdGhpcyBvcHRpbWl6YXRpb24gbWFrZXMgc2Vuc2Ugb25seSBpZiB0aGUgSVJRIGlzIG5vdCAKKwkgIHNoYXJlZCB3aXRoIGFub3RoZXIgZGV2aWNlLgorCS0gU3RpbGwgYSBidWdsZXQgaW4gdGhlIHRhZ3MgaW5pdGlhbCBzZXR0aW5ncyB0aGF0IG5lZWRlZCB0byBiZSBmaXhlZC4KKwkgIEl0IHdhcyBub3QgcG9zc2libGUgdG8gZGlzYWJsZSBUR1EgYXQgc3lzdGVtIHN0YXJ0dXAgZm9yIGRldmljZXMgCisJICB0aGF0IGNsYWltIFRHUSBzdXBwb3J0LiBUaGUgZHJpdmVyIHVzZWQgYXQgbGVhc3QgMiBmb3IgdGhlIHF1ZXVlIAorCSAgZGVwdGggYnV0IGRpZCdudCBrZWVwIHRyYWNrIG9mIHVzZXIgc2V0dGluZ3MgZm9yIHRhZ3MgZGVwdGggbG93ZXIgCisJICB0aGFuIDIuCisKK1RodSBOb3YgMTkgIDIzOjAwIDE5OTggR2VyYXJkIFJvdWRpZXIgKGdyb3VkaWVyQGNsdWItaW50ZXJuZXQuZnIpCisJKiB2ZXJzaW9uIHByZS1zeW01M2M4eHgtMC4xNQorCS0gQWRkIHN1cHBvcnQgZm9yIGhhcmR3YXJlIExFRCBjb250cm9sIG9mIHRoZSA4OTYuCisJLSBJZ25vcmUgY2hpcHMgdGhhdCBhcmUgZHJpdmVuIGJ5IFNJU0wgUkFJRCAoREFDIDk2MCkuCisJICBDaGFuZ2Ugc2VudCBieSBMZW9uYXJkIFp1YmtvZmYgYW5kIHNsaWdodGx5IHJld29ya2VkLgorCS0gUHJldmVudCA4MTBBIHJldiAxMSBhbmQgODYwIHJldiAxIGZyb20gdXNpbmcgY2FjaGUgbGluZSBiYXNlZCAKKwkgIHRyYW5zYWN0aW9ucyBzaW5jZSB0aG9zZSBlYXJseSBjaGlwIHJldmlzaW9ucyBtYXkgdXNlIHN1Y2ggb24gCisJICBMT0FEL1NUT1JFIGluc3RydWN0aW9ucyAod29yay1hcm91bmQpLgorCS0gUmVtb3ZlIHNvbWUgdXNlbGVzcyBhbmQgYmxvYXQgY29kZSBmcm9tIHRoZSBwY2kgaW5pdCBzdHVmZi4KKwktIERvIG5vdCB1c2UgdGhlIHJlYWRYKCkvd3JpdGVYKCkga2VybmVsIGZ1bmN0aW9ucyBmb3IgX19pMzg2X18sIAorCSAgc2luY2UgdGhleSBwZXJmb3JtIHVzZWxlc3MgbWFza2luZyBvcGVyYXRpb25zIGluIG9yZGVyIHRvIGRlYWwgCisJICB3aXRoIGJyb2tlbiBkcml2ZXIgaW4gMi4xLlgga2VybmVsLgorCitXZWQgTm92IDExICAxMDowMCAxOTk4IEdlcmFyZCBSb3VkaWVyIChncm91ZGllckBjbHViLWludGVybmV0LmZyKQorCSogdmVyc2lvbiBwcmUtc3ltNTNjOHh4LTAuMTQKKwktIFRoZSBkcml2ZXIgd2FzIHVuaGFwcHkgd2hlbiBjb25maWd1cmVkIHdpdGggZGVmYXVsdF90YWdzID4gTUFYX1RBR1MKKwkgIEhvcGVmdWxseSBkb3VibHktZml4ZWQuCisJLSBTZXQgUENJX1BBUklUWSBpbiBQQ0lfQ09NTUFORCByZWdpc3RlciBpbiBub3Qgc2V0IChQQ0kgZml4LXVwKS4KKwktIFByaW50IG91dCBzb21lIG1lc3NhZ2UgaWYgcGhhc2UgbWlzbWF0Y2ggaXMgaGFuZGxlZCBmcm9tIFNDUklQVFMuCisKK1N1biBOb3YgMSAgMTRIMDAgMTk5OCBHZXJhcmQgUm91ZGllciAoZ3JvdWRpZXJAY2x1Yi1pbnRlcm5ldC5mcikKKwkqIHZlcnNpb24gcHJlLXN5bTUzYzh4eC0wLjEzCisJLSBTb21lIHJld3JpdGUgb2YgdGhlIGRldmljZSBkZXRlY3Rpb24gY29kZS4gVGhpcyBjb2RlIGhhZCBiZWVuIAorCSAgcGF0Y2hlZCB0b28gbXVjaCBhbmQgbmVlZGVkIHRvIGJlIGZhY2UtbGlmdGVkIGEgYml0LgorCSAgUmVtb3ZlIGFsbCBwbGF0Zm9ybSBkZXBlbmRlbnQgZml4LXVwcyB0aGF0IHdhcyBub3QgbmVlZGVkIG9yCisJICBjb25mbGljdGVkIHdpdGggc29tZSBvdGhlciBkcml2ZXIgY29kZSBhcyB3b3JrLWFyb3VuZHMuCisJICBSZXJlYWQgdGhlIE5WUkFNIGJlZm9yZSB0aGUgY2FsbGluZyBvZiBuY3JfYXR0YWNoKCkuIFRoaXMgc3BhcmVzIAorCSAgc3RhY2sgc3BhY2UgYW5kIHNvIGFsbG93cyB0byBoYW5kbGUgbW9yZSBib2FyZHMuCisJICBIYW5kbGUgNjQgYml0IGJhc2UgYWRkcmVzc2VzIHVuZGVyIGxpbnV4LTIuMC5YLgorCSAgU2V0IE1BU1RFUiBiaXQgaW4gUENJIENPTU1BTkQgcmVnaXN0ZXIgaWYgbm90IHNldC4KKworV2VkIE9jdCAzMCAyMkgwMCAxOTk4IEdlcmFyZCBSb3VkaWVyIChncm91ZGllckBjbHViLWludGVybmV0LmZyKQorCSogdmVyc2lvbiBwcmUtc3ltNTNjOHh4LTAuMTIKKwktIERhbW5lZCEgSSBqdXN0IGJyb2tlIHRoZSBkcml2ZXIgZm9yIEFscGhhIGJ5IGxlYXZpbmcgYSBzdGFsZSAKKwkgIGluc3RydWN0aW9uIGluIHRoZSBzb3VyY2UgY29kZS4gSG9wZWZ1bGx5IGZpeGVkLgorCS0gRG8gbm90IHNldCBQRkVOIHdoZW4gaXQgaXMgdXNlbGVzcy4gRG9pbmcgc28gd2UgYXJlIHN1cmUgdGhhdCBCT0YgCisJICB3aWxsIGJlIGFjdGl2ZSwgc2luY2UgdGhlIG1hbnVhbCBhcHBlYXJzIHRvIGJlIHZlcnkgdW5jbGVhciBvbiB3aGF0IAorCSAgZmVhdHVyZSBpcyBhY3R1YWxseSB1c2VkIGJ5IHRoZSBjaGlwIHdoZW4gYm90aCBQRkVOIGFuZCBCT0YgYXJlIAorCSAgc2V0LgorCitTYXQgT2N0IDI0IDE2SDAwIDE5OTggR2VyYXJkIFJvdWRpZXIgKGdyb3VkaWVyQGNsdWItaW50ZXJuZXQuZnIpCisJKiB2ZXJzaW9uIHByZS1zeW01M2M4eHgtMC4xMQorCS0gTE9BRC9TVE9SRSBpbnN0cnVjdGlvbnMgd2VyZSBtaXNjb21waWxlZCBmb3IgcmVnaXN0ZXIgb2Zmc2V0cyAKKwkgIGJleW9uZCAweDdmLiBUaGlzIGJyb2tlIGFjY2Vzc2VzIHRvIDg5NicgbmV3IHJlZ2lzdGVycy4KKwktIERpc2FibGUgYnkgZGVmYXVsdCBQaGFzZSBNaXNtYXRjaCBoYW5kbGluZyBmcm9tIFNDUklQVFMsIHNpbmNlIAorCSAgY3VycmVudCA4OTYgcmV2LjEgc2VlbXMgbm90IHRvIG9wZXJhdGUgc2FmZWx5IHdpdGggdGhlIGRyaXZlcgorCSAgd2hlbiB0aGlzIGZlYXR1cmUgaXMgZW5hYmxlZCAoYW5kIGFib3ZlIExPQUQvU1RPUkUgZml4IGFwcGxpZWQpLgorCSAgSSB3aWxsIGNoYW5nZSB0aGUgZGVmYXVsdCB0byAnZW5hYmxlZCcgd2hlbiB0aGlzIHByb2JsZW0gd2lsbCBiZSAKKwkgIHNvbHZlZC4KKwkgIFVzaW5nIGJvb3Qgb3B0aW9uICduY3I1M2M4eHg9c3BlY2Y6MScgZW5hYmxlcyB0aGlzIGZlYXR1cmUuCisJLSBJbXBsZW1lbnQgYSB3b3JrLWFyb3VuZCAoREVMIDQ3MiAtIElURU0gNSkgdGhhdCBzaG91bGQgYWxsb3cgdGhlIAorCSAgZHJpdmVyIHRvIHNhZmVseSBlbmFibGUgaGFyZHdhcmUgcGhhc2UgbWlzbWF0Y2ggd2l0aCA4OTYgcmV2LiAxLgorCitUdWUgT2N0IDIwIDIySDAwIDE5OTggR2VyYXJkIFJvdWRpZXIgKGdyb3VkaWVyQGNsdWItaW50ZXJuZXQuZnIpCisJKiB2ZXJzaW9uIHByZS1zeW01M2M4eHgtMC4xMAorCS0gQWRkIHRoZSA1M2M4NzYgZGVzY3JpcHRpb24gdG8gdGhlIGNoaXAgdGFibGUuIFRoaXMgaXMgb25seSB1c2VmdWwgCisJICBmb3IgcHJpbnRpbmcgdGhlIHJpZ2h0IG5hbWUgb2YgdGhlIGNvbnRyb2xsZXIuCisJLSBBZGQgYWRkaXRpb25hbCBjaGVja2luZyBvZiBJTlFVSVJZIGRhdGE6CisJICBDaGVjayBJTlFVSVJZIGRhdGEgcmVjZWl2ZWQgbGVuZ3RoIGlzIGF0IGxlYXN0IDcuIEJ5dGUgNyBvZiAKKwkgIGlucXVpcnkgZGF0YSBjb250YWlucyBkZXZpY2UgZmVhdHVyZXMgYml0cyBhbmQgdGhlIGRyaXZlciBtaWdodCAKKwkgIGJlIGNvbmZ1c2VkIGJ5IGdhcmJhZ2UuIEFsc28gY2hlY2sgcGVyaXBoZXJhbCBxdWFsaWZpZXIuCisJLSBVc2UgYSAxLDMsNSwuLi5NQVhUQUdTKjIrMSB0YWcgbnVtYmVyaW5nLiBQcmV2aW91cyBkcml2ZXIgY291bGQgIAorCSAgdXNlIGFueSB0YWcgbnVtYmVyIGZyb20gMSB0byAyNTMgYW5kIHNvbWUgbm9uIGNvbmZvcm1hbnQgZGV2aWNlcyAgCisJICBtaWdodCBoYXZlIHByb2JsZW1zIHdpdGggbGFyZ2UgdGFnIG51bWJlcnMuCisJLSBVc2UgTkFNRTUzQyBhbmQgTkFNRTUzQzhYWCBmb3IgY2hpcCBuYW1lIHByZWZpeCBjaGlwIGZhbWlseSBuYW1lLgorCSAgSnVzdCBnaXZlIGEgdHJ5IHVzaW5nICJzeW01M2MiIGFuZCAic3ltNTNjOHh4IiBpbnN0ZWFkIG9mICJuY3I1M2MiIAorCSAgYW5kICJuY3I1M2M4eHgiLiA6LSkKKworU3VuIE9jdCAxMSAxN0gwMCAxOTk4IEdlcmFyZCBSb3VkaWVyIChncm91ZGllckBjbHViLWludGVybmV0LmZyKQorCSogdmVyc2lvbiBwcmUtc3ltNTNjOHh4LTAuOQorCS0gREVMLTQ0MSBJdGVtIDIgd29yay1hcm91bmQgZm9yIHRoZSA1M2M4NzYgcmV2IDw9IDUgKDB4MTUpLgorCS0gQnJlYWsgbmNyX3NjYXR0ZXIoKSBpbnRvIDIgZnVuY3Rpb25zIGluIG9yZGVyIHRvIGd1YXJhbnRlZSBiZXN0IAorCSAgcG9zc2libGUgY29kZSBvcHRpbWl6YXRpb24gZm9yIHRoZSBjYXNlIHdlIGdldCBhIHNjYXR0ZXIgbGlzdC4KKwktIEFkZCB0aGUgY29kZSBpbnRlbmRlZCB0byBzdXBwb3J0IHVwIHRvIDEgdGVyYS1ieXRlIGZvciA2NCBiaXQgc3lzdGVtcy4KKwkgIEl0IGlzIHByb2JhYmx5IHRvbyBlYXJseSwgYnV0IEkgd2FudGVkIHRvIGNvbXBsZXRlIHRoZSB0aGluZy4KKworU2F0IE9jdCAzIDE0SDAwIDE5OTggR2VyYXJkIFJvdWRpZXIgKGdyb3VkaWVyQGNsdWItaW50ZXJuZXQuZnIpCisJKiB2ZXJzaW9uIHByZS1zeW01M2M4eHgtMC44CisJLSBEbyBzb21lIHRlc3Rpbmcgd2l0aCBpb19tYXBwZWQgYW5kIGZpeCB3aGF0IG5lZWRlZCB0byBiZSBzby4KKwktIFdhaXQgZm9yIFNDU0kgc2VsZWN0aW9uIHRvIGNvbXBsZXRlIG9yIHRpbWUtb3V0IGltbWVkaWF0ZWx5IGFmdGVyIAorCSAgdGhlIGNoaXAgd29uIGFyYml0cmF0aW9uLCBzaW5jZSBleGVjdXRpbmcgU0NSSVBUUyB3aGlsZSB0aGUgU0NTSSAKKwkgIGNvcmUgaXMgcGVyZm9ybWluZyBTQ1NJIHNlbGVjdGlvbiBicmVha3MgdGhlIHNlbGVjdGlvbiBwcm9jZWR1cmUgCisJICBhdCBsZWFzdCBmb3Igc29tZSBjaGlwIHJldmlzaW9ucy4KKwktIEludGVycnVwdCB0aGUgU0NSSVBUUyBpZiBhIGRldmljZSBkb2VzIG5vdCBnbyB0byBNU0cgT1VUIHBoYXNlIGFmdGVyIAorCSAgaGF2aW5nIGJlZW4gc2VsZWN0ZWQgd2l0aCBBVE4uIFN1Y2ggYSBzaXR1YXRpb24gaXMgbm90IHJlY292ZXJhYmxlLCAKKwkgIGJldHRlciB0byBmYWlsIHdoZW4gd2UgYXJlIHN0dWNrLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9zY3NpL0NoYW5nZUxvZy5zeW01M2M4eHhfMiBiL0RvY3VtZW50YXRpb24vc2NzaS9DaGFuZ2VMb2cuc3ltNTNjOHh4XzIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMThhNWQ3MQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vc2NzaS9DaGFuZ2VMb2cuc3ltNTNjOHh4XzIKQEAgLTAsMCArMSwxNDQgQEAKK1NhdCBEZWMgMzAgMjE6MzAgMjAwMCBHZXJhcmQgUm91ZGllciAKKwkqIHZlcnNpb24gc3ltLTIuMS4wLTIwMDAxMjMwCisJLSBJbml0aWFsIHJlbGVhc2Ugb2YgU1lNLTIuCisKK01vbiBKYW4gMDggMjE6MzAgMjAwMSBHZXJhcmQgUm91ZGllciAKKwkqIHZlcnNpb24gc3ltLTIuMS4xLTIwMDEwMTA4CisJLSBDaGFuZ2UgYSBjb3VwbGUgb2YgZGVmaW5lcyBjb250YWluaW5nIG5jciBvciBOQ1IgYnkgdGhlaXIgCisJICBlcXVpdmFsZW50IGNvbnRhaW5pbmcgc3ltIG9yIFNZTSBpbnN0ZWFkLgorCitTdW4gSmFuIDE0IDIyOjMwIDIwMDEgR2VyYXJkIFJvdWRpZXIgCisJKiB2ZXJzaW9uIHN5bS0yLjEuMi0yMDAxMDExNAorCS0gRml4IGEgY291cGxlIG9mIHByaW50ZnM6CisJICAqIEFkZCB0aGUgdGFyZ2V0IG51bWJlciB0byB0aGUgZGlzcGxheSBvZiB0cmFuc2ZlciBwYXJhbWV0ZXJzLgorCSAgKiBNYWtlIHRoZSBkaXNwbGF5IG9mIFRDUSBhbmQgcXVldWUgZGVwdGggY2xlYXJlci4KKworV2VkIEphbiAxNyAyMzozMCAyMDAxIEdlcmFyZCBSb3VkaWVyIAorCSogdmVyc2lvbiBzeW0tMi4xLjMtMjAwMTAxMTcKKwktIFdyb25nIHJlc2lkdWFsIHZhbHVlcyB3ZXJlIHJldHVybmVkIGluIHNvbWUgc2l0dWF0aW9ucy4KKwkgIFRoaXMgYnJva2UgY2RyZWNvcmQgd2l0aCBsaW51eC0yLjQuMCwgZm9yIGV4YW1wbGUuCisKK1NhdCBKYW4gMjAgMTg6MDAgMjAwMSBHZXJhcmQgUm91ZGllciAKKwkqIHZlcnNpb24gc3ltLTIuMS40LTIwMDEwMTIwCisJLSBBZGQgeWVhciAyMDAxIHRvIENvcHlyaWdodC4KKwktIEEgdGlueSBidWcgaW4gdGhlIGRtYSBtZW1vcnkgZnJlZWluZyBwYXRoIGhhcyBiZWVuIGZpeGVkLgorCSAgKERyaXZlciB1bmxvYWQgZmFpbGVkIHdpdGggYSBiYWQgYWRkcmVzcyByZWZlcmVuY2UpLgorCitXZWQgSmFuIDI0IDIxOjAwIDIwMDEgR2VyYXJkIFJvdWRpZXIgCisJKiB2ZXJzaW9uIHN5bS0yLjEuNS0yMDAxMDEyNAorCS0gTWFrZSB0aGUgZHJpdmVyIHdvcmsgdW5kZXIgTGludXgtMi40Lnggd2hlbiBzdGF0aWNhbGx5IGxpbmtlZCAKKwkgIHdpdGggdGhlIGtlcm5lbC4KKwktIENoZWNrIGFnYWluc3QgbWVtb3J5IGFsbG9jYXRpb24gZmFpbHVyZSBmb3IgU0NSSVBUWiBhbmQgYWRkIHRoZSAKKwkgIG1pc3NpbmcgZnJlZSBvZiB0aGlzIG1lbW9yeSBvbiBpbnN0YW5jZSBkZXRhY2guCisJLSBDaGVjayBhZ2FpbnN0IEdQSU8zIHB1bGxlZCBsb3cgZm9yIEhWRCBjb250cm9sbGVycyAoZHJpdmVyIGRpZCAKKwkgIGp1c3QgdGhlIG9wcG9zaXRlKS4KKwkgIE1pc2RldGVjdGlvbiBvZiBCVVMgbW9kZSB3YXMgdHJpZ2dlcmVkIG9uIG1vZHVsZSByZWxvYWQgb25seSwgCisJICBzaW5jZSBCSU9TIHNldHRpbmdzIHdlcmUgdHJ1c3RlZCBpbnN0ZWFkIG9uIGZpcnN0IGxvYWQuCisKK1dlZCBGZWIgNyAyMTowMCAyMDAxIEdlcmFyZCBSb3VkaWVyIAorCSogdmVyc2lvbiBzeW0tMi4xLjYtMjAwMTAyMDcKKwktIENhbGwgcGNpX2VuYWJsZV9kZXZpY2UoKSBhcyB3aXNoZWQgYnkga2VybmVsIG1haW50YWluZXJzLgorCS0gQ2hhbmdlIHRoZSBzeW1fcXVldWVfc2NzaWlvKCkgaW50ZXJmYWNlLgorCSAgVGhpcyBpcyBpbnRlbmRlZCB0byBzaW1wbGlmeSBwb3J0YWJpbGl0eS4KKwktIE1vdmUgdGhlIGNvZGUgaW50ZW5kZWQgdG8gZGVhbCB3aXRoIHRoZSBkb3dsb2FkaW5nIG9mIFNDUklQVFMgCisJICBmcm9tIFNDUklQVFMgOikgaW4gdGhlIHBhdGNoIG1ldGhvZCAod2FzIHdyb25nbHkgcGxhY2VkIGluIAorCSAgdGhlIFNDUklQVFMgc2V0dXAgbWV0aG9kKS4KKwktIEFkZCBhIG1pc3NpbmcgY3B1X3RvX3NjcigpICAobnAtPmFib3J0X3RibC5hZGRyKQorCS0gUmVtb3ZlIGEgd3JvbmcgY3B1X3RvX3NjcigpIChucC0+dGFyZ3RibF9iYSkKKwktIENsZWFudXAgYSBiaXQgdGhlIFBQUiBmYWlsdXJlIHJlY292ZXJ5IGNvZGUuCisKK1NhdCBNYXIgMyAyMTowMCAyMDAxIEdlcmFyZCBSb3VkaWVyIAorCS0gQWRkIG9wdGlvbiBTWU1fT1BUX0FOTk9VTkNFX1RSQU5TRkVSX1JBVEUgYW5kIG1vdmUgdGhlIAorCSAgY29ycmVzcG9uZGluZyBjb2RlIHRvIGZpbGUgc3ltX21pc2MuYy4KKwkgIEFsc28gbW92ZSB0aGUgY29kZSB0aGF0IHNuaWZmZXMgSU5RVUlSWSB0byBzeW1fbWlzYy5jLgorCSAgVGhpcyBhbGxvd3MgdG8gc2hhcmUgdGhlIGNvcnJlc3BvbmRpbmcgY29kZSB3aXRoIE5ldEJTRCAKKwkgIHdpdGhvdXQgcG9sbHVhdGluZyB0aGUgY29yZSBkcml2ZXIgc291cmNlIChzeW1faGlwZC5jKS4KKwktIEFkZCBvcHRpb25uYWwgY29kZSB0aGF0IGhhbmRsZXMgSU8gdGltZW91dHMgZnJvbSB0aGUgZHJpdmVyLgorCSAgKG5vdCB1c2VkIHVuZGVyIExpbnV4LCBidXQgcmVxdWlyZWQgZm9yIE5ldEJTRCkKKwktIERvbm5vdCBhc3N1bWUgYW55IGxvbmdlciB0aGF0IFBBR0VfU0hJRlQgYW5kIFBBR0VfU0laRSBhcmUgCisJICBkZWZpbmVkIGF0IGNvbXBpbGUgdGltZSwgYXMgYXQgbGVhc3QgTmV0QlNEIHVzZXMgdmFyaWFibGVzIAorCSAgaW4gbWVtb3J5IGZvciB0aGF0LgorCS0gUmVmaW5lIGEgd29yay1hcm91bmQgZm9yIHRoZSBDMTAxMC0zMyB0aGF0IGNvbnNpc3RzIGluIAorCSAgZGlzYWJsaW5nIGludGVybmFsIExPQUQvU1RPUkUuIFdhcyBhcHBsaWVkIHVwIHRvIHJldmlzaW9uIDEuCisJICBJcyBub3cgb25seSBhcHBsaWVkIHRvIHJldmlzaW9uIDAuCisJLSBTb21lIGNvZGUgcmVvcmdhbmlzYXRpb25zIGR1ZSB0byBjb2RlIG1vdmVzIGJldHdlZW4gZmlsZXMuCisKK1R1ZXMgQXByIDEwIDIxOjAwIDIwMDEgR2VyYXJkIFJvdWRpZXIgCisJKiB2ZXJzaW9uIHN5bS0yLjEuOS0yMDAxMDQxMgorCS0gUmVzZXQgNTNDODk2IGFuZCA1M0MxMDEwIGNoaXAgYWNjb3JkaW5nIHRvIHRoZSBtYW51YWwuCisJICAoaS5lLjogc2V0IHRoZSBBQlJUIGJpdCBpbiBJU1RBVCBpZiBTQ1JJUFRTIGFyZSBydW5uaW5nKQorCS0gU2V0ICNMVU4gaW4gcmVxdWVzdCBzZW5zZSBvbmx5IGlmIHNjc2kgdmVyc2lvbiA8PSAyIGFuZAorCSAgI0xVTiA8PSA3LgorCS0gU2V0IGJ1c3lfaXRsIGluIExDQiB0byAxIGlmIHRoZSBMQ0IgaXMgYWxsb2NhdGVkIGFuZCBhIAorCSAgU0NTSSBjb21tYW5kIGlzIGFjdGl2ZS4gVGhpcyBpcyBhIHNpbXBsaWZpY2F0aW9uLgorCS0gSW4gc3ltX2hjYl9mcmVlKCksIGRvIG5vdCBzY2FuIHRoZSBmcmVlX2NjYnEgaWYgbm8gQ0NCcyAKKwkgIGhhcyBiZWVuIGFsbG9jYXRlZC4gVGhpcyBmaXhlcyBhIHBhbmljIGlmIGF0dGFjaCBmYWlsZWQuCisJLSBBZGQgRFQvU1QgKGRvdWJsZS9zaW1wbGUgdHJhbnNpdGlvbikgaW4gdGhlIHRyYW5zZmVyIAorCSAgbmVnb3RpYXRpb24gYW5ub3VuY2UuCisJLSBGb3JjZXMgdGhlIG1heCBudW1iZXIgb2YgdGFza3MgcGVyIExVTiB0byBhdCBsZWFzdCA2NC4KKwktIFVzZSBwY2lfc2V0X2RtYV9tYXNrKCkgZm9yIGxpbnV4LTIuNC4zIGFuZCBhYm92ZS4KKwktIEEgY291cGxlIG9mIGNvbW1lbnRzIGZpeGVzLgorCitXZWQgTWF5IDIyOjAwIDIwMDEgR2VyYXJkIFJvdWRpZXIgCisJKiB2ZXJzaW9uIHN5bS0yLjEuMTAtMjAwMTA1MDkKKwktIE1hc2sgR1BDTlRMIGFnYWluc3QgMHgxYyAod2FzIDB4ZmMpIGZvciB0aGUgcmVhZGluZyBvZiB0aGUgTlZSQU0uCisJICBUaGlzIGVuc3VyZSBMRURDIGJpdCB3aWxsIG5vdCBiZSBzZXQgb24gODk2IGFuZCBsYXRlciBjaGlwcy4KKwkgIEZpeCBzZW50IGJ5IENoaXAgU2FsemVuYmVyZyA8Y2hpcEBwZXJsc3VwcG9ydC5jb20+LgorCS0gRGVmaW5lIHRoZSBudW1iZXIgb2YgUFFTIEJVU2VzIHN1cHBvcnRlZC4KKwkgIEZpeCBzZW50IGJ5IFN0aWcgVGVsZmVyIDxzdGlnQGFwaS1uZXR3b3Jrcy5jb20+CisJLSBNaXNjZWxsYW5lb3VzIGNvbW1vbiBjb2RlIHJlYXJyYW5nZW1lbnRzIGR1ZSB0byBOZXRCU0QgYWNjZWwgCisJICBpb2N0bCBzdXBwb3J0LCB3aXRob3V0IGltcGFjdCBvbiBMaW51eCAoaG9wZWZ1bGx5KS4KKworTW9uIEp1bHkgMiAxMjowMCAyMDAxIEdlcmFyZCBSb3VkaWVyIAorCSogdmVyc2lvbiBzeW0tMi4xLjExLTIwMDEwNzAyCisJLSBBZGQgVGVrcmFtIDM5MCBVMkIvVTJXIFNDU0kgTEVEIGhhbmRsaW5nLgorCSAgU3VibWl0dGVkIGJ5IENoaXAgU2FsemVuYmVyZyA8Y2hpcEB2YWxpbnV4LmNvbT4KKwktIEFkZCBjYWxsIHRvIHNjc2lfc2V0X3BjaV9kZXZpY2UoKSBmb3Iga2VybmVscyA+PSAyLjQuNC4KKwktIENoZWNrIHBjaSBkbWEgbWFwcGluZyBmYWlsdXJlcyBhbmQgY29tcGxldGUgdGhlIElPIHdpdGggc29tZSAKKwkgIGVycm9yIHdoZW4gc3VjaCBtYXBwaW5nIGZhaWxzLgorCS0gRmlsbCBpbiBpbnN0YW5jZS0+bWF4X2NtZF9sZW4gZm9yIGtlcm5lbHMgPiAyLjQuMC4KKwktIEEgY291cGxlIG9mIHRpbnkgZml4ZXMgLi4uCisKK1N1biBTZXAgOSAxODowMCAyMDAxIEdlcmFyZCBSb3VkaWVyIAorCSogdmVyc2lvbiBzeW0tMi4xLjEyLTIwMDEwOTA5CisJLSBDaGFuZ2UgbXkgZW1haWwgYWRkcmVzcy4KKwktIEFkZCBpbmZyYXN0cnVjdHVyZSBmb3IgdGhlIGZvcnRoY29taW5nIDY0IGJpdCBETUEgYWRkcmVzc2luZyBzdXBwb3J0LgorCSAgKEJhc2VkIG9uIFBDSSA2NCBiaXQgcGF0Y2ggZnJvbSBEYXZpZCBTLiBNaWxsZXIpCisJLSBEb25ub3QgdXNlIGFueW1vcmUgdm1fb2Zmc2V0X3QgdHlwZS4KKworU2F0IFNlcCAxNSAyMDowMCAyMDAxIEdlcmFyZCBSb3VkaWVyIAorCSogdmVyc2lvbiBzeW0tMi4xLjEzLTIwMDEwOTE2CisJLSBBZGQgc3VwcG9ydCBmb3IgNjQgYml0IERNQSBhZGRyZXNzaW5nIHVzaW5nIHNlZ21lbnQgcmVnaXN0ZXJzLgorCSAgMTYgcmVnaXN0ZXJzIGZvciB1cCB0byA0IEdCIHggMTYgLT4gNjQgR0IuCisKK1NhdCBTZXAgMjIgMTI6MDAgMjAwMSBHZXJhcmQgUm91ZGllciAKKwkqIHZlcnNpb24gc3ltLTIuMS4xNC0yMDAxMDkyMgorCS0gQ29tcGxldGUgcmV3cml0ZSBvZiB0aGUgZWggaGFuZGxpbmcuIFRoZSBkcml2ZXIgaXMgbm93IHVzaW5nIGEgCisJICBzZW1hcGhvcmUgaW4gb3JkZXIgdG8gYmVoYXZlIHN5bmNocm9ub3VzbHkgYXMgcmVxdWlyZWQgYnkgdGhlIGVoIAorCSAgdGhyZWFkcy4gQSB0aW1lciBpcyBhbHNvIHVzZWQgdG8gcHJldmVudCBmcm9tIHdhaXRpbmcgaW5kZWZpbml0ZWx5LgorCitTdW4gU2VwIDMwIDE3OjAwIDIwMDEgR2VyYXJkIFJvdWRpZXIgCisJKiB2ZXJzaW9uIHN5bS0yLjEuMTUtMjAwMTA5MzAKKwktIEluY2x1ZGUgPGxpbnV4L21vZHVsZS5oPiB1bmNvbmRpdGlvbm5hbHkgYXMgZXhwZWN0ZWQgYnkgbGF0ZXN0CisJICBrZXJuZWxzLgorCS0gVXNlIGRlbF90aW1lcl9zeW5jKCkgZm9yIHJlY2VudCBrZXJuZWxzIHRvIGtpbGwgdGhlIGRyaXZlciB0aW1lciAKKwkgIG9uIG1vZHVsZSByZWxlYXNlLgorCitTdW4gT2N0IDI4IDE1OjAwIDIwMDEgR2VyYXJkIFJvdWRpZXIgCisJKiB2ZXJzaW9uIHN5bS0yLjEuMTYtMjAwMTEwMjgKKwktIFNsaWdodGx5IHNpbXBsaWZ5IGRyaXZlciBjb25maWd1cmF0aW9uLgorCS0gUHJlcGFyZSBhIG5ldyBwYXRjaCBhZ2FpbnN0IGxpbnV4LTIuNC4xMy4KKworU2F0IE5vdiAxNyAxMDowMCAyMDAxIEdlcmFyZCBSb3VkaWVyIAorCSogdmVyc2lvbiBzeW0tMi4xLjE3CisJLSBGaXggYSBjb3VwbGUgb2YgZ2NjL2djYzMgd2FybmluZ3MuCisJLSBBbGxvY2F0ZSBzZXBhcmF0ZWx5IGZyb20gdGhlIEhDQiB0aGUgYXJyYXkgZm9yIENDQnMgaGFzaGVkIGJ5IERTQS4KKwkgIEFsbCBkcml2ZXIgbWVtb3J5IGFsbG9jYXRpb25zIGFyZSBub3cgbm90IGdyZWF0ZXIgdGhhbiAxIFBBR0UgCisJICBldmVuIG9uIFBQQzY0IC8gNEtCIFBBR0Ugc3VycHJpc2luZyBzZXR1cC4KKworU2F0IERlYyAwMSAxODowMCAyMDAxIEdlcmFyZCBSb3VkaWVyIAorCSogdmVyc2lvbiBzeW0tMi4xLjE3YQorCS0gVXNlIHVfbG9uZyBpbnN0ZWFkIG9mIFUzMiBmb3IgdGhlIElPIGJhc2UgY29va2llLiBUaGlzIGlzIG1vcmUgCisJICBjb25zaXN0ZW50IHdpdGggd2hhdCBhcmNocyBhcmUgZXhwZWN0aW5nLgorCS0gVXNlIE1NSU8gcGVyIGRlZmF1bHQgZm9yIFBvd2VyIFBDIGluc3RlYWQgb2Ygc29tZSBmYWtlIG5vcm1hbCBJTywKKwkgIGFzIFBhdWwgTWFja2VycmFzIHN0YXRlZCB0aGF0IE1NSU8gd29ya3MgZmluZSBub3cgb24gdGhpcyBhcmNoLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9zY3NpL0ZsYXNoUG9pbnQudHh0IGIvRG9jdW1lbnRhdGlvbi9zY3NpL0ZsYXNoUG9pbnQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ1YWNhYTMKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL3Njc2kvRmxhc2hQb2ludC50eHQKQEAgLTAsMCArMSwxNjMgQEAKK1RoZSBCdXNMb2dpYyBGbGFzaFBvaW50IFNDU0kgSG9zdCBBZGFwdGVycyBhcmUgbm93IGZ1bGx5IHN1cHBvcnRlZCBvbiBMaW51eC4KK1RoZSB1cGdyYWRlIHByb2dyYW0gZGVzY3JpYmVkIGJlbG93IGhhcyBiZWVuIG9mZmljaWFsbHkgdGVybWluYXRlZCBlZmZlY3RpdmUKKzMxIE1hcmNoIDE5OTcgc2luY2UgaXQgaXMgbm8gbG9uZ2VyIG5lZWRlZC4KKworCisKKwkgIE1ZTEVYIElOVFJPRFVDRVMgTElOVVggT1BFUkFUSU5HIFNZU1RFTSBTVVBQT1JUIEZPUiBJVFMKKwkgICAgICBCVVNMT0dJQyBGTEFTSFBPSU5UIExJTkUgT0YgU0NTSSBIT1NUIEFEQVBURVJTCisKKworRlJFTU9OVCwgQ0EsIC0tIE9jdG9iZXIgOCwgMTk5NiAtLSBNeWxleCBDb3Jwb3JhdGlvbiBoYXMgZXhwYW5kZWQgTGludXgKK29wZXJhdGluZyBzeXN0ZW0gc3VwcG9ydCB0byBpdHMgQnVzTG9naWMgYnJhbmQgb2YgRmxhc2hQb2ludCBVbHRyYSBTQ1NJCitob3N0IGFkYXB0ZXJzLiAgQWxsIG9mIEJ1c0xvZ2ljJ3Mgb3RoZXIgU0NTSSBob3N0IGFkYXB0ZXJzLCBpbmNsdWRpbmcgdGhlCitNdWx0aU1hc3RlciBsaW5lLCBjdXJyZW50bHkgc3VwcG9ydCB0aGUgTGludXggb3BlcmF0aW5nIHN5c3RlbS4gIExpbnV4Citkcml2ZXJzIGFuZCBpbmZvcm1hdGlvbiB3aWxsIGJlIGF2YWlsYWJsZSBvbiBPY3RvYmVyIDE1dGggYXQKK2h0dHA6Ly93d3cuZGFuZGVsaW9uLmNvbS9MaW51eC8uCisKKyJNeWxleCBpcyBjb21taXR0ZWQgdG8gc3VwcG9ydGluZyB0aGUgTGludXggY29tbXVuaXR5LCIgc2F5cyBQZXRlciBTaGFtYm9yYSwKK3ZpY2UgcHJlc2lkZW50IG9mIG1hcmtldGluZyBmb3IgTXlsZXguICAiV2UgaGF2ZSBzdXBwb3J0ZWQgTGludXggZHJpdmVyCitkZXZlbG9wbWVudCBhbmQgcHJvdmlkZWQgdGVjaG5pY2FsIHN1cHBvcnQgZm9yIG91ciBob3N0IGFkYXB0ZXJzIGZvciBzZXZlcmFsCit5ZWFycywgYW5kIGFyZSBwbGVhc2VkIHRvIG5vdyBtYWtlIG91ciBGbGFzaFBvaW50IHByb2R1Y3RzIGF2YWlsYWJsZSB0byB0aGlzCit1c2VyIGJhc2UuIgorCitUaGUgTGludXggT3BlcmF0aW5nIFN5c3RlbQorCitMaW51eCBpcyBhIGZyZWVseS1kaXN0cmlidXRlZCBpbXBsZW1lbnRhdGlvbiBvZiBVTklYIGZvciBJbnRlbCB4ODYsIFN1bgorU1BBUkMsIFNHSSBNSVBTLCBNb3Rvcm9sYSA2OGssIERpZ2l0YWwgQWxwaGEgQVhQIGFuZCBNb3Rvcm9sYSBQb3dlclBDCittYWNoaW5lcy4gIEl0IHN1cHBvcnRzIGEgd2lkZSByYW5nZSBvZiBzb2Z0d2FyZSwgaW5jbHVkaW5nIHRoZSBYIFdpbmRvdworU3lzdGVtLCBFbWFjcywgYW5kIFRDUC9JUCBuZXR3b3JraW5nLiAgRnVydGhlciBpbmZvcm1hdGlvbiBpcyBhdmFpbGFibGUgYXQKK2h0dHA6Ly93d3cubGludXgub3JnIGFuZCBodHRwOi8vd3d3LnNzYy5jb20vbGludXguCisKK0ZsYXNoUG9pbnQgSG9zdCBBZGFwdGVycworCitUaGUgRmxhc2hQb2ludCBmYW1pbHkgb2YgVWx0cmEgU0NTSSBob3N0IGFkYXB0ZXJzLCBkZXNpZ25lZCBmb3Igd29ya3N0YXRpb24KK2FuZCBmaWxlIHNlcnZlciBlbnZpcm9ubWVudHMsIGFyZSBhdmFpbGFibGUgaW4gbmFycm93LCB3aWRlLCBkdWFsIGNoYW5uZWwsCithbmQgZHVhbCBjaGFubmVsIHdpZGUgdmVyc2lvbnMuICBUaGVzZSBhZGFwdGVycyBmZWF0dXJlIFNlcUVuZ2luZQorYXV0b21hdGlvbiB0ZWNobm9sb2d5LCB3aGljaCBtaW5pbWl6ZXMgU0NTSSBjb21tYW5kIG92ZXJoZWFkIGFuZCByZWR1Y2VzCit0aGUgbnVtYmVyIG9mIGludGVycnVwdHMgZ2VuZXJhdGVkIHRvIHRoZSBDUFUuCisKK0Fib3V0IE15bGV4CisKK015bGV4IENvcnBvcmF0aW9uIChOQVNEQVEvTk0gU1lNQk9MOiBNWUxYKSwgZm91bmRlZCBpbiAxOTgzLCBpcyBhIGxlYWRpbmcKK3Byb2R1Y2VyIG9mIFJBSUQgdGVjaG5vbG9neSBhbmQgbmV0d29yayBtYW5hZ2VtZW50IHByb2R1Y3RzLiAgVGhlIGNvbXBhbnkKK3Byb2R1Y2VzIGhpZ2ggcGVyZm9ybWFuY2UgZGlzayBhcnJheSAoUkFJRCkgY29udHJvbGxlcnMsIGFuZCBjb21wbGVtZW50YXJ5Citjb21wdXRlciBwcm9kdWN0cyBmb3IgbmV0d29yayBzZXJ2ZXJzLCBtYXNzIHN0b3JhZ2Ugc3lzdGVtcywgd29ya3N0YXRpb25zCithbmQgc3lzdGVtIGJvYXJkcy4gIFRocm91Z2ggaXRzIHdpZGUgcmFuZ2Ugb2YgUkFJRCBjb250cm9sbGVycyBhbmQgaXRzCitCdXNMb2dpYyBsaW5lIG9mIFVsdHJhIFNDU0kgaG9zdCBhZGFwdGVyIHByb2R1Y3RzLCBNeWxleCBwcm92aWRlcyBlbmFibGluZworaW50ZWxsaWdlbnQgSS9PIHRlY2hub2xvZ2llcyB0aGF0IGluY3JlYXNlIG5ldHdvcmsgbWFuYWdlbWVudCBjb250cm9sLAorZW5oYW5jZSBDUFUgdXRpbGl6YXRpb24sIG9wdGltaXplIEkvTyBwZXJmb3JtYW5jZSwgYW5kIGVuc3VyZSBkYXRhIHNlY3VyaXR5CithbmQgYXZhaWxhYmlsaXR5LiAgUHJvZHVjdHMgYXJlIHNvbGQgZ2xvYmFsbHkgdGhyb3VnaCBhIG5ldHdvcmsgb2YgT0VNcywKK21ham9yIGRpc3RyaWJ1dG9ycywgVkFScywgYW5kIHN5c3RlbSBpbnRlZ3JhdG9ycy4gIE15bGV4IENvcnBvcmF0aW9uIGlzCitoZWFkcXVhcnRlcmVkIGF0IDM0NTUxIEFyZGVud29vZCBCbHZkLiwgRnJlbW9udCwgQ0EuCisKKwkJCQkgICAjIyMjCisKK0NvbnRhY3Q6CisKK1BldGVyIFNoYW1ib3JhCitWaWNlIFByZXNpZGVudCBvZiBNYXJrZXRpbmcKK015bGV4IENvcnAuCis1MTAvNzk2LTYxMDAKK3BldGVyc0BteWxleC5jb20KKwwKKwkJCSAgICAgICBBTk5PVU5DRU1FTlQKKwkgICAgICAgQnVzTG9naWMgRmxhc2hQb2ludCBMVC9CVC05NDggVXBncmFkZSBQcm9ncmFtCisJCQkgICAgICAxIEZlYnJ1YXJ5IDE5OTYKKworCQkJICBBRERJVElPTkFMIEFOTk9VTkNFTUVOVAorCSAgICAgICBCdXNMb2dpYyBGbGFzaFBvaW50IExXL0JULTk1OCBVcGdyYWRlIFByb2dyYW0KKwkJCSAgICAgICAxNCBKdW5lIDE5OTYKKworRXZlciBzaW5jZSBpdHMgaW50cm9kdWN0aW9uIGxhc3QgT2N0b2JlciwgdGhlIEJ1c0xvZ2ljIEZsYXNoUG9pbnQgTFQgaGFzCitiZWVuIHByb2JsZW1hdGljIGZvciBtZW1iZXJzIG9mIHRoZSBMaW51eCBjb21tdW5pdHksIGluIHRoYXQgbm8gTGludXgKK2RyaXZlcnMgaGF2ZSBiZWVuIGF2YWlsYWJsZSBmb3IgdGhpcyBuZXcgVWx0cmEgU0NTSSBwcm9kdWN0LiAgRGVzcGl0ZSBpdCdzCitvZmZpY2lhbGx5IGJlaW5nIHBvc2l0aW9uZWQgYXMgYSBkZXNrdG9wIHdvcmtzdGF0aW9uIHByb2R1Y3QsIGFuZCBub3QgYmVpbmcKK3BhcnRpY3VsYXJseSB3ZWxsIHN1aXRlZCBmb3IgYSBoaWdoIHBlcmZvcm1hbmNlIG11bHRpdGFza2luZyBvcGVyYXRpbmcKK3N5c3RlbSBsaWtlIExpbnV4LCB0aGUgRmxhc2hQb2ludCBMVCBoYXMgYmVlbiB0b3V0ZWQgYnkgY29tcHV0ZXIgc3lzdGVtCit2ZW5kb3JzIGFzIHRoZSBsYXRlc3QgdGhpbmcsIGFuZCBoYXMgYmVlbiBzb2xkIGV2ZW4gb24gbWFueSBvZiB0aGVpciBoaWdoCitlbmQgc3lzdGVtcywgdG8gdGhlIGV4Y2x1c2lvbiBvZiB0aGUgb2xkZXIgTXVsdGlNYXN0ZXIgcHJvZHVjdHMuICBUaGlzIGhhcworY2F1c2VkIGdyaWVmIGZvciBtYW55IHBlb3BsZSB3aG8gaW5hZHZlcnRlbnRseSBwdXJjaGFzZWQgYSBzeXN0ZW0gZXhwZWN0aW5nCit0aGF0IGFsbCBCdXNMb2dpYyBTQ1NJIEhvc3QgQWRhcHRlcnMgd2VyZSBzdXBwb3J0ZWQgYnkgTGludXgsIG9ubHkgdG8KK2Rpc2NvdmVyIHRoYXQgdGhlIEZsYXNoUG9pbnQgd2FzIG5vdCBzdXBwb3J0ZWQgYW5kIHdvdWxkIG5vdCBiZSBmb3IgcXVpdGUKK3NvbWUgdGltZSwgaWYgZXZlci4KKworQWZ0ZXIgdGhpcyBwcm9ibGVtIHdhcyBpZGVudGlmaWVkLCBCdXNMb2dpYyBjb250YWN0ZWQgaXRzIG1ham9yIE9FTQorY3VzdG9tZXJzIHRvIG1ha2Ugc3VyZSB0aGUgQlQtOTQ2Qy85NTZDIE11bHRpTWFzdGVyIGNhcmRzIHdvdWxkIHN0aWxsIGJlCittYWRlIGF2YWlsYWJsZSwgYW5kIHRoYXQgTGludXggdXNlcnMgd2hvIG1pc3Rha2VubHkgb3JkZXJlZCBzeXN0ZW1zIHdpdGgKK3RoZSBGbGFzaFBvaW50IHdvdWxkIGJlIGFibGUgdG8gdXBncmFkZSB0byB0aGUgQlQtOTQ2Qy4gIFdoaWxlIHRoaXMgaGVscGVkCittYW55IHB1cmNoYXNlcnMgb2YgbmV3IHN5c3RlbXMsIGl0IHdhcyBvbmx5IGEgcGFydGlhbCBzb2x1dGlvbiB0byB0aGUKK292ZXJhbGwgcHJvYmxlbSBvZiBGbGFzaFBvaW50IHN1cHBvcnQgZm9yIExpbnV4IHVzZXJzLiAgSXQgZGlkIG5vdGhpbmcgdG8KK2Fzc2lzdCB0aGUgcGVvcGxlIHdobyBpbml0aWFsbHkgcHVyY2hhc2VkIGEgRmxhc2hQb2ludCBmb3IgYSBzdXBwb3J0ZWQKK29wZXJhdGluZyBzeXN0ZW0gYW5kIHRoZW4gbGF0ZXIgZGVjaWRlZCB0byBydW4gTGludXgsIG9yIHRob3NlIHdobyBoYWQKK2VuZGVkIHVwIHdpdGggYSBGbGFzaFBvaW50IExULCBiZWxpZXZpbmcgaXQgd2FzIHN1cHBvcnRlZCwgYW5kIHdlcmUgdW5hYmxlCit0byByZXR1cm4gaXQuCisKK0luIHRoZSBtaWRkbGUgb2YgRGVjZW1iZXIsIEkgYXNrZWQgdG8gbWVldCB3aXRoIEJ1c0xvZ2ljJ3Mgc2VuaW9yCittYW5hZ2VtZW50IHRvIGRpc2N1c3MgdGhlIGlzc3VlcyByZWxhdGVkIHRvIExpbnV4IGFuZCBmcmVlIHNvZnR3YXJlIHN1cHBvcnQKK2ZvciB0aGUgRmxhc2hQb2ludC4gIFJ1bW9ycyBvZiB2YXJ5aW5nIGFjY3VyYWN5IGhhZCBiZWVuIGNpcmN1bGF0aW5nCitwdWJsaWNseSBhYm91dCBCdXNMb2dpYydzIGF0dGl0dWRlIHRvd2FyZCB0aGUgTGludXggY29tbXVuaXR5LCBhbmQgSSBmZWx0CitpdCB3YXMgYmVzdCB0aGF0IHRoZXNlIGlzc3VlcyBiZSBhZGRyZXNzZWQgZGlyZWN0bHkuICBJIHNlbnQgYW4gZW1haWwKK21lc3NhZ2UgYWZ0ZXIgMTFwbSBvbmUgZXZlbmluZywgYW5kIHRoZSBtZWV0aW5nIHRvb2sgcGxhY2UgdGhlIG5leHQKK2FmdGVybm9vbi4gIFVuZm9ydHVuYXRlbHksIGNvcnBvcmF0ZSB3aGVlbHMgc29tZXRpbWVzIGdyaW5kIHNsb3dseSwKK2VzcGVjaWFsbHkgd2hlbiBhIGNvbXBhbnkgaXMgYmVpbmcgYWNxdWlyZWQsIGFuZCBzbyBpdCdzIHRha2VuIHVudGlsIG5vdworYmVmb3JlIHRoZSBkZXRhaWxzIHdlcmUgY29tcGxldGVseSBkZXRlcm1pbmVkIGFuZCBhIHB1YmxpYyBzdGF0ZW1lbnQgY291bGQKK2JlIG1hZGUuCisKK0J1c0xvZ2ljIGlzIG5vdCBwcmVwYXJlZCBhdCB0aGlzIHRpbWUgdG8gcmVsZWFzZSB0aGUgaW5mb3JtYXRpb24gbmVjZXNzYXJ5Citmb3IgdGhpcmQgcGFydGllcyB0byB3cml0ZSBkcml2ZXJzIGZvciB0aGUgRmxhc2hQb2ludC4gIFRoZSBvbmx5IGV4aXN0aW5nCitGbGFzaFBvaW50IGRyaXZlcnMgaGF2ZSBiZWVuIHdyaXR0ZW4gZGlyZWN0bHkgYnkgQnVzTG9naWMgRW5naW5lZXJpbmcsIGFuZAordGhlcmUgaXMgbm8gRmxhc2hQb2ludCBkb2N1bWVudGF0aW9uIHN1ZmZpY2llbnRseSBkZXRhaWxlZCB0byBhbGxvdyBvdXRzaWRlCitkZXZlbG9wZXJzIHRvIHdyaXRlIGEgZHJpdmVyIHdpdGhvdXQgc3Vic3RhbnRpYWwgYXNzaXN0YW5jZS4gIFdoaWxlIHRoZXJlCithcmUgcGVvcGxlIGF0IEJ1c0xvZ2ljIHdobyB3b3VsZCByYXRoZXIgbm90IHJlbGVhc2UgdGhlIGRldGFpbHMgb2YgdGhlCitGbGFzaFBvaW50IGFyY2hpdGVjdHVyZSBhdCBhbGwsIHRoYXQgZGViYXRlIGhhcyBub3QgeWV0IGJlZW4gc2V0dGxlZCBlaXRoZXIKK3dheS4gIEluIGFueSBldmVudCwgZXZlbiBpZiBkb2N1bWVudGF0aW9uIHdlcmUgYXZhaWxhYmxlIHRvZGF5IGl0IHdvdWxkCit0YWtlIHF1aXRlIGEgd2hpbGUgZm9yIGEgdXNhYmxlIGRyaXZlciB0byBiZSB3cml0dGVuLCBlc3BlY2lhbGx5IHNpbmNlIEknbQorbm90IGNvbnZpbmNlZCB0aGF0IHRoZSBlZmZvcnQgcmVxdWlyZWQgd291bGQgYmUgd29ydGh3aGlsZS4KKworSG93ZXZlciwgQnVzTG9naWMgZG9lcyByZW1haW4gY29tbWl0dGVkIHRvIHByb3ZpZGluZyBhIGhpZ2ggcGVyZm9ybWFuY2UKK1NDU0kgc29sdXRpb24gZm9yIHRoZSBMaW51eCBjb21tdW5pdHksIGFuZCBkb2VzIG5vdCB3YW50IHRvIHNlZSBhbnlvbmUgbGVmdAordW5hYmxlIHRvIHJ1biBMaW51eCBiZWNhdXNlIHRoZXkgaGF2ZSBhIEZsYXNocG9pbnQgTFQuICBUaGVyZWZvcmUsIEJ1c0xvZ2ljCitoYXMgcHV0IGluIHBsYWNlIGEgZGlyZWN0IHVwZ3JhZGUgcHJvZ3JhbSB0byBhbGxvdyBhbnkgTGludXggdXNlciB3b3JsZHdpZGUKK3RvIHRyYWRlIGluIHRoZWlyIEZsYXNoUG9pbnQgTFQgZm9yIHRoZSBuZXcgQlQtOTQ4IE11bHRpTWFzdGVyIFBDSSBVbHRyYQorU0NTSSBIb3N0IEFkYXB0ZXIuICBUaGUgQlQtOTQ4IGlzIHRoZSBVbHRyYSBTQ1NJIHN1Y2Nlc3NvciB0byB0aGUgQlQtOTQ2QworYW5kIGhhcyBhbGwgdGhlIGJlc3QgZmVhdHVyZXMgb2YgYm90aCB0aGUgQlQtOTQ2QyBhbmQgRmxhc2hQb2ludCBMVCwKK2luY2x1ZGluZyBzbWFydCB0ZXJtaW5hdGlvbiBhbmQgYSBmbGFzaCBQUk9NIGZvciBlYXN5IGZpcm13YXJlIHVwZGF0ZXMsIGFuZAoraXMgb2YgY291cnNlIGNvbXBhdGlibGUgd2l0aCB0aGUgcHJlc2VudCBMaW51eCBkcml2ZXIuICBUaGUgcHJpY2UgZm9yIHRoaXMKK3VwZ3JhZGUgaGFzIGJlZW4gc2V0IGF0IFVTICQ0NSBwbHVzIHNoaXBwaW5nIGFuZCBoYW5kbGluZywgYW5kIHRoZSB1cGdyYWRlCitwcm9ncmFtIHdpbGwgYmUgYWRtaW5pc3RlcmVkIHRocm91Z2ggQnVzTG9naWMgVGVjaG5pY2FsIFN1cHBvcnQsIHdoaWNoIGNhbgorYmUgcmVhY2hlZCBieSBlbGVjdHJvbmljIG1haWwgYXQgdGVjaHN1cEBidXNsb2dpYy5jb20sIGJ5IFZvaWNlIGF0ICsxIDQwOAorNjU0LTA3NjAsIG9yIGJ5IEZBWCBhdCArMSA0MDggNDkyLTE1NDIuCisKK0FzIG9mIDE0IEp1bmUgMTk5NiwgdGhlIG9yaWdpbmFsIEJ1c0xvZ2ljIEZsYXNoUG9pbnQgTFQgdG8gQlQtOTQ4IHVwZ3JhZGUKK3Byb2dyYW0gaGFzIG5vdyBiZWVuIGV4dGVuZGVkIHRvIGVuY29tcGFzcyB0aGUgRmxhc2hQb2ludCBMVyBXaWRlIFVsdHJhCitTQ1NJIEhvc3QgQWRhcHRlci4gIEFueSBMaW51eCB1c2VyIHdvcmxkd2lkZSBtYXkgdHJhZGUgaW4gdGhlaXIgRmxhc2hQb2ludAorTFcgKEJULTk1MCkgZm9yIGEgQlQtOTU4IE11bHRpTWFzdGVyIFBDSSBVbHRyYSBTQ1NJIEhvc3QgQWRhcHRlci4gIFRoZQorcHJpY2UgZm9yIHRoaXMgdXBncmFkZSBoYXMgYmVlbiBzZXQgYXQgVVMgJDY1IHBsdXMgc2hpcHBpbmcgYW5kIGhhbmRsaW5nLgorCitJIHdhcyBhIGJldGEgdGVzdCBzaXRlIGZvciB0aGUgQlQtOTQ4Lzk1OCwgYW5kIHZlcnNpb25zIDEuMi4xIGFuZCAxLjMuMSBvZgorbXkgQnVzTG9naWMgZHJpdmVyIGFscmVhZHkgaW5jbHVkZWQgbGF0ZW50IHN1cHBvcnQgZm9yIHRoZSBCVC05NDgvOTU4LgorQWRkaXRpb25hbCBjb3NtZXRpYyBzdXBwb3J0IGZvciB0aGUgVWx0cmEgU0NTSSBNdWx0aU1hc3RlciBjYXJkcyB3YXMgYWRkZWQKK3N1YnNlcXVlbnQgcmVsZWFzZXMuICBBcyBhIHJlc3VsdCBvZiB0aGlzIGNvb3BlcmF0aXZlIHRlc3RpbmcgcHJvY2VzcywKK3NldmVyYWwgZmlybXdhcmUgYnVncyB3ZXJlIGZvdW5kIGFuZCBjb3JyZWN0ZWQuICBNeSBoZWF2aWx5IGxvYWRlZCBMaW51eAordGVzdCBzeXN0ZW0gcHJvdmlkZWQgYW4gaWRlYWwgZW52aXJvbm1lbnQgZm9yIHRlc3RpbmcgZXJyb3IgcmVjb3ZlcnkKK3Byb2Nlc3NlcyB0aGF0IGFyZSBtdWNoIG1vcmUgcmFyZWx5IGV4ZXJjaXNlZCBpbiBwcm9kdWN0aW9uIHN5c3RlbXMsIGJ1dAorYXJlIGNydWNpYWwgdG8gb3ZlcmFsbCBzeXN0ZW0gc3RhYmlsaXR5LiAgSXQgd2FzIGVzcGVjaWFsbHkgY29udmVuaWVudAorYmVpbmcgYWJsZSB0byB3b3JrIGRpcmVjdGx5IHdpdGggdGhlaXIgZmlybXdhcmUgZW5naW5lZXIgaW4gZGVtb25zdHJhdGluZwordGhlIHByb2JsZW1zIHVuZGVyIGNvbnRyb2wgb2YgdGhlIGZpcm13YXJlIGRlYnVnZ2luZyBlbnZpcm9ubWVudDsgdGhpbmdzCitzdXJlIGhhdmUgY29tZSBhIGxvbmcgd2F5IHNpbmNlIHRoZSBsYXN0IHRpbWUgSSB3b3JrZWQgb24gZmlybXdhcmUgZm9yIGFuCitlbWJlZGRlZCBzeXN0ZW0uICBJIGFtIHByZXNlbnRseSB3b3JraW5nIG9uIHNvbWUgcGVyZm9ybWFuY2UgdGVzdGluZyBhbmQKK2V4cGVjdCB0byBoYXZlIHNvbWUgZGF0YSB0byByZXBvcnQgaW4gdGhlIG5vdCB0b28gZGlzdGFudCBmdXR1cmUuCisKK0J1c0xvZ2ljIGFza2VkIG1lIHRvIHNlbmQgdGhpcyBhbm5vdW5jZW1lbnQgc2luY2UgYSBsYXJnZSBwZXJjZW50YWdlIG9mIHRoZQorcXVlc3Rpb25zIHJlZ2FyZGluZyBzdXBwb3J0IGZvciB0aGUgRmxhc2hQb2ludCBoYXZlIGVpdGhlciBiZWVuIHNlbnQgdG8gbWUKK2RpcmVjdGx5IHZpYSBlbWFpbCwgb3IgaGF2ZSBhcHBlYXJlZCBpbiB0aGUgTGludXggbmV3c2dyb3VwcyBpbiB3aGljaCBJCitwYXJ0aWNpcGF0ZS4gIFRvIHN1bW1hcml6ZSwgQnVzTG9naWMgaXMgb2ZmZXJpbmcgTGludXggdXNlcnMgYW4gdXBncmFkZQorZnJvbSB0aGUgdW5zdXBwb3J0ZWQgRmxhc2hQb2ludCBMVCAoQlQtOTMwKSB0byB0aGUgc3VwcG9ydGVkIEJULTk0OCBmb3IgVVMKKyQ0NSBwbHVzIHNoaXBwaW5nIGFuZCBoYW5kbGluZywgb3IgZnJvbSB0aGUgdW5zdXBwb3J0ZWQgRmxhc2hQb2ludCBMVworKEJULTk1MCkgdG8gdGhlIHN1cHBvcnRlZCBCVC05NTggZm9yICQ2NSBwbHVzIHNoaXBwaW5nIGFuZCBoYW5kbGluZy4KK0NvbnRhY3QgQnVzTG9naWMgVGVjaG5pY2FsIFN1cHBvcnQgYXQgdGVjaHN1cEBidXNsb2dpYy5jb20gb3IgKzEgNDA4Cis2NTQtMDc2MCB0byB0YWtlIGFkdmFudGFnZSBvZiB0aGVpciBvZmZlci4KKworCQlMZW9uYXJkIE4uIFp1YmtvZmYKKwkJbG56QGRhbmRlbGlvbi5jb20KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vc2NzaS9MSUNFTlNFLkZsYXNoUG9pbnQgYi9Eb2N1bWVudGF0aW9uL3Njc2kvTElDRU5TRS5GbGFzaFBvaW50Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZmZDBmZTIKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL3Njc2kvTElDRU5TRS5GbGFzaFBvaW50CkBAIC0wLDAgKzEsNjAgQEAKKyAgICAgICAgICAgICAgICAgICAgIEZsYXNoUG9pbnQgRHJpdmVyIERldmVsb3BlcidzIEtpdAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWZXJzaW9uIDEuMAorCisgICAgICAgICAgICAgICAgICAgQ29weXJpZ2h0IDE5OTUtMTk5NiBieSBNeWxleCBDb3Jwb3JhdGlvbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFsbCBSaWdodHMgUmVzZXJ2ZWQKKworVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBtYXkgcmVkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKK3RoZSB0ZXJtcyBvZiBlaXRoZXI6CisKKyAgICBhKSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbiwKKworICAgIG9yCisKKyAgICBiKSB0aGUgIkJTRC1zdHlsZSBMaWNlbnNlIiBpbmNsdWRlZCBiZWxvdy4KKworVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorV0lUSE9VVCBBTlkgV0FSUkFOVFksIHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK29yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIGVpdGhlciB0aGUgR05VIEdlbmVyYWwgUHVibGljCitMaWNlbnNlIG9yIHRoZSBCU0Qtc3R5bGUgTGljZW5zZSBiZWxvdyBmb3IgbW9yZSBkZXRhaWxzLgorCitZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZword2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKzY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorCitUaGUgQlNELXN0eWxlIExpY2Vuc2UgaXMgYXMgZm9sbG93czoKKworUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cittb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCittZXQ6CisKKzEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGlzIExJQ0VOU0UuRmxhc2hQb2ludAorICAgZmlsZSwgd2l0aG91dCBtb2RpZmljYXRpb24sIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zLCBhbmQgdGhlIGZvbGxvd2luZworICAgZGlzY2xhaW1lci4gIFRoZSBmb2xsb3dpbmcgY29weXJpZ2h0IG5vdGljZSBtdXN0IGFwcGVhciBpbW1lZGlhdGVseSBhdAorICAgdGhlIGJlZ2lubmluZyBvZiBhbGwgc291cmNlIGZpbGVzOgorCisgICAgICAgIENvcHlyaWdodCAxOTk1LTE5OTYgYnkgTXlsZXggQ29ycG9yYXRpb24uICBBbGwgUmlnaHRzIFJlc2VydmVkCisKKyAgICAgICAgVGhpcyBmaWxlIGlzIGF2YWlsYWJsZSB1bmRlciBib3RoIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgICAgICBhbmQgYSBCU0Qtc3R5bGUgY29weXJpZ2h0OyBzZWUgTElDRU5TRS5GbGFzaFBvaW50IGZvciBkZXRhaWxzLgorCisyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKworMy4gVGhlIG5hbWUgb2YgTXlsZXggQ29ycG9yYXRpb24gbWF5IG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZQorICAgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuCisgICBwZXJtaXNzaW9uLgorCitUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIE1ZTEVYIENPUlAuIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MgT1IKK0lNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKK09GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOCitOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsCitJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyhJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgorU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIKK0NBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorU1VDSCBEQU1BR0UuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3Njc2kvTXlsZXgudHh0IGIvRG9jdW1lbnRhdGlvbi9zY3NpL015bGV4LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZGY2OTI5Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9zY3NpL015bGV4LnR4dApAQCAtMCwwICsxLDUgQEAKK1BsZWFzZSBzZWUgdGhlIGZpbGUgUkVBRE1FLkJ1c0xvZ2ljIGZvciBpbmZvcm1hdGlvbiBhYm91dCBMaW51eCBzdXBwb3J0IGZvcgorTXlsZXggKGZvcm1lcmx5IEJ1c0xvZ2ljKSBNdWx0aU1hc3RlciBhbmQgRmxhc2hQb2ludCBTQ1NJIEhvc3QgQWRhcHRlcnMuCisKK1RoZSBNeWxleCBEQUM5NjAgUENJIFJBSUQgQ29udHJvbGxlcnMgYXJlIG5vdyBzdXBwb3J0ZWQuICBQbGVhc2UgY29uc3VsdAoraHR0cDovL3d3dy5kYW5kZWxpb24uY29tL0xpbnV4LyBmb3IgZnVydGhlciBpbmZvcm1hdGlvbiBvbiB0aGUgREFDOTYwIGRyaXZlci4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vc2NzaS9OaW5qYVNDU0kudHh0IGIvRG9jdW1lbnRhdGlvbi9zY3NpL05pbmphU0NTSS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDQxNzgwZgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vc2NzaS9OaW5qYVNDU0kudHh0CkBAIC0wLDAgKzEsMTMwIEBACisKKyAgICAgICAgIFdvcmtCaVQgTmluamFTQ1NJLTMvMzJCaSBkcml2ZXIgZm9yIExpbnV4CisKKzEuIENvbW1lbnQKKyBUaGlzIGlzIFdvcmtiaXQgY29ycC4ncyhodHRwOi8vd3d3LndvcmtiaXQuY28uanAvKSBOaW5qYVNDU0ktMworKGh0dHA6Ly93d3cud29ya2JpdC5jby5qcC90cy96X25qM3IuaHRtbCkgYW5kIE5pbmphU0NTSS0zMkJpCisoaHR0cDovL3d3dy53b3JrYml0LmNvLmpwL3RzL3pfbmpzYzMyYmkuaHRtbCkgUENNQ0lBIGNhcmQgZHJpdmVyIG1vZHVsZQorZm9yIExpbnV4LgorCisyLiBNeSBMaW51eCBlbnZpcm9ubWVudAorTGludXgga2VybmVsOiAyLjQuNyAvIDIuMi4xOQorcGNtY2lhLWNzOiAgICAzLjEuMjcKK2djYzogICAgICAgICAgZ2NjLTIuOTUuNAorUEMgY2FyZDogICAgICBJLU8gZGF0YSBQQ1NDLUYgKE5pbmphU0NTSS0zKQorICAgICAgICAgICAgICBJLU8gZGF0YSBDQlNDLUlJIGluIDE2IGJpdCBtb2RlIChOaW5qYVNDU0ktMzJCaSkKK1NDU0kgZGV2aWNlOiAgSS1PIGRhdGEgQ0RQUy1QWDI0IChDRC1ST00gZHJpdmUpCisgICAgICAgICAgICAgIE1lZGlhIEludGVsbGlnZW50IE1NTy02NDBHVCAoT3B0aWNhbCBkaXNrIGRyaXZlKQorCiszLiBJbnN0YWxsCitbMV0gQ2hlY2sgeW91ciBQQyBjYXJkIGlzIHRydWUgIk5pbmphU0NTSS0zIiBjYXJkLgorICAgIElmIHlvdSBpbnN0YWxsZWQgcGNtY2lhLWNzIGFscmVhZHksIHBjbWNpYSByZXBvcnRzIHlvdXIgY2FyZCBhcyBVTktOT1dOCisgICAgY2FyZCwgYW5kIHdyaXRlIFsiV0JUIiwgIk5pbmphU0NTSS0zIiwgIlIxLjAiXSBvciBzb21lIG90aGVyIHN0cmluZyB0bworICAgIHlvdXIgY29uc29sZSBvciBsb2cgZmlsZS4KKyAgICBZb3UgY2FuIGFsc28gdXNlICJjYXJkY3RsIiBwcm9ncmFtICh0aGlzIHByb2dyYW0gaXMgaW4gcGNtY2lhLWNzIHNvdXJjZQorICAgIGNvZGUpIHRvIGdldCBtb3JlIGluZm8uCisKKyMgY2F0IC92YXIvbG9nL21lc3NnYWVzCisuLi4KK0phbiAgMiAwMzo0NTowNiBsaW5kYmVyZyBjYXJkbWdyWzc4XTogdW5zdXBwb3J0ZWQgY2FyZCBpbiBzb2NrZXQgMQorSmFuICAyIDAzOjQ1OjA2IGxpbmRiZXJnIGNhcmRtZ3JbNzhdOiAgIHByb2R1Y3QgaW5mbzogIldCVCIsICJOaW5qYVNDU0ktMyIsICJSMS4wIgorLi4uCisjIGNhcmRjdGwgaWRlbnQKK1NvY2tldCAwOgorICBubyBwcm9kdWN0IGluZm8gYXZhaWxhYmxlCitTb2NrZXQgMToKKyAgcHJvZHVjdCBpbmZvOiAiSU8gREFUQSIsICJDQlNDMTYgICAgICAgIiwgIjEiCisKKworWzJdIEdldCBMaW51eCBrZXJuZWwgc291cmNlLCBhbmQgZXh0cmFjdCBpdCB0byAvdXNyL3NyYy4KKyAgICBCZWNhdXNlIE5pbmphU0NTSSBkcml2ZXIgcmVxdWllcnMgc29tZSBTQ1NJIGhlYWRlciBmaWxlcyBpbiBMaW51eCBrZXJuZWwKKyAgICBzb3VyY2UuCisgICAgSSByZWNvbWVuZCByZWJ1aWxkaW5nIHlvdXIga2VybmVsLiBUaGlzIGVsaW1pbmF0ZSBzb21lIHZlcnNpb25pbmcgcHJvYmxlbS4KKyQgY2QgL3Vzci9zcmMKKyQgdGFyIC16eHZmIGxpbnV4LXgueC54LnRhci5negorJCBjZCBsaW51eAorJCBtYWtlIGNvbmZpZworLi4uCisKK1szXSBJZiB5b3UgdXNlIHRoaXMgZHJpdmVyIHdpdGggS2VybmVsIDIuMiwgVW5wYWNrIHBjbWNpYS1jcyBpbiBzb21lIGRpcmVjdG9yeQorICAgIGFuZCBtYWtlICYgaW5zdGFsbC4gVGhpcyBkcml2ZXIgcmVxdWllcyBwY21jaWEtY3MgaGVhZGVyIGZpbGUuCiskIGNkIC91c3Ivc3JjCiskIHRhciB6eHZmIGNzLXBjbWNpYS1jcy0zLngueC50YXIuZ3oKKy4uLgorCitbNF0gRXh0cmFjdCB0aGlzIGRyaXZlcidzIGFyY2hpdmUgc29tZXdoZXJlLCBhbmQgZWRpdCBNYWtlZmlsZSwgdGhlbiBkbyBtYWtlLgorJCB0YXIgLXp4dmYgbnNwX2NzLXgueC50YXIuZ3oKKyQgY2QgbnNwX2NzLXgueAorJCBlbWFjcyBNYWtlZmlsZQorLi4uCiskIG1ha2UKKworWzVdIENvcHkgbnNwX2NzLm8gdG8gc3VpdGFibGUgcGxhc2UsIGxpa2UgL2xpYi9tb2R1bGVzLzxLZXJuZWwgdmVyc2lvbj4vcGNtY2lhLyAuCisKK1s2XSBBZGQgdGhlc2UgbGluZXMgdG8gL2V0Yy9wY21jaWEvY29uZmlnIC4KKyAgICBJZiB5b3UgeXNlIHBjbWNpYS1jcy0zLjEuOCBvciBsYXRlciwgd2UgY2FuIHVzZSAibnNwX2NzLmNvbmYiIGZpbGUuCisgICAgU28sIHlvdSBkb24ndCBuZWVkIHRvIGVkaXQgZmlsZS4gSnVzdCBjb3B5IHRvIC9ldGMvcGNtY2lhLyAuCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2RldmljZSAibnNwX2NzIgorICBjbGFzcyAic2NzaSIgbW9kdWxlICJuc3BfY3MiCisKK2NhcmQgIldvcmtCaXQgTmluamFTQ1NJLTMiCisgIHZlcnNpb24gIldCVCIsICJOaW5qYVNDU0ktMyIsICJSMS4wIgorICBiaW5kICJuc3BfY3MiCisKK2NhcmQgIldvcmtCaXQgTmluamFTQ1NJLTMyQmkgKDE2Yml0KSIKKyAgdmVyc2lvbiAiV09SS0JJVCIsICJVbHRyYU5pbmphLTE2IiwgIjEiCisgIGJpbmQgIm5zcF9jcyIKKworIyBPRU0KK2NhcmQgIldvcmtCaXQgTmluamFTQ1NJLTMyQmkgKDE2Yml0KSAvIElPLURBVEEiCisgIHZlcnNpb24gIklPIERBVEEiLCAiQ0JTQzE2ICAgICAgICIsICIxIgorICBiaW5kICJuc3BfY3MiCisKKyMgT0VNCitjYXJkICJXb3JrQml0IE5pbmphU0NTSS0zMkJpICgxNmJpdCkgLyBLTUUtMSIKKyAgdmVyc2lvbiAiS01FICAgICIsICJTQ1NJLUNBUkQtMDAxIiwgIjEiCisgIGJpbmQgIm5zcF9jcyIKK2NhcmQgIldvcmtCaXQgTmluamFTQ1NJLTMyQmkgKDE2Yml0KSAvIEtNRS0yIgorICB2ZXJzaW9uICJLTUUgICAgIiwgIlNDU0ktQ0FSRC0wMDIiLCAiMSIKKyAgYmluZCAibnNwX2NzIgorY2FyZCAiV29ya0JpdCBOaW5qYVNDU0ktMzJCaSAoMTZiaXQpIC8gS01FLTMiCisgIHZlcnNpb24gIktNRSAgICAiLCAiU0NTSS1DQVJELTAwMyIsICIxIgorICBiaW5kICJuc3BfY3MiCitjYXJkICJXb3JrQml0IE5pbmphU0NTSS0zMkJpICgxNmJpdCkgLyBLTUUtNCIKKyAgdmVyc2lvbiAiS01FICAgICIsICJTQ1NJLUNBUkQtMDA0IiwgIjEiCisgIGJpbmQgIm5zcF9jcyIKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworWzddIFN0YXJ0IChvciByZXN0YXJ0KSBwY21jaWEtY3MuCisjIC9ldGMvcmMuZC9yYy5wY21jaWEgc3RhcnQgICAgICAgIChCU0Qgc3R5bGUpCitvcgorIyAvZXRjL2luaXQuZC9wY21jaWEgc3RhcnQgICAgICAgICAoU1lTViBzdHlsZSkKKworCis0LiBIaXN0b3J5CitTZWUgUkVBRE1FLm5pbl9jcyAuCisKKzUuIENhdXRpb24KKyBJZiB5b3UgZWplY3QgY2FyZCB3aGVuIGRvaW5nIHNvbWUgb3BlcmF0aW9uIGZvciB5b3VyIFNDU0kgZGV2aWNlIG9yIHN1c3BlbmQKK3lvdXIgY29tcHV0ZXIsIHlvdSBlbmNvdW50IHNvbWUgKkJBRCogZXJyb3IgbGlrZSBkaXNrIGNyYXNoLgorIEl0IHdvcmtzIGdvb2Qgd2hlbiBJIHVzaW5nIHRoaXMgZHJpdmVyIHJpZ2h0IHdheS4gQnV0IEknbSBub3QgZ3VhcmFudGVlCit5b3VyIGRhdGEuIFBsZWFzZSBiYWNrdXAgeW91ciBkYXRhIHdoZW4geW91IHVzZSB0aGlzIGRyaXZlci4KKworNi4gS25vd24gQnVncworIEluIDIuNCBrZXJuZWwsIHlvdSBjYW4ndCB1c2UgNjQwTUIgT3B0aWNhbCBkaXNrLiBUaGlzIGVycm9yIGNvbWVzIGZyb20KK2hpZ2ggbGV2ZWwgU0NTSSBkcml2ZXIuCisKKzcuIFRlc3RpbmcKKyBQbGVhc2Ugc2VuZCBtZSBzb21lIHJlcG9ydHMoYnVnIHJlcG9ydHMgZXRjLi4pIG9mIHRoaXMgc29mdHdhcmUuCitXaGVuIHlvdSBzZW5kIHJlcG9ydCwgcGxlYXNlIHRlbGwgbWUgdGhlc2Ugb3IgbW9yZS4KKwljYXJkIG5hbWUKKwlrZXJuZWwgdmVyc2lvbgorCXlvdXIgU0NTSSBkZXZpY2UgbmFtZShoYXJkIGRyaXZlLCBDRC1ST00sIGV0Yy4uLikKKworOC4gQ29weXJpZ2h0CisgU2VlIEdQTC4KKworCisyMDAxLzA4LzA4IHlva290YUBuZXRsYWIuaXMudHN1a3ViYS5hYy5qcCA8WU9LT1RBIEhpcm9zaGk+CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3Njc2kvYWhhMTUyeC50eHQgYi9Eb2N1bWVudGF0aW9uL3Njc2kvYWhhMTUyeC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmNlMDIyYwotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vc2NzaS9haGExNTJ4LnR4dApAQCAtMCwwICsxLDE4MyBAQAorJElkOiBSRUFETUUuYWhhMTUyeCx2IDEuMiAxOTk5LzEyLzI1IDE1OjMyOjMwIGZpc2NoZXIgRXhwIGZpc2NoZXIgJAorQWRhcHRlYyBBSEEtMTUyMC8xNTIyIFNDU0kgZHJpdmVyIGZvciBMaW51eCAoYWhhMTUyeCkKKworQ29weXJpZ2h0IDE5OTMtMTk5OSBK/HJnZW4gRmlzY2hlciA8ZmlzY2hlckBub3JiaXQuZGU+CitUQzE1NTAgcGF0Y2hlcyBieSBMdXVrIHZhbiBEaWprIChsZHpAeHM0YWxsLm5sKQorCisKK0luIFJldmlzaW9uIDIgdGhlIGRyaXZlciB3YXMgbW9kaWZpZWQgYSBsb3QgKGVzcGVjaWFsbHkgdGhlCitib3R0b20taGFsZiBoYW5kbGVyIGNvbXBsZXRlKCkpLgorCitUaGUgZHJpdmVyIGlzIG11Y2ggY2xlYW5lciBub3csIGhhcyBzdXBwb3J0IGZvciB0aGUgbmV3CitlcnJvciBoYW5kbGluZyBjb2RlIGluIDIuMywgcHJvZHVjZWQgbGVzcyBjcHUgbG9hZCAobXVjaAorbGVzcyBwb2xsaW5nIGxvb3BzKSwgaGFzIHNsaWdodGx5IGhpZ2hlciB0aHJvdWdocHV0IChhdAorbGVhc3Qgb24gbXkgYW5jaWVudCB0ZXN0IGJveDsgYSBpNDg2LzMzTWh6LzIwTUIpLgorCisKK0NPTkZJR1VSQVRJT04gQVJHVU1FTlRTOgorCitJT1BPUlQgICAgICAgIGJhc2UgaW8gYWRkcmVzcyAgICAgICAgICAgICAgICAgICAgICAgICAgICgweDM0MC8weDE0MCkKK0lSUSAgICAgICAgICAgaW50ZXJydXB0IGxldmVsICAgICAgICAgICAgICAgICAgICAgICAgICAgKDktMTI7IGRlZmF1bHQgMTEpCitTQ1NJX0lEICAgICAgIHNjc2kgaWQgb2YgY29udHJvbGxlciAgICAgICAgICAgICAgICAgICAgICgwLTc7IGRlZmF1bHQgNykKK1JFQ09OTkVDVCAgICAgYWxsb3cgdGFyZ2V0cyB0byBkaXNjb25uZWN0IGZyb20gdGhlIGJ1cyAgKDAvMTsgZGVmYXVsdCAxIFtvbl0pCitQQVJJVFkgICAgICAgIGVuYWJsZSBwYXJpdHkgY2hlY2tpbmcgICAgICAgICAgICAgICAgICAgICgwLzE7IGRlZmF1bHQgMSBbb25dKQorU1lOQ0hST05PVVMgICBlbmFibGUgc3luY2hyb25vdXMgdHJhbnNmZXJzICAgICAgICAgICAgICAoMC8xOyBkZWZhdWx0IDEgW29uXSkKK0RFTEFZOiAgICAgICAgYnVzIHJlc2V0IGRlbGF5ICAgICAgICAgICAgICAgICAgICAgICAgICAgKGRlZmF1bHQgMTAwKQorRVhUX1RSQU5TOiAgICBlbmFibGUgZXh0ZW5kZWQgdHJhbnNsYXRpb24gICAgICAgICAgICAgICAoMC8xOiBkZWZhdWx0IDAgW29mZl0pCisgICAgICAgICAgICAgIChzZWUgTk9URVMpCisKK0NPTVBJTEUgVElNRSBDT05GSUdVUkFUSU9OIChnbyBpbnRvIEFIQTE1MlggaW4gZHJpdmVycy9zY3NpL01ha2VmaWxlKToKKworLURBVVRPQ09ORgorIHVzZSBjb25maWd1cmF0aW9uIHRoZSBjb250cm9sbGVyIHJlcG9ydHMgKEFIQS0xNTJ4IG9ubHkpCisKKy1EU0tJUF9CSU9TVEVTVAorIERvbid0IHRlc3QgZm9yIEJJT1Mgc2lnbmF0dXJlIChBSEEtMTUxMCBvciBkaXNhYmxlZCBCSU9TKQorCistRFNFVFVQMD0ieyBJT1BPUlQsIElSUSwgU0NTSV9JRCwgUkVDT05ORUNULCBQQVJJVFksIFNZTkNIUk9OT1VTLCBERUxBWSwgRVhUX1RSQU5TIH0iCisgb3ZlcnJpZGUgZm9yIHRoZSBmaXJzdCBjb250cm9sbGVyIAorCistRFNFVFVQMT0ieyBJT1BPUlQsIElSUSwgU0NTSV9JRCwgUkVDT05ORUNULCBQQVJJVFksIFNZTkNIUk9OT1VTLCBERUxBWSwgRVhUX1RSQU5TIH0iCisgb3ZlcnJpZGUgZm9yIHRoZSBzZWNvbmQgY29udHJvbGxlcgorCistREFIQTE1MlhfREVCVUcKKyBlbmFibGUgZGVidWdnaW5nIG91dHB1dAorCistREFIQTE1MlhfU1RBVAorIGVuYWJsZSBzb21lIHN0YXRpc3RpY3MKKworCitMSUxPIENPTU1BTkQgTElORSBPUFRJT05TOgorCithaGExNTJ4PTxJT1BPUlQ+Wyw8SVJRPlssPFNDU0ktSUQ+Wyw8UkVDT05ORUNUPlssPFBBUklUWT5bLDxTWU5DSFJPTk9VUz5bLDxERUxBWT4gWyw8RVhUX1RSQU5TXV1dXV1dXQorCisgVGhlIG5vcm1hbCBjb25maWd1cmF0aW9uIGNhbiBiZSBvdmVycmlkZGVuIGJ5IHNwZWNpZnlpbmcgYSBjb21tYW5kIGxpbmUuCisgV2hlbiB5b3UgZG8gdGhpcywgdGhlIEJJT1MgdGVzdCBpcyBza2lwcGVkLiBFbnRlcmVkIHZhbHVlcyBoYXZlIHRvIGJlCisgdmFsaWQgKGtub3duKS4gIERvbid0IHVzZSB2YWx1ZXMgdGhhdCBhcmVuJ3Qgc3VwcG9ydGVkIHVuZGVyIG5vcm1hbAorIG9wZXJhdGlvbi4gIElmIHlvdSB0aGluayB0aGF0IHlvdSBuZWVkIG90aGVyIHZhbHVlczogY29udGFjdCBtZS4KKyBGb3IgdHdvIGNvbnRyb2xsZXJzIHVzZSB0aGUgYWhhMTUyeCBzdGF0ZW1lbnQgdHdpY2UuCisKKworU1lNQk9MUyBGT1IgTU9EVUxFIENPTkZJR1VSQVRJT046CisKK0Nob29zZSBmcm9tIDIgYWx0ZXJuYXRpdmVzOgorCisxLiBzcGVjaWZ5IGV2ZXJ5dGhpbmcgKG9sZCkKKworYWhhMTUyeD1JT1BPUlQsSVJRLFNDU0lfSUQsUkVDT05ORUNULFBBUklUWSxTWU5DSFJPTk9VUyxERUxBWSxFWFRfVFJBTlMKKyAgY29uZmlndXJhdGlvbiBvdmVycmlkZSBmb3IgZmlyc3QgY29udHJvbGxlcgorCisKK2FoYTE1MngxPUlPUE9SVCxJUlEsU0NTSV9JRCxSRUNPTk5FQ1QsUEFSSVRZLFNZTkNIUk9OT1VTLERFTEFZLEVYVF9UUkFOUworICBjb25maWd1cmF0aW9uIG92ZXJyaWRlIGZvciBzZWNvbmQgY29udHJvbGxlcgorCisyLiBzcGVjaWZ5IG9ubHkgd2hhdCB5b3UgbmVlZCB0byAoaXJxIG9yIGlvIGlzIHJlcXVpcmVkOyBuZXcpCisKK2lvPUlPUE9SVDBbLElPUE9SVDFdCisgIElPUE9SVCBmb3IgZmlyc3QgYW5kIHNlY29uZCBjb250cm9sbGVyCisKK2lycT1JUlEwWyxJUlExXQorICBJUlEgZm9yIGZpcnN0IGFuZCBzZWNvbmQgY29udHJvbGxlcgorCitzY3NpaWQ9U0NTSUlEMFssU0NTSUlEMV0KKyAgU0NTSUlEIGZvciBmaXJzdCBhbmQgc2Vjb25kIGNvbnRyb2xsZXIKKworcmVjb25uZWN0PVJFQ09OTkVDVDBbLFJFQ09OTkVDVDFdCisgIGFsbG93IHRhcmdldHMgdG8gZGlzY29ubmVjdCBmb3IgZmlyc3QgYW5kIHNlY29uZCBjb250cm9sbGVyCisKK3Bhcml0eT1QQVIwW1BBUjFdCisgIHVzZSBwYXJpdHkgZm9yIGZpcnN0IGFuZCBzZWNvbmQgY29udHJvbGxlcgorCitzeW5jPVNZTkNIUk9OT1VTMFssU1lOQ0hST05PVVMxXQorICBlbmFibGUgc3luY2hyb25vdXMgdHJhbnNmZXJzIGZvciBmaXJzdCBhbmQgc2Vjb25kIGNvbnRyb2xsZXIKKworZGVsYXk9REVMQVkwWyxERUxBWTFdCisgIHJlc2V0IERFTEFZIGZvciBmaXJzdCBhbmQgc2Vjb25kIGNvbnRyb2xsZXIKKworZXh0dHJhbnM9RVhUVFJBTlMwWyxFWFRUUkFOUzFdCisgIGVuYWJsZSBleHRlbmRlZCB0cmFuc2xhdGlvbiBmb3IgZmlyc3QgYW5kIHNlY29uZCBjb250cm9sbGVyCisKKworSWYgeW91IHVzZSBib3RoIGFsdGVybmF0aXZlcyB0aGUgZmlyc3Qgd2lsbCBiZSB0YWtlbi4KKworCitOT1RFUyBPTiBFWFRfVFJBTlM6IAorCitTQ1NJIHVzZXMgYmxvY2sgbnVtYmVycyB0byBhZGRyZXNzIGJsb2Nrcy9zZWN0b3JzIG9uIGEgZGV2aWNlLgorVGhlIEJJT1MgdXNlcyBhIGN5bGluZGVyL2hlYWQvc2VjdG9yIGFkZHJlc3Npbmcgc2NoZW1lIChDL0gvUykKK3NjaGVtZSBpbnN0ZWFkLiAgRE9TIGV4cGVjdHMgYSBCSU9TIG9yIGRyaXZlciB0aGF0IHVuZGVyc3RhbmRzIHRoaXMKK0MvSC9TIGFkZHJlc3NpbmcuCisKK1RoZSBudW1iZXIgb2YgY3lsaW5kZXJzL2hlYWRzL3NlY3RvcnMgaXMgY2FsbGVkIGdlb21ldHJ5IGFuZCBpcyByZXF1aXJlZAorYXMgYmFzZSBmb3IgcmVxdWVzdHMgaW4gQy9IL1MgYWRkcmVzc2luZy4gIFNDU0kgb25seSBrbm93cyBhYm91dCB0aGUKK3RvdGFsIGNhcGFjaXR5IG9mIGRpc2tzIGluIGJsb2NrcyAoc2VjdG9ycykuCisKK1RoZXJlZm9yZSB0aGUgU0NTSSBCSU9TL0RPUyBkcml2ZXIgaGFzIHRvIGNhbGN1bGF0ZSBhIGxvZ2ljYWwvdmlydHVhbAorZ2VvbWV0cnkganVzdCB0byBiZSBhYmxlIHRvIHN1cHBvcnQgdGhhdCBhZGRyZXNzaW5nIHNjaGVtZS4gIFRoZSBnZW9tZXRyeQorcmV0dXJuZWQgYnkgdGhlIFNDU0kgQklPUyBpcyBhIHB1cmUgY2FsY3VsYXRpb24gYW5kIGhhcyBub3RoaW5nIHRvCitkbyB3aXRoIHRoZSByZWFsL3BoeXNpY2FsIGdlb21ldHJ5IG9mIHRoZSBkaXNrICh3aGljaCBpcyB1c3VhbGx5CitpcnJlbGV2YW50IGFueXdheSkuCisKK0Jhc2ljYWxseSB0aGlzIGhhcyBubyBpbXBhY3QgYXQgYWxsIG9uIExpbnV4LCBiZWNhdXNlIGl0IGFsc28gdXNlcyBibG9jaworaW5zdGVhZCBvZiBDL0gvUyBhZGRyZXNzaW5nLiAgVW5mb3J0dW5hdGVseSBDL0gvUyBhZGRyZXNzaW5nIGlzIGFsc28gdXNlZAoraW4gdGhlIHBhcnRpdGlvbiB0YWJsZSBhbmQgdGhlcmVmb3JlIGV2ZXJ5IG9wZXJhdGluZyBzeXN0ZW0gaGFzIHRvIGtub3cKK3RoZSByaWdodCBnZW9tZXRyeSB0byBiZSBhYmxlIHRvIGludGVycHJldCBpdC4KKworTW9yZW92ZXIgdGhlcmUgYXJlIGNlcnRhaW4gbGltaXRhdGlvbnMgdG8gdGhlIEMvSC9TIGFkZHJlc3Npbmcgc2NoZW1lLAorbmFtZWx5IHRoZSBhZGRyZXNzIHNwYWNlIGlzIGxpbWl0ZWQgdG8gdXB0byAyNTUgaGVhZHMsIHVwdG8gNjMgc2VjdG9ycworYW5kIGEgbWF4aW11bSBvZiAxMDIzIGN5bGluZGVycy4KKworVGhlIEFIQS0xNTIyIEJJT1MgY2FsY3VsYXRlcyB0aGUgZ2VvbWV0cnkgYnkgZml4aW5nIHRoZSBudW1iZXIgb2YgaGVhZHMKK3RvIDY0LCB0aGUgbnVtYmVyIG9mIHNlY3RvcnMgdG8gMzIgYW5kIGJ5IGNhbGN1bGF0aW5nIHRoZSBudW1iZXIgb2YKK2N5bGluZGVycyBieSBkaXZpZGluZyB0aGUgY2FwYWNpdHkgcmVwb3J0ZWQgYnkgdGhlIGRpc2sgYnkgNjQqMzIgKDEgTUIpLgorVGhpcyBpcyBjb25zaWRlcmVkIHRvIGJlIHRoZSBkZWZhdWx0IHRyYW5zbGF0aW9uLgorCitXaXRoIHJlc3BlY3QgdG8gdGhlIGxpbWl0IG9mIDEwMjMgY3lsaW5kZXJzIHVzaW5nIEMvSC9TIHlvdSBjYW4gb25seQorYWRkcmVzcyB0aGUgZmlyc3QgR0Igb2YgeW91ciBkaXNrIGluIHRoZSBwYXJ0aXRpb24gdGFibGUuICBUaGVyZWZvcmUKK0JJT1NlcyBvZiBzb21lIG5ld2VyIGNvbnRyb2xsZXJzIGJhc2VkIG9uIHRoZSBBSUMtNjI2MC82MzYwIHN1cHBvcnQKK2V4dGVuZGVkIHRyYW5zbGF0aW9uLiAgVGhpcyBtZWFucyB0aGF0IHRoZSBCSU9TIHVzZXMgMjU1IGZvciBoZWFkcywKKzYzIGZvciBzZWN0b3JzIGFuZCB0aGVuIGRpdmlkZXMgdGhlIGNhcGFjaXR5IG9mIHRoZSBkaXNrIGJ5IDI1NSo2MworKGFib3V0IDggTUIpLCBhcyBzb29uIGl0IHNlZXMgYSBkaXNrIGdyZWF0ZXIgdGhhbiAxIEdCLiAgVGhhdCByZXN1bHRzCitpbiBhIG1heGltdW0gb2YgYWJvdXQgOCBHQiBhZGRyZXNzYWJsZSBkaXNrc3BhY2UgaW4gdGhlIHBhcnRpdGlvbiB0YWJsZQorKGJ1dCB0aGVyZSBhcmUgYWxyZWFkeSBiaWdnZXIgZGlza3Mgb3V0IHRoZXJlIHRvZGF5KS4KKworVG8gbWFrZSBpdCBldmVuIG1vcmUgY29tcGxpY2F0ZWQgdGhlIHRyYW5zbGF0aW9uIG1vZGUgbWlnaHQvbWlnaHQKK25vdCBiZSBjb25maWd1cmFibGUgaW4gY2VydGFpbiBCSU9TIHNldHVwcy4KKworVGhpcyBkcml2ZXIgZG9lcyBzb21lIG1vcmUgb3IgbGVzcyBmYWlsc2FmZSBndWVzc2luZyB0byBnZXQgdGhlCitnZW9tZXRyeSByaWdodCBpbiBtb3N0IGNhc2VzOgorCistIGZvciBkaXNrczwxR0I6IHVzZSBkZWZhdWx0IHRyYW5zbGF0aW9uIChDLzMyLzY0KQorCistIGZvciBkaXNrcz4xR0I6CisgIC0gdGFrZSBjdXJyZW50IGdlb21ldHJ5IGZyb20gdGhlIHBhcnRpdGlvbiB0YWJsZQorICAgICh1c2luZyBzY3NpY2FtX2Jpb3NfcGFyYW0gYW5kIGFjY2VwdCBvbmx5IGB2YWxpZCcgZ2VvbWV0cmllcywKKyAgICBpZS4gZWl0aGVyIChDLzMyLzY0KSBvciAoQy82My8yNTUpKS4gIFRoaXMgY2FuIGJlIGV4dGVuZGVkIHRyYW5zbGF0aW9uCisgICAgZXZlbiBpZiBpdCdzIG5vdCBlbmFibGVkIGluIHRoZSBkcml2ZXIuCisKKyAgLSBpZiB0aGF0IGZhaWxzLCB0YWtlIGV4dGVuZGVkIHRyYW5zbGF0aW9uIGlmIGVuYWJsZWQgYnkgb3ZlcnJpZGUsCisgICAga2VybmVsIG9yIG1vZHVsZSBwYXJhbWV0ZXIsIG90aGVyd2lzZSB0YWtlIGRlZmF1bHQgdHJhbnNsYXRpb24gYW5kCisgICAgYXNrIHRoZSB1c2VyIGZvciB2ZXJpZmljYXRpb24uICBUaGlzIG1pZ2h0IG9uIG5vdCB5ZXQgcGFydGl0aW9uZWQKKyAgICBkaXNrcy4KKworCitSRUZFUkVOQ0VTIFVTRUQ6CisKKyAiQUlDLTYyNjAgU0NTSSBDaGlwIFNwZWNpZmljYXRpb24iLCBBZGFwdGVjIENvcnBvcmF0aW9uLgorCisgIlNDU0kgQ09NUFVURVIgU1lTVEVNIElOVEVSRkFDRSAtIDIgKFNDU0ktMikiLCBYM1Q5LjIvODYtMTA5IHJldi4gMTBoCisKKyAiV3JpdGluZyBhIFNDU0kgZGV2aWNlIGRyaXZlciBmb3IgTGludXgiLCBSaWsgRmFpdGggKGZhaXRoQGNzLnVuYy5lZHUpCisKKyAiS2VybmVsIEhhY2tlcidzIEd1aWRlIiwgTWljaGFlbCBLLiBKb2huc29uIChqb2huc29ubUBzdW5zaXRlLnVuYy5lZHUpCisKKyAiQWRhcHRlYyAxNTIwLzE1MjIgVXNlcidzIEd1aWRlIiwgQWRhcHRlYyBDb3Jwb3JhdGlvbi4KKworIE1pY2hhZWwgSy4gSm9obnNvbiAoam9obnNvbm1Ac3Vuc2l0ZS51bmMuZWR1KQorCisgRHJldyBFY2toYXJkdCAoZHJld0Bjcy5jb2xvcmFkby5lZHUpCisKKyBFcmljIFlvdW5nZGFsZSAoZXJpY0BhbmRhbnRlLm9yZykgCisKKyBzcGVjaWFsIHRoYW5rcyB0byBFcmljIFlvdW5nZGFsZSBmb3IgdGhlIGZyZWUoISkgc3VwcGx5aW5nIHRoZQorIGRvY3VtZW50YXRpb24gb24gdGhlIGNoaXAuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3Njc2kvYWljNzl4eC50eHQgYi9Eb2N1bWVudGF0aW9uL3Njc2kvYWljNzl4eC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGFlZWY3NAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vc2NzaS9haWM3OXh4LnR4dApAQCAtMCwwICsxLDUxNiBAQAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKz0gICAgICAgICAgICAgQWRhcHRlYyBVbHRyYTMyMCBGYW1pbHkgTWFuYWdlciBTZXQgdjEuMy4xMSAgICAgICAgICA9Cis9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPQorPSAgICAgICAgICAgICAgICAgICAgICAgICAgICBSRUFETUUgZm9yICAgICAgICAgICAgICAgICAgICAgICAgICAgID0KKz0gICAgICAgICAgICAgICAgICAgIFRoZSBMaW51eCBPcGVyYXRpbmcgU3lzdGVtICAgICAgICAgICAgICAgICAgICA9Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitUaGUgZm9sbG93aW5nIGluZm9ybWF0aW9uIGlzIGF2YWlsYWJsZSBpbiB0aGlzIGZpbGU6CisKKyAgMS4gU3VwcG9ydGVkIEhhcmR3YXJlCisgIDIuIFZlcnNpb24gSGlzdG9yeQorICAzLiBDb21tYW5kIExpbmUgT3B0aW9ucworICA0LiBBZGRpdGlvbmFsIE5vdGVzCisgIDUuIENvbnRhY3RpbmcgQWRhcHRlYworCisKKzEuIFN1cHBvcnRlZCBIYXJkd2FyZQorCisgICBUaGUgZm9sbG93aW5nIEFkYXB0ZWMgU0NTSSBIb3N0IEFkYXB0ZXJzIGFyZSBzdXBwb3J0ZWQgYnkgdGhpcyAKKyAgIGRyaXZlciBzZXQuIAorCisgICBVbHRyYTMyMCBBU0lDICAgICAgICAgICAgICBEZXNjcmlwdGlvbgorICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgQUlDLTc5MDFBICAgICAgICAgICAgICAgICAgU2luZ2xlIENoYW5uZWwgNjQtYml0IFBDSS1YIDEzM01IeiB0byAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVsdHJhMzIwIFNDU0kgQVNJQworICAgQUlDLTc5MDFCICAgICAgICAgICAgICAgICAgU2luZ2xlIENoYW5uZWwgNjQtYml0IFBDSS1YIDEzM01IeiB0byAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVsdHJhMzIwIFNDU0kgQVNJQyB3aXRoIFJldGFpbmVkIFRyYWluaW5nCisgICBBSUMtNzkwMkE0ICAgICAgICAgICAgICAgICBEdWFsIENoYW5uZWwgNjQtYml0IFBDSS1YIDEzM01IeiB0byAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVsdHJhMzIwIFNDU0kgQVNJQworICAgQUlDLTc5MDJCICAgICAgICAgICAgICAgICAgRHVhbCBDaGFubmVsIDY0LWJpdCBQQ0ktWCAxMzNNSHogdG8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVsdHJhMzIwIFNDU0kgQVNJQyB3aXRoIFJldGFpbmVkIFRyYWluaW5nCisKKyAgIFVsdHJhMzIwIEFkYXB0ZXJzICAgICAgICAgIERlc2NyaXB0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVNJQworICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgIEFkYXB0ZWMgU0NTSSBDYXJkIDM5MzIwICAgIER1YWwgQ2hhbm5lbCA2NC1iaXQgUENJLVggMTMzTUh6IHRvICAgNzkwMkE0Lzc5MDJCCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVbHRyYTMyMCBTQ1NJIENhcmQgKG9uZSBleHRlcm5hbCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDY4LXBpbiwgdHdvIGludGVybmFsIDY4LXBpbikKKyAgIEFkYXB0ZWMgU0NTSSBDYXJkIDM5MzIwQSAgIER1YWwgQ2hhbm5lbCA2NC1iaXQgUENJLVggMTMzTUh6IHRvICAgICAgNzkwMkIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVsdHJhMzIwIFNDU0kgQ2FyZCAob25lIGV4dGVybmFsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNjgtcGluLCB0d28gaW50ZXJuYWwgNjgtcGluKQorICAgQWRhcHRlYyBTQ1NJIENhcmQgMzkzMjBEICAgRHVhbCBDaGFubmVsIDY0LWJpdCBQQ0ktWCAxMzNNSHogdG8gICAgICA3OTAyQTQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVsdHJhMzIwIFNDU0kgQ2FyZCAodHdvIGV4dGVybmFsIFZIREMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuZCBvbmUgaW50ZXJuYWwgNjgtcGluKQorICAgQWRhcHRlYyBTQ1NJIENhcmQgMzkzMjBEICAgRHVhbCBDaGFubmVsIDY0LWJpdCBQQ0ktWCAxMzNNSHogdG8gICAgICA3OTAyQTQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVsdHJhMzIwIFNDU0kgQ2FyZCAodHdvIGV4dGVybmFsIFZIREMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuZCBvbmUgaW50ZXJuYWwgNjgtcGluKSBiYXNlZCBvbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFJQy03OTAyQiBBU0lDCisgICBBZGFwdGVjIFNDU0kgQ2FyZCAyOTMyMCAgICBTaW5nbGUgQ2hhbm5lbCA2NC1iaXQgUENJLVggMTMzTUh6IHRvICAgIDc5MDFBCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVbHRyYTMyMCBTQ1NJIENhcmQgKG9uZSBleHRlcm5hbCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDY4LXBpbiwgdHdvIGludGVybmFsIDY4LXBpbiwgb25lCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnRlcm5hbCA1MC1waW4pCisgICBBZGFwdGVjIFNDU0kgQ2FyZCAyOTMyMEEgICBTaW5nbGUgQ2hhbm5lbCA2NC1iaXQgUENJLVggMTMzTUh6IHRvICAgIDc5MDFCCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVbHRyYTMyMCBTQ1NJIENhcmQgKG9uZSBleHRlcm5hbCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDY4LXBpbiwgdHdvIGludGVybmFsIDY4LXBpbiwgb25lCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnRlcm5hbCA1MC1waW4pCisgICBBZGFwdGVjIFNDU0kgQ2FyZCAyOTMyMExQICBTaW5nbGUgQ2hhbm5lbCA2NC1iaXQgTG93IFByb2ZpbGUgICAgICAgIDc5MDFBCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQQ0ktWCAxMzNNSHogdG8gVWx0cmEzMjAgU0NTSSBDYXJkCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoT25lIGV4dGVybmFsIFZIREMsIG9uZSBpbnRlcm5hbAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNjgtcGluKQorICAgQWRhcHRlYyBTQ1NJIENhcmQgMjkzMjBBTFAgU2luZ2xlIENoYW5uZWwgNjQtYml0IExvdyBQcm9maWxlICAgICAgICA3OTAxQgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUENJLVggMTMzTUh6IHRvIFVsdHJhMzIwIFNDU0kgQ2FyZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKE9uZSBleHRlcm5hbCBWSERDLCBvbmUgaW50ZXJuYWwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDY4LXBpbikKKzIuIFZlcnNpb24gSGlzdG9yeQorCisgICAxLjMuMTEgKEp1bHkgMTEsIDIwMDMpCisgICAgICAgIC0gRml4IHNldmVyYWwgZGVhZGxvY2sgaXNzdWVzLgorICAgICAgICAtIEFkZCAyOTMyMEFMUCBhbmQgMzkzMjBCIElkJ3MuCisKKyAgIDEuMy4xMCAoSnVuZSAzcmQsIDIwMDMpCisgICAgICAgIC0gQWxpZ24gdGhlIFNDQl9UQUcgZmllbGQgb24gYSAxNmJ5dGUgYm91bmRhcnkuICBUaGlzIGF2b2lkcworICAgICAgICAgIFNDQiBjb3JydXB0aW9uIG9uIHNvbWUgUENJLTMzIGJ1c3Nlcy4KKyAgICAgICAgLSBDb3JyZWN0IG5vbi16ZXJvIGx1bnMgb24gUmV2IEIuIGhhcmR3YXJlLgorICAgICAgICAtIFVwZGF0ZSBmb3IgY2hhbmdlIGluIDIuNS5YIFNDU0kgcHJvYyBGUyBpbnRlcmZhY2UuCisgICAgICAgIC0gV2hlbiBuZWdvdGlhdGlvbiBhc3luYyB2aWEgYW4gOGJpdCBXRFRSIG1lc3NhZ2UsIHNlbmQKKyAgICAgICAgICBhbiBTRFRSIHdpdGggYW4gb2Zmc2V0IG9mIDAgdG8gYmUgc3VyZSB0aGUgdGFyZ2V0CisgICAgICAgICAga25vd3Mgd2UgYXJlIGFzeW5jLiAgVGhpcyB3b3JrcyBhcm91bmQgYSBmaXJtd2FyZSBkZWZlY3QKKyAgICAgICAgICBpbiB0aGUgUXVhbnR1bSBBdGxhcyAxMEsuCisgICAgICAgIC0gSW1wbGVtZW50IGNvbnRyb2xsZXIgc3VzdXBlbmQgYW5kIHJlc3VtZS4KKyAgICAgICAgLSBDbGVhciBQQ0kgZXJyb3Igc3RhdGUgZHVyaW5nIGRyaXZlciBhdHRhY2ggc28gdGhhdCB3ZQorICAgICAgICAgIGRvbid0IGRpc2FibGUgbWVtb3J5IG1hcHBlZCBJL08gZHVlIHRvIGEgc3RyYXkgd3JpdGUKKyAgICAgICAgICBieSBzb21lIG90aGVyIGRyaXZlciBwcm9iZSB0aGF0IG9jY3VycmVkIGJlZm9yZSB3ZQorICAgICAgICAgIGNsYWltZWQgdGhlIGNvbnRyb2xsZXIuCisKKyAgIDEuMy45IChNYXkgMjJuZCwgMjAwMykKKyAgICAgICAgLSBGaXggY29tcGlsZXIgZXJyb3JzLgorICAgICAgICAtIFJlbW92ZSBTL0cgc3BsaXR0aW5nIGZvciBzZWdtZW50cyB0aGF0IGNyb3NzIGEgNEdCIGJvdW5kYXJ5LgorICAgICAgICAgIFRoaXMgaXMgZ3VhcmFudGVlZCBub3QgdG8gaGFwcGVuIGluIExpbnV4LgorICAgICAgICAtIEFkZCBzdXBwb3J0IGZvciBzY3NpX3JlcG9ydF9kZXZpY2VfcmVzZXQoKSBmb3VuZCBpbgorICAgICAgICAgIDIuNS5YIGtlcm5lbHMuCisgICAgICAgIC0gQWRkIDc5MDFCIHN1cHBvcnQuCisgICAgICAgIC0gU2ltcGxpZnkgaGFuZGxpbmcgb2YgdGhlIHBhY2t0aXplZCBsdW4gUmV2IEEgd29ya2Fyb3VuZC4KKyAgICAgICAgLSBDb3JyZWN0IGFuZCBzaW1wbGlmeSBoYW5kbGluZyBvZiB0aGUgaWdub3JlIHdpZGUgcmVzaWR1ZQorICAgICAgICAgIG1lc3NhZ2UuICBUaGUgcHJldmlvdXMgY29kZSB3b3VsZCBmYWlsIHRvIHJlcG9ydCBhIHJlc2lkdWFsCisgICAgICAgICAgaWYgdGhlIHRyYW5zYWN0aW9uIGRhdGEgbGVuZ3RoIHdhcyBldmVuIGFuZCB3ZSByZWNlaXZlZAorICAgICAgICAgIGFuIElXUiBtZXNzYWdlLgorCisgICAxLjMuOCAoQXByaWwgMjl0aCwgMjAwMykKKyAgICAgICAgLSBGaXggdHlwZXMgYWNjZXNzZWQgdmlhIHRoZSBjb21tYW5kIGxpbmUgaW50ZXJmYWNlIGNvZGUuCisgICAgICAgIC0gUGVyZm9ybSBhIGZldyBmaXJtd2FyZSBvcHRpbWl6YXRpb25zLgorICAgICAgICAtIEZpeCAiVW5leHBlY3RlZCBQS1QgYnVzZnJlZSIgZXJyb3JzLgorICAgICAgICAtIFVzZSBhIHNlcXVlbmNlciBpbnRlcnJ1cHQgdG8gbm90aWZ5IHRoZSBob3N0IG9mCisgICAgICAgICAgY29tbWFuZHMgd2l0aCBiYWQgc3RhdHVzLiAgV2UgZGVmZXIgdGhlIG5vdGlmaWNhdGlvbgorICAgICAgICAgIHVudGlsIHRoZXJlIGFyZSBubyBvdXRzdGFuZGluZyBzZWxlY3Rpb25zIHRvIGVuc3VyZQorICAgICAgICAgIHRoYXQgdGhlIGhvc3QgaXMgaW50ZXJydXB0ZWQgZm9yIGFzIHNob3J0IGEgdGltZSBhcworICAgICAgICAgIHBvc3NpYmxlLgorICAgICAgICAtIFJlbW92ZSBwcmUtMi4yLlggc3VwcG9ydC4KKyAgICAgICAgLSBBZGQgc3VwcG9ydCBmb3IgbmV3IDIuNS5YIGludGVycnVwdCBBUEkuCisgICAgICAgIC0gQ29ycmVjdCBiaWctZW5kaWFuIGFyY2hpdGVjdHVyZSBzdXBwb3J0LgorCisgICAxLjMuNyAoQXByaWwgMTZ0aCwgMjAwMykKKyAgICAgICAgLSBVc2UgZGVsX3RpbWVyX3N5bmMoKSB0byBlbnN1cmUgdGhhdCBubyB0aW1lb3V0cworICAgICAgICAgIGFyZSBwZW5kaW5nIGR1cmluZyBjb250cm9sbGVyIHNodXRkb3duLgorICAgICAgICAtIEZvciBwcmUtMi41Llgga2VybmVscywgY2FyZWZ1bGx5IGFkanVzdCBvdXIgc2VnbWVudAorICAgICAgICAgIGxpc3Qgc2l6ZSB0byBhdm9pZCBTQ1NJIG1hbGxvYyBwb29sIGZyYWdtZW50YXRpb24uCisgICAgICAgIC0gQ2xlYW51cCBjaGFubmVsIGRpc3BsYXkgaW4gb3VyIC9wcm9jIG91dHB1dC4KKyAgICAgICAgLSBXb3JrYXJvdW5kIGR1cGxpY2F0ZSBkZXZpY2UgZW50cmllcyBpbiB0aGUgbWlkLWxheWVyCisgICAgICAgICAgZGV2bGljZSBsaXN0IGR1cmluZyBhZGQtc2luZ2xlLWRldmljZS4KKworICAgMS4zLjYgKE1hcmNoIDI4dGgsIDIwMDMpCisgICAgICAgIC0gQ29ycmVjdCBhIGRvdWJsZSBmcmVlIGluIHRoZSBEb21haW4gVmFsaWRhdGlvbiBjb2RlLgorICAgICAgICAtIENvcnJlY3QgYSByZWZlcmVuY2UgdG8gZnJlZSdlZCBtZW1vcnkgZHVyaW5nIGNvbnRyb2xsZXIKKyAgICAgICAgICBzaHV0ZG93bi4KKyAgICAgICAgLSBSZXNldCB0aGUgYnVzIG9uIGFuIFNFLT5MVkQgY2hhbmdlLiAgVGhpcyBpcyByZXF1aXJlZAorICAgICAgICAgIHRvIHJlc2V0IG91ciB0cmFuc2NpZXZlcnMuCisKKyAgIDEuMy41IChNYXJjaCAyNHRoLCAyMDAzKQorICAgICAgICAtIEZpeCBhIGZldyByZWdpc3RlciB3aW5kb3cgbW9kZSBidWdzLgorICAgICAgICAtIEluY2x1ZGUgcmVhZCBzdHJlYW1pbmcgaW4gdGhlIFBQUiBmbGFncyB3ZSBkaXNwbGF5IGluCisgICAgICAgICAgZGlhZ25vc3RpY3MgYXMgd2VsbCBhcyAvcHJvYy4KKyAgICAgICAgLSBBZGQgUENJIGhvdCBwbHVnIHN1cHBvcnQgZm9yIDIuNS5YIGtlcm5lbHMuCisgICAgICAgIC0gQ29ycmVjdCBkZWZhdWx0IHByZWNvbXBlbnNhdGlvbiB2YWx1ZSBmb3IgUmV2QSBoYXJkd2FyZS4KKyAgICAgICAgLSBGaXggRG9tYWluIFZhbGlkYXRpb24gdGhyZWFkIHNodXRkb3duLgorICAgICAgICAtIEFkZCBhIGZpcm13YXJlIHdvcmthcm91bmQgdG8gbWFrZSB0aGUgTEVEIGJsaW5rCisgICAgICAgICAgYnJpZ2h0ZXIgZHVyaW5nIHBhY2tldGl6ZWQgb3BlcmF0aW9ucyBvbiB0aGUgSDJBNC4KKyAgICAgICAgLSBDb3JyZWN0IC9wcm9jIGRpc3BsYXkgb2YgdXNlciByZWFkIHN0cmVhbWluZyBzZXR0aW5ncy4KKyAgICAgICAgLSBTaW1wbGlmeSBkcml2ZXIgbG9ja2luZyBieSByZWxlYXNpbmcgdGhlIGlvX3JlcXVlc3RfbG9jaworICAgICAgICAgIHVwb24gZHJpdmVyIGVudHJ5IGZyb20gdGhlIG1pZC1sYXllci4KKyAgICAgICAgLSBDbGVhbnVwIGNvbW1hbmQgbGluZSBwYXJzaW5nIGFuZCBtb3ZlIG11Y2ggb2YgdGhpcyBjb2RlCisgICAgICAgICAgdG8gYWljbGliLgorCisgICAxLjMuNCAoRmVicnVhcnkgMjh0aCwgMjAwMykKKyAgICAgICAgLSBDb3JyZWN0IGEgcmFjZSBjb25kaXRpb24gaW4gb3VyIGVycm9yIHJlY292ZXJ5IGhhbmRsZXIuCisgICAgICAgIC0gQWxsb3cgVGVzdCBVbml0IFJlYWR5IGNvbW1hbmRzIHRvIHRha2UgYSBmdWxsIDUgc2Vjb25kcworICAgICAgICAgIGR1cmluZyBEb21haW4gVmFsaWRhdGlvbi4KKworICAgMS4zLjIgKEZlYnJ1YXJ5IDE5dGgsIDIwMDMpCisgICAgICAgIC0gQ29ycmVjdCBhIFJldiBCLiByZWdyZXNzaW9uIGR1ZSB0byB0aGUgR0VNMzE4CisgICAgICAgICAgY29tcGF0aWJpbGl0eSBmaXggaW5jbHVkZWQgaW4gMS4zLjEuCisgICAgICAgICAgCisgICAxLjMuMSAoRmVicnVhcnkgMTF0aCwgMjAwMykKKyAgICAgICAgLSBBZGQgc3VwcG9ydCBmb3IgdGhlIDM5MzIwQS4KKyAgICAgICAgLSBJbXByb3ZlIHJlY292ZXJ5IGZvciBjZXJ0YWluIFBDSS1YIGVycm9ycy4KKyAgICAgICAgLSBGaXggaGFuZGxpbmcgb2YgTFEvREFUQS9MUS9EQVRBIGZvciB0aGUKKyAgICAgICAgICBzYW1lIHdyaXRlIHRyYW5zYWN0aW9uIHRoYXQgY2FuIG9jY3VyIHdpdGhvdXQKKyAgICAgICAgICBpbnRlcnZlaW5pbmcgdHJhaW5pbmcuCisgICAgICAgIC0gQ29ycmVjdCBjb21wYXRpYmlsaXR5IGlzc3VlcyB3aXRoIHRoZSBHRU0zMTgKKyAgICAgICAgICBlbmNsb3N1cmUgc2VydmljZXMgZGV2aWNlLgorICAgICAgICAtIENvcnJlY3QgZGF0YSBjb3JydXB0aW9uIGlzc3VlIHRoYXQgb2NjdXJyZWQgdW5kZXIKKyAgICAgICAgICBoaWdoIHRhZyBkZXB0aCB3cml0ZSBsb2Fkcy4KKyAgICAgICAgLSBBZGFwdCB0byBhIGNoYW5nZSBpbiB0aGUgMi41LlggZGFlbW9uaXplKCkgQVBJLgorICAgICAgICAtIENvcnJlY3QgYSAiTWlzc2luZyBjYXNlIGluIGFoZF9oYW5kbGVfc2NzaWludCIgcGFuaWMuCisKKyAgIDEuMy4wIChKYW51YXJ5IDIxc3QsIDIwMDMpCisgICAgICAgIC0gRnVsbCByZWdyZXNzaW9uIHRlc3RpbmcgZm9yIGFsbCBVMzIwIHByb2R1Y3RzIGNvbXBsZXRlZC4KKyAgICAgICAgLSBBZGRlZCBhYm9ydCBhbmQgdGFyZ2V0L2x1biByZXNldCBlcnJvciByZWNvdmVyeSBoYW5kbGVyIGFuZAorICAgICAgICAgIGludGVycnVwdCBjb2FsZXNzaW5nLgorCisgICAxLjIuMCAoTm92ZW1iZXIgMTR0aCwgMjAwMikKKyAgICAgICAgLSBBZGRlZCBzdXBwb3J0IGZvciBEb21haW4gVmFsaWRhdGlvbgorICAgICAgICAtIEFkZCBzdXBwb3J0IGZvciB0aGUgSGV3bGV0dC1QYWNrYXJkIHZlcnNpb24gb2YgdGhlIDM5MzIwRAorICAgICAgICAgIGFuZCBBSUMtNzkwMiBhZGFwdGVycy4KKyAgICAgICAgU3VwcG9ydCBmb3IgcHJldmlvdXMgYWRhcHRlcnMgaGFzIG5vdCBiZWVuIGZ1bGx5IHRlc3RlZCBhbmQgc2hvdWxkCisgICAgICAgIG9ubHkgYmUgdXNlZCBhdCB0aGUgY3VzdG9tZXIncyBvd24gcmlzay4KKworICAgMS4xLjEgKFNlcHRlbWJlciAyNHRoLCAyMDAyKQorICAgICAgICAtIEFkZGVkIHN1cHBvcnQgZm9yIHRoZSBMaW51eCAyLjUuWCBrZXJuZWwgc2VyaWVzCisKKyAgIDEuMS4wIChTZXB0ZW1iZXIgMTd0aCwgMjAwMikKKyAgICAgICAgLSBBZGRlZCBzdXBwb3J0IGZvciBmb3VyIGFkZGl0aW9uYWwgU0NTSSBwcm9kdWN0czoKKyAgICAgICAgICBBU0MtMzkzMjAsIEFTQy0yOTMyMCwgQVNDLTI5MzIwTFAsIEFJQy03OTAxLgorCisgICAxLjAuMCAoTWF5IDMwdGgsIDIwMDIpCisgICAgICAgIC0gSW5pdGlhbCBkcml2ZXIgcmVsZWFzZS4KKworICAgMi4xLiBTb2Z0d2FyZS9IYXJkd2FyZSBGZWF0dXJlcworICAgICAgICAtIFN1cHBvcnQgZm9yIHRoZSBTUEktNCAiVWx0cmEzMjAiIHN0YW5kYXJkOgorICAgICAgICAgIC0gMzIwTUIvcyB0cmFuc2ZlciByYXRlcworICAgICAgICAgIC0gUGFja2V0aXplZCBTQ1NJIFByb3RvY29sIGF0IDE2ME1CL3MgYW5kIDMyME1CL3MKKyAgICAgICAgICAtIFF1aWNrIEFyYml0cmF0aW9uIFNlbGVjdGlvbiAoUUFTKQorICAgICAgICAgIC0gUmV0YWluZWQgVHJhaW5pbmcgSW5mb3JtYXRpb24gKFJldiBCLiBBU0lDIG9ubHkpCisgICAgICAgIC0gSW50ZXJydXB0IENvYWxlc3NpbmcKKyAgICAgICAgLSBJbml0aWF0b3IgTW9kZSAodGFyZ2V0IG1vZGUgbm90IGN1cnJlbnRseSAKKyAgICAgICAgICBzdXBwb3J0ZWQpCisgICAgICAgIC0gU3VwcG9ydCBmb3IgdGhlIFBDSS1YIHN0YW5kYXJkIHVwIHRvIDEzM01IegorICAgICAgICAtIFN1cHBvcnQgZm9yIHRoZSBQQ0kgdjIuMiBzdGFuZGFyZAorCS0gRG9tYWluIFZhbGlkYXRpb24KKworICAgMi4yLiBPcGVyYXRpbmcgU3lzdGVtIFN1cHBvcnQ6CisgICAgICAgIC0gUmVkaGF0IExpbnV4IDcuMiwgNy4zLCA4LjAsIEFkdmFuY2VkIFNlcnZlciAyLjEKKyAgICAgICAgLSBTdVNFIExpbnV4IDcuMywgOC4wLCA4LjEsIEVudGVycHJpc2UgU2VydmVyIDcKKyAgICAgICAgLSBvbmx5IEludGVsIGFuZCBBTUQgeDg2IHN1cHBvcnRlZCBhdCB0aGlzIHRpbWUKKyAgICAgICAgLSA+NEdCIG1lbW9yeSBjb25maWd1cmF0aW9ucyBzdXBwb3J0ZWQuCisKKyAgICAgUmVmZXIgdG8gdGhlIFVzZXIncyBHdWlkZSBmb3IgbW9yZSBkZXRhaWxzIG9uIHRoaXMuCisKKzMuIENvbW1hbmQgTGluZSBPcHRpb25zCisKKyAgICAgICAgV0FSTklORzogQUxURVJJTkcgT1IgQURESU5HIFRIRVNFIERSSVZFUiBQQVJBTUVURVJTCisgICAgICAgICAgICAgICAgIElOQ09SUkVDVExZIENBTiBSRU5ERVIgWU9VUiBTWVNURU0gSU5PUEVSQUJMRS4KKyAgICAgICAgICAgICAgICAgVVNFIFRIRU0gV0lUSCBDQVVUSU9OLiAKKworICAgRWRpdCB0aGUgZmlsZSAibW9kcHJvYmUuY29uZiIgaW4gdGhlIGRpcmVjdG9yeSAvZXRjIGFuZCBhZGQvZWRpdCBhCisgICBsaW5lIGNvbnRhaW5pbmcgJ29wdGlvbnMgYWljNzl4eCBhaWM3OXh4PVtjb21tYW5kWyxjb21tYW5kLi4uXV0nIHdoZXJlCisgICAnY29tbWFuZCcgaXMgb25lIG9yIG1vcmUgb2YgdGhlIGZvbGxvd2luZzoKKyAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgICAgICAgIE9wdGlvbjogdmVyYm9zZQorICAgICAgICAgIERlZmluaXRpb246IGVuYWJsZSBhZGRpdGlvbmFsIGluZm9ybWF0aXZlIG1lc3NhZ2VzIGR1cmluZworICAgICAgICAgICAgICAgICAgICAgIGRyaXZlciBvcGVyYXRpb24uCisgICAgIFBvc3NpYmxlIFZhbHVlczogVGhpcyBvcHRpb24gaXMgYSBmbGFnCisgICAgICAgRGVmYXVsdCBWYWx1ZTogZGlzYWJsZWQKKyAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgICAgICAgIE9wdGlvbjogZGVidWc6W3ZhbHVlXQorICAgICAgICAgIERlZmluaXRpb246IEVuYWJsZXMgdmFyaW91cyBsZXZlbHMgb2YgZGVidWdnaW5nIGluZm9ybWF0aW9uCisgICAgICAgICAgICAgICAgICAgICAgVGhlIGJpdCBkZWZpbml0aW9ucyBmb3IgdGhlIGRlYnVnZ2luZyBtYXNrIGNhbgorICAgICAgICAgICAgICAgICAgICAgIGJlIGZvdW5kIGluIGRyaXZlcnMvc2NzaS9haWM3eHh4L2FpYzc5eHguaCB1bmRlcgorICAgICAgICAgICAgICAgICAgICAgIHRoZSAiRGVidWciIGhlYWRpbmcuCisgICAgIFBvc3NpYmxlIFZhbHVlczogMHgwMDAwID0gbm8gZGVidWdnaW5nLCAweGZmZmYgPSBmdWxsIGRlYnVnZ2luZworICAgICAgIERlZmF1bHQgVmFsdWU6IDB4MDAwMAorICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgICAgICAgT3B0aW9uOiBub19yZXNldAorICAgICAgICAgIERlZmluaXRpb246IERvIG5vdCByZXNldCB0aGUgYnVzIGR1cmluZyB0aGUgaW5pdGlhbCBwcm9iZQorICAgICAgICAgICAgICAgICAgICAgIHBoYXNlCisgICAgIFBvc3NpYmxlIFZhbHVlczogVGhpcyBvcHRpb24gaXMgYSBmbGFnCisgICAgICAgRGVmYXVsdCBWYWx1ZTogZGlzYWJsZWQKKyAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgICAgICAgIE9wdGlvbjogZXh0ZW5kZWQKKyAgICAgICAgICBEZWZpbml0aW9uOiBGb3JjZSBleHRlbmRlZCB0cmFuc2xhdGlvbiBvbiB0aGUgY29udHJvbGxlcgorICAgICBQb3NzaWJsZSBWYWx1ZXM6IFRoaXMgb3B0aW9uIGlzIGEgZmxhZworICAgICAgIERlZmF1bHQgVmFsdWU6IGRpc2FibGVkCisgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICAgICAgICBPcHRpb246IHBlcmlvZGljX290YWcKKyAgICAgICAgICBEZWZpbml0aW9uOiBTZW5kIGFuIG9yZGVyZWQgdGFnIHBlcmlvZGljYWxseSB0byBwcmV2ZW50CisgICAgICAgICAgICAgICAgICAgICAgdGFnIHN0YXJ2YXRpb24uICBOZWVkZWQgZm9yIHNvbWUgb2xkZXIgZGV2aWNlcworICAgICBQb3NzaWJsZSBWYWx1ZXM6IFRoaXMgb3B0aW9uIGlzIGEgZmxhZworICAgICAgIERlZmF1bHQgVmFsdWU6IGRpc2FibGVkCisgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICAgICAgICBPcHRpb246IHJldmVyc2Vfc2NhbgorICAgICAgICAgIERlZmluaXRpb246IFByb2JlIHRoZSBzY3NpIGJ1cyBpbiByZXZlcnNlIG9yZGVyLCBzdGFydGluZworICAgICAgICAgICAgICAgICAgICAgIHdpdGggdGFyZ2V0IDE1CisgICAgIFBvc3NpYmxlIFZhbHVlczogVGhpcyBvcHRpb24gaXMgYSBmbGFnCisgICAgICAgRGVmYXVsdCBWYWx1ZTogZGlzYWJsZWQKKyAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgICAgICAgIE9wdGlvbjogZ2xvYmFsX3RhZ19kZXB0aAorICAgICAgICAgIERlZmluaXRpb246IEdsb2JhbCB0YWcgZGVwdGggZm9yIGFsbCB0YXJnZXRzIG9uIGFsbCBidXNzZXMuCisgICAgICAgICAgICAgICAgICAgICAgVGhpcyBvcHRpb24gc2V0cyB0aGUgZGVmYXVsdCB0YWcgZGVwdGggd2hpY2gKKyAgICAgICAgICAgICAgICAgICAgICBtYXkgYmUgc2VsZWN0aXZlbHkgb3ZlcnJpZGRlbiB2aSB0aGUgdGFnX2luZm8KKyAgICAgICAgICAgICAgICAgICAgICBvcHRpb24uCisgICAgIFBvc3NpYmxlIFZhbHVlczogMSAtIDI1MworICAgICAgIERlZmF1bHQgVmFsdWU6IDMyCisgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICAgICAgICBPcHRpb246IHRhZ19pbmZvOnt7dmFsdWVbLHZhbHVlLi4uXX1bLHt2YWx1ZVssdmFsdWUuLi5dfS4uLl19CisgICAgICAgICAgRGVmaW5pdGlvbjogU2V0IHRoZSBwZXItdGFyZ2V0IHRhZ2dlZCBxdWV1ZSBkZXB0aCBvbiBhCisgICAgICAgICAgICAgICAgICAgICAgcGVyIGNvbnRyb2xsZXIgYmFzaXMuICBCb3RoIGNvbnRyb2xsZXJzIGFuZCB0YXJnZXRzCisgICAgICAgICAgICAgICAgICAgICAgbWF5IGJlIG9tbWl0dGVkIGluZGljYXRpbmcgdGhhdCB0aGV5IHNob3VsZCByZXRhaW4KKyAgICAgICAgICAgICAgICAgICAgICB0aGUgZGVmYXVsdCB0YWcgZGVwdGguCisgICAgICAgICAgICBFeGFtcGxlczogdGFnX2luZm86e3sxNiwzMiwzMiw2NCw4LDgsLDMyLDMyLDMyLDMyLDMyLDMyLDMyLDMyLDMyfQorICAgICAgICAgICAgICAgICAgICAgICAgT24gQ29udHJvbGxlciAwCisgICAgICAgICAgICAgICAgICAgICAgICAgIHNwZWNpZmllcyBhIHRhZyBkZXB0aCBvZiAxNiBmb3IgdGFyZ2V0IDAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgc3BlY2lmaWVzIGEgdGFnIGRlcHRoIG9mIDY0IGZvciB0YXJnZXQgMworICAgICAgICAgICAgICAgICAgICAgICAgICBzcGVjaWZpZXMgYSB0YWcgZGVwdGggb2YgOCBmb3IgdGFyZ2V0cyA0IGFuZCA1CisgICAgICAgICAgICAgICAgICAgICAgICAgIGxlYXZlcyB0YXJnZXQgNiBhdCB0aGUgZGVmYXVsdAorICAgICAgICAgICAgICAgICAgICAgICAgICBzcGVjaWZpZXMgYSB0YWcgZGVwdGggb2YgMzIgZm9yIHRhcmdldHMgMSwyLDctMTUKKyAgICAgICAgICAgICAgICAgICAgICAgIEFsbCBvdGhlciB0YXJnZXRzIHJldGFpbiB0aGUgZGVmYXVsdCBkZXB0aC4KKworICAgICAgICAgICAgICAgICAgICAgIHRhZ19pbmZvOnt7fSx7MzIsLDMyfX0KKyAgICAgICAgICAgICAgICAgICAgICAgIE9uIENvbnRyb2xsZXIgMQorICAgICAgICAgICAgICAgICAgICAgICAgICBzcGVjaWZpZXMgYSB0YWcgZGVwdGggb2YgMzIgZm9yIHRhcmdldHMgMCBhbmQgMgorICAgICAgICAgICAgICAgICAgICAgICAgQWxsIG90aGVyIHRhcmdldHMgcmV0YWluIHRoZSBkZWZhdWx0IGRlcHRoLgorICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgIFBvc3NpYmxlIFZhbHVlczogMSAtIDI1MworICAgICAgIERlZmF1bHQgVmFsdWU6IDMyCisgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICAgICAgICBPcHRpb246IHJkX3N0cm06IHtyZF9zdHJtX2JpdG1hc2tbLHJkX3N0cm1fYml0bWFzay4uLl19CisgICAgICAgICAgRGVmaW5pdGlvbjogRW5hYmxlIHJlYWQgc3RyZWFtaW5nIG9uIGEgcGVyIHRhcmdldCBiYXNpcy4KKyAgICAgICAgICAgICAgICAgICAgICBUaGUgcmRfc3RybV9iaXRtYXNrIGlzIGEgMTYgYml0IGhleCB2YWx1ZSBpbiB3aGljaAorICAgICAgICAgICAgICAgICAgICAgIGVhY2ggYml0IHJlcHJlc2VudHMgYSB0YXJnZXQuICBTZXR0aW5nIHRoZSB0YXJnZXQncworICAgICAgICAgICAgICAgICAgICAgIGJpdCB0byAnMScgZW5hYmxlcyByZWFkIHN0cmVhbWluZyBmb3IgdGhhdAorICAgICAgICAgICAgICAgICAgICAgIHRhcmdldC4gIENvbnRyb2xsZXJzIG1heSBiZSBvbW1pdHRlZCBpbmRpY2F0aW5nIHRoYXQKKyAgICAgICAgICAgICAgICAgICAgICB0aGV5IHNob3VsZCByZXRhaW4gdGhlIGRlZmF1bHQgcmVhZCBzdHJlYW1pbmcgc2V0dGluZy4KKyAgICAgICAgICAgICBFeGFtcGxlOiByZF9zdHJtOnsweDAwNDF9CisgICAgICAgICAgICAgICAgICAgICAgICBPbiBDb250cm9sbGVyIDAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgZW5hYmxlcyByZWFkIHN0cmVhbWluZyBmb3IgdGFyZ2V0cyAwIGFuZCA2LgorICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNhYmxlcyByZWFkIHN0cmVhbWluZyBmb3IgdGFyZ2V0cyAxLTUsNy0xNS4KKyAgICAgICAgICAgICAgICAgICAgICAgIEFsbCBvdGhlciB0YXJnZXRzIHJldGFpbiB0aGUgZGVmYXVsdCByZWFkCisgICAgICAgICAgICAgICAgICAgICAgICBzdHJlYW1pbmcgc2V0dGluZy4KKyAgICAgICAgICAgICBFeGFtcGxlOiByZF9zdHJtOnsweDAwMjMsLDB4RkZGRn0KKyAgICAgICAgICAgICAgICAgICAgICAgIE9uIENvbnRyb2xsZXIgMAorICAgICAgICAgICAgICAgICAgICAgICAgICBlbmFibGVzIHJlYWQgc3RyZWFtaW5nIGZvciB0YXJnZXRzIDEsMiwgYW5kIDUuCisgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc2FibGVzIHJlYWQgc3RyZWFtaW5nIGZvciB0YXJnZXRzIDMsNCw2LTE1LgorICAgICAgICAgICAgICAgICAgICAgICAgT24gQ29udHJvbGxlciAyCisgICAgICAgICAgICAgICAgICAgICAgICAgIGVuYWJsZXMgcmVhZCBzdHJlYW1pbmcgZm9yIGFsbCB0YXJnZXRzLgorICAgICAgICAgICAgICAgICAgICAgICAgQWxsIG90aGVyIHRhcmdldHMgcmV0YWluIHRoZSBkZWZhdWx0IHJlYWQKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0cmVhbWluZyBzZXR0aW5nLgorICAgICAgICAgICAgICAgICAgICAgIAorICAgICBQb3NzaWJsZSBWYWx1ZXM6IDB4MDAwMCAtIDB4ZmZmZgorICAgICAgIERlZmF1bHQgVmFsdWU6IDB4MDAwMAorICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgICAgICAgT3B0aW9uOiBkdjoge3ZhbHVlWyx2YWx1ZS4uLl19CisgICAgICAgICAgRGVmaW5pdGlvbjogU2V0IERvbWFpbiBWYWxpZGF0aW9uIFBvbGljeSBvbiBhIHBlci1jb250cm9sbGVyIGJhc2lzLgorICAgICAgICAgICAgICAgICAgICAgIENvbnRyb2xsZXJzIG1heSBiZSBvbW1pdHRlZCBpbmRpY2F0aW5nIHRoYXQKKyAgICAgICAgICAgICAgICAgICAgICB0aGV5IHNob3VsZCByZXRhaW4gdGhlIGRlZmF1bHQgcmVhZCBzdHJlYW1pbmcgc2V0dGluZy4KKyAgICAgICAgICAgICBFeGFtcGxlOiBkdjp7LTEsMCwsMSwxLDB9CisgICAgICAgICAgICAgICAgICAgICAgICBPbiBDb250cm9sbGVyIDAgbGVhdmUgRFYgYXQgaXRzIGRlZmF1bHQgc2V0dGluZy4KKyAgICAgICAgICAgICAgICAgICAgICAgIE9uIENvbnRyb2xsZXIgMSBkaXNhYmxlIERWLgorICAgICAgICAgICAgICAgICAgICAgICAgU2tpcCBjb25maWd1cmF0aW9uIG9uIENvbnRyb2xsZXIgMi4KKyAgICAgICAgICAgICAgICAgICAgICAgIE9uIENvbnRyb2xsZXJzIDMgYW5kIDQgZW5hYmxlIERWLgorICAgICAgICAgICAgICAgICAgICAgICAgT24gQ29udHJvbGxlciA1IGRpc2FibGUgRFYuCisKKyAgICAgUG9zc2libGUgVmFsdWVzOiA8IDAgVXNlIHNldHRpbmcgZnJvbSBzZXJpYWwgRUVQUk9NLgorICAgICAgICAgICAgICAgICAgICAgIDAgRGlzYWJsZSBEVgorICAgICAgICAgICAgICAgICAgICAgID4gMCBFbmFibGUgRFYKKyAgICAgICBEZWZhdWx0IFZhbHVlOiBEViBTZXJpYWwgRUVQUk9NIGNvbmZpZ3VyYXRpb24gc2V0dGluZy4KKyAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgICAgICAgIE9wdGlvbjogc2VsdGltZTpbdmFsdWVdCisgICAgICAgICAgRGVmaW5pdGlvbjogU3BlY2lmaWVzIHRoZSBzZWxlY3Rpb24gdGltZW91dCB2YWx1ZQorICAgICBQb3NzaWJsZSBWYWx1ZXM6IDAgPSAyNTZtcywgMSA9IDEyOG1zLCAyID0gNjRtcywgMyA9IDMybXMKKyAgICAgICBEZWZhdWx0IFZhbHVlOiAwCisgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAqKiogVGhlIGZvbGxvd2luZyB0aHJlZSBvcHRpb25zIHNob3VsZCBvbmx5IGJlIGNoYW5nZWQgYXQgKioqCisgICAqKiogdGhlIGRpcmVjdGlvbiBvZiBhIHRlY2huaWNhbCBzdXBwb3J0IHJlcHJlc2VudGF0aXZlLiAgKioqCisKKyAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgICAgICAgIE9wdGlvbjogcHJlY29tcDoge3ZhbHVlWyx2YWx1ZS4uLl19CisgICAgICAgICAgRGVmaW5pdGlvbjogU2V0IElPIENlbGwgcHJlY29tcGVuc2F0aW9uIHZhbHVlIG9uIGEgcGVyLWNvbnRyb2xsZXIKKyAgICAgICAgICAgICAgICAgICAgICBiYXNpcy4KKyAgICAgICAgICAgICAgICAgICAgICBDb250cm9sbGVycyBtYXkgYmUgb21taXR0ZWQgaW5kaWNhdGluZyB0aGF0CisgICAgICAgICAgICAgICAgICAgICAgdGhleSBzaG91bGQgcmV0YWluIHRoZSBkZWZhdWx0IHByZWNvbXBlbnNhdGlvbiBzZXR0aW5nLgorICAgICAgICAgICAgIEV4YW1wbGU6IHByZWNvbXA6ezB4MX0KKyAgICAgICAgICAgICAgICAgICAgICAgIE9uIENvbnRyb2xsZXIgMCBzZXQgcHJlY29tcGVuc2F0aW9uIHRvIDEuCisgICAgICAgICAgICAgRXhhbXBsZTogcHJlY29tcDp7MSwsN30KKyAgICAgICAgICAgICAgICAgICAgICAgIE9uIENvbnRyb2xsZXIgMCBzZXQgcHJlY29tcGVuc2F0aW9uIHRvIDEuCisgICAgICAgICAgICAgICAgICAgICAgICBPbiBDb250cm9sbGVyIDIgc2V0IHByZWNvbXBlbnNhdGlvbiB0byA4LgorICAgICAgICAgICAgICAgICAgICAgIAorICAgICBQb3NzaWJsZSBWYWx1ZXM6IDAgLSA3CisgICAgICAgRGVmYXVsdCBWYWx1ZTogVmFyaWVzIGJhc2VkIG9uIGNoaXAgcmV2aXNpb24KKyAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgICAgICAgIE9wdGlvbjogc2xld3JhdGU6IHt2YWx1ZVssdmFsdWUuLi5dfQorICAgICAgICAgIERlZmluaXRpb246IFNldCBJTyBDZWxsIHNsZXcgcmF0ZSBvbiBhIHBlci1jb250cm9sbGVyIGJhc2lzLgorICAgICAgICAgICAgICAgICAgICAgIENvbnRyb2xsZXJzIG1heSBiZSBvbW1pdHRlZCBpbmRpY2F0aW5nIHRoYXQKKyAgICAgICAgICAgICAgICAgICAgICB0aGV5IHNob3VsZCByZXRhaW4gdGhlIGRlZmF1bHQgc2xldyByYXRlIHNldHRpbmcuCisgICAgICAgICAgICAgRXhhbXBsZTogc2xld3JhdGU6ezB4MX0KKyAgICAgICAgICAgICAgICAgICAgICAgIE9uIENvbnRyb2xsZXIgMCBzZXQgc2xldyByYXRlIHRvIDEuCisgICAgICAgICAgICAgRXhhbXBsZTogc2xld3JhdGUgOnsxLCw4fQorICAgICAgICAgICAgICAgICAgICAgICAgT24gQ29udHJvbGxlciAwIHNldCBzbGV3IHJhdGUgdG8gMS4KKyAgICAgICAgICAgICAgICAgICAgICAgIE9uIENvbnRyb2xsZXIgMiBzZXQgc2xldyByYXRlIHRvIDguCisgICAgICAgICAgICAgICAgICAgICAgCisgICAgIFBvc3NpYmxlIFZhbHVlczogMCAtIDE1CisgICAgICAgRGVmYXVsdCBWYWx1ZTogVmFyaWVzIGJhc2VkIG9uIGNoaXAgcmV2aXNpb24KKyAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgICAgICAgIE9wdGlvbjogYW1wbGl0dWRlOiB7dmFsdWVbLHZhbHVlLi4uXX0KKyAgICAgICAgICBEZWZpbml0aW9uOiBTZXQgSU8gQ2VsbCBzaWduYWwgYW1wbGl0dWRlIG9uIGEgcGVyLWNvbnRyb2xsZXIgYmFzaXMuCisgICAgICAgICAgICAgICAgICAgICAgQ29udHJvbGxlcnMgbWF5IGJlIG9tbWl0dGVkIGluZGljYXRpbmcgdGhhdAorICAgICAgICAgICAgICAgICAgICAgIHRoZXkgc2hvdWxkIHJldGFpbiB0aGUgZGVmYXVsdCByZWFkIHN0cmVhbWluZyBzZXR0aW5nLgorICAgICAgICAgICAgIEV4YW1wbGU6IGFtcGxpdHVkZTp7MHgxfQorICAgICAgICAgICAgICAgICAgICAgICAgT24gQ29udHJvbGxlciAwIHNldCBhbXBsaXR1ZGUgdG8gMS4KKyAgICAgICAgICAgICBFeGFtcGxlOiBhbXBsaXR1ZGUgOnsxLCw3fQorICAgICAgICAgICAgICAgICAgICAgICAgT24gQ29udHJvbGxlciAwIHNldCBhbXBsaXR1ZGUgdG8gMS4KKyAgICAgICAgICAgICAgICAgICAgICAgIE9uIENvbnRyb2xsZXIgMiBzZXQgYW1wbGl0dWRlIHRvIDcuCisgICAgICAgICAgICAgICAgICAgICAgCisgICAgIFBvc3NpYmxlIFZhbHVlczogMSAtIDcKKyAgICAgICBEZWZhdWx0IFZhbHVlOiBWYXJpZXMgYmFzZWQgb24gY2hpcCByZXZpc2lvbgorICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgRXhhbXBsZTogJ29wdGlvbnMgYWljNzl4eCBhaWM3OXh4PXZlcmJvc2UscmRfc3RybTp7ezB4MDA0MX19JworICAgICAgICBlbmFibGVzIHZlcmJvc2Ugb3V0cHV0IGluIHRoZSBkcml2ZXIgYW5kIHR1cm5zIHJlYWQgc3RyZWFtaW5nIG9uCisgICAgICAgIGZvciB0YXJnZXRzIDAgYW5kIDYgb2YgQ29udHJvbGxlciAwLgorCis0LiBBZGRpdGlvbmFsIE5vdGVzCisKKyAgIDQuMS4gS25vd24vVW5yZXNvbHZlZCBvciBGWUkgSXNzdWVzCisKKyAgICAgICAgKiBVbmRlciBTdVNFIExpbnV4IEVudGVycHJpc2UgNywgdGhlIGRyaXZlciBtYXkgZmFpbCB0byBvcGVyYXRlCisgICAgICAgICAgY29ycmVjdGx5IGR1ZSB0byBhIHByb2JsZW0gd2l0aCBQQ0kgaW50ZXJydXB0IHJvdXRpbmcgaW4gdGhlCisgICAgICAgICAgTGludXgga2VybmVsLiAgUGxlYXNlIGNvbnRhY3QgU3VTRSBmb3IgYW4gdXBkYXRlZCBMaW51eAorICAgICAgICAgIGtlcm5lbC4KKworICAgNC4yLiBUaGlyZC1QYXJ0eSBDb21wYXRpYmlsaXR5IElzc3VlcworCisgICAgICAgICogQWRhcHRlYyBvbmx5IHN1cHBvcnRzIFVsdHJhMzIwIGhhcmQgZHJpdmVzIHJ1bm5pbmcKKyAgICAgICAgICB0aGUgbGF0ZXN0IGZpcm13YXJlIGF2YWlsYWJsZS4gUGxlYXNlIGNoZWNrIHdpdGgKKyAgICAgICAgICB5b3VyIGhhcmQgZHJpdmUgbWFudWZhY3R1cmVyIHRvIGVuc3VyZSB5b3UgaGF2ZSB0aGUKKyAgICAgICAgICBsYXRlc3QgdmVyc2lvbi4KKworICAgNC4zLiBPcGVyYXRpbmcgU3lzdGVtIG9yIFRlY2hub2xvZ3kgTGltaXRhdGlvbnMKKyAgICAgICAgCisgICAgICAgICogUENJIEhvdCBQbHVnIGlzIHVudGVzdGVkIGFuZCBtYXkgY2F1c2UgdGhlIG9wZXJhdGluZyBzeXN0ZW0gCisgICAgICAgICAgdG8gc3RvcCByZXNwb25kaW5nLgorICAgICAgICAqIEx1bnMgdGhhdCBhcmUgbm90IG51bWJlcmVkIGNvbnRpZ3VvdXNseSBzdGFydGluZyB3aXRoIDAgbWlnaHQgbm90CisgICAgICAgICAgYmUgYXV0b21hdGljYWxseSBwcm9iZWQgZHVyaW5nIHN5c3RlbSBzdGFydHVwLiAgVGhpcyBpcyBhIGxpbWl0YXRpb24KKyAgICAgICAgICBvZiB0aGUgT1MuICBQbGVhc2UgY29udGFjdCB5b3VyIExpbnV4IHZlbmRvciBmb3IgaW5zdHJ1Y3Rpb25zIG9uCisgICAgICAgICAgbWFudWFsbHkgcHJvYmluZyBub24tY29udGlndW91cyBsdW5zLgorICAgICAgICAqIFVzaW5nIHRoZSBEcml2ZXIgVXBkYXRlIERpc2sgdmVyc2lvbiBvZiB0aGlzIHBhY2thZ2UgZHVyaW5nIE9TCisgICAgICAgICAgaW5zdGFsbGF0aW9uIHVuZGVyIFJlZEhhdCBtaWdodCByZXN1bHQgaW4gdHdvIHZlcnNpb25zIG9mIHRoaXMKKyAgICAgICAgICBkcml2ZXIgYmVpbmcgaW5zdGFsbGVkIGludG8gdGhlIHN5c3RlbSBtb2R1bGUgZGlyZWN0b3J5LiAgVGhpcworICAgICAgICAgIG1pZ2h0IGNhdXNlIHByb2JsZW1zIHdpdGggdGhlIC9zYmluL21raW5pdHJkIHByb2dyYW0gYW5kL29yCisgICAgICAgICAgb3RoZXIgUlBNIHBhY2thZ2VzIHRoYXQgdHJ5IHRvIGluc3RhbGwgc3lzdGVtIG1vZHVsZXMuICBUaGUgYmVzdAorICAgICAgICAgIHdheSB0byBjb3JyZWN0IHRoaXMgb25jZSB0aGUgc3lzdGVtIGlzIHJ1bm5pbmcgaXMgdG8gaW5zdGFsbAorICAgICAgICAgIHRoZSBsYXRlc3QgUlBNIHBhY2thZ2UgdmVyc2lvbiBvZiB0aGlzIGRyaXZlciwgYXZhaWxhYmxlIGZyb20KKyAgICAgICAgICBodHRwOi8vd3d3LmFkYXB0ZWMuY29tLgorCisKKzUuIENvbnRhY3RpbmcgQWRhcHRlYworCisgICBBIFRlY2huaWNhbCBTdXBwb3J0IElkZW50aWZpY2F0aW9uIChUU0lEKSBOdW1iZXIgaXMgcmVxdWlyZWQgZm9yIAorICAgQWRhcHRlYyB0ZWNobmljYWwgc3VwcG9ydC4KKyAgICAtIFRoZSAxMi1kaWdpdCBUU0lEIGNhbiBiZSBmb3VuZCBvbiB0aGUgd2hpdGUgYmFyY29kZS10eXBlIGxhYmVsCisgICAgICBpbmNsdWRlZCBpbnNpZGUgdGhlIGJveCB3aXRoIHlvdXIgcHJvZHVjdC4gVGhlIFRTSUQgaGVscHMgdXMgCisgICAgICBwcm92aWRlIG1vcmUgZWZmaWNpZW50IHNlcnZpY2UgYnkgYWNjdXJhdGVseSBpZGVudGlmeWluZyB5b3VyIAorICAgICAgcHJvZHVjdCBhbmQgc3VwcG9ydCBzdGF0dXMuCisgICBTdXBwb3J0IE9wdGlvbnMKKyAgICAtIFNlYXJjaCB0aGUgQWRhcHRlYyBTdXBwb3J0IEtub3dsZWRnZWJhc2UgKEFTSykgYXQKKyAgICAgIGh0dHA6Ly9hc2suYWRhcHRlYy5jb20gZm9yIGFydGljbGVzLCB0cm91Ymxlc2hvb3RpbmcgdGlwcywgYW5kCisgICAgICBmcmVxdWVudGx5IGFza2VkIHF1ZXN0aW9ucyBmb3IgeW91ciBwcm9kdWN0LgorICAgIC0gRm9yIHN1cHBvcnQgdmlhIEVtYWlsLCBzdWJtaXQgeW91ciBxdWVzdGlvbiB0byBBZGFwdGVjJ3MgCisgICAgICBUZWNobmljYWwgU3VwcG9ydCBTcGVjaWFsaXN0cyBhdCBodHRwOi8vYXNrLmFkYXB0ZWMuY29tLgorICAgICAKKyAgIE5vcnRoIEFtZXJpY2EKKyAgICAtIFZpc2l0IG91ciBXZWIgc2l0ZSBhdCBodHRwOi8vd3d3LmFkYXB0ZWMuY29tLgorICAgIC0gVG8gc3BlYWsgd2l0aCBhIEZpYnJlIENoYW5uZWwvUkFJRC9FeHRlcm5hbCBTdG9yYWdlIFRlY2huaWNhbAorICAgICAgU3VwcG9ydCBTcGVjaWFsaXN0LCBjYWxsIDEtMzIxLTIwNy0yMDAwLAorICAgICAgSG91cnM6IE1vbmRheS1GcmlkYXksIDM6MDAgQS5NLiB0byA1OjAwIFAuTS4sIFBTVC4KKyAgICAgIChOb3Qgb3BlbiBvbiBob2xpZGF5cykKKyAgICAtIEZvciBUZWNobmljYWwgU3VwcG9ydCBpbiBhbGwgb3RoZXIgdGVjaG5vbG9naWVzIGluY2x1ZGluZyAKKyAgICAgIFNDU0ksIGNhbGwgMS00MDgtOTM0LTcyNzQsCisgICAgICBIb3VyczogTW9uZGF5LUZyaWRheSwgNjowMCBBLk0uIHRvIDU6MDAgUC5NLiwgUFNULgorICAgICAgKE5vdCBvcGVuIG9uIGhvbGlkYXlzKQorICAgIC0gRm9yIGFmdGVyIGhvdXJzIHN1cHBvcnQsIGNhbGwgMS04MDAtNDE2LTgwNjYgKCQ5OS9jYWxsLCAKKyAgICAgICQxNDkvY2FsbCBvbiBob2xpZGF5cykKKyAgICAtIFRvIG9yZGVyIEFkYXB0ZWMgcHJvZHVjdHMgaW5jbHVkaW5nIHNvZnR3YXJlIGFuZCBjYWJsZXMsIGNhbGwKKyAgICAgIDEtODAwLTQ0Mi03Mjc0IG9yIDEtNDA4LTk1Ny03Mjc0LiBZb3UgY2FuIGFsc28gdmlzaXQgb3VyIAorICAgICAgb25saW5lIHN0b3JlIGF0IGh0dHA6Ly93d3cuYWRhcHRlY3N0b3JlLmNvbQorCisgICBFdXJvcGUKKyAgICAtIFZpc2l0IG91ciBXZWIgc2l0ZSBhdCBodHRwOi8vd3d3LmFkYXB0ZWMtZXVyb3BlLmNvbS4KKyAgICAtIEVuZ2xpc2ggYW5kIEZyZW5jaDogVG8gc3BlYWsgd2l0aCBhIFRlY2huaWNhbCBTdXBwb3J0IAorICAgICAgU3BlY2lhbGlzdCwgY2FsbCBvbmUgb2YgdGhlIGZvbGxvd2luZyBudW1iZXJzOgorICAgICAgICAtIEVuZ2xpc2g6ICszMi0yLTM1Mi0zNDcwCisgICAgICAgIC0gRnJlbmNoOiAgKzMyLTItMzUyLTM0NjAKKyAgICAgIEhvdXJzOiBNb25kYXktVGh1cnNkYXksIDEwOjAwIHRvIDEyOjMwLCAxMzozMCB0byAxNzozMCBDRVQgCisgICAgICAgICAgICAgRnJpZGF5LCAxMDowMCB0byAxMjozMCwgMTM6MzAgdG8gMTY6MzAgQ0VUCisgICAgLSBHZXJtYW46IFRvIHNwZWFrIHdpdGggYSBUZWNobmljYWwgU3VwcG9ydCBTcGVjaWFsaXN0LAorICAgICAgY2FsbCArNDktODktNDU2LTQwNjYwCisgICAgICBIb3VyczogTW9uZGF5LVRodXJzZGF5LCAwOTozMCB0byAxMjozMCwgMTM6MzAgdG8gMTY6MzAgQ0VUCisgICAgICAgICAgICAgRnJpZGF5LCAwOTozMCB0byAxMjozMCwgMTM6MzAgdG8gMTU6MDAgQ0VUCisgICAgLSBUbyBvcmRlciBBZGFwdGVjIHByb2R1Y3RzLCBpbmNsdWRpbmcgYWNjZXNzb3JpZXMgYW5kIGNhYmxlczoKKyAgICAgICAgLSBVSzogKzA4MDAtOTYtNjUtMjYgb3IgZmF4ICswODAwLTczMS0wMi05NQorICAgICAgICAtIE90aGVyIEV1cm9wZWFuIGNvdW50cmllczogKzMyLTExLTMwMC0zNzkKKworICAgQXVzdHJhbGlhIGFuZCBOZXcgWmVhbGFuZAorICAgIC0gVmlzaXQgb3VyIFdlYiBzaXRlIGF0IGh0dHA6Ly93d3cuYWRhcHRlYy5jb20uYXUuCisgICAgLSBUbyBzcGVhayB3aXRoIGEgVGVjaG5pY2FsIFN1cHBvcnQgU3BlY2lhbGlzdCwgY2FsbCAKKyAgICAgICs2MTItOTQxNi0wNjk4CisgICAgICBIb3VyczogTW9uZGF5LUZyaWRheSwgMTA6MDAgQS5NLiB0byA0OjMwIFAuTS4sIEVBVAorICAgICAgKE5vdCBvcGVuIG9uIGhvbGlkYXlzKQorCisgICBKYXBhbgorICAgIC0gVG8gc3BlYWsgd2l0aCBhIFRlY2huaWNhbCBTdXBwb3J0IFNwZWNpYWxpc3QsIGNhbGwgCisgICAgICArODEtMy01MzA4LTYxMjAgCisgICAgICBIb3VyczogTW9uZGF5LUZyaWRheSwgOTowMCBhLm0uIHRvIDEyOjAwIHAubS4sIDE6MDAgcC5tLiB0bworICAgICAgNjowMCBwLm0uIFRTQworCisgICBIb25nIEtvbmcgYW5kIENoaW5hCisgICAgLSBUbyBzcGVhayB3aXRoIGEgVGVjaG5pY2FsIFN1cHBvcnQgU3BlY2lhbGlzdCwgY2FsbCAKKyAgICAgICs4NTItMjg2OS03MjAwCisgICAgICBIb3VyczogTW9uZGF5LUZyaWRheSwgMTA6MDAgdG8gMTc6MDAuCisgICAgLSBGYXggVGVjaG5pY2FsIFN1cHBvcnQgYXQgKzg1Mi0yODY5LTcxMDAuCisKKyAgIFNpbmdhcG9yZQorICAgIC0gVG8gc3BlYWsgd2l0aCBhIFRlY2huaWNhbCBTdXBwb3J0IFNwZWNpYWxpc3QsIGNhbGwgCisgICAgICArNjUtMjQ1LTc0NzAKKyAgICAgIEhvdXJzOiBNb25kYXktRnJpZGF5LCAxMDowMCB0byAxNzowMC4KKyAgICAtIEZheCBUZWNobmljYWwgU3VwcG9ydCBhdCArODUyLTI4NjktNzEwMAorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvKgorICogQ29weXJpZ2h0IChjKSAyMDAzIEFkYXB0ZWMgSW5jLiA2OTEgUy4gTWlscGl0YXMgQmx2ZC4sIE1pbHBpdGFzIENBIDk1MDM1IFVTQS4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogWW91IGFyZSBwZXJtaXR0ZWQgdG8gcmVkaXN0cmlidXRlLCB1c2UgYW5kIG1vZGlmeSB0aGlzIFJFQURNRSBmaWxlIGluIHdob2xlCisgKiBvciBpbiBwYXJ0IGluIGNvbmp1bmN0aW9uIHdpdGggcmVkaXN0cmlidXRpb24gb2Ygc29mdHdhcmUgZ292ZXJuZWQgYnkgdGhlCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIFJFQURNRSBmaWxlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMsIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIsCisgKiAgICB3aXRob3V0IG1vZGlmaWNhdGlvbi4KKyAqIDIuIFRoZSBuYW1lIG9mIHRoZSBhdXRob3IgbWF5IG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworICogICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKiAzLiBNb2RpZmljYXRpb25zIG9yIG5ldyBjb250cmlidXRpb25zIG11c3QgYmUgYXR0cmlidXRlZCBpbiBhIGNvcHlyaWdodAorICogICAgbm90aWNlIGlkZW50aWZ5aW5nIHRoZSBhdXRob3IgKCJDb250cmlidXRvciIpIGFuZCBhZGRlZCBiZWxvdyB0aGUKKyAqICAgIG9yaWdpbmFsIGNvcHlyaWdodCBub3RpY2UuIFRoZSBjb3B5cmlnaHQgbm90aWNlIGlzIGZvciBwdXJwb3NlcyBvZgorICogICAgaWRlbnRpZnlpbmcgY29udHJpYnV0b3JzIGFuZCBzaG91bGQgbm90IGJlIGRlZW1lZCBhcyBwZXJtaXNzaW9uIHRvIGFsdGVyCisgKiAgICB0aGUgcGVybWlzc2lvbnMgZ2l2ZW4gYnkgQWRhcHRlYy4KKyAqCisgKiBUSElTIFJFQURNRSBGSUxFIElTIFBST1ZJREVEIEJZIEFEQVBURUMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBBTlkKKyAqIFdBUlJBTlRJRVMgT0YgTk9OLUlORlJJTkdFTUVOVCBPUiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWQorICogQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTAorICogQURBUFRFQyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRAorICogVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRgorICogTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcKKyAqIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBSRUFETUUKKyAqIEZJTEUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vc2NzaS9haWM3eHh4LnR4dCBiL0RvY3VtZW50YXRpb24vc2NzaS9haWM3eHh4LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNjBlNzM1Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9zY3NpL2FpYzd4eHgudHh0CkBAIC0wLDAgKzEsNDE0IEBACis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorPSAgICBBZGFwdGVjIEFpYzd4eHggRmFzdCAtPiBVbHRyYTE2MCBGYW1pbHkgTWFuYWdlciBTZXQgdjYuMi4yOCAgID0KKz0gICAgICAgICAgICAgICAgICAgICAgICAgICAgUkVBRE1FIGZvciAgICAgICAgICAgICAgICAgICAgICAgICAgICA9Cis9ICAgICAgICAgICAgICAgICAgICAgVGhlIExpbnV4IE9wZXJhdGluZyBTeXN0ZW0gICAgICAgICAgICAgICAgICAgPQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworVGhlIGZvbGxvd2luZyBpbmZvcm1hdGlvbiBpcyBhdmFpbGFibGUgaW4gdGhpcyBmaWxlOgorCisgIDEuIFN1cHBvcnRlZCBIYXJkd2FyZQorICAyLiBWZXJzaW9uIEhpc3RvcnkKKyAgMy4gQ29tbWFuZCBMaW5lIE9wdGlvbnMKKyAgNC4gQ29udGFjdGluZyBBZGFwdGVjCisKKzEuIFN1cHBvcnRlZCBIYXJkd2FyZQorCisgICBUaGUgZm9sbG93aW5nIEFkYXB0ZWMgU0NTSSBDaGlwcyBhbmQgSG9zdCBBZGFwdGVycyBhcmUgc3VwcG9ydGVkIGJ5CisgICB0aGUgYWljN3h4eCBkcml2ZXIuIAorCisgICBDaGlwICAgIE1JUFMgIEhvc3QgQnVzICBNYXhTeW5jICBNYXhXaWR0aCAgU0NCcyAgTm90ZXMKKyAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgYWljNzc3MCAgMTAgICAgRUlTQS9WTCAgIDEwTUh6ICAgIDE2Qml0ICAgICAgNCAgIDEKKyAgIGFpYzc4NTAgIDEwICAgIFBDSS8zMiAgICAxME1IeiAgICA4Qml0ICAgICAgIDMKKyAgIGFpYzc4NTUgIDEwICAgIFBDSS8zMiAgICAxME1IeiAgICA4Qml0ICAgICAgIDMKKyAgIGFpYzc4NTYgIDEwICAgIFBDSS8zMiAgICAxME1IeiAgICA4Qml0ICAgICAgIDMKKyAgIGFpYzc4NTkgIDEwICAgIFBDSS8zMiAgICAyME1IeiAgICA4Qml0ICAgICAgIDMKKyAgIGFpYzc4NjAgIDEwICAgIFBDSS8zMiAgICAyME1IeiAgICA4Qml0ICAgICAgIDMKKyAgIGFpYzc4NzAgIDEwICAgIFBDSS8zMiAgICAxME1IeiAgICAxNkJpdCAgICAgIDE2CisgICBhaWM3ODgwICAxMCAgICBQQ0kvMzIgICAgMjBNSHogICAgMTZCaXQgICAgICAxNgorICAgYWljNzg5MCAgMjAgICAgUENJLzMyICAgIDQwTUh6ICAgIDE2Qml0ICAgICAgMTYgICAgICAzIDQgNSA2IDcgOAorICAgYWljNzg5MSAgMjAgICAgUENJLzY0ICAgIDQwTUh6ICAgIDE2Qml0ICAgICAgMTYgICAgICAzIDQgNSA2IDcgOAorICAgYWljNzg5MiAgMjAgICBQQ0kvNjQtNjYgIDgwTUh6ICAgIDE2Qml0ICAgICAgMTYgICAgICAzIDQgNSA2IDcgOAorICAgYWljNzg5NSAgMTUgICAgUENJLzMyICAgIDIwTUh6ICAgIDE2Qml0ICAgICAgMTYgICAgMiAzIDQgNQorICAgYWljNzg5NUMgMTUgICAgUENJLzMyICAgIDIwTUh6ICAgIDE2Qml0ICAgICAgMTYgICAgMiAzIDQgNSAgICAgOAorICAgYWljNzg5NiAgMjAgICAgUENJLzMyICAgIDQwTUh6ICAgIDE2Qml0ICAgICAgMTYgICAgMiAzIDQgNSA2IDcgOAorICAgYWljNzg5NyAgMjAgICAgUENJLzY0ICAgIDQwTUh6ICAgIDE2Qml0ICAgICAgMTYgICAgMiAzIDQgNSA2IDcgOAorICAgYWljNzg5OSAgMjAgICBQQ0kvNjQtNjYgIDgwTUh6ICAgIDE2Qml0ICAgICAgMTYgICAgMiAzIDQgNSA2IDcgOAorCisgICAxLiAgIE11bHRpcGxleGVkIFR3aW4gQ2hhbm5lbCBEZXZpY2UgLSBPbmUgY29udHJvbGxlciBzZXJ2aWNpbmcgdHdvCisgICAgICAgIGJ1c3Nlcy4KKyAgIDIuICAgTXVsdGktZnVuY3Rpb24gVHdpbiBDaGFubmVsIERldmljZSAtIFR3byBjb250cm9sbGVycyBvbiBvbmUgY2hpcC4KKyAgIDMuICAgQ29tbWFuZCBDaGFubmVsIFNlY29uZGFyeSBETUEgRW5naW5lIC0gQWxsb3dzIHNjYXR0ZXIgZ2F0aGVyIGxpc3QKKyAgICAgICAgYW5kIFNDQiBwcmVmZXRjaC4KKyAgIDQuICAgNjQgQnl0ZSBTQ0IgU3VwcG9ydCAtIEFsbG93cyBkaXNjb25uZWN0ZWQsIHVudHRhZ2dlZCByZXF1ZXN0IHRhYmxlCisgICAgICAgIGZvciBhbGwgcG9zc2libGUgdGFyZ2V0L2x1biBjb21iaW5hdGlvbnMuCisgICA1LiAgIEJsb2NrIE1vdmUgSW5zdHJ1Y3Rpb24gU3VwcG9ydCAtIERvdWJsZXMgdGhlIHNwZWVkIG9mIGNlcnRhaW4KKyAgICAgICAgc2VxdWVuY2VyIG9wZXJhdGlvbnMuCisgICA2LiAgIGBCYXlvbmV0JyBzdHlsZSBTY2F0dGVyIEdhdGhlciBFbmdpbmUgLSBJbXByb3ZlcyBTL0cgcHJlZmV0Y2gKKyAgICAgICAgcGVyZm9ybWFuY2UuCisgICA3LiAgIFF1ZXVpbmcgUmVnaXN0ZXJzIC0gQWxsb3dzIHF1ZXVpbmcgb2YgbmV3IHRyYW5zYWN0aW9ucyB3aXRob3V0CisgICAgICAgIHBhdXNpbmcgdGhlIHNlcXVlbmNlci4KKyAgIDguICAgTXVsdGlwbGUgVGFyZ2V0IElEcyAtIEFsbG93cyB0aGUgY29udHJvbGxlciB0byByZXNwb25kIHRvIHNlbGVjdGlvbgorICAgICAgICBhcyBhIHRhcmdldCBvbiBtdWx0aXBsZSBTQ1NJIElEcy4KKworICAgQ29udHJvbGxlciAgICAgIENoaXAgICBIb3N0LUJ1cyAgICBJbnQtQ29ubmVjdG9ycyAgRXh0LUNvbm5lY3RvcnMgIE5vdGVzCisgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgQUhBLTI3NFhbQV0gICAgYWljNzc3MCAgIEVJU0EgICAgICAgICBTRS01ME0gICAgICAgICBTRS1IRDUwRgorICAgQUhBLTI3NFhbQV1XICAgYWljNzc3MCAgIEVJU0EgICAgICAgICBTRS1IRDY4RiAgICAgICBTRS1IRDY4RgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTRS01ME0KKyAgIEFIQS0yNzRYW0FdVCAgIGFpYzc3NzAgICBFSVNBICAgICAgIDIgWCBTRS01ME0gICAgICAgU0UtSEQ1MEYKKyAgIEFIQS0yODQyICAgICAgIGFpYzc3NzAgICAgVkwgICAgICAgICAgU0UtNTBNICAgICAgICAgU0UtSEQ1MEYKKyAgIEFIQS0yOTQwQVUgICAgIGFpYzc4NjAgICBQQ0kvMzIgICAgICAgU0UtNTBNICAgICAgICAgU0UtSEQ1MEYKKyAgIEFWQS0yOTAySSAgICAgIGFpYzc4NjAgICBQQ0kvMzIgICAgICAgU0UtNTBNCisgICBBVkEtMjkwMkUgICAgICBhaWM3ODYwICAgUENJLzMyICAgICAgIFNFLTUwTQorICAgQVZBLTI5MDYgICAgICAgYWljNzg1NiAgIFBDSS8zMiAgICAgICBTRS01ME0gICAgICAgICBTRS1EQjI1RgorICAgQVBDLTc4NTAgICAgICAgYWljNzg1MCAgIFBDSS8zMiAgICAgICBTRS01ME0gICAgICAgICAgICAgICAgICAgICAgIDEKKyAgIEFWQS0yOTQwICAgICAgIGFpYzc4NjAgICBQQ0kvMzIgICAgICAgU0UtNTBNCisgICBBSEEtMjkyMEIgICAgICBhaWM3ODYwICAgUENJLzMyICAgICAgIFNFLTUwTQorICAgQUhBLTI5MzBCICAgICAgYWljNzg2MCAgIFBDSS8zMiAgICAgICBTRS01ME0KKyAgIEFIQS0yOTIwQyAgICAgIGFpYzc4NTYgICBQQ0kvMzIgICAgICAgU0UtNTBNICAgICAgICAgU0UtSEQ1MEYKKyAgIEFIQS0yOTMwQyAgICAgIGFpYzc4NjAgICBQQ0kvMzIgICAgICAgU0UtNTBNCisgICBBSEEtMjkzMEMgICAgICBhaWM3ODYwICAgUENJLzMyICAgICAgIFNFLTUwTQorICAgQUhBLTI5MTBDICAgICAgYWljNzg2MCAgIFBDSS8zMiAgICAgICBTRS01ME0KKyAgIEFIQS0yOTE1QyAgICAgIGFpYzc4NjAgICBQQ0kvMzIgICAgICAgU0UtNTBNCisgICBBSEEtMjk0MEFVL0NOICBhaWM3ODYwICAgUENJLzMyICAgICAgIFNFLTUwTSAgICAgICAgIFNFLUhENTBGCisgICBBSEEtMjk0NFcgICAgICBhaWM3ODcwICAgUENJLzMyICAgICBIVkQtSEQ2OEYgICAgICAgIEhWRC1IRDY4RgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhWRC01ME0KKyAgIEFIQS0zOTQwVyAgICAgIGFpYzc4NzAgICBQQ0kvMzIgICAgIDIgWCBTRS1IRDY4RiAgICAgU0UtSEQ2OEYgICAgICAgIDIKKyAgIEFIQS0yOTQwVVcgICAgIGFpYzc4ODAgICBQQ0kvMzIgICAgICAgU0UtSEQ2OEYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0UtNTBNICAgICAgICAgU0UtSEQ2OEYKKyAgIEFIQS0yOTQwVSAgICAgIGFpYzc4ODAgICBQQ0kvMzIgICAgICAgU0UtNTBNICAgICAgICAgU0UtSEQ1MEYKKyAgIEFIQS0yOTQwRCAgICAgIGFpYzc4ODAgICBQQ0kvMzIKKyAgIGFIQS0yOTQwIEEvVCAgIGFpYzc4ODAgICBQQ0kvMzIKKyAgIEFIQS0yOTQwRCBBL1QgIGFpYzc4ODAgICBQQ0kvMzIKKyAgIEFIQS0zOTQwVVcgICAgIGFpYzc4ODAgICBQQ0kvMzIgICAgIDIgWCBTRS1IRDY4RiAgICAgU0UtSEQ2OEYgICAgICAgICAgMworICAgQUhBLTM5NDBVV0QgICAgYWljNzg4MCAgIFBDSS8zMiAgICAgMiBYIFNFLUhENjhGICAgMiBYIFNFLVZIRDY4RiAgICAgICAzCisgICBBSEEtMzk0MFUgICAgICBhaWM3ODgwICAgUENJLzMyICAgICAyIFggU0UtNTBNICAgICAgIFNFLUhENTBGICAgICAgICAgIDMKKyAgIEFIQS0yOTQ0VVcgICAgIGFpYzc4ODAgICBQQ0kvMzIgICAgICBIVkQtSEQ2OEYgICAgICAgSFZELUhENjhGCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhWRC01ME0KKyAgIEFIQS0zOTQ0VVdEICAgIGFpYzc4ODAgICBQQ0kvMzIgICAgIDIgWCBIVkQtSEQ2OEYgIDIgWCBIVkQtVkhENjhGICAgICAgMworICAgQUhBLTQ5NDRVVyAgICAgYWljNzg4MCAgIFBDSS8zMgorICAgQUhBLTI5MzBVVyAgICAgYWljNzg4MCAgIFBDSS8zMgorICAgQUhBLTI5NDBVVyBQcm8gYWljNzg4MCAgIFBDSS8zMiAgICAgIFNFLUhENjhGICAgICAgICBTRS1IRDY4RiAgICAgICAgICAgIDQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0UtNTBNCisgICBBSEEtMjk0MFVXL0NOICBhaWM3ODgwICAgUENJLzMyCisgICBBSEEtMjk0MFVEdWFsICBhaWM3ODk1ICAgUENJLzMyCisgICBBSEEtMjk0MFVXRHVhbCBhaWM3ODk1ICAgUENJLzMyCisgICBBSEEtMzk0MFVXRCAgICBhaWM3ODk1ICAgUENJLzMyCisgICBBSEEtMzk0MEFVVyAgICBhaWM3ODk1ICAgUENJLzMyCisgICBBSEEtMzk0MEFVV0QgICBhaWM3ODk1ICAgUENJLzMyCisgICBBSEEtMzk0MEFVICAgICBhaWM3ODk1ICAgUENJLzMyCisgICBBSEEtMzk0NEFVV0QgICBhaWM3ODk1ICAgUENJLzMyICAgICAyIFggSFZELUhENjhGICAyIFggSFZELVZIRDY4RgorICAgQUhBLTI5NDBVMkIgICAgYWljNzg5MCAgIFBDSS8zMiAgICAgIExWRC1IRDY4RiAgICAgICBMVkQtSEQ2OEYKKyAgIEFIQS0yOTQwVTIgT0VNIGFpYzc4OTEgICBQQ0kvNjQKKyAgIEFIQS0yOTQwVTJXICAgIGFpYzc4OTAgICBQQ0kvMzIgICAgICBMVkQtSEQ2OEYgICAgICAgTFZELUhENjhGCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0UtSEQ2OEYgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNFLTUwTQorICAgQUhBLTI5NTBVMkIgICAgYWljNzg5MSAgIFBDSS82NCAgICAgIExWRC1IRDY4RiAgICAgICBMVkQtSEQ2OEYKKyAgIEFIQS0yOTMwVTIgICAgIGFpYzc4OTAgICBQQ0kvMzIgICAgICBMVkQtSEQ2OEYgICAgICAgU0UtSEQ1MEYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0UtNTBNIAorICAgQUhBLTM5NTBVMkIgICAgYWljNzg5NyAgIFBDSS82NAorICAgQUhBLTM5NTBVMkQgICAgYWljNzg5NyAgIFBDSS82NAorICAgQUhBLTI5MTYwICAgICAgYWljNzg5MiAgIFBDSS82NC02NgorICAgQUhBLTI5MTYwIENQUSAgYWljNzg5MiAgIFBDSS82NC02NgorICAgQUhBLTI5MTYwTiAgICAgYWljNzg5MiAgIFBDSS8zMiAgICAgIExWRC1IRDY4RiAgICAgICBTRS1IRDUwRgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTRS01ME0KKyAgIEFIQS0yOTE2MExQICAgIGFpYzc4OTIgICBQQ0kvNjQtNjYKKyAgIEFIQS0xOTE2MCAgICAgIGFpYzc4OTIgICBQQ0kvNjQtNjYKKyAgIEFIQS0yOTE1MExQICAgIGFpYzc4OTIgICBQQ0kvNjQtNjYKKyAgIEFIQS0yOTEzMExQICAgIGFpYzc4OTIgICBQQ0kvNjQtNjYKKyAgIEFIQS0zOTYwRCAgICAgIGFpYzc4OTkgICBQQ0kvNjQtNjYgIDIgWCBMVkQtSEQ2OEYgIDIgWCBMVkQtVkhENjhGCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExWRC01ME0KKyAgIEFIQS0zOTYwRCBDUFEgIGFpYzc4OTkgICBQQ0kvNjQtNjYgIDIgWCBMVkQtSEQ2OEYgIDIgWCBMVkQtVkhENjhGCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExWRC01ME0KKyAgIEFIQS0zOTE2MCAgICAgIGFpYzc4OTkgICBQQ0kvNjQtNjYgIDIgWCBMVkQtSEQ2OEYgIDIgWCBMVkQtVkhENjhGCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExWRC01ME0KKworICAgMS4gTm8gQklPUyBzdXBwb3J0CisgICAyLiBERUMyMTA1MCBQQ0ktUENJIGJyaWRnZSB3aXRoIG11bHRpcGxlIGNvbnRyb2xsZXIgY2hpcHMgb24gc2Vjb25kYXJ5IGJ1cworICAgMy4gREVDMjExNVggUENJLVBDSSBicmlkZ2Ugd2l0aCBtdWx0aXBsZSBjb250cm9sbGVyIGNoaXBzIG9uIHNlY29uZGFyeSBidXMKKyAgIDQuIEFsbCB0aHJlZSBTQ1NJIGNvbm5lY3RvcnMgbWF5IGJlIHVzZWQgc2ltdWx0YW5lb3VzbHkgd2l0aG91dAorICAgICAgU0NTSSAic3R1YiIgZWZmZWN0cy4KKworMi4gVmVyc2lvbiBIaXN0b3J5CisgICA2LjIuMzYgKEp1bmUgM3JkLCAyMDAzKQorICAgICAgICAtIENvcnJlY3QgY29kZSB0aGF0IGRpc2FibGVzIFBDSSBwYXJpdHkgZXJyb3IgY2hlY2tpbmcuCisgICAgICAgIC0gQ29ycmVjdCBhbmQgc2ltcGxpZnkgaGFuZGxpbmcgb2YgdGhlIGlnbm9yZSB3aWRlIHJlc2lkdWUKKyAgICAgICAgICBtZXNzYWdlLiAgVGhlIHByZXZpb3VzIGNvZGUgd291bGQgZmFpbCB0byByZXBvcnQgYSByZXNpZHVhbAorICAgICAgICAgIGlmIHRoZSB0cmFuc2FjdGlvbiBkYXRhIGxlbmd0aCB3YXMgZXZlbiBhbmQgd2UgcmVjZWl2ZWQKKyAgICAgICAgICBhbiBJV1IgbWVzc2FnZS4KKyAgICAgICAgLSBBZGQgc3VwcG9ydCBmb3IgdGhlIDIuNS5YIEVJU0EgZnJhbWV3b3JrLgorICAgICAgICAtIFVwZGF0ZSBmb3IgY2hhbmdlIGluIDIuNS5YIFNDU0kgcHJvYyBGUyBpbnRlcmZhY2UuCisgICAgICAgIC0gQ29ycmVjdCBEb21haW4gVmFsaWRhdGlvbiBjb21tYW5kLWxpbmUgb3B0aW9uIHBhcnNpbmcuCisgICAgICAgIC0gV2hlbiBuZWdvdGlhdGlvbiBhc3luYyB2aWEgYW4gOGJpdCBXRFRSIG1lc3NhZ2UsIHNlbmQKKyAgICAgICAgICBhbiBTRFRSIHdpdGggYW4gb2Zmc2V0IG9mIDAgdG8gYmUgc3VyZSB0aGUgdGFyZ2V0CisgICAgICAgICAga25vd3Mgd2UgYXJlIGFzeW5jLiAgVGhpcyB3b3JrcyBhcm91bmQgYSBmaXJtd2FyZSBkZWZlY3QKKyAgICAgICAgICBpbiB0aGUgUXVhbnR1bSBBdGxhcyAxMEsuCisgICAgICAgIC0gQ2xlYXIgUENJIGVycm9yIHN0YXRlIGR1cmluZyBkcml2ZXIgYXR0YWNoIHNvIHRoYXQgd2UKKyAgICAgICAgICBkb24ndCBkaXNhYmxlIG1lbW9yeSBtYXBwZWQgSS9PIGR1ZSB0byBhIHN0cmF5IHdyaXRlCisgICAgICAgICAgYnkgc29tZSBvdGhlciBkcml2ZXIgcHJvYmUgdGhhdCBvY2N1cnJlZCBiZWZvcmUgd2UKKyAgICAgICAgICBjbGFpbWVkIHRoZSBjb250cm9sbGVyLgorCisgICA2LjIuMzUgKE1heSAxNHRoLCAyMDAzKQorICAgICAgICAtIEZpeCBhIGZldyBHQ0MgMy4zIGNvbXBpbGVyIHdhcm5pbmdzLgorICAgICAgICAtIENvcnJlY3Qgb3BlcmF0aW9uIG9uIEVJU0EgVHdpbiBDaGFubmVsIGNvbnRyb2xsZXIuCisgICAgICAgIC0gQWRkIHN1cHBvcnQgZm9yIDIuNS5YJ3Mgc2NzaV9yZXBvcnRfZGV2aWNlX3Jlc2V0KCkuCisKKyAgIDYuMi4zNCAoTWF5IDV0aCwgMjAwMykKKyAgICAgICAgLSBGaXggbG9ja2luZyByZWdyZXNzaW9uIGluc3Ryb2R1Y2VkIGluIDYuMi4yOSB0aGF0CisgICAgICAgICAgY291bGQgY3Vhc2UgYSBsb2NrIG9yZGVyIHJldmVyc2FsIGJldHdlZW4gdGhlIGlvX3JlcXVlc3RfbG9jaworICAgICAgICAgIGFuZCBvdXIgcGVyLXNvZnRjIGxvY2suICBUaGlzIHdhcyBvbmx5IHBvc3NpYmxlIG9uIFJIOSwKKyAgICAgICAgICBTdVNFLCBhbmQga2VybmVsLm9yZyAyLjQuWCBrZXJuZWxzLgorCisgICA2LjIuMzMgKEFwcmlsIDMwdGgsIDIwMDMpCisgICAgICAgIC0gRHluYW1pY2FsbHkgZGlzYWJsZSBQQ0kgcGFyaXR5IGVycm9yIHJlcG9ydGluZyBhZnRlcgorICAgICAgICAgIDEwIGVycm9ycyBhcmUgcmVwb3J0ZWQgdG8gdGhlIHVzZXIuICBUaGVzZSBlcnJvcnMgYXJlCisgICAgICAgICAgdGhlIHJlc3VsdCBvZiBzb21lIG90aGVyIGRldmljZSBpc3N1aW5nIFBDSSB0cmFuc2FjdGlvbnMKKyAgICAgICAgICB3aXRoIGJhZCBwYXJpdHkuICBPbmNlIHRoZSB1c2VyIGhhcyBiZWVuIGluZm9ybWVkIG9mIHRoZQorICAgICAgICAgIHByb2JsZW0sIGNvbnRpbnVpbmcgdG8gcmVwb3J0IHRoZSBlcnJvcnMganVzdCBkZWdyYWRlcworICAgICAgICAgIG91ciBwZXJmb3JtYW5jZS4KKworICAgNi4yLjMyIChNYXJjaCAyOHRoLCAyMDAzKQorICAgICAgICAtIER5bmFtaWNhbGx5IHNpemVkIFMvRyBsaXN0cyB0byBhdm9pZCBTQ1NJIG1hbGxvYworICAgICAgICAgIHBvb2wgZnJhZ21lbnRhdGlvbiBhbmQgU0NTSSBtaWQtbGF5ZXIgZGVhZGxvY2suCisKKyAgIDYuMi4yOCAoSmFudWFyeSAyMHRoLCAyMDAzKQorICAgICAgICAtIERvbWFpbiBWYWxpZGF0aW9uIEZpeGVzCisgICAgICAgIC0gQWRkIGFiaWxpdHkgdG8gZGlzYWJsZSBQQ0kgcGFyaXR5IGVycm9yIGNoZWNraW5nLgorICAgICAgICAtIEVuaGFuY2VkIE1lbW9yeSBNYXBwZWQgSS9PIHByb2JlCisKKyAgIDYuMi4yMCAoTm92ZW1iZXIgN3RoLCAyMDAyKQorICAgICAgICAtIEFkZGVkIERvbWFpbiBWYWxpZGF0aW9uLgorCiszLiBDb21tYW5kIExpbmUgT3B0aW9ucworCisgICAgICAgIFdBUk5JTkc6IEFMVEVSSU5HIE9SIEFERElORyBUSEVTRSBEUklWRVIgUEFSQU1FVEVSUworICAgICAgICAgICAgICAgICBJTkNPUlJFQ1RMWSBDQU4gUkVOREVSIFlPVVIgU1lTVEVNIElOT1BFUkFCTEUuCisgICAgICAgICAgICAgICAgIFVTRSBUSEVNIFdJVEggQ0FVVElPTi4gCisKKyAgIEVkaXQgdGhlIGZpbGUgIm1vZHByb2JlLmNvbmYiIGluIHRoZSBkaXJlY3RvcnkgL2V0YyBhbmQgYWRkL2VkaXQgYQorICAgbGluZSBjb250YWluaW5nICdvcHRpb25zIGFpYzd4eHggYWljN3h4eD1bY29tbWFuZFssY29tbWFuZC4uLl1dJyB3aGVyZQorICAgJ2NvbW1hbmQnIGlzIG9uZSBvciBtb3JlIG9mIHRoZSBmb2xsb3dpbmc6CisgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICAgICAgICBPcHRpb246IHZlcmJvc2UKKyAgICAgICAgICBEZWZpbml0aW9uOiBlbmFibGUgYWRkaXRpb25hbCBpbmZvcm1hdGl2ZSBtZXNzYWdlcyBkdXJpbmcKKyAgICAgICAgICAgICAgICAgICAgICBkcml2ZXIgb3BlcmF0aW9uLgorICAgICBQb3NzaWJsZSBWYWx1ZXM6IFRoaXMgb3B0aW9uIGlzIGEgZmxhZworICAgICAgIERlZmF1bHQgVmFsdWU6IGRpc2FibGVkCisgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICAgICAgICBPcHRpb246IGRlYnVnOlt2YWx1ZV0KKyAgICAgICAgICBEZWZpbml0aW9uOiBFbmFibGVzIHZhcmlvdXMgbGV2ZWxzIG9mIGRlYnVnZ2luZyBpbmZvcm1hdGlvbgorICAgICBQb3NzaWJsZSBWYWx1ZXM6IDB4MDAwMCA9IG5vIGRlYnVnZ2luZywgMHhmZmZmID0gZnVsbCBkZWJ1Z2dpbmcKKyAgICAgICBEZWZhdWx0IFZhbHVlOiAweDAwMDAKKyAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgICAgICAgIE9wdGlvbjogbm9fcHJvYmUKKyAgICAgICAgICAgICAgT3B0aW9uOiBwcm9iZV9laXNhX3ZsCisgICAgICAgICAgRGVmaW5pdGlvbjogRG8gbm90IHByb2JlIGZvciBFSVNBL1ZMQiBjb250cm9sbGVycy4KKyAgICAgICAgICAgICAgICAgICAgICBUaGlzIGlzIGEgdG9nZ2xlLiAgSWYgdGhlIGRyaXZlciBpcyBjb21waWxlZAorICAgICAgICAgICAgICAgICAgICAgIHRvIG5vdCBwcm9iZSBFSVNBL1ZMQiBjb250cm9sbGVycyBieSBkZWZhdWx0LAorICAgICAgICAgICAgICAgICAgICAgIHNwZWNpZnlpbmcgIm5vX3Byb2JlIiB3aWxsIGVuYWJsZSB0aGlzIHByb2JpbmcuCisgICAgICAgICAgICAgICAgICAgICAgSWYgdGhlIGRyaXZlciBpcyBjb21waWxlZCB0byBwcm9iZSBFSVNBL1ZMQgorICAgICAgICAgICAgICAgICAgICAgIGNvbnRyb2xsZXJzIGJ5IGRlZmF1bHQsIHNwZWNpZnlpbmcgIm5vX3Byb2JlIgorICAgICAgICAgICAgICAgICAgICAgIHdpbGwgZGlzYWJsZSB0aGlzIHByb2JpbmcuCisgICAgIFBvc3NpYmxlIFZhbHVlczogVGhpcyBvcHRpb24gaXMgYSB0b2dnbGUKKyAgICAgICBEZWZhdWx0IFZhbHVlOiBFSVNBL1ZMQiBwcm9iaW5nIGlzIGRpc2FibGVkIGJ5IGRlZmF1bHQuCisgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICAgICAgICBPcHRpb246IHBjaV9wYXJpdHkKKyAgICAgICAgICBEZWZpbml0aW9uOiBUb2dnbGVzIHRoZSBkZXRlY3Rpb24gb2YgUENJIHBhcml0eSBlcnJvcnMuCisgICAgICAgICAgICAgICAgICAgICAgT24gbWFueSBtb3RoZXJib2FyZHMgd2l0aCBWSUEgY2hpcHNldHMsCisgICAgICAgICAgICAgICAgICAgICAgUENJIHBhcml0eSBpcyBub3QgZ2VuZXJhdGVkIGNvcnJlY3RseSBvbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgICBQQ0kgYnVzLiAgSXQgaXMgaW1wb3NzaWJsZSBmb3IgdGhlIGhhcmR3YXJlIHRvCisgICAgICAgICAgICAgICAgICAgICAgZGlmZmVyZW50aWF0ZSBiZXR3ZWVuIHRoZXNlICJzcHVyaW91cyIgcGFyaXR5CisgICAgICAgICAgICAgICAgICAgICAgZXJyb3JzIGFuZCByZWFsIHBhcml0eSBlcnJvcnMuICBUaGUgc3ltcHRvbSBvZgorICAgICAgICAgICAgICAgICAgICAgIHRoaXMgcHJvYmxlbSBpcyBhIHN0cmVhbSBvZiB0aGUgbWVzc2FnZToKKyAgICAic2NzaTA6IERhdGEgUGFyaXR5IEVycm9yIERldGVjdGVkIGR1cmluZyBhZGRyZXNzIG9yIHdyaXRlIGRhdGEgcGhhc2UiCisgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0IGJ5IHRoZSBkcml2ZXIuCisgICAgIFBvc3NpYmxlIFZhbHVlczogVGhpcyBvcHRpb24gaXMgYSB0b2dnbGUKKyAgICAgICBEZWZhdWx0IFZhbHVlOiBQQ0kgUGFyaXR5IEVycm9yIHJlcG9ydGluZyBpcyBkaXNhYmxlZAorICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgICAgICAgT3B0aW9uOiBub19yZXNldAorICAgICAgICAgIERlZmluaXRpb246IERvIG5vdCByZXNldCB0aGUgYnVzIGR1cmluZyB0aGUgaW5pdGlhbCBwcm9iZQorICAgICAgICAgICAgICAgICAgICAgIHBoYXNlCisgICAgIFBvc3NpYmxlIFZhbHVlczogVGhpcyBvcHRpb24gaXMgYSBmbGFnCisgICAgICAgRGVmYXVsdCBWYWx1ZTogZGlzYWJsZWQKKyAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgICAgICAgIE9wdGlvbjogZXh0ZW5kZWQKKyAgICAgICAgICBEZWZpbml0aW9uOiBGb3JjZSBleHRlbmRlZCB0cmFuc2xhdGlvbiBvbiB0aGUgY29udHJvbGxlcgorICAgICBQb3NzaWJsZSBWYWx1ZXM6IFRoaXMgb3B0aW9uIGlzIGEgZmxhZworICAgICAgIERlZmF1bHQgVmFsdWU6IGRpc2FibGVkCisgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICAgICAgICBPcHRpb246IHBlcmlvZGljX290YWcKKyAgICAgICAgICBEZWZpbml0aW9uOiBTZW5kIGFuIG9yZGVyZWQgdGFnIHBlcmlvZGljYWxseSB0byBwcmV2ZW50CisgICAgICAgICAgICAgICAgICAgICAgdGFnIHN0YXJ2YXRpb24uICBOZWVkZWQgZm9yIHNvbWUgb2xkZXIgZGV2aWNlcworICAgICBQb3NzaWJsZSBWYWx1ZXM6IFRoaXMgb3B0aW9uIGlzIGEgZmxhZworICAgICAgIERlZmF1bHQgVmFsdWU6IGRpc2FibGVkCisgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICAgICAgICBPcHRpb246IHJldmVyc2Vfc2NhbgorICAgICAgICAgIERlZmluaXRpb246IFByb2JlIHRoZSBzY3NpIGJ1cyBpbiByZXZlcnNlIG9yZGVyLCBzdGFydGluZworICAgICAgICAgICAgICAgICAgICAgIHdpdGggdGFyZ2V0IDE1CisgICAgIFBvc3NpYmxlIFZhbHVlczogVGhpcyBvcHRpb24gaXMgYSBmbGFnCisgICAgICAgRGVmYXVsdCBWYWx1ZTogZGlzYWJsZWQKKyAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgICAgICAgIE9wdGlvbjogZ2xvYmFsX3RhZ19kZXB0aDpbdmFsdWVdCisgICAgICAgICAgRGVmaW5pdGlvbjogR2xvYmFsIHRhZyBkZXB0aCBmb3IgYWxsIHRhcmdldHMgb24gYWxsIGJ1c3Nlcy4KKyAgICAgICAgICAgICAgICAgICAgICBUaGlzIG9wdGlvbiBzZXRzIHRoZSBkZWZhdWx0IHRhZyBkZXB0aCB3aGljaAorICAgICAgICAgICAgICAgICAgICAgIG1heSBiZSBzZWxlY3RpdmVseSBvdmVycmlkZGVuIHZpIHRoZSB0YWdfaW5mbworICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbi4KKyAgICAgUG9zc2libGUgVmFsdWVzOiAxIC0gMjUzCisgICAgICAgRGVmYXVsdCBWYWx1ZTogMzIKKyAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgICAgICAgIE9wdGlvbjogdGFnX2luZm86e3t2YWx1ZVssdmFsdWUuLi5dfVsse3ZhbHVlWyx2YWx1ZS4uLl19Li4uXX0KKyAgICAgICAgICBEZWZpbml0aW9uOiBTZXQgdGhlIHBlci10YXJnZXQgdGFnZ2VkIHF1ZXVlIGRlcHRoIG9uIGEKKyAgICAgICAgICAgICAgICAgICAgICBwZXIgY29udHJvbGxlciBiYXNpcy4gIEJvdGggY29udHJvbGxlcnMgYW5kIHRhcmdldHMKKyAgICAgICAgICAgICAgICAgICAgICBtYXkgYmUgb21taXR0ZWQgaW5kaWNhdGluZyB0aGF0IHRoZXkgc2hvdWxkIHJldGFpbgorICAgICAgICAgICAgICAgICAgICAgIHRoZSBkZWZhdWx0IHRhZyBkZXB0aC4KKyAgICAgICAgICAgIEV4YW1wbGVzOiB0YWdfaW5mbzp7ezE2LDMyLDMyLDY0LDgsOCwsMzIsMzIsMzIsMzIsMzIsMzIsMzIsMzIsMzJ9CisgICAgICAgICAgICAgICAgICAgICAgICBPbiBDb250cm9sbGVyIDAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgc3BlY2lmaWVzIGEgdGFnIGRlcHRoIG9mIDE2IGZvciB0YXJnZXQgMAorICAgICAgICAgICAgICAgICAgICAgICAgICBzcGVjaWZpZXMgYSB0YWcgZGVwdGggb2YgNjQgZm9yIHRhcmdldCAzCisgICAgICAgICAgICAgICAgICAgICAgICAgIHNwZWNpZmllcyBhIHRhZyBkZXB0aCBvZiA4IGZvciB0YXJnZXRzIDQgYW5kIDUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgbGVhdmVzIHRhcmdldCA2IGF0IHRoZSBkZWZhdWx0CisgICAgICAgICAgICAgICAgICAgICAgICAgIHNwZWNpZmllcyBhIHRhZyBkZXB0aCBvZiAzMiBmb3IgdGFyZ2V0cyAxLDIsNy0xNQorICAgICAgICAgICAgICAgICAgICAgICAgQWxsIG90aGVyIHRhcmdldHMgcmV0YWluIHRoZSBkZWZhdWx0IGRlcHRoLgorCisgICAgICAgICAgICAgICAgICAgICAgdGFnX2luZm86e3t9LHszMiwsMzJ9fQorICAgICAgICAgICAgICAgICAgICAgICAgT24gQ29udHJvbGxlciAxCisgICAgICAgICAgICAgICAgICAgICAgICAgIHNwZWNpZmllcyBhIHRhZyBkZXB0aCBvZiAzMiBmb3IgdGFyZ2V0cyAwIGFuZCAyCisgICAgICAgICAgICAgICAgICAgICAgICBBbGwgb3RoZXIgdGFyZ2V0cyByZXRhaW4gdGhlIGRlZmF1bHQgZGVwdGguCisgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgUG9zc2libGUgVmFsdWVzOiAxIC0gMjUzCisgICAgICAgRGVmYXVsdCBWYWx1ZTogMzIKKyAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgICAgICAgIE9wdGlvbjogc2VsdGltZTpbdmFsdWVdCisgICAgICAgICAgRGVmaW5pdGlvbjogU3BlY2lmaWVzIHRoZSBzZWxlY3Rpb24gdGltZW91dCB2YWx1ZQorICAgICBQb3NzaWJsZSBWYWx1ZXM6IDAgPSAyNTZtcywgMSA9IDEyOG1zLCAyID0gNjRtcywgMyA9IDMybXMKKyAgICAgICBEZWZhdWx0IFZhbHVlOiAwCisgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICAgICAgICBPcHRpb246IGR2OiB7dmFsdWVbLHZhbHVlLi4uXX0gCisgICAgICAgICAgRGVmaW5pdGlvbjogU2V0IERvbWFpbiBWYWxpZGF0aW9uIFBvbGljeSBvbiBhIHBlci1jb250cm9sbGVyIGJhc2lzLgorICAgICAgICAgICAgICAgICAgICAgIENvbnRyb2xsZXJzIG1heSBiZSBvbW1pdHRlZCBpbmRpY2F0aW5nIHRoYXQKKyAgICAgICAgICAgICAgICAgICAgICB0aGV5IHNob3VsZCByZXRhaW4gdGhlIGRlZmF1bHQgcmVhZCBzdHJlYW1pbmcgc2V0dGluZy4KKyAgICAgICAgICAgICBFeGFtcGxlOiBkdjp7LTEsMCwsMSwxLDB9CisgICAgICAgICAgICAgICAgICAgICAgICBPbiBDb250cm9sbGVyIDAgbGVhdmUgRFYgYXQgaXRzIGRlZmF1bHQgc2V0dGluZy4KKyAgICAgICAgICAgICAgICAgICAgICAgIE9uIENvbnRyb2xsZXIgMSBkaXNhYmxlIERWLgorICAgICAgICAgICAgICAgICAgICAgICAgU2tpcCBjb25maWd1cmF0aW9uIG9uIENvbnRyb2xsZXIgMi4KKyAgICAgICAgICAgICAgICAgICAgICAgIE9uIENvbnRyb2xsZXJzIDMgYW5kIDQgZW5hYmxlIERWLgorICAgICAgICAgICAgICAgICAgICAgICAgT24gQ29udHJvbGxlciA1IGRpc2FibGUgRFYuCisKKyAgICAgUG9zc2libGUgVmFsdWVzOiA8IDAgVXNlIHNldHRpbmcgZnJvbSBzZXJpYWwgRUVQUk9NLgorICAgICAgICAgICAgICAgICAgICAgIDAgRGlzYWJsZSBEVgorICAgICAgICAgICAgICAgICAgICAgID4gMCBFbmFibGUgRFYKKworICAgICAgIERlZmF1bHQgVmFsdWU6IFNDU0ktU2VsZWN0IHNldHRpbmcgb24gY29udHJvbGxlcnMgd2l0aCBhIFNDU0kgU2VsZWN0CisgICAgICAgICAgICAgICAgICAgICAgb3B0aW9uIGZvciBEVi4gIE90aGVyd2lzZSwgb24gZm9yIGNvbnRyb2xsZXJzIHN1cHBvcnRpbmcKKyAgICAgICAgICAgICAgICAgICAgICBVMTYwIHNwZWVkcyBhbmQgb2ZmIGZvciBhbGwgb3RoZXIgY29udHJvbGxlciB0eXBlcy4KKyAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgIEV4YW1wbGU6CisgICAnb3B0aW9ucyBhaWM3eHh4IGFpYzd4eHg9dmVyYm9zZSxub19wcm9iZSx0YWdfaW5mbzp7e30seywsMTB9fSxzZWx0aW1lOjEiCisgICAgICAgIGVuYWJsZXMgdmVyYm9zZSBsb2dnaW5nLCBEaXNhYmxlIEVJU0EvVkxCIHByb2JpbmcsCisgICAgICAgIGFuZCBzZXQgdGFnIGRlcHRoIG9uIENvbnRyb2xsZXIgMS9UYXJnZXQgMiB0byAxMCB0YWdzLgorCiszLiBDb250YWN0aW5nIEFkYXB0ZWMKKworICAgQSBUZWNobmljYWwgU3VwcG9ydCBJZGVudGlmaWNhdGlvbiAoVFNJRCkgTnVtYmVyIGlzIHJlcXVpcmVkIGZvciAKKyAgIEFkYXB0ZWMgdGVjaG5pY2FsIHN1cHBvcnQuCisgICAgLSBUaGUgMTItZGlnaXQgVFNJRCBjYW4gYmUgZm91bmQgb24gdGhlIHdoaXRlIGJhcmNvZGUtdHlwZSBsYWJlbAorICAgICAgaW5jbHVkZWQgaW5zaWRlIHRoZSBib3ggd2l0aCB5b3VyIHByb2R1Y3QuIFRoZSBUU0lEIGhlbHBzIHVzIAorICAgICAgcHJvdmlkZSBtb3JlIGVmZmljaWVudCBzZXJ2aWNlIGJ5IGFjY3VyYXRlbHkgaWRlbnRpZnlpbmcgeW91ciAKKyAgICAgIHByb2R1Y3QgYW5kIHN1cHBvcnQgc3RhdHVzLgorICAgU3VwcG9ydCBPcHRpb25zCisgICAgLSBTZWFyY2ggdGhlIEFkYXB0ZWMgU3VwcG9ydCBLbm93bGVkZ2ViYXNlIChBU0spIGF0CisgICAgICBodHRwOi8vYXNrLmFkYXB0ZWMuY29tIGZvciBhcnRpY2xlcywgdHJvdWJsZXNob290aW5nIHRpcHMsIGFuZAorICAgICAgZnJlcXVlbnRseSBhc2tlZCBxdWVzdGlvbnMgZm9yIHlvdXIgcHJvZHVjdC4KKyAgICAtIEZvciBzdXBwb3J0IHZpYSBFbWFpbCwgc3VibWl0IHlvdXIgcXVlc3Rpb24gdG8gQWRhcHRlYydzIAorICAgICAgVGVjaG5pY2FsIFN1cHBvcnQgU3BlY2lhbGlzdHMgYXQgaHR0cDovL2Fzay5hZGFwdGVjLmNvbS4KKyAgICAgCisgICBOb3J0aCBBbWVyaWNhCisgICAgLSBWaXNpdCBvdXIgV2ViIHNpdGUgYXQgaHR0cDovL3d3dy5hZGFwdGVjLmNvbS4KKyAgICAtIFRvIHNwZWFrIHdpdGggYSBGaWJyZSBDaGFubmVsL1JBSUQvRXh0ZXJuYWwgU3RvcmFnZSBUZWNobmljYWwKKyAgICAgIFN1cHBvcnQgU3BlY2lhbGlzdCwgY2FsbCAxLTMyMS0yMDctMjAwMCwKKyAgICAgIEhvdXJzOiBNb25kYXktRnJpZGF5LCAzOjAwIEEuTS4gdG8gNTowMCBQLk0uLCBQU1QuCisgICAgICAoTm90IG9wZW4gb24gaG9saWRheXMpCisgICAgLSBGb3IgVGVjaG5pY2FsIFN1cHBvcnQgaW4gYWxsIG90aGVyIHRlY2hub2xvZ2llcyBpbmNsdWRpbmcgCisgICAgICBTQ1NJLCBjYWxsIDEtNDA4LTkzNC03Mjc0LAorICAgICAgSG91cnM6IE1vbmRheS1GcmlkYXksIDY6MDAgQS5NLiB0byA1OjAwIFAuTS4sIFBTVC4KKyAgICAgIChOb3Qgb3BlbiBvbiBob2xpZGF5cykKKyAgICAtIEZvciBhZnRlciBob3VycyBzdXBwb3J0LCBjYWxsIDEtODAwLTQxNi04MDY2ICgkOTkvY2FsbCwgCisgICAgICAkMTQ5L2NhbGwgb24gaG9saWRheXMpCisgICAgLSBUbyBvcmRlciBBZGFwdGVjIHByb2R1Y3RzIGluY2x1ZGluZyBzb2Z0d2FyZSBhbmQgY2FibGVzLCBjYWxsCisgICAgICAxLTgwMC00NDItNzI3NCBvciAxLTQwOC05NTctNzI3NC4gWW91IGNhbiBhbHNvIHZpc2l0IG91ciAKKyAgICAgIG9ubGluZSBzdG9yZSBhdCBodHRwOi8vd3d3LmFkYXB0ZWNzdG9yZS5jb20KKworICAgRXVyb3BlCisgICAgLSBWaXNpdCBvdXIgV2ViIHNpdGUgYXQgaHR0cDovL3d3dy5hZGFwdGVjLWV1cm9wZS5jb20uCisgICAgLSBFbmdsaXNoIGFuZCBGcmVuY2g6IFRvIHNwZWFrIHdpdGggYSBUZWNobmljYWwgU3VwcG9ydCAKKyAgICAgIFNwZWNpYWxpc3QsIGNhbGwgb25lIG9mIHRoZSBmb2xsb3dpbmcgbnVtYmVyczoKKyAgICAgICAgLSBFbmdsaXNoOiArMzItMi0zNTItMzQ3MAorICAgICAgICAtIEZyZW5jaDogICszMi0yLTM1Mi0zNDYwCisgICAgICBIb3VyczogTW9uZGF5LVRodXJzZGF5LCAxMDowMCB0byAxMjozMCwgMTM6MzAgdG8gMTc6MzAgQ0VUIAorICAgICAgICAgICAgIEZyaWRheSwgMTA6MDAgdG8gMTI6MzAsIDEzOjMwIHRvIDE2OjMwIENFVAorICAgIC0gR2VybWFuOiBUbyBzcGVhayB3aXRoIGEgVGVjaG5pY2FsIFN1cHBvcnQgU3BlY2lhbGlzdCwKKyAgICAgIGNhbGwgKzQ5LTg5LTQ1Ni00MDY2MAorICAgICAgSG91cnM6IE1vbmRheS1UaHVyc2RheSwgMDk6MzAgdG8gMTI6MzAsIDEzOjMwIHRvIDE2OjMwIENFVAorICAgICAgICAgICAgIEZyaWRheSwgMDk6MzAgdG8gMTI6MzAsIDEzOjMwIHRvIDE1OjAwIENFVAorICAgIC0gVG8gb3JkZXIgQWRhcHRlYyBwcm9kdWN0cywgaW5jbHVkaW5nIGFjY2Vzc29yaWVzIGFuZCBjYWJsZXM6CisgICAgICAgIC0gVUs6ICswODAwLTk2LTY1LTI2IG9yIGZheCArMDgwMC03MzEtMDItOTUKKyAgICAgICAgLSBPdGhlciBFdXJvcGVhbiBjb3VudHJpZXM6ICszMi0xMS0zMDAtMzc5CisKKyAgIEF1c3RyYWxpYSBhbmQgTmV3IFplYWxhbmQKKyAgICAtIFZpc2l0IG91ciBXZWIgc2l0ZSBhdCBodHRwOi8vd3d3LmFkYXB0ZWMuY29tLmF1LgorICAgIC0gVG8gc3BlYWsgd2l0aCBhIFRlY2huaWNhbCBTdXBwb3J0IFNwZWNpYWxpc3QsIGNhbGwgCisgICAgICArNjEyLTk0MTYtMDY5OAorICAgICAgSG91cnM6IE1vbmRheS1GcmlkYXksIDEwOjAwIEEuTS4gdG8gNDozMCBQLk0uLCBFQVQKKyAgICAgIChOb3Qgb3BlbiBvbiBob2xpZGF5cykKKworICAgSmFwYW4KKyAgICAtIFRvIHNwZWFrIHdpdGggYSBUZWNobmljYWwgU3VwcG9ydCBTcGVjaWFsaXN0LCBjYWxsIAorICAgICAgKzgxLTMtNTMwOC02MTIwIAorICAgICAgSG91cnM6IE1vbmRheS1GcmlkYXksIDk6MDAgYS5tLiB0byAxMjowMCBwLm0uLCAxOjAwIHAubS4gdG8KKyAgICAgIDY6MDAgcC5tLiBUU0MKKworICAgSG9uZyBLb25nIGFuZCBDaGluYQorICAgIC0gVG8gc3BlYWsgd2l0aCBhIFRlY2huaWNhbCBTdXBwb3J0IFNwZWNpYWxpc3QsIGNhbGwgCisgICAgICArODUyLTI4NjktNzIwMAorICAgICAgSG91cnM6IE1vbmRheS1GcmlkYXksIDEwOjAwIHRvIDE3OjAwLgorICAgIC0gRmF4IFRlY2huaWNhbCBTdXBwb3J0IGF0ICs4NTItMjg2OS03MTAwLgorCisgICBTaW5nYXBvcmUKKyAgICAtIFRvIHNwZWFrIHdpdGggYSBUZWNobmljYWwgU3VwcG9ydCBTcGVjaWFsaXN0LCBjYWxsIAorICAgICAgKzY1LTI0NS03NDcwCisgICAgICBIb3VyczogTW9uZGF5LUZyaWRheSwgMTA6MDAgdG8gMTc6MDAuCisgICAgLSBGYXggVGVjaG5pY2FsIFN1cHBvcnQgYXQgKzg1Mi0yODY5LTcxMDAKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwMyBBZGFwdGVjIEluYy4gNjkxIFMuIE1pbHBpdGFzIEJsdmQuLCBNaWxwaXRhcyBDQSA5NTAzNSBVU0EuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFlvdSBhcmUgcGVybWl0dGVkIHRvIHJlZGlzdHJpYnV0ZSwgdXNlIGFuZCBtb2RpZnkgdGhpcyBSRUFETUUgZmlsZSBpbiB3aG9sZQorICogb3IgaW4gcGFydCBpbiBjb25qdW5jdGlvbiB3aXRoIHJlZGlzdHJpYnV0aW9uIG9mIHNvZnR3YXJlIGdvdmVybmVkIGJ5IHRoZQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBSRUFETUUgZmlsZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zLCBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLAorICogICAgd2l0aG91dCBtb2RpZmljYXRpb24uCisgKiAyLiBUaGUgbmFtZSBvZiB0aGUgYXV0aG9yIG1heSBub3QgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAqICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICogMy4gTW9kaWZpY2F0aW9ucyBvciBuZXcgY29udHJpYnV0aW9ucyBtdXN0IGJlIGF0dHJpYnV0ZWQgaW4gYSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSBpZGVudGlmeWluZyB0aGUgYXV0aG9yICgiQ29udHJpYnV0b3IiKSBhbmQgYWRkZWQgYmVsb3cgdGhlCisgKiAgICBvcmlnaW5hbCBjb3B5cmlnaHQgbm90aWNlLiBUaGUgY29weXJpZ2h0IG5vdGljZSBpcyBmb3IgcHVycG9zZXMgb2YKKyAqICAgIGlkZW50aWZ5aW5nIGNvbnRyaWJ1dG9ycyBhbmQgc2hvdWxkIG5vdCBiZSBkZWVtZWQgYXMgcGVybWlzc2lvbiB0byBhbHRlcgorICogICAgdGhlIHBlcm1pc3Npb25zIGdpdmVuIGJ5IEFkYXB0ZWMuCisgKgorICogVEhJUyBSRUFETUUgRklMRSBJUyBQUk9WSURFRCBCWSBBREFQVEVDIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgQU5ZCisgKiBXQVJSQU5USUVTIE9GIE5PTi1JTkZSSU5HRU1FTlQgT1IgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkKKyAqIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwKKyAqIEFEQVBURUMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQKKyAqIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YKKyAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HCisgKiBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgUkVBRE1FCisgKiBGSUxFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3Njc2kvYWljN3h4eF9vbGQudHh0IGIvRG9jdW1lbnRhdGlvbi9zY3NpL2FpYzd4eHhfb2xkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43OWU1YWM2Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9zY3NpL2FpYzd4eHhfb2xkLnR4dApAQCAtMCwwICsxLDUxMSBAQAorCQkJICAgIEFJQzd4eHggRHJpdmVyIGZvciBMaW51eAorCitJbnRyb2R1Y3Rpb24KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK1RoZSBBSUM3eHh4IFNDU0kgZHJpdmVyIGFkZHMgc3VwcG9ydCBmb3IgQWRhcHRlYyAoaHR0cDovL3d3dy5hZGFwdGVjLmNvbSkKK1NDU0kgY29udHJvbGxlcnMgYW5kIGNoaXBzZXRzLiBNYWpvciBwb3J0aW9ucyBvZiB0aGUgZHJpdmVyIGFuZCBkcml2ZXIKK2RldmVsb3BtZW50IGFyZSBzaGFyZWQgYmV0d2VlbiBib3RoIExpbnV4IGFuZCBGcmVlQlNELiBTdXBwb3J0IGZvciB0aGUKK0FJQy03eHh4IGNoaXBzZXRzIGhhdmUgYmVlbiBpbiB0aGUgZGVmYXVsdCBMaW51eCBrZXJuZWwgc2luY2UgYXBwcm94aW1hdGVseQorbGludXgtMS4xLnggYW5kIGZhaXJseSBzdGFibGUgc2luY2UgbGludXgtMS4yLngsIGFuZCBhcmUgYWxzbyBpbiBGcmVlQlNECisyLjEuMCBvciBsYXRlci4KKworICBTdXBwb3J0ZWQgY2FyZHMvY2hpcHNldHMKKyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIEFkYXB0ZWMgQ2FyZHMKKyAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgQUhBLTI3NHgKKyAgICBBSEEtMjc0eFQgICAgICAgICAgICAgICAKKyAgICBBSEEtMjg0MgorICAgIEFIQS0yOTEwQiAgICAgICAgICAgICAgIAorICAgIEFIQS0yOTIwQworICAgIEFIQS0yOTMwCisgICAgQUhBLTI5MzBVCisgICAgQUhBLTI5MzBDVQorICAgIEFIQS0yOTMwVTIKKyAgICBBSEEtMjk0MCAgICAgICAgICAgICAgIAorICAgIEFIQS0yOTQwVyAgICAgICAgICAgICAgCisgICAgQUhBLTI5NDBVICAgICAgICAgICAgICAKKyAgICBBSEEtMjk0MFVXCisgICAgQUhBLTI5NDBVVy1QUk8KKyAgICBBSEEtMjk0MEFVIAorICAgIEFIQS0yOTQwVTJXCisgICAgQUhBLTI5NDBVMgorICAgIEFIQS0yOTQwVTJCCisgICAgQUhBLTI5NDBVMkJPRU0KKyAgICBBSEEtMjk0NEQgICAgICAgICAgICAgIAorICAgIEFIQS0yOTQ0V0QKKyAgICBBSEEtMjk0NFVECisgICAgQUhBLTI5NDRVV0QKKyAgICBBSEEtMjk1MFUyCisgICAgQUhBLTI5NTBVMlcKKyAgICBBSEEtMjk1MFUyQgorICAgIEFIQS0yOTE2ME0KKyAgICBBSEEtMzk0MAorICAgIEFIQS0zOTQwVQorICAgIEFIQS0zOTQwVworICAgIEFIQS0zOTQwVVcKKyAgICBBSEEtMzk0MEFVVworICAgIEFIQS0zOTQwVTJXCisgICAgQUhBLTM5NTBVMkIKKyAgICBBSEEtMzk1MFUyRAorICAgIEFIQS0zOTYwRAorICAgIEFIQS0zOTE2ME0KKyAgICBBSEEtMzk4NQorICAgIEFIQS0zOTg1VQorICAgIEFIQS0zOTg1VworICAgIEFIQS0zOTg1VVcKKworICAgIE1vdGhlcmJvYXJkIENoaXBzZXRzCisgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIEFJQy03Nzd4ICAgCisgICAgQUlDLTc4NXgKKyAgICBBSUMtNzg2eAorICAgIEFJQy03ODd4CisgICAgQUlDLTc4OHgKKyAgICBBSUMtNzg5eAorICAgIEFJQy0zODYwCisKKyAgICBCdXMgVHlwZXMKKyAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgVyAtIFdpZGUgU0NTSSwgU0NTSS0zLCAxNmJpdCBidXMsIDY4cGluIGNvbm5lY3Rvciwgd2lsbCBhbHNvIHN1cHBvcnQKKyAgICAgICAgU0NTSS0xL1NDU0ktMiA1MHBpbiBkZXZpY2VzLCB0cmFuc2ZlciByYXRlcyB1cCB0byAyME1CL3MuCisgICAgVSAtIFVsdHJhIFNDU0ksIHRyYW5zZmVyIHJhdGVzIHVwIHRvIDQwTUIvcy4KKyAgICBVMi0gVWx0cmEgMiBTQ1NJLCB0cmFuc2ZlciByYXRlcyB1cCB0byA4ME1CL3MuCisgICAgRCAtIERpZmZlcmVudGlhbCBTQ1NJLgorICAgIFQgLSBUd2luIENoYW5uZWwgU0NTSS4gVXAgdG8gMTQgU0NTSSBkZXZpY2VzLgorCisgICAgQUhBLTI3NHggLSBFSVNBIFNDU0kgY29udHJvbGxlcgorICAgIEFIQS0yODR4IC0gVkxCIFNDU0kgY29udHJvbGxlcgorICAgIEFIQS0yOXh4IC0gUENJIFNDU0kgY29udHJvbGxlcgorICAgIEFIQS0zOTR4IC0gUENJIGNvbnRyb2xsZXJzIHdpdGggdHdvIHNlcGFyYXRlIFNDU0kgY29udHJvbGxlcnMgb24tYm9hcmQuCisgICAgQUhBLTM5OHggLSBQQ0kgUkFJRCBjb250cm9sbGVycyB3aXRoIHRocmVlIHNlcGFyYXRlIFNDU0kgY29udHJvbGxlcnMKKyAgICAgICAgICAgICAgIG9uLWJvYXJkLgorCisgIE5vdCBTdXBwb3J0ZWQgRGV2aWNlcworICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICBBZGFwdGVjIENhcmRzCisgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIEFIQS0yOTIwIChPbmx5IHRoZSBjYXJkcyB0aGF0IHVzZSB0aGUgRnV0dXJlIERvbWFpbiBjaGlwc2V0IGFyZSBub3QKKyAgICAgICAgICAgICAgc3VwcG9ydGVkLCBhbnkgMjkyMCBjYXJkcyBiYXNlZCBvbiBBZGFwdGVjIEFJQyBjaGlwc2V0cywKKwkgICAgICBzdWNoIGFzIHRoZSAyOTIwQywgYXJlIHN1cHBvcnRlZCkKKyAgICBBQUEtMTN4IFJhaWQgQWRhcHRlcnMKKyAgICBBQUEtMTEzeCBSYWlkIFBvcnQgQ2FyZAorCisgICAgTW90aGVyYm9hcmQgQ2hpcHNldHMKKyAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgQUlDLTc4MTAKKworICAgIEJ1cyBUeXBlcworICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICBSIC0gUmFpZCBQb3J0IGJ1c3NlcyBhcmUgbm90IHN1cHBvcnRlZC4KKworICAgIFRoZSBoYXJkd2FyZSBSQUlEIGRldmljZXMgc29sZCBieSBBZGFwdGVjIGFyZSAqTk9UKiBzdXBwb3J0ZWQgYnkgdGhpcworICAgIGRyaXZlciAoYW5kIHdpbGwgcGVvcGxlIHBsZWFzZSBzdG9wIGVtYWlsaW5nIG1lIGFib3V0IHRoZW0sIHRoZXkgYXJlCisgICAgYSB0b3RhbGx5IHNlcGFyYXRlIGJlYXN0IGZyb20gdGhlIGJhcmUgU0NTSSBjb250cm9sbGVycyBhbmQgdGhpcyBkcml2ZXIKKyAgICBjYW4gbm90IGJlIHJldHJvZml0dGVkIGluIGFueSBzYW5lIG1hbm5lciB0byBzdXBwb3J0IHRoZSBoYXJkd2FyZSBSQUlECisgICAgZmVhdHVyZXMgb24gdGhvc2UgY2FyZHMgLSBEb3VnIExlZGZvcmQpLgorICAgIAorCisgIFBlb3BsZQorICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICBKdXN0aW4gVCBHaWJicyAgZ2liYnNAcGx1dG90ZWNoLmNvbQorICAgICAgKEJTRCBEcml2ZXIgQXV0aG9yKQorICAgIERhbiBFaXNjaGVuICAgICBkZWlzY2hlbkBpd29ya3MuSW50ZXJXb3Jrcy5vcmcKKyAgICAgIChPcmlnaW5hbCBMaW51eCBEcml2ZXIgQ28tbWFpbnRhaW5lcikKKyAgICBEZWFuIEdlaG5lcnQgICAgZGVhbmdAdGVsZXBvcnQuY29tCisgICAgICAoT3JpZ2luYWwgTGludXggRlRQL3BhdGNoIG1haW50YWluZXIpCisgICAgSmVzcyBKb2huc29uICAgIGplc3RlckBmcmVuenkuY29tCisgICAgICAoQUlDN3h4eCBGQVEgYXV0aG9yKQorICAgIERvdWcgTGVkZm9yZCAgICBkbGVkZm9yZEByZWRoYXQuY29tCisgICAgICAoQ3VycmVudCBMaW51eCBhaWM3eHh4LTUueC54IERyaXZlci9QYXRjaC9GVFAgbWFpbnRhaW5lcikKKyAgICAKKyAgICBTcGVjaWFsIHRoYW5rcyBnbyB0byBKb2huIEF5Y29jayAoYXljb2NrQGNwc2MudWNhbGdhcnkuY2EpLCB0aGUgb3JpZ2luYWwKKyAgICBhdXRob3Igb2YgdGhlIGRyaXZlci4gSm9obiBoYXMgc2luY2UgcmV0aXJlZCBmcm9tIHRoZSBwcm9qZWN0LiBUaGFua3MKKyAgICBhZ2FpbiBmb3IgYWxsIGhpcyB3b3JrIQorICAgIAorICBNYWlsaW5nIGxpc3QKKyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgVGhlcmUgaXMgYSBtYWlsaW5nIGxpc3QgYXZhaWxhYmxlIGZvciB1c2VycyB3aG8gd2FudCB0byB0cmFjayBkZXZlbG9wbWVudAorICAgIGFuZCBjb252ZXJzZSB3aXRoIG90aGVyIHVzZXJzIGFuZCBkZXZlbG9wZXJzLiBUaGlzIGxpc3QgaXMgZm9yIGJvdGgKKyAgICBGcmVlQlNEIGFuZCBMaW51eCBzdXBwb3J0IG9mIHRoZSBBSUM3eHh4IGNoaXBzZXRzLgorCisgICAgVG8gc3Vic2NyaWJlIHRvIHRoZSBBSUM3eHh4IG1haWxpbmcgbGlzdCBzZW5kIG1haWwgdG8gdGhlIGxpc3Qgc2VydmVyLAorICAgIHdpdGggInN1YnNjcmliZSBBSUM3eHh4IiBpbiB0aGUgYm9keSAobm8gU3ViamVjdDogcmVxdWlyZWQpOgorICAgICAgICBUbzogbWFqb3Jkb21vQEZyZWVCU0QuT1JHCisgICAgICAgIC0tLQorICAgICAgICBzdWJzY3JpYmUgQUlDN3h4eAorCisgICAgVG8gdW5zdWJzY3JpYmUgZnJvbSB0aGUgbGlzdCwgc2VuZCBtYWlsIHRvIHRoZSBsaXN0IHNlcnZlciB3aXRoOgorICAgICAgICBUbzogbWFqb3Jkb21vQEZyZWVCU0QuT1JHCisgICAgICAgIC0tLQorICAgICAgICB1bnN1YnNjcmliZSBBSUM3eHh4CisKKyAgICBTZW5kIHJlZ3VsYXIgbWVzc2FnZXMgYW5kIHJlcGxpZXMgdG86IEFJQzd4eHhARnJlZUJTRC5PUkcKKyAgICAKKyAgQm9vdCBDb21tYW5kIGxpbmUgb3B0aW9ucworICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAiYWljN3h4eD1ub19yZXNldCIgLSAgRWxpbWluYXRlIHRoZSBTQ1NJIGJ1cyByZXNldCBkdXJpbmcgc3RhcnR1cC4KKyAgICAgICAgU29tZSBTQ1NJIGRldmljZXMgbmVlZCB0aGUgaW5pdGlhbCByZXNldCB0aGF0IHRoaXMgb3B0aW9uIGRpc2FibGVzCisJaW4gb3JkZXIgdG8gd29yay4gIElmIHlvdSBoYXZlIHByb2JsZW1zIGF0IGJvb3R1cCwgcGxlYXNlIG1ha2Ugc3VyZQorCXlvdSBhcmVuJ3QgdXNpbmcgdGhpcyBvcHRpb24uCisJCisgICAgImFpYzd4eHg9cmV2ZXJzZV9zY2FuIiAtIENlcnRhaW4gUENJIG1vdGhlcmJvYXJkcyBzY2FuIGZvciBkZXZpY2VzIGF0CisgICAgICAgIGJvb3R1cCBieSBzY2FubmluZyBmcm9tIHRoZSBoaWdoZXN0IG51bWJlcmVkIFBDSSBkZXZpY2UgdG8gdGhlCisJbG93ZXN0IG51bWJlcmVkIFBDSSBkZXZpY2UsIG90aGVycyBkbyBqdXN0IHRoZSBvcHBvc2l0ZSBhbmQgc2NhbgorCWZyb20gbG93ZXN0IHRvIGhpZ2hlc3QgbnVtYmVyZWQgUENJIGRldmljZS4gIFRoZXJlIGlzIG5vIHJlbGlhYmxlCisJd2F5IHRvIGF1dG9kZXRlY3QgdGhpcyBvcmRlcmluZy4gIFNvLCB3ZSBkZWZhdWx0IHRvIHRoZSBtb3N0IGNvbW1vbgorCW9yZGVyLCB3aGljaCBpcyBsb3dlc3QgdG8gaGlnaGVzdC4gIFRoZW4sIGluIGNhc2UgeW91ciBtb3RoZXJib2FyZAorCXNjYW5zIGZyb20gaGlnaGVzdCB0byBsb3dlc3QsIHdlIGhhdmUgdGhpcyBvcHRpb24uICBJZiB5b3VyIEJJT1MKKwlmaW5kcyB0aGUgZHJpdmVzIG9uIGNvbnRyb2xsZXIgQSBiZWZvcmUgY29udHJvbGxlciBCIGJ1dCB0aGUgbGludXgKKwlrZXJuZWwgZmluZHMgeW91ciBkcml2ZXMgb24gY29udHJvbGxlciBCIGJlZm9yZSBBLCB0aGVuIHlvdSBzaG91bGQKKwl1c2UgdGhpcyBvcHRpb24uCisJCisgICAgImFpYzd4eHg9ZXh0ZW5kZWQiIC0gRm9yY2UgdGhlIGRyaXZlciB0byBkZXRlY3QgZXh0ZW5kZWQgZHJpdmUgdHJhbnNsYXRpb24KKyAgICAgICAgb24geW91ciBjb250cm9sbGVyLiAgVGhpcyBoZWxwcyB0aG9zZSBwZW9wbGUgd2hvIGhhdmUgY2FyZHMgd2l0aG91dAorICAgICAgICBhIFNFRVBST00gbWFrZSBzdXJlIHRoYXQgbGludXggYW5kIGFsbCBvdGhlciBvcGVyYXRpbmcgc3lzdGVtcyB0aGluaworICAgICAgICB0aGUgc2FtZSB3YXkgYWJvdXQgeW91ciBoYXJkIGRyaXZlcy4KKworICAgICJhaWM3eHh4PXNjYnJhbSIgLSBTb21lIGNhcmRzIGhhdmUgZXh0ZXJuYWwgU0NCIFJBTSB0aGF0IGNhbiBiZSB1c2VkIHRvCisgICAgICAgIGdpdmUgdGhlIGNhcmQgbW9yZSBoYXJkd2FyZSBTQ0Igc2xvdHMuICBUaGlzIGFsbG93cyB0aGUgZHJpdmVyIHRvIHVzZQorCXRoYXQgU0NCIFJBTS4gIFdpdGhvdXQgdGhpcyBvcHRpb24sIHRoZSBkcml2ZXIgd29uJ3QgdG91Y2ggdGhlIFNDQgorCVJBTSBiZWNhdXNlIGl0IGlzIGtub3duIHRvIGNhdXNlIHByb2JsZW1zIG9uIGEgZmV3IGNhcmRzIG91dCB0aGVyZQorCShzdWNoIGFzIDM5ODUgY2xhc3MgY2FyZHMpLgorCQorICAgICJhaWM3eHh4PWlycV90cmlnZ2VyOngiIC0gUmVwbGFjZSB4IHdpdGggZWl0aGVyIDAgb3IgMSB0byBmb3JjZSB0aGUga2VybmVsCisgICAgICAgIHRvIHVzZSB0aGUgY29ycmVjdCBJUlEgdHlwZSBmb3IgeW91ciBjYXJkLiAgVGhpcyBvbmx5IGFwcGxpZXMgdG8gRUlTQQorICAgICAgICBiYXNlZCBjb250cm9sbGVycy4gIE9uIHRoZXNlIGNvbnRyb2xsZXJzLCAwIGlzIGZvciBFZGdlIHRyaWdnZXJlZAorICAgICAgICBpbnRlcnJ1cHRzLCBhbmQgMSBpcyBmb3IgTGV2ZWwgdHJpZ2dlcmVkIGludGVycnVwdHMuICBJZiB5b3UgYXJlbid0CisgICAgICAgIHN1cmUgb3IgZG9uJ3Qga25vdyB3aGljaCBJUlEgdHJpZ2dlciB0eXBlIHlvdXIgRUlTQSBjYXJkIHVzZXMsIHRoZW4KKyAgICAgICAgbGV0IHRoZSBrZXJuZWwgYXV0b2RldGVjdCB0aGUgdHJpZ2dlciB0eXBlLgorCQorICAgICJhaWM3eHh4PXZlcmJvc2UiIC0gVGhpcyBvcHRpb24gY2FuIGJlIHVzZWQgaW4gb25lIG9mIHR3byB3YXlzLiAgSWYgeW91CisgICAgICAgIHNpbXBseSBzcGVjaWZ5IGFpYzd4eHg9dmVyYm9zZSwgdGhlbiB0aGUga2VybmVsIHdpbGwgYXV0b21hdGljYWxseQorCXBpY2sgdGhlIGRlZmF1bHQgc2V0IG9mIHZlcmJvc2UgbWVzc2FnZXMgZm9yIHlvdSB0byBzZWUuCisJQWx0ZXJuYXRpdmVseSwgeW91IGNhbiBzcGVjaWZ5IHRoZSBjb21tYW5kIGFzIAorCSJhaWM3eHh4PXZlcmJvc2U6MHhYWFhYIiB3aGVyZSB0aGUgWCBlbnRyaWVzIGFyZSByZXBsYWNlZCB3aXRoCisJaGV4YWRlY2ltYWwgZGlnaXRzLiAgVGhpcyBvcHRpb24gaXMgYSBiaXQgZmllbGQgdHlwZSBvcHRpb24uICBGb3IKKwlhIGZ1bGwgbGlzdGluZyBvZiB0aGUgYXZhaWxhYmxlIG9wdGlvbnMsIHNlYXJjaCBmb3IgdGhlIAorCSNkZWZpbmUgVkVSQk9TRV94eHh4eHggbGluZXMgaW4gdGhlIGFpYzd4eHguYyBmaWxlLiAgSWYgeW91IHdhbnQKKwl2ZXJib3NlIG1lc3NhZ2VzLCB0aGVuIGl0IGlzIHJlY29tbWVuZGVkIHRoYXQgeW91IHNpbXBseSB1c2UgdGhlCisJYWljN3h4eD12ZXJib3NlIHZhcmlhbnQgb2YgdGhpcyBjb21tYW5kLgorCQorICAgICJhaWM3eHh4PXBjaV9wYXJpdHk6eCIgLSBUaGlzIG9wdGlvbiBjb250cm9scyB3aGV0aGVyIG9yIG5vdCB0aGUgZHJpdmVyCisgICAgICAgIGVuYWJsZXMgUENJIHBhcml0eSBlcnJvciBjaGVja2luZyBvbiB0aGUgUENJIGJ1cy4gIEJ5IGRlZmF1bHQsIHRoaXMKKyAgICAgICAgY2hlY2tpbmcgaXMgZGlzYWJsZWQuICBUbyBlbmFibGUgdGhlIGNoZWNrcywgc2ltcGx5IHNwZWNpZnkgcGNpX3Bhcml0eQorICAgICAgICB3aXRoIG5vIHZhbHVlIGFmdGVyd29yZHMuICBUbyByZXZlcnNlIHRoZSBwYXJpdHkgZnJvbSBldmVuIHRvIG9kZCwKKyAgICAgICAgc3VwcGx5IGFueSBudW1iZXIgb3RoZXIgdGhhbiAwIG9yIDI1NS4gIEluIHNob3J0OgorICAgICAgICAgIHBjaV9wYXJpdHkgICAgIC0gRXZlbiBwYXJpdHkgY2hlY2tpbmcgKGV2ZW4gaXMgdGhlIG5vcm1hbCBQQ0kgcGFyaXR5KQorICAgICAgICAgIHBjaV9wYXJpdHk6eCAgIC0gV2hlcmUgeCA+IDAsIE9kZCBwYXJpdHkgY2hlY2tpbmcKKyAgICAgICAgICBwY2lfcGFyaXR5OjAgICAtIE5vIGNoZWNrIChkZWZhdWx0KQorICAgICAgICBOT1RFOiBJbiBvcmRlciB0byBnZXQgRXZlbiBQQ0kgcGFyaXR5IGNoZWNraW5nLCB5b3UgbXVzdCB1c2UgdGhlCisgICAgICAgIHZlcnNpb24gb2YgdGhlIG9wdGlvbiB0aGF0IGRvZXMgbm90IGluY2x1ZGUgdGhlIDogYW5kIGEgbnVtYmVyIGF0CisgICAgICAgIHRoZSBlbmQgKHVubGVzcyB5b3Ugd2FudCB0byBlbnRlciBleGFjdGx5IDJeMzIgLSAxIGFzIHRoZSBudW1iZXIpLgorCQorICAgICJhaWM3eHh4PW5vX3Byb2JlIiAtIFRoaXMgb3B0aW9uIHdpbGwgZGlzYWJsZSB0aGUgcHJvYmluZyBmb3IgYW55IFZMQgorICAgICAgICBiYXNlZCAyODQyIGNvbnRyb2xsZXJzIGFuZCBhbnkgRUlTQSBiYXNlZCBjb250cm9sbGVycy4gIFRoaXMgaXMKKwluZWVkZWQgb24gY2VydGFpbiBuZXdlciBtb3RoZXJib2FyZHMgd2hlcmUgdGhlIG5vcm1hbCBFSVNBIEkvTyByYW5nZXMKKwloYXZlIGJlZW4gY2xhaW1lZCBieSBvdGhlciBQQ0kgZGV2aWNlcy4gIFByb2Jpbmcgb24gdGhvc2UgbWFjaGluZXMKKwl3aWxsIG9mdGVuIHJlc3VsdCBpbiB0aGUgbWFjaGluZSBjcmFzaGluZyBvciBzcG9udGFuZW91c2x5IHJlYm9vdGluZworCWR1cmluZyBzdGFydHVwLiAgRXhhbXBsZXMgb2YgbWFjaGluZXMgdGhhdCBuZWVkIHRoaXMgYXJlIHRoZQorCURlbGwgUG93ZXJFZGdlIDYzMDAgbWFjaGluZXMuCisKKyAgICAiYWljN3h4eD1zZWx0aW1lOjIiIC0gVGhpcyBvcHRpb24gY29udHJvbHMgaG93IGxvbmcgdGhlIGNhcmQgd2FpdHMKKyAgICAgICAgZHVyaW5nIGEgZGV2aWNlIHNlbGVjdGlvbiBzZXF1ZW5jZSBmb3IgdGhlIGRldmljZSB0byByZXNwb25kLgorCVRoZSBvcmlnaW5hbCBTQ1NJIHNwZWMgc2F5cyB0aGF0IHRoaXMgInNob3VsZCBiZSIgMjU2bXMuICBUaGlzCisJaXMgZ2VuZXJhbGx5IG5vdCByZXF1aXJlZCB3aXRoIG1vZGVybiBkZXZpY2VzLiAgSG93ZXZlciwgc29tZQorCXZlcnkgb2xkIFNDU0kgSSBkZXZpY2VzIG5lZWQgdGhlIGZ1bGwgMjU2bXMuICBNb3N0IG1vZGVybiBkZXZpY2VzCisJY2FuIHJ1biBmaW5lIHdpdGggb25seSA2NG1zLiAgVGhlIGRlZmF1bHQgZm9yIHRoaXMgb3B0aW9uIGlzCisJNjRtcy4gIElmIHlvdSBuZWVkIHRvIGNoYW5nZSB0aGlzIG9wdGlvbiwgdGhlbiB1c2UgdGhlIGZvbGxvd2luZworCXRhYmxlIHRvIHNldCB0aGUgcHJvcGVyIHZhbHVlIGluIHRoZSBleGFtcGxlIGFib3ZlOgorCSAgMCAgLSAgMjU2bXMKKwkgIDEgIC0gIDEyOG1zCisJICAyICAtICAgNjRtcworCSAgMyAgLSAgIDMybXMKKwkKKyAgICAiYWljN3h4eD1wYW5pY19vbl9hYm9ydCIgLSBUaGlzIG9wdGlvbiBpcyBmb3IgZGVidWdnaW5nIGFuZCB3aWxsIGNhdXNlCisgICAgICAgIHRoZSBkcml2ZXIgdG8gcGFuaWMgdGhlIGxpbnV4IGtlcm5lbCBhbmQgZnJlZXplIHRoZSBzeXN0ZW0gdGhlIGZpcnN0CisJdGltZSB0aGUgZHJpdmVycyBhYm9ydCBvciByZXNldCByb3V0aW5lcyBhcmUgY2FsbGVkLiAgVGhpcyBpcyBtb3N0CisJaGVscGZ1bCB3aGVuIHNvbWUgcHJvYmxlbSBjYXVzZXMgaW5maW5pdGUgcmVzZXQgbG9vcHMgdGhhdCBzY3JvbGwgdG9vCisJZmFzdCB0byBzZWUuICBCeSB1c2luZyB0aGlzIG9wdGlvbiwgeW91IGNhbiB3cml0ZSBkb3duIHdoYXQgdGhlIGVycm9ycworCWFjdHVhbGx5IGFyZSBhbmQgc2VuZCB0aGF0IGluZm9ybWF0aW9uIHRvIG1lIHNvIGl0IGNhbiBiZSBmaXhlZC4KKwkKKyAgICAiYWljN3h4eD1kdW1wX2NhcmQiIC0gVGhpcyBvcHRpb24gd2lsbCBwcmludCBvdXQgdGhlICplbnRpcmUqIHNldCBvZgorICAgICAgICBjb25maWd1cmF0aW9uIHJlZ2lzdGVycyBvbiB0aGUgY2FyZCBkdXJpbmcgdGhlIGluaXQgc2VxdWVuY2UuICBUaGlzCisJaXMgYSBkZWJ1Z2dpbmcgYWlkIHVzZWQgdG8gc2VlIGV4YWN0bHkgd2hhdCBzdGF0ZSB0aGUgY2FyZCBpcyBpbgorCXdoZW4gd2UgZmluYWxseSBmaW5pc2ggb3VyIGluaXRpYWxpemF0aW9uIHJvdXRpbmVzLiAgSWYgeW91IGRvbid0CisJaGF2ZSBkb2N1bWVudGF0aW9uIG9uIHRoZSBjaGlwc2V0cywgdGhpcyB3aWxsIGRvIHlvdSBhYnNvbHV0ZWx5CisJbm8gZ29vZCB1bmxlc3MgeW91IGFyZSBzaW1wbHkgdHJ5aW5nIHRvIHdyaXRlIGFsbCB0aGUgaW5mb3JtYXRpb24KKwlkb3duIGluIG9yZGVyIHRvIHNlbmQgaXQgdG8gbWUuCisJCisgICAgImFpYzd4eHg9ZHVtcF9zZXF1ZW5jZXIiIC0gVGhpcyBpcyB0aGUgc2FtZSBhcyB0aGUgYWJvdmUgb3B0aW9ucyBleGNlcHQKKyAgICAgICAgdGhhdCBpbnN0ZWFkIG9mIGR1bXBpbmcgdGhlIHJlZ2lzdGVyIGNvbnRlbnRzIG9uIHRoZSBjYXJkLCB0aGlzCisJb3B0aW9uIGR1bXBzIHRoZSBjb250ZW50cyBvZiB0aGUgc2VxdWVuY2VyIHByb2dyYW0gUkFNLiAgVGhpcyBnaXZlcworCXRoZSBhYmlsaXR5IHRvIHZlcmlmeSB0aGF0IHRoZSBpbnN0cnVjdGlvbnMgZG93bmxvYWRlZCB0byB0aGUKKwljYXJkJ3Mgc2VxdWVuY2VyIGFyZSBpbmRlZWQgd2hhdCB0aGV5IGFyZSBzdXBwb3NzZWQgdG8gYmUuICBBZ2FpbiwKKwl1bmxlc3MgeW91IGhhdmUgZG9jdW1lbnRhdGlvbiB0byB0ZWxsIHlvdSBob3cgdG8gaW50ZXJwcmV0IHRoZXNlCisJbnVtYmVycywgdGhlbiBpdCBpcyB0b3RhbGx5IHVzZWxlc3MuCisJCisgICAgImFpYzd4eHg9b3ZlcnJpZGVfdGVybToweGZmZmZmZmZmIiAtIFRoaXMgb3B0aW9uIGlzIHVzZWQgdG8gZm9yY2UgdGhlCisgICAgCXRlcm1pbmF0aW9uIG9uIHlvdXIgU0NTSSBjb250cm9sbGVycyB0byBhIHBhcnRpY3VsYXIgc2V0dGluZy4gIFRoaXMKKwlpcyBhIGJpdCBtYXNrIHZhcmlhYmxlIHRoYXQgYXBwbGllcyBmb3IgdXAgdG8gOCBhaWM3eHh4IFNDU0kgY2hhbm5lbHMuCisJRWFjaCBjaGFubmVsIGdldHMgNCBiaXRzLCBkaXZpZGVkIGFzIGZvbGxvd3M6CisJYml0ICAgMyAgIDIgICAxICAgMAorCSAgICAgIHwgICB8ICAgfCAgIEVuYWJsZS9EaXNhYmxlIFNpbmdsZSBFbmRlZCBMb3cgQnl0ZSBUZXJtaW5hdGlvbgorCSAgICAgIHwgICB8ICAgRW4vRGlzYWJsZSBTaW5nbGUgRW5kZWQgSGlnaCBCeXRlIFRlcm1pbmF0aW9uCisJICAgICAgfCAgIEVuL0Rpc2FibGUgTG93IEJ5dGUgTFZEIFRlcm1pbmF0aW9uCisJICAgICAgRW4vRGlzYWJsZSBIaWdoIEJ5dGUgTFZEIFRlcm1pbmF0aW9uCisKKwlUaGUgdXBwZXIgMiBiaXRzIHRoYXQgZGVhbCB3aXRoIExWRCB0ZXJtaW5hdGlvbiBvbmx5IGFwcGx5IHRvIFVsdHJhMgorCWNvbnRyb2xsZXJzLiAgRnV0aGVybW9yZSwgZHVlIHRvIHRoZSBjdXJyZW50IFVsdHJhMiBjb250cm9sbGVyCisJZGVzaWducywgdGhlc2UgYml0cyBhcmUgdGllZCB0b2dldGhlciBzdWNoIHRoYXQgc2V0dGluZyBlaXRoZXIgYml0CisJZW5hYmxlcyBib3RoIGxvdyBhbmQgaGlnaCBieXRlIExWRCB0ZXJtaW5hdGlvbi4gIEl0IGlzIG5vdCBwb3NzaWJsZQorCXRvIG9ubHkgc2V0IGhpZ2ggb3IgbG93IGJ5dGUgTFZEIHRlcm1pbmF0aW9uIGluIHRoaXMgbWFubmVyLiAgVGhpcyBpcworCWFuIGFydGlmYWN0IG9mIHRoZSBCSU9TIGRlZmluaXRpb24gb24gVWx0cmEyIGNvbnRyb2xsZXJzLiAgRm9yIG90aGVyCisJY29udHJvbGxlcnMsIHRoZSBvbmx5IGltcG9ydGFudCBiaXRzIGFyZSB0aGUgdHdvIGxvd2VzdCBiaXRzLiAgU2V0dGluZworCXRoZSBoaWdoZXIgYml0cyBvbiBub24tVWx0cmEyIGNvbnRyb2xsZXJzIGhhcyBubyBlZmZlY3QuICBBIGZldworCWV4YW1wbGVzIG9mIGhvdyB0byB1c2UgdGhpcyBvcHRpb246CisKKwlFbmFibGUgbG93IGFuZCBoaWdoIGJ5dGUgdGVybWluYXRpb24gb24gYSBub24tdWx0cmEyIGNvbnRyb2xsZXIgdGhhdAorCWlzIHRoZSBmaXJzdCBhaWM3eHh4IGNvbnRyb2xsZXIgKHRoZSBjb3JyZWN0IGJpdHMgYXJlIDAwMTEpLCAKKwlhaWM3eHh4PW92ZXJyaWRlX3Rlcm06MHgzCisKKwlFbmFibGUgYWxsIHRlcm1pbmF0aW9uIG9uIHRoZSB0aGlyZCBhaWM3eHh4IGNvbnRyb2xsZXIsIGhpZ2ggYnl0ZQorCXRlcm1pbmF0aW9uIG9uIHRoZSBzZWNvbmQgYWljN3h4eCBjb250cm9sbGVyLCBhbmQgbG93IGFuZCBoaWdoIGJ5dGUKKwlTRSB0ZXJtaW5hdGlvbiBvbiB0aGUgZmlyc3QgYWljN3h4eCBjb250cm9sbGVyIAorCShiaXRzIGFyZSAxMTExIDAwMTAgMDAxMSksIAorCWFpYzd4eHg9b3ZlcnJpZGVfdGVybToweGYyMworCQorCU5vIGF0dGVtcHQgaGFzIGJlZW4gbWFkZSB0byBtYWtlIHRoaXMgb3B0aW9uIG5vbi1jcnlwdGljLiAgSXQgcmVhbGx5CisJc2hvdWxkbid0IGJlIHVzZWQgZXhjZXB0IGluIGRpcmUgY2lyY3Vtc3RhbmNlcywgYW5kIGlmIHRoYXQgaGFwcGVucywKKwlJJ20gcHJvYmFibHkgZ29pbmcgdG8gYmUgdGVsbGluZyB5b3Ugd2hhdCB0byBzZXQgdGhpcyB0byBhbnl3YXkgOikKKworICAgICJhaWM3eHh4PXN0cHdsZXY6MHhmZmZmZmZmZiIgLSBUaGlzIG9wdGlvbiBpcyB1c2VkIHRvIGNvbnRyb2wgdGhlIFNUUFdMRVYKKyAgICAgICAgYml0IGluIHRoZSBERVZDT05GSUcgUENJIHJlZ2lzdGVyLiAgQ3VycmVudGx5LCB0aGlzIGlzIG9uZSBvZiB0aGUKKwl2ZXJ5IGZldyByZWdpc3RlcnMgdGhhdCB3ZSBoYXZlIGFic29sdXRlbHkgKm5vKiB3YXkgb2YgZGV0ZWN0aW5nCisJd2hhdCB0aGUgdmFyaWFibGUgc2hvdWxkIGJlLiAgSXQgZGVwZW5kcyBlbnRpcmVseSBvbiBob3cgdGhlIGNoaXBzZXQKKwlhbmQgZXh0ZXJuYWwgdGVybWluYXRvcnMgd2VyZSBjb3VwbGVkIGJ5IHRoZSBjYXJkL21vdGhlcmJvYXJkIG1ha2VyLgorCUZ1cnRoZXIsIGEgY2hpcCByZXNldCAoYXQgcG93ZXIgdXApIGFsd2F5cyBzZXRzIHRoaXMgYml0IHRvIDAuICBJZgorCXRoZXJlIGlzIG5vIEJJT1MgdG8gcnVuIG9uIHRoZSBjaGlwc2V0L2NhcmQgKHN1Y2ggYXMgd2l0aCBhIDI5MTBDCisJb3IgYSBtb3RoZXJib2FyZCBjb250cm9sbGVyIHdpdGggdGhlIEJJT1MgdG90YWxseSBkaXNhYmxlZCkgdGhlbgorCXRoZSB2YXJpYWJsZSBtYXkgbm90IGdldCBzZXQgcHJvcGVybHkuICBPZiBjb3Vyc2UsIGlmIHRoZSBwcm9wZXIKKwlzZXR0aW5nIHdhcyAwLCB0aGVuIHRoYXQncyB3aGF0IGl0IHdvdWxkIGJlIGFmdGVyIHRoZSByZXNldCwgYnV0IGlmCisJdGhlIHByb3BlciBzZXR0aW5nIGlzIGFjdHVhbGx5IDEuLi4uLnlvdSBnZXQgdGhlIHBpY3R1cmUuICBOb3csIHNpbmNlCisJd2UgY2FuJ3QgZGV0ZWN0IHRoaXMgYXQgYWxsLCBJJ3ZlIGFkZGVkIHRoaXMgb3B0aW9uIHRvIGZvcmNlIHRoZQorCXNldHRpbmcuICBJZiB5b3UgaGF2ZSBhIEJJT1Mgb24geW91ciBjb250cm9sbGVyIHRoZW4geW91IHNob3VsZCBuZXZlcgorCW5lZWQgdG8gdXNlIHRoaXMgb3B0aW9uLiAgSG93ZXZlciwgaWYgeW91IGFyZSBoYXZpbmcgbG90cyBvZiBTQ1NJCisJcmVzZXQgcHJvYmxlbXMgYW5kIGNhbid0IHNlZW0gdG8gZ2V0IHRoZW0ga25vY2tlZCBvdXQsIHRoaXMgbWF5IGhlbHAuCisKKwlIZXJlJ3MgYSB0ZXN0IHRvIGtub3cgZm9yIGNlcnRhaW4gaWYgeW91IG5lZWQgdGhpcyBvcHRpb24uICBNYWtlCisJYSBib290IGZsb3BweSB0aGF0IHlvdSBjYW4gdXNlIHRvIGJvb3QgeW91ciBjb21wdXRlciB1cCBhbmQgdGhhdAorCXdpbGwgZGV0ZWN0IHRoZSBhaWM3eHh4IGNvbnRyb2xsZXIuICBOZXh0LCBwb3dlciBkb3duIHlvdXIgY29tcHV0ZXIuCisJV2hpbGUgaXQncyBkb3duLCB1bnBsdWcgYWxsIFNDU0kgY2FibGVzIGZyb20geW91ciBBZGFwdGVjIFNDU0kKKwljb250cm9sbGVyLiAgQm9vdCB0aGUgc3lzdGVtIGJhY2sgdXAgdG8gdGhlIEFkYXB0ZWMgRVotU0NTSSBCSU9TCisJYW5kIHRoZW4gbWFrZSBzdXJlIHRoYXQgdGVybWluYXRpb24gaXMgZW5hYmxlZCBvbiB5b3VyIGFkYXB0ZXIgKGlmCisJeW91IGhhdmUgYW4gQWRhcHRlYyBCSU9TIG9mIGNvdXJzZSkuICBOZXh0LCBib290IHVwIHRoZSBmbG9wcHkgeW91CisJbWFkZSBhbmQgd2FpdCBmb3IgaXQgdG8gZGV0ZWN0IHRoZSBhaWM3eHh4IGNvbnRyb2xsZXIuICBJZiB0aGUga2VybmVsCisJZmluZHMgdGhlIGNvbnRyb2xsZXIgZmluZSwgc2F5cyBzY3NpIDogeCBob3N0cyBhbmQgdGhlbiB0cmllcyB0bworCWRldGVjdCB5b3VyIGRldmljZXMgbGlrZSBub3JtYWwsIHVwIHRvIHRoZSBwb2ludCB3aGVyZSBpdCBmYWlscyB0bworCW1vdW50IHlvdXIgcm9vdCBmaWxlIHN5c3RlbSBhbmQgcGFuaWNzLCB0aGVuIHlvdSdyZSBmaW5lLiAgSWYsIG9uCisJdGhlIG90aGVyIGhhbmQsIHRoZSBzeXN0ZW0gZ29lcyBpbnRvIGFuIGluZmluaXRlIHJlc2V0IGxvb3AsIHRoZW4KKwl5b3UgbmVlZCB0byB1c2UgdGhpcyBvcHRpb24gYW5kL29yIHRoZSBwcmV2aW91cyBvcHRpb24gdG8gZm9yY2UgdGhlCisJcHJvcGVyIHRlcm1pbmF0aW9uIHNldHRpbmdzIG9uIHlvdXIgY29udHJvbGxlci4gICBJZiB0aGlzIGhhcHBlbnMsCisJdGhlbiB5b3UgbmV4dCBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCB5b3VyIHNldHRpbmdzIHNob3VsZCBiZS4KKworCVRvIGZpbmQgdGhlIGNvcnJlY3Qgc2V0dGluZ3MsIHBvd2VyIHlvdXIgbWFjaGluZSBiYWNrIGRvd24sIGNvbm5lY3QKKwliYWNrIHVwIHRoZSBTQ1NJIGNhYmxlcywgYW5kIGJvb3QgYmFjayBpbnRvIHlvdXIgbWFjaGluZSBsaWtlIG5vcm1hbC4KKwlIb3dldmVyLCBib290IHdpdGggdGhlIGFpYzd4eHg9dmVyYm9zZToweDM5IG9wdGlvbi4gIFJlY29yZCB0aGUKKwlpbml0aWFsIERFVkNPTkZJRyB2YWx1ZXMgZm9yIGVhY2ggb2YgeW91ciBhaWM3eHh4IGNvbnRyb2xsZXJzIGFzCisJdGhleSBhcmUgbGlzdGVkLCBhbmQgYWxzbyByZWNvcmQgd2hhdCB0aGUgbWFjaGluZSBpcyBkZXRlY3RpbmcgYXMKKwl0aGUgcHJvcGVyIHRlcm1pbmF0aW9uIG9uIHlvdXIgY29udHJvbGxlcnMuICBOT1RFOiB0aGUgb3JkZXIgaW4KKwl3aGljaCB0aGUgaW5pdGlhbCBERVZDT05GSUcgdmFsdWVzIGFyZSBwcmludGVkIG91dCBpcyBub3QgZ2F1cmFudGVlZAorCXRvIGJlIHRoZSBzYW1lIG9yZGVyIGFzIHRoZSBTQ1NJIGNvbnRyb2xsZXJzIGFyZSByZWdpc3RlcmVkLiAgVGhlCisJYWJvdmUgb3B0aW9uIGFuZCB0aGlzIG9wdGlvbiBib3RoIHdvcmsgb24gdGhlIG9yZGVyIG9mIHRoZSBTQ1NJCisJY29udHJvbGxlcnMgYXMgdGhleSBhcmUgcmVnaXN0ZXJlZCwgc28gbWFrZSBzdXJlIHlvdSBtYXRjaCB0aGUgcmlnaHQKKwlERVZDT05GSUcgdmFsdWVzIHdpdGggdGhlIHJpZ2h0IGNvbnRyb2xsZXJzIGlmIHlvdSBoYXZlIG1vcmUgdGhhbgorCW9uZSBhaWM3eHh4IGNvbnRyb2xsZXIuCisKKwlPbmNlIHlvdSBoYXZlIHRoZSBkZXRlY3RlZCB0ZXJtaW5hdGlvbiBzZXR0aW5ncyBhbmQgdGhlIGluaXRpYWwKKwlERVZDT05GSUcgdmFsdWVzIGZvciBlYWNoIGNvbnRyb2xsZXIsIHRoZW4gZmlndXJlIG91dCB3aGF0IHRoZQorCXRlcm1pbmF0aW9uIG9uIGVhY2ggb2YgdGhlIGNvbnRyb2xsZXJzICpzaG91bGQqIGJlLiAgSG9wZWZ1bGx5LCB0aGF0CisJcGFydCBpcyBjb3JyZWN0LCBidXQgaXQgY291bGQgcG9zc2libHkgYmUgd3JvbmcgaWYgdGhlcmUgaXMKKwlib2d1cyBjYWJsZSBkZXRlY3Rpb24gbG9naWMgb24geW91ciBjb250cm9sbGVyIG9yIHNvbWV0aGluZyBzaW1pbGFyLgorCUlmIGFsbCB0aGUgY29udHJvbGxlcnMgaGF2ZSB0aGUgY29ycmVjdCB0ZXJtaW5hdGlvbiBzZXR0aW5ncywgdGhlbgorCWRvbid0IHNldCB0aGUgYWljN3h4eD1vdmVycmlkZV90ZXJtIHZhcmlhYmxlIGF0IGFsbCwgbGVhdmUgaXQgYWxvbmUuCisJTmV4dCwgb24gYW55IGNvbnRyb2xsZXJzIHRoYXQgZ28gaW50byBhbiBpbmZpbml0ZSByZXNldCBsb29wIHdoZW4KKwl5b3UgdW5wbHVnIGFsbCB0aGUgU0NTSSBjYWJsZXMsIGdldCB0aGUgc3RhcnRpbmcgREVWQ09ORklHIHZhbHVlLgorCUlmIHRoZSBpbml0aWFsIERFVkNPTkZJRyB2YWx1ZSBpcyBkaXZpc2libGUgYnkgMiwgdGhlbiB0aGUgY29ycmVjdAorCXNldHRpbmcgZm9yIHRoYXQgY29udHJvbGxlciBpcyAwLiAgSWYgaXQncyBhbiBvZGQgbnVtYmVyLCB0aGVuCisJdGhlIGNvcnJlY3Qgc2V0dGluZyBmb3IgdGhhdCBjb250cm9sbGVyIGlzIDEuICBGb3IgYW55IG90aGVyCisJY29udHJvbGxlcnMgdGhhdCBkaWRuJ3QgaGF2ZSBhbiBpbmZpbml0ZSByZXNldCBwcm9ibGVtLCB0aGVuIHJldmVyc2UKKwl0aGUgYWJvdmUgb3B0aW9ucy4gIElmIERFVkNPTkZJRyB3YXMgZXZlbiwgdGhlbiB0aGUgY29ycmVjdCBzZXR0aW5nCisJaXMgMSwgaWYgbm90IHRoZW4gdGhlIGNvcnJlY3Qgc2V0dGluZyBpcyAwLgorCisJTm93IHRoYXQgeW91IGtub3cgd2hhdCB0aGUgY29ycmVjdCBzZXR0aW5nIHdhcyBmb3IgZWFjaCBjb250cm9sbGVyLAorCXdlIG5lZWQgdG8gZW5jb2RlIHRoYXQgaW50byB0aGUgYWljN3h4eD1zdHB3bGV2OjB4Li4uIHZhcmlhYmxlLgorCVRoaXMgdmFyaWFibGUgaXMgYSBiaXQgZmllbGQgZW5jb2RlZCB2YXJpYWJsZS4gIEJpdCAwIGlzIGZvciB0aGUgZmlyc3QKKwlhaWM3eHh4IGNvbnRyb2xsZXIsIGJpdCAxIGZvciB0aGUgbmV4dCwgZXRjLiAgUHV0IGFsbCB0aGVzZSBiaXRzCisJdG9nZXRoZXIgYW5kIHlvdSBnZXQgYSBudW1iZXIuICBGb3IgZXhhbXBsZSwgaWYgdGhlIHRoaXJkIGFpYzd4eHgKKwluZWVkZWQgYSAxLCBidXQgdGhlIHNlY29uZCBhbmQgZmlyc3QgYm90aCBuZWVkZWQgYSAwLCB0aGVuIHRoZSBiaXRzCisJd291bGQgYmUgMTAwIGluIGJpbmFyeS4gIFRoaXMgdGhlbiB0cmFuc2xhdGVzIHRvIDB4MDQuICBZb3Ugd291bGQKKwl0aGVyZWZvcmUgc2V0IGFpYzd4eHg9c3Rwd2xldjoweDA0LiAgVGhpcyBpcyBmYWlybHkgc3RhbmRhcmQgYmluYXJ5CisJdG8gaGV4YWRlY2ltYWwgY29udmVyc2lvbnMgaGVyZS4gIElmIHlvdSBhcmVuJ3QgdXAgdG8gc3BlZWQgb24gdGhlCisJYmluYXJ5LT5oZXggY29udmVyc2lvbiB0aGVuIHNlbmQgYW4gZW1haWwgdG8gdGhlIGFpYzd4eHggbWFpbGluZworCWxpc3QgYW5kIHNvbWVvbmUgY2FuIGhlbHAgeW91IG91dC4KKworICAgICJhaWM3eHh4PXRhZ19pbmZvOnt7OCw4Li59LHs4LDguLn0sLi59IiAtIFRoaXMgb3B0aW9uIGlzIHVzZWQgdG8gZGlzYWJsZQorICAgICAgICBvciBlbmFibGUgVGFnZ2VkIENvbW1hbmQgUXVldWVpbmcgKFRDUSkgb24gc3BlY2lmaWMgZGV2aWNlcy4gIEFzIG9mCisJZHJpdmVyIHZlcnNpb24gNS4xLjExLCBUQ1EgaXMgbm93IGVpdGhlciBvbiBvciBvZmYgYnkgZGVmYXVsdAorCWFjY29yZGluZyB0byB0aGUgc2V0dGluZyB5b3UgY2hvb3NlIGR1cmluZyB0aGUgbWFrZSBjb25maWcgcHJvY2Vzcy4KKwlJbiBvcmRlciB0byBlbi9kaXNhYmxlIFRDUSBmb3IgY2VydGlhbiBkZXZpY2VzIGF0IGJvb3QgdGltZSwgYSB1c2VyCisJbWF5IHVzZSB0aGlzIGJvb3QgcGFyYW0uICBUaGUgZHJpdmVyIHdpbGwgdGhlbiBwYXJzZSB0aGlzIG1lc3NhZ2Ugb3V0CisgICAgICAgIGFuZCBlbi9kaXNhYmxlIHRoZSBzcGVjaWZpYyBkZXZpY2UgZW50cmllcyB0aGF0IGFyZSBwcmVzZW50IGJhc2VkIHVwb24KKyAgICAgICAgdGhlIHZhbHVlIGdpdmVuLiAgVGhlIHBhcmFtIGxpbmUgaXMgcGFyc2VkIGluIHRoZSBmb2xsb3dpbmcgbWFubmVyOgorCisgICAgICAgICAgeyAtIGZpcnN0IGluc3RhbmNlIGluZGljYXRlcyB0aGUgc3RhcnQgb2YgdGhpcyBwYXJhbWV0ZXIgdmFsdWVzCisgICAgICAgICAgICAgIHNlY29uZCBpbnN0YW5jZSBpcyB0aGUgc3RhcnQgb2YgZW50cmllcyBmb3IgYSBwYXJ0aWN1bGFyCisgICAgICAgICAgICAgIGRldmljZSBlbnRyeQorICAgICAgICAgIH0gLSBlbmQgdGhlIGVudHJpZXMgZm9yIGEgcGFydGljdWxhciBob3N0IGFkYXB0ZXIsIG9yIGVuZCB0aGUgZW50aXJlCisgICAgICAgICAgICAgIHNldCBvZiBwYXJhbWV0ZXIgZW50cmllcworICAgICAgICAgICwgLSBtb3ZlIHRvIG5leHQgZW50cnkuICBJbnNpZGUgb2YgYSBzZXQgb2YgZGV2aWNlIGVudHJpZXMsIHRoaXMKKyAgICAgICAgICAgICAgbW92ZXMgdXMgdG8gdGhlIG5leHQgZGV2aWNlIG9uIHRoZSBsaXN0LiAgT3V0c2lkZSBvZiBkZXZpY2UKKyAgICAgICAgICAgICAgZW50cmllcywgdGhpcyBtb3ZlcyB1cyB0byB0aGUgbmV4dCBob3N0IGFkYXB0ZXIKKyAgICAgICAgICAuIC0gU2FtZSBlZmZlY3QgYXMgLCBidXQgaXMgc2FmZSB0byB1c2Ugd2l0aCBpbnNtb2QuCisgICAgICAgICAgeCAtIHRoZSBudW1iZXIgdG8gZW50ZXIgaW50byB0aGUgYXJyYXkgYXQgdGhpcyBwb3NpdGlvbi4gIAorICAgICAgICAgICAgICAwID0gRW5hYmxlIHRhZ2dlZCBxdWV1ZWluZyBvbiB0aGlzIGRldmljZSBhbmQgdXNlIHRoZSBkZWZhdWx0CisgICAgICAgICAgICAgICAgICBxdWV1ZSBkZXB0aAorICAgICAgICAgICAgICAxLTI1NCA9IEVuYWJsZSB0YWdnZWQgcXVldWVpbmcgb24gdGhpcyBkZXZpY2UgYW5kIHVzZSB0aGlzCisgICAgICAgICAgICAgICAgICAgICAgbnVtYmVyIGFzIHRoZSBxdWV1ZSBkZXB0aAorICAgICAgICAgICAgICAyNTUgPSBEaXNhYmxlIHRhZ2dlZCBxdWV1ZWluZyBvbiB0aGlzIGRldmljZS4KKyAgICAgICAgICAgICAgTm90ZTogYW55dGhpbmcgYWJvdmUgMzIgZm9yIGFuIGFjdHVhbCBxdWV1ZSBkZXB0aCBpcyB3YXN0ZWZ1bAorICAgICAgICAgICAgICAgICAgICBhbmQgbm90IHJlY29tbWVuZGVkLgorCisgICAgICAgIEEgZmV3IGV4YW1wbGVzIG9mIGhvdyB0aGlzIGNhbiBiZSB1c2VkOgorCisgICAgICAgIHRhZ19pbmZvOnt7OCwxMiwsMCwsMjU1LDR9fQorICAgICAgICAgIFRoaXMgbGluZSB3aWxsIG9ubHkgZWZmZWN0IHRoZSBmaXJzdCBhaWM3eHh4IGNhcmQgcmVnaXN0ZXJlZC4gIEl0CisgICAgICAgICAgd2lsbCBzZXQgc2NzaSBpZCAwIHRvIGEgcXVldWUgZGVwdGggb2YgOCwgaWQgMSB0byAxMiwgbGVhdmUgaWQgMgorICAgICAgICAgIGF0IHRoZSBkZWZhdWx0LCBzZXQgaWQgMyB0byB0YWdnZWQgcXVldWVpbmcgZW5hYmxlZCBhbmQgdXNlIHRoZQorICAgICAgICAgIGRlZmF1bHQgcXVldWUgZGVwdGgsIGlkIDQgZGVmYXVsdCwgaWQgNSBkaXNhYmxlZCwgYW5kIGlkIDYgdG8gNC4KKyAgICAgICAgICBBbnkgbm90IHNwZWNpZmllZCBlbnRyaWVzIHN0YXkgYXQgdGhlIGRlZmF1bHQgdmFsdWUsIHJlcGVhdGVkCisgICAgICAgICAgY29tbWFzIHdpdGggbm8gdmFsdWUgc3BlY2lmaWVkIHdpbGwgc2ltcGx5IGluY3JlbWVudCB0byB0aGUgbmV4dCBpZAorICAgICAgICAgIHdpdGhvdXQgY2hhbmdpbmcgYW55dGhpbmcgZm9yIHRoZSBtaXNzaW5nIHZhbHVlcy4KKworICAgICAgICB0YWdfaW5mbzp7LCwseywsLDI1NX19CisgICAgICAgICAgRmlyc3QsIHNlY29uZCwgYW5kIHRoaXJkIGFkYXB0ZXJzIGF0IGRlZmF1bHQgdmFsdWVzLiAgRm91cnRoCisgICAgICAgICAgYWRhcHRlciwgaWQgMyBpcyBkaXNhYmxlZC4gIE5vdGljZSB0aGF0IGxlYWRpbmcgY29tbWFzIHNpbXBseQorCSAgaW5jcmVtZW50IHdoYXQgdGhlIGZpcnN0IG51bWJlciBlZmZlY3RzLCBhbmQgdGhlcmUgYXJlIG5vIG5lZWQKKwkgIGZvciB0cmFpbGluZyBjb21tYXMuICBXaGVuIHlvdSBjbG9zZSBvdXQgYW4gYWRhcHRlciwgb3IgdGhlCisJICBlbnRpcmUgZW50cnksIGFueXRoaW5nIG5vdCBleHBsaWNpdGx5IHNldCBzdGF5cyBhdCB0aGUgZGVmYXVsdAorCSAgdmFsdWUuCisKKyAgICAgICAgQSBmaW5hbCBub3RlIG9uIHRoaXMgb3B0aW9uLiAgVGhlIHNjYW5uZXIgSSB1c2VkIGZvciB0aGlzIGlzbid0CisgICAgICAgIHBlcmZlY3Qgb3IgaGlnaGx5IHJvYnVzdC4gIElmIHlvdSBtZXNzIHRoZSBsaW5lIHVwLCB0aGUgd29yc3QgdGhhdAorICAgICAgICBzaG91bGQgaGFwcGVuIGlzIHRoYXQgdGhlIGxpbmUgd2lsbCBnZXQgaWdub3JlZC4gIElmIHlvdSBkb24ndAorICAgICAgICBjbG9zZSBvdXQgdGhlIGVudGlyZSBlbnRyeSB3aXRoIHRoZSBmaW5hbCBicmFja2V0LCB0aGVuIGFueSBvdGhlcgorICAgICAgICBhaWM3eHh4IG9wdGlvbnMgYWZ0ZXIgdGhpcyB3aWxsIGdldCBpZ25vcmVkLiAgU28sIGluIGdlbmVyYWwsIGJlCisgICAgICAgIHN1cmUgb2Ygd2hhdCB5b3UgYXJlIGVudGVyaW5nLCBhbmQgYWZ0ZXIgeW91IGhhdmUgaXQgcmlnaHQsIGp1c3QKKyAgICAgICAgYWRkIGl0IHRvIHRoZSBsaWxvLmNvbmYgZmlsZSBzbyB0aGVyZSB3b24ndCBiZSBhbnkgbWlzdGFrZXMuICBBcworICAgICAgICBhIG1lYW5zIG9mIGNoZWNraW5nIHRoaXMgcGFyc2VyLCB0aGUgZW50aXJlIHRhZ19pbmZvIGFycmF5IGZvcgorICAgICAgICBlYWNoIGNhcmQgaXMgbm93IHByaW50ZWQgb3V0IGluIHRoZSAvcHJvYy9zY3NpL2FpYzd4eHgveCBmaWxlLiAgWW91CisgICAgICAgIGNhbiB1c2UgdGhhdCB0byB2ZXJpZnkgdGhhdCB5b3VyIG9wdGlvbnMgd2VyZSBwYXJzZWQgY29ycmVjdGx5LiAKKyAgICAgICAgCisgICAgQm9vdCBjb21tYW5kIGxpbmUgb3B0aW9ucyBtYXkgYmUgY29tYmluZWQgdG8gZm9ybSB0aGUgcHJvcGVyIHNldCBvZiBvcHRpb25zCisgICAgYSB1c2VyIG1pZ2h0IG5lZWQuICBGb3IgZXhhbXBsZSwgdGhlIGZvbGxvd2luZyBpcyB2YWxpZDoKKyAgICAKKyAgICBhaWM3eHh4PXZlcmJvc2UsZXh0ZW5kZWQsaXJxX3RyaWdnZXI6MQorICAgIAorICAgIFRoZSBvbmx5IHJlcXVpcmVtZW50IGlzIHRoYXQgaW5kaXZpZHVhbCBvcHRpb25zIGJlIHNlcGFyYXRlZCBieSBhIGNvbW1hIG9yCisgICAgYSBwZXJpb2Qgb24gdGhlIGNvbW1hbmQgbGluZS4KKyAgICAgICAgCisgIE1vZHVsZSBMb2FkaW5nIGNvbW1hbmQgb3B0aW9ucworICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICBXaGVuIGxvYWRpbmcgdGhlIGFpYzd4eHggZHJpdmVyIGFzIGEgbW9kdWxlLCB0aGUgZXhhY3Qgc2FtZSBvcHRpb25zIGFyZQorICAgIGF2YWlsYWJsZSB0byB0aGUgdXNlci4gIEhvd2V2ZXIsIHRoZSBzeW50YXggdG8gc3BlY2lmeSB0aGUgb3B0aW9ucyBjaGFuZ2VzCisgICAgc2xpZ2h0bHkuICBGb3IgaW5zbW9kLCB5b3UgbmVlZCB0byB3cmFwIHRoZSBhaWM3eHh4PSBhcmd1bWVudCBpbiBxdW90ZXMKKyAgICBhbmQgcmVwbGFjZSBhbGwgJywnIHdpdGggJy4nLiAgU28sIGZvciBleGFtcGxlLCBhIHZhbGlkIGluc21vZCBsaW5lCisgICAgd291bGQgYmU6CisKKyAgICBpbnNtb2QgYWljN3h4eCBhaWM3eHh4PSd2ZXJib3NlLmlycV90cmlnZ2VyOjEuZXh0ZW5kZWQnCisKKyAgICBUaGlzIGxpbmUgc2hvdWxkIHJlc3VsdCBpbiB0aGUgKmV4YWN0KiBzYW1lIGJlaGF2aW91ciBhcyBpZiB5b3UgdHlwZWQKKyAgICBpdCBpbiBhdCB0aGUgbGlsbyBwcm9tcHQgYW5kIHRoZSBkcml2ZXIgd2FzIGNvbXBpbGVkIGludG8gdGhlIGtlcm5lbAorICAgIGluc3RlYWQgb2YgYmVpbmcgYSBtb2R1bGUuICBUaGUgcmVhc29uIGZvciB0aGUgc2luZ2xlIHF1b3RlIGlzIHNvIHRoYXQKKyAgICB0aGUgc2hlbGwgd29uJ3QgdHJ5IHRvIGludGVycHJldCBhbnl0aGluZyBpbiB0aGUgbGluZSwgc3VjaCBhcyB7LiAKKyAgICBJbnNtb2QgYXNzdW1lcyBhbnkgb3B0aW9ucyBzdGFydGluZyB3aXRoIGEgbGV0dGVyIGluc3RlYWQgb2YgYSBudW1iZXIKKyAgICBpcyBhIGNoYXJhY3RlciBzdHJpbmcgKHdoaWNoIGlzIHdoYXQgd2Ugd2FudCkgYW5kIGJ5IHN3aXRjaGluZyBhbGwgb2YKKyAgICB0aGUgY29tbWFzIHRvIHBlcmlvZHMsIGluc21vZCB3b24ndCBpbnRlcnByZXQgdGhpcyBhcyBtb3JlIHRoYW4gb25lCisgICAgc3RyaW5nIGFuZCB3cml0ZSBqdW5rIGludG8gb3VyIGJpbmFyeSBpbWFnZS4gIEkgY29uc2lkZXIgaXQgYSBidWcgaW4KKyAgICB0aGUgaW5zbW9kIHByb2dyYW0gdGhhdCBldmVuIGlmIHlvdSB3cmFwIHlvdXIgc3RyaW5nIGluIHF1b3RlcyAocXVvdGVzCisgICAgdGhhdCBwYXNzIHRoZSBzaGVsbCBtaW5kIHlvdSBhbmQgdGhhdCBpbnNtb2Qgc2VlcykgaXQgc3RpbGwgdHJlYXRlcworICAgIGEgY29tbWEgaW5zaWRlIG9mIHRob3NlIHF1b3RlcyBhcyBzdGFydGluZyBhIG5ldyB2YXJpYWJsZSwgcmVzdWx0aW5nCisgICAgaW4gbWVtb3J5IHNjcmliYmxlcyBpZiB5b3UgZG9uJ3Qgc3dpdGNoIHRoZSBjb21tYXMgdG8gcGVyaW9kcy4KKworCisgIEtlcm5lbCBDb21waWxlIG9wdGlvbnMKKyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgVGhlIHZhcmlvdXMga2VybmVsIGNvbXBpbGUgdGltZSBvcHRpb25zIGZvciB0aGlzIGRyaXZlciBhcmUgbm93IGZhaXJseQorICAgIHdlbGwgZG9jdW1lbnRlZCBpbiB0aGUgZmlsZSBEb2N1bWVudGF0aW9uL0NvbmZpZ3VyZS5oZWxwLiAgSW4gb3JkZXIgdG8KKyAgICBzZWUgdGhpcyBkb2N1bWVudGF0aW9uLCB5b3UgbmVlZCB0byB1c2Ugb25lIG9mIHRoZSBhZHZhbmNlZCBjb25maWd1cmF0aW9uCisgICAgcHJvZ3JhbXMgKG1lbnVjb25maWcgYW5kIHhjb25maWcpLiAgSWYgeW91IGFyZSB1c2luZyB0aGUgIm1ha2UgbWVudWNvbmZpZyIKKyAgICBtZXRob2Qgb2YgY29uZmlndXJpbmcgeW91ciBrZXJuZWwsIHRoZW4geW91IHdvdWxkIHNpbXBseSBoaWdobGlnaHQgdGhlCisgICAgb3B0aW9uIGluIHF1ZXN0aW9uIGFuZCBoaXQgdGhlID8ga2V5LiAgSWYgeW91IGFyZSB1c2luZyB0aGUgIm1ha2UgeGNvbmZpZyIKKyAgICBtZXRob2Qgb2YgY29uZmlndXJpbmcgeW91ciBrZXJuZWwsIHRoZW4gc2ltcGx5IGNsaWNrIG9uIHRoZSBoZWxwIGJ1dHRvbgorICAgIG5leHQgdG8gdGhlIG9wdGlvbiB5b3UgaGF2ZSBxdWVzdGlvbnMgYWJvdXQuICBUaGUgaGVscCBpbmZvcm1hdGlvbiBmcm9tCisgICAgdGhlIENvbmZpZ3VyZS5oZWxwIGZpbGUgd2lsbCB0aGVuIGdldCBhdXRvbWF0aWNhbGx5IGRpc3BsYXllZC4KKworICAvcHJvYyBzdXBwb3J0CisgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIFRoZSAvcHJvYyBzdXBwb3J0IGZvciB0aGUgQUlDN3h4eCBjYW4gYmUgZm91bmQgaW4gdGhlIC9wcm9jL3Njc2kvYWljN3h4eC8KKyAgICBkaXJlY3RvcnkuIFRoYXQgZGlyZWN0b3J5IGNvbnRhaW5zIGEgZmlsZSBmb3IgZWFjaCBTQ1NJIGNvbnRyb2xsZXIgaW4KKyAgICB0aGUgc3lzdGVtLiBFYWNoIGZpbGUgcHJlc2VudHMgdGhlIGN1cnJlbnQgY29uZmlndXJhdGlvbiBhbmQgdHJhbnNmZXIKKyAgICBzdGF0aXN0aWNzIChlbmFibGVkIHdpdGggI2RlZmluZSBpbiBhaWM3eHh4LmMpIGZvciBlYWNoIGNvbnRyb2xsZXIuCisKKyAgICBUaGFua3MgdG8gTWljaGFlbCBOZXVmZmVyIGZvciBoaXMgdXBwZXItbGV2ZWwgU0NTSSBoZWxwLCBhbmQKKyAgICBNYXR0aGV3IEphY29iIGZvciBzdGF0aXN0aWNzIHN1cHBvcnQuCisKKyAgRGVidWdnaW5nIHRoZSBkcml2ZXIKKyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgU2hvdWxkIHlvdSBoYXZlIHByb2JsZW1zIHdpdGggdGhpcyBkcml2ZXIsIGFuZCB3b3VsZCBsaWtlIHNvbWUgaGVscCBpbgorICAgIGdldHRpbmcgdGhlbSBzb2x2ZWQsIHRoZXJlIGFyZSBhIGNvdXBsZSBkZWJ1Z2dpbmcgaXRlbXMgYnVpbHQgaW50bworICAgIHRoZSBkcml2ZXIgdG8gZmFjaWxpdGF0ZSBnZXR0aW5nIHRoZSBuZWVkZWQgaW5mb3JtYXRpb24gZnJvbSB0aGUgc3lzdGVtLgorICAgIEluIGdlbmVyYWwsIEkgbmVlZCBhIGNvbXBsZXRlIGRlc2NyaXB0aW9uIG9mIHRoZSBwcm9ibGVtLCB3aXRoIGFzIG1hbnkKKyAgICBsb2dzIGFzIHBvc3NpYmxlIGNvbmNlcm5pbmcgd2hhdCBoYXBwZW5zLiAgVG8gaGVscCB3aXRoIHRoaXMsIHRoZXJlIGlzCisgICAgYSBjb21tYW5kIG9wdGlvbiBhaWM3eHh4PXBhbmljX29uX2Fib3J0LiAgVGhpcyBvcHRpb24sIHdoZW4gc2V0LCBmb3JjZXMKKyAgICB0aGUgZHJpdmVyIHRvIHBhbmljIHRoZSBrZXJuZWwgb24gdGhlIGZpcnN0IFNDU0kgYWJvcnQgaXNzdWVkIGJ5IHRoZQorICAgIG1pZCBsZXZlbCBTQ1NJIGNvZGUuICBJZiB5b3VyIHN5c3RlbSBpcyBnb2luZyB0byByZXNldCBsb29wcyBhbmQgeW91CisgICAgY2FuJ3QgcmVhZCB0aGUgc2NyZWVuLCB0aGVuIHRoaXMgaXMgd2hhdCB5b3UgbmVlZC4gIE5vdCBvbmx5IHdpbGwgaXQKKyAgICBzdG9wIHRoZSBzeXN0ZW0sIGJ1dCBpdCBhbHNvIHByaW50cyBvdXQgYSBsYXJnZSBhbW91bnQgb2Ygc3RhdGUKKyAgICBpbmZvcm1hdGlvbiBpbiB0aGUgcHJvY2Vzcy4gIFNlY29uZCwgaWYgeW91IHNwZWNpZnkgdGhlIG9wdGlvbgorICAgICJhaWM3eHh4PXZlcmJvc2U6MHgxZmZmZiIsIHRoZSBzeXN0ZW0gd2lsbCBwcmludCBvdXQgKlNPT09PKiBtdWNoCisgICAgaW5mb3JtYXRpb24gYXMgaXQgcnVucyB0aGF0IHlvdSB3b24ndCBiZSBhYmxlIHRvIHNlZSBhbnl0aGluZy4KKyAgICBIb3dldmVyLCB0aGlzIGNhbiBhY3R1YWxseSBiZSB2ZXJ5IHVzZWZ1bCBpZiB5b3VyIG1hY2hpbmUgc2ltcGx5CisgICAgbG9ja3MgdXAgd2hlbiB0cnlpbmcgdG8gYm9vdCwgc2luY2UgaXQgd2lsbCBwaW4tcG9pbnQgd2hhdCB3YXMgbGFzdAorICAgIGhhcHBlbmluZyAoaW4gcmVnYXJkcyB0byB0aGUgYWljN3h4eCBkcml2ZXIpIGltbWVkaWF0ZWx5IHByaW9yIHRvCisgICAgdGhlIGxvY2t1cC4gIFRoaXMgaXMgcmVhbGx5IG9ubHkgdXNlZnVsIGlmIHlvdXIgbWFjaGluZSBzaW1wbHkgY2FuCisgICAgbm90IGJvb3QgdXAgc3VjY2Vzc2Z1bGx5LiAgSWYgeW91IGNhbiBnZXQgeW91ciBtYWNoaW5lIHRvIHJ1biwgdGhlbgorICAgIHRoaXMgd2lsbCBwcm9kdWNlIGZhciB0b28gbXVjaCBpbmZvcm1hdGlvbi4KKworICBGVFAgc2l0ZXMKKyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgZnRwOi8vZnRwLnJlZGhhdC5jb20vcHViL2FpYy8KKyAgICAgIC0gT3V0IG9mIGRhdGUuICBJIHVzZWQgdG8ga2VlcCBzdHVmZiBoZXJlLCBidXQgdG9vIG1hbnkgcGVvcGxlCisgICAgICAgIGNvbXBsYWluZWQgYWJvdXQgaGF2aW5nIGEgaGFyZCB0aW1lIGdldHRpbmcgaW50byBSZWQgSGF0J3MgZnRwCisJc2VydmVyLiAgU28gdXNlIHRoZSB3ZWIgc2l0ZSBiZWxvdyBpbnN0ZWFkLgorICAgIGZ0cDovL2Z0cC5wY25ldC5jb20vdXNlcnMvZWlzY2hlbi9MaW51eC8KKyAgICAgIC0gRGFuIEVpc2NoZW4ncyBkcml2ZXIgZGlzdHJpYnV0aW9uIGFyZWEKKyAgICBmdHA6Ly9la2YyLnZzYi5jei9wdWIvbGludXgva2VybmVsL2FpYzd4eHgvZnRwLnRlbGVwb3J0LmNvbS8KKyAgICAgIC0gRXVyb3BlYW4gTGludXggbWlycm9yIG9mIFRlbGVwb3J0IHNpdGUKKworICBXZWIgc2l0ZXMKKyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgaHR0cDovL3Blb3BsZS5yZWRoYXQuY29tL2RsZWRmb3JkLworICAgICAgLSBNeSB3ZWIgc2l0ZSwgYWxzbyB0aGUgcHJpbWFyeSBhaWM3eHh4IHNpdGUgd2l0aCBzZXZlcmFsIHJlbGF0ZWQKKyAgICAgICAgcGFnZXMuCisKK0RlYW4gVy4gR2VobmVydAorZGVhbmdAdGVsZXBvcnQuY29tCisKKyRSZXZpc2lvbjogMy4wICQKKworTW9kaWZpZWQgYnkgRG91ZyBMZWRmb3JkIDE5OTgtMjAwMAorCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3Njc2kvY3BxZmMudHh0IGIvRG9jdW1lbnRhdGlvbi9zY3NpL2NwcWZjLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZDMzZTYxCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9zY3NpL2NwcWZjLnR4dApAQCAtMCwwICsxLDI3MiBAQAorTm90ZXMgZm9yIENQUUZDVFMgZHJpdmVyIGZvciBDb21wYXEgVGFjaHlvbiBUUworRmlicmUgQ2hhbm5lbCBIb3N0IEJ1cyBBZGFwdGVyLCBQQ0kgNjQtYml0LCA2Nk1IegorZm9yIExpbnV4IChSSCA2LjEsIDYuMiBrZXJuZWwgMi4yLjEyLTMyLCAyLjIuMTQtNSkKK1NNUCB0ZXN0ZWQKK1Rlc3RlZCBpbiBzaW5nbGUgYW5kIGR1YWwgSEJBIGNvbmZpZ3VyYXRpb24sIDMyIGFuZCA2NGJpdCBidXNzZXMsCiszMyBhbmQgNjZNSHouICBPbmx5IHN1cHBvcnRzIEZDLUFMLgorU0VTVCBzaXplIDUxMiBFeGNoYW5nZXMgKHNpbXVsdGFuZW91cyBJL09zKSBsaW1pdGVkIGJ5IG1vZHVsZSBrbWFsbG9jKCkgCisJbWF4IG9mIDEyOGsgYnl0ZXMgY29udGlndW91cy4KKworVmVyIDIuNS40ICBPY3QgMDMsIDIwMDIKKyAgICogZml4ZWQgbWVtY3B5IG9mIHNlbnNlIGJ1ZmZlciBpbiBpb2N0bCB0byBjb3B5IHRoZSBzbWFsbGVyIGRlZmluZWQgc2l6ZQorVmVyIDIuNS4zICBBdWcgMDEsIDIwMDIKKyAgICogZml4IHRoZSBwYXNzdGhydSBpb2N0bCB0byBoYW5kbGUgdGhlIFNjc2lfQ21uZC0+cmVxdWVzdCBiZWluZyBhIHBvaW50ZXIKK1ZlciAyLjUuMSAgSnVsIDMwLCAyMDAyCisgICAqIGZpeCBpb2N0bCB0byBwYXkgYXR0ZW50aW9uIHRvIHRoZSBzcGVjaWZpZWQgTFVOLgorVmVyIDIuNS4wICBOb3YgMjksIDIwMDEKKyAgICogZWxpbWluYXRlZCBpb19yZXF1ZXN0X2xvY2suICBUaGlzIGNoYW5nZSBtYWtlcyB0aGUgZHJpdmVyIHNwZWNpZmljCisgICAgIHRvIHRoZSAyLjUueCBrZXJuZWxzLgorICAgKiBzaWxlbmNlZCBleGNlc3NpdmVseSBub2lzeSBwcmludGtzLgorCitWZXIgMi4xLjIgIEp1bHkgMjMsIDIwMDIKKyAgICogaW5pdGlhbGl6ZSBEdW1DbW5kLT5sdW4gaW4gY3BxZmNUU19pb2N0bCAodXNlZCBpbiBmY0ZpbmRMb2dnZWRJblBvcnRzIGFzIExVTiBpbmRleCkKKworVmVyIDIuMS4xICBPY3QgMTgsIDIwMDEKKyAgICogcmVpbml0aWFsaXplIENtbmQtPlNDcC5zZW50X2NvbW1hbmQgKHVzZWQgdG8gaWRlbnRpZnkgY29tbWFuZHMgYXMKKyAgICAgcGFzc3RocnVzKSBvbiBjYWxsaW5nIHNjc2lfZG9uZSwgc2luY2UgdGhlIHNjc2kgbWlkIGxheWVyIGRvZXMgbm90CisgICAgIHVzZSAob3IgcmVpbml0aWFsaXplKSB0aGlzIGZpZWxkIHRvIHByZXZlbnQgc3Vic2VxdWVudCBjb21hbmRzIGZyb20KKyAgICAgaGF2aW5nIGl0IHNldCBpbmNvcnJlY3RseS4gCisKK1ZlciAyLjEuMCAgQXVnIDI3LCAyMDAxCisgICAqIFJldmlzZSBkcml2ZXIgdG8gdXNlIG5ldyBrZXJuZWwgMi40LnggUENJIERNQSBBUEksIGluc3RlYWQgb2YgCisgICAgIHZpcnRfdG9fYnVzKCkuICAoZW5hYmxlcyBkcml2ZXIgdG8gd29yayB3LyBpYTY0IHN5c3RlbXMgd2l0aCA+MkdiIFJBTS4pCisgICAgIFJld29yayBtYWluIHNjYXR0ZXItZ2F0aGVyIGNvZGUgdG8gaGFuZGxlIGNhc2VzIHdoZXJlIFNHIGVsZW1lbnQKKyAgICAgbGVuZ3RocyBhcmUgbGFyZ2VyIHRoYW4gMHg3RkZGRiBieXRlcyBhbmQgdXNlIGFzIG1hbnkgc2NhdHRlciAKKyAgICAgZ2F0aGVyIHBhZ2VzIGFzIG5lY2Vzc2FyeS4gKFN0ZXZlIENhbWVyb24pCisgICAqIE1ha2VmaWxlIGNoYW5nZXMgdG8gYnJpbmcgY3BxZmMgaW50byBsaW5lIHcvIHJlc3Qgb2YgU0NTSSBkcml2ZXJzCisgICAgICh0aGFua3MgdG8gS2VpdGggT3dlbnMpCisKK1ZlciAyLjAuNSAgQXVnIDA2LCAyMDAxCisgICAqIFJlamVjdCBub24tZXhpc3RlbnQgbHVucyBpbiB0aGUgZHJpdmVyIHJhdGhlciB0aGFuIGxldHRpbmcgdGhlIAorICAgICBoYXJkd2FyZSBkbyBpdC4gIChzb21lIEhXIGJlaGF2ZXMgZGlmZmVyZW50bHkgdGhhbiBvdGhlcnMgaW4gdGhpcyBhcmVhLikKKyAgICogQ2hhbmdlZCBNYWtlZmlsZSB0byByZWx5IG9uICJtYWtlIGRlcCIgaW5zdGVhZCBvZiBleHBsaWNpdCBkZXBlbmRlbmNpZXMKKyAgICogaWZkZWYnZWQgb3V0IGZpYnJlIGNoYW5uZWwgYW5hbHl6ZXIgdHJpZ2dlcmluZyBkZWJ1ZyBjb2RlCisgICAqIGZpeGVkIGEgamlmZmllcyB3cmFwcGluZyBpc3N1ZQorCitWZXIgMi4wLjQgIEF1ZyAwMSwgMjAwMQorICAgKiBJbmNvcnBvcmF0ZWQgZml4IGZvciB0YXJnZXQgZGV2aWNlIHJlc2V0IGZyb20gU3RlZWxleWUKKyAgICogRml4ZWQgcGFzc3Rocm91Z2ggaW9jdGwgc28gaXQgZG9lc24ndCBoYW5nLgorICAgKiBGaXhlZCBoYW5nIGluIGxhdW5jaF9GQ3dvcmtlcl90aHJlYWQoKSB0aGF0IG9jY3VycmVkIG9uIHNvbWUgbWFjaGluZXMuCisgICAqIEF2b2lkIHByb2JsZW0gd2hlbiBudW1iZXIgb2Ygdm9sdW1lcyBpbiBhIHNpbmdsZSBjYWJpbmV0ID4gOAorCitWZXIgMi4wLjIgIEp1bHkgMjMsIDIwMDEKKyAgIENoYW5nZWQgdGhlIHNlbWlwaG9yZSBjaGFuZ2VzIHNvIHRoZSBkcml2ZXIgd291bGQgY29tcGlsZSBpbiAyLjQuNy4gCisgICBUaGlzIHZlcnNpb24gaXMgZm9yIDIuNC43IGFuZCBiZXlvbmQuIAorIAorVmVyIDIuMC4xICBNYXkgCTcsIDIwMDEKKyAgIE1lcmdlZCB2ZXJzaW9uIDEuMy42IGZpeGVzIGludG8gdmVyc2lvbiAyLjAuMC4gICAKKworVmVyIDIuMC4wICBNYXkgICA3LCAyMDAxCisgIEZpeGVkIHByb2JsZW0gc28gc3BpbmxvY2sgaXMgYmVpbmcgaW5pdGlhbGl6ZWQgdG8gVU5MT0NLRUQuIAorICBGaXhlZCB1cGRhdGVkIGRyaXZlciBzbyBpdCBjb21waWxlcyBpbiB0aGUgMi40IHRyZWUuIAorIAorIFZlciAxLjMuNiAgRmViICAyNywgMjAwMQorICAgQWRkZWQgVGFyZ2V0X0RldmljZV9SZXNldCBmdW5jdGlvbiBmb3IgU0NTSSBlcnJvciBoYW5kbGluZworICAgRml4ZWQgcHJvYmxlbSB3aXRoIG5vdCByZXNldGluZyBhZGRyZXNzaW5nIG1vZGUgYWZ0ZXIgaW1wbGljaXQgbG9nb3V0CisgCisKK1ZlciAxLjMuNCAgU2VwICAgNywgMjAwMAorICBBZGRlZCBNb2RpbmZvIGluZm9ybWF0aW9uCisgIEZpeGVkIHByb2JsZW0gd2l0aCBzdGF0aWNhbGx5IGxpbmtpbmcgdGhlIGRyaXZlcgorCitWZXIgMS4zLjMsIEF1ZyAgMjMsIDIwMDAKKyAgRml4ZWQgZGV2aWNlL2Z1bmN0aW9uIG51bWJlciBpbiBpb2N0bAorCitWZXIgMS4zLjIsIEp1bHkgMjcsIDIwMDAKKyAgQWRkIGluY2x1ZGUgZm9yIEFscGhhIGNvbXBpbGUgb24gMi4yLjE0IGtlcm5lbCAoY3BxKmkyYy5jKQorICBDaGFuZ2UgbG9naWMgZm9yIGRpZmZlcmVudCBGQ1AtUlNQIHNlbnNlX2J1ZmZlciBsb2NhdGlvbiBmb3IgSFNHODAgdGFyZ2V0CisgIEFuZCBzZWFyY2ggZm9yIEFnaWxlbnQgVGFjaHlvbiBYTDIgSEJBcyAobm90IGZpbmlzaGVkISAtIGluIHRlc3QpCisKK1Rlc3RlZCB3aXRoIAorKHN0b3JhZ2UpOgorICAgICAgICAgICBDb21wYXEgUkEtNHgwMDAsIFJBSUQgZmlybXdhcmUgdmVyIDIuNDAgLSAyLjU0CisgICAgICAgICAgIFNlYWdhdGUgRkMgZHJpdmVzIG1vZGVsIFNUMzkxMDJGQywgcmV2IDAwMDYKKyAgICAgICAgICAgSGl0YWNoaSBESzMxQ0otNzJGQyByZXYgSjhBOAorICAgICAgICAgICBJQk0gRERZRi1UMTgzNTBSIHJldiBGNjBLCisgICAgICAgICAgIENvbXBhcSBGQy1TQ1NJIGJyaWRnZSB3LyBETFQgMzUvNzAgR2IgRExUICh0YXBlKQorKHNlcnZlcnMpOgorICAgICAgICAgICBDb21wYXEgUEwtMTg1MFIKKyAgICAgICAgICAgQ29tcGFxIFBMLTY1MDAgWGVvbiAoNDAwTUh6KQorCSAgIENvbXBhcSBQTC04NTAwICg1MDBNSHosIDY2TUh6LCA2NGJpdCBQQ0kpCisgICAgICAgICAgIENvbXBhcSBBbHBoYSBEUzIwIChSSCA2LjEpCisoaHVicyk6CisgICAgICAgICAgIFZpeGVsIFJhcHBvcnQgMTAwMCAoNy1wb3J0ICJkdW1iIikKKwkgICBHYWR6b294IEdpYnJhbHRlciAoMTItcG9ydCAiZHVtYiIpCisJICAgR2Fkem9veCBDYXBlbGxpeCAyMDAwLCAzMDAwIAorKHN3aXRjaGVzKToKKyAgICAgICAgICAgQnJvY2FkZSAyMDEwLCAyNDAwLCAyODAwLCByZXYgMi4wLjNhICgmIGxhdGVyKQorICAgICAgICAgICBHYWR6b294IDMyMTAgKEZhYnJpYyBibGFkZSBiZXRhKQorICAgICAgICAgICBWaXhlbCA3MTAwIChGYWJyaWMgYmV0YSBmaXJtYXJlIC0ga25vd24gaG90IHBsdWcgaXNzdWVzKQordXNpbmcgInFhX3Rlc3QiIChlc3AuIGlvX3Rlc3Qgc2NyaXB0KSBzdWl0ZSBtb2RpZmllZCBmcm9tIFVuaXggdGVzdHMuCisJCitJbnN0YWxsYXRpb246CittYWtlIG1lbnVjb25maWcKKyAgKHNlbGVjdCBTQ1NJIGxvdy1sZXZlbCwgQ29tcGFxIEZDIEhCQSkKK21ha2UgbW9kdWxlcworbWFrZSBtb2R1bGVzX2luc3RhbGwKKworZS5nLiBpbnNtb2QgLWYgY3BxZmMKKworRHVlIHRvIEZhYnJpYy9zd2l0Y2ggZGVsYXlzLCBkcml2ZXIgcmVxdWlyZXMgNCBzZWNvbmRzIAordG8gaW5pdGlhbGl6ZS4gIElmIGFkYXB0ZXJzIGFyZSBmb3VuZCwgdGhlcmUgd2lsbCBiZSBhIGVudHJpZXMgYXQKKy9wcm9jL3Njc2kvY3BxZmNUUy8qCisKK3NhbXBsZSBjb250ZW50cyBvZiBzdGFydHVwIG1lc3NhZ2VzCisKKyoqKioqKioqKioqKioqKioqKioqKioqKioKKyBzY3NpX3JlZ2lzdGVyIGFsbG9jYXRpbmcgMzU5NiBieXRlcyBmb3IgQ1BRRkNIQkEKKyBpb3JlbWFwJ2QgTWVtYmFzZTogYzg4N2U2MDAKKyAgSEJBIFRhY2h5b24gUmV2SWQgMS4yCitBbGxvY2F0aW5nIDExOTgwOCBmb3IgNTc2IEV4Y2hhbmdlcyBAIGMwZGMwMDAwCitBbGxvY2F0aW5nIDExMjkwNCBmb3IgTGlua1EgQCBjMGMyMDAwMCAoNTc2IGVsZW1lbnRzKQorQWxsb2NhdGluZyAxMTA2MDAgZm9yIFRhY2hTRVNUIGZvciA1MTIgRXhjaGFuZ2VzCisgIGNwcWZjVFM6IHdyaXRpbmcgSU1RIEJBU0UgN0MwMDAwaCAgICBQSSA3QzQwMDBoCisgIGNwcWZjVFM6IFNFU1QgYzBlNDAwMDAodmlydCk6IFdyb3RlIGJhc2UgRTQwMDAwaCBAIGM4ODdlNzQwCitjcHFmY1RTOiBOZXcgRkMgcG9ydCAwMDAwRThoIFdXTjogNTAwNTA3NjUwNjQyNDk5RCBTQ1NJIENoYW4vVHJndCAwLzAKK2NwcWZjVFM6IE5ldyBGQyBwb3J0IDAwMDBFRmggV1dOOiA1MDAwMEUxMDAwMDBENUE2IFNDU0kgQ2hhbi9Ucmd0IDAvMQorY3BxZmNUUzogTmV3IEZDIHBvcnQgMDAwMEU0aCBXV046IDIxMDAwMDIwMzcwMDk3QkIgU0NTSSBDaGFuL1RyZ3QgMC8yCitjcHFmY1RTOiBOZXcgRkMgcG9ydCAwMDAwRTJoIFdXTjogMjEwMDAwMjAzNzAwOTk0NiBTQ1NJIENoYW4vVHJndCAwLzMKK2NwcWZjVFM6IE5ldyBGQyBwb3J0IDAwMDBFMWggV1dOOiAyMTAwMDAyMDM3MDA5OEZFIFNDU0kgQ2hhbi9Ucmd0IDAvNAorY3BxZmNUUzogTmV3IEZDIHBvcnQgMDAwMEUwaCBXV046IDIxMDAwMDIwMzcwMDk3QjIgU0NTSSBDaGFuL1RyZ3QgMC81CitjcHFmY1RTOiBOZXcgRkMgcG9ydCAwMDAwRENoIFdXTjogMjEwMDAwMjAzNzAwNkNDMSBTQ1NJIENoYW4vVHJndCAwLzYKK2NwcWZjVFM6IE5ldyBGQyBwb3J0IDAwMDBEQWggV1dOOiAyMTAwMDAyMDM3MDA1OUY2IFNDU0kgQ2hhbi9Ucmd0IDAvNworY3BxZmNUUzogTmV3IEZDIHBvcnQgMDAwMDBGaCBXV046IDUwMDgwNUYxRkFEQjBFMjAgU0NTSSBDaGFuL1RyZ3QgMC84CitjcHFmY1RTOiBOZXcgRkMgcG9ydCAwMDAwMDhoIFdXTjogNTAwODA1RjFGQURCMEVCQSBTQ1NJIENoYW4vVHJndCAwLzkKK2NwcWZjVFM6IE5ldyBGQyBwb3J0IDAwMDAwNGggV1dOOiA1MDA4MDVGMUZBREIxRUI5IFNDU0kgQ2hhbi9Ucmd0IDAvMTAKK2NwcWZjVFM6IE5ldyBGQyBwb3J0IDAwMDAwMmggV1dOOiA1MDA4MDVGMUZBREIxQURFIFNDU0kgQ2hhbi9Ucmd0IDAvMTEKK2NwcWZjVFM6IE5ldyBGQyBwb3J0IDAwMDAwMWggV1dOOiA1MDA4MDVGMUZBREJBMkNBIFNDU0kgQ2hhbi9Ucmd0IDAvMTIKK3Njc2k0IDogQ29tcGFxIEZpYnJlQ2hhbm5lbCBIQkEgVGFjaHlvbiBUUyBIUEZDLTUxNjZBLzEuMjogV1dOIDUwMDUwOEIyMDAxOTNGNTAKKyBvbiBQQ0kgYnVzIDAgZGV2aWNlIDB4YTBmYyBpcnEgNSBJT2Jhc2VMIDB4MzQwMCwgTUVNQkFTRSAweGM2ZWY4NjAwCitQQ0kgYnVzIHdpZHRoIDMyIGJpdHMsIGJ1cyBzcGVlZCAzMyBNSHoKK0ZDUC1TQ1NJIERyaXZlciB2MS4zLjAKK0dCSUMgZGV0ZWN0ZWQ6IFNob3J0LXdhdmUuICBMUFNNIDBoIE1vbml0b3IKK3Njc2kgOiA1IGhvc3RzLgorICBWZW5kb3I6IElCTSAgICAgICBNb2RlbDogRERZRi1UMTgzNTBSICAgICAgUmV2OiBGNjBLCisgIFR5cGU6ICAgRGlyZWN0LUFjY2VzcyAgICAgICAgICAgICAgICAgICAgICBBTlNJIFNDU0kgcmV2aXNpb246IDAzCitEZXRlY3RlZCBzY3NpIGRpc2sgc2RiIGF0IHNjc2k0LCBjaGFubmVsIDAsIGlkIDAsIGx1biAwCisgIFZlbmRvcjogSElUQUNISSAgIE1vZGVsOiBESzMxQ0otNzJGQyAgICAgICBSZXY6IEo4QTgKKyAgVHlwZTogICBEaXJlY3QtQWNjZXNzICAgICAgICAgICAgICAgICAgICAgIEFOU0kgU0NTSSByZXZpc2lvbjogMDIKK0RldGVjdGVkIHNjc2kgZGlzayBzZGMgYXQgc2NzaTQsIGNoYW5uZWwgMCwgaWQgMSwgbHVuIDAKKyAgVmVuZG9yOiBTRUFHQVRFICAgTW9kZWw6IFNUMzkxMDJGQyAgICAgICAgIFJldjogMDAwNgorICBUeXBlOiAgIERpcmVjdC1BY2Nlc3MgICAgICAgICAgICAgICAgICAgICAgQU5TSSBTQ1NJIHJldmlzaW9uOiAwMgorRGV0ZWN0ZWQgc2NzaSBkaXNrIHNkZCBhdCBzY3NpNCwgY2hhbm5lbCAwLCBpZCAyLCBsdW4gMAorICBWZW5kb3I6IFNFQUdBVEUgICBNb2RlbDogU1QzOTEwMkZDICAgICAgICAgUmV2OiAwMDA2CisgIFR5cGU6ICAgRGlyZWN0LUFjY2VzcyAgICAgICAgICAgICAgICAgICAgICBBTlNJIFNDU0kgcmV2aXNpb246IDAyCitEZXRlY3RlZCBzY3NpIGRpc2sgc2RlIGF0IHNjc2k0LCBjaGFubmVsIDAsIGlkIDMsIGx1biAwCisgIFZlbmRvcjogU0VBR0FURSAgIE1vZGVsOiBTVDM5MTAyRkMgICAgICAgICBSZXY6IDAwMDYKKyAgVHlwZTogICBEaXJlY3QtQWNjZXNzICAgICAgICAgICAgICAgICAgICAgIEFOU0kgU0NTSSByZXZpc2lvbjogMDIKK0RldGVjdGVkIHNjc2kgZGlzayBzZGYgYXQgc2NzaTQsIGNoYW5uZWwgMCwgaWQgNCwgbHVuIDAKKyAgVmVuZG9yOiBTRUFHQVRFICAgTW9kZWw6IFNUMzkxMDJGQyAgICAgICAgIFJldjogMDAwNgorICBUeXBlOiAgIERpcmVjdC1BY2Nlc3MgICAgICAgICAgICAgICAgICAgICAgQU5TSSBTQ1NJIHJldmlzaW9uOiAwMgorRGV0ZWN0ZWQgc2NzaSBkaXNrIHNkZyBhdCBzY3NpNCwgY2hhbm5lbCAwLCBpZCA1LCBsdW4gMAorICBWZW5kb3I6IFNFQUdBVEUgICBNb2RlbDogU1QzOTEwMkZDICAgICAgICAgUmV2OiAwMDA2CisgIFR5cGU6ICAgRGlyZWN0LUFjY2VzcyAgICAgICAgICAgICAgICAgICAgICBBTlNJIFNDU0kgcmV2aXNpb246IDAyCitEZXRlY3RlZCBzY3NpIGRpc2sgc2RoIGF0IHNjc2k0LCBjaGFubmVsIDAsIGlkIDYsIGx1biAwCisgIFZlbmRvcjogU0VBR0FURSAgIE1vZGVsOiBTVDM5MTAyRkMgICAgICAgICBSZXY6IDAwMDYKKyAgVHlwZTogICBEaXJlY3QtQWNjZXNzICAgICAgICAgICAgICAgICAgICAgIEFOU0kgU0NTSSByZXZpc2lvbjogMDIKK0RldGVjdGVkIHNjc2kgZGlzayBzZGkgYXQgc2NzaTQsIGNoYW5uZWwgMCwgaWQgNywgbHVuIDAKKyAgVmVuZG9yOiBDT01QQVEgICAgTW9kZWw6IExPR0lDQUwgVk9MVU1FICAgIFJldjogMi40OAorICBUeXBlOiAgIERpcmVjdC1BY2Nlc3MgICAgICAgICAgICAgICAgICAgICAgQU5TSSBTQ1NJIHJldmlzaW9uOiAwMgorRGV0ZWN0ZWQgc2NzaSBkaXNrIHNkaiBhdCBzY3NpNCwgY2hhbm5lbCAwLCBpZCA4LCBsdW4gMAorICBWZW5kb3I6IENPTVBBUSAgICBNb2RlbDogTE9HSUNBTCBWT0xVTUUgICAgUmV2OiAyLjQ4CisgIFR5cGU6ICAgRGlyZWN0LUFjY2VzcyAgICAgICAgICAgICAgICAgICAgICBBTlNJIFNDU0kgcmV2aXNpb246IDAyCitEZXRlY3RlZCBzY3NpIGRpc2sgc2RrIGF0IHNjc2k0LCBjaGFubmVsIDAsIGlkIDgsIGx1biAxCisgIFZlbmRvcjogQ09NUEFRICAgIE1vZGVsOiBMT0dJQ0FMIFZPTFVNRSAgICBSZXY6IDIuNDAKKyAgVHlwZTogICBEaXJlY3QtQWNjZXNzICAgICAgICAgICAgICAgICAgICAgIEFOU0kgU0NTSSByZXZpc2lvbjogMDIKK0RldGVjdGVkIHNjc2kgZGlzayBzZGwgYXQgc2NzaTQsIGNoYW5uZWwgMCwgaWQgOSwgbHVuIDAKKyAgVmVuZG9yOiBDT01QQVEgICAgTW9kZWw6IExPR0lDQUwgVk9MVU1FICAgIFJldjogMi40MAorICBUeXBlOiAgIERpcmVjdC1BY2Nlc3MgICAgICAgICAgICAgICAgICAgICAgQU5TSSBTQ1NJIHJldmlzaW9uOiAwMgorRGV0ZWN0ZWQgc2NzaSBkaXNrIHNkbSBhdCBzY3NpNCwgY2hhbm5lbCAwLCBpZCA5LCBsdW4gMQorICBWZW5kb3I6IENPTVBBUSAgICBNb2RlbDogTE9HSUNBTCBWT0xVTUUgICAgUmV2OiAyLjU0CisgIFR5cGU6ICAgRGlyZWN0LUFjY2VzcyAgICAgICAgICAgICAgICAgICAgICBBTlNJIFNDU0kgcmV2aXNpb246IDAyCitEZXRlY3RlZCBzY3NpIGRpc2sgc2RuIGF0IHNjc2k0LCBjaGFubmVsIDAsIGlkIDEwLCBsdW4gMAorICBWZW5kb3I6IENPTVBBUSAgICBNb2RlbDogTE9HSUNBTCBWT0xVTUUgICAgUmV2OiAyLjU0CisgIFR5cGU6ICAgRGlyZWN0LUFjY2VzcyAgICAgICAgICAgICAgICAgICAgICBBTlNJIFNDU0kgcmV2aXNpb246IDAyCitEZXRlY3RlZCBzY3NpIGRpc2sgc2RvIGF0IHNjc2k0LCBjaGFubmVsIDAsIGlkIDExLCBsdW4gMAorICBWZW5kb3I6IENPTVBBUSAgICBNb2RlbDogTE9HSUNBTCBWT0xVTUUgICAgUmV2OiAyLjU0CisgIFR5cGU6ICAgRGlyZWN0LUFjY2VzcyAgICAgICAgICAgICAgICAgICAgICBBTlNJIFNDU0kgcmV2aXNpb246IDAyCitEZXRlY3RlZCBzY3NpIGRpc2sgc2RwIGF0IHNjc2k0LCBjaGFubmVsIDAsIGlkIDExLCBsdW4gMQorICBWZW5kb3I6IENPTVBBUSAgICBNb2RlbDogTE9HSUNBTCBWT0xVTUUgICAgUmV2OiAyLjU0CisgIFR5cGU6ICAgRGlyZWN0LUFjY2VzcyAgICAgICAgICAgICAgICAgICAgICBBTlNJIFNDU0kgcmV2aXNpb246IDAyCitEZXRlY3RlZCBzY3NpIGRpc2sgc2RxIGF0IHNjc2k0LCBjaGFubmVsIDAsIGlkIDEyLCBsdW4gMAorICBWZW5kb3I6IENPTVBBUSAgICBNb2RlbDogTE9HSUNBTCBWT0xVTUUgICAgUmV2OiAyLjU0CisgIFR5cGU6ICAgRGlyZWN0LUFjY2VzcyAgICAgICAgICAgICAgICAgICAgICBBTlNJIFNDU0kgcmV2aXNpb246IDAyCitEZXRlY3RlZCBzY3NpIGRpc2sgc2RyIGF0IHNjc2k0LCBjaGFubmVsIDAsIGlkIDEyLCBsdW4gMQorcmVzaXplX2RtYV9wb29sOiB1bmtub3duIGRldmljZSB0eXBlIDEyCityZXNpemVfZG1hX3Bvb2w6IHVua25vd24gZGV2aWNlIHR5cGUgMTIKK1NDU0kgZGV2aWNlIHNkYjogaGR3ciBzZWN0b3I9IDUxMiBieXRlcy4gU2VjdG9ycz0gMzU4NDM2NzAgWzE3NTAxIE1CXSBbMTcuNSBHQl0KKyBzZGI6IHNkYjEKK1NDU0kgZGV2aWNlIHNkYzogaGR3ciBzZWN0b3I9IDUxMiBieXRlcy4gU2VjdG9ycz0gMTQ0NDEwODgwIFs3MDUxMyBNQl0gWzcwLjUgR0JdCisgc2RjOiBzZGMxCitTQ1NJIGRldmljZSBzZGQ6IGhkd3Igc2VjdG9yPSA1MTIgYnl0ZXMuIFNlY3RvcnM9IDE3NzgzMjQwIFs4NjgzIE1CXSBbOC43IEdCXQorIHNkZDogc2RkMQorU0NTSSBkZXZpY2Ugc2RlOiBoZHdyIHNlY3Rvcj0gNTEyIGJ5dGVzLiBTZWN0b3JzPSAxNzc4MzI0MCBbODY4MyBNQl0gWzguNyBHQl0KKyBzZGU6IHNkZTEKK1NDU0kgZGV2aWNlIHNkZjogaGR3ciBzZWN0b3I9IDUxMiBieXRlcy4gU2VjdG9ycz0gMTc3ODMyNDAgWzg2ODMgTUJdIFs4LjcgR0JdCisgc2RmOiBzZGYxCitTQ1NJIGRldmljZSBzZGc6IGhkd3Igc2VjdG9yPSA1MTIgYnl0ZXMuIFNlY3RvcnM9IDE3NzgzMjQwIFs4NjgzIE1CXSBbOC43IEdCXQorIHNkZzogc2RnMQorU0NTSSBkZXZpY2Ugc2RoOiBoZHdyIHNlY3Rvcj0gNTEyIGJ5dGVzLiBTZWN0b3JzPSAxNzc4MzI0MCBbODY4MyBNQl0gWzguNyBHQl0KKyBzZGg6IHNkaDEKK1NDU0kgZGV2aWNlIHNkaTogaGR3ciBzZWN0b3I9IDUxMiBieXRlcy4gU2VjdG9ycz0gMTc3ODMyNDAgWzg2ODMgTUJdIFs4LjcgR0JdCisgc2RpOiBzZGkxCitTQ1NJIGRldmljZSBzZGo6IGhkd3Igc2VjdG9yPSA1MTIgYnl0ZXMuIFNlY3RvcnM9IDIwNTYxNjAgWzEwMDMgTUJdIFsxLjAgR0JdCisgc2RqOiBzZGoxCitTQ1NJIGRldmljZSBzZGs6IGhkd3Igc2VjdG9yPSA1MTIgYnl0ZXMuIFNlY3RvcnM9IDIwNTI3MzYgWzEwMDIgTUJdIFsxLjAgR0JdCisgc2RrOiBzZGsxCitTQ1NJIGRldmljZSBzZGw6IGhkd3Igc2VjdG9yPSA1MTIgYnl0ZXMuIFNlY3RvcnM9IDE3NzY0MzIwIFs4NjczIE1CXSBbOC43IEdCXQorIHNkbDogc2RsMQorU0NTSSBkZXZpY2Ugc2RtOiBoZHdyIHNlY3Rvcj0gNTEyIGJ5dGVzLiBTZWN0b3JzPSA4MzgwMzIwIFs0MDkxIE1CXSBbNC4xIEdCXQorIHNkbTogc2RtMQorU0NTSSBkZXZpY2Ugc2RuOiBoZHdyIHNlY3Rvcj0gNTEyIGJ5dGVzLiBTZWN0b3JzPSAxNzc2NDMyMCBbODY3MyBNQl0gWzguNyBHQl0KKyBzZG46IHNkbjEKK1NDU0kgZGV2aWNlIHNkbzogaGR3ciBzZWN0b3I9IDUxMiBieXRlcy4gU2VjdG9ycz0gMTc3NjQzMjAgWzg2NzMgTUJdIFs4LjcgR0JdCisgc2RvOiBzZG8xCitTQ1NJIGRldmljZSBzZHA6IGhkd3Igc2VjdG9yPSA1MTIgYnl0ZXMuIFNlY3RvcnM9IDE3NzY0MzIwIFs4NjczIE1CXSBbOC43IEdCXQorIHNkcDogc2RwMQorU0NTSSBkZXZpY2Ugc2RxOiBoZHdyIHNlY3Rvcj0gNTEyIGJ5dGVzLiBTZWN0b3JzPSAyMDU2MTYwIFsxMDAzIE1CXSBbMS4wIEdCXQorIHNkcTogc2RxMQorU0NTSSBkZXZpY2Ugc2RyOiBoZHdyIHNlY3Rvcj0gNTEyIGJ5dGVzLiBTZWN0b3JzPSAyMDUyNzM2IFsxMDAyIE1CXSBbMS4wIEdCXQorIHNkcjogc2RyMQorCisqKioqKioqKioqKioqKioqKioqKioqKioqCisKK0lmIGEgR0JJQyBvZiB0eXBlIFNob3J0LXdhdmUsIExvbmctd2F2ZSwgb3IgQ29wcGVyIGlzIGRldGVjdGVkLCBpdCB3aWxsCitwcmludCBvdXQ7IG90aGVyd2lzZSwgIm5vbmUiIGlzIGRpc3BsYXllZC4gIElmIHRoZSBjYWJsaW5nIGlzIGNvcnJlY3QKK2FuZCBhIGxvb3AgY2lyY3VpdCBpcyBjb21wbGV0ZWQsIHlvdSBzaG91bGQgc2VlICJNb25pdG9yIjsgb3RoZXJ3aXNlLCAKKyJMb29wRmFpbCIgKG9uIG9wZW4gY2lyY3VpdCkgb3Igc29tZSBMUFNNIG51bWJlci9zdGF0ZSB3aXRoIGJpdCAzIHNldC4KKworCitFUlJBVEE6CisxLiBOb3JtYWxseSwgTGludXggU2NzaSBxdWVyaWVzIEZDIGRldmljZXMgd2l0aCBJTlFVSVJZIHN0cmluZ3MuICBBbGwgTFVOcworZm91bmQgYWNjb3JkaW5nIHRvIElOUVVJUlkgc2hvdWxkIGdldCBSRUFEIGNvbW1hbmRzIGF0IHNlY3RvciAwIHRvIGZpbmQKK3BhcnRpdGlvbiB0YWJsZSwgZXRjLiAgT2xkZXIga2VybmVscyBvbmx5IHF1ZXJ5IHRoZSBmaXJzdCA0IGRldmljZXMuICBTb21lCitMaW51eCBrZXJuZWxzIG9ubHkgbG9vayBmb3Igb25lIExVTiBwZXIgdGFyZ2V0IChpLmUuIEZDIGRldmljZSkuCisKKzIuIFBoeXNpY2FsbHkgcmVtb3ZpbmcgYSBkZXZpY2UsIG9yIGEgbWFsZnVuY3Rpb25pbmcgc3lzdGVtIHdoaWNoIGhpZGVzIGEKK2RldmljZSwgbGVhZHMgdG8gYSAzMC1zZWNvbmQgdGltZW91dCBhbmQgc3Vic2VxdWVudCBfYWJvcnQgY2FsbC4gIAorSW4gc29tZSBwcm9jZXNzIGNvbnRleHRzLCB0aGlzIHdpbGwgaGFuZyB0aGUga2VybmVsIChjcmFzaGluZyB0aGUgc3lzdGVtKS4KK1NpbmdsZSBiaXQgZXJyb3JzIGluIGZyYW1lcyBhbmQgdmlydHVhbGx5IGFsbCBob3QgcGx1Z2dpbmcgZXZlbnRzIGFyZSAKK2dyYWNlZnVsbHkgaGFuZGxlZCB3aXRoIGludGVybmFsIGRyaXZlciB0aW1lciBhbmQgQWJvcnQgcHJvY2Vzc2luZy4KKworMy4gU29tZSBTQ1NJIGRyaXZlcyB3aXRoIGVycm9yIGNvbmRpdGlvbnMgd2lsbCBub3QgaGFuZGxlIHRoZSA3IHNlY29uZCB0aW1lb3V0CitpbiB0aGlzIHNvZnR3YXJlIGRyaXZlciwgbGVhZGluZyB0byBpbmZpbml0ZSByZXRyaWVzIG9uIHRpbWVkIG91dCBTQ1NJIGNvbW1hbmRzLgorVGhlIDcgc2VjcyBiYWxhbmNlcyB0aGUgbmVlZCB0byBxdWlja2x5IHJlY292ZXIgZnJvbSBsb3N0IGZyYW1lcyAoZXNwLiBvbiBzZXF1ZW5jZQoraW5pdGlhdGl2ZXMpIGFuZCB0aW1lIG5lZWRlZCBieSBvbGRlci9zbG93ZXIvZXJyb3Itc3RhdGUgZHJpdmVzIGluIHJlc3BvbmRpbmcuCitUaGlzIGNhbiBiZSBlYXNpbHkgY2hhbmdlZCBpbiAiRXhjaGFuZ2VzW10udGltZU91dCIuCisKKzQuIER1ZSB0byB0aGUgbmF0dXJlIG9mIEZDIHNvZnQgYWRkcmVzc2luZywgdGhlcmUgaXMgbm8gYXNzdXJhbmNlIHRoYXQgdGhlIAorc2FtZSBMVU5zIChkcml2ZXMpIHdpbGwgaGF2ZSB0aGUgc2FtZSBwYXRoIChlLmcuIC9kZXYvc2RiMSkgZnJvbSBvbmUgYm9vdCB0bworbmV4dC4gIER5bmFtaWMgc29mdCBhZGRyZXNzIGNoYW5nZXMgKGkuZS4gMjQtYml0IEZDIHBvcnRfaWQpIGFyZQorc3VwcG9ydGVkIGR1cmluZyBydW4gdGltZSAoZS5nLiBkdWUgdG8gaG90IHBsdWcgZXZlbnQpIGJ5IHRoZSB1c2Ugb2YgV1dOIHRvCitTQ1NJIE5leHVzIChjaGFubmVsL3RhcmdldC9MVU4pIG1hcHBpbmcuCisKKzUuIENvbXBhcSBSQTR4MDAgZmlybXdhcmUgdmVyc2lvbiAyLjU0IGFuZCBsYXRlciBzdXBwb3J0cyBTU1AgKFNlbGVjdGl2ZSAKK1N0b3JhZ2UgUHJlc2VudGF0aW9uKSwgd2hpY2ggbWFwcyBMVU5zIHRvIGEgV1dOLiAgSWYgUkE0eDAwIGZpcm13YXJlIHByaW9yCisyLjU0IChlLmcuIG9sZGVyIGNvbnRyb2xsZXIpIGlzIHVzZWQsIG9yIHRoZSBGQyBIQkEgaXMgcmVwbGFjZWQgKGFub3RoZXIgV1dOCitpcyB1c2VkKSwgbG9naWNhbCB2b2x1bWVzIG9uIHRoZSBSQTR4MDAgd2lsbCBubyBsb25nZXIgYmUgdmlzaWJsZS4KKworCitTZW5kIHF1ZXN0aW9ucy9jb21tZW50cyB0bzoKK0FteSBWYW56YW50LUhvZGdlIChmaWJyZWNoYW5uZWxAY29tcGFxLmNvbSkKKwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9zY3NpL2RjMzk1eC50eHQgYi9Eb2N1bWVudGF0aW9uL3Njc2kvZGMzOTV4LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZTNiNzlhCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9zY3NpL2RjMzk1eC50eHQKQEAgLTAsMCArMSwxMDIgQEAKK1JFQURNRSBmaWxlIGZvciB0aGUgZGMzOTV4IFNDU0kgZHJpdmVyCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworU3RhdHVzCistLS0tLS0KK1RoZSBkcml2ZXIgaGFzIGJlZW4gdGVzdGVkIHdpdGggQ0QtUiBhbmQgQ0QtUi9XIGRyaXZlcy4gVGhlc2Ugc2hvdWxkCitiZSBzYWZlIHRvIHVzZS4gVGVzdGluZyB3aXRoIGhhcmQgZGlza3MgaGFzIG5vdCBiZWVuIGRvbmUgdG8gYW55CitncmVhdCBkZWdyZWUgYW5kIGNhdXRpb24gc2hvdWxkIGJlIGV4ZXJjaXNlZCBpZiB5b3Ugd2FudCB0byBhdHRlbXB0Cit0byB1c2UgdGhpcyBkcml2ZXIgd2l0aCBoYXJkIGRpc2tzLgorCitUaGlzIGlzIGEgMi41IG9ubHkgZHJpdmVyLiBGb3IgYSAyLjQgZHJpdmVyIHBsZWFzZSBzZWUgdGhlIG9yaWdpbmFsCitkcml2ZXIgKHdoaWNoIHRoaXMgZHJpdmVyIHN0YXJ0ZWQgZnJvbSkgYXQKK2h0dHA6Ly93d3cuZ2FybG9mZi5kZS9rdXJ0L2xpbnV4L2RjMzk1LworCitQcm9ibGVtcywgcXVlc3Rpb25zIGFuZCBwYXRjaGVzIHNob3VsZCBiZSBzdWJtaXR0ZWQgdG8gdGhlIG1haWxpbmcKK2xpc3QuIERldGFpbHMgb24gdGhlIGxpc3QsIGluY2x1ZGluZyBhcmNoaXZlcywgYXJlIGF2YWlsYWJsZSBhdAoraHR0cDovL2xpc3RzLnR3aWJibGUub3JnL21haWxtYW4vbGlzdGluZm8vZGMzOTV4LworCitQYXJhbWV0ZXJzCistLS0tLS0tLS0tCitUaGUgZHJpdmVyIHVzZXMgdGhlIHNldHRpbmdzIGZyb20gdGhlIEVFUFJPTSBzZXQgaW4gdGhlIFNDU0kgQklPUyAKK3NldHVwLiBJZiB0aGVyZSBpcyBubyBFRVBST00sIHRoZSBkcml2ZXIgdXNlcyBkZWZhdWx0IHZhbHVlcy4KK0JvdGggY2FuIGJlIG92ZXJyaWRlbiBieSBjb21tYW5kIGxpbmUgcGFyYW1ldGVycyAobW9kdWxlIG9yIGtlcm5lbAorcGFyYW1ldGVycykuCisKK1RoZSBmb2xsb3dpbmcgcGFyYW1ldGVycyBhcmUgYXZhaWxhYmxlOgorCisgLSBzYWZlCisgICBEZWZhdWx0OiAwLCBBY2NlcHRhYmxlIHZhbHVlczogMCBvciAxCisKKyAgIElmIHNhZmUgaXMgc2V0IHRvIDEgdGhlbiB0aGUgYWRhcHRlciB3aWxsIHVzZSBjb25zZXJ2YXRpdmUKKyAgICgic2FmZSIpIGRlZmF1bHQgc2V0dGluZ3MuIFRoaXMgc2V0czoKKworCQlzaG9ydGN1dCBmb3IgZGMzOTV4PTcsNCw5LDE1LDIsMTAKKworIC0gYWRhcHRlcl9pZAorICAgRGVmYXVsdDogNywgQWNjZXB0YWJsZSB2YWx1ZXM6IDAgdG8gMTUKKworICAgU2V0cyB0aGUgaG9zdCBhZGFwdGVyIFNDU0kgSUQuCisKKyAtIG1heF9zcGVlZAorICAgRGVmYXVsdDogMSwgQWNjZXB0YWJsZSB2YWx1ZTogMCB0byA3CisgICAwID0gMjAgICBNaHoKKyAgIDEgPSAxMi4yIE1oegorICAgMiA9IDEwICAgTWh6CisgICAzID0gOCAgICBNaHoKKyAgIDQgPSA2LjcgIE1oegorICAgNSA9IDUuOCAgSGh6CisgICA2ID0gNSAgICBNaHoKKyAgIDcgPSA0ICAgIE1oegorCisgLSBkZXZfbW9kZQorICAgQml0bWFwIGZvciBkZXZpY2UgY29uZmlndXJhdGlvbgorCisgICBEZXZNb2RlIGJpdCBkZWZpbml0aW9uOgorICAgICAgQml0IFZhbChoZXgpIFZhbChkZWMpICBNZWFuaW5nCisgICAgICAqMCAgICAweDAxICAgICAgIDEgICAgIFBhcml0eSBjaGVjaworICAgICAgKjEgICAgMHgwMiAgICAgICAyICAgICBTeW5jaHJvbm91cyBOZWdvdGlhdGlvbgorICAgICAgKjIgICAgMHgwNCAgICAgICA0ICAgICBEaXNjb25uZWN0aW9uCisgICAgICAqMyAgICAweDA4ICAgICAgIDggICAgIFNlbmQgU3RhcnQgY29tbWFuZCBvbiBzdGFydHVwLiAoTm90IHVzZWQpCisgICAgICAqNCAgICAweDEwICAgICAgMTYgICAgIFRhZ2dlZCBDb21tYW5kIFF1ZXVlaW5nCisgICAgICAqNSAgICAweDIwICAgICAgMzIgICAgIFdpZGUgTmVnb3RpYXRpb24KKworIC0gYWRhcHRlcl9tb2RlCisgICBCaXRtYXAgZm9yIGFkYXB0ZXIgY29uZmlndXJhdGlvbgorCisgICBBZGFwdE1vZGUgYml0IGRlZmluaXRpb24KKyAgICAgIEJpdCBWYWwoaGV4KSBWYWwoZGVjKSAgTWVhbmluZworICAgICAgKjAgICAgMHgwMSAgICAgICAxICAgICBTdXBwb3J0IG1vcmUgdGhhbiB0d28gZHJpdmVzLiAoTm90IHVzZWQpCisgICAgICAqMSAgICAweDAyICAgICAgIDIgICAgIFVzZSBET1MgY29tcGF0aWJsZSBtYXBwaW5nIGZvciBIRHMgZ3JlYXRlciB0aGFuIDFHQi4KKyAgICAgICoyICAgIDB4MDQgICAgICAgNCAgICAgUmVzZXQgU0NTSSBCdXMgb24gc3RhcnR1cC4KKyAgICAgICozICAgIDB4MDggICAgICAgOCAgICAgQWN0aXZlIE5lZ2F0aW9uOiBJbXByb3ZlcyBTQ1NJIEJ1cyBub2lzZSBpbW11bml0eS4KKyAgICAgICA0ICAgIDB4MTAgICAgICAxNiAgICAgSW1tZWRpYXRlIHJldHVybiBvbiBCSU9TIHNlZWsgY29tbWFuZC4gKE5vdCB1c2VkKQorICAgICgqKTUgICAgMHgyMCAgICAgIDMyICAgICBDaGVjayBmb3IgTFVOcyA+PSAxLgorCisgLSB0YWdzCisgICBEZWZhdWx0OiAzLCBBY2NlcHRhYmxlIHZhbHVlczogMC01CisgICAKKyAgIFRoZSBudW1iZXIgb2YgdGFncyBpcyAxPDx4LCBpZiB4IGhhcyBiZWVuIHNwZWNpZmllZAorCisgLSByZXNldF9kZWxheQorICAgRGVmYXVsdDogMSwgQWNjZXB0YWJsZSB2YWx1ZXM6IDAtMTgwCisKKyAgIFRoZSBzZWNvbmRzIHRvIG5vdCBhY2NlcHQgY29tbWFuZHMgYWZ0ZXIgYSBTQ1NJIFJlc2V0CisKKworRm9yIHRoZSBidWlsdCAgaW4gZHJpdmVyIHRoZSBwYXJhbWV0ZXJzIHNob3VsZCBiZSBwcmVmaXhlZCB3aXRoCitkYzM5NXguIChlZyAiZGMzOTV4LnNhZmU9MSIpCisKKworQ29weXJpZ2h0CistLS0tLS0tLS0KK1RoZSBkcml2ZXIgaXMgZnJlZSBzb2Z0d2FyZS4gSXQgaXMgcHJvdGVjdGVkIGJ5IHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKK0xpY2Vuc2UgKEdQTCkuIFBsZWFzZSByZWFkIGl0LCBiZWZvcmUgdXNpbmcgdGhpcyBkcml2ZXIuIEl0IHNob3VsZCBiZQoraW5jbHVkZWQgaW4geW91ciBrZXJuZWwgc291cmNlcyBhbmQgd2l0aCB5b3VyIGRpc3RyaWJ1dGlvbi4gSXQgY2FycmllcyB0aGUKK2ZpbGVuYW1lIENPUFlJTkcuIElmIHlvdSBkb24ndCBoYXZlIGl0LCBwbGVhc2UgYXNrIG1lIHRvIHNlbmQgeW91IG9uZSBieQorZW1haWwuCitOb3RlOiBUaGUgR05VIEdQTCBzYXlzIGFsc28gc29tZXRoaW5nIGFib3V0IHdhcnJhbnR5IGFuZCBsaWFiaWxpdHkuIAorUGxlYXNlIGJlIGF3YXJlIHRoZSBmb2xsb3dpbmc6IFdoaWxlIHdlIGRvIG15IGJlc3QgdG8gcHJvdmlkZSBhIHdvcmtpbmcgYW5kCityZWxpYWJsZSBkcml2ZXIsIHRoZXJlIGlzIGEgY2hhbmNlLCB0aGF0IGl0IHdpbGwga2lsbCB5b3VyIHZhbHVhYmxlIGRhdGEuIAorV2UgcmVmdXNlIHRvIHRha2UgYW55IHJlc3BvbnNpYmlsaXR5IGZvciB0aGF0LiBUaGUgZHJpdmVyIGlzIHByb3ZpZGVkIGFzLWlzCithbmQgWU9VIFVTRSBJVCBBVCBZT1VSIE9XTiBSRVNQT05TSUJJTElUWS4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vc2NzaS9kcHRpLnR4dCBiL0RvY3VtZW50YXRpb24vc2NzaS9kcHRpLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZTQ1ZTcwCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9zY3NpL2RwdGkudHh0CkBAIC0wLDAgKzEsODMgQEAKKyAvKiBURVJNUyBBTkQgQ09ORElUSU9OUyBPRiBVU0UKKyAqIAorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgZm9ybSwgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbiwgYXJlCisgKiBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCByZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlCisgKiBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogCisgKiBUaGlzIHNvZnR3YXJlIGlzIHByb3ZpZGVkIGBhcyBpcycgYnkgQWRhcHRlYyBhbmQKKyAqIGFueSBleHByZXNzIG9yIGltcGxpZWQgd2FycmFudGllcywgaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG8sIHRoZQorICogaW1wbGllZCB3YXJyYW50aWVzIG9mIG1lcmNoYW50YWJpbGl0eSBhbmQgZml0bmVzcyBmb3IgYSBwYXJ0aWN1bGFyIHB1cnBvc2UsCisgKiBhcmUgZGlzY2xhaW1lZC4gSW4gbm8gZXZlbnQgc2hhbGwgQWRhcHRlYyBiZQorICogbGlhYmxlIGZvciBhbnkgZGlyZWN0LCBpbmRpcmVjdCwgaW5jaWRlbnRhbCwgc3BlY2lhbCwgZXhlbXBsYXJ5IG9yCisgKiBjb25zZXF1ZW50aWFsIGRhbWFnZXMgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvLCBwcm9jdXJlbWVudCBvZgorICogc3Vic3RpdHV0ZSBnb29kcyBvciBzZXJ2aWNlczsgbG9zcyBvZiB1c2UsIGRhdGEsIG9yIHByb2ZpdHM7IG9yIGJ1c2luZXNzCisgKiBpbnRlcnJ1cHRpb25zKSBob3dldmVyIGNhdXNlZCBhbmQgb24gYW55IHRoZW9yeSBvZiBsaWFiaWxpdHksIHdoZXRoZXIgaW4KKyAqIGNvbnRyYWN0LCBzdHJpY3QgbGlhYmlsaXR5LCBvciB0b3J0IChpbmNsdWRpbmcgbmVnbGlnZW5jZSBvciBvdGhlcndpc2UpCisgKiBhcmlzaW5nIGluIGFueSB3YXkgb3V0IG9mIHRoZSB1c2Ugb2YgdGhpcyBkcml2ZXIgc29mdHdhcmUsIGV2ZW4gaWYgYWR2aXNlZAorICogb2YgdGhlIHBvc3NpYmlsaXR5IG9mIHN1Y2ggZGFtYWdlLgorICogCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogVGhpcyBkcml2ZXIgc3VwcG9ydHMgdGhlIEFkYXB0ZWMgSTJPIFJBSUQgYW5kIERQVCBTbWFydFJBSUQgViBJMk8gYm9hcmRzLgorICoKKyAqIENSRURJVFM6CisgKiBUaGUgb3JpZ2luYWwgbGludXggZHJpdmVyIHdhcyBwb3J0ZWQgdG8gTGludXggYnkgS2FyZW4gV2hpdGUgd2hpbGUgYXQgCisgKiBEZWxsIENvbXB1dGVyLiAgSXQgd2FzIHBvcnRlZCBmcm9tIEJvYiBQYXN0ZXVyJ3MgKG9mIERQVCkgb3JpZ2luYWwgCisgKiBub24tTGludXggZHJpdmVyLiAgTWFyayBTYWx5enluIGFuZCBCb2IgUGFzdGV1ciBjb25zdWx0ZWQgb24gdGhlIG9yaWdpbmFsCisgKiBkcml2ZXIuIAorICogCisgKiAyLjAgdmVyc2lvbiBvZiB0aGUgZHJpdmVyIGJ5IERlYW5uYSBCb25kcyBhbmQgTWFyayBTYWx5enluLgorICoKKyAqIEhJU1RPUlk6CisgKiBUaGUgZHJpdmVyIHdhcyBvcmlnaW5hbGx5IHBvcnRlZCB0byBsaW51eCB2ZXJzaW9uIDIuMC4zNCAKKyAqCisgKiBWMi4wIFJld3JpdGUgb2YgZHJpdmVyLiAgUmUtYXJjaGl0ZWN0dXJlZCBiYXNlZCBvbiBpMm8gc3Vic3lzdGVtLgorICogICBUaGlzIHdhcyB0aGUgZmlyc3QgZnVsbCBHUEwgdmVyc2lvbiBzaW5jZSB0aGUgbGFzdCB2ZXJzaW9uIHVzZWQKKyAqICAgaTJvc2lnIGhlYWRlcnMgd2hpY2ggd2VyZSBub3QgR1BMLiAgRGV2ZWxvcGVyIFRlc3RpbmcgdmVyc2lvbi4KKyAqIFYyLjEgSW50ZXJuYWwgdGVzdGluZworICogVjIuMiBGaXJzdCByZWxlYXNlZCB2ZXJzaW9uCisgKgorICogVjIuMyAKKyAqICAgQ2hhbmdlczoKKyAqICAgICAgQWRkZWQgUmFwdG9yIFN1cHBvcnQKKyAqICAgICAgRml4ZWQgYnVnIGNhdXNpbmcgc3lzdGVtIHRvIGhhbmcgdW5kZXIgZXh0cmVtZSBsb2FkIHdpdGggCisgKiAgICAgICAgIG1hbmFnZW1lbnQgdXRpbGl0aWVzIHJ1bm5pbmcgKHJlbW92ZWQgR0ZQX0RNQSBmcm9tIGttYWxsb2MgZmxhZ3MpCisgKgorICoKKyAqIFYyLjQgRmlyc3QgdmVyc2lvbiByZWFkeSB0byBiZSBzdWJtaXR0ZWQgdG8gYmUgZW1iZWRkZWQgaW4gdGhlIGtlcm5lbAorICogICBDaGFuZ2VzOiAKKyAqICAgICAgSW1wbGVtZW50ZWQgc3VnZ2VzdGlvbnMgZnJvbSBBbGFuIENveAorICogICAgICBBZGRlZCBjYWxjdWxhdGlvbiBvZiByZXNpZCBmb3Igc2cgbGF5ZXIKKyAqICAgICAgQmV0dGVyIGVycm9yIGhhbmRsaW5nCisgKiAgICAgICAgIEFkZGVkIGNoZWNraW5nIHVuZGVyZmxvdyBjb25kdGlvbnMgCisgKiAgICAgICAgIEFkZGVkIERBVEFQUk9URUNUIGNoZWNraW5nCisgKiAgICAgICAgIENoYW5nZWQgZXJyb3IgcmV0dXJuIGNvZGVzCisgKiAgICAgICAgIEZpeGVkIHBvaW50ZXIgYnVnIGluIGJ1cyByZXNldCByb3V0aW5lCisgKiAgICAgIEVuYWJsZWQgaGJhIHJlc2V0IGZyb20gaW9jdGxzIChhbGxvd3MgYSBGVyBmbGFzaCB0byByZWJvb3QgYW5kIHVzZSB0aGUgbmV3CisgKiAgICAgICAgIEZXIHdpdGhvdXQgaGF2aW5nIHRvIHJlYm9vdCkKKyAqICAgICAgQ2hhbmdlZCBwcm9jIG91dHB1dAorICoKKyAqIFRPRE86CisgKiAgICAgIEFkZCA2NCBiaXQgU2NhdHRlciBHYXRoZXIgd2hlbiBjb21waWxlZCBvbiA2NCBiaXQgYXJjaGl0ZWN0dXJlcworICogICAgICBBZGQgc3BhcnNlIGx1biBzY2FubmluZyAKKyAqICAgICAgQWRkIGNvZGUgdGhhdCBjaGVja3MgaWYgYSBkZXZpY2UgdGhhdCBoYWQgYmVlbiB0YWtlbiBvZmZsaW5lIGlzCisgKiAgICAgICAgIG5vdyBvbmxpbmUgKGF0IHRoZSBGVyBsZXZlbCkgd2hlbiB0ZXN0IHVuaXQgcmVhZHkgb3IgaW5xdWlyeSAKKyAqICAgICAgICAgY29tbWFuZCBmcm9tIHNjc2ktY29yZQorICogICAgICBBZGQgcHJvYyByZWFkIGludGVyZmFjZQorICogICAgICAgICBidXNyZXNjYW4gY29tbWFuZAorICogICAgICAgICByZXNjYW4gY29tbWFuZAorICogICAgICBBZGQgY29kZSB0byByZXNjYW4gcm91dGluZSB0aGF0IG5vdGlmaWVzIHNjc2ktY29yZSBhYm91dCBuZXcgZGV2aWNlcworICogICAgICBBZGQgc3VwcG9ydCBmb3IgQy1QQ0kgKGhvdHBsdWcgc3R1ZmYpCisgKiAgICAgIEFkZCBpb2N0bCBwYXNzdGhydSBlcnJvciByZWNvdmVyeQorICoKKyAqIE5PVEVTOgorICogVGhlIERQVCBjYXJkIG9wdGltaXplcyB0aGUgb3JkZXIgb2YgcHJvY2Vzc2luZyBjb21tYW5kcy4gIENvbnNlcXVlbnRseSwKKyAqIGEgY29tbWFuZCBtYXkgdGFrZSB1cCB0byA2IG1pbnV0ZXMgdG8gY29tcGxldGUgYWZ0ZXIgaXQgaGFzIGJlZW4gc2VudAorICogdG8gdGhlIGJvYXJkLiAgCisgKgorICogVGhlIGZpbGVzIGRwdGlfaW9jdGwuaCBkcHRzaWcuaCBvc2RfZGVmcy5oIG9zZF91dGlsLmggc3lzX2luZm8uaCBhcmUgcGFydCBvZiB0aGUKKyAqIGludGVyZmFjZSBmaWxlcyBmb3IgQWRhcHRlYydzIG1hbmFnZW1lbnQgcm91dGluZXMuICBUaGVzZSBkZWZpbmUgdGhlIHN0cnVjdHVyZXMgdXNlZAorICogaW4gdGhlIGlvY3Rscy4gIFRoZXkgYXJlIHdyaXR0ZW4gdG8gYmUgcG9ydGFibGUuICBUaGV5IGFyZSBoYXJkIHRvIHJlYWQsIGJ1dCBJIG5lZWQKKyAqIHRvIHVzZSB0aGVtICdhcyBpcycgb3IgSSBjYW4gbWlzcyBjaGFuZ2VzIGluIHRoZSBpbnRlcmZhY2UuCisgKgorICovCisKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vc2NzaS9kdGMzeDgwLnR4dCBiL0RvY3VtZW50YXRpb24vc2NzaS9kdGMzeDgwLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lOGFlNjIzCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9zY3NpL2R0YzN4ODAudHh0CkBAIC0wLDAgKzEsNDMgQEAKK1JFQURNRSBmaWxlIGZvciB0aGUgTGludXggRFRDMzE4MC8zMjgwIHNjc2kgZHJpdmVyLgorYnkgUmF5IFZhbiBUYXNzbGUgKHJheXZ0QGNvbW0ubW90LmNvbSkgIE1hcmNoIDE5OTYKK0Jhc2VkIG9uIHRoZSBnZW5lcmljICYgY29yZSBOQ1I1MzgwIGNvZGUgYnkgRHJldyBFY2toYXJkCisKK1NDU0kgZGV2aWNlIGRyaXZlciBmb3IgdGhlIERUQyAzMTgwLzMyODAuCitEYXRhIFRlY2hub2xvZ3kgQ29ycC0tLWEgZGl2aXNpb24gb2YgUXVtZS4KKworVGhlIDMyODAgaGFzIGEgc3RhbmRhcmQgZmxvcHB5IGludGVyZmFjZS4KKworVGhlIDMxODAgZG9lcyBub3QuICBPdGhlcndpc2UsIHRoZXkgYXJlIGlkZW50aWNhbC4KKworVGhlIERUQzN4ODAgZG9lcyBub3Qgc3VwcG9ydCBETUEgYnV0IGl0IGRvZXMgaGF2ZSBQc2V1ZG8tRE1BIHdoaWNoIGlzCitzdXBwb3J0ZWQgYnkgdGhlIGRyaXZlci4KKworSXQncyBEVEM0MDYgc2NzaSBjaGlwIGlzIHN1cHBvc2VkbHkgY29tcGF0aWJsZSB3aXRoIHRoZSBOQ1IgNTNDNDAwLgorSXQgaXMgbWVtb3J5IG1hcHBlZCwgdXNlcyBhbiBJUlEsIGJ1dCBubyBkbWEgb3IgaW8tcG9ydC4gIFRoZXJlIGlzCitpbnRlcm5hbCBETUEsIGJldHdlZW4gU0NTSSBidXMgYW5kIGFuIG9uLWNoaXAgMTI4LWJ5dGUgYnVmZmVyLiAgRG91YmxlCitidWZmZXJpbmcgaXMgZG9uZSBhdXRvbWFnaWNhbGx5IGJ5IHRoZSBjaGlwLiAgRGF0YSBpcyB0cmFuc2ZlcnJlZAorYmV0d2VlbiB0aGUgb24tY2hpcCBidWZmZXIgYW5kIENQVS9SQU0gdmlhIG1lbW9yeSBtb3Zlcy4KKworVGhlIGRyaXZlciBkZXRlY3RzIHRoZSBwb3NzaWJsZSBtZW1vcnkgYWRkcmVzc2VzIChqdW1wZXIgc2VsZWN0YWJsZSk6CisJQ0MwMCwgREMwMCwgQzgwMCwgYW5kIEQ4MDAKK1RoZSBwb3NzaWJsZSBJUlEncyAoanVtcGVyIHNlbGVjdGFibGUpIGFyZToKKwlJUlEgMTAsIDExLCAxMiwgMTUKK1Bhcml0eSBpcyBzdXBwb3J0ZWQgYnkgdGhlIGNoaXAsIGJ1dCBub3QgYnkgdGhpcyBkcml2ZXIuCitJbmZvcm1hdGlvbiBjYW4gYmUgb2J0YWluZWQgZnJvbSAvcHJvYy9zY3NpL2R0YzNjODAvTi4KKworTm90ZSBvbiBpbnRlcnJ1cHRzOgorCitUaGUgZG9jdW1lbnRhdGlvbiBzYXlzIHRoYXQgaXQgY2FuIGJlIHNldCB0byBpbnRlcnJ1cHQgd2hlbmV2ZXIgdGhlCitvbi1jaGlwIGJ1ZmZlciBuZWVkcyBDUFUgYXR0ZW50aW9uLiAgSSBjb3VsZG4ndCBnZXQgdGhpcyB0byB3b3JrLiAgU28KK3RoZSBkcml2ZXIgcG9sbHMgZm9yIGRhdGEtcmVhZHkgaW4gdGhlIHBzZXVkby1ETUEgdHJhbnNmZXIgcm91dGluZS4KK1RoZSBpbnRlcnJ1cHQgc3VwcG9ydCByb3V0aW5lcyBpbiB0aGUgTkNSMzI4MC5jIGNvcmUgbW9kdWxlcyBoYW5kbGUKK3Njc2kgZGlzY29ubmVjdC9yZWNvbm5lY3QsIGFuZCB0aGlzIChtb3N0bHkpIHdvcmtzLiAgSG93ZXZlci4uLi4uICBJCitoYXZlIHRlc3RlZCBpdCB3aXRoIDQgdG90YWxseSBkaWZmZXJlbnQgaGFyZCBkcml2ZXMgKGJvdGggU0NTSS0xIGFuZAorU0NTSS0yKSwgYW5kIG9uZSBDRFJPTSBkcml2ZS4gIEludGVycnVwdHMgd29ya3MgZ3JlYXQgZm9yIGFsbCBidXQgb25lCitzcGVjaWZpYyBoYXJkIGRyaXZlLiAgRm9yIHRoaXMgb25lLCB0aGUgZHJpdmVyIHdpbGwgZXZlbnR1YWxseSBoYW5nIGluCit0aGUgdHJhbnNmZXIgc3RhdGUuICBJIGhhdmUgdGVzdGVkIHdpdGg6ICJkZCBicz00ayBjb3VudD0yaworb2Y9L2Rldi9udWxsIGlmPS9kZXYvc2RiIi4gIEl0IHJlYWRzIG9rIGZvciBhIHdoaWxlLCB0aGVuIGhhbmdzLgorQWZ0ZXIgYmVhdGluZyBteSBoZWFkIGFnYWluc3QgdGhpcyBmb3IgYSBjb3VwbGUgb2Ygd2Vla3MsIGdldHRpbmcKK25vd2hlcmUsIEkgZ2l2ZSB1cC4gIFNvLi4uLi5UaGlzIGRyaXZlciBkb2VzIE5PVCB1c2UgaW50ZXJydXB0cywgZXZlbgoraWYgeW91IGhhdmUgdGhlIGNhcmQganVtcGVyZWQgdG8gYW4gSVJRLiAgUHJvYmFibHkgbm9ib2R5IHdpbGwgZXZlcgorY2FyZS4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vc2NzaS9nX05DUjUzODAudHh0IGIvRG9jdW1lbnRhdGlvbi9zY3NpL2dfTkNSNTM4MC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2I4MGY1NgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vc2NzaS9nX05DUjUzODAudHh0CkBAIC0wLDAgKzEsNjMgQEAKK1JFQURNRSBmaWxlIGZvciB0aGUgTGludXggZ19OQ1I1MzgwIGRyaXZlci4KKworKGMpIDE5OTMgRHJldyBFY2toYXJkCitOQ1I1M2M0MDAgZXh0ZW5zaW9ucyAoYykgMTk5NCwxOTk1LDE5OTYgS2V2aW4gTGVudGluCisKK1RoaXMgZmlsZSBkb2N1bWVudHMgdGhlIE5DUjUzYzQwMCBleHRlbnNpb25zIGJ5IEtldmluIExlbnRpbiBhbmQgc29tZQorZW5oYW5jZW1lbnRzIHRvIHRoZSBOQ1I1MzgwIGNvcmUuCisKK1RoaXMgZHJpdmVyIHN1cHBvcnRzIGJvdGggTkNSNTM4MCBhbmQgTkNSNTNjNDAwIGNhcmRzIGluIHBvcnQgb3IgbWVtb3J5CittYXBwZWQgbW9kZXMuIEN1cnJlbnRseSB0aGlzIGRyaXZlciBjYW4gb25seSBzdXBwb3J0IG9uZSBvZiB0aG9zZSBtYXBwaW5nCittb2RlcyBhdCBhIHRpbWUgYnV0IGl0IGRvZXMgc3VwcG9ydCBib3RoIG9mIHRoZXNlIGNoaXBzIGF0IHRoZSBzYW1lIHRpbWUuCitUaGUgbmV4dCByZWxlYXNlIG9mIHRoaXMgZHJpdmVyIHdpbGwgc3VwcG9ydCBwb3J0ICYgbWVtb3J5IG1hcHBlZCBjYXJkcyBhdAordGhlIHNhbWUgdGltZS4gSXQgc2hvdWxkIGJlIGFibGUgdG8gaGFuZGxlIG11bHRpcGxlIGRpZmZlcmVudCBjYXJkcyBpbiB0aGUKK3NhbWUgbWFjaGluZS4KKworVGhlIGRyaXZlcnMvc2NzaS9NYWtlZmlsZSBoYXMgYW4gb3ZlcnJpZGUgaW4gaXQgZm9yIHRoZSBtb3N0IGNvbW1vbgorTkNSNTNjNDAwIGNhcmQsIHRoZSBUcmFudG9yIFQxMzBCIGluIGl0cyBkZWZhdWx0IGNvbmZpZ3VyYXRpb246CisJUG9ydDogMHgzNTAKKwlJUlEgOiA1CisKK1RoZSBOQ1I1M2M0MDAgZG9lcyBub3Qgc3VwcG9ydCBETUEgYnV0IGl0IGRvZXMgaGF2ZSBQc2V1ZG8tRE1BIHdoaWNoIGlzCitzdXBwb3J0ZWQgYnkgdGhlIGRyaXZlci4KKworSWYgdGhlIGRlZmF1bHQgY29uZmlndXJhdGlvbiBkb2VzIG5vdCB3b3JrIGZvciB5b3UsIHlvdSBjYW4gdXNlIHRoZSBrZXJuZWwKK2NvbW1hbmQgbGluZXMgKGVnIHVzaW5nIHRoZSBsaWxvIGFwcGVuZCBjb21tYW5kKToKKwluY3I1MzgwPXBvcnQsaXJxLGRtYQorCW5jcjUzYzQwMD1wb3J0LGlycQorb3IKKwluY3I1MzgwPWJhc2UsaXJxLGRtYQorCW5jcjUzYzQwMD1iYXNlLGlycQorCitUaGUgZHJpdmVyIGRvZXMgbm90IHByb2JlIGZvciBhbnkgYWRkcmVzc2VzIG9yIHBvcnRzIG90aGVyIHRoYW4gdGhvc2UgaW4KK3RoZSBPVkVSUklERSBvciBnaXZlbiB0byB0aGUga2VybmVsIGFzIGFib3ZlLgorCitUaGlzIGRyaXZlciBwcm92aWRlcyBzb21lIGluZm9ybWF0aW9uIG9uIHdoYXQgaXQgaGFzIGRldGVjdGVkIGluCisvcHJvYy9zY3NpL2dfTkNSNTM4MC94IHdoZXJlIHggaXMgdGhlIHNjc2kgY2FyZCBudW1iZXIgYXMgZGV0ZWN0ZWQgYXQgYm9vdAordGltZS4gTW9yZSBpbmZvIHRvIGNvbWUgaW4gdGhlIGZ1dHVyZS4KKworV2hlbiBOQ1I1M2M0MDAgc3VwcG9ydCBpcyBjb21waWxlZCBpbiwgQklPUyBwYXJhbWV0ZXJzIHdpbGwgYmUgcmV0dXJuZWQgYnkKK3RoZSBkcml2ZXIgKHRoZSByYXcgNTM4MCBkcml2ZXIgZG9lcyBub3QgYW5kIEkgZG9uJ3QgcGxhbiB0byBmaWRkbGUgd2l0aAoraXQhKS4KKworVGhpcyBkcml2ZXIgd29ya3MgYXMgYSBtb2R1bGUuCitXaGVuIGluY2x1ZGVkIGFzIGEgbW9kdWxlLCBwYXJhbWV0ZXJzIGNhbiBiZSBwYXNzZWQgb24gdGhlIGluc21vZC9tb2Rwcm9iZQorY29tbWFuZCBsaW5lOgorICBuY3JfaXJxPXh4ICAgdGhlIGludGVycnVwdAorICBuY3JfYWRkcj14eCAgdGhlIHBvcnQgb3IgYmFzZSBhZGRyZXNzIChmb3IgcG9ydCBvciBtZW1vcnkKKyAgICAgICAgICAgICAgIG1hcHBlZCwgcmVzcC4pCisgIG5jcl9kbWE9eHggICB0aGUgRE1BCisgIG5jcl81MzgwPTEgICB0byBzZXQgdXAgZm9yIGEgTkNSNTM4MCBib2FyZAorICBuY3JfNTNjNDAwPTEgdG8gc2V0IHVwIGZvciBhIE5DUjUzQzQwMCBib2FyZAorZS5nLgorbW9kcHJvYmUgZ19OQ1I1MzgwIG5jcl9pcnE9NSBuY3JfYWRkcj0weDM1MCBuY3JfNTM4MD0xCisgIGZvciBhIHBvcnQgbWFwcGVkIE5DUjUzODAgYm9hcmQgb3IKK21vZHByb2JlIGdfTkNSNTM4MCBuY3JfaXJxPTI1NSBuY3JfYWRkcj0weGM4MDAwIG5jcl81M2M0MDA9MQorICBmb3IgYSBtZW1vcnkgbWFwcGVkIE5DUjUzQzQwMCBib2FyZCB3aXRoIGludGVycnVwdHMgZGlzYWJsZWQuCisKKygyNTUgc2hvdWxkIGJlIHNwZWNpZmllZCBmb3Igbm8gb3IgRE1BIGludGVycnVwdCwgMjU0IHRvIGF1dG9wcm9iZSBmb3IgYW4gCisgICAgIElSUSBsaW5lIGlmIG92ZXJyaWRkZW4gb24gdGhlIGNvbW1hbmQgbGluZS4pCisKKworS2V2aW4gTGVudGluCitLLkxlbnRpbkBjcy5tb25hc2guZWR1LmF1CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3Njc2kvaWJtbWNhLnR4dCBiL0RvY3VtZW50YXRpb24vc2NzaS9pYm1tY2EudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI4MTQ0OTEKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL3Njc2kvaWJtbWNhLnR4dApAQCAtMCwwICsxLDE0MDIgQEAKKworICAgICAgICAgICAgICAgLT08IFRoZSBJQk0gTWljcm9jaGFubmVsIFNDU0ktU3Vic3lzdGVtID49LQorCSAgICAgICAKKwkgICAgICAgICAgICAgICAgIGZvciB0aGUgSUJNIFBTLzIgc2VyaWVzCisJCSAKKwkgIAkgICBMb3cgTGV2ZWwgU29mdHdhcmUtRHJpdmVyIGZvciBMaW51eAorCQkgCisgICAgIENvcHlyaWdodCAoYykgMTk5NSBTdHJvbSBTeXN0ZW1zLCBJbmMuIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIAorICBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiBPcmlnaW5hbGx5IHdyaXR0ZW4gYnkgTWFydGluIEtvbGluZWssIERlY2VtYmVyIDE5OTUuCisgICBPZmZpY2lhbGx5IG1vZGlmaWVkIGFuZCBtYWludGFpbmVkIGJ5IE1pY2hhZWwgTGFuZyBzaW5jZSBKYW51YXJ5IDE5OTkuCisJICAgCisgCSAgICAgICAgICAgICAgICAgICAgICAgVmVyc2lvbiA0LjBhCisJCisgICBMYXN0IHVwZGF0ZTogSmFudWFyeSAzLCAyMDAxCisgICAKKyAgIEJlZm9yZSB5b3UgU3RhcnQKKyAgIC0tLS0tLS0tLS0tLS0tLS0KKyAgIFRoaXMgaXMgdGhlIGNvbW1vbiBSRUFETUUuaWJtbWNhIGZpbGUgZm9yIGFsbCBkcml2ZXIgcmVsZWFzZXMgb2YgdGhlIAorICAgSUJNIE1DQSBTQ1NJIGRyaXZlciBmb3IgTGludXguIFBsZWFzZSBub3RlLCB0aGF0IGRyaXZlciByZWxlYXNlcyA0LjAKKyAgIG9yIG5ld2VyIGRvIG5vdCB3b3JrIHdpdGgga2VybmVsIHZlcnNpb25zIG9sZGVyIHRoYW4gMi40LjAsIHdoaWxlIGRyaXZlcgorICAgdmVyc2lvbnMgb2xkZXIgdGhhbiA0LjAgZG8gbm90IHdvcmsgd2l0aCBrZXJuZWxzIDIuNC4wIG9yIGxhdGVyISBJZiB5b3UKKyAgIHRyeSB0byBjb21waWxlIHlvdXIga2VybmVsIHdpdGggdGhlIHdyb25nIGRyaXZlciBzb3VyY2UsIHRoZSAKKyAgIGNvbXBpbGF0aW9uIGlzIGFib3J0ZWQgYW5kIHlvdSBnZXQgYSBjb3JyZXNwb25kaW5nIGVycm9yIG1lc3NhZ2UuIFRoaXMgaXMKKyAgIG5vIGJ1ZyBpbiB0aGUgZHJpdmVyLiBJdCBwcmV2ZW50cyB5b3UgZnJvbSB1c2luZyB0aGUgd3Jvbmcgc291cmNlY29kZQorICAgd2l0aCB0aGUgd3Jvbmcga2VybmVsIHZlcnNpb24uCisKKyAgIEF1dGhvcnMgb2YgdGhpcyBEcml2ZXIKKyAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAtIENocmlzIEJlYXVyZWdhcmQgKGltcHJvdmVtZW50IG9mIHRoZSBTQ1NJLWRldmljZSBtYXBwaW5nIGJ5IHRoZSBkcml2ZXIpCisgICAgLSBNYXJ0aW4gS29saW5layAob3JpZ2luLCBmaXJzdCByZWxlYXNlIG9mIHRoaXMgZHJpdmVyKQorICAgIC0gS2xhdXMgS3VkaWVsa2EgKG11bHRpcGxlIFNDU0ktaG9zdCBtYW5hZ2VtZW50L2RldGVjdGlvbiwgYWRhcHRpb24gdG8KKyAgICAgICAgICAgICAgICAgICAgICBMaW51eCBLZXJuZWwgMi4xLngsIG1vZHVsZSBzdXBwb3J0KQorICAgIC0gTWljaGFlbCBMYW5nIChhc3NpZ25pbmcgb3JpZ2luYWwgcHVuL2x1biBtYXBwaW5nLCBkeW5hbWljYWwgbGRuCisgICAgICAgICAgICAgICAgICAgIGFzc2lnbm1lbnQsIHJld3JpdHRlbiBhZGFwdGVyIGRldGVjdGlvbiwgdGhpcyBmaWxlLCAKKwkJICAgIHBhdGNoZXMsIG9mZmljaWFsIGRyaXZlciBtYWludGVuYW5jZSBhbmQgc3Vic2VxdWVudCAKKwkJICAgIGRlYnVnZ2luZywgcmVsYXRlZCB3aXRoIHRoZSBkcml2ZXIpCisKKyAgIFRhYmxlIG9mIENvbnRlbnRzCisgICAtLS0tLS0tLS0tLS0tLS0tLQorICAgMSBBYnN0cmFjdAorICAgMiBEcml2ZXIgRGVzY3JpcHRpb24KKyAgICAgMi4xICBJQk0gU0NTSS1TdWJzeXN0ZW0gRGV0ZWN0aW9uCisgICAgIDIuMiAgUGh5c2ljYWwgVW5pdHMsIExvZ2ljYWwgVW5pdHMsIGFuZCBMb2dpY2FsIERldmljZXMKKyAgICAgMi4zICBTQ1NJLURldmljZSBSZWNvZ25pdGlvbiBhbmQgZHluYW1pY2FsIGxkbiBBc3NpZ25tZW50CisgICAgIDIuNCAgU0NTSS1EZXZpY2UgT3JkZXIKKyAgICAgMi41ICBSZWd1bGFyIFNDU0ktQ29tbWFuZC1Qcm9jZXNzaW5nCisgICAgIDIuNiAgQWJvcnQgJiBSZXNldCBDb21tYW5kcworICAgICAyLjcgIERpc2sgR2VvbWV0cnkKKyAgICAgMi44ICBLZXJuZWwgQm9vdCBPcHRpb24KKyAgICAgMi45ICBEcml2ZXIgTW9kdWxlIFN1cHBvcnQKKyAgICAgMi4xMCBNdWx0aXBsZSBIb3N0YWRhcHRlciBTdXBwb3J0CisgICAgIDIuMTEgL3Byb2Mvc2NzaS1GaWxlc3lzdGVtIEluZm9ybWF0aW9uCisgICAgIDIuMTIgL3Byb2MvbWNhLUZpbGVzeXN0ZW0gSW5mb3JtYXRpb24KKyAgICAgMi4xMyBTdXBwb3J0ZWQgSUJNIFNDU0ktU3Vic3lzdGVtcworICAgICAyLjE0IExpbnV4IEtlcm5lbCBWZXJzaW9ucworICAgMyBDb2RlIEhpc3RvcnkKKyAgIDQgVG8gZG8KKyAgIDUgVXNlcnMnIE1hbnVhbAorICAgICA1LjEgQ29tbWFuZGxpbmUgUGFyYW1ldGVycworICAgICA1LjIgVHJvdWJsZXNob290aW5nCisgICAgIDUuMyBCdWdyZXBvcnRzCisgICAgIDUuNCBTdXBwb3J0IFdXVy1wYWdlCisgICA2IFJlZmVyZW5jZXMKKyAgIDcgQ3JlZGl0cyB0bworICAgICA3LjEgUGVvcGxlCisgICAgIDcuMiBTcG9uc29ycyAmIFN1cHBvcnRlcnMKKyAgIDggVHJhZGVtYXJrcworICAgOSBEaXNjbGFpbWVyCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogKiAqCisKKyAgIDEgQWJzdHJhY3QKKyAgIC0tLS0tLS0tLS0KKyAgIFRoaXMgUkVBRE1FLWZpbGUgZGVzY3JpYmVzIHRoZSBJQk0gU0NTSS1zdWJzeXN0ZW0gbG93IGxldmVsIGRyaXZlciBmb3IgCisgICBMaW51eC4gVGhlIGRlc2NyaXB0aW9ucyB3aGljaCB3ZXJlIGZvcm1lcmx5IGtlcHQgaW4gdGhlIHNvdXJjZS1jb2RlIGhhdmUgCisgICBiZWVuIHRha2VuIG91dCB0byB0aGlzIGZpbGUgdG8gZWFzaWZ5IHRoZSBjb2RlcycgcmVhZGFiaWxpdHkuIFRoZSBkcml2ZXIgCisgICBkZXNjcmlwdGlvbiBoYXMgYmVlbiB1cGRhdGVkLCBhcyBtb3N0IG9mIHRoZSBmb3JtZXIgZGVzY3JpcHRpb24gd2FzIGFscmVhZHkKKyAgIHF1aXRlIG91dGRhdGVkLiBUaGUgaGlzdG9yeSBvZiB0aGUgZHJpdmVyIGRldmVsb3BtZW50IGlzIGFsc28ga2VwdCBpbnNpZGUgCisgICBoZXJlLiBNdWx0aXBsZSBoaXN0b3JpY2FsIGRldmVsb3BtZW50cyBoYXZlIGJlZW4gc3VtbWFyaXplZCB0byBzaG9ydGVuIHRoZSAKKyAgIHRleHRzaXplIGEgYml0LiBBdCB0aGUgZW5kIG9mIHRoaXMgZmlsZSB5b3UgY2FuIGZpbmQgYSBzbWFsbCBtYW51YWwgZm9yIAorICAgdGhpcyBkcml2ZXIgYW5kIGhpbnRzIHRvIGdldCBpdCBydW5uaW5nIG9uIHlvdXIgbWFjaGluZS4KKworICAgMiBEcml2ZXIgRGVzY3JpcHRpb24KKyAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAyLjEgSUJNIFNDU0ktU3Vic3lzdGVtIERldGVjdGlvbgorICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgIFRoaXMgaXMgZG9uZSBpbiB0aGUgaWJtbWNhX2RldGVjdCgpIGZ1bmN0aW9uLiBJdCBmaXJzdCBjaGVja3MsIGlmIHRoZQorICAgTWljcm9jaGFubmVsLWJ1cyBzdXBwb3J0IGlzIGVuYWJsZWQsIGFzIHRoZSBJQk0gU0NTSS1zdWJzeXN0ZW0gbmVlZHMgdGhlCisgICBNaWNyb2NoYW5uZWwuIEluIGEgbmV4dCBzdGVwLCBhIGZyZWUgaW50ZXJydXB0IGlzIGNob3NlbiBhbmQgdGhlIG1haW4KKyAgIGludGVycnVwdCBoYW5kbGVyIGlzIGNvbm5lY3RlZCB0byBpdCB0byBoYW5kbGUgYW5zd2VycyBvZiB0aGUgU0NTSS0KKyAgIHN1YnN5c3RlbShzKS4gSWYgdGhlIEYvVyBTQ1NJLWFkYXB0ZXIgaXMgZm9yY2VkIGJ5IHRoZSBCSU9TIHRvIHVzZSBJUlExMQorICAgaW5zdGVhZCBvZiBJUlExNCwgSVJRMTEgaXMgdXNlZCBmb3IgdGhlIElCTSBTQ1NJLTIgRi9XIGFkYXB0ZXIuIEluIGEgCisgICBmdXJ0aGVyIHN0ZXAgaXQgaXMgY2hlY2tlZCwgaWYgdGhlIGFkYXB0ZXIgZ2V0cyBkZXRlY3RlZCBieSBmb3JjZSBmcm9tCisgICB0aGUga2VybmVsIGNvbW1hbmRsaW5lLCB3aGVyZSB0aGUgSS9PIHBvcnQgYW5kIHRoZSBTQ1NJLXN1YnN5c3RlbSBpZCBjYW4gCisgICBiZSBzcGVjaWZpZWQuIFRoZSBuZXh0IHN0ZXAgY2hlY2tzIGlmIHRoZXJlIGlzIGFuIGludGVncmF0ZWQgU0NTSS1zdWJzeXN0ZW0KKyAgIGluc3RhbGxlZC4gVGhpcyByZWdpc3RlciBhcmVhIGlzIGZpeGVkIHRocm91Z2ggYWxsIElCTSBQUy8yIE1DQS1tYWNoaW5lcyAKKyAgIGFuZCBhcHBlYXJzIGFzIHNvbWV0aGluZyBsaWtlIGEgdmlydHVhbCBzbG90IDEwIG9mIHRoZSBNQ0EtYnVzLiBPbiBtb3N0CisgICBQUy8yIG1hY2hpbmVzLCB0aGUgUE9TIHJlZ2lzdGVycyBvZiBzbG90IDEwIGFyZSBzZXQgdG8gMHhmZiBvciAweDAwIGlmIG5vdAorICAgaW50ZWdyYXRlZCBTQ1NJLWNvbnRyb2xsZXIgaXMgYXZhaWxhYmxlLiBCdXQgb24gY2VydGFpbiBQUy8ycywgbGlrZSBtb2RlbCAKKyAgIDk1OTUsIHRoaXMgc2xvdCAxMCBpcyB1c2VkIHRvIHN0b3JlIG90aGVyIGluZm9ybWF0aW9uIHdoaWNoIGF0IGVhcmxpZXIKKyAgIHN0YWdlIGNvbmZ1c2VkIHRoZSBkcml2ZXIgYW5kIHJlc3VsdGVkIGluIHRoZSBkZXRlY3Rpb24gb2Ygc29tZSBnaG9zdC1TQ1NJLiAKKyAgIElmIFBPUy1yZWdpc3RlciAyIGFuZCAzIGFyZSBub3QgMHgwMCBhbmQgbm90IDB4ZmYsIGJ1dCBhbGwgb3RoZXIgUE9TCisgICByZWdpc3RlcnMgYXJlIGVpdGhlciAweGZmIG9yIDB4MDAsIHRoZXJlIG11c3QgYmUgYW4gaW50ZWdyYXRlZCBTQ1NJLQorICAgc3Vic3lzdGVtIHByZXNlbnQgYW5kIGl0IHdpbGwgYmUgcmVnaXN0ZXJlZCBhcyBJQk0gSW50ZWdyYXRlZCBTQ1NJLQorICAgU3Vic3lzdGVtLiBUaGUgbmV4dCBzdGVwIGNoZWNrcywgaWYgdGhlcmUgaXMgYSBzbG90LWFkYXB0ZXIgaW5zdGFsbGVkIG9uIAorICAgdGhlIE1DQS1idXMuIFRvIGdldCB0aGlzLCB0aGUgZmlyc3QgdHdvIFBPUy1yZWdpc3RlcnMsIHRoYXQgcmVwcmVzZW50IHRoZSAKKyAgIGFkYXB0ZXIgSUQgYXJlIGNoZWNrZWQuIElmIHRoZXkgZml0IHRvIG9uZSBvZiB0aGUgaWRzLCBzdG9yZWQgaW4gdGhlIAorICAgYWRhcHRlciBsaXN0LCBhIFNDU0ktc3Vic3lzdGVtIGlzIGFzc3VtZWQgdG8gYmUgZm91bmQgaW4gYSBzbG90IGFuZCB3aWxsIGJlIAorICAgcmVnaXN0ZXJlZC4gVGhpcyBjaGVjayBpcyBkb25lIHRocm91Z2ggYWxsIHBvc3NpYmxlIE1DQS1idXMgc2xvdHMgdG8gYWxsb3cgCisgICBtb3JlIHRoYW4gb25lIFNDU0ktYWRhcHRlciB0byBiZSBwcmVzZW50IGluIHRoZSBQUy8yLXN5c3RlbSBhbmQgdGhpcyBpcyAKKyAgIGFscmVhZHkgdGhlIGZpcnN0IHBvaW50IG9mIHByb2JsZW1zLiBMb29raW5nIGludG8gdGhlIHRlY2huaWNhbCByZWZlcmVuY2UgCisgICBtYW51YWwgZm9yIHRoZSBJQk0gUFMvMiBjb21tb24gaW50ZXJmYWNlcywgdGhlIFBPUzIgcmVnaXN0ZXIgbXVzdCBoYXZlIAorICAgZGlmZmVyZW50IGludGVycHJldGF0aW9uIG9mIGl0cyBzaW5nbGUgYml0cyB0byBhdm9pZCBvdmVybGFwcGluZyBJL08KKyAgIHJlZ2lvbnMuIFdoaWxlIG9uZSBjYW4gYXNzdW1lLCB0aGF0IHRoZSBpbnRlZ3JhdGVkIHN1YnN5c3RlbSBoYXMgYSBmaXggCisgICBJL08tYWRkcmVzcyBhdCAweDM1NDAgLSAweDM1NDcsIGZ1cnRoZXIgaW5zdGFsbGVkIElCTSBTQ1NJLWFkYXB0ZXJzIG11c3QgCisgICB1c2UgYSBkaWZmZXJlbnQgSS9PLWFkZHJlc3MuIFRoaXMgaXMgZXhwcmVzc2VkIGJ5IGJpdCAxIHRvIDMgb2YgUE9TMiAKKyAgIChtdWx0aXBsaWVkIGJ5IDggKyAweDM1NDApLiBCaXRzIDIgYW5kIDMgYXJlIHJlc2VydmVkIGZvciB0aGUgaW50ZWdyYXRlZCAKKyAgIHN1YnN5c3RlbSwgYnV0IG5vdCBmb3IgdGhlIGFkYXB0ZXJzISBUaGUgZm9sbG93aW5nIGxpc3Qgc2hvd3MsIGhvdyB0aGUgCisgICBiaXRzIG9mIFBPUzIgYW5kIFBPUzMgc2hvdWxkIGJlIGludGVycHJldGVkLgorICAgCisgICBUaGUgUE9TMi1yZWdpc3RlciBvZiBhbGwgUFMvMiBtb2RlbHMnIGludGVncmF0ZWQgU0NTSS1zdWJzeXN0ZW1zIGhhcyB0aGUgCisgICBmb2xsb3dpbmcgaW50ZXJwcmV0YXRpb24gb2YgYml0czoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIEJpdCA3IC0gNCA6IENoaXAgUmV2aXNpb24gSUQgKFJlbGVhc2UpCisgICAgICAgICAgICAgICAgICAgICAgICAgICBCaXQgMyAtIDIgOiBSZXNlcnZlZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgQml0IDEgICAgIDogOGsgTlZSQU0gRGlzYWJsZWQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIEJpdCAwICAgICA6IENoaXAgRW5hYmxlIChFTi1TaWduYWwpCisgICBUaGUgUE9TMy1yZWdpc3RlciBpcyBpbnRlcnByZXRlZCBhcyBmb2xsb3dzIChmb3IgbW9zdCBJQk0gU0NTSS1zdWJzeXMuKToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIEJpdCA3IC0gNSA6IFNDU0kgSUQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIEJpdCA0IC0gMCA6IFJlc2VydmVkID0gMAorICAgVGhlIHNsb3QtYWRhcHRlcnMgaGF2ZSBkaWZmZXJlbnQgaW50ZXJwcmV0YXRpb24gb2YgdGhlc2UgYml0cy4gVGhlIElCTSBTQ1NJCisgICBhZGFwdGVyICh3L0NhY2hlKSBhbmQgdGhlIElCTSBTQ1NJLTIgRi9XIGFkYXB0ZXIgdXNlIHRoZSBmb2xsb3dpbmcKKyAgIGludGVycHJldGF0aW9uIG9mIHRoZSBQT1MyIHJlZ2lzdGVyOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgQml0IDcgLSA0IDogUk9NIFNlZ21lbnQgQWRkcmVzcyBTZWxlY3QKKwkJCSAgIEJpdCAzIC0gMSA6IEFkYXB0ZXIgSS9PIEFkZHJlc3MgU2VsZWN0ICgqOCsweDM1NDApCisJCQkgICBCaXQgMCAgICAgOiBBZGFwdGVyIEVuYWJsZSAoRU4tU2lnbmFsKQorICAgYW5kIGZvciB0aGUgUE9TMyByZWdpc3RlcjoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIEJpdCA3IC0gNSA6IFNDU0kgSUQgCisJCQkgICBCaXQgNCAgICAgOiBGYWlybmVzcyBFbmFibGUgKFNDU0kgSUQzIGYuIEYvVykKKwkJCSAgIEJpdCAzIC0gMCA6IEFyYml0cmF0aW9uIExldmVsCisgICBUaGUgbW9zdCBtb2Rlcm4gcHJvZHVjdCBvZiB0aGUgc2VyaWVzIGlzIHRoZSBJQk0gU0NTSS0yIEYvVyBhZGFwdGVyLCBpdCAKKyAgIGFsbG93cyBkdWFsLWJ1cyBTQ1NJIGFuZCBTQ1NJLXdpZGUgYWRkcmVzc2luZywgd2hpY2ggbWVhbnMsIFBVTnMgbWF5IGJlCisgICBiZXR3ZWVuIDAgYW5kIDE1LiBIZXJlLCBCaXQgNCBpcyB0aGUgaGlnaC1vcmRlciBiaXQgb2YgdGhlIDQtYml0IHdpZGUKKyAgIGFkYXB0ZXIgUFVOIGV4cHJlc3Npb24uIEluIHNob3J0IHdvcmRzLCB0aGlzIG1lYW5zLCB0aGF0IElCTSBQUy8yIG1hY2hpbmVzIAorICAgY2FuIG9ubHkgc3VwcG9ydCAxIHNpbmdsZSBpbnRlZ3JhdGVkIHN1YnN5c3RlbSBieSBkZWZhdWx0LiBBZGRpdGlvbmFsCisgICBzbG90LWFkYXB0ZXJzIGdldCBwb3J0cyBhc3NpZ25lZCBieSB0aGUgYXV0b21hdGljIGNvbmZpZ3VyYXRpb24gdG9vbC4KKworICAgT25lIGRheSBJIGZvdW5kIGEgcGF0Y2ggaW4gaWJtbWNhX2RldGVjdCgpLCBmb3JjaW5nIHRoZSBJL08tYWRkcmVzcyB0byBiZSAKKyAgIDB4MzU0MCBmb3IgaW50ZWdyYXRlZCBTQ1NJLXN1YnN5c3RlbXMsIHRoZXJlIHdhcyBhIHJlbWFyayBwbGFjZWQsIHRoYXQgb24gCisgICBpbnRlZ3JhdGVkIElCTSBTQ1NJLXN1YnN5c3RlbXMgb2YgbW9kZWwgNTYsIHRoZSBQT1MyIHJlZ2lzdGVyIHdhcyBzaG93aW5nIDUuCisgICBUaGlzIG1lYW5zLCB0aGF0IHJlYWxseSBmb3IgdGhlc2UgbW9kZWxzLCBQT1MyIGhhcyB0byBiZSBpbnRlcnByZXRlZAorICAgc3RpY2tpbmcgdG8gdGhlIHRlY2huaWNhbCByZWZlcmVuY2UgZ3VpZGUuIEluIHRoaXMgY2FzZSwgdGhlIGJpdCAyICg0KSBpcyAKKyAgIGEgcmVzZXJ2ZWQgYml0IGFuZCBtYXkgbm90IGJlIGludGVycHJldGVkLiBUaGVzZSBkaWZmZXJlbmNlcyBiZXR3ZWVuIHRoZSAKKyAgIGFkYXB0ZXJzIGFuZCB0aGUgaW50ZWdyYXRlZCBjb250cm9sbGVycyBhcmUgdGFrZW4gaW50byBhY2NvdW50IGJ5IHRoZSAKKyAgIGRldGVjdGlvbiByb3V0aW5lIG9mIHRoZSBkcml2ZXIgb24gZnJvbSB2ZXJzaW9uID4zLjBnLiAKKworICAgRXZlcnkgdGltZSwgYSBTQ1NJLXN1YnN5c3RlbSBpcyBkaXNjb3ZlcmVkLCB0aGUgaWJtbWNhX3JlZ2lzdGVyKCkgZnVuY3Rpb24KKyAgIGlzIGNhbGxlZC4gVGhpcyBmdW5jdGlvbiBjaGVja3MgZmlyc3QsIGlmIHRoZSByZXF1ZXN0ZWQgYXJlYSBmb3IgdGhlIEkvTy0KKyAgIGFkZHJlc3Mgb2YgdGhpcyBTQ1NJLXN1YnN5c3RlbSBpcyBzdGlsbCBhdmFpbGFibGUgYW5kIGFzc2lnbnMgdGhpcyBJL08tCisgICBhcmVhIHRvIHRoZSBTQ1NJLXN1YnN5c3RlbS4gVGhlcmUgYXJlIGFsd2F5cyA4IHNlcXVlbnRpYWwgSS9PLWFkZHJlc3NlcworICAgdGFrZW4gZm9yIGVhY2ggaW5kaXZpZHVhbCBTQ1NJLXN1YnN5c3RlbSBmb3VuZCwgd2hpY2ggYXJlOgorICAgCisgICAgIE9mZnNldCAgICAgICAgICAgIFR5cGUgICAgICAgICAgICAgICAgICBQZXJtaXNzaW9ucworICAgICAgIDAgICAgIENvbW1hbmQgSW50ZXJmYWNlIFJlZ2lzdGVyIDEgICAgUmVhZC9Xcml0ZQorICAgICAgIDEgICAgIENvbW1hbmQgSW50ZXJmYWNlIFJlZ2lzdGVyIDIgICAgUmVhZC9Xcml0ZQorICAgICAgIDIgICAgIENvbW1hbmQgSW50ZXJmYWNlIFJlZ2lzdGVyIDMgICAgUmVhZC9Xcml0ZQorICAgICAgIDMgICAgIENvbW1hbmQgSW50ZXJmYWNlIFJlZ2lzdGVyIDQgICAgUmVhZC9Xcml0ZQorICAgICAgIDQgICAgIEF0dGVudGlvbiBSZWdpc3RlciAgICAgICAgICAgICAgUmVhZC9Xcml0ZQorICAgICAgIDUgICAgIEJhc2ljIENvbnRyb2wgUmVnaXN0ZXIgICAgICAgICAgUmVhZC9Xcml0ZQorICAgICAgIDYgICAgIEludGVycnVwdCBTdGF0dXMgUmVnaXN0ZXIgICAgICAgUmVhZAorICAgICAgIDcgICAgIEJhc2ljIFN0YXR1cyBSZWdpc3RlciAgICAgICAgICAgUmVhZAorICAgCisgICBBZnRlciB0aGUgSS9PLWFkZHJlc3MgcmFuZ2UgaXMgYXNzaWduZWQsIHRoZSBob3N0LWFkYXB0ZXIgaXMgYXNzaWduZWQKKyAgIHRvIGEgbG9jYWwgc3RydWN0dXJlIHdoaWNoIGtlZXBzIGFsbCBhZGFwdGVyIGluZm9ybWF0aW9uIG5lZWRlZCBmb3IgdGhlCisgICBkcml2ZXIgaXRzZWxmIGFuZCB0aGUgbWlkLSBhbmQgaGlnaGVyLWxldmVsIFNDU0ktZHJpdmVycy4gVGhlIFNDU0kgcHVuL2x1bgorICAgYW5kIHRoZSBhZGFwdGVycycgbGRuIHRhYmxlcyBhcmUgaW5pdGlhbGl6ZWQgYW5kIGdldCBwcm9iZWQgYWZ0ZXJ3YXJkcyBieQorICAgdGhlIGNoZWNrX2RldmljZXMoKSBmdW5jdGlvbi4gSWYgbm8gZnVydGhlciBhZGFwdGVycyBhcmUgZm91bmQsIAorICAgaWJtbWNhX2RldGVjdCgpIHF1aXRzLgorICAgCisgICAyLjIgUGh5c2ljYWwgVW5pdHMsIExvZ2ljYWwgVW5pdHMsIGFuZCBMb2dpY2FsIERldmljZXMKKyAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgVGhlcmUgY2FuIGJlIHVwIHRvIDU2IGRldmljZXMgb24gdGhlIFNDU0kgYnVzIChiZXNpZGVzIHRoZSBhZGFwdGVyKToKKyAgIHRoZXJlIGFyZSB1cCB0byA3ICJwaHlzaWNhbCB1bml0cyIgKGVhY2ggaWRlbnRpZmllZCBieSBwaHlzaWNhbCB1bml0IAorICAgbnVtYmVyIG9yIHB1biwgYWxzbyBjYWxsZWQgdGhlIHNjc2kgaWQsIHRoaXMgaXMgdGhlIG51bWJlciB5b3Ugc2VsZWN0CisgICB3aXRoIGhhcmR3YXJlIGp1bXBlcnMpLCBhbmQgZWFjaCBwaHlzaWNhbCB1bml0IGNhbiBoYXZlIHVwIHRvIDggCisgICAibG9naWNhbCB1bml0cyIgKGVhY2ggaWRlbnRpZmllZCBieSBsb2dpY2FsIHVuaXQgbnVtYmVyLCBvciBsdW4sIAorICAgYmV0d2VlbiAwIGFuZCA3KS4gVGhlIElCTSBTQ1NJLTIgRi9XIGFkYXB0ZXIgb2ZmZXJzIHRoaXMgb24gdXAgdG8gdHdvCisgICBidXNzZXMgYW5kIHByb3ZpZGVzIHN1cHBvcnQgZm9yIDMwIGxvZ2ljYWwgZGV2aWNlcyBhdCB0aGUgc2FtZSB0aW1lLCB3aGVyZQorICAgaW4gd2lkZS1hZGRyZXNzaW5nIG1vZGUgeW91IGNhbiBoYXZlIDE2IHB1bnMgd2l0aCAzMiBsdW5zIG9uIGVhY2ggZGV2aWNlLgorICAgVGhpcyBzZWN0aW9uIGRleHJpYmVzIHlvdSB0aGUgaGFuZGxpbmcgb2YgZGV2aWNlcyBvbiBub24tRi9XIGFkYXB0ZXJzLgorICAgSnVzdCBpbWFnaW5lLCB0aGF0IHlvdSBjYW4gaGF2ZSAxNiAqIDMyID0gNTEyIGRldmljZXMgb24gYSBGL1cgYWRhcHRlcgorICAgd2hpY2ggbWVhbnMgYSBsb3Qgb2YgcG9zc2libGUgZGV2aWNlcyBmb3Igc3VjaCBhIHNtYWxsIG1hY2hpbmUuCisKKyAgIFR5cGljYWxseSB0aGUgYWRhcHRlciBoYXMgcHVuPTcsIHNvIHB1bnMgb2Ygb3RoZXIgcGh5c2ljYWwgdW5pdHMKKyAgIGFyZSBiZXR3ZWVuIDAgYW5kIDYoMTUpLiBPbiBhIHdpZGUtYWRhcHRlciBhIHB1biBoaWdoZXIgdGhhbiA3IGlzCisgICBwb3NzaWJsZSwgYnV0IGlzIG5vcm1hbGx5IG5vdCB1c2VkLiBBbG1vc3QgYWxsIHBoeXNpY2FsIHVuaXRzIGhhdmUgb25seSAKKyAgIG9uZSBsb2dpY2FsIHVuaXQsIHdpdGggbHVuPTAuIEEgQ0QtUk9NIGp1a2Vib3ggd291bGQgYmUgYW4gZXhhbXBsZSBvZiBhIAorICAgcGh5c2ljYWwgdW5pdCB3aXRoIG1vcmUgdGhhbiBvbmUgbG9naWNhbCB1bml0LgorCisgICBUaGUgZW1iZWRkZWQgbWljcm9wcm9jZXNzb3Igb2YgdGhlIElCTSBTQ1NJLXN1YnN5c3RlbSBoaWRlcyB0aGUgY29tcGxleAorICAgdHdvLWRpbWVuc2lvbmFsIChwdW4sbHVuKSBvcmdhbml6YXRpb24gZnJvbSB0aGUgb3BlcmF0aW5nIHN5c3RlbS4KKyAgIFdoZW4gdGhlIG1hY2hpbmUgaXMgcG93ZXJlZC11cCAob3IgcmVib290ZWQpLCB0aGUgZW1iZWRkZWQgbWljcm9wcm9jZXNzb3IgCisgICBjaGVja3MsIG9uIGl0cyBvd24sIGFsbCA1NiBwb3NzaWJsZSAocHVuLGx1bikgY29tYmluYXRpb25zLCBhbmQgdGhlIGZpcnN0IAorICAgMTUgZGV2aWNlcyBmb3VuZCBhcmUgYXNzaWduZWQgaW50byBhIG9uZS1kaW1lbnNpb25hbCBhcnJheSBvZiBzby1jYWxsZWQgCisgICAibG9naWNhbCBkZXZpY2VzIiwgaWRlbnRpZmllZCBieSAibG9naWNhbCBkZXZpY2UgbnVtYmVycyIgb3IgbGRuLiBUaGUgbGFzdCAKKyAgIGxkbj0xNSBpcyByZXNlcnZlZCBmb3IgdGhlIHN1YnN5c3RlbSBpdHNlbGYuIFdpZGUgYWRhcHRlcnMgbWF5IGhhdmUgCisgICB0byBjaGVjayB1cCB0byAxNSAqIDggPSAxMjAgcHVuL2x1biBjb21iaW5hdGlvbnMuCisgICAKKyAgIDIuMyBTQ1NJLURldmljZSBSZWNvZ25pdGlvbiBhbmQgRHluYW1pY2FsIGxkbiBBc3NpZ25tZW50CisgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgT25lIGNvbnNlcXVlbmNlIG9mIGluZm9ybWF0aW9uIGhpZGluZyBpcyB0aGF0IHRoZSByZWFsIChwdW4sbHVuKSAgICAKKyAgIG51bWJlcnMgYXJlIGFsc28gaGlkZGVuLiBUaGUgdHdvIHBvc3NpYmlsaXRpZXMgdG8gZ2V0IGFyb3VuZCB0aGlzIHByb2JsZW0KKyAgIGlzIHRvIG9mZmVyIGZha2UgcHVuL2x1biBjb21iaW5hdGlvbnMgdG8gdGhlIG9wZXJhdGluZyBzeXN0ZW0gb3IgdG8gCisgICBkZWxldGUgdGhlIHdob2xlIG1hcHBpbmcgb2YgdGhlIGFkYXB0ZXIgYW5kIHRvIHJlYXNzaWduIHRoZSBsZG5zLCB1c2luZworICAgdGhlIGltbWVkaWF0ZSBhc3NpZ24gY29tbWFuZCBvZiB0aGUgU0NTSS1zdWJzeXN0ZW0gZm9yIHByb2JpbmcgdGhyb3VnaAorICAgYWxsIHBvc3NpYmxlIHB1bi9sdW4gY29tYmluYXRpb25zLiBhIGxkbiBpcyBhICJsb2dpY2FsIGRldmljZSBudW1iZXIiCisgICB3aGljaCBpcyB1c2VkIGJ5IElCTSBTQ1NJLXN1YnN5c3RlbXMgdG8gYWNjZXNzIHNvbWUgdmFsaWQgU0NTSS1kZXZpY2UuCisgICBBdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBkZXZlbG9wbWVudCBvZiB0aGlzIGRyaXZlciwgdGhlIGZvbGxvd2luZyBhcHByb2FjaCAKKyAgIHdhcyB1c2VkOgorICAgCisgICBGaXJzdCwgdGhlIGRyaXZlciBjaGVja2VkIHRoZSBsZG4ncyAoMCB0byA2KSB0byBmaW5kIG91dCB3aGljaCBsZG4ncworICAgaGF2ZSBkZXZpY2VzIGFzc2lnbmVkLiBUaGlzIHdhcyBkb25lIGJ5IHRoZSBmdW5jdGlvbnMgY2hlY2tfZGV2aWNlcygpIGFuZAorICAgZGV2aWNlX2V4aXN0cygpLiBUaGUgaW50ZXJydXB0IGhhbmRsZXIgaGFzIGEgc3BlY2lhbCBwYXJhZ3JhcGggb2YgY29kZQorICAgKHNlZSBsb2NhbF9jaGVja2luZ19waGFzZV9mbGFnKSB0byBhc3Npc3QgaW4gdGhlIGNoZWNraW5nLiBBc3N1bWUsIGZvcgorICAgZXhhbXBsZSwgdGhhdCB0aHJlZSBsb2dpY2FsIGRldmljZXMgd2VyZSBmb3VuZCBhc3NpZ25lZCBhdCBsZG4gMCwgMSwgMi4KKyAgIFRoZXNlIGFyZSBwcmVzZW50ZWQgdG8gdGhlIHVwcGVyIGxheWVyIG9mIExpbnV4IFNDU0kgZHJpdmVyCisgICBhcyBkZXZpY2VzIHdpdGggYm9ndXMgKHB1biwgbHVuKSBlcXVhbCB0byAoMCwwKSwgKDEsMCksICgyLDApLiAKKyAgIE9uIHRoZSBvdGhlciBoYW5kLCBpZiB0aGUgdXBwZXIgbGF5ZXIgaXNzdWVzIGEgY29tbWFuZCB0byBkZXZpY2UKKyAgIHNheSAoNCwwKSwgdGhpcyBkcml2ZXIgcmV0dXJucyBESURfTk9fQ09OTkVDVCBlcnJvci4KKworICAgSW4gYSBzZWNvbmQgc3RlcCBvZiB0aGUgZHJpdmVyIGRldmVsb3BtZW50LCB0aGUgZm9sbG93aW5nIGltcHJvdmVtZW50IGhhcworICAgYmVlbiBhcHBsaWVkOiBUaGUgZmlyc3QgYXBwcm9hY2ggbGltaXRlZCB0aGUgbnVtYmVyIG9mIGRldmljZXMgdG8gNywgZmFyCisgICBmZXdlciB0aGFuIHRoZSAxNSB0aGF0IGl0IGNvdWxkIHVzZW0gdGhlbiBpdCBqdXN0IG1hcGVkIGxkbiAtPiAKKyAgIChsZG4vOCxsZG4lOCkgZm9yIHB1bixsdW4uICBXZSBlbmRlZCB1cCB3aXRoIGEgcmVhbCBtaXNobWFzaCBvZiBwdW5zCisgICBhbmQgbHVucywgYnV0IGl0IGFsbCBzZWVtZWQgdG8gd29yay4KKworICAgVGhlIGxhdGVzdCBkZXZlbG9wbWVudCwgd2hpY2ggaXMgaW1wbGVtZW50ZWQgZnJvbSB0aGUgZHJpdmVyIHZlcnNpb24gMy4wCisgICBhbmQgbGF0ZXIsIHJlYWxpemVzIHRoZSBkZXZpY2UgcmVjb2duaXRpb24gaW4gdGhlIGZvbGxvd2luZyB3YXk6CisgICBUaGUgcGh5c2ljYWwgU0NTSS1kZXZpY2VzIG9uIHRoZSBTQ1NJLWJ1cyBhcmUgcHJvYmVkIHZpYSBpbW1lZGlhdGVfYXNzaWduLSAKKyAgIGFuZCBkZXZpY2VfaW5xdWlyeS1jb21tYW5kcywgdGhhdCBpcyBhbGwgaW1wbGVtZW50ZWQgaW4gYSBjb21wbGV0ZWx5IG5ldworICAgbWFkZSBjaGVja19kZXZpY2VzKCkgc3Vicm91dGluZS4gVGhpcyBkZWxpdmVycyBhbiBleGFjdCBtYXAgb2YgdGhlIHBoeXNpY2FsCisgICBTQ1NJLXdvcmxkIHRoYXQgaXMgbm93IHN0b3JlZCBpbiB0aGUgZ2V0X3Njc2lbXVtdLWFycmF5LiBUaGlzIG1lYW5zLAorICAgdGhhdCB0aGUgb25jZSBoaWRkZW4gcHVuLGx1biBhc3NpZ25tZW50IGlzIG5vdyBrbm93biB0byB0aGlzIGRyaXZlci4KKyAgIEl0IG5vIGxvbmdlciBiZWxpZXZlcyBpbiBkZWZhdWx0LXNldHRpbmdzIG9mIHRoZSBzdWJzeXN0ZW0gYW5kIG1hcHMgYWxsCisgICBsZG5zIHRvIGV4aXN0aW5nIHB1bixsdW4gImJ5IGZvb3QiLiBUaGlzIGFzc3VyZXMgZnVsbCBjb250cm9sIG9mIHRoZSBsZG4KKyAgIG1hcHBpbmcgYW5kIGFsbG93cyBkeW5hbWljYWwgcmVtYXBwaW5nIG9mIGxkbnMgdG8gZGlmZmVyZW50IHB1bixsdW4sIGlmCisgICB0aGVyZSBhcmUgbW9yZSBTQ1NJLWRldmljZXMgaW5zdGFsbGVkIHRoYW4gbGRucyBhdmFpbGFibGUgKG4+MTUpLiBUaGUKKyAgIGxkbnMgZnJvbSAwIHRvIDYgZ2V0ICdoYXJkd2lyZWQnIGJ5IHRoaXMgZHJpdmVyIHRvIHB1bnMgMCB0byA3IGF0IGx1bj0wLAorICAgZXhjbHVkaW5nIHRoZSBwdW4gb2YgdGhlIHN1YnN5c3RlbS4gVGhpcyBhc3N1cmVzLCB0aGF0IGF0IGxlYXN0IHNpbXBsZSAKKyAgIFNDU0ktaW5zdGFsbGF0aW9ucyBoYXZlIG9wdGltdW0gYWNjZXNzLXNwZWVkIGFuZCBhcmUgbm90IHRvdWNoZWQgYnkKKyAgIGR5bmFtaWNhbCByZW1hcHBpbmcuIFRoZSBsZG5zIDcgdG8gMTQgYXJlIHB1dCB0byBleGlzdGluZyBkZXZpY2VzIHdpdGggCisgICBsdW4+MCBvciB0byBub24tZXhpc3RpbmcgZGV2aWNlcywgaW4gb3JkZXIgdG8gc2F0aXNmeSB0aGUgc3Vic3lzdGVtLCBpZiAKKyAgIHRoZXJlIGFyZSBsZXNzIHRoYW4gMTUgU0NTSS1kZXZpY2VzIGNvbm5lY3RlZC4gSW4gdGhlIGNhc2Ugb2YgbW9yZSB0aGFuIDE1IAorICAgZGV2aWNlcywgdGhlIGR5bmFtaWNhbCBtYXBwaW5nIGdvZXMgYWN0aXZlLiBJZiB0aGUgZ2V0X3Njc2lbXVtdIHJlcG9ydHMgYSAKKyAgIGRldmljZSB0byBiZSBleGlzdGFudCwgYnV0IGl0IGhhcyBubyBsZG4gYXNzaWduZWQsIGl0IGdldHMgYSBsZG4gb3V0IG9mIDcgCisgICB0byAxNC4gVGhlIG51bWJlcnMgYXJlIGFzc2lnbmVkIGluIGN5Y2xpYyBvcmRlci4gVGhlcmVmb3JlIGl0IHRha2VzIDggCisgICBkeW5hbWljYWwgcmVhc3NpZ25tZW50cyBvbiB0aGUgU0NTSS1kZXZpY2VzLCB1bnRpbCBhIGNlcnRhaW4gZGV2aWNlIAorICAgbG9zZXMgaXRzIGxkbiBhZ2Fpbi4gVGhpcyBhc3N1cmVzLCB0aGF0IGR5bmFtaWNhbCByZW1hcHBpbmcgaXMgYXZvaWRlZCAKKyAgIGR1cmluZyBpbnRlbnNlIEkvTyBiZXR3ZWVuIHVwIHRvIDE1IFNDU0ktZGV2aWNlcyAobWVhbnMgcHVuLGx1biAKKyAgIGNvbWJpbmF0aW9ucykuIEEgZnVydGhlciBhZHZhbnRhZ2Ugb2YgdGhpcyBtZXRob2QgaXMsIHRoYXQgcGVvcGxlIHdobworICAgYnVpbGQgdGhlaXIga2VybmVsIHdpdGhvdXQgcHJvYmluZyBvbiBhbGwgbHVucyB3aWxsIGdldCB3aGF0IHRoZXkgZXhwZWN0LAorICAgYmVjYXVzZSB0aGUgZHJpdmVyIGp1c3Qgd29uJ3QgYXNzaWduIGV2ZXJ5dGhpbmcgd2l0aCBsdW4+MCB3aGVuIAorICAgbXVsdHBpbGUgbHVuIHByb2JpbmcgaXMgaW5hY3RpdmUuCisgCisgICAyLjQgU0NTSS1EZXZpY2UgT3JkZXIKKyAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgQmVjYXVzZSBvZiB0aGUgbm93IGNvcnJlY3QgcmVjb2duaXRpb24gb2YgcGh5c2ljYWwgcHVuLGx1biwgYW5kIAorICAgdGhlaXIgcmVwb3J0IHRvIG1pZC1sZXZlbC0gYW5kIGhpZ2hlci1sZXZlbC1kcml2ZXJzLCB0aGUgbmV3IHJlcG9ydGVkIHB1bnMKKyAgIGNhbiBiZSBkaWZmZXJlbnQgZnJvbSB0aGUgb2xkLCBmYWtlZCBwdW5zLiBUaGVyZWZvcmUsIExpbnV4IHdpbGwgZXZlbnR1YWxseQorICAgY2hhbmdlIC9kZXYvc2RYWFggYXNzaWdubWVudHMgYW5kIHByb21wdCB5b3UgZm9yIGNvcnJ1cHRlZCBzdXBlcmJsb2NrCisgICByZXBhaXIgb24gYm9vdHRpbWUuIEluIHRoaXMgY2FzZSBETyBOT1QgUEFOSUMsIFlPVVIgRElTS1MgQVJFIFNUSUxMIE9LISEhCisgICBZb3UgaGF2ZSB0byByZWJvb3QgKENUUkwtRCkgd2l0aCBhbiBvbGQga2VybmVsIGFuZCBzZXQgdGhlIC9ldGMvZnN0YWItZmlsZQorICAgZW50cmllcyByaWdodC4gQWZ0ZXIgdGhhdCwgdGhlIHN5c3RlbSBzaG91bGQgY29tZSB1cCBhcyBlcnJvcmZyZWUgYXMgYmVmb3JlLgorICAgSWYgeW91ciBib290LXBhcnRpdGlvbiBpcyBub3QgY29taW5nIHVwLCBhbHNvIGVkaXQgdGhlIC9ldGMvbGlsby5jb25mLWZpbGUKKyAgIGluIGEgTGludXggc2Vzc2lvbiBib290ZWQgb24gb2xkIGtlcm5lbCBhbmQgcnVuIGxpbG8gYmVmb3JlIHJlYm9vdC4gQ2hlY2sKKyAgIGxpbG8uY29uZiBhbnl3YXkgdG8gZ2V0IGJvb3Qgb24gb3RoZXIgcGFydGl0aW9ucyB3aXRoIGZvcmVpZ24gT1NlcyByaWdodAorICAgYWdhaW4uIEJ1dCB0aGVyZSBleGlzdHMgYSBmZWF0dXJlIG9mIHRoaXMgZHJpdmVyIHRoYXQgYWxsb3dzIHlvdSB0byBjaGFuZ2UKKyAgIHRoZSBhc3NpZ25tZW50IG9yZGVyIG9mIHRoZSBTQ1NJLWRldmljZXMgYnkgZmxpcHBpbmcgdGhlIFBVTi1hc3NpZ25tZW50LgorICAgU2VlIHRoZSBuZXh0IHBhcmFncmFwaCBmb3IgYSBkZXNjcmlwdGlvbi4KKyAKKyAgIFRoZSBwcm9ibGVtIGZvciB0aGlzIGlzLCB0aGF0IExpbnV4IGRvZXMgbm90IGFzc2lnbiB0aGUgU0NTSS1kZXZpY2VzIGluIHRoZQorICAgd2F5IGFzIGRlc2NyaWJlZCBpbiB0aGUgQU5TSS1TQ1NJLXN0YW5kYXJkLiBMaW51eCBhc3NpZ25zIC9kZXYvc2RhIHRvIAorICAgdGhlIGRldmljZSB3aXRoIGF0IG1pbmltdW0gaWQgMC4gQnV0IHRoZSBmaXJzdCBkcml2ZSBzaG91bGQgYmUgYXQgaWQgNiwKKyAgIGJlY2F1c2UgZm9yIGhpc3RvcmljYWwgcmVhc29ucywgZHJpdmUgYXQgaWQgNiBoYXMsIGJ5IGhhcmR3YXJlLCB0aGUgaGlnaGVzdAorICAgcHJpb3JpdHkgYW5kIGEgZHJpdmUgYXQgaWQgMCB0aGUgbG93ZXN0LiBJQk0gd2FzIG9uZSBvZiB0aGUgcmFyZSBwcm9kdWNlcnMsCisgICB3aGVyZSB0aGUgQklPUyBhc3NpZ25zIGRyaXZlcyBiZWxvbmdpbmcgdG8gdGhlIEFOU0ktU0NTSS1zdGFuZGFyZC4gTW9zdCAKKyAgIG90aGVyIHByb2R1Y2VycycgQklPUyBkb2VzIG5vdCAoSSB0aGluayBldmVuIEFkYXB0ZWMtQklPUykuIFRoZSAKKyAgIElCTU1DQV9TQ1NJX09SREVSX1NUQU5EQVJEIGZsYWcsIHdoaWNoIHlvdSBzZXQgd2hpbGUgY29uZmlndXJpbmcgdGhlCisgICBrZXJuZWwgZW5hYmxlcyB0byBjaG9vc2UgdGhlIHByZWZlcnJlZCB3YXkgb2YgU0NTSS1kZXZpY2UtYXNzaWdubWVudC4gCisgICBEZWZpbmluZyB0aGlzIGZsYWcgd291bGQgcmVzdWx0IGluIExpbnV4IGRldGVybWluaW5nIHRoZSBkZXZpY2VzIGluIHRoZSAKKyAgIHNhbWUgb3JkZXIgYXMgRE9TIGFuZCBPUy8yIGRvZXMgb24geW91ciBNQ0EtbWFjaGluZS4gVGhpcyBpcyBhbHNvIHN0YW5kYXJkIAorICAgb24gbW9zdCBpbmR1c3RyaWFsIGNvbXB1dGVycyBhbmQgT1NlcywgbGlrZSBlLmcuIE9TLTkuIExlYXZpbmcgdGhpcyBmbGFnIAorICAgdW5kZWZpbmVkIHdpbGwgZ2V0IHlvdXIgZGV2aWNlcyBvcmRlcmVkIGluIHRoZSBkZWZhdWx0IHdheSBvZiBMaW51eC4gU2VlIAorICAgYWxzbyB0aGUgcmVtYXJrcyBvZiBDaHJpcyBCZWF1cmVnYXJkIGZyb20gRGVjIDE1LCAxOTk3IGFuZCB0aGUgZm9sbG93dXBzIAorICAgaW4gc2VjdGlvbiAzLgorICAgCisgICAyLjUgUmVndWxhciBTQ1NJLUNvbW1hbmQtUHJvY2Vzc2luZworICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgIE9ubHkgdGhyZWUgZnVuY3Rpb25zIGdldCBpbnZvbHZlZDogaWJtbWNhX3F1ZXVlY29tbWFuZCgpLCBpc3N1ZV9jbWQoKSwKKyAgIGFuZCBpbnRlcnJ1cHRfaGFuZGxlcigpLgorCisgICBUaGUgdXBwZXIgbGF5ZXIgaXNzdWVzIGEgc2NzaSBjb21tYW5kIGJ5IGNhbGxpbmcgZnVuY3Rpb24gCisgICBpYm1tY2FfcXVldWVjb21tYW5kKCkuIFRoaXMgZnVuY3Rpb24gZmlsbHMgYSAic3Vic3lzdGVtIGNvbnRyb2wgYmxvY2siCisgICAoc2NiKSBhbmQgY2FsbHMgYSBsb2NhbCBmdW5jdGlvbiBpc3N1ZV9jbWQoKSwgd2hpY2ggd3JpdGVzIGEgc2NiIAorICAgY29tbWFuZCBpbnRvIHN1YnN5c3RlbSBJL08gcG9ydHMuIE9uY2UgdGhlIHNjYiBjb21tYW5kIGlzIGNhcnJpZWQgb3V0LCAKKyAgIHRoZSBpbnRlcnJ1cHRfaGFuZGxlcigpIGlzIGludm9rZWQuIElmIGEgZGV2aWNlIGlzIGRldGVybWluZWQgdG8gYmUgCisgICBleGlzdGFudCBhbmQgaXQgaGFzIG5vdCBhc3NpZ25lZCBhbnkgbGRuLCBpdCBnZXRzIG9uZSBkeW5hbWljYWxseS4KKyAgIEZvciB0aGlzLCB0aGUgd2hvbGUgc3R1ZmYgaXMgZG9uZSBpbiBpYm1tY2FfcXVldWVjb21tYW5kKCkuCisKKyAgIDIuNiBBYm9ydCAmIFJlc2V0IENvbW1hbmRzCisgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgVGhlc2UgYXJlIGltcGxlbWVudGVkIHdpdGggYnVzeSB3YWl0aW5nIGZvciBpbnRlcnJ1cHQgdG8gYXJyaXZlLgorICAgaWJtbWNhX3Jlc2V0KCkgYW5kIGlibW1jYV9hYm9ydCgpIGRvIG5vdCB3b3JrIHN1ZmZpY2VudGx5IHdlbGwKKyAgIHVwIHRvIG5vdyBhbmQgbmVlZCBzdGlsbCBhIGxvdCBvZiBkZXZlbG9wbWVudCB3b3JrLiBCdXQsIHRoaXMgc2VlbXMKKyAgIHRvIGJlIGV2ZW4gYSBwcm9ibGVtIHdpdGggb3RoZXIgU0NTSS1sb3cgbGV2ZWwgZHJpdmVycywgdG9vLiBIb3dldmVyLAorICAgdGhpcyBzaG91bGQgYmUgbm8gZXhjdXNlLgorCisgICAyLjcgRGlzayBHZW9tZXRyeQorICAgLS0tLS0tLS0tLS0tLS0tLS0KKyAgIFRoZSBpYm1tY2FfYmlvc3BhcmFtcygpIGZ1bmN0aW9uIHNob3VsZCByZXR1cm4gdGhlIHNhbWUgZGlzayBnZW9tZXRyeSAKKyAgIGFzIHRoZSBiaW9zLiBUaGlzIGlzIG5lZWRlZCBmb3IgZmRpc2ssIGV0Yy4gVGhlIHJldHVybmVkIGdlb21ldHJ5IGlzIAorICAgY2VydGFpbmx5IGNvcnJlY3QgZm9yIGRpc2tzIHNtYWxsZXIgdGhhbiAxIGdpZ2FieXRlLiBJbiB0aGUgbWVhbnRpbWUsCisgICBpdCBoYXMgYmVlbiBwcm92ZWQsIHRoYXQgdGhpcyB3b3JrcyBmaW5lIGV2ZW4gd2l0aCBkaXNrcyBsYXJnZXIgdGhhbgorICAgMSBnaWdhYnl0ZS4KKworICAgMi44IEtlcm5lbCBCb290IE9wdGlvbgorICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgVGhlIGZ1bmN0aW9uIGlibW1jYV9zY3NpX3NldHVwKCkgaXMgY2FsbGVkIGlmIG9wdGlvbiBpYm1tY2FzY3NpPW4gCisgICBpcyBwYXNzZWQgdG8gdGhlIGtlcm5lbC4gU2VlIGZpbGUgbGludXgvaW5pdC9tYWluLmMgZm9yIGRldGFpbHMuCisgICAKKyAgIDIuOSBEcml2ZXIgTW9kdWxlIFN1cHBvcnQKKyAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgIElzIGltcGxlbWVudGVkIGFuZCB0ZXN0ZWQgYnkgSy4gS3VkaWVsa2EuIFRoaXMgY291bGQgcHJvYmFibHkgbm90IHdvcmsKKyAgIG9uIGtlcm5lbHMgPDIuMS4wLgorICAKKyAgIDIuMTAgTXVsdGlwbGUgSG9zdGFkYXB0ZXIgU3VwcG9ydAorICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICBUaGlzIGRyaXZlciBzdXBwb3J0cyB1cCB0byBlaWdodCBpbnRlcmZhY2VzIG9mIHR5cGUgSUJNLVNDU0ktU3Vic3lzdGVtLiAKKyAgIEludGVncmF0ZWQtLCBhbmQgTUNBLWFkYXB0ZXJzIGFyZSBhdXRvbWF0aWNhbGx5IHJlY29nbml6ZWQuIFVucmVjb2duaXphYmxlCisgICBJQk0tU0NTSS1TdWJzeXN0ZW0gaW50ZXJmYWNlcyBjYW4gYmUgc3BlY2lmaWVkIGFzIGtlcm5lbC1wYXJhbWV0ZXJzLgorIAorICAgMi4xMSAvcHJvYy9zY3NpLUZpbGVzeXN0ZW0gSW5mb3JtYXRpb24KKyAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICBJbmZvcm1hdGlvbiBhYm91dCB0aGUgZHJpdmVyIGNvbmRpdGlvbiBpcyBnaXZlbiBpbiAKKyAgIC9wcm9jL3Njc2kvaWJtbWNhLzxob3N0X25vPi4gaWJtbWNhX3Byb2NfaW5mbygpIHByb3ZpZGVzIHRoaXMgaW5mb3JtYXRpb24uCisgICAKKyAgIFRoaXMgdGFibGUgaXMgcXVpdGUgaW5mb3JtYXRpdmUgZm9yIGludGVyZXN0ZWQgdXNlcnMuIEl0IHNob3dzIHRoZSBsb2FkCisgICBvZiBjb21tYW5kcyBvbiB0aGUgc3Vic3lzdGVtIGFuZCB3ZXRoZXIgeW91IGFyZSBydW5uaW5nIHRoZSBieXBhc3NlZCAKKyAgIChzb2Z0d2FyZSkgb3IgaW50ZWdyYXRlZCAoaGFyZHdhcmUpIFNDU0ktY29tbWFuZCBzZXQgKHNlZSBiZWxvdykuIFRoZQorICAgYW1vdW50IG9mIGFjY2Vzc2VzIGlzIHNob3duLiBSZWFkLCB3cml0ZSwgbW9kZXNlbGVjdCBpcyBzaG93biBzZXBhcmF0ZWx5CisgICBpbiBvcmRlciB0byBoZWxwIGRlYnVnZ2luZyBwcm9ibGVtcyB3aXRoIENELVJPTXMgb3IgdGFwZWRyaXZlcy4KKyAgIAorICAgVGhlIGZvbGxvd2luZyB0YWJsZSBzaG93cyB0aGUgbGlzdCBvZiAxNSBsb2dpY2FsIGRldmljZSBudW1iZXJzLCB0aGF0IGFyZQorICAgdXNlZCBieSB0aGUgU0NTSS1zdWJzeXN0ZW0uIFRoZSBsb2FkIG9uIGVhY2ggbGRuIGlzIHNob3duIGluIHRoZSB0YWJsZSwKKyAgIGFnYWluLCByZWFkIGFuZCB3cml0ZSBjb21tYW5kcyBhcmUgc3BsaXQuIFRoZSBsYXN0IGNvbHVtbiBzaG93cyB0aGUgYW1vdW50CisgICBvZiByZWFzc2lnbm1lbnRzLCB0aGF0IGhhdmUgYmVlbiBhcHBsaWVkIHRvIHRoZSBsZG5zLCBpZiB5b3UgaGF2ZSBtb3JlIHRoYW4KKyAgIDE1IHB1bi9sdW4gY29tYmluYXRpb25zIGF2YWlsYWJsZSBvbiB0aGUgU0NTSS1idXMuCisgICAKKyAgIFRoZSBsYXN0IHR3byB0YWJsZXMgc2hvdyB0aGUgcHVuL2x1biBtYXAgYW5kIHRoZSBwb3NpdGlvbnMgb2YgdGhlIGxkbnMKKyAgIG9uIHRoaXMgcHVuL2x1biBtYXAuIFRoaXMgbWF5IGNoYW5nZSBkdXJpbmcgb3BlcmF0aW9uLCB3aGVuIGEgbGRuIGlzCisgICByZWFzc2lnbmVkIHRvIGFub3RoZXIgcHVuL2x1biBjb21iaW5hdGlvbi4gSWYgdGhlIG5lY2Vzc2l0eSBmb3IgZHluYW1pY2FsCisgICBhc3NpZ25tZW50cyBpcyBzZXQgdG8gJ25vJywgdGhlIGxkbiBzdHJ1Y3R1cmUga2VlcHMgc3RhdGljLgorICAgCisgICAyLjEyIC9wcm9jL21jYS1GaWxlc3lzdGVtIEluZm9ybWF0aW9uCisgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICBUaGUgc2xvdC1maWxlIGNvbnRhaW5zIGFsbCBkZWZhdWx0IGVudHJpZXMgYW5kIGluIGFkZGl0aW9uIGNoaXAgYW5kIEkvTy0KKyAgIGFkZHJlc3MgaW5mb3JtYXRpb24gb2YgdGhlIFNDU0ktc3Vic3lzdGVtLiBUaGlzIGluZm9ybWF0aW9uIGlzIHByb3ZpZGVkCisgICBieSBpYm1tY2FfZ2V0aW5mbygpLgorICAgCisgICAyLjEzIFN1cHBvcnRlZCBJQk0gU0NTSS1TdWJzeXN0ZW1zCisgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICBUaGUgZm9sbG93aW5nIElCTSBTQ1NJLXN1YnN5c3RlbXMgYXJlIHN1cHBvcnRlZCBieSB0aGlzIGRyaXZlcjoKKyAgIAorICAgICAtIElCTSBGYXN0L1dpZGUgU0NTSS0yIEFkYXB0ZXIKKyAgICAgLSBJQk0gNzU2OCBJbmR1c3RyaWFsIENvbXB1dGVyIFNDU0kgQWRhcHRlciB3L0NhY2hlCisgICAgIC0gSUJNIEV4cGFuc2lvbiBVbml0IFNDU0kgQ29udHJvbGxlcgorICAgICAtIElCTSBTQ1NJIEFkYXB0ZXIgdy9DYWNoZQorICAgICAtIElCTSBTQ1NJIEFkYXB0ZXIKKyAgICAgLSBJQk0gSW50ZWdyYXRlZCBTQ1NJIENvbnRyb2xsZXIKKyAgICAgLSBBbGwgY2xvbmVzLCAxMDAlIGNvbXBhdGlibGUgd2l0aCB0aGUgY2hpcHNldCBhbmQgc3Vic3lzdGVtIGNvbW1hbmQKKyAgICAgICBzeXN0ZW0gb2YgSUJNIFNDU0ktYWRhcHRlcnMgKGZvcmNlZCBkZXRlY3Rpb24pCisgICAgIAorICAgMi4xNCBMaW51eCBLZXJuZWwgVmVyc2lvbnMKKyAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICBUaGUgSUJNIFNDU0ktc3Vic3lzdGVtIGxvdyBsZXZlbCBkcml2ZXIgaXMgcHJlcGFyZWQgdG8gYmUgdXNlZCB3aXRoCisgICBhbGwgdmVyc2lvbnMgb2YgTGludXggYmV0d2VlbiAyLjAueCBhbmQgMi40LnguIFRoZSBjb21wYXRpYmlsaXR5IGNoZWNrcworICAgYXJlIGZ1bGx5IGltcGxlbWVudGVkIHVwIGZyb20gdmVyc2lvbiAzLjFlIG9mIHRoZSBkcml2ZXIuIFRoaXMgbWVhbnMsIHRoYXQKKyAgIHlvdSBqdXN0IG5lZWQgdGhlIGxhdGVzdCBpYm1tY2EuaCBhbmQgaWJtbWNhLmMgZmlsZSBhbmQgY29weSBpdCBpbiB0aGUKKyAgIGxpbnV4L2RyaXZlcnMvc2NzaSBkaXJlY3RvcnkuIFRoZSBjb2RlIGlzIGF1dG9tYXRpY2FsbHkgYWRhcHRlZCBkdXJpbmcgCisgICBrZXJuZWwgY29tcGlsYXRpb24uIFRoaXMgaXMgZGlmZmVyZW50IGZyb20ga2VybmVsIDIuNC4wISBIZXJlIHZlcnNpb24gCisgICA0LjAgb3IgbGF0ZXIgb2YgdGhlIGRyaXZlciBtdXN0IGJlIHVzZWQgZm9yIGtlcm5lbCAyLjQuMCBvciBsYXRlci4gVmVyc2lvbgorICAgNC4wIG9yIGxhdGVyIGRvZXMgbm90IHdvcmsgdG9nZXRoZXIgd2l0aCBvbGRlciBrZXJuZWxzISBEcml2ZXIgdmVyc2lvbnMKKyAgIG9sZGVyIHRoYW4gNC4wIGRvIG5vdCB3b3JrIHRvZ2V0aGVyIHdpdGgga2VybmVsIDIuNC4wIG9yIGxhdGVyLiBUaGV5IHdvcmsKKyAgIG9uIGFsbCBvbGRlciBrZXJuZWxzLgorCisgICAzIENvZGUgSGlzdG9yeQorICAgLS0tLS0tLS0tLS0tLS0KKyAgIEphbiAxNSAxOTk2OiAgRmlyc3QgcHVibGljIHJlbGVhc2UuCisgICAtIE1hcnRpbiBLb2xpbmVrCisKKyAgIEphbiAyMyAxOTk2OiAgU2NyYXBwZWQgY29kZSB3aGljaCByZWFzc2lnbmVkIHNjc2kgZGV2aWNlcyB0byBsb2dpY2FsCisgICBkZXZpY2UgbnVtYmVycy4gSW5zdGVhZCwgdGhlIGV4aXN0aW5nIGFzc2lnbm1lbnQgKGNyZWF0ZWQKKyAgIHdoZW4gdGhlIG1hY2hpbmUgaXMgcG93ZXJlZC11cCBvciByZWJvb3RlZCkgaXMgdXNlZC4gCisgICBBIHNpZGUgZWZmZWN0IGlzIHRoYXQgdGhlIHVwcGVyIGxheWVyIG9mIExpbnV4IFNDU0kgCisgICBkZXZpY2UgZHJpdmVyIGdldHMgYm9ndXMgc2NzaSBpZHMgKHRoaXMgaXMgYmVuaWduKSwgCisgICBhbmQgYWxzbyB0aGUgaGFyZCBkaXNrcyBhcmUgb3JkZXJlZCB1bmRlciBMaW51eCB0aGUgCisgICBzYW1lIHdheSBhcyB0aGV5IGFyZSB1bmRlciBkb3MgKGkuZS4sIEM6IGRpc2sgaXMgc2RhLCAKKyAgIEQ6IGRpc2sgaXMgc2RiLCBldGMuKS4KKyAgIC0gTWFydGluIEtvbGluZWsKKworICAgSSB0aGluayB0aGF0IHRoZSBDRC1ST00gaXMgbm93IGRldGVjdGVkIG9ubHkgaWYgYSBDRCBpcyAKKyAgIGluc2lkZSBDRF9ST00gd2hpbGUgTGludXggYm9vdHMuIFRoaXMgY2FuIGJlIGZpeGVkIGxhdGVyLAorICAgb25jZSB0aGUgZHJpdmVyIHdvcmtzIG9uIGFsbCB0eXBlcyBvZiBQUy8yJ3MuCisgICAtIE1hcnRpbiBLb2xpbmVrCisKKyAgIEZlYiA3IDE5OTY6ICAgTW9kaWZpZWQgYmlvc3BhcmFtIGZ1bmN0aW9uLiBGaXhlZCB0aGUgQ0QtUk9NIGRldGVjdGlvbi4gCisgICBGb3Igbm93LCBkZXZpY2VzIG90aGVyIHRoYW4gaGFyZGRpc2sgYW5kIENEX1JPTSBhcmUgCisgICBpZ25vcmVkLiBUZW1wb3JhcmlseSBtb2RpZmllZCBhYm9ydCgpIGZ1bmN0aW9uIAorICAgdG8gYmVoYXZlIGxpa2UgcmVzZXQoKS4KKyAgIC0gTWFydGluIEtvbGluZWsKKworICAgTWFyIDMxIDE5OTY6ICBUaGUgaW50ZWdyYXRlZCBzY3NpIHN1YnN5c3RlbSBpcyBjb3JyZWN0bHkgZm91bmQKKyAgIGluIFBTLzIgbW9kZWxzIDU2LDU3LCBidXQgbm90IGluIG1vZGVsIDc2LiBUaGVyZWZvcmUKKyAgIHRoZSBpYm1tY2Ffc2NzaV9zZXR1cCgpIGZ1bmN0aW9uIGhhcyBiZWVuIGFkZGVkIHRvZGF5LgorICAgVGhpcyBmdW5jdGlvbiBhbGxvd3MgdGhlIHVzZXIgdG8gZm9yY2UgZGV0ZWN0aW9uIG9mCisgICBzY3NpIHN1YnN5c3RlbS4gVGhlIGtlcm5lbCBvcHRpb24gaGFzIGZvcm1hdAorICAgaWJtbWNhc2NzaT1uCisgICB3aGVyZSBuIGlzIHRoZSBzY3NpX2lkIChwdW4pIG9mIHRoZSBzdWJzeXN0ZW0uIE1vc3QgbGlrZWx5LCBuIGlzIDcuCisgICAtIE1hcnRpbiBLb2xpbmVrCisKKyAgIEF1ZyAyMSAxOTk2OiAgTW9kaWZpZWQgdGhlIGNvZGUgd2hpY2ggbWFwcyBsZG5zIHRvIChwdW4sMCkuICBJdCB3YXMKKyAgIGluc3VmZmljaWVudCBmb3IgdGhvc2Ugb2YgdXMgd2l0aCBDRC1ST00gY2hhbmdlcnMuCisgICAtIENocmlzIEJlYXVyZWdhcmQKKyAKKyAgIERlYyAxNCAxOTk2OiBNb3JlIGltcHJvdmVtZW50cyB0byB0aGUgbGRuIG1hcHBpbmcuICBTZWUgY2hlY2tfZGV2aWNlcworICAgZm9yIGRldGFpbHMuICBEaWQgbW9yZSBmaWRkbGluZyB3aXRoIHRoZSBpbnRlZ3JhdGVkIFNDU0kgZGV0ZWN0aW9uLAorICAgYnV0IEkgdGhpbmsgaXQncyB1bHRpbWF0ZWx5IGhvcGVsZXNzIHdpdGhvdXQgYWN0dWFsbHkgdGVzdGluZyB0aGUKKyAgIG1vZGVsIG9mIHRoZSBtYWNoaW5lLiAgVGhlIDU2LCA1NywgNzYgYW5kIDk1ICh1bHRpbWVkaWEpIGFsbCBoYXZlCisgICBkaWZmZXJlbnQgaW50ZWdyYXRlZCBTQ1NJIHJlZ2lzdGVyIGNvbmZpZ3VyYXRpb25zLiAgSG93ZXZlciwgdGhlIDU2CisgICBhbmQgNTcgYXJlIHRoZSBvbmx5IG9uZXMgdGhhdCBoYXZlIHByb2JsZW1zIHdpdGggZm9yY2VkIGRldGVjdGlvbi4KKyAgIC0gQ2hyaXMgQmVhdXJlZ2FyZAorIAorICAgTWFyIDgtMTYgMTk5NzogTW9kaWZpZWQgZHJpdmVyIHRvIHJ1biBhcyBhIG1vZHVsZSBhbmQgdG8gc3VwcG9ydCAKKyAgIG11bHRpcGxlIGFkYXB0ZXJzLiBBIHN0cnVjdHVyZSwgY2FsbGVkIGlibW1jYV9ob3N0ZGF0YSwgaXMgbm93CisgICBwcmVzZW50LCBjb250YWluaW5nIGFsbCB0aGUgdmFyaWFibGVzLCB0aGF0IHdlcmUgb25jZSBvbmx5CisgICBhdmFpbGFibGUgZm9yIG9uZSBzaW5nbGUgYWRhcHRlci4gVGhlIGZpbmRfc3Vic3lzdGVtLXJvdXRpbmUgaGFzIHZhbmlzaGVkLgorICAgVGhlIGhhcmR3YXJlIHJlY29nbml0aW9uIGlzIG5vdyBkb25lIGluIGlibW1jYV9kZXRlY3QgZGlyZWN0bHkuCisgICBUaGlzIHJvdXRpbmUgY2hlY2tzIGZvciBwcmVzZW5jZSBvZiBNQ0EtYnVzLCBjaGVja3MgdGhlIGludGVycnVwdAorICAgbGV2ZWwgYW5kIGNvbnRpbnVlcyB3aXRoIGNoZWNraW5nIHRoZSBpbnN0YWxsZWQgaGFyZHdhcmUuCisgICBDZXJ0YWluIFBTLzItbW9kZWxzIGRvIG5vdCByZWNvZ25pemUgYSBTQ1NJLXN1YnN5c3RlbSBhdXRvbWF0aWNhbGx5LgorICAgSGVuY2UsIHRoZSBzZXR1cCBkZWZpbmVkIGJ5IGNvbW1hbmQtbGluZS1wYXJhbWV0ZXJzIGlzIGNoZWNrZWQgZmlyc3QuCisgICBUaGVyZWFmdGVyLCB0aGUgcm91dGluZSBwcm9iZXMgZm9yIGFuIGludGVncmF0ZWQgU0NTSS1zdWJzeXN0ZW0uCisgICBGaW5hbGx5LCBhZGFwdGVycyBhcmUgY2hlY2tlZC4gVGhpcyBtZXRob2QgaGFzIHRoZSBhZHZhbnRhZ2UgdG8gY292ZXIgYWxsCisgICBwb3NzaWJsZSBjb21iaW5hdGlvbnMgb2YgbXVsdGlwbGUgU0NTSS1zdWJzeXN0ZW1zIG9uIG9uZSBNQ0EtYm9hcmQuIFVwIHRvCisgICBlaWdodCBTQ1NJLXN1YnN5c3RlbXMgY2FuIGJlIHJlY29nbml6ZWQgYW5kIGFubm91bmNlZCB0byB0aGUgdXBwZXItbGV2ZWwKKyAgIGRyaXZlcnMgd2l0aCB0aGlzIGltcHJvdmVtZW50LiBBIHNldCBvZiBkZWZpbmVzIG1hZGUgY2hhbmdlcyB0byBvdGhlcgorICAgcm91dGluZXMgYXMgc21hbGwgYXMgcG9zc2libGUuCisgICAtIEtsYXVzIEt1ZGllbGthCisgICAKKyAgIE1heSAzMCAxOTk3OiAodjEuNWIpCisgICAxKSBTQ1NJLWNvbW1hbmQgY2FwYWJpbGl0eSBlbmxhcmdlZCBieSB0aGUgcmVjb2duaXRpb24gb2YgTU9ERV9TRUxFQ1QuCisgICAgICBUaGlzIG5lZWRzIHRoZSBSRC1CaXQgdG8gYmUgZGlzYWJsZWQgb24gSU1fT1RIRVJfU0NTSV9DTURfQ01EIHdoaWNoIAorICAgICAgYWxsb3dzIGRhdGEgdG8gYmUgd3JpdHRlbiBmcm9tIHRoZSBzeXN0ZW0gdG8gdGhlIGRldmljZS4gSXQgaXMgYQorICAgICAgbmVjZXNzYXJ5IHN0ZXAgdG8gYmUgYWxsb3dlZCB0byBzZXQgYmxvY2tzaXplIG9mIFNDU0ktdGFwZS1kcml2ZXMgYW5kIAorICAgICAgdGhlIHRhcGUtc3BlZWQsIHdoaXRob3V0IGNvbmZ1c2luZyB0aGUgU0NTSS1TdWJzeXN0ZW0uCisgICAyKSBUaGUgcmVjb2duaXRpb24gb2YgYSB0YXBlIGlzIGluY2x1ZGVkIGluIHRoZSBjaGVja19kZXZpY2VzIHJvdXRpbmUuCisgICAgICBUaGlzIGlzIGRvbmUgYnkgY2hlY2tpbmcgZm9yIFRZUEVfVEFQRSwgdGhhdCBpcyBhbHJlYWR5IGRlZmluZWQgaW4KKyAgICAgIHRoZSBrZXJuZWwtc2NzaS1lbnZpcm9ubWVudC4gVGhlIG1hcmt1cCBvZiBhIHRhcGUgaXMgZG9uZSBpbiB0aGUgCisgICAgICBnbG9iYWwgbGRuX2lzX3RhcGVbXSBhcnJheS4gSWYgdGhlIGVudHJ5IG9uIGluZGV4IGxkbiAKKyAgICAgIGlzIDEsIHRoZXJlIGlzIGEgdGFwZWRyaXZlIGNvbm5lY3RlZC4KKyAgIDMpIFRoZSBsZG5faXNfdGFwZVtdIGFycmF5IGlzIG5lY2Vzc2FyeSB0byBkaXN0aW5ndWlzaCBiZXR3ZWVuIHRhcGUtIGFuZCAKKyAgICAgIG90aGVyIGRldmljZXMuIEZpeGVkIGJsb2NrbGVuZ3RoIGRldmljZXMgc2hvdWxkIG5vdCBjYXVzZSBhIHByb2JsZW0KKyAgICAgIHdpdGggdGhlIFNDQi1jb21tYW5kIGZvciByZWFkIGFuZCB3cml0ZSBpbiB0aGUgaWJtbWNhX3F1ZXVlY29tbWFuZAorICAgICAgc3Vicm91dGluZS4gVGhlcmVmb3JlLCBJIG9ubHkgZGVyaXZhdGUgdGhlIFJFQURfWFgsIFdSSVRFX1hYIGZvcgorICAgICAgdGhlIHRhcGUtZGV2aWNlcywgYXMgcmVjb21tZW5kZWQgYnkgSUJNIGluIHRoaXMgVGVjaG5pY2FsIFJlZmVyZW5jZSwKKyAgICAgIG1lbnRpb25lZCBiZWxvdy4gKElCTSByZWNvbW1lbmRzIHRvIGF2b2lkIHVzaW5nIHRoZSByZWFkL3dyaXRlIG9mIHRoZQorICAgICAgc3Vic3lzdGVtLCBidXQgdGhlIGZhY3Qgd2FzLCB0aGF0IHJlYWQvd3JpdGUgY2F1c2VzIGEgY29tbWFuZCBlcnJvciBmcm9tCisgICAgICB0aGUgc3Vic3lzdGVtIGFuZCB0aGlzIGNhdXNlcyBrZXJuZWwtcGFuaWMuKQorICAgNCkgSW4gYWRkaXRpb24sIEkgcHJvcG9zZSB0byB1c2UgdGhlIGxkbiBpbnN0ZWFkIG9mIGEgZml4IGNoYXIgZm9yIHRoZQorICAgICAgZGlzcGxheSBvZiBQUzJfRElTS19MRURfT04oKS4gT24gOTUsIG9uZSBjYW4gZGlzdGluZ3Vpc2ggYmV0d2VlbiB0aGUKKyAgICAgIGRldmljZXMgdGhhdCBhcmUgYWNjZXNzZWQuIEl0IHNob3dzIGFjdGl2aXR5IGFuZCBlYXN5ZmllcyBkZWJ1Z2dpbmcuICAgCisgICBUaGUgdGFwZS1zdXBwb3J0IGhhcyBiZWVuIHRlc3RlZCB3aXRoIGEgU09OWSBTRFQtNTIwMCBhbmQgYSBIUCBERFMtMgorICAgKEkgZG8gbm90IGtub3cgeWV0IHRoZSB0eXBlKS4gT3B0aW1pemF0aW9uIGFuZCBDRC1ST00gYXVkaW8tc3VwcG9ydCwgCisgICBJIGFtIHdvcmtpbmcgb24gLi4uCisgICAtIE1pY2hhZWwgTGFuZworICAgCisgICBKdW5lIDE5IDE5OTc6ICh2MS42YikKKyAgIDEpIFN1Ym1pdHRpbmcgdGhlIGV4dHJhLWFycmF5IGxkbl9pc190YXBlW10gLT4gdG8gdGhlIGxvY2FsIGxkW10KKyAgICAgIGRldmljZS1hcnJheS4gCisgICAyKSBDRC1ST00gQXVkaW8tUGxheSBzZWVtcyB0byB3b3JrIG5vdy4KKyAgIDMpIFdoZW4gdXNpbmcgRERTLTIgKDEyME0pIERBVC1UYXBlcywgbXRzdCBzaG93cyBzdGlsbCBkZW5zaXR5LWNvZGUKKyAgICAgIDB4MTMgZm9yIG9yZGluYXJ5IEREUyAoNjEwMDAgQlBNKSBpbnN0ZWFkIDB4MjQgZm9yIEREUy0yLiBUaGlzIGFwcGVhcnMgCisgICAgICBhbHNvIG9uIEFkYXB0ZWMgMjk0MCBhZGFwdG9yIGluIGEgUENJLVN5c3RlbS4gVGhlcmVmb3JlLCBJIGFzc3VtZSB0aGF0IAorICAgICAgdGhlIHByb2JsZW0gaXMgaW5kZXBlbmRlbnQgb2YgdGhlIGxvdy1sZXZlbC1kcml2ZXIvYnVzLWFyY2hpdGVjdHVyZS4KKyAgIDQpIEhleGFkZWNpbWFsIGxkbiBvbiBQUy8yLTk1IExFRC1kaXNwbGF5LgorICAgNSkgRml4aW5nIG9mIHRoZSBQUy8yLUxFRCBvbi9vZmYgdGhhdCBpdCB3b3JrcyByaWdodCB3aXRoIHRhcGVkcml2ZXMgYW5kCisgICAgICBkb2VzIG5vdCBjb25mdXNlIHRoZSBkaXNrX3J3X2luX3Byb2dyZXNzIGNvdW50ZXIuCisgICAtIE1pY2hhZWwgTGFuZworICAKKyAgIEp1bmUgMjEgMTk5NzogKHYxLjdiKQorICAgMSkgQWRkaW5nIG9mIGEgcHJvY19pbmZvIHJvdXRpbmUgdG8gaW5mb3JtIGluIC9wcm9jL3Njc2kvaWJtbWNhLzxob3N0PiB0aGUKKyAgICAgIG91dGVyLXdvcmxkIGFib3V0IG9wZXJhdGlvbmFsIGxvYWQgc3RhdGlzdGljcyBvbiB0aGUgZGlmZmVyZW50IGxkbnMsCisgICAgICBzZWVuIGJ5IHRoZSBkcml2ZXIuIEV2ZXJ5Ym9keSB0aGF0IGhhcyBtb3JlIHRoYW4gb25lIElCTS1TQ1NJIHNob3VsZAorICAgICAgdGVzdCB0aGlzLCBiZWNhdXNlIEkgb25seSBoYXZlIG9uZSBhbmQgY2Fubm90IHNlZSB3aGF0IGhhcHBlbnMgd2l0aCBtb3JlCisgICAgICB0aGFuIG9uZSBJQk0tU0NTSSBob3N0cy4KKyAgIDIpIERlZmluaXRpb24gb2YgYSBkcml2ZXIgdmVyc2lvbi1udW1iZXIgdG8gaGF2ZSBhIGJldHRlciByZWNvZ25pdGlvbiBvZiAKKyAgICAgIHRoZSBzb3VyY2Ugd2hlbiB0aGVyZSBhcmUgZXhpc3RpbmcgdG9vIG11Y2ggcmVsZWFzZXMgdGhhdCBtYXkgY29uZnVzZQorICAgICAgdGhlIHVzZXIsIHdoZW4gcmVhZGluZyBhYm91dCByZWxlYXNlLXNwZWNpZmljIHByb2JsZW1zLiBVcCB0byBrbm93LAorICAgICAgSSBjYWxjdWxhdGVkIHRoZSB2ZXJzaW9uLW51bWJlciB0byBiZSAxLjcuIEJlY2F1c2Ugd2UgYXJlIGluIEJFVEEtdGVzdAorICAgICAgeWV0LCBpdCBpcyB0b2RheSAxLjdiLgorICAgMykgU29ycnkgZm9yIHRoZSBoZWF2eSBidWcgSSBwcm9ncmFtbWVkIG9uIEp1bmUgMTkgMTk5NyEgQWZ0ZXIgdGhhdCwgdGhlCisgICAgICBDRC1ST00gZGlkIG5vdCB3b3JrIGFueSBtb3JlISBUaGUgQzctY29tbWFuZCB3YXMgYSBmYWtlIGltcHJlc3Npb24KKyAgICAgIEkgZ290IHdoaWxlIHByb2dyYW1taW5nLiBOb3csIHRoZSBSRUFEIGFuZCBXUklURSBjb21tYW5kcyBmb3IgQ0QtUk9NIGFyZQorICAgICAgbm8gbG9uZ2VyIHJ1bm5pbmcgb3ZlciB0aGUgc3Vic3lzdGVtLCBidXQganVzdCBvdmVyIAorICAgICAgSU1fT1RIRVJfU0NTSV9DTURfQ01ELiBPbiBteSBvYnNlcnZhdGlvbnMgKFBTLzItOTUpLCBub3cgQ0QtUk9NIG1vdW50cworICAgICAgbXVjaCBmYXN0ZXIoISkgYW5kIGhvcGVmdWxseSBhbGwgZmFuY3kgbXVsdGltZWRpYS1mdW5jdGlvbnMsIGxpa2UgZGlyZWN0CisgICAgICBkaWdpdGFsIHJlY29yZGluZyBmcm9tIGF1ZGlvLUNEcyBhbHNvIHdvcmsuIChJIHRyaWVkIGl0IHdpdGggY2RkYTJ3YXYKKyAgICAgIGZyb20gdGhlIGNkd3Rvb2xzLXBhY2thZ2UgYW5kIGl0IGZpbGxlZCB1cCB0aGUgaGFyZGRpc2sgaW1tZWRpYXRlbHkgOi0pLikKKyAgICAgIFRvIGVhc2lmeSBib29sZWFuIGxvZ2ljcywgYSBmdXJ0aGVyIGxvY2FsIGRldmljZS10eXBlIGluIGxkW10sIGNhbGxlZAorICAgICAgaXNfY2Ryb20gaGFzIGJlZW4gaW5jbHVkZWQuCisgICA0KSBJZiBvbmUgdXNlcyBhIFNDU0ktZGV2aWNlIG9mIHVuc3VwcG9ydGVkIHR5cGUvY29tbWFuZHMsIG9uZQorICAgICAgaW1tZWRpYXRlbHkgcnVucyBpbnRvIGEga2VybmVsLXBhbmljIGNhdXNlZCBieSBDb21tYW5kIEVycm9yLiBUbyBiZXR0ZXIKKyAgICAgIHVuZGVyc3RhbmQgd2hpY2ggU0NTSS1jb21tYW5kIGNhdXNlZCB0aGUgcHJvYmxlbSwgSSBleHRlbmRlZCB0aGlzCisgICAgICBzcGVjaWZpYyBwYW5pYy1tZXNzYWdlIHNsaWdodGx5LgorICAgLSBNaWNoYWVsIExhbmcKKyAKKyAgIEp1bmUgMjUgMTk5NzogKHYxLjhiKQorICAgMSkgU29tZSBjb3NtZXRpY2FsIGNoYW5nZXMgZm9yIHRoZSBoYW5kbGluZyBvZiBTQ1NJLWRldmljZS10eXBlcy4KKyAgICAgIE5vdywgYWxzbyBDRC1CdXJuZXJzIC8gV09STXMgYW5kIFNDU0ktc2Nhbm5lcnMgc2hvdWxkIHdvcmsuIEZvcgorICAgICAgTU8tZHJpdmVzIEkgaGF2ZSBubyBleHBlcmllbmNlLCB0aGVyZWZvcmUgbm90IHlldCBzdXBwb3J0ZWQuCisgICAgICBJbiBsb2dpY2FsX2RldmljZXMgSSBjaGFuZ2VkIGZyb20gZGlmZmVyZW50IHR5cGUtdmFyaWFibGVzIHRvIG9uZQorICAgICAgY2FsbGVkICdkZXZpY2VfdHlwZScgd2hlcmUgdGhlIHZhbHVlcywgY29ycmVzcG9uZGluZyB0byBzY3NpLmgsCisgICAgICBvZiBhIFNDU0ktZGV2aWNlIGFyZSBzdG9yZWQuCisgICAyKSBUaGVyZSBleGlzdGVkIGEgc21hbGwgYnVnLCB0aGF0IG1hcHMgYSBkZXZpY2UsIGNvbWluZyBhZnRlciBhIFNDU0ktdGFwZQorICAgICAgd3JvbmcuIFRoZXJlZm9yZSwgZS5nLiBhIENELVJPTSBjaGFuZ2VyIHdvdWxkIGhhdmUgYmVlbiBtYXBwZWQgd3JvbmcKKyAgICAgIC0+IHByb2JsZW0gcmVtb3ZlZC4KKyAgIDMpIEV4dGVuc2lvbiBvZiB0aGUgbG9naWNhbF9kZXZpY2Ugc3RydWN0dXJlLiBOb3cgaXQgY29udGFpbnMgYWxzbyBkZXZpY2UsCisgICAgICB2ZW5kb3IgYW5kIHJldmlzaW9uLWxldmVsIG9mIGEgU0NTSS1kZXZpY2UgZm9yIGludGVybmFsIHVzYWdlLgorICAgLSBNaWNoYWVsIExhbmcKKworICAgSnVuZSAyNi0yOSAxOTk3OiAodjIuMGIpCisgICAxKSBUaGUgcmVsZWFzZSBudW1iZXIgMi4wYiBpcyBuZWNlc3NhcnkgYmVjYXVzZSBvZiB0aGUgY29tcGxldGVseSBuZXcgZG9uZQorICAgICAgcmVjb2duaXRpb24gYW5kIGhhbmRsaW5nIG9mIFNDU0ktZGV2aWNlcyB3aXRoIHRoZSBhZGFwdGVyLiBBcyBJIGdvdAorICAgICAgZnJvbSBDaHJpcyB0aGUgaGludCwgdGhhdCB0aGUgc3Vic3lzdGVtIGNhbiByZWFzc2lnbiBsZG5zIGR5bmFtaWNhbGx5LAorICAgICAgSSByZW1lbWJlcmVkIHRoaXMgaW1tZWRpYXRlX2Fzc2lnbi1jb21tYW5kLCBJIGZvdW5kIG9uY2UgaW4gdGhlIGhhbmRib29rLgorICAgICAgTm93LCB0aGUgZHJpdmVyIGZpcnN0IGtpbGxzIGFsbCBsZG4gYXNzaWdubWVudHMgdGhhdCBhcmUgc2V0IGJ5IGRlZmF1bHQKKyAgICAgIG9uIHRoZSBTQ1NJLXN1YnN5c3RlbS4gQWZ0ZXIgdGhhdCwgaXQgcHJvYmVzIG9uIGFsbCBwdW5zIGFuZCBsdW5zIGZvcgorICAgICAgZGV2aWNlcyBieSBnb2luZyB0aHJvdWdoIGFsbCBjb21iaW5hdGlvbnMgd2l0aCBpbW1lZGlhdGVfYXNzaWduIGFuZAorICAgICAgcHJvYmluZyBmb3IgZGV2aWNlcywgdXNpbmcgZGV2aWNlX2lucXVpcnkuIFRoZSBmb3VuZCBwaHlzaWNhbCghKSBwdW4sbHVuCisgICAgICBzdHJ1Y3R1cmUgaXMgc3RvcmVkIGluIGdldF9zY3NpW11bXSBhcyBkZXZpY2UgdHlwZXMuIFRoaXMgaXMgZm9sbG93ZWQKKyAgICAgIGJ5IHRoZSBhc3NpZ25tZW50IG9mIGFsbCBsZG5zIHRvIGV4aXN0aW5nIFNDU0ktZGV2aWNlcy4gSWYgbW9yZSBsZG5zCisgICAgICB0aGFuIGRldmljZXMgYXJlIGF2YWlsYWJsZSwgdGhleSBhcmUgYXNzaWduZWQgdG8gbm9uIGV4aXN0aW5nIHB1bixsdW4KKyAgICAgIGNvbWJpbmF0aW9ucyB0byBzYXRpc2Z5IHRoZSBhZGFwdGVyLiBXaXRoIHRoaXMsIHRoZSBkeW5hbWljYWwgbWFwcGluZworICAgICAgd2FzIHBvc3NpYmxlIHRvIGltcGxlbWVudC4gKEZvciBmdXJ0aGVyIGluZm8gc2VlIHRoZSB0ZXh0IGluIHRoZSAKKyAgICAgIHNvdXJjZS1jb2RlIGFuZCBpbiB0aGUgZGVzY3JpcHRpb24gYmVsb3cuIFJlYWQgdGhlIGRlc2NyaXB0aW9uCisgICAgICBiZWxvdyBCRUZPUkUgaW5zdGFsbGluZyB0aGlzIGRyaXZlciBvbiB5b3VyIHN5c3RlbSEpCisgICAyKSBDaGFuZ2VkIHRoZSBuYW1lIElCTU1DQV9EUklWRVJfVkVSU0lPTiB0byBJQk1NQ0FfU0NTSV9EUklWRVJfVkVSU0lPTi4KKyAgIDMpIFRoZSBMRUQtZGlzcGxheSBzaG93cyBvbiBQUy8yLTk1IG5vIGxvbmdlciB0aGUgbGRuLCBidXQgdGhlIFNDU0ktSUQKKyAgICAgIChwdW4pIG9mIHRoZSBhY2Nlc3NlZCBTQ1NJLWRldmljZS4gVGhpcyBpcyBub3cgc2Vuc2VmdWwsIGJlY2F1c2UgdGhlIAorICAgICAgcHVuIGtub3duIHdpdGhpbiB0aGUgZHJpdmVyIGlzIGV4YWN0bHkgdGhlIHB1biBvZiB0aGUgcGh5c2ljYWwgZGV2aWNlCisgICAgICBhbmQgbm8gbG9uZ2VyIGEgZmFrZSBvbmUuCisgICA0KSBUaGUgL3Byb2Mvc2NzaS9pYm1tY2EvPGhvc3Rfbm8+IGNvbnNpc3RzIG5vdyBvZiB0aGUgZmlyc3QgcGFydCwgd2hlcmUKKyAgICAgIGhpdC1zdGF0aXN0aWNzIG9mIGxkbnMgaXMgc2hvd24gYW5kIGEgc2Vjb25kIHBhcnQsIHdoZXJlIHRoZSBtYXBzIG9mIAorICAgICAgcGh5c2ljYWwgYW5kIGxvZ2ljYWwgU0NTSS1kZXZpY2VzIGFyZSBkaXNwbGF5ZWQuIFRoaXMgY291bGQgYmUgdmVyeSAKKyAgICAgIGludGVyZXN0aW5nLCB3aGVuIG9uZSBpcyB1c2luZyBtb3JlIHRoYW4gMTUgU0NTSS1kZXZpY2VzIGluIG9yZGVyIHRvIAorICAgICAgZm9sbG93IHRoZSBkeW5hbWljYWwgcmVtYXBwaW5nIG9mIGxkbnMuCisgICAtIE1pY2hhZWwgTGFuZworIAorICAgSnVuZSAyNi0yOSAxOTk3OiAodjIuMGItMSkKKyAgIDEpIEkgZm9yZ290IHRvIHN3aXRjaCB0aGUgbG9jYWxfY2hlY2tpbmdfcGhhc2VfZmxhZyB0byAxIGFuZCBiYWNrIHRvIDAKKyAgICAgIGluIHRoZSBkeW5hbWljYWwgcmVtYXBwaW5nIHBhcnQgaW4gaWJtbWNhX3F1ZXVlY29tbWFuZCBmb3IgdGhlIAorICAgICAgZGV2aWNlX2V4aXN0IHJvdXRpbmUuIFNvcnJ5LgorICAgLSBNaWNoYWVsIExhbmcKKyAKKyAgIEp1bHkgMS0xMyAxOTk3OiAodjMuMGIsYykKKyAgIDEpIE1lcmdpbmcgb2YgdGhlIGRyaXZlci1kZXZlbG9wbWVudHMgb2YgS2xhdXMgS3VkaWVsa2EgYW5kIE1pY2hhZWwgTGFuZyAKKyAgICAgIGluIG9yZGVyIHRvIGdldCBhIG9wdGltdW0gYW5kIHVuaWZpZWQgZHJpdmVyLXJlbGVhc2UgZm9yIHRoZSAKKyAgICAgIElCTS1TQ1NJLVN1YnN5c3RlbS1BZGFwdGVyKHMpLgorICAgICAgICAgRm9yIHBlb3BsZSwgdXNpbmcgdGhlIEtlcm5lbC1yZWxlYXNlID49Mi4xLjAsIG1vZHVsZS1zdXBwb3J0IHNob3VsZCAKKyAgICAgIGJlIG5vIHByb2JsZW0uIEZvciB1c2VycywgcnVubmluZyB1bmRlciA8Mi4xLjAsIG1vZHVsZS1zdXBwb3J0IG1heSBub3QgCisgICAgICB3b3JrLCBiZWNhdXNlIHRoZSBtZXRob2RzIGhhdmUgY2hhbmdlZCBiZXR3ZWVuIDIuMC54IGFuZCAyLjEueC4KKyAgIDIpIEFkZGVkIHNvbWUgbW9yZSBlZmZlY3RpdmUgc3RhdGlzdGljcyBmb3IgL3Byb2Mtb3V0cHV0LgorICAgMykgQ2hhbmdlIHR5cGVjYXN0aW5nIGF0IG5lY2Vzc2FyeSBwb2ludHMgZnJvbSAodW5zaWduZWQgbG9uZykgdG8KKyAgICAgIHZpcnRfdG9fYnVzKCkuCisgICA0KSBJbmNsdWRlZCAjaWYuLi4gYXQgc3BlY2lhbCBwb2ludHMgdG8gaGF2ZSBzcGVjaWZpYyBhZGFwdGlvbiBvZiB0aGUKKyAgICAgIGRyaXZlciB0byBrZXJuZWwgMi4wLnggYW5kIDIuMS54LiBJdCBzaG91bGQgdGhlcmVmb3JlIGFsc28gcnVuIHdpdGggCisgICAgICBsYXRlciByZWxlYXNlcy4KKyAgIDUpIE1hZ25ldG8tT3B0aWNhbCBkcml2ZXMgYW5kIG1lZGl1bS1jaGFuZ2VycyBhcmUgYWxzbyByZWNvZ25pemVkLCBub3cuCisgICAgICBUaGVyZWZvcmUsIHdlIGhhdmUgYSBjb21wbGV0ZWx5IGdhcGZyZWUgcmVjb2duaXRpb24gb2YgYWxsIFNDU0ktCisgICAgICBkZXZpY2UtdHlwZXMsIHRoYXQgYXJlIGtub3duIGJ5IExpbnV4IHVwIHRvIGtlcm5lbCAyLjEuMzEuCisgICA2KSBUaGUgZmxhZyBTQ1NJX0lCTU1DQV9ERVZfUkVTRVQgaGFzIGJlZW4gaW5zZXJ0ZWQuIElmIGl0IGlzIHNldCB3aXRoaW4KKyAgICAgIHRoZSBjb25maWd1cmF0aW9uLCBlYWNoIGNvbm5lY3RlZCBTQ1NJLWRldmljZSB3aWxsIGdldCBhIHJlc2V0IGNvbW1hbmQKKyAgICAgIGR1cmluZyBib290dGltZS4gVGhpcyBjYW4gYmUgbmVjZXNzYXJ5IGZvciBzb21lIHNwZWNpYWwgU0NTSS1kZXZpY2VzLgorICAgICAgVGhpcyBmbGFnIHNob3VsZCBiZSBpbmNsdWRlZCBpbiBDb25maWcuaW4uCisgICAgICAoU2VlIGFsc28gdGhlIG5ldyBDb25maWcuaW4gZmlsZS4pCisgICBQcm9iYWJsZSBuZXh0IGltcHJvdmVtZW50OiBiYWQgZGlzayBoYW5kbGVyLgorICAgLSBNaWNoYWVsIExhbmcKKyAKKyAgIFNlcHQgMTQgMTk5NzogKHYzLjBjKQorICAgMSkgU29tZSBkZWJ1Z2dpbmcgYW5kIHNwZWVkIG9wdGltaXphdGlvbiBhcHBsaWVkLgorICAgLSBNaWNoYWVsIExhbmcKKworICAgRGVjIDE1LCAxOTk3CisgICAgLSBjaHJpc2JAdHJ1ZXNwZWN0cmEuY29tCisgICAgLSBtYWRlIHRoZSBmcm9udCBwYW5lbCBkaXNwbGF5IHRoaW5neSBvcHRpb25hbCwgc3BlY2lmaWVkIGZyb20gdGhlCisgICAgY29tbWFuZC1saW5lIHZpYSBpYm1tY2FzY3NpPWRpc3BsYXkuICBBbG9uZyB0aGUgbGluZXMgb2YgdGhlIC9MRUQKKyAgICBvcHRpb24gZm9yIHRoZSBPUy8yIGRyaXZlci4KKyAgICAtIGZpeGVkIHNtYWxsIGJ1ZyBpbiB0aGUgTEVEIGRpc3BsYXkgdGhhdCB3b3VsZCBoYW5nIHNvbWUgbWFjaGluZXMuCisgICAgLSByZXZlcnNlZCBvcmRlcmluZyBvZiB0aGUgZHJpdmVzICh1c2luZyB0aGUKKyAgICBJQk1NQ0FfU0NTSV9PUkRFUl9TVEFOREFSRCBkZWZpbmUpLiAgVGhpcyBpcyBuZWNlc3NhcnkgZm9yIHR3byBtYWluCisgICAgcmVhc29uczoKKwktIHVzZXJzIHdobyd2ZSBhbHJlYWR5IGluc3RhbGxlZCBMaW51eCB3b24ndCBiZSBzY3Jld2VkLiAgS2VlcAorCWluIG1pbmQgdGhhdCBub3QgZXZlcnlvbmUgaXMgYSBrZXJuZWwgaGFja2VyLgorCS0gYmUgY29uc2lzdGVudCB3aXRoIHRoZSBCSU9TIG9yZGVyaW5nIG9mIHRoZSBkcml2ZXMuICBJbiB0aGUKKwlCSU9TLCBpZCA2IGlzIEM6LCBpZCAwIG1pZ2h0IGJlIEQ6LiAgV2l0aCB0aGlzIHNjaGVtZSwgdGhleSdkIGJlCisJYmFja3dhcmRzLiAgVGhpcyBjb25mdXNlcyB0aGUgY3JhcCBvdXQgb2YgdGhvc2UgaGVhdGhlbnMgd2hvJ3ZlCisJZ290IGEgaW1wdXJlIExpbnV4IGluc3RhbGxhdGlvbiAod2hpY2gsIDx3aW5jZT4sIEknbSBvbmUgb2YpLgorICAgIFRoaXMgd2hvbGUgcHJvYmxlbSBhcmlzZXMgYmVjYXVzZSBJQk0gaXMgYWN0dWFsbHkgbm9uLXN0YW5kYXJkIHdpdGgKKyAgICB0aGUgaWQgdG8gQklPUyBtYXBwaW5ncy4gIFlvdSdsbCBmaW5kLCBpbiBmZG9tYWluLmMsIGEgc2ltaWxhcgorICAgIGNvbW1lbnQgYWJvdXQgYSBmZXcgRkQgQklPUyByZXZpc2lvbnMuICBUaGUgTGludXggKGFuZCBhcHBhcmVudGx5CisgICAgaW5kdXN0cnkpIHN0YW5kYXJkIGlzIHRoYXQgQzogbWFwcyB0byBzY3NpIGlkICgwLDApLiAgTGV0J3Mgc3RpY2sKKyAgICB3aXRoIHRoYXQgc3RhbmRhcmQuCisgICAgLSBTaW5jZSB0aGlzIGlzIHRlY2huaWNhbGx5IGEgYnJhbmNoIG9mIG15IG93biwgSSBjaGFuZ2VkIHRoZQorICAgIHZlcnNpb24gbnVtYmVyIHRvIDMuMGUtY3BiLgorCisgICBKYW4gMTcsIDE5OTg6ICh2My4wZikKKyAgIDEpIEFkZGl0aW9uIG9mIHNvbWUgc3RhdGlzdGljYWwgaW5mbyBmb3IgL3Byb2MgaW4gcHJvY19pbmZvLgorICAgMikgVGFraW5nIGNhcmUgb2YgdGhlIFNDU0ktYXNzaWdubWVudCBwcm9ibGVtLCBkZWFsZWQgYnkgQ2hyaXMgYXQgRGVjIDE1CisgICAgICAxOTk3LiBJbiBmYWN0LCBJQk0gaXMgcmlnaHQsIGNvbmNlcm5pbmcgdGhlIGFzc2lnbm1lbnQgb2YgU0NTSS1kZXZpY2VzIAorICAgICAgdG8gZHJpdmVsZXR0ZXJzLiBJdCBpcyBjb25mb3JtIHRvIHRoZSBBTlNJLWRlZmluaXRpb24gb2YgdGhlIFNDU0ktCisgICAgICBzdGFuZGFyZCB0byBhc3NpZ24gZHJpdmUgQzogdG8gU0NTSS1pZCA2LCBiZWNhdXNlIGl0IGlzIHRoZSBoaWdoZXN0CisgICAgICBoYXJkd2FyZSBwcmlvcml0eSBhZnRlciB0aGUgaG9zdGFkYXB0ZXIgKHRoYXQgaGFzIHN0aWxsIHRvZGF5IGJ5CisgICAgICBkZWZhdWx0IGV2ZXJ5d2hlcmUgaWQgNykuIEFsc28gcmVhbHRpbWUtb3BlcmF0aW5nIHN5c3RlbXMgdGhhdCBJIHVzZSwgCisgICAgICBsaWtlIEx5bnhPUyBhbmQgT1M5LCB3aGljaCBhcmUgcXVpdGUgaW5kdXN0cmlhbCBzeXN0ZW1zIHVzZSB0b3AtZG93bgorICAgICAgbnVtYmVyaW5nIG9mIHRoZSBoYXJkZGlza3MsIHRoYXQgaXMgYWxzbyBzdGFydGluZyBhdCBpZCA2LiBOb3csIG9uZQorICAgICAgc2l0cyBhIGJpdCBiZXR3ZWVuIHR3byBjaGFpcnMuIE9uIG9uZSBoYW5kIHNpZGUsIHVzaW5nIHRoZSBkZWZpbmUKKyAgICAgIElCTU1DQV9TQ1NJX09SREVSX1NUQU5EQVJEIG1ha2VzIExpbnV4IGFzc2lnbmluZyBkaXNrcyBjb25mb3JtIHRvCisgICAgICB0aGUgSUJNLSBhbmQgQU5TSS1TQ1NJLXN0YW5kYXJkIGFuZCBrZWVwcyB0aGlzIGRyaXZlciBkb3dud2FyZAorICAgICAgY29tcGF0aWJsZSB0byBvbGRlciByZWxlYXNlcywgb24gdGhlIG90aGVyIGhhbmQgc2lkZSwgcGVvcGxlIGlzIHF1aXRlCisgICAgICBoYWJpdHVhdGVkIGluIGJlbGlldmluZyB0aGF0IEM6IGlzIGFzc2lnbmVkIHRvICgwLDApIGFuZCBtdWNoIG90aGVyCisgICAgICBTQ1NJLUJJT1MgZG8gc28uIFRoZXJlZm9yZSwgSSBtb3ZlZCB0aGUgSUJNTUNBX1NDU0lfT1JERVJfU1RBTkRBUkQgCisgICAgICBkZWZpbmUgb3V0IG9mIHRoZSBkcml2ZXIgYW5kIHB1dCBpdCBpbnRvIENvbmZpZy5pbiBhcyBzdWJpdGVtIG9mIAorICAgICAgJ0lCTSBTQ1NJIHN1cHBvcnQnLiBBIGhlbHAsIGFkZGVkIHRvIERvY3VtZW50YXRpb24vQ29uZmlndXJlLmhlbHAgCisgICAgICBleHBsYWlucyB0aGUgZGlmZmVyZW5jZXMgYmV0d2VlbiBzYXlpbmcgJ3knIG9yICduJyB0byB0aGUgdXNlciwgd2hlbiAKKyAgICAgIElCTU1DQV9TQ1NJX09SREVSX1NUQU5EQVJEIHByb21wdHMsIHNvIHRoZSBvcmRpbmFyeSB1c2VyIGlzIGVuYWJsZWQgdG8gCisgICAgICBjaG9vc2UgdGhlIHdheSBvZiBhc3NpZ25tZW50LCBkZXBlbmRpbmcgb24gaGlzIG93biBzaXR1YXRpb24gYW5kIGd1c3RvLgorICAgMykgQWRhcHRlZCBTQ1NJX0lCTU1DQV9ERVZfUkVTRVQgdG8gdGhlIGxvY2FsIG5hbWluZyBjb252ZW50aW9uLCBzbyBpdCBpcworICAgICAgbm93IGNhbGxlZCBJQk1NQ0FfU0NTSV9ERVZfUkVTRVQuCisgICA0KSBPcHRpbWl6YXRpb24gb2YgcHJvY19pbmZvIGFuZCBpdHMgc3Vicm91dGluZXMuCisgICA1KSBBZGRlZCBtb3JlIGluLXNvdXJjZS1jb21tZW50cyBhbmQgZXh0ZW5kZWQgdGhlIGRyaXZlciBkZXNjcmlwdGlvbiBieQorICAgICAgc29tZSBleHBsYW5hdGlvbiBhYm91dCB0aGUgU0NTSS1kZXZpY2UtYXNzaWdubWVudCBwcm9ibGVtLgorICAgLSBNaWNoYWVsIExhbmcKKyAgIAorICAgSmFuIDE4LCAxOTk4OiAodjMuMGcpCisgICAxKSBDb3JyZWN0aW5nIG5hbWVzIHRvIGJlIGFic29sdXRlbHkgY29uZm9ybSB0byB0aGUgbGF0ZXIgMi4xLnggcmVsZWFzZXMuCisgICAgICBUaGlzIGlzIG5lY2Vzc2FyeSBmb3IgCisgICAgICAgICAgICBJQk1NQ0FfU0NTSV9ERVZfUkVTRVQgLT4gQ09ORklHX0lCTU1DQV9TQ1NJX0RFVl9SRVNFVAorICAgICAgICAgICAgSUJNTUNBX1NDU0lfT1JERVJfU1RBTkRBUkQgLT4gQ09ORklHX0lCTU1DQV9TQ1NJX09SREVSX1NUQU5EQVJECisgICAtIE1pY2hhZWwgTGFuZworIAorICAgSmFuIDE4LCAxOTk5OiAodjMuMSBNQ0EtdGVhbSBpbnRlcm5hbCkKKyAgIDEpIFRoZSBtdWx0aXBsZSBob3N0cyBzdHJ1Y3R1cmUgaXMgYWNjZXNzZWQgZnJvbSBldmVyeSBzdWJyb3V0aW5lLCBzbyB0aGVyZQorICAgICAgaXMgbm8gbG9uZ2VyIHRoZSBhZGRyZXNzIG9mIHRoZSBkZXZpY2Ugc3RydWN0dXJlIHBhc3NlZCBmcm9tIGZ1bmN0aW9uCisgICAgICB0byBmdW5jdGlvbiwgYnV0IG9ubHkgdGhlIGhvc3RpbmRleC4gQSBjYWxsIGJ5IHZhbHVlLCBub3RoaW5nIG1vcmUuIFRoaXMKKyAgICAgIHNob3VsZCByZWFsbHkgYmUgdW5kZXJzdG9vZCBieSB0aGUgY29tcGlsZXIgYW5kIHRoZSBzdWJzeXN0ZW0gc2hvdWxkIGdldAorICAgICAgdGhlIHJpZ2h0IHZhbHVlcyBhbmQgYWRkcmVzc2VzLgorICAgMikgVGhlIFNDU0ktc3Vic3lzdGVtIGRldGVjdGlvbiB3YXMgbm90IGNvbXBsZXRlIGFuZCBxdWl0ZSBodWdlbHkgYnVnZ3kgdXAKKyAgICAgIHRvIG5vdywgY29tcGFyZWQgdG8gdGhlIHRlY2huaWNhbCBtYW51YWwuIFRoZSBpbnRlcnByZXRhdGlvbiBvZiB0aGUgcG9zMgorICAgICAgcmVnaXN0ZXIgaXMgbm90IGFzIGFzc3VtZWQgYnkgcGVvcGxlIGJlZm9yZSwgdGhlcmVmb3JlLCBJIGRyb3BwZWQgYSBub3RlCisgICAgICBpbiB0aGUgaWJtbWNhX2RldGVjdCBmdW5jdGlvbiB0byBzaG93IHRoZSByZWdpc3RlcnMnIGludGVycHJldGF0aW9uLgorICAgICAgVGhlIHBvcy1yZWdpc3RlcnMgb2YgaW50ZWdyYXRlZCBTQ1NJLXN1YnN5c3RlbXMgZG8gbm90IGNvbnRhaW4gYW55IAorICAgICAgaW5mb3JtYXRpb24gY29uY2VybmluZyB0aGUgSU8tcG9ydCBvZmZzZXQsIHJlYWxseS4gSW5zdGVhZCwgdGhleSBjb250YWluCisgICAgICBzb21lIGluZm8gYWJvdXQgdGhlIGFkYXB0ZXIsIHRoZSBjaGlwLCB0aGUgTlZSQU0gLi4uLiBUaGUgSS9PLXBvcnQgaXMKKyAgICAgIGZpeGVkIHRvIDB4MzU0MCAtIDB4MzU0Ny4gVGhlcmUgY2FuIGJlIG1vcmUgdGhhbiBvbmUgYWRhcHRlcnMgaW4gdGhlIAorICAgICAgc2xvdHMgYW5kIHRoZXkgZ2V0IGFuIG9mZnNldCBmb3IgdGhlIEkvTyBhcmVhIGluIG9yZGVyIHRvIGdldCB0aGVpciBvd24KKyAgICAgIEkvTy1hZGRyZXNzIGFyZWEuIFNlZSBjaGFwdGVyIDIgZm9yIGRldGFpbGVkIGRlc2NyaXB0aW9uLiBBdCBsZWFzdCwgdGhlIAorICAgICAgZGV0ZWN0aW9uIHNob3VsZCBub3cgd29yayByaWdodCwgZXZlbiBvbiBtb2RlbHMgb3RoZXIgdGhhbiA5NS4gVGhlIDk1ZXJzCisgICAgICBjYW1lIGhhcHBpbHkgYXJvdW5kIHRoZSBidWcsIGFzIHRoZWlyIHBvczIgcmVnaXN0ZXIgY29udGFpbnMgYWx3YXlzIDAgCisgICAgICBpbiB0aGUgY3JpdGljYWwgYXJlYS4gUmVzZXJ2ZWQgYml0cyBhcmUgbm90IGFsbG93ZWQgdG8gYmUgaW50ZXJwcmV0ZWQsIAorICAgICAgdGhlcmVmb3JlLCBJQk0gaXMgYWxsb3dlZCB0byBzZXQgdGhvc2UgYml0cyBhcyB0aGV5IGxpa2UgYW5kIHRoZXkgbWF5IAorICAgICAgcmVhbGx5IHZhcnkgYmV0d2VlbiBkaWZmZXJlbnQgUFMvMiBtb2RlbHMuIFNvLCBub3csIG5vIGludGVycHJldGF0aW9uIAorICAgICAgb2YgcmVzZXJ2ZWQgYml0cyAtIGhvcGVmdWxseSBubyB0cm91YmxlIGhlcmUgYW55bW9yZS4KKyAgIDMpIFRoZSBjb21tYW5kIGVycm9yLCB3aGljaCB5b3UgbWF5IGdldCBvbiBtb2RlbHMgNTUsIDU2LCA1NywgNzAsIDc3IGFuZAorICAgICAgUDcwIG1heSBoYXZlIGJlZW4gY2F1c2VkIGJ5IHRoZSBmYWN0LCB0aGF0IGFkYXB0ZXJzIG9mIG9sZGVyIGRlc2lnbiBkbworICAgICAgbm90IGxpa2Ugc2VuZGluZyBjb21tYW5kcyB0byBub24tZXhpc3RpbmcgU0NTSS1kZXZpY2VzIGFuZCB3aWxsIHJlYWN0CisgICAgICB3aXRoIGEgY29tbWFuZCBlcnJvciBhcyBhIHNpZ24gb2YgcHJvdGVzdC4gV2hpbGUgdGhpcyBlcnJvciBpcyBub3QKKyAgICAgIHByZXNlbnQgb24gSUJNIFNDU0kgQWRhcHRlciB3L2NhY2hlLCBpdCBhcHBlYXJzIG9uIElCTSBJbnRlZ3JhdGVkIFNDU0kKKyAgICAgIEFkYXB0ZXJzLiBUaGVyZWZvcmUsIEkgaW1wbGVtZW50ZWQgYSB3b3JrYXJyb3VuZCB0byBmb3JnaXZlIHRob3NlIAorICAgICAgYWRhcHRlcnMgdGhlaXIgcHJvdGVzdHMsIGJ1dCBpdCBpcyBtYXJrZWQgdXAgaW4gdGhlIHN0YXRpc2N0aXMsIHNvCisgICAgICBhZnRlciBhIHN1Y2Nlc3NmdWwgYm9vdCwgeW91IGNhbiBzZWUgaW4gL3Byb2Mvc2NzaS9pYm1tY2EvPGhvc3RfbnVtYmVyPgorICAgICAgaG93IG9mdGVuIHRoZSBjb21tYW5kIGVycm9ycyBoYXZlIGJlZW4gZm9yZ2l2ZW4gdG8gdGhlIFNDU0ktc3Vic3lzdGVtLgorICAgICAgSWYgdGhlIG51bWJlciBpcyBiaWdnZXIgdGhhbiAwLCB5b3UgaGF2ZSBhIFNDU0kgc3Vic3lzdGVtIG9mIG9sZGVyCisgICAgICBkZXNpZ24sIHdoYXQgc2hvdWxkIG5vIGxvbmdlciBtYXR0ZXIuCisgICA0KSBpYm1tY2FfZ2V0aW5mbygpIGhhcyBiZWVuIGFkYXB0ZWQgdmVyeSBjYXJlZnVsbHksIHNvIGl0IHNob3dzIGluIHRoZSAKKyAgICAgIHNsb3RuIGZpbGUgcmVhbGx5LCB3aGF0IGlzIHNlbnNlZnVsIHRvIGJlIHByZXNlbnRlZC4KKyAgIDUpIGlibW1jYV9yZWdpc3RlcigpIGhhcyBiZWVuIGV4dGVuZGVkIGluIGl0cyBwYXJhbWV0ZXIgbGlzdCBpbiBvcmRlciB0bworICAgICAgcGFzcyB0aGUgcmlnaHQgbmFtZSBvZiB0aGUgU0NTSS1hZGFwdGVyIHRvIExpbnV4LgorICAgLSBNaWNoYWVsIExhbmcKKworICAgRmViIDYsIDE5OTk6ICh2My4xKQorICAgMSkgRmluYWxseSwgYWZ0ZXIgc29tZSAzLjFCZXRhLXJlbGVhc2VzLCB0aGUgMy4xIHJlbGVhc2UuIFNvcnJ5LCBmb3IgCisgICAgICB0aGUgZGVsYXllZCByZWxlYXNlLCBidXQgaXQgd2FzIG5vdCBmaW5pc2hlZCB3aXRoIHRoZSByZWxlYXNlIG9mIAorICAgICAgS2VybmVsIDIuMi4wLgorICAgLSBNaWNoYWVsIExhbmcKKyAgIAorICAgRmViIDEwLCAxOTk5ICh2My4xKQorICAgMSkgQWRkZWQgYSBuZXcgY29tbWFuZGxpbmUgcGFyYW1ldGVyIGNhbGxlZCAnYnlwYXNzJyBpbiBvcmRlciB0byBieXBhc3MKKyAgICAgIGV2ZXJ5IGludGVncmF0ZWQgc3Vic3lzdGVtIFNDU0ktY29tbWFuZCBjb25zZXF1ZW50bHkgaW4gY2FzZSBvZgorICAgICAgdHJvdWJsZXMuCisgICAyKSBDb25jYXRlbmF0ZWQgcmVhZF9jYXBhY2l0eSByZXF1ZXN0cyB0byB0aGUgaGFyZGRpc2tzLiBJdCBnYXZlIGEgbG90CisgICAgICBvZiB0cm91YmxlcyB3aXRoIHNvbWUgY29udHJvbGxlcnMgYW5kIGFmdGVyIEkgd2FudGVkIHRvIGFwcGx5IHNvbWUKKyAgICAgIGV4dGVuc2lvbnMsIGl0IGp1bXBlZCBvdXQgaW4gdGhlIHNhbWUgc2l0dWF0aW9uLCBvbiBteSB3L2NhY2hlLCBhcyBsaWtlIAorICAgICAgb24gRC4gV2VpbmVoYWxscycgTW9kZWwgNTYsIGhhdmluZyBpbnRlZ3JhdGVkIFNDU0kuIFRoaXMgZ2F2ZSBtZSB0aGUgCisgICAgICBkZXNjaXNzaXZlIGhpbnQgdG8gbW92ZSB0aGUgY29kZS1wYXJ0IG91dCBhbmQgZGVjbGFyZSBpdCBnbG9iYWwuIE5vdywKKyAgICAgIGl0IHNlZW1zIHRvIHdvcmsgYnkgZmFyIG11Y2ggYmV0dGVyIGFuIG1vcmUgc3RhYmxlLiBMZXQgdXMgc2VlLCB3aGF0CisgICAgICB0aGUgd29ybGQgdGhpbmtzIG9mIGl0Li4uCisgICAzKSBCeSB0aGUgd2F5LCBvbmx5IFNvbnkgREFULWRyaXZlcyBzZWVtIHRvIHNob3cgZGVuc2l0eSBjb2RlIDB4MTMuIEEKKyAgICAgIHRlc3Qgd2l0aCBhIEhQIGRyaXZlIGdhdmUgcmlnaHQgcmVzdWx0cywgc28gdGhlIHByb2JsZW0gaXMgdmVuZG9yLQorICAgICAgc3BlY2lmaWMgYW5kIG5vdCBhIHByb2JsZW0gb2YgdGhlIE9TIG9yIHRoZSBkcml2ZXIuCisgICAtIE1pY2hhZWwgTGFuZworICAgCisgICBGZWIgMTgsIDE5OTkgKHYzLjFkKQorICAgMSkgVGhlIGFib3J0IGNvbW1hbmQgYW5kIHRoZSByZXNldCBmdW5jdGlvbiBoYXZlIGJlZW4gY2hlY2tlZCBmb3IgCisgICAgICBpbmNvbnNpc3RlbmNpZXMuIEZyb20gdGhlIGxvZ2ljYWwgcG9pbnQgb2YgdGhpbmtpbmcsIHRoZXkgd29yaworICAgICAgYXQgdGhlaXIgb3B0aW11bSwgbm93LCBidXQgYXMgdGhlIHN1YnN5c3RlbSBkb2VzIG5vdCBhbnN3ZXIgd2l0aCBhbgorICAgICAgaW50ZXJydXB0LCBhYm9ydCBuZXZlciBmaW5pc2hlcywgc2lnaC4uLgorICAgMikgRXZlcnl0aGluZywgdGhhdCBpcyBhY2Nlc3NlZCBieSBhIGJ1c21hc3RlciByZXF1ZXN0IGZyb20gdGhlIGFkYXB0ZXIKKyAgICAgIGlzIG5vdyBkZWNsYXJlZCBhcyBnbG9iYWwgdmFyaWFibGUsIGV2ZW4gdGhlIHJldHVybi1idWZmZXIgaW4gdGhlCisgICAgICBsb2NhbCBjaGVja2luZyBwaGFzZS4gVGhpcyBhc3N1cmVzLCB0aGF0IG5vIGFjY2Vzc2VzIHRvIHVuZGVmaW5lZCBtZW1vcnkKKyAgICAgIGFyZWFzIGFyZSBwZXJmb3JtZWQuCisgICAzKSBJbiBpYm1tY2EuaCwgdGhlIGxpbmUgdW5jaGVja2VkX2lzYV9kbWEgaXMgYWRkZWQgd2l0aCAxIGluIG9yZGVyIHRvCisgICAgICBhdm9pZCBtZW1vcnktcG9pbnRlcnMgZm9yIHRoZSBhcmVhcyBoaWdoZXIgdGhhbiAxNk1CeXRlIGluIG9yZGVyIHRvCisgICAgICBiZSBzdXJlLCBpdCBhbHNvIHdvcmtzIG9uIDE2LUJpdCBNaWNyb2NoYW5uZWwgYnVzIHN5c3RlbXMuCisgICA0KSBBIGxvdCBvZiBzbWFsbCB0aGluZ3MgaGF2ZSBiZWVuIGZvdW5kLCBidXQgbm90aGluZyB0aGF0IGVuZGFuZ2VyZWQgdGhlCisgICAgICBkcml2ZXIgb3BlcmF0aW9ucy4gSnVzdCBpdCBzaG91bGQgYmUgbW9yZSBzdGFibGUsIG5vdy4KKyAgIC0gTWljaGFlbCBMYW5nCisgICAgICAKKyAgIEZlYiAyMCwgMTk5OSAodjMuMWUpCisgICAxKSBJIHRvb2sgdGhlIHdhcm5pbmcgZnJvbSB0aGUgTGludXggS2VybmVsIEhhY2tlcnMgR3VpZGUgc2VyaW91cyBhbmQgCisgICAgICBjaGVja2VkIHRoZSBjbWQtPnJlc3VsdCByZXR1cm4gdmFsdWUgdG8gdGhlIGRvbmUtZnVuY3Rpb24gdmVyeSBjYXJlZnVsbHkuCisgICAgICBJdCBpcyBvYnZpb3VzLCB0aGF0IHRoZSBJQk0gU0NTSSBvbmx5IGRlbGl2ZXJzIHRoZSB0c2IuZGV2X3N0YXR1cywgaWYKKyAgICAgIHNvbWUgZXJyb3IgYXBwZWFyZWQsIGVsc2UgaXQgaXMgdW5kZWZpbmVkLiBOb3csIHRoaXMgaXMgZml4ZWQuIEJlZm9yZQorICAgICAgYW55IFNDQiBjb21tYW5kIGdldHMgcXVldWVkLCB0aGUgdHNiLmRldl9zdGF0dXMgaXMgc2V0IHRvIDAsIHNvIHRoZSAKKyAgICAgIGNtZC0+cmVzdWx0IHdvbid0IHNjcmV3IHVwIExpbnV4IGhpZ2hlciBsZXZlbCBkcml2ZXJzLgorICAgMikgVGhlIHJlc2V0LWZ1bmN0aW9uIGhhcyBzbGlnaHRseSBpbXByb3ZlZC4gVGhpcyBpcyBzdGlsbCBwbGFuZWQgZm9yIAorICAgICAgYWJvcnQuIER1cmluZyB0aGUgYWJvcnQgYW5kIHRoZSByZXNldCBmdW5jdGlvbiwgbm8gaW50ZXJydXB0cyBhcmUgCisgICAgICBhbGxvd2VkLiBUaGlzIGlzIGhvd2V2ZXIgcXVpdGUgaGFyZCB0byBjb3BlIHdpdGgsIHNvIHRoZSBJTlQtc3RhdHVzCisgICAgICByZWdpc3RlciBpcyByZWFkLiBXaGVuIHRoZSBpbnRlcnJ1cHQgZ2V0cyBxdWV1ZWQsIG9uZSBjYW4gZmluZCBpdHMKKyAgICAgIHN0YXR1cyBpbW1lZGlhdGVseSBvbiB0aGF0IHJlZ2lzdGVyIGFuZCBpcyBlbmFibGVkIHRvIGNvbnRpbnVlIGluIHRoZQorICAgICAgcmVzZXQgZnVuY3Rpb24uIEkgaGFkIG5vIGNoYW5jZSB0byB0ZXN0IHRoaXMgcmVhbGx5LCBvbmx5IGluIGEgYm9ndXMgCisgICAgICBzaXR1YXRpb24sIEkgZ290IHRoaXMgZnVuY3Rpb24gcnVubmluZywgYnV0IHRoZSBzaXR1YXRpb24gd2FzIHRvbyBtdWNoCisgICAgICB3b3JzZSBmb3IgTGludXggOi0oLCBzbyB0ZXN0cyB3aWxsIGNvbnRpbnVlLgorICAgMykgQnVmZmVycyBnb3Qgbm93IGNvbnNpc3RlbnQuIE5vIG9wZW4gYWRkcmVzcyBtYXBwaW5nLCBhcyBiZWZvcmUgYW5kCisgICAgICB0aGVyZWZvcmUgbm8gZnVydGhlciB0cm91YmxlcyB3aXRoIHRoZSB1bmFzc2lnbmVkIG1lbW9yeSBzZWdtZW50YXRpb24KKyAgICAgIGZhdWx0cyB0aGF0IHNjcmFtYmxlZCBwcm9iZXMgb24gOTVYWCBzZXJpZXMgYW5kIGV2ZW4gb24gODVYWCBzZXJpZXMsCisgICAgICB3aGVuIHRoZSBrZXJuZWwgaXMgZG9uZSBpbiBhIG5vdCBzbyBwZXJmZWN0bHkgZml0dGluZyB3YXkuCisgICA0KSBTcG9udGFuZW91cyBpbnRlcnJ1cHRzIGZyb20gdGhlIHN1YnN5c3RlbSwgYXBwZWFyaW5nIHdpdGhvdXQgYW55CisgICAgICBjb21tYW5kIHByZXZpb3VzbHkgcXVldWVkIGFyZSBhbnN3ZXJlZCB3aXRoIGEgRElEX0JBRF9JTlRSIHJlc3VsdC4KKyAgIDUpIFRha2VuIGludG8gYWNjb3VudCBaUCBHdXMnIHByb3Bvc2FscyB0byByZXZlcnNlIHRoZSBTQ1NJLWRldmljZQorICAgICAgc2NhbiBvcmRlci4gQXMgaXQgZG9lcyBub3Qgd29yayBvbiBLZXJuZWwgMi4xLnggb3IgMi4yLngsIGFzIHByb3Bvc2VkCisgICAgICBieSBoaW0sIEkgaW1wbGVtZW50ZWQgaXQgaW4gYSBzbGlnaHRseSBkZXJpdmVkIHdheSwgd2hpY2ggb2ZmZXJzIGluIAorICAgICAgYWRkaXRpb24gbW9yZSBmbGV4aWJpbGl0eS4KKyAgIC0gTWljaGFlbCBMYW5nCisKKyAgIEFwciAyMywgMjAwMCAodjMuMnByZTEpCisgICAxKSBEdXJpbmcgYSB2ZXJ5IGxvbmcgdGltZSwgSSBjb2xsZWN0ZWQgYSBodWdlIGFtb3VudCBvZiBidWdyZXBvcnRzIGZyb20KKyAgICAgIHZhcmlvdXMgcGVvcGxlLCB0cnlpbmcgcmVhbGx5IHF1aXRlIGRpZmZlcmVudCB0aGluZ3Mgb24gdGhlaXIgU0NTSS0KKyAgICAgIFBTLzJzLiBUb2RheSwgYWxsIHRoZXNlIGJ1Z3JlcG9ydHMgYXJlIHRha2VuIGludG8gYWNjb3VudCBhbmQgc2hvdWxkIGJlCisgICAgICBtb3N0bHkgc29sdmVkLiBUaGUgbWFqb3IgdG9waWNzIHdlcmU6CisgICAgICAtIERyaXZlciBjcmFzaGVzIGR1cmluZyBib290dGltZSBieSBubyBvYnZpb3VzIHJlYXNvbi4KKyAgICAgIC0gRHJpdmVyIHBhbmljcyB3aGlsZSB0aGUgbWlkbGV2ZWwtU0NTSS1kcml2ZXIgaXMgdHJ5aW5nIHRvIGlucXVpcmUKKyAgICAgICAgdGhlIFNDU0ktZGV2aWNlIHByb3BlcnRpZXMsIGV2ZW4gdGhvdWdoIGhhcmR3YXJlIGlzIGluIHBlcmZlY3Qgc3RhdGUuCisgICAgICAtIERpc3BsYXllZCBpbmZvIGZvciB0aGUgdmFyaW91cyBzbG90LWNhcmRzIGlzIGludGVycHJldGVkIHdyb25nLgorICAgICAgVGhlIG1haW4gcmVhc29ucyBmb3IgdGhlIGNyYXNoZXMgd2VyZSB0d286CisgICAgICAxKSBUaGUgY29tbWFuZHMgdG8gY2hlY2sgZm9yIGRldmljZSBpbmZvcm1hdGlvbiBsaWtlIElOUVVJUlksIAorICAgICAgICAgVEVTVF9VTklUX1JFQURZLCBSRVFVRVNUX1NFTlNFIGFuZCBNT0RFX1NFTlNFIGNhdXNlIHRoZSBkZXZpY2VzCisJIHRvIGRlbGl2ZXIgaW5mb3JtYXRpb24gb2YgdXAgdG8gMjU1IGJ5dGVzLiBNaWRsZXZlbCBkcml2ZXJzIG9mZmVyCisJIDEwMjQgYnl0ZXMgb2Ygc3BhY2UgZm9yIHRoZSBhbnN3ZXIsIGJ1dCB0aGUgSUJNLVNDU0ktYWRhcHRlcnMgZG8KKwkgbm90IGFjY2VwdCB0aGlzLCBhcyB0aGV5IHN0aWNrIHF1aXRlIG5lYXIgdG8gQU5TSS1TQ1NJIGFuZCByZXBvcnQKKwkgYSBDT01NQU5EX0VSUk9SIG1lc3NhZ2Ugd2hpY2ggY2F1c2VzIHRoZSBkcml2ZXIgdG8gcGFuaWMuIFRoZSBtYWluCisJIHByb2JsZW0gd2FzIGxvY2F0ZWQgYXJvdW5kIHRoZSBJTlFVSVJZIGNvbW1hbmQuIE5vdywgZm9yIGFsbCB0aGUKKwkgbWVudGlvbmVkIGNvbW1hbmRzLCB0aGUgYnVmZmVyc2l6ZSwgc2VudCB0byB0aGUgYWRhcHRlciBpcyBhdCAKKwkgbWF4aW11bSAyNTUgd2hpY2ggc2VlbXMgdG8gYmUgYSBxdWl0ZSByZWFzb25hYmxlIHNvbHV0aW9uLiAKKwkgVEVTVF9VTklUX1JFQURZIGdldHMgYSBidWZmZXJzaXplIG9mIDAgdG8gbWFrZSBzdXJlLCB0aGF0IG5vIAorCSBkYXRhIGlzIHRyYW5zZmVycmVkIGluIG9yZGVyIHRvIGF2b2lkIGFueSBwb3NzaWJsZSBjb21tYW5kIGZhaWx1cmUuCisgICAgICAyKSBPbiB1bnN1Y2Nlc3NmdWwgVEVTVF9VTklUX1JFQURZLCB0aGUgbWlkbGV2ZWwtZHJpdmVyIGhhcyB0byBzZW5kCisgICAgICAgICBhIFJFUVVFU1RfU0VOU0UgaW4gb3JkZXIgdG8gc2VlLCB3aGVyZSB0aGUgcHJvYmxlbSBpcyBsb2NhdGVkLiBUaGlzCisJIFJFUVVFU1RfU0VOU0UgbWF5IGhhdmUgdmFyaW91cyBsZW5ndGggaW4gaXRzIGFuc3dlci1idWZmZXIuIElCTQorCSBTQ1NJLXN1YnN5c3RlbXMgcmVwb3J0IGEgY29tbWFuZCBmYWlsdXJlLCBpZiB0aGUgcmV0dXJuZWQgYnVmZmVyc2l6ZQorCSBpcyBkaWZmZXJlbnQgZnJvbSB0aGUgc2VudCBidWZmZXJzaXplLCBidXQgdGhpcyBjYW4gYmUgc3VwcmVzc2VkIGJ5CisJIGEgc3BlY2lhbCBiaXQsIHdoaWNoIGlzIG5vdyBkb25lIGFuZCBwcm9ibGVtcyBzZWVtIHRvIGJlIHNvbHZlZC4KKyAgIDIpIENvZGUgYWRhcHRpb24gdG8gYWxsIGtlcm5lbC1yZWxlYXNlcy4gTm93LCB0aGUgMy4yIGNvZGUgY29tcGlsZXMgb24gCisgICAgICAyLjAueCwgMi4xLngsIDIuMi54IGFuZCAyLjMueCBrZXJuZWwgcmVsZWFzZXMgd2l0aG91dCBhbnkgY29kZS1jaGFuZ2VzLgorICAgMykgQ29tbWFuZGxpbmUtcGFyYW1ldGVycyBhcmUgcmVjb2duaXplZCBhZ2FpbiwgZXZlbiB1bmRlciBLZXJuZWwgMi4zLnggb3IKKyAgICAgIGhpZ2hlci4KKyAgIC0gTWljaGFlbCBMYW5nICAgCisKKyAgIEFwcmlsIDI3LCAyMDAwICh2My4ycHJlMikKKyAgIDEpIEJ5cGFzc2VkIGNvbW1hbmRzIGdldCByZWFkIGJ5IHRoZSBhZGFwdGVyIGJ5IG9uZSBjeWNsZSBpbnN0ZWFkIG9mIHR3by4KKyAgICAgIFRoaXMgaW5jcmVhc2VzIFNDU0ktcGVyZm9ybWFuY2UuCisgICAyKSBTeW5jaHJvbm91cyBkYXRhdHJhbnNmZXIgaXMgcHJvdmlkZWQgZm9yIHN1cmUgdG8gYmUgNSBNSHogb24gb2xkZXIKKyAgICAgIFNDU0kgYW5kIDEwIE1IeiBvbiBpbnRlcm5hbCBGL1cgU0NTSS1hZGFwdGVyLgorICAgMykgTmV3IGNvbW1hbmRsaW5lIHBhcmFtZXRlcnMgYWxsb3cgdG8gZm9yY2UgdGhlIGFkYXB0ZXIgdG8gc2xvdyBkb3duIHdoaWxlCisgICAgICBpbiBzeW5jaHJvbm91cyB0cmFuc2Zlci4gQ291bGQgYmUgaGVscGZ1bCBmb3IgdmVyeSBvbGQgZGV2aWNlcy4KKyAgIC0gTWljaGFlbCBMYW5nCisgICAKKyAgIEp1bmUgMiwgMjAwMCAodjMuMnByZTUpCisgICAxKSBBZGRlZCBKaW0gU2hvcm5leSdzIGNvbnRyaWJ1dGlvbiB0byBtYWtlIHRoZSBhY3Rpdml0eSBpbmRpY2F0b3IKKyAgICAgIGZsYXNoaW5nIGluIGFkZGl0aW9uIHRvIHRoZSBMRUQtYWxwaGFudW1lcmljIGRpc3BsYXktcGFuZWwgb24KKyAgICAgIG1vZGVscyA5NUEuIFRvIGJlIGVuYWJsZWQgdG8gY2hvb3NlIHRoaXMgZmVhdHVyZSBmcmVlbHksIGEgbmV3CisgICAgICBjb21tYW5kbGluZSBwYXJhbWV0ZXIgaXMgYWRkZWQsIGNhbGxlZCAnYWN0aXZpdHknLgorICAgMikgQWRkZWQgdGhlIFJFQURfQ09OVFJPTCBiaXQgZm9yIHRlc3RfdW5pdF9yZWFkeSBTQ1NJLWNvbW1hbmQuCisgICAzKSBBZGRlZCBzb21lIHN1cHByZXNzX2V4Y2VwdGlvbiBiaXRzIHRvIHJlYWRfZGV2aWNlX2NhcGFjaXR5IGFuZAorICAgICAgYWxsIGRldmljZV9pbnF1aXJ5IG9jY3VycmVuY2VzIGluIHRoZSBkcml2ZXIgY29kZS4KKyAgIDQpIENvbXBsYWludHMgYWJvdXQgdGhlIHZhcmlvdXMgS0VSTkVMX1ZFUlNJT04gaW1wbGVtZW50YXRpb25zIGFyZQorICAgICAgdGFrZW4gaW50byBhY2NvdW50LiBFdmVyeSBsb2NhbF9MaW51eEtlcm5lbFZlcnNpb24gb2NjdXJyZW5jZSBpcworICAgICAgbm93IHJlcGxhY2VkIGJ5IEtFUk5FTF9WRVJTSU9OLCBkZWZpbmVkIGluIGxpbnV4L3ZlcnNpb24uaC4gCisgICAgICBDb3JyZXNwb25kaW5nIGNoYW5nZXMgd2VyZSBhcHBsaWVkIHRvIGlibW1jYS5oLCB0b28uIFRoaXMgd2FzIGEKKyAgICAgIGNvbnRyaWJ1dGlvbiB0byBhbGwga2VybmVsLXBhcnRzIGJ5IFBoaWxpcHAgSGFobi4KKyAgIC0gTWljaGFlbCBMYW5nCisgICAKKyAgIEp1bHkgMTcsIDIwMDAgKHYzLjJwcmU4KQorICAgQSBsb25nIHBlcmlvZCBvZiBjb2xsZWN0aW5nIGJ1Z3JlcG9ydHMgZnJvbSBhbGwgY29ybmVycyBvZiB0aGUgd29ybGQKKyAgIG5vdyBsZWFkIHRvIHRoZSBmb2xsb3dpbmcgY29ycmVjdGlvbnMgdG8gdGhlIGNvZGU6CisgICAxKSBTQ1NJLTIgRi9XIHN1cHBvcnQgY3Jhc2hlZCB3aXRoIGEgQ09NTUFORCBFUlJPUi4gVGhlIHJlYXNvbiBmb3IgdGhpcyAKKyAgICAgIHdhcywgdGhhdCBpdCBpcyBwb3NzaWJsZSB0byBkaXNiYWxlIEZhc3QtU0NTSSBmb3IgdGhlIGV4dGVybmFsIGJ1cy4KKyAgICAgIFRoZSBmZWF0dXJlLWNvbnRyb2wgY29tbWFuZCwgd2hlcmUgdGhpcyBjcmFzaCBhcHBlYXJlZCByZWd1bGFybHkgdHJpZWQKKyAgICAgIHRvIHNldCB0aGUgbWF4aW11bSBzcGVlZCBvZiAxME1IeiBzeW5jaHJvbm91cyB0cmFuc2ZlciBzcGVlZCBhbmQgdGhhdAorICAgICAgcmVwb3J0cyBhIENPTU1BTkQgRVJST1IsIGlmIGV4dGVybmFsIGJ1cyBGYXN0LVNDU0kgaXMgZGlzYWJsZWQuIE5vdywKKyAgICAgIHRoZSBmZWF0dXJlLWNvbW1hbmQgcHJvYmVzIGRvd24gZnJvbSBtYXhpbXVtIHNwZWVkIHVudGlsIHRoZSBhZGFwdGVyIAorICAgICAgc3RvcHMgdG8gY29tcGxhaW4sIHdoaWNoIGlzIGF0IHRoZSBzYW1lIHRpbWUgdGhlIG1heGltdW0gcG9zc2libGUKKyAgICAgIHNwZWVkIHNlbGVjdGVkIGluIHRoZSByZWZlcmVuY2UgcHJvZ3JhbS4gU28sIEYvVyBleHRlcm5hbCBjYW4gcnVuIGF0CisgICAgICA1IE1IeiAoc2xvdy0pIG9yIDEwIE1IeiAoZmFzdC1TQ1NJKS4gRHVyaW5nIGZlYXR1cmUgcHJvYmluZywgdGhlIAorICAgICAgQ09NTUFORCBFUlJPUiBtZXNzYWdlIGlzIHVzZWQgdG8gZGV0ZWN0IGlmIHRoZSBhZGFwdGVyIGRvZXMgbm90IGNvbXBsYWluLgorICAgMikgVXAgdG8gbm93LCBvbmx5IGNvbWJpbmVkIGJ1c21vZGUgaXMgc3VwcG9ydGVkLCBpZiB5b3UgdXNlIGV4dGVybmFsCisgICAgICBTQ1NJLWRldmljZXMsIGF0dGFjaGVkIHRvIHRoZSBGL1ctY29udHJvbGxlci4gSWYgZHVhbCBidXMgaXMgc2VsZWN0ZWQsCisgICAgICBvbmx5IHRoZSBpbnRlcm5hbCBTQ1NJLWRldmljZXMgZ2V0IGFjY2Vzc2VkIGJ5IExpbnV4LiBGb3IgbW9zdCAKKyAgICAgIGFwcGxpY2F0aW9ucywgdGhpcyBzaG91bGQgZG8gZmluZS4gCisgICAzKSBXaWRlLVNDU0ktYWRkcmVzc2luZyAoMTYtQml0KSBpcyBub3cgcG9zc2libGUgZm9yIHRoZSBpbnRlcm5hbCBGL1cKKyAgICAgIGJ1cyBvbiB0aGUgRi9XIGFkYXB0ZXIuIElmIEYvVyBhZGFwdGVyIGlzIGRldGVjdGVkLCB0aGUgZHJpdmVyCisgICAgICBhdXRvbWF0aWNhbGx5IHVzZXMgdGhlIGV4dGVuZGVkIFBVTi9MVU4gPC0+IExETiBtYXBwaW5nIHRhYmxlcywgd2hpY2gKKyAgICAgIGFyZSBub3cgbmV3IGZyb20gMy4ycHJlOC4gVGhpcyBhbGxvd3MgUFVOcyBiZXR3ZWVuIDAgYW5kIDE1IGFuZCBzaG91bGQKKyAgICAgIHByb3ZpZGUgbW9yZSBmdW4gd2l0aCB0aGUgRi9XIGFkYXB0ZXIuCisgICA0KSBTZXZlcmFsIG1hY2hpbmVzIHVzZSB0aGUgU0NTSTogUE9TIHJlZ2lzdGVycyBmb3IgaW50ZXJuYWwvdW5kb2N1bWVudGVkCisgICAgICBzdG9yYWdlIG9mIHN5c3RlbSByZWxldmFudCBpbmZvLiBUaGlzIGNvbmZ1c2VkIHRoZSBkcml2ZXIsIG1haW5seSBvbgorICAgICAgbW9kZWxzIDk1OTUsIGFzIGl0IGV4cGVjdGVkIG5vIG9uYm9hcmQgU0NTSSBvbmx5LCBpZiBhbGwgUE9TIGluCisgICAgICB0aGUgaW50ZWdyYXRlZCBTQ1NJLWFyZWEgYXJlIHNldCB0byAweDAwIG9yIDB4ZmYuIE5vdywgdGhlIG1lY2hhbmlzbQorICAgICAgdG8gY2hlY2sgZm9yIGludGVncmF0ZWQgU0NTSSBpcyBtdWNoIG1vcmUgcmVzdHJpY3RpdmUgYW5kIHRoZXNlIHByb2JsZW1zCisgICAgICBzaG91bGQgYmUgaGlzdG9yeS4KKyAgIC0gTWljaGFlbCBMYW5nICAgICAgICAgIAorCisgICBKdWx5IDE4LCAyMDAwICh2My4ycHJlOSkKKyAgIFRoaXMgZGV2ZWxvcCByYXRoZXIgcXVpY2tseSBhdCB0aGUgbW9tZW50LiBUd28gbWFqb3IgdGhpbmdzIHdlcmUgc3RpbGwKKyAgIG1pc3NpbmcgaW4gMy4ycHJlODoKKyAgIDEpIFRoZSBhZGFwdGVyIFBVTiBmb3IgRi9XIGFkYXB0ZXJzIGhhcyA0LWJpdHMsIHdoaWxlIGFsbCBvdGhlciBhZGFwdGVycworICAgICAgaGF2ZSAzLWJpdHMuIFRoaXMgaXMgbm93IHRha2VuIGludG8gYWNjb3VudCBmb3IgRi9XLgorICAgMikgV2hlbiB5b3Ugc2VsZWN0IENPTkZJR19JQk1NQ0FfU0NTSV9PUkRFUl9TVEFOREFSRCwgeW91IHNob3VsZCAKKyAgICAgIG5vcm1hbGx5IGdldCB0aGUgaW52ZXJzZSBwcm9iaW5nIG9yZGVyIG9mIHlvdXIgZGV2aWNlcyBvbiB0aGUgU0NTSS1idXMuCisgICAgICBUaGUgQU5TSSBkZXZpY2Ugb3JkZXIgZ2V0cyBzY3JhbWJsZWQgaW4gdmVyc2lvbiAzLjJwcmU4ISEgTm93LCBhIG5ldworICAgICAgYW5kIHRlc3RlZCBhbGdvcml0aG0gaW52ZXJ0cyB0aGUgZGV2aWNlLW9yZGVyIG9uIHRoZSBTQ1NJLWJ1cyBhbmQKKyAgICAgIGF1dG9tYXRpY2FsbHkgYXZvaWRzIGFjY2lkZW50YWwgYWNjZXNzIHRvIHdoYXRldmVyIFNDU0kgUFVOIHRoZSBhZGFwdGVyIAorICAgICAgaXMgc2V0IGFuZCB3b3JrcyB3aXRoIFNDU0ktIGFuZCBXaWRlLVNDU0ktYWRkcmVzc2luZy4KKyAgIC0gTWljaGFlbCBMYW5nCisKKyAgIEp1bHkgMjMsIDIwMDAgKHYzLjJwcmUxMCB1bnB1Ymxpc2hlZCkgCisgICAxKSBMRUQgcGFuZWwgZGlzcGxheSBzdXBwb3J0cyB3aWRlLWFkZHJlc3NpbmcgaW4gaWJtbWNhPWRpc3BsYXkgbW9kZS4KKyAgIDIpIEFkYXB0ZXItaW5mb3JtYXRpb24gYW5kIGF1dG9hZGFwdGlvbiB0byBhZGRyZXNzLXNwYWNlIGlzIGRvbmUuCisgICAzKSBBdXRvLXByb2JpbmcgZm9yIG1heGltdW0gc3luY2hyb25vdXMgU0NTSSB0cmFuc2ZlciByYXRlIGlzIHdvcmtpbmcuCisgICA0KSBPcHRpbWl6YXRpb24gdG8gc29tZSBlbWJlZGRlZCBmdW5jdGlvbiBjYWxscyBpcyBhcHBsaWVkLgorICAgNSkgQWRkZWQgc29tZSBjb21tZW50IGZvciB0aGUgdXNlciB0byB3YWl0IGZvciBTQ1NJLWRldmljZXMgYmVpbmcgcHJvYmVkLgorICAgNikgRmluaXNoZWQgdmVyc2lvbiAzLjIgZm9yIEtlcm5lbCAyLjQuMC4gSXQgbGVhc3QsIEkgdGhvdWdodCBpdCBpcyBidXQuLi4KKyAgIC0gTWljaGFlbCBMYW5nCisgICAKKyAgIEp1bHkgMjYsIDIwMDAgKHYzLjJwcmUxMSkKKyAgIDEpIEkgcGFzc2VkIGEgaG9ycmlibGUgd2Vla2VuZCBnZXR0aW5nIG1hZCB3aXRoIE5NSXMgb24ga2VybmVsIDIuMi4xNCBhbmQKKyAgICAgIGEgbW9kZWwgOTU5NS4gQXNraW5nIGFyb3VuZCBpbiB0aGUgY29tbXVuaXR5LCBub2JvZHkgZXhjZXB0IG9mIG1lIGhhcworICAgICAgc2VlbiBzdWNoIGVycm9ycy4gV2VpcmVkLCBidXQgSSBhbSB0cnlpbmcgdG8gcmVjb21waWxlIGV2ZXJ5dGhpbmcgb24KKyAgICAgIHRoZSBtb2RlbCA5NTk1LiBNYXliZSwgYXMgSSB1c2UgYSBzcGVjaWFsbHkgbW9kaWZpZWQgZ2NjLCB0aGF0IGNvdWxkCisgICAgICBjYXVzZSBwcm9ibGVtcy4gQnV0LCBpdCB3YXMgbm90IHRoZSByZWFzb24uIFRoZSB0cnVlIGJhY2tncm91bmQgd2FzLAorICAgICAgdGhhdCB0aGUga2VybmVsIHdhcyBjb21waWxlZCBmb3IgaTM4NiBhbmQgdGhlIDk1OTUgaGFzIGEgNDg2RFgtMi4gCisgICAgICBOb3JtYWxseSwgbm8gdHJvdWJsZXMgc2hvdWxkIGFwcGVhciwgYnV0IGZvciB0aGlzIHNwZWNpYWwgbWFjaGluZSwKKyAgICAgIG9ubHkgdGhlIHJpZ2h0IHByb2Nlc3NvciBzdXBwb3J0IGlzIHdvcmtpbmcgZmluZSEKKyAgIDIpIFByZXZpb3VzIHByb2JsZW1zIHdpdGggc3luY2hyb25vdXMgc3BlZWQsIHNsb3dpbmcgZG93biBmcm9tIG9uZSBhZGFwdGVyIAorICAgICAgdG8gdGhlIG5leHQgZHVyaW5nIHByb2JpbmcgYXJlIGNvcnJlY3RlZC4gTm93LCBsb2NhbCB2YXJpYWJsZXMgc3RvcmUKKyAgICAgIHRoZSBzeW5jaHJvbm91cyBiaXRtYXNrIGZvciBldmVyeSBzaW5nbGUgYWRhcHRlciBmb3VuZCBvbiB0aGUgTUNBIGJ1cy4KKyAgIDMpIExFRCBhbHBoYW51bWVyaWMgcGFuZWwgc3VwcG9ydCBmb3IgWFg5NSBzeXN0ZW1zIGlzIG5vdyBzaG93aW5nIHNvbWUKKyAgICAgIGFsaXZlIHJvdGF0b3IgZHVyaW5nIGJvb3R0aW1lLiBUaGlzIG1ha2VzIHNlbnNlLCB3aGVuIG5vIG1vbml0b3IgaXMgCisgICAgICBjb25uZWN0ZWQgdG8gdGhlIHN5c3RlbS4gWW91IGNhbiBnZXQgcmlkIG9mIGFsbCBkaXNwbGF5IGFjdGl2aXR5LCBpZgorICAgICAgeW91IGRvIG5vdCB1c2UgYW55IHBhcmFtZXRlciBvciBqdXN0IGlibW1jYXNjc2k9YWN0aXZpdHksIGZvciB0aGUgCisgICAgICBoYXJkZHJpdmUgYWN0aXZpdHkgTEVELCBleGlzdGFudCBvbiBhbGwgUFMvMiwgZXhjZXB0IG1vZGVscyA4NTk1LVhYWC4KKyAgICAgIElmIG5vIG1vbml0b3IgaXMgYXZhaWxhYmxlLCBwbGVhc2UgdXNlIGlibW1jYXNjc2k9ZGlzcGxheSwgd2hpY2ggd29ya3MKKyAgICAgIGZpbmUgdG9nZXRoZXIgd2l0aCB0aGUgbGludXhpbmZvIHV0aWxpdHkgZm9yIHRoZSBMRUQtcGFuZWwuCisgICAtIE1pY2hhZWwgTGFuZworICAgCisgICBKdWx5IDI5LCAyMDAwICh2My4yKQorICAgMSkgU3VibWlzc2lvbiBvZiB0aGlzIGRyaXZlciBmb3Iga2VybmVsIDIuNHRlc3QtWFggYW5kIDIuMi4xNy4KKyAgIC0gTWljaGFlbCBMYW5nCisgICAKKyAgIERlY2VtYmVyIDI4LCAyMDAwICh2My4yZCAvIHY0LjApCisgICAxKSBUaGUgaW50ZXJydXB0IGhhbmRsZXIgaGFkIHNvbWUgd3Jvbmcgc3RhdGVtZW50IHRvIHdhaXQgZm9yLiBUaGlzCisgICAgICB3YXMgZG9uZSBkdWUgdG8gZXhwZXJpbWVudGFsIHJlYXNvbnMgZHVyaW5nIDMuMiBkZXZlbG9wbWVudCBidXQgaXQKKyAgICAgIGhhcyBzaG93biB0aGF0IHRoaXMgaXMgbm90IHN0YWJsZSBlbm91Z2guIEdvaW5nIGJhY2sgdG8gd2FpdCBmb3IgdGhlCisgICAgICBhZGFwdGVyIHRvIGJlIG5vdCBidXN5IGlzIGJlc3QuCisgICAyKSBJbnF1aXJ5IHJlcXVlc3RzIGNhbiBiZSBzaG9ydGVyIHRoYW4gMjU1IGJ5dGVzIG9mIHJldHVybiBidWZmZXIuIER1ZQorICAgICAgdG8gYSBidWcgaW4gdGhlIGlibW1jYV9xdWV1ZWNvbW1hbmQgcm91dGluZSwgdGhpcyBidWZmZXIgd2FzIGZvcmNlZAorICAgICAgdG8gMjU1IGF0IG1pbmltdW0uIElmIHRoZSBtZW1vcnkgYWRkcmVzcywgdGhpcyByZXR1cm4gYnVmZmVyIGlzIHBvaW50aW5nCisgICAgICB0byBkb2VzIG5vdCBvZmZlciBtb3JlIHNwYWNlLCBpbnZhbGlkIG1lbW9yeSBhY2Nlc3NlcyBkZXN0YWJpbGl6ZWQgdGhlCisgICAgICBrZXJuZWwuCisgICAzKSB2ZXJzaW9uIDQuMCBpcyBvbmx5IHZhbGlkIGZvciBrZXJuZWwgMi40LjAgb3IgbGF0ZXIuIFRoaXMgaXMgbmVjZXNzYXJ5CisgICAgICB0byByZW1vdmUgb2xkIGtlcm5lbCB2ZXJzaW9uIGRlcGVuZGVudCB3YXN0ZSBmcm9tIHRoZSBkcml2ZXIuIDMuMmQgaXMKKyAgICAgIG9ubHkgZGlzdHJpYnV0ZWQgd2l0aCBvbGRlciBrZXJuZWxzIGJ1dCBrZWVwcyBjb21wYXRpYmlsaXR5IHdpdGggb2xkZXIKKyAgICAgIGtlcm5lbCB2ZXJzaW9ucy4gNC4wIGFuZCBoaWdoZXIgdmVyc2lvbnMgY2Fubm90IGJlIHVzZWQgd2l0aCBvbGRlciAKKyAgICAgIGtlcm5lbHMgYW55bW9yZSEhIFlvdSBtdXN0IGhhdmUgYXQgbGVhc3Qga2VybmVsIDIuNC4wISEKKyAgIDQpIFRoZSBjb21tYW5kbGluZSBhcmd1bWVudCAnYnlwYXNzJyBhbmQgYWxsIGl0cyBmdW5jdGlvbmFsaXR5IGdvdCByZW1vdmVkCisgICAgICBpbiB2ZXJzaW9uIDQuMC4gVGhpcyB3YXMgbmV2ZXIgcmVhbGx5IG5lY2Vzc2FyeSwgYXMgYWxsIHRyb3VibGVzIHdlcmUKKyAgICAgIGJhc2VkIG9uIG5vbi1jb21tYW5kIHJlbGF0ZWQgcmVhc29ucyB1cCB0byBub3csIHNvIGJ5cGFzc2luZyBjb21tYW5kcworICAgICAgZGlkIG5vdCBoZWxwIHRvIGF2b2lkIGFueSBidWdzLiBJdCBpcyBrZXB0IGluIDMuMlggZm9yIGRlYnVnZ2luZyByZWFzb25zLgorICAgNSkgRHluYW1pY2FsIHJlYXNzaWdubWVudCBvZiBsZG5zIHdhcyBhZ2FpbiB2ZXJpZmllZCBhbmQgYW5hbHl6ZWQgdG8gYmUKKyAgICAgIGNvbXBsZXRlbHkgaW5vcGVyYXRpb25hbC4gVGhpcyBpcyBjb3JyZWN0ZWQgYW5kIHNob3VsZCB3b3JrIG5vdy4KKyAgIDYpIEFsbCBjb21tYW5kcyB0aGF0IGdldCBzZW50IHRvIHRoZSBTQ1NJIGFkYXB0ZXIgd2VyZSB2ZXJpZmllZCBhbmQKKyAgICAgIGNvbXBsZXRlZCBpbiBzdWNoIGEgd2F5LCB0aGF0IHRoZXkgYXJlIG5vdyBjb21wbGV0ZWx5IGNvbmZvcm0gdG8gdGhlCisgICAgICBkZW1hbmRzIGluIHRoZSB0ZWNobmljYWwgZGVzY3JpcHRpb24gb2YgSUJNLiBNYWluIGNhbmRpZGF0ZXMgd2VyZSB0aGUKKyAgICAgIERFVklDRV9JTlFVSVJZLCBSRVFVRVNUX1NFTlNFIGFuZCBERVZJQ0VfQ0FQQUNJVFkgY29tbWFuZHMuIFRoZXkgbXVzdAorICAgICAgYmUgdHJhbmZlcnJlZCBieSBieXBhc3NpbmcgdGhlIGludGVybmFsIGNvbW1hbmQgYnVmZmVyIG9mIHRoZSBhZGFwdGVyCisgICAgICBvciBlbHNlIHRoZSByZXNwb25zZSBjYW4gYmUgYSByYW5kb20gcmVzdWx0LiBHRVRfUE9TX0lORk8gd291bGQgYmUgbW9yZQorICAgICAgc2FmZSBpbiB1c2FnZSwgaWYgb25lIGNvdWxkIHVzZSB0aGUgU1VQUkVTU19FWENFUFRJT05fU0hPUlQsIGJ1dCB0aGlzCisgICAgICBpcyBub3QgYWxsb3dlZCBieSB0aGUgdGVjaG5pY2FsIHJlZmVyZW5jZXMgb2YgSUJNLiAoU29ycnksIGZvbGtzLCB0aGUKKyAgICAgIG1vZGVsIDgwIHByb2JsZW0gaXMgc3RpbGwgYSB0YXNrIHRvIGJlIHNvbHZlZCBpbiBhIGRpZmZlcmVudCB3YXkuKQorICAgNykgdjMuMmQgaXMgc3RpbGwgaG9sZCBiYWNrIGZvciBzb21lIGRheXMgZm9yIHRlc3RpbmcsIHdoaWxlIDQuMCBpcyAKKyAgICAgIHJlbGVhc2VkLgorICAgLSBNaWNoYWVsIExhbmcKKyAgIAorICAgSmFudWFyeSAzLCAyMDAxICh2NC4wYSkKKyAgIDEpIEEgbG90IG9mIGNvbXBsYWlucyBhZnRlciB0aGUgMi40LjAtcHJlcmVsZWFzZSBrZXJuZWwgY2FtZSBpbiBhYm91dAorICAgICAgdGhlIGltcG9zc2liaWxpdHkgdG8gY29tcGlsZSB0aGUgZHJpdmVyIGFzIGEgbW9kdWxlLiBUaGlzIHByb2JsZW0gaXMKKyAgICAgIHNvbHZlZC4gSW4gY29tYmluYXRpb24gd2l0aCB0aGF0IHByb2JsZW0sIHNvbWUgdW5wcmVjaXNlIGRlY2xhcmF0aW9uCisgICAgICBvZiB0aGUgZnVuY3Rpb24gb3B0aW9uX3NldHVwKCkgZ2F2ZSBzb21lIHdhcm5pbmdzIGR1cmluZyBjb21waWxhdGlvbi4KKyAgICAgIFRoaXMgaXMgc29sdmVkLCB0b28gYnkgYSBmb3J3YXJkIGRlY2xhcmF0aW9uIGluIGlibW1jYS5jLgorICAgMikgI2lmZGVmIGFyZ3VtZW50IGNvbmNlcm5pbmcgQ09ORklHX1NDU0lfSUJNTUNBIGlzIG5vIGxvbmdlciBuZWVkZWQgYW5kCisgICAgICB3YXMgZW50aXJlbHkgcmVtb3ZlZC4KKyAgIDMpIFNvbWUgc3dpdGNoIHN0YXRlbWVudHMgZ290IG9wdGltaXplZCBpbiBjb2RlLCBhcyBzb21lIG1pbm9yIHZhcmlhYmxlcworICAgICAgaW4gaW50ZXJuYWwgU0NTSS1jb21tYW5kIGhhbmRsZXJzLgorICAgLSBNaWNoYWVsIExhbmcKKworICAgNCBUbyBkbworICAgLS0tLS0tLQorICAgICAgICAtIElCTSBTQ1NJLTIgRi9XIGV4dGVybmFsIFNDU0kgYnVzIHN1cHBvcnQgaW4gc2VwYXJhdGUgbW9kZSEKKwktIEl0IHNlZW1zIHRoYXQgdGhlIGhhbmRsaW5nIG9mIGJhZCBkaXNrcyBpcyByZWFsbHkgYmFkIC0KKwkgIG5vbi1leGlzdGVudCwgaW4gZmFjdC4gSG93ZXZlciwgYSBsb3ctbGV2ZWwgZHJpdmVyIGNhbm5vdCBoZWxwCisJICBtdWNoLCBpZiBzdWNoIHRoaW5ncyBoYXBwZW4uCisKKyAgIDUgVXNlcnMnIE1hbnVhbAorICAgLS0tLS0tLS0tLS0tLS0tCisgICA1LjEgQ29tbWFuZGxpbmUgUGFyYW1ldGVycworICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgIFRoZXJlIGV4aXN0IHNldmVyYWwgZmVhdHVyZXMgZm9yIHRoZSBJQk0gU0NTSS1zdWJzeXN0ZW0gZHJpdmVyLgorICAgVGhlIGNvbW1hbmRsaW5lIHBhcmFtZXRlciBmb3JtYXQgaXM6CisgICAKKyAgICAgICAgIGlibW1jYXNjc2k9PGNvbW1hbmQxPiw8Y29tbWFuZDI+LDxjb21tYW5kMz4sLi4uCisJIAorICAgd2hlcmUgY29tbWFuZE4gY2FuIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nOgorICAgCisgICAgICAgICBkaXNwbGF5ICAgIE93bmVycyBvZiBhIG1vZGVsIDk1IG9yIG90aGVyIFBTLzIgc3lzdGVtcyB3aXRoIGFuCisJICAgICAgICAgICAgYWxwaGFudW1lcmljIExFRCBkaXNwbGF5IG1heSBzZXQgdGhpcyB0byBoYXZlIHRoZWlyCisJCSAgICBkaXNwbGF5IHNob3dpbmcgdGhlIGZvbGxvd2luZyBvdXRwdXQgb2YgdGhlIDggZGlnaXRzOgorCQkgICAgICAKKwkJICAgICAgICAgICAgICAgIC0tLS0tLURBCisJCQkJCisJCSAgICB3aGVyZSAnLScgc3RheXMgZGFyaywgJ0QnIHNob3dzIHRoZSBTQ1NJLWRldmljZSBpZAorCQkgICAgYW5kICdBJyBzaG93cyB0aGUgU0NTSSBob3N0aW5kZXgsIGJlaW5nIGN1cnJlbnRseSAKKwkJICAgIGFjY2Vzc2VkLiBEdXJpbmcgYm9vdHRpbWUsIHRoaXMgd2lsbCBnaXZlIHRoZSBtZXNzYWdlCisJCSAgICAKKwkJICAgICAgICAgICAgICAgIFNDU0lpbmkqCisJCQkJCisgICAgICAgICAgICAgICAgICAgIG9uIHRoZSBMRUQtcGFuZWwsIHdoZXJlIHRoZSAqIHJlcHJlc2VudHMgYSByb3RhdG9yLCAKKwkJICAgIHNob3dpbmcgdGhlIGFjdGl2aXR5IGR1cmluZyB0aGUgcHJvYmluZyBwaGFzZSBvZiB0aGUKKwkJICAgIGRyaXZlciB3aGljaCBjYW4gdGFrZSB1cCB0byB0d28gbWludXRlcyBwZXIgU0NTSS1hZGFwdGVyLgorCSBhZGlzcGxheSAgIFRoaXMgd29ya3MgbGlrZSBkaXNwbGF5LCBidXQgZ2l2ZXMgbW9yZSBvcHRpY2FsIG92ZXJ2aWV3IAorCSAgICAgICAgICAgIG9mIHRoZSBhY3Rpdml0aWVzIG9uIHRoZSBTQ1NJLWJ1cy4gVGhlIGRpc3BsYXkgd2lsbCBoYXZlCisJCSAgICB0aGUgZm9sbG93aW5nIG91dHB1dDoKKwkJICAgIAorCQkgICAgICAgICAgICAgICAgNjU0MzIxMEEKKwkJCQkKKwkJICAgIHdoZXJlIHRoZSBudW1iZXJzIDAgdG8gNiBsaWdodCB1cCBhdCB0aGUgc2hvd24gcG9zaXRpb24sCisJCSAgICB3aGVuIHRoZSBTQ1NJLWRldmljZSBpcyBhY2Nlc3NlZC4gJ0EnIHNob3dzIGFnYWluIHRoZSBTQ1NJCisJCSAgICBob3N0aW5kZXguIElmIGRpc3BsYXkgbm9yIGFkaXNwbGF5IGlzIHNldCwgdGhlIGludGVybmFsCisJCSAgICBQUy8yIGhhcmRkaXNrIExFRCBpcyB1c2VkIGZvciBtZWRpYS1hY3Rpdml0aWVzLiBTbywgaWYKKwkJICAgIHlvdSByZWFsbHkgZG8gbm90IGhhdmUgYSBzeXN0ZW0gd2l0aCBhIExFRC1kaXNwbGF5LCB5b3UKKwkJICAgIHNob3VsZCBub3Qgc2V0IGRpc3BsYXkgb3IgYWRpc3BsYXkuIEtlZXAgaW4gbWluZCwgdGhhdAorCQkgICAgZGlzcGxheSBhbmQgYWRpc3BsYXkgY2FuIG9ubHkgYmUgdXNlZCBhbHRlcm5hdGl2ZWx5LiBJdAorCQkgICAgaXMgbm90IHJlY29tbWVuZGVkIHRvIHVzZSB0aGlzIG9wdGlvbiwgaWYgeW91IGhhdmUgc29tZQorCQkgICAgd2lkZS1hZGRyZXNzZWQgZGV2aWNlcyBlLmcuIGF0IHRoZSBTQ1NJLTIgRi9XIGFkYXB0ZXIgaW4KKwkJICAgIHlvdXIgc3lzdGVtLiBJbiBhZGRpdGlvbiwgdGhlIHVzYWdlIG9mIHRoZSBkaXNwbGF5IGZvcgorCQkgICAgb3RoZXIgdGFza3MgaW4gcGFyYWxsZWwsIGxpa2UgdGhlIGxpbnV4aW5mby11dGlsaXR5IG1ha2VzIAorCQkgICAgbm8gc2Vuc2Ugd2l0aCB0aGlzIG9wdGlvbi4KKwkgYWN0aXZpdHkgICBUaGlzIGVuYWJsZXMgdGhlIFBTLzIgaGFyZGRpc2sgTEVEIGFjdGl2aXR5IGluZGljYXRvci4KKwkgICAgICAgICAgICBNb3N0IFBTLzIgaGF2ZSBubyBhbHBoYW51bWVyaWMgTEVEIGRpc3BsYXksIGJ1dCBzb21lCisJCSAgICBpbmRpY2F0b3IuIFNvIHlvdSBzaG91bGQgdXNlIHRoaXMgcGFyYW1ldGVyIHRvIGFjdGl2YXRlIGl0LgorCQkgICAgSWYgeW91IG93biBtb2RlbCA5NTk1IChTZXJ2ZXI5NSksIHlvdSBjYW4gaGF2ZSBib3RoLCB0aGUgCisJCSAgICBMRUQgcGFuZWwgYW5kIHRoZSBhY3Rpdml0eSBpbmRpY2F0b3IgaW4gcGFyYWxsZWwuIEhvd2V2ZXIsCisJCSAgICBzb21lIFBTLzJzLCBsaWtlIHRoZSA4NTk1IGRvIG5vdCBoYXZlIGFueSBoYXJkZGlzayBMRUQgCisJCSAgICBhY3Rpdml0eSBpbmRpY2F0b3IsIHdoaWNoIG1lYW5zLCB0aGF0IHlvdSBtdXN0IHVzZSB0aGUKKwkJICAgIGFscGhhbnVtZXJpYyBMRUQgZGlzcGxheSBpZiB5b3Ugd2FudCB0byBtb25pdG9yIFNDU0ktCisJCSAgICBhY3Rpdml0eS4KKwkgYnlwYXNzICAgICBUaGlzIGlzIG9ic29sZXRlIGZyb20gZHJpdmVyIHZlcnNpb24gNC4wLCBhcyB0aGUgYWRhcHRlcnMKKwkgICAgICAgICAgICBnb3QgdGhhdCBmYXIgdW5kZXJzdG9vZCwgdGhhdCB0aGUgc2VsZWN0aW9uIGJldHdlZW4gCisJCSAgICBpbnRlZ3JhdGVkIGFuZCBieXBhc3NlZCBjb21tYW5kcyBzaG91bGQgbm93IHdvcmsgY29tcGxldGVseQorCQkgICAgY29ycmVjdCEgRm9yIGhpc3RvcmljYWwgcmVhc29ucywgdGhlIG9sZCBkZXNjcmlwdGlvbiBpcworCQkgICAga2VwdCBoZXJlOgorCSAgICAgICAgICAgIFRoaXMgY29tbWFuZGxpbmUgcGFyYW1ldGVyIGZvcmNlcyB0aGUgZHJpdmVyIG5ldmVyIHRvIHVzZQorCSAgICAgICAgICAgIFNDU0ktc3Vic3lzdGVtcycgaW50ZWdyYXRlZCBTQ1NJLWNvbW1hbmQgc2V0LiBFeGNlcHQgb2YKKwkJICAgIHRoZSBpbW1lZGlhdGUgYXNzaWduLCB3aGljaCBpcyBvZiB2aXRhbCBpbXBvcnRhbmNlIGZvcgorCQkgICAgZXZlcnkgSUJNIFNDU0ktc3Vic3lzdGVtIHRvIHNldCBpdHMgbGRucyByaWdodC4gSW5zdGVhZCwKKwkJICAgIHRoZSBvcmRpbmFyeSBBTlNJLVNDU0ktY29tbWFuZHMgYXJlIHVzZWQgYW5kIHBhc3NlZCBieSB0aGUKKwkJICAgIGNvbnRyb2xsZXIgdG8gdGhlIFNDU0ktZGV2aWNlcywgdGhlcmVmb3JlICdieXBhc3MnLiBUaGUKKwkJICAgIGVmZm9ydCwgZG9uZSBieSB0aGUgc3Vic3lzdGVtIGlzIHF1aXRlIGJvZ3VzIGFuZCBhdCBhCisJCSAgICBtaW5pbXVtIGFuZCB0aGVyZWZvcmUgaXQgc2hvdWxkIHdvcmsgZXZlcnl3aGVyZS4gVGhpcworCQkgICAgY291bGQgbWF5YmUgc29sdmUgdHJvdWJsZXMgd2l0aCBvbGQgb3IgaW50ZWdyYXRlZCBTQ1NJLQorCQkgICAgY29udHJvbGxlcnMgYW5kIG5hc3R5IGhhcmRkaXNrcy4gS2VlcCBpbiBtaW5kLCB0aGF0IHVzaW5nIAorCQkgICAgdGhpcyBmbGFnIHdpbGwgc2xvdy1kb3duIFNDU0ktYWNjZXNzZXMgc2xpZ2h0bHksIGFzIHRoZSAKKwkJICAgIHNvZnR3YXJlIGdlbmVyYXRlZCBjb21tYW5kcyBhcmUgYWx3YXlzIHNsb3dlciB0aGFuIHRoZSAKKwkJICAgIGhhcmR3YXJlLiBOb24taGFyZGRpc2sgZGV2aWNlcyBhbHdheXMgZ2V0IHJlYWQvd3JpdGUtCisJCSAgICBjb21tYW5kcyBpbiBieXBhc3MgbW9kZS4gT24gdGhlIG1vc3QgcmVjZW50IHJlbGVhc2VzIG9mIAorCQkgICAgdGhlIExpbnV4IElCTS1TQ1NJLWRyaXZlciwgdGhlIGJ5cGFzcyBjb21tYW5kIHNob3VsZCBiZQorCQkgICAgbm8gbG9uZ2VyIGEgbmVjZXNzYXJ5IHRoaW5nLCBpZiB5b3UgYXJlIHN1cmUgYWJvdXQgeW91cgorCQkgICAgU0NTSS1oYXJkd2FyZSEKKwkgbm9ybWFsICAgICBUaGlzIGlzIHRoZSBwYXJhbWV0ZXIsIGludHJvZHVjZWQgb24gdGhlIDIuMC54IGRldmVsb3BtZW50CisJICAgICAgICAgICAgcmFpbCBieSBaUCBHdS4gVGhpcyBwYXJhbWV0ZXIgZGVmaW5lcyB0aGUgU0NTSS1kZXZpY2UKKwkJICAgIHNjYW4gb3JkZXIgaW4gdGhlIG5ldyBpbmR1c3RyeSBzdGFuZGFyZC4gVGhpcyBtZWFucywgdGhhdAorCQkgICAgdGhlIGZpcnN0IFNDU0ktZGV2aWNlIGlzIHRoZSBvbmUgd2l0aCB0aGUgbG93ZXN0IHB1bi4KKwkJICAgIEUuZy4gaGFyZGRpc2sgYXQgcHVuPTAgaXMgc2Nhbm5lZCBiZWZvcmUgaGFyZGRpc2sgYXQKKwkJICAgIHB1bj02LCB3aGljaCBtZWFucywgdGhhdCBoYXJkZGlzayBhdCBwdW49MCBnZXRzIHNkYQorCQkgICAgYW5kIHRoZSBvbmUgYXQgcHVuPTYgZ2V0cyBzZGIuCisJIGFuc2kgICAgICAgVGhlIEFOU0ktc3RhbmRhcmQgZm9yIHRoZSByaWdodCBzY2FuIG9yZGVyLCBhcyBkb25lIGJ5CisJICAgICAgICAgICAgSUJNLCBNaWNyb3dhcmUgYW5kIE1pY3Jvc29mdCwgc2NhbnMgU0NTSS1kZXZpY2VzIHN0YXJ0aW5nCisJCSAgICBhdCB0aGUgaGlnaGVzdCBwdW4sIHdoaWNoIG1lYW5zLCB0aGF0IGUuZy4gaGFyZGRpc2sgYXQKKwkJICAgIHB1bj02IGdldHMgc2RhIGFuZCBhIGhhcmRkaXNrIGF0IHB1bj0wIGdldHMgc2RiLiBJZiB5b3UKKwkJICAgIGxpa2UgdG8gaGF2ZSB0aGUgc2FtZSBTQ1NJLWRldmljZSBvcmRlciwgYXMgaW4gRE9TLCBPUy05CisJCSAgICBvciBPUy8yLCBqdXN0IHVzZSB0aGlzIHBhcmFtZXRlci4KKyAgICAgICAgIGZhc3QgICAgICAgU0NTSS1JL08gaW4gc3luY2hyb25vdXMgbW9kZSBpcyBkb25lIGF0IDUgTUh6IGZvciBJQk0tCisgICAgICAgICAgICAgICAgICAgIFNDU0ktZGV2aWNlcy4gU0NTSS0yIEZhc3QvV2lkZSBBZGFwdGVyL0EgZXh0ZXJuYWwgYnVzCisgICAgICAgICAgICAgICAgICAgIHNob3VsZCB0aGVuIHJ1biBhdCAxMCBNSHogaWYgRmFzdC1TQ1NJIGlzIGVuYWJsZWQsCisgICAgICAgICAgICAgICAgICAgIGFuZCBhdCA1IE1IeiBpZiBGYXN0LVNDU0kgaXMgZGlzYWJsZWQgb24gdGhlIGV4dGVybmFsCisgICAgICAgICAgICAgICAgICAgIGJ1cy4gVGhpcyBpcyB0aGUgZGVmYXVsdCBzZXR0aW5nIHdoZW4gbm90aGluZyBpcyAKKyAgICAgICAgICAgICAgICAgICAgc3BlY2lmaWVkIGhlcmUuCisgICAgICAgICBtZWRpdW0gICAgIFN5bmNocm9ub3VzIHJhdGUgaXMgYXQgNTAlIGFwcHJveGltYXRlbHksIHdoaWNoIG1lYW5zCisgICAgICAgICAgICAgICAgICAgIDIuNSBNSHogZm9yIElCTSBTQ1NJLWFkYXB0ZXJzIGFuZCA1LjAgTUh6IGZvciBGL1cgZXh0LgorICAgICAgICAgICAgICAgICAgICBTQ1NJLWJ1cyAod2hlbiBGYXN0LVNDU0kgc3BlZWQgZW5hYmxlZCBvbiBleHRlcm5hbCBidXMpLgorICAgICAgICAgc2xvdyAgICAgICBUaGUgc2xvd2VzdCBwb3NzaWJsZSBzeW5jaHJvbm91cyB0cmFuc2ZlciByYXRlIGlzIHNldC4gCisgICAgICAgICAgICAgICAgICAgIFRoaXMgbWVhbnMgMS44MiBNSHogZm9yIElCTSBTQ1NJLWFkYXB0ZXJzIGFuZCAyLjAgTUh6CisgICAgICAgICAgICAgICAgICAgIGZvciBGL1cgZXh0ZXJuYWwgYnVzIGF0IEZhc3QtU0NTSSBzcGVlZCBvbiB0aGUgZXh0ZXJuYWwKKwkJICAgIGJ1cy4KKwkJICAgIAorICAgQSBmdXJ0aGVyIG9wdGlvbiBpcyB0aGF0IHlvdSBjYW4gZm9yY2UgdGhlIFNDU0ktZHJpdmVyIHRvIGFjY2VwdCBhIFNDU0ktCisgICBzdWJzeXN0ZW0gYXQgYSBjZXJ0YWluIEkvTy1hZGRyZXNzIHdpdGggYSBwcmVkZWZpbmVkIGFkYXB0ZXIgUFVOLiBUaGlzCisgICBpcyBkb25lIGJ5IGVudGVyaW5nIAorCisgICAgICAgICAgICAgICAgICBjb21tYW5kTiAgID0gSS9PLWJhc2UKKwkJICBjb21tYW5kTisxID0gYWRhcHRlciBQVU4KKwkJICAKKyAgIGUuZy4gaWJtbWNhc2NzaT0weDM1NDAsNyB3aWxsIGZvcmNlIHRoZSBkcml2ZXIgdG8gZGV0ZWN0IGEgU0NTSS1zdWJzeXN0ZW0gCisgICBhdCBJL08tYWRkcmVzcyAweDM1NDAgd2l0aCBhZGFwdGVyIFBVTiA3LiBQbGVhc2Ugb25seSB1c2UgdGhpcyBtZXRob2QsIGlmCisgICB0aGUgZHJpdmVyIGRvZXMgcmVhbGx5IG5vdCByZWNvZ25pemUgeW91ciBTQ1NJLWFkYXB0ZXIhIFdpdGggZHJpdmVyIHZlcnNpb24KKyAgIDMuMiwgdGhpcyByZWNvZ25pdGlvbiBvZiB2YXJpb3VzIGFkYXB0ZXJzIHdhcyBodWdlbHkgaW1wcm92ZWQgYW5kIHlvdQorICAgc2hvdWxkIHRyeSBmaXJzdCB0byByZW1vdmUgeW91ciBjb21tYW5kbGluZSBhcmd1bWVudHMgb2Ygc3VjaCB0eXBlIHdpdGggYSAKKyAgIG5ld2VyIGRyaXZlci4gSSBiZXQsIGl0IHdpbGwgYmUgcmVjb2duaXplZCBjb3JyZWN0bHkuIEV2ZW4gbXVsdGlwbGUgYW5kIAorICAgZGlmZmVyZW50IHR5cGVzIG9mIElCTSBTQ1NJLWFkYXB0ZXJzIHNob3VsZCBiZSByZWNvZ25pemVkIGNvcnJlY3RseSwgdG9vLgorICAgVXNlIHRoZSBmb3JjZWQgZGV0ZWN0aW9uIG1ldGhvZCBvbmx5IGFzIGxhc3Qgc29sdXRpb24hCisgICAKKyAgIEV4YW1wbGVzOgorICAgCisgICAgICAgIGlibW1jYXNjc2k9YWRpc3BsYXkKKwkKKyAgIFRoaXMgd2lsbCB1c2UgdGhlIGFkdmFuY2VkIGRpc3BsYXkgbW9kZSBmb3IgdGhlIG1vZGVsIDk1IExFRCBhbHBoYW51bWVyaWMKKyAgIGRpc3BsYXkuCisgICAKKyAgICAgICAgaWJtbWNhc2NzaT1kaXNwbGF5LDB4MzU1OCw3CisJCisgICBUaGlzIHdpbGwgYWN0aXZhdGUgdGhlIGRlZmF1bHQgZGlzcGxheSBtb2RlIGZvciB0aGUgbW9kZWwgOTUgTEVEIGRpc3BsYXkKKyAgIGFuZCB3aWxsIGZvcmNlIHRoZSBkcml2ZXIgdG8gYWNjZXB0IGEgU0NTSS1zdWJzeXN0ZW0gYXQgSS9PLWJhc2UgMHgzNTU4CisgICB3aXRoIGFkYXB0ZXIgUFVOIDcuCisgICAKKyAgIDUuMiBUcm91Ymxlc2hvb3RpbmcKKyAgIC0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgIFRoZSBmb2xsb3dpbmcgRkFRcyBzaG91bGQgaGVscCB5b3UgdG8gc29sdmUgc29tZSBtYWpvciBwcm9ibGVtcyB3aXRoIHRoaXMKKyAgIGRyaXZlci4KKyAgIAorICAgICBROiAiUmVzZXQgU0NTSS1kZXZpY2VzIGF0IGJvb3R0aW1lIiBoYWx0cyB0aGUgc3lzdGVtIGF0IGJvb3R0aW1lLCB3aHk/CisgICAgIEE6IFRoaXMgaXMgb25seSB0ZXN0ZWQgd2l0aCB0aGUgSUJNIFNDU0kgQWRhcHRlciB3L2NhY2hlLiBJdCBpcyBub3QKKyAgICAgICAgeWV0IHByb292ZWQgdG8gcnVuIG9uIG90aGVyIGFkYXB0ZXJzLCBob3dldmVyIHlvdSBtYXkgYmUgbHVja3kuCisJSW4gdmVyc2lvbiAzLjFkIHRoaXMgaGFzIGJlZW4gaHVnZWx5IGltcHJvdmVkIGFuZCBzaG91bGQgd29yayBiZXR0ZXIsCisJbm93LiBOb3JtYWxseSB5b3UgcmVhbGx5IHdvbid0IG5lZWQgdG8gYWN0aXZhdGUgdGhpcyBmbGFnIGluIHRoZQorCWtlcm5lbCBjb25maWd1cmF0aW9uLCBhcyBhbGwgcG9zdCAxOTg5IFNDU0ktZGV2aWNlcyBzaG91bGQgYWNjZXB0CisJdGhlIHJlc2V0LXNpZ25hbCwgd2hlbiB0aGUgY29tcHV0ZXIgaXMgc3dpdGNoZWQgb24uIFRoZSBTQ1NJLQorCXN1YnN5c3RlbSBnZW5lcmF0ZXMgdGhpcyByZXNldCB3aGlsZSBiZWluZyBpbml0aWFsaXplZC4gVGhpcyBmbGFnCisJaXMgcmVhbGx5IHJlc2VydmVkIGZvciB1c2VycyB3aXRoIHZlcnkgb2xkLCB2ZXJ5IHN0cmFuZ2Ugb3Igc2VsZi1tYWRlCisJU0NTSS1kZXZpY2VzLgorICAgICBROiBXaHkgaXMgdGhlIFNDU0ktb3JkZXIgb2YgbXkgZHJpdmVzIG1pcnJvcmVkIHRvIHRoZSBkZXZpY2Utb3JkZXIKKyAgICAgICAgc2VlbiBmcm9tIE9TLzIgb3IgRE9TID8KKyAgICAgQTogSXQgZGVwZW5kcyBvbiB0aGUgb3BlcmF0aW5nIHN5c3RlbSwgaWYgaXQgbG9va3MgYXQgdGhlIGRldmljZXMgaW4KKyAgICAgICAgQU5TSS1TQ1NJLXN0YW5kYXJkIChzdGFydGluZyBmcm9tIHB1biA2IGFuZCBnb2luZyBkb3duIHRvIHB1biAwKSBvcgorCWlmIGl0IGp1c3Qgc3RhcnRzIGF0IHB1biAwIGFuZCBjb3VudHMgdXAuIElmIHlvdSB3YW50IHRvIGJlIGNvbmZvcm0KKwl3aXRoIE9TLzIgYW5kIERPUywgeW91IGhhdmUgdG8gYWN0aXZhdGUgdGhpcyBmbGFnIGluIHRoZSBrZXJuZWwKKwljb25maWd1cmF0aW9uIG9yIHlvdSBzaG91bGQgc2V0ICdhbnNpJyBhcyBwYXJhbWV0ZXIgZm9yIHRoZSBrZXJuZWwuCisJVGhlIHBhcmFtZXRlciAnbm9ybWFsJyBzZXRzIHRoZSBuZXcgaW5kdXN0cnkgc3RhbmRhcmQsIHN0YXJ0aW5nCisJZnJvbSBwdW4gMCwgc2Nhbm5pbmcgdXAgdG8gcHVuIDYuIFRoaXMgYWxsb3dzIHlvdSB0byBjaGFuZ2UgeW91ciAKKwlvcGluaW9uIHN0aWxsIGFmdGVyIGhhdmluZyBhbHJlYWR5IGNvbXBpbGVkIHRoZSBrZXJuZWwuCisgICAgIFE6IFdoeSBJIGNhbm5vdCBmaW5kIHRoZSBJQk0gTUNBIFNDU0kgc3VwcG9ydCBpbiB0aGUgY29uZmlnIG1lbnVlPworICAgICBBOiBZb3UgaGF2ZSB0byBhY3RpdmF0ZSBNQ0EgYnVzIHN1cHBvcnQsIGZpcnN0LgorICAgICBROiBXaGVyZSBjYW4gSSBmaW5kIHRoZSBsYXRlc3QgaW5mbyBhYm91dCB0aGlzIGRyaXZlcj8KKyAgICAgQTogU2VlIHRoZSBmaWxlIE1BSU5UQUlORVJTIGZvciB0aGUgY3VycmVudCBXV1ctYWRkcmVzcywgd2hpY2ggb2ZmZXJzCisgICAgICAgIHVwZGF0ZXMsIGluZm8gYW5kIFEvQSBsaXN0cy4gQXQgdGhpcyBmaWxlcycgb3JpZ2luLCB0aGUgd2ViYWRkcmVzcworCXdhczogaHR0cDovL3d3dy51bmktbWFpbnouZGUvfmxhbmdtMDAwL2xpbnV4Lmh0bWwKKyAgICAgUTogTXkgU0NTSS1hZGFwdGVyIGlzIG5vdCByZWNvZ25pemVkIGJ5IHRoZSBkcml2ZXIsIHdoYXQgY2FuIEkgZG8/CisgICAgIEE6IEp1c3QgZm9yY2UgaXQgdG8gYmUgcmVjb2duaXplZCBieSBrZXJuZWwgcGFyYW1ldGVycy4gU2VlIHNlY3Rpb24gNS4xLgorICAgICAgICBJZiB0aGlzIHJlYWxseSBoYXBwZW5zLCBkbyBhbHNvIHNlbmQgZS1tYWlsIHRvIHRoZSBtYWludGFpbmVyLCBhcworCWZvcmNlZCBkZXRlY3Rpb24gc2hvdWxkIGJlIG5ldmVyIG5lY2Vzc2FyeS4gRm9yY2VkIGRldGVjdGlvbiBpcyBpbgorCXByaW5jaXBhbCBzb21lIGZsYXcgb2YgdGhlIGRyaXZlciBhZGFwdGVyIGRldGVjdGlvbiBhbmQgZ29lcyBpbnRvIAorCWJ1Z3JlcG9ydHMuCisgICAgIFE6IFRoZSBkcml2ZXIgc2NyZXdzIHVwLCBpZiBpdCBzdGFydHMgdG8gcHJvYmUgU0NTSS1kZXZpY2VzLCBpcyB0aGVyZQorICAgICAgICBzb21lIHdheSBvdXQgb2YgaXQ/CisgICAgIEE6IFllcywgdGhhdCB3YXMgc29tZSByZWNvZ25pdGlvbiBwcm9ibGVtIG9mIHRoZSBjb3JyZWN0IFNDU0ktYWRhcHRlcgorICAgICAgICBhbmQgaXRzIEkvTyBiYXNlIGFkZHJlc3Nlcy4gVXBncmFkZSB5b3VyIGRyaXZlciB0byB0aGUgbGF0ZXN0IHJlbGVhc2UKKwlhbmQgaXQgc2hvdWxkIGJlIGZpbmUgYWdhaW4uCisgICAgIFE6IEkgZ2V0IGEgbWVzc2FnZTogcGFuaWMgSUJNIE1DQSBTQ1NJOiBjb21tYW5kIGVycm9yIC4uLi4gLCB3aGF0IGNhbgorICAgICAgICBJIGRvIGFnYWluc3QgdGhpcz8KKyAgICAgQTogUHJldmlvdXNseSwgSSBmb2xsb3dlZCB0aGUgd2F5IGJ5IGlnbm9yaW5nIGNvbW1hbmQgZXJyb3JzIGJ5IHVzaW5nCisgICAgICAgIGlibW1jYXNjc2k9Zm9yZ2l2ZWFsbCwgYnV0IHRoaXMgY29tbWFuZCBubyBsb25nZXIgZXhpc3RzIGFuZCBpcworCW9ic29sZXRlLiBJZiBzdWNoIGEgcHJvYmxlbSBhcHBlYXJzLCBpdCBpcyBjYXVzZWQgYnkgc29tZSBzZWdtZW50YXRpb24KKwlmYXVsdCBvZiB0aGUgZHJpdmVyLCB3aGljaCBtYXBzIHRvIHNvbWUgdW5hbGxvd2VkIGFyZWEuIFRoZSBsYXRlc3QgCisJdmVyc2lvbiBvZiB0aGUgZHJpdmVyIHNob3VsZCBiZSBvaywgYXMgbW9zdCBidWdzIGhhdmUgYmVlbiBzb2x2ZWQuCisgICAgIFE6IFRoZXJlIGFyZSBzdGlsbCBrZXJuZWwgcGFuaWNzLCBldmVuIGFmdGVyIGhhdmluZyBzZXQgCisgICAgICAgIGlibW1jYXNjc2k9Zm9yZ2l2ZWFsbC4gQXJlIHRoZXJlIG90aGVyIHBvc3NpYmlsaXRpZXMgdG8gcHJldmVudAorCXN1Y2ggcGFuaWNzPworICAgICBBOiBObywgZ2V0IGp1c3QgdGhlIGxhdGVzdCByZWxlYXNlIG9mIHRoZSBkcml2ZXIgYW5kIGl0IHNob3VsZCB3b3JrIAorICAgICAgICBiZXR0ZXIgYW5kIGJldHRlciB3aXRoIGluY3JlYXNpbmcgdmVyc2lvbiBudW1iZXIuIEZvcmdldCBhYm91dCB0aGlzCisJaWJtbWNhc2NzaT1mb3JnaXZlYWxsLCBhcyBhbHNvIGlnbm9yZWNtZCBhcmUgb2Jzb2xldGUuIQorICAgICBROiBMaW51eCBwYW5pY3Mgb3Igc3RvcHMgd2l0aG91dCBhbnkgY29tbWVudCwgYnV0IGl0IGlzIHByb2JhYmxlLCB0aGF0IG15CisgICAgICAgIGhhcmRkaXNrKHMpIGhhdmUgYmFkIGJsb2Nrcy4KKyAgICAgQTogU29ycnksIHRoZSBiYWQtYmxvY2sgaGFuZGxpbmcgaXMgc3RpbGwgYSBmZWVibGUgcG9pbnQgb2YgdGhpcyBkcml2ZXIsCisgICAgICAgIGJ1dCBpcyBvbiB0aGUgc2NoZWR1bGUgZm9yIGRldmVsb3BtZW50IGluIHRoZSBuZWFyIGZ1dHVyZS4KKyAgICAgUTogTGludXggcGFuaWNzIHdoaWxlIGR5bmFtaWNhbGx5IGFzc2lnbmluZyBTQ1NJLWlkcyBvciBsZG5zLgorICAgICBBOiBJZiB5b3UgZGlzY29ubmVjdCBhIFNDU0ktZGV2aWNlIGZyb20gdGhlIG1hY2hpbmUsIHdoaWxlIExpbnV4IGlzIHVwCisgICAgICAgIGFuZCB0aGUgZHJpdmVyIHVzZXMgZHluYW1pY2FsIHJlYXNzaWdubWVudCBvZiBsb2dpY2FsIGRldmljZSBudW1iZXJzCisJKGxkbiksIGl0IHJlYWxseSBnZXRzICJhbmdyeSIgaWYgaXQgd29uJ3QgZmluZCBkZXZpY2VzLCB0aGF0IHdlcmUgc3RpbGwKKwlwcmVzZW50IGF0IGJvb3R0aW1lIGFuZCBzdG9wcyBMaW51eC4KKyAgICAgUTogVGhlIHN5c3RlbSBkb2VzIG5vdCByZWNvdmVyIGFmdGVyIGFuIGFib3J0LWNvbW1hbmQgaGFzIGJlZW4gZ2VuZXJhdGVkLgorICAgICBBOiBUaGlzIGlzIHJlZ3JldHRhYmx5IHRydWUsIGFzIGl0IGlzIG5vdCB5ZXQgdW5kZXJzdG9vZCwgd2h5IHRoZSAKKyAgICAgICAgU0NTSS1hZGFwdGVyIGRvZXMgcmVhbGx5IE5PVCBnZW5lcmF0ZSBhbnkgaW50ZXJydXB0IGF0IHRoZSBlbmQgb2YKKwl0aGUgYWJvcnQtY29tbWFuZC4gQXMgbm8gaW50ZXJydXB0IGlzIGdlbmVyYXRlZCwgdGhlIGFib3J0IGNvbW1hbmQKKwljYW5ub3QgZ2V0IGZpbmlzaGVkIGFuZCB0aGUgc3lzdGVtIGhhbmdzLCBzb3JyeSwgYnV0IGNoZWNrcyBhcmUgCisJcnVubmluZyB0byBodW50IGRvd24gdGhpcyBwcm9ibGVtLiBJZiB0aGVyZSBpcyBhIHJlYWwgcGVuZGluZyBjb21tYW5kLAorCXRoZSBpbnRlcnJ1cHQgTVVTVCBnZXQgZ2VuZXJhdGVkIGFmdGVyIGFib3J0LiBJbiB0aGlzIGNhc2UsIGl0CisJc2hvdWxkIGZpbmlzaCB3ZWxsLgorICAgICBROiBUaGUgc3lzdGVtIGdldHMgaW4gYmFkIHNoYXBlIGFmdGVyIGEgU0NTSS1yZXNldCwgaXMgdGhpcyBrbm93bj8KKyAgICAgQTogWWVzLCBhcyB0aGVyZSBhcmUgYSBsb3Qgb2YgcHJlc2NyaXB0aW9ucyAoc2VlIHRoZSBMaW51eCBIYWNrZXJzJworICAgICAgICBHdWlkZSkgd2hhdCBoYXMgdG8gYmUgZG9uZSBmb3IgcmVzZXQsIHdlIHN0aWxsIHNoYXJlIHRoZSBiYWQgc2hhcGUgb2YKKwl0aGUgcmVzZXQgZnVuY3Rpb25zIHdpdGggYWxsIG90aGVyIGxvdyBsZXZlbCBTQ1NJLWRyaXZlcnMuIAorCUFzdG9uaXNoaW5nbHksIHJlc2V0IHdvcmtzIGluIG1vc3QgY2FzZXMgcXVpdGUgb2ssIGJ1dCB0aGUgaGFyZGRpc2tzCisJd29uJ3QgcnVuIGluIHN5bmNob25vdXMgbW9kZSBhbnltb3JlIGFmdGVyIGEgcmVzZXQsIHVudGlsIHlvdSByZWJvb3QuCisgICAgIFE6IFdoeSBkb2VzIG15IFhYWCB3L0NhY2hlIGFkYXB0ZXIgbm90IHVzZSByZWFkLXByZWZldGNoPworICAgICBBOiBPaywgdGhhdCBpcyBub3QgY29tcGxldGVseSBwb3NzaWJsZS4gSWYgYSBjYWNoZSBpcyBwcmVzZW50LCB0aGUgCisgICAgICAgIGFkYXB0ZXIgdHJpZXMgdG8gdXNlIGl0IGludGVybmFsbHkuIEV4cGxpY2l0bHksIG9uZSBjYW4gdXNlIHRoZSBjYWNoZQorCXdpdGggYSByZWFkIHByZWZldGNoIGNvbW1hbmQsIG1heWJlIGluIGZ1dHVyZSwgYnV0IHRoaXMgcmVxdWlyZXMKKwlzb21lIG1ham9yIG92ZXJoZWFkIG9mIFNDU0ktY29tbWFuZHMgdGhhdCByaXNrcyB0aGUgcGVyZm9ybWFuY2UgdG8KKwlnbyBkb3duIG1vcmUgdGhhbiBpdCBnZXRzIGltcHJvdmVkLiBUZXN0cyB3aXRoIHRoYXQgYXJlIHJ1bm5pbmcuCisgICAgIFE6IEkgaGF2ZSBhIElCTSBTQ1NJLTIgRmFzdC9XaWRlIGFkYXB0ZXIsIGl0IGJvb3RzIGluIHNvbWUgd2F5IGFuZCBoYW5ncy4KKyAgICAgQTogWWVzLCB0aGF0IGlzIHVuZGVyc3Rvb2QsIGFzIGZvciBzdXJlLCB5b3VyIFNDU0ktMiBGYXN0L1dpZGUgYWRhcHRlcgorICAgICAgICB3YXMgaW4gc3VjaCBhIGNhc2UgcmVjb2duaXplZCBhcyBpbnRlZ3JhdGVkIFNDU0ktYWRhcHRlciBvciBzb21ldGhpbmcgCisJZWxzZSwgYnV0IG5vdCBhcyB0aGUgY29ycmVjdCBhZGFwdGVyLiBBcyB0aGUgSS9PLXBvcnRzIGdldCBhc3NpZ25lZCAKKwl3cm9uZ2x5IGJ5IHRoYXQgcmVhc29uLCB0aGUgc3lzdGVtIHNob3VsZCBjcmFzaCBpbiBtb3N0IGNhc2VzLiBZb3UgCisJc2hvdWxkIHVwZ3JhZGUgdG8gdGhlIGxhdGVzdCByZWxlYXNlIG9mIHRoZSBTQ1NJLWRyaXZlci4gVGhlIAorCXJlY29tbWVuZGVkIHZlcnNpb24gaXMgMy4yIG9yIGxhdGVyLiBIZXJlLCB0aGUgRi9XIHN1cHBvcnQgaXMgaW4KKwlhIHN0YWJsZSBhbmQgcmVsaWFibGUgY29uZGl0aW9uLiBXaWRlLWFkZHJlc3NpbmcgaXMgaW4gYWRkaXRpb24gCisJc3VwcG9ydGVkLgorICAgICBROiBJIGdldCBhIE9vb3BzIG1lc3NhZ2UgYW5kIHNvbWV0aGluZyBsaWtlICJraWxsaW5nIGludGVycnVwdCIuCisgICAgIEE6IFRoZSByZWFzb24gZm9yIHRoaXMgaXMgdGhhdCB0aGUgSUJNIFNDU0ktc3Vic3lzdGVtIG9ubHkgc2VuZHMgYSAKKyAgICAgICAgdGVybWluYXRpb24gc3RhdHVzIGJhY2ssIGlmIHNvbWUgZXJyb3IgYXBwZWFyZWQuIEluIGZvcm1lciByZWxlYXNlcworCW9mIHRoZSBkcml2ZXIsIGl0IHdhcyBub3QgY2hlY2tlZCwgaWYgdGhlIHRlcm1pbmF0aW9uIHN0YXR1cyBibG9jaworCWlzIE5VTEwuIEZyb20gdmVyc2lvbiAzLjIsIGl0IGlzIHRha2VuIGNhcmUgb2YgdGhpcy4KKyAgICAgUTogSSBoYXZlIGEgRi9XIGFkYXB0ZXIgYW5kIHRoZSBkcml2ZXIgc2VlcyBteSBpbnRlcm5hbCBTQ1NJLWRldmljZXMsCisgICAgICAgIGJ1dCBpZ25vcmVzIHRoZSBleHRlcm5hbCBvbmVzLgorICAgICBBOiBTZWxlY3QgY29tYmluZWQgYnVzbW9kZSBpbiB0aGUgSUJNIGNvbmZpZy1wcm9ncmFtIGFuZCBjaGVjayBmb3IgdGhhdAorICAgICAgICBubyBTQ1NJLWlkIG9uIHRoZSBleHRlcm5hbCBkZXZpY2VzIGFwcGVhcnMgb24gaW50ZXJuYWwgZGV2aWNlcy4KKyAgICAgICAgUmVib290IGFmdGVyd2FyZHMuIER1YWwgYnVzbW9kZSBpcyBzdXBwb3J0ZWQsIGJ1dCB3b3JrcyBvbmx5IGZvciB0aGUKKwlpbnRlcm5hbCBidXMsIHlldC4gRXh0ZXJuYWwgYnVzIGlzIHN0aWxsIGlnbm9yZWQuIFRha2UgY2FyZSBmb3IgeW91cgorCVNDU0ktaWRzLiBJZiBjb21iaW5lZCBidXMtbW9kZSBpcyBhY3RpdmF0ZWQsIG9uIHNvbWUgYWRhcHRlcnMsIAorCXRoZSB3aWRlLWFkZHJlc3NpbmcgaXMgbm90IHBvc3NpYmxlLCBzbyBkZXZpY2VzIHdpdGggaWRzIGJldHdlZW4gOCAKKwlhbmQgMTUgZ2V0IGlnbm9yZWQgYnkgdGhlIGRyaXZlciAmIGFkYXB0ZXIhCisgICAgIFE6IEkgaGF2ZSBhIDk1OTUgYW5kIEkgZ2V0IGEgTk1JIGR1cmluZyBoZWF2eSBTQ1NJIEkvTyBlLmcuIGR1cmluZyBmc2NrLgorICAgICAgICBBIENPTU1BTkQgRVJST1IgaXMgcmVwb3J0ZWQgYW5kIGNoYXJhY3RlcnMgb24gdGhlIHNjcmVlbiBhcmUgbWlzc2luZy4KKwlXYXJtIHJlYm9vdCBpcyBub3QgcG9zc2libGUuIFRoaW5ncyBsb29rIGxpa2UgcXVpdGUgd2VpcmVkLgorICAgICBBOiBDaGVjayB0aGUgcHJvY2Vzc29yIHR5cGUgb2YgeW91ciA5NTk1LiBJZiB5b3UgaGF2ZSBhbiA4MDQ4NiBvciA0ODZEWC0yCisgICAgICAgIHByb2Nlc3NvciBjb21wbGV4IG9uIHlvdXIgbWFpbmJvYXJkIGFuZCB5b3UgY29tcGlsZWQgYSBrZXJuZWwgdGhhdAorCXN1cHBvcnRzIDgwMzg2IHByb2Nlc3NvcnMsIGl0IGlzIHBvc3NpYmxlLCB0aGF0IHRoZSBrZXJuZWwgY2Fubm90CisJa2VlcCB0cmFjayBvZiB0aGUgUFMvMiBpbnRlcnJ1cHQgaGFuZGxpbmcgYW5kIHN0b3BzIG9uIGFuIE5NSS4gSnVzdAorCWNvbXBpbGUgYSBrZXJuZWwgZm9yIHRoZSBjb3JyZWN0IHByb2Nlc3NvciB0eXBlIG9mIHlvdXIgUFMvMiBhbmQKKwlldmVyeXRoaW5nIHNob3VsZCBiZSBmaW5lLiBUaGlzIGlzIG5lY2Vzc2FyeSBldmVuIGlmIG9uZSBhc3N1bWVzLAorCXRoYXQgc29tZSA4MDQ4NiBzeXN0ZW0gc2hvdWxkIGJlIGRvd253YXJkIGNvbXBhdGlibGUgdG8gODAzODYKKwlzb2Z0d2FyZS4KKyAgICAgUTogU29tZSBjb21tYW5kcyBoYW5nIGFuZCBpbnRlcnJ1cHRzIGJsb2NrIHRoZSBtYWNoaW5lLiBBZnRlciBzb21lCisgICAgICAgIHRpbWVvdXQsIHRoZSBzeXNsb2cgcmVwb3J0cyB0aGF0IGl0IHRyaWVzIHRvIGNhbGwgYWJvcnQsIGJ1dCB0aGUKKwltYWNoaW5lIGlzIGZyb3plbi4KKyAgICAgQTogVGhpcyBjYW4gYmUgYSBidXN5IHdhaXQgYnVnIGluIHRoZSBpbnRlcnJ1cHQgaGFuZGxlciBvZiBkcml2ZXIgCisgICAgICAgIHZlcnNpb24gMy4yLiBZb3Ugc2hvdWxkIGF0IGxlYXN0IHVwZ3JhZGUgdG8gMy4yYyBpZiB5b3UgdXNlIAorCWtlcm5lbCA8IDIuNC4wIGFuZCBkcml2ZXIgdmVyc2lvbiA0LjAgaWYgeW91IHVzZSBrZXJuZWwgMi40LjAgb3IgCisJbGF0ZXIgKGluY2x1ZGluZyBhbGwgdGVzdCByZWxlYXNlcykuCisgICAgIFE6IEkgaGF2ZSBhIFBTLzIgbW9kZWwgODAgYW5kIG1vcmUgdGhhbiAxNiBNQnl0ZXMgb2YgUkFNLiBUaGUgZHJpdmVyCisgICAgICAgIGNvbXBsZXRlbHkgcmVmdXNlcyB0byB3b3JrLCByZXBvcnRzIE5NSXMsIENPTU1BTkQgRVJST1JzIG9yIG90aGVyCisJYW1iaWd1b3VzIHN0dWZmLiBXaGVuIHJlZHVjaW5nIHRoZSBSQU0gc2l6ZSBkb3duIGJlbG93IDE2IE1CLCAKKwlldmVyeXRoaW5nIGlzIHJ1bm5pbmcgc21vb3RobHkuCisgICAgIEE6IE5vIHJlYWwgYW5zd2VyLCB5ZXQuIEluIGFueSBjYXNlLCBvbmUgc2hvdWxkIGZvcmNlIHRoZSBrZXJuZWwgdG8KKyAgICAgICAgcHJlc2VudCBTQ0JzIG9ubHkgYmVsb3cgdGhlIDE2IE1CeXRlcyBiYXJyaWVyLiBNYXliZSB0aGlzIHNvbHZlcyB0aGUKKwlwcm9ibGVtLiBOb3QgeWV0IHRyaWVkLCBidXQgZ3Vlc3NpbmcgdGhhdCBpdCBjb3VsZCB3b3JrLiBUbyBnZXQgdGhpcywKKwlzZXQgdW5jaGVja2VkX2lzYV9kbWEgYXJndW1lbnQgb2YgaWJtbWNhLmggZnJvbSAwIHRvIDEuCisKKyAgIDUuMyBCdWdyZXBvcnRzCisgICAtLS0tLS0tLS0tLS0tLQorICAgSWYgeW91IHJlYWxseSBmaW5kIGJ1Z3MgaW4gdGhlIHNvdXJjZWNvZGUgb3IgdGhlIGRyaXZlciB3aWxsIHN1Y2Nlc3NmdWxseQorICAgcmVmdXNlIHRvIHdvcmsgb24geW91ciBtYWNoaW5lLCB5b3Ugc2hvdWxkIHNlbmQgYSBidWcgcmVwb3J0IHRvIG1lLiBUaGUKKyAgIGJlc3QgZm9yIHRoaXMgaXMgdG8gZm9sbG93IHRoZSBpbnN0cnVjdGlvbnMgb24gdGhlIFdXVy1wYWdlIGZvciB0aGlzCisgICBkcml2ZXIuIEZpbGwgb3V0IHRoZSBidWctcmVwb3J0IGZvcm0sIHBsYWNlZCBvbiB0aGUgV1dXLXBhZ2UgYW5kIHNoaXAgaXQsCisgICBzbyB0aGUgYnVncyBjYW4gYmUgdGFrZW4gaW50byBhY2NvdW50IHdpdGggbWF4aW11bSBlZmZvcnRzLiBCdXQsIHBsZWFzZQorICAgZG8gbm90IHNlbmQgYnVnIHJlcG9ydHMgYWJvdXQgdGhpcyBkcml2ZXIgdG8gTGludXMgVG9ydmFsZHMgb3IgTGVvbmFyZAorICAgWnVia29mZiwgYXMgTGludXMgaXMgYnVycmllZCBpbiBFLU1haWwgYW5kIExlb25hcmQgaXMgc3VwZXJ2aXNpbmcgYWxsCisgICBTQ1NJLWRyaXZlcnMgYW5kIHdvbid0IGhhdmUgdGhlIHRpbWUgbGVmdCB0byBsb29rIGluc2lkZSBldmVyeSBzaW5nbGUKKyAgIGRyaXZlciB0byBmaXggYSBidWcgYW5kIGVzcGVjaWFsbHkgRE8gTk9UIHNlbmQgbW9kaWZpZWQgY29kZSB0byBMaW51cworICAgVG9ydmFsZHMgb3IgQWxhbiBKLiBDb3ggd2hpY2ggaGFzIG5vdCBiZWVuIGNoZWNrZWQgaGVyZSEhISBUaGV5IGFyZSBib3RoCisgICBxdWl0ZSBidXJyaWVkIGluIEUtbWFpbCAoYXMgbWUsIHNvbWV0aW1lcywgdG9vKSBhbmQgb25lIHNob3VsZCBmaXJzdCBjaGVjaworICAgZm9yIHByb2JsZW1zIG9uIG15IGxvY2FsIHRlc3RzdGFuZC4gUmVjZW50bHksIEkgZ290IGEgbG90IG9mIAorICAgYnVncmVwb3J0cyBmb3IgZXJyb3JzIGluIHRoZSBpYm1tY2EuYyBjb2RlLCB3aGljaCBJIGNvdWxkIG5vdCBpbWFnaW5lLCBidXQKKyAgIGEgbG9vayBpbnNpZGUgc29tZSBMaW51eC1kaXN0cmlidXRpb24gc2hvd2VkIG1lIHF1aXRlIG9mdGVuIHNvbWUgbW9kaWZpZWQKKyAgIGNvZGUsIHdoaWNoIGRpZCBubyBsb25nZXIgd29yayBvbiBtb3N0IG90aGVyIG1hY2hpbmVzIHRoYW4gdGhlIG9uZSBvZiB0aGUKKyAgIG1vZGlmaWVyLiBPaywgc28gbm93IHRoYXQgdGhlcmUgaXMgbWFpbnRlbmFuY2Ugc2VydmljZSBhdmFpbGFibGUgZm9yIHRoaXMKKyAgIGRyaXZlciwgcGxlYXNlIHVzZSB0aGlzIGFkZHJlc3MgZmlyc3QgaW4gb3JkZXIgdG8ga2VlcCB0aGUgbGV2ZWwgb2YKKyAgIGNvbmZ1c2lvbiBsb3cuIFRoYW5rIHlvdSEKKyAgIAorICAgV2hlbiB5b3UgZ2V0IGEgU0NTSS1lcnJvciBtZXNzYWdlIHRoYXQgcGFuaWNzIHlvdXIgc3lzdGVtLCBhIGxpc3Qgb2YKKyAgIHJlZ2lzdGVyLWVudHJpZXMgb2YgdGhlIFNDU0ktc3Vic3lzdGVtIGlzIHNob3duIChmcm9tIFZlcnNpb24gMy4xZCkuIFdpdGggCisgICB0aGlzIGxpc3QsIGl0IGlzIHZlcnkgZWFzeSBmb3IgdGhlIG1haW50YWluZXIgdG8gbG9jYWxpemUgdGhlIHByb2JsZW0gaW4gCisgICB0aGUgZHJpdmVyIG9yIGluIHRoZSBjb25maWd1cmF0aW9uIG9mIHRoZSB1c2VyLiBQbGVhc2Ugd3JpdGUgZG93biBhbGwgdGhlIAorICAgdmFsdWVzIGZyb20gdGhpcyByZXBvcnQgYW5kIHNlbmQgdGhlbSB0byB0aGUgbWFpbnRhaW5lci4gVGhpcyB3b3VsZCByZWFsbHkgCisgICBoZWxwIGEgbG90IGFuZCBtYWtlcyBsaWZlIGVhc2llciBjb25jZXJuaW5nIG1pc3VuZGVyc3RhbmRpbmdzLgorICAgCisgICBVc2UgdGhlIGJ1Zy1yZXBvcnQgZm9ybSAoc2VlIDUuNCBmb3IgaXRzIGFkZHJlc3MpIHRvIHNlbmQgYWxsIHRoZSBidWctCisgICBzdHVmZiB0byB0aGUgbWFpbnRhaW5lciBvciB3cml0ZSBlLW1haWwgd2l0aCB0aGUgdmFsdWVzIGZyb20gdGhlIHRhYmxlLiAKKyAgIAorICAgNS40IFN1cHBvcnQgV1dXLXBhZ2UKKyAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICBUaGUgYWRkcmVzcyBvZiB0aGUgSUJNIFNDU0ktc3Vic3lzdGVtIHN1cHBvcnRpbmcgV1dXLXBhZ2UgaXM6CisgICAKKyAgICAgICAgaHR0cDovL3d3dy51bmktbWFpbnouZGUvfmxhbmdtMDAwL2xpbnV4Lmh0bWwKKwkKKyAgIEhlcmUgeW91IGNhbiBmaW5kIGluZm8gYWJvdXQgdGhlIGJhY2tncm91bmQgb2YgdGhpcyBkcml2ZXIsIHBhdGNoZXMsCisgICB0cm91Ymxlc2hvb3Rpbmcgc3VwcG9ydCwgbmV3cyBhbmQgYSBidWdyZXBvcnQgZm9ybS4gUGxlYXNlIGNoZWNrIHRoYXQKKyAgIFdXVy1wYWdlIHJlZ3VsYXJseSBmb3IgbGF0ZXN0IGhpbnRzLiBJZiBldmVyIHRoaXMgVVJMIGNoYW5nZXMsIHBsZWFzZSAKKyAgIHJlZmVyIHRvIHRoZSBNQUlOVEFJTkVSUyBmaWxlIGluIG9yZGVyIHRvIGdldCB0aGUgbGF0ZXN0IGFkZHJlc3MuCisgICAKKyAgIEZvciB0aGUgYnVncmVwb3J0LCBwbGVhc2UgZmlsbCBvdXQgdGhlIGZvcm11bGFyIG9uIHRoZSBjb3JyZXNwb25kaW5nCisgICBXV1ctcGFnZS4gUmVhZCB0aGUgZGVkaWNhdGVkIGluc3RydWN0aW9ucyBhbmQgd3JpdGUgYXMgbXVjaCBhcyB5b3UKKyAgIGtub3cgYWJvdXQgeW91ciBwcm9ibGVtLiBJZiB5b3UgZG8gbm90IGxpa2Ugc3VjaCBmb3JtdWxhcnMsIHBsZWFzZSBzZW5kCisgICBzb21lIGUtbWFpbCBkaXJlY3RseSwgYnV0IGF0IGxlYXN0IHdpdGggdGhlIHNhbWUgaW5mb3JtYXRpb24gYXMgcmVxdWlyZWQgYnkKKyAgIHRoZSBmb3JtdWxhci4KKyAgIAorICAgSWYgeW91IGhhdmUgZXh0ZW5zaXZlIGJ1Z3JlcG9ydHMsIGluY2x1ZGluZyBPb29wcyBtZXNzYWdlcyBhbmQgCisgICBzY3JlZW4tc2hvdHMsIHBsZWFzZSBmZWVsIGZyZWUgdG8gc2VuZCBpdCBkaXJlY3RseSB0byB0aGUgYWRkcmVzcworICAgb2YgdGhlIG1haW50YWluZXIsIHRvby4gVGhlIGN1cnJlbnQgYWRkcmVzcyBvZiB0aGUgbWFpbnRhaW5lciBpczoKKyAgIAorICAgICAgICAgICAgTWljaGFlbCBMYW5nIDxsYW5nYTJAa3BoLnVuaS1tYWluei5kZT4KKyAgIAorICAgNiBSZWZlcmVuY2VzCisgICAtLS0tLS0tLS0tLS0KKyAgIElCTSBDb3JwLiwgIlVwZGF0ZSBmb3IgdGhlIFBTLzIgSGFyZHdhcmUgSW50ZXJmYWNlIFRlY2huaWNhbCBSZWZlcmVuY2UsIAorICAgQ29tbW9uIEludGVyZmFjZXMiLCBBcm1vbmssIFNlcHRlbWJlciAxOTkxLCBQTiAwNEczMjgxLCAKKyAgIChhdmFpbGFibGUgaW4gdGhlIFUuUy4gZm9yICQyMS43NSBhdCAxLTgwMC1JQk0tUENUQiBvciBpbiBHZXJtYW55IGZvcgorICAgYXJvdW5kIDQwLC1ETSBhdCAiSGFsbG8gSUJNIikuCisgIAorICAgSUJNIENvcnAuLCAiUGVyc29uYWwgU3lzdGVtLzIgTWljcm8gQ2hhbm5lbCBTQ1NJCisgICBBZGFwdGVyIHdpdGggQ2FjaGUgVGVjaG5pY2FsIFJlZmVyZW5jZSIsIEFybW9uaywgTWFyY2ggMTk5MCwgUE4gNjhYMjM2NS4KKworICAgSUJNIENvcnAuLCAiUGVyc29uYWwgU3lzdGVtLzIgTWljcm8gQ2hhbm5lbCBTQ1NJCisgICBBZGFwdGVyIFRlY2huaWNhbCBSZWZlcmVuY2UiLCBBcm1vbmssIE1hcmNoIDE5OTAsIFBOIDY4WDIzOTcuCisKKyAgIElCTSBDb3JwLiwgIlNDU0ktMiBGYXN0L1dpZGUgQWRhcHRlci9BIFRlY2huaWNhbCBSZWZlcmVuY2UgLSBEdWFsIEJ1cyIsCisgICBBcm1vbmssIE1hcmNoIDE5OTQsIFBOIDgzRzc1NDUuCisgCisgICBGcmllZGhlbG0gU2NobWlkdCwgIlNDU0ktQnVzIHVuZCBJREUtU2Nobml0dHN0ZWxsZSAtIE1vZGVybmUgUGVyaXBoZXJpZS0KKyAgIFNjaG5pdHRzdGVsbGVuOiBIYXJkd2FyZSwgUHJvdG9rb2xsYmVzY2hyZWlidW5nIHVuZCBBbndlbmR1bmciLCAyLiBBdWZsLgorICAgQWRkaXNvbiBXZXNsZXksIDE5OTYuCisgICAKKyAgIE1pY2hhZWwgSy4gSm9obnNvbiwgIlRoZSBMaW51eCBLZXJuZWwgSGFja2VycycgR3VpZGUiLCBWZXJzaW9uIDAuNiwgQ2hhcGVsCisgICBIaWxsIC0gTm9ydGggQ2Fyb2xpbmEsIDE5OTUKKyAgIAorICAgQW5kcmVhcyBLYWlzZXIsICJTQ1NJIFRBUEUgQkFDS1VQIGZvciBPUy8yIDIuMCIsIFZlcnNpb24gMi4xMiwgU3R1dHRnYXJ0CisgICAxOTkzCisgICAKKyAgIEhlbG11dCBSb21wZWwsICJJQk0gQ29tcHV0ZXJ3ZWx0IEdVSURFIiwgV2hhdCBpcyB3aGF0IGJlaSBJQk0uLCBTeXN0ZW1lICoKKyAgIFByb2dyYW1tZSAqIEJlZ3JpZmZlLCBJV1QtVmVybGFnIEdtYkggLSBNdWVuY2hlbiwgMTk4OAorICAgCisgICA3IENyZWRpdHMgdG8KKyAgIC0tLS0tLS0tLS0tLQorICAgNy4xIFBlb3BsZQorICAgLS0tLS0tLS0tLQorICAgS2xhdXMgR3JpbW0KKyAgICAgICAgICAgICAgICB3aG8gYWxyZWFkeSBhIGxvbmcgdGltZSBhZ28gZ2F2ZSBtZSB0aGUgb2xkIGNvZGUgZnJvbSB0aGUKKwkJU0NTSS1kcml2ZXIgaW4gb3JkZXIgdG8gZ2V0IGl0IHJ1bm5pbmcgZm9yIHNvbWUgb2xkIG1hY2hpbmUKKwkJaW4gb3VyIGluc3RpdHV0ZS4KKyAgIE1hcnRpbiBLb2xpbmVrCisgICAgICAgICAgICAgICAgd2hvIHdyb3RlIHRoZSBmaXJzdCByZWxlYXNlIG9mIHRoZSBJQk0gU0NTSS1zdWJzeXN0ZW0gZHJpdmVyLgorICAgQ2hyaXMgQmVhdXJlZ2FyZAorICAgICAgICAgICAgICAgIHdobyBmb3IgYSBsb25nIHRpbWUgbWFpbnRhaW5lZCBNQ0EtTGludXggYW5kIHRoZSBTQ1NJLWRyaXZlcgorCQlpbiB0aGUgYmVnaW5uaW5nLiBDaHJpcywgd2hlcmV2ZXIgeW91IGFyZTogQ2hlZXJzIHRvIHlvdSEKKyAgIEtsYXVzIEt1ZGllbGthCisgICAgICAgICAgICAgICAgd2l0aCB3aG9tIGluIHRoZSAyLjEueCB0aW1lcywgSSBoYWQgYSBxdWl0ZSBmcnVpdGZ1bAorICAgICAgICAgICAgICAgIGNvb3BlcmF0aW9uIHRvIGdldCB0aGUgZHJpdmVyIHJ1bm5pbmcgYXMgYSBtb2R1bGUgYW5kIHRvIGdldAorCQlpdCBydW5uaW5nIHdpdGggbXVsdGlwbGUgU0NTSS1hZGFwdGVycy4KKyAgIERhdmlkIFdlaW5laGFsbAorICAgICAgICAgICAgICAgIGZvciBoaXMgZXhjZWxsZW50IG1haW50ZW5hbmNlIG9mIHRoZSBNQ0Etc3R1ZmYgYW5kIHRoZSBxdWl0ZSAKKwkJZGV0YWlsZWQgYnVnIHJlcG9ydHMgYW5kIGlkZWFzIGZvciB0aGlzIGRyaXZlciAoYW5kIGhpcyAKKwkJcGF0aWVuY2UgOy0pKS4KKyAgIEFsYW4gSi4gQ294ICAKKyAgICAgICAgICAgICAgICBmb3IgaGlzIGJ1Z3JlcG9ydHMgYW5kIGhpcyBib2xkIGFjdGl2aXRpZXMgaW4gY3Jvc3MtY2hlY2tpbmcKKwkJdGhlIGRyaXZlci1jb2RlIHdpdGggaGlzIHRlc3RzdGFuZC4KKwkJCisgICA3LjIgU3BvbnNvcnMgJiBTdXBwb3J0ZXJzCisgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAiSGFsbG8gSUJNIiwKKyAgIElCTS1EZXV0c2NobGFuZCBHbWJICisgICAgICAgICAgICAgICAgdGhlIHNlcnZpY2Ugb2YgSUJNLURldXRzY2hsYW5kIGZvciBjdXN0b21lcnMuIFRoZWlyIEUtTWFpbAorCQlzZXJ2aWNlIGlzIHVuYmVhdGFibGUuIFdoYXRldmVyIG9sZCBzdHVmZiBJIGFza2VkIGZvciwgSSAKKwkJYWx3YXlzIGdvdCBzb21lIGhlbHBmdWwgYW5zd2Vycy4KKyAgIEthcmwtT3R0byBSZWltZXJzLAorICAgSUJNIEtsdWIgLSBTcGFydGUgSUJNIEdlc2NoaWNodGUsIFNpbmRlbGZpbmdlbgorICAgICAgICAgICAgICAgIGZvciBzZW5kaW5nIG1lIGEgY29weSBvZiB0aGUgdy9DYWNoZSBtYW51YWwgZnJvbSB0aGUgCisJCUlCTS1EZXV0c2NobGFuZCBhcmNoaXZlcy4KKyAgIEhhcmFsZCBTdGFpZ2VyCisgICAgICAgICAgICAgICAgZm9yIGhpcyBleHRlbnNpdmUgaGFyZHdhcmUgZG9uYXRpb25zIHdoaWNoIGFsbG93cyBtZSB0b2RheQorCQlzdGlsbCB0byB0ZXN0IHRoZSBkcml2ZXIgaW4gdmFyaW91cyBjb25zdGVsbGF0aW9ucy4KKyAgIEVyaWNoIEZyaXRzY2hlcgorICAgICAgICAgICAgICAgIGZvciBoaXMgdmVyeSBraW5kIHNwb25zb3JpbmcuCisgICBMb3VpcyBPaGxhbmQsCisgICBDaGFybGVzIExhc2l0dGVyCisgICAgICAgICAgICAgICAgZm9yIHN1cHBvcnQgYnkgc2hpcHBpbmcgbWUgYW4gSUJNIFNDU0ktMiBGYXN0L1dpZGUgbWFudWFsLgorICAgICAgICAgICAgICAgIEluIGFkZGl0aW9uLCB0aGUgY29udHJpYnV0aW9uIG9mIHZhcmlvdXMgaGFyZHdhcmUgaXMgcXVpdGUgCisgICAgICAgICAgICAgICAgZGVjZXNzaXZlIGFuZCB3aWxsIG1ha2UgaXQgcG9zc2libGUgdG8gYWRkIEZXU1IgKFJBSUQpCisgICAgICAgICAgICAgICAgYWRhcHRlciBzdXBwb3J0IHRvIHRoZSBkcml2ZXIgaW4gdGhlIG5lYXIgZnV0dXJlISBTbywKKyAgICAgICAgICAgICAgICBjb21wbGFpbnRzIGFib3V0IG5vIFJBSUQgc3VwcG9ydCB3b24ndCByZW1haW4gZm9yZXZlci4KKyAgICAgICAgICAgICAgICBZZXMsIGZvbGtzLCB0aGF0IGlzIG5vIGpva2UsIFJBSUQgc3VwcG9ydCBpcyBnb2luZyB0byByaXNlIQorICAgRXJpayBXZWJlcgorICAgICAgICAgICAgICAgIGZvciB0aGUgZ3JlYXQgZGVhbCB3ZSBtYWRlIGFib3V0IGEgbW9kZWwgOTU5NSBhbmQgdGhlIG5pY2UKKyAgICAgICAgICAgICAgICBzdXJyb3VuZGluZyBlcXVpcG1lbnQgYW5kIHRoZSBjb29sIHRyaXAgdG8gTWFubmhlaW0KKyAgICAgICAgICAgICAgICBzZWNvbmQtaGFuZCBjb21wdXRlciBtYXJrZXQuIEluIGFkZGl0aW9uLCBJIHdvdWxkIGxpa2UKKwkJdG8gdGhhbmsgaGltIGZvciBoaXMgZXhoYXVzdGl2ZSBTQ1NJLWRyaXZlciB0ZXN0aW5nIG9uIGhpcyAKKwkJOTVlciBQUy8yIHBhcmsuCisgICBBbnRob255IEhvZ2JpbgorICAgICAgICAgICAgICAgIGZvciBoaXMgZGlyZWN0IHNoaXBtZW50IG9mIGEgU0NTSSBGL1cgYWRhcHRlciwgd2hpY2ggYWxsb3dlZAorICAgICAgICAgICAgICAgIG1lIGltbWVkaWF0ZWx5IG9uIHRoZSBmaXJzdCBzdGFnZSB0byB0cnkgaXQgb24gbW9kZWwgODU1NworICAgICAgICAgICAgICAgIHRvZ2V0aGVyIHdpdGggb25ib2FyZCBTQ1NJIGFkYXB0ZXIgYW5kIHNvbWUgU0NTSSB3L0NhY2hlLgorICAgQW5kcmVhcyBIb3R6CisgICAgICAgICAgICAgICAgZm9yIGhpcyBzdXBwb3J0IGJ5IG1lbW9yeSBhbmQgYW4gSUJNIFNDU0ktYWRhcHRlci4gQ29sbGVjdGluZworICAgICAgICAgICAgICAgIGFsbCB0aGlzIHRvZ2V0aGVyIG5vdyBhbGxvd3MgbWUgdG8gdHJ5IHJlYWxseSB0aGluZ3Mgd2l0aAorICAgICAgICAgICAgICAgIHRoZSBkcml2ZXIgYXQgbWF4aW11bSBsb2FkIGFuZCB2YXJpZXR5IG9uIHZhcmlvdXMgbW9kZWxzIGluCisgICAgICAgICAgICAgICAgYSB2ZXJ5IHF1aWNrIGFuZCBlZmZpY2llbnQgd2F5LgorICAgUGV0ZXIgSmVubmV3ZWluCisgICAgICAgICAgICAgICAgZm9yIGhpcyBtb2RlbCAzMCwgd2hpY2ggc2VydmVzIG1lIGFzIHBhcnQgb2YgbXkgdGVzdHN0YW5kCisJCWFuZCBoaXMgY29vbCByZW1hcmsgYWJvdXQgaG93IHlvdSBtYWtlIGFuIG9yZGluYXJ5IGRpc2tldHRlCisJCWRyaXZlIHdvcmtpbmcgYW5kIGhvdyB0byBjb25uZWN0IGl0IHRvIGFuIElCTS1kaXNrZXR0ZSBwb3J0LgorICAgSm9oYW5uZXMgR3V0ZW5iZXJnLVVuaXZlcnNpdGFldCwgTWFpbnogJgorICAgSW5zdGl0dXQgZnVlciBLZXJucGh5c2lrLCBNYWlueiBNaWNyb3Ryb24gKE1BTUkpCisgICAgICAgICAgICAgICAgZm9yIHRoZSBvZmZlcmVkIHNwYWNlLCB0aGUgbGluaywgcGxhY2VkIG9uIHRoZSBjZW50cmFsCisgICAgICAgICAgICAgICAgaG9tZXBhZ2UgYW5kIHRoZSBzcGFjZSB0byBzdG9yZSBhbmQgb2ZmZXIgdGhlIGRyaXZlciBhbmQgCisJCXJlbGF0ZWQgbWF0ZXJpYWwgYW5kIHRoZSBmcmVlIHdvcmtpbmcgdGltZXMsIHdoaWNoIGFsbG93CisgICAgICAgICAgICAgICAgbWUgdG8gYW5zd2VyIGFsbCB5b3VyIGUtbWFpbC4KKyAgICAgICAgICAgICAgICAgICAKKyAgIDggVHJhZGVtYXJrcworICAgLS0tLS0tLS0tLS0tCisgICBJQk0sIFBTLzIsIE9TLzIsIE1pY3JvY2hhbm5lbCBhcmUgcmVnaXN0ZXJlZCB0cmFkZW1hcmtzIG9mIEludGVybmF0aW9uYWwgCisgICBCdXNpbmVzcyBNYWNoaW5lcyBDb3Jwb3JhdGlvbgorICAgCisgICBNUy1ET1MgaXMgYSByZWdpc3RlcmVkIHRyYWRlbWFyayBvZiBNaWNyb3NvZnQgQ29ycG9yYXRpb24KKyAgIAorICAgTWljcm93YXJlLCBPUy05IGFyZSByZWdpc3RlcmVkIHRyYWRlbWFya3Mgb2YgTWljcm93YXJlIFN5c3RlbXMKKyAgIAorICAgOSBEaXNjbGFpbWVyCisgICAtLS0tLS0tLS0tLS0KKyAgIEJlc2lkZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZSBkZXBlbmRlbnQgZGlzY2xhaW1lcnMgYW5kIGRpc2NsYWltZXJzCisgICBjb25jZXJuaW5nIHRoZSBMaW51eC1rZXJuZWwgaW4gc3BlY2lhbCwgdGhpcyBTQ1NJLWRyaXZlciBjb21lcyB3aXRob3V0IGFueQorICAgd2FycmFudHkuIEl0cyBmdW5jdGlvbmFsaXR5IGlzIHRlc3RlZCBhcyBnb29kIGFzIHBvc3NpYmxlIG9uIGNlcnRhaW4gCisgICBtYWNoaW5lcyBhbmQgY29tYmluYXRpb25zIG9mIGNvbXB1dGVyIGhhcmR3YXJlLCB3aGljaCBkb2VzIG5vdCBleGNsdWRlLAorICAgdGhhdCBkYXRhbG9zcyBvciBzZXZlcmUgZGFtYWdlIG9mIGhhcmR3YXJlIGlzIHBvc3NpYmxlIHdoaWxlIHVzaW5nIHRoaXMKKyAgIHBhcnQgb2Ygc29mdHdhcmUgb24gc29tZSBhcmJpdHJhcnkgY29tcHV0ZXIgaGFyZHdhcmUgb3IgaW4gY29tYmluYXRpb24gCisgICB3aXRoIG90aGVyIHNvZnR3YXJlIHBhY2thZ2VzLiBJdCBpcyBoaWdobHkgcmVjb21tZW5kZWQgdG8gbWFrZSBiYWNrdXAKKyAgIGNvcGllcyBvZiB5b3VyIGRhdGEgYmVmb3JlIHVzaW5nIHRoaXMgc29mdHdhcmUuIEZ1cnRoZXJtb3JlLCBwZXJzb25hbAorICAgaW5qdXJpZXMgYnkgaGFyZHdhcmUgZGVmZWN0cywgdGhhdCBjb3VsZCBiZSBjYXVzZWQgYnkgdGhpcyBTQ1NJLWRyaXZlciBhcmUKKyAgIG5vdCBleGNsdWRlZCBhbmQgaXQgaXMgaGlnaGx5IHJlY29tbWVuZGVkIHRvIGhhbmRsZSB0aGlzIGRyaXZlciB3aXRoIGEKKyAgIG1heGltdW0gb2YgY2FyZWZ1bG5lc3MuCisgICAKKyAgIFRoaXMgZHJpdmVyIHN1cHBvcnRzIGhhcmR3YXJlLCBwcm9kdWNlZCBieSBJbnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVzCisgICBDb3Jwb3JhdGlvbiAoSUJNKS4KKyAgIAorLS0tLS0tCitNaWNoYWVsIExhbmcgCisobGFuZ2EyQGtwaC51bmktbWFpbnouZGUpCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3Njc2kvaW4yMDAwLnR4dCBiL0RvY3VtZW50YXRpb24vc2NzaS9pbjIwMDAudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgwZjEwNDAKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL3Njc2kvaW4yMDAwLnR4dApAQCAtMCwwICsxLDIwMiBAQAorCitVUERBVEUgTkVXUzogdmVyc2lvbiAxLjMzIC0gMjYgQXVnIDk4CisKKyAgIEludGVycnVwdCBtYW5hZ2VtZW50IGluIHRoaXMgZHJpdmVyIGhhcyBiZWNvbWUsIG92ZXIKKyAgIHRpbWUsIGluY3JlYXNpbmdseSBvZGQgYW5kIGRpZmZpY3VsdCB0byBleHBsYWluIC0gdGhpcworICAgaGFzIGJlZW4gbW9zdGx5IGR1ZSB0byBteSBvd24gbWVudGFsIGluYWRlcXVhY2llcy4gSW4KKyAgIHJlY2VudCBrZXJuZWxzLCBpdCBoYXMgZmFpbGVkIHRvIGZ1bmN0aW9uIGF0IGFsbCB3aGVuCisgICBjb21waWxlZCBmb3IgU01QLiBJJ3ZlIGZpeGVkIHRoYXQgcHJvYmxlbSwgYW5kIGFmdGVyCisgICB0YWtpbmcgYSBmcmVzaCBsb29rIGF0IGludGVycnVwdHMgaW4gZ2VuZXJhbCwgZ3JlYXRseQorICAgcmVkdWNlZCB0aGUgbnVtYmVyIG9mIHBsYWNlcyB3aGVyZSB0aGV5J3JlIGZpZGRsZWQKKyAgIHdpdGguIERvbmUgc29tZSBoZWF2eSB0ZXN0aW5nIGFuZCBpdCBsb29rcyB2ZXJ5IGdvb2QuCisgICBUaGUgZHJpdmVyIG5vdyBtYWtlcyB1c2Ugb2YgdGhlIF9faW5pdGZ1bmMoKSBhbmQKKyAgIF9faW5pdGRhdGEgbWFjcm9zIHRvIHNhdmUgYWJvdXQgNGsgb2Yga2VybmVsIG1lbW9yeS4KKyAgIE9uY2UgYWdhaW4sIHRoZSBzYW1lIGNvZGUgd29ya3MgZm9yIGJvdGggMi4wLnh4IGFuZAorICAgMi4xLnh4IGtlcm5lbHMuCisKK1VQREFURSBORVdTOiB2ZXJzaW9uIDEuMzIgLSAyOCBNYXIgOTgKKworICAgUmVtb3ZlZCB0aGUgY2hlY2sgZm9yIGxlZ2FsIElOMjAwMCBoYXJkd2FyZSB2ZXJzaW9uczoKKyAgIEl0IGFwcGVhcnMgdGhhdCB0aGUgZHJpdmVyIHdvcmtzIGZpbmUgd2l0aCBzZXJpYWwKKyAgIEVQUk9NcyAodGhlIDgtcGluIGNoaXAgdGhhdCBkZWZpbmVzIGhhcmR3YXJlIHJldikgYXMKKyAgIG9sZCBhcyAyLjEsIHNvIHdlJ2xsIGFzc3VtZSB0aGF0IGFsbCBjYXJkcyBhcmUgT0suCisKK1VQREFURSBORVdTOiB2ZXJzaW9uIDEuMzEgLSA2IEp1bCA5NworCisgICBGaXhlZCBhIGJ1ZyB0aGF0IGNhdXNlZCBpbmNvcnJlY3QgU0NTSSBzdGF0dXMgYnl0ZXMgdG8gYmUKKyAgIHJldHVybmVkIGZyb20gY29tbWFuZHMgc2VudCB0byBMVU4ncyBncmVhdGVyIHRoYW4gMC4gVGhpcworICAgbWVhbnMgdGhhdCBDRFJPTSBjaGFuZ2VycyB3b3JrIG5vdyEgRml4ZWQgYSBidWcgaW4gdGhlCisgICBoYW5kbGluZyBvZiBjb21tYW5kLWxpbmUgYXJndW1lbnRzIHdoZW4gbG9hZGVkIGFzIGEgbW9kdWxlLgorICAgQWxzbyBwdXQgYWxsIHRoZSBoZWFkZXIgZGF0YSBpbiBpbjIwMDAuaCB3aGVyZSBpdCBiZWxvbmdzLgorICAgVGhlcmUgYXJlIG5vIGxvbmdlciBhbnkgZGlmZmVyZW5jZXMgYmV0d2VlbiB0aGlzIGRyaXZlciBpbgorICAgdGhlIDIuMS54eCBzb3VyY2UgdHJlZSBhbmQgdGhlIDIuMC54eCB0cmVlLCBhcyBvZiAyLjAuMzEKKyAgIGFuZCAyLjEuNDUgKG9yIGlzIGl0IC40Nj8pIC0gdGhpcyBtYWtlcyB0aGluZ3MgbXVjaCBlYXNpZXIKKyAgIGZvciBtZS4uLgorCitVUERBVEUgTkVXUzogdmVyc2lvbiAxLjMwIC0gMTQgT2N0IDk2CisKKyAgIEZpeGVkIGEgYnVnIGluIHRoZSBjb2RlIHRoYXQgc2V0cyB0aGUgdHJhbnNmZXIgZGlyZWN0aW9uCisgICBiaXQgKERFU1RJRF9EUEQgaW4gdGhlIFdEX0RFU1RJTkFUSU9OX0lEIHJlZ2lzdGVyKS4gVGhlcmUKKyAgIGFyZSBxdWl0ZSBhIGZldyBTQ1NJIGNvbW1hbmRzIHRoYXQgZG8gYSB3cml0ZS10by1kZXZpY2U7CisgICBub3cgd2UgZGVhbCB3aXRoIGFsbCBvZiB0aGVtIGNvcnJlY3RseS4gVGhhbmtzIHRvIEpvZXJnCisgICBEb3JjaGFpbiBmb3IgY2F0Y2hpbmcgdGhpcyBvbmUuCisKK1VQREFURSBORVdTOiB2ZXJzaW9uIDEuMjkgLSAyNCBTZXAgOTYKKworICAgVGhlIG1lbW9yeS1tYXBwZWQgaGFyZHdhcmUgb24gdGhlIGNhcmQgaXMgbm93IGFjY2Vzc2VkIHZpYQorICAgdGhlICdyZWFkYigpJyBhbmQgJ3JlYWRsKCknIG1hY3JvcyAtIHJlcXVpcmVkIGJ5IHRoZSBuZXcKKyAgIG1lbW9yeSBtYW5hZ2VtZW50IHNjaGVtZSBpbiB0aGUgMi4xLngga2VybmVsIHNlcmllcy4KKyAgIEFzIHN1Z2dlc3RlZCBieSBBbmRyaWVzIEJyb3V3ZXIsICdiaW9zX3BhcmFtKCknIG5vIGxvbmdlcgorICAgZm9yY2VzIGFuIGFydGlmaWNpYWwgMTAyMyB0cmFjayBsaW1pdCBvbiBkcml2ZXMuIEFsc28KKyAgIHJlbW92ZWQgc29tZSBrbHVkZ2UtY29kZSBsZWZ0IG92ZXIgZnJvbSBzdHJ1Z2dsZXMgd2l0aAorICAgb2xkZXIgKGJ1Z2d5KSBjb21waWxlcnMuCisKK1VQREFURSBORVdTOiB2ZXJzaW9uIDEuMjggLSAwNyBNYXkgOTYKKworICAgVGlnaHRlbmVkIHVwIHRoZSAiaW50ZXJydXB0cyBlbmFibGVkL2Rpc2FibGVkIiBkaXNjaXBsaW5lCisgICBpbiAnaW4yMDAwX3F1ZXVlY29tbWFuZCgpJyBhbmQgbWF5YmUgMSBvciAyIG90aGVyIHBsYWNlcy4KKyAgIEkgX3RoaW5rXyBpdCBtYXkgaGF2ZSBiZWVuIGEgbGl0dGxlIHRvbyBsYXgsIGNhdXNpbmcgYW4KKyAgIG9jY2FzaW9uYWwgY3Jhc2ggZHVyaW5nIGZ1bGwgbW9vbi4gQSBmdWxseSBmdW5jdGlvbmFsCisgICAvcHJvYyBpbnRlcmZhY2UgaXMgbm93IGluIHBsYWNlIC0gaWYgeW91IHdhbnQgdG8gcGxheQorICAgd2l0aCBpdCwgc3RhcnQgYnkgZG9pbmcgJ2NhdCAvcHJvYy9zY3NpL2luMjAwMC8wJy4gWW91CisgICBjYW4gYWxzbyB1c2UgaXQgdG8gY2hhbmdlIGEgZmV3IHJ1bi10aW1lIHBhcmFtZXRlcnMgb24KKyAgIHRoZSBmbHksIGJ1dCBpdCdzIG1vc3RseSBmb3IgZGVidWdnaW5nLiBUaGUgY3VyaW91cworICAgc2hvdWxkIHRha2UgYSBnb29kIGxvb2sgYXQgJ2luMjAwMF9wcm9jX2luZm8oKScgaW4gdGhlCisgICBpbjIwMDAuYyBmaWxlIHRvIGdldCBhbiB1bmRlcnN0YW5kaW5nIG9mIHdoYXQgaXQncyBhbGwKKyAgIGFib3V0OyBJIGZpZ3VyZSB0aGF0IHBlb3BsZSB3aG8gYXJlIHJlYWxseSBpbnRvIGl0IHdpbGwKKyAgIHdhbnQgdG8gYWRkIGZlYXR1cmVzIHN1aXRlZCB0byB0aGVpciBvd24gbmVlZHMuLi4KKyAgIEFsc28sIHN5bmMgaXMgbm93IERJU0FCTEVEIGJ5IGRlZmF1bHQuCisKK1VQREFURSBORVdTOiB2ZXJzaW9uIDEuMjcgLSAxMCBBcHIgOTYKKworICAgRml4ZWQgYSB3ZWxsLWhpZGRlbiBidWcgaW4gdGhlIGFkYXB0aXZlLWRpc2Nvbm5lY3QgY29kZQorICAgdGhhdCB3b3VsZCBzaG93IHVwIGV2ZXJ5IG5vdyBhbmQgdGhlbiBkdXJpbmcgZXh0cmVtZQorICAgaGVhdnkgbG9hZHMgaW52b2x2aW5nIDIgb3IgbW9yZSBzaW11bHRhbmVvdXNseSBhY3RpdmUKKyAgIGRldmljZXMuIFRoYW5rcyB0byBKb2UgTWFjayBmb3Iga2VlcGluZyBteSBub3NlIHRvIHRoZQorICAgZ3JpbmRzdG9uZSBvbiB0aGlzIG9uZS4KKworVVBEQVRFIE5FV1M6IHZlcnNpb24gMS4yNiAtIDA3IE1hciA5NgorCisgICAxLjI1IGhhZCBhIG5hc3R5IGJ1ZyB0aGF0IGJpdCBwZW9wbGUgd2l0aCBzd2FwIHBhcnRpdGlvbnMKKyAgIGFuZCB0YXBlIGRyaXZlcy4gQWxzbywgaW4gbXkgYXR0ZW1wdCB0byBndWVzcyBteSB3YXkKKyAgIHRocm91Z2ggSW50ZWwgYXNzZW1ibHkgbGFuZ3VhZ2UsIEkgbWFkZSBhbiBlcnJvciBpbiB0aGUKKyAgIGlubGluZSBjb2RlIGZvciBJTyB3cml0ZXMuIE1hZGUgYSBmZXcgb3RoZXIgY2hhbmdlcyBhbmQKKyAgIHJlcGFpcnMgLSB0aGlzIHZlcnNpb24gKGZpbmdlcnMgY3Jvc3NlZCkgc2hvdWxkIHdvcmsgd2VsbC4KKworVVBEQVRFIE5FV1M6IHZlcnNpb24gMS4yNSAtIDA1IE1hciA5NgorCisgICBLZXJuZWwgMS4zLjcwIGludGVycnVwdCBtb2RzIGFkZGVkOyBvbGQga2VybmVscyBzdGlsbCBPSy4KKyAgIEJpZyBoZWxwIGZyb20gQmlsbCBFYXJuZXN0IGFuZCBEYXZpZCBXaWxsbW9yZSBvbiBzcGVlZAorICAgdGVzdGluZyBhbmQgb3B0aW1pemluZzogSSB0aGluayB0aGVyZSdzIGEgcmVhbCBpbXByb3ZlbWVudAorICAgaW4gdGhpcyBhcmVhLgorICAgTmV3ISBVc2VyLWZyaWVuZGx5IGNvbW1hbmQtbGluZSBpbnRlcmZhY2UgZm9yIExJTE8gYW5kCisgICBtb2R1bGUgbG9hZGluZyAtIHRoZSBvbGQgbWV0aG9kIGlzIGdvbmUsIHNvIHlvdSdsbCBuZWVkCisgICB0byByZWFkIHRoZSBjb21tZW50cyBmb3IgJ3NldHVwX3N0cmluZ3MnIG5lYXIgdGhlIHRvcAorICAgb2YgaW4yMDAwLmMuIEZvciBwZW9wbGUgd2l0aCBDRFJPTSdzIG9yIG90aGVyIGRldmljZXMKKyAgIHRoYXQgaGF2ZSBhIHRvdWdoIHRpbWUgd2l0aCBzeW5jIG5lZ290aWF0aW9uLCB5b3UgY2FuCisgICBub3cgc2VsZWN0aXZlbHkgZGlzYWJsZSBzeW5jIG9uIGluZGl2aWR1YWwgZGV2aWNlcyAtCisgICBzZWFyY2ggZm9yIHRoZSAnbm9zeW5jJyBrZXl3b3JkIGluIHRoZSBjb21tYW5kLWxpbmUKKyAgIGNvbW1lbnRzLiBTb21lIG9mIHlvdSBkaXNhYmxlIHRoZSBCSU9TIG9uIHRoZSBjYXJkLCB3aGljaAorICAgY2F1c2VkIHRoZSBhdXRvLWRldGVjdCBmdW5jdGlvbiB0byBmYWlsOyB0aGVyZSBpcyBub3cgYQorICAgY29tbWFuZC1saW5lIG9wdGlvbiB0byBmb3JjZSBkZXRlY3Rpb24gb2YgYSBST00tbGVzcyBjYXJkLgorCitVUERBVEUgTkVXUzogdmVyc2lvbiAxLjI0YSAtIDI0IEZlYiA5NgorCisgICBUaGVyZSB3YXMgYSBidWcgaW4gdGhlIHN5bmNocm9ub3VzIHRyYW5zZmVyIGNvZGUuIE9ubHkKKyAgIGEgZmV3IHBlb3BsZSBkb3dubG9hZGVkIGJlZm9yZSBJIGNhdWdodCBpdCAtIGNvdWxkIGhhdmUKKyAgIGJlZW4gd29yc2UuCisKK1VQREFURSBORVdTOiB2ZXJzaW9uIDEuMjQgLSAyMyBGZWIgOTYKKworICAgTG90cyBvZiBnb29kIGNoYW5nZXMuIEFkdmljZSBmcm9tIEJpbGwgRWFybmVzdCByZXN1bHRlZAorICAgaW4gbXVjaCBiZXR0ZXIgZGV0ZWN0aW9uIG9mIGNhcmRzLCBtb3JlIGVmZmljaWVudCB1c2FnZQorICAgb2YgdGhlIGZpZm8sIGFuZCAoaG9wZWZ1bGx5KSBmYXN0ZXIgZGF0YSB0cmFuc2ZlcnMuIFRoZQorICAganVyeSBpcyBzdGlsbCBvdXQgb24gc3BlZWQgLSBJIGhvcGUgaXQncyBpbXByb3ZlZCBzb21lLgorICAgT25lIG5pZnR5IG5ldyBmZWF0dXJlIGlzIGEgY29vbCB3YXkgb2YgZG9pbmcgZGlzY29ubmVjdC8KKyAgIHJlc2VsZWN0LiBUaGUgZHJpdmVyIGRlZmF1bHRzIHRvIHdoYXQgSSdtIGNhbGxpbmcKKyAgICdhZGFwdGl2ZSBkaXNjb25uZWN0JyAtIG1lYW5pbmcgdGhhdCBlYWNoIGNvbW1hbmQgaXMKKyAgIGV2YWx1YXRlZCBpbmRpdmlkdWFsbHkgYXMgdG8gd2hldGhlciBvciBub3QgaXQgc2hvdWxkIGJlCisgICBydW4gd2l0aCB0aGUgb3B0aW9uIHRvIGRpc2Nvbm5lY3QvcmVzZWxlY3QgKGlmIHRoZSBkZXZpY2UKKyAgIGNob29zZXMpLCBvciBhcyBhICJTQ1NJLWJ1cy1ob2ciLiBXaGVuIHNldmVyYWwgZGV2aWNlcworICAgYXJlIG9wZXJhdGluZyBzaW11bHRhbmVvdXNseSwgZGlzY29ubmVjdHMgYXJlIHVzdWFsbHkgYW4KKyAgIGFkdmFudGFnZS4gSW4gYSBzaW5nbGUgZGV2aWNlIHN5c3RlbSwgb3IgaWYgb25seSAxIGRldmljZQorICAgaXMgYmVpbmcgYWNjZXNzZWQsIHRyYW5zZmVycyB1c3VhbGx5IGdvIGZhc3RlciBpZiBkaXNjb25uZWN0cworICAgYXJlIG5vdCBhbGxvd2VkLgorCisKKworVGhlIGRlZmF1bHQgYXJndW1lbnRzICh5b3UgZ2V0IHRoZXNlIHdoZW4geW91IGRvbid0IGdpdmUgYW4gJ2luMjAwMCcKK2NvbW1hbmQtbGluZSBhcmd1bWVudCwgb3IgeW91IGdpdmUgYSBibGFuayBhcmd1bWVudCkgd2lsbCBjYXVzZQordGhlIGRyaXZlciB0byBkbyBhZGFwdGl2ZSBkaXNjb25uZWN0LCBzeW5jaHJvbm91cyB0cmFuc2ZlcnMsIGFuZCBhCittaW5pbXVtIG9mIGRlYnVnIG1lc3NhZ2VzLiBJZiB5b3Ugd2FudCB0byBmb29sIHdpdGggdGhlIG9wdGlvbnMsCitzZWFyY2ggZm9yICdzZXR1cF9zdHJpbmdzJyBuZWFyIHRoZSB0b3Agb2YgdGhlIGluMjAwMC5jIGZpbGUgYW5kCitjaGVjayB0aGUgJ2hvc3RkYXRhLT5hcmdzJyBzZWN0aW9uIGluIGluMjAwMC5oIC0gYnV0IGJlIHdhcm5lZCEgTm90CitldmVyeXRoaW5nIGlzIHdvcmtpbmcgeWV0IChzb21lIHRoaW5ncyB3aWxsIG5ldmVyIHdvcmssIHByb2JhYmx5KS4KK0kgYmVsaWV2ZSB0aGF0IGRpc2FibGluZyBkaXNjb25uZWN0cyAoRElTX05FVkVSKSB3aWxsIGFsbG93IHlvdQordG8gY2hvb3NlIGEgTEVWRUwyIHZhbHVlIGhpZ2hlciB0aGFuICdMMl9CQVNJQycsIGJ1dCBJIGhhdmVuJ3QKK3NwZW50IGEgbG90IG9mIHRpbWUgdGVzdGluZyB0aGlzLiBZb3UgbWlnaHQgdHJ5ICdFTkFCTEVfQ0xVU1RFUklORycKK3RvIHNlZSB3aGF0IGhhcHBlbnM6IG15IHRlc3RzIHNob3dlZCBsaXR0bGUgZGlmZmVyZW5jZSBlaXRoZXIgd2F5LgorVGhlcmUncyBhbHNvIGEgZGVmaW5lIGNhbGxlZCAnREVGQVVMVF9TWF9QRVInOyB0aGlzIHNldHMgdGhlIGRhdGEKK3RyYW5zZmVyIHNwZWVkIGZvciB0aGUgYXN5bmNocm9ub3VzIG1vZGUuIEkndmUgcHV0IGl0IGF0IDUwMCBucworZGVzcGl0ZSB0aGUgZmFjdCB0aGF0IHRoZSBjYXJkIGNvdWxkIGhhbmRsZSBzZXR0aW5ncyBvZiAzNzYgb3IKKzI1MiwgYmVjYXVzZSBoaWdoZXIgc3BlZWRzIG1heSBiZSBhIHByb2JsZW0gd2l0aCBwb29yIHF1YWxpdHkKK2NhYmxlcyBvciBpbXByb3BlciB0ZXJtaW5hdGlvbjsgNTAwIG5zIGlzIGEgY29tcHJvbWlzZS4gWW91IGNhbgorY2hvb3NlIHlvdXIgb3duIGRlZmF1bHQgdGhyb3VnaCB0aGUgY29tbWFuZC1saW5lIHdpdGggdGhlCisncGVyaW9kJyBrZXl3b3JkLgorCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKioqKioqKioqKiogIERJUCBzd2l0Y2ggc2V0dGluZ3MgICoqKioqKioqKioqKioqCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgc3cxLTEgc3cxLTIgICAgQklPUyBhZGRyZXNzIChoZXgpCisgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIG9mZiAgIG9mZiAgICAgQzgwMDAgLSBDQkZGMAorICAgIG9uICAgIG9mZiAgICAgRDgwMDAgLSBEQkZGMAorICAgIG9mZiAgIG9uICAgICAgRDAwMDAgLSBEM0ZGMAorICAgIG9uICAgIG9uICAgICAgQklPUyBkaXNhYmxlZAorCisgICBzdzEtMyBzdzEtNCAgICBJTyBwb3J0IGFkZHJlc3MgKGhleCkKKyAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIG9mZiAgIG9mZiAgICAgMjIwIC0gMjJGCisgICAgb24gICAgb2ZmICAgICAyMDAgLSAyMEYKKyAgICBvZmYgICBvbiAgICAgIDExMCAtIDExRgorICAgIG9uICAgIG9uICAgICAgMTAwIC0gMTBGCisKKyAgIHN3MS01IHN3MS02IHN3MS03ICAgIEludGVycnVwdAorICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgb2ZmICAgb2ZmICAgb2ZmICAgICAxNQorICAgIG9mZiAgIG9uICAgIG9mZiAgICAgMTQKKyAgICBvZmYgICBvZmYgICBvbiAgICAgIDExCisgICAgb2ZmICAgb24gICAgb24gICAgICAxMAorICAgIG9uICAgIC0gICAgIC0gICAgICAgZGlzYWJsZWQKKworICAgc3cxLTggZnVuY3Rpb24gZGVwZW5kcyBvbiBCSU9TIHZlcnNpb24uIEluIGVhcmxpZXIgdmVyc2lvbnMgdGhpcworICAgY29udHJvbGxlZCBzeW5jaHJvbm91cyBkYXRhIHRyYW5zZmVyIHN1cHBvcnQgZm9yIE1TRE9TOgorICAgICAgb2ZmID0gZGlzYWJsZWQKKyAgICAgIG9uICA9IGVuYWJsZWQKKyAgIEluIGxhdGVyIFJPTXMgKHN0YXJ0aW5nIHdpdGggMDEuMyBpbiBBcHJpbCAxOTk0KSBzdzEtOCBjb250cm9scworICAgdGhlICJncmVhdGVyIHRoYW4gMiBkaXNrIGRyaXZlIiBmZWF0dXJlIHRoYXQgZmlyc3QgYXBwZWFyZWQgaW4KKyAgIE1TRE9TIDUuMCAoaWdub3JlZCBieSBMaW51eCk6CisgICAgICBvZmYgPSAyIGRyaXZlcyBtYXhpbXVtCisgICAgICBvbiAgPSA3IGRyaXZlcyBtYXhpbXVtCisKKyAgIHN3MS05ICAgIEZsb3BweSBjb250cm9sbGVyCisgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIG9mZiAgICAgZGlzYWJsZWQKKyAgICBvbiAgICAgIGVuYWJsZWQKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgIEkgc2hvdWxkIG1lbnRpb24gdGhhdCBEcmV3IEVja2hhcmR0J3MgJ0dlbmVyaWMgTkNSNTM4MCcgc291cmNlcworICAgd2VyZSBteSBtYWluIGluc3BpcmF0aW9uLCB3aXRoIGxvdHMgb2YgcmVmZXJlbmNlIHRvIHRoZSBJTjIwMDAKKyAgIGRyaXZlciBjdXJyZW50bHkgZGlzdHJpYnV0ZWQgaW4gdGhlIGtlcm5lbCBzb3VyY2UuIEkgYWxzbyBvd2UKKyAgIG11Y2ggdG8gYSBkcml2ZXIgd3JpdHRlbiBieSBIYW1pc2ggTWFjZG9uYWxkIGZvciBMaW51eC1tNjhrKCEpLgorICAgQW5kIHRvIEVyaWMgV3JpZ2h0IGZvciBiZWluZyBhbiBBTFBIQSBndWluZWEgcGlnLiBBbmQgdG8gQmlsbAorICAgRWFybmVzdCBmb3IgMiB0b25zIG9mIGdyZWF0IGlucHV0IGFuZCBpbmZvcm1hdGlvbi4gQW5kIHRvIERhdmlkCisgICBXaWxsbW9yZSBmb3IgZXh0ZW5zaXZlICdib25uaWUnIHRlc3RpbmcuIEFuZCB0byBKb2UgTWFjayBmb3IKKyAgIGNvbnRpbnVhbCB0ZXN0aW5nIGFuZCBmZWVkYmFjay4KKworCisgICAgICAgICAgICBKb2huIFNoaWZmbGV0dCAgICBqc2hpZmZsZUBuZXRjb20uY29tCisKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vc2NzaS9tZWdhcmFpZC50eHQgYi9Eb2N1bWVudGF0aW9uL3Njc2kvbWVnYXJhaWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZmODY0YzAKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL3Njc2kvbWVnYXJhaWQudHh0CkBAIC0wLDAgKzEsNzAgQEAKKwkJCU5vdGVzIG9uIE1hbmFnZW1lbnQgTW9kdWxlCisJCQl+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorCitPdmVydmlldzoKKy0tLS0tLS0tCisKK0RpZmZlcmVudCBjbGFzc2VzIG9mIGNvbnRyb2xsZXJzIGZyb20gTFNJIExvZ2ljLCBhY2NlcHQgYW5kIHJlc3BvbmQgdG8gdGhlCit1c2VyIGFwcGxpY2F0aW9ucyBpbiBhIHNpbWlsYXIgd2F5LiBUaGV5IHVuZGVyc3RhbmQgdGhlIHNhbWUgZmlybXdhcmUgY29udHJvbAorY29tbWFuZHMuIEZ1cnRoZXJtb3JlLCB0aGUgYXBwbGljYXRpb25zIGFsc28gY2FuIHRyZWF0IGRpZmZlcmVudCBjbGFzc2VzIG9mCit0aGUgY29udHJvbGxlcnMgdW5pZm9ybWx5LiBIZW5jZSBpdCBpcyBsb2dpY2FsIHRvIGhhdmUgYSBzaW5nbGUgbW9kdWxlIHRoYXQKK2ludGVyZWZhY2VzIHdpdGggdGhlIGFwcGxpY2F0aW9ucyBvbiBvbmUgc2lkZSBhbmQgYWxsIHRoZSBsb3cgbGV2ZWwgZHJpdmVycworb24gdGhlIG90aGVyLgorCitUaGUgYWR2YW50YWdlcywgdGhvdWdoIG9idmlvdXMsIGFyZSBsaXN0ZWQgZm9yIGNvbXBsZXRlbmVzczoKKworCWkuCUF2b2lkIGR1cGxpY2F0ZSBjb2RlIGZyb20gdGhlIGxvdyBsZXZlbCBkcml2ZXJzLgorCWlpLglVbmJ1cmRlbiB0aGUgbG93IGxldmVsIGRyaXZlcnMgZnJvbSBoYXZpbmcgdG8gZXhwb3J0IHRoZQorCQljaGFyYWN0ZXIgbm9kZSBkZXZpY2UgYW5kIHJlbGF0ZWQgaGFuZGxpbmcuCisJaWlpLglJbXBsZW1lbnQgYW55IHBvbGljeSBtZWNoYW5pc21zIGluIG9uZSBwbGFjZS4KKwlpdi4JQXBwbGljYXRpb25zIGhhdmUgdG8gaW50ZXJmYWNlIHdpdGggb25seSBtb2R1bGUgaW5zdGVhZCBvZgorCQltdWx0aXBsZSBsb3cgbGV2ZWwgZHJpdmVycy4KKworQ3VycmVudGx5IHRoaXMgbW9kdWxlIChjYWxsZWQgQ29tbW9uIE1hbmFnZW1lbnQgTW9kdWxlKSBpcyB1c2VkIG9ubHkgdG8gaXNzdWUKK2lvY3RsIGNvbW1hbmRzLiBCdXQgdGhpcyBtb2R1bGUgaXMgZW52aXNpb25lZCB0byBoYW5kbGUgYWxsIHVzZXIgc3BhY2UgbGV2ZWwKK2ludGVyYWN0aW9ucy4gU28gYW55ICdwcm9jJywgJ3N5c2ZzJyBpbXBsZW1lbnRhdGlvbnMgd2lsbCBiZSBsb2NhbGl6ZWQgaW4gdGhpcworY29tbW9uIG1vZHVsZS4KKworQ3JlZGl0czoKKy0tLS0tLS0KKworIlNoYXJlZCBjb2RlIGluIGEgdGhpcmQgbW9kdWxlLCBhICJsaWJyYXJ5IG1vZHVsZSIsIGlzIGFuIGFjY2VwdGFibGUKK3NvbHV0aW9uLiBtb2Rwcm9iZSBhdXRvbWF0aWNhbGx5IGxvYWRzIGRlcGVuZGVudCBtb2R1bGVzLCBzbyB1c2VycworcnVubmluZyAibW9kcHJvYmUgZHJpdmVyMSIgb3IgIm1vZHByb2JlIGRyaXZlcjIiIHdvdWxkIGF1dG9tYXRpY2FsbHkKK2xvYWQgdGhlIHNoYXJlZCBsaWJyYXJ5IG1vZHVsZS4iCisKKwkJLSBKZWZmIEdhcnppayAoamdhcnppa0Bwb2JveC5jb20pLCAwMi4yNS4yMDA0IExLTUwKKworIkFzIEplZmYgaGludGVkLCBpZiB5b3VyIHVzZXJzcGFjZTwtPmRyaXZlciBBUEkgaXMgY29uc2lzdGVudCBiZXR3ZWVuCit5b3VyIG5ldyBNUFQtYmFzZWQgUkFJRCBjb250cm9sbGVycyBhbmQgeW91ciBleGlzdGluZyBtZWdhcmFpZCBkcml2ZXIsCit0aGVuIHBlcmhhcHMgeW91IG5lZWQgYSBzaW5nbGUgc21hbGwgaGVscGVyIG1vZHVsZSAobHNpaW9jdGwgb3Igc29tZQorYmV0dGVyIG5hbWUpLCBsb2FkZWQgYnkgYm90aCBtcHRyYWlkIGFuZCBtZWdhcmFpZCBhdXRvbWF0aWNhbGx5LCB3aGljaAoraGFuZGxlcyByZWdpc3RlcmluZyB0aGUgL2Rldi9tZWdhcmFpZCBub2RlIGR5bmFtaWNhbGx5LiBJbiB0aGlzIGNhc2UsCitib3RoIG1wdHJhaWQgYW5kIG1lZ2FyYWlkIHdvdWxkIHJlZ2lzdGVyIHdpdGggbHNpaW9jdGwgZm9yIGVhY2gKK2FkYXB0ZXIgZGlzY292ZXJlZCwgYW5kIGxzaWlvY3RsIHdvdWxkIGVzc2VudGlhbGx5IGJlIGEgc3dpdGNoLAorcmVkaXJlY3RpbmcgdXNlcnNwYWNlIHRvb2wgaW9jdGxzIHRvIHRoZSBhcHByb3ByaWF0ZSBkcml2ZXIuIgorCisJCS0gTWF0dCBEb21zY2gsIChNYXR0X0RvbXNjaEBkZWxsLmNvbSksIDAyLjI1LjIwMDQgTEtNTAorCitEZXNpZ246CistLS0tLS0KKworVGhlIENvbW1vbiBNYW5hZ2VtZW50IE1vZHVsZSBpcyBpbXBsZW1lbnRlZCBpbiBtZWdhcmFpZF9tbS5bY2hdIGZpbGVzLiBUaGlzCittb2R1bGUgYWN0cyBhcyBhIHJlZ2lzdHJ5IGZvciBsb3cgbGV2ZWwgaGJhIGRyaXZlcnMuIFRoZSBsb3cgbGV2ZWwgZHJpdmVycworKGN1cnJlbnRseSBvbmx5IG1lZ2FyYWlkKSByZWdpc3RlciBlYWNoIGNvbnRyb2xsZXIgd2l0aCB0aGUgY29tbW9uIG1vZHVsZS4KKworVGhlIGFwcGxpY2F0aW9ucyBpbnRlcmZhY2Ugd2l0aCB0aGUgY29tbW9uIG1vZHVsZSB2aWEgdGhlIGNoYXJhY3RlciBkZXZpY2UKK25vZGUgZXhwb3J0ZWQgYnkgdGhlIG1vZHVsZS4KKworVGhlIGxvd2VyIGxldmVsIGRyaXZlcnMgbm93IHVuZGVyc3RhbmQgb25seSBhIG5ldyBpbXByb3ZlZCBpb2N0bCBwYWNrZXQgY2FsbGVkCit1aW9jX3QuIFRoZSBtYW5hZ2VtZW50IG1vZHVsZSBjb252ZXJ0cyB0aGUgb2xkZXIgaW9jdGwgcGFja2V0cyBmcm9tIHRoZSBvbGRlcgorYXBwbGljYXRpb25zIGludG8gdWlvY190LiBBZnRlciBkcml2ZXIgaGFuZGxlcyB0aGUgdWlvY190LCB0aGUgY29tbW9uIG1vZHVsZQord2lsbCBjb252ZXJ0IHRoYXQgYmFjayBpbnRvIHRoZSBvbGQgZm9ybWF0IGJlZm9yZSByZXR1cm5pbmcgdG8gYXBwbGljYXRpb25zLgorCitBcyBuZXcgYXBwbGljYXRpb25zIGV2b2x2ZSBhbmQgcmVwbGFjZSB0aGUgb2xkIG9uZXMsIHRoZSBvbGQgcGFja2V0IGZvcm1hdCAKK3dpbGwgYmUgcmV0aXJlZC4KKworQ29tbW9uIG1vZHVsZSBkZWRpY2F0ZXMgb25lIHVpb2NfdCBwYWNrZXQgdG8gZWFjaCBjb250cm9sbGVyIHJlZ2lzdGVyZWQuIFRoaXMKK2NhbiBlYXNpbHkgYmUgbW9yZSB0aGFuIG9uZS4gQnV0IHNpbmNlIG1lZ2FyYWlkIGlzIHRoZSBvbmx5IGxvdyBsZXZlbCBkcml2ZXIKK3RvZGF5LCBhbmQgaXQgY2FuIGhhbmRsZSBvbmx5IG9uZSBpb2N0bCwgdGhlcmUgaXMgbm8gcmVhc29uIHRvIGhhdmUgbW9yZS4gQnV0CithcyBuZXcgY29udHJvbGxlciBjbGFzc2VzIGdldCBhZGRlZCwgdGhpcyB3aWxsIGJlIHR1bmVkIGFwcHJvcHJpYXRlbHkuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3Njc2kvbmNyNTNjN3h4LnR4dCBiL0RvY3VtZW50YXRpb24vc2NzaS9uY3I1M2M3eHgudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkxZTk1NTIKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL3Njc2kvbmNyNTNjN3h4LnR4dApAQCAtMCwwICsxLDQwIEBACitSRUFETUUgZm9yIFdhcnBFbmdpbmUvQTQwMDBUL0E0MDkxIFNDU0kga2VybmVscy4KKworVXNlIHRoZSBmb2xsb3dpbmcgb3B0aW9ucyB0byBkaXNhYmxlIG9wdGlvbnMgaW4gdGhlIFNDU0kgZHJpdmVyLgorCitVc2luZyBhbWlib290IGZvciBleGFtcGxlLi4uLi4KKworVG8gZGlzYWJsZSBTeW5jaHJvbm91cyBOZWdvdGlhdGlvbi4uLi4KKworCWFtaWJvb3QgLWsga2VybmVsIDUzYzd4eD1ub3N5bmM6MAkKKworVG8gZGlzYWJsZSBEaXNjb25uZWN0aW9uLi4uLgorCQorCWFtaWJvb3QgLWsga2VybmVsIDUzYzd4eD1ub2Rpc2Nvbm5lY3Q6MAorCitUbyBkaXNhYmxlIGNlcnRhaW4gU0NTSSBkZXZpY2VzLi4uCisKKwlhbWlib290IC1rIGtlcm5lbCA1M2M3eHg9dmFsaWRpZHM6MHgzRgorCisJdGhpcyBhbGxvd3Mgb25seSBkZXZpY2UgSUQncyAwLDEsMiwzLDQgYW5kIDUgZm9yIGxpbnV4IHRvIGhhbmRsZS4KKwkodGhpcyBpcyBhIGJpdG1hc2tlZCBmaWVsZCAtIGkuZS4gZWFjaCBiaXQgcmVwcmVzZW50cyBhIFNDU0kgSUQpCisKK1RoZXNlIGNvbW1hbmRzIHdvcmsgb24gYSBwZXIgY29udHJvbGxlciBiYXNpcyBhbmQgdXNlIHRoZSBvcHRpb24gJ25leHQnIHRvCittb3ZlIHRvIHRoZSBuZXh0IGNvbnRyb2xsZXIgaW4gdGhlIHN5c3RlbS4KKworZS5nLgorCWFtaWJvb3QgLWsga2VybmVsIDUzYzd4eD1ub2Rpc2Nvbm5lY3Q6MCxuZXh0LG5vc3luYzowCisKKwl0aGlzIHVzZXMgTm8gRGlzY29ubmVjdGlvbiBvbiB0aGUgZmlyc3QgY29udHJvbGxlciBhbmQgQXN5bmNocm9ub3VzCisJU0NTSSBvbiB0aGUgc2Vjb25kIGNvbnRyb2xsZXIuCisKK0tub3duIElzc3VlczoKKworVHdvIGRldmljZXMgYXJlIGtub3duIG5vdCB0byBmdW5jdGlvbiB3aXRoIHRoZSBkZWZhdWx0IHNldHRpbmdzIG9mIHVzaW5nCitzeW5jaHJvbm91cyBTQ1NJLiBUaGVzZSBhcmUgdGhlIEFyY2hpdmUgVmlwZXIgMTUwIFRhcGUgRHJpdmUgYW5kIHRoZSAKK1N5UXVlc3QgU1E1NTUgcmVtb3ZlYWJsZSBoYXJkIGRyaXZlLiBXaGVuIHVzaW5nIHRoZXNlIGRldmljZXMgb24gYSBjb250cm9sbGVyCit1c2UgdGhlICdub3N5bmM6MCcgb3B0aW9uLgorCitQbGVhc2UgdHJ5IHRoZXNlIG9wdGlvbnMgYW5kIHBvc3QgYW55IHByb2JsZW1zL3N1Y2Nlc3NlcyB0byBtZS4KKworQWxhbiBIb3VyaWhhbmUgPGFsYW5oQGZhaXJsaXRlLmRlbW9uLmNvLnVrPgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9zY3NpL25jcjUzYzh4eC50eHQgYi9Eb2N1bWVudGF0aW9uL3Njc2kvbmNyNTNjOHh4LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MjJkMmFjCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9zY3NpL25jcjUzYzh4eC50eHQKQEAgLTAsMCArMSwxODU0IEBACitUaGUgTGludXggTkNSNTNDOFhYL1NZTTUzQzhYWCBkcml2ZXJzIFJFQURNRSBmaWxlCisKK1dyaXR0ZW4gYnkgR2VyYXJkIFJvdWRpZXIgPGdyb3VkaWVyQGZyZWUuZnI+CisyMSBSdWUgQ2Fybm90Cis5NTE3MCBERVVJTCBMQSBCQVJSRSAtIEZSQU5DRQorCisyOSBNYXkgMTk5OQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisxLiAgSW50cm9kdWN0aW9uCisyLiAgU3VwcG9ydGVkIGNoaXBzIGFuZCBTQ1NJIGZlYXR1cmVzCiszLiAgQWR2YW50YWdlcyBvZiB0aGUgZW5oYW5jZWQgODk2IGRyaXZlcgorICAgICAgMy4xIE9wdGltaXplZCBTQ1NJIFNDUklQVFMKKyAgICAgIDMuMiBOZXcgZmVhdHVyZXMgb2YgdGhlIFNZTTUzQzg5NiAoNjQgYml0IFBDSSBkdWFsIExWRCBTQ1NJIGNvbnRyb2xsZXIpCis0LiAgTWVtb3J5IG1hcHBlZCBJL08gdmVyc3VzIG5vcm1hbCBJL08KKzUuICBUYWdnZWQgY29tbWFuZCBxdWV1ZWluZworNi4gIFBhcml0eSBjaGVja2luZworNy4gIFByb2ZpbGluZyBpbmZvcm1hdGlvbgorOC4gIENvbnRyb2wgY29tbWFuZHMKKyAgICAgIDguMSAgU2V0IG1pbmltdW0gc3luY2hyb25vdXMgcGVyaW9kCisgICAgICA4LjIgIFNldCB3aWRlIHNpemUKKyAgICAgIDguMyAgU2V0IG1heGltdW0gbnVtYmVyIG9mIGNvbmN1cnJlbnQgdGFnZ2VkIGNvbW1hbmRzCisgICAgICA4LjQgIFNldCBvcmRlciB0eXBlIGZvciB0YWdnZWQgY29tbWFuZAorICAgICAgOC41ICBTZXQgZGVidWcgbW9kZQorICAgICAgOC42ICBDbGVhciBwcm9maWxlIGNvdW50ZXJzCisgICAgICA4LjcgIFNldCBmbGFnIChub19kaXNjKQorICAgICAgOC44ICBTZXQgdmVyYm9zZSBsZXZlbAorICAgICAgOC45ICBSZXNldCBhbGwgbG9naWNhbCB1bml0cyBvZiBhIHRhcmdldAorICAgICAgOC4xMCBBYm9ydCBhbGwgdGFza3Mgb2YgYWxsIGxvZ2ljYWwgdW5pdHMgb2YgYSB0YXJnZXQKKzkuICBDb25maWd1cmF0aW9uIHBhcmFtZXRlcnMKKzEwLiBCb290IHNldHVwIGNvbW1hbmRzCisgICAgICAxMC4xIFN5bnRheAorICAgICAgMTAuMiBBdmFpbGFibGUgYXJndW1lbnRzCisgICAgICAgICAgICAgMTAuMi4xICBNYXN0ZXIgcGFyaXR5IGNoZWNraW5nCisgICAgICAgICAgICAgMTAuMi4yICBTY3NpIHBhcml0eSBjaGVja2luZworICAgICAgICAgICAgIDEwLjIuMyAgU2NzaSBkaXNjb25uZWN0aW9ucworICAgICAgICAgICAgIDEwLjIuNCAgU3BlY2lhbCBmZWF0dXJlcworICAgICAgICAgICAgIDEwLjIuNSAgVWx0cmEgU0NTSSBzdXBwb3J0CisgICAgICAgICAgICAgMTAuMi42ICBEZWZhdWx0IG51bWJlciBvZiB0YWdnZWQgY29tbWFuZHMKKyAgICAgICAgICAgICAxMC4yLjcgIERlZmF1bHQgc3luY2hyb25vdXMgcGVyaW9kIGZhY3RvcgorICAgICAgICAgICAgIDEwLjIuOCAgTmVnb3RpYXRlIHN5bmNocm9ub3VzIHdpdGggYWxsIGRldmljZXMKKyAgICAgICAgICAgICAxMC4yLjkgIFZlcmJvc2l0eSBsZXZlbAorICAgICAgICAgICAgIDEwLjIuMTAgRGVidWcgbW9kZQorICAgICAgICAgICAgIDEwLjIuMTEgQnVyc3QgbWF4CisgICAgICAgICAgICAgMTAuMi4xMiBMRUQgc3VwcG9ydAorICAgICAgICAgICAgIDEwLjIuMTMgTWF4IHdpZGUKKyAgICAgICAgICAgICAxMC4yLjE0IERpZmZlcmVudGlhbCBtb2RlCisgICAgICAgICAgICAgMTAuMi4xNSBJUlEgbW9kZQorICAgICAgICAgICAgIDEwLjIuMTYgUmV2ZXJzZSBwcm9iZQorICAgICAgICAgICAgIDEwLjIuMTcgRml4IHVwIFBDSSBjb25maWd1cmF0aW9uIHNwYWNlCisgICAgICAgICAgICAgMTAuMi4xOCBTZXJpYWwgTlZSQU0KKyAgICAgICAgICAgICAxMC4yLjE5IENoZWNrIFNDU0kgQlVTIAorICAgICAgICAgICAgIDEwLjIuMjAgRXhjbHVkZSBhIGhvc3QgZnJvbSBiZWluZyBhdHRhY2hlZAorICAgICAgICAgICAgIDEwLjIuMjEgU3VnZ2VzdCBhIGRlZmF1bHQgU0NTSSBpZCBmb3IgaG9zdHMKKyAgICAgICAgICAgICAxMC4yLjIyIEVuYWJsZSB1c2Ugb2YgSU1NRURJQVRFIEFSQklUUkFUSU9OCisgICAgICAxMC4zIEFkdmlzZWQgYm9vdCBzZXR1cCBjb21tYW5kcworICAgICAgMTAuNCBQQ0kgY29uZmlndXJhdGlvbiBmaXgtdXAgYm9vdCBvcHRpb24KKyAgICAgIDEwLjUgU2VyaWFsIE5WUkFNIHN1cHBvcnQgYm9vdCBvcHRpb24KKyAgICAgIDEwLjYgU0NTSSBCVVMgY2hlY2tpbmcgYm9vdCBvcHRpb24KKyAgICAgIDEwLjcgSU1NRURJQVRFIEFSQklUUkFUSU9OIGJvb3Qgb3B0aW9uCisxMS4gU29tZSBjb25zdGFudHMgYW5kIGZsYWdzIG9mIHRoZSBuY3I1M2M4eHguaCBoZWFkZXIgZmlsZQorMTIuIEluc3RhbGxhdGlvbgorMTMuIEFyY2hpdGVjdHVyZSBkZXBlbmRlbnQgZmVhdHVyZXMKKzE0LiBLbm93biBwcm9ibGVtcworICAgICAgMTQuMSBUYWdnZWQgY29tbWFuZHMgd2l0aCBJb21lZ2EgSmF6IGRldmljZQorICAgICAgMTQuMiBEZXZpY2UgbmFtZXMgY2hhbmdlIHdoZW4gYW5vdGhlciBjb250cm9sbGVyIGlzIGFkZGVkCisgICAgICAxNC4zIFVzaW5nIG9ubHkgOCBiaXQgZGV2aWNlcyB3aXRoIGEgV0lERSBTQ1NJIGNvbnRyb2xsZXIuCisgICAgICAxNC40IFBvc3NpYmxlIGRhdGEgY29ycnVwdGlvbiBkdXJpbmcgYSBNZW1vcnkgV3JpdGUgYW5kIEludmFsaWRhdGUKKyAgICAgIDE0LjUgSVJRIHNoYXJpbmcgcHJvYmxlbXMKKzE1LiBTQ1NJIHByb2JsZW0gdHJvdWJsZXNob290aW5nCisgICAgICAxNS4xIFByb2JsZW0gdHJhY2tpbmcKKyAgICAgIDE1LjIgVW5kZXJzdGFuZGluZyBoYXJkd2FyZSBlcnJvciByZXBvcnRzCisxNi4gU3luY2hvbm91cyB0cmFuc2ZlciBuZWdvdGlhdGlvbiB0YWJsZXMKKyAgICAgIDE2LjEgU3luY2hyb25vdXMgdGltaW5ncyBmb3IgNTNDODc1IGFuZCA1M0M4NjAgVWx0cmEtU0NTSSBjb250cm9sbGVycworICAgICAgMTYuMiBTeW5jaHJvbm91cyB0aW1pbmdzIGZvciBmYXN0IFNDU0ktMiA1M0M4WFggY29udHJvbGxlcnMKKzE3LiBTZXJpYWwgTlZSQU0gc3VwcG9ydCAoYnkgUmljaGFyZCBXYWx0aGFtKQorICAgICAgMTcuMSBGZWF0dXJlcworICAgICAgMTcuMiBTeW1iaW9zIE5WUkFNIGxheW91dAorICAgICAgMTcuMyBUZWtyYW0gIE5WUkFNIGxheW91dAorMTguIFN1cHBvcnQgZm9yIEJpZyBFbmRpYW4KKyAgICAgIDE4LjEgQmlnIEVuZGlhbiBDUFUKKyAgICAgIDE4LjIgTkNSIGNoaXAgaW4gQmlnIEVuZGlhbiBtb2RlIG9mIG9wZXJhdGlvbnMKKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisxLiBJbnRyb2R1Y3Rpb24KKworVGhlIGluaXRpYWwgTGludXggbmNyNTNjOHh4IGRyaXZlciBoYXMgYmVlbiBhIHBvcnQgb2YgdGhlIG5jciBkcml2ZXIgZnJvbSAKK0ZyZWVCU0QgdGhhdCBoYXMgYmVlbiBhY2hpZXZlZCBpbiBOb3ZlbWJlciAxOTk1IGJ5OgorICAgICAgICAgIEdlcmFyZCBSb3VkaWVyICAgICAgICAgICAgICA8Z3JvdWRpZXJAZnJlZS5mcj4KKworVGhlIG9yaWdpbmFsIGRyaXZlciBoYXMgYmVlbiB3cml0dGVuIGZvciAzODZic2QgYW5kIEZyZWVCU0QgYnk6CisgICAgICAgICAgV29sZmdhbmcgU3RhbmdsbWVpZXIgICAgICAgIDx3b2xmQGNvbG9nbmUuZGU+CisgICAgICAgICAgU3RlZmFuIEVzc2VyICAgICAgICAgICAgICAgIDxzZUBtaS5VbmktS29lbG4uZGU+CisKK0l0IGlzIG5vdyBhdmFpbGFibGUgYXMgYSBidW5kbGUgb2YgMiBkcml2ZXJzOgorCistIG5jcjUzYzh4eCBnZW5lcmljIGRyaXZlciB0aGF0IHN1cHBvcnRzIGFsbCB0aGUgU1lNNTNDOFhYIGZhbWlseSBpbmNsdWRpbmcgCisgIHRoZSBlYWxpZXN0IDgxMCByZXYuIDEsIHRoZSBsYXRlc3QgODk2ICgyIGNoYW5uZWwgTFZEIFNDU0kgY29udHJvbGxlcikgYW5kCisgIHRoZSBuZXcgODk1QSAoMSBjaGFubmVsIExWRCBTQ1NJIGNvbnRyb2xsZXIpLgorLSBzeW01M2M4eHggZW5oYW5jZWQgZHJpdmVyIChhLmsuYS4gODk2IGRyaXZlcnMpIHRoYXQgZHJvcHMgc3VwcG9ydCBvZiBvbGRlc3QgCisgIGNoaXBzIGluIG9yZGVyIHRvIGdhaW4gYWR2YW50YWdlIG9mIG5ldyBmZWF0dXJlcywgYXMgTE9BRC9TVE9SRSBpbnRydWN0aW9ucyAKKyAgYXZhaWxhYmxlIHNpbmNlIHRoZSA4MTBBIGFuZCBoYXJkd2FyZSBwaGFzZSBtaXNtYXRjaCBhdmFpbGFibGUgd2l0aCB0aGUgCisgIDg5NiBhbmQgdGhlIDg5NUEuCisKK1lvdSBjYW4gZmluZCB0ZWNobmljYWwgaW5mb3JtYXRpb24gYWJvdXQgdGhlIE5DUiA4eHggZmFtaWx5IGluIHRoZQorUENJLUhPV1RPIHdyaXR0ZW4gYnkgTWljaGFlbCBXaWxsIGFuZCBpbiB0aGUgU0NTSS1IT1dUTyB3cml0dGVuIGJ5CitEcmV3IEVja2hhcmR0LgorCitJbmZvcm1hdGlvbiBhYm91dCBuZXcgY2hpcHMgaXMgYXZhaWxhYmxlIGF0IExTSUxPR0lDIHdlYiBzZXJ2ZXI6CisKKyAgICAgICAgICBodHRwOi8vd3d3LmxzaWxvZ2ljLmNvbS8KKworU0NTSSBzdGFuZGFyZCBkb2N1bWVudGF0aW9ucyBhcmUgYXZhaWxhYmxlIGF0IFNZTUJJT1MgZnRwIHNlcnZlcjoKKworICAgICAgICAgIGZ0cDovL2Z0cC5zeW1iaW9zLmNvbS8KKworVXNlZnVsbCBTQ1NJIHRvb2xzIHdyaXR0ZW4gYnkgRXJpYyBZb3VuZ2RhbGUgYXJlIGF2YWlsYWJsZSBhdCB0c3gtMTE6CisKKyAgICAgICAgICBmdHA6Ly90c3gtMTEubWl0LmVkdS9wdWIvbGludXgvQUxQSEEvc2NzaS9zY3NpaW5mby1YLlkudGFyLmd6CisgICAgICAgICAgZnRwOi8vdHN4LTExLm1pdC5lZHUvcHViL2xpbnV4L0FMUEhBL3Njc2kvc2NzaWRldi1YLlkudGFyLmd6CisKK1RoZXNlIHRvb2xzIGFyZSBub3QgQUxQSEEgYnV0IHF1aXRlIGNsZWFuIGFuZCB3b3JrIHF1aXRlIHdlbGwuCitJdCBpcyBlc3NlbnRpYWwgeW91IGhhdmUgdGhlICdzY3NpaW5mbycgcGFja2FnZS4KKworVGhpcyBzaG9ydCBkb2N1bWVudGF0aW9uIGRlc2NyaWJlcyB0aGUgZmVhdHVyZXMgb2YgdGhlIGdlbmVyaWMgYW5kIGVuaGFuY2VkCitkcml2ZXJzLCBjb25maWd1cmF0aW9uIHBhcmFtZXRlcnMgYW5kIGNvbnRyb2wgY29tbWFuZHMgYXZhaWxhYmxlIHRocm91Z2ggCit0aGUgcHJvYyBTQ1NJIGZpbGUgc3lzdGVtIHJlYWQgLyB3cml0ZSBvcGVyYXRpb25zLgorCitUaGlzIGRyaXZlciBoYXMgYmVlbiB0ZXN0ZWQgT0sgd2l0aCBsaW51eC9pMzg2LCBMaW51eC9BbHBoYSBhbmQgTGludXgvUFBDLgorCitMYXRlc3QgZHJpdmVyIHZlcnNpb24gYW5kIHBhdGNoZXMgYXJlIGF2YWlsYWJsZSBhdDoKKworICAgICAgICAgIGZ0cDovL2Z0cC50dXgub3JnL3B1Yi9wZW9wbGUvZ2VyYXJkLXJvdWRpZXIKK29yCisgICAgICAgICAgZnRwOi8vZnRwLnN5bWJpb3MuY29tL21pcnJvci9mdHAudHV4Lm9yZy9wdWIvdHV4L3JvdWRpZXIvZHJpdmVycworCitJIGFtIG5vdCBhIG5hdGl2ZSBzcGVha2VyIG9mIEVuZ2xpc2ggYW5kIHRoZXJlIGFyZSBwcm9iYWJseSBsb3RzIG9mCittaXN0YWtlcyBpbiB0aGlzIFJFQURNRSBmaWxlLiBBbnkgaGVscCB3aWxsIGJlIHdlbGNvbWUuCisKKworMi4gU3VwcG9ydGVkIGNoaXBzIGFuZCBTQ1NJIGZlYXR1cmVzCisKK1RoZSBmb2xsb3dpbmcgZmVhdHVyZXMgYXJlIHN1cHBvcnRlZCBmb3IgYWxsIGNoaXBzOgorCisJU3luY2hyb25vdXMgbmVnb3RpYXRpb24KKwlEaXNjb25uZWN0aW9uCisJVGFnZ2VkIGNvbW1hbmQgcXVldWluZworCVNDU0kgcGFyaXR5IGNoZWNraW5nCisJTWFzdGVyIHBhcml0eSBjaGVja2luZworCisiV2lkZSBuZWdvdGlhdGlvbiIgaXMgc3VwcG9ydGVkIGZvciBjaGlwcyB0aGF0IGFsbG93IGl0LiAgVGhlCitmb2xsb3dpbmcgdGFibGUgc2hvd3Mgc29tZSBjaGFyYWN0ZXJpc3RpY3Mgb2YgTkNSIDh4eCBmYW1pbHkgY2hpcHMgCithbmQgd2hhdCBkcml2ZXJzIHN1cHBvcnQgdGhlbS4KKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdXBwb3J0ZWQgYnkgICBTdXBwb3J0ZWQgYnkKKyAgICAgICBPbiBib2FyZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGdlbmVyaWMgICAgdGhlIGVuaGFuY2VkIAorQ2hpcCAgIFNETVMgQklPUyAgIFdpZGUgICBTQ1NJIHN0ZC4gICBNYXguIHN5bmMgICBkcml2ZXIgICAgICAgICBkcml2ZXIKKy0tLS0gICAtLS0tLS0tLS0gICAtLS0tICAgLS0tLS0tLS0tICAgLS0tLS0tLS0tLSAgLS0tLS0tLS0tLS0tICAgLS0tLS0tLS0tLS0tLQorODEwICAgICAgICBOICAgICAgICAgTiAgICAgIEZBU1QxMCAgICAxMCBNQi9zICAgICAgICBZICAgICAgICAgICAgIE4KKzgxMEEgICAgICAgTiAgICAgICAgIE4gICAgICBGQVNUMTAgICAgMTAgTUIvcyAgICAgICAgWSAgICAgICAgICAgICBZCis4MTUgICAgICAgIFkgICAgICAgICBOICAgICAgRkFTVDEwICAgIDEwIE1CL3MgICAgICAgIFkgICAgICAgICAgICAgTgorODI1ICAgICAgICBZICAgICAgICAgWSAgICAgIEZBU1QxMCAgICAyMCBNQi9zICAgICAgICBZICAgICAgICAgICAgIE4KKzgyNUEgICAgICAgWSAgICAgICAgIFkgICAgICBGQVNUMTAgICAgMjAgTUIvcyAgICAgICAgWSAgICAgICAgICAgICBZCis4NjAgICAgICAgIE4gICAgICAgICBOICAgICAgRkFTVDIwICAgIDIwIE1CL3MgICAgICAgIFkgICAgICAgICAgICAgWQorODc1ICAgICAgICBZICAgICAgICAgWSAgICAgIEZBU1QyMCAgICA0MCBNQi9zICAgICAgICBZICAgICAgICAgICAgIFkKKzg3NiAgICAgICAgWSAgICAgICAgIFkgICAgICBGQVNUMjAgICAgNDAgTUIvcyAgICAgICAgWSAgICAgICAgICAgICBZCis4OTUgICAgICAgIFkgICAgICAgICBZICAgICAgRkFTVDQwICAgIDgwIE1CL3MgICAgICAgIFkgICAgICAgICAgICAgWQorODk1QSAgICAgICBZICAgICAgICAgWSAgICAgIEZBU1Q0MCAgICA4MCBNQi9zICAgICAgICBZICAgICAgICAgICAgIFkKKzg5NiAgICAgICAgWSAgICAgICAgIFkgICAgICBGQVNUNDAgICAgODAgTUIvcyAgICAgICAgWSAgICAgICAgICAgICBZCis4OTcgICAgICAgIFkgICAgICAgICBZICAgICAgRkFTVDQwICAgIDgwIE1CL3MgICAgICAgIFkgICAgICAgICAgICAgWQorMTUxMEQgICAgICBZICAgICAgICAgWSAgICAgIEZBU1Q0MCAgICA4MCBNQi9zICAgICAgICBZICAgICAgICAgICAgIFkKKzEwMTAgICAgICAgWSAgICAgICAgIFkgICAgICBGQVNUODAgICAxNjAgTUIvcyAgICAgICAgTiAgICAgICAgICAgICBZCisxMDEwXzY2KiAgIFkgICAgICAgICBZICAgICAgRkFTVDgwICAgMTYwIE1CL3MgICAgICAgIE4gICAgICAgICAgICAgWQorCisqIENoaXAgc3VwcG9ydHMgMzNNSHogYW5kIDY2TUh6IFBDSSBidXNlcy4KKworCitTdW1tYXJ5IG9mIG90aGVyIHN1cHBvcnRlZCBmZWF0dXJlczoKKworTW9kdWxlOiAgICAgICAgICAgICAgICBhbGxvdyB0byBsb2FkIHRoZSBkcml2ZXIKK01lbW9yeSBtYXBwZWQgSS9POiAgICAgaW5jcmVhc2VzIHBlcmZvcm1hbmNlCitQcm9maWxpbmcgaW5mb3JtYXRpb246IHJlYWQgb3BlcmF0aW9ucyBmcm9tIHRoZSBwcm9jIFNDU0kgZmlsZSBzeXN0ZW0KK0NvbnRyb2wgY29tbWFuZHM6ICAgICAgd3JpdGUgb3BlcmF0aW9ucyB0byB0aGUgcHJvYyBTQ1NJIGZpbGUgc3lzdGVtCitEZWJ1Z2dpbmcgaW5mb3JtYXRpb246IHdyaXR0ZW4gdG8gc3lzbG9nIChleHBlcnQgb25seSkKK1NjYXR0ZXIgLyBnYXRoZXIKK1NoYXJlZCBpbnRlcnJ1cHQKK0Jvb3Qgc2V0dXAgY29tbWFuZHMKK1NlcmlhbCBOVlJBTTogICAgICAgICAgU3ltYmlvcyBhbmQgVGVrcmFtIGZvcm1hdHMKKworCiszLiBBZHZhbnRhZ2VzIG9mIHRoZSBlbmhhbmNlZCA4OTYgZHJpdmVyCisKKzMuMSBPcHRpbWl6ZWQgU0NTSSBTQ1JJUFRTLgorCitUaGUgODEwQSwgODI1QSwgODc1LCA4OTUsIDg5NiBhbmQgODk1QSBzdXBwb3J0IG5ldyBTQ1NJIFNDUklQVFMgaW5zdHJ1Y3Rpb25zIAorbmFtZWQgTE9BRCBhbmQgU1RPUkUgdGhhdCBhbGxvdyB0byBtb3ZlIHVwIHRvIDEgRFdPUkQgZnJvbS90byBhbiBJTyByZWdpc3RlciAKK3RvL2Zyb20gbWVtb3J5IG11Y2ggZmFzdGVyIHRoYXQgdGhlIE1PVkUgTUVNT1JZIGluc3RydWN0aW9uIHRoYXQgaXMgc3VwcG9ydGVkIAorYnkgdGhlIDUzYzd4eCBhbmQgNTNjOHh4IGZhbWlseS4KK1RoZSBMT0FEL1NUT1JFIGluc3RydWN0aW9ucyBzdXBwb3J0IGFic29sdXRlIGFuZCBEU0EgcmVsYXRpdmUgYWRkcmVzc2luZyAKK21vZGVzLiAgVGhlIFNDU0kgU0NSSVBUUyBoYWQgYmVlbiBlbnRpcmVseSByZXdyaXR0ZW4gdXNpbmcgTE9BRC9TVE9SRSBpbnN0ZWFkIAorb2YgTU9WRSBNRU1PUlkgaW5zdHJ1Y3Rpb25zLgorCiszLjIgTmV3IGZlYXR1cmVzIG9mIHRoZSBTWU01M0M4OTYgKDY0IGJpdCBQQ0kgZHVhbCBMVkQgU0NTSSBjb250cm9sbGVyKQorCitUaGUgODk2IGFuZCB0aGUgODk1QSBhbGxvd3MgaGFuZGxpbmcgb2YgdGhlIHBoYXNlIG1pc21hdGNoIGNvbnRleHQgZnJvbSAKK1NDUklQVFMgKGF2b2lkcyB0aGUgcGhhc2UgbWlzbWF0Y2ggaW50ZXJydXB0IHRoYXQgc3RvcHMgdGhlIFNDU0kgcHJvY2Vzc29yIAordW50aWwgdGhlIEMgY29kZSBoYXMgc2F2ZWQgdGhlIGNvbnRleHQgb2YgdGhlIHRyYW5zZmVyKS4KK0ltcGxlbWVudGluZyB0aGlzIHdpdGhvdXQgdXNpbmcgTE9BRC9TVE9SRSBpbnN0cnVjdGlvbnMgd291bGQgYmUgcGFpbmZ1bGwgCithbmQgSSBkaWQnbnQgZXZlbiB3YW50IHRvIHRyeSBpdC4KKworVGhlIDg5NiBjaGlwIHN1cHBvcnRzIDY0IGJpdCBQQ0kgdHJhbnNhY3Rpb25zIGFuZCBhZGRyZXNzaW5nLCB3aGlsZSB0aGUgCis4OTVBIHN1cHBvcnRzIDMyIGJpdCBQQ0kgdHJhbnNhY3Rpb25zIGFuZCA2NCBiaXQgYWRkcmVzc2luZy4KK1RoZSBTQ1JJUFRTIHByb2Nlc3NvciBvZiB0aGVzZSBjaGlwcyBpcyBub3QgdHJ1ZSA2NCBiaXQsIGJ1dCB1c2VzIHNlZ21lbnQgCityZWdpc3RlcnMgZm9yIGJpdCAzMi02My4gQW5vdGhlciBpbnRlcmVzdGluZyBmZWF0dXJlIGlzIHRoYXQgTE9BRC9TVE9SRSAKK2luc3RydWN0aW9ucyB0aGF0IGFkZHJlc3MgdGhlIG9uLWNoaXAgUkFNICg4aykgcmVtYWluIGludGVybmFsIHRvIHRoZSBjaGlwLgorCitEdWUgdG8gdGhlIHVzZSBvZiBMT0FEL1NUT1JFIFNDUklQVFMgaW5zdHJ1Y3Rpb25zLCB0aGlzIGRyaXZlciBkb2VzIG5vdCAKK3N1cHBvcnQgdGhlIGZvbGxvd2luZyBjaGlwczoKKy0gU1lNNTNDODEwIHJldmlzaW9uIDwgMHgxMCAoMTYpCistIFNZTTUzQzgxNSBhbGwgcmV2aXNpb25zCistIFNZTTUzQzgyNSByZXZpc2lvbiA8IDB4MTAgKDE2KQorCis0LiBNZW1vcnkgbWFwcGVkIEkvTyB2ZXJzdXMgbm9ybWFsIEkvTworCitNZW1vcnkgbWFwcGVkIEkvTyBoYXMgbGVzcyBsYXRlbmN5IHRoYW4gbm9ybWFsIEkvTy4gIFNpbmNlCitsaW51eC0xLjMueCwgbWVtb3J5IG1hcHBlZCBJL08gaXMgdXNlZCByYXRoZXIgdGhhbiBub3JtYWwgSS9PLiAgTWVtb3J5CittYXBwZWQgSS9PIHNlZW1zIHRvIHdvcmsgZmluZSBvbiBtb3N0IGhhcmR3YXJlIGNvbmZpZ3VyYXRpb25zLCBidXQKK3NvbWUgcG9vcmx5IGRlc2lnbmVkIG1vdGhlcmJvYXJkcyBtYXkgYnJlYWsgdGhpcyBmZWF0dXJlLgorCitUaGUgY29uZmlndXJhdGlvbiBvcHRpb24gQ09ORklHX1NDU0lfTkNSNTNDOFhYX0lPTUFQUEVEIGZvcmNlcyB0aGUKK2RyaXZlciB0byB1c2Ugbm9ybWFsIEkvTyBpbiBhbGwgY2FzZXMuCisKKworNS4gVGFnZ2VkIGNvbW1hbmQgcXVldWVpbmcKKworUXVldWluZyBtb3JlIHRoYW4gMSBjb21tYW5kIGF0IGEgdGltZSB0byBhIGRldmljZSBhbGxvd3MgaXQgdG8gcGVyZm9ybSAKK29wdGltaXphdGlvbnMgYmFzZWQgb24gYWN0dWFsIGhlYWQgcG9zaXRpb25zIGFuZCBpdHMgbWVjaGFuaWNhbCAKK2NoYXJhY3RlcmlzdGljcy4gVGhpcyBmZWF0dXJlIG1heSBhbHNvIHJlZHVjZSBhdmVyYWdlIGNvbW1hbmQgbGF0ZW5jeS4KK0luIG9yZGVyIHRvIHJlYWxseSBnYWluIGFkdmFudGFnZSBvZiB0aGlzIGZlYXR1cmUsIGRldmljZXMgbXVzdCBoYXZlIAorYSByZWFzb25hYmxlIGNhY2hlIHNpemUgKE5vIG1pcmFjbGUgaXMgdG8gYmUgZXhwZWN0ZWQgZm9yIGEgbG93LWVuZCAKK2hhcmQgZGlzayB3aXRoIDEyOCBLQiBvciBsZXNzKS4KK1NvbWUga293biBTQ1NJIGRldmljZXMgZG8gbm90IHByb3Blcmx5IHN1cHBvcnQgdGFnZ2VkIGNvbW1hbmQgcXVldWluZy4KK0dlbmVyYWxseSwgZmlybXdhcmUgcmV2aXNpb25zIHRoYXQgZml4IHRoaXMga2luZCBvZiBwcm9ibGVtcyBhcmUgYXZhaWxhYmxlIAorYXQgcmVzcGVjdGl2ZSB2ZW5kb3Igd2ViL2Z0cCBzaXRlcy4KK0FsbCBJIGNhbiBzYXkgaXMgdGhhdCB0aGUgaGFyZCBkaXNrcyBJIHVzZSBvbiBteSBtYWNoaW5lcyBiZWhhdmUgd2VsbCB3aXRoIAordGhpcyBkcml2ZXIgd2l0aCB0YWdnZWQgY29tbWFuZCBxdWV1aW5nIGVuYWJsZWQ6CisKKy0gSUJNIFMxMiAwNjYyCistIENvbm5lciAxMDgwUworLSBRdWFudHVtIEF0bGFzIEkKKy0gUXVhbnR1bSBBdGxhcyBJSQorCitJZiB5b3VyIGNvbnRyb2xsZXIgaGFzIE5WUkFNLCB5b3UgY2FuIGNvbmZpZ3VyZSB0aGlzIGZlYXR1cmUgcGVyIHRhcmdldCAKK2Zyb20gdGhlIHVzZXIgc2V0dXAgdG9vbC4gVGhlIFRla3JhbSBTZXR1cCBwcm9ncmFtIGFsbG93cyB0byB0dW5lIHRoZSAKK21heGltdW0gbnVtYmVyIG9mIHF1ZXVlZCBjb21tYW5kcyB1cCB0byAzMi4gVGhlIFN5bWJpb3MgU2V0dXAgb25seSBhbGxvd3MgCit0byBlbmFibGUgb3IgZGlzYWJsZSB0aGlzIGZlYXR1cmUuCisKK1RoZSBtYXhpbXVtIG51bWJlciBvZiBzaW11bHRhbmVvdXMgdGFnZ2VkIGNvbW1hbmRzIHF1ZXVlZCB0byBhIGRldmljZQoraXMgY3VycmVudGx5IHNldCB0byA4IGJ5IGRlZmF1bHQuICBUaGlzIHZhbHVlIGlzIHN1aXRhYmxlIGZvciBtb3N0IFNDU0kKK2Rpc2tzLiAgV2l0aCBsYXJnZSBTQ1NJIGRpc2tzICg+PSAyR0IsIGNhY2hlID49IDUxMktCLCBhdmVyYWdlIHNlZWsgdGltZQorPD0gMTAgbXMpLCB1c2luZyBhIGxhcmdlciB2YWx1ZSBtYXkgZ2l2ZSBiZXR0ZXIgcGVyZm9ybWFuY2VzLgorCitUaGUgc3ltNTNjOHh4IGRyaXZlciBzdXBwb3J0cyB1cCB0byAyNTUgY29tbWFuZHMgcGVyIGRldmljZSwgYW5kIHRoZSAKK2dlbmVyaWMgbmNyNTNjOHh4IGRyaXZlciBzdXBwb3J0cyB1cCB0byA2NCwgYnV0IHVzaW5nIG1vcmUgdGhhbiAzMiBpcyAKK2dlbmVyYWxseSBub3Qgd29ydGgtd2hpbGUsIHVubGVzcyB5b3UgYXJlIHVzaW5nIGEgdmVyeSBsYXJnZSBkaXNrIG9yIGRpc2sgCithcnJheS4gSXQgaXMgbm90aWNlYWJsZSB0aGF0IG1vc3Qgb2YgcmVjZW50IGhhcmQgZGlza3Mgc2VlbSBub3QgdG8gYWNjZXB0IAorbW9yZSB0aGFuIDY0IHNpbXVsdGFuZW91cyBjb21tYW5kcy4gU28sIHVzaW5nIG1vcmUgdGhhbiA2NCBxdWV1ZWQgY29tbWFuZHMgCitpcyBwcm9iYWJseSBqdXN0IHJlc291cmNlIHdhc3RpbmcuCisKK0lmIHlvdXIgY29udHJvbGxlciBkb2VzIG5vdCBoYXZlIE5WUkFNIG9yIGlmIGl0IGlzIG1hbmFnZWQgYnkgdGhlIFNETVMgCitCSU9TL1NFVFVQLCB5b3UgY2FuIGNvbmZpZ3VyZSB0YWdnZWQgcXVldWVpbmcgZmVhdHVyZSBhbmQgZGV2aWNlIHF1ZXVlIAorZGVwdGhzIGZyb20gdGhlIGJvb3QgY29tbWFuZC1saW5lLiBGb3IgZXhhbXBsZToKKworICBuY3I1M2M4eHg9dGFnczo0L3QydDNxMTUtdDRxNy90MXUwcTMyCisKK3dpbGwgc2V0IHRhZ2dlZCBjb21tYW5kcyBxdWV1ZSBkZXB0aHMgYXMgZm9sbG93OgorCistIHRhcmdldCAyICBhbGwgbHVucyAgb24gY29udHJvbGxlciAwIC0tPiAxNQorLSB0YXJnZXQgMyAgYWxsIGx1bnMgIG9uIGNvbnRyb2xsZXIgMCAtLT4gMTUKKy0gdGFyZ2V0IDQgIGFsbCBsdW5zICBvbiBjb250cm9sbGVyIDAgLS0+ICA3CistIHRhcmdldCAxICBsdW4gMCAgICAgb24gY29udHJvbGxlciAxIC0tPiAzMgorLSBhbGwgb3RoZXIgdGFyZ2V0L2x1biAgICAgICAgICAgICAgICAtLT4gIDQKKworSW4gc29tZSBzcGVjaWFsIGNvbmRpdGlvbnMsIHNvbWUgU0NTSSBkaXNrIGZpcm13YXJlcyBtYXkgcmV0dXJuIGEKK1FVRVVFIEZVTEwgc3RhdHVzIGZvciBhIFNDU0kgY29tbWFuZC4gVGhpcyBiZWhhdmlvdXIgaXMgbWFuYWdlZCBieSB0aGUKK2RyaXZlciB1c2luZyB0aGUgZm9sbG93aW5nIGhldXJpc3RpYzoKKworLSBFYWNoIHRpbWUgYSBRVUVVRSBGVUxMIHN0YXR1cyBpcyByZXR1cm5lZCwgdGFnZ2VkIHF1ZXVlIGRlcHRoIGlzIHJlZHVjZWQgCisgIHRvIHRoZSBhY3R1YWwgbnVtYmVyIG9mIGRpc2Nvbm5lY3RlZCBjb21tYW5kcy4gCisKKy0gRXZlcnkgMTAwMCBzdWNjZXNzZnVsbHkgY29tcGxldGVkIFNDU0kgY29tbWFuZHMsIGlmIGFsbG93ZWQgYnkgdGhlCisgIGN1cnJlbnQgbGltaXQsIHRoZSBtYXhpbXVtIG51bWJlciBvZiBxdWV1ZWFibGUgY29tbWFuZHMgaXMgaW5jcmVtZW50ZWQuCisKK1NpbmNlIFFVRVVFIEZVTEwgc3RhdHVzIHJlY2VwdGlvbiBhbmQgaGFuZGxpbmcgaXMgcmVzb3VyY2Ugd2FzdGluZywgdGhlIAorZHJpdmVyIG5vdGlmaWVzIGJ5IGRlZmF1bHQgdGhpcyBwcm9ibGVtIHRvIHVzZXIgYnkgaW5kaWNhdGluZyB0aGUgYWN0dWFsIAorbnVtYmVyIG9mIGNvbW1hbmRzIHVzZWQgYW5kIHRoZWlyIHN0YXR1cywgYXMgd2VsbCBhcyBpdHMgZGVjaXNpb24gb24gdGhlIAorZGV2aWNlIHF1ZXVlIGRlcHRoIGNoYW5nZS4KK1RoZSBoZXVyaXN0aWMgdXNlZCBieSB0aGUgZHJpdmVyIGluIGhhbmRsaW5nIFFVRVVFIEZVTEwgZW5zdXJlcyB0aGF0IHRoZSAKK2ltcGFjdCBvbiBwZXJmb3JtYW5jZXMgaXMgbm90IHRvbyBiYWQuIFlvdSBjYW4gZ2V0IHJpZCBvZiB0aGUgbWVzc2FnZXMgYnkgCitzZXR0aW5nIHZlcmJvc2UgbGV2ZWwgdG8gemVybywgYXMgZm9sbG93OgorCisxc3QgbWV0aG9kOiBib290IHlvdXIgc3lzdGVtIHVzaW5nICduY3I1M2M4eHg9dmVyYjowJyBvcHRpb24uCisybmQgbWV0aG9kOiBhcHBseSAic2V0dmVyYm9zZSAwIiBjb250cm9sIGNvbW1hbmQgdG8gdGhlIHByb2MgZnMgZW50cnkgCisgICAgICAgICAgICBjb3JyZXNwb25kaW5nIHRvIHlvdXIgY29udHJvbGxlciBhZnRlciBib290LXVwLgorCis2LiBQYXJpdHkgY2hlY2tpbmcKKworVGhlIGRyaXZlciBzdXBwb3J0cyBTQ1NJIHBhcml0eSBjaGVja2luZyBhbmQgUENJIGJ1cyBtYXN0ZXIgcGFyaXR5CitjaGVja2luZy4gIFRoZXNlIGZlYXR1cmVzIG11c3QgYmUgZW5hYmxlZCBpbiBvcmRlciB0byBlbnN1cmUgc2FmZSBkYXRhCit0cmFuc2ZlcnMuICBIb3dldmVyLCBzb21lIGZsYXdlZCBkZXZpY2VzIG9yIG1vdGhlciBib2FyZHMgd2lsbCBoYXZlCitwcm9ibGVtcyB3aXRoIHBhcml0eS4gWW91IGNhbiBkaXNhYmxlIGVpdGhlciBQQ0kgcGFyaXR5IG9yIFNDU0kgcGFyaXR5IAorY2hlY2tpbmcgYnkgZW50ZXJpbmcgYXBwcm9wcmlhdGUgb3B0aW9ucyBmcm9tIHRoZSBib290IGNvbW1hbmQgbGluZS4KKyhTZWUgMTA6IEJvb3Qgc2V0dXAgY29tbWFuZHMpLgorCis3LiBQcm9maWxpbmcgaW5mb3JtYXRpb24KKworUHJvZmlsaW5nIGluZm9ybWF0aW9uIGlzIGF2YWlsYWJsZSB0aHJvdWdoIHRoZSBwcm9jIFNDU0kgZmlsZSBzeXN0ZW0uCitTaW5jZSBnYXRoZXJpbmcgcHJvZmlsaW5nIGluZm9ybWF0aW9uIG1heSBpbXBhY3QgcGVyZm9ybWFuY2VzLCB0aGlzIAorZmVhdHVyZSBpcyBkaXNhYmxlZCBieSBkZWZhdWx0IGFuZCByZXF1aXJlcyBhIGNvbXBpbGF0aW9uIGNvbmZpZ3VyYXRpb24gCitvcHRpb24gdG8gYmUgc2V0IHRvIFkuCisKK1RoZSBkZXZpY2UgYXNzb2NpYXRlZCB3aXRoIGEgaG9zdCBoYXMgdGhlIGZvbGxvd2luZyBwYXRobmFtZToKKworICAgICAgICAgIC9wcm9jL3Njc2kvbmNyNTNjOHh4L04gICAgIChOPTAsMSwyIC4uLi4pCisKK0dlbmVyYWxseSwgb25seSAxIGJvYXJkIGlzIHVzZWQgb24gaGFyZHdhcmUgY29uZmlndXJhdGlvbiwgYW5kIHRoYXQgZGV2aWNlIGlzOgorICAgICAgICAgIC9wcm9jL3Njc2kvbmNyNTNjOHh4LzAKKworSG93ZXZlciwgaWYgdGhlIGRyaXZlciBoYXMgYmVlbiBtYWRlIGFzIG1vZHVsZSwgdGhlIG51bWJlciBvZiB0aGUKK2hvc3RzIGlzIGluY3JlbWVudGVkIGVhY2ggdGltZSB0aGUgZHJpdmVyIGlzIGxvYWRlZC4KKworSW4gb3JkZXIgdG8gZGlzcGxheSBwcm9maWxpbmcgaW5mb3JtYXRpb24sIGp1c3QgZW50ZXI6CisKKyAgICAgICAgIGNhdCAvcHJvYy9zY3NpL25jcjUzYzh4eC8wCisKK2FuZCB5b3Ugd2lsbCBnZXQgc29tZXRoaW5nIGxpa2UgdGhlIGZvbGxvd2luZyB0ZXh0OgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitHZW5lcmFsIGluZm9ybWF0aW9uOgorICBDaGlwIE5DUjUzQzgxMCwgZGV2aWNlIGlkIDB4MSwgcmV2aXNpb24gaWQgMHgyCisgIElPIHBvcnQgYWRkcmVzcyAweDYwMDAsIElSUSBudW1iZXIgMTAKKyAgVXNpbmcgbWVtb3J5IG1hcHBlZCBJTyBhdCB2aXJ0dWFsIGFkZHJlc3MgMHgyODJjMDAwCisgIFN5bmNocm9ub3VzIHRyYW5zZmVyIHBlcmlvZCAyNSwgbWF4IGNvbW1hbmRzIHBlciBsdW4gNAorUHJvZmlsaW5nIGluZm9ybWF0aW9uOgorICBudW1fdHJhbnMgICAgPSAxODAxNAorICBudW1fa2J5dGVzICAgPSA2NzEzMTQKKyAgbnVtX2Rpc2MgICAgID0gMjU3NjMKKyAgbnVtX2JyZWFrICAgID0gMTY3MworICBudW1faW50ICAgICAgPSAxNjg1CisgIG51bV9mbHkgICAgICA9IDE4MDM4CisgIG1zX3NldHVwICAgICA9IDQ5NDAKKyAgbXNfZGF0YSAgICAgID0gMzY5OTQwCisgIG1zX2Rpc2MgICAgICA9IDE4MzA5MAorICBtc19wb3N0ICAgICAgPSAxMzIwCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0dlbmVyYWwgaW5mb3JtYXRpb24gaXMgZWFzeSB0byB1bmRlcnN0YW5kLiBUaGUgZGV2aWNlIElEIGFuZCB0aGUKK3JldmlzaW9uIElEIGlkZW50aWZ5IHRoZSBTQ1NJIGNoaXAgYXMgZm9sbG93czoKKworQ2hpcCAgICBEZXZpY2UgaWQgICAgIFJldmlzaW9uIElkCistLS0tICAgIC0tLS0tLS0tLSAgICAgLS0tLS0tLS0tLS0KKzgxMCAgICAgICAweDEgICAgICAgICAgICA8ICAweDEwCis4MTBBICAgICAgMHgxICAgICAgICAgICAgPj0gMHgxMAorODE1ICAgICAgIDB4NAorODI1ICAgICAgIDB4MyAgICAgICAgICAgIDwgIDB4MTAKKzg2MCAgICAgICAweDYKKzgyNUEgICAgICAweDMgICAgICAgICAgICA+PSAweDEwCis4NzUgICAgICAgMHhmCis4OTUgICAgICAgMHhjCisKK1RoZSBwcm9maWxpbmcgaW5mb3JtYXRpb24gaXMgdXBkYXRlZCB1cG9uIGNvbXBsZXRpb24gb2YgU0NTSSBjb21tYW5kcy4KK0EgZGF0YSBzdHJ1Y3R1cmUgaXMgYWxsb2NhdGVkIGFuZCB6ZXJvZWQgd2hlbiB0aGUgaG9zdCBhZGFwdGVyIGlzCithdHRhY2hlZC4gU28sIGlmIHRoZSBkcml2ZXIgaXMgYSBtb2R1bGUsIHRoZSBwcm9maWxlIGNvdW50ZXJzIGFyZQorY2xlYXJlZCBlYWNoIHRpbWUgdGhlIGRyaXZlciBpcyBsb2FkZWQuICBUaGUgImNsZWFycHJvZiIgY29tbWFuZAorYWxsb3dzIHlvdSB0byBjbGVhciB0aGVzZSBjb3VudGVycyBhdCBhbnkgdGltZS4KKworVGhlIGZvbGxvd2luZyBjb3VudGVycyBhcmUgYXZhaWxhYmxlOgorCisoIm51bSIgcHJlZml4IG1lYW5zICJudW1iZXIgb2YiLAorIm1zIiBtZWFucyBtaWxsaS1zZWNvbmRzKQorCitudW1fdHJhbnMKKwlOdW1iZXIgb2YgY29tcGxldGVkIGNvbW1hbmRzCisJRXhhbXBsZSBhYm92ZTogMTgwMTQgY29tcGxldGVkIGNvbW1hbmRzCisKK251bV9rYnl0ZXMKKwlOdW1iZXIgb2Yga2J5dGVzIHRyYW5zZmVycmVkCisJRXhhbXBsZSBhYm92ZTogNjcxIE1CIHRyYW5zZmVycmVkCisKK251bV9kaXNjCisJTnVtYmVyIG9mIFNDU0kgZGlzY29ubmVjdGlvbnMKKwlFeGFtcGxlIGFib3ZlOiAyNTc2MyBTQ1NJIGRpc2Nvbm5lY3Rpb25zCisKK251bV9icmVhaworCW51bWJlciBvZiBzY3JpcHQgaW50ZXJydXB0aW9ucyAocGhhc2UgbWlzbWF0Y2gpCisJRXhhbXBsZSBhYm92ZTogMTY3MyBzY3JpcHQgaW50ZXJydXB0aW9ucworCitudW1faW50CisJTnVtYmVyIG9mIGludGVycnVwdHMgb3RoZXIgdGhhbiAib24gdGhlIGZseSIKKwlFeGFtcGxlIGFib3ZlOiAxNjg1IGludGVycnVwdGlvbnMgbm90ICJvbiB0aGUgZmx5IgorCitudW1fZmx5CisJTnVtYmVyIG9mIGludGVycnVwdHMgIm9uIHRoZSBmbHkiCisJRXhhbXBsZSBhYm92ZTogMTgwMzggaW50ZXJydXB0aW9ucyAib24gdGhlIGZseSIKKworbXNfc2V0dXAKKwlFbGFwc2VkIHRpbWUgZm9yIFNDU0kgY29tbWFuZHMgc2V0dXBzCisJRXhhbXBsZSBhYm92ZTogNC45NCBzZWNvbmRzCisKK21zX2RhdGEKKwlFbGFwc2VkIHRpbWUgZm9yIGRhdGEgdHJhbnNmZXJzCisJRXhhbXBsZSBhYm92ZTogMzY5Ljk0IHNlY29uZHMgc3BlbnQgZm9yIGRhdGEgdHJhbnNmZXIKKworbXNfZGlzYworCUVsYXBzZWQgdGltZSBmb3IgU0NTSSBkaXNjb25uZWN0aW9ucworCUV4YW1wbGUgYWJvdmU6IDE4My4wOSBzZWNvbmRzIHNwZW50IGRpc2Nvbm5lY3RlZAorCittc19wb3N0CisJRWxhcHNlZCB0aW1lIGZvciBjb21tYW5kIHBvc3QgcHJvY2Vzc2luZworCSh0aW1lIGZyb20gU0NTSSBzdGF0dXMgZ2V0IHRvIGNvbW1hbmQgY29tcGxldGlvbiBjYWxsKQorCUV4YW1wbGUgYWJvdmU6IDEuMzIgc2Vjb25kcyBzcGVudCBmb3IgcG9zdCBwcm9jZXNzaW5nCisKK0R1ZSB0byB0aGUgMS8xMDAgc2Vjb25kIHRpY2sgb2YgdGhlIHN5c3RlbSBjbG9jaywgIm1zX3Bvc3QiIHRpbWUgbWF5CitiZSB3cm9uZy4KKworSW4gdGhlIGV4YW1wbGUgYWJvdmUsIHdlIGdvdCAxODAzOCBpbnRlcnJ1cHRzICJvbiB0aGUgZmx5IiBhbmQgb25seQorMTY3MyBzY3JpcHQgYnJlYWtzIGdlbmVyYWxseSBkdWUgdG8gZGlzY29ubmVjdGlvbnMgaW5zaWRlIGEgc2VnbWVudCAKK29mIHRoZSBzY2F0dGVyIGxpc3QuCisKKworOC4gQ29udHJvbCBjb21tYW5kcworCitDb250cm9sIGNvbW1hbmRzIGNhbiBiZSBzZW50IHRvIHRoZSBkcml2ZXIgd2l0aCB3cml0ZSBvcGVyYXRpb25zIHRvCit0aGUgcHJvYyBTQ1NJIGZpbGUgc3lzdGVtLiBUaGUgZ2VuZXJpYyBjb21tYW5kIHN5bnRheCBpcyB0aGUKK2ZvbGxvd2luZzoKKworICAgICAgZWNobyAiPHZlcmI+IDxwYXJhbWV0ZXJzPiIgPi9wcm9jL3Njc2kvbmNyNTNjOHh4LzAKKyAgICAgIChhc3N1bWVzIGNvbnRyb2xsZXIgbnVtYmVyIGlzIDApCisKK1VzaW5nICJhbGwiIGZvciAiPHRhcmdldD4iIHBhcmFtZXRlciB3aXRoIHRoZSBjb21tYW5kcyBiZWxvdyB3aWxsCithcHBseSB0byBhbGwgdGFyZ2V0cyBvZiB0aGUgU0NTSSBjaGFpbiAoZXhjZXB0IHRoZSBjb250cm9sbGVyKS4KKworQXZhaWxhYmxlIGNvbW1hbmRzOgorCis4LjEgU2V0IG1pbmltdW0gc3luY2hyb25vdXMgcGVyaW9kIGZhY3RvcgorCisgICAgc2V0c3luYyA8dGFyZ2V0PiA8cGVyaW9kIGZhY3Rvcj4KKworICAgIHRhcmdldDogICAgdGFyZ2V0IG51bWJlcgorICAgIHBlcmlvZDogICAgbWluaW11bSBzeW5jaHJvbm91cyBwZXJpb2QuCisgICAgICAgICAgICAgICBNYXhpbXVtIHNwZWVkID0gMTAwMC8oNCpwZXJpb2QgZmFjdG9yKSBleGNlcHQgZm9yIHNwZWNpYWwKKyAgICAgICAgICAgICAgIGNhc2VzIGJlbG93LgorCisgICAgU3BlY2lmeSBhIHBlcmlvZCBvZiAyNTUsIHRvIGZvcmNlIGFzeW5jaHJvbm91cyB0cmFuc2ZlciBtb2RlLgorCisgICAgICAxMCBtZWFucyAyNSBuYW5vLXNlY29uZHMgc3luY2hyb25vdXMgcGVyaW9kCisgICAgICAxMSBtZWFucyAzMCBuYW5vLXNlY29uZHMgc3luY2hyb25vdXMgcGVyaW9kCisgICAgICAxMiBtZWFucyA1MCBuYW5vLXNlY29uZHMgc3luY2hyb25vdXMgcGVyaW9kCisKKzguMiBTZXQgd2lkZSBzaXplCisKKyAgICBzZXR3aWRlIDx0YXJnZXQ+IDxzaXplPgorCisgICAgdGFyZ2V0OiAgICB0YXJnZXQgbnVtYmVyCisgICAgc2l6ZTogICAgICAwPTggYml0cywgMT0xNmJpdHMKKworOC4zIFNldCBtYXhpbXVtIG51bWJlciBvZiBjb25jdXJyZW50IHRhZ2dlZCBjb21tYW5kcworIAorICAgIHNldHRhZ3MgPHRhcmdldD4gPHRhZ3M+CisKKyAgICB0YXJnZXQ6ICAgIHRhcmdldCBudW1iZXIKKyAgICB0YWdzOiAgICAgIG51bWJlciBvZiBjb25jdXJyZW50IHRhZ2dlZCBjb21tYW5kcworICAgICAgICAgICAgICAgbXVzdCBub3QgYmUgZ3JlYXRlciB0aGFuIFNDU0lfTkNSX01BWF9UQUdTIChkZWZhdWx0OiA4KQorCis4LjQgU2V0IG9yZGVyIHR5cGUgZm9yIHRhZ2dlZCBjb21tYW5kCisKKyAgICBzZXRvcmRlciA8b3JkZXI+CisKKyAgICBvcmRlcjogICAgIDMgcG9zc2libGUgdmFsdWVzOgorICAgICAgICAgICAgICAgc2ltcGxlOiB1c2UgU0lNUExFIFRBRyBmb3IgYWxsIG9wZXJhdGlvbnMgKHJlYWQgYW5kIHdyaXRlKQorICAgICAgICAgICAgICAgb3JkZXJlZDogdXNlIE9SREVSRUQgVEFHIGZvciBhbGwgb3BlcmF0aW9ucworICAgICAgICAgICAgICAgZGVmYXVsdDogdXNlIGRlZmF1bHQgdGFnIHR5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICBTSU1QTEUgIFRBRyBmb3IgcmVhZCAgb3BlcmF0aW9ucworICAgICAgICAgICAgICAgICAgICAgICAgT1JERVJFRCBUQUcgZm9yIHdyaXRlIG9wZXJhdGlvbnMKKworCis4LjUgU2V0IGRlYnVnIG1vZGUKKworICAgIHNldGRlYnVnIDxsaXN0IG9mIGRlYnVnIGZsYWdzPgorCisgICAgQXZhaWxhYmxlIGRlYnVnIGZsYWdzOgorICAgICAgICBhbGxvYzogICBwcmludCBpbmZvIGFib3V0IG1lbW9yeSBhbGxvY2F0aW9ucyAoY2NiLCBsY2IpCisgICAgICAgIHF1ZXVlOiAgIHByaW50IGluZm8gYWJvdXQgaW5zZXJ0aW9ucyBpbnRvIHRoZSBjb21tYW5kIHN0YXJ0IHF1ZXVlCisgICAgICAgIHJlc3VsdDogIHByaW50IHNlbnNlIGRhdGEgb24gQ0hFQ0sgQ09ORElUSU9OIHN0YXR1cworICAgICAgICBzY2F0dGVyOiBwcmludCBpbmZvIGFib3V0IHRoZSBzY2F0dGVyIHByb2Nlc3MKKyAgICAgICAgc2NyaXB0czogcHJpbnQgaW5mbyBhYm91dCB0aGUgc2NyaXB0IGJpbmRpbmcgcHJvY2VzcworCXRpbnk6ICAgIHByaW50IG1pbmltYWwgZGVidWdnaW5nIGluZm9ybWF0aW9uCisJdGltaW5nOiAgcHJpbnQgdGltaW5nIGluZm9ybWF0aW9uIG9mIHRoZSBOQ1IgY2hpcAorCW5lZ286ICAgIHByaW50IGluZm9ybWF0aW9uIGFib3V0IFNDU0kgbmVnb3RpYXRpb25zCisJcGhhc2U6ICAgcHJpbnQgaW5mb3JtYXRpb24gb24gc2NyaXB0IGludGVycnVwdGlvbnMKKworICAgIFVzZSAic2V0ZGVidWciIHdpdGggbm8gYXJndW1lbnQgdG8gcmVzZXQgZGVidWcgZmxhZ3MuCisKKworOC42IENsZWFyIHByb2ZpbGUgY291bnRlcnMKKworICAgIGNsZWFycHJvZgorCisgICAgVGhlIHByb2ZpbGUgY291bnRlcnMgYXJlIGF1dG9tYXRpY2FsbHkgY2xlYXJlZCB3aGVuIHRoZSBhbW91bnQgb2YKKyAgICBkYXRhIHRyYW5zZmVycmVkIHJlYWNoZXMgMTAwMCBHQiBpbiBvcmRlciB0byBhdm9pZCBvdmVyZmxvdy4KKyAgICBUaGUgImNsZWFycHJvZiIgY29tbWFuZCBhbGxvd3MgeW91IHRvIGNsZWFyIHRoZXNlIGNvdW50ZXJzIGF0IGFueSB0aW1lLgorCisKKzguNyBTZXQgZmxhZyAobm9fZGlzYykKKyAKKyAgICBzZXRmbGFnIDx0YXJnZXQ+IDxmbGFnPgorCisgICAgdGFyZ2V0OiAgICB0YXJnZXQgbnVtYmVyCisKKyAgICBGb3IgdGhlIG1vbWVudCwgb25seSBvbmUgZmxhZyBpcyBhdmFpbGFibGU6CisKKyAgICAgICAgbm9fZGlzYzogICBub3QgYWxsb3cgdGFyZ2V0IHRvIGRpc2Nvbm5lY3QuCisKKyAgICBEbyBub3Qgc3BlY2lmeSBhbnkgZmxhZyBpbiBvcmRlciB0byByZXNldCB0aGUgZmxhZy4gRm9yIGV4YW1wbGU6CisgICAgLSBzZXRmbGFnIDQKKyAgICAgIHdpbGwgcmVzZXQgbm9fZGlzYyBmbGFnIGZvciB0YXJnZXQgNCwgc28gd2lsbCBhbGxvdyBpdCBkaXNjb25uZWN0aW9ucy4KKyAgICAtIHNldGZsYWcgYWxsCisgICAgICB3aWxsIGFsbG93IGRpc2Nvbm5lY3Rpb24gZm9yIGFsbCBkZXZpY2VzIG9uIHRoZSBTQ1NJIGJ1cy4KKworCis4LjggU2V0IHZlcmJvc2UgbGV2ZWwKKworICAgIHNldHZlcmJvc2UgI2xldmVsCisKKyAgICBUaGUgZHJpdmVyIGRlZmF1bHQgdmVyYm9zZSBsZXZlbCBpcyAxLiBUaGlzIGNvbW1hbmQgYWxsb3dzIHRvIGNoYW5nZSAKKyAgICB0aCBkcml2ZXIgdmVyYm9zZSBsZXZlbCBhZnRlciBib290LXVwLgorCis4LjkgUmVzZXQgYWxsIGxvZ2ljYWwgdW5pdHMgb2YgYSB0YXJnZXQKKworICAgIHJlc2V0ZGV2IDx0YXJnZXQ+CisKKyAgICB0YXJnZXQ6ICAgIHRhcmdldCBudW1iZXIKKyAgICBUaGUgZHJpdmVyIHdpbGwgdHJ5IHRvIHNlbmQgYSBCVVMgREVWSUNFIFJFU0VUIG1lc3NhZ2UgdG8gdGhlIHRhcmdldC4KKyAgICAoT25seSBzdXBwb3J0ZWQgYnkgdGhlIFNZTTUzQzhYWCBkcml2ZXIgYW5kIHByb3ZpZGVkIGZvciB0ZXN0IHB1cnBvc2UpCisKKzguMTAgQWJvcnQgYWxsIHRhc2tzIG9mIGFsbCBsb2dpY2FsIHVuaXRzIG9mIGEgdGFyZ2V0CisKKyAgICBjbGVhcmRldiA8dGFyZ2V0PgorCisgICAgdGFyZ2V0OiAgICB0YXJnZXQgbnVtYmVyCisgICAgVGhlIGRyaXZlciB3aWxsIHRyeSB0byBzZW5kIGEgQUJPUlQgbWVzc2FnZSB0byBhbGwgdGhlIGxvZ2ljYWwgdW5pdHMgCisgICAgb2YgdGhlIHRhcmdldC4KKyAgICAoT25seSBzdXBwb3J0ZWQgYnkgdGhlIFNZTTUzQzhYWCBkcml2ZXIgYW5kIHByb3ZpZGVkIGZvciB0ZXN0IHB1cnBvc2UpCisKKworOS4gQ29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzCisKK0lmIHRoZSBmaXJtd2FyZSBvZiBhbGwgeW91ciBkZXZpY2VzIGlzIHBlcmZlY3QgZW5vdWdoLCBhbGwgdGhlCitmZWF0dXJlcyBzdXBwb3J0ZWQgYnkgdGhlIGRyaXZlciBjYW4gYmUgZW5hYmxlZCBhdCBzdGFydC11cC4gIEhvd2V2ZXIsCitpZiBvbmx5IG9uZSBoYXMgYSBmbGF3IGZvciBzb21lIFNDU0kgZmVhdHVyZSwgeW91IGNhbiBkaXNhYmxlIHRoZQorc3VwcG9ydCBieSB0aGUgZHJpdmVyIG9mIHRoaXMgZmVhdHVyZSBhdCBsaW51eCBzdGFydC11cCBhbmQgZW5hYmxlCit0aGlzIGZlYXR1cmUgYWZ0ZXIgYm9vdC11cCBvbmx5IGZvciBkZXZpY2VzIHRoYXQgc3VwcG9ydCBpdCBzYWZlbHkuCisKK0NPTkZJR19TQ1NJX05DUjUzQzhYWF9QUk9GSUxFX1NVUFBPUlQgIChkZWZhdWx0IGFuc3dlcjogbikKKyAgICBUaGlzIG9wdGlvbiBtdXN0IGJlIHNldCBmb3IgcHJvZmlsaW5nIGluZm9ybWF0aW9uIHRvIGJlIGdhdGhlcmVkIAorICAgIGFuZCBwcmludGVkIG91dCB0aHJvdWdoIHRoZSBwcm9jIGZpbGUgc3lzdGVtLiBUaGlzIGZlYXR1cmVzIG1heSAKKyAgICBpbXBhY3QgcGVyZm9ybWFuY2VzLgorCitDT05GSUdfU0NTSV9OQ1I1M0M4WFhfSU9NQVBQRUQgICAgICAgKGRlZmF1bHQgYW5zd2VyOiBuKQorICAgIEFuc3dlciAieSIgaWYgeW91IHN1c3BlY3QgeW91ciBtb3RoZXIgYm9hcmQgdG8gbm90IGFsbG93IG1lbW9yeSBtYXBwZWQgSS9PLgorICAgIE1heSBzbG93IGRvd24gcGVyZm9ybWFuY2UgYSBsaXR0bGUuICBUaGlzIG9wdGlvbiBpcyByZXF1aXJlZCBieQorICAgIExpbnV4L1BQQyBhbmQgaXMgdXNlZCBubyBtYXR0ZXIgd2hhdCB5b3Ugc2VsZWN0IGhlcmUuICBMaW51eC9QUEMKKyAgICBzdWZmZXJzIG5vIHBlcmZvcm1hbmNlIGxvc3Mgd2l0aCB0aGlzIG9wdGlvbiBzaW5jZSBhbGwgSU8gaXMgbWVtb3J5CisgICAgbWFwcGVkIGFueXdheS4KKworQ09ORklHX1NDU0lfTkNSNTNDOFhYX0RFRkFVTFRfVEFHUyAgICAoZGVmYXVsdCBhbnN3ZXI6IDgpCisgICAgRGVmYXVsdCB0YWdnZWQgY29tbWFuZCBxdWV1ZSBkZXB0aC4KKworQ09ORklHX1NDU0lfTkNSNTNDOFhYX01BWF9UQUdTICAgICAgICAgKGRlZmF1bHQgYW5zd2VyOiA4KQorICAgIFRoaXMgb3B0aW9uIGFsbG93cyB5b3UgdG8gc3BlY2lmeSB0aGUgbWF4aW11bSBudW1iZXIgb2YgdGFnZ2VkIGNvbW1hbmRzIAorICAgIHRoYXQgY2FuIGJlIHF1ZXVlZCB0byBhIGRldmljZS4gVGhlIG1heGltdW0gc3VwcG9ydGVkIHZhbHVlIGlzIDMyLgorCitDT05GSUdfU0NTSV9OQ1I1M0M4WFhfU1lOQyAgICAgICAgICAgIChkZWZhdWx0IGFuc3dlcjogNSkKKyAgICBUaGlzIG9wdGlvbiBhbGxvd3MgeW91IHRvIHNwZWNpZnkgdGhlIGZyZXF1ZW5jeSBpbiBNSHogdGhlIGRyaXZlciAKKyAgICB3aWxsIHVzZSBhdCBib290IHRpbWUgZm9yIHN5bmNocm9ub3VzIGRhdGEgdHJhbnNmZXIgbmVnb3RpYXRpb25zLgorICAgIFRoaXMgZnJlcXVlbmN5IGNhbiBiZSBjaGFuZ2VkIGxhdGVyIHdpdGggdGhlICJzZXRzeW5jIiBjb250cm9sIGNvbW1hbmQuCisgICAgMCBtZWFucyAiYXN5bmNocm9ub3VzIGRhdGEgdHJhbnNmZXJzIi4KKworQ09ORklHX1NDU0lfTkNSNTNDOFhYX0ZPUkNFX1NZTkNfTkVHTyAoZGVmYXVsdCBhbnN3ZXI6IG4pCisgICAgRm9yY2Ugc3luY2hyb25vdXMgbmVnb3RpYXRpb24gZm9yIGFsbCBTQ1NJLTIgZGV2aWNlcy4KKyAgICBTb21lIFNDU0ktMiBkZXZpY2VzIGRvIG5vdCByZXBvcnQgdGhpcyBmZWF0dXJlIGluIGJ5dGUgNyBvZiBpbnF1aXJ5IAorICAgIHJlc3BvbnNlIGJ1dCBkbyBzdXBwb3J0IGl0IHByb3Blcmx5IChUQU1BUkFDSyBzY2FubmVycyBmb3IgZXhhbXBsZSkuCisKK0NPTkZJR19TQ1NJX05DUjUzQzhYWF9OT19ESVNDT05ORUNUICAgKGRlZmF1bHQgYW5kIG9ubHkgcmVhc29uYWJsZSBhbnN3ZXI6IG4pCisgICAgSWYgeW91IHN1c3BlY3QgYSBkZXZpY2Ugb2YgeW91cnMgZG9lcyBub3QgcHJvcGVybHkgc3VwcG9ydCBkaXNjb25uZWN0aW9ucywKKyAgICB5b3UgY2FuIGFuc3dlciAieSIuIFRoZW4sIGFsbCBTQ1NJIGRldmljZXMgd2lsbCBuZXZlciBkaXNjb25uZWN0IHRoZSBidXMgCisgICAgZXZlbiB3aGlsZSBwZXJmb3JtaW5nIGxvbmcgU0NTSSBvcGVyYXRpb25zLgorCitDT05GSUdfU0NTSV9OQ1I1M0M4WFhfU1lNQklPU19DT01QQVQKKyAgICBHZW51aW5lIFNZTUJJT1MgYm9hcmRzIHVzZSBHUElPMCBpbiBvdXRwdXQgZm9yIGNvbnRyb2xsZXIgTEVEIGFuZCBHUElPMyAKKyAgICBiaXQgYXMgYSBmbGFnIGluZGljYXRpbmcgc2luZ2xlZC1lbmRlZC9kaWZmZXJlbnRpYWwgaW50ZXJmYWNlLgorICAgIElmIGFsbCB0aGUgYm9hcmRzIG9mIHlvdXIgc3lzdGVtIGFyZSBnZW51aW5lIFNZTUJJT1MgYm9hcmRzIG9yIHVzZQorICAgIEJJT1MgYW5kIGRyaXZlcnMgZnJvbSBTWU1CSU9TLCB5b3Ugd291bGQgd2FudCB0byBlbmFibGUgdGhpcyBvcHRpb24uCisgICAgVGhpcyBvcHRpb24gbXVzdCBOT1QgYmUgZW5hYmxlZCBpZiB5b3VyIHN5c3RlbSBoYXMgYXQgbGVhc3Qgb25lIDUzQzhYWCAKKyAgICBiYXNlZCBzY3NpIGJvYXJkIHdpdGggYSB2ZW5kb3Itc3BlY2lmaWMgQklPUy4KKyAgICBGb3IgZXhhbXBsZSwgVGVrcmFtIERDLTM5MC9VLCBEQy0zOTAvVyBhbmQgREMtMzkwL0Ygc2NzaSBjb250cm9sbGVycyAKKyAgICB1c2UgYSB2ZW5kb3Itc3BlY2lmaWMgQklPUyBhbmQgYXJlIGtub3duIHRvIG5vdCB1c2UgU1lNQklPUyBjb21wYXRpYmxlIAorICAgIEdQSU8gd2lyaW5nLiBTbywgdGhpcyBvcHRpb24gbXVzdCBub3QgYmUgZW5hYmxlZCBpZiB5b3VyIHN5c3RlbSBoYXMgCisgICAgc3VjaCBhIGJvYXJkIGluc3RhbGxlZC4KKworQ09ORklHX1NDU0lfTkNSNTNDOFhYX05WUkFNX0RFVEVDVAorICAgIEVuYWJsZSBzdXBwb3J0IGZvciByZWFkaW5nIHRoZSBzZXJpYWwgTlZSQU0gZGF0YSBvbiBTeW1iaW9zIGFuZAorICAgIHNvbWUgU3ltYmlvcyBjb21wYXRpYmxlIGNhcmRzLCBhbmQgVGVrcmFtIERDMzkwVy9VL0YgY2FyZHMuIFVzZWZ1bCBmb3IKKyAgICBzeXN0ZW1zIHdpdGggbW9yZSB0aGFuIG9uZSBTeW1iaW9zIGNvbXBhdGlibGUgY29udHJvbGxlciB3aGVyZSBhdCBsZWFzdAorICAgIG9uZSBoYXMgYSBzZXJpYWwgTlZSQU0sIG9yIGZvciBhIHN5c3RlbSB3aXRoIGEgbWl4dHVyZSBvZiBTeW1iaW9zIGFuZAorICAgIFRla3JhbSBjYXJkcy4gRW5hYmxlcyBzZXR0aW5nIHRoZSBib290IG9yZGVyIG9mIGhvc3QgYWRhcHRvcnMKKyAgICB0byBzb21ldGhpbmcgb3RoZXIgdGhhbiB0aGUgZGVmYXVsdCBvcmRlciBvciAicmV2ZXJzZSBwcm9iZSIgb3JkZXIuIAorICAgIEFsc28gZW5hYmxlcyBTeW1iaW9zIGFuZCBUZWtyYW0gY2FyZHMgdG8gYmUgZGlzdGluZ3Vpc2hlZCBzbworICAgIENPTkZJR19TQ1NJX05DUjUzQzhYWF9TWU1CSU9TX0NPTVBBVCBtYXkgYmUgc2V0IGluIGEgc3lzdGVtIHdpdGggYQorICAgIG1peHR1cmUgb2YgU3ltYmlvcyBhbmQgVGVrcmFtIGNhcmRzIHNvIHRoZSBTeW1iaW9zIGNhcmRzIGNhbiBtYWtlIHVzZSBvZgorICAgIHRoZSBmdWxsIHJhbmdlIG9mIFN5bWJpb3MgZmVhdHVyZXMsIGRpZmZlcmVudGlhbCwgbGVkIHBpbiwgd2l0aG91dAorICAgIGNhdXNpbmcgcHJvYmxlbXMgZm9yIHRoZSBUZWtyYW0gY2FyZChzKS4KKworMTAuIEJvb3Qgc2V0dXAgY29tbWFuZHMKKworMTAuMSBTeW50YXgKKworU2V0dXAgY29tbWFuZHMgY2FuIGJlIHBhc3NlZCB0byB0aGUgZHJpdmVyIGVpdGhlciBhdCBib290IHRpbWUgb3IgYXMgYSAKK3N0cmluZyB2YXJpYWJsZSB1c2luZyAnaW5zbW9kJy4KKworQSBib290IHNldHVwIGNvbW1hbmQgZm9yIHRoZSBuY3I1M2M4eHggKHN5bTUzYzh4eCkgZHJpdmVyIGJlZ2lucyB3aXRoIHRoZSAKK2RyaXZlciBuYW1lICJuY3I1M2M4eHg9IihzeW01M2M4eHgpLiBUaGUga2VybmVsIHN5bnRheCBwYXJzZXIgdGhlbiBleHBlY3RzIAorYW4gb3B0aW9ubmFsIGxpc3Qgb2YgaW50ZWdlcnMgc2VwYXJhdGVkIHdpdGggY29tbWEgZm9sbG93ZWQgYnkgYW4gb3B0aW9uYWwgCitsaXN0IG9mICBjb21tYS1zZXBhcmF0ZWQgc3RyaW5ncy4gRXhhbXBsZSBvZiBib290IHNldHVwIGNvbW1hbmQgdW5kZXIgbGlsbyAKK3Byb21wdDoKKworbGlsbzogbGludXggcm9vdD0vZGV2L2hkYTIgbmNyNTNjOHh4PXRhZ3M6NCxzeW5jOjEwLGRlYnVnOjB4MjAwCisKKy0gZW5hYmxlIHRhZ2dlZCBjb21tYW5kcywgdXAgdG8gNCB0YWdnZWQgY29tbWFuZHMgcXVldWVkLgorLSBzZXQgc3luY2hyb25vdXMgbmVnb3RpYXRpb24gc3BlZWQgdG8gMTAgTWVnYS10cmFuc2ZlcnMgLyBzZWNvbmQuCistIHNldCBERUJVR19ORUdPIGZsYWcuCisKK1NpbmNlIGNvbW1hIHNlZW1zIG5vdCB0byBiZSBhbGxvd2VkIHdoZW4gZGVmaW5pbmcgYSBzdHJpbmcgdmFyaWFibGUgdXNpbmcgIAorJ2luc21vZCcsIHRoZSBkcml2ZXIgYWxzbyBhY2NlcHRzIDxzcGFjZT4gYXMgb3B0aW9uIHNlcGFyYXRvci4gCitUaGUgZm9sbG93aW5nIGNvbW1hbmQgd2lsbCBpbnN0YWxsIGRyaXZlciBtb2R1bGUgd2l0aCB0aGUgc2FtZSBvcHRpb25zIGFzIAorYWJvdmUuCisKKyAgICBpbnNtb2QgbmNyNTNjOHh4Lm8gbmNyNTNjOHh4PSJ0YWdzOjQgc3luYzoxMCBkZWJ1ZzoweDIwMCIKKworRm9yIHRoZSBtb21lbnQsIHRoZSBpbnRlZ2VyIGxpc3Qgb2YgYXJndW1lbnRzIGlzIGRpc2NhcmRlZCBieSB0aGUgZHJpdmVyLiAKK0l0IHdpbGwgYmUgdXNlZCBpbiB0aGUgZnV0dXJlIGluIG9yZGVyIHRvIGFsbG93IGEgcGVyIGNvbnRyb2xsZXIgc2V0dXAuCisKK0VhY2ggc3RyaW5nIGFyZ3VtZW50IG11c3QgYmUgc3BlY2lmaWVkIGFzICJrZXl3b3JkOnZhbHVlIi4gT25seSBsb3dlci1jYXNlIAorY2hhcmFjdGVycyBhbmQgZGlnaXRzIGFyZSBhbGxvd2VkLgorCitJbiBhIHN5c3RlbSB0aGF0IGNvbnRhaW5zIG11bHRpcGxlIDUzQzh4eCBhZGFwdGVycyBpbnNtb2Qgd2lsbCBpbnN0YWxsIHRoZSAKK3NwZWNpZmllZCBkcml2ZXIgb24gZWFjaCBhZGFwdGVyLiBUbyBleGNsdWRlIGEgY2hpcCB1c2UgdGhlICdleGNsJyBrZXl3b3JkLgorCitUaGUgc2VxdWVuY2Ugb2YgY29tbWFuZHMsIAorCisgICAgaW5zbW9kIHN5bTUzYzh4eCBzeW01M2M4eHg9ZXhjbDoweDE0MDAKKyAgICBpbnNtb2QgbmNyNTNjOHh4CisKK2luc3RhbGxzIHRoZSBzeW01M2M4eHggZHJpdmVyIG9uIGFsbCBhZGFwdGVycyBleGNlcHQgdGhlIG9uZSBhdCBJTyBwb3J0IAorYWRkcmVzcyAweDE0MDAgYW5kIHRoZW4gaW5zdGFsbHMgdGhlIG5jcjUzYzh4eCBkcml2ZXIgdG8gdGhlIGFkYXB0ZXIgYXQgSU8gCitwb3J0IGFkZHJlc3MgMHgxNDAwLgorCisKKzEwLjIgQXZhaWxhYmxlIGFyZ3VtZW50cworCisxMC4yLjEgIE1hc3RlciBwYXJpdHkgY2hlY2tpbmcKKyAgICAgICAgbXBhcjp5ICAgICBlbmFibGVkCisgICAgICAgIG1wYXI6biAgICAgZGlzYWJsZWQKKworMTAuMi4yICBTY3NpIHBhcml0eSBjaGVja2luZworICAgICAgICBzcGFyOnkgICAgIGVuYWJsZWQKKyAgICAgICAgc3BhcjpuICAgICBkaXNhYmxlZAorCisxMC4yLjMgIFNjc2kgZGlzY29ubmVjdGlvbnMKKyAgICAgICAgZGlzYzp5ICAgICBlbmFibGVkCisgICAgICAgIGRpc2M6biAgICAgZGlzYWJsZWQKKyAKKzEwLjIuNCAgU3BlY2lhbCBmZWF0dXJlcworICAgT25seSBhcHBseSB0byA4MTBBLCA4MjVBLCA4NjAsIDg3NSBhbmQgODk1IGNvbnRyb2xsZXJzLgorICAgSGF2ZSBubyBlZmZlY3Qgd2l0aCBvdGhlciBvbmVzLgorICAgICAgICBzcGVjZjp5ICAgIChvciAxKSBlbmFibGVkCisgICAgICAgIHNwZWNmOm4gICAgKG9yIDApIGRpc2FibGVkCisgICAgICAgIHNwZWNmOjMgICAgICAgICAgIGVuYWJsZWQgZXhjZXB0IE1lbW9yeSBXcml0ZSBBbmQgSW52YWxpZGF0ZQorICAgVGhlIGRlZmF1bHQgZHJpdmVyIHNldHVwIGlzICdzcGVjZjozJy4gQXMgYSBjb25zZXF1ZW5jZSwgb3B0aW9uICdzcGVjZjp5JyAKKyAgIG11c3QgYmUgc3BlY2lmaWVkIGluIHRoZSBib290IHNldHVwIGNvbW1hbmQgdG8gZW5hYmxlIE1lbW9yeSBXcml0ZSBBbmQgCisgICBJbnZhbGlkYXRlLgorCisxMC4yLjUgIFVsdHJhIFNDU0kgc3VwcG9ydAorICAgT25seSBhcHBseSB0byA4NjAsIDg3NSwgODk1LCA4OTVhLCA4OTYsIDEwMTAgYW5kIDEwMTBfNjYgY29udHJvbGxlcnMuCisgICBIYXZlIG5vIGVmZmVjdCB3aXRoIG90aGVyIG9uZXMuCisgICAgICAgIHVsdHJhOm4gICAgQWxsIHVsdHJhIHNwZWVkcyBlbmFibGVkCisgICAgICAgIHVsdHJhOjIgICAgVWx0cmEyIGVuYWJsZWQKKyAgICAgICAgdWx0cmE6MSAgICBVbHRyYSBlbmFibGVkCisgICAgICAgIHVsdHJhOjAgICAgVWx0cmEgc3BlZWRzIGRpc2FibGVkCisKKzEwLjIuNiAgRGVmYXVsdCBudW1iZXIgb2YgdGFnZ2VkIGNvbW1hbmRzCisgICAgICAgIHRhZ3M6MCAgICAgKG9yIHRhZ3M6MSApIHRhZ2dlZCBjb21tYW5kIHF1ZXVpbmcgZGlzYWJsZWQKKyAgICAgICAgdGFnczojdGFncyAoI3RhZ3MgID4gMSkgdGFnZ2VkIGNvbW1hbmQgcXVldWluZyBlbmFibGVkCisgICN0YWdzIHdpbGwgYmUgdHJ1bmNhdGVkIHRvIHRoZSBtYXggcXVldWVkIGNvbW1hbmRzIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVyLgorICBUaGlzIG9wdGlvbiBhbHNvIGFsbG93cyB0byBzcGVjaWZ5IGEgY29tbWFuZCBxdWV1ZSBkZXB0aCBmb3IgZWFjaCBkZXZpY2UgCisgIHRoYXQgc3VwcG9ydCB0YWdnZWQgY29tbWFuZCBxdWV1ZWluZy4KKyAgRXhhbXBsZToKKyAgICAgIG5jcjUzYzh4eD10YWdzOjEwL3QydDNxMTYtdDVxMjQvdDF1MnEzMgorICAgICAgICAgICAgICAgd2lsbCBzZXQgZGV2aWNlcyBxdWV1ZSBkZXB0aCBhcyBmb2xsb3c6CisgICAgICAtIGNvbnRyb2xsZXIgIzAgdGFyZ2V0ICMyIGFuZCB0YXJnZXQgIzMgICAgICAgICAgICAgICAgICAtPiAxNiBjb21tYW5kcywKKyAgICAgIC0gY29udHJvbGxlciAjMCB0YXJnZXQgIzUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+IDI0IGNvbW1hbmRzLAorICAgICAgLSBjb250cm9sbGVyICMxIHRhcmdldCAjMSBsb2dpY2FsIHVuaXQgIzIgICAgICAgICAgICAgICAgLT4gMzIgY29tbWFuZHMsCisgICAgICAtIGFsbCBvdGhlciBsb2dpY2FsIHVuaXRzIChhbGwgdGFyZ2V0cywgYWxsIGNvbnRyb2xsZXJzKSAtPiAxMCBjb21tYW5kcy4KKworMTAuMi43ICBEZWZhdWx0IHN5bmNocm9ub3VzIHBlcmlvZCBmYWN0b3IKKyAgICAgICAgc3luYzoyNTUgICAgIGRpc2FibGVkIChhc3luY2hyb25vdXMgdHJhbnNmZXIgbW9kZSkKKyAgICAgICAgc3luYzojZmFjdG9yCisgICNmYWN0b3IgPSAxMCAgICAgVWx0cmEtMiBTQ1NJIDQwIE1lZ2EtdHJhbnNmZXJzIC8gc2Vjb25kCisgICNmYWN0b3IgPSAxMSAgICAgVWx0cmEtMiBTQ1NJIDMzIE1lZ2EtdHJhbnNmZXJzIC8gc2Vjb25kCisgICNmYWN0b3IgPCAyNSAgICAgVWx0cmEgICBTQ1NJIDIwIE1lZ2EtdHJhbnNmZXJzIC8gc2Vjb25kCisgICNmYWN0b3IgPCA1MCAgICAgRmFzdCAgICBTQ1NJLTIKKworICBJbiBhbGwgY2FzZXMsIHRoZSBkcml2ZXIgd2lsbCB1c2UgdGhlIG1pbmltdW0gdHJhbnNmZXIgcGVyaW9kIHN1cHBvcnRlZCBieSAKKyAgY29udHJvbGxlcnMgYWNjb3JkaW5nIHRvIE5DUjUzQzhYWCBjaGlwIHR5cGUuCisKKzEwLjIuOCAgTmVnb3RpYXRlIHN5bmNocm9ub3VzIHdpdGggYWxsIGRldmljZXMKKyAgICAgICAgKGZvcmNlIHN5bmMgbmVnbykKKyAgICAgICAgZnNuOnkgICAgICBlbmFibGVkCisgICAgICAgIGZzbjpuICAgICAgZGlzYWJsZWQKKworMTAuMi45ICBWZXJib3NpdHkgbGV2ZWwKKyAgICAgICAgdmVyYjowICAgICBtaW5pbWFsCisgICAgICAgIHZlcmI6MSAgICAgbm9ybWFsCisgICAgICAgIHZlcmI6MiAgICAgdG9vIG11Y2gKKworMTAuMi4xMCBEZWJ1ZyBtb2RlCisgICAgICAgIGRlYnVnOjAJIGNsZWFyIGRlYnVnIGZsYWdzCisgICAgICAgIGRlYnVnOiN4ICAgc2V0IGRlYnVnIGZsYWdzCisgICN4IGlzIGFuIGludGVnZXIgdmFsdWUgY29tYmluaW5nIHRoZSBmb2xsb3dpbmcgcG93ZXItb2YtMiB2YWx1ZXM6CisgIERFQlVHX0FMTE9DICAgICAgIDB4MQorICBERUJVR19QSEFTRSAgICAgICAweDIKKyAgREVCVUdfUE9MTCAgICAgICAgMHg0CisgIERFQlVHX1FVRVVFICAgICAgIDB4OAorICBERUJVR19SRVNVTFQgICAgIDB4MTAKKyAgREVCVUdfU0NBVFRFUiAgICAweDIwCisgIERFQlVHX1NDUklQVCAgICAgMHg0MAorICBERUJVR19USU5ZICAgICAgIDB4ODAKKyAgREVCVUdfVElNSU5HICAgIDB4MTAwCisgIERFQlVHX05FR08gICAgICAweDIwMAorICBERUJVR19UQUdTICAgICAgMHg0MDAKKyAgREVCVUdfRlJFRVpFICAgIDB4ODAwCisgIERFQlVHX1JFU1RBUlQgIDB4MTAwMAorCisgIFlvdSBjYW4gcGxheSBzYWZlbHkgd2l0aCBERUJVR19ORUdPLiBIb3dldmVyLCBzb21lIG9mIHRoZXNlIGZsYWdzIG1heSAKKyAgZ2VuZXJhdGUgYnVuY2hlcyBvZiBzeXNsb2cgbWVzc2FnZXMuIAorCisxMC4yLjExIEJ1cnN0IG1heAorICAgICAgICBidXJzdDowICAgIGJ1cnN0IGRpc2FibGVkCisgICAgICAgIGJ1cnN0OjI1NSAgZ2V0IGJ1cnN0IGxlbmd0aCBmcm9tIGluaXRpYWwgSU8gcmVnaXN0ZXIgc2V0dGluZ3MuCisgICAgICAgIGJ1cnN0OiN4ICAgYnVyc3QgZW5hYmxlZCAoMTw8I3ggYnVyc3QgdHJhbnNmZXJzIG1heCkKKyAgI3ggaXMgYW4gaW50ZWdlciB2YWx1ZSB3aGljaCBpcyBsb2cgYmFzZSAyIG9mIHRoZSBidXJzdCB0cmFuc2ZlcnMgbWF4LgorICBUaGUgTkNSNTNDODc1IGFuZCBOQ1I1M0M4MjVBIHN1cHBvcnQgdXAgdG8gMTI4IGJ1cnN0IHRyYW5zZmVycyAoI3ggPSA3KS4KKyAgT3RoZXIgY2hpcHMgb25seSBzdXBwb3J0IHVwIHRvIDE2ICgjeCA9IDQpLgorICBUaGlzIGlzIGEgbWF4aW11bSB2YWx1ZS4gVGhlIGRyaXZlciBzZXQgdGhlIGJ1cnN0IGxlbmd0aCBhY2NvcmRpbmcgdG8gY2hpcCAKKyAgYW5kIHJldmlzaW9uIGlkcy4gQnkgZGVmYXVsdCB0aGUgZHJpdmVyIHVzZXMgdGhlIG1heGltdW0gdmFsdWUgc3VwcG9ydGVkIAorICBieSB0aGUgY2hpcC4KKworMTAuMi4xMiBMRUQgc3VwcG9ydAorICAgICAgICBsZWQ6MSAgICAgIGVuYWJsZSAgTEVEIHN1cHBvcnQKKyAgICAgICAgbGVkOjAgICAgICBkaXNhYmxlIExFRCBzdXBwb3J0CisgIERvbm5vdCBlbmFibGUgTEVEIHN1cHBvcnQgaWYgeW91ciBzY3NpIGJvYXJkIGRvZXMgbm90IHVzZSBTRE1TIEJJT1MuCisgIChTZWUgJ0NvbmZpZ3VyYXRpb24gcGFyYW1ldGVycycpCisKKzEwLjIuMTMgTWF4IHdpZGUKKyAgICAgICAgd2lkZToxICAgICAgd2lkZSBzY3NpIGVuYWJsZWQKKyAgICAgICAgd2lkZTowICAgICAgd2lkZSBzY3NpIGRpc2FibGVkCisgIFNvbWUgc2NzaSBib2FyZHMgdXNlIGEgODc1ICh1bHRyYSB3aWRlKSBhbmQgb25seSBzdXBwbHkgbmFycm93IGNvbm5lY3RvcnMuCisgIElmIHlvdSBoYXZlIGNvbm5lY3RlZCBhIHdpZGUgZGV2aWNlIHdpdGggYSA1MCBwaW5zIHRvIDY4IHBpbnMgY2FibGUgCisgIGNvbnZlcnRlciwgYW55IGFjY2VwdGVkIHdpZGUgbmVnb3RpYXRpb24gd2lsbCBicmVhayBmdXJ0aGVyIGRhdGEgdHJhbnNmZXJzLgorICBJbiBzdWNoIGEgY2FzZSwgdXNpbmcgIndpZGU6MCIgaW4gdGhlIGJvb3R1cCBjb21tYW5kIHdpbGwgYmUgaGVscGZ1bGwuIAorCisxMC4yLjE0IERpZmZlcmVudGlhbCBtb2RlCisgICAgICAgIGRpZmY6MAluZXZlciBzZXQgdXAgZGlmZiBtb2RlCisgICAgICAgIGRpZmY6MQlzZXQgdXAgZGlmZiBtb2RlIGlmIEJJT1Mgc2V0IGl0CisgICAgICAgIGRpZmY6MglhbHdheXMgc2V0IHVwIGRpZmYgbW9kZQorICAgICAgICBkaWZmOjMJc2V0IGRpZmYgbW9kZSBpZiBHUElPMyBpcyBub3Qgc2V0CisKKzEwLjIuMTUgSVJRIG1vZGUKKyAgICAgICAgaXJxbTowICAgICBhbHdheXMgb3BlbiBkcmFpbgorICAgICAgICBpcnFtOjEgICAgIHNhbWUgYXMgaW5pdGlhbCBzZXR0aW5ncyAoYXNzdW1lZCBCSU9TIHNldHRpbmdzKQorICAgICAgICBpcnFtOjIgICAgIGFsd2F5cyB0b3RlbSBwb2xlCisgICAgICAgIGlycW06MHgxMCAgZHJpdmVyIHdpbGwgbm90IHVzZSBTQV9TSElSUSBmbGFnIHdoZW4gcmVxdWVzdGluZyBpcnEKKyAgICAgICAgaXJxbToweDIwICBkcml2ZXIgd2lsbCBub3QgdXNlIFNBX0lOVEVSUlVQVCBmbGFnIHdoZW4gcmVxdWVzdGluZyBpcnEKKworICAgIChCaXRzIDB4MTAgYW5kIDB4MjAgY2FuIGJlIGNvbWJpbmVkIHdpdGggaGFyZHdhcmUgaXJxIG1vZGUgb3B0aW9uKQorCisxMC4yLjE2IFJldmVyc2UgcHJvYmUKKyAgICAgICAgcmV2cHJvYjpuICAgcHJvYmUgY2hpcCBpZHMgZnJvbSB0aGUgUENJIGNvbmZpZ3VyYXRpb24gaW4gdGhpcyBvcmRlcjoKKyAgICAgICAgICAgICAgICAgICAgODEwLCA4MTUsIDgyMCwgODYwLCA4NzUsIDg4NSwgODk1LCA4OTYKKyAgICAgICAgcmV2cHJvYjp5ICAgcHJvYmUgY2hpcCBpZHMgaW4gdGhlIHJldmVyc2Ugb3JkZXIuCisKKzEwLjIuMTcgRml4IHVwIFBDSSBjb25maWd1cmF0aW9uIHNwYWNlCisgICAgICAgIHBjaWZpeDo8b3B0aW9uIGJpdHM+CisKKyAgICBBdmFpbGFibGUgb3B0aW9uIGJpdHM6CisgICAgICAgIDB4MDogICBObyBhdHRlbXB0IHRvIGZpeCBQQ0kgY29uZmlndXJhdGlvbiBzcGFjZSByZWdpc3RlcnMgdmFsdWVzLgorICAgICAgICAweDE6ICAgU2V0IFBDSSBjYWNoZS1saW5lIHNpemUgcmVnaXN0ZXIgaWYgbm90IHNldC4KKyAgICAgICAgMHgyOiAgIFNldCB3cml0ZSBhbmQgaW52YWxpZGF0ZSBiaXQgaW4gUENJIGNvbW1hbmQgcmVnaXN0ZXIuCisgICAgICAgIDB4NDogICBJbmNyZWFzZSBpZiBuZWNlc3NhcnkgUENJIGxhdGVuY3kgdGltZXIgYWNjb3JkaW5nIHRvIGJ1cnN0IG1heC4KKworICAgIFVzZSAncGNpZml4OjcnIGluIG9yZGVyIHRvIGFsbG93IHRoZSBkcml2ZXIgdG8gZml4IHVwIGFsbCBQQ0kgZmVhdHVyZXMuCisKKzEwLjIuMTggU2VyaWFsIE5WUkFNCisgICAgICAgIG52cmFtOm4gICAgIGRvIG5vdCBsb29rIGZvciBzZXJpYWwgTlZSQU0KKyAgICAgICAgbnZyYW06eSAgICAgdGVzdCBjb250cm9sbGVycyBmb3Igb25ib2FyZCBzZXJpYWwgTlZSQU0KKyAgICAgICAgKGFsdGVybmF0ZSBiaW5hcnkgZm9ybSkKKyAgICAgICAgbXZyYW09PGJpdHMgb3B0aW9ucz4KKyAgICAgICAgMHgwMSAgIGxvb2sgZm9yIE5WUkFNICAoZXF1aXZhbGVudCB0byBudnJhbT15KQorICAgICAgICAweDAyICAgaWdub3JlIE5WUkFNICJTeW5jaHJvbm91cyBuZWdvdGlhdGlvbiIgcGFyYW1ldGVycyBmb3IgYWxsIGRldmljZXMKKyAgICAgICAgMHgwNCAgIGlnbm9yZSBOVlJBTSAiV2lkZSBuZWdvdGlhdGlvbiIgIHBhcmFtZXRlciBmb3IgYWxsIGRldmljZXMKKyAgICAgICAgMHgwOCAgIGlnbm9yZSBOVlJBTSAiU2NhbiBhdCBib290IHRpbWUiIHBhcmFtZXRlciBmb3IgYWxsIGRldmljZXMKKyAgICAgICAgMHg4MCAgIGFsc28gYXR0YWNoIGNvbnRyb2xsZXJzIHNldCB0byBPRkYgaW4gdGhlIE5WUkFNIChzeW01M2M4eHggb25seSkKKworMTAuMi4xOSBDaGVjayBTQ1NJIEJVUyAKKyAgICAgICAgYnVzY2hrOjxvcHRpb24gYml0cz4KKworICAgIEF2YWlsYWJsZSBvcHRpb24gYml0czoKKyAgICAgICAgMHgwOiAgIE5vIGNoZWNrLgorICAgICAgICAweDE6ICAgQ2hlY2sgYW5kIGRvIG5vdCBhdHRhY2ggdGhlIGNvbnRyb2xsZXIgb24gZXJyb3IuICAKKyAgICAgICAgMHgyOiAgIENoZWNrIGFuZCBqdXN0IHdhcm4gb24gZXJyb3IuCisgICAgICAgIDB4NDogICBEaXNhYmxlIFNDU0kgYnVzIGludGVncml0eSBjaGVja2luZy4KKworMTAuMi4yMCBFeGNsdWRlIGEgaG9zdCBmcm9tIGJlaW5nIGF0dGFjaGVkCisgICAgICAgIGV4Y2w9PGlvX2FkZHJlc3M+CisKKyAgICBQcmV2ZW50IGhvc3QgYXQgYSBnaXZlbiBpbyBhZGRyZXNzIGZyb20gYmVpbmcgYXR0YWNoZWQuCisgICAgRm9yIGV4YW1wbGUgJ25jcjUzYzh4eD1leGNsOjB4YjQwMCxleGNsOjB4YzAwMCcgaW5kaWNhdGUgdG8gdGhlIAorICAgIG5jcjUzYzh4eCBkcml2ZXIgbm90IHRvIGF0dGFjaCBob3N0cyBhdCBhZGRyZXNzIDB4YjQwMCBhbmQgMHhjMDAwLgorCisxMC4yLjIxIFN1Z2dlc3QgYSBkZWZhdWx0IFNDU0kgaWQgZm9yIGhvc3RzCisgICAgICAgIGhvc3RpZDoyNTUJbm8gaWQgc3VnZ2VzdGVkLgorICAgICAgICBob3N0aWQ6I3ggICAoMCA8IHggPCA3KSB4IHN1Z2dlc3RlZCBmb3IgaG9zdHMgU0NTSSBpZC4KKworICAgIElmIGEgaG9zdCBTQ1NJIGlkIGlzIGF2YWlsYWJsZSBmcm9tIHRoZSBOVlJBTSwgdGhlIGRyaXZlciB3aWxsIGlnbm9yZSAKKyAgICBhbnkgdmFsdWUgc3VnZ2VzdGVkIGFzIGJvb3Qgb3B0aW9uLiBPdGhlcndpc2UsIGlmIGEgc3VnZ2VzdGVkIHZhbHVlIAorICAgIGRpZmZlcmVudCBmcm9tIDI1NSBoYXMgYmVlbiBzdXBwbGllZCwgaXQgd2lsbCB1c2UgaXQuIE90aGVyd2lzZSwgaXQgd2lsbCAKKyAgICB0cnkgdG8gZGVkdWNlIHRoZSB2YWx1ZSBwcmV2aW91c2x5IHNldCBpbiB0aGUgaGFyZHdhcmUgYW5kIHVzZSB2YWx1ZSAKKyAgICA3IGlmIHRoZSBoYXJkd2FyZSB2YWx1ZSBpcyB6ZXJvLgorCisxMC4yLjIyIEVuYWJsZSB1c2Ugb2YgSU1NRURJQVRFIEFSQklUUkFUSU9OCisgICAgICAgIChvbmx5IHN1cHBvcnRlZCBieSB0aGUgc3ltNTNjOHh4IGRyaXZlci4gU2VlIDEwLjcgZm9yIG1vcmUgZGV0YWlscykKKyAgICAgICAgaWFyYjowICAgIGRvIG5vdCB1c2UgdGhpcyBmZWF0dXJlLgorICAgICAgICBpYXJiOiN4ICAgdXNlIHRoaXMgZmVhdHVyZSBhY2NvcmRpbmcgdG8gYml0IGZpZWxkcyBhcyBmb2xsb3c6CisKKyAgICBiaXQgMCAoMSkgOiBlbmFibGUgSUFSQiBlYWNoIHRpbWUgdGhlIGluaXRpYXRvciBoYXMgYmVlbiByZXNlbGVjdGVkIAorICAgICAgICAgICAgICAgIHdoZW4gaXQgYXJiaXRyYXRlZCBmb3IgdGhlIFNDU0kgQlVTLgorICAgICgjeCA+PiA0KSA6IG1heGltdW0gbnVtYmVyIG9mIHN1Y2Nlc3NpdmUgc2V0dGluZ3Mgb2YgSUFSQiBpZiB0aGUgaW5pdGlhdG9yIAorICAgICAgICAgICAgICAgIHdpbiBhcmJpdHJhdGlvbiBhbmQgaXQgaGFzIG90aGVyIGNvbW1hbmRzIHRvIHNlbmQgdG8gYSBkZXZpY2UuCisKK0Jvb3QgZmFpbCBzYWZlCisgICAgc2FmZTp5CWxvYWQgdGhlIGZvbGxvd2luZyBhc3N1bWVkIGZhaWwgc2FmZSBpbml0aWFsIHNldHVwCisKKyAgbWFzdGVyIHBhcml0eQkJCWRpc2FibGVkCQltcGFyOm4KKyAgc2NzaSBwYXJpdHkJCQllbmFibGVkCQkJc3Bhcjp5CisgIGRpc2Nvbm5lY3Rpb25zCQlub3QgYWxsb3dlZAkJZGlzYzpuCisgIHNwZWNpYWwgZmVhdHVyZXMJCWRpc2FibGVkCQlzcGVjZjpuCisgIHVsdHJhIHNjc2kJCQlkaXNhYmxlZAkJdWx0cmE6bgorICBmb3JjZSBzeW5jIG5lZ290aWF0aW9uCWRpc2FibGVkCQlmc246bgorICByZXZlcnNlIHByb2JlCQkJZGlzYWJsZWQJCXJldnByb2I6bgorICBQQ0kgZml4IHVwICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZCAgICAgICAgICAgICAgICBwY2lmaXg6MAorICBzZXJpYWwgTlZSQU0gICAgICAgICAgICAgICAgICBlbmFibGVkICAgICAgICAgICAgICAgICBudnJhbTp5CisgIHZlcmJvc2l0eSBsZXZlbAkJMgkJCXZlcmI6MgorICB0YWdnZWQgY29tbWFuZCBxdWV1aW5nCWRpc2FibGVkCQl0YWdzOjAKKyAgc3luY2hyb25vdXMgbmVnb3RpYXRpb24JZGlzYWJsZWQJCXN5bmM6MjU1CisgIGRlYnVnIGZsYWdzCQkJbm9uZQkJCWRlYnVnOjAKKyAgYnVyc3QgbGVuZ3RoCQkJZnJvbSBCSU9TIHNldHRpbmdzCWJ1cnN0OjI1NQorICBMRUQgc3VwcG9ydAkJCWRpc2FibGVkCQlsZWQ6MAorICB3aWRlIHN1cHBvcnQJCQlkaXNhYmxlZAkJd2lkZTowCisgIHNldHRsZSB0aW1lCQkJMTAgc2Vjb25kcwkJc2V0dGxlOjEwCisgIGRpZmZlcmVudGlhbCBzdXBwb3J0CQlmcm9tIEJJT1Mgc2V0dGluZ3MJZGlmZjoxCisgIGlycSBtb2RlCQkJZnJvbSBCSU9TIHNldHRpbmdzCWlycW06MQorICBTQ1NJIEJVUyBjaGVjawkJZG8gbm90IGF0dGFjaCBvbiBlcnJvcglidXNjaGs6MQorICBpbW1lZGlhdGUgYXJiaXRyYXRpb24JCWRpc2FibGVkCQlpYXJiOjAKKworMTAuMyBBZHZpc2VkIGJvb3Qgc2V0dXAgY29tbWFuZHMKKworSWYgdGhlIGRyaXZlciBoYXMgYmVlbiBjb25maWd1cmVkIHdpdGggZGVmYXVsdCBvcHRpb25zLCB0aGUgZXF1aXZhbGVudCAKK2Jvb3Qgc2V0dXAgaXM6CisKKyAgIG5jcjUzYzh4eD1tcGFyOnksc3Bhcjp5LGRpc2M6eSxzcGVjZjozLGZzbjpuLHVsdHJhOjIsZnNuOm4scmV2cHJvYjpuLHZlcmI6MVwKKyAgICAgICAgICAgICB0YWdzOjAsc3luYzo1MCxkZWJ1ZzowLGJ1cnN0OjcsbGVkOjAsd2lkZToxLHNldHRsZToyLGRpZmY6MCxpcnFtOjAKKworRm9yIGFuIGluc3RhbGxhdGlvbiBkaXNrZXR0ZSBvciBhIHNhZmUgYnV0IG5vdCBmYXN0IHN5c3RlbSwKK2Jvb3Qgc2V0dXAgY2FuIGJlOgorCisgICAgbmNyNTNjOHh4PXNhZmU6eSxtcGFyOnksZGlzYzp5CisgICAgbmNyNTNjOHh4PXNhZmU6eSxkaXNjOnkKKyAgICBuY3I1M2M4eHg9c2FmZTp5LG1wYXI6eQorICAgIG5jcjUzYzh4eD1zYWZlOnkKKworTXkgcGVyc29ubmFsIHN5c3RlbSB3b3JrcyBmbGF3bGVzc2x5IHdpdGggdGhlIGZvbGxvd2luZyBlcXVpdmFsZW50IHNldHVwOgorCisgICBuY3I1M2M4eHg9bXBhcjp5LHNwYXI6eSxkaXNjOnksc3BlY2Y6MSxmc246bix1bHRyYToyLGZzbjpuLHJldnByb2I6bix2ZXJiOjFcCisgICAgICAgICAgICAgdGFnczozMixzeW5jOjEyLGRlYnVnOjAsYnVyc3Q6NyxsZWQ6MSx3aWRlOjEsc2V0dGxlOjIsZGlmZjowLGlycW06MAorCitUaGUgZHJpdmVyIHByaW50cyBpdHMgYWN0dWFsIHNldHVwIHdoZW4gdmVyYm9zaXR5IGxldmVsIGlzIDIuIFlvdSBjYW4gdHJ5IAorIm5jcjUzYzh4eD12ZXJiOjIiIHRvIGdldCB0aGUgInN0YXRpYyIgc2V0dXAgb2YgdGhlIGRyaXZlciwgb3IgYWRkICJ2ZXJiOjIiIAordG8geW91ciBib290IHNldHVwIGNvbW1hbmQgaW4gb3JkZXIgdG8gY2hlY2sgdGhlIGFjdHVhbCBzZXR1cCB0aGUgZHJpdmVyIGlzIAordXNpbmcuCisKKzEwLjQgUENJIGNvbmZpZ3VyYXRpb24gZml4LXVwIGJvb3Qgb3B0aW9uCisKK3BjaWZpeDo8b3B0aW9uIGJpdHM+CisKK0F2YWlsYWJsZSBvcHRpb24gYml0czoKKyAgICAweDE6ICAgICBTZXQgUENJIGNhY2hlLWxpbmUgc2l6ZSByZWdpc3RlciBpZiBub3Qgc2V0LgorICAgIDB4MjogICAgIFNldCB3cml0ZSBhbmQgaW52YWxpZGF0ZSBiaXQgaW4gUENJIGNvbW1hbmQgcmVnaXN0ZXIuCisKK1VzZSAncGNpZml4OjMnIGluIG9yZGVyIHRvIGFsbG93IHRoZSBkcml2ZXIgdG8gZml4IGJvdGggUENJIGZlYXR1cmVzLgorCitUaGVzZSBvcHRpb25zIG9ubHkgYXBwbHkgdG8gbmV3IFNZTUJJT1MgY2hpcHMgODEwQSwgODI1QSwgODYwLCA4NzUgCithbmQgODk1IGFuZCBhcmUgb25seSBzdXBwb3J0ZWQgZm9yIFBlbnRpdW0gYW5kIDQ4NiBjbGFzcyBwcm9jZXNzb3JzLgorUmVjZW50IFNZTUJJT1MgNTNDOFhYIHNjc2kgcHJvY2Vzc29ycyBhcmUgYWJsZSB0byB1c2UgUENJIHJlYWQgbXVsdGlwbGUgCithbmQgUENJIHdyaXRlIGFuZCBpbnZhbGlkYXRlIGNvbW1hbmRzLiBUaGVzZSBmZWF0dXJlcyByZXF1aXJlIHRoZSAKK2NhY2hlIGxpbmUgc2l6ZSByZWdpc3RlciB0byBiZSBwcm9wZXJseSBzZXQgaW4gdGhlIFBDSSBjb25maWd1cmF0aW9uIAorc3BhY2Ugb2YgdGhlIGNoaXBzLiBPbiB0aGUgb3RoZXIgaGFuZCwgY2hpcHMgd2lsbCB1c2UgUENJIHdyaXRlIGFuZCAKK2ludmFsaWRhdGUgY29tbWFuZHMgb25seSBpZiB0aGUgY29ycmVzcG9uZGluZyBiaXQgaXMgc2V0IHRvIDEgaW4gdGhlIAorUENJIGNvbW1hbmQgcmVnaXN0ZXIuCisKK05vdCBhbGwgUENJIGJpb3NlcyBzZXQgdGhlIFBDSSBjYWNoZSBsaW5lIHJlZ2lzdGVyIGFuZCB0aGUgUENJIHdyaXRlIGFuZCAKK2ludmFsaWRhdGUgYml0IGluIHRoZSBQQ0kgY29uZmlndXJhdGlvbiBzcGFjZSBvZiA1M0M4WFggY2hpcHMuCitPcHRpbWl6ZWQgUENJIGFjY2Vzc2VzIG1heSBiZSBicm9rZW4gZm9yIHNvbWUgUENJL21lbW9yeSBjb250cm9sbGVycyBvciAKK21ha2UgcHJvYmxlbXMgd2l0aCBzb21lIFBDSSBib2FyZHMuCisKK1RoaXMgZml4LXVwIHdvcmtlZCBmbGF3bGVzc2x5IG9uIG15IHByZXZpb3VzIHN5c3RlbS4KKyhNQiBUcml0b24gSFggLyA1M0M4NzUgLyA1M0M4MTBBKQorSSB1c2UgdGhlc2Ugb3B0aW9ucyBhdCBteSBvd24gcmlza3MgYXMgeW91IHdpbGwgZG8gaWYgeW91IGRlY2lkZSB0byAKK3VzZSB0aGVtIHRvby4KKworCisxMC41IFNlcmlhbCBOVlJBTSBzdXBwb3J0IGJvb3Qgb3B0aW9uCisKK252cmFtOm4gICAgIGRvIG5vdCBsb29rIGZvciBzZXJpYWwgTlZSQU0KK252cmFtOnkgICAgIHRlc3QgY29udHJvbGxlcnMgZm9yIG9uYm9hcmQgc2VyaWFsIE5WUkFNCisKK1RoaXMgb3B0aW9uIGNhbiBhbHNvIGJlZW4gZW50ZXJlZCBhcyBhbiBoZXhhZGVjaW1hbCB2YWx1ZSB0aGF0IGFsbG93cyAKK3RvIGNvbnRyb2wgd2hhdCBpbmZvcm1hdGlvbiB0aGUgZHJpdmVyIHdpbGwgZ2V0IGZyb20gdGhlIE5WUkFNIGFuZCB3aGF0IAoraW5mb3JtYXRpb24gaXQgd2lsbCBpZ25vcmUuCitGb3IgZGV0YWlscyBzZWUgJzE3LiBTZXJpYWwgTlZSQU0gc3VwcG9ydCcuCisKK1doZW4gdGhpcyBvcHRpb24gaXMgZW5hYmxlZCwgdGhlIGRyaXZlciB0cmllcyB0byBkZXRlY3QgYWxsIGJvYXJkcyB1c2luZyAKK2EgU2VyaWFsIE5WUkFNLiBUaGlzIG1lbW9yeSBpcyB1c2VkIHRvIGhvbGQgdXNlciBzZXQgdXAgcGFyYW1ldGVycy4KKworVGhlIHBhcmFtZXRlcnMgdGhlIGRyaXZlciBpcyBhYmxlIHRvIGdldCBmcm9tIHRoZSBOVlJBTSBkZXBlbmQgb24gdGhlIAorZGF0YSBmb3JtYXQgdXNlZCwgYXMgZm9sbG93OgorCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUZWtyYW0gZm9ybWF0ICAgICAgU3ltYmlvcyBmb3JtYXQKK0dlbmVyYWwgYW5kIGhvc3QgcGFyYW1ldGVycworICAgIEJvb3Qgb3JkZXIgICAgICAgICAgICAgICAgICAgICAgICAgTiAgICAgICAgICAgICAgICAgICBZCisgICAgSG9zdCBTQ1NJIElEICAgICAgICAgICAgICAgICAgICAgICBZICAgICAgICAgICAgICAgICAgIFkKKyAgICBTQ1NJIHBhcml0eSBjaGVja2luZyAgICAgICAgICAgICAgIFkgICAgICAgICAgICAgICAgICAgWQorICAgIFZlcmJvc2UgYm9vdCBtZXNzYWdlcyAgICAgICAgICAgICAgTiAgICAgICAgICAgICAgICAgICBZCitTQ1NJIGRldmljZXMgcGFyYW1ldGVycworICAgIFN5bmNocm9ub3VzIHRyYW5zZmVyIHNwZWVkICAgICAgICAgWSAgICAgICAgICAgICAgICAgICBZCisgICAgV2lkZSAxNiAvIE5hcnJvdyAgICAgICAgICAgICAgICAgICBZICAgICAgICAgICAgICAgICAgIFkKKyAgICBUYWdnZWQgQ29tbWFuZCBRdWV1aW5nIGVuYWJsZWQgICAgIFkgICAgICAgICAgICAgICAgICAgWQorICAgIERpc2Nvbm5lY3Rpb25zIGVuYWJsZWQgICAgICAgICAgICAgWSAgICAgICAgICAgICAgICAgICBZCisgICAgU2NhbiBhdCBib290IHRpbWUgICAgICAgICAgICAgICAgICBOICAgICAgICAgICAgICAgICAgIFkKKworSW4gb3JkZXIgdG8gc3BlZWQgdXAgdGhlIHN5c3RlbSBib290LCBmb3IgZWFjaCBkZXZpY2UgY29uZmlndXJlZCB3aXRob3V0IAordGhlICJzY2FuIGF0IGJvb3QgdGltZSIgb3B0aW9uLCB0aGUgZHJpdmVyIGZvcmNlcyBhbiBlcnJvciBvbiB0aGUgCitmaXJzdCBURVNUIFVOSVQgUkVBRFkgY29tbWFuZCByZWNlaXZlZCBmb3IgdGhpcyBkZXZpY2UuCisKK1NvbWUgU0RNUyBCSU9TIHJldmlzaW9ucyBzZWVtIHRvIGJlIHVuYWJsZSB0byBib290IGNsZWFubHkgd2l0aCB2ZXJ5IGZhc3QgCitoYXJkIGRpc2tzLiBJbiBzdWNoIGEgc2l0dWF0aW9uIHlvdSBjYW5ub3QgY29uZmlndXJlIHRoZSBOVlJBTSB3aXRoIAorb3B0aW1pemVkIHBhcmFtZXRlcnMgdmFsdWUuCisKK1RoZSAnbnZyYW0nIGJvb3Qgb3B0aW9uIGNhbiBiZSBlbnRlcmVkIGluIGhleGFkZWNpbWFsIGZvcm0gaW4gb3JkZXIgCit0byBpZ25vcmUgc29tZSBvcHRpb25zIGNvbmZpZ3VyZWQgaW4gdGhlIE5WUkFNLCBhcyBmb2xsb3c6CisKK212cmFtPTxiaXRzIG9wdGlvbnM+CisgICAgICAweDAxICAgbG9vayBmb3IgTlZSQU0gIChlcXVpdmFsZW50IHRvIG52cmFtPXkpCisgICAgICAweDAyICAgaWdub3JlIE5WUkFNICJTeW5jaHJvbm91cyBuZWdvdGlhdGlvbiIgcGFyYW1ldGVycyBmb3IgYWxsIGRldmljZXMKKyAgICAgIDB4MDQgICBpZ25vcmUgTlZSQU0gIldpZGUgbmVnb3RpYXRpb24iICBwYXJhbWV0ZXIgZm9yIGFsbCBkZXZpY2VzCisgICAgICAweDA4ICAgaWdub3JlIE5WUkFNICJTY2FuIGF0IGJvb3QgdGltZSIgcGFyYW1ldGVyIGZvciBhbGwgZGV2aWNlcworICAgICAgMHg4MCAgIGFsc28gYXR0YWNoIGNvbnRyb2xsZXJzIHNldCB0byBPRkYgaW4gdGhlIE5WUkFNIChzeW01M2M4eHggb25seSkKKworT3B0aW9uIDB4ODAgaXMgb25seSBzdXBwb3J0ZWQgYnkgdGhlIHN5bTUzYzh4eCBkcml2ZXIgYW5kIGlzIGRpc2FibGVkIGJ5IAorZGVmYXVsdC4gUmVzdWx0IGlzIHRoYXQsIGJ5IGRlZmF1bHQgKG9wdGlvbiBub3Qgc2V0KSwgdGhlIHN5bTUzYzh4eCBkcml2ZXIgCit3aWxsIG5vdCBhdHRhY2ggY29udHJvbGxlcnMgc2V0IHRvIE9GRiBpbiB0aGUgTlZSQU0uCisKK1RoZSBuY3I1M2M4eHggYWx3YXlzIHRyaWVzIHRvIGF0dGFjaCBhbGwgdGhlIGNvbnRyb2xsZXJzLiBPcHRpb24gMHg4MCBoYXMgCitub3QgYmVlbiBhZGRlZCB0byB0aGUgbmNyNTNjOHh4IGRyaXZlciwgc2luY2UgaXQgaGFzIGJlZW4gcmVwb3J0ZWQgdG8gCitjb25mdXNlIHVzZXJzIHdobyB1c2UgdGhpcyBkcml2ZXIgc2luY2UgYSBsb25nIHRpbWUuIElmIHlvdSBkZXNpcmUgYSAKK2NvbnRyb2xsZXIgbm90IHRvIGJlIGF0dGFjaGVkIGJ5IHRoZSBuY3I1M2M4eHggZHJpdmVyIGF0IExpbnV4IGJvb3QsIHlvdSAKK211c3QgdXNlIHRoZSAnZXhjbCcgZHJpdmVyIGJvb3Qgb3B0aW9uLgorCisxMC42IFNDU0kgQlVTIGNoZWNraW5nIGJvb3Qgb3B0aW9uLgorCitXaGVuIHRoaXMgb3B0aW9uIGlzIHNldCB0byBhIG5vbi16ZXJvIHZhbHVlLCB0aGUgZHJpdmVyIGNoZWNrcyBTQ1NJIGxpbmVzIAorbG9naWMgc3RhdGUsIDEwMCBtaWNyby1zZWNvbmRzIGFmdGVyIGhhdmluZyBhc3NlcnRlZCB0aGUgU0NTSSBSRVNFVCBsaW5lLgorVGhlIGRyaXZlciBqdXN0IHJlYWRzIFNDU0kgbGluZXMgYW5kIGNoZWNrcyBhbGwgbGluZXMgcmVhZCBGQUxTRSBleGNlcHQgUkVTRVQuCitTaW5jZSBTQ1NJIGRldmljZXMgc2hhbGwgcmVsZWFzZSB0aGUgQlVTIGF0IG1vc3QgODAwIG5hbm8tc2Vjb25kcyBhZnRlciBTQ1NJIAorUkVTRVQgaGFzIGJlZW4gYXNzZXJ0ZWQsIGFueSBzaWduYWwgdG8gVFJVRSBtYXkgaW5kaWNhdGUgYSBTQ1NJIEJVUyBwcm9ibGVtLgorVW5mb3J0dW5hdGVseSwgdGhlIGZvbGxvd2luZyBjb21tb24gU0NTSSBCVVMgcHJvYmxlbXMgYXJlIG5vdCBkZXRlY3RlZDoKKy0gT25seSAxIHRlcm1pbmF0b3IgaW5zdGFsbGVkLgorLSBNaXNwbGFjZWQgdGVybWluYXRvcnMuCistIEJhZCBxdWFsaXR5IHRlcm1pbmF0b3JzLgorT24gdGhlIG90aGVyIGhhbmQsIGVpdGhlciBiYWQgY2FibGluZywgYnJva2VuIGRldmljZXMsIG5vdCBjb25mb3JtYW50IAorZGV2aWNlcywgLi4uIG1heSBjYXVzZSBhIFNDU0kgc2lnbmFsIHRvIGJlIHdyb25nIHdoZW4gdGUgZHJpdmVyIHJlYWRzIGl0LgorCisxMC43IElNTUVESUFURSBBUkJJVFJBVElPTiBib290IG9wdGlvbgorCitUaGlzIG9wdGlvbiBpcyBvbmx5IHN1cHBvcnRlZCBieSB0aGUgU1lNNTNDOFhYIGRyaXZlciAobm90IGJ5IHRoZSBOQ1I1M0M4WFgpLgorCitTWU1CSU9TIDUzQzhYWCBjaGlwcyBhcmUgYWJsZSB0byBhcmJpdHJhdGUgZm9yIHRoZSBTQ1NJIEJVUyBhcyBzb29uIGFzIHRoZXkgCitoYXZlIGRldGVjdGVkIGFuIGV4cGVjdGVkIGRpc2Nvbm5lY3Rpb24gKEJVUyBGUkVFIFBIQVNFKS4gRm9yIHRoaXMgcHJvY2VzcyAKK3RvIGJlIHN0YXJ0ZWQsIGJpdCAxIG9mIFNDTlRMMSBJTyByZWdpc3RlciBtdXN0IGJlIHNldCB3aGVuIHRoZSBjaGlwIGlzIAorY29ubmVjdGVkIHRvIHRoZSBTQ1NJIEJVUy4KKworV2hlbiB0aGlzIGZlYXR1cmUgaGFzIGJlZW4gZW5hYmxlZCBmb3IgdGhlIGN1cnJlbnQgY29ubmVjdGlvbiwgdGhlIGNoaXAgaGFzIAorZXZlcnkgY2hhbmNlIHRvIHdpbiBhcmJpdHJhdGlvbiBpZiBvbmx5IGRldmljZXMgd2l0aCBsb3dlciBwcmlvcml0eSBhcmUgCitjb21wZXRpbmcgZm9yIHRoZSBTQ1NJIEJVUy4gQnkgdGhlIHdheSwgd2hlbiB0aGUgY2hpcCBpcyB1c2luZyBTQ1NJIGlkIDcsIAordGhlbiBpdCB3aWxsIGZvciBzdXJlIHdpbiB0aGUgbmV4dCBTQ1NJIEJVUyBhcmJpdHJhdGlvbi4KKworU2luY2UsIHRoZXJlIGlzIG5vIHdheSB0byBrbm93IHdoYXQgZGV2aWNlcyBhcmUgdHJ5aW5nIHRvIGFyYml0cmF0ZSBmb3IgdGhlIAorQlVTLCB1c2luZyB0aGlzIGZlYXR1cmUgY2FuIGJlIGV4dHJlbWVseSB1bmZhaXIuIFNvLCB5b3UgYXJlIG5vdCBhZHZpc2VkCit0byBlbmFibGUgaXQsIG9yIGF0IG1vc3QgZW5hYmxlIHRoaXMgZmVhdHVyZSBmb3IgdGhlIGNhc2UgdGhlIGNoaXAgbG9zdCAKK3RoZSBwcmV2aW91cyBhcmJpdHJhdGlvbiAoYm9vdCBvcHRpb24gJ2lhcmI6MScpLgorCitUaGlzIGZlYXR1cmUgaGFzIHRoZSBmb2xsb3dpbmcgYWR2YW50YWdlczoKKworYSkgQWxsb3cgdGhlIGluaXRpYXRvciB3aXRoIElEIDcgdG8gd2luIGFyYml0cmF0aW9uIHdoZW4gaXQgd2FudHMgc28uCitiKSBPdmVybGFwIGF0IGxlYXN0IDQgbWljcm8tc2Vjb25kcyBvZiBhcmJpdHJhdGlvbiB0aW1lIHdpdGggdGhlIGV4ZWN1dGlvbiAKKyAgIG9mIFNDUklQVFMgdGhhdCBkZWFsIHdpdGggdGhlIGVuZCBvZiB0aGUgY3VycmVudCBjb25uZWN0aW9uIGFuZCB0aGF0IAorICAgc3RhcnRzIHRoZSBuZXh0IGpvYi4KKworSG1tbS4uLiBCdXQgKGEpIG1heSBqdXN0IHByZXZlbnQgb3RoZXIgZGV2aWNlcyBmcm9tIHJlc2VsZWN0aW5nIHRoZSBpbml0aWF0b3IsIAorYW5kIGRlbGF5IGRhdGEgdHJhbnNmZXJzIG9yIHN0YXR1cy9jb21wbGV0aW9ucywgYW5kIChiKSBtYXkganVzdCB3YXN0ZSAKK1NDU0kgQlVTIGJhbmR3aWR0aCBpZiB0aGUgU0NSSVBUUyBleGVjdXRpb24gbGFzdHMgbW9yZSB0aGFuIDQgbWljcm8tc2Vjb25kcy4KKworVGhlIHVzZSBvZiBJQVJCIG5lZWRzIHRoZSBTQ1NJX05DUl9JQVJCX1NVUFBPUlQgb3B0aW9uIHRvIGhhdmUgYmVlbiBkZWZpbmVkIAorYXQgY29tcGlsZSB0aW1lIGFuZCB0aGUgJ2lhcmInIGJvb3Qgb3B0aW9uIHRvIGhhdmUgYmVlbiBzZXQgdG8gYSBub24gemVybyAKK3ZhbHVlIGF0IGJvb3QgdGltZS4gSXQgaXMgbm90IHRoYXQgdXNlZnVsIGZvciByZWFsIHdvcmssIGJ1dCBjYW4gYmUgdXNlZCAKK3RvIHN0cmVzcyBTQ1NJIGRldmljZXMgb3IgZm9yIHNvbWUgYXBwbGljYXRpb25zIHRoYXQgY2FuIGdhaW4gYWR2YW50YWdlIG9mIAoraXQuIEJ5IHRoZSB3YXksIGlmIHlvdSBleHBlcmllbmNlIGJhZG5lc3NlcyBsaWtlICd1bmV4cGVjdGVkIGRpc2Nvbm5lY3Rpb25zJywgCisnYmFkIHJlc2VsZWN0aW9ucycsIGV0Yy4uLiB3aGVuIHVzaW5nIElBUkIgb24gaGVhdnkgSU8gbG9hZCwgeW91IHNob3VsZCBub3QgCitiZSBzdXJwcmlzZWQsIGJlY2F1c2UgZm9yY2UtZmVlZGluZyBhbnl0aGluZyBhbmQgYmxvY2tpbmcgaXRzIGFyc2UgYXQgdGhlIAorc2FtZSB0aW1lIGNhbm5vdCB3b3JrIGZvciBhIGxvbmcgdGltZS4gOi0pKQorCisKKzExLiBTb21lIGNvbnN0YW50cyBhbmQgZmxhZ3Mgb2YgdGhlIG5jcjUzYzh4eC5oIGhlYWRlciBmaWxlCisKK1NvbWUgb2YgdGhlc2UgYXJlIGRlZmluZWQgZnJvbSB0aGUgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzLiAgVG8KK2NoYW5nZSBvdGhlciAiZGVmaW5lcyIsIHlvdSBtdXN0IGVkaXQgdGhlIGhlYWRlciBmaWxlLiAgRG8gdGhhdCBvbmx5CitpZiB5b3Uga25vdyB3aGF0IHlvdSBhcmUgZG9pbmcuCisKK1NDU0lfTkNSX1NFVFVQX1NQRUNJQUxfRkVBVFVSRVMJKGRlZmF1bHQ6IGRlZmluZWQpCisJSWYgZGVmaW5lZCwgdGhlIGRyaXZlciB3aWxsIGVuYWJsZSBzb21lIHNwZWNpYWwgZmVhdHVyZXMgYWNjb3JkaW5nICAKKwl0byBjaGlwIGFuZCByZXZpc2lvbiBpZC4KKyAgICAgICAgRm9yIDgxMEEsIDg2MCwgODI1QSwgODc1IGFuZCA4OTUgc2NzaSBjaGlwcywgdGhpcyBvcHRpb24gZW5hYmxlcyAKKwlzdXBwb3J0IG9mIGZlYXR1cmVzIHRoYXQgcmVkdWNlIGxvYWQgb2YgUENJIGJ1cyBhbmQgbWVtb3J5IGFjY2Vzc2VzIAorCWR1cmluZyAgc2NzaSB0cmFuc2ZlciBwcm9jZXNzaW5nOiBidXJzdCBvcC1jb2RlIGZldGNoLCByZWFkIG11bHRpcGxlLCAKKyAgICAgICAgcmVhZCBsaW5lLCBwcmVmZXRjaCwgY2FjaGUgbGluZSwgd3JpdGUgYW5kIGludmFsaWRhdGUsIAorICAgICAgICBidXJzdCAxMjggKDg3NSBvbmx5KSwgbGFyZ2UgZG1hIGZpZm8gKDg3NSBvbmx5KSwgb2Zmc2V0IDE2ICg4NzUgb25seSkuCisJQ2FuIGJlIGNoYW5nZWQgYnkgdGhlIGZvbGxvd2luZyBib290IHNldHVwIGNvbW1hbmQ6CisJCW5jcjUzYzh4eD1zcGVjZjpuCisKK1NDU0lfTkNSX0lPTUFQUEVECQkoZGVmYXVsdDogbm90IGRlZmluZWQpCisJSWYgZGVmaW5lZCwgbm9ybWFsIEkvTyBpcyBmb3JjZWQuCisKK1NDU0lfTkNSX1NIQVJFX0lSUQkJKGRlZmF1bHQ6IGRlZmluZWQpCisJSWYgZGVmaW5lZCwgcmVxdWVzdCBzaGFyZWQgSVJRLgorCQorU0NTSV9OQ1JfTUFYX1RBR1MJCShkZWZhdWx0OiA4KQorCU1heGltdW0gbnVtYmVyIG9mIHNpbXVsdGFuZW91cyB0YWdnZWQgY29tbWFuZHMgdG8gYSBkZXZpY2UuCisJQ2FuIGJlIGNoYW5nZWQgYnkgInNldHRhZ3MgPHRhcmdldD4gPG1heHRhZ3M+IgorCitTQ1NJX05DUl9TRVRVUF9ERUZBVUxUX1NZTkMgICAgIChkZWZhdWx0OiA1MCkKKwlUcmFuc2ZlciBwZXJpb2QgZmFjdG9yIHRoZSBkcml2ZXIgd2lsbCB1c2UgYXQgYm9vdCB0aW1lIGZvciBzeW5jaHJvbm91cyAKKwluZWdvdGlhdGlvbi4gMCBtZWFucyBhc3luY2hyb25vdXMuCisJQ2FuIGJlIGNoYW5nZWQgYnkgInNldHN5bmMgPHRhcmdldD4gPHBlcmlvZCBmYWN0b3I+IgorCitTQ1NJX05DUl9TRVRVUF9ERUZBVUxUX1RBR1MgICAgIChkZWZhdWx0OiA4KQorCURlZmF1bHQgbnVtYmVyIG9mIHNpbXVsdGFuZW91cyB0YWdnZWQgY29tbWFuZHMgdG8gYSBkZXZpY2UuCisJPCAxIG1lYW5zIHRhZ2dlZCBjb21tYW5kIHF1ZXVpbmcgZGlzYWJsZWQgYXQgc3RhcnQtdXAuCisKK1NDU0lfTkNSX0FMV0FZU19TSU1QTEVfVEFHCShkZWZhdWx0OiBkZWZpbmVkKQorCVVzZSBTSU1QTEUgVEFHIGZvciByZWFkIGFuZCB3cml0ZSBjb21tYW5kcy4KKwlDYW4gYmUgY2hhbmdlZCBieSAic2V0b3JkZXIgPG9yZGVyZWR8c2ltcGxlfGRlZmF1bHQ+IgorCitTQ1NJX05DUl9TRVRVUF9ESVNDT05ORUNUSU9OCShkZWZhdWx0OiBkZWZpbmVkKQorCUlmIGRlZmluZWQsIHRhcmdldHMgYXJlIGFsbG93ZWQgdG8gZGlzY29ubmVjdC4KKworU0NTSV9OQ1JfU0VUVVBfRk9SQ0VfU1lOQ19ORUdPCShkZWZhdWx0OiBub3QgZGVmaW5lZCkKKwlJZiBkZWZpbmVkLCBzeW5jaHJvbm91cyBuZWdvdGlhdGlvbiBpcyB0cmllZCBmb3IgYWxsIFNDU0ktMiBkZXZpY2VzLgorCUNhbiBiZSBjaGFuZ2VkIGJ5ICJzZXRzeW5jIDx0YXJnZXQ+IDxwZXJpb2Q+IgorCitTQ1NJX05DUl9TRVRVUF9NQVNURVJfUEFSSVRZCShkZWZhdWx0OiBkZWZpbmVkKQorCUlmIGRlZmluZWQsIG1hc3RlciBwYXJpdHkgY2hlY2tpbmcgaXMgZW5hYmxlZC4KKworU0NTSV9OQ1JfU0VUVVBfTUFTVEVSX1BBUklUWQkoZGVmYXVsdDogZGVmaW5lZCkKKwlJZiBkZWZpbmVkLCBTQ1NJIHBhcml0eSBjaGVja2luZyBpcyBlbmFibGVkLgorCitTQ1NJX05DUl9QUk9GSUxFX1NVUFBPUlQJKGRlZmF1bHQ6IG5vdCBkZWZpbmVkKQorCUlmIGRlZmluZWQsIHByb2ZpbGluZyBpbmZvcm1hdGlvbiBpcyBnYXRoZXJlZC4KKworU0NTSV9OQ1JfTUFYX1NDQVRURVIJCShkZWZhdWx0OiAxMjgpCisJU2NhdHRlciBsaXN0IHNpemUgb2YgdGhlIGRyaXZlciBjY2IuCisKK1NDU0lfTkNSX01BWF9UQVJHRVQJCShkZWZhdWx0OiAxNikKKwlNYXggbnVtYmVyIG9mIHRhcmdldHMgcGVyIGhvc3QuCisKK1NDU0lfTkNSX01BWF9IT1NUCQkoZGVmYXVsdDogMikKKwlNYXggbnVtYmVyIG9mIGhvc3QgY29udHJvbGxlcnMuCisKK1NDU0lfTkNSX1NFVFRMRV9USU1FCQkoZGVmYXVsdDogMikKKwlOdW1iZXIgb2Ygc2Vjb25kcyB0aGUgZHJpdmVyIHdpbGwgd2FpdCBhZnRlciByZXNldC4KKworU0NTSV9OQ1JfVElNRU9VVF9BTEVSVAkJKGRlZmF1bHQ6IDMpCisJSWYgYSBwZW5kaW5nIGNvbW1hbmQgd2lsbCB0aW1lIG91dCBhZnRlciB0aGlzIGFtb3VudCBvZiBzZWNvbmRzLAorCWFuIG9yZGVyZWQgdGFnIGlzIHVzZWQgZm9yIHRoZSBuZXh0IGNvbW1hbmQuCisJQXZvaWRzIHRpbWVvdXRzIGZvciB1bm9yZGVyZWQgdGFnZ2VkIGNvbW1hbmRzLgorCitTQ1NJX05DUl9DQU5fUVVFVUUJCShkZWZhdWx0OiA3KlNDU0lfTkNSX01BWF9UQUdTKQorCU1heCBudW1iZXIgb2YgY29tbWFuZHMgdGhhdCBjYW4gYmUgcXVldWVkIHRvIGEgaG9zdC4KKworU0NTSV9OQ1JfQ01EX1BFUl9MVU4JCShkZWZhdWx0OiBTQ1NJX05DUl9NQVhfVEFHUykKKwlNYXggbnVtYmVyIG9mIGNvbW1hbmRzIHF1ZXVlZCB0byBhIGhvc3QgZm9yIGEgZGV2aWNlLgorCitTQ1NJX05DUl9TR19UQUJMRVNJWkUJCShkZWZhdWx0OiBTQ1NJX05DUl9NQVhfU0NBVFRFUi0xKQorCU1heCBzaXplIG9mIHRoZSBMaW51eCBzY2F0dGVyL2dhdGhlciBsaXN0LgorCitTQ1NJX05DUl9NQVhfTFVOCShkZWZhdWx0OiA4KQorCU1heCBudW1iZXIgb2YgTFVOcyBwZXIgdGFyZ2V0LgorCisKKzEyLiBJbnN0YWxsYXRpb24KKworVGhpcyBkcml2ZXIgaXMgcGFydCBvZiB0aGUgbGludXgga2VybmVsIGRpc3RyaWJ1dGlvbi4KK0RyaXZlciBmaWxlcyBhcmUgbG9jYXRlZCBpbiB0aGUgc3ViLWRpcmVjdG9yeSAiZHJpdmVycy9zY3NpIiBvZiB0aGUgCitrZXJuZWwgc291cmNlIHRyZWUuCisKK0RyaXZlciBmaWxlczoKKworCVJFQURNRS5uY3I1M2M4eHgJOiB0aGlzIGZpbGUKKwlDaGFuZ2VMb2cubmNyNTNjOHh4CTogY2hhbmdlIGxvZworCW5jcjUzYzh4eC5oCQk6IGRlZmluaXRpb25zCisJbmNyNTNjOHh4LmMJCTogdGhlIGRyaXZlciBjb2RlCisKK05ldyBkcml2ZXIgdmVyc2lvbnMgYXJlIG1hZGUgYXZhaWxhYmxlIHNlcGFyYXRlbHkgaW4gb3JkZXIgdG8gYWxsb3cgdGVzdGluZyAKK2NoYW5nZXMgYW5kIG5ldyBmZWF0dXJlcyBwcmlvciB0byBpbmNsdWRpbmcgdGhlbSBpbnRvIHRoZSBsaW51eCBrZXJuZWwgCitkaXN0cmlidXRpb24uIFRoZSBmb2xsb3dpbmcgVVJMIHByb3ZpZGVzIGluZm9ybWF0aW9ucyBvbiBsYXRlc3QgYXZhbGFpYmxlIAorcGF0Y2hlczogCisKKyAgICAgIGZ0cDovL2Z0cC50dXgub3JnL3B1Yi9wZW9wbGUvZ2VyYXJkLXJvdWRpZXIvUkVBRE1FCisKKworMTMuIEFyY2hpdGVjdHVyZSBkZXBlbmRlbnQgZmVhdHVyZXMuCisKKzxOb3QgeWV0IHdyaXR0ZW4+CisKKworMTQuIEtub3duIHByb2JsZW1zCisKKzE0LjEgVGFnZ2VkIGNvbW1hbmRzIHdpdGggSW9tZWdhIEpheiBkZXZpY2UKKworSSBoYXZlIG5vdCB0cmllZCB0aGlzIGRldmljZSwgaG93ZXZlciBpdCBoYXMgYmVlbiByZXBvcnRlZCB0byBtZSB0aGUKK2ZvbGxvd2luZzogVGhpcyBkZXZpY2UgaXMgY2FwYWJsZSBvZiBUYWdnZWQgY29tbWFuZCBxdWV1aW5nLiBIb3dldmVyCit3aGlsZSBzcGlubmluZyB1cCwgaXQgcmVqZWN0cyBUYWdnZWQgY29tbWFuZHMuIFRoaXMgYmVoYXZpb3VyIGlzCitjb25mb3JtcyB0byA2LjguMiBvZiBTQ1NJLTIgc3BlY2lmaWNhdGlvbnMuIFRoZSBjdXJyZW50IGJlaGF2aW91ciBvZgordGhlIGRyaXZlciBpbiB0aGF0IHNpdHVhdGlvbiBpcyBub3Qgc2F0aXNmeWluZy4gU28gZG8gbm90IGVuYWJsZQorVGFnZ2VkIGNvbW1hbmQgcXVldWluZyBmb3IgZGV2aWNlcyB0aGF0IGFyZSBhYmxlIHRvIHNwaW4gZG93bi4gIFRoZQorb3RoZXIgcHJvYmxlbSB0aGF0IG1heSBhcHBlYXIgaXMgdGltZW91dHMuIFRoZSBvbmx5IHdheSB0byBhdm9pZAordGltZW91dHMgc2VlbXMgdG8gZWRpdCBsaW51eC9kcml2ZXJzL3Njc2kvc2QuYyBhbmQgdG8gaW5jcmVhc2UgdGhlCitjdXJyZW50IHRpbWVvdXQgdmFsdWVzLgorCisxNC4yIERldmljZSBuYW1lcyBjaGFuZ2Ugd2hlbiBhbm90aGVyIGNvbnRyb2xsZXIgaXMgYWRkZWQuCisKK1doZW4geW91IGFkZCBhIG5ldyBOQ1I1M0M4WFggY2hpcCBiYXNlZCBjb250cm9sbGVyIHRvIGEgc3lzdGVtIHRoYXQgYWxyZWFkeSAKK2hhcyBvbmUgb3IgbW9yZSBjb250cm9sbGVycyBvZiB0aGlzIGZhbWlseSwgaXQgbWF5IGhhcHBlbiB0aGF0IHRoZSBvcmRlciAKK3RoZSBkcml2ZXIgcmVnaXN0ZXJzIHRoZW0gdG8gdGhlIGtlcm5lbCBjYXVzZXMgcHJvYmxlbXMgZHVlIHRvIGRldmljZSAKK25hbWUgY2hhbmdlcy4KK1doZW4gYXQgbGVhc3Qgb25lIGNvbnRyb2xsZXIgdXNlcyBOdlJBTSwgU0RNUyBCSU9TIHZlcnNpb24gNCBhbGxvd3MgeW91IHRvIAorZGVmaW5lIHRoZSBvcmRlciB0aGUgQklPUyB3aWxsIHNjYW4gdGhlIHNjc2kgYm9hcmRzLiBUaGUgZHJpdmVyIGF0dGFjaGVzIAorY29udHJvbGxlcnMgYWNjb3JkaW5nIHRvIEJJT1MgaW5mb3JtYXRpb24gaWYgTnZSQU0gZGV0ZWN0IG9wdGlvbiBpcyBzZXQuCisKK0lmIHlvdXIgY29udHJvbGxlcnMgZG8gbm90IGhhdmUgTnZSQU0sIHlvdSBjYW46CisKKy0gQXNrIHRoZSBkcml2ZXIgdG8gcHJvYmUgY2hpcCBpZHMgaW4gcmV2ZXJzZSBvcmRlciBmcm9tIHRoZSBib290IGNvbW1hbmQKKyAgbGluZTogbmNyNTNjOHh4PXJldnByb2I6eQorLSBNYWtlIGFwcHJvcHJpYXRlIGNoYW5nZXMgaW4gdGhlIGZzdGFiLgorLSBVc2UgdGhlICdzY3NpZGV2JyB0b29sIGZyb20gRXJpYyBZb3VuZ2RhbGUuCisKKzE0LjMgVXNpbmcgb25seSA4IGJpdCBkZXZpY2VzIHdpdGggYSBXSURFIFNDU0kgY29udHJvbGxlci4KKworV2hlbiBvbmx5IDggYml0IE5BUlJPVyBkZXZpY2VzIGFyZSBjb25uZWN0ZWQgdG8gYSAxNiBiaXQgV0lERSBTQ1NJIGNvbnRyb2xsZXIsIAoreW91IG11c3QgZW5zdXJlIHRoYXQgbGluZXMgb2YgdGhlIHdpZGUgcGFydCBvZiB0aGUgU0NTSSBCVVMgYXJlIHB1bGxlZC11cC4KK1RoaXMgY2FuIGJlIGFjaGlldmVkIGJ5IEVOQUJMSU5HIHRoZSBXSURFIFRFUk1JTkFUT1IgcG9ydGlvbiBvZiB0aGUgU0NTSSAKK2NvbnRyb2xsZXIgY2FyZC4KK1RoZSBUWUFOIDEzNjUgZG9jdW1lbnRhdGlvbiByZXZpc2lvbiAxLjIgaXMgbm90IGNvcnJlY3QgYWJvdXQgc3VjaCBzZXR0aW5ncy4KKyhwYWdlIDEwLCBmaWd1cmUgMy4zKS4KKworMTQuNCBQb3NzaWJsZSBkYXRhIGNvcnJ1cHRpb24gZHVyaW5nIGEgTWVtb3J5IFdyaXRlIGFuZCBJbnZhbGlkYXRlCisKK1RoaXMgcHJvYmxlbSBpcyBkZXNjcmliZWQgaW4gU1lNQklPUyBERUwgMzk3LCBQYXJ0IE51bWJlciA2OS0wMzkyNDEsIElURU0gNC4KKworSW4gc29tZSBjb21wbGV4IHNpdHVhdGlvbnMsIDUzQzg3NSBjaGlwcyByZXZpc2lvbiA8PSAzIG1heSBzdGFydCBhIFBDSSAKK1dyaXRlIGFuZCBJbnZhbGlkYXRlIENvbW1hbmQgYXQgYSBub3QgY2FjaGUtbGluZS1hbGlnbmVkIDQgRFdPUkRTIGJvdW5kYXJ5LgorVGhpcyBpcyBvbmx5IHBvc3NpYmxlIHdoZW4gQ2FjaGUgTGluZSBTaXplIGlzIDggRFdPUkRTIG9yIGdyZWF0ZXIuCitQZW50aXVtIHN5c3RlbXMgdXNlIGEgOCBEV09SRFMgY2FjaGUgbGluZSBzaXplIGFuZCBzbyBhcmUgY29uY2VybmVkIGJ5IAordGhpcyBjaGlwIGJ1ZywgdW5saWtlIGk0ODYgc3lzdGVtcyB0aGF0IHVzZSBhIDQgRFdPUkRTIGNhY2hlIGxpbmUgc2l6ZS4KKworV2hlbiB0aGlzIHNpdHVhdGlvbiBvY2N1cnMsIHRoZSBjaGlwIG1heSBjb21wbGV0ZSB0aGUgV3JpdGUgYW5kIEludmFsaWRhdGUgCitjb21tYW5kIGFmdGVyIGhhdmluZyBvbmx5IGZpbGxlZCBwYXJ0IG9mIHRoZSBsYXN0IGNhY2hlIGxpbmUgaW52b2x2ZWQgaW4gCit0aGUgdHJhbnNmZXIsIGxlYXZpbmcgdG8gZGF0YSBjb3JydXB0aW9uIHRoZSByZW1haW5kZXIgb2YgdGhpcyBjYWNoZSBsaW5lLgorCitOb3QgdXNpbmcgV3JpdGUgQW5kIEludmFsaWRhdGUgb2J2aW91c2x5IGdldHMgcmlkIG9mIHRoaXMgY2hpcCBidWcsIGFuZCBzbyAKK2l0IGlzIG5vdyB0aGUgZGVmYXVsdCBzZXR0aW5nIG9mIHRoZSBkcml2ZXIuCitIb3dldmVyLCBmb3IgcGVvcGxlIGxpa2UgbWUgd2hvIHdhbnQgdG8gZW5hYmxlIHRoaXMgZmVhdHVyZSwgSSBoYXZlIGFkZGVkIAorcGFydCBvZiBhIHdvcmstYXJvdW5kIHN1Z2dlc3RlZCBieSBTWU1CSU9TLiBUaGlzIHdvcmstYXJvdW5kIHJlc2V0cyB0aGUgCithZGRyZXNzaW5nIGxvZ2ljIHdoZW4gdGhlIERBVEEgSU4gcGhhc2UgaXMgZW50ZXJlZCBhbmQgc28gcHJldmVudHMgdGhlIGJ1ZyAKK2Zyb20gYmVpbmcgdHJpZ2dlcmVkIGZvciB0aGUgZmlyc3QgU0NTSSBNT1ZFIG9mIHRoZSBwaGFzZS4gVGhpcyB3b3JrLWFyb3VuZCAKK3Nob3VsZCBiZSBlbm91Z2ggYWNjb3JkaW5nIHRvIHRoZSBmb2xsb3dpbmc6CisKK1RoZSBvbmx5IGRyaXZlciBpbnRlcm5hbCBkYXRhIHN0cnVjdHVyZSB0aGF0IGlzIGdyZWF0ZXIgdGhhbiA4IERXT1JEUyAgYW5kIAordGhhdCBpcyBtb3ZlZCBieSB0aGUgU0NSSVBUUyBwcm9jZXNzb3IgaXMgdGhlICdDQ0IgaGVhZGVyJyB0aGF0IGNvbnRhaW5zIAordGhlIGNvbnRleHQgb2YgdGhlIFNDU0kgdHJhbnNmZXIuIFRoaXMgZGF0YSBzdHJ1Y3R1cmUgaXMgYWxpZ25lZCBvbiA4IERXT1JEUyAKK2JvdW5kYXJ5IChQZW50aXVtIENhY2hlIExpbmUgU2l6ZSksIGFuZCBzbyBpcyBpbW11bmUgdG8gdGhpcyBjaGlwIGJ1ZywgYXQgCitsZWFzdCBvbiBQZW50aXVtIHN5c3RlbXMuCitCdXQgdGhlIGNvbmRpdGlvbnMgb2YgdGhpcyBidWcgY2FuIGJlIG1ldCB3aGVuIGEgU0NTSSByZWFkIGNvbW1hbmQgaXMgCitwZXJmb3JtZWQgdXNpbmcgYSBidWZmZXIgdGhhdCBpcyA0IERXT1JEUyBidXQgbm90IGNhY2hlLWxpbmUgYWxpZ25lZC4KK1RoaXMgY2Fubm90IGhhcHBlbiB1bmRlciBMaW51eCB3aGVuIHNjYXR0ZXIvZ2F0aGVyIGxpc3RzIGFyZSB1c2VkIHNpbmNlIAordGhleSBvbmx5IHJlZmVyIHRvIHN5c3RlbSBidWZmZXJzIHRoYXQgYXJlIHdlbGwgYWxpZ25lZC4gU28sIGEgd29yayBhcm91bmQgCittYXkgb25seSBiZSBuZWVkZWQgdW5kZXIgTGludXggd2hlbiBhIHNjYXR0ZXIvZ2F0aGVyIGxpc3QgaXMgbm90IHVzZWQgYW5kIAord2hlbiB0aGUgU0NTSSBEQVRBIElOIHBoYXNlIGlzIHJlZW50ZXJlZCBhZnRlciBhIHBoYXNlIG1pc21hdGNoLgorCisxNC41IElSUSBzaGFyaW5nIHByb2JsZW1zCisKK1doZW4gYW4gSVJRIGlzIHNoYXJlZCBieSBkZXZpY2VzIHRoYXQgYXJlIGhhbmRsZWQgYnkgZGlmZmVyZW50IGRyaXZlcnMsIGl0IAorbWF5IGhhcHBlbiB0aGF0IG9uZSBkcml2ZXIgY29tcGxhaW5zIGFib3V0IHRoZSByZXF1ZXN0IG9mIHRoZSBJUlEgaGF2aW5nIAorZmFpbGVkLiBJbmRlciBMaW51eC0yLjAsIHRoaXMgbWF5IGJlIGR1ZSB0byBvbmUgZHJpdmVyIGhhdmluZyByZXF1ZXN0ZWQgdGhlIAorSVJRIHVzaW5nIHRoZSBTQV9JTlRFUlJVUFQgZmxhZyBidXQgc29tZSBvdGhlciBoYXZpbmcgcmVxdWVzdGVkIHRoZSBzYW1lIElSUSAKK3dpdGhvdXQgdGhpcyBmbGFnLiBVbmRlciBib3RoIExpbnV4LTIuMCBhbmQgbGludXgtMi4yLCB0aGlzIG1heSBiZSBjYXVzZWQgYnkgCitvbmUgZHJpdmVyIG5vdCBoYXZpbmcgcmVxdWVzdGVkIHRoZSBJUlEgd2l0aCB0aGUgU0FfU0hJUlEgZmxhZy4KKworQnkgZGVmYXVsdCwgdGhlIG5jcjUzYzh4eCBhbmQgc3ltNTNjOHh4IGRyaXZlcnMgcmVxdWVzdCBJUlFzIHdpdGggYm90aCB0aGUgCitTQV9JTlRFUlJVUFQgYW5kIHRoZSBTQV9TSElSUSBmbGFnIHVuZGVyIExpbnV4LTIuMCBhbmQgd2l0aCBvbmx5IHRoZSBTQV9TSElSUSAKK2ZsYWcgdW5kZXIgTGludXgtMi4yLgorCitVbmRlciBMaW51eC0yLjAsIHlvdSBjYW4gZGlzYWJsZSB1c2Ugb2YgU0FfSU5URVJSVVBUIGZsYWcgZnJvbSB0aGUgYm9vdCAKK2NvbW1hbmQgbGluZSBieSB1c2luZyB0aGUgZm9sbG93aW5nIG9wdGlvbjoKKworICAgICBuY3I1M2M4eHg9aXJxbToweDIwICAgKGZvciB0aGUgZ2VuZXJpYyBuY3I1M2M4eHggZHJpdmVyKQorICAgICBzeW01M2M4eHg9aXJxbToweDIwICAgKGZvciB0aGUgc3ltNTNjOHh4IGRyaXZlcikKKworSWYgdGhpcyBkb2VzIG5vdCBmaXggdGhlIHByb2JsZW0sIHRoZW4geW91IG1heSB3YW50IHRvIGNoZWNrIGhvdyBhbGwgb3RoZXIgCitkcml2ZXJzIGFyZSByZXF1ZXN0aW5nIHRoZSBJUlEgYW5kIHJlcG9ydCB0aGUgcHJvYmxlbS4gTm90ZSB0aGF0IGlmIGF0IGxlYXN0IAorYSBzaW5nbGUgZHJpdmVyIGRvZXMgbm90IHJlcXVlc3QgdGhlIElSUSB3aXRoIHRoZSBTQV9TSElSUSBmbGFnIChzaGFyZSBJUlEpLCAKK3RoZW4gdGhlIHJlcXVlc3Qgb2YgdGhlIElSUSBvYnZpb3VzbHkgd2lsbCBub3Qgc3VjY2VlZCBmb3IgYWxsIHRoZSBkcml2ZXJzLgorCisxNS4gU0NTSSBwcm9ibGVtIHRyb3VibGVzaG9vdGluZworCisxNS4xIFByb2JsZW0gdHJhY2tpbmcKKworTW9zdCBTQ1NJIHByb2JsZW1zIGFyZSBkdWUgdG8gYSBub24gY29uZm9ybWFudCBTQ1NJIGJ1cyBvciB0byBidWdneQorZGV2aWNlcy4gIElmIGluZm9ydHVuYXRlbHkgeW91IGhhdmUgU0NTSSBwcm9ibGVtcywgeW91IGNhbiBjaGVjayB0aGUKK2ZvbGxvd2luZyB0aGluZ3M6CisKKy0gU0NTSSBidXMgY2FibGVzCistIHRlcm1pbmF0aW9ucyBhdCBib3RoIGVuZCBvZiB0aGUgU0NTSSBjaGFpbgorLSBsaW51eCBzeXNsb2cgbWVzc2FnZXMgKHNvbWUgb2YgdGhlbSBtYXkgaGVscCB5b3UpCisKK0lmIHlvdSBkbyBub3QgZmluZCB0aGUgc291cmNlIG9mIHByb2JsZW1zLCB5b3UgY2FuIGNvbmZpZ3VyZSB0aGUKK2RyaXZlciB3aXRoIG5vIGZlYXR1cmVzIGVuYWJsZWQuCisKKy0gb25seSBhc3luY2hyb25vdXMgZGF0YSB0cmFuc2ZlcnMKKy0gdGFnZ2VkIGNvbW1hbmRzIGRpc2FibGVkCistIGRpc2Nvbm5lY3Rpb25zIG5vdCBhbGxvd2VkCisKK05vdywgaWYgeW91ciBTQ1NJIGJ1cyBpcyBvaywgeW91ciBzeXN0ZW0gaGF2ZSBldmVyeSBjaGFuY2UgdG8gd29yaword2l0aCB0aGlzIHNhZmUgY29uZmlndXJhdGlvbiBidXQgcGVyZm9ybWFuY2VzIHdpbGwgbm90IGJlIG9wdGltYWwuCisKK0lmIGl0IHN0aWxsIGZhaWxzLCB0aGVuIHlvdSBjYW4gc2VuZCB5b3VyIHByb2JsZW0gZGVzY3JpcHRpb24gdG8KK2FwcHJvcHJpYXRlIG1haWxpbmcgbGlzdHMgb3IgbmV3cy1ncm91cHMuICBTZW5kIG1lIGEgY29weSBpbiBvcmRlciB0bworYmUgc3VyZSBJIHdpbGwgcmVjZWl2ZSBpdC4gIE9idmlvdXNseSwgYSBidWcgaW4gdGhlIGRyaXZlciBjb2RlIGlzCitwb3NzaWJsZS4KKworICAgICBNeSBlbWFpbCBhZGRyZXNzOiBHZXJhcmQgUm91ZGllciA8Z3JvdWRpZXJAZnJlZS5mcj4KKworQWxsb3dpbmcgZGlzY29ubmVjdGlvbnMgaXMgaW1wb3J0YW50IGlmIHlvdSB1c2Ugc2V2ZXJhbCBkZXZpY2VzIG9uCit5b3VyIFNDU0kgYnVzIGJ1dCBvZnRlbiBjYXVzZXMgcHJvYmxlbXMgd2l0aCBidWdneSBkZXZpY2VzLgorU3luY2hyb25vdXMgZGF0YSB0cmFuc2ZlcnMgaW5jcmVhc2VzIHRocm91Z2hwdXQgb2YgZmFzdCBkZXZpY2VzIGxpa2UKK2hhcmQgZGlza3MuICBHb29kIFNDU0kgaGFyZCBkaXNrcyB3aXRoIGEgbGFyZ2UgY2FjaGUgZ2FpbiBhZHZhbnRhZ2Ugb2YKK3RhZ2dlZCBjb21tYW5kcyBxdWV1aW5nLgorCitUcnkgdG8gZW5hYmxlIG9uZSBmZWF0dXJlIGF0IGEgdGltZSB3aXRoIGNvbnRyb2wgY29tbWFuZHMuICBGb3IgZXhhbXBsZToKKworLSBlY2hvICJzZXRzeW5jIGFsbCAyNSIgPi9wcm9jL3Njc2kvbmNyNTNjOHh4LzAKKyAgV2lsbCBlbmFibGUgZmFzdCBzeW5jaHJvbm91cyBkYXRhIHRyYW5zZmVyIG5lZ290aWF0aW9uIGZvciBhbGwgdGFyZ2V0cy4KKworLSBlY2hvICJzZXRmbGFnIDMiID4vcHJvYy9zY3NpL25jcjUzYzh4eC8wCisgIFdpbGwgcmVzZXQgZmxhZ3MgKG5vX2Rpc2MpIGZvciB0YXJnZXQgMywgYW5kIHNvIHdpbGwgYWxsb3cgaXQgdG8gZGlzY29ubmVjdCAKKyAgdGhlIFNDU0kgQnVzLgorCistIGVjaG8gInNldHRhZ3MgMyA4IiA+L3Byb2Mvc2NzaS9uY3I1M2M4eHgvMAorICBXaWxsIGVuYWJsZSB0YWdnZWQgY29tbWFuZCBxdWV1aW5nIGZvciB0YXJnZXQgMyBpZiB0aGF0IGRldmljZSBzdXBwb3J0cyBpdC4KKworT25jZSB5b3UgaGF2ZSBmb3VuZCB0aGUgZGV2aWNlIGFuZCB0aGUgZmVhdHVyZSB0aGF0IGNhdXNlIHByb2JsZW1zLCBqdXN0IAorZGlzYWJsZSB0aGF0IGZlYXR1cmUgZm9yIHRoYXQgZGV2aWNlLgorCisxNS4yIFVuZGVyc3RhbmRpbmcgaGFyZHdhcmUgZXJyb3IgcmVwb3J0cworCitXaGVuIHRoZSBkcml2ZXIgZGV0ZWN0cyBhbiB1bmV4cGVjdGVkIGVycm9yIGNvbmRpdGlvbiwgaXQgbWF5IGRpc3BsYXkgYSAKK21lc3NhZ2Ugb2YgdGhlIGZvbGxvd2luZyBwYXR0ZXJuLgorCitzeW01M2M4NzYtMDoxOiBFUlJPUiAoMDo0OCkgKDEtMjEtNjUpIChmLzk1KSBAIChzY3JpcHQgN2MwOjE5MDAwMDAwKS4KK3N5bTUzYzg3Ni0wOiBzY3JpcHQgY21kID0gMTkwMDAwMDAKK3N5bTUzYzg3Ni0wOiByZWdkdW1wOiBkYSAxMCA4MCA5NSA0NyAwZiAwMSAwNyA3NSAwMSA4MSAyMSA4MCAwMSAwOSAwMC4KKworU29tZSBmaWVsZHMgaW4gc3VjaCBhIG1lc3NhZ2UgbWF5IGhlbHAgeW91IHVuZGVyc3RhbmQgdGhlIGNhdXNlIG9mIHRoZSAKK3Byb2JsZW0sIGFzIGZvbGxvd3M6CisKK3N5bTUzYzg3Ni0wOjE6IEVSUk9SICgwOjQ4KSAoMS0yMS02NSkgKGYvOTUpIEAgKHNjcmlwdCA3YzA6MTkwMDAwMDApLgorLi4uLi4uLi4uLi4uQS4uLi4uLi4uLkIuQy4uLi5ELkUuLkYuLi4uRy5ILi4uLi4uLkkuLi4uLkouLi5LLi4uLi4uLgorCitGaWVsZCBBIDogdGFyZ2V0IG51bWJlci4KKyAgU0NTSSBJRCBvZiB0aGUgZGV2aWNlIHRoZSBjb250cm9sbGVyIHdhcyB0YWxraW5nIHdpdGggYXQgdGhlIG1vbWVudCB0aGUgCisgIGVycm9yIG9jY3Vycy4KKworRmllbGQgQiA6IERTVEFUIGlvIHJlZ2lzdGVyIChETUEgU1RBVFVTKQorICBCaXQgMHg0MCA6IE1EUEUgTWFzdGVyIERhdGEgUGFyaXR5IEVycm9yCisgICAgICAgICAgICAgRGF0YSBwYXJpdHkgZXJyb3IgZGV0ZWN0ZWQgb24gdGhlIFBDSSBCVVMuCisgIEJpdCAweDIwIDogQkYgICBCdXMgRmF1bHQKKyAgICAgICAgICAgICBQQ0kgYnVzIGZhdWx0IGNvbmRpdGlvbiBkZXRlY3RlZAorICBCaXQgMHgwMSA6IElJRCAgSWxsZWdhbCBJbnN0cnVjdGlvbiBEZXRlY3RlZAorICAgICAgICAgICAgIFNldCBieSB0aGUgY2hpcCB3aGVuIGl0IGRldGVjdHMgYW4gSWxsZWdhbCBJbnN0cnVjdGlvbiBmb3JtYXQgCisgICAgICAgICAgICAgb24gc29tZSBjb25kaXRpb24gdGhhdCBtYWtlcyBhbiBpbnN0cnVjdGlvbiBpbGxlZ2FsLgorICBCaXQgMHg4MCA6IERGRSBEbWEgRmlmbyBFbXB0eQorICAgICAgICAgICAgIFB1cmUgc3RhdHVzIGJpdCB0aGF0IGRvZXMgbm90IGluZGljYXRlIGFuIGVycm9yLgorICBJZiB0aGUgcmVwb3J0ZWQgRFNUQVQgdmFsdWUgY29udGFpbnMgYSBjb21iaW5hdGlvbiBvZiBNRFBFICgweDQwKSwgCisgIEJGICgweDIwKSwgdGhlbiB0aGUgY2F1c2UgbWF5IGJlIGxpa2VseSBkdWUgdG8gYSBQQ0kgQlVTIHByb2JsZW0uCisKK0ZpZWxkIEMgOiBTSVNUIGlvIHJlZ2lzdGVyIChTQ1NJIEludGVycnVwdCBTdGF0dXMpCisgIEJpdCAweDA4IDogU0dFICBTQ1NJIEdST1NTIEVSUk9SCisgICAgICAgICAgICAgSW5kaWNhdGVzIHRoYXQgdGhlIGNoaXAgZGV0ZWN0ZWQgYSBzZXZlcmUgZXJyb3IgY29uZGl0aW9uIAorICAgICAgICAgICAgIG9uIHRoZSBTQ1NJIEJVUyB0aGF0IHByZXZlbnRzIHRoZSBTQ1NJIHByb3RvY29sIGZyb20gZnVuY3Rpb25pbmcKKyAgICAgICAgICAgICBwcm9wZXJseS4KKyAgQml0IDB4MDQgOiBVREMgIFVuZXhwZWN0ZWQgRGlzY29ubmVjdGlvbgorICAgICAgICAgICAgIEluZGljYXRlcyB0aGF0IHRoZSBkZXZpY2UgcmVsZWFzZWQgdGhlIFNDU0kgQlVTIHdoZW4gdGhlIGNoaXAgCisgICAgICAgICAgICAgd2FzIG5vdCBleHBlY3RpbmcgdGhpcyB0byBoYXBwZW4uIEEgZGV2aWNlIG1heSBiZWhhdmUgc28gdG8gCisgICAgICAgICAgICAgaW5kaWNhdGUgdGhlIFNDU0kgaW5pdGlhdG9yIHRoYXQgYW4gZXJyb3IgY29uZGl0aW9uIG5vdCByZXBvcnRhYmxlICAgICAgICAgICAgICB1c2luZyB0aGUgU0NTSSBwcm90b2NvbCBoYXMgb2NjdXJyZWQuCisgIEJpdCAweDAyIDogUlNUICBTQ1NJIEJVUyBSZXNldAorICAgICAgICAgICAgIEdlbmVyYWxseSBTQ1NJIHRhcmdldHMgZG8gbm90IHJlc2V0IHRoZSBTQ1NJIEJVUywgYWx0aG91Z2ggYW55IAorICAgICAgICAgICAgIGRldmljZSBvbiB0aGUgQlVTIGNhbiByZXNldCBpdCBhdCBhbnkgdGltZS4KKyAgQml0IDB4MDEgOiBQQVIgIFBhcml0eQorICAgICAgICAgICAgIFNDU0kgcGFyaXR5IGVycm9yIGRldGVjdGVkLgorICBPbiBhIGZhdWx0eSBTQ1NJIEJVUywgYW55IGVycm9yIGNvbmRpdGlvbiBhbW9uZyBTR0UgKDB4MDgpLCBVREMgKDB4MDQpIGFuZCAKKyAgUEFSICgweDAxKSBtYXkgYmUgZGV0ZWN0ZWQgYnkgdGhlIGNoaXAuIElmIHlvdXIgU0NTSSBzeXN0ZW0gc29tZXRpbWVzIAorICBlbmNvdW50ZXJzIHN1Y2ggZXJyb3IgY29uZGl0aW9ucywgZXNwZWNpYWxseSBTQ1NJIEdST1NTIEVSUk9SLCB0aGVuIGEgU0NTSSAKKyAgQlVTIHByb2JsZW0gaXMgbGlrZWx5IHRoZSBjYXVzZSBvZiB0aGVzZSBlcnJvcnMuCisKK0ZvciBmaWVsZHMgRCxFLEYsRyBhbmQgSCwgeW91IG1heSBsb29rIGludG8gdGhlIHN5bTUzYzh4eF9kZWZzLmggZmlsZSAKK3RoYXQgY29udGFpbnMgc29tZSBtaW5pbWFsIGNvbW1lbnRzIG9uIElPIHJlZ2lzdGVyIGJpdHMuCitGaWVsZCBEIDogU09DTCAgU2NzaSBPdXRwdXQgQ29udHJvbCBMYXRjaAorICAgICAgICAgIFRoaXMgcmVnaXN0ZXIgcmVmbGVjdHMgdGhlIHN0YXRlIG9mIHRoZSBTQ1NJIGNvbnRyb2wgbGluZXMgdGhlIAorICAgICAgICAgIGNoaXAgd2FudCB0byBkcml2ZSBvciBjb21wYXJlIGFnYWluc3QuCitGaWVsZCBFIDogU0JDTCAgU2NzaSBCdXMgQ29udHJvbCBMaW5lcworICAgICAgICAgIEFjdHVhbCB2YWx1ZSBvZiBjb250cm9sIGxpbmVzIG9uIHRoZSBTQ1NJIEJVUy4KK0ZpZWxkIEYgOiBTQkRMICBTY3NpIEJ1cyBEYXRhIExpbmVzCisgICAgICAgICAgQWN0dWFsIHZhbHVlIG9mIGRhdGEgbGluZXMgb24gdGhlIFNDU0kgQlVTLgorRmllbGQgRyA6IFNYRkVSICBTQ1NJIFRyYW5zZmVyCisgICAgICAgICAgQ29udGFpbnMgdGhlIHNldHRpbmcgb2YgdGhlIFN5bmNocm9ub3VzIFBlcmlvZCBmb3Igb3V0cHV0IGFuZCAKKyAgICAgICAgICB0aGUgY3VycmVudCBTeW5jaHJvbm91cyBvZmZzZXQgKG9mZnNldCAwIG1lYW5zIGFzeW5jaHJvbm91cykuCitGaWVsZCBIIDogU0NOVEwzIFNjc2kgQ29udHJvbCBSZWdpc3RlciAzCisgICAgICAgICAgQ29udGFpbnMgdGhlIHNldHRpbmcgb2YgdGltaW5nIHZhbHVlcyBmb3IgYm90aCBhc3luY2hyb25vdXMgYW5kIAorICAgICAgICAgIHN5bmNocm9ub3VzIGRhdGEgdHJhbnNmZXJzLiAKKworVW5kZXJzdGFuZGluZyBGaWVsZHMgSSwgSiwgSyBhbmQgZHVtcHMgcmVxdWlyZXMgdG8gaGF2ZSBnb29kIGtub3dsZWRnZSBvZiAKK1NDU0kgc3RhbmRhcmRzLCBjaGlwIGNvcmVzIGZ1bmN0aW9ubmFscyBhbmQgaW50ZXJuYWwgZHJpdmVyIGRhdGEgc3RydWN0dXJlcy4KK1lvdSBhcmUgbm90IHJlcXVpcmVkIHRvIGRlY29kZSBhbmQgdW5kZXJzdGFuZCB0aGVtLCB1bmxlc3MgeW91IHdhbnQgdG8gaGVscCAKK21haW50YWluIHRoZSBkcml2ZXIgY29kZS4KKworMTYuIFN5bmNob25vdXMgdHJhbnNmZXIgbmVnb3RpYXRpb24gdGFibGVzCisKK1RhYmxlcyBiZWxvdyBoYXZlIGJlZW4gY3JlYXRlZCBieSBjYWxsaW5nIHRoZSByb3V0aW5lIHRoZSBkcml2ZXIgdXNlcworZm9yIHN5bmNocm9uaXNhdGlvbiBuZWdvdGlhdGlvbiB0aW1pbmcgY2FsY3VsYXRpb24gYW5kIGNoaXAgc2V0dGluZy4KK1RoZSBmaXJzdCB0YWJsZSBjb3JyZXNwb25kcyB0byBVbHRyYSBjaGlwcyA1Mzg3NSBhbmQgNTNDODYwIHdpdGggODAgTUh6IAorY2xvY2sgYW5kIDUgY2xvY2sgZGl2aXNvcnMuCitUaGUgc2Vjb25kIG9uZSBoYXMgYmVlbiBjYWxjdWxhdGVkIGJ5IHNldHRpbmcgdGhlIHNjc2kgY2xvY2sgdG8gNDAgTWh6IAorYW5kIHVzaW5nIDQgY2xvY2sgZGl2aXNvcnMgYW5kIHNvIGFwcGxpZXMgdG8gYWxsIE5DUjUzQzhYWCBjaGlwcyBpbiBmYXN0IAorU0NTSS0yIG1vZGUuCisKK1BlcmlvZHMgYXJlIGluIG5hbm8tc2Vjb25kcyBhbmQgc3BlZWRzIGFyZSBpbiBNZWdhLXRyYW5zZmVycyBwZXIgc2Vjb25kLgorMSBNZWdhLXRyYW5zZmVycy9zZWNvbmQgbWVhbnMgMSBNQi9zIHdpdGggOCBiaXRzIFNDU0kgYW5kIDIgTUIvcyB3aXRoIAorV2lkZTE2IFNDU0kuCisKKzE2LjEgU3luY2hyb25vdXMgdGltaW5ncyBmb3IgNTNDODk1LCA1M0M4NzUgYW5kIDUzQzg2MCBTQ1NJIGNvbnRyb2xsZXJzCisKKyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgTmVnb3RpYXRlZCAgICAgICAgICAgICAgICAgICAgIE5DUiBzZXR0aW5ncworIEZhY3RvciAgIFBlcmlvZCAgIFNwZWVkICAgICAgICBQZXJpb2QgICBTcGVlZAorIC0tLS0tLSAgIC0tLS0tLSAgIC0tLS0tLSAgICAgICAtLS0tLS0gICAtLS0tLS0KKyAxMCAgICAgICAyNSAgICAgICA0MC4wMDAgICAgICAgMjUgICAgICAgNDAuMDAwICAgKDUzQzg5NSBvbmx5KQorIDExICAgICAgIDMwLjIgICAgIDMzLjExMiAgICAgICAzMS4yNSAgICAzMi4wMDAgICAoNTNDODk1IG9ubHkpCisgMTIgICAgICAgNTAgICAgICAgMjAuMDAwICAgICAgIDUwICAgICAgIDIwLjAwMAorIDEzICAgICAgIDUyICAgICAgIDE5LjIzMCAgICAgICA2MiAgICAgICAxNi4wMDAKKyAxNCAgICAgICA1NiAgICAgICAxNy44NTcgICAgICAgNjIgICAgICAgMTYuMDAwCisgMTUgICAgICAgNjAgICAgICAgMTYuNjY2ICAgICAgIDYyICAgICAgIDE2LjAwMAorIDE2ICAgICAgIDY0ICAgICAgIDE1LjYyNSAgICAgICA3NSAgICAgICAxMy4zMzMKKyAxNyAgICAgICA2OCAgICAgICAxNC43MDUgICAgICAgNzUgICAgICAgMTMuMzMzCisgMTggICAgICAgNzIgICAgICAgMTMuODg4ICAgICAgIDc1ICAgICAgIDEzLjMzMworIDE5ICAgICAgIDc2ICAgICAgIDEzLjE1NyAgICAgICA4NyAgICAgICAxMS40MjgKKyAyMCAgICAgICA4MCAgICAgICAxMi41MDAgICAgICAgODcgICAgICAgMTEuNDI4CisgMjEgICAgICAgODQgICAgICAgMTEuOTA0ICAgICAgIDg3ICAgICAgIDExLjQyOAorIDIyICAgICAgIDg4ICAgICAgIDExLjM2MyAgICAgICA5MyAgICAgICAxMC42NjYKKyAyMyAgICAgICA5MiAgICAgICAxMC44NjkgICAgICAgOTMgICAgICAgMTAuNjY2CisgMjQgICAgICAgOTYgICAgICAgMTAuNDE2ICAgICAgMTAwICAgICAgIDEwLjAwMAorIDI1ICAgICAgMTAwICAgICAgIDEwLjAwMCAgICAgIDEwMCAgICAgICAxMC4wMDAKKyAyNiAgICAgIDEwNCAgICAgICAgOS42MTUgICAgICAxMTIgICAgICAgIDguODg4CisgMjcgICAgICAxMDggICAgICAgIDkuMjU5ICAgICAgMTEyICAgICAgICA4Ljg4OAorIDI4ICAgICAgMTEyICAgICAgICA4LjkyOCAgICAgIDExMiAgICAgICAgOC44ODgKKyAyOSAgICAgIDExNiAgICAgICAgOC42MjAgICAgICAxMjUgICAgICAgIDguMDAwCisgMzAgICAgICAxMjAgICAgICAgIDguMzMzICAgICAgMTI1ICAgICAgICA4LjAwMAorIDMxICAgICAgMTI0ICAgICAgICA4LjA2NCAgICAgIDEyNSAgICAgICAgOC4wMDAKKyAzMiAgICAgIDEyOCAgICAgICAgNy44MTIgICAgICAxMzEgICAgICAgIDcuNjE5CisgMzMgICAgICAxMzIgICAgICAgIDcuNTc1ICAgICAgMTUwICAgICAgICA2LjY2NgorIDM0ICAgICAgMTM2ICAgICAgICA3LjM1MiAgICAgIDE1MCAgICAgICAgNi42NjYKKyAzNSAgICAgIDE0MCAgICAgICAgNy4xNDIgICAgICAxNTAgICAgICAgIDYuNjY2CisgMzYgICAgICAxNDQgICAgICAgIDYuOTQ0ICAgICAgMTUwICAgICAgICA2LjY2NgorIDM3ICAgICAgMTQ4ICAgICAgICA2Ljc1NiAgICAgIDE1MCAgICAgICAgNi42NjYKKyAzOCAgICAgIDE1MiAgICAgICAgNi41NzggICAgICAxNzUgICAgICAgIDUuNzE0CisgMzkgICAgICAxNTYgICAgICAgIDYuNDEwICAgICAgMTc1ICAgICAgICA1LjcxNAorIDQwICAgICAgMTYwICAgICAgICA2LjI1MCAgICAgIDE3NSAgICAgICAgNS43MTQKKyA0MSAgICAgIDE2NCAgICAgICAgNi4wOTcgICAgICAxNzUgICAgICAgIDUuNzE0CisgNDIgICAgICAxNjggICAgICAgIDUuOTUyICAgICAgMTc1ICAgICAgICA1LjcxNAorIDQzICAgICAgMTcyICAgICAgICA1LjgxMyAgICAgIDE3NSAgICAgICAgNS43MTQKKyA0NCAgICAgIDE3NiAgICAgICAgNS42ODEgICAgICAxODcgICAgICAgIDUuMzMzCisgNDUgICAgICAxODAgICAgICAgIDUuNTU1ICAgICAgMTg3ICAgICAgICA1LjMzMworIDQ2ICAgICAgMTg0ICAgICAgICA1LjQzNCAgICAgIDE4NyAgICAgICAgNS4zMzMKKyA0NyAgICAgIDE4OCAgICAgICAgNS4zMTkgICAgICAyMDAgICAgICAgIDUuMDAwCisgNDggICAgICAxOTIgICAgICAgIDUuMjA4ICAgICAgMjAwICAgICAgICA1LjAwMAorIDQ5ICAgICAgMTk2ICAgICAgICA1LjEwMiAgICAgIDIwMCAgICAgICAgNS4wMDAKKworCisxNi4yIFN5bmNocm9ub3VzIHRpbWluZ3MgZm9yIGZhc3QgU0NTSS0yIDUzQzhYWCBjb250cm9sbGVycworCisgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIE5lZ290aWF0ZWQgICAgICAgICAgICAgICAgICAgICBOQ1Igc2V0dGluZ3MKKyBGYWN0b3IgICBQZXJpb2QgICBTcGVlZCAgICAgICAgUGVyaW9kICAgU3BlZWQKKyAtLS0tLS0gICAtLS0tLS0gICAtLS0tLS0gICAgICAgLS0tLS0tICAgLS0tLS0tCisgMjUgICAgICAxMDAgICAgICAgMTAuMDAwICAgICAgMTAwICAgICAgIDEwLjAwMAorIDI2ICAgICAgMTA0ICAgICAgICA5LjYxNSAgICAgIDEyNSAgICAgICAgOC4wMDAKKyAyNyAgICAgIDEwOCAgICAgICAgOS4yNTkgICAgICAxMjUgICAgICAgIDguMDAwCisgMjggICAgICAxMTIgICAgICAgIDguOTI4ICAgICAgMTI1ICAgICAgICA4LjAwMAorIDI5ICAgICAgMTE2ICAgICAgICA4LjYyMCAgICAgIDEyNSAgICAgICAgOC4wMDAKKyAzMCAgICAgIDEyMCAgICAgICAgOC4zMzMgICAgICAxMjUgICAgICAgIDguMDAwCisgMzEgICAgICAxMjQgICAgICAgIDguMDY0ICAgICAgMTI1ICAgICAgICA4LjAwMAorIDMyICAgICAgMTI4ICAgICAgICA3LjgxMiAgICAgIDEzMSAgICAgICAgNy42MTkKKyAzMyAgICAgIDEzMiAgICAgICAgNy41NzUgICAgICAxNTAgICAgICAgIDYuNjY2CisgMzQgICAgICAxMzYgICAgICAgIDcuMzUyICAgICAgMTUwICAgICAgICA2LjY2NgorIDM1ICAgICAgMTQwICAgICAgICA3LjE0MiAgICAgIDE1MCAgICAgICAgNi42NjYKKyAzNiAgICAgIDE0NCAgICAgICAgNi45NDQgICAgICAxNTAgICAgICAgIDYuNjY2CisgMzcgICAgICAxNDggICAgICAgIDYuNzU2ICAgICAgMTUwICAgICAgICA2LjY2NgorIDM4ICAgICAgMTUyICAgICAgICA2LjU3OCAgICAgIDE3NSAgICAgICAgNS43MTQKKyAzOSAgICAgIDE1NiAgICAgICAgNi40MTAgICAgICAxNzUgICAgICAgIDUuNzE0CisgNDAgICAgICAxNjAgICAgICAgIDYuMjUwICAgICAgMTc1ICAgICAgICA1LjcxNAorIDQxICAgICAgMTY0ICAgICAgICA2LjA5NyAgICAgIDE3NSAgICAgICAgNS43MTQKKyA0MiAgICAgIDE2OCAgICAgICAgNS45NTIgICAgICAxNzUgICAgICAgIDUuNzE0CisgNDMgICAgICAxNzIgICAgICAgIDUuODEzICAgICAgMTc1ICAgICAgICA1LjcxNAorIDQ0ICAgICAgMTc2ICAgICAgICA1LjY4MSAgICAgIDE4NyAgICAgICAgNS4zMzMKKyA0NSAgICAgIDE4MCAgICAgICAgNS41NTUgICAgICAxODcgICAgICAgIDUuMzMzCisgNDYgICAgICAxODQgICAgICAgIDUuNDM0ICAgICAgMTg3ICAgICAgICA1LjMzMworIDQ3ICAgICAgMTg4ICAgICAgICA1LjMxOSAgICAgIDIwMCAgICAgICAgNS4wMDAKKyA0OCAgICAgIDE5MiAgICAgICAgNS4yMDggICAgICAyMDAgICAgICAgIDUuMDAwCisgNDkgICAgICAxOTYgICAgICAgIDUuMTAyICAgICAgMjAwICAgICAgICA1LjAwMAorCisKKzE3LiBTZXJpYWwgTlZSQU0gKGFkZGVkIGJ5IFJpY2hhcmQgV2FsdGhhbTogZG9ybW91c2VAZmFyc3JvYnQuZGVtb24uY28udWspCisKKzE3LjEgRmVhdHVyZXMKKworRW5hYmxpbmcgc2VyaWFsIE5WUkFNIHN1cHBvcnQgZW5hYmxlcyBkZXRlY3Rpb24gb2YgdGhlIHNlcmlhbCBOVlJBTSBpbmNsdWRlZAorb24gU3ltYmlvcyBhbmQgc29tZSBTeW1iaW9zIGNvbXBhdGlibGUgaG9zdCBhZGFwdG9ycywgYW5kIFRla3JhbSBib2FyZHMuIFRoZSAKK3NlcmlhbCBOVlJBTSBpcyB1c2VkIGJ5IFN5bWJpb3MgYW5kIFRla3JhbSB0byBob2xkIHNldCB1cCBwYXJhbWV0ZXJzIGZvciB0aGUgCitob3N0IGFkYXB0b3IgYW5kIGl0J3MgYXR0YWNoZWQgZHJpdmVzLgorCitUaGUgU3ltYmlvcyBOVlJBTSBhbHNvIGhvbGRzIGRhdGEgb24gdGhlIGJvb3Qgb3JkZXIgb2YgaG9zdCBhZGFwdG9ycyBpbiBhCitzeXN0ZW0gd2l0aCBtb3JlIHRoYW4gb25lIGhvc3QgYWRhcHRvci4gVGhpcyBlbmFibGVzIHRoZSBvcmRlciBvZiBzY2FubmluZwordGhlIGNhcmRzIGZvciBkcml2ZXMgdG8gYmUgY2hhbmdlZCBmcm9tIHRoZSBkZWZhdWx0IHVzZWQgZHVyaW5nIGhvc3QgYWRhcHRvcgorZGV0ZWN0aW9uLgorCitUaGlzIGNhbiBiZSBkb25lIHRvIGEgbGltaXRlZCBleHRlbnQgYXQgdGhlIG1vbWVudCB1c2luZyAicmV2ZXJzZSBwcm9iZSIgYnV0Cit0aGlzIG9ubHkgY2hhbmdlcyB0aGUgb3JkZXIgb2YgZGV0ZWN0aW9uIG9mIGRpZmZlcmVudCB0eXBlcyBvZiBjYXJkcy4gVGhlCitOVlJBTSBib290IG9yZGVyIHNldHRpbmdzIGNhbiBkbyB0aGlzIGFzIHdlbGwgYXMgY2hhbmdlIHRoZSBvcmRlciB0aGUgc2FtZQordHlwZXMgb2YgY2FyZHMgYXJlIHNjYW5uZWQgaW4sIHNvbWV0aGluZyAicmV2ZXJzZSBwcm9iZSIgY2Fubm90IGRvLgorCitUZWtyYW0gYm9hcmRzIHVzaW5nIFN5bWJpb3MgY2hpcHMsIERDMzkwVy9GL1UsIHdoaWNoIGhhdmUgTlZSQU0gYXJlIGRldGVjdGVkCithbmQgdGhpcyBpcyB1c2VkIHRvIGRpc3Rpbmd1aXNoIGJldHdlZW4gU3ltYmlvcyBjb21wYXRpYmxlIGFuZCBUZWtyYW0gaG9zdCAKK2FkYXB0b3JzLiBUaGlzIGlzIHVzZWQgdG8gZGlzYWJsZSB0aGUgU3ltYmlvcyBjb21wYXRpYmxlICJkaWZmIiBzZXR0aW5nCitpbmNvcnJlY3RseSBzZXQgb24gVGVrcmFtIGJvYXJkcyBpZiB0aGUgQ09ORklHX1NDU0lfNTNDOFhYX1NZTUJJT1NfQ09NUEFUIAorY29uZmlndXJhdGlvbiBwYXJhbWV0ZXIgaXMgc2V0IGVuYWJsaW5nIGJvdGggU3ltYmlvcyBhbmQgVGVrcmFtIGJvYXJkcyB0byBiZSAKK3VzZWQgdG9nZXRoZXIgd2l0aCB0aGUgU3ltYmlvcyBjYXJkcyB1c2luZyBhbGwgdGhlaXIgZmVhdHVyZXMsIGluY2x1ZGluZworImRpZmYiIHN1cHBvcnQuICgibGVkIHBpbiIgc3VwcG9ydCBmb3IgU3ltYmlvcyBjb21wYXRpYmxlIGNhcmRzIGNhbiByZW1haW4KK2VuYWJsZWQgd2hlbiB1c2luZyBUZWtyYW0gY2FyZHMuIEl0IGRvZXMgbm90aGluZyB1c2VmdWwgZm9yIFRla3JhbSBob3N0CithZGFwdG9ycyBidXQgZG9lcyBub3QgY2F1c2UgcHJvYmxlbXMgZWl0aGVyLikKKworCisxNy4yIFN5bWJpb3MgTlZSQU0gbGF5b3V0CisKK3R5cGljYWwgZGF0YSBhdCBOVlJBTSBhZGRyZXNzIDB4MTAwICg1M2M4MTBhIE5WUkFNKQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKzAwIDAwCis2NCAwMQorOGUgMGIKKworMDAgMzAgMDAgMDAgMDAgMDAgMDcgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDcgMDQgMTAgMDQgMDAgMDAgCisKKzA0IDAwIDBmIDAwIDAwIDEwIDAwIDUwIDAwIDAwIDAxIDAwIDAwIDYyIAorMDQgMDAgMDMgMDAgMDAgMTAgMDAgNTggMDAgMDAgMDEgMDAgMDAgNjMgCiswNCAwMCAwMSAwMCAwMCAxMCAwMCA0OCAwMCAwMCAwMSAwMCAwMCA2MSAKKzAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIAorCiswZiAwMCAwOCAwOCA2NCAwMCAwYSAwMAorMGYgMDAgMDggMDggNjQgMDAgMGEgMDAgCiswZiAwMCAwOCAwOCA2NCAwMCAwYSAwMCAKKzBmIDAwIDA4IDA4IDY0IDAwIDBhIDAwIAorMGYgMDAgMDggMDggNjQgMDAgMGEgMDAgCiswZiAwMCAwOCAwOCA2NCAwMCAwYSAwMCAKKzBmIDAwIDA4IDA4IDY0IDAwIDBhIDAwIAorMGYgMDAgMDggMDggNjQgMDAgMGEgMDAgCisKKzBmIDAwIDA4IDA4IDY0IDAwIDBhIDAwIAorMGYgMDAgMDggMDggNjQgMDAgMGEgMDAgCiswZiAwMCAwOCAwOCA2NCAwMCAwYSAwMCAKKzBmIDAwIDA4IDA4IDY0IDAwIDBhIDAwIAorMGYgMDAgMDggMDggNjQgMDAgMGEgMDAgCiswZiAwMCAwOCAwOCA2NCAwMCAwYSAwMCAKKzBmIDAwIDA4IDA4IDY0IDAwIDBhIDAwIAorMGYgMDAgMDggMDggNjQgMDAgMGEgMDAgCisKKzAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIAorMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgCiswMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAKKzAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIAorMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgCiswMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAKKzAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIAorMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgCisKKzAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIAorMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgCiswMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAKKzAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIAorMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgCiswMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAKKzAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIAorMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgCisKKzAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIAorMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgCiswMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAKKworZmUgZmUKKzAwIDAwCiswMCAwMAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK05WUkFNIGxheW91dCBkZXRhaWxzCisKK05WUkFNIEFkZHJlc3MgMHgwMDAtMHgwZmYgbm90IHVzZWQKKyAgICAgICAgICAgICAgMHgxMDAtMHgyNmYgaW5pdGlhbGlzZWQgZGF0YQorICAgICAgICAgICAgICAweDI3MC0weDdmZiBub3QgdXNlZAorCitnZW5lcmFsIGxheW91dAorCisgICAgICAgIGhlYWRlciAgLSAgIDYgYnl0ZXMsCisgICAgICAgIGRhdGEgICAgLSAzNTYgYnl0ZXMgKGNoZWNrc3VtIGlzIGJ5dGUgc3VtIG9mIHRoaXMgZGF0YSkKKyAgICAgICAgdHJhaWxlciAtICAgNiBieXRlcworICAgICAgICAgICAgICAgICAgLS0tCisgICAgICAgIHRvdGFsICAgICAzNjggYnl0ZXMKKworZGF0YSBhcmVhIGxheW91dAorCisgICAgICAgIGNvbnRyb2xsZXIgc2V0IHVwICAtICAyMCBieXRlcworICAgICAgICBib290IGNvbmZpZ3VyYXRpb24gLSAgNTYgYnl0ZXMgKDR4MTQgYnl0ZXMpCisgICAgICAgIGRldmljZSBzZXQgdXAgICAgICAtIDEyOCBieXRlcyAoMTZ4OCBieXRlcykKKyAgICAgICAgdW51c2VkIChzcGFyZT8pICAgIC0gMTUyIGJ5dGVzICgxOXg4IGJ5dGVzKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLS0KKyAgICAgICAgdG90YWwgICAgICAgICAgICAgICAgMzU2IGJ5dGVzCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitoZWFkZXIKKworMDAgMDAgICAtID8/IHN0YXJ0IG1hcmtlcgorNjQgMDEgICAtIGJ5dGUgY291bnQgKGxzYi9tc2IgZXhjbHVkZXMgaGVhZGVyL3RyYWlsZXIpCis4ZSAwYiAgIC0gY2hlY2tzdW0gKGxzYi9tc2IgZXhjbHVkZXMgaGVhZGVyL3RyYWlsZXIpCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorY29udHJvbGxlciBzZXQgdXAKKworMDAgMzAgMDAgMDAgMDAgMDAgMDcgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDcgMDQgMTAgMDQgMDAgMDAKKyAgICAgICAgICAgICAgICAgICB8ICAgICB8ICAgICAgICAgICB8ICAgICB8CisgICAgICAgICAgICAgICAgICAgfCAgICAgfCAgICAgICAgICAgfCAgICAgIC0tIGhvc3QgSUQKKyAgICAgICAgICAgICAgICAgICB8ICAgICB8ICAgICAgICAgICB8CisgICAgICAgICAgICAgICAgICAgfCAgICAgfCAgICAgICAgICAgIC0tUmVtb3ZhYmxlIE1lZGlhIFN1cHBvcnQKKyAgICAgICAgICAgICAgICAgICB8ICAgICB8ICAgICAgICAgICAgICAgMHgwMCA9IG5vbmUKKyAgICAgICAgICAgICAgICAgICB8ICAgICB8ICAgICAgICAgICAgICAgMHgwMSA9IEJvb3RhYmxlIERldmljZQorICAgICAgICAgICAgICAgICAgIHwgICAgIHwgICAgICAgICAgICAgICAweDAyID0gQWxsIHdpdGggTWVkaWEKKyAgICAgICAgICAgICAgICAgICB8ICAgICB8CisgICAgICAgICAgICAgICAgICAgfCAgICAgIC0tZmxhZyBiaXRzIDIKKyAgICAgICAgICAgICAgICAgICB8ICAgICAgICAweDAwMDAwMDAxPSBzY2FuIG9yZGVyIGhpLT5sb3cKKyAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgKGRlZmF1bHQgMHgwMCAtIHNjYW4gbG93LT5oaSkKKyAgICAgICAgICAgICAgICAgICAgLS1mbGFnIGJpdHMgMQorICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxIHNjYW0gZW5hYmxlCisgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTAgcGFyaXR5IGVuYWJsZQorICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMTAwIHZlcmJvc2UgYm9vdCBtc2dzCisKK3JlbWFpbmluZyBieXRlcyB1bmtub3duIC0gdGhleSBkbyBub3QgYXBwZWFyIHRvIGNoYW5nZSBpbiBteQorY3VycmVudCBzZXQgdXAgZm9yIGFueSBvZiB0aGUgY29udHJvbGxlcnMuCisKK2RlZmF1bHQgc2V0IHVwIGlzIGlkZW50aWNhbCBmb3IgNTNjODEwYSBhbmQgNTNjODc1IE5WUkFNCisoUmVtb3ZhYmxlIE1lZGlhIGFkZGVkIFN5bWJpb3MgQklPUyB2ZXJzaW9uIDQuMDkpCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorYm9vdCBjb25maWd1cmF0aW9uCisKK2Jvb3Qgb3JkZXIgc2V0IGJ5IG9yZGVyIG9mIHRoZSBkZXZpY2VzIGluIHRoaXMgdGFibGUKKworMDQgMDAgMGYgMDAgMDAgMTAgMDAgNTAgMDAgMDAgMDEgMDAgMDAgNjIgLS0gMXN0IGNvbnRyb2xsZXIKKzA0IDAwIDAzIDAwIDAwIDEwIDAwIDU4IDAwIDAwIDAxIDAwIDAwIDYzICAgIDJuZCBjb250cm9sbGVyCiswNCAwMCAwMSAwMCAwMCAxMCAwMCA0OCAwMCAwMCAwMSAwMCAwMCA2MSAgICAzcmQgY29udHJvbGxlcgorMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgICAgNHRoIGNvbnRyb2xsZXIKKyAgICAgICB8ICB8ICB8ICB8ICAgICB8ICAgICAgICB8ICAgICB8ICB8CisgICAgICAgfCAgfCAgfCAgfCAgICAgfCAgICAgICAgfCAgICAgIC0tLS0gUENJIGlvIHBvcnQgYWRyCisgICAgICAgfCAgfCAgfCAgfCAgICAgfCAgICAgICAgIC0tMHgwMSBpbml0L3NjYW4gYXQgYm9vdCB0aW1lCisgICAgICAgfCAgfCAgfCAgfCAgICAgIC0tUENJIGRldmljZS9mdW5jdGlvbiBudW1iZXIgKDB4ZGRkZGRmZmYpCisgICAgICAgfCAgfCAgIC0tLS0tID8/IFBDSSB2ZW5kb3IgSUQgKGxzYi9tc2IpCisgICAgICAgIC0tLS1QQ0kgZGV2aWNlIElEIChsc2IvbXNiKQorCis/PyB1c2Ugb2YgdGhpcyBkYXRhIGlzIGEgZ3Vlc3MgYnV0IHNlZW1zIHJlYXNvbmFibGUKKworcmVtYWluaW5nIGJ5dGVzIHVua25vd24gLSB0aGV5IGRvIG5vdCBhcHBlYXIgdG8gY2hhbmdlIGluIG15CitjdXJyZW50IHNldCB1cAorCitkZWZhdWx0IHNldCB1cCBpcyBpZGVudGljYWwgZm9yIDUzYzgxMGEgYW5kIDUzYzg3NSBOVlJBTQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2RldmljZSBzZXQgdXAgKHVwIHRvIDE2IGRldmljZXMgLSBpbmNsdWRlcyBjb250cm9sbGVyKQorCiswZiAwMCAwOCAwOCA2NCAwMCAwYSAwMCAtIGlkIDAKKzBmIDAwIDA4IDA4IDY0IDAwIDBhIDAwIAorMGYgMDAgMDggMDggNjQgMDAgMGEgMDAgCiswZiAwMCAwOCAwOCA2NCAwMCAwYSAwMCAKKzBmIDAwIDA4IDA4IDY0IDAwIDBhIDAwIAorMGYgMDAgMDggMDggNjQgMDAgMGEgMDAgCiswZiAwMCAwOCAwOCA2NCAwMCAwYSAwMCAKKzBmIDAwIDA4IDA4IDY0IDAwIDBhIDAwIAorCiswZiAwMCAwOCAwOCA2NCAwMCAwYSAwMCAKKzBmIDAwIDA4IDA4IDY0IDAwIDBhIDAwIAorMGYgMDAgMDggMDggNjQgMDAgMGEgMDAgCiswZiAwMCAwOCAwOCA2NCAwMCAwYSAwMCAKKzBmIDAwIDA4IDA4IDY0IDAwIDBhIDAwIAorMGYgMDAgMDggMDggNjQgMDAgMGEgMDAgCiswZiAwMCAwOCAwOCA2NCAwMCAwYSAwMCAKKzBmIDAwIDA4IDA4IDY0IDAwIDBhIDAwIC0gaWQgMTUKKyB8ICAgICB8ICB8ICB8ICAgICB8ICB8CisgfCAgICAgfCAgfCAgfCAgICAgIC0tLS10aW1lb3V0IChsc2IvbXNiKQorIHwgICAgIHwgIHwgICAtLXN5bmNoIHBlcmlvZCAoMHg/PyA0MCBNdHJhbnMvc2VjLSBmYXN0IDQwKSAocHJvYmFibHkgMHgyOCkKKyB8ICAgICB8ICB8ICAgICAgICAgICAgICAgICAgKDB4MzAgMjAgTXRyYW5zL3NlYy0gZmFzdCAyMCkKKyB8ICAgICB8ICB8ICAgICAgICAgICAgICAgICAgKDB4NjQgMTAgTXRyYW5zL3NlYy0gZmFzdCApCisgfCAgICAgfCAgfCAgICAgICAgICAgICAgICAgICgweGM4ICA1IE10cmFucy9zZWMpCisgfCAgICAgfCAgfCAgICAgICAgICAgICAgICAgICgweDAwICBhc3luY2hyb25vdXMpCisgfCAgICAgfCAgIC0tID8/IG1heCBzeW5jIG9mZnNldCAoMHgwOCBpbiBOVlJBTSBvbiA1M2M4MTBhKSAKKyB8ICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICgweDEwIGluIE5WUkFNIG9uIDUzYzg3NSkKKyB8ICAgICAgLS1kZXZpY2UgYnVzIHdpZHRoICgweDA4IG5hcnJvdykKKyB8ICAgICAgICAgICAgICAgICAgICAgICAgICgweDEwIDE2IGJpdCB3aWRlKQorICAtLWZsYWcgYml0cworICAgIDB4MDAwMDAwMDEgLSBkaXNjb25uZWN0IGVuYWJsZWQKKyAgICAweDAwMDAwMDEwIC0gc2NhbiBhdCBib290IHRpbWUKKyAgICAweDAwMDAwMTAwIC0gc2NhbiBsdW5zCisgICAgMHgwMDAwMTAwMCAtIHF1ZXVlIHRhZ3MgZW5hYmxlZAorCityZW1haW5pbmcgYnl0ZXMgdW5rbm93biAtIHRoZXkgZG8gbm90IGFwcGVhciB0byBjaGFuZ2UgaW4gbXkKK2N1cnJlbnQgc2V0IHVwCisKKz8/IHVzZSBvZiB0aGlzIGRhdGEgaXMgYSBndWVzcyBidXQgc2VlbXMgcmVhc29uYWJsZSAKKyhidXQgaXQgY291bGQgYmUgbWF4IGJ1cyB3aWR0aCkKKworZGVmYXVsdCBzZXQgdXAgZm9yIDUzYzgxMGEgTlZSQU0KK2RlZmF1bHQgc2V0IHVwIGZvciA1M2M4NzUgTlZSQU0gLSBidXMgd2lkdGggICAgIC0gMHgxMAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIHN5bmMgb2Zmc2V0ID8gLSAweDEwCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gc3luYyBwZXJpb2QgICAtIDB4MzAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCis/PyBzcGFyZSBkZXZpY2Ugc3BhY2UgKDMyIGJpdCBidXMgPz8pCisKKzAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwICAoMTl4OGJ5dGVzKQorLgorLgorMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAKKworZGVmYXVsdCBzZXQgdXAgaXMgaWRlbnRpY2FsIGZvciA1M2M4MTBhIGFuZCA1M2M4NzUgTlZSQU0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit0cmFpbGVyCisKK2ZlIGZlICAgLSA/IGVuZCBtYXJrZXIgPworMDAgMDAKKzAwIDAwCisKK2RlZmF1bHQgc2V0IHVwIGlzIGlkZW50aWNhbCBmb3IgNTNjODEwYSBhbmQgNTNjODc1IE5WUkFNCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisKKworMTcuMyBUZWtyYW0gTlZSQU0gbGF5b3V0CisKK252cmFtIDY0eDE2ICgxMDI0IGJpdCkKKworRHJpdmUgc2V0dGluZ3MKKworRHJpdmUgSUQgMC0xNSAoYWRkciAweDB5eXl5MCA9IGRldmljZSBzZXR1cCwgeXl5eSA9IElEKQorICAgICAgICAgICAgICAoYWRkciAweDB5eXl5MSA9IDB4MDAwMCkKKworICAgIHggeCB4IHggIHggeCB4IHggIHggeCB4IHggIHggeCB4IHgKKyAgICAgICAgICAgICAgIHwgfCB8ICAgICAgfCB8ICB8IHwgfCB8CisgICAgICAgICAgICAgICB8IHwgfCAgICAgIHwgfCAgfCB8IHwgIC0tLS0tIHBhcml0eSBjaGVjayAgIDAgLSBvZmYKKyAgICAgICAgICAgICAgIHwgfCB8ICAgICAgfCB8ICB8IHwgfCAgICAgICAgICAgICAgICAgICAgICAgMSAtIG9uCisgICAgICAgICAgICAgICB8IHwgfCAgICAgIHwgfCAgfCB8IHwKKyAgICAgICAgICAgICAgIHwgfCB8ICAgICAgfCB8ICB8IHwgIC0tLS0tLS0gc3luYyBuZWcgICAgICAgMCAtIG9mZgorICAgICAgICAgICAgICAgfCB8IHwgICAgICB8IHwgIHwgfCAgICAgICAgICAgICAgICAgICAgICAgICAxIC0gb24KKyAgICAgICAgICAgICAgIHwgfCB8ICAgICAgfCB8ICB8IHwKKyAgICAgICAgICAgICAgIHwgfCB8ICAgICAgfCB8ICB8ICAtLS0tLS0tLS0gZGlzY29ubmVjdCAgICAgMCAtIG9mZgorICAgICAgICAgICAgICAgfCB8IHwgICAgICB8IHwgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAxIC0gb24KKyAgICAgICAgICAgICAgIHwgfCB8ICAgICAgfCB8ICB8CisgICAgICAgICAgICAgICB8IHwgfCAgICAgIHwgfCAgIC0tLS0tLS0tLS0tIHN0YXJ0IGNtZCAgICAgIDAgLSBvZmYKKyAgICAgICAgICAgICAgIHwgfCB8ICAgICAgfCB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSAtIG9uCisgICAgICAgICAgICAgICB8IHwgfCAgICAgIHwgfAorICAgICAgICAgICAgICAgfCB8IHwgICAgICB8ICAtLS0tLS0tLS0tLS0tLSB0YWdnZWQgY21kcyAgICAwIC0gb2ZmCisgICAgICAgICAgICAgICB8IHwgfCAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEgLSBvbgorICAgICAgICAgICAgICAgfCB8IHwgICAgICB8IAorICAgICAgICAgICAgICAgfCB8IHwgICAgICAgLS0tLS0tLS0tLS0tLS0tLSB3aWRlIG5lZyAgICAgICAwIC0gb2ZmCisgICAgICAgICAgICAgICB8IHwgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEgLSBvbgorICAgICAgICAgICAgICAgfCB8IHwKKyAgICAgICAgICAgICAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gc3luYyByYXRlICAgICAgMCAtIDEwLjAgTXRyYW5zL3NlYworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxIC0gIDguMAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyIC0gIDYuNgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzIC0gIDUuNworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0IC0gIDUuMAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1IC0gIDQuMAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA2IC0gIDMuMAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA3IC0gIDIuMAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA3IC0gIDIuMAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4IC0gMjAuMAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA5IC0gMTYuNworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhIC0gMTMuOQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiIC0gMTEuOQorCitHbG9iYWwgc2V0dGluZ3MKKworSG9zdCBmbGFncyAwIChhZGRyIDB4MTAwMDAwLCAzMikgCisKKyAgICB4IHggeCB4ICB4IHggeCB4ICB4IHggeCB4ICB4IHggeCB4CisgICAgfCB8IHwgfCAgfCB8IHwgfCAgICAgICAgICAgfCB8IHwgfAorICAgIHwgfCB8IHwgIHwgfCB8IHwgICAgICAgICAgICAtLS0tLS0tLS0tLSBob3N0IElEICAgIDB4MDAgLSAweDBmCisgICAgfCB8IHwgfCAgfCB8IHwgfAorICAgIHwgfCB8IHwgIHwgfCB8ICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBzdXBwb3J0IGZvciAgICAwIC0gb2ZmCisgICAgfCB8IHwgfCAgfCB8IHwgICAgICAgICAgICAgICAgICAgICAgICAgID4gMiBkcml2ZXMgICAgIDEgLSBvbgorICAgIHwgfCB8IHwgIHwgfCB8IAorICAgIHwgfCB8IHwgIHwgfCAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBzdXBwb3J0IGRyaXZlcyAwIC0gb2ZmCisgICAgfCB8IHwgfCAgfCB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgID4gMUdieXRlcyAgICAgIDEgLSBvbgorICAgIHwgfCB8IHwgIHwgfAorICAgIHwgfCB8IHwgIHwgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBidXMgcmVzZXQgb24gICAwIC0gb2ZmCisgICAgfCB8IHwgfCAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG93ZXIgb24gICAgIDEgLSBvbgorICAgIHwgfCB8IHwgIHwKKyAgICB8IHwgfCB8ICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gYWN0aXZlIG5lZyAgICAgMCAtIG9mZgorICAgIHwgfCB8IHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxIC0gb24KKyAgICB8IHwgfCB8CisgICAgfCB8IHwgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIGltbSBzZWVrICAgICAgIDAgLSBvZmYKKyAgICB8IHwgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSAtIG9uCisgICAgfCB8IHwKKyAgICB8IHwgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gc2NhbiBsdW5zICAgICAgMCAtIG9mZgorICAgIHwgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxIC0gb24KKyAgICB8IHwKKyAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gcmVtb3ZhYmxlICAgICAgMCAtIGRpc2FibGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXMgQklPUyBkZXYgICAgMSAtIGJvb3QgZGV2aWNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIgLSBhbGwKKworSG9zdCBmbGFncyAxIChhZGRyIDB4MTAwMDAxLCAzMykKKworICAgIHggeCB4IHggIHggeCB4IHggIHggeCB4IHggIHggeCB4IHgKKyAgICAgICAgICAgICAgIHwgfCB8ICAgICAgICAgICAgIHwgfCB8IAorICAgICAgICAgICAgICAgfCB8IHwgICAgICAgICAgICAgIC0tLS0tLS0tLSBib290IGRlbGF5ICAgICAwIC0gICAzIHNlYworICAgICAgICAgICAgICAgfCB8IHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxIC0gICA1CisgICAgICAgICAgICAgICB8IHwgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIgLSAgMTAKKyAgICAgICAgICAgICAgIHwgfCB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMyAtICAyMAorICAgICAgICAgICAgICAgfCB8IHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0IC0gIDMwCisgICAgICAgICAgICAgICB8IHwgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUgLSAgNjAKKyAgICAgICAgICAgICAgIHwgfCB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNiAtIDEyMAorICAgICAgICAgICAgICAgfCB8IHwKKyAgICAgICAgICAgICAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gbWF4IHRhZyBjbWRzICAgMCAtICAyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEgLSAgNAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyIC0gIDgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMyAtIDE2CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQgLSAzMgorCitIb3N0IGZsYWdzIDIgKGFkZHIgMHgxMDAwMTAsIDM0KQorCisgICAgeCB4IHggeCAgeCB4IHggeCAgeCB4IHggeCAgeCB4IHggeAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0tLS0gRjIvRjYgZW5hYmxlICAgMCAtIG9mZiA/Pz8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSAtIG9uICA/Pz8KKworY2hlY2tzdW0gKGFkZHIgMHgxMTExMTEpCisKK2NoZWNrc3VtID0gMHgxMjM0IC0gKHN1bSBhZGRyIDAtNjMpCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworZGVmYXVsdCBudnJhbSBkYXRhOgorCisweDAwMzcgMHgwMDAwIDB4MDAzNyAweDAwMDAgMHgwMDM3IDB4MDAwMCAweDAwMzcgMHgwMDAwCisweDAwMzcgMHgwMDAwIDB4MDAzNyAweDAwMDAgMHgwMDM3IDB4MDAwMCAweDAwMzcgMHgwMDAwCisweDAwMzcgMHgwMDAwIDB4MDAzNyAweDAwMDAgMHgwMDM3IDB4MDAwMCAweDAwMzcgMHgwMDAwCisweDAwMzcgMHgwMDAwIDB4MDAzNyAweDAwMDAgMHgwMDM3IDB4MDAwMCAweDAwMzcgMHgwMDAwIAorCisweDBmMDcgMHgwNDAwIDB4MDAwMSAweDAwMDAgMHgwMDAwIDB4MDAwMCAweDAwMDAgMHgwMDAwCisweDAwMDAgMHgwMDAwIDB4MDAwMCAweDAwMDAgMHgwMDAwIDB4MDAwMCAweDAwMDAgMHgwMDAwCisweDAwMDAgMHgwMDAwIDB4MDAwMCAweDAwMDAgMHgwMDAwIDB4MDAwMCAweDAwMDAgMHgwMDAwCisweDAwMDAgMHgwMDAwIDB4MDAwMCAweDAwMDAgMHgwMDAwIDB4MDAwMCAweDAwMDAgMHhmYmJjCisKKworMTguIFN1cHBvcnQgZm9yIEJpZyBFbmRpYW4KKworVGhlIFBDSSBsb2NhbCBidXMgaGFzIGJlZW4gcHJpbWFyaWx5IGRlc2lnbmVkIGZvciB4ODYgYXJjaGl0ZWN0dXJlLgorQXMgYSBjb25zZXF1ZW5jZSwgUENJIGRldmljZXMgZ2VuZXJhbGx5IGV4cGVjdCBEV09SRFMgdXNpbmcgbGl0dGxlIGVuZGlhbiAKK2J5dGUgb3JkZXJpbmcuCisKKzE4LjEgQmlnIEVuZGlhbiBDUFUKKworSW4gb3JkZXIgdG8gc3VwcG9ydCBOQ1IgY2hpcHMgb24gYSBCaWcgRW5kaWFuIGFyY2hpdGVjdHVyZSB0aGUgZHJpdmVyIGhhcyB0byAKK3BlcmZvcm0gYnl0ZSByZW9yZGVyaW5nIGVhY2ggdGltZSBpdCBpcyBuZWVkZWQuIFRoaXMgZmVhdHVyZSBoYXMgYmVlbiAKK2FkZGVkIHRvIHRoZSBkcml2ZXIgYnkgQ29ydCA8Y29ydEBjcy5ubXQuZWR1PiBhbmQgaXMgYXZhaWxhYmxlIGluIGRyaXZlciAKK3ZlcnNpb24gMi41IGFuZCBsYXRlciBvbmVzLiBGb3IgdGhlIG1vbWVudCBCaWcgRW5kaWFuIHN1cHBvcnQgaGFzIG9ubHkgCitiZWVuIHRlc3RlZCBvbiBMaW51eC9QUEMgKFBvd2VyUEMpLgorCisxOC4yIE5DUiBjaGlwIGluIEJpZyBFbmRpYW4gbW9kZSBvZiBvcGVyYXRpb25zCisKK0l0IGNhbiBiZSByZWFkIGluIFNZTUJJT1MgZG9jdW1lbnRhdGlvbiB0aGF0IHNvbWUgY2hpcHMgc3VwcG9ydCBhIHNwZWNpYWwgCitCaWcgRW5kaWFuIG1vZGUsIG9uIHBhcGVyOiA1M0M4MTUsIDUzQzgyNUEsIDUzQzg3NSwgNTNDODc1TiwgNTNDODk1LgorVGhpcyBtb2RlIG9mIG9wZXJhdGlvbnMgaXMgbm90IHNvZnR3YXJlLXNlbGVjdGFibGUsIGJ1dCBuZWVkcyBwaW4gbmFtZWQgCitCaWdMaXQgdG8gYmUgcHVsbGVkLXVwLiBVc2luZyB0aGlzIG1vZGUsIG1vc3Qgb2YgYnl0ZSByZW9yZGVyaW5ncyBzaG91bGQgCitiZSBhdm9pZGVkIHdoZW4gdGhlIGRyaXZlciBpcyBydW5uaW5nIG9uIGEgQmlnIEVuZGlhbiBDUFUuCitEcml2ZXIgdmVyc2lvbiAyLjUgaXMgYWxzbywgaW4gdGhlb3J5LCByZWFkeSBmb3IgdGhpcyBmZWF0dXJlLgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitFbmQgb2YgTkNSNTNDOFhYIGRyaXZlciBSRUFETUUgZmlsZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9zY3NpL29zc3QudHh0IGIvRG9jdW1lbnRhdGlvbi9zY3NpL29zc3QudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNlNTc0ZTcKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL3Njc2kvb3NzdC50eHQKQEAgLTAsMCArMSwyMTkgQEAKK1JFQURNRSBmaWxlIGZvciB0aGUgb3NzdCBkcml2ZXIKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyh3KSBLdXJ0IEdhcmxvZmYgPGdhcmxvZmZAc3VzZS5kZT4gMTIvMjAwMAorCitUaGlzIGZpbGUgZGVzY3JpYmVzIHRoZSBvc3N0IGRyaXZlciBhcyBvZiB2ZXJzaW9uIDAuOC54LzAuOS54LCB0aGUgcmVsZWFzZWQKK3ZlcnNpb24gb2YgdGhlIG9zc3QgZHJpdmVyLgorSXQgaXMgaW50ZW5kZWQgdG8gaGVscCBhZHZhbmNlZCB1c2VycyB0byB1bmRlcnN0YW5kIHRoZSByb2xlIG9mIG9zc3QgYW5kIHRvCitnZXQgdGhlbSBzdGFydGVkIHVzaW5nIChhbmQgbWF5YmUgZGVidWdnaW5nKSBpdC4KK0l0IHdvbid0IGFkZHJlc3MgaXNzdWVzIGxpa2UgIkhvdyBkbyBJIGNvbXBpbGUgYSBrZXJuZWw/IiBvciAiSG93IGRvIEkgbG9hZAorYSBtb2R1bGU/IiwgYXMgdGhlc2UgYXJlIHRvbyBiYXNpYy4KK09uY2UgdGhlIE9uU3RyZWFtIGdvdCBtZXJnZWQgaW50byB0aGUgb2ZmaWNpYWwga2VybmVsLCB0aGUgZGlzdHJvIG1ha2Vycword2lsbCBwcm92aWRlIHRoZSBPblN0cmVhbSBzdXBwb3J0IGZvciB0aG9zZSB3aG8gYXJlIG5vdCBmYW1pbGlhciB3aXRoCitoYWNraW5nIHRoZWlyIGtlcm5lbHMuCisKKworUHVycG9zZQorLS0tLS0tLQorVGhlIG9zc3QgZHJpdmVyIHdhcyBkZXZlbG9wZWQsIGJlY2F1c2UgdGhlIHN0YW5kYXJkIFNDU0kgdGFwZSBkcml2ZXIgaW4KK0xpbnV4LCBzdCwgZG9lcyBub3Qgc3VwcG9ydCB0aGUgT25TdHJlYW0gU0MteDAgU0NTSSB0YXBlLiBUaGUgc3QgaXMgbm90IHRvCitibGFtZSBmb3IgdGhhdCwgYXMgdGhlIE9uU3RyZWFtIHRhcGUgZHJpdmVzIGRvIG5vdCBzdXBwb3J0IHRoZSBzdGFuZGFyZCBTQ1NJCitjb21tYW5kIHNldCBmb3IgU2VyaWFsIEFjY2VzcyBTdG9yYWdlIERldmljZXMgKFNBU0RzKSwgd2hpY2ggYmFzaWNhbGx5Citjb3JyZXNwb25kcyB0byB0aGUgUUlDLTE1NyBzcGVjLgorTmV2ZXJ0aGVsZXNzLCB0aGUgT25TdHJlYW0gdGFwZXMgYXJlIG5pY2UgcGllY2VzIG9mIGhhcmR3YXJlIGFuZCB0aGVyZWZvcmUKK3RoZSBvc3N0IGRyaXZlciBoYXMgYmVlbiB3cml0dGVuIHRvIG1ha2UgdGhlc2UgdGFwZSBkZXZzIHN1cHBvcnRlZCBieSBMaW51eC4KK1RoZSBkcml2ZXIgaXMgZnJlZSBzb2Z0d2FyZS4gSXQncyByZWxlYXNlZCB1bmRlciB0aGUgR05VIEdQTCBhbmQgcGxhbm5lZCB0bworYmUgaW50ZWdyYXRlZCBpbnRvIHRoZSBtYWluc3RyZWFtIGtlcm5lbC4KKworCitJbXBsZW1lbnRhdGlvbgorLS0tLS0tLS0tLS0tLS0KK1RoZSBvc3N0IGlzIGEgbmV3IGhpZ2gtbGV2ZWwgU0NTSSBkcml2ZXIsIGp1c3QgbGlrZSBzdCwgc3IsIHNkIGFuZCBzZy4gSXQKK2NhbiBiZSBjb21waWxlZCBpbnRvIHRoZSBrZXJuZWwgb3IgbG9hZGVkIGFzIGEgbW9kdWxlLgorQXMgaXQgcmVwcmVzZW50cyBhIG5ldyBkZXZpY2UsIGl0IGdvdCBhc3NpZ25lZCBhIG5ldyBkZXZpY2Ugbm9kZTogL2Rldi9vc3N0WAorYXJlIGNoYXJhY3RlciBkZXZpY2VzIHdpdGggbWFqb3Igbm8gMjA2IGFuZCBtaW5vciBudW1iZXJzIGxpa2UgdGhlIC9kZXYvc3RYCitkZXZpY2VzLiBJZiB0aG9zZSBhcmUgbm90IHByZXNlbnQsIHlvdSBtYXkgY3JlYXRlIHRoZW0gYnkgY2FsbGluZworTWFrZWRldnMuc2ggYXMgcm9vdCAoc2VlIGJlbG93KS4KK1RoZSBkcml2ZXIgc3RhcnRlZCBiZWluZyBhIGNvcHkgb2Ygc3QgYW5kIGFzIHN1Y2gsIHRoZSBvc3N0IGRldmljZXMnCitiZWhhdmlvciBsb29rcyB2ZXJ5IG11Y2ggdGhlIHNhbWUgYXMgc3QgdG8gdGhlIHVzZXJzcGFjZSBhcHBsaWNhdGlvbnMuCisKKworSGlzdG9yeQorLS0tLS0tLQorSW4gdGhlIGZpcnN0IHBsYWNlLCBvc3N0IHNoYXJlZCBpdCdzIGlkZW50aXR5IHZlcnkgbXVjaCB3aXRoIHN0LiBUaGF0IG1lYW50Cit0aGF0IGl0IHVzZWQgdGhlIHNhbWUga2VybmVsIHN0cnVjdHVyZXMgYW5kIHRoZSBzYW1lIGRldmljZSBub2RlIGFzIHN0LgorU28geW91IGNvdWxkIG9ubHkgaGF2ZSBlaXRoZXIgb2YgdGhlbSBiZWluZyBwcmVzZW50IGluIHRoZSBrZXJuZWwuIFRoaXMgaGFzCitiZWVuIGZpeGVkIGJ5IHJlZ2lzdGVyaW5nIGFuIG93biBkZXZpY2UsIG5vdy4KK3N0IGFuZCBvc3N0IGNhbiBjb2V4aXN0LCBlYWNoIG9ubHkgYWNjZXNzaW5nIHRoZSBkZXZpY2VzIGl0IGNhbiBzdXBwb3J0IGJ5Cit0aGVtc2VsdmVzLgorCisKK0luc3RhbGxhdGlvbgorLS0tLS0tLS0tLS0tCitvc3N0IGdvdCBpbnRlZ3JhdGVkIGludG8gdGhlIGxpbnV4IGtlcm5lbC4gU2VsZWN0IGl0IGR1cmluZyBrZXJuZWwKK2NvbmZpZ3VyYXRpb24gYXMgbW9kdWxlIG9yIGNvbXBpbGUgc3RhdGljYWxseSBpbnRvIHRoZSBrZXJuZWwuCitDb21waWxlIHlvdXIga2VybmVsIGFuZCBpbnN0YWxsIHRoZSBtb2R1bGVzLgorCitOb3csIHlvdXIgb3NzdCBkcml2ZXIgaXMgaW5zaWRlIHRoZSBrZXJuZWwgb3IgYXZhaWxhYmxlIGFzIGEgbW9kdWxlLAorZGVwZW5kaW5nIG9uIHlvdXIgY2hvaWNlIGR1cmluZyBrZXJuZWwgY29uZmlnLiBZb3UgbWF5IHN0aWxsIG5lZWQgdG8gY3JlYXRlCit0aGUgZGV2aWNlIG5vZGVzIGJ5IGNhbGxpbmcgdGhlIE1ha2VkZXZzLnNoIHNjcmlwdCAoc2VlIGJlbG93KSBtYW51YWxseSwKK3VubGVzcyB5b3UgdXNlIGEgZGV2ZnMga2VybmVsLCB3aGVyZSB0aGlzIHdvbid0IGJlIG5lZWRlZC4KKworVG8gbG9hZCB5b3VyIG1vZHVsZSwgeW91IG1heSB1c2UgdGhlIGNvbW1hbmQgCittb2Rwcm9iZSBvc3N0CithcyByb290LiBkbWVzZyBzaG91bGQgc2hvdyB5b3UsIHdoZXRoZXIgeW91ciBPblN0cmVhbSB0YXBlcyBoYXZlIGJlZW4KK3JlY29nbml6ZWQuCisKK0lmIHlvdSB3YW50IHRvIGhhdmUgdGhlIG1vZHVsZSBhdXRvbG9hZGVkIG9uIGFjY2VzcyB0byAvZGV2L29zc3QsIHlvdSBtYXkKK2FkZCBzb21ldGhpbmcgbGlrZQorYWxpYXMgY2hhci1tYWpvci0yMDYgb3NzdAordG8geW91ciAvZXRjL21vZHByb2JlLmNvbmYgKGJlZm9yZSAyLjY6IG1vZHVsZXMuY29uZikuCisKK1lvdSBtYXkgZmluZCBpdCBjb252ZW5pZW50IHRvIGNyZWF0ZSBhIHN5bWJvbGljIGxpbmsgCitsbiAtcyBub3NzdDAgL2Rldi90YXBlCit0byBtYWtlIHByb2dyYW1zIGFzc3VtaW5nIGEgZGVmYXVsdCBuYW1lIG9mIC9kZXYvdGFwZSBtb3JlIGNvbnZlbmllbnQgdG8KK3VzZS4KKworVGhlIGRldmljZSBub2RlcyBmb3Igb3NzdCBoYXZlIHRvIGJlIGNyZWF0ZWQuIFVzZSB0aGUgTWFrZWRldnMuc2ggc2NyaXB0CithdHRhY2hlZCB0byB0aGlzIGZpbGUuCisKKworVXNpbmcgaXQKKy0tLS0tLS0tCitZb3UgbWF5IHVzZSB0aGUgT25TdHJlYW0gdGFwZSBkcml2ZXIgd2l0aCB5b3VyIHN0YW5kYXJkIGJhY2t1cCBzb2Z0d2FyZSwKK3doaWNoIG1heSBiZSB0YXIsIGNwaW8sIGFtYW5kYSwgYXJrZWlhLCBCUlUsIExvbmUgVGFyLCAuLi4KK2J5IHNwZWNpZnlpbmcgL2Rldi8obilvc3N0MCBhcyB0aGUgdGFwZSBkZXZpY2UgdG8gdXNlIG9yIHVzaW5nIHRoZSBhYm92ZQorc3ltbGluayB0cmljay4gVGhlIElPQ1RMcyB0byBjb250cm9sIHRhcGUgb3BlcmF0aW9uIGFyZSBhbHNvIG1vc3RseQorc3VwcG9ydGVkIGFuZCB5b3UgbWF5IHRyeSB0aGUgbXQgKG9yIG10X3N0KSBwcm9ncmFtIHRvIGp1bXAgYmV0d2VlbgorZmlsZW1hcmtzLCBlamVjdCB0aGUgdGFwZSwgLi4uCisKK1RoZXJlJ3Mgb25lIGxpbWl0YXRpb246IFlvdSBuZWVkIHRvIHVzZSBhIGJsb2NrIHNpemUgb2YgMzJrQi4KKworKFRoaXMgbGltaXRhdGlvbiBpcyB3b3JrZWQgb24gYW5kIHdpbGwgYmUgZml4ZWQgaW4gdmVyc2lvbiAwLjguOCBvZgorIHRoaXMgZHJpdmVyLikKKworSWYgeW91IGp1c3Qgd2FudCB0byBnZXQgc3RhcnRlZCB3aXRoIHN0YW5kYXJkIHNvZnR3YXJlLCBoZXJlIGlzIGFuIGV4YW1wbGUKK2ZvciBjcmVhdGluZyBhbmQgcmVzdG9yaW5nIGEgZnVsbCBiYWNrdXA6CisjIEJhY2t1cAordGFyIGN2ZiAtIC8gLS1leGNsdWRlIC9wcm9jIHwgYnVmZmVyIC1zIDMyayAtbSAyNE0gLUIgLXQgLW8gL2Rldi9ub3NzdDAKKyMgUmVzdG9yZQorYnVmZmVyIC1zIDMyayAtbSA4TSAtQiAtdCAtaSAvZGV2L29zc3QwIHwgdGFyIHh2ZiAtIC1DIC8KKworVGhlIGJ1ZmZlciBjb21tYW5kIGhhcyBiZWVuIHVzZWQgdG8gYnVmZmVyIHRoZSBkYXRhIGJlZm9yZSBpdCBnb2VzIHRvIHRoZQordGFwZSAob3IgdGhlIGZpbGUgc3lzdGVtKSBpbiBvcmRlciB0byBzbW9vdGggb3V0IHRoZSBkYXRhIHN0cmVhbSBhbmQgcHJldmVudAordGhlIHRhcGUgZnJvbSBuZWVkaW5nIHRvIHN0b3AgYW5kIHJld2luZC4gVGhlIE9uU3RyZWFtIGRvZXMgaGF2ZSBhbiBpbnRlcm5hbAorYnVmZmVyIGFuZCBhIHZhcmlhYmxlIHNwZWVkIHdoaWNoIGhlbHAgdGhpcywgYnV0IGVzcGVjaWFsbHkgb24gd3JpdGluZywgdGhlCitidWZmZXJpbmcgc3RpbGwgcHJvdmVzIHVzZWZ1bCBpbiBtb3N0IGNhc2VzLiBJdCBhbHNvIHBhZHMgdGhlIGRhdGEgdG8KK2d1YXJhbnRlZXMgdGhlIGJsb2NrIHNpemUgb2YgMzJrLiAoT3RoZXJ3aXNlIHlvdSBtYXkgcGFzcyB0aGUgLWI2NCBvcHRpb24gdG8KK3Rhci4pCitFeHBlY3Qgc29tZXRoaW5nIGxpa2UgMS44TUIvcyBmb3IgdGhlIFNDLXgwIGRyaXZlcyBhbmQgMC45TUIvcyBmb3IgdGhlIERJLTMwLgorVGhlIFVTQiBkcml2ZSB3aWxsIGdpdmUgeW91IGFib3V0IDAuN01CL3MuCitPbiBhIGZhc3QgbWFjaGluZSwgeW91IG1heSBwcm9maXQgZnJvbSBzb2Z0d2FyZSBkYXRhIGNvbXByZXNzaW9uICh6IGZsYWcgZm9yCit0YXIpLgorCisKK1VTQiBhbmQgSURFCistLS0tLS0tLS0tLQorVmlhIHRoZSBTQ1NJIGVtdWxhdGlvbiBsYXllcnMgdXNiLXN0b3JhZ2UgYW5kIGlkZS1zY3NpLCB5b3UgY2FuIGFsc28gdXNlIHRoZQorb3NzdCBkcml2ZXIgdG8gZHJpdmUgdGhlIFVTQi0zMCBhbmQgdGhlIERJLTMwIGRyaXZlcy4gKFVuZm9ydHVuYXRlbHksIHRoZXJlCitpcyBubyBzdWNoIGxheWVyIGZvciB0aGUgcGFyYWxsZWwgcG9ydCwgb3RoZXJ3aXNlIHRoZSBEUC0zMCB3b3VsZCB3b3JrIGFzCit3ZWxsLikgRm9yIHRoZSBVU0Igc3VwcG9ydCwgeW91IG5lZWQgdGhlIGxhdGVzdCAyLjQuMC10ZXN0IGtlcm5lbHMgYW5kIHRoZSAKK2xhdGVzdCB1c2Itc3RvcmFnZSBkcml2ZXIgZnJvbSAKK2h0dHA6Ly93d3cubGludXgtdXNiLm9yZy8KK2h0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvY3ZzLz9ncm91cF9pZD0zNTgxCisKK05vdGUgdGhhdCB0aGUgaWRlLXRhcGUgZHJpdmVyIGFzIG9mIDEuMTZmIHVzZXMgYSBzbGlnaHRseSBvdXRkYXRlZCBvbi10YXBlCitmb3JtYXQgYW5kIHRoZXJlZm9yZSBpcyBub3QgY29tcGxldGVseSBpbnRlcm9wZXJhYmxlIHdpdGggb3NzdCB0YXBlcy4KKworVGhlIEFEUi14MCBsaW5lIGlzIGZ1bGx5IFNDU0ktMiBjb21wbGlhbnQgYW5kIGlzIHN1cHBvcnRlZCBieSBzdCwgbm90IG9zc3QuCitUaGUgb24tdGFwZSBmb3JtYXQgaXMgc3VwcG9zZWQgdG8gYmUgY29tcGF0aWJsZSB3aXRoIHRoZSBvbmUgdXNlZCBieSBvc3N0LgorCisKK0ZlZWRiYWNrIGFuZCB1cGRhdGVzCistLS0tLS0tLS0tLS0tLS0tLS0tLQorVGhlIGRyaXZlciBkZXZlbG9wbWVudCBpcyBjb29yZGluYXRlZCB0aHJvdWdoIGEgbWFpbGluZyBsaXN0Cis8b3NzdEBsaW51eDEub25zdHJlYW0ubmw+CithIENWUyByZXBvc2l0b3J5IGFuZCBzb21lIHdlYiBwYWdlcy4gCitUaGUgdGVzdGVyJ3MgcGFnZXMgd2hpY2ggY29udGFpbiByZWNlbnQgbmV3cyBhbmQgdXBkYXRlZCBkcml2ZXJzIHRvIGRvd25sb2FkCitjYW4gYmUgZm91bmQgb24KK2h0dHA6Ly9saW51eDEub25zdHJlYW0ubmwvdGVzdC8KKworSWYgeW91IGZpbmQgYW55IHByb2JsZW1zLCBwbGVhc2UgaGF2ZSBhIGxvb2sgYXQgdGhlIHRlc3RlcidzIHBhZ2UgaW4gb3JkZXIKK3RvIHNlZSB3aGV0aGVyIHRoZSBwcm9ibGVtIGlzIGFscmVhZHkga25vd24gYW5kIHNvbHZlZC4gT3RoZXJ3aXNlLCBwbGVhc2UKK3JlcG9ydCBpdCB0byB0aGUgbWFpbGluZyBsaXN0LiBZb3VyIGZlZWRiYWNrIGlzIHdlbGNvbWUuIChUaGlzIGhvbGRzIGFsc28KK2ZvciByZXBvcnRzIG9mIHN1Y2Nlc3NmdWwgdXNhZ2UsIG9mIGNvdXJzZS4pIAorSW4gY2FzZSBvZiB0cm91YmxlLCBwbGVhc2UgZG8gYWx3YXlzIHByb3ZpZGUgdGhlIGZvbGxvd2luZyBpbmZvOgorKiBkcml2ZXIgYW5kIGtlcm5lbCB2ZXJzaW9uIHVzZWQgKHNlZSBzeXNsb2cpCisqIGRyaXZlciBtZXNzYWdlcyAoc3lzbG9nKQorKiBTQ1NJIGNvbmZpZyBhbmQgT25TdHJlYW0gRmlybXdhcmUgKC9wcm9jL3Njc2kvc2NzaSkKKyogZGVzY3JpcHRpb24gb2YgZXJyb3IuIElzIGl0IHJlcHJvZHVjaWJsZT8KKyogc29mdHdhcmUgYW5kIGNvbW1hbmRzIHVzZWQKKworWW91IG1heSBzdWJzY3JpYmUgdG8gdGhlIG1haWxpbmcgbGlzdCwgQlRXLCBpdCdzIGEgbWFqb3Jkb21vIGxpc3QuCisKKworU3RhdHVzCistLS0tLS0KKzAuOC4wIHdhcyB0aGUgZmlyc3Qgd2lkZXNwcmVhZCBCRVRBIHJlbGVhc2UuIFNpbmNlIHRoZW4gYSBsb3Qgb2YgcmVwb3J0cworaGF2ZSBiZWVuIHNlbnQsIGJ1dCBtb3N0bHkgcmVwb3J0ZWQgc3VjY2VzcyBvciBvbmx5IG1pbm9yIHRyb3VibGUuCitBbGwgdGhlIGlzc3VlcyBoYXZlIGJlZW4gYWRkcmVzc2VkLgorQ2hlY2sgdGhlIHdlYiBwYWdlcyBmb3IgbW9yZSBpbmZvIGFib3V0IHRoZSBjdXJyZW50IGRldmVsb3BtZW50cy4KKzAuOS54IGlzIHRoZSB0cmVlIGZvciB0aGUgMi4zLzIuNCBrZXJuZWwuCisKKworQWNrbm93bGVkZ21lbnRzCistLS0tLS0tLS0tLS0tLS0tCitUaGUgZHJpdmVyIGhhcyBiZWVuIHN0YXJ0ZWQgYnkgbWFraW5nIGEgY29weSBvZiBLYWkgTWFraXNhcmEncyBzdCBkcml2ZXIuCitNb3N0IG9mIHRoZSBkZXZlbG9wbWVudCBoYXMgYmVlbiBkb25lIGJ5IFdpbGxlbSBSaWVkZS4gVGhlIHByZXNlbmNlIG9mIHRoZQordXNlcnNwYWNlIHByb2dyYW0gb3NnIChvbnN0cmVhbXNnKSBmcm9tIFRlcnJ5IEhhcmRpZSBoYXMgYmVlbiByYXRoZXIKK2hlbHBmdWwuIFRoZSBzYW1lIGhvbGRzIGZvciBHYWRpIE94bWFuJ3MgaWRlLXRhcGUgc3VwcG9ydCBmb3IgdGhlIERJLTMwLgorSSBkaWQgYWRkIHNvbWUgcGF0Y2hlcyB0byB0aG9zZSBkcml2ZXJzIGFzIHdlbGwgYW5kIGNvb3JkaW5hdGVkIHRoaW5ncyBhCitsaXR0bGUgYml0LiAKK05vdGUgdGhhdCBtb3N0IG9mIHRoZW0gZGlkIG1vc3RseSBzcGVuZCB0aGVpciBzcGFyZSB0aW1lIGZvciB0aGUgY3JlYXRpb24gb2YKK3RoaXMgZHJpdmVyLgorVGhlIHBlb3BsZSBmcm9tIE9uU3RyZWFtLCBlc3BlY2lhbGx5IEphY2sgQm9tYmVlY2sgZGlkIHN1cHBvcnQgdGhpcyBwcm9qZWN0CithbmQgYWx3YXlzIHRyaWVkIHRvIGFuc3dlciBIVyBvciBGVyByZWxhdGVkIHF1ZXN0aW9ucy4gRnVydGhlcm1vcmUsIGhlCitwdXNoZWQgdGhlIEZXIGRldmVsb3BlcnMgdG8gZG8gdGhlIHJpZ2h0IHRoaW5ncy4KK1N1U0UgZGlkIHN1cHBvcnQgdGhpcyBwcm9qZWN0IGJ5IGFsbG93aW5nIG1lIHRvIHdvcmsgb24gaXQgZHVyaW5nIG15IHdvcmtpbmcKK3RpbWUgZm9yIHRoZW0gYW5kIGJ5IGludGVncmF0aW5nIHRoZSBkcml2ZXIgaW50byB0aGVpciBkaXN0cm8uCisKK01vcmUgcGVvcGxlIGRpZCBoZWxwIGJ5IHNlbmRpbmcgdXNlZnVsIGNvbW1lbnRzLiBTb3JyeSB0byB0aG9zZSB3aG8gaGF2ZQorYmVlbiBmb3Jnb3R0ZW4uIFRoYW5rcyB0byBhbGwgdGhlIEdOVS9GU0YgYW5kIExpbnV4IGRldmVsb3BlcnMgd2hvIG1hZGUgdGhpcworcGxhdGZvcm0gc3VjaCBhbiBpbnRlcmVzdGluZywgbmljZSBhbmQgc3RhYmxlIHBsYXRmb3JtLgorVGhhbmtzIGdvIHRvIHRob3NlIHdobyB0ZXN0ZWQgdGhlIGRyaXZlcnMgYW5kIGRpZCBzZW5kIHVzZWZ1bCByZXBvcnRzLiBZb3VyCitoZWxwIGlzIG5lZWRlZCEKKworCitNYWtlZGV2cy5zaAorLS0tLS0tLS0tLS0KKyMhL2Jpbi9zaAorIyBTY3JpcHQgdG8gY3JlYXRlIE9uU3RyZWFtIFNDLXgwIGRldmljZSBub2RlcyAobWFqb3IgMjA2KQorIyBVc2FnZTogTWFrZWRldnMuc2ggW25vcyBbcGF0aCB0byBkZXZdXQorIyAkSWQ6IFJFQURNRS5vc3N0Lmtlcm5lbCx2IDEuNCAyMDAwLzEyLzIwIDE0OjEzOjE1IGdhcmxvZmYgRXhwICQKK21ham9yPTIwNgorbnJzPTQKK2Rpcj0vZGV2Cit0ZXN0IC16ICIkMSIgfHwgbnJzPSQxCit0ZXN0IC16ICIkMiIgfHwgZGlyPSQyCitkZWNsYXJlIC1pIG5yCitucj0wCit0ZXN0IC1kICRkaXIgfHwgbWtkaXIgLXAgJGRpcgord2hpbGUgdGVzdCAkbnIgLWx0ICRucnM7IGRvCisgIG1rbm9kICRkaXIvb3NzdCRuciBjICRtYWpvciAkbnIKKyAgY2hvd24gMC5kaXNrICRkaXIvb3NzdCRucjsgY2htb2QgNjYwICRkaXIvb3NzdCRucjsKKyAgbWtub2QgJGRpci9ub3NzdCRuciBjICRtYWpvciAkW25yKzEyOF0KKyAgY2hvd24gMC5kaXNrICRkaXIvbm9zc3QkbnI7IGNobW9kIDY2MCAkZGlyL25vc3N0JG5yOworICBta25vZCAkZGlyL29zc3Qke25yfWwgYyAkbWFqb3IgJFtuciszMl0KKyAgY2hvd24gMC5kaXNrICRkaXIvb3NzdCR7bnJ9bDsgY2htb2QgNjYwICRkaXIvb3NzdCR7bnJ9bDsKKyAgbWtub2QgJGRpci9ub3NzdCR7bnJ9bCBjICRtYWpvciAkW25yKzE2MF0KKyAgY2hvd24gMC5kaXNrICRkaXIvbm9zc3Qke25yfWw7IGNobW9kIDY2MCAkZGlyL25vc3N0JHtucn1sOworICBta25vZCAkZGlyL29zc3Qke25yfW0gYyAkbWFqb3IgJFtucis2NF0KKyAgY2hvd24gMC5kaXNrICRkaXIvb3NzdCR7bnJ9bTsgY2htb2QgNjYwICRkaXIvb3NzdCR7bnJ9bTsKKyAgbWtub2QgJGRpci9ub3NzdCR7bnJ9bSBjICRtYWpvciAkW25yKzE5Ml0KKyAgY2hvd24gMC5kaXNrICRkaXIvbm9zc3Qke25yfW07IGNobW9kIDY2MCAkZGlyL25vc3N0JHtucn1tOworICBta25vZCAkZGlyL29zc3Qke25yfWEgYyAkbWFqb3IgJFtucis5Nl0KKyAgY2hvd24gMC5kaXNrICRkaXIvb3NzdCR7bnJ9YTsgY2htb2QgNjYwICRkaXIvb3NzdCR7bnJ9YTsKKyAgbWtub2QgJGRpci9ub3NzdCR7bnJ9YSBjICRtYWpvciAkW25yKzIyNF0KKyAgY2hvd24gMC5kaXNrICRkaXIvbm9zc3Qke25yfWE7IGNobW9kIDY2MCAkZGlyL25vc3N0JHtucn1hOworICBsZXQgbnIrPTEKK2RvbmUKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vc2NzaS9wcGEudHh0IGIvRG9jdW1lbnRhdGlvbi9zY3NpL3BwYS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGRhYzg4ZAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vc2NzaS9wcGEudHh0CkBAIC0wLDAgKzEsMTYgQEAKKy0tLS0tLS0tIFRlcnNlIHdoZXJlIHRvIGdldCBaSVAgRHJpdmUgaGVscCBpbmZvIC0tLS0tLS0tCisKK0dlbmVyYWwgSW9tZWdhIFpJUCBkcml2ZSBwYWdlIGZvciBMaW51eDoKK2h0dHA6Ly93d3cudG9ycXVlLm5ldC9+Y2FtcGJlbGwvCisKK0RyaXZlciBhY2hpdmUgZm9yIG9sZCBkcml2ZXJzOgoraHR0cDovL3d3dy50b3JxdWUubmV0L35jYW1wYmVsbC9wcGEvCisKK0xpbnV4IFBhcnBvcnQgcGFnZSAocGFyYWxsZWwgcG9ydCkKK2h0dHA6Ly93d3cudG9ycXVlLm5ldC9wYXJwb3J0LworCitFbWFpbCBsaXN0IGZvciBMaW51eCBQYXJwb3J0CitsaW51eC1wYXJwb3J0QHRvcnF1ZS5uZXQKKworRW1haWwgZm9yIHByb2JsZW1zIHdpdGggWklQIG9yIFpJUCBQbHVzIGRyaXZlcnMKK2NhbXBiZWxsQHRvcnF1ZS5uZXQKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vc2NzaS9xbGEyeHh4LnJldmlzaW9uLm5vdGVzIGIvRG9jdW1lbnRhdGlvbi9zY3NpL3FsYTJ4eHgucmV2aXNpb24ubm90ZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjkwY2RhZgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vc2NzaS9xbGEyeHh4LnJldmlzaW9uLm5vdGVzCkBAIC0wLDAgKzEsNDU3IEBACisvKgorICogUUxvZ2ljIElTUDIyMDAgYW5kIElTUDIzMDAgTGludXggRHJpdmVyIFJldmlzaW9uIExpc3QgRmlsZS4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBSZXZpc2lvbiBIaXN0b3J5CisgKgorICogIFJldiAgOC4wMC4wMGI4CURlY2VtYmVyIDUsIDIwMDMJQVYKKyAqCS0gSW5zdHJ1Y3QgbWlkLWxheWVyIHRvIHBlcmZvcm0gaW5pdGlhbCBzY2FuLgorICoKKyAqICBSZXYgIDguMDAuMDBiNwlEZWNlbWJlciA1LCAyMDAzCUFWCisgKgktIFJlc3luYyB3aXRoIExpbnV4IEtlcm5lbCAyLjYuMC10ZXN0MTEuCisgKgktIEFkZCBiYXNpYyBOVlJBTSBwYXJzZXIgKGV4dHJhcy9xbGFfbnZyKS4KKyAqCisgKiAgUmV2ICA4LjAwLjAwYjctcHJlMTEgRGVjZW1iZXIgMywgMjAwMwlBVgorICoJLSBTYW5pdGl6ZSB0aGUgc2NzaV9xbGFfaG9zdCBzdHJ1Y3R1cmU6CisgKgkgIC0gUHVyZ2UgdW51c2VkIGVsZW1lbnRzLgorICoJICAtIFJlb3JnYW5pemUgaGlnaC1wcmlvcml0eSBtZW1iZXJzIChjYWNoZSBjb2hlcmVuY3kpLgorICoJLSBBZGQgc3VwcG9ydCBmb3IgTlZSQU0gYWNjZXNzIHZpYSBhIHN5c2ZzIGJpbmFyeSBhdHRyaWJ1dGU6CisgKgkgIC0gQ29uc29saWRhdGUgc2VtYXBob3JlIGxvY2tpbmcgYWNjZXNzLgorICoJLSBGaXggbW9yZSBQQ0kgcG9zdGluZyBpc3N1ZXMuCisgKgktIEFkZCBleHRyYXMgZGlyZWN0b3J5IGZvciBkdW1wL05WUkFNIHRvb2xzLgorICoJLSBSZW1vdmUgdW51c2VkIHFsYV92ZW5kb3IuYyBmaWxlLgorICoKKyAqICBSZXYgIDguMDAuMDBiNy1wcmUxMSBOb3ZlbWJlciAyNiwgMjAwMwlERy9BVgorICoJLSBNZXJnZSBzZXZlcmFsIHBhdGNoZXMgZnJvbSBDaHJpc3RvcGggSGVsbHdpZyBbaGNoQGxzdC5kZV06CisgKgkgIC0gaW4gTGludXggMi42IGJvdGggcGNpIGFuZCB0aGUgc2NzaSBsYXllciB1c2UgdGhlIGdlbmVyaWMKKyAqCSAgICBkbWEgZGlyZWN0aW9uIGJpdHMsIHVzZSB0aGVtIGRpcmVjdGx5IGluc3RlYWQgb2YgdGhlIHNjc2kKKyAqCSAgICBhbmQgcGNpIHZhcmlhbnRzIGFuZCB0aGUgKG5vb3ApIGNvbnZlcnNpb24gcm91dGluZXMuCisgKgktIEZpeCBfSU9YWF9CQUQoKSB1c2FnZSBmb3IgZXh0ZXJuYWwgSU9DVEwgaW50ZXJmYWNlLgorICoJLSBVc2UgYXRvbWljIGNvbnN0cnVjdCBmb3IgSEEgbG9vcF9zdGF0ZSBtZW1iZXIuCisgKgktIEFkZCBnZW5lcmljIG1vZGVsIGRlc2NyaXB0aW9uIHRleHQgZm9yIEhCQSB0eXBlcy4KKyAqCisgKiAgUmV2ICA4LjAwLjAwYjctcHJlNQlOb3ZlbWJlciAxNywgMjAwMwlBVgorICoJLSBNZXJnZSBzZXZlcmFsIHBhdGNoZXMgZnJvbSBDaHJpc3RvcGggSGVsbHdpZyBbaGNoQGxzdC5kZV06CisgKgkgIC0gcGF0Y2ggdG8gc3BsaXQgdGhlIGRyaXZlciBpbnRvIGEgY29tbW9uIHFsYTJ4eHgua28gYW5kIGEKKyAqCSAgICBxbGEyPzAwLmtvIGZvciBlYWNoIEhCQSB0eXBlIC0gdGhlIGxhdHRlciBtb2R1bGVzIGFyZQorICoJICAgIG9ubHkgdmVyeSBzbWFsbCB3cmFwcGVycywgbW9zdGx5IGZvciB0aGUgZmlybXdhcmUKKyAqCSAgICBpbWFnZXMsIGFsbCB0aGUgbWVhdCBpcyBpbiB0aGUgY29tbW9uIHFsYTJ4eHgua28uCisgKgkgIC0gbWFrZSB0aGUgZmFpbG92ZXIgY29kZSBvcHRpb25hbC4KKyAqCSAgLSBraWxsIHVzZWxlc3MgbG9ja19rZXJuZWwgaW4gZHBjIHRocmVhZCBzdGFydHVwLgorICoJICAtIG5vIG5lZWQgZm9yIG1vZHZlcnNpb25zIGhhY2tzIGluIDIuNiAob3IgMi40KS4KKyAqCSAgLSBraWxsIHFsYTJ4MDBfcmVnaXN0ZXJfd2l0aF9MaW51eC4KKyAqCSAgLSBzaW1wbGlmeSBFSCBjb2RlLCBjbWQgb3IgaXQncyBob3N0ZGF0YSBjYW4ndCBiZSBOVUxMLCBubworICoJICAgIG5lZWQgdG8gc2VhcmNoIHdoZXRoZXIgdGhlIGhvc3QgaXQncyBvdXJzLCB0aGUgbWlkbGF5ZXIKKyAqCSAgICBtYWtlcyBzdXJlIGl0IHdvbid0IGNhbGwgaW50byBhIGRyaXZlciBmb3Igc29tZSBlbHNlCisgKgkgICAgaG9zdC4KKyAqCS0gTWVyZ2Ugc2V2ZXJhbCBwYXRjaGVzIGZyb20gSmVzIFNvcmVuc2VuCisgKgkgIFtqZXNAd2lsZG9wZW5zb3VyY2UuY29tXToKKyAqCSAgLSBDYWxsIHFsYTJ4MDBfY29uZmlnX2RtYV9hZGRyZXNzaW5nKCkgYmVmb3JlIHBlcmZvcm1pbmcKKyAqCSAgICBhbnkgY29uc2lzdGVudCBhbGxvY2F0aW9ucy4gVGhpcyBpcyByZXF1aXJlZCBzaW5jZSB0aGUKKyAqCSAgICBkbWEgbWFzayBzZXR0aW5ncyB3aWxsIGFmZmVjdCB0aGUgbWVtb3J5CisgKgkgICAgcGNpX2FsbG9jX2NvbnNpc3RlbnQoKSB3aWxsIHJldHVybi4KKyAqCSAgLSBDYWxsIHBjaV9zZXRfY29uc2lzdGVudF9kbWFfbWFzaygpIHRvIGFsbG93IGZvciA2NCBiaXQKKyAqCSAgICBjb25zaXN0ZW50IGFsbG9jYXRpb25zLCByZXF1aXJlZCBvbiBzb21lIHBsYXRmb3JtcyBzdWNoCisgKgkgICAgYXMgdGhlIFNOMi4KKyAqCSAgLSBXYWl0IDIwIHVzZWNzIChub3Qgc3VyZSBob3cgbG9uZyBpcyByZWFsbHkgbmVjZXNzYXJ5LAorICoJICAgIGJ1dCB0aGlzIHNlZW1zIHNhZmUpIGFmdGVyIHNldHRpbmcgQ1NSX0lTUF9TT0ZUX1JFU0VUIGluCisgKgkgICAgdGhlIGN0cmxfc3RhdHVzIHJlZ2lzdGVyIGFzIHRoZSBjYXJkIGRvZXNuJ3QgcmVzcG9uZCB0bworICoJICAgIFBDSSByZWFkcyB3aGlsZSBpbiByZXNldCBzdGF0ZS4gVGhpcyBjYXVzZXMgYSBtYWNoaW5lCisgKgkgICAgY2hlY2sgb24gc29tZSBhcmNoaXRlY3R1cmVzLgorICoJICAtIEZsdXNoIFBDSSB3cml0ZXMgYmVmb3JlIGNhbGxpbmcgdWRlbGF5KCkgdG8gZW5zdXJlIHRoZQorICoJICAgIHdyaXRlIGlzIG5vdCBzaXR0aW5nIGlkbGUgaW4tZmxpZ2h0IGZvciBhIHdoaWxlIGJlZm9yZQorICoJICAgIGhpdHRpbmcgdGhlIGhhcmR3YXJlLgorICoJICAtIEluY2x1ZGUgbGludXgvdm1hbGxvYy5oIGluIHFsYV9vcy5jIHNpbmNlIGl0IHVzZXMKKyAqCSAgICB2bWFsbG9jKCkuCisgKgkgIC0gVXNlIGF1dG8tbmVnb3RpYXRlIGxpbmsgc3BlZWQgd2hlbiB1c2luZyBkZWZhdWx0CisgKgkgICAgcGFyYW1ldGVycyByYXRoZXIgdGhhbiBOVlJBTSBzZXR0aW5ncy4gRGlzYWJsZSBOVlJBTQorICoJICAgIHJlYWRpbmcgb24gU04yIHNpbmNlIGl0J3Mgbm90IHBvc3NpYmxlIHRvIGV4ZWN1dGUgdGhlCisgKgkgICAgSEJBJ3MgQklPUyBvbiBhbiBTTjIuIEkgc3VnZ2VzdCBkb2luZyBzb21ldGhpbmcgc2ltaWxhcgorICoJICAgIGZvciBhbGwgYXJjaGl0ZWN0dXJlcyB0aGF0IGRvIG5vdCBwcm92aWRlIHg4NiBCSU9TCisgKgkgICAgZW11bGF0aW9uLgorICoJLSBDbGVhbi11cCBzbGFiLWNhY2hlIGFsbG9jYXRpb25zOgorICoJICAtIGxvY2tpbmcuCisgKgkgIC0gbWVtcG9vbCBhbGxvY2F0aW9ucyBpbiBjYXNlIG9mIGxvdy1tZW1vcnkgc2l0dWF0aW9ucy4KKyAqCS0gRmFsbGJhY2sgdG8gR0FfTlhUIHNjYW4gaWYgR0lEX1BUIGNhbGwgcmV0dXJucyBtb3JlIHRoYW4KKyAqCSAgTUFYX0ZJQlJFX0RFVklDRVMuCisgKgktIFByZXNlcnZlIGl0ZXJhdGluZyBwb3J0IElEIGFjcm9zcyBHQV9OWFQgY2FsbHMgaW4KKyAqCSAgcWxhMngwMF9maW5kX2FsbF9mYWJyaWNfZGV2cygpLgorICoJLSBQcmUtY2FsY3VsYXRlIEFTQ0lJIGZpcm13YXJlIGR1bXAgbGVuZ3RoIGFzIHRvIG5vdCBpbmN1ciB0aGUKKyAqCSAgY29zdC10by1jYWxjdWxhdGUgYXQgZWFjaCBpbnZvY2F0aW9uIG9mIGEgcmVhZCgpLgorICoKKyAqICBSZXYgIDguMDAuMDBiNglOb3ZlbWJlciA0LCAyMDAzCUFWCisgKgktIEFkZCBuZXcgMjMwMCBUUFggZmlybXdhcmUgKDMuMDIuMTgpLgorICoKKyAqICBSZXYgIDguMDAuMDBiNi1wcmUyNSBPY3RvYmVyIDIwLCAyMDAzCVJBL0FWCisgKgktIFJlc3luYyB3aXRoIExpbnV4IEtlcm5lbCAyLjYuMC10ZXN0OS4KKyAqCS0gUmV3b3JrIGZpcm13YXJlIGR1bXAgcHJvY2VzczoKKyAqCSAgLSBVc2UgYmluYXJ5IGF0dHJpYnV0ZSB3aXRoaW4gc3lzZnMgdHJlZS4KKyAqCSAgLSBBZGQgdXNlci1zcGFjZSB0b29sIChnZHVtcC5zaCkgdG8gcmV0cmlldmUgZm9ybWF0dGVkCisgKgkgICAgYnVmZmVyLgorICoJICAtIEFkZCBJU1AyMTAwIHN1cHBvcnQuCisgKgktIFVzZSBhIHNsYWIgY2FjaGUgZm9yIFNSQiBhbGxvY2F0aW9ucyB0byByZWR1Y2UgbWVtb3J5CisgKgkgIHByZXNzdXJlLgorICoJLSBJbml0aWFsIGNvbnZlcnNpb24gb2YgZHJpdmVyIGxvZ2dpbmcgbWV0aG9kcyB0byBhIG5ldworICoJICBxbGFfcHJpbnRrKCkgZnVuY3Rpb24gd2hpY2ggdXNlcyBkZXZfcHJpbnRrIChEYW5pZWwKKyAqCSAgU3Rla2xvZmYsIElCTSkuCisgKgktIEZ1cnRoZXIgcmVkdWNlIHN0YWNrIHVzYWdlIGluIHFsYTJ4MDBfY29uZmlndXJlX2xvY2FsX2xvb3AoKQorICoJICBhbmQgcWxhMngwMF9maW5kX2FsbF9mYWJyaWNfZGV2cygpLgorICoJLSBTZXBhcmF0ZSBwb3J0IHN0YXRlIHVzZWQgZm9yIHJvdXRpbmcgb2YgSS9PJ3MgZnJvbSBwb3J0CisgKgkgIG1nbXQtbG9naW4gcmV0cnkgZXRjLgorICoKKyAqICBSZXYgIDguMDAuMDBiNi1wcmUxOSBPY3RvYmVyIDEzLCAyMDAzCUFWCisgKgktIFJlc3luYyB3aXRoIExpbnV4IEtlcm5lbCAyLjYuMC10ZXN0Ny1iazUuCisgKgktIEFkZCBpbnRlbGxpZ2VudCBSU0NOIGV2ZW50IGhhbmRsaW5nOgorICoJICAtIHJlZHVjZSBzY2FuIHRpbWUgZHVyaW5nICdwb3J0JyBSU0NOIGV2ZW50cyBieSBvbmx5CisgKgkgICAgcXVlcnlpbmcgc3BlY2lmaWVkIHBvcnQgaWRzLgorICoJICAtIEF2YWlsYWJsZSBvbiBJU1AyM3h4IGNhcmRzIG9ubHkuCisgKgktIEluY3JlYXNlIG1heGltdW0gbnVtYmVyIG9mIHJlY29nbml6YWJsZSB0YXJnZXRzIGZyb20gMjU2CisgKgkgIHRvIDUxMi4KKyAqCSAgLSBCYWNrZW5kIGNoYW5nZXMgd2VyZSBwcmV2aW91c2x5IGFkZGVkIHRvIHN1cHBvcnQgVFBYCisgKgkgICAgKDJLIGxvZ2lucykgZmlybXdhcmUuICBNaWQtbGF5ZXIgY2FuIG5vdyBzY2FuIGZvciB0YXJnZXRzCisgKgkgICAgKEgsIEIsIFQsIEwpIHdoZXJlIDUxMiA8IFQgPj0gMC4KKyAqCS0gUmVtb3ZlIElQIHN1cHBvcnQgZnJvbSBkcml2ZXIuCisgKgkgIC0gU3dpdGNoIGZpcm13YXJlIHR5cGVzIGZyb20gSVAtPlRQIGZvciBJU1AyMnh4IGFuZAorICoJICAgIElQWC0+VFBYIGZvciBJU1AyM3h4IGNhcmRzLgorICoJICAtIFJlbW92ZSBmaWxlcyBxbGFfaXAuW2NoXS4KKyAqCS0gUmVtb3ZlIHR5cGUgZGVzaWduYXRpb25zIGZyb20gZmlybXdhcmUgZmlsZW5hbWVzLgorICoKKyAqICBSZXYgIDguMDAuMDBiNi1wcmUxMSBTZXB0ZW1iZXIgMTUsIDIwMDMJREcvQVYKKyAqCS0gUmVzeW5jIHdpdGggNi4wNi4wMC4KKyAqCS0gUmVzeW5jIHdpdGggTGludXggS2VybmVsIDIuNi4wLXRlc3Q1LWJrMy4KKyAqCS0gQWRkIG5ldyAyMzAwIElQWCBmaXJtd2FyZSAoMy4wMi4xNSkuCisgKgorICogIFJldiAgOC4wMC4wMGI1CUp1bHkgMzEsIDIwMDMJCUFWCisgKgktIEFsd2F5cyBjcmVhdGUgYW4gZmNfbHVuX3QgZW50cnkgZm9yIGx1biAwIC0gYXMgdGhlIG1pZC0KKyAqCSAgbGF5ZXIgcmVxdWlyZXMgYWNjZXNzIHRvIHRoaXMgbHVuIGZvciBkaXNjb3ZlcnkgdG8gb2NjdXIuCisgKgktIEdlbmVyYWwgc2FuaXRpemluZzoKKyAqCSAgLSBBZGQgZ2VuZXJpYyBmaXJtd2FyZSBvcHRpb24gZGVmaW5pdGlvbnMuCisgKgkgIC0gR2VuZXJhbGl6ZSByZXRyaWV2YWwvdXBkYXRlIG9mIGZpcm13YXJlIG9wdGlvbnMuCisgKgkgIC0gRml4IGNvbXBpbGUgZXJyb3JzIHdoaWNoIG9jY3VyIHdpdGggZXh0ZW5kZWQgZGVidWcuCisgKgkgIC0gSGFuZGxlIGZhaWx1cmUgY2FzZXMgZm9yIHNjc2lfYWRkX2hvc3QoKSBhbmQKKyAqCSAgICBkb3duX2ludGVycnVwdGlibGUoKS4KKyAqCS0gSG9zdCB0ZW1wbGF0ZSB1cGRhdGVzOgorICoJICAtIFVzZSBzdGFuZGFyZCBiaW9zX3BhcmFtIGNhbGxiYWNrIGZ1bmN0aW9uLgorICoJICAtIERpc2FibGUgY2x1c3RlcmluZy4KKyAqCSAgLSBSZW1vdmUgdW5jaGVja2VkX2lzX2RtYSBlbnRyeS4KKyAqCisgKiAgUmV2ICA4LjAwLjAwYjUtcHJlNQlKdWx5IDI5LCAyMDAzCQlERy9BVgorICoJLSBSZXN5bmMgd2l0aCA2LjA2LjAwYjEzLgorICoJLSBSZXN5bmMgd2l0aCBMaW51eCBLZXJuZWwgMi42LjAtdGVzdDIuCisgKgktIFBhc3MgdGhlIGNvbXBsZXRlIGxvb3BfaWQsIG5vdCB0aGUgbWFza2VkICgweGZmKSB2YWx1ZQorICoJICB3aGlsZSBpc3N1aW5nIG1haWxib3ggY29tbWFuZHMgKHFsYV9tYnguYy9xbGFfZm8uYy8KKyAqCSAgcWxhX2lvY2IuYy9xbGFfaW5pdC5jKS4KKyAqCS0gUHJvcGVybHkgaGFuZGxlIHplcm8tbGVuZ3RoIHJldHVybiBzdGF0dXMgZm9yIGFuIFJMQyBDREIuCisgKgktIENyZWF0ZSBhbiBmY2x1bl90IHN0cnVjdHVyZSBmb3IgJ2Rpc2Nvbm5lY3RlZCcgbHVucywKKyAqCSAgcGVyaXBoZXJhbC1xdWFsaWZpZXIgb2YgMDAxYi4KKyAqCS0gUmVtb3ZlIHVudXNlZCBMSVAtc2VxdWVuY2UgcmVnaXN0ZXIgYWNjZXNzIGR1cmluZyBBRSA4MDEwLgorICoJLSBHZW5lcmFsaXplIHFsYTJ4MDBfbWFya19kZXZpY2VfbG9zdCgpIHRvIGhhbmRsZSBmb3JjZWQgCisgKgkgIGxvZ2luIHJlcXVlc3QgLS0gbW9kaWZ5IGFsbCBkaXJlY3QvaW5kaXJlY3QgaW52b2NhdGlvbnMgCisgKgkgIHdpdGggcHJvcGVyIGZsYWcuCisgKgktIFNhdmUgUlNDTiBub3RpZmljYXRpb24gKEFFIDgwMTVoKSBkYXRhIGluIGEgcHJvcGVyIGFuZCAKKyAqCSAgY29uc2lzdGVudCBmb3JtYXQgKGRvbWFpbiwgYXJlYSwgYWxfcGEpLgorICoJLSBHZW5lcmFsIHNhbml0aXppbmc6CisgKgkgIC0gc2NzaV9xbGFfaG9zdCBzdHJ1Y3R1cmUgbWVtYmVyIHJlb3JkZXJpbmcgZm9yIGNhY2hlLWxpbmUKKyAqCSAgICBjb2hlcmVuY3kuCisgKgkgIC0gUmVtb3ZlIHVudXNlZCBTQ1NJIG9wY29kZXMsIGVuZGlhbi1zd2FwIGRlZmluaXRpb25zLgorICoJICAtIFJlbW92ZSBDTURfKiBwcmUtcHJvY2Vzc29yIGRlZmluZXMuCisgKgkgIC0gUmVtb3ZlIHVudXNlZCBTQ1NJRkNIT1RTV0FQL0dBTUFQL01VTFRJSE9TVCBjb2Rlcy4KKyAqCS0gQmFja291dCBwYXRjaCB3aGljaCBhZGRlZCBhIHBlci1zY3NpX3FsYV9ob3N0IHNjc2kgaG9zdAorICoJICBzcGlubG9jaywgc2luY2UgbWlkLWxheWVyIGFscmVhZHkgZGVmaW5lcyBvbmUuCisgKgktIEFkZCBuZXcgMjMwMCBJUFggZmlybXdhcmUgKDMuMDIuMTUpLgorICoKKyAqICBSZXYgIDguMDAuMDBiNAlKdWx5IDE0LCAyMDAzCQlSQS9ERy9BVgorICoJLSBSZXN5bmMgd2l0aCA2LjA2LjAwYjEyLgorICoJLSBSZXN5bmMgd2l0aCBMaW51eCBLZXJuZWwgMi42LjAtdGVzdDEuCisgKgktIFJlbW92ZSBJT0NCIHRocm90dGxpbmcgY29kZSAtLSBvcmlnaW5hbGx5ICNpZidkLgorICoJLSBSZW1vdmUgYXBpZGV2XyooKSByb3V0aW5lcyBzaW5jZSBwcm9jX21rbm9kKCkgaGFzIGJlZW4KKyAqCSAgcmVtb3ZlZCAtLSBuZWVkIGFsdGVybmF0ZSBJT0NUTCBpbnRlcmZhY2UuCisgKgktIE1lcmdlIHNldmVyYWwgcGVyZm9ybWFuY2UvZml4IHBhdGNoZXMgZnJvbSBBcmphbiB2YW4gZGUKKyAqCSAgVmVuOgorICoJICAtIFVuZGVmaW5lZCBvcGVyYXRpb24gPj4gMzIuCisgKgkgIC0gTm8gbmVlZCB0byBhY3F1aXJlIG1pZC1sYXllciBsb2NrIGR1cmluZyBjb21tYW5kCisgKgkgICAgY2FsbGJhY2suIAorICoJICAtIFVzZSBhIHBlci1IQkEgbWlkLWxheWVyIGxvY2suCisgKgkgIC0gVXNlIGEgbm9uLWxvY2tlZCBjeWNsZSBmb3Igc2V0dGluZyB0aGUgY291bnQgb2YgdGhlCisgKgkgICAgbmV3bHkgYWxsb2NhdGVkIHNwIChxbGEyeDAwX2dldF9uZXdfc3AoKSkuCisgKgkgIC0gTW9kaWZ5IHNlbWFudGljIGJlaGF2aW9yIG9mIHFsYTJ4MDBfcXVldWVjb21tYW5kKCk6CisgKgkgICAgLSBSZWR1Y2UgY2FjaGVsaW5lIGJvdW5jaW5nIGJ5IGhhdmluZyBJL09zIHN1Ym1pdHRlZAorICoJICAgICAgYnkgdGhlIElSUSBoYW5kbGVyLgorICoJICAgIC0gUmVtb3ZlIGV4dHJhbmVvdXMgY2FsbHMgdG8gcWxhMngwMF9uZXh0KCkgZHVyaW5nIEkvTworICoJICAgICAgcXVldWluZy4KKyAqCSAgLSBVc2UgbGlzdF9zcGxpY2VfaW5pdCgpIGR1cmluZyBxbGEyeDAwX2RvbmUoKSBoYW5kbGluZworICoJICAgIG9mIGNvbW1hbmRzIHRvIHJlZHVjZSBsaXN0X2xvY2sgY29udGVudGlvbi4KKyAqCSAgLSBSSU8gbW9kZSBzdXBwb3J0IGZvciBJU1AyMjAwOgorICoJICAgIC0gSW1wbGVtZW50YXRpb24gZGlmZmVycyBzbGlnaHRseSBmcm9tIG9yaWdpbmFsIHBhdGNoLgorICoJICAtIERvIG5vdCB1c2UgYm90dG9tLWhhbGYgaGFuZGxlciAodGFza2xldC93b3JrIHF1ZXVlKQorICoJICAgIGZvciBxbGEyeDAwX2RvbmUoKSBwcm9jZXNzaW5nLgorICoKKyAqICBSZXYgIDguMDAuMDBiNC1wcmUyMiBKdWx5IDEyLCAyMDAzCQlBVgorICoJLSBDaGVjayBmb3IgJ1Byb2Nlc3MgUmVzcG9uc2UgUXVldWUnIHJlcXVlc3RzIGVhcmx5IGR1cmluZworICoJICB0aGUgSG9zdCBTdGF0dXMgY2hlY2suCisgKgktIEdlbmVyYWwgc2FuaXRpemluZzoKKyAqCSAgLSBzcmJfdCBzdHJ1Y3R1cmUgcmV3cml0ZSwgcmVtb3ZhbCBvZiB1bnVzZWQgbWVtYmVycy4KKyAqCSAgLSBSZW1vdmUgdW51c2VkIGZjZGV2IGFycmF5LCBmYWJyaWNpZCwgYW5kIFBPUlRfKgorICoJICAgIGRlZmluaXRpb25zLgorICoJICAtIFJlbW92ZSB1bnVzZWQgY29uZmlnX3JlZ190IFBDSSBkZWZpbml0aW9ucy4KKyAqCS0gQWRkIG5ldyAyMjAwIElQIGZpcm13YXJlICgyLjAyLjA2KS4KKyAqCS0gQWRkIG5ldyAyMzAwIElQWCBmaXJtd2FyZSAoMy4wMi4xNCkuCisgKgorICogIFJldiAgOC4wMC4wMGI0LXByZTE5IEp1bmUgMzAsIDIwMDMJCUFWCisgKgktIFJlc3luYyB3aXRoIExpbnV4IEtlcm5lbCAyLjUuNzMtYms4LgorICoJLSBSZXdvcmsgSU9DQiBjb21tYW5kIHF1ZXVpbmcgbWV0aG9kczoKKyAqCSAgLSBVcHBlci1sYXllciBkcml2ZXIgKk1VU1QqIHByb3Blcmx5IHNldCB0aGUgZGlyZWN0aW9uCisgKgkgICAgYml0IG9mIFNDU0kgY29tbWFuZHMuCisgKgkgIC0gR2VuZXJhbGl6ZSAzMmJpdC82NGJpdCBxdWV1aW5nIHBhdGggZnVuY3Rpb25zLgorICoJICAtIFJlbW92ZSBjb3N0bHkgcGFnZS1ib3VuZGFyeSBjcm9zcyBjaGVjayB3aGVuIHVzaW5nCisgKgkgICAgNjRiaXQgYWRkcmVzcyBjYXBhYmxlIElPQ0JzLgorICoKKyAqICBSZXYgIDguMDAuMDBiNC1wcmUxNSBKdW5lIDE5LCAyMDAzCQlBVgorICoJLSBSZXN5bmMgd2l0aCA2LjA2LjAwYjExLgorICoJLSBDb250aW51ZSBmY3BvcnQgbGlzdCBjb25zb2xpZGF0aW9uIHdvcms6CisgKgkgIC0gVXBkYXRlZCBJT0NUTCBpbXBsZW1lbnRhdGlvbnMgdG8gdXNlIG5ldyBmY3BvcnRzIAorICoJICAgIGxpc3QuCisgKgktIE1vZGlmaWVkIHByb2R1Y3QgSUQgY2hlY2sgdG8gbm90IHZlcmlmeSBJU1AgY2hpcAorICoJICByZXZpc2lvbiAtLSBJU1AyMzEyIHYzIChxbGEyeDAwX2NoaXBfZGlhZygpKS4KKyAqCS0gQWRkIG5ldyAyMzAwIElQWCBmaXJtd2FyZSAoMy4wMi4xMyk6CisgKgorICogIFJldiAgOC4wMC4wMGI0LXByZTEzIEp1bmUgMTksIDIwMDMJCUFWCisgKgktIEZpeCBidWlsZCBwcm9jZXNzIGZvciBxbGEyMTAwIGRyaXZlciAtLSBubyBzdXBwb3J0CisgKgkgIGZvciBJUC4KKyAqCS0gU0NTSSBob3N0IHRlbXBsYXRlIG1vZGlmaWNhdGlvbnM6CisgKgkgIC0gU2V0IHNnX3RhYmxlc2l6ZSBiYXNlZCBvbiB0aGUgZGVyaXZlZCBETUEgbWFzay4KKyAqCSAgLSBJbmNyZWFzZSBtYXhfc2VjdG9ycyBzaW5jZSBvbmx5IGxpbWl0IHdpdGhpbiBSSVNDCisgKgkgICAgaXMgdHJhbnNmZXIgb2YgKCgoMl4zMikgLSAxKSA+PiA5KSBzZWN0b3JzLgorICoKKyAqICBSZXYgIDguMDAuMDBiNC1wcmUxMiBKdW5lIDE4LCAyMDAzCQlSQSwgREcsIFJMLCBBVgorICoJLSBSZXN5bmMgd2l0aCA2LjA2LjAwYjEwLgorICoJLSBSZXN5bmMgd2l0aCBMaW51eCBLZXJuZWwgMi41LjcyLgorICoJLSBJbml0aWFsIGZjcG9ydCBsaXN0IGNvbnNvbGlkYXRpb24gd29yazoKKyAqCSAgLSBmY3BvcnRzL2ZjaW5pdGlhdG9ycy9mY2Rldi9mY19pcCAtLT4gaGEtPmZjcG9ydHMKKyAqCSAgICBsaXN0LgorICoKKyAqICBSZXYgIDguMDAuMDBiNC1wcmU3CSBKdW5lIDA1LCAyMDAzCQlBVgorICoJLSBQcm9wZXJseSByZWxlYXNlIFBDSSByZXNvdWNlcyBpbiBpbml0LWZhaWx1cmUgY2FzZS4KKyAqCS0gUmVjb25jaWxlIGRpc3Bhcml0ZSBmdW5jdGlvbiByZXR1cm4gY29kZSBkZWZpbml0aW9ucy4KKyAqCisgKiAgUmV2ICA4LjAwLjAwYjQtcHJlNAkgSnVuZSAwMywgMjAwMwkJQVYKKyAqCS0gUmVzeW5jIHdpdGggTGludXggS2VybmVsIDIuNS43MC1iazg6CisgKgkgIC0gU0hUIHByb2NfaW5mbygpIGNoYW5nZXMuCisgKgktIFJlc3RydWN0dXJlIFNOUyBHZW5lcmljIFNlcnZpY2VzIHJvdXRpbmVzOgorICoJICAtIEFkZCBxbGFfZ3MuYyBmaWxlIHRvIGRyaXZlciBkaXN0cmlidXRpb24uCisgKgktIENvbmZpZ3VyZSBQQ0kgbGF0ZW5jeSB0aW1lciBmb3IgSVNQMjN4eC4KKyAqCisgKiAgUmV2ICA4LjAwLjAwYjQtcHJlMwkgSnVuZSAwMiwgMjAwMwkJUkEsIERHLCBSTCwgQVYKKyAqCS0gUmVzeW5jIHdpdGggNi4wNi4wMGI1LgorICoJLSBSZXdvcmsgKGFnYWluKSBQQ0kgSS9PIHNwYWNlIGNvbmZpZ3VyYXRpb24KKyAqCSAgKEFudG9uIEJsYW5jaGFyZCk6CisgKgkgIC0gVXNlIHBjaV9zZXRfbXdpKCkgcm91dGluZTsKKyAqCSAgICAtIFJlbW92ZSB1bmVlZGVkIHFsYTJ4MDBfc2V0X2NhY2hlX2xpbmUoKSBmdW5jdGlvbi4KKyAqCSAgLSBSZW1vdmUgZXh0cmFuZW91cyBtb2RpZmljYXRpb24gb2YgUENJX0NPTU1BTkQgd29yZC4KKyAqCisgKiAgUmV2ICA4LjAwLjAwYjMgCSBNYXkgMjksIDIwMDMJCUFWCisgKgktIFJlc3luYyB3aXRoIExpbnV4IEtlcm5lbCAyLjUuNzAuCisgKgktIE1vdmUgUklTQyBwYXVzZWQgY2hlY2sgZnJvbSBJU1IgZmFzdC1wYXRoLgorICoKKyAqICBSZXYgIDguMDAuMDBiMy1wcmU4IE1heSAyNiwgMjAwMwkJQVYKKyAqCS0gQWRkIG5ldyAyMzAwIElQWCBmaXJtd2FyZSAoMy4wMi4xMik6CisgKgktIFJld29yayBQQ0kgSS9PIHNwYWNlIGNvbmZpZ3VyYXRpb24uCisgKgorICogIFJldiAgOC4wMC4wMGIzLXByZTYJTWF5IDIyLCAyMDAzCQlSQSwgREcsIFJMLCBBVgorICoJLSBSZXN5bmMgd2l0aCA2LjA2LjAwYjMuCisgKgorICogIFJldiAgOC4wMC4wMGIzLXByZTQJTWF5IDIxIDIwMDMJCUFWCisgKgktIEFkZCBuZXcgMjMwMCBJUFggZmlybXdhcmUgKDMuMDIuMTEpOgorICoJICAtIFJlbW92ZSAyMzAwIFRQWCBmaXJtd2FyZSBmcm9tIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiAgUmV2ICA4LjAwLjAwYjMtcHJlMwlNYXkgMjEgMjAwMwkJQVYKKyAqCS0gUHJvcGVybHkgc2V0dXAgUENJIGNvbmZpZ3VhdGlvbiBzcGFjZSBkdXJpbmcKKyAqCSAgaW5pdGlhbGl6YXRpb246CisgKgkgIC0gUHJvcGVybHkgY29uZmlndXJlIE1lbW9yeS1NYXBwZWQgSS9PIGR1cmluZyBlYXJseQorICoJICAgIGNvbmZpZ3VyYXRpb24gc3RhZ2UuCisgKgktIFJld29yayBJUCBmdW5jdGlvbmFsaXR5IHRvIHN1cHBvcnQgMmsgbG9naW5zLgorICoJLSBBZGQgbmV3IDIzMDAgSVBYIGZpcm13YXJlICgzLjAyLjExKToKKyAqCSAgLSBSZW1vdmUgMjMwMCBUUFggZmlybXdhcmUgZnJvbSBkaXN0cmlidXRpb24uCisgKgorICogIFJldiAgOC4wMC4wMGIzLXByZTIJTWF5ID8/LCAyMDAzCQlSQSwgREcsIFJMLCBBVgorICoJLSBSZXN5bmMgd2l0aCA2LjA2LjAwYjEuCisgKgorICogIFJldiAgOC4wMC4wMGIzLXByZTEJTWF5ID8/LCAyMDAzCQlSQSwgREcsIFJMLCBBVgorICoJLSBSZXN5bmMgd2l0aCA2LjA1LjAwLgorICoKKyAqICBSZXYgIDguMDAuMDBiMglNYXkgMTksIDIwMDMJCUFWCisgKgktIFNpbXBsaWZ5IGRtYV9hZGRyX3QgaGFuZGxpbmcgZHVyaW5nIGNvbW1hbmQgcXVldWluZyBnaXZlbgorICoJICBuZXcgYmxvY2stbGF5ZXIgZGVmaW5lZCByZXN0cmljdGlvbnM6CisgKgkgIC0gUGh5c2ljYWwgYWRkcmVzc2VzIG5vdCBzcGFubmluZyA0R0IgYm91bmRhcmllcy4KKyAqCS0gRmlybXdhcmUgdmVyc2lvbnM6IDIxMDAgVFAgKDEuMTkuMjQpLCAyMjAwIElQICgyLjAyLjA1KSwKKyAqCSAgMjMwMCBUUFggKDMuMDIuMTApLgorICoKKyAqICBSZXYgIDguMDAuMDBiMi1wcmUxCU1heSAxMywgMjAwMwkJQVYKKyAqCS0gQWRkIHN1cHBvcnQgZm9yIG5ldyAnSG90cGx1ZyBpbml0aWFsaXphdGlvbicgbW9kZWwuIAorICoJLSBTaW1wbGlmeSBob3N0IHRlbXBsYXRlIGJ5IHJlbW92aW5nIHVudXNlZCBjYWxsYmFja3MuCisgKgktIFVzZSBzY3NpY2FtIGZhY2lsaXRpZXMgdG8gZGV0ZXJtaW5lIGdlb21ldHJ5LgorICoJLSBGaXggY29tcGlsYXRpb24gaXNzdWVzIGZvciBub24tSVNQMjN4eCBidWlsZHM6CisgKgkgIC0gQ29ycmVjdCByZWdpc3RlciByZWZlcmVuY2VzIGluIHFsYV9kYmcuYy4KKyAqCSAgLSBDb3JyZWN0IE1ha2VmaWxlIGJ1aWxkIHByb2Nlc3MuCisgKgorICogIFJldiAgOC4wMC4wMGIxCU1heSAwNSwgMjAwMwkJQVYKKyAqCS0gUmVzeW5jIHdpdGggTGludXggS2VybmVsIDIuNS42OS4KKyAqCS0gRmlybXdhcmUgdmVyc2lvbnM6IDIxMDAgVFAgKDEuMTkuMjQpLCAyMjAwIFRQICgyLjAyLjA1KSwKKyAqCSAgMjMwMCBUUFggKDMuMDIuMTApLgorICoKKyAqICBSZXYgIDguMDAuMDBiMS1wcmU0NSBBcHJpbCA/PywgMjAwMwkJQVYKKyAqCS0gUmVzeW5jIHdpdGggTGludXggS2VybmVsIDIuNS42OC1iazExOgorICoJLSBGaXggaW1wcm9wZXIgcmV0dXJuLWNvZGUgYXNzaWdubWVudCBkdXJpbmcgZmFicmljCisgKgkgIGRpc2NvdmVyeS4KKyAqCS0gUmVtb3ZlIGFkZGl0aW9uYWwgZXh0cmFuZW91cyAjZGVmaW5lcyBmcm9tCisgKgkgIHFsYV9zZXR0aW5ncy5oLgorICoJICAtIFVTRV9QT1JUTkFNRSAtLSBGTyB3aWxsIGFsd2F5cyB1c2UgcG9ydG5hbWUuCisgKgktIERlZmF1bHQgcXVldWUgZGVwdGggc2l6ZSBzZXQgdG8gNjQuCisgKgorICogIFJldiAgOC4wMC4wMGIxLXByZTQyIEFwcmlsID8/LCAyMDAzCQlBVgorICoJLSBDb252ZXJ0IGJvdHRvbS1oYWxmIHRhc2tsZXQgdG8gYSB3b3JrX3F1ZXVlLgorICoJLSBJbml0aWFsIGJhc2ljIGNvZGluZyBvZiBkeW5hbWljIHF1ZXVlIGRlcHRoIGhhbmRsaW5nCisgKgkgIGR1cmluZyBRVUVVRSBGVUxMIHN0YXR1c2VzLgorICoJLSBGaXggbWFpbGJveCBpbnRlcmZhY2UgcHJvYmxlbSB3aXRoCisgKgkgIHFsYTJ4MDBfZ2V0X3JldHJ5X2NudCgpLgorICoKKyAqICBSZXYgIDguMDAuMDBiMS1wcmU0MSBBcHJpbCA/PywgMjAwMwkJQVYKKyAqCS0gQ29udmVydCBidWlsZCBkZWZpbmVzIHFsYTJbMXwyfDNdMDAgbWFjcm9zIHRvCisgKgkgIHFsYTJbMXwyfDNdeHggZHVlIHRvIG1vZHVsZSBuYW1lIHN0cmluZ2lmaWNhdGlvbiBjbGFzaGVzLgorICoJLSBBZGQgYWRkaXRpb25hbCBJU1AyMzIyIGNoZWNrcyBkdXJpbmcgYm9hcmQgY29uZmlndXJhdGlvbi4KKyAqCisgKiAgUmV2ICA4LjAwLjAwYjEtcHJlNDAgQXByaWwgPz8sIDIwMDMJCUFWCisgKgktIFJlc3luYyB3aXRoIExpbnV4IEtlcm5lbCAyLjUuNjgtYms4OgorICoJICAtIFVwZGF0ZWQgSVJRIGhhbmRsZXIgaW50ZXJmYWNlLgorICoJLSBBZGQgSVNQIGR1bXAgY29kZSAoc3R1YikgaW4gY2FzZSBvZiBTWVNURU1fRVJST1Igb24KKyAqCSAgSVNQMjEwMC4KKyAqCS0gQWRkIG5ldyAyMjAwIElQIGZpcm13YXJlICgyLjAyLjA1KS4KKyAqCisgKiAgUmV2ICA4LjAwLjAwYjEtcHJlMzkgQXByaWwgPz8sIDIwMDMJCUFWCisgKgktIFJlc3luYyB3aXRoIExpbnV4IEtlcm5lbCAyLjUuNjguCisgKgktIEFkZCBzaW1wbGUgYnVpbGQuc2ggc2NyaXB0IHRvIGFpZCBpbiBleHRlcm5hbCBjb21waWxhdGlvbi4KKyAqCS0gQ2xlYW4tYnJlYWsgd2l0aCBLZXJuZWwgMi40IGNvbXBhdGliaWxpdHkuCisgKgkgIC0gUmV3b3JrIERQQyByb3V0aW5lIC0tIGNvbXBsZXRpb24gcm91dGluZXMgZm9yIHNpZ25hbGluZy4KKyAqCS0gUmUtYWRkIEhCQUFQSSBjaGFyYWN0ZXIgZGV2aWNlIG5vZGUgZm9yIElPQ1RMIHN1cHBvcnQuCisgKgktIFJlbW92ZSByZXNpZHVhbCBRTEEyWF9QRVJGT1JNQU5DRSBkZWZpbmVzLgorICoJLSBBbGxvY2F0ZSBTUCBwb29sIHZpYSBfX2dldF9mcmVlX3BhZ2VzKCkgcmF0aGVyIHRoYW4KKyAqCSAgaW5kaXZpZHVhbCBrbWFsbG9jKCkncy4KKyAqCS0gSW5mb3JtIFNDU0kgbWlkLWxheWVyIG9mIDE2LWJ5dGUgQ0RCIHN1cHBvcnQKKyAqCSAgKGhvc3QtPm1heF9jbWRfbGVuKToKKyAqCSAgLSBSZW1vdmUgdW5lY2Vzc2FyeSAnbW9yZV9jZGInIGhhbmRsaW5nIGNvZGUgZnJvbQorICoJICAgIHFsYV9pb2NiLmMgYW5kIHFsYV94aW9jdC5jLgorICoJLSBSZWR1Y2UgZHVwbGljYXRlIGNvZGUgaW4gZmFicmljIHNjYW5uaW5nIGxvZ2ljIChNUyBJT0NCCisgKgkgIHByZXBhcmF0aW9uKS4KKyAqCS0gQWRkIElTUCBkdW1wIGNvZGUgaW4gY2FzZSBvZiBTWVNURU1fRVJST1IuCisgKgktIFJlbW92ZSAyMzAwIFZJWCBmaXJtd2FyZSBmcm9tIGRpc3RyaWJ1dGlvbjoKKyAqCSAgLSBBZGQgaW5pdGlhbCBjb2RlIGZvciBJUFggc3VwcG9ydC4KKyAqCS0gQWRkIG5ldyAyMzAwIFRQWCBmaXJtd2FyZSAoMy4wMi4xMCkuCisgKgorICogIFJldiAgOC4wMC4wMGIxLXByZTM0IEFwcmlsID8/LCAyMDAzCQlBVgorICoJLSBSZXN5bmMgd2l0aCBMaW51eCBLZXJuZWwgMi41LjY3LgorICoJLSBVc2UgZG9tYWluL2FyZWEvYWxfcGEgZmllbGRzIHdoZW4gZGlzcGxheWluZyBQb3J0SUQgCisgKgkgIHZhbHVlcyAtLSBhZGRyZXNzZXMgZW5kaWFuZXNzIGlzc3Vlcy4KKyAqCS0gUmV3b3JrIGxhcmdlIGNhc2Ugc3RhdGVtZW50IHRvIGNoZWNrICdjb21tb24nIENEQiBjb21tYW5kcworICoJICBlYXJseSBpbiBxbGEyeDAwX2dldF9jbWRfZGlyZWN0aW9uKCkuCisgKgorICogIFJldiAgOC4wMC4wMGIxLXByZTMxIEFwcmlsID8/LCAyMDAzCQlBVgorICoJLSBVcGRhdGUgbWFrZWZpbGUgdG8gc3VwcG9ydCBQUEM2NCBidWlsZC4KKyAqCS0gUmV0b29sIE5WUkFNIGNvbmZpZ3VyYXRpb24gcm91dGluZSBhbmQgc3RydWN0dXJlczoKKyAqCSAgLSBDb25zb2xkYXRlIElTUDIxeHgvSVNQMjJ4eC9JU1AyM3h4IGNvbmZpZ3VyYXRpb24KKyAqCSAgICAoc3RydWN0IG52cmFtX3QpLgorICoJICAtIFJlbW92ZSBiaWcvbGl0dGxlIGVuZGlhbiBzdXBwb3J0IHN0cnVjdHVyZXMgaW4gZmF2b3Igb2YKKyAqCSAgICBzaW1wbGlmaWVkIGJpdC1vcGVyYXRpb25zIHdpdGhpbiBieXRlIGZpZWxkcy4KKyAqCS0gRml4IGxvbmctc3RhbmRpbmcgJ3N0YXRpYycgYnVmZmVyIHNoYXJpbmcgcHJvYmxlbSBpbiAKKyAqCSAgcWxhMngwMF9jb25maWd1cmVfZmFicmljKCkuCisgKgorICogIFJldiAgOC4wMC4wMGIxLXByZTMwIEFwcmlsID8/LCAyMDAzCQlBVgorICoJLSBDb21wbGV0ZSBpbXBsZW1lbnRhdGlvbiBvZiBHSURfUFQgc2Nhbi4KKyAqCS0gVXNlIGNvbnNpc3RlbnQgTVMgSU9DQiBpbnZvY2F0aW9uIG1ldGhvZCB0byBxdWVyeSBTTlM6CisgKgkgIC0gQWRkIFJOTl9JRCBhbmQgUlNOTl9OTiByZWdpc3RyYXRpb25zIGluIGEgZmFicmljLgorICoJLSBSZW1vdmUgdW51c2VkIE1haWxib3ggQ29tbWFuZCA2RWggKFNlbmQgU05TKSBzdXBwb3J0CisgKgkgIHN0cnVjdHVyZXMuCisgKgktIFVzZSA2NGJpdCBzYWZlIElPQ0JzIHdoaWxlIGlzc3VpbmcgSU5RVUlSWSBhbmQgUkxDIGR1cmluZworICoJICB0b3BvbG9neSBzY2FuLgorICoJLSBVbnRpbCByZWltcGxlbWVudGF0aW9uIG9mIGZjZGV2X3QvZmNwb3J0IGxpc3QKKyAqCSAgY29uc29saWRhdGlvbiwgdmFsaWQgbG9vcF9pZCByYW5nZXMgYXJlIHN0aWxsIGxpbWl0ZWQgZnJvbQorICoJICAweDAwIHRocm91Z2ggMHhGRiAtLSBlbmZvcmNlIHRoaXMgd2l0aGluIHRoZSBjb2RlLgorICoKKyAqICBSZXYgIDguMDAuMDBiMS1wcmUyNyBNYXJjaCA/PywgMjAwMwkJQVYKKyAqCS0gUmVzeW5jIHdpdGggNi4wNS4wMGI5LgorICoJLSBSZXRvb2wgSEJBIFBDSSBjb25maWd1cmF0aW9uIC0tIHFsYTJ4MDBfcGNpX2NvbmZpZygpLgorICoJLSBSZW1vdmUgaW5jb25zaXN0ZW50IHVzZSBvZiBkZWxheSByb3V0aW5lcyAoVURFTEFZL1NZUyopLgorICoJLSBDb250aW51ZSB0byB0ZWFyZG93bi9jbGVhbi9hZGQgY29tbWVudHMgYW5kIGRlYnVnCisgKgkgIHJvdXRpbmVzLgorICoJLSBQcm9wZXJseSBzd2FwIGJ5dGVzIG9mIHRoZSBkZXZpY2UncyBub2RlbmFtZSBpbgorICoJICBxbGEyeDAwX2NvbmZpZ3VyZV9sb2NhbF9sb29wKCkuCisgKgorICogIFJldiAgOC4wMC4wMGIxLXByZTI1IE1hcmNoID8/LCAyMDAzCQlBVgorICoJLSBSZXN5bmMgd2l0aCA2LjA1LjAwYjguCisgKgorICogIFJldiAgOC4wMC4wMGIxLXByZTIzIE1hcmNoID8/LCAyMDAzCQlBVgorICoJLSBSZW1vdmUgKCNkZWZpbmUpIElPQ0IgdXNhZ2UgdGhyb3R0bGluZy4KKyAqCS0gQWJzdHJhY3QgaW50ZXJydXB0IHBvbGxpbmcgd2l0aCBxbGEyeDAwX3BvbGwoKS4KKyAqCS0gTW9kaWZ5IGx1biBzY2FubmluZyBsb2dpYzoKKyAqCSAgLSBJZiB0aGUgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhlIFNDU0kgUmVwb3J0IEx1bnMKKyAqCSAgICBjb21tYW5kLCB0aGUgZHJpdmVyIHdpbGwgbm93IG9ubHkgc2NhbiBmcm9tIDAgdG8gdGhlCisgKgkgICAgbWF4Iy1sdW5zIGFzIGRlZmluZWQgaW4gdGhlIE5WUkFNIChCSU9TKSwgcmF0aGVyIHRoYW4KKyAqCSAgICBibGluZGx5IHNjYW5uaW5nIGZyb20gMCB0byAyNTUgLS0gd2hpY2ggY291bGQgcmVzdWx0IGluCisgKgkgICAgYW4gaW5jcmVhc2UgaW4gc3RhcnR1cCB0aW1lIHdoZW4gcnVubmluZyBhZ2FpbnN0IHNsb3cKKyAqCSAgICAoSkJPRCkgZGV2aWNlcy4KKyAqCS0gUmV3b3JrIHJlc2V0IGxvZ2ljIGluIHFsYTJ4MDBfcmVzZXRfY2hpcCgpIChzcGVjKS4KKyAqCisgKiAgUmV2ICA4LjAwLjAwYjEtcHJlMjIgTWFyY2ggPz8sIDIwMDMJCUFWCisgKgktIFJlc3luYyB3aXRoIDYuMDUuMDBiNy4KKyAqCS0gQ2xlYW51cCAocmV3cml0ZSkgSVNSIGhhbmRsZXIuCisgKgktIFJlbmFtZSBrbWVtX3phbGxvYyAtLT4gcWxhMngwMF9rbWVtX3phbGxvYygpOgorICoJICAtIFRoaXMgZnVuY3Rpb24gd2lsbCBldmVudHVhbGx5IGJlIHJlbW92ZWQuCisgKgktIEFkZCBuZXcgMjMwMCBWSVggZmlybXdhcmUgKDMuMDIuMDkpOgorICoJICAtIFN1cHBvcnQgZm9yIFRhcGUsIEZhYnJpYywgMksgbG9naW5zLCBJUCwgYW5kIFZJLgorICoKKyAqICBSZXYgIDguMDAuMDBiMS1wcmUxOCBNYXJjaCA/PywgMjAwMwkJQVYKKyAqCS0gU3VwcG9ydCAyMzJ4IHR5cGUgSVNQcy4KKyAqCS0gU3VwcG9ydCBzaW5nbGUgZmlybXdhcmUgZm9yIGVhY2ggSVNQIHR5cGU6CisgKgkgIC0gUmVzdHJ1Y3R1cmUgYnJkX2luZm8vZndfaW5mbyBtZXRob2RzLgorICoJICAtIFN0cmVhbWxpbmUgZmlybXdhcmUgbG9hZCBwcm9jZXNzLgorICoJICAtIFByb3Blcmx5IHF1ZXJ5IGZpcm13YXJlIGZvciB2ZXJzaW9uIGluZm9ybWF0aW9uLgorICoJLSBSZW1vdmUgZXh0cmFuZW91cyBzY3NpX3FsYV9ob3N0IG1lbWJlcnM6CisgKgkgIC0gZGV2aWNlX2lkID09PiBwZGV2LT5kZXZpY2UKKyAqCS0gRml4IGZjNCBmZWF0dXJlcyAoUkZGX0lEKSByZWdpc3RyYXRpb24uCisgKgktIENvbnZlcnQga21lbV96YWxsb2MgLS0+IHFsYTJ4MDBfa21lbV96YWxsb2MoKS4KKyAqCS0gUmVtb3ZlIHVudXNlZC9leHRyYW5lb3VzICNkZWZpbmVzIChVU0VfUE9SVE5BTUUpLgorICoKKyAqICBSZXYgIDguMDAuMDBiMS1wcmUxNCBNYXJjaCA/PywgMjAwMwkJQVYKKyAqCS0gUmVzeW5jIHdpdGggNi4wNS4wMGI2LgorICoJLSBJbml0aWFsIHNvdXJjZS1jb2RlIHJlc3RydWN0dXJpbmcgZWZmb3J0LgorICoJICAtIEJ1aWxkIHByb2NlZHVyZS4KKyAqCSAgLSBTb3VyY2UgZmlsZSBsYXlvdXQgLS0gaW50dWl0aXZlIGNvbXBvbmVudCBsYXlvdXQuCisgKgkgIC0gUmVtb3ZlIHVudXNlZCAjZGVmaW5lcyAoKlBFUkZPUk1BTkNFLCBXT1JEX0ZXX0xPQUQsIGV0YykuCisgKgktIEFkZCBzdXBwb3J0IGZvciAySyBsb2dpbnMgKFRQWCAtLSBmaXJtd2FyZSkuCisgKgktIEFkZCBtb2R1bGUgcGFyYW1ldGVyIHFsMnhzdXNwZW5kY291bnQuCisgKgktIEFkZCBuZXcgMjIwMCBJUC9UUCBmaXJtd2FyZSAoMi4wMi4wNCkuCisgKgorICogIFJldiAgOC4wMC4wMGIxLXByZTkJTWFyY2ggPz8sIDIwMDMJUkwvREcvUkEvQVYKKyAqCS0gVXNlIGtlcm5lbCBzdHJ1Y3QgbGlzdF9oZWFkIGZvciBmY3BvcnQgYW5kIGZjbHVuIGxpc3RzLgorICoJLSBSZW1vdmUgZXh0cmFuZW91cyAoTHxNKVNfNjRCSVRTKCkgYW5kIFFMMjFfNjQqKCkgZGVmaW5lcy4KKyAqCisgKiAgUmV2ICA4LjAwLjAwYjEtcHJlOAlGZWJydWFyeSAyOCwgMjAwMwlSTC9ERy9SQS9BVgorICoJLSBSZXN5bmMgd2l0aCA2LjA1LjAwYjMuCisgKgorICogIFJldiAgOC4wMC4wMGIxLXByZTcJRmVicnVhcnkgMjMsIDIwMDMJUkwvREcvUkEvQVYKKyAqCS0gQWRkIGFsdGVybmF0ZSBmYWJyaWMgc2Nhbm5pbmcgbG9naWMgKEdJRF9QVC9HTk5fSUQvR1BOX0lEKS4KKyAqCS0gUmVtb3ZlIHVzZSBvZiBkZXByZWNhdGVkIGZ1bmN0aW9uIGNoZWNrX3JlZ2lvbigpLgorICoJLSBBZGQgbmV3IDIzMDAgSVAvVFAgZmlybXdhcmUgKDMuMDIuMDgpLgorICoKKyAqICBSZXYgIDguMDAuMDBiMS1wcmU1CUphbnVhcnkgMjgsIDIwMDMJUkwvREcvUkEvQVYKKyAqCS0gUmVzeW5jIHdpdGggNi4wNS4wMGIzLgorICoJLSBDb25zb2xpZGF0ZSBkZXZpY2VfcmVnIHN0cnVjdHVyZSBkZWZpbml0aW9ucyBmb3IgSVNQIHR5cGVzLgorICoJLSBBZGQgc3VwcG9ydCBmb3IgbmV3IHF1ZXVlLWRlcHRoIHNlbGVjdGlvbi4KKyAqCS0gQWRkIG5ldyAyMzAwIElQL1RQIGZpcm13YXJlICgzLjAyLjA3KS4KKyAqCisgKiAgUmV2ICA4LjAwLjAwYjEtcHJlMQlKYW51YXJ5IDE3LCAyMDAzCUFWCisgKgktIEluaXRpYWwgYnJhbmNoIGZyb20gNi4wNC4wMGI4IGRyaXZlci4KKyAqCS0gUmVtb3ZlIFZNV0FSRSBzcGVjaWZpYyBjb2RlLgorICoJLSBBZGQgc3VwcG9ydCBmb3IgcGNpX2RyaXZlciBpbnRlcmZhY2UuCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9zY3NpL3Fsb2dpY2Zhcy50eHQgYi9Eb2N1bWVudGF0aW9uL3Njc2kvcWxvZ2ljZmFzLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zOThmOTkxCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9zY3NpL3Fsb2dpY2Zhcy50eHQKQEAgLTAsMCArMSw3OSBAQAorCitUaGlzIGRyaXZlciBzdXBwb3J0cyB0aGUgUWxvZ2ljIEZBU1hYWCBmYW1pbHkgb2YgY2hpcHMuICBUaGlzIGRyaXZlcgorb25seSB3b3JrcyB3aXRoIHRoZSBJU0EsIFZMQiwgYW5kIFBDTUNJQSB2ZXJzaW9ucyBvZiB0aGUgUWxvZ2ljCitGYXN0U0NTSSEgIGNhcmRzIGFzIHdlbGwgYXMgYW55IG90aGVyIGNhcmQgYmFzZWQgb24gdGhlIEZBU1hYIGNoaXAKKyhpbmNsdWRpbmcgdGhlIENvbnRyb2wgQ29uY2VwdHMgU0NTSS9JREUvU0lPL1BJTy9GREMgY2FyZHMpLgorCitUaGlzIGRyaXZlciBkb2VzIE5PVCBzdXBwb3J0IHRoZSBQQ0kgdmVyc2lvbi4gIFN1cHBvcnQgZm9yIHRoZXNlIFBDSQorUWxvZ2ljIGJvYXJkczoKKworCSogSVEtUENJCisJKiBJUS1QQ0ktMTAKKwkqIElRLVBDSS1ECisKK2lzIHByb3ZpZGVkIGJ5IHRoZSBxbG9naWNpc3AuYyBkcml2ZXIuICBDaGVjayBSRUFETUUucWxvZ2ljaXNwIGZvcgorZGV0YWlscy4KKworTm9yIGRvZXMgaXQgc3VwcG9ydCB0aGUgUENJLUJhc2ljLCB3aGljaCBpcyBzdXBwb3J0ZWQgYnkgdGhlCisnYW01M2M5NzQnIGRyaXZlci4KKworUENNQ0lBIFNVUFBPUlQKKworVGhpcyBjdXJyZW50bHkgb25seSB3b3JrcyBpZiB0aGUgY2FyZCBpcyBlbmFibGVkIGZpcnN0IGZyb20gRE9TLiAgVGhpcworbWVhbnMgeW91IHdpbGwgaGF2ZSB0byBsb2FkIHlvdXIgc29ja2V0IGFuZCBjYXJkIHNlcnZpY2VzLCBhbmQKK1FMNDFET1MuU1lTIGFuZCBRTDQwRU5CTC5TWVMuICBUaGVzZSBhcmUgYSBtaW5pbXVtLCBidXQgbG9hZGluZyB0aGUKK3Jlc3Qgb2YgdGhlIG1vZHVsZXMgd29uJ3QgaW50ZXJmZXJlIHdpdGggdGhlIG9wZXJhdGlvbi4gIFRoZSBuZXh0Cit0aGluZyB0byBkbyBpcyBsb2FkIHRoZSBrZXJuZWwgd2l0aG91dCByZXNldHRpbmcgdGhlIGhhcmR3YXJlLCB3aGljaAorY2FuIGJlIGEgc2ltcGxlIGN0cmwtYWx0LWRlbGV0ZSB3aXRoIGEgYm9vdCBmbG9wcHksIG9yIGJ5IHVzaW5nCitsb2FkbGluIHdpdGggdGhlIGtlcm5lbCBpbWFnZSBhY2Nlc3NpYmxlIGZyb20gRE9TLiAgSWYgeW91IGFyZSB1c2luZwordGhlIExpbnV4IFBDTUNJQSBkcml2ZXIsIHlvdSB3aWxsIGhhdmUgdG8gYWRqdXN0IGl0IG9yIG90aGVyd2lzZSBzdG9wCitpdCBmcm9tIGNvbmZpZ3VyaW5nIHRoZSBjYXJkLgorCitJIGFtIHdvcmtpbmcgd2l0aCB0aGUgUENNQ0lBIGdyb3VwIHRvIG1ha2UgaXQgbW9yZSBmbGV4aWJsZSwgYnV0IHRoYXQKK21heSB0YWtlIGEgd2hpbGUuCisKK0FMTCBDQVJEUworCitUaGUgdG9wIG9mIHRoZSBxbG9naWMuYyBmaWxlIGhhcyBhIG51bWJlciBvZiBkZWZpbmVzIHRoYXQgY29udHJvbHMKK2NvbmZpZ3VyYXRpb24uICBBcyBzaGlwcGVkLCBpdCBwcm92aWRlcyBhIGJhbGFuY2UgYmV0d2VlbiBzcGVlZCBhbmQKK2Z1bmN0aW9uLiAgSWYgdGhlcmUgYXJlIGFueSBwcm9ibGVtcywgdHJ5IHNldHRpbmcgU0xPV19DQUJMRSB0byAxLCBhbmQKK3RoZW4gdHJ5IGNoYW5naW5nIFVTRV9JUlEgYW5kIFRVUkJPX1BETUEgdG8gemVyby4gIElmIHlvdSBhcmUgZmFtaWxpYXIKK3dpdGggU0NTSSwgdGhlcmUgYXJlIG90aGVyIHNldHRpbmdzIHdoaWNoIGNhbiB0dW5lIHRoZSBidXMuCisKK0l0IG1heSBiZSBhIGdvb2QgaWRlYSB0byBlbmFibGUgUkVTRVRfQVRfU1RBUlQsIGVzcGVjaWFsbHkgaWYgdGhlCitkZXZpY2VzIG1heSBub3QgaGF2ZSBiZWVuIGp1c3QgcG93ZXJlZCB1cCwgb3IgaWYgeW91IGFyZSByZXN0YXJ0aW5nCithZnRlciBhIGNyYXNoLCBzaW5jZSB0aGV5IG1heSBiZSBidXN5IHRyeWluZyB0byBjb21wbGV0ZSB0aGUgbGFzdAorY29tbWFuZCBvciBzb21ldGhpbmcuICBJdCBjb21lcyB1cCBmYXN0ZXIgaWYgdGhpcyBpcyBzZXQgdG8gemVybywgYW5kCitpZiB5b3UgaGF2ZSByZWxpYWJsZSBoYXJkd2FyZSBhbmQgY29ubmVjdGlvbnMgaXQgbWF5IGJlIG1vcmUgdXNlZnVsIHRvCitub3QgcmVzZXQgdGhpbmdzLgorCitTT01FIFRST1VCTEVTSE9PVElORyBUSVBTCisKK01ha2Ugc3VyZSBpdCB3b3JrcyBwcm9wZXJseSB1bmRlciBET1MuICBZb3Ugc2hvdWxkIGFsc28gZG8gYW4gaW5pdGlhbCBGRElTSworb24gYSBuZXcgZHJpdmUgaWYgeW91IHdhbnQgcGFydGl0aW9ucy4KKworRG9uJ3QgZW5hYmxlIGFsbCB0aGUgc3BlZWR1cHMgZmlyc3QuICBJZiBhbnl0aGluZyBpcyB3cm9uZywgdGhleSB3aWxsIG1ha2UKK2FueSBwcm9ibGVtIHdvcnNlLgorCitJTVBPUlRBTlQKKworVGhlIGJlc3Qgd2F5IHRvIHRlc3QgaWYgeW91ciBjYWJsZXMsIHRlcm1pbmF0aW9uLCBldGMuIGFyZSBnb29kIGlzIHRvCitjb3B5IGEgdmVyeSBiaWcgZmlsZSAoZS5nLiBhIGRvdWJsZXNwYWNlIGNvbnRhaW5lciBmaWxlLCBvciBhIHZlcnkKK2xhcmdlIGV4ZWN1dGFibGUgb3IgYXJjaGl2ZSkuICBJdCBzaG91bGQgYmUgYXQgbGVhc3QgNSBtZWdhYnl0ZXMsIGJ1dAoreW91IGNhbiBkbyBtdWx0aXBsZSB0ZXN0cyBvbiBzbWFsbGVyIGZpbGVzLiAgVGhlbiBkbyBhIENPTVAgdG8gdmVyaWZ5Cit0aGF0IHRoZSBmaWxlIGNvcGllZCBwcm9wZXJseS4gIChUdXJuIG9mZiBhbGwgY2FjaGluZyB3aGVuIGRvaW5nIHRoZXNlCit0ZXN0cywgb3RoZXJ3aXNlIHlvdSB3aWxsIHRlc3QgeW91ciBSQU0gYW5kIG5vdCB0aGUgZmlsZXMpLiAgVGhlbiBkbworMTAgQ09NUHMsIGNvbXBhcmluZyB0aGUgc2FtZSBmaWxlIG9uIHRoZSBTQ1NJIGhhcmQgZHJpdmUsIGkuZS4gIkNPTVAKK3JlYWxiaWcuZG9jIHJlYWxiaWcuZG9jIi4gIFRoZW4gZG8gaXQgYWZ0ZXIgdGhlIGNvbXB1dGVyIGdldHMgd2FybS4KKworSSBub3RpY2VkIG15IHN5c3RlbSB3aGljaCBzZWVtcyB0byB3b3JrIDEwMCUgd291bGQgZmFpbCB0aGlzIHRlc3QgaWYKK3RoZSBjb21wdXRlciB3YXMgbGVmdCBvbiBmb3IgYSBmZXcgaG91cnMuICBJdCB3YXMgd29yc2Ugd2l0aCBsb25nZXIKK2NhYmxlcywgYW5kIG1vcmUgZGV2aWNlcyBvbiB0aGUgU0NTSSBidXMuICBXaGF0IHNlZW1zIHRvIGhhcHBlbiBpcwordGhhdCBpdCBnZXRzIGEgZmFsc2UgQUNLIGNhdXNpbmcgYW4gZXh0cmEgYnl0ZSB0byBiZSBpbnNlcnRlZCBpbnRvIHRoZQorc3RyZWFtIChhbmQgdGhpcyBpcyBub3QgZGV0ZWN0ZWQpLiAgVGhpcyBjYW4gYmUgY2F1c2VkIGJ5IGJhZAordGVybWluYXRpb24gKHRoZSBBQ0sgY2FuIGJlIHJlZmxlY3RlZCksIG9yIGJ5IG5vaXNlIHdoZW4gdGhlIGNoaXBzCit3b3JrIGxlc3Mgd2VsbCBiZWNhdXNlIG9mIHRoZSBoZWF0LCBvciB3aGVuIGNhYmxlcyBnZXQgdG9vIGxvbmcgZm9yCit0aGUgc3BlZWQuCisKK1JlbWVtYmVyLCBpZiBpdCBkb2Vzbid0IHdvcmsgdW5kZXIgRE9TLCBpdCBwcm9iYWJseSB3b24ndCB3b3JrIHVuZGVyCitMaW51eC4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vc2NzaS9xbG9naWNpc3AudHh0IGIvRG9jdW1lbnRhdGlvbi9zY3NpL3Fsb2dpY2lzcC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjkyMGY2YwotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vc2NzaS9xbG9naWNpc3AudHh0CkBAIC0wLDAgKzEsMzAgQEAKK05vdGVzIGZvciB0aGUgUUxvZ2ljIElTUDEwMjAgUENJIFNDU0kgRHJpdmVyOgorCitUaGlzIGRyaXZlciB3b3JrcyB3ZWxsIGluIHByYWN0aWNlLCBidXQgZG9lcyBub3Qgc3VwcG9ydCBkaXNjb25uZWN0LworcmVjb25uZWN0LCB3aGljaCBtYWtlcyB1c2luZyBpdCB3aXRoIHRhcGUgZHJpdmVzIGltcHJhY3RpY2FsLgorCitJdCBzaG91bGQgd29yayBmb3IgbW9zdCBob3N0IGFkYXB0b3JzIHdpdGggdGhlIElTUDEwMjAgY2hpcC4gIFRoZQorUUxvZ2ljIENvcnBvcmF0aW9uIHByb2R1Y2VzIHNldmVyYWwgUENJIFNDU0kgYWRhcHRlcnMgd2hpY2ggc2hvdWxkCit3b3JrOgorCisJKiBJUS1QQ0kKKwkqIElRLVBDSS0xMAorCSogSVEtUENJLUQKKworVGhpcyBkcml2ZXIgbWF5IHdvcmsgd2l0aCBib2FyZHMgY29udGFpbmluZyB0aGUgSVNQMTAyMEEgb3IgSVNQMTA0MEEKK2NoaXBzLCBidXQgdGhhdCBoYXMgbm90IGJlZW4gdGVzdGVkLgorCitUaGlzIGRyaXZlciB3aWxsIE5PVCB3b3JrIHdpdGg6CisKKwkqIElTQSBvciBWTCBCdXMgUWxvZ2ljIGNhcmRzICh0aGV5IHVzZSB0aGUgJ3Fsb2dpY2ZhcycgZHJpdmVyKQorCSogUENJLWJhc2ljIChpdCB1c2VzIHRoZSAnYW01M2M5NzQnIGRyaXZlcikKKworTXVjaCB0aGFua3MgdG8gUUxvZ2ljJ3MgdGVjaCBzdXBwb3J0IGZvciBwcm92aWRpbmcgdGhlIGxhdGVzdCBJU1AxMDIwCitmaXJtd2FyZSwgYW5kIGZvciB0YWtpbmcgdGhlIHRpbWUgdG8gcmV2aWV3IG15IGNvZGUuCisKK0VyaWsgTW9lCitlaG1AY3Jpcy5jb20KKworUmV2aXNlZDoKK01pY2hhZWwgQS4gR3JpZmZpdGgKK2dyaWZAY3MudWNyLmVkdQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9zY3NpL3Njc2ktZ2VuZXJpYy50eHQgYi9Eb2N1bWVudGF0aW9uL3Njc2kvc2NzaS1nZW5lcmljLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMzhlMmIzCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9zY3NpL3Njc2ktZ2VuZXJpYy50eHQKQEAgLTAsMCArMSwxMDEgQEAKKyAgICAgICAgICAgIE5vdGVzIG9uIExpbnV4IFNDU0kgR2VuZXJpYyAoc2cpIGRyaXZlcgorICAgICAgICAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIwMDIwMTI2CitJbnRyb2R1Y3Rpb24KKz09PT09PT09PT09PQorVGhlIFNDU0kgR2VuZXJpYyBkcml2ZXIgKHNnKSBpcyBvbmUgb2YgdGhlIGZvdXIgImhpZ2ggbGV2ZWwiIFNDU0kgZGV2aWNlCitkcml2ZXJzIGFsb25nIHdpdGggc2QsIHN0IGFuZCBzciAoZGlzaywgdGFwZSBhbmQgQ0RST00gcmVzcGVjdGl2ZWx5KS4gU2cKK2lzIG1vcmUgZ2VuZXJhbGl6ZWQgKGJ1dCBsb3dlciBsZXZlbCkgdGhhbiBpdHMgc2libGluZ3MgYW5kIHRlbmRzIHRvIGJlCit1c2VkIG9uIFNDU0kgZGV2aWNlcyB0aGF0IGRvbid0IGZpdCBpbnRvIHRoZSBhbHJlYWR5IHNlcnZpY2VkIGNhdGVnb3JpZXMuCitUaHVzIHNnIGlzIHVzZWQgZm9yIHNjYW5uZXJzLCBDRCB3cml0ZXJzIGFuZCByZWFkaW5nIGF1ZGlvIENEcyBkaWdpdGFsbHkKK2Ftb25nc3Qgb3RoZXIgdGhpbmdzLgorCitSYXRoZXIgdGhhbiBkb2N1bWVudCB0aGUgZHJpdmVyJ3MgaW50ZXJmYWNlIGhlcmUsIHZlcnNpb24gaW5mb3JtYXRpb24KK2lzIHByb3ZpZGVkIHBsdXMgcG9pbnRlcnMgKGkuZS4gVVJMcykgd2hlcmUgdG8gZmluZCBkb2N1bWVudGF0aW9uCithbmQgZXhhbXBsZXMuCisKKworTWFqb3IgdmVyc2lvbnMgb2YgdGhlIHNnIGRyaXZlcgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorVGhlcmUgYXJlIHRocmVlIG1ham9yIHZlcnNpb25zIG9mIHNnIGZvdW5kIGluIHRoZSBsaW51eCBrZXJuZWwgKGxrKToKKyAgICAgIC0gc2cgdmVyc2lvbiAxIChvcmlnaW5hbCkgZnJvbSAxOTkyIHRvIGVhcmx5IDE5OTkgKGxrIDIuMi41KSAuIAorCUl0IGlzIGJhc2VkIGluIHRoZSBzZ19oZWFkZXIgaW50ZXJmYWNlIHN0cnVjdHVyZS4KKyAgICAgIC0gc2cgdmVyc2lvbiAyIGZyb20gbGsgMi4yLjYgaW4gdGhlIDIuMiBzZXJpZXMuIEl0IGlzIGJhc2VkIG9uCisJYW4gZXh0ZW5kZWQgdmVyc2lvbiBvZiB0aGUgc2dfaGVhZGVyIGludGVyZmFjZSBzdHJ1Y3R1cmUuCisgICAgICAtIHNnIHZlcnNpb24gMyBmb3VuZCBpbiB0aGUgbGsgMi40IHNlcmllcyAoYW5kIHRoZSBsayAyLjUgc2VyaWVzKS4KKwlJdCBhZGRzIHRoZSBzZ19pb19oZHIgaW50ZXJmYWNlIHN0cnVjdHVyZS4KKworCitTZyBkcml2ZXIgZG9jdW1lbnRhdGlvbgorPT09PT09PT09PT09PT09PT09PT09PT0KK1RoZSBtb3N0IHJlY2VudCBkb2N1bWVudGF0aW9uIG9mIHRoZSBzZyBkcml2ZXIgaXMga2VwdCBhdCB0aGUgTGludXgKK0RvY3VtZW50YXRpb24gUHJvamVjdCdzIChMRFApIHNpdGU6IAoraHR0cDovL3d3dy50bGRwLm9yZy9IT1dUTy9TQ1NJLUdlbmVyaWMtSE9XVE8KK1RoaXMgZGVzY3JpYmVzIHRoZSBzZyB2ZXJzaW9uIDMgZHJpdmVyIGZvdW5kIGluIHRoZSBsayAyLjQgc2VyaWVzLgorVGhlIExEUCByZW5kZXJzIGRvY3VtZW50cyBpbiBzaW5nbGUgYW5kIG11bHRpcGxlIHBhZ2UgSFRNTCwgcG9zdHNjcmlwdAorYW5kIHBkZi4gVGhpcyBkb2N1bWVudCBjYW4gYWxzbyBiZSBmb3VuZCBhdDoKK2h0dHA6Ly93d3cudG9ycXVlLm5ldC9zZy9wL3NnX3YzX2hvLmh0bWwKKworRG9jdW1lbnRhdGlvbiBmb3IgdGhlIHZlcnNpb24gMiBzZyBkcml2ZXIgZm91bmQgaW4gdGhlIGxrIDIuMiBzZXJpZXMgY2FuCitiZSBmb3VuZCBhdCBodHRwOi8vd3d3LnRvcnF1ZS5uZXQvc2cvcC9zY3NpLWdlbmVyaWMudHh0IC4gQSBsYXJnZXIgdmVyc2lvbgoraXMgYXQ6ICBodHRwOi8vd3d3LnRvcnF1ZS5uZXQvc2cvcC9zY3NpLWdlbmVyaWNfbG9uZy50eHQgLgorCitUaGUgb3JpZ2luYWwgZG9jdW1lbnRhdGlvbiBmb3IgdGhlIHNnIGRyaXZlciAocHJpb3IgdG8gbGsgMi4yLjYpIGNhbiBiZQorZm91bmQgYXQgaHR0cDovL3d3dy50b3JxdWUubmV0L3NnL3Avb3JpZ2luYWwvU0NTSS1Qcm9ncmFtbWluZy1IT1dUTy50eHQKK2FuZCBpbiB0aGUgTERQIGFyY2hpdmVzLgorCitBIGNoYW5nZWxvZyB3aXRoIGJyaWVmIG5vdGVzIGNhbiBiZSBmb3VuZCBpbiB0aGUKKy91c3Ivc3JjL2xpbnV4L2luY2x1ZGUvc2NzaS9zZy5oIGZpbGUuIE5vdGUgdGhhdCB0aGUgZ2xpYmMgbWFpbnRhaW5lcnMgY29weSAKK2FuZCBlZGl0IHRoaXMgZmlsZSAocmVtb3ZpbmcgaXRzIGNoYW5nZWxvZyBmb3IgZXhhbXBsZSkgYmVmb3JlIHBsYWNpbmcgaXQgCitpbiAvdXNyL2luY2x1ZGUvc2NzaS9zZy5oIC4gRHJpdmVyIGRlYnVnZ2luZyBpbmZvcm1hdGlvbiBhbmQgb3RoZXIgbm90ZXMgCitjYW4gYmUgZm91bmQgYXQgdGhlIHRvcCBvZiB0aGUgL3Vzci9zcmMvbGludXgvZHJpdmVycy9zY3NpL3NnLmMgZmlsZS4KKworQSBtb3JlIGdlbmVyYWwgZGVzY3JpcHRpb24gb2YgdGhlIExpbnV4IFNDU0kgc3Vic3lzdGVtIG9mIHdoaWNoIHNnIGlzIGEgCitwYXJ0IGNhbiBiZSBmb3VuZCBhdCBodHRwOi8vd3d3LnRsZHAub3JnL0hPV1RPL1NDU0ktMi40LUhPV1RPIC4KKworCitFeGFtcGxlIGNvZGUgYW5kIHV0aWxpdGllcworPT09PT09PT09PT09PT09PT09PT09PT09PT0KK1RoZXJlIGFyZSB0d28gcGFja2FnZXMgb2Ygc2cgdXRpbGl0aWVzOgorICAtIHNnM191dGlscyAgIGZvciB0aGUgc2cgdmVyc2lvbiAzIGRyaXZlciBmb3VuZCBpbiBsayAyLjQKKyAgLSBzZ191dGlscyAgICBmb3IgdGhlIHNnIHZlcnNpb24gMiAoYW5kIG9yaWdpbmFsKSBkcml2ZXIgZm91bmQgaW4gbGsgMi4yCisgICAgICAgICAgICAgICAgYW5kIGVhcmxpZXIKK0JvdGggcGFja2FnZXMgd2lsbCB3b3JrIGluIHRoZSBsayAyLjQgc2VyaWVzIGhvd2V2ZXIgc2czX3V0aWxzIG9mZmVycyBtb3JlCitjYXBhYmlsaXRpZXMuIFRoZXkgY2FuIGJlIGZvdW5kIGF0OiBodHRwOi8vd3d3LnRvcnF1ZS5uZXQvc2cgYW5kIAorZnJlc2htZWF0Lm5ldAorCitBbm90aGVyIGFwcHJvYWNoIGlzIHRvIGxvb2sgYXQgdGhlIGFwcGxpY2F0aW9ucyB0aGF0IHVzZSB0aGUgc2cgZHJpdmVyLgorVGhlc2UgaW5jbHVkZSBjZHJlY29yZCwgY2RwYXJhbm9pYSwgU0FORSBhbmQgY2RyZGFvLgorCisKK01hcHBpbmcgb2YgTGludXgga2VybmVsIHZlcnNpb25zIHRvIHNnIGRyaXZlciB2ZXJzaW9ucworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitIZXJlIGlzIGEgbGlzdCBvZiBsaW51eCBrZXJuZWxzIGluIHRoZSAyLjQgc2VyaWVzIHRoYXQgaGFkIG5ldyB2ZXJzaW9uCitvZiB0aGUgc2cgZHJpdmVyOgorICAgICAgbGsgMi40LjAgOiBzZyB2ZXJzaW9uIDMuMS4xNworICAgICAgbGsgMi40LjcgOiBzZyB2ZXJzaW9uIDMuMS4xOSAKKyAgICAgIGxrIDIuNC4xMCA6IHNnIHZlcnNpb24gMy4xLjIwICAqKgorICAgICAgbGsgMi40LjE3IDogc2cgdmVyc2lvbiAzLjEuMjIgCisKKyoqIFRoZXJlIHdlcmUgMyBjaGFuZ2VzIHRvIHNnIHZlcnNpb24gMy4xLjIwIGJ5IHRoaXJkIHBhcnRpZXMgaW4gdGhlCisgICBuZXh0IHNpeCBsaW51eCBrZXJuZWwgdmVyc2lvbnMuCisKK0ZvciByZWZlcmVuY2UgaGVyZSBpcyBhIGxpc3Qgb2YgbGludXgga2VybmVscyBpbiB0aGUgMi4yIHNlcmllcyB0aGF0IGhhZCAKK25ldyB2ZXJzaW9uIG9mIHRoZSBzZyBkcml2ZXI6CisgICAgICBsayAyLjIuMCA6IG9yaWdpbmFsIHNnIHZlcnNpb24gW3dpdGggbm8gdmVyc2lvbiBudW1iZXJdCisgICAgICBsayAyLjIuNiA6IHNnIHZlcnNpb24gMi4xLjMxCisgICAgICBsayAyLjIuOCA6IHNnIHZlcnNpb24gMi4xLjMyCisgICAgICBsayAyLjIuMTAgOiBzZyB2ZXJzaW9uIDIuMS4zNCBbU0dfR0VUX1ZFUlNJT05fTlVNIGlvY3RsIGZpcnN0IGFwcGVhcmVkXQorICAgICAgbGsgMi4yLjE0IDogc2cgdmVyc2lvbiAyLjEuMzYKKyAgICAgIGxrIDIuMi4xNiA6IHNnIHZlcnNpb24gMi4xLjM4CisgICAgICBsayAyLjIuMTcgOiBzZyB2ZXJzaW9uIDIuMS4zOQorICAgICAgbGsgMi4yLjIwIDogc2cgdmVyc2lvbiAyLjEuNDAKKworVGhlIGxrIDIuNSBkZXZlbG9wbWVudCBzZXJpZXMgaGFzIHJlY2VudGx5IGNvbW1lbmNlZCBhbmQgaXQgY3VycmVudGx5Citjb250YWlucyBzZyB2ZXJzaW9uIDMuNS4yMyB3aGljaCBpcyBmdW5jdGlvbmFsbHkgZXF1aXZhbGVudCB0byBzZwordmVyc2lvbiAzLjEuMjIgZm91bmQgaW4gbGsgMi40LjE3IC4KKworCitEb3VnbGFzIEdpbGJlcnQKKzI2dGggSmFudWFyeSAyMDAyCitkZ2lsYmVydEBpbnRlcmxvZy5jb20KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vc2NzaS9zY3NpLnR4dCBiL0RvY3VtZW50YXRpb24vc2NzaS9zY3NpLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZDFiYmY0Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9zY3NpL3Njc2kudHh0CkBAIC0wLDAgKzEsNDQgQEAKK1NDU0kgc3Vic3lzdGVtIGRvY3VtZW50YXRpb24KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK1RoZSBMaW51eCBEb2N1bWVudGF0aW9uIFByb2plY3QgKExEUCkgbWFpbnRhaW5zIGEgZG9jdW1lbnQgZGVzY3JpYmluZwordGhlIFNDU0kgc3Vic3lzdGVtIGluIHRoZSBMaW51eCBrZXJuZWwgKGxrKSAyLjQgc2VyaWVzLiBTZWU6CitodHRwOi8vd3d3LnRsZHAub3JnL0hPV1RPL1NDU0ktMi40LUhPV1RPIC4gVGhlIExEUCBoYXMgc2luZ2xlCithbmQgbXVsdGlwbGUgcGFnZSBIVE1MIHJlbmRlcmluZ3MgYXMgd2VsbCBhcyBwb3N0c2NyaXB0IGFuZCBwZGYuCitJdCBjYW4gYWxzbyBiZSBmb3VuZCBhdCBodHRwOi8vd3d3LnRvcnF1ZS5uZXQvc2NzaS9TQ1NJLTIuNC1IT1dUTyAuCisKKworTm90ZXMgb24gdXNpbmcgbW9kdWxlcyBpbiB0aGUgU0NTSSBzdWJzeXN0ZW0KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitUaGUgc2NzaSBzdXBwb3J0IGluIHRoZSBsaW51eCBrZXJuZWwgY2FuIGJlIG1vZHVsYXJpemVkIGluIGEgbnVtYmVyIG9mIAorZGlmZmVyZW50IHdheXMgZGVwZW5kaW5nIHVwb24gdGhlIG5lZWRzIG9mIHRoZSBlbmQgdXNlci4gIFRvIHVuZGVyc3RhbmQKK3lvdXIgb3B0aW9ucywgd2Ugc2hvdWxkIGZpcnN0IGRlZmluZSBhIGZldyB0ZXJtcy4KKworVGhlIHNjc2ktY29yZSAoYWxzbyBrbm93biBhcyB0aGUgIm1pZCBsZXZlbCIpIGNvbnRhaW5zIHRoZSBjb3JlIG9mIHNjc2kgCitzdXBwb3J0LiAgV2l0aG91dCBpdCB5b3UgY2FuIGRvIG5vdGhpbmcgd2l0aCBhbnkgb2YgdGhlIG90aGVyIHNjc2kgZHJpdmVycy4KK1RoZSBzY3NpIGNvcmUgc3VwcG9ydCBjYW4gYmUgYSBtb2R1bGUgKHNjc2lfbW9kLm8pLCBvciBpdCBjYW4gYmUgYnVpbHQgaW50bwordGhlIGtlcm5lbC4gSWYgdGhlIGNvcmUgaXMgYSBtb2R1bGUsIGl0IG11c3QgYmUgdGhlIGZpcnN0IHNjc2kgbW9kdWxlIAorbG9hZGVkLCBhbmQgaWYgeW91IHVubG9hZCB0aGUgbW9kdWxlcywgaXQgd2lsbCBoYXZlIHRvIGJlIHRoZSBsYXN0IG9uZSAKK3VubG9hZGVkLiAgSW4gcHJhY3RpY2UgdGhlIG1vZHByb2JlIGFuZCBybW1vZCBjb21tYW5kcyAoYW5kICJhdXRvY2xlYW4iKQord2lsbCBlbmZvcmNlIHRoZSBjb3JyZWN0IG9yZGVyaW5nIG9mIGxvYWRpbmcgYW5kIHVubG9hZGluZyBtb2R1bGVzIGluCit0aGUgU0NTSSBzdWJzeXN0ZW0uCisKK1RoZSBpbmRpdmlkdWFsIHVwcGVyIGFuZCBsb3dlciBsZXZlbCBkcml2ZXJzIGNhbiBiZSBsb2FkZWQgaW4gYW55IG9yZGVyIAorb25jZSB0aGUgc2NzaSBjb3JlIGlzIHByZXNlbnQgaW4gdGhlIGtlcm5lbCAoZWl0aGVyIGNvbXBpbGVkIGluIG9yIGxvYWRlZAorYXMgYSBtb2R1bGUpLiAgVGhlIGRpc2sgZHJpdmVyIChzZF9tb2QubyksIGNkcm9tIGRyaXZlciAoc3JfbW9kLm8pLAordGFwZSBkcml2ZXIgKiogKHN0Lm8pIGFuZCBzY3NpIGdlbmVyaWNzIGRyaXZlciAoc2cubykgcmVwcmVzZW50IHRoZSB1cHBlciAKK2xldmVsIGRyaXZlcnMgdG8gc3VwcG9ydCB0aGUgdmFyaW91cyBhc3NvcnRlZCBkZXZpY2VzIHdoaWNoIGNhbiBiZSAKK2NvbnRyb2xsZWQuICBZb3UgY2FuIGZvciBleGFtcGxlIGxvYWQgdGhlIHRhcGUgZHJpdmVyIHRvIHVzZSB0aGUgdGFwZSBkcml2ZSwgCithbmQgdGhlbiB1bmxvYWQgaXQgb25jZSB5b3UgaGF2ZSBubyBmdXJ0aGVyIG5lZWQgZm9yIHRoZSBkcml2ZXIgKGFuZCByZWxlYXNlCit0aGUgYXNzb2NpYXRlZCBtZW1vcnkpLgorCitUaGUgbG93ZXIgbGV2ZWwgZHJpdmVycyBhcmUgdGhlIG9uZXMgdGhhdCBzdXBwb3J0IHRoZSBpbmRpdmlkdWFsIGNhcmRzIHRoYXQKK2FyZSBzdXBwb3J0ZWQgZm9yIHRoZSBoYXJkd2FyZSBwbGF0Zm9ybSB0aGF0IHlvdSBhcmUgcnVubmluZyB1bmRlci4gVGhvc2UKK2luZGl2aWR1YWwgY2FyZHMgYXJlIG9mdGVuIGNhbGxlZCBIb3N0IEJ1cyBBZGFwdGVycyAoSEJBcykuIEZvciBleGFtcGxlIHRoZQorYWljN3h4eC5vIGRyaXZlciBpcyB1c2VkIHRvIGNvbnRyb2wgYWxsIHJlY2VudCBTQ1NJIGNvbnRyb2xsZXIgY2FyZHMgZnJvbSAKK0FkYXB0ZWMuIEFsbW9zdCBhbGwgbG93ZXIgbGV2ZWwgZHJpdmVycyBjYW4gYmUgYnVpbHQgZWl0aGVyIGFzIG1vZHVsZXMgb3IgCitidWlsdCBpbnRvIHRoZSBrZXJuZWwuCisKKworKiogVGhlcmUgaXMgYSB2YXJpYW50IG9mIHRoZSBzdCBkcml2ZXIgZm9yIGNvbnRyb2xsaW5nIE9uU3RyZWFtIHRhcGUKKyAgIGRldmljZXMuIEl0cyBtb2R1bGUgbmFtZSBpcyBvc3N0Lm8gLgorCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3Njc2kvc2NzaV9taWRfbG93X2FwaS50eHQgYi9Eb2N1bWVudGF0aW9uL3Njc2kvc2NzaV9taWRfbG93X2FwaS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWYyNDEyOQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vc2NzaS9zY3NpX21pZF9sb3dfYXBpLnR4dApAQCAtMCwwICsxLDE1NDYgQEAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgTGludXggS2VybmVsIDIuNiBzZXJpZXMKKyAgICAgICAgICAgICAgICAgU0NTSSBtaWRfbGV2ZWwgLSBsb3dlcl9sZXZlbCBkcml2ZXIgaW50ZXJmYWNlCisgICAgICAgICAgICAgICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitJbnRyb2R1Y3Rpb24KKz09PT09PT09PT09PQorVGhpcyBkb2N1bWVudCBvdXRsaW5lcyB0aGUgaW50ZXJmYWNlIGJldHdlZW4gdGhlIExpbnV4IFNDU0kgbWlkIGxldmVsIGFuZAorU0NTSSBsb3dlciBsZXZlbCBkcml2ZXJzLiBMb3dlciBsZXZlbCBkcml2ZXJzIChMTERzKSBhcmUgdmFyaW91c2x5IGNhbGxlZCAKK2hvc3QgYnVzIGFkYXB0ZXIgKEhCQSkgZHJpdmVycyBhbmQgaG9zdCBkcml2ZXJzIChIRCkuIEEgImhvc3QiIGluIHRoaXMKK2NvbnRleHQgaXMgYSBicmlkZ2UgYmV0d2VlbiBhIGNvbXB1dGVyIElPIGJ1cyAoZS5nLiBQQ0kgb3IgSVNBKSBhbmQgYQorc2luZ2xlIFNDU0kgaW5pdGlhdG9yIHBvcnQgb24gYSBTQ1NJIHRyYW5zcG9ydC4gQW4gImluaXRpYXRvciIgcG9ydAorKFNDU0kgdGVybWlub2xvZ3ksIHNlZSBTQU0tMyBhdCBodHRwOi8vd3d3LnQxMC5vcmcpIHNlbmRzIFNDU0kgY29tbWFuZHMKK3RvICJ0YXJnZXQiIFNDU0kgcG9ydHMgKGUuZy4gZGlza3MpLiBUaGVyZSBjYW4gYmUgbWFueSBMTERzIGluIGEgcnVubmluZworc3lzdGVtLCBidXQgb25seSBvbmUgcGVyIGhhcmR3YXJlIHR5cGUuIE1vc3QgTExEcyBjYW4gY29udHJvbCBvbmUgb3IgbW9yZQorU0NTSSBIQkFzLiBTb21lIEhCQXMgY29udGFpbiBtdWx0aXBsZSBob3N0cy4KKworSW4gc29tZSBjYXNlcyB0aGUgU0NTSSB0cmFuc3BvcnQgaXMgYW4gZXh0ZXJuYWwgYnVzIHRoYXQgYWxyZWFkeSBoYXMKK2l0cyBvd24gc3Vic3lzdGVtIGluIExpbnV4IChlLmcuIFVTQiBhbmQgaWVlZTEzOTQpLiBJbiBzdWNoIGNhc2VzIHRoZQorU0NTSSBzdWJzeXN0ZW0gTExEIGlzIGEgc29mdHdhcmUgYnJpZGdlIHRvIHRoZSBvdGhlciBkcml2ZXIgc3Vic3lzdGVtLgorRXhhbXBsZXMgYXJlIHRoZSB1c2Itc3RvcmFnZSBkcml2ZXIgKGZvdW5kIGluIHRoZSBkcml2ZXJzL3VzYi9zdG9yYWdlCitkaXJlY3RvcnkpIGFuZCB0aGUgaWVlZTEzOTQvc2JwMiBkcml2ZXIgKGZvdW5kIGluIHRoZSBkcml2ZXJzL2llZWUxMzk0CitkaXJlY3RvcnkpLgorCitGb3IgZXhhbXBsZSwgdGhlIGFpYzd4eHggTExEIGNvbnRyb2xzIEFkYXB0ZWMgU0NTSSBwYXJhbGxlbCBpbnRlcmZhY2UKKyhTUEkpIGNvbnRyb2xsZXJzIGJhc2VkIG9uIHRoYXQgY29tcGFueSdzIDd4eHggY2hpcCBzZXJpZXMuIFRoZSBhaWM3eHh4CitMTEQgY2FuIGJlIGJ1aWx0IGludG8gdGhlIGtlcm5lbCBvciBsb2FkZWQgYXMgYSBtb2R1bGUuIFRoZXJlIGNhbiBvbmx5IGJlCitvbmUgYWljN3h4eCBMTEQgcnVubmluZyBpbiBhIExpbnV4IHN5c3RlbSBidXQgaXQgbWF5IGJlIGNvbnRyb2xsaW5nIG1hbnkgCitIQkFzLiBUaGVzZSBIQkFzIG1pZ2h0IGJlIGVpdGhlciBvbiBQQ0kgZGF1Z2h0ZXItYm9hcmRzIG9yIGJ1aWx0IGludG8gCit0aGUgbW90aGVyYm9hcmQgKG9yIGJvdGgpLiBTb21lIGFpYzd4eHggYmFzZWQgSEJBcyBhcmUgZHVhbCBjb250cm9sbGVycworYW5kIHRodXMgcmVwcmVzZW50IHR3byBob3N0cy4gTGlrZSBtb3N0IG1vZGVybiBIQkFzLCBlYWNoIGFpYzd4eHggaG9zdAoraGFzIGl0cyBvd24gUENJIGRldmljZSBhZGRyZXNzLiBbVGhlIG9uZS10by1vbmUgY29ycmVzcG9uZGVuY2UgYmV0d2VlbgorYSBTQ1NJIGhvc3QgYW5kIGEgUENJIGRldmljZSBpcyBjb21tb24gYnV0IG5vdCByZXF1aXJlZCAoZS5nLiB3aXRoCitJU0Egb3IgTUNBIGFkYXB0ZXJzKS5dCisKK1RoZSBTQ1NJIG1pZCBsZXZlbCBpc29sYXRlcyBhbiBMTEQgZnJvbSBvdGhlciBsYXllcnMgc3VjaCBhcyB0aGUgU0NTSQordXBwZXIgbGF5ZXIgZHJpdmVycyBhbmQgdGhlIGJsb2NrIGxheWVyLgorCitUaGlzIHZlcnNpb24gb2YgdGhlIGRvY3VtZW50IHJvdWdobHkgbWF0Y2hlcyBsaW51eCBrZXJuZWwgdmVyc2lvbiAyLjYuOCAuCisKK0RvY3VtZW50YXRpb24KKz09PT09PT09PT09PT0KK1RoZXJlIGlzIGEgU0NTSSBkb2N1bWVudGF0aW9uIGRpcmVjdG9yeSB3aXRoaW4gdGhlIGtlcm5lbCBzb3VyY2UgdHJlZSwgCit0eXBpY2FsbHkgRG9jdW1lbnRhdGlvbi9zY3NpIC4gTW9zdCBkb2N1bWVudHMgYXJlIGluIHBsYWluCisoaS5lLiBBU0NJSSkgdGV4dC4gVGhpcyBmaWxlIGlzIG5hbWVkIHNjc2lfbWlkX2xvd19hcGkudHh0IGFuZCBjYW4gYmUgCitmb3VuZCBpbiB0aGF0IGRpcmVjdG9yeS4gQSBtb3JlIHJlY2VudCBjb3B5IG9mIHRoaXMgZG9jdW1lbnQgbWF5IGJlIGZvdW5kCithdCBodHRwOi8vd3d3LnRvcnF1ZS5uZXQvc2NzaS9zY3NpX21pZF9sb3dfYXBpLnR4dC5neiAuIAorTWFueSBMTERzIGFyZSBkb2N1bWVudGVkIHRoZXJlIChlLmcuIGFpYzd4eHgudHh0KS4gVGhlIFNDU0kgbWlkLWxldmVsIGlzCiticmllZmx5IGRlc2NyaWJlZCBpbiBzY3NpLnR4dCB3aGljaCBjb250YWlucyBhIHVybCB0byBhIGRvY3VtZW50IAorZGVzY3JpYmluZyB0aGUgU0NTSSBzdWJzeXN0ZW0gaW4gdGhlIGxrIDIuNCBzZXJpZXMuIFR3byB1cHBlciBsZXZlbCAKK2RyaXZlcnMgaGF2ZSBkb2N1bWVudHMgaW4gdGhhdCBkaXJlY3Rvcnk6IHN0LnR4dCAoU0NTSSB0YXBlIGRyaXZlcikgYW5kIAorc2NzaS1nZW5lcmljLnR4dCAoZm9yIHRoZSBzZyBkcml2ZXIpLgorCitTb21lIGRvY3VtZW50YXRpb24gKG9yIHVybHMpIGZvciBMTERzIG1heSBiZSBmb3VuZCBpbiB0aGUgQyBzb3VyY2UgY29kZQorb3IgaW4gdGhlIHNhbWUgZGlyZWN0b3J5IGFzIHRoZSBDIHNvdXJjZSBjb2RlLiBGb3IgZXhhbXBsZSB0byBmaW5kIGEgdXJsCithYm91dCB0aGUgVVNCIG1hc3Mgc3RvcmFnZSBkcml2ZXIgc2VlIHRoZSAKKy91c3Ivc3JjL2xpbnV4L2RyaXZlcnMvdXNiL3N0b3JhZ2UgZGlyZWN0b3J5LgorCitUaGUgTGludXgga2VybmVsIHNvdXJjZSBEb2N1bWVudGF0aW9uL0RvY0Jvb2svc2NzaWRyaXZlcnMudG1wbCBmaWxlCityZWZlcnMgdG8gdGhpcyBmaWxlLiBXaXRoIHRoZSBhcHByb3ByaWF0ZSBEb2NCb29rIHRvb2wtc2V0LCB0aGlzIHBlcm1pdHMKK3VzZXJzIHRvIGdlbmVyYXRlIGh0bWwsIHBzIGFuZCBwZGYgcmVuZGVyaW5ncyBvZiBpbmZvcm1hdGlvbiB3aXRoaW4gdGhpcworZmlsZSAoZS5nLiB0aGUgaW50ZXJmYWNlIGZ1bmN0aW9ucykuCisKK0RyaXZlciBzdHJ1Y3R1cmUKKz09PT09PT09PT09PT09PT0KK1RyYWRpdGlvbmFsbHkgYW4gTExEIGZvciB0aGUgU0NTSSBzdWJzeXN0ZW0gaGFzIGJlZW4gYXQgbGVhc3QgdHdvIGZpbGVzIGluCit0aGUgZHJpdmVycy9zY3NpIGRpcmVjdG9yeS4gRm9yIGV4YW1wbGUsIGEgZHJpdmVyIGNhbGxlZCAieHl6IiBoYXMgYSBoZWFkZXIKK2ZpbGUgInh5ei5oIiBhbmQgYSBzb3VyY2UgZmlsZSAieHl6LmMiLiBbQWN0dWFsbHkgdGhlcmUgaXMgbm8gZ29vZCByZWFzb24KK3doeSB0aGlzIGNvdWxkbid0IGFsbCBiZSBpbiBvbmUgZmlsZTsgdGhlIGhlYWRlciBmaWxlIGlzIHN1cGVyZmx1b3VzLl0gU29tZQorZHJpdmVycyB0aGF0IGhhdmUgYmVlbiBwb3J0ZWQgdG8gc2V2ZXJhbCBvcGVyYXRpbmcgc3lzdGVtcyBoYXZlIG1vcmUgdGhhbgordHdvIGZpbGVzLiBGb3IgZXhhbXBsZSB0aGUgYWljN3h4eCBkcml2ZXIgaGFzIHNlcGFyYXRlIGZpbGVzIGZvciBnZW5lcmljIAorYW5kIE9TLXNwZWNpZmljIGNvZGUgKGUuZy4gRnJlZUJTRCBhbmQgTGludXgpLiBTdWNoIGRyaXZlcnMgdGVuZCB0byBoYXZlCit0aGVpciBvd24gZGlyZWN0b3J5IHVuZGVyIHRoZSBkcml2ZXJzL3Njc2kgZGlyZWN0b3J5LgorCitXaGVuIGEgbmV3IExMRCBpcyBiZWluZyBhZGRlZCB0byBMaW51eCwgdGhlIGZvbGxvd2luZyBmaWxlcyAoZm91bmQgaW4gdGhlCitkcml2ZXJzL3Njc2kgZGlyZWN0b3J5KSB3aWxsIG5lZWQgc29tZSBhdHRlbnRpb246IE1ha2VmaWxlIGFuZCBLY29uZmlnIC4KK0l0IGlzIHByb2JhYmx5IGJlc3QgdG8gc3R1ZHkgaG93IGV4aXN0aW5nIExMRHMgYXJlIG9yZ2FuaXplZC4KKworQXMgdGhlIDIuNSBzZXJpZXMgZGV2ZWxvcG1lbnQga2VybmVscyBldm9sdmUgaW50byB0aGUgMi42IHNlcmllcworcHJvZHVjdGlvbiBzZXJpZXMsIGNoYW5nZXMgYXJlIGJlaW5nIGludHJvZHVjZWQgaW50byB0aGlzIGludGVyZmFjZS4gQW4KK2V4YW1wbGUgb2YgdGhpcyBpcyBkcml2ZXIgaW5pdGlhbGl6YXRpb24gY29kZSB3aGVyZSB0aGVyZSBhcmUgbm93IDIgbW9kZWxzCithdmFpbGFibGUuIFRoZSBvbGRlciBvbmUsIHNpbWlsYXIgdG8gd2hhdCB3YXMgZm91bmQgaW4gdGhlIGxrIDIuNCBzZXJpZXMsCitpcyBiYXNlZCBvbiBob3N0cyB0aGF0IGFyZSBkZXRlY3RlZCBhdCBIQkEgZHJpdmVyIGxvYWQgdGltZS4gVGhpcyB3aWxsIGJlCityZWZlcnJlZCB0byB0aGUgInBhc3NpdmUiIGluaXRpYWxpemF0aW9uIG1vZGVsLiBUaGUgbmV3ZXIgbW9kZWwgYWxsb3dzIEhCQXMKK3RvIGJlIGhvdCBwbHVnZ2VkIChhbmQgdW5wbHVnZ2VkKSBkdXJpbmcgdGhlIGxpZmV0aW1lIG9mIHRoZSBMTEQgYW5kIHdpbGwKK2JlIHJlZmVycmVkIHRvIGFzIHRoZSAiaG90cGx1ZyIgaW5pdGlhbGl6YXRpb24gbW9kZWwuIFRoZSBuZXdlciBtb2RlbCBpcworcHJlZmVycmVkIGFzIGl0IGNhbiBoYW5kbGUgYm90aCB0cmFkaXRpb25hbCBTQ1NJIGVxdWlwbWVudCB0aGF0IGlzCitwZXJtYW5lbnRseSBjb25uZWN0ZWQgYXMgd2VsbCBhcyBtb2Rlcm4gIlNDU0kiIGRldmljZXMgKGUuZy4gVVNCIG9yCitJRUVFIDEzOTQgY29ubmVjdGVkIGRpZ2l0YWwgY2FtZXJhcykgdGhhdCBhcmUgaG90cGx1Z2dlZC4gQm90aCAKK2luaXRpYWxpemF0aW9uIG1vZGVscyBhcmUgZGlzY3Vzc2VkIGluIHRoZSBmb2xsb3dpbmcgc2VjdGlvbnMuCisKK0FuIExMRCBpbnRlcmZhY2VzIHRvIHRoZSBTQ1NJIHN1YnN5c3RlbSBzZXZlcmFsIHdheXM6CisgIGEpIGRpcmVjdGx5IGludm9raW5nIGZ1bmN0aW9ucyBzdXBwbGllZCBieSB0aGUgbWlkIGxldmVsCisgIGIpIHBhc3NpbmcgYSBzZXQgb2YgZnVuY3Rpb24gcG9pbnRlcnMgdG8gYSByZWdpc3RyYXRpb24gZnVuY3Rpb24KKyAgICAgc3VwcGxpZWQgYnkgdGhlIG1pZCBsZXZlbC4gVGhlIG1pZCBsZXZlbCB3aWxsIHRoZW4gaW52b2tlIHRoZXNlCisgICAgIGZ1bmN0aW9ucyBhdCBzb21lIHBvaW50IGluIHRoZSBmdXR1cmUuIFRoZSBMTEQgd2lsbCBzdXBwbHkKKyAgICAgaW1wbGVtZW50YXRpb25zIG9mIHRoZXNlIGZ1bmN0aW9ucy4KKyAgYykgZGlyZWN0IGFjY2VzcyB0byBpbnN0YW5jZXMgb2Ygd2VsbCBrbm93biBkYXRhIHN0cnVjdHVyZXMgbWFpbnRhaW5lZAorICAgICBieSB0aGUgbWlkIGxldmVsCisKK1Rob3NlIGZ1bmN0aW9ucyBpbiBncm91cCBhKSBhcmUgbGlzdGVkIGluIGEgc2VjdGlvbiBlbnRpdGxlZCAiTWlkIGxldmVsCitzdXBwbGllZCBmdW5jdGlvbnMiIGJlbG93LgorCitUaG9zZSBmdW5jdGlvbnMgaW4gZ3JvdXAgYikgYXJlIGxpc3RlZCBpbiBhIHNlY3Rpb24gZW50aXRsZWQgIkludGVyZmFjZQorZnVuY3Rpb25zIiBiZWxvdy4gVGhlaXIgZnVuY3Rpb24gcG9pbnRlcnMgYXJlIHBsYWNlZCBpbiB0aGUgbWVtYmVycyBvZgorInN0cnVjdCBzY3NpX2hvc3RfdGVtcGxhdGUiLCBhbiBpbnN0YW5jZSBvZiB3aGljaCBpcyBwYXNzZWQgdG8KK3Njc2lfaG9zdF9hbGxvYygpICoqIC4gIFRob3NlIGludGVyZmFjZSBmdW5jdGlvbnMgdGhhdCB0aGUgTExEIGRvZXMgbm90IAord2lzaCB0byBzdXBwbHkgc2hvdWxkIGhhdmUgTlVMTCBwbGFjZWQgaW4gdGhlIGNvcnJlc3BvbmRpbmcgbWVtYmVyIG9mIAorc3RydWN0IHNjc2lfaG9zdF90ZW1wbGF0ZS4gIERlZmluaW5nIGFuIGluc3RhbmNlIG9mIHN0cnVjdCAKK3Njc2lfaG9zdF90ZW1wbGF0ZSBhdCBmaWxlIHNjb3BlIHdpbGwgY2F1c2UgTlVMTCB0byBiZSAgcGxhY2VkIGluIGZ1bmN0aW9uCisgcG9pbnRlciBtZW1iZXJzIG5vdCBleHBsaWNpdGx5IGluaXRpYWxpemVkLgorCitUaG9zZSB1c2FnZXMgaW4gZ3JvdXAgYykgc2hvdWxkIGJlIGhhbmRsZWQgd2l0aCBjYXJlLCBlc3BlY2lhbGx5IGluIGEKKyJob3RwbHVnIiBlbnZpcm9ubWVudC4gTExEcyBzaG91bGQgYmUgYXdhcmUgb2YgdGhlIGxpZmV0aW1lIG9mIGluc3RhbmNlcwordGhhdCBhcmUgc2hhcmVkIHdpdGggdGhlIG1pZCBsZXZlbCBhbmQgb3RoZXIgbGF5ZXJzLgorCitBbGwgZnVuY3Rpb25zIGRlZmluZWQgd2l0aGluIGFuIExMRCBhbmQgYWxsIGRhdGEgZGVmaW5lZCBhdCBmaWxlIHNjb3BlCitzaG91bGQgYmUgc3RhdGljLiBGb3IgZXhhbXBsZSB0aGUgc2xhdmVfYWxsb2MoKSBmdW5jdGlvbiBpbiBhbiBMTEQKK2NhbGxlZCAieHh4IiBjb3VsZCBiZSBkZWZpbmVkIGFzIAorInN0YXRpYyBpbnQgeHh4X3NsYXZlX2FsbG9jKHN0cnVjdCBzY3NpX2RldmljZSAqIHNkZXYpIHsgLyogY29kZSAqLyB9IgorCisqKiB0aGUgc2NzaV9ob3N0X2FsbG9jKCkgZnVuY3Rpb24gaXMgYSByZXBsYWNlbWVudCBmb3IgdGhlIHJhdGhlciB2YWd1ZWx5CituYW1lZCBzY3NpX3JlZ2lzdGVyKCkgZnVuY3Rpb24gaW4gbW9zdCBzaXR1YXRpb25zLiBUaGUgc2NzaV9yZWdpc3RlcigpCithbmQgc2NzaV91bnJlZ2lzdGVyKCkgZnVuY3Rpb25zIHJlbWFpbiB0byBzdXBwb3J0IGxlZ2FjeSBMTERzIHRoYXQgdXNlCit0aGUgcGFzc2l2ZSBpbml0aWFsaXphdGlvbiBtb2RlbC4KKworCitIb3RwbHVnIGluaXRpYWxpemF0aW9uIG1vZGVsCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09CitJbiB0aGlzIG1vZGVsIGFuIExMRCBjb250cm9scyB3aGVuIFNDU0kgaG9zdHMgYXJlIGludHJvZHVjZWQgYW5kIHJlbW92ZWQKK2Zyb20gdGhlIFNDU0kgc3Vic3lzdGVtLiBIb3N0cyBjYW4gYmUgaW50cm9kdWNlZCBhcyBlYXJseSBhcyBkcml2ZXIKK2luaXRpYWxpemF0aW9uIGFuZCByZW1vdmVkIGFzIGxhdGUgYXMgZHJpdmVyIHNodXRkb3duLiBUeXBpY2FsbHkgYSBkcml2ZXIKK3dpbGwgcmVzcG9uZCB0byBhIHN5c2ZzIHByb2JlKCkgY2FsbGJhY2sgdGhhdCBpbmRpY2F0ZXMgYW4gSEJBIGhhcyBiZWVuCitkZXRlY3RlZC4gQWZ0ZXIgY29uZmlybWluZyB0aGF0IHRoZSBuZXcgZGV2aWNlIGlzIG9uZSB0aGF0IHRoZSBMTEQgd2FudHMKK3RvIGNvbnRyb2wsIHRoZSBMTEQgd2lsbCBpbml0aWFsaXplIHRoZSBIQkEgYW5kIHRoZW4gcmVnaXN0ZXIgYSBuZXcgaG9zdAord2l0aCB0aGUgU0NTSSBtaWQgbGV2ZWwuCisKK0R1cmluZyBMTEQgaW5pdGlhbGl6YXRpb24gdGhlIGRyaXZlciBzaG91bGQgcmVnaXN0ZXIgaXRzZWxmIHdpdGggdGhlCithcHByb3ByaWF0ZSBJTyBidXMgb24gd2hpY2ggaXQgZXhwZWN0cyB0byBmaW5kIEhCQShzKSAoZS5nLiB0aGUgUENJIGJ1cykuCitUaGlzIGNhbiBwcm9iYWJseSBiZSBkb25lIHZpYSBzeXNmcy4gQW55IGRyaXZlciBwYXJhbWV0ZXJzIChlc3BlY2lhbGx5Cit0aG9zZSB0aGF0IGFyZSB3cml0YWJsZSBhZnRlciB0aGUgZHJpdmVyIGlzIGxvYWRlZCkgY291bGQgYWxzbyBiZQorcmVnaXN0ZXJlZCB3aXRoIHN5c2ZzIGF0IHRoaXMgcG9pbnQuIFRoZSBTQ1NJIG1pZCBsZXZlbCBmaXJzdCBiZWNvbWVzCithd2FyZSBvZiBhbiBMTEQgd2hlbiB0aGF0IExMRCByZWdpc3RlcnMgaXRzIGZpcnN0IEhCQS4KKworQXQgc29tZSBsYXRlciB0aW1lLCB0aGUgTExEIGJlY29tZXMgYXdhcmUgb2YgYW4gSEJBIGFuZCB3aGF0IGZvbGxvd3MKK2lzIGEgdHlwaWNhbCBzZXF1ZW5jZSBvZiBjYWxscyBiZXR3ZWVuIHRoZSBMTEQgYW5kIHRoZSBtaWQgbGV2ZWwuCitUaGlzIGV4YW1wbGUgc2hvd3MgdGhlIG1pZCBsZXZlbCBzY2FubmluZyB0aGUgbmV3bHkgaW50cm9kdWNlZCBIQkEgZm9yIDMgCitzY3NpIGRldmljZXMgb2Ygd2hpY2ggb25seSB0aGUgZmlyc3QgMiByZXNwb25kOgorCisgICAgIEhCQSBQUk9CRTogYXNzdW1lIDIgU0NTSSBkZXZpY2VzIGZvdW5kIGluIHNjYW4KK0xMRCAgICAgICAgICAgICAgICAgICBtaWQgbGV2ZWwgICAgICAgICAgICAgICAgICAgIExMRAorPT09LS0tLS0tLS0tLS0tLS0tLS0tLT09PT09PT09PS0tLS0tLS0tLS0tLS0tLS0tLS0tPT09LS0tLS0tCitzY3NpX2hvc3RfYWxsb2MoKSAgLS0+CitzY3NpX2FkZF9ob3N0KCkgIC0tLS0tLS0tKworICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgICAgICAgICAgICAgICAgc2xhdmVfYWxsb2MoKQorICAgICAgICAgICAgICAgICAgICBzbGF2ZV9jb25maWd1cmUoKSAtLT4gIHNjc2lfYWRqdXN0X3F1ZXVlX2RlcHRoKCkKKyAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgICAgICAgICAgICAgICAgIHNsYXZlX2FsbG9jKCkKKyAgICAgICAgICAgICAgICAgICAgc2xhdmVfY29uZmlndXJlKCkKKyAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgICAgICAgICAgICAgICAgIHNsYXZlX2FsbG9jKCkgICAqKioKKyAgICAgICAgICAgICAgICAgICAgc2xhdmVfZGVzdHJveSgpICoqKgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0lmIHRoZSBMTEQgd2FudHMgdG8gYWRqdXN0IHRoZSBkZWZhdWx0IHF1ZXVlIHNldHRpbmdzLCBpdCBjYW4gaW52b2tlCitzY3NpX2FkanVzdF9xdWV1ZV9kZXB0aCgpIGluIGl0cyBzbGF2ZV9jb25maWd1cmUoKSByb3V0aW5lLgorCisqKiogRm9yIHNjc2kgZGV2aWNlcyB0aGF0IHRoZSBtaWQgbGV2ZWwgdHJpZXMgdG8gc2NhbiBidXQgZG8gbm90CisgICAgcmVzcG9uZCwgYSBzbGF2ZV9hbGxvYygpLCBzbGF2ZV9kZXN0cm95KCkgcGFpciBpcyBjYWxsZWQuCisKK1doZW4gYW4gSEJBIGlzIGJlaW5nIHJlbW92ZWQgaXQgY291bGQgYmUgYXMgcGFydCBvZiBhbiBvcmRlcmx5IHNodXRkb3duCithc3NvY2lhdGVkIHdpdGggdGhlIExMRCBtb2R1bGUgYmVpbmcgdW5sb2FkZWQgKGUuZy4gd2l0aCB0aGUgInJtbW9kIgorY29tbWFuZCkgb3IgaW4gcmVzcG9uc2UgdG8gYSAiaG90IHVucGx1ZyIgaW5kaWNhdGVkIGJ5IHN5c2ZzKCkncworcmVtb3ZlKCkgY2FsbGJhY2sgYmVpbmcgaW52b2tlZC4gSW4gZWl0aGVyIGNhc2UsIHRoZSBzZXF1ZW5jZSBpcyB0aGUKK3NhbWU6CisKKyAgICAgICAgSEJBIFJFTU9WRTogYXNzdW1lIDIgU0NTSSBkZXZpY2VzIGF0dGFjaGVkCitMTEQgICAgICAgICAgICAgICAgICAgICAgbWlkIGxldmVsICAgICAgICAgICAgICAgICBMTEQKKz09PS0tLS0tLS0tLS0tLS0tLS0tLS0tLS09PT09PT09PT0tLS0tLS0tLS0tLS0tLS0tLT09PS0tLS0tLQorc2NzaV9yZW1vdmVfaG9zdCgpIC0tLS0tLS0tLSsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgICAgICAgICAgICAgICAgICBzbGF2ZV9kZXN0cm95KCkKKyAgICAgICAgICAgICAgICAgICAgIHNsYXZlX2Rlc3Ryb3koKQorc2NzaV9ob3N0X3B1dCgpCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgICAgICAgICAgICAgIAorSXQgbWF5IGJlIHVzZWZ1bCBmb3IgYSBMTEQgdG8ga2VlcCB0cmFjayBvZiBzdHJ1Y3QgU2NzaV9Ib3N0IGluc3RhbmNlcworKGEgcG9pbnRlciBpcyByZXR1cm5lZCBieSBzY3NpX2hvc3RfYWxsb2MoKSkuIFN1Y2ggaW5zdGFuY2VzIGFyZSAib3duZWQiCitieSB0aGUgbWlkLWxldmVsLiAgc3RydWN0IFNjc2lfSG9zdCBpbnN0YW5jZXMgYXJlIGZyZWVkIGZyb20KK3Njc2lfaG9zdF9wdXQoKSB3aGVuIHRoZSByZWZlcmVuY2UgY291bnQgaGl0cyB6ZXJvLgorCitIb3QgdW5wbHVnZ2luZyBhbiBIQkEgdGhhdCBjb250cm9scyBhIGRpc2sgd2hpY2ggaXMgcHJvY2Vzc2luZyBTQ1NJCitjb21tYW5kcyBvbiBhIG1vdW50ZWQgZmlsZSBzeXN0ZW0gaXMgYW4gaW50ZXJlc3Rpbmcgc2l0dWF0aW9uLiBSZWZlcmVuY2UKK2NvdW50aW5nIGxvZ2ljIGlzIGJlaW5nIGludHJvZHVjZWQgaW50byB0aGUgbWlkIGxldmVsIHRvIGNvcGUgd2l0aCBtYW55CitvZiB0aGUgaXNzdWVzIGludm9sdmVkLiBTZWUgdGhlIHNlY3Rpb24gb24gcmVmZXJlbmNlIGNvdW50aW5nIGJlbG93LgorCisKK1RoZSBob3RwbHVnIGNvbmNlcHQgbWF5IGJlIGV4dGVuZGVkIHRvIFNDU0kgZGV2aWNlcy4gQ3VycmVudGx5LCB3aGVuIGFuCitIQkEgaXMgYWRkZWQsIHRoZSBzY3NpX2FkZF9ob3N0KCkgZnVuY3Rpb24gY2F1c2VzIGEgc2NhbiBmb3IgU0NTSSBkZXZpY2VzCithdHRhY2hlZCB0byB0aGUgSEJBJ3MgU0NTSSB0cmFuc3BvcnQuIE9uIG5ld2VyIFNDU0kgdHJhbnNwb3J0cyB0aGUgSEJBCittYXkgYmVjb21lIGF3YXJlIG9mIGEgbmV3IFNDU0kgZGV2aWNlIF9hZnRlcl8gdGhlIHNjYW4gaGFzIGNvbXBsZXRlZC4KK0FuIExMRCBjYW4gdXNlIHRoaXMgc2VxdWVuY2UgdG8gbWFrZSB0aGUgbWlkIGxldmVsIGF3YXJlIG9mIGEgU0NTSSBkZXZpY2U6CisKKyAgICAgICAgICAgICAgICAgU0NTSSBERVZJQ0UgaG90cGx1ZworTExEICAgICAgICAgICAgICAgICAgIG1pZCBsZXZlbCAgICAgICAgICAgICAgICAgICAgTExECis9PT0tLS0tLS0tLS0tLS0tLS0tLS0tPT09PT09PT09LS0tLS0tLS0tLS0tLS0tLS0tLS09PT0tLS0tLS0KK3Njc2lfYWRkX2RldmljZSgpICAtLS0tLS0rCisgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICAgICAgICAgICAgICAgICBzbGF2ZV9hbGxvYygpCisgICAgICAgICAgICAgICAgICAgIHNsYXZlX2NvbmZpZ3VyZSgpICAgWy0tPiBzY3NpX2FkanVzdF9xdWV1ZV9kZXB0aCgpXQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0luIGEgc2ltaWxhciBmYXNoaW9uLCBhbiBMTEQgbWF5IGJlY29tZSBhd2FyZSB0aGF0IGEgU0NTSSBkZXZpY2UgaGFzIGJlZW4KK3JlbW92ZWQgKHVucGx1Z2dlZCkgb3IgdGhlIGNvbm5lY3Rpb24gdG8gaXQgaGFzIGJlZW4gaW50ZXJydXB0ZWQuIFNvbWUKK2V4aXN0aW5nIFNDU0kgdHJhbnNwb3J0cyAoZS5nLiBTUEkpIG1heSBub3QgYmVjb21lIGF3YXJlIHRoYXQgYSBTQ1NJCitkZXZpY2UgaGFzIGJlZW4gcmVtb3ZlZCB1bnRpbCBhIHN1YnNlcXVlbnQgU0NTSSBjb21tYW5kIGZhaWxzIHdoaWNoIHdpbGwKK3Byb2JhYmx5IGNhdXNlIHRoYXQgZGV2aWNlIHRvIGJlIHNldCBvZmZsaW5lIGJ5IHRoZSBtaWQgbGV2ZWwuIEFuIExMRCB0aGF0CitkZXRlY3RzIHRoZSByZW1vdmFsIG9mIGEgU0NTSSBkZXZpY2UgY2FuIGluc3RpZ2F0ZSBpdHMgcmVtb3ZhbCBmcm9tCit1cHBlciBsYXllcnMgd2l0aCB0aGlzIHNlcXVlbmNlOgorCisgICAgICAgICAgICAgICAgICBTQ1NJIERFVklDRSBob3QgdW5wbHVnCitMTEQgICAgICAgICAgICAgICAgICAgICAgbWlkIGxldmVsICAgICAgICAgICAgICAgICBMTEQKKz09PS0tLS0tLS0tLS0tLS0tLS0tLS0tLS09PT09PT09PT0tLS0tLS0tLS0tLS0tLS0tLT09PS0tLS0tLQorc2NzaV9yZW1vdmVfZGV2aWNlKCkgLS0tLS0tLSsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgICAgICAgICAgICAgICAgICBzbGF2ZV9kZXN0cm95KCkKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitJdCBtYXkgYmUgdXNlZnVsIGZvciBhbiBMTEQgdG8ga2VlcCB0cmFjayBvZiBzdHJ1Y3Qgc2NzaV9kZXZpY2UgaW5zdGFuY2VzCisoYSBwb2ludGVyIGlzIHBhc3NlZCBhcyB0aGUgcGFyYW1ldGVyIHRvIHNsYXZlX2FsbG9jKCkgYW5kCitzbGF2ZV9jb25maWd1cmUoKSBjYWxsYmFja3MpLiBTdWNoIGluc3RhbmNlcyBhcmUgIm93bmVkIiBieSB0aGUgbWlkLWxldmVsLgorc3RydWN0IHNjc2lfZGV2aWNlIGluc3RhbmNlcyBhcmUgZnJlZWQgYWZ0ZXIgc2xhdmVfZGVzdHJveSgpLgorCisKK1Bhc3NpdmUgaW5pdGlhbGl6YXRpb24gbW9kZWwKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK1RoZXNlIG9sZGVyIExMRHMgaW5jbHVkZSBhIGZpbGUgY2FsbGVkICJzY3NpX21vZHVsZS5jIiBbeWVzIHRoZSAiLmMiIGlzIGEKK2xpdHRsZSBzdXJwcmlzaW5nXSBpbiB0aGVpciBzb3VyY2UgY29kZS4gRm9yIHRoYXQgZmlsZSB0byB3b3JrIGFuCitpbnN0YW5jZSBvZiBzdHJ1Y3Qgc2NzaV9ob3N0X3RlbXBsYXRlIHdpdGggdGhlIG5hbWUgImRyaXZlcl90ZW1wbGF0ZSIKK25lZWRzIHRvIGJlIGRlZmluZWQuIEhlcmUgaXMgYSB0eXBpY2FsIGNvZGUgc2VxdWVuY2UgdXNlZCBpbiB0aGlzIG1vZGVsOgorICAgIHN0YXRpYyBzdHJ1Y3Qgc2NzaV9ob3N0X3RlbXBsYXRlIGRyaXZlcl90ZW1wbGF0ZSA9IHsKKyAgICAgICAgLi4uCisgICAgfTsKKyAgICAjaW5jbHVkZSAic2NzaV9tb2R1bGUuYyIKKworVGhlIHNjc2lfbW9kdWxlLmMgZmlsZSBjb250YWlucyB0d28gZnVuY3Rpb25zOgorICAtIGluaXRfdGhpc19zY3NpX2RyaXZlcigpIHdoaWNoIGlzIGV4ZWN1dGVkIHdoZW4gdGhlIExMRCBpcworICAgIGluaXRpYWxpemVkIChpLmUuIGJvb3QgdGltZSBvciBtb2R1bGUgbG9hZCB0aW1lKQorICAtIGV4aXRfdGhpc19zY3NpX2RyaXZlcigpIHdoaWNoIGlzIGV4ZWN1dGVkIHdoZW4gdGhlIExMRCBpcyBzaHV0CisgICAgZG93biAoaS5lLiBtb2R1bGUgdW5sb2FkIHRpbWUpCitOb3RlOiBzaW5jZSB0aGVzZSBmdW5jdGlvbnMgYXJlIHRhZ2dlZCB3aXRoIF9faW5pdCBhbmQgX19leGl0IHF1YWxpZmllcnMKK2FuIExMRCBzaG91bGQgbm90IGNhbGwgdGhlbSBleHBsaWNpdGx5IChzaW5jZSB0aGUga2VybmVsIGRvZXMgdGhhdCkuCisKK0hlcmUgaXMgYW4gZXhhbXBsZSBvZiBhbiBpbml0aWFsaXphdGlvbiBzZXF1ZW5jZSB3aGVuIHR3byBob3N0cyBhcmUKK2RldGVjdGVkIChzbyBkZXRlY3QoKSByZXR1cm5zIDIpIGFuZCB0aGUgU0NTSSBidXMgc2NhbiBvbiBlYWNoIGhvc3QKK2ZpbmRzIDEgU0NTSSBkZXZpY2UgKGFuZCBhIHNlY29uZCBkZXZpY2UgZG9lcyBub3QgcmVzcG9uZCkuCisKK0xMRCAgICAgICAgICAgICAgICAgICAgICBtaWQgbGV2ZWwgICAgICAgICAgICAgICAgIExMRAorPT09LS0tLS0tLS0tLS0tLS0tLS0tLS0tLT09PT09PT09PS0tLS0tLS0tLS0tLS0tLS0tPT09LS0tLS0tCitpbml0X3RoaXNfc2NzaV9kcml2ZXIoKSAtLS0tKworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICBkZXRlY3QoKSAgLS0tLS0tLS0tLS0tLS0tLS0rCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgc2NzaV9yZWdpc3RlcigpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICBzY3NpX3JlZ2lzdGVyKCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgICAgICAgICAgICAgICAgICAgc2xhdmVfYWxsb2MoKQorICAgICAgICAgICAgICAgICAgICAgIHNsYXZlX2NvbmZpZ3VyZSgpICAtLT4gIHNjc2lfYWRqdXN0X3F1ZXVlX2RlcHRoKCkKKyAgICAgICAgICAgICAgICAgICAgICBzbGF2ZV9hbGxvYygpICAgKioqCisgICAgICAgICAgICAgICAgICAgICAgc2xhdmVfZGVzdHJveSgpICoqKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgICAgICAgICAgICAgICAgICBzbGF2ZV9hbGxvYygpCisgICAgICAgICAgICAgICAgICAgICAgc2xhdmVfY29uZmlndXJlKCkKKyAgICAgICAgICAgICAgICAgICAgICBzbGF2ZV9hbGxvYygpICAgKioqCisgICAgICAgICAgICAgICAgICAgICAgc2xhdmVfZGVzdHJveSgpICoqKgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZSBtaWQgbGV2ZWwgaW52b2tlcyBzY3NpX2FkanVzdF9xdWV1ZV9kZXB0aCgpIHdpdGggdGFnZ2VkIHF1ZXVpbmcgb2ZmIGFuZAorImNtZF9wZXJfbHVuIiBmb3IgdGhhdCBob3N0IGFzIHRoZSBxdWV1ZSBsZW5ndGguIFRoZXNlIHNldHRpbmdzIGNhbiBiZQorb3ZlcnJpZGRlbiBieSBhIHNsYXZlX2NvbmZpZ3VyZSgpIHN1cHBsaWVkIGJ5IHRoZSBMTEQuCisKKyoqKiBGb3Igc2NzaSBkZXZpY2VzIHRoYXQgdGhlIG1pZCBsZXZlbCB0cmllcyB0byBzY2FuIGJ1dCBkbyBub3QKKyAgICByZXNwb25kLCBhIHNsYXZlX2FsbG9jKCksIHNsYXZlX2Rlc3Ryb3koKSBwYWlyIGlzIGNhbGxlZC4KKworSGVyZSBpcyBhbiBMTEQgc2h1dGRvd24gc2VxdWVuY2U6CisKK0xMRCAgICAgICAgICAgICAgICAgICAgICBtaWQgbGV2ZWwgICAgICAgICAgICAgICAgIExMRAorPT09LS0tLS0tLS0tLS0tLS0tLS0tLS0tLT09PT09PT09PS0tLS0tLS0tLS0tLS0tLS0tPT09LS0tLS0tCitleGl0X3RoaXNfc2NzaV9kcml2ZXIoKSAtLS0tKworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgICAgICAgICAgICAgICAgIHNsYXZlX2Rlc3Ryb3koKQorICAgICAgICAgICAgICAgICAgICAgICAgcmVsZWFzZSgpICAgLS0+ICAgc2NzaV91bnJlZ2lzdGVyKCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgICAgICAgICAgICAgICAgICBzbGF2ZV9kZXN0cm95KCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlbGVhc2UoKSAgIC0tPiAgIHNjc2lfdW5yZWdpc3RlcigpCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQW4gTExEIG5lZWQgbm90IGRlZmluZSBzbGF2ZV9kZXN0cm95KCkgKGkuZS4gaXQgaXMgb3B0aW9uYWwpLiAKKworVGhlIHNob3J0Y29taW5nIG9mIHRoZSAicGFzc2l2ZSBpbml0aWFsaXphdGlvbiBtb2RlbCIgaXMgdGhhdCBob3N0CityZWdpc3RyYXRpb24gYW5kIGRlLXJlZ2lzdHJhdGlvbiBhcmUgKHR5cGljYWxseSkgdGllZCB0byBMTEQgaW5pdGlhbGl6YXRpb24KK2FuZCBzaHV0ZG93bi4gT25jZSB0aGUgTExEIGlzIGluaXRpYWxpemVkIHRoZW4gYSBuZXcgaG9zdCB0aGF0IGFwcGVhcnMKKyhlLmcuIHZpYSBob3RwbHVnZ2luZykgY2Fubm90IGVhc2lseSBiZSBhZGRlZCB3aXRob3V0IGEgcmVkdW5kYW50Citkcml2ZXIgc2h1dGRvd24gYW5kIHJlLWluaXRpYWxpemF0aW9uLiBJdCBtYXkgYmUgcG9zc2libGUgdG8gd3JpdGUgYW4gTExECit0aGF0IHVzZXMgYm90aCBpbml0aWFsaXphdGlvbiBtb2RlbHMuCisKKworUmVmZXJlbmNlIENvdW50aW5nCis9PT09PT09PT09PT09PT09PT0KK1RoZSBTY3NpX0hvc3Qgc3RydWN0dXJlIGhhcyBoYWQgcmVmZXJlbmNlIGNvdW50aW5nIGluZnJhc3RydWN0dXJlIGFkZGVkLgorVGhpcyBlZmZlY3RpdmVseSBzcHJlYWRzIHRoZSBvd25lcnNoaXAgb2Ygc3RydWN0IFNjc2lfSG9zdCBpbnN0YW5jZXMKK2Fjcm9zcyB0aGUgdmFyaW91cyBTQ1NJIGxheWVycyB3aGljaCB1c2UgdGhlbS4gUHJldmlvdXNseSBzdWNoIGluc3RhbmNlcword2VyZSBleGNsdXNpdmVseSBvd25lZCBieSB0aGUgbWlkIGxldmVsLiBMTERzIHdvdWxkIG5vdCB1c3VhbGx5IG5lZWQgdG8KK2RpcmVjdGx5IG1hbmlwdWxhdGUgdGhlc2UgcmVmZXJlbmNlIGNvdW50cyBidXQgdGhlcmUgbWF5IGJlIHNvbWUgY2FzZXMKK3doZXJlIHRoZXkgZG8uCisKK1RoZXJlIGFyZSAzIHJlZmVyZW5jZSBjb3VudGluZyBmdW5jdGlvbnMgb2YgaW50ZXJlc3QgYXNzb2NpYXRlZCB3aXRoCitzdHJ1Y3QgU2NzaV9Ib3N0OgorICAtIHNjc2lfaG9zdF9hbGxvYygpOiByZXR1cm5zIGEgcG9pbnRlciB0byBuZXcgaW5zdGFuY2Ugb2Ygc3RydWN0IAorICAgICAgICBTY3NpX0hvc3Qgd2hpY2ggaGFzIGl0cyByZWZlcmVuY2UgY291bnQgXl4gc2V0IHRvIDEKKyAgLSBzY3NpX2hvc3RfZ2V0KCk6IGFkZHMgMSB0byB0aGUgcmVmZXJlbmNlIGNvdW50IG9mIHRoZSBnaXZlbiBpbnN0YW5jZQorICAtIHNjc2lfaG9zdF9wdXQoKTogZGVjcmVtZW50cyAxIGZyb20gdGhlIHJlZmVyZW5jZSBjb3VudCBvZiB0aGUgZ2l2ZW4KKyAgICAgICAgaW5zdGFuY2UuIElmIHRoZSByZWZlcmVuY2UgY291bnQgcmVhY2hlcyAwIHRoZW4gdGhlIGdpdmVuIGluc3RhbmNlCisgICAgICAgIGlzIGZyZWVkCisKK1RoZSBTY3NpX2RldmljZSBzdHJ1Y3R1cmUgaGFzIGhhZCByZWZlcmVuY2UgY291bnRpbmcgaW5mcmFzdHJ1Y3R1cmUgYWRkZWQuCitUaGlzIGVmZmVjdGl2ZWx5IHNwcmVhZHMgdGhlIG93bmVyc2hpcCBvZiBzdHJ1Y3QgU2NzaV9kZXZpY2UgaW5zdGFuY2VzCithY3Jvc3MgdGhlIHZhcmlvdXMgU0NTSSBsYXllcnMgd2hpY2ggdXNlIHRoZW0uIFByZXZpb3VzbHkgc3VjaCBpbnN0YW5jZXMKK3dlcmUgZXhjbHVzaXZlbHkgb3duZWQgYnkgdGhlIG1pZCBsZXZlbC4gU2VlIHRoZSBhY2Nlc3MgZnVuY3Rpb25zIGRlY2xhcmVkCit0b3dhcmRzIHRoZSBlbmQgb2YgaW5jbHVkZS9zY3NpL3Njc2lfZGV2aWNlLmggLiBJZiBhbiBMTEQgd2FudHMgdG8ga2VlcAorYSBjb3B5IG9mIGEgcG9pbnRlciB0byBhIFNjc2lfZGV2aWNlIGluc3RhbmNlIGl0IHNob3VsZCB1c2Ugc2NzaV9kZXZpY2VfZ2V0KCkKK3RvIGJ1bXAgaXRzIHJlZmVyZW5jZSBjb3VudC4gV2hlbiBpdCBpcyBmaW5pc2hlZCB3aXRoIHRoZSBwb2ludGVyIGl0IGNhbgordXNlIHNjc2lfZGV2aWNlX3B1dCgpIHRvIGRlY3JlbWVudCBpdHMgcmVmZXJlbmNlIGNvdW50IChhbmQgcG90ZW50aWFsbHkKK2RlbGV0ZSBpdCkuCisKK15eIHN0cnVjdCBTY3NpX0hvc3QgYWN0dWFsbHkgaGFzIDIgcmVmZXJlbmNlIGNvdW50cyB3aGljaCBhcmUgbWFuaXB1bGF0ZWQKK2luIHBhcmFsbGVsIGJ5IHRoZXNlIGZ1bmN0aW9ucy4KKworCitDb252ZW50aW9ucworPT09PT09PT09PT0KK0ZpcnN0LCBMaW51cyBUb3J2YWxkcydzIHRob3VnaHRzIG9uIEMgY29kaW5nIHN0eWxlIGNhbiBiZSBmb3VuZCBpbiB0aGUKK0RvY3VtZW50YXRpb24vQ29kaW5nU3R5bGUgZmlsZS4gCisKK05leHQsIHRoZXJlIGlzIGEgbW92ZW1lbnQgdG8gIm91dGxhdyIgdHlwZWRlZnMgaW50cm9kdWNpbmcgc3lub255bXMgZm9yIAorc3RydWN0IHRhZ3MuIEJvdGggY2FuIGJlIHN0aWxsIGZvdW5kIGluIHRoZSBTQ1NJIHN1YnN5c3RlbSwgYnV0Cit0aGUgdHlwZWRlZnMgaGF2ZSBiZWVuIG1vdmVkIHRvIGEgc2luZ2xlIGZpbGUsIHNjc2lfdHlwZWRlZnMuaCB0bworbWFrZSB0aGVpciBmdXR1cmUgcmVtb3ZhbCBlYXNpZXIsIGZvciBleGFtcGxlOiAKKyJ0eXBlZGVmIHN0cnVjdCBzY3NpX2hvc3RfdGVtcGxhdGUgU2NzaV9Ib3N0X1RlbXBsYXRlOyIKKworQWxzbywgbW9zdCBDOTkgZW5oYW5jZW1lbnRzIGFyZSBlbmNvdXJhZ2VkIHRvIHRoZSBleHRlbnQgdGhleSBhcmUgc3VwcG9ydGVkCitieSB0aGUgcmVsZXZhbnQgZ2NjIGNvbXBpbGVycy4gU28gQzk5IHN0eWxlIHN0cnVjdHVyZSBhbmQgYXJyYXkKK2luaXRpYWxpemVycyBhcmUgZW5jb3VyYWdlZCB3aGVyZSBhcHByb3ByaWF0ZS4gRG9uJ3QgZ28gdG9vIGZhciwKK1ZMQXMgYXJlIG5vdCBwcm9wZXJseSBzdXBwb3J0ZWQgeWV0LiAgQW4gZXhjZXB0aW9uIHRvIHRoaXMgaXMgdGhlIHVzZSBvZgorIi8vIiBzdHlsZSBjb21tZW50czsgLyouLi4qLyBjb21tZW50cyBhcmUgc3RpbGwgcHJlZmVycmVkIGluIExpbnV4LgorCitXZWxsIHdyaXR0ZW4sIHRlc3RlZCBhbmQgZG9jdW1lbnRlZCBjb2RlLCBuZWVkIG5vdCBiZSByZS1mb3JtYXR0ZWQgdG8KK2NvbXBseSB3aXRoIHRoZSBhYm92ZSBjb252ZW50aW9ucy4gRm9yIGV4YW1wbGUsIHRoZSBhaWM3eHh4IGRyaXZlcgorY29tZXMgdG8gTGludXggZnJvbSBGcmVlQlNEIGFuZCBBZGFwdGVjJ3Mgb3duIGxhYnMuIE5vIGRvdWJ0IEZyZWVCU0QKK2FuZCBBZGFwdGVjIGhhdmUgdGhlaXIgb3duIGNvZGluZyBjb252ZW50aW9ucy4KKworCitNaWQgbGV2ZWwgc3VwcGxpZWQgZnVuY3Rpb25zCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09CitUaGVzZSBmdW5jdGlvbnMgYXJlIHN1cHBsaWVkIGJ5IHRoZSBTQ1NJIG1pZCBsZXZlbCBmb3IgdXNlIGJ5IExMRHMuCitUaGUgbmFtZXMgKGkuZS4gZW50cnkgcG9pbnRzKSBvZiB0aGVzZSBmdW5jdGlvbnMgYXJlIGV4cG9ydGVkIAorc28gYW4gTExEIHRoYXQgaXMgYSBtb2R1bGUgY2FuIGFjY2VzcyB0aGVtLiBUaGUga2VybmVsIHdpbGwKK2FycmFuZ2UgZm9yIHRoZSBTQ1NJIG1pZCBsZXZlbCB0byBiZSBsb2FkZWQgYW5kIGluaXRpYWxpemVkIGJlZm9yZSBhbnkgTExECitpcyBpbml0aWFsaXplZC4gVGhlIGZ1bmN0aW9ucyBiZWxvdyBhcmUgbGlzdGVkIGFscGhhYmV0aWNhbGx5IGFuZCB0aGVpcgorbmFtZXMgYWxsIHN0YXJ0IHdpdGggInNjc2lfIi4KKworU3VtbWFyeToKKyAgIHNjc2lfYWN0aXZhdGVfdGNxIC0gdHVybiBvbiB0YWcgY29tbWFuZCBxdWV1ZWluZworICAgc2NzaV9hZGRfZGV2aWNlIC0gY3JlYXRlcyBuZXcgc2NzaSBkZXZpY2UgKGx1KSBpbnN0YW5jZQorICAgc2NzaV9hZGRfaG9zdCAtIHBlcmZvcm0gc3lzZnMgcmVnaXN0cmF0aW9uIGFuZCBTQ1NJIGJ1cyBzY2FuLgorICAgc2NzaV9hZGRfdGltZXIgLSAocmUtKXN0YXJ0IHRpbWVyIG9uIGEgU0NTSSBjb21tYW5kLgorICAgc2NzaV9hZGp1c3RfcXVldWVfZGVwdGggLSBjaGFuZ2UgdGhlIHF1ZXVlIGRlcHRoIG9uIGEgU0NTSSBkZXZpY2UKKyAgIHNjc2lfYXNzaWduX2xvY2sgLSByZXBsYWNlIGRlZmF1bHQgaG9zdF9sb2NrIHdpdGggZ2l2ZW4gbG9jaworICAgc2NzaV9iaW9zX3B0YWJsZSAtIHJldHVybiBjb3B5IG9mIGJsb2NrIGRldmljZSdzIHBhcnRpdGlvbiB0YWJsZQorICAgc2NzaV9ibG9ja19yZXF1ZXN0cyAtIHByZXZlbnQgZnVydGhlciBjb21tYW5kcyBiZWluZyBxdWV1ZWQgdG8gZ2l2ZW4gaG9zdAorICAgc2NzaV9kZWFjdGl2YXRlX3RjcSAtIHR1cm4gb2ZmIHRhZyBjb21tYW5kIHF1ZXVlaW5nCisgICBzY3NpX2RlbGV0ZV90aW1lciAtIGNhbmNlbCB0aW1lciBvbiBhIFNDU0kgY29tbWFuZC4KKyAgIHNjc2lfaG9zdF9hbGxvYyAtIHJldHVybiBhIG5ldyBzY3NpX2hvc3QgaW5zdGFuY2Ugd2hvc2UgcmVmY291bnQ9PTEKKyAgIHNjc2lfaG9zdF9nZXQgLSBpbmNyZW1lbnRzIFNjc2lfSG9zdCBpbnN0YW5jZSdzIHJlZmNvdW50CisgICBzY3NpX2hvc3RfcHV0IC0gZGVjcmVtZW50cyBTY3NpX0hvc3QgaW5zdGFuY2UncyByZWZjb3VudCAoZnJlZSBpZiAwKQorICAgc2NzaV9wYXJ0c2l6ZSAtIHBhcnNlIHBhcnRpdGlvbiB0YWJsZSBpbnRvIGN5bGluZGVycywgaGVhZHMgKyBzZWN0b3JzCisgICBzY3NpX3JlZ2lzdGVyIC0gY3JlYXRlIGFuZCByZWdpc3RlciBhIHNjc2kgaG9zdCBhZGFwdGVyIGluc3RhbmNlLgorICAgc2NzaV9yZW1vdmVfZGV2aWNlIC0gZGV0YWNoIGFuZCByZW1vdmUgYSBTQ1NJIGRldmljZQorICAgc2NzaV9yZW1vdmVfaG9zdCAtIGRldGFjaCBhbmQgcmVtb3ZlIGFsbCBTQ1NJIGRldmljZXMgb3duZWQgYnkgaG9zdAorICAgc2NzaV9yZXBvcnRfYnVzX3Jlc2V0IC0gcmVwb3J0IHNjc2kgX2J1c18gcmVzZXQgb2JzZXJ2ZWQKKyAgIHNjc2lfc2V0X2RldmljZSAtIHBsYWNlIGRldmljZSByZWZlcmVuY2UgaW4gaG9zdCBzdHJ1Y3R1cmUKKyAgIHNjc2lfdG9fcGNpX2RtYV9kaXIgLSBjb252ZXJ0IFNDU0kgc3Vic3lzdGVtIGRpcmVjdGlvbiBmbGFnIHRvIFBDSQorICAgc2NzaV90b19zYnVzX2RtYV9kaXIgLSBjb252ZXJ0IFNDU0kgc3Vic3lzdGVtIGRpcmVjdGlvbiBmbGFnIHRvIFNCVVMKKyAgIHNjc2lfdHJhY2tfcXVldWVfZnVsbCAtIHRyYWNrIHN1Y2Nlc3NpdmUgUVVFVUVfRlVMTCBldmVudHMgCisgICBzY3NpX3VuYmxvY2tfcmVxdWVzdHMgLSBhbGxvdyBmdXJ0aGVyIGNvbW1hbmRzIHRvIGJlIHF1ZXVlZCB0byBnaXZlbiBob3N0CisgICBzY3NpX3VucmVnaXN0ZXIgLSBbY2FsbHMgc2NzaV9ob3N0X3B1dCgpXQorCisKK0RldGFpbHM6CisKKy8qKgorICogc2NzaV9hY3RpdmF0ZV90Y3EgLSB0dXJuIG9uIHRhZyBjb21tYW5kIHF1ZXVlaW5nICgib3JkZXJlZCIgdGFzayBhdHRyaWJ1dGUpCisgKiBAc2RldjogICAgICAgZGV2aWNlIHRvIHR1cm4gb24gVENRIGZvcgorICogQGRlcHRoOiAgICAgIHF1ZXVlIGRlcHRoCisgKgorICogICAgICBSZXR1cm5zIG5vdGhpbmcKKyAqCisgKiAgICAgIE1pZ2h0IGJsb2NrOiBubworICoKKyAqICAgICAgTm90ZXM6IEV2ZW50dWFsbHksIGl0IGlzIGhvcGVkIGRlcHRoIHdvdWxkIGJlIHRoZSBtYXhpbXVtIGRlcHRoCisgKiAgICAgIHRoZSBkZXZpY2UgY291bGQgY29wZSB3aXRoIGFuZCB0aGUgcmVhbCBxdWV1ZSBkZXB0aAorICogICAgICB3b3VsZCBiZSBhZGp1c3RhYmxlIGZyb20gMCB0byBkZXB0aC4KKyAqCisgKiAgICAgIERlZmluZWQgKGlubGluZSkgaW46IGluY2x1ZGUvc2NzaS9zY3NpX3RjcS5oCisgKiovCit2b2lkIHNjc2lfYWN0aXZhdGVfdGNxKHN0cnVjdCBzY3NpX2RldmljZSAqc2RldiwgaW50IGRlcHRoKQorCisKKy8qKgorICogc2NzaV9hZGRfZGV2aWNlIC0gY3JlYXRlcyBuZXcgc2NzaSBkZXZpY2UgKGx1KSBpbnN0YW5jZQorICogQHNob3N0OiAgIHBvaW50ZXIgdG8gc2NzaSBob3N0IGluc3RhbmNlCisgKiBAY2hhbm5lbDogY2hhbm5lbCBudW1iZXIgKHJhcmVseSBvdGhlciB0aGFuIDApCisgKiBAaWQ6ICAgICAgdGFyZ2V0IGlkIG51bWJlcgorICogQGx1bjogICAgIGxvZ2ljYWwgdW5pdCBudW1iZXIKKyAqCisgKiAgICAgIFJldHVybnMgcG9pbnRlciB0byBuZXcgc3RydWN0IHNjc2lfZGV2aWNlIGluc3RhbmNlIG9yIAorICogICAgICBFUlJfUFRSKC1FTk9ERVYpIChvciBzb21lIG90aGVyIGJlbnQgcG9pbnRlcikgaWYgc29tZXRoaW5nIGlzCisgKiAgICAgIHdyb25nIChlLmcuIG5vIGx1IHJlc3BvbmRzIGF0IGdpdmVuIGFkZHJlc3MpCisgKgorICogICAgICBNaWdodCBibG9jazogeWVzCisgKgorICogICAgICBOb3RlczogVGhpcyBjYWxsIGlzIHVzdWFsbHkgcGVyZm9ybWVkIGludGVybmFsbHkgZHVyaW5nIGEgc2NzaQorICogICAgICBidXMgc2NhbiB3aGVuIGFuIEhCQSBpcyBhZGRlZCAoaS5lLiBzY3NpX2FkZF9ob3N0KCkpLiBTbyBpdAorICogICAgICBzaG91bGQgb25seSBiZSBjYWxsZWQgaWYgdGhlIEhCQSBiZWNvbWVzIGF3YXJlIG9mIGEgbmV3IHNjc2kKKyAqICAgICAgZGV2aWNlIChsdSkgYWZ0ZXIgc2NzaV9hZGRfaG9zdCgpIGhhcyBjb21wbGV0ZWQuIElmIHN1Y2Nlc3NmdWwKKyAqICAgICAgdGhpcyBjYWxsIHdlIGxlYWQgdG8gc2xhdmVfYWxsb2MoKSBhbmQgc2xhdmVfY29uZmlndXJlKCkgY2FsbGJhY2tzCisgKiAgICAgIGludG8gdGhlIExMRC4KKyAqCisgKiAgICAgIERlZmluZWQgaW46IGRyaXZlcnMvc2NzaS9zY3NpX3NjYW4uYworICoqLworc3RydWN0IHNjc2lfZGV2aWNlICogc2NzaV9hZGRfZGV2aWNlKHN0cnVjdCBTY3NpX0hvc3QgKnNob3N0LCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgY2hhbm5lbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgaWQsIHVuc2lnbmVkIGludCBsdW4pCisKKworLyoqCisgKiBzY3NpX2FkZF9ob3N0IC0gcGVyZm9ybSBzeXNmcyByZWdpc3RyYXRpb24gYW5kIFNDU0kgYnVzIHNjYW4uCisgKiBAc2hvc3Q6ICAgcG9pbnRlciB0byBzY3NpIGhvc3QgaW5zdGFuY2UKKyAqIEBkZXY6ICAgICBwb2ludGVyIHRvIHN0cnVjdCBkZXZpY2Ugb2YgdHlwZSBzY3NpIGNsYXNzCisgKgorICogICAgICBSZXR1cm5zIDAgb24gc3VjY2VzcywgbmVnYXRpdmUgZXJybm8gb2YgZmFpbHVyZSAoZS5nLiAtRU5PTUVNKQorICoKKyAqICAgICAgTWlnaHQgYmxvY2s6IG5vCisgKgorICogICAgICBOb3RlczogT25seSByZXF1aXJlZCBpbiAiaG90cGx1ZyBpbml0aWFsaXphdGlvbiBtb2RlbCIgYWZ0ZXIgYQorICogICAgICBzdWNjZXNzZnVsIGNhbGwgdG8gc2NzaV9ob3N0X2FsbG9jKCkuCisgKgorICogICAgICBEZWZpbmVkIGluOiBkcml2ZXJzL3Njc2kvaG9zdHMuYworICoqLworaW50IHNjc2lfYWRkX2hvc3Qoc3RydWN0IFNjc2lfSG9zdCAqc2hvc3QsIHN0cnVjdCBkZXZpY2UgKiBkZXYpCisKKworLyoqCisgKiBzY3NpX2FkZF90aW1lciAtIChyZS0pc3RhcnQgdGltZXIgb24gYSBTQ1NJIGNvbW1hbmQuCisgKiBAc2NtZDogICAgcG9pbnRlciB0byBzY3NpIGNvbW1hbmQgaW5zdGFuY2UKKyAqIEB0aW1lb3V0OiBkdXJhdGlvbiBvZiB0aW1lb3V0IGluICJqaWZmaWVzIgorICogQGNvbXBsZXRlOiBwb2ludGVyIHRvIGZ1bmN0aW9uIHRvIGNhbGwgaWYgdGltZW91dCBleHBpcmVzCisgKgorICogICAgICBSZXR1cm5zIG5vdGhpbmcKKyAqCisgKiAgICAgIE1pZ2h0IGJsb2NrOiBubworICoKKyAqICAgICAgTm90ZXM6IEVhY2ggc2NzaSBjb21tYW5kIGhhcyBpdHMgb3duIHRpbWVyLCBhbmQgYXMgaXQgaXMgYWRkZWQKKyAqICAgICAgdG8gdGhlIHF1ZXVlLCB3ZSBzZXQgdXAgdGhlIHRpbWVyLiBXaGVuIHRoZSBjb21tYW5kIGNvbXBsZXRlcywgCisgKiAgICAgIHdlIGNhbmNlbCB0aGUgdGltZXIuIEFuIExMRCBjYW4gdXNlIHRoaXMgZnVuY3Rpb24gdG8gY2hhbmdlCisgKiAgICAgIHRoZSBleGlzdGluZyB0aW1lb3V0IHZhbHVlLgorICoKKyAqICAgICAgRGVmaW5lZCBpbjogZHJpdmVycy9zY3NpL3Njc2lfZXJyb3IuYworICoqLwordm9pZCBzY3NpX2FkZF90aW1lcihzdHJ1Y3Qgc2NzaV9jbW5kICpzY21kLCBpbnQgdGltZW91dCwgCisgICAgICAgICAgICAgICAgICAgIHZvaWQgKCpjb21wbGV0ZSkoc3RydWN0IHNjc2lfY21uZCAqKSkKKworCisvKioKKyAqIHNjc2lfYWRqdXN0X3F1ZXVlX2RlcHRoIC0gYWxsb3cgTExEIHRvIGNoYW5nZSBxdWV1ZSBkZXB0aCBvbiBhIFNDU0kgZGV2aWNlCisgKiBAc2RldjogICAgICAgcG9pbnRlciB0byBTQ1NJIGRldmljZSB0byBjaGFuZ2UgcXVldWUgZGVwdGggb24KKyAqIEB0YWdnZWQ6ICAgICAwIC0gbm8gdGFnZ2VkIHF1ZXVpbmcKKyAqICAgICAgICAgICAgICBNU0dfU0lNUExFX1RBRyAtIHNpbXBsZSB0YWdnZWQgcXVldWluZworICogICAgICAgICAgICAgIE1TR19PUkRFUkVEX1RBRyAtIG9yZGVyZWQgdGFnZ2VkIHF1ZXVpbmcKKyAqIEB0YWdzICAgICAgICBOdW1iZXIgb2YgdGFncyBhbGxvd2VkIGlmIHRhZ2dlZCBxdWV1aW5nIGVuYWJsZWQsCisgKiAgICAgICAgICAgICAgb3IgbnVtYmVyIG9mIGNvbW1hbmRzIHRoZSBMTEQgY2FuIHF1ZXVlIHVwCisgKiAgICAgICAgICAgICAgaW4gbm9uLXRhZ2dlZCBtb2RlIChhcyBwZXIgY21kX3Blcl9sdW4pLgorICoKKyAqICAgICAgUmV0dXJucyBub3RoaW5nCisgKgorICogICAgICBNaWdodCBibG9jazogbm8KKyAqCisgKiAgICAgIE5vdGVzOiBDYW4gYmUgaW52b2tlZCBhbnkgdGltZSBvbiBhIFNDU0kgZGV2aWNlIGNvbnRyb2xsZWQgYnkgdGhpcworICogICAgICBMTEQuIFtTcGVjaWZpY2FsbHkgZHVyaW5nIGFuZCBhZnRlciBzbGF2ZV9jb25maWd1cmUoKSBhbmQgcHJpb3IgdG8KKyAqICAgICAgc2xhdmVfZGVzdHJveSgpLl0gQ2FuIHNhZmVseSBiZSBpbnZva2VkIGZyb20gaW50ZXJydXB0IGNvZGUuIEFjdHVhbAorICogICAgICBxdWV1ZSBkZXB0aCBjaGFuZ2UgbWF5IGJlIGRlbGF5ZWQgdW50aWwgdGhlIG5leHQgY29tbWFuZCBpcyBiZWluZworICogICAgICBwcm9jZXNzZWQuIFNlZSBhbHNvIHNjc2lfYWN0aXZhdGVfdGNxKCkgYW5kIHNjc2lfZGVhY3RpdmF0ZV90Y3EoKS4KKyAqCisgKiAgICAgIERlZmluZWQgaW46IGRyaXZlcnMvc2NzaS9zY3NpLmMgW3NlZSBzb3VyY2UgY29kZSBmb3IgbW9yZSBub3Rlc10KKyAqCisgKiovCit2b2lkIHNjc2lfYWRqdXN0X3F1ZXVlX2RlcHRoKHN0cnVjdCBzY3NpX2RldmljZSAqIHNkZXYsIGludCB0YWdnZWQsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgdGFncykKKworCisvKioKKyAqIHNjc2lfYXNzaWduX2xvY2sgLSByZXBsYWNlIGRlZmF1bHQgaG9zdF9sb2NrIHdpdGggZ2l2ZW4gbG9jaworICogQHNob3N0OiBhIHBvaW50ZXIgdG8gYSBzY3NpIGhvc3QgaW5zdGFuY2UKKyAqIEBsb2NrOiBwb2ludGVyIHRvIGxvY2sgdG8gcmVwbGFjZSBob3N0X2xvY2sgZm9yIHRoaXMgaG9zdAorICoKKyAqICAgICAgUmV0dXJucyBub3RoaW5nCisgKgorICogICAgICBNaWdodCBibG9jazogbm8KKyAqCisgKiAgICAgIERlZmluZWQgaW46IGluY2x1ZGUvc2NzaS9zY3NpX2hvc3QuaCAuCisgKiovCit2b2lkIHNjc2lfYXNzaWduX2xvY2soc3RydWN0IFNjc2lfSG9zdCAqc2hvc3QsIHNwaW5sb2NrX3QgKmxvY2spCisKKworLyoqCisgKiBzY3NpX2Jpb3NfcHRhYmxlIC0gcmV0dXJuIGNvcHkgb2YgYmxvY2sgZGV2aWNlJ3MgcGFydGl0aW9uIHRhYmxlCisgKiBAZGV2OiAgICAgICAgcG9pbnRlciB0byBibG9jayBkZXZpY2UKKyAqCisgKiAgICAgIFJldHVybnMgcG9pbnRlciB0byBwYXJ0aXRpb24gdGFibGUsIG9yIE5VTEwgZm9yIGZhaWx1cmUKKyAqCisgKiAgICAgIE1pZ2h0IGJsb2NrOiB5ZXMKKyAqCisgKiAgICAgIE5vdGVzOiBDYWxsZXIgb3ducyBtZW1vcnkgcmV0dXJuZWQgKGZyZWUgd2l0aCBrZnJlZSgpICkKKyAqCisgKiAgICAgIERlZmluZWQgaW46IGRyaXZlcnMvc2NzaS9zY3NpY2FtLmMKKyAqKi8KK3Vuc2lnbmVkIGNoYXIgKnNjc2lfYmlvc19wdGFibGUoc3RydWN0IGJsb2NrX2RldmljZSAqZGV2KQorCisKKy8qKgorICogc2NzaV9ibG9ja19yZXF1ZXN0cyAtIHByZXZlbnQgZnVydGhlciBjb21tYW5kcyBiZWluZyBxdWV1ZWQgdG8gZ2l2ZW4gaG9zdAorICoKKyAqIEBzaG9zdDogcG9pbnRlciB0byBob3N0IHRvIGJsb2NrIGNvbW1hbmRzIG9uCisgKgorICogICAgICBSZXR1cm5zIG5vdGhpbmcKKyAqCisgKiAgICAgIE1pZ2h0IGJsb2NrOiBubworICoKKyAqICAgICAgTm90ZXM6IFRoZXJlIGlzIG5vIHRpbWVyIG5vciBhbnkgb3RoZXIgbWVhbnMgYnkgd2hpY2ggdGhlIHJlcXVlc3RzCisgKiAgICAgIGdldCB1bmJsb2NrZWQgb3RoZXIgdGhhbiB0aGUgTExEIGNhbGxpbmcgc2NzaV91bmJsb2NrX3JlcXVlc3RzKCkuCisgKgorICogICAgICBEZWZpbmVkIGluOiBkcml2ZXJzL3Njc2kvc2NzaV9saWIuYworKiovCit2b2lkIHNjc2lfYmxvY2tfcmVxdWVzdHMoc3RydWN0IFNjc2lfSG9zdCAqIHNob3N0KQorCisKKy8qKgorICogc2NzaV9kZWFjdGl2YXRlX3RjcSAtIHR1cm4gb2ZmIHRhZyBjb21tYW5kIHF1ZXVlaW5nCisgKiBAc2RldjogICAgICAgZGV2aWNlIHRvIHR1cm4gb2ZmIFRDUSBmb3IKKyAqIEBkZXB0aDogICAgICBxdWV1ZSBkZXB0aCAoc3RvcmVkIGluIHNkZXYpCisgKgorICogICAgICBSZXR1cm5zIG5vdGhpbmcKKyAqCisgKiAgICAgIE1pZ2h0IGJsb2NrOiBubworICoKKyAqICAgICAgRGVmaW5lZCAoaW5saW5lKSBpbjogaW5jbHVkZS9zY3NpL3Njc2lfdGNxLmgKKyAqKi8KK3ZvaWQgc2NzaV9kZWFjdGl2YXRlX3RjcShzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXYsIGludCBkZXB0aCkKKworCisvKioKKyAqIHNjc2lfZGVsZXRlX3RpbWVyIC0gY2FuY2VsIHRpbWVyIG9uIGEgU0NTSSBjb21tYW5kLgorICogQHNjbWQ6ICAgIHBvaW50ZXIgdG8gc2NzaSBjb21tYW5kIGluc3RhbmNlCisgKgorICogICAgICBSZXR1cm5zIDEgaWYgYWJsZSB0byBjYW5jZWwgdGltZXIgZWxzZSAwIChpLmUuIHRvbyBsYXRlIG9yIGFscmVhZHkKKyAqICAgICAgY2FuY2VsbGVkKS4KKyAqCisgKiAgICAgIE1pZ2h0IGJsb2NrOiBubyBbbWF5IGluIHRoZSBmdXR1cmUgaWYgaXQgaW52b2tlcyBkZWxfdGltZXJfc3luYygpXQorICoKKyAqICAgICAgTm90ZXM6IEFsbCBjb21tYW5kcyBpc3N1ZWQgYnkgdXBwZXIgbGV2ZWxzIGFscmVhZHkgaGF2ZSBhIHRpbWVvdXQKKyAqICAgICAgYXNzb2NpYXRlZCB3aXRoIHRoZW0uIEFuIExMRCBjYW4gdXNlIHRoaXMgZnVuY3Rpb24gdG8gY2FuY2VsIHRoZQorICogICAgICB0aW1lci4KKyAqCisgKiAgICAgIERlZmluZWQgaW46IGRyaXZlcnMvc2NzaS9zY3NpX2Vycm9yLmMKKyAqKi8KK2ludCBzY3NpX2RlbGV0ZV90aW1lcihzdHJ1Y3Qgc2NzaV9jbW5kICpzY21kKQorCisKKy8qKgorICogc2NzaV9ob3N0X2FsbG9jIC0gY3JlYXRlIGEgc2NzaSBob3N0IGFkYXB0ZXIgaW5zdGFuY2UgYW5kIHBlcmZvcm0gYmFzaWMKKyAqICAgICAgICAgICAgICAgICAgIGluaXRpYWxpemF0aW9uLgorICogQHNodDogICAgICAgIHBvaW50ZXIgdG8gc2NzaSBob3N0IHRlbXBsYXRlCisgKiBAcHJpdnNpemU6ICAgZXh0cmEgYnl0ZXMgdG8gYWxsb2NhdGUgaW4gaG9zdGRhdGEgYXJyYXkgKHdoaWNoIGlzIHRoZQorICogICAgICAgICAgICAgIGxhc3QgbWVtYmVyIG9mIHRoZSByZXR1cm5lZCBTY3NpX0hvc3QgaW5zdGFuY2UpCisgKgorICogICAgICBSZXR1cm5zIHBvaW50ZXIgdG8gbmV3IFNjc2lfSG9zdCBpbnN0YW5jZSBvciBOVUxMIG9uIGZhaWx1cmUKKyAqCisgKiAgICAgIE1pZ2h0IGJsb2NrOiB5ZXMKKyAqCisgKiAgICAgIE5vdGVzOiBXaGVuIHRoaXMgY2FsbCByZXR1cm5zIHRvIHRoZSBMTEQsIHRoZSBTQ1NJIGJ1cyBzY2FuIG9uCisgKiAgICAgIHRoaXMgaG9zdCBoYXMgX25vdF8geWV0IGJlZW4gZG9uZS4KKyAqICAgICAgVGhlIGhvc3RkYXRhIGFycmF5IChieSBkZWZhdWx0IHplcm8gbGVuZ3RoKSBpcyBhIHBlciBob3N0IHNjcmF0Y2ggCisgKiAgICAgIGFyZWEgZm9yIHRoZSBMTEQncyBleGNsdXNpdmUgdXNlLgorICogICAgICBCb3RoIGFzc29jaWF0ZWQgcmVmY291bnRpbmcgb2JqZWN0cyBoYXZlIHRoZWlyIHJlZmNvdW50IHNldCB0byAxLgorICogICAgICBGdWxsIHJlZ2lzdHJhdGlvbiAoaW4gc3lzZnMpIGFuZCBhIGJ1cyBzY2FuIGFyZSBwZXJmb3JtZWQgbGF0ZXIgd2hlbgorICogICAgICBzY3NpX2FkZF9ob3N0KCkgaXMgY2FsbGVkLgorICoKKyAqICAgICAgRGVmaW5lZCBpbjogZHJpdmVycy9zY3NpL2hvc3RzLmMgLgorICoqLworc3RydWN0IFNjc2lfSG9zdCAqIHNjc2lfaG9zdF9hbGxvYyhzdHJ1Y3Qgc2NzaV9ob3N0X3RlbXBsYXRlICogc2h0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcHJpdnNpemUpCisKKworLyoqCisgKiBzY3NpX2hvc3RfZ2V0IC0gaW5jcmVtZW50IFNjc2lfSG9zdCBpbnN0YW5jZSByZWZjb3VudAorICogQHNob3N0OiAgIHBvaW50ZXIgdG8gc3RydWN0IFNjc2lfSG9zdCBpbnN0YW5jZQorICoKKyAqICAgICAgUmV0dXJucyBub3RoaW5nCisgKgorICogICAgICBNaWdodCBibG9jazogY3VycmVudGx5IG1heSBibG9jayBidXQgbWF5IGJlIGNoYW5nZWQgdG8gbm90IGJsb2NrCisgKgorICogICAgICBOb3RlczogQWN0dWFsbHkgaW5jcmVtZW50cyB0aGUgY291bnRzIGluIHR3byBzdWItb2JqZWN0cworICoKKyAqICAgICAgRGVmaW5lZCBpbjogZHJpdmVycy9zY3NpL2hvc3RzLmMKKyAqKi8KK3ZvaWQgc2NzaV9ob3N0X2dldChzdHJ1Y3QgU2NzaV9Ib3N0ICpzaG9zdCkKKworCisvKioKKyAqIHNjc2lfaG9zdF9wdXQgLSBkZWNyZW1lbnQgU2NzaV9Ib3N0IGluc3RhbmNlIHJlZmNvdW50LCBmcmVlIGlmIDAKKyAqIEBzaG9zdDogICBwb2ludGVyIHRvIHN0cnVjdCBTY3NpX0hvc3QgaW5zdGFuY2UKKyAqCisgKiAgICAgIFJldHVybnMgbm90aGluZworICoKKyAqICAgICAgTWlnaHQgYmxvY2s6IGN1cnJlbnRseSBtYXkgYmxvY2sgYnV0IG1heSBiZSBjaGFuZ2VkIHRvIG5vdCBibG9jaworICoKKyAqICAgICAgTm90ZXM6IEFjdHVhbGx5IGRlY3JlbWVudHMgdGhlIGNvdW50cyBpbiB0d28gc3ViLW9iamVjdHMuIElmIHRoZQorICogICAgICBsYXR0ZXIgcmVmY291bnQgcmVhY2hlcyAwLCB0aGUgU2NzaV9Ib3N0IGluc3RhbmNlIGlzIGZyZWVkLgorICogICAgICBUaGUgTExEIG5lZWQgbm90IHdvcnJ5IGV4YWN0bHkgd2hlbiB0aGUgU2NzaV9Ib3N0IGluc3RhbmNlIGlzCisgKiAgICAgIGZyZWVkLCBpdCBqdXN0IHNob3VsZG4ndCBhY2Nlc3MgdGhlIGluc3RhbmNlIGFmdGVyIGl0IGhhcyBiYWxhbmNlZAorICogICAgICBvdXQgaXRzIHJlZmNvdW50IHVzYWdlLgorICoKKyAqICAgICAgRGVmaW5lZCBpbjogZHJpdmVycy9zY3NpL2hvc3RzLmMKKyAqKi8KK3ZvaWQgc2NzaV9ob3N0X3B1dChzdHJ1Y3QgU2NzaV9Ib3N0ICpzaG9zdCkKKworCisvKioKKyAqIHNjc2lfcGFydHNpemUgLSBwYXJzZSBwYXJ0aXRpb24gdGFibGUgaW50byBjeWxpbmRlcnMsIGhlYWRzICsgc2VjdG9ycworICogQGJ1ZjogcG9pbnRlciB0byBwYXJ0aXRpb24gdGFibGUKKyAqIEBjYXBhY2l0eTogc2l6ZSBvZiAodG90YWwpIGRpc2sgaW4gNTEyIGJ5dGUgc2VjdG9ycworICogQGN5bHM6IG91dHB1dHMgbnVtYmVyIG9mIGN5bGluZGVycyBjYWxjdWxhdGVkIHZpYSB0aGlzIHBvaW50ZXIKKyAqIEBoZHM6IG91dHB1dHMgbnVtYmVyIG9mIGhlYWRzIGNhbGN1bGF0ZWQgdmlhIHRoaXMgcG9pbnRlcgorICogQHNlY3M6IG91dHB1dHMgbnVtYmVyIG9mIHNlY3RvcnMgY2FsY3VsYXRlZCB2aWEgdGhpcyBwb2ludGVyCisgKgorICogICAgICBSZXR1cm5zIDAgb24gc3VjY2VzcywgLTEgb24gZmFpbHVyZQorICoKKyAqICAgICAgTWlnaHQgYmxvY2s6IG5vCisgKgorICogICAgICBOb3RlczogQ2FsbGVyIG93bnMgbWVtb3J5IHJldHVybmVkIChmcmVlIHdpdGgga2ZyZWUoKSApCisgKgorICogICAgICBEZWZpbmVkIGluOiBkcml2ZXJzL3Njc2kvc2NzaWNhbS5jCisgKiovCitpbnQgc2NzaV9wYXJ0c2l6ZSh1bnNpZ25lZCBjaGFyICpidWYsIHVuc2lnbmVkIGxvbmcgY2FwYWNpdHksCisgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgKmN5bHMsIHVuc2lnbmVkIGludCAqaGRzLCB1bnNpZ25lZCBpbnQgKnNlY3MpCisKKworLyoqCisgKiBzY3NpX3JlZ2lzdGVyIC0gY3JlYXRlIGFuZCByZWdpc3RlciBhIHNjc2kgaG9zdCBhZGFwdGVyIGluc3RhbmNlLgorICogQHNodDogICAgICAgIHBvaW50ZXIgdG8gc2NzaSBob3N0IHRlbXBsYXRlCisgKiBAcHJpdnNpemU6ICAgZXh0cmEgYnl0ZXMgdG8gYWxsb2NhdGUgaW4gaG9zdGRhdGEgYXJyYXkgKHdoaWNoIGlzIHRoZQorICogICAgICAgICAgICAgIGxhc3QgbWVtYmVyIG9mIHRoZSByZXR1cm5lZCBTY3NpX0hvc3QgaW5zdGFuY2UpCisgKgorICogICAgICBSZXR1cm5zIHBvaW50ZXIgdG8gbmV3IFNjc2lfSG9zdCBpbnN0YW5jZSBvciBOVUxMIG9uIGZhaWx1cmUKKyAqCisgKiAgICAgIE1pZ2h0IGJsb2NrOiB5ZXMKKyAqCisgKiAgICAgIE5vdGVzOiBXaGVuIHRoaXMgY2FsbCByZXR1cm5zIHRvIHRoZSBMTEQsIHRoZSBTQ1NJIGJ1cyBzY2FuIG9uCisgKiAgICAgIHRoaXMgaG9zdCBoYXMgX25vdF8geWV0IGJlZW4gZG9uZS4KKyAqICAgICAgVGhlIGhvc3RkYXRhIGFycmF5IChieSBkZWZhdWx0IHplcm8gbGVuZ3RoKSBpcyBhIHBlciBob3N0IHNjcmF0Y2ggCisgKiAgICAgIGFyZWEgZm9yIHRoZSBMTEQuCisgKgorICogICAgICBEZWZpbmVkIGluOiBkcml2ZXJzL3Njc2kvaG9zdHMuYyAuCisgKiovCitzdHJ1Y3QgU2NzaV9Ib3N0ICogc2NzaV9yZWdpc3RlcihzdHJ1Y3Qgc2NzaV9ob3N0X3RlbXBsYXRlICogc2h0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHByaXZzaXplKQorCisKKy8qKgorICogc2NzaV9yZW1vdmVfZGV2aWNlIC0gZGV0YWNoIGFuZCByZW1vdmUgYSBTQ1NJIGRldmljZQorICogQHNkZXY6ICAgICAgYSBwb2ludGVyIHRvIGEgc2NzaSBkZXZpY2UgaW5zdGFuY2UKKyAqCisgKiAgICAgIFJldHVybnMgdmFsdWU6IDAgb24gc3VjY2VzcywgLUVJTlZBTCBpZiBkZXZpY2Ugbm90IGF0dGFjaGVkCisgKgorICogICAgICBNaWdodCBibG9jazogeWVzCisgKgorICogICAgICBOb3RlczogSWYgYW4gTExEIGJlY29tZXMgYXdhcmUgdGhhdCBhIHNjc2kgZGV2aWNlIChsdSkgaGFzCisgKiAgICAgIGJlZW4gcmVtb3ZlZCBidXQgaXRzIGhvc3QgaXMgc3RpbGwgcHJlc2VudCB0aGVuIGl0IGNhbiByZXF1ZXN0CisgKiAgICAgIHRoZSByZW1vdmFsIG9mIHRoYXQgc2NzaSBkZXZpY2UuIElmIHN1Y2Nlc3NmdWwgdGhpcyBjYWxsIHdpbGwKKyAqICAgICAgbGVhZCB0byB0aGUgc2xhdmVfZGVzdHJveSgpIGNhbGxiYWNrIGJlaW5nIGludm9rZWQuIHNkZXYgaXMgYW4gCisgKiAgICAgIGludmFsaWQgcG9pbnRlciBhZnRlciB0aGlzIGNhbGwuCisgKgorICogICAgICBEZWZpbmVkIGluOiBkcml2ZXJzL3Njc2kvc2NzaV9zeXNmcy5jIC4KKyAqKi8KK2ludCBzY3NpX3JlbW92ZV9kZXZpY2Uoc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2KQorCisKKy8qKgorICogc2NzaV9yZW1vdmVfaG9zdCAtIGRldGFjaCBhbmQgcmVtb3ZlIGFsbCBTQ1NJIGRldmljZXMgb3duZWQgYnkgaG9zdAorICogQHNob3N0OiAgICAgIGEgcG9pbnRlciB0byBhIHNjc2kgaG9zdCBpbnN0YW5jZQorICoKKyAqICAgICAgUmV0dXJucyB2YWx1ZTogMCBvbiBzdWNjZXNzLCAxIG9uIGZhaWx1cmUgKGUuZy4gTExEIGJ1c3kgPz8pCisgKgorICogICAgICBNaWdodCBibG9jazogeWVzCisgKgorICogICAgICBOb3RlczogU2hvdWxkIG9ubHkgYmUgaW52b2tlZCBpZiB0aGUgImhvdHBsdWcgaW5pdGlhbGl6YXRpb24KKyAqICAgICAgbW9kZWwiIGlzIGJlaW5nIHVzZWQuIEl0IHNob3VsZCBiZSBjYWxsZWQgX3ByaW9yXyB0byAgCisgKiAgICAgIHNjc2lfdW5yZWdpc3RlcigpLgorICoKKyAqICAgICAgRGVmaW5lZCBpbjogZHJpdmVycy9zY3NpL2hvc3RzLmMgLgorICoqLworaW50IHNjc2lfcmVtb3ZlX2hvc3Qoc3RydWN0IFNjc2lfSG9zdCAqc2hvc3QpCisKKworLyoqCisgKiBzY3NpX3JlcG9ydF9idXNfcmVzZXQgLSByZXBvcnQgc2NzaSBfYnVzXyByZXNldCBvYnNlcnZlZAorICogQHNob3N0OiBhIHBvaW50ZXIgdG8gYSBzY3NpIGhvc3QgaW52b2x2ZWQKKyAqIEBjaGFubmVsOiBjaGFubmVsICh3aXRoaW4pIGhvc3Qgb24gd2hpY2ggc2NzaSBidXMgcmVzZXQgb2NjdXJyZWQKKyAqCisgKiAgICAgIFJldHVybnMgbm90aGluZworICoKKyAqICAgICAgTWlnaHQgYmxvY2s6IG5vCisgKgorICogICAgICBOb3RlczogVGhpcyBvbmx5IG5lZWRzIHRvIGJlIGNhbGxlZCBpZiB0aGUgcmVzZXQgaXMgb25lIHdoaWNoCisgKiAgICAgIG9yaWdpbmF0ZXMgZnJvbSBhbiB1bmtub3duIGxvY2F0aW9uLiAgUmVzZXRzIG9yaWdpbmF0ZWQgYnkgdGhlIAorICogICAgICBtaWQgbGV2ZWwgaXRzZWxmIGRvbid0IG5lZWQgdG8gY2FsbCB0aGlzLCBidXQgdGhlcmUgc2hvdWxkIGJlIAorICogICAgICBubyBoYXJtLiAgVGhlIG1haW4gcHVycG9zZSBvZiB0aGlzIGlzIHRvIG1ha2Ugc3VyZSB0aGF0IGEKKyAqICAgICAgQ0hFQ0tfQ09ORElUSU9OIGlzIHByb3Blcmx5IHRyZWF0ZWQuCisgKgorICogICAgICBEZWZpbmVkIGluOiBkcml2ZXJzL3Njc2kvc2NzaV9lcnJvci5jIC4KKyAqKi8KK3ZvaWQgc2NzaV9yZXBvcnRfYnVzX3Jlc2V0KHN0cnVjdCBTY3NpX0hvc3QgKiBzaG9zdCwgaW50IGNoYW5uZWwpCisKKworLyoqCisgKiBzY3NpX3NldF9kZXZpY2UgLSBwbGFjZSBkZXZpY2UgcmVmZXJlbmNlIGluIGhvc3Qgc3RydWN0dXJlCisgKiBAc2hvc3Q6IGEgcG9pbnRlciB0byBhIHNjc2kgaG9zdCBpbnN0YW5jZQorICogQHBkZXY6IHBvaW50ZXIgdG8gZGV2aWNlIGluc3RhbmNlIHRvIGFzc2lnbgorICoKKyAqICAgICAgUmV0dXJucyBub3RoaW5nCisgKgorICogICAgICBNaWdodCBibG9jazogbm8KKyAqCisgKiAgICAgIERlZmluZWQgaW46IGluY2x1ZGUvc2NzaS9zY3NpX2hvc3QuaCAuCisgKiovCit2b2lkIHNjc2lfc2V0X2RldmljZShzdHJ1Y3QgU2NzaV9Ib3N0ICogc2hvc3QsIHN0cnVjdCBkZXZpY2UgKiBkZXYpCisKKworLyoqCisgKiBzY3NpX3RvX3BjaV9kbWFfZGlyIC0gY29udmVydCBTQ1NJIHN1YnN5c3RlbSBkaXJlY3Rpb24gZmxhZyB0byBQQ0kKKyAqIEBzY3NpX2RhdGFfZGlyZWN0aW9uOiBTQ1NJIHN1YnN5c3RlbSBkaXJlY3Rpb24gZmxhZworICoKKyAqICAgICAgUmV0dXJucyBETUFfVE9fREVWSUNFIGdpdmVuIFNDU0lfREFUQV9XUklURSwKKyAqICAgICAgICAgICAgICBETUFfRlJPTV9ERVZJQ0UgZ2l2ZW4gU0NTSV9EQVRBX1JFQUQKKyAqICAgICAgICAgICAgICBETUFfQklESVJFQ1RJT05BTCBnaXZlbiBTQ1NJX0RBVEFfVU5LTk9XTgorICogICAgICAgICAgICAgIGVsc2UgcmV0dXJucyBETUFfTk9ORQorICoKKyAqICAgICAgTWlnaHQgYmxvY2s6IG5vCisgKgorICogICAgICBOb3RlczogVGhlIFNDU0kgc3Vic3lzdGVtIG5vdyB1c2VzIHRoZSBzYW1lIHZhbHVlcyBmb3IgdGhlc2UKKyAqICAgICAgY29uc3RhbnRzIGFzIHRoZSBQQ0kgc3Vic3lzdGVtIHNvIHRoaXMgZnVuY3Rpb24gaXMgYSBub3AuCisgKiAgICAgIFRoZSByZWNvbW1lbmRhdGlvbiBpcyBub3QgdG8gdXNlIHRoaXMgY29udmVyc2lvbiBmdW5jdGlvbiBhbnltb3JlCisgKiAgICAgIChpbiB0aGUgMi42IGtlcm5lbCBzZXJpZXMpIGFzIGl0IGlzIG5vdCBuZWVkZWQuCisgKgorICogICAgICBEZWZpbmVkIGluOiBkcml2ZXJzL3Njc2kvc2NzaS5oIC4KKyAqKi8KK2ludCBzY3NpX3RvX3BjaV9kbWFfZGlyKHVuc2lnbmVkIGNoYXIgc2NzaV9kYXRhX2RpcmVjdGlvbikKKworCisvKioKKyAqIHNjc2lfdG9fc2J1c19kbWFfZGlyIC0gY29udmVydCBTQ1NJIHN1YnN5c3RlbSBkaXJlY3Rpb24gZmxhZyB0byBTQlVTCisgKiBAc2NzaV9kYXRhX2RpcmVjdGlvbjogU0NTSSBzdWJzeXN0ZW0gZGlyZWN0aW9uIGZsYWcKKyAqCisgKiAgICAgIFJldHVybnMgRE1BX1RPX0RFVklDRSBnaXZlbiBTQ1NJX0RBVEFfV1JJVEUsCisgKiAgICAgICAgICAgICAgRlJPTV9ERVZJQ0UgZ2l2ZW4gU0NTSV9EQVRBX1JFQUQKKyAqICAgICAgICAgICAgICBETUFfQklESVJFQ1RJT05BTCBnaXZlbiBTQ1NJX0RBVEFfVU5LTk9XTgorICogICAgICAgICAgICAgIGVsc2UgcmV0dXJucyBETUFfTk9ORQorICoKKyAqICAgICAgTm90ZXM6IFRoZSBTQ1NJIHN1YnN5c3RlbSBub3cgdXNlcyB0aGUgc2FtZSB2YWx1ZXMgZm9yIHRoZXNlCisgKiAgICAgIGNvbnN0YW50cyBhcyB0aGUgU0JVUyBzdWJzeXN0ZW0gc28gdGhpcyBmdW5jdGlvbiBpcyBhIG5vcC4KKyAqICAgICAgVGhlIHJlY29tbWVuZGF0aW9uIGlzIG5vdCB0byB1c2UgdGhpcyBjb252ZXJzaW9uIGZ1bmN0aW9uIGFueW1vcmUKKyAqICAgICAgKGluIHRoZSAyLjYga2VybmVsIHNlcmllcykgYXMgaXQgaXMgbm90IG5lZWRlZC4KKyAqCisgKiAgICAgIE1pZ2h0IGJsb2NrOiBubworICoKKyAqICAgICAgRGVmaW5lZCBpbjogZHJpdmVycy9zY3NpL3Njc2kuaCAuCisgKiovCitpbnQgc2NzaV90b19zYnVzX2RtYV9kaXIodW5zaWduZWQgY2hhciBzY3NpX2RhdGFfZGlyZWN0aW9uKQorCisKKy8qKgorICogc2NzaV90cmFja19xdWV1ZV9mdWxsIC0gdHJhY2sgc3VjY2Vzc2l2ZSBRVUVVRV9GVUxMIGV2ZW50cyBvbiBnaXZlbgorICogICAgICAgICAgICAgICAgICAgICAgZGV2aWNlIHRvIGRldGVybWluZSBpZiBhbmQgd2hlbiB0aGVyZSBpcyBhIG5lZWQKKyAqICAgICAgICAgICAgICAgICAgICAgIHRvIGFkanVzdCB0aGUgcXVldWUgZGVwdGggb24gdGhlIGRldmljZS4KKyAqIEBzZGV2OiAgcG9pbnRlciB0byBTQ1NJIGRldmljZSBpbnN0YW5jZQorICogQGRlcHRoOiBDdXJyZW50IG51bWJlciBvZiBvdXRzdGFuZGluZyBTQ1NJIGNvbW1hbmRzIG9uIHRoaXMgZGV2aWNlLAorICogICAgICAgICBub3QgY291bnRpbmcgdGhlIG9uZSByZXR1cm5lZCBhcyBRVUVVRV9GVUxMLgorICoKKyAqICAgICAgUmV0dXJucyAwICAtIG5vIGNoYW5nZSBuZWVkZWQKKyAqICAgICAgICAgICAgICA+MCAtIGFkanVzdCBxdWV1ZSBkZXB0aCB0byB0aGlzIG5ldyBkZXB0aAorICogICAgICAgICAgICAgIC0xIC0gZHJvcCBiYWNrIHRvIHVudGFnZ2VkIG9wZXJhdGlvbiB1c2luZyBob3N0LT5jbWRfcGVyX2x1bgorICogICAgICAgICAgICAgICAgICAgYXMgdGhlIHVudGFnZ2VkIGNvbW1hbmQgZGVwdGgKKyAqCisgKiAgICAgIE1pZ2h0IGJsb2NrOiBubworICoKKyAqICAgICAgTm90ZXM6IExMRHMgbWF5IGNhbGwgdGhpcyBhdCBhbnkgdGltZSBhbmQgd2Ugd2lsbCBkbyAiVGhlIFJpZ2h0CisgKiAgICAgICAgICAgICAgVGhpbmciOyBpbnRlcnJ1cHQgY29udGV4dCBzYWZlLiAKKyAqCisgKiAgICAgIERlZmluZWQgaW46IGRyaXZlcnMvc2NzaS9zY3NpLmMgLgorICoqLworaW50IHNjc2lfdHJhY2tfcXVldWVfZnVsbChTY3NpX0RldmljZSAqc2RldiwgaW50IGRlcHRoKQorCisKKy8qKgorICogc2NzaV91bmJsb2NrX3JlcXVlc3RzIC0gYWxsb3cgZnVydGhlciBjb21tYW5kcyB0byBiZSBxdWV1ZWQgdG8gZ2l2ZW4gaG9zdAorICoKKyAqIEBzaG9zdDogcG9pbnRlciB0byBob3N0IHRvIHVuYmxvY2sgY29tbWFuZHMgb24KKyAqCisgKiAgICAgIFJldHVybnMgbm90aGluZworICoKKyAqICAgICAgTWlnaHQgYmxvY2s6IG5vCisgKgorICogICAgICBEZWZpbmVkIGluOiBkcml2ZXJzL3Njc2kvc2NzaV9saWIuYyAuCisqKi8KK3ZvaWQgc2NzaV91bmJsb2NrX3JlcXVlc3RzKHN0cnVjdCBTY3NpX0hvc3QgKiBzaG9zdCkKKworCisvKioKKyAqIHNjc2lfdW5yZWdpc3RlciAtIHVucmVnaXN0ZXIgYW5kIGZyZWUgbWVtb3J5IHVzZWQgYnkgaG9zdCBpbnN0YW5jZQorICogQHNocDogICAgICAgIHBvaW50ZXIgdG8gc2NzaSBob3N0IGluc3RhbmNlIHRvIHVucmVnaXN0ZXIuCisgKgorICogICAgICBSZXR1cm5zIG5vdGhpbmcKKyAqCisgKiAgICAgIE1pZ2h0IGJsb2NrOiBubworICoKKyAqICAgICAgTm90ZXM6IFNob3VsZCBub3QgYmUgaW52b2tlZCBpZiB0aGUgImhvdHBsdWcgaW5pdGlhbGl6YXRpb24KKyAqICAgICAgbW9kZWwiIGlzIGJlaW5nIHVzZWQuIENhbGxlZCBpbnRlcm5hbGx5IGJ5IGV4aXRfdGhpc19zY3NpX2RyaXZlcigpCisgKiAgICAgIGluIHRoZSAicGFzc2l2ZSBpbml0aWFsaXphdGlvbiBtb2RlbCIuIEhlbmNlIGEgTExEIGhhcyBubyBuZWVkIHRvCisgKiAgICAgIGNhbGwgdGhpcyBmdW5jdGlvbiBkaXJlY3RseS4KKyAqCisgKiAgICAgIERlZmluZWQgaW46IGRyaXZlcnMvc2NzaS9ob3N0cy5jIC4KKyAqKi8KK3ZvaWQgc2NzaV91bnJlZ2lzdGVyKHN0cnVjdCBTY3NpX0hvc3QgKiBzaHApCisKKworCisKK0ludGVyZmFjZSBGdW5jdGlvbnMKKz09PT09PT09PT09PT09PT09PT0KK0ludGVyZmFjZSBmdW5jdGlvbnMgYXJlIHN1cHBsaWVkIChkZWZpbmVkKSBieSBMTERzIGFuZCB0aGVpciBmdW5jdGlvbgorcG9pbnRlcnMgYXJlIHBsYWNlZCBpbiBhbiBpbnN0YW5jZSBvZiBzdHJ1Y3Qgc2NzaV9ob3N0X3RlbXBsYXRlIHdoaWNoCitpcyBwYXNzZWQgdG8gc2NzaV9ob3N0X2FsbG9jKCkgW29yIHNjc2lfcmVnaXN0ZXIoKSAvIGluaXRfdGhpc19zY3NpX2RyaXZlcigpXS4KK1NvbWUgYXJlIG1hbmRhdG9yeS4gSW50ZXJmYWNlIGZ1bmN0aW9ucyBzaG91bGQgYmUgZGVjbGFyZWQgc3RhdGljLiBUaGUKK2FjY2VwdGVkIGNvbnZlbnRpb24gaXMgdGhhdCBkcml2ZXIgInh5eiIgd2lsbCBkZWNsYXJlIGl0cyBzbGF2ZV9jb25maWd1cmUoKSAKK2Z1bmN0aW9uIGFzOgorICAgIHN0YXRpYyBpbnQgeHl6X3NsYXZlX2NvbmZpZ3VyZShzdHJ1Y3Qgc2NzaV9kZXZpY2UgKiBzZGV2KTsKK2FuZCBzbyBmb3J0aCBmb3IgYWxsIGludGVyZmFjZSBmdW5jdGlvbnMgbGlzdGVkIGJlbG93LgorCitBIHBvaW50ZXIgdG8gdGhpcyBmdW5jdGlvbiBzaG91bGQgYmUgcGxhY2VkIGluIHRoZSAnc2xhdmVfY29uZmlndXJlJyBtZW1iZXIKK29mIGEgInN0cnVjdCBzY3NpX2hvc3RfdGVtcGxhdGUiIGluc3RhbmNlLiBBIHBvaW50ZXIgdG8gc3VjaCBhbiBpbnN0YW5jZQorc2hvdWxkIGJlIHBhc3NlZCB0byB0aGUgbWlkIGxldmVsJ3Mgc2NzaV9ob3N0X2FsbG9jKCkgW29yIHNjc2lfcmVnaXN0ZXIoKSAvCitpbml0X3RoaXNfc2NzaV9kcml2ZXIoKV0uCisKK1RoZSBpbnRlcmZhY2UgZnVuY3Rpb25zIGFyZSBhbHNvIGRlc2NyaWJlZCBpbiB0aGUgaW5jbHVkZS9zY3NpL3Njc2lfaG9zdC5oCitmaWxlIGltbWVkaWF0ZWx5IGFib3ZlIHRoZWlyIGRlZmluaXRpb24gcG9pbnQgaW4gInN0cnVjdCBzY3NpX2hvc3RfdGVtcGxhdGUiLgorSW4gc29tZSBjYXNlcyBtb3JlIGRldGFpbCBpcyBnaXZlbiBpbiBzY3NpX2hvc3QuaCB0aGFuIGJlbG93LgorCitUaGUgaW50ZXJmYWNlIGZ1bmN0aW9ucyBhcmUgbGlzdGVkIGJlbG93IGluIGFscGhhYmV0aWNhbCBvcmRlci4KKworU3VtbWFyeToKKyAgIGJpb3NfcGFyYW0gLSBmZXRjaCBoZWFkLCBzZWN0b3IsIGN5bGluZGVyIGluZm8gZm9yIGEgZGlzaworICAgZGV0ZWN0IC0gZGV0ZWN0cyBIQkFzIHRoaXMgZHJpdmVyIHdhbnRzIHRvIGNvbnRyb2wKKyAgIGVoX3RpbWVkX291dCAtIG5vdGlmeSB0aGUgaG9zdCB0aGF0IGEgY29tbWFuZCB0aW1lciBleHBpcmVkCisgICBlaF9hYm9ydF9oYW5kbGVyIC0gYWJvcnQgZ2l2ZW4gY29tbWFuZAorICAgZWhfYnVzX3Jlc2V0X2hhbmRsZXIgLSBpc3N1ZSBTQ1NJIGJ1cyByZXNldAorICAgZWhfZGV2aWNlX3Jlc2V0X2hhbmRsZXIgLSBpc3N1ZSBTQ1NJIGRldmljZSByZXNldAorICAgZWhfaG9zdF9yZXNldF9oYW5kbGVyIC0gcmVzZXQgaG9zdCAoaG9zdCBidXMgYWRhcHRlcikKKyAgIGVoX3N0cmF0ZWd5X2hhbmRsZXIgLSBkcml2ZXIgc3VwcGxpZWQgYWx0ZXJuYXRlIHRvIHNjc2lfdW5qYW1faG9zdCgpCisgICBpbmZvIC0gc3VwcGx5IGluZm9ybWF0aW9uIGFib3V0IGdpdmVuIGhvc3QKKyAgIGlvY3RsIC0gZHJpdmVyIGNhbiByZXNwb25kIHRvIGlvY3RscworICAgcHJvY19pbmZvIC0gc3VwcG9ydHMgL3Byb2Mvc2NzaS97ZHJpdmVyX25hbWV9L3tob3N0X25vfQorICAgcXVldWVjb21tYW5kIC0gcXVldWUgc2NzaSBjb21tYW5kLCBpbnZva2UgJ2RvbmUnIG9uIGNvbXBsZXRpb24KKyAgIHJlbGVhc2UgLSByZWxlYXNlIGFsbCByZXNvdXJjZXMgYXNzb2NpYXRlZCB3aXRoIGdpdmVuIGhvc3QKKyAgIHNsYXZlX2FsbG9jIC0gcHJpb3IgdG8gYW55IGNvbW1hbmRzIGJlaW5nIHNlbnQgdG8gYSBuZXcgZGV2aWNlIAorICAgc2xhdmVfY29uZmlndXJlIC0gZHJpdmVyIGZpbmUgdHVuaW5nIGZvciBnaXZlbiBkZXZpY2UgYWZ0ZXIgYXR0YWNoCisgICBzbGF2ZV9kZXN0cm95IC0gZ2l2ZW4gZGV2aWNlIGlzIGFib3V0IHRvIGJlIHNodXQgZG93bgorCisKK0RldGFpbHM6CisKKy8qKgorICogICAgICBiaW9zX3BhcmFtIC0gZmV0Y2ggaGVhZCwgc2VjdG9yLCBjeWxpbmRlciBpbmZvIGZvciBhIGRpc2sKKyAqICAgICAgQHNkZXY6IHBvaW50ZXIgdG8gc2NzaSBkZXZpY2UgY29udGV4dCAoZGVmaW5lZCBpbiAKKyAqICAgICAgICAgICAgIGluY2x1ZGUvc2NzaS9zY3NpX2RldmljZS5oKQorICogICAgICBAYmRldjogcG9pbnRlciB0byBibG9jayBkZXZpY2UgY29udGV4dCAoZGVmaW5lZCBpbiBmcy5oKQorICogICAgICBAY2FwYWNpdHk6ICBkZXZpY2Ugc2l6ZSAoaW4gNTEyIGJ5dGUgc2VjdG9ycykKKyAqICAgICAgQHBhcmFtczogdGhyZWUgZWxlbWVudCBhcnJheSB0byBwbGFjZSBvdXRwdXQ6CisgKiAgICAgICAgICAgICAgcGFyYW1zWzBdIG51bWJlciBvZiBoZWFkcyAobWF4IDI1NSkKKyAqICAgICAgICAgICAgICBwYXJhbXNbMV0gbnVtYmVyIG9mIHNlY3RvcnMgKG1heCA2MykKKyAqICAgICAgICAgICAgICBwYXJhbXNbMl0gbnVtYmVyIG9mIGN5bGluZGVycyAKKyAqCisgKiAgICAgIFJldHVybiB2YWx1ZSBpcyBpZ25vcmVkCisgKgorICogICAgICBMb2Nrczogbm9uZQorICoKKyAqICAgICAgQ2FsbGluZyBjb250ZXh0OiBwcm9jZXNzIChzZCkKKyAqCisgKiAgICAgIE5vdGVzOiBhbiBhcmJpdHJhcnkgZ2VvbWV0cnkgKGJhc2VkIG9uIFJFQUQgQ0FQQUNJVFkpIGlzIHVzZWQKKyAqICAgICAgaWYgdGhpcyBmdW5jdGlvbiBpcyBub3QgcHJvdmlkZWQuIFRoZSBwYXJhbXMgYXJyYXkgaXMKKyAqICAgICAgcHJlLWluaXRpYWxpemVkIHdpdGggbWFkZSB1cCB2YWx1ZXMganVzdCBpbiBjYXNlIHRoaXMgZnVuY3Rpb24gCisgKiAgICAgIGRvZXNuJ3Qgb3V0cHV0IGFueXRoaW5nLgorICoKKyAqICAgICAgT3B0aW9uYWxseSBkZWZpbmVkIGluOiBMTEQKKyAqKi8KKyAgICBpbnQgYmlvc19wYXJhbShzdHJ1Y3Qgc2NzaV9kZXZpY2UgKiBzZGV2LCBzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LAorICAgICAgICAgICAgICAgICAgIHNlY3Rvcl90IGNhcGFjaXR5LCBpbnQgcGFyYW1zWzNdKQorCisKKy8qKgorICogICAgICBkZXRlY3QgLSBkZXRlY3RzIEhCQXMgdGhpcyBkcml2ZXIgd2FudHMgdG8gY29udHJvbAorICogICAgICBAc2h0cDogaG9zdCB0ZW1wbGF0ZSBmb3IgdGhpcyBkcml2ZXIuCisgKgorICogICAgICBSZXR1cm5zIG51bWJlciBvZiBob3N0cyB0aGlzIGRyaXZlciB3YW50cyB0byBjb250cm9sLiAwIG1lYW5zIG5vCisgKiAgICAgIHN1aXRhYmxlIGhvc3RzIGZvdW5kLgorICoKKyAqICAgICAgTG9ja3M6IG5vbmUgaGVsZAorICoKKyAqICAgICAgQ2FsbGluZyBjb250ZXh0OiBwcm9jZXNzIFtpbnZva2VkIGZyb20gaW5pdF90aGlzX3Njc2lfZHJpdmVyKCldCisgKgorICogICAgICBOb3RlczogRmlyc3QgZnVuY3Rpb24gY2FsbGVkIGZyb20gdGhlIFNDU0kgbWlkIGxldmVsIG9uIHRoaXMKKyAqICAgICAgZHJpdmVyLiBVcHBlciBsZXZlbCBkcml2ZXJzIChlLmcuIHNkKSBtYXkgbm90ICh5ZXQpIGJlIHByZXNlbnQuCisgKiAgICAgIEZvciBlYWNoIGhvc3QgZm91bmQsIHRoaXMgbWV0aG9kIHNob3VsZCBjYWxsIHNjc2lfcmVnaXN0ZXIoKSAKKyAqICAgICAgW3NlZSBob3N0cy5jXS4KKyAqCisgKiAgICAgIERlZmluZWQgaW46IExMRCAocmVxdWlyZWQgaWYgInBhc3NpdmUgaW5pdGlhbGl6YXRpb24gbW9kZSIgaXMgdXNlZCwKKyAqICAgICAgICAgICAgICAgICAgICAgICBub3QgaW52b2tlZCBpbiAiaG90cGx1ZyBpbml0aWFsaXphdGlvbiBtb2RlIikKKyAqKi8KKyAgICBpbnQgZGV0ZWN0KHN0cnVjdCBzY3NpX2hvc3RfdGVtcGxhdGUgKiBzaHRwKQorCisKKy8qKgorICogICAgICBlaF90aW1lZF9vdXQgLSBUaGUgdGltZXIgZm9yIHRoZSBjb21tYW5kIGhhcyBqdXN0IGZpcmVkCisgKiAgICAgIEBzY3A6IGlkZW50aWZpZXMgY29tbWFuZCB0aW1pbmcgb3V0CisgKgorICogICAgICBSZXR1cm5zOgorICoKKyAqICAgICAgRUhfSEFORExFRDogICAgICAgICAgICAgSSBmaXhlZCB0aGUgZXJyb3IsIHBsZWFzZSBjb21wbGV0ZSB0aGUgY29tbWFuZAorICogICAgICBFSF9SRVNFVF9USU1FUjogICAgICAgICBJIG5lZWQgbW9yZSB0aW1lLCByZXNldCB0aGUgdGltZXIgYW5kCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luIGNvdW50aW5nIGFnYWluCisgKiAgICAgIEVIX05PVF9IQU5ETEVEICAgICAgICAgIEJlZ2luIG5vcm1hbCBlcnJvciByZWNvdmVyeQorICoKKyAqCisgKiAgICAgIExvY2tzOiBOb25lIGhlbGQKKyAqCisgKiAgICAgIENhbGxpbmcgY29udGV4dDogaW50ZXJydXB0CisgKgorICogICAgICBOb3RlczogVGhpcyBpcyB0byBnaXZlIHRoZSBMTEQgYW4gb3Bwb3J0dW5pdHkgdG8gZG8gbG9jYWwgcmVjb3ZlcnkuCisgKiAgICAgIFRoaXMgcmVjb3ZlcnkgaXMgbGltaXRlZCB0byBkZXRlcm1pbmluZyBpZiB0aGUgb3V0c3RhbmRpbmcgY29tbWFuZAorICogICAgICB3aWxsIGV2ZXIgY29tcGxldGUuICBZb3UgbWF5IG5vdCBhYm9ydCBhbmQgcmVzdGFydCB0aGUgY29tbWFuZCBmcm9tCisgKiAgICAgIHRoaXMgY2FsbGJhY2suCisgKgorICogICAgICBPcHRpb25hbGx5IGRlZmluZWQgaW46IExMRAorICoqLworICAgICBpbnQgZWhfdGltZWRfb3V0KHN0cnVjdCBzY3NpX2NtbmQgKiBzY3ApCisKKworLyoqCisgKiAgICAgIGVoX2Fib3J0X2hhbmRsZXIgLSBhYm9ydCBjb21tYW5kIGFzc29jaWF0ZWQgd2l0aCBzY3AKKyAqICAgICAgQHNjcDogaWRlbnRpZmllcyBjb21tYW5kIHRvIGJlIGFib3J0ZWQKKyAqCisgKiAgICAgIFJldHVybnMgU1VDQ0VTUyBpZiBjb21tYW5kIGFib3J0ZWQgZWxzZSBGQUlMRUQKKyAqCisgKiAgICAgIExvY2tzOiBzdHJ1Y3QgU2NzaV9Ib3N0Ojpob3N0X2xvY2sgaGVsZCAod2l0aCBpcnFzYXZlKSBvbiBlbnRyeSAKKyAqICAgICAgYW5kIGFzc3VtZWQgdG8gYmUgaGVsZCBvbiByZXR1cm4uCisgKgorICogICAgICBDYWxsaW5nIGNvbnRleHQ6IGtlcm5lbCB0aHJlYWQKKyAqCisgKiAgICAgIE5vdGVzOiBJbnZva2VkIGZyb20gc2NzaV9laCB0aHJlYWQuIE5vIG90aGVyIGNvbW1hbmRzIHdpbGwgYmUKKyAqICAgICAgcXVldWVkIG9uIGN1cnJlbnQgaG9zdCBkdXJpbmcgZWguCisgKgorICogICAgICBPcHRpb25hbGx5IGRlZmluZWQgaW46IExMRAorICoqLworICAgICBpbnQgZWhfYWJvcnRfaGFuZGxlcihzdHJ1Y3Qgc2NzaV9jbW5kICogc2NwKQorCisKKy8qKgorICogICAgICBlaF9idXNfcmVzZXRfaGFuZGxlciAtIGlzc3VlIFNDU0kgYnVzIHJlc2V0CisgKiAgICAgIEBzY3A6IFNDU0kgYnVzIHRoYXQgY29udGFpbnMgdGhpcyBkZXZpY2Ugc2hvdWxkIGJlIHJlc2V0CisgKgorICogICAgICBSZXR1cm5zIFNVQ0NFU1MgaWYgY29tbWFuZCBhYm9ydGVkIGVsc2UgRkFJTEVECisgKgorICogICAgICBMb2Nrczogc3RydWN0IFNjc2lfSG9zdDo6aG9zdF9sb2NrIGhlbGQgKHdpdGggaXJxc2F2ZSkgb24gZW50cnkgCisgKiAgICAgIGFuZCBhc3N1bWVkIHRvIGJlIGhlbGQgb24gcmV0dXJuLgorICoKKyAqICAgICAgQ2FsbGluZyBjb250ZXh0OiBrZXJuZWwgdGhyZWFkCisgKgorICogICAgICBOb3RlczogSW52b2tlZCBmcm9tIHNjc2lfZWggdGhyZWFkLiBObyBvdGhlciBjb21tYW5kcyB3aWxsIGJlCisgKiAgICAgIHF1ZXVlZCBvbiBjdXJyZW50IGhvc3QgZHVyaW5nIGVoLgorICoKKyAqICAgICAgT3B0aW9uYWxseSBkZWZpbmVkIGluOiBMTEQKKyAqKi8KKyAgICAgaW50IGVoX2J1c19yZXNldF9oYW5kbGVyKHN0cnVjdCBzY3NpX2NtbmQgKiBzY3ApCisKKworLyoqCisgKiAgICAgIGVoX2RldmljZV9yZXNldF9oYW5kbGVyIC0gaXNzdWUgU0NTSSBkZXZpY2UgcmVzZXQKKyAqICAgICAgQHNjcDogaWRlbnRpZmllcyBTQ1NJIGRldmljZSB0byBiZSByZXNldAorICoKKyAqICAgICAgUmV0dXJucyBTVUNDRVNTIGlmIGNvbW1hbmQgYWJvcnRlZCBlbHNlIEZBSUxFRAorICoKKyAqICAgICAgTG9ja3M6IHN0cnVjdCBTY3NpX0hvc3Q6Omhvc3RfbG9jayBoZWxkICh3aXRoIGlycXNhdmUpIG9uIGVudHJ5CisgKiAgICAgIGFuZCBhc3N1bWVkIHRvIGJlIGhlbGQgb24gcmV0dXJuLgorICoKKyAqICAgICAgQ2FsbGluZyBjb250ZXh0OiBrZXJuZWwgdGhyZWFkCisgKgorICogICAgICBOb3RlczogSW52b2tlZCBmcm9tIHNjc2lfZWggdGhyZWFkLiBObyBvdGhlciBjb21tYW5kcyB3aWxsIGJlCisgKiAgICAgIHF1ZXVlZCBvbiBjdXJyZW50IGhvc3QgZHVyaW5nIGVoLgorICoKKyAqICAgICAgT3B0aW9uYWxseSBkZWZpbmVkIGluOiBMTEQKKyAqKi8KKyAgICAgaW50IGVoX2RldmljZV9yZXNldF9oYW5kbGVyKHN0cnVjdCBzY3NpX2NtbmQgKiBzY3ApCisKKworLyoqCisgKiAgICAgIGVoX2hvc3RfcmVzZXRfaGFuZGxlciAtIHJlc2V0IGhvc3QgKGhvc3QgYnVzIGFkYXB0ZXIpCisgKiAgICAgIEBzY3A6IFNDU0kgaG9zdCB0aGF0IGNvbnRhaW5zIHRoaXMgZGV2aWNlIHNob3VsZCBiZSByZXNldAorICoKKyAqICAgICAgUmV0dXJucyBTVUNDRVNTIGlmIGNvbW1hbmQgYWJvcnRlZCBlbHNlIEZBSUxFRAorICoKKyAqICAgICAgTG9ja3M6IHN0cnVjdCBTY3NpX0hvc3Q6Omhvc3RfbG9jayBoZWxkICh3aXRoIGlycXNhdmUpIG9uIGVudHJ5CisgKiAgICAgIGFuZCBhc3N1bWVkIHRvIGJlIGhlbGQgb24gcmV0dXJuLgorICoKKyAqICAgICAgQ2FsbGluZyBjb250ZXh0OiBrZXJuZWwgdGhyZWFkCisgKgorICogICAgICBOb3RlczogSW52b2tlZCBmcm9tIHNjc2lfZWggdGhyZWFkLiBObyBvdGhlciBjb21tYW5kcyB3aWxsIGJlCisgKiAgICAgIHF1ZXVlZCBvbiBjdXJyZW50IGhvc3QgZHVyaW5nIGVoLiAKKyAqICAgICAgV2l0aCB0aGUgZGVmYXVsdCBlaF9zdHJhdGVneSBpbiBwbGFjZSwgaWYgbm9uZSBvZiB0aGUgX2Fib3J0XywgCisgKiAgICAgIF9kZXZpY2VfcmVzZXRfLCBfYnVzX3Jlc2V0XyBvciB0aGlzIGVoIGhhbmRsZXIgZnVuY3Rpb24gYXJlIAorICogICAgICBkZWZpbmVkIChvciB0aGV5IGFsbCByZXR1cm4gRkFJTEVEKSB0aGVuIHRoZSBkZXZpY2UgaW4gcXVlc3Rpb24gCisgKiAgICAgIHdpbGwgYmUgc2V0IG9mZmxpbmUgd2hlbmV2ZXIgZWggaXMgaW52b2tlZC4KKyAqCisgKiAgICAgIE9wdGlvbmFsbHkgZGVmaW5lZCBpbjogTExECisgKiovCisgICAgIGludCBlaF9ob3N0X3Jlc2V0X2hhbmRsZXIoc3RydWN0IHNjc2lfY21uZCAqIHNjcCkKKworCisvKioKKyAqICAgICAgZWhfc3RyYXRlZ3lfaGFuZGxlciAtIGRyaXZlciBzdXBwbGllZCBhbHRlcm5hdGUgdG8gc2NzaV91bmphbV9ob3N0KCkKKyAqICAgICAgQHNocDogaG9zdCBvbiB3aGljaCBlcnJvciBoYXMgb2NjdXJyZWQKKyAqCisgKiAgICAgIFJldHVybnMgVFJVRSBpZiBob3N0IHVuamFtbWVkLCBlbHNlIEZBTFNFLgorICoKKyAqICAgICAgTG9ja3M6IG5vbmUKKyAqCisgKiAgICAgIENhbGxpbmcgY29udGV4dDoga2VybmVsIHRocmVhZAorICoKKyAqICAgICAgTm90ZXM6IEludm9rZWQgZnJvbSBzY3NpX2VoIHRocmVhZC4gTExEIHN1cHBsaWVkIGFsdGVybmF0ZSB0byAKKyAqICAgICAgc2NzaV91bmphbV9ob3N0KCkgZm91bmQgaW4gc2NzaV9lcnJvci5jCisgKgorICogICAgICBPcHRpb25hbGx5IGRlZmluZWQgaW46IExMRAorICoqLworICAgICBpbnQgZWhfc3RyYXRlZ3lfaGFuZGxlcihzdHJ1Y3QgU2NzaV9Ib3N0ICogc2hwKQorCisKKy8qKgorICogICAgICBpbmZvIC0gc3VwcGx5IGluZm9ybWF0aW9uIGFib3V0IGdpdmVuIGhvc3Q6IGRyaXZlciBuYW1lIHBsdXMgZGF0YQorICogICAgICAgICAgICAgdG8gZGlzdGluZ3Vpc2ggZ2l2ZW4gaG9zdAorICogICAgICBAc2hwOiBob3N0IHRvIHN1cHBseSBpbmZvcm1hdGlvbiBhYm91dAorICoKKyAqICAgICAgUmV0dXJuIEFTQ0lJIG51bGwgdGVybWluYXRlZCBzdHJpbmcuIFtUaGlzIGRyaXZlciBpcyBhc3N1bWVkIHRvCisgKiAgICAgIG1hbmFnZSB0aGUgbWVtb3J5IHBvaW50ZWQgdG8gYW5kIG1haW50YWluIGl0LCB0eXBpY2FsbHkgZm9yIHRoZQorICogICAgICBsaWZldGltZSBvZiB0aGlzIGhvc3QuXQorICoKKyAqICAgICAgTG9ja3M6IG5vbmUKKyAqCisgKiAgICAgIENhbGxpbmcgY29udGV4dDogcHJvY2VzcworICoKKyAqICAgICAgTm90ZXM6IE9mdGVuIHN1cHBsaWVzIFBDSSBvciBJU0EgaW5mb3JtYXRpb24gc3VjaCBhcyBJTyBhZGRyZXNzZXMKKyAqICAgICAgYW5kIGludGVycnVwdCBudW1iZXJzLiBJZiBub3Qgc3VwcGxpZWQgc3RydWN0IFNjc2lfSG9zdDo6bmFtZSB1c2VkCisgKiAgICAgIGluc3RlYWQuIEl0IGlzIGFzc3VtZWQgdGhlIHJldHVybmVkIGluZm9ybWF0aW9uIGZpdHMgb24gb25lIGxpbmUgCisgKiAgICAgIChpLmUuIGRvZXMgbm90IGluY2x1ZGVkIGVtYmVkZGVkIG5ld2xpbmVzKS4KKyAqICAgICAgVGhlIFNDU0lfSU9DVExfUFJPQkVfSE9TVCBpb2N0bCB5aWVsZHMgdGhlIHN0cmluZyByZXR1cm5lZCBieSB0aGlzCisgKiAgICAgIGZ1bmN0aW9uIChvciBzdHJ1Y3QgU2NzaV9Ib3N0OjpuYW1lIGlmIHRoaXMgZnVuY3Rpb24gaXMgbm90CisgKiAgICAgIGF2YWlsYWJsZSkuCisgKiAgICAgIEluIGEgc2ltaWxhciBtYW5uZXIsIGluaXRfdGhpc19zY3NpX2RyaXZlcigpIG91dHB1dHMgdG8gdGhlIGNvbnNvbGUKKyAqICAgICAgZWFjaCBob3N0J3MgImluZm8iIChvciBuYW1lKSBmb3IgdGhlIGRyaXZlciBpdCBpcyByZWdpc3RlcmluZy4KKyAqICAgICAgQWxzbyBpZiBwcm9jX2luZm8oKSBpcyBub3Qgc3VwcGxpZWQsIHRoZSBvdXRwdXQgb2YgdGhpcyBmdW5jdGlvbgorICogICAgICBpcyB1c2VkIGluc3RlYWQuCisgKgorICogICAgICBPcHRpb25hbGx5IGRlZmluZWQgaW46IExMRAorICoqLworICAgIGNvbnN0IGNoYXIgKiBpbmZvKHN0cnVjdCBTY3NpX0hvc3QgKiBzaHApCisKKworLyoqCisgKiAgICAgIGlvY3RsIC0gZHJpdmVyIGNhbiByZXNwb25kIHRvIGlvY3RscworICogICAgICBAc2RwOiBkZXZpY2UgdGhhdCBpb2N0bCB3YXMgaXNzdWVkIGZvcgorICogICAgICBAY21kOiBpb2N0bCBudW1iZXIKKyAqICAgICAgQGFyZzogcG9pbnRlciB0byByZWFkIG9yIHdyaXRlIGRhdGEgZnJvbS4gU2luY2UgaXQgcG9pbnRzIHRvCisgKiAgICAgICAgICAgIHVzZXIgc3BhY2UsIHNob3VsZCB1c2UgYXBwcm9wcmlhdGUga2VybmVsIGZ1bmN0aW9ucworICogICAgICAgICAgICAoZS5nLiBjb3B5X2Zyb21fdXNlcigpICkuIEluIHRoZSBVbml4IHN0eWxlIHRoaXMgYXJndW1lbnQKKyAqICAgICAgICAgICAgY2FuIGFsc28gYmUgdmlld2VkIGFzIGFuIHVuc2lnbmVkIGxvbmcuCisgKgorICogICAgICBSZXR1cm5zIG5lZ2F0aXZlICJlcnJubyIgdmFsdWUgd2hlbiB0aGVyZSBpcyBhIHByb2JsZW0uIDAgb3IgYQorICogICAgICBwb3NpdGl2ZSB2YWx1ZSBpbmRpY2F0ZXMgc3VjY2VzcyBhbmQgaXMgcmV0dXJuZWQgdG8gdGhlIHVzZXIgc3BhY2UuCisgKgorICogICAgICBMb2Nrczogbm9uZQorICoKKyAqICAgICAgQ2FsbGluZyBjb250ZXh0OiBwcm9jZXNzCisgKgorICogICAgICBOb3RlczogVGhlIFNDU0kgc3Vic3lzdGVtIHVzZXMgYSAidHJpY2tsZSBkb3duIiBpb2N0bCBtb2RlbC4KKyAqICAgICAgVGhlIHVzZXIgaXNzdWVzIGFuIGlvY3RsKCkgYWdhaW5zdCBhbiB1cHBlciBsZXZlbCBkcml2ZXIKKyAqICAgICAgKGUuZy4gL2Rldi9zZGMpIGFuZCBpZiB0aGUgdXBwZXIgbGV2ZWwgZHJpdmVyIGRvZXNuJ3QgcmVjb2duaXplCisgKiAgICAgIHRoZSAnY21kJyB0aGVuIGl0IGlzIHBhc3NlZCB0byB0aGUgU0NTSSBtaWQgbGV2ZWwuIElmIHRoZSBTQ1NJCisgKiAgICAgIG1pZCBsZXZlbCBkb2VzIG5vdCByZWNvZ25pemUgaXQsIHRoZW4gdGhlIExMRCB0aGF0IGNvbnRyb2xzCisgKiAgICAgIHRoZSBkZXZpY2UgcmVjZWl2ZXMgdGhlIGlvY3RsLiBBY2NvcmRpbmcgdG8gcmVjZW50IFVuaXggc3RhbmRhcmRzCisgKiAgICAgIHVuc3VwcG9ydGVkIGlvY3RsKCkgJ2NtZCcgbnVtYmVycyBzaG91bGQgcmV0dXJuIC1FTk9UVFkuCisgKgorICogICAgICBPcHRpb25hbGx5IGRlZmluZWQgaW46IExMRAorICoqLworICAgIGludCBpb2N0bChzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkcCwgaW50IGNtZCwgdm9pZCAqYXJnKQorCisKKy8qKgorICogICAgICBwcm9jX2luZm8gLSBzdXBwb3J0cyAvcHJvYy9zY3NpL3tkcml2ZXJfbmFtZX0ve2hvc3Rfbm99CisgKiAgICAgIEBidWZmZXI6IGFuY2hvciBwb2ludCB0byBvdXRwdXQgdG8gKDA9PXdyaXRldG8xX3JlYWQwKSBvciBmZXRjaCBmcm9tCisgKiAgICAgICAgICAgICAgICgxPT13cml0ZXRvMV9yZWFkMCkuCisgKiAgICAgIEBzdGFydDogd2hlcmUgImludGVyZXN0aW5nIiBkYXRhIGlzIHdyaXR0ZW4gdG8uIElnbm9yZWQgd2hlbgorICogICAgICAgICAgICAgIDE9PXdyaXRldG8xX3JlYWQwLgorICogICAgICBAb2Zmc2V0OiBvZmZzZXQgd2l0aGluIGJ1ZmZlciAwPT13cml0ZXRvMV9yZWFkMCBpcyBhY3R1YWxseQorICogICAgICAgICAgICAgICBpbnRlcmVzdGVkIGluLiBJZ25vcmVkIHdoZW4gMT09d3JpdGV0bzFfcmVhZDAgLgorICogICAgICBAbGVuZ3RoOiBtYXhpbXVtIChvciBhY3R1YWwpIGV4dGVudCBvZiBidWZmZXIKKyAqICAgICAgQGhvc3Rfbm86IGhvc3QgbnVtYmVyIG9mIGludGVyZXN0IChzdHJ1Y3QgU2NzaV9Ib3N0Ojpob3N0X25vKQorICogICAgICBAd3JpdGV0bzFfcmVhZDA6IDEgLT4gZGF0YSBjb21pbmcgZnJvbSB1c2VyIHNwYWNlIHRvd2FyZHMgZHJpdmVyCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZS5nLiAiZWNobyBzb21lX3N0cmluZyA+IC9wcm9jL3Njc2kveHl6LzIiKQorICogICAgICAgICAgICAgICAgICAgICAgIDAgLT4gdXNlciB3aGF0IGRhdGEgZnJvbSB0aGlzIGRyaXZlcgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgKGUuZy4gImNhdCAvcHJvYy9zY3NpL3h5ei8yIikKKyAqCisgKiAgICAgIFJldHVybnMgbGVuZ3RoIHdoZW4gMT09d3JpdGV0bzFfcmVhZDAuIE90aGVyd2lzZSBudW1iZXIgb2YgY2hhcnMKKyAqICAgICAgb3V0cHV0IHRvIGJ1ZmZlciBwYXN0IG9mZnNldC4KKyAqCisgKiAgICAgIExvY2tzOiBub25lIGhlbGQKKyAqCisgKiAgICAgIENhbGxpbmcgY29udGV4dDogcHJvY2VzcworICoKKyAqICAgICAgTm90ZXM6IERyaXZlbiBmcm9tIHNjc2lfcHJvYy5jIHdoaWNoIGludGVyZmFjZXMgdG8gcHJvY19mcy4gcHJvY19mcworICogICAgICBzdXBwb3J0IGNhbiBub3cgYmUgY29uZmlndXJlZCBvdXQgb2YgdGhlIHNjc2kgc3Vic3lzdGVtLgorICoKKyAqICAgICAgT3B0aW9uYWxseSBkZWZpbmVkIGluOiBMTEQKKyAqKi8KKyAgICBpbnQgcHJvY19pbmZvKGNoYXIgKiBidWZmZXIsIGNoYXIgKiogc3RhcnQsIG9mZl90IG9mZnNldCwgCisgICAgICAgICAgICAgICAgICBpbnQgbGVuZ3RoLCBpbnQgaG9zdF9ubywgaW50IHdyaXRldG8xX3JlYWQwKQorCisKKy8qKgorICogICAgICBxdWV1ZWNvbW1hbmQgLSBxdWV1ZSBzY3NpIGNvbW1hbmQsIGludm9rZSAnZG9uZScgb24gY29tcGxldGlvbgorICogICAgICBAc2NwOiBwb2ludGVyIHRvIHNjc2kgY29tbWFuZCBvYmplY3QKKyAqICAgICAgQGRvbmU6IGZ1bmN0aW9uIHBvaW50ZXIgdG8gYmUgaW52b2tlZCBvbiBjb21wbGV0aW9uCisgKgorICogICAgICBSZXR1cm5zIDAgb24gc3VjY2Vzcy4KKyAqCisgKiAgICAgIElmIHRoZXJlJ3MgYSBmYWlsdXJlLCByZXR1cm4gZWl0aGVyOgorICoKKyAqICAgICAgU0NTSV9NTFFVRVVFX0RFVklDRV9CVVNZIGlmIHRoZSBkZXZpY2UgcXVldWUgaXMgZnVsbCwgb3IKKyAqICAgICAgU0NTSV9NTFFVRVVFX0hPU1RfQlVTWSBpZiB0aGUgZW50aXJlIGhvc3QgcXVldWUgaXMgZnVsbAorICoKKyAqICAgICAgT24gYm90aCBvZiB0aGVzZSByZXR1cm5zLCB0aGUgbWlkLWxheWVyIHdpbGwgcmVxdWV1ZSB0aGUgSS9PCisgKgorICogICAgICAtIGlmIHRoZSByZXR1cm4gaXMgU0NTSV9NTFFVRVVFX0RFVklDRV9CVVNZLCBvbmx5IHRoYXQgcGFydGljdWxhcgorICogICAgICBkZXZpY2Ugd2lsbCBiZSBwYXVzZWQsIGFuZCBpdCB3aWxsIGJlIHVucGF1c2VkIHdoZW4gYSBjb21tYW5kIHRvCisgKiAgICAgIHRoZSBkZXZpY2UgcmV0dXJucyAob3IgYWZ0ZXIgYSBicmllZiBkZWxheSBpZiB0aGVyZSBhcmUgbm8gbW9yZQorICogICAgICBvdXRzdGFuZGluZyBjb21tYW5kcyB0byBpdCkuICBDb21tYW5kcyB0byBvdGhlciBkZXZpY2VzIGNvbnRpbnVlCisgKiAgICAgIHRvIGJlIHByb2Nlc3NlZCBub3JtYWxseS4KKyAqCisgKiAgICAgIC0gaWYgdGhlIHJldHVybiBpcyBTQ1NJX01MUVVFVUVfSE9TVF9CVVNZLCBhbGwgSS9PIHRvIHRoZSBob3N0CisgKiAgICAgIGlzIHBhdXNlZCBhbmQgd2lsbCBiZSB1bnBhdXNlZCB3aGVuIGFueSBjb21tYW5kIHJldHVybnMgZnJvbQorICogICAgICB0aGUgaG9zdCAob3IgYWZ0ZXIgYSBicmllZiBkZWxheSBpZiB0aGVyZSBhcmUgbm8gb3V0c3RhbmRpbmcKKyAqICAgICAgY29tbWFuZHMgdG8gdGhlIGhvc3QpLgorICoKKyAqICAgICAgRm9yIGNvbXBhdGliaWxpdHkgd2l0aCBlYXJsaWVyIHZlcnNpb25zIG9mIHF1ZXVlY29tbWFuZCwgYW55CisgKiAgICAgIG90aGVyIHJldHVybiB2YWx1ZSBpcyB0cmVhdGVkIHRoZSBzYW1lIGFzCisgKiAgICAgIFNDU0lfTUxRVUVVRV9IT1NUX0JVU1kuCisgKgorICogICAgICBPdGhlciB0eXBlcyBvZiBlcnJvcnMgdGhhdCBhcmUgZGV0ZWN0ZWQgaW1tZWRpYXRlbHkgbWF5IGJlCisgKiAgICAgIGZsYWdnZWQgYnkgc2V0dGluZyBzY3AtPnJlc3VsdCB0byBhbiBhcHByb3ByaWF0ZSB2YWx1ZSwKKyAqICAgICAgaW52b2tpbmcgdGhlICdkb25lJyBjYWxsYmFjaywgYW5kIHRoZW4gcmV0dXJuaW5nIDAgZnJvbSB0aGlzCisgKiAgICAgIGZ1bmN0aW9uLiBJZiB0aGUgY29tbWFuZCBpcyBub3QgcGVyZm9ybWVkIGltbWVkaWF0ZWx5IChhbmQgdGhlCisgKiAgICAgIExMRCBpcyBzdGFydGluZyAob3Igd2lsbCBzdGFydCkgdGhlIGdpdmVuIGNvbW1hbmQpIHRoZW4gdGhpcworICogICAgICBmdW5jdGlvbiBzaG91bGQgcGxhY2UgMCBpbiBzY3AtPnJlc3VsdCBhbmQgcmV0dXJuIDAuCisgKgorICogICAgICBDb21tYW5kIG93bmVyc2hpcC4gIElmIHRoZSBkcml2ZXIgcmV0dXJucyB6ZXJvLCBpdCBvd25zIHRoZQorICogICAgICBjb21tYW5kIGFuZCBtdXN0IHRha2UgcmVzcG9uc2liaWxpdHkgZm9yIGVuc3VyaW5nIHRoZSAnZG9uZScKKyAqICAgICAgY2FsbGJhY2sgaXMgZXhlY3V0ZWQuICBOb3RlOiB0aGUgZHJpdmVyIG1heSBjYWxsIGRvbmUgYmVmb3JlCisgKiAgICAgIHJldHVybmluZyB6ZXJvLCBidXQgYWZ0ZXIgaXQgaGFzIGNhbGxlZCBkb25lLCBpdCBtYXkgbm90CisgKiAgICAgIHJldHVybiBhbnkgdmFsdWUgb3RoZXIgdGhhbiB6ZXJvLiAgSWYgdGhlIGRyaXZlciBtYWtlcyBhCisgKiAgICAgIG5vbi16ZXJvIHJldHVybiwgaXQgbXVzdCBub3QgZXhlY3V0ZSB0aGUgY29tbWFuZCdzIGRvbmUKKyAqICAgICAgY2FsbGJhY2sgYXQgYW55IHRpbWUuCisgKgorICogICAgICBMb2Nrczogc3RydWN0IFNjc2lfSG9zdDo6aG9zdF9sb2NrIGhlbGQgb24gZW50cnkgKHdpdGggImlycXNhdmUiKQorICogICAgICAgICAgICAgYW5kIGlzIGV4cGVjdGVkIHRvIGJlIGhlbGQgb24gcmV0dXJuLgorICoKKyAqICAgICAgQ2FsbGluZyBjb250ZXh0OiBpbiBpbnRlcnJ1cHQgKHNvZnQgaXJxKSBvciBwcm9jZXNzIGNvbnRleHQKKyAqCisgKiAgICAgIE5vdGVzOiBUaGlzIGZ1bmN0aW9uIHNob3VsZCBiZSByZWxhdGl2ZWx5IGZhc3QuIE5vcm1hbGx5IGl0IHdpbGwKKyAqICAgICAgbm90IHdhaXQgZm9yIElPIHRvIGNvbXBsZXRlLiBIZW5jZSB0aGUgJ2RvbmUnIGNhbGxiYWNrIGlzIGludm9rZWQgCisgKiAgICAgIChvZnRlbiBkaXJlY3RseSBmcm9tIGFuIGludGVycnVwdCBzZXJ2aWNlIHJvdXRpbmUpIHNvbWUgdGltZSBhZnRlcgorICogICAgICB0aGlzIGZ1bmN0aW9uIGhhcyByZXR1cm5lZC4gSW4gc29tZSBjYXNlcyAoZS5nLiBwc2V1ZG8gYWRhcHRlciAKKyAqICAgICAgZHJpdmVycyB0aGF0IG1hbnVmYWN0dXJlIHRoZSByZXNwb25zZSB0byBhIFNDU0kgSU5RVUlSWSkKKyAqICAgICAgdGhlICdkb25lJyBjYWxsYmFjayBtYXkgYmUgaW52b2tlZCBiZWZvcmUgdGhpcyBmdW5jdGlvbiByZXR1cm5zLgorICogICAgICBJZiB0aGUgJ2RvbmUnIGNhbGxiYWNrIGlzIG5vdCBpbnZva2VkIHdpdGhpbiBhIGNlcnRhaW4gcGVyaW9kCisgKiAgICAgIHRoZSBTQ1NJIG1pZCBsZXZlbCB3aWxsIGNvbW1lbmNlIGVycm9yIHByb2Nlc3NpbmcuCisgKiAgICAgIElmIGEgc3RhdHVzIG9mIENIRUNLIENPTkRJVElPTiBpcyBwbGFjZWQgaW4gInJlc3VsdCIgd2hlbiB0aGUKKyAqICAgICAgJ2RvbmUnIGNhbGxiYWNrIGlzIGludm9rZWQsIHRoZW4gdGhlIExMRCBkcml2ZXIgc2hvdWxkIAorICogICAgICBwZXJmb3JtIGF1dG9zZW5zZSBhbmQgZmlsbCBpbiB0aGUgc3RydWN0IHNjc2lfY21uZDo6c2Vuc2VfYnVmZmVyCisgKiAgICAgIGFycmF5LiBUaGUgc2NzaV9jbW5kOjpzZW5zZV9idWZmZXIgYXJyYXkgaXMgemVyb2VkIHByaW9yIHRvCisgKiAgICAgIHRoZSBtaWQgbGV2ZWwgcXVldWluZyBhIGNvbW1hbmQgdG8gYW4gTExELgorICoKKyAqICAgICAgRGVmaW5lZCBpbjogTExECisgKiovCisgICAgaW50IHF1ZXVlY29tbWFuZChzdHJ1Y3Qgc2NzaV9jbW5kICogc2NwLCAKKyAgICAgICAgICAgICAgICAgICAgIHZvaWQgKCpkb25lKShzdHJ1Y3Qgc2NzaV9jbW5kICopKQorCisKKy8qKgorICogICAgICByZWxlYXNlIC0gcmVsZWFzZSBhbGwgcmVzb3VyY2VzIGFzc29jaWF0ZWQgd2l0aCBnaXZlbiBob3N0CisgKiAgICAgIEBzaHA6IGhvc3QgdG8gYmUgcmVsZWFzZWQuCisgKgorICogICAgICBSZXR1cm4gdmFsdWUgaWdub3JlZCAoY291bGQgc29vbiBiZSBhIGZ1bmN0aW9uIHJldHVybmluZyB2b2lkKS4KKyAqCisgKiAgICAgIExvY2tzOiBub25lIGhlbGQKKyAqCisgKiAgICAgIENhbGxpbmcgY29udGV4dDogcHJvY2VzcworICoKKyAqICAgICAgTm90ZXM6IEludm9rZWQgZnJvbSBzY3NpX21vZHVsZS5jJ3MgZXhpdF90aGlzX3Njc2lfZHJpdmVyKCkuCisgKiAgICAgIExMRCdzIGltcGxlbWVudGF0aW9uIG9mIHRoaXMgZnVuY3Rpb24gc2hvdWxkIGNhbGwgCisgKiAgICAgIHNjc2lfdW5yZWdpc3RlcihzaHApIHByaW9yIHRvIHJldHVybmluZy4KKyAqICAgICAgT25seSBuZWVkZWQgZm9yIG9sZC1zdHlsZSBob3N0IHRlbXBsYXRlcy4KKyAqCisgKiAgICAgIERlZmluZWQgaW46IExMRCAocmVxdWlyZWQgaW4gInBhc3NpdmUgaW5pdGlhbGl6YXRpb24gbW9kZWwiLAorICogICAgICAgICAgICAgICAgICAgICAgIHNob3VsZCBub3QgYmUgZGVmaW5lZCBpbiBob3RwbHVnIG1vZGVsKQorICoqLworICAgIGludCByZWxlYXNlKHN0cnVjdCBTY3NpX0hvc3QgKiBzaHApCisKKworLyoqCisgKiAgICAgIHNsYXZlX2FsbG9jIC0gICBwcmlvciB0byBhbnkgY29tbWFuZHMgYmVpbmcgc2VudCB0byBhIG5ldyBkZXZpY2UgCisgKiAgICAgICAgICAgICAgICAgICAgICAoaS5lLiBqdXN0IHByaW9yIHRvIHNjYW4pIHRoaXMgY2FsbCBpcyBtYWRlCisgKiAgICAgIEBzZHA6IHBvaW50ZXIgdG8gbmV3IGRldmljZSAoYWJvdXQgdG8gYmUgc2Nhbm5lZCkKKyAqCisgKiAgICAgIFJldHVybnMgMCBpZiBvay4gQW55IG90aGVyIHJldHVybiBpcyBhc3N1bWVkIHRvIGJlIGFuIGVycm9yIGFuZAorICogICAgICB0aGUgZGV2aWNlIGlzIGlnbm9yZWQuCisgKgorICogICAgICBMb2Nrczogbm9uZQorICoKKyAqICAgICAgQ2FsbGluZyBjb250ZXh0OiBwcm9jZXNzCisgKgorICogICAgICBOb3RlczogQWxsb3dzIHRoZSBkcml2ZXIgdG8gYWxsb2NhdGUgYW55IHJlc291cmNlcyBmb3IgYSBkZXZpY2UKKyAqICAgICAgcHJpb3IgdG8gaXRzIGluaXRpYWwgc2Nhbi4gVGhlIGNvcnJlc3BvbmRpbmcgc2NzaSBkZXZpY2UgbWF5IG5vdAorICogICAgICBleGlzdCBidXQgdGhlIG1pZCBsZXZlbCBpcyBqdXN0IGFib3V0IHRvIHNjYW4gZm9yIGl0IChpLmUuIHNlbmQKKyAqICAgICAgYW5kIElOUVVJUlkgY29tbWFuZCBwbHVzIC4uLikuIElmIGEgZGV2aWNlIGlzIGZvdW5kIHRoZW4KKyAqICAgICAgc2xhdmVfY29uZmlndXJlKCkgd2lsbCBiZSBjYWxsZWQgd2hpbGUgaWYgYSBkZXZpY2UgaXMgbm90IGZvdW5kCisgKiAgICAgIHNsYXZlX2Rlc3Ryb3koKSBpcyBjYWxsZWQuCisgKiAgICAgIEZvciBtb3JlIGRldGFpbHMgc2VlIHRoZSBpbmNsdWRlL3Njc2kvc2NzaV9ob3N0LmggZmlsZS4KKyAqCisgKiAgICAgIE9wdGlvbmFsbHkgZGVmaW5lZCBpbjogTExECisgKiovCisgICAgaW50IHNsYXZlX2FsbG9jKHN0cnVjdCBzY3NpX2RldmljZSAqc2RwKQorCisKKy8qKgorICogICAgICBzbGF2ZV9jb25maWd1cmUgLSBkcml2ZXIgZmluZSB0dW5pbmcgZm9yIGdpdmVuIGRldmljZSBqdXN0IGFmdGVyIGl0CisgKiAgICAgICAgICAgICAgICAgICAgIGhhcyBiZWVuIGZpcnN0IHNjYW5uZWQgKGkuZS4gaXQgcmVzcG9uZGVkIHRvIGFuCisgKiAgICAgICAgICAgICAgICAgICAgIElOUVVJUlkpCisgKiAgICAgIEBzZHA6IGRldmljZSB0aGF0IGhhcyBqdXN0IGJlZW4gYXR0YWNoZWQKKyAqCisgKiAgICAgIFJldHVybnMgMCBpZiBvay4gQW55IG90aGVyIHJldHVybiBpcyBhc3N1bWVkIHRvIGJlIGFuIGVycm9yIGFuZAorICogICAgICB0aGUgZGV2aWNlIGlzIHRha2VuIG9mZmxpbmUuIFtvZmZsaW5lIGRldmljZXMgd2lsbCBfbm90XyBoYXZlCisgKiAgICAgIHNsYXZlX2Rlc3Ryb3koKSBjYWxsZWQgb24gdGhlbSBzbyBjbGVhbiB1cCByZXNvdXJjZXMuXQorICoKKyAqICAgICAgTG9ja3M6IG5vbmUKKyAqCisgKiAgICAgIENhbGxpbmcgY29udGV4dDogcHJvY2VzcworICoKKyAqICAgICAgTm90ZXM6IEFsbG93cyB0aGUgZHJpdmVyIHRvIGluc3BlY3QgdGhlIHJlc3BvbnNlIHRvIHRoZSBpbml0aWFsCisgKiAgICAgIElOUVVJUlkgZG9uZSBieSB0aGUgc2Nhbm5pbmcgY29kZSBhbmQgdGFrZSBhcHByb3ByaWF0ZSBhY3Rpb24uCisgKiAgICAgIEZvciBtb3JlIGRldGFpbHMgc2VlIHRoZSBpbmNsdWRlL3Njc2kvc2NzaV9ob3N0LmggZmlsZS4KKyAqCisgKiAgICAgIE9wdGlvbmFsbHkgZGVmaW5lZCBpbjogTExECisgKiovCisgICAgaW50IHNsYXZlX2NvbmZpZ3VyZShzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkcCkKKworCisvKioKKyAqICAgICAgc2xhdmVfZGVzdHJveSAtIGdpdmVuIGRldmljZSBpcyBhYm91dCB0byBiZSBzaHV0IGRvd24uIEFsbAorICogICAgICAgICAgICAgICAgICAgICAgYWN0aXZpdHkgaGFzIGNlYXNlZCBvbiB0aGlzIGRldmljZS4KKyAqICAgICAgQHNkcDogZGV2aWNlIHRoYXQgaXMgYWJvdXQgdG8gYmUgc2h1dCBkb3duCisgKgorICogICAgICBSZXR1cm5zIG5vdGhpbmcKKyAqCisgKiAgICAgIExvY2tzOiBub25lCisgKgorICogICAgICBDYWxsaW5nIGNvbnRleHQ6IHByb2Nlc3MKKyAqCisgKiAgICAgIE5vdGVzOiBNaWQgbGV2ZWwgc3RydWN0dXJlcyBmb3IgZ2l2ZW4gZGV2aWNlIGFyZSBzdGlsbCBpbiBwbGFjZQorICogICAgICBidXQgYXJlIGFib3V0IHRvIGJlIHRvcm4gZG93bi4gQW55IHBlciBkZXZpY2UgcmVzb3VyY2VzIGFsbG9jYXRlZAorICogICAgICBieSB0aGlzIGRyaXZlciBmb3IgZ2l2ZW4gZGV2aWNlIHNob3VsZCBiZSBmcmVlZCBub3cuIE5vIGZ1cnRoZXIKKyAqICAgICAgY29tbWFuZHMgd2lsbCBiZSBzZW50IGZvciB0aGlzIHNkcCBpbnN0YW5jZS4gW0hvd2V2ZXIgdGhlIGRldmljZQorICogICAgICBjb3VsZCBiZSByZS1hdHRhY2hlZCBpbiB0aGUgZnV0dXJlIGluIHdoaWNoIGNhc2UgYSBuZXcgaW5zdGFuY2UKKyAqICAgICAgb2Ygc3RydWN0IHNjc2lfZGV2aWNlIHdvdWxkIGJlIHN1cHBsaWVkIGJ5IGZ1dHVyZSBzbGF2ZV9hbGxvYygpCisgKiAgICAgIGFuZCBzbGF2ZV9jb25maWd1cmUoKSBjYWxscy5dCisgKgorICogICAgICBPcHRpb25hbGx5IGRlZmluZWQgaW46IExMRAorICoqLworICAgIHZvaWQgc2xhdmVfZGVzdHJveShzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkcCkKKworCisKK0RhdGEgU3RydWN0dXJlcworPT09PT09PT09PT09PT09CitzdHJ1Y3Qgc2NzaV9ob3N0X3RlbXBsYXRlCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitUaGVyZSBpcyBvbmUgInN0cnVjdCBzY3NpX2hvc3RfdGVtcGxhdGUiIGluc3RhbmNlIHBlciBMTEQgKioqLiBJdCBpcwordHlwaWNhbGx5IGluaXRpYWxpemVkIGFzIGEgZmlsZSBzY29wZSBzdGF0aWMgaW4gYSBkcml2ZXIncyBoZWFkZXIgZmlsZS4gVGhhdAord2F5IG1lbWJlcnMgdGhhdCBhcmUgbm90IGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgd2lsbCBiZSBzZXQgdG8gMCBvciBOVUxMLgorTWVtYmVyIG9mIGludGVyZXN0OgorICAgIG5hbWUgICAgICAgICAtIG5hbWUgb2YgZHJpdmVyIChtYXkgY29udGFpbiBzcGFjZXMsIHBsZWFzZSBsaW1pdCB0bworICAgICAgICAgICAgICAgICAgIGxlc3MgdGhhbiA4MCBjaGFyYWN0ZXJzKQorICAgIHByb2NfbmFtZSAgICAtIG5hbWUgdXNlZCBpbiAiL3Byb2Mvc2NzaS88cHJvY19uYW1lPi88aG9zdF9ubz4iIGFuZAorICAgICAgICAgICAgICAgICAgIGJ5IHN5c2ZzIGluIG9uZSBvZiBpdHMgImRyaXZlcnMiIGRpcmVjdG9yaWVzLiBIZW5jZQorICAgICAgICAgICAgICAgICAgICJwcm9jX25hbWUiIHNob3VsZCBvbmx5IGNvbnRhaW4gY2hhcmFjdGVycyBhY2NlcHRhYmxlCisgICAgICAgICAgICAgICAgICAgdG8gYSBVbml4IGZpbGUgbmFtZS4KKyAgICgqcXVldWVjb21tYW5kKSgpIC0gcHJpbWFyeSBjYWxsYmFjayB0aGF0IHRoZSBtaWQgbGV2ZWwgdXNlcyB0byBpbmplY3QKKyAgICAgICAgICAgICAgICAgICBTQ1NJIGNvbW1hbmRzIGludG8gYW4gTExELgorVGhlIHN0cnVjdHVyZSBpcyBkZWZpbmVkIGFuZCBjb21tZW50ZWQgaW4gaW5jbHVkZS9zY3NpL3Njc2lfaG9zdC5oCisKKyoqKiBJbiBleHRyZW1lIHNpdHVhdGlvbnMgYSBzaW5nbGUgZHJpdmVyIG1heSBoYXZlIHNldmVyYWwgaW5zdGFuY2VzCisgICAgaWYgaXQgY29udHJvbHMgc2V2ZXJhbCBkaWZmZXJlbnQgY2xhc3NlcyBvZiBoYXJkd2FyZSAoZS5nLiBhbiBMTEQKKyAgICB0aGF0IGhhbmRsZXMgYm90aCBJU0EgYW5kIFBDSSBjYXJkcyBhbmQgaGFzIGEgc2VwYXJhdGUgaW5zdGFuY2Ugb2YKKyAgICBzdHJ1Y3Qgc2NzaV9ob3N0X3RlbXBsYXRlIGZvciBlYWNoIGNsYXNzKS4KKworc3RydWN0IFNjc2lfSG9zdAorLS0tLS0tLS0tLS0tLS0tLQorVGhlcmUgaXMgb25lIHN0cnVjdCBTY3NpX0hvc3QgaW5zdGFuY2UgcGVyIGhvc3QgKEhCQSkgdGhhdCBhbiBMTEQKK2NvbnRyb2xzLiBUaGUgc3RydWN0IFNjc2lfSG9zdCBzdHJ1Y3R1cmUgaGFzIG1hbnkgbWVtYmVycyBpbiBjb21tb24KK3dpdGggInN0cnVjdCBzY3NpX2hvc3RfdGVtcGxhdGUiLiBXaGVuIGEgbmV3IHN0cnVjdCBTY3NpX0hvc3QgaW5zdGFuY2UKK2lzIGNyZWF0ZWQgKGluIHNjc2lfaG9zdF9hbGxvYygpIGluIGhvc3RzLmMpIHRob3NlIGNvbW1vbiBtZW1iZXJzIGFyZQoraW5pdGlhbGl6ZWQgZnJvbSB0aGUgZHJpdmVyJ3Mgc3RydWN0IHNjc2lfaG9zdF90ZW1wbGF0ZSBpbnN0YW5jZS4gTWVtYmVycworb2YgaW50ZXJlc3Q6CisgICAgaG9zdF9ubyAgICAgIC0gc3lzdGVtIHdpZGUgdW5pcXVlIG51bWJlciB0aGF0IGlzIHVzZWQgZm9yIGlkZW50aWZ5aW5nCisgICAgICAgICAgICAgICAgICAgdGhpcyBob3N0LiBJc3N1ZWQgaW4gYXNjZW5kaW5nIG9yZGVyIGZyb20gMC4KKyAgICBjYW5fcXVldWUgICAgLSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAwOyBkbyBub3Qgc2VuZCBtb3JlIHRoYW4gY2FuX3F1ZXVlCisgICAgICAgICAgICAgICAgICAgY29tbWFuZHMgdG8gdGhlIGFkYXB0ZXIuCisgICAgdGhpc19pZCAgICAgIC0gc2NzaSBpZCBvZiBob3N0IChzY3NpIGluaXRpYXRvcikgb3IgLTEgaWYgbm90IGtub3duCisgICAgc2dfdGFibGVzaXplIC0gbWF4aW11bSBzY2F0dGVyIGdhdGhlciBlbGVtZW50cyBhbGxvd2VkIGJ5IGhvc3QuCisgICAgICAgICAgICAgICAgICAgMCBpbXBsaWVzIHNjYXR0ZXIgZ2F0aGVyIG5vdCBzdXBwb3J0ZWQgYnkgaG9zdAorICAgIG1heF9zZWN0b3JzICAtIG1heGltdW0gbnVtYmVyIG9mIHNlY3RvcnMgKHVzdWFsbHkgNTEyIGJ5dGVzKSBhbGxvd2VkCisgICAgICAgICAgICAgICAgICAgaW4gYSBzaW5nbGUgU0NTSSBjb21tYW5kLiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiAwIGxlYWRzCisgICAgICAgICAgICAgICAgICAgdG8gYSBzZXR0aW5nIG9mIFNDU0lfREVGQVVMVF9NQVhfU0VDVE9SUyAoZGVmaW5lZCBpbgorICAgICAgICAgICAgICAgICAgIHNjc2lfaG9zdC5oKSB3aGljaCBpcyBjdXJyZW50bHkgc2V0IHRvIDEwMjQuIFNvIGZvciBhCisgICAgICAgICAgICAgICAgICAgZGlzayB0aGUgbWF4aW11bSB0cmFuc2ZlciBzaXplIGlzIDUxMiBLQiB3aGVuIG1heF9zZWN0b3JzCisgICAgICAgICAgICAgICAgICAgaXMgbm90IGRlZmluZWQuIE5vdGUgdGhhdCB0aGlzIHNpemUgbWF5IG5vdCBiZSBzdWZmaWNpZW50CisgICAgICAgICAgICAgICAgICAgZm9yIGRpc2sgZmlybXdhcmUgdXBsb2Fkcy4KKyAgICBjbWRfcGVyX2x1biAgLSBtYXhpbXVtIG51bWJlciBvZiBjb21tYW5kcyB0aGF0IGNhbiBiZSBxdWV1ZWQgb24gZGV2aWNlcworICAgICAgICAgICAgICAgICAgIGNvbnRyb2xsZWQgYnkgdGhlIGhvc3QuIE92ZXJyaWRkZW4gYnkgTExEIGNhbGxzIHRvCisgICAgICAgICAgICAgICAgICAgc2NzaV9hZGp1c3RfcXVldWVfZGVwdGgoKS4KKyAgICB1bmNoZWNrZWRfaXNhX2RtYSAtIDE9Pm9ubHkgdXNlIGJvdHRvbSAxNiBNQiBvZiByYW0gKElTQSBETUEgYWRkcmVzc2luZworICAgICAgICAgICAgICAgICAgIHJlc3RyaWN0aW9uKSwgMD0+Y2FuIHVzZSBmdWxsIDMyIGJpdCAob3IgYmV0dGVyKSBETUEKKyAgICAgICAgICAgICAgICAgICBhZGRyZXNzIHNwYWNlCisgICAgdXNlX2NsdXN0ZXJpbmcgLSAxPT5TQ1NJIGNvbW1hbmRzIGluIG1pZCBsZXZlbCdzIHF1ZXVlIGNhbiBiZSBtZXJnZWQsCisgICAgICAgICAgICAgICAgICAgICAwPT5kaXNhbGxvdyBTQ1NJIGNvbW1hbmQgbWVyZ2luZworICAgIGhvc3R0ICAgICAgICAtIHBvaW50ZXIgdG8gZHJpdmVyJ3Mgc3RydWN0IHNjc2lfaG9zdF90ZW1wbGF0ZSBmcm9tIHdoaWNoCisgICAgICAgICAgICAgICAgICAgdGhpcyBzdHJ1Y3QgU2NzaV9Ib3N0IGluc3RhbmNlIHdhcyBzcGF3bmVkCisgICAgaG9zdHQtPnByb2NfbmFtZSAgLSBuYW1lIG9mIExMRC4gVGhpcyBpcyB0aGUgZHJpdmVyIG5hbWUgdGhhdCBzeXNmcyB1c2VzCisgICAgdHJhbnNwb3J0dCAgIC0gcG9pbnRlciB0byBkcml2ZXIncyBzdHJ1Y3Qgc2NzaV90cmFuc3BvcnRfdGVtcGxhdGUgaW5zdGFuY2UKKyAgICAgICAgICAgICAgICAgICAoaWYgYW55KS4gRkMgYW5kIFNQSSB0cmFuc3BvcnRzIGN1cnJlbnRseSBzdXBwb3J0ZWQuCisgICAgc2hfbGlzdCAgICAgIC0gYSBkb3VibGUgbGlua2VkIGxpc3Qgb2YgcG9pbnRlcnMgdG8gYWxsIHN0cnVjdCBTY3NpX0hvc3QKKyAgICAgICAgICAgICAgICAgICBpbnN0YW5jZXMgKGN1cnJlbnRseSBvcmRlcmVkIGJ5IGFzY2VuZGluZyBob3N0X25vKQorICAgIG15X2RldmljZXMgICAtIGEgZG91YmxlIGxpbmtlZCBsaXN0IG9mIHBvaW50ZXJzIHRvIHN0cnVjdCBzY3NpX2RldmljZSAKKyAgICAgICAgICAgICAgICAgICBpbnN0YW5jZXMgdGhhdCBiZWxvbmcgdG8gdGhpcyBob3N0LgorICAgIGhvc3RkYXRhWzBdICAtIGFyZWEgcmVzZXJ2ZWQgZm9yIExMRCBhdCBlbmQgb2Ygc3RydWN0IFNjc2lfSG9zdC4gU2l6ZQorICAgICAgICAgICAgICAgICAgIGlzIHNldCBieSB0aGUgc2Vjb25kIGFyZ3VtZW50IChuYW1lZCAneHRyX2J5dGVzJykgdG8KKyAgICAgICAgICAgICAgICAgICBzY3NpX2hvc3RfYWxsb2MoKSBvciBzY3NpX3JlZ2lzdGVyKCkuCisKK1RoZSBzY3NpX2hvc3Qgc3RydWN0dXJlIGlzIGRlZmluZWQgaW4gaW5jbHVkZS9zY3NpL3Njc2lfaG9zdC5oCisKK3N0cnVjdCBzY3NpX2RldmljZQorLS0tLS0tLS0tLS0tLS0tLS0tCitHZW5lcmFsbHksIHRoZXJlIGlzIG9uZSBpbnN0YW5jZSBvZiB0aGlzIHN0cnVjdHVyZSBmb3IgZWFjaCBTQ1NJIGxvZ2ljYWwgdW5pdAorb24gYSBob3N0LiBTY3NpIGRldmljZXMgY29ubmVjdGVkIHRvIGEgaG9zdCBhcmUgdW5pcXVlbHkgaWRlbnRpZmllZCBieSBhCitjaGFubmVsIG51bWJlciwgdGFyZ2V0IGlkIGFuZCBsb2dpY2FsIHVuaXQgbnVtYmVyIChsdW4pLgorVGhlIHN0cnVjdHVyZSBpcyBkZWZpbmVkIGluIGluY2x1ZGUvc2NzaS9zY3NpX2RldmljZS5oCisKK3N0cnVjdCBzY3NpX2NtbmQKKy0tLS0tLS0tLS0tLS0tLS0KK0luc3RhbmNlcyBvZiB0aGlzIHN0cnVjdHVyZSBjb252ZXkgU0NTSSBjb21tYW5kcyB0byB0aGUgTExEIGFuZCByZXNwb25zZXMKK2JhY2sgdG8gdGhlIG1pZCBsZXZlbC4gVGhlIFNDU0kgbWlkIGxldmVsIHdpbGwgZW5zdXJlIHRoYXQgbm8gbW9yZSBTQ1NJCitjb21tYW5kcyBiZWNvbWUgcXVldWVkIGFnYWluc3QgdGhlIExMRCB0aGFuIGFyZSBpbmRpY2F0ZWQgYnkKK3Njc2lfYWRqdXN0X3F1ZXVlX2RlcHRoKCkgKG9yIHN0cnVjdCBTY3NpX0hvc3Q6OmNtZF9wZXJfbHVuKS4gVGhlcmUgd2lsbAorYmUgYXQgbGVhc3Qgb25lIGluc3RhbmNlIG9mIHN0cnVjdCBzY3NpX2NtbmQgYXZhaWxhYmxlIGZvciBlYWNoIFNDU0kgZGV2aWNlLgorTWVtYmVycyBvZiBpbnRlcmVzdDoKKyAgICBjbW5kICAgICAgICAgLSBhcnJheSBjb250YWluaW5nIFNDU0kgY29tbWFuZAorICAgIGNtbmRfbGVuICAgICAtIGxlbmd0aCAoaW4gYnl0ZXMpIG9mIFNDU0kgY29tbWFuZAorICAgIHNjX2RhdGFfZGlyZWN0aW9uIC0gZGlyZWN0aW9uIG9mIGRhdGEgdHJhbnNmZXIgaW4gZGF0YSBwaGFzZS4gU2VlCisgICAgICAgICAgICAgICAgImVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIiBpbiBpbmNsdWRlL2xpbnV4L2RtYS1tYXBwaW5nLmgKKyAgICByZXF1ZXN0X2J1ZmZsZW4gLSBudW1iZXIgb2YgZGF0YSBieXRlcyB0byB0cmFuc2ZlciAoMCBpZiBubyBkYXRhIHBoYXNlKQorICAgIHVzZV9zZyAgICAgICAtID09MCAtPiBubyBzY2F0dGVyIGdhdGhlciBsaXN0LCBoZW5jZSB0cmFuc2ZlciBkYXRhCisgICAgICAgICAgICAgICAgICAgICAgICAgIHRvL2Zyb20gcmVxdWVzdF9idWZmZXIKKyAgICAgICAgICAgICAgICAgLSA+MCAtPiAgc2NhdHRlciBnYXRoZXIgbGlzdCAoYWN0dWFsbHkgYW4gYXJyYXkpIGluCisgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3RfYnVmZmVyIHdpdGggdXNlX3NnIGVsZW1lbnRzCisgICAgcmVxdWVzdF9idWZmZXIgLSBlaXRoZXIgY29udGFpbnMgZGF0YSBidWZmZXIgb3Igc2NhdHRlciBnYXRoZXIgbGlzdAorICAgICAgICAgICAgICAgICAgICAgZGVwZW5kaW5nIG9uIHRoZSBzZXR0aW5nIG9mIHVzZV9zZy4gU2NhdHRlciBnYXRoZXIKKyAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnRzIGFyZSBkZWZpbmVkIGJ5ICdzdHJ1Y3Qgc2NhdHRlcmxpc3QnIGZvdW5kCisgICAgICAgICAgICAgICAgICAgICBpbiBpbmNsdWRlL2FzbS9zY2F0dGVybGlzdC5oIC4KKyAgICBkb25lICAgICAgICAgLSBmdW5jdGlvbiBwb2ludGVyIHRoYXQgc2hvdWxkIGJlIGludm9rZWQgYnkgTExEIHdoZW4gdGhlCisgICAgICAgICAgICAgICAgICAgU0NTSSBjb21tYW5kIGlzIGNvbXBsZXRlZCAoc3VjY2Vzc2Z1bGx5IG9yIG90aGVyd2lzZSkuCisgICAgICAgICAgICAgICAgICAgU2hvdWxkIG9ubHkgYmUgY2FsbGVkIGJ5IGFuIExMRCBpZiB0aGUgTExEIGhhcyBhY2NlcHRlZAorICAgICAgICAgICAgICAgICAgIHRoZSBjb21tYW5kIChpLmUuIHF1ZXVlY29tbWFuZCgpIHJldHVybmVkIG9yIHdpbGwgcmV0dXJuCisgICAgICAgICAgICAgICAgICAgMCkuIFRoZSBMTEQgbWF5IGludm9rZSAnZG9uZScgIHByaW9yIHRvIHF1ZXVlY29tbWFuZCgpCisgICAgICAgICAgICAgICAgICAgZmluaXNoaW5nLgorICAgIHJlc3VsdCAgICAgICAtIHNob3VsZCBiZSBzZXQgYnkgTExEIHByaW9yIHRvIGNhbGxpbmcgJ2RvbmUnLiBBIHZhbHVlCisgICAgICAgICAgICAgICAgICAgb2YgMCBpbXBsaWVzIGEgc3VjY2Vzc2Z1bGx5IGNvbXBsZXRlZCBjb21tYW5kIChhbmQgYWxsCisgICAgICAgICAgICAgICAgICAgZGF0YSAoaWYgYW55KSBoYXMgYmVlbiB0cmFuc2ZlcnJlZCB0byBvciBmcm9tIHRoZSBTQ1NJCisgICAgICAgICAgICAgICAgICAgdGFyZ2V0IGRldmljZSkuICdyZXN1bHQnIGlzIGEgMzIgYml0IHVuc2lnbmVkIGludGVnZXIgdGhhdAorICAgICAgICAgICAgICAgICAgIGNhbiBiZSB2aWV3ZWQgYXMgNCByZWxhdGVkIGJ5dGVzLiBUaGUgU0NTSSBzdGF0dXMgdmFsdWUgaXMKKyAgICAgICAgICAgICAgICAgICBpbiB0aGUgTFNCLiBTZWUgaW5jbHVkZS9zY3NpL3Njc2kuaCBzdGF0dXNfYnl0ZSgpLAorICAgICAgICAgICAgICAgICAgIG1zZ19ieXRlKCksIGhvc3RfYnl0ZSgpIGFuZCBkcml2ZXJfYnl0ZSgpIG1hY3JvcyBhbmQKKyAgICAgICAgICAgICAgICAgICByZWxhdGVkIGNvbnN0YW50cy4KKyAgICBzZW5zZV9idWZmZXIgLSBhbiBhcnJheSAobWF4aW11bSBzaXplOiBTQ1NJX1NFTlNFX0JVRkZFUlNJWkUgYnl0ZXMpIHRoYXQKKyAgICAgICAgICAgICAgICAgICBzaG91bGQgYmUgd3JpdHRlbiB3aGVuIHRoZSBTQ1NJIHN0YXR1cyAoTFNCIG9mICdyZXN1bHQnKQorICAgICAgICAgICAgICAgICAgIGlzIHNldCB0byBDSEVDS19DT05ESVRJT04gKDIpLiBXaGVuIENIRUNLX0NPTkRJVElPTiBpcworICAgICAgICAgICAgICAgICAgIHNldCwgaWYgdGhlIHRvcCBuaWJibGUgb2Ygc2Vuc2VfYnVmZmVyWzBdIGhhcyB0aGUgdmFsdWUgNworICAgICAgICAgICAgICAgICAgIHRoZW4gdGhlIG1pZCBsZXZlbCB3aWxsIGFzc3VtZSB0aGUgc2Vuc2VfYnVmZmVyIGFycmF5CisgICAgICAgICAgICAgICAgICAgY29udGFpbnMgYSB2YWxpZCBTQ1NJIHNlbnNlIGJ1ZmZlcjsgb3RoZXJ3aXNlIHRoZSBtaWQKKyAgICAgICAgICAgICAgICAgICBsZXZlbCB3aWxsIGlzc3VlIGEgUkVRVUVTVF9TRU5TRSBTQ1NJIGNvbW1hbmQgdG8KKyAgICAgICAgICAgICAgICAgICByZXRyaWV2ZSB0aGUgc2Vuc2UgYnVmZmVyLiBUaGUgbGF0dGVyIHN0cmF0ZWd5IGlzIGVycm9yCisgICAgICAgICAgICAgICAgICAgcHJvbmUgaW4gdGhlIHByZXNlbmNlIG9mIGNvbW1hbmQgcXVldWluZyBzbyB0aGUgTExEIHNob3VsZAorICAgICAgICAgICAgICAgICAgIGFsd2F5cyAiYXV0by1zZW5zZSIuCisgICAgZGV2aWNlICAgICAgIC0gcG9pbnRlciB0byBzY3NpX2RldmljZSBvYmplY3QgdGhhdCB0aGlzIGNvbW1hbmQgaXMKKyAgICAgICAgICAgICAgICAgICBhc3NvY2lhdGVkIHdpdGguCisgICAgcmVzaWQgICAgICAgIC0gYW4gTExEIHNob3VsZCBzZXQgdGhpcyBzaWduZWQgaW50ZWdlciB0byB0aGUgcmVxdWVzdGVkCisgICAgICAgICAgICAgICAgICAgdHJhbnNmZXIgbGVuZ3RoIChpLmUuICdyZXF1ZXN0X2J1ZmZsZW4nKSBsZXNzIHRoZSBudW1iZXIKKyAgICAgICAgICAgICAgICAgICBvZiBieXRlcyB0aGF0IGFyZSBhY3R1YWxseSB0cmFuc2ZlcnJlZC4gJ3Jlc2lkJyBpcworICAgICAgICAgICAgICAgICAgIHByZXNldCB0byAwIHNvIGFuIExMRCBjYW4gaWdub3JlIGl0IGlmIGl0IGNhbm5vdCBkZXRlY3QKKyAgICAgICAgICAgICAgICAgICB1bmRlcnJ1bnMgKG92ZXJydW5zIHNob3VsZCBiZSByYXJlKS4gSWYgcG9zc2libGUgYW4gTExECisgICAgICAgICAgICAgICAgICAgc2hvdWxkIHNldCAncmVzaWQnIHByaW9yIHRvIGludm9raW5nICdkb25lJy4gVGhlIG1vc3QKKyAgICAgICAgICAgICAgICAgICBpbnRlcmVzdGluZyBjYXNlIGlzIGRhdGEgdHJhbnNmZXJzIGZyb20gYSBTQ1NJIHRhcmdldAorICAgICAgICAgICAgICAgICAgIGRldmljZSBkZXZpY2UgKGkuZS4gUkVBRHMpIHRoYXQgdW5kZXJydW4uIAorICAgIHVuZGVyZmxvdyAgICAtIExMRCBzaG91bGQgcGxhY2UgKERJRF9FUlJPUiA8PCAxNikgaW4gJ3Jlc3VsdCcgaWYKKyAgICAgICAgICAgICAgICAgICBhY3R1YWwgbnVtYmVyIG9mIGJ5dGVzIHRyYW5zZmVycmVkIGlzIGxlc3MgdGhhbiB0aGlzCisgICAgICAgICAgICAgICAgICAgZmlndXJlLiBOb3QgbWFueSBMTERzIGltcGxlbWVudCB0aGlzIGNoZWNrIGFuZCBzb21lIHRoYXQKKyAgICAgICAgICAgICAgICAgICBkbyBqdXN0IG91dHB1dCBhbiBlcnJvciBtZXNzYWdlIHRvIHRoZSBsb2cgcmF0aGVyIHRoYW4KKyAgICAgICAgICAgICAgICAgICByZXBvcnQgYSBESURfRVJST1IuIEJldHRlciBmb3IgYW4gTExEIHRvIGltcGxlbWVudAorICAgICAgICAgICAgICAgICAgICdyZXNpZCcuCisKK1RoZSBzY3NpX2NtbmQgc3RydWN0dXJlIGlzIGRlZmluZWQgaW4gaW5jbHVkZS9zY3NpL3Njc2lfY21uZC5oCisKKworTG9ja3MKKz09PT09CitFYWNoIHN0cnVjdCBTY3NpX0hvc3QgaW5zdGFuY2UgaGFzIGEgc3Bpbl9sb2NrIGNhbGxlZCBzdHJ1Y3QgCitTY3NpX0hvc3Q6OmRlZmF1bHRfbG9jayB3aGljaCBpcyBpbml0aWFsaXplZCBpbiBzY3NpX2hvc3RfYWxsb2MoKSBbZm91bmQgaW4gCitob3N0cy5jXS4gV2l0aGluIHRoZSBzYW1lIGZ1bmN0aW9uIHRoZSBzdHJ1Y3QgU2NzaV9Ib3N0Ojpob3N0X2xvY2sgcG9pbnRlcgoraXMgaW5pdGlhbGl6ZWQgdG8gcG9pbnQgYXQgZGVmYXVsdF9sb2NrIHdpdGggdGhlIHNjc2lfYXNzaWduX2xvY2soKSBmdW5jdGlvbi4KK1RoZXJlYWZ0ZXIgbG9jayBhbmQgdW5sb2NrIG9wZXJhdGlvbnMgcGVyZm9ybWVkIGJ5IHRoZSBtaWQgbGV2ZWwgdXNlIHRoZQorc3RydWN0IFNjc2lfSG9zdDo6aG9zdF9sb2NrIHBvaW50ZXIuCisKK0xMRHMgY2FuIG92ZXJyaWRlIHRoZSB1c2Ugb2Ygc3RydWN0IFNjc2lfSG9zdDo6ZGVmYXVsdF9sb2NrIGJ5Cit1c2luZyBzY3NpX2Fzc2lnbl9sb2NrKCkuIFRoZSBlYXJsaWVzdCBvcHBvcnR1bml0eSB0byBkbyB0aGlzIHdvdWxkCitiZSBpbiB0aGUgZGV0ZWN0KCkgZnVuY3Rpb24gYWZ0ZXIgaXQgaGFzIGludm9rZWQgc2NzaV9yZWdpc3RlcigpLiBJdAorY291bGQgYmUgcmVwbGFjZWQgYnkgYSBjb2Fyc2VyIGdyYWluIGxvY2sgKGUuZy4gcGVyIGRyaXZlcikgb3IgYQorbG9jayBvZiBlcXVhbCBncmFudWxhcml0eSAoaS5lLiBwZXIgaG9zdCkuIFVzaW5nIGZpbmVyIGdyYWluIGxvY2tzIAorKGUuZy4gcGVyIFNDU0kgZGV2aWNlKSBtYXkgYmUgcG9zc2libGUgYnkganVnZ2xpbmcgbG9ja3MgaW4KK3F1ZXVlY29tbWFuZCgpLgorCitBdXRvc2Vuc2UKKz09PT09PT09PQorQXV0b3NlbnNlIChvciBhdXRvLXNlbnNlKSBpcyBkZWZpbmVkIGluIHRoZSBTQU0tMiBkb2N1bWVudCBhcyAidGhlCithdXRvbWF0aWMgcmV0dXJuIG9mIHNlbnNlIGRhdGEgdG8gdGhlIGFwcGxpY2F0aW9uIGNsaWVudCBjb2luY2lkZW50Cit3aXRoIHRoZSBjb21wbGV0aW9uIG9mIGEgU0NTSSBjb21tYW5kIiB3aGVuIGEgc3RhdHVzIG9mIENIRUNLIENPTkRJVElPTgorb2NjdXJzLiBMTERzIHNob3VsZCBwZXJmb3JtIGF1dG9zZW5zZS4gVGhpcyBzaG91bGQgYmUgZG9uZSB3aGVuIHRoZSBMTEQKK2RldGVjdHMgYSBDSEVDSyBDT05ESVRJT04gc3RhdHVzIGJ5IGVpdGhlcjogCisgICAgYSkgaW5zdHJ1Y3RpbmcgdGhlIFNDU0kgcHJvdG9jb2wgKGUuZy4gU0NTSSBQYXJhbGxlbCBJbnRlcmZhY2UgKFNQSSkpCisgICAgICAgdG8gcGVyZm9ybSBhbiBleHRyYSBkYXRhIGluIHBoYXNlIG9uIHN1Y2ggcmVzcG9uc2VzCisgICAgYikgb3IsIHRoZSBMTEQgaXNzdWluZyBhIFJFUVVFU1QgU0VOU0UgY29tbWFuZCBpdHNlbGYKKworRWl0aGVyIHdheSwgd2hlbiBhIHN0YXR1cyBvZiBDSEVDSyBDT05ESVRJT04gaXMgZGV0ZWN0ZWQsIHRoZSBtaWQgbGV2ZWwKK2RlY2lkZXMgd2hldGhlciB0aGUgTExEIGhhcyBwZXJmb3JtZWQgYXV0b3NlbnNlIGJ5IGNoZWNraW5nIHN0cnVjdCAKK3Njc2lfY21uZDo6c2Vuc2VfYnVmZmVyWzBdIC4gSWYgdGhpcyBieXRlIGhhcyBhbiB1cHBlciBuaWJibGUgb2YgNyAob3IgMHhmKQordGhlbiBhdXRvc2Vuc2UgaXMgYXNzdW1lZCB0byBoYXZlIHRha2VuIHBsYWNlLiBJZiBpdCBoYXMgYW5vdGhlciB2YWx1ZSAoYW5kCit0aGlzIGJ5dGUgaXMgaW5pdGlhbGl6ZWQgdG8gMCBiZWZvcmUgZWFjaCBjb21tYW5kKSB0aGVuIHRoZSBtaWQgbGV2ZWwgd2lsbAoraXNzdWUgYSBSRVFVRVNUIFNFTlNFIGNvbW1hbmQuCisKK0luIHRoZSBwcmVzZW5jZSBvZiBxdWV1ZWQgY29tbWFuZHMgdGhlICJuZXh1cyIgdGhhdCBtYWludGFpbnMgc2Vuc2UKK2J1ZmZlciBkYXRhIGZyb20gdGhlIGNvbW1hbmQgdGhhdCBmYWlsZWQgdW50aWwgYSBmb2xsb3dpbmcgUkVRVUVTVCBTRU5TRQorbWF5IGdldCBvdXQgb2Ygc3luY2hyb25pemF0aW9uLiBUaGlzIGlzIHdoeSBpdCBpcyBiZXN0IGZvciB0aGUgTExECit0byBwZXJmb3JtIGF1dG9zZW5zZS4KKworCitDaGFuZ2VzIHNpbmNlIGxrIDIuNCBzZXJpZXMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PQoraW9fcmVxdWVzdF9sb2NrIGhhcyBiZWVuIHJlcGxhY2VkIGJ5IHNldmVyYWwgZmluZXIgZ3JhaW5lZCBsb2Nrcy4gVGhlIGxvY2sgCityZWxldmFudCB0byBMTERzIGlzIHN0cnVjdCBTY3NpX0hvc3Q6Omhvc3RfbG9jayBhbmQgdGhlcmUgaXMKK29uZSBwZXIgU0NTSSBob3N0LgorCitUaGUgb2xkZXIgZXJyb3IgaGFuZGxpbmcgbWVjaGFuaXNtIGhhcyBiZWVuIHJlbW92ZWQuIFRoaXMgbWVhbnMgdGhlCitMTEQgaW50ZXJmYWNlIGZ1bmN0aW9ucyBhYm9ydCgpIGFuZCByZXNldCgpIGhhdmUgYmVlbiByZW1vdmVkLgorVGhlIHN0cnVjdCBzY3NpX2hvc3RfdGVtcGxhdGU6OnVzZV9uZXdfZWhfY29kZSBmbGFnIGhhcyBiZWVuIHJlbW92ZWQuCisKK0luIHRoZSAyLjQgc2VyaWVzIHRoZSBTQ1NJIHN1YnN5c3RlbSBjb25maWd1cmF0aW9uIGRlc2NyaXB0aW9ucyB3ZXJlIAorYWdncmVnYXRlZCB3aXRoIHRoZSBjb25maWd1cmF0aW9uIGRlc2NyaXB0aW9ucyBmcm9tIGFsbCBvdGhlciBMaW51eCAKK3N1YnN5c3RlbXMgaW4gdGhlIERvY3VtZW50YXRpb24vQ29uZmlndXJlLmhlbHAgZmlsZS4gSW4gdGhlIDIuNiBzZXJpZXMsIAordGhlIFNDU0kgc3Vic3lzdGVtIG5vdyBoYXMgaXRzIG93biAobXVjaCBzbWFsbGVyKSBkcml2ZXJzL3Njc2kvS2NvbmZpZworZmlsZSB0aGF0IGNvbnRhaW5zIGJvdGggY29uZmlndXJhdGlvbiBhbmQgaGVscCBpbmZvcm1hdGlvbi4KKworc3RydWN0IFNIVCBoYXMgYmVlbiByZW5hbWVkIHRvIHN0cnVjdCBzY3NpX2hvc3RfdGVtcGxhdGUuCisKK0FkZGl0aW9uIG9mIHRoZSAiaG90cGx1ZyBpbml0aWFsaXphdGlvbiBtb2RlbCIgYW5kIG1hbnkgZXh0cmEgZnVuY3Rpb25zCit0byBzdXBwb3J0IGl0LgorCisKK0NyZWRpdHMKKz09PT09PT0KK1RoZSBmb2xsb3dpbmcgcGVvcGxlIGhhdmUgY29udHJpYnV0ZWQgdG8gdGhpcyBkb2N1bWVudDoKKyAgICAgICAgTWlrZSBBbmRlcnNvbiA8YW5kbWlrZSBhdCB1cyBkb3QgaWJtIGRvdCBjb20+CisgICAgICAgIEphbWVzIEJvdHRvbWxleSA8SmFtZXMgZG90IEJvdHRvbWxleSBhdCBzdGVlbGV5ZSBkb3QgY29tPiAKKyAgICAgICAgUGF0cmljayBNYW5zZmllbGQgPHBhdG1hbnMgYXQgdXMgZG90IGlibSBkb3QgY29tPiAKKyAgICAgICAgQ2hyaXN0b3BoIEhlbGx3aWcgPGhjaCBhdCBpbmZyYWRlYWQgZG90IG9yZz4KKyAgICAgICAgRG91ZyBMZWRmb3JkIDxkbGVkZm9yZCBhdCByZWRoYXQgZG90IGNvbT4KKyAgICAgICAgQW5kcmllcyBCcm91d2VyIDxBbmRyaWVzIGRvdCBCcm91d2VyIGF0IGN3aSBkb3Qgbmw+CisgICAgICAgIFJhbmR5IER1bmxhcCA8cmRkdW5sYXAgYXQgb3NkbCBkb3Qgb3JnPgorICAgICAgICBBbGFuIFN0ZXJuIDxzdGVybiBhdCByb3dsYW5kIGRvdCBoYXJ2YXJkIGRvdCBlZHU+CisKKworRG91Z2xhcyBHaWxiZXJ0CitkZ2lsYmVydCBhdCBpbnRlcmxvZyBkb3QgY29tCisyMXN0IFNlcHRlbWJlciAyMDA0CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3Njc2kvc3QudHh0IGIvRG9jdW1lbnRhdGlvbi9zY3NpL3N0LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMGUzMGNmCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9zY3NpL3N0LnR4dApAQCAtMCwwICsxLDQ5OSBAQAorVGhpcyBmaWxlIGNvbnRhaW5zIGJyaWVmIGluZm9ybWF0aW9uIGFib3V0IHRoZSBTQ1NJIHRhcGUgZHJpdmVyLgorVGhlIGRyaXZlciBpcyBjdXJyZW50bHkgbWFpbnRhaW5lZCBieSBLYWkgTeRraXNhcmEgKGVtYWlsCitLYWkuTWFraXNhcmFAa29sdW1idXMuZmkpCisKK0xhc3QgbW9kaWZpZWQ6IE1vbiBNYXIgIDcgMjE6MTQ6NDQgMjAwNSBieSBrYWkubWFraXNhcmEKKworCitCQVNJQ1MKKworVGhlIGRyaXZlciBpcyBnZW5lcmljLCBpLmUuLCBpdCBkb2VzIG5vdCBjb250YWluIGFueSBjb2RlIHRhaWxvcmVkCit0byBhbnkgc3BlY2lmaWMgdGFwZSBkcml2ZS4gVGhlIHRhcGUgcGFyYW1ldGVycyBjYW4gYmUgc3BlY2lmaWVkIHdpdGgKK29uZSBvZiB0aGUgZm9sbG93aW5nIHRocmVlIG1ldGhvZHM6CisKKzEuIEVhY2ggdXNlciBjYW4gc3BlY2lmeSB0aGUgdGFwZSBwYXJhbWV0ZXJzIGhlL3NoZSB3YW50cyB0byB1c2UKK2RpcmVjdGx5IHdpdGggaW9jdGxzLiBUaGlzIGlzIGFkbWluaXN0cmF0aXZlbHkgYSB2ZXJ5IHNpbXBsZSBhbmQKK2ZsZXhpYmxlIG1ldGhvZCBhbmQgYXBwbGljYWJsZSB0byBzaW5nbGUtdXNlciB3b3Jrc3RhdGlvbnMuIEhvd2V2ZXIsCitpbiBhIG11bHRpdXNlciBlbnZpcm9ubWVudCB0aGUgbmV4dCB1c2VyIGZpbmRzIHRoZSB0YXBlIHBhcmFtZXRlcnMgaW4KK3N0YXRlIHRoZSBwcmV2aW91cyB1c2VyIGxlZnQgdGhlbS4KKworMi4gVGhlIHN5c3RlbSBtYW5hZ2VyIChyb290KSBjYW4gZGVmaW5lIGRlZmF1bHQgdmFsdWVzIGZvciBzb21lIHRhcGUKK3BhcmFtZXRlcnMsIGxpa2UgYmxvY2sgc2l6ZSBhbmQgZGVuc2l0eSB1c2luZyB0aGUgTVRTRVREUlZCVUZGRVIgaW9jdGwuCitUaGVzZSBwYXJhbWV0ZXJzIGNhbiBiZSBwcm9ncmFtbWVkIHRvIGNvbWUgaW50byBlZmZlY3QgZWl0aGVyIHdoZW4gYQorbmV3IHRhcGUgaXMgbG9hZGVkIGludG8gdGhlIGRyaXZlIG9yIGlmIHdyaXRpbmcgYmVnaW5zIGF0IHRoZQorYmVnaW5uaW5nIG9mIHRoZSB0YXBlLiBUaGUgc2Vjb25kIG1ldGhvZCBpcyBhcHBsaWNhYmxlIGlmIHRoZSB0YXBlCitkcml2ZSBwZXJmb3JtcyBhdXRvLWRldGVjdGlvbiBvZiB0aGUgdGFwZSBmb3JtYXQgd2VsbCAobGlrZSBzb21lCitRSUMtZHJpdmVzKS4gVGhlIHJlc3VsdCBpcyB0aGF0IGFueSB0YXBlIGNhbiBiZSByZWFkLCB3cml0aW5nIGNhbiBiZQorY29udGludWVkIHVzaW5nIGV4aXN0aW5nIGZvcm1hdCwgYW5kIHRoZSBkZWZhdWx0IGZvcm1hdCBpcyB1c2VkIGlmCit0aGUgdGFwZSBpcyByZXdyaXR0ZW4gZnJvbSB0aGUgYmVnaW5uaW5nIChvciBhIG5ldyB0YXBlIGlzIHdyaXR0ZW4KK2ZvciB0aGUgZmlyc3QgdGltZSkuIFRoZSBmaXJzdCBtZXRob2QgaXMgYXBwbGljYWJsZSBpZiB0aGUgZHJpdmUKK2RvZXMgbm90IHBlcmZvcm0gYXV0by1kZXRlY3Rpb24gd2VsbCBlbm91Z2ggYW5kIHRoZXJlIGlzIGEgc2luZ2xlCisic2Vuc2libGUiIG1vZGUgZm9yIHRoZSBkZXZpY2UuIEFuIGV4YW1wbGUgaXMgYSBEQVQgZHJpdmUgdGhhdCBpcwordXNlZCBvbmx5IGluIHZhcmlhYmxlIGJsb2NrIG1vZGUgKEkgZG9uJ3Qga25vdyBpZiB0aGlzIGlzIHNlbnNpYmxlCitvciBub3QgOi0pLgorCitUaGUgdXNlciBjYW4gb3ZlcnJpZGUgdGhlIHBhcmFtZXRlcnMgZGVmaW5lZCBieSB0aGUgc3lzdGVtCittYW5hZ2VyLiBUaGUgY2hhbmdlcyBwZXJzaXN0IHVudGlsIHRoZSBkZWZhdWx0cyBhZ2FpbiBjb21lIGludG8KK2VmZmVjdC4KKworMy4gQnkgZGVmYXVsdCwgdXAgdG8gZm91ciBtb2RlcyBjYW4gYmUgZGVmaW5lZCBhbmQgc2VsZWN0ZWQgdXNpbmcgdGhlIG1pbm9yCitudW1iZXIgKGJpdHMgNSBhbmQgNikuIFRoZSBudW1iZXIgb2YgbW9kZXMgY2FuIGJlIGNoYW5nZWQgYnkgY2hhbmdpbmcKK1NUX05CUl9NT0RFX0JJVFMgaW4gc3QuaC4gTW9kZSAwIGNvcnJlc3BvbmRzIHRvIHRoZSBkZWZhdWx0cyBkaXNjdXNzZWQKK2Fib3ZlLiBBZGRpdGlvbmFsIG1vZGVzIGFyZSBkb3JtYW50IHVudGlsIHRoZXkgYXJlIGRlZmluZWQgYnkgdGhlCitzeXN0ZW0gbWFuYWdlciAocm9vdCkuIFdoZW4gc3BlY2lmaWNhdGlvbiBvZiBhIG5ldyBtb2RlIGlzIHN0YXJ0ZWQsCit0aGUgY29uZmlndXJhdGlvbiBvZiBtb2RlIDAgaXMgdXNlZCB0byBwcm92aWRlIGEgc3RhcnRpbmcgcG9pbnQgZm9yCitkZWZpbml0aW9uIG9mIHRoZSBuZXcgbW9kZS4KKworVXNpbmcgdGhlIG1vZGVzIGFsbG93cyB0aGUgc3lzdGVtIG1hbmFnZXIgdG8gZ2l2ZSB0aGUgdXNlcnMgY2hvaWNlcworb3ZlciBzb21lIG9mIHRoZSBidWZmZXJpbmcgcGFyYW1ldGVycyBub3QgZGlyZWN0bHkgYWNjZXNzaWJsZSB0byB0aGUKK3VzZXJzIChidWZmZXJlZCBhbmQgYXN5bmNocm9ub3VzIHdyaXRlcykuIFRoZSBtb2RlcyBhbHNvIGFsbG93IGNob2ljZXMKK2JldHdlZW4gZm9ybWF0cyBpbiBtdWx0aS10YXBlIG9wZXJhdGlvbnMgKHRoZSBleHBsaWNpdGx5IG92ZXJyaWRkZW4KK3BhcmFtZXRlcnMgYXJlIHJlc2V0IHdoZW4gYSBuZXcgdGFwZSBpcyBsb2FkZWQpLgorCitJZiBtb3JlIHRoYW4gb25lIG1vZGUgaXMgdXNlZCwgYWxsIG1vZGVzIHNob3VsZCBjb250YWluIGRlZmluaXRpb25zCitmb3IgdGhlIHNhbWUgc2V0IG9mIHBhcmFtZXRlcnMuCisKK01hbnkgVW5pY2VzIGNvbnRhaW4gaW50ZXJuYWwgdGFibGVzIHRoYXQgYXNzb2NpYXRlIGRpZmZlcmVudCBtb2RlcyB0bworc3VwcG9ydGVkIGRldmljZXMuIFRoZSBMaW51eCBTQ1NJIHRhcGUgZHJpdmVyIGRvZXMgbm90IGNvbnRhaW4gc3VjaAordGFibGVzIChhbmQgd2lsbCBub3QgZG8gdGhhdCBpbiBmdXR1cmUpLiBJbnN0ZWFkIG9mIHRoYXQsIGEgdXRpbGl0eQorcHJvZ3JhbSBjYW4gYmUgbWFkZSB0aGF0IGZldGNoZXMgdGhlIGlucXVpcnkgZGF0YSBzZW50IGJ5IHRoZSBkZXZpY2UsCitzY2FucyBpdHMgZGF0YWJhc2UsIGFuZCBzZXRzIHVwIHRoZSBtb2RlcyB1c2luZyB0aGUgaW9jdGxzLiBBbm90aGVyCithbHRlcm5hdGl2ZSBpcyB0byBtYWtlIGEgc21hbGwgc2NyaXB0IHRoYXQgdXNlcyBtdCB0byBzZXQgdGhlIGRlZmF1bHRzCit0YWlsb3JlZCB0byB0aGUgc3lzdGVtLgorCitUaGUgZHJpdmVyIHN1cHBvcnRzIGZpeGVkIGFuZCB2YXJpYWJsZSBibG9jayBzaXplICh3aXRoaW4gYnVmZmVyCitsaW1pdHMpLiBCb3RoIHRoZSBhdXRvLXJld2luZCAobWlub3IgZXF1YWxzIGRldmljZSBudW1iZXIpIGFuZAorbm9uLXJld2luZCBkZXZpY2VzIChtaW5vciBpcyAxMjggKyBkZXZpY2UgbnVtYmVyKSBhcmUgaW1wbGVtZW50ZWQuCisKK0luIHZhcmlhYmxlIGJsb2NrIG1vZGUsIHRoZSBieXRlIGNvdW50IGluIHdyaXRlKCkgZGV0ZXJtaW5lcyB0aGUgc2l6ZQorb2YgdGhlIHBoeXNpY2FsIGJsb2NrIG9uIHRhcGUuIFdoZW4gcmVhZGluZywgdGhlIGRyaXZlIHJlYWRzIHRoZSBuZXh0Cit0YXBlIGJsb2NrIGFuZCByZXR1cm5zIHRvIHRoZSB1c2VyIHRoZSBkYXRhIGlmIHRoZSByZWFkKCkgYnl0ZSBjb3VudAoraXMgYXQgbGVhc3QgdGhlIGJsb2NrIHNpemUuIE90aGVyd2lzZSwgZXJyb3IgRU5PTUVNIGlzIHJldHVybmVkLgorCitJbiBmaXhlZCBibG9jayBtb2RlLCB0aGUgZGF0YSB0cmFuc2ZlciBiZXR3ZWVuIHRoZSBkcml2ZSBhbmQgdGhlCitkcml2ZXIgaXMgaW4gbXVsdGlwbGVzIG9mIHRoZSBibG9jayBzaXplLiBUaGUgd3JpdGUoKSBieXRlIGNvdW50IG11c3QKK2JlIGEgbXVsdGlwbGUgb2YgdGhlIGJsb2NrIHNpemUuIFRoaXMgaXMgbm90IHJlcXVpcmVkIHdoZW4gcmVhZGluZyBidXQKK21heSBiZSBhZHZpc2FibGUgZm9yIHBvcnRhYmlsaXR5LgorCitTdXBwb3J0IGlzIHByb3ZpZGVkIGZvciBjaGFuZ2luZyB0aGUgdGFwZSBwYXJ0aXRpb24gYW5kIHBhcnRpdGlvbmluZworb2YgdGhlIHRhcGUgd2l0aCBvbmUgb3IgdHdvIHBhcnRpdGlvbnMuIEJ5IGRlZmF1bHQgc3VwcG9ydCBmb3IKK3BhcnRpdGlvbmVkIHRhcGUgaXMgZGlzYWJsZWQgZm9yIGVhY2ggZHJpdmVyIGFuZCBpdCBjYW4gYmUgZW5hYmxlZAord2l0aCB0aGUgaW9jdGwgTVRTRVREUlZCVUZGRVIuCisKK0J5IGRlZmF1bHQgdGhlIGRyaXZlciB3cml0ZXMgb25lIGZpbGVtYXJrIHdoZW4gdGhlIGRldmljZSBpcyBjbG9zZWQgYWZ0ZXIKK3dyaXRpbmcgYW5kIHRoZSBsYXN0IG9wZXJhdGlvbiBoYXMgYmVlbiBhIHdyaXRlLiBUd28gZmlsZW1hcmtzIGNhbiBiZQorb3B0aW9uYWxseSB3cml0dGVuLiBJbiBib3RoIGNhc2VzIGVuZCBvZiBkYXRhIGlzIHNpZ25pZmllZCBieQorcmV0dXJuaW5nIHplcm8gYnl0ZXMgZm9yIHR3byBjb25zZWN1dGl2ZSByZWFkcy4KKworSWYgcmV3aW5kLCBvZmZsaW5lLCBic2YsIG9yIHNlZWsgaXMgZG9uZSBhbmQgcHJldmlvdXMgdGFwZSBvcGVyYXRpb24gd2FzCit3cml0ZSwgYSBmaWxlbWFyayBpcyB3cml0dGVuIGJlZm9yZSBtb3ZpbmcgdGFwZS4KKworVGhlIGNvbXBpbGUgb3B0aW9ucyBhcmUgZGVmaW5lZCBpbiB0aGUgZmlsZSBsaW51eC9kcml2ZXJzL3Njc2kvc3Rfb3B0aW9ucy5oLgorCis0LiBJZiB0aGUgb3BlbiBvcHRpb24gT19OT05CTE9DSyBpcyB1c2VkLCBvcGVuIHN1Y2NlZWRzIGV2ZW4gaWYgdGhlCitkcml2ZSBpcyBub3QgcmVhZHkuIElmIE9fTk9OQkxPQ0sgaXMgbm90IHVzZWQsIHRoZSBkcml2ZXIgd2FpdHMgZm9yCit0aGUgZHJpdmUgdG8gYmVjb21lIHJlYWR5LiBJZiB0aGlzIGRvZXMgbm90IGhhcHBlbiBpbiBTVF9CTE9DS19TRUNPTkRTCitzZWNvbmRzLCBvcGVuIGZhaWxzIHdpdGggdGhlIGVycm5vIHZhbHVlIEVJTy4gV2l0aCBPX05PTkJMT0NLIHRoZQorZGV2aWNlIGNhbiBiZSBvcGVuZWQgZm9yIHdyaXRpbmcgZXZlbiBpZiB0aGVyZSBpcyBhIHdyaXRlIHByb3RlY3RlZAordGFwZSBpbiB0aGUgZHJpdmUgKGNvbW1hbmRzIHRyeWluZyB0byB3cml0ZSBzb21ldGhpbmcgcmV0dXJuIGVycm9yIGlmCithdHRlbXB0ZWQpLgorCisKK01JTk9SIE5VTUJFUlMKKworVGhlIHRhcGUgZHJpdmVyIGN1cnJlbnRseSBzdXBwb3J0cyAxMjggZHJpdmVzIGJ5IGRlZmF1bHQuIFRoaXMgbnVtYmVyCitjYW4gYmUgaW5jcmVhc2VkIGJ5IGVkaXRpbmcgc3QuaCBhbmQgcmVjb21waWxpbmcgdGhlIGRyaXZlciBpZgorbmVjZXNzYXJ5LiBUaGUgdXBwZXIgbGltaXQgaXMgMl4xNyBkcml2ZXMgaWYgNCBtb2RlcyBmb3IgZWFjaCBkcml2ZQorYXJlIHVzZWQuCisKK1RoZSBtaW5vciBudW1iZXJzIGNvbnNpc3Qgb2YgdGhlIGZvbGxvd2luZyBiaXQgZmllbGRzOgorCitkZXZfdXBwZXIgbm9uLXJldyBtb2RlIGRldi1sb3dlcgorICAyMCAtICA4ICAgICA3ICAgIDYgNSAgNCAgICAgIDAKK1RoZSBub24tcmV3aW5kIGJpdCBpcyBhbHdheXMgYml0IDcgKHRoZSB1cHBlcm1vc3QgYml0IGluIHRoZSBsb3dlcm1vc3QKK2J5dGUpLiBUaGUgYml0cyBkZWZpbmluZyB0aGUgbW9kZSBhcmUgYmVsb3cgdGhlIG5vbi1yZXdpbmQgYml0LiBUaGUKK3JlbWFpbmluZyBiaXRzIGRlZmluZSB0aGUgdGFwZSBkZXZpY2UgbnVtYmVyLiBUaGlzIG51bWJlcmluZyBpcworYmFja3dhcmQgY29tcGF0aWJsZSB3aXRoIHRoZSBudW1iZXJpbmcgdXNlZCB3aGVuIHRoZSBtaW5vciBudW1iZXIgd2FzCitvbmx5IDggYml0cyB3aWRlLgorCisKK1NZU0ZTIFNVUFBPUlQKKworVGhlIGRyaXZlciBjcmVhdGVzIHRoZSBkaXJlY3RvcnkgL3N5cy9jbGFzcy9zY3NpX3RhcGUgYW5kIHBvcHVsYXRlcyBpdCB3aXRoCitkaXJlY3RvcmllcyBjb3JyZXNwb25kaW5nIHRvIHRoZSBleGlzdGluZyB0YXBlIGRldmljZXMuIFRoZXJlIGFyZSBhdXRvcmV3aW5kCithbmQgbm9uLXJld2luZCBlbnRyaWVzIGZvciBlYWNoIG1vZGUuIFRoZSBuYW1lcyBhcmUgc3R4eSBhbmQgbnN0eHksIHdoZXJlIHgKK2lzIHRoZSB0YXBlIG51bWJlciBhbmQgeSBhIGNoYXJhY3RlciBjb3JyZXNwb25kaW5nIHRvIHRoZSBtb2RlIChub25lLCBsLCBtLAorYSkuIEZvciBleGFtcGxlLCB0aGUgZGlyZWN0b3JpZXMgZm9yIHRoZSBmaXJzdCB0YXBlIGRldmljZSBhcmUgKGFzc3VtaW5nIGZvdXIKK21vZGVzKTogc3QwICBuc3QwICBzdDBsICBuc3QwbCAgc3QwbSAgbnN0MG0gIHN0MGEgIG5zdDBhLgorCitFYWNoIGRpcmVjdG9yeSBjb250YWlucyB0aGUgZW50cmllczogZGVmYXVsdF9ibGtzaXplICBkZWZhdWx0X2NvbXByZXNzaW9uCitkZWZhdWx0X2RlbnNpdHkgIGRlZmluZWQgIGRldiAgZGV2aWNlICBkcml2ZXIuIFRoZSBmaWxlICdkZWZpbmVkJyBjb250YWlucyAxCitpZiB0aGUgbW9kZSBpcyBkZWZpbmVkIGFuZCB6ZXJvIGlmIG5vdCBkZWZpbmVkLiBUaGUgZmlsZXMgJ2RlZmF1bHRfKicgY29udGFpbgordGhlIGRlZmF1bHRzIHNldCBieSB0aGUgdXNlci4gVGhlIHZhbHVlIC0xIG1lYW5zIHRoZSBkZWZhdWx0IGlzIG5vdCBzZXQuIFRoZQorZmlsZSAnZGV2JyBjb250YWlucyB0aGUgZGV2aWNlIG51bWJlcnMgY29ycmVzcG9uZGluZyB0byB0aGlzIGRldmljZS4gVGhlIGxpbmtzCisnZGV2aWNlJyBhbmQgJ2RyaXZlcicgcG9pbnQgdG8gdGhlIFNDU0kgZGV2aWNlIGFuZCBkcml2ZXIgZW50cmllcy4KKworQSBsaW5rIG5hbWVkICd0YXBlJyBpcyBtYWRlIGZyb20gdGhlIFNDU0kgZGV2aWNlIGRpcmVjdG9yeSB0byB0aGUgY2xhc3MKK2RpcmVjdG9yeSBjb3JyZXNwb25kaW5nIHRvIHRoZSBtb2RlIDAgYXV0by1yZXdpbmQgZGV2aWNlIChlLmcuLCBzdDApLiAKKworCitCU0QgQU5EIFNZUyBWIFNFTUFOVElDUworCitUaGUgdXNlciBjYW4gY2hvb3NlIGJldHdlZW4gdGhlc2UgdHdvIGJlaGF2aW91cnMgb2YgdGhlIHRhcGUgZHJpdmVyIGJ5CitkZWZpbmluZyB0aGUgdmFsdWUgb2YgdGhlIHN5bWJvbCBTVF9TWVNWLiBUaGUgc2VtYW50aWNzIGRpZmZlciB3aGVuIGEKK2ZpbGUgYmVpbmcgcmVhZCBpcyBjbG9zZWQuIFRoZSBCU0Qgc2VtYW50aWNzIGxlYXZlcyB0aGUgdGFwZSB3aGVyZSBpdAorY3VycmVudGx5IGlzIHdoZXJlYXMgdGhlIFNZUyBWIHNlbWFudGljcyBtb3ZlcyB0aGUgdGFwZSBwYXN0IHRoZSBuZXh0CitmaWxlbWFyayB1bmxlc3MgdGhlIGZpbGVtYXJrIGhhcyBqdXN0IGJlZW4gY3Jvc3NlZC4KKworVGhlIGRlZmF1bHQgaXMgQlNEIHNlbWFudGljcy4KKworCitCVUZGRVJJTkcKKworVGhlIGRyaXZlciB0cmllcyB0byBkbyB0cmFuc2ZlcnMgZGlyZWN0bHkgdG8vZnJvbSB1c2VyIHNwYWNlLiBJZiB0aGlzCitpcyBub3QgcG9zc2libGUsIGEgZHJpdmVyIGJ1ZmZlciBhbGxvY2F0ZWQgYXQgcnVuLXRpbWUgaXMgdXNlZC4gSWYKK2RpcmVjdCBpL28gaXMgbm90IHBvc3NpYmxlIGZvciB0aGUgd2hvbGUgdHJhbnNmZXIsIHRoZSBkcml2ZXIgYnVmZmVyCitpcyB1c2VkIChpLmUuLCBib3VuY2UgYnVmZmVycyBmb3IgaW5kaXZpZHVhbCBwYWdlcyBhcmUgbm90Cit1c2VkKS4gRGlyZWN0IGkvbyBjYW4gYmUgaW1wb3NzaWJsZSBiZWNhdXNlIG9mIHNldmVyYWwgcmVhc29ucywgZS5nLjoKKy0gb25lIG9yIG1vcmUgcGFnZXMgYXJlIGF0IGFkZHJlc3NlcyBub3QgcmVhY2hhYmxlIGJ5IHRoZSBIQkEKKy0gdGhlIG51bWJlciBvZiBwYWdlcyBpbiB0aGUgdHJhbnNmZXIgZXhjZWVkcyB0aGUgbnVtYmVyIG9mCisgIHNjYXR0ZXIvZ2F0aGVyIHNlZ21lbnRzIHBlcm1pdHRlZCBieSB0aGUgSEJBCistIG9uZSBvciBtb3JlIHBhZ2VzIGNhbid0IGJlIGxvY2tlZCBpbnRvIG1lbW9yeSAoc2hvdWxkIG5vdCBoYXBwZW4gaW4KKyAgYW55IHJlYXNvbmFibGUgc2l0dWF0aW9uKQorCitUaGUgc2l6ZSBvZiB0aGUgZHJpdmVyIGJ1ZmZlcnMgaXMgYWx3YXlzIGF0IGxlYXN0IG9uZSB0YXBlIGJsb2NrLiBJbiBmaXhlZAorYmxvY2sgbW9kZSwgdGhlIG1pbmltdW0gYnVmZmVyIHNpemUgaXMgZGVmaW5lZCAoaW4gMTAyNCBieXRlIHVuaXRzKSBieQorU1RfRklYRURfQlVGRkVSX0JMT0NLUy4gV2l0aCBzbWFsbCBibG9jayBzaXplIHRoaXMgYWxsb3dzIGJ1ZmZlcmluZyBvZgorc2V2ZXJhbCBibG9ja3MgYW5kIHVzaW5nIG9uZSBTQ1NJIHJlYWQgb3Igd3JpdGUgdG8gdHJhbnNmZXIgYWxsIG9mIHRoZQorYmxvY2tzLiBCdWZmZXJpbmcgb2YgZGF0YSBhY3Jvc3Mgd3JpdGUgY2FsbHMgaW4gZml4ZWQgYmxvY2sgbW9kZSBpcworYWxsb3dlZCBpZiBTVF9CVUZGRVJfV1JJVEVTIGlzIG5vbi16ZXJvIGFuZCBkaXJlY3QgaS9vIGlzIG5vdCB1c2VkLgorQnVmZmVyIGFsbG9jYXRpb24gdXNlcyBjaHVua3Mgb2YgbWVtb3J5IGhhdmluZyBzaXplcyAyXm4gKiAocGFnZQorc2l6ZSkuIEJlY2F1c2Ugb2YgdGhpcyB0aGUgYWN0dWFsIGJ1ZmZlciBzaXplIG1heSBiZSBsYXJnZXIgdGhhbiB0aGUKK21pbmltdW0gYWxsb3dhYmxlIGJ1ZmZlciBzaXplLgorCitOT1RFIHRoYXQgaWYgZGlyZWN0IGkvbyBpcyB1c2VkLCB0aGUgc21hbGwgd3JpdGVzIGFyZSBub3QgYnVmZmVyZWQuIFRoaXMgbWF5CitjYXVzZSBhIHN1cnByaXNlIHdoZW4gbW92aW5nIGZyb20gMi40LiBUaGVyZSBzbWFsbCB3cml0ZXMgKGUuZy4sIHRhciB3aXRob3V0CistYiBvcHRpb24pIG1heSBoYXZlIGhhZCBnb29kIHRocm91Z2hwdXQgYnV0IHRoaXMgaXMgbm90IHRydWUgYW55IG1vcmUgd2l0aAorMi42LiBEaXJlY3QgaS9vIGNhbiBiZSB0dXJuZWQgb2ZmIHRvIHNvbHZlIHRoaXMgcHJvYmxlbSBidXQgYSBiZXR0ZXIgc29sdXRpb24KK2lzIHRvIHVzZSBiaWdnZXIgd3JpdGUoKSBieXRlIGNvdW50cyAoZS5nLiwgdGFyIC1iIDY0KS4KKworQXN5bmNocm9ub3VzIHdyaXRpbmcuIFdyaXRpbmcgdGhlIGJ1ZmZlciBjb250ZW50cyB0byB0aGUgdGFwZSBpcworc3RhcnRlZCBhbmQgdGhlIHdyaXRlIGNhbGwgcmV0dXJucyBpbW1lZGlhdGVseS4gVGhlIHN0YXR1cyBpcyBjaGVja2VkCithdCB0aGUgbmV4dCB0YXBlIG9wZXJhdGlvbi4gQXN5bmNocm9ub3VzIHdyaXRlcyBhcmUgbm90IGRvbmUgd2l0aAorZGlyZWN0IGkvbyBhbmQgbm90IGluIGZpeGVkIGJsb2NrIG1vZGUuCisKK0J1ZmZlcmVkIHdyaXRlcyBhbmQgYXN5bmNocm9ub3VzIHdyaXRlcyBtYXkgaW4gc29tZSByYXJlIGNhc2VzIGNhdXNlCitwcm9ibGVtcyBpbiBtdWx0aXZvbHVtZSBvcGVyYXRpb25zIGlmIHRoZXJlIGlzIG5vdCBlbm91Z2ggc3BhY2Ugb24gdGhlCit0YXBlIGFmdGVyIHRoZSBlYXJseS13YXJuaW5nIG1hcmsgdG8gZmx1c2ggdGhlIGRyaXZlciBidWZmZXIuCisKK1JlYWQgYWhlYWQgZm9yIGZpeGVkIGJsb2NrIG1vZGUgKFNUX1JFQURfQUhFQUQpLiBGaWxsaW5nIHRoZSBidWZmZXIgaXMKK2F0dGVtcHRlZCBldmVuIGlmIHRoZSB1c2VyIGRvZXMgbm90IHdhbnQgdG8gZ2V0IGFsbCBvZiB0aGUgZGF0YSBhdAordGhpcyByZWFkIGNvbW1hbmQuIFNob3VsZCBiZSBkaXNhYmxlZCBmb3IgdGhvc2UgZHJpdmVzIHRoYXQgZG9uJ3QgbGlrZQorYSBmaWxlbWFyayB0byB0cnVuY2F0ZSBhIHJlYWQgcmVxdWVzdCBvciB0aGF0IGRvbid0IGxpa2UgYmFja3NwYWNpbmcuCisKK1NjYXR0ZXIvZ2F0aGVyIGJ1ZmZlcnMgKGJ1ZmZlcnMgdGhhdCBjb25zaXN0IG9mIGNodW5rcyBub24tY29udGlndW91cworaW4gdGhlIHBoeXNpY2FsIG1lbW9yeSkgYXJlIHVzZWQgaWYgY29udGlndW91cyBidWZmZXJzIGNhbid0IGJlCithbGxvY2F0ZWQuIFRvIHN1cHBvcnQgYWxsIFNDU0kgYWRhcHRlcnMgKGluY2x1ZGluZyB0aG9zZSBub3QKK3N1cHBvcnRpbmcgc2NhdHRlci9nYXRoZXIpLCBidWZmZXIgYWxsb2NhdGlvbiBpcyB1c2luZyB0aGUgZm9sbG93aW5nCit0aHJlZSBraW5kcyBvZiBjaHVua3M6CisxLiBUaGUgaW5pdGlhbCBzZWdtZW50IHRoYXQgaXMgdXNlZCBmb3IgYWxsIFNDU0kgYWRhcHRlcnMgaW5jbHVkaW5nCit0aG9zZSBub3Qgc3VwcG9ydGluZyBzY2F0dGVyL2dhdGhlci4gVGhlIHNpemUgb2YgdGhpcyBidWZmZXIgd2lsbCBiZQorKFBBR0VfU0laRSA8PCBTVF9GSVJTVF9PUkRFUikgYnl0ZXMgaWYgdGhlIHN5c3RlbSBjYW4gZ2l2ZSBhIGNodW5rIG9mCit0aGlzIHNpemUgKGFuZCBpdCBpcyBub3QgbGFyZ2VyIHRoYW4gdGhlIGJ1ZmZlciBzaXplIHNwZWNpZmllZCBieQorU1RfQlVGRkVSX0JMT0NLUykuIElmIHRoaXMgc2l6ZSBpcyBub3QgYXZhaWxhYmxlLCB0aGUgZHJpdmVyIGhhbHZlcwordGhlIHNpemUgYW5kIHRyaWVzIGFnYWluIHVudGlsIHRoZSBzaXplIG9mIG9uZSBwYWdlLiBUaGUgZGVmYXVsdAorc2V0dGluZ3MgaW4gc3Rfb3B0aW9ucy5oIG1ha2UgdGhlIGRyaXZlciB0byB0cnkgdG8gYWxsb2NhdGUgYWxsIG9mIHRoZQorYnVmZmVyIGFzIG9uZSBjaHVuay4KKzIuIFRoZSBzY2F0dGVyL2dhdGhlciBzZWdtZW50cyB0byBmaWxsIHRoZSBzcGVjaWZpZWQgYnVmZmVyIHNpemUgYXJlCithbGxvY2F0ZWQgc28gdGhhdCBhcyBtYW55IHNlZ21lbnRzIGFzIHBvc3NpYmxlIGFyZSB1c2VkIGJ1dCB0aGUgbnVtYmVyCitvZiBzZWdtZW50cyBkb2VzIG5vdCBleGNlZWQgU1RfRklSU1RfU0cuCiszLiBUaGUgcmVtYWluaW5nIHNlZ21lbnRzIGJldHdlZW4gU1RfTUFYX1NHIChvciB0aGUgbW9kdWxlIHBhcmFtZXRlcgorbWF4X3NnX3NlZ3MpIGFuZCB0aGUgbnVtYmVyIG9mIHNlZ21lbnRzIHVzZWQgaW4gcGhhc2VzIDEgYW5kIDIKK2FyZSB1c2VkIHRvIGV4dGVuZCB0aGUgYnVmZmVyIGF0IHJ1bi10aW1lIGlmIHRoaXMgaXMgbmVjZXNzYXJ5LiBUaGUKK251bWJlciBvZiBzY2F0dGVyL2dhdGhlciBzZWdtZW50cyBhbGxvd2VkIGZvciB0aGUgU0NTSSBhZGFwdGVyIGlzIG5vdAorZXhjZWVkZWQgaWYgaXQgaXMgc21hbGxlciB0aGFuIHRoZSBtYXhpbXVtIG51bWJlciBvZiBzY2F0dGVyL2dhdGhlcgorc2VnbWVudHMgc3BlY2lmaWVkLiBJZiB0aGUgbWF4aW11bSBudW1iZXIgYWxsb3dlZCBmb3IgdGhlIFNDU0kgYWRhcHRlcgoraXMgc21hbGxlciB0aGFuIHRoZSBudW1iZXIgb2Ygc2VnbWVudHMgdXNlZCBpbiBwaGFzZXMgMSBhbmQgMiwKK2V4dGVuZGluZyB0aGUgYnVmZmVyIHdpbGwgYWx3YXlzIGZhaWwuCisKKworRU9NIEJFSEFWSU9VUiBXSEVOIFdSSVRJTkcKKworV2hlbiB0aGUgZW5kIG9mIG1lZGl1bSBlYXJseSB3YXJuaW5nIGlzIGVuY291bnRlcmVkLCB0aGUgY3VycmVudCB3cml0ZQoraXMgZmluaXNoZWQgYW5kIHRoZSBudW1iZXIgb2YgYnl0ZXMgaXMgcmV0dXJuZWQuIFRoZSBuZXh0IHdyaXRlCityZXR1cm5zIC0xIGFuZCBlcnJubyBpcyBzZXQgdG8gRU5PU1BDLiBUbyBlbmFibGUgd3JpdGluZyBhIHRyYWlsZXIsCit0aGUgbmV4dCB3cml0ZSBpcyBhbGxvd2VkIHRvIHByb2NlZWQgYW5kLCBpZiBzdWNjZXNzZnVsLCB0aGUgbnVtYmVyIG9mCitieXRlcyBpcyByZXR1cm5lZC4gQWZ0ZXIgdGhpcywgLTEgYW5kIHRoZSBudW1iZXIgb2YgYnl0ZXMgYXJlCithbHRlcm5hdGVseSByZXR1cm5lZCB1bnRpbCB0aGUgcGh5c2ljYWwgZW5kIG9mIG1lZGl1bSAob3Igc29tZSBvdGhlcgorZXJyb3IpIGlzIGVuY291bnRlcmVkLgorCisKK01PRFVMRSBQQVJBTUVURVJTCisKK1RoZSBidWZmZXIgc2l6ZSwgd3JpdGUgdGhyZXNob2xkLCBhbmQgdGhlIG1heGltdW0gbnVtYmVyIG9mIGFsbG9jYXRlZCBidWZmZXJzCithcmUgY29uZmlndXJhYmxlIHdoZW4gdGhlIGRyaXZlciBpcyBsb2FkZWQgYXMgYSBtb2R1bGUuIFRoZSBrZXl3b3JkcyBhcmU6CisKK2J1ZmZlcl9rYnM9eHh4ICAgICAgICAgICAgIHRoZSBidWZmZXIgc2l6ZSBmb3IgZml4ZWQgYmxvY2sgbW9kZSBpcyBzZXQKKwkJCSAgIHRvIHh4eCBraWxvYnl0ZXMKK3dyaXRlX3RocmVzaG9sZF9rYnM9eHh4ICAgIHRoZSB3cml0ZSB0aHJlc2hvbGQgaW4ga2lsb2J5dGVzIHNldCB0byB4eHgKK21heF9zZ19zZWdzPXh4eAkJICAgdGhlIG1heGltdW0gbnVtYmVyIG9mIHNjYXR0ZXIvZ2F0aGVyCisJCQkgICBzZWdtZW50cwordHJ5X2RpcmVjdF9pbz14CQkgICB0cnkgZGlyZWN0IHRyYW5zZmVyIGJldHdlZW4gdXNlciBidWZmZXIgYW5kCisJCQkgICB0YXBlIGRyaXZlIGlmIHRoaXMgaXMgbm9uLXplcm8KKworTm90ZSB0aGF0IGlmIHRoZSBidWZmZXIgc2l6ZSBpcyBjaGFuZ2VkIGJ1dCB0aGUgd3JpdGUgdGhyZXNob2xkIGlzIG5vdAorc2V0LCB0aGUgd3JpdGUgdGhyZXNob2xkIGlzIHNldCB0byB0aGUgbmV3IGJ1ZmZlciBzaXplIC0gMiBrQi4KKworCitCT09UIFRJTUUgQ09ORklHVVJBVElPTgorCitJZiB0aGUgZHJpdmVyIGlzIGNvbXBpbGVkIGludG8gdGhlIGtlcm5lbCwgdGhlIHNhbWUgcGFyYW1ldGVycyBjYW4gYmUKK2Fsc28gc2V0IHVzaW5nLCBlLmcuLCB0aGUgTElMTyBjb21tYW5kIGxpbmUuIFRoZSBwcmVmZXJyZWQgc3ludGF4IGlzCitpcyB0byB1c2UgdGhlIHNhbWUga2V5d29yZCB1c2VkIHdoZW4gbG9hZGluZyBhcyBtb2R1bGUgYnV0IHByZXBlbmRlZAord2l0aCAnc3QuJy4gRm9yIGluc3RhbmNlLCB0byBzZXQgdGhlIG1heGltdW0gbnVtYmVyIG9mIHNjYXR0ZXIvZ2F0aGVyCitzZWdtZW50cywgdGhlIHBhcmFtZXRlciAnc3QubWF4X3NnX3NlZ3M9eHgnIHNob3VsZCBiZSB1c2VkICh4eCBpcyB0aGUKK251bWJlciBvZiBzY2F0dGVyL2dhdGhlciBzZWdtZW50cykuCisKK0ZvciBjb21wYXRpYmlsaXR5LCB0aGUgb2xkIHN5bnRheCBmcm9tIGVhcmx5IDIuNSBhbmQgMi40IGtlcm5lbAordmVyc2lvbnMgaXMgc3VwcG9ydGVkLiBUaGUgc2FtZSBrZXl3b3JkcyBjYW4gYmUgdXNlZCBhcyB3aGVuIGxvYWRpbmcKK3RoZSBkcml2ZXIgYXMgbW9kdWxlLiBJZiBzZXZlcmFsIHBhcmFtZXRlcnMgYXJlIHNldCwgdGhlIGtleXdvcmQtdmFsdWUKK3BhaXJzIGFyZSBzZXBhcmF0ZWQgd2l0aCBhIGNvbW1hIChubyBzcGFjZXMgYWxsb3dlZCkuIEEgY29sb24gY2FuIGJlCit1c2VkIGluc3RlYWQgb2YgdGhlIGVxdWFsIG1hcmsuIFRoZSBkZWZpbml0aW9uIGlzIHByZXBlbmRlZCBieSB0aGUKK3N0cmluZyBzdD0uIEhlcmUgaXMgYW4gZXhhbXBsZToKKworCXN0PWJ1ZmZlcl9rYnM6NjQsd3JpdGVfdGhyZWhvbGRfa2JzOjYwCisKK1RoZSBmb2xsb3dpbmcgc3ludGF4IHVzZWQgYnkgdGhlIG9sZCBrZXJuZWwgdmVyc2lvbnMgaXMgYWxzbyBzdXBwb3J0ZWQ6CisKKyAgICAgICAgICAgc3Q9YWFbLGJiWyxkZF1dCisKK3doZXJlCisgIGFhIGlzIHRoZSBidWZmZXIgc2l6ZSBmb3IgZml4ZWQgYmxvY2sgbW9kZSBpbiAxMDI0IGJ5dGUgdW5pdHMKKyAgYmIgaXMgdGhlIHdyaXRlIHRocmVzaG9sZCBpbiAxMDI0IGJ5dGUgdW5pdHMKKyAgZGQgaXMgdGhlIG1heGltdW0gbnVtYmVyIG9mIHNjYXR0ZXIvZ2F0aGVyIHNlZ21lbnRzCisKKworSU9DVExTCisKK1RoZSB0YXBlIGlzIHBvc2l0aW9uZWQgYW5kIHRoZSBkcml2ZSBwYXJhbWV0ZXJzIGFyZSBzZXQgd2l0aCBpb2N0bHMKK2RlZmluZWQgaW4gbXRpby5oIFRoZSB0YXBlIGNvbnRyb2wgcHJvZ3JhbSAnbXQnIHVzZXMgdGhlc2UgaW9jdGxzLiBUcnkKK3RvIGZpbmQgYW4gbXQgdGhhdCBzdXBwb3J0cyBhbGwgb2YgdGhlIExpbnV4IFNDU0kgdGFwZSBpb2N0bHMgYW5kCitvcGVucyB0aGUgZGV2aWNlIGZvciB3cml0aW5nIGlmIHRoZSB0YXBlIGNvbnRlbnRzIHdpbGwgYmUgbW9kaWZpZWQKKyhsb29rIGZvciBhIHBhY2thZ2UgbXQtc3QqIGZyb20gdGhlIExpbnV4IGZ0cCBzaXRlczsgdGhlIEdOVSBtdCBkb2VzCitub3Qgb3BlbiBmb3Igd3JpdGluZyBmb3IsIGUuZy4sIGVyYXNlKS4KKworVGhlIHN1cHBvcnRlZCBpb2N0bHMgYXJlOgorCitUaGUgZm9sbG93aW5nIHVzZSB0aGUgc3RydWN0dXJlIG10b3A6CisKK01URlNGICAgU3BhY2UgZm9yd2FyZCBvdmVyIGNvdW50IGZpbGVtYXJrcy4gVGFwZSBwb3NpdGlvbmVkIGFmdGVyIGZpbGVtYXJrLgorTVRGU0ZNICBBcyBhYm92ZSBidXQgdGFwZSBwb3NpdGlvbmVkIGJlZm9yZSBmaWxlbWFyay4KK01UQlNGCVNwYWNlIGJhY2t3YXJkIG92ZXIgY291bnQgZmlsZW1hcmtzLiBUYXBlIHBvc2l0aW9uZWQgYmVmb3JlCisgICAgICAgIGZpbGVtYXJrLgorTVRCU0ZNICBBcyBhYm92ZSBidXQgYXBlIHBvc2l0aW9uZWQgYWZ0ZXIgZmlsZW1hcmsuCitNVEZTUiAgIFNwYWNlIGZvcndhcmQgb3ZlciBjb3VudCByZWNvcmRzLgorTVRCU1IgICBTcGFjZSBiYWNrd2FyZCBvdmVyIGNvdW50IHJlY29yZHMuCitNVEZTUyAgIFNwYWNlIGZvcndhcmQgb3ZlciBjb3VudCBzZXRtYXJrcy4KK01UQlNTICAgU3BhY2UgYmFja3dhcmQgb3ZlciBjb3VudCBzZXRtYXJrcy4KK01UV0VPRiAgV3JpdGUgY291bnQgZmlsZW1hcmtzLgorTVRXU00gICBXcml0ZSBjb3VudCBzZXRtYXJrcy4KK01UUkVXICAgUmV3aW5kIHRhcGUuCitNVE9GRkwgIFNldCBkZXZpY2Ugb2ZmIGxpbmUgKG9mdGVuIHJld2luZCBwbHVzIGVqZWN0KS4KK01UTk9QICAgRG8gbm90aGluZyBleGNlcHQgZmx1c2ggdGhlIGJ1ZmZlcnMuCitNVFJFVEVOIFJlLXRlbnNpb24gdGFwZS4KK01URU9NICAgU3BhY2UgdG8gZW5kIG9mIHJlY29yZGVkIGRhdGEuCitNVEVSQVNFIEVyYXNlIHRhcGUuIElmIHRoZSBhcmd1bWVudCBpcyB6ZXJvLCB0aGUgc2hvcnQgZXJhc2UgY29tbWFuZAorCWlzIHVzZWQuIFRoZSBsb25nIGVyYXNlIGNvbW1hbmQgaXMgdXNlZCB3aXRoIGFsbCBvdGhlciB2YWx1ZXMKKwlvZiB0aGUgYXJndW1lbnQuCitNVFNFRUsJU2VlayB0byB0YXBlIGJsb2NrIGNvdW50LiBVc2VzIFRhbmRiZXJnLWNvbXBhdGlibGUgc2VlayAoUUZBKQorICAgICAgICBmb3IgU0NTSS0xIGRyaXZlcyBhbmQgU0NTSS0yIHNlZWsgZm9yIFNDU0ktMiBkcml2ZXMuIFRoZSBmaWxlIGFuZAorCWJsb2NrIG51bWJlcnMgaW4gdGhlIHN0YXR1cyBhcmUgbm90IHZhbGlkIGFmdGVyIGEgc2Vlay4KK01UU0VUQkxLIFNldCB0aGUgZHJpdmUgYmxvY2sgc2l6ZS4gU2V0dGluZyB0byB6ZXJvIHNldHMgdGhlIGRyaXZlIGludG8KKyAgICAgICAgdmFyaWFibGUgYmxvY2sgbW9kZSAoaWYgYXBwbGljYWJsZSkuCitNVFNFVERFTlNJVFkgU2V0cyB0aGUgZHJpdmUgZGVuc2l0eSBjb2RlIHRvIGFyZy4gU2VlIGRyaXZlCisgICAgICAgIGRvY3VtZW50YXRpb24gZm9yIGF2YWlsYWJsZSBjb2Rlcy4KK01UTE9DSyBhbmQgTVRVTkxPQ0sgRXhwbGljaXRseSBsb2NrL3VubG9jayB0aGUgdGFwZSBkcml2ZSBkb29yLgorTVRMT0FEIGFuZCBNVFVOTE9BRCBFeHBsaWNpdGx5IGxvYWQgYW5kIHVubG9hZCB0aGUgdGFwZS4gSWYgdGhlCisJY29tbWFuZCBhcmd1bWVudCB4IGlzIGJldHdlZW4gTVRfU1RfSFBMT0FERVJfT0ZGU0VUICsgMSBhbmQKKwlNVF9TVF9IUExPQURFUl9PRkZTRVQgKyA2LCB0aGUgbnVtYmVyIHggaXMgdXNlZCBzZW50IHRvIHRoZQorCWRyaXZlIHdpdGggdGhlIGNvbW1hbmQgYW5kIGl0IHNlbGVjdHMgdGhlIHRhcGUgc2xvdCB0byB1c2Ugb2YKKwlIUCBDMTU1M0EgY2hhbmdlci4KK01UQ09NUFJFU1NJT04gU2V0cyBjb21wcmVzc2luZyBvciB1bmNvbXByZXNzaW5nIGRyaXZlIG1vZGUgdXNpbmcgdGhlCisJU0NTSSBtb2RlIHBhZ2UgMTUuIE5vdGUgdGhhdCBzb21lIGRyaXZlcyBvdGhlciBtZXRob2RzIGZvcgorCWNvbnRyb2wgb2YgY29tcHJlc3Npb24uIFNvbWUgZHJpdmVzIChsaWtlIHRoZSBFeGFieXRlcykgdXNlCisJZGVuc2l0eSBjb2RlcyBmb3IgY29tcHJlc3Npb24gY29udHJvbC4gU29tZSBkcml2ZXMgdXNlIGFub3RoZXIKKwltb2RlIHBhZ2UgYnV0IHRoaXMgcGFnZSBoYXMgbm90IGJlZW4gaW1wbGVtZW50ZWQgaW4gdGhlCisJZHJpdmVyLiBTb21lIGRyaXZlcyB3aXRob3V0IGNvbXByZXNzaW9uIGNhcGFiaWxpdHkgd2lsbCBhY2NlcHQKKwlhbnkgY29tcHJlc3Npb24gbW9kZSB3aXRob3V0IGVycm9yLgorTVRTRVRQQVJUIE1vdmVzIHRoZSB0YXBlIHRvIHRoZSBwYXJ0aXRpb24gZ2l2ZW4gYnkgdGhlIGFyZ3VtZW50IGF0IHRoZQorCW5leHQgdGFwZSBvcGVyYXRpb24uIFRoZSBibG9jayBhdCB3aGljaCB0aGUgdGFwZSBpcyBwb3NpdGlvbmVkCisJaXMgdGhlIGJsb2NrIHdoZXJlIHRoZSB0YXBlIHdhcyBwcmV2aW91c2x5IHBvc2l0aW9uZWQgaW4gdGhlCisJbmV3IGFjdGl2ZSBwYXJ0aXRpb24gdW5sZXNzIHRoZSBuZXh0IHRhcGUgb3BlcmF0aW9uIGlzCisJTVRTRUVLLiBJbiB0aGlzIGNhc2UgdGhlIHRhcGUgaXMgbW92ZWQgZGlyZWN0bHkgdG8gdGhlIGJsb2NrCisJc3BlY2lmaWVkIGJ5IE1UU0VFSy4gTVRTRVRQQVJUIGlzIGluYWN0aXZlIHVubGVzcworCU1UX1NUX0NBTl9QQVJUSVRJT05TIHNldC4KK01UTUtQQVJUIEZvcm1hdHMgdGhlIHRhcGUgd2l0aCBvbmUgcGFydGl0aW9uIChhcmd1bWVudCB6ZXJvKSBvciB0d28KKwlwYXJ0aXRpb25zICh0aGUgYXJndW1lbnQgZ2l2ZXMgaW4gbWVnYWJ5dGVzIHRoZSBzaXplIG9mCisJcGFydGl0aW9uIDEgdGhhdCBpcyBwaHlzaWNhbGx5IHRoZSBmaXJzdCBwYXJ0aXRpb24gb2YgdGhlCisJdGFwZSkuIFRoZSBkcml2ZSBoYXMgdG8gc3VwcG9ydCBwYXJ0aXRpb25zIHdpdGggc2l6ZSBzcGVjaWZpZWQKKwlieSB0aGUgaW5pdGlhdG9yLiBJbmFjdGl2ZSB1bmxlc3MgTVRfU1RfQ0FOX1BBUlRJVElPTlMgc2V0LgorTVRTRVREUlZCVUZGRVIKKwlJcyB1c2VkIGZvciBzZXZlcmFsIHB1cnBvc2VzLiBUaGUgY29tbWFuZCBpcyBvYnRhaW5lZCBmcm9tIGNvdW50CisgICAgICAgIHdpdGggbWFzayBNVF9TRVRfT1BUSU9OUywgdGhlIGxvdyBvcmRlciBiaXRzIGFyZSB1c2VkIGFzIGFyZ3VtZW50LgorCVRoaXMgY29tbWFuZCBpcyBvbmx5IGFsbG93ZWQgZm9yIHRoZSBzdXBlcnVzZXIgKHJvb3QpLiBUaGUKKwlzdWJjb21tYW5kcyBhcmU6CisJMAorICAgICAgICAgICBUaGUgZHJpdmUgYnVmZmVyIG9wdGlvbiBpcyBzZXQgdG8gdGhlIGFyZ3VtZW50LiBaZXJvIG1lYW5zCisgICAgICAgICAgIG5vIGJ1ZmZlcmluZy4KKyAgICAgICAgTVRfU1RfQk9PTEVBTlMKKyAgICAgICAgICAgU2V0cyB0aGUgYnVmZmVyaW5nIG9wdGlvbnMuIFRoZSBiaXRzIGFyZSB0aGUgbmV3IHN0YXRlcworICAgICAgICAgICAoZW5hYmxlZC9kaXNhYmxlZCkgdGhlIGZvbGxvd2luZyBvcHRpb25zIChpbiB0aGUKKwkgICBwYXJlbnRoZXNpcyBpcyBzcGVjaWZpZWQgd2hldGhlciB0aGUgb3B0aW9uIGlzIGdsb2JhbCBvcgorCSAgIGNhbiBiZSBzcGVjaWZpZWQgZGlmZmVyZW50bHkgZm9yIGVhY2ggbW9kZSk6CisJICAgICBNVF9TVF9CVUZGRVJfV1JJVEVTIHdyaXRlIGJ1ZmZlcmluZyAobW9kZSkKKwkgICAgIE1UX1NUX0FTWU5DX1dSSVRFUyBhc3luY2hyb25vdXMgd3JpdGVzIChtb2RlKQorICAgICAgICAgICAgIE1UX1NUX1JFQURfQUhFQUQgIHJlYWQgYWhlYWQgKG1vZGUpCisgICAgICAgICAgICAgTVRfU1RfVFdPX0ZNIHdyaXRpbmcgb2YgdHdvIGZpbGVtYXJrcyAoZ2xvYmFsKQorCSAgICAgTVRfU1RfRkFTVF9FT00gdXNpbmcgdGhlIFNDU0kgc3BhY2luZyB0byBFT0QgKGdsb2JhbCkKKwkgICAgIE1UX1NUX0FVVE9fTE9DSyBhdXRvbWF0aWMgbG9ja2luZyBvZiB0aGUgZHJpdmUgZG9vciAoZ2xvYmFsKQorICAgICAgICAgICAgIE1UX1NUX0RFRl9XUklURVMgdGhlIGRlZmF1bHRzIGFyZSBtZWFudCBvbmx5IGZvciB3cml0ZXMgKG1vZGUpCisJICAgICBNVF9TVF9DQU5fQlNSIGJhY2tzcGFjaW5nIG92ZXIgbW9yZSB0aGFuIG9uZSByZWNvcmRzIGNhbgorCQliZSB1c2VkIGZvciByZXBvc2l0aW9uaW5nIHRoZSB0YXBlIChnbG9iYWwpCisJICAgICBNVF9TVF9OT19CTEtMSU1TIHRoZSBkcml2ZXIgZG9lcyBub3QgYXNrIHRoZSBibG9jayBsaW1pdHMKKwkJZnJvbSB0aGUgZHJpdmUgKGJsb2NrIHNpemUgY2FuIGJlIGNoYW5nZWQgb25seSB0bworCQl2YXJpYWJsZSkgKGdsb2JhbCkKKwkgICAgIE1UX1NUX0NBTl9QQVJUSVRJT05TIGVuYWJsZXMgc3VwcG9ydCBmb3IgcGFydGl0aW9uZWQKKwkJdGFwZXMgKGdsb2JhbCkKKwkgICAgIE1UX1NUX1NDU0kyTE9HSUNBTCB0aGUgbG9naWNhbCBibG9jayBudW1iZXIgaXMgdXNlZCBpbgorCQl0aGUgTVRTRUVLIGFuZCBNVElPQ1BPUyBmb3IgU0NTSS0yIGRyaXZlcyBpbnN0ZWFkIG9mCisJCXRoZSBkZXZpY2UgZGVwZW5kZW50IGFkZHJlc3MuIEl0IGlzIHJlY29tbWVuZGVkIHRvIHNldAorCQl0aGlzIGZsYWcgdW5sZXNzIHRoZXJlIGFyZSB0YXBlcyB1c2luZyB0aGUgZGV2aWNlCisJCWRlcGVuZGVudCAoZnJvbSB0aGUgb2xkIHRpbWVzKSAoZ2xvYmFsKQorCSAgICAgTVRfU1RfU1lTViBzZXRzIHRoZSBTWVNWIHNlbWF0aWNzIChtb2RlKQorCSAgICAgTVRfU1RfTk9XQUlUIGVuYWJsZXMgaW1tZWRpYXRlIG1vZGUgKGkuZS4sIGRvbid0IHdhaXQgZm9yCisJICAgICAgICB0aGUgY29tbWFuZCB0byBmaW5pc2gpIGZvciBzb21lIGNvbW1hbmRzIChlLmcuLCByZXdpbmQpCisJICAgICBNVF9TVF9ERUJVR0dJTkcgZGVidWdnaW5nIChnbG9iYWw7IGRlYnVnZ2luZyBtdXN0IGJlCisJCWNvbXBpbGVkIGludG8gdGhlIGRyaXZlcikKKwlNVF9TVF9TRVRCT09MRUFOUworCU1UX1NUX0NMRUFSQk9PTEVBTlMKKwkgICBTZXRzIG9yIGNsZWFycyB0aGUgb3B0aW9uIGJpdHMuCisgICAgICAgIE1UX1NUX1dSSVRFX1RIUkVTSE9MRAorICAgICAgICAgICBTZXRzIHRoZSB3cml0ZSB0aHJlc2hvbGQgZm9yIHRoaXMgZGV2aWNlIHRvIGtpbG9ieXRlcworICAgICAgICAgICBzcGVjaWZpZWQgYnkgdGhlIGxvd2VzdCBiaXRzLgorCU1UX1NUX0RFRl9CTEtTSVpFCisJICAgRGVmaW5lcyB0aGUgZGVmYXVsdCBibG9jayBzaXplIHNldCBhdXRvbWF0aWNhbGx5LiBWYWx1ZQorCSAgIDB4ZmZmZmZmIG1lYW5zIHRoYXQgdGhlIGRlZmF1bHQgaXMgbm90IHVzZWQgYW55IG1vcmUuCisJTVRfU1RfREVGX0RFTlNJVFkKKwlNVF9TVF9ERUZfRFJWQlVGRkVSCisJICAgVXNlZCB0byBzZXQgb3IgY2xlYXIgdGhlIGRlbnNpdHkgKDggYml0cyksIGFuZCBkcml2ZSBidWZmZXIKKwkgICBzdGF0ZSAoMyBiaXRzKS4gSWYgdGhlIHZhbHVlIGlzIE1UX1NUX0NMRUFSX0RFRkFVTFQKKwkgICAoMHhmZmZmZikgdGhlIGRlZmF1bHQgd2lsbCBub3QgYmUgdXNlZCBhbnkgbW9yZS4gT3RoZXJ3aXNlCisJICAgdGhlIGxvd2VybW9zdCBiaXRzIG9mIHRoZSB2YWx1ZSBjb250YWluIHRoZSBuZXcgdmFsdWUgb2YKKwkgICB0aGUgcGFyYW1ldGVyLgorCU1UX1NUX0RFRl9DT01QUkVTU0lPTgorCSAgIFRoZSBjb21wcmVzc2lvbiBkZWZhdWx0IHdpbGwgbm90IGJlIHVzZWQgaWYgdGhlIHZhbHVlIG9mCisJICAgdGhlIGxvd2VybW9zdCBieXRlIGlzIDB4ZmYuIE90aGVyd2lzZSB0aGUgbG93ZXJtb3N0IGJpdAorCSAgIGNvbnRhaW5zIHRoZSBuZXcgZGVmYXVsdC4gSWYgdGhlIGJpdHMgOC0xNSBhcmUgc2V0IHRvIGEKKwkgICBub24temVybyBudW1iZXIsIGFuZCB0aGlzIG51bWJlciBpcyBub3QgMHhmZiwgdGhlIG51bWJlciBpcworCSAgIHVzZWQgYXMgdGhlIGNvbXByZXNzaW9uIGFsZ29yaXRobS4gVGhlIHZhbHVlCisJICAgTVRfU1RfQ0xFQVJfREVGQVVMVCBjYW4gYmUgdXNlZCB0byBjbGVhciB0aGUgY29tcHJlc3Npb24KKwkgICBkZWZhdWx0LgorCU1UX1NUX1NFVF9USU1FT1VUCisJICAgU2V0IHRoZSBub3JtYWwgdGltZW91dCBpbiBzZWNvbmRzIGZvciB0aGlzIGRldmljZS4gVGhlCisJICAgZGVmYXVsdCBpcyA5MDAgc2Vjb25kcyAoMTUgbWludXRlcykuIFRoZSB0aW1lb3V0IHNob3VsZCBiZQorCSAgIGxvbmcgZW5vdWdoIGZvciB0aGUgcmV0cmllcyBkb25lIGJ5IHRoZSBkZXZpY2Ugd2hpbGUKKwkgICByZWFkaW5nL3dyaXRpbmcuCisJTVRfU1RfU0VUX0xPTkdfVElNRU9VVAorCSAgIFNldCB0aGUgbG9uZyB0aW1lb3V0IHRoYXQgaXMgdXNlZCBmb3Igb3BlcmF0aW9ucyB0aGF0IGFyZQorCSAgIGtub3duIHRvIHRha2UgYSBsb25nIHRpbWUuIFRoZSBkZWZhdWx0IGlzIDE0MDAwIHNlY29uZHMKKwkgICAoMy45IGhvdXJzKS4gRm9yIGVyYXNlIHRoaXMgdmFsdWUgaXMgZnVydGhlciBtdWx0aXBsaWVkIGJ5CisJICAgZWlnaHQuCisJTVRfU1RfU0VUX0NMTgorCSAgIFNldCB0aGUgY2xlYW5pbmcgcmVxdWVzdCBpbnRlcnByZXRhdGlvbiBwYXJhbWV0ZXJzIHVzaW5nCisJICAgdGhlIGxvd2VzdCAyNCBiaXRzIG9mIHRoZSBhcmd1bWVudC4gVGhlIGRyaXZlciBjYW4gc2V0IHRoZQorCSAgIGdlbmVyaWMgc3RhdHVzIGJpdCBHTVRfQ0xOIGlmIGEgY2xlYW5pbmcgcmVxdWVzdCBiaXQgcGF0dGVybgorCSAgIGlzIGZvdW5kIGZyb20gdGhlIGV4dGVuZGVkIHNlbnNlIGRhdGEuIE1hbnkgZHJpdmVzIHNldCBvbmUgb3IKKwkgICBtb3JlIGJpdHMgaW4gdGhlIGV4dGVuZGVkIHNlbnNlIGRhdGEgd2hlbiB0aGUgZHJpdmUgbmVlZHMKKwkgICBjbGVhbmluZy4gVGhlIGJpdHMgYXJlIGRldmljZS1kZXBlbmRlbnQuIFRoZSBkcml2ZXIgaXMKKwkgICBnaXZlbiB0aGUgbnVtYmVyIG9mIHRoZSBzZW5zZSBkYXRhIGJ5dGUgKHRoZSBsb3dlc3QgZWlnaHQKKwkgICBiaXRzIG9mIHRoZSBhcmd1bWVudDsgbXVzdCBiZSA+PSAxOCAodmFsdWVzIDEgLSAxNworCSAgIHJlc2VydmVkKSBhbmQgPD0gdGhlIG1heGltdW0gcmVxdWVzdGVkIHNlbnNlIGRhdGEgc2l4ZSksIAorCSAgIGEgbWFzayB0byBzZWxlY3QgdGhlIHJlbGV2YW50IGJpdHMgKHRoZSBiaXRzIDktMTYpLCBhbmQgdGhlCisJICAgYml0IHBhdHRlcm4gKGJpdHMgMTctMjMpLiBJZiB0aGUgYml0IHBhdHRlcm4gaXMgemVybywgb25lCisJICAgb3IgbW9yZSBiaXRzIHVuZGVyIHRoZSBtYXNrIGluZGljYXRlIGNsZWFuaW5nIHJlcXVlc3QuIElmCisJICAgdGhlIHBhdHRlcm4gaXMgbm9uLXplcm8sIHRoZSBwYXR0ZXJuIG11c3QgbWF0Y2ggdGhlIG1hc2tlZAorCSAgIHNlbnNlIGRhdGEgYnl0ZS4KKworCSAgIChUaGUgY2xlYW5pbmcgYml0IGlzIHNldCBpZiB0aGUgYWRkaXRpb25hbCBzZW5zZSBjb2RlIGFuZAorCSAgIHF1YWxpZmllciAwMGggMTdoIGFyZSBzZWVuIHJlZ2FyZGxlc3Mgb2YgdGhlIHNldHRpbmcgb2YKKwkgICBNVF9TVF9TRVRfQ0xOLikKKworVGhlIGZvbGxvd2luZyBpb2N0bCB1c2VzIHRoZSBzdHJ1Y3R1cmUgbXRwb3M6CitNVElPQ1BPUyBSZWFkcyB0aGUgY3VycmVudCBwb3NpdGlvbiBmcm9tIHRoZSBkcml2ZS4gVXNlcworICAgICAgICBUYW5kYmVyZy1jb21wYXRpYmxlIFFGQSBmb3IgU0NTSS0xIGRyaXZlcyBhbmQgdGhlIFNDU0ktMgorICAgICAgICBjb21tYW5kIGZvciB0aGUgU0NTSS0yIGRyaXZlcy4KKworVGhlIGZvbGxvd2luZyBpb2N0bCB1c2VzIHRoZSBzdHJ1Y3R1cmUgbXRnZXQgdG8gcmV0dXJuIHRoZSBzdGF0dXM6CitNVElPQ0dFVCBSZXR1cm5zIHNvbWUgc3RhdHVzIGluZm9ybWF0aW9uLgorICAgICAgICBUaGUgZmlsZSBudW1iZXIgYW5kIGJsb2NrIG51bWJlciB3aXRoaW4gZmlsZSBhcmUgcmV0dXJuZWQuIFRoZQorICAgICAgICBibG9jayBpcyAtMSB3aGVuIGl0IGNhbid0IGJlIGRldGVybWluZWQgKGUuZy4sIGFmdGVyIE1UQlNGKS4KKyAgICAgICAgVGhlIGRyaXZlIHR5cGUgaXMgZWl0aGVyIE1USVNTQ1NJMSBvciBNVElTU0NTSTIuCisgICAgICAgIFRoZSBudW1iZXIgb2YgcmVjb3ZlcmVkIGVycm9ycyBzaW5jZSB0aGUgcHJldmlvdXMgc3RhdHVzIGNhbGwKKyAgICAgICAgaXMgc3RvcmVkIGluIHRoZSBsb3dlciB3b3JkIG9mIHRoZSBmaWVsZCBtdF9lcnJlZy4KKyAgICAgICAgVGhlIGN1cnJlbnQgYmxvY2sgc2l6ZSBhbmQgdGhlIGRlbnNpdHkgY29kZSBhcmUgc3RvcmVkIGluIHRoZSBmaWVsZAorICAgICAgICBtdF9kc3JlZyAoc2hpZnRzIGZvciB0aGUgc3ViZmllbGRzIGFyZSBNVF9TVF9CTEtTSVpFX1NISUZUIGFuZAorICAgICAgICBNVF9TVF9ERU5TSVRZX1NISUZUKS4KKwlUaGUgR01UX3h4eCBzdGF0dXMgYml0cyByZWZsZWN0IHRoZSBkcml2ZSBzdGF0dXMuIEdNVF9EUl9PUEVOCisJaXMgc2V0IGlmIHRoZXJlIGlzIG5vIHRhcGUgaW4gdGhlIGRyaXZlLiBHTVRfRU9EIG1lYW5zIGVpdGhlcgorCWVuZCBvZiByZWNvcmRlZCBkYXRhIG9yIGVuZCBvZiB0YXBlLiBHTVRfRU9UIG1lYW5zIGVuZCBvZiB0YXBlLgorCisKK01JU0NFTExBTkVPVVMgQ09NUElMRSBPUFRJT05TCisKK1RoZSByZWNvdmVyZWQgd3JpdGUgZXJyb3JzIGFyZSBjb25zaWRlcmVkIGZhdGFsIGlmIFNUX1JFQ09WRVJFRF9XUklURV9GQVRBTAoraXMgZGVmaW5lZC4KKworVGhlIG1heGltdW0gbnVtYmVyIG9mIHRhcGUgZGV2aWNlcyBpcyBkZXRlcm1pbmVkIGJ5IHRoZSBkZWZpbmUKK1NUX01BWF9UQVBFUy4gSWYgbW9yZSB0YXBlcyBhcmUgZGV0ZWN0ZWQgYXQgZHJpdmVyIGluaXRpYWxpemF0aW9uLCB0aGUKK21heGltdW0gaXMgYWRqdXN0ZWQgYWNjb3JkaW5nbHkuCisKK0ltbWVkaWF0ZSByZXR1cm4gZnJvbSB0YXBlIHBvc2l0aW9uaW5nIFNDU0kgY29tbWFuZHMgY2FuIGJlIGVuYWJsZWQgYnkKK2RlZmluaW5nIFNUX05PV0FJVC4gSWYgdGhpcyBpcyBkZWZpbmVkLCB0aGUgdXNlciBzaG91bGQgdGFrZSBjYXJlIHRoYXQKK3RoZSBuZXh0IHRhcGUgb3BlcmF0aW9uIGlzIG5vdCBzdGFydGVkIGJlZm9yZSB0aGUgcHJldmlvdXMgb25lIGhhcworZmluaXNoZWQuIFRoZSBkcml2ZXMgYW5kIFNDU0kgYWRhcHRlcnMgc2hvdWxkIGhhbmRsZSB0aGlzIGNvbmRpdGlvbgorZ3JhY2VmdWxseSwgYnV0IHNvbWUgZHJpdmUvYWRhcHRlciBjb21iaW5hdGlvbnMgYXJlIGtub3duIHRvIGhhbmcgdGhlCitTQ1NJIGJ1cyBpbiB0aGlzIGNhc2UuCisKK1RoZSBNVEVPTSBjb21tYW5kIGlzIGJ5IGRlZmF1bHQgaW1wbGVtZW50ZWQgYXMgc3BhY2luZyBvdmVyIDMyNzY3CitmaWxlbWFya3MuIFdpdGggdGhpcyBtZXRob2QgdGhlIGZpbGUgbnVtYmVyIGluIHRoZSBzdGF0dXMgaXMKK2NvcnJlY3QuIFRoZSB1c2VyIGNhbiByZXF1ZXN0IHVzaW5nIGRpcmVjdCBzcGFjaW5nIHRvIEVPRCBieSBzZXR0aW5nCitTVF9GQVNUX0VPTSAxIChvciB1c2luZyB0aGUgTVRfU1RfT1BUSU9OUyBpb2N0bCkuIEluIHRoaXMgY2FzZSB0aGUgZmlsZQorbnVtYmVyIHdpbGwgYmUgaW52YWxpZC4KKworV2hlbiB1c2luZyByZWFkIGFoZWFkIG9yIGJ1ZmZlcmVkIHdyaXRlcyB0aGUgcG9zaXRpb24gd2l0aGluIHRoZSBmaWxlCittYXkgbm90IGJlIGNvcnJlY3QgYWZ0ZXIgdGhlIGZpbGUgaXMgY2xvc2VkIChjb3JyZWN0IHBvc2l0aW9uIG1heQorcmVxdWlyZSBiYWNrc3BhY2luZyBvdmVyIG1vcmUgdGhhbiBvbmUgcmVjb3JkKS4gVGhlIGNvcnJlY3QgcG9zaXRpb24KK3dpdGhpbiBmaWxlIGNhbiBiZSBvYnRhaW5lZCBpZiBTVF9JTl9GSUxFX1BPUyBpcyBkZWZpbmVkIGF0IGNvbXBpbGUKK3RpbWUgb3IgdGhlIE1UX1NUX0NBTl9CU1IgYml0IGlzIHNldCBmb3IgdGhlIGRyaXZlIHdpdGggYW4gaW9jdGwuCisoVGhlIGRyaXZlciBhbHdheXMgYmFja3Mgb3ZlciBhIGZpbGVtYXJrIGNyb3NzZWQgYnkgcmVhZCBhaGVhZCBpZiB0aGUKK3VzZXIgZG9lcyBub3QgcmVxdWVzdCBkYXRhIHRoYXQgZmFyLikKKworCitERUJVR0dJTkcgSElOVFMKKworVG8gZW5hYmxlIGRlYnVnZ2luZyBtZXNzYWdlcywgZWRpdCBzdC5jIGFuZCAjZGVmaW5lIERFQlVHIDEuIEFzIHNlZW4KK2Fib3ZlLCBkZWJ1Z2dpbmcgY2FuIGJlIHN3aXRjaGVkIG9mZiB3aXRoIGFuIGlvY3RsIGlmIGRlYnVnZ2luZyBpcworY29tcGlsZWQgaW50byB0aGUgZHJpdmVyLiBUaGUgZGVidWdnaW5nIG91dHB1dCBpcyBub3Qgdm9sdW1pbm91cy4KKworSWYgdGhlIHRhcGUgc2VlbXMgdG8gaGFuZywgSSB3b3VsZCBiZSB2ZXJ5IGludGVyZXN0ZWQgdG8gaGVhciB3aGVyZQordGhlIGRyaXZlciBpcyB3YWl0aW5nLiBXaXRoIHRoZSBjb21tYW5kICdwcyAtbCcgeW91IGNhbiBzZWUgdGhlIHN0YXRlCitvZiB0aGUgcHJvY2VzcyB1c2luZyB0aGUgdGFwZS4gSWYgdGhlIHN0YXRlIGlzIEQsIHRoZSBwcm9jZXNzIGlzCit3YWl0aW5nIGZvciBzb21ldGhpbmcuIFRoZSBmaWVsZCBXQ0hBTiB0ZWxscyB3aGVyZSB0aGUgZHJpdmVyIGlzCit3YWl0aW5nLiBJZiB5b3UgaGF2ZSB0aGUgY3VycmVudCBTeXN0ZW0ubWFwIGluIHRoZSBjb3JyZWN0IHBsYWNlIChpbgorL2Jvb3QgZm9yIHRoZSBwcm9jcHMgSSB1c2UpIG9yIGhhdmUgdXBkYXRlZCAvZXRjL3BzZGF0YWJhc2UgKGZvciBrbWVtCitwcyksIHBzIHdyaXRlcyB0aGUgZnVuY3Rpb24gbmFtZSBpbiB0aGUgV0NIQU4gZmllbGQuIElmIG5vdCwgeW91IGhhdmUKK3RvIGxvb2sgdXAgdGhlIGZ1bmN0aW9uIGZyb20gU3lzdGVtLm1hcC4KKworTm90ZSBhbHNvIHRoYXQgdGhlIHRpbWVvdXRzIGFyZSB2ZXJ5IGxvbmcgY29tcGFyZWQgdG8gbW9zdCBvdGhlcgorZHJpdmVycy4gVGhpcyBtZWFucyB0aGF0IHRoZSBMaW51eCBkcml2ZXIgbWF5IGFwcGVhciBodW5nIGFsdGhvdWdoIHRoZQorcmVhbCByZWFzb24gaXMgdGhhdCB0aGUgdGFwZSBmaXJtd2FyZSBoYXMgZ290IGNvbmZ1c2VkLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9zY3NpL3N5bTUzYzUwMF9jcy50eHQgYi9Eb2N1bWVudGF0aW9uL3Njc2kvc3ltNTNjNTAwX2NzLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NWZlYmNmCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9zY3NpL3N5bTUzYzUwMF9jcy50eHQKQEAgLTAsMCArMSwyMyBAQAorVGhlIHN5bTUzYzUwMF9jcyBkcml2ZXIgb3JpZ2luYXRlZCBhcyBhbiBhZGQtb24gdG8gRGF2aWQgSGluZHMnIHBjbWNpYS1jcworcGFja2FnZSwgYW5kIHdhcyB3cml0dGVuIGJ5IFRvbSBDb3JuZXIgKHRjb3JuZXJAdmlhLmF0KS4gIEEgcmV3cml0ZSB3YXMKK2xvbmcgb3ZlcmR1ZSwgYW5kIHRoZSBjdXJyZW50IHZlcnNpb24gYWRkcmVzc2VzIHRoZSBmb2xsb3dpbmcgY29uY2VybnM6CisKKwkoMSkgZXh0ZW5zaXZlIGtlcm5lbCBjaGFuZ2VzIGJldHdlZW4gMi40IGFuZCAyLjYuCisJKDIpIGRlcHJlY2F0ZWQgUENNQ0lBIHN1cHBvcnQgb3V0c2lkZSB0aGUga2VybmVsLgorCitBbGwgdGhlIFVTRV9CSU9TIGNvZGUgaGFzIGJlZW4gcmlwcGVkIG91dC4gIEl0IHdhcyBuZXZlciB1c2VkLCBhbmQgY291bGQKK25vdCBoYXZlIHdvcmtlZCBhbnl3YXkuICBUaGUgVVNFX0RNQSBjb2RlIGlzIGxpa2V3aXNlIGdvbmUuICBNYW55IHRoYW5rcwordG8gWU9LT1RBIEhpcm9zaGkgKG5zcF9jcyBkcml2ZXIpIGFuZCBEYXZpZCBIaW5kcyAocWxvZ2ljX2NzIGRyaXZlcikgZm9yCit0aGUgY29kZSBmcmFnbWVudHMgSSBzaGFtZWxlc3NseSBhZGFwdGVkIGZvciB0aGlzIHdvcmsuICBUaGFua3MgYWxzbyB0bworQ2hyaXN0b3BoIEhlbGx3aWcgZm9yIGhpcyBwYXRpZW50IHR1dGVsYWdlIHdoaWxlIEkgc3R1bWJsZWQgYWJvdXQuCisKK1RoZSBTeW1iaW9zIExvZ2ljIDUzYzUwMCBjaGlwIHdhcyB1c2VkIGluIHRoZSAibmV3ZXIiIChjaXJjYSAxOTk3KSB2ZXJzaW9uCitvZiB0aGUgTmV3IE1lZGlhIEJ1cyBUb2FzdGVyIFBDTUNJQSBTQ1NJIGNvbnRyb2xsZXIuICBQcmVzdW1hYmx5IHRoZXJlIGFyZQorb3RoZXIgcHJvZHVjdHMgdXNpbmcgdGhpcyBjaGlwLCBidXQgSSd2ZSBuZXZlciBsYWlkIGV5ZXMgKG11Y2ggbGVzcyBoYW5kcykKK29uIG9uZS4KKworVGhyb3VnaCB0aGUgeWVhcnMsIHRoZXJlIGhhdmUgYmVlbiBhIG51bWJlciBvZiBkb3dubG9hZHMgb2YgdGhlIHBjbWNpYS1jcwordmVyc2lvbiBvZiB0aGlzIGRyaXZlciwgYW5kIEkgZ3Vlc3MgaXQgd29ya2VkIGZvciB0aG9zZSB1c2Vycy4gIEl0IHdvcmtlZAorZm9yIFRvbSBDb3JuZXIsIGFuZCBpdCB3b3JrcyBmb3IgbWUuICBZb3VyIG1pbGVhZ2Ugd2lsbCBwcm9iYWJseSB2YXJ5LgorCistLUJvYiBUcmFjeSAocmN0QGZydXMuY29tKQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9zY3NpL3N5bTUzYzh4eF8yLnR4dCBiL0RvY3VtZW50YXRpb24vc2NzaS9zeW01M2M4eHhfMi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2Y1MTZjZAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vc2NzaS9zeW01M2M4eHhfMi50eHQKQEAgLTAsMCArMSwxMDU5IEBACitUaGUgTGludXggU1lNLTIgZHJpdmVyIGRvY3VtZW50YXRpb24gZmlsZQorCitXcml0dGVuIGJ5IEdlcmFyZCBSb3VkaWVyIDxncm91ZGllckBmcmVlLmZyPgorMjEgUnVlIENhcm5vdAorOTUxNzAgREVVSUwgTEEgQkFSUkUgLSBGUkFOQ0UKKworVXBkYXRlZCBieSBNYXR0aGV3IFdpbGNveCA8bWF0dGhld0B3aWwuY3g+CisKKzIwMDQtMTAtMDkKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworMS4gIEludHJvZHVjdGlvbgorMi4gIFN1cHBvcnRlZCBjaGlwcyBhbmQgU0NTSSBmZWF0dXJlcworMy4gIEFkdmFudGFnZXMgb2YgdGhpcyBkcml2ZXIgZm9yIG5ld2VyIGNoaXBzLgorICAgICAgMy4xIE9wdGltaXplZCBTQ1NJIFNDUklQVFMKKyAgICAgIDMuMiBOZXcgZmVhdHVyZXMgYXBwZWFyZWQgd2l0aCB0aGUgU1lNNTNDODk2Cis0LiAgTWVtb3J5IG1hcHBlZCBJL08gdmVyc3VzIG5vcm1hbCBJL08KKzUuICBUYWdnZWQgY29tbWFuZCBxdWV1ZWluZworNi4gIFBhcml0eSBjaGVja2luZworNy4gIFByb2ZpbGluZyBpbmZvcm1hdGlvbgorOC4gIENvbnRyb2wgY29tbWFuZHMKKyAgICAgIDguMSAgU2V0IG1pbmltdW0gc3luY2hyb25vdXMgcGVyaW9kCisgICAgICA4LjIgIFNldCB3aWRlIHNpemUKKyAgICAgIDguMyAgU2V0IG1heGltdW0gbnVtYmVyIG9mIGNvbmN1cnJlbnQgdGFnZ2VkIGNvbW1hbmRzCisgICAgICA4LjQgIFNldCBkZWJ1ZyBtb2RlCisgICAgICA4LjUgIFNldCBmbGFnIChub19kaXNjKQorICAgICAgOC42ICBTZXQgdmVyYm9zZSBsZXZlbAorICAgICAgOC43ICBSZXNldCBhbGwgbG9naWNhbCB1bml0cyBvZiBhIHRhcmdldAorICAgICAgOC44ICBBYm9ydCBhbGwgdGFza3Mgb2YgYWxsIGxvZ2ljYWwgdW5pdHMgb2YgYSB0YXJnZXQKKzkuICBDb25maWd1cmF0aW9uIHBhcmFtZXRlcnMKKzEwLiBCb290IHNldHVwIGNvbW1hbmRzCisgICAgICAxMC4xIFN5bnRheAorICAgICAgMTAuMiBBdmFpbGFibGUgYXJndW1lbnRzCisgICAgICAgICAgICAgMTAuMi4xICBEZWZhdWx0IG51bWJlciBvZiB0YWdnZWQgY29tbWFuZHMKKyAgICAgICAgICAgICAxMC4yLjIgIEJ1cnN0IG1heAorICAgICAgICAgICAgIDEwLjIuMyAgTEVEIHN1cHBvcnQKKyAgICAgICAgICAgICAxMC4yLjQgIERpZmZlcmVudGlhbCBtb2RlCisgICAgICAgICAgICAgMTAuMi41ICBJUlEgbW9kZQorICAgICAgICAgICAgIDEwLjIuNiAgQ2hlY2sgU0NTSSBCVVMgCisgICAgICAgICAgICAgMTAuMi43ICBTdWdnZXN0IGEgZGVmYXVsdCBTQ1NJIGlkIGZvciBob3N0cworICAgICAgICAgICAgIDEwLjIuOCAgVmVyYm9zaXR5IGxldmVsCisgICAgICAgICAgICAgMTAuMi45ICBEZWJ1ZyBtb2RlCisgICAgICAgICAgICAgMTAuMi4xMCBTZXR0bGUgZGVsYXkKKyAgICAgICAgICAgICAxMC4yLjExIFNlcmlhbCBOVlJBTQorICAgICAgICAgICAgIDEwLjIuMTIgRXhjbHVkZSBhIGhvc3QgZnJvbSBiZWluZyBhdHRhY2hlZAorICAgICAgMTAuMyBDb252ZXJ0aW5nIGZyb20gb2xkIG9wdGlvbnMKKyAgICAgIDEwLjQgU0NTSSBCVVMgY2hlY2tpbmcgYm9vdCBvcHRpb24KKzExLiBTQ1NJIHByb2JsZW0gdHJvdWJsZXNob290aW5nCisgICAgICAxNS4xIFByb2JsZW0gdHJhY2tpbmcKKyAgICAgIDE1LjIgVW5kZXJzdGFuZGluZyBoYXJkd2FyZSBlcnJvciByZXBvcnRzCisxMi4gU2VyaWFsIE5WUkFNIHN1cHBvcnQgKGJ5IFJpY2hhcmQgV2FsdGhhbSkKKyAgICAgIDE3LjEgRmVhdHVyZXMKKyAgICAgIDE3LjIgU3ltYmlvcyBOVlJBTSBsYXlvdXQKKyAgICAgIDE3LjMgVGVrcmFtICBOVlJBTSBsYXlvdXQKKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisxLiBJbnRyb2R1Y3Rpb24KKworVGhpcyBkcml2ZXIgc3VwcG9ydHMgdGhlIHdob2xlIFNZTTUzQzhYWCBmYW1pbHkgb2YgUENJLVNDU0kgY29udHJvbGxlcnMuCitJdCBhbHNvIHN1cHBvcnQgdGhlIHN1YnNldCBvZiBMU0k1M0MxMFhYIFBDSS1TQ1NJIGNvbnRyb2xsZXJzIHRoYXQgYXJlIGJhc2VkIAorb24gdGhlIFNZTTUzQzhYWCBTQ1JJUFRTIGxhbmd1YWdlLgorCitJdCByZXBsYWNlcyB0aGUgc3ltNTNjOHh4K25jcjUzYzh4eCBkcml2ZXIgYnVuZGxlIGFuZCBzaGFyZXMgaXRzIGNvcmUgY29kZSAKK3dpdGggdGhlIEZyZWVCU0QgU1lNLTIgZHJpdmVyLiBUaGUgYGdsdWUnIHRoYXQgYWxsb3dzIHRoaXMgZHJpdmVyIHRvIHdvcmsgCit1bmRlciBMaW51eCBpcyBjb250YWluZWQgaW4gMiBmaWxlcyBuYW1lZCBzeW1fZ2x1ZS5oIGFuZCBzeW1fZ2x1ZS5jLgorT3RoZXIgZHJpdmVycyBmaWxlcyBhcmUgaW50ZW5kZWQgbm90IHRvIGRlcGVuZCBvbiB0aGUgT3BlcmF0aW5nIFN5c3RlbSAKK29uIHdoaWNoIHRoZSBkcml2ZXIgaXMgdXNlZC4KKworVGhlIGhpc3Rvcnkgb2YgdGhpcyBkcml2ZXIgY2FuIGJlIHN1bW1lcml6ZWQgYXMgZm9sbG93czoKKworMTk5MzogbmNyIGRyaXZlciB3cml0dGVuIGZvciAzODZic2QgYW5kIEZyZWVCU0QgYnk6CisgICAgICAgICAgV29sZmdhbmcgU3RhbmdsbWVpZXIgICAgICAgIDx3b2xmQGNvbG9nbmUuZGU+CisgICAgICAgICAgU3RlZmFuIEVzc2VyICAgICAgICAgICAgICAgIDxzZUBtaS5VbmktS29lbG4uZGU+CisKKzE5OTY6IHBvcnQgb2YgdGhlIG5jciBkcml2ZXIgdG8gTGludXgtMS4yLjEzIGFuZCByZW5hbWUgaXQgbmNyNTNjOHh4LgorICAgICAgICAgIEdlcmFyZCBSb3VkaWVyCisKKzE5OTg6IG5ldyBzeW01M2M4eHggZHJpdmVyIGZvciBMaW51eCBiYXNlZCBvbiBMT0FEL1NUT1JFIGluc3RydWN0aW9uIGFuZCB0aGF0IAorICAgICAgYWRkcyBmdWxsIHN1cHBvcnQgZm9yIHRoZSA4OTYgYnV0IGRyb3BzIHN1cHBvcnQgZm9yIGVhcmx5IE5DUiBkZXZpY2VzLgorICAgICAgICAgIEdlcmFyZCBSb3VkaWVyCisKKzE5OTk6IHBvcnQgb2YgdGhlIHN5bTUzYzh4eCBkcml2ZXIgdG8gRnJlZUJTRCBhbmQgc3VwcG9ydCBmb3IgdGhlIExTSTUzQzEwMTAgCisgICAgICAzMyBNSHogYW5kIDY2TUh6IFVsdHJhLTMgY29udHJvbGxlcnMuIFRoZSBuZXcgZHJpdmVyIGlzIG5hbWVkIGBzeW0nLgorICAgICAgICAgIEdlcmFyZCBSb3VkaWVyCisKKzIwMDA6IEFkZCBzdXBwb3J0IGZvciBlYXJseSBOQ1IgZGV2aWNlcyB0byBGcmVlQlNEIGBzeW0nIGRyaXZlci4KKyAgICAgIEJyZWFrIHRoZSBkcml2ZXIgaW50byBzZXZlcmFsIHNvdXJjZXMgYW5kIHNlcGFyYXRlIHRoZSBPUyBnbHVlIAorICAgICAgY29kZSBmcm9tIHRoZSBjb3JlIGNvZGUgdGhhdCBjYW4gYmUgc2hhcmVkIGFtb25nIGRpZmZlcmVudCBPL1Nlcy4KKyAgICAgIFdyaXRlIGEgZ2x1ZSBjb2RlIGZvciBMaW51eC4KKyAgICAgICAgICBHZXJhcmQgUm91ZGllcgorCisyMDA0OiBSZW1vdmUgRnJlZUJTRCBjb21wYXRpYmlsaXR5IGNvZGUuICBSZW1vdmUgc3VwcG9ydCBmb3IgdmVyc2lvbnMgb2YKKyAgICAgIExpbnV4IGJlZm9yZSAyLjYuICBTdGFydCB1c2luZyBMaW51eCBmYWNpbGl0aWVzLgorCitUaGlzIFJFQURNRSBmaWxlIGFkZHJlc3NlcyB0aGUgTGludXggdmVyc2lvbiBvZiB0aGUgZHJpdmVyLiBVbmRlciBGcmVlQlNELCAKK3RoZSBkcml2ZXIgZG9jdW1lbnRhdGlvbiBpcyB0aGUgc3ltLjggbWFuIHBhZ2UuCisKK0luZm9ybWF0aW9uIGFib3V0IG5ldyBjaGlwcyBpcyBhdmFpbGFibGUgYXQgTFNJTE9HSUMgd2ViIHNlcnZlcjoKKworICAgICAgICAgIGh0dHA6Ly93d3cubHNpbG9naWMuY29tLworCitTQ1NJIHN0YW5kYXJkIGRvY3VtZW50YXRpb25zIGFyZSBhdmFpbGFibGUgYXQgVDEwIHNpdGU6CisKKyAgICAgICAgICBodHRwOi8vd3d3LnQxMC5vcmcvCisKK1VzZWZ1bCBTQ1NJIHRvb2xzIHdyaXR0ZW4gYnkgRXJpYyBZb3VuZ2RhbGUgYXJlIHBhcnQgb2YgbW9zdCBMaW51eCAKK2Rpc3RyaWJ1dGlvbnM6CisgICBzY3NpaW5mbzogICAgY29tbWFuZCBsaW5lIHRvb2wKKyAgIHNjc2ktY29uZmlnOiBUQ0wvVGsgdG9vbCB1c2luZyBzY3NpaW5mbworCisyLiBTdXBwb3J0ZWQgY2hpcHMgYW5kIFNDU0kgZmVhdHVyZXMKKworVGhlIGZvbGxvd2luZyBmZWF0dXJlcyBhcmUgc3VwcG9ydGVkIGZvciBhbGwgY2hpcHM6CisKKwlTeW5jaHJvbm91cyBuZWdvdGlhdGlvbgorCURpc2Nvbm5lY3Rpb24KKwlUYWdnZWQgY29tbWFuZCBxdWV1aW5nCisJU0NTSSBwYXJpdHkgY2hlY2tpbmcKKwlQQ0kgTWFzdGVyIHBhcml0eSBjaGVja2luZworCitPdGhlciBmZWF0dXJlcyBkZXBlbmRzIG9uIGNoaXAgY2FwYWJpbGl0aWVzLgorVGhlIGRyaXZlciBub3RhYmx5IHVzZXMgb3B0aW1pemVkIFNDUklQVFMgZm9yIGRldmljZXMgdGhhdCBzdXBwb3J0IAorTE9BRC9TVE9SRSBhbmQgaGFuZGxlcyBQSEFTRSBNSVNNQVRDSCBmcm9tIFNDUklQVFMgZm9yIGRldmljZXMgdGhhdCAKK3N1cHBvcnQgdGhlIGNvcnJlc3BvbmRpbmcgZmVhdHVyZS4KKworVGhlIGZvbGxvd2luZyB0YWJsZSBzaG93cyBzb21lIGNoYXJhY3RlcmlzdGljcyBvZiB0aGUgY2hpcCBmYW1pbHkuCisKKyAgICAgICBPbiBib2FyZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTE9BRC9TVE9SRSAgIEhBUkRXQVJFCitDaGlwICAgU0RNUyBCSU9TICAgV2lkZSAgIFNDU0kgc3RkLiAgIE1heC4gc3luYyAgIFNDUklQVFMgICAgICBQSEFTRSBNSVNNQVRDSAorLS0tLSAgIC0tLS0tLS0tLSAgIC0tLS0gICAtLS0tLS0tLS0gICAtLS0tLS0tLS0tICAtLS0tLS0tLS0tICAgLS0tLS0tLS0tLS0tLS0KKzgxMCAgICAgICAgTiAgICAgICAgIE4gICAgICBGQVNUMTAgICAgMTAgTUIvcyAgICAgICAgTiAgICAgICAgICAgICBOCis4MTBBICAgICAgIE4gICAgICAgICBOICAgICAgRkFTVDEwICAgIDEwIE1CL3MgICAgICAgIFkgICAgICAgICAgICAgTgorODE1ICAgICAgICBZICAgICAgICAgTiAgICAgIEZBU1QxMCAgICAxMCBNQi9zICAgICAgICBOICAgICAgICAgICAgIE4KKzgyNSAgICAgICAgWSAgICAgICAgIFkgICAgICBGQVNUMTAgICAgMjAgTUIvcyAgICAgICAgTiAgICAgICAgICAgICBOCis4MjVBICAgICAgIFkgICAgICAgICBZICAgICAgRkFTVDEwICAgIDIwIE1CL3MgICAgICAgIFkgICAgICAgICAgICAgTgorODYwICAgICAgICBOICAgICAgICAgTiAgICAgIEZBU1QyMCAgICAyMCBNQi9zICAgICAgICBZICAgICAgICAgICAgIE4KKzg3NSAgICAgICAgWSAgICAgICAgIFkgICAgICBGQVNUMjAgICAgNDAgTUIvcyAgICAgICAgWSAgICAgICAgICAgICBOCis4NzVBICAgICAgIFkgICAgICAgICBZICAgICAgRkFTVDIwICAgIDQwIE1CL3MgICAgICAgIFkgICAgICAgICAgICAgWQorODc2ICAgICAgICBZICAgICAgICAgWSAgICAgIEZBU1QyMCAgICA0MCBNQi9zICAgICAgICBZICAgICAgICAgICAgIE4KKzg5NSAgICAgICAgWSAgICAgICAgIFkgICAgICBGQVNUNDAgICAgODAgTUIvcyAgICAgICAgWSAgICAgICAgICAgICBOCis4OTVBICAgICAgIFkgICAgICAgICBZICAgICAgRkFTVDQwICAgIDgwIE1CL3MgICAgICAgIFkgICAgICAgICAgICAgWQorODk2ICAgICAgICBZICAgICAgICAgWSAgICAgIEZBU1Q0MCAgICA4MCBNQi9zICAgICAgICBZICAgICAgICAgICAgIFkKKzg5NyAgICAgICAgWSAgICAgICAgIFkgICAgICBGQVNUNDAgICAgODAgTUIvcyAgICAgICAgWSAgICAgICAgICAgICBZCisxNTEwRCAgICAgIFkgICAgICAgICBZICAgICAgRkFTVDQwICAgIDgwIE1CL3MgICAgICAgIFkgICAgICAgICAgICAgWQorMTAxMCAgICAgICBZICAgICAgICAgWSAgICAgIEZBU1Q4MCAgIDE2MCBNQi9zICAgICAgICBZICAgICAgICAgICAgIFkKKzEwMTBfNjYqICAgWSAgICAgICAgIFkgICAgICBGQVNUODAgICAxNjAgTUIvcyAgICAgICAgWSAgICAgICAgICAgICBZCisKKyogQ2hpcCBzdXBwb3J0cyAzM01IeiBhbmQgNjZNSHogUENJIGJ1cyBjbG9jay4KKworCitTdW1tYXJ5IG9mIG90aGVyIHN1cHBvcnRlZCBmZWF0dXJlczoKKworTW9kdWxlOiAgICAgICAgICAgICAgICBhbGxvdyB0byBsb2FkIHRoZSBkcml2ZXIKK01lbW9yeSBtYXBwZWQgSS9POiAgICAgaW5jcmVhc2VzIHBlcmZvcm1hbmNlCitDb250cm9sIGNvbW1hbmRzOiAgICAgIHdyaXRlIG9wZXJhdGlvbnMgdG8gdGhlIHByb2MgU0NTSSBmaWxlIHN5c3RlbQorRGVidWdnaW5nIGluZm9ybWF0aW9uOiB3cml0dGVuIHRvIHN5c2xvZyAoZXhwZXJ0IG9ubHkpCitTY2F0dGVyIC8gZ2F0aGVyCitTaGFyZWQgaW50ZXJydXB0CitCb290IHNldHVwIGNvbW1hbmRzCitTZXJpYWwgTlZSQU06ICAgICAgICAgIFN5bWJpb3MgYW5kIFRla3JhbSBmb3JtYXRzCisKKworMy4gQWR2YW50YWdlcyBvZiB0aGlzIGRyaXZlciBmb3IgbmV3ZXIgY2hpcHMuCisKKzMuMSBPcHRpbWl6ZWQgU0NTSSBTQ1JJUFRTLgorCitBbGwgY2hpcHMgZXhjZXB0IHRoZSA4MTAsIDgxNSBhbmQgODI1LCBzdXBwb3J0IG5ldyBTQ1NJIFNDUklQVFMgaW5zdHJ1Y3Rpb25zIAorbmFtZWQgTE9BRCBhbmQgU1RPUkUgdGhhdCBhbGxvdyB0byBtb3ZlIHVwIHRvIDEgRFdPUkQgZnJvbS90byBhbiBJTyByZWdpc3RlciAKK3RvL2Zyb20gbWVtb3J5IG11Y2ggZmFzdGVyIHRoYXQgdGhlIE1PVkUgTUVNT1JZIGluc3RydWN0aW9uIHRoYXQgaXMgc3VwcG9ydGVkIAorYnkgdGhlIDUzYzd4eCBhbmQgNTNjOHh4IGZhbWlseS4KKworVGhlIExPQUQvU1RPUkUgaW5zdHJ1Y3Rpb25zIHN1cHBvcnQgYWJzb2x1dGUgYW5kIERTQSByZWxhdGl2ZSBhZGRyZXNzaW5nIAorbW9kZXMuIFRoZSBTQ1NJIFNDUklQVFMgaGFkIGJlZW4gZW50aXJlbHkgcmV3cml0dGVuIHVzaW5nIExPQUQvU1RPUkUgaW5zdGVhZCAKK29mIE1PVkUgTUVNT1JZIGluc3RydWN0aW9ucy4KKworRHVlIHRvIHRoZSBsYWNrIG9mIExPQUQvU1RPUkUgU0NSSVBUUyBpbnN0cnVjdGlvbnMgYnkgZWFybGllciBjaGlwcywgdGhpcyAKK2RyaXZlciBhbHNvIGluY29ycG9yYXRlcyBhIGRpZmZlcmVudCBTQ1JJUFRTIHNldCBiYXNlZCBvbiBNRU1PUlkgTU9WRSwgaW4gCitvcmRlciB0byBwcm92aWRlIHN1cHBvcnQgZm9yIHRoZSBlbnRpcmUgU1lNNTNDOFhYIGNoaXBzIGZhbWlseS4KKworMy4yIE5ldyBmZWF0dXJlcyBhcHBlYXJlZCB3aXRoIHRoZSBTWU01M0M4OTYKKworTmV3ZXIgY2hpcHMgKHNlZSBhYm92ZSkgYWxsb3dzIGhhbmRsaW5nIG9mIHRoZSBwaGFzZSBtaXNtYXRjaCBjb250ZXh0IGZyb20gCitTQ1JJUFRTIChhdm9pZHMgdGhlIHBoYXNlIG1pc21hdGNoIGludGVycnVwdCB0aGF0IHN0b3BzIHRoZSBTQ1NJIHByb2Nlc3NvciAKK3VudGlsIHRoZSBDIGNvZGUgaGFzIHNhdmVkIHRoZSBjb250ZXh0IG9mIHRoZSB0cmFuc2ZlcikuCisKK1RoZSA4OTYgYW5kIDEwMTAgY2hpcHMgc3VwcG9ydCA2NCBiaXQgUENJIHRyYW5zYWN0aW9ucyBhbmQgYWRkcmVzc2luZywgCit3aGlsZSB0aGUgODk1QSBzdXBwb3J0cyAzMiBiaXQgUENJIHRyYW5zYWN0aW9ucyBhbmQgNjQgYml0IGFkZHJlc3NpbmcuCitUaGUgU0NSSVBUUyBwcm9jZXNzb3Igb2YgdGhlc2UgY2hpcHMgaXMgbm90IHRydWUgNjQgYml0LCBidXQgdXNlcyBzZWdtZW50IAorcmVnaXN0ZXJzIGZvciBiaXQgMzItNjMuIEFub3RoZXIgaW50ZXJlc3RpbmcgZmVhdHVyZSBpcyB0aGF0IExPQUQvU1RPUkUgCitpbnN0cnVjdGlvbnMgdGhhdCBhZGRyZXNzIHRoZSBvbi1jaGlwIFJBTSAoOGspIHJlbWFpbiBpbnRlcm5hbCB0byB0aGUgY2hpcC4KKworNC4gTWVtb3J5IG1hcHBlZCBJL08gdmVyc3VzIG5vcm1hbCBJL08KKworTWVtb3J5IG1hcHBlZCBJL08gaGFzIGxlc3MgbGF0ZW5jeSB0aGFuIG5vcm1hbCBJL08gYW5kIGlzIHRoZSByZWNvbW1lbmRlZCAKK3dheSBmb3IgZG9pbmcgSU8gd2l0aCBQQ0kgZGV2aWNlcy4gTWVtb3J5IG1hcHBlZCBJL08gc2VlbXMgdG8gd29yayBmaW5lIG9uIAorbW9zdCBoYXJkd2FyZSBjb25maWd1cmF0aW9ucywgYnV0IHNvbWUgcG9vcmx5IGRlc2lnbmVkIGNoaXBzZXRzIG1heSBicmVhayAKK3RoaXMgZmVhdHVyZS4gQSBjb25maWd1cmF0aW9uIG9wdGlvbiBpcyBwcm92aWRlZCBmb3Igbm9ybWFsIEkvTyB0byBiZSAKK3VzZWQgYnV0IHRoZSBkcml2ZXIgZGVmYXVsdHMgdG8gTU1JTy4KKworNS4gVGFnZ2VkIGNvbW1hbmQgcXVldWVpbmcKKworUXVldWluZyBtb3JlIHRoYW4gMSBjb21tYW5kIGF0IGEgdGltZSB0byBhIGRldmljZSBhbGxvd3MgaXQgdG8gcGVyZm9ybSAKK29wdGltaXphdGlvbnMgYmFzZWQgb24gYWN0dWFsIGhlYWQgcG9zaXRpb25zIGFuZCBpdHMgbWVjaGFuaWNhbCAKK2NoYXJhY3RlcmlzdGljcy4gVGhpcyBmZWF0dXJlIG1heSBhbHNvIHJlZHVjZSBhdmVyYWdlIGNvbW1hbmQgbGF0ZW5jeS4KK0luIG9yZGVyIHRvIHJlYWxseSBnYWluIGFkdmFudGFnZSBvZiB0aGlzIGZlYXR1cmUsIGRldmljZXMgbXVzdCBoYXZlIAorYSByZWFzb25hYmxlIGNhY2hlIHNpemUgKE5vIG1pcmFjbGUgaXMgdG8gYmUgZXhwZWN0ZWQgZm9yIGEgbG93LWVuZCAKK2hhcmQgZGlzayB3aXRoIDEyOCBLQiBvciBsZXNzKS4KK1NvbWUga293biBvbGQgU0NTSSBkZXZpY2VzIGRvIG5vdCBwcm9wZXJseSBzdXBwb3J0IHRhZ2dlZCBjb21tYW5kIHF1ZXVpbmcuCitHZW5lcmFsbHksIGZpcm13YXJlIHJldmlzaW9ucyB0aGF0IGZpeCB0aGlzIGtpbmQgb2YgcHJvYmxlbXMgYXJlIGF2YWlsYWJsZSAKK2F0IHJlc3BlY3RpdmUgdmVuZG9yIHdlYi9mdHAgc2l0ZXMuCitBbGwgSSBjYW4gc2F5IGlzIHRoYXQgSSBuZXZlciBoYXZlIGhhZCBwcm9ibGVtIHdpdGggdGFnZ2VkIHF1ZXVpbmcgdXNpbmcgCit0aGlzIGRyaXZlciBhbmQgaXRzIHByZWRlY2Vzc29ycy4gSGFyZCBkaXNrcyB0aGF0IGJlaGF2ZWQgY29ycmVjdGx5IGZvciAKK21lIHVzaW5nIHRhZ2dlZCBjb21tYW5kcyBhcmUgdGhlIGZvbGxvd2luZzoKKworLSBJQk0gUzEyIDA2NjIKKy0gQ29ubmVyIDEwODBTCistIFF1YW50dW0gQXRsYXMgSQorLSBRdWFudHVtIEF0bGFzIElJCistIFNlYWdhdGUgQ2hlZXRhaCBJCistIFF1YW50dW0gVmlraW5nIElJCistIElCTSBEUlZTCistIFF1YW50dW0gQXRsYXMgSVYKKy0gU2VhZ2F0ZSBDaGVldGFoIElJCisKK0lmIHlvdXIgY29udHJvbGxlciBoYXMgTlZSQU0sIHlvdSBjYW4gY29uZmlndXJlIHRoaXMgZmVhdHVyZSBwZXIgdGFyZ2V0IAorZnJvbSB0aGUgdXNlciBzZXR1cCB0b29sLiBUaGUgVGVrcmFtIFNldHVwIHByb2dyYW0gYWxsb3dzIHRvIHR1bmUgdGhlIAorbWF4aW11bSBudW1iZXIgb2YgcXVldWVkIGNvbW1hbmRzIHVwIHRvIDMyLiBUaGUgU3ltYmlvcyBTZXR1cCBvbmx5IGFsbG93cyAKK3RvIGVuYWJsZSBvciBkaXNhYmxlIHRoaXMgZmVhdHVyZS4KKworVGhlIG1heGltdW0gbnVtYmVyIG9mIHNpbXVsdGFuZW91cyB0YWdnZWQgY29tbWFuZHMgcXVldWVkIHRvIGEgZGV2aWNlCitpcyBjdXJyZW50bHkgc2V0IHRvIDE2IGJ5IGRlZmF1bHQuICBUaGlzIHZhbHVlIGlzIHN1aXRhYmxlIGZvciBtb3N0IFNDU0kKK2Rpc2tzLiAgV2l0aCBsYXJnZSBTQ1NJIGRpc2tzICg+PSAyR0IsIGNhY2hlID49IDUxMktCLCBhdmVyYWdlIHNlZWsgdGltZQorPD0gMTAgbXMpLCB1c2luZyBhIGxhcmdlciB2YWx1ZSBtYXkgZ2l2ZSBiZXR0ZXIgcGVyZm9ybWFuY2VzLgorCitUaGlzIGRyaXZlciBzdXBwb3J0cyB1cCB0byAyNTUgY29tbWFuZHMgcGVyIGRldmljZSwgYW5kIGJ1dCB1c2luZyBtb3JlIHRoYW4gCis2NCBpcyBnZW5lcmFsbHkgbm90IHdvcnRoLXdoaWxlLCB1bmxlc3MgeW91IGFyZSB1c2luZyBhIHZlcnkgbGFyZ2UgZGlzayBvciAKK2Rpc2sgYXJyYXlzLiBJdCBpcyBub3RpY2VhYmxlIHRoYXQgbW9zdCBvZiByZWNlbnQgaGFyZCBkaXNrcyBzZWVtIG5vdCB0byAKK2FjY2VwdCBtb3JlIHRoYW4gNjQgc2ltdWx0YW5lb3VzIGNvbW1hbmRzLiBTbywgdXNpbmcgbW9yZSB0aGFuIDY0IHF1ZXVlZCAKK2NvbW1hbmRzIGlzIHByb2JhYmx5IGp1c3QgcmVzb3VyY2Ugd2FzdGluZy4KKworSWYgeW91ciBjb250cm9sbGVyIGRvZXMgbm90IGhhdmUgTlZSQU0gb3IgaWYgaXQgaXMgbWFuYWdlZCBieSB0aGUgU0RNUyAKK0JJT1MvU0VUVVAsIHlvdSBjYW4gY29uZmlndXJlIHRhZ2dlZCBxdWV1ZWluZyBmZWF0dXJlIGFuZCBkZXZpY2UgcXVldWUgCitkZXB0aHMgZnJvbSB0aGUgYm9vdCBjb21tYW5kLWxpbmUuIEZvciBleGFtcGxlOgorCisgIHN5bTUzYzh4eD10YWdzOjQvdDJ0M3ExNS10NHE3L3QxdTBxMzIKKword2lsbCBzZXQgdGFnZ2VkIGNvbW1hbmRzIHF1ZXVlIGRlcHRocyBhcyBmb2xsb3c6CisKKy0gdGFyZ2V0IDIgIGFsbCBsdW5zICBvbiBjb250cm9sbGVyIDAgLS0+IDE1CistIHRhcmdldCAzICBhbGwgbHVucyAgb24gY29udHJvbGxlciAwIC0tPiAxNQorLSB0YXJnZXQgNCAgYWxsIGx1bnMgIG9uIGNvbnRyb2xsZXIgMCAtLT4gIDcKKy0gdGFyZ2V0IDEgIGx1biAwICAgICBvbiBjb250cm9sbGVyIDEgLS0+IDMyCistIGFsbCBvdGhlciB0YXJnZXQvbHVuICAgICAgICAgICAgICAgIC0tPiAgNAorCitJbiBzb21lIHNwZWNpYWwgY29uZGl0aW9ucywgc29tZSBTQ1NJIGRpc2sgZmlybXdhcmVzIG1heSByZXR1cm4gYQorUVVFVUUgRlVMTCBzdGF0dXMgZm9yIGEgU0NTSSBjb21tYW5kLiBUaGlzIGJlaGF2aW91ciBpcyBtYW5hZ2VkIGJ5IHRoZQorZHJpdmVyIHVzaW5nIHRoZSBmb2xsb3dpbmcgaGV1cmlzdGljOgorCistIEVhY2ggdGltZSBhIFFVRVVFIEZVTEwgc3RhdHVzIGlzIHJldHVybmVkLCB0YWdnZWQgcXVldWUgZGVwdGggaXMgcmVkdWNlZCAKKyAgdG8gdGhlIGFjdHVhbCBudW1iZXIgb2YgZGlzY29ubmVjdGVkIGNvbW1hbmRzLiAKKworLSBFdmVyeSAyMDAgc3VjY2Vzc2Z1bGx5IGNvbXBsZXRlZCBTQ1NJIGNvbW1hbmRzLCBpZiBhbGxvd2VkIGJ5IHRoZQorICBjdXJyZW50IGxpbWl0LCB0aGUgbWF4aW11bSBudW1iZXIgb2YgcXVldWVhYmxlIGNvbW1hbmRzIGlzIGluY3JlbWVudGVkLgorCitTaW5jZSBRVUVVRSBGVUxMIHN0YXR1cyByZWNlcHRpb24gYW5kIGhhbmRsaW5nIGlzIHJlc291cmNlIHdhc3RpbmcsIHRoZSAKK2RyaXZlciBub3RpZmllcyBieSBkZWZhdWx0IHRoaXMgcHJvYmxlbSB0byB1c2VyIGJ5IGluZGljYXRpbmcgdGhlIGFjdHVhbCAKK251bWJlciBvZiBjb21tYW5kcyB1c2VkIGFuZCB0aGVpciBzdGF0dXMsIGFzIHdlbGwgYXMgaXRzIGRlY2lzaW9uIG9uIHRoZSAKK2RldmljZSBxdWV1ZSBkZXB0aCBjaGFuZ2UuCitUaGUgaGV1cmlzdGljIHVzZWQgYnkgdGhlIGRyaXZlciBpbiBoYW5kbGluZyBRVUVVRSBGVUxMIGVuc3VyZXMgdGhhdCB0aGUgCitpbXBhY3Qgb24gcGVyZm9ybWFuY2VzIGlzIG5vdCB0b28gYmFkLiBZb3UgY2FuIGdldCByaWQgb2YgdGhlIG1lc3NhZ2VzIGJ5IAorc2V0dGluZyB2ZXJib3NlIGxldmVsIHRvIHplcm8sIGFzIGZvbGxvdzoKKworMXN0IG1ldGhvZDogYm9vdCB5b3VyIHN5c3RlbSB1c2luZyAnc3ltNTNjOHh4PXZlcmI6MCcgb3B0aW9uLgorMm5kIG1ldGhvZDogYXBwbHkgInNldHZlcmJvc2UgMCIgY29udHJvbCBjb21tYW5kIHRvIHRoZSBwcm9jIGZzIGVudHJ5IAorICAgICAgICAgICAgY29ycmVzcG9uZGluZyB0byB5b3VyIGNvbnRyb2xsZXIgYWZ0ZXIgYm9vdC11cC4KKworNi4gUGFyaXR5IGNoZWNraW5nCisKK1RoZSBkcml2ZXIgc3VwcG9ydHMgU0NTSSBwYXJpdHkgY2hlY2tpbmcgYW5kIFBDSSBidXMgbWFzdGVyIHBhcml0eQorY2hlY2tpbmcuICBUaGVzZSBmZWF0dXJlcyBtdXN0IGJlIGVuYWJsZWQgaW4gb3JkZXIgdG8gZW5zdXJlIHNhZmUKK2RhdGEgdHJhbnNmZXJzLiAgU29tZSBmbGF3ZWQgZGV2aWNlcyBvciBtb3RoZXIgYm9hcmRzIG1heSBoYXZlIHByb2JsZW1zCit3aXRoIHBhcml0eS4gIFRoZSBvcHRpb25zIHRvIGRlZmVhdCBwYXJpdHkgY2hlY2tpbmcgaGF2ZSBiZWVuIHJlbW92ZWQKK2Zyb20gdGhlIGRyaXZlci4KKworNy4gUHJvZmlsaW5nIGluZm9ybWF0aW9uCisKK1RoaXMgZHJpdmVyIGRvZXMgbm90IHByb3ZpZGUgcHJvZmlsaW5nIGluZm9ybWF0aW9ucyBhcyBkaWQgaXRzIHByZWRlY2Vzc29ycy4KK1RoaXMgZmVhdHVyZSB3YXMgbm90IHRoaXMgdXNlZnVsIGFuZCBhZGRlZCBjb21wbGV4aXR5IHRvIHRoZSBjb2RlLiAKK0FzIHRoZSBkcml2ZXIgY29kZSBnb3QgbW9yZSBjb21wbGV4LCBJIGhhdmUgZGVjaWRlZCB0byByZW1vdmUgZXZlcnl0aGluZyAKK3RoYXQgZGlkbid0IHNlZW0gYWN0dWFsbHkgdXNlZnVsLgorCis4LiBDb250cm9sIGNvbW1hbmRzCisKK0NvbnRyb2wgY29tbWFuZHMgY2FuIGJlIHNlbnQgdG8gdGhlIGRyaXZlciB3aXRoIHdyaXRlIG9wZXJhdGlvbnMgdG8KK3RoZSBwcm9jIFNDU0kgZmlsZSBzeXN0ZW0uIFRoZSBnZW5lcmljIGNvbW1hbmQgc3ludGF4IGlzIHRoZQorZm9sbG93aW5nOgorCisgICAgICBlY2hvICI8dmVyYj4gPHBhcmFtZXRlcnM+IiA+L3Byb2Mvc2NzaS9zeW01M2M4eHgvMAorICAgICAgKGFzc3VtZXMgY29udHJvbGxlciBudW1iZXIgaXMgMCkKKworVXNpbmcgImFsbCIgZm9yICI8dGFyZ2V0PiIgcGFyYW1ldGVyIHdpdGggdGhlIGNvbW1hbmRzIGJlbG93IHdpbGwKK2FwcGx5IHRvIGFsbCB0YXJnZXRzIG9mIHRoZSBTQ1NJIGNoYWluIChleGNlcHQgdGhlIGNvbnRyb2xsZXIpLgorCitBdmFpbGFibGUgY29tbWFuZHM6CisKKzguMSBTZXQgbWluaW11bSBzeW5jaHJvbm91cyBwZXJpb2QgZmFjdG9yCisKKyAgICBzZXRzeW5jIDx0YXJnZXQ+IDxwZXJpb2QgZmFjdG9yPgorCisgICAgdGFyZ2V0OiAgICB0YXJnZXQgbnVtYmVyCisgICAgcGVyaW9kOiAgICBtaW5pbXVtIHN5bmNocm9ub3VzIHBlcmlvZC4KKyAgICAgICAgICAgICAgIE1heGltdW0gc3BlZWQgPSAxMDAwLyg0KnBlcmlvZCBmYWN0b3IpIGV4Y2VwdCBmb3Igc3BlY2lhbAorICAgICAgICAgICAgICAgY2FzZXMgYmVsb3cuCisKKyAgICBTcGVjaWZ5IGEgcGVyaW9kIG9mIDAsIHRvIGZvcmNlIGFzeW5jaHJvbm91cyB0cmFuc2ZlciBtb2RlLgorCisgICAgICAgOSBtZWFucyAxMi41IG5hbm8tc2Vjb25kcyBzeW5jaHJvbm91cyBwZXJpb2QKKyAgICAgIDEwIG1lYW5zIDI1IG5hbm8tc2Vjb25kcyBzeW5jaHJvbm91cyBwZXJpb2QKKyAgICAgIDExIG1lYW5zIDMwIG5hbm8tc2Vjb25kcyBzeW5jaHJvbm91cyBwZXJpb2QKKyAgICAgIDEyIG1lYW5zIDUwIG5hbm8tc2Vjb25kcyBzeW5jaHJvbm91cyBwZXJpb2QKKworOC4yIFNldCB3aWRlIHNpemUKKworICAgIHNldHdpZGUgPHRhcmdldD4gPHNpemU+CisKKyAgICB0YXJnZXQ6ICAgIHRhcmdldCBudW1iZXIKKyAgICBzaXplOiAgICAgIDA9OCBiaXRzLCAxPTE2Yml0cworCis4LjMgU2V0IG1heGltdW0gbnVtYmVyIG9mIGNvbmN1cnJlbnQgdGFnZ2VkIGNvbW1hbmRzCisgCisgICAgc2V0dGFncyA8dGFyZ2V0PiA8dGFncz4KKworICAgIHRhcmdldDogICAgdGFyZ2V0IG51bWJlcgorICAgIHRhZ3M6ICAgICAgbnVtYmVyIG9mIGNvbmN1cnJlbnQgdGFnZ2VkIGNvbW1hbmRzCisgICAgICAgICAgICAgICBtdXN0IG5vdCBiZSBncmVhdGVyIHRoYW4gY29uZmlndXJlZCAoZGVmYXVsdDogMTYpCisKKzguNCBTZXQgZGVidWcgbW9kZQorCisgICAgc2V0ZGVidWcgPGxpc3Qgb2YgZGVidWcgZmxhZ3M+CisKKyAgICBBdmFpbGFibGUgZGVidWcgZmxhZ3M6CisgICAgICAgIGFsbG9jOiAgIHByaW50IGluZm8gYWJvdXQgbWVtb3J5IGFsbG9jYXRpb25zIChjY2IsIGxjYikKKyAgICAgICAgcXVldWU6ICAgcHJpbnQgaW5mbyBhYm91dCBpbnNlcnRpb25zIGludG8gdGhlIGNvbW1hbmQgc3RhcnQgcXVldWUKKyAgICAgICAgcmVzdWx0OiAgcHJpbnQgc2Vuc2UgZGF0YSBvbiBDSEVDSyBDT05ESVRJT04gc3RhdHVzCisgICAgICAgIHNjYXR0ZXI6IHByaW50IGluZm8gYWJvdXQgdGhlIHNjYXR0ZXIgcHJvY2VzcworICAgICAgICBzY3JpcHRzOiBwcmludCBpbmZvIGFib3V0IHRoZSBzY3JpcHQgYmluZGluZyBwcm9jZXNzCisJdGlueTogICAgcHJpbnQgbWluaW1hbCBkZWJ1Z2dpbmcgaW5mb3JtYXRpb24KKwl0aW1pbmc6ICBwcmludCB0aW1pbmcgaW5mb3JtYXRpb24gb2YgdGhlIE5DUiBjaGlwCisJbmVnbzogICAgcHJpbnQgaW5mb3JtYXRpb24gYWJvdXQgU0NTSSBuZWdvdGlhdGlvbnMKKwlwaGFzZTogICBwcmludCBpbmZvcm1hdGlvbiBvbiBzY3JpcHQgaW50ZXJydXB0aW9ucworCisgICAgVXNlICJzZXRkZWJ1ZyIgd2l0aCBubyBhcmd1bWVudCB0byByZXNldCBkZWJ1ZyBmbGFncy4KKworCis4LjUgU2V0IGZsYWcgKG5vX2Rpc2MpCisgCisgICAgc2V0ZmxhZyA8dGFyZ2V0PiA8ZmxhZz4KKworICAgIHRhcmdldDogICAgdGFyZ2V0IG51bWJlcgorCisgICAgRm9yIHRoZSBtb21lbnQsIG9ubHkgb25lIGZsYWcgaXMgYXZhaWxhYmxlOgorCisgICAgICAgIG5vX2Rpc2M6ICAgbm90IGFsbG93IHRhcmdldCB0byBkaXNjb25uZWN0LgorCisgICAgRG8gbm90IHNwZWNpZnkgYW55IGZsYWcgaW4gb3JkZXIgdG8gcmVzZXQgdGhlIGZsYWcuIEZvciBleGFtcGxlOgorICAgIC0gc2V0ZmxhZyA0CisgICAgICB3aWxsIHJlc2V0IG5vX2Rpc2MgZmxhZyBmb3IgdGFyZ2V0IDQsIHNvIHdpbGwgYWxsb3cgaXQgZGlzY29ubmVjdGlvbnMuCisgICAgLSBzZXRmbGFnIGFsbAorICAgICAgd2lsbCBhbGxvdyBkaXNjb25uZWN0aW9uIGZvciBhbGwgZGV2aWNlcyBvbiB0aGUgU0NTSSBidXMuCisKKworOC42IFNldCB2ZXJib3NlIGxldmVsCisKKyAgICBzZXR2ZXJib3NlICNsZXZlbAorCisgICAgVGhlIGRyaXZlciBkZWZhdWx0IHZlcmJvc2UgbGV2ZWwgaXMgMS4gVGhpcyBjb21tYW5kIGFsbG93cyB0byBjaGFuZ2UgCisgICAgdGggZHJpdmVyIHZlcmJvc2UgbGV2ZWwgYWZ0ZXIgYm9vdC11cC4KKworOC43IFJlc2V0IGFsbCBsb2dpY2FsIHVuaXRzIG9mIGEgdGFyZ2V0CisKKyAgICByZXNldGRldiA8dGFyZ2V0PgorCisgICAgdGFyZ2V0OiAgICB0YXJnZXQgbnVtYmVyCisgICAgVGhlIGRyaXZlciB3aWxsIHRyeSB0byBzZW5kIGEgQlVTIERFVklDRSBSRVNFVCBtZXNzYWdlIHRvIHRoZSB0YXJnZXQuCisKKzguOCBBYm9ydCBhbGwgdGFza3Mgb2YgYWxsIGxvZ2ljYWwgdW5pdHMgb2YgYSB0YXJnZXQKKworICAgIGNsZWFyZGV2IDx0YXJnZXQ+CisKKyAgICB0YXJnZXQ6ICAgIHRhcmdldCBudW1iZXIKKyAgICBUaGUgZHJpdmVyIHdpbGwgdHJ5IHRvIHNlbmQgYSBBQk9SVCBtZXNzYWdlIHRvIGFsbCB0aGUgbG9naWNhbCB1bml0cyAKKyAgICBvZiB0aGUgdGFyZ2V0LgorCisKKzkuIENvbmZpZ3VyYXRpb24gcGFyYW1ldGVycworCitVbmRlciBrZXJuZWwgY29uZmlndXJhdGlvbiB0b29scyAobWFrZSBtZW51Y29uZmlnLCBmb3IgZXhhbXBsZSksIGl0IGlzIAorcG9zc2libGUgdG8gY2hhbmdlIHNvbWUgZGVmYXVsdCBkcml2ZXIgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzLgorSWYgdGhlIGZpcm13YXJlIG9mIGFsbCB5b3VyIGRldmljZXMgaXMgcGVyZmVjdCBlbm91Z2gsIGFsbCB0aGUKK2ZlYXR1cmVzIHN1cHBvcnRlZCBieSB0aGUgZHJpdmVyIGNhbiBiZSBlbmFibGVkIGF0IHN0YXJ0LXVwLiBIb3dldmVyLAoraWYgb25seSBvbmUgaGFzIGEgZmxhdyBmb3Igc29tZSBTQ1NJIGZlYXR1cmUsIHlvdSBjYW4gZGlzYWJsZSB0aGUKK3N1cHBvcnQgYnkgdGhlIGRyaXZlciBvZiB0aGlzIGZlYXR1cmUgYXQgbGludXggc3RhcnQtdXAgYW5kIGVuYWJsZQordGhpcyBmZWF0dXJlIGFmdGVyIGJvb3QtdXAgb25seSBmb3IgZGV2aWNlcyB0aGF0IHN1cHBvcnQgaXQgc2FmZWx5LgorCitDb25maWd1cmF0aW9uIHBhcmFtZXRlcnM6CisKK1VzZSBub3JtYWwgSU8gICAgICAgICAgICAgICAgICAgICAgICAgKGRlZmF1bHQgYW5zd2VyOiBuKQorICAgIEFuc3dlciAieSIgaWYgeW91IHN1c3BlY3QgeW91ciBtb3RoZXIgYm9hcmQgdG8gbm90IGFsbG93IG1lbW9yeSBtYXBwZWQgSS9PLgorICAgIE1heSBzbG93IGRvd24gcGVyZm9ybWFuY2UgYSBsaXR0bGUuCisKK0RlZmF1bHQgdGFnZ2VkIGNvbW1hbmQgcXVldWUgZGVwdGggICAgKGRlZmF1bHQgYW5zd2VyOiAxNikKKyAgICBFbnRlcmluZyAwIGRlZmF1bHRzIHRvIHRhZ2dlZCBjb21tYW5kcyBub3QgYmVpbmcgdXNlZC4KKyAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgc3BlY2lmaWVkIGZyb20gdGhlIGJvb3QgY29tbWFuZCBsaW5lLgorCitNYXhpbXVtIG51bWJlciBvZiBxdWV1ZWQgY29tbWFuZHMgICAgIChkZWZhdWx0IGFuc3dlcjogMzIpCisgICAgVGhpcyBvcHRpb24gYWxsb3dzIHlvdSB0byBzcGVjaWZ5IHRoZSBtYXhpbXVtIG51bWJlciBvZiB0YWdnZWQgY29tbWFuZHMgCisgICAgdGhhdCBjYW4gYmUgcXVldWVkIHRvIGEgZGV2aWNlLiBUaGUgbWF4aW11bSBzdXBwb3J0ZWQgdmFsdWUgaXMgMjU1LgorCitTeW5jaHJvbm91cyB0cmFuc2ZlcnMgZnJlcXVlbmN5ICAgICAgIChkZWZhdWx0IGFuc3dlcjogODApCisgICAgVGhpcyBvcHRpb24gYWxsb3dzIHlvdSB0byBzcGVjaWZ5IHRoZSBmcmVxdWVuY3kgaW4gTUh6IHRoZSBkcml2ZXIgCisgICAgd2lsbCB1c2UgYXQgYm9vdCB0aW1lIGZvciBzeW5jaHJvbm91cyBkYXRhIHRyYW5zZmVyIG5lZ290aWF0aW9ucy4KKyAgICAwIG1lYW5zICJhc3luY2hyb25vdXMgZGF0YSB0cmFuc2ZlcnMiLgorCisxMC4gQm9vdCBzZXR1cCBjb21tYW5kcworCisxMC4xIFN5bnRheAorCitTZXR1cCBjb21tYW5kcyBjYW4gYmUgcGFzc2VkIHRvIHRoZSBkcml2ZXIgZWl0aGVyIGF0IGJvb3QgdGltZSBvciBhcworcGFyYW1ldGVycyB0byBtb2Rwcm9iZSwgYXMgZGVzY3JpYmVkIGluIERvY3VtZW50YXRpb24va2VybmVsLXBhcmFtZXRlcnMudHh0CisKK0V4YW1wbGUgb2YgYm9vdCBzZXR1cCBjb21tYW5kIHVuZGVyIGxpbG8gcHJvbXB0OgorCitsaWxvOiBsaW51eCByb290PS9kZXYvc2RhMiBzeW01M2M4eHguY21kX3Blcl9sdW49NCBzeW01M2M4eHguc3luYz0xMCBzeW01M2M4eHguZGVidWc9MHgyMDAKKworLSBlbmFibGUgdGFnZ2VkIGNvbW1hbmRzLCB1cCB0byA0IHRhZ2dlZCBjb21tYW5kcyBxdWV1ZWQuCistIHNldCBzeW5jaHJvbm91cyBuZWdvdGlhdGlvbiBzcGVlZCB0byAxMCBNZWdhLXRyYW5zZmVycyAvIHNlY29uZC4KKy0gc2V0IERFQlVHX05FR08gZmxhZy4KKworVGhlIGZvbGxvd2luZyBjb21tYW5kIHdpbGwgaW5zdGFsbCB0aGUgZHJpdmVyIG1vZHVsZSB3aXRoIHRoZSBzYW1lCitvcHRpb25zIGFzIGFib3ZlLgorCisgICAgbW9kcHJvYmUgc3ltNTNjOHh4IGNtZF9wZXJfbHVuPTQgc3luYz0xMCBkZWJ1Zz0weDIwMAorCisxMC4yIEF2YWlsYWJsZSBhcmd1bWVudHMKKworMTAuMi4xICBEZWZhdWx0IG51bWJlciBvZiB0YWdnZWQgY29tbWFuZHMKKyAgICAgICAgY21kX3Blcl9sdW49MCAob3IgY21kX3Blcl9sdW49MSkgdGFnZ2VkIGNvbW1hbmQgcXVldWluZyBkaXNhYmxlZAorICAgICAgICBjbWRfcGVyX2x1bj0jdGFncyAoI3RhZ3MgPiAxKSB0YWdnZWQgY29tbWFuZCBxdWV1aW5nIGVuYWJsZWQKKyAgI3RhZ3Mgd2lsbCBiZSB0cnVuY2F0ZWQgdG8gdGhlIG1heCBxdWV1ZWQgY29tbWFuZHMgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXIuCisKKzEwLjIuMiAgRGV0YWlsZWQgY29udHJvbCBvZiB0YWdnZWQgY29tbWFuZHMKKyAgVGhpcyBvcHRpb24gYWxsb3dzIHlvdSB0byBzcGVjaWZ5IGEgY29tbWFuZCBxdWV1ZSBkZXB0aCBmb3IgZWFjaCBkZXZpY2UgCisgIHRoYXQgc3VwcG9ydHMgdGFnZ2VkIGNvbW1hbmQgcXVldWVpbmcuCisgIEV4YW1wbGU6CisgICAgICB0YWdfY3RybD0xMC90MnQzcTE2LXQ1cTI0L3QxdTJxMzIKKyAgd2lsbCBzZXQgZGV2aWNlcyBxdWV1ZSBkZXB0aCBhcyBmb2xsb3c6CisgICAgICAtIGNvbnRyb2xsZXIgIzAgdGFyZ2V0ICMyIGFuZCB0YXJnZXQgIzMgICAgICAgICAgICAgICAgICAtPiAxNiBjb21tYW5kcywKKyAgICAgIC0gY29udHJvbGxlciAjMCB0YXJnZXQgIzUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+IDI0IGNvbW1hbmRzLAorICAgICAgLSBjb250cm9sbGVyICMxIHRhcmdldCAjMSBsb2dpY2FsIHVuaXQgIzIgICAgICAgICAgICAgICAgLT4gMzIgY29tbWFuZHMsCisgICAgICAtIGFsbCBvdGhlciBsb2dpY2FsIHVuaXRzIChhbGwgdGFyZ2V0cywgYWxsIGNvbnRyb2xsZXJzKSAtPiAxMCBjb21tYW5kcy4KKworMTAuMi4zIEJ1cnN0IG1heAorICAgICAgICBidXJzdD0wICAgIGJ1cnN0IGRpc2FibGVkCisgICAgICAgIGJ1cnN0PTI1NSAgZ2V0IGJ1cnN0IGxlbmd0aCBmcm9tIGluaXRpYWwgSU8gcmVnaXN0ZXIgc2V0dGluZ3MuCisgICAgICAgIGJ1cnN0PSN4ICAgYnVyc3QgZW5hYmxlZCAoMTw8I3ggYnVyc3QgdHJhbnNmZXJzIG1heCkKKyAgI3ggaXMgYW4gaW50ZWdlciB2YWx1ZSB3aGljaCBpcyBsb2cgYmFzZSAyIG9mIHRoZSBidXJzdCB0cmFuc2ZlcnMgbWF4LgorICBCeSBkZWZhdWx0IHRoZSBkcml2ZXIgdXNlcyB0aGUgbWF4aW11bSB2YWx1ZSBzdXBwb3J0ZWQgYnkgdGhlIGNoaXAuCisKKzEwLjIuNCBMRUQgc3VwcG9ydAorICAgICAgICBsZWQ9MSAgICAgIGVuYWJsZSAgTEVEIHN1cHBvcnQKKyAgICAgICAgbGVkPTAgICAgICBkaXNhYmxlIExFRCBzdXBwb3J0CisgIERvIG5vdCBlbmFibGUgTEVEIHN1cHBvcnQgaWYgeW91ciBzY3NpIGJvYXJkIGRvZXMgbm90IHVzZSBTRE1TIEJJT1MuCisgIChTZWUgJ0NvbmZpZ3VyYXRpb24gcGFyYW1ldGVycycpCisKKzEwLjIuNCBEaWZmZXJlbnRpYWwgbW9kZQorICAgICAgICBkaWZmPTAJbmV2ZXIgc2V0IHVwIGRpZmYgbW9kZQorICAgICAgICBkaWZmPTEJc2V0IHVwIGRpZmYgbW9kZSBpZiBCSU9TIHNldCBpdAorICAgICAgICBkaWZmPTIJYWx3YXlzIHNldCB1cCBkaWZmIG1vZGUKKyAgICAgICAgZGlmZj0zCXNldCBkaWZmIG1vZGUgaWYgR1BJTzMgaXMgbm90IHNldAorCisxMC4yLjUgSVJRIG1vZGUKKyAgICAgICAgaXJxbT0wICAgICBhbHdheXMgb3BlbiBkcmFpbgorICAgICAgICBpcnFtPTEgICAgIHNhbWUgYXMgaW5pdGlhbCBzZXR0aW5ncyAoYXNzdW1lZCBCSU9TIHNldHRpbmdzKQorICAgICAgICBpcnFtPTIgICAgIGFsd2F5cyB0b3RlbSBwb2xlCisKKzEwLjIuNiBDaGVjayBTQ1NJIEJVUyAKKyAgICAgICAgYnVzY2hrPTxvcHRpb24gYml0cz4KKworICAgIEF2YWlsYWJsZSBvcHRpb24gYml0czoKKyAgICAgICAgMHgwOiAgIE5vIGNoZWNrLgorICAgICAgICAweDE6ICAgQ2hlY2sgYW5kIGRvIG5vdCBhdHRhY2ggdGhlIGNvbnRyb2xsZXIgb24gZXJyb3IuICAKKyAgICAgICAgMHgyOiAgIENoZWNrIGFuZCBqdXN0IHdhcm4gb24gZXJyb3IuCisKKzEwLjIuNyBTdWdnZXN0IGEgZGVmYXVsdCBTQ1NJIGlkIGZvciBob3N0cworICAgICAgICBob3N0aWQ9MjU1CW5vIGlkIHN1Z2dlc3RlZC4KKyAgICAgICAgaG9zdGlkPSN4ICAgKDAgPCB4IDwgNykgeCBzdWdnZXN0ZWQgZm9yIGhvc3RzIFNDU0kgaWQuCisKKyAgICBJZiBhIGhvc3QgU0NTSSBpZCBpcyBhdmFpbGFibGUgZnJvbSB0aGUgTlZSQU0sIHRoZSBkcml2ZXIgd2lsbCBpZ25vcmUgCisgICAgYW55IHZhbHVlIHN1Z2dlc3RlZCBhcyBib290IG9wdGlvbi4gT3RoZXJ3aXNlLCBpZiBhIHN1Z2dlc3RlZCB2YWx1ZSAKKyAgICBkaWZmZXJlbnQgZnJvbSAyNTUgaGFzIGJlZW4gc3VwcGxpZWQsIGl0IHdpbGwgdXNlIGl0LiBPdGhlcndpc2UsIGl0IHdpbGwgCisgICAgdHJ5IHRvIGRlZHVjZSB0aGUgdmFsdWUgcHJldmlvdXNseSBzZXQgaW4gdGhlIGhhcmR3YXJlIGFuZCB1c2UgdmFsdWUgCisgICAgNyBpZiB0aGUgaGFyZHdhcmUgdmFsdWUgaXMgemVyby4KKworMTAuMi44ICBWZXJib3NpdHkgbGV2ZWwKKyAgICAgICAgdmVyYj0wICAgICBtaW5pbWFsCisgICAgICAgIHZlcmI9MSAgICAgbm9ybWFsCisgICAgICAgIHZlcmI9MiAgICAgdG9vIG11Y2gKKworMTAuMi45IERlYnVnIG1vZGUKKyAgICAgICAgZGVidWc9MAkgY2xlYXIgZGVidWcgZmxhZ3MKKyAgICAgICAgZGVidWc9I3ggICBzZXQgZGVidWcgZmxhZ3MKKyAgI3ggaXMgYW4gaW50ZWdlciB2YWx1ZSBjb21iaW5pbmcgdGhlIGZvbGxvd2luZyBwb3dlci1vZi0yIHZhbHVlczoKKyAgREVCVUdfQUxMT0MgICAgICAgMHgxCisgIERFQlVHX1BIQVNFICAgICAgIDB4MgorICBERUJVR19QT0xMICAgICAgICAweDQKKyAgREVCVUdfUVVFVUUgICAgICAgMHg4CisgIERFQlVHX1JFU1VMVCAgICAgMHgxMAorICBERUJVR19TQ0FUVEVSICAgIDB4MjAKKyAgREVCVUdfU0NSSVBUICAgICAweDQwCisgIERFQlVHX1RJTlkgICAgICAgMHg4MAorICBERUJVR19USU1JTkcgICAgMHgxMDAKKyAgREVCVUdfTkVHTyAgICAgIDB4MjAwCisgIERFQlVHX1RBR1MgICAgICAweDQwMAorICBERUJVR19GUkVFWkUgICAgMHg4MDAKKyAgREVCVUdfUkVTVEFSVCAgMHgxMDAwCisKKyAgWW91IGNhbiBwbGF5IHNhZmVseSB3aXRoIERFQlVHX05FR08uIEhvd2V2ZXIsIHNvbWUgb2YgdGhlc2UgZmxhZ3MgbWF5IAorICBnZW5lcmF0ZSBidW5jaGVzIG9mIHN5c2xvZyBtZXNzYWdlcy4gCisKKzEwLjIuMTAgU2V0dGxlIGRlbGF5CisgICAgICAgIHNldHRsZT1uCWRlbGF5IGZvciBuIHNlY29uZHMKKworICBBZnRlciBhIGJ1cyByZXNldCwgdGhlIGRyaXZlciB3aWxsIGRlbGF5IGZvciBuIHNlY29uZHMgYmVmb3JlIHRhbGtpbmcKKyAgdG8gYW55IGRldmljZSBvbiB0aGUgYnVzLiAgVGhlIGRlZmF1bHQgaXMgMyBzZWNvbmRzIGFuZCBzYWZlIG1vZGUgd2lsbAorICBkZWZhdWx0IGl0IHRvIDEwLgorCisxMC4yLjExIFNlcmlhbCBOVlJBTQorCU5COiBvcHRpb24gbm90IGN1cnJlbnRseSBpbXBsZW1lbnRlZC4KKyAgICAgICAgbnZyYW09biAgICAgZG8gbm90IGxvb2sgZm9yIHNlcmlhbCBOVlJBTQorICAgICAgICBudnJhbT15ICAgICB0ZXN0IGNvbnRyb2xsZXJzIGZvciBvbmJvYXJkIHNlcmlhbCBOVlJBTQorICAgICAgICAoYWx0ZXJuYXRlIGJpbmFyeSBmb3JtKQorICAgICAgICBudnJhbT08Yml0cyBvcHRpb25zPgorICAgICAgICAweDAxICAgbG9vayBmb3IgTlZSQU0gIChlcXVpdmFsZW50IHRvIG52cmFtPXkpCisgICAgICAgIDB4MDIgICBpZ25vcmUgTlZSQU0gIlN5bmNocm9ub3VzIG5lZ290aWF0aW9uIiBwYXJhbWV0ZXJzIGZvciBhbGwgZGV2aWNlcworICAgICAgICAweDA0ICAgaWdub3JlIE5WUkFNICJXaWRlIG5lZ290aWF0aW9uIiAgcGFyYW1ldGVyIGZvciBhbGwgZGV2aWNlcworICAgICAgICAweDA4ICAgaWdub3JlIE5WUkFNICJTY2FuIGF0IGJvb3QgdGltZSIgcGFyYW1ldGVyIGZvciBhbGwgZGV2aWNlcworICAgICAgICAweDgwICAgYWxzbyBhdHRhY2ggY29udHJvbGxlcnMgc2V0IHRvIE9GRiBpbiB0aGUgTlZSQU0gKHN5bTUzYzh4eCBvbmx5KQorCisxMC4yLjEyIEV4Y2x1ZGUgYSBob3N0IGZyb20gYmVpbmcgYXR0YWNoZWQKKyAgICAgICAgZXhjbD08aW9fYWRkcmVzcz4sLi4uCisKKyAgICBQcmV2ZW50IGhvc3QgYXQgYSBnaXZlbiBpbyBhZGRyZXNzIGZyb20gYmVpbmcgYXR0YWNoZWQuCisgICAgRm9yIGV4YW1wbGUgJ2V4Y2w9MHhiNDAwLDB4YzAwMCcgaW5kaWNhdGUgdG8gdGhlIAorICAgIGRyaXZlciBub3QgdG8gYXR0YWNoIGhvc3RzIGF0IGFkZHJlc3MgMHhiNDAwIGFuZCAweGMwMDAuCisKKzEwLjMgQ29udmVydGluZyBmcm9tIG9sZCBzdHlsZSBvcHRpb25zCisKK1ByZXZpb3VzbHksIHRoZSBzeW0yIGRyaXZlciBhY2NlcHRlZCBhcmd1bWVudHMgb2YgdGhlIGZvcm0KKwlzeW01M2M4eHg9dGFnczo0LHN5bmM6MTAsZGVidWc6MHgyMDAKKworQXMgYSByZXN1bHQgb2YgdGhlIG5ldyBtb2R1bGUgcGFyYW1ldGVycywgdGhpcyBpcyBubyBsb25nZXIgYXZhaWxhYmxlLgorTW9zdCBvZiB0aGUgb3B0aW9ucyBoYXZlIHJlbWFpbmVkIHRoZSBzYW1lLCBidXQgdGFncyBoYXMgc3BsaXQgaW50bworY21kX3Blcl9sdW4gYW5kIHRhZ19jdHJsIGZvciBpdHMgdHdvIGRpZmZlcmVudCBwdXJwb3Nlcy4gIFRoZSBzYW1wbGUgYWJvdmUKK3dvdWxkIGJlIHNwZWNpZmllZCBhczoKKwltb2Rwcm9iZSBzeW01M2M4eHggY21kX3Blcl9sdW49NCBzeW5jPTEwIGRlYnVnPTB4MjAwCisKK29yIG9uIHRoZSBrZXJuZWwgYm9vdCBsaW5lIGFzOgorCXN5bTUzYzh4eC5jbWRfcGVyX2x1bj00IHN5bTUzYzh4eC5zeW5jPTEwIHN5bTUzYzh4eC5kZWJ1Zz0weDIwMAorCisxMC40IFNDU0kgQlVTIGNoZWNraW5nIGJvb3Qgb3B0aW9uLgorCitXaGVuIHRoaXMgb3B0aW9uIGlzIHNldCB0byBhIG5vbi16ZXJvIHZhbHVlLCB0aGUgZHJpdmVyIGNoZWNrcyBTQ1NJIGxpbmVzIAorbG9naWMgc3RhdGUsIDEwMCBtaWNyby1zZWNvbmRzIGFmdGVyIGhhdmluZyBhc3NlcnRlZCB0aGUgU0NTSSBSRVNFVCBsaW5lLgorVGhlIGRyaXZlciBqdXN0IHJlYWRzIFNDU0kgbGluZXMgYW5kIGNoZWNrcyBhbGwgbGluZXMgcmVhZCBGQUxTRSBleGNlcHQgUkVTRVQuCitTaW5jZSBTQ1NJIGRldmljZXMgc2hhbGwgcmVsZWFzZSB0aGUgQlVTIGF0IG1vc3QgODAwIG5hbm8tc2Vjb25kcyBhZnRlciBTQ1NJIAorUkVTRVQgaGFzIGJlZW4gYXNzZXJ0ZWQsIGFueSBzaWduYWwgdG8gVFJVRSBtYXkgaW5kaWNhdGUgYSBTQ1NJIEJVUyBwcm9ibGVtLgorVW5mb3J0dW5hdGVseSwgdGhlIGZvbGxvd2luZyBjb21tb24gU0NTSSBCVVMgcHJvYmxlbXMgYXJlIG5vdCBkZXRlY3RlZDoKKy0gT25seSAxIHRlcm1pbmF0b3IgaW5zdGFsbGVkLgorLSBNaXNwbGFjZWQgdGVybWluYXRvcnMuCistIEJhZCBxdWFsaXR5IHRlcm1pbmF0b3JzLgorT24gdGhlIG90aGVyIGhhbmQsIGVpdGhlciBiYWQgY2FibGluZywgYnJva2VuIGRldmljZXMsIG5vdCBjb25mb3JtYW50IAorZGV2aWNlcywgLi4uIG1heSBjYXVzZSBhIFNDU0kgc2lnbmFsIHRvIGJlIHdyb25nIHdoZW4gdGUgZHJpdmVyIHJlYWRzIGl0LgorCisxNS4gU0NTSSBwcm9ibGVtIHRyb3VibGVzaG9vdGluZworCisxNS4xIFByb2JsZW0gdHJhY2tpbmcKKworTW9zdCBTQ1NJIHByb2JsZW1zIGFyZSBkdWUgdG8gYSBub24gY29uZm9ybWFudCBTQ1NJIGJ1cyBvciB0b28gYnVnZ3kKK2RldmljZXMuICBJZiBpbmZvcnR1bmF0ZWx5IHlvdSBoYXZlIFNDU0kgcHJvYmxlbXMsIHlvdSBjYW4gY2hlY2sgdGhlCitmb2xsb3dpbmcgdGhpbmdzOgorCistIFNDU0kgYnVzIGNhYmxlcworLSB0ZXJtaW5hdGlvbnMgYXQgYm90aCBlbmQgb2YgdGhlIFNDU0kgY2hhaW4KKy0gbGludXggc3lzbG9nIG1lc3NhZ2VzIChzb21lIG9mIHRoZW0gbWF5IGhlbHAgeW91KQorCitJZiB5b3UgZG8gbm90IGZpbmQgdGhlIHNvdXJjZSBvZiBwcm9ibGVtcywgeW91IGNhbiBjb25maWd1cmUgdGhlCitkcml2ZXIgb3IgZGV2aWNlcyBpbiB0aGUgTlZSQU0gd2l0aCBtaW5pbWFsIGZlYXR1cmVzLgorCistIG9ubHkgYXN5bmNocm9ub3VzIGRhdGEgdHJhbnNmZXJzCistIHRhZ2dlZCBjb21tYW5kcyBkaXNhYmxlZAorLSBkaXNjb25uZWN0aW9ucyBub3QgYWxsb3dlZAorCitOb3csIGlmIHlvdXIgU0NTSSBidXMgaXMgb2ssIHlvdXIgc3lzdGVtIGhhcyBldmVyeSBjaGFuY2UgdG8gd29yaword2l0aCB0aGlzIHNhZmUgY29uZmlndXJhdGlvbiBidXQgcGVyZm9ybWFuY2VzIHdpbGwgbm90IGJlIG9wdGltYWwuCisKK0lmIGl0IHN0aWxsIGZhaWxzLCB0aGVuIHlvdSBjYW4gc2VuZCB5b3VyIHByb2JsZW0gZGVzY3JpcHRpb24gdG8KK2FwcHJvcHJpYXRlIG1haWxpbmcgbGlzdHMgb3IgbmV3cy1ncm91cHMuICBTZW5kIG1lIGEgY29weSBpbiBvcmRlciB0bworYmUgc3VyZSBJIHdpbGwgcmVjZWl2ZSBpdC4gIE9idmlvdXNseSwgYSBidWcgaW4gdGhlIGRyaXZlciBjb2RlIGlzCitwb3NzaWJsZS4KKworICBNeSBjeXJyZW50IGVtYWlsIGFkZHJlc3M6IEdlcmFyZCBSb3VkaWVyIDxncm91ZGllckBmcmVlLmZyPgorCitBbGxvd2luZyBkaXNjb25uZWN0aW9ucyBpcyBpbXBvcnRhbnQgaWYgeW91IHVzZSBzZXZlcmFsIGRldmljZXMgb24KK3lvdXIgU0NTSSBidXMgYnV0IG9mdGVuIGNhdXNlcyBwcm9ibGVtcyB3aXRoIGJ1Z2d5IGRldmljZXMuCitTeW5jaHJvbm91cyBkYXRhIHRyYW5zZmVycyBpbmNyZWFzZXMgdGhyb3VnaHB1dCBvZiBmYXN0IGRldmljZXMgbGlrZQoraGFyZCBkaXNrcy4gIEdvb2QgU0NTSSBoYXJkIGRpc2tzIHdpdGggYSBsYXJnZSBjYWNoZSBnYWluIGFkdmFudGFnZSBvZgordGFnZ2VkIGNvbW1hbmRzIHF1ZXVpbmcuCisKKzE1LjIgVW5kZXJzdGFuZGluZyBoYXJkd2FyZSBlcnJvciByZXBvcnRzCisKK1doZW4gdGhlIGRyaXZlciBkZXRlY3RzIGFuIHVuZXhwZWN0ZWQgZXJyb3IgY29uZGl0aW9uLCBpdCBtYXkgZGlzcGxheSBhIAorbWVzc2FnZSBvZiB0aGUgZm9sbG93aW5nIHBhdHRlcm4uCisKK3N5bTA6MTogRVJST1IgKDA6NDgpICgxLTIxLTY1KSAoZi85NS8wKSBAIChzY3JpcHQgN2MwOjE5MDAwMDAwKS4KK3N5bTA6IHNjcmlwdCBjbWQgPSAxOTAwMDAwMAorc3ltMDogcmVnZHVtcDogZGEgMTAgODAgOTUgNDcgMGYgMDEgMDcgNzUgMDEgODEgMjEgODAgMDEgMDkgMDAuCisKK1NvbWUgZmllbGRzIGluIHN1Y2ggYSBtZXNzYWdlIG1heSBoZWxwIHlvdSB1bmRlcnN0YW5kIHRoZSBjYXVzZSBvZiB0aGUgCitwcm9ibGVtLCBhcyBmb2xsb3dzOgorCitzeW0wOjE6IEVSUk9SICgwOjQ4KSAoMS0yMS02NSkgKGYvOTUvMCkgQCAoc2NyaXB0IDdjMDoxOTAwMDAwMCkuCisuLi4uLkEuLi4uLi4uLi5CLkMuLi4uRC5FLi5GLi4uLkcuSC4uSS4uLi4uLi5KLi4uLi5LLi4uTC4uLi4uLi4KKworRmllbGQgQSA6IHRhcmdldCBudW1iZXIuCisgIFNDU0kgSUQgb2YgdGhlIGRldmljZSB0aGUgY29udHJvbGxlciB3YXMgdGFsa2luZyB3aXRoIGF0IHRoZSBtb21lbnQgdGhlIAorICBlcnJvciBvY2N1cnMuCisKK0ZpZWxkIEIgOiBEU1RBVCBpbyByZWdpc3RlciAoRE1BIFNUQVRVUykKKyAgQml0IDB4NDAgOiBNRFBFIE1hc3RlciBEYXRhIFBhcml0eSBFcnJvcgorICAgICAgICAgICAgIERhdGEgcGFyaXR5IGVycm9yIGRldGVjdGVkIG9uIHRoZSBQQ0kgQlVTLgorICBCaXQgMHgyMCA6IEJGICAgQnVzIEZhdWx0CisgICAgICAgICAgICAgUENJIGJ1cyBmYXVsdCBjb25kaXRpb24gZGV0ZWN0ZWQKKyAgQml0IDB4MDEgOiBJSUQgIElsbGVnYWwgSW5zdHJ1Y3Rpb24gRGV0ZWN0ZWQKKyAgICAgICAgICAgICBTZXQgYnkgdGhlIGNoaXAgd2hlbiBpdCBkZXRlY3RzIGFuIElsbGVnYWwgSW5zdHJ1Y3Rpb24gZm9ybWF0IAorICAgICAgICAgICAgIG9uIHNvbWUgY29uZGl0aW9uIHRoYXQgbWFrZXMgYW4gaW5zdHJ1Y3Rpb24gaWxsZWdhbC4KKyAgQml0IDB4ODAgOiBERkUgRG1hIEZpZm8gRW1wdHkKKyAgICAgICAgICAgICBQdXJlIHN0YXR1cyBiaXQgdGhhdCBkb2VzIG5vdCBpbmRpY2F0ZSBhbiBlcnJvci4KKyAgSWYgdGhlIHJlcG9ydGVkIERTVEFUIHZhbHVlIGNvbnRhaW5zIGEgY29tYmluYXRpb24gb2YgTURQRSAoMHg0MCksIAorICBCRiAoMHgyMCksIHRoZW4gdGhlIGNhdXNlIG1heSBiZSBsaWtlbHkgZHVlIHRvIGEgUENJIEJVUyBwcm9ibGVtLgorCitGaWVsZCBDIDogU0lTVCBpbyByZWdpc3RlciAoU0NTSSBJbnRlcnJ1cHQgU3RhdHVzKQorICBCaXQgMHgwOCA6IFNHRSAgU0NTSSBHUk9TUyBFUlJPUgorICAgICAgICAgICAgIEluZGljYXRlcyB0aGF0IHRoZSBjaGlwIGRldGVjdGVkIGEgc2V2ZXJlIGVycm9yIGNvbmRpdGlvbiAKKyAgICAgICAgICAgICBvbiB0aGUgU0NTSSBCVVMgdGhhdCBwcmV2ZW50cyB0aGUgU0NTSSBwcm90b2NvbCBmcm9tIGZ1bmN0aW9uaW5nCisgICAgICAgICAgICAgcHJvcGVybHkuCisgIEJpdCAweDA0IDogVURDICBVbmV4cGVjdGVkIERpc2Nvbm5lY3Rpb24KKyAgICAgICAgICAgICBJbmRpY2F0ZXMgdGhhdCB0aGUgZGV2aWNlIHJlbGVhc2VkIHRoZSBTQ1NJIEJVUyB3aGVuIHRoZSBjaGlwIAorICAgICAgICAgICAgIHdhcyBub3QgZXhwZWN0aW5nIHRoaXMgdG8gaGFwcGVuLiBBIGRldmljZSBtYXkgYmVoYXZlIHNvIHRvIAorICAgICAgICAgICAgIGluZGljYXRlIHRoZSBTQ1NJIGluaXRpYXRvciB0aGF0IGFuIGVycm9yIGNvbmRpdGlvbiBub3QgcmVwb3J0YWJsZSAgICAgICAgICAgICAgdXNpbmcgdGhlIFNDU0kgcHJvdG9jb2wgaGFzIG9jY3VycmVkLgorICBCaXQgMHgwMiA6IFJTVCAgU0NTSSBCVVMgUmVzZXQKKyAgICAgICAgICAgICBHZW5lcmFsbHkgU0NTSSB0YXJnZXRzIGRvIG5vdCByZXNldCB0aGUgU0NTSSBCVVMsIGFsdGhvdWdoIGFueSAKKyAgICAgICAgICAgICBkZXZpY2Ugb24gdGhlIEJVUyBjYW4gcmVzZXQgaXQgYXQgYW55IHRpbWUuCisgIEJpdCAweDAxIDogUEFSICBQYXJpdHkKKyAgICAgICAgICAgICBTQ1NJIHBhcml0eSBlcnJvciBkZXRlY3RlZC4KKyAgT24gYSBmYXVsdHkgU0NTSSBCVVMsIGFueSBlcnJvciBjb25kaXRpb24gYW1vbmcgU0dFICgweDA4KSwgVURDICgweDA0KSBhbmQgCisgIFBBUiAoMHgwMSkgbWF5IGJlIGRldGVjdGVkIGJ5IHRoZSBjaGlwLiBJZiB5b3VyIFNDU0kgc3lzdGVtIHNvbWV0aW1lcyAKKyAgZW5jb3VudGVycyBzdWNoIGVycm9yIGNvbmRpdGlvbnMsIGVzcGVjaWFsbHkgU0NTSSBHUk9TUyBFUlJPUiwgdGhlbiBhIFNDU0kgCisgIEJVUyBwcm9ibGVtIGlzIGxpa2VseSB0aGUgY2F1c2Ugb2YgdGhlc2UgZXJyb3JzLgorCitGb3IgZmllbGRzIEQsRSxGLEcgYW5kIEgsIHlvdSBtYXkgbG9vayBpbnRvIHRoZSBzeW01M2M4eHhfZGVmcy5oIGZpbGUgCit0aGF0IGNvbnRhaW5zIHNvbWUgbWluaW1hbCBjb21tZW50cyBvbiBJTyByZWdpc3RlciBiaXRzLgorRmllbGQgRCA6IFNPQ0wgIFNjc2kgT3V0cHV0IENvbnRyb2wgTGF0Y2gKKyAgICAgICAgICBUaGlzIHJlZ2lzdGVyIHJlZmxlY3RzIHRoZSBzdGF0ZSBvZiB0aGUgU0NTSSBjb250cm9sIGxpbmVzIHRoZSAKKyAgICAgICAgICBjaGlwIHdhbnQgdG8gZHJpdmUgb3IgY29tcGFyZSBhZ2FpbnN0LgorRmllbGQgRSA6IFNCQ0wgIFNjc2kgQnVzIENvbnRyb2wgTGluZXMKKyAgICAgICAgICBBY3R1YWwgdmFsdWUgb2YgY29udHJvbCBsaW5lcyBvbiB0aGUgU0NTSSBCVVMuCitGaWVsZCBGIDogU0JETCAgU2NzaSBCdXMgRGF0YSBMaW5lcworICAgICAgICAgIEFjdHVhbCB2YWx1ZSBvZiBkYXRhIGxpbmVzIG9uIHRoZSBTQ1NJIEJVUy4KK0ZpZWxkIEcgOiBTWEZFUiAgU0NTSSBUcmFuc2ZlcgorICAgICAgICAgIENvbnRhaW5zIHRoZSBzZXR0aW5nIG9mIHRoZSBTeW5jaHJvbm91cyBQZXJpb2QgZm9yIG91dHB1dCBhbmQgCisgICAgICAgICAgdGhlIGN1cnJlbnQgU3luY2hyb25vdXMgb2Zmc2V0IChvZmZzZXQgMCBtZWFucyBhc3luY2hyb25vdXMpLgorRmllbGQgSCA6IFNDTlRMMyBTY3NpIENvbnRyb2wgUmVnaXN0ZXIgMworICAgICAgICAgIENvbnRhaW5zIHRoZSBzZXR0aW5nIG9mIHRpbWluZyB2YWx1ZXMgZm9yIGJvdGggYXN5bmNocm9ub3VzIGFuZCAKKyAgICAgICAgICBzeW5jaHJvbm91cyBkYXRhIHRyYW5zZmVycy4gCitGaWVsZCBJIDogU0NOVEw0IFNjc2kgQ29udHJvbCBSZWdpc3RlciA0CisgICAgICAgICAgT25seSBtZWFuaW5mdWwgZm9yIDUzQzEwMTAgVWx0cmEzIGNvbnRyb2xsZXJzLgorCitVbmRlcnN0YW5kaW5nIEZpZWxkcyBKLCBLLCBMIGFuZCBkdW1wcyByZXF1aXJlcyB0byBoYXZlIGdvb2Qga25vd2xlZGdlIG9mIAorU0NTSSBzdGFuZGFyZHMsIGNoaXAgY29yZXMgZnVuY3Rpb25uYWxzIGFuZCBpbnRlcm5hbCBkcml2ZXIgZGF0YSBzdHJ1Y3R1cmVzLgorWW91IGFyZSBub3QgcmVxdWlyZWQgdG8gZGVjb2RlIGFuZCB1bmRlcnN0YW5kIHRoZW0sIHVubGVzcyB5b3Ugd2FudCB0byBoZWxwIAorbWFpbnRhaW4gdGhlIGRyaXZlciBjb2RlLgorCisxNy4gU2VyaWFsIE5WUkFNIChhZGRlZCBieSBSaWNoYXJkIFdhbHRoYW06IGRvcm1vdXNlQGZhcnNyb2J0LmRlbW9uLmNvLnVrKQorCisxNy4xIEZlYXR1cmVzCisKK0VuYWJsaW5nIHNlcmlhbCBOVlJBTSBzdXBwb3J0IGVuYWJsZXMgZGV0ZWN0aW9uIG9mIHRoZSBzZXJpYWwgTlZSQU0gaW5jbHVkZWQKK29uIFN5bWJpb3MgYW5kIHNvbWUgU3ltYmlvcyBjb21wYXRpYmxlIGhvc3QgYWRhcHRvcnMsIGFuZCBUZWtyYW0gYm9hcmRzLiBUaGUgCitzZXJpYWwgTlZSQU0gaXMgdXNlZCBieSBTeW1iaW9zIGFuZCBUZWtyYW0gdG8gaG9sZCBzZXQgdXAgcGFyYW1ldGVycyBmb3IgdGhlIAoraG9zdCBhZGFwdG9yIGFuZCBpdCdzIGF0dGFjaGVkIGRyaXZlcy4KKworVGhlIFN5bWJpb3MgTlZSQU0gYWxzbyBob2xkcyBkYXRhIG9uIHRoZSBib290IG9yZGVyIG9mIGhvc3QgYWRhcHRvcnMgaW4gYQorc3lzdGVtIHdpdGggbW9yZSB0aGFuIG9uZSBob3N0IGFkYXB0b3IuICBUaGlzIGluZm9ybWF0aW9uIGlzIG5vIGxvbmdlciB1c2VkCithcyBpdCdzIGZ1bmRhbWVudGFsbHkgaW5jb21wYXRpYmxlIHdpdGggdGhlIGhvdHBsdWcgUENJIG1vZGVsLgorCitUZWtyYW0gYm9hcmRzIHVzaW5nIFN5bWJpb3MgY2hpcHMsIERDMzkwVy9GL1UsIHdoaWNoIGhhdmUgTlZSQU0gYXJlIGRldGVjdGVkCithbmQgdGhpcyBpcyB1c2VkIHRvIGRpc3Rpbmd1aXNoIGJldHdlZW4gU3ltYmlvcyBjb21wYXRpYmxlIGFuZCBUZWtyYW0gaG9zdCAKK2FkYXB0b3JzLiBUaGlzIGlzIHVzZWQgdG8gZGlzYWJsZSB0aGUgU3ltYmlvcyBjb21wYXRpYmxlICJkaWZmIiBzZXR0aW5nCitpbmNvcnJlY3RseSBzZXQgb24gVGVrcmFtIGJvYXJkcyBpZiB0aGUgQ09ORklHX1NDU0lfNTNDOFhYX1NZTUJJT1NfQ09NUEFUIAorY29uZmlndXJhdGlvbiBwYXJhbWV0ZXIgaXMgc2V0IGVuYWJsaW5nIGJvdGggU3ltYmlvcyBhbmQgVGVrcmFtIGJvYXJkcyB0byBiZSAKK3VzZWQgdG9nZXRoZXIgd2l0aCB0aGUgU3ltYmlvcyBjYXJkcyB1c2luZyBhbGwgdGhlaXIgZmVhdHVyZXMsIGluY2x1ZGluZworImRpZmYiIHN1cHBvcnQuICgibGVkIHBpbiIgc3VwcG9ydCBmb3IgU3ltYmlvcyBjb21wYXRpYmxlIGNhcmRzIGNhbiByZW1haW4KK2VuYWJsZWQgd2hlbiB1c2luZyBUZWtyYW0gY2FyZHMuIEl0IGRvZXMgbm90aGluZyB1c2VmdWwgZm9yIFRla3JhbSBob3N0CithZGFwdG9ycyBidXQgZG9lcyBub3QgY2F1c2UgcHJvYmxlbXMgZWl0aGVyLikKKworVGhlIHBhcmFtZXRlcnMgdGhlIGRyaXZlciBpcyBhYmxlIHRvIGdldCBmcm9tIHRoZSBOVlJBTSBkZXBlbmQgb24gdGhlIAorZGF0YSBmb3JtYXQgdXNlZCwgYXMgZm9sbG93OgorCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUZWtyYW0gZm9ybWF0ICAgICAgU3ltYmlvcyBmb3JtYXQKK0dlbmVyYWwgYW5kIGhvc3QgcGFyYW1ldGVycworICAgIEJvb3Qgb3JkZXIgICAgICAgICAgICAgICAgICAgICAgICAgTiAgICAgICAgICAgICAgICAgICBZCisgICAgSG9zdCBTQ1NJIElEICAgICAgICAgICAgICAgICAgICAgICBZICAgICAgICAgICAgICAgICAgIFkKKyAgICBTQ1NJIHBhcml0eSBjaGVja2luZyAgICAgICAgICAgICAgIFkgICAgICAgICAgICAgICAgICAgWQorICAgIFZlcmJvc2UgYm9vdCBtZXNzYWdlcyAgICAgICAgICAgICAgTiAgICAgICAgICAgICAgICAgICBZCitTQ1NJIGRldmljZXMgcGFyYW1ldGVycworICAgIFN5bmNocm9ub3VzIHRyYW5zZmVyIHNwZWVkICAgICAgICAgWSAgICAgICAgICAgICAgICAgICBZCisgICAgV2lkZSAxNiAvIE5hcnJvdyAgICAgICAgICAgICAgICAgICBZICAgICAgICAgICAgICAgICAgIFkKKyAgICBUYWdnZWQgQ29tbWFuZCBRdWV1aW5nIGVuYWJsZWQgICAgIFkgICAgICAgICAgICAgICAgICAgWQorICAgIERpc2Nvbm5lY3Rpb25zIGVuYWJsZWQgICAgICAgICAgICAgWSAgICAgICAgICAgICAgICAgICBZCisgICAgU2NhbiBhdCBib290IHRpbWUgICAgICAgICAgICAgICAgICBOICAgICAgICAgICAgICAgICAgIFkKKworSW4gb3JkZXIgdG8gc3BlZWQgdXAgdGhlIHN5c3RlbSBib290LCBmb3IgZWFjaCBkZXZpY2UgY29uZmlndXJlZCB3aXRob3V0IAordGhlICJzY2FuIGF0IGJvb3QgdGltZSIgb3B0aW9uLCB0aGUgZHJpdmVyIGZvcmNlcyBhbiBlcnJvciBvbiB0aGUgCitmaXJzdCBURVNUIFVOSVQgUkVBRFkgY29tbWFuZCByZWNlaXZlZCBmb3IgdGhpcyBkZXZpY2UuCisKKworMTcuMiBTeW1iaW9zIE5WUkFNIGxheW91dAorCit0eXBpY2FsIGRhdGEgYXQgTlZSQU0gYWRkcmVzcyAweDEwMCAoNTNjODEwYSBOVlJBTSkKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiswMCAwMAorNjQgMDEKKzhlIDBiCisKKzAwIDMwIDAwIDAwIDAwIDAwIDA3IDAwIDAwIDAwIDAwIDAwIDAwIDAwIDA3IDA0IDEwIDA0IDAwIDAwIAorCiswNCAwMCAwZiAwMCAwMCAxMCAwMCA1MCAwMCAwMCAwMSAwMCAwMCA2MiAKKzA0IDAwIDAzIDAwIDAwIDEwIDAwIDU4IDAwIDAwIDAxIDAwIDAwIDYzIAorMDQgMDAgMDEgMDAgMDAgMTAgMDAgNDggMDAgMDAgMDEgMDAgMDAgNjEgCiswMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAKKworMGYgMDAgMDggMDggNjQgMDAgMGEgMDAKKzBmIDAwIDA4IDA4IDY0IDAwIDBhIDAwIAorMGYgMDAgMDggMDggNjQgMDAgMGEgMDAgCiswZiAwMCAwOCAwOCA2NCAwMCAwYSAwMCAKKzBmIDAwIDA4IDA4IDY0IDAwIDBhIDAwIAorMGYgMDAgMDggMDggNjQgMDAgMGEgMDAgCiswZiAwMCAwOCAwOCA2NCAwMCAwYSAwMCAKKzBmIDAwIDA4IDA4IDY0IDAwIDBhIDAwIAorCiswZiAwMCAwOCAwOCA2NCAwMCAwYSAwMCAKKzBmIDAwIDA4IDA4IDY0IDAwIDBhIDAwIAorMGYgMDAgMDggMDggNjQgMDAgMGEgMDAgCiswZiAwMCAwOCAwOCA2NCAwMCAwYSAwMCAKKzBmIDAwIDA4IDA4IDY0IDAwIDBhIDAwIAorMGYgMDAgMDggMDggNjQgMDAgMGEgMDAgCiswZiAwMCAwOCAwOCA2NCAwMCAwYSAwMCAKKzBmIDAwIDA4IDA4IDY0IDAwIDBhIDAwIAorCiswMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAKKzAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIAorMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgCiswMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAKKzAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIAorMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgCiswMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAKKzAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIAorCiswMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAKKzAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIAorMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgCiswMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAKKzAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIAorMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgCiswMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAKKzAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIAorCiswMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAKKzAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIAorMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgCisKK2ZlIGZlCiswMCAwMAorMDAgMDAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitOVlJBTSBsYXlvdXQgZGV0YWlscworCitOVlJBTSBBZGRyZXNzIDB4MDAwLTB4MGZmIG5vdCB1c2VkCisgICAgICAgICAgICAgIDB4MTAwLTB4MjZmIGluaXRpYWxpc2VkIGRhdGEKKyAgICAgICAgICAgICAgMHgyNzAtMHg3ZmYgbm90IHVzZWQKKworZ2VuZXJhbCBsYXlvdXQKKworICAgICAgICBoZWFkZXIgIC0gICA2IGJ5dGVzLAorICAgICAgICBkYXRhICAgIC0gMzU2IGJ5dGVzIChjaGVja3N1bSBpcyBieXRlIHN1bSBvZiB0aGlzIGRhdGEpCisgICAgICAgIHRyYWlsZXIgLSAgIDYgYnl0ZXMKKyAgICAgICAgICAgICAgICAgIC0tLQorICAgICAgICB0b3RhbCAgICAgMzY4IGJ5dGVzCisKK2RhdGEgYXJlYSBsYXlvdXQKKworICAgICAgICBjb250cm9sbGVyIHNldCB1cCAgLSAgMjAgYnl0ZXMKKyAgICAgICAgYm9vdCBjb25maWd1cmF0aW9uIC0gIDU2IGJ5dGVzICg0eDE0IGJ5dGVzKQorICAgICAgICBkZXZpY2Ugc2V0IHVwICAgICAgLSAxMjggYnl0ZXMgKDE2eDggYnl0ZXMpCisgICAgICAgIHVudXNlZCAoc3BhcmU/KSAgICAtIDE1MiBieXRlcyAoMTl4OCBieXRlcykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0tCisgICAgICAgIHRvdGFsICAgICAgICAgICAgICAgIDM1NiBieXRlcworCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoraGVhZGVyCisKKzAwIDAwICAgLSA/PyBzdGFydCBtYXJrZXIKKzY0IDAxICAgLSBieXRlIGNvdW50IChsc2IvbXNiIGV4Y2x1ZGVzIGhlYWRlci90cmFpbGVyKQorOGUgMGIgICAtIGNoZWNrc3VtIChsc2IvbXNiIGV4Y2x1ZGVzIGhlYWRlci90cmFpbGVyKQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2NvbnRyb2xsZXIgc2V0IHVwCisKKzAwIDMwIDAwIDAwIDAwIDAwIDA3IDAwIDAwIDAwIDAwIDAwIDAwIDAwIDA3IDA0IDEwIDA0IDAwIDAwCisgICAgICAgICAgICAgICAgICAgfCAgICAgfCAgICAgICAgICAgfCAgICAgfAorICAgICAgICAgICAgICAgICAgIHwgICAgIHwgICAgICAgICAgIHwgICAgICAtLSBob3N0IElECisgICAgICAgICAgICAgICAgICAgfCAgICAgfCAgICAgICAgICAgfAorICAgICAgICAgICAgICAgICAgIHwgICAgIHwgICAgICAgICAgICAtLVJlbW92YWJsZSBNZWRpYSBTdXBwb3J0CisgICAgICAgICAgICAgICAgICAgfCAgICAgfCAgICAgICAgICAgICAgIDB4MDAgPSBub25lCisgICAgICAgICAgICAgICAgICAgfCAgICAgfCAgICAgICAgICAgICAgIDB4MDEgPSBCb290YWJsZSBEZXZpY2UKKyAgICAgICAgICAgICAgICAgICB8ICAgICB8ICAgICAgICAgICAgICAgMHgwMiA9IEFsbCB3aXRoIE1lZGlhCisgICAgICAgICAgICAgICAgICAgfCAgICAgfAorICAgICAgICAgICAgICAgICAgIHwgICAgICAtLWZsYWcgYml0cyAyCisgICAgICAgICAgICAgICAgICAgfCAgICAgICAgMHgwMDAwMDAwMT0gc2NhbiBvcmRlciBoaS0+bG93CisgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgIChkZWZhdWx0IDB4MDAgLSBzY2FuIGxvdy0+aGkpCisgICAgICAgICAgICAgICAgICAgIC0tZmxhZyBiaXRzIDEKKyAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMSBzY2FtIGVuYWJsZQorICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDEwIHBhcml0eSBlbmFibGUKKyAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDEwMCB2ZXJib3NlIGJvb3QgbXNncworCityZW1haW5pbmcgYnl0ZXMgdW5rbm93biAtIHRoZXkgZG8gbm90IGFwcGVhciB0byBjaGFuZ2UgaW4gbXkKK2N1cnJlbnQgc2V0IHVwIGZvciBhbnkgb2YgdGhlIGNvbnRyb2xsZXJzLgorCitkZWZhdWx0IHNldCB1cCBpcyBpZGVudGljYWwgZm9yIDUzYzgxMGEgYW5kIDUzYzg3NSBOVlJBTQorKFJlbW92YWJsZSBNZWRpYSBhZGRlZCBTeW1iaW9zIEJJT1MgdmVyc2lvbiA0LjA5KQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2Jvb3QgY29uZmlndXJhdGlvbgorCitib290IG9yZGVyIHNldCBieSBvcmRlciBvZiB0aGUgZGV2aWNlcyBpbiB0aGlzIHRhYmxlCisKKzA0IDAwIDBmIDAwIDAwIDEwIDAwIDUwIDAwIDAwIDAxIDAwIDAwIDYyIC0tIDFzdCBjb250cm9sbGVyCiswNCAwMCAwMyAwMCAwMCAxMCAwMCA1OCAwMCAwMCAwMSAwMCAwMCA2MyAgICAybmQgY29udHJvbGxlcgorMDQgMDAgMDEgMDAgMDAgMTAgMDAgNDggMDAgMDAgMDEgMDAgMDAgNjEgICAgM3JkIGNvbnRyb2xsZXIKKzAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwICAgIDR0aCBjb250cm9sbGVyCisgICAgICAgfCAgfCAgfCAgfCAgICAgfCAgICAgICAgfCAgICAgfCAgfAorICAgICAgIHwgIHwgIHwgIHwgICAgIHwgICAgICAgIHwgICAgICAtLS0tIFBDSSBpbyBwb3J0IGFkcgorICAgICAgIHwgIHwgIHwgIHwgICAgIHwgICAgICAgICAtLTB4MDEgaW5pdC9zY2FuIGF0IGJvb3QgdGltZQorICAgICAgIHwgIHwgIHwgIHwgICAgICAtLVBDSSBkZXZpY2UvZnVuY3Rpb24gbnVtYmVyICgweGRkZGRkZmZmKQorICAgICAgIHwgIHwgICAtLS0tLSA/PyBQQ0kgdmVuZG9yIElEIChsc2IvbXNiKQorICAgICAgICAtLS0tUENJIGRldmljZSBJRCAobHNiL21zYikKKworPz8gdXNlIG9mIHRoaXMgZGF0YSBpcyBhIGd1ZXNzIGJ1dCBzZWVtcyByZWFzb25hYmxlCisKK3JlbWFpbmluZyBieXRlcyB1bmtub3duIC0gdGhleSBkbyBub3QgYXBwZWFyIHRvIGNoYW5nZSBpbiBteQorY3VycmVudCBzZXQgdXAKKworZGVmYXVsdCBzZXQgdXAgaXMgaWRlbnRpY2FsIGZvciA1M2M4MTBhIGFuZCA1M2M4NzUgTlZSQU0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitkZXZpY2Ugc2V0IHVwICh1cCB0byAxNiBkZXZpY2VzIC0gaW5jbHVkZXMgY29udHJvbGxlcikKKworMGYgMDAgMDggMDggNjQgMDAgMGEgMDAgLSBpZCAwCiswZiAwMCAwOCAwOCA2NCAwMCAwYSAwMCAKKzBmIDAwIDA4IDA4IDY0IDAwIDBhIDAwIAorMGYgMDAgMDggMDggNjQgMDAgMGEgMDAgCiswZiAwMCAwOCAwOCA2NCAwMCAwYSAwMCAKKzBmIDAwIDA4IDA4IDY0IDAwIDBhIDAwIAorMGYgMDAgMDggMDggNjQgMDAgMGEgMDAgCiswZiAwMCAwOCAwOCA2NCAwMCAwYSAwMCAKKworMGYgMDAgMDggMDggNjQgMDAgMGEgMDAgCiswZiAwMCAwOCAwOCA2NCAwMCAwYSAwMCAKKzBmIDAwIDA4IDA4IDY0IDAwIDBhIDAwIAorMGYgMDAgMDggMDggNjQgMDAgMGEgMDAgCiswZiAwMCAwOCAwOCA2NCAwMCAwYSAwMCAKKzBmIDAwIDA4IDA4IDY0IDAwIDBhIDAwIAorMGYgMDAgMDggMDggNjQgMDAgMGEgMDAgCiswZiAwMCAwOCAwOCA2NCAwMCAwYSAwMCAtIGlkIDE1CisgfCAgICAgfCAgfCAgfCAgICAgfCAgfAorIHwgICAgIHwgIHwgIHwgICAgICAtLS0tdGltZW91dCAobHNiL21zYikKKyB8ICAgICB8ICB8ICAgLS1zeW5jaCBwZXJpb2QgKDB4Pz8gNDAgTXRyYW5zL3NlYy0gZmFzdCA0MCkgKHByb2JhYmx5IDB4MjgpCisgfCAgICAgfCAgfCAgICAgICAgICAgICAgICAgICgweDMwIDIwIE10cmFucy9zZWMtIGZhc3QgMjApCisgfCAgICAgfCAgfCAgICAgICAgICAgICAgICAgICgweDY0IDEwIE10cmFucy9zZWMtIGZhc3QgKQorIHwgICAgIHwgIHwgICAgICAgICAgICAgICAgICAoMHhjOCAgNSBNdHJhbnMvc2VjKQorIHwgICAgIHwgIHwgICAgICAgICAgICAgICAgICAoMHgwMCAgYXN5bmNocm9ub3VzKQorIHwgICAgIHwgICAtLSA/PyBtYXggc3luYyBvZmZzZXQgKDB4MDggaW4gTlZSQU0gb24gNTNjODEwYSkgCisgfCAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAoMHgxMCBpbiBOVlJBTSBvbiA1M2M4NzUpCisgfCAgICAgIC0tZGV2aWNlIGJ1cyB3aWR0aCAoMHgwOCBuYXJyb3cpCisgfCAgICAgICAgICAgICAgICAgICAgICAgICAoMHgxMCAxNiBiaXQgd2lkZSkKKyAgLS1mbGFnIGJpdHMKKyAgICAweDAwMDAwMDAxIC0gZGlzY29ubmVjdCBlbmFibGVkCisgICAgMHgwMDAwMDAxMCAtIHNjYW4gYXQgYm9vdCB0aW1lCisgICAgMHgwMDAwMDEwMCAtIHNjYW4gbHVucworICAgIDB4MDAwMDEwMDAgLSBxdWV1ZSB0YWdzIGVuYWJsZWQKKworcmVtYWluaW5nIGJ5dGVzIHVua25vd24gLSB0aGV5IGRvIG5vdCBhcHBlYXIgdG8gY2hhbmdlIGluIG15CitjdXJyZW50IHNldCB1cAorCis/PyB1c2Ugb2YgdGhpcyBkYXRhIGlzIGEgZ3Vlc3MgYnV0IHNlZW1zIHJlYXNvbmFibGUgCisoYnV0IGl0IGNvdWxkIGJlIG1heCBidXMgd2lkdGgpCisKK2RlZmF1bHQgc2V0IHVwIGZvciA1M2M4MTBhIE5WUkFNCitkZWZhdWx0IHNldCB1cCBmb3IgNTNjODc1IE5WUkFNIC0gYnVzIHdpZHRoICAgICAtIDB4MTAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBzeW5jIG9mZnNldCA/IC0gMHgxMAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIHN5bmMgcGVyaW9kICAgLSAweDMwCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorPz8gc3BhcmUgZGV2aWNlIHNwYWNlICgzMiBiaXQgYnVzID8/KQorCiswMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAgKDE5eDhieXRlcykKKy4KKy4KKzAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwCisKK2RlZmF1bHQgc2V0IHVwIGlzIGlkZW50aWNhbCBmb3IgNTNjODEwYSBhbmQgNTNjODc1IE5WUkFNCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQordHJhaWxlcgorCitmZSBmZSAgIC0gPyBlbmQgbWFya2VyID8KKzAwIDAwCiswMCAwMAorCitkZWZhdWx0IHNldCB1cCBpcyBpZGVudGljYWwgZm9yIDUzYzgxMGEgYW5kIDUzYzg3NSBOVlJBTQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworCisKKzE3LjMgVGVrcmFtIE5WUkFNIGxheW91dAorCitudnJhbSA2NHgxNiAoMTAyNCBiaXQpCisKK0RyaXZlIHNldHRpbmdzCisKK0RyaXZlIElEIDAtMTUgKGFkZHIgMHgweXl5eTAgPSBkZXZpY2Ugc2V0dXAsIHl5eXkgPSBJRCkKKyAgICAgICAgICAgICAgKGFkZHIgMHgweXl5eTEgPSAweDAwMDApCisKKyAgICB4IHggeCB4ICB4IHggeCB4ICB4IHggeCB4ICB4IHggeCB4CisgICAgICAgICAgICAgICB8IHwgfCAgICAgIHwgfCAgfCB8IHwgfAorICAgICAgICAgICAgICAgfCB8IHwgICAgICB8IHwgIHwgfCB8ICAtLS0tLSBwYXJpdHkgY2hlY2sgICAwIC0gb2ZmCisgICAgICAgICAgICAgICB8IHwgfCAgICAgIHwgfCAgfCB8IHwgICAgICAgICAgICAgICAgICAgICAgIDEgLSBvbgorICAgICAgICAgICAgICAgfCB8IHwgICAgICB8IHwgIHwgfCB8CisgICAgICAgICAgICAgICB8IHwgfCAgICAgIHwgfCAgfCB8ICAtLS0tLS0tIHN5bmMgbmVnICAgICAgIDAgLSBvZmYKKyAgICAgICAgICAgICAgIHwgfCB8ICAgICAgfCB8ICB8IHwgICAgICAgICAgICAgICAgICAgICAgICAgMSAtIG9uCisgICAgICAgICAgICAgICB8IHwgfCAgICAgIHwgfCAgfCB8CisgICAgICAgICAgICAgICB8IHwgfCAgICAgIHwgfCAgfCAgLS0tLS0tLS0tIGRpc2Nvbm5lY3QgICAgIDAgLSBvZmYKKyAgICAgICAgICAgICAgIHwgfCB8ICAgICAgfCB8ICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgMSAtIG9uCisgICAgICAgICAgICAgICB8IHwgfCAgICAgIHwgfCAgfAorICAgICAgICAgICAgICAgfCB8IHwgICAgICB8IHwgICAtLS0tLS0tLS0tLSBzdGFydCBjbWQgICAgICAwIC0gb2ZmCisgICAgICAgICAgICAgICB8IHwgfCAgICAgIHwgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEgLSBvbgorICAgICAgICAgICAgICAgfCB8IHwgICAgICB8IHwKKyAgICAgICAgICAgICAgIHwgfCB8ICAgICAgfCAgLS0tLS0tLS0tLS0tLS0gdGFnZ2VkIGNtZHMgICAgMCAtIG9mZgorICAgICAgICAgICAgICAgfCB8IHwgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxIC0gb24KKyAgICAgICAgICAgICAgIHwgfCB8ICAgICAgfCAKKyAgICAgICAgICAgICAgIHwgfCB8ICAgICAgIC0tLS0tLS0tLS0tLS0tLS0gd2lkZSBuZWcgICAgICAgMCAtIG9mZgorICAgICAgICAgICAgICAgfCB8IHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxIC0gb24KKyAgICAgICAgICAgICAgIHwgfCB8CisgICAgICAgICAgICAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIHN5bmMgcmF0ZSAgICAgIDAgLSAxMC4wIE10cmFucy9zZWMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSAtICA4LjAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMiAtICA2LjYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMyAtICA1LjcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNCAtICA1LjAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNSAtICA0LjAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNiAtICAzLjAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNyAtICAyLjAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNyAtICAyLjAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOCAtIDIwLjAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOSAtIDE2LjcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYSAtIDEzLjkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYiAtIDExLjkKKworR2xvYmFsIHNldHRpbmdzCisKK0hvc3QgZmxhZ3MgMCAoYWRkciAweDEwMDAwMCwgMzIpIAorCisgICAgeCB4IHggeCAgeCB4IHggeCAgeCB4IHggeCAgeCB4IHggeAorICAgIHwgfCB8IHwgIHwgfCB8IHwgICAgICAgICAgIHwgfCB8IHwKKyAgICB8IHwgfCB8ICB8IHwgfCB8ICAgICAgICAgICAgLS0tLS0tLS0tLS0gaG9zdCBJRCAgICAweDAwIC0gMHgwZgorICAgIHwgfCB8IHwgIHwgfCB8IHwKKyAgICB8IHwgfCB8ICB8IHwgfCAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gc3VwcG9ydCBmb3IgICAgMCAtIG9mZgorICAgIHwgfCB8IHwgIHwgfCB8ICAgICAgICAgICAgICAgICAgICAgICAgICA+IDIgZHJpdmVzICAgICAxIC0gb24KKyAgICB8IHwgfCB8ICB8IHwgfCAKKyAgICB8IHwgfCB8ICB8IHwgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gc3VwcG9ydCBkcml2ZXMgMCAtIG9mZgorICAgIHwgfCB8IHwgIHwgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICA+IDFHYnl0ZXMgICAgICAxIC0gb24KKyAgICB8IHwgfCB8ICB8IHwKKyAgICB8IHwgfCB8ICB8ICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gYnVzIHJlc2V0IG9uICAgMCAtIG9mZgorICAgIHwgfCB8IHwgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvd2VyIG9uICAgICAxIC0gb24KKyAgICB8IHwgfCB8ICB8CisgICAgfCB8IHwgfCAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIGFjdGl2ZSBuZWcgICAgIDAgLSBvZmYKKyAgICB8IHwgfCB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSAtIG9uCisgICAgfCB8IHwgfAorICAgIHwgfCB8ICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBpbW0gc2VlayAgICAgICAwIC0gb2ZmCisgICAgfCB8IHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEgLSBvbgorICAgIHwgfCB8CisgICAgfCB8ICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIHNjYW4gbHVucyAgICAgIDAgLSBvZmYKKyAgICB8IHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSAtIG9uCisgICAgfCB8CisgICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIHJlbW92YWJsZSAgICAgIDAgLSBkaXNhYmxlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFzIEJJT1MgZGV2ICAgIDEgLSBib290IGRldmljZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyIC0gYWxsCisKK0hvc3QgZmxhZ3MgMSAoYWRkciAweDEwMDAwMSwgMzMpCisKKyAgICB4IHggeCB4ICB4IHggeCB4ICB4IHggeCB4ICB4IHggeCB4CisgICAgICAgICAgICAgICB8IHwgfCAgICAgICAgICAgICB8IHwgfCAKKyAgICAgICAgICAgICAgIHwgfCB8ICAgICAgICAgICAgICAtLS0tLS0tLS0gYm9vdCBkZWxheSAgICAgMCAtICAgMyBzZWMKKyAgICAgICAgICAgICAgIHwgfCB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSAtICAgNQorICAgICAgICAgICAgICAgfCB8IHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyIC0gIDEwCisgICAgICAgICAgICAgICB8IHwgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMgLSAgMjAKKyAgICAgICAgICAgICAgIHwgfCB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNCAtICAzMAorICAgICAgICAgICAgICAgfCB8IHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1IC0gIDYwCisgICAgICAgICAgICAgICB8IHwgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDYgLSAxMjAKKyAgICAgICAgICAgICAgIHwgfCB8CisgICAgICAgICAgICAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIG1heCB0YWcgY21kcyAgIDAgLSAgMgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxIC0gIDQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMiAtICA4CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMgLSAxNgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0IC0gMzIKKworSG9zdCBmbGFncyAyIChhZGRyIDB4MTAwMDEwLCAzNCkKKworICAgIHggeCB4IHggIHggeCB4IHggIHggeCB4IHggIHggeCB4IHgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tLS0tIEYyL0Y2IGVuYWJsZSAgIDAgLSBvZmYgPz8/CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEgLSBvbiAgPz8/CisKK2NoZWNrc3VtIChhZGRyIDB4MTExMTExKQorCitjaGVja3N1bSA9IDB4MTIzNCAtIChzdW0gYWRkciAwLTYzKQorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK2RlZmF1bHQgbnZyYW0gZGF0YToKKworMHgwMDM3IDB4MDAwMCAweDAwMzcgMHgwMDAwIDB4MDAzNyAweDAwMDAgMHgwMDM3IDB4MDAwMAorMHgwMDM3IDB4MDAwMCAweDAwMzcgMHgwMDAwIDB4MDAzNyAweDAwMDAgMHgwMDM3IDB4MDAwMAorMHgwMDM3IDB4MDAwMCAweDAwMzcgMHgwMDAwIDB4MDAzNyAweDAwMDAgMHgwMDM3IDB4MDAwMAorMHgwMDM3IDB4MDAwMCAweDAwMzcgMHgwMDAwIDB4MDAzNyAweDAwMDAgMHgwMDM3IDB4MDAwMCAKKworMHgwZjA3IDB4MDQwMCAweDAwMDEgMHgwMDAwIDB4MDAwMCAweDAwMDAgMHgwMDAwIDB4MDAwMAorMHgwMDAwIDB4MDAwMCAweDAwMDAgMHgwMDAwIDB4MDAwMCAweDAwMDAgMHgwMDAwIDB4MDAwMAorMHgwMDAwIDB4MDAwMCAweDAwMDAgMHgwMDAwIDB4MDAwMCAweDAwMDAgMHgwMDAwIDB4MDAwMAorMHgwMDAwIDB4MDAwMCAweDAwMDAgMHgwMDAwIDB4MDAwMCAweDAwMDAgMHgwMDAwIDB4ZmJiYworCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK0VuZCBvZiBMaW51eCBTWU0tMiBkcml2ZXIgZG9jdW1lbnRhdGlvbiBmaWxlCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3Njc2kvdG1zY3NpbS50eHQgYi9Eb2N1bWVudGF0aW9uL3Njc2kvdG1zY3NpbS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTE2NTIyOQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vc2NzaS90bXNjc2ltLnR4dApAQCAtMCwwICsxLDQ0OSBAQAorVGhlIHRtc2NzaW0gZHJpdmVyCis9PT09PT09PT09PT09PT09PT0KKworMS4gUHVycG9zZSBhbmQgaGlzdG9yeQorMi4gSW5zdGFsbGF0aW9uCiszLiBGZWF0dXJlcworNC4gQ29uZmlndXJhdGlvbiB2aWEgL3Byb2Mvc2NzaS90bXNjc2ltLz8KKzUuIENvbmZpZ3VyYXRpb24gdmlhIGJvb3QvbW9kdWxlIHBhcmFtcworNi4gUG90ZW50aWFsIGltcHJvdmVtZW50cworNy4gQnVnIHJlcG9ydHMsIGRlYnVnZ2luZyBhbmQgdXBkYXRlcworOC4gQWNrbm93bGVkZ2VtZW50cworOS4gQ29weXJpZ2h0CisKKworMS4gUHVycG9zZSBhbmQgaGlzdG9yeQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorVGhlIHRtc2NzaW0gZHJpdmVyIHN1cHBvcnRzIFBDSSBTQ1NJIEhvc3QgQWRhcHRlcnMgYmFzZWQgb24gdGhlIEFNNTNDOTc0CitjaGlwLiBBTTUzQzk3NCBiYXNlZCBTQ1NJIGFkYXB0ZXJzIGluY2x1ZGU6IAorIFRla3JhbSBEQzM5MCwgREMzOTBUCisgRGF3aWNvbnRyb2wgMjk3NAorIFFMb2dpYyBGYXN0ISBQQ0kgQmFzaWMKKyBzb21lIG9uLWJvYXJkIGFkYXB0ZXJzCisoVGhpcyBpcyBtb3N0IHByb2JhYmx5IG5vdCBhIGNvbXBsZXRlIGxpc3QpCisKK0l0IGhhcyBvcmlnaW5hbGx5IHdyaXR0ZW4gYnkgQy5MLiBIdWFuZyBmcm9tIHRoZSBUZWtyYW0gY29ycC4gdG8gc3VwcG9ydCB0aGUKK1Rla3JhbSBEQzM5MChUKSBhZGFwdGVyLiBUaGlzIGlzIHdoZXJlIHRoZSBuYW1lIGNvbWVzIGZyb206IHRtID0gVGVrcmFtCitzY3NpID0gU0NTSSBkcml2ZXIsIG0gPSBBTUQgKD8pIGFzIG9wcG9zZWQgdG8gdyBmb3IgdGhlIERDMzkwVy9VL0YKKyhOQ1I1M2M4WDUsIFg9Mi83KSBkcml2ZXIuIFllcywgdGhlcmUgd2FzIGFsc28gYSBkcml2ZXIgZm9yIHRoZSBsYXR0ZXIsCit0bXNjc2l3LCB3aGljaCBzdXBwb3J0ZWQgREMzOTBXL1UvRiBhZGFwdGVycy4gSXQncyBub3QgbWFpbnRhaW5lZCBhbnkgbW9yZSwKK2FzIHRoZSBuY3I1M2M4eHggaXMgcGVyZmVjdGx5IHN1cHBvcnRpbmcgdGhlc2UgYWRwYXRlcnMgc2luY2Ugc29tZSB0aW1lLgorCitUaGUgZHJpdmVyIGZpcnN0IGFwcGVhcmVkIGluIEFwcmlsIDE5OTYsIGV4Y2x1c2l2ZWx5IHN1cHBvcnRlZCB0aGUgREMzOTAgCithbmQgaGFzIGJlZW4gZW5oYW5jZWQgc2luY2UgdGhlbiBpbiB2YXJpb3VzIHN0ZXBzLiBJbiBNYXkgMTk5OCBzdXBwb3J0IGZvciAKK2dlbmVyYWwgQU01M0M5NzQgYmFzZWQgYWRhcHRlcnMgYW5kIHNvbWUgcG9zc2liaWxpdGllcyB0byBjb25maWd1cmUgaXQgd2VyZQorYWRkZWQuIFRoZSBub24tREMzOTAgc3VwcG9ydCB3b3JrcyBieSBhc3N1bWluZyBzb21lIHZhbHVlcyBmb3IgdGhlIGRhdGEKK25vcm1hbGx5IHRha2VuIGZyb20gdGhlIERDMzkwIEVFUFJPTS4gU2VlIGJlbG93IChjaGFwdGVyIDUpIGZvciBkZXRhaWxzLgorCitXaGVuIHVzaW5nIHRoZSBEQzM5MCwgdGhlIGNvbmZpZ3VyYXRpb24gaXMgc3RpbGwgYmUgZG9uZSB1c2luZyB0aGUgREMzOTAKK0JJT1Mgc2V0dXAuIFRoZSBEQzM5MCBFRVBST00gaXMgcmVhZCBhbmQgdXNlZCBieSB0aGUgZHJpdmVyLCBhbnkgYm9vdCBvcgorbW9kdWxlIHBhcmFtZXRlcnMgKGNoYXB0ZXIgNSkgYXJlIGlnbm9yZWQhIEhvd2V2ZXIsIHlvdSBjYW4gY2hhbmdlIHNldHRpbmdzCitkeW5hbWljYWxseSwgYXMgZGVzY3JpYmVkIGluIGNoYXB0ZXIgNC4gCisKK0ZvciBhIG1vcmUgZGV0YWlsZWQgZGVzY3JpcHRpb24gb2YgdGhlIGRyaXZlcidzIGhpc3RvcnksIHNlZSB0aGUgZmlyc3QgbGluZXMKK29mIHRtc2NzaW0uYy4KK1RoZSBudW1iZXJpbmcgc2NoZW1lIGlzbid0IGNvbnNpc3RlbnQuIFRoZSBmaXJzdCB2ZXJzaW9ucyB3ZW50IGZyb20gMS4wMCB0bworMS4xMiwgdGhlbiAxLjIwYSB0byAxLjIwdC4gRmluYWxseSBJIGRlY2lkZWQgdG8gdXNlIHRoZSBuY3I1M2M4eHggc2NoZW1lLiBTbwordGhlIG5leHQgcmV2aXNpb25zIHdpbGwgYmUgMi4wYSB0byAyLjBYIChzdGFibGUpLCAyLjFhIHRvIDIuMVggKGV4cGVyaW1lbnRhbCksCisyLjJhIHRvIDIuMlggKHN0YWJsZSwgYWdhaW4pIGV0Yy4gKFggPSBhbnl0aGluZyBiZXR3ZWVuIGEgYW5kIHouKSBJZiBJIHNlbmQKK2ZpeGVzIHRvIHBlb3BsZSBmb3IgdGVzdGluZywgSSBjcmVhdGUgaW50ZXJtZWRpYXRlIHZlcnNpb25zIHdpdGggYSBkaWdpdCAKK2FwcGVuZGVkLCBlLmcuIDIuMGMzLgorCisKKzIuIEluc3RhbGxhdGlvbgorLS0tLS0tLS0tLS0tLS0tCitJZiB5b3UgZ290IGFueSByZWNlbnQga2VybmVsIHdpdGggdGhpcyBkcml2ZXIgYW5kIGRvY3VtZW50IGluY2x1ZGVkIGluCitsaW51eC9kcml2ZXJzL3Njc2ksIHlvdSBiYXNpY2FsbHkgaGF2ZSB0byBkbyBub3RoaW5nIHNwZWNpYWwgdG8gdXNlIHRoaXMKK2RyaXZlci4gT2YgY291cnNlIHlvdSBoYXZlIHRvIGNob29zZSB0byBjb21waWxlIFNDU0kgc3VwcG9ydCBhbmQgREMzOTAoVCkKK3N1cHBvcnQgaW50byB5b3VyIGtlcm5lbCBvciBhcyBtb2R1bGUgd2hlbiBjb25maWd1cmluZyB5b3VyIGtlcm5lbCBmb3IKK2NvbXBpbGluZy4KK05FVzogWW91IG1heSBhcyB3ZWxsIGNvbXBpbGUgdGhpcyBtb2R1bGUgb3V0c2lkZSB5b3VyIGtlcm5lbCwgdXNpbmcgdGhlCitzdXBwbGllZCBNYWtlZmlsZS4KKworIElmIHlvdSBnb3QgYW4gb2xkIGtlcm5lbCAocHJlIDIuMS4xMjcsIHByZSAyLjAuMzdwMSkgd2l0aCBhbiBvbGQgdmVyc2lvbiBvZgorIHRoaXMgZHJpdmVyOiBHZXQgZGMzOTAtMjExMjUtMjBiLmRpZmYuZ3ogb3IgZGMzOTAtMjAzNnAyMS0yMGIxLmRpZmYuZ3ogZnJvbQorIG15IHdlYiBwYWdlIGFuZCBhcHBseSB0aGUgcGF0Y2guIEFwcGx5IGZ1cnRoZXIgcGF0Y2hlcyB0byB1cGdyYWRlIHRvIHRoZSAKKyBsYXRlc3QgdmVyc2lvbiBvZiB0aGUgZHJpdmVyLgorCisgSWYgeW91IHdhbnQgdG8gZG8gaXQgbWFudWFsbHksIHlvdSBzaG91bGQgY29weSB0aGUgZmlsZXMgKGRjMzkwLmgsCisgdG1zY3NpbS5oLCB0bXNjc2ltLmMsIHNjc2lpb20uYyBhbmQgUkVBRE1FLnRtc2NzaW0pIGZyb20gdGhpcyBkaXJlY3RvcnkgdG8KKyBsaW51eC9kcml2ZXJzL3Njc2kuIFlvdSBoYXZlIHRvIHJlY29tcGlsZSB5b3VyIGtlcm5lbC9tb2R1bGUgb2YgY291cnNlLgorCisgWW91IHNob3VsZCBhcHBseSB0aGUgdGhyZWUgcGF0Y2hlcyBpbmNsdWRlZCBpbiBkYzM5MC0xMjAta2VybmVsLmRpZmYKKyAoQXBwbHlpbmcgdGhlbTogY2QgL3Vzci9zcmM7IHBhdGNoIC1wMCA8fi9kYzM5MC0xMjAta2VybmVsLmRpZmYpCisgVGhlIHBhdGNoZXMgYXJlIGFnYWluc3QgMi4xLjEyNSwgc28geW91IG1pZ2h0IGhhdmUgdG8gbWFudWFsbHkgcmVzb2x2ZQorIHJlamVjdGlvbnMgd2hlbiBhcHBseWluZyB0byBhbm90aGVyIGtlcm5lbCB2ZXJzaW9uLgorCisgVGhlIHBhdGNoZXMgd2lsbCB1cGRhdGUgdGhlIGtlcm5lbCBzdGFydHVwIGNvZGUgdG8gYWxsb3cgYm9vdCBwYXJhbWV0ZXJzIHRvCisgYmUgcGFzc2VkIHRvIHRoZSBkcml2ZXIsIHVwZGF0ZSB0aGUgRG9jdW1lbnRhdGlvbiBhbmQgZmluYWxseSBvZmZlciB5b3UgdGhlCisgcG9zc2liaWxpdHkgdG8gb21pdCB0aGUgbm9uLURDMzkwIHBhcnRzIG9mIHRoZSBkcml2ZXIuCisgKEJ5IHNlbGVjdGluZyAiT21pdCBzdXBwb3J0IGZvciBub24gREMzOTAiIHlvdSBiYXNpY2FsbHkgZGlzYWJsZSB0aGUKKyBlbXVsYXRpb24gb2YgYSBEQzM5MCBFRVBST00gZm9yIG5vbiBEQzM5MCBhZGFwdGVycy4gVGhpcyBzYXZlcyBhIGZldyBieXRlcworIG9mIG1lbW9yeS4pCisKK0lmIHlvdSBnb3QgYSB2ZXJ5IG9sZCBrZXJuZWwgd2l0aG91dCB0aGUgdG1zY3NpbSBkcml2ZXIgKHByZSAyLjAuMzEpCitJIHJlY29tbWVuZCB1cGdyYWRpbmcgeW91ciBrZXJuZWwuIEhvd2V2ZXIsIGlmIHlvdSBkb24ndCB3YW50IHRvLCBwbGVhc2UKK2NvbnRhY3QgbWUgdG8gZ2V0IHRoZSBhcHByb3ByaWF0ZSBwYXRjaGVzLgorCisKK1VwZ3JhZGluZyBhIFNDU0kgZHJpdmVyIGlzIGFsd2F5cyBhIGRlbGljYXRlIHRoaW5nIHRvIGRvLiBUaGUgMi4wIGRyaXZlciBoYXMKK3Byb3ZlbiBzdGFibGUgb24gbWFueSBzeXN0ZW1zLCBidXQgaXQncyBzdGlsbCBhIGdvb2QgaWRlYSB0byB0YWtlIHNvbWUKK3ByZWNhdXRpb25zLiBJbiBhbiBpZGVhbCB3b3JsZCB5b3Ugd291bGQgaGF2ZSBhIGZ1bGwgYmFja3VwIG9mIHlvdXIgZGlza3MuCitUaGUgd29ybGQgaXNuJ3QgaWRlYWwgYW5kIG1vc3QgcGVvcGxlIGRvbid0IGhhdmUgZnVsbCBiYWNrdXBzIChtZSBuZWl0aGVyKS4KK1NvIHRha2UgYXQgbGVhc3QgdGhlIGZvbGxvd2luZyBtZWFzdXJlczoKKyogbWFrZSB5b3VyIGtlcm5lbCByZW1vdW50IHRoZSBGUyByZWFkLW9ubHkgb24gZGV0ZWN0aW5nIGFuIGVycm9yOgorICB0dW5lMmZzIC1lIHJlbW91bnQtcm8gL2Rldi9zZD8/CisqIGhhdmUgY29waWVzIG9mIHlvdXIgU0NTSSBkaXNrJ3MgcGFydGl0aW9uIHRhYmxlcyBvbiBzb21lIHNhZmUgbG9jYXRpb246CisgIGRkIGlmPS9kZXYvc2RhIG9mPS9tbnQvZmxvcHB5L3NkYSBicz01MTIgY291bnQ9MQorICBvciBqdXN0IHByaW50IGl0IHdpdGg6CisgIGZkaXNrIC1sIHwgbHByCisqIG1ha2Ugc3VyZSB5b3UgYXJlIGFibGUgdG8gYm9vdCBMaW51eCAoZS5nLiBmcm9tIGZsb3BweSBkaXNrIHVzaW5nIEluaXRSRCkKKyAgaWYgeW91ciBTQ1NJIGRpc2sgZ2V0cyBjb3JydXB0ZWQuIFlvdSBjYW4gdXNlIAorICBmdHA6Ly9zdHVkZW50LnBoeXNpay51bmktZG9ydG11bmQuZGUvcHViL2xpbnV4L2tlcm5lbC9ib290ZGlzay5negorCitPbmUgbW9yZSB3YXJuaW5nOiBJIHVzZWQgdG8gb3ZlcmNsb2NrIG15IFBDSSBidXMgdG8gNDEuNjcgTUh6LiBNeSBUZWtyYW0KK0RDMzkwRiAoU3ltNTNjODc1KSBhY2NlcHRlZCB0aGlzIGFzIHdlbGwgYXMgbXkgTWlsbGVuaXVtLiBCdXQgdGhlIEFtNTNDOTc0Citwcm9kdWNlZCBlcnJvcnMgYW5kIHN0YXJ0ZWQgdG8gY29ycnVwdCBteSBkaXNrcy4gU28gZG9uJ3QgZG8gdGhhdCEgQSAzNy41MAorTUh6IFBDSSBidXMgd29ya3MgZm9yIG1lLCB0aG91Z2gsIGJ1dCBJIGRvbid0IHJlY29tbWVuZCB1c2luZyBoaWdoZXIgY2xvY2tzCit0aGFuIHRoZSAzMy4zMyBNSHogYmVpbmcgaW4gdGhlIFBDSSBzcGVjLgorCitJZiB5b3Ugd2FudCB0byBzaGFyZSB0aGUgSVJRIHdpdGggYW5vdGhlciBkZXZpY2UgYW5kIHRoZSBkcml2ZXIgcmVmdXNlcyB0bworZG8gc28sIHlvdSBtaWdodCBzdWNjZWVkIHdpdGggY2hhbmdpbmcgdGhlIERDMzkwX0lSUSB0eXBlIGluIHRtc2NzaW0uYyB0byAKK1NBX1NISVJRIHwgU0FfSU5URVJSVVBULgorCisKKzMuRmVhdHVyZXMKKy0tLS0tLS0tLS0KKy0gU0NTSQorICogVGFnZ2VkIGNvbW1hbmQgcXVldWVpbmcKKyAqIFN5bmMgc3BlZWQgdXAgdG8gMTAgTUh6CisgKiBEaXNjb25uZWN0aW9uCisgKiBNdWx0aXBsZSBMVU5zCisKKy0gR2VuZXJhbCAvIExpbnV4IGludGVyZmFjZQorICogU3VwcG9ydCBmb3IgdXAgdG8gNCBBTTUzQzk3NCBhZGFwdGVycy4KKyAqIERDMzkwIEVFUFJPTSB1c2FnZSBvciBib290L21vZHVsZSBwYXJhbXMKKyAqIEluZm9ybWF0aW9uIHZpYSBjYXQgL3Byb2Mvc2NzaS90bXNjc2ltLz8KKyAqIER5bmFtaWNhbGx5IGNvbmZpZ3VyYWJsZSBieSB3cml0aW5nIHRvIC9wcm9jL3Njc2kvdG1zY3NpbS8/CisgKiBEeW5hbWljIGFsbG9jYXRpb24gb2YgcmVzb3VyY2VzCisgKiBTTVAgc3VwcG9ydDogTG9ja2luZyBvbiBpb19yZXF1ZXN0IGxvY2sgKExpbnV4IDIuMS8yLjIpIG9yIGFkYXB0ZXIgCisgICAgc3BlY2lmaWMgbG9ja3MgKExpbnV4IDIuNT8pCisgKiBVbmlmb3JtIHNvdXJjZSBjb2RlIGZvciBMaW51eC0yLngueQorICogU3VwcG9ydCBmb3IgZHluLiBhZGRpdGlvbi9yZW1vdmFsIG9mIGRldmljZXMgdmlhIGFkZC9yZW1vdmUtc2luZ2xlLWRldmljZQorICAgKFRyeTogZWNobyAic2NzaSBhZGQtc2luZ2xlLWRldmljZSBDIEIgVCBVIiA+L3Byb2Mvc2NzaS9zY3NpIAorICAgIEMgPSBDb250cm9sbGVyLCBCID0gQnVzLCBUID0gVGFyZ2V0IFNDU0kgSUQsIFUgPSBVbml0IFNDU0kgTFVOLikgCisgICAgVXNlIHdpdGggY2FyZSEKKyAqIFRyeSB0byB1c2UgdGhlIHBhcnRpdGlvbiB0YWJsZSBmb3IgdGhlIGRldGVybWluYXRpb24gb2YgdGhlIG1hcHBpbmcKKworCis0LiBDb25maWd1cmF0aW9uIHZpYSAvcHJvYy9zY3NpL3Rtc2NzaW0vPworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0ZpcnN0IG9mIGFsbCBsb29rIGF0IHRoZSBvdXRwdXQgb2YgL3Byb2Mvc2NzaS90bXNjc2ltLz8gYnkgdHlwaW5nCisgY2F0IC9wcm9jL3Njc2kvdG1zY3NpbS8/CitUaGUgIj8iIHNob3VsZCBiZSByZXBsYWNlZCBieSB0aGUgU0NTSSBob3N0IG51bWJlci4gKFRoZSBzaGVsbCBtaWdodCBkbyB0aGlzCitmb3IgeW91LikKK1lvdSB3aWxsIHNlZSBzb21lIGluZm8gcmVnYXJkaW5nIHRoZSBhZGFwdGVyIGFuZCwgYXQgdGhlIGVuZCwgYSBsaXN0aW5nIG9mCit0aGUgYXR0YWNoZWQgZGV2aWNlcyBhbmQgdGhlaXIgc2V0dGluZ3MuCisKK0hlcmUncyBhbiBleGFtcGxlOgorZ2FybG9mZkBrdXJ0Oi9ob21lL2dhcmxvZmYgPiBjYXQgL3Byb2Mvc2NzaS90bXNjc2ltLzAKK1Rla3JhbSBEQzM5MC9BTTUzQzk3NCBQQ0kgU0NTSSBIb3N0IEFkYXB0ZXIsIERyaXZlciBWZXJzaW9uIDIuMGU3IDIwMDAtMTEtMjgKK1NDU0kgSG9zdCBOciAxLCBBTTUzQzk3NCBBZGFwdGVyIE5yIDAKK0lPUG9ydEJhc2UgMHhiMDAwLCBJUlEgMTAKK01heElEIDgsIE1heExVTiA4LCBBZGFwdGVySUQgNiwgU2VsVGltZW91dCAyNTAgbXMsIERlbGF5UmVzZXQgMSBzCitUYWdNYXhOdW0gMTYsIFN0YXR1cyAweDAwLCBBQ0JGbGFnIDB4MDAsIEdsaXRjaEVhdGVyIDI0IG5zCitTdGF0aXN0aWNzOiBDbW5kcyAxNDcwMTY1LCBDbW5kcyBub3Qgc2VudCBkaXJlY3RseSAwLCBPdXQgb2YgU1JCIGNvbmRzIDAKKyAgICAgICAgICAgIExvc3QgYXJiaXRyYXRpb25zIDU4NywgIFNlbC4gY29ubmVjdGVkIDAsIENvbm5lY3RlZDogTm8KK05yIG9mIGF0dGFjaGVkIGRldmljZXM6IDQsIE5yIG9mIERDQnM6IDQKK01hcCBvZiBhdHRhY2hlZCBMVU5zOiAwMSAwMCAwMCAwMyAwMSAwMCAwMCAwMAorSWR4IElEIExVTiBQcnR5IFN5bmMgRHNDbiBTbmRTIFRhZ1EgTmVnb1BlcmlvZCBTeW5jU3BlZWQgU3luY09mZnMgTWF4Q21kCiswMCAgMDAgIDAwICBZZXMgIFllcyAgWWVzICBZZXMgIFllcyAgIDEwMCBucyAgICAxMC4wIE0gICAgICAxNSAgICAgIDE2CiswMSAgMDMgIDAwICBZZXMgIFllcyAgWWVzICBZZXMgIE5vICAgIDEwMCBucyAgICAxMC4wIE0gICAgICAxNSAgICAgIDAxCiswMiAgMDMgIDAxICBZZXMgIFllcyAgWWVzICBZZXMgIE5vICAgIDEwMCBucyAgICAxMC4wIE0gICAgICAxNSAgICAgIDAxCiswMyAgMDQgIDAwICBZZXMgIFllcyAgWWVzICBZZXMgIE5vICAgIDEwMCBucyAgICAxMC4wIE0gICAgICAxNSAgICAgIDAxCisKK05vdGUgdGhhdCB0aGUgc2V0dGluZ3MgTWF4SUQgYW5kIE1heExVTiBhcmUgbm90IHplcm8tIGJ1dCBvbmUtYmFzZWQsIHdoaWNoCittZWFucyB0aGF0IGEgc2V0dGluZyBNYXhMVU49NCwgd2lsbCByZXN1bHQgaW4gdGhlIHN1cHBvcnQgb2YgTFVOcyAwLi4zLiBUaGlzCitpcyBzb21laG93IGluY29udmVuaWVudCwgYnV0IHRoZSB3YXkgdGhlIG1pZC1sZXZlbCBTQ1NJIGNvZGUgZXhwZWN0cyBpdCB0byBiZS4KKworQUNCIGFuZCBEQ0IgYXJlIGFjcm9ueW1zIGZvciBBZGFwdGVyIENvbnRyb2wgQmxvY2sgYW5kIERldmljZSBDb250cm9sIEJsb2NrLgorVGhlc2UgYXJlIGRhdGEgc3RydWN0dXJlcyBvZiB0aGUgZHJpdmVyIGNvbnRhaW5pbmcgaW5mb3JtYXRpb24gYWJvdXQgdGhlCithZGFwdGVyIGFuZCB0aGUgY29ubmVjdGVkIFNDU0kgZGV2aWNlcyByZXNwZWN0aXZlbHkuCisKK0lkeCBpcyB0aGUgZGV2aWNlIGluZGV4IChqdXN0IGEgY29uc2VjdXRpdmUgbnVtYmVyIGZvciB0aGUgZHJpdmVyKSwgSUQgYW5kCitMVU4gYXJlIHRoZSBTQ1NJIElEIGFuZCBMVU4sIFBydHkgbWVhbnMgUGFyaXR5IGNoZWNraW5nLCBTeW5jIHN5bmNocm9ub3VzCituZWdvdGlhdGlvbiwgRHNDbiBEaXNjb25uZWN0aW9uLCBTbmRTIFNlbmQgU3RhcnQgY29tbWFuZCBvbiBzdGFydHVwIChub3QKK3VzZWQgYnkgdGhlIGRyaXZlcikgYW5kIFRhZ1EgVGFnZ2VkIENvbW1hbmQgUXVldWVpbmcuIE5lZ29QZXJpb2QgYW5kCitTeW5jU3BlZWQgYXJlIHNvbWVob3cgcmVkdW5kYW50LCBiZWNhdXNlIHRoZXkgYXJlIHJlY2lwcm9jYWwgdmFsdWVzIAorKDEgLyAxMTIgbnMgPSA4LjkgTUh6KS4gQXQgbGVhc3QgaW4gdGhlb3J5LiBUaGUgZHJpdmVyIGlzIGFibGUgdG8gYWRqdXN0IHRoZQorTmVnb1BlcmlvZCBtb3JlIGFjY3VyYXRlICg0bnMpIHRoYW4gdGhlIFN5bmNTcGVlZCAoMSAvIDI1bnMpLiBJIGRvbid0IGtub3cKK2lmIGNlcnRhaW4gZGV2aWNlcyB3aWxsIGhhdmUgcHJvYmxlbXMgd2l0aCB0aGlzIGRpc2NyZXBhbmN5LiBNYXguIHNwZWVkIGlzCisxMCBNSHogY29ycmVzcC4gdG8gYSBtaW4uIE5lZ29QZXJpb2Qgb2YgMTAwIG5zLiAKKyhUaGUgZHJpdmVyIGFsbG93cyBzbGlnaHRseSBoaWdoZXIgc3BlZWRzIGlmIHRoZSBkZXZpY2VzIChVbHRyYSBTQ1NJKSBhY2NlcHQKK2l0LCBidXQgdGhhdCdzIG91dCBvZiBhZGFwdGVyIHNwZWMsIG9uIHlvdXIgb3duIHJpc2sgYW5kIHVubGlrZWx5IHRvIGltcHJvdmUKK3BlcmZvcm1hbmNlLiBZb3UncmUgbGlrZWx5IHRvIGNyYXNoIHlvdXIgZGlza3MuKSAKK1N5bmNPZmZzIGlzIHRoZSBvZmZzZXQgdXNlZCBmb3Igc3luY2hyb25vdXMgbmVnb3RpYXRpb25zOyBtYXguIGlzIDE1LiAKK1RoZSBsYXN0IHZhbHVlcyBhcmUgb25seSBzaG93biwgaWYgU3luYyBpcyBlbmFibGVkLiAoTmVnb1BlcmlvZCBpcyBzdGlsbAorZGlzcGxheWVkIGluIGJyYWNrZXRzIHRvIHNob3cgdGhlIHZhbHVlcyB3aGljaCB3aWxsIGJlIHVzZWQgYWZ0ZXIgZW5hYmxpbmcKK1N5bmMuKQorTWF4Q21kIGlzdCB0aGUgbnVtYmVyIG9mIGNvbW1hbmRzICg9dGFncykgd2hpY2ggY2FuIGJlIHByb2Nlc3NlZCBhdCB0aGUgc2FtZQordGltZSBieSB0aGUgZGV2aWNlLgorCitJZiB5b3Ugd2FudCB0byBjaGFuZ2UgYSBzZXR0aW5nLCB5b3UgY2FuIGRvIHRoYXQgYnkgd3JpdGluZyB0bworL3Byb2Mvc2NzaS90bXNjc2ltLz8uIEJhc2ljYWxseSB5b3UgaGF2ZSB0byBpbWl0YXRlIHRoZSBvdXRwdXQgb2YgZHJpdmVyLgorKERvbid0IHVzZSB0aGUgYnJhY2tldHMgZm9yIE5lZ29QZXJpb2Qgb24gU3luYyBkaXNhYmxlZCBkZXZpY2VzLikKK1lvdSBkb24ndCBoYXZlIHRvIGNhcmUgYWJvdXQgY2FwaXRhbGlzYXRpb24uIFRoZSBkcml2ZXIgd2lsbCBhY2NlcHQgc3BhY2UsCit0YWIsIGNvbW1hLCA9IGFuZCA6IGFzIHNlcGFyYXRvcnMuCisKK1RoZXJlIGFyZSB0aHJlZSBraW5kcyBvZiBjaGFuZ2VzOiAKKworKDEpIENoYW5nZSBkcml2ZXIgc2V0dGluZ3M6IAorICAgIFlvdSB0eXBlIHRoZSBuYW1lcyBvZiB0aGUgcGFyYW1ldGVycyBhbmQgdGhlIHBhcmFtcyBmb2xsb3dpbmcgaXQuCisgICAgRXhhbXBsZToKKyAgICAgZWNobyAiTWF4TFVOPTggc2VsdGltZW91dCAyMDAiID4vcHJvYy9zY3NpL3Rtc2NzaW0vMAorCisgICAgTm90ZSB0aGF0IHlvdSBjYW4gb25seSBjaGFuZ2UgTWF4SUQsIE1heExVTiwgQWRhcHRlcklELCBTZWxUaW1lT3V0LAorICAgIFRhZ01heE51bSwgQUNCRmxhZywgR2xpdGNoRWF0ZXIgYW5kIERlbGF5UmVzZXQuIERvbid0IGNoYW5nZSBBQ0JGbGFnCisgICAgdW5sZXNzIHlvdSB3YW50IHRvIHNlZSB3aGF0IGhhcHBlbnMsIGlmIHRoZSBkcml2ZXIgaGFuZ3MuCisKKygyKSBDaGFuZ2UgZGV2aWNlIHNldHRpbmdzOiBZb3Ugd3JpdGUgYSBjb25maWcgbGluZSB0byB0aGUgZHJpdmVyLiBUaGUgTnIKKyAgICBtdXN0IG1hdGNoIHRoZSBJRCBhbmQgTFVOIGdpdmVuLiBJZiB5b3UgZ2l2ZSAiLSIgYXMgcGFyYW1ldGVyLCBpdCBpcworICAgIGlnbm9yZWQgYW5kIHRoZSBjb3JyZXNwb25kaW5nIHNldHRpbmcgd29uJ3QgYmUgY2hhbmdlZC4gCisgICAgWW91IGNhbiB1c2UgInkiIG9yICJuIiBpbnN0ZWFkIG9mICJZZXMiIGFuZCAiTm8iIGlmIHlvdSB3YW50IHRvLgorICAgIFlvdSBkb24ndCBuZWVkIHRvIHNwZWNpZnkgYSBmdWxsIGxpbmUuIFRoZSBkcml2ZXIgYXV0b21hdGljYWxseSBwZXJmb3JtcworICAgIGFuIElOUVVJUlkgb24gdGhlIGRldmljZSBpZiBuZWNlc3NhcnkgdG8gY2hlY2sgaWYgaXQgaXMgY2FwYWJsZSB0byBvcGVyYXRlCisgICAgd2l0aCB0aGUgZ2l2ZW4gc2V0dGluZ3MgKFN5bmMsIFRhZ1EpLgorICAgIEV4YW1wbGVzOgorICAgICBlY2hvICIwIDAgMCB5IHkgeSAtIHkgLSAxMCAiID4vcHJvYy9zY3NpL3Rtc2NzaW0vMAorICAgICBlY2hvICIzIDUgMCB5IG4geSAiID4vcHJvYy9zY3NpL3Rtc2NzaW0vMAorCisgICAgVG8gZ2l2ZSBhIHNob3J0IGV4cGxhbmF0aW9uIG9mIHRoZSBmaXJzdCBleGFtcGxlOiAKKyAgICBUaGUgZmlyc3QgdGhyZWUgbnVtYmVycywgIjAgMCAwIiAoRGV2aWNlIGluZGV4IDAsIFNDU0kgSUQgMCwgU0NTSSBMVU4gMCksCisgICAgc2VsZWN0IHRoZSBkZXZpY2UgdG8gd2hpY2ggdGhlIGZvbGxvd2luZyBwYXJhbWV0ZXJzIGFwcGx5LiBOb3RlIHRoYXQgaXQKKyAgICB3b3VsZCBiZSBzdWZmaWNpZW50IHRvIHVzZSB0aGUgaW5kZXggb3IgYm90aCBTQ1NJIElEIGFuZCBMVU4sIGJ1dCBJIGNob3NlCisgICAgdG8gcmVxdWlyZSBhbGwgdGhyZWUgdG8gaGF2ZSBhIHN5bnRheCBzaW1pbGFyIHRvIHRoZSBvdXRwdXQuCisgICAgVGhlIGZvbGxvd2luZyAieSB5IHkgLSB5IiBlbmFibGVzIFBhcml0eSBjaGVja2luZywgZW5hYmxlcyBTeW5jaHJvbm91cworICAgIHRyYW5zZmVycywgRGlzY29ubmVjdGlvbiwgbGVhdmVzIFNlbmQgU3RhcnQgKG5vdCB1c2VkKSB1bnRvdWNoZWQgYW5kCisgICAgZW5hYmxlcyBUYWdnZWQgQ29tbWFuZCBRdWV1ZWluZyBmb3IgdGhlIHNlbGVjdGVkIGRldmljZS4gVGhlICItIiBza2lwcworICAgIHRoZSBOZWdvdGlhdGlvbiBQZXJpb2Qgc2V0dGluZyBidXQgdGhlICIxMCIgc2V0cyB0aGUgbWF4IHN5bmMuIHNwZWVkIHRvCisgICAgMTAgTUh6LiBJdCdzIHVzZWxlc3MgdG8gc3BlY2lmeSBib3RoIE5lZ29QZXJpb2QgYW5kIFN5bmNTcGVlZCBhcworICAgIGRpc2N1c3NlZCBhYm92ZS4gVGhlIHZhbHVlcyB1c2VkIGluIHRoaXMgZXhhbXBsZSB3aWxsIHJlc3VsdCBpbiBtYXhpbXVtCisgICAgcGVyZm9ybWFuY2UuCisKKygzKSBTcGVjaWFsIGNvbW1hbmRzOiBZb3UgY2FuIGZvcmNlIGEgU0NTSSBidXMgcmVzZXQsIGFuIElOUVVJUlkgY29tbWFuZCwgdGhlCisgICAgcmVtb3ZhbCBvciB0aGUgYWRkaXRpb24gb2YgYSBkZXZpY2UncyBEQ0IgYW5kIGEgU0NTSSByZWdpc3RlciBkdW1wLgorICAgIFRoaXMgaXMgb25seSB1c2VkIGZvciBkZWJ1Z2dpbmcgd2hlbiB5b3UgbWVldCBwcm9ibGVtcy4gVGhlIHBhcmFtZXRlciBvZgorICAgIHRoZSBJTlFVSVJZIGFuZCBSRU1PVkUgY29tbWFuZHMgaXMgdGhlIGRldmljZSBpbmRleCBhcyBzaG93biBieSB0aGUKKyAgICBvdXRwdXQgb2YgL3Byb2Mvc2NzaS90bXNjc2ltLz8gaW4gdGhlIGRldmljZSBsaXN0aW5nIGluIHRoZSBmaXJzdCBjb2x1bW4KKyAgICAoSWR4KS4gQUREIHRha2VzIHRoZSBTQ1NJIElEIGFuZCBMVU4uCisgICAgRXhhbXBsZXM6CisgICAgIGVjaG8gInJlc2V0IiA+L3Byb2Mvc2NzaS90bXNjc2ltLzAKKyAgICAgZWNobyAiaW5xdWlyeSAxIiA+L3Byb2Mvc2NzaS90bXNjc2ltLzAKKyAgICAgZWNobyAicmVtb3ZlIDIiID4vcHJvYy9zY3NpL3Rtc2NzaW0vMQorICAgICBlY2hvICJhZGQgMiAzIiA+L3Byb2Mvc2NzaS90bXNjc2ltLz8KKyAgICAgZWNobyAiZHVtcCIgPi9wcm9jL3Njc2kvdG1zY3NpbS8wCisKKyAgICBOb3RlIHRoYXQgeW91IHdpbGwgbWVldCBwcm9ibGVtcyB3aGVuIHlvdSBSRU1PVkUgYSBkZXZpY2UncyBEQ0Igd2l0aCB0aGUKKyAgICByZW1vdmUgY29tbWFuZCBpZiBpdCBjb250YWlucyBwYXJ0aXRpb25zIHdoaWNoIGFyZSBtb3VudGVkLiBPbmx5IHVzZSBpdAorICAgIGFmdGVyIHVubW91bnRpbmcgaXRzIHBhcnRpdGlvbnMsIHRlbGxpbmcgdGhlIFNDU0kgbWlkLWxldmVsIGNvZGUgdG8KKyAgICByZW1vdmUgaXQgKHNjc2kgcmVtb3ZlLXNpbmdsZS1kZXZpY2UpIGFuZCB5b3UgcmVhbGx5IG5lZWQgYSBmZXcgYnl0ZXMgb2YKKyAgICBtZW1vcnkuCisgICAgVGhlIEFERCBjb21tYW5kIGFsbG93cyB5b3UgdG8gY29uZmlndXJlIGEgZGV2aWNlIGJlZm9yZSB5b3UgdGVsbCB0aGUKKyAgICBtaWQtbGV2ZWwgY29kZSB0byB0cnkgZGV0ZWN0aW9uLgorCisKK0knZCBzdWdnZXN0IHJldmlld2luZyB0aGUgb3V0cHV0IG9mIC9wcm9jL3Njc2kvdG1zY3NpbS8/IGFmdGVyIGNoYW5naW5nCitzZXR0aW5ncyB0byBzZWUgaWYgZXZlcnl0aGluZyBjaGFuZ2VkIGFzIHJlcXVlc3RlZC4KKworCis1LiBDb25maWd1cmF0aW9uIHZpYSBib290L21vZHVsZSBwYXJhbWV0ZXJzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitXaXRoIHRoZSBEQzM5MCwgdGhlIGRyaXZlciByZWFkcyBpdHMgRUVQUk9NIHNldHRpbmdzIGFuZCB0cmllcyB0byB1c2UgdGhlbS4KK0J1dCB5b3UgbWF5IHdhbnQgdG8gb3ZlcnJpZGUgdGhlIHNldHRpbmdzIHByaW9yIHRvIGJlaW5nIGFibGUgdG8gY2hhbmdlIHRoZQorZHJpdmVyIGNvbmZpZ3VyYXRpb24gdmlhIC9wcm9jL3Njc2kvdG1zY3NpbS8/LgorSWYgeW91IGRvIGhhdmUgYW5vdGhlciBBTTUzQzk3NCBiYXNlZCBhZGFwdGVyLCB0aGF0J3MgZXZlbiB0aGUgb25seQorcG9zc2liaWxpdHkgdG8gYWRqdXN0IHNldHRpbmdzIGJlZm9yZSB5b3UgYXJlIGFibGUgdG8gd3JpdGUgdG8gdGhlCisvcHJvYy9zY3NpL3Rtc2NzaW0vPyBwc2V1ZG8tZmlsZSwgZS5nLiBpZiB5b3Ugd2FudCB0byB1c2UgYW5vdGhlciAKK2FkYXB0ZXIgSUQgdGhhbiA3LiAgCisoQlRXLCB0aGUgbG9nIG1lc3NhZ2UgIkRDMzkwOiBObyBFRVBST00gZm91bmQhIiBpcyBub3JtYWwgd2l0aG91dCBhIERDMzkwLikKK0ZvciB0aGlzIHB1cnBvc2UsIHlvdSBjYW4gcGFzcyBvcHRpb25zIHRvIHRoZSBkcml2ZXIgYmVmb3JlIGl0IGlzIGluaXRpYWxpc2VkCitieSB1c2luZyBrZXJuZWwgb3IgbW9kdWxlIHBhcmFtZXRlcnMuIFNlZSBsaWxvKDgpIG9yIG1vZHByb2JlKDEpIG1hbnVhbAorcGFnZXMgb24gaG93IHRvIHBhc3MgcGFyYW1zIHRvIHRoZSBrZXJuZWwgb3IgYSBtb2R1bGUuCitbTk9URTogRm9ybWVybHksIGl0IHdhcyBub3QgcG9zc2libGUgdG8gb3ZlcnJpZGUgdGhlIEVFUFJPTSBzdXBwbGllZAorIHNldHRpbmdzIG9mIHRoZSBEQzM5MCB3aXRoIGNtZCBsaW5lIHBhcmFtZXRlcnMuIFRoaXMgaGFzIGNoYW5nZWQgc2luY2UKKyAyLjBlN10KKworVGhlIHN5bnRheCBvZiB0aGUgcGFyYW1zIGlzIG11Y2ggc2hvcnRlciB0aGFuIHRoZSBzeW50YXggb2YgdGhlIC9wcm9jLy4uLgoraW50ZXJmYWNlLiBUaGlzIG1ha2VzIGl0IGEgbGl0dGxlIGJpdCBtb3JlIGRpZmZpY3VsdCB0byB1c2UuIEhvd2V2ZXIsIGxvbmcKK3BhcmFtZXRlciBsaW5lcyBoYXZlIHRoZSByaXNrIHRvIGJlIG1pc2ludGVycHJldGVkIGFuZCB0aGUgbGVuZ3RoIG9mIGtlcm5lbAorcGFyYW1ldGVycyBpcyBsaW1pdGVkLgorCitBcyB0aGUgc3VwcG9ydCBmb3Igbm9uLURDMzkwIGFkYXB0ZXJzIHdvcmtzIGJ5IHNpbXVsYXRpbmcgdGhlIHZhbHVlcyBvZiB0aGUKK0RDMzkwIEVFUFJPTSwgdGhlIHNldHRpbmdzIGFyZSBnaXZlbiBpbiBhIERDMzkwIEJJT1MnIHdheS4KKworSGVyZSdzIHRoZSBzeW50YXg6Cit0bXNjc2ltPUFkYXB0SUQsU3BkSWR4LERldk1vZGUsQWRhcHRNb2RlLFRhZ2dlZENtbmRzLERlbGF5UmVzZXQKKworRWFjaCBvZiB0aGUgcGFyYW1ldGVycyBpcyBhIG51bWJlciwgY29udGFpbmluZyB0aGUgZGVzY3JpYmVkIGluZm9ybWF0aW9uOgorCisqIEFkYXB0SUQ6IFRoZSBTQ1NJIElEIG9mIHRoZSBob3N0IGFkYXB0ZXIuIE11c3QgYmUgaW4gdGhlIHJhbmdlIDAuLjcKKyAgRGVmYXVsdCBpcyA3LgorCisqIFNwZElkeDogVGhlIGluZGV4IG9mIHRoZSBtYXhpbXVtIHNwZWVkIGFzIGluIHRoZSBEQzM5MCBCSU9TLiBUaGUgdmFsdWVzCisgIDAuLjcgbWVhbiAxMCwgOC4wLCA2LjcsIDUuNywgNS4wLCA0LjAsIDMuMSBhbmQgMiBNSHogcmVzcC4gRGVmYXVsdCBpcworICAwICgxMC4wIE1IeikuCisKKyogRGV2TW9kZSBpcyBhIGJpdCBtYXBwZWQgdmFsdWUgZGVzY3JpYmluZyB0aGUgcGVyLWRldmljZSBmZWF0dXJlcy4gSXQKKyAgYXBwbGllcyB0byBhbGwgZGV2aWNlcy4gKFN5bmMsIERpc2MgYW5kIFRhZ1Egd2lsbCBvbmx5IGFwcGx5LCBpZiB0aGUKKyAgZGV2aWNlIHN1cHBvcnRzIGl0LikgVGhlIG1lYW5pbmcgb2YgdGhlIGJpdHMgKCogPSBkZWZhdWx0KToKKworICAgQml0IFZhbChoZXgpIFZhbChkZWMpICBNZWFuaW5nCisgICAqMAkgMHgwMQkgICAgMQkgIFBhcml0eSBjaGVjaworICAgKjEJIDB4MDIJICAgIDIJICBTeW5jaHJvbm91cyBOZWdvdGlhdGlvbgorICAgKjIJIDB4MDQJICAgIDQJICBEaXNjb25uZWN0aW9uCisgICAqMwkgMHgwOAkgICAgOAkgIFNlbmQgU3RhcnQgY29tbWFuZCBvbiBzdGFydHVwLiAoTm90IHVzZWQpCisgICAqNAkgMHgxMAkgICAxNgkgIFRhZ2dlZCBDb21tYW5kIFF1ZXVlaW5nCisKKyAgQXMgdXN1YWwsIHRoZSBkZXNpcmVkIHZhbHVlIGlzIG9idGFpbmVkIGJ5IGFkZGluZyB0aGUgd2FudGVkIHZhbHVlcy4gSWYKKyAgeW91IHdhbnQgdG8gZW5hYmxlIGFsbCB2YWx1ZXMsIGUuZy4sIHlvdSB3b3VsZCB1c2UgMzEoMHgxZikuIERlZmF1bHQgaXMgMzEuCisKKyogQWRhcHRNb2RlIGlzIGEgYml0IG1hcHBlZCB2YWx1ZSBkZXNjcmliaW5nIHRoZSBlbmFibGVkIGFkYXB0ZXIgZmVhdHVyZXMuCisKKyAgIEJpdCBWYWwoaGV4KSBWYWwoZGVjKSAgTWVhbmluZworICAgKjAJIDB4MDEJICAgIDEJICBTdXBwb3J0IG1vcmUgdGhhbiB0d28gZHJpdmVzLiAoTm90IHVzZWQpCisgICAqMQkgMHgwMgkgICAgMgkgIFVzZSBET1MgY29tcGF0aWJsZSBtYXBwaW5nIGZvciBIRHMgZ3JlYXRlciB0aGFuIDFHQi4KKyAgICoyCSAweDA0CSAgICA0CSAgUmVzZXQgU0NTSSBCdXMgb24gc3RhcnR1cC4KKyAgICozCSAweDA4CSAgICA4CSAgQWN0aXZlIE5lZ2F0aW9uOiBJbXByb3ZlcyBTQ1NJIEJ1cyBub2lzZSBpbW11bml0eS4KKyAgICA0CSAweDEwCSAgIDE2CSAgSW1tZWRpYXRlIHJldHVybiBvbiBCSU9TIHNlZWsgY29tbWFuZC4gKE5vdCB1c2VkKQorICgqKTUJIDB4MjAJICAgMzIJICBDaGVjayBmb3IgTFVOcyA+PSAxLgorICAKKyAgVGhlIGRlZmF1bHQgZm9yIExVTiBDaGVjayBkZXBlbmRzIG9uIENPTkZJR19TQ1NJX01VTFRJX0xVTi4KKworKiBUYWdnZWRDbW5kcyBpcyBhIG51bWJlciBpbmRpY2F0aW5nIHRoZSBtYXhpbXVtIG51bWJlciBvZiBUYWdnZWQgQ29tbWFuZHMuCisgIEl0IGlzIHRoZSBiaW5hcnkgbG9nYXJpdGhtIC0gMSBvZiB0aGUgYWN0dWFsIG51bWJlci4gTWF4IGlzIDQgKDMyKS4KKyAgIFZhbHVlICBOdW1iZXIgb2YgVGFnZ2VkIENvbW1hbmRzCisgICAgIDAJCSAyCisgICAgIDEJCSA0CisgICAgIDIJCSA4CisgICAgKjMJCTE2CisgICAgIDQJCTMyCisKKyogRGVsYXlSZXNldCBpcyB0aGUgdGltZSBpbiBzZWNvbmRzIChtaW51cyAwLjVzKSwgdGhlIGFkYXB0ZXIgd2FpdHMsIGFmdGVyIGEKKyAgYnVzIHJlc2V0LiBEZWZhdWx0IGlzIDEgKGNvcnJlc3AuIHRvIDEuNXMpLgorCitFeGFtcGxlOgorIG1vZHByb2JlIHRtc2NzaW0gdG1zY3NpbT02LDIsMzEKK3dvdWxkIHNldCB0aGUgYWRhcHRlciBJRCB0byA2LCBtYXguIHNwZWVkIHRvIDYuNyBNSHosIGVuYWJsZSBhbGwgZGV2aWNlCitmZWF0dXJlcyBhbmQgbGVhdmUgdGhlIGFkYXB0ZXIgZmVhdHVyZXMsIHRoZSBudW1iZXIgb2YgVGFnZ2VkIENvbW1hbmRzCithbmQgdGhlIERlbGF5IGFmdGVyIGEgcmVzZXQgdG8gdGhlIGRlZmF1bHRzLgorCitBcyB5b3UgY2FuIHNlZSwgeW91IGRvbid0IG5lZWQgdG8gc3BlY2lmeSBhbGwgb2YgdGhlIHNpeCBwYXJhbXMuCitJZiB5b3Ugd2FudCB2YWx1ZXMgdG8gYmUgaWdub3JlZCAoaS5lLiB0aGUgRUVwcm9tIHNldHRpbmdzIG9yIHRoZSBkZWZhdWx0cword2lsbCBiZSB1c2VkKSwgeW91IG1heSBwYXNzIC0yIChub3QgMCEpIGF0IHRoZSBjb3JyZXNwb25kaW5nIHBvc2l0aW9uLgorCitUaGUgZGVmYXVsdHMgKDcsMCwzMSwxNSwzLDEpIGFyZSBhZ2dyZXNzaXZlIHRvIGFsbG93IGdvb2QgcGVyZm9ybWFuY2UuIFlvdQorY2FuIHVzZSB0bXNjc2ltPTcsMCwzMSw2Myw0LDAgZm9yIG1heGltdW0gcGVyZm9ybWFuY2UsIGlmIHlvdXIgU0NTSSBjaGFpbgorYWxsb3dzIGl0LiBJZiB5b3UgbWVldCBwcm9ibGVtcywgeW91IGNhbiB1c2UgdG1zY3NpbT0tMSB3aGljaCBpcyBhIHNob3J0Y3V0Citmb3IgdG1zY3NpbT03LDQsOSwxNSwyLDEwLgorCisKKzYuIFBvdGVudGlhbCBpbXByb3ZlbWVudHMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK01vc3Qgb2YgdGhlIGludGVuZGVkIHdvcmsgb24gdGhlIGRyaXZlciBoYXMgYmVlbiBkb25lLiBIZXJlIGFyZSBhIGZldyBpZGVhcwordG8gZnVydGhlciBpbXByb3ZlIGl0cyB1c2FiaWxpdHk6CisKKyogQ2xlYW5seSBzZXBhcmF0ZSBwZXItVGFyZ2V0IGFuZCBwZXItTFVOIHByb3BlcnRpZXMgKERDQikKKyogTW9yZSBpbnRlbGxpZ2VudCBhYm9ydCgpIHJvdXRpbmUKKyogVXNlIG5ld19laCBjb2RlIChMaW51eC0yLjErKQorKiBIYXZlIHRoZSBtaWQtbGV2ZWwgKE1MKSBjb2RlIChhbmQgbm90IHRoZSBkcml2ZXIpIGhhbmRsZSBtb3JlIG9mIHRoZQorICB2YXJpb3VzIGNvbmRpdGlvbnMuCisqIENvbW1hbmQgcXVldWVpbmcgaW4gdGhlIGRyaXZlcjogRWxpbWluYXRlIFF1ZXJ5IGxpc3QgYW5kIHVzZSBNTCBpbnN0ZWFkLgorKiBNb3JlIHVzZXIgZnJpZW5kbHkgYm9vdC9tb2R1bGUgcGFyYW0gc3ludGF4CisKK0Z1cnRoZXIgaW52ZXN0aWdhdGlvbiBvbiB0aGVzZSBwcm9ibGVtczoKKworKiBEcml2ZXIgaGFuZ3Mgd2l0aCBzeW5jIHJlYWRjZGRhICh4Y2Ryb2FzdCkgKG1vc3QgcHJvYmFibHkgVklBIFBDSSBlcnJvcikKKworS25vd24gcHJvYmxlbXM6IAorUGxlYXNlIHNlZSBodHRwOi8vd3d3LmdhcmxvZmYuZGUva3VydC9saW51eC9kYzM5MC9wcm9ibGVtcy5odG1sCisKKyogQ2hhbmdpbmcgdGhlIHBhcmFtZXRlcnMgb2YgbXVsdGktbHVuIGJ5IHRoZSB0bXNjc2ltLz8gaW50ZXJmYWNlIHdpbGwKKyAgY2F1c2UgcHJvYmxlbXMsIGNhdXNlIHRoZXNlIHNldHRpbmdzIGFyZSBtb3N0bHkgcGVyIFRhcmdldCBhbmQgbm90IHBlciBMVU4KKyAgYW5kIHNob3VsZCBiZSB1cGRhdGVkIGFjY29yZGluZ2x5LiBUbyBiZSBmaXhlZCBmb3IgMi4wZDI0LgorKiBDRFJzIChlZyBZYW0gQ1JXNDQxNikgbm90IHJlY29nbml6ZWQsIGJlY2F1c2Ugc29tZSBidWdneSBkZXZpY2VzIGRvbid0IAorICByZWNvdmVyIGZyb20gYSBTQ1NJIHJlc2V0IGluIHRpbWUuIFVzZSBhIGhpZ2hlciBkZWxheSBvciBkb24ndCBpc3N1ZQorICBhIFNDU0kgYnVzIHJlc2V0IG9uIGRyaXZlciBpbml0aWFsaXphdGlvbi4gU2VlIHByb2JsZW1zIHBhZ2UuCisgIEZvciB0aGUgQ1JXNDQxNlMsIHRoaXMgc2VlbXMgdG8gYmUgc29sdmVkIHdpdGggZmlybXdhcmUgMS4wZyAocmVwb3J0ZWQgYnkgCisgIEplYW4tWXZlcyBCYXJiaWVyKS4KKyogVEVBQyBDRC01MzJTIG5vdCBiZWluZyByZWNvZ25pemVkLiAoV29ya3Mgd2l0aCAxLjExKS4KKyogU2Nhbm5lcnMgKGVnLiBBc3RyYSBVTUFYIDEyMjBTKSBkb24ndCB3b3JrOiBEaXNhYmxlIFN5bmMgTmVnb3RpYXRpb24uCisgIElmIHRoaXMgZG9lcyBub3QgaGVscCwgdHJ5IGVjaG8gIklOUVVJUlkgdCIgPi9wcm9jL3Njc2kvdG1zY3NpbS8/ICh0CisgIHJlcGxhY2VkIGJ5IHRoZSBkZXYgaW5kZXggb2YgeW91ciBzY2FubmVyKS4gWW91IG1heSB0cnkgdG8gcmVzZXQgeW91ciBTQ1NJCisgIGJ1cyBhZnRlcndhcmRzIChlY2hvICJSRVNFVCIgPi9wcm9jL3Njc2kvdG1zY3NpbS8/KS4KKyAgVGhlIHByb2JsZW0gc2VlbXMgdG8gYmUgc29sdmVkIGFzIG9mIDIuMGQxOCwgdGhhbmtzIHRvIEFuZHJlYXMgUmljay4KKyogSWYgdGhlcmUgaXMgYSB2YWxpZCBwYXJ0aXRpb24gdGFibGUsIHRoZSBkcml2ZXIgd2lsbCB1c2UgaXQgZm9yIGRldGVybWluZworICB0aGUgbWFwcGluZy4gSWYgdGhlcmUncyBub25lLCBhIHJlYXNvbmFibGUgbWFwcGluZyAoU3ltYmlvcy1saWtlKSB3aWxsIGJlCisgIGFzc3VtZWQuIE90aGVyIG9wZXJhdGluZyBzeXN0ZW1zIG1heSBub3QgbGlrZSB0aGlzIG1hcHBpbmcsIHRob3VnaAorICBpdCdzIGNvbnNpc3RlbnQgd2l0aCB0aGUgQklPUycgYmVoYXZpb3VyLiBPbGQgREMzOTAgZHJpdmVycyBpZ25vcmVkIHRoZQorICBwYXJ0aXRpb24gdGFibGUgYW5kIHVzZWQgYSBIL1MgPSA2NC8zMiBvciAyNTUvNjMgdHJhbnNsYXRpb24uIFNvIGlmIHlvdQorICB3YW50IHRvIGJlIGNvbXBhdGlibGUgdG8gdGhvc2UsIHVzZSB0aGlzIG9sZCBtYXBwaW5nIHdoZW4gY3JlYXRpbmcKKyAgcGFydGl0aW9uIHRhYmxlcy4gRXZlbiB3b3JzZSwgb24gYm9vdHVwIHRoZSBEQzM5MCBtaWdodCBjb21wbGFpbiBpZiBvdGhlcgorICBtYXBwaW5ncyBhcmUgZm91bmQsIHNvIGF1dG8gcmVib290aW5nIG1heSBmYWlsLgorKiBJbiBzb21lIHNpdHVhdGlvbnMsIHRoZSBkcml2ZXIgd2lsbCBnZXQgc3R1Y2sgaW4gYW4gYWJvcnQgbG9vcC4gVGhpcyBpcyBhCisgIGJhZCBpbnRlcmFjdGlvbiBiZXR3ZWVuIHRoZSBNaWQtTGF5ZXIgb2YgTGludXgnIFNDU0kgY29kZSBhbmQgdGhlIGRyaXZlci4KKyAgVHJ5IHRvIGRpc2FibGUgRHNDbiwgaWYgeW91IG1lZXQgdGhpcyBwcm9ibGVtLiBQbGVhc2UgY29udGFjdCBtZSBmb3IKKyAgZnVydGhlciBkZWJ1Z2dpbmcuCisKKworNy4gQnVnIHJlcG9ydHMsIGRlYnVnZ2luZyBhbmQgdXBkYXRlcworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorV2hlbmV2ZXIgeW91IGhhdmUgcHJvYmxlbXMgd2l0aCB0aGUgZHJpdmVyLCB5b3UgYXJlIGludml0ZWQgdG8gYXNrIHRoZQorYXV0aG9yIGZvciBoZWxwLiBIb3dldmVyLCBJJ2Qgc3VnZ2VzdCByZWFkaW5nIHRoZSBkb2NzIGFuZCB0cnlpbmcgdG8gc29sdmUKK3RoZSBwcm9ibGVtIHlvdXJzZWxmLCBmaXJzdC4gCitJZiB5b3UgZmluZCBzb21ldGhpbmcsIHdoaWNoIHlvdSBiZWxpZXZlIHRvIGJlIGEgYnVnLCBwbGVhc2UgcmVwb3J0IGl0IHRvIG1lLiAKK1BsZWFzZSBhcHBlbmQgdGhlIG91dHB1dCBvZiAvcHJvYy9zY3NpL3Njc2ksIC9wcm9jL3Njc2kvdG1zY3NpbS8/IGFuZAorbWF5YmUgdGhlIERDMzkwIGxvZyBtZXNzYWdlcyB0byB0aGUgcmVwb3J0LiAKKworQnVnIHJlcG9ydHMgc2hvdWxkIGJlIHNlbmQgdG8gbWUgKEt1cnQgR2FybG9mZiA8ZGMzOTBAZ2FybG9mZi5kZT4pIGFzIHdlbGwKK2FzIHRvIHRoZSBsaW51eC1zY3NpIGxpc3QgKDxsaW51eC1zY3NpQHZnZXIua2VybmVsLm9yZz4pLCBhcyBzb21ldGltZXMgYnVncworYXJlIGNhdXNlZCBieSB0aGUgU0NTSSBtaWQtbGV2ZWwgY29kZS4KKworSSB3aWxsIGFzayB5b3UgZm9yIHNvbWUgbW9yZSBkZXRhaWxzIGFuZCBwcm9iYWJseSBJIHdpbGwgYWxzbyBhc2sgeW91IHRvCitlbmFibGUgc29tZSBvZiB0aGUgREVCVUcgb3B0aW9ucyBpbiB0aGUgZHJpdmVyICh0bXNjc2ltLmM6REMzOTBfREVCVUdYWFgKK2RlZmluZXMpLiBUaGUgZHJpdmVyIHdpbGwgcHJvZHVjZSBzb21lIGRhdGEgZm9yIHRoZSBzeXNsb2cgZmFjaWxpdHkgdGhlbi4KK0Jld2FyZTogSWYgeW91ciBzeXNsb2cgZ2V0cyB3cml0dGVuIHRvIGEgU0NTSSBkaXNrIGNvbm5lY3RlZCB0byB5b3VyCitBTTUzQzk3NCwgdGhlIGxvZ2dpbmcgbWlnaHQgcHJvZHVjZSBsb2cgb3V0cHV0IGFnYWluLCBhbmQgeW91IG1pZ2h0IGVuZAoraGF2aW5nIHlvdXIgYm94IHNwZW5kaW5nIG1vc3Qgb2YgaXRzIHRpbWUgZG9pbmcgdGhlIGxvZ2dpbmcuCisKK1RoZSBsYXRlc3QgdmVyc2lvbiBvZiB0aGUgZHJpdmVyIGNhbiBiZSBmb3VuZCBhdDoKKyBodHRwOi8vd3d3LmdhcmxvZmYuZGUva3VydC9saW51eC9kYzM5MC8KKyBmdHA6Ly9mdHAuc3VzZS5jb20vcHViL3Blb3BsZS9nYXJsb2ZmL2xpbnV4L2RjMzkwLworCisKKzguIEFja25vd2xlZGdlbWVudHMKKy0tLS0tLS0tLS0tLS0tLS0tLS0KK1RoYW5rcyB0byBMaW51cyBUb3J2YWxkcywgQWxhbiBDb3gsIHRoZSBGU0YgcGVvcGxlLCB0aGUgWEZyZWU4NiB0ZWFtIGFuZCAKK2FsbCB0aGUgb3RoZXJzIGZvciB0aGUgd29uZGVyZnVsIE9TIGFuZCBzb2Z0d2FyZS4KK1RoYW5rcyB0byBDLkwuIEh1YW5nIGFuZCBQaGlsaXAgR2lhbmcgKFRla3JhbSkgZm9yIHRoZSBpbml0aWFsIGRyaXZlcgorcmVsZWFzZSBhbmQgc3VwcG9ydC4KK1RoYW5rcyB0byBEb3VnIExlZGZvcmQsIEfpcmFyZCBSb3VkaWVyIGZvciBzdXBwb3J0IHdpdGggU0NTSSBjb2RpbmcuCitUaGFua3MgdG8gYSBsb3Qgb2YgcGVvcGxlIChlc3BlYy4gQ2hpYWtpIElzaGlrYXdhLCBBbmRyZWFzIEhhdW1lciwgSHViZXJ0IAorVG9ubmVhdSkgZm9yIGludGVuc2l2ZWx5IHRlc3RpbmcgdGhlIGRyaXZlciAoYW5kIGV2ZW4gcmlza2luZyBkYXRhIGxvc3MKK2RvaW5nIHRoaXMgZHVyaW5nIGVhcmx5IHJldmlzaW9ucykuCitSZWNlbnRseSwgU3VTRSBHbWJILCBOdWVybmJlcmcsIEZSRywgaGFzIGJlZW4gcGF5aW5nIG1lIGZvciB0aGUgZHJpdmVyCitkZXZlbG9wbWVudCBhbmQgbWFpbnRlbmFuY2UuIFNwZWNpYWwgdGhhbmtzIQorCisKKzkuIENvcHlyaWdodAorLS0tLS0tLS0tLS0tCisgVGhpcyBkcml2ZXIgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5ICAgCisgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLgorIElmIHlvdSB3YW50IHRvIHVzZSBhbnkgbGF0ZXIgdmVyc2lvbiBvZiB0aGUgR05VIEdQTCwgeW91IHdpbGwgcHJvYmFibHkKKyBiZSBhbGxvd2VkIHRvLCBidXQgeW91IGhhdmUgdG8gYXNrIG1lIGFuZCBUZWtyYW0gPGVyaWNoQHRla3JhbS5jb20udHc+CisgYmVmb3JlLgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitXcml0dGVuIGJ5IEt1cnQgR2FybG9mZiA8a3VydEBnYXJsb2ZmLmRlPiAxOTk4LzA2LzExCitMYXN0IHVwZGF0ZWQgMjAwMC8xMS8yOCwgZHJpdmVyIHJldmlzaW9uIDIuMGU3CiskSWQ6IFJFQURNRS50bXNjc2ltLHYgMi4yNS4yLjcgMjAwMC8xMi8yMCAwMTowNzoxMiBnYXJsb2ZmIEV4cCAkCg==