ZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy8wMC1JTkRFWCBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy8wMC1JTkRFWApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MzQ5OTNkCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nLzAwLUlOREVYCkBAIC0wLDAgKzEsMTI3IEBACiswMC1JTkRFWAorCS0gdGhpcyBmaWxlCiszYzUwNS50eHQKKwktIGluZm9ybWF0aW9uIG9uIHRoZSAzQ29tIEV0aGVyTGluayBQbHVzICgzYzUwNSkgZHJpdmVyLgorNnBhY2sudHh0CisJLSBpbmZvIG9uIHRoZSA2cGFjayBwcm90b2NvbCwgYW4gYWx0ZXJuYXRpdmUgdG8gS0lTUyBmb3IgQVguMjUKK0NvbmZpZ3VyYWJsZQorCS0gaW5mbyBvbiBzb21lIG9mIHRoZSBjb25maWd1cmFibGUgbmV0d29yayBwYXJhbWV0ZXJzCitETElOSy50eHQKKwktIGluZm8gb24gdGhlIEQtTGluayBERS02MDAvREUtNjIwIHBhcmFsbGVsIHBvcnQgcG9ja2V0IGFkYXB0ZXJzCitQTElQLnR4dAorCS0gUExJUDogVGhlIFBhcmFsbGVsIExpbmUgSW50ZXJuZXQgUHJvdG9jb2wgZGV2aWNlIGRyaXZlcgorUkVBRE1FLnNiMTAwMAorCS0gaW5mbyBvbiBHZW5lcmFsIEluc3RydW1lbnQvTmV4dExldmVsIFNVUkZib2FyZDEwMDAgY2FibGUgbW9kZW0uCithbGlhcy50eHQKKwktIGluZm8gb24gdXNpbmcgYWxpYXMgbmV0d29yayBkZXZpY2VzIAorYXJjbmV0LWhhcmR3YXJlLnR4dAorCS0gdG9ucyBvZiBpbmZvIG9uIEFSQ25ldCwgaHVicywganVtcGVyIHNldHRpbmdzIGZvciBBUkNuZXQgY2FyZHMsIGV0Yy4KK2FyY25ldC50eHQKKwktIGluZm8gb24gdGhlIHVzaW5nIHRoZSBBUkNuZXQgZHJpdmVyIGl0c2VsZi4KK2F0bS50eHQKKwktIGluZm8gb24gd2hlcmUgdG8gZ2V0IEFUTSBwcm9ncmFtcyBhbmQgc3VwcG9ydCBmb3IgTGludXguCitheDI1LnR4dAorCS0gaW5mbyBvbiB1c2luZyBBWC4yNSBhbmQgTkVUL1JPTSBjb2RlIGZvciBMaW51eAorYmF5Y29tLnR4dAorCS0gaW5mbyBvbiB0aGUgZHJpdmVyIGZvciBCYXljb20gc3R5bGUgYW1hdGV1ciByYWRpbyBtb2RlbXMKK2JyaWRnZS50eHQKKwktIHdoZXJlIHRvIGdldCB1c2VyIHNwYWNlIHByb2dyYW1zIGZvciBldGhlcm5ldCBicmlkZ2luZyB3aXRoIExpbnV4LgorY29teC50eHQKKwktIGluZm8gb24gZHJpdmVycyBmb3IgQ09NWCBsaW5lIG9mIHN5bmNocm9ub3VzIHNlcmlhbCBhZGFwdGVycy4KK2NvcHMudHh0CisJLSBpbmZvIG9uIHRoZSBDT1BTIExvY2FsVGFsayBMaW51eCBkcml2ZXIKK2NzODl4MC50eHQKKwktIHRoZSBDcnlzdGFsIExBTiAoQ1M4OTAwLzIwLWJhc2VkKSBFdGhlcm5ldCBJU0EgYWRhcHRlciBkcml2ZXIKK2RlNHg1LnR4dAorCS0gdGhlIERpZ2l0YWwgRXRoZXJXT1JLUyBERTQ/PyBhbmQgREU1Pz8gUENJIEV0aGVybmV0IGRyaXZlcgorZGVjbmV0LnR4dAorCS0gaW5mbyBvbiB1c2luZyB0aGUgREVDbmV0IG5ldHdvcmtpbmcgbGF5ZXIgaW4gTGludXguCitkZXBjYS50eHQKKwktIHRoZSBEaWdpdGFsIERFUENBL0V0aGVyV09SS1MgREUxPz8gYW5kIERFMj8/IExBTkNFIEV0aGVybmV0IGRyaXZlcgorZGdycy50eHQKKwktIHRoZSBEaWdpIEludGVybmF0aW9uYWwgUmlnaHRTd2l0Y2ggU0UtWCBFdGhlcm5ldCBkcml2ZXIKK2RtZmUudHh0CisJLSBpbmZvIG9uIHRoZSBEYXZpY29tIERNOTEwMihBKS9ETTkxMzIvRE05ODAxIGZhc3QgZXRoZXJuZXQgZHJpdmVyLgorZTEwMC50eHQKKwktIGluZm8gb24gSW50ZWwncyBFdGhlckV4cHJlc3MgUFJPLzEwMCBsaW5lIG9mIDEwLzEwMCBib2FyZHMKK2UxMDAwLnR4dAorCS0gaW5mbyBvbiBJbnRlbCdzIEUxMDAwIGxpbmUgb2YgZ2lnYWJpdCBldGhlcm5ldCBib2FyZHMKK2VxbC50eHQKKwktIHNlcmlhbCBJUCBsb2FkIGJhbGFuY2luZworZXRoZXJ0YXAudHh0CisJLSB0aGUgRXRoZXJ0YXAgdXNlciBzcGFjZSBwYWNrZXQgcmVjZXB0aW9uIGFuZCB0cmFuc21pc3Npb24gZHJpdmVyCitld3JrMy50eHQKKwktIHRoZSBEaWdpdGFsIEV0aGVyV09SS1MgMyBERTIwMy80LzUgRXRoZXJuZXQgZHJpdmVyCitmaWx0ZXIudHh0CisJLSBMaW51eCBTb2NrZXQgRmlsdGVyaW5nCitmb3JlMjAwZS50eHQKKwktIEZPUkUgU3lzdGVtcyBQQ0EtMjAwRS9TQkEtMjAwRSBBVE0gTklDIGRyaXZlciBpbmZvLgorZnJhbWVyZWxheS50eHQKKwktIGluZm8gb24gdXNpbmcgRnJhbWUgUmVsYXkvRGF0YSBMaW5rIENvbm5lY3Rpb24gSWRlbnRpZmllciAoRExDSSkuCitpcC1zeXNjdGwudHh0CisJLSAvcHJvYy9zeXMvbmV0L2lwdjQvKiB2YXJpYWJsZXMKK2lwX2R5bmFkZHIudHh0CisJLSBJUCBkeW5hbWljIGFkZHJlc3MgaGFjayBlLmcuIGZvciBhdXRvLWRpYWx1cCBsaW5rcworaXBkZHAudHh0CisJLSBBcHBsZVRhbGstSVAgRGVjYXBzdWxhdGlvbiBhbmQgQXBwbGVUYWxrLUlQIEVuY2Fwc3VsYXRpb24KK2lwaGFzZS50eHQKKwktIEludGVycGhhc2UgUENJIEFUTSAoaSlDaGlwIElBIExpbnV4IGRyaXZlciBpbmZvLgoraXJkYS50eHQKKwktIHdoZXJlIHRvIGdldCBJckRBIChpbmZyYXJlZCkgdXRpbGl0aWVzIGFuZCBpbmZvIGZvciBMaW51eC4KK2xhcGItbW9kdWxlLnR4dAorCS0gcHJvZ3JhbW1pbmcgaW5mb3JtYXRpb24gb2YgdGhlIExBUEIgbW9kdWxlLgorbHRwYy50eHQKKwktIHRoZSBBcHBsZSBvciBGYXJhbGxvbiBMb2NhbFRhbGsgUEMgY2FyZCBkcml2ZXIKK211bHRpY2FzdC50eHQKKwktIEJlaGF2aW91ciBvZiBjYXJkcyB1bmRlciBNdWx0aWNhc3QKK25jc2EtdGVsbmV0CisJLSBub3RlcyBvbiBob3cgTkNTQSB0ZWxuZXQgKERPUykgYnJlYWtzIHdpdGggTVRVIGRpc2NvdmVyeSBlbmFibGVkLgorbmV0LW1vZHVsZXMudHh0CisJLSBpbmZvIGFuZCAiaW5zbW9kIiBwYXJhbWV0ZXJzIGZvciBhbGwgbmV0d29yayBkcml2ZXIgbW9kdWxlcy4KK25ldGRldmljZXMudHh0CisJLSBpbmZvIG9uIG5ldHdvcmsgZGV2aWNlIGRyaXZlciBmdW5jdGlvbnMgZXhwb3J0ZWQgdG8gdGhlIGtlcm5lbC4KK29seW1waWMudHh0CisJLSBJQk0gUENJIFBpdC9QaXQtUGh5L09seW1waWMgVG9rZW4gUmluZyBkcml2ZXIgaW5mby4KK3BvbGljeS1yb3V0aW5nLnR4dAorCS0gSVAgcG9saWN5LWJhc2VkIHJvdXRpbmcKK3B0LnR4dAorCS0gdGhlIEdyYWNpbGlzIFBhY2tldHdpbiBBWC4yNSBkZXZpY2UgZHJpdmVyCityYXlfY3MudHh0CisJLSBSYXlsaW5rIFdpcmVsZXNzIExBTiBjYXJkIGRyaXZlciBpbmZvLgorcm91dGluZy50eHQKKwktIHRoZSBuZXcgcm91dGluZyBtZWNoYW5pc20KK3NoYXBlci50eHQKKwktIGluZm8gb24gdGhlIG1vZHVsZSB0aGF0IGNhbiBzaGFwZS9saW1pdCB0cmFuc21pdHRlZCB0cmFmZmljLgorc2lzOTAwLnR4dAorCS0gU2lTIDkwMC83MDE2IEZhc3QgRXRoZXJuZXQgZGV2aWNlIGRyaXZlciBpbmZvLgorc2s5OGxpbi50eHQKKwktIE1hcnZlbGwgWXVrb24gQ2hpcHNldCAvIFN5c0tvbm5lY3QgU0stOTh4eCBjb21wbGlhbnQgR2lnYWJpdAorCSAgRXRoZXJuZXQgQWRhcHRlciBmYW1pbHkgZHJpdmVyIGluZm8KK3NrZnAudHh0CisJLSBTeXNLb25uZWN0IEZEREkgKFNLLTV4eHgsIENvbXBhcSBOZXRlbGxpZ2VudCkgZHJpdmVyIGluZm8uCitzbWM5LnR4dAorCS0gdGhlIGRyaXZlciBmb3IgU01DJ3MgOTAwMCBzZXJpZXMgb2YgRXRoZXJuZXQgY2FyZHMKK3NtY3RyLnR4dAorCS0gU01DIFRva2VuQ2FyZCBUb2tlblJpbmcgTGludXggZHJpdmVyIGluZm8uCit0Y3AudHh0CisJLSBzaG9ydCBibHVyYiBvbiBob3cgVENQIG91dHB1dCB0YWtlcyBwbGFjZS4KK3RsYW4udHh0CisJLSBUaHVuZGVyTEFOIChDb21wYXEgTmV0ZWxsaWdlbnQgMTAvMTAwLCBPbGljb20gT0MtMnh4eCkgZHJpdmVyIGluZm8uCit0bXMzODB0ci50eHQKKwktIFN5c0tvbm5lY3QgVG9rZW4gUmluZyBJU0EvUENJIGFkYXB0ZXIgZHJpdmVyIGluZm8uCit0dW50YXAudHh0CisJLSBUVU4vVEFQIGRldmljZSBkcml2ZXIsIGFsbG93aW5nIHVzZXIgc3BhY2UgUngvVHggb2YgcGFja2V0cy4KK3ZvcnRleC50eHQKKwktIGluZm8gb24gdXNpbmcgM0NvbSBWb3J0ZXggKDNjNTkwLCAzYzU5MiwgM2M1OTUsIDNjNTk3KSBFdGhlcm5ldCBjYXJkcy4KK3dhbi1yb3V0ZXIudHh0CisJLSBXYW4gcm91dGVyIGRvY3VtZW50YXRpb24KK3dhbnBpcGUudHh0CisJLSBXQU5QSVBFKHRtKSBNdWx0aXByb3RvY29sIFdBTiBEcml2ZXIgZm9yIExpbnV4IFdBTiBSb3V0ZXIKK3dhdmVsYW4udHh0CisJLSBBVCZUIEdJUyAobmVlIE5DUikgV2F2ZUxBTiBjYXJkOiBBbiBFdGhlcm5ldC1saWtlIHJhZGlvIHRyYW5zY2VpdmVyCit4MjUudHh0CisJLSBnZW5lcmFsIGluZm8gb24gWC4yNSBkZXZlbG9wbWVudC4KK3gyNS1pZmFjZS50eHQKKwktIGRlc2NyaXB0aW9uIG9mIHRoZSBYLjI1IFBhY2tldCBMYXllciB0byBMQVBCIGRldmljZSBpbnRlcmZhY2UuCit6ODUzMGRydi50eHQKKwktIGluZm8gYWJvdXQgTGludXggZHJpdmVyIGZvciBaODUzMCBiYXNlZCBIRExDIGNhcmRzIGZvciBBWC4yNQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nLzNjMzU5LnR4dCBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy8zYzM1OS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGFmODA3MQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy8zYzM1OS50eHQKQEAgLTAsMCArMSw1OCBAQAorCiszQ09NIFBDSSBUT0tFTiBMSU5LIFZFTE9DSVRZIFhMIFRPS0VOIFJJTkcgQ0FSRFMgUkVBRE1FCisKK1JlbGVhc2UgMC45LjAgLSBSZWxlYXNlICAgCisJSnVsIDE3dGggMjAwMCBNaWtlIFBoaWxsaXBzIAorCisJMS4yLjAgLSBGaW5hbAorCUZlYiAxN3RoIDIwMDIgTWlrZSBQaGlsbGlwcyAKKwlVcGRhdGVkIGZvciBzdWJtaXNzaW9uIHRvIHRoZSAyLjQueCBrZXJuZWwuCisKK1RoYW5rczoKKwlUZXJyeSBNdXJwaHkgZnJvbSAzQ29tIGZvciB0ZWNoIGRvY3MgYW5kIHN1cHBvcnQsCisJQWRhbSBELiBMaWdhcyBmb3IgdGVzdGluZyB0aGUgZHJpdmVyLgorIAorTm90ZToKKwlUaGlzIGRyaXZlciB3aWxsIE5PVCB3b3JrIHdpdGggdGhlIDNDMzM5IFRva2VuIFJpbmcgY2FyZHMsIHlvdSBuZWVkCit0byB1c2UgdGhlIHRtczM4MCBkcml2ZXIgaW5zdGVhZC4KKworT3B0aW9uczoKKworVGhlIGRyaXZlciBhY2NlcHRzIHRocmVlIG9wdGlvbnM6IHJpbmdzcGVlZCwgcGt0X2J1Zl9zeiBhbmQgbWVzc2FnZV9sZXZlbC4KKworVGhlc2Ugb3B0aW9ucyBjYW4gYmUgc3BlY2lmaWVkIGRpZmZlcmVudGx5IGZvciBlYWNoIGNhcmQgZm91bmQuIAorCityaW5nc3BlZWQ6ICBIYXMgb25lIG9mIHRocmVlIHNldHRpbmdzIDAgKGRlZmF1bHQpLCA0IG9yIDE2LiAgMCB3aWxsIAorbWFrZSB0aGUgY2FyZCBhdXRvc2Vuc2UgdGhlIHJpbmdzcGVlZCBhbmQgam9pbiBhdCB0aGUgYXBwcm9wcmlhdGUgc3BlZWQsIAordGhpcyB3aWxsIGJlIHRoZSBkZWZhdWx0IG9wdGlvbiBmb3IgbW9zdCBwZW9wbGUuICA0IG9yIDE2IGFsbG93IHlvdSB0byAKK2V4cGxpY2l0bHkgZm9yY2UgdGhlIGNhcmQgdG8gb3BlcmF0ZSBhdCBhIGNlcnRhaW4gc3BlZWQuICBUaGUgY2FyZCB3aWxsIGZhaWwgCitpZiB5b3UgdHJ5IHRvIGluc2VydCBpdCBhdCB0aGUgd3Jvbmcgc3BlZWQuIChBbHRob3VnaCBzb21lIGh1YnMgd2lsbCBhbGxvdyAKK3RoaXMgc28gYmUgKnZlcnkqIGNhcmVmdWwpLiAgVGhlIG1haW4gcHVycG9zZSBmb3IgZXhwbGljaXRseSBzZXR0aW5nIHRoZSByaW5nCitzcGVlZCBpcyBmb3Igd2hlbiB0aGUgY2FyZCBpcyBmaXJzdCBvbiB0aGUgcmluZy4gIEluIGF1dG9zZW5zZSBtb2RlLCBpZiB0aGUgY2FyZAorY2Fubm90IGRldGVjdCBhbnkgYWN0aXZlIG1vbml0b3JzIG9uIHRoZSByaW5nIGl0IHdpbGwgb3BlbiBhdCB0aGUgc2FtZSBzcGVlZCBhcworaXRzIGxhc3Qgb3BlbmluZy4gVGhpcyBjYW4gYmUgaGF6YXJkb3VzIGlmIHRoaXMgc3BlZWQgZG9lcyBub3QgbWF0Y2ggdGhlIHNwZWVkCit5b3Ugd2FudCB0aGUgcmluZyB0byBvcGVyYXRlIGF0LiAgCisKK3BrdF9idWZfc3o6ICBUaGlzIGlzIHRoaXMgaW5pdGlhbCByZWNlaXZlIGJ1ZmZlciBhbGxvY2F0aW9uIHNpemUuICBUaGlzIHdpbGwKK2RlZmF1bHQgdG8gNDA5NiBpZiBubyB2YWx1ZSBpcyBlbnRlcmVkLiBZb3UgbWF5IGluY3JlYXNlIHBlcmZvcm1hbmNlIG9mIHRoZSAKK2RyaXZlciBieSBzZXR0aW5nIHRoaXMgdG8gYSB2YWx1ZSBsYXJnZXIgdGhhbiB0aGUgbmV0d29yayBwYWNrZXQgc2l6ZSwgYWx0aG91Z2gKK3RoZSBkcml2ZXIgbm93IHJlLXNpemVzIGJ1ZmZlcnMgYmFzZWQgb24gTVRVIHNldHRpbmdzIGFzIHdlbGwuIAorCittZXNzYWdlX2xldmVsOiBDb250cm9scyBsZXZlbCBvZiBtZXNzYWdlcyBjcmVhdGVkIGJ5IHRoZSBkcml2ZXIuIERlZmF1bHRzIHRvIDA6Cit3aGljaCBvbmx5IGRpc3BsYXlzIHN0YXJ0LXVwIGFuZCBjcml0aWNhbCBtZXNzYWdlcy4gIFByZXNlbnRseSBhbnkgbm9uLXplcm8gCit2YWx1ZSB3aWxsIGRpc3BsYXkgYWxsIHNvZnQgbWVzc2FnZXMgYXMgd2VsbC4gIE5CIFRoaXMgZG9lcyBub3QgdHVybiAKK2RlYnVnZ2luZyBtZXNzYWdlcyBvbiwgdGhhdCBtdXN0IGJlIGRvbmUgYnkgbW9kaWZpZWQgdGhlIHNvdXJjZSBjb2RlLgorCitWYXJpYWJsZSBNVFUgc2l6ZToKKworVGhlIGRyaXZlciBjYW4gaGFuZGxlIGEgTVRVIHNpemUgdXB0byBlaXRoZXIgNDUwMCBvciAxODAwMCBkZXBlbmRpbmcgdXBvbiAKK3Jpbmcgc3BlZWQuICBUaGUgZHJpdmVyIGFsc28gY2hhbmdlcyB0aGUgc2l6ZSBvZiB0aGUgcmVjZWl2ZSBidWZmZXJzIGFzIHBhcnQKK29mIHRoZSBtdHUgcmUtc2l6aW5nLCBzbyBpZiB5b3Ugc2V0IG10dSA9IDE4MDAwLCB5b3Ugd2lsbCBuZWVkIHRvIGJlIGFibGUKK3RvIGFsbG9jYXRlIDE2ICogKHNrX2J1ZmYgd2l0aCAxODAwMCBidWZmZXIgc2l6ZSkgY2FsbCBpdCAxODUwMCBieXRlcyBwZXIgcmluZyAKK3Bvc2l0aW9uID0gMjk2LDAwMCBieXRlcyBvZiBtZW1vcnkgc3BhY2UsIHBsdXMgb2YgY291cnNlIGFueXRoaW5nIAorbmVjZXNzYXJ5IGZvciB0aGUgdHggc2tfYnVmZidzLiAgUmVtZW1iZXIgdGhpcyBpcyBwZXIgY2FyZCwgc28gaWYgeW91IGFyZQorYnVpbGRpbmcgcm91dGVycywgZ2F0ZXdheSdzIGV0YywgeW91IGNvdWxkIHN0YXJ0IHRvIHVzZSBhIGxvdCBvZiBtZW1vcnkKK3JlYWwgZmFzdC4KKworMi8xNy8wMiBNaWtlIFBoaWxsaXBzCisKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy8zYzUwNS50eHQgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvM2M1MDUudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI5ZDViNzIKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvM2M1MDUudHh0CkBAIC0wLDAgKzEsNDYgQEAKK1RoZSAzQ29tIEV0aGVybGluayBQbHVzICgzYzUwNSkgZHJpdmVyLgorCitUaGlzIGRyaXZlciBub3cgdXNlcyBETUEuICBUaGVyZSBpcyBjdXJyZW50bHkgbm8gc3VwcG9ydCBmb3IgUElPIG9wZXJhdGlvbi4KK1RoZSBkZWZhdWx0IERNQSBjaGFubmVsIGlzIDY7IHRoaXMgaXMgX25vdF8gYXV0b3Byb2JlZCwgc28geW91IG11c3QKK21ha2Ugc3VyZSB5b3UgY29uZmlndXJlIGl0IGNvcnJlY3RseS4gIElmIGxvYWRpbmcgdGhlIGRyaXZlciBhcyBhCittb2R1bGUsIHlvdSBjYW4gZG8gdGhpcyB3aXRoICJtb2Rwcm9iZSAzYzUwNSBkbWE9biIuICBJZiB0aGUgZHJpdmVyIGlzCitsaW5rZWQgc3RhdGljYWxseSBpbnRvIHRoZSBrZXJuZWwsIHlvdSBtdXN0IGVpdGhlciB1c2UgYW4gImV0aGVyPSIKK3N0YXRlbWVudCBvbiB0aGUgY29tbWFuZCBsaW5lLCBvciBjaGFuZ2UgdGhlIGRlZmluaXRpb24gb2YgRUxQX0RNQSBpbiAzYzUwNS5oLgorCitUaGUgZHJpdmVyIHdpbGwgd2FybiB5b3UgaWYgaXQgaGFzIHRvIGZhbGwgYmFjayBvbiB0aGUgY29tcGlsZWQgaW4KK2RlZmF1bHQgRE1BIGNoYW5uZWwuIAorCitJZiBubyBiYXNlIGFkZHJlc3MgaXMgZ2l2ZW4gYXQgYm9vdCB0aW1lLCB0aGUgZHJpdmVyIHdpbGwgYXV0b3Byb2JlCitwb3J0cyAweDMwMCwgMHgyODAgYW5kIDB4MzEwIChpbiB0aGF0IG9yZGVyKS4gIElmIG5vIElSUSBpcyBnaXZlbiwgdGhlIGRyaXZlcgord2lsbCB0cnkgdG8gcHJvYmUgZm9yIGl0LgorCitUaGUgZHJpdmVyIGNhbiBiZSB1c2VkIGFzIGEgbG9hZGFibGUgbW9kdWxlLiAgU2VlIG5ldC1tb2R1bGVzLnR4dCBmb3IgZGV0YWlscworb2YgdGhlIHBhcmFtZXRlcnMgaXQgY2FuIHRha2UuICAKKworVGhlb3JldGljYWxseSwgb25lIGluc3RhbmNlIG9mIHRoZSBkcml2ZXIgY2FuIG5vdyBydW4gbXVsdGlwbGUgY2FyZHMsCitpbiB0aGUgc3RhbmRhcmQgd2F5ICh3aGVuIGxvYWRpbmcgYSBtb2R1bGUsIHNheSAibW9kcHJvYmUgM2M1MDUKK2lvPTB4MzAwLDB4MzQwIGlycT0xMCwxMSBkbWE9Niw3IiBvciB3aGF0ZXZlcikuICBJIGhhdmUgbm90IHRlc3RlZAordGhpcywgdGhvdWdoLgorCitUaGUgZHJpdmVyIG1heSBub3cgc3VwcG9ydCByZXZpc2lvbiAyIGhhcmR3YXJlOyB0aGUgZGVwZW5kZW5jeSBvbgorYmVpbmcgYWJsZSB0byByZWFkIHRoZSBob3N0IGNvbnRyb2wgcmVnaXN0ZXIgaGFzIGJlZW4gcmVtb3ZlZC4gIFRoaXMKK2lzIGFsc28gdW50ZXN0ZWQsIHNpbmNlIEkgZG9uJ3QgaGF2ZSBhIHN1aXRhYmxlIGNhcmQuCisKK0tub3duIHByb2JsZW1zOgorIEkgc3RpbGwgc2VlICJETUEgdXBsb2FkIHRpbWVkIG91dCIgbWVzc2FnZXMgZnJvbSB0aW1lIHRvIHRpbWUuICBUaGVzZQorc2VlbSB0byBiZSBmYWlybHkgbm9uLWZhdGFsIHRob3VnaC4KKyBUaGUgY2FyZCBpcyBvbGQgYW5kIHNsb3cuCisKK1RvIGRvOgorIEltcHJvdmUgcHJvYmUvc2V0dXAgY29kZQorIFRlc3QgbXVsdGljYXN0IGFuZCBwcm9taXNjdW91cyBvcGVyYXRpb24KKworQXV0aG9yczoKKyBUaGUgZHJpdmVyIGlzIG1haW5seSB3cml0dGVuIGJ5IENyYWlnIFNvdXRoZXJlbiwgZW1haWwKKyA8Y3JhaWdzQGluZWx1a2kuYXBhbmEub3JnLmF1Pi4KKyBQYXJ0cyBvZiB0aGUgZHJpdmVyIChhZGFwdGluZyB0aGUgZHJpdmVyIHRvIDEuMS40KyBrZXJuZWxzLAorIElSUS9hZGRyZXNzIGRldGVjdGlvbiwgc29tZSBjaGFuZ2VzKSBhbmQgdGhpcyBSRUFETUUgYnkKKyBKdWhhIExhaWhvIDxqbGFpaG9AaWNoYW9zLm51bGxuZXQuZmk+LgorIERNQSBtb2RlLCBtb3JlIGZpeGVzLCBldGMsIGJ5IFBoaWxpcCBCbHVuZGVsbCA8cGpiMjdAY2FtLmFjLnVrPgorIE11bHRpY2FyZCBzdXBwb3J0LCBTb2Z0d2FyZSBjb25maWd1cmFibGUgRE1BLCBldGMuLCBieQorIENocmlzdG9waGVyIENvbGxpbnMgPGNjb2xsaW5zQHBjdWcub3JnLmF1PgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nLzNjNTA5LnR4dCBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy8zYzUwOS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODY3YTk5ZgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy8zYzUwOS50eHQKQEAgLTAsMCArMSwyMTAgQEAKK0xpbnV4IGFuZCB0aGUgM0NvbSBFdGhlckxpbmsgSUlJIFNlcmllcyBFdGhlcmNhcmRzIChkcml2ZXIgdjEuMThjIGFuZCBoaWdoZXIpCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoaXMgZmlsZSBjb250YWlucyB0aGUgaW5zdHJ1Y3Rpb25zIGFuZCBjYXZlYXRzIGZvciB2MS4xOGMgYW5kIGhpZ2hlciB2ZXJzaW9ucworb2YgdGhlIDNjNTA5IGRyaXZlci4gWW91IHNob3VsZCBub3QgdXNlIHRoZSBkcml2ZXIgd2l0aG91dCByZWFkaW5nIHRoaXMgZmlsZS4KKworcmVsZWFzZSAxLjAKKzI4IEZlYnJ1YXJ5IDIwMDIKK0N1cnJlbnQgbWFpbnRhaW5lciAoY29ycmVjdGlvbnMgdG8pOgorICBEYXZpZCBSdWdnaWVybyA8amRyQGZhcmZhbGxlLmNvbT4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisoMCkgSW50cm9kdWN0aW9uCisKK1RoZSBmb2xsb3dpbmcgYXJlIG5vdGVzIGFuZCBpbmZvcm1hdGlvbiBvbiB1c2luZyB0aGUgM0NvbSBFdGhlckxpbmsgSUlJIHNlcmllcworZXRoZXJjYXJkcyBpbiBMaW51eC4gVGhlc2UgY2FyZHMgYXJlIGNvbW1vbmx5IGtub3duIGJ5IHRoZSBtb3N0IHdpZGVseS11c2VkCitjYXJkJ3MgM0NvbSBtb2RlbCBudW1iZXIsIDNjNTA5LiBUaGV5IGFyZSBhbGwgMTBtYi9zIElTQS1idXMgY2FyZHMgYW5kIHNob3VsZG4ndAorYmUgKGJ1dCBzb21ldGltZXMgYXJlKSBjb25mdXNlZCB3aXRoIHRoZSBzaW1pbGFybHktbnVtYmVyZWQgUENJLWJ1cyAiM2M5MDUiCisoYWthICJWb3J0ZXgiIG9yICJCb29tZXJhbmciKSBzZXJpZXMuICBLZXJuZWwgc3VwcG9ydCBmb3IgdGhlIDNjNTA5IGZhbWlseSBpcworcHJvdmlkZWQgYnkgdGhlIG1vZHVsZSAzYzUwOS5jLCB3aGljaCBoYXMgY29kZSB0byBzdXBwb3J0IGFsbCBvZiB0aGUgZm9sbG93aW5nCittb2RlbHM6CisKKyAgM2M1MDkgKG9yaWdpbmFsIElTQSBjYXJkKQorICAzYzUwOUIgKGxhdGVyIHJldmlzaW9uIG9mIHRoZSBJU0EgY2FyZDsgc3VwcG9ydHMgZnVsbC1kdXBsZXgpCisgIDNjNTg5IChQQ01DSUEpCisgIDNjNTg5QiAobGF0ZXIgcmV2aXNpb24gb2YgdGhlIDNjNTg5OyBzdXBwb3J0cyBmdWxsLWR1cGxleCkKKyAgM2M1MjkgKE1DQSkKKyAgM2M1NzkgKEVJU0EpCisKK0xhcmdlIHBvcnRpb25zIG9mIHRoaXMgZG9jdW1lbnRhdGlvbiB3ZXJlIGhlYXZpbHkgYm9ycm93ZWQgZnJvbSB0aGUgZ3VpZGUKK3dyaXR0ZW4gdGhlIG9yaWdpbmFsIGF1dGhvciBvZiB0aGUgM2M1MDkgZHJpdmVyLCBEb25hbGQgQmVja2VyLiBUaGUgbWFzdGVyCitjb3B5IG9mIHRoYXQgZG9jdW1lbnQsIHdoaWNoIGNvbnRhaW5zIG5vdGVzIG9uIG9sZGVyIHZlcnNpb25zIG9mIHRoZSBkcml2ZXIsCitjdXJyZW50bHkgcmVzaWRlcyBvbiBTY3lsZCB3ZWIgc2VydmVyOiBodHRwOi8vd3d3LnNjeWxkLmNvbS9uZXR3b3JrLzNjNTA5Lmh0bWwuCisKKworKDEpIFNwZWNpYWwgRHJpdmVyIEZlYXR1cmVzCisKK092ZXJyaWRpbmcgY2FyZCBzZXR0aW5ncworCitUaGUgZHJpdmVyIGFsbG93cyBib290LSBvciBsb2FkLXRpbWUgb3ZlcnJpZGluZyBvZiB0aGUgY2FyZCdzIGRldGVjdGVkIElPQUREUiwKK0lSUSwgYW5kIHRyYW5zY2VpdmVyIHNldHRpbmdzLCBhbHRob3VnaCB0aGlzIGNhcGFiaWxpdHkgc2hvdWxkbid0IGdlbmVyYWxseSBiZQorbmVlZGVkIGV4Y2VwdCB0byBlbmFibGUgZnVsbC1kdXBsZXggbW9kZSAoc2VlIGJlbG93KS4gQW4gZXhhbXBsZSBvZiB0aGUgc3ludGF4Citmb3IgTElMTyBwYXJhbWV0ZXJzIGZvciBkb2luZyB0aGlzOgorCisgICAgZXRoZXI9MTAsMHgzMTAsMywweDNjNTA5LGV0aDAgCisKK1RoaXMgY29uZmlndXJlcyB0aGUgZmlyc3QgZm91bmQgM2M1MDkgY2FyZCBmb3IgSVJRIDEwLCBiYXNlIEkvTyAweDMxMCwgYW5kCit0cmFuc2NlaXZlciB0eXBlIDMgKDEwYmFzZTIpLiBUaGUgZmxhZyAiMHgzYzUwOSIgbXVzdCBiZSBzZXQgdG8gYXZvaWQgY29uZmxpY3RzCit3aXRoIG90aGVyIGNhcmQgdHlwZXMgd2hlbiBvdmVycmlkaW5nIHRoZSBJL08gYWRkcmVzcy4gV2hlbiB0aGUgZHJpdmVyIGlzCitsb2FkZWQgYXMgYSBtb2R1bGUsIG9ubHkgdGhlIElSUSBhbmQgdHJhbnNjZWl2ZXIgc2V0dGluZyBtYXkgYmUgb3ZlcnJpZGRlbi4KK0ZvciBleGFtcGxlLCBzZXR0aW5nIHR3byBjYXJkcyB0byAxMGJhc2UyL0lSUTEwIGFuZCBBVUkvSVJRMTEgaXMgZG9uZSBieSB1c2luZwordGhlIHhjdnIgYW5kIGlycSBtb2R1bGUgb3B0aW9uczoKKworICAgb3B0aW9ucyAzYzUwOSB4Y3ZyPTMsMSBpcnE9MTAsMTEKKworCisoMikgRnVsbC1kdXBsZXggbW9kZQorCitUaGUgdjEuMThjIGRyaXZlciBhZGRlZCBzdXBwb3J0IGZvciB0aGUgM2M1MDlCJ3MgZnVsbC1kdXBsZXggY2FwYWJpbGl0aWVzLgorSW4gb3JkZXIgdG8gZW5hYmxlIGFuZCBzdWNjZXNzZnVsbHkgdXNlIGZ1bGwtZHVwbGV4IG1vZGUsIHRocmVlIGNvbmRpdGlvbnMKK211c3QgYmUgbWV0OiAKKworKGEpIFlvdSBtdXN0IGhhdmUgYSBFdGhlcmxpbmsgSUlJIGNhcmQgbW9kZWwgd2hvc2UgaGFyZHdhcmUgc3VwcG9ydHMgZnVsbC0KK2R1cGxleCBvcGVyYXRpb25zLiBDdXJyZW50bHksIHRoZSBvbmx5IG1lbWJlcnMgb2YgdGhlIDNjNTA5IGZhbWlseSB0aGF0IGFyZQorcG9zaXRpdmVseSBrbm93biB0byBzdXBwb3J0IGZ1bGwtZHVwbGV4IGFyZSB0aGUgM2M1MDlCIChJU0EgYnVzKSBhbmQgM2M1ODlCCisoUENNQ0lBKSBjYXJkcy4gQ2FyZHMgd2l0aG91dCB0aGUgIkIiIG1vZGVsIGRlc2lnbmF0aW9uIGRvICpub3QqIHN1cHBvcnQKK2Z1bGwtZHVwbGV4IG1vZGU7IHRoZXNlIGluY2x1ZGUgdGhlIG9yaWdpbmFsIDNjNTA5IChubyAiQiIpLCB0aGUgb3JpZ2luYWwKKzNjNTg5LCB0aGUgM2M1MjkgKE1DQSBidXMpLCBhbmQgdGhlIDNjNTc5IChFSVNBIGJ1cykuCisKKyhiKSBZb3UgbXVzdCBiZSB1c2luZyB5b3VyIGNhcmQncyAxMGJhc2VUIHRyYW5zY2VpdmVyIChpLmUuLCB0aGUgUkotNDUKK2Nvbm5lY3RvciksIG5vdCBpdHMgQVVJICh0aGljay1uZXQpIG9yIDEwYmFzZTIgKHRoaW4tbmV0L2NvYXgpIGludGVyZmFjZXMuCitBVUkgYW5kIDEwYmFzZTIgbmV0d29yayBjYWJsaW5nIGlzIHBoeXNpY2FsbHkgaW5jYXBhYmxlIG9mIGZ1bGwtZHVwbGV4CitvcGVyYXRpb24uCisKKyhjKSBNb3N0IGltcG9ydGFudGx5LCB5b3VyIDNjNTA5QiBtdXN0IGJlIGNvbm5lY3RlZCB0byBhIGxpbmsgcGFydG5lciB0aGF0IGlzCitpdHNlbGYgZnVsbC1kdXBsZXggY2FwYWJsZS4gVGhpcyBpcyBhbG1vc3QgY2VydGFpbmx5IG9uZSBvZiB0d28gdGhpbmdzOiBhIGZ1bGwtCitkdXBsZXgtY2FwYWJsZSAgRXRoZXJuZXQgc3dpdGNoICgqbm90KiBhIGh1YiksIG9yIGEgZnVsbC1kdXBsZXgtY2FwYWJsZSBOSUMgb24KK2Fub3RoZXIgc3lzdGVtIHRoYXQncyBjb25uZWN0ZWQgZGlyZWN0bHkgdG8gdGhlIDNjNTA5QiB2aWEgYSBjcm9zc292ZXIgY2FibGUuCisgCisvLy8vL0V4dHJlbWVseSBpbXBvcnRhbnQgY2F1dGlvbiBjb25jZXJuaW5nIGZ1bGwtZHVwbGV4IG1vZGUvLy8vLworVW5kZXJzdGFuZCB0aGF0IHRoZSAzYzUwOUIncyBoYXJkd2FyZSdzIGZ1bGwtZHVwbGV4IHN1cHBvcnQgaXMgbXVjaCBtb3JlCitsaW1pdGVkIHRoYW4gdGhhdCBwcm92aWRlIGJ5IG1vcmUgbW9kZXJuIG5ldHdvcmsgaW50ZXJmYWNlIGNhcmRzLiBBbHRob3VnaAorYXQgdGhlIHBoeXNpY2FsIGxheWVyIG9mIHRoZSBuZXR3b3JrIGl0IGZ1bGx5IHN1cHBvcnRzIGZ1bGwtZHVwbGV4IG9wZXJhdGlvbiwKK3RoZSBjYXJkIHdhcyBkZXNpZ25lZCBiZWZvcmUgdGhlIGN1cnJlbnQgRXRoZXJuZXQgYXV0by1uZWdvdGlhdGlvbiAoTi13YXkpCitzcGVjIHdhcyB3cml0dGVuLiBUaGlzIG1lYW5zIHRoYXQgdGhlIDNjNTA5QiBmYW1pbHkgKioqY2Fubm90IGFuZCB3aWxsIG5vdAorYXV0by1uZWdvdGlhdGUgYSBmdWxsLWR1cGxleCBjb25uZWN0aW9uIHdpdGggaXRzIGxpbmsgcGFydG5lciB1bmRlciBhbnkKK2NpcmN1bXN0YW5jZXMsIG5vIG1hdHRlciBob3cgaXQgaXMgaW5pdGlhbGl6ZWQqKiouIElmIHRoZSBmdWxsLWR1cGxleCBtb2RlCitvZiB0aGUgM2M1MDlCIGlzIGVuYWJsZWQsIGl0cyBsaW5rIHBhcnRuZXIgd2lsbCB2ZXJ5IGxpa2VseSBuZWVkIHRvIGJlCitpbmRlcGVuZGVudGx5IF9mb3JjZWRfIGludG8gZnVsbC1kdXBsZXggbW9kZSBhcyB3ZWxsOyBvdGhlcndpc2UgdmFyaW91cyBuYXN0eQorZmFpbHVyZXMgd2lsbCBvY2N1ciAtIGF0IHRoZSB2ZXJ5IGxlYXN0LCB5b3UnbGwgc2VlIG1hc3NpdmUgbnVtYmVycyBvZiBwYWNrZXQKK2NvbGxpc2lvbnMuIFRoaXMgaXMgb25lIG9mIHZlcnkgcmFyZSBjaXJjdW1zdGFuY2VzIHdoZXJlIGRpc2FibGluZyBhdXRvLQorbmVnb3RpYXRpb24gYW5kIGZvcmNpbmcgdGhlIGR1cGxleCBtb2RlIG9mIGEgbmV0d29yayBpbnRlcmZhY2UgY2FyZCBvciBzd2l0Y2gKK3dvdWxkIGV2ZXIgYmUgbmVjZXNzYXJ5IG9yIGRlc2lyYWJsZS4KKworCisoMykgQXZhaWxhYmxlIFRyYW5zY2VpdmVyIFR5cGVzCisKK0ZvciB2ZXJzaW9ucyBvZiB0aGUgZHJpdmVyIHYxLjE4YyBhbmQgYWJvdmUsIHRoZSBhdmFpbGFibGUgdHJhbnNjZWl2ZXIgdHlwZXMgYXJlOgorIAorMCAgdHJhbnNjZWl2ZXIgdHlwZSBmcm9tIEVFUFJPTSBjb25maWcgKG5vcm1hbGx5IDEwYmFzZVQpOyBmb3JjZSBoYWxmLWR1cGxleAorMSAgQVVJICh0aGljay1uZXQgLyBEQjE1IGNvbm5lY3RvcikKKzIgICh1bmRlZmluZWQpCiszICAxMGJhc2UyICh0aGluLW5ldCA9PSBjb2F4IC8gQk5DIGNvbm5lY3RvcikKKzQgIDEwYmFzZVQgKFJKLTQ1IGNvbm5lY3Rvcik7IGZvcmNlIGhhbGYtZHVwbGV4IG1vZGUKKzggIHRyYW5zY2VpdmVyIHR5cGUgYW5kIGR1cGxleCBtb2RlIHRha2VuIGZyb20gY2FyZCdzIEVFUFJPTSBjb25maWcgc2V0dGluZ3MKKzEyIDEwYmFzZVQgKFJKLTQ1IGNvbm5lY3Rvcik7IGZvcmNlIGZ1bGwtZHVwbGV4IG1vZGUKKworUHJpb3IgdG8gZHJpdmVyIHZlcnNpb24gMS4xOGMsIG9ubHkgdHJhbnNjZWl2ZXIgY29kZXMgMC00IHdlcmUgc3VwcG9ydGVkLiBOb3RlCit0aGF0IHRoZSBuZXcgdHJhbnNjZWl2ZXIgY29kZXMgOCBhbmQgMTIgYXJlIHRoZSAqb25seSogb25lcyB0aGF0IHdpbGwgZW5hYmxlCitmdWxsLWR1cGxleCBtb2RlLCBubyBtYXR0ZXIgd2hhdCB0aGUgY2FyZCdzIGRldGVjdGVkIEVFUFJPTSBzZXR0aW5ncyBtaWdodCBiZS4KK1RoaXMgaW5zdXJlZCB0aGF0IG1lcmVseSB1cGdyYWRpbmcgdGhlIGRyaXZlciBmcm9tIGFuIGVhcmxpZXIgdmVyc2lvbiB3b3VsZAorbmV2ZXIgYXV0b21hdGljYWxseSBlbmFibGUgZnVsbC1kdXBsZXggbW9kZSBpbiBhbiBleGlzdGluZyBpbnN0YWxsYXRpb247CitpdCBtdXN0IGFsd2F5cyBiZSBleHBsaWNpdGx5IGVuYWJsZWQgdmlhIG9uZSBvZiB0aGVzZSBjb2RlIGluIG9yZGVyIHRvIGJlCithY3RpdmF0ZWQuCisgIAorCisoNGEpIEludGVycHJldGF0aW9uIG9mIGVycm9yIG1lc3NhZ2VzIGFuZCBjb21tb24gcHJvYmxlbXMKKworRXJyb3IgTWVzc2FnZXMKKworZXRoMDogSW5maW5pdGUgbG9vcCBpbiBpbnRlcnJ1cHQsIHN0YXR1cyAyMDExLiAKK1RoZXNlIGFyZSAibW9zdGx5IGhhcm1sZXNzIiBtZXNzYWdlIGluZGljYXRpbmcgdGhhdCB0aGUgZHJpdmVyIGhhZCB0b28gbXVjaAord29yayBkdXJpbmcgdGhhdCBpbnRlcnJ1cHQgY3ljbGUuIFdpdGggYSBzdGF0dXMgb2YgMHgyMDExIHlvdSBhcmUgcmVjZWl2aW5nCitwYWNrZXRzIGZhc3RlciB0aGFuIHRoZXkgY2FuIGJlIHJlbW92ZWQgZnJvbSB0aGUgY2FyZC4gVGhpcyBzaG91bGQgYmUgcmFyZQorb3IgaW1wb3NzaWJsZSBpbiBub3JtYWwgb3BlcmF0aW9uLiBQb3NzaWJsZSBjYXVzZXMgb2YgdGhpcyBlcnJvciByZXBvcnQgYXJlOgorIAorICAgLSBhICJncmVlbiIgbW9kZSBlbmFibGVkIHRoYXQgc2xvd3MgdGhlIHByb2Nlc3NvciBkb3duIHdoZW4gdGhlcmUgaXMgbm8KKyAgICAga2V5Ym9hcmQgYWN0aXZpdGl5LiAKKworICAgLSBzb21lIG90aGVyIGRldmljZSBvciBkZXZpY2UgZHJpdmVyIGhvZ2dpbmcgdGhlIGJ1cyBvciBkaXNhYmxpbmcgaW50ZXJydXB0cy4KKyAgICAgQ2hlY2sgL3Byb2MvaW50ZXJydXB0cyBmb3IgZXhjZXNzaXZlIGludGVycnVwdCBjb3VudHMuIFRoZSB0aW1lciB0aWNrCisgICAgIGludGVycnVwdCBzaG91bGQgYWx3YXlzIGJlIGluY3JlbWVudGluZyBmYXN0ZXIgdGhhbiB0aGUgb3RoZXJzLiAKKworTm8gcmVjZWl2ZWQgcGFja2V0cyAKK0lmIGEgM2M1MDksIDNjNTYyIG9yIDNjNTg5IGNhbiBzdWNjZXNzZnVsbHkgdHJhbnNtaXQgcGFja2V0cywgYnV0IG5ldmVyCityZWNlaXZlcyBwYWNrZXRzIChhcyByZXBvcnRlZCBieSAvcHJvYy9uZXQvZGV2IG9yICdpZmNvbmZpZycpIHlvdSBsaWtlbHkKK2hhdmUgYW4gaW50ZXJydXB0IGxpbmUgcHJvYmxlbS4gQ2hlY2sgL3Byb2MvaW50ZXJydXB0cyB0byB2ZXJpZnkgdGhhdCB0aGUKK2NhcmQgaXMgYWN0dWFsbHkgZ2VuZXJhdGluZyBpbnRlcnJ1cHRzLiBJZiB0aGUgaW50ZXJydXB0IGNvdW50IGlzIG5vdAoraW5jcmVhc2luZyB5b3UgbGlrZWx5IGhhdmUgYSBwaHlzaWNhbCBjb25mbGljdCB3aXRoIHR3byBkZXZpY2VzIHRyeWluZyB0bwordXNlIHRoZSBzYW1lIElTQSBJUlEgbGluZS4gVGhlIGNvbW1vbiBjb25mbGljdCBpcyB3aXRoIGEgc291bmQgY2FyZCBvbiBJUlExMAorb3IgSVJRNSwgYW5kIHRoZSBlYXNpZXN0IHNvbHV0aW9uIGlzIHRvIG1vdmUgdGhlIDNjNTA5IHRvIGEgZGlmZmVyZW50CitpbnRlcnJ1cHQgbGluZS4gSWYgdGhlIGRldmljZSBpcyByZWNlaXZpbmcgcGFja2V0cyBidXQgJ3BpbmcnIGRvZXNuJ3Qgd29yaywKK3lvdSBoYXZlIGEgcm91dGluZyBwcm9ibGVtLgorCitUeCBDYXJyaWVyIEVycm9ycyBSZXBvcnRlZCBpbiAvcHJvYy9uZXQvZGV2IAorSWYgYW4gRXRoZXJMaW5rIElJSSBhcHBlYXJzIHRvIHRyYW5zbWl0IHBhY2tldHMsIGJ1dCB0aGUgIlR4IGNhcnJpZXIgZXJyb3JzIgorZmllbGQgaW4gL3Byb2MvbmV0L2RldiBpbmNyZW1lbnRzIGFzIHF1aWNrbHkgYXMgdGhlIFR4IHBhY2tldCBjb3VudCwgeW91CitsaWtlbHkgaGF2ZSBhbiB1bnRlcm1pbmF0ZWQgbmV0d29yayBvciB0aGUgaW5jb3JyZWN0IG1lZGlhIHRyYW5zY2VpdmVyIHNlbGVjdGVkLiAKKworM2M1MDlCIGNhcmQgaXMgbm90IGRldGVjdGVkIG9uIG1hY2hpbmVzIHdpdGggYW4gSVNBIFBuUCBCSU9TLiAKK1doaWxlIHRoZSB1cGRhdGVkIGRyaXZlciB3b3JrcyB3aXRoIG1vc3QgUG5QIEJJT1MgcHJvZ3JhbXMsIGl0IGRvZXMgbm90IHdvcmsKK3dpdGggYWxsLiBUaGlzIGNhbiBiZSBmaXhlZCBieSBkaXNhYmxpbmcgUG5QIHN1cHBvcnQgdXNpbmcgdGhlIDNDb20tc3VwcGxpZWQKK3NldHVwIHByb2dyYW0uIAorCiszYzUwOSBjYXJkIGlzIG5vdCBkZXRlY3RlZCBvbiBvdmVyY2xvY2tlZCBtYWNoaW5lcyAKK0luY3JlYXNlIHRoZSBkZWxheSB0aW1lIGluIGlkX3JlYWRfZWVwcm9tKCkgZnJvbSB0aGUgY3VycmVudCB2YWx1ZSwgNTAwLAordG8gYW4gYWJzdXJkbHkgaGlnaCB2YWx1ZSwgc3VjaCBhcyA1MDAwLiAKKworCisoNGIpIERlY29kaW5nIFN0YXR1cyBhbmQgRXJyb3IgTWVzc2FnZXMKKworVGhlIGJpdHMgaW4gdGhlIG1haW4gc3RhdHVzIHJlZ2lzdGVyIGFyZTogCisKK3ZhbHVlIAlkZXNjcmlwdGlvbgorMHgwMSAJSW50ZXJydXB0IGxhdGNoCisweDAyIAlUeCBvdmVycnVuLCBvciBSeCB1bmRlcnJ1bgorMHgwNCAJVHggY29tcGxldGUKKzB4MDggCVR4IEZJRk8gcm9vbSBhdmFpbGFibGUKKzB4MTAgCUEgY29tcGxldGUgUnggcGFja2V0IGhhcyBhcnJpdmVkCisweDIwIAlBIFJ4IHBhY2tldCBoYXMgc3RhcnRlZCB0byBhcnJpdmUKKzB4NDAgCVRoZSBkcml2ZXIgaGFzIHJlcXVlc3RlZCBhbiBpbnRlcnJ1cHQKKzB4ODAgCVN0YXRpc3RpY3MgY291bnRlciBuZWFybHkgZnVsbAorCitUaGUgYml0cyBpbiB0aGUgdHJhbnNtaXQgKFR4KSBzdGF0dXMgd29yZCBhcmU6IAorCit2YWx1ZSAJZGVzY3JpcHRpb24KKzB4MDIgCU91dC1vZi13aW5kb3cgY29sbGlzaW9uLgorMHgwNCAJU3RhdHVzIHN0YWNrIG92ZXJmbG93IChub3JtYWxseSBpbXBvc3NpYmxlKS4KKzB4MDggCTE2IGNvbGxpc2lvbnMuCisweDEwIAlUeCB1bmRlcnJ1biAobm90IGVub3VnaCBQQ0kgYnVzIGJhbmR3aWR0aCkuCisweDIwIAlUeCBqYWJiZXIuCisweDQwIAlUeCBpbnRlcnJ1cHQgcmVxdWVzdGVkLgorMHg4MCAJU3RhdHVzIGlzIHZhbGlkICh0aGlzIHNob3VsZCBhbHdheXMgYmUgc2V0KS4KKworCitXaGVuIGEgdHJhbnNtaXQgZXJyb3Igb2NjdXJzIHRoZSBkcml2ZXIgcHJvZHVjZXMgYSBzdGF0dXMgbWVzc2FnZSBzdWNoIGFzIAorCisgICBldGgwOiBUcmFuc21pdCBlcnJvciwgVHggc3RhdHVzIHJlZ2lzdGVyIDgyCisKK1RoZSB0d28gdmFsdWVzIHR5cGljYWxseSBzZWVuIGhlcmUgYXJlOgorCisweDgyIAorT3V0IG9mIHdpbmRvdyBjb2xsaXNpb24uIFRoaXMgdHlwaWNhbGx5IG9jY3VycyB3aGVuIHNvbWUgb3RoZXIgRXRoZXJuZXQKK2hvc3QgaXMgaW5jb3JyZWN0bHkgc2V0IHRvIGZ1bGwgZHVwbGV4IG9uIGEgaGFsZiBkdXBsZXggbmV0d29yay4gCisKKzB4ODggCisxNiBjb2xsaXNpb25zLiBUaGlzIHR5cGljYWxseSBvY2N1cnMgd2hlbiB0aGUgbmV0d29yayBpcyBleGNlcHRpb25hbGx5IGJ1c3kKK29yIHdoZW4gYW5vdGhlciBob3N0IGRvZXNuJ3QgY29ycmVjdGx5IGJhY2sgb2ZmIGFmdGVyIGEgY29sbGlzaW9uLiBJZiB0aGlzCitlcnJvciBpcyBtaXhlZCB3aXRoIDB4ODIgZXJyb3JzIGl0IGlzIHRoZSByZXN1bHQgb2YgYSBob3N0IGluY29ycmVjdGx5IHNldAordG8gZnVsbCBkdXBsZXggKHNlZSBhYm92ZSkuCisKK0JvdGggb2YgdGhlc2UgZXJyb3JzIGFyZSB0aGUgcmVzdWx0IG9mIG5ldHdvcmsgcHJvYmxlbXMgdGhhdCBzaG91bGQgYmUKK2NvcnJlY3RlZC4gVGhleSBkbyBub3QgcmVwcmVzZW50IGRyaXZlciBtYWxmdW5jdGlvbi4KKworCisoNSkgUmV2aXNpb24gaGlzdG9yeSAodGhpcyBmaWxlKQorCisyOEZlYjAyIHYxLjAgIERSICAgTmV3OyBtYWpvciBwb3J0aW9ucyBiYXNlZCBvbiBCZWNrZXIgb3JpZ2luYWwgM2M1MDkgZG9jcworCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvNnBhY2sudHh0IGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nLzZwYWNrLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40OGVkMmI3Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nLzZwYWNrLnR4dApAQCAtMCwwICsxLDE3NSBAQAorVGhpcyBpcyB0aGUgNnBhY2stbWluaS1IT1dUTywgd3JpdHRlbiBieQorCitBbmRyZWFzIEv2bnNnZW4gREczS1EKK0ludGVybmV0OiBhamtAaWVoay5yd3RoLWFhY2hlbi5kZQorQU1QUi1uZXQ6IGRnM2txQGRiMHByYS5hbXByLm9yZworQVguMjU6ICAgIGRnM2txQGRiMGFjaC4jbnJ3LmRldS5ldQorCitMYXN0IHVwZGF0ZTogQXByaWwgNywgMTk5OAorCisxLiBXaGF0IGlzIDZwYWNrLCBhbmQgd2hhdCBhcmUgdGhlIGFkdmFudGFnZXMgdG8gS0lTUz8KKworNnBhY2sgaXMgYSB0cmFuc21pc3Npb24gcHJvdG9jb2wgZm9yIGRhdGEgZXhjaGFuZ2UgYmV0d2VlbiB0aGUgUEMgYW5kCit0aGUgVE5DIG92ZXIgYSBzZXJpYWwgbGluZS4gSXQgY2FuIGJlIHVzZWQgYXMgYW4gYWx0ZXJuYXRpdmUgdG8gS0lTUy4KKworNnBhY2sgaGFzIHR3byBtYWpvciBhZHZhbnRhZ2VzOgorLSBUaGUgUEMgaXMgZ2l2ZW4gZnVsbCBjb250cm9sIG92ZXIgdGhlIHJhZGlvCisgIGNoYW5uZWwuIFNwZWNpYWwgY29udHJvbCBkYXRhIGlzIGV4Y2hhbmdlZCBiZXR3ZWVuIHRoZSBQQyBhbmQgdGhlIFROQyBzbworICB0aGF0IHRoZSBQQyBrbm93cyBhdCBhbnkgdGltZSBpZiB0aGUgVE5DIGlzIHJlY2VpdmluZyBkYXRhLCBpZiBhIFROQworICBidWZmZXIgdW5kZXJydW4gb3Igb3ZlcnJ1biBoYXMgb2NjdXJyZWQsIGlmIHRoZSBQVFQgaXMKKyAgc2V0IGFuZCBzbyBvbi4gVGhpcyBjb250cm9sIGRhdGEgaXMgcHJvY2Vzc2VkIGF0IGEgaGlnaGVyIHByaW9yaXR5IHRoYW4KKyAgbm9ybWFsIGRhdGEsIHNvIGEgZGF0YSBzdHJlYW0gY2FuIGJlIGludGVycnVwdGVkIGF0IGFueSB0aW1lIHRvIGlzc3VlIGFuCisgIGltcG9ydGFudCBldmVudC4gVGhpcyBoZWxwcyB0byBpbXByb3ZlIHRoZSBjaGFubmVsIGFjY2VzcyBhbmQgdGltaW5nIAorICBhbGdvcml0aG1zIGFzIGV2ZXJ5dGhpbmcgaXMgY29tcHV0ZWQgaW4gdGhlIFBDLiBJdCB3b3VsZCBldmVuIGJlIHBvc3NpYmxlIAorICB0byBleHBlcmltZW50IHdpdGggc29tZXRoaW5nIGNvbXBsZXRlbHkgZGlmZmVyZW50IGZyb20gdGhlIGtub3duIENTTUEgYW5kIAorICBEQU1BIGNoYW5uZWwgYWNjZXNzIG1ldGhvZHMuCisgIFRoaXMga2luZCBvZiByZWFsLXRpbWUgY29udHJvbCBpcyBlc3BlY2lhbGx5IGltcG9ydGFudCB0byBzdXBwbHkgc2V2ZXJhbAorICBUTkNzIHRoYXQgYXJlIGNvbm5lY3RlZCBiZXR3ZWVuIGVhY2ggb3RoZXIgYW5kIHRoZSBQQyBieSBhIGRhaXN5IGNoYWluCisgIChob3dldmVyLCB0aGlzIGZlYXR1cmUgaXMgbm90IHN1cHBvcnRlZCB5ZXQgYnkgdGhlIExpbnV4IDZwYWNrIGRyaXZlcikuCisKKy0gRWFjaCBwYWNrZXQgdHJhbnNmZXJyZWQgb3ZlciB0aGUgc2VyaWFsIGxpbmUgaXMgc3VwcGxpZWQgd2l0aCBhIGNoZWNrc3VtLAorICBzbyBpdCBpcyBlYXN5IHRvIGRldGVjdCBlcnJvcnMgZHVlIHRvIHByb2JsZW1zIG9uIHRoZSBzZXJpYWwgbGluZS4KKyAgUmVjZWl2ZWQgcGFja2V0cyB0aGF0IGFyZSBjb3JydXB0IGFyZSBub3QgcGFzc2VkIG9uIHRvIHRoZSBBWC4yNSBsYXllci4KKyAgRGFtYWdlZCBwYWNrZXRzIHRoYXQgdGhlIFROQyBoYXMgcmVjZWl2ZWQgZnJvbSB0aGUgUEMgYXJlIG5vdCB0cmFuc21pdHRlZC4KKworTW9yZSBkZXRhaWxzIGFib3V0IDZwYWNrIGFyZSBkZXNjcmliZWQgaW4gdGhlIGZpbGUgNnBhY2sucHMgdGhhdCBpcyBsb2NhdGVkCitpbiB0aGUgZG9jIGRpcmVjdG9yeSBvZiB0aGUgQVguMjUgdXRpbGl0aWVzIHBhY2thZ2UuCisKKzIuIFdobyBoYXMgZGV2ZWxvcGVkIHRoZSA2cGFjayBwcm90b2NvbD8KKworVGhlIDZwYWNrIHByb3RvY29sIGhhcyBiZWVuIGRldmVsb3BlZCBieSBFa2tpIFBsaWNodCBERjRPUiwgSGVubmluZyBSZWNoCitERjlJQyBhbmQgR3VudGVyIEpvc3QgREs3V0ouIEEgZHJpdmVyIGZvciA2cGFjaywgd3JpdHRlbiBieSBHdW50ZXIgSm9zdCBhbmQKK01hdHRoaWFzIFdlbHdhcnNreSBERzJGRUYsIGNvbWVzIGFsb25nIHdpdGggdGhlIFBDIHZlcnNpb24gb2YgRmxleE5ldC4KK1RoZXkgaGF2ZSBhbHNvIHdyaXR0ZW4gYSBmaXJtd2FyZSBmb3IgVE5DcyB0byBwZXJmb3JtIHRoZSA2cGFjaworcHJvdG9jb2wgKHNlZSBzZWN0aW9uIDQgYmVsb3cpLgorCiszLiBXaGVyZSBjYW4gSSBnZXQgdGhlIGxhdGVzdCB2ZXJzaW9uIG9mIDZwYWNrIGZvciBMaW51WD8KKworQXQgdGhlIG1vbWVudCwgdGhlIDZwYWNrIHN0dWZmIGNhbiBvYnRhaW5lZCB2aWEgYW5vbnltb3VzIGZ0cCBmcm9tCitkYjBibS5hdXRvbWF0aW9uLmZoLWFhY2hlbi5kZS4gSW4gdGhlIGRpcmVjdG9yeSAvaW5jb21pbmcvZGcza3EsCit0aGVyZSBpcyBhIGZpbGUgbmFtZWQgNnBhY2sudGd6LgorCis0LiBQcmVwYXJpbmcgdGhlIFROQyBmb3IgNnBhY2sgb3BlcmF0aW9uCisKK1RvIGJlIGFibGUgdG8gdXNlIDZwYWNrLCBhIHNwZWNpYWwgZmlybXdhcmUgZm9yIHRoZSBUTkMgaXMgbmVlZGVkLiBUaGUgRVBST00KK29mIGEgbmV3bHkgYm91Z2h0IFROQyBkb2VzIG5vdCBjb250YWluIDZwYWNrLCBzbyB5b3Ugd2lsbCBoYXZlIHRvCitwcm9ncmFtIGFuIEVQUk9NIHlvdXJzZWxmLiBUaGUgaW1hZ2UgZmlsZSBmb3IgNnBhY2sgRVBST01zIHNob3VsZCBiZQorYXZhaWxhYmxlIG9uIGFueSBwYWNrZXQgcmFkaW8gYm94IHdoZXJlIFBDL0ZsZXhOZXQgY2FuIGJlIGZvdW5kLiBUaGUgbmFtZSBvZgordGhlIGZpbGUgaXMgNnBhY2suYmluLiBUaGlzIGZpbGUgaXMgY29weXJpZ2h0ZWQgYW5kIG1haW50YWluZWQgYnkgdGhlIEZsZXhOZXQKK3RlYW0uIEl0IGNhbiBiZSB1c2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgbGljZW5zZSB0aGF0IGNvbWVzIGFsb25nCit3aXRoIFBDL0ZsZXhOZXQuIFBsZWFzZSBkbyBub3QgYXNrIG1lIGFib3V0IHRoZSBpbnRlcm5hbHMgb2YgdGhpcyBmaWxlIGFzIEkKK2Rvbid0IGtub3cgYW55dGhpbmcgYWJvdXQgaXQuIEkgdXNlZCBhIHRleHR1YWwgZGVzY3JpcHRpb24gb2YgdGhlIDZwYWNrCitwcm90b2NvbCB0byBwcm9ncmFtIHRoZSBMaW51eCBkcml2ZXIuCisKK1ROQ3MgY29udGFpbiBhIDY0a0J5dGUgRVBST00sIHRoZSBsb3dlciBoYWxmIG9mIHdoaWNoIGlzIHVzZWQgZm9yCit0aGUgZmlybXdhcmUvS0lTUy4gVGhlIHVwcGVyIGhhbGYgaXMgZWl0aGVyIGVtcHR5IG9yIGlzIHNvbWV0aW1lcworcHJvZ3JhbW1lZCB3aXRoIHNvZnR3YXJlIGNhbGxlZCBUQVBSLiBJbiB0aGUgbGF0dGVyIGNhc2UsIHRoZSBUTkMKK2lzIHN1cHBsaWVkIHdpdGggYSBESVAgc3dpdGNoIHNvIHlvdSBjYW4gZWFzaWx5IGNoYW5nZSBiZXR3ZWVuIHRoZQordHdvIHN5c3RlbXMuIFdoZW4gcHJvZ3JhbW1pbmcgYSBuZXcgRVBST00sIG9uZSBvZiB0aGUgc3lzdGVtcyBpcyByZXBsYWNlZAorYnkgNnBhY2suIEl0IGlzIHVzZWZ1bCB0byByZXBsYWNlIFRBUFIsIGFzIHRoaXMgc29mdHdhcmUgaXMgcmFyZWx5IHVzZWQKK25vd2FkYXlzLiBJZiB5b3VyIFROQyBpcyBub3QgZXF1aXBwZWQgd2l0aCB0aGUgc3dpdGNoIG1lbnRpb25lZCBhYm92ZSwgeW91CitjYW4gYnVpbGQgaW4gb25lIHlvdXJzZWxmIHRoYXQgc3dpdGNoZXMgb3ZlciB0aGUgaGlnaGVzdCBhZGRyZXNzIHBpbgorb2YgdGhlIEVQUk9NIGJldHdlZW4gSElHSCBhbmQgTE9XIGxldmVsLiBBZnRlciBoYXZpbmcgaW5zZXJ0ZWQgdGhlIG5ldyBFUFJPTQorYW5kIHN3aXRjaGVkIHRvIDZwYWNrLCBhcHBseSBwb3dlciB0byB0aGUgVE5DIGZvciBhIGZpcnN0IHRlc3QuIFRoZSBjb25uZWN0CithbmQgdGhlIHN0YXR1cyBMRUQgYXJlIGxpdCBmb3IgYWJvdXQgYSBzZWNvbmQgaWYgdGhlIGZpcm13YXJlIGluaXRpYWxpc2VzCit0aGUgVE5DIGNvcnJlY3RseS4KKworNS4gQnVpbGRpbmcgYW5kIGluc3RhbGxpbmcgdGhlIDZwYWNrIGRyaXZlcgorCitUaGUgZHJpdmVyIGhhcyBiZWVuIHRlc3RlZCB3aXRoIGtlcm5lbCB2ZXJzaW9uIDIuMS45MC4gVXNlIHdpdGggb2xkZXIKK2tlcm5lbHMgbWF5IGxlYWQgdG8gYSBjb21waWxhdGlvbiBlcnJvciBiZWNhdXNlIHRoZSBpbnRlcmZhY2UgdG8gYSBrZXJuZWwKK2Z1bmN0aW9uIGhhcyBiZWVuIGNoYW5nZWQgaW4gdGhlIDIuMS44eCBrZXJuZWxzLgorCitIb3cgdG8gdHVybiBvbiA2cGFjayBzdXBwb3J0OgorCistIEluIHRoZSBsaW51eCBrZXJuZWwgY29uZmlndXJhdGlvbiBwcm9ncmFtLCBzZWxlY3QgdGhlIGNvZGUgbWF0dXJpdHkgbGV2ZWwKKyAgb3B0aW9ucyBtZW51IGFuZCB0dXJuIG9uIHRoZSBwcm9tcHRpbmcgZm9yIGRldmVsb3BtZW50IGRyaXZlcnMuCisKKy0gU2VsZWN0IHRoZSBhbWF0ZXVyIHJhZGlvIHN1cHBvcnQgbWVudSBhbmQgdHVybiBvbiB0aGUgc2VyaWFsIHBvcnQgNnBhY2sKKyAgZHJpdmVyLgorCistIENvbXBpbGUgYW5kIGluc3RhbGwgdGhlIGtlcm5lbCBhbmQgdGhlIG1vZHVsZXMuCisKK1RvIHVzZSB0aGUgZHJpdmVyLCB0aGUga2lzc2F0dGFjaCBwcm9ncmFtIGRlbGl2ZXJlZCB3aXRoIHRoZSBBWC4yNSB1dGlsaXRpZXMKK2hhcyB0byBiZSBtb2RpZmllZC4KKworLSBEbyBhIGNkIHRvIHRoZSBkaXJlY3RvcnkgdGhhdCBob2xkcyB0aGUga2lzc2F0dGFjaCBzb3VyY2VzLiBFZGl0IHRoZQorICBraXNzYXR0YWNoLmMgZmlsZS4gQXQgdGhlIHRvcCwgaW5zZXJ0IHRoZSBmb2xsb3dpbmcgbGluZXM6CisKKyAgI2lmbmRlZiBOXzZQQUNLCisgICNkZWZpbmUgTl82UEFDSyAoTl9BWDI1KzEpCisgICNlbmRpZgorCisgIFRoZW4gZmluZCB0aGUgbGluZQorICAgCisgIGludCBkaXNjID0gTl9BWDI1OworCisgIGFuZCByZXBsYWNlIE5fQVgyNSBieSBOXzZQQUNLLgorCistIFJlY29tcGlsZSBraXNzYXR0YWNoLiBSZW5hbWUgaXQgdG8gc3BhdHRhY2ggdG8gYXZvaWQgY29uZnVzaW9ucy4KKworSW5zdGFsbGluZyB0aGUgZHJpdmVyOgorCistIERvIGFuIGluc21vZCA2cGFjay4gTG9vayBhdCB5b3VyIC92YXIvbG9nL21lc3NhZ2VzIGZpbGUgdG8gY2hlY2sgaWYgdGhlIAorICBtb2R1bGUgaGFzIHByaW50ZWQgaXRzIGluaXRpYWxpemF0aW9uIG1lc3NhZ2UuCisKKy0gRG8gYSBzcGF0dGFjaCBhcyB5b3Ugd291bGQgbGF1bmNoIGtpc3NhdHRhY2ggd2hlbiBzdGFydGluZyBhIEtJU1MgcG9ydC4KKyAgQ2hlY2sgaWYgdGhlIGtlcm5lbCBwcmludHMgdGhlIG1lc3NhZ2UgJzZwYWNrOiBUTkMgZm91bmQnLiAKKworLSBGcm9tIGhlcmUsIGV2ZXJ5dGhpbmcgc2hvdWxkIHdvcmsgYXMgaWYgeW91IHdlcmUgc2V0dGluZyB1cCBhIEtJU1MgcG9ydC4KKyAgVGhlIG9ubHkgZGlmZmVyZW5jZSBpcyB0aGF0IHRoZSBuZXR3b3JrIGRldmljZSB0aGF0IHJlcHJlc2VudHMKKyAgdGhlIDZwYWNrIHBvcnQgaXMgY2FsbGVkIHNwIGluc3RlYWQgb2Ygc2wgb3IgYXguIFNvLCBzcDAgd291bGQgYmUgdGhlCisgIGZpcnN0IDZwYWNrIHBvcnQuCisKK0FsdGhvdWdoIHRoZSBkcml2ZXIgaGFzIGJlZW4gdGVzdGVkIG9uIHZhcmlvdXMgcGxhdGZvcm1zLCBJIHN0aWxsIGRlY2xhcmUgaXQKK0FMUEhBLiBCRSBDQVJFRlVMISBTeW5jIHlvdXIgZGlza3MgYmVmb3JlIGluc21vZGluZyB0aGUgNnBhY2sgbW9kdWxlCithbmQgc3BhdHRhY2hpbmcuIFdhdGNoIG91dCBpZiB5b3VyIGNvbXB1dGVyIGJlaGF2ZXMgc3RyYW5nZWx5LiBSZWFkIHNlY3Rpb24KKzYgb2YgdGhpcyBmaWxlIGFib3V0IGtub3duIHByb2JsZW1zLgorCitOb3RlIHRoYXQgdGhlIGNvbm5lY3QgYW5kIHN0YXR1cyBMRURzIG9mIHRoZSBUTkMgYXJlIGNvbnRyb2xsZWQgaW4gYQorZGlmZmVyZW50IHdheSB0aGFuIHRoZXkgYXJlIHdoZW4gdGhlIFROQyBpcyB1c2VkIHdpdGggUEMvRmxleE5ldC4gV2hlbiB1c2luZworRmxleE5ldCwgdGhlIGNvbm5lY3QgTEVEIGlzIG9uIGlmIHRoZXJlIGlzIGEgY29ubmVjdGlvbjsgdGhlIHN0YXR1cyBMRUQgaXMKK29uIGlmIHRoZXJlIGlzIGRhdGEgaW4gdGhlIGJ1ZmZlciBvZiB0aGUgUEMncyBBWC4yNSBlbmdpbmUgdGhhdCBoYXMgdG8gYmUKK3RyYW5zbWl0dGVkLiBVbmRlciBMaW51eCwgdGhlIDZwYWNrIGxheWVyIGlzIGJleW9uZCB0aGUgQVguMjUgbGF5ZXIsCitzbyB0aGUgNnBhY2sgZHJpdmVyIGRvZXNuJ3Qga25vdyBhbnl0aGluZyBhYm91dCBjb25uZWN0cyBvciBkYXRhIHRoYXQKK2hhcyBub3QgeWV0IGJlZW4gdHJhbnNtaXR0ZWQuIFRoZXJlZm9yZSB0aGUgTEVEcyBhcmUgY29udHJvbGxlZAorYXMgdGhleSBhcmUgaW4gS0lTUyBtb2RlOiBUaGUgY29ubmVjdCBMRUQgaXMgdHVybmVkIG9uIGlmIGRhdGEgaXMgdHJhbnNmZXJyZWQKK2Zyb20gdGhlIFBDIHRvIHRoZSBUTkMgb3ZlciB0aGUgc2VyaWFsIGxpbmUsIHRoZSBzdGF0dXMgTEVEIGlmIGRhdGEgaXMKK3NlbnQgdG8gdGhlIFBDLgorCis2LiBLbm93biBwcm9ibGVtcworCitXaGVuIHRlc3RpbmcgdGhlIGRyaXZlciB3aXRoIDIuMC4zeCBrZXJuZWxzIGFuZAorb3BlcmF0aW5nIHdpdGggZGF0YSByYXRlcyBvbiB0aGUgcmFkaW8gY2hhbm5lbCBvZiA5NjAwIEJhdWQgb3IgaGlnaGVyLAordGhlIGRyaXZlciBtYXksIG9uIGNlcnRhaW4gc3lzdGVtcywgc29tZXRpbWVzIHByaW50IHRoZSBtZXNzYWdlICc2cGFjazoKK2JhZCBjaGVja3N1bScsIHdoaWNoIGlzIGR1ZSB0byBkYXRhIGxvc3MgaWYgdGhlIG90aGVyIHN0YXRpb24gc2VuZHMgdHdvCitvciBtb3JlIHN1YnNlcXVlbnQgcGFja2V0cy4gSSBoYXZlIGJlZW4gdG9sZCB0aGF0IHRoaXMgaXMgZHVlIHRvIGEgcHJvYmxlbQord2l0aCB0aGUgc2VyaWFsIGRyaXZlciBvZiAyLjAuM3gga2VybmVscy4gSSBkb24ndCBrbm93IHlldCBpZiB0aGUgcHJvYmxlbQorc3RpbGwgZXhpc3RzIHdpdGggMi4xLngga2VybmVscywgYXMgSSBoYXZlIGhlYXJkIHRoYXQgdGhlIHNlcmlhbCBkcml2ZXIKK2NvZGUgaGFzIGJlZW4gY2hhbmdlZCB3aXRoIDIuMS54LgorCitXaGVuIHNodXR0aW5nIGRvd24gdGhlIHNwIGludGVyZmFjZSB3aXRoIGlmY29uZmlnLCB0aGUga2VybmVsIGNyYXNoZXMgaWYKK3RoZXJlIGlzIHN0aWxsIGFuIEFYLjI1IGNvbm5lY3Rpb24gbGVmdCBvdmVyIHdoaWNoIGFuIElQIGNvbm5lY3Rpb24gd2FzCitydW5uaW5nLCBldmVuIGlmIHRoYXQgSVAgY29ubmVjdGlvbiBpcyBhbHJlYWR5IGNsb3NlZC4gVGhlIHByb2JsZW0gZG9lcyBub3QKK29jY3VyIHdoZW4gdGhlcmUgaXMgYSBiYXJlIEFYLjI1IGNvbm5lY3Rpb24gc3RpbGwgcnVubmluZy4gSSBkb24ndCBrbm93IGlmCit0aGlzIGlzIGEgcHJvYmxlbSBvZiB0aGUgNnBhY2sgZHJpdmVyIG9yIHNvbWV0aGluZyBlbHNlIGluIHRoZSBrZXJuZWwuCisKK1RoZSBkcml2ZXIgaGFzIGJlZW4gdGVzdGVkIGFzIGEgbW9kdWxlLCBub3QgeWV0IGFzIGEga2VybmVsLWJ1aWx0aW4gZHJpdmVyLgorCitUaGUgNnBhY2sgcHJvdG9jb2wgc3VwcG9ydHMgZGFpc3ktY2hhaW5pbmcgb2YgVE5DcyBpbiBhIHRva2VuIHJpbmcsIHdoaWNoIGlzCitjb25uZWN0ZWQgdG8gb25lIHNlcmlhbCBwb3J0IG9mIHRoZSBQQy4gVGhpcyBmZWF0dXJlIGlzIG5vdCBpbXBsZW1lbnRlZAorYW5kIGF0IGxlYXN0IGF0IHRoZSBtb21lbnQgSSB3b24ndCBiZSBhYmxlIHRvIGRvIGl0IGJlY2F1c2UgSSBkbyBub3QgaGF2ZQordGhlIG9wcG9ydHVuaXR5IHRvIGJ1aWxkIGEgVE5DIGRhaXN5LWNoYWluIGFuZCB0ZXN0IGl0LgorCitTb21lIG9mIHRoZSBjb21tZW50cyBpbiB0aGUgc291cmNlIGNvZGUgYXJlIGluYWNjdXJhdGUuIFRoZXkgYXJlIGxlZnQgZnJvbQordGhlIFNMSVAvS0lTUyBkcml2ZXIsIGZyb20gd2hpY2ggdGhlIDZwYWNrIGRyaXZlciBoYXMgYmVlbiBkZXJpdmVkLgorSSBoYXZlbid0IG1vZGlmaWVkIG9yIHJlbW92ZWQgdGhlbSB5ZXQgLS0gc29ycnkhIFRoZSBjb2RlIGl0c2VsZiBuZWVkcworc29tZSBjbGVhbmluZyBhbmQgb3B0aW1pemluZy4gVGhpcyB3aWxsIGJlIGRvbmUgaW4gYSBsYXRlciByZWxlYXNlLgorCitJZiB5b3UgZW5jb3VudGVyIGEgYnVnIG9yIGlmIHlvdSBoYXZlIGEgcXVlc3Rpb24gb3Igc3VnZ2VzdGlvbiBjb25jZXJuaW5nIHRoZQorZHJpdmVyLCBmZWVsIGZyZWUgdG8gbWFpbCBtZSwgdXNpbmcgdGhlIGFkZHJlc3NlcyBnaXZlbiBhdCB0aGUgYmVnaW5uaW5nIG9mCit0aGlzIGZpbGUuCisKK0hhdmUgZnVuIQorCitBbmRyZWFzCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvQ29uZmlndXJhYmxlIGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL0NvbmZpZ3VyYWJsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42OWMwZGQ0Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL0NvbmZpZ3VyYWJsZQpAQCAtMCwwICsxLDM0IEBACisKK1RoZXJlIGFyZSBhIGZldyBuZXR3b3JrIHBhcmFtZXRlcnMgdGhhdCBjYW4gYmUgdHVuZWQgdG8gYmV0dGVyIG1hdGNoCit0aGUga2VybmVsIHRvIHlvdXIgc3lzdGVtIGhhcmR3YXJlIGFuZCBpbnRlbmRlZCB1c2FnZS4gVGhlIGRlZmF1bHRzCithcmUgdXN1YWxseSBhIGdvb2QgY2hvaWNlIGZvciA5OSUgb2YgdGhlIHBlb3BsZSA5OSUgb2YgdGhlIHRpbWUsIGJ1dAoreW91IHNob3VsZCBiZSBhd2FyZSB0aGV5IGRvIGV4aXN0IGFuZCBjYW4gYmUgY2hhbmdlZC4KKworVGhlIGN1cnJlbnQgbGlzdCBvZiBwYXJhbWV0ZXJzIGNhbiBiZSBmb3VuZCBpbiB0aGUgZmlsZXM6CisKKwlsaW51eC9uZXQvVFVOQUJMRQorCURvY3VtZW50YXRpb24vbmV0d29ya2luZy9pcC1zeXNjdGwudHh0CisKK1NvbWUgb2YgdGhlc2UgYXJlIGFjY2Vzc2libGUgdmlhIHRoZSBzeXNjdGwgaW50ZXJmYWNlLCBhbmQgbWFueSBtb3JlIGFyZQorc2NoZWR1bGVkIHRvIGJlIGFkZGVkIGluIHRoaXMgd2F5LiBGb3IgZXhhbXBsZSwgc29tZSBwYXJhbWV0ZXJzIHJlbGF0ZWQgCit0byBBZGRyZXNzIFJlc29sdXRpb24gUHJvdG9jb2wgKEFSUCkgYXJlIHZlcnkgZWFzaWx5IHZpZXdlZCBhbmQgYWx0ZXJlZC4KKworCSMgY2F0IC9wcm9jL3N5cy9uZXQvaXB2NC9hcnBfdGltZW91dAorCTYwMDAKKwkjIGVjaG8gNzAwMCA+IC9wcm9jL3N5cy9uZXQvaXB2NC9hcnBfdGltZW91dAorCSMgY2F0IC9wcm9jL3N5cy9uZXQvaXB2NC9hcnBfdGltZW91dAorCTcwMDAKKworT3RoZXJzIGFyZSBhbHJlYWR5IGFjY2Vzc2libGUgdmlhIHRoZSByZWxhdGVkIHVzZXIgc3BhY2UgcHJvZ3JhbXMuCitGb3IgZXhhbXBsZSwgTUFYX1dJTkRPVyBoYXMgYSBkZWZhdWx0IG9mIDMyIGsgd2hpY2ggaXMgYSBnb29kIGNob2ljZSBmb3IKK21vZGVybiBoYXJkd2FyZSwgYnV0IGlmIHlvdSBoYXZlIGEgc2xvdyAoOCBiaXQpIEV0aGVybmV0IGNhcmQgYW5kL29yIGEgc2xvdworbWFjaGluZSwgdGhlbiB0aGlzIHdpbGwgYmUgZmFyIHRvbyBiaWcgZm9yIHRoZSBjYXJkIHRvIGtlZXAgdXAgd2l0aCBmYXN0IAorbWFjaGluZXMgdHJhbnNtaXR0aW5nIG9uIHRoZSBzYW1lIG5ldCwgcmVzdWx0aW5nIGluIG92ZXJydW5zIGFuZCByZWNlaXZlIGVycm9ycy4KK0EgdmFsdWUgb2YgYWJvdXQgNCBrIHdvdWxkIGJlIG1vcmUgYXBwcm9wcmlhdGUsIHdoaWNoIGNhbiBiZSBzZXQgdmlhOgorCisJIyByb3V0ZSBhZGQgLW5ldCAxOTIuMTY4LjMuMCB3aW5kb3cgNDA5NgorCitUaGUgcmVtYWluZGVyIG9mIHRoZXNlIGNhbiBvbmx5IGJlIHByZXNlbnRseSBjaGFuZ2VkIGJ5IGFsdGVyaW5nIGEgI2RlZmluZQoraW4gdGhlIHJlbGF0ZWQgaGVhZGVyIGZpbGUuIFRoaXMgbWVhbnMgYW4gZWRpdCBhbmQgcmVjb21waWxlIGN5Y2xlLgorCisJCQkJCQlQYXVsIEdvcnRtYWtlciAwNi85NgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL0RMSU5LLnR4dCBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9ETElOSy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDgzZDI0NwotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9ETElOSy50eHQKQEAgLTAsMCArMSwyMDQgQEAKK1JlbGVhc2VkIDE5OTQtMDYtMTMKKworCisJQ09OVEVOVFM6CisKKwkxLiBJbnRyb2R1Y3Rpb24uCisJMi4gTGljZW5zZS4KKwkzLiBGaWxlcyBpbiB0aGlzIHJlbGVhc2UuCisJNC4gSW5zdGFsbGF0aW9uLgorCTUuIFByb2JsZW1zIGFuZCB0dW5pbmcuCisJNi4gVXNpbmcgdGhlIGRyaXZlcnMgd2l0aCBlYXJsaWVyIHJlbGVhc2VzLgorCTcuIEFja25vd2xlZGdtZW50cy4KKworCisJMS4gSU5UUk9EVUNUSU9OLgorCisJVGhpcyBpcyBhIHNldCBvZiBFdGhlcm5ldCBkcml2ZXJzIGZvciB0aGUgRC1MaW5rIERFLTYwMC9ERS02MjAKKwlwb2NrZXQgYWRhcHRlcnMsIGZvciB0aGUgcGFyYWxsZWwgcG9ydCBvbiBhIExpbnV4IGJhc2VkIG1hY2hpbmUuCisJU29tZSBhZGFwdGVyICJjbG9uZXMiIHdpbGwgYWxzbyB3b3JrLiAgWGlyY29tIGlzIF9ub3RfIGEgY2xvbmUuLi4KKwlUaGVzZSBkcml2ZXJzIF9jYW5fIGJlIHVzZWQgYXMgbG9hZGFibGUgbW9kdWxlcywKKwlhbmQgd2VyZSBkZXZlbG9wZWQgZm9yIHVzZSBvbiBMaW51eCAxLjEuMTMgYW5kIGFib3ZlLgorCUZvciB1c2Ugb24gTGludXggMS4wLlgsIG9yIGVhcmxpZXIgcmVsZWFzZXMsIHNlZSBiZWxvdy4KKworCUkgaGF2ZSB1c2VkIHRoZXNlIGRyaXZlcnMgZm9yIE5GUywgZnRwLCB0ZWxuZXQgYW5kIFgtY2xpZW50cyBvbgorCXJlbW90ZSBtYWNoaW5lcy4gVHJhbnNtaXNzaW9ucyB3aXRoIGZ0cCBzZWVtcyB0byB3b3JrIGFzCisJZ29vZCBhcyBjYW4gYmUgZXhwZWN0ZWQgKGkuZS4gPiA4MGsgYnl0ZXMvc2VjKSBmcm9tIGEKKwlwYXJhbGxlbCBwb3J0Li4uOi0pICBSZWNlaXZlIHNwZWVkcyB3aWxsIGJlIGFib3V0IDYwLTgwJSBvZiB0aGlzLgorCURlcGVuZGluZyBvbiB5b3VyIG1hY2hpbmUsIHNvbWV3aGF0IGhpZ2hlciBzcGVlZHMgY2FuIGJlIGFjaGlldmVkLgorCisJQWxsIGNvbW1lbnRzL2ZpeGVzIHRvIEJqb3JuIEVrd2FsbCAoYmowcm5AYmxveC5zZSkuCisKKworCTIuIExJQ0VOU0UuCisKKwlUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQKKwlhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisJTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisJdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisJVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZQorCXVzZWZ1bCwgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQKKwl3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisJUFVSUE9TRS4gU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZQorCWRldGFpbHMuCisKKwlZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKwlMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCisJU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BCisJMDIxMzksIFVTQS4KKworCisJMy4gRklMRVMgSU4gVEhJUyBSRUxFQVNFLgorCisJUkVBRE1FLkRMSU5LICBUaGlzIGZpbGUuCisJZGU2MDAuYyAgICAgICBUaGUgU291cmNlIChtYXkgaXQgYmUgd2l0aCBZb3UgOi0pIGZvciB0aGUgREUtNjAwCisJZGU2MjAuYyAgICAgICBkaXR0byBmb3IgdGhlIERFLTYyMAorCWRlNjIwLmggICAgICAgTWFjcm9zIGZvciBkZTYyMC5jCisKKwlJZiB5b3UgYXJlIHVwZ3JhZGluZyBmcm9tIHRoZSBkLWxpbmsgdGFyIHJlbGVhc2UsIHRoZXJlIHdpbGwKKwlhbHNvIGJlIGEgImRsaW5rLXBhdGNoZXMiIGZpbGUgdGhhdCB3aWxsIHBhdGNoIExpbnV4IDEuMS4xODoKKwkJbGludXgvZHJpdmVycy9uZXQvTWFrZWZpbGUKKwkJbGludXgvZHJpdmVycy9uZXQvQ09ORklHCisJCWxpbnV4L2RyaXZlcnMvbmV0L01PRFVMRVMKKwkJbGludXgvZHJpdmVycy9uZXQvU3BhY2UuYworCQlsaW51eC9jb25maWcuaW4KKwlBcHBseSB0aGUgcGF0Y2ggYnk6CisJImNkIC91c3Ivc3JjOyBwYXRjaCAtcDAgPCBsaW51eC9kcml2ZXJzL25ldC9kbGluay1wYXRjaGVzIgorCVRoZSBvbGQgc291cmNlLCAibGludXgvZHJpdmVycy9uZXQvZF9saW5rLmMiLCBjYW4gYmUgcmVtb3ZlZC4KKworCisJNC4gSU5TVEFMTEFUSU9OLgorCisJbyBHZXQgdGhlIGxhdGVzdCBuZXQgYmluYXJpZXMsIGFjY29yZGluZyB0byBjdXJyZW50IG5ldC53aXNkb20uCisKKwlvIFJlYWQgdGhlIE5FVC0yIGFuZCBFdGhlcm5ldCBIT1dUT3MgYW5kIG1vZGlmeSB5b3VyIHNldHVwLgorCisJbyBJZiB5b3VyIHBhcmFsbGVsIHBvcnQgaGFzIGEgc3RyYW5nZSBhZGRyZXNzIG9yIGlycSwKKwkgIG1vZGlmeSAibGludXgvZHJpdmVycy9uZXQvQ09ORklHIiBhY2NvcmRpbmdseSwgb3IgYWRqdXN0CisJICB0aGUgcGFyYW1ldGVycyBpbiB0aGUgInR1bmluZyIgc2VjdGlvbiBpbiB0aGUgc291cmNlcy4KKworCUlmIHlvdSBhcmUgZ29pbmcgdG8gdXNlIHRoZSBkcml2ZXJzIGFzIGxvYWRhYmxlIG1vZHVsZXMsIGRvIF9ub3RfCisJZW5hYmxlIHRoZW0gd2hpbGUgZG9pbmcgIm1ha2UgY29uZmlnIiwgYnV0IGluc3RlYWQgbWFrZSBzdXJlIHRoYXQKKwl0aGUgZHJpdmVycyBhcmUgaW5jbHVkZWQgaW4gImxpbnV4L2RyaXZlcnMvbmV0L01PRFVMRVMiLgorCisJSWYgeW91IGFyZSBfbm90XyBnb2luZyB0byB1c2UgdGhlIGRyaXZlcihzKSBhcyBsb2FkYWJsZSBtb2R1bGVzLAorCWJ1dCBpbnN0ZWFkIGhhdmUgdGhlbSBpbmNsdWRlZCBpbiB0aGUga2VybmVsLCByZW1lbWJlciB0byBlbmFibGUKKwl0aGUgZHJpdmVycyB3aGlsZSBkb2luZyAibWFrZSBjb25maWciLgorCisJbyBUbyBpbmNsdWRlIG5ldHdvcmtpbmcgYW5kIERFNjAwL0RFNjIwIHN1cHBvcnQgaW4geW91ciBrZXJuZWw6CisJICAjIGNkIC9saW51eAorCSAgKGFzIG1vZHVsZXM6KQorCSAgIyAgbWFrZSBjb25maWcgKGFuc3dlciB5ZXMgb24gQ09ORklHX05FVCBhbmQgQ09ORklHX0lORVQpCisJICAoZWxzZSBpbmNsdWRlZCBpbiB0aGUga2VybmVsOikKKwkgICMgIG1ha2UgY29uZmlnIChhbnN3ZXIgeWVzIG9uIENPTkZJRyBfTkVULCBfSU5FVCBhbmQgX0RFNjAwIG9yIF9ERTYyMCkKKwkgICMgbWFrZSBjbGVhbgorCSAgIyBtYWtlIHpJbWFnZSAob3Igd2hhdGV2ZXIgbWFnaWMgeW91IHVzdWFsbHkgZG8pCisKKwlvIEkgdXNlIGxpbG8gdG8gYm9vdCBtdWx0aXBsZSBrZXJuZWxzLCBzbyB0aGF0IEkgYXQgbGVhc3QKKwkgIGNhbiBoYXZlIG9uZSB3b3JraW5nIGtlcm5lbCA6LSkuIElmIHlvdSBkbyB0b28sIGFwcGVuZAorCSAgdGhlc2UgbGluZXMgdG8gL2V0Yy9saWxvL2NvbmZpZzoKKworCQlpbWFnZSA9IC9saW51eC96SW1hZ2UKKwkJbGFiZWwgPSBuZXdsaW51eAorCQlyb290ID0gL2Rldi9oZGEyIChvciB3aGF0ZXZlciBZT1UgaGF2ZS4uLikKKworCSAgIyAvZXRjL2xpbG8vaW5zdGFsbAorCisJbyBEbyAic3luYyIgYW5kIHJlYm9vdCB0aGUgbmV3IGtlcm5lbCB3aXRoIGEgRC1MaW5rCisJICBERS02MDAvREUtNjIwIHBvY2tldCBhZGFwdGVyIGNvbm5lY3RlZC4KKworCW8gVGhlIGFkYXB0ZXIgY2FuIGJlIGNvbmZpZ3VyZWQgd2l0aCBpZmNvbmZpZyBldGg/CisJICB3aGVyZSB0aGUgYWN0dWFsIG51bWJlciBpcyBkZWNpZGVkIGJ5IHRoZSBrZXJuZWwKKwkgIHdoZW4gdGhlIGRyaXZlcnMgYXJlIGluaXRpYWxpemVkLgorCisKKwk1LiAiUFJPQkxFTVMiIEFORCBUVU5JTkcsCisKKwlvIElmIHlvdSBzZWUgZXJyb3IgbWVzc2FnZXMgZnJvbSB0aGUgZHJpdmVyLCBhbmQgaWYgdGhlIHRyYWZmaWMKKwkgIHN0b3BzIG9uIHRoZSBhZGFwdGVyLCB0cnkgdG8gZG8gImlmY29uZmlnIiBhbmQgInJvdXRlIiBvbmNlCisJICBtb3JlLCBqdXN0IGFzIGluICJyYy5pbmV0MSIuICBUaGlzIHNob3VsZCB0YWtlIGNhcmUgb2YgbW9zdAorCSAgcHJvYmxlbXMsIGluY2x1ZGluZyBlZmZlY3RzIGZyb20gcG93ZXIgbG9zcywgb3IgYWRhcHRlcnMgdGhhdAorCSAgYXJlbid0IGNvbm5lY3RlZCB0byB0aGUgcHJpbnRlciBwb3J0IGluIHNvbWUgd2F5IG9yIGFub3RoZXIuCisJICBZb3UgY2FuIHNvbWV3aGF0IGNoYW5nZSB0aGUgYmVoYXZpb3VyIGJ5IGVuYWJsaW5nL2Rpc2FibGluZworCSAgdGhlIG1hY3JvICBTSFVURE9XTl9XSEVOX0xPU1QgIGluIHRoZSAidHVuaW5nIiBzZWN0aW9uLgorCSAgRm9yIHRoZSBERS02MDAgdGhlcmUgaXMgYW5vdGhlciBtYWNybywgQ0hFQ0tfTE9TVF9ERTYwMCwKKwkgIHRoYXQgeW91IG1pZ2h0IHdhbnQgdG8gcmVhZCBhYm91dCBpbiB0aGUgInR1bmluZyIgc2VjdGlvbi4KKworCW8gU29tZSBtYWNoaW5lcyBoYXZlIHRyb3VibGUgaGFuZGxpbmcgdGhlIHBhcmFsbGVsIHBvcnQgYW5kCisJICB0aGUgYWRhcHRlciBhdCBoaWdoIHNwZWVkLiBJZiB5b3UgZXhwZXJpZW5jZSBwcm9ibGVtczoKKworCSAgREUtNjAwOgorCSAgLSBUaGUgYWRhcHRlciBpcyBub3QgcmVjb2duaXplZCBhdCBib290LCBpLmUuIGFuIEV0aGVybmV0CisJICAgIGFkZHJlc3Mgb2YgMDA6ODA6Yzg6Li4uIGlzIG5vdCBzaG93biwgdHJ5IHRvIGFkZCBhbm90aGVyCisJICAgICAgIjsgU0xPV19ET1dOX0lPIgorCSAgICBhdCBERTYwMF9TTE9XX0RPV04gaW4gdGhlICJ0dW5pbmciIHNlY3Rpb24uIEFzIGEgbGFzdCByZXNvcnQsCisJICAgIHVuY29tbWVudDogIiNkZWZpbmUgUkVBTExZX1NMT1dfSU8iIChzZWUgPGFzbS9pby5oPiBmb3IgaGludHMpLgorCisJICAtIFlvdSBleHBlcmllbmNlICJ0aW1lb3V0IiBtZXNzYWdlczogZmlyc3QgdHJ5IHRvIGFkZCBhbm90aGVyCisJICAgICAgIjsgU0xPV19ET1dOX0lPIgorCSAgICBhdCBERTYwMF9TTE9XX0RPV04gaW4gdGhlICJ0dW5pbmciIHNlY3Rpb24sIF90aGVuXyB0cnkgdG8KKwkgICAgaW5jcmVhc2UgdGhlIHZhbHVlIChvcmlnaW5hbCB2YWx1ZTogNSkgYXQKKwkgICAgImlmICh0aWNrc3NvZmFyIDwgNSkiIG5lYXIgbGluZSA0MjIuCisKKwkgIERFLTYyMDoKKwkgIC0gWW91ciBwYXJhbGxlbCBwb3J0IG1pZ2h0IGJlICJzbHVnZ2lzaCIuICBUbyBjYXRlciBmb3IKKwkgICAgdGhpcywgdGhlcmUgYXJlIHRoZSBtYWNyb3MgTE9XU1BFRUQgYW5kIFJFQURfREVMQVkvV1JJVEVfREVMQVkKKwkgICAgaW4gdGhlICJ0dW5pbmciIHNlY3Rpb24uIFlvdXIgZmlyc3Qgc3RlcCBzaG91bGQgYmUgdG8gZW5hYmxlCisJICAgIExPV1NQRUVELCBhbmQgYWZ0ZXIgdGhhdCB5b3UgY2FuICJ0dW5lIiB0aGUgWFhYX0RFTEFZIHZhbHVlcy4KKworCW8gSWYgdGhlIGFkYXB0ZXIgX2lzXyByZWNvZ25pemVkIGF0IGJvb3QgYnV0IHlvdSBnZXQgbWVzc2FnZXMKKwkgIGFib3V0ICJOZXR3b3JrIFVucmVhY2hhYmxlIiwgdGhlbiB0aGUgcHJvYmxlbSBpcyBwcm9iYWJseQorCSAgX25vdF8gd2l0aCB0aGUgZHJpdmVyLiAgQ2hlY2sgeW91ciBuZXQgY29uZmlndXJhdGlvbiBpbnN0ZWFkCisJICAoaWZjb25maWcgYW5kIHJvdXRlKSBpbiAicmMuaW5ldDEiLgorCisJbyBUaGVyZSBpcyBzb21lIHJ1ZGltZW50YXJ5IHN1cHBvcnQgZm9yIGRlYnVnZ2luZywgbG9vayBhdAorCSAgdGhlIHNvdXJjZS4gVXNlICItRERFNjAwX0RFQlVHPTMiIG9yICItRERFNjIwX0RFQlVHPTMiCisJICB3aGVuIGNvbXBpbGluZywgb3IgaW5jbHVkZSBpdCBpbiAibGludXgvZHJpdmVycy9uZXQvQ09ORklHIi4KKwkgIElGIFlPVSBIQVZFIFBST0JMRU1TIFlPVSBDQU4nVCBTT0xWRTogUExFQVNFIENPTVBJTEUgVEhFIERSSVZFUgorCSAgV0lUSCBERUJVR0dJTkcgRU5BQkxFRCwgQU5EIFNFTkQgTUUgVEhFIFJFU1VMVElORyBPVVRQVVQhCisKKworCTYuIFVTSU5HIFRIRSBEUklWRVJTIFdJVEggRUFSTElFUiBSRUxFQVNFUy4KKworCVRoZSBsYXRlciAxLjEuWCByZWxlYXNlcyBvZiB0aGUgTGludXgga2VybmVsIGluY2x1ZGUgc29tZQorCWNoYW5nZXMgaW4gdGhlIG5ldHdvcmtpbmcgbGF5ZXIgKGEuay5hLiBORVQzKS4gVGhpcyBhZmZlY3RzCisJdGhlc2UgZHJpdmVycyBpbiBhIGZldyBwbGFjZXMuICBUaGUgaGludHMgdGhhdCBmb2xsb3cgYXJlCisJX25vdF8gdGVzdGVkIGJ5IG1lLCBzaW5jZSBJIGRvbid0IGhhdmUgdGhlIGRpc2sgc3BhY2UgdG8ga2VlcAorCWFsbCByZWxlYXNlcyBvbi1saW5lLgorCUtub3duIG5lZWRlZCBjaGFuZ2VzIHRvIGRhdGU6CisJLSByZWxlYXNlIHBhdGNoZmlsZTogc29tZSBwYXRjaGVzIHdpbGwgZmFpbCwgYnV0IHRoZXkgc2hvdWxkCisJICBiZSBlYXN5IHRvIGFwcGx5ICJieSBoYW5kIiwgc2luY2UgdGhleSBhcmUgdHJpdmlhbC4KKwkgIChTcGFjZS5jOiBkX2xpbmtfaW5pdCgpIGlzIG5vdyBjYWxsZWQgZGU2MDBfcHJvYmUoKSkKKwktIGRlNjAwLmM6IGNoYW5nZSAgIm1hcmtfYmgoTkVUX0JIKSIgdG8gICJtYXJrX2JoKElORVRfQkgpIi4KKwktIGRlNjIwLmM6IChtYXliZSkgY2hhbmdlIHRoZSBjb2RlIGFyb3VuZCAibmV0aWZfcngoc2tiKTsiIHRvIGJlCisJCSAgIHNpbWlsYXIgdG8gdGhlIGNvZGUgYXJvdW5kICJkZXZfcmludCguLi4pIiBpbiBkZTYwMC5jCisKKworCTcuIEFDS05PV0xFREdNRU5UUy4KKworCVRoZXNlIGRyaXZlcnMgd291bGRuJ3QgaGF2ZSBiZWVuIGRvbmUgd2l0aG91dCB0aGUgYmFzZQorCShhbmQgc3VwcG9ydCkgZnJvbSBSb3NzIEJpcm8gPGJpcjdAbGVsYW5kLnN0YW5mb3JkLmVkdT4sCisJYW5kIEQtTGluayBTeXN0ZW1zIEluYy4gIFRoZSBkcml2ZXIgcmVsaWVzIHVwb24gR1BMLWVkCisJc291cmNlIGZyb20gRC1MaW5rIFN5c3RlbXMgSW5jLiBhbmQgZnJvbSBSdXNzZWwgTmVsc29uIGF0CisJQ3J5bndyIFNvZnR3YXJlIDxuZWxzb25AY3J5bndyLmNvbT4uCisKKwlBZGRpdGlvbmFsIGlucHV0IGFsc28gZnJvbToKKwlEb25hbGQgQmVja2VyIDxiZWNrZXJAc3VwZXIub3JnPiwgQWxhbiBDb3ggPEEuQ294QHN3YW5zZWEuYWMudWs+CisJYW5kIEZyZWQgTi4gdmFuIEtlbXBlbiA8d2FsdGplQHVXYWx0Lk5MLk11Z25ldC5PUkc+CisKKwlERS02MDAgYWxwaGEgcmVsZWFzZSBwcmltYXJ5IHZpY3RpbV5IXkheSF5IXkheSHRlc3RlcjoKKwktIEVyaWsgUHJvcGVyIDxlcmlrcEBjcy5rdW4ubmw+LgorCUdvb2QgaW5wdXQgYWxzbyBmcm9tIHNldmVyYWwgdXNlcnMsIG1vc3Qgbm90YWJseQorCS0gTWFyayBCdXJ0b24gPG1hcmtiQG9yZGVybi5kZW1vbi5jby51az4uCisKKwlERS02MjAgYWxwaGEgcmVsZWFzZSB2aWN0aW1zXkheSF5IXkheSF5IXkh0ZXN0ZXJzOgorCS0gSi4gSm9zaHVhIEtvcHBlciA8a29wcGVyQHJ0c2cubW90LmNvbT4KKwktIE9sYXYgS3ZpdHRlbSA8T2xhdi5Ldml0dGVtQHVuaW5ldHQubm8+CisJLSBHZXJtYW5vIENhcm9ubmkgPGNhcm9ubmlAbmVzc2llLmNzLmlkLmV0aHouY2g+CisJLSBKZXJlbXkgRml0emhhcmRpbmdlIDxqZXJlbXlAc3VpdGUuc3cub3ouYXU+CisKKworCUhhcHB5IGhhY2tpbmchCisKKwlCam9ybiBFa3dhbGwgPT0gYmowcm5AYmxveC5zZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL05BUElfSE9XVE8udHh0IGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL05BUElfSE9XVE8udHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU0Mzc2ZTgKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvTkFQSV9IT1dUTy50eHQKQEAgLTAsMCArMSw3NjYgQEAKK0hJU1RPUlk6CitGZWJydWFyeSAxNi8yMDAyIC0tIHJldmlzaW9uIDAuMi4xOgorQ09SIHR5cG8gY29ycmVjdGVkCitGZWJydWFyeSAxMC8yMDAyIC0tIHJldmlzaW9uIDAuMjoKK3NvbWUgc3BlbGwgY2hlY2tpbmcgOy0+CitKYW51YXJ5IDEyLzIwMDIgLS0gcmV2aXNpb24gMC4xCitUaGlzIGlzIHN0aWxsIHdvcmsgaW4gcHJvZ3Jlc3Mgc28gbWF5IGNoYW5nZS4KK1RvIGtlZXAgdXAgdG8gZGF0ZSBwbGVhc2Ugd2F0Y2ggdGhpcyBzcGFjZS4KKworSW50cm9kdWN0aW9uIHRvIE5BUEkKKz09PT09PT09PT09PT09PT09PT09CisKK05BUEkgaXMgYSBwcm92ZW4gKHd3dy5jeWJlcnVzLmNhL35oYWRpL3VzZW5peC1wYXBlci50Z3opIHRlY2huaXF1ZQordG8gaW1wcm92ZSBuZXR3b3JrIHBlcmZvcm1hbmNlIG9uIExpbnV4LiBGb3IgbW9yZSBkZXRhaWxzIHBsZWFzZQorcmVhZCB0aGF0IHBhcGVyLgorTkFQSSBwcm92aWRlcyBhICJpbmhlcmVudCBtaXRpZ2F0aW9uIiB3aGljaCBpcyBib3VuZCBieSBzeXN0ZW0gY2FwYWNpdHkKK2FzIGNhbiBiZSBzZWVuIGZyb20gdGhlIGZvbGxvd2luZyBkYXRhIGNvbGxlY3RlZCBieSBSb2JlcnQgb24gR2lnYWJpdCAKK2V0aGVybmV0IChlMTAwMCk6CisKKyBQc2l6ZSAgICBJcHBzICAgICAgIFRwdXQgICAgIFJ4aW50ICAgICBUeGludCAgICBEb25lICAgICBOZG9uZQorIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgNjAgICAgODkwMDAwICAgICA0MDkzNjIgICAgICAgIDE3ICAgICAyNzYyMiAgICAgICAgNyAgICAgNjgyMworICAxMjggICAgNzU4MTUwICAgICA0NjQzNjQgICAgICAgIDIxICAgICAgOTMwMSAgICAgICAxMCAgICAgNzczOAorICAyNTYgICAgNDQ1NjMyICAgICA3NzQ2NDYgICAgICAgIDQyICAgICAxNTUwNyAgICAgICAyMSAgICAxMjkwNgorICA1MTIgICAgMjMyNjY2ICAgICA5OTQ0NDUgICAgMjQxMjkyICAgICAxOTE0NyAgIDI0MTE5MiAgICAgMTA2MgorIDEwMjQgICAgMTE5MDYxICAgIDEwMDAwMDMgICAgODcyNTE5ICAgICAxOTI1OCAgIDg3MjUxMSAgICAgICAgMAorIDE0NDAgICAgIDg1MTkzICAgIDEwMDAwMDMgICAgOTQ2NTc2ICAgICAxOTUwNSAgIDk0NjU2OSAgICAgICAgMAorIAorCitMZWdlbmQ6CisiSXBwcyIgc3RhbmRzIGZvciBpbnB1dCBwYWNrZXRzIHBlciBzZWNvbmQuIAorIlRwdXQiID09IHBhY2tldHMgb3V0IG9mIHRvdGFsIDFNIHRoYXQgbWFkZSBpdCBvdXQuCisidHhpbnQiID09IHRyYW5zbWl0IGNvbXBsZXRpb24gaW50ZXJydXB0cyBzZWVuCisiRG9uZSIgPT0gVGhlIG51bWJlciBvZiB0aW1lcyB0aGF0IHRoZSBwb2xsKCkgbWFuYWdlZCB0byBwdWxsIGFsbAorcGFja2V0cyBvdXQgb2YgdGhlIHJ4IHJpbmcuIE5vdGUgZnJvbSB0aGlzIHRoYXQgdGhlIGxvd2VyIHRoZQorbG9hZCB0aGUgbW9yZSB3ZSBjb3VsZCBjbGVhbiB1cCB0aGUgcnhyaW5nCisiTmRvbmUiID09IGlzIHRoZSBjb252ZXJzZSBvZiAiRG9uZSIuIE5vdGUgYWdhaW4sIHRoYXQgdGhlIGhpZ2hlcgordGhlIGxvYWQgdGhlIG1vcmUgdGltZXMgd2UgY291bGRudCBjbGVhbiB1cCB0aGUgcnhyaW5nLgorCitPYnNlcnZlIHRoYXQ6Cit3aGVuIHRoZSBOSUMgcmVjZWl2ZXMgODkwS3BhY2tldHMvc2VjIG9ubHkgMTcgcnggaW50ZXJydXB0cyBhcmUgZ2VuZXJhdGVkLiAKK1RoZSBzeXN0ZW0gY2FudCBoYW5kbGUgdGhlIHByb2Nlc3NpbmcgYXQgMSBpbnRlcnJ1cHQvcGFja2V0IGF0IHRoYXQgbG9hZCBsZXZlbC4gCitBdCBsb3dlciByYXRlcyBvbiB0aGUgb3RoZXIgaGFuZCwgcnggaW50ZXJydXB0cyBnbyB1cCBhbmQgdGhlcmVmb3JlIHRoZQoraW50ZXJydXB0L3BhY2tldCByYXRpbyBnb2VzIHVwIChhcyBvYnNlcnZhYmxlIGZyb20gdGhhdCB0YWJsZSkuIFNvIHRoZXJlIGlzCitwb3NzaWJpbGl0eSB0aGF0IHVuZGVyIGxvdyBlbm91Z2ggaW5wdXQsIHlvdSBnZXQgb25lIHBvbGwgY2FsbCBmb3IgZWFjaAoraW5wdXQgcGFja2V0IGNhdXNlZCBieSBhIHNpbmdsZSBpbnRlcnJ1cHQgZWFjaCB0aW1lLiBBbmQgaWYgdGhlIHN5c3RlbSAKK2NhbnQgaGFuZGxlIGludGVycnVwdCBwZXIgcGFja2V0IHJhdGlvIG9mIDEsIHRoZW4gaXQgd2lsbCBqdXN0IGhhdmUgdG8gCitjaHVnIGFsb25nIC4uLi4KKworCiswKSBQcmVyZXF1aXNpdGVzOgorPT09PT09PT09PT09PT09PT09CitBIGRyaXZlciBNQVkgY29udGludWUgdXNpbmcgdGhlIG9sZCAyLjQgdGVjaG5pcXVlIGZvciBpbnRlcmZhY2luZwordG8gdGhlIG5ldHdvcmsgc3RhY2sgYW5kIG5vdCBiZW5lZml0IGZyb20gdGhlIE5BUEkgY2hhbmdlcy4KK05BUEkgYWRkaXRpb25zIHRvIHRoZSBrZXJuZWwgZG8gbm90IGJyZWFrIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkuCitOQVBJLCBob3dldmVyLCByZXF1aXJlcyB0aGUgZm9sbG93aW5nIGZlYXR1cmVzIHRvIGJlIGF2YWlsYWJsZToKKworQSkgRE1BIHJpbmcgb3IgZW5vdWdoIFJBTSB0byBzdG9yZSBwYWNrZXRzIGluIHNvZnR3YXJlIGRldmljZXMuCisKK0IpIEFiaWxpdHkgdG8gdHVybiBvZmYgaW50ZXJydXB0cyBvciBtYXliZSBldmVudHMgdGhhdCBzZW5kIHBhY2tldHMgdXAgCit0aGUgc3RhY2suCisKK05BUEkgcHJvY2Vzc2VzIHBhY2tldCBldmVudHMgaW4gd2hhdCBpcyBrbm93biBhcyBkZXYtPnBvbGwoKSBtZXRob2QuCitUeXBpY2FsbHksIG9ubHkgcGFja2V0IHJlY2VpdmUgZXZlbnRzIGFyZSBwcm9jZXNzZWQgaW4gZGV2LT5wb2xsKCkuIAorVGhlIHJlc3Qgb2YgdGhlIGV2ZW50cyBNQVkgYmUgcHJvY2Vzc2VkIGJ5IHRoZSByZWd1bGFyIGludGVycnVwdCBoYW5kbGVyIAordG8gcmVkdWNlIHByb2Nlc3NpbmcgbGF0ZW5jeSAoanVzdGlmaWVkIGFsc28gYmVjYXVzZSB0aGVyZSBhcmUgbm90IHRoYXQgCittYW55IG9mIHRoZW0pLgorTm90ZSwgaG93ZXZlciwgTkFQSSBkb2VzIG5vdCBlbmZvcmNlIHRoYXQgZGV2LT5wb2xsKCkgb25seSBwcm9jZXNzZXMgCityZWNlaXZlIGV2ZW50cy4gCitUZXN0cyB3aXRoIHRoZSB0dWxpcCBkcml2ZXIgaW5kaWNhdGVkIHNsaWdodGx5IGluY3JlYXNlZCBsYXRlbmN5IGlmCithbGwgb2YgdGhlIGludGVycnVwdCBoYW5kbGVyIGlzIG1vdmVkIHRvIGRldi0+cG9sbCgpLiBBbHNvIE1JSSBoYW5kbGluZworZ2V0cyBhIGxpdHRsZSB0cmlja2llci4KK1RoZSBleGFtcGxlIHVzZWQgaW4gdGhpcyBkb2N1bWVudCBpcyB0byBtb3ZlIHRoZSByZWNlaXZlIHByb2Nlc3Npbmcgb25seQordG8gZGV2LT5wb2xsKCk7IHRoaXMgaXMgc2hvd24gd2l0aCB0aGUgcGF0Y2ggZm9yIHRoZSB0dWxpcCBkcml2ZXIuCitGb3IgYW4gZXhhbXBsZSBvZiBjb2RlIHRoYXQgbW92ZXMgYWxsIHRoZSBpbnRlcnJ1cHQgZHJpdmVyIHRvIAorZGV2LT5wb2xsKCkgbG9vayBhdCB0aGUgcG9ydGVkIGUxMDAwIGNvZGUuCisKK1RoZXJlIGFyZSBjYXZlYXRzIHRoYXQgbWlnaHQgZm9yY2UgeW91IHRvIGdvIHdpdGggbW92aW5nIGV2ZXJ5dGhpbmcgdG8gCitkZXYtPnBvbGwoKS4gRGlmZmVyZW50IE5JQ3Mgd29yayBkaWZmZXJlbnRseSBkZXBlbmRpbmcgb24gdGhlaXIgc3RhdHVzL2V2ZW50IAorYWNrbm93bGVkZ2VtZW50IHNldHVwLiAKK1RoZXJlIGFyZSB0d28gdHlwZXMgb2YgZXZlbnQgcmVnaXN0ZXIgQUNLIG1lY2hhbmlzbXMuCisJSSkgIHdoYXQgaXMga25vd24gYXMgQ2xlYXItb24tcmVhZCAoQ09SKS4KKwl3aGVuIHlvdSByZWFkIHRoZSBzdGF0dXMvZXZlbnQgcmVnaXN0ZXIsIGl0IGNsZWFycyBldmVyeXRoaW5nIQorCVRoZSBuYXRzZW1pIGFuZCBzdW5ibWFjIE5JQ3MgYXJlIGtub3duIHRvIGRvIHRoaXMuCisJSW4gdGhpcyBjYXNlIHlvdXIgb25seSBjaG9pY2UgaXMgdG8gbW92ZSBhbGwgdG8gZGV2LT5wb2xsKCkKKworCUlJKSBDbGVhci1vbi13cml0ZSAoQ09XKQorCSBpKSB5b3UgY2xlYXIgdGhlIHN0YXR1cyBieSB3cml0aW5nIGEgMSBpbiB0aGUgYml0LWxvY2F0aW9uIHlvdSB3YW50LgorCQlUaGVzZSBhcmUgdGhlIG1ham9yaXR5IG9mIHRoZSBOSUNzIGFuZCB3b3JrIHRoZSBiZXN0IHdpdGggTkFQSS4KKwkJUHV0IG9ubHkgcmVjZWl2ZSBldmVudHMgaW4gZGV2LT5wb2xsKCk7IGxlYXZlIHRoZSByZXN0IGluCisJCXRoZSBvbGQgaW50ZXJydXB0IGhhbmRsZXIuCisJIGlpKSB3aGF0ZXZlciB5b3Ugd3JpdGUgaW4gdGhlIHN0YXR1cyByZWdpc3RlciBjbGVhcnMgZXZlcnkgdGhpbmcgOy0+CisJCUNhbnQgc2VlbSB0byBmaW5kIGFueSBzdXBwb3J0ZWQgYnkgTGludXggd2hpY2ggZG8gdGhpcy4gSWYKKwkJc29tZW9uZSBrbm93cyBzdWNoIGEgY2hpcCBlbWFpbCB1cyBwbGVhc2UuCisJCU1vdmUgYWxsIHRvIGRldi0+cG9sbCgpCisKK0MpIEFiaWxpdHkgdG8gZGV0ZWN0IG5ldyB3b3JrIGNvcnJlY3RseS4KK05BUEkgd29ya3MgYnkgc2h1dHRpbmcgZG93biBldmVudCBpbnRlcnJ1cHRzIHdoZW4gdGhlcmVzIHdvcmsgYW5kCit0dXJuaW5nIHRoZW0gb24gd2hlbiB0aGVyZXMgbm9uZS4gCitOZXcgcGFja2V0cyBtaWdodCBzaG93IHVwIGluIHRoZSBzbWFsbCB3aW5kb3cgd2hpbGUgaW50ZXJydXB0cyB3ZXJlIGJlaW5nIAorcmUtZW5hYmxlZCAocmVmZXIgdG8gYXBwZW5kaXggMikuICBBIHBhY2tldCBtaWdodCBzbmVhayBpbiBkdXJpbmcgdGhlIHBlcmlvZCAKK3dlIGFyZSBlbmFibGluZyBpbnRlcnJ1cHRzLiBXZSBvbmx5IGdldCB0byBrbm93IGFib3V0IHN1Y2ggYSBwYWNrZXQgd2hlbiB0aGUgCituZXh0IG5ldyBwYWNrZXQgYXJyaXZlcyBhbmQgZ2VuZXJhdGVzIGFuIGludGVycnVwdC4gCitFc3NlbnRpYWxseSwgdGhlcmUgaXMgYSBzbWFsbCB3aW5kb3cgb2Ygb3Bwb3J0dW5pdHkgZm9yIGEgcmFjZSBjb25kaXRpb24KK3doaWNoIGZvciBjbGFyaXR5IHdlJ2xsIHJlZmVyIHRvIGFzIHRoZSAicm90dGluZyBwYWNrZXQiLgorCitUaGlzIGlzIGEgdmVyeSBpbXBvcnRhbnQgdG9waWMgYW5kIGFwcGVuZGl4IDIgaXMgZGVkaWNhdGVkIGZvciBtb3JlIAorZGlzY3Vzc2lvbi4KKworTG9ja2luZyBydWxlcyBhbmQgZW52aXJvbm1lbnRhbCBndWFyYW50ZWVzCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworLUd1YXJhbnRlZTogT25seSBvbmUgQ1BVIGF0IGFueSB0aW1lIGNhbiBjYWxsIGRldi0+cG9sbCgpOyB0aGlzIGlzIGJlY2F1c2UKK29ubHkgb25lIENQVSBjYW4gcGljayB0aGUgaW5pdGlhbCBpbnRlcnJ1cHQgYW5kIGhlbmNlIHRoZSBpbml0aWFsCituZXRpZl9yeF9zY2hlZHVsZShkZXYpOworLSBUaGUgY29yZSBsYXllciBpbnZva2VzIGRldmljZXMgdG8gc2VuZCBwYWNrZXRzIGluIGEgcm91bmQgcm9iaW4gZm9ybWF0LgorVGhpcyBpbXBsaWVzIHJlY2VpdmUgaXMgdG90YWx5IGxvY2tsZXNzIGJlY2F1c2Ugb2YgdGhlIGd1YXJhbnRlZSBvbmx5IHRoYXQgCitvbmUgQ1BVIGlzIGV4ZWN1dGluZyBpdC4KKy0gIGNvbnRlbnRpb24gY2FuIG9ubHkgYmUgdGhlIHJlc3VsdCBvZiBzb21lIG90aGVyIENQVSBhY2Nlc3NpbmcgdGhlIHJ4CityaW5nLiBUaGlzIGhhcHBlbnMgb25seSBpbiBjbG9zZSgpIGFuZCBzdXNwZW5kKCkgKHdoZW4gdGhlc2UgbWV0aG9kcwordHJ5IHRvIGNsZWFuIHRoZSByeCByaW5nKTsgCisqKioqZ3VhcmFudGVlOiBkcml2ZXIgYXV0aG9ycyBuZWVkIG5vdCB3b3JyeSBhYm91dCB0aGlzOyBzeW5jaHJvbml6YXRpb24gCitpcyB0YWtlbiBjYXJlIGZvciB0aGVtIGJ5IHRoZSB0b3AgbmV0IGxheWVyLgorLWxvY2FsIGludGVycnVwdHMgYXJlIGVuYWJsZWQgKGlmIHlvdSBkb250IG1vdmUgYWxsIHRvIGRldi0+cG9sbCgpKS4gRm9yIAorZXhhbXBsZSBsaW5rL01JSSBhbmQgdHhjb21wbGV0ZSBjb250aW51ZSBmdW5jdGlvbmluZyBqdXN0IHNhbWUgb2xkIHdheS4gCitUaGlzIGltcHJvdmVzIHRoZSBsYXRlbmN5IG9mIHByb2Nlc3NpbmcgdGhlc2UgZXZlbnRzLiBJdCBpcyBhbHNvIGFzc3VtZWQgdGhhdCAKK3RoZSByZWNlaXZlIGludGVycnVwdCBpcyB0aGUgbGFyZ2VzdCBjYXVzZSBvZiBub2lzZS4gTm90ZSB0aGlzIG1pZ2h0IG5vdCAKK2Fsd2F5cyBiZSB0cnVlLiAKK1thY2NvcmRpbmcgdG8gTWFuZnJlZCBTcHJhdWwsIHRoZSB3aW5ib25kIGluc2lzdHMgb24gc2VuZGluZyBvbmUgCit0eG1pdGNvbXBsZXRlIGludGVycnVwdCBmb3IgZWFjaCBwYWNrZXQgKGFsdGhvdWdoIHRoaXMgY2FuIGJlIG1pdGlnYXRlZCldLgorRm9yIHRoZXNlIGJyb2tlbiBkcml2ZXJzLCBtb3ZlIGFsbCB0byBkZXYtPnBvbGwoKS4KKworRm9yIHRoZSByZXN0IG9mIHRoaXMgdGV4dCwgd2UnbGwgYXNzdW1lIHRoYXQgZGV2LT5wb2xsKCkgb25seQorcHJvY2Vzc2VzIHJlY2VpdmUgZXZlbnRzLgorCituZXcgbWV0aG9kcyBpbnRyb2R1Y2UgYnkgTkFQSQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworYSkgbmV0aWZfcnhfc2NoZWR1bGUoZGV2KQorQ2FsbGVkIGJ5IGFuIElSUSBoYW5kbGVyIHRvIHNjaGVkdWxlIGEgcG9sbCBmb3IgZGV2aWNlCisKK2IpIG5ldGlmX3J4X3NjaGVkdWxlX3ByZXAoZGV2KQorcHV0cyB0aGUgZGV2aWNlIGluIGEgc3RhdGUgd2hpY2ggYWxsb3dzIGZvciBpdCB0byBiZSBhZGRlZCB0byB0aGUKK0NQVSBwb2xsaW5nIGxpc3QgaWYgaXQgaXMgdXAgYW5kIHJ1bm5pbmcuIFlvdSBjYW4gbG9vayBhdCB0aGlzIGFzCit0aGUgZmlyc3QgaGFsZiBvZiAgbmV0aWZfcnhfc2NoZWR1bGUoZGV2KSBhYm92ZTsgdGhlIHNlY29uZCBoYWxmCitiZWluZyBjKSBiZWxvdy4KKworYykgX19uZXRpZl9yeF9zY2hlZHVsZShkZXYpCitBZGQgZGV2aWNlIHRvIHRoZSBwb2xsIGxpc3QgZm9yIHRoaXMgQ1BVOyBhc3N1bWluZyB0aGF0IF9wcmVwIGFib3ZlCitoYXMgYWxyZWFkeSBiZWVuIGNhbGxlZCBhbmQgcmV0dXJuZWQgMS4KKworZCkgbmV0aWZfcnhfcmVzY2hlZHVsZShkZXYsIHVuZG8pCitDYWxsZWQgdG8gcmVzY2hlZHVsZSBwb2xsaW5nIGZvciBkZXZpY2Ugc3BlY2lmaWNhbGx5IGZvciBzb21lCitkZWZpY2llbnQgaGFyZHdhcmUuIFJlYWQgQXBwZW5kaXggMiBmb3IgbW9yZSBkZXRhaWxzLgorCitlKSBuZXRpZl9yeF9jb21wbGV0ZShkZXYpCisKK1JlbW92ZSBpbnRlcmZhY2UgZnJvbSB0aGUgQ1BVIHBvbGwgbGlzdDogaXQgbXVzdCBiZSBpbiB0aGUgcG9sbCBsaXN0CitvbiBjdXJyZW50IGNwdS4gVGhpcyBwcmltaXRpdmUgaXMgY2FsbGVkIGJ5IGRldi0+cG9sbCgpLCB3aGVuCitpdCBjb21wbGV0ZXMgaXRzIHdvcmsuIFRoZSBkZXZpY2UgY2Fubm90IGJlIG91dCBvZiBwb2xsIGxpc3QgYXQgdGhpcworY2FsbCwgaWYgaXQgaXMgdGhlbiBjbGVhcmx5IGl0IGlzIGEgQlVHKCkuIFlvdSdsbCBrbm93IDstPgorCitBbGwgdGhlc2UgYWJvdmUgbmV0aG9kcyBhcmUgdXNlZCBiZWxvdy4gU28ga2VlcCByZWFkaW5nIGZvciBjbGFyaXR5LgorCitEZXZpY2UgZHJpdmVyIGNoYW5nZXMgdG8gYmUgbWFkZSB3aGVuIHBvcnRpbmcgTkFQSQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworQmVsb3cgd2UgZGVzY3JpYmUgd2hhdCBraW5kIG9mIGNoYW5nZXMgYXJlIHJlcXVpcmVkIGZvciBOQVBJIHRvIHdvcmsuCisKKzEpIGludHJvZHVjdGlvbiBvZiBkZXYtPnBvbGwoKSBtZXRob2QgCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK1RoaXMgaXMgdGhlIG1ldGhvZCB0aGF0IGlzIGludm9rZWQgYnkgdGhlIG5ldHdvcmsgY29yZSB3aGVuIGl0IHJlcXVlc3RzCitmb3IgbmV3IHBhY2tldHMgZnJvbSB0aGUgZHJpdmVyLiBBIGRyaXZlciBpcyBhbGxvd2VkIHRvIHNlbmQgdXB0bworZGV2LT5xdW90YSBwYWNrZXRzIGJ5IHRoZSBjdXJyZW50IENQVSBiZWZvcmUgeWllbGRpbmcgdG8gdGhlIG5ldHdvcmsKK3N1YnN5c3RlbSAoc28gb3RoZXIgZGV2aWNlcyBjYW4gYWxzbyBnZXQgb3Bwb3J0dW5pdHkgdG8gc2VuZCB0byB0aGUgc3RhY2spLgorCitkZXYtPnBvbGwoKSBwcm90b3R5cGUgbG9va3MgYXMgZm9sbG93czoKK2ludCBteV9wb2xsKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCAqYnVkZ2V0KQorCitidWRnZXQgaXMgdGhlIHJlbWFpbmluZyBudW1iZXIgb2YgcGFja2V0cyB0aGUgbmV0d29yayBzdWJzeXN0ZW0gb24gdGhlCitjdXJyZW50IENQVSBjYW4gc2VuZCB1cCB0aGUgc3RhY2sgYmVmb3JlIHlpZWxkaW5nIHRvIG90aGVyIHN5c3RlbSB0YXNrcy4KKypFYWNoIGRyaXZlciBpcyByZXNwb25zaWJsZSBmb3IgZGVjcmVtZW50aW5nIGJ1ZGdldCBieSB0aGUgdG90YWwgbnVtYmVyIG9mCitwYWNrZXRzIHNlbnQuCisJVG90YWwgbnVtYmVyIG9mIHBhY2tldHMgY2Fubm90IGV4Y2VlZCBkZXYtPnF1b3RhLgorCitkZXYtPnBvbGwoKSBtZXRob2QgaXMgaW52b2tlZCBieSB0aGUgdG9wIGxheWVyLCB0aGUgZHJpdmVyIGp1c3Qgc2VuZHMgaWYgaXQgCitjYW4gdG8gdGhlIHN0YWNrIHRoZSBwYWNrZXQgcXVhbnRpdHkgcmVxdWVzdGVkLgorCittb3JlIG9uIGRldi0+cG9sbCgpIGJlbG93IGFmdGVyIHRoZSBpbnRlcnJ1cHQgY2hhbmdlcyBhcmUgZXhwbGFpbmVkLgorCisyKSByZWdpc3RlcmluZyBkZXYtPnBvbGwoKSBtZXRob2QKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK2Rldi0+cG9sbCBzaG91bGQgYmUgc2V0IGluIHRoZSBkZXYtPnByb2JlKCkgbWV0aG9kLiAKK2UuZzoKK2Rldi0+b3BlbiA9IG15X29wZW47CisuCisuCisvKiB0d28gbmV3IGFkZGl0aW9ucyAqLworLyogZmlyc3QgcmVnaXN0ZXIgbXkgcG9sbCBtZXRob2QgKi8KK2Rldi0+cG9sbCA9IG15X3BvbGw7CisvKiBuZXh0IHJlZ2lzdGVyIG15IHdlaWdodC9xdWFudGE7IGNhbiBiZSBvdmVycmlkZGVuIGluIC9wcm9jICovCitkZXYtPndlaWdodCA9IDE2OworLgorLgorZGV2LT5zdG9wID0gbXlfY2xvc2U7CisKKworCiszKSBzY2hlZHVsaW5nIGRldi0+cG9sbCgpCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorVGhpcyBpbnZvbHZlcyBtb2RpZnlpbmcgdGhlIGludGVycnVwdCBoYW5kbGVyIGFuZCB0aGUgY29kZQorcGF0aCB3aGljaCB0YWtlcyB0aGUgcGFja2V0IG9mZiB0aGUgTklDIGFuZCBzZW5kcyB0aGVtIHRvIHRoZSAKK3N0YWNrLgorCitpdCdzIGltcG9ydGFudCBhdCB0aGlzIHBvaW50IHRvIGludHJvZHVjZSB0aGUgY2xhc3NpY2FsIEQgQmVja2VyIAoraW50ZXJydXB0IHByb2Nlc3NvcjoKKworLS0tLS0tLS0tLS0tLS0tLS0tCitzdGF0aWMgaXJxcmV0dXJuX3QKK25ldGRldmljZV9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2lkLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKworCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSAoc3RydWN0IG5ldF9kZXZpY2UgKilkZXZfaW5zdGFuY2U7CisJc3RydWN0IG15X3ByaXZhdGUgKnRwID0gKHN0cnVjdCBteV9wcml2YXRlICopZGV2LT5wcml2OworCisJaW50IHdvcmtfY291bnQgPSBteV93b3JrX2NvdW50OworICAgICAgICBzdGF0dXMgPSByZWFkX2ludGVycnVwdF9zdGF0dXNfcmVnKCk7CisgICAgICAgIGlmIChzdGF0dXMgPT0gMCkKKyAgICAgICAgICAgICAgICByZXR1cm4gSVJRX05PTkU7IC8qIFNoYXJlZCBJUlE6IG5vdCB1cyAqLworICAgICAgICBpZiAoc3RhdHVzID09IDB4ZmZmZikKKyAgICAgICAgICAgICAgICByZXR1cm4gSVJRX0hBTkRMRUQ7ICAgICAgLyogSG90IHVucGx1ZyAqLworICAgICAgICBpZiAoc3RhdHVzICYgZXJyb3IpCisJCWRvX3NvbWVfZXJyb3JfaGFuZGxpbmcoKQorICAgICAgICAKKwlkbyB7CisJCWFja25vd2xlZGdlX2ludHNfQVNBUCgpOworCisJCWlmIChzdGF0dXMgJiBsaW5rX2ludGVycnVwdCkgeworCQkJc3Bpbl9sb2NrKCZ0cC0+bGlua19sb2NrKTsKKwkJCWRvX3NvbWVfbGlua19zdGF0X3N0dWZmKCk7CisJCQlzcGluX2xvY2soJnRwLT5saW5rX2xvY2spOworCQl9CisJCQorCQlpZiAoc3RhdHVzICYgcnhfaW50ZXJydXB0KSB7CisJCQlyZWNlaXZlX3BhY2tldHMoZGV2KTsKKwkJfQorCisJCWlmIChzdGF0dXMgJiByeF9ub2J1ZnMpIHsKKwkJCW1ha2VfcnhfYnVmZnNfYXZhaWwoKTsKKwkJfQorCQkJCisJCWlmIChzdGF0dXMgJiB0eF9yZWxhdGVkKSB7CisJCQlzcGluX2xvY2soJnRwLT5sb2NrKTsKKwkJCXR4X3JpbmdfZnJlZShkZXYpOworCQkJaWYgKHR4X2RpZWQpCisJCQkJcmVzdGFydF90eCgpOworCQkJc3Bpbl91bmxvY2soJnRwLT5sb2NrKTsKKwkJfQorCisJCXN0YXR1cyA9IHJlYWRfaW50ZXJydXB0X3N0YXR1c19yZWcoKTsKKworCX0gd2hpbGUgKCEoc3RhdHVzICYgZXJyb3IpIHx8IG1vcmVfd29ya190b19iZV9kb25lKTsKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworV2Ugbm93IGNoYW5nZSB0aGlzIHRvIHdoYXQgaXMgc2hvd24gYmVsb3cgdG8gTkFQSS1lbmFibGUgaXQ6CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3N0YXRpYyBpcnFyZXR1cm5fdAorbmV0ZGV2aWNlX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaWQsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSAoc3RydWN0IG5ldF9kZXZpY2UgKilkZXZfaW5zdGFuY2U7CisJc3RydWN0IG15X3ByaXZhdGUgKnRwID0gKHN0cnVjdCBteV9wcml2YXRlICopZGV2LT5wcml2OworCisgICAgICAgIHN0YXR1cyA9IHJlYWRfaW50ZXJydXB0X3N0YXR1c19yZWcoKTsKKyAgICAgICAgaWYgKHN0YXR1cyA9PSAwKQorICAgICAgICAgICAgICAgIHJldHVybiBJUlFfTk9ORTsgICAgICAgICAvKiBTaGFyZWQgSVJROiBub3QgdXMgKi8KKyAgICAgICAgaWYgKHN0YXR1cyA9PSAweGZmZmYpCisgICAgICAgICAgICAgICAgcmV0dXJuIElSUV9IQU5ETEVEOyAgICAgICAgIC8qIEhvdCB1bnBsdWcgKi8KKyAgICAgICAgaWYgKHN0YXR1cyAmIGVycm9yKQorCQlkb19zb21lX2Vycm9yX2hhbmRsaW5nKCk7CisgICAgICAgIAorCWRvIHsKKy8qKioqKioqKioqKioqKioqKioqKioqKiogc3RhcnQgbm90ZSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCQkKKwkJYWNrbm93bGVkZ2VfaW50c19BU0FQKCk7ICAvLyBkb250IGFjayByeCBhbmQgcnhub2J1ZmYgaGVyZQorLyoqKioqKioqKioqKioqKioqKioqKioqKiBlbmQgbm90ZSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCQkKKworCQlpZiAoc3RhdHVzICYgbGlua19pbnRlcnJ1cHQpIHsKKwkJCXNwaW5fbG9jaygmdHAtPmxpbmtfbG9jayk7CisJCQlkb19zb21lX2xpbmtfc3RhdF9zdHVmZigpOworCQkJc3Bpbl91bmxvY2soJnRwLT5saW5rX2xvY2spOworCQl9CisvKioqKioqKioqKioqKioqKioqKioqKioqIHN0YXJ0IG5vdGUgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwkJCisJCWlmIChzdGF0dXMgJiByeF9pbnRlcnJ1cHQgfHwgKHN0YXR1cyAmIHJ4X25vYnVmZnMpKSB7CisJCQlpZiAobmV0aWZfcnhfc2NoZWR1bGVfcHJlcChkZXYpKSB7CisKKwkJCQkvKiBkaXNhYmxlIGludGVycnVwdHMgY2F1c2VkIAorCQkJICAgICAgICAgKglieSBhcnJpdmluZyBwYWNrZXRzICovCisJCQkJZGlzYWJsZV9yeF9hbmRfcnhub2J1ZmZfaW50cygpOworCQkJCS8qIHRlbGwgc3lzdGVtIHdlIGhhdmUgd29yayB0byBiZSBkb25lLiAqLworCQkJCV9fbmV0aWZfcnhfc2NoZWR1bGUoZGV2KTsKKwkJCX0gZWxzZSB7CisJCQkJcHJpbnRrKCJkcml2ZXIgYnVnISBpbnRlcnJ1cHQgd2hpbGUgaW4gcG9sbFxuIik7CisJCQkJLyogRklYIGJ5IGRpc2FibGluZyBpbnRlcnJ1cHRzICAqLworCQkJCWRpc2FibGVfcnhfYW5kX3J4bm9idWZmX2ludHMoKTsKKwkJCX0KKwkJfQorLyoqKioqKioqKioqKioqKioqKioqKioqKiBlbmQgbm90ZSBub3RlICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8JCQorCQkJCisJCWlmIChzdGF0dXMgJiB0eF9yZWxhdGVkKSB7CisJCQlzcGluX2xvY2soJnRwLT5sb2NrKTsKKwkJCXR4X3JpbmdfZnJlZShkZXYpOworCisJCQlpZiAodHhfZGllZCkKKwkJCQlyZXN0YXJ0X3R4KCk7CisJCQlzcGluX3VubG9jaygmdHAtPmxvY2spOworCQl9CisKKwkJc3RhdHVzID0gcmVhZF9pbnRlcnJ1cHRfc3RhdHVzX3JlZygpOworCisvKioqKioqKioqKioqKioqKioqKioqKioqIHN0YXJ0IG5vdGUgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwkJCisJfSB3aGlsZSAoIShzdGF0dXMgJiBlcnJvcikgfHwgbW9yZV93b3JrX3RvX2JlX2RvbmUoc3RhdHVzKSk7CisvKioqKioqKioqKioqKioqKioqKioqKioqIGVuZCBub3RlIG5vdGUgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwkJCisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworCitXZSBub3RlIHNldmVyYWwgdGhpbmdzIGZyb20gYWJvdmU6CisKK0kpIEFueSBpbnRlcnJ1cHQgc291cmNlIHdoaWNoIGlzIGNhdXNlZCBieSBhcnJpdmluZyBwYWNrZXRzIGlzIG5vdwordHVybmVkIG9mZiB3aGVuIGl0IG9jY3Vycy4gRGVwZW5kaW5nIG9uIHRoZSBoYXJkd2FyZSwgdGhlcmUgY291bGQgYmUKK3NldmVyYWwgcmVhc29ucyB0aGF0IGFycml2aW5nIHBhY2tldHMgd291bGQgY2F1c2UgaW50ZXJydXB0czsgdGhlc2UgYXJlIHRoZQoraW50ZXJydXB0IHNvdXJjZXMgd2Ugd2lzaCB0byBhdm9pZC4gVGhlIHR3byBjb21tb24gb25lcyBhcmUgYSkgYSBwYWNrZXQgCithcnJpdmluZyAocnhpbnQpIGIpIGEgcGFja2V0IGFycml2aW5nIGFuZCBmaW5kaW5nIG5vIERNQSBidWZmZXJzIGF2YWlsYWJsZQorKHJ4bm9idWZmKSAuCitUaGlzIG1lYW5zIGFsc28gYWNrbm93bGVkZ2VfaW50c19BU0FQKCkgd2lsbCBub3QgY2xlYXIgdGhlIHN0YXR1cworcmVnaXN0ZXIgZm9yIHRob3NlIHR3byBpdGVtcyBhYm92ZTsgY2xlYXJpbmcgaXMgZG9uZSBpbiB0aGUgcGxhY2Ugd2hlcmUgCitwcm9wZXIgd29yayBpcyBkb25lIHdpdGhpbiBOQVBJOyBhdCB0aGUgcG9sbCgpIGFuZCByZWZpbGxfcnhfcmluZygpIAorZGlzY3Vzc2VkIGZ1cnRoZXIgYmVsb3cuCituZXRpZl9yeF9zY2hlZHVsZV9wcmVwKCkgcmV0dXJucyAxIGlmIGRldmljZSBpcyBpbiBydW5uaW5nIHN0YXRlIGFuZAorZ2V0cyBzdWNjZXNzZnVsbHkgYWRkZWQgdG8gdGhlIGNvcmUgcG9sbCBsaXN0LiBJZiB3ZSBnZXQgYSB6ZXJvIHZhbHVlCit3ZSBjYW4gX2FsbW9zdF8gYXNzdW1lIGFyZSBhbHJlYWR5IGFkZGVkIHRvIHRoZSBsaXN0IChpbnN0ZWFkIG9mIG5vdCBydW5uaW5nLiAKK0xvZ2ljIGJhc2VkIG9uIHRoZSBmYWN0IHRoYXQgeW91IHNob3VsZG4ndCBnZXQgaW50ZXJydXB0IGlmIG5vdCBydW5uaW5nKQorV2UgcmVjdGlmeSB0aGlzIGJ5IGRpc2FibGluZyByeCBhbmQgcnhub2J1ZiBpbnRlcnJ1cHRzLgorCitJSSkgdGhhdCByZWNlaXZlX3BhY2tldHMoZGV2KSBhbmQgbWFrZV9yeF9idWZmc19hdmFpbCgpIG1heSBoYXZlIGRpc2FwcGVhcmVkLgorVGhlc2UgZnVuY3Rpb25hbGl0aWVzIGFyZSBzdGlsbCBhcm91bmQgYWN0dWFsbHkuLi4uLi4KKworaW5mYWN0LCByZWNlaXZlX3BhY2tldHMoZGV2KSBpcyB2ZXJ5IGNsb3NlIHRvIG15X3BvbGwoKSBhbmQgCittYWtlX3J4X2J1ZmZzX2F2YWlsKCkgaXMgaW52b2tlZCBmcm9tIG15X3BvbGwoKQorCis0KSBjb252ZXJ0aW5nIHJlY2VpdmVfcGFja2V0cygpIHRvIGRldi0+cG9sbCgpCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitXZSBuZWVkIHRvIGNvbnZlcnQgdGhlIGNsYXNzaWNhbCBEIEJlY2tlciByZWNlaXZlX3BhY2tldHMoZGV2KSB0byBteV9wb2xsKCkKKworRmlyc3QgdGhlIHR5cGljYWwgcmVjZWl2ZV9wYWNrZXRzKCkgYmVsb3c6CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy8qIHRoaXMgaXMgY2FsbGVkIGJ5IGludGVycnVwdCBoYW5kbGVyICovCitzdGF0aWMgdm9pZCByZWNlaXZlX3BhY2tldHMgKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisKKwlzdHJ1Y3QgbXlfcHJpdmF0ZSAqdHAgPSAoc3RydWN0IG15X3ByaXZhdGUgKilkZXYtPnByaXY7CisJcnhfcmluZyA9IHRwLT5yeF9yaW5nOworCWN1cl9yeCA9IHRwLT5jdXJfcng7CisJaW50IGVudHJ5ID0gY3VyX3J4ICUgUlhfUklOR19TSVpFOworCWludCByZWNlaXZlZCA9IDA7CisJaW50IHJ4X3dvcmtfbGltaXQgPSB0cC0+ZGlydHlfcnggKyBSWF9SSU5HX1NJWkUgLSB0cC0+Y3VyX3J4OworCisJd2hpbGUgKHJ4X3Jpbmdfbm90X2VtcHR5KSB7CisJCXUzMiByeF9zdGF0dXM7CisJCXVuc2lnbmVkIGludCByeF9zaXplOworCQl1bnNpZ25lZCBpbnQgcGt0X3NpemU7CisJCXN0cnVjdCBza19idWZmICpza2I7CisgICAgICAgICAgICAgICAgLyogcmVhZCBzaXplK3N0YXR1cyBvZiBuZXh0IGZyYW1lIGZyb20gRE1BIHJpbmcgYnVmZmVyICovCisJCS8qIHRoZSBudW1iZXIgMTYgYW5kIDQgYXJlIGp1c3QgZXhhbXBsZXMgKi8KKyAgICAgICAgICAgICAgICByeF9zdGF0dXMgPSBsZTMyX3RvX2NwdSAoKih1MzIgKikgKHJ4X3JpbmcgKyByaW5nX29mZnNldCkpOworICAgICAgICAgICAgICAgIHJ4X3NpemUgPSByeF9zdGF0dXMgPj4gMTY7CisgICAgICAgICAgICAgICAgcGt0X3NpemUgPSByeF9zaXplIC0gNDsKKworCQkvKiBwcm9jZXNzIGVycm9ycyAqLworICAgICAgICAgICAgICAgIGlmICgocnhfc2l6ZSA+IChNQVhfRVRIX0ZSQU1FX1NJWkUrNCkpIHx8CisgICAgICAgICAgICAgICAgICAgICghKHJ4X3N0YXR1cyAmIFJ4U3RhdHVzT0spKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgbmV0ZHJ2X3J4X2VyciAocnhfc3RhdHVzLCBkZXYsIHRwLCBpb2FkZHIpOworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGlmICgtLXJ4X3dvcmtfbGltaXQgPCAwKQorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisKKwkJLyogZ3JhYiBhIHNrYiAqLworICAgICAgICAgICAgICAgIHNrYiA9IGRldl9hbGxvY19za2IgKHBrdF9zaXplICsgMik7CisgICAgICAgICAgICAgICAgaWYgKHNrYikgeworCQkJLgorCQkJLgorCQkJbmV0aWZfcnggKHNrYik7CisJCQkuCisJCQkuCisgICAgICAgICAgICAgICAgfSBlbHNlIHsgIC8qIE9PTSAqLworCQkJLypzZWVtcyB2ZXJ5IGRyaXZlciBzcGVjaWZpYyAuLi4gc29tZSBqdXN0IHBhc3MKKwkJCXdoYXRldmVyIGlzIG9uIHRoZSByaW5nIGFscmVhZHkuICovCisgICAgICAgICAgICAgICAgfQorCisJCS8qIG1vdmUgdG8gdGhlIG5leHQgc2tiIG9uIHRoZSByaW5nICovCisJCWVudHJ5ID0gKCsrdHAtPmN1cl9yeCkgJSBSWF9SSU5HX1NJWkU7CisJCXJlY2VpdmVkKysgOworCisgICAgICAgIH0KKworCS8qIHN0b3JlIGN1cnJlbnQgcmluZyBwb2ludGVyIHN0YXRlICovCisgICAgICAgIHRwLT5jdXJfcnggPSBjdXJfcng7CisKKyAgICAgICAgLyogUmVmaWxsIHRoZSBSeCByaW5nIGJ1ZmZlcnMgaWYgdGhleSBhcmUgbmVlZGVkICovCisJcmVmaWxsX3J4X3JpbmcoKTsKKwkuCisJLgorCit9CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitXZSBjaGFuZ2UgaXQgdG8gYSBuZXcgb25lIGJlbG93OyBub3RlIHRoZSBhZGRpdGlvbmFsIHBhcmFtZXRlciBpbgordGhlIGNhbGwuCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworLyogdGhpcyBpcyBjYWxsZWQgYnkgdGhlIG5ldHdvcmsgY29yZSAqLworc3RhdGljIGludCBteV9wb2xsIChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgKmJ1ZGdldCkKK3sKKworCXN0cnVjdCBteV9wcml2YXRlICp0cCA9IChzdHJ1Y3QgbXlfcHJpdmF0ZSAqKWRldi0+cHJpdjsKKwlyeF9yaW5nID0gdHAtPnJ4X3Jpbmc7CisJY3VyX3J4ID0gdHAtPmN1cl9yeDsKKwlpbnQgZW50cnkgPSBjdXJfcnggJSBSWF9CVUZfTEVOOworCS8qIG1heGltdW0gcGFja2V0cyB0byBzZW5kIHRvIHRoZSBzdGFjayAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKiBub3RlIG5vdGUgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwkJCisJaW50IHJ4X3dvcmtfbGltaXQgPSBkZXYtPnF1b3RhOworCisvKioqKioqKioqKioqKioqKioqKioqKioqIGVuZCBub3RlIG5vdGUgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwkJCisgICAgZG8geyAgLy8gb3V0ZXIgYmVnaW5uaW5nIGxvb3Agc3RhcnRzIGhlcmUKKworCWNsZWFyX3J4X3N0YXR1c19yZWdpc3Rlcl9iaXQoKTsKKworCXdoaWxlIChyeF9yaW5nX25vdF9lbXB0eSkgeworCQl1MzIgcnhfc3RhdHVzOworCQl1bnNpZ25lZCBpbnQgcnhfc2l6ZTsKKwkJdW5zaWduZWQgaW50IHBrdF9zaXplOworCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOworICAgICAgICAgICAgICAgIC8qIHJlYWQgc2l6ZStzdGF0dXMgb2YgbmV4dCBmcmFtZSBmcm9tIERNQSByaW5nIGJ1ZmZlciAqLworCQkvKiB0aGUgbnVtYmVyIDE2IGFuZCA0IGFyZSBqdXN0IGV4YW1wbGVzICovCisgICAgICAgICAgICAgICAgcnhfc3RhdHVzID0gbGUzMl90b19jcHUgKCoodTMyICopIChyeF9yaW5nICsgcmluZ19vZmZzZXQpKTsKKyAgICAgICAgICAgICAgICByeF9zaXplID0gcnhfc3RhdHVzID4+IDE2OworICAgICAgICAgICAgICAgIHBrdF9zaXplID0gcnhfc2l6ZSAtIDQ7CisKKwkJLyogcHJvY2VzcyBlcnJvcnMgKi8KKyAgICAgICAgICAgICAgICBpZiAoKHJ4X3NpemUgPiAoTUFYX0VUSF9GUkFNRV9TSVpFKzQpKSB8fAorICAgICAgICAgICAgICAgICAgICAoIShyeF9zdGF0dXMgJiBSeFN0YXR1c09LKSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG5ldGRydl9yeF9lcnIgKHJ4X3N0YXR1cywgZGV2LCB0cCwgaW9hZGRyKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAxOworICAgICAgICAgICAgICAgIH0KKworLyoqKioqKioqKioqKioqKioqKioqKioqKiBub3RlIG5vdGUgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwkJCisgICAgICAgICAgICAgICAgaWYgKC0tcnhfd29ya19saW1pdCA8IDApIHsgLyogd2UgZ290IHBhY2tldHMsIGJ1dCBubyBxdW90YSAqLworCQkJLyogc3RvcmUgY3VycmVudCByaW5nIHBvaW50ZXIgc3RhdGUgKi8KKwkJCXRwLT5jdXJfcnggPSBjdXJfcng7CisKKwkJCS8qIFJlZmlsbCB0aGUgUnggcmluZyBidWZmZXJzIGlmIHRoZXkgYXJlIG5lZWRlZCAqLworCQkJcmVmaWxsX3J4X3JpbmcoZGV2KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gbm90X2RvbmU7CisJCX0KKy8qKioqKioqKioqKioqKioqKioqKioqICBlbmQgbm90ZSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCS8qIGdyYWIgYSBza2IgKi8KKyAgICAgICAgICAgICAgICBza2IgPSBkZXZfYWxsb2Nfc2tiIChwa3Rfc2l6ZSArIDIpOworICAgICAgICAgICAgICAgIGlmIChza2IpIHsKKwkJCS4KKwkJCS4KKy8qKioqKioqKioqKioqKioqKioqKioqKiogbm90ZSBub3RlICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8JCQorCQkJbmV0aWZfcmVjZWl2ZV9za2IgKHNrYik7CisvKioqKioqKioqKioqKioqKioqKioqKiAgZW5kIG5vdGUgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCS4KKwkJCS4KKyAgICAgICAgICAgICAgICB9IGVsc2UgeyAgLyogT09NICovCisJCQkvKnNlZW1zIHZlcnkgZHJpdmVyIHNwZWNpZmljIC4uLiBjb21tb24gaXMganVzdCBwYXNzCisJCQl3aGF0ZXZlciBpcyBvbiB0aGUgcmluZyBhbHJlYWR5LiAqLworICAgICAgICAgICAgICAgIH0KKworCQkvKiBtb3ZlIHRvIHRoZSBuZXh0IHNrYiBvbiB0aGUgcmluZyAqLworCQllbnRyeSA9ICgrK3RwLT5jdXJfcngpICUgUlhfUklOR19TSVpFOworCQlyZWNlaXZlZCsrIDsKKworICAgICAgICB9CisKKwkvKiBzdG9yZSBjdXJyZW50IHJpbmcgcG9pbnRlciBzdGF0ZSAqLworICAgICAgICB0cC0+Y3VyX3J4ID0gY3VyX3J4OworCisgICAgICAgIC8qIFJlZmlsbCB0aGUgUnggcmluZyBidWZmZXJzIGlmIHRoZXkgYXJlIG5lZWRlZCAqLworCXJlZmlsbF9yeF9yaW5nKGRldik7CisJCisJLyogbm8gcGFja2V0cyBvbiByaW5nOyBidXQgbmV3IG9uZXMgY2FuIGFycml2ZSBzaW5jZSB3ZSBsYXN0IAorCSAgIGNoZWNrZWQgICovCisJc3RhdHVzID0gcmVhZF9pbnRlcnJ1cHRfc3RhdHVzX3JlZygpOworCWlmIChyeCBzdGF0dXMgaXMgbm90IHNldCkgeworICAgICAgICAgICAgICAgICAgICAgICAgLyogSWYgc29tZXRoaW5nIGFycml2ZXMgaW4gdGhpcyBuYXJyb3cgd2luZG93LAorCQkJYW4gaW50ZXJydXB0IHdpbGwgYmUgZ2VuZXJhdGVkICovCisgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGRvbmU7CisJfQorCS8qIGRvbmUhIGF0IGxlYXN0IHRoYXRzIHdoYXQgaXQgbG9va3MgbGlrZSA7LT4KKwlpZiBuZXcgcGFja2V0cyBjYW1lIGluIGFmdGVyIG91ciBsYXN0IGNoZWNrIG9uIHN0YXR1cyBiaXRzCisJdGhleSdsbCBiZSBjYXVnaHQgYnkgdGhlIHdoaWxlIGNoZWNrIGFuZCB3ZSBnbyBiYWNrIGFuZCBjbGVhciB0aGVtIAorCXNpbmNlIHdlIGhhdmVudCBleGNlZWRlZCBvdXIgcXVvdGEgKi8KKyAgICB9IHdoaWxlIChyeF9zdGF0dXNfaXNfc2V0KTsgCisKK2RvbmU6CisKKy8qKioqKioqKioqKioqKioqKioqKioqKiogbm90ZSBub3RlICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8JCQorICAgICAgICBkZXYtPnF1b3RhIC09IHJlY2VpdmVkOworICAgICAgICAqYnVkZ2V0IC09IHJlY2VpdmVkOworCisgICAgICAgIC8qIElmIFJYIHJpbmcgaXMgbm90IGZ1bGwgd2UgYXJlIG91dCBvZiBtZW1vcnkuICovCisgICAgICAgIGlmICh0cC0+cnhfYnVmZmVyc1t0cC0+ZGlydHlfcnggJSBSWF9SSU5HX1NJWkVdLnNrYiA9PSBOVUxMKQorICAgICAgICAgICAgICAgIGdvdG8gb29tOworCisJLyogd2UgYXJlIGhhcHB5L2RvbmUsIG5vIG1vcmUgcGFja2V0cyBvbiByaW5nOyBwdXQgdXMgYmFjaworCXRvIHdoZXJlIHdlIGNhbiBzdGFydCBwcm9jZXNzaW5nIGludGVycnVwdHMgYWdhaW4gKi8KKyAgICAgICAgbmV0aWZfcnhfY29tcGxldGUoZGV2KTsKKwllbmFibGVfcnhfYW5kX3J4bm9idWZfaW50cygpOworCisgICAgICAgLyogVGhlIGxhc3Qgb3AgaGFwcGVucyBhZnRlciBwb2xsIGNvbXBsZXRpb24uIFdoaWNoIG1lYW5zIHRoZSBmb2xsb3dpbmc6CisgICAgICAgICogMS4gaXQgY2FuIHJhY2Ugd2l0aCBkaXNhYmxpbmcgaXJxcyBpbiBpcnEgaGFuZGxlciAod2hpY2ggYXJlIGRvbmUgdG8gCisJKiBzY2hlZHVsZSBwb2xscykKKyAgICAgICAgKiAyLiBpdCBjYW4gcmFjZSB3aXRoIGRpcy9lbmFibGluZyBpcnFzIGluIG90aGVyIHBvbGwgdGhyZWFkcworICAgICAgICAqIDMuIGlmIGFuIGlycSByYWlzZWQgYWZ0ZXIgdGhlIGJlZ2luaW5nIG9mIHRoZSBvdXRlciAgYmVnaW5uaW5nIAorICAgICAgICAqIGxvb3AobWFya2VkIGluIHRoZSBjb2RlIGFib3ZlKSwgaXQgd2lsbCBiZSBpbW1lZGlhdGVseQorICAgICAgICAqIHRyaWdnZXJlZCBoZXJlLgorICAgICAgICAqCisgICAgICAgICogU3VtbWFyaXppbmc6IHRoZSBsb2dpYyBtYXkgcmVzdWx0cyBpbiBzb21lIHJlZHVuZGFudCBpcnFzIGJvdGgKKyAgICAgICAgKiBkdWUgdG8gcmFjZXMgaW4gbWFza2luZyBhbmQgZHVlIHRvIHRvbyBsYXRlIGFja2luZyBvZiBhbHJlYWR5CisgICAgICAgICogcHJvY2Vzc2VkIGlycXMuIFRoZSBnb29kIG5ld3M6IG5vIGV2ZW50cyBhcmUgZXZlciBsb3N0LgorICAgICAgICAqLworCisgICAgICAgIHJldHVybiAwOyAgIC8qIGRvbmUgKi8KKworbm90X2RvbmU6CisgICAgICAgIGlmICh0cC0+Y3VyX3J4IC0gdHAtPmRpcnR5X3J4ID4gUlhfUklOR19TSVpFLzIgfHwKKyAgICAgICAgICAgIHRwLT5yeF9idWZmZXJzW3RwLT5kaXJ0eV9yeCAlIFJYX1JJTkdfU0laRV0uc2tiID09IE5VTEwpCisgICAgICAgICAgICAgICAgcmVmaWxsX3J4X3JpbmcoZGV2KTsKKworICAgICAgICBpZiAoIXJlY2VpdmVkKSB7CisgICAgICAgICAgICAgICAgcHJpbnRrKCJyZWNlaXZlZD09MFxuIik7CisgICAgICAgICAgICAgICAgcmVjZWl2ZWQgPSAxOworICAgICAgICB9CisgICAgICAgIGRldi0+cXVvdGEgLT0gcmVjZWl2ZWQ7CisgICAgICAgICpidWRnZXQgLT0gcmVjZWl2ZWQ7CisgICAgICAgIHJldHVybiAxOyAgLyogbm90X2RvbmUgKi8KKworb29tOgorICAgICAgICAvKiBTdGFydCB0aW1lciwgc3RvcCBwb2xsaW5nLCBidXQgZG8gbm90IGVuYWJsZSByeCBpbnRlcnJ1cHRzLiAqLworCXN0YXJ0X3BvbGxfdGltZXIoZGV2KTsKKyAgICAgICAgcmV0dXJuIDA7ICAvKiB3ZSdsbCB0YWtlIGl0IGZyb20gaGVyZSBzbyB0ZWxsIGNvcmUgImRvbmUiKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKiBFbmQgbm90ZSBub3RlICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8JCQorfQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitGcm9tIGFib3ZlIHdlIG5vdGUgdGhhdDoKKzApIHJ4X3dvcmtfbGltaXQgPSBkZXYtPnF1b3RhIAorMSkgcmVmaWxsX3J4X3JpbmcoKSBpcyBpbiBjaGFyZ2Ugb2YgY2xlYXJpbmcgdGhlIGJpdCBmb3Igcnhub2J1ZmYgd2hlbgoraXQgZG9lcyB0aGUgd29yay4KKzIpIFdlIGhhdmUgYSBkb25lIGFuZCBub3RfZG9uZSBzdGF0ZS4KKzMpIGluc3RlYWQgb2YgbmV0aWZfcngoKSB3ZSBjYWxsIG5ldGlmX3JlY2VpdmVfc2tiKCkgdG8gcGFzcyB0aGUgc2tiLgorNCkgd2UgaGF2ZSBhIG5ldyB3YXkgb2YgaGFuZGxpbmcgb29tIGNvbmRpdGlvbgorNSkgQSBuZXcgb3V0ZXIgZm9yICg7OykgbG9vcCBoYXMgYmVlbiBhZGRlZC4gVGhpcyBzZXJ2ZXMgdGhlIHB1cnBvc2Ugb2YKK2Vuc3VyaW5nIHRoYXQgaWYgYSBuZXcgcGFja2V0IGhhcyBjb21lIGluLCBhZnRlciB3ZSBhcmUgYWxsIHNldCBhbmQgZG9uZSwKK2FuZCB3ZSBoYXZlIG5vdCBleGNlZWRlZCBvdXIgcXVvdGEgdGhhdCB3ZSBjb250aW51ZSBzZW5kaW5nIHBhY2tldHMgdXAuCisgCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitQb2xsIHRpbWVyIGNvZGUgd2lsbCBuZWVkIHRvIGRvIHRoZSBmb2xsb3dpbmc6CisKK2EpIAorCisgICAgICAgIGlmICh0cC0+Y3VyX3J4IC0gdHAtPmRpcnR5X3J4ID4gUlhfUklOR19TSVpFLzIgfHwKKyAgICAgICAgICAgIHRwLT5yeF9idWZmZXJzW3RwLT5kaXJ0eV9yeCAlIFJYX1JJTkdfU0laRV0uc2tiID09IE5VTEwpIAorICAgICAgICAgICAgICAgIHJlZmlsbF9yeF9yaW5nKGRldik7CisKKyAgICAgICAgLyogSWYgUlggcmluZyBpcyBub3QgZnVsbCB3ZSBhcmUgc3RpbGwgb3V0IG9mIG1lbW9yeS4KKwkgICBSZXN0YXJ0IHRoZSB0aW1lciBhZ2Fpbi4gRWxzZSB3ZSByZS1hZGQgb3Vyc2VsdmVzIAorICAgICAgICAgICB0byB0aGUgbWFzdGVyIHBvbGwgbGlzdC4KKyAgICAgICAgICovCisKKyAgICAgICAgaWYgKHRwLT5yeF9idWZmZXJzW3RwLT5kaXJ0eV9yeCAlIFJYX1JJTkdfU0laRV0uc2tiID09IE5VTEwpCisgICAgICAgICAgICAgICAgcmVzdGFydF90aW1lcigpOworCisJZWxzZSBuZXRpZl9yeF9zY2hlZHVsZShkZXYpOyAgLyogd2UgYXJlIGJhY2sgb24gdGhlIHBvbGwgbGlzdCAqLworCQorNSkgZGV2LT5jbG9zZSgpIGFuZCBkZXYtPnN1c3BlbmQoKSBpc3N1ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorVGhlIGRyaXZlciB3cml0dGVyIG5lZWRudCB3b3JyeSBhYm91dCB0aGlzLiBUaGUgdG9wIG5ldCBsYXllciB0YWtlcworY2FyZSBvZiBpdC4KKworNikgQWRkaW5nIG5ldyBTdGF0cyB0byAvcHJvYyAKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitJbiBvcmRlciB0byBkZWJ1ZyBzb21lIG9mIHRoZSBuZXcgZmVhdHVyZXMsIHdlIGludHJvZHVjZSBuZXcgc3RhdHMKK3RoYXQgbmVlZCB0byBiZSBjb2xsZWN0ZWQuCitUT0RPOiBGaWxsIHRoaXMgbGF0ZXIuCisKK0FQUEVORElYIDE6IGRpc2N1c3Npb24gb24gdXNpbmcgZXRoZXJuZXQgSFcgRkMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK01vc3QgY2hpcHMgd2l0aCBGQyBvbmx5IHNlbmQgYSBwYXVzZSBwYWNrZXQgd2hlbiB0aGV5IHJ1biBvdXQgb2YgUnggYnVmZmVycy4KK1NpbmNlIHBhY2tldHMgYXJlIHB1bGxlZCBvZmYgdGhlIERNQSByaW5nIGJ5IGEgc29mdGlycSBpbiBOQVBJLAoraWYgdGhlIHN5c3RlbSBpcyBzbG93IGluIGdyYWJiaW5nIHRoZW0gYW5kIHdlIGhhdmUgYSBoaWdoIGlucHV0CityYXRlIChmYXN0ZXIgdGhhbiB0aGUgc3lzdGVtJ3MgY2FwYWNpdHkgdG8gcmVtb3ZlIHBhY2tldHMpLCB0aGVuIHRoZW9yZXRpY2FsbHkKK3RoZXJlIHdpbGwgb25seSBiZSBvbmUgcnggaW50ZXJydXB0IGZvciBhbGwgcGFja2V0cyBkdXJpbmcgYSBnaXZlbiBwYWNrZXRzdG9ybS4KK1VuZGVyIGxvdyBsb2FkLCB3ZSBtaWdodCBoYXZlIGEgc2luZ2xlIGludGVycnVwdCBwZXIgcGFja2V0LgorRkMgc2hvdWxkIGJlIHByb2dyYW1tZWQgdG8gYXBwbHkgaW4gdGhlIGNhc2Ugd2hlbiB0aGUgc3lzdGVtIGNhbnQgcHVsbCBvdXQKK3BhY2tldHMgZmFzdCBlbm91Z2ggaS5lIHNlbmQgYSBwYXVzZSBvbmx5IHdoZW4geW91IHJ1biBvdXQgb2YgcnggYnVmZmVycy4KK05vdGUgRkMgaW4gaXRzZWxmIGlzIGEgZ29vZCBzb2x1dGlvbiBidXQgd2UgaGF2ZSBmb3VuZCBpdCB0byBub3QgYmUKK211Y2ggb2YgYSBjb21tb2RpdHkgZmVhdHVyZSAoYm90aCBpbiBOSUNzIGFuZCBzd2l0Y2hlcykgYW5kIGhlbmNlIGZhbGxzCit1bmRlciB0aGUgc2FtZSBjYXRlZ29yeSBhcyB1c2luZyBOSUMgYmFzZWQgbWl0aWdhdGlvbi4gQWxzbyBleHBlcmltZW50cworaW5kaWNhdGUgdGhhdCBpdHMgbXVjaCBoYXJkZXIgdG8gcmVzb2x2ZSB0aGUgcmVzb3VyY2UgYWxsb2NhdGlvbgoraXNzdWUgKGFrYSBsYXp5IHJlY2VpdmluZyB0aGF0IE5BUEkgb2ZmZXJzKSBhbmQgaGVuY2UgcXVhbnRpZnkgaXRzIHVzZWZ1bGxuZXNzCitwcm92ZWQgaGFyZGVyLiBJbiBhbnkgY2FzZSwgRkMgd29ya3MgZXZlbiBiZXR0ZXIgd2l0aCBOQVBJIGJ1dCBpcyBub3QKK25lY2Vzc2FyeS4KKworCitBUFBFTkRJWCAyOiB0aGUgInJvdHRpbmcgcGFja2V0IiByYWNlLXdpbmRvdyBhdm9pZGFuY2Ugc2NoZW1lIAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitUaGVyZSBhcmUgdHdvIHR5cGVzIG9mIGFzc29jaWF0aW9ucyBzZWVuIGhlcmUKKworMSkgc3RhdHVzL2ludCB3aGljaCBob25vcnMgbGV2ZWwgdHJpZ2dlcmVkIElSUQorCitJZiBhIHN0YXR1cyBiaXQgZm9yIHJlY2VpdmUgb3Igcnhub2J1ZmYgaXMgc2V0IGFuZCB0aGUgY29ycmVzcG9uZGluZyAKK2ludGVycnVwdC1lbmFibGUgYml0IGlzIG5vdCBvbiwgdGhlbiBubyBpbnRlcnJ1cHRzIHdpbGwgYmUgZ2VuZXJhdGVkLiBIb3dldmVyLCAKK2FzIHNvb24gYXMgdGhlICJpbnRlcnJ1cHQtZW5hYmxlIiBiaXQgaXMgdW5tYXNrZWQsIGFuIGltbWVkaWF0ZSBpbnRlcnJ1cHQgaXMgCitnZW5lcmF0ZWQuICBbYXNzdW1pbmcgdGhlIHN0YXR1cyBiaXQgd2FzIG5vdCB0dXJuZWQgb2ZmXS4KK0dlbmVyYWxseSB0aGUgY29uY2VwdCBvZiBsZXZlbCB0cmlnZ2VyZWQgSVJRcyBpbiBhc3NvY2lhdGlvbiB3aXRoIGEgc3RhdHVzIGFuZAoraW50ZXJydXB0LWVuYWJsZSBDU1IgcmVnaXN0ZXIgc2V0IGlzIHVzZWQgdG8gYXZvaWQgdGhlIHJhY2UuCisKK0lmIHdlIHRha2UgdGhlIGV4YW1wbGUgb2YgdGhlIHR1bGlwOgorInBlbmRpbmcgd29yayIgaXMgaW5kaWNhdGVkIGJ5IHRoZSBzdGF0dXMgYml0KENTUjUgaW4gdHVsaXApLgordGhlIGNvcnJlc3BvbmRpbmcgaW50ZXJydXB0IGJpdCAoQ1NSNyBpbiB0dWxpcCkgbWlnaHQgYmUgdHVybmVkIG9mZiAoYnV0Cit0aGUgQ1NSNSB3aWxsIGNvbnRpbnVlIHRvIGJlIHR1cm5lZCBvbiB3aXRoIG5ldyBwYWNrZXQgYXJyaXZhbHMgZXZlbiBpZgord2UgY2xlYXIgaXQgdGhlIGZpcnN0IHRpbWUpCitWZXJ5IGltcG9ydGFudCBpcyB0aGUgZmFjdCB0aGF0IGlmIHdlIHR1cm4gb24gdGhlIGludGVycnVwdCBiaXQgb24gd2hlbgorc3RhdHVzIGlzIHNldCB0aGF0IGFuIGltbWVkaWF0ZSBpcnEgaXMgdHJpZ2dlcmVkLgorIAorSWYgd2UgY2xlYXJlZCB0aGUgcnggcmluZyBhbmQgcHJvY2xhaW1lZCB0aGVyZSB3YXMgIm5vIG1vcmUgd29yawordG8gYmUgZG9uZSIgYW5kIHRoZW4gd2VudCBvbiB0byBkbyBhIGZldyBvdGhlciB0aGluZ3M7ICB0aGVuIHdoZW4gd2UgZW5hYmxlCitpbnRlcnJ1cHRzLCB0aGVyZSBpcyBhIHBvc3NpYmlsaXR5IHRoYXQgYSBuZXcgcGFja2V0IG1pZ2h0IHNuZWFrIGluIGR1cmluZwordGhpcyBwaGFzZS4gSXQgaGVscHMgdG8gbG9vayBhdCB0aGUgcHNldWRvIGNvZGUgZm9yIHRoZSB0dWxpcCBwb2xsCityb3V0aW5lOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICBkbyB7CisgICAgICAgICAgICAgICAgQUNLOworICAgICAgICAgICAgICAgIHdoaWxlIChyaW5nX2lzX25vdF9lbXB0eSgpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICB3b3JrLXdvcmstd29yaworICAgICAgICAgICAgICAgICAgICAgICAgaWYgcXVvdGEgaXMgZXhjZWVkZWQ6IGV4aXQsIG5vIHRvdWNoaW5nIGlycSBzdGF0dXMvbWFzaworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAvKiBObyBwYWNrZXRzLCBidXQgbmV3IGNhbiBhcnJpdmUgd2hpbGUgd2UgYXJlIGRvaW5nIHRoaXMqLworICAgICAgICAgICAgICAgIENTUjUgOj0gcmVhZAorICAgICAgICAgICAgICAgIGlmIChDU1I1IGlzIG5vdCBzZXQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8qIElmIHNvbWV0aGluZyBhcnJpdmVzIGluIHRoaXMgbmFycm93IHdpbmRvdyBoZXJlLAorICAgICAgICAgICAgICAgICAgICAgICAgKiAgd2hlcmUgdGhlIGNvbW1lbnRzIGFyZSA7LT4gaXJxIHdpbGwgYmUgZ2VuZXJhdGVkICovCisgICAgICAgICAgICAgICAgICAgICAgICB1bm1hc2sgaXJxczsKKyAgICAgICAgICAgICAgICAgICAgICAgIGV4aXQgcG9sbDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgIH0gd2hpbGUgKHJ4X3N0YXR1c19pc19zZXQpOworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0NTUjUgYml0IG9mIGludGVyZXN0IGlzIG9ubHkgdGhlIHJ4IHN0YXR1cy4gCitJZiB5b3UgbG9vayBhdCB0aGUgbGFzdCBpZiBzdGF0ZW1lbnQ6IAoreW91IGp1c3QgZmluaXNoZWQgZ3JhYmJpbmcgYWxsIHRoZSBwYWNrZXRzIGZyb20gdGhlIHJ4IHJpbmcgLi4geW91IGNoZWNrIGlmCitzdGF0dXMgYml0IHNheXMgdGhlcmVzIG1vcmUgcGFja2V0cyBqdXN0IGluIC4uLiBpdCBzYXlzIG5vbmU7IHlvdSB0aGVuCitlbmFibGUgcnggaW50ZXJydXB0cyBhZ2FpbjsgaWYgYSBuZXcgcGFja2V0IGp1c3QgY2FtZSBpbiBkdXJpbmcgdGhpcyBjaGVjaywKK3dlIGFyZSBjb3VudGluZyB0aGF0IENTUjUgd2lsbCBiZSBzZXQgaW4gdGhhdCBzbWFsbCB3aW5kb3cgb2Ygb3Bwb3J0dW5pdHkKK2FuZCB0aGF0IGJ5IHJlLWVuYWJsaW5nIGludGVycnVwdHMsIHdlIHdvdWxkIGFjdHVhbGx5IHRyaWdlciBhbiBpbnRlcnJ1cHQKK3RvIHJlZ2lzdGVyIHRoZSBuZXcgcGFja2V0IGZvciBwcm9jZXNzaW5nLgorCitbVGhlIGFib3ZlIGRlc2NyaXB0aW9uIG5heSBiZSB2ZXJ5IHZlcmJvc2UsIGlmIHlvdSBoYXZlIGJldHRlciB3b3JkaW5nIAordGhhdCB3aWxsIG1ha2UgdGhpcyBtb3JlIHVuZGVyc3RhbmRhYmxlLCBwbGVhc2Ugc3VnZ2VzdCBpdC5dCisKKzIpIG5vbi1jYXBhYmxlIGhhcmR3YXJlCisKK1RoZXNlIGRvIG5vdCBnZW5lcmFsbHkgcmVzcGVjdCBsZXZlbCB0cmlnZ2VyZWQgSVJRcy4gTm9ybWFsbHksCitpcnFzIG1heSBiZSBsb3N0IHdoaWxlIGJlaW5nIG1hc2tlZCBhbmQgdGhlIG9ubHkgd2F5IHRvIGxlYXZlIHBvbGwgaXMgdG8gZG8KK2EgZG91YmxlIGNoZWNrIGZvciBuZXcgaW5wdXQgYWZ0ZXIgbmV0aWZfcnhfY29tcGxldGUoKSBpcyBpbnZva2VkCithbmQgcmUtZW5hYmxlIHBvbGxpbmcgKGFmdGVyIHNlZWluZyB0aGlzIG5ldyBpbnB1dCkuCisKK1NhbXBsZSBjb2RlOgorCistLS0tLS0tLS0KKwkuCisJLgorcmVzdGFydF9wb2xsOgorCXdoaWxlIChyaW5nX2lzX25vdF9lbXB0eSgpKSB7CisJCXdvcmstd29yay13b3JrCisJCWlmIHF1b3RhIGlzIGV4Y2VlZGVkOiBleGl0LCBub3QgdG91Y2hpbmcgaXJxIHN0YXR1cy9tYXNrCisJfQorCS4KKwkuCisJLgorCWVuYWJsZV9yeF9pbnRlcnJ1cHRzKCkKKwluZXRpZl9yeF9jb21wbGV0ZShkZXYpOworCWlmIChyaW5nX2hhc19uZXdfcGFja2V0KCkgJiYgbmV0aWZfcnhfcmVzY2hlZHVsZShkZXYsIHJlY2VpdmVkKSkgeworCQlkaXNhYmxlX3J4X2FuZF9yeG5vYnVmcygpCisJCWdvdG8gcmVzdGFydF9wb2xsCisJfSB3aGlsZSAocnhfc3RhdHVzX2lzX3NldCk7CistLS0tLS0tLS0KKwkJCitCYXNpY2FsbHkgbmV0aWZfcnhfY29tcGxldGUoKSByZW1vdmVzIHVzIGZyb20gdGhlIHBvbGwgbGlzdCwgYnV0IGJlY2F1c2UgYQorbmV3IHBhY2tldCB3aGljaCB3aWxsIG5ldmVyIGJlIGNhdWdodCBkdWUgdG8gdGhlIHBvc3NpYmlsaXR5IG9mIGEgcmFjZQorbWlnaHQgY29tZSBpbiwgd2UgYXR0ZW1wdCB0byByZS1hZGQgb3Vyc2VsdmVzIHRvIHRoZSBwb2xsIGxpc3QuIAorCisKKworCitBUFBFTkRJWCAzOiBTY2hlZHVsaW5nIGlzc3Vlcy4KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorQXMgc2VlbiBOQVBJIG1vdmVzIHByb2Nlc3NpbmcgdG8gc29mdGlycSBsZXZlbC4gTGludXggdXNlcyB0aGUga3NvZnRpcnFkIGFzIHRoZSAKK2dlbmVyYWwgc29sdXRpb24gdG8gc2NoZWR1bGUgc29mdGlycSdzIHRvIHJ1biBiZWZvcmUgbmV4dCBpbnRlcnJ1cHQgYW5kIGJ5IHB1dHRpbmcgCit0aGVtIHVuZGVyIHNjaGVkdWxlciBjb250cm9sLiBBbHNvIHRoaXMgcHJldmVudHMgY29uc2VjdXRpdmUgc29mdGlycSdzIGZyb20gCittb25vcG9saXplIHRoZSBDUFUuIFRoaXMgYWxzbyBoYXZlIHRoZSBlZmZlY3QgdGhhdCB0aGUgcHJpb3JpdHkgb2Yga3NvZnRpcnEgbmVlZHMgCit0byBiZSBjb25zaWRlcmVkIHdoZW4gcnVubmluZyB2ZXJ5IENQVS1pbnRlbnNpdmUgYXBwbGljYXRpb25zIGFuZCBuZXR3b3JraW5nIHRvCitnZXQgdGhlIHByb3BlciBiYWxhbmNlIG9mIHNvZnRpcnEvdXNlciBiYWxhbmNlLiBJbmNyZWFzaW5nIGtzb2Z0aXJxIHByaW9yaXR5IHRvIDAgCisoZXZlbnR1YWxseSBtb3JlKSBpcyByZXBvcnRlZCBjdXJlIHByb2JsZW1zIHdpdGggbG93IG5ldHdvcmsgcGVyZm9ybWFuY2UgYXQgaGlnaCAKK0NQVSBsb2FkLgorCitNb3N0IHVzZWQgcHJvY2Vzc2VzIGluIGEgR0lHRSByb3V0ZXI6CitVU0VSICAgICAgIFBJRCAlQ1BVICVNRU0gIFNJWkUgICBSU1MgVFRZIFNUQVQgU1RBUlQgICBUSU1FIENPTU1BTkQKK3Jvb3QgICAgICAgICAzICAwLjIgIDAuMCAgICAgMCAgICAgMCAgPyAgUldOIEF1ZyAxNSA2MDI6MDAgKGtzb2Z0aXJxZF9DUFUwKQorcm9vdCAgICAgICAyMzIgIDAuMCAgNy45IDQxNDAwIDQwODg0ICA/ICBTICAgQXVnIDE1ICA3NDoxMiBnYXRlZCAKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworcmVsZXZhbnQgc2l0ZXM6Cis9PT09PT09PT09PT09PT09PT0KK2Z0cDovL3JvYnVyLnNsdS5zZS9wdWIvTGludXgvbmV0LWRldmVsb3BtZW50L05BUEkvCisKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK1RPRE86IFdyaXRlIG5ldC1za2VsZXRvbi5jIGRyaXZlci4KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQXV0aG9yczoKKz09PT09PT09CitBbGV4ZXkgS3V6bmV0c292IDxrdXpuZXRAbXMyLmluci5hYy5ydT4KK0phbWFsIEhhZGkgU2FsaW0gPGhhZGlAY3liZXJ1cy5jYT4KK1JvYmVydCBPbHNzb24gPFJvYmVydC5PbHNzb25AZGF0YS5zbHUuc2U+CisKK0Fja25vd2xlZGdlbWVudHM6Cis9PT09PT09PT09PT09PT09CitQZW9wbGUgd2hvIG1hZGUgdGhpcyBkb2N1bWVudCBiZXR0ZXI6CisKK0xlbm5lcnQgQnV5dGVuaGVrIDxidXl0ZW5oQGdudS5vcmc+CitBbmRyZXcgTW9ydG9uICA8YWtwbUB6aXAuY29tLmF1PgorTWFuZnJlZCBTcHJhdWwgPG1hbmZyZWRAY29sb3JmdWxsaWZlLmNvbT4KK0RvbmFsZCBCZWNrZXIgPGJlY2tlckBzY3lsZC5jb20+CitKZWZmIEdhcnppayA8amdhcnppa0Bwb2JveC5jb20+CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvUExJUC50eHQgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvUExJUC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWQ3ZTNmNwotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9QTElQLnR4dApAQCAtMCwwICsxLDIxNSBAQAorUExJUDogVGhlIFBhcmFsbGVsIExpbmUgSW50ZXJuZXQgUHJvdG9jb2wgRGV2aWNlCisKK0RvbmFsZCBCZWNrZXIgKGJlY2tlckBzdXBlci5vcmcpCitJLkQuQS4gU3VwZXJjb21wdXRpbmcgUmVzZWFyY2ggQ2VudGVyLCBCb3dpZSBNRCAyMDcxNQorCitBdCBzb21lIHBvaW50IFQuIFRob3JuIHdpbGwgcHJvYmFibHkgY29udHJpYnV0ZSB0ZXh0LAorVG9tbXkgVGhvcm4gKHR0aG9ybkBkYWltaS5hYXUuZGspCisKK1BMSVAgSW50cm9kdWN0aW9uCistLS0tLS0tLS0tLS0tLS0tLQorCitUaGlzIGRvY3VtZW50IGRlc2NyaWJlcyB0aGUgcGFyYWxsZWwgcG9ydCBwYWNrZXQgcHVzaGVyIGZvciBOZXQvTEdYLgorVGhpcyBkZXZpY2UgaW50ZXJmYWNlIGFsbG93cyBhIHBvaW50LXRvLXBvaW50IGNvbm5lY3Rpb24gYmV0d2VlbiB0d28KK3BhcmFsbGVsIHBvcnRzIHRvIGFwcGVhciBhcyBhIElQIG5ldHdvcmsgaW50ZXJmYWNlLgorCitXaGF0IGlzIFBMSVA/Cis9PT09PT09PT09PT09CisKK1BMSVAgaXMgUGFyYWxsZWwgTGluZSBJUCwgdGhhdCBpcywgdGhlIHRyYW5zcG9ydGF0aW9uIG9mIElQIHBhY2thZ2VzCitvdmVyIGEgcGFyYWxsZWwgcG9ydC4gSW4gdGhlIGNhc2Ugb2YgYSBQQywgdGhlIG9idmlvdXMgY2hvaWNlIGlzIHRoZQorcHJpbnRlciBwb3J0LiAgUExJUCBpcyBhIG5vbi1zdGFuZGFyZCwgYnV0IFtjYW4gdXNlXSB1c2VzIHRoZSBzdGFuZGFyZAorTGFwTGluayBudWxsLXByaW50ZXIgY2FibGUgW2NhbiBhbHNvIHdvcmsgaW4gdHVyYm8gbW9kZSwgd2l0aCBhIFBMSVAKK2NhYmxlXS4gW1RoZSBwcm90b2NvbCB1c2VkIHRvIHBhY2sgSVAgcGFja2FnZXMsIGlzIGEgc2ltcGxlIG9uZQoraW5pdGlhdGVkIGJ5IENyeW53ci5dCisKK0FkdmFudGFnZXMgb2YgUExJUAorPT09PT09PT09PT09PT09PT09CisKK0l0J3MgY2hlYXAsIGl0J3MgYXZhaWxhYmxlIGV2ZXJ5d2hlcmUsIGFuZCBpdCdzIGVhc3kuCisKK1RoZSBQTElQIGNhYmxlIGlzIGFsbCB0aGF0J3MgbmVlZGVkIHRvIGNvbm5lY3QgdHdvIExpbnV4IGJveGVzLCBhbmQgaXQKK2NhbiBiZSBidWlsdCBmb3IgdmVyeSBmZXcgYnVja3MuCisKK0Nvbm5lY3RpbmcgdHdvIExpbnV4IGJveGVzIHRha2VzIG9ubHkgYSBzZWNvbmQncyBkZWNpc2lvbiBhbmQgYSBmZXcKK21pbnV0ZXMnIHdvcmssIG5vIG5lZWQgdG8gc2VhcmNoIGZvciBhIFtzdXBwb3J0ZWRdIG5ldGNhcmQuIFRoaXMgbWlnaHQKK2V2ZW4gYmUgZXNwZWNpYWxseSBpbXBvcnRhbnQgaW4gdGhlIGNhc2Ugb2Ygbm90ZWJvb2tzLCB3aGVyZSBuZXRjYXJkcworYXJlIG5vdCBlYXNpbHkgYXZhaWxhYmxlLgorCitOb3QgcmVxdWlyaW5nIGEgbmV0Y2FyZCBhbHNvIG1lYW5zIHRoYXQgYXBhcnQgZnJvbSBjb25uZWN0aW5nIHRoZQorY2FibGVzLCBldmVyeXRoaW5nIGVsc2UgaXMgc29mdHdhcmUgY29uZmlndXJhdGlvbiBbd2hpY2ggaW4gcHJpbmNpcGxlCitjb3VsZCBiZSBtYWRlIHZlcnkgZWFzeS5dCisKK0Rpc2FkdmFudGFnZXMgb2YgUExJUAorPT09PT09PT09PT09PT09PT09PT09CisKK0RvZXNuJ3Qgd29yayBvdmVyIGEgbW9kZW0sIGxpa2UgU0xJUCBhbmQgUFBQLiBMaW1pdGVkIHJhbmdlLCAxNSBtLgorQ2FuIG9ubHkgYmUgdXNlZCB0byBjb25uZWN0IHRocmVlICg/KSBMaW51eCBib3hlcy4gRG9lc24ndCBjb25uZWN0IHRvCithbiBleGlzdGluZyBFdGhlcm5ldC4gSXNuJ3Qgc3RhbmRhcmQgKG5vdCBldmVuIGRlIGZhY3RvIHN0YW5kYXJkLCBsaWtlCitTTElQKS4KKworUGVyZm9ybWFuY2UKKz09PT09PT09PT09CisKK1BMSVAgZWFzaWx5IG91dHBlcmZvcm1zIEV0aGVybmV0IGNhcmRzLi4uLih1cHMsIEkgd2FzIGRyZWFtaW5nLCBidXQKK2l0ICppcyogZ2V0dGluZyBsYXRlLiBFT0IpCisKK1BMSVAgZHJpdmVyIGRldGFpbHMKKy0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlIExpbnV4IFBMSVAgZHJpdmVyIGlzIGFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBvcmlnaW5hbCBDcnlud3IgcHJvdG9jb2wsCit0aGF0IHVzZXMgdGhlIHBhcmFsbGVsIHBvcnQgc3Vic3lzdGVtIG9mIHRoZSBrZXJuZWwgaW4gb3JkZXIgdG8gcHJvcGVybHkKK3NoYXJlIHBhcmFsbGVsIHBvcnRzIGJldHdlZW4gUExJUCBhbmQgb3RoZXIgc2VydmljZXMuCisKK0lSUXMgYW5kIHRyaWdnZXIgdGltZW91dHMKKz09PT09PT09PT09PT09PT09PT09PT09PT0KKworV2hlbiBhIHBhcmFsbGVsIHBvcnQgdXNlZCBmb3IgYSBQTElQIGRyaXZlciBoYXMgYW4gSVJRIGNvbmZpZ3VyZWQgdG8gaXQsIHRoZQorUExJUCBkcml2ZXIgaXMgc2lnbmFsZWQgd2hlbmV2ZXIgZGF0YSBpcyBzZW50IHRvIGl0IHZpYSB0aGUgY2FibGUsIHN1Y2ggdGhhdAord2hlbiBubyBkYXRhIGlzIGF2YWlsYWJsZSwgdGhlIGRyaXZlciBpc24ndCBiZWluZyB1c2VkLgorCitIb3dldmVyLCBvbiBzb21lIG1hY2hpbmVzIGl0IGlzIGhhcmQsIGlmIG5vdCBpbXBvc3NpYmxlLCB0byBjb25maWd1cmUgYW4gSVJRCit0byBhIGNlcnRhaW4gcGFyYWxsZWwgcG9ydCwgbWFpbmx5IGJlY2F1c2UgaXQgaXMgdXNlZCBieSBzb21lIG90aGVyIGRldmljZS4KK09uIHRoZXNlIG1hY2hpbmVzLCB0aGUgUExJUCBkcml2ZXIgY2FuIGJlIHVzZWQgaW4gSVJRLWxlc3MgbW9kZSwgd2hlcmUKK3RoZSBQTElQIGRyaXZlciB3b3VsZCBjb25zdGFudGx5IHBvbGwgdGhlIHBhcmFsbGVsIHBvcnQgZm9yIGRhdGEgd2FpdGluZywKK2FuZCBpZiBzdWNoIGRhdGEgaXMgYXZhaWxhYmxlLCBwcm9jZXNzIGl0LiBUaGlzIG1vZGUgaXMgbGVzcyBlZmZpY2llbnQgdGhhbgordGhlIElSUSBtb2RlLCBiZWNhdXNlIHRoZSBkcml2ZXIgaGFzIHRvIGNoZWNrIHRoZSBwYXJhbGxlbCBwb3J0IG1hbnkgdGltZXMKK3BlciBzZWNvbmQsIGV2ZW4gd2hlbiBubyBkYXRhIGF0IGFsbCBpcyBzZW50LiBTb21lIHJvdWdoIG1lYXN1cmVtZW50cworaW5kaWNhdGUgdGhhdCB0aGVyZSBpc24ndCBhIG5vdGljZWFibGUgcGVyZm9ybWFuY2UgZHJvcCB3aGVuIHVzaW5nIElSUS1sZXNzCittb2RlIGFzIGNvbXBhcmVkIHRvIElSUSBtb2RlIGFzIGZhciBhcyB0aGUgZGF0YSB0cmFuc2ZlciBzcGVlZCBpcyBpbnZvbHZlZC4KK1RoZXJlIGlzIGEgcGVyZm9ybWFuY2UgZHJvcCBvbiB0aGUgbWFjaGluZSBob3N0aW5nIHRoZSBkcml2ZXIuCisKK1doZW4gdGhlIFBMSVAgZHJpdmVyIGlzIHVzZWQgaW4gSVJRIG1vZGUsIHRoZSB0aW1lb3V0IHVzZWQgZm9yIHRyaWdnZXJpbmcgYQorZGF0YSB0cmFuc2ZlciAodGhlIG1heGltYWwgdGltZSB0aGUgUExJUCBkcml2ZXIgd291bGQgYWxsb3cgdGhlIG90aGVyIHNpZGUKK2JlZm9yZSBhbm5vdW5jaW5nIGEgdGltZW91dCwgd2hlbiB0cnlpbmcgdG8gaGFuZHNoYWtlIGEgdHJhbnNmZXIgb2Ygc29tZQorZGF0YSkgaXMsIGJ5IGRlZmF1bHQsIDUwMHVzZWMuIEFzIElSUSBkZWxpdmVyeSBpcyBtb3JlIG9yIGxlc3MgaW1tZWRpYXRlLAordGhpcyB0aW1lb3V0IGlzIHF1aXRlIHN1ZmZpY2llbnQuIAorCitXaGVuIGluIElSUS1sZXNzIG1vZGUsIHRoZSBQTElQIGRyaXZlciBwb2xscyB0aGUgcGFyYWxsZWwgcG9ydCBIWiB0aW1lcworcGVyIHNlY29uZCAod2hlcmUgSFogaXMgdHlwaWNhbGx5IDEwMCBvbiBtb3N0IHBsYXRmb3JtcywgYW5kIDEwMjQgb24gYW4KK0FscGhhLCBhcyBvZiB0aGlzIHdyaXRpbmcpLiBCZXR3ZWVuIHR3byBzdWNoIHBvbGxzLCB0aGVyZSBhcmUgMTBeNi9IWiB1c2Vjcy4KK09uIGFuIGkzODYsIGZvciBleGFtcGxlLCAxMF42LzEwMCA9IDEwMDAwdXNlYy4gSXQgaXMgZWFzeSB0byBzZWUgdGhhdCBpdCBpcworcXVpdGUgcG9zc2libGUgZm9yIHRoZSB0cmlnZ2VyIHRpbWVvdXQgdG8gZXhwaXJlIGJldHdlZW4gdHdvIHN1Y2ggcG9sbHMsIGFzCit0aGUgdGltZW91dCBpcyBvbmx5IDUwMHVzZWMgbG9uZy4gQXMgYSByZXN1bHQsIGl0IGlzIHJlcXVpcmVkIHRvIGNoYW5nZSB0aGUKK3RyaWdnZXIgdGltZW91dCBvbiB0aGUgKm90aGVyKiBzaWRlIG9mIGEgUExJUCBjb25uZWN0aW9uLCB0byBhYm91dAorMTBeNi9IWiB1c2Vjcy4gSWYgYm90aCBzaWRlcyBvZiBhIFBMSVAgY29ubmVjdGlvbiBhcmUgdXNlZCBpbiBJUlEtbGVzcyBtb2RlLAordGhpcyB0aW1lb3V0IGlzIHJlcXVpcmVkIG9uIGJvdGggc2lkZXMuCisKK0l0IGFwcGVhcnMgdGhhdCBpbiBwcmFjdGljZSwgdGhlIHRyaWdnZXIgdGltZW91dCBjYW4gYmUgc2hvcnRlciB0aGFuIGluIHRoZQorYWJvdmUgY2FsY3VsYXRpb24uIEl0IGlzbid0IGFuIGltcG9ydGFudCBpc3N1ZSwgdW5sZXNzIHRoZSB3aXJlIGlzIGZhdWx0eSwKK2luIHdoaWNoIGNhc2UgYSBsb25nIHRpbWVvdXQgd291bGQgc3RhbGwgdGhlIG1hY2hpbmUgd2hlbiwgZm9yIHdoYXRldmVyCityZWFzb24sIGJpdHMgYXJlIGRyb3BwZWQuCisKK0EgdXRpbGl0eSB0aGF0IGNhbiBwZXJmb3JtIHRoaXMgY2hhbmdlIGluIExpbnV4IGlzIHBsaXBjb25maWcsIHdoaWNoIGlzIHBhcnQKK29mIHRoZSBuZXQtdG9vbHMgcGFja2FnZSAoaXRzIGxvY2F0aW9uIGNhbiBiZSBmb3VuZCBpbiB0aGUKK0RvY3VtZW50YXRpb24vQ2hhbmdlcyBmaWxlKS4gQW4gZXhhbXBsZSBjb21tYW5kIHdvdWxkIGJlCisncGxpcGNvbmZpZyBwbGlwWCB0cmlnZ2VyIDEwMDAwJywgd2hlcmUgcGxpcFggaXMgdGhlIGFwcHJvcHJpYXRlCitQTElQIGRldmljZS4KKworUExJUCBoYXJkd2FyZSBpbnRlcmNvbm5lY3Rpb24KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1BMSVAgdXNlcyBzZXZlcmFsIGRpZmZlcmVudCBkYXRhIHRyYW5zZmVyIG1ldGhvZHMuICBUaGUgZmlyc3QgKGFuZCB0aGUKK29ubHkgb25lIGltcGxlbWVudGVkIGluIHRoZSBlYXJseSB2ZXJzaW9uIG9mIHRoZSBjb2RlKSB1c2VzIGEgc3RhbmRhcmQKK3ByaW50ZXIgIm51bGwiIGNhYmxlIHRvIHRyYW5zZmVyIGRhdGEgZm91ciBiaXRzIGF0IGEgdGltZSB1c2luZworZGF0YSBiaXQgb3V0cHV0cyBjb25uZWN0ZWQgdG8gc3RhdHVzIGJpdCBpbnB1dHMuCisKK1RoZSBzZWNvbmQgZGF0YSB0cmFuc2ZlciBtZXRob2QgcmVsaWVzIG9uIGJvdGggbWFjaGluZXMgaGF2aW5nCitiaS1kaXJlY3Rpb25hbCBwYXJhbGxlbCBwb3J0cywgcmF0aGVyIHRoYW4gb3V0cHV0LW9ubHkgYGBwcmludGVyJycKK3BvcnRzLiAgVGhpcyBhbGxvd3MgYnl0ZS13aWRlIHRyYW5zZmVycyBhbmQgYXZvaWRzIHJlY29uc3RydWN0aW5nCituaWJibGVzIGludG8gYnl0ZXMsIGxlYWRpbmcgdG8gbXVjaCBmYXN0ZXIgdHJhbnNmZXJzLgorCitQYXJhbGxlbCBUcmFuc2ZlciBNb2RlIDAgQ2FibGUKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitUaGUgY2FibGUgZm9yIHRoZSBmaXJzdCB0cmFuc2ZlciBtb2RlIGlzIGEgc3RhbmRhcmQKK3ByaW50ZXIgIm51bGwiIGNhYmxlIHdoaWNoIHRyYW5zZmVycyBkYXRhIGZvdXIgYml0cyBhdCBhIHRpbWUgdXNpbmcKK2RhdGEgYml0IG91dHB1dHMgb2YgdGhlIGZpcnN0IHBvcnQgKG1hY2hpbmUgVCkgY29ubmVjdGVkIHRvIHRoZQorc3RhdHVzIGJpdCBpbnB1dHMgb2YgdGhlIHNlY29uZCBwb3J0IChtYWNoaW5lIFIpLiAgVGhlcmUgYXJlIGZpdmUKK3N0YXR1cyBpbnB1dHMsIGFuZCB0aGV5IGFyZSB1c2VkIGFzIGZvdXIgZGF0YSBpbnB1dHMgYW5kIGEgY2xvY2sgKGRhdGEKK3N0cm9iZSkgaW5wdXQsIGFycmFuZ2VkIHNvIHRoYXQgdGhlIGRhdGEgaW5wdXQgYml0cyBhcHBlYXIgYXMgY29udGlndW91cworYml0cyB3aXRoIHN0YW5kYXJkIHN0YXR1cyByZWdpc3RlciBpbXBsZW1lbnRhdGlvbi4KKworQSBjYWJsZSB0aGF0IGltcGxlbWVudHMgdGhpcyBwcm90b2NvbCBpcyBhdmFpbGFibGUgY29tbWVyY2lhbGx5IGFzIGEKKyJOdWxsIFByaW50ZXIiIG9yICJUdXJibyBMYXBsaW5rIiBjYWJsZS4gIEl0IGNhbiBiZSBjb25zdHJ1Y3RlZCB3aXRoCit0d28gREItMjUgbWFsZSBjb25uZWN0b3JzIHN5bW1ldHJpY2FsbHkgY29ubmVjdGVkIGFzIGZvbGxvd3M6CisKKyAgICBTVFJPQkUgb3V0cHV0CTEqCisgICAgRDAtPkVSUk9SCTIgLSAxNQkJMTUgLSAyCisgICAgRDEtPlNMQ1QJMyAtIDEzCQkxMyAtIDMKKyAgICBEMi0+UEFQT1VUCTQgLSAxMgkJMTIgLSA0CisgICAgRDMtPkFDSwk1IC0gMTAJCTEwIC0gNQorICAgIEQ0LT5CVVNZCTYgLSAxMQkJMTEgLSA2CisgICAgRDUsRDYsRDcgYXJlICAgNyosIDgqLCA5KgorICAgIEFVVE9GRCBvdXRwdXQgMTQqCisgICAgSU5JVCAgIG91dHB1dCAxNioKKyAgICBTTENUSU4JMTcgLSAxNworICAgIGV4dHJhIGdyb3VuZHMgYXJlIDE4KiwxOSosMjAqLDIxKiwyMiosMjMqLDI0KgorICAgIEdST1VORAkyNSAtIDI1CisqIERvIG5vdCBjb25uZWN0IHRoZXNlIHBpbnMgb24gZWl0aGVyIGVuZAorCitJZiB0aGUgY2FibGUgeW91IGFyZSB1c2luZyBoYXMgYSBtZXRhbGxpYyBzaGllbGQgaXQgc2hvdWxkIGJlCitjb25uZWN0ZWQgdG8gdGhlIG1ldGFsbGljIERCLTI1IHNoZWxsIGF0IG9uZSBlbmQgb25seS4KKworUGFyYWxsZWwgVHJhbnNmZXIgTW9kZSAxCis9PT09PT09PT09PT09PT09PT09PT09PT0KKworVGhlIHNlY29uZCBkYXRhIHRyYW5zZmVyIG1ldGhvZCByZWxpZXMgb24gYm90aCBtYWNoaW5lcyBoYXZpbmcKK2JpLWRpcmVjdGlvbmFsIHBhcmFsbGVsIHBvcnRzLCByYXRoZXIgdGhhbiBvdXRwdXQtb25seSBgYHByaW50ZXInJworcG9ydHMuICBUaGlzIGFsbG93cyBieXRlLXdpZGUgdHJhbnNmZXJzLCBhbmQgYXZvaWRzIHJlY29uc3RydWN0aW5nCituaWJibGVzIGludG8gYnl0ZXMuICBUaGlzIGNhYmxlIHNob3VsZCBub3QgYmUgdXNlZCBvbiB1bmlkaXJlY3Rpb25hbAorYGBwcmludGVyJycgKGFzIG9wcG9zZWQgdG8gYGBwYXJhbGxlbCcnKSBwb3J0cyBvciB3aGVuIHRoZSBtYWNoaW5lCitpc24ndCBjb25maWd1cmVkIGZvciBQTElQLCBhcyBpdCB3aWxsIHJlc3VsdCBpbiBvdXRwdXQgZHJpdmVyCitjb25mbGljdHMgYW5kIHRoZSAodW5saWtlbHkpIHBvc3NpYmlsaXR5IG9mIGRhbWFnZS4KKworVGhlIGNhYmxlIGZvciB0aGlzIHRyYW5zZmVyIG1vZGUgc2hvdWxkIGJlIGNvbnN0cnVjdGVkIGFzIGZvbGxvd3M6CisKKyAgICBTVFJPQkUtPkJVU1kgMSAtIDExCisgICAgRDAtPkQwCTIgLSAyCisgICAgRDEtPkQxCTMgLSAzCisgICAgRDItPkQyCTQgLSA0CisgICAgRDMtPkQzCTUgLSA1CisgICAgRDQtPkQ0CTYgLSA2CisgICAgRDUtPkQ1CTcgLSA3CisgICAgRDYtPkQ2CTggLSA4CisgICAgRDctPkQ3CTkgLSA5CisgICAgSU5JVCAtPiBBQ0sgIDE2IC0gMTAKKyAgICBBVVRPRkQtPlBBUE9VVCAxNCAtIDEyCisgICAgU0xDVC0+U0xDVElOIDEzIC0gMTcKKyAgICBHTkQtPkVSUk9SCTE4IC0gMTUKKyAgICBleHRyYSBncm91bmRzIGFyZSAxOSosMjAqLDIxKiwyMiosMjMqLDI0KgorICAgIEdST1VORAkyNSAtIDI1CisqIERvIG5vdCBjb25uZWN0IHRoZXNlIHBpbnMgb24gZWl0aGVyIGVuZAorCitPbmNlIGFnYWluLCBpZiB0aGUgY2FibGUgeW91IGFyZSB1c2luZyBoYXMgYSBtZXRhbGxpYyBzaGllbGQgaXQgc2hvdWxkCitiZSBjb25uZWN0ZWQgdG8gdGhlIG1ldGFsbGljIERCLTI1IHNoZWxsIGF0IG9uZSBlbmQgb25seS4KKworUExJUCBNb2RlIDAgdHJhbnNmZXIgcHJvdG9jb2wKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK1RoZSBQTElQIGRyaXZlciBpcyBjb21wYXRpYmxlIHdpdGggdGhlICJDcnlud3IiIHBhcmFsbGVsIHBvcnQgdHJhbnNmZXIKK3N0YW5kYXJkIGluIE1vZGUgMC4gIFRoYXQgc3RhbmRhcmQgc3BlY2lmaWVzIHRoZSBmb2xsb3dpbmcgcHJvdG9jb2w6CisKKyAgIHNlbmQgaGVhZGVyIG5pYmJsZSAnMHg4JworICAgY291bnQtbG93IG9jdGV0CisgICBjb3VudC1oaWdoIG9jdGV0CisgICAuLi4gZGF0YSBvY3RldHMKKyAgIGNoZWNrc3VtIG9jdGV0CisKK0VhY2ggb2N0ZXQgaXMgc2VudCBhcworCTx3YWl0IGZvciByeC4gJzB4MT8nPgk8c2VuZCAweDEwKyhvY3RldCYweDBGKT4KKwk8d2FpdCBmb3IgcnguICcweDA/Jz4JPHNlbmQgMHgwMCsoKG9jdGV0Pj40KSYweDBGKT4KKworVG8gc3RhcnQgYSB0cmFuc2ZlciB0aGUgdHJhbnNtaXR0aW5nIG1hY2hpbmUgb3V0cHV0cyBhIG5pYmJsZSAweDA4LgorVGhhdCByYWlzZXMgdGhlIEFDSyBsaW5lLCB0cmlnZ2VyaW5nIGFuIGludGVycnVwdCBpbiB0aGUgcmVjZWl2aW5nCittYWNoaW5lLiAgVGhlIHJlY2VpdmluZyBtYWNoaW5lIGRpc2FibGVzIGludGVycnVwdHMgYW5kIHJhaXNlcyBpdHMgb3duIEFDSworbGluZS4gCisKK1Jlc3RhdGVkOgorCisoT1VUIGlzIGJpdCAwLTQsIE9VVC5qIGlzIGJpdCBqIGZyb20gT1VULiBJTiBsaWtld2lzZSkKK1NlbmRfQnl0ZToKKyAgIE9VVCA6PSBsb3cgbmliYmxlLCBPVVQuNCA6PSAxCisgICBXQUlUIEZPUiBJTi40ID0gMQorICAgT1VUIDo9IGhpZ2ggbmliYmxlLCBPVVQuNCA6PSAwCisgICBXQUlUIEZPUiBJTi40ID0gMApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL1JFQURNRS5zYjEwMDAgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvUkVBRE1FLnNiMTAwMApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mODJkNDI1Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL1JFQURNRS5zYjEwMDAKQEAgLTAsMCArMSwyMDcgQEAKK3NiMTAwMCBpcyBhIG1vZHVsZSBuZXR3b3JrIGRldmljZSBkcml2ZXIgZm9yIHRoZSBHZW5lcmFsIEluc3RydW1lbnQgKGFsc28ga25vd24KK2FzIE5leHRMZXZlbCkgU1VSRmJvYXJkMTAwMCBpbnRlcm5hbCBjYWJsZSBtb2RlbSBib2FyZC4gIFRoaXMgaXMgYW4gSVNBIGNhcmQKK3doaWNoIGlzIHVzZWQgYnkgYSBudW1iZXIgb2YgY2FibGUgVFYgY29tcGFuaWVzIHRvIHByb3ZpZGUgY2FibGUgbW9kZW0gYWNjZXNzLgorSXQncyBhIG9uZS13YXkgZG93bnN0cmVhbS1vbmx5IGNhYmxlIG1vZGVtLCBtZWFuaW5nIHRoYXQgeW91ciB1cHN0cmVhbSBuZXQgbGluaworaXMgcHJvdmlkZWQgYnkgeW91ciByZWd1bGFyIHBob25lIG1vZGVtLgorCitUaGlzIGRyaXZlciB3YXMgd3JpdHRlbiBieSBGcmFuY28gVmVudHVyaSA8ZnZlbnR1cmlAbWVkaWFvbmUubmV0Pi4gIEhlIGRlc2VydmVzCithIGdyZWF0IGRlYWwgb2YgdGhhbmtzIGZvciB0aGlzIHdvbmRlcmZ1bCBwaWVjZSBvZiBjb2RlIQorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitTdXBwb3J0IGZvciB0aGlzIGRldmljZSBpcyBub3cgYSBwYXJ0IG9mIHRoZSBzdGFuZGFyZCBMaW51eCBrZXJuZWwuICBUaGUKK2RyaXZlciBzb3VyY2UgY29kZSBmaWxlIGlzIGRyaXZlcnMvbmV0L3NiMTAwMC5jLiAgSW4gYWRkaXRpb24gdG8gdGhpcworeW91IHdpbGwgbmVlZDoKKworMS4pIFRoZSAiY21jb25maWciIHByb2dyYW0uICBUaGlzIGlzIGEgdXRpbGl0eSB3aGljaCBzdXBwbGVtZW50cyAiaWZjb25maWciCit0byBjb25maWd1cmUgdGhlIGNhYmxlIG1vZGVtIGFuZCBuZXR3b3JrIGludGVyZmFjZSAodXN1YWxseSBjYWxsZWQgImNtMCIpOworYW5kCisKKzIuKSBTZXZlcmFsIFBQUCBzY3JpcHRzIHdoaWNoIGxpdmUgaW4gL2V0Yy9wcHAgdG8gbWFrZSBjb25uZWN0aW5nIHZpYSB5b3VyCitjYWJsZSBtb2RlbSBlYXN5LgorCisgICBUaGVzZSB1dGlsaXRpZXMgY2FuIGJlIG9idGFpbmVkIGZyb206CisKKyAgICAgIGh0dHA6Ly93d3cuamFja3NvbnZpbGxlLm5ldC9+ZnZlbnR1cmkvCisKKyAgIGluIEZyYW5jbydzIG9yaWdpbmFsIHNvdXJjZSBjb2RlIGRpc3RyaWJ1dGlvbiAudGFyLmd6IGZpbGUuICBTdXBwb3J0IGZvcgorICAgdGhlIHNiMTAwMCBkcml2ZXIgY2FuIGJlIGZvdW5kIGF0OgorCisgICAgICBodHRwOi8vaG9tZS5hZGVscGhpYS5uZXQvfnNpZ2xlcmNtL3NiMTAwMC5odG1sCisgICAgICBodHRwOi8vbGludXhwb3dlci5jeC9+Y2FibGUvCisKKyAgIGFsb25nIHdpdGggdGhlc2UgdXRpbGl0aWVzLgorCiszLikgVGhlIHN0YW5kYXJkIGlzYXBucCB0b29scy4gIFRoZXNlIGFyZSBuZWNlc3NhcnkgdG8gY29uZmlndXJlIHlvdXIgU0IxMDAwCitjYXJkIGF0IGJvb3QgdGltZSAob3IgYWZ0ZXJ3YXJkcyBieSBoYW5kKSBzaW5jZSBpdCdzIGEgUG5QIGNhcmQuCisKKyAgIElmIHlvdSBkb24ndCBoYXZlIHRoZXNlIGluc3RhbGxlZCBhcyBhIHN0YW5kYXJkIHBhcnQgb2YgeW91ciBMaW51eAorICAgZGlzdHJpYnV0aW9uLCB5b3UgY2FuIGZpbmQgdGhlbSBhdDoKKworICAgICAgaHR0cDovL3d3dy5yb2VzdG9jay5kZW1vbi5jby51ay9pc2FwbnB0b29scy8KKworICAgb3IgY2hlY2sgeW91ciBMaW51eCBkaXN0cmlidXRpb24gYmluYXJ5IENEIG9yIHRoZWlyIHdlYiBzaXRlLiAgRm9yIGhlbHAgd2l0aAorICAgaXNhcG5wLCBwbnBkdW1wLCBvciAvZXRjL2lzYXBucC5jb25mLCBnbyB0bzoKKworICAgICAgaHR0cDovL3d3dy5yb2VzdG9jay5kZW1vbi5jby51ay9pc2FwbnB0b29scy9pc2FwbnBmYXEuaHRtbAorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUbyBtYWtlIHRoZSBTQjEwMDAgY2FyZCB3b3JrLCBmb2xsb3cgdGhlc2Ugc3RlcHM6CisKKzEuKSBSdW4gYG1ha2UgY29uZmlnJywgb3IgYG1ha2UgbWVudWNvbmZpZycsIG9yIGBtYWtlIHhjb25maWcnLCB3aGljaGV2ZXIKK3lvdSBwcmVmZXIsIGluIHRoZSB0b3Aga2VybmVsIHRyZWUgZGlyZWN0b3J5IHRvIHNldCB1cCB5b3VyIGtlcm5lbAorY29uZmlndXJhdGlvbi4gIE1ha2Ugc3VyZSB0byBzYXkgIlkiIHRvICJQcm9tcHQgZm9yIGRldmVsb3BtZW50IGRyaXZlcnMiCithbmQgdG8gc2F5ICJNIiB0byB0aGUgc2IxMDAwIGRyaXZlci4gIEFsc28gc2F5ICJZIiBvciAiTSIgdG8gYWxsIHRoZSBzdGFuZGFyZAorbmV0d29ya2luZyBxdWVzdGlvbnMgdG8gZ2V0IFRDUC9JUCBhbmQgUFBQIG5ldHdvcmtpbmcgc3VwcG9ydC4KKworMi4pICpCRUZPUkUqIHlvdSBidWlsZCB0aGUga2VybmVsLCBlZGl0IGRyaXZlcnMvbmV0L3NiMTAwMC5jLiAgTWFrZSBzdXJlCit0byByZWRlZmluZSB0aGUgdmFsdWUgb2YgUkVBRF9EQVRBX1BPUlQgdG8gbWF0Y2ggdGhlIEkvTyBhZGRyZXNzIHVzZWQKK2J5IGlzYXBucCB0byBhY2Nlc3MgeW91ciBQblAgY2FyZHMuICBUaGlzIGlzIHRoZSB2YWx1ZSBvZiBSRUFEUE9SVCBpbgorL2V0Yy9pc2FwbnAuY29uZiBvciBnaXZlbiBieSB0aGUgb3V0cHV0IG9mIHBucGR1bXAuCisKKzMuKSBCdWlsZCBhbmQgaW5zdGFsbCB0aGUga2VybmVsIGFuZCBtb2R1bGVzIGFzIHVzdWFsLgorCis0LikgQm9vdCB5b3VyIG5ldyBrZXJuZWwgZm9sbG93aW5nIHRoZSB1c3VhbCBwcm9jZWR1cmVzLgorCis1LikgU2V0IHVwIHRvIGNvbmZpZ3VyZSB0aGUgbmV3IFNCMTAwMCBQblAgY2FyZCBieSBjYXB0dXJpbmcgdGhlIG91dHB1dAorb2YgInBucGR1bXAiIHRvIGEgZmlsZSBhbmQgZWRpdGluZyB0aGlzIGZpbGUgdG8gc2V0IHRoZSBjb3JyZWN0IEkvTyBwb3J0cywKK0lSUSwgYW5kIERNQSBzZXR0aW5ncyBmb3IgYWxsIHlvdXIgUG5QIGNhcmRzLiAgTWFrZSBzdXJlIG5vbmUgb2YgdGhlIHNldHRpbmdzCitjb25mbGljdCB3aXRoIG9uZSBhbm90aGVyLiAgVGhlbiB0ZXN0IHRoaXMgY29uZmlndXJhdGlvbiBieSBydW5uaW5nIHRoZQorImlzYXBucCIgY29tbWFuZCB3aXRoIHlvdXIgbmV3IGNvbmZpZyBmaWxlIGFzIHRoZSBpbnB1dC4gIENoZWNrIGZvcgorZXJyb3JzIGFuZCBmaXggYXMgbmVjZXNzYXJ5LiAgKEFzIGFuIGFzaWRlLCBJIHVzZSBJL08gcG9ydHMgMHgxMTAgYW5kCisweDMxMCBhbmQgSVJRIDExIGZvciBteSBTQjEwMDAgY2FyZCBhbmQgdGhlc2Ugd29yayB3ZWxsIGZvciBtZS4gIFlNTVYuKQorVGhlbiBzYXZlIHRoZSBmaW5pc2hlZCBjb25maWcgZmlsZSBhcyAvZXRjL2lzYXBucC5jb25mIGZvciBwcm9wZXIgY29uZmlndXJhdGlvbgorb24gc3Vic2VxdWVudCByZWJvb3RzLgorCis2LikgRG93bmxvYWQgdGhlIG9yaWdpbmFsIGZpbGUgc2IxMDAwLTEuMS4yLnRhci5neiBmcm9tIEZyYW5jbydzIHNpdGUgb3Igb25lIG9mCit0aGUgb3RoZXJzIHJlZmVyZW5jZWQgYWJvdmUuICBBcyByb290LCB1bnBhY2sgaXQgaW50byBhIHRlbXBvcmFyeSBkaXJlY3RvcnkgYW5kCitkbyBhIGBtYWtlIGNtY29uZmlnJyBhbmQgdGhlbiBgaW5zdGFsbCAtYyBjbWNvbmZpZyAvdXNyL2xvY2FsL3NiaW4nLiAgRG9uJ3QgZG8KK2BtYWtlIGluc3RhbGwnIGJlY2F1c2UgaXQgZXhwZWN0cyB0byBmaW5kIGFsbCB0aGUgdXRpbGl0aWVzIGJ1aWx0IGFuZCByZWFkeSBmb3IKK2luc3RhbGxhdGlvbiwgbm90IGp1c3QgY21jb25maWcuCisKKzcuKSBBcyByb290LCBjb3B5IGFsbCB0aGUgZmlsZXMgdW5kZXIgdGhlIHBwcC8gc3ViZGlyZWN0b3J5IGluIEZyYW5jbydzCit0YXIgZmlsZSBpbnRvIC9ldGMvcHBwLCBiZWluZyBjYXJlZnVsIG5vdCB0byBvdmVyd3JpdGUgYW55IGZpbGVzIHRoYXQgYXJlCithbHJlYWR5IGluIHRoZXJlLiAgVGhlbiBtb2RpZnkgcHBwQGdpLW9uIHRvIHNldCB0aGUgY29ycmVjdCBsb2dpbiBuYW1lLAorcGhvbmUgbnVtYmVyLCBhbmQgZnJlcXVlbmN5IGZvciB0aGUgY2FibGUgbW9kZW0uICBBbHNvIGVkaXQgcGFwLXNlY3JldHMKK3RvIHNwZWNpZnkgeW91ciBsb2dpbiBuYW1lIGFuZCBwYXNzd29yZCBhbmQgYW55IHNpdGUtc3BlY2lmaWMgaW5mb3JtYXRpb24KK3lvdSBuZWVkLgorCis4LikgQmUgc3VyZSB0byBtb2RpZnkgL2V0Yy9wcHAvZmlyZXdhbGwgdG8gdXNlIGlwY2hhaW5zIGluc3RlYWQgb2YKK3RoZSBvbGRlciBpcGZ3YWRtIGNvbW1hbmRzIGZyb20gdGhlIDIuMC54IGtlcm5lbHMuICBUaGVyZSdzIGEgbmVhdCB1dGlsaXR5IHRvCitjb252ZXJ0IGlwZndhZG0gY29tbWFuZHMgdG8gaXBjaGFpbnMgY29tbWFuZHM6CisKKyAgIGh0dHA6Ly91c2Vycy5kaHAuY29tL353aGlzcGVyL2lwZndhZG0yaXBjaGFpbnMvCisKK1lvdSBtYXkgYWxzbyB3aXNoIHRvIG1vZGlmeSB0aGUgZmlyZXdhbGwgc2NyaXB0IHRvIGltcGxlbWVudCBhIGRpZmZlcmVudAorZmlyZXdhbGxpbmcgc2NoZW1lLgorCis5LikgU3RhcnQgdGhlIFBQUCBjb25uZWN0aW9uIHZpYSB0aGUgc2NyaXB0IC9ldGMvcHBwL3BwcEBnaS1vbi4gIFlvdSBtdXN0IGJlCityb290IHRvIGRvIHRoaXMuICBJdCdzIGJldHRlciB0byB1c2UgYSB1dGlsaXR5IGxpa2Ugc3VkbyB0byBleGVjdXRlCitmcmVxdWVudGx5IHVzZWQgY29tbWFuZHMgbGlrZSB0aGlzIHdpdGggcm9vdCBwZXJtaXNzaW9ucyBpZiBwb3NzaWJsZS4gIElmIHlvdQorY29ubmVjdCBzdWNjZXNzZnVsbHkgdGhlIGNhYmxlIG1vZGVtIGludGVyZmFjZSB3aWxsIGNvbWUgdXAgYW5kIHlvdSdsbCBzZWUgYQorZHJpdmVyIG1lc3NhZ2UgbGlrZSB0aGlzIGF0IHRoZSBjb25zb2xlOgorCisgICAgICAgICBjbTA6IHNiMTAwMCBhdCAoMHgxMTAsMHgzMTApLCBjc24gMSwgUy9OIDB4MmEwZDE2ZDgsIElSUSAxMS4KKyAgICAgICAgIHNiMTAwMC5jOnYxLjEuMiA2LzAxLzk4IChmdmVudHVyaUBtZWRpYW9uZS5uZXQpCisKK1RoZSAiaWZjb25maWciIGNvbW1hbmQgc2hvdWxkIHNob3cgdHdvIG5ldyBpbnRlcmZhY2VzLCBwcHAwIGFuZCBjbTAuCitUaGUgY29tbWFuZCAiY21jb25maWcgY20wIiB3aWxsIGdpdmUgeW91IGluZm9ybWF0aW9uIGFib3V0IHRoZSBjYWJsZSBtb2RlbQoraW50ZXJmYWNlLgorCisxMC4pIFRyeSBwaW5naW5nIGEgc2l0ZSB2aWEgYHBpbmcgLWMgNSB3d3cueWFob28uY29tJywgZm9yIGV4YW1wbGUuICBZb3Ugc2hvdWxkCitzZWUgcGFja2V0cyByZWNlaXZlZC4KKworMTEuKSBJZiB5b3UgY2FuJ3QgZ2V0IHNpdGUgbmFtZXMgKGxpa2Ugd3d3LnlhaG9vLmNvbSkgdG8gcmVzb2x2ZSBpbnRvCitJUCBhZGRyZXNzZXMgKGxpa2UgMjA0LjcxLjIwMC42NyksIGJlIHN1cmUgeW91ciAvZXRjL3Jlc29sdi5jb25mIGZpbGUKK2hhcyBubyBzeW50YXggZXJyb3JzIGFuZCBoYXMgdGhlIHJpZ2h0IG5hbWVzZXJ2ZXIgSVAgYWRkcmVzc2VzIGluIGl0LgorSWYgdGhpcyBkb2Vzbid0IGhlbHAsIHRyeSBzb21ldGhpbmcgbGlrZSBgcGluZyAtYyA1IDIwNC43MS4yMDAuNjcnIHRvCitzZWUgaWYgdGhlIG5ldHdvcmtpbmcgaXMgcnVubmluZyBidXQgdGhlIEROUyByZXNvbHV0aW9uIGlzIHdoZXJlIHRoZQorcHJvYmxlbSBsaWVzLgorCisxMi4pIElmIHlvdSBzdGlsbCBoYXZlIHByb2JsZW1zLCBnbyB0byB0aGUgc3VwcG9ydCB3ZWIgc2l0ZXMgbWVudGlvbmVkIGFib3ZlCithbmQgcmVhZCB0aGUgaW5mb3JtYXRpb24gYW5kIGRvY3VtZW50YXRpb24gdGhlcmUuCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0NvbW1vbiBwcm9ibGVtczoKKworMS4pIFBhY2tldHMgZ28gb3V0IG9uIHRoZSBwcHAwIGludGVyZmFjZSBidXQgZG9uJ3QgY29tZSBiYWNrIG9uIHRoZSBjbTAKK2ludGVyZmFjZS4gIEl0IGxvb2tzIGxpa2UgSSdtIGNvbm5lY3RlZCBidXQgSSBjYW4ndCBldmVuIHBpbmcgYW55CitudW1lcmljYWwgSVAgYWRkcmVzc2VzLiAgKFRoaXMgaGFwcGVucyBwcmVkb21pbmFudGx5IG9uIERlYmlhbiBzeXN0ZW1zIGR1ZQordG8gYSBkZWZhdWx0IGJvb3QtdGltZSBjb25maWd1cmF0aW9uIHNjcmlwdC4pCisKK1NvbHV0aW9uIC0tIEFzIHJvb3QgYGVjaG8gMCA+IC9wcm9jL3N5cy9uZXQvaXB2NC9jb25mL2NtMC9ycF9maWx0ZXInIHNvIGl0CitjYW4gc2hhcmUgdGhlIHNhbWUgSVAgYWRkcmVzcyBhcyB0aGUgcHBwMCBpbnRlcmZhY2UuICBOb3RlIHRoYXQgdGhpcworY29tbWFuZCBzaG91bGQgcHJvYmFibHkgYmUgYWRkZWQgdG8gdGhlIC9ldGMvcHBwL2NhYmxlbW9kZW0gc2NyaXB0CisqcmlnaHQqYmV0d2VlbiogdGhlICIvc2Jpbi9pZmNvbmZpZyIgYW5kICIvc2Jpbi9jbWNvbmZpZyIgY29tbWFuZHMuCitZb3UgbWF5IG5lZWQgdG8gZG8gdGhpcyB0byAvcHJvYy9zeXMvbmV0L2lwdjQvY29uZi9wcHAwL3JwX2ZpbHRlciBhcyB3ZWxsLgorSWYgeW91IGRvIHRoaXMgdG8gL3Byb2Mvc3lzL25ldC9pcHY0L2NvbmYvZGVmYXVsdC9ycF9maWx0ZXIgb24gZWFjaCByZWJvb3QKKyhpbiByYy5sb2NhbCBvciBzb21lIHN1Y2gpIHRoZW4gYW55IGludGVyZmFjZXMgY2FuIHNoYXJlIHRoZSBzYW1lIElQCithZGRyZXNzZXMuCisKKzIuKSBJIGdldCAidW5yZXNvbHZlZCBzeW1ib2wiIGVycm9yIG1lc3NhZ2VzIG9uIGV4ZWN1dGluZyBgaW5zbW9kIHNiMTAwMC5vJy4KKworU29sdXRpb24gLS0gWW91IHByb2JhYmx5IGhhdmUgYSBub24tbWF0Y2hpbmcga2VybmVsIHNvdXJjZSB0cmVlIGFuZAorL3Vzci9pbmNsdWRlL2xpbnV4IGFuZCAvdXNyL2luY2x1ZGUvYXNtIGhlYWRlciBmaWxlcy4gIE1ha2Ugc3VyZSB5b3UKK2luc3RhbGwgdGhlIGNvcnJlY3QgdmVyc2lvbnMgb2YgdGhlIGhlYWRlciBmaWxlcyBpbiB0aGVzZSB0d28gZGlyZWN0b3JpZXMuCitUaGVuIHJlYnVpbGQgYW5kIHJlaW5zdGFsbCB0aGUga2VybmVsLgorCiszLikgV2hlbiBpc2FwbnAgcnVucyBpdCByZXBvcnRzIGFuIGVycm9yLCBhbmQgbXkgU0IxMDAwIGNhcmQgaXNuJ3Qgd29ya2luZy4KKworU29sdXRpb24gLS0gVGhlcmUncyBhIHByb2JsZW0gd2l0aCBsYXRlciB2ZXJzaW9ucyBvZiBpc2FwbnAgdXNpbmcgdGhlICIoQ0hFQ0spIgorb3B0aW9uIGluIHRoZSBsaW5lcyB0aGF0IGFsbG9jYXRlIHRoZSB0d28gSS9PIGFkZHJlc3NlcyBmb3IgdGhlIFNCMTAwMCBjYXJkLgorVGhpcyBmaXJzdCBwb3BwZWQgdXAgb24gUkggNi4wLiAgRGVsZXRlICIoQ0hFQ0spIiBmb3IgdGhlIFNCMTAwMCBJL08gYWRkcmVzc2VzLgorTWFrZSBzdXJlIHRoZXkgZG9uJ3QgY29uZmxpY3Qgd2l0aCBhbnkgb3RoZXIgcGllY2VzIG9mIGhhcmR3YXJlIGZpcnN0ISAgVGhlbgorcmVydW4gaXNhcG5wIGFuZCBnbyBmcm9tIHRoZXJlLgorCis0LikgSSBjYW4ndCBleGVjdXRlIHRoZSAvZXRjL3BwcC9wcHBAZ2ktb24gZmlsZS4KKworU29sdXRpb24gLS0gQXMgcm9vdCBkbyBgY2htb2QgdWcreCAvZXRjL3BwcC9wcHBAZ2ktb24nLgorCis1LikgVGhlIGZpcmV3YWxsIHNjcmlwdCBpc24ndCB3b3JraW5nICh3aXRoIDIuMi54IGFuZCBoaWdoZXIga2VybmVscykuCisKK1NvbHV0aW9uIC0tIFVzZSB0aGUgaXBmd2FkbTJpcGNoYWlucyBzY3JpcHQgcmVmZXJlbmNlZCBhYm92ZSB0byBjb252ZXJ0IHRoZQorL2V0Yy9wcHAvZmlyZXdhbGwgc2NyaXB0IGZyb20gdGhlIGRlcHJlY2F0ZWQgaXBmd2FkbSBjb21tYW5kcyB0byBpcGNoYWlucy4KKworNi4pIEknbSBnZXR0aW5nICp0b25zKiBvZiBmaXJld2FsbCBkZW55IG1lc3NhZ2VzIGluIHRoZSAvdmFyL2tlcm4ubG9nLAorL3Zhci9tZXNzYWdlcywgYW5kL29yIC92YXIvc3lzbG9nIGZpbGVzLCBhbmQgdGhleSdyZSBmaWxsaW5nIHVwIG15IC92YXIKK3BhcnRpdGlvbiEhIQorCitTb2x1dGlvbiAtLSBGaXJzdCwgdGVsbCB5b3VyIElTUCB0aGF0IHlvdSdyZSByZWNlaXZpbmcgRG9TIChEZW5pYWwgb2YgU2VydmljZSkKK2FuZC9vciBwb3J0c2Nhbm5pbmcgKFVEUCBjb25uZWN0aW9uIGF0dGVtcHRzKSBhdHRhY2tzISAgTG9vayBvdmVyIHRoZSBkZW55CittZXNzYWdlcyB0byBmaWd1cmUgb3V0IHdoYXQgdGhlIGF0dGFjayBpcyBhbmQgd2hlcmUgaXQncyBjb21pbmcgZnJvbS4gIE5leHQsCitlZGl0IC9ldGMvcHBwL2NhYmxlbW9kZW0gYW5kIG1ha2Ugc3VyZSB0aGUgIixub2Jyb2FkY2FzdCIgb3B0aW9uIGlzIHR1cm5lZCBvbgordG8gdGhlICJjbWNvbmZpZyIgY29tbWFuZCAodW5jb21tZW50IHRoYXQgbGluZSkuICBJZiB5b3UncmUgbm90IHJlY2VpdmluZyB0aGVzZQorZGVuaWVkIHBhY2tldHMgb24geW91ciBicm9hZGNhc3QgaW50ZXJmYWNlIChJUCBhZGRyZXNzIHh4eC55eXkuenp6LjI1NQordHlwaWNhbGx5KSwgdGhlbiBzb21lb25lIGlzIGF0dGFja2luZyB5b3VyIG1hY2hpbmUgaW4gcGFydGljdWxhci4gIEJlIGNhcmVmdWwKK291dCB0aGVyZS4uLi4KKworNy4pIEV2ZXJ5dGhpbmcgc2VlbXMgdG8gd29yayBmaW5lIGJ1dCBteSBjb21wdXRlciBsb2NrcyB1cCBhZnRlciBhIHdoaWxlCisoYW5kIHR5cGljYWxseSBkdXJpbmcgYSBsZW5ndGh5IGRvd25sb2FkIHRocm91Z2ggdGhlIGNhYmxlIG1vZGVtKSEKKworU29sdXRpb24gLS0gWW91IG1heSBuZWVkIHRvIGFkZCBhIHNob3J0IGRlbGF5IGluIHRoZSBkcml2ZXIgdG8gJ3Nsb3cgZG93bicgdGhlCitTVVJGYm9hcmQgYmVjYXVzZSB5b3VyIFBDIG1pZ2h0IG5vdCBiZSBhYmxlIHRvIGtlZXAgdXAgd2l0aCB0aGUgdHJhbnNmZXIgcmF0ZQorb2YgdGhlIFNCMTAwMC4gVG8gZG8gdGhpcywgaXQncyBwcm9iYWJseSBiZXN0IHRvIGRvd25sb2FkIEZyYW5jbydzCitzYjEwMDAtMS4xLjIudGFyLmd6IGFyY2hpdmUgYW5kIGJ1aWxkIGFuZCBpbnN0YWxsIHNiMTAwMC5vIG1hbnVhbGx5LiAgWW91J2xsCit3YW50IHRvIGVkaXQgdGhlICdNYWtlZmlsZScgYW5kIGxvb2sgZm9yIHRoZSAnU0IxMDAwX0RFTEFZJworZGVmaW5lLiAgVW5jb21tZW50IHRob3NlICdDRkxBR1MnIGxpbmVzIChhbmQgY29tbWVudCBvdXQgdGhlIGRlZmF1bHQgb25lcykKK2FuZCB0cnkgc2V0dGluZyB0aGUgZGVsYXkgdG8gc29tZXRoaW5nIGxpa2UgNjAgbWljcm9zZWNvbmRzIHdpdGg6CisnLURTQjEwMDBfREVMQVk9NjAnLiAgVGhlbiBkbyBgbWFrZScgYW5kIGFzIHJvb3QgYG1ha2UgaW5zdGFsbCcgYW5kIHRyeQoraXQgb3V0LiAgSWYgaXQgc3RpbGwgZG9lc24ndCB3b3JrIG9yIHlvdSBsaWtlIHBsYXlpbmcgd2l0aCB0aGUgZHJpdmVyLCB5b3UgbWF5Cit0cnkgb3RoZXIgbnVtYmVycy4gIFJlbWVtYmVyIHRob3VnaCB0aGF0IHRoZSBoaWdoZXIgdGhlIGRlbGF5LCB0aGUgc2xvd2VyIHRoZQorZHJpdmVyICh3aGljaCBzbG93cyBkb3duIHRoZSByZXN0IG9mIHRoZSBQQyB0b28gd2hlbiBpdCBpcyBhY3RpdmVseQordXNlZCkuIFRoYW5rcyB0byBFZCBEYWlnYSBmb3IgdGhpcyB0aXAhCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0NyZWRpdHM6ICBUaGlzIFJFQURNRSBjYW1lIGZyb20gRnJhbmNvIFZlbnR1cmkncyBvcmlnaW5hbCBSRUFETUUgZmlsZSB3aGljaCBpcworc3RpbGwgc3VwcGxpZWQgd2l0aCBoaXMgZHJpdmVyIC50YXIuZ3ogYXJjaGl2ZS4gIEkgYW5kIGFsbCBvdGhlciBzYjEwMDAgdXNlcnMKK293ZSBGcmFuY28gYSB0cmVtZW5kb3VzICJUaGFuayB5b3UhIiAgQWRkaXRpb25hbCB0aGFua3MgZ29lcyB0byBDYXJsIFBhdHRlbgorYW5kIFJhbHBoIEJvbm5lbGwgd2hvIGFyZSBub3cgbWFuYWdpbmcgdGhlIExpbnV4IFNCMTAwMCB3ZWIgc2l0ZSwgYW5kIHRvCit0aGUgU0IxMDAwIHVzZXJzIHdobyByZXBvcnRlZCBhbmQgaGVscGVkIGRlYnVnIHRoZSBjb21tb24gcHJvYmxlbXMgbGlzdGVkCithYm92ZS4KKworCisJCQkJCUNsZW1taXR0IFNpZ2xlcgorCQkJCQljc2lnbGVyQHZ0LmVkdQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL1RPRE8gYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvVE9ETwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NmQzNmZmCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL1RPRE8KQEAgLTAsMCArMSwxOCBAQAorVG8tZG8gaXRlbXMgZm9yIG5ldHdvcmsgZHJpdmVycworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisqIE1vdmUgZXRoZXJuZXQgY3JjIHJvdXRpbmUgdG8gZ2VuZXJpYyBjb2RlCisKKyogKGZvciAyLjUpIEludGVncmF0ZSBKYW1hbCBIYWRpIFNhbGltJ3MgbmV0ZGV2IFJ4IHBvbGxpbmcgQVBJIGNoYW5nZQorCisqIEF1ZGl0IGFsbCBuZXQgZHJpdmVycyB0byBtYWtlIHN1cmUgbWFnaWMgcGFja2V0IC8gd2FrZS1vbi1sYW4gLworICBzaW1pbGFyIGZlYXR1cmVzIGFyZSBkaXNhYmxlZCBpbiB0aGUgZHJpdmVyIGJ5IGRlZmF1bHQuCisKKyogQXVkaXQgYWxsIG5ldCBkcml2ZXJzIHRvIG1ha2Ugc3VyZSB0aGUgbW9kdWxlIGFsd2F5cyBwcmludHMgb3V0IGEKKyAgdmVyc2lvbiBzdHJpbmcgd2hlbiBsb2FkZWQgYXMgYSBtb2R1bGUsIGJ1dCBvbmx5IHByaW50cyBhIHZlcnNpb24KKyAgc3RyaW5nIHdoZW4gYnVpbHQgaW50byB0aGUga2VybmVsIGlmIGEgZGV2aWNlIGlzIGRldGVjdGVkLgorCisqIEFkZCBFVEhUT09MX0dEUlZJTkZPIGlvY3RsIHN1cHBvcnQgdG8gYWxsIGV0aGVybmV0IGRyaXZlcnMuCisKKyogZG1mZSBQQ0kgRE1BIGlzIHRvdGFsbHkgd3JvbmcgYW5kIG9ubHkgd29ya3Mgb24geDg2CisKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9hbGlhcy50eHQgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvYWxpYXMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNkMTJjMmYKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvYWxpYXMudHh0CkBAIC0wLDAgKzEsNTMgQEAKKworSVAtQWxpYXNpbmc6Cis9PT09PT09PT09PT0KKworSVAtYWxpYXNlcyBhcmUgYWRkaXRpb25hbCBJUC1hZGRyZXNzZXMvbWFza3MgaG9va2VkIHVwIHRvIGEgYmFzZSAKK2ludGVyZmFjZSBieSBhZGRpbmcgYSBjb2xvbiBhbmQgYSBzdHJpbmcgd2hlbiBydW5uaW5nIGlmY29uZmlnLiAKK1RoaXMgc3RyaW5nIGlzIHVzdWFsbHkgbnVtZXJpYywgYnV0IHRoaXMgaXMgbm90IGEgbXVzdC4KKworSVAtQWxpYXNlcyBhcmUgYXZhaWwgaWYgQ09ORklHX0lORVQgKGBzdGFuZGFyZCcgSVB2NCBuZXR3b3JraW5nKSAKK2lzIGNvbmZpZ3VyZWQgaW4gdGhlIGtlcm5lbC4KKworCitvIEFsaWFzIGNyZWF0aW9uLgorICBBbGlhcyBjcmVhdGlvbiBpcyBkb25lIGJ5ICdtYWdpYycgaW50ZXJmYWNlIG5hbWluZzogZWcuIHRvIGNyZWF0ZSBhCisgIDIwMC4xLjEuMSBhbGlhcyBmb3IgZXRoMCAuLi4KKyAgCisgICAgIyBpZmNvbmZpZyBldGgwOjAgMjAwLjEuMS4xICBldGMsZXRjLi4uLgorICAgICAgICAgICAgICAgICAgIH5+IC0+IHJlcXVlc3QgYWxpYXMgIzAgY3JlYXRpb24gKGlmIG5vdCB5ZXQgZXhpc3RzKSBmb3IgZXRoMAorCisgICAgVGhlIGNvcnJlc3BvbmRpbmcgcm91dGUgaXMgYWxzbyBzZXQgdXAgYnkgdGhpcyBjb21tYW5kLiAKKyAgICBQbGVhc2Ugbm90ZTogVGhlIHJvdXRlIGFsd2F5cyBwb2ludHMgdG8gdGhlIGJhc2UgaW50ZXJmYWNlLgorCQorCitvIEFsaWFzIGRlbGV0aW9uLgorICBUaGUgYWxpYXMgaXMgcmVtb3ZlZCBieSBzaHV0dGluZyB0aGUgYWxpYXMgZG93bjoKKworICAgICMgaWZjb25maWcgZXRoMDowIGRvd24KKyAgICAgICAgICAgICAgICAgfn5+fn5+fn5+fiAtPiB3aWxsIGRlbGV0ZSBhbGlhcworCisgIAkJICAgCQkgICAKK28gQWxpYXMgKHJlLSljb25maWd1cmluZworCisgIEFsaWFzZXMgYXJlIG5vdCByZWFsIGRldmljZXMsIGJ1dCBwcm9ncmFtcyBzaG91bGQgYmUgYWJsZSB0byBjb25maWd1cmUgYW5kCisgIHJlZmVyIHRvIHRoZW0gYXMgdXN1YWwgKGlmY29uZmlnLCByb3V0ZSwgZXRjKS4KKworCitvIFJlbGF0aW9uc2hpcCB3aXRoIG1haW4gZGV2aWNlCisKKyAgSWYgdGhlIGJhc2UgZGV2aWNlIGlzIHNodXQgZG93biB0aGUgYWRkZWQgYWxpYXNlcyB3aWxsIGJlIGRlbGV0ZWQgCisgIHRvby4KKworCitDb250YWN0CistLS0tLS0tCitQbGVhc2UgZmluZ2VyIG9yIGUtbWFpbCBtZToKKyAgIEp1YW4gSm9zZSBDaWFybGFudGUgPGpqY2lhcmxhQHJhaXoudW5jdS5lZHUuYXI+CisKK1VwZGF0ZWQgYnkgRXJpayBTY2hvZW5mZWxkZXIgPHNjaG9lbmZyQGdhZXJ0bmVyLkRFPgorCis7IGxvY2FsIHZhcmlhYmxlczoKKzsgbW9kZTogaW5kZW50ZWQtdGV4dAorOyBtb2RlOiBhdXRvLWZpbGwKKzsgZW5kOgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2FyY25ldC1oYXJkd2FyZS50eHQgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvYXJjbmV0LWhhcmR3YXJlLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMGE1ZjAxCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2FyY25ldC1oYXJkd2FyZS50eHQKQEAgLTAsMCArMSwzMTMzIEBACisgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorMSkgVGhpcyBmaWxlIGlzIGEgc3VwcGxlbWVudCB0byBhcmNuZXQudHh0LiAgUGxlYXNlIHJlYWQgdGhhdCBmb3IgZ2VuZXJhbAorICAgZHJpdmVyIGNvbmZpZ3VyYXRpb24gaGVscC4KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisyKSBUaGlzIGZpbGUgaXMgbm8gbG9uZ2VyIExpbnV4LXNwZWNpZmljLiAgSXQgc2hvdWxkIHByb2JhYmx5IGJlIG1vdmVkIG91dCBvZgorICAgdGhlIGtlcm5lbCBzb3VyY2VzLiAgSWRlYXM/CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitCZWNhdXNlIHNvIG1hbnkgcGVvcGxlIChteXNlbGYgaW5jbHVkZWQpIHNlZW0gdG8gaGF2ZSBvYnRhaW5lZCBBUkNuZXQgY2FyZHMKK3dpdGhvdXQgbWFudWFscywgdGhpcyBmaWxlIGNvbnRhaW5zIGEgcXVpY2sgaW50cm9kdWN0aW9uIHRvIEFSQ25ldCBoYXJkd2FyZSwKK3NvbWUgY2FibGluZyB0aXBzLCBhbmQgYSBsaXN0aW5nIG9mIGFsbCBqdW1wZXIgc2V0dGluZ3MgSSBjYW4gZmluZC4gUGxlYXNlCitlLW1haWwgYXBlbndhcnJAd29ybGR2aXNpb25zLmNhIHdpdGggYW55IHNldHRpbmdzIGZvciB5b3VyIHBhcnRpY3VsYXIgY2FyZCwKK29yIGFueSBvdGhlciBpbmZvcm1hdGlvbiB5b3UgaGF2ZSEKKworCitJTlRST0RVQ1RJT04gVE8gQVJDTkVUCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0FSQ25ldCBpcyBhIG5ldHdvcmsgdHlwZSB3aGljaCB3b3JrcyBpbiBhIHdheSBzaW1pbGFyIHRvIHBvcHVsYXIgRXRoZXJuZXQKK25ldHdvcmtzIGJ1dCB3aGljaCBpcyBhbHNvIGRpZmZlcmVudCBpbiBzb21lIHZlcnkgaW1wb3J0YW50IHdheXMuCisKK0ZpcnN0IG9mIGFsbCwgeW91IGNhbiBnZXQgQVJDbmV0IGNhcmRzIGluIGF0IGxlYXN0IHR3byBzcGVlZHM6IDIuNSBNYnBzCisoc2xvd2VyIHRoYW4gRXRoZXJuZXQpIGFuZCAxMDAgTWJwcyAoZmFzdGVyIHRoYW4gbm9ybWFsIEV0aGVybmV0KS4gIEluIGZhY3QsCit0aGVyZSBhcmUgb3RoZXJzIGFzIHdlbGwsIGJ1dCB0aGVzZSBhcmUgbGVzcyBjb21tb24uICBUaGUgZGlmZmVyZW50IGhhcmR3YXJlCit0eXBlcywgYXMgZmFyIGFzIEknbSBhd2FyZSwgYXJlIG5vdCBjb21wYXRpYmxlIGFuZCBzbyB5b3UgY2Fubm90IHdpcmUgYQorMTAwIE1icHMgY2FyZCB0byBhIDIuNSBNYnBzIGNhcmQsIGFuZCBzbyBvbi4gIEZyb20gd2hhdCBJIGhlYXIsIG15IGRyaXZlciBkb2VzCit3b3JrIHdpdGggMTAwIE1icHMgY2FyZHMsIGJ1dCBJIGhhdmVuJ3QgYmVlbiBhYmxlIHRvIHZlcmlmeSB0aGlzIG15c2VsZiwKK3NpbmNlIEkgb25seSBoYXZlIHRoZSAyLjUgTWJwcyB2YXJpZXR5LiAgSXQgaXMgcHJvYmFibHkgbm90IGdvaW5nIHRvIHNhdHVyYXRlCit5b3VyIDEwMCBNYnBzIGNhcmQuICBTdG9wIGNvbXBsYWluaW5nLiA6KQorCitZb3UgYWxzbyBjYW5ub3QgY29ubmVjdCBhbiBBUkNuZXQgY2FyZCB0byBhbnkga2luZCBvZiBFdGhlcm5ldCBjYXJkIGFuZAorZXhwZWN0IGl0IHRvIHdvcmsuICAKKworVGhlcmUgYXJlIHR3byAidHlwZXMiIG9mIEFSQ25ldCAtIFNUQVIgdG9wb2xvZ3kgYW5kIEJVUyB0b3BvbG9neS4gIFRoaXMKK3JlZmVycyB0byBob3cgdGhlIGNhcmRzIGFyZSBtZWFudCB0byBiZSB3aXJlZCB0b2dldGhlci4gIEFjY29yZGluZyB0byBtb3N0CithdmFpbGFibGUgZG9jdW1lbnRhdGlvbiwgeW91IGNhbiBvbmx5IGNvbm5lY3QgU1RBUiBjYXJkcyB0byBTVEFSIGNhcmRzIGFuZAorQlVTIGNhcmRzIHRvIEJVUyBjYXJkcy4gIFRoYXQgbWFrZXMgc2Vuc2UsIHJpZ2h0PyAgV2VsbCwgaXQncyBub3QgcXVpdGUKK3RydWU7IHNlZSBiZWxvdyB1bmRlciAiQ2FibGluZy4iCisKK09uY2UgeW91IGdldCBwYXN0IHRoZXNlIGxpdHRsZSBzdHVtYmxpbmcgYmxvY2tzLCBBUkNuZXQgaXMgYWN0dWFsbHkgcXVpdGUgYQord2VsbC1kZXNpZ25lZCBzdGFuZGFyZC4gIEl0IHVzZXMgc29tZXRoaW5nIGNhbGxlZCAibW9kaWZpZWQgdG9rZW4gcGFzc2luZyIKK3doaWNoIG1ha2VzIGl0IGNvbXBsZXRlbHkgaW5jb21wYXRpYmxlIHdpdGggc28tY2FsbGVkICJUb2tlbiBSaW5nIiBjYXJkcywKK2J1dCB3aGljaCBtYWtlcyB0cmFuc2ZlcnMgbXVjaCBtb3JlIHJlbGlhYmxlIHRoYW4gRXRoZXJuZXQgZG9lcy4gIEluIGZhY3QsCitBUkNuZXQgd2lsbCBndWFyYW50ZWUgdGhhdCBhIHBhY2tldCBhcnJpdmVzIHNhZmVseSBhdCB0aGUgZGVzdGluYXRpb24sIGFuZAorZXZlbiBpZiBpdCBjYW4ndCBwb3NzaWJseSBiZSBkZWxpdmVyZWQgcHJvcGVybHkgKGllLiBiZWNhdXNlIG9mIGEgY2FibGUKK2JyZWFrLCBvciBiZWNhdXNlIHRoZSBkZXN0aW5hdGlvbiBjb21wdXRlciBkb2VzIG5vdCBleGlzdCkgaXQgd2lsbCBhdCBsZWFzdAordGVsbCB0aGUgc2VuZGVyIGFib3V0IGl0LgorCitCZWNhdXNlIG9mIHRoZSBjYXJlZnVsbHkgZGVmaW5lZCBhY3Rpb24gb2YgdGhlICJ0b2tlbiIsIGl0IHdpbGwgYWx3YXlzIG1ha2UKK2EgcGFzcyBhcm91bmQgdGhlICJyaW5nIiB3aXRoaW4gYSBtYXhpbXVtIGxlbmd0aCBvZiB0aW1lLiAgVGhpcyBtYWtlcyBpdAordXNlZnVsIGZvciByZWFsdGltZSBuZXR3b3Jrcy4KKworSW4gYWRkaXRpb24sIGFsbCBrbm93biBBUkNuZXQgY2FyZHMgaGF2ZSBhbiAoYWxtb3N0KSBpZGVudGljYWwgcHJvZ3JhbW1pbmcKK2ludGVyZmFjZS4gIFRoaXMgbWVhbnMgdGhhdCB3aXRoIG9uZSBBUkNuZXQgZHJpdmVyIHlvdSBjYW4gc3VwcG9ydCBhbnkKK2NhcmQsIHdoZXJlYXMgd2l0aCBFdGhlcm5ldCBlYWNoIG1hbnVmYWN0dXJlciB1c2VzIHdoYXQgaXMgc29tZXRpbWVzIGEKK2NvbXBsZXRlbHkgZGlmZmVyZW50IHByb2dyYW1taW5nIGludGVyZmFjZSwgbGVhZGluZyB0byBhIGxvdCBvZiBkaWZmZXJlbnQsCitzb21ldGltZXMgdmVyeSBzaW1pbGFyLCBFdGhlcm5ldCBkcml2ZXJzLiAgT2YgY291cnNlLCBhbHdheXMgdXNpbmcgdGhlIHNhbWUKK3Byb2dyYW1taW5nIGludGVyZmFjZSBhbHNvIG1lYW5zIHRoYXQgd2hlbiBoaWdoLXBlcmZvcm1hbmNlIGhhcmR3YXJlCitmYWNpbGl0aWVzIGxpa2UgUENJIGJ1cyBtYXN0ZXJpbmcgRE1BIGFwcGVhciwgaXQncyBoYXJkIHRvIHRha2UgYWR2YW50YWdlIG9mCit0aGVtLiAgTGV0J3Mgbm90IGdvIGludG8gdGhhdC4KKworT25lIHRoaW5nIHRoYXQgbWFrZXMgQVJDbmV0IGNhcmRzIGRpZmZpY3VsdCB0byBwcm9ncmFtIGZvciwgaG93ZXZlciwgaXMgdGhlCitsaW1pdCBvbiB0aGVpciBwYWNrZXQgc2l6ZXM7IHN0YW5kYXJkIEFSQ25ldCBjYW4gb25seSBzZW5kIHBhY2tldHMgdGhhdCBhcmUKK3VwIHRvIDUwOCBieXRlcyBpbiBsZW5ndGguICBUaGlzIGlzIHNtYWxsZXIgdGhhbiB0aGUgSW50ZXJuZXQgImJhcmUgbWluaW11bSIKK29mIDU3NiBieXRlcywgbGV0IGFsb25lIHRoZSBFdGhlcm5ldCBNVFUgb2YgMTUwMC4gIFRvIGNvbXBlbnNhdGUsIGFuIGV4dHJhCitsZXZlbCBvZiBlbmNhcHN1bGF0aW9uIGlzIGRlZmluZWQgYnkgUkZDMTIwMSwgd2hpY2ggSSBjYWxsICJwYWNrZXQKK3NwbGl0dGluZywiIHRoYXQgYWxsb3dzICJ2aXJ0dWFsIHBhY2tldHMiIHRvIGdyb3cgYXMgbGFyZ2UgYXMgNjRLIGVhY2gsCithbHRob3VnaCB0aGV5IGFyZSBnZW5lcmFsbHkga2VwdCBkb3duIHRvIHRoZSBFdGhlcm5ldC1zdHlsZSAxNTAwIGJ5dGVzLgorCitGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGUgYWR2YW50YWdlcyBhbmQgZGlzYWR2YW50YWdlcyAobW9zdGx5IHRoZQorYWR2YW50YWdlcykgb2YgQVJDbmV0IG5ldHdvcmtzLCB5b3UgbWlnaHQgdHJ5IHRoZSAiQVJDbmV0IFRyYWRlIEFzc29jaWF0aW9uIgorV1dXIHBhZ2U6CisJaHR0cDovL3d3dy5hcmNuZXQuY29tCisKKworQ0FCTElORyBBUkNORVQgTkVUV09SS1MKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoaXMgc2VjdGlvbiB3YXMgcmV3cml0dGVuIGJ5IAorICAgICAgICBWb2p0ZWNoIFBhdmxpayAgICAgPHZvanRlY2hAc3VzZS5jej4KK3VzaW5nIGluZm9ybWF0aW9uIGZyb20gc2V2ZXJhbCBwZW9wbGUsIGluY2x1ZGluZzoKKyAgICAgICAgQXZlcnkgUGVubnJhdW4gICAgIDxhcGVud2FyckB3b3JsZHZpc2lvbnMuY2E+CisgCVN0ZXBoZW4gQS4gV29vZCAgICA8c2F3QGhhbGxjMS5jZWJhZi5nb3Y+CisgCUpvaG4gUGF1bCBNb3JyaXNvbiA8am1vcnJpc29AYm9nb21pcHMuZWUudWJjLmNhPgorIAlKb2FjaGltIEtvZW5pZyAgICAgPGpvam9AcmVwYXMuZGU+CithbmQgQXZlcnkgdG91Y2hlZCBpdCB1cCBhIGJpdCwgYXQgVm9qdGVjaCdzIHJlcXVlc3QuCisKK0FSQ25ldCAodGhlIGNsYXNzaWMgMi41IE1icHMgdmVyc2lvbikgY2FuIGJlIGNvbm5lY3RlZCBieSB0d28gZGlmZmVyZW50Cit0eXBlcyBvZiBjYWJsaW5nOiBjb2F4IGFuZCB0d2lzdGVkIHBhaXIuICBUaGUgb3RoZXIgQVJDbmV0LXR5cGUgbmV0d29ya3MKKygxMDAgTWJwcyBUQ05TIGFuZCAzMjAga2JwcyAtIDMyIE1icHMgQVJDbmV0IFBsdXMpIHVzZSBkaWZmZXJlbnQgdHlwZXMgb2YKK2NhYmxpbmcgKFR5cGUxLCBGaWJlciwgQzEsIEM0LCBDNSkuCisKK0ZvciBhIGNvYXggbmV0d29yaywgeW91ICJzaG91bGQiIHVzZSA5MyBPaG0gUkctNjIgY2FibGUuICBCdXQgb3RoZXIgY2FibGVzCithbHNvIHdvcmsgZmluZSwgYmVjYXVzZSBBUkNuZXQgaXMgYSB2ZXJ5IHN0YWJsZSBuZXR3b3JrLiBJIHBlcnNvbmFsbHkgdXNlIDc1CitPaG0gVFYgYW50ZW5uYSBjYWJsZS4KKworQ2FyZHMgZm9yIGNvYXggY2FibGluZyBhcmUgc2hpcHBlZCBpbiB0d28gZGlmZmVyZW50IHZhcmlhbnRzOiBmb3IgQlVTIGFuZAorU1RBUiBuZXR3b3JrIHRvcG9sb2dpZXMuICBUaGV5IGFyZSBtb3N0bHkgdGhlIHNhbWUuICBUaGUgb25seSBkaWZmZXJlbmNlCitsaWVzIGluIHRoZSBoeWJyaWQgY2hpcCBpbnN0YWxsZWQuICBCVVMgY2FyZHMgdXNlIGhpZ2ggaW1wZWRhbmNlIG91dHB1dCwKK3doaWxlIFNUQVIgdXNlIGxvdyBpbXBlZGFuY2UuICBMb3cgaW1wZWRhbmNlIGNhcmQgKFNUQVIpIGlzIGVsZWN0cmljYWxseQorZXF1YWwgdG8gYSBoaWdoIGltcGVkYW5jZSBvbmUgd2l0aCBhIHRlcm1pbmF0b3IgaW5zdGFsbGVkLgorCitVc3VhbGx5LCB0aGUgQVJDbmV0IG5ldHdvcmtzIGFyZSBidWlsdCB1cCBmcm9tIFNUQVIgY2FyZHMgYW5kIGh1YnMuICBUaGVyZQorYXJlIHR3byB0eXBlcyBvZiBodWJzIC0gYWN0aXZlIGFuZCBwYXNzaXZlLiAgUGFzc2l2ZSBodWJzIGFyZSBzbWFsbCBib3hlcword2l0aCBmb3VyIEJOQyBjb25uZWN0b3JzIGNvbnRhaW5pbmcgZm91ciA0NyBPaG0gcmVzaXN0b3JzOgorCisgICB8ICAgICAgICAgfCB3aXJlcworICAgUiAgICAgICAgICsganVuY3Rpb24KKy1SLSstUi0gICAgICBSIDQ3IE9obSByZXNpc3RvcnMKKyAgIFIKKyAgIHwKKworVGhlIHNoaWVsZGluZyBpcyBjb25uZWN0ZWQgdG9nZXRoZXIuICBBY3RpdmUgaHVicyBhcmUgbXVjaCBtb3JlIGNvbXBsaWNhdGVkOwordGhleSBhcmUgcG93ZXJlZCBhbmQgY29udGFpbiBlbGVjdHJvbmljcyB0byBhbXBsaWZ5IHRoZSBzaWduYWwgYW5kIHNlbmQgaXQKK3RvIG90aGVyIHNlZ21lbnRzIG9mIHRoZSBuZXQuICBUaGV5IHVzdWFsbHkgaGF2ZSBlaWdodCBjb25uZWN0b3JzLiAgQWN0aXZlCitodWJzIGNvbWUgaW4gdHdvIHZhcmlhbnRzIC0gZHVtYiBhbmQgc21hcnQuICBUaGUgZHVtYiB2YXJpYW50IGp1c3QKK2FtcGxpZmllcywgYnV0IHRoZSBzbWFydCBvbmUgZGVjb2RlcyB0byBkaWdpdGFsIGFuZCBlbmNvZGVzIGJhY2sgYWxsIHBhY2tldHMKK2NvbWluZyB0aHJvdWdoLiAgVGhpcyBpcyBtdWNoIGJldHRlciBpZiB5b3UgaGF2ZSBzZXZlcmFsIGh1YnMgaW4gdGhlIG5ldCwKK3NpbmNlIG1hbnkgZHVtYiBhY3RpdmUgaHVicyBtYXkgd29yc2VuIHRoZSBzaWduYWwgcXVhbGl0eS4KKworQW5kIG5vdyB0byB0aGUgY2FibGluZy4gIFdoYXQgeW91IGNhbiBjb25uZWN0IHRvZ2V0aGVyOgorCisxLiBBIGNhcmQgdG8gYSBjYXJkLiAgVGhpcyBpcyB0aGUgc2ltcGxlc3Qgd2F5IG9mIGNyZWF0aW5nIGEgMi1jb21wdXRlcgorICAgbmV0d29yay4KKworMi4gQSBjYXJkIHRvIGEgcGFzc2l2ZSBodWIuICBSZW1lbWJlciB0aGF0IGFsbCB1bnVzZWQgY29ubmVjdG9ycyBvbiB0aGUgaHViCisgICBtdXN0IGJlIHByb3Blcmx5IHRlcm1pbmF0ZWQgd2l0aCA5MyBPaG0gKG9yIHNvbWV0aGluZyBlbHNlIGlmIHlvdSBkb24ndAorICAgaGF2ZSB0aGUgcmlnaHQgb25lcykgdGVybWluYXRvcnMuCisgICAJKEF2ZXJ5J3Mgbm90ZTogb29wcywgSSBkaWRuJ3Qga25vdyB0aGF0LiAgTWluZSAoVFYgY2FibGUpIHdvcmtzCisJYW55d2F5LCB0aG91Z2guKQorCiszLiBBIGNhcmQgdG8gYW4gYWN0aXZlIGh1Yi4gIEhlcmUgaXMgbm8gbmVlZCB0byB0ZXJtaW5hdGUgdGhlIHVudXNlZAorICAgY29ubmVjdG9ycyBleGNlcHQgc29tZSBraW5kIG9mIGFlc3RoZXRpYyBmZWVsaW5nLiAgQnV0LCB0aGVyZSBtYXkgbm90IGJlCisgICBtb3JlIHRoYW4gZWxldmVuIGFjdGl2ZSBodWJzIGJldHdlZW4gYW55IHR3byBjb21wdXRlcnMuICBUaGF0IG9mIGNvdXJzZQorICAgZG9lc24ndCBsaW1pdCB0aGUgbnVtYmVyIG9mIGFjdGl2ZSBodWJzIG9uIHRoZSBuZXR3b3JrLgorICAgCis0LiBBbiBhY3RpdmUgaHViIHRvIGFub3RoZXIuCisKKzUuIEFuIGFjdGl2ZSBodWIgdG8gcGFzc2l2ZSBodWIuCisKK1JlbWVtYmVyLCB0aGF0IHlvdSBjYW4gbm90IGNvbm5lY3QgdHdvIHBhc3NpdmUgaHVicyB0b2dldGhlci4gIFRoZSBwb3dlciBsb3NzCitpbXBsaWVkIGJ5IHN1Y2ggYSBjb25uZWN0aW9uIGlzIHRvbyBoaWdoIGZvciB0aGUgbmV0IHRvIG9wZXJhdGUgcmVsaWFibHkuCisKK0FuIGV4YW1wbGUgb2YgYSB0eXBpY2FsIEFSQ25ldCBuZXR3b3JrOgorCisgICAgICAgICAgIFIgICAgICAgICAgICAgICAgICAgICBTIC0gU1RBUiB0eXBlIGNhcmQgICAgICAgICAgICAgIAorICAgIFMtLS0tLS1ILS0tLS0tLS1BLS0tLS0tLVMgICAgUiAtIFRlcm1pbmF0b3IKKyAgICAgICAgICAgfCAgICAgICAgfCAgICAgICAgICAgIEggLSBIdWIgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgIHwgICAgICAgIHwgICAgICAgICAgICBBIC0gQWN0aXZlIGh1YiAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICB8ICAgUy0tLS1ILS0tLVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgUyAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICBTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCitUaGUgQlVTIHRvcG9sb2d5IGlzIHZlcnkgc2ltaWxhciB0byB0aGUgb25lIHVzZWQgYnkgRXRoZXJuZXQuICBUaGUgb25seQorZGlmZmVyZW5jZSBpcyBpbiBjYWJsZSBhbmQgdGVybWluYXRvcnM6IHRoZXkgc2hvdWxkIGJlIDkzIE9obS4gIEV0aGVybmV0Cit1c2VzIDUwIE9obSBpbXBlZGFuY2UuIFlvdSB1c2UgVCBjb25uZWN0b3JzIHRvIHB1dCB0aGUgY29tcHV0ZXJzIG9uIGEgc2luZ2xlCitsaW5lIG9mIGNhYmxlLCB0aGUgYnVzLiBZb3UgaGF2ZSB0byBwdXQgdGVybWluYXRvcnMgYXQgYm90aCBlbmRzIG9mIHRoZQorY2FibGUuIEEgdHlwaWNhbCBCVVMgQVJDbmV0IG5ldHdvcmsgbG9va3MgbGlrZToKKworICAgIFJULS0tLVQtLS0tLS1ULS0tLS0tVC0tLS0tLVQtLS0tLS1UUgorICAgICBCICAgIEIgICAgICBCICAgICAgQiAgICAgIEIgICAgICBCCisKKyAgQiAtIEJVUyB0eXBlIGNhcmQKKyAgUiAtIFRlcm1pbmF0b3IKKyAgVCAtIFQgY29ubmVjdG9yCisKK0J1dCB0aGF0IGlzIG5vdCBhbGwhIFRoZSB0d28gdHlwZXMgY2FuIGJlIGNvbm5lY3RlZCB0b2dldGhlci4gIEFjY29yZGluZyB0bwordGhlIG9mZmljaWFsIGRvY3VtZW50YXRpb24gdGhlIG9ubHkgd2F5IG9mIGNvbm5lY3RpbmcgdGhlbSBpcyB1c2luZyBhbiBhY3RpdmUKK2h1YjoKKworICAgICAgICAgQS0tLS0tLVQtLS0tLS1ULS0tLS0tVFIKKyAgICAgICAgIHwgICAgICBCICAgICAgQiAgICAgIEIKKyAgICAgUy0tLUgtLS1TCisgICAgICAgICB8CisgICAgICAgICBTCisKK1RoZSBvZmZpY2lhbCBkb2NzIGFsc28gc3RhdGUgdGhhdCB5b3UgY2FuIHVzZSBTVEFSIGNhcmRzIGF0IHRoZSBlbmRzIG9mCitCVVMgbmV0d29yayBpbiBwbGFjZSBvZiBhIEJVUyBjYXJkIGFuZCBhIHRlcm1pbmF0b3I6CisKKyAgICAgUy0tLS0tLVQtLS0tLS1ULS0tLS0tUworICAgICAgICAgICAgQiAgICAgIEIKKworQnV0LCBhY2NvcmRpbmcgdG8gbXkgb3duIGV4cGVyaW1lbnRzLCB5b3UgY2FuIHNpbXBseSBoYW5nIGEgQlVTIHR5cGUgY2FyZAorYW55d2hlcmUgaW4gbWlkZGxlIG9mIGEgY2FibGUgaW4gYSBTVEFSIHRvcG9sb2d5IG5ldHdvcmsuICBBbmQgbW9yZSAtIHlvdQorY2FuIHVzZSB0aGUgYnVzIGNhcmQgaW4gcGxhY2Ugb2YgYW55IHN0YXIgY2FyZCBpZiB5b3UgdXNlIGEgdGVybWluYXRvci4gVGhlbgoreW91IGNhbiBidWlsZCB2ZXJ5IGNvbXBsaWNhdGVkIG5ldHdvcmtzIGZ1bGZpbGxpbmcgYWxsIHlvdXIgbmVlZHMhICBBbgorZXhhbXBsZToKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgICAgICAgIFJULS0tLS0tVC0tLS0tLS1ULS0tLS0tSC0tLS0tLVMKKyAgICAgICAgICAgIEIgICAgICBCICAgICAgIEIgICAgICB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICBSCisgICAgUy0tLS0tLUEtLS0tLS1ULS0tLS0tLVQtLS0tLS0tQS0tLS0tLS1ILS0tLS0tVFIgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICB8ICAgICAgQiAgICAgICBCICAgICAgIHwgICAgICAgfCAgICAgIEIgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgIHwgICBTICAgICAgICAgICAgICAgICBCVCAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgIHwgICB8ICAgICAgICAgICAgICAgICAgfCAgUy0tLS1BLS0tLS1TCisgICAgUy0tLS0tLUgtLS1BLS0tLVMgICAgICAgICAgICAgfCAgICAgICB8IAorICAgICAgICAgICB8ICAgfCAgICAgIFMtLS0tLS1ULS0tLUgtLS1TICAgfAorICAgICAgICAgICBTICAgUyAgICAgICAgICAgICBCICAgIFIgICAgICAgUyAgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKK0EgYmFzaWNhbGx5IGRpZmZlcmVudCBjYWJsaW5nIHNjaGVtZSBpcyB1c2VkIHdpdGggVHdpc3RlZCBQYWlyIGNhYmxpbmcuIEVhY2gKK29mIHRoZSBUUCBjYXJkcyBoYXMgdHdvIFJKIChwaG9uZS1jb3JkIHN0eWxlKSBjb25uZWN0b3JzLiAgVGhlIGNhcmRzIGFyZQordGhlbiBkYWlzeS1jaGFpbmVkIHRvZ2V0aGVyIHVzaW5nIGEgY2FibGUgY29ubmVjdGluZyBldmVyeSB0d28gbmVpZ2hib3JpbmcKK2NhcmRzLiAgVGhlIGVuZHMgYXJlIHRlcm1pbmF0ZWQgd2l0aCBSSiA5MyBPaG0gdGVybWluYXRvcnMgd2hpY2ggcGx1ZyBpbnRvCit0aGUgZW1wdHkgY29ubmVjdG9ycyBvZiBjYXJkcyBvbiB0aGUgZW5kcyBvZiB0aGUgY2hhaW4uICBBbiBleGFtcGxlOgorCisgICAgICAgICAgX19fX19fX19fX18gICBfX19fX19fX19fXworICAgICAgX1JffF8gICAgICAgICBffF98XyAgICAgICAgIF98X1JfICAKKyAgICAgfCAgICAgfCAgICAgICB8ICAgICB8ICAgICAgIHwgICAgIHwgICAgICAKKyAgICAgfENhcmQgfCAgICAgICB8Q2FyZCB8ICAgICAgIHxDYXJkIHwgICAgIAorICAgICB8X19fX198ICAgICAgIHxfX19fX3wgICAgICAgfF9fX19ffCAgICAgICAgICAKKworCitUaGVyZSBhcmUgYWxzbyBodWJzIGZvciB0aGUgVFAgdG9wb2xvZ3kuICBUaGVyZSBpcyBub3RoaW5nIGRpZmZpY3VsdAoraW52b2x2ZWQgaW4gdXNpbmcgdGhlbTsgeW91IGp1c3QgY29ubmVjdCBhIFRQIGNoYWluIHRvIGEgaHViIG9uIGFueSBlbmQgb3IKK2V2ZW4gYXQgYm90aC4gIFRoaXMgd2F5IHlvdSBjYW4gY3JlYXRlIGFsbW9zdCBhbnkgbmV0d29yayBjb25maWd1cmF0aW9uLiAKK1RoZSBtYXhpbXVtIG9mIDExIGh1YnMgYmV0d2VlbiBhbnkgdHdvIGNvbXB1dGVycyBvbiB0aGUgbmV0IGFwcGxpZXMgaGVyZSBhcword2VsbC4gIEFuIGV4YW1wbGU6CisKKyAgICBSUC0tLS0tLS1QLS0tLS0tLS1QLS0tLS0tLS1ILS0tLS1QLS0tLS0tUC0tLS0tUFIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgICBSUC0tLS0tSC0tLS0tLS0tUC0tLS0tLS0tSC0tLS0tUC0tLS0tLVBSCisgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgfAorICAgICAgICAgICAgIFBSICAgICAgICAgICAgICAgIFBSCisKKyAgICBSIC0gUkogVGVybWluYXRvcgorICAgIFAgLSBUUCBDYXJkCisgICAgSCAtIFRQIEh1YgorCitMaWtlIGFueSBuZXR3b3JrLCBBUkNuZXQgaGFzIGEgbGltaXRlZCBjYWJsZSBsZW5ndGguICBUaGVzZSBhcmUgdGhlIG1heGltdW0KK2NhYmxlIGxlbmd0aHMgYmV0d2VlbiB0d28gYWN0aXZlIGVuZHMgKGFuIGFjdGl2ZSBlbmQgYmVpbmcgYW4gYWN0aXZlIGh1YiBvcgorYSBTVEFSIGNhcmQpLgorCisJCVJHLTYyICAgICAgIDkzIE9obSB1cCB0byA2NTAgbQorCQlSRy01OS9VICAgICA3NSBPaG0gdXAgdG8gNDU3IG0KKwkJUkctMTEvVSAgICAgNzUgT2htIHVwIHRvIDUzMyBtCisJCUlCTSBUeXBlIDEgMTUwIE9obSB1cCB0byAyMDAgbQorCQlJQk0gVHlwZSAzIDEwMCBPaG0gdXAgdG8gMTAwIG0KKworVGhlIG1heGltdW0gbGVuZ3RoIG9mIGFsbCBjYWJsZXMgY29ubmVjdGVkIHRvIGEgcGFzc2l2ZSBodWIgaXMgbGltaXRlZCB0byA2NQorbWV0ZXJzIGZvciBSRy02MiBjYWJsaW5nOyBsZXNzIGZvciBvdGhlcnMuICBZb3UgY2FuIHNlZSB0aGF0IHVzaW5nIHBhc3NpdmUKK2h1YnMgaW4gYSBsYXJnZSBuZXR3b3JrIGlzIGEgYmFkIGlkZWEuIFRoZSBtYXhpbXVtIGxlbmd0aCBvZiBhIHNpbmdsZSAiQlVTCitUcnVuayIgaXMgYWJvdXQgMzAwIG1ldGVycyBmb3IgUkctNjIuIFRoZSBtYXhpbXVtIGRpc3RhbmNlIGJldHdlZW4gdGhlIHR3bworbW9zdCBkaXN0YW50IHBvaW50cyBvZiB0aGUgbmV0IGlzIGxpbWl0ZWQgdG8gMzAwMCBtZXRlcnMuIFRoZSBtYXhpbXVtIGxlbmd0aAorb2YgYSBUUCBjYWJsZSBiZXR3ZWVuIHR3byBjYXJkcy9odWJzIGlzIDY1MCBtZXRlcnMuCisKKworU0VUVElORyBUSEUgSlVNUEVSUworLS0tLS0tLS0tLS0tLS0tLS0tLQorCitBbGwgQVJDbmV0IGNhcmRzIHNob3VsZCBoYXZlIGEgdG90YWwgb2YgZm91ciBvciBmaXZlIGRpZmZlcmVudCBzZXR0aW5nczoKKworICAtIHRoZSBJL08gYWRkcmVzczogIHRoaXMgaXMgdGhlICJwb3J0IiB5b3VyIEFSQ25ldCBjYXJkIGlzIG9uLiAgUHJvYmVkCisgICAgdmFsdWVzIGluIHRoZSBMaW51eCBBUkNuZXQgZHJpdmVyIGFyZSBvbmx5IGZyb20gMHgyMDAgdGhyb3VnaCAweDNGMC4gKElmCisgICAgeW91ciBjYXJkIGhhcyBhZGRpdGlvbmFsIG9uZXMsIHdoaWNoIGlzIHBvc3NpYmxlLCBwbGVhc2UgdGVsbCBtZS4pIFRoaXMKKyAgICBzaG91bGQgbm90IGJlIHRoZSBzYW1lIGFzIGFueSBvdGhlciBkZXZpY2Ugb24geW91ciBzeXN0ZW0uICBBY2NvcmRpbmcgdG8KKyAgICBhIGRvYyBJIGdvdCBmcm9tIE5vdmVsbCwgTVMgV2luZG93cyBwcmVmZXJzIHZhbHVlcyBvZiAweDMwMCBvciBtb3JlLAorICAgIGVhdGluZyBuZXQgY29ubmVjdGlvbnMgb24gbXkgc3lzdGVtIChhdCBsZWFzdCkgb3RoZXJ3aXNlLiAgTXkgZ3Vlc3MgaXMKKyAgICB0aGlzIG1heSBiZSBiZWNhdXNlLCBpZiB5b3VyIGNhcmQgaXMgYXQgMHgyRTAsIHByb2JpbmcgZm9yIGEgc2VyaWFsIHBvcnQKKyAgICBhdCAweDJFOCB3aWxsIHJlc2V0IHRoZSBjYXJkIGFuZCBwcm9iYWJseSBtZXNzIHRoaW5ncyB1cCByb3lhbGx5LgorCS0gQXZlcnkncyBmYXZvdXJpdGU6IDB4MzAwLgorCisgIC0gdGhlIElSUTogb24gIDgtYml0IGNhcmRzLCBpdCBtaWdodCBiZSAyICg5KSwgMywgNCwgNSwgb3IgNy4KKyAgICAgICAgICAgICBvbiAxNi1iaXQgY2FyZHMsIGl0IG1pZ2h0IGJlIDIgKDkpLCAzLCA0LCA1LCA3LCBvciAxMC0xNS4KKyAgICAgICAgICAgICAKKyAgICBNYWtlIHN1cmUgdGhpcyBpcyBkaWZmZXJlbnQgZnJvbSBhbnkgb3RoZXIgY2FyZCBvbiB5b3VyIHN5c3RlbS4gIE5vdGUKKyAgICB0aGF0IElSUTIgaXMgdGhlIHNhbWUgYXMgSVJROSwgYXMgZmFyIGFzIExpbnV4IGlzIGNvbmNlcm5lZC4gIFlvdSBjYW4KKyAgICAiY2F0IC9wcm9jL2ludGVycnVwdHMiIGZvciBhIHNvbWV3aGF0IGNvbXBsZXRlIGxpc3Qgb2Ygd2hpY2ggb25lcyBhcmUgaW4KKyAgICB1c2UgYXQgYW55IGdpdmVuIHRpbWUuICBIZXJlIGlzIGEgbGlzdCBvZiBjb21tb24gdXNhZ2VzIGZyb20gVm9qdGVjaAorICAgIFBhdmxpayA8dm9qdGVjaEBzdXNlLmN6PjoKKyAgICAJKCJOb3Qgb24gYnVzIiBtZWFucyB0aGVyZSBpcyBubyB3YXkgZm9yIGEgY2FyZCB0byBnZW5lcmF0ZSB0aGlzCisJaW50ZXJydXB0KQorCUlSUSAgMCAtIFRpbWVyIDAgKE5vdCBvbiBidXMpCisJSVJRICAxIC0gS2V5Ym9hcmQgKE5vdCBvbiBidXMpCisJSVJRICAyIC0gSVJRIENvbnRyb2xsZXIgMiAoTm90IG9uIGJ1cywgbm9yIGRvZXMgaW50ZXJydXB0IHRoZSBDUFUpCisJSVJRICAzIC0gQ09NMgorCUlSUSAgNCAtIENPTTEKKwlJUlEgIDUgLSBGUkVFIChMUFQyIGlmIHlvdSBoYXZlIGl0OyBzb21ldGltZXMgQ09NMzsgbWF5YmUgUExJUCkKKwlJUlEgIDYgLSBGbG9wcHkgZGlzayBjb250cm9sbGVyCisJSVJRICA3IC0gRlJFRSAoTFBUMSBpZiB5b3UgZG9uJ3QgdXNlIHRoZSBwb2xsaW5nIGRyaXZlcjsgUExJUCkgCisJSVJRICA4IC0gUmVhbHRpbWUgQ2xvY2sgSW50ZXJydXB0IChOb3Qgb24gYnVzKQorCUlSUSAgOSAtIEZSRUUgKFZHQSB2ZXJ0aWNhbCBzeW5jIGludGVycnVwdCBpZiBlbmFibGVkKQorCUlSUSAxMCAtIEZSRUUKKwlJUlEgMTEgLSBGUkVFCisJSVJRIDEyIC0gRlJFRQorCUlSUSAxMyAtIE51bWVyaWMgQ29wcm9jZXNzb3IgKE5vdCBvbiBidXMpCisJSVJRIDE0IC0gRml4ZWQgRGlzayBDb250cm9sbGVyCisJSVJRIDE1IC0gRlJFRSAoRml4ZWQgRGlzayBDb250cm9sbGVyIDIgaWYgeW91IGhhdmUgaXQpIAorCQorCU5vdGU6IElSUSA5IGlzIHVzZWQgb24gc29tZSB2aWRlbyBjYXJkcyBmb3IgdGhlICJ2ZXJ0aWNhbCByZXRyYWNlIgorCWludGVycnVwdC4gIFRoaXMgaW50ZXJydXB0IHdvdWxkIGhhdmUgYmVlbiBoYW5keSBmb3IgdGhpbmdzIGxpa2UKKwl2aWRlbyBnYW1lcywgYXMgaXQgb2NjdXJzIGV4YWN0bHkgb25jZSBwZXIgc2NyZWVuIHJlZnJlc2gsIGJ1dAorCXVuZm9ydHVuYXRlbHkgSUJNIGNhbmNlbGxlZCB0aGlzIGZlYXR1cmUgc3RhcnRpbmcgd2l0aCB0aGUgb3JpZ2luYWwKKwlWR0EgYW5kIHRodXMgbWFueSBWR0EvU1ZHQSBjYXJkcyBkbyBub3Qgc3VwcG9ydCBpdC4gIEZvciB0aGlzCisJcmVhc29uLCBubyBtb2Rlcm4gc29mdHdhcmUgdXNlcyB0aGlzIGludGVycnVwdCBhbmQgaXQgY2FuIGFsbW9zdAorCWFsd2F5cyBiZSBzYWZlbHkgZGlzYWJsZWQsIGlmIHlvdXIgdmlkZW8gY2FyZCBzdXBwb3J0cyBpdCBhdCBhbGwuCisJCisJSWYgeW91ciBjYXJkIGZvciBzb21lIHJlYXNvbiBDQU5OT1QgZGlzYWJsZSB0aGlzIElSUSAodXN1YWxseSB0aGVyZQorCWlzIGEganVtcGVyKSwgb25lIHNvbHV0aW9uIHdvdWxkIGJlIHRvIGNsaXAgdGhlIHByaW50ZWQgY2lyY3VpdAorCWNvbnRhY3Qgb24gdGhlIGJvYXJkOiBpdCdzIHRoZSBmb3VydGggY29udGFjdCBmcm9tIHRoZSBsZWZ0IG9uIHRoZQorCWJhY2sgc2lkZS4gIEkgdGFrZSBubyByZXNwb25zaWJpbGl0eSBpZiB5b3UgdHJ5IHRoaXMuCisKKwktIEF2ZXJ5J3MgZmF2b3VyaXRlOiBJUlEyIChhY3R1YWxseSBJUlE5KS4gIFdhdGNoIHRoYXQgVkdBLCB0aG91Z2guCisKKyAgLSB0aGUgbWVtb3J5IGFkZHJlc3M6ICBVbmxpa2UgbW9zdCBjYXJkcywgQVJDbmV0cyB1c2UgInNoYXJlZCBtZW1vcnkiIGZvcgorICAgIGNvcHlpbmcgYnVmZmVycyBhcm91bmQuICBNYWtlIFNVUkUgaXQgZG9lc24ndCBjb25mbGljdCB3aXRoIGFueSBvdGhlcgorICAgIHVzZWQgbWVtb3J5IGluIHlvdXIgc3lzdGVtIQorCUEwMDAwCQktIFZHQSBncmFwaGljcyBtZW1vcnkgKG9rIGlmIHlvdSBkb24ndCBoYXZlIFZHQSkKKyAgICAgICAgQjAwMDAJCS0gTW9ub2Nocm9tZSB0ZXh0IG1vZGUKKyAgICAgICAgQzAwMDAJCVwgIE9uZSBvZiB0aGVzZSBpcyB5b3VyIFZHQSBCSU9TIC0gdXN1YWxseSBDMDAwMC4KKyAgICAgICAgRTAwMDAJCS8KKyAgICAgICAgRjAwMDAJCS0gU3lzdGVtIEJJT1MKKworICAgIEFueXRoaW5nIGxlc3MgdGhhbiAweEEwMDAwIGlzLCB3ZWxsLCBhIEJBRCBpZGVhIHNpbmNlIGl0IGlzbid0IGFib3ZlCisgICAgNjQway4KKwktIEF2ZXJ5J3MgZmF2b3VyaXRlOiAweEQwMDAwCisKKyAgLSB0aGUgc3RhdGlvbiBhZGRyZXNzOiAgRXZlcnkgQVJDbmV0IGNhcmQgaGFzIGl0cyBvd24gInVuaXF1ZSIgbmV0d29yaworICAgIGFkZHJlc3MgZnJvbSAwIHRvIDI1NS4gIFVubGlrZSBFdGhlcm5ldCwgeW91IGNhbiBzZXQgdGhpcyBhZGRyZXNzCisgICAgeW91cnNlbGYgd2l0aCBhIGp1bXBlciBvciBzd2l0Y2ggKG9yIG9uIHNvbWUgY2FyZHMsIHdpdGggc3BlY2lhbAorICAgIHNvZnR3YXJlKS4gIFNpbmNlIGl0J3Mgb25seSA4IGJpdHMsIHlvdSBjYW4gb25seSBoYXZlIDI1NCBBUkNuZXQgY2FyZHMKKyAgICBvbiBhIG5ldHdvcmsuICBET04nVCB1c2UgMCBvciAyNTUsIHNpbmNlIHRoZXNlIGFyZSByZXNlcnZlZCAoYWx0aG91Z2gKKyAgICBuZWF0IHN0dWZmIHdpbGwgcHJvYmFibHkgaGFwcGVuIGlmIHlvdSBETyB1c2UgdGhlbSkuICBCeSB0aGUgd2F5LCBpZiB5b3UKKyAgICBoYXZlbid0IGFscmVhZHkgZ3Vlc3NlZCwgZG9uJ3Qgc2V0IHRoaXMgdGhlIHNhbWUgYXMgYW55IG90aGVyIEFSQ25ldCBvbgorICAgIHlvdXIgbmV0d29yayEKKwktIEF2ZXJ5J3MgZmF2b3VyaXRlOiAgMyBhbmQgNC4gIE5vdCB0aGF0IGl0IG1hdHRlcnMuCisKKyAgLSBUaGVyZSBtYXkgYmUgRVRTMSBhbmQgRVRTMiBzZXR0aW5ncy4gIFRoZXNlIG1heSBvciBtYXkgbm90IG1ha2UgYQorICAgIGRpZmZlcmVuY2Ugb24geW91ciBjYXJkIChtYW55IG1hbnVhbHMgY2FsbCB0aGVtICJyZXNlcnZlZCIpLCBidXQgYXJlCisgICAgdXNlZCB0byBjaGFuZ2UgdGhlIGRlbGF5cyB1c2VkIHdoZW4gcG93ZXJpbmcgdXAgYSBjb21wdXRlciBvbiB0aGUKKyAgICBuZXR3b3JrLiAgVGhpcyBpcyBvbmx5IG5lY2Vzc2FyeSB3aGVuIHdpcmluZyBWRVJZIGxvbmcgcmFuZ2UgQVJDbmV0CisgICAgbmV0d29ya3MsIG9uIHRoZSBvcmRlciBvZiA0a20gb3Igc287IGluIGFueSBjYXNlLCB0aGUgb25seSByZWFsCisgICAgcmVxdWlyZW1lbnQgaGVyZSBpcyB0aGF0IGFsbCBjYXJkcyBvbiB0aGUgbmV0d29yayB3aXRoIEVUUzEgYW5kIEVUUzIKKyAgICBqdW1wZXJzIGhhdmUgdGhlbSBpbiB0aGUgc2FtZSBwb3NpdGlvbi4gIENocmlzIEhpbmR5IDxjaHJpc2hAaW8ub3JnPgorICAgIHNlbnQgaW4gYSBjaGFydCB3aXRoIGFjdHVhbCB2YWx1ZXMgZm9yIHRoaXM6CisJRVQxCUVUMglSZXNwb25zZSBUaW1lCVJlY29uZmlndXJhdGlvbiBUaW1lCisJLS0tCS0tLQktLS0tLS0tLS0tLS0tCS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJb3BlbglvcGVuCTc0Ljd1cwkJODQwdXMKKwlvcGVuCWNsb3NlZAkyODMuNHVzCQkxNjgwdXMKKwljbG9zZWQJb3Blbgk1NjEuOHVzCQkxNjgwdXMKKwljbG9zZWQJY2xvc2VkCTExMTguNnVzCTE2ODB1cworICAgIAorICAgIE1ha2Ugc3VyZSB5b3Ugc2V0IEVUUzEgYW5kIEVUUzIgdG8gdGhlIFNBTUUgVkFMVUUgZm9yIGFsbCBjYXJkcyBvbiB5b3VyCisgICAgbmV0d29yay4KKyAgICAKK0Fsc28sIG9uIG1hbnkgY2FyZHMgKG5vdCBtaW5lLCB0aG91Z2gpIHRoZXJlIGFyZSByZWQgYW5kIGdyZWVuIExFRCdzLiAKK1ZvanRlY2ggUGF2bGlrIDx2b2p0ZWNoQHN1c2UuY3o+IHRlbGxzIG1lIHRoaXMgaXMgd2hhdCB0aGV5IG1lYW46CisJR1JFRU4gICAgICAgICAgIFJFRCAgICAgICAgICAgICBTdGF0dXMKKwktLS0tLQkJLS0tCQktLS0tLS0KKwlPRkYgICAgICAgICAgICAgT0ZGICAgICAgICAgICAgIFBvd2VyIG9mZgorCU9GRiAgICAgICAgICAgICBTaG9ydCBmbGFzaGVzICAgQ2FibGluZyBwcm9ibGVtcyAoYnJva2VuIGNhYmxlIG9yIG5vdAorCQkJCQkgIHRlcm1pbmF0ZWQpCisJT0ZGIChzaG9ydCkgICAgIE9OICAgICAgICAgICAgICBDYXJkIGluaXQKKwlPTiAgICAgICAgICAgICAgT04gICAgICAgICAgICAgIE5vcm1hbCBzdGF0ZSAtIGV2ZXJ5dGhpbmcgT0ssIG5vdGhpbmcKKwkJCQkJICBoYXBwZW5zCisJT04gICAgICAgICAgICAgIExvbmcgZmxhc2hlcyAgICBEYXRhIHRyYW5zZmVyCisJT04gICAgICAgICAgICAgIE9GRiAgICAgICAgICAgICBOZXZlciBoYXBwZW5zIChtYXliZSB3aGVuIHdyb25nIElEKQorCisKK1RoZSBmb2xsb3dpbmcgaXMgYWxsIHRoZSBzcGVjaWZpYyBpbmZvcm1hdGlvbiBwZW9wbGUgaGF2ZSBzZW50IG1lIGFib3V0Cit0aGVpciBvd24gcGFydGljdWxhciBBUkNuZXQgY2FyZHMuICBJdCBpcyBvZmZpY2lhbGx5IGEgbWVzcywgYW5kIGNvbnRhaW5zCitodWdlIGFtb3VudHMgb2YgZHVwbGljYXRlZCBpbmZvcm1hdGlvbi4gIEkgaGF2ZSBubyB0aW1lIHRvIGZpeCBpdC4gIElmIHlvdQord2FudCB0bywgUExFQVNFIERPISAgSnVzdCBzZW5kIG1lIGEgJ2RpZmYgLXUnIG9mIGFsbCB5b3VyIGNoYW5nZXMuCisKK1RoZSBtb2RlbCAjIGlzIGxpc3RlZCByaWdodCBhYm92ZSBzcGVjaWZpY3MgZm9yIHRoYXQgY2FyZCwgc28geW91IHNob3VsZCBiZQorYWJsZSB0byB1c2UgeW91ciB0ZXh0IHZpZXdlcidzICJzZWFyY2giIGZ1bmN0aW9uIHRvIGZpbmQgdGhlIGVudHJ5IHlvdSB3YW50LiAKK0lmIHlvdSBkb24ndCBLTk9XIHdoYXQga2luZCBvZiBjYXJkIHlvdSBoYXZlLCB0cnkgbG9va2luZyB0aHJvdWdoIHRoZQordmFyaW91cyBkaWFncmFtcyB0byBzZWUgaWYgeW91IGNhbiB0ZWxsLgorCitJZiB5b3VyIG1vZGVsIGlzbid0IGxpc3RlZCBhbmQvb3IgaGFzIGRpZmZlcmVudCBzZXR0aW5ncywgUExFQVNFIFBMRUFTRQordGVsbCBtZS4gIEkgaGFkIHRvIGZpZ3VyZSBtaW5lIG91dCB3aXRob3V0IHRoZSBtYW51YWwsIGFuZCBpdCBXQVNOJ1QgRlVOIQorCitFdmVuIGlmIHlvdXIgQVJDbmV0IG1vZGVsIGlzbid0IGxpc3RlZCwgYnV0IGhhcyB0aGUgc2FtZSBqdW1wZXJzIGFzIGFub3RoZXIKK21vZGVsIHRoYXQgaXMsIHBsZWFzZSBlLW1haWwgbWUgdG8gc2F5IHNvLgorCitDYXJkcyBMaXN0ZWQgaW4gdGhpcyBmaWxlIChpbiB0aGlzIG9yZGVyLCBtb3N0bHkpOgorCisJTWFudWZhY3R1cmVyCU1vZGVsICMJCQlCaXRzCisJLS0tLS0tLS0tLS0tCS0tLS0tLS0JCQktLS0tCisJU01DCQlQQzEwMAkJCTgKKwlTTUMJCVBDMTEwCQkJOAorCVNNQwkJUEMxMjAJCQk4CisJU01DCQlQQzEzMAkJCTgKKwlTTUMJCVBDMjcwRQkJCTgKKwlTTUMJCVBDNTAwCQkJMTYKKwlTTUMJCVBDNTAwTG9uZ2JvYXJkCQkxNgorCVNNQwkJUEM1NTBMb25nYm9hcmQJCTE2CisJU01DCQlQQzYwMAkJCTE2CisJU01DCQlQQzcxMAkJCTgKKwlTTUM/CQlMQ1MtODgzMCgtVCkJCTgvMTYKKwlQdXJlZGF0YQlQREk1MDcJCQk4CisJQ05ldCBUZWNoCUNOMTIwLVNlcmllcwkJOAorCUNOZXQgVGVjaAlDTjE2MC1TZXJpZXMJCTE2CisJTGFudGVjaD8JVU05MDY1TCBjaGlwc2V0CQk4CisJQWNlcgkJNTIxMC0wMDMJCTgKKwlEYXRhcG9pbnQ/CUxBTi1BUkMtOAkJOAorCVRvcHdhcmUJCVRBLUFSQy8xMAkJOAorCVRob21hcy1Db25yYWQJNTAwLTYyNDItMDA5NyBSRVYgQQk4CisJV2F0ZXJsb28/CShDKTE5ODUgV2F0ZXJsb28gTWljcm8uIDgKKwlObyBOYW1lCQktLQkJCTgvMTYKKwlObyBOYW1lCQlUYWl3YW4gUi5PLkM/CQk4CisJTm8gTmFtZQkJTW9kZWwgOTA1OAkJOAorCVRpYXJhCQlUaWFyYSBMYW5jYXJkPwkJOAorCQorCisqKiBTTUMgPSBTdGFuZGFyZCBNaWNyb3N5c3RlbXMgQ29ycC4KKyoqIENOZXQgVGVjaCA9IENOZXQgVGVjaG5vbG9neSwgSW5jLgorCisKK1VuY2xhc3NpZmllZCBTdHVmZgorLS0tLS0tLS0tLS0tLS0tLS0tCisgIC0gUGxlYXNlIHNlbmQgYW55IG90aGVyIGluZm9ybWF0aW9uIHlvdSBjYW4gZmluZC4KKyAgCisgIC0gQW5kIHNvbWUgb3RoZXIgc3R1ZmYgKG1vcmUgaW5mbyBpcyB3ZWxjb21lISk6CisgICAgIEZyb206IHJvb3RAdWx0cmF3b3JsZC54czRhbGwubmwgKFRpbW8gSGlsYnJpbmspCisgICAgIFRvOiBhcGVud2FyckBmb3huZXQubmV0IChBdmVyeSBQZW5uYXJ1bikKKyAgICAgRGF0ZTogV2VkLCAyNiBPY3QgMTk5NCAwMjoxMDozMiArMDAwMCAoR01UKQorICAgICBSZXBseS1UbzogdGltb2hAeHM0YWxsLm5sCisKKyAgICAgWy4uLnBhcnRzIGRlbGV0ZWQuLi5dCisKKyAgICAgQWJvdXQgdGhlIGp1bXBlcnM6IE9uIG15IFBDMTMwIHRoZXJlIGlzIG9uZSBtb3JlIGp1bXBlciwgbG9jYXRlZCBuZWFyIHRoZQorICAgICBjYWJsZS1jb25uZWN0b3IgYW5kIGl0J3MgZm9yIGNoYW5naW5nIHRvIHN0YXIgb3IgYnVzIHRvcG9sb2d5OyAKKyAgICAgY2xvc2VkOiBzdGFyIC0gb3BlbjogYnVzCisgICAgIE9uIHRoZSBQQzUwMCBhcmUgc29tZSBtb3JlIGp1bXBlci1waW5zLCBvbmUgYmxvY2sgbGFiZWxlZCB3aXRoIFJYLFBETixUWEkKKyAgICAgYW5kIGFub3RoZXIgd2l0aCBBTEUsTEExNyxMQTE4LExBMTkgdGhlc2UgYXJlIHVuZG9jdW1lbnRlZC4uCisKKyAgICAgWy4uLm1vcmUgcGFydHMgZGVsZXRlZC4uLl0KKworICAgICAtLS0gQ1VUIC0tLQorCisKKyoqIFN0YW5kYXJkIE1pY3Jvc3lzdGVtcyBDb3JwIChTTUMpICoqCitQQzEwMCwgUEMxMTAsIFBDMTIwLCBQQzEzMCAoOC1iaXQgY2FyZHMpCitQQzUwMCwgUEM2MDAgKDE2LWJpdCBjYXJkcykKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAtIG1haW5seSBmcm9tIEF2ZXJ5IFBlbm5hcnVuIDxhcGVud2FyckB3b3JsZHZpc2lvbnMuY2E+LiAgVmFsdWVzIGRlcGljdGVkCisgICAgYXJlIGZyb20gQXZlcnkncyBzZXR1cC4KKyAgLSBzcGVjaWFsIHRoYW5rcyB0byBUaW1vIEhpbGJyaW5rIDx0aW1vaEB4czRhbGwubmw+IGZvciBub3RpbmcgdGhhdCBQQzEyMCwKKyAgICAxMzAsIDUwMCwgYW5kIDYwMCBhbGwgaGF2ZSB0aGUgc2FtZSBzd2l0Y2hlcyBhcyBBdmVyeSdzIFBDMTAwLiAKKyAgICBQQzUwMC82MDAgaGF2ZSBzZXZlcmFsIGV4dHJhLCB1bmRvY3VtZW50ZWQgcGlucyB0aG91Z2guICg/KQorICAtIFBDMTEwIHNldHRpbmdzIHdlcmUgdmVyaWZpZWQgYnkgU3RlcGhlbiBBLiBXb29kIDxzYXdAY2ViYWYuZ292PgorICAtIEFsc28sIHRoZSBKUC0gYW5kIFMtbnVtYmVycyBwcm9iYWJseSBkb24ndCBtYXRjaCB5b3VyIGNhcmQgZXhhY3RseS4gIFRyeQorICAgIHRvIGZpbmQganVtcGVycy9zd2l0Y2hlcyB3aXRoIHRoZSBzYW1lIG51bWJlciBvZiBzZXR0aW5ncyAtIGl0J3MKKyAgICBwcm9iYWJseSBtb3JlIHJlbGlhYmxlLgorICAKKworICAgICBKUDUJCSAgICAgICBbfF0gICAgOiAgICA6ICAgIDogICAgOgorKElSUSBTZXR0aW5nKQkJICAgICAgSVJRMiAgSVJRMyBJUlE0IElSUTUgSVJRNworCQlQdXQgZXhhY3RseSBvbmUganVtcGVyIG9uIGV4YWN0bHkgb25lIHNldCBvZiBwaW5zLgorCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgMSAgMiAgIDMgIDQgIDUgIDYgICA3ICA4ICA5IDEwCisgICAgIFMxICAgICAgICAgICAgICAgIC8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXAorKEkvTyBhbmQgTWVtb3J5ICAgICAgICB8ICAxICAxICogMCAgMCAgMCAgMCAqIDEgIDEgIDAgIDEgIHwKKyBhZGRyZXNzZXMpICAgICAgICAgICAgXC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0vCisgICAgICAgICAgICAgICAgICAgICAgICAgIHwtLXwgICB8LS0tLS0tLS18ICAgfC0tLS0tLS0tfAorICAgICAgICAgICAgICAgICAgICAgICAgICAoYSkgICAgICAgKGIpICAgICAgICAgICAobSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgV0FSTklORy4gIEl0J3MgdmVyeSBpbXBvcnRhbnQgd2hlbiBzZXR0aW5nIHRoZXNlIHdoaWNoIHdheQorICAgICAgICAgICAgICAgIHlvdSdyZSBob2xkaW5nIHRoZSBjYXJkLCBhbmQgd2hpY2ggd2F5IHlvdSB0aGluayBpcyAnMSchCisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgSWYgeW91IHN1c3BlY3QgdGhhdCB5b3VyIHNldHRpbmdzIGFyZSBub3QgYmVpbmcgbWFkZQorCQljb3JyZWN0bHksIHRyeSByZXZlcnNpbmcgdGhlIGRpcmVjdGlvbiBvciBpbnZlcnRpbmcgdGhlCisJCXN3aXRjaCBwb3NpdGlvbnMuCisKKwkJYTogVGhlIGZpcnN0IGRpZ2l0IG9mIHRoZSBJL08gYWRkcmVzcy4KKwkJCVNldHRpbmcJCVZhbHVlCisJCQktLS0tLS0tCQktLS0tLQorCQkJMDAJCTAKKwkJCTAxCQkxCisJCQkxMAkJMgorCQkJMTEJCTMKKworCQliOiBUaGUgc2Vjb25kIGRpZ2l0IG9mIHRoZSBJL08gYWRkcmVzcy4KKwkJCVNldHRpbmcJCVZhbHVlCisJCQktLS0tLS0tCQktLS0tLQorCQkJMDAwMAkJMAorCQkJMDAwMQkJMQorCQkJMDAxMAkJMgorCQkJLi4uCQkuLi4KKwkJCTExMTAJCUUKKwkJCTExMTEJCUYKKworCQlUaGUgSS9PIGFkZHJlc3MgaXMgaW4gdGhlIGZvcm0gYWIwLiAgRm9yIGV4YW1wbGUsIGlmCisJCWEgaXMgMHgyIGFuZCBiIGlzIDB4RSwgdGhlIGFkZHJlc3Mgd2lsbCBiZSAweDJFMC4KKworCQlETyBOT1QgU0VUIFRISVMgTEVTUyBUSEFOIDB4MjAwISEhISEKKworCisJCW06IFRoZSBmaXJzdCBkaWdpdCBvZiB0aGUgbWVtb3J5IGFkZHJlc3MuCisJCQlTZXR0aW5nCQlWYWx1ZQorCQkJLS0tLS0tLQkJLS0tLS0KKwkJCTAwMDAJCTAKKwkJCTAwMDEJCTEKKwkJCTAwMTAJCTIKKwkJCS4uLgkJLi4uCisJCQkxMTEwCQlFCisJCQkxMTExCQlGCisKKwkJVGhlIG1lbW9yeSBhZGRyZXNzIGlzIGluIHRoZSBmb3JtIG0wMDAwLiAgRm9yIGV4YW1wbGUsIGlmCisJCW0gaXMgRCwgdGhlIGFkZHJlc3Mgd2lsbCBiZSAweEQwMDAwLgorCisJCURPIE5PVCBTRVQgVEhJUyBUTyBDMDAwMCwgRjAwMDAsIE9SIExFU1MgVEhBTiBBMDAwMCEKKworICAgICAgICAgICAgICAgICAgICAgICAgICAxICAyICAzICA0ICA1ICA2ICA3ICA4CisgICAgIFMyICAgICAgICAgICAgICAgIC8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVwKKyhTdGF0aW9uIEFkZHJlc3MpICAgICAgfCAgMSAgMSAgMCAgMCAgMCAgMCAgMCAgMCAgfAorICAgICAgICAgICAgICAgICAgICAgICBcLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0vCisKKwkJCVNldHRpbmcJCVZhbHVlCisJCQktLS0tLS0tCQktLS0tLQorCQkJMDAwMDAwMDAJMDAKKwkJCTEwMDAwMDAwCTAxCisJCQkwMTAwMDAwMAkwMgorCQkJLi4uCisJCQkwMTExMTExMQlGRQorCQkJMTExMTExMTEJRkYKKworCQlOb3RlIHRoYXQgdGhpcyBpcyBiaW5hcnkgd2l0aCB0aGUgZGlnaXRzIHJldmVyc2VkIQorCisJCURPIE5PVCBTRVQgVEhJUyBUTyAwIE9SIDI1NSAoMHhGRikhCisKKworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKworKiogU3RhbmRhcmQgTWljcm9zeXN0ZW1zIENvcnAgKFNNQykgKioKK1BDMTMwRS9QQzI3MEUgKDgtYml0IGNhcmRzKQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIC0gZnJvbSBKdWVyZ2VuIFNlaWZlcnQgPHNlaWZlcnRAaHR3bS5kZT4KKworCitTVEFOREFSRCBNSUNST1NZU1RFTVMgQ09SUE9SQVRJT04gKFNNQykgQVJDTkVUKFIpLVBDMTMwRS9QQzI3MEUKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitUaGlzIGRlc2NyaXB0aW9uIGhhcyBiZWVuIHdyaXR0ZW4gYnkgSnVlcmdlbiBTZWlmZXJ0IDxzZWlmZXJ0QGh0d20uZGU+Cit1c2luZyBpbmZvcm1hdGlvbiBmcm9tIHRoZSBmb2xsb3dpbmcgT3JpZ2luYWwgU01DIE1hbnVhbCAKKworICAgICAgICAgICAgICJDb25maWd1cmF0aW9uIEd1aWRlIGZvcgorICAgICAgICAgICAgIEFSQ05FVChSKS1QQzEzMEUvUEMyNzAKKyAgICAgICAgICAgIE5ldHdvcmsgQ29udHJvbGxlciBCb2FyZHMKKyAgICAgICAgICAgICAgICBQdWIuICMgOTAwLjA0NEEKKyAgICAgICAgICAgICAgICAgICBKdW5lLCAxOTg5IgorCitBUkNORVQgaXMgYSByZWdpc3RlcmVkIHRyYWRlbWFyayBvZiB0aGUgRGF0YXBvaW50IENvcnBvcmF0aW9uCitTTUMgaXMgYSByZWdpc3RlcmVkIHRyYWRlbWFyayBvZiB0aGUgU3RhbmRhcmQgTWljcm9zeXN0ZW1zIENvcnBvcmF0aW9uICAKKworVGhlIFBDMTMwRSBpcyBhbiBlbmhhbmNlZCB2ZXJzaW9uIG9mIHRoZSBQQzEzMCBib2FyZCwgaXMgZXF1aXBwZWQgd2l0aCBhIAorc3RhbmRhcmQgQk5DIGZlbWFsZSBjb25uZWN0b3IgZm9yIGNvbm5lY3Rpb24gdG8gUkctNjIvVSBjb2F4IGNhYmxlLgorU2luY2UgdGhpcyBib2FyZCBpcyBkZXNpZ25lZCBib3RoIGZvciBwb2ludC10by1wb2ludCBjb25uZWN0aW9uIGluIHN0YXIKK25ldHdvcmtzIGFuZCBmb3IgY29ubmVjdGlvbiB0byBidXMgbmV0d29ya3MsIGl0IGlzIGRvd253YXJkbHkgY29tcGF0aWJsZSAKK3dpdGggYWxsIHRoZSBvdGhlciBzdGFuZGFyZCBib2FyZHMgZGVzaWduZWQgZm9yIGNvYXggbmV0d29ya3MgKHRoYXQgaXMsCit0aGUgUEMxMjAsIFBDMTEwIGFuZCBQQzEwMCBzdGFyIHRvcG9sb2d5IGJvYXJkcyBhbmQgdGhlIFBDMjIwLCBQQzIxMCBhbmQgCitQQzIwMCBidXMgdG9wb2xvZ3kgYm9hcmRzKS4KKworVGhlIFBDMjcwRSBpcyBhbiBlbmhhbmNlZCB2ZXJzaW9uIG9mIHRoZSBQQzI2MCBib2FyZCwgaXMgZXF1aXBwZWQgd2l0aCB0d28gCittb2R1bGFyIFJKMTEtdHlwZSBqYWNrcyBmb3IgY29ubmVjdGlvbiB0byB0d2lzdGVkIHBhaXIgd2lyaW5nLgorSXQgY2FuIGJlIHVzZWQgaW4gYSBzdGFyIG9yIGEgZGFpc3ktY2hhaW5lZCBuZXR3b3JrLgorCisKKyAgICAgICAgIDggNyA2IDUgNCAzIDIgMQorICAgIF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KKyAgIHwgICB8ICAgICAgIFMxICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgfCAgIHxfX19fX19fX19fX19fX19fX3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICB8ICAgIE9mZnN8QmFzZSB8SS9PIEFkZHIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgIHwgICAgIFJBTSBBZGRyIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19ffAorICAgfCAgICAgICAgIF9fXyAgX19fICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1IzIHxfX198CisgICB8ICAgICAgICB8ICAgXC8gICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDUjQgfF9fX3wKKyAgIHwgICAgICAgIHwgIFBST00gIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19ffAorICAgfCAgICAgICAgfCAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOIHwgICB8IDgKKyAgIHwgICAgICAgIHwgU09DS0VUIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbyB8ICAgfCA3CisgICB8ICAgICAgICB8X19fX19fX198ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQgfCAgIHwgNgorICAgfCAgICAgICAgICAgICAgICAgICBfX19fX19fX19fX19fX19fX19fICAgICAgICAgICAgICAgICAgICBlIHwgICB8IDUKKyAgIHwgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgQSB8IFMgfCA0CisgICB8ICAgICAgIHxvb3wgRVhUMiAgfCAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgIGQgfCAyIHwgMworICAgfCAgICAgICB8b298IEVYVDEgIHwgICAgICAgU01DICAgICAgICAgfCAgICAgICAgICAgICAgICAgICBkIHwgICB8IDIKKyAgIHwgICAgICAgfG9vfCBST00gICB8ICAgICAgOTBDNjMgICAgICAgIHwgICAgICAgICAgICAgICAgICAgciB8X19ffCAxCisgICB8ICAgICAgIHxvb3wgSVJRNyAgfCAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgfG98ICBfX19fX3wKKyAgIHwgICAgICAgfG9vfCBJUlE1ICB8ICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICB8b3wgfCBKMSAgfAorICAgfCAgICAgICB8b298IElSUTQgIHwgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgU1RBUiB8X19fX198CisgICB8ICAgICAgIHxvb3wgSVJRMyAgfCAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgIHwgSjIgIHwKKyAgIHwgICAgICAgfG9vfCBJUlEyICB8X19fX19fX19fX19fX19fX19fX3wgICAgICAgICAgICAgICAgICAgfF9fX19ffAorICAgfF9fXyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19fX19fX19fX19fX198CisgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgICB8X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19ffAorCitMZWdlbmQ6CisKK1NNQyA5MEM2MwlBUkNORVQgQ29udHJvbGxlciAvIFRyYW5zY2VpdmVyIC9Mb2dpYworUzEJMS0zOglJL08gQmFzZSBBZGRyZXNzIFNlbGVjdAorCTQtNjoJTWVtb3J5IEJhc2UgQWRkcmVzcyBTZWxlY3QKKwk3LTg6CVJBTSBPZmZzZXQgU2VsZWN0CitTMgkxLTg6CU5vZGUgSUQgU2VsZWN0CitFWFQJCUV4dGVuZGVkIFRpbWVvdXQgU2VsZWN0CitST00JCVJPTSBFbmFibGUgU2VsZWN0CitTVEFSCQlTZWxlY3RlZCAtIFN0YXIgVG9wb2xvZ3kJKFBDMTMwRSBvbmx5KQorCQlEZXNlbGVjdGVkIC0gQnVzIFRvcG9sb2d5CShQQzEzMEUgb25seSkKK0NSMy9DUjQJCURpYWdub3N0aWMgTEVEcworSjEJCUJOQyBSRzYyL1UgQ29ubmVjdG9yCQkoUEMxMzBFIG9ubHkpCitKMQkJNi1wb3NpdGlvbiBUZWxlcGhvbmUgSmFjawkoUEMyNzBFIG9ubHkpCitKMgkJNi1wb3NpdGlvbiBUZWxlcGhvbmUgSmFjawkoUEMyNzBFIG9ubHkpCisKK1NldHRpbmcgb25lIG9mIHRoZSBzd2l0Y2hlcyB0byBPZmYvT3BlbiBtZWFucyAiMSIsIE9uL0Nsb3NlZCBtZWFucyAiMCIuCisKKworU2V0dGluZyB0aGUgTm9kZSBJRAorLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGUgZWlnaHQgc3dpdGNoZXMgaW4gZ3JvdXAgUzIgYXJlIHVzZWQgdG8gc2V0IHRoZSBub2RlIElELgorVGhlc2Ugc3dpdGNoZXMgd29yayBpbiBhIHdheSBzaW1pbGFyIHRvIHRoZSBQQzEwMC1zZXJpZXMgY2FyZHM7IHNlZSB0aGF0CitlbnRyeSBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KKworCitTZXR0aW5nIHRoZSBJL08gQmFzZSBBZGRyZXNzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZSBmaXJzdCB0aHJlZSBzd2l0Y2hlcyBpbiBzd2l0Y2ggZ3JvdXAgUzEgYXJlIHVzZWQgdG8gc2VsZWN0IG9uZQorb2YgZWlnaHQgcG9zc2libGUgSS9PIEJhc2UgYWRkcmVzc2VzIHVzaW5nIHRoZSBmb2xsb3dpbmcgdGFibGUKKworCisgICBTd2l0Y2ggfCBIZXggSS9PCisgICAxIDIgMyAgfCBBZGRyZXNzCisgICAtLS0tLS0tfC0tLS0tLS0tCisgICAwIDAgMCAgfCAgMjYwCisgICAwIDAgMSAgfCAgMjkwCisgICAwIDEgMCAgfCAgMkUwICAoTWFudWZhY3R1cmVyJ3MgZGVmYXVsdCkKKyAgIDAgMSAxICB8ICAyRjAKKyAgIDEgMCAwICB8ICAzMDAKKyAgIDEgMCAxICB8ICAzNTAKKyAgIDEgMSAwICB8ICAzODAKKyAgIDEgMSAxICB8ICAzRTAKKworCitTZXR0aW5nIHRoZSBCYXNlIE1lbW9yeSAoUkFNKSBidWZmZXIgQWRkcmVzcworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlIG1lbW9yeSBidWZmZXIgcmVxdWlyZXMgMksgb2YgYSAxNksgYmxvY2sgb2YgUkFNLiBUaGUgYmFzZSBvZiB0aGlzCisxNksgYmxvY2sgY2FuIGJlIGxvY2F0ZWQgaW4gYW55IG9mIGVpZ2h0IHBvc2l0aW9ucy4KK1N3aXRjaGVzIDQtNiBvZiBzd2l0Y2ggZ3JvdXAgUzEgc2VsZWN0IHRoZSBCYXNlIG9mIHRoZSAxNksgYmxvY2suCitXaXRoaW4gdGhhdCAxNksgYWRkcmVzcyBzcGFjZSwgdGhlIGJ1ZmZlciBtYXkgYmUgYXNzaWduZWQgYW55IG9uZSBvZiBmb3VyIAorcG9zaXRpb25zLCBkZXRlcm1pbmVkIGJ5IHRoZSBvZmZzZXQsIHN3aXRjaGVzIDcgYW5kIDggb2YgZ3JvdXAgUzEuCisKKyAgIFN3aXRjaCAgICAgfCBIZXggUkFNIHwgSGV4IFJPTQorICAgNCA1IDYgIDcgOCB8IEFkZHJlc3MgfCBBZGRyZXNzICopCisgICAtLS0tLS0tLS0tLXwtLS0tLS0tLS18LS0tLS0tLS0tLS0KKyAgIDAgMCAwICAwIDAgfCAgQzAwMDAgIHwgIEMyMDAwCisgICAwIDAgMCAgMCAxIHwgIEMwODAwICB8ICBDMjAwMAorICAgMCAwIDAgIDEgMCB8ICBDMTAwMCAgfCAgQzIwMDAKKyAgIDAgMCAwICAxIDEgfCAgQzE4MDAgIHwgIEMyMDAwCisgICAgICAgICAgICAgIHwgICAgICAgICB8CisgICAwIDAgMSAgMCAwIHwgIEM0MDAwICB8ICBDNjAwMAorICAgMCAwIDEgIDAgMSB8ICBDNDgwMCAgfCAgQzYwMDAKKyAgIDAgMCAxICAxIDAgfCAgQzUwMDAgIHwgIEM2MDAwCisgICAwIDAgMSAgMSAxIHwgIEM1ODAwICB8ICBDNjAwMAorICAgICAgICAgICAgICB8ICAgICAgICAgfAorICAgMCAxIDAgIDAgMCB8ICBDQzAwMCAgfCAgQ0UwMDAKKyAgIDAgMSAwICAwIDEgfCAgQ0M4MDAgIHwgIENFMDAwCisgICAwIDEgMCAgMSAwIHwgIENEMDAwICB8ICBDRTAwMAorICAgMCAxIDAgIDEgMSB8ICBDRDgwMCAgfCAgQ0UwMDAKKyAgICAgICAgICAgICAgfCAgICAgICAgIHwKKyAgIDAgMSAxICAwIDAgfCAgRDAwMDAgIHwgIEQyMDAwICAoTWFudWZhY3R1cmVyJ3MgZGVmYXVsdCkKKyAgIDAgMSAxICAwIDEgfCAgRDA4MDAgIHwgIEQyMDAwCisgICAwIDEgMSAgMSAwIHwgIEQxMDAwICB8ICBEMjAwMAorICAgMCAxIDEgIDEgMSB8ICBEMTgwMCAgfCAgRDIwMDAKKyAgICAgICAgICAgICAgfCAgICAgICAgIHwKKyAgIDEgMCAwICAwIDAgfCAgRDQwMDAgIHwgIEQ2MDAwCisgICAxIDAgMCAgMCAxIHwgIEQ0ODAwICB8ICBENjAwMAorICAgMSAwIDAgIDEgMCB8ICBENTAwMCAgfCAgRDYwMDAKKyAgIDEgMCAwICAxIDEgfCAgRDU4MDAgIHwgIEQ2MDAwCisgICAgICAgICAgICAgIHwgICAgICAgICB8CisgICAxIDAgMSAgMCAwIHwgIEQ4MDAwICB8ICBEQTAwMAorICAgMSAwIDEgIDAgMSB8ICBEODgwMCAgfCAgREEwMDAKKyAgIDEgMCAxICAxIDAgfCAgRDkwMDAgIHwgIERBMDAwCisgICAxIDAgMSAgMSAxIHwgIEQ5ODAwICB8ICBEQTAwMAorICAgICAgICAgICAgICB8ICAgICAgICAgfAorICAgMSAxIDAgIDAgMCB8ICBEQzAwMCAgfCAgREUwMDAKKyAgIDEgMSAwICAwIDEgfCAgREM4MDAgIHwgIERFMDAwCisgICAxIDEgMCAgMSAwIHwgIEREMDAwICB8ICBERTAwMAorICAgMSAxIDAgIDEgMSB8ICBERDgwMCAgfCAgREUwMDAKKyAgICAgICAgICAgICAgfCAgICAgICAgIHwKKyAgIDEgMSAxICAwIDAgfCAgRTAwMDAgIHwgIEUyMDAwCisgICAxIDEgMSAgMCAxIHwgIEUwODAwICB8ICBFMjAwMAorICAgMSAxIDEgIDEgMCB8ICBFMTAwMCAgfCAgRTIwMDAKKyAgIDEgMSAxICAxIDEgfCAgRTE4MDAgIHwgIEUyMDAwCisgIAorKikgVG8gZW5hYmxlIHRoZSA4SyBCb290IFBST00gaW5zdGFsbCB0aGUganVtcGVyIFJPTS4KKyAgIFRoZSBkZWZhdWx0IGlzIGp1bXBlciBST00gbm90IGluc3RhbGxlZC4KKworCitTZXR0aW5nIHRoZSBUaW1lb3V0cyBhbmQgSW50ZXJydXB0CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZSBqdW1wZXJzIGxhYmVsZWQgRVhUMSBhbmQgRVhUMiBhcmUgdXNlZCB0byBkZXRlcm1pbmUgdGhlIHRpbWVvdXQgCitwYXJhbWV0ZXJzLiBUaGVzZSB0d28ganVtcGVycyBhcmUgbm9ybWFsbHkgbGVmdCBvcGVuLgorCitUbyBzZWxlY3QgYSBoYXJkd2FyZSBpbnRlcnJ1cHQgbGV2ZWwgc2V0IG9uZSAob25seSBvbmUhKSBvZiB0aGUganVtcGVycworSVJRMiwgSVJRMywgSVJRNCwgSVJRNSwgSVJRNy4gVGhlIE1hbnVmYWN0dXJlcidzIGRlZmF1bHQgaXMgSVJRMi4KKyAKKworQ29uZmlndXJpbmcgdGhlIFBDMTMwRSBmb3IgU3RhciBvciBCdXMgVG9wb2xvZ3kKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZSBzaW5nbGUganVtcGVyIGxhYmVsZWQgU1RBUiBpcyB1c2VkIHRvIGNvbmZpZ3VyZSB0aGUgUEMxMzBFIGJvYXJkIGZvciAKK3N0YXIgb3IgYnVzIHRvcG9sb2d5LgorV2hlbiB0aGUganVtcGVyIGlzIGluc3RhbGxlZCwgdGhlIGJvYXJkIG1heSBiZSB1c2VkIGluIGEgc3RhciBuZXR3b3JrLCB3aGVuIAoraXQgaXMgcmVtb3ZlZCwgdGhlIGJvYXJkIGNhbiBiZSB1c2VkIGluIGEgYnVzIHRvcG9sb2d5LgorCisKK0RpYWdub3N0aWMgTEVEcworLS0tLS0tLS0tLS0tLS0tCisKK1R3byBkaWFnbm9zdGljIExFRHMgYXJlIHZpc2libGUgb24gdGhlIHJlYXIgYnJhY2tldCBvZiB0aGUgYm9hcmQuCitUaGUgZ3JlZW4gTEVEIG1vbml0b3JzIHRoZSBuZXR3b3JrIGFjdGl2aXR5OiB0aGUgcmVkIG9uZSBzaG93cyB0aGUKK2JvYXJkIGFjdGl2aXR5OgorCisgR3JlZW4gIHwgU3RhdHVzICAgICAgICAgICAgICAgUmVkICAgICAgfCBTdGF0dXMKKyAtLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0gICAtLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLQorICBvbiAgICB8IG5vcm1hbCBhY3Rpdml0eSAgICAgIGZsYXNoL29uIHwgZGF0YSB0cmFuc2ZlcgorICBibGluayB8IHJlY29uZmlndXJhdGlvbiAgICAgIG9mZiAgICAgIHwgbm8gZGF0YSB0cmFuc2ZlcjsKKyAgb2ZmICAgfCBkZWZlY3RpdmUgYm9hcmQgb3IgICAgICAgICAgICB8IGluY29ycmVjdCBtZW1vcnkgb3IKKyAgICAgICAgfCBub2RlIElEIGlzIHplcm8gICAgICAgICAgICAgICB8IEkvTyBhZGRyZXNzCisKKworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKworKiogU3RhbmRhcmQgTWljcm9zeXN0ZW1zIENvcnAgKFNNQykgKioKK1BDNTAwL1BDNTUwIExvbmdib2FyZCAoMTYtYml0IGNhcmRzKQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAtIGZyb20gSnVlcmdlbiBTZWlmZXJ0IDxzZWlmZXJ0QGh0d20uZGU+CisKKworU1RBTkRBUkQgTUlDUk9TWVNURU1TIENPUlBPUkFUSU9OIChTTUMpIEFSQ05FVC1QQzUwMC9QQzU1MCBMb25nIEJvYXJkCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworTm90ZTogVGhlcmUgaXMgYW5vdGhlciBWZXJzaW9uIG9mIHRoZSBQQzUwMCBjYWxsZWQgU2hvcnQgVmVyc2lvbiwgd2hpY2ggCisgICAgICBpcyBkaWZmZXJlbnQgaW4gaGFyZC0gYW5kIHNvZnR3YXJlISBUaGUgbW9zdCBpbXBvcnRhbnQgZGlmZmVyZW5jZXMKKyAgICAgIGFyZToKKyAgICAgIC0gVGhlIGxvbmcgYm9hcmQgaGFzIG5vIFNoYXJlZCBtZW1vcnkuCisgICAgICAtIE9uIHRoZSBsb25nIGJvYXJkIHRoZSBzZWxlY3Rpb24gb2YgdGhlIGludGVycnVwdCBpcyBkb25lIGJ5IGJpbmFyeQorICAgICAgICBjb2RlZCBzd2l0Y2gsIG9uIHRoZSBzaG9ydCBib2FyZCBkaXJlY3RseSBieSBqdW1wZXIuCisgICAgICAgIAorW0F2ZXJ5J3Mgbm90ZTogcGF5IHNwZWNpYWwgYXR0ZW50aW9uIHRvIHRoYXQ6IHRoZSBsb25nIGJvYXJkIEhBUyBOTyBTSEFSRUQKK01FTU9SWS4gIFRoaXMgbWVhbnMgdGhlIGN1cnJlbnQgTGludXgtQVJDbmV0IGRyaXZlciBjYW4ndCB1c2UgdGhlc2UgY2FyZHMuIAorSSBoYXZlIG9idGFpbmVkIGEgUEM1MDBMb25nYm9hcmQgYW5kIHdpbGwgYmUgZG9pbmcgc29tZSBleHBlcmltZW50cyBvbiBpdCBpbgordGhlIGZ1dHVyZSwgYnV0IGRvbid0IGhvbGQgeW91ciBicmVhdGguICBUaGFua3MgYWdhaW4gdG8gSnVlcmdlbiBTZWlmZXJ0IGZvcgoraGlzIGFkdmljZSBhYm91dCB0aGlzIV0KKworVGhpcyBkZXNjcmlwdGlvbiBoYXMgYmVlbiB3cml0dGVuIGJ5IEp1ZXJnZW4gU2VpZmVydCA8c2VpZmVydEBodHdtLmRlPgordXNpbmcgaW5mb3JtYXRpb24gZnJvbSB0aGUgZm9sbG93aW5nIE9yaWdpbmFsIFNNQyBNYW51YWwgCisKKyAgICAgICAgICAgICAiQ29uZmlndXJhdGlvbiBHdWlkZSBmb3IKKyAgICAgICAgICAgICBTTUMgQVJDTkVULVBDNTAwL1BDNTUwCisgICAgICAgICBTZXJpZXMgTmV0d29yayBDb250cm9sbGVyIEJvYXJkcworICAgICAgICAgICAgIFB1Yi4gIyA5MDAuMDMzIFJldi4gQQorICAgICAgICAgICAgICAgIE5vdmVtYmVyLCAxOTg5IgorCitBUkNORVQgaXMgYSByZWdpc3RlcmVkIHRyYWRlbWFyayBvZiB0aGUgRGF0YXBvaW50IENvcnBvcmF0aW9uCitTTUMgaXMgYSByZWdpc3RlcmVkIHRyYWRlbWFyayBvZiB0aGUgU3RhbmRhcmQgTWljcm9zeXN0ZW1zIENvcnBvcmF0aW9uICAKKworVGhlIFBDNTAwIGlzIGVxdWlwcGVkIHdpdGggYSBzdGFuZGFyZCBCTkMgZmVtYWxlIGNvbm5lY3RvciBmb3IgY29ubmVjdGlvbgordG8gUkctNjIvVSBjb2F4IGNhYmxlLgorVGhlIGJvYXJkIGlzIGRlc2lnbmVkIGJvdGggZm9yIHBvaW50LXRvLXBvaW50IGNvbm5lY3Rpb24gaW4gc3RhciBuZXR3b3JrcworYW5kIGZvciBjb25uZWN0aW9uIHRvIGJ1cyBuZXR3b3Jrcy4KKworVGhlIFBDNTUwIGlzIGVxdWlwcGVkIHdpdGggdHdvIG1vZHVsYXIgUkoxMS10eXBlIGphY2tzIGZvciBjb25uZWN0aW9uCit0byB0d2lzdGVkIHBhaXIgd2lyaW5nLgorSXQgY2FuIGJlIHVzZWQgaW4gYSBzdGFyIG9yIGEgZGFpc3ktY2hhaW5lZCAoQlVTKSBuZXR3b3JrLgorCisgICAgICAgMSAKKyAgICAgICAwIDkgOCA3IDYgNSA0IDMgMiAxICAgICA2IDUgNCAzIDIgMQorICAgIF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCisgICA8IHwgICAgICAgICBTVzEgICAgICAgICB8IHwgICAgIFNXMiAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICA+IHxfX19fX19fX19fX19fX19fX19fX198IHxfX19fX19fX19fX19ffCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICA8ICAgSVJRICAgIHxJL08gQWRkciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICA+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX198CisgICA8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1I0IHxfX198CisgICA+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1IzIHxfX198CisgICA8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX198CisgICA+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOIHwgICB8IDgKKyAgIDwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG8gfCAgIHwgNworICAgPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZCB8IFMgfCA2CisgICA8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlIHwgVyB8IDUKKyAgID4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEEgfCAzIHwgNAorICAgPCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZCB8ICAgfCAzCisgICA+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkIHwgICB8IDIKKyAgIDwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHIgfF9fX3wgMQorICAgPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfG98ICAgIF9fX19ffAorICAgPCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfG98ICAgfCBKMSAgfAorICAgPiAgMyAxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSlA2ICAgfF9fX19ffAorICAgPCB8b3xvfCBKUDIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBKMiAgfAorICAgPiB8b3xvfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfF9fX19ffAorICAgPCAgNCAyX18gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fX19fX19fX19fX19ffAorICAgPiAgICB8ICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgPF9fX198ICB8X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19ffAorCitMZWdlbmQ6CisKK1NXMQkxLTY6CUkvTyBCYXNlIEFkZHJlc3MgU2VsZWN0CisJNy0xMDoJSW50ZXJydXB0IFNlbGVjdAorU1cyCTEtNjoJUmVzZXJ2ZWQgZm9yIEZ1dHVyZSBVc2UKK1NXMwkxLTg6CU5vZGUgSUQgU2VsZWN0CitKUDIJMS00OglFeHRlbmRlZCBUaW1lb3V0IFNlbGVjdAorSlA2CQlTZWxlY3RlZCAtIFN0YXIgVG9wb2xvZ3kJKFBDNTAwIG9ubHkpCisJCURlc2VsZWN0ZWQgLSBCdXMgVG9wb2xvZ3kJKFBDNTAwIG9ubHkpCitDUjMJR3JlZW4JTW9uaXRvcnMgTmV0d29yayBBY3Rpdml0eQorQ1I0CVJlZAlNb25pdG9ycyBCb2FyZCBBY3Rpdml0eQorSjEJCUJOQyBSRzYyL1UgQ29ubmVjdG9yCQkoUEM1MDAgb25seSkKK0oxCQk2LXBvc2l0aW9uIFRlbGVwaG9uZSBKYWNrCShQQzU1MCBvbmx5KQorSjIJCTYtcG9zaXRpb24gVGVsZXBob25lIEphY2sJKFBDNTUwIG9ubHkpCisKK1NldHRpbmcgb25lIG9mIHRoZSBzd2l0Y2hlcyB0byBPZmYvT3BlbiBtZWFucyAiMSIsIE9uL0Nsb3NlZCBtZWFucyAiMCIuCisKKworU2V0dGluZyB0aGUgTm9kZSBJRAorLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGUgZWlnaHQgc3dpdGNoZXMgaW4gZ3JvdXAgU1czIGFyZSB1c2VkIHRvIHNldCB0aGUgbm9kZSBJRC4gRWFjaCBub2RlCithdHRhY2hlZCB0byB0aGUgbmV0d29yayBtdXN0IGhhdmUgYW4gdW5pcXVlIG5vZGUgSUQgd2hpY2ggbXVzdCBiZSAKK2RpZmZlcmVudCBmcm9tIDAuCitTd2l0Y2ggMSBzZXJ2ZXMgYXMgdGhlIGxlYXN0IHNpZ25pZmljYW50IGJpdCAoTFNCKS4KKworVGhlIG5vZGUgSUQgaXMgdGhlIHN1bSBvZiB0aGUgdmFsdWVzIG9mIGFsbCBzd2l0Y2hlcyBzZXQgdG8gIjEiICAKK1RoZXNlIHZhbHVlcyBhcmU6CisKKyAgICBTd2l0Y2ggfCBWYWx1ZQorICAgIC0tLS0tLS18LS0tLS0tLQorICAgICAgMSAgICB8ICAgMQorICAgICAgMiAgICB8ICAgMgorICAgICAgMyAgICB8ICAgNAorICAgICAgNCAgICB8ICAgOAorICAgICAgNSAgICB8ICAxNgorICAgICAgNiAgICB8ICAzMgorICAgICAgNyAgICB8ICA2NAorICAgICAgOCAgICB8IDEyOAorCitTb21lIEV4YW1wbGVzOgorCisgICAgU3dpdGNoICAgICAgICAgfCBIZXggICAgIHwgRGVjaW1hbCAKKyAgIDggNyA2IDUgNCAzIDIgMSB8IE5vZGUgSUQgfCBOb2RlIElECisgICAtLS0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tLXwtLS0tLS0tLS0KKyAgIDAgMCAwIDAgMCAwIDAgMCB8ICAgIG5vdCBhbGxvd2VkCisgICAwIDAgMCAwIDAgMCAwIDEgfCAgICAxICAgIHwgICAgMSAKKyAgIDAgMCAwIDAgMCAwIDEgMCB8ICAgIDIgICAgfCAgICAyCisgICAwIDAgMCAwIDAgMCAxIDEgfCAgICAzICAgIHwgICAgMworICAgICAgIC4gLiAuICAgICAgIHwgICAgICAgICB8CisgICAwIDEgMCAxIDAgMSAwIDEgfCAgIDU1ICAgIHwgICA4NQorICAgICAgIC4gLiAuICAgICAgIHwgICAgICAgICB8CisgICAxIDAgMSAwIDEgMCAxIDAgfCAgIEFBICAgIHwgIDE3MAorICAgICAgIC4gLiAuICAgICAgIHwgICAgICAgICB8ICAKKyAgIDEgMSAxIDEgMSAxIDAgMSB8ICAgRkQgICAgfCAgMjUzCisgICAxIDEgMSAxIDEgMSAxIDAgfCAgIEZFICAgIHwgIDI1NAorICAgMSAxIDEgMSAxIDEgMSAxIHwgICBGRiAgICB8ICAyNTUgCisKKworU2V0dGluZyB0aGUgSS9PIEJhc2UgQWRkcmVzcworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGUgZmlyc3Qgc2l4IHN3aXRjaGVzIGluIHN3aXRjaCBncm91cCBTVzEgYXJlIHVzZWQgdG8gc2VsZWN0IG9uZQorb2YgMzIgcG9zc2libGUgSS9PIEJhc2UgYWRkcmVzc2VzIHVzaW5nIHRoZSBmb2xsb3dpbmcgdGFibGUKKworICAgU3dpdGNoICAgICAgIHwgSGV4IEkvTworICAgNiA1ICA0IDMgMiAxIHwgQWRkcmVzcworICAgLS0tLS0tLS0tLS0tLXwtLS0tLS0tLQorICAgMCAxICAwIDAgMCAwIHwgIDIwMAorICAgMCAxICAwIDAgMCAxIHwgIDIxMAorICAgMCAxICAwIDAgMSAwIHwgIDIyMAorICAgMCAxICAwIDAgMSAxIHwgIDIzMAorICAgMCAxICAwIDEgMCAwIHwgIDI0MAorICAgMCAxICAwIDEgMCAxIHwgIDI1MAorICAgMCAxICAwIDEgMSAwIHwgIDI2MAorICAgMCAxICAwIDEgMSAxIHwgIDI3MAorICAgMCAxICAxIDAgMCAwIHwgIDI4MAorICAgMCAxICAxIDAgMCAxIHwgIDI5MAorICAgMCAxICAxIDAgMSAwIHwgIDJBMAorICAgMCAxICAxIDAgMSAxIHwgIDJCMAorICAgMCAxICAxIDEgMCAwIHwgIDJDMAorICAgMCAxICAxIDEgMCAxIHwgIDJEMAorICAgMCAxICAxIDEgMSAwIHwgIDJFMCAoTWFudWZhY3R1cmVyJ3MgZGVmYXVsdCkKKyAgIDAgMSAgMSAxIDEgMSB8ICAyRjAKKyAgIDEgMSAgMCAwIDAgMCB8ICAzMDAKKyAgIDEgMSAgMCAwIDAgMSB8ICAzMTAKKyAgIDEgMSAgMCAwIDEgMCB8ICAzMjAKKyAgIDEgMSAgMCAwIDEgMSB8ICAzMzAKKyAgIDEgMSAgMCAxIDAgMCB8ICAzNDAKKyAgIDEgMSAgMCAxIDAgMSB8ICAzNTAKKyAgIDEgMSAgMCAxIDEgMCB8ICAzNjAKKyAgIDEgMSAgMCAxIDEgMSB8ICAzNzAKKyAgIDEgMSAgMSAwIDAgMCB8ICAzODAKKyAgIDEgMSAgMSAwIDAgMSB8ICAzOTAKKyAgIDEgMSAgMSAwIDEgMCB8ICAzQTAKKyAgIDEgMSAgMSAwIDEgMSB8ICAzQjAKKyAgIDEgMSAgMSAxIDAgMCB8ICAzQzAKKyAgIDEgMSAgMSAxIDAgMSB8ICAzRDAKKyAgIDEgMSAgMSAxIDEgMCB8ICAzRTAKKyAgIDEgMSAgMSAxIDEgMSB8ICAzRjAKKworCitTZXR0aW5nIHRoZSBJbnRlcnJ1cHQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitTd2l0Y2hlcyBzZXZlbiB0aHJvdWdoIHRlbiBvZiBzd2l0Y2ggZ3JvdXAgU1cxIGFyZSB1c2VkIHRvIHNlbGVjdCB0aGUgCitpbnRlcnJ1cHQgbGV2ZWwuIFRoZSBpbnRlcnJ1cHQgbGV2ZWwgaXMgYmluYXJ5IGNvZGVkLCBzbyBzZWxlY3Rpb25zIAorZnJvbSAwIHRvIDE1IHdvdWxkIGJlIHBvc3NpYmxlLCBidXQgb25seSB0aGUgZm9sbG93aW5nIGVpZ2h0IHZhbHVlcyB3aWxsCitiZSBzdXBwb3J0ZWQ6IDMsIDQsIDUsIDcsIDksIDEwLCAxMSwgMTIuCisKKyAgIFN3aXRjaCAgIHwgSVJRCisgICAxMCA5IDggNyB8IAorICAgLS0tLS0tLS0tfC0tLS0tLS0tIAorICAgIDAgMCAxIDEgfCAgMworICAgIDAgMSAwIDAgfCAgNAorICAgIDAgMSAwIDEgfCAgNQorICAgIDAgMSAxIDEgfCAgNworICAgIDEgMCAwIDEgfCAgOSAoPTIpIChkZWZhdWx0KQorICAgIDEgMCAxIDAgfCAxMAorICAgIDEgMCAxIDEgfCAxMQorICAgIDEgMSAwIDAgfCAxMgorCisKK1NldHRpbmcgdGhlIFRpbWVvdXRzIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlIHR3byBqdW1wZXJzIEpQMiAoMS00KSBhcmUgdXNlZCB0byBkZXRlcm1pbmUgdGhlIHRpbWVvdXQgcGFyYW1ldGVycy4gCitUaGVzZSB0d28ganVtcGVycyBhcmUgbm9ybWFsbHkgbGVmdCBvcGVuLgorUmVmZXIgdG8gdGhlIENPTTkwMjYgRGF0YSBTaGVldCBmb3IgYWx0ZXJuYXRlIGNvbmZpZ3VyYXRpb25zLgorCisKK0NvbmZpZ3VyaW5nIHRoZSBQQzUwMCBmb3IgU3RhciBvciBCdXMgVG9wb2xvZ3kKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlIHNpbmdsZSBqdW1wZXIgbGFiZWxlZCBKUDYgaXMgdXNlZCB0byBjb25maWd1cmUgdGhlIFBDNTAwIGJvYXJkIGZvciAKK3N0YXIgb3IgYnVzIHRvcG9sb2d5LgorV2hlbiB0aGUganVtcGVyIGlzIGluc3RhbGxlZCwgdGhlIGJvYXJkIG1heSBiZSB1c2VkIGluIGEgc3RhciBuZXR3b3JrLCB3aGVuIAoraXQgaXMgcmVtb3ZlZCwgdGhlIGJvYXJkIGNhbiBiZSB1c2VkIGluIGEgYnVzIHRvcG9sb2d5LgorCisKK0RpYWdub3N0aWMgTEVEcworLS0tLS0tLS0tLS0tLS0tCisKK1R3byBkaWFnbm9zdGljIExFRHMgYXJlIHZpc2libGUgb24gdGhlIHJlYXIgYnJhY2tldCBvZiB0aGUgYm9hcmQuCitUaGUgZ3JlZW4gTEVEIG1vbml0b3JzIHRoZSBuZXR3b3JrIGFjdGl2aXR5OiB0aGUgcmVkIG9uZSBzaG93cyB0aGUKK2JvYXJkIGFjdGl2aXR5OgorCisgR3JlZW4gIHwgU3RhdHVzICAgICAgICAgICAgICAgUmVkICAgICAgfCBTdGF0dXMKKyAtLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0gICAtLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLQorICBvbiAgICB8IG5vcm1hbCBhY3Rpdml0eSAgICAgIGZsYXNoL29uIHwgZGF0YSB0cmFuc2ZlcgorICBibGluayB8IHJlY29uZmlndXJhdGlvbiAgICAgIG9mZiAgICAgIHwgbm8gZGF0YSB0cmFuc2ZlcjsKKyAgb2ZmICAgfCBkZWZlY3RpdmUgYm9hcmQgb3IgICAgICAgICAgICB8IGluY29ycmVjdCBtZW1vcnkgb3IKKyAgICAgICAgfCBub2RlIElEIGlzIHplcm8gICAgICAgICAgICAgICB8IEkvTyBhZGRyZXNzCisKKworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKworKiogU01DICoqCitQQzcxMCAoOC1iaXQgY2FyZCkKKy0tLS0tLS0tLS0tLS0tLS0tLQorICAtIGZyb20gSi5TLiB2YW4gT29zdGVuIDxqdm9vc3RlbkBjb21waWxlci50ZGNuZXQubmw+CisgIAorTm90ZTogdGhpcyBkYXRhIGlzIGdhdGhlcmVkIGJ5IGV4cGVyaW1lbnRpbmcgYW5kIGxvb2tpbmcgYXQgaW5mbyBvZiBvdGhlcgorY2FyZHMuIEhvd2V2ZXIsIEknbSBzdXJlIEkgZ290IDk5JSBvZiB0aGUgc2V0dGluZ3MgcmlnaHQuCisKK1RoZSBTTUM3MTAgY2FyZCByZXNlbWJsZXMgdGhlIFBDMjcwIGNhcmQsIGJ1dCBpcyBtdWNoIG1vcmUgYmFzaWMgKGkuZS4gbm8KK0xFRHMsIFJKMTEgamFja3MsIGV0Yy4pIGFuZCA4IGJpdC4gSGVyZSdzIGEgbGl0dGxlIGRyYXdpbmc6CisKKyAgICBfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18gICAKKyAgIHwgKy0tLS0tLS0tLSsgICstLS0tLS0tLS0rICAgICAgICAgICAgICB8X19fXworICAgfCB8ICAgUzIgICAgfCAgfCAgIFMxICAgIHwgICAgICAgICAgICAgIHwKKyAgIHwgKy0tLS0tLS0tLSsgICstLS0tLS0tLS0rICAgICAgICAgICAgICB8CisgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgfCAgKz09PSsgICAgX18gICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgIHwgIHwgUiB8ICAgfCAgfCBYLXRhbCAgICAgICAgICAgICAgICAgIyMjX19fCisgICB8ICB8IE8gfCAgIHxfX3wgICAgICAgICAgICAgICAgICAgICAgIyMjI19fJ3wKKyAgIHwgIHwgTSB8ICAgIHx8ICAgICAgICAgICAgICAgICAgICAgICAgIyMjCisgICB8ICArPT09KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgIHwgICAuLiBKUDEgICArLS0tLS0tLS0tLSsgICAgICAgICAgICAgICB8CisgICB8ICAgLi4gICAgICAgfCBiaWcgY2hpcCB8ICAgICAgICAgICAgICAgfCAgIAorICAgfCAgIC4uICAgICAgIHwgIDkwQzYzICAgfCAgICAgICAgICAgICAgIHwKKyAgIHwgICAuLiAgICAgICB8ICAgICAgICAgIHwgICAgICAgICAgICAgICB8CisgICB8ICAgLi4gICAgICAgKy0tLS0tLS0tLS0rICAgICAgICAgICAgICAgfAorICAgIC0tLS0tLS0gICAgICAgICAgICAgICAgICAgICAtLS0tLS0tLS0tLQorICAgICAgICAgICB8fHx8fHx8fHx8fHx8fHx8fHx8fHwKKworVGhlIHJvdyBvZiBqdW1wZXJzIGF0IEpQMSBhY3R1YWxseSBjb25zaXN0cyBvZiA4IGp1bXBlcnMsIChzb21ldGltZXMKK2xhYmVsbGVkKSB0aGUgc2FtZSBhcyBvbiB0aGUgUEMyNzAsIGZyb20gdG9wIHRvIGJvdHRvbTogRVhUMiwgRVhUMSwgUk9NLAorSVJRNywgSVJRNSwgSVJRNCwgSVJRMywgSVJRMiAoZ2VlLCB3b25kZXIgd2hhdCB0aGV5IHdvdWxkIGRvPyA6LSkgKQorCitTMSBhbmQgUzIgcGVyZm9ybSB0aGUgc2FtZSBmdW5jdGlvbiBhcyBvbiB0aGUgUEMyNzAsIG9ubHkgdGhlaXIgbnVtYmVycworYXJlIHN3YXBwZWQgKFMxIGlzIHRoZSBub2RlYWRkcmVzcywgUzIgc2V0cyBJTy0gYW5kIFJBTS1hZGRyZXNzKS4KKworSSBrbm93IGl0IHdvcmtzIHdoZW4gY29ubmVjdGVkIHRvIGEgUEMxMTAgdHlwZSBBUkNuZXQgYm9hcmQuCisKKwkKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKKyoqIFBvc3NpYmx5IFNNQyAqKgorTENTLTg4MzAoLVQpICg4IGFuZCAxNi1iaXQgY2FyZHMpCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgLSBmcm9tIE1hdGhpYXMgS2F0emVyIDxta2F0emVyQEhSWi5VbmktQmllbGVmZWxkLkRFPgorICAtIE1hcmVrIE1pY2hhbGtpZXdpY3ogPG1hcmVrbUBpMTdsaW51eGIuaXN0cy5wd3Iud3JvYy5wbD4gc2F5cyB0aGUKKyAgICBMQ1MtODgzMCBpcyBzbGlnaHRseSBkaWZmZXJlbnQgZnJvbSBMQ1MtODgzMC1ULiAgVGhlc2UgYXJlIDggYml0LCBCVVMKKyAgICBvbmx5ICh0aGUgSlAwIGp1bXBlciBpcyBoYXJkd2lyZWQpLCBhbmQgQk5DIG9ubHkuCisJCitUaGlzIGlzIGEgTENTLTg4MzAtVCBtYWRlIGJ5IFNNQywgSSB0aGluayAoJ1NNQycgb25seSBhcHBlYXJzIG9uIG9uZSBQTENDLAorbm93aGVyZSBlbHNlLCBub3QgZXZlbiBvbiB0aGUgZmV3IFhlcm94ZWQgc2hlZXRzIGZyb20gdGhlIG1hbnVhbCkuCisKK1NNQyBBUkNuZXQgQm9hcmQgVHlwZSBMQ1MtODgzMC1UCisKKyAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICB8ICAgICAgICAgICAgICBKUDMgODggIDggSlAyICAgICAgICAgfAorICB8ICAgICAgICMjIyMjICAgICAgfCBcICAgICAgICAgICAgICAgfAorICB8ICAgICAgICMjIyMjICAgIEVUMSBFVDIgICAgICAgICAgIyMjfAorICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOCAgIyMjfAorICB8ICBVMyAgIFNXIDEgICAgICAgICAgICAgICAgICBKUDAgIyMjfCAgUGhvbmUgSmFja3MKKyAgfCAgLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICMjI3wKKyAgfCB8ICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgfCB8ICB8ICAgU1cyICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgfCB8ICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgfCB8ICB8ICAjIyMjIyAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgfCAgLS0gICAjIyMjIyAgICAgICAgICAgICAgICAgICAgICAgIyMjIyAgQk5DIENvbm5lY3RvciAKKyAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyMjIworICB8ICAgODg4ODg4IEpQMSAgICAgICAgICAgICAgICAgICAgICAgfAorICB8ICAgMjM0NTY3ICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAtLS0tLS0tCisgICAgIHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fAorICAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworCitTVzE6IERJUC1Td2l0Y2hlcyBmb3IgU3RhdGlvbiBBZGRyZXNzCitTVzI6IERJUC1Td2l0Y2hlcyBmb3IgTWVtb3J5IEJhc2UgYW5kIEkvTyBCYXNlIGFkZHJlc3NlcworCitKUDA6IElmIGNsb3NlZCwgaW50ZXJuYWwgdGVybWluYXRpb24gb24gKGRlZmF1bHQgb3BlbikKK0pQMTogSVJRIEp1bXBlcnMKK0pQMjogQm9vdC1ST00gZW5hYmxlZCBpZiBjbG9zZWQKK0pQMzogSnVtcGVycyBmb3IgcmVzcG9uc2UgdGltZW91dAorIAorVTM6IEJvb3QtUk9NIFNvY2tldCAgICAgICAgICAKKworCitFVDEgRVQyICAgICBSZXNwb25zZSBUaW1lICAgICBJZGxlIFRpbWUgICAgUmVjb25maWd1cmF0aW9uIFRpbWUKKworICAgICAgICAgICAgICAgNzggICAgICAgICAgICAgICAgODYgICAgICAgICAgICAgICA4NDAKKyBYICAgICAgICAgICAgMjg1ICAgICAgICAgICAgICAgMzE2ICAgICAgICAgICAgICAxNjgwCisgICAgIFggICAgICAgIDU2MyAgICAgICAgICAgICAgIDYyNCAgICAgICAgICAgICAgMTY4MAorIFggICBYICAgICAgIDExMzAgICAgICAgICAgICAgIDEyMzcgICAgICAgICAgICAgIDE2ODAKKworKFggbWVhbnMgY2xvc2VkIGp1bXBlcikKKworKERJUC1Td2l0Y2ggZG93bndhcmRzIG1lYW5zICIwIikKKworVGhlIHN0YXRpb24gYWRkcmVzcyBpcyBiaW5hcnktY29kZWQgd2l0aCBTVzEuCisKK1RoZSBJL08gYmFzZSBhZGRyZXNzIGlzIGNvZGVkIHdpdGggRElQLVN3aXRjaGVzIDYsNyBhbmQgOCBvZiBTVzI6CisKK1N3aXRjaGVzICAgICAgICBCYXNlCis2NzggICAgICAgICAgICAgQWRkcmVzcworMDAwCQkyNjAtMjZmCisxMDAJCTI5MC0yOWYKKzAxMAkJMmUwLTJlZgorMTEwCQkyZjAtMmZmCiswMDEJCTMwMC0zMGYKKzEwMQkJMzUwLTM1ZgorMDExCQkzODAtMzhmCisxMTEgCQkzZTAtM2VmCisKKworRElQIFN3aXRjaGVzIDEtNSBvZiBTVzIgZW5jb2RlIHRoZSBSQU0gYW5kIFJPTSBBZGRyZXNzIFJhbmdlOgorCitTd2l0Y2hlcyAgICAgICAgUkFNICAgICAgICAgICBST00KKzEyMzQ1ICAgICAgICAgICBBZGRyZXNzIFJhbmdlICBBZGRyZXNzIFJhbmdlCiswMDAwMAkJQzowMDAwLUM6MDdmZglDOjIwMDAtQzozZmZmCisxMDAwMAkJQzowODAwLUM6MGZmZgorMDEwMDAJCUM6MTAwMC1DOjE3ZmYKKzExMDAwCQlDOjE4MDAtQzoxZmZmCiswMDEwMAkJQzo0MDAwLUM6NDdmZglDOjYwMDAtQzo3ZmZmCisxMDEwMAkJQzo0ODAwLUM6NGZmZgorMDExMDAJCUM6NTAwMC1DOjU3ZmYgCisxMTEwMAkJQzo1ODAwLUM6NWZmZgorMDAwMTAJCUM6QzAwMC1DOkM3ZmYJQzpFMDAwLUM6ZmZmZgorMTAwMTAJCUM6QzgwMC1DOkNmZmYKKzAxMDEwCQlDOkQwMDAtQzpEN2ZmCisxMTAxMAkJQzpEODAwLUM6RGZmZgorMDAxMTAJCUQ6MDAwMC1EOjA3ZmYJRDoyMDAwLUQ6M2ZmZgorMTAxMTAJCUQ6MDgwMC1EOjBmZmYKKzAxMTEwCQlEOjEwMDAtRDoxN2ZmCisxMTExMAkJRDoxODAwLUQ6MWZmZgorMDAwMDEJCUQ6NDAwMC1EOjQ3ZmYJRDo2MDAwLUQ6N2ZmZgorMTAwMDEJCUQ6NDgwMC1EOjRmZmYKKzAxMDAxCQlEOjUwMDAtRDo1N2ZmCisxMTAwMQkJRDo1ODAwLUQ6NWZmZgorMDAxMDEJCUQ6ODAwMC1EOjg3ZmYJRDpBMDAwLUQ6YmZmZgorMTAxMDEJCUQ6ODgwMC1EOjhmZmYKKzAxMTAxCQlEOjkwMDAtRDo5N2ZmCisxMTEwMQkJRDo5ODAwLUQ6OWZmZiAKKzAwMDExCQlEOkMwMDAtRDpjN2ZmCUQ6RTAwMC1EOmZmZmYKKzEwMDExCQlEOkM4MDAtRDpjZmZmCiswMTAxMQkJRDpEMDAwLUQ6ZDdmZgorMTEwMTEJCUQ6RDgwMC1EOmRmZmYKKzAwMTExCQlFOjAwMDAtRTowN2ZmCUU6MjAwMC1FOjNmZmYKKzEwMTExCQlFOjA4MDAtRTowZmZmCiswMTExMQkJRToxMDAwLUU6MTdmZgorMTExMTEJCUU6MTgwMC1FOjFmZmYKKworCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCisqKiBQdXJlRGF0YSBDb3JwICoqCitQREk1MDcgKDgtYml0IGNhcmQpCistLS0tLS0tLS0tLS0tLS0tLS0tLQorICAtIGZyb20gTWFyayBSZWpob24gPG1kcmVqaG9uQG1hZ2kuY29tPiAoc2xpZ2h0IG1vZGlmaWNhdGlvbnMgYnkgQXZlcnkpCisgIC0gQXZlcnkncyBub3RlOiBJIHRoaW5rIFBESTUwOCBjYXJkcyAoYnV0IGRlZmluaXRlbHkgTk9UIFBESTUwOFBsdXMgY2FyZHMpCisgICAgYXJlIG1vc3RseSB0aGUgc2FtZSBhcyB0aGlzLiAgUERJNTA4UGx1cyBjYXJkcyBhcHBlYXIgdG8gYmUgbWFpbmx5CisgICAgc29mdHdhcmUtY29uZmlndXJlZC4KKworSnVtcGVyczoKKwlUaGVyZSBpcyBhIGp1bXBlciBhcnJheSBhdCB0aGUgYm90dG9tIG9mIHRoZSBjYXJkLCBuZWFyIHRoZSBlZGdlCisgICAgICAgIGNvbm5lY3Rvci4gIFRoaXMgYXJyYXkgaXMgbGFiZWxsZWQgSjEuICBUaGV5IGNvbnRyb2wgdGhlIElSUXMgYW5kCisgICAgICAgIHNvbWV0aGluZyBlbHNlLiAgUHV0IG9ubHkgb25lIGp1bXBlciBvbiB0aGUgSVJRIHBpbnMuCisKKwlFVFMxLCBFVFMyIGFyZSBmb3IgdGltaW5nIG9uIHZlcnkgbG9uZyBkaXN0YW5jZSBuZXR3b3Jrcy4gIFNlZSB0aGUKKwltb3JlIGdlbmVyYWwgaW5mb3JtYXRpb24gbmVhciB0aGUgdG9wIG9mIHRoaXMgZmlsZS4KKworCVRoZXJlIGlzIGEgSjIganVtcGVyIG9uIHR3byBwaW5zLiAgQSBqdW1wZXIgc2hvdWxkIGJlIHB1dCBvbiB0aGVtLAorICAgICAgICBzaW5jZSBpdCB3YXMgYWxyZWFkeSB0aGVyZSB3aGVuIEkgZ290IHRoZSBjYXJkLiAgSSBkb24ndCBrbm93IHdoYXQKKyAgICAgICAgdGhpcyBqdW1wZXIgaXMgZm9yIHRob3VnaC4KKworCVRoZXJlIGlzIGEgdHdvLWp1bXBlciBhcnJheSBmb3IgSjMuICBJIGRvbid0IGtub3cgd2hhdCBpdCBpcyBmb3IsCisgICAgICAgIGJ1dCB0aGVyZSB3ZXJlIGFscmVhZHkgdHdvIGp1bXBlcnMgb24gaXQgd2hlbiBJIGdvdCB0aGUgY2FyZC4gIEl0J3MKKyAgICAgICAgYSBzaXggcGluIGdyaWQgaW4gYSB0d28tYnktdGhyZWUgZmFzaGlvbi4gIFRoZSBqdW1wZXJzIHdlcmUKKyAgICAgICAgY29uZmlndXJlZCBhcyBmb2xsb3dzOgorCisJICAgLi0tLS0tLS0uCisJIG8gfCBvICAgbyB8CisJICAgOi0tLS0tLS06ICAgIC0tLS0tLT4gQWNjZXNzaWJsZSBlbmQgb2YgY2FyZCB3aXRoIGNvbm5lY3RvcnMKKwkgbyB8IG8gICBvIHwgICAgICAgICAgICAgaW4gdGhpcyBkaXJlY3Rpb24gLS0tLS0tLT4KKwkgICBgLS0tLS0tLScKKworQ2FybCBkZSBCaWxseSA8Q0FSTEBjYXJhaW5mby5jb20+IGV4cGxhaW5zIEozIGFuZCBKNDoKKworCUozIERpYWdyYW06CisKKyAgICAgICAgICAgLi0tLS0tLS0uCisgICAgICAgICBvIHwgbyAgIG8gfAorICAgICAgICAgICA6LS0tLS0tLTogICAgVFdJU1QgVGVjaG5vbG9neQorICAgICAgICAgbyB8IG8gICBvIHwKKyAgICAgICAgICAgYC0tLS0tLS0nCisgICAgICAgICAgIC4tLS0tLS0tLgorICAgICAgICAgICB8IG8gICBvIHwgbworICAgICAgICAgICA6LS0tLS0tLTogICAgQ09BWCBUZWNobm9sb2d5CisgICAgICAgICAgIHwgbyAgIG8gfCBvCisgICAgICAgICAgIGAtLS0tLS0tJworCisgIC0gSWYgdXNpbmcgY29heCBjYWJsZSBpbiBhIGJ1cyB0b3BvbG9neSB0aGUgSjQganVtcGVyIG11c3QgYmUgcmVtb3ZlZDsKKyAgICBwbGFjZSBpdCBvbiBvbmUgcGluLgorCisgIC0gSWYgdXNpbmcgYnVzIHRvcG9sb2d5IHdpdGggdHdpc3RlZCBwYWlyIHdpcmluZyBtb3ZlIHRoZSBKMyAKKyAgICBqdW1wZXJzIHNvIHRoZXkgY29ubmVjdCB0aGUgbWlkZGxlIHBpbiBhbmQgdGhlIHBpbnMgY2xvc2VzdCB0byB0aGUgUkoxMQorICAgIENvbm5lY3RvcnMuICBBbHNvIHRoZSBKNCBqdW1wZXIgbXVzdCBiZSByZW1vdmVkOyBwbGFjZSBpdCBvbiBvbmUgcGluIG9mCisgICAgSjQganVtcGVyIGZvciBzdG9yYWdlLgorCisgIC0gSWYgdXNpbmcgIHN0YXIgdG9wb2xvZ3kgd2l0aCB0d2lzdGVkIHBhaXIgd2lyaW5nIG1vdmUgdGhlIEozIAorICAgIGp1bXBlcnMgc28gdGhleSBjb25uZWN0IHRoZSBtaWRkbGUgcGluIGFuZCB0aGUgcGlucyBjbG9zZXN0IHRvIHRoZSBSSjExCisgICAgY29ubmVjdG9ycy4KKworCitESVAgU3dpdGNoZXM6CisKKwlUaGUgRElQIHN3aXRjaGVzIGFjY2Vzc2libGUgb24gdGhlIGFjY2Vzc2libGUgZW5kIG9mIHRoZSBjYXJkIHdoaWxlCisgICAgICAgIGl0IGlzIGluc3RhbGxlZCwgaXMgdXNlZCB0byBzZXQgdGhlIEFSQ25ldCBhZGRyZXNzLiAgVGhlcmUgYXJlIDgKKyAgICAgICAgc3dpdGNoZXMuICBVc2UgYW4gYWRkcmVzcyBmcm9tIDEgdG8gMjU0LgorCisJU3dpdGNoIE5vLgorCTEyMzQ1Njc4CUFSQ25ldCBhZGRyZXNzCisJLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwkwMDAwMDAwMAlGRiAgCShEb24ndCB1c2UgdGhpcyEpCisJMDAwMDAwMDEJRkUKKwkwMDAwMDAxMAlGRAorCS4uLi4KKwkxMTExMTEwMQkyCQorCTExMTExMTEwCTEKKwkxMTExMTExMQkwCShEb24ndCB1c2UgdGhpcyEpCisKKwlUaGVyZSBpcyBhbm90aGVyIGFycmF5IG9mIGVpZ2h0IERJUCBzd2l0Y2hlcyBhdCB0aGUgdG9wIG9mIHRoZQorICAgICAgICBjYXJkLiAgVGhlcmUgYXJlIGZpdmUgbGFiZWxsZWQgTVMwLU1TNCB3aGljaCBzZWVtIHRvIGNvbnRyb2wgdGhlCisgICAgICAgIG1lbW9yeSBhZGRyZXNzLCBhbmQgYW5vdGhlciB0aHJlZSBsYWJlbGxlZCBJTzAtSU8yIHdoaWNoIHNlZW0gdG8KKyAgICAgICAgY29udHJvbCB0aGUgYmFzZSBJL08gYWRkcmVzcyBvZiB0aGUgY2FyZC4KKworCVRoaXMgd2FzIGRpZmZpY3VsdCB0byB0ZXN0IGJ5IHRyaWFsIGFuZCBlcnJvciwgYW5kIHRoZSBJL08gYWRkcmVzc2VzCisgICAgICAgIGFyZSBpbiBhIHdlaXJkIG9yZGVyLiAgVGhpcyB3YXMgdGVzdGVkIGJ5IHNldHRpbmcgdGhlIERJUCBzd2l0Y2hlcywKKyAgICAgICAgcmVib290aW5nIHRoZSBjb21wdXRlciwgYW5kIGF0dGVtcHRpbmcgdG8gbG9hZCBBUkNFVEhFUiBhdCB2YXJpb3VzCisgICAgICAgIGFkZHJlc3NlcyAobW9zdGx5IGJldHdlZW4gMHgyMDAgYW5kIDB4NDAwKS4gIFRoZSBhZGRyZXNzIHRoYXQgY2F1c2VkCisgICAgICAgIHRoZSByZWQgdHJhbnNtaXQgTEVEIHRvIGJsaW5rLCBpcyB0aGUgb25lIHRoYXQgSSB0aG91Z2h0IHdvcmtzLgorCisJQWxzbywgdGhlIGFkZHJlc3MgMHgzRDAgc2VlbSB0byBoYXZlIGEgc3BlY2lhbCBtZWFuaW5nLCBzaW5jZSB0aGUKKyAgICAgICAgQVJDRVRIRVIgcGFja2V0IGRyaXZlciBsb2FkZWQgZmluZSwgYnV0IHdpdGhvdXQgdGhlIHJlZCBMRUQKKyAgICAgICAgYmxpbmtpbmcuICBJIGRvbid0IGtub3cgd2hhdCAweDNEMCBpcyBmb3IgdGhvdWdoLiAgSSByZWNvbW1lbmQgdXNpbmcKKyAgICAgICAgYW4gYWRkcmVzcyBvZiAweDMwMCBzaW5jZSBXaW5kb3dzIG1heSBub3QgbGlrZSBhZGRyZXNzZXMgYmVsb3cKKyAgICAgICAgMHgzMDAuCisKKwlJTyBTd2l0Y2ggTm8uCisJMjEwICAgICAgICAgICAgIEkvTyBhZGRyZXNzCisJLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCTExMSAgICAgICAgICAgICAweDI2MAorCTExMCAgICAgICAgICAgICAweDI5MAorCTEwMSAgICAgICAgICAgICAweDJFMAorCTEwMCAgICAgICAgICAgICAweDJGMAorCTAxMSAgICAgICAgICAgICAweDMwMAorCTAxMCAgICAgICAgICAgICAweDM1MAorCTAwMSAgICAgICAgICAgICAweDM4MAorCTAwMCAgICAgICAgICAgICAweDNFMAorCisJVGhlIG1lbW9yeSBzd2l0Y2hlcyBzZXQgYSByZXNlcnZlZCBhZGRyZXNzIHNwYWNlIG9mIDB4MTAwMCBieXRlcworICAgICAgICAoMHgxMDAgc2VnbWVudCB1bml0cywgb3IgNGspLiAgRm9yIGV4YW1wbGUgaWYgSSBzZXQgYW4gYWRkcmVzcyBvZgorICAgICAgICAweEQwMDAsIGl0IHdpbGwgdXNlIHVwIGFkZHJlc3NlcyAweEQwMDAgdG8gMHhEMTAwLgorCisJVGhlIG1lbW9yeSBzd2l0Y2hlcyB3ZXJlIHRlc3RlZCBieSBib290aW5nIHVzaW5nIFFFTU0zODYgc3RlYWx0aCwKKyAgICAgICAgYW5kIHVzaW5nIExPQURISSB0byBzZWUgd2hhdCBhZGRyZXNzIGF1dG9tYXRpY2FsbHkgYmVjYW1lIGV4Y2x1ZGVkCisgICAgICAgIGZyb20gdGhlIHVwcGVyIG1lbW9yeSByZWdpb25zLCBhbmQgdGhlbiBhdHRlbXB0aW5nIHRvIGxvYWQgQVJDRVRIRVIKKyAgICAgICAgdXNpbmcgdGhlc2UgYWRkcmVzc2VzLgorCisJSSByZWNvbW1lbmQgdXNpbmcgYW4gQVJDbmV0IG1lbW9yeSBhZGRyZXNzIG9mIDB4RDAwMCwgYW5kIHB1dHRpbmcKKyAgICAgICAgdGhlIEVNUyBwYWdlIGZyYW1lIGF0IDB4QzAwMCB3aGlsZSB1c2luZyBRRU1NIHN0ZWFsdGggbW9kZS4gIFRoYXQKKyAgICAgICAgd2F5LCB5b3UgZ2V0IGNvbnRpZ3VvdXMgaGlnaCBtZW1vcnkgZnJvbSAweEQxMDAgYWxtb3N0IGFsbCB0aGUgd2F5CisgICAgICAgIHRoZSBlbmQgb2YgdGhlIG1lZ2FieXRlLgorCisJTWVtb3J5IFN3aXRjaCAwIChNUzApIGRpZG4ndCBzZWVtIHRvIHdvcmsgcHJvcGVybHkgd2hlbiBzZXQgdG8gT0ZGCisgICAgICAgIG9uIG15IGNhcmQuICBJdCBjb3VsZCBiZSBtYWxmdW5jdGlvbmluZyBvbiBteSBjYXJkLiAgRXhwZXJpbWVudCB3aXRoCisgICAgICAgIGl0IE9OIGZpcnN0LCBhbmQgaWYgaXQgZG9lc24ndCB3b3JrLCBzZXQgaXQgdG8gT0ZGLiAgKEl0IG1heSBiZSBhCisgICAgICAgIG1vZGlmaWVyIGZvciB0aGUgMHgyMDAgYml0PykKKworCU1TIFN3aXRjaCBOby4KKwk0MzIxMCAgICAgICAgICAgTWVtb3J5IGFkZHJlc3MKKwktLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCTAwMDAxICAgICAgICAgICAweEUxMDAgIChndWVzc2VkIC0gd2FzIG5vdCBkZXRlY3RlZCBieSBRRU1NKQorCTAwMDExICAgICAgICAgICAweEUwMDAgIChndWVzc2VkIC0gd2FzIG5vdCBkZXRlY3RlZCBieSBRRU1NKQorCTAwMTAxICAgICAgICAgICAweEREMDAKKwkwMDExMSAgICAgICAgICAgMHhEQzAwCisJMDEwMDEgICAgICAgICAgIDB4RDkwMAorCTAxMDExICAgICAgICAgICAweEQ4MDAKKwkwMTEwMSAgICAgICAgICAgMHhENTAwCisJMDExMTEgICAgICAgICAgIDB4RDQwMAorCTEwMDAxICAgICAgICAgICAweEQxMDAKKwkxMDAxMSAgICAgICAgICAgMHhEMDAwCisJMTAxMDEgICAgICAgICAgIDB4Q0QwMAorCTEwMTExICAgICAgICAgICAweENDMDAKKwkxMTAwMSAgICAgICAgICAgMHhDOTAwIChndWVzc2VkIC0gY3Jhc2hlcyB0ZXN0ZWQgc3lzdGVtKQorCTExMDExICAgICAgICAgICAweEM4MDAgKGd1ZXNzZWQgLSBjcmFzaGVzIHRlc3RlZCBzeXN0ZW0pCisJMTExMDEgICAgICAgICAgIDB4QzUwMCAoZ3Vlc3NlZCAtIGNyYXNoZXMgdGVzdGVkIHN5c3RlbSkKKwkxMTExMSAgICAgICAgICAgMHhDNDAwIChndWVzc2VkIC0gY3Jhc2hlcyB0ZXN0ZWQgc3lzdGVtKQorCQorCQorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKworKiogQ05ldCBUZWNobm9sb2d5IEluYy4gKioKKzEyMCBTZXJpZXMgKDgtYml0IGNhcmRzKQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIC0gZnJvbSBKdWVyZ2VuIFNlaWZlcnQgPHNlaWZlcnRAaHR3bS5kZT4KKworCitDTkVUIFRFQ0hOT0xPR1kgSU5DLiAoQ05ldCkgQVJDTkVUIDEyMEEgU0VSSUVTCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK1RoaXMgZGVzY3JpcHRpb24gaGFzIGJlZW4gd3JpdHRlbiBieSBKdWVyZ2VuIFNlaWZlcnQgPHNlaWZlcnRAaHR3bS5kZT4KK3VzaW5nIGluZm9ybWF0aW9uIGZyb20gdGhlIGZvbGxvd2luZyBPcmlnaW5hbCBDTmV0IE1hbnVhbCAKKworICAgICAgICAgICAgICAiQVJDTkVUCisgICAgICAgICAgICBVU0VSJ1MgTUFOVUFMIAorICAgICAgICAgICAgICAgIGZvcgorICAgICAgICAgICAgICAgQ04xMjBBCisgICAgICAgICAgICAgICBDTjEyMEFCCisgICAgICAgICAgICAgICBDTjEyMFRQCisgICAgICAgICAgICAgICBDTjEyMFNUCisgICAgICAgICAgICAgICBDTjEyMFNCVAorICAgICAgICAgICAgIFAvTjoxMi0wMS0wMDA3CisgICAgICAgICAgICAgUmV2aXNpb24gMy4wMCIKKworQVJDTkVUIGlzIGEgcmVnaXN0ZXJlZCB0cmFkZW1hcmsgb2YgdGhlIERhdGFwb2ludCBDb3Jwb3JhdGlvbgorCitQL04gMTIwQSAgIEFSQ05FVCA4IGJpdCBYVC9BVCBTdGFyCitQL04gMTIwQUIgIEFSQ05FVCA4IGJpdCBYVC9BVCBCdXMKK1AvTiAxMjBUUCAgQVJDTkVUIDggYml0IFhUL0FUIFR3aXN0ZWQgUGFpcgorUC9OIDEyMFNUICBBUkNORVQgOCBiaXQgWFQvQVQgU3RhciwgVHdpc3RlZCBQYWlyCitQL04gMTIwU0JUIEFSQ05FVCA4IGJpdCBYVC9BVCBTdGFyLCBCdXMsIFR3aXN0ZWQgUGFpcgorCisgICAgX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCisgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fX3wKKyAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTEVEIHxfX198CisgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19ffAorICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE4gfCAgIHwgSUQ3CisgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbyB8ICAgfCBJRDYKKyAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkIHwgUyB8IElENQorICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUgfCBXIHwgSUQ0CisgICB8ICAgICAgICAgICAgICAgICAgICAgX19fX19fX19fX19fX19fX19fXyAgICAgICAgICAgICAgICAgICAgQSB8IDIgfCBJRDMKKyAgIHwgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICBkIHwgICB8IElEMgorICAgfCAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICB8ICAxIDIgMyA0IDUgNiA3IDggIGQgfCAgIHwgSUQxCisgICB8ICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgIHwgX19fX19fX19fX19fX19fX18gciB8X19ffCBJRDAKKyAgIHwgICAgICAgICAgICAgICAgICAgIHwgICAgICA5MEM2NSAgICAgICAgfHwgICAgICAgU1cxICAgICAgIHwgIF9fX198CisgICB8ICBKUCA4IDcgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgIHx8X19fX19fX19fX19fX19fX198IHwgICAgfAorICAgfCAgICB8b3xvfCAgSlAxICAgICAgfCAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICB8IEoyIHwKKyAgIHwgICAgfG98b3wgIHxvb3wgICAgIHwgICAgICAgICAgICAgICAgICAgfCAgICAgICAgIEpQIDEgMSAxICAgfCAgICB8CisgICB8ICAgX19fX19fX19fX19fX18gICB8ICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAwIDEgMiAgIHxfX19ffAorICAgfCAgfCAgUFJPTSAgICAgICAgfCAgfF9fX19fX19fX19fX19fX19fX198ICAgICAgICAgICB8b3xvfG98ICBfX19fX3wKKyAgIHwgID4gIFNPQ0tFVCAgICAgIHwgIEpQIDYgNSA0IDMgMiAgICAgICAgICAgICAgICAgICAgfG98b3xvfCB8IEoxICB8CisgICB8ICB8X19fX19fX19fX19fX198ICAgIHxvfG98b3xvfG98ICAgICAgICAgICAgICAgICAgIHxvfG98b3wgfF9fX19ffAorICAgfF9fX19fICAgICAgICAgICAgICAgICB8b3xvfG98b3xvfCAgICAgICAgICAgICAgICAgICBfX19fX19fX19fX19fX3wKKyAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgICAgICB8X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19ffAorCitMZWdlbmQ6CisKKzkwQzY1ICAgICAgIEFSQ05FVCBQcm9iZQorUzEgIDEtNTogICAgQmFzZSBNZW1vcnkgQWRkcmVzcyBTZWxlY3QKKyAgICA2LTg6ICAgIEJhc2UgSS9PIEFkZHJlc3MgU2VsZWN0CitTMiAgMS04OiAgICBOb2RlIElEIFNlbGVjdCAoSUQwLUlENykKK0pQMSAgICAgUk9NIEVuYWJsZSBTZWxlY3QKK0pQMiAgICAgSVJRMgorSlAzICAgICBJUlEzCitKUDQgICAgIElSUTQKK0pQNSAgICAgSVJRNQorSlA2ICAgICBJUlE3CitKUDcvSlA4ICAgICBFVDEsIEVUMiBUaW1lb3V0IFBhcmFtZXRlcnMKK0pQMTAvSlAxMSAgIENvYXggLyBUd2lzdGVkIFBhaXIgU2VsZWN0ICAoQ04xMjBTVC9TQlQgb25seSkKK0pQMTIgICAgICAgIFRlcm1pbmF0b3IgU2VsZWN0ICAgICAgIChDTjEyMEFCL1NUL1NCVCBvbmx5KQorSjEgICAgICBCTkMgUkc2Mi9VIENvbm5lY3RvciAgICAgICAgKGFsbCBleGNlcHQgQ04xMjBUUCkKK0oyICAgICAgVHdvIDYtcG9zaXRpb24gVGVsZXBob25lIEphY2sgICAoQ04xMjBUUC9TVC9TQlQgb25seSkKKworU2V0dGluZyBvbmUgb2YgdGhlIHN3aXRjaGVzIHRvIE9mZiBtZWFucyAiMSIsIE9uIG1lYW5zICIwIi4KKworCitTZXR0aW5nIHRoZSBOb2RlIElECistLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZSBlaWdodCBzd2l0Y2hlcyBpbiBTVzIgYXJlIHVzZWQgdG8gc2V0IHRoZSBub2RlIElELiBFYWNoIG5vZGUgYXR0YWNoZWQKK3RvIHRoZSBuZXR3b3JrIG11c3QgaGF2ZSBhbiB1bmlxdWUgbm9kZSBJRCB3aGljaCBtdXN0IGJlIGRpZmZlcmVudCBmcm9tIDAuCitTd2l0Y2ggMSAoSUQwKSBzZXJ2ZXMgYXMgdGhlIGxlYXN0IHNpZ25pZmljYW50IGJpdCAoTFNCKS4KKworVGhlIG5vZGUgSUQgaXMgdGhlIHN1bSBvZiB0aGUgdmFsdWVzIG9mIGFsbCBzd2l0Y2hlcyBzZXQgdG8gIjEiICAKK1RoZXNlIHZhbHVlcyBhcmU6CisKKyAgIFN3aXRjaCB8IExhYmVsIHwgVmFsdWUKKyAgIC0tLS0tLS18LS0tLS0tLXwtLS0tLS0tCisgICAgIDEgICAgfCBJRDAgICB8ICAgMQorICAgICAyICAgIHwgSUQxICAgfCAgIDIKKyAgICAgMyAgICB8IElEMiAgIHwgICA0CisgICAgIDQgICAgfCBJRDMgICB8ICAgOAorICAgICA1ICAgIHwgSUQ0ICAgfCAgMTYKKyAgICAgNiAgICB8IElENSAgIHwgIDMyCisgICAgIDcgICAgfCBJRDYgICB8ICA2NAorICAgICA4ICAgIHwgSUQ3ICAgfCAxMjgKKworU29tZSBFeGFtcGxlczoKKworICAgIFN3aXRjaCAgICAgICAgIHwgSGV4ICAgICB8IERlY2ltYWwgCisgICA4IDcgNiA1IDQgMyAyIDEgfCBOb2RlIElEIHwgTm9kZSBJRAorICAgLS0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS18LS0tLS0tLS0tCisgICAwIDAgMCAwIDAgMCAwIDAgfCAgICBub3QgYWxsb3dlZAorICAgMCAwIDAgMCAwIDAgMCAxIHwgICAgMSAgICB8ICAgIDEgCisgICAwIDAgMCAwIDAgMCAxIDAgfCAgICAyICAgIHwgICAgMgorICAgMCAwIDAgMCAwIDAgMSAxIHwgICAgMyAgICB8ICAgIDMKKyAgICAgICAuIC4gLiAgICAgICB8ICAgICAgICAgfAorICAgMCAxIDAgMSAwIDEgMCAxIHwgICA1NSAgICB8ICAgODUKKyAgICAgICAuIC4gLiAgICAgICB8ICAgICAgICAgfAorICAgMSAwIDEgMCAxIDAgMSAwIHwgICBBQSAgICB8ICAxNzAKKyAgICAgICAuIC4gLiAgICAgICB8ICAgICAgICAgfCAgCisgICAxIDEgMSAxIDEgMSAwIDEgfCAgIEZEICAgIHwgIDI1MworICAgMSAxIDEgMSAxIDEgMSAwIHwgICBGRSAgICB8ICAyNTQKKyAgIDEgMSAxIDEgMSAxIDEgMSB8ICAgRkYgICAgfCAgMjU1CisKKworU2V0dGluZyB0aGUgSS9PIEJhc2UgQWRkcmVzcworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGUgbGFzdCB0aHJlZSBzd2l0Y2hlcyBpbiBzd2l0Y2ggYmxvY2sgU1cxIGFyZSB1c2VkIHRvIHNlbGVjdCBvbmUKK29mIGVpZ2h0IHBvc3NpYmxlIEkvTyBCYXNlIGFkZHJlc3NlcyB1c2luZyB0aGUgZm9sbG93aW5nIHRhYmxlCisKKworICAgU3dpdGNoICAgICAgfCBIZXggSS9PCisgICAgNiAgIDcgICA4ICB8IEFkZHJlc3MKKyAgIC0tLS0tLS0tLS0tLXwtLS0tLS0tLQorICAgT04gIE9OICBPTiAgfCAgMjYwCisgICBPRkYgT04gIE9OICB8ICAyOTAKKyAgIE9OICBPRkYgT04gIHwgIDJFMCAgKE1hbnVmYWN0dXJlcidzIGRlZmF1bHQpCisgICBPRkYgT0ZGIE9OICB8ICAyRjAKKyAgIE9OICBPTiAgT0ZGIHwgIDMwMAorICAgT0ZGIE9OICBPRkYgfCAgMzUwCisgICBPTiAgT0ZGIE9GRiB8ICAzODAKKyAgIE9GRiBPRkYgT0ZGIHwgIDNFMAorCisKK1NldHRpbmcgdGhlIEJhc2UgTWVtb3J5IChSQU0pIGJ1ZmZlciBBZGRyZXNzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGUgbWVtb3J5IGJ1ZmZlciAoUkFNKSByZXF1aXJlcyAySy4gVGhlIGJhc2Ugb2YgdGhpcyBidWZmZXIgY2FuIGJlIAorbG9jYXRlZCBpbiBhbnkgb2YgZWlnaHQgcG9zaXRpb25zLiBUaGUgYWRkcmVzcyBvZiB0aGUgQm9vdCBQcm9tIGlzCittZW1vcnkgYmFzZSArIDhLIG9yIG1lbW9yeSBiYXNlICsgMHgyMDAwLgorU3dpdGNoZXMgMS01IG9mIHN3aXRjaCBibG9jayBTVzEgc2VsZWN0IHRoZSBNZW1vcnkgQmFzZSBhZGRyZXNzLgorCisgICBTd2l0Y2ggICAgICAgICAgICAgIHwgSGV4IFJBTSB8IEhleCBST00KKyAgICAxICAgMiAgIDMgICA0ICAgNSAgfCBBZGRyZXNzIHwgQWRkcmVzcyAqKQorICAgLS0tLS0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tfC0tLS0tLS0tLS0tCisgICBPTiAgT04gIE9OICBPTiAgT04gIHwgIEMwMDAwICB8ICBDMjAwMAorICAgT04gIE9OICBPRkYgT04gIE9OICB8ICBDNDAwMCAgfCAgQzYwMDAKKyAgIE9OICBPTiAgT04gIE9GRiBPTiAgfCAgQ0MwMDAgIHwgIENFMDAwCisgICBPTiAgT04gIE9GRiBPRkYgT04gIHwgIEQwMDAwICB8ICBEMjAwMCAgKE1hbnVmYWN0dXJlcidzIGRlZmF1bHQpCisgICBPTiAgT04gIE9OICBPTiAgT0ZGIHwgIEQ0MDAwICB8ICBENjAwMAorICAgT04gIE9OICBPRkYgT04gIE9GRiB8ICBEODAwMCAgfCAgREEwMDAKKyAgIE9OICBPTiAgT04gIE9GRiBPRkYgfCAgREMwMDAgIHwgIERFMDAwCisgICBPTiAgT04gIE9GRiBPRkYgT0ZGIHwgIEUwMDAwICB8ICBFMjAwMAorICAKKyopIFRvIGVuYWJsZSB0aGUgQm9vdCBST00gaW5zdGFsbCB0aGUganVtcGVyIEpQMQorCitOb3RlOiBTaW5jZSB0aGUgc3dpdGNoZXMgMSBhbmQgMiBhcmUgYWx3YXlzIHNldCB0byBPTiBpdCBtYXkgYmUgcG9zc2libGUKKyAgICAgIHRoYXQgdGhleSBjYW4gYmUgdXNlZCB0byBhZGQgYW4gb2Zmc2V0IG9mIDJLLCA0SyBvciA2SyB0byB0aGUgYmFzZQorICAgICAgYWRkcmVzcywgYnV0IHRoaXMgZmVhdHVyZSBpcyBub3QgZG9jdW1lbnRlZCBpbiB0aGUgbWFudWFsIGFuZCBJCisgICAgICBoYXZlbid0IHRlc3RlZCBpdCB5ZXQuCisKKworU2V0dGluZyB0aGUgSW50ZXJydXB0IExpbmUKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RvIHNlbGVjdCBhIGhhcmR3YXJlIGludGVycnVwdCBsZXZlbCBpbnN0YWxsIG9uZSAob25seSBvbmUhKSBvZiB0aGUganVtcGVycworSlAyLCBKUDMsIEpQNCwgSlA1LCBKUDYuIEpQMiBpcyB0aGUgZGVmYXVsdC4KKworICAgSnVtcGVyIHwgSVJRICAgICAKKyAgIC0tLS0tLS18LS0tLS0KKyAgICAgMiAgICB8ICAyCisgICAgIDMgICAgfCAgMworICAgICA0ICAgIHwgIDQKKyAgICAgNSAgICB8ICA1CisgICAgIDYgICAgfCAgNworCisKK1NldHRpbmcgdGhlIEludGVybmFsIFRlcm1pbmF0b3Igb24gQ04xMjBBQi9UUC9TQlQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZSBqdW1wZXIgSlAxMiBpcyB1c2VkIHRvIGVuYWJsZSB0aGUgaW50ZXJuYWwgdGVybWluYXRvci4gCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAtLS0tLQorICAgICAgIDAgICAgICAgICAgICAgICAgfCAgMCAgfCAgICAgCisgICAgIC0tLS0tICAgT04gICAgICAgICB8ICAgICB8ICBPTgorICAgIHwgIDAgIHwgICAgICAgICAgICAgfCAgMCAgfAorICAgIHwgICAgIHwgIE9GRiAgICAgICAgIC0tLS0tICAgT0ZGCisgICAgfCAgMCAgfCAgICAgICAgICAgICAgICAwCisgICAgIC0tLS0tCisgICBUZXJtaW5hdG9yICAgICAgICAgIFRlcm1pbmF0b3IgCisgICAgZGlzYWJsZWQgICAgICAgICAgICBlbmFibGVkCisgIAorCitTZWxlY3RpbmcgdGhlIENvbm5lY3RvciBUeXBlIG9uIENOMTIwU1QvU0JUCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICAgSlAxMCAgICBKUDExICAgICAgICBKUDEwICAgIEpQMTEKKyAgICAgICAgICAgICAgICAgICAgICAgICAtLS0tLSAgIC0tLS0tCisgICAgICAgMCAgICAgICAwICAgICAgICB8ICAwICB8IHwgIDAgIHwgICAgICAgCisgICAgIC0tLS0tICAgLS0tLS0gICAgICB8ICAgICB8IHwgICAgIHwKKyAgICB8ICAwICB8IHwgIDAgIHwgICAgIHwgIDAgIHwgfCAgMCAgfAorICAgIHwgICAgIHwgfCAgICAgfCAgICAgIC0tLS0tICAgLS0tLS0KKyAgICB8ICAwICB8IHwgIDAgIHwgICAgICAgIDAgICAgICAgMCAKKyAgICAgLS0tLS0gICAtLS0tLQorICAgICBDb2F4aWFsIENhYmxlICAgICAgIFR3aXN0ZWQgUGFpciBDYWJsZSAKKyAgICAgICAoRGVmYXVsdCkKKworCitTZXR0aW5nIHRoZSBUaW1lb3V0IFBhcmFtZXRlcnMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGUganVtcGVycyBsYWJlbGVkIEVYVDEgYW5kIEVYVDIgYXJlIHVzZWQgdG8gZGV0ZXJtaW5lIHRoZSB0aW1lb3V0IAorcGFyYW1ldGVycy4gVGhlc2UgdHdvIGp1bXBlcnMgYXJlIG5vcm1hbGx5IGxlZnQgb3Blbi4KKworCisKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKKyoqIENOZXQgVGVjaG5vbG9neSBJbmMuICoqCisxNjAgU2VyaWVzICgxNi1iaXQgY2FyZHMpCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIC0gZnJvbSBKdWVyZ2VuIFNlaWZlcnQgPHNlaWZlcnRAaHR3bS5kZT4KKworQ05FVCBURUNITk9MT0dZIElOQy4gKENOZXQpIEFSQ05FVCAxNjBBIFNFUklFUworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitUaGlzIGRlc2NyaXB0aW9uIGhhcyBiZWVuIHdyaXR0ZW4gYnkgSnVlcmdlbiBTZWlmZXJ0IDxzZWlmZXJ0QGh0d20uZGU+Cit1c2luZyBpbmZvcm1hdGlvbiBmcm9tIHRoZSBmb2xsb3dpbmcgT3JpZ2luYWwgQ05ldCBNYW51YWwgCisKKyAgICAgICAgICAgICAgIkFSQ05FVAorICAgICAgICAgICAgVVNFUidTIE1BTlVBTCAKKyAgICAgICAgICAgICAgICBmb3IKKyAgICAgICAgICAgICAgIENOMTYwQQorICAgICAgICAgICAgICAgQ04xNjBBQgorICAgICAgICAgICAgICAgQ04xNjBUUAorICAgICAgICAgICAgIFAvTjoxMi0wMS0wMDA2CisgICAgICAgICAgICAgUmV2aXNpb24gMy4wMCIKKworQVJDTkVUIGlzIGEgcmVnaXN0ZXJlZCB0cmFkZW1hcmsgb2YgdGhlIERhdGFwb2ludCBDb3Jwb3JhdGlvbgorCitQL04gMTYwQSAgIEFSQ05FVCAxNiBiaXQgWFQvQVQgU3RhcgorUC9OIDE2MEFCICBBUkNORVQgMTYgYml0IFhUL0FUIEJ1cworUC9OIDE2MFRQICBBUkNORVQgMTYgYml0IFhUL0FUIFR3aXN0ZWQgUGFpcgorCisgICBfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCisgIDwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fX19fX19fX19fX19fX19fX19fX19fX18gICAgICAgICAgX19ffAorICA+ICAgICAgICAgICAgICAgfG9vfCBKUDIgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICBMRUQgfF9fX3wKKyAgPCAgICAgICAgICAgICAgIHxvb3wgSlAxICAgICB8ICAgICAgICA5MDI2ICAgICAgICAgICAgIHwgICAgTEVEIHxfX198CisgID4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfF9fX19fX19fX19fX19fX19fX19fX19fX198ICAgICAgICAgX19ffAorICA8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE4gfCAgIHwgSUQ3CisgID4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxICAgICAgbyB8ICAgfCBJRDYKKyAgPCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEgMiAzIDQgNSA2IDcgOCA5IDAgICAgICBkIHwgUyB8IElENQorICA+ICAgICAgICAgX19fX19fX19fX19fX19fICAgICAgICAgICBfX19fX19fX19fX19fX19fX19fX18gICAgIGUgfCBXIHwgSUQ0CisgIDwgICAgICAgIHwgICAgIFBST00gICAgICB8ICAgICAgICAgfCAgICAgICAgIFNXMSAgICAgICAgIHwgICAgQSB8IDIgfCBJRDMKKyAgPiAgICAgICAgPiAgICBTT0NLRVQgICAgIHwgICAgICAgICB8X19fX19fX19fX19fX19fX19fX19ffCAgICBkIHwgICB8IElEMgorICA8ICAgICAgICB8X19fX19fX19fX19fX19ffCAgICAgICAgICB8IElPLUJhc2UgICB8IE1FTSAgIHwgICAgIGQgfCAgIHwgSUQxCisgID4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgciB8X19ffCBJRDAKKyAgPCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fX198CisgID4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgfAorICA8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEoxIHwKKyAgPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICB8CisgIDwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxfX19ffAorICA+ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEgMSAxIDEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgPCAgMyA0IDUgNiA3ICAgICAgSlAgICAgIDggOSAwIDEgMiAzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgID4gfG98b3xvfG98b3wgICAgICAgICAgIHxvfG98b3xvfG98b3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICA8IHxvfG98b3xvfG98IF9fICAgICAgICB8b3xvfG98b3xvfG98ICAgICAgICAgICAgICAgICAgICBfX19fX19fX19fX3wKKyAgPiAgICAgICAgICAgIHwgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgIDxfX19fX19fX19fX198ICB8X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19ffAorCitMZWdlbmQ6CisKKzkwMjYgICAgICAgICAgICBBUkNORVQgUHJvYmUKK1NXMSAxLTY6ICAgIEJhc2UgSS9PIEFkZHJlc3MgU2VsZWN0CisgICAgNy0xMDogICBCYXNlIE1lbW9yeSBBZGRyZXNzIFNlbGVjdAorU1cyIDEtODogICAgTm9kZSBJRCBTZWxlY3QgKElEMC1JRDcpCitKUDEvSlAyICAgICBFVDEsIEVUMiBUaW1lb3V0IFBhcmFtZXRlcnMKK0pQMy1KUDEzICAgIEludGVycnVwdCBTZWxlY3QKK0oxICAgICAgQk5DIFJHNjIvVSBDb25uZWN0b3IgICAgICAgIChDTjE2MEEvQUIgb25seSkKK0oxICAgICAgVHdvIDYtcG9zaXRpb24gVGVsZXBob25lIEphY2sgICAoQ04xNjBUUCBvbmx5KQorTEVECisKK1NldHRpbmcgb25lIG9mIHRoZSBzd2l0Y2hlcyB0byBPZmYgbWVhbnMgIjEiLCBPbiBtZWFucyAiMCIuCisKKworU2V0dGluZyB0aGUgTm9kZSBJRAorLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGUgZWlnaHQgc3dpdGNoZXMgaW4gU1cyIGFyZSB1c2VkIHRvIHNldCB0aGUgbm9kZSBJRC4gRWFjaCBub2RlIGF0dGFjaGVkCit0byB0aGUgbmV0d29yayBtdXN0IGhhdmUgYW4gdW5pcXVlIG5vZGUgSUQgd2hpY2ggbXVzdCBiZSBkaWZmZXJlbnQgZnJvbSAwLgorU3dpdGNoIDEgKElEMCkgc2VydmVzIGFzIHRoZSBsZWFzdCBzaWduaWZpY2FudCBiaXQgKExTQikuCisKK1RoZSBub2RlIElEIGlzIHRoZSBzdW0gb2YgdGhlIHZhbHVlcyBvZiBhbGwgc3dpdGNoZXMgc2V0IHRvICIxIiAgCitUaGVzZSB2YWx1ZXMgYXJlOgorCisgICBTd2l0Y2ggfCBMYWJlbCB8IFZhbHVlCisgICAtLS0tLS0tfC0tLS0tLS18LS0tLS0tLQorICAgICAxICAgIHwgSUQwICAgfCAgIDEKKyAgICAgMiAgICB8IElEMSAgIHwgICAyCisgICAgIDMgICAgfCBJRDIgICB8ICAgNAorICAgICA0ICAgIHwgSUQzICAgfCAgIDgKKyAgICAgNSAgICB8IElENCAgIHwgIDE2CisgICAgIDYgICAgfCBJRDUgICB8ICAzMgorICAgICA3ICAgIHwgSUQ2ICAgfCAgNjQKKyAgICAgOCAgICB8IElENyAgIHwgMTI4CisKK1NvbWUgRXhhbXBsZXM6CisKKyAgICBTd2l0Y2ggICAgICAgICB8IEhleCAgICAgfCBEZWNpbWFsIAorICAgOCA3IDYgNSA0IDMgMiAxIHwgTm9kZSBJRCB8IE5vZGUgSUQKKyAgIC0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tfC0tLS0tLS0tLQorICAgMCAwIDAgMCAwIDAgMCAwIHwgICAgbm90IGFsbG93ZWQKKyAgIDAgMCAwIDAgMCAwIDAgMSB8ICAgIDEgICAgfCAgICAxIAorICAgMCAwIDAgMCAwIDAgMSAwIHwgICAgMiAgICB8ICAgIDIKKyAgIDAgMCAwIDAgMCAwIDEgMSB8ICAgIDMgICAgfCAgICAzCisgICAgICAgLiAuIC4gICAgICAgfCAgICAgICAgIHwKKyAgIDAgMSAwIDEgMCAxIDAgMSB8ICAgNTUgICAgfCAgIDg1CisgICAgICAgLiAuIC4gICAgICAgfCAgICAgICAgIHwKKyAgIDEgMCAxIDAgMSAwIDEgMCB8ICAgQUEgICAgfCAgMTcwCisgICAgICAgLiAuIC4gICAgICAgfCAgICAgICAgIHwgIAorICAgMSAxIDEgMSAxIDEgMCAxIHwgICBGRCAgICB8ICAyNTMKKyAgIDEgMSAxIDEgMSAxIDEgMCB8ICAgRkUgICAgfCAgMjU0CisgICAxIDEgMSAxIDEgMSAxIDEgfCAgIEZGICAgIHwgIDI1NQorCisKK1NldHRpbmcgdGhlIEkvTyBCYXNlIEFkZHJlc3MKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlIGZpcnN0IHNpeCBzd2l0Y2hlcyBpbiBzd2l0Y2ggYmxvY2sgU1cxIGFyZSB1c2VkIHRvIHNlbGVjdCB0aGUgSS9PIEJhc2UKK2FkZHJlc3MgdXNpbmcgdGhlIGZvbGxvd2luZyB0YWJsZToKKworICAgICAgICAgICAgIFN3aXRjaCAgICAgICAgfCBIZXggSS9PCisgICAgMSAgIDIgICAzICAgNCAgIDUgICA2ICB8IEFkZHJlc3MKKyAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tLQorICAgT0ZGIE9OICBPTiAgT0ZGIE9GRiBPTiAgfCAgMjYwCisgICBPRkYgT04gIE9GRiBPTiAgT04gIE9GRiB8ICAyOTAKKyAgIE9GRiBPTiAgT0ZGIE9GRiBPRkYgT04gIHwgIDJFMCAgKE1hbnVmYWN0dXJlcidzIGRlZmF1bHQpCisgICBPRkYgT04gIE9GRiBPRkYgT0ZGIE9GRiB8ICAyRjAKKyAgIE9GRiBPRkYgT04gIE9OICBPTiAgT04gIHwgIDMwMAorICAgT0ZGIE9GRiBPTiAgT0ZGIE9OICBPRkYgfCAgMzUwCisgICBPRkYgT0ZGIE9GRiBPTiAgT04gIE9OICB8ICAzODAKKyAgIE9GRiBPRkYgT0ZGIE9GRiBPRkYgT04gIHwgIDNFMAorCitOb3RlOiBPdGhlciBJTy1CYXNlIGFkZHJlc3NlcyBzZWVtIHRvIGJlIHNlbGVjdGFibGUsIGJ1dCBvbmx5IHRoZSBhYm92ZQorICAgICAgY29tYmluYXRpb25zIGFyZSBkb2N1bWVudGVkLgorCisKK1NldHRpbmcgdGhlIEJhc2UgTWVtb3J5IChSQU0pIGJ1ZmZlciBBZGRyZXNzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGUgc3dpdGNoZXMgNy0xMCBvZiBzd2l0Y2ggYmxvY2sgU1cxIGFyZSB1c2VkIHRvIHNlbGVjdCB0aGUgTWVtb3J5CitCYXNlIGFkZHJlc3Mgb2YgdGhlIFJBTSAoMkspIGFuZCB0aGUgUFJPTS4KKworICAgU3dpdGNoICAgICAgICAgIHwgSGV4IFJBTSB8IEhleCBST00KKyAgICA3ICAgOCAgIDkgIDEwICB8IEFkZHJlc3MgfCBBZGRyZXNzCisgICAtLS0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tLXwtLS0tLS0tLS0tLQorICAgT0ZGIE9GRiBPTiAgT04gIHwgIEMwMDAwICB8ICBDODAwMAorICAgT0ZGIE9GRiBPTiAgT0ZGIHwgIEQwMDAwICB8ICBEODAwMCAoRGVmYXVsdCkKKyAgIE9GRiBPRkYgT0ZGIE9OICB8ICBFMDAwMCAgfCAgRTgwMDAKKworTm90ZTogT3RoZXIgTUVNLUJhc2UgYWRkcmVzc2VzIHNlZW0gdG8gYmUgc2VsZWN0YWJsZSwgYnV0IG9ubHkgdGhlIGFib3ZlCisgICAgICBjb21iaW5hdGlvbnMgYXJlIGRvY3VtZW50ZWQuCisKKworU2V0dGluZyB0aGUgSW50ZXJydXB0IExpbmUKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RvIHNlbGVjdCBhIGhhcmR3YXJlIGludGVycnVwdCBsZXZlbCBpbnN0YWxsIG9uZSAob25seSBvbmUhKSBvZiB0aGUganVtcGVycworSlAzIHRocm91Z2ggSlAxMyB1c2luZyB0aGUgZm9sbG93aW5nIHRhYmxlOgorCisgICBKdW1wZXIgfCBJUlEgICAgIAorICAgLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLQorICAgICAzICAgIHwgIDE0CisgICAgIDQgICAgfCAgMTUKKyAgICAgNSAgICB8ICAxMgorICAgICA2ICAgIHwgIDExCisgICAgIDcgICAgfCAgMTAKKyAgICAgOCAgICB8ICAgMworICAgICA5ICAgIHwgICA0CisgICAgMTAgICAgfCAgIDUKKyAgICAxMSAgICB8ICAgNgorICAgIDEyICAgIHwgICA3CisgICAgMTMgICAgfCAgIDIgKD05KSBEZWZhdWx0IQorCitOb3RlOiAgLSBEbyBub3QgdXNlIEpQMTE9SVJRNiwgaXQgbWF5IGNvbmZsaWN0IHdpdGggeW91ciBGbG9wcHkgRGlzaworICAgICAgICAgQ29udHJvbGxlcgorICAgICAgIC0gVXNlIEpQMz1JUlExNCBvbmx5LCBpZiB5b3UgZG9uJ3QgaGF2ZSBhbiBJREUtLCBNRk0tLCBvciBSTEwtCisgICAgICAgICBIYXJkIERpc2ssIGl0IG1heSBjb25mbGljdCB3aXRoIHRoZWlyIGNvbnRyb2xsZXJzCisKKworU2V0dGluZyB0aGUgVGltZW91dCBQYXJhbWV0ZXJzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlIGp1bXBlcnMgbGFiZWxlZCBKUDEgYW5kIEpQMiBhcmUgdXNlZCB0byBkZXRlcm1pbmUgdGhlIHRpbWVvdXQKK3BhcmFtZXRlcnMuIFRoZXNlIHR3byBqdW1wZXJzIGFyZSBub3JtYWxseSBsZWZ0IG9wZW4uCisKKworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKworKiogTGFudGVjaCAqKgorOC1iaXQgY2FyZCwgdW5rbm93biBtb2RlbAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAtIGZyb20gVmxhZCBMdW5ndSA8dmx1bmd1QHVnYWwucm8+IC0gaGlzIGUtbWFpbCBhZGRyZXNzIHNlZW1lZCBicm9rZW4gYXQKKyAgICB0aGUgdGltZSBJIHRyaWVkIHRvIHJlYWNoIGhpbS4gIFNvcnJ5IFZsYWQsIGlmIHlvdSBkaWRuJ3QgZ2V0IG15IHJlcGx5LgorCisgICBfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCisgICB8ICAgMSAgICAgICAgIDggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgfCAgIF9fX19fX19fX19fICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3wKKyAgIHwgICB8ICAgU1cxICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExFRCB8X198CisgICB8ICAgfF9fX19fX19fX198ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fX3wKKyAgIHwgICAgICAgICAgICAgICAgX19fX19fX19fX19fX19fX19fX19fICAgICAgICAgICAgICAgICAgICAgICB8UyB8IDgKKyAgIHwgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICB8VyB8CisgICB8ICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgfDIgfAorICAgfCAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgIHxfX3wgMQorICAgfCAgICAgICAgICAgICAgICB8ICAgICAgVU05MDY1TCAgICAgIHwgICAgIHxvfCAgSlA0ICAgICAgICAgX19fX3xfX19fCisgICB8ICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgfCAgICAgfG98ICAgICAgICAgICAgICB8ICBDTiAgICB8CisgICB8ICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICB8X19fX19fX198CisgICB8ICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgfCAgICAgICAgICAgICAgICB8X19fX19fX19fX19fX19fX19fX3wgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgfCAgICAgIF9fX19fX19fX19fX18gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgIHwgICAgICB8ICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICB8ICAgICAgfCAgICBQUk9NICAgIHwgICAgICAgIHxvb29vb3wgIEpQNiAgICAgICAgICAgICAgICAgICAgICAgfAorICAgfCAgICAgIHxfX19fX19fX19fX198ICAgICAgICB8b29vb298ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgIHxfX19fX19fX19fX19fICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXyAgIF98CisgICAgICAgICAgICAgICAgfF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19ffCB8X198CisKKworVU05MDY1TCA6IEFSQ25ldCBDb250cm9sbGVyCisKK1NXIDEgICAgOiBTaGFyZWQgTWVtb3J5IEFkZHJlc3MgYW5kIEkvTyBCYXNlCisKKyAgICAgICAgT049MAorCisgICAgICAgIDEyMzQ1fE1lbW9yeSBBZGRyZXNzCisgICAgICAgIC0tLS0tfC0tLS0tLS0tLS0tLS0tCisgICAgICAgIDAwMDAxfCAgRDQwMDAKKyAgICAgICAgMDAwMTB8ICBDQzAwMAorICAgICAgICAwMDExMHwgIEQwMDAwCisgICAgICAgIDAxMTEwfCAgRDEwMDAKKyAgICAgICAgMDExMDF8ICBEOTAwMAorICAgICAgICAxMDAxMHwgIENDODAwCisgICAgICAgIDEwMDExfCAgREM4MDAKKyAgICAgICAgMTExMTB8ICBEMTgwMAorCitJdCBzZWVtcyB0aGF0IHRoZSBiaXRzIGFyZSBjb25zaWRlcmVkIGluIHJldmVyc2Ugb3JkZXIuICBBbHNvLCB5b3UgbXVzdAorb2JzZXJ2ZSB0aGF0IHNvbWUgb2YgdGhvc2UgYWRkcmVzc2VzIGFyZSB1bnVzdWFsIGFuZCBJIGRpZG4ndCBwcm9iZSB0aGVtOyBJCit1c2VkIGEgbWVtb3J5IGR1bXAgaW4gRE9TIHRvIGlkZW50aWZ5IHRoZW0uICBGb3IgdGhlIDAwMDAwIGNvbmZpZ3VyYXRpb24gYW5kCitzb21lIG90aGVycyB0aGF0IEkgZGlkbid0IHdyaXRlIGhlcmUgdGhlIGNhcmQgc2VlbXMgdG8gY29uZmxpY3Qgd2l0aCB0aGUKK3ZpZGVvIGNhcmQgKGFuIFMzIEdFTkRBQykuIEkgbGVhdmUgdGhlIGZ1bGwgZGVjb2Rpbmcgb2YgdGhvc2UgYWRkcmVzc2VzIHRvCit5b3UuCisKKyAgICAgICAgNjc4fCBJL08gQWRkcmVzcworICAgICAgICAtLS18LS0tLS0tLS0tLS0tCisgICAgICAgIDAwMHwgICAgMjYwCisgICAgICAgIDAwMXwgICAgZmFpbGVkIHByb2JlCisgICAgICAgIDAxMHwgICAgMkUwCisgICAgICAgIDAxMXwgICAgMzgwCisgICAgICAgIDEwMHwgICAgMjkwCisgICAgICAgIDEwMXwgICAgMzUwCisgICAgICAgIDExMHwgICAgZmFpbGVkIHByb2JlCisgICAgICAgIDExMXwgICAgM0UwCisKK1NXIDIgIDogTm9kZSBJRCAoYmluYXJ5IGNvZGVkKQorCitKUCA0ICA6IEJvb3QgUFJPTSBlbmFibGUgICBDTE9TRSAtIGVuYWJsZWQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIE9QRU4gIC0gZGlzYWJsZWQKKworSlAgNiAgOiBJUlEgc2V0IChPTkxZIE9ORSBqdW1wZXIgb24gMS01IGZvciBJUlEgMi02KQorCisKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKKyoqIEFjZXIgKioKKzgtYml0IGNhcmQsIE1vZGVsIDUyMTAtMDAzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAtIGZyb20gVm9qdGVjaCBQYXZsaWsgPHZvanRlY2hAc3VzZS5jej4gdXNpbmcgcG9ydGlvbnMgb2YgdGhlIGV4aXN0aW5nCisgICAgYXJjbmV0LWhhcmR3YXJlIGZpbGUuCisKK1RoaXMgaXMgYSA5MEMyNiBiYXNlZCBjYXJkLiAgSXRzIGNvbmZpZ3VyYXRpb24gc2VlbXMgc2ltaWxhciB0byB0aGUgU01DCitQQzEwMCwgYnV0IGhhcyBzb21lIGFkZGl0aW9uYWwganVtcGVycyBJIGRvbid0IGtub3cgdGhlIG1lYW5pbmcgb2YuCisKKyAgICAgICAgICAgICAgIF9fCisgICAgICAgICAgICAgIHwgIHwKKyAgIF9fX19fX19fX19ffF9ffF9fX19fX19fX19fX19fX19fX19fX19fX18KKyAgfCAgICAgICAgIHwgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICB8CisgIHwgICAgICAgICB8IEJOQyAgfCAgICAgICAgICAgICAgICAgICAgICAgfAorICB8ICAgICAgICAgfF9fX19fX3wgICAgICAgICAgICAgICAgICAgIF9fX3wKKyAgfCAgX19fX19fX19fX19fX19fX19fX19fICAgICAgICAgICAgIHxfX18gIAorICB8IHwgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgIHwKKyAgfCB8IEh5YnJpZCBJQyAgICAgICAgICAgfCAgICAgICAgICAgICAgICB8CisgIHwgfCAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgb3xvIEoxICAgfAorICB8IHxfX19fX19fX19fX19fX19fX19fX198ICAgICAgIDh8OCAgICAgIHwKKyAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4fDggSjUgICB8CisgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3xvICAgICAgfAorICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDh8OCAgICAgIHwKKyAgfF9fICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4fDggICAgICB8CisgKHxfX3wgTEVEICAgICAgICAgICAgICAgICAgICAgICAgb3xvICAgICAgfAorICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDh8OCAgICAgIHwKKyAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4fDggSjE1ICB8CisgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICB8ICAgICAgICAgICAgICAgICAgICBfX19fXyAgICAgICAgICAgICAgIHwKKyAgfCAgICAgICAgICAgICAgICAgICB8ICAgICB8ICAgX19fX18gICAgICB8CisgIHwgICAgICAgICAgICAgICAgICAgfCAgICAgfCAgfCAgICAgfCAgX19ffAorICB8ICAgICAgICAgICAgICAgICAgIHwgICAgIHwgIHwgICAgIHwgfCAgICAKKyAgfCAgX19fX18gICAgICAgICAgICB8IFJPTSB8ICB8IFVGUyB8IHwgICAgCisgIHwgfCAgICAgfCAgICAgICAgICAgfCAgICAgfCAgfCAgICAgfCB8ICAgCisgIHwgfCAgICAgfCAgICAgX19fICAgfCAgICAgfCAgfCAgICAgfCB8ICAgCisgIHwgfCAgICAgfCAgICB8ICAgfCAgfF9fLl9ffCAgfF9fLl9ffCB8ICAgCisgIHwgfCBOQ1IgfCAgICB8WFRMfCAgIF9fX19fICAgIF9fX19fICB8ICAgCisgIHwgfCAgICAgfCAgICB8X19ffCAgfCAgICAgfCAgfCAgICAgfCB8ICAgCisgIHwgfDkwQzI2fCAgICAgICAgICAgfCAgICAgfCAgfCAgICAgfCB8ICAgCisgIHwgfCAgICAgfCAgICAgICAgICAgfCBSQU0gfCAgfCBVRlMgfCB8ICAgCisgIHwgfCAgICAgfCBKMTcgb3xvICAgfCAgICAgfCAgfCAgICAgfCB8ICAgCisgIHwgfCAgICAgfCBKMTYgb3xvICAgfCAgICAgfCAgfCAgICAgfCB8ICAgCisgIHwgfF9fLl9ffCAgICAgICAgICAgfF9fLl9ffCAgfF9fLl9ffCB8ICAgCisgIHwgIF9fXyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgCisgIHwgfCAgIHw4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgCisgIHwgfFNXMnwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgCisgIHwgfCAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgCisgIHwgfF9fX3wxICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgCisgIHwgIF9fXyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgCisgIHwgfCAgIHwxMCAgICAgICAgICAgSjE4IG98byAgICAgICAgICB8ICAgCisgIHwgfCAgIHwgICAgICAgICAgICAgICAgIG98byAgICAgICAgICB8ICAgCisgIHwgfFNXMXwgICAgICAgICAgICAgICAgIG98byAgICAgICAgICB8ICAgCisgIHwgfCAgIHwgICAgICAgICAgICAgSjIxIG98byAgICAgICAgICB8ICAgCisgIHwgfF9fX3wxICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgCisgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgCisgIHxfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX198ICAgCisKKworTGVnZW5kOgorCis5MEMyNiAgICAgICBBUkNORVQgQ2hpcAorWFRMICAgICAgICAgMjAgTUh6IENyeXN0YWwKK1NXMSAxLTYgICAgIEJhc2UgSS9PIEFkZHJlc3MgU2VsZWN0CisgICAgNy0xMCAgICBNZW1vcnkgQWRkcmVzcyBTZWxlY3QKK1NXMiAxLTggICAgIE5vZGUgSUQgU2VsZWN0IChJRDAtSUQ3KQorSjEtSjUgICAgICAgSVJRIFNlbGVjdAorSjYtSjIxICAgICAgVW5rbm93biAoUHJvYmFibHkgZXh0cmEgdGltZW91dHMgJiBST00gZW5hYmxlIC4uLikKK0xFRDEgICAgICAgIEFjdGl2aXR5IExFRCAKK0JOQyAgICAgICAgIENvYXggY29ubmVjdG9yIChTVEFSIEFSQ25ldCkKK1JBTSAgICAgICAgIDJrIG9mIFNSQU0KK1JPTSAgICAgICAgIEJvb3QgUk9NIHNvY2tldAorVUZTICAgICAgICAgVW5pZGVudGlmaWVkIEZseWluZyBTb2NrZXRzCisKKworU2V0dGluZyB0aGUgTm9kZSBJRAorLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGUgZWlnaHQgc3dpdGNoZXMgaW4gU1cyIGFyZSB1c2VkIHRvIHNldCB0aGUgbm9kZSBJRC4gRWFjaCBub2RlIGF0dGFjaGVkCit0byB0aGUgbmV0d29yayBtdXN0IGhhdmUgYW4gdW5pcXVlIG5vZGUgSUQgd2hpY2ggbXVzdCBub3QgYmUgMC4KK1N3aXRjaCAxIChJRDApIHNlcnZlcyBhcyB0aGUgbGVhc3Qgc2lnbmlmaWNhbnQgYml0IChMU0IpLgorCitTZXR0aW5nIG9uZSBvZiB0aGUgc3dpdGNoZXMgdG8gT0ZGIG1lYW5zICIxIiwgT04gbWVhbnMgIjAiLgorCitUaGUgbm9kZSBJRCBpcyB0aGUgc3VtIG9mIHRoZSB2YWx1ZXMgb2YgYWxsIHN3aXRjaGVzIHNldCB0byAiMSIKK1RoZXNlIHZhbHVlcyBhcmU6CisKKyAgIFN3aXRjaCB8IFZhbHVlCisgICAtLS0tLS0tfC0tLS0tLS0KKyAgICAgMSAgICB8ICAgMQorICAgICAyICAgIHwgICAyCisgICAgIDMgICAgfCAgIDQKKyAgICAgNCAgICB8ICAgOAorICAgICA1ICAgIHwgIDE2CisgICAgIDYgICAgfCAgMzIKKyAgICAgNyAgICB8ICA2NAorICAgICA4ICAgIHwgMTI4CisKK0Rvbid0IHNldCB0aGlzIHRvIDAgb3IgMjU1OyB0aGVzZSB2YWx1ZXMgYXJlIHJlc2VydmVkLgorCisKK1NldHRpbmcgdGhlIEkvTyBCYXNlIEFkZHJlc3MKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlIHN3aXRjaGVzIDEgdG8gNiBvZiBzd2l0Y2ggYmxvY2sgU1cxIGFyZSB1c2VkIHRvIHNlbGVjdCBvbmUKK29mIDMyIHBvc3NpYmxlIEkvTyBCYXNlIGFkZHJlc3NlcyB1c2luZyB0aGUgZm9sbG93aW5nIHRhYmxlcworICAgCisgICAgICAgICAgfCBIZXgKKyAgIFN3aXRjaCB8IFZhbHVlCisgICAtLS0tLS0tfC0tLS0tLS0KKyAgICAgMSAgICB8IDIwMCAgCisgICAgIDIgICAgfCAxMDAgIAorICAgICAzICAgIHwgIDgwICAKKyAgICAgNCAgICB8ICA0MCAgCisgICAgIDUgICAgfCAgMjAgIAorICAgICA2ICAgIHwgIDEwIAorCitUaGUgSS9PIGFkZHJlc3MgaXMgc3VtIG9mIGFsbCBzd2l0Y2hlcyBzZXQgdG8gIjEiLiBSZW1lbWJlciB0aGF0Cit0aGUgSS9PIGFkZHJlc3Mgc3BhY2UgYmVsbG93IDB4MjAwIGlzIFJFU0VSVkVEIGZvciBtYWluYm9hcmQsIHNvCitzd2l0Y2ggMSBzaG91bGQgYmUgQUxXQVlTIFNFVCBUTyBPRkYuIAorCisKK1NldHRpbmcgdGhlIEJhc2UgTWVtb3J5IChSQU0pIGJ1ZmZlciBBZGRyZXNzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGUgbWVtb3J5IGJ1ZmZlciAoUkFNKSByZXF1aXJlcyAySy4gVGhlIGJhc2Ugb2YgdGhpcyBidWZmZXIgY2FuIGJlCitsb2NhdGVkIGluIGFueSBvZiBzaXh0ZWVuIHBvc2l0aW9ucy4gSG93ZXZlciwgdGhlIGFkZHJlc3NlcyBiZWxvdworQTAwMDAgYXJlIGxpa2VseSB0byBjYXVzZSBzeXN0ZW0gaGFuZyBiZWNhdXNlIHRoZXJlJ3MgbWFpbiBSQU0uCisKK0p1bXBlcnMgNy0xMCBvZiBzd2l0Y2ggYmxvY2sgU1cxIHNlbGVjdCB0aGUgTWVtb3J5IEJhc2UgYWRkcmVzcy4KKworICAgU3dpdGNoICAgICAgICAgIHwgSGV4IFJBTQorICAgIDcgICA4ICAgOSAgMTAgIHwgQWRkcmVzcworICAgLS0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0KKyAgIE9GRiBPRkYgT0ZGIE9GRiB8ICBGMDAwMCAoY29uZmxpY3RzIHdpdGggbWFpbiBCSU9TKQorICAgT0ZGIE9GRiBPRkYgT04gIHwgIEUwMDAwIAorICAgT0ZGIE9GRiBPTiAgT0ZGIHwgIEQwMDAwCisgICBPRkYgT0ZGIE9OICBPTiAgfCAgQzAwMDAgKGNvbmZsaWN0cyB3aXRoIHZpZGVvIEJJT1MpCisgICBPRkYgT04gIE9GRiBPRkYgfCAgQjAwMDAgKGNvbmZsaWN0cyB3aXRoIG1vbm8gdmlkZW8pCisgICBPRkYgT04gIE9GRiBPTiAgfCAgQTAwMDAgKGNvbmZsaWN0cyB3aXRoIGdyYXBoaWNzKQorCisKK1NldHRpbmcgdGhlIEludGVycnVwdCBMaW5lCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitKdW1wZXJzIDEtNSBvZiB0aGUganVtcGVyIGJsb2NrIEoxIGNvbnRyb2wgdGhlIElSUSBsZXZlbC4gT04gbWVhbnMgCitzaG9ydGVkLCBPRkYgbWVhbnMgb3Blbi4KKworICAgIEp1bXBlciAgICAgICAgICAgICAgfCAgSVJRCisgICAgMSAgIDIgICAzICAgNCAgIDUgICB8CisgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgT04gIE9GRiBPRkYgT0ZGIE9GRiB8ICA3CisgICAgT0ZGIE9OICBPRkYgT0ZGIE9GRiB8ICA1CisgICAgT0ZGIE9GRiBPTiAgT0ZGIE9GRiB8ICA0CisgICAgT0ZGIE9GRiBPRkYgT04gIE9GRiB8ICAzCisgICAgT0ZGIE9GRiBPRkYgT0ZGIE9OICB8ICAyCisKKworVW5rbm93biBqdW1wZXJzICYgc29ja2V0cworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitJIGtub3cgbm90aGluZyBhYm91dCB0aGVzZS4gSSBqdXN0IGd1ZXNzIHRoYXQgSjE2JkoxNyBhcmUgdGltZW91dAoranVtcGVycyBhbmQgbWF5YmUgb25lIG9mIEoxOC1KMjEgc2VsZWN0cyBST00uIEFsc28gSjYtSjEwIGFuZAorSjExLUoxNSBhcmUgY29ubmVjdGluZyBJUlEyLTcgdG8gc29tZSBwaW5zIG9uIHRoZSBVRlNzLiBJIGNhbid0CitndWVzcyB0aGUgcHVycG9zZS4KKworCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCisqKiBEYXRhcG9pbnQ/ICoqCitMQU4tQVJDLTgsIGFuIDgtYml0IGNhcmQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAtIGZyb20gVm9qdGVjaCBQYXZsaWsgPHZvanRlY2hAc3VzZS5jej4KKworVGhpcyBpcyBhbm90aGVyIFNNQyA5MEM2NS1iYXNlZCBBUkNuZXQgY2FyZC4gSSBjb3VsZG4ndCBpZGVudGlmeSB0aGUKK21hbnVmYWN0dXJlciwgYnV0IGl0IG1pZ2h0IGJlIERhdGFQb2ludCwgYmVjYXVzZSB0aGUgY2FyZCBoYXMgdGhlCitvcmlnaW5hbCBhcmNOZXQgbG9nbyBpbiBpdHMgdXBwZXIgcmlnaHQgY29ybmVyLgorCisgICAgICAgICAgX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXworICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICBfX19fX19fX18gICAgICAgICAgICAgICAgICAgICB8CisgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgfCAgIFNXMiAgIHwgT04gICAgICBhcmNOZXQgICAgIHwKKyAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICB8X19fX19fX19ffCBPRkYgICAgICAgICAgICAgX19ffAorICAgICAgICAgfCAgX19fX19fX19fX19fXyAgICAgICAgIDEgX19fX19fICA4ICAgICAgICAgICAgICAgIHwgICB8IDggIAorICAgICAgICAgfCB8ICAgICAgICAgICAgIHwgU1cxICAgICB8IFhUQUwgfCBfX19fX19fX19fX18gICAgIHwgUyB8ICAgIAorICAgICAgICAgfCA+IFJBTSAoMmspICAgIHwgICAgICAgICB8X19fX19ffHwgICAgICAgICAgICB8ICAgIHwgVyB8ICAgIAorICAgICAgICAgfCB8X19fX19fX19fX19fX3wgICAgICAgICAgICAgICAgIHwgICAgICBIICAgICB8ICAgIHwgMyB8ICAgIAorICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgIF9fX19fX19fX3xfX19fXyB5ICAgICB8ICAgIHxfX198IDEgIAorICAgICAgICAgfCAgX19fX19fX19fICAgICAgICAgICAgfCAgICAgICAgIHwgICAgIHxiICAgICB8ICAgICAgICB8ICAgIAorICAgICAgICAgfCB8X19fX19fX19ffCAgICAgICAgICAgfCAgICAgICAgIHwgICAgIHxyICAgICB8ICAgICAgICB8ICAgIAorICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgU01DIHwgICAgIHxpICAgICB8ICAgICAgICB8ICAgIAorICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgfCAgICA5MEM2NXwgICAgIHxkICAgICB8ICAgICAgICB8ICAgICAgCisgICAgICAgICB8ICBfX19fX19fX18gICAgICAgICAgICB8ICAgICAgICAgfCAgICAgfCAgICAgIHwgICAgICAgIHwKKyAgICAgICAgIHwgfCAgIFNXMSAgIHwgT04gICAgICAgIHwgICAgICAgICB8ICAgICB8SSAgICAgfCAgICAgICAgfAorICAgICAgICAgfCB8X19fX19fX19ffCBPRkYgICAgICAgfF9fX19fX19fX3xfX19fXy9DICAgICB8ICAgX19fX198CisgICAgICAgICB8ICAxICAgICAgIDggICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgIHwgIHwgICAgIHxfX18KKyAgICAgICAgIHwgIF9fX19fX19fX19fX19fICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgfCAgfCBCTkMgfF9fX3wKKyAgICAgICAgIHwgfCAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICB8X19fX19fX19fX19ffCAgfF9fX19ffAorICAgICAgICAgfCA+IEVQUk9NIFNPQ0tFVCB8ICAgICAgICAgICAgICBfX19fX19fX19fX19fICAgICAgICAgICB8CisgICAgICAgICB8IHxfX19fX19fX19fX19fX3wgICAgICAgICAgICAgfF9fX19fX19fX19fX198ICAgICAgICAgIHwKKyAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fX19fX19fX19fX19ffAorICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IAorICAgICAgICAgfF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX198CisKK0xlZ2VuZDoKKworOTBDNjUgICAgICAgQVJDTkVUIENoaXAgCitTVzEgMS01OiAgICBCYXNlIE1lbW9yeSBBZGRyZXNzIFNlbGVjdAorICAgIDYtODogICAgQmFzZSBJL08gQWRkcmVzcyBTZWxlY3QKK1NXMiAxLTg6ICAgIE5vZGUgSUQgU2VsZWN0CitTVzMgMS01OiAgICBJUlEgU2VsZWN0ICAgCisgICAgNi03OiAgICBFeHRyYSBUaW1lb3V0CisgICAgOCAgOiAgICBST00gRW5hYmxlICAgCitCTkMgICAgICAgICBDb2F4IGNvbm5lY3RvcgorWFRBTCAgICAgICAgMjAgTUh6IENyeXN0YWwKKworCitTZXR0aW5nIHRoZSBOb2RlIElECistLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZSBlaWdodCBzd2l0Y2hlcyBpbiBTVzMgYXJlIHVzZWQgdG8gc2V0IHRoZSBub2RlIElELiBFYWNoIG5vZGUgYXR0YWNoZWQKK3RvIHRoZSBuZXR3b3JrIG11c3QgaGF2ZSBhbiB1bmlxdWUgbm9kZSBJRCB3aGljaCBtdXN0IG5vdCBiZSAwLgorU3dpdGNoIDEgc2VydmVzIGFzIHRoZSBsZWFzdCBzaWduaWZpY2FudCBiaXQgKExTQikuCisKK1NldHRpbmcgb25lIG9mIHRoZSBzd2l0Y2hlcyB0byBPZmYgbWVhbnMgIjEiLCBPbiBtZWFucyAiMCIuCisKK1RoZSBub2RlIElEIGlzIHRoZSBzdW0gb2YgdGhlIHZhbHVlcyBvZiBhbGwgc3dpdGNoZXMgc2V0IHRvICIxIiAgCitUaGVzZSB2YWx1ZXMgYXJlOgorCisgICBTd2l0Y2ggfCBWYWx1ZQorICAgLS0tLS0tLXwtLS0tLS0tCisgICAgIDEgICAgfCAgIDEKKyAgICAgMiAgICB8ICAgMgorICAgICAzICAgIHwgICA0CisgICAgIDQgICAgfCAgIDgKKyAgICAgNSAgICB8ICAxNgorICAgICA2ICAgIHwgIDMyCisgICAgIDcgICAgfCAgNjQKKyAgICAgOCAgICB8IDEyOAorCisKK1NldHRpbmcgdGhlIEkvTyBCYXNlIEFkZHJlc3MKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlIGxhc3QgdGhyZWUgc3dpdGNoZXMgaW4gc3dpdGNoIGJsb2NrIFNXMSBhcmUgdXNlZCB0byBzZWxlY3Qgb25lCitvZiBlaWdodCBwb3NzaWJsZSBJL08gQmFzZSBhZGRyZXNzZXMgdXNpbmcgdGhlIGZvbGxvd2luZyB0YWJsZQorCisKKyAgIFN3aXRjaCAgICAgIHwgSGV4IEkvTworICAgIDYgICA3ICAgOCAgfCBBZGRyZXNzCisgICAtLS0tLS0tLS0tLS18LS0tLS0tLS0KKyAgIE9OICBPTiAgT04gIHwgIDI2MAorICAgT0ZGIE9OICBPTiAgfCAgMjkwCisgICBPTiAgT0ZGIE9OICB8ICAyRTAgIChNYW51ZmFjdHVyZXIncyBkZWZhdWx0KQorICAgT0ZGIE9GRiBPTiAgfCAgMkYwCisgICBPTiAgT04gIE9GRiB8ICAzMDAKKyAgIE9GRiBPTiAgT0ZGIHwgIDM1MAorICAgT04gIE9GRiBPRkYgfCAgMzgwCisgICBPRkYgT0ZGIE9GRiB8ICAzRTAKKworCitTZXR0aW5nIHRoZSBCYXNlIE1lbW9yeSAoUkFNKSBidWZmZXIgQWRkcmVzcworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlIG1lbW9yeSBidWZmZXIgKFJBTSkgcmVxdWlyZXMgMksuIFRoZSBiYXNlIG9mIHRoaXMgYnVmZmVyIGNhbiBiZSAKK2xvY2F0ZWQgaW4gYW55IG9mIGVpZ2h0IHBvc2l0aW9ucy4gVGhlIGFkZHJlc3Mgb2YgdGhlIEJvb3QgUHJvbSBpcworbWVtb3J5IGJhc2UgKyAweDIwMDAuCitKdW1wZXJzIDMtNSBvZiBzd2l0Y2ggYmxvY2sgU1cxIHNlbGVjdCB0aGUgTWVtb3J5IEJhc2UgYWRkcmVzcy4KKworICAgU3dpdGNoICAgICAgICAgICAgICB8IEhleCBSQU0gfCBIZXggUk9NCisgICAgMSAgIDIgICAzICAgNCAgIDUgIHwgQWRkcmVzcyB8IEFkZHJlc3MgKikKKyAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tLXwtLS0tLS0tLS0tLQorICAgT04gIE9OICBPTiAgT04gIE9OICB8ICBDMDAwMCAgfCAgQzIwMDAKKyAgIE9OICBPTiAgT0ZGIE9OICBPTiAgfCAgQzQwMDAgIHwgIEM2MDAwCisgICBPTiAgT04gIE9OICBPRkYgT04gIHwgIENDMDAwICB8ICBDRTAwMAorICAgT04gIE9OICBPRkYgT0ZGIE9OICB8ICBEMDAwMCAgfCAgRDIwMDAgIChNYW51ZmFjdHVyZXIncyBkZWZhdWx0KQorICAgT04gIE9OICBPTiAgT04gIE9GRiB8ICBENDAwMCAgfCAgRDYwMDAKKyAgIE9OICBPTiAgT0ZGIE9OICBPRkYgfCAgRDgwMDAgIHwgIERBMDAwCisgICBPTiAgT04gIE9OICBPRkYgT0ZGIHwgIERDMDAwICB8ICBERTAwMAorICAgT04gIE9OICBPRkYgT0ZGIE9GRiB8ICBFMDAwMCAgfCAgRTIwMDAKKyAgCisqKSBUbyBlbmFibGUgdGhlIEJvb3QgUk9NIHNldCB0aGUgc3dpdGNoIDggb2Ygc3dpdGNoIGJsb2NrIFNXMyB0byBwb3NpdGlvbiBPTi4KKworVGhlIHN3aXRjaGVzIDEgYW5kIDIgcHJvYmFibHkgYWRkIDB4MDgwMCBhbmQgMHgxMDAwIHRvIFJBTSBiYXNlIGFkZHJlc3MuCisKKworU2V0dGluZyB0aGUgSW50ZXJydXB0IExpbmUKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1N3aXRjaGVzIDEtNSBvZiB0aGUgc3dpdGNoIGJsb2NrIFNXMyBjb250cm9sIHRoZSBJUlEgbGV2ZWwuCisKKyAgICBKdW1wZXIgICAgICAgICAgICAgIHwgIElSUQorICAgIDEgICAyICAgMyAgIDQgICA1ICAgfAorICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIE9OICBPRkYgT0ZGIE9GRiBPRkYgfCAgMworICAgIE9GRiBPTiAgT0ZGIE9GRiBPRkYgfCAgNAorICAgIE9GRiBPRkYgT04gIE9GRiBPRkYgfCAgNQorICAgIE9GRiBPRkYgT0ZGIE9OICBPRkYgfCAgNworICAgIE9GRiBPRkYgT0ZGIE9GRiBPTiAgfCAgMgorCisKK1NldHRpbmcgdGhlIFRpbWVvdXQgUGFyYW1ldGVycworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZSBzd2l0Y2hlcyA2LTcgb2YgdGhlIHN3aXRjaCBibG9jayBTVzMgYXJlIHVzZWQgdG8gZGV0ZXJtaW5lIHRoZSB0aW1lb3V0CitwYXJhbWV0ZXJzLiAgVGhlc2UgdHdvIHN3aXRjaGVzIGFyZSBub3JtYWxseSBsZWZ0IGluIHRoZSBPRkYgcG9zaXRpb24uCisKKworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKworKiogVG9wd2FyZSAqKgorOC1iaXQgY2FyZCwgVEEtQVJDLzEwCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIC0gZnJvbSBWb2p0ZWNoIFBhdmxpayA8dm9qdGVjaEBzdXNlLmN6PgorCitUaGlzIGlzIGFub3RoZXIgdmVyeSBzaW1pbGFyIDkwQzY1IGNhcmQuIE1vc3Qgb2YgdGhlIHN3aXRjaGVzIGFuZCBqdW1wZXJzCithcmUgdGhlIHNhbWUgYXMgb24gb3RoZXIgY2xvbmVzLgorCisgX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCit8ICBfX19fX19fX19fXyAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgIF9fX19fXyAgICAgICAgfAorfCB8U1cyIE5PREUgSUR8ICB8ICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgIHwgWFRBTCB8ICAgICAgIHwKK3wgfF9fX19fX19fX19ffCAgfCAgSHlicmlkIElDICAgICAgICAgICAgICB8ICAgICAgICAgICB8X19fX19ffCAgICAgICB8Cit8ICBfX19fX19fX19fXyAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgIF9ffCAgICAKK3wgfFNXMSBNRU0rSS9PfCAgfF9fX19fX19fX19fX19fX19fX19fX19fX198ICAgICAgICAgICAgICAgICAgIExFRDF8X198KSAgIAorfCB8X19fX19fX19fX198ICAgICAgICAgICAxIDIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgIAorfCAgICAgICAgICAgICAgICAgICAgIEozIHxvfG98IFRJTUVPVVQgICAgICAgICAgICAgICAgICAgICAgICAgIF9fX19fX3wgICAgCit8ICAgICBfX19fX19fX19fX19fXyAgICAgfG98b3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgfCAgICAKK3wgICAgfCAgICAgICAgICAgICAgfCAgX19fX19fX19fX19fX19fX19fXyAgICAgICAgICAgICAgICAgICAgIHwgUkogICB8ICAgIAorfCAgICA+IEVQUk9NIFNPQ0tFVCB8IHwgICAgICAgICAgICAgICAgICAgXCAgICAgICAgICAgICAgICAgICAgfC0tLS0tLXwgICAgIAorfEoyICB8X19fX19fX19fX19fX198IHwgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgfCAgICAgIHwgICAgCit8fG98ICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICB8X19fX19ffAorfHxvfCBST00gRU5BQkxFICAgICAgIHwgICAgICAgIFNNQyAgICAgICAgIHwgICAgX19fX19fX19fICAgICAgICAgICAgIHwKK3wgICAgIF9fX19fX19fX19fX18gICB8ICAgICAgIDkwQzY1ICAgICAgICB8ICAgfF9fX19fX19fX3wgICAgICAgX19fX198ICAgIAorfCAgICB8ICAgICAgICAgICAgIHwgIHwgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgIHwgICAgIHxfX18gCit8ICAgID4gUkFNICgyaykgICAgfCAgfCAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgfCBCTkMgfF9fX3wKK3wgICAgfF9fX19fX19fX19fX198ICB8ICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICB8X19fX198ICAgIAorfCAgICAgICAgICAgICAgICAgICAgIHxfX19fX19fX19fX19fX19fX19fX3wgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgCit8IF9fX19fX19fIElSUSAyIDMgNCA1IDcgICAgICAgICAgICAgICAgICBfX19fX19fX19fXyAgICAgICAgICAgICAgICAgfAorfHxfX19fX19fX3wgICB8b3xvfG98b3xvfCAgICAgICAgICAgICAgICB8X19fX19fX19fX198ICAgICAgICAgICAgICAgIHwKK3xfX19fX19fXyAgIEoxfG98b3xvfG98b3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19fX19fX19fX19fX198CisgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICAgICAgfF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX3wKKworTGVnZW5kOgorCis5MEM2NSAgICAgICBBUkNORVQgQ2hpcAorWFRBTCAgICAgICAgMjAgTUh6IENyeXN0YWwKK1NXMSAxLTUgICAgIEJhc2UgTWVtb3J5IEFkZHJlc3MgU2VsZWN0CisgICAgNi04ICAgICBCYXNlIEkvTyBBZGRyZXNzIFNlbGVjdAorU1cyIDEtOCAgICAgTm9kZSBJRCBTZWxlY3QgKElEMC1JRDcpCitKMSAgICAgICAgICBJUlEgU2VsZWN0CitKMiAgICAgICAgICBST00gRW5hYmxlCitKMyAgICAgICAgICBFeHRyYSBUaW1lb3V0CitMRUQxICAgICAgICBBY3Rpdml0eSBMRUQgCitCTkMgICAgICAgICBDb2F4IGNvbm5lY3RvciAoQlVTIEFSQ25ldCkKK1JKICAgICAgICAgIFR3aXN0ZWQgUGFpciBDb25uZWN0b3IgKGRhaXN5IGNoYWluKQorCisKK1NldHRpbmcgdGhlIE5vZGUgSUQKKy0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlIGVpZ2h0IHN3aXRjaGVzIGluIFNXMiBhcmUgdXNlZCB0byBzZXQgdGhlIG5vZGUgSUQuIEVhY2ggbm9kZSBhdHRhY2hlZCB0bwordGhlIG5ldHdvcmsgbXVzdCBoYXZlIGFuIHVuaXF1ZSBub2RlIElEIHdoaWNoIG11c3Qgbm90IGJlIDAuICBTd2l0Y2ggMSAoSUQwKQorc2VydmVzIGFzIHRoZSBsZWFzdCBzaWduaWZpY2FudCBiaXQgKExTQikuCisKK1NldHRpbmcgb25lIG9mIHRoZSBzd2l0Y2hlcyB0byBPZmYgbWVhbnMgIjEiLCBPbiBtZWFucyAiMCIuCisKK1RoZSBub2RlIElEIGlzIHRoZSBzdW0gb2YgdGhlIHZhbHVlcyBvZiBhbGwgc3dpdGNoZXMgc2V0IHRvICIxIgorVGhlc2UgdmFsdWVzIGFyZToKKworICAgU3dpdGNoIHwgTGFiZWwgfCBWYWx1ZQorICAgLS0tLS0tLXwtLS0tLS0tfC0tLS0tLS0KKyAgICAgMSAgICB8IElEMCAgIHwgICAxCisgICAgIDIgICAgfCBJRDEgICB8ICAgMgorICAgICAzICAgIHwgSUQyICAgfCAgIDQKKyAgICAgNCAgICB8IElEMyAgIHwgICA4CisgICAgIDUgICAgfCBJRDQgICB8ICAxNgorICAgICA2ICAgIHwgSUQ1ICAgfCAgMzIKKyAgICAgNyAgICB8IElENiAgIHwgIDY0CisgICAgIDggICAgfCBJRDcgICB8IDEyOAorCitTZXR0aW5nIHRoZSBJL08gQmFzZSBBZGRyZXNzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZSBsYXN0IHRocmVlIHN3aXRjaGVzIGluIHN3aXRjaCBibG9jayBTVzEgYXJlIHVzZWQgdG8gc2VsZWN0IG9uZQorb2YgZWlnaHQgcG9zc2libGUgSS9PIEJhc2UgYWRkcmVzc2VzIHVzaW5nIHRoZSBmb2xsb3dpbmcgdGFibGU6CisKKworICAgU3dpdGNoICAgICAgfCBIZXggSS9PCisgICAgNiAgIDcgICA4ICB8IEFkZHJlc3MKKyAgIC0tLS0tLS0tLS0tLXwtLS0tLS0tLQorICAgT04gIE9OICBPTiAgfCAgMjYwICAoTWFudWZhY3R1cmVyJ3MgZGVmYXVsdCkKKyAgIE9GRiBPTiAgT04gIHwgIDI5MAorICAgT04gIE9GRiBPTiAgfCAgMkUwICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgT0ZGIE9GRiBPTiAgfCAgMkYwCisgICBPTiAgT04gIE9GRiB8ICAzMDAKKyAgIE9GRiBPTiAgT0ZGIHwgIDM1MAorICAgT04gIE9GRiBPRkYgfCAgMzgwCisgICBPRkYgT0ZGIE9GRiB8ICAzRTAKKworCitTZXR0aW5nIHRoZSBCYXNlIE1lbW9yeSAoUkFNKSBidWZmZXIgQWRkcmVzcworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlIG1lbW9yeSBidWZmZXIgKFJBTSkgcmVxdWlyZXMgMksuIFRoZSBiYXNlIG9mIHRoaXMgYnVmZmVyIGNhbiBiZQorbG9jYXRlZCBpbiBhbnkgb2YgZWlnaHQgcG9zaXRpb25zLiBUaGUgYWRkcmVzcyBvZiB0aGUgQm9vdCBQcm9tIGlzCittZW1vcnkgYmFzZSArIDB4MjAwMC4KK0p1bXBlcnMgMy01IG9mIHN3aXRjaCBibG9jayBTVzEgc2VsZWN0IHRoZSBNZW1vcnkgQmFzZSBhZGRyZXNzLgorCisgICBTd2l0Y2ggICAgICAgICAgICAgIHwgSGV4IFJBTSB8IEhleCBST00KKyAgICAxICAgMiAgIDMgICA0ICAgNSAgfCBBZGRyZXNzIHwgQWRkcmVzcyAqKQorICAgLS0tLS0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tfC0tLS0tLS0tLS0tCisgICBPTiAgT04gIE9OICBPTiAgT04gIHwgIEMwMDAwICB8ICBDMjAwMAorICAgT04gIE9OICBPRkYgT04gIE9OICB8ICBDNDAwMCAgfCAgQzYwMDAgIChNYW51ZmFjdHVyZXIncyBkZWZhdWx0KSAKKyAgIE9OICBPTiAgT04gIE9GRiBPTiAgfCAgQ0MwMDAgIHwgIENFMDAwCisgICBPTiAgT04gIE9GRiBPRkYgT04gIHwgIEQwMDAwICB8ICBEMjAwMCAgCisgICBPTiAgT04gIE9OICBPTiAgT0ZGIHwgIEQ0MDAwICB8ICBENjAwMAorICAgT04gIE9OICBPRkYgT04gIE9GRiB8ICBEODAwMCAgfCAgREEwMDAKKyAgIE9OICBPTiAgT04gIE9GRiBPRkYgfCAgREMwMDAgIHwgIERFMDAwCisgICBPTiAgT04gIE9GRiBPRkYgT0ZGIHwgIEUwMDAwICB8ICBFMjAwMAorCisqKSBUbyBlbmFibGUgdGhlIEJvb3QgUk9NIHNob3J0IHRoZSBqdW1wZXIgSjIuCisKK1RoZSBqdW1wZXJzIDEgYW5kIDIgcHJvYmFibHkgYWRkIDB4MDgwMCBhbmQgMHgxMDAwIHRvIFJBTSBhZGRyZXNzLgorCisKK1NldHRpbmcgdGhlIEludGVycnVwdCBMaW5lCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitKdW1wZXJzIDEtNSBvZiB0aGUganVtcGVyIGJsb2NrIEoxIGNvbnRyb2wgdGhlIElSUSBsZXZlbC4gIE9OIG1lYW5zCitzaG9ydGVkLCBPRkYgbWVhbnMgb3Blbi4KKworICAgIEp1bXBlciAgICAgICAgICAgICAgfCAgSVJRCisgICAgMSAgIDIgICAzICAgNCAgIDUgICB8CisgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgT04gIE9GRiBPRkYgT0ZGIE9GRiB8ICAyCisgICAgT0ZGIE9OICBPRkYgT0ZGIE9GRiB8ICAzCisgICAgT0ZGIE9GRiBPTiAgT0ZGIE9GRiB8ICA0CisgICAgT0ZGIE9GRiBPRkYgT04gIE9GRiB8ICA1CisgICAgT0ZGIE9GRiBPRkYgT0ZGIE9OICB8ICA3CisKKworU2V0dGluZyB0aGUgVGltZW91dCBQYXJhbWV0ZXJzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlIGp1bXBlcnMgSjMgYXJlIHVzZWQgdG8gc2V0IHRoZSB0aW1lb3V0IHBhcmFtZXRlcnMuIFRoZXNlIHR3byAKK2p1bXBlcnMgYXJlIG5vcm1hbGx5IGxlZnQgb3Blbi4KKworICAKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKKyoqIFRob21hcy1Db25yYWQgKioKK01vZGVsICM1MDAtNjI0Mi0wMDk3IFJFViBBICg4LWJpdCBjYXJkKQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIC0gZnJvbSBMYXJzIEthcmxzc29uIDwxMDA2MTcuMzQ3M0Bjb21wdXNlcnZlLmNvbT4KKworICAgICBfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXworICAgfCAgICAgICAgICBfX19fX19fXyAgIF9fX19fX19fICAgICAgICAgICAgICAgICAgICAgICAgICAgfF9fX19fCisgICB8ICAgICAgICAgfC4uLi4uLi4ufCB8Li4uLi4uLi58ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgIHwgICAgICAgICB8X19fX19fX198IHxfX19fX19fX3wgICAgICAgICAgICAgICAgICAgICAgICAgX19ffAorICAgfCAgICAgICAgICAgIFNXIDMgICAgICAgU1cgMSAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICB8CisgICB8ICAgICAgICAgQmFzZSBJL08gICBCYXNlIEFkZHIuICAgICAgICAgICAgICAgIFN0YXRpb24gfCAgIHwKKyAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkcmVzcyB8ICAgfAorICAgfCAgICBfX19fX18gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggIHwgICB8CisgICB8ICAgfCAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIHwKKyAgIHwgICB8ICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8X19ffCAgICAKKyAgIHwgICB8ICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fX19fXyAgICAgICAgfF9fXy5fCisgICB8ICAgfF9fX19fX3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxfX19fX198ICAgICAgICAgX19fX3wgQk5DCisgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBKdW1wZXItICAgICAgICBfX19fX3wgQ29ubmVjdG9yCisgICB8ICAgTWFpbiBjaGlwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBibG9jayAgXyAgICBfX3wgICAnICAKKyAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgfCAgfCAgICBSSiBDb25uZWN0b3IKKyAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxffCAgfCAgICB3aXRoIDExMCBPaG0KKyAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfF9fICBUZXJtaW5hdG9yCisgICB8ICAgIF9fX19fX19fX19fICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3wKKyAgIHwgICB8Li4uLi4uLi4uLi58ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICBSSi1qYWNrCisgICB8ICAgfC4uLi4uLi4uLi4ufCAgICBfX19fXyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgKHVudXNlZCkKKyAgIHwgICB8X19fX19fX19fX198ICAgfF9fX19ffCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfF9fCisgICB8ICBCb290IFBST00gc29ja2V0IElSUS1qdW1wZXJzICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxfICBEaWFnbm9zdGljCisgICB8X19fX19fX18gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfXyAgICAgICAgICBffCBMRUQgKHJlZCkKKyAgICAgICAgICAgIHwgfCB8IHwgfCB8IHwgfCB8IHwgfCB8IHwgfCB8IHwgfCB8IHwgfCAgfCAgICAgICAgfAorICAgICAgICAgICAgfCB8IHwgfCB8IHwgfCB8IHwgfCB8IHwgfCB8IHwgfCB8IHwgfCB8ICB8X19fX19fX198CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorCitBbmQgaGVyZSBhcmUgdGhlIHNldHRpbmdzIGZvciBzb21lIG9mIHRoZSBzd2l0Y2hlcyBhbmQganVtcGVycyBvbiB0aGUgY2FyZHMuCisKKworICAgICAgICAgIEkvTworCisgICAgICAgICAxIDIgMyA0IDUgNiA3IDgKKworMkUwLS0tLS0gMCAwIDAgMSAwIDAgMCAxCisyRjAtLS0tLSAwIDAgMCAxIDAgMCAwIDAKKzMwMC0tLS0tIDAgMCAwIDAgMSAxIDEgMQorMzUwLS0tLS0gMCAwIDAgMCAxIDEgMSAwCisKKyIwIiBpbiB0aGUgYWJvdmUgZXhhbXBsZSBtZWFucyBzd2l0Y2ggaXMgb2ZmICIxIiBtZWFucyB0aGF0IGl0IGlzIG9uLgorCisKKyAgICBTaE1lbSBhZGRyZXNzLgorCisgICAgICAxIDIgMyA0IDUgNiA3IDgKKworQ1gwMC0tMCAwIDEgMSB8IHwgICB8CitEWDAwLS0wIDAgMSAwICAgICAgIHwKK1gwMDAtLS0tLS0tLS0gMSAxICAgfAorWDQwMC0tLS0tLS0tLSAxIDAgICB8CitYODAwLS0tLS0tLS0tIDAgMSAgIHwKK1hDMDAtLS0tLS0tLS0gMCAwICAgCitFTkhBTkNFRC0tLS0tLS0tLS0tIDEKK0NPTVBBVElCTEUtLS0tLS0tLS0gMAorCisKKyAgICAgICBJUlEKKworCisgICAzIDQgNSA3IDIKKyAgIC4gLiAuIC4gLgorICAgLiAuIC4gLiAuCisKKworVGhlcmUgaXMgYSBESVAtc3dpdGNoIHdpdGggOCBzd2l0Y2hlcywgdXNlZCB0byBzZXQgdGhlIHNoYXJlZCBtZW1vcnkgYWRkcmVzcwordG8gYmUgdXNlZC4gVGhlIGZpcnN0IDYgc3dpdGNoZXMgc2V0IHRoZSBhZGRyZXNzLCB0aGUgN3RoIGRvZXNuJ3QgaGF2ZSBhbnkKK2Z1bmN0aW9uLCBhbmQgdGhlIDh0aCBzd2l0Y2ggaXMgdXNlZCB0byBzZWxlY3QgImNvbXBhdGlibGUiIG9yICJlbmhhbmNlZCIuCitXaGVuIEkgZ290IG15IHR3byBjYXJkcywgb25lIG9mIHRoZW0gaGFkIHRoaXMgc3dpdGNoIHNldCB0byAiZW5oYW5jZWQiLiBUaGF0CitjYXJkIGRpZG4ndCB3b3JrIGF0IGFsbCwgaXQgd2Fzbid0IGV2ZW4gcmVjb2duaXplZCBieSB0aGUgZHJpdmVyLiBUaGUgb3RoZXIKK2NhcmQgaGFkIHRoaXMgc3dpdGNoIHNldCB0byAiY29tcGF0aWJsZSIgYW5kIGl0IGJlaGF2ZWQgYWJzb2x1dGVseSBub3JtYWxseS4gSQorZ3Vlc3MgdGhhdCB0aGUgc3dpdGNoIG9uIG9uZSBvZiB0aGUgY2FyZHMsIG11c3QgaGF2ZSBiZWVuIGNoYW5nZWQgYWNjaWRlbnRhbGx5Cit3aGVuIHRoZSBjYXJkIHdhcyB0YWtlbiBvdXQgb2YgaXRzIGZvcm1lciBob3N0LiBUaGUgcXVlc3Rpb24gcmVtYWlucwordW5hbnN3ZXJlZCwgd2hhdCBpcyB0aGUgcHVycG9zZSBvZiB0aGUgImVuaGFuY2VkIiBwb3NpdGlvbj8KKworW0F2ZXJ5J3Mgbm90ZTogImVuaGFuY2VkIiBwcm9iYWJseSBlaXRoZXIgZGlzYWJsZXMgc2hhcmVkIG1lbW9yeSAodXNlIElPCitwb3J0cyBpbnN0ZWFkKSBvciBkaXNhYmxlcyBJTyBwb3J0cyAodXNlIG1lbW9yeSBhZGRyZXNzZXMgaW5zdGVhZCkuICBUaGlzCit2YXJpZXMgYnkgdGhlIHR5cGUgb2YgY2FyZCBpbnZvbHZlZC4gIEkgZmFpbCB0byBzZWUgaG93IGVpdGhlciBvZiB0aGVzZQorZW5oYW5jZSBhbnl0aGluZy4gIFNlbmQgbWUgbW9yZSBkZXRhaWxlZCBpbmZvcm1hdGlvbiBhYm91dCB0aGlzIG1vZGUsIG9yCitqdXN0IHVzZSAiY29tcGF0aWJsZSIgbW9kZSBpbnN0ZWFkLl0KKworCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCisqKiBXYXRlcmxvbyBNaWNyb3N5c3RlbXMgSW5jLiA/PyAqKgorOC1iaXQgY2FyZCAoQykgMTk4NQorLS0tLS0tLS0tLS0tLS0tLS0tLQorICAtIGZyb20gUm9iZXJ0IE1pY2hhZWwgQmVzdCA8cm1iMTE3QGNzLnVzYXNrLmNhPgorCitbQXZlcnkncyBub3RlOiB0aGVzZSBkb24ndCB3b3JrIHdpdGggbXkgZHJpdmVyIGZvciBzb21lIHJlYXNvbi4gIFRoZXNlIGNhcmRzCitTRUVNIHRvIGhhdmUgc2V0dGluZ3Mgc2ltaWxhciB0byB0aGUgUERJNTA4UGx1cywgd2hpY2ggaXMKK3NvZnR3YXJlLWNvbmZpZ3VyZWQgYW5kIGRvZXNuJ3Qgd29yayB3aXRoIG15IGRyaXZlciBlaXRoZXIuICBUaGUgIldhdGVybG9vCitjaGlwIiBpcyBhIGJvb3QgUFJPTSwgcHJvYmFibHkgZGVzaWduZWQgc3BlY2lmaWNhbGx5IGZvciB0aGUgVW5pdmVyc2l0eSBvZgorV2F0ZXJsb28uICBJZiB5b3UgaGF2ZSBhbnkgZnVydGhlciBpbmZvcm1hdGlvbiBhYm91dCB0aGlzIGNhcmQsIHBsZWFzZQorZS1tYWlsIG1lLl0KKworVGhlIHByb2JlIGhhcyBub3QgYmVlbiBhYmxlIHRvIGRldGVjdCB0aGUgY2FyZCBvbiBhbnkgb2YgdGhlIEoyIHNldHRpbmdzLAorYW5kIEkgdHJpZWQgdGhlbSBhZ2FpbiB3aXRoIHRoZSAiV2F0ZXJsb28iIGNoaXAgcmVtb3ZlZC4KKyAKKyBfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KK3wgXC8gIFwvICAgICAgICAgICAgICBfX18gIF9fIF9fICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8IEM0ICBDNCAgICAgfF58ICAgICB8IE0gfHwgIF4gIHx8XnwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAtLSAgLS0gICAgIHxffCAgICAgfCA1IHx8ICAgICB8fCB8IEMzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgXC8gIFwvICAgICAgQzEwICAgIHxfX198fCAgICAgfHxffCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IAorfCBDNCAgQzQgICAgICAgICAgICAgXyAgXyB8ICAgICB8ICAgICAgICAgICAgICAgICA/PyAgICAgICAgICAgICAgICAgIHwgCit8IC0tICAtLSAgICAgICAgICAgIHwgXC8gfHwgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAKK3wgICAgICAgICAgICAgICAgICAgfCAgICB8fCAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IAorfCAgICAgICAgICAgICAgICAgICB8ICAgIHx8ICBDMSB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgCit8ICAgICAgICAgICAgICAgICAgIHwgICAgfHwgICAgIHwgIFwvICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fX19ffCAgICAKK3wgICAgICAgICAgICAgICAgICAgfCBDNiB8fCAgICAgfCAgQzkgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICB8X19fIAorfCAgICAgICAgICAgICAgICAgICB8ICAgIHx8ICAgICB8ICAtLSAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgQk5DIHxfX198IAorfCAgICAgICAgICAgICAgICAgICB8ICAgIHx8ICAgICB8ICAgICAgICAgID5DN3wgICAgICAgICAgICAgICAgIHxfX19fX3wKK3wgICAgICAgICAgICAgICAgICAgfCAgICB8fCAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8IF9fIF9fICAgICAgICAgICAgIHxfX19ffHxfX19fX3wgICAgICAgMSAyIDMgICAgIDYgICAgICAgICAgICAgICAgICAgfAorfHwgIF4gIHwgICAgID5DNHwgICAgICAgICAgICAgICAgICAgICAgfG98b3xvfG98b3xvfCBKMiAgICA+QzR8ICAgICAgIHwKK3x8ICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxvfG98b3xvfG98b3wgICAgICAgICAgICAgICAgICB8Cit8fCBDMiAgfCAgICAgPkM0fCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5DNHwgICAgICAgfAorfHwgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5DOHwgICAgICAgICAgICAgICAgICAgICAgIHwKK3x8ICAgICB8ICAgICAgIDIgMyA0IDUgNiA3ICBJUlEgICAgICAgICAgICAgICAgICAgICAgICAgICAgPkM0fCAgICAgICB8Cit8fF9fX19ffCAgICAgIHxvfG98b3xvfG98b3wgSjMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfF9fX19fX18gICAgICB8b3xvfG98b3xvfG98ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fX19fX19fX19fX19fX3wKKyAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgICAgfF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX3wKKworQzEgLS0gIkNPTTkwMjYKKyAgICAgICBTTUMgODYzOCIKKyAgICAgIEluIGEgY2hpcCBzb2NrZXQuCisKK0MyIC0tICJAQ29weXJpZ2h0CisgICAgICAgV2F0ZXJsb28gTWljcm9zeXN0ZW1zIEluYy4KKyAgICAgICAxOTg1IgorICAgICAgSW4gYSBjaGlwIFNvY2tldCB3aXRoIGluZm8gcHJpbnRlZCBvbiBhIGxhYmVsIGNvdmVyaW5nIGEgcm91bmQgd2luZG93CisgICAgICBzaG93aW5nIHRoZSBjaXJjdWl0IGluc2lkZS4gKFRoZSB3aW5kb3cgaW5kaWNhdGVzIGl0IGlzIGFuIEVQUk9NIGNoaXAuKQorCitDMyAtLSAiQ09NOTAzMgorICAgICAgIFNNQyA4NjQzIgorICAgICAgSW4gYSBjaGlwIHNvY2tldC4KKworQzQgLS0gIjc0TFMiCisgICAgICA5IHRvdGFsIG5vIHNvY2tldHMuCisKK001IC0tICI1MDAwNi0xMzYKKyAgICAgICAyMC4wMDAwMDAgTUhaCisgICAgICAgTVRRLVQxLVMzCisgICAgICAgMCBNLVRST04gODYtNDAiCisgICAgICBNZXRhbGxpYyBjYXNlIHdpdGggNCBwaW5zLCBubyBzb2NrZXQuCisKK0M2IC0tICJNT1NURUtAVEM4NjQzCisgICAgICAgTUs2MTE2Ti0yMAorICAgICAgIE1BTEFZU0lBIgorICAgICAgTm8gc29ja2V0LgorCitDNyAtLSBObyBzdGFtcCBvciBsYWJlbCBidXQgaW4gYSAyMCBwaW4gY2hpcCBzb2NrZXQuCisKK0M4IC0tICJQQUwxMEw4Q04KKyAgICAgICA4NjIzIgorICAgICAgSW4gYSAyMCBwaW4gc29ja2V0LgorCitDOSAtLSAiUEFsMTZSNEEtMkNOCisgICAgICAgODY0MSIKKyAgICAgIEluIGEgMjAgcGluIHNvY2tldC4KKworQzEwIC0tICJNODY0MAorICAgICAgICAgIE5NQworICAgICAgICA5MzA2TiIKKyAgICAgICBJbiBhbiA4IHBpbiBzb2NrZXQuCisKKz8/IC0tIFNvbWUgY29tcG9uZW50cyBvbiBhIHNtYWxsZXIgYm9hcmQgYW5kIGF0dGFjaGVkIHdpdGggMjAgcGlucyBhbGwgCisgICAgICBhbG9uZyB0aGUgc2lkZSBjbG9zZXN0IHRvIHRoZSBCTkMgY29ubmVjdG9yLiAgVGhlIGFyZSBjb2F0ZWQgaW4gYSBkYXJrIAorICAgICAgcmVzaW4uCisKK09uIHRoZSBib2FyZCB0aGVyZSBhcmUgdHdvIGp1bXBlciBiYW5rcyBsYWJlbGVkIEoyIGFuZCBKMy4gVGhlIAorbWFudWZhY3R1cmVyIGRpZG4ndCBwdXQgYSBKMSBvbiB0aGUgYm9hcmQuIFRoZSB0d28gYm9hcmRzIEkgaGF2ZSBib3RoIAorY2FtZSB3aXRoIGEganVtcGVyIGJveCBmb3IgZWFjaCBiYW5rLgorCitKMiAtLSBOdW1iZXJlZCAxIDIgMyA0IDUgNi4gCisgICAgICA0IGFuZCA1IGFyZSBub3Qgc3RhbXBlZCBkdWUgdG8gc29sZGVyIHBvaW50cy4KKyAgICAgICAKK0ozIC0tIElSUSAyIDMgNCA1IDYgNworCitUaGUgYm9hcmQgaXRzZWxmIGhhcyBhIG1hcGxlIGxlYWYgc3RhbXBlZCBqdXN0IGFib3ZlIHRoZSBpcnEganVtcGVycyAKK2FuZCAiLTIgNDYtODYiIGJlc2lkZSBDMi4gQmV0d2VlbiBDMSBhbmQgQzYgIkFTUyAnWSAzMDAxNjMiIGFuZCAiQDE5ODYgCitDT1JNQU4gQ1VTVE9NIEVMRUNUUk9OSUNTIENPUlAuIiBzdGFtcGVkIGp1c3QgYmVsb3cgdGhlIEJOQyBjb25uZWN0b3IuCitCZWxvdyB0aGF0ICJNQURFIElOIENBTkFEQSIKKworICAKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKKyoqIE5vIE5hbWUgKioKKzgtYml0IGNhcmRzLCAxNi1iaXQgY2FyZHMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgLSBmcm9tIEp1ZXJnZW4gU2VpZmVydCA8c2VpZmVydEBodHdtLmRlPgorICAKK05PTkFNRSA4LUJJVCBBUkNORVQKKz09PT09PT09PT09PT09PT09PT0KKworSSBoYXZlIG5hbWVkIHRoaXMgQVJDbmV0IGNhcmQgIk5PTkFNRSIsIHNpbmNlIHRoZXJlIGlzIG5vIG5hbWUgb2YgYW55CittYW51ZmFjdHVyZXIgb24gdGhlIEluc3RhbGxhdGlvbiBtYW51YWwgbm9yIG9uIHRoZSBzaGlwcGluZyBib3guIFRoZSBvbmx5CitoaW50IHRvIHRoZSBleGlzdGVuY2Ugb2YgYSBtYW51ZmFjdHVyZXIgYXQgYWxsIGlzIHdyaXR0ZW4gaW4gY29wcGVyLAoraXQgaXMgIk1hZGUgaW4gVGFpd2FuIgorCitUaGlzIGRlc2NyaXB0aW9uIGhhcyBiZWVuIHdyaXR0ZW4gYnkgSnVlcmdlbiBTZWlmZXJ0IDxzZWlmZXJ0QGh0d20uZGU+Cit1c2luZyBpbmZvcm1hdGlvbiBmcm9tIHRoZSBPcmlnaW5hbAorICAgICAgICAgICAgICAgICAgICAiQVJDbmV0IEluc3RhbGxhdGlvbiBNYW51YWwiCisKKworICAgIF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KKyAgIHwgfFNUQVJ8IEJVU3wgVC9QfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgfCB8X19fX3xfX19ffF9fX198ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fX19fX19fX19fX19fX19fX19fXyAgICAgICAgICAgICAgIHwKKyAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgfAorICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICB8CisgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgIHwKKyAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICBTTUMgICAgICAgICAgfCAgICAgICAgICAgICAgfAorICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICB8CisgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICBDT005MEM2NSAgICAgIHwgICAgICAgICAgICAgIHwKKyAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgfAorICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICB8CisgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgfF9fX19fX19fX18tX19fX19fX19fX3wgICAgICAgICAgICAgIHwKKyAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fX19ffAorICAgfCAgICAgIF9fX19fX19fX19fX19fXyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICBDTiB8CisgICB8ICAgICB8IFBST00gICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxfX19fX3wKKyAgIHwgICAgID4gU09DS0VUICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgfCAgICAgfF9fX19fX19fX19fX19fX3wgICAgICAgICAxIDIgMyA0IDUgNiA3IDggIDEgMiAzIDQgNSA2IDcgOCB8CisgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fX19fX19fX19fX19fXyAgX19fX19fX19fX19fX19fIHwKKyAgIHwgICAgICAgICAgIHxvfG98b3xvfG98b3xvfG98ICB8ICAgICAgU1cxICAgICAgfHwgICAgICBTVzIgICAgICB8fAorICAgfCAgICAgICAgICAgfG98b3xvfG98b3xvfG98b3wgIHxfX19fX19fX19fX19fX198fF9fX19fX19fX19fX19fX3x8CisgICB8X19fICAgICAgICAgMiAzIDQgNSA3IEUgRSBSICAgICAgICBOb2RlIElEICAgICAgIElPQl9ffF9fTUVNX19fX3wKKyAgICAgICB8ICAgICAgICBcIElSUSAgIC8gVCBUIE8gICAgICAgICAgICAgICAgICAgICAgfAorICAgICAgIHxfX19fX19fX19fX19fX19fX18xXzJfTV9fX19fX19fX19fX19fX19fX19fX198CisKK0xlZ2VuZDoKKworQ09NOTBDNjU6ICAgICAgIEFSQ25ldCBQcm9iZQorUzEgIDEtODogICAgTm9kZSBJRCBTZWxlY3QKK1MyICAxLTM6ICAgIEkvTyBCYXNlIEFkZHJlc3MgU2VsZWN0CisgICAgNC02OiAgICBNZW1vcnkgQmFzZSBBZGRyZXNzIFNlbGVjdAorICAgIDctODogICAgUkFNIE9mZnNldCBTZWxlY3QKK0VUMSwgRVQyICAgIEV4dGVuZGVkIFRpbWVvdXQgU2VsZWN0CitST00gICAgIFJPTSBFbmFibGUgU2VsZWN0CitDTiAgICAgICAgICAgICAgUkc2MiBDb2F4IENvbm5lY3RvcgorU1RBUnwgQlVTIHwgVC9QIFRocmVlIGZpZWxkcyBmb3IgcGxhY2luZyBhIHNpZ24gKGNvbG9yZWQgY2lyY2xlKQorICAgICAgICAgICAgICAgIGluZGljYXRpbmcgdGhlIHRvcG9sb2d5IG9mIHRoZSBjYXJkCisKK1NldHRpbmcgb25lIG9mIHRoZSBzd2l0Y2hlcyB0byBPZmYgbWVhbnMgIjEiLCBPbiBtZWFucyAiMCIuCisKKworU2V0dGluZyB0aGUgTm9kZSBJRAorLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGUgZWlnaHQgc3dpdGNoZXMgaW4gZ3JvdXAgU1cxIGFyZSB1c2VkIHRvIHNldCB0aGUgbm9kZSBJRC4KK0VhY2ggbm9kZSBhdHRhY2hlZCB0byB0aGUgbmV0d29yayBtdXN0IGhhdmUgYW4gdW5pcXVlIG5vZGUgSUQgd2hpY2gKK211c3QgYmUgZGlmZmVyZW50IGZyb20gMC4KK1N3aXRjaCA4IHNlcnZlcyBhcyB0aGUgbGVhc3Qgc2lnbmlmaWNhbnQgYml0IChMU0IpLgorCitUaGUgbm9kZSBJRCBpcyB0aGUgc3VtIG9mIHRoZSB2YWx1ZXMgb2YgYWxsIHN3aXRjaGVzIHNldCB0byAiMSIgIAorVGhlc2UgdmFsdWVzIGFyZToKKworICAgIFN3aXRjaCB8IFZhbHVlCisgICAgLS0tLS0tLXwtLS0tLS0tCisgICAgICA4ICAgIHwgICAxCisgICAgICA3ICAgIHwgICAyCisgICAgICA2ICAgIHwgICA0CisgICAgICA1ICAgIHwgICA4CisgICAgICA0ICAgIHwgIDE2CisgICAgICAzICAgIHwgIDMyCisgICAgICAyICAgIHwgIDY0CisgICAgICAxICAgIHwgMTI4CisKK1NvbWUgRXhhbXBsZXM6CisKKyAgICBTd2l0Y2ggICAgICAgICB8IEhleCAgICAgfCBEZWNpbWFsIAorICAgMSAyIDMgNCA1IDYgNyA4IHwgTm9kZSBJRCB8IE5vZGUgSUQKKyAgIC0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tfC0tLS0tLS0tLQorICAgMCAwIDAgMCAwIDAgMCAwIHwgICAgbm90IGFsbG93ZWQKKyAgIDAgMCAwIDAgMCAwIDAgMSB8ICAgIDEgICAgfCAgICAxIAorICAgMCAwIDAgMCAwIDAgMSAwIHwgICAgMiAgICB8ICAgIDIKKyAgIDAgMCAwIDAgMCAwIDEgMSB8ICAgIDMgICAgfCAgICAzCisgICAgICAgLiAuIC4gICAgICAgfCAgICAgICAgIHwKKyAgIDAgMSAwIDEgMCAxIDAgMSB8ICAgNTUgICAgfCAgIDg1CisgICAgICAgLiAuIC4gICAgICAgfCAgICAgICAgIHwKKyAgIDEgMCAxIDAgMSAwIDEgMCB8ICAgQUEgICAgfCAgMTcwCisgICAgICAgLiAuIC4gICAgICAgfCAgICAgICAgIHwgIAorICAgMSAxIDEgMSAxIDEgMCAxIHwgICBGRCAgICB8ICAyNTMKKyAgIDEgMSAxIDEgMSAxIDEgMCB8ICAgRkUgICAgfCAgMjU0CisgICAxIDEgMSAxIDEgMSAxIDEgfCAgIEZGICAgIHwgIDI1NQorCisKK1NldHRpbmcgdGhlIEkvTyBCYXNlIEFkZHJlc3MKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlIGZpcnN0IHRocmVlIHN3aXRjaGVzIGluIHN3aXRjaCBncm91cCBTVzIgYXJlIHVzZWQgdG8gc2VsZWN0IG9uZQorb2YgZWlnaHQgcG9zc2libGUgSS9PIEJhc2UgYWRkcmVzc2VzIHVzaW5nIHRoZSBmb2xsb3dpbmcgdGFibGUKKworICAgU3dpdGNoICAgICAgfCBIZXggSS9PCisgICAgMSAgIDIgICAzICB8IEFkZHJlc3MKKyAgIC0tLS0tLS0tLS0tLXwtLS0tLS0tLQorICAgT04gIE9OICBPTiAgfCAgMjYwCisgICBPTiAgT04gIE9GRiB8ICAyOTAKKyAgIE9OICBPRkYgT04gIHwgIDJFMCAgKE1hbnVmYWN0dXJlcidzIGRlZmF1bHQpCisgICBPTiAgT0ZGIE9GRiB8ICAyRjAKKyAgIE9GRiBPTiAgT04gIHwgIDMwMAorICAgT0ZGIE9OICBPRkYgfCAgMzUwCisgICBPRkYgT0ZGIE9OICB8ICAzODAKKyAgIE9GRiBPRkYgT0ZGIHwgIDNFMAorCisKK1NldHRpbmcgdGhlIEJhc2UgTWVtb3J5IChSQU0pIGJ1ZmZlciBBZGRyZXNzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGUgbWVtb3J5IGJ1ZmZlciByZXF1aXJlcyAySyBvZiBhIDE2SyBibG9jayBvZiBSQU0uIFRoZSBiYXNlIG9mIHRoaXMKKzE2SyBibG9jayBjYW4gYmUgbG9jYXRlZCBpbiBhbnkgb2YgZWlnaHQgcG9zaXRpb25zLgorU3dpdGNoZXMgNC02IG9mIHN3aXRjaCBncm91cCBTVzIgc2VsZWN0IHRoZSBCYXNlIG9mIHRoZSAxNksgYmxvY2suCitXaXRoaW4gdGhhdCAxNksgYWRkcmVzcyBzcGFjZSwgdGhlIGJ1ZmZlciBtYXkgYmUgYXNzaWduZWQgYW55IG9uZSBvZiBmb3VyCitwb3NpdGlvbnMsIGRldGVybWluZWQgYnkgdGhlIG9mZnNldCwgc3dpdGNoZXMgNyBhbmQgOCBvZiBncm91cCBTVzIuCisKKyAgIFN3aXRjaCAgICAgfCBIZXggUkFNIHwgSGV4IFJPTQorICAgNCA1IDYgIDcgOCB8IEFkZHJlc3MgfCBBZGRyZXNzICopCisgICAtLS0tLS0tLS0tLXwtLS0tLS0tLS18LS0tLS0tLS0tLS0KKyAgIDAgMCAwICAwIDAgfCAgQzAwMDAgIHwgIEMyMDAwCisgICAwIDAgMCAgMCAxIHwgIEMwODAwICB8ICBDMjAwMAorICAgMCAwIDAgIDEgMCB8ICBDMTAwMCAgfCAgQzIwMDAKKyAgIDAgMCAwICAxIDEgfCAgQzE4MDAgIHwgIEMyMDAwCisgICAgICAgICAgICAgIHwgICAgICAgICB8CisgICAwIDAgMSAgMCAwIHwgIEM0MDAwICB8ICBDNjAwMAorICAgMCAwIDEgIDAgMSB8ICBDNDgwMCAgfCAgQzYwMDAKKyAgIDAgMCAxICAxIDAgfCAgQzUwMDAgIHwgIEM2MDAwCisgICAwIDAgMSAgMSAxIHwgIEM1ODAwICB8ICBDNjAwMAorICAgICAgICAgICAgICB8ICAgICAgICAgfAorICAgMCAxIDAgIDAgMCB8ICBDQzAwMCAgfCAgQ0UwMDAKKyAgIDAgMSAwICAwIDEgfCAgQ0M4MDAgIHwgIENFMDAwCisgICAwIDEgMCAgMSAwIHwgIENEMDAwICB8ICBDRTAwMAorICAgMCAxIDAgIDEgMSB8ICBDRDgwMCAgfCAgQ0UwMDAKKyAgICAgICAgICAgICAgfCAgICAgICAgIHwKKyAgIDAgMSAxICAwIDAgfCAgRDAwMDAgIHwgIEQyMDAwICAoTWFudWZhY3R1cmVyJ3MgZGVmYXVsdCkKKyAgIDAgMSAxICAwIDEgfCAgRDA4MDAgIHwgIEQyMDAwCisgICAwIDEgMSAgMSAwIHwgIEQxMDAwICB8ICBEMjAwMAorICAgMCAxIDEgIDEgMSB8ICBEMTgwMCAgfCAgRDIwMDAKKyAgICAgICAgICAgICAgfCAgICAgICAgIHwKKyAgIDEgMCAwICAwIDAgfCAgRDQwMDAgIHwgIEQ2MDAwCisgICAxIDAgMCAgMCAxIHwgIEQ0ODAwICB8ICBENjAwMAorICAgMSAwIDAgIDEgMCB8ICBENTAwMCAgfCAgRDYwMDAKKyAgIDEgMCAwICAxIDEgfCAgRDU4MDAgIHwgIEQ2MDAwCisgICAgICAgICAgICAgIHwgICAgICAgICB8CisgICAxIDAgMSAgMCAwIHwgIEQ4MDAwICB8ICBEQTAwMAorICAgMSAwIDEgIDAgMSB8ICBEODgwMCAgfCAgREEwMDAKKyAgIDEgMCAxICAxIDAgfCAgRDkwMDAgIHwgIERBMDAwCisgICAxIDAgMSAgMSAxIHwgIEQ5ODAwICB8ICBEQTAwMAorICAgICAgICAgICAgICB8ICAgICAgICAgfAorICAgMSAxIDAgIDAgMCB8ICBEQzAwMCAgfCAgREUwMDAKKyAgIDEgMSAwICAwIDEgfCAgREM4MDAgIHwgIERFMDAwCisgICAxIDEgMCAgMSAwIHwgIEREMDAwICB8ICBERTAwMAorICAgMSAxIDAgIDEgMSB8ICBERDgwMCAgfCAgREUwMDAKKyAgICAgICAgICAgICAgfCAgICAgICAgIHwKKyAgIDEgMSAxICAwIDAgfCAgRTAwMDAgIHwgIEUyMDAwCisgICAxIDEgMSAgMCAxIHwgIEUwODAwICB8ICBFMjAwMAorICAgMSAxIDEgIDEgMCB8ICBFMTAwMCAgfCAgRTIwMDAKKyAgIDEgMSAxICAxIDEgfCAgRTE4MDAgIHwgIEUyMDAwCisgIAorKikgVG8gZW5hYmxlIHRoZSA4SyBCb290IFBST00gaW5zdGFsbCB0aGUganVtcGVyIFJPTS4KKyAgIFRoZSBkZWZhdWx0IGlzIGp1bXBlciBST00gbm90IGluc3RhbGxlZC4KKworCitTZXR0aW5nIEludGVycnVwdCBSZXF1ZXN0IExpbmVzIChJUlEpCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RvIHNlbGVjdCBhIGhhcmR3YXJlIGludGVycnVwdCBsZXZlbCBzZXQgb25lIChvbmx5IG9uZSEpIG9mIHRoZSBqdW1wZXJzCitJUlEyLCBJUlEzLCBJUlE0LCBJUlE1IG9yIElSUTcuIFRoZSBtYW51ZmFjdHVyZXIncyBkZWZhdWx0IGlzIElSUTIuCisgCisKK1NldHRpbmcgdGhlIFRpbWVvdXRzCistLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGUgdHdvIGp1bXBlcnMgbGFiZWxlZCBFVDEgYW5kIEVUMiBhcmUgdXNlZCB0byBkZXRlcm1pbmUgdGhlIHRpbWVvdXQKK3BhcmFtZXRlcnMgKHJlc3BvbnNlIGFuZCByZWNvbmZpZ3VyYXRpb24gdGltZSkuIEV2ZXJ5IG5vZGUgaW4gYSBuZXR3b3JrCittdXN0IGJlIHNldCB0byB0aGUgc2FtZSB0aW1lb3V0IHZhbHVlcy4KKworICAgRVQxIEVUMiB8IFJlc3BvbnNlIFRpbWUgKHVzKSB8IFJlY29uZmlndXJhdGlvbiBUaW1lIChtcykKKyAgIC0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICBPZmYgT2ZmIHwgICAgICAgIDc4ICAgICAgICAgIHwgICAgICAgICAgODQwICAgKERlZmF1bHQpCisgICBPZmYgT24gIHwgICAgICAgMjg1ICAgICAgICAgIHwgICAgICAgICAxNjgwCisgICBPbiAgT2ZmIHwgICAgICAgNTYzICAgICAgICAgIHwgICAgICAgICAxNjgwCisgICBPbiAgT24gIHwgICAgICAxMTMwICAgICAgICAgIHwgICAgICAgICAxNjgwCisKK09uIG1lYW5zIGp1bXBlciBpbnN0YWxsZWQsIE9mZiBtZWFucyBqdW1wZXIgbm90IGluc3RhbGxlZAorCisKK05PTkFNRSAxNi1CSVQgQVJDTkVUCis9PT09PT09PT09PT09PT09PT09PQorCitUaGUgbWFudWFsIG9mIG15IDgtQml0IE5PTkFNRSBBUkNuZXQgQ2FyZCBjb250YWlucyBhbm90aGVyIGRlc2NyaXB0aW9uCitvZiBhIDE2LUJpdCBDb2F4IC8gVHdpc3RlZCBQYWlyIENhcmQuIFRoaXMgZGVzY3JpcHRpb24gaXMgaW5jb21wbGV0ZSwKK2JlY2F1c2UgdGhlcmUgYXJlIG1pc3NpbmcgdHdvIHBhZ2VzIGluIHRoZSBtYW51YWwgYm9va2xldC4gKFRoZSB0YWJsZQorb2YgY29udGVudHMgcmVwb3J0cyBwYWdlcyAuLi4gMi05LCAyLTExLCAyLTEyLCAzLTEsIC4uLiBidXQgaW5zaWRlCit0aGUgYm9va2xldCB0aGVyZSBpcyBhIGRpZmZlcmVudCB3YXkgb2YgY291bnRpbmcgLi4uIDItOSwgMi0xMCwgQS0xLAorKGVtcHR5IHBhZ2UpLCAzLTEsIC4uLiwgMy0xOCwgQS0xIChhZ2FpbiksIEEtMikKK0Fsc28gdGhlIHBpY3R1cmUgb2YgdGhlIGJvYXJkIGxheW91dCBpcyBub3QgYXMgZ29vZCBhcyB0aGUgcGljdHVyZSBvZgorOC1CaXQgY2FyZCwgYmVjYXVzZSB0aGVyZSBpc24ndCBhbnkgbGV0dGVyIGxpa2UgIlNXMSIgd3JpdHRlbiB0byB0aGUKK3BpY3R1cmUuCitTaG91bGQgc29tZWJvZHkgaGF2ZSBzdWNoIGEgYm9hcmQsIHBsZWFzZSBmZWVsIGZyZWUgdG8gY29tcGxldGUgdGhpcworZGVzY3JpcHRpb24gb3IgdG8gc2VuZCBhIG1haWwgdG8gbWUhCisKK1RoaXMgZGVzY3JpcHRpb24gaGFzIGJlZW4gd3JpdHRlbiBieSBKdWVyZ2VuIFNlaWZlcnQgPHNlaWZlcnRAaHR3bS5kZT4KK3VzaW5nIGluZm9ybWF0aW9uIGZyb20gdGhlIE9yaWdpbmFsCisgICAgICAgICAgICAgICAgICAgICJBUkNuZXQgSW5zdGFsbGF0aW9uIE1hbnVhbCIKKworCisgICBfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCisgIDwgICAgICAgICAgICAgICAgICAgIF9fX19fX19fX19fX19fX19fICBfX19fX19fX19fX19fX19fXyAgICAgICAgICAgfAorICA+ICAgICAgICAgICAgICAgICAgIHwgICAgICAgU1c/ICAgICAgIHx8ICAgICAgU1c/ICAgICAgICB8ICAgICAgICAgIHwKKyAgPCAgICAgICAgICAgICAgICAgICB8X19fX19fX19fX19fX19fX198fF9fX19fX19fX19fX19fX19ffCAgICAgICAgICB8CisgID4gICAgICAgICAgICAgICAgICAgICAgIF9fX19fX19fX19fX19fX19fX19fICAgICAgICAgICAgICAgICAgICAgICAgfAorICA8ICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgPiAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICB8CisgIDwgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgfAorICA+ICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgPCAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICB8CisgID4gICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgfAorICA8ICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgPiAgICAgICAgICAgICAgICAgICAgICB8X19fX19fX19fX19fX19fX19fX198ICAgICAgICAgICAgICAgICAgICAgICB8CisgIDwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX19ffAorICA+ICAgICAgICAgICAgICAgICAgICAgICBfX19fX19fX19fX19fX19fX19fXyAgICAgICAgICAgICAgICAgICB8ICAgIHwKKyAgPCAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgfCBKMSB8CisgID4gICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgPCAgICAgICAgICAgICAgICAgIHwgICAgfAorICA8ICAgICAgICAgICAgICAgICAgICAgIHxfX19fX19fX19fX19fX19fX19fX3wgID8gPyA/ID8gPyA/ICAgICB8X19fX3wKKyAgPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxvfG98b3xvfG98b3wgICAgICAgICB8CisgIDwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8b3xvfG98b3xvfG98ICAgICAgICAgfAorICA+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgPCAgICAgICAgICAgICBfXyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19fX19fX19fX198CisgID4gICAgICAgICAgICB8ICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICA8X19fX19fX19fX19ffCAgfF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX3wKKworCitTZXR0aW5nIG9uZSBvZiB0aGUgc3dpdGNoZXMgdG8gT2ZmIG1lYW5zICIxIiwgT24gbWVhbnMgIjAiLgorCisKK1NldHRpbmcgdGhlIE5vZGUgSUQKKy0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlIGVpZ2h0IHN3aXRjaGVzIGluIGdyb3VwIFNXMiBhcmUgdXNlZCB0byBzZXQgdGhlIG5vZGUgSUQuCitFYWNoIG5vZGUgYXR0YWNoZWQgdG8gdGhlIG5ldHdvcmsgbXVzdCBoYXZlIGFuIHVuaXF1ZSBub2RlIElEIHdoaWNoCittdXN0IGJlIGRpZmZlcmVudCBmcm9tIDAuCitTd2l0Y2ggOCBzZXJ2ZXMgYXMgdGhlIGxlYXN0IHNpZ25pZmljYW50IGJpdCAoTFNCKS4KKworVGhlIG5vZGUgSUQgaXMgdGhlIHN1bSBvZiB0aGUgdmFsdWVzIG9mIGFsbCBzd2l0Y2hlcyBzZXQgdG8gIjEiICAKK1RoZXNlIHZhbHVlcyBhcmU6CisKKyAgICBTd2l0Y2ggfCBWYWx1ZQorICAgIC0tLS0tLS18LS0tLS0tLQorICAgICAgOCAgICB8ICAgMQorICAgICAgNyAgICB8ICAgMgorICAgICAgNiAgICB8ICAgNAorICAgICAgNSAgICB8ICAgOAorICAgICAgNCAgICB8ICAxNgorICAgICAgMyAgICB8ICAzMgorICAgICAgMiAgICB8ICA2NAorICAgICAgMSAgICB8IDEyOAorCitTb21lIEV4YW1wbGVzOgorCisgICAgU3dpdGNoICAgICAgICAgfCBIZXggICAgIHwgRGVjaW1hbCAKKyAgIDEgMiAzIDQgNSA2IDcgOCB8IE5vZGUgSUQgfCBOb2RlIElECisgICAtLS0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tLXwtLS0tLS0tLS0KKyAgIDAgMCAwIDAgMCAwIDAgMCB8ICAgIG5vdCBhbGxvd2VkCisgICAwIDAgMCAwIDAgMCAwIDEgfCAgICAxICAgIHwgICAgMSAKKyAgIDAgMCAwIDAgMCAwIDEgMCB8ICAgIDIgICAgfCAgICAyCisgICAwIDAgMCAwIDAgMCAxIDEgfCAgICAzICAgIHwgICAgMworICAgICAgIC4gLiAuICAgICAgIHwgICAgICAgICB8CisgICAwIDEgMCAxIDAgMSAwIDEgfCAgIDU1ICAgIHwgICA4NQorICAgICAgIC4gLiAuICAgICAgIHwgICAgICAgICB8CisgICAxIDAgMSAwIDEgMCAxIDAgfCAgIEFBICAgIHwgIDE3MAorICAgICAgIC4gLiAuICAgICAgIHwgICAgICAgICB8ICAKKyAgIDEgMSAxIDEgMSAxIDAgMSB8ICAgRkQgICAgfCAgMjUzCisgICAxIDEgMSAxIDEgMSAxIDAgfCAgIEZFICAgIHwgIDI1NAorICAgMSAxIDEgMSAxIDEgMSAxIHwgICBGRiAgICB8ICAyNTUKKworCitTZXR0aW5nIHRoZSBJL08gQmFzZSBBZGRyZXNzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZSBmaXJzdCB0aHJlZSBzd2l0Y2hlcyBpbiBzd2l0Y2ggZ3JvdXAgU1cxIGFyZSB1c2VkIHRvIHNlbGVjdCBvbmUKK29mIGVpZ2h0IHBvc3NpYmxlIEkvTyBCYXNlIGFkZHJlc3NlcyB1c2luZyB0aGUgZm9sbG93aW5nIHRhYmxlCisKKyAgIFN3aXRjaCAgICAgIHwgSGV4IEkvTworICAgIDMgICAyICAgMSAgfCBBZGRyZXNzCisgICAtLS0tLS0tLS0tLS18LS0tLS0tLS0KKyAgIE9OICBPTiAgT04gIHwgIDI2MAorICAgT04gIE9OICBPRkYgfCAgMjkwCisgICBPTiAgT0ZGIE9OICB8ICAyRTAgIChNYW51ZmFjdHVyZXIncyBkZWZhdWx0KQorICAgT04gIE9GRiBPRkYgfCAgMkYwCisgICBPRkYgT04gIE9OICB8ICAzMDAKKyAgIE9GRiBPTiAgT0ZGIHwgIDM1MAorICAgT0ZGIE9GRiBPTiAgfCAgMzgwCisgICBPRkYgT0ZGIE9GRiB8ICAzRTAKKworCitTZXR0aW5nIHRoZSBCYXNlIE1lbW9yeSAoUkFNKSBidWZmZXIgQWRkcmVzcworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlIG1lbW9yeSBidWZmZXIgcmVxdWlyZXMgMksgb2YgYSAxNksgYmxvY2sgb2YgUkFNLiBUaGUgYmFzZSBvZiB0aGlzCisxNksgYmxvY2sgY2FuIGJlIGxvY2F0ZWQgaW4gYW55IG9mIGVpZ2h0IHBvc2l0aW9ucy4KK1N3aXRjaGVzIDYtOCBvZiBzd2l0Y2ggZ3JvdXAgU1cxIHNlbGVjdCB0aGUgQmFzZSBvZiB0aGUgMTZLIGJsb2NrLgorV2l0aGluIHRoYXQgMTZLIGFkZHJlc3Mgc3BhY2UsIHRoZSBidWZmZXIgbWF5IGJlIGFzc2lnbmVkIGFueSBvbmUgb2YgZm91cgorcG9zaXRpb25zLCBkZXRlcm1pbmVkIGJ5IHRoZSBvZmZzZXQsIHN3aXRjaGVzIDQgYW5kIDUgb2YgZ3JvdXAgU1cxLgorCisgICBTd2l0Y2ggICAgIHwgSGV4IFJBTSB8IEhleCBST00KKyAgIDggNyA2ICA1IDQgfCBBZGRyZXNzIHwgQWRkcmVzcworICAgLS0tLS0tLS0tLS18LS0tLS0tLS0tfC0tLS0tLS0tLS0tCisgICAwIDAgMCAgMCAwIHwgIEMwMDAwICB8ICBDMjAwMAorICAgMCAwIDAgIDAgMSB8ICBDMDgwMCAgfCAgQzIwMDAKKyAgIDAgMCAwICAxIDAgfCAgQzEwMDAgIHwgIEMyMDAwCisgICAwIDAgMCAgMSAxIHwgIEMxODAwICB8ICBDMjAwMAorICAgICAgICAgICAgICB8ICAgICAgICAgfAorICAgMCAwIDEgIDAgMCB8ICBDNDAwMCAgfCAgQzYwMDAKKyAgIDAgMCAxICAwIDEgfCAgQzQ4MDAgIHwgIEM2MDAwCisgICAwIDAgMSAgMSAwIHwgIEM1MDAwICB8ICBDNjAwMAorICAgMCAwIDEgIDEgMSB8ICBDNTgwMCAgfCAgQzYwMDAKKyAgICAgICAgICAgICAgfCAgICAgICAgIHwKKyAgIDAgMSAwICAwIDAgfCAgQ0MwMDAgIHwgIENFMDAwCisgICAwIDEgMCAgMCAxIHwgIENDODAwICB8ICBDRTAwMAorICAgMCAxIDAgIDEgMCB8ICBDRDAwMCAgfCAgQ0UwMDAKKyAgIDAgMSAwICAxIDEgfCAgQ0Q4MDAgIHwgIENFMDAwCisgICAgICAgICAgICAgIHwgICAgICAgICB8CisgICAwIDEgMSAgMCAwIHwgIEQwMDAwICB8ICBEMjAwMCAgKE1hbnVmYWN0dXJlcidzIGRlZmF1bHQpCisgICAwIDEgMSAgMCAxIHwgIEQwODAwICB8ICBEMjAwMAorICAgMCAxIDEgIDEgMCB8ICBEMTAwMCAgfCAgRDIwMDAKKyAgIDAgMSAxICAxIDEgfCAgRDE4MDAgIHwgIEQyMDAwCisgICAgICAgICAgICAgIHwgICAgICAgICB8CisgICAxIDAgMCAgMCAwIHwgIEQ0MDAwICB8ICBENjAwMAorICAgMSAwIDAgIDAgMSB8ICBENDgwMCAgfCAgRDYwMDAKKyAgIDEgMCAwICAxIDAgfCAgRDUwMDAgIHwgIEQ2MDAwCisgICAxIDAgMCAgMSAxIHwgIEQ1ODAwICB8ICBENjAwMAorICAgICAgICAgICAgICB8ICAgICAgICAgfAorICAgMSAwIDEgIDAgMCB8ICBEODAwMCAgfCAgREEwMDAKKyAgIDEgMCAxICAwIDEgfCAgRDg4MDAgIHwgIERBMDAwCisgICAxIDAgMSAgMSAwIHwgIEQ5MDAwICB8ICBEQTAwMAorICAgMSAwIDEgIDEgMSB8ICBEOTgwMCAgfCAgREEwMDAKKyAgICAgICAgICAgICAgfCAgICAgICAgIHwKKyAgIDEgMSAwICAwIDAgfCAgREMwMDAgIHwgIERFMDAwCisgICAxIDEgMCAgMCAxIHwgIERDODAwICB8ICBERTAwMAorICAgMSAxIDAgIDEgMCB8ICBERDAwMCAgfCAgREUwMDAKKyAgIDEgMSAwICAxIDEgfCAgREQ4MDAgIHwgIERFMDAwCisgICAgICAgICAgICAgIHwgICAgICAgICB8CisgICAxIDEgMSAgMCAwIHwgIEUwMDAwICB8ICBFMjAwMAorICAgMSAxIDEgIDAgMSB8ICBFMDgwMCAgfCAgRTIwMDAKKyAgIDEgMSAxICAxIDAgfCAgRTEwMDAgIHwgIEUyMDAwCisgICAxIDEgMSAgMSAxIHwgIEUxODAwICB8ICBFMjAwMAorICAKKworU2V0dGluZyBJbnRlcnJ1cHQgUmVxdWVzdCBMaW5lcyAoSVJRKQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCis/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/PworCisKK1NldHRpbmcgdGhlIFRpbWVvdXRzCistLS0tLS0tLS0tLS0tLS0tLS0tLQorCis/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/PworCisKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKKyoqIE5vIE5hbWUgKioKKzgtYml0IGNhcmRzICgiTWFkZSBpbiBUYWl3YW4gUi5PLkMuIikKKy0tLS0tLS0tLS0tCisgIC0gZnJvbSBWb2p0ZWNoIFBhdmxpayA8dm9qdGVjaEBzdXNlLmN6PgorCitJIGhhdmUgbmFtZWQgdGhpcyBBUkNuZXQgY2FyZCAiTk9OQU1FIiwgc2luY2UgSSBnb3Qgb25seSB0aGUgY2FyZCB3aXRoCitubyBtYW51YWwgYXQgYWxsIGFuZCB0aGUgb25seSB0ZXh0IGlkZW50aWZ5aW5nIHRoZSBtYW51ZmFjdHVyZXIgaXMgCisiTUFERSBJTiBUQUlXQU4gUi5PLkMiIHByaW50ZWQgb24gdGhlIGNhcmQuCisKKyAgICAgICAgICBfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KKyAgICAgICAgIHwgICAgICAgICAgICAgICAgIDEgMiAzIDQgNSA2IDcgOCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgICAgICB8IHxvfG98IEpQMSAgICAgICBvfG98b3xvfG98b3xvfG98IE9OICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICAgICAgfCAgKyAgICAgICAgICAgICAgb3xvfG98b3xvfG98b3xvfCAgICAgICAgICAgICAgICAgICAgICAgIF9fX3wKKyAgICAgICAgIHwgIF9fX19fX19fX19fX18gIG98b3xvfG98b3xvfG98b3wgT0ZGICAgICAgICAgX19fX18gICAgIHwgICB8IElENworICAgICAgICAgfCB8ICAgICAgICAgICAgIHwgU1cxICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgIHwgICAgfCAgIHwgSUQ2CisgICAgICAgICB8ID4gUkFNICgyaykgICAgfCAgICAgICAgX19fX19fX19fX19fX19fX19fX18gfCAgSCAgfCAgICB8IFMgfCBJRDUKKyAgICAgICAgIHwgfF9fX19fX19fX19fX198ICAgICAgIHwgICAgICAgICAgICAgICAgICAgIHx8ICB5ICB8ICAgIHwgVyB8IElENAorICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgfHwgIGIgIHwgICAgfCAyIHwgSUQzCisgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICB8fCAgciAgfCAgICB8ICAgfCBJRDIKKyAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgIHx8ICBpICB8ICAgIHwgICB8IElEMQorICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICA5MEM2NSAgICAgICAgfHwgIGQgIHwgICAgfF9fX3wgSUQwCisgICAgICAgICB8ICAgICAgU1czICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICB8fCAgICAgfCAgICAgICAgfCAgICAgIAorICAgICAgICAgfCB8b3xvfG98b3xvfG98b3xvfCBPTiAgfCAgICAgICAgICAgICAgICAgICAgfHwgIEkgIHwgICAgICAgIHwKKyAgICAgICAgIHwgfG98b3xvfG98b3xvfG98b3wgICAgIHwgICAgICAgICAgICAgICAgICAgIHx8ICBDICB8ICAgICAgICB8CisgICAgICAgICB8IHxvfG98b3xvfG98b3xvfG98IE9GRiB8X19fX19fX19fX19fX19fX19fX198fCAgICAgfCAgIF9fX19ffAorICAgICAgICAgfCAgMSAyIDMgNCA1IDYgNyA4ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgIHwgIHwgICAgIHxfX18KKyAgICAgICAgIHwgIF9fX19fX19fX19fX19fICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICB8ICB8IEJOQyB8X19ffAorICAgICAgICAgfCB8ICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxfX19fX3wgIHxfX19fX3wKKyAgICAgICAgIHwgPiBFUFJPTSBTT0NLRVQgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgICAgICB8IHxfX19fX19fX19fX19fX3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX19fX19fX19fX19fX3wKKyAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgICAgICB8X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19ffAorCitMZWdlbmQ6CisKKzkwQzY1ICAgICAgIEFSQ05FVCBDaGlwIAorU1cxIDEtNTogICAgQmFzZSBNZW1vcnkgQWRkcmVzcyBTZWxlY3QKKyAgICA2LTg6ICAgIEJhc2UgSS9PIEFkZHJlc3MgU2VsZWN0CitTVzIgMS04OiAgICBOb2RlIElEIFNlbGVjdCAoSUQwLUlENykKK1NXMyAxLTU6ICAgIElSUSBTZWxlY3QgICAKKyAgICA2LTc6ICAgIEV4dHJhIFRpbWVvdXQKKyAgICA4ICA6ICAgIFJPTSBFbmFibGUgICAKK0pQMSAgICAgICAgIExlZCBjb25uZWN0b3IKK0JOQyAgICAgICAgIENvYXggY29ubmVjdG9yCisKK0FsdGhvdWdoIHRoZSBqdW1wZXJzIFNXMSBhbmQgU1czIGFyZSBtYXJrZWQgU1csIG5vdCBKUCwgdGhleSBhcmUganVtcGVycywgbm90IAorc3dpdGNoZXMuCisKK1NldHRpbmcgdGhlIGp1bXBlcnMgdG8gT04gbWVhbnMgY29ubmVjdGluZyB0aGUgdXBwZXIgdHdvIHBpbnMsIG9mZiB0aGUgYm90dG9tIAordHdvIC0gb3IgLSBpbiBjYXNlIG9mIElSUSBzZXR0aW5nLCBjb25uZWN0aW5nIG5vbmUgb2YgdGhlbSBhdCBhbGwuCisKK1NldHRpbmcgdGhlIE5vZGUgSUQKKy0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlIGVpZ2h0IHN3aXRjaGVzIGluIFNXMiBhcmUgdXNlZCB0byBzZXQgdGhlIG5vZGUgSUQuIEVhY2ggbm9kZSBhdHRhY2hlZAordG8gdGhlIG5ldHdvcmsgbXVzdCBoYXZlIGFuIHVuaXF1ZSBub2RlIElEIHdoaWNoIG11c3Qgbm90IGJlIDAuCitTd2l0Y2ggMSAoSUQwKSBzZXJ2ZXMgYXMgdGhlIGxlYXN0IHNpZ25pZmljYW50IGJpdCAoTFNCKS4KKworU2V0dGluZyBvbmUgb2YgdGhlIHN3aXRjaGVzIHRvIE9mZiBtZWFucyAiMSIsIE9uIG1lYW5zICIwIi4KKworVGhlIG5vZGUgSUQgaXMgdGhlIHN1bSBvZiB0aGUgdmFsdWVzIG9mIGFsbCBzd2l0Y2hlcyBzZXQgdG8gIjEiICAKK1RoZXNlIHZhbHVlcyBhcmU6CisKKyAgIFN3aXRjaCB8IExhYmVsIHwgVmFsdWUKKyAgIC0tLS0tLS18LS0tLS0tLXwtLS0tLS0tCisgICAgIDEgICAgfCBJRDAgICB8ICAgMQorICAgICAyICAgIHwgSUQxICAgfCAgIDIKKyAgICAgMyAgICB8IElEMiAgIHwgICA0CisgICAgIDQgICAgfCBJRDMgICB8ICAgOAorICAgICA1ICAgIHwgSUQ0ICAgfCAgMTYKKyAgICAgNiAgICB8IElENSAgIHwgIDMyCisgICAgIDcgICAgfCBJRDYgICB8ICA2NAorICAgICA4ICAgIHwgSUQ3ICAgfCAxMjgKKworU29tZSBFeGFtcGxlczoKKworICAgIFN3aXRjaCAgICAgICAgIHwgSGV4ICAgICB8IERlY2ltYWwgCisgICA4IDcgNiA1IDQgMyAyIDEgfCBOb2RlIElEIHwgTm9kZSBJRAorICAgLS0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS18LS0tLS0tLS0tCisgICAwIDAgMCAwIDAgMCAwIDAgfCAgICBub3QgYWxsb3dlZAorICAgMCAwIDAgMCAwIDAgMCAxIHwgICAgMSAgICB8ICAgIDEgCisgICAwIDAgMCAwIDAgMCAxIDAgfCAgICAyICAgIHwgICAgMgorICAgMCAwIDAgMCAwIDAgMSAxIHwgICAgMyAgICB8ICAgIDMKKyAgICAgICAuIC4gLiAgICAgICB8ICAgICAgICAgfAorICAgMCAxIDAgMSAwIDEgMCAxIHwgICA1NSAgICB8ICAgODUKKyAgICAgICAuIC4gLiAgICAgICB8ICAgICAgICAgfAorICAgMSAwIDEgMCAxIDAgMSAwIHwgICBBQSAgICB8ICAxNzAKKyAgICAgICAuIC4gLiAgICAgICB8ICAgICAgICAgfCAgCisgICAxIDEgMSAxIDEgMSAwIDEgfCAgIEZEICAgIHwgIDI1MworICAgMSAxIDEgMSAxIDEgMSAwIHwgICBGRSAgICB8ICAyNTQKKyAgIDEgMSAxIDEgMSAxIDEgMSB8ICAgRkYgICAgfCAgMjU1CisKKworU2V0dGluZyB0aGUgSS9PIEJhc2UgQWRkcmVzcworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGUgbGFzdCB0aHJlZSBzd2l0Y2hlcyBpbiBzd2l0Y2ggYmxvY2sgU1cxIGFyZSB1c2VkIHRvIHNlbGVjdCBvbmUKK29mIGVpZ2h0IHBvc3NpYmxlIEkvTyBCYXNlIGFkZHJlc3NlcyB1c2luZyB0aGUgZm9sbG93aW5nIHRhYmxlCisKKworICAgU3dpdGNoICAgICAgfCBIZXggSS9PCisgICAgNiAgIDcgICA4ICB8IEFkZHJlc3MKKyAgIC0tLS0tLS0tLS0tLXwtLS0tLS0tLQorICAgT04gIE9OICBPTiAgfCAgMjYwCisgICBPRkYgT04gIE9OICB8ICAyOTAKKyAgIE9OICBPRkYgT04gIHwgIDJFMCAgKE1hbnVmYWN0dXJlcidzIGRlZmF1bHQpCisgICBPRkYgT0ZGIE9OICB8ICAyRjAKKyAgIE9OICBPTiAgT0ZGIHwgIDMwMAorICAgT0ZGIE9OICBPRkYgfCAgMzUwCisgICBPTiAgT0ZGIE9GRiB8ICAzODAKKyAgIE9GRiBPRkYgT0ZGIHwgIDNFMAorCisKK1NldHRpbmcgdGhlIEJhc2UgTWVtb3J5IChSQU0pIGJ1ZmZlciBBZGRyZXNzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGUgbWVtb3J5IGJ1ZmZlciAoUkFNKSByZXF1aXJlcyAySy4gVGhlIGJhc2Ugb2YgdGhpcyBidWZmZXIgY2FuIGJlIAorbG9jYXRlZCBpbiBhbnkgb2YgZWlnaHQgcG9zaXRpb25zLiBUaGUgYWRkcmVzcyBvZiB0aGUgQm9vdCBQcm9tIGlzCittZW1vcnkgYmFzZSArIDB4MjAwMC4KK0p1bXBlcnMgMy01IG9mIGp1bXBlciBibG9jayBTVzEgc2VsZWN0IHRoZSBNZW1vcnkgQmFzZSBhZGRyZXNzLgorCisgICBTd2l0Y2ggICAgICAgICAgICAgIHwgSGV4IFJBTSB8IEhleCBST00KKyAgICAxICAgMiAgIDMgICA0ICAgNSAgfCBBZGRyZXNzIHwgQWRkcmVzcyAqKQorICAgLS0tLS0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tfC0tLS0tLS0tLS0tCisgICBPTiAgT04gIE9OICBPTiAgT04gIHwgIEMwMDAwICB8ICBDMjAwMAorICAgT04gIE9OICBPRkYgT04gIE9OICB8ICBDNDAwMCAgfCAgQzYwMDAKKyAgIE9OICBPTiAgT04gIE9GRiBPTiAgfCAgQ0MwMDAgIHwgIENFMDAwCisgICBPTiAgT04gIE9GRiBPRkYgT04gIHwgIEQwMDAwICB8ICBEMjAwMCAgKE1hbnVmYWN0dXJlcidzIGRlZmF1bHQpCisgICBPTiAgT04gIE9OICBPTiAgT0ZGIHwgIEQ0MDAwICB8ICBENjAwMAorICAgT04gIE9OICBPRkYgT04gIE9GRiB8ICBEODAwMCAgfCAgREEwMDAKKyAgIE9OICBPTiAgT04gIE9GRiBPRkYgfCAgREMwMDAgIHwgIERFMDAwCisgICBPTiAgT04gIE9GRiBPRkYgT0ZGIHwgIEUwMDAwICB8ICBFMjAwMAorICAKKyopIFRvIGVuYWJsZSB0aGUgQm9vdCBST00gc2V0IHRoZSBqdW1wZXIgOCBvZiBqdW1wZXIgYmxvY2sgU1czIHRvIHBvc2l0aW9uIE9OLgorCitUaGUganVtcGVycyAxIGFuZCAyIHByb2JhYmx5IGFkZCAweDA4MDAsIDB4MTAwMCBhbmQgMHgxODAwIHRvIFJBTSBhZGRlcnMuCisKK1NldHRpbmcgdGhlIEludGVycnVwdCBMaW5lCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitKdW1wZXJzIDEtNSBvZiB0aGUganVtcGVyIGJsb2NrIFNXMyBjb250cm9sIHRoZSBJUlEgbGV2ZWwuCisKKyAgICBKdW1wZXIgICAgICAgICAgICAgIHwgIElSUQorICAgIDEgICAyICAgMyAgIDQgICA1ICAgfAorICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIE9OICBPRkYgT0ZGIE9GRiBPRkYgfCAgMgorICAgIE9GRiBPTiAgT0ZGIE9GRiBPRkYgfCAgMworICAgIE9GRiBPRkYgT04gIE9GRiBPRkYgfCAgNAorICAgIE9GRiBPRkYgT0ZGIE9OICBPRkYgfCAgNQorICAgIE9GRiBPRkYgT0ZGIE9GRiBPTiAgfCAgNworCisKK1NldHRpbmcgdGhlIFRpbWVvdXQgUGFyYW1ldGVycworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZSBqdW1wZXJzIDYtNyBvZiB0aGUganVtcGVyIGJsb2NrIFNXMyBhcmUgdXNlZCB0byBkZXRlcm1pbmUgdGhlIHRpbWVvdXQgCitwYXJhbWV0ZXJzLiBUaGVzZSB0d28ganVtcGVycyBhcmUgbm9ybWFsbHkgbGVmdCBpbiB0aGUgT0ZGIHBvc2l0aW9uLgorCisKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKKyoqIE5vIE5hbWUgKioKKyhHZW5lcmljIE1vZGVsIDkwNTgpCistLS0tLS0tLS0tLS0tLS0tLS0tLQorICAtIGZyb20gQW5kcmV3IEouIEtyb2xsIDxhZzc4NEBmcmVlbmV0LmJ1ZmZhbG8uZWR1PgorICAtIFNvcnJ5IHRoaXMgc2F0IGluIG15IHRvLWRvIGJveCBmb3Igc28gbG9uZywgQW5kcmV3ISAoeWlrZXMgLSBvdmVyIGEKKyAgICB5ZWFyISkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX19fXworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICA8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IC4tLS0nCisgICAgX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXyB8IHwKKyAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICBTVzIgICAgIHwgICAgICAgICAgICAgICAgICAgICAgfCAgfAorICAgfCAgIF9fX19fX19fX19fICAgICAgICAgICAgIHxfX19fX19fX19fX19ffCAgICAgICAgICAgICAgICAgICAgICB8ICB8CisgICB8ICB8ICAgICAgICAgICB8ICAgICAgICAgICAgICAxIDIgMyA0IDUgNiAgICAgICAgICAgICAgICAgICAgIF9fX3wgIHwKKyAgIHwgID4gIDYxMTYgUkFNIHwgICAgICAgICBfX19fX19fX18gICAgICAgICAgICAgICAgICAgICAgICAgOCB8ICAgfCAgfAorICAgfCAgfF9fX19fX19fX19ffCAgICAgICAgfDIwTUh6WHRhbHwgICAgICAgICAgICAgICAgICAgICAgICA3IHwgICB8ICB8CisgICB8ICAgICAgICAgICAgICAgICAgICAgICB8X19fX19fX19ffCAgICAgICBfX19fX19fX19fICAgICAgIDYgfCBTIHwgIHwKKyAgIHwgICAgNzRMUzM3MyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICB8LSAgICAgNSB8IFcgfCAgfAorICAgfCAgIF9fX19fX19fXyAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgRSAgIHwtICAgICA0IHwgICB8ICB8CisgICB8ICAgPl9fX19fX198ICAgICAgICAgICAgICBfX19fX19fX19fX19fX3wuLi4uLiBQICAgfC0gICAgIDMgfCAzIHwgIHwKKyAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgfCAgICA6IE8gICB8LSAgICAgMiB8ICAgfCAgfAorICAgfCAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICB8ICAgIDogWCAgIHwtICAgICAxIHxfX198ICB8CisgICB8ICAgX19fX19fX19fX19fX19fXyAgICAgIHwgICAgICAgICAgICAgIHwgICAgOiBZICAgfC0gICAgICAgICAgIHwgIHwKKyAgIHwgIHwgICAgICBTVzEgICAgICAgfCAgICAgfCAgICAgIFNMOTBDNjUgfCAgICA6ICAgICB8LSAgICAgICAgICAgfCAgfAorICAgfCAgfF9fX19fX19fX19fX19fX198ICAgICB8ICAgICAgICAgICAgICB8ICAgIDogQiAgIHwtICAgICAgICAgICB8ICB8CisgICB8ICAgIDEgMiAzIDQgNSA2IDcgOCAgICAgIHwgICAgICAgICAgICAgIHwgICAgOiBPICAgfC0gICAgICAgICAgIHwgIHwKKyAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgfF9fX19fX19fX29fX19ffC4uLi4vIEEgICB8LSAgICBfX19fX19ffCAgfAorICAgfCAgICBfX19fX19fX19fX19fX19fX19fXyAgICAgICAgICAgICAgICB8ICAgICAgUiAgIHwtICAgfCAgICAgICB8LS0tLS0tLCAgIAorICAgfCAgIHwgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICB8ICAgICAgRCAgIHwtICAgfCAgQk5DICB8ICAgIyAgfAorICAgfCAgID4gMjc2NCBQUk9NIFNPQ0tFVCAgIHwgICAgICAgICAgICAgICB8X19fX19fX19fX3wtICAgfF9fX19fX198LS0tLS0tJworICAgfCAgIHxfX19fX19fX19fX19fX19fX19fX3wgICAgICAgICAgICAgIF9fX19fX19fXyAgICAgICAgICAgICAgICB8ICB8CisgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPl9fX19fX19ffCA8LSA3NExTMjQ1ICAgIHwgIHwKKyAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgfAorICAgfF9fXyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19fX19fX19fX19fX198ICB8CisgICAgICAgfEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSHwgICAgICAgICAgICAgICB8IHwKKyAgICAgICB8VV9VX1VfVV9VX1VfVV9VX1VfVV9VX1VfVV9VX1VfVV9VX1VfVV9VX1VfVV9VfCAgICAgICAgICAgICAgIHwgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFx8CitMZWdlbmQ6CisKK1NMOTBDNjUgCUFSQ05FVCBDb250cm9sbGVyIC8gVHJhbnNjZWl2ZXIgL0xvZ2ljCitTVzEJMS01OglJUlEgU2VsZWN0CisJICA2OglFVDEKKwkgIDc6CUVUMgorCSAgODoJUk9NIEVOQUJMRSAKK1NXMgkxLTM6ICAgIE1lbW9yeSBCdWZmZXIvUFJPTSBBZGRyZXNzCisJMy02OglJL08gQWRkcmVzcyBNYXAKK1NXMwkxLTg6CU5vZGUgSUQgU2VsZWN0CitCTkMJCUJOQyBSRzYyL1UgQ29ubmVjdGlvbiAKKwkJKkkqIGhhdmUgaGFkIHN1Y2Nlc3MgdXNpbmcgUkc1OUIvVSB3aXRoICpOTyogdGVybWluYXRvcnMhCisJCVdoYXQgZ2l2ZXM/IQorCitTVzE6IFRpbWVvdXRzLCBJbnRlcnJ1cHQgYW5kIFJPTQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RvIHNlbGVjdCBhIGhhcmR3YXJlIGludGVycnVwdCBsZXZlbCBzZXQgb25lIChvbmx5IG9uZSEpIG9mIHRoZSBkaXAgc3dpdGNoZXMKK3VwIChvbikgU1cxLi4uKHN3aXRjaGVzIDEtNSkKK0lSUTMsIElSUTQsIElSUTUsIElSUTcsIElSUTIuIFRoZSBNYW51ZmFjdHVyZXIncyBkZWZhdWx0IGlzIElSUTIuCisKK1RoZSBzd2l0Y2hlcyBvbiBTVzEgbGFiZWxlZCBFWFQxIChzd2l0Y2ggNikgYW5kIEVYVDIgKHN3aXRjaCA3KQorYXJlIHVzZWQgdG8gZGV0ZXJtaW5lIHRoZSB0aW1lb3V0IHBhcmFtZXRlcnMuIFRoZXNlIHR3byBkaXAgc3dpdGNoZXMKK2FyZSBub3JtYWxseSBsZWZ0IG9mZiAoZG93bikuCisKKyAgIFRvIGVuYWJsZSB0aGUgOEsgQm9vdCBQUk9NIHBvc2l0aW9uIFNXMSBzd2l0Y2ggOCBvbiAoVVApIGxhYmVsZWQgUk9NLgorICAgVGhlIGRlZmF1bHQgaXMganVtcGVyIFJPTSBub3QgaW5zdGFsbGVkLgorCisKK1NldHRpbmcgdGhlIEkvTyBCYXNlIEFkZHJlc3MKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlIGxhc3QgdGhyZWUgc3dpdGNoZXMgaW4gc3dpdGNoIGdyb3VwIFNXMiBhcmUgdXNlZCB0byBzZWxlY3Qgb25lCitvZiBlaWdodCBwb3NzaWJsZSBJL08gQmFzZSBhZGRyZXNzZXMgdXNpbmcgdGhlIGZvbGxvd2luZyB0YWJsZQorCisKKyAgIFN3aXRjaCB8IEhleCBJL08KKyAgIDQgNSA2ICB8IEFkZHJlc3MKKyAgIC0tLS0tLS18LS0tLS0tLS0KKyAgIDAgMCAwICB8ICAyNjAKKyAgIDAgMCAxICB8ICAyOTAKKyAgIDAgMSAwICB8ICAyRTAgIChNYW51ZmFjdHVyZXIncyBkZWZhdWx0KQorICAgMCAxIDEgIHwgIDJGMAorICAgMSAwIDAgIHwgIDMwMAorICAgMSAwIDEgIHwgIDM1MAorICAgMSAxIDAgIHwgIDM4MAorICAgMSAxIDEgIHwgIDNFMAorCisKK1NldHRpbmcgdGhlIEJhc2UgTWVtb3J5IEFkZHJlc3MgKFJBTSAmIFJPTSkKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlIG1lbW9yeSBidWZmZXIgcmVxdWlyZXMgMksgb2YgYSAxNksgYmxvY2sgb2YgUkFNLiBUaGUgYmFzZSBvZiB0aGlzCisxNksgYmxvY2sgY2FuIGJlIGxvY2F0ZWQgaW4gYW55IG9mIGVpZ2h0IHBvc2l0aW9ucy4KK1N3aXRjaGVzIDEtMyBvZiBzd2l0Y2ggZ3JvdXAgU1cyIHNlbGVjdCB0aGUgQmFzZSBvZiB0aGUgMTZLIGJsb2NrLgorKDAgPSBET1dOLCAxID0gVVApCitJIGNvdWxkLCBob3dldmVyLCBvbmx5IHZlcmlmeSB0d28gc2V0dGluZ3MuLi4KKworICAgU3dpdGNofCBIZXggUkFNIHwgSGV4IFJPTQorICAgMSAyIDMgfCBBZGRyZXNzIHwgQWRkcmVzcworICAgLS0tLS0tfC0tLS0tLS0tLXwtLS0tLS0tLS0tLQorICAgMCAwIDAgfCAgRTAwMDAgIHwgIEUyMDAwCisgICAwIDAgMSB8ICBEMDAwMCAgfCAgRDIwMDAgIChNYW51ZmFjdHVyZXIncyBkZWZhdWx0KQorICAgMCAxIDAgfCAgPz8/Pz8gIHwgID8/Pz8/CisgICAwIDEgMSB8ICA/Pz8/PyAgfCAgPz8/Pz8gIAorICAgMSAwIDAgfCAgPz8/Pz8gIHwgID8/Pz8/CisgICAxIDAgMSB8ICA/Pz8/PyAgfCAgPz8/Pz8KKyAgIDEgMSAwIHwgID8/Pz8/ICB8ICA/Pz8/PworICAgMSAxIDEgfCAgPz8/Pz8gIHwgID8/Pz8/CisKKworU2V0dGluZyB0aGUgTm9kZSBJRAorLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGUgZWlnaHQgc3dpdGNoZXMgaW4gZ3JvdXAgU1czIGFyZSB1c2VkIHRvIHNldCB0aGUgbm9kZSBJRC4KK0VhY2ggbm9kZSBhdHRhY2hlZCB0byB0aGUgbmV0d29yayBtdXN0IGhhdmUgYW4gdW5pcXVlIG5vZGUgSUQgd2hpY2gKK211c3QgYmUgZGlmZmVyZW50IGZyb20gMC4KK1N3aXRjaCAxIHNlcnZlcyBhcyB0aGUgbGVhc3Qgc2lnbmlmaWNhbnQgYml0IChMU0IpLgorc3dpdGNoZXMgaW4gdGhlIERPV04gcG9zaXRpb24gYXJlIE9GRiAoMCkgYW5kIGluIHRoZSBVUCBwb3NpdGlvbiBhcmUgT04gKDEpCisKK1RoZSBub2RlIElEIGlzIHRoZSBzdW0gb2YgdGhlIHZhbHVlcyBvZiBhbGwgc3dpdGNoZXMgc2V0IHRvICIxIiAgCitUaGVzZSB2YWx1ZXMgYXJlOgorICAgIFN3aXRjaCB8IFZhbHVlCisgICAgLS0tLS0tLXwtLS0tLS0tCisgICAgICAxICAgIHwgICAxCisgICAgICAyICAgIHwgICAyCisgICAgICAzICAgIHwgICA0CisgICAgICA0ICAgIHwgICA4CisgICAgICA1ICAgIHwgIDE2CisgICAgICA2ICAgIHwgIDMyCisgICAgICA3ICAgIHwgIDY0CisgICAgICA4ICAgIHwgMTI4CisKK1NvbWUgRXhhbXBsZXM6CisKKyAgICBTd2l0Y2gjICAgICB8ICAgSGV4ICAgfCBEZWNpbWFsIAorOCA3IDYgNSA0IDMgMiAxIHwgTm9kZSBJRCB8IE5vZGUgSUQKKy0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tfC0tLS0tLS0tLQorMCAwIDAgMCAwIDAgMCAwIHwgICAgbm90IGFsbG93ZWQgIDwtLgorMCAwIDAgMCAwIDAgMCAxIHwgICAgMSAgICB8ICAgIDEgICAgfCAKKzAgMCAwIDAgMCAwIDEgMCB8ICAgIDIgICAgfCAgICAyICAgIHwKKzAgMCAwIDAgMCAwIDEgMSB8ICAgIDMgICAgfCAgICAzICAgIHwKKyAgICAuIC4gLiAgICAgICB8ICAgICAgICAgfCAgICAgICAgIHwKKzAgMSAwIDEgMCAxIDAgMSB8ICAgNTUgICAgfCAgIDg1ICAgIHwKKyAgICAuIC4gLiAgICAgICB8ICAgICAgICAgfCAgICAgICAgICsgRG9uJ3QgdXNlIDAgb3IgMjU1IQorMSAwIDEgMCAxIDAgMSAwIHwgICBBQSAgICB8ICAxNzAgICAgfAorICAgIC4gLiAuICAgICAgIHwgICAgICAgICB8ICAgICAgICAgfAorMSAxIDEgMSAxIDEgMCAxIHwgICBGRCAgICB8ICAyNTMgICAgfAorMSAxIDEgMSAxIDEgMSAwIHwgICBGRSAgICB8ICAyNTQgICAgfAorMSAxIDEgMSAxIDEgMSAxIHwgICBGRiAgICB8ICAyNTUgIDwtJworICAKKworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKworKiogVGlhcmEgKioKKyhtb2RlbCB1bmtub3duKQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAtIGZyb20gQ2hyaXN0b3BoIExhbWV0ZXIgPGNocmlzdG9waEBsYW1ldGVyLmNvbT4KKyAgCisKK0hlcmUgaXMgaW5mb3JtYXRpb24gYWJvdXQgbXkgY2FyZCBhcyBmYXIgYXMgSSBjb3VsZCBmaWd1cmUgaXQgb3V0OgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gdGlhcmEKK1RpYXJhIExhbkNhcmQgb2YgVGlhcmEgQ29tcHV0ZXIgU3lzdGVtcy4KKworKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCishICAgICAgICAgICAhIFRyYW5zbWl0dGVyIFVuaXQgISAgICAgICAgICAgICAgICEKKyEgICAgICAgICAgICstLS0tLS0tLS0tLS0tLS0tLS0rICAgICAgICAgICAgIC0tLS0tLS0KKyEgICAgICAgICAgTUVNICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29heCBDb25uZWN0b3IKKyEgIFJPTSAgICA3NjU0MzIxIDwtIEkvTyAgICAgICAgICAgICAgICAgICAgIC0tLS0tLS0KKyEgIDogIDogICArLS0tLS0tLS0rICAgICAgICAgICAgICAgICAgICAgICAgICAgIQorISAgOiAgOiAgICEgOTBDNjZMSiEgICAgICAgICAgICAgICAgICAgICAgICAgKysrCishICA6ICA6ICAgISAgICAgICAgISAgICAgICAgICAgICAgICAgICAgICAgICAhRCAgU3dpdGNoIHRvIHNldAorISAgOiAgOiAgICEgICAgICAgICEgICAgICAgICAgICAgICAgICAgICAgICAgIUkgIHRoZSBOb2RlbnVtYmVyCishICA6ICA6ICAgKy0tLS0tLS0tKyAgICAgICAgICAgICAgICAgICAgICAgICAhUAorISAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgISsrCishICAgICAgICAgMjM0NTY3IDwtIElSUSAgICAgICAgICAgICAgICAgICAgICAhCisrLS0tLS0tLS0tLS0tISEhISEhISEhISEhISEhISEhISEhISEhLS0tLS0tLS0rCisgICAgICAgICAgICAgISEhISEhISEhISEhISEhISEhISEhISEhCisKKzAgPSBKdW1wZXIgSW5zdGFsbGVkCisxID0gT3BlbgorCitUb3AgSnVtcGVyIGxpbmUgQml0IDcgPSBST00gRW5hYmxlIDY1ND1NZW1vcnkgbG9jYXRpb24gMzIxPUkvTworCitTZXR0aW5ncyBmb3IgTWVtb3J5IExvY2F0aW9uIChUb3AgSnVtcGVyIExpbmUpCis0NTYgICAgIEFkZHJlc3Mgc2VsZWN0ZWQKKzAwMAlDMDAwMAorMDAxICAgICBDNDAwMAorMDEwICAgICBDQzAwMAorMDExICAgICBEMDAwMAorMTAwICAgICBENDAwMAorMTAxICAgICBEODAwMAorMTEwICAgICBEQzAwMCAgICAgCisxMTEgICAgIEUwMDAwCisKK1NldHRpbmdzIGZvciBJL08gQWRkcmVzcyAoVG9wIEp1bXBlciBMaW5lKQorMTIzICAgICBQb3J0CiswMDAJMjYwCiswMDEJMjkwCiswMTAJMkUwCiswMTEJMkYwCisxMDAJMzAwCisxMDEJMzUwCisxMTAJMzgwCisxMTEJM0UwCisKK1NldHRpbmdzIGZvciBJUlEgU2VsZWN0aW9uIChMb3dlciBKdW1wZXIgTGluZSkKKzIzNDU2NworMDExMTExIElSUSAyCisxMDExMTEgSVJRIDMKKzExMDExMSBJUlEgNAorMTExMDExIElSUSA1CisxMTExMTAgSVJRIDcKKworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKworCitPdGhlciBDYXJkcworLS0tLS0tLS0tLS0KKworSSBoYXZlIG5vIGluZm9ybWF0aW9uIG9uIG90aGVyIG1vZGVscyBvZiBBUkNuZXQgY2FyZHMgYXQgdGhlIG1vbWVudC4gIFBsZWFzZQorc2VuZCBhbnkgYW5kIGFsbCBpbmZvIHRvOgorCWFwZW53YXJyQHdvcmxkdmlzaW9ucy5jYQorCitUaGFua3MuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvYXJjbmV0LnR4dCBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9hcmNuZXQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc3MGZjNDEKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvYXJjbmV0LnR4dApAQCAtMCwwICsxLDU1NSBAQAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorTk9URTogIFNlZSBhbHNvIGFyY25ldC1oYXJkd2FyZS50eHQgaW4gdGhpcyBkaXJlY3RvcnkgZm9yIGp1bXBlci1zZXR0aW5nCithbmQgY2FibGluZyBpbmZvcm1hdGlvbiBpZiB5b3UncmUgbGlrZSBtYW55IG9mIHVzIGFuZCBkaWRuJ3QgaGFwcGVuIHRvIGdldCBhCittYW51YWwgd2l0aCB5b3VyIEFSQ25ldCBjYXJkLgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitTaW5jZSBubyBvbmUgc2VlbXMgdG8gbGlzdGVuIHRvIG1lIG90aGVyd2lzZSwgcGVyaGFwcyBhIHBvZW0gd2lsbCBnZXQgeW91cgorYXR0ZW50aW9uOgorCQlUaGlzIGRyaXZlcidzIGdldHRpbmcgZmF0IGFuZCBiZWVmeSwKKwkJQnV0IG15IGNhdCBpcyBzdGlsbCBuYW1lZCBGaWZpLgorCitIbW0sIEkgdGhpbmsgSSdtIGFsbG93ZWQgdG8gY2FsbCB0aGF0IGEgcG9lbSwgZXZlbiB0aG91Z2ggaXQncyBvbmx5IHR3bworbGluZXMuICBIZXksIEknbSBpbiBDb21wdXRlciBTY2llbmNlLCBub3QgRW5nbGlzaC4gIEdpdmUgbWUgYSBicmVhay4KKworVGhlIHBvaW50IGlzOiAgSSBSRUFMTFkgUkVBTExZIFJFQUxMWSBSRUFMTFkgUkVBTExZIHdhbnQgdG8gaGVhciBmcm9tIHlvdSBpZgoreW91IHRlc3QgdGhpcyBhbmQgZ2V0IGl0IHdvcmtpbmcuICBPciBpZiB5b3UgZG9uJ3QuICBPciBhbnl0aGluZy4KKworQVJDbmV0IDAuMzIgQUxQSEEgZmlyc3QgbWFkZSBpdCBpbnRvIHRoZSBMaW51eCBrZXJuZWwgMS4xLjgwIC0gdGhpcyB3YXMKK25pY2UsIGJ1dCBhZnRlciB0aGF0IGV2ZW4gRkVXRVIgcGVvcGxlIHN0YXJ0ZWQgd3JpdGluZyB0byBtZSBiZWNhdXNlIHRoZXkKK2RpZG4ndCBldmVuIGhhdmUgdG8gaW5zdGFsbCB0aGUgcGF0Y2guICA8c2lnaD4KKworQ29tZSBvbiwgYmUgYSBzcG9ydCEgIFNlbmQgbWUgYSBzdWNjZXNzIHJlcG9ydCEKKworKGhleSwgdGhhdCB3YXMgZXZlbiBiZXR0ZXIgdGhhbiBteSBvcmlnaW5hbCBwb2VtLi4uIHRoaXMgaXMgZ2V0dGluZyBiYWQhKQorCisKKy0tLS0tLS0tCitXQVJOSU5HOgorLS0tLS0tLS0KKworSWYgeW91IGRvbid0IGUtbWFpbCBtZSBhYm91dCB5b3VyIHN1Y2Nlc3MvZmFpbHVyZSBzb29uLCBJIG1heSBiZSBmb3JjZWQgdG8KK3N0YXJ0IFNJTkdJTkcuICBBbmQgd2UgZG9uJ3Qgd2FudCB0aGF0LCBkbyB3ZT8KKworKFlvdSBrbm93LCBpdCBtaWdodCBiZSBhcmd1ZWQgdGhhdCBJJ20gcHVzaGluZyB0aGlzIHBvaW50IGEgbGl0dGxlIHRvbyBtdWNoLiAKK0lmIHlvdSB0aGluayBzbywgd2h5IG5vdCBmbGFtZSBtZSBpbiBhIHF1aWNrIGxpdHRsZSBlLW1haWw/ICBQbGVhc2UgYWxzbworaW5jbHVkZSB0aGUgdHlwZSBvZiBjYXJkKHMpIHlvdSdyZSB1c2luZywgc29mdHdhcmUsIHNpemUgb2YgbmV0d29yaywgYW5kCit3aGV0aGVyIGl0J3Mgd29ya2luZyBvciBub3QuKQorCitNeSBlLW1haWwgYWRkcmVzcyBpczogYXBlbndhcnJAd29ybGR2aXNpb25zLmNhCisKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKwkJCQorVGhlc2UgYXJlIHRoZSBBUkNuZXQgZHJpdmVycyBmb3IgTGludXguCisKKworVGhpcyBuZXcgcmVsZWFzZSAoMi45MSkgaGFzIGJlZW4gcHV0IHRvZ2V0aGVyIGJ5IERhdmlkIFdvb2Rob3VzZSAKKzxkd213MkBjYW0uYWMudWs+LCBpbiBhbiBhdHRlbXB0IHRvIHRpZHkgdXAgdGhlIGRyaXZlciBhZnRlciBhZGRpbmcgc3VwcG9ydCAKK2ZvciB5ZXQgYW5vdGhlciBjaGlwc2V0LiBOb3cgdGhlIGdlbmVyaWMgc3VwcG9ydCBoYXMgYmVlbiBzZXBhcmF0ZWQgZnJvbSB0aGUKK2luZGl2aWR1YWwgY2hpcHNldCBkcml2ZXJzLCBhbmQgdGhlIHNvdXJjZSBmaWxlcyBhcmVuJ3QgcXVpdGUgc28gcGFja2VkIHdpdGgKKyNpZmRlZnMhIEkndmUgY2hhbmdlZCB0aGlzIGZpbGUgYSBiaXQsIGJ1dCBrZXB0IGl0IGluIHRoZSBmaXJzdCBwZXJzb24gZnJvbQorQXZlcnksIGJlY2F1c2UgSSBkaWRuJ3Qgd2FudCB0byBjb21wbGV0ZWx5IHJld3JpdGUgaXQuCisKK1RoZSBwcmV2aW91cyByZWxlYXNlIHJlc3VsdGVkIGZyb20gbWFueSBtb250aHMgb2Ygb24tYW5kLW9mZiBlZmZvcnQgZnJvbSBtZQorKEF2ZXJ5IFBlbm5hcnVuKSwgbWFueSBidWcgcmVwb3J0cy9maXhlcyBhbmQgc3VnZ2VzdGlvbnMgZnJvbSBvdGhlcnMsIGFuZCBpbgorcGFydGljdWxhciBhIGxvdCBvZiBpbnB1dCBhbmQgY29kaW5nIGZyb20gVG9tYXN6IE1vdHlsZXdza2kuICBTdGFydGluZyB3aXRoCitBUkNuZXQgMi4xMCBBTFBIQSwgVG9tYXN6J3MgYWxsLW5ldy1hbmQtaW1wcm92ZWQgUkZDMTA1MSBzdXBwb3J0IGhhcyBiZWVuCitpbmNsdWRlZCBhbmQgc2VlbXMgdG8gYmUgd29ya2luZyBmaW5lIQorCisKK1doZXJlIGRvIEkgZGlzY3VzcyB0aGVzZSBkcml2ZXJzPworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RvbWFzeiBoYXMgYmVlbiBzbyBraW5kIGFzIHRvIHNldCB1cCBhIG5ldyBhbmQgaW1wcm92ZWQgbWFpbGluZyBsaXN0LiAKK1N1YnNjcmliZSBieSBzZW5kaW5nIGEgbWVzc2FnZSB3aXRoIHRoZSBCT0RZICJzdWJzY3JpYmUgbGludXgtYXJjbmV0IFlPVVIKK1JFQUwgTkFNRSIgdG8gbGlzdHNlcnZAdGljaHkuY2gudWouZWR1LnBsLiAgVGhlbiwgdG8gc3VibWl0IG1lc3NhZ2VzIHRvIHRoZQorbGlzdCwgbWFpbCB0byBsaW51eC1hcmNuZXRAdGljaHkuY2gudWouZWR1LnBsLgorCitUaGVyZSBhcmUgYXJjaGl2ZXMgb2YgdGhlIG1haWxpbmcgbGlzdCBhdDoKKwlodHRwOi8vdGljaHkuY2gudWouZWR1LnBsL2xpc3RzL2xpbnV4LWFyY25ldAorCitUaGUgcGVvcGxlIG9uIGxpbnV4LW5ldEB2Z2VyLmtlcm5lbC5vcmcgaGF2ZSBhbHNvIGJlZW4ga25vd24gdG8gYmUgdmVyeQoraGVscGZ1bCwgZXNwZWNpYWxseSB3aGVuIHdlJ3JlIHRhbGtpbmcgYWJvdXQgQUxQSEEgTGludXgga2VybmVscyB0aGF0IG1heSBvcgorbWF5IG5vdCB3b3JrIHJpZ2h0IGluIHRoZSBmaXJzdCBwbGFjZS4KKworCitPdGhlciBEcml2ZXJzIGFuZCBJbmZvCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1lvdSBjYW4gdHJ5IG15IEFSQ05FVCBwYWdlIG9uIHRoZSBXb3JsZCBXaWRlIFdlYiBhdDoKKwlodHRwOi8vd3d3LndvcmxkdmlzaW9ucy5jYS9+YXBlbndhcnIvYXJjbmV0LworCitBbHNvLCBTTUMgKG9uZSBvZiB0aGUgY29tcGFuaWVzIHRoYXQgbWFrZXMgQVJDbmV0IGNhcmRzKSBoYXMgYSBXV1cgc2l0ZSB5b3UKK21pZ2h0IGJlIGludGVyZXN0ZWQgaW4sIHdoaWNoIGluY2x1ZGVzIHNldmVyYWwgZHJpdmVycyBmb3IgdmFyaW91cyBjYXJkcworaW5jbHVkaW5nIEFSQ25ldC4gIFRyeToKKwlodHRwOi8vd3d3LnNtYy5jb20vCisJCitQZXJmb3JtYW5jZSBUZWNobm9sb2dpZXMgbWFrZXMgdmFyaW91cyBuZXR3b3JrIHNvZnR3YXJlIHRoYXQgc3VwcG9ydHMKK0FSQ25ldDoKKwlodHRwOi8vd3d3LnBlcmZ0ZWNoLmNvbS8gb3IgZnRwIHRvIGZ0cC5wZXJmdGVjaC5jb20uCisJCitOb3ZlbGwgbWFrZXMgYSBuZXR3b3JraW5nIHN0YWNrIGZvciBET1Mgd2hpY2ggaW5jbHVkZXMgQVJDbmV0IGRyaXZlcnMuICBUcnkKK0ZUUGluZyB0byBmdHAubm92ZWxsLmNvbS4KKworWW91IGNhbiBnZXQgdGhlIENyeW53ciBwYWNrZXQgZHJpdmVyIGNvbGxlY3Rpb24gKGluY2x1ZGluZyBhcmNldGhlci5jb20sIHRoZQorb25lIHlvdSdsbCB3YW50IHRvIHVzZSB3aXRoIEFSQ25ldCBjYXJkcykgZnJvbQorb2FrLm9ha2xhbmQuZWR1Oi9zaW10ZWwvbXNkb3MvcGt0ZHJ2ci4gSXQgd29uJ3Qgd29yayBwZXJmZWN0bHkgb24gYSAzODYrCit3aXRob3V0IHBhdGNoZXMsIHRob3VnaCwgYW5kIGFsc28gZG9lc24ndCBsaWtlIHNldmVyYWwgY2FyZHMuICBGaXhlZAordmVyc2lvbnMgYXJlIGF2YWlsYWJsZSBvbiBteSBXV1cgcGFnZSwgb3IgdmlhIGUtbWFpbCBpZiB5b3UgZG9uJ3QgaGF2ZSBXV1cKK2FjY2Vzcy4gCisKKworSW5zdGFsbGluZyB0aGUgRHJpdmVyCistLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQWxsIHlvdSB3aWxsIG5lZWQgdG8gZG8gaW4gb3JkZXIgdG8gaW5zdGFsbCB0aGUgZHJpdmVyIGlzOgorCW1ha2UgY29uZmlnCisJCShiZSBzdXJlIHRvIGNob29zZSBBUkNuZXQgaW4gdGhlIG5ldHdvcmsgZGV2aWNlcyAKKwkJYW5kIGF0IGxlYXN0IG9uZSBjaGlwc2V0IGRyaXZlci4pCisJbWFrZSBjbGVhbgorCW1ha2UgekltYWdlCisJCitJZiB5b3Ugb2J0YWluZWQgdGhpcyBBUkNuZXQgcGFja2FnZSBhcyBhbiB1cGdyYWRlIHRvIHRoZSBBUkNuZXQgZHJpdmVyIGluCit5b3VyIGN1cnJlbnQga2VybmVsLCB5b3Ugd2lsbCBuZWVkIHRvIGZpcnN0IGNvcHkgYXJjbmV0LmMgb3ZlciB0aGUgb25lIGluCit0aGUgbGludXgvZHJpdmVycy9uZXQgZGlyZWN0b3J5LgorCitZb3Ugd2lsbCBrbm93IHRoZSBkcml2ZXIgaXMgaW5zdGFsbGVkIHByb3Blcmx5IGlmIHlvdSBnZXQgc29tZSBBUkNuZXQKK21lc3NhZ2VzIHdoZW4geW91IHJlYm9vdCBpbnRvIHRoZSBuZXcgTGludXgga2VybmVsLgorCitUaGVyZSBhcmUgZm91ciBjaGlwc2V0IG9wdGlvbnM6CisKKyAxLiBTdGFuZGFyZCBBUkNuZXQgQ09NOTB4eCBjaGlwc2V0LgorCitUaGlzIGlzIHRoZSBub3JtYWwgQVJDbmV0IGNhcmQsIHdoaWNoIHlvdSd2ZSBwcm9iYWJseSBnb3QuIFRoaXMgaXMgdGhlIG9ubHkKK2NoaXBzZXQgZHJpdmVyIHdoaWNoIHdpbGwgYXV0b3Byb2JlIGlmIG5vdCB0b2xkIHdoZXJlIHRoZSBjYXJkIGlzLgorSXQgZm9sbG93aW5nIG9wdGlvbnMgb24gdGhlIGNvbW1hbmQgbGluZToKKyBjb205MHh4PVs8aW8+Wyw8aXJxPlssPHNobWVtPl1dXVssPG5hbWU+XSB8IDxuYW1lPgorCitJZiB5b3UgbG9hZCB0aGUgY2hpcHNldCBzdXBwb3J0IGFzIGEgbW9kdWxlLCB0aGUgb3B0aW9ucyBhcmU6CisgaW89PGlvPiBpcnE9PGlycT4gc2htZW09PHNobWVtPiBkZXZpY2U9PG5hbWU+CisKK1RvIGRpc2FibGUgdGhlIGF1dG9wcm9iZSwganVzdCBzcGVjaWZ5ICJjb205MHh4PSIgb24gdGhlIGtlcm5lbCBjb21tYW5kIGxpbmUuCitUbyBzcGVjaWZ5IHRoZSBuYW1lIGFsb25lLCBidXQgYWxsb3cgYXV0b3Byb2JlLCBqdXN0IHB1dCAiY29tOTB4eD08bmFtZT4iCisKKyAyLiBBUkNuZXQgQ09NMjAwMjAgY2hpcHNldC4KKworVGhpcyBpcyB0aGUgbmV3IGNoaXBzZXQgZnJvbSBTTUMgd2l0aCBzdXBwb3J0IGZvciBwcm9taXNjdW91cyBtb2RlIChwYWNrZXQgCitzbmlmZmluZyksIGV4dHJhIGRpYWdub3N0aWMgaW5mb3JtYXRpb24sIGV0Yy4gVW5mb3J0dW5hdGVseSwgdGhlcmUgaXMgbm8KK3NlbnNpYmxlIG1ldGhvZCBvZiBhdXRvcHJvYmluZyBmb3IgdGhlc2UgY2FyZHMuIFlvdSBtdXN0IHNwZWNpZnkgdGhlIEkvTworYWRkcmVzcyBvbiB0aGUga2VybmVsIGNvbW1hbmQgbGluZS4KK1RoZSBjb21tYW5kIGxpbmUgb3B0aW9ucyBhcmU6CisgY29tMjAwMjA9PGlvPlssPGlycT5bLDxub2RlX0lEPlssYmFja3BsYW5lWyxDS1BbLHRpbWVvdXRdXV1dXVssbmFtZV0KKworSWYgeW91IGxvYWQgdGhlIGNoaXBzZXQgc3VwcG9ydCBhcyBhIG1vZHVsZSwgdGhlIG9wdGlvbnMgYXJlOgorIGlvPTxpbz4gaXJxPTxpcnE+IG5vZGU9PG5vZGVfSUQ+IGJhY2twbGFuZT08YmFja3BsYW5lPiBjbG9jaz08Q0tQPgorIHRpbWVvdXQ9PHRpbWVvdXQ+IGRldmljZT08bmFtZT4KKworVGhlIENPTTIwMDIwIGNoaXBzZXQgYWxsb3dzIHlvdSB0byBzZXQgdGhlIG5vZGUgSUQgaW4gc29mdHdhcmUsIG92ZXJyaWRpbmcgdGhlCitkZWZhdWx0IHdoaWNoIGlzIHN0aWxsIHNldCBpbiBESVAgc3dpdGNoZXMgb24gdGhlIGNhcmQuIElmIHlvdSBkb24ndCBoYXZlIHRoZQorQ09NMjAwMjAgZGF0YSBzaGVldHMsIGFuZCB5b3UgZG9uJ3Qga25vdyB3aGF0IHRoZSBvdGhlciB0aHJlZSBvcHRpb25zIHJlZmVyCit0bywgdGhlbiB0aGV5IHdvbid0IGludGVyZXN0IHlvdSAtIGZvcmdldCB0aGVtLgorCisgMy4gQVJDbmV0IENPTTkweHggY2hpcHNldCBpbiBJTy1tYXBwZWQgbW9kZS4KKworVGhpcyB3aWxsIGFsc28gd29yayB3aXRoIHRoZSBub3JtYWwgQVJDbmV0IGNhcmRzLCBidXQgZG9lc24ndCB1c2UgdGhlIHNoYXJlZAorbWVtb3J5LiBJdCBwZXJmb3JtcyBsZXNzIHdlbGwgdGhhbiB0aGUgYWJvdmUgZHJpdmVyLCBidXQgaXMgcHJvdmlkZWQgaW4gY2FzZQoreW91IGhhdmUgYSBjYXJkIHdoaWNoIGRvZXNuJ3Qgc3VwcG9ydCBzaGFyZWQgbWVtb3J5LCBvciAoc3RyYW5nZWx5KSBpbiBjYXNlCit5b3UgaGF2ZSBzbyBtYW55IEFSQ25ldCBjYXJkcyBpbiB5b3VyIG1hY2hpbmUgdGhhdCB5b3UgcnVuIG91dCBvZiBzaG1lbSBzbG90cy4KK0lmIHlvdSBkb24ndCBnaXZlIHRoZSBJTyBhZGRyZXNzIG9uIHRoZSBrZXJuZWwgY29tbWFuZCBsaW5lLCB0aGVuIHRoZSBkcml2ZXIKK3dpbGwgbm90IGZpbmQgdGhlIGNhcmQuCitUaGUgY29tbWFuZCBsaW5lIG9wdGlvbnMgYXJlOgorIGNvbTkwaW89PGlvPlssPGlycT5dWyw8bmFtZT5dIAorCitJZiB5b3UgbG9hZCB0aGUgY2hpcHNldCBzdXBwb3J0IGFzIGEgbW9kdWxlLCB0aGUgb3B0aW9ucyBhcmU6CisgaW89PGlvPiBpcnE9PGlycT4gZGV2aWNlPTxuYW1lPgorCisgNC4gQVJDbmV0IFJJTSBJIGNhcmRzLgorCitUaGVzZSBhcmUgQ09NOTB4eCBjaGlwcyB3aGljaCBhcmUgX2NvbXBsZXRlbHlfIG1lbW9yeSBtYXBwZWQuIFRoZSBzdXBwb3J0IGZvcgordGhlc2UgaXMgbm90IHRlc3RlZC4gSWYgeW91IGhhdmUgb25lLCBwbGVhc2UgbWFpbCB0aGUgYXV0aG9yIHdpdGggYSBzdWNjZXNzIAorcmVwb3J0LiBBbGwgb3B0aW9ucyBtdXN0IGJlIHNwZWNpZmllZCwgZXhjZXB0IHRoZSBkZXZpY2UgbmFtZS4KK0NvbW1hbmQgbGluZSBvcHRpb25zOgorIGFyY3JpbWk9PHNobWVtPiw8aXJxPiw8bm9kZV9JRD5bLDxuYW1lPl0KKworSWYgeW91IGxvYWQgdGhlIGNoaXBzZXQgc3VwcG9ydCBhcyBhIG1vZHVsZSwgdGhlIG9wdGlvbnMgYXJlOgorIHNobWVtPTxzaG1lbT4gaXJxPTxpcnE+IG5vZGU9PG5vZGVfSUQ+IGRldmljZT08bmFtZT4KKworCitMb2FkYWJsZSBNb2R1bGUgU3VwcG9ydAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQ29uZmlndXJlIGFuZCByZWJ1aWxkIExpbnV4LiAgV2hlbiBhc2tlZCwgYW5zd2VyICdtJyB0byAiR2VuZXJpYyBBUkNuZXQgCitzdXBwb3J0IiBhbmQgdG8gc3VwcG9ydCBmb3IgeW91ciBBUkNuZXQgY2hpcHNldCBpZiB5b3Ugd2FudCB0byB1c2UgdGhlCitsb2FkYWJsZSBtb2R1bGUuIFlvdSBjYW4gYWxzbyBzYXkgJ3knIHRvICJHZW5lcmljIEFSQ25ldCBzdXBwb3J0IiBhbmQgJ20nIAordG8gdGhlIGNoaXBzZXQgc3VwcG9ydCBpZiB5b3Ugd2lzaC4KKworCW1ha2UgY29uZmlnCisJbWFrZSBjbGVhbgkKKwltYWtlIHpJbWFnZQorCW1ha2UgbW9kdWxlcworCQorSWYgeW91J3JlIHVzaW5nIGEgbG9hZGFibGUgbW9kdWxlLCB5b3UgbmVlZCB0byB1c2UgaW5zbW9kIHRvIGxvYWQgaXQsIGFuZAoreW91IGNhbiBzcGVjaWZ5IHZhcmlvdXMgY2hhcmFjdGVyaXN0aWNzIG9mIHlvdXIgY2FyZCBvbiB0aGUgY29tbWFuZAorbGluZS4gIChJbiByZWNlbnQgdmVyc2lvbnMgb2YgdGhlIGRyaXZlciwgYXV0b3Byb2JpbmcgaXMgbXVjaCBtb3JlIHJlbGlhYmxlCithbmQgd29ya3MgYXMgYSBtb2R1bGUsIHNvIG1vc3Qgb2YgdGhpcyBpcyBub3cgdW5uZWNlc3NhcnkuKQorCitGb3IgZXhhbXBsZToKKwljZCAvdXNyL3NyYy9saW51eC9tb2R1bGVzCisJaW5zbW9kIGFyY25ldC5vCisJaW5zbW9kIGNvbTkweHgubworCWluc21vZCBjb20yMDAyMC5vIGlvPTB4MmUwIGRldmljZT1ldGgxCisJCisKK1VzaW5nIHRoZSBEcml2ZXIKKy0tLS0tLS0tLS0tLS0tLS0KKworSWYgeW91IGJ1aWxkIHlvdXIga2VybmVsIHdpdGggQVJDbmV0IENPTTkweHggc3VwcG9ydCBpbmNsdWRlZCwgaXQgc2hvdWxkIAorcHJvYmUgZm9yIHlvdXIgY2FyZCBhdXRvbWF0aWNhbGx5IHdoZW4geW91IGJvb3QuIElmIHlvdSB1c2UgYSBkaWZmZXJlbnQKK2NoaXBzZXQgZHJpdmVyIGNvbXBsaWVkIGludG8gdGhlIGtlcm5lbCwgeW91IG11c3QgZ2l2ZSB0aGUgbmVjZXNzYXJ5IG9wdGlvbnMKK29uIHRoZSBrZXJuZWwgY29tbWFuZCBsaW5lLCBhcyBkZXRhaWxlZCBhYm92ZS4KKworR28gcmVhZCB0aGUgTkVULTItSE9XVE8gYW5kIEVUSEVSTkVULUhPV1RPIGZvciBMaW51eDsgdGhleSBzaG91bGQgYmUKK2F2YWlsYWJsZSB3aGVyZSB5b3UgcGlja2VkIHVwIHRoaXMgZHJpdmVyLiAgVGhpbmsgb2YgeW91ciBBUkNuZXQgYXMgYQorc291cGVkLXVwIChvciBkb3duLCBhcyB0aGUgY2FzZSBtYXkgYmUpIEV0aGVybmV0IGNhcmQuCisKK0J5IHRoZSB3YXksIGJlIHN1cmUgdG8gY2hhbmdlIGFsbCByZWZlcmVuY2VzIGZyb20gImV0aDAiIHRvICJhcmMwIiBpbiB0aGUKK0hPV1RPcy4gIFJlbWVtYmVyIHRoYXQgQVJDbmV0IGlzbid0IGEgInRydWUiIEV0aGVybmV0LCBhbmQgdGhlIGRldmljZSBuYW1lCitpcyBESUZGRVJFTlQuCisKKworTXVsdGlwbGUgQ2FyZHMgaW4gT25lIENvbXB1dGVyCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworTGludXggaGFzIHByZXR0eSBnb29kIHN1cHBvcnQgZm9yIHRoaXMgbm93LCBidXQgc2luY2UgSSd2ZSBiZWVuIGJ1c3ksIHRoZQorQVJDbmV0IGRyaXZlciBoYXMgc29tZXdoYXQgc3VmZmVyZWQgaW4gdGhpcyByZXNwZWN0LiBDT005MHh4IHN1cHBvcnQsIGlmIAorY29tcGlsZWQgaW50byB0aGUga2VybmVsLCB3aWxsICh0cnkgdG8pIGF1dG9kZXRlY3QgYWxsIHRoZSBpbnN0YWxsZWQgY2FyZHMuIAorCitJZiB5b3UgaGF2ZSBvdGhlciBjYXJkcywgd2l0aCBzdXBwb3J0IGNvbXBpbGVkIGludG8gdGhlIGtlcm5lbCwgdGhlbiB5b3UgY2FuIAoranVzdCByZXBlYXQgdGhlIG9wdGlvbnMgb24gdGhlIGtlcm5lbCBjb21tYW5kIGxpbmUsIGUuZy46CitMSUxPOiBsaW51eCBjb20yMDAyMD0weDJlMCBjb20yMDAyMD0weDM4MCBjb205MGlvPTB4MjYwCisKK0lmIHlvdSBoYXZlIHRoZSBjaGlwc2V0IHN1cHBvcnQgYnVpbHQgYXMgYSBsb2FkYWJsZSBtb2R1bGUsIHRoZW4geW91IG5lZWQgdG8gCitkbyBzb21ldGhpbmcgbGlrZSB0aGlzOgorCWluc21vZCAtbyBhcmMwIGNvbTkweHgKKwlpbnNtb2QgLW8gYXJjMSBjb20yMDAyMCBpbz0weDJlMAorCWluc21vZCAtbyBhcmMyIGNvbTkweHgKK1RoZSBBUkNuZXQgZHJpdmVycyB3aWxsIG5vdyBzb3J0IG91dCB0aGVpciBuYW1lcyBhdXRvbWF0aWNhbGx5LgorCisKK0hvdyBkbyBJIGdldCBpdCB0byB3b3JrIHdpdGguLi4/CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitORlM6IFNob3VsZCBiZSBmaW5lIGxpbnV4LT5saW51eCwganVzdCBwcmV0ZW5kIHlvdSdyZSB1c2luZyBFdGhlcm5ldCBjYXJkcy4gCisgICAgICAgIG9hay5vYWtsYW5kLmVkdTovc2ltdGVsL21zZG9zL25mcyBoYXMgc29tZSBuaWNlIERPUyBjbGllbnRzLiAgVGhlcmUKKyAgICAgICAgaXMgYWxzbyBhIERPUy1iYXNlZCBORlMgc2VydmVyIGNhbGxlZCBTT1NTLiAgSXQgZG9lc24ndCBtdWx0aXRhc2sKKyAgICAgICAgcXVpdGUgdGhlIHdheSBMaW51eCBkb2VzIChhY3R1YWxseSwgaXQgZG9lc24ndCBtdWx0aXRhc2sgQVQgQUxMKSBidXQKKyAgICAgICAgeW91IG5ldmVyIGtub3cgd2hhdCB5b3UgbWlnaHQgbmVlZC4KKyAgICAgICAgCisgICAgICAgIFdpdGggQW1pVENQIChhbmQgcG9zc2libHkgb3RoZXJzKSwgeW91IG1heSBuZWVkIHRvIHNldCB0aGUgZm9sbG93aW5nCisgICAgICAgIG9wdGlvbnMgaW4geW91ciBBbWlnYSBuZnN0YWI6ICBNRCAxMDI0IE1SIDEwMjQgTVcgMTAyNAorICAgICAgICAoVGhhbmtzIHRvIENocmlzdGlhbiBHb3R0c2NobGluZyA8ZmVya3N5QGluZGlnby50bmcub2NoZS5kZT4KKwlmb3IgdGhpcy4pCisJCisJUHJvYmFibHkgdGhlc2UgcmVmZXIgdG8gbWF4aW11bSBORlMgZGF0YS9yZWFkL3dyaXRlIGJsb2NrIHNpemVzLiAgSQorCWRvbid0IGtub3cgd2h5IHRoZSBkZWZhdWx0cyBvbiB0aGUgQW1pZ2EgZGlkbid0IHdvcms7IHdyaXRlIHRvIG1lIGlmCisJeW91IGtub3cgbW9yZS4KKworRE9TOiBJZiB5b3UncmUgdXNpbmcgdGhlIGZyZWV3YXJlIGFyY2V0aGVyLmNvbSwgeW91IG1pZ2h0IHdhbnQgdG8gaW5zdGFsbAorICAgICAgICB0aGUgZHJpdmVyIHBhdGNoIGZyb20gbXkgd2ViIHBhZ2UuICBJdCBoZWxwcyB3aXRoIFBDL1RDUCwgYW5kIGFsc28KKyAgICAgICAgY2FuIGdldCBhcmNldGhlciB0byBsb2FkIGlmIGl0IHRpbWVkIG91dCB0b28gcXVpY2tseSBkdXJpbmcKKyAgICAgICAgaW5pdGlhbGl6YXRpb24uICBJbiBmYWN0LCBpZiB5b3UgdXNlIGl0IG9uIGEgMzg2KyB5b3UgUkVBTExZIG5lZWQKKyAgICAgICAgdGhlIHBhdGNoLCByZWFsbHkuCisJCitXaW5kb3dzOiAgU2VlIERPUyA6KSAgVHJ1bXBldCBXaW5zb2NrIHdvcmtzIGZpbmUgd2l0aCBlaXRoZXIgdGhlIE5vdmVsbCBvcgorCUFyY2V0aGVyIGNsaWVudCwgYXNzdW1pbmcgeW91IHJlbWVtYmVyIHRvIGxvYWQgd2lucGt0IG9mIGNvdXJzZS4KKworTEFOIE1hbmFnZXIgYW5kIFdpbmRvd3MgZm9yIFdvcmtncm91cHM6IFRoZXNlIHByb2dyYW1zIHVzZSBwcm90b2NvbHMgdGhhdAorICAgICAgICBhcmUgaW5jb21wYXRpYmxlIHdpdGggdGhlIEludGVybmV0IHN0YW5kYXJkLiAgVGhleSB0cnkgdG8gcHJldGVuZAorICAgICAgICB0aGUgY2FyZHMgYXJlIEV0aGVybmV0LCBhbmQgY29uZnVzZSBldmVyeW9uZSBlbHNlIG9uIHRoZSBuZXR3b3JrLiAKKyAgICAgICAgCisgICAgICAgIEhvd2V2ZXIsIHYyLjAwIGFuZCBoaWdoZXIgb2YgdGhlIExpbnV4IEFSQ25ldCBkcml2ZXIgc3VwcG9ydHMgdGhpcworICAgICAgICBwcm90b2NvbCB2aWEgdGhlICdhcmMwZScgZGV2aWNlLiAgU2VlIHRoZSBzZWN0aW9uIG9uICJNdWx0aXByb3RvY29sCisgICAgICAgIFN1cHBvcnQiIGZvciBtb3JlIGluZm9ybWF0aW9uLgorCisJVXNpbmcgdGhlIGZyZWV3YXJlIFNhbWJhIHNlcnZlciBhbmQgY2xpZW50cyBmb3IgTGludXgsIHlvdSBjYW4gbm93CisJaW50ZXJmYWNlIHF1aXRlIG5pY2VseSB3aXRoIFRDUC9JUC1iYXNlZCBXZldnIG9yIExhbiBNYW5hZ2VyCisJbmV0d29ya3MuCisJCitXaW5kb3dzIDk1OiBUb29scyBhcmUgaW5jbHVkZWQgd2l0aCBXaW45NSB0aGF0IGxldCB5b3UgdXNlIGVpdGhlciB0aGUgTEFOTUFOCisJc3R5bGUgbmV0d29yayBkcml2ZXJzIChORElTKSBvciBOb3ZlbGwgZHJpdmVycyAoT0RJKSB0byBoYW5kbGUgeW91cgorCUFSQ25ldCBwYWNrZXRzLiAgSWYgeW91IHVzZSBPREksIHlvdSdsbCBuZWVkIHRvIHVzZSB0aGUgJ2FyYzAnCisJZGV2aWNlIHdpdGggTGludXguICBJZiB5b3UgdXNlIE5ESVMsIHRoZW4gdHJ5IHRoZSAnYXJjMGUnIGRldmljZS4gCisJU2VlIHRoZSAiTXVsdGlwcm90b2NvbCBTdXBwb3J0IiBzZWN0aW9uIGJlbG93IGlmIHlvdSBuZWVkIGFyYzBlLAorCXlvdSdyZSBjb21wbGV0ZWx5IGluc2FuZSwgYW5kL29yIHlvdSBuZWVkIHRvIGJ1aWxkIHNvbWUga2luZCBvZgorCWh5YnJpZCBuZXR3b3JrIHRoYXQgdXNlcyBib3RoIGVuY2Fwc3VsYXRpb24gdHlwZXMuCisKK09TLzI6IEkndmUgYmVlbiB0b2xkIGl0IHdvcmtzIHVuZGVyIFdhcnAgQ29ubmVjdCB3aXRoIGFuIEFSQ25ldCBkcml2ZXIgZnJvbQorCVNNQy4gIFlvdSBuZWVkIHRvIHVzZSB0aGUgJ2FyYzBlJyBpbnRlcmZhY2UgZm9yIHRoaXMuICBJZiB5b3UgZ2V0CisJdGhlIFNNQyBkcml2ZXIgdG8gd29yayB3aXRoIHRoZSBUQ1AvSVAgc3R1ZmYgaW5jbHVkZWQgaW4gdGhlCisJIm5vcm1hbCIgV2FycCBCb251cyBQYWNrLCBsZXQgbWUga25vdy4KKworCWZ0cC5taWNyb3NvZnQuY29tIGFsc28gaGFzIGEgZnJlZXdhcmUgIkxhbiBNYW5hZ2VyIGZvciBPUy8yIiBjbGllbnQKKwl3aGljaCBzaG91bGQgdXNlIHRoZSBzYW1lIHByb3RvY29sIGFzIFdmV2cgZG9lcy4gIEkgaGFkIG5vIGx1Y2sKKwlpbnN0YWxsaW5nIGl0IHVuZGVyIFdhcnAsIGhvd2V2ZXIuICBQbGVhc2UgbWFpbCBtZSB3aXRoIGFueSByZXN1bHRzLgorCitOZXRCU0QvQW1pVENQOiBUaGVzZSB1c2UgYW4gb2xkIHZlcnNpb24gb2YgdGhlIEludGVybmV0IHN0YW5kYXJkIEFSQ25ldAorCXByb3RvY29sIChSRkMxMDUxKSB3aGljaCBpcyBjb21wYXRpYmxlIHdpdGggdGhlIExpbnV4IGRyaXZlciB2Mi4xMAorCUFMUEhBIGFuZCBhYm92ZSB1c2luZyB0aGUgYXJjMHMgZGV2aWNlLiAoU2VlICJNdWx0aXByb3RvY29sIEFSQ25ldCIKKwliZWxvdy4pICAqKiBOZXdlciB2ZXJzaW9ucyBvZiBOZXRCU0QgYXBwYXJlbnRseSBzdXBwb3J0IFJGQzEyMDEuCisKKworVXNpbmcgTXVsdGlwcm90b2NvbCBBUkNuZXQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZSBBUkNuZXQgZHJpdmVyIHYyLjEwIEFMUEhBIHN1cHBvcnRzIHRocmVlIHByb3RvY29scywgZWFjaCBvbiBpdHMgb3duCisidmlydHVhbCBuZXR3b3JrIGRldmljZSI6CisKKwlhcmMwICAtIFJGQzEyMDEgcHJvdG9jb2wsIHRoZSBvZmZpY2lhbCBJbnRlcm5ldCBzdGFuZGFyZCB3aGljaCBqdXN0CisJCWhhcHBlbnMgdG8gYmUgMTAwJSBjb21wYXRpYmxlIHdpdGggTm92ZWxsJ3MgVFJYTkVUIGRyaXZlci4gCisJCVZlcnNpb24gMS4wMCBvZiB0aGUgQVJDbmV0IGRyaXZlciBzdXBwb3J0ZWQgX29ubHlfIHRoaXMKKwkJcHJvdG9jb2wuICBhcmMwIGlzIHRoZSBmYXN0ZXN0IG9mIHRoZSB0aHJlZSBwcm90b2NvbHMgKGZvcgorCQl3aGF0ZXZlciByZWFzb24pLCBhbmQgYWxsb3dzIGxhcmdlciBwYWNrZXRzIHRvIGJlIHVzZWQKKwkJYmVjYXVzZSBpdCBzdXBwb3J0cyBSRkMxMjAxICJwYWNrZXQgc3BsaXR0aW5nIiBvcGVyYXRpb25zLiAKKwkJVW5sZXNzIHlvdSBoYXZlIGEgc3BlY2lmaWMgbmVlZCB0byB1c2UgYSBkaWZmZXJlbnQgcHJvdG9jb2wsCisJCUkgc3Ryb25nbHkgc3VnZ2VzdCB0aGF0IHlvdSBzdGljayB3aXRoIHRoaXMgb25lLgorCQkKKwlhcmMwZSAtICJFdGhlcm5ldC1FbmNhcHN1bGF0aW9uIiB3aGljaCBzZW5kcyBwYWNrZXRzIG92ZXIgQVJDbmV0CisJCXRoYXQgYXJlIGFjdHVhbGx5IGEgbG90IGxpa2UgRXRoZXJuZXQgcGFja2V0cywgaW5jbHVkaW5nIHRoZQorCQk2LWJ5dGUgaGFyZHdhcmUgYWRkcmVzc2VzLiAgVGhpcyBwcm90b2NvbCBpcyBjb21wYXRpYmxlIHdpdGgKKwkJTWljcm9zb2Z0J3MgTkRJUyBBUkNuZXQgZHJpdmVyLCBsaWtlIHRoZSBvbmUgaW4gV2ZXZyBhbmQKKwkJTEFOTUFOLiAgQmVjYXVzZSB0aGUgTVRVIG9mIDQ5MyBpcyBhY3R1YWxseSBzbWFsbGVyIHRoYW4gdGhlCisJCW9uZSAicmVxdWlyZWQiIGJ5IFRDUC9JUCAoNTc2KSwgdGhlcmUgaXMgYSBjaGFuY2UgdGhhdCBzb21lCisJCW5ldHdvcmsgb3BlcmF0aW9ucyB3aWxsIG5vdCBmdW5jdGlvbiBwcm9wZXJseS4gIFRoZSBMaW51eAorCQlUQ1AvSVAgbGF5ZXIgY2FuIGNvbXBlbnNhdGUgaW4gbW9zdCBjYXNlcywgaG93ZXZlciwgYnkKKwkJYXV0b21hdGljYWxseSBmcmFnbWVudGluZyB0aGUgVENQL0lQIHBhY2tldHMgdG8gbWFrZSB0aGVtCisJCWZpdC4gIGFyYzBlIGFsc28gd29ya3Mgc2xpZ2h0bHkgbW9yZSBzbG93bHkgdGhhbiBhcmMwLCBmb3IKKwkJcmVhc29ucyB5ZXQgdG8gYmUgZGV0ZXJtaW5lZC4gIChQcm9iYWJseSBpdCdzIHRoZSBzbWFsbGVyCisJCU1UVSB0aGF0IGRvZXMgaXQuKQorCQkKKwlhcmMwcyAtIFRoZSAiW3NdaW1wbGUiIFJGQzEwNTEgcHJvdG9jb2wgaXMgdGhlICJwcmV2aW91cyIgSW50ZXJuZXQKKwkJc3RhbmRhcmQgdGhhdCBpcyBjb21wbGV0ZWx5IGluY29tcGF0aWJsZSB3aXRoIHRoZSBuZXcKKwkJc3RhbmRhcmQuICBTb21lIHNvZnR3YXJlIHRvZGF5LCBob3dldmVyLCBjb250aW51ZXMgdG8KKwkJc3VwcG9ydCB0aGUgb2xkIHN0YW5kYXJkIChhbmQgb25seSB0aGUgb2xkIHN0YW5kYXJkKQorCQlpbmNsdWRpbmcgTmV0QlNEIGFuZCBBbWlUQ1AuICBSRkMxMDUxIGFsc28gZG9lcyBub3Qgc3VwcG9ydAorCQlSRkMxMjAxJ3MgcGFja2V0IHNwbGl0dGluZywgYW5kIHRoZSBNVFUgb2YgNTA3IGlzIHN0aWxsCisJCXNtYWxsZXIgdGhhbiB0aGUgSW50ZXJuZXQgInJlcXVpcmVtZW50LCIgc28gaXQncyBxdWl0ZQorCQlwb3NzaWJsZSB0aGF0IHlvdSBtYXkgcnVuIGludG8gcHJvYmxlbXMuICBJdCdzIGFsc28gc2xvd2VyCisJCXRoYW4gUkZDMTIwMSBieSBhYm91dCAyNSUsIGZvciB0aGUgc2FtZSByZWFzb24gYXMgYXJjMGUuCisJCQorCQlUaGUgYXJjMHMgc3VwcG9ydCB3YXMgY29udHJpYnV0ZWQgYnkgVG9tYXN6IE1vdHlsZXdza2kKKwkJYW5kIG1vZGlmaWVkIHNvbWV3aGF0IGJ5IG1lLiAgQnVncyBhcmUgcHJvYmFibHkgbXkgZmF1bHQuCisKK1lvdSBjYW4gY2hvb3NlIG5vdCB0byBjb21waWxlIGFyYzBlIGFuZCBhcmMwcyBpbnRvIHRoZSBkcml2ZXIgaWYgeW91IHdhbnQgLQordGhpcyB3aWxsIHNhdmUgeW91IGEgYml0IG9mIG1lbW9yeSBhbmQgYXZvaWQgY29uZnVzaW9uIHdoZW4gZWcuIHRyeWluZyB0bwordXNlIHRoZSAiTkZTLXJvb3QiIHN0dWZmIGluIHJlY2VudCBMaW51eCBrZXJuZWxzLgorCitUaGUgYXJjMGUgYW5kIGFyYzBzIGRldmljZXMgYXJlIGNyZWF0ZWQgYXV0b21hdGljYWxseSB3aGVuIHlvdSBmaXJzdAoraWZjb25maWcgdGhlIGFyYzAgZGV2aWNlLiAgVG8gYWN0dWFsbHkgdXNlIHRoZW0sIHRob3VnaCwgeW91IG5lZWQgdG8gYWxzbworaWZjb25maWcgdGhlIG90aGVyIHZpcnR1YWwgZGV2aWNlcyB5b3UgbmVlZC4gIFRoZXJlIGFyZSBhIG51bWJlciBvZiB3YXlzIHlvdQorY2FuIHNldCB1cCB5b3VyIG5ldHdvcmsgdGhlbjoKKworCisxLiBTaW5nbGUgUHJvdG9jb2wuCisKKyAgIFRoaXMgaXMgdGhlIHNpbXBsZXN0IHdheSB0byBjb25maWd1cmUgeW91ciBuZXR3b3JrOiB1c2UganVzdCBvbmUgb2YgdGhlCisgICB0d28gYXZhaWxhYmxlIHByb3RvY29scy4gIEFzIG1lbnRpb25lZCBhYm92ZSwgaXQncyBhIGdvb2QgaWRlYSB0byB1c2UKKyAgIG9ubHkgYXJjMCB1bmxlc3MgeW91IGhhdmUgYSBnb29kIHJlYXNvbiAobGlrZSBzb21lIG90aGVyIHNvZnR3YXJlLCBpZS4KKyAgIFdmV2csIHRoYXQgb25seSB3b3JrcyB3aXRoIGFyYzBlKS4KKyAgIAorICAgSWYgeW91IG5lZWQgb25seSBhcmMwLCB0aGVuIHRoZSBmb2xsb3dpbmcgY29tbWFuZHMgc2hvdWxkIGdldCB5b3UgZ29pbmc6CisgICAJaWZjb25maWcgYXJjMCBNWS5JUC5BREQuUkVTUworICAgCXJvdXRlIGFkZCBNWS5JUC5BREQuUkVTUyBhcmMwCisgICAJcm91dGUgYWRkIC1uZXQgU1VCLk5FVC5BREQuUkVTUyBhcmMwCisgICAJW2FkZCBvdGhlciBsb2NhbCByb3V0ZXMgaGVyZV0KKyAgIAkKKyAgIElmIHlvdSBuZWVkIGFyYzBlIChhbmQgb25seSBhcmMwZSksIGl0J3MgYSBsaXR0bGUgZGlmZmVyZW50OgorICAgCWlmY29uZmlnIGFyYzAgTVkuSVAuQURELlJFU1MKKyAgIAlpZmNvbmZpZyBhcmMwZSBNWS5JUC5BREQuUkVTUworICAgCXJvdXRlIGFkZCBNWS5JUC5BREQuUkVTUyBhcmMwZQorICAgCXJvdXRlIGFkZCAtbmV0IFNVQi5ORVQuQURELlJFU1MgYXJjMGUKKyAgIAorICAgYXJjMHMgd29ya3MgbXVjaCB0aGUgc2FtZSB3YXkgYXMgYXJjMGUuCisKKworMi4gTW9yZSB0aGFuIG9uZSBwcm90b2NvbCBvbiB0aGUgc2FtZSB3aXJlLgorCisgICBOb3cgdGhpbmdzIHN0YXJ0IGdldHRpbmcgY29uZnVzaW5nLiAgVG8gZXZlbiB0cnkgaXQsIHlvdSBtYXkgbmVlZCB0byBiZQorICAgcGFydGx5IGNyYXp5LiAgSGVyZSdzIHdoYXQgKkkqIGRpZC4gOikgTm90ZSB0aGF0IEkgZG9uJ3QgaW5jbHVkZSBhcmMwcyBpbgorICAgbXkgaG9tZSBuZXR3b3JrOyBJIGRvbid0IGhhdmUgYW55IE5ldEJTRCBvciBBbWlUQ1AgY29tcHV0ZXJzLCBzbyBJIG9ubHkKKyAgIHVzZSBhcmMwcyBkdXJpbmcgbGltaXRlZCB0ZXN0aW5nLgorCisgICBJIGhhdmUgdGhyZWUgY29tcHV0ZXJzIG9uIG15IGhvbWUgbmV0d29yazsgdHdvIExpbnV4IGJveGVzICh3aGljaCBwcmVmZXIKKyAgIFJGQzEyMDEgcHJvdG9jb2wsIGZvciByZWFzb25zIGxpc3RlZCBhYm92ZSksIGFuZCBvbmUgWFQgdGhhdCBjYW4ndCBydW4KKyAgIExpbnV4IGJ1dCBydW5zIHRoZSBmcmVlIE1pY3Jvc29mdCBMQU5NQU4gQ2xpZW50IGluc3RlYWQuCisKKyAgIFdvcnNlLCBvbmUgb2YgdGhlIExpbnV4IGNvbXB1dGVycyAoZnJlZWRvbSkgYWxzbyBoYXMgYSBtb2RlbSBhbmQgYWN0cyBhcworICAgYSByb3V0ZXIgdG8gbXkgSW50ZXJuZXQgcHJvdmlkZXIuICBUaGUgb3RoZXIgTGludXggYm94IChpbnNpZ2h0KSBhbHNvIGhhcworICAgaXRzIG93biBJUCBhZGRyZXNzIGFuZCBuZWVkcyB0byB1c2UgZnJlZWRvbSBhcyBpdHMgZGVmYXVsdCBnYXRld2F5LiAgVGhlCisgICBYVCAocGF0aWVuY2UpLCBob3dldmVyLCBkb2VzIG5vdCBoYXZlIGl0cyBvd24gSW50ZXJuZXQgSVAgYWRkcmVzcyBhbmQgc28KKyAgIEkgYXNzaWduZWQgaXQgb25lIG9uIGEgInByaXZhdGUgc3VibmV0IiAoYXMgZGVmaW5lZCBieSBSRkMxNTk3KS4KKworICAgVG8gc3RhcnQgd2l0aCwgdGFrZSBhIHNpbXBsZSBuZXR3b3JrIHdpdGgganVzdCBpbnNpZ2h0IGFuZCBmcmVlZG9tLiAKKyAgIEluc2lnaHQgbmVlZHMgdG86CisgICAJLSB0YWxrIHRvIGZyZWVkb20gdmlhIFJGQzEyMDEgKGFyYzApIHByb3RvY29sLCBiZWNhdXNlIEkgbGlrZSBpdAorCSAgbW9yZSBhbmQgaXQncyBmYXN0ZXIuCisJLSB1c2UgZnJlZWRvbSBhcyBpdHMgSW50ZXJuZXQgZ2F0ZXdheS4KKwkKKyAgIFRoYXQncyBwcmV0dHkgZWFzeSB0byBkby4gIFNldCB1cCBpbnNpZ2h0IGxpa2UgdGhpczoKKyAgIAlpZmNvbmZpZyBhcmMwIGluc2lnaHQKKyAgIAlyb3V0ZSBhZGQgaW5zaWdodCBhcmMwCisgICAJcm91dGUgYWRkIGZyZWVkb20gYXJjMAkvKiBJIHdvdWxkIHVzZSB0aGUgc3VibmV0IGhlcmUgKGxpa2UgSSBzYWlkCisJCQkJCXRvIHRvIGluICJzaW5nbGUgcHJvdG9jb2wiIGFib3ZlKSwKKyAgIAkJCQkJYnV0IHRoZSByZXN0IG9mIHRoZSBzdWJuZXQKKyAgIAkJCQkJdW5mb3J0dW5hdGVseSBsaWVzIGFjcm9zcyB0aGUgUFBQCisgICAJCQkJCWxpbmsgb24gZnJlZWRvbSwgd2hpY2ggY29uZnVzZXMKKyAgIAkJCQkJdGhpbmdzLiAqLworICAgCXJvdXRlIGFkZCBkZWZhdWx0IGd3IGZyZWVkb20KKyAgIAkKKyAgIEFuZCBmcmVlZG9tIGdldHMgY29uZmlndXJlZCBsaWtlIHNvOgorICAgCWlmY29uZmlnIGFyYzAgZnJlZWRvbQorICAgCXJvdXRlIGFkZCBmcmVlZG9tIGFyYzAKKyAgIAlyb3V0ZSBhZGQgaW5zaWdodCBhcmMwCisgICAJLyogYW5kIGRlZmF1bHQgZ2F0ZXdheSBpcyBjb25maWd1cmVkIGJ5IHBwcGQgKi8KKyAgIAkKKyAgIEdyZWF0LCBub3cgaW5zaWdodCB0YWxrcyB0byBmcmVlZG9tIGRpcmVjdGx5IG9uIGFyYzAsIGFuZCBzZW5kcyBwYWNrZXRzCisgICB0byB0aGUgSW50ZXJuZXQgdGhyb3VnaCBmcmVlZG9tLiAgSWYgeW91IGRpZG4ndCBrbm93IGhvdyB0byBkbyB0aGUgYWJvdmUsCisgICB5b3Ugc2hvdWxkIHByb2JhYmx5IHN0b3AgcmVhZGluZyB0aGlzIHNlY3Rpb24gbm93IGJlY2F1c2UgaXQgb25seSBnZXRzCisgICB3b3JzZS4KKworICAgTm93LCBob3cgZG8gSSBhZGQgcGF0aWVuY2UgaW50byB0aGUgbmV0d29yaz8gIEl0IHdpbGwgYmUgdXNpbmcgTEFOTUFOCisgICBDbGllbnQsIHdoaWNoIG1lYW5zIEkgbmVlZCB0aGUgYXJjMGUgZGV2aWNlLiAgSXQgbmVlZHMgdG8gYmUgYWJsZSB0byB0YWxrCisgICB0byBib3RoIGluc2lnaHQgYW5kIGZyZWVkb20sIGFuZCBhbHNvIHVzZSBmcmVlZG9tIGFzIGEgZ2F0ZXdheSB0byB0aGUKKyAgIEludGVybmV0LiAgKFJlY2FsbCB0aGF0IHBhdGllbmNlIGhhcyBhICJwcml2YXRlIElQIGFkZHJlc3MiIHdoaWNoIHdvbid0CisgICB3b3JrIG9uIHRoZSBJbnRlcm5ldDsgdGhhdCdzIG9rYXksIEkgY29uZmlndXJlZCBMaW51eCBJUCBtYXNxdWVyYWRpbmcgb24KKyAgIGZyZWVkb20gZm9yIHRoaXMgc3VibmV0KS4KKyAgIAorICAgU28gcGF0aWVuY2UgKG5lY2Vzc2FyaWx5OyBJIGRvbid0IGhhdmUgYW5vdGhlciBJUCBudW1iZXIgZnJvbSBteQorICAgcHJvdmlkZXIpIGhhcyBhbiBJUCBhZGRyZXNzIG9uIGEgZGlmZmVyZW50IHN1Ym5ldCB0aGFuIGZyZWVkb20gYW5kCisgICBpbnNpZ2h0LCBidXQgbmVlZHMgdG8gdXNlIGZyZWVkb20gYXMgYW4gSW50ZXJuZXQgZ2F0ZXdheS4gIFdvcnNlLCBtb3N0CisgICBET1MgbmV0d29ya2luZyBwcm9ncmFtcywgaW5jbHVkaW5nIExBTk1BTiwgaGF2ZSBicmFpbmRlYWQgbmV0d29ya2luZworICAgc2NoZW1lcyB0aGF0IHJlbHkgY29tcGxldGVseSBvbiB0aGUgbmV0bWFzayBhbmQgYSAnZGVmYXVsdCBnYXRld2F5JyB0bworICAgZGV0ZXJtaW5lIGhvdyB0byByb3V0ZSBwYWNrZXRzLiAgVGhpcyBtZWFucyB0aGF0IHRvIGdldCB0byBmcmVlZG9tIG9yCisgICBpbnNpZ2h0LCBwYXRpZW5jZSBXSUxMIHNlbmQgdGhyb3VnaCBpdHMgZGVmYXVsdCBnYXRld2F5LCByZWdhcmRsZXNzIG9mCisgICB0aGUgZmFjdCB0aGF0IGJvdGggZnJlZWRvbSBhbmQgaW5zaWdodCAoY291cnRlc3kgb2YgdGhlIGFyYzBlIGRldmljZSkKKyAgIGNvdWxkIHVuZGVyc3RhbmQgYSBkaXJlY3QgdHJhbnNtaXNzaW9uLgorICAgCisgICBJIGNvbXBlbnNhdGUgYnkgZ2l2aW5nIGZyZWVkb20gYW4gZXh0cmEgSVAgYWRkcmVzcyAtIGFsaWFzZWQgJ2dhdGVrZWVwZXInCisgICAtIHRoYXQgaXMgb24gbXkgcHJpdmF0ZSBzdWJuZXQsIHRoZSBzYW1lIHN1Ym5ldCB0aGF0IHBhdGllbmNlIGlzIG9uLiAgSQorICAgdGhlbiBkZWZpbmUgZ2F0ZWtlZXBlciB0byBiZSB0aGUgZGVmYXVsdCBnYXRld2F5IGZvciBwYXRpZW5jZS4KKyAgIAorICAgVG8gY29uZmlndXJlIGZyZWVkb20gKGluIGFkZGl0aW9uIHRvIHRoZSBjb21tYW5kcyBhYm92ZSk6CisgICAJaWZjb25maWcgYXJjMGUgZ2F0ZWtlZXBlcgorICAgCXJvdXRlIGFkZCBnYXRla2VlcGVyIGFyYzBlCisgICAJcm91dGUgYWRkIHBhdGllbmNlIGFyYzBlCisgICAKKyAgIFRoaXMgd2F5LCBmcmVlZG9tIHdpbGwgc2VuZCBhbGwgcGFja2V0cyBmb3IgcGF0aWVuY2UgdGhyb3VnaCBhcmMwZSwKKyAgIGdpdmluZyBpdHMgSVAgYWRkcmVzcyBhcyBnYXRla2VlcGVyIChvbiB0aGUgcHJpdmF0ZSBzdWJuZXQpLiAgV2hlbiBpdAorICAgdGFsa3MgdG8gaW5zaWdodCBvciB0aGUgSW50ZXJuZXQsIGl0IHdpbGwgdXNlIGl0cyAiZnJlZWRvbSIgSW50ZXJuZXQgSVAKKyAgIGFkZHJlc3MuCisgICAKKyAgIFlvdSB3aWxsIG5vdGljZSB0aGF0IHdlIGhhdmVuJ3QgY29uZmlndXJlZCB0aGUgYXJjMGUgZGV2aWNlIG9uIGluc2lnaHQuIAorICAgVGhpcyB3b3VsZCB3b3JrLCBidXQgaXMgbm90IHJlYWxseSBuZWNlc3NhcnksIGFuZCB3b3VsZCByZXF1aXJlIG1lIHRvCisgICBhc3NpZ24gaW5zaWdodCBhbm90aGVyIHNwZWNpYWwgSVAgbnVtYmVyIGZyb20gbXkgcHJpdmF0ZSBzdWJuZXQuICBTaW5jZQorICAgYm90aCBpbnNpZ2h0IGFuZCBwYXRpZW5jZSBhcmUgdXNpbmcgZnJlZWRvbSBhcyB0aGVpciBkZWZhdWx0IGdhdGV3YXksIHRoZQorICAgdHdvIGNhbiBhbHJlYWR5IHRhbGsgdG8gZWFjaCBvdGhlci4KKyAgIAorICAgSXQncyBxdWl0ZSBmb3J0dW5hdGUgdGhhdCBJIHNldCB0aGluZ3MgdXAgbGlrZSB0aGlzIHRoZSBmaXJzdCB0aW1lIChjb3VnaAorICAgY291Z2gpIGJlY2F1c2UgaXQncyByZWFsbHkgaGFuZHkgd2hlbiBJIGJvb3QgaW5zaWdodCBpbnRvIERPUy4gIFRoZXJlLCBpdAorICAgcnVucyB0aGUgTm92ZWxsIE9ESSBwcm90b2NvbCBzdGFjaywgd2hpY2ggb25seSB3b3JrcyB3aXRoIFJGQzEyMDEgQVJDbmV0LiAKKyAgIEluIHRoaXMgbW9kZSBpdCB3b3VsZCBiZSBpbXBvc3NpYmxlIGZvciBpbnNpZ2h0IHRvIGNvbW11bmljYXRlIGRpcmVjdGx5CisgICB3aXRoIHBhdGllbmNlLCBzaW5jZSB0aGUgTm92ZWxsIHN0YWNrIGlzIGluY29tcGF0aWJsZSB3aXRoIE1pY3Jvc29mdCdzCisgICBFdGhlcm5ldC1FbmNhcC4gIFdpdGhvdXQgY2hhbmdpbmcgYW55IHNldHRpbmdzIG9uIGZyZWVkb20gb3IgcGF0aWVuY2UsIEkKKyAgIHNpbXBseSBzZXQgZnJlZWRvbSBhcyB0aGUgZGVmYXVsdCBnYXRld2F5IGZvciBpbnNpZ2h0IChub3cgaW4gRE9TLAorICAgcmVtZW1iZXIpIGFuZCBhbGwgdGhlIGZvcndhcmRpbmcgaGFwcGVucyAiYXV0b21hZ2ljYWxseSIgYmV0d2VlbiB0aGUgdHdvCisgICBob3N0cyB0aGF0IHdvdWxkIG5vcm1hbGx5IG5vdCBiZSBhYmxlIHRvIGNvbW11bmljYXRlIGF0IGFsbC4KKyAgIAorICAgRm9yIHRob3NlIHdobyBsaWtlIGRpYWdyYW1zLCBJIGhhdmUgY3JlYXRlZCB0d28gInZpcnR1YWwgc3VibmV0cyIgb24gdGhlCisgICBzYW1lIHBoeXNpY2FsIEFSQ25ldCB3aXJlLiAgWW91IGNhbiBwaWN0dXJlIGl0IGxpa2UgdGhpczoKKyAgIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgIFtSRkMxMjAxIE5FVFdPUktdICAgICAgICAgICAgICAgICAgIFtFVEhFUi1FTkNBUCBORVRXT1JLXQorICAgICAgKHJlZ2lzdGVyZWQgSW50ZXJuZXQgc3VibmV0KSAgICAgICAgICAgKFJGQzE1OTcgcHJpdmF0ZSBzdWJuZXQpCisgIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoSVAgTWFzcXVlcmFkZSkKKyAgICAgICAgICAvLS0tLS0tLS0tLS0tLS0tXCAgICAgICAgICogICAgICAgICAgICAvLS0tLS0tLS0tLS0tLS0tXAorICAgICAgICAgIHwgICAgICAgICAgICAgICB8ICAgICAgICAgKiAgICAgICAgICAgIHwgICAgICAgICAgICAgICB8CisgICAgICAgICAgfCAgICAgICAgICAgICAgICstRnJlZWRvbS0qLUdhdGVrZWVwZXItKyAgICAgICAgICAgICAgIHwKKyAgICAgICAgICB8ICAgICAgICAgICAgICAgfCAgICB8ICAgICogICAgICAgICAgICB8ICAgICAgICAgICAgICAgfAorICAgICAgICAgIFwtLS0tLS0tKy0tLS0tLS0vICAgIHwgICAgKiAgICAgICAgICAgIFwtLS0tLS0tKy0tLS0tLS0vCisgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgICAgICAgICAgICBJbnNpZ2h0ICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICBQYXRpZW5jZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgKEludGVybmV0KQorCisKKworSXQgd29ya3M6IHdoYXQgbm93PworLS0tLS0tLS0tLS0tLS0tLS0tLQorCitTZW5kIG1haWwgZGVzY3JpYmluZyB5b3VyIHNldHVwLCBwcmVmZXJhYmx5IGluY2x1ZGluZyBkcml2ZXIgdmVyc2lvbiwga2VybmVsCit2ZXJzaW9uLCBBUkNuZXQgY2FyZCBtb2RlbCwgQ1BVIHR5cGUsIG51bWJlciBvZiBzeXN0ZW1zIG9uIHlvdXIgbmV0d29yaywgYW5kCitsaXN0IG9mIHNvZnR3YXJlIGluIHVzZSB0byBtZSBhdCB0aGUgZm9sbG93aW5nIGFkZHJlc3M6CisJYXBlbndhcnJAd29ybGR2aXNpb25zLmNhCisKK0kgZG8gc2VuZCAoc29tZXRpbWVzIGF1dG9tYXRlZCkgcmVwbGllcyB0byBhbGwgbWVzc2FnZXMgSSByZWNlaXZlLiAgTXkgZW1haWwKK2NhbiBiZSB3ZWlyZCAoYW5kIGFsc28gdXN1YWxseSBnZXRzIGZvcndhcmRlZCBhbGwgb3ZlciB0aGUgcGxhY2UgYWxvbmcgdGhlCit3YXkgdG8gbWUpLCBzbyBpZiB5b3UgZG9uJ3QgZ2V0IGEgcmVwbHkgd2l0aGluIGEgcmVhc29uYWJsZSB0aW1lLCBwbGVhc2UKK3Jlc2VuZC4KKworCitJdCBkb2Vzbid0IHdvcms6IHdoYXQgbm93PworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworRG8gdGhlIHNhbWUgYXMgYWJvdmUsIGJ1dCBhbHNvIGluY2x1ZGUgdGhlIG91dHB1dCBvZiB0aGUgaWZjb25maWcgYW5kIHJvdXRlCitjb21tYW5kcywgYXMgd2VsbCBhcyBhbnkgcGVydGluZW50IGxvZyBlbnRyaWVzIChpZS4gYW55dGhpbmcgdGhhdCBzdGFydHMKK3dpdGggImFyY25ldDoiIGFuZCBoYXMgc2hvd24gdXAgc2luY2UgdGhlIGxhc3QgcmVib290KSBpbiB5b3VyIG1haWwuCisKK0lmIHlvdSB3YW50IHRvIHRyeSBmaXhpbmcgaXQgeW91cnNlbGYgKEkgc3Ryb25nbHkgcmVjb21tZW5kIHRoYXQgeW91IG1haWwgbWUKK2Fib3V0IHRoZSBwcm9ibGVtIGZpcnN0LCBzaW5jZSBpdCBtaWdodCBhbHJlYWR5IGhhdmUgYmVlbiBzb2x2ZWQpIHlvdSBtYXkKK3dhbnQgdG8gdHJ5IHNvbWUgb2YgdGhlIGRlYnVnIGxldmVscyBhdmFpbGFibGUuICBGb3IgaGVhdnkgdGVzdGluZyBvbgorRF9EVVJJTkcgb3IgbW9yZSwgaXQgd291bGQgYmUgYSBSRUFMTFkgZ29vZCBpZGVhIHRvIGtpbGwgeW91ciBrbG9nZCBkYWVtb24KK2ZpcnN0ISAgRF9EVVJJTkcgZGlzcGxheXMgNC01IGxpbmVzIGZvciBlYWNoIHBhY2tldCBzZW50IG9yIHJlY2VpdmVkLiAgRF9UWCwKK0RfUlgsIGFuZCBEX1NLQiBhY3R1YWxseSBESVNQTEFZIGVhY2ggcGFja2V0IGFzIGl0IGlzIHNlbnQgb3IgcmVjZWl2ZWQsCit3aGljaCBpcyBvYnZpb3VzbHkgcXVpdGUgYmlnLgorCitTdGFydGluZyB3aXRoIHYyLjQwIEFMUEhBLCB0aGUgYXV0b3Byb2JlIHJvdXRpbmVzIGhhdmUgY2hhbmdlZAorc2lnbmlmaWNhbnRseS4gIEluIHBhcnRpY3VsYXIsIHRoZXkgd29uJ3QgdGVsbCB5b3Ugd2h5IHRoZSBjYXJkIHdhcyBub3QKK2ZvdW5kIHVubGVzcyB5b3UgdHVybiBvbiB0aGUgRF9JTklUX1JFQVNPTlMgZGVidWdnaW5nIGZsYWcuCisKK09uY2UgdGhlIGRyaXZlciBpcyBydW5uaW5nLCB5b3UgY2FuIHJ1biB0aGUgYXJjZHVtcCBzaGVsbCBzY3JpcHQgKGF2YWlsYWJsZQorZnJvbSBtZSBvciBpbiB0aGUgZnVsbCBBUkNuZXQgcGFja2FnZSwgaWYgeW91IGhhdmUgaXQpIGFzIHJvb3QgdG8gbGlzdCB0aGUKK2NvbnRlbnRzIG9mIHRoZSBhcmNuZXQgYnVmZmVycyBhdCBhbnkgdGltZS4gIFRvIG1ha2UgYW55IHNlbnNlIGF0IGFsbCBvdXQgb2YKK3RoaXMsIHlvdSBzaG91bGQgZ3JhYiB0aGUgcGVydGluZW50IFJGQ3MuIChzb21lIGFyZSBsaXN0ZWQgbmVhciB0aGUgdG9wIG9mCithcmNuZXQuYykuICBhcmNkdW1wIGFzc3VtZXMgeW91ciBjYXJkIGlzIGF0IDB4RDAwMDAuICBJZiBpdCBpc24ndCwgZWRpdCB0aGUKK3NjcmlwdC4KKworQnVmZmVycyAwIGFuZCAxIGFyZSB1c2VkIGZvciByZWNlaXZpbmcsIGFuZCBCdWZmZXJzIDIgYW5kIDMgYXJlIGZvciBzZW5kaW5nLiAKK1BpbmctcG9uZyBidWZmZXJzIGFyZSBpbXBsZW1lbnRlZCBib3RoIHdheXMuCisKK0lmIHlvdXIgZGVidWcgbGV2ZWwgaW5jbHVkZXMgRF9EVVJJTkcgYW5kIHlvdSBkaWQgTk9UIGRlZmluZSBTTE9XX1hNSVRfQ09QWSwKK3RoZSBidWZmZXJzIGFyZSBjbGVhcmVkIHRvIGEgY29uc3RhbnQgdmFsdWUgb2YgMHg0MiBldmVyeSB0aW1lIHRoZSBjYXJkIGlzCityZXNldCAod2hpY2ggc2hvdWxkIG9ubHkgaGFwcGVuIHdoZW4geW91IGRvIGFuIGlmY29uZmlnIHVwLCBvciB3aGVuIExpbnV4CitkZWNpZGVzIHRoYXQgdGhlIGRyaXZlciBpcyBicm9rZW4pLiAgRHVyaW5nIGEgdHJhbnNtaXQsIHVudXNlZCBwYXJ0cyBvZiB0aGUKK2J1ZmZlciB3aWxsIGJlIGNsZWFyZWQgdG8gMHg0MiBhcyB3ZWxsLiAgVGhpcyBpcyB0byBtYWtlIGl0IGVhc2llciB0byBmaWd1cmUKK291dCB3aGljaCBieXRlcyBhcmUgYmVpbmcgdXNlZCBieSBhIHBhY2tldC4KKworWW91IGNhbiBjaGFuZ2UgdGhlIGRlYnVnIGxldmVsIHdpdGhvdXQgcmVjb21waWxpbmcgdGhlIGtlcm5lbCBieSB0eXBpbmc6CisJaWZjb25maWcgYXJjMCBkb3duIG1ldHJpYyAxeHh4CisJL2V0Yy9yYy5kL3JjLmluZXQxCit3aGVyZSAieHh4IiBpcyB0aGUgZGVidWcgbGV2ZWwgeW91IHdhbnQuICBGb3IgZXhhbXBsZSwgIm1ldHJpYyAxMDE1IiB3b3VsZCBwdXQKK3lvdSBhdCBkZWJ1ZyBsZXZlbCAxNS4gIERlYnVnIGxldmVsIDcgaXMgY3VycmVudGx5IHRoZSBkZWZhdWx0LgorCitOb3RlIHRoYXQgdGhlIGRlYnVnIGxldmVsIGlzIChzdGFydGluZyB3aXRoIHYxLjkwIEFMUEhBKSBhIGJpbmFyeQorY29tYmluYXRpb24gb2YgZGlmZmVyZW50IGRlYnVnIGZsYWdzOyBzbyBkZWJ1ZyBsZXZlbCA3IGlzIHJlYWxseSAxKzIrNCBvcgorRF9OT1JNQUwrRF9FWFRSQStEX0lOSVQuICBUbyBpbmNsdWRlIERfRFVSSU5HLCB5b3Ugd291bGQgYWRkIDE2IHRvIHRoaXMsCityZXN1bHRpbmcgaW4gZGVidWcgbGV2ZWwgMjMuCisKK0lmIHlvdSBkb24ndCB1bmRlcnN0YW5kIHRoYXQsIHlvdSBwcm9iYWJseSBkb24ndCB3YW50IHRvIGtub3cgYW55d2F5LiAKK0UtbWFpbCBtZSBhYm91dCB5b3VyIHByb2JsZW0uCisKKworSSB3YW50IHRvIHNlbmQgbW9uZXk6IHdoYXQgbm93PworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitHbyB0YWtlIGEgbmFwIG9yIHNvbWV0aGluZy4gIFlvdSdsbCBmZWVsIGJldHRlciBpbiB0aGUgbW9ybmluZy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9hdG0udHh0IGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2F0bS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODI5MjFjZQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9hdG0udHh0CkBAIC0wLDAgKzEsOCBAQAorSW4gb3JkZXIgdG8gdXNlIGFueXRoaW5nIGJ1dCB0aGUgbW9zdCBwcmltaXRpdmUgZnVuY3Rpb25zIG9mIEFUTSwKK3NldmVyYWwgdXNlci1tb2RlIHByb2dyYW1zIGFyZSByZXF1aXJlZCB0byBhc3Npc3QgdGhlIGtlcm5lbC4gVGhlc2UKK3Byb2dyYW1zIGFuZCByZWxhdGVkIG1hdGVyaWFsIGNhbiBiZSBmb3VuZCB2aWEgdGhlIEFUTSBvbiBMaW51eCBXZWIKK3BhZ2UgYXQgaHR0cDovL2xpbnV4LWF0bS5zb3VyY2Vmb3JnZS5uZXQvCisKK0lmIHlvdSBlbmNvdW50ZXIgcHJvYmxlbXMgd2l0aCBBVE0sIHBsZWFzZSByZXBvcnQgdGhlbSBvbiB0aGUgQVRNCitvbiBMaW51eCBtYWlsaW5nIGxpc3QuIFN1YnNjcmlwdGlvbiBpbmZvcm1hdGlvbiwgYXJjaGl2ZXMsIGV0Yy4sCitjYW4gYmUgZm91bmQgb24gaHR0cDovL2xpbnV4LWF0bS5zb3VyY2Vmb3JnZS5uZXQvCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvYXgyNS50eHQgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvYXgyNS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzdjMjViMAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9heDI1LnR4dApAQCAtMCwwICsxLDE2IEBACitUbyB1c2UgdGhlIGFtYXRldXIgcmFkaW8gcHJvdG9jb2xzIHdpdGhpbiBMaW51eCB5b3Ugd2lsbCBuZWVkIHRvIGdldCBhCitzdWl0YWJsZSBjb3B5IG9mIHRoZSBBWC4yNSBVdGlsaXRpZXMuIE1vcmUgZGV0YWlsZWQgaW5mb3JtYXRpb24gYWJvdXQgdGhlc2UKK2FuZCBhc3NvY2lhdGVkIHByb2dyYW1zIGNhbiBiZSBmb3VuZCBvbiBodHRwOi8vem9uZS5wc3B0LmZpL35qc24vLgorCitGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgQVguMjUsIE5FVC9ST00gYW5kIFJPU0UgcHJvdG9jb2wgc3RhY2tzLCBzZWUKK3RoZSBBWDI1LUhPV1RPIHdyaXR0ZW4gYnkgVGVycnkgRGF3c29uIDx0ZXJyeUBwZXJmLm5vLml0Zy50ZWxzdHJhLmNvbS5hdT4KK3dobyBpcyBhbHNvIHRoZSBBWC4yNSBVdGlsaXRpZXMgbWFpbnRhaW5lci4KKworVGhlcmUgaXMgYW4gYWN0aXZlIG1haWxpbmcgbGlzdCBmb3IgZGlzY3Vzc2luZyBMaW51eCBhbWF0ZXVyIHJhZGlvIG1hdHRlcnMKK2NhbGxlZCBsaW51eC1oYW1zLiBUbyBzdWJzY3JpYmUgdG8gaXQsIHNlbmQgYSBtZXNzYWdlIHRvCittYWpvcmRvbW9Admdlci5rZXJuZWwub3JnIHdpdGggdGhlIHdvcmRzICJzdWJzY3JpYmUgbGludXgtaGFtcyIgaW4gdGhlIGJvZHkKK29mIHRoZSBtZXNzYWdlLCB0aGUgc3ViamVjdCBmaWVsZCBpcyBpZ25vcmVkLgorCitKb25hdGhhbiBHNEtMWAorCitnNGtseEBnNGtseC5kZW1vbi5jby51awpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2JheWNvbS50eHQgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvYmF5Y29tLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZTY4ODQ5Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2JheWNvbS50eHQKQEAgLTAsMCArMSwxNTggQEAKKwkJICAgIExJTlVYIERSSVZFUlMgRk9SIEJBWUNPTSBNT0RFTVMKKworICAgICAgIFRob21hcyBNLiBTYWlsZXIsIEhCOUpOWC9BRTRXQSwgPHNhaWxlckBpZmUuZWUuZXRoei5jaD4KKworISFORVchISAoMDQvOTgpIFRoZSBkcml2ZXJzIGZvciB0aGUgYmF5Y29tIG1vZGVtcyBoYXZlIGJlZW4gc3BsaXQgaW50bworc2VwYXJhdGUgZHJpdmVycyBhcyB0aGV5IGRpZCBub3Qgc2hhcmUgYW55IGNvZGUsIGFuZCB0aGUgZHJpdmVyCithbmQgZGV2aWNlIG5hbWVzIGhhdmUgY2hhbmdlZC4KKworVGhpcyBkb2N1bWVudCBkZXNjcmliZXMgdGhlIExpbnV4IEtlcm5lbCBEcml2ZXJzIGZvciBzaW1wbGUgQmF5Y29tIHN0eWxlCithbWF0ZXVyIHJhZGlvIG1vZGVtcy4gCisKK1RoZSBmb2xsb3dpbmcgZHJpdmVycyBhcmUgYXZhaWxhYmxlOgorCitiYXljb21fc2VyX2ZkeDoKKyAgVGhpcyBkcml2ZXIgc3VwcG9ydHMgdGhlIFNFUjEyIG1vZGVtcyBlaXRoZXIgZnVsbCBvciBoYWxmIGR1cGxleC4KKyAgSXRzIGJhdWQgcmF0ZSBtYXkgYmUgY2hhbmdlZCB2aWEgdGhlIGBiYXVkJyBtb2R1bGUgcGFyYW1ldGVyLAorICB0aGVyZWZvcmUgaXQgc3VwcG9ydHMganVzdCBhYm91dCBldmVyeSBiaXQgYmFuZyBtb2RlbSBvbiBhCisgIHNlcmlhbCBwb3J0LiBJdHMgZGV2aWNlcyBhcmUgY2FsbGVkIGJjc2YwIHRocm91Z2ggYmNzZjMuCisgIFRoaXMgaXMgdGhlIHJlY29tbWVuZGVkIGRyaXZlciBmb3IgU0VSMTIgdHlwZSBtb2RlbXMsCisgIGhvd2V2ZXIgaWYgeW91IGhhdmUgYSBicm9rZW4gVUFSVCBjbG9uZSB0aGF0IGRvZXMgbm90IGhhdmUgd29ya2luZworICBkZWx0YSBzdGF0dXMgYml0cywgeW91IG1heSB0cnkgYmF5Y29tX3Nlcl9oZHguIAorCitiYXljb21fc2VyX2hkeDogCisgIFRoaXMgaXMgYW4gYWx0ZXJuYXRpdmUgZHJpdmVyIGZvciBTRVIxMiB0eXBlIG1vZGVtcy4KKyAgSXQgb25seSBzdXBwb3J0cyBoYWxmIGR1cGxleCwgYW5kIG9ubHkgMTIwMCBiYXVkLiBJdHMgZGV2aWNlcworICBhcmUgY2FsbGVkIGJjc2gwIHRocm91Z2ggYmNzaDMuIFVzZSB0aGlzIGRyaXZlciBvbmx5IGlmIGJheWNvbV9zZXJfZmR4CisgIGRvZXMgbm90IHdvcmsgd2l0aCB5b3VyIFVBUlQuCisKK2JheWNvbV9wYXI6CisgIFRoaXMgZHJpdmVyIHN1cHBvcnRzIHRoZSBwYXI5NiBhbmQgcGljcGFyIG1vZGVtcy4KKyAgSXRzIGRldmljZXMgYXJlIGNhbGxlZCBiY3AwIHRocm91Z2ggYmNwMy4KKworYmF5Y29tX2VwcDoKKyAgVGhpcyBkcml2ZXIgc3VwcG9ydHMgdGhlIEVQUCBtb2RlbS4KKyAgSXRzIGRldmljZXMgYXJlIGNhbGxlZCBiY2UwIHRocm91Z2ggYmNlMy4KKyAgVGhpcyBkcml2ZXIgaXMgd29yay1pbi1wcm9ncmVzcy4KKworVGhlIGZvbGxvd2luZyBtb2RlbXMgYXJlIHN1cHBvcnRlZDoKKworc2VyMTI6ICBUaGlzIGlzIGEgdmVyeSBzaW1wbGUgMTIwMCBiYXVkIEFGU0sgbW9kZW0uIFRoZSBtb2RlbSBjb25zaXN0cyBvbmx5CisgICAgICAgIG9mIGEgbW9kdWxhdG9yL2RlbW9kdWxhdG9yIGNoaXAsIHVzdWFsbHkgYSBUSSBUQ00zMTA1LiBUaGUgY29tcHV0ZXIKKyAgICAgICAgaXMgcmVzcG9uc2libGUgZm9yIHJlZ2VuZXJhdGluZyB0aGUgcmVjZWl2ZXIgYml0IGNsb2NrLCBhcyB3ZWxsIGFzCisgICAgICAgIGZvciBoYW5kbGluZyB0aGUgSERMQyBwcm90b2NvbC4gVGhlIG1vZGVtIGNvbm5lY3RzIHRvIGEgc2VyaWFsIHBvcnQsCisgICAgICAgIGhlbmNlIHRoZSBuYW1lLiBTaW5jZSB0aGUgc2VyaWFsIHBvcnQgaXMgbm90IHVzZWQgYXMgYW4gYXN5bmMgc2VyaWFsCisgICAgICAgIHBvcnQsIHRoZSBrZXJuZWwgZHJpdmVyIGZvciBzZXJpYWwgcG9ydHMgY2Fubm90IGJlIHVzZWQsIGFuZCB0aGlzCisgICAgICAgIGRyaXZlciBvbmx5IHN1cHBvcnRzIHN0YW5kYXJkIHNlcmlhbCBoYXJkd2FyZSAoODI1MCwgMTY0NTAsIDE2NTUwKQorCitwYXI5NjogIFRoaXMgaXMgYSBtb2RlbSBmb3IgOTYwMCBiYXVkIEZTSyBjb21wYXRpYmxlIHRvIHRoZSBHM1JVSCBzdGFuZGFyZC4KKyAgICAgICAgVGhlIG1vZGVtIGRvZXMgYWxsIHRoZSBmaWx0ZXJpbmcgYW5kIHJlZ2VuZXJhdGVzIHRoZSByZWNlaXZlciBjbG9jay4KKyAgICAgICAgRGF0YSBpcyB0cmFuc2ZlcnJlZCBmcm9tIGFuZCB0byB0aGUgUEMgdmlhIGEgc2hpZnQgcmVnaXN0ZXIuCisgICAgICAgIFRoZSBzaGlmdCByZWdpc3RlciBpcyBmaWxsZWQgd2l0aCAxNiBiaXRzIGFuZCBhbiBpbnRlcnJ1cHQgaXMgc2lnbmFsbGVkLgorICAgICAgICBUaGUgUEMgdGhlbiBlbXB0aWVzIHRoZSBzaGlmdCByZWdpc3RlciBpbiBhIGJ1cnN0LiBUaGlzIG1vZGVtIGNvbm5lY3RzCisgICAgICAgIHRvIHRoZSBwYXJhbGxlbCBwb3J0LCBoZW5jZSB0aGUgbmFtZS4gVGhlIG1vZGVtIGxlYXZlcyB0aGUgCisgICAgICAgIGltcGxlbWVudGF0aW9uIG9mIHRoZSBIRExDIHByb3RvY29sIGFuZCB0aGUgc2NyYW1ibGVyIHBvbHlub21pYWwgdG8KKyAgICAgICAgdGhlIFBDLgorCitwaWNwYXI6IFRoaXMgaXMgYSByZWRlc2lnbiBvZiB0aGUgcGFyOTYgbW9kZW0gYnkgSGVubmluZyBSZWNoLCBERjlJQy4gVGhlIG1vZGVtCisgICAgICAgIGlzIHByb3RvY29sIGNvbXBhdGlibGUgdG8gcGFyOTYsIGJ1dCB1c2VzIG9ubHkgdGhyZWUgbG93IHBvd2VyIElDcworICAgICAgICBhbmQgY2FuIHRoZXJlZm9yZSBiZSBmZWQgZnJvbSB0aGUgcGFyYWxsZWwgcG9ydCBhbmQgZG9lcyBub3QgcmVxdWlyZQorICAgICAgICBhbiBhZGRpdGlvbmFsIHBvd2VyIHN1cHBseS4gRnVydGhlcm1vcmUsIGl0IGluY29ycG9yYXRlcyBhIGNhcnJpZXIKKyAgICAgICAgZGV0ZWN0IGNpcmN1aXRyeS4KKworRVBQOiAgICBUaGlzIGlzIGEgaGlnaC1zcGVlZCBtb2RlbSBhZGFwdG9yIHRoYXQgY29ubmVjdHMgdG8gYW4gZW5oYW5jZWQgcGFyYWxsZWwgcG9ydC4KKyAgICAgICAgSXRzIHRhcmdldCBhdWRpZW5jZSBpcyB1c2VycyB3b3JraW5nIG92ZXIgYSBoaWdoIHNwZWVkIGh1YiAoNzYuOGtiaXQvcykuCisKK2VwcGZwZ2E6IFRoaXMgaXMgYSByZWRlc2lnbiBvZiB0aGUgRVBQIGFkYXB0b3IuCisKKworCitBbGwgb2YgdGhlIGFib3ZlIG1vZGVtcyBvbmx5IHN1cHBvcnQgaGFsZiBkdXBsZXggY29tbXVuaWNhdGlvbnMuIEhvd2V2ZXIsCit0aGUgZHJpdmVyIHN1cHBvcnRzIHRoZSBLSVNTIChzZWUgYmVsb3cpIGZ1bGxkdXBsZXggY29tbWFuZC4gSXQgdGhlbiBzaW1wbHkKK3N0YXJ0cyB0byBzZW5kIGFzIHNvb24gYXMgdGhlcmUncyBhIHBhY2tldCB0byB0cmFuc21pdCBhbmQgZG9lcyBub3QgY2FyZQorYWJvdXQgRENELCBpLmUuIGl0IHN0YXJ0cyB0byBzZW5kIGV2ZW4gaWYgdGhlcmUncyBzb21lb25lIGVsc2Ugb24gdGhlIGNoYW5uZWwuCitUaGlzIGNvbW1hbmQgaXMgcmVxdWlyZWQgYnkgc29tZSBpbXBsZW1lbnRhdGlvbnMgb2YgdGhlIERBTUEgY2hhbm5lbCAKK2FjY2VzcyBwcm90b2NvbC4KKworCitUaGUgSW50ZXJmYWNlIG9mIHRoZSBkcml2ZXJzCisKK1VubGlrZSBwcmV2aW91cyBkcml2ZXJzLCB0aGVzZSBkcml2ZXJzIGFyZSBubyBsb25nZXIgY2hhcmFjdGVyIGRldmljZXMsCitidXQgdGhleSBhcmUgbm93IHRydWUga2VybmVsIG5ldHdvcmsgaW50ZXJmYWNlcy4gSW5zdGFsbGF0aW9uIGlzIHRoZXJlZm9yZQorc2ltcGxlLiBPbmNlIGluc3RhbGxlZCwgZm91ciBpbnRlcmZhY2VzIG5hbWVkIGJje3NmLHNoLHAsZX1bMC0zXSBhcmUgYXZhaWxhYmxlLgorc2V0aGRsYyBmcm9tIHRoZSBheDI1IHV0aWxpdGllcyBtYXkgYmUgdXNlZCB0byBzZXQgZHJpdmVyIHN0YXRlcyBldGMuCitVc2VycyBvZiB1c2VybGFuZCBBWC4yNSBzdGFja3MgbWF5IHVzZSB0aGUgbmV0Mmtpc3MgdXRpbGl0eSAoYWxzbyBhdmFpbGFibGUKK2luIHRoZSBheDI1IHV0aWxpdGllcyBwYWNrYWdlKSB0byBjb252ZXJ0IHBhY2tldHMgb2YgYSBuZXR3b3JrIGludGVyZmFjZQordG8gYSBLSVNTIHN0cmVhbSBvbiBhIHBzZXVkbyB0dHkuIFRoZXJlJ3MgYWxzbyBhIHBhdGNoIGF2YWlsYWJsZSBmcm9tCittZSBmb3IgV0FNUEVTIHdoaWNoIGFsbG93cyBhdHRhY2hpbmcgYSBrZXJuZWwgbmV0d29yayBpbnRlcmZhY2UgZGlyZWN0bHkuCisKKworQ29uZmlndXJpbmcgdGhlIGRyaXZlcgorCitFdmVyeSB0aW1lIGEgZHJpdmVyIGlzIGluc2VydGVkIGludG8gdGhlIGtlcm5lbCwgaXQgaGFzIHRvIGtub3cgd2hpY2gKK21vZGVtcyBpdCBzaG91bGQgYWNjZXNzIGF0IHdoaWNoIHBvcnRzLiBUaGlzIGNhbiBiZSBkb25lIHdpdGggdGhlIHNldGJheWNvbQordXRpbGl0eS4gSWYgeW91IGFyZSBvbmx5IHVzaW5nIG9uZSBtb2RlbSwgeW91IGNhbiBhbHNvIGNvbmZpZ3VyZSB0aGUKK2RyaXZlciBmcm9tIHRoZSBpbnNtb2QgY29tbWFuZCBsaW5lIChvciBieSBtZWFucyBvZiBhbiBvcHRpb24gbGluZSBpbgorL2V0Yy9tb2Rwcm9iZS5jb25mKS4KKworRXhhbXBsZXM6CisgIG1vZHByb2JlIGJheWNvbV9zZXJfZmR4IG1vZGU9InNlcjEyKiIgaW9iYXNlPTB4M2Y4IGlycT00CisgIHNldGhkbGMgLWkgYmNzZjAgLXAgbW9kZSAic2VyMTIqIiBpbyAweDNmOCBpcnEgNAorCitCb3RoIGxpbmVzIGNvbmZpZ3VyZSB0aGUgZmlyc3QgcG9ydCB0byBkcml2ZSBhIHNlcjEyIG1vZGVtIGF0IHRoZSBmaXJzdAorc2VyaWFsIHBvcnQgKENPTTEgdW5kZXIgRE9TKS4gVGhlICogaW4gdGhlIG1vZGUgcGFyYW1ldGVyIGluc3RydWN0cyB0aGUgZHJpdmVyIHRvIHVzZQordGhlIHNvZnR3YXJlIERDRCBhbGdvcml0aG0gKHNlZSBiZWxvdykuCisKKyAgaW5zbW9kIGJheWNvbV9wYXIgbW9kZT0icGljcGFyIiBpb2Jhc2U9MHgzNzgKKyAgc2V0aGRsYyAtaSBiY3AwIC1wIG1vZGUgInBpY3BhciIgaW8gMHgzNzgKKworQm90aCBsaW5lcyBjb25maWd1cmUgdGhlIGZpcnN0IHBvcnQgdG8gZHJpdmUgYSBwaWNwYXIgbW9kZW0gYXQgdGhlCitmaXJzdCBwYXJhbGxlbCBwb3J0IChMUFQxIHVuZGVyIERPUykuIChOb3RlOiBwaWNwYXIgaW1wbGllcworaGFyZHdhcmUgRENELCBwYXI5NiBpbXBsaWVzIHNvZnR3YXJlIERDRCkuCisKK1RoZSBjaGFubmVsIGFjY2VzcyBwYXJhbWV0ZXJzIGNhbiBiZSBzZXQgd2l0aCBzZXRoZGxjIC1hIG9yIGtpc3NwYXJtcy4KK05vdGUgdGhhdCBib3RoIHV0aWxpdGllcyBpbnRlcnByZXQgdGhlIHZhbHVlcyBzbGlnaHRseSBkaWZmZXJlbnRseS4KKworCitIYXJkd2FyZSBEQ0QgdmVyc3VzIFNvZnR3YXJlIERDRAorCitUbyBhdm9pZCBjb2xsaXNpb25zIG9uIHRoZSBhaXIsIHRoZSBkcml2ZXIgbXVzdCBrbm93IHdoZW4gdGhlIGNoYW5uZWwgaXMKK2J1c3kuIFRoaXMgaXMgdGhlIHRhc2sgb2YgdGhlIERDRCBjaXJjdWl0cnkvc29mdHdhcmUuIFRoZSBkcml2ZXIgbWF5IGVpdGhlcgordXRpbGlzZSBhIHNvZnR3YXJlIERDRCBhbGdvcml0aG0gKG9wdGlvbnM9MSkgb3IgdXNlIGEgRENEIHNpZ25hbCBmcm9tCit0aGUgaGFyZHdhcmUgKG9wdGlvbnM9MCkuCisKK3NlcjEyOiAgaWYgc29mdHdhcmUgRENEIGlzIHV0aWxpc2VkLCB0aGUgcmFkaW8ncyBzcXVlbGNoIHNob3VsZCBhbHdheXMgYmUKKyAgICAgICAgb3Blbi4gSXQgaXMgaGlnaGx5IHJlY29tbWVuZGVkIHRvIHVzZSB0aGUgc29mdHdhcmUgRENEIGFsZ29yaXRobSwKKyAgICAgICAgYXMgaXQgaXMgbXVjaCBmYXN0ZXIgdGhhbiBtb3N0IGhhcmR3YXJlIHNxdWVsY2ggY2lyY3VpdHJ5LiBUaGUKKyAgICAgICAgZGlzYWR2YW50YWdlIGlzIGEgc2xpZ2h0bHkgaGlnaGVyIGxvYWQgb24gdGhlIHN5c3RlbS4KKworcGFyOTY6ICB0aGUgc29mdHdhcmUgRENEIGFsZ29yaXRobSBmb3IgdGhpcyB0eXBlIG9mIG1vZGVtIGlzIHJhdGhlciBwb29yLgorICAgICAgICBUaGUgbW9kZW0gc2ltcGx5IGRvZXMgbm90IHByb3ZpZGUgZW5vdWdoIGluZm9ybWF0aW9uIHRvIGltcGxlbWVudAorICAgICAgICBhIHJlYXNvbmFibGUgRENEIGFsZ29yaXRobSBpbiBzb2Z0d2FyZS4gVGhlcmVmb3JlLCBpZiB5b3VyIHJhZGlvCisgICAgICAgIGZlZWRzIHRoZSBEQ0QgaW5wdXQgb2YgdGhlIFBBUjk2IG1vZGVtLCB0aGUgdXNlIG9mIHRoZSBoYXJkd2FyZQorICAgICAgICBEQ0QgY2lyY3VpdHJ5IGlzIHJlY29tbWVuZGVkLgorCitwaWNwYXI6IHRoZSBwaWNwYXIgbW9kZW0gZmVhdHVyZXMgYSBidWlsdGluIERDRCBoYXJkd2FyZSwgd2hpY2ggaXMgaGlnaGx5CisgICAgICAgIHJlY29tbWVuZGVkLgorCisKKworQ29tcGF0aWJpbGl0eSB3aXRoIHRoZSByZXN0IG9mIHRoZSBMaW51eCBrZXJuZWwKKworVGhlIHNlcmlhbCBkcml2ZXIgYW5kIHRoZSBiYXljb20gc2VyaWFsIGRyaXZlcnMgY29tcGV0ZQorZm9yIHRoZSBzYW1lIGhhcmR3YXJlIHJlc291cmNlcy4gT2YgY291cnNlIG9ubHkgb25lIGRyaXZlciBjYW4gYWNjZXNzIGEgZ2l2ZW4KK2ludGVyZmFjZSBhdCBhIHRpbWUuIFRoZSBzZXJpYWwgZHJpdmVyIGdyYWJzIGFsbCBpbnRlcmZhY2VzIGl0IGNhbiBmaW5kIGF0CitzdGFydHVwIHRpbWUuIFRoZXJlZm9yZSB0aGUgYmF5Y29tIGRyaXZlcnMgc3Vic2VxdWVudGx5IHdvbid0IGJlIGFibGUgdG8KK2FjY2VzcyBhIHNlcmlhbCBwb3J0LiBZb3UgbWlnaHQgdGhlcmVmb3JlIGZpbmQgaXQgbmVjZXNzYXJ5IHRvIHJlbGVhc2UKK2EgcG9ydCBvd25lZCBieSB0aGUgc2VyaWFsIGRyaXZlciB3aXRoICdzZXRzZXJpYWwgL2Rldi90dHlTIyB1YXJ0IG5vbmUnLCB3aGVyZQorIyBpcyB0aGUgbnVtYmVyIG9mIHRoZSBpbnRlcmZhY2UuIFRoZSBiYXljb20gZHJpdmVycyBkbyBub3QgcmVzZXJ2ZSBhbnkKK3BvcnRzIGF0IHN0YXJ0dXAsIHVubGVzcyBvbmUgaXMgc3BlY2lmaWVkIG9uIHRoZSAnaW5zbW9kJyBjb21tYW5kIGxpbmUuIEFub3RoZXIKK21ldGhvZCB0byBzb2x2ZSB0aGUgcHJvYmxlbSBpcyB0byBjb21waWxlIGFsbCBkcml2ZXJzIGFzIG1vZHVsZXMgYW5kCitsZWF2ZSBpdCB0byBrbW9kIHRvIGxvYWQgdGhlIGNvcnJlY3QgZHJpdmVyIGRlcGVuZGluZyBvbiB0aGUgYXBwbGljYXRpb24uCisKK1RoZSBwYXJhbGxlbCBwb3J0IGRyaXZlcnMgKGJheWNvbV9wYXIsIGJheWNvbV9lcHApIG5vdyB1c2UgdGhlIHBhcnBvcnQgc3Vic3lzdGVtCit0byBhcmJpdHJhdGUgdGhlIHBvcnRzIGJldHdlZW4gZGlmZmVyZW50IGNsaWVudCBkcml2ZXJzLgorCit2eSA3M3MgZGUKK1RvbSBTYWlsZXIsIHNhaWxlckBpZmUuZWUuZXRoei5jaAoraGI5am54IEAgaGI5dy5hbXByLm9yZwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2JvbmRpbmcudHh0IGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2JvbmRpbmcudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBiYzJlZDEKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvYm9uZGluZy50eHQKQEAgLTAsMCArMSwxNjE4IEBACisKKyAgICAgICAgICAgICAgICAgICBMaW51eCBFdGhlcm5ldCBCb25kaW5nIERyaXZlciBIT1dUTworCitJbml0aWFsIHJlbGVhc2UgOiBUaG9tYXMgRGF2aXMgPHRhZGF2aXMgYXQgbGJsLmdvdj4KK0NvcnJlY3Rpb25zLCBIQSBleHRlbnNpb25zIDogMjAwMC8xMC8wMy0xNSA6CisgIC0gV2lsbHkgVGFycmVhdSA8d2lsbHkgYXQgbWV0YS14Lm9yZz4KKyAgLSBDb25zdGFudGluZSBHYXZyaWxvdiA8Y29uc3QtZyBhdCB4cGVydC5jb20+CisgIC0gQ2hhZCBOLiBUaW5kZWwgPGN0aW5kZWwgYXQgaWVlZSBkb3Qgb3JnPgorICAtIEphbmljZSBHaXJvdWFyZCA8Z2lyb3VhcmQgYXQgdXMgZG90IGlibSBkb3QgY29tPgorICAtIEpheSBWb3NidXJnaCA8ZnViYXIgYXQgdXMgZG90IGlibSBkb3QgY29tPgorCitSZW9yZ2FuaXplZCBhbmQgdXBkYXRlZCBGZWIgMjAwNSBieSBKYXkgVm9zYnVyZ2gKKworTm90ZSA6CistLS0tLS0KKwkKK1RoZSBib25kaW5nIGRyaXZlciBvcmlnaW5hbGx5IGNhbWUgZnJvbSBEb25hbGQgQmVja2VyJ3MgYmVvd3VsZiBwYXRjaGVzIGZvcgora2VybmVsIDIuMC4gSXQgaGFzIGNoYW5nZWQgcXVpdGUgYSBiaXQgc2luY2UsIGFuZCB0aGUgb3JpZ2luYWwgdG9vbHMgZnJvbQorZXh0cmVtZS1saW51eCBhbmQgYmVvd3VsZiBzaXRlcyB3aWxsIG5vdCB3b3JrIHdpdGggdGhpcyB2ZXJzaW9uIG9mIHRoZSBkcml2ZXIuCisKK0ZvciBuZXcgdmVyc2lvbnMgb2YgdGhlIGRyaXZlciwgcGF0Y2hlcyBmb3Igb2xkZXIga2VybmVscyBhbmQgdGhlIHVwZGF0ZWQKK3VzZXJzcGFjZSB0b29scywgcGxlYXNlIGZvbGxvdyB0aGUgbGlua3MgYXQgdGhlIGVuZCBvZiB0aGlzIGZpbGUuCisKK1RhYmxlIG9mIENvbnRlbnRzCis9PT09PT09PT09PT09PT09PQorCisxLiBCb25kaW5nIERyaXZlciBJbnN0YWxsYXRpb24KKworMi4gQm9uZGluZyBEcml2ZXIgT3B0aW9ucworCiszLiBDb25maWd1cmluZyBCb25kaW5nIERldmljZXMKKzMuMQlDb25maWd1cmF0aW9uIHdpdGggc3lzY29uZmlnIHN1cHBvcnQKKzMuMglDb25maWd1cmF0aW9uIHdpdGggaW5pdHNjcmlwdHMgc3VwcG9ydAorMy4zCUNvbmZpZ3VyaW5nIEJvbmRpbmcgTWFudWFsbHkKKzMuNAlDb25maWd1cmluZyBNdWx0aXBsZSBCb25kcworCis1LiBRdWVyeWluZyBCb25kaW5nIENvbmZpZ3VyYXRpb24KKzUuMQlCb25kaW5nIENvbmZpZ3VyYXRpb24KKzUuMglOZXR3b3JrIENvbmZpZ3VyYXRpb24KKworNi4gU3dpdGNoIENvbmZpZ3VyYXRpb24KKworNy4gODAyLjFxIFZMQU4gU3VwcG9ydAorCis4LiBMaW5rIE1vbml0b3JpbmcKKzguMQlBUlAgTW9uaXRvciBPcGVyYXRpb24KKzguMglDb25maWd1cmluZyBNdWx0aXBsZSBBUlAgVGFyZ2V0cworOC4zCU1JSSBNb25pdG9yIE9wZXJhdGlvbgorCis5LiBQb3RlbnRpYWwgVHJvdWJsZSBTb3VyY2VzCis5LjEJQWR2ZW50dXJlcyBpbiBSb3V0aW5nCis5LjIJRXRoZXJuZXQgRGV2aWNlIFJlbmFtaW5nCis5LjMJUGFpbmZ1bGx5IFNsb3cgT3IgTm8gRmFpbGVkIExpbmsgRGV0ZWN0aW9uIEJ5IE1paW1vbgorCisxMC4gU05NUCBhZ2VudHMKKworMTEuIFByb21pc2N1b3VzIG1vZGUKKworMTIuIEhpZ2ggQXZhaWxhYmlsaXR5IEluZm9ybWF0aW9uCisxMi4xCUhpZ2ggQXZhaWxhYmlsaXR5IGluIGEgU2luZ2xlIFN3aXRjaCBUb3BvbG9neQorMTIuMS4xCQlCb25kaW5nIE1vZGUgU2VsZWN0aW9uIGZvciBTaW5nbGUgU3dpdGNoIFRvcG9sb2d5CisxMi4xLjIJCUxpbmsgTW9uaXRvcmluZyBmb3IgU2luZ2xlIFN3aXRjaCBUb3BvbG9neQorMTIuMglIaWdoIEF2YWlsYWJpbGl0eSBpbiBhIE11bHRpcGxlIFN3aXRjaCBUb3BvbG9neQorMTIuMi4xCQlCb25kaW5nIE1vZGUgU2VsZWN0aW9uIGZvciBNdWx0aXBsZSBTd2l0Y2ggVG9wb2xvZ3kKKzEyLjIuMgkJTGluayBNb25pdG9yaW5nIGZvciBNdWx0aXBsZSBTd2l0Y2ggVG9wb2xvZ3kKKzEyLjMJU3dpdGNoIEJlaGF2aW9yIElzc3VlcyBmb3IgSGlnaCBBdmFpbGFiaWxpdHkKKworMTMuIEhhcmR3YXJlIFNwZWNpZmljIENvbnNpZGVyYXRpb25zCisxMy4xCUlCTSBCbGFkZUNlbnRlcgorCisxNC4gRnJlcXVlbnRseSBBc2tlZCBRdWVzdGlvbnMKKworMTUuIFJlc291cmNlcyBhbmQgTGlua3MKKworCisxLiBCb25kaW5nIERyaXZlciBJbnN0YWxsYXRpb24KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisJTW9zdCBwb3B1bGFyIGRpc3RybyBrZXJuZWxzIHNoaXAgd2l0aCB0aGUgYm9uZGluZyBkcml2ZXIKK2FscmVhZHkgYXZhaWxhYmxlIGFzIGEgbW9kdWxlIGFuZCB0aGUgaWZlbnNsYXZlIHVzZXIgbGV2ZWwgY29udHJvbAorcHJvZ3JhbSBpbnN0YWxsZWQgYW5kIHJlYWR5IGZvciB1c2UuIElmIHlvdXIgZGlzdHJvIGRvZXMgbm90LCBvciB5b3UKK2hhdmUgbmVlZCB0byBjb21waWxlIGJvbmRpbmcgZnJvbSBzb3VyY2UgKGUuZy4sIGNvbmZpZ3VyaW5nIGFuZAoraW5zdGFsbGluZyBhIG1haW5saW5lIGtlcm5lbCBmcm9tIGtlcm5lbC5vcmcpLCB5b3UnbGwgbmVlZCB0byBwZXJmb3JtCit0aGUgZm9sbG93aW5nIHN0ZXBzOgorCisxLjEgQ29uZmlndXJlIGFuZCBidWlsZCB0aGUga2VybmVsIHdpdGggYm9uZGluZworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworCVRoZSBsYXRlc3QgdmVyc2lvbiBvZiB0aGUgYm9uZGluZyBkcml2ZXIgaXMgYXZhaWxhYmxlIGluIHRoZQorZHJpdmVycy9uZXQvYm9uZGluZyBzdWJkaXJlY3Rvcnkgb2YgdGhlIG1vc3QgcmVjZW50IGtlcm5lbCBzb3VyY2UKKyh3aGljaCBpcyBhdmFpbGFibGUgb24gaHR0cDovL2tlcm5lbC5vcmcpLgorCisJUHJpb3IgdG8gdGhlIDIuNC4xMSBrZXJuZWwsIHRoZSBib25kaW5nIGRyaXZlciB3YXMgbWFpbnRhaW5lZAorbGFyZ2VseSBvdXRzaWRlIHRoZSBrZXJuZWwgdHJlZTsgcGF0Y2hlcyBmb3Igc29tZSBlYXJsaWVyIGtlcm5lbHMgYXJlCithdmFpbGFibGUgb24gdGhlIGJvbmRpbmcgc291cmNlZm9yZ2Ugc2l0ZSwgYWx0aG91Z2ggdGhvc2UgcGF0Y2hlcyBhcmUKK3N0aWxsIHNldmVyYWwgeWVhcnMgb3V0IG9mIGRhdGUuICBNb3N0IHVzZXJzIHdpbGwgd2FudCB0byB1c2UgZWl0aGVyCit0aGUgbW9zdCByZWNlbnQga2VybmVsIGZyb20ga2VybmVsLm9yZyBvciB3aGF0ZXZlciBrZXJuZWwgY2FtZSB3aXRoCit0aGVpciBkaXN0cm8uCisKKwlDb25maWd1cmUga2VybmVsIHdpdGggIm1ha2UgbWVudWNvbmZpZyIgKG9yICJtYWtlIHhjb25maWciIG9yCisibWFrZSBjb25maWciKSwgdGhlbiBzZWxlY3QgIkJvbmRpbmcgZHJpdmVyIHN1cHBvcnQiIGluIHRoZSAiTmV0d29yaworZGV2aWNlIHN1cHBvcnQiIHNlY3Rpb24uICBJdCBpcyByZWNvbW1lbmRlZCB0aGF0IHlvdSBjb25maWd1cmUgdGhlCitkcml2ZXIgYXMgbW9kdWxlIHNpbmNlIGl0IGlzIGN1cnJlbnRseSB0aGUgb25seSB3YXkgdG8gcGFzcyBwYXJhbWV0ZXJzCit0byB0aGUgZHJpdmVyIG9yIGNvbmZpZ3VyZSBtb3JlIHRoYW4gb25lIGJvbmRpbmcgZGV2aWNlLgorCisJQnVpbGQgYW5kIGluc3RhbGwgdGhlIG5ldyBrZXJuZWwgYW5kIG1vZHVsZXMsIHRoZW4gcHJvY2VlZCB0bworc3RlcCAyLgorCisxLjIgSW5zdGFsbCBpZmVuc2xhdmUgQ29udHJvbCBVdGlsaXR5CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKwlUaGUgaWZlbnNsYXZlIHVzZXIgbGV2ZWwgY29udHJvbCBwcm9ncmFtIGlzIGluY2x1ZGVkIGluIHRoZQora2VybmVsIHNvdXJjZSB0cmVlLCBpbiB0aGUgZmlsZSBEb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvaWZlbnNsYXZlLmMuCitJdCBpcyBnZW5lcmFsbHkgcmVjb21tZW5kZWQgdGhhdCB5b3UgdXNlIHRoZSBpZmVuc2xhdmUgdGhhdAorY29ycmVzcG9uZHMgdG8gdGhlIGtlcm5lbCB0aGF0IHlvdSBhcmUgdXNpbmcgKGVpdGhlciBmcm9tIHRoZSBzYW1lCitzb3VyY2UgdHJlZSBvciBzdXBwbGllZCB3aXRoIHRoZSBkaXN0cm8pLCBob3dldmVyLCBpZmVuc2xhdmUKK2V4ZWN1dGFibGVzIGZyb20gb2xkZXIga2VybmVscyBzaG91bGQgZnVuY3Rpb24gKGJ1dCBmZWF0dXJlcyBuZXdlcgordGhhbiB0aGUgaWZlbnNsYXZlIHJlbGVhc2UgYXJlIG5vdCBzdXBwb3J0ZWQpLiAgUnVubmluZyBhbiBpZmVuc2xhdmUKK3RoYXQgaXMgbmV3ZXIgdGhhbiB0aGUga2VybmVsIGlzIG5vdCBzdXBwb3J0ZWQsIGFuZCBtYXkgb3IgbWF5IG5vdAord29yay4KKworCVRvIGluc3RhbGwgaWZlbnNsYXZlLCBkbyB0aGUgZm9sbG93aW5nOgorCisjIGdjYyAtV2FsbCAtTyAtSS91c3Ivc3JjL2xpbnV4L2luY2x1ZGUgaWZlbnNsYXZlLmMgLW8gaWZlbnNsYXZlCisjIGNwIGlmZW5zbGF2ZSAvc2Jpbi9pZmVuc2xhdmUKKworCUlmIHlvdXIga2VybmVsIHNvdXJjZSBpcyBub3QgaW4gIi91c3Ivc3JjL2xpbnV4LCIgdGhlbiByZXBsYWNlCisiL3Vzci9zcmMvbGludXgvaW5jbHVkZSIgaW4gdGhlIGFib3ZlIHdpdGggdGhlIGxvY2F0aW9uIG9mIHlvdXIga2VybmVsCitzb3VyY2UgaW5jbHVkZSBkaXJlY3RvcnkuCisKKwlZb3UgbWF5IHdpc2ggdG8gYmFjayB1cCBhbnkgZXhpc3RpbmcgL3NiaW4vaWZlbnNsYXZlLCBvciwgZm9yCit0ZXN0aW5nIG9yIGluZm9ybWFsIHVzZSwgdGFnIHRoZSBpZmVuc2xhdmUgdG8gdGhlIGtlcm5lbCB2ZXJzaW9uCisoZS5nLiwgbmFtZSB0aGUgaWZlbnNsYXZlIGV4ZWN1dGFibGUgL3NiaW4vaWZlbnNsYXZlLTIuNi4xMCkuCisKK0lNUE9SVEFOVCBOT1RFOgorCisJSWYgeW91IG9taXQgdGhlICItSSIgb3Igc3BlY2lmeSBhbiBpbmNvcnJlY3QgZGlyZWN0b3J5LCB5b3UKK21heSBlbmQgdXAgd2l0aCBhbiBpZmVuc2xhdmUgdGhhdCBpcyBpbmNvbXBhdGlibGUgd2l0aCB0aGUga2VybmVsCit5b3UncmUgdHJ5aW5nIHRvIGJ1aWxkIGl0IGZvci4gIFNvbWUgZGlzdHJvcyAoZS5nLiwgUmVkIEhhdCBmcm9tIDcuMQorb253YXJkcykgZG8gbm90IGhhdmUgL3Vzci9pbmNsdWRlL2xpbnV4IHN5bWJvbGljYWxseSBsaW5rZWQgdG8gdGhlCitkZWZhdWx0IGtlcm5lbCBzb3VyY2UgaW5jbHVkZSBkaXJlY3RvcnkuCisKKworMi4gQm9uZGluZyBEcml2ZXIgT3B0aW9ucworPT09PT09PT09PT09PT09PT09PT09PT09PQorCisJT3B0aW9ucyBmb3IgdGhlIGJvbmRpbmcgZHJpdmVyIGFyZSBzdXBwbGllZCBhcyBwYXJhbWV0ZXJzIHRvCit0aGUgYm9uZGluZyBtb2R1bGUgYXQgbG9hZCB0aW1lLiAgVGhleSBtYXkgYmUgZ2l2ZW4gYXMgY29tbWFuZCBsaW5lCithcmd1bWVudHMgdG8gdGhlIGluc21vZCBvciBtb2Rwcm9iZSBjb21tYW5kLCBidXQgYXJlIHVzdWFsbHkgc3BlY2lmaWVkCitpbiBlaXRoZXIgdGhlIC9ldGMvbW9kcHJvYmUuY29uZiBjb25maWd1cmF0aW9uIGZpbGUsIG9yIGluIGEKK2Rpc3Ryby1zcGVjaWZpYyBjb25maWd1cmF0aW9uIGZpbGUgKHNvbWUgb2Ygd2hpY2ggYXJlIGRldGFpbGVkIGluIHRoZQorbmV4dCBzZWN0aW9uKS4KKworCVRoZSBhdmFpbGFibGUgYm9uZGluZyBkcml2ZXIgcGFyYW1ldGVycyBhcmUgbGlzdGVkIGJlbG93LiBJZiBhCitwYXJhbWV0ZXIgaXMgbm90IHNwZWNpZmllZCB0aGUgZGVmYXVsdCB2YWx1ZSBpcyB1c2VkLiAgV2hlbiBpbml0aWFsbHkKK2NvbmZpZ3VyaW5nIGEgYm9uZCwgaXQgaXMgcmVjb21tZW5kZWQgInRhaWwgLWYgL3Zhci9sb2cvbWVzc2FnZXMiIGJlCitydW4gaW4gYSBzZXBhcmF0ZSB3aW5kb3cgdG8gd2F0Y2ggZm9yIGJvbmRpbmcgZHJpdmVyIGVycm9yIG1lc3NhZ2VzLgorCisJSXQgaXMgY3JpdGljYWwgdGhhdCBlaXRoZXIgdGhlIG1paW1vbiBvciBhcnBfaW50ZXJ2YWwgYW5kCithcnBfaXBfdGFyZ2V0IHBhcmFtZXRlcnMgYmUgc3BlY2lmaWVkLCBvdGhlcndpc2Ugc2VyaW91cyBuZXR3b3JrCitkZWdyYWRhdGlvbiB3aWxsIG9jY3VyIGR1cmluZyBsaW5rIGZhaWx1cmVzLiAgVmVyeSBmZXcgZGV2aWNlcyBkbyBub3QKK3N1cHBvcnQgYXQgbGVhc3QgbWlpbW9uLCBzbyB0aGVyZSBpcyByZWFsbHkgbm8gcmVhc29uIG5vdCB0byB1c2UgaXQuCisKKwlPcHRpb25zIHdpdGggdGV4dHVhbCB2YWx1ZXMgd2lsbCBhY2NlcHQgZWl0aGVyIHRoZSB0ZXh0IG5hbWUKKwlvciwgZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5LCB0aGUgb3B0aW9uIHZhbHVlLiAgRS5nLiwKKwkibW9kZT04MDIuM2FkIiBhbmQgIm1vZGU9NCIgc2V0IHRoZSBzYW1lIG1vZGUuCisKKwlUaGUgcGFyYW1ldGVycyBhcmUgYXMgZm9sbG93czoKKworYXJwX2ludGVydmFsCisKKwlTcGVjaWZpZXMgdGhlIEFSUCBtb25pdG9yaW5nIGZyZXF1ZW5jeSBpbiBtaWxsaS1zZWNvbmRzLiBJZgorCUFSUCBtb25pdG9yaW5nIGlzIHVzZWQgaW4gYSBsb2FkLWJhbGFuY2luZyBtb2RlIChtb2RlIDAgb3IgMiksCisJdGhlIHN3aXRjaCBzaG91bGQgYmUgY29uZmlndXJlZCBpbiBhIG1vZGUgdGhhdCBldmVubHkKKwlkaXN0cmlidXRlcyBwYWNrZXRzIGFjcm9zcyBhbGwgbGlua3MgLSBzdWNoIGFzIHJvdW5kLXJvYmluLiBJZgorCXRoZSBzd2l0Y2ggaXMgY29uZmlndXJlZCB0byBkaXN0cmlidXRlIHRoZSBwYWNrZXRzIGluIGFuIFhPUgorCWZhc2hpb24sIGFsbCByZXBsaWVzIGZyb20gdGhlIEFSUCB0YXJnZXRzIHdpbGwgYmUgcmVjZWl2ZWQgb24KKwl0aGUgc2FtZSBsaW5rIHdoaWNoIGNvdWxkIGNhdXNlIHRoZSBvdGhlciB0ZWFtIG1lbWJlcnMgdG8KKwlmYWlsLiBBUlAgbW9uaXRvcmluZyBzaG91bGQgbm90IGJlIHVzZWQgaW4gY29uanVuY3Rpb24gd2l0aAorCW1paW1vbi4gQSB2YWx1ZSBvZiAwIGRpc2FibGVzIEFSUCBtb25pdG9yaW5nLiBUaGUgZGVmYXVsdAorCXZhbHVlIGlzIDAuCisKK2FycF9pcF90YXJnZXQKKworCVNwZWNpZmllcyB0aGUgaXAgYWRkcmVzc2VzIHRvIHVzZSB3aGVuIGFycF9pbnRlcnZhbCBpcyA+IDAuCisJVGhlc2UgYXJlIHRoZSB0YXJnZXRzIG9mIHRoZSBBUlAgcmVxdWVzdCBzZW50IHRvIGRldGVybWluZSB0aGUKKwloZWFsdGggb2YgdGhlIGxpbmsgdG8gdGhlIHRhcmdldHMuICBTcGVjaWZ5IHRoZXNlIHZhbHVlcyBpbgorCWRkZC5kZGQuZGRkLmRkZCBmb3JtYXQuICBNdWx0aXBsZSBpcCBhZHJlc3NlcyBtdXN0IGJlCisJc2VwZXJhdGVkIGJ5IGEgY29tbWEuICBBdCBsZWFzdCBvbmUgSVAgYWRkcmVzcyBtdXN0IGJlIGdpdmVuCisJZm9yIEFSUCBtb25pdG9yaW5nIHRvIGZ1bmN0aW9uLiAgVGhlIG1heGltdW0gbnVtYmVyIG9mIHRhcmdldHMKKwl0aGF0IGNhbiBiZSBzcGVjaWZpZWQgaXMgMTYuICBUaGUgZGVmYXVsdCB2YWx1ZSBpcyBubyBJUAorCWFkZHJlc3Nlcy4KKworZG93bmRlbGF5CisKKwlTcGVjaWZpZXMgdGhlIHRpbWUsIGluIG1pbGxpc2Vjb25kcywgdG8gd2FpdCBiZWZvcmUgZGlzYWJsaW5nCisJYSBzbGF2ZSBhZnRlciBhIGxpbmsgZmFpbHVyZSBoYXMgYmVlbiBkZXRlY3RlZC4gIFRoaXMgb3B0aW9uCisJaXMgb25seSB2YWxpZCBmb3IgdGhlIG1paW1vbiBsaW5rIG1vbml0b3IuICBUaGUgZG93bmRlbGF5CisJdmFsdWUgc2hvdWxkIGJlIGEgbXVsdGlwbGUgb2YgdGhlIG1paW1vbiB2YWx1ZTsgaWYgbm90LCBpdAorCXdpbGwgYmUgcm91bmRlZCBkb3duIHRvIHRoZSBuZWFyZXN0IG11bHRpcGxlLiAgVGhlIGRlZmF1bHQKKwl2YWx1ZSBpcyAwLgorCitsYWNwX3JhdGUKKworCU9wdGlvbiBzcGVjaWZ5aW5nIHRoZSByYXRlIGluIHdoaWNoIHdlJ2xsIGFzayBvdXIgbGluayBwYXJ0bmVyCisJdG8gdHJhbnNtaXQgTEFDUERVIHBhY2tldHMgaW4gODAyLjNhZCBtb2RlLiAgUG9zc2libGUgdmFsdWVzCisJYXJlOgorCisJc2xvdyBvciAwCisJCVJlcXVlc3QgcGFydG5lciB0byB0cmFuc21pdCBMQUNQRFVzIGV2ZXJ5IDMwIHNlY29uZHMgKGRlZmF1bHQpCisKKwlmYXN0IG9yIDEKKwkJUmVxdWVzdCBwYXJ0bmVyIHRvIHRyYW5zbWl0IExBQ1BEVXMgZXZlcnkgMSBzZWNvbmQKKworbWF4X2JvbmRzCisKKwlTcGVjaWZpZXMgdGhlIG51bWJlciBvZiBib25kaW5nIGRldmljZXMgdG8gY3JlYXRlIGZvciB0aGlzCisJaW5zdGFuY2Ugb2YgdGhlIGJvbmRpbmcgZHJpdmVyLiAgRS5nLiwgaWYgbWF4X2JvbmRzIGlzIDMsIGFuZAorCXRoZSBib25kaW5nIGRyaXZlciBpcyBub3QgYWxyZWFkeSBsb2FkZWQsIHRoZW4gYm9uZDAsIGJvbmQxCisJYW5kIGJvbmQyIHdpbGwgYmUgY3JlYXRlZC4gIFRoZSBkZWZhdWx0IHZhbHVlIGlzIDEuCisKK21paW1vbgorCisJU3BlY2lmaWVzIHRoZSBmcmVxdWVuY3kgaW4gbWlsbGktc2Vjb25kcyB0aGF0IE1JSSBsaW5rCisJbW9uaXRvcmluZyB3aWxsIG9jY3VyLiAgQSB2YWx1ZSBvZiB6ZXJvIGRpc2FibGVzIE1JSSBsaW5rCisJbW9uaXRvcmluZy4gIEEgdmFsdWUgb2YgMTAwIGlzIGEgZ29vZCBzdGFydGluZyBwb2ludC4gIFRoZQorCXVzZV9jYXJyaWVyIG9wdGlvbiwgYmVsb3csIGFmZmVjdHMgaG93IHRoZSBsaW5rIHN0YXRlIGlzCisJZGV0ZXJtaW5lZC4gIFNlZSB0aGUgSGlnaCBBdmFpbGFiaWxpdHkgc2VjdGlvbiBmb3IgYWRkaXRpb25hbAorCWluZm9ybWF0aW9uLiAgVGhlIGRlZmF1bHQgdmFsdWUgaXMgMC4KKworbW9kZQorCisJU3BlY2lmaWVzIG9uZSBvZiB0aGUgYm9uZGluZyBwb2xpY2llcy4gVGhlIGRlZmF1bHQgaXMKKwliYWxhbmNlLXJyIChyb3VuZCByb2JpbikuICBQb3NzaWJsZSB2YWx1ZXMgYXJlOgorCisJYmFsYW5jZS1yciBvciAwCisKKwkJUm91bmQtcm9iaW4gcG9saWN5OiBUcmFuc21pdCBwYWNrZXRzIGluIHNlcXVlbnRpYWwKKwkJb3JkZXIgZnJvbSB0aGUgZmlyc3QgYXZhaWxhYmxlIHNsYXZlIHRocm91Z2ggdGhlCisJCWxhc3QuICBUaGlzIG1vZGUgcHJvdmlkZXMgbG9hZCBiYWxhbmNpbmcgYW5kIGZhdWx0CisJCXRvbGVyYW5jZS4KKworCWFjdGl2ZS1iYWNrdXAgb3IgMQorCisJCUFjdGl2ZS1iYWNrdXAgcG9saWN5OiBPbmx5IG9uZSBzbGF2ZSBpbiB0aGUgYm9uZCBpcworCQlhY3RpdmUuICBBIGRpZmZlcmVudCBzbGF2ZSBiZWNvbWVzIGFjdGl2ZSBpZiwgYW5kIG9ubHkKKwkJaWYsIHRoZSBhY3RpdmUgc2xhdmUgZmFpbHMuICBUaGUgYm9uZCdzIE1BQyBhZGRyZXNzIGlzCisJCWV4dGVybmFsbHkgdmlzaWJsZSBvbiBvbmx5IG9uZSBwb3J0IChuZXR3b3JrIGFkYXB0ZXIpCisJCXRvIGF2b2lkIGNvbmZ1c2luZyB0aGUgc3dpdGNoLiAgVGhpcyBtb2RlIHByb3ZpZGVzCisJCWZhdWx0IHRvbGVyYW5jZS4gIFRoZSBwcmltYXJ5IG9wdGlvbiBhZmZlY3RzIHRoZQorCQliZWhhdmlvciBvZiB0aGlzIG1vZGUuCisKKwliYWxhbmNlLXhvciBvciAyCisKKwkJWE9SIHBvbGljeTogVHJhbnNtaXQgYmFzZWQgb24gWyhzb3VyY2UgTUFDIGFkZHJlc3MKKwkJWE9SJ2Qgd2l0aCBkZXN0aW5hdGlvbiBNQUMgYWRkcmVzcykgbW9kdWxvIHNsYXZlCisJCWNvdW50XS4gIFRoaXMgc2VsZWN0cyB0aGUgc2FtZSBzbGF2ZSBmb3IgZWFjaAorCQlkZXN0aW5hdGlvbiBNQUMgYWRkcmVzcy4gIFRoaXMgbW9kZSBwcm92aWRlcyBsb2FkCisJCWJhbGFuY2luZyBhbmQgZmF1bHQgdG9sZXJhbmNlLgorCisJYnJvYWRjYXN0IG9yIDMKKworCQlCcm9hZGNhc3QgcG9saWN5OiB0cmFuc21pdHMgZXZlcnl0aGluZyBvbiBhbGwgc2xhdmUKKwkJaW50ZXJmYWNlcy4gIFRoaXMgbW9kZSBwcm92aWRlcyBmYXVsdCB0b2xlcmFuY2UuCisKKwk4MDIuM2FkIG9yIDQKKworCQlJRUVFIDgwMi4zYWQgRHluYW1pYyBsaW5rIGFnZ3JlZ2F0aW9uLiAgQ3JlYXRlcworCQlhZ2dyZWdhdGlvbiBncm91cHMgdGhhdCBzaGFyZSB0aGUgc2FtZSBzcGVlZCBhbmQKKwkJZHVwbGV4IHNldHRpbmdzLiAgVXRpbGl6ZXMgYWxsIHNsYXZlcyBpbiB0aGUgYWN0aXZlCisJCWFnZ3JlZ2F0b3IgYWNjb3JkaW5nIHRvIHRoZSA4MDIuM2FkIHNwZWNpZmljYXRpb24uCisKKwkJUHJlLXJlcXVpc2l0ZXM6CisKKwkJMS4gRXRodG9vbCBzdXBwb3J0IGluIHRoZSBiYXNlIGRyaXZlcnMgZm9yIHJldHJpZXZpbmcKKwkJdGhlIHNwZWVkIGFuZCBkdXBsZXggb2YgZWFjaCBzbGF2ZS4KKworCQkyLiBBIHN3aXRjaCB0aGF0IHN1cHBvcnRzIElFRUUgODAyLjNhZCBEeW5hbWljIGxpbmsKKwkJYWdncmVnYXRpb24uCisKKwkJTW9zdCBzd2l0Y2hlcyB3aWxsIHJlcXVpcmUgc29tZSB0eXBlIG9mIGNvbmZpZ3VyYXRpb24KKwkJdG8gZW5hYmxlIDgwMi4zYWQgbW9kZS4KKworCWJhbGFuY2UtdGxiIG9yIDUKKworCQlBZGFwdGl2ZSB0cmFuc21pdCBsb2FkIGJhbGFuY2luZzogY2hhbm5lbCBib25kaW5nIHRoYXQKKwkJZG9lcyBub3QgcmVxdWlyZSBhbnkgc3BlY2lhbCBzd2l0Y2ggc3VwcG9ydC4gIFRoZQorCQlvdXRnb2luZyB0cmFmZmljIGlzIGRpc3RyaWJ1dGVkIGFjY29yZGluZyB0byB0aGUKKwkJY3VycmVudCBsb2FkIChjb21wdXRlZCByZWxhdGl2ZSB0byB0aGUgc3BlZWQpIG9uIGVhY2gKKwkJc2xhdmUuICBJbmNvbWluZyB0cmFmZmljIGlzIHJlY2VpdmVkIGJ5IHRoZSBjdXJyZW50CisJCXNsYXZlLiAgSWYgdGhlIHJlY2VpdmluZyBzbGF2ZSBmYWlscywgYW5vdGhlciBzbGF2ZQorCQl0YWtlcyBvdmVyIHRoZSBNQUMgYWRkcmVzcyBvZiB0aGUgZmFpbGVkIHJlY2VpdmluZworCQlzbGF2ZS4KKworCQlQcmVyZXF1aXNpdGU6CisKKwkJRXRodG9vbCBzdXBwb3J0IGluIHRoZSBiYXNlIGRyaXZlcnMgZm9yIHJldHJpZXZpbmcgdGhlCisJCXNwZWVkIG9mIGVhY2ggc2xhdmUuCisKKwliYWxhbmNlLWFsYiBvciA2CisKKwkJQWRhcHRpdmUgbG9hZCBiYWxhbmNpbmc6IGluY2x1ZGVzIGJhbGFuY2UtdGxiIHBsdXMKKwkJcmVjZWl2ZSBsb2FkIGJhbGFuY2luZyAocmxiKSBmb3IgSVBWNCB0cmFmZmljLCBhbmQKKwkJZG9lcyBub3QgcmVxdWlyZSBhbnkgc3BlY2lhbCBzd2l0Y2ggc3VwcG9ydC4gIFRoZQorCQlyZWNlaXZlIGxvYWQgYmFsYW5jaW5nIGlzIGFjaGlldmVkIGJ5IEFSUCBuZWdvdGlhdGlvbi4KKwkJVGhlIGJvbmRpbmcgZHJpdmVyIGludGVyY2VwdHMgdGhlIEFSUCBSZXBsaWVzIHNlbnQgYnkKKwkJdGhlIGxvY2FsIHN5c3RlbSBvbiB0aGVpciB3YXkgb3V0IGFuZCBvdmVyd3JpdGVzIHRoZQorCQlzb3VyY2UgaGFyZHdhcmUgYWRkcmVzcyB3aXRoIHRoZSB1bmlxdWUgaGFyZHdhcmUKKwkJYWRkcmVzcyBvZiBvbmUgb2YgdGhlIHNsYXZlcyBpbiB0aGUgYm9uZCBzdWNoIHRoYXQKKwkJZGlmZmVyZW50IHBlZXJzIHVzZSBkaWZmZXJlbnQgaGFyZHdhcmUgYWRkcmVzc2VzIGZvcgorCQl0aGUgc2VydmVyLgorCisJCVJlY2VpdmUgdHJhZmZpYyBmcm9tIGNvbm5lY3Rpb25zIGNyZWF0ZWQgYnkgdGhlIHNlcnZlcgorCQlpcyBhbHNvIGJhbGFuY2VkLiAgV2hlbiB0aGUgbG9jYWwgc3lzdGVtIHNlbmRzIGFuIEFSUAorCQlSZXF1ZXN0IHRoZSBib25kaW5nIGRyaXZlciBjb3BpZXMgYW5kIHNhdmVzIHRoZSBwZWVyJ3MKKwkJSVAgaW5mb3JtYXRpb24gZnJvbSB0aGUgQVJQIHBhY2tldC4gIFdoZW4gdGhlIEFSUAorCQlSZXBseSBhcnJpdmVzIGZyb20gdGhlIHBlZXIsIGl0cyBoYXJkd2FyZSBhZGRyZXNzIGlzCisJCXJldHJpZXZlZCBhbmQgdGhlIGJvbmRpbmcgZHJpdmVyIGluaXRpYXRlcyBhbiBBUlAKKwkJcmVwbHkgdG8gdGhpcyBwZWVyIGFzc2lnbmluZyBpdCB0byBvbmUgb2YgdGhlIHNsYXZlcworCQlpbiB0aGUgYm9uZC4gIEEgcHJvYmxlbWF0aWMgb3V0Y29tZSBvZiB1c2luZyBBUlAKKwkJbmVnb3RpYXRpb24gZm9yIGJhbGFuY2luZyBpcyB0aGF0IGVhY2ggdGltZSB0aGF0IGFuCisJCUFSUCByZXF1ZXN0IGlzIGJyb2FkY2FzdCBpdCB1c2VzIHRoZSBoYXJkd2FyZSBhZGRyZXNzCisJCW9mIHRoZSBib25kLiAgSGVuY2UsIHBlZXJzIGxlYXJuIHRoZSBoYXJkd2FyZSBhZGRyZXNzCisJCW9mIHRoZSBib25kIGFuZCB0aGUgYmFsYW5jaW5nIG9mIHJlY2VpdmUgdHJhZmZpYworCQljb2xsYXBzZXMgdG8gdGhlIGN1cnJlbnQgc2xhdmUuICBUaGlzIGlzIGhhbmRsZWQgYnkKKwkJc2VuZGluZyB1cGRhdGVzIChBUlAgUmVwbGllcykgdG8gYWxsIHRoZSBwZWVycyB3aXRoCisJCXRoZWlyIGluZGl2aWR1YWxseSBhc3NpZ25lZCBoYXJkd2FyZSBhZGRyZXNzIHN1Y2ggdGhhdAorCQl0aGUgdHJhZmZpYyBpcyByZWRpc3RyaWJ1dGVkLiAgUmVjZWl2ZSB0cmFmZmljIGlzIGFsc28KKwkJcmVkaXN0cmlidXRlZCB3aGVuIGEgbmV3IHNsYXZlIGlzIGFkZGVkIHRvIHRoZSBib25kCisJCWFuZCB3aGVuIGFuIGluYWN0aXZlIHNsYXZlIGlzIHJlLWFjdGl2YXRlZC4gIFRoZQorCQlyZWNlaXZlIGxvYWQgaXMgZGlzdHJpYnV0ZWQgc2VxdWVudGlhbGx5IChyb3VuZCByb2JpbikKKwkJYW1vbmcgdGhlIGdyb3VwIG9mIGhpZ2hlc3Qgc3BlZWQgc2xhdmVzIGluIHRoZSBib25kLgorCisJCVdoZW4gYSBsaW5rIGlzIHJlY29ubmVjdGVkIG9yIGEgbmV3IHNsYXZlIGpvaW5zIHRoZQorCQlib25kIHRoZSByZWNlaXZlIHRyYWZmaWMgaXMgcmVkaXN0cmlidXRlZCBhbW9uZyBhbGwKKwkJYWN0aXZlIHNsYXZlcyBpbiB0aGUgYm9uZCBieSBpbnRpYXRpbmcgQVJQIFJlcGxpZXMKKwkJd2l0aCB0aGUgc2VsZWN0ZWQgbWFjIGFkZHJlc3MgdG8gZWFjaCBvZiB0aGUKKwkJY2xpZW50cy4gVGhlIHVwZGVsYXkgcGFyYW1ldGVyIChkZXRhaWxlZCBiZWxvdykgbXVzdAorCQliZSBzZXQgdG8gYSB2YWx1ZSBlcXVhbCBvciBncmVhdGVyIHRoYW4gdGhlIHN3aXRjaCdzCisJCWZvcndhcmRpbmcgZGVsYXkgc28gdGhhdCB0aGUgQVJQIFJlcGxpZXMgc2VudCB0byB0aGUKKwkJcGVlcnMgd2lsbCBub3QgYmUgYmxvY2tlZCBieSB0aGUgc3dpdGNoLgorCisJCVByZXJlcXVpc2l0ZXM6CisKKwkJMS4gRXRodG9vbCBzdXBwb3J0IGluIHRoZSBiYXNlIGRyaXZlcnMgZm9yIHJldHJpZXZpbmcKKwkJdGhlIHNwZWVkIG9mIGVhY2ggc2xhdmUuCisKKwkJMi4gQmFzZSBkcml2ZXIgc3VwcG9ydCBmb3Igc2V0dGluZyB0aGUgaGFyZHdhcmUKKwkJYWRkcmVzcyBvZiBhIGRldmljZSB3aGlsZSBpdCBpcyBvcGVuLiAgVGhpcyBpcworCQlyZXF1aXJlZCBzbyB0aGF0IHRoZXJlIHdpbGwgYWx3YXlzIGJlIG9uZSBzbGF2ZSBpbiB0aGUKKwkJdGVhbSB1c2luZyB0aGUgYm9uZCBoYXJkd2FyZSBhZGRyZXNzICh0aGUKKwkJY3Vycl9hY3RpdmVfc2xhdmUpIHdoaWxlIGhhdmluZyBhIHVuaXF1ZSBoYXJkd2FyZQorCQlhZGRyZXNzIGZvciBlYWNoIHNsYXZlIGluIHRoZSBib25kLiAgSWYgdGhlCisJCWN1cnJfYWN0aXZlX3NsYXZlIGZhaWxzIGl0cyBoYXJkd2FyZSBhZGRyZXNzIGlzCisJCXN3YXBwZWQgd2l0aCB0aGUgbmV3IGN1cnJfYWN0aXZlX3NsYXZlIHRoYXQgd2FzCisJCWNob3Nlbi4KKworcHJpbWFyeQorCisJQSBzdHJpbmcgKGV0aDAsIGV0aDIsIGV0Yykgc3BlY2lmeWluZyB3aGljaCBzbGF2ZSBpcyB0aGUKKwlwcmltYXJ5IGRldmljZS4gIFRoZSBzcGVjaWZpZWQgZGV2aWNlIHdpbGwgYWx3YXlzIGJlIHRoZQorCWFjdGl2ZSBzbGF2ZSB3aGlsZSBpdCBpcyBhdmFpbGFibGUuICBPbmx5IHdoZW4gdGhlIHByaW1hcnkgaXMKKwlvZmYtbGluZSB3aWxsIGFsdGVybmF0ZSBkZXZpY2VzIGJlIHVzZWQuICBUaGlzIGlzIHVzZWZ1bCB3aGVuCisJb25lIHNsYXZlIGlzIHByZWZlcnJlZCBvdmVyIGFub3RoZXIsIGUuZy4sIHdoZW4gb25lIHNsYXZlIGhhcworCWhpZ2hlciB0aHJvdWdocHV0IHRoYW4gYW5vdGhlci4KKworCVRoZSBwcmltYXJ5IG9wdGlvbiBpcyBvbmx5IHZhbGlkIGZvciBhY3RpdmUtYmFja3VwIG1vZGUuCisKK3VwZGVsYXkKKworCVNwZWNpZmllcyB0aGUgdGltZSwgaW4gbWlsbGlzZWNvbmRzLCB0byB3YWl0IGJlZm9yZSBlbmFibGluZyBhCisJc2xhdmUgYWZ0ZXIgYSBsaW5rIHJlY292ZXJ5IGhhcyBiZWVuIGRldGVjdGVkLiAgVGhpcyBvcHRpb24gaXMKKwlvbmx5IHZhbGlkIGZvciB0aGUgbWlpbW9uIGxpbmsgbW9uaXRvci4gIFRoZSB1cGRlbGF5IHZhbHVlCisJc2hvdWxkIGJlIGEgbXVsdGlwbGUgb2YgdGhlIG1paW1vbiB2YWx1ZTsgaWYgbm90LCBpdCB3aWxsIGJlCisJcm91bmRlZCBkb3duIHRvIHRoZSBuZWFyZXN0IG11bHRpcGxlLiAgVGhlIGRlZmF1bHQgdmFsdWUgaXMgMC4KKwordXNlX2NhcnJpZXIKKworCVNwZWNpZmllcyB3aGV0aGVyIG9yIG5vdCBtaWltb24gc2hvdWxkIHVzZSBNSUkgb3IgRVRIVE9PTAorCWlvY3RscyB2cy4gbmV0aWZfY2Fycmllcl9vaygpIHRvIGRldGVybWluZSB0aGUgbGluaworCXN0YXR1cy4gVGhlIE1JSSBvciBFVEhUT09MIGlvY3RscyBhcmUgbGVzcyBlZmZpY2llbnQgYW5kCisJdXRpbGl6ZSBhIGRlcHJlY2F0ZWQgY2FsbGluZyBzZXF1ZW5jZSB3aXRoaW4gdGhlIGtlcm5lbC4gIFRoZQorCW5ldGlmX2NhcnJpZXJfb2soKSByZWxpZXMgb24gdGhlIGRldmljZSBkcml2ZXIgdG8gbWFpbnRhaW4gaXRzCisJc3RhdGUgd2l0aCBuZXRpZl9jYXJyaWVyX29uL29mZjsgYXQgdGhpcyB3cml0aW5nLCBtb3N0LCBidXQKKwlub3QgYWxsLCBkZXZpY2UgZHJpdmVycyBzdXBwb3J0IHRoaXMgZmFjaWxpdHkuCisKKwlJZiBib25kaW5nIGluc2lzdHMgdGhhdCB0aGUgbGluayBpcyB1cCB3aGVuIGl0IHNob3VsZCBub3QgYmUsCisJaXQgbWF5IGJlIHRoYXQgeW91ciBuZXR3b3JrIGRldmljZSBkcml2ZXIgZG9lcyBub3Qgc3VwcG9ydAorCW5ldGlmX2NhcnJpZXJfb24vb2ZmLiAgVGhlIGRlZmF1bHQgc3RhdGUgZm9yIG5ldGlmX2NhcnJpZXIgaXMKKwkiY2FycmllciBvbiwiIHNvIGlmIGEgZHJpdmVyIGRvZXMgbm90IHN1cHBvcnQgbmV0aWZfY2FycmllciwKKwlpdCB3aWxsIGFwcGVhciBhcyBpZiB0aGUgbGluayBpcyBhbHdheXMgdXAuICBJbiB0aGlzIGNhc2UsCisJc2V0dGluZyB1c2VfY2FycmllciB0byAwIHdpbGwgY2F1c2UgYm9uZGluZyB0byByZXZlcnQgdG8gdGhlCisJTUlJIC8gRVRIVE9PTCBpb2N0bCBtZXRob2QgdG8gZGV0ZXJtaW5lIHRoZSBsaW5rIHN0YXRlLgorCisJQSB2YWx1ZSBvZiAxIGVuYWJsZXMgdGhlIHVzZSBvZiBuZXRpZl9jYXJyaWVyX29rKCksIGEgdmFsdWUgb2YKKwkwIHdpbGwgdXNlIHRoZSBkZXByZWNhdGVkIE1JSSAvIEVUSFRPT0wgaW9jdGxzLiAgVGhlIGRlZmF1bHQKKwl2YWx1ZSBpcyAxLgorCisKKworMy4gQ29uZmlndXJpbmcgQm9uZGluZyBEZXZpY2VzCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworCVRoZXJlIGFyZSwgZXNzZW50aWFsbHksIHR3byBtZXRob2RzIGZvciBjb25maWd1cmluZyBib25kaW5nOgord2l0aCBzdXBwb3J0IGZyb20gdGhlIGRpc3RybydzIG5ldHdvcmsgaW5pdGlhbGl6YXRpb24gc2NyaXB0cywgYW5kCit3aXRob3V0LiAgRGlzdHJvcyBnZW5lcmFsbHkgdXNlIG9uZSBvZiB0d28gcGFja2FnZXMgZm9yIHRoZSBuZXR3b3JrCitpbml0aWFsaXphdGlvbiBzY3JpcHRzOiBpbml0c2NyaXB0cyBvciBzeXNjb25maWcuICBSZWNlbnQgdmVyc2lvbnMgb2YKK3RoZXNlIHBhY2thZ2VzIGhhdmUgc3VwcG9ydCBmb3IgYm9uZGluZywgd2hpbGUgb2xkZXIgdmVyc2lvbnMgZG8gbm90LgorCisJV2Ugd2lsbCBmaXJzdCBkZXNjcmliZSB0aGUgb3B0aW9ucyBmb3IgY29uZmlndXJpbmcgYm9uZGluZyBmb3IKK2Rpc3Ryb3MgdXNpbmcgdmVyc2lvbnMgb2YgaW5pdHNjcmlwdHMgYW5kIHN5c2NvbmZpZyB3aXRoIGZ1bGwgb3IKK3BhcnRpYWwgc3VwcG9ydCBmb3IgYm9uZGluZywgdGhlbiBwcm92aWRlIGluZm9ybWF0aW9uIG9uIGVuYWJsaW5nCitib25kaW5nIHdpdGhvdXQgc3VwcG9ydCBmcm9tIHRoZSBuZXR3b3JrIGluaXRpYWxpemF0aW9uIHNjcmlwdHMgKGkuZS4sCitvbGRlciB2ZXJzaW9ucyBvZiBpbml0c2NyaXB0cyBvciBzeXNjb25maWcpLgorCisJSWYgeW91J3JlIHVuc3VyZSB3aGV0aGVyIHlvdXIgZGlzdHJvIHVzZXMgc3lzY29uZmlnIG9yCitpbml0c2NyaXB0cywgb3IgZG9uJ3Qga25vdyBpZiBpdCdzIG5ldyBlbm91Z2gsIGhhdmUgbm8gZmVhci4KK0RldGVybWluaW5nIHRoaXMgaXMgZmFpcmx5IHN0cmFpZ2h0Zm9yd2FyZC4KKworCUZpcnN0LCBpc3N1ZSB0aGUgY29tbWFuZDoKKworJCBycG0gLXFmIC9zYmluL2lmdXAKKworCUl0IHdpbGwgcmVzcG9uZCB3aXRoIGEgbGluZSBvZiB0ZXh0IHN0YXJ0aW5nIHdpdGggZWl0aGVyCisiaW5pdHNjcmlwdHMiIG9yICJzeXNjb25maWcsIiBmb2xsb3dlZCBieSBzb21lIG51bWJlcnMuICBUaGlzIGlzIHRoZQorcGFja2FnZSB0aGF0IHByb3ZpZGVzIHlvdXIgbmV0d29yayBpbml0aWFsaXphdGlvbiBzY3JpcHRzLgorCisJTmV4dCwgdG8gZGV0ZXJtaW5lIGlmIHlvdXIgaW5zdGFsbGF0aW9uIHN1cHBvcnRzIGJvbmRpbmcsCitpc3N1ZSB0aGUgY29tbWFuZDoKKworJCBncmVwIGlmZW5zbGF2ZSAvc2Jpbi9pZnVwCisKKwlJZiB0aGlzIHJldHVybnMgYW55IG1hdGNoZXMsIHRoZW4geW91ciBpbml0c2NyaXB0cyBvcgorc3lzY29uZmlnIGhhcyBzdXBwb3J0IGZvciBib25kaW5nLgorCiszLjEgQ29uZmlndXJhdGlvbiB3aXRoIHN5c2NvbmZpZyBzdXBwb3J0CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKwlUaGlzIHNlY3Rpb24gYXBwbGllcyB0byBkaXN0cm9zIHVzaW5nIGEgdmVyc2lvbiBvZiBzeXNjb25maWcKK3dpdGggYm9uZGluZyBzdXBwb3J0LCBmb3IgZXhhbXBsZSwgU3VTRSBMaW51eCBFbnRlcnByaXNlIFNlcnZlciA5LgorCisJU3VTRSBTTEVTIDkncyBuZXR3b3JraW5nIGNvbmZpZ3VyYXRpb24gc3lzdGVtIGRvZXMgc3VwcG9ydAorYm9uZGluZywgaG93ZXZlciwgYXQgdGhpcyB3cml0aW5nLCB0aGUgWWFTVCBzeXN0ZW0gY29uZmlndXJhdGlvbgorZnJvbnRlbmQgZG9lcyBub3QgcHJvdmlkZSBhbnkgbWVhbnMgdG8gd29yayB3aXRoIGJvbmRpbmcgZGV2aWNlcy4KK0JvbmRpbmcgZGV2aWNlcyBjYW4gYmUgbWFuYWdlZCBieSBoYW5kLCBob3dldmVyLCBhcyBmb2xsb3dzLgorCisJRmlyc3QsIGlmIHRoZXkgaGF2ZSBub3QgYWxyZWFkeSBiZWVuIGNvbmZpZ3VyZWQsIGNvbmZpZ3VyZSB0aGUKK3NsYXZlIGRldmljZXMuICBPbiBTTEVTIDksIHRoaXMgaXMgbW9zdCBlYXNpbHkgZG9uZSBieSBydW5uaW5nIHRoZQoreWFzdDIgc3lzY29uZmlnIGNvbmZpZ3VyYXRpb24gdXRpbGl0eS4gIFRoZSBnb2FsIGlzIGZvciB0byBjcmVhdGUgYW4KK2lmY2ZnLWlkIGZpbGUgZm9yIGVhY2ggc2xhdmUgZGV2aWNlLiAgVGhlIHNpbXBsZXN0IHdheSB0byBhY2NvbXBsaXNoCit0aGlzIGlzIHRvIGNvbmZpZ3VyZSB0aGUgZGV2aWNlcyBmb3IgREhDUC4gIFRoZSBuYW1lIG9mIHRoZQorY29uZmlndXJhdGlvbiBmaWxlIGZvciBlYWNoIGRldmljZSB3aWxsIGJlIG9mIHRoZSBmb3JtOgorCitpZmNmZy1pZC14eDp4eDp4eDp4eDp4eDp4eAorCisJV2hlcmUgdGhlICJ4eCIgcG9ydGlvbiB3aWxsIGJlIHJlcGxhY2VkIHdpdGggdGhlIGRpZ2l0cyBmcm9tCit0aGUgZGV2aWNlJ3MgcGVybWFuZW50IE1BQyBhZGRyZXNzLgorCisJT25jZSB0aGUgc2V0IG9mIGlmY2ZnLWlkLXh4Onh4Onh4Onh4Onh4Onh4IGZpbGVzIGhhcyBiZWVuCitjcmVhdGVkLCBpdCBpcyBuZWNlc3NhcnkgdG8gZWRpdCB0aGUgY29uZmlndXJhdGlvbiBmaWxlcyBmb3IgdGhlIHNsYXZlCitkZXZpY2VzICh0aGUgTUFDIGFkZHJlc3NlcyBjb3JyZXNwb25kIHRvIHRob3NlIG9mIHRoZSBzbGF2ZSBkZXZpY2VzKS4KK0JlZm9yZSBlZGl0aW5nLCB0aGUgZmlsZSB3aWxsIGNvbnRhaW4gbXVsaXBsZSBsaW5lcywgYW5kIHdpbGwgbG9vaworc29tZXRoaW5nIGxpa2UgdGhpczoKKworQk9PVFBST1RPPSdkaGNwJworU1RBUlRNT0RFPSdvbicKK1VTRVJDVEw9J25vJworVU5JUVVFPSdYTnp1LldlWkdPR0YrNHdFJworX25tX25hbWU9J2J1cy1wY2ktMDAwMTo2MTowMS4wJworCisJQ2hhbmdlIHRoZSBCT09UUFJPVE8gYW5kIFNUQVJUTU9ERSBsaW5lcyB0byB0aGUgZm9sbG93aW5nOgorCitCT09UUFJPVE89J25vbmUnCitTVEFSVE1PREU9J29mZicKKworCURvIG5vdCBhbHRlciB0aGUgVU5JUVVFIG9yIF9ubV9uYW1lIGxpbmVzLiAgUmVtb3ZlIGFueSBvdGhlcgorbGluZXMgKFVTRVJDVEwsIGV0YykuCisKKwlPbmNlIHRoZSBpZmNmZy1pZC14eDp4eDp4eDp4eDp4eDp4eCBmaWxlcyBoYXZlIGJlZW4gbW9kaWZpZWQsCitpdCdzIHRpbWUgdG8gY3JlYXRlIHRoZSBjb25maWd1cmF0aW9uIGZpbGUgZm9yIHRoZSBib25kaW5nIGRldmljZQoraXRzZWxmLiAgVGhpcyBmaWxlIGlzIG5hbWVkIGlmY2ZnLWJvbmRYLCB3aGVyZSBYIGlzIHRoZSBudW1iZXIgb2YgdGhlCitib25kaW5nIGRldmljZSB0byBjcmVhdGUsIHN0YXJ0aW5nIGF0IDAuICBUaGUgZmlyc3Qgc3VjaCBmaWxlIGlzCitpZmNmZy1ib25kMCwgdGhlIHNlY29uZCBpcyBpZmNmZy1ib25kMSwgYW5kIHNvIG9uLiAgVGhlIHN5c2NvbmZpZworbmV0d29yayBjb25maWd1cmF0aW9uIHN5c3RlbSB3aWxsIGNvcnJlY3RseSBzdGFydCBtdWx0aXBsZSBpbnN0YW5jZXMKK29mIGJvbmRpbmcuCisKKwlUaGUgY29udGVudHMgb2YgdGhlIGlmY2ZnLWJvbmRYIGZpbGUgaXMgYXMgZm9sbG93czoKKworQk9PVFBST1RPPSJzdGF0aWMiCitCUk9BRENBU1Q9IjEwLjAuMi4yNTUiCitJUEFERFI9IjEwLjAuMi4xMCIKK05FVE1BU0s9IjI1NS4yNTUuMC4wIgorTkVUV09SSz0iMTAuMC4yLjAiCitSRU1PVEVfSVBBRERSPSIiCitTVEFSVE1PREU9Im9uYm9vdCIKK0JPTkRJTkdfTUFTVEVSPSJ5ZXMiCitCT05ESU5HX01PRFVMRV9PUFRTPSJtb2RlPWFjdGl2ZS1iYWNrdXAgbWlpbW9uPTEwMCIKK0JPTkRJTkdfU0xBVkUwPSJldGgwIgorQk9ORElOR19TTEFWRTE9ImV0aDEiCisKKwlSZXBsYWNlIHRoZSBzYW1wbGUgQlJPQURDQVNULCBJUEFERFIsIE5FVE1BU0sgYW5kIE5FVFdPUksKK3ZhbHVlcyB3aXRoIHRoZSBhcHByb3ByaWF0ZSB2YWx1ZXMgZm9yIHlvdXIgbmV0d29yay4KKworCU5vdGUgdGhhdCBjb25maWd1cmluZyB0aGUgYm9uZGluZyBkZXZpY2Ugd2l0aCBCT09UUFJPVE89J2RoY3AnCitkb2VzIG5vdCB3b3JrOyB0aGUgc2NyaXB0cyBhdHRlbXB0IHRvIG9idGFpbiB0aGUgZGV2aWNlIGFkZHJlc3MgZnJvbQorREhDUCBwcmlvciB0byBhZGRpbmcgYW55IG9mIHRoZSBzbGF2ZSBkZXZpY2VzLiAgV2l0aG91dCBhY3RpdmUgc2xhdmVzLAordGhlIERIQ1AgcmVxdWVzdHMgYXJlIG5vdCBzZW50IHRvIHRoZSBuZXR3b3JrLgorCisJVGhlIFNUQVJUTU9ERSBzcGVjaWZpZXMgd2hlbiB0aGUgZGV2aWNlIGlzIGJyb3VnaHQgb25saW5lLgorVGhlIHBvc3NpYmxlIHZhbHVlcyBhcmU6CisKKwlvbmJvb3Q6CSBUaGUgZGV2aWNlIGlzIHN0YXJ0ZWQgYXQgYm9vdCB0aW1lLiAgSWYgeW91J3JlIG5vdAorCQkgc3VyZSwgdGhpcyBpcyBwcm9iYWJseSB3aGF0IHlvdSB3YW50LgorCisJbWFudWFsOgkgVGhlIGRldmljZSBpcyBzdGFydGVkIG9ubHkgd2hlbiBpZnVwIGlzIGNhbGxlZAorCQkgbWFudWFsbHkuICBCb25kaW5nIGRldmljZXMgbWF5IGJlIGNvbmZpZ3VyZWQgdGhpcworCQkgd2F5IGlmIHlvdSBkbyBub3Qgd2lzaCB0aGVtIHRvIHN0YXJ0IGF1dG9tYXRpY2FsbHkKKwkJIGF0IGJvb3QgZm9yIHNvbWUgcmVhc29uLgorCisJaG90cGx1ZzogVGhlIGRldmljZSBpcyBzdGFydGVkIGJ5IGEgaG90cGx1ZyBldmVudC4gIFRoaXMgaXMgbm90CisJCSBhIHZhbGlkIGNob2ljZSBmb3IgYSBib25kaW5nIGRldmljZS4KKworCW9mZiBvciBpZ25vcmU6IFRoZSBkZXZpY2UgY29uZmlndXJhdGlvbiBpcyBpZ25vcmVkLgorCisJVGhlIGxpbmUgQk9ORElOR19NQVNURVI9J3llcycgaW5kaWNhdGVzIHRoYXQgdGhlIGRldmljZSBpcyBhCitib25kaW5nIG1hc3RlciBkZXZpY2UuICBUaGUgb25seSB1c2VmdWwgdmFsdWUgaXMgInllcy4iCisKKwlUaGUgY29udGVudHMgb2YgQk9ORElOR19NT0RVTEVfT1BUUyBhcmUgc3VwcGxpZWQgdG8gdGhlCitpbnN0YW5jZSBvZiB0aGUgYm9uZGluZyBtb2R1bGUgZm9yIHRoaXMgZGV2aWNlLiAgU3BlY2lmeSB0aGUgb3B0aW9ucworZm9yIHRoZSBib25kaW5nIG1vZGUsIGxpbmsgbW9uaXRvcmluZywgYW5kIHNvIG9uIGhlcmUuICBEbyBub3QgaW5jbHVkZQordGhlIG1heF9ib25kcyBib25kaW5nIHBhcmFtZXRlcjsgdGhpcyB3aWxsIGNvbmZ1c2UgdGhlIGNvbmZpZ3VyYXRpb24KK3N5c3RlbSBpZiB5b3UgaGF2ZSBtdWx0aXBsZSBib25kaW5nIGRldmljZXMuCisKKwlGaW5hbGx5LCBzdXBwbHkgb25lIEJPTkRJTkdfU0xBVkVuPSJldGhYIiBmb3IgZWFjaCBzbGF2ZSwKK3doZXJlICJuIiBpcyBhbiBpbmNyZWFzaW5nIHZhbHVlLCBvbmUgZm9yIGVhY2ggc2xhdmUsIGFuZCAiZXRoWCIgaXMKK3RoZSBuYW1lIG9mIHRoZSBzbGF2ZSBkZXZpY2UgKGV0aDAsIGV0aDEsIGV0YykuCisKKwlXaGVuIGFsbCBjb25maWd1cmF0aW9uIGZpbGVzIGhhdmUgYmVlbiBtb2RpZmllZCBvciBjcmVhdGVkLAorbmV0d29ya2luZyBtdXN0IGJlIHJlc3RhcnRlZCBmb3IgdGhlIGNvbmZpZ3VyYXRpb24gY2hhbmdlcyB0byB0YWtlCitlZmZlY3QuICBUaGlzIGNhbiBiZSBhY2NvbXBsaXNoZWQgdmlhIHRoZSBmb2xsb3dpbmc6CisKKyMgL2V0Yy9pbml0LmQvbmV0d29yayByZXN0YXJ0CisKKwlOb3RlIHRoYXQgdGhlIG5ldHdvcmsgY29udHJvbCBzY3JpcHQgKC9zYmluL2lmZG93bikgd2lsbAorcmVtb3ZlIHRoZSBib25kaW5nIG1vZHVsZSBhcyBwYXJ0IG9mIHRoZSBuZXR3b3JrIHNodXRkb3duIHByb2Nlc3NpbmcsCitzbyBpdCBpcyBub3QgbmVjZXNzYXJ5IHRvIHJlbW92ZSB0aGUgbW9kdWxlIGJ5IGhhbmQgaWYsIGUuZy4sIHRoZQorbW9kdWxlIHBhcmFtdGVycyBoYXZlIGNoYW5nZWQuCisKKwlBbHNvLCBhdCB0aGlzIHdyaXRpbmcsIFlhU1QvWWFTVDIgd2lsbCBub3QgbWFuYWdlIGJvbmRpbmcKK2RldmljZXMgKHRoZXkgZG8gbm90IHNob3cgYm9uZGluZyBpbnRlcmZhY2VzIG9uIGl0cyBsaXN0IG9mIG5ldHdvcmsKK2RldmljZXMpLiAgSXQgaXMgbmVjZXNzYXJ5IHRvIGVkaXQgdGhlIGNvbmZpZ3VyYXRpb24gZmlsZSBieSBoYW5kIHRvCitjaGFuZ2UgdGhlIGJvbmRpbmcgY29uZmlndXJhdGlvbi4KKworCUFkZGl0aW9uYWwgZ2VuZXJhbCBvcHRpb25zIGFuZCBkZXRhaWxzIG9mIHRoZSBpZmNmZyBmaWxlCitmb3JtYXQgY2FuIGJlIGZvdW5kIGluIGFuIGV4YW1wbGUgaWZjZmcgdGVtcGxhdGUgZmlsZToKKworL2V0Yy9zeXNjb25maWcvbmV0d29yay9pZmNmZy50ZW1wbGF0ZQorCisJTm90ZSB0aGF0IHRoZSB0ZW1wbGF0ZSBkb2VzIG5vdCBkb2N1bWVudCB0aGUgdmFyaW91cyBCT05ESU5HXworc2V0dGluZ3MgZGVzY3JpYmVkIGFib3ZlLCBidXQgZG9lcyBkZXNjcmliZSBtYW55IG9mIHRoZSBvdGhlciBvcHRpb25zLgorCiszLjIgQ29uZmlndXJhdGlvbiB3aXRoIGluaXRzY3JpcHRzIHN1cHBvcnQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisJVGhpcyBzZWN0aW9uIGFwcGxpZXMgdG8gZGlzdHJvcyB1c2luZyBhIHZlcnNpb24gb2YgaW5pdHNjcmlwdHMKK3dpdGggYm9uZGluZyBzdXBwb3J0LCBmb3IgZXhhbXBsZSwgUmVkIEhhdCBMaW51eCA5IG9yIFJlZCBIYXQKK0VudGVycHJpc2UgTGludXggdmVyc2lvbiAzLiAgT24gdGhlc2Ugc3lzdGVtcywgdGhlIG5ldHdvcmsKK2luaXRpYWxpemF0aW9uIHNjcmlwdHMgaGF2ZSBzb21lIGtub3dsZWRnZSBvZiBib25kaW5nLCBhbmQgY2FuIGJlCitjb25maWd1cmVkIHRvIGNvbnRyb2wgYm9uZGluZyBkZXZpY2VzLgorCisJVGhlc2UgZGlzdHJvcyB3aWxsIG5vdCBhdXRvbWF0aWNhbGx5IGxvYWQgdGhlIG5ldHdvcmsgYWRhcHRlcgorZHJpdmVyIHVubGVzcyB0aGUgZXRoWCBkZXZpY2UgaXMgY29uZmlndXJlZCB3aXRoIGFuIElQIGFkZHJlc3MuCitCZWNhdXNlIG9mIHRoaXMgY29uc3RyYWludCwgdXNlcnMgbXVzdCBtYW51YWxseSBjb25maWd1cmUgYQorbmV0d29yay1zY3JpcHQgZmlsZSBmb3IgYWxsIHBoeXNpY2FsIGFkYXB0ZXJzIHRoYXQgd2lsbCBiZSBtZW1iZXJzIG9mCithIGJvbmRYIGxpbmsuICBOZXR3b3JrIHNjcmlwdCBmaWxlcyBhcmUgbG9jYXRlZCBpbiB0aGUgZGlyZWN0b3J5OgorCisvZXRjL3N5c2NvbmZpZy9uZXR3b3JrLXNjcmlwdHMKKworCVRoZSBmaWxlIG5hbWUgbXVzdCBiZSBwcmVmaXhlZCB3aXRoICJpZmNmZy1ldGgiIGFuZCBzdWZmaXhlZAord2l0aCB0aGUgYWRhcHRlcidzIHBoeXNpY2FsIGFkYXB0ZXIgbnVtYmVyLiAgRm9yIGV4YW1wbGUsIHRoZSBzY3JpcHQKK2ZvciBldGgwIHdvdWxkIGJlIG5hbWVkIC9ldGMvc3lzY29uZmlnL25ldHdvcmstc2NyaXB0cy9pZmNmZy1ldGgwLgorUGxhY2UgdGhlIGZvbGxvd2luZyB0ZXh0IGluIHRoZSBmaWxlOgorCitERVZJQ0U9ZXRoMAorVVNFUkNUTD1ubworT05CT09UPXllcworTUFTVEVSPWJvbmQwCitTTEFWRT15ZXMKK0JPT1RQUk9UTz1ub25lCisKKwlUaGUgREVWSUNFPSBsaW5lIHdpbGwgYmUgZGlmZmVyZW50IGZvciBldmVyeSBldGhYIGRldmljZSBhbmQKK211c3QgY29ycmVzcG9uZCB3aXRoIHRoZSBuYW1lIG9mIHRoZSBmaWxlLCBpLmUuLCBpZmNmZy1ldGgxIG11c3QgaGF2ZQorYSBkZXZpY2UgbGluZSBvZiBERVZJQ0U9ZXRoMS4gIFRoZSBzZXR0aW5nIG9mIHRoZSBNQVNURVI9IGxpbmUgd2lsbAorYWxzbyBkZXBlbmQgb24gdGhlIGZpbmFsIGJvbmRpbmcgaW50ZXJmYWNlIG5hbWUgY2hvc2VuIGZvciB5b3VyIGJvbmQuCitBcyB3aXRoIG90aGVyIG5ldHdvcmsgZGV2aWNlcywgdGhlc2UgdHlwaWNhbGx5IHN0YXJ0IGF0IDAsIGFuZCBnbyB1cAorb25lIGZvciBlYWNoIGRldmljZSwgaS5lLiwgdGhlIGZpcnN0IGJvbmRpbmcgaW5zdGFuY2UgaXMgYm9uZDAsIHRoZQorc2Vjb25kIGlzIGJvbmQxLCBhbmQgc28gb24uCisKKwlOZXh0LCBjcmVhdGUgYSBib25kIG5ldHdvcmsgc2NyaXB0LiAgVGhlIGZpbGUgbmFtZSBmb3IgdGhpcworc2NyaXB0IHdpbGwgYmUgL2V0Yy9zeXNjb25maWcvbmV0d29yay1zY3JpcHRzL2lmY2ZnLWJvbmRYIHdoZXJlIFggaXMKK3RoZSBudW1iZXIgb2YgdGhlIGJvbmQuICBGb3IgYm9uZDAgdGhlIGZpbGUgaXMgbmFtZWQgImlmY2ZnLWJvbmQwIiwKK2ZvciBib25kMSBpdCBpcyBuYW1lZCAiaWZjZmctYm9uZDEiLCBhbmQgc28gb24uICBXaXRoaW4gdGhhdCBmaWxlLAorcGxhY2UgdGhlIGZvbGxvd2luZyB0ZXh0OgorCitERVZJQ0U9Ym9uZDAKK0lQQUREUj0xOTIuMTY4LjEuMQorTkVUTUFTSz0yNTUuMjU1LjI1NS4wCitORVRXT1JLPTE5Mi4xNjguMS4wCitCUk9BRENBU1Q9MTkyLjE2OC4xLjI1NQorT05CT09UPXllcworQk9PVFBST1RPPW5vbmUKK1VTRVJDVEw9bm8KKworCUJlIHN1cmUgdG8gY2hhbmdlIHRoZSBuZXR3b3JraW5nIHNwZWNpZmljIGxpbmVzIChJUEFERFIsCitORVRNQVNLLCBORVRXT1JLIGFuZCBCUk9BRENBU1QpIHRvIG1hdGNoIHlvdXIgbmV0d29yayBjb25maWd1cmF0aW9uLgorCisJRmluYWxseSwgaXQgaXMgbmVjZXNzYXJ5IHRvIGVkaXQgL2V0Yy9tb2R1bGVzLmNvbmYgdG8gbG9hZCB0aGUKK2JvbmRpbmcgbW9kdWxlIHdoZW4gdGhlIGJvbmQwIGludGVyZmFjZSBpcyBicm91Z2h0IHVwLiAgVGhlIGZvbGxvd2luZworc2FtcGxlIGxpbmVzIGluIC9ldGMvbW9kdWxlcy5jb25mIHdpbGwgbG9hZCB0aGUgYm9uZGluZyBtb2R1bGUsIGFuZAorc2VsZWN0IGl0cyBvcHRpb25zOgorCithbGlhcyBib25kMCBib25kaW5nCitvcHRpb25zIGJvbmQwIG1vZGU9YmFsYW5jZS1hbGIgbWlpbW9uPTEwMAorCisJUmVwbGFjZSB0aGUgc2FtcGxlIHBhcmFtZXRlcnMgd2l0aCB0aGUgYXBwcm9wcmlhdGUgc2V0IG9mCitvcHRpb25zIGZvciB5b3VyIGNvbmZpZ3VyYXRpb24uCisKKwlGaW5hbGx5IHJ1biAiL2V0Yy9yYy5kL2luaXQuZC9uZXR3b3JrIHJlc3RhcnQiIGFzIHJvb3QuICBUaGlzCit3aWxsIHJlc3RhcnQgdGhlIG5ldHdvcmtpbmcgc3Vic3lzdGVtIGFuZCB5b3VyIGJvbmQgbGluayBzaG91bGQgYmUgbm93Cit1cCBhbmQgcnVubmluZy4KKworCiszLjMgQ29uZmlndXJpbmcgQm9uZGluZyBNYW51YWxseQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworCVRoaXMgc2VjdGlvbiBhcHBsaWVzIHRvIGRpc3Ryb3Mgd2hvc2UgbmV0d29yayBpbml0aWFsaXphdGlvbgorc2NyaXB0cyAodGhlIHN5c2NvbmZpZyBvciBpbml0c2NyaXB0cyBwYWNrYWdlKSBkbyBub3QgaGF2ZSBzcGVjaWZpYwora25vd2xlZGdlIG9mIGJvbmRpbmcuICBPbmUgc3VjaCBkaXN0cm8gaXMgU3VTRSBMaW51eCBFbnRlcnByaXNlIFNlcnZlcgordmVyc2lvbiA4LgorCisJVGhlIGdlbmVyYWwgbWV0aG9kb2xvZ3kgZm9yIHRoZXNlIHN5c3RlbXMgaXMgdG8gcGxhY2UgdGhlCitib25kaW5nIG1vZHVsZSBwYXJhbWV0ZXJzIGludG8gL2V0Yy9tb2Rwcm9iZS5jb25mLCB0aGVuIGFkZCBtb2Rwcm9iZQorYW5kL29yIGlmZW5zbGF2ZSBjb21tYW5kcyB0byB0aGUgc3lzdGVtJ3MgZ2xvYmFsIGluaXQgc2NyaXB0LiAgVGhlCituYW1lIG9mIHRoZSBnbG9iYWwgaW5pdCBzY3JpcHQgZGlmZmVyczsgZm9yIHN5c2NvbmZpZywgaXQgaXMKKy9ldGMvaW5pdC5kL2Jvb3QubG9jYWwgYW5kIGZvciBpbml0c2NyaXB0cyBpdCBpcyAvZXRjL3JjLmQvcmMubG9jYWwuCisKKwlGb3IgZXhhbXBsZSwgaWYgeW91IHdhbnRlZCB0byBtYWtlIGEgc2ltcGxlIGJvbmQgb2YgdHdvIGUxMDAKK2RldmljZXMgKHByZXN1bWVkIHRvIGJlIGV0aDAgYW5kIGV0aDEpLCBhbmQgaGF2ZSBpdCBwZXJzaXN0IGFjcm9zcworcmVib290cywgZWRpdCB0aGUgYXBwcm9wcmlhdGUgZmlsZSAoL2V0Yy9pbml0LmQvYm9vdC5sb2NhbCBvcgorL2V0Yy9yYy5kL3JjLmxvY2FsKSwgYW5kIGFkZCB0aGUgZm9sbG93aW5nOgorCittb2Rwcm9iZSBib25kaW5nIC1vYm9uZDAgbW9kZT1iYWxhbmNlLWFsYiBtaWltb249MTAwCittb2Rwcm9iZSBlMTAwCitpZmNvbmZpZyBib25kMCAxOTIuMTY4LjEuMSBuZXRtYXNrIDI1NS4yNTUuMjU1LjAgdXAKK2lmZW5zbGF2ZSBib25kMCBldGgwCitpZmVuc2xhdmUgYm9uZDAgZXRoMQorCisJUmVwbGFjZSB0aGUgZXhhbXBsZSBib25kaW5nIG1vZHVsZSBwYXJhbWV0ZXJzIGFuZCBib25kMAorbmV0d29yayBjb25maWd1cmF0aW9uIChJUCBhZGRyZXNzLCBuZXRtYXNrLCBldGMpIHdpdGggdGhlIGFwcHJvcHJpYXRlCit2YWx1ZXMgZm9yIHlvdXIgY29uZmlndXJhdGlvbi4gIFRoZSBhYm92ZSBleGFtcGxlIGxvYWRzIHRoZSBib25kaW5nCittb2R1bGUgd2l0aCB0aGUgbmFtZSAiYm9uZDAsIiB0aGlzIHNpbXBsaWZpZXMgdGhlIG5hbWluZyBpZiBtdWx0aXBsZQorYm9uZGluZyBtb2R1bGVzIGFyZSBsb2FkZWQgKGVhY2ggc3VjY2Vzc2l2ZSBpbnN0YW5jZSBvZiB0aGUgbW9kdWxlIGlzCitnaXZlbiBhIGRpZmZlcmVudCBuYW1lLCBhbmQgdGhlIG1vZHVsZSBpbnN0YW5jZSBuYW1lcyBtYXRjaCB0aGUKK2JvbmRpbmcgaW50ZXJmYWNlIG5hbWVzKS4KKworCVVuZm9ydHVuYXRlbHksIHRoaXMgbWV0aG9kIHdpbGwgbm90IHByb3ZpZGUgc3VwcG9ydCBmb3IgdGhlCitpZnVwIGFuZCBpZmRvd24gc2NyaXB0cyBvbiB0aGUgYm9uZCBkZXZpY2VzLiAgVG8gcmVsb2FkIHRoZSBib25kaW5nCitjb25maWd1cmF0aW9uLCBpdCBpcyBuZWNlc3NhcnkgdG8gcnVuIHRoZSBpbml0aWFsaXphdGlvbiBzY3JpcHQsIGUuZy4sCisKKyMgL2V0Yy9pbml0LmQvYm9vdC5sb2NhbAorCisJb3IKKworIyAvZXRjL3JjLmQvcmMubG9jYWwKKworCUl0IG1heSBiZSBkZXNpcmFibGUgaW4gc3VjaCBhIGNhc2UgdG8gY3JlYXRlIGEgc2VwYXJhdGUgc2NyaXB0Cit3aGljaCBvbmx5IGluaXRpYWxpemVzIHRoZSBib25kaW5nIGNvbmZpZ3VyYXRpb24sIHRoZW4gY2FsbCB0aGF0CitzZXBhcmF0ZSBzY3JpcHQgZnJvbSB3aXRoaW4gYm9vdC5sb2NhbC4gIFRoaXMgYWxsb3dzIGZvciBib25kaW5nIHRvIGJlCitlbmFibGVkIHdpdGhvdXQgcmUtcnVubmluZyB0aGUgZW50aXJlIGdsb2JhbCBpbml0IHNjcmlwdC4KKworCVRvIHNodXQgZG93biB0aGUgYm9uZGluZyBkZXZpY2VzLCBpdCBpcyBuZWNlc3NhcnkgdG8gZmlyc3QKK21hcmsgdGhlIGJvbmRpbmcgZGV2aWNlIGl0c2VsZiBhcyBiZWluZyBkb3duLCB0aGVuIHJlbW92ZSB0aGUKK2FwcHJvcHJpYXRlIGRldmljZSBkcml2ZXIgbW9kdWxlcy4gIEZvciBvdXIgZXhhbXBsZSBhYm92ZSwgeW91IGNhbiBkbwordGhlIGZvbGxvd2luZzoKKworIyBpZmNvbmZpZyBib25kMCBkb3duCisjIHJtbW9kIGJvbmQwCisjIHJtbW9kIGUxMDAKKworCUFnYWluLCBmb3IgY29udmVuaWVuY2UsIGl0IG1heSBiZSBkZXNpcmFibGUgdG8gY3JlYXRlIGEgc2NyaXB0Cit3aXRoIHRoZXNlIGNvbW1hbmRzLgorCisKKzMuNCBDb25maWd1cmluZyBNdWx0aXBsZSBCb25kcworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKwlUaGlzIHNlY3Rpb24gY29udGFpbnMgaW5mb3JtYXRpb24gb24gY29uZmlndXJpbmcgbXVsdGlwbGUKK2JvbmRpbmcgZGV2aWNlcyB3aXRoIGRpZmZlcmluZyBvcHRpb25zLiAgSWYgeW91IHJlcXVpcmUgbXVsdGlwbGUKK2JvbmRpbmcgZGV2aWNlcywgYnV0IGFsbCB3aXRoIHRoZSBzYW1lIG9wdGlvbnMsIHNlZSB0aGUgIm1heF9ib25kcyIKK21vZHVsZSBwYXJhbXRlciwgZG9jdW1lbnRlZCBhYm92ZS4KKworCVRvIGNyZWF0ZSBtdWx0aXBsZSBib25kaW5nIGRldmljZXMgd2l0aCBkaWZmZXJpbmcgb3B0aW9ucywgaXQKK2lzIG5lY2Vzc2FyeSB0byBsb2FkIHRoZSBib25kaW5nIGRyaXZlciBtdWx0aXBsZSB0aW1lcy4gIE5vdGUgdGhhdAorY3VycmVudCB2ZXJzaW9ucyBvZiB0aGUgc3lzY29uZmlnIG5ldHdvcmsgaW5pdGlhbGl6YXRpb24gc2NyaXB0cworaGFuZGxlIHRoaXMgYXV0b21hdGljYWxseTsgaWYgeW91ciBkaXN0cm8gdXNlcyB0aGVzZSBzY3JpcHRzLCBubworc3BlY2lhbCBhY3Rpb24gaXMgbmVlZGVkLiAgU2VlIHRoZSBzZWN0aW9uIENvbmZpZ3VyaW5nIEJvbmRpbmcKK0RldmljZXMsIGFib3ZlLCBpZiB5b3UncmUgbm90IHN1cmUgYWJvdXQgeW91ciBuZXR3b3JrIGluaXRpYWxpemF0aW9uCitzY3JpcHRzLgorCisJVG8gbG9hZCBtdWx0aXBsZSBpbnN0YW5jZXMgb2YgdGhlIG1vZHVsZSwgaXQgaXMgbmVjZXNzYXJ5IHRvCitzcGVjaWZ5IGEgZGlmZmVyZW50IG5hbWUgZm9yIGVhY2ggaW5zdGFuY2UgKHRoZSBtb2R1bGUgbG9hZGluZyBzeXN0ZW0KK3JlcXVpcmVzIHRoYXQgZXZlcnkgbG9hZGVkIG1vZHVsZSwgZXZlbiBtdWx0aXBsZSBpbnN0YW5jZXMgb2YgdGhlIHNhbWUKK21vZHVsZSwgaGF2ZSBhIHVuaXF1ZSBuYW1lKS4gIFRoaXMgaXMgYWNjb21wbGlzaGVkIGJ5IHN1cHBseWluZworbXVsdGlwbGUgc2V0cyBvZiBib25kaW5nIG9wdGlvbnMgaW4gL2V0Yy9tb2Rwcm9iZS5jb25mLCBmb3IgZXhhbXBsZToKKwkKK2FsaWFzIGJvbmQwIGJvbmRpbmcKK29wdGlvbnMgYm9uZDAgLW8gYm9uZDAgbW9kZT1iYWxhbmNlLXJyIG1paW1vbj0xMDAKKworYWxpYXMgYm9uZDEgYm9uZGluZworb3B0aW9ucyBib25kMSAtbyBib25kMSBtb2RlPWJhbGFuY2UtYWxiIG1paW1vbj01MAorCisJd2lsbCBsb2FkIHRoZSBib25kaW5nIG1vZHVsZSB0d28gdGltZXMuICBUaGUgZmlyc3QgaW5zdGFuY2UgaXMKK25hbWVkICJib25kMCIgYW5kIGNyZWF0ZXMgdGhlIGJvbmQwIGRldmljZSBpbiBiYWxhbmNlLXJyIG1vZGUgd2l0aCBhbgorbWlpbW9uIG9mIDEwMC4gIFRoZSBzZWNvbmQgaW5zdGFuY2UgaXMgbmFtZWQgImJvbmQxIiBhbmQgY3JlYXRlcyB0aGUKK2JvbmQxIGRldmljZSBpbiBiYWxhbmNlLWFsYiBtb2RlIHdpdGggYW4gbWlpbW9uIG9mIDUwLgorCisJVGhpcyBtYXkgYmUgcmVwZWF0ZWQgYW55IG51bWJlciBvZiB0aW1lcywgc3BlY2lmeWluZyBhIG5ldyBhbmQKK3VuaXF1ZSBuYW1lIGluIHBsYWNlIG9mIGJvbmQwIG9yIGJvbmQxIGZvciBlYWNoIGluc3RhbmNlLgorCisJV2hlbiB0aGUgYXBwcm9wcmlhdGUgbW9kdWxlIHBhcmFtdGVycyBhcmUgaW4gcGxhY2UsIHRoZW4KK2NvbmZpZ3VyZSBib25kaW5nIGFjY29yZGluZyB0byB0aGUgaW5zdHJ1Y3Rpb25zIGZvciB5b3VyIGRpc3Ryby4KKworNS4gUXVlcnlpbmcgQm9uZGluZyBDb25maWd1cmF0aW9uIAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKzUuMSBCb25kaW5nIENvbmZpZ3VyYXRpb24KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworCUVhY2ggYm9uZGluZyBkZXZpY2UgaGFzIGEgcmVhZC1vbmx5IGZpbGUgcmVzaWRpbmcgaW4gdGhlCisvcHJvYy9uZXQvYm9uZGluZyBkaXJlY3RvcnkuICBUaGUgZmlsZSBjb250ZW50cyBpbmNsdWRlIGluZm9ybWF0aW9uCithYm91dCB0aGUgYm9uZGluZyBjb25maWd1cmF0aW9uLCBvcHRpb25zIGFuZCBzdGF0ZSBvZiBlYWNoIHNsYXZlLgorCisJRm9yIGV4YW1wbGUsIHRoZSBjb250ZW50cyBvZiAvcHJvYy9uZXQvYm9uZGluZy9ib25kMCBhZnRlciB0aGUKK2RyaXZlciBpcyBsb2FkZWQgd2l0aCBwYXJhbWV0ZXJzIG9mIG1vZGU9MCBhbmQgbWlpbW9uPTEwMDAgaXMKK2dlbmVyYWxseSBhcyBmb2xsb3dzOgorCisJRXRoZXJuZXQgQ2hhbm5lbCBCb25kaW5nIERyaXZlcjogMi42LjEgKE9jdG9iZXIgMjksIDIwMDQpCisgICAgICAgIEJvbmRpbmcgTW9kZTogbG9hZCBiYWxhbmNpbmcgKHJvdW5kLXJvYmluKQorICAgICAgICBDdXJyZW50bHkgQWN0aXZlIFNsYXZlOiBldGgwCisgICAgICAgIE1JSSBTdGF0dXM6IHVwCisgICAgICAgIE1JSSBQb2xsaW5nIEludGVydmFsIChtcyk6IDEwMDAKKyAgICAgICAgVXAgRGVsYXkgKG1zKTogMAorICAgICAgICBEb3duIERlbGF5IChtcyk6IDAKKworICAgICAgICBTbGF2ZSBJbnRlcmZhY2U6IGV0aDEKKyAgICAgICAgTUlJIFN0YXR1czogdXAKKyAgICAgICAgTGluayBGYWlsdXJlIENvdW50OiAxCisKKyAgICAgICAgU2xhdmUgSW50ZXJmYWNlOiBldGgwCisgICAgICAgIE1JSSBTdGF0dXM6IHVwCisgICAgICAgIExpbmsgRmFpbHVyZSBDb3VudDogMQorCisJVGhlIHByZWNpc2UgZm9ybWF0IGFuZCBjb250ZW50cyB3aWxsIGNoYW5nZSBkZXBlbmRpbmcgdXBvbiB0aGUKK2JvbmRpbmcgY29uZmlndXJhdGlvbiwgc3RhdGUsIGFuZCB2ZXJzaW9uIG9mIHRoZSBib25kaW5nIGRyaXZlci4KKworNS4yIE5ldHdvcmsgY29uZmlndXJhdGlvbgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisJVGhlIG5ldHdvcmsgY29uZmlndXJhdGlvbiBjYW4gYmUgaW5zcGVjdGVkIHVzaW5nIHRoZSBpZmNvbmZpZworY29tbWFuZC4gIEJvbmRpbmcgZGV2aWNlcyB3aWxsIGhhdmUgdGhlIE1BU1RFUiBmbGFnIHNldDsgQm9uZGluZyBzbGF2ZQorZGV2aWNlcyB3aWxsIGhhdmUgdGhlIFNMQVZFIGZsYWcgc2V0LiAgVGhlIGlmY29uZmlnIG91dHB1dCBkb2VzIG5vdAorY29udGFpbiBpbmZvcm1hdGlvbiBvbiB3aGljaCBzbGF2ZXMgYXJlIGFzc29jaWF0ZWQgd2l0aCB3aGljaCBtYXN0ZXJzLgorCisJSW4gdGhlIGV4YW1wbGUgYmVsb3csIHRoZSBib25kMCBpbnRlcmZhY2UgaXMgdGhlIG1hc3RlcgorKE1BU1RFUikgd2hpbGUgZXRoMCBhbmQgZXRoMSBhcmUgc2xhdmVzIChTTEFWRSkuIE5vdGljZSBhbGwgc2xhdmVzIG9mCitib25kMCBoYXZlIHRoZSBzYW1lIE1BQyBhZGRyZXNzIChIV2FkZHIpIGFzIGJvbmQwIGZvciBhbGwgbW9kZXMgZXhjZXB0CitUTEIgYW5kIEFMQiB0aGF0IHJlcXVpcmUgYSB1bmlxdWUgTUFDIGFkZHJlc3MgZm9yIGVhY2ggc2xhdmUuCisKKyMgL3NiaW4vaWZjb25maWcKK2JvbmQwICAgICBMaW5rIGVuY2FwOkV0aGVybmV0ICBIV2FkZHIgMDA6QzA6RjA6MUY6Mzc6QjQKKyAgICAgICAgICBpbmV0IGFkZHI6WFhYLlhYWC5YWFguWVlZICBCY2FzdDpYWFguWFhYLlhYWC4yNTUgIE1hc2s6MjU1LjI1NS4yNTIuMAorICAgICAgICAgIFVQIEJST0FEQ0FTVCBSVU5OSU5HIE1BU1RFUiBNVUxUSUNBU1QgIE1UVToxNTAwICBNZXRyaWM6MQorICAgICAgICAgIFJYIHBhY2tldHM6NzIyNDc5NCBlcnJvcnM6MCBkcm9wcGVkOjAgb3ZlcnJ1bnM6MCBmcmFtZTowCisgICAgICAgICAgVFggcGFja2V0czozMjg2NjQ3IGVycm9yczoxIGRyb3BwZWQ6MCBvdmVycnVuczoxIGNhcnJpZXI6MAorICAgICAgICAgIGNvbGxpc2lvbnM6MCB0eHF1ZXVlbGVuOjAKKworZXRoMCAgICAgIExpbmsgZW5jYXA6RXRoZXJuZXQgIEhXYWRkciAwMDpDMDpGMDoxRjozNzpCNAorICAgICAgICAgIGluZXQgYWRkcjpYWFguWFhYLlhYWC5ZWVkgIEJjYXN0OlhYWC5YWFguWFhYLjI1NSAgTWFzazoyNTUuMjU1LjI1Mi4wCisgICAgICAgICAgVVAgQlJPQURDQVNUIFJVTk5JTkcgU0xBVkUgTVVMVElDQVNUICBNVFU6MTUwMCAgTWV0cmljOjEKKyAgICAgICAgICBSWCBwYWNrZXRzOjM1NzMwMjUgZXJyb3JzOjAgZHJvcHBlZDowIG92ZXJydW5zOjAgZnJhbWU6MAorICAgICAgICAgIFRYIHBhY2tldHM6MTY0MzE2NyBlcnJvcnM6MSBkcm9wcGVkOjAgb3ZlcnJ1bnM6MSBjYXJyaWVyOjAKKyAgICAgICAgICBjb2xsaXNpb25zOjAgdHhxdWV1ZWxlbjoxMDAKKyAgICAgICAgICBJbnRlcnJ1cHQ6MTAgQmFzZSBhZGRyZXNzOjB4MTA4MAorCitldGgxICAgICAgTGluayBlbmNhcDpFdGhlcm5ldCAgSFdhZGRyIDAwOkMwOkYwOjFGOjM3OkI0CisgICAgICAgICAgaW5ldCBhZGRyOlhYWC5YWFguWFhYLllZWSAgQmNhc3Q6WFhYLlhYWC5YWFguMjU1ICBNYXNrOjI1NS4yNTUuMjUyLjAKKyAgICAgICAgICBVUCBCUk9BRENBU1QgUlVOTklORyBTTEFWRSBNVUxUSUNBU1QgIE1UVToxNTAwICBNZXRyaWM6MQorICAgICAgICAgIFJYIHBhY2tldHM6MzY1MTc2OSBlcnJvcnM6MCBkcm9wcGVkOjAgb3ZlcnJ1bnM6MCBmcmFtZTowCisgICAgICAgICAgVFggcGFja2V0czoxNjQzNDgwIGVycm9yczowIGRyb3BwZWQ6MCBvdmVycnVuczowIGNhcnJpZXI6MAorICAgICAgICAgIGNvbGxpc2lvbnM6MCB0eHF1ZXVlbGVuOjEwMAorICAgICAgICAgIEludGVycnVwdDo5IEJhc2UgYWRkcmVzczoweDE0MDAKKworNi4gU3dpdGNoIENvbmZpZ3VyYXRpb24KKz09PT09PT09PT09PT09PT09PT09PT09CisKKwlGb3IgdGhpcyBzZWN0aW9uLCAic3dpdGNoIiByZWZlcnMgdG8gd2hhdGV2ZXIgc3lzdGVtIHRoZQorYm9uZGVkIGRldmljZXMgYXJlIGRpcmVjdGx5IGNvbm5lY3RlZCB0byAoaS5lLiwgd2hlcmUgdGhlIG90aGVyIGVuZCBvZgordGhlIGNhYmxlIHBsdWdzIGludG8pLiAgVGhpcyBtYXkgYmUgYW4gYWN0dWFsIGRlZGljYXRlZCBzd2l0Y2ggZGV2aWNlLAorb3IgaXQgbWF5IGJlIGFub3RoZXIgcmVndWxhciBzeXN0ZW0gKGUuZy4sIGFub3RoZXIgY29tcHV0ZXIgcnVubmluZworTGludXgpLAorCisJVGhlIGFjdGl2ZS1iYWNrdXAsIGJhbGFuY2UtdGxiIGFuZCBiYWxhbmNlLWFsYiBtb2RlcyBkbyBub3QKK3JlcXVpcmUgYW55IHNwZWNpZmljIGNvbmZpZ3VyYXRpb24gb2YgdGhlIHN3aXRjaC4KKworCVRoZSA4MDIuM2FkIG1vZGUgcmVxdWlyZXMgdGhhdCB0aGUgc3dpdGNoIGhhdmUgdGhlIGFwcHJvcHJpYXRlCitwb3J0cyBjb25maWd1cmVkIGFzIGFuIDgwMi4zYWQgYWdncmVnYXRpb24uICBUaGUgcHJlY2lzZSBtZXRob2QgdXNlZAordG8gY29uZmlndXJlIHRoaXMgdmFyaWVzIGZyb20gc3dpdGNoIHRvIHN3aXRjaCwgYnV0LCBmb3IgZXhhbXBsZSwgYQorQ2lzY28gMzU1MCBzZXJpZXMgc3dpdGNoIHJlcXVpcmVzIHRoYXQgdGhlIGFwcHJvcHJpYXRlIHBvcnRzIGZpcnN0IGJlCitncm91cGVkIHRvZ2V0aGVyIGluIGEgc2luZ2xlIGV0aGVyY2hhbm5lbCBpbnN0YW5jZSwgdGhlbiB0aGF0CitldGhlcmNoYW5uZWwgaXMgc2V0IHRvIG1vZGUgImxhY3AiIHRvIGVuYWJsZSA4MDIuM2FkIChpbnN0ZWFkIG9mCitzdGFuZGFyZCBFdGhlckNoYW5uZWwpLgorCisJVGhlIGJhbGFuY2UtcnIsIGJhbGFuY2UteG9yIGFuZCBicm9hZGNhc3QgbW9kZXMgZ2VuZXJhbGx5CityZXF1aXJlIHRoYXQgdGhlIHN3aXRjaCBoYXZlIHRoZSBhcHByb3ByaWF0ZSBwb3J0cyBncm91cGVkIHRvZ2V0aGVyLgorVGhlIG5vbWVuY2xhdHVyZSBmb3Igc3VjaCBhIGdyb3VwIGRpZmZlcnMgYmV0d2VlbiBzd2l0Y2hlcywgaXQgbWF5IGJlCitjYWxsZWQgYW4gImV0aGVyY2hhbm5lbCIgKGFzIGluIHRoZSBDaXNjbyBleGFtcGxlLCBhYm92ZSksIGEgInRydW5rCitncm91cCIgb3Igc29tZSBvdGhlciBzaW1pbGFyIHZhcmlhdGlvbi4gIEZvciB0aGVzZSBtb2RlcywgZWFjaCBzd2l0Y2gKK3dpbGwgYWxzbyBoYXZlIGl0cyBvd24gY29uZmlndXJhdGlvbiBvcHRpb25zIGZvciB0aGUgc3dpdGNoJ3MgdHJhbnNtaXQKK3BvbGljeSB0byB0aGUgYm9uZC4gIFR5cGljYWwgY2hvaWNlcyBpbmNsdWRlIFhPUiBvZiBlaXRoZXIgdGhlIE1BQyBvcgorSVAgYWRkcmVzc2VzLiAgVGhlIHRyYW5zbWl0IHBvbGljeSBvZiB0aGUgdHdvIHBlZXJzIGRvZXMgbm90IG5lZWQgdG8KK21hdGNoLiAgRm9yIHRoZXNlIHRocmVlIG1vZGVzLCB0aGUgYm9uZGluZyBtb2RlIHJlYWxseSBzZWxlY3RzIGEKK3RyYW5zbWl0IHBvbGljeSBmb3IgYW4gRXRoZXJDaGFubmVsIGdyb3VwOyBhbGwgdGhyZWUgd2lsbCBpbnRlcm9wZXJhdGUKK3dpdGggYW5vdGhlciBFdGhlckNoYW5uZWwgZ3JvdXAuCisKKworNy4gODAyLjFxIFZMQU4gU3VwcG9ydAorPT09PT09PT09PT09PT09PT09PT09PQorCisJSXQgaXMgcG9zc2libGUgdG8gY29uZmlndXJlIFZMQU4gZGV2aWNlcyBvdmVyIGEgYm9uZCBpbnRlcmZhY2UKK3VzaW5nIHRoZSA4MDIxcSBkcml2ZXIuICBIb3dldmVyLCBvbmx5IHBhY2tldHMgY29taW5nIGZyb20gdGhlIDgwMjFxCitkcml2ZXIgYW5kIHBhc3NpbmcgdGhyb3VnaCBib25kaW5nIHdpbGwgYmUgdGFnZ2VkIGJ5IGRlZmF1bHQuICBTZWxmCitnZW5lcmF0ZWQgcGFja2V0cywgZm9yIGV4YW1wbGUsIGJvbmRpbmcncyBsZWFybmluZyBwYWNrZXRzIG9yIEFSUAorcGFja2V0cyBnZW5lcmF0ZWQgYnkgZWl0aGVyIEFMQiBtb2RlIG9yIHRoZSBBUlAgbW9uaXRvciBtZWNoYW5pc20sIGFyZQordGFnZ2VkIGludGVybmFsbHkgYnkgYm9uZGluZyBpdHNlbGYuICBBcyBhIHJlc3VsdCwgYm9uZGluZyBtdXN0CisibGVhcm4iIHRoZSBWTEFOIElEcyBjb25maWd1cmVkIGFib3ZlIGl0LCBhbmQgdXNlIHRob3NlIElEcyB0byB0YWcKK3NlbGYgZ2VuZXJhdGVkIHBhY2tldHMuCisKKwlGb3IgcmVhc29ucyBvZiBzaW1wbGljaXR5LCBhbmQgdG8gc3VwcG9ydCB0aGUgdXNlIG9mIGFkYXB0ZXJzCit0aGF0IGNhbiBkbyBWTEFOIGhhcmR3YXJlIGFjY2VsZXJhdGlvbiBvZmZsb2RpbmcsIHRoZSBib25kaW5nCitpbnRlcmZhY2UgZGVjbGFyZXMgaXRzZWxmIGFzIGZ1bGx5IGhhcmR3YXJlIG9mZmxvYWluZyBjYXBhYmxlLCBpdCBnZXRzCit0aGUgYWRkX3ZpZC9raWxsX3ZpZCBub3RpZmljYXRpb25zIHRvIGdhdGhlciB0aGUgbmVjZXNzYXJ5CitpbmZvcm1hdGlvbiwgYW5kIGl0IHByb3BhZ2F0ZXMgdGhvc2UgYWN0aW9ucyB0byB0aGUgc2xhdmVzLiAgSW4gY2FzZQorb2YgbWl4ZWQgYWRhcHRlciB0eXBlcywgaGFyZHdhcmUgYWNjZWxlcmF0ZWQgdGFnZ2VkIHBhY2tldHMgdGhhdAorc2hvdWxkIGdvIHRocm91Z2ggYW4gYWRhcHRlciB0aGF0IGlzIG5vdCBvZmZsb2FkaW5nIGNhcGFibGUgYXJlCisidW4tYWNjZWxlcmF0ZWQiIGJ5IHRoZSBib25kaW5nIGRyaXZlciBzbyB0aGUgVkxBTiB0YWcgc2l0cyBpbiB0aGUKK3JlZ3VsYXIgbG9jYXRpb24uCisKKwlWTEFOIGludGVyZmFjZXMgKm11c3QqIGJlIGFkZGVkIG9uIHRvcCBvZiBhIGJvbmRpbmcgaW50ZXJmYWNlCitvbmx5IGFmdGVyIGVuc2xhdmluZyBhdCBsZWFzdCBvbmUgc2xhdmUuICBUaGUgYm9uZGluZyBpbnRlcmZhY2UgaGFzIGEKK2hhcmR3YXJlIGFkZHJlc3Mgb2YgMDA6MDA6MDA6MDA6MDA6MDAgdW50aWwgdGhlIGZpcnN0IHNsYXZlIGlzIGFkZGVkLgorSWYgdGhlIFZMQU4gaW50ZXJmYWNlIGlzIGNyZWF0ZWQgcHJpb3IgdG8gdGhlIGZpcnN0IGVuc2xhdmVtZW50LCBpdAord291bGQgcGljayB1cCB0aGUgYWxsLXplcm9lcyBoYXJkd2FyZSBhZGRyZXNzLiAgT25jZSB0aGUgZmlyc3Qgc2xhdmUKK2lzIGF0dGFjaGVkIHRvIHRoZSBib25kLCB0aGUgYm9uZCBkZXZpY2UgaXRzZWxmIHdpbGwgcGljayB1cCB0aGUKK3NsYXZlJ3MgaGFyZHdhcmUgYWRkcmVzcywgd2hpY2ggaXMgdGhlbiBhdmFpbGFibGUgZm9yIHRoZSBWTEFOIGRldmljZS4KKworCUFsc28sIGJlIGF3YXJlIHRoYXQgYSBzaW1pbGFyIHByb2JsZW0gY2FuIG9jY3VyIGlmIGFsbCBzbGF2ZXMKK2FyZSByZWxlYXNlZCBmcm9tIGEgYm9uZCB0aGF0IHN0aWxsIGhhcyBvbmUgb3IgbW9yZSBWTEFOIGludGVyZmFjZXMgb24KK3RvcCBvZiBpdC4gIFdoZW4gYSBuZXcgc2xhdmUgaXMgYWRkZWQsIHRoZSBib25kaW5nIGludGVyZmFjZSB3aWxsCitvYnRhaW4gaXRzIGhhcmR3YXJlIGFkZHJlc3MgZnJvbSB0aGUgZmlyc3Qgc2xhdmUsIHdoaWNoIG1pZ2h0IG5vdAorbWF0Y2ggdGhlIGhhcmR3YXJlIGFkZHJlc3Mgb2YgdGhlIFZMQU4gaW50ZXJmYWNlcyAod2hpY2ggd2FzCit1bHRpbWF0ZWx5IGNvcGllZCBmcm9tIGFuIGVhcmxpZXIgc2xhdmUpLgorCisJVGhlcmUgYXJlIHR3byBtZXRob2RzIHRvIGluc3VyZSB0aGF0IHRoZSBWTEFOIGRldmljZSBvcGVyYXRlcword2l0aCB0aGUgY29ycmVjdCBoYXJkd2FyZSBhZGRyZXNzIGlmIGFsbCBzbGF2ZXMgYXJlIHJlbW92ZWQgZnJvbSBhCitib25kIGludGVyZmFjZToKKworCTEuIFJlbW92ZSBhbGwgVkxBTiBpbnRlcmZhY2VzIHRoZW4gcmVjcmVhdGUgdGhlbQorCisJMi4gU2V0IHRoZSBib25kaW5nIGludGVyZmFjZSdzIGhhcmR3YXJlIGFkZHJlc3Mgc28gdGhhdCBpdAorbWF0Y2hlcyB0aGUgaGFyZHdhcmUgYWRkcmVzcyBvZiB0aGUgVkxBTiBpbnRlcmZhY2VzLgorCisJTm90ZSB0aGF0IGNoYW5naW5nIGEgVkxBTiBpbnRlcmZhY2UncyBIVyBhZGRyZXNzIHdvdWxkIHNldCB0aGUKK3VuZGVybHlpbmcgZGV2aWNlIC0tIGkuZS4gdGhlIGJvbmRpbmcgaW50ZXJmYWNlIC0tIHRvIHByb21pc2NvdW9zCittb2RlLCB3aGljaCBtaWdodCBub3QgYmUgd2hhdCB5b3Ugd2FudC4KKworCis4LiBMaW5rIE1vbml0b3JpbmcKKz09PT09PT09PT09PT09PT09PQorCisJVGhlIGJvbmRpbmcgZHJpdmVyIGF0IHByZXNlbnQgc3VwcG9ydHMgdHdvIHNjaGVtZXMgZm9yCittb25pdG9yaW5nIGEgc2xhdmUgZGV2aWNlJ3MgbGluayBzdGF0ZTogdGhlIEFSUCBtb25pdG9yIGFuZCB0aGUgTUlJCittb25pdG9yLgorCisJQXQgdGhlIHByZXNlbnQgdGltZSwgZHVlIHRvIGltcGxlbWVudGF0aW9uIHJlc3RyaWN0aW9ucyBpbiB0aGUKK2JvbmRpbmcgZHJpdmVyIGl0c2VsZiwgaXQgaXMgbm90IHBvc3NpYmxlIHRvIGVuYWJsZSBib3RoIEFSUCBhbmQgTUlJCittb25pdG9yaW5nIHNpbXVsdGFuZW91c2x5LgorCis4LjEgQVJQIE1vbml0b3IgT3BlcmF0aW9uCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKwlUaGUgQVJQIG1vbml0b3Igb3BlcmF0ZXMgYXMgaXRzIG5hbWUgc3VnZ2VzdHM6IGl0IHNlbmRzIEFSUAorcXVlcmllcyB0byBvbmUgb3IgbW9yZSBkZXNpZ25hdGVkIHBlZXIgc3lzdGVtcyBvbiB0aGUgbmV0d29yaywgYW5kCit1c2VzIHRoZSByZXNwb25zZSBhcyBhbiBpbmRpY2F0aW9uIHRoYXQgdGhlIGxpbmsgaXMgb3BlcmF0aW5nLiAgVGhpcworZ2l2ZXMgc29tZSBhc3N1cmFuY2UgdGhhdCB0cmFmZmljIGlzIGFjdHVhbGx5IGZsb3dpbmcgdG8gYW5kIGZyb20gb25lCitvciBtb3JlIHBlZXJzIG9uIHRoZSBsb2NhbCBuZXR3b3JrLgorCisJVGhlIEFSUCBtb25pdG9yIHJlbGllcyBvbiB0aGUgZGV2aWNlIGRyaXZlciBpdHNlbGYgdG8gdmVyaWZ5Cit0aGF0IHRyYWZmaWMgaXMgZmxvd2luZy4gIEluIHBhcnRpY3VsYXIsIHRoZSBkcml2ZXIgbXVzdCBrZWVwIHVwIHRvCitkYXRlIHRoZSBsYXN0IHJlY2VpdmUgdGltZSwgZGV2LT5sYXN0X3J4LCBhbmQgdHJhbnNtaXQgc3RhcnQgdGltZSwKK2Rldi0+dHJhbnNfc3RhcnQuICBJZiB0aGVzZSBhcmUgbm90IHVwZGF0ZWQgYnkgdGhlIGRyaXZlciwgdGhlbiB0aGUKK0FSUCBtb25pdG9yIHdpbGwgaW1tZWRpYXRlbHkgZmFpbCBhbnkgc2xhdmVzIHVzaW5nIHRoYXQgZHJpdmVyLCBhbmQKK3Rob3NlIHNsYXZlcyB3aWxsIHN0YXkgZG93bi4gIElmIG5ldHdvcmtpbmcgbW9uaXRvcmluZyAodGNwZHVtcCwgZXRjKQorc2hvd3MgdGhlIEFSUCByZXF1ZXN0cyBhbmQgcmVwbGllcyBvbiB0aGUgbmV0d29yaywgdGhlbiBpdCBtYXkgYmUgdGhhdAoreW91ciBkZXZpY2UgZHJpdmVyIGlzIG5vdCB1cGRhdGluZyBsYXN0X3J4IGFuZCB0cmFuc19zdGFydC4KKworOC4yIENvbmZpZ3VyaW5nIE11bHRpcGxlIEFSUCBUYXJnZXRzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworCVdoaWxlIEFSUCBtb25pdG9yaW5nIGNhbiBiZSBkb25lIHdpdGgganVzdCBvbmUgdGFyZ2V0LCBpdCBjYW4KK2JlIHVzZWZ1bCBpbiBhIEhpZ2ggQXZhaWxhYmlsaXR5IHNldHVwIHRvIGhhdmUgc2V2ZXJhbCB0YXJnZXRzIHRvCittb25pdG9yLiAgSW4gdGhlIGNhc2Ugb2YganVzdCBvbmUgdGFyZ2V0LCB0aGUgdGFyZ2V0IGl0c2VsZiBtYXkgZ28KK2Rvd24gb3IgaGF2ZSBhIHByb2JsZW0gbWFraW5nIGl0IHVucmVzcG9uc2l2ZSB0byBBUlAgcmVxdWVzdHMuICBIYXZpbmcKK2FuIGFkZGl0aW9uYWwgdGFyZ2V0IChvciBzZXZlcmFsKSBpbmNyZWFzZXMgdGhlIHJlbGlhYmlsaXR5IG9mIHRoZSBBUlAKK21vbml0b3JpbmcuCisKKwlNdWx0aXBsZSBBUlAgdGFyZ2V0cyBtdXN0IGJlIHNlcGVyYXRlZCBieSBjb21tYXMgYXMgZm9sbG93czoKKworIyBleGFtcGxlIG9wdGlvbnMgZm9yIEFSUCBtb25pdG9yaW5nIHdpdGggdGhyZWUgdGFyZ2V0cworYWxpYXMgYm9uZDAgYm9uZGluZworb3B0aW9ucyBib25kMCBhcnBfaW50ZXJ2YWw9NjAgYXJwX2lwX3RhcmdldD0xOTIuMTY4LjAuMSwxOTIuMTY4LjAuMywxOTIuMTY4LjAuOQorCisJRm9yIGp1c3QgYSBzaW5nbGUgdGFyZ2V0IHRoZSBvcHRpb25zIHdvdWxkIHJlc2VtYmxlOgorCisjIGV4YW1wbGUgb3B0aW9ucyBmb3IgQVJQIG1vbml0b3Jpbmcgd2l0aCBvbmUgdGFyZ2V0CithbGlhcyBib25kMCBib25kaW5nCitvcHRpb25zIGJvbmQwIGFycF9pbnRlcnZhbD02MCBhcnBfaXBfdGFyZ2V0PTE5Mi4xNjguMC4xMDAKKworCis4LjMgTUlJIE1vbml0b3IgT3BlcmF0aW9uCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKwlUaGUgTUlJIG1vbml0b3IgbW9uaXRvcnMgb25seSB0aGUgY2FycmllciBzdGF0ZSBvZiB0aGUgbG9jYWwKK25ldHdvcmsgaW50ZXJmYWNlLiAgSXQgYWNjb21wbGlzaGVzIHRoaXMgaW4gb25lIG9mIHRocmVlIHdheXM6IGJ5CitkZXBlbmRpbmcgdXBvbiB0aGUgZGV2aWNlIGRyaXZlciB0byBtYWludGFpbiBpdHMgY2FycmllciBzdGF0ZSwgYnkKK3F1ZXJ5aW5nIHRoZSBkZXZpY2UncyBNSUkgcmVnaXN0ZXJzLCBvciBieSBtYWtpbmcgYW4gZXRodG9vbCBxdWVyeSB0bwordGhlIGRldmljZS4KKworCUlmIHRoZSB1c2VfY2FycmllciBtb2R1bGUgcGFyYW1ldGVyIGlzIDEgKHRoZSBkZWZhdWx0IHZhbHVlKSwKK3RoZW4gdGhlIE1JSSBtb25pdG9yIHdpbGwgcmVseSBvbiB0aGUgZHJpdmVyIGZvciBjYXJyaWVyIHN0YXRlCitpbmZvcm1hdGlvbiAodmlhIHRoZSBuZXRpZl9jYXJyaWVyIHN1YnN5c3RlbSkuICBBcyBleHBsYWluZWQgaW4gdGhlCit1c2VfY2FycmllciBwYXJhbWV0ZXIgaW5mb3JtYXRpb24sIGFib3ZlLCBpZiB0aGUgTUlJIG1vbml0b3IgZmFpbHMgdG8KK2RldGVjdCBjYXJyaWVyIGxvc3Mgb24gdGhlIGRldmljZSAoZS5nLiwgd2hlbiB0aGUgY2FibGUgaXMgcGh5c2ljYWxseQorZGlzY29ubmVjdGVkKSwgaXQgbWF5IGJlIHRoYXQgdGhlIGRyaXZlciBkb2VzIG5vdCBzdXBwb3J0CituZXRpZl9jYXJyaWVyLgorCisJSWYgdXNlX2NhcnJpZXIgaXMgMCwgdGhlbiB0aGUgTUlJIG1vbml0b3Igd2lsbCBmaXJzdCBxdWVyeSB0aGUKK2RldmljZSdzICh2aWEgaW9jdGwpIE1JSSByZWdpc3RlcnMgYW5kIGNoZWNrIHRoZSBsaW5rIHN0YXRlLiAgSWYgdGhhdAorcmVxdWVzdCBmYWlscyAobm90IGp1c3QgdGhhdCBpdCByZXR1cm5zIGNhcnJpZXIgZG93biksIHRoZW4gdGhlIE1JSQorbW9uaXRvciB3aWxsIG1ha2UgYW4gZXRodG9vbCBFVEhPT0xfR0xJTksgcmVxdWVzdCB0byBhdHRlbXB0IHRvIG9idGFpbgordGhlIHNhbWUgaW5mb3JtYXRpb24uICBJZiBib3RoIG1ldGhvZHMgZmFpbCAoaS5lLiwgdGhlIGRyaXZlciBlaXRoZXIKK2RvZXMgbm90IHN1cHBvcnQgb3IgaGFkIHNvbWUgZXJyb3IgaW4gcHJvY2Vzc2luZyBib3RoIHRoZSBNSUkgcmVnaXN0ZXIKK2FuZCBldGh0b29sIHJlcXVlc3RzKSwgdGhlbiB0aGUgTUlJIG1vbml0b3Igd2lsbCBhc3N1bWUgdGhlIGxpbmsgaXMKK3VwLgorCis5LiBQb3RlbnRpYWwgU291cmNlcyBvZiBUcm91YmxlCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKzkuMSBBZHZlbnR1cmVzIGluIFJvdXRpbmcKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworCVdoZW4gYm9uZGluZyBpcyBjb25maWd1cmVkLCBpdCBpcyBpbXBvcnRhbnQgdGhhdCB0aGUgc2xhdmUKK2RldmljZXMgbm90IGhhdmUgcm91dGVzIHRoYXQgc3VwZXJjZWRlIHJvdXRlcyBvZiB0aGUgbWFzdGVyIChvciwKK2dlbmVyYWxseSwgbm90IGhhdmUgcm91dGVzIGF0IGFsbCkuICBGb3IgZXhhbXBsZSwgc3VwcG9zZSB0aGUgYm9uZGluZworZGV2aWNlIGJvbmQwIGhhcyB0d28gc2xhdmVzLCBldGgwIGFuZCBldGgxLCBhbmQgdGhlIHJvdXRpbmcgdGFibGUgaXMKK2FzIGZvbGxvd3M6CisKK0tlcm5lbCBJUCByb3V0aW5nIHRhYmxlCitEZXN0aW5hdGlvbiAgICAgR2F0ZXdheSAgICAgICAgIEdlbm1hc2sgICAgICAgICBGbGFncyAgIE1TUyBXaW5kb3cgIGlydHQgSWZhY2UKKzEwLjAuMC4wICAgICAgICAwLjAuMC4wICAgICAgICAgMjU1LjI1NS4wLjAgICAgIFUgICAgICAgIDQwIDAgICAgICAgICAgMCBldGgwCisxMC4wLjAuMCAgICAgICAgMC4wLjAuMCAgICAgICAgIDI1NS4yNTUuMC4wICAgICBVICAgICAgICA0MCAwICAgICAgICAgIDAgZXRoMQorMTAuMC4wLjAgICAgICAgIDAuMC4wLjAgICAgICAgICAyNTUuMjU1LjAuMCAgICAgVSAgICAgICAgNDAgMCAgICAgICAgICAwIGJvbmQwCisxMjcuMC4wLjAgICAgICAgMC4wLjAuMCAgICAgICAgIDI1NS4wLjAuMCAgICAgICBVICAgICAgICA0MCAwICAgICAgICAgIDAgbG8KKworCVRoaXMgcm91dGluZyBjb25maWd1cmF0aW9uIHdpbGwgbGlrZWx5IHN0aWxsIHVwZGF0ZSB0aGUKK3JlY2VpdmUvdHJhbnNtaXQgdGltZXMgaW4gdGhlIGRyaXZlciAobmVlZGVkIGJ5IHRoZSBBUlAgbW9uaXRvciksIGJ1dAorbWF5IGJ5cGFzcyB0aGUgYm9uZGluZyBkcml2ZXIgKGJlY2F1c2Ugb3V0Z29pbmcgdHJhZmZpYyB0bywgaW4gdGhpcworY2FzZSwgYW5vdGhlciBob3N0IG9uIG5ldHdvcmsgMTAgd291bGQgdXNlIGV0aDAgb3IgZXRoMSBiZWZvcmUgYm9uZDApLgorCisJVGhlIEFSUCBtb25pdG9yIChhbmQgQVJQIGl0c2VsZikgbWF5IGJlY29tZSBjb25mdXNlZCBieSB0aGlzCitjb25maWd1cmF0aW9uLCBiZWNhdXNlIEFSUCByZXF1ZXN0cyAoZ2VuZXJhdGVkIGJ5IHRoZSBBUlAgbW9uaXRvcikKK3dpbGwgYmUgc2VudCBvbiBvbmUgaW50ZXJmYWNlIChib25kMCksIGJ1dCB0aGUgY29ycmVzcG9uZGluZyByZXBseQord2lsbCBhcnJpdmUgb24gYSBkaWZmZXJlbnQgaW50ZXJmYWNlIChldGgwKS4gIFRoaXMgcmVwbHkgbG9va3MgdG8gQVJQCithcyBhbiB1bnNvbGljaXRlZCBBUlAgcmVwbHkgKGJlY2F1c2UgQVJQIG1hdGNoZXMgcmVwbGllcyBvbiBhbgoraW50ZXJmYWNlIGJhc2lzKSwgYW5kIGlzIGRpc2NhcmRlZC4gIFRoZSBNSUkgbW9uaXRvciBpcyBub3QgYWZmZWN0ZWQKK2J5IHRoZSBzdGF0ZSBvZiB0aGUgcm91dGluZyB0YWJsZS4KKworCVRoZSBzb2x1dGlvbiBoZXJlIGlzIHNpbXBseSB0byBpbnN1cmUgdGhhdCBzbGF2ZXMgZG8gbm90IGhhdmUKK3JvdXRlcyBvZiB0aGVpciBvd24sIGFuZCBpZiBmb3Igc29tZSByZWFzb24gdGhleSBtdXN0LCB0aG9zZSByb3V0ZXMgZG8KK25vdCBzdXBlcmNlZGUgcm91dGVzIG9mIHRoZWlyIG1hc3Rlci4gIFRoaXMgc2hvdWxkIGdlbmVyYWxseSBiZSB0aGUKK2Nhc2UsIGJ1dCB1bnVzdWFsIGNvbmZpZ3VyYXRpb25zIG9yIGVycmFudCBtYW51YWwgb3IgYXV0b21hdGljIHN0YXRpYworcm91dGUgYWRkaXRpb25zIG1heSBjYXVzZSB0cm91YmxlLgorCis5LjIgRXRoZXJuZXQgRGV2aWNlIFJlbmFtaW5nCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKwlPbiBzeXN0ZW1zIHdpdGggbmV0d29yayBjb25maWd1cmF0aW9uIHNjcmlwdHMgdGhhdCBkbyBub3QKK2Fzc29jaWF0ZSBwaHlzaWNhbCBkZXZpY2VzIGRpcmVjdGx5IHdpdGggbmV0d29yayBpbnRlcmZhY2UgbmFtZXMgKHNvCit0aGF0IHRoZSBzYW1lIHBoeXNpY2FsIGRldmljZSBhbHdheXMgaGFzIHRoZSBzYW1lICJldGhYIiBuYW1lKSwgaXQgbWF5CitiZSBuZWNlc3NhcnkgdG8gYWRkIHNvbWUgc3BlY2lhbCBsb2dpYyB0byBlaXRoZXIgL2V0Yy9tb2R1bGVzLmNvbmYgb3IKKy9ldGMvbW9kcHJvYmUuY29uZiAoZGVwZW5kaW5nIHVwb24gd2hpY2ggaXMgaW5zdGFsbGVkIG9uIHRoZSBzeXN0ZW0pLgorCisJRm9yIGV4YW1wbGUsIGdpdmVuIGEgbW9kdWxlcy5jb25mIGNvbnRhaW5pbmcgdGhlIGZvbGxvd2luZzoKKworYWxpYXMgYm9uZDAgYm9uZGluZworb3B0aW9ucyBib25kMCBtb2RlPXNvbWUtbW9kZSBtaWltb249NTAKK2FsaWFzIGV0aDAgdGczCithbGlhcyBldGgxIHRnMworYWxpYXMgZXRoMiBlMTAwMAorYWxpYXMgZXRoMyBlMTAwMAorCisJSWYgbmVpdGhlciBldGgwIGFuZCBldGgxIGFyZSBzbGF2ZXMgdG8gYm9uZDAsIHRoZW4gd2hlbiB0aGUKK2JvbmQwIGludGVyZmFjZSBjb21lcyB1cCwgdGhlIGRldmljZXMgbWF5IGVuZCB1cCByZW9yZGVyZWQuICBUaGlzCitoYXBwZW5zIGJlY2F1c2UgYm9uZGluZyBpcyBsb2FkZWQgZmlyc3QsIHRoZW4gaXRzIHNsYXZlIGRldmljZSdzCitkcml2ZXJzIGFyZSBsb2FkZWQgbmV4dC4gIFNpbmNlIG5vIG90aGVyIGRyaXZlcnMgaGF2ZSBiZWVuIGxvYWRlZCwKK3doZW4gdGhlIGUxMDAwIGRyaXZlciBsb2FkcywgaXQgd2lsbCByZWNlaXZlIGV0aDAgYW5kIGV0aDEgZm9yIGl0cworZGV2aWNlcywgYnV0IHRoZSBib25kaW5nIGNvbmZpZ3VyYXRpb24gdHJpZXMgdG8gZW5zbGF2ZSBldGgyIGFuZCBldGgzCisod2hpY2ggbWF5IGxhdGVyIGJlIGFzc2lnbmVkIHRvIHRoZSB0ZzMgZGV2aWNlcykuCisKKwlBZGRpbmcgdGhlIGZvbGxvd2luZzoKKworYWRkIGFib3ZlIGJvbmRpbmcgZTEwMDAgdGczCisKKwljYXVzZXMgbW9kcHJvYmUgdG8gbG9hZCBlMTAwMCB0aGVuIHRnMywgaW4gdGhhdCBvcmRlciwgd2hlbgorYm9uZGluZyBpcyBsb2FkZWQuICBUaGlzIGNvbW1hbmQgaXMgZnVsbHkgZG9jdW1lbnRlZCBpbiB0aGUKK21vZHVsZXMuY29uZiBtYW51YWwgcGFnZS4KKworCU9uIHN5c3RlbXMgdXRpbGl6aW5nIG1vZHByb2JlLmNvbmYgKG9yIG1vZHByb2JlLmNvbmYubG9jYWwpLAorYW4gZXF1aXZhbGVudCBwcm9ibGVtIGNhbiBvY2N1ci4gIEluIHRoaXMgY2FzZSwgdGhlIGZvbGxvd2luZyBjYW4gYmUKK2FkZGVkIHRvIG1vZHByb2JlLmNvbmYgKG9yIG1vZHByb2JlLmNvbmYubG9jYWwsIGFzIGFwcHJvcHJpYXRlKSwgYXMKK2ZvbGxvd3MgKGFsbCBvbiBvbmUgbGluZTsgaXQgaGFzIGJlZW4gc3BsaXQgaGVyZSBmb3IgY2xhcml0eSk6CisKK2luc3RhbGwgYm9uZGluZyAvc2Jpbi9tb2Rwcm9iZSB0ZzM7IC9zYmluL21vZHByb2JlIGUxMDAwOworCS9zYmluL21vZHByb2JlIC0taWdub3JlLWluc3RhbGwgYm9uZGluZworCisJVGhpcyB3aWxsLCB3aGVuIGxvYWRpbmcgdGhlIGJvbmRpbmcgbW9kdWxlLCByYXRoZXIgdGhhbgorcGVyZm9ybWluZyB0aGUgbm9ybWFsIGFjdGlvbiwgaW5zdGVhZCBleGVjdXRlIHRoZSBwcm92aWRlZCBjb21tYW5kLgorVGhpcyBjb21tYW5kIGxvYWRzIHRoZSBkZXZpY2UgZHJpdmVycyBpbiB0aGUgb3JkZXIgbmVlZGVkLCB0aGVuIGNhbGxzCittb2Rwcm9iZSB3aXRoIC0taW5nb3JlLWluc3RhbGwgdG8gY2F1c2UgdGhlIG5vcm1hbCBhY3Rpb24gdG8gdGhlbiB0YWtlCitwbGFjZS4gIEZ1bGwgZG9jdW1lbnRhdGlvbiBvbiB0aGlzIGNhbiBiZSBmb3VuZCBpbiB0aGUgbW9kcHJvYmUuY29uZgorYW5kIG1vZHByb2JlIG1hbnVhbCBwYWdlcy4KKworOS4zLiBQYWluZnVsbHkgU2xvdyBPciBObyBGYWlsZWQgTGluayBEZXRlY3Rpb24gQnkgTWlpbW9uCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworCUJ5IGRlZmF1bHQsIGJvbmRpbmcgZW5hYmxlcyB0aGUgdXNlX2NhcnJpZXIgb3B0aW9uLCB3aGljaAoraW5zdHJ1Y3RzIGJvbmRpbmcgdG8gdHJ1c3QgdGhlIGRyaXZlciB0byBtYWludGFpbiBjYXJyaWVyIHN0YXRlLgorCisJQXMgZGlzY3Vzc2VkIGluIHRoZSBvcHRpb25zIHNlY3Rpb24sIGFib3ZlLCBzb21lIGRyaXZlcnMgZG8KK25vdCBzdXBwb3J0IHRoZSBuZXRpZl9jYXJyaWVyX29uL19vZmYgbGluayBzdGF0ZSB0cmFja2luZyBzeXN0ZW0uCitXaXRoIHVzZV9jYXJyaWVyIGVuYWJsZWQsIGJvbmRpbmcgd2lsbCBhbHdheXMgc2VlIHRoZXNlIGxpbmtzIGFzIHVwLAorcmVnYXJkbGVzcyBvZiB0aGVpciBhY3R1YWwgc3RhdGUuCisKKwlBZGRpdGlvbmFsbHksIG90aGVyIGRyaXZlcnMgZG8gc3VwcG9ydCBuZXRpZl9jYXJyaWVyLCBidXQgZG8KK25vdCBtYWludGFpbiBpdCBpbiByZWFsIHRpbWUsIGUuZy4sIG9ubHkgcG9sbGluZyB0aGUgbGluayBzdGF0ZSBhdAorc29tZSBmaXhlZCBpbnRlcnZhbC4gIEluIHRoaXMgY2FzZSwgbWlpbW9uIHdpbGwgZGV0ZWN0IGZhaWx1cmVzLCBidXQKK29ubHkgYWZ0ZXIgc29tZSBsb25nIHBlcmlvZCBvZiB0aW1lIGhhcyBleHBpcmVkLiAgSWYgaXQgYXBwZWFycyB0aGF0CittaWltb24gaXMgdmVyeSBzbG93IGluIGRldGVjdGluZyBsaW5rIGZhaWx1cmVzLCB0cnkgc3BlY2lmeWluZwordXNlX2NhcnJpZXI9MCB0byBzZWUgaWYgdGhhdCBpbXByb3ZlcyB0aGUgZmFpbHVyZSBkZXRlY3Rpb24gdGltZS4gIElmCitpdCBkb2VzLCB0aGVuIGl0IG1heSBiZSB0aGF0IHRoZSBkcml2ZXIgY2hlY2tzIHRoZSBjYXJyaWVyIHN0YXRlIGF0IGEKK2ZpeGVkIGludGVydmFsLCBidXQgZG9lcyBub3QgY2FjaGUgdGhlIE1JSSByZWdpc3RlciB2YWx1ZXMgKHNvIHRoZQordXNlX2NhcnJpZXI9MCBtZXRob2Qgb2YgcXVlcnlpbmcgdGhlIHJlZ2lzdGVycyBkaXJlY3RseSB3b3JrcykuICBJZgordXNlX2NhcnJpZXI9MCBkb2VzIG5vdCBpbXByb3ZlIHRoZSBmYWlsb3ZlciwgdGhlbiB0aGUgZHJpdmVyIG1heSBjYWNoZQordGhlIHJlZ2lzdGVycywgb3IgdGhlIHByb2JsZW0gbWF5IGJlIGVsc2V3aGVyZS4KKworCUFsc28sIHJlbWVtYmVyIHRoYXQgbWlpbW9uIG9ubHkgY2hlY2tzIGZvciB0aGUgZGV2aWNlJ3MKK2NhcnJpZXIgc3RhdGUuICBJdCBoYXMgbm8gd2F5IHRvIGRldGVybWluZSB0aGUgc3RhdGUgb2YgZGV2aWNlcyBvbiBvcgorYmV5b25kIG90aGVyIHBvcnRzIG9mIGEgc3dpdGNoLCBvciBpZiBhIHN3aXRjaCBpcyByZWZ1c2luZyB0byBwYXNzCit0cmFmZmljIHdoaWxlIHN0aWxsIG1haW50YWluaW5nIGNhcnJpZXIgb24uCisKKzEwLiBTTk1QIGFnZW50cworPT09PT09PT09PT09PT09CisKKwlJZiBydW5uaW5nIFNOTVAgYWdlbnRzLCB0aGUgYm9uZGluZyBkcml2ZXIgc2hvdWxkIGJlIGxvYWRlZAorYmVmb3JlIGFueSBuZXR3b3JrIGRyaXZlcnMgcGFydGljaXBhdGluZyBpbiBhIGJvbmQuICBUaGlzIHJlcXVpcmVtZW50CitpcyBkdWUgdG8gdGhlIHRoZSBpbnRlcmZhY2UgaW5kZXggKGlwQWRFbnRJZkluZGV4KSBiZWluZyBhc3NvY2lhdGVkIHRvCit0aGUgZmlyc3QgaW50ZXJmYWNlIGZvdW5kIHdpdGggYSBnaXZlbiBJUCBhZGRyZXNzLiAgVGhhdCBpcywgdGhlcmUgaXMKK29ubHkgb25lIGlwQWRFbnRJZkluZGV4IGZvciBlYWNoIElQIGFkZHJlc3MuICBGb3IgZXhhbXBsZSwgaWYgZXRoMCBhbmQKK2V0aDEgYXJlIHNsYXZlcyBvZiBib25kMCBhbmQgdGhlIGRyaXZlciBmb3IgZXRoMCBpcyBsb2FkZWQgYmVmb3JlIHRoZQorYm9uZGluZyBkcml2ZXIsIHRoZSBpbnRlcmZhY2UgZm9yIHRoZSBJUCBhZGRyZXNzIHdpbGwgYmUgYXNzb2NpYXRlZAord2l0aCB0aGUgZXRoMCBpbnRlcmZhY2UuICBUaGlzIGNvbmZpZ3VyYXRpb24gaXMgc2hvd24gYmVsb3csIHRoZSBJUAorYWRkcmVzcyAxOTIuMTY4LjEuMSBoYXMgYW4gaW50ZXJmYWNlIGluZGV4IG9mIDIgd2hpY2ggaW5kZXhlcyB0byBldGgwCitpbiB0aGUgaWZEZXNjciB0YWJsZSAoaWZEZXNjci4yKS4KKworICAgICBpbnRlcmZhY2VzLmlmVGFibGUuaWZFbnRyeS5pZkRlc2NyLjEgPSBsbworICAgICBpbnRlcmZhY2VzLmlmVGFibGUuaWZFbnRyeS5pZkRlc2NyLjIgPSBldGgwCisgICAgIGludGVyZmFjZXMuaWZUYWJsZS5pZkVudHJ5LmlmRGVzY3IuMyA9IGV0aDEKKyAgICAgaW50ZXJmYWNlcy5pZlRhYmxlLmlmRW50cnkuaWZEZXNjci40ID0gZXRoMgorICAgICBpbnRlcmZhY2VzLmlmVGFibGUuaWZFbnRyeS5pZkRlc2NyLjUgPSBldGgzCisgICAgIGludGVyZmFjZXMuaWZUYWJsZS5pZkVudHJ5LmlmRGVzY3IuNiA9IGJvbmQwCisgICAgIGlwLmlwQWRkclRhYmxlLmlwQWRkckVudHJ5LmlwQWRFbnRJZkluZGV4LjEwLjEwLjEwLjEwID0gNQorICAgICBpcC5pcEFkZHJUYWJsZS5pcEFkZHJFbnRyeS5pcEFkRW50SWZJbmRleC4xOTIuMTY4LjEuMSA9IDIKKyAgICAgaXAuaXBBZGRyVGFibGUuaXBBZGRyRW50cnkuaXBBZEVudElmSW5kZXguMTAuNzQuMjAuOTQgPSA0CisgICAgIGlwLmlwQWRkclRhYmxlLmlwQWRkckVudHJ5LmlwQWRFbnRJZkluZGV4LjEyNy4wLjAuMSA9IDEKKworCVRoaXMgcHJvYmxlbSBpcyBhdm9pZGVkIGJ5IGxvYWRpbmcgdGhlIGJvbmRpbmcgZHJpdmVyIGJlZm9yZQorYW55IG5ldHdvcmsgZHJpdmVycyBwYXJ0aWNpcGF0aW5nIGluIGEgYm9uZC4gIEJlbG93IGlzIGFuIGV4YW1wbGUgb2YKK2xvYWRpbmcgdGhlIGJvbmRpbmcgZHJpdmVyIGZpcnN0LCB0aGUgSVAgYWRkcmVzcyAxOTIuMTY4LjEuMSBpcworY29ycmVjdGx5IGFzc29jaWF0ZWQgd2l0aCBpZkRlc2NyLjIuCisKKyAgICAgaW50ZXJmYWNlcy5pZlRhYmxlLmlmRW50cnkuaWZEZXNjci4xID0gbG8KKyAgICAgaW50ZXJmYWNlcy5pZlRhYmxlLmlmRW50cnkuaWZEZXNjci4yID0gYm9uZDAKKyAgICAgaW50ZXJmYWNlcy5pZlRhYmxlLmlmRW50cnkuaWZEZXNjci4zID0gZXRoMAorICAgICBpbnRlcmZhY2VzLmlmVGFibGUuaWZFbnRyeS5pZkRlc2NyLjQgPSBldGgxCisgICAgIGludGVyZmFjZXMuaWZUYWJsZS5pZkVudHJ5LmlmRGVzY3IuNSA9IGV0aDIKKyAgICAgaW50ZXJmYWNlcy5pZlRhYmxlLmlmRW50cnkuaWZEZXNjci42ID0gZXRoMworICAgICBpcC5pcEFkZHJUYWJsZS5pcEFkZHJFbnRyeS5pcEFkRW50SWZJbmRleC4xMC4xMC4xMC4xMCA9IDYKKyAgICAgaXAuaXBBZGRyVGFibGUuaXBBZGRyRW50cnkuaXBBZEVudElmSW5kZXguMTkyLjE2OC4xLjEgPSAyCisgICAgIGlwLmlwQWRkclRhYmxlLmlwQWRkckVudHJ5LmlwQWRFbnRJZkluZGV4LjEwLjc0LjIwLjk0ID0gNQorICAgICBpcC5pcEFkZHJUYWJsZS5pcEFkZHJFbnRyeS5pcEFkRW50SWZJbmRleC4xMjcuMC4wLjEgPSAxCisKKwlXaGlsZSBzb21lIGRpc3RyaWJ1dGlvbnMgbWF5IG5vdCByZXBvcnQgdGhlIGludGVyZmFjZSBuYW1lIGluCitpZkRlc2NyLCB0aGUgYXNzb2NpYXRpb24gYmV0d2VlbiB0aGUgSVAgYWRkcmVzcyBhbmQgSWZJbmRleCByZW1haW5zCithbmQgU05NUCBmdW5jdGlvbnMgc3VjaCBhcyBJbnRlcmZhY2VfU2Nhbl9OZXh0IHdpbGwgcmVwb3J0IHRoYXQKK2Fzc29jaWF0aW9uLgorCisxMS4gUHJvbWlzY3VvdXMgbW9kZQorPT09PT09PT09PT09PT09PT09PT0KKworCVdoZW4gcnVubmluZyBuZXR3b3JrIG1vbml0b3JpbmcgdG9vbHMsIGUuZy4sIHRjcGR1bXAsIGl0IGlzCitjb21tb24gdG8gZW5hYmxlIHByb21pc2N1b3VzIG1vZGUgb24gdGhlIGRldmljZSwgc28gdGhhdCBhbGwgdHJhZmZpYworaXMgc2VlbiAoaW5zdGVhZCBvZiBzZWVpbmcgb25seSB0cmFmZmljIGRlc3RpbmVkIGZvciB0aGUgbG9jYWwgaG9zdCkuCitUaGUgYm9uZGluZyBkcml2ZXIgaGFuZGxlcyBwcm9taXNjdW91cyBtb2RlIGNoYW5nZXMgdG8gdGhlIGJvbmRpbmcKK21hc3RlciBkZXZpY2UgKGUuZy4sIGJvbmQwKSwgYW5kIHByb3BvZ2F0ZXMgdGhlIHNldHRpbmcgdG8gdGhlIHNsYXZlCitkZXZpY2VzLgorCisJRm9yIHRoZSBiYWxhbmNlLXJyLCBiYWxhbmNlLXhvciwgYnJvYWRjYXN0LCBhbmQgODAyLjNhZCBtb2RlcywKK3RoZSBwcm9taXNjdW91cyBtb2RlIHNldHRpbmcgaXMgcHJvcG9nYXRlZCB0byBhbGwgc2xhdmVzLgorCisJRm9yIHRoZSBhY3RpdmUtYmFja3VwLCBiYWxhbmNlLXRsYiBhbmQgYmFsYW5jZS1hbGIgbW9kZXMsIHRoZQorcHJvbWlzY3VvdXMgbW9kZSBzZXR0aW5nIGlzIHByb3BvZ2F0ZWQgb25seSB0byB0aGUgYWN0aXZlIHNsYXZlLgorCisJRm9yIGJhbGFuY2UtdGxiIG1vZGUsIHRoZSBhY3RpdmUgc2xhdmUgaXMgdGhlIHNsYXZlIGN1cnJlbnRseQorcmVjZWl2aW5nIGluYm91bmQgdHJhZmZpYy4KKworCUZvciBiYWxhbmNlLWFsYiBtb2RlLCB0aGUgYWN0aXZlIHNsYXZlIGlzIHRoZSBzbGF2ZSB1c2VkIGFzIGEKKyJwcmltYXJ5LiIgIFRoaXMgc2xhdmUgaXMgdXNlZCBmb3IgbW9kZS1zcGVjaWZpYyBjb250cm9sIHRyYWZmaWMsIGZvcgorc2VuZGluZyB0byBwZWVycyB0aGF0IGFyZSB1bmFzc2lnbmVkIG9yIGlmIHRoZSBsb2FkIGlzIHVuYmFsYW5jZWQuCisKKwlGb3IgdGhlIGFjdGl2ZS1iYWNrdXAsIGJhbGFuY2UtdGxiIGFuZCBiYWxhbmNlLWFsYiBtb2Rlcywgd2hlbgordGhlIGFjdGl2ZSBzbGF2ZSBjaGFuZ2VzIChlLmcuLCBkdWUgdG8gYSBsaW5rIGZhaWx1cmUpLCB0aGUKK3Byb21pc2N1b3VzIHNldHRpbmcgd2lsbCBiZSBwcm9wb2dhdGVkIHRvIHRoZSBuZXcgYWN0aXZlIHNsYXZlLgorCisxMi4gSGlnaCBBdmFpbGFiaWxpdHkgSW5mb3JtYXRpb24KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisJSGlnaCBBdmFpbGFiaWxpdHkgcmVmZXJzIHRvIGNvbmZpZ3VyYXRpb25zIHRoYXQgcHJvdmlkZQorbWF4aW11bSBuZXR3b3JrIGF2YWlsYWJpbGl0eSBieSBoYXZpbmcgcmVkdW5kYW50IG9yIGJhY2t1cCBkZXZpY2VzLAorbGlua3MgYW5kIHN3aXRjaGVzIGJldHdlZW4gdGhlIGhvc3QgYW5kIHRoZSByZXN0IG9mIHRoZSB3b3JsZC4KKworCVRoZXJlIGFyZSBjdXJyZW50bHkgdHdvIGJhc2ljIG1ldGhvZHMgZm9yIGNvbmZpZ3VyaW5nIHRvCittYXhpbWl6ZSBhdmFpbGFiaWxpdHkuIFRoZXkgYXJlIGRlcGVuZGVudCBvbiB0aGUgbmV0d29yayB0b3BvbG9neSBhbmQKK3RoZSBwcmltYXJ5IGdvYWwgb2YgdGhlIGNvbmZpZ3VyYXRpb24sIGJ1dCBpbiBnZW5lcmFsLCBhIGNvbmZpZ3VyYXRpb24KK2NhbiBiZSBvcHRpbWl6ZWQgZm9yIG1heGltdW0gYXZhaWxhYmxlIGJhbmR3aWR0aCwgb3IgZm9yIG1heGltdW0KK25ldHdvcmsgYXZhaWxhYmlsaXR5LgorCisxMi4xIEhpZ2ggQXZhaWxhYmlsaXR5IGluIGEgU2luZ2xlIFN3aXRjaCBUb3BvbG9neQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworCUlmIHR3byBob3N0cyAob3IgYSBob3N0IGFuZCBhIHN3aXRjaCkgYXJlIGRpcmVjdGx5IGNvbm5lY3RlZAordmlhIG11bHRpcGxlIHBoeXNpY2FsIGxpbmtzLCB0aGVuIHRoZXJlIGlzIG5vIG5ldHdvcmsgYXZhaWxhYmlsaXR5CitwZW5hbHR5IGZvciBvcHRpbWl6aW5nIGZvciBtYXhpbXVtIGJhbmR3aWR0aDogdGhlcmUgaXMgb25seSBvbmUgc3dpdGNoCisob3IgcGVlciksIHNvIGlmIGl0IGZhaWxzLCB5b3UgaGF2ZSBubyBhbHRlcm5hdGl2ZSBhY2Nlc3MgdG8gZmFpbCBvdmVyCit0by4KKworRXhhbXBsZSAxIDogaG9zdCB0byBzd2l0Y2ggKG9yIG90aGVyIGhvc3QpCisKKyAgICAgICAgICArLS0tLS0tLS0tLSsgICAgICAgICAgICAgICAgICAgICAgICAgICstLS0tLS0tLS0tKworICAgICAgICAgIHwgICAgICAgICAgfGV0aDAgICAgICAgICAgICAgICAgICBldGgwfCAgc3dpdGNoICB8CisgICAgICAgICAgfCBIb3N0IEEgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rICAgIG9yICAgIHwKKyAgICAgICAgICB8ICAgICAgICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsgIG90aGVyICAgfAorICAgICAgICAgIHwgICAgICAgICAgfGV0aDEgICAgICAgICAgICAgICAgICBldGgxfCAgaG9zdCAgICB8CisgICAgICAgICAgKy0tLS0tLS0tLS0rICAgICAgICAgICAgICAgICAgICAgICAgICArLS0tLS0tLS0tLSsKKworCisxMi4xLjEgQm9uZGluZyBNb2RlIFNlbGVjdGlvbiBmb3Igc2luZ2xlIHN3aXRjaCB0b3BvbG9neQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworCVRoaXMgY29uZmlndXJhdGlvbiBpcyB0aGUgZWFzaWVzdCB0byBzZXQgdXAgYW5kIHRvIHVuZGVyc3RhbmQsCithbHRob3VnaCB5b3Ugd2lsbCBoYXZlIHRvIGRlY2lkZSB3aGljaCBib25kaW5nIG1vZGUgYmVzdCBzdWl0cyB5b3VyCituZWVkcy4gIFRoZSB0cmFkZW9mZnMgZm9yIGVhY2ggbW9kZSBhcmUgZGV0YWlsZWQgYmVsb3c6CisKK2JhbGFuY2UtcnI6IFRoaXMgbW9kZSBpcyB0aGUgb25seSBtb2RlIHRoYXQgd2lsbCBwZXJtaXQgYSBzaW5nbGUKKwlUQ1AvSVAgY29ubmVjdGlvbiB0byBzdHJpcGUgdHJhZmZpYyBhY3Jvc3MgbXVsdGlwbGUKKwlpbnRlcmZhY2VzLiBJdCBpcyB0aGVyZWZvcmUgdGhlIG9ubHkgbW9kZSB0aGF0IHdpbGwgYWxsb3cgYQorCXNpbmdsZSBUQ1AvSVAgc3RyZWFtIHRvIHV0aWxpemUgbW9yZSB0aGFuIG9uZSBpbnRlcmZhY2UncworCXdvcnRoIG9mIHRocm91Z2hwdXQuICBUaGlzIGNvbWVzIGF0IGEgY29zdCwgaG93ZXZlcjogdGhlCisJc3RyaXBpbmcgb2Z0ZW4gcmVzdWx0cyBpbiBwZWVyIHN5c3RlbXMgcmVjZWl2aW5nIHBhY2tldHMgb3V0CisJb2Ygb3JkZXIsIGNhdXNpbmcgVENQL0lQJ3MgY29uZ2VzdGlvbiBjb250cm9sIHN5c3RlbSB0byBraWNrCisJaW4sIG9mdGVuIGJ5IHJldHJhbnNtaXR0aW5nIHNlZ21lbnRzLgorCisJSXQgaXMgcG9zc2libGUgdG8gYWRqdXN0IFRDUC9JUCdzIGNvbmdlc3Rpb24gbGltaXRzIGJ5CisJYWx0ZXJpbmcgdGhlIG5ldC5pcHY0LnRjcF9yZW9yZGVyaW5nIHN5c2N0bCBwYXJhbWV0ZXIuICBUaGUKKwl1c3VhbCBkZWZhdWx0IHZhbHVlIGlzIDMsIGFuZCB0aGUgbWF4aW11bSB1c2VmdWwgdmFsdWUgaXMgMTI3LgorCUZvciBhIGZvdXIgaW50ZXJmYWNlIGJhbGFuY2UtcnIgYm9uZCwgZXhwZWN0IHRoYXQgYSBzaW5nbGUKKwlUQ1AvSVAgc3RyZWFtIHdpbGwgdXRpbGl6ZSBubyBtb3JlIHRoYW4gYXBwcm94aW1hdGVseSAyLjMKKwlpbnRlcmZhY2UncyB3b3J0aCBvZiB0aHJvdWdocHV0LCBldmVuIGFmdGVyIGFkanVzdGluZworCXRjcF9yZW9yZGVyaW5nLgorCisJSWYgeW91IGFyZSB1dGlsaXppbmcgcHJvdG9jb2xzIG90aGVyIHRoYW4gVENQL0lQLCBVRFAgZm9yCisJZXhhbXBsZSwgYW5kIHlvdXIgYXBwbGljYXRpb24gY2FuIHRvbGVyYXRlIG91dCBvZiBvcmRlcgorCWRlbGl2ZXJ5LCB0aGVuIHRoaXMgbW9kZSBjYW4gYWxsb3cgZm9yIHNpbmdsZSBzdHJlYW0gZGF0YWdyYW0KKwlwZXJmb3JtYW5jZSB0aGF0IHNjYWxlcyBuZWFyIGxpbmVhcmx5IGFzIGludGVyZmFjZXMgYXJlIGFkZGVkCisJdG8gdGhlIGJvbmQuCisKKwlUaGlzIG1vZGUgcmVxdWlyZXMgdGhlIHN3aXRjaCB0byBoYXZlIHRoZSBhcHByb3ByaWF0ZSBwb3J0cworCWNvbmZpZ3VyZWQgZm9yICJldGhlcmNoYW5uZWwiIG9yICJ0cnVua2luZy4iCisKK2FjdGl2ZS1iYWNrdXA6IFRoZXJlIGlzIG5vdCBtdWNoIGFkdmFudGFnZSBpbiB0aGlzIG5ldHdvcmsgdG9wb2xvZ3kgdG8KKwl0aGUgYWN0aXZlLWJhY2t1cCBtb2RlLCBhcyB0aGUgaW5hY3RpdmUgYmFja3VwIGRldmljZXMgYXJlIGFsbAorCWNvbm5lY3RlZCB0byB0aGUgc2FtZSBwZWVyIGFzIHRoZSBwcmltYXJ5LiAgSW4gdGhpcyBjYXNlLCBhCisJbG9hZCBiYWxhbmNpbmcgbW9kZSAod2l0aCBsaW5rIG1vbml0b3JpbmcpIHdpbGwgcHJvdmlkZSB0aGUKKwlzYW1lIGxldmVsIG9mIG5ldHdvcmsgYXZhaWxhYmlsaXR5LCBidXQgd2l0aCBpbmNyZWFzZWQKKwlhdmFpbGFibGUgYmFuZHdpZHRoLiAgT24gdGhlIHBsdXMgc2lkZSwgaXQgZG9lcyBub3QgcmVxdWlyZQorCWFueSBjb25maWd1cmF0aW9uIG9mIHRoZSBzd2l0Y2guCisKK2JhbGFuY2UteG9yOiBUaGlzIG1vZGUgd2lsbCBsaW1pdCB0cmFmZmljIHN1Y2ggdGhhdCBwYWNrZXRzIGRlc3RpbmVkCisJZm9yIHNwZWNpZmljIHBlZXJzIHdpbGwgYWx3YXlzIGJlIHNlbnQgb3ZlciB0aGUgc2FtZQorCWludGVyZmFjZS4gIFNpbmNlIHRoZSBkZXN0aW5hdGlvbiBpcyBkZXRlcm1pbmVkIGJ5IHRoZSBNQUMKKwlhZGRyZXNzZXMgaW52b2x2ZWQsIHRoaXMgbWF5IGJlIGRlc2lyYWJsZSBpZiB5b3UgaGF2ZSBhIGxhcmdlCisJbmV0d29yayB3aXRoIG1hbnkgaG9zdHMuICBJdCBpcyBsaWtlbHkgdG8gYmUgc3Vib3B0aW1hbCBpZiBhbGwKKwl5b3VyIHRyYWZmaWMgaXMgcGFzc2VkIHRocm91Z2ggYSBzaW5nbGUgcm91dGVyLCBob3dldmVyLiAgQXMKKwl3aXRoIGJhbGFuY2UtcnIsIHRoZSBzd2l0Y2ggcG9ydHMgbmVlZCB0byBiZSBjb25maWd1cmVkIGZvcgorCSJldGhlcmNoYW5uZWwiIG9yICJ0cnVua2luZy4iCisKK2Jyb2FkY2FzdDogTGlrZSBhY3RpdmUtYmFja3VwLCB0aGVyZSBpcyBub3QgbXVjaCBhZHZhbnRhZ2UgdG8gdGhpcworCW1vZGUgaW4gdGhpcyB0eXBlIG9mIG5ldHdvcmsgdG9wb2xvZ3kuCisKKzgwMi4zYWQ6IFRoaXMgbW9kZSBjYW4gYmUgYSBnb29kIGNob2ljZSBmb3IgdGhpcyB0eXBlIG9mIG5ldHdvcmsKKwl0b3BvbG9neS4gIFRoZSA4MDIuM2FkIG1vZGUgaXMgYW4gSUVFRSBzdGFuZGFyZCwgc28gYWxsIHBlZXJzCisJdGhhdCBpbXBsZW1lbnQgODAyLjNhZCBzaG91bGQgaW50ZXJvcGVyYXRlIHdlbGwuICBUaGUgODAyLjNhZAorCXByb3RvY29sIGluY2x1ZGVzIGF1dG9tYXRpYyBjb25maWd1cmF0aW9uIG9mIHRoZSBhZ2dyZWdhdGVzLAorCXNvIG1pbmltYWwgbWFudWFsIGNvbmZpZ3VyYXRpb24gb2YgdGhlIHN3aXRjaCBpcyBuZWVkZWQKKwkodHlwaWNhbGx5IG9ubHkgdG8gZGVzaWduYXRlIHRoYXQgc29tZSBzZXQgb2YgZGV2aWNlcyBpcworCXVzYWJsZSBmb3IgODAyLjNhZCkuICBUaGUgODAyLjNhZCBzdGFuZGFyZCBhbHNvIG1hbmRhdGVzIHRoYXQKKwlmcmFtZXMgYmUgZGVsaXZlcmVkIGluIG9yZGVyICh3aXRoaW4gY2VydGFpbiBsaW1pdHMpLCBzbyBpbgorCWdlbmVyYWwgc2luZ2xlIGNvbm5lY3Rpb25zIHdpbGwgbm90IHNlZSBtaXNvcmRlcmluZyBvZgorCXBhY2tldHMuICBUaGUgODAyLjNhZCBtb2RlIGRvZXMgaGF2ZSBzb21lIGRyYXdiYWNrczogdGhlCisJc3RhbmRhcmQgbWFuZGF0ZXMgdGhhdCBhbGwgZGV2aWNlcyBpbiB0aGUgYWdncmVnYXRlIG9wZXJhdGUgYXQKKwl0aGUgc2FtZSBzcGVlZCBhbmQgZHVwbGV4LiAgQWxzbywgYXMgd2l0aCBhbGwgYm9uZGluZyBsb2FkCisJYmFsYW5jZSBtb2RlcyBvdGhlciB0aGFuIGJhbGFuY2UtcnIsIG5vIHNpbmdsZSBjb25uZWN0aW9uIHdpbGwKKwliZSBhYmxlIHRvIHV0aWxpemUgbW9yZSB0aGFuIGEgc2luZ2xlIGludGVyZmFjZSdzIHdvcnRoIG9mCisJYmFuZHdpZHRoLiAgQWRkaXRpb25hbGx5LCB0aGUgbGludXggYm9uZGluZyA4MDIuM2FkCisJaW1wbGVtZW50YXRpb24gZGlzdHJpYnV0ZXMgdHJhZmZpYyBieSBwZWVyICh1c2luZyBhbiBYT1Igb2YKKwlNQUMgYWRkcmVzc2VzKSwgc28gaW4gZ2VuZXJhbCBhbGwgdHJhZmZpYyB0byBhIHBhcnRpY3VsYXIKKwlkZXN0aW5hdGlvbiB3aWxsIHVzZSB0aGUgc2FtZSBpbnRlcmZhY2UuICBGaW5hbGx5LCB0aGUgODAyLjNhZAorCW1vZGUgbWFuZGF0ZXMgdGhlIHVzZSBvZiB0aGUgTUlJIG1vbml0b3IsIHRoZXJlZm9yZSwgdGhlIEFSUAorCW1vbml0b3IgaXMgbm90IGF2YWlsYWJsZSBpbiB0aGlzIG1vZGUuCisKK2JhbGFuY2UtdGxiOiBUaGlzIG1vZGUgaXMgYWxzbyBhIGdvb2QgY2hvaWNlIGZvciB0aGlzIHR5cGUgb2YKKwl0b3BvbG9neS4gIEl0IGhhcyBubyBzcGVjaWFsIHN3aXRjaCBjb25maWd1cmF0aW9uCisJcmVxdWlyZW1lbnRzLCBhbmQgYmFsYW5jZXMgb3V0Z29pbmcgdHJhZmZpYyBieSBwZWVyLCBpbiBhCisJdmFndWVseSBpbnRlbGxpZ2VudCBtYW5uZXIgKG5vdCBhIHNpbXBsZSBYT1IgYXMgaW4gYmFsYW5jZS14b3IKKwlvciA4MDIuM2FkIG1vZGUpLCBzbyB0aGF0IHVubHVja3kgTUFDIGFkZHJlc3NlcyB3aWxsIG5vdCBhbGwKKwkiYnVuY2ggdXAiIG9uIGEgc2luZ2xlIGludGVyZmFjZS4gIEludGVyZmFjZXMgbWF5IGJlIG9mCisJZGlmZmVyaW5nIHNwZWVkcy4gIE9uIHRoZSBkb3duIHNpZGUsIGluIHRoaXMgbW9kZSBhbGwgaW5jb21pbmcKKwl0cmFmZmljIGFycml2ZXMgb3ZlciBhIHNpbmdsZSBpbnRlcmZhY2UsIHRoaXMgbW9kZSByZXF1aXJlcworCWNlcnRhaW4gZXRodG9vbCBzdXBwb3J0IGluIHRoZSBuZXR3b3JrIGRldmljZSBkcml2ZXIgb2YgdGhlCisJc2xhdmUgaW50ZXJmYWNlcywgYW5kIHRoZSBBUlAgbW9uaXRvciBpcyBub3QgYXZhaWxhYmxlLgorCitiYWxhbmNlLWFsYjogVGhpcyBtb2RlIGlzIGV2ZXJ5dGhpbmcgdGhhdCBiYWxhbmNlLXRsYiBpcywgYW5kIG1vcmUuIEl0CisJaGFzIGFsbCBvZiB0aGUgZmVhdHVyZXMgKGFuZCByZXN0cmljdGlvbnMpIG9mIGJhbGFuY2UtdGxiLCBhbmQKKwl3aWxsIGFsc28gYmFsYW5jZSBpbmNvbWluZyB0cmFmZmljIGZyb20gcGVlcnMgKGFzIGRlc2NyaWJlZCBpbgorCXRoZSBCb25kaW5nIE1vZHVsZSBPcHRpb25zIHNlY3Rpb24sIGFib3ZlKS4gIFRoZSBvbmx5IGV4dHJhCisJZG93biBzaWRlIHRvIHRoaXMgbW9kZSBpcyB0aGF0IHRoZSBuZXR3b3JrIGRldmljZSBkcml2ZXIgbXVzdAorCXN1cHBvcnQgY2hhbmdpbmcgdGhlIGhhcmR3YXJlIGFkZHJlc3Mgd2hpbGUgdGhlIGRldmljZSBpcworCW9wZW4uCisKKzEyLjEuMiBMaW5rIE1vbml0b3JpbmcgZm9yIFNpbmdsZSBTd2l0Y2ggVG9wb2xvZ3kKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworCVRoZSBjaG9pY2Ugb2YgbGluayBtb25pdG9yaW5nIG1heSBsYXJnZWx5IGRlcGVuZCB1cG9uIHdoaWNoCittb2RlIHlvdSBjaG9vc2UgdG8gdXNlLiAgVGhlIG1vcmUgYWR2YW5jZWQgbG9hZCBiYWxhbmNpbmcgbW9kZXMgZG8gbm90CitzdXBwb3J0IHRoZSB1c2Ugb2YgdGhlIEFSUCBtb25pdG9yLCBhbmQgYXJlIHRodXMgcmVzdHJpY3RlZCB0byB1c2luZwordGhlIE1JSSBtb25pdG9yICh3aGljaCBkb2VzIG5vdCBwcm92aWRlIGFzIGhpZ2ggYSBsZXZlbCBvZiBhc3N1cmFuY2UKK2FzIHRoZSBBUlAgbW9uaXRvcikuCisKKworMTIuMiBIaWdoIEF2YWlsYWJpbGl0eSBpbiBhIE11bHRpcGxlIFN3aXRjaCBUb3BvbG9neQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisJV2l0aCBtdWx0aXBsZSBzd2l0Y2hlcywgdGhlIGNvbmZpZ3VyYXRpb24gb2YgYm9uZGluZyBhbmQgdGhlCituZXR3b3JrIGNoYW5nZXMgZHJhbWF0aWNhbGx5LiAgSW4gbXVsdGlwbGUgc3dpdGNoIHRvcG9sb2dpZXMsIHRoZXJlIGlzCithIHRyYWRlb2ZmIGJldHdlZW4gbmV0d29yayBhdmFpbGFiaWxpdHkgYW5kIHVzYWJsZSBiYW5kd2lkdGguCisKKwlCZWxvdyBpcyBhIHNhbXBsZSBuZXR3b3JrLCBjb25maWd1cmVkIHRvIG1heGltaXplIHRoZQorYXZhaWxhYmlsaXR5IG9mIHRoZSBuZXR3b3JrOgorCisgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgICAgICAgICAgICAgfHBvcnQzICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9ydDN8CisgICAgICAgICAgKy0tLS0tKy0tLS0rICAgICAgICAgICAgICAgICAgICAgICAgICArLS0tLS0rLS0tLSsKKyAgICAgICAgICB8ICAgICAgICAgIHxwb3J0MiAgICAgICBJU0wgICAgICBwb3J0MnwgICAgICAgICAgfAorICAgICAgICAgIHwgc3dpdGNoIEEgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKyBzd2l0Y2ggQiB8CisgICAgICAgICAgfCAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgIHwKKyAgICAgICAgICArLS0tLS0rLS0tLSsgICAgICAgICAgICAgICAgICAgICAgICAgICstLS0tLSsrLS0tKworICAgICAgICAgICAgICAgIHxwb3J0MSAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvcnQxfAorICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgKy0tLS0tLS0rICAgICAgICAgICAgICAgfAorICAgICAgICAgICAgICAgICstLS0tLS0tLS0tLS0tKyBob3N0MSArLS0tLS0tLS0tLS0tLS0tKworICAgICAgICAgICAgICAgICAgICAgICAgIGV0aDAgKy0tLS0tLS0rIGV0aDEKKworCUluIHRoaXMgY29uZmlndXJhdGlvbiwgdGhlcmUgaXMgYSBsaW5rIGJldHdlZW4gdGhlIHR3bworc3dpdGNoZXMgKElTTCwgb3IgaW50ZXIgc3dpdGNoIGxpbmspLCBhbmQgbXVsdGlwbGUgcG9ydHMgY29ubmVjdGluZyB0bwordGhlIG91dHNpZGUgd29ybGQgKCJwb3J0MyIgb24gZWFjaCBzd2l0Y2gpLiAgVGhlcmUgaXMgbm8gdGVjaG5pY2FsCityZWFzb24gdGhhdCB0aGlzIGNvdWxkIG5vdCBiZSBleHRlbmRlZCB0byBhIHRoaXJkIHN3aXRjaC4KKworMTIuMi4xIEJvbmRpbmcgTW9kZSBTZWxlY3Rpb24gZm9yIE11bHRpcGxlIFN3aXRjaCBUb3BvbG9neQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisJSW4gYSB0b3BvbG9neSBzdWNoIGFzIHRoaXMsIHRoZSBhY3RpdmUtYmFja3VwIGFuZCBicm9hZGNhc3QKK21vZGVzIGFyZSB0aGUgb25seSB1c2VmdWwgYm9uZGluZyBtb2RlczsgdGhlIG90aGVyIG1vZGVzIHJlcXVpcmUgYWxsCitsaW5rcyB0byB0ZXJtaW5hdGUgb24gdGhlIHNhbWUgcGVlciBmb3IgdGhlbSB0byBiZWhhdmUgcmF0aW9uYWxseS4KKworYWN0aXZlLWJhY2t1cDogVGhpcyBpcyBnZW5lcmFsbHkgdGhlIHByZWZlcnJlZCBtb2RlLCBwYXJ0aWN1bGFybHkgaWYKKwl0aGUgc3dpdGNoZXMgaGF2ZSBhbiBJU0wgYW5kIHBsYXkgdG9nZXRoZXIgd2VsbC4gIElmIHRoZQorCW5ldHdvcmsgY29uZmlndXJhdGlvbiBpcyBzdWNoIHRoYXQgb25lIHN3aXRjaCBpcyBzcGVjaWZpY2FsbHkKKwlhIGJhY2t1cCBzd2l0Y2ggKGUuZy4sIGhhcyBsb3dlciBjYXBhY2l0eSwgaGlnaGVyIGNvc3QsIGV0YyksCisJdGhlbiB0aGUgcHJpbWFyeSBvcHRpb24gY2FuIGJlIHVzZWQgdG8gaW5zdXJlIHRoYXQgdGhlCisJcHJlZmVycmVkIGxpbmsgaXMgYWx3YXlzIHVzZWQgd2hlbiBpdCBpcyBhdmFpbGFibGUuCisKK2Jyb2FkY2FzdDogVGhpcyBtb2RlIGlzIHJlYWxseSBhIHNwZWNpYWwgcHVycG9zZSBtb2RlLCBhbmQgaXMgc3VpdGFibGUKKwlvbmx5IGZvciB2ZXJ5IHNwZWNpZmljIG5lZWRzLiAgRm9yIGV4YW1wbGUsIGlmIHRoZSB0d28KKwlzd2l0Y2hlcyBhcmUgbm90IGNvbm5lY3RlZCAobm8gSVNMKSwgYW5kIHRoZSBuZXR3b3JrcyBiZXlvbmQKKwl0aGVtIGFyZSB0b3RhbGx5IGluZGVwZW5kYW50LiAgSW4gdGhpcyBjYXNlLCBpZiBpdCBpcworCW5lY2Vzc2FyeSBmb3Igc29tZSBzcGVjaWZpYyBvbmUtd2F5IHRyYWZmaWMgdG8gcmVhY2ggYm90aAorCWluZGVwZW5kZW50IG5ldHdvcmtzLCB0aGVuIHRoZSBicm9hZGNhc3QgbW9kZSBtYXkgYmUgc3VpdGFibGUuCisKKzEyLjIuMiBMaW5rIE1vbml0b3JpbmcgU2VsZWN0aW9uIGZvciBNdWx0aXBsZSBTd2l0Y2ggVG9wb2xvZ3kKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworCVRoZSBjaG9pY2Ugb2YgbGluayBtb25pdG9yaW5nIHVsdGltYXRlbHkgZGVwZW5kcyB1cG9uIHlvdXIKK3N3aXRjaC4gIElmIHRoZSBzd2l0Y2ggY2FuIHJlbGlhYmx5IGZhaWwgcG9ydHMgaW4gcmVzcG9uc2UgdG8gb3RoZXIKK2ZhaWx1cmVzLCB0aGVuIGVpdGhlciB0aGUgTUlJIG9yIEFSUCBtb25pdG9ycyBzaG91bGQgd29yay4gIEZvcgorZXhhbXBsZSwgaW4gdGhlIGFib3ZlIGV4YW1wbGUsIGlmIHRoZSAicG9ydDMiIGxpbmsgZmFpbHMgYXQgdGhlIHJlbW90ZQorZW5kLCB0aGUgTUlJIG1vbml0b3IgaGFzIG5vIGRpcmVjdCBtZWFucyB0byBkZXRlY3QgdGhpcy4gIFRoZSBBUlAKK21vbml0b3IgY291bGQgYmUgY29uZmlndXJlZCB3aXRoIGEgdGFyZ2V0IGF0IHRoZSByZW1vdGUgZW5kIG9mIHBvcnQzLAordGh1cyBkZXRlY3RpbmcgdGhhdCBmYWlsdXJlIHdpdGhvdXQgc3dpdGNoIHN1cHBvcnQuCisKKwlJbiBnZW5lcmFsLCBob3dldmVyLCBpbiBhIG11bHRpcGxlIHN3aXRjaCB0b3BvbG9neSwgdGhlIEFSUAorbW9uaXRvciBjYW4gcHJvdmlkZSBhIGhpZ2hlciBsZXZlbCBvZiByZWxpYWJpbGl0eSBpbiBkZXRlY3RpbmcgbGluaworZmFpbHVyZXMuICBBZGRpdGlvbmFsbHksIGl0IHNob3VsZCBiZSBjb25maWd1cmVkIHdpdGggbXVsdGlwbGUgdGFyZ2V0cworKGF0IGxlYXN0IG9uZSBmb3IgZWFjaCBzd2l0Y2ggaW4gdGhlIG5ldHdvcmspLiAgVGhpcyB3aWxsIGluc3VyZSB0aGF0LAorcmVnYXJkbGVzcyBvZiB3aGljaCBzd2l0Y2ggaXMgYWN0aXZlLCB0aGUgQVJQIG1vbml0b3IgaGFzIGEgc3VpdGFibGUKK3RhcmdldCB0byBxdWVyeS4KKworCisxMi4zIFN3aXRjaCBCZWhhdmlvciBJc3N1ZXMgZm9yIEhpZ2ggQXZhaWxhYmlsaXR5CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKwlZb3UgbWF5IGVuY291bnRlciBpc3N1ZXMgd2l0aCB0aGUgdGltaW5nIG9mIGxpbmsgdXAgYW5kIGRvd24KK3JlcG9ydGluZyBieSB0aGUgc3dpdGNoLgorCisJRmlyc3QsIHdoZW4gYSBsaW5rIGNvbWVzIHVwLCBzb21lIHN3aXRjaGVzIG1heSBpbmRpY2F0ZSB0aGF0Cit0aGUgbGluayBpcyB1cCAoY2FycmllciBhdmFpbGFibGUpLCBidXQgbm90IHBhc3MgdHJhZmZpYyBvdmVyIHRoZQoraW50ZXJmYWNlIGZvciBzb21lIHBlcmlvZCBvZiB0aW1lLiAgVGhpcyBkZWxheSBpcyB0eXBpY2FsbHkgZHVlIHRvCitzb21lIHR5cGUgb2YgYXV0b25lZ290aWF0aW9uIG9yIHJvdXRpbmcgcHJvdG9jb2wsIGJ1dCBtYXkgYWxzbyBvY2N1cgorZHVyaW5nIHN3aXRjaCBpbml0aWFsaXphdGlvbiAoZS5nLiwgZHVyaW5nIHJlY292ZXJ5IGFmdGVyIGEgc3dpdGNoCitmYWlsdXJlKS4gIElmIHlvdSBmaW5kIHRoaXMgdG8gYmUgYSBwcm9ibGVtLCBzcGVjaWZ5IGFuIGFwcHJvcHJpYXRlCit2YWx1ZSB0byB0aGUgdXBkZWxheSBib25kaW5nIG1vZHVsZSBvcHRpb24gdG8gZGVsYXkgdGhlIHVzZSBvZiB0aGUKK3JlbGV2YW50IGludGVyZmFjZShzKS4KKworCVNlY29uZCwgc29tZSBzd2l0Y2hlcyBtYXkgImJvdW5jZSIgdGhlIGxpbmsgc3RhdGUgb25lIG9yIG1vcmUKK3RpbWVzIHdoaWxlIGEgbGluayBpcyBjaGFuZ2luZyBzdGF0ZS4gIFRoaXMgb2NjdXJzIG1vc3QgY29tbW9ubHkgd2hpbGUKK3RoZSBzd2l0Y2ggaXMgaW5pdGlhbGl6aW5nLiAgQWdhaW4sIGFuIGFwcHJvcHJpYXRlIHVwZGVsYXkgdmFsdWUgbWF5CitoZWxwLCBidXQgbm90ZSB0aGF0IGlmIGFsbCBsaW5rcyBhcmUgZG93biwgdGhlbiB1cGRlbGF5IGlzIGlnbm9yZWQKK3doZW4gYW55IGxpbmsgYmVjb21lcyBhY3RpdmUgKHRoZSBzbGF2ZSBjbG9zZXN0IHRvIGNvbXBsZXRpbmcgaXRzCit1cGRlbGF5IGlzIGNob3NlbikuCisKKwlOb3RlIHRoYXQgd2hlbiBhIGJvbmRpbmcgaW50ZXJmYWNlIGhhcyBubyBhY3RpdmUgbGlua3MsIHRoZQorZHJpdmVyIHdpbGwgaW1tZWRpYXRlbHkgcmV1c2UgdGhlIGZpcnN0IGxpbmsgdGhhdCBnb2VzIHVwLCBldmVuIGlmCit1cGRlbGF5IHBhcmFtZXRlciB3YXMgc3BlY2lmaWVkLiAgSWYgdGhlcmUgYXJlIHNsYXZlIGludGVyZmFjZXMKK3dhaXRpbmcgZm9yIHRoZSB1cGRlbGF5IHRpbWVvdXQgdG8gZXhwaXJlLCB0aGUgaW50ZXJmYWNlIHRoYXQgZmlyc3QKK3dlbnQgaW50byB0aGF0IHN0YXRlIHdpbGwgYmUgaW1tZWRpYXRlbHkgcmV1c2VkLiAgVGhpcyByZWR1Y2VzIGRvd24KK3RpbWUgb2YgdGhlIG5ldHdvcmsgaWYgdGhlIHZhbHVlIG9mIHVwZGVsYXkgaGFzIGJlZW4gb3ZlcmVzdGltYXRlZC4KKworCUluIGFkZGl0aW9uIHRvIHRoZSBjb25jZXJucyBhYm91dCBzd2l0Y2ggdGltaW5ncywgaWYgeW91cgorc3dpdGNoZXMgdGFrZSBhIGxvbmcgdGltZSB0byBnbyBpbnRvIGJhY2t1cCBtb2RlLCBpdCBtYXkgYmUgZGVzaXJhYmxlCit0byBub3QgYWN0aXZhdGUgYSBiYWNrdXAgaW50ZXJmYWNlIGltbWVkaWF0ZWx5IGFmdGVyIGEgbGluayBnb2VzIGRvd24uCitGYWlsb3ZlciBtYXkgYmUgZGVsYXllZCB2aWEgdGhlIGRvd25kZWxheSBib25kaW5nIG1vZHVsZSBvcHRpb24uCisKKzEzLiBIYXJkd2FyZSBTcGVjaWZpYyBDb25zaWRlcmF0aW9ucworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKwlUaGlzIHNlY3Rpb24gY29udGFpbnMgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiBmb3IgY29uZmlndXJpbmcKK2JvbmRpbmcgb24gc3BlY2lmaWMgaGFyZHdhcmUgcGxhdGZvcm1zLCBvciBmb3IgaW50ZXJmYWNpbmcgYm9uZGluZword2l0aCBwYXJ0aWN1bGFyIHN3aXRjaGVzIG9yIG90aGVyIGRldmljZXMuCisKKzEzLjEgSUJNIEJsYWRlQ2VudGVyCistLS0tLS0tLS0tLS0tLS0tLS0tLQorCisJVGhpcyBhcHBsaWVzIHRvIHRoZSBKUzIwIGFuZCBzaW1pbGFyIHN5c3RlbXMuCisKKwlPbiB0aGUgSlMyMCBibGFkZXMsIHRoZSBib25kaW5nIGRyaXZlciBzdXBwb3J0cyBvbmx5CitiYWxhbmNlLXJyLCBhY3RpdmUtYmFja3VwLCBiYWxhbmNlLXRsYiBhbmQgYmFsYW5jZS1hbGIgbW9kZXMuICBUaGlzIGlzCitsYXJnZWx5IGR1ZSB0byB0aGUgbmV0d29yayB0b3BvbG9neSBpbnNpZGUgdGhlIEJsYWRlQ2VudGVyLCBkZXRhaWxlZAorYmVsb3cuCisKK0pTMjAgbmV0d29yayBhZGFwdGVyIGluZm9ybWF0aW9uCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisJQWxsIEpTMjBzIGNvbWUgd2l0aCB0d28gQnJvYWRjb20gR2lnYWJpdCBFdGhlcm5ldCBwb3J0cworaW50ZWdyYXRlZCBvbiB0aGUgcGxhbmFyLiAgSW4gdGhlIEJsYWRlQ2VudGVyIGNoYXNzaXMsIHRoZSBldGgwIHBvcnQKK29mIGFsbCBKUzIwIGJsYWRlcyBpcyBoYXJkIHdpcmVkIHRvIEkvTyBNb2R1bGUgIzE7IHNpbWlsYXJseSwgYWxsIGV0aDEKK3BvcnRzIGFyZSB3aXJlZCB0byBJL08gTW9kdWxlICMyLiAgQW4gYWRkLW9uIEJyb2FkY29tIGRhdWdodGVyIGNhcmQKK2NhbiBiZSBpbnN0YWxsZWQgb24gYSBKUzIwIHRvIHByb3ZpZGUgdHdvIG1vcmUgR2lnYWJpdCBFdGhlcm5ldCBwb3J0cy4KK1RoZXNlIHBvcnRzLCBldGgyIGFuZCBldGgzLCBhcmUgd2lyZWQgdG8gSS9PIE1vZHVsZXMgMyBhbmQgNCwKK3Jlc3BlY3RpdmVseS4KKworCUVhY2ggSS9PIE1vZHVsZSBtYXkgY29udGFpbiBlaXRoZXIgYSBzd2l0Y2ggb3IgYSBwYXNzdGhyb3VnaAorbW9kdWxlICh3aGljaCBhbGxvd3MgcG9ydHMgdG8gYmUgZGlyZWN0bHkgY29ubmVjdGVkIHRvIGFuIGV4dGVybmFsCitzd2l0Y2gpLiAgU29tZSBib25kaW5nIG1vZGVzIHJlcXVpcmUgYSBzcGVjaWZpYyBCbGFkZUNlbnRlciBpbnRlcm5hbAorbmV0d29yayB0b3BvbG9neSBpbiBvcmRlciB0byBmdW5jdGlvbjsgdGhlc2UgYXJlIGRldGFpbGVkIGJlbG93LgorCisJQWRkaXRpb25hbCBCbGFkZUNlbnRlci1zcGVjaWZpYyBuZXR3b3JraW5nIGluZm9ybWF0aW9uIGNhbiBiZQorZm91bmQgaW4gdHdvIElCTSBSZWRib29rcyAod3d3LmlibS5jb20vcmVkYm9va3MpOgorCisiSUJNIGVTZXJ2ZXIgQmxhZGVDZW50ZXIgTmV0d29ya2luZyBPcHRpb25zIgorIklCTSBlU2VydmVyIEJsYWRlQ2VudGVyIExheWVyIDItNyBOZXR3b3JrIFN3aXRjaGluZyIKKworQmxhZGVDZW50ZXIgbmV0d29ya2luZyBjb25maWd1cmF0aW9uCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworCUJlY2F1c2UgYSBCbGFkZUNlbnRlciBjYW4gYmUgY29uZmlndXJlZCBpbiBhIHZlcnkgbGFyZ2UgbnVtYmVyCitvZiB3YXlzLCB0aGlzIGRpc2N1c3Npb24gd2lsbCBiZSBjb25maW5lZCB0byBkZXNjcmliaW5nIGJhc2ljCitjb25maWd1cmF0aW9ucy4KKworCU5vcm1hbGx5LCBFdGhlcm5ldCBTd2l0Y2ggTW9kdWxlcyAoRVNNKSBhcmUgdXNlZCBpbiBJL08KK21vZHVsZXMgMSBhbmQgMi4gIEluIHRoaXMgY29uZmlndXJhdGlvbiwgdGhlIGV0aDAgYW5kIGV0aDEgcG9ydHMgb2YgYQorSlMyMCB3aWxsIGJlIGNvbm5lY3RlZCB0byBkaWZmZXJlbnQgaW50ZXJuYWwgc3dpdGNoZXMgKGluIHRoZQorcmVzcGVjdGl2ZSBJL08gbW9kdWxlcykuCisKKwlBbiBvcHRpY2FsIHBhc3N0aHJ1IG1vZHVsZSAoT1BNKSBjb25uZWN0cyB0aGUgSS9PIG1vZHVsZQorZGlyZWN0bHkgdG8gYW4gZXh0ZXJuYWwgc3dpdGNoLiAgQnkgdXNpbmcgT1BNcyBpbiBJL08gbW9kdWxlICMxIGFuZAorIzIsIHRoZSBldGgwIGFuZCBldGgxIGludGVyZmFjZXMgb2YgYSBKUzIwIGNhbiBiZSByZWRpcmVjdGVkIHRvIHRoZQorb3V0c2lkZSB3b3JsZCBhbmQgY29ubmVjdGVkIHRvIGEgY29tbW9uIGV4dGVybmFsIHN3aXRjaC4KKworCURlcGVuZGluZyB1cG9uIHRoZSBtaXggb2YgRVNNIGFuZCBPUE0gbW9kdWxlcywgdGhlIG5ldHdvcmsKK3dpbGwgYXBwZWFyIHRvIGJvbmRpbmcgYXMgZWl0aGVyIGEgc2luZ2xlIHN3aXRjaCB0b3BvbG9neSAoYWxsIE9QTQorbW9kdWxlcykgb3IgYXMgYSBtdWx0aXBsZSBzd2l0Y2ggdG9wb2xvZ3kgKG9uZSBvciBtb3JlIEVTTSBtb2R1bGVzLAoremVybyBvciBtb3JlIE9QTSBtb2R1bGVzKS4gIEl0IGlzIGFsc28gcG9zc2libGUgdG8gY29ubmVjdCBFU00gbW9kdWxlcwordG9nZXRoZXIsIHJlc3VsdGluZyBpbiBhIGNvbmZpZ3VyYXRpb24gbXVjaCBsaWtlIHRoZSBleGFtcGxlIGluICJIaWdoCitBdmFpbGFiaWxpdHkgaW4gYSBtdWx0aXBsZSBzd2l0Y2ggdG9wb2xvZ3kuIgorCitSZXF1aXJlbWVudHMgZm9yIHNwZWNpZmMgbW9kZXMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisJVGhlIGJhbGFuY2UtcnIgbW9kZSByZXF1aXJlcyB0aGUgdXNlIG9mIE9QTSBtb2R1bGVzIGZvcgorZGV2aWNlcyBpbiB0aGUgYm9uZCwgYWxsIGNvbm5lY3RlZCB0byBhbiBjb21tb24gZXh0ZXJuYWwgc3dpdGNoLiAgVGhhdAorc3dpdGNoIG11c3QgYmUgY29uZmlndXJlZCBmb3IgImV0aGVyY2hhbm5lbCIgb3IgInRydW5raW5nIiBvbiB0aGUKK2FwcHJvcHJpYXRlIHBvcnRzLCBhcyBpcyB1c3VhbCBmb3IgYmFsYW5jZS1yci4KKworCVRoZSBiYWxhbmNlLWFsYiBhbmQgYmFsYW5jZS10bGIgbW9kZXMgd2lsbCBmdW5jdGlvbiB3aXRoCitlaXRoZXIgc3dpdGNoIG1vZHVsZXMgb3IgcGFzc3Rocm91Z2ggbW9kdWxlcyAob3IgYSBtaXgpLiAgVGhlIG9ubHkKK3NwZWNpZmljIHJlcXVpcmVtZW50IGZvciB0aGVzZSBtb2RlcyBpcyB0aGF0IGFsbCBuZXR3b3JrIGludGVyZmFjZXMKK211c3QgYmUgYWJsZSB0byByZWFjaCBhbGwgZGVzdGluYXRpb25zIGZvciB0cmFmZmljIHNlbnQgb3ZlciB0aGUKK2JvbmRpbmcgZGV2aWNlIChpLmUuLCB0aGUgbmV0d29yayBtdXN0IGNvbnZlcmdlIGF0IHNvbWUgcG9pbnQgb3V0c2lkZQordGhlIEJsYWRlQ2VudGVyKS4KKworCVRoZSBhY3RpdmUtYmFja3VwIG1vZGUgaGFzIG5vIGFkZGl0aW9uYWwgcmVxdWlyZW1lbnRzLgorCitMaW5rIG1vbml0b3JpbmcgaXNzdWVzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKwlXaGVuIGFuIEV0aGVybmV0IFN3aXRjaCBNb2R1bGUgaXMgaW4gcGxhY2UsIG9ubHkgdGhlIEFSUAorbW9uaXRvciB3aWxsIHJlbGlhYmx5IGRldGVjdCBsaW5rIGxvc3MgdG8gYW4gZXh0ZXJuYWwgc3dpdGNoLiAgVGhpcyBpcworbm90aGluZyB1bnVzdWFsLCBidXQgZXhhbWluYXRpb24gb2YgdGhlIEJsYWRlQ2VudGVyIGNhYmluZXQgd291bGQKK3N1Z2dlc3QgdGhhdCB0aGUgImV4dGVybmFsIiBuZXR3b3JrIHBvcnRzIGFyZSB0aGUgZXRoZXJuZXQgcG9ydHMgZm9yCit0aGUgc3lzdGVtLCB3aGVuIGl0IGZhY3QgdGhlcmUgaXMgYSBzd2l0Y2ggYmV0d2VlbiB0aGVzZSAiZXh0ZXJuYWwiCitwb3J0cyBhbmQgdGhlIGRldmljZXMgb24gdGhlIEpTMjAgc3lzdGVtIGl0c2VsZi4gIFRoZSBNSUkgbW9uaXRvciBpcworb25seSBhYmxlIHRvIGRldGVjdCBsaW5rIGZhaWx1cmVzIGJldHdlZW4gdGhlIEVTTSBhbmQgdGhlIEpTMjAgc3lzdGVtLgorCisJV2hlbiBhIHBhc3N0aHJvdWdoIG1vZHVsZSBpcyBpbiBwbGFjZSwgdGhlIE1JSSBtb25pdG9yIGRvZXMKK2RldGVjdCBmYWlsdXJlcyB0byB0aGUgImV4dGVybmFsIiBwb3J0LCB3aGljaCBpcyB0aGVuIGRpcmVjdGx5Citjb25uZWN0ZWQgdG8gdGhlIEpTMjAgc3lzdGVtLgorCitPdGhlciBjb25jZXJucworLS0tLS0tLS0tLS0tLS0KKworCVRoZSBTZXJpYWwgT3ZlciBMQU4gbGluayBpcyBlc3RhYmxpc2hlZCBvdmVyIHRoZSBwcmltYXJ5CitldGhlcm5ldCAoZXRoMCkgb25seSwgdGhlcmVmb3JlLCBhbnkgbG9zcyBvZiBsaW5rIHRvIGV0aDAgd2lsbCByZXN1bHQKK2luIGxvc2luZyB5b3VyIFNvTCBjb25uZWN0aW9uLiAgSXQgd2lsbCBub3QgZmFpbCBvdmVyIHdpdGggb3RoZXIKK25ldHdvcmsgdHJhZmZpYy4KKworCUl0IG1heSBiZSBkZXNpcmFibGUgdG8gZGlzYWJsZSBzcGFubmluZyB0cmVlIG9uIHRoZSBzd2l0Y2gKKyhlaXRoZXIgdGhlIGludGVybmFsIEV0aGVybmV0IFN3aXRjaCBNb2R1bGUsIG9yIGFuIGV4dGVybmFsIHN3aXRjaCkgdG8KK2F2b2lkIGZhaWwtb3ZlciBkZWxheXMgaXNzdWVzIHdoZW4gdXNpbmcgYm9uZGluZy4KKworCQorMTQuIEZyZXF1ZW50bHkgQXNrZWQgUXVlc3Rpb25zCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworMS4gIElzIGl0IFNNUCBzYWZlPworCisJWWVzLiBUaGUgb2xkIDIuMC54eCBjaGFubmVsIGJvbmRpbmcgcGF0Y2ggd2FzIG5vdCBTTVAgc2FmZS4KK1RoZSBuZXcgZHJpdmVyIHdhcyBkZXNpZ25lZCB0byBiZSBTTVAgc2FmZSBmcm9tIHRoZSBzdGFydC4KKworMi4gIFdoYXQgdHlwZSBvZiBjYXJkcyB3aWxsIHdvcmsgd2l0aCBpdD8KKworCUFueSBFdGhlcm5ldCB0eXBlIGNhcmRzICh5b3UgY2FuIGV2ZW4gbWl4IGNhcmRzIC0gYSBJbnRlbAorRXRoZXJFeHByZXNzIFBSTy8xMDAgYW5kIGEgM2NvbSAzYzkwNWIsIGZvciBleGFtcGxlKS4gIFRoZXkgbmVlZCBub3QKK2JlIG9mIHRoZSBzYW1lIHNwZWVkLgorCiszLiAgSG93IG1hbnkgYm9uZGluZyBkZXZpY2VzIGNhbiBJIGhhdmU/CisKKwlUaGVyZSBpcyBubyBsaW1pdC4KKworNC4gIEhvdyBtYW55IHNsYXZlcyBjYW4gYSBib25kaW5nIGRldmljZSBoYXZlPworCisJVGhpcyBpcyBsaW1pdGVkIG9ubHkgYnkgdGhlIG51bWJlciBvZiBuZXR3b3JrIGludGVyZmFjZXMgTGludXgKK3N1cHBvcnRzIGFuZC9vciB0aGUgbnVtYmVyIG9mIG5ldHdvcmsgY2FyZHMgeW91IGNhbiBwbGFjZSBpbiB5b3VyCitzeXN0ZW0uCisKKzUuICBXaGF0IGhhcHBlbnMgd2hlbiBhIHNsYXZlIGxpbmsgZGllcz8KKworCUlmIGxpbmsgbW9uaXRvcmluZyBpcyBlbmFibGVkLCB0aGVuIHRoZSBmYWlsaW5nIGRldmljZSB3aWxsIGJlCitkaXNhYmxlZC4gIFRoZSBhY3RpdmUtYmFja3VwIG1vZGUgd2lsbCBmYWlsIG92ZXIgdG8gYSBiYWNrdXAgbGluaywgYW5kCitvdGhlciBtb2RlcyB3aWxsIGlnbm9yZSB0aGUgZmFpbGVkIGxpbmsuICBUaGUgbGluayB3aWxsIGNvbnRpbnVlIHRvIGJlCittb25pdG9yZWQsIGFuZCBzaG91bGQgaXQgcmVjb3ZlciwgaXQgd2lsbCByZWpvaW4gdGhlIGJvbmQgKGluIHdoYXRldmVyCittYW5uZXIgaXMgYXBwcm9wcmlhdGUgZm9yIHRoZSBtb2RlKS4gU2VlIHRoZSBzZWN0aW9uIG9uIEhpZ2gKK0F2YWlsYWJpbGl0eSBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbi4KKwkKKwlMaW5rIG1vbml0b3JpbmcgY2FuIGJlIGVuYWJsZWQgdmlhIGVpdGhlciB0aGUgbWlpbW9uIG9yCithcnBfaW50ZXJ2YWwgcGFyYW10ZXJzIChkZXNjcmliZWQgaW4gdGhlIG1vZHVsZSBwYXJhbXRlcnMgc2VjdGlvbiwKK2Fib3ZlKS4gIEluIGdlbmVyYWwsIG1paW1vbiBtb25pdG9ycyB0aGUgY2FycmllciBzdGF0ZSBhcyBzZW5zZWQgYnkKK3RoZSB1bmRlcmx5aW5nIG5ldHdvcmsgZGV2aWNlLCBhbmQgdGhlIGFycCBtb25pdG9yIChhcnBfaW50ZXJ2YWwpCittb25pdG9ycyBjb25uZWN0aXZpdHkgdG8gYW5vdGhlciBob3N0IG9uIHRoZSBsb2NhbCBuZXR3b3JrLgorCisJSWYgbm8gbGluayBtb25pdG9yaW5nIGlzIGNvbmZpZ3VyZWQsIHRoZSBib25kaW5nIGRyaXZlciB3aWxsCitiZSB1bmFibGUgdG8gZGV0ZWN0IGxpbmsgZmFpbHVyZXMsIGFuZCB3aWxsIGFzc3VtZSB0aGF0IGFsbCBsaW5rcyBhcmUKK2Fsd2F5cyBhdmFpbGFibGUuICBUaGlzIHdpbGwgbGlrZWx5IHJlc3VsdCBpbiBsb3N0IHBhY2tldHMsIGFuZCBhCityZXN1bHRpbmcgZGVncmVkYXRpb24gb2YgcGVyZm9ybWFuY2UuICBUaGUgcHJlY2lzZSBwZXJmb3JtYW5jZSBsb3NzCitkZXBlbmRzIHVwb24gdGhlIGJvbmRpbmcgbW9kZSBhbmQgbmV0d29yayBjb25maWd1cmF0aW9uLgorCis2LiAgQ2FuIGJvbmRpbmcgYmUgdXNlZCBmb3IgSGlnaCBBdmFpbGFiaWxpdHk/CisKKwlZZXMuICBTZWUgdGhlIHNlY3Rpb24gb24gSGlnaCBBdmFpbGFiaWxpdHkgZm9yIGRldGFpbHMuCisKKzcuICBXaGljaCBzd2l0Y2hlcy9zeXN0ZW1zIGRvZXMgaXQgd29yayB3aXRoPworCisJVGhlIGZ1bGwgYW5zd2VyIHRvIHRoaXMgZGVwZW5kcyB1cG9uIHRoZSBkZXNpcmVkIG1vZGUuCisKKwlJbiB0aGUgYmFzaWMgYmFsYW5jZSBtb2RlcyAoYmFsYW5jZS1yciBhbmQgYmFsYW5jZS14b3IpLCBpdAord29ya3Mgd2l0aCBhbnkgc3lzdGVtIHRoYXQgc3VwcG9ydHMgZXRoZXJjaGFubmVsIChhbHNvIGNhbGxlZAordHJ1bmtpbmcpLiAgTW9zdCBtYW5hZ2VkIHN3aXRjaGVzIGN1cnJlbnRseSBhdmFpbGFibGUgaGF2ZSBzdWNoCitzdXBwb3J0LCBhbmQgbWFueSB1bm1hbmFuZ2VkIHN3aXRjaGVzIGFzIHdlbGwuCisKKwlUaGUgYWR2YW5jZWQgYmFsYW5jZSBtb2RlcyAoYmFsYW5jZS10bGIgYW5kIGJhbGFuY2UtYWxiKSBkbworbm90IGhhdmUgc3BlY2lhbCBzd2l0Y2ggcmVxdWlyZW1lbnRzLCBidXQgZG8gbmVlZCBkZXZpY2UgZHJpdmVycyB0aGF0CitzdXBwb3J0IHNwZWNpZmljIGZlYXR1cmVzIChkZXNjcmliZWQgaW4gdGhlIGFwcHJvcHJpYXRlIHNlY3Rpb24gdW5kZXIKK21vZHVsZSBwYXJhbXRlcnMsIGFib3ZlKS4KKworCUluIDgwMi4zYWQgbW9kZSwgaXQgd29ya3Mgd2l0aCB3aXRoIHN5c3RlbXMgdGhhdCBzdXBwb3J0IElFRUUKKzgwMi4zYWQgRHluYW1pYyBMaW5rIEFnZ3JlZ2F0aW9uLiAgTW9zdCBtYW5hZ2VkIGFuZCBtYW55IHVubWFuYWdlZAorc3dpdGNoZXMgY3VycmVudGx5IGF2YWlsYWJsZSBzdXBwb3J0IDgwMi4zYWQuCisKKyAgICAgICAgVGhlIGFjdGl2ZS1iYWNrdXAgbW9kZSBzaG91bGQgd29yayB3aXRoIGFueSBMYXllci1JSSBzd2l0Y2guCisKKzguICBXaGVyZSBkb2VzIGEgYm9uZGluZyBkZXZpY2UgZ2V0IGl0cyBNQUMgYWRkcmVzcyBmcm9tPworCisJSWYgbm90IGV4cGxpY2l0bHkgY29uZmlndXJlZCB3aXRoIGlmY29uZmlnLCB0aGUgTUFDIGFkZHJlc3Mgb2YKK3RoZSBib25kaW5nIGRldmljZSBpcyB0YWtlbiBmcm9tIGl0cyBmaXJzdCBzbGF2ZSBkZXZpY2UuIFRoaXMgTUFDCithZGRyZXNzIGlzIHRoZW4gcGFzc2VkIHRvIGFsbCBmb2xsb3dpbmcgc2xhdmVzIGFuZCByZW1haW5zIHBlcnNpc3RlbnQKKyhldmVuIGlmIHRoZSB0aGUgZmlyc3Qgc2xhdmUgaXMgcmVtb3ZlZCkgdW50aWwgdGhlIGJvbmRpbmcgZGV2aWNlIGlzCiticm91Z2h0IGRvd24gb3IgcmVjb25maWd1cmVkLgorCisJSWYgeW91IHdpc2ggdG8gY2hhbmdlIHRoZSBNQUMgYWRkcmVzcywgeW91IGNhbiBzZXQgaXQgd2l0aAoraWZjb25maWc6CisKKyMgaWZjb25maWcgYm9uZDAgaHcgZXRoZXIgMDA6MTE6MjI6MzM6NDQ6NTUKKworCVRoZSBNQUMgYWRkcmVzcyBjYW4gYmUgYWxzbyBjaGFuZ2VkIGJ5IGJyaW5naW5nIGRvd24vdXAgdGhlCitkZXZpY2UgYW5kIHRoZW4gY2hhbmdpbmcgaXRzIHNsYXZlcyAob3IgdGhlaXIgb3JkZXIpOgorCisjIGlmY29uZmlnIGJvbmQwIGRvd24gOyBtb2Rwcm9iZSAtciBib25kaW5nCisjIGlmY29uZmlnIGJvbmQwIC4uLi4gdXAKKyMgaWZlbnNsYXZlIGJvbmQwIGV0aC4uLgorCisJVGhpcyBtZXRob2Qgd2lsbCBhdXRvbWF0aWNhbGx5IHRha2UgdGhlIGFkZHJlc3MgZnJvbSB0aGUgbmV4dAorc2xhdmUgdGhhdCBpcyBhZGRlZC4KKworCVRvIHJlc3RvcmUgeW91ciBzbGF2ZXMnIE1BQyBhZGRyZXNzZXMsIHlvdSBuZWVkIHRvIGRldGFjaCB0aGVtCitmcm9tIHRoZSBib25kIChgaWZlbnNsYXZlIC1kIGJvbmQwIGV0aDAnKS4gVGhlIGJvbmRpbmcgZHJpdmVyIHdpbGwKK3RoZW4gcmVzdG9yZSB0aGUgTUFDIGFkZHJlc3NlcyB0aGF0IHRoZSBzbGF2ZXMgaGFkIGJlZm9yZSB0aGV5IHdlcmUKK2Vuc2xhdmVkLgorCisxNS4gUmVzb3VyY2VzIGFuZCBMaW5rcworPT09PT09PT09PT09PT09PT09PT09PT0KKworVGhlIGxhdGVzdCB2ZXJzaW9uIG9mIHRoZSBib25kaW5nIGRyaXZlciBjYW4gYmUgZm91bmQgaW4gdGhlIGxhdGVzdAordmVyc2lvbiBvZiB0aGUgbGludXgga2VybmVsLCBmb3VuZCBvbiBodHRwOi8va2VybmVsLm9yZworCitEaXNjdXNzaW9ucyByZWdhcmRpbmcgdGhlIGJvbmRpbmcgZHJpdmVyIHRha2UgcGxhY2UgcHJpbWFyaWx5IG9uIHRoZQorYm9uZGluZy1kZXZlbCBtYWlsaW5nIGxpc3QsIGhvc3RlZCBhdCBzb3VyY2Vmb3JnZS5uZXQuICBJZiB5b3UgaGF2ZQorcXVlc3Rpb25zIG9yIHByb2JsZW1zLCBwb3N0IHRoZW0gdG8gdGhlIGxpc3QuCisKK2JvbmRpbmctZGV2ZWxAbGlzdHMuc291cmNlZm9yZ2UubmV0CisKK2h0dHBzOi8vbGlzdHMuc291cmNlZm9yZ2UubmV0L2xpc3RzL2xpc3RpbmZvL2JvbmRpbmctZGV2ZWwKKworVGhlcmUgaXMgYWxzbyBhIHByb2plY3Qgc2l0ZSBvbiBzb3VyY2Vmb3JnZS4KKworaHR0cDovL3d3dy5zb3VyY2Vmb3JnZS5uZXQvcHJvamVjdHMvYm9uZGluZworCitEb25hbGQgQmVja2VyJ3MgRXRoZXJuZXQgRHJpdmVycyBhbmQgZGlhZyBwcm9ncmFtcyBtYXkgYmUgZm91bmQgYXQgOgorIC0gaHR0cDovL3d3dy5zY3lsZC5jb20vbmV0d29yay8KKworWW91IHdpbGwgYWxzbyBmaW5kIGEgbG90IG9mIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBFdGhlcm5ldCwgTldheSwgTUlJLAorZXRjLiBhdCB3d3cuc2N5bGQuY29tLgorCistLSBFTkQgLS0KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9icmlkZ2UudHh0IGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2JyaWRnZS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmRhZTJkYgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9icmlkZ2UudHh0CkBAIC0wLDAgKzEsOCBAQAorSW4gb3JkZXIgdG8gdXNlIHRoZSBFdGhlcm5ldCBicmlkZ2luZyBmdW5jdGlvbmFsaXR5LCB5b3UnbGwgbmVlZCB0aGUKK3VzZXJzcGFjZSB0b29scy4gVGhlc2UgcHJvZ3JhbXMgYW5kIGRvY3VtZW50YXRpb24gYXJlIGF2YWlsYWJsZQorYXQgaHR0cDovL2JyaWRnZS5zb3VyY2Vmb3JnZS5uZXQuICBUaGUgZG93bmxvYWQgcGFnZSBpcworaHR0cDovL3ByZG93bmxvYWRzLnNvdXJjZWZvcmdlLm5ldC9icmlkZ2UuCisKK0lmIHlvdSBzdGlsbCBoYXZlIHF1ZXN0aW9ucywgZG9uJ3QgaGVzaXRhdGUgdG8gcG9zdCB0byB0aGUgbWFpbGluZyBsaXN0IAorKG1vcmUgaW5mbyBodHRwOi8vbGlzdHMub3NkbC5vcmcvbWFpbG1hbi9saXN0aW5mby9icmlkZ2UpLgorCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvY29teC50eHQgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvY29teC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDE1MjZlYgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9jb214LnR4dApAQCAtMCwwICsxLDI0OCBAQAorCisJCUNPTVggZHJpdmVycyBmb3IgdGhlIDIuMiBrZXJuZWwKKworT3JpZ2luYWxseSB3cml0dGVuIGJ5OiBUaXZhZGFyIFN6ZW1ldGh5LCA8dGl2QGl0Yy5odT4KK0N1cnJlbnRseSBtYWludGFpbmVkIGJ5OiBHZXJnZWx5IE1hZGFyYXN6IDxnb3Jnb0BpdGMuaHU+CisKK0xhc3QgY2hhbmdlOiAyMS8wNi8xOTk5LgorCitJTlRST0RVQ1RJT04KKworVGhpcyBkb2N1bWVudCBkZXNjcmliZXMgdGhlIHNvZnR3YXJlIGRyaXZlcnMgYW5kIHRoZWlyIHVzZSBmb3IgdGhlIAorQ09NWCBsaW5lIG9mIHN5bmNocm9ub3VzIHNlcmlhbCBhZGFwdGVycyBmb3IgTGludXggdmVyc2lvbiAyLjIuMCBhbmQKK2Fib3ZlLgorVGhlIGNhcmRzIGFyZSBwcm9kdWNlZCBhbmQgc29sZCBieSBJVEMtUHJvIEx0ZC4gQnVkYXBlc3QsIEh1bmdhcnkKK0ZvciBmdXJ0aGVyIGluZm8gY29udGFjdCA8aW5mb0BpdGMuaHU+IAorb3IgaHR0cDovL3d3dy5pdGMuaHUgKG1vc3RseSBpbiBIdW5nYXJpYW4pLgorVGhlIGZpcm13YXJlIGZpbGVzIGFuZCBzb2Z0d2FyZSBhcmUgYXZhaWxhYmxlIGZyb20gZnRwOi8vZnRwLml0Yy5odQorCitDdXJyZW50bHksIHRoZSBkcml2ZXJzIHN1cHBvcnQgdGhlIGZvbGxvd2luZyBjYXJkcyBhbmQgcHJvdG9jb2xzOgorCitDT01YICgyeDY0IGticHMgaW50ZWxsaWdlbnQgYm9hcmQpCitDTVggKDF4MjU2ICsgMXgxMjgga2JwcyBpbnRlbGxpZ2VudCBib2FyZCkKK0hpQ09NWCAoMngyTWJwcyBpbnRlbGxpZ2VudCBib2FyZCkKK0xvQ09NWCAoMXg1MTIga2JwcyBwYXNzaXZlIGJvYXJkKQorTWl4Q09NICgxeDUxMiBvciAyeDUxMmticHMgcGFzc2l2ZSBib2FyZCB3aXRoIGEgaGFyZHdhcmUgd2F0Y2hkb2cgYW4KKwlvcHRpb25hbCBCUkkgaW50ZXJmYWNlIGFuZCBvcHRpb25hbCBmbGFzaFJPTSAoMS0zMk0pKQorU2xpY2VDT00JKDF4Mk1icHMgY2hhbm5lbGl6ZWQgRTEgYm9hcmQpCitQY2lDT00JKFgyMSkKKworQXQgdGhlIG1vbWVudCBvZiB3cml0aW5nIHRoaXMgZG9jdW1lbnQsIHRoZSAoQ2lzY28pLUhETEMsIExBUEIsIFN5bmNQUFAgYW5kCitGcmFtZSBSZWxheSAoRFRFLCByZmMxMjk0IElQIGVuY2Fwc3VsYXRpb24gd2l0aCBwYXJ0aWFsbHkgaW1wbGVtZW50ZWQgUTkzM2EgCitMTUkpIHByb3RvY29scyBhcmUgYXZhaWxhYmxlIGFzIGxpbmstbGV2ZWwgcHJvdG9jb2wuIAorWC4yNSBzdXBwb3J0IGlzIGJlaW5nIHdvcmtlZCBvbi4KKworVVNBR0UKKworTG9hZCB0aGUgY29teC5vIG1vZHVsZSBhbmQgdGhlIGhhcmR3YXJlLXNwZWNpZmljIGFuZCBwcm90b2NvbC1zcGVjaWZpYyAKK21vZHVsZXMgeW91J2xsIG5lZWQgaW50byB0aGUgcnVubmluZyBrZXJuZWwgdXNpbmcgdGhlIGluc21vZCB1dGlsaXR5LgorVGhpcyBjcmVhdGVzIHRoZSAvcHJvYy9jb214IGRpcmVjdG9yeS4KK1NlZSB0aGUgZXhhbXBsZSBzY3JpcHRzIGluIHRoZSAnZXRjJyBkaXJlY3RvcnkuCisKKy9wcm9jIElOVEVSRkFDRSBJTlRSTworCitUaGUgQ09NWCBkcml2ZXIgc2V0IGhhcyBhIG5ldyB0eXBlIG9mIHVzZXIgaW50ZXJmYWNlIGJhc2VkIG9uIHRoZSAvcHJvYyAKK2ZpbGVzeXN0ZW0gd2hpY2ggZWxpbWluYXRlcyB0aGUgbmVlZCBmb3IgZXh0ZXJuYWwgdXNlci1sYW5kIHNvZnR3YXJlIGRvaW5nIAorSU9DVEwgY2FsbHMuIAorRWFjaCBuZXR3b3JrIGludGVyZmFjZSBvciBkZXZpY2UgKGkuZS4gdGhvc2Ugb25lcyB5b3UgY29uZmlndXJlIHdpdGggJ2lmY29uZmlnJworYW5kICdyb3V0ZScgZXRjLikgaGFzIGEgY29ycmVzcG9uZGluZyBkaXJlY3RvcnkgdW5kZXIgL3Byb2MvY29teC4gWW91IGNhbgorZHluYW1pY2FsbHkgY3JlYXRlIGEgbmV3IGludGVyZmFjZSBieSBzYXlpbmcgJ21rZGlyIC9wcm9jL2NvbXgvY29teDAnIChvciB5b3UKK2NhbiBuYW1lIGl0IHdoYXRldmVyIHlvdSB3YW50IHVwIHRvIDggY2hhcmFjdGVycyBsb25nLCBjb214W25dIGlzIGp1c3QgYSAKK2NvbnZlbnRpb24pLgorR2VuZXJhbGx5IHRoZSBmaWxlcyBjb250YWluZWQgaW4gdGhlc2UgZGlyZWN0b3JpZXMgYXJlIHRleHQgZmlsZXMsIHdoaWNoIGNhbgorYmUgdmlld2VkIGJ5ICdjYXQgZmlsZW5hbWUnIGFuZCB5b3UgY2FuIHdyaXRlIGEgc3RyaW5nIHRvIHN1Y2ggYSBmaWxlIGJ5CitzYXlpbmcgJ2VjaG8gX3N0cmluZ18gPmZpbGVuYW1lJy4gVGhpcyBpcyB2ZXJ5IHNpbWlsYXIgdG8gdGhlIHN5c2N0bCBpbnRlcmZhY2UuCitEb24ndCB1c2UgYSB0ZXh0IGVkaXRvciB0byBlZGl0IHRoZXNlIGZpbGVzLCBhbHdheXMgdXNlICdlY2hvJyAob3IgJ2NhdCcKK3doZXJlIGFwcHJvcHJpYXRlKS4KK1doZW4geW91J3ZlIGNyZWF0ZWQgdGhlIGNvbXhbbl0gZGlyZWN0b3J5LCB0d28gZmlsZXMgYXJlIGNyZWF0ZWQgYXV0b21hZ2ljYWxseQoraW4gaXQ6ICdib2FyZHR5cGUnIGFuZCAncHJvdG9jb2wnLiBZb3UgaGF2ZSB0byBmaWxsIGluIHRoZXNlIGZpbGVzIGNvcnJlY3RseQorZm9yIHlvdXIgYm9hcmQgYW5kIHByb3RvY29sIHlvdSBpbnRlbmQgdG8gdXNlIChzZWUgdGhlIGJvYXJkIGFuZCBwcm90b2NvbCAKK2Rlc2NyaXB0aW9ucyBpbiB0aGlzIGZpbGUgYmVsb3cgb3IgdGhlIGV4YW1wbGUgc2NyaXB0cyBpbiB0aGUgJ2V0YycgZGlyZWN0b3J5KS4KK0FmdGVyIGZpbGxpbmcgaW4gdGhlc2UgZmlsZXMsIG90aGVyIGZpbGVzIHdpbGwgYXBwZWFyIGluIHRoZSBkaXJlY3RvcnkgZm9yIAorc2V0dGluZyB0aGUgdmFyaW91cyBoYXJkd2FyZS0gYW5kIHByb3RvY29sLXJlbGF0ZWQgaW5mb3JtYXRpb25zIChmb3IgZXhhbXBsZQoraXJxIGFuZCBpbyBhZGRyZXNzZXMsIGtlZXBhbGl2ZSB2YWx1ZXMgZXRjLikgVGhlc2UgZmlsZXMgYXJlIHNldCB0byBkZWZhdWx0IAordmFsdWVzIHVwb24gY3JlYXRpb24sIHNvIHlvdSBkb24ndCBuZWNlc3NhcmlseSBoYXZlIHRvIGNoYW5nZSBhbGwgb2YgdGhlbS4KKworV2hlbiB5b3UncmUgcmVhZHkgd2l0aCBmaWxsaW5nIGluIHRoZSBmaWxlcyBpbiB0aGUgY29teFtuXSBkaXJlY3RvcnksIHlvdSBjYW4KK2NvbmZpZ3VyZSB0aGUgY29ycmVzcG9uZGluZyBuZXR3b3JrIGludGVyZmFjZSB3aXRoIHRoZSBzdGFuZGFyZCBuZXR3b3JrIAorY29uZmlndXJhdGlvbiB1dGlsaXRpZXMuIElmIHlvdSdyZSB1bmFibGUgdG8gYnJpbmcgdGhlIGludGVyZmFjZXMgdXAsIGxvb2sgdXAKK3RoZSB2YXJpb3VzIGtlcm5lbCBsb2cgZmlsZXMgb24geW91ciBzeXN0ZW0sIGFuZCBjb25zdWx0IHRoZSBtZXNzYWdlcyBmb3IKK2EgcHJvYmFibGUgcmVhc29uLgorCitFWEFNUExFCisKK1RvIGNyZWF0ZSB0aGUgaW50ZXJmYWNlICdjb214MCcgd2hpY2ggaXMgdGhlIGZpcnN0IGNoYW5uZWwgb2YgYSBDT01YIGNhcmQ6CisKK2luc21vZCBjb214IAorIyBpbnNtb2QgY29teC1ody1jb214IDsgaW5zbW9kIGNvbXgtcHJvdG8tcHBwICAodGhlc2UgYXJlIHVzdWFsbHkKK2F1dG9sb2FkZWQgaWYgeW91IHVzZSB0aGUga2VybmVsIG1vZHVsZSBsb2FkZXIpCisKK21rZGlyIC9wcm9jL2NvbXgvY29teDAKK2VjaG8gY29teCA+L3Byb2MvY29teC9jb214MC9ib2FyZHR5cGUKK2VjaG8gMHgzNjAgPi9wcm9jL2NvbXgvY29teDAvaW8JCTwtIGp1bXBlci1zZWxlY3RhYmxlIEkvTyBwb3J0IAorZWNobyAweDBhID4vcHJvYy9jb214L2NvbXgwL2lycQkJPC0ganVtcGVyLXNlbGVjdGFibGUgSVJRIGxpbmUKK2VjaG8gMHhkMDAwID4vcHJvYy9jb214L2NvbXgwL21lbWFkZHIJPC0gc29mdHdhcmUtY29uZmlndXJhYmxlIG1lbW9yeQorCQkJCQkgICBhZGRyZXNzLiBDT01YIHVzZXMgNjQgS0IsIGFuZCB0aGlzCisJCQkJCSAgIGNhbiBiZTogMHhhMDAwLCAweGIwMDAsIDB4YzAwMCwgCisJCQkJCSAgIDB4ZDAwMCwgMHhlMDAwLiBBdm9pZCBjb25mbGljdHMKKwkJCQkJICAgd2l0aCBvdGhlciBoYXJkd2FyZS4KK2NhdCA8L2V0Yy9zaW9sMS5yb20gPi9wcm9jL2NvbXgvY29teDAvZmlybXdhcmUgPC0gdGhlIGZpcm13YXJlIGZvciB0aGUgY2FyZAorZWNobyBIRExDID4vcHJvYy9jb214L2NvbXgwL3Byb3RvY29sCTwtIHRoZSBkYXRhLWxpbmsgcHJvdG9jb2wKK2VjaG8gMTAgPi9wcm9jL2NvbXgvY29teDAva2VlcGFsaXZlCTwtIHRoZSBrZWVwYWxpdmUgZm9yIHRoZSBwcm90b2NvbAoraWZjb25maWcgY29teDAgMS4yLjMuNCBwb2ludG9wb2ludCA1LjYuNy44IG5ldG1hc2sgMjU1LjI1NS4yNTUuMjU1IDwtCisJCQkJCSAgIGZpbmFsbHkgY29uZmlndXJlIGl0IHdpdGggaWZjb25maWcKK0NoZWNrIGl0cyBzdGF0dXM6CitjYXQgL3Byb2MvY29teC9jb214MC9zdGF0dXMKKworSWYgeW91IHdhbnQgdG8gdXNlIHRoZSBzZWNvbmQgY2hhbm5lbCBvZiB0aGlzIGJvYXJkOgorCitta2RpciAvcHJvYy9jb214L2NvbXgxCitlY2hvIGNvbXggPi9wcm9jL2NvbXgvY29teDEvYm9hcmR0eXBlCitlY2hvIDB4MzYwID4vcHJvYy9jb214L2NvbXgxL2lvCQorZWNobyAxMCA+L3Byb2MvY29teC9jb214MS9pcnEJCQorZWNobyAweGQwMDAgPi9wcm9jL2NvbXgvY29teDEvbWVtYWRkcgorZWNobyAxID4vcHJvYy9jb214L2NvbXgxL2NoYW5uZWwJPC0gY2hhbm5lbHMgYXJlIG51bWJlcmVkIAorCQkJCQkgICBhcyAwIChkZWZhdWx0KSBhbmQgMQorCitOb3csIGNoZWNrIGlmIHRoZSBkcml2ZXIgcmVjb2duaXplZCB0aGF0IHlvdSdyZSBnb2luZyB0byB1c2UgdGhlIG90aGVyCitjaGFubmVsIG9mIHRoZSBzYW1lIGFkYXB0ZXI6CisKK2NhdCAvcHJvYy9jb214L2NvbXgwL3R3aW4KK2NvbXgxCitjYXQgL3Byb2MvY29teC9jb214MS90d2luCitjb214MAorCitZb3UgZG9uJ3QgaGF2ZSB0byBsb2FkIHRoZSBmaXJtd2FyZSB0d2ljZSwgaWYgeW91IHVzZSBib3RoIGNoYW5uZWxzIG9mCithbiBhZGFwdGVyLCBqdXN0IHdyaXRlIGl0IGludG8gdGhlIGNoYW5uZWwgMCdzIC9wcm9jIGZpcm13YXJlIGZpbGUuCisKK0RlZmF1bHQgdmFsdWVzOiBpbyAweDM2MCBmb3IgQ09NWCwgMHgzMjAgKEhJQ09NWCksIGlycSAxMCwgbWVtYWRkciAweGQwMDAwCisKK1RIRSBMT0NPTVggSEFSRFdBUkUgRFJJVkVSCisKK1RoZSBMb0NPTVggZHJpdmVyIGRvZXNuJ3QgcmVxdWlyZSBmaXJtd2FyZSwgYW5kIGl0IGRvZXNuJ3QgdXNlIG1lbW9yeSBlaXRoZXIsCitidXQgaXQgdXNlcyBETUEgY2hhbm5lbHMgMSBhbmQgMy4gWW91IGNhbiBzZXQgdGhlIGNsb2NrIHJhdGUgKGlmIGVuYWJsZWQgYnkKK2p1bXBlcnMgb24gdGhlIGJvYXJkKSBieSB3cml0aW5nIHRoZSBrYnBzIHZhbHVlIGludG8gdGhlIGZpbGUgbmFtZWQgJ2Nsb2NrJy4KK1NldCBpdCB0byAnZXh0ZXJuYWwnIChpdCBpcyB0aGUgZGVmYXVsdCkgaWYgeW91IGhhdmUgZXh0ZXJuYWwgY2xvY2sgc291cmNlLgorCisoTm90ZTogY3VycmVudGx5IHRoZSBMb0NPTVggZHJpdmVyIGRvZXMgbm90IHN1cHBvcnQgdGhlIGludGVybmFsIGNsb2NrKQorCitUSEUgQ09NWCwgQ01YIEFORCBISUNPTVggRFJJVkVSUworCitPbiB0aGUgSElDT01YLCBDT01YIGFuZCBDTVgsIHlvdSBoYXZlIHRvIGxvYWQgdGhlIGZpcm13YXJlIChpdCBpcyBkaWZmZXJlbnQgZm9yCit0aGUgdGhyZWUgY2FyZHMhKS4gQWxsIHRoZXNlIGFkYXB0ZXJzIGNhbiBzaGFyZSB0aGUgc2FtZSBtZW1vcnkKK2FkZHJlc3MgKHdlIHVzdWFsbHkgdXNlIDB4ZDAwMDApLiBPbiB0aGUgQ01YIHlvdSBjYW4gc2V0IHRoZSBpbnRlcm5hbAorY2xvY2sgcmF0ZSAoaWYgZW5hYmxlZCBieSBqdW1wZXJzIG9uIHRoZSBzbWFsbCBhZGFwdGVyIGJvYXJkcykgYnkgd3JpdGluZwordGhlIGticHMgdmFsdWUgaW50byB0aGUgJ2Nsb2NrJyBmaWxlLiBZb3UgaGF2ZSB0byBkbyB0aGlzIGJlZm9yZSBpbml0aWFsaXppbmcKK3RoZSBjYXJkLiBJZiB5b3UgdXNlIGJvdGggSElDT01YIGFuZCBDTVgvQ09NWCBjYXJkcywgaW5pdGlhbGl6ZSB0aGUgSElDT01YCitmaXJzdC4gVGhlIEkvTyBhZGRyZXNzIG9mIHRoZSBISUNPTVggYm9hcmQgaXMgbm90IGNvbmZpZ3VyYWJsZSBieSBhbnkKK21ldGhvZCBhdmFpbGFibGUgdG8gdGhlIHVzZXI6IGl0IGlzIGhhcmR3aXJlZCB0byAweDMyMCwgYW5kIGlmIHlvdSBoYXZlIHRvIAorY2hhbmdlIGl0LCBjb25zdWx0IElUQy1Qcm8gTHRkLgorCitUSEUgTUlYQ09NIERSSVZFUgorCitUaGUgTWl4Q09NIGJvYXJkIGRvZXNuJ3QgcmVxdWlyZSBmaXJtd2FyZSwgdGhlIGRyaXZlciBjb21tdW5pY2F0ZXMgd2l0aAoraXQgdGhyb3VnaCBJL08gcG9ydHMuIFlvdSBjYW4gaGF2ZSB0aHJlZSBvZiB0aGVzZSBjYXJkcyBpbiBvbmUgbWFjaGluZS4KKworVEhFIFNMSUNFQ09NIERSSVZFUgorCitUaGUgU2xpY2VDT00gYm9hcmQgZG9lc24ndCByZXF1aXJlIGZpcm13YXJlLiBZb3UgY2FuIGhhdmUgNCBvZiB0aGVzZSBjYXJkcworaW4gb25lIG1hY2hpbmUuIFRoZSBkcml2ZXIgZG9lc24ndCAoeWV0KSBzdXBwb3J0IHNoYXJlZCBpbnRlcnJ1cHRzLCBzbworeW91IHdpbGwgbmVlZCBhIHNlcGFyYXRlIElSUSBsaW5lIGZvciBldmVyeSBib2FyZC4KK1JlYWQgRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3NsaWNlY29tLnR4dCBmb3IgaGVscCBvbiBjb25maWd1cmluZwordGhpcyBhZGFwdGVyLgorCitUSEUgSERMQy9QUFAgTElORSBQUk9UT0NPTCBEUklWRVIKKworVGhlIEhETEMvU3luY1BQUCBsaW5lIHByb3RvY29sIGRyaXZlciB1c2VzIHRoZSBrZXJuZWwncyBidWlsdC1pbiBzeW5jcHBwCitkcml2ZXIgKHN5bmNwcHAubykuIFlvdSBkb24ndCBoYXZlIHRvIG1hbnVhbGx5IHNlbGVjdCBzeW5jcHBwLm8gd2hlbiBidWlsZGluZwordGhlIGtlcm5lbCwgdGhlIGRlcGVuZGVuY2llcyBjb21waWxlIGl0IGluIGF1dG9tYXRpY2FsbHkuCisKKworCisKK0VYQU1QTEUKKyhzZXR0aW5nIHVwIGh3IHBhcmFtZXRlcnMsIHNlZSBhYm92ZSkKKworIyB1c2luZyBIRExDOgorZWNobyBoZGxjID4vcHJvYy9jb214L2NvbXgwL3Byb3RvY29sCitlY2hvIDEwID4vcHJvYy9jb214L2NvbXgwL2tlZXBhbGl2ZQk8LSBub3QgbmVjZXNzYXJ5LCAxMCBpcyB0aGUgZGVmYXVsdAoraWZjb25maWcgY29teDAgMS4yLjMuNCBwb2ludG9wb2ludCA1LjYuNy44IG5ldG1hc2sgMjU1LjI1NS4yNTUuMjU1CisKKyhzZXR0aW5nIHVwIGh3IHBhcmFtZXRlcnMsIHNlZSBhYm92ZSkKKworIyB1c2luZyBQUFA6CitlY2hvIHBwcCA+L3Byb2MvY29teC9jb214MC9wcm90b2NvbAoraWZjb25maWcgY29teDAgdXAKK2lmY29uZmlnIGNvbXgwIDEuMi4zLjQgcG9pbnRvcG9pbnQgNS42LjcuOCBuZXRtYXNrIDI1NS4yNTUuMjU1LjI1NQorCisKK1RIRSBMQVBCIExJTkUgUFJPVE9DT0wgRFJJVkVSCisKK0ZvciB0aGlzLCB5b3UnbGwgbmVlZCB0byBjb25maWd1cmUgTEFQQiBzdXBwb3J0IChTZWUgJ0xBUEIgRGF0YSBMaW5rIERyaXZlcicgaW4KKydOZXR3b3JrIG9wdGlvbnMnIHNlY3Rpb24pIGludG8geW91ciBrZXJuZWwgKHRoYW5rcyB0byBKb25hdGhhbiBOYXlsb3IgZm9yIGhpcyAKK2V4Y2VsbGVudCBpbXBsZW1lbnRhdGlvbikuIAorY29teC1wcm90by1sYXBiLm8gcHJvdmlkZXMgdGhlIGZvbGxvd2luZyBmaWxlcyBpbiB0aGUgYXBwcm9wcmlhdGUgZGlyZWN0b3J5CisodGhlIGRlZmF1bHQgdmFsdWVzIGluIHBhcmVucyk6IHQxICg1KSwgdDIgKDEpLCBuMiAoMjApLCBtb2RlIChEVEUsIFNURCkgYW5kCit3aW5kb3cgKDcpLiBBZ3JlZSB3aXRoIHRoZSBhZG1pbmlzdHJhdG9yIG9mIHlvdXIgcGVlciByb3V0ZXIgb24gdGhlc2UKK3NldHRpbmdzIChtb3N0IHBlb3BsZSB1c2UgZGVmYXVsdHMsIGJ1dCB5b3UgaGF2ZSB0byBrbm93IGlmIHlvdSBhcmUgRFRFIG9yCitEQ0UpLgorCitFWEFNUExFCisKKyhzZXR0aW5nIHVwIGh3IHBhcmFtZXRlcnMsIHNlZSBhYm92ZSkKK2VjaG8gbGFwYiA+L3Byb2MvY29teC9jb214MC9wcm90b2NvbAorZWNobyBkY2UgPi9wcm9jL2NvbXgvY29teDAvbW9kZQkJPC0gRENFIGludGVyZmFjZSBpbiB0aGlzIGV4YW1wbGUKK2lmY29uZmlnIGNvbXgwIDEuMi4zLjQgcG9pbnRvcG9pbnQgNS42LjcuOCBuZXRtYXNrIDI1NS4yNTUuMjU1LjI1NQorCisKK1RIRSBGUkFNRSBSRUxBWSBQUk9UT0NPTCBEUklWRVIKKworWW91IERPTidUIG5lZWQgYW55IG90aGVyIGZyYW1lIHJlbGF5IHJlbGF0ZWQgbW9kdWxlcyBmcm9tIHRoZSBrZXJuZWwgdG8gdXNlCitDT01YLUZyYW1lIFJlbGF5LiBUaGlzIHByb3RvY29sIGlzIGEgYml0IG1vcmUgY29tcGxpY2F0ZWQgdGhhbiB0aGUgb3RoZXJzLCAKK2JlY2F1c2UgaXQgYWxsb3dzIHRvIHVzZSAnc3ViaW50ZXJmYWNlcycgb3IgRExDSXMgd2l0aGluIG9uZSBwaHlzaWNhbCBkZXZpY2UuCitGaXJzdCB5b3UgaGF2ZSB0byBjcmVhdGUgdGhlICdtYXN0ZXInIGRldmljZSAodGhlIGFjdHVhbCBwaHlzaWNhbCBpbnRlcmZhY2UpCithcyB5b3Ugd291bGQgZG8gZm9yIG90aGVyIHByb3RvY29scy4gU3BlY2lmeSAnZnJhZCcgYXMgcHJvdG9jb2wgdHlwZS4KK05vdyB5b3UgY2FuIGJyaW5nIHRoaXMgaW50ZXJmYWNlIHVwIGJ5IHNheWluZyAnaWZjb25maWcgY29teDAgdXAnIChvciB3aGF0ZXZlcgoreW91J3ZlIG5hbWVkIHRoZSBpbnRlcmZhY2UpLiBEbyBub3QgYXNzaWduIGFueSBJUCBhZGRyZXNzIHRvIHRoaXMgaW50ZXJmYWNlCithbmQgZG8gbm90IHNldCBhbnkgcm91dGVzIHRocm91Z2ggaXQuCitUaGVuLCBzZXQgdXAgeW91ciBETENJcyB0aGUgZm9sbG93aW5nIHdheTogY3JlYXRlIGEgY29teCBpbnRlcmZhY2UgZm9yIGVhY2gKK0RMQ0kgeW91IGludGVuZCB0byB1c2UgKHdpdGggbWtkaXIpLCBhbmQgd3JpdGUgJ2RsY2knIHRvIHRoZSAnYm9hcmR0eXBlJyBmaWxlLCAKK2FuZCAnaWV0Zi1pcCcgdG8gdGhlICdwcm90b2NvbCcgZmlsZS4gQ3VycmVudGx5LCB0aGUgb25seSBzdXBwb3J0ZWQgCitlbmNhcHN1bGF0aW9uIHR5cGUgaXMgdGhpcyAoYWxzbyBjYWxsZWQgYXMgUkZDMTI5NC8xNDkwIElQIGVuY2Fwc3VsYXRpb24pLgorV3JpdGUgdGhlIERMQ0kgbnVtYmVyIHRvIHRoZSAnZGxjaScgZmlsZSwgYW5kIHdyaXRlIHRoZSBuYW1lIG9mIHRoZSBwaHlzaWNhbAorQ09NWCBkZXZpY2UgdG8gdGhlIGZpbGUgY2FsbGVkICdtYXN0ZXInLiAKK05vdyB5b3UgY2FuIGFzc2lnbiBhbiBJUCBhZGRyZXNzIHRvIHRoaXMgaW50ZXJmYWNlIGFuZCBzZXQgcm91dGVzIHVzaW5nIGl0LgorU2VlIHRoZSBleGFtcGxlIGZpbGUgZm9yIGZ1cnRoZXIgaW5mbyBhbmQgZXhhbXBsZSBjb25maWcgc2NyaXB0LgorTm90ZXM6IHRoaXMgZHJpdmVyIGltcGxlbWVudHMgYSBEVEUgaW50ZXJmYWNlIHdpdGggcGFydGlhbGx5IGltcGxlbWVudGVkCitROTMzYSBMTUkuCitZb3UgY2FuIGZpbmQgYW4gZXh0ZW5zaXZlbHkgY29tbWVudGVkIGV4YW1wbGUgaW4gdGhlICdldGMnIGRpcmVjdG9yeS4KKworRlVSVEhFUiAvcHJvYyBGSUxFUworCitib2FyZHR5cGU6CitUeXBlIG9mIHRoZSBoYXJkd2FyZS4gVmFsaWQgdmFsdWVzIGFyZToKKyAnY29teCcsICdoaWNvbXgnLCAnbG9jb214JywgJ2NteCcsICdzbGljZWNvbScuCisKK3Byb3RvY29sOgorRGF0YS1saW5rIHByb3RvY29sIG9uIHRoaXMgY2hhbm5lbC4gQ2FuIGJlOiBIRExDLCBMQVBCLCBQUFAsIEZSQUQKKworc3RhdHVzOgorWW91IGNhbiByZWFkIHRoZSBjaGFubmVsJ3MgYWN0dWFsIHN0YXR1cyBmcm9tIHRoZSAnc3RhdHVzJyBmaWxlLCBmb3IgZXhhbXBsZQorJ2NhdCAvcHJvYy9jb214L2NvbXgzL3N0YXR1cycuCisKK2xpbmV1cF9kZWxheToKK0ludGVycHJldGVkIGluIHNlY29uZHMgKGRlZmF1bHQgaXMgMSkuIFVzZWQgdG8gYXZvaWQgbGluZSBqaXR0ZXI6IHRoZSBzeXN0ZW0KK3dpbGwgY29uc2lkZXIgdGhlIGxpbmUgc3RhdHVzICdVUCcgb25seSBpZiBpdCBpcyB1cCBmb3IgYXQgbGVhc3QgdGhpcyBudW1iZXIKK29mIHNlY29uZHMuCisKK2RlYnVnOiAKK1lvdSBjYW4gc2V0IHZhcmlvdXMgZGVidWcgb3B0aW9ucyB0aHJvdWdoIHRoaXMgZmlsZS4gVmFsaWQgb3B0aW9ucyBhcmU6CisnY29teF9ldmVudHMnLCAnY29teF90eCcsICdjb214X3J4JywgJ2h3X2V2ZW50cycsICdod190eCcsICdod19yeCcuCitZb3UgY2FuIGVuYWJsZSBhIGRlYnVnIG9wdGlvbnMgYnkgd3JpdGluZyBpdHMgbmFtZSBwcmVwZW5kZWQgYnkgYSAnKycgaW50bwordGhlIGRlYnVnIGZpbGUsIGZvciBleGFtcGxlICdlY2hvICtjb214X3J4ID5jb214MC9kZWJ1ZycuIAorRGlzYWJsaW5nIGFuIG9wdGlvbiBoYXBwZW5zIHNpbWlsYXJseSwgdXNlIHRoZSAnLScgcHJlZml4IAorKGUuZy4gJ2VjaG8gLWh3X3J4ID5kZWJ1ZycpLgorRGVidWcgcmVzdWx0cyBjYW4gYmUgcmVhZCBmcm9tIHRoZSBkZWJ1ZyBmaWxlLCBmb3IgZXhhbXBsZTogCit0YWlsIC1mIC9wcm9jL2NvbXgvY29teDIvZGVidWcKKworCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvY29wcy50eHQgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvY29wcy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2UzNDRiNAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9jb3BzLnR4dApAQCAtMCwwICsxLDYzIEBACitUZXh0IEZpbGUgZm9yIHRoZSBDT1BTIExvY2FsVGFsayBMaW51eCBkcml2ZXIgKGNvcHMuYykuCisJQnkgSmF5IFNjaHVsaXN0IDxqc2NobHN0QHNhbWJhLm9yZz4KKworVGhpcyBkcml2ZXIgaGFzIHR3byBtb2RlcyBhbmQgdGhleSBhcmU6IERheW5hIG1vZGUgYW5kIFRhbmdlbnQgbW9kZS4KK0VhY2ggbW9kZSBjb3JyZXNwb25kcyB3aXRoIHRoZSB0eXBlIG9mIGNhcmQuIEl0IGhhcyBiZWVuIGZvdW5kCit0aGF0IHRoZXJlIGFyZSAyIG1haW4gdHlwZXMgb2YgY2FyZHMgYW5kIGFsbCBvdGhlciBjYXJkcyBhcmUKK3RoZSBzYW1lIGFuZCBqdXN0IGhhdmUgZGlmZmVyZW50IG5hbWVzIG9yIG9ubHkgaGF2ZSBtaW5vciBkaWZmZXJlbmNlcworc3VjaCBhcyBtb3JlIElPIHBvcnRzLiBBcyB0aGlzIGRyaXZlciBpcyB0ZXN0ZWQgaXQgd2lsbAorYmVjb21lIG1vcmUgY2xlYXIgZXhhY3RseSB3aGF0IGNhcmRzIGFyZSBzdXBwb3J0ZWQuIAorCitSaWdodCBub3cgdGhlc2UgY2FyZHMgYXJlIGtub3duIHRvIHdvcmsgd2l0aCB0aGUgQ09QUyBkcml2ZXIuIFRoZQorTFQtMjAwIGNhcmRzIHdvcmsgaW4gYSBzb21ld2hhdCBtb3JlIGxpbWl0ZWQgY2FwYWNpdHkgdGhhbiB0aGUKK0RMMjAwIGNhcmRzLCB3aGljaCB3b3JrIHZlcnkgd2VsbCBhbmQgYXJlIGluIHVzZSBieSBtYW55IHBlb3BsZS4KKworVEFOR0VOVCBkcml2ZXIgbW9kZToKKwlUYW5nZW50IEFUQi1JSSwgTm92ZWxsIE5MLTEwMDAsIERheXN0YXIgRGlnaXRhbCBMVC0yMDAKK0RBWU5BIGRyaXZlciBtb2RlOgorCURheW5hIERMMjAwMC9EYXluYVRhbGsgUEMgKEhhbGYgTGVuZ3RoKSwgQ09QUyBMVC05NSwKKwlGYXJhbGxvbiBQaG9uZU5FVCBQQyBJSUksIEZhcmFsbG9uIFBob25lTkVUIFBDIElJCitPdGhlciBjYXJkcyBwb3NzaWJseSBzdXBwb3J0ZWQgbW9kZSB1bmtub3duIHRob3VnaDoKKwlEYXluYSBETDIwMDAgKEZ1bGwgbGVuZ3RoKQorCitUaGUgQ09QUyBkcml2ZXIgZGVmYXVsdHMgdG8gdXNpbmcgRGF5bmEgbW9kZS4gVG8gY2hhbmdlIHRoZSBkcml2ZXIncyAKK21vZGUgaWYgeW91IGJ1aWx0IGEgZHJpdmVyIHdpdGggZHVhbCBzdXBwb3J0IHVzZSBib2FyZF90eXBlPTEgb3IKK2JvYXJkX3R5cGU9MiBmb3IgRGF5bmEgb3IgVGFuZ2VudCB3aXRoIGluc21vZC4KKworKiogT3BlcmF0aW9uL2xvYWRpbmcgb2YgdGhlIGRyaXZlci4KK1VzZSBtb2Rwcm9iZSBsaWtlIHRoaXM6CS9zYmluL21vZHByb2JlIGNvcHMubyAoSU8gIykgKElSUSAjKQorSWYgeW91IGRvIG5vdCBzcGVjaWZ5IGFueSBvcHRpb25zIHRoZSBkcml2ZXIgd2lsbCB0cnkgYW5kIHVzZSB0aGUgSU8gPSAweDI0MCwKK0lSUSA9IDUuIEFzIG9mIHJpZ2h0IG5vdyBJIHdvdWxkIG9ubHkgdXNlIElSUSA1IGZvciB0aGUgY2FyZCwgaWYgYXV0b3Byb2JpbmcuCisKK1RvIGxvYWQgbXVsdGlwbGUgQ09QUyBkcml2ZXIgTG9jYWx0YWxrIGNhcmRzIHlvdSBjYW4gZG8gb25lIG9mIHRoZSBmb2xsb3dpbmcuCisKK2luc21vZCBjb3BzIGlvPTB4MjQwIGlycT01CitpbnNtb2QgLW8gY29wczIgY29wcyBpbz0weDI2MCBpcnE9MworCitPciBpbiBsaWxvLmNvbmYgcHV0IHNvbWV0aGluZyBsaWtlIHRoaXM6CisJYXBwZW5kPSJldGhlcj01LDB4MjQwLGx0MCBldGhlcj0zLDB4MjYwLGx0MSIKKworVGhlbiBicmluZyB1cCB0aGUgaW50ZXJmYWNlIHdpdGggaWZjb25maWcuIEl0IHdpbGwgbG9vayBzb21ldGhpbmcgbGlrZSB0aGlzOgorbHQwICAgICAgIExpbmsgZW5jYXA6VU5TUEVDICBIV2FkZHIgMDAtMDAtMDAtMDAtMDAtMDAtMDAtRjctMDAtMDAtMDAtMDAtMDAtMDAtMDAtMDAKKyAgICAgICAgICBpbmV0IGFkZHI6MTkyLjE2OC4xLjIgIEJjYXN0OjE5Mi4xNjguMS4yNTUgIE1hc2s6MjU1LjI1NS4yNTUuMAorICAgICAgICAgIFVQIEJST0FEQ0FTVCBSVU5OSU5HIE5PQVJQIE1VTFRJQ0FTVCAgTVRVOjYwMCAgTWV0cmljOjEKKyAgICAgICAgICBSWCBwYWNrZXRzOjAgZXJyb3JzOjAgZHJvcHBlZDowIG92ZXJydW5zOjAgZnJhbWU6MAorICAgICAgICAgIFRYIHBhY2tldHM6MCBlcnJvcnM6MCBkcm9wcGVkOjAgb3ZlcnJ1bnM6MCBjYXJyaWVyOjAgY29sbDowCisKKyoqIE5ldGF0YWxrIENvbmZpZ3VyYXRpb24KK1lvdSB3aWxsIG5lZWQgdG8gY29uZmlndXJlIGF0YWxrZCB3aXRoIHNvbWV0aGluZyBsaWtlIHRoZSBmb2xsb3dpbmcgdG8gbWFrZQoraXQgd29yayB3aXRoIHRoZSBjb3BzLmMgZHJpdmVyLgorCisqIEZvciBzaW5nbGUgTFRhbGsgY2FyZCB1c2UuCitkdW1teSAtc2VlZCAtcGhhc2UgMiAtbmV0IDIwMDAgLWFkZHIgMjAwMC4xMCAtem9uZSAiMTAzMyIKK2x0MCAtc2VlZCAtcGhhc2UgMSAtbmV0IDEwMDAgLWFkZHIgMTAwMC41MCAtem9uZSAiMTAzMyIKKworKiBGb3IgbXVsdGlwbGUgY2FyZHMsIEV0aGVybmV0IGFuZCBMb2NhbFRhbGsuCitldGgwIC1zZWVkIC1waGFzZSAyIC1uZXQgMzAwMCAtYWRkciAzMDAwLjIwIC16b25lICIxMDMzIgorbHQwIC1zZWVkIC1waGFzZSAxIC1uZXQgMTAwMCAtYWRkciAxMDAwLjUwIC16b25lICIxMDMzIgorCisqIEZvciBtdWx0aXBsZSBMb2NhbFRhbGsgY2FyZHMsIGFuZCBhbiBFdGhlcm5ldCBjYXJkLgorKiBPcmRlciBzZWVtcyB0byBtYXR0ZXIgaGVyZSwgRXRoZXJuZXQgbGFzdC4KK2x0MCAtc2VlZCAtcGhhc2UgMSAtbmV0IDEwMDAgLWFkZHIgMTAwMC4xMCAtem9uZSAiTG9jYWxUYWxrMSIKK2x0MSAtc2VlZCAtcGhhc2UgMSAtbmV0IDIwMDAgLWFkZHIgMjAwMC4yMCAtem9uZSAiTG9jYWxUYWxrMiIKK2V0aDAgLXNlZWQgLXBoYXNlIDIgLW5ldCAzMDAwIC1hZGRyIDMwMDAuMzAgLXpvbmUgIkV0aGVyVGFsayIKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9jczg5eDAudHh0IGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2NzODl4MC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTg4YmViNwotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9jczg5eDAudHh0CkBAIC0wLDAgKzEsNzAzIEBACisKK05PVEUKKy0tLS0KKworVGhpcyBkb2N1bWVudCB3YXMgY29udHJpYnV0ZWQgYnkgQ2lycnVzIExvZ2ljIGZvciBrZXJuZWwgMi4yLjUuICBUaGlzIHZlcnNpb24KK2hhcyBiZWVuIHVwZGF0ZWQgZm9yIDIuMy40OCBieSBBbmRyZXcgTW9ydG9uIDxhbmRyZXdtQHVvdy5lZHUuYXU+CisKK0NpcnJ1cyBtYWtlIGEgY29weSBvZiB0aGlzIGRyaXZlciBhdmFpbGFibGUgYXQgdGhlaXIgd2Vic2l0ZSwgYXMKK2Rlc2NyaWJlZCBiZWxvdy4gIEluIGdlbmVyYWwsIHlvdSBzaG91bGQgdXNlIHRoZSBkcml2ZXIgdmVyc2lvbiB3aGljaAorY29tZXMgd2l0aCB5b3VyIExpbnV4IGRpc3RyaWJ1dGlvbi4KKworCisKK0NJUlJVUyBMT0dJQyBMQU4gQ1M4OTAwL0NTODkyMCBFVEhFUk5FVCBBREFQVEVSUworTGludXggTmV0d29yayBJbnRlcmZhY2UgRHJpdmVyIHZlci4gMi4wMCA8a2VybmVsIDIuMy40OD4KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAKKworVEFCTEUgT0YgQ09OVEVOVFMKKworMS4wIENJUlJVUyBMT0dJQyBMQU4gQ1M4OTAwL0NTODkyMCBFVEhFUk5FVCBBREFQVEVSUworICAgIDEuMSBQcm9kdWN0IE92ZXJ2aWV3IAorICAgIDEuMiBEcml2ZXIgRGVzY3JpcHRpb24KKwkxLjIuMSBEcml2ZXIgTmFtZQorCTEuMi4yIEZpbGUgaW4gdGhlIERyaXZlciBQYWNrYWdlCisgICAgMS4zIFN5c3RlbSBSZXF1aXJlbWVudHMKKyAgICAxLjQgTGljZW5zaW5nIEluZm9ybWF0aW9uCisKKzIuMCBBREFQVEVSIElOU1RBTExBVElPTiBhbmQgQ09ORklHVVJBVElPTgorICAgIDIuMSBDUzg5MDAtYmFzZWQgQWRhcHRlciBDb25maWd1cmF0aW9uCisgICAgMi4yIENTODkyMC1iYXNlZCBBZGFwdGVyIENvbmZpZ3VyYXRpb24gCisKKzMuMCBMT0FESU5HIFRIRSBEUklWRVIgQVMgQSBNT0RVTEUKKworNC4wIENPTVBJTElORyBUSEUgRFJJVkVSCisgICAgNC4xIENvbXBpbGluZyB0aGUgRHJpdmVyIGFzIGEgTG9hZGFibGUgTW9kdWxlCisgICAgNC4yIENvbXBpbGluZyB0aGUgZHJpdmVyIHRvIHN1cHBvcnQgbWVtb3J5IG1vZGUKKyAgICA0LjMgQ29tcGlsaW5nIHRoZSBkcml2ZXIgdG8gc3VwcG9ydCBSeCBETUEgCisgICAgNC40IENvbXBpbGluZyB0aGUgRHJpdmVyIGludG8gdGhlIEtlcm5lbAorCis1LjAgVEVTVElORyBBTkQgVFJPVUJMRVNIT09USU5HCisgICAgNS4xIEtub3duIERlZmVjdHMgYW5kIExpbWl0YXRpb25zCisgICAgNS4yIFRlc3RpbmcgdGhlIEFkYXB0ZXIKKyAgICAgICAgNS4yLjEgRGlhZ25vc3RpYyBTZWxmLVRlc3QKKyAgICAgICAgNS4yLjIgRGlhZ25vc3RpYyBOZXR3b3JrIFRlc3QKKyAgICA1LjMgVXNpbmcgdGhlIEFkYXB0ZXIncyBMRURzCisgICAgNS40IFJlc29sdmluZyBJL08gQ29uZmxpY3RzCisKKzYuMCBURUNITklDQUwgU1VQUE9SVAorICAgIDYuMSBDb250YWN0aW5nIENpcnJ1cyBMb2dpYydzIFRlY2huaWNhbCBTdXBwb3J0CisgICAgNi4yIEluZm9ybWF0aW9uIFJlcXVpcmVkIEJlZm9yZSBDb250YWN0aW5nIFRlY2huaWNhbCBTdXBwb3J0CisgICAgNi4zIE9idGFpbmluZyB0aGUgTGF0ZXN0IERyaXZlciBWZXJzaW9uCisgICAgNi40IEN1cnJlbnQgbWFpbnRhaW5lcgorICAgIDYuNSBLZXJuZWwgYm9vdCBwYXJhbWV0ZXJzCisKKworMS4wIENJUlJVUyBMT0dJQyBMQU4gQ1M4OTAwL0NTODkyMCBFVEhFUk5FVCBBREFQVEVSUworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisKKzEuMSBQUk9EVUNUIE9WRVJWSUVXCisKK1RoZSBDUzg5MDAtYmFzZWQgSVNBIEV0aGVybmV0IEFkYXB0ZXJzIGZyb20gQ2lycnVzIExvZ2ljIGZvbGxvdyAKK0lFRUUgODAyLjMgc3RhbmRhcmRzIGFuZCBzdXBwb3J0IGhhbGYgb3IgZnVsbC1kdXBsZXggb3BlcmF0aW9uIGluIElTQSBidXMgCitjb21wdXRlcnMgb24gMTAgTWJwcyBFdGhlcm5ldCBuZXR3b3Jrcy4gIFRoZSBhZGFwdGVycyBhcmUgZGVzaWduZWQgZm9yIG9wZXJhdGlvbiAKK2luIDE2LWJpdCBJU0Egb3IgRUlTQSBidXMgZXhwYW5zaW9uIHNsb3RzIGFuZCBhcmUgYXZhaWxhYmxlIGluIAorMTBCYXNlVC1vbmx5IG9yIDMtbWVkaWEgY29uZmlndXJhdGlvbnMgKDEwQmFzZVQsIDEwQmFzZTIsIGFuZCBBVUkgZm9yIDEwQmFzZS01IAorb3IgZmliZXIgbmV0d29ya3MpLiAgCisKK0NTODkyMC1iYXNlZCBhZGFwdGVycyBhcmUgc2ltaWxhciB0byB0aGUgQ1M4OTAwLWJhc2VkIGFkYXB0ZXIgd2l0aCBhZGRpdGlvbmFsIAorZmVhdHVyZXMgZm9yIFBsdWcgYW5kIFBsYXkgKFBuUCkgc3VwcG9ydCBhbmQgV2FrZXVwIEZyYW1lIHJlY29nbml0aW9uLiAgQXMgCitzdWNoLCB0aGUgY29uZmlndXJhdGlvbiBwcm9jZWR1cmVzIGRpZmZlciBzb21ld2hhdCBiZXR3ZWVuIHRoZSB0d28gdHlwZXMgb2YgCithZGFwdGVycy4gIFJlZmVyIHRvIHRoZSAiQWRhcHRlciBDb25maWd1cmF0aW9uIiBzZWN0aW9uIGZvciBkZXRhaWxzIG9uIAorY29uZmlndXJpbmcgYm90aCB0eXBlcyBvZiBhZGFwdGVycy4KKworCisxLjIgRFJJVkVSIERFU0NSSVBUSU9OCisKK1RoZSBDUzg5MDAvQ1M4OTIwIEV0aGVybmV0IEFkYXB0ZXIgZHJpdmVyIGZvciBMaW51eCBzdXBwb3J0cyB0aGUgTGludXgKK3YyLjMuNDggb3IgZ3JlYXRlciBrZXJuZWwuICBJdCBjYW4gYmUgY29tcGlsZWQgZGlyZWN0bHkgaW50byB0aGUga2VybmVsCitvciBsb2FkZWQgYXQgcnVuLXRpbWUgYXMgYSBkZXZpY2UgZHJpdmVyIG1vZHVsZS4KKworMS4yLjEgRHJpdmVyIE5hbWU6IGNzODl4MAorCisxLjIuMiBGaWxlcyBpbiB0aGUgRHJpdmVyIEFyY2hpdmU6CisKK1RoZSBmaWxlcyBpbiB0aGUgZHJpdmVyIGF0IENpcnJ1cycgd2Vic2l0ZSBpbmNsdWRlOgorCisgIHJlYWRtZS50eHQgICAgICAgICAtIHRoaXMgZmlsZQorICBidWlsZCAgICAgICAgICAgICAgLSBiYXRjaCBmaWxlIHRvIGNvbXBpbGUgY3M4OXgwLmMuCisgIGNzODl4MC5jICAgICAgICAgICAtIGRyaXZlciBDIGNvZGUKKyAgY3M4OXgwLmggICAgICAgICAgIC0gZHJpdmVyIGhlYWRlciBmaWxlCisgIGNzODl4MC5vICAgICAgICAgICAtIHByZS1jb21waWxlZCBtb2R1bGUgKGZvciB2Mi4yLjUga2VybmVsKQorICBjb25maWcvQ29uZmlnLmluICAgLSBzYW1wbGUgZmlsZSB0byBpbmNsdWRlIGNzODl4MCBkcml2ZXIgaW4gdGhlIGtlcm5lbC4KKyAgY29uZmlnL01ha2VmaWxlICAgIC0gc2FtcGxlIGZpbGUgdG8gaW5jbHVkZSBjczg5eDAgZHJpdmVyIGluIHRoZSBrZXJuZWwuCisgIGNvbmZpZy9TcGFjZS5jICAgICAtIHNhbXBsZSBmaWxlIHRvIGluY2x1ZGUgY3M4OXgwIGRyaXZlciBpbiB0aGUga2VybmVsLgorCisKKworMS4zIFNZU1RFTSBSRVFVSVJFTUVOVFMKKworVGhlIGZvbGxvd2luZyBoYXJkd2FyZSBpcyByZXF1aXJlZDoKKworICAgKiBDaXJydXMgTG9naWMgTEFOIChDUzg5MDAvMjAtYmFzZWQpIEV0aGVybmV0IElTQSBBZGFwdGVyICAgCisKKyAgICogSUJNIG9yIElCTS1jb21wYXRpYmxlIFBDIHdpdGg6CisgICAgICogQW4gODAzODYgb3IgaGlnaGVyIHByb2Nlc3NvcgorICAgICAqIDE2IGJ5dGVzIG9mIGNvbnRpZ3VvdXMgSU8gc3BhY2UgYXZhaWxhYmxlIGJldHdlZW4gMjEwaCAtIDM3MGgKKyAgICAgKiBPbmUgYXZhaWxhYmxlIElSUSAoNSwxMCwxMSxvciAxMiBmb3IgdGhlIENTODkwMCwgMy03LDktMTUgZm9yIENTODkyMCkuCisKKyAgICogQXBwcm9wcmlhdGUgY2FibGUgKGFuZCBjb25uZWN0b3IgZm9yIEFVSSwgMTBCQVNFLTIpIGZvciB5b3VyIG5ldHdvcmsKKyAgICAgdG9wb2xvZ3kuCisKK1RoZSBmb2xsb3dpbmcgc29mdHdhcmUgaXMgcmVxdWlyZWQ6CisKKyogTElOVVgga2VybmVsIHZlcnNpb24gMi4zLjQ4IG9yIGhpZ2hlcgorCisgICAqIENTODkwMC8yMCBTZXR1cCBVdGlsaXR5IChET1MtYmFzZWQpCisKKyAgICogTElOVVgga2VybmVsIHNvdXJjZXMgZm9yIHlvdXIga2VybmVsIChpZiBjb21waWxpbmcgaW50byBrZXJuZWwpCisKKyAgICogR05VIFRvb2xraXQgKGdjYyBhbmQgbWFrZSkgdjIuNiBvciBhYm92ZSAoaWYgY29tcGlsaW5nIGludG8ga2VybmVsIAorICAgICBvciBhIG1vZHVsZSkgICAKKworCisKKzEuNCBMSUNFTlNJTkcgSU5GT1JNQVRJT04KKworVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKK3RoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCitGb3VuZGF0aW9uLCB2ZXJzaW9uIDEuCisKK1RoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIAorRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciAKK21vcmUgZGV0YWlscy4KKworRm9yIGEgZnVsbCBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKK0ZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorCisKKworMi4wIEFEQVBURVIgSU5TVEFMTEFUSU9OIGFuZCBDT05GSUdVUkFUSU9OCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0JvdGggdGhlIENTODkwMCBhbmQgQ1M4OTIwLWJhc2VkIGFkYXB0ZXJzIGNhbiBiZSBjb25maWd1cmVkIHVzaW5nIHBhcmFtZXRlcnMgCitzdG9yZWQgaW4gYW4gb24tYm9hcmQgRUVQUk9NLiBZb3UgbXVzdCB1c2UgdGhlIERPUy1iYXNlZCBDUzg5MDAvMjAgU2V0dXAgCitVdGlsaXR5IGlmIHlvdSB3YW50IHRvIGNoYW5nZSB0aGUgYWRhcHRlcidzIGNvbmZpZ3VyYXRpb24gaW4gRUVQUk9NLiAgCisKK1doZW4gbG9hZGluZyB0aGUgZHJpdmVyIGFzIGEgbW9kdWxlLCB5b3UgY2FuIHNwZWNpZnkgbWFueSBvZiB0aGUgYWRhcHRlcidzIAorY29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzIG9uIHRoZSBjb21tYW5kLWxpbmUgdG8gb3ZlcnJpZGUgdGhlIEVFUFJPTSdzIHNldHRpbmdzIAorb3IgZm9yIGludGVyZmFjZSBjb25maWd1cmF0aW9uIHdoZW4gYW4gRUVQUk9NIGlzIG5vdCB1c2VkLiAoQ1M4OTIwLWJhc2VkIAorYWRhcHRlcnMgbXVzdCB1c2UgYW4gRUVQUk9NLikgU2VlIFNlY3Rpb24gMy4wIExPQURJTkcgVEhFIERSSVZFUiBBUyBBIE1PRFVMRS4KKworU2luY2UgdGhlIENTODkwMC8yMCBTZXR1cCBVdGlsaXR5IGlzIGEgRE9TLWJhc2VkIGFwcGxpY2F0aW9uLCB5b3UgbXVzdCBpbnN0YWxsIAorYW5kIGNvbmZpZ3VyZSB0aGUgYWRhcHRlciBpbiBhIERPUy1iYXNlZCBzeXN0ZW0gdXNpbmcgdGhlIENTODkwMC8yMCBTZXR1cCAKK1V0aWxpdHkgYmVmb3JlIGluc3RhbGxhdGlvbiBpbiB0aGUgdGFyZ2V0IExJTlVYIHN5c3RlbS4gIChOb3QgcmVxdWlyZWQgaWYgCitpbnN0YWxsaW5nIGEgQ1M4OTAwLWJhc2VkIGFkYXB0ZXIgYW5kIHRoZSBkZWZhdWx0IGNvbmZpZ3VyYXRpb24gaXMgYWNjZXB0YWJsZS4pCisgICAgIAorCisyLjEgQ1M4OTAwLUJBU0VEIEFEQVBURVIgQ09ORklHVVJBVElPTgorCitDUzg5MDAtYmFzZWQgYWRhcHRlcnMgc2hpcHBlZCBmcm9tIENpcnJ1cyBMb2dpYyBoYXZlIGJlZW4gY29uZmlndXJlZCAKK3dpdGggdGhlIGZvbGxvd2luZyAiZGVmYXVsdCIgc2V0dGluZ3M6CisKKyAgT3BlcmF0aW9uIE1vZGU6ICAgICAgTWVtb3J5IE1vZGUKKyAgSVJROiAgICAgICAgICAgICAgICAgMTAKKyAgQmFzZSBJL08gQWRkcmVzczogICAgMzAwCisgIE1lbW9yeSBCYXNlIEFkZHJlc3M6IEQwMDAwCisgIE9wdGltaXphdGlvbjoJICAgICAgIERPUyBDbGllbnQKKyAgVHJhbnNtaXNzaW9uIE1vZGU6ICAgSGFsZi1kdXBsZXgKKyAgQm9vdFByb206ICAgICAgICAgICAgTm9uZQorICBNZWRpYSBUeXBlOgkgICAgICAgQXV0b2RldGVjdCAoMy1tZWRpYSBjYXJkcykgb3IgCisgICAgICAgICAgICAgICAgICAgICAgIDEwQkFTRS1UICgxMEJBU0UtVCBvbmx5IGFkYXB0ZXIpCisKK1lvdSBzaG91bGQgb25seSBjaGFuZ2UgdGhlIGRlZmF1bHQgY29uZmlndXJhdGlvbiBzZXR0aW5ncyBpZiBjb25mbGljdHMgd2l0aCAKK2Fub3RoZXIgYWRhcHRlciBleGlzdHMuIFRvIGNoYW5nZSB0aGUgYWRhcHRlcidzIGNvbmZpZ3VyYXRpb24sIHJ1biB0aGUgCitDUzg5MDAvMjAgU2V0dXAgVXRpbGl0eS4gCisKKworMi4yIENTODkyMC1CQVNFRCBBREFQVEVSIENPTkZJR1VSQVRJT04KKworQ1M4OTIwLWJhc2VkIGFkYXB0ZXJzIGFyZSBzaGlwcGVkIGZyb20gQ2lycnVzIExvZ2ljIGNvbmZpZ3VyZWQgYXMgUGx1ZworYW5kIFBsYXkgKFBuUCkgZW5hYmxlZC4gIEhvd2V2ZXIsIHNpbmNlIHRoZSBjczg5eDAgZHJpdmVyIGRvZXMgTk9UCitzdXBwb3J0IFBuUCwgeW91IG11c3QgaW5zdGFsbCB0aGUgQ1M4OTIwIGFkYXB0ZXIgaW4gYSBET1MtYmFzZWQgUEMgYW5kCitydW4gdGhlIENTODkwMC8yMCBTZXR1cCBVdGlsaXR5IHRvIGRpc2FibGUgUG5QIGFuZCBjb25maWd1cmUgdGhlCithZGFwdGVyIGJlZm9yZSBpbnN0YWxsYXRpb24gaW4gdGhlIHRhcmdldCBMaW51eCBzeXN0ZW0uICBGYWlsdXJlIHRvIGRvCit0aGlzIHdpbGwgbGVhdmUgdGhlIGFkYXB0ZXIgaW5hY3RpdmUgYW5kIHRoZSBkcml2ZXIgd2lsbCBiZSB1bmFibGUgdG8KK2NvbW11bmljYXRlIHdpdGggdGhlIGFkYXB0ZXIuICAKKworCisgICAgICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogCisgICAgICAgICogICAgICAgICAgICAgICAgICAgIENTODkyMC1CQVNFRCBBREFQVEVSUzogICAgICAgICAgICAgICAgICAgICoKKyAgICAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiAKKyAgICAgICAgKiBDUzg5MjAtQkFTRUQgQURBUFRFUlMgQVJFIFBMVUcgYW5kIFBMQVkgRU5BQkxFRCBCWSBERUZBVUxULiAgKiAKKyAgICAgICAgKiBUSEUgQ1M4OVgwIERSSVZFUiBET0VTIE5PVCBTVVBQT1JUIFBuUC4gVEhFUkVGT1JFLCBZT1UgTVVTVCAgKgorICAgICAgICAqIFJVTiBUSEUgQ1M4OTAwLzIwIFNFVFVQIFVUSUxJVFkgVE8gRElTQUJMRSBQblAgU1VQUE9SVCBBTkQgICAqCisgICAgICAgICogVE8gQUNUSVZBVEUgVEhFIEFEQVBURVIuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgICAgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCisKKworCiszLjAgTE9BRElORyBUSEUgRFJJVkVSIEFTIEEgTU9EVUxFCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0lmIHRoZSBkcml2ZXIgaXMgY29tcGlsZWQgYXMgYSBsb2FkYWJsZSBtb2R1bGUsIHlvdSBjYW4gbG9hZCB0aGUgZHJpdmVyIG1vZHVsZQord2l0aCB0aGUgJ21vZHByb2JlJyBjb21tYW5kLiAgTWFueSBvZiB0aGUgYWRhcHRlcidzIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVycyBjYW4gCitiZSBzcGVjaWZpZWQgYXMgY29tbWFuZC1saW5lIGFyZ3VtZW50cyB0byB0aGUgbG9hZCBjb21tYW5kLiAgVGhpcyBmYWNpbGl0eSAKK3Byb3ZpZGVzIGEgbWVhbnMgdG8gb3ZlcnJpZGUgdGhlIEVFUFJPTSdzIHNldHRpbmdzIG9yIGZvciBpbnRlcmZhY2UgCitjb25maWd1cmF0aW9uIHdoZW4gYW4gRUVQUk9NIGlzIG5vdCB1c2VkLgorCitFeGFtcGxlOgorCisgICAgaW5zbW9kIGNzODl4MC5vIGlvPTB4MjAwIGlycT0weEEgbWVkaWE9YXVpCisKK1RoaXMgZXhhbXBsZSBsb2FkcyB0aGUgbW9kdWxlIGFuZCBjb25maWd1cmVzIHRoZSBhZGFwdGVyIHRvIHVzZSBhbiBJTyBwb3J0IGJhc2UKK2FkZHJlc3Mgb2YgMjAwaCwgaW50ZXJydXB0IDEwLCBhbmQgdXNlIHRoZSBBVUkgbWVkaWEgY29ubmVjdGlvbi4gIFRoZSBmb2xsb3dpbmcKK2NvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgYXZhaWxhYmxlIG9uIHRoZSBjb21tYW5kIGxpbmU6CisKKyogaW89IyMjICAgICAgICAgICAgICAgLSBzcGVjaWZ5IElPIGFkZHJlc3MgKDIwMGgtMzYwaCkKKyogaXJxPSMjICAgICAgICAgICAgICAgLSBzcGVjaWZ5IGludGVycnVwdCBsZXZlbAorKiB1c2VfZG1hPTEgICAgICAgICAgICAtIEVuYWJsZSBETUEKKyogZG1hPSMgICAgICAgICAgICAgICAgLSBzcGVjaWZ5IGRtYSBjaGFubmVsIChEcml2ZXIgaXMgY29tcGlsZWQgdG8gc3VwcG9ydAorICAgICAgICAgICAgICAgICAgICAgICAgIFJ4IERNQSBvbmx5KQorKiBkbWFzaXplPSMgKDE2IG9yIDY0KSAtIERNQSBzaXplIDE2SyBvciA2NEsuICBEZWZhdWx0IHZhbHVlIGlzIHNldCB0byAxNi4KKyogbWVkaWE9cmo0NSAgICAgICAgICAgLSBzcGVjaWZ5IG1lZGlhIHR5cGUKKyAgIG9yIG1lZGlhPWJuYworICAgb3IgbWVkaWE9YXVpCisgICBvciBtZWRhaT1hdXRvCisqIGR1cGxleD1mdWxsICAgICAgICAgIC0gc3BlY2lmeSBmb3JjZWQgaGFsZi9mdWxsL2F1dG9uZWdvdGlhdGUgZHVwbGV4CisgICBvciBkdXBsZXg9aGFsZgorICAgb3IgZHVwbGV4PWF1dG8KKyogZGVidWc9IyAgICAgICAgICAgICAgLSBkZWJ1ZyBsZXZlbCAob25seSBhdmFpbGFibGUgaWYgdGhlIGRyaXZlciB3YXMgY29tcGlsZWQKKyAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgZGVidWdnaW5nKQorCitOT1RFUzoKKworYSkgSWYgYW4gRUVQUk9NIGlzIHByZXNlbnQsIGFueSBzcGVjaWZpZWQgY29tbWFuZC1saW5lIHBhcmFtZXRlcgorICAgd2lsbCBvdmVycmlkZSB0aGUgY29ycmVzcG9uZGluZyBjb25maWd1cmF0aW9uIHZhbHVlIHN0b3JlZCBpbgorICAgRUVQUk9NLgorCitiKSBUaGUgImlvIiBwYXJhbWV0ZXIgbXVzdCBiZSBzcGVjaWZpZWQgb24gdGhlIGNvbW1hbmQtbGluZS4gIAorCitjKSBUaGUgZHJpdmVyJ3MgaGFyZHdhcmUgcHJvYmUgcm91dGluZSBpcyBkZXNpZ25lZCB0byBhdm9pZAorICAgd3JpdGluZyB0byBJL08gc3BhY2UgdW50aWwgaXQga25vd3MgdGhhdCB0aGVyZSBpcyBhIGNzODl4MAorICAgY2FyZCBhdCB0aGUgd3JpdHRlbiBhZGRyZXNzZXMuICBUaGlzIGNvdWxkIGNhdXNlIHByb2JsZW1zCisgICB3aXRoIGRldmljZSBwcm9iaW5nLiAgVG8gYXZvaWQgdGhpcyBiZWhhdmlvdXIsIGFkZCBvbmUKKyAgIHRvIHRoZSBgaW89JyBtb2R1bGUgcGFyYW1ldGVyLiAgVGhpcyBkb2Vzbid0IGFjdHVhbGx5IGNoYW5nZQorICAgdGhlIEkvTyBhZGRyZXNzLCBidXQgaXQgaXMgYSBmbGFnIHRvIHRlbGwgdGhlIGRyaXZlcgorICAgdG9wYXJ0aWFsbHkgaW5pdGlhbGlzZSB0aGUgaGFyZHdhcmUgYmVmb3JlIHRyeWluZyB0bworICAgaWRlbnRpZnkgdGhlIGNhcmQuICBUaGlzIGNvdWxkIGJlIGRhbmdlcm91cyBpZiB5b3UgYXJlCisgICBub3Qgc3VyZSB0aGF0IHRoZXJlIGlzIGEgY3M4OXgwIGNhcmQgYXQgdGhlIHByb3ZpZGVkIGFkZHJlc3MuCisKKyAgIEZvciBleGFtcGxlLCB0byBzY2FuIGZvciBhbiBhZGFwdGVyIGxvY2F0ZWQgYXQgSU8gYmFzZSAweDMwMCwKKyAgIHNwZWNpZnkgYW4gSU8gYWRkcmVzcyBvZiAweDMwMS4gIAorCitkKSBUaGUgImR1cGxleD1hdXRvIiBwYXJhbWV0ZXIgaXMgb25seSBzdXBwb3J0ZWQgZm9yIHRoZSBDUzg5MjAuCisKK2UpIFRoZSBtaW5pbXVtIGNvbW1hbmQtbGluZSBjb25maWd1cmF0aW9uIHJlcXVpcmVkIGlmIGFuIEVFUFJPTSBpcworICAgbm90IHByZXNlbnQgaXM6CisKKyAgIGlvIAorICAgaXJxIAorICAgbWVkaWEgdHlwZSAobm8gYXV0b2RldGVjdCkKKworZikgVGhlIGZvbGxvd2luZyBhZGRpdGlvbmFsIHBhcmFtZXRlcnMgYXJlIENTODlYWCBkZWZhdWx0cyAodmFsdWVzCisgICB1c2VkIHdpdGggbm8gRUVQUk9NIG9yIGNvbW1hbmQtbGluZSBhcmd1bWVudCkuCisKKyAgICogRE1BIEJ1cnN0ID0gZW5hYmxlZAorICAgKiBJT0NIUkRZIEVuYWJsZWQgPSBlbmFibGVkCisgICAqIFVzZVNBID0gZW5hYmxlZAorICAgKiBDUzg5MDAgZGVmYXVsdHMgdG8gaGFsZi1kdXBsZXggaWYgbm90IHNwZWNpZmllZCBvbiBjb21tYW5kLWxpbmUKKyAgICogQ1M4OTIwIGRlZmF1bHRzIHRvIGF1dG9uZWcgaWYgbm90IHNwZWNpZmllZCBvbiBjb21tYW5kLWxpbmUKKyAgICogVXNlIHJlc2V0IGRlZmF1bHRzIGZvciBvdGhlciBjb25maWcgcGFyYW1ldGVycworICAgKiBkbWFfbW9kZSA9IDAKKworZykgWW91IGNhbiB1c2UgaWZjb25maWcgdG8gc2V0IHRoZSBhZGFwdGVyJ3MgRXRoZXJuZXQgYWRkcmVzcy4KKworaCkgTWFueSBMaW51eCBkaXN0cmlidXRpb25zIHVzZSB0aGUgJ21vZHByb2JlJyBjb21tYW5kIHRvIGxvYWQKKyAgIG1vZHVsZXMuICBUaGlzIHByb2dyYW0gdXNlcyB0aGUgJy9ldGMvY29uZi5tb2R1bGVzJyBmaWxlIHRvCisgICBkZXRlcm1pbmUgY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbiB3aGljaCBpcyBwYXNzZWQgdG8gYSBkcml2ZXIKKyAgIG1vZHVsZSB3aGVuIGl0IGlzIGxvYWRlZC4gIEFsbCB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIHdoaWNoIGFyZQorICAgZGVzY3JpYmVkIGFib3ZlIG1heSBiZSBwbGFjZWQgd2l0aGluIC9ldGMvY29uZi5tb2R1bGVzLgorCisgICBGb3IgZXhhbXBsZToKKworICAgPiBjYXQgL2V0Yy9jb25mLm1vZHVsZXMKKyAgIC4uLgorICAgYWxpYXMgZXRoMCBjczg5eDAKKyAgIG9wdGlvbnMgY3M4OXgwIGlvPTB4MDIwMCBkbWE9NSB1c2VfZG1hPTEKKyAgIC4uLgorCisgICBJbiB0aGlzIGV4YW1wbGUgd2UgYXJlIHRlbGxpbmcgdGhlIG1vZHVsZSBzeXN0ZW0gdGhhdCB0aGUKKyAgIGV0aGVybmV0IGRyaXZlciBmb3IgdGhpcyBtYWNoaW5lIHNob3VsZCB1c2UgdGhlIGNzODl4MCBkcml2ZXIuICBXZQorICAgYXJlIGFza2luZyAnbW9kcHJvYmUnIHRvIHBhc3MgdGhlICdpbycsICdkbWEnIGFuZCAndXNlX2RtYScKKyAgIGFyZ3VtZW50cyB0byB0aGUgZHJpdmVyIHdoZW4gaXQgaXMgbG9hZGVkLgorCitpKSBDaXJydXMgcmVjb21tZW5kIHRoYXQgdGhlIGNzODl4MCB1c2UgdGhlIElTQSBETUEgY2hhbm5lbHMgNSwgNiBvcgorICAgNy4gIFlvdSB3aWxsIHByb2JhYmx5IGZpbmQgdGhhdCBvdGhlciBETUEgY2hhbm5lbHMgd2lsbCBub3Qgd29yay4KKworaikgVGhlIGNzODl4MCBzdXBwb3J0cyBETUEgZm9yIHJlY2VpdmluZyBvbmx5LiAgRE1BIG1vZGUgaXMKKyAgIHNpZ25pZmljYW50bHkgbW9yZSBlZmZpY2llbnQuICBGbG9vZGluZyBhIDQwMCBNSHogQ2VsZXJvbiBtYWNoaW5lCisgICB3aXRoIGxhcmdlIHBpbmcgcGFja2V0cyBjb25zdW1lcyA4MiUgb2YgaXRzIENQVSBjYXBhY2l0eSBpbiBub24tRE1BCisgICBtb2RlLiAgV2l0aCBETUEgdGhpcyBpcyByZWR1Y2VkIHRvIDQ1JS4KKworaykgSWYgeW91ciBMaW51eCBrZXJuZWwgd2FzIGNvbXBpbGVkIHdpdGggaW5idWlsdCBwbHVnLWFuZC1wbGF5CisgICBzdXBwb3J0IHlvdSB3aWxsIGJlIGFibGUgdG8gZmluZCBpbmZvcm1hdGlvbiBhYm91dCB0aGUgY3M4OXgwIGNhcmQKKyAgIHdpdGggdGhlIGNvbW1hbmQKKworICAgY2F0IC9wcm9jL2lzYXBucAorCitsKSBJZiBkdXJpbmcgRE1BIG9wZXJhdGlvbiB5b3UgZmluZCBlcnJhdGljIGJlaGF2aW9yIG9yIG5ldHdvcmsgZGF0YQorICAgY29ycnVwdGlvbiB5b3Ugc2hvdWxkIHVzZSB5b3VyIFBDJ3MgQklPUyB0byBzbG93IHRoZSBFSVNBIGJ1cyBjbG9jay4KKworbSkgSWYgdGhlIGNzODl4MCBkcml2ZXIgaXMgY29tcGlsZWQgZGlyZWN0bHkgaW50byB0aGUga2VybmVsCisgICAobm9uLW1vZHVsYXIpIHRoZW4gaXRzIEkvTyBhZGRyZXNzIGlzIGF1dG9tYXRpY2FsbHkgZGV0ZXJtaW5lZCBieQorICAgSVNBIGJ1cyBwcm9iaW5nLiAgVGhlIElSUSBudW1iZXIsIG1lZGlhIG9wdGlvbnMsIGV0YyBhcmUgZGV0ZXJtaW5lZAorICAgZnJvbSB0aGUgY2FyZCdzIEVFUFJPTS4KKworbikgSWYgdGhlIGNzODl4MCBkcml2ZXIgaXMgY29tcGlsZWQgZGlyZWN0bHkgaW50byB0aGUga2VybmVsLCBETUEKKyAgIG1vZGUgbWF5IGJlIHNlbGVjdGVkIGJ5IHByb3ZpZGluZyB0aGUga2VybmVsIHdpdGggYSBib290IG9wdGlvbgorICAgJ2NzODl4MF9kbWE9Ticgd2hlcmUgJ04nIGlzIHRoZSBkZXNpcmVkIERNQSBjaGFubmVsIG51bWJlciAoNSwgNiBvciA3KS4KKworICAgS2VybmVsIGJvb3Qgb3B0aW9ucyBtYXkgYmUgcHJvdmlkZWQgb24gdGhlIExJTE8gY29tbWFuZCBsaW5lOgorCisJTElMTyBib290OiBsaW51eCBjczg5eDBfZG1hPTUKKworICAgb3IgdGhleSBtYXkgYmUgcGxhY2VkIGluIC9ldGMvbGlsby5jb25mOgorCisJaW1hZ2U9L2Jvb3QvYnpJbWFnZS0yLjMuNDgKKwkgIGFwcGVuZD0iY3M4OXgwX2RtYT01IgorCSAgbGFiZWw9bGludXgKKwkgIHJvb3Q9L2Rldi9oZGE1CisJICByZWFkLW9ubHkKKworICAgVGhlIERNQSBSeCBidWZmZXIgc2l6ZSBpcyBoYXJkd2lyZWQgdG8gMTYga2J5dGVzIGluIHRoaXMgbW9kZS4KKyAgICg2NGsgbW9kZSBpcyBub3QgYXZhaWxhYmxlKS4KKworCis0LjAgQ09NUElMSU5HIFRIRSBEUklWRVIKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworVGhlIGNzODl4MCBkcml2ZXIgY2FuIGJlIGNvbXBpbGVkIGRpcmVjdGx5IGludG8gdGhlIGtlcm5lbCBvciBjb21waWxlZCBpbnRvCithIGxvYWRhYmxlIGRldmljZSBkcml2ZXIgbW9kdWxlLgorCisKKzQuMSBDT01QSUxJTkcgVEhFIERSSVZFUiBBUyBBIExPQURBQkxFIE1PRFVMRQorCitUbyBjb21waWxlIHRoZSBkcml2ZXIgaW50byBhIGxvYWRhYmxlIG1vZHVsZSwgdXNlIHRoZSBmb2xsb3dpbmcgY29tbWFuZCAKKyhzaW5nbGUgY29tbWFuZCBsaW5lLCB3aXRob3V0IHF1b3Rlcyk6CisKKyJnY2MgLURfX0tFUk5FTF9fIC1JL3Vzci9zcmMvbGludXgvaW5jbHVkZSAtSS91c3Ivc3JjL2xpbnV4L25ldC9pbmV0IC1XYWxsIAorLVdzdHJpY3QtcHJvdG90eXBlcyAtTzIgLWZvbWl0LWZyYW1lLXBvaW50ZXIgLURNT0RVTEUgLURDT05GSUdfTU9EVkVSU0lPTlMgCistYyBjczg5eDAuYyIKKworNC4yIENPTVBJTElORyBUSEUgRFJJVkVSIFRPIFNVUFBPUlQgTUVNT1JZIE1PREUKKworU3VwcG9ydCBmb3IgbWVtb3J5IG1vZGUgd2FzIG5vdCBjYXJyaWVkIG92ZXIgaW50byB0aGUgMi4zIHNlcmllcyBrZXJuZWxzLgorCis0LjMgQ09NUElMSU5HIFRIRSBEUklWRVIgVE8gU1VQUE9SVCBSeCBETUEKKworVGhlIGNvbXBpbGUtdGltZSBvcHRpb25hbGl0eSBmb3IgRE1BIHdhcyByZW1vdmVkIGluIHRoZSAyLjMga2VybmVsCitzZXJpZXMuICBETUEgc3VwcG9ydCBpcyBub3cgdW5jb25kaXRpb25hbGx5IHBhcnQgb2YgdGhlIGRyaXZlci4gIEl0IGlzCitlbmFibGVkIGJ5IHRoZSAndXNlX2RtYT0xJyBtb2R1bGUgb3B0aW9uLgorCis0LjQgQ09NUElMSU5HIFRIRSBEUklWRVIgSU5UTyBUSEUgS0VSTkVMCisKK0lmIHlvdXIgTGludXggZGlzdHJpYnV0aW9uIGFscmVhZHkgaGFzIHN1cHBvcnQgZm9yIHRoZSBjczg5eDAgZHJpdmVyCit0aGVuIHNpbXBseSBjb3B5IHRoZSBzb3VyY2UgZmlsZSB0byB0aGUgL3Vzci9zcmMvbGludXgvZHJpdmVycy9uZXQKK2RpcmVjdG9yeSB0byByZXBsYWNlIHRoZSBvcmlnaW5hbCBvbmVzIGFuZCBydW4gdGhlIG1ha2UgdXRpbGl0eSB0bworcmVidWlsZCB0aGUga2VybmVsLiAgU2VlIFN0ZXAgMyBmb3IgcmVidWlsZGluZyB0aGUga2VybmVsLgorCitJZiB5b3VyIExpbnV4IGRvZXMgbm90IGluY2x1ZGUgdGhlIGNzODl4MCBkcml2ZXIsIHlvdSBuZWVkIHRvIGVkaXQgdGhyZWUgCitjb25maWd1cmF0aW9uIGZpbGVzLCBjb3B5IHRoZSBzb3VyY2UgZmlsZSB0byB0aGUgL3Vzci9zcmMvbGludXgvZHJpdmVycy9uZXQKK2RpcmVjdG9yeSwgYW5kIHRoZW4gcnVuIHRoZSBtYWtlIHV0aWxpdHkgdG8gcmVidWlsZCB0aGUga2VybmVsLgorCisxLiBFZGl0IHRoZSBmb2xsb3dpbmcgY29uZmlndXJhdGlvbiBmaWxlcyBieSBhZGRpbmcgdGhlIHN0YXRlbWVudHMgYXMKK2luZGljYXRlZC4gIChXaGVuIHBvc3NpYmxlLCB0cnkgdG8gbG9jYXRlIHRoZSBhZGRlZCB0ZXh0IHRvIHRoZSBzZWN0aW9uIG9mIHRoZQorZmlsZSBjb250YWluaW5nIHNpbWlsYXIgc3RhdGVtZW50cykuCisKKworYS4pIEluIC91c3Ivc3JjL2xpbnV4L2RyaXZlcnMvbmV0L0NvbmZpZy5pbiwgYWRkOgorCit0cmlzdGF0ZSAnQ1M4OXgwIHN1cHBvcnQnIENPTkZJR19DUzg5eDAKKworRXhhbXBsZToKKworICAgICBpZiBbICIkQ09ORklHX0VYUEVSSU1FTlRBTCIgPSAieSIgXTsgdGhlbgorICAgICAgIHRyaXN0YXRlICdJQ0wgRXRoZXJUZWFtIDE2aS8zMiBzdXBwb3J0JyBDT05GSUdfRVRIMTZJCisgICAgIGZpCisKKyAgICAgdHJpc3RhdGUgJ0NTODl4MCBzdXBwb3J0JyBDT05GSUdfQ1M4OXgwCisKKyAgICAgdHJpc3RhdGUgJ05FMjAwMC9ORTEwMDAgc3VwcG9ydCcgQ09ORklHX05FMjAwMAorICAgICBpZiBbICIkQ09ORklHX0VYUEVSSU1FTlRBTCIgPSAieSIgXTsgdGhlbgorICAgICAgIHRyaXN0YXRlICdOSTUyMTAgc3VwcG9ydCcgQ09ORklHX05JNTIKKworCitiLikgSW4gL3Vzci9zcmMvbGludXgvZHJpdmVycy9uZXQvTWFrZWZpbGUsIGFkZCB0aGUgZm9sbG93aW5nIGxpbmVzOiAKKworaWZlcSAoJChDT05GSUdfQ1M4OXgwKSx5KQorTF9PQkpTICs9IGNzODl4MC5vCitlbHNlCisgIGlmZXEgKCQoQ09ORklHX0NTODl4MCksbSkKKyAgTV9PQkpTICs9IGNzODl4MC5vCisgIGVuZGlmCitlbmRpZgorCisKK2MuKSBJbiAvbGludXgvZHJpdmVycy9uZXQvU3BhY2UuYyBmaWxlLCBhZGQgdGhlIGxpbmU6CisKK2V4dGVybiBpbnQgY3M4OXgwX3Byb2JlKHN0cnVjdCBkZXZpY2UgKmRldik7CisKKworRXhhbXBsZToKKworIGV4dGVybiBpbnQgdWx0cmFfcHJvYmUoc3RydWN0IGRldmljZSAqZGV2KTsKKyBleHRlcm4gaW50IHdkX3Byb2JlKHN0cnVjdCBkZXZpY2UgKmRldik7CisgZXh0ZXJuIGludCBlbDJfcHJvYmUoc3RydWN0IGRldmljZSAqZGV2KTsKKworIGV4dGVybiBpbnQgY3M4OXgwX3Byb2JlKHN0cnVjdCBkZXZpY2UgKmRldik7CisKKyBleHRlcm4gaW50IG5lX3Byb2JlKHN0cnVjdCBkZXZpY2UgKmRldik7CisgZXh0ZXJuIGludCBocF9wcm9iZShzdHJ1Y3QgZGV2aWNlICpkZXYpOworIGV4dGVybiBpbnQgaHBfcGx1c19wcm9iZShzdHJ1Y3QgZGV2aWNlICpkZXYpOworCisKK0Fsc28gYWRkOgorCisgI2lmZGVmIENPTkZJR19DUzg5eDAKKyAJeyBjczg5eDBfcHJvYmUsMCB9LAorICNlbmRpZgorCisKKzIuKSBDb3B5IHRoZSBkcml2ZXIgc291cmNlIGZpbGVzIChjczg5eDAuYyBhbmQgY3M4OXgwLmgpIAoraW50byB0aGUgL3Vzci9zcmMvbGludXgvZHJpdmVycy9uZXQgZGlyZWN0b3J5LgorCisKKzMuKSBHbyB0byAvdXNyL3NyYy9saW51eCBkaXJlY3RvcnkgYW5kIHJ1biAnbWFrZSBjb25maWcnIGZvbGxvd2VkIGJ5ICdtYWtlJyAKKyhvciBtYWtlIGJ6SW1hZ2UpIHRvIHJlYnVpbGQgdGhlIGtlcm5lbC4gCisKKzQuKSBVc2UgdGhlIERPUyAnc2V0dXAnIHV0aWxpdHkgdG8gZGlzYWJsZSBwbHVnIGFuZCBwbGF5IG9uIHRoZSBOSUMuCisKKworNS4wIFRFU1RJTkcgQU5EIFRST1VCTEVTSE9PVElORworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCis1LjEgS05PV04gREVGRUNUUyBhbmQgTElNSVRBVElPTlMKKworUmVmZXIgdG8gdGhlIFJFTEVBU0UuVFhUIGZpbGUgZGlzdHJpYnV0ZWQgYXMgcGFydCBvZiB0aGlzIGFyY2hpdmUgZm9yIGEgbGlzdCBvZiAKK2tub3duIGRlZmVjdHMsIGRyaXZlciBsaW1pdGF0aW9ucywgYW5kIHdvcmsgYXJvdW5kcy4KKworCis1LjIgVEVTVElORyBUSEUgQURBUFRFUgorCitPbmNlIHRoZSBhZGFwdGVyIGhhcyBiZWVuIGluc3RhbGxlZCBhbmQgY29uZmlndXJlZCwgdGhlIGRpYWdub3N0aWMgb3B0aW9uIG9mIAordGhlIENTODkwMC8yMCBTZXR1cCBVdGlsaXR5IGNhbiBiZSB1c2VkIHRvIHRlc3QgdGhlIGZ1bmN0aW9uYWxpdHkgb2YgdGhlIAorYWRhcHRlciBhbmQgaXRzIG5ldHdvcmsgY29ubmVjdGlvbi4gIFVzZSB0aGUgZGlhZ25vc3RpY3MgJ1NlbGYgVGVzdCcgb3B0aW9uIHRvCit0ZXN0IHRoZSBmdW5jdGlvbmFsaXR5IG9mIHRoZSBhZGFwdGVyIHdpdGggdGhlIGhhcmR3YXJlIGNvbmZpZ3VyYXRpb24geW91IGhhdmUKK2Fzc2lnbmVkLiBZb3UgY2FuIHVzZSB0aGUgZGlhZ25vc3RpY3MgJ05ldHdvcmsgVGVzdCcgdG8gdGVzdCB0aGUgYWJpbGl0eSBvZiB0aGUKK2FkYXB0ZXIgdG8gY29tbXVuaWNhdGUgYWNyb3NzIHRoZSBFdGhlcm5ldCB3aXRoIGFub3RoZXIgUEMgZXF1aXBwZWQgd2l0aCBhIAorQ1M4OTAwLzIwLWJhc2VkIGFkYXB0ZXIgY2FyZCAoaXQgbXVzdCBhbHNvIGJlIHJ1bm5pbmcgdGhlIENTODkwMC8yMCBTZXR1cCAKK1V0aWxpdHkpLgorCisgICAgICAgICBOT1RFOiBUaGUgU2V0dXAgVXRpbGl0eSdzIGRpYWdub3N0aWNzIGFyZSBkZXNpZ25lZCB0byBydW4gaW4gYQorICAgICAgICAgRE9TLW9ubHkgb3BlcmF0aW5nIHN5c3RlbSBlbnZpcm9ubWVudC4gIERPIE5PVCBydW4gdGhlIGRpYWdub3N0aWNzIAorICAgICAgICAgZnJvbSBhIERPUyBvciBjb21tYW5kIHByb21wdCBzZXNzaW9uIHVuZGVyIFdpbmRvd3MgOTUsIFdpbmRvd3MgTlQsIAorICAgICAgICAgT1MvMiwgb3Igb3RoZXIgb3BlcmF0aW5nIHN5c3RlbS4KKworVG8gcnVuIHRoZSBkaWFnbm9zdGljcyB0ZXN0cyBvbiB0aGUgQ1M4OTAwLzIwIGFkYXB0ZXI6CisKKyAgIDEuKSBCb290IERPUyBvbiB0aGUgUEMgYW5kIHN0YXJ0IHRoZSBDUzg5MDAvMjAgU2V0dXAgVXRpbGl0eS4KKworICAgMi4pIFRoZSBhZGFwdGVyJ3MgY3VycmVudCBjb25maWd1cmF0aW9uIGlzIGRpc3BsYXllZC4gIEhpdCB0aGUgRU5URVIga2V5IHRvCisgICAgICAgZ2V0IHRvIHRoZSBtYWluIG1lbnUuCisKKyAgIDQuKSBTZWxlY3QgJ0RpYWdub3N0aWNzJyAoQUxULUcpIGZyb20gdGhlIG1haW4gbWVudS4gIAorICAgICAgICogU2VsZWN0ICdTZWxmLVRlc3QnIHRvIHRlc3QgdGhlIGFkYXB0ZXIncyBiYXNpYyBmdW5jdGlvbmFsaXR5LgorICAgICAgICogU2VsZWN0ICdOZXR3b3JrIFRlc3QnIHRvIHRlc3QgdGhlIG5ldHdvcmsgY29ubmVjdGlvbiBhbmQgY2FibGluZy4KKworCis1LjIuMSBESUFHTk9TVElDIFNFTEYtVEVTVAorCitUaGUgZGlhZ25vc3RpYyBzZWxmLXRlc3QgY2hlY2tzIHRoZSBhZGFwdGVyJ3MgYmFzaWMgZnVuY3Rpb25hbGl0eSBhcyB3ZWxsIGFzIAoraXRzIGFiaWxpdHkgdG8gY29tbXVuaWNhdGUgYWNyb3NzIHRoZSBJU0EgYnVzIGJhc2VkIG9uIHRoZSBzeXN0ZW0gcmVzb3VyY2VzIAorYXNzaWduZWQgZHVyaW5nIGhhcmR3YXJlIGNvbmZpZ3VyYXRpb24uICBUaGUgZm9sbG93aW5nIHRlc3RzIGFyZSBwZXJmb3JtZWQ6CisKKyAgICogSU8gUmVnaXN0ZXIgUmVhZC9Xcml0ZSBUZXN0CisgICAgIFRoZSBJTyBSZWdpc3RlciBSZWFkL1dyaXRlIHRlc3QgaW5zdXJlcyB0aGF0IHRoZSBDUzg5MDAvMjAgY2FuIGJlIAorICAgICBhY2Nlc3NlZCBpbiBJTyBtb2RlLCBhbmQgdGhhdCB0aGUgSU8gYmFzZSBhZGRyZXNzIGlzIGNvcnJlY3QuCisKKyAgICogU2hhcmVkIE1lbW9yeSBUZXN0CisgICAgIFRoZSBTaGFyZWQgTWVtb3J5IHRlc3QgaW5zdXJlcyB0aGUgQ1M4OTAwLzIwIGNhbiBiZSBhY2Nlc3NlZCBpbiBtZW1vcnkgCisgICAgIG1vZGUgYW5kIHRoYXQgdGhlIHJhbmdlIG9mIG1lbW9yeSBhZGRyZXNzZXMgYXNzaWduZWQgZG9lcyBub3QgY29uZmxpY3QgCisgICAgIHdpdGggb3RoZXIgZGV2aWNlcyBpbiB0aGUgc3lzdGVtLgorCisgICAqIEludGVycnVwdCBUZXN0CisgICAgIFRoZSBJbnRlcnJ1cHQgdGVzdCBpbnN1cmVzIHRoZXJlIGFyZSBubyBjb25mbGljdHMgd2l0aCB0aGUgYXNzaWduZWQgSVJRCisgICAgIHNpZ25hbC4KKworICAgKiBFRVBST00gVGVzdAorICAgICBUaGUgRUVQUk9NIHRlc3QgaW5zdXJlcyB0aGUgRUVQUk9NIGNhbiBiZSByZWFkLgorCisgICAqIENoaXAgUkFNIFRlc3QKKyAgICAgVGhlIENoaXAgUkFNIHRlc3QgaW5zdXJlcyB0aGUgNEsgb2YgbWVtb3J5IGludGVybmFsIHRvIHRoZSBDUzg5MDAvMjAgaXMKKyAgICAgd29ya2luZyBwcm9wZXJseS4KKworICAgKiBJbnRlcm5hbCBMb29wLWJhY2sgVGVzdAorICAgICBUaGUgSW50ZXJuYWwgTG9vcCBCYWNrIHRlc3QgaW5zdXJlcyB0aGUgYWRhcHRlcidzIHRyYW5zbWl0dGVyIGFuZCAKKyAgICAgcmVjZWl2ZXIgYXJlIG9wZXJhdGluZyBwcm9wZXJseS4gIElmIHRoaXMgdGVzdCBmYWlscywgbWFrZSBzdXJlIHRoZSAKKyAgICAgYWRhcHRlcidzIGNhYmxlIGlzIGNvbm5lY3RlZCB0byB0aGUgbmV0d29yayAoY2hlY2sgZm9yIExFRCBhY3Rpdml0eSBmb3IgCisgICAgIGV4YW1wbGUpLgorCisgICAqIEJvb3QgUFJPTSBUZXN0CisgICAgIFRoZSBCb290IFBST00gIHRlc3QgaW5zdXJlcyB0aGUgQm9vdCBQUk9NIGlzIHByZXNlbnQsIGFuZCBjYW4gYmUgcmVhZC4KKyAgICAgRmFpbHVyZSBpbmRpY2F0ZXMgdGhlIEJvb3QgUFJPTSAgd2FzIG5vdCBzdWNjZXNzZnVsbHkgcmVhZCBkdWUgdG8gYQorICAgICBoYXJkd2FyZSBwcm9ibGVtIG9yIGR1ZSB0byBhIGNvbmZsaWN0cyBvbiB0aGUgQm9vdCBQUk9NIGFkZHJlc3MKKyAgICAgYXNzaWdubWVudC4gKFRlc3Qgb25seSBhcHBsaWVzIGlmIHRoZSBhZGFwdGVyIGlzIGNvbmZpZ3VyZWQgdG8gdXNlIHRoZQorICAgICBCb290IFBST00gb3B0aW9uLikKKworRmFpbHVyZSBvZiBhIHRlc3QgaXRlbSBpbmRpY2F0ZXMgYSBwb3NzaWJsZSBzeXN0ZW0gcmVzb3VyY2UgY29uZmxpY3Qgd2l0aCAKK2Fub3RoZXIgZGV2aWNlIG9uIHRoZSBJU0EgYnVzLiAgSW4gdGhpcyBjYXNlLCB5b3Ugc2hvdWxkIHVzZSB0aGUgTWFudWFsIFNldHVwIAorb3B0aW9uIHRvIHJlY29uZmlndXJlIHRoZSBhZGFwdGVyIGJ5IHNlbGVjdGluZyBhIGRpZmZlcmVudCB2YWx1ZSBmb3IgdGhlIHN5c3RlbQorcmVzb3VyY2UgdGhhdCBmYWlsZWQuCisKKworNS4yLjIgRElBR05PU1RJQyBORVRXT1JLIFRFU1QKKworVGhlIERpYWdub3N0aWMgTmV0d29yayBUZXN0IHZlcmlmaWVzIGEgd29ya2luZyBuZXR3b3JrIGNvbm5lY3Rpb24gYnkgCit0cmFuc2ZlcnJpbmcgZGF0YSBiZXR3ZWVuIHR3byBDUzg5MDAvMjAgYWRhcHRlcnMgaW5zdGFsbGVkIGluIGRpZmZlcmVudCBQQ3MgCitvbiB0aGUgc2FtZSBuZXR3b3JrLiAoTm90ZTogdGhlIGRpYWdub3N0aWMgbmV0d29yayB0ZXN0IHNob3VsZCBub3QgYmUgcnVuIAorYmV0d2VlbiB0d28gbm9kZXMgYWNyb3NzIGEgcm91dGVyLikgCisKK1RoaXMgdGVzdCByZXF1aXJlcyB0aGF0IGVhY2ggb2YgdGhlIHR3byBQQ3MgaGF2ZSBhIENTODkwMC8yMC1iYXNlZCBhZGFwdGVyCitpbnN0YWxsZWQgYW5kIGhhdmUgdGhlIENTODkwMC8yMCBTZXR1cCBVdGlsaXR5IHJ1bm5pbmcuICBUaGUgZmlyc3QgUEMgaXMgCitjb25maWd1cmVkIGFzIGEgUmVzcG9uZGVyIGFuZCB0aGUgb3RoZXIgUEMgaXMgY29uZmlndXJlZCBhcyBhbiBJbml0aWF0b3IuICAKK09uY2UgdGhlIEluaXRpYXRvciBpcyBzdGFydGVkLCBpdCBzZW5kcyBkYXRhIGZyYW1lcyB0byB0aGUgUmVzcG9uZGVyIHdoaWNoIAorcmV0dXJucyB0aGUgZnJhbWVzIHRvIHRoZSBJbml0aWF0b3IuCisKK1RoZSB0b3RhbCBudW1iZXIgb2YgZnJhbWVzIHJlY2VpdmVkIGFuZCB0cmFuc21pdHRlZCBhcmUgZGlzcGxheWVkIG9uIHRoZSAKK0luaXRpYXRvcidzIGRpc3BsYXksIGFsb25nIHdpdGggYSBjb3VudCBvZiB0aGUgbnVtYmVyIG9mIGZyYW1lcyByZWNlaXZlZCBhbmQgCit0cmFuc21pdHRlZCBPSyBvciBpbiBlcnJvci4gIFRoZSB0ZXN0IGNhbiBiZSB0ZXJtaW5hdGVkIGFueXRpbWUgYnkgdGhlIHVzZXIgYXQgCitlaXRoZXIgUEMuCisKK1RvIHNldHVwIHRoZSBEaWFnbm9zdGljIE5ldHdvcmsgVGVzdDoKKworICAgIDEuKSBTZWxlY3QgYSBQQyB3aXRoIGEgQ1M4OTAwLzIwLWJhc2VkIGFkYXB0ZXIgYW5kIGEga25vd24gd29ya2luZyBuZXR3b3JrCisgICAgICAgIGNvbm5lY3Rpb24gdG8gYWN0IGFzIHRoZSBSZXNwb25kZXIuICBSdW4gdGhlIENTODkwMC8yMCBTZXR1cCBVdGlsaXR5IAorICAgICAgICBhbmQgc2VsZWN0ICdEaWFnbm9zdGljcyAtPiBOZXR3b3JrIFRlc3QgLT4gUmVzcG9uZGVyJyBmcm9tIHRoZSBtYWluIAorICAgICAgICBtZW51LiAgSGl0IEVOVEVSIHRvIHN0YXJ0IHRoZSBSZXNwb25kZXIuCisKKyAgICAyLikgUmV0dXJuIHRvIHRoZSBQQyB3aXRoIHRoZSBDUzg5MDAvMjAtYmFzZWQgYWRhcHRlciB5b3Ugd2FudCB0byB0ZXN0IGFuZAorICAgICAgICBzdGFydCB0aGUgQ1M4OTAwLzIwIFNldHVwIFV0aWxpdHkuIAorCisgICAgMy4pIEZyb20gdGhlIG1haW4gbWVudSwgU2VsZWN0ICdEaWFnbm9zdGljIC0+IE5ldHdvcmsgVGVzdCAtPiBJbml0aWF0b3InLgorICAgICAgICBIaXQgRU5URVIgdG8gc3RhcnQgdGhlIHRlc3QuCisgCitZb3UgbWF5IHN0b3AgdGhlIHRlc3Qgb24gdGhlIEluaXRpYXRvciBhdCBhbnkgdGltZSB3aGlsZSBhbGxvd2luZyB0aGUgUmVzcG9uZGVyCit0byBjb250aW51ZSBydW5uaW5nLiAgSW4gdGhpcyBtYW5uZXIsIHlvdSBjYW4gbW92ZSB0byBhZGRpdGlvbmFsIFBDcyBhbmQgdGVzdCAKK3RoZW0gYnkgc3RhcnRpbmcgdGhlIEluaXRpYXRvciBvbiBhbm90aGVyIFBDIHdpdGhvdXQgaGF2aW5nIHRvIHN0b3Avc3RhcnQgdGhlIAorUmVzcG9uZGVyLgorIAorCisKKzUuMyBVU0lORyBUSEUgQURBUFRFUidTIExFRHMKKworVGhlIDIgYW5kIDMtbWVkaWEgYWRhcHRlcnMgaGF2ZSB0d28gTEVEcyB2aXNpYmxlIG9uIHRoZSBiYWNrIGVuZCBvZiB0aGUgYm9hcmQgCitsb2NhdGVkIG5lYXIgdGhlIDEwQmFzZS1UIGNvbm5lY3Rvci4gIAorCitMaW5rIEludGVncml0eSBMRUQ6IEEgInN0ZWFkeSIgT04gb2YgdGhlIGdyZWVuIExFRCBpbmRpY2F0ZXMgYSB2YWxpZCAxMEJhc2UtVCAKK2Nvbm5lY3Rpb24uICAoT25seSBhcHBsaWVzIHRvIDEwQmFzZS1ULiAgVGhlIGdyZWVuIExFRCBoYXMgbm8gc2lnbmlmaWNhbmNlIGZvcgorYSAxMEJhc2UtMiBvciBBVUkgY29ubmVjdGlvbi4pCisKK1RYL1JYIExFRDogVGhlIHllbGxvdyBMRUQgbGlnaHRzIGJyaWVmbHkgZWFjaCB0aW1lIHRoZSBhZGFwdGVyIHRyYW5zbWl0cyBvciAKK3JlY2VpdmVzIGRhdGEuIChUaGUgeWVsbG93IExFRCB3aWxsIGFwcGVhciB0byAiZmxpY2tlciIgb24gYSB0eXBpY2FsIG5ldHdvcmsuKQorCisKKzUuNCBSRVNPTFZJTkcgSS9PIENPTkZMSUNUUworCitBbiBJTyBjb25mbGljdCBvY2N1cnMgd2hlbiB0d28gb3IgbW9yZSBhZGFwdGVyIHVzZSB0aGUgc2FtZSBJU0EgcmVzb3VyY2UgKElPIAorYWRkcmVzcywgbWVtb3J5IGFkZHJlc3Mgb3IgSVJRKS4gIFlvdSBjYW4gdXN1YWxseSBkZXRlY3QgYW4gSU8gY29uZmxpY3QgaW4gb25lIAorb2YgZm91ciB3YXlzIGFmdGVyIGluc3RhbGxpbmcgYW5kIG9yIGNvbmZpZ3VyaW5nIHRoZSBDUzg5MDAvMjAtYmFzZWQgYWRhcHRlcjoKKworICAgIDEuKSBUaGUgc3lzdGVtIGRvZXMgbm90IGJvb3QgcHJvcGVybHkgKG9yIGF0IGFsbCkuCisKKyAgICAyLikgVGhlIGRyaXZlciBjYW4gbm90IGNvbW11bmljYXRlIHdpdGggdGhlIGFkYXB0ZXIsIHJlcG9ydGluZyBhbiAiQWRhcHRlcgorICAgICAgICBub3QgZm91bmQiIGVycm9yIG1lc3NhZ2UuCisKKyAgICAzLikgWW91IGNhbm5vdCBjb25uZWN0IHRvIHRoZSBuZXR3b3JrIG9yIHRoZSBkcml2ZXIgd2lsbCBub3QgbG9hZC4KKworICAgIDQuKSBJZiB5b3UgaGF2ZSBjb25maWd1cmVkIHRoZSBhZGFwdGVyIHRvIHJ1biBpbiBtZW1vcnkgbW9kZSBidXQgdGhlIGRyaXZlcgorICAgICAgICByZXBvcnRzIGl0IGlzIHVzaW5nIElPIG1vZGUgd2hlbiBsb2FkaW5nLCB0aGlzIGlzIGFuIGluZGljYXRpb24gb2YgYQorICAgICAgICBtZW1vcnkgYWRkcmVzcyBjb25mbGljdC4KKworSWYgYW4gSU8gY29uZmxpY3Qgb2NjdXJzLCBydW4gdGhlIENTODkwMC8yMCBTZXR1cCBVdGlsaXR5IGFuZCBwZXJmb3JtIGEgCitkaWFnbm9zdGljIHNlbGYtdGVzdC4gIE5vcm1hbGx5LCB0aGUgSVNBIHJlc291cmNlIGluIGNvbmZsaWN0IHdpbGwgZmFpbCB0aGUgCitzZWxmLXRlc3QuICBJZiBzbywgcmVjb25maWd1cmUgdGhlIGFkYXB0ZXIgc2VsZWN0aW5nIGFub3RoZXIgY2hvaWNlIGZvciB0aGUgCityZXNvdXJjZSBpbiBjb25mbGljdC4gIFJ1biB0aGUgZGlhZ25vc3RpY3MgYWdhaW4gdG8gY2hlY2sgZm9yIGZ1cnRoZXIgSU8gCitjb25mbGljdHMuCisKK0luIHNvbWUgY2FzZXMsIHN1Y2ggYXMgd2hlbiB0aGUgUEMgd2lsbCBub3QgYm9vdCwgaXQgbWF5IGJlIG5lY2Vzc2FyeSB0byByZW1vdmUKK3RoZSBhZGFwdGVyIGFuZCByZWNvbmZpZ3VyZSBpdCBieSBpbnN0YWxsaW5nIGl0IGluIGFub3RoZXIgUEMgdG8gcnVuIHRoZSAKK0NTODkwMC8yMCBTZXR1cCBVdGlsaXR5LiAgT25jZSByZWluc3RhbGxlZCBpbiB0aGUgdGFyZ2V0IHN5c3RlbSwgcnVuIHRoZSAKK2RpYWdub3N0aWNzIHNlbGYtdGVzdCB0byBlbnN1cmUgdGhlIG5ldyBjb25maWd1cmF0aW9uIGlzIGZyZWUgb2YgY29uZmxpY3RzIAorYmVmb3JlIGxvYWRpbmcgdGhlIGRyaXZlciBhZ2Fpbi4KKworV2hlbiBtYW51YWxseSBjb25maWd1cmluZyB0aGUgYWRhcHRlciwga2VlcCBpbiBtaW5kIHRoZSB0eXBpY2FsIElTQSBzeXN0ZW0gCityZXNvdXJjZSB1c2FnZSBhcyBpbmRpY2F0ZWQgaW4gdGhlIHRhYmxlcyBiZWxvdy4KKworSS9PIEFkZHJlc3MgICAgCURldmljZSAgICAgICAgICAgICAgICAgICAgICAgIElSUSAgICAgIERldmljZQorLS0tLS0tLS0tLS0gICAgCS0tLS0tLS0tICAgICAgICAgICAgICAgICAgICAgIC0tLSAgICAgIC0tLS0tLS0tCisgMjAwLTIwRiAgICAgICAJR2FtZSBJL08gYWRhcHRlciAgICAgICAgICAgICAgIDMgICAgICAgQ09NMiwgQnVzIE1vdXNlCisgMjMwLTIzRiAgICAgICAJQnVzIE1vdXNlICAgICAgICAgICAgICAgICAgICAgIDQgICAgICAgQ09NMQorIDI3MC0yN0YgICAgICAgCUxQVDM6IHRoaXJkIHBhcmFsbGVsIHBvcnQgICAgICA1ICAgICAgIExQVDIKKyAyRjAtMkZGICAgICAgIAlDT00yOiBzZWNvbmQgc2VyaWFsIHBvcnQgICAgICAgNiAgICAgICBGbG9wcHkgRGlzayBjb250cm9sbGVyCisgMzIwLTMyRiAgICAgICAJRml4ZWQgZGlzayBjb250cm9sbGVyICAgICAgICAgIDcgICAgICAgTFBUMQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAJICAgICAgIDggICAgICAgUmVhbC10aW1lIENsb2NrCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOSAgICAgICBFR0EvVkdBIGRpc3BsYXkgYWRhcHRlciAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEyICAgICAgIE1vdXNlIChQUy8yKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorTWVtb3J5IEFkZHJlc3MgIERldmljZSAgICAgICAgICAgICAgICAgICAgICAgICAgMTMgICAgICAgTWF0aCBDb3Byb2Nlc3NvcgorLS0tLS0tLS0tLS0tLS0gIC0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgICAgICAgICAgMTQgICAgICAgSGFyZCBEaXNrIGNvbnRyb2xsZXIKK0EwMDAtQkZGRglFR0EgR3JhcGhpY3MgQWRwYXRlcgorQTAwMC1DN0ZGCVZHQSBHcmFwaGljcyBBZHBhdGVyCitCMDAwLUJGRkYJTW9ubyBHcmFwaGljcyBBZGFwdGVyCitCODAwLUJGRkYJQ29sb3IgR3JhcGhpY3MgQWRhcHRlcgorRTAwMC1GRkZGCUFUIEJJT1MKKworCisKKworNi4wIFRFQ0hOSUNBTCBTVVBQT1JUCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKzYuMSBDT05UQUNUSU5HIENJUlJVUyBMT0dJQydTIFRFQ0hOSUNBTCBTVVBQT1JUCisKK0NpcnJ1cyBMb2dpYydzIENTODlYWCBUZWNobmljYWwgQXBwbGljYXRpb24gU3VwcG9ydCBjYW4gYmUgcmVhY2hlZCBhdDoKKworVGVsZXBob25lICA6KDgwMCkgODg4LTUwMTYgKGZyb20gaW5zaWRlIFUuUy4gYW5kIENhbmFkYSkKKyAgICAgICAgICAgOig1MTIpIDQ0Mi03NTU1IChmcm9tIG91dHNpZGUgdGhlIFUuUy4gYW5kIENhbmFkYSkKK0ZheCAgICAgICAgOig1MTIpIDkxMi0zODcxCitFbWFpbCAgICAgIDpldGhlcm5ldEBjcnlzdGFsLmNpcnJ1cy5jb20KK1dXVyAgICAgICAgOmh0dHA6Ly93d3cuY2lycnVzLmNvbQorCisKKzYuMiBJTkZPUk1BVElPTiBSRVFVSVJFRCBCRUZPUkUgQ09OVEFDVElORyBURUNITklDQUwgU1VQUE9SVAorCitCZWZvcmUgY29udGFjdGluZyBDaXJydXMgTG9naWMgZm9yIHRlY2huaWNhbCBzdXBwb3J0LCBiZSBwcmVwYXJlZCB0byBwcm92aWRlIGFzIAorTXVjaCBvZiB0aGUgZm9sbG93aW5nIGluZm9ybWF0aW9uIGFzIHBvc3NpYmxlLiAKKworMS4pIEFkYXB0ZXIgdHlwZSAoQ1JEODkwMCwgQ0RCODkwMCwgQ0RCODkyMCwgZXRjLikKKworMi4pIEFkYXB0ZXIgY29uZmlndXJhdGlvbgorCisgICAgKiBJTyBCYXNlLCBNZW1vcnkgQmFzZSwgSU8gb3IgbWVtb3J5IG1vZGUgZW5hYmxlZCwgSVJRLCBETUEgY2hhbm5lbAorICAgICogUGx1ZyBhbmQgUGxheSBlbmFibGVkL2Rpc2FibGVkIChDUzg5MjAtYmFzZWQgYWRhcHRlcnMgb25seSkKKyAgICAqIENvbmZpZ3VyZWQgZm9yIG1lZGlhIGF1dG8tZGV0ZWN0IG9yIHNwZWNpZmljIG1lZGlhIHR5cGUgKHdoaWNoIHR5cGUpLiAgICAKKworMy4pIFBDIFN5c3RlbSdzIENvbmZpZ3VyYXRpb24KKworICAgICogUGx1ZyBhbmQgUGxheSBzeXN0ZW0gKHllcy9ubykKKyAgICAqIEJJT1MgKG1ha2UgYW5kIHZlcnNpb24pCisgICAgKiBTeXN0ZW0gbWFrZSBhbmQgbW9kZWwKKyAgICAqIENQVSAodHlwZSBhbmQgc3BlZWQpCisgICAgKiBTeXN0ZW0gUkFNCisgICAgKiBTQ1NJIEFkYXB0ZXIKKworNC4pIFNvZnR3YXJlCisKKyAgICAqIENTODlYWCBkcml2ZXIgYW5kIHZlcnNpb24KKyAgICAqIFlvdXIgbmV0d29yayBvcGVyYXRpbmcgc3lzdGVtIGFuZCB2ZXJzaW9uCisgICAgKiBZb3VyIHN5c3RlbSdzIE9TIHZlcnNpb24gCisgICAgKiBWZXJzaW9uIG9mIGFsbCBwcm90b2NvbCBzdXBwb3J0IGZpbGVzCisKKzUuKSBBbnkgRXJyb3IgTWVzc2FnZSBkaXNwbGF5ZWQuCisKKworCis2LjMgT0JUQUlOSU5HIFRIRSBMQVRFU1QgRFJJVkVSIFZFUlNJT04KKworWW91IGNhbiBvYnRhaW4gdGhlIGxhdGVzdCBDUzg5WFggZHJpdmVycyBhbmQgc3VwcG9ydCBzb2Z0d2FyZSBmcm9tIENpcnJ1cyBMb2dpYydzIAorV2ViIHNpdGUuICBZb3UgY2FuIGFsc28gY29udGFjdCBDaXJydXMgTG9naWMncyBUZWNobmljYWwgU3VwcG9ydCAoZW1haWw6CitldGhlcm5ldEBjcnlzdGFsLmNpcnJ1cy5jb20pIGFuZCByZXF1ZXN0IHRoYXQgeW91IGJlIHJlZ2lzdGVyZWQgZm9yIGF1dG9tYXRpYyAKK3NvZnR3YXJlLXVwZGF0ZSBub3RpZmljYXRpb24uCisKK0NpcnJ1cyBMb2dpYyBtYWludGFpbnMgYSB3ZWIgcGFnZSBhdCBodHRwOi8vd3d3LmNpcnJ1cy5jb20gd2l0aCB0aGUKK3RoZSBsYXRlc3QgZHJpdmVycyBhbmQgdGVjaG5pY2FsIHB1YmxpY2F0aW9ucy4KKworCis2LjQgQ3VycmVudCBtYWludGFpbmVyCisKK0luIEZlYnJ1YXJ5IDIwMDAgdGhlIG1haW50ZW5hbmNlIG9mIHRoaXMgZHJpdmVyIHdhcyBhc3N1bWVkIGJ5IEFuZHJldworTW9ydG9uIDxha3BtQHppcC5jb20uYXU+CisKKzYuNSBLZXJuZWwgbW9kdWxlIHBhcmFtZXRlcnMKKworRm9yIHVzZSBpbiBlbWJlZGRlZCBlbnZpcm9ubWVudHMgd2l0aCBubyBjczg5eDAgRUVQUk9NLCB0aGUga2VybmVsIGJvb3QKK3BhcmFtZXRlciBgY3M4OXgwX21lZGlhPScgaGFzIGJlZW4gaW1wbGVtZW50ZWQuICBVc2FnZSBpczoKKworCWNzODl4MF9tZWRpYT1yajQ1ICAgIG9yCisJY3M4OXgwX21lZGlhPWF1aSAgICAgb3IKKwljczg5eDBfbWVkaWE9Ym5jCisKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9kZTR4NS50eHQgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZGU0eDUudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM4ZTRjYTkKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZGU0eDUudHh0CkBAIC0wLDAgKzEsMTc4IEBACisgICAgT3JpZ2luYWxseSwgICB0aGlzICBkcml2ZXIgIHdhcyAgICB3cml0dGVuICBmb3IgdGhlICBEaWdpdGFsICAgRXF1aXBtZW50CisgICAgQ29ycG9yYXRpb24gc2VyaWVzIG9mIEV0aGVyV09SS1MgRXRoZXJuZXQgY2FyZHM6CisKKyAgICAgICAgREU0MjUgVFAvQ09BWCBFSVNBCisJREU0MzQgVFAgUENJCisJREU0MzUgVFAvQ09BWC9BVUkgUENJCisJREU0NTAgVFAvQ09BWC9BVUkgUENJCisJREU1MDAgMTAvMTAwIFBDSSBGYXN0ZXJuZXQKKworICAgIGJ1dCBpdCAgd2lsbCAgbm93IGF0dGVtcHQgIHRvICBzdXBwb3J0IGFsbCAgY2FyZHMgd2hpY2ggICBjb25mb3JtIHRvIHRoZQorICAgIERpZ2l0YWwgU2VtaWNvbmR1Y3RvciAgIFNST00gICBTcGVjaWZpY2F0aW9uLiAgICBUaGUgIGRyaXZlciAgIGN1cnJlbnRseQorICAgIHJlY29nbmlzZXMgdGhlIGZvbGxvd2luZyBjaGlwczoKKworICAgICAgICBEQzIxMDQwICAobm8gU1JPTSkgCisJREMyMTA0MVtBXSAgCisJREMyMTE0MFtBXSAKKwlEQzIxMTQyIAorCURDMjExNDMgCisKKyAgICBTbyBmYXIgdGhlIGRyaXZlciBpcyBrbm93biB0byB3b3JrIHdpdGggdGhlIGZvbGxvd2luZyBjYXJkczoKKworICAgICAgICBLSU5HU1RPTgorCUxpbmtzeXMKKwlaTllYMzQyCisJU01DODQzMgorCVNNQzkzMzIgKHcvbmV3IFNST00pCisJWk5ZWDMxWzQ1XQorCVpOWVgzNDYgMTAvMTAwIDQgcG9ydCAoY2FuIGFjdCBhcyBhIDEwLzEwMCBicmlkZ2UhKSAKKworICAgIFRoZSBkcml2ZXIgaGFzIGJlZW4gdGVzdGVkIG9uIGEgcmVsYXRpdmVseSBidXN5IG5ldHdvcmsgdXNpbmcgdGhlIERFNDI1LAorICAgIERFNDM0LCBERTQzNSBhbmQgREU1MDAgY2FyZHMgYW5kIGJlbmNobWFya2VkIHdpdGggJ3R0Y3AnOiBpdCB0cmFuc2ZlcnJlZAorICAgIDE2TSBvZiBkYXRhIHRvIGEgREVDc3RhdGlvbiA1MDAwLzIwMCBhcyBmb2xsb3dzOgorCisgICAgICAgICAgICAgICAgVENQICAgICAgICAgICBVRFAKKyAgICAgICAgICAgICBUWCAgICAgUlggICAgIFRYICAgICBSWAorICAgIERFNDI1ICAgMTAzMGsgIDk5N2sgICAxMTcwayAgMTEyOGsKKyAgICBERTQzNCAgIDEwNjNrICA5OTVrICAgMTE3MGsgIDExMjVrCisgICAgREU0MzUgICAxMDYzayAgOTk1ayAgIDExNzBrICAxMTI1aworICAgIERFNTAwICAgMTA2M2sgIDk5OGsgICAxMTcwayAgMTEyNWsgIGluIDEwTWIvcyBtb2RlCisKKyAgICBBbGwgIHZhbHVlcyBhcmUgdHlwaWNhbCAoaW4gICBrQnl0ZXMvc2VjKSBmcm9tIGEgIHNhbXBsZSAgb2YgNCBmb3IgIGVhY2gKKyAgICBtZWFzdXJlbWVudC4gVGhlaXIgZXJyb3IgaXMgKy8tMjBrIG9uIGEgcXVpZXQgKHByaXZhdGUpIG5ldHdvcmsgYW5kIGFsc28KKyAgICBkZXBlbmQgb24gd2hhdCBsb2FkIHRoZSBDUFUgaGFzLgorCisgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisgICAgVGhlIGFiaWxpdHkgdG8gbG9hZCB0aGlzICBkcml2ZXIgYXMgYSBsb2FkYWJsZSAgbW9kdWxlIGhhcyBiZWVuIGluY2x1ZGVkCisgICAgYW5kIHVzZWQgZXh0ZW5zaXZlbHkgIGR1cmluZyB0aGUgZHJpdmVyIGRldmVsb3BtZW50ICAodG8gc2F2ZSB0aG9zZSBsb25nCisgICAgcmVib290IHNlcXVlbmNlcykuICBMb2FkYWJsZSBtb2R1bGUgc3VwcG9ydCAgdW5kZXIgUENJIGFuZCBFSVNBIGhhcyBiZWVuCisgICAgYWNoaWV2ZWQgYnkgbGV0dGluZyB0aGUgZHJpdmVyIGF1dG9wcm9iZSBhcyBpZiBpdCB3ZXJlIGNvbXBpbGVkIGludG8gdGhlCisgICAga2VybmVsLiBEbyBtYWtlIHN1cmUgIHlvdSdyZSBub3Qgc2hhcmluZyAgaW50ZXJydXB0cyB3aXRoIGFueXRoaW5nICB0aGF0CisgICAgY2Fubm90IGFjY29tbW9kYXRlICBpbnRlcnJ1cHQgIHNoYXJpbmchCisKKyAgICBUbyB1dGlsaXNlIHRoaXMgYWJpbGl0eSwgeW91IGhhdmUgdG8gZG8gOCB0aGluZ3M6CisKKyAgICAwKSBoYXZlIGEgY29weSBvZiB0aGUgbG9hZGFibGUgbW9kdWxlcyBjb2RlIGluc3RhbGxlZCBvbiB5b3VyIHN5c3RlbS4KKyAgICAxKSBjb3B5IGRlNHg1LmMgZnJvbSB0aGUgIC9saW51eC9kcml2ZXJzL25ldCBkaXJlY3RvcnkgdG8geW91ciBmYXZvdXJpdGUKKyAgICB0ZW1wb3JhcnkgZGlyZWN0b3J5LgorICAgIDIpIGZvciBmaXhlZCAgYXV0b3Byb2JlcyAobm90ICByZWNvbW1lbmRlZCksICBlZGl0IHRoZSBzb3VyY2UgY29kZSAgbmVhcgorICAgIGxpbmUgNTU5NCB0byByZWZsZWN0IHRoZSBJL08gYWRkcmVzcyAgeW91J3JlIHVzaW5nLCBvciBhc3NpZ24gdGhlc2Ugd2hlbgorICAgIGxvYWRpbmcgYnk6CisKKyAgICAgICAgICAgICAgICAgICBpbnNtb2QgZGU0eDUgaW89MHhnaGggICAgICAgICAgIHdoZXJlIGcgPSBidXMgbnVtYmVyCisJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoaCA9IGRldmljZSBudW1iZXIgICAKKworICAgICAgIE5COiBhdXRvcHJvYmluZyBmb3IgbW9kdWxlcyBpcyBub3cgc3VwcG9ydGVkIGJ5IGRlZmF1bHQuIFlvdSBtYXkganVzdAorICAgICAgICAgICB1c2U6CisKKyAgICAgICAgICAgICAgICAgICBpbnNtb2QgZGU0eDUKKworICAgICAgICAgICB0byBsb2FkIGFsbCBhdmFpbGFibGUgYm9hcmRzLiBGb3IgYSBzcGVjaWZpYyBib2FyZCwgc3RpbGwgdXNlCisJICAgdGhlICdpbz0/JyBhYm92ZS4KKyAgICAzKSBjb21waWxlICBkZTR4NS5jLCBidXQgaW5jbHVkZSAtRE1PRFVMRSBpbiAgdGhlIGNvbW1hbmQgbGluZSB0byBlbnN1cmUKKyAgICB0aGF0IHRoZSBjb3JyZWN0IGJpdHMgYXJlIGNvbXBpbGVkIChzZWUgZW5kIG9mIHNvdXJjZSBjb2RlKS4KKyAgICA0KSBpZiB5b3UgYXJlIHdhbnRpbmcgdG8gYWRkIGEgbmV3ICBjYXJkLCBnb3RvIDUuIE90aGVyd2lzZSwgcmVjb21waWxlIGEKKyAgICBrZXJuZWwgd2l0aCB0aGUgZGU0eDUgY29uZmlndXJhdGlvbiB0dXJuZWQgb2ZmIGFuZCByZWJvb3QuCisgICAgNSkgaW5zbW9kIGRlNHg1IFtpbz0weGdoaF0KKyAgICA2KSBydW4gdGhlIG5ldCBzdGFydHVwIGJpdHMgZm9yIHlvdXIgbmV3IGV0aD8/IGludGVyZmFjZShzKSBtYW51YWxseSAKKyAgICAodXN1YWxseSAvZXRjL3JjLmluZXRbMTJdIGF0IGJvb3QgdGltZSkuIAorICAgIDcpIGVuam95IQorCisgICAgVG8gdW5sb2FkIGEgbW9kdWxlLCB0dXJuIG9mZiB0aGUgYXNzb2NpYXRlZCBpbnRlcmZhY2UocykgCisgICAgJ2lmY29uZmlnIGV0aD8/IGRvd24nIHRoZW4gJ3JtbW9kIGRlNHg1Jy4KKworICAgIEF1dG9tZWRpYSBkZXRlY3Rpb24gaXMgaW5jbHVkZWQgc28gdGhhdCBpbiAgcHJpbmNpcGxlIHlvdSBjYW4gZGlzY29ubmVjdAorICAgIGZyb20sIGUuZy4gIFRQLCByZWNvbm5lY3QgIHRvIEJOQyAgYW5kICB0aGluZ3Mgd2lsbCBzdGlsbCB3b3JrICAoYWZ0ZXIgYQorICAgIHBhdXNlIHdoaWxzdCB0aGUgICBkcml2ZXIgZmlndXJlcyBvdXQgICB3aGVyZSBpdHMgbWVkaWEgd2VudCkuICBNeSB0ZXN0cworICAgIHVzaW5nIHBpbmcgc2hvd2VkIHRoYXQgaXQgYXBwZWFycyB0byB3b3JrLi4uLgorCisgICAgQnkgIGRlZmF1bHQsICB0aGUgZHJpdmVyIHdpbGwgIG5vdyAgIGF1dG9kZXRlY3QgYW55ICBERUNjaGlwIGJhc2VkIGNhcmQuCisgICAgU2hvdWxkIHlvdSBoYXZlIGEgbmVlZCB0byByZXN0cmljdCB0aGUgZHJpdmVyIHRvIERJR0lUQUwgb25seSBjYXJkcywgeW91CisgICAgY2FuIGNvbXBpbGUgd2l0aCBhICBERUNfT05MWSBkZWZpbmUsIG9yIGlmICBsb2FkaW5nIGFzIGEgbW9kdWxlLCB1c2UgdGhlCisgICAgJ2RlY19vbmx5PTEnICBwYXJhbWV0ZXIuIAorCisgICAgSSd2ZSBjaGFuZ2VkIHRoZSB0aW1pbmcgcm91dGluZXMgdG8gIHVzZSB0aGUga2VybmVsIHRpbWVyIGFuZCBzY2hlZHVsaW5nCisgICAgZnVuY3Rpb25zICBzbyB0aGF0IHRoZSAgaGFuZ3MgIGFuZCBvdGhlciBhc3NvcnRlZCBwcm9ibGVtcyB0aGF0IG9jY3VycmVkCisgICAgd2hpbGUgYXV0b3NlbnNpbmcgdGhlICBtZWRpYSAgc2hvdWxkIGJlIGdvbmUuICBBICBib251cyAgZm9yIHRoZSBEQzIxMDQwCisgICAgYXV0byAgbWVkaWEgc2Vuc2UgYWxnb3JpdGhtIGlzICB0aGF0IGl0IGNhbiBub3cgIHVzZSBvbmUgdGhhdCBpcyBtb3JlIGluCisgICAgbGluZSB3aXRoIHRoZSAgcmVzdCAodGhlIERDMjEwNDAgIGNoaXAgZG9lc24ndCAgaGF2ZSBhIGhhcmR3YXJlICB0aW1lcikuCisgICAgVGhlIGRvd25zaWRlIGlzIHRoZSAxICdqaWZmaWVzJyAoMTBtcykgcmVzb2x1dGlvbi4KKworICAgIElFRUUgODAyLjN1IE1JSSBpbnRlcmZhY2UgY29kZSBoYXMgIGJlZW4gYWRkZWQgaW4gYW50aWNpcGF0aW9uIHRoYXQgc29tZQorICAgIHByb2R1Y3RzIG1heSB1c2UgaXQgaW4gdGhlIGZ1dHVyZS4KKworICAgIFRoZSBTTUM5MzMyIGNhcmQgIGhhcyBhIG5vbi1jb21wbGlhbnQgU1JPTSAgd2hpY2ggbmVlZHMgZml4aW5nIC0gIEkgaGF2ZQorICAgIHBhdGNoZWQgdGhpcyAgZHJpdmVyIHRvIGRldGVjdCBpdCAgYmVjYXVzZSB0aGUgU1JPTSBmb3JtYXQgdXNlZCBjb21wbGllcworICAgIHRvIGEgcHJldmlvdXMgREVDLVNURCBmb3JtYXQuCisKKyAgICBJIGhhdmUgcmVtb3ZlZCB0aGUgYnVmZmVyIGNvcGllcyBuZWVkZWQgZm9yIHJlY2VpdmUgb24gSW50ZWxzLiAgSSBjYW5ub3QKKyAgICByZW1vdmUgdGhlbSBmb3IgICBBbHBoYXMgc2luY2UgIHRoZSAgVHVsaXAgaGFyZHdhcmUgICBvbmx5IGRvZXMgbG9uZ3dvcmQKKyAgICBhbGlnbmVkICBETUEgdHJhbnNmZXJzICBhbmQgIHRoZSAgQWxwaGFzIGdldCAgIGFsaWdubWVudCB0cmFwcyB3aXRoICBub24KKyAgICBsb25nd29yZCBhbGlnbmVkIGRhdGEgY29waWVzICh3aGljaCBtYWtlcyB0aGVtIHJlYWxseSBzbG93KS4gTm8gY29tbWVudC4KKworICAgIEkgIGhhdmUgYWRkZWQgU1JPTSBkZWNvZGluZyAgcm91dGluZXMgdG8gbWFrZSB0aGlzICBkcml2ZXIgd29yayB3aXRoIGFueQorICAgIGNhcmQgdGhhdCAgc3VwcG9ydHMgdGhlIERpZ2l0YWwgIFNlbWljb25kdWN0b3IgU1JPTSBzcGVjLiBUaGlzIHdpbGwgaGVscAorICAgIGFsbCAgY2FyZHMgcnVubmluZyB0aGUgZGMyMTE0eCAgc2VyaWVzIGNoaXBzIGluIHBhcnRpY3VsYXIuICBDYXJkcyB1c2luZworICAgIHRoZSBkYzIxMDR4ICBjaGlwcyBzaG91bGQgcnVuIGNvcnJlY3RseSB3aXRoICB0aGUgYmFzaWMgIGRyaXZlci4gIEknbSBpbgorICAgIGRlYnQgdG8gPG1qYWNvYkBmZXJhbC5jb20+IGZvciB0aGUgIHRlc3RpbmcgYW5kIGZlZWRiYWNrIHRoYXQgaGVscGVkIGdldAorICAgIHRoaXMgZmVhdHVyZSB3b3JraW5nLiAgU28gZmFyIHdlIGhhdmUgIHRlc3RlZCBLSU5HU1RPTiwgU01DODQzMiwgU01DOTMzMgorICAgICh3aXRoIHRoZSBsYXRlc3QgU1JPTSBjb21wbHlpbmcgIHdpdGggdGhlIFNST00gc3BlYyAgVjM6IHRoZWlyIGZpcnN0IHdhcworICAgIGJyb2tlbiksIFpOWVgzNDIgIGFuZCAgTGlua1N5cy4gWk5ZWDMxNCAoZHVhbCAgMjEwNDEgIE1BQykgYW5kICBaTllYIDMxNQorICAgIChxdWFkIDIxMDQxIE1BQykgIGNhcmRzIGFsc28gIGFwcGVhciAgdG8gd29yayBkZXNwaXRlIHRoZWlyICBpbmNvcnJlY3RseQorICAgIHdpcmVkIElSUXMuCisKKyAgICBJIGhhdmUgYWRkZWQgYSB0ZW1wb3JhcnkgZml4IGZvciBpbnRlcnJ1cHQgcHJvYmxlbXMgd2hlbiBzb21lIFNDU0kgY2FyZHMKKyAgICBzaGFyZSB0aGUgc2FtZSBpbnRlcnJ1cHQgYXMgdGhlIERFQ2NoaXAgYmFzZWQgIGNhcmRzLiBUaGUgcHJvYmxlbSBvY2N1cnMKKyAgICBiZWNhdXNlICB0aGUgU0NTSSBjYXJkIHdhbnRzIHRvICBncmFiIHRoZSBpbnRlcnJ1cHQgIGFzIGEgZmFzdCBpbnRlcnJ1cHQKKyAgICAocnVucyB0aGUgICBzZXJ2aWNlIHJvdXRpbmUgd2l0aCBpbnRlcnJ1cHRzIHR1cm5lZCAgIG9mZikgdnMuICB0aGlzIGNhcmQKKyAgICB3aGljaCByZWFsbHkgbmVlZHMgdG8gcnVuIHRoZSBzZXJ2aWNlIHJvdXRpbmUgd2l0aCBpbnRlcnJ1cHRzIHR1cm5lZCBvbi4KKyAgICBUaGlzIGRyaXZlciB3aWxsICBub3cgICBhZGQgdGhlIGludGVycnVwdCBzZXJ2aWNlICAgcm91dGluZSAgYXMgIGEgIGZhc3QKKyAgICBpbnRlcnJ1cHQgaWYgaXQgICBpcyBib3VuY2VkIGZyb20gdGhlICAgc2xvdyBpbnRlcnJ1cHQuICBUSElTIElTIE5PVCAgIEEKKyAgICBSRUNPTU1FTkRFRCBXQVkgVE8gUlVOIFRIRSBEUklWRVIgIGFuZCBoYXMgYmVlbiBkb25lICBmb3IgYSBsaW1pdGVkIHRpbWUKKyAgICB1bnRpbCAgcGVvcGxlICAgc29ydCAgb3V0IHRoZWlyICBjb21wYXRpYmlsaXR5ICAgIGlzc3VlcyBhbmQgdGhlICBrZXJuZWwKKyAgICBpbnRlcnJ1cHQgIHNlcnZpY2UgY29kZSAgaXMgIGZpeGVkLiAgIFlPVSAgU0hPVUxEIFNFUEFSQVRFIE9VVCAgVEhFIEZBU1QKKyAgICBJTlRFUlJVUFQgQ0FSRFMgRlJPTSBUSEUgU0xPVyBJTlRFUlJVUFQgQ0FSRFMgdG8gZW5zdXJlIHRoYXQgdGhleSBkbyBub3QKKyAgICBydW4gb24gdGhlIHNhbWUgaW50ZXJydXB0LiBQQ01DSUEvQ2FyZEJ1cyBpcyBhbm90aGVyIGNhbiBvZiB3b3Jtcy4uLgorCisgICAgRmluYWxseSwgSSB0aGluayAgSSBoYXZlIHJlYWxseSAgZml4ZWQgIHRoZSBtb2R1bGUgIGxvYWRpbmcgcHJvYmxlbSB3aXRoCisgICAgbW9yZSB0aGFuIG9uZSBERUNjaGlwIGJhc2VkICBjYXJkLiAgQXMgYSAgc2lkZSBlZmZlY3QsIEkgZG9uJ3QgbWVzcyB3aXRoCisgICAgdGhlICBkZXZpY2Ugc3RydWN0dXJlIGFueSAgbW9yZSB3aGljaCBtZWFucyB0aGF0ICBpZiBtb3JlIHRoYW4gMSBjYXJkIGluCisgICAgMi4wLnggaXMgICAgaW5zdGFsbGVkICg0ICBpbiAgIDIuMS54KSwgIHRoZSAgdXNlciAgIHdpbGwgaGF2ZSAgIHRvICBlZGl0CisgICAgbGludXgvZHJpdmVycy9uZXQvU3BhY2UuYyAgdG8gbWFrZSByb29tIGZvciAgdGhlbS4gSGVuY2UsIG1vZHVsZSBsb2FkaW5nCisgICAgaXMgIHRoZSBwcmVmZXJyZWQgd2F5IHRvIHVzZSAgIHRoaXMgZHJpdmVyLCBzaW5jZSAgaXQgIGRvZXNuJ3QgaGF2ZSB0aGlzCisgICAgbGltaXRhdGlvbi4KKworICAgIFdoZXJlIFNST00gbWVkaWEgIGRldGVjdGlvbiBpcyB1c2VkIGFuZCAgZnVsbCBkdXBsZXggaXMgc3BlY2lmaWVkIGluIHRoZQorICAgIFNST00sICB0aGUgZmVhdHVyZSBpcyAgaWdub3JlZCB1bmxlc3MgIGxwLT5wYXJhbXMuZmR4ICBpcyBzZXQgYXQgY29tcGlsZQorICAgIHRpbWUgIE9SIGR1cmluZyAgYSAgIG1vZHVsZSBsb2FkICAoaW5zbW9kICBkZTR4NSAgIGFyZ3M9J2V0aD8/OmZkeCcgW3NlZQorICAgIGJlbG93XSkuICBUaGlzIGlzIGJlY2F1c2UgdGhlcmUgIGlzIG5vIHdheSAgdG8gYXV0b21hdGljYWxseSBkZXRlY3QgZnVsbAorICAgIGR1cGxleCAgIGxpbmtzICBleGNlcHQgdGhyb3VnaCAgIGF1dG9uZWdvdGlhdGlvbi4gICAgV2hlbiBJICBpbmNsdWRlIHRoZQorICAgIGF1dG9uZWdvdGlhdGlvbiBmZWF0dXJlIGluICB0aGUgU1JPTSBhdXRvY29uZiAgY29kZSwgdGhpcyBkZXRlY3Rpb24gd2lsbAorICAgIG9jY3VyIGF1dG9tYXRpY2FsbHkgZm9yIHRoYXQgY2FzZS4KKworICAgIENvbW1hbmQgbGluZSAgYXJndW1lbnRzIGFyZSAgbm93IGFsbG93ZWQsIHNpbWlsYXIgdG8gIHBhc3NpbmcgIGFyZ3VtZW50cworICAgIHRocm91Z2ggTElMTy4gVGhpcyB3aWxsIGFsbG93IGEgcGVyIGFkYXB0ZXIgYm9hcmQgc2V0ICB1cCBvZiBmdWxsIGR1cGxleAorICAgIGFuZCBtZWRpYS4gVGhlIG9ubHkgbGV4aWNhbCBjb25zdHJhaW50cyBhcmU6ICB0aGUgYm9hcmQgbmFtZSAoZGV2LT5uYW1lKQorICAgIGFwcGVhcnMgaW4gIHRoZSBsaXN0IGJlZm9yZSBpdHMgcGFyYW1ldGVycy4gIFRoZSBsaXN0IG9mIHBhcmFtZXRlcnMgZW5kcworICAgIGVpdGhlciBhdCB0aGUgZW5kIG9mIHRoZSBwYXJhbWV0ZXIgbGlzdCBvciB3aXRoIGFub3RoZXIgYm9hcmQgbmFtZS4gIFRoZQorICAgIGZvbGxvd2luZyBwYXJhbWV0ZXJzIGFyZSBhbGxvd2VkOgorCisgICAgICAgICAgICBmZHggICAgICAgIGZvciBmdWxsIGR1cGxleAorCSAgICBhdXRvc2Vuc2UgIHRvIHNldCB0aGUgbWVkaWEvc3BlZWQ7IHdpdGggdGhlIGZvbGxvd2luZyAKKwkgICAgICAgICAgICAgICBzdWItcGFyYW1ldGVyczoKKwkJICAgICAgIFRQLCBUUF9OVywgQk5DLCBBVUksIEJOQ19BVUksIDEwME1iLCAxME1iLCBBVVRPCisKKyAgICBDYXNlIHNlbnNpdGl2aXR5IGlzIGltcG9ydGFudCAgZm9yICB0aGUgc3ViLXBhcmFtZXRlcnMuIFRoZXkgKm11c3QqICAgYmUKKyAgICB1cHBlciBjYXNlLiBFeGFtcGxlczoKKworICAgICAgICBpbnNtb2QgZGU0eDUgYXJncz0nZXRoMTpmZHggYXV0b3NlbnNlPUJOQyBldGgwOmF1dG9zZW5zZT0xMDBNYicuCisKKyAgICBGb3IgYSBjb21waWxlZCBpbiBkcml2ZXIsIGluIGxpbnV4L2RyaXZlcnMvbmV0L0NPTkZJRywgcGxhY2UgZS5nLgorCURFNFg1X09QVFMgPSAtRERFNFg1X1BBUk09JyJldGgwOmZkeCBhdXRvc2Vuc2U9QVVJIGV0aDI6YXV0b3NlbnNlPVRQIicgCisKKyAgICBZZXMsICBJIGtub3cgZnVsbCBkdXBsZXggIGlzbid0IHBlcm1pc3NpYmxlIG9uIEJOQyAgb3IgQVVJOyB0aGV5J3JlIGp1c3QKKyAgICBleGFtcGxlcy4gQnkgZGVmYXVsdCwgZnVsbCBkdXBsZXggaXMgdHVybmVkICBvZmYgYW5kIEFVVE8gaXMgdGhlIGRlZmF1bHQKKyAgICBhdXRvc2Vuc2Ugc2V0dGluZy4gSW4gIHJlYWxpdHksIEkgZXhwZWN0IG9ubHkgdGhlICBmdWxsIGR1cGxleCBvcHRpb24gdG8KKyAgICBiZSB1c2VkLiBOb3RlIHRoZSB1c2Ugb2Ygc2luZ2xlIHF1b3RlcyBpbiB0aGUgdHdvIGV4YW1wbGVzIGFib3ZlIGFuZCB0aGUKKyAgICBsYWNrIG9mIGNvbW1hcyB0byBzZXBhcmF0ZSBpdGVtcy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9kZWNuZXQudHh0IGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2RlY25ldC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzZiZDI1ZgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9kZWNuZXQudHh0CkBAIC0wLDAgKzEsMjM0IEBACisgICAgICAgICAgICAgICAgICAgIExpbnV4IERFQ25ldCBOZXR3b3JraW5nIExheWVyIEluZm9ybWF0aW9uCisgICAgICAgICAgICAgICAgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisxKSBPdGhlciBkb2N1bWVudGF0aW9uLi4uLgorCisgICBvIFByb2plY3QgSG9tZSBQYWdlcworICAgICAgIGh0dHA6Ly93d3cuY2h5Z3d5bi5jb20vREVDbmV0LyAgICAgICAgICAgICAgICAgICAgICAtIEtlcm5lbCBpbmZvCisgICAgICAgaHR0cDovL2xpbnV4LWRlY25ldC5zb3VyY2Vmb3JnZS5uZXQvICAgICAgICAgICAgICAgIC0gVXNlcmxhbmQgdG9vbHMKKyAgICAgICBodHRwOi8vd3d3LnNvdXJjZWZvcmdlLm5ldC9wcm9qZWN0cy9saW51eC1kZWNuZXQvICAgLSBTdGF0dXMgcGFnZQorCisyKSBDb25maWd1cmluZyB0aGUga2VybmVsCisKK0JlIHN1cmUgdG8gdHVybiBvbiB0aGUgZm9sbG93aW5nIG9wdGlvbnM6CisKKyAgICBDT05GSUdfREVDTkVUIChvYnZpb3VzbHkpCisgICAgQ09ORklHX1BST0NfRlMgKHRvIHNlZSB3aGF0J3MgZ29pbmcgb24pCisgICAgQ09ORklHX1NZU0NUTCAoZm9yIGVhc3kgY29uZmlndXJhdGlvbikKKworaWYgeW91IHdhbnQgdG8gdHJ5IG91dCByb3V0ZXIgc3VwcG9ydCAobm90IHByb3Blcmx5IGRlYnVnZ2VkIHlldCkKK3lvdSdsbCBuZWVkIHRoZSBmb2xsb3dpbmcgb3B0aW9ucyBhcyB3ZWxsLi4uCisKKyAgICBDT05GSUdfREVDTkVUX1JPVVRFUiAodG8gYmUgYWJsZSB0byBhZGQvZGVsZXRlIHJvdXRlcykKKyAgICBDT05GSUdfTkVURklMVEVSICh3aWxsIGJlIHJlcXVpcmVkIGZvciB0aGUgREVDbmV0IHJvdXRpbmcgZGFlbW9uKQorCisgICAgQ09ORklHX0RFQ05FVF9ST1VURV9GV01BUksgaXMgb3B0aW9uYWwKKworRG9uJ3QgdHVybiBvbiBTSU9DR0lGQ09ORiBzdXBwb3J0IGZvciBERUNuZXQgdW5sZXNzIHlvdSBhcmUgcmVhbGx5IHN1cmUKK3RoYXQgeW91IG5lZWQgaXQsIGluIGdlbmVyYWwgeW91IHdvbid0IGFuZCBpdCBjYW4gY2F1c2UgaWZjb25maWcgdG8KK21hbGZ1bmN0aW9uLgorCitSdW4gdGltZSBjb25maWd1cmF0aW9uIGhhcyBjaGFuZ2VkIHNsaWdodGx5IGZyb20gdGhlIDIuNCBzeXN0ZW0uIElmIHlvdQord2FudCB0byBjb25maWd1cmUgYW4gZW5kbm9kZSwgdGhlbiB0aGUgc2ltcGxpZmllZCBwcm9jZWR1cmUgaXMgYXMgZm9sbG93czoKKworIG8gU2V0IHRoZSBNQUMgYWRkcmVzcyBvbiB5b3VyIGV0aGVybmV0IGNhcmQgYmVmb3JlIHN0YXJ0aW5nIF9hbnlfIG90aGVyCisgICBuZXR3b3JrIHByb3RvY29scy4KKworQXMgc29vbiBhcyB5b3VyIG5ldHdvcmsgY2FyZCBpcyBicm91Z2h0IGludG8gdGhlIFVQIHN0YXRlLCBERUNuZXQgc2hvdWxkCitzdGFydCB3b3JraW5nLiBJZiB5b3UgbmVlZCBzb21ldGhpbmcgbW9yZSBjb21wbGljYXRlZCBvciBhcmUgdW5zdXJlIGhvdwordG8gc2V0IHRoZSBNQUMgYWRkcmVzcywgc2VlIHRoZSBuZXh0IHNlY3Rpb24uIEFsc28gYWxsIGNvbmZpZ3VyYXRpb25zIHdoaWNoCit3b3JrZWQgd2l0aCAyLjQgd2lsbCB3b3JrIHVuZGVyIDIuNSB3aXRoIG5vIGNoYW5nZS4KKworMykgQ29tbWFuZCBsaW5lIG9wdGlvbnMKKworWW91IGNhbiBzZXQgYSBERUNuZXQgYWRkcmVzcyBvbiB0aGUga2VybmVsIGNvbW1hbmQgbGluZSBmb3IgY29tcGF0aWJpbGl0eQord2l0aCB0aGUgMi40IGNvbmZpZ3VyYXRpb24gcHJvY2VkdXJlLCBidXQgaW4gZ2VuZXJhbCBpdCdzIG5vdCBuZWVkZWQgYW55IG1vcmUuCitJZiB5b3UgZG8gc3QgYSBERUNuZXQgYWRkcmVzcyBvbiB0aGUgY29tbWFuZCBsaW5lLCBpdCBoYXMgb25seSBvbmUgcHVycG9zZQord2hpY2ggaXMgdGhhdCBpdHMgYWRkZWQgdG8gdGhlIGFkZHJlc3NlcyBvbiB0aGUgbG9vcGJhY2sgZGV2aWNlLgorCitXaXRoIDIuNCBrZXJuZWxzLCBERUNuZXQgd291bGQgb25seSByZWNvZ25pc2UgYWRkcmVzc2VzIGFzIGxvY2FsIGlmIHRoZXkKK3dlcmUgYWRkZWQgdG8gdGhlIGxvb3BiYWNrIGRldmljZS4gSW4gMi41LCBhbnkgbG9jYWwgaW50ZXJmYWNlIGFkZHJlc3MKK2NhbiBiZSB1c2VkIHRvIGxvb3AgYmFjayB0byB0aGUgbG9jYWwgbWFjaGluZS4gT2YgY291cnNlIHRoaXMgZG9lcyBub3QKK3ByZXZlbnQgeW91IGFkZGluZyBmdXJ0aGVyIGFkZHJlc3NlcyB0byB0aGUgbG9vcGJhY2sgZGV2aWNlIGlmIHlvdQord2FudCB0by4KKworTi5CLiBTaW5jZSB0aGUgYWRkcmVzcyBsaXN0IG9mIGFuIGludGVyZmFjZSBkZXRlcm1pbmVzIHRoZSBhZGRyZXNzZXMgZm9yCit3aGljaCAiaGVsbG8iIG1lc3NhZ2VzIGFyZSBzZW50LCBpZiB5b3UgZG9uJ3Qgc2V0IGFuIGFkZHJlc3Mgb24gdGhlIGxvb3BiYWNrCitpbnRlcmZhY2UgdGhlbiB5b3Ugd29uJ3Qgc2VlIGFueSBlbnRyaWVzIGluIC9wcm9jL25ldC9uZWlnaCBmb3IgdGhlIGxvY2FsCitob3N0IHVudGlsIHN1Y2ggdGltZSBhcyB5b3Ugc3RhcnQgYSBjb25uZWN0aW9uLiBUaGlzIGRvZXNuJ3QgYWZmZWN0IHRoZQorb3BlcmF0aW9uIG9mIHRoZSBsb2NhbCBjb21tdW5pY2F0aW9ucyBpbiBhbnkgb3RoZXIgd2F5IHRob3VnaC4KKworVGhlIGtlcm5lbCBjb21tYW5kIGxpbmUgdGFrZXMgb3B0aW9ucyBsb29raW5nIGxpa2UgdGhlIGZvbGxvd2luZzoKKworICAgIGRlY25ldD0xLDIKKwordGhlIHR3byBudW1iZXJzIGFyZSB0aGUgbm9kZSBhZGRyZXNzIDEsMiA9IDEuMiBGb3IgMi4yLnh4IGtlcm5lbHMKK2FuZCBlYXJseSAyLjMueHgga2VybmVscywgeW91IG11c3QgdXNlIGEgY29tbWEgd2hlbiBzcGVjaWZ5aW5nIHRoZQorREVDbmV0IGFkZHJlc3MgbGlrZSB0aGlzLiBGb3IgbW9yZSByZWNlbnQgMi4zLnh4IGtlcm5lbHMsIHlvdSBtYXkKK3VzZSBhbG1vc3QgYW55IGNoYXJhY3RlciBleGNlcHQgc3BhY2UsIGFsdGhvdWdoIGEgYC5gIHdvdWxkIGJlIHRoZSBtb3N0CitvYnZpb3VzIGNob2ljZSA6LSkKKworVGhlcmUgdXNlZCB0byBiZSBhIHRoaXJkIG51bWJlciBzcGVjaWZ5aW5nIHRoZSBub2RlIHR5cGUuIFRoaXMgb3B0aW9uCitoYXMgZ29uZSBhd2F5IGluIGZhdm91ciBvZiBhIHBlciBpbnRlcmZhY2Ugbm9kZSB0eXBlLiBUaGlzIGlzIG5vdyBzZXQKK3VzaW5nIC9wcm9jL3N5cy9uZXQvZGVjbmV0L2NvbmYvPGRldj4vZm9yd2FyZGluZy4gVGhpcyBmaWxlIGNhbiBiZQorc2V0IHdpdGggYSBzaW5nbGUgZGlnaXQsIDA9RW5kTm9kZSwgMT1MMSBSb3V0ZXIgYW5kICAyPUwyIFJvdXRlci4KKworVGhlcmUgYXJlIGFsc28gZXF1aXZhbGVudCBvcHRpb25zIGZvciBtb2R1bGVzLiBUaGUgbm9kZSBhZGRyZXNzIGNhbgorYWxzbyBiZSBzZXQgdGhyb3VnaCB0aGUgL3Byb2Mvc3lzL25ldC9kZWNuZXQvIGZpbGVzLCBhcyBjYW4gb3RoZXIgc3lzdGVtCitwYXJhbWV0ZXJzLgorCitDdXJyZW50bHkgdGhlIG9ubHkgc3VwcG9ydGVkIGRldmljZXMgYXJlIGV0aGVybmV0IGFuZCBpcF9ncmUuIFRoZQorZXRoZXJuZXQgYWRkcmVzcyBvZiB5b3VyIGV0aGVybmV0IGNhcmQgaGFzIHRvIGJlIHNldCBhY2NvcmRpbmcgdG8gdGhlIERFQ25ldAorYWRkcmVzcyBvZiB0aGUgbm9kZSBpbiBvcmRlciBmb3IgaXQgdG8gYmUgYXV0b2NvbmZpZ3VyZWQgKGFuZCB0aGVuIGFwcGVhciBpbgorL3Byb2MvbmV0L2RlY25ldF9kZXYpLiBUaGVyZSBpcyBhIHV0aWxpdHkgYXZhaWxhYmxlIGF0IHRoZSBhYm92ZQorRlRQIHNpdGVzIGNhbGxlZCBkbjJldGhhZGRyIHdoaWNoIGNhbiBjb21wdXRlIHRoZSBjb3JyZWN0IGV0aGVybmV0CithZGRyZXNzIHRvIHVzZS4gVGhlIGFkZHJlc3MgY2FuIGJlIHNldCBieSBpZmNvbmZpZyBlaXRoZXIgYmVmb3JlIGF0CithdCB0aGUgdGltZSB0aGUgZGV2aWNlIGlzIGJyb3VnaHQgdXAuIElmIHlvdSBhcmUgdXNpbmcgUmVkSGF0IHlvdSBjYW4KK2FkZCB0aGUgbGluZToKKworICAgIE1BQ0FERFI9QUE6MDA6MDQ6MDA6MDM6MDQKKworb3Igc29tZXRoaW5nIHNpbWlsYXIsIHRvIC9ldGMvc3lzY29uZmlnL25ldHdvcmstc2NyaXB0cy9pZmNmZy1ldGgwIG9yCit3aGVyZXZlciB5b3VyIG5ldHdvcmsgY2FyZCdzIGNvbmZpZ3VyYXRpb24gbGl2ZXMuIFNldHRpbmcgdGhlIE1BQyBhZGRyZXNzCitvZiB5b3VyIGV0aGVybmV0IGNhcmQgdG8gYW4gYWRkcmVzcyBzdGFydGluZyB3aXRoICJoaS1vcmQiIHdpbGwgY2F1c2UgYQorREVDbmV0IGFkZHJlc3Mgd2hpY2ggbWF0Y2hlcyB0byBiZSBhZGRlZCB0byB0aGUgaW50ZXJmYWNlICh3aGljaCB5b3UgY2FuCit2ZXJpZnkgd2l0aCBpcHJvdXRlMikuCisKK1RoZSBkZWZhdWx0IGRldmljZSBmb3Igcm91dGluZyBjYW4gYmUgc2V0IHRocm91Z2ggdGhlIC9wcm9jIGZpbGVzeXN0ZW0KK2J5IHNldHRpbmcgL3Byb2Mvc3lzL25ldC9kZWNuZXQvZGVmYXVsdF9kZXZpY2UgdG8gdGhlCitkZXZpY2UgeW91IHdhbnQgREVDbmV0IHRvIHJvdXRlIHBhY2tldHMgb3V0IG9mIHdoZW4gbm8gc3BlY2lmaWMgcm91dGUKK2lzIGF2YWlsYWJsZS4gVXN1YWxseSB0aGlzIHdpbGwgYmUgZXRoMCwgZm9yIGV4YW1wbGU6CisKKyAgICBlY2hvIC1uICJldGgwIiA+L3Byb2Mvc3lzL25ldC9kZWNuZXQvZGVmYXVsdF9kZXZpY2UKKworSWYgeW91IGRvbid0IHNldCB0aGUgZGVmYXVsdCBkZXZpY2UsIHRoZW4gaXQgd2lsbCBkZWZhdWx0IHRvIHRoZSBmaXJzdAorZXRoZXJuZXQgY2FyZCB3aGljaCBoYXMgYmVlbiBhdXRvY29uZmlndXJlZCBhcyBkZXNjcmliZWQgYWJvdmUuIFlvdSBjYW4KK2NvbmZpcm0gdGhhdCBieSBsb29raW5nIGluIHRoZSBkZWZhdWx0X2RldmljZSBmaWxlIG9mIGNvdXJzZS4KKworVGhlcmUgaXMgYSBsaXN0IG9mIHdoYXQgdGhlIG90aGVyIGZpbGVzIHVuZGVyIC9wcm9jL3N5cy9uZXQvZGVjbmV0LyBkbworb24gdGhlIGtlcm5lbCBwYXRjaCB3ZWIgc2l0ZSAoc2hvd24gYWJvdmUpLgorCis0KSBSdW4gdGltZSBrZXJuZWwgY29uZmlndXJhdGlvbgorCitUaGlzIGlzIGVpdGhlciBkb25lIHRocm91Z2ggdGhlIHN5c2N0bC9wcm9jIGludGVyZmFjZSAoc2VlIHRoZSBrZXJuZWwgd2ViCitwYWdlcyBmb3IgZGV0YWlscyBvbiB3aGF0IHRoZSB2YXJpb3VzIG9wdGlvbnMgZG8pIG9yIHRocm91Z2ggdGhlIGlwcm91dGUyCitwYWNrYWdlIGluIHRoZSBzYW1lIHdheSBhcyBJUHY0LzYgY29uZmlndXJhdGlvbiBpcyBwZXJmb3JtZWQuCisKK0RvY3VtZW50YXRpb24gZm9yIGlwcm91dGUyIGlzIGluY2x1ZGVkIHdpdGggdGhlIHBhY2thZ2UsIGFsdGhvdWdoIHRoZXJlIGlzCithcyB5ZXQgbm8gc3BlY2lmaWMgc2VjdGlvbiBvbiBERUNuZXQsIG1vc3Qgb2YgdGhlIGZlYXR1cmVzIGFwcGx5IHRvIGJvdGgKK0lQIGFuZCBERUNuZXQsIGFsYmVpdCB3aXRoIERFQ25ldCBhZGRyZXNzZXMgaW5zdGVhZCBvZiBJUCBhZGRyZXNzZXMgYW5kCithIHJlZHVjZWQgZnVuY3Rpb25hbGl0eS4KKworSWYgeW91IHdhbnQgdG8gY29uZmlndXJlIGEgREVDbmV0IHJvdXRlciB5b3UnbGwgbmVlZCB0aGUgaXByb3V0ZTIgcGFja2FnZQorc2luY2UgaXRzIHRoZSBfb25seV8gd2F5IHRvIGFkZCBhbmQgZGVsZXRlIHJvdXRlcyBjdXJyZW50bHkuIEV2ZW50dWFsbHkKK3RoZXJlIHdpbGwgYmUgYSByb3V0aW5nIGRhZW1vbiB0byBzZW5kIGFuZCByZWNlaXZlIHJvdXRpbmcgbWVzc2FnZXMgZm9yCitlYWNoIGludGVyZmFjZSBhbmQgdXBkYXRlIHRoZSBrZXJuZWwgcm91dGluZyB0YWJsZXMgYWNjb3JkaW5nbHkuIFRoZQorcm91dGluZyBkYWVtb24gd2lsbCB1c2UgbmV0ZmlsdGVyIHRvIGxpc3RlbiB0byByb3V0aW5nIHBhY2tldHMsIGFuZAorcnRuZXRsaW5rIHRvIHVwZGF0ZSB0aGUga2VybmVscyByb3V0aW5nIHRhYmxlcy4gCisKK1RoZSBERUNuZXQgcmF3IHNvY2tldCBsYXllciBoYXMgYmVlbiByZW1vdmVkIHNpbmNlIGl0IHdhcyB0aGVyZSBwdXJlbHkKK2ZvciB1c2UgYnkgdGhlIHJvdXRpbmcgZGFlbW9uIHdoaWNoIHdpbGwgbm93IHVzZSBuZXRmaWx0ZXIgKGEgbXVjaCBjbGVhbmVyCithbmQgbW9yZSBnZW5lcmljIHNvbHV0aW9uKSBpbnN0ZWFkLgorCis1KSBIb3cgY2FuIEkgdGVsbCBpZiBpdHMgd29ya2luZyA/CisKK0hlcmUgaXMgYSBxdWljayBndWlkZSBvZiB3aGF0IHRvIGxvb2sgZm9yIGluIG9yZGVyIHRvIGtub3cgaWYgeW91ciBERUNuZXQKK2tlcm5lbCBzdWJzeXN0ZW0gaXMgd29ya2luZy4KKworICAgLSBJcyB0aGUgbm9kZSBhZGRyZXNzIHNldCAoc2VlIC9wcm9jL3N5cy9uZXQvZGVjbmV0L25vZGVfYWRkcmVzcykKKyAgIC0gSXMgdGhlIG5vZGUgb2YgdGhlIGNvcnJlY3QgdHlwZSAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHNlZSAvcHJvYy9zeXMvbmV0L2RlY25ldC9jb25mLzxkZXY+L2ZvcndhcmRpbmcpCisgICAtIElzIHRoZSBFdGhlcm5ldCBNQUMgYWRkcmVzcyBvZiBlYWNoIEV0aGVybmV0IGNhcmQgc2V0IHRvIG1hdGNoCisgICAgIHRoZSBERUNuZXQgYWRkcmVzcy4gSWYgaW4gZG91YnQgdXNlIHRoZSBkbjJldGhhZGRyIHV0aWxpdHkgYXZhaWxhYmxlCisgICAgIGF0IHRoZSBmdHAgYXJjaGl2ZS4KKyAgIC0gSWYgdGhlIHByZXZpb3VzIHR3byBzdGVwcyBhcmUgc2F0aXNmaWVkLCBhbmQgdGhlIEV0aGVybmV0IGNhcmQgaXMgdXAsCisgICAgIHlvdSBzaG91bGQgZmluZCB0aGF0IGl0IGlzIGxpc3RlZCBpbiAvcHJvYy9uZXQvZGVjbmV0X2RldiBhbmQgYWxzbworICAgICB0aGF0IGl0IGFwcGVhcnMgYXMgYSBkaXJlY3RvcnkgaW4gL3Byb2Mvc3lzL25ldC9kZWNuZXQvY29uZi8uIFRoZQorICAgICBsb29wYmFjayBkZXZpY2UgKGxvKSBzaG91bGQgYWxzbyBhcHBlYXIgYW5kIGlzIHJlcXVpcmVkIHRvIGNvbW11bmljYXRlCisgICAgIHdpdGhpbiBhIG5vZGUuCisgICAtIElmIHlvdSBoYXZlIGFueSBERUNuZXQgcm91dGVycyBvbiB5b3VyIG5ldHdvcmssIHRoZXkgc2hvdWxkIGFwcGVhcgorICAgICBpbiAvcHJvYy9uZXQvZGVjbmV0X25laWdoLCBvdGhlcndpc2UgdGhpcyBmaWxlIHdpbGwgb25seSBjb250YWluIHRoZQorICAgICBlbnRyeSBmb3IgdGhlIG5vZGUgaXRzZWxmIChpZiBpdCBkb2Vzbid0IGNoZWNrIHRvIHNlZSBpZiBsbyBpcyB1cCkuCisgICAtIElmIHlvdSB3YW50IHRvIHNlbmQgdG8gYW55IG5vZGUgd2hpY2ggaXMgbm90IGxpc3RlZCBpbiB0aGUKKyAgICAgL3Byb2MvbmV0L2RlY25ldF9uZWlnaCBmaWxlLCB5b3UnbGwgbmVlZCB0byBzZXQgdGhlIGRlZmF1bHQgZGV2aWNlCisgICAgIHRvIHBvaW50IHRvIGFuIEV0aGVybmV0IGNhcmQgd2l0aCBjb25uZWN0aW9uIHRvIGEgcm91dGVyLiBUaGlzIGlzCisgICAgIGFnYWluIGRvbmUgd2l0aCB0aGUgL3Byb2Mvc3lzL25ldC9kZWNuZXQvZGVmYXVsdF9kZXZpY2UgZmlsZS4KKyAgIC0gVHJ5IHN0YXJ0aW5nIGEgc2ltcGxlIHNlcnZlciBhbmQgY2xpZW50LCBsaWtlIHRoZSBkbnBpbmcvZG5taXJyb3IKKyAgICAgb3ZlciB0aGUgbG9vcGJhY2sgaW50ZXJmYWNlLiBXaXRoIGx1Y2sgdGhleSBzaG91bGQgY29tbXVuaWNhdGUuCisgICAgIEZvciB0aGlzIHN0ZXAgYW5kIHRob3NlIGFmdGVyLCB5b3UnbGwgbmVlZCB0aGUgREVDbmV0IGxpYnJhcnkKKyAgICAgd2hpY2ggY2FuIGJlIG9idGFpbmVkIGZyb20gdGhlIGFib3ZlIGZ0cCBzaXRlcyBhcyB3ZWxsIGFzIHRoZQorICAgICBhY3R1YWwgdXRpbGl0aWVzIHRoZW1zZWx2ZXMuCisgICAtIElmIHRoaXMgc2VlbXMgdG8gd29yaywgdGhlbiB0cnkgdGFsa2luZyB0byBhIG5vZGUgb24geW91ciBsb2NhbAorICAgICBuZXR3b3JrLCBhbmQgc2VlIGlmIHlvdSBjYW4gb2J0YWluIHRoZSBzYW1lIHJlc3VsdHMuCisgICAtIEF0IHRoaXMgcG9pbnQgeW91IGFyZSBvbiB5b3VyIG93bi4uLiA6LSkKKworNikgSG93IHRvIHNlbmQgYSBidWcgcmVwb3J0CisKK0lmIHlvdSd2ZSBmb3VuZCBhIGJ1ZyBhbmQgd2FudCB0byByZXBvcnQgaXQsIHRoZW4gdGhlcmUgYXJlIHNldmVyYWwgdGhpbmdzCit5b3UgY2FuIGRvIHRvIGhlbHAgbWUgd29yayBvdXQgZXhhY3RseSB3aGF0IGl0IGlzIHRoYXQgaXMgd3JvbmcuIFVzZWZ1bAoraW5mb3JtYXRpb24gKF9tb3N0XyBvZiB3aGljaCBfaXNfIF9lc3NlbnRpYWxfKSBpbmNsdWRlczoKKworIC0gV2hhdCBrZXJuZWwgdmVyc2lvbiBhcmUgeW91IHJ1bm5pbmcgPworIC0gV2hhdCB2ZXJzaW9uIG9mIHRoZSBwYXRjaCBhcmUgeW91IHJ1bm5pbmcgPworIC0gSG93IGZhciB0aG91Z2ggdGhlIGFib3ZlIHNldCBvZiB0ZXN0cyBjYW4geW91IGdldCA/CisgLSBXaGF0IGlzIGluIHRoZSAvcHJvYy9kZWNuZXQqIGZpbGVzIGFuZCAvcHJvYy9zeXMvbmV0L2RlY25ldC8qIGZpbGVzID8KKyAtIFdoaWNoIHNlcnZpY2VzIGFyZSB5b3UgcnVubmluZyA/CisgLSBXaGljaCBjbGllbnQgY2F1c2VkIHRoZSBwcm9ibGVtID8KKyAtIEhvdyBtdWNoIGRhdGEgd2FzIGJlaW5nIHRyYW5zZmVycmVkID8KKyAtIFdhcyB0aGUgbmV0d29yayBjb25nZXN0ZWQgPworIC0gSWYgdGhlcmUgd2FzIGEga2VybmVsIHBhbmljLCBwbGVhc2UgcnVuIHRoZSBvdXRwdXQgdGhyb3VnaCBrc3ltb29wcworICAgYmVmb3JlIHNlbmRpbmcgaXQgdG8gbWUsIG90aGVyd2lzZSBpdHMgX3VzZWxlc3NfLgorIC0gSG93IGNhbiB0aGUgcHJvYmxlbSBiZSByZXByb2R1Y2VkID8KKyAtIENhbiB5b3UgdXNlIHRjcGR1bXAgdG8gZ2V0IGEgdHJhY2UgPyAoTi5CLiBNb3N0IChhbGw/KSB2ZXJzaW9ucyBvZiAKKyAgIHRjcGR1bXAgZG9uJ3QgdW5kZXJzdGFuZCBob3cgdG8gZHVtcCBERUNuZXQgcHJvcGVybHksIHNvIGluY2x1ZGluZworICAgdGhlIGhleCBsaXN0aW5nIG9mIHRoZSBwYWNrZXQgY29udGVudHMgaXMgX2Vzc2VudGlhbF8sIHVzdWFsbHkgdGhlIC14IGZsYWcuCisgICBZb3UgbWF5IGFsc28gbmVlZCB0byBpbmNyZWFzZSB0aGUgbGVuZ3RoIGdyYWJiZWQgd2l0aCB0aGUgLXMgZmxhZy4gVGhlCisgICAtZSBmbGFnIGFsc28gcHJvdmlkZXMgdmVyeSB1c2VmdWwgaW5mb3JtYXRpb24gKGV0aGVybmV0IE1BQyBhZGRyZXNzZXMpKQorCis3KSBNQUMgRkFRCisKK0EgcXVpY2sgRkFRIG9uIGV0aGVybmV0IE1BQyBhZGRyZXNzZXMgdG8gZXhwbGFpbiBob3cgTGludXggYW5kIERFQ25ldAoraW50ZXJhY3QgYW5kIGhvdyB0byBnZXQgdGhlIGJlc3QgcGVyZm9ybWFuY2UgZnJvbSB5b3VyIGhhcmR3YXJlLiAKKworRXRoZXJuZXQgY2FyZHMgYXJlIGRlc2lnbmVkIHRvIG5vcm1hbGx5IG9ubHkgcGFzcyByZWNlaXZlZCBuZXR3b3JrIGZyYW1lcyAKK3RvIGEgaG9zdCBjb21wdXRlciB3aGVuIHRoZXkgYXJlIGFkZHJlc3NlZCB0byBpdCwgb3IgdG8gdGhlIGJyb2FkY2FzdCBhZGRyZXNzLgorCitMaW51eCBoYXMgYW4gaW50ZXJmYWNlIHdoaWNoIGFsbG93cyB0aGUgc2V0dGluZyBvZiBleHRyYSBhZGRyZXNzZXMgZm9yCithbiBldGhlcm5ldCBjYXJkIHRvIGxpc3RlbiB0by4gSWYgdGhlIGV0aGVybmV0IGNhcmQgc3VwcG9ydHMgaXQsIHRoZQorZmlsdGVyaW5nIG9wZXJhdGlvbiB3aWxsIGJlIGRvbmUgaW4gaGFyZHdhcmUsIGlmIG5vdCB0aGUgZXh0cmEgdW53YW50ZWQgcGFja2V0cworcmVjZWl2ZWQgd2lsbCBiZSBkaXNjYXJkZWQgYnkgdGhlIGhvc3QgY29tcHV0ZXIuIEluIHRoZSBsYXR0ZXIgY2FzZSwKK3NpZ25pZmljYW50IHByb2Nlc3NvciB0aW1lIGFuZCBidXMgYmFuZHdpZHRoIGNhbiBiZSB1c2VkIHVwIG9uIGEgYnVzeQorbmV0d29yayAoc2VlIHRoZSBOQVBJIGRvY3VtZW50YXRpb24gZm9yIGEgbG9uZ2VyIGV4cGxhbmF0aW9uIG9mIHRoZXNlCitlZmZlY3RzKS4KKworREVDbmV0IG1ha2VzIHVzZSBvZiB0aGlzIGludGVyZmFjZSB0byBhbGxvdyBydW5uaW5nIERFQ25ldCBvbiBhbiBldGhlcm5ldCAKK2NhcmQgd2hpY2ggaGFzIGFscmVhZHkgYmVlbiBjb25maWd1cmVkIHVzaW5nIFRDUC9JUCAocHJlc3VtYWJseSB1c2luZyB0aGUgCitidWlsdCBpbiBNQUMgYWRkcmVzcyBvZiB0aGUgY2FyZCwgYXMgdXN1YWwpIGFuZC9vciB0byBhbGxvdyBtdWx0aXBsZSBERUNuZXQKK2FkZHJlc3NlcyBvbiBlYWNoIHBoeXNpY2FsIGludGVyZmFjZS4gSWYgeW91IGRvIHRoaXMsIGJlIGF3YXJlIHRoYXQgaWYgeW91cgorZXRoZXJuZXQgY2FyZCBkb2Vzbid0IHN1cHBvcnQgcGVyZmVjdCBoYXNoaW5nIGluIGl0cyBNQUMgYWRkcmVzcyBmaWx0ZXIKK3RoZW4geW91ciBjb21wdXRlciB3aWxsIGJlIGRvaW5nIG1vcmUgd29yayB0aGFuIHJlcXVpcmVkLiBTb21lIGNhcmRzCit3aWxsIHNpbXBseSBzZXQgdGhlbXNlbHZlcyBpbnRvIHByb21pc2N1b3VzIG1vZGUgaW4gb3JkZXIgdG8gcmVjZWl2ZQorcGFja2V0cyBmcm9tIHRoZSBERUNuZXQgc3BlY2lmaWVkIGFkZHJlc3Nlcy4gU28gaWYgeW91IGhhdmUgb25lIG9mIHRoZXNlCitjYXJkcyBpdHMgYmV0dGVyIHRvIHNldCB0aGUgTUFDIGFkZHJlc3Mgb2YgdGhlIGNhcmQgYXMgZGVzY3JpYmVkIGFib3ZlCit0byBnYWluIHRoZSBiZXN0IGVmZmljaWVuY3kuIEJldHRlciBzdGlsbCBpcyB0byB1c2UgYSBjYXJkIHdoaWNoIHN1cHBvcnRzCitOQVBJIGFzIHdlbGwuCisKKworOCkgTWFpbGluZyBsaXN0CisKK0lmIHlvdSBhcmUga2VlbiB0byBnZXQgaW52b2x2ZWQgaW4gZGV2ZWxvcG1lbnQsIG9yIHdhbnQgdG8gYXNrIHF1ZXN0aW9ucworYWJvdXQgY29uZmlndXJhdGlvbiwgb3IgZXZlbiBqdXN0IHJlcG9ydCBidWdzLCB0aGVuIHRoZXJlIGlzIGEgbWFpbGluZworbGlzdCB0aGF0IHlvdSBjYW4gam9pbiwgZGV0YWlscyBhcmUgYXQ6CisKK2h0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvbWFpbC8/Z3JvdXBfaWQ9NDk5MworCis5KSBMZWdhbCBJbmZvCisKK1RoZSBMaW51eCBERUNuZXQgcHJvamVjdCB0ZWFtIGhhdmUgcGxhY2VkIHRoZWlyIGNvZGUgdW5kZXIgdGhlIEdQTC4gVGhlCitzb2Z0d2FyZSBpcyBwcm92aWRlZCAiYXMgaXMiIGFuZCB3aXRob3V0IHdhcnJhbnR5IGV4cHJlc3Mgb3IgaW1wbGllZC4KK0RFQ25ldCBpcyBhIHRyYWRlbWFyayBvZiBDb21wYXEuIFRoaXMgc29mdHdhcmUgaXMgbm90IGEgcHJvZHVjdCBvZgorQ29tcGFxLiBXZSBhY2tub3dsZWRnZSB0aGUgaGVscCBvZiBwZW9wbGUgYXQgQ29tcGFxIGluIHByb3ZpZGluZyBleHRyYQorZG9jdW1lbnRhdGlvbiBhYm92ZSBhbmQgYmV5b25kIHdoYXQgd2FzIHByZXZpb3VzbHkgcHVibGljbHkgYXZhaWxhYmxlLgorCitTdGV2ZSBXaGl0ZWhvdXNlIDxTdGV2ZVdAQUNNLm9yZz4KKwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2RlcGNhLnR4dCBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9kZXBjYS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjRjNmIyNgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9kZXBjYS50eHQKQEAgLTAsMCArMSw5MiBAQAorCitERTEweAorPT09PT0KKworTWVtb3J5IEFkZHJlc3NlczoKKworCVNXMQlTVzIJU1czCVNXNAorNjRLCW9uCW9uCW9uCW9uCWQwMDAwCWRiZmZmCisJb2ZmCW9uCW9uCW9uCWMwMDAwCWNiZmZmCisJb2ZmCW9mZglvbglvbgllMDAwMAllYmZmZgorCiszMksJb24Jb24Jb2ZmCW9uCWQ4MDAwCWRiZmZmCisJb2ZmCW9uCW9mZglvbgljODAwMAljYmZmZgorCW9mZglvZmYJb2ZmCW9uCWU4MDAwCWViZmZmCisKK0RCUiBST00Jb24Jb24JCQlkYzAwMAlkZmZmZgorCW9mZglvbgkJCWNjMDAwCWNmZmZmCisJb2ZmCW9mZgkJCWVjMDAwCWVmZmZmCisKK05vdGUgIHRoYXQgdGhlIDJLICBtb2RlICAgaXMgc2V0ICBieSAgIFNXMy9TVzQgIG9uL29mZiBvciAgb2ZmL29mZi4gIEFkZHJlc3MKK2Fzc2lnbm1lbnQgaXMgdGhyb3VnaCB0aGUgUkJTQSByZWdpc3Rlci4KKworSS9PIEFkZHJlc3M6CisJU1c1CisweDMwMAlvbgorMHgyMDAJb2ZmCisKK1JlbW90ZSBCb290OgorCVNXNgorRGlzYWJsZQlvbgorRW5hYmxlCW9mZgorCitSZW1vdGUgQm9vdCBUaW1lb3V0OgorCVNXNworMi41bWluCW9uCiszMHMJb2ZmCisKK0lSUToKKwlTVzgJU1c5CVNXMTAJU1cxMQlTVzEyCisyCW9uCW9mZglvZmYJb2ZmCW9mZgorMwlvZmYJb24Jb2ZmCW9mZglvZmYKKzQJb2ZmCW9mZglvbglvZmYJb2ZmCis1CW9mZglvZmYJb2ZmCW9uCW9mZgorNwlvZmYJb2ZmCW9mZglvZmYJb24KKworREUyMHgKKz09PT09CisKK01lbW9yeSBTaXplOgorCisJU1czCVNXNAorNjRLCW9uCW9uCiszMksJb2ZmCW9uCisySwlvbiAJb2ZmCisySwlvZmYJb2ZmCisKK1N0YXJ0IEFkZHJlc3NlczoKKworCVNXMQlTVzIJU1czCVNXNAorNjRLCW9uCW9uCW9uCW9uCWMwMDAwCWNmZmZmCisJb24Jb2ZmCW9uCW9uCWQwMDAwCWRmZmZmCisJb2ZmCW9uCW9uCW9uCWUwMDAwCWVmZmZmCisKKzMySwlvbglvbglvZmYJb2ZmCWM4MDAwCWNmZmZmCisJb24Jb2ZmCW9mZglvZmYJZDgwMDAJZGZmZmYKKwlvZmYJb24Jb2ZmCW9mZgllODAwMAllZmZmZgorCitJbGxlZ2FsCW9mZglvZmYJIC0JIC0JICAtCSAgLQorCitJL08gQWRkcmVzczoKKwlTVzUKKzB4MzAwCW9uCisweDIwMAlvZmYKKworUmVtb3RlIEJvb3Q6CisJU1c2CitEaXNhYmxlCW9uCitFbmFibGUJb2ZmCisKK1JlbW90ZSBCb290IFRpbWVvdXQ6CisJU1c3CisyLjVtaW4Jb24KKzMwcwlvZmYKKworSVJROgorCVNXOAlTVzkJU1cxMAlTVzExCVNXMTIKKzUJb24Jb2ZmCW9mZglvZmYJb2ZmCis5CW9mZglvbglvZmYJb2ZmCW9mZgorMTAJb2ZmCW9mZglvbglvZmYJb2ZmCisxMQlvZmYJb2ZmCW9mZglvbglvZmYKKzE1CW9mZglvZmYJb2ZmCW9mZglvbgorCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZGdycy50eHQgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZGdycy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWFhMWJiMwotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9kZ3JzLnR4dApAQCAtMCwwICsxLDUyIEBACisgICAgVGhlIERpZ2kgSW50ZXJuYXRpb25hbCBSaWdodFN3aXRjaCBTRS1YIChkZ3JzKSBEZXZpY2UgRHJpdmVyCisKK1RoaXMgaXMgYSBMaW51eCBkcml2ZXIgZm9yIHRoZSBEaWdpIEludGVybmF0aW9uYWwgUmlnaHRTd2l0Y2ggU0UtWAorRUlTQSBhbmQgUENJIGJvYXJkcy4gIFRoZXNlIGFyZSA0IChFSVNBKSBvciA2IChQQ0kpIHBvcnQgRXRoZXJuZXQKK3N3aXRjaGVzIGFuZCBhIE5JQyBjb21iaW5lZCBpbnRvIGEgc2luZ2xlIGJvYXJkLiAgVGhpcyBkcml2ZXIgY2FuCitiZSBjb21waWxlZCBpbnRvIHRoZSBrZXJuZWwgc3RhdGljYWxseSBvciBhcyBhIGxvYWRhYmxlIG1vZHVsZS4KKworVGhlcmUgaXMgYWxzbyBhIGNvbXBhbmlvbiBtYW5hZ2VtZW50IHRvb2wsIGNhbGxlZCAieHJpZ2h0c3dpdGNoIi4KK1RoZSBtYW5hZ2VtZW50IHRvb2wgbGV0cyB5b3Ugd2F0Y2ggdGhlIHBlcmZvcm1hbmNlIGdyYXBoaWNhbGx5LAorYXMgd2VsbCBhcyBzZXQgdGhlIFNOTVAgYWdlbnQgSVAgYW5kIElQWCBhZGRyZXNzZXMsIElFRUUgU3Bhbm5pbmcKK1RyZWUsIGFuZCBBZ2luZyB0aW1lLiAgVGhlc2UgY2FuIGFsc28gYmUgc2V0IGZyb20gdGhlIGNvbW1hbmQgbGluZQord2hlbiB0aGUgZHJpdmVyIGlzIGxvYWRlZC4gIFRoZSBkcml2ZXIgY29tbWFuZCBsaW5lIG9wdGlvbnMgYXJlOgorCisJZGVidWc9Tk5OCQlEZWJ1ZyBwcmludGluZyBsZXZlbAorCWRtYT0wLzEJCQlEaXNhYmxlL0VuYWJsZSBETUEgb24gUENJIGNhcmQKKwlzcGFudHJlZT0wLzEJCURpc2FibGUvRW5hYmxlIElFRUUgc3Bhbm5pbmcgdHJlZQorCWhhc2hleHBpcmU9Tk5OCQlDaGFuZ2UgYWRkcmVzcyBhZ2luZyB0aW1lIChkZWZhdWx0IDMwMCBzZWNvbmRzKQorCWlwYWRkcj1BLEIsQyxECQlTZXQgU05NUCBhZ2VudCBJUCBhZGRyZXNzIGkuZS4gMTk5LDg2LDgsMjIxCisJaXB0cmFwPUEsQixDLEQJCVNldCBTTk1QIGFnZW50IElQIHRyYXAgYWRkcmVzcyBpLmUuIDE5OSw4Niw4LDIyMQorCWlweG5ldD1OTk4JCVNldCBTTk1QIGFnZW50IElQWCBuZXR3b3JrIG51bWJlcgorCW5pY21vZGU9MC8xCQlEaXNhYmxlL0VuYWJsZSBtdWx0aXBsZSBOSUMgbW9kZQorCitUaGVyZSBpcyBhbHNvIGEgdG9vbCBmb3Igc2V0dGluZyB1cCBpbnB1dCBhbmQgb3V0cHV0IHBhY2tldCBmaWx0ZXJzCitvbiBlYWNoIHBvcnQsIGNhbGxlZCAiZGdyc2ZpbHQiLgorCitCb3RoIHRoZSBtYW5hZ2VtZW50IHRvb2wgYW5kIHRoZSBmaWx0ZXJpbmcgdG9vbCBhcmUgYXZhaWxhYmxlCitzZXBhcmF0ZWx5IGZyb20gdGhlIGZvbGxvd2luZyBGVFAgc2l0ZToKKworCWZ0cDovL2Z0cC5kZ2lpLmNvbS9kcml2ZXJzL3JpZ2h0c3dpdGNoL2xpbnV4LworCitXaGVuIG5pY21vZGU9MSwgdGhlIGJvYXJkIGFuZCBkcml2ZXIgb3BlcmF0ZSBhcyA0IG9yIDYgaW5kaXZpZHVhbAorTklDIHBvcnRzIChldGgwLi4uZXRoNSkgaW5zdGVhZCBvZiBhcyBhIHN3aXRjaC4gIEFsbCBzd2l0Y2hpbmcKK2Z1bmN0aW9ucyBhcmUgZGlzYWJsZWQuICBJbiB0aGUgZnV0dXJlLCB0aGUgYm9hcmQgZmlybXdhcmUgbWF5IGluY2x1ZGUKK2Egcm91dGluZyBjYWNoZSB3aGVuIGluIHRoaXMgbW9kZS4KKworQ29weXJpZ2h0IDE5OTUtMTk5NiBEaWdpIEludGVybmF0aW9uYWwgSW5jLgorCitUaGlzIHNvZnR3YXJlIG1heSBiZSB1c2VkIGFuZCBkaXN0cmlidXRlZCBhY2NvcmRpbmcgdG8gdGhlIHRlcm1zCitvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGluY29ycG9yYXRlZCBoZXJlaW4gYnkgcmVmZXJlbmNlLgorCitGb3IgaW5mb3JtYXRpb24gb24gcHVyY2hhc2luZyBhIFJpZ2h0U3dpdGNoIFNFLTQgb3IgU0UtNgorYm9hcmQsIHBsZWFzZSBjb250YWN0IERpZ2kncyBzYWxlcyBkZXBhcnRtZW50IGF0IDEtNjEyLTkxMi0zNDQ0CitvciAxLTgwMC1ESUdJQlJELiAgT3V0c2lkZSB0aGUgVS5TLiwgcGxlYXNlIGNoZWNrIG91ciBXZWIgcGFnZSBhdDoKKworCWh0dHA6Ly93d3cuZGdpaS5jb20KKworZm9yIHNhbGVzIG9mZmljZXMgd29ybGR3aWRlLiAgVGVjaCBzdXBwb3J0IGlzIGFsc28gYXZhaWxhYmxlIHRocm91Z2gKK3RoZSBjaGFubmVscyBsaXN0ZWQgb24gdGhlIFdlYiBzaXRlLCBhbHRob3VnaCBhcyBsb25nIGFzIEkgYW0KK2VtcGxveWVkIG9uIG5ldHdvcmtpbmcgcHJvZHVjdHMgYXQgRGlnaSBJIHdpbGwgYmUgaGFwcHkgdG8gcHJvdmlkZQorYW55IGJ1ZyBmaXhlcyB0aGF0IG1heSBiZSBuZWVkZWQuCisKKy1SaWNrIFJpY2hhcmRzb24sIHJpY2tAZGdpaS5jb20KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9kbDJrLnR4dCBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9kbDJrLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNDYwNDkyCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2RsMmsudHh0CkBAIC0wLDAgKzEsMjgxIEBACisKKyAgICBELUxpbmsgREwyMDAwLWJhc2VkIEdpZ2FiaXQgRXRoZXJuZXQgQWRhcHRlciBJbnN0YWxsYXRpb24KKyAgICBmb3IgTGludXgKKyAgICBNYXkgMjMsIDIwMDIKKworQ29udGVudHMKKz09PT09PT09CisgLSBDb21wYXRpYmlsaXR5IExpc3QKKyAtIFF1aWNrIEluc3RhbGwKKyAtIENvbXBpbGluZyB0aGUgRHJpdmVyCisgLSBJbnN0YWxsaW5nIHRoZSBEcml2ZXIKKyAtIE9wdGlvbiBwYXJhbWV0ZXIKKyAtIENvbmZpZ3VyYXRpb24gU2NyaXB0IFNhbXBsZQorIC0gVHJvdWJsZXNob290aW5nCisKKworQ29tcGF0aWJpbGl0eSBMaXN0Cis9PT09PT09PT09PT09PT09PQorQWRhcHRlciBTdXBwb3J0OgorCitELUxpbmsgREdFLTU1MFQgR2lnYWJpdCBFdGhlcm5ldCBBZGFwdGVyLgorRC1MaW5rIERHRS01NTBTWCBHaWdhYml0IEV0aGVybmV0IEFkYXB0ZXIuCitELUxpbmsgREwyMDAwLWJhc2VkIEdpZ2FiaXQgRXRoZXJuZXQgQWRhcHRlci4KKworCitUaGUgZHJpdmVyIHN1cHBvcnQgTGludXgga2VybmVsIDIuNC43IGxhdGVyLiBXZSBoYWQgdGVzdGVkIGl0CitvbiB0aGUgZW52aXJvbm1lbnRzIGJlbG93LgorCisgLiBSZWQgSGF0IHY2LjIgKHVwZGF0ZSBrZXJuZWwgdG8gMi40LjcpCisgLiBSZWQgSGF0IHY3LjAgKHVwZGF0ZSBrZXJuZWwgdG8gMi40LjcpCisgLiBSZWQgSGF0IHY3LjEgKGtlcm5lbCAyLjQuNykKKyAuIFJlZCBIYXQgdjcuMiAoa2VybmVsIDIuNC43LTEwKQorCisKK1F1aWNrIEluc3RhbGwKKz09PT09PT09PT09PT0KK0luc3RhbGwgbGludXggZHJpdmVyIGFzIGZvbGxvd2luZyBjb21tYW5kOgorCisxLiBtYWtlIGFsbAorMi4gaW5zbW9kIGRsMmsua28KKzMuIGlmY29uZmlnIGV0aDAgdXAgMTAueHh4Lnh4eC54eHggbmV0bWFzayAyNTUuMC4wLjAKKwkJICAgIF5eXl5eXl5eXl5eXl5eXlwJICAgIF5eXl5eXl5eXAorCQkJCSAgICBJUAkJICAgICBORVRNQVNLCitOb3cgZXRoMCBzaG91bGQgYWN0aXZlLCB5b3UgY2FuIHRlc3QgaXQgYnkgInBpbmciIG9yIGdldCBtb3JlIGluZm9ybWF0aW9uIGJ5CisiaWZjb25maWciLiBJZiB0ZXN0ZWQgb2ssIGNvbnRpbnVlIHRoZSBuZXh0IHN0ZXAuCisKKzQuIGNwIGRsMmsua28gL2xpYi9tb2R1bGVzL2B1bmFtZSAtcmAva2VybmVsL2RyaXZlcnMvbmV0Cis1LiBBZGQgdGhlIGZvbGxvd2luZyBsaW5lIHRvIC9ldGMvbW9kcHJvYmUuY29uZjoKKwlhbGlhcyBldGgwIGRsMmsKKzYuIFJ1biAibmV0Y29uZmlnIiBvciAibmV0Y29uZiIgdG8gY3JlYXRlIGNvbmZpZ3VyYXRpb24gc2NyaXB0IGlmY2ZnLWV0aDAKKyAgIGxvY2F0ZWQgYXQgL2V0Yy9zeXNjb25maWcvbmV0d29yay1zY3JpcHRzIG9yIGNyZWF0ZSBpdCBtYW51YWxseS4KKyAgIFtzZWUgLSBDb25maWd1cmF0aW9uIFNjcmlwdCBTYW1wbGVdCis3LiBEcml2ZXIgd2lsbCBhdXRvbWF0aWNhbGx5IGxvYWQgYW5kIGNvbmZpZ3VyZSBhdCBuZXh0IGJvb3QgdGltZS4KKworQ29tcGlsaW5nIHRoZSBEcml2ZXIKKz09PT09PT09PT09PT09PT09PT09CisgIEluIExpbnV4LCBOSUMgZHJpdmVycyBhcmUgbW9zdCBjb21tb25seSBjb25maWd1cmVkIGFzIGxvYWRhYmxlIG1vZHVsZXMuCitUaGUgYXBwcm9hY2ggb2YgYnVpbGRpbmcgYSBtb25vbGl0aGljIGtlcm5lbCBoYXMgYmVjb21lIG9ic29sZXRlLiBUaGUgZHJpdmVyCitjYW4gYmUgY29tcGlsZWQgYXMgcGFydCBvZiBhIG1vbm9saXRoaWMga2VybmVsLCBidXQgaXMgc3Ryb25nbHkgZGlzY291cmFnZWQuCitUaGUgcmVtYWluZGVyIG9mIHRoaXMgc2VjdGlvbiBhc3N1bWVzIHRoZSBkcml2ZXIgaXMgYnVpbHQgYXMgYSBsb2FkYWJsZSBtb2R1bGUuCitJbiB0aGUgTGludXggZW52aXJvbm1lbnQsIGl0IGlzIGEgZ29vZCBpZGVhIHRvIHJlYnVpbGQgdGhlIGRyaXZlciBmcm9tIHRoZQorc291cmNlIGluc3RlYWQgb2YgcmVseWluZyBvbiBhIHByZWNvbXBpbGVkIHZlcnNpb24uIFRoaXMgYXBwcm9hY2ggcHJvdmlkZXMKK2JldHRlciByZWxpYWJpbGl0eSBzaW5jZSBhIHByZWNvbXBpbGVkIGRyaXZlciBtaWdodCBkZXBlbmQgb24gbGlicmFyaWVzIG9yCitrZXJuZWwgZmVhdHVyZXMgdGhhdCBhcmUgbm90IHByZXNlbnQgaW4gYSBnaXZlbiBMaW51eCBpbnN0YWxsYXRpb24uCisKK1RoZSAzIGZpbGVzIG5lY2Vzc2FyeSB0byBidWlsZCBMaW51eCBkZXZpY2UgZHJpdmVyIGFyZSBkbDJrLmMsIGRsMmsuaCBhbmQKK01ha2VmaWxlLiBUbyBjb21waWxlLCB0aGUgTGludXggaW5zdGFsbGF0aW9uIG11c3QgaW5jbHVkZSB0aGUgZ2NjIGNvbXBpbGVyLAordGhlIGtlcm5lbCBzb3VyY2UsIGFuZCB0aGUga2VybmVsIGhlYWRlcnMuIFRoZSBMaW51eCBkcml2ZXIgc3VwcG9ydHMgTGludXgKK0tlcm5lbHMgMi40LjcuIENvcHkgdGhlIGZpbGVzIHRvIGEgZGlyZWN0b3J5IGFuZCBlbnRlciB0aGUgZm9sbG93aW5nIGNvbW1hbmQKK3RvIGNvbXBpbGUgYW5kIGxpbmsgdGhlIGRyaXZlcjoKKworQ0QtUk9NIGRyaXZlCistLS0tLS0tLS0tLS0KKworW3Jvb3RAWFhYIC9dIG1rZGlyIGNkcm9tCitbcm9vdEBYWFggL10gbW91bnQgLXIgLXQgaXNvOTY2MCAtbyBjb252PWF1dG8gL2Rldi9jZHJvbSAvY2Ryb20KK1tyb290QFhYWCAvXSBjZCByb290Citbcm9vdEBYWFggL3Jvb3RdIG1rZGlyIGRsMmsKK1tyb290QFhYWCAvcm9vdF0gY2QgZGwyaworW3Jvb3RAWFhYIGRsMmtdIGNwIC9jZHJvbS9saW51eC9kbDJrLnRneiAvcm9vdC9kbDJrCitbcm9vdEBYWFggZGwya10gdGFyIHhmdnogZGwyay50Z3oKK1tyb290QFhYWCBkbDJrXSBtYWtlIGFsbAorCitGbG9wcHkgZGlzYyBkcml2ZQorLS0tLS0tLS0tLS0tLS0tLS0KKworW3Jvb3RAWFhYIC9dIGNkIHJvb3QKK1tyb290QFhYWCAvcm9vdF0gbWtkaXIgZGwyaworW3Jvb3RAWFhYIC9yb290XSBjZCBkbDJrCitbcm9vdEBYWFggZGwya10gbWNvcHkgYTovbGludXgvZGwyay50Z3ogL3Jvb3QvZGwyaworW3Jvb3RAWFhYIGRsMmtdIHRhciB4ZnZ6IGRsMmsudGd6Citbcm9vdEBYWFggZGwya10gbWFrZSBhbGwKKworSW5zdGFsbGluZyB0aGUgRHJpdmVyCis9PT09PT09PT09PT09PT09PT09PT0KKworICBNYW51YWwgSW5zdGFsbGF0aW9uCisgIC0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgT25jZSB0aGUgZHJpdmVyIGhhcyBiZWVuIGNvbXBpbGVkLCBpdCBtdXN0IGJlIGxvYWRlZCwgZW5hYmxlZCwgYW5kIGJvdW5kCisgIHRvIGEgcHJvdG9jb2wgc3RhY2sgaW4gb3JkZXIgdG8gZXN0YWJsaXNoIG5ldHdvcmsgY29ubmVjdGl2aXR5LiBUbyBsb2FkIGEKKyAgbW9kdWxlIGVudGVyIHRoZSBjb21tYW5kOgorCisgIGluc21vZCBkbDJrLm8KKworICBvcgorCisgIGluc21vZCBkbDJrLm8gPG9wdGlvbmFsIHBhcmFtZXRlcj4JOyBhZGQgcGFyYW1ldGVyCisKKyAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgICBleGFtcGxlOiBpbnNtb2QgZGwyay5vIG1lZGlhPTEwMG1icHNfaGQKKyAgIG9yCSAgICBpbnNtb2QgZGwyay5vIG1lZGlhPTMKKyAgIG9yCSAgICBpbnNtb2QgZGwyay5vIG1lZGlhPTMsMgk7IGZvciAyIGNhcmRzCisgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisgIFBsZWFzZSByZWZlcmVuY2UgdGhlIGxpc3Qgb2YgdGhlIGNvbW1hbmQgbGluZSBwYXJhbWV0ZXJzIHN1cHBvcnRlZCBieQorICB0aGUgTGludXggZGV2aWNlIGRyaXZlciBiZWxvdy4KKworICBUaGUgaW5zbW9kIGNvbW1hbmQgb25seSBsb2FkcyB0aGUgZHJpdmVyIGFuZCBnaXZlcyBpdCBhIG5hbWUgb2YgdGhlIGZvcm0KKyAgZXRoMCwgZXRoMSwgZXRjLiBUbyBicmluZyB0aGUgTklDIGludG8gYW4gb3BlcmF0aW9uYWwgc3RhdGUsCisgIGl0IGlzIG5lY2Vzc2FyeSB0byBpc3N1ZSB0aGUgZm9sbG93aW5nIGNvbW1hbmQ6CisKKyAgaWZjb25maWcgZXRoMCB1cAorCisgIEZpbmFsbHksIHRvIGJpbmQgdGhlIGRyaXZlciB0byB0aGUgYWN0aXZlIHByb3RvY29sIChlLmcuLCBUQ1AvSVAgd2l0aAorICBMaW51eCksIGVudGVyIHRoZSBmb2xsb3dpbmcgY29tbWFuZDoKKworICBpZnVwIGV0aDAKKworICBOb3RlIHRoYXQgdGhpcyBpcyBtZWFuaW5nZnVsIG9ubHkgaWYgdGhlIHN5c3RlbSBjYW4gZmluZCBhIGNvbmZpZ3VyYXRpb24KKyAgc2NyaXB0IHRoYXQgY29udGFpbnMgdGhlIG5lY2Vzc2FyeSBuZXR3b3JrIGluZm9ybWF0aW9uLiBBIHNhbXBsZSB3aWxsIGJlCisgIGdpdmVuIGluIHRoZSBuZXh0IHBhcmFncmFwaC4KKworICBUaGUgY29tbWFuZHMgdG8gdW5sb2FkIGEgZHJpdmVyIGFyZSBhcyBmb2xsb3dzOgorCisgIGlmZG93biBldGgwCisgIGlmY29uZmlnIGV0aDAgZG93bgorICBybW1vZCBkbDJrLm8KKworICBUaGUgZm9sbG93aW5nIGFyZSB0aGUgY29tbWFuZHMgdG8gbGlzdCB0aGUgY3VycmVudGx5IGxvYWRlZCBtb2R1bGVzIGFuZAorICB0byBzZWUgdGhlIGN1cnJlbnQgbmV0d29yayBjb25maWd1cmF0aW9uLgorCisgIGxzbW9kCisgIGlmY29uZmlnCisKKworICBBdXRvbWF0ZWQgSW5zdGFsbGF0aW9uCisgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgVGhpcyBzZWN0aW9uIGRlc2NyaWJlcyBob3cgdG8gaW5zdGFsbCB0aGUgZHJpdmVyIHN1Y2ggdGhhdCBpdCBpcworICBhdXRvbWF0aWNhbGx5IGxvYWRlZCBhbmQgY29uZmlndXJlZCBhdCBib290IHRpbWUuIFRoZSBmb2xsb3dpbmcgZGVzY3JpcHRpb24KKyAgaXMgYmFzZWQgb24gYSBSZWQgSGF0IDYuMC83LjAgZGlzdHJpYnV0aW9uLCBidXQgaXQgY2FuIGVhc2lseSBiZSBwb3J0ZWQgdG8KKyAgb3RoZXIgZGlzdHJpYnV0aW9ucyBhcyB3ZWxsLgorCisgIFJlZCBIYXQgdjYueC92Ny54CisgIC0tLS0tLS0tLS0tLS0tLS0tCisgIDEuIENvcHkgZGwyay5vIHRvIHRoZSBuZXR3b3JrIG1vZHVsZXMgZGlyZWN0b3J5LCB0eXBpY2FsbHkKKyAgICAgL2xpYi9tb2R1bGVzLzIueC54LXh4L25ldCBvciAvbGliL21vZHVsZXMvMi54Lngva2VybmVsL2RyaXZlcnMvbmV0LgorICAyLiBMb2NhdGUgdGhlIGJvb3QgbW9kdWxlIGNvbmZpZ3VyYXRpb24gZmlsZSwgbW9zdCBjb21tb25seSBtb2Rwcm9iZS5jb25mCisgICAgIG9yIG1vZHVsZXMuY29uZiAoZm9yIDIuNCkgaW4gdGhlIC9ldGMgZGlyZWN0b3J5LiBBZGQgdGhlIGZvbGxvd2luZyBsaW5lczoKKworICAgICBhbGlhcyBldGh4IGRsMmsKKyAgICAgb3B0aW9ucyBkbDJrIDxvcHRpb25hbCBwYXJhbWV0ZXJzPgorCisgICAgIHdoZXJlIGV0aHggd2lsbCBiZSBldGgwIGlmIHRoZSBOSUMgaXMgdGhlIG9ubHkgZXRoZXJuZXQgYWRhcHRlciwgZXRoMSBpZgorICAgICBvbmUgb3RoZXIgZXRoZXJuZXQgYWRhcHRlciBpcyBpbnN0YWxsZWQsIGV0Yy4gUmVmZXIgdG8gdGhlIHRhYmxlIGluIHRoZQorICAgICBwcmV2aW91cyBzZWN0aW9uIGZvciB0aGUgbGlzdCBvZiBvcHRpb25hbCBwYXJhbWV0ZXJzLgorICAzLiBMb2NhdGUgdGhlIG5ldHdvcmsgY29uZmlndXJhdGlvbiBzY3JpcHRzLCBub3JtYWxseSB0aGUKKyAgICAgL2V0Yy9zeXNjb25maWcvbmV0d29yay1zY3JpcHRzIGRpcmVjdG9yeSwgYW5kIGNyZWF0ZSBhIGNvbmZpZ3VyYXRpb24KKyAgICAgc2NyaXB0IG5hbWVkIGlmY2ZnLWV0aHggdGhhdCBjb250YWlucyBuZXR3b3JrIGluZm9ybWF0aW9uLgorICA0LiBOb3RlIHRoYXQgZm9yIG1vc3QgTGludXggZGlzdHJpYnV0aW9ucywgUmVkIEhhdCBpbmNsdWRlZCwgYSBjb25maWd1cmF0aW9uCisgICAgIHV0aWxpdHkgd2l0aCBhIGdyYXBoaWNhbCB1c2VyIGludGVyZmFjZSBpcyBwcm92aWRlZCB0byBwZXJmb3JtIHN0ZXBzIDIKKyAgICAgYW5kIDMgYWJvdmUuCisKKworUGFyYW1ldGVyIERlc2NyaXB0aW9uCis9PT09PT09PT09PT09PT09PT09PT0KK1lvdSBjYW4gaW5zdGFsbCB0aGlzIGRyaXZlciB3aXRob3V0IGFueSBhZGR0aW9uYWwgcGFyYW1ldGVyLiBIb3dldmVyLCBpZiB5b3UKK2FyZSBnb2luZyB0byBoYXZlIGV4dGVuc2l2ZSBmdW5jdGlvbnMgdGhlbiBpdCBpcyBuZWNlc3NhcnkgdG8gc2V0IGV4dHJhCitwYXJhbWV0ZXIuIEJlbG93IGlzIGEgbGlzdCBvZiB0aGUgY29tbWFuZCBsaW5lIHBhcmFtZXRlcnMgc3VwcG9ydGVkIGJ5IHRoZQorTGludXggZGV2aWNlCitkcml2ZXIuCisKK210dT1wYWNrZXRfc2l6ZQkJCS0gU3BlY2lmaWVzIHRoZSBtYXhpbXVtIHBhY2tldCBzaXplLiBkZWZhdWx0CisJCQkJICBpcyAxNTAwLgorCittZWRpYT1tZWRpYV90eXBlCQktIFNwZWNpZmllcyB0aGUgbWVkaWEgdHlwZSB0aGUgTklDIG9wZXJhdGVzIGF0LgorCQkJCSAgYXV0b3NlbnNlCUF1dG9zZW5zaW5nIGFjdGl2ZSBtZWRpYS4KKwkJCQkgIDEwbWJwc19oZAkxME1icHMgaGFsZiBkdXBsZXguCisJCQkJICAxMG1icHNfZmQJMTBNYnBzIGZ1bGwgZHVwbGV4LgorCQkJCSAgMTAwbWJwc19oZAkxMDBNYnBzIGhhbGYgZHVwbGV4LgorCQkJCSAgMTAwbWJwc19mZAkxMDBNYnBzIGZ1bGwgZHVwbGV4LgorCQkJCSAgMTAwMG1icHNfZmQJMTAwME1icHMgZnVsbCBkdXBsZXguCisJCQkJICAxMDAwbWJwc19oZAkxMDAwTWJwcyBoYWxmIGR1cGxleC4KKwkJCQkgIDAJCUF1dG9zZW5zaW5nIGFjdGl2ZSBtZWRpYS4KKwkJCQkgIDEJCTEwTWJwcyBoYWxmIGR1cGxleC4KKwkJCQkgIDIJCTEwTWJwcyBmdWxsIGR1cGxleC4KKwkJCQkgIDMJCTEwME1icHMgaGFsZiBkdXBsZXguCisJCQkJICA0CQkxMDBNYnBzIGZ1bGwgZHVwbGV4LgorCQkJCSAgNSAgICAgICAgICAJMTAwME1icHMgaGFsZiBkdXBsZXguCisJCQkJICA2ICAgICAgICAgIAkxMDAwTWJwcyBmdWxsIGR1cGxleC4KKworCQkJCSAgQnkgZGVmYXVsdCwgdGhlIE5JQyBvcGVyYXRlcyBhdCBhdXRvc2Vuc2UuCisJCQkJICAxMDAwbWJwc19mZCBhbmQgMTAwMG1icHNfaGQgdHlwZXMgYXJlIG9ubHkKKwkJCQkgIGF2YWlsYWJsZSBmb3IgZmliZXIgYWRhcHRlci4KKwordmxhbj1uCQkJCS0gU3BlY2lmaWVzIHRoZSBWTEFOIElELiBJZiB2bGFuPTAsIHRoZQorCQkJCSAgVmlydHVhbCBMb2NhbCBBcmVhIE5ldHdvcmsgKFZMQU4pIGZ1bmN0aW9uIGlzCisJCQkJICBkaXNhYmxlLgorCitqdW1ibz1bMHwxXQkJCS0gU3BlY2lmaWVzIHRoZSBqdW1ibyBmcmFtZSBzdXBwb3J0LiBJZiBqdW1ibz0xLAorCQkJCSAgdGhlIE5JQyBhY2NlcHQganVtYm8gZnJhbWVzLiBCeSBkZWZhdWx0LCB0aGlzCisJCQkJICBmdW5jdGlvbiBpcyBkaXNhYmxlZC4KKwkJCQkgIEp1bWJvIGZyYW1lIHVzdWFsbHkgaW1wcm92ZSB0aGUgcGVyZm9ybWFuY2UKKwkJCQkgIGludCBnaWdhYml0LgorCQkJCSAgVGhpcyBmZWF0dXJlIG5lZWQganVtYm8gZnJhbWUgY29tcGF0aWJsZSAKKwkJCQkgIHJlbW90ZS4KKwkJCQkgIAorcnhfY29hbGVzY2U9bQkJCS0gTnVtYmVyIG9mIHJ4IGZyYW1lIGhhbmRsZWQgZWFjaCBpbnRlcnJ1cHQuCityeF90aW1lb3V0PW4JCQktIFJ4IERNQSB3YWl0IHRpbWUgZm9yIGFuIGludGVycnVwdC4gCisJCQkJICBJZiBzZXQgcnhfY29hbGVzY2UgPiAwLCBoYXJkd2FyZSBvbmx5IGFzc2VydCAKKwkJCQkgIGFuIGludGVycnVwdCBmb3IgbSBmcmFtZXMuIEhhcmR3YXJlIHdvbid0IAorCQkJCSAgYXNzZXJ0IHJ4IGludGVycnVwdCB1bnRpbCBtIGZyYW1lcyByZWNlaXZlZCBvcgorCQkJCSAgcmVhY2ggdGltZW91dCBvZiBuICogNjQwIG5hbm8gc2Vjb25kcy4gCisJCQkJICBTZXQgcHJvcGVyIHJ4X2NvYWxlc2NlIGFuZCByeF90aW1lb3V0IGNhbiAKKwkJCQkgIHJlZHVjZSBjb25nZXN0aW9uIGNvbGxhcHNlIGFuZCBvdmVybG9hZCB3aGljaAorCQkJCSAgaGFzIGJlZW4gYSBib3R0bGVuZWN0IGZvciBoaWdoIHNwZWVkIG5ldHdvcmsuCisJCQkJICAKKwkJCQkgIEZvciBleGFtcGxlLCByeF9jb2FsZXNjZT0xMCByeF90aW1lb3V0PTgwMC4KKwkJCQkgIHRoYXQgaXMsIGhhcmR3YXJlIGFzc2VydCBvbmx5IDEgaW50ZXJydXB0IAorCQkJCSAgZm9yIDEwIGZyYW1lcyByZWNlaXZlZCBvciB0aW1lb3V0IG9mIDUxMiB1cy4gCisKK3R4X2NvYWxlc2NlPW4JCQktIE51bWJlciBvZiB0eCBmcmFtZSBoYW5kbGVkIGVhY2ggaW50ZXJydXB0LgorCQkJCSAgU2V0IG4gPiAxIGNhbiByZWR1Y2UgdGhlIGludGVycnVwdHMgCisJCQkJICBjb25nZXN0aW9uIHVzdWFsbHkgbG93ZXIgcGVyZm9ybWFuY2Ugb2YKKwkJCQkgIGhpZ2ggc3BlZWQgbmV0d29yayBjYXJkLiBEZWZhdWx0IGlzIDE2LgorCQkJCSAgCit0eF9mbG93PVsxfDBdCQkJLSBTcGVjaWZpZXMgdGhlIFR4IGZsb3cgY29udHJvbC4gSWYgdHhfZmxvdz0wLCAKKwkJCQkgIHRoZSBUeCBmbG93IGNvbnRyb2wgZGlzYWJsZSBlbHNlIGRyaXZlcgorCQkJCSAgYXV0b2RldGVjdC4KK3J4X2Zsb3c9WzF8MF0JCQktIFNwZWNpZmllcyB0aGUgUnggZmxvdyBjb250cm9sLiBJZiByeF9mbG93PTAsIAorCQkJCSAgdGhlIFJ4IGZsb3cgY29udHJvbCBlbmFibGUgZWxzZSBkcml2ZXIKKwkJCQkgIGF1dG9kZXRlY3QuCisKKworQ29uZmlndXJhdGlvbiBTY3JpcHQgU2FtcGxlCis9PT09PT09PT09PT09PT09PT09PT09PT09PT0KK0hlcmUgaXMgYSBzYW1wbGUgb2YgYSBzaW1wbGUgY29uZmlndXJhdGlvbiBzY3JpcHQ6CisKK0RFVklDRT1ldGgwCitVU0VSQ1RMPW5vCitPTkJPT1Q9eWVzCitQT09UUFJPVE89bm9uZQorQlJPQURDQVNUPTIwNy4yMDAuNS4yNTUKK05FVFdPUks9MjA3LjIwMC41LjAKK05FVE1BU0s9MjU1LjI1NS4yNTUuMAorSVBBRERSPTIwNy4yMDAuNS4yCisKKworVHJvdWJsZXNob290aW5nCis9PT09PT09PT09PT09PT0KK1ExLiBTb3VyY2UgZmlsZXMgY29udGFpbiBeIE0gYmVoaW5kIGV2ZXJ5IGxpbmUuCisJTWFrZSBzdXJlIGFsbCBmaWxlcyBhcmUgVW5peCBmaWxlIGZvcm1hdCAobm8gTEYpLiBUcnkgdGhlIGZvbGxvd2luZworICAgIHNoZWxsIGNvbW1hbmQgdG8gY29udmVydCBmaWxlcy4KKworCWNhdCBkbDJrLmMgfCBjb2wgLWIgPiBkbDJrLnRtcAorCW12IGRsMmsudG1wIGRsMmsuYworCisJT1IKKworCWNhdCBkbDJrLmMgfCB0ciAtZCAiXHIiID4gZGwyay50bXAKKwltdiBkbDJrLnRtcCBkbDJrLmMKKworUTI6IENvdWxkIG5vdCBmaW5kIGhlYWRlciBmaWxlcyAoKi5oKSA/CisJVG8gY29tcGlsZSB0aGUgZHJpdmVyLCB5b3UgbmVlZCBrZXJuZWwgaGVhZGVyIGZpbGVzLiBBZnRlcgorICAgIGluc3RhbGxpbmcgdGhlIGtlcm5lbCBzb3VyY2UsIHRoZSBoZWFkZXIgZmlsZXMgYXJlIHVzdWFsbHkgbG9jYXRlZCBpbgorICAgIC91c3Ivc3JjL2xpbnV4L2luY2x1ZGUsIHdoaWNoIGlzIHRoZSBkZWZhdWx0IGluY2x1ZGUgZGlyZWN0b3J5IGNvbmZpZ3VyZWQKKyAgICBpbiBNYWtlZmlsZS4gRm9yIHNvbWUgZGlzdHJpYnV0aW9ucywgdGhlcmUgaXMgYSBjb3B5IG9mIGhlYWRlciBmaWxlcyBpbgorICAgIC91c3Ivc3JjL2luY2x1ZGUvbGludXggYW5kIC91c3Ivc3JjL2luY2x1ZGUvYXNtLCB0aGF0IHlvdSBjYW4gY2hhbmdlIHRoZQorICAgIElOQ0xVREVESVIgaW4gTWFrZWZpbGUgdG8gL3Vzci9pbmNsdWRlIHdpdGhvdXQgaW5zdGFsbGluZyBrZXJuZWwgc291cmNlLgorCU5vdGUgdGhhdCBSSCA3LjAgZGlkbid0IHByb3ZpZGUgY29ycmVjdCBoZWFkZXIgZmlsZXMgaW4gL3Vzci9pbmNsdWRlLAorICAgIGluY2x1ZGluZyB0aG9zZSBmaWxlcyB3aWxsIG1ha2UgYSB3cm9uZyB2ZXJzaW9uIGRyaXZlci4KKwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2RtZmUudHh0IGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2RtZmUudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMwZTgzOTgKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZG1mZS50eHQKQEAgLTAsMCArMSw1OSBAQAorICBkbWZlLmM6IFZlcnNpb24gMS4yOCAgICAgICAgMDEvMTgvMjAwMAorCisgICAgICAgIEEgRGF2aWNvbSBETTkxMDIoQSkvRE05MTMyL0RNOTgwMSBmYXN0IGV0aGVybmV0IGRyaXZlciBmb3IgTGludXguIAorICAgICAgICBDb3B5cmlnaHQgKEMpIDE5OTcgIFN0ZW4gV2FuZworCisgICAgICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgICAgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICAgICAgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIKKyAgICAgICAgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICAgICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgICAgICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworCisgIEEuIENvbXBpbGVyIGNvbW1hbmQ6CisKKyAgICAgQS0xOiBGb3Igbm9ybWFsIHNpbmdsZSBvciBtdWx0aXBsZSBwcm9jZXNzb3Iga2VybmVsCisgICAgICAgICAgImdjYyAtRE1PRFVMRSAtRF9fS0VSTkVMX18gLUkvdXNyL3NyYy9saW51eC9uZXQvaW5ldCAtV2FsbCAKKyAgICAgICAgICAgIC1Xc3RyaWN0LXByb3RvdHlwZXMgLU82IC1jIGRtZmUuYyIKKworICAgICBBLTI6IEZvciBzaW5nbGUgb3IgbXVsdGlwbGUgcHJvY2Vzc29yIHdpdGgga2VybmVsIG1vZHVsZSB2ZXJzaW9uIGZ1bmN0aW9uCisgICAgICAgICAgImdjYyAtRE1PRFVMRSAtRE1PRFZFUlNJT05TIC1EX19LRVJORUxfXyAtSS91c3Ivc3JjL2xpbnV4L25ldC9pbmV0IAorICAgICAgICAgICAgLVdhbGwgLVdzdHJpY3QtcHJvdG90eXBlcyAtTzYgLWMgZG1mZS5jIgorCisKKyAgQi4gVGhlIGZvbGxvd2luZyBzdGVwcyB0ZWFjaCB5b3UgaG93IHRvIGFjdGl2YXRlIGEgRE05MTAyIGJvYXJkOgorCisgICAgICAgIDEuIFVzZWQgdGhlIHVwcGVyIGNvbXBpbGVyIGNvbW1hbmQgdG8gY29tcGlsZSBkbWZlLmMKKworICAgICAgICAyLiBJbnNlcnQgZG1mZSBtb2R1bGUgaW50byBrZXJuZWwKKyAgICAgICAgICAgImluc21vZCBkbWZlIiAgICAgICAgOztBdXRvIERldGVjdGlvbiBNb2RlIChTdWdnZXN0KQorICAgICAgICAgICAiaW5zbW9kIGRtZmUgbW9kZT0wIiA7O0ZvcmNlIDEwTSBIYWxmIER1cGxleAorICAgICAgICAgICAiaW5zbW9kIGRtZmUgbW9kZT0xIiA7O0ZvcmNlIDEwME0gSGFsZiBEdXBsZXgKKyAgICAgICAgICAgImluc21vZCBkbWZlIG1vZGU9NCIgOztGb3JjZSAxME0gRnVsbCBEdXBsZXgKKyAgICAgICAgICAgImluc21vZCBkbWZlIG1vZGU9NSIgOztGb3JjZSAxMDBNIEZ1bGwgRHVwbGV4CisKKyAgICAgICAgMy4gQ29uZmlnIGEgZG05MTAyIG5ldHdvcmsgaW50ZXJmYWNlCisgICAgICAgICAgICJpZmNvbmZpZyBldGgwIDE3Mi4yMi4zLjE4IgorICAgICAgICAgICAgICAgICAgICAgICAgICBeXl5eXl5eXl5eXiBZb3VyIElQIGFkZHJlc3MKKworICAgICAgICA0LiBBY3RpdmF0ZSB0aGUgSVAgcm91dGluZyB0YWJsZS4gRm9yIHNvbWUgZGlzdHJpYnV0aW9ucywgaXQgaXMgbm90CisgICAgICAgICAgIG5lY2Vzc2FyeS4gWW91IGNhbiB0eXBlICJyb3V0ZSIgdG8gY2hlY2suCisKKyAgICAgICAgICAgInJvdXRlIGFkZCBkZWZhdWx0IGV0aDAiCisKKworICAgICAgICA1LiBXZWxsIGRvbmUuIFlvdXIgRE05MTAyIGFkYXB0ZXIgaXMgbm93IGFjdGl2YXRlZC4KKworCisgICBDLiBPYmplY3QgZmlsZXMgZGVzY3JpcHRpb246CisgICAgICAgIDEuIGRtZmVfcmg2MS5vOiAgICAgICAJRm9yIFJlZGhhdCA2LjEKKworICAgICAgICBJZiB5b3UgY2FuIG1ha2Ugc3VyZSB5b3VyIGtlcm5lbCB2ZXJzaW9uLCB5b3UgY2FuIHJlbmFtZQorICAgICAgICB0byBkbWZlLm8gYW5kIGRpcmVjdGx5IHVzZSBpdCB3aXRob3V0IHJlLWNvbXBpbGluZy4KKworCisgIEF1dGhvcjogU3RlbiBXYW5nLCA4ODYtMy01Nzk4Nzk3LTg1MTcsIEUtbWFpbDogc3Rlbl93YW5nQGRhdmljb20uY29tLnR3CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZHJpdmVyLnR4dCBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9kcml2ZXIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjExZmQwZWYKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZHJpdmVyLnR4dApAQCAtMCwwICsxLDk0IEBACitEb2N1bWVudHMgYWJvdXQgc29mdG5ldCBkcml2ZXIgaXNzdWVzIGluIGdlbmVyYWwgY2FuIGJlIGZvdW5kCithdDoKKworCWh0dHA6Ly93d3cuZmlyc3RmbG9vci5vcmcvfmFuZGkvc29mdG5ldC8KKworVHJhbnNtaXQgcGF0aCBndWlkZWxpbmVzOgorCisxKSBUaGUgaGFyZF9zdGFydF94bWl0IG1ldGhvZCBtdXN0IG5ldmVyIHJldHVybiAnMScgdW5kZXIgYW55CisgICBub3JtYWwgY2lyY3Vtc3RhbmNlcy4gIEl0IGlzIGNvbnNpZGVyZWQgYSBoYXJkIGVycm9yIHVubGVzcworICAgdGhlcmUgaXMgbm8gd2F5IHlvdXIgZGV2aWNlIGNhbiB0ZWxsIGFoZWFkIG9mIHRpbWUgd2hlbiBpdCdzCisgICB0cmFuc21pdCBmdW5jdGlvbiB3aWxsIGJlY29tZSBidXN5LgorCisgICBJbnN0ZWFkIGl0IG11c3QgbWFpbnRhaW4gdGhlIHF1ZXVlIHByb3Blcmx5LiAgRm9yIGV4YW1wbGUsCisgICBmb3IgYSBkcml2ZXIgaW1wbGVtZW50aW5nIHNjYXR0ZXItZ2F0aGVyIHRoaXMgbWVhbnM6CisKKwlzdGF0aWMgaW50IGRydl9oYXJkX3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJICAgCQkgICAgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKKwl7CisJCXN0cnVjdCBkcnYgKmRwID0gZGV2LT5wcml2OworCisJCWxvY2tfdHgoZHApOworCQkuLi4KKwkJLyogVGhpcyBpcyBhIGhhcmQgZXJyb3IgbG9nIGl0LiAqLworCQlpZiAoVFhfQlVGRlNfQVZBSUwoZHApIDw9IChza2Jfc2hpbmZvKHNrYiktPm5yX2ZyYWdzICsgMSkpIHsKKwkJCW5ldGlmX3N0b3BfcXVldWUoZGV2KTsKKwkJCXVubG9ja190eChkcCk7CisJCQlwcmludGsoS0VSTl9FUlIgUEZYICIlczogQlVHISBUeCBSaW5nIGZ1bGwgd2hlbiBxdWV1ZSBhd2FrZSFcbiIsCisJCQkgICAgICAgZGV2LT5uYW1lKTsKKwkJCXJldHVybiAxOworCQl9CisKKwkJLi4uIHF1ZXVlIHBhY2tldCB0byBjYXJkIC4uLgorCQkuLi4gdXBkYXRlIHR4IGNvbnN1bWVyIGluZGV4IC4uLgorCisJCWlmIChUWF9CVUZGU19BVkFJTChkcCkgPD0gKE1BWF9TS0JfRlJBR1MgKyAxKSkKKwkJCW5ldGlmX3N0b3BfcXVldWUoZGV2KTsKKworCQkuLi4KKwkJdW5sb2NrX3R4KGRwKTsKKwkJLi4uCisJfQorCisgICBBbmQgdGhlbiBhdCB0aGUgZW5kIG9mIHlvdXIgVFggcmVjbGFpbWF0aW9uIGV2ZW50IGhhbmRsaW5nOgorCisJaWYgKG5ldGlmX3F1ZXVlX3N0b3BwZWQoZHAtPmRldikgJiYKKyAgICAgICAgICAgIFRYX0JVRkZTX0FWQUlMKGRwKSA+IChNQVhfU0tCX0ZSQUdTICsgMSkpCisJCW5ldGlmX3dha2VfcXVldWUoZHAtPmRldik7CisKKyAgIEZvciBhIG5vbi1zY2F0dGVyLWdhdGhlciBzdXBwb3J0aW5nIGNhcmQsIHRoZSB0aHJlZSB0ZXN0cyBzaW1wbHkgYmVjb21lOgorCisJCS8qIFRoaXMgaXMgYSBoYXJkIGVycm9yIGxvZyBpdC4gKi8KKwkJaWYgKFRYX0JVRkZTX0FWQUlMKGRwKSA8PSAwKQorCisgICBhbmQ6CisKKwkJaWYgKFRYX0JVRkZTX0FWQUlMKGRwKSA9PSAwKQorCisgICBhbmQ6CisKKwlpZiAobmV0aWZfcXVldWVfc3RvcHBlZChkcC0+ZGV2KSAmJgorICAgICAgICAgICAgVFhfQlVGRlNfQVZBSUwoZHApID4gMCkKKwkJbmV0aWZfd2FrZV9xdWV1ZShkcC0+ZGV2KTsKKworMikgRG8gbm90IGZvcmdldCB0byB1cGRhdGUgbmV0ZGV2LT50cmFuc19zdGFydCB0byBqaWZmaWVzIGFmdGVyCisgICBlYWNoIG5ldyB0eCBwYWNrZXQgaXMgZ2l2ZW4gdG8gdGhlIGhhcmR3YXJlLgorCiszKSBEbyBub3QgZm9yZ2V0IHRoYXQgb25jZSB5b3UgcmV0dXJuIDAgZnJvbSB5b3VyIGhhcmRfc3RhcnRfeG1pdAorICAgbWV0aG9kLCBpdCBpcyB5b3VyIGRyaXZlcidzIHJlc3BvbnNpYmlsaXR5IHRvIGZyZWUgdXAgdGhlIFNLQgorICAgYW5kIGluIHNvbWUgZmluaXRlIGFtb3VudCBvZiB0aW1lLgorCisgICBGb3IgZXhhbXBsZSwgdGhpcyBtZWFucyB0aGF0IGl0IGlzIG5vdCBhbGxvd2VkIGZvciB5b3VyIFRYCisgICBtaXRpZ2F0aW9uIHNjaGVtZSB0byBsZXQgVFggcGFja2V0cyAiaGFuZyBvdXQiIGluIHRoZSBUWAorICAgcmluZyB1bnJlY2xhaW1lZCBmb3JldmVyIGlmIG5vIG5ldyBUWCBwYWNrZXRzIGFyZSBzZW50LgorICAgVGhpcyBlcnJvciBjYW4gZGVhZGxvY2sgc29ja2V0cyB3YWl0aW5nIGZvciBzZW5kIGJ1ZmZlciByb29tCisgICB0byBiZSBmcmVlZCB1cC4KKworICAgSWYgeW91IHJldHVybiAxIGZyb20gdGhlIGhhcmRfc3RhcnRfeG1pdCBtZXRob2QsIHlvdSBtdXN0IG5vdCBrZWVwCisgICBhbnkgcmVmZXJlbmNlIHRvIHRoYXQgU0tCIGFuZCB5b3UgbXVzdCBub3QgYXR0ZW1wdCB0byBmcmVlIGl0IHVwLgorCitQcm9iaW5nIGd1aWRlbGluZXM6CisKKzEpIEFueSBoYXJkd2FyZSBsYXllciBhZGRyZXNzIHlvdSBvYnRhaW4gZm9yIHlvdXIgZGV2aWNlIHNob3VsZAorICAgYmUgdmVyaWZpZWQuICBGb3IgZXhhbXBsZSwgZm9yIGV0aGVybmV0IGNoZWNrIGl0IHdpdGgKKyAgIGxpbnV4L2V0aGVyZGV2aWNlLmg6aXNfdmFsaWRfZXRoZXJfYWRkcigpCisKK0Nsb3NlL3N0b3AgZ3VpZGVsaW5lczoKKworMSkgQWZ0ZXIgdGhlIGRldi0+c3RvcCByb3V0aW5lIGhhcyBiZWVuIGNhbGxlZCwgdGhlIGhhcmR3YXJlIG11c3QKKyAgIG5vdCByZWNlaXZlIG9yIHRyYW5zbWl0IGFueSBkYXRhLiAgQWxsIGluIGZsaWdodCBwYWNrZXRzIG11c3QKKyAgIGJlIGFib3J0ZWQuIElmIG5lY2Vzc2FyeSwgcG9sbCBvciB3YWl0IGZvciBjb21wbGV0aW9uIG9mIAorICAgYW55IHJlc2V0IGNvbW1hbmRzLgorCisyKSBUaGUgZGV2LT5zdG9wIHJvdXRpbmUgd2lsbCBiZSBjYWxsZWQgYnkgdW5yZWdpc3Rlcl9uZXRkZXZpY2UKKyAgIGlmIGRldmljZSBpcyBzdGlsbCBVUC4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9lMTAwLnR4dCBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9lMTAwLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZWY5ZjdjCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2UxMDAudHh0CkBAIC0wLDAgKzEsMTcwIEBACitMaW51eCogQmFzZSBEcml2ZXIgZm9yIHRoZSBJbnRlbChSKSBQUk8vMTAwIEZhbWlseSBvZiBBZGFwdGVycworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworTm92ZW1iZXIgMTcsIDIwMDQKKworCitDb250ZW50cworPT09PT09PT0KKworLSBJbiBUaGlzIFJlbGVhc2UKKy0gSWRlbnRpZnlpbmcgWW91ciBBZGFwdGVyCistIERyaXZlciBDb25maWd1cmF0aW9uIFBhcmFtZXRlcnMKKy0gQWRkaXRpb25hbCBDb25maWd1cmF0aW9ucworLSBTdXBwb3J0CisKKworSW4gVGhpcyBSZWxlYXNlCis9PT09PT09PT09PT09PT0KKworVGhpcyBmaWxlIGRlc2NyaWJlcyB0aGUgTGludXgqIEJhc2UgRHJpdmVyIGZvciB0aGUgSW50ZWwoUikgUFJPLzEwMCBGYW1pbHkgb2YKK0FkYXB0ZXJzLCB2ZXJzaW9uIDMuMy54LiAgVGhpcyBkcml2ZXIgc3VwcG9ydHMgMi40LnggYW5kIDIuNi54IGtlcm5lbHMuIAorCitJZGVudGlmeWluZyBZb3VyIEFkYXB0ZXIKKz09PT09PT09PT09PT09PT09PT09PT09PQorCitGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBob3cgdG8gaWRlbnRpZnkgeW91ciBhZGFwdGVyLCBnbyB0byB0aGUgQWRhcHRlciAmIAorRHJpdmVyIElEIEd1aWRlIGF0OgorCisgIGh0dHA6Ly9zdXBwb3J0LmludGVsLmNvbS9zdXBwb3J0L25ldHdvcmsvYWRhcHRlci9wcm8xMDAvMjEzOTcuaHRtCisKK0ZvciB0aGUgbGF0ZXN0IEludGVsIG5ldHdvcmsgZHJpdmVycyBmb3IgTGludXgsIHJlZmVyIHRvIHRoZSBmb2xsb3dpbmcgCit3ZWJzaXRlLiBJbiB0aGUgc2VhcmNoIGZpZWxkLCBlbnRlciB5b3VyIGFkYXB0ZXIgbmFtZSBvciB0eXBlLCBvciB1c2UgdGhlIAorbmV0d29ya2luZyBsaW5rIG9uIHRoZSBsZWZ0IHRvIHNlYXJjaCBmb3IgeW91ciBhZGFwdGVyOgorCisgIGh0dHA6Ly9kb3dubG9hZGZpbmRlci5pbnRlbC5jb20vc2NyaXB0cy1kZi9zdXBwb3J0X2ludGVsLmFzcAorCitEcml2ZXIgQ29uZmlndXJhdGlvbiBQYXJhbWV0ZXJzCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK1RoZSBkZWZhdWx0IHZhbHVlIGZvciBlYWNoIHBhcmFtZXRlciBpcyBnZW5lcmFsbHkgdGhlIHJlY29tbWVuZGVkIHNldHRpbmcsCit1bmxlc3Mgb3RoZXJ3aXNlIG5vdGVkLgorCitSeCBEZXNjcmlwdG9yczogTnVtYmVyIG9mIHJlY2VpdmUgZGVzY3JpcHRvcnMuIEEgcmVjZWl2ZSBkZXNjcmlwdG9yIGlzIGEgZGF0YSAKKyAgIHN0cnVjdHVyZSB0aGF0IGRlc2NyaWJlcyBhIHJlY2VpdmUgYnVmZmVyIGFuZCBpdHMgYXR0cmlidXRlcyB0byB0aGUgbmV0d29yayAKKyAgIGNvbnRyb2xsZXIuIFRoZSBkYXRhIGluIHRoZSBkZXNjcmlwdG9yIGlzIHVzZWQgYnkgdGhlIGNvbnRyb2xsZXIgdG8gd3JpdGUgCisgICBkYXRhIGZyb20gdGhlIGNvbnRyb2xsZXIgdG8gaG9zdCBtZW1vcnkuIEluIHRoZSAzLjAueCBkcml2ZXIgdGhlIHZhbGlkCisgICByYW5nZSBmb3IgdGhpcyBwYXJhbWV0ZXIgaXMgNjQtMjU2LiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyA2NC4gVGhpcyBwYXJhbWV0ZXIgCisgICBjYW4gYmUgY2hhbmdlZCB1c2luZyB0aGUgY29tbWFuZCAKKyAKKyAgIGV0aHRvb2wgLUcgZXRoPyByeCBuLCB3aGVyZSBuIGlzIHRoZSBudW1iZXIgb2YgZGVzaXJlZCByeCBkZXNjcmlwdG9ycy4KKworVHggRGVzY3JpcHRvcnM6IE51bWJlciBvZiB0cmFuc21pdCBkZXNjcmlwdG9ycy4gQSB0cmFuc21pdCBkZXNjcmlwdG9yIGlzIGEKKyAgIGRhdGEgc3RydWN0dXJlIHRoYXQgZGVzY3JpYmVzIGEgdHJhbnNtaXQgYnVmZmVyIGFuZCBpdHMgYXR0cmlidXRlcyB0byB0aGUKKyAgIG5ldHdvcmsgY29udHJvbGxlci4gVGhlIGRhdGEgaW4gdGhlIGRlc2NyaXB0b3IgaXMgdXNlZCBieSB0aGUgY29udHJvbGxlciB0byAKKyAgIHJlYWQgZGF0YSBmcm9tIHRoZSBob3N0IG1lbW9yeSB0byB0aGUgY29udHJvbGxlci4gSW4gdGhlIDMuMC54IGRyaXZlciB0aGUgCisgICB2YWxpZCByYW5nZSBmb3IgdGhpcyBwYXJhbWV0ZXIgaXMgNjQtMjU2LiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyA2NC4gVGhpcyAKKyAgIHBhcmFtZXRlciBjYW4gYmUgY2hhbmdlZCB1c2luZyB0aGUgY29tbWFuZCAKKworICAgZXRodG9vbCAtRyBldGg/IHR4IG4sIHdoZXJlIG4gaXMgdGhlIG51bWJlciBvZiBkZXNpcmVkIHR4IGRlc2NyaXB0b3JzLgorCitTcGVlZC9EdXBsZXg6IFRoZSBkcml2ZXIgYXV0by1uZWdvdGlhdGVzIHRoZSBsaW5rIHNwZWVkIGFuZCBkdXBsZXggc2V0dGluZ3MgYnkgCisgICBkZWZhdWx0LiBFdGh0b29sIGNhbiBiZSB1c2VkIGFzIGZvbGxvd3MgdG8gZm9yY2Ugc3BlZWQvZHVwbGV4LiAKKworICAgZXRodG9vbCAtcyBldGg/ICBhdXRvbmVnIG9mZiBzcGVlZCB7MTB8MTAwfSBkdXBsZXgge2Z1bGx8aGFsZn0KKworICAgTk9URTogc2V0dGluZyB0aGUgc3BlZWQvZHVwbGV4IHRvIGluY29ycmVjdCB2YWx1ZXMgd2lsbCBjYXVzZSB0aGUgbGluayB0bworICAgZmFpbC4KKworRXZlbnQgTG9nIE1lc3NhZ2UgTGV2ZWw6ICBUaGUgZHJpdmVyIHVzZXMgdGhlIG1lc3NhZ2UgbGV2ZWwgZmxhZyB0byBsb2cgZXZlbnRzIAorICAgdG8gc3lzbG9nLiBUaGUgbWVzc2FnZSBsZXZlbCBjYW4gYmUgc2V0IGF0IGRyaXZlciBsb2FkIHRpbWUuIEl0IGNhbiBhbHNvIGJlIAorICAgc2V0IHVzaW5nIHRoZSBjb21tYW5kCisKKyAgIGV0aHRvb2wgLXMgZXRoPyBtc2dsdmwgbgorCitBZGRpdGlvbmFsIENvbmZpZ3VyYXRpb25zCis9PT09PT09PT09PT09PT09PT09PT09PT09CisKKyAgQ29uZmlndXJpbmcgdGhlIERyaXZlciBvbiBEaWZmZXJlbnQgRGlzdHJpYnV0aW9ucworICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgQ29uZmlndXJpbmcgYSBuZXR3b3JrIGRyaXZlciB0byBsb2FkIHByb3Blcmx5IHdoZW4gdGhlIHN5c3RlbSBpcyBzdGFydGVkIGlzIAorICBkaXN0cmlidXRpb24gZGVwZW5kZW50LiBUeXBpY2FsbHksIHRoZSBjb25maWd1cmF0aW9uIHByb2Nlc3MgaW52b2x2ZXMgYWRkaW5nIAorICBhbiBhbGlhcyBsaW5lIHRvIC9ldGMvbW9kdWxlcy5jb25mIGFzIHdlbGwgYXMgZWRpdGluZyBvdGhlciBzeXN0ZW0gc3RhcnR1cCAKKyAgc2NyaXB0cyBhbmQvb3IgY29uZmlndXJhdGlvbiBmaWxlcy4gIE1hbnkgcG9wdWxhciBMaW51eCBkaXN0cmlidXRpb25zIHNoaXAgCisgIHdpdGggdG9vbHMgdG8gbWFrZSB0aGVzZSBjaGFuZ2VzIGZvciB5b3UuIFRvIGxlYXJuIHRoZSBwcm9wZXIgd2F5IHRvIAorICBjb25maWd1cmUgYSBuZXR3b3JrIGRldmljZSBmb3IgeW91ciBzeXN0ZW0sIHJlZmVyIHRvIHlvdXIgZGlzdHJpYnV0aW9uIAorICBkb2N1bWVudGF0aW9uLiBJZiBkdXJpbmcgdGhpcyBwcm9jZXNzIHlvdSBhcmUgYXNrZWQgZm9yIHRoZSBkcml2ZXIgb3IgbW9kdWxlIAorICBuYW1lLCB0aGUgbmFtZSBmb3IgdGhlIExpbnV4IEJhc2UgRHJpdmVyIGZvciB0aGUgSW50ZWwgUFJPLzEwMCBGYW1pbHkgb2YgCisgIEFkYXB0ZXJzIGlzIGUxMDAuCisKKyAgQXMgYW4gZXhhbXBsZSwgaWYgeW91IGluc3RhbGwgdGhlIGUxMDAgZHJpdmVyIGZvciB0d28gUFJPLzEwMCBhZGFwdGVycyAKKyAgKGV0aDAgYW5kIGV0aDEpLCBhZGQgdGhlIGZvbGxvd2luZyB0byBtb2R1bGVzLmNvbmY6CisKKyAgICAgICBhbGlhcyBldGgwIGUxMDAKKyAgICAgICBhbGlhcyBldGgxIGUxMDAKKworICBWaWV3aW5nIExpbmsgTWVzc2FnZXMKKyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIEluIG9yZGVyIHRvIHNlZSBsaW5rIG1lc3NhZ2VzIGFuZCBvdGhlciBJbnRlbCBkcml2ZXIgaW5mb3JtYXRpb24gb24geW91ciAKKyAgY29uc29sZSwgeW91IG11c3Qgc2V0IHRoZSBkbWVzZyBsZXZlbCB1cCB0byBzaXguIFRoaXMgY2FuIGJlIGRvbmUgYnkgCisgIGVudGVyaW5nIHRoZSBmb2xsb3dpbmcgb24gdGhlIGNvbW1hbmQgbGluZSBiZWZvcmUgbG9hZGluZyB0aGUgZTEwMCBkcml2ZXI6IAorCisgICAgICAgZG1lc2cgLW4gOAorCisgIElmIHlvdSB3aXNoIHRvIHNlZSBhbGwgbWVzc2FnZXMgaXNzdWVkIGJ5IHRoZSBkcml2ZXIsIGluY2x1ZGluZyBkZWJ1ZyAKKyAgbWVzc2FnZXMsIHNldCB0aGUgZG1lc2cgbGV2ZWwgdG8gZWlnaHQuCisKKyAgTk9URTogVGhpcyBzZXR0aW5nIGlzIG5vdCBzYXZlZCBhY3Jvc3MgcmVib290cy4KKworICBFdGh0b29sCisgIC0tLS0tLS0KKworICBUaGUgZHJpdmVyIHV0aWxpemVzIHRoZSBldGh0b29sIGludGVyZmFjZSBmb3IgZHJpdmVyIGNvbmZpZ3VyYXRpb24gYW5kCisgIGRpYWdub3N0aWNzLCBhcyB3ZWxsIGFzIGRpc3BsYXlpbmcgc3RhdGlzdGljYWwgaW5mb3JtYXRpb24uICBFdGh0b29sCisgIHZlcnNpb24gMS42IG9yIGxhdGVyIGlzIHJlcXVpcmVkIGZvciB0aGlzIGZ1bmN0aW9uYWxpdHkuCisKKyAgVGhlIGxhdGVzdCByZWxlYXNlIG9mIGV0aHRvb2wgY2FuIGJlIGZvdW5kIGF0OgorICBodHRwOi8vc2YubmV0L3Byb2plY3RzL2drZXJuZWwuICAKKworICBOT1RFOiBUaGlzIGRyaXZlciB1c2VzIG1paSBzdXBwb3J0IGZyb20gdGhlIGtlcm5lbC4gQXMgYSByZXN1bHQsIHdoZW4gCisgIHRoZXJlIGlzIG5vIGxpbmssIGV0aHRvb2wgd2lsbCByZXBvcnQgc3BlZWQvZHVwbGV4IHRvIGJlIDEwL2hhbGYuCisKKyAgTk9URTogRXRodG9vbCAxLjYgb25seSBzdXBwb3J0cyBhIGxpbWl0ZWQgc2V0IG9mIGV0aHRvb2wgb3B0aW9ucy4gU3VwcG9ydCAKKyAgZm9yIGEgbW9yZSBjb21wbGV0ZSBldGh0b29sIGZlYXR1cmUgc2V0IGNhbiBiZSBlbmFibGVkIGJ5IHVwZ3JhZGluZyAKKyAgZXRodG9vbCB0byBldGh0b29sLTEuOC4xLiAKKworICBFbmFibGluZyBXYWtlIG9uIExBTiogKFdvTCkKKyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIFdvTCBpcyBwcm92aWRlZCB0aHJvdWdoIHRoZSBFdGh0b29sKiB1dGlsaXR5LiBFdGh0b29sIGlzIGluY2x1ZGVkIHdpdGggUmVkIAorICBIYXQqIDguMC4gRm9yIG90aGVyIExpbnV4IGRpc3RyaWJ1dGlvbnMsIGRvd25sb2FkIGFuZCBpbnN0YWxsIEV0aHRvb2wgZnJvbSAKKyAgdGhlIGZvbGxvd2luZyB3ZWJzaXRlOiBodHRwOi8vc291cmNlZm9yZ2UubmV0L3Byb2plY3RzL2drZXJuZWwuIAorCisgIEZvciBpbnN0cnVjdGlvbnMgb24gZW5hYmxpbmcgV29MIHdpdGggRXRodG9vbCwgcmVmZXIgdG8gdGhlIEV0aHRvb2wgbWFuCisgIHBhZ2UuCisKKyAgV29MIHdpbGwgYmUgZW5hYmxlZCBvbiB0aGUgc3lzdGVtIGR1cmluZyB0aGUgbmV4dCBzaHV0IGRvd24gb3IgcmVib290LiBGb3IKKyAgdGhpcyBkcml2ZXIgdmVyc2lvbiwgaW4gb3JkZXIgdG8gZW5hYmxlIFdvTCwgdGhlIGUxMDAgZHJpdmVyIG11c3QgYmUgCisgIGxvYWRlZCB3aGVuIHNodXR0aW5nIGRvd24gb3IgcmVib290aW5nIHRoZSBzeXN0ZW0uCisKKyAgTkFQSQorICAtLS0tCisKKyAgTkFQSSAoUnggcG9sbGluZyBtb2RlKSBpcyBzdXBwb3J0ZWQgaW4gdGhlIGUxMDAgZHJpdmVyLgorCisgIFNlZSB3d3cuY3liZXJ1cy5jYS9+aGFkaS91c2VuaXgtcGFwZXIudGd6IGZvciBtb3JlIGluZm9ybWF0aW9uIG9uIE5BUEkuCisKK1N1cHBvcnQKKz09PT09PT0KKworRm9yIGdlbmVyYWwgaW5mb3JtYXRpb24sIGdvIHRvIHRoZSBJbnRlbCBzdXBwb3J0IHdlYnNpdGUgYXQ6CisKKyAgICBodHRwOi8vc3VwcG9ydC5pbnRlbC5jb20KKworSWYgYW4gaXNzdWUgaXMgaWRlbnRpZmllZCB3aXRoIHRoZSByZWxlYXNlZCBzb3VyY2UgY29kZSBvbiB0aGUgc3VwcG9ydGVkCitrZXJuZWwgd2l0aCBhIHN1cHBvcnRlZCBhZGFwdGVyLCBlbWFpbCB0aGUgc3BlY2lmaWMgaW5mb3JtYXRpb24gcmVsYXRlZCB0byAKK3RoZSBpc3N1ZSB0byBsaW51eC5uaWNzQGludGVsLmNvbS4KKworCitMaWNlbnNlCis9PT09PT09CisKK1RoaXMgc29mdHdhcmUgcHJvZ3JhbSBpcyByZWxlYXNlZCB1bmRlciB0aGUgdGVybXMgb2YgYSBsaWNlbnNlIGFncmVlbWVudCAKK2JldHdlZW4geW91ICgnTGljZW5zZWUnKSBhbmQgSW50ZWwuIERvIG5vdCB1c2Ugb3IgbG9hZCB0aGlzIHNvZnR3YXJlIG9yIGFueSAKK2Fzc29jaWF0ZWQgbWF0ZXJpYWxzIChjb2xsZWN0aXZlbHksIHRoZSAnU29mdHdhcmUnKSB1bnRpbCB5b3UgaGF2ZSBjYXJlZnVsbHkgCityZWFkIHRoZSBmdWxsIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBMSUNFTlNFIGxvY2F0ZWQgaW4gdGhpcyBzb2Z0d2FyZSAKK3BhY2thZ2UuIEJ5IGxvYWRpbmcgb3IgdXNpbmcgdGhlIFNvZnR3YXJlLCB5b3UgYWdyZWUgdG8gdGhlIHRlcm1zIG9mIHRoaXMgCitBZ3JlZW1lbnQuIElmIHlvdSBkbyBub3QgYWdyZWUgd2l0aCB0aGUgdGVybXMgb2YgdGhpcyBBZ3JlZW1lbnQsIGRvIG5vdCAKK2luc3RhbGwgb3IgdXNlIHRoZSBTb2Z0d2FyZS4KKworKiBPdGhlciBuYW1lcyBhbmQgYnJhbmRzIG1heSBiZSBjbGFpbWVkIGFzIHRoZSBwcm9wZXJ0eSBvZiBvdGhlcnMuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZTEwMDAudHh0IGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2UxMDAwLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZWJkNDA1Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2UxMDAwLnR4dApAQCAtMCwwICsxLDQwMSBAQAorTGludXgqIEJhc2UgRHJpdmVyIGZvciB0aGUgSW50ZWwoUikgUFJPLzEwMDAgRmFtaWx5IG9mIEFkYXB0ZXJzCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworTm92ZW1iZXIgMTcsIDIwMDQKKworCitDb250ZW50cworPT09PT09PT0KKworLSBJbiBUaGlzIFJlbGVhc2UKKy0gSWRlbnRpZnlpbmcgWW91ciBBZGFwdGVyCistIENvbW1hbmQgTGluZSBQYXJhbWV0ZXJzCistIFNwZWVkIGFuZCBEdXBsZXggQ29uZmlndXJhdGlvbgorLSBBZGRpdGlvbmFsIENvbmZpZ3VyYXRpb25zCistIEtub3duIElzc3VlcworLSBTdXBwb3J0CisKKworSW4gVGhpcyBSZWxlYXNlCis9PT09PT09PT09PT09PT0KKworVGhpcyBmaWxlIGRlc2NyaWJlcyB0aGUgTGludXgqIEJhc2UgRHJpdmVyIGZvciB0aGUgSW50ZWwoUikgUFJPLzEwMDAgRmFtaWx5CitvZiBBZGFwdGVycywgdmVyc2lvbiA1LngueC4gIAorCitGb3IgcXVlc3Rpb25zIHJlbGF0ZWQgdG8gaGFyZHdhcmUgcmVxdWlyZW1lbnRzLCByZWZlciB0byB0aGUgZG9jdW1lbnRhdGlvbiAKK3N1cHBsaWVkIHdpdGggeW91ciBJbnRlbCBQUk8vMTAwMCBhZGFwdGVyLiBBbGwgaGFyZHdhcmUgcmVxdWlyZW1lbnRzIGxpc3RlZCAKK2FwcGx5IHRvIHVzZSB3aXRoIExpbnV4LgorCitOYXRpdmUgVkxBTnMgYXJlIG5vdyBhdmFpbGFibGUgd2l0aCBzdXBwb3J0ZWQga2VybmVscy4KKworSWRlbnRpZnlpbmcgWW91ciBBZGFwdGVyCis9PT09PT09PT09PT09PT09PT09PT09PT0KKworRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gaG93IHRvIGlkZW50aWZ5IHlvdXIgYWRhcHRlciwgZ28gdG8gdGhlIEFkYXB0ZXIgJiAKK0RyaXZlciBJRCBHdWlkZSBhdDoKKworICAgIGh0dHA6Ly9zdXBwb3J0LmludGVsLmNvbS9zdXBwb3J0L25ldHdvcmsvYWRhcHRlci9wcm8xMDAvMjEzOTcuaHRtCisKK0ZvciB0aGUgbGF0ZXN0IEludGVsIG5ldHdvcmsgZHJpdmVycyBmb3IgTGludXgsIHJlZmVyIHRvIHRoZSBmb2xsb3dpbmcgCit3ZWJzaXRlLiBJbiB0aGUgc2VhcmNoIGZpZWxkLCBlbnRlciB5b3VyIGFkYXB0ZXIgbmFtZSBvciB0eXBlLCBvciB1c2UgdGhlIAorbmV0d29ya2luZyBsaW5rIG9uIHRoZSBsZWZ0IHRvIHNlYXJjaCBmb3IgeW91ciBhZGFwdGVyOgorCisgICAgaHR0cDovL2Rvd25sb2FkZmluZGVyLmludGVsLmNvbS9zY3JpcHRzLWRmL3N1cHBvcnRfaW50ZWwuYXNwCisKK0NvbW1hbmQgTGluZSBQYXJhbWV0ZXJzCis9PT09PT09PT09PT09PT09PT09PT09PQorCitJZiB0aGUgZHJpdmVyIGlzIGJ1aWx0IGFzIGEgbW9kdWxlLCB0aGUgIGZvbGxvd2luZyBvcHRpb25hbCBwYXJhbWV0ZXJzIGFyZSAKK3VzZWQgYnkgZW50ZXJpbmcgdGhlbSBvbiB0aGUgY29tbWFuZCBsaW5lIHdpdGggdGhlIG1vZHByb2JlIG9yIGluc21vZCBjb21tYW5kCit1c2luZyB0aGlzIHN5bnRheDoKKworICAgICBtb2Rwcm9iZSBlMTAwMCBbPG9wdGlvbj49PFZBTDE+LDxWQUwyPiwuLi5dCisKKyAgICAgaW5zbW9kIGUxMDAwIFs8b3B0aW9uPj08VkFMMT4sPFZBTDI+LC4uLl0gCisKK0ZvciBleGFtcGxlLCB3aXRoIHR3byBQUk8vMTAwMCBQQ0kgYWRhcHRlcnMsIGVudGVyaW5nOgorCisgICAgIGluc21vZCBlMTAwMCBUeERlc2NyaXB0b3JzPTgwLDEyOAorCitsb2FkcyB0aGUgZTEwMDAgZHJpdmVyIHdpdGggODAgVFggZGVzY3JpcHRvcnMgZm9yIHRoZSBmaXJzdCBhZGFwdGVyIGFuZCAxMjggVFggCitkZXNjcmlwdG9ycyBmb3IgdGhlIHNlY29uZCBhZGFwdGVyLgorCitUaGUgZGVmYXVsdCB2YWx1ZSBmb3IgZWFjaCBwYXJhbWV0ZXIgaXMgZ2VuZXJhbGx5IHRoZSByZWNvbW1lbmRlZCBzZXR0aW5nLAordW5sZXNzIG90aGVyd2lzZSBub3RlZC4gQWxzbywgaWYgdGhlIGRyaXZlciBpcyBzdGF0aWNhbGx5IGJ1aWx0IGludG8gdGhlCitrZXJuZWwsIHRoZSBkcml2ZXIgaXMgbG9hZGVkIHdpdGggdGhlIGRlZmF1bHQgdmFsdWVzIGZvciBhbGwgdGhlIHBhcmFtZXRlcnMuCitFdGh0b29sIGNhbiBiZSB1c2VkIHRvIGNoYW5nZSBzb21lIG9mIHRoZSBwYXJhbWV0ZXJzIGF0IHJ1bnRpbWUuCisKKyAgICBOT1RFUzogRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgdGhlIEF1dG9OZWcsIER1cGxleCwgYW5kIFNwZWVkCisgICAgICAgICAgIHBhcmFtZXRlcnMsIHNlZSB0aGUgIlNwZWVkIGFuZCBEdXBsZXggQ29uZmlndXJhdGlvbiIgc2VjdGlvbiBpbiAKKyAgICAgICAgICAgdGhpcyBkb2N1bWVudC4KKworICAgICAgICAgICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgSW50ZXJydXB0VGhyb3R0bGVSYXRlLCBSeEludERlbGF5LCAKKyAgICAgICAgICAgVHhJbnREZWxheSwgUnhBYnNJbnREZWxheSwgYW5kIFR4QWJzSW50RGVsYXkgcGFyYW1ldGVycywgc2VlIHRoZSAKKyAgICAgICAgICAgYXBwbGljYXRpb24gbm90ZSBhdDoKKyAgICAgICAgICAgaHR0cDovL3d3dy5pbnRlbC5jb20vZGVzaWduL25ldHdvcmsvYXBwbG5vdHMvYXA0NTAuaHRtCisKKyAgICAgICAgICAgQSBkZXNjcmlwdG9yIGRlc2NyaWJlcyBhIGRhdGEgYnVmZmVyIGFuZCBhdHRyaWJ1dGVzIHJlbGF0ZWQgdG8gdGhlIAorICAgICAgICAgICBkYXRhIGJ1ZmZlci4gVGhpcyBpbmZvcm1hdGlvbiBpcyBhY2Nlc3NlZCBieSB0aGUgaGFyZHdhcmUuCisKK0F1dG9OZWcgKGFkYXB0ZXJzIHVzaW5nIGNvcHBlciBjb25uZWN0aW9ucyBvbmx5KQorVmFsaWQgUmFuZ2U6IDB4MDEtMHgwRiwgMHgyMC0weDJGCitEZWZhdWx0IFZhbHVlOiAweDJGCisgICAgVGhpcyBwYXJhbWV0ZXIgaXMgYSBiaXQgbWFzayB0aGF0IHNwZWNpZmllcyB3aGljaCBzcGVlZCBhbmQgZHVwbGV4CisgICAgc2V0dGluZ3MgdGhlIGJvYXJkIGFkdmVydGlzZXMuIFdoZW4gdGhpcyBwYXJhbWV0ZXIgaXMgdXNlZCwgdGhlIFNwZWVkIGFuZAorICAgIER1cGxleCBwYXJhbWV0ZXJzIG11c3Qgbm90IGJlIHNwZWNpZmllZC4KKyAgICBOT1RFOiBSZWZlciB0byB0aGUgU3BlZWQgYW5kIER1cGxleCBzZWN0aW9uIG9mIHRoaXMgcmVhZG1lIGZvciBtb3JlIAorICAgICAgICAgIGluZm9ybWF0aW9uIG9uIHRoZSBBdXRvTmVnIHBhcmFtZXRlci4gIAorCitEdXBsZXggKGFkYXB0ZXJzIHVzaW5nIGNvcHBlciBjb25uZWN0aW9ucyBvbmx5KQorVmFsaWQgUmFuZ2U6IDAtMiAoMD1hdXRvLW5lZ290aWF0ZSwgMT1oYWxmLCAyPWZ1bGwpCitEZWZhdWx0IFZhbHVlOiAwCisgICAgRGVmaW5lcyB0aGUgZGlyZWN0aW9uIGluIHdoaWNoIGRhdGEgaXMgYWxsb3dlZCB0byBmbG93LiBDYW4gYmUgZWl0aGVyIG9uZSAKKyAgICBvciB0d28tZGlyZWN0aW9uYWwuIElmIGJvdGggRHVwbGV4IGFuZCB0aGUgbGluayBwYXJ0bmVyIGFyZSBzZXQgdG8gYXV0by0KKyAgICBuZWdvdGlhdGUsIHRoZSBib2FyZCBhdXRvLWRldGVjdHMgdGhlIGNvcnJlY3QgZHVwbGV4LiBJZiB0aGUgbGluayBwYXJ0bmVyCisgICAgaXMgZm9yY2VkIChlaXRoZXIgZnVsbCBvciBoYWxmKSwgRHVwbGV4IGRlZmF1bHRzIHRvIGhhbGYtZHVwbGV4LgorCitGbG93Q29udHJvbAorVmFsaWQgUmFuZ2U6IDAtMyAoMD1ub25lLCAxPVJ4IG9ubHksIDI9VHggb25seSwgMz1SeCZUeCkKK0RlZmF1bHQ6IFJlYWQgZmxvdyBjb250cm9sIHNldHRpbmdzIGZyb20gdGhlIEVFUFJPTQorICAgIFRoaXMgcGFyYW1ldGVyIGNvbnRyb2xzIHRoZSBhdXRvbWF0aWMgZ2VuZXJhdGlvbihUeCkgYW5kIHJlc3BvbnNlKFJ4KSB0byAKKyAgICBFdGhlcm5ldCBQQVVTRSBmcmFtZXMuCisKK0ludGVycnVwdFRocm90dGxlUmF0ZQorVmFsaWQgUmFuZ2U6IDEwMC0xMDAwMDAgKDA9b2ZmLCAxPWR5bmFtaWMpCitEZWZhdWx0IFZhbHVlOiA4MDAwCisgICAgVGhpcyB2YWx1ZSByZXByZXNlbnRzIHRoZSBtYXhpbXVtIG51bWJlciBvZiBpbnRlcnJ1cHRzIHBlciBzZWNvbmQgdGhlIAorICAgIGNvbnRyb2xsZXIgZ2VuZXJhdGVzLiBJbnRlcnJ1cHRUaHJvdHRsZVJhdGUgaXMgYW5vdGhlciBzZXR0aW5nIHVzZWQgaW4gCisgICAgaW50ZXJydXB0IG1vZGVyYXRpb24uIER5bmFtaWMgbW9kZSB1c2VzIGEgaGV1cmlzdGljIGFsZ29yaXRobSB0byBhZGp1c3QgCisgICAgSW50ZXJydXB0VGhyb3R0bGVSYXRlIGJhc2VkIG9uIHRoZSBjdXJyZW50IHRyYWZmaWMgbG9hZC4KK1VuLXN1cHBvcnRlZCBBZGFwdGVyczogSW50ZXJydXB0VGhyb3R0bGVSYXRlIGlzIE5PVCBzdXBwb3J0ZWQgYnkgODI1NDIsIDgyNTQzCisgICAgb3IgODI1NDQtYmFzZWQgYWRhcHRlcnMuCisKKyAgICBOT1RFOiBJbnRlcnJ1cHRUaHJvdHRsZVJhdGUgdGFrZXMgcHJlY2VkZW5jZSBvdmVyIHRoZSBUeEFic0ludERlbGF5IGFuZCAKKyAgICAgICAgICBSeEFic0ludERlbGF5IHBhcmFtZXRlcnMuIEluIG90aGVyIHdvcmRzLCBtaW5pbWl6aW5nIHRoZSByZWNlaXZlIAorICAgICAgICAgIGFuZC9vciB0cmFuc21pdCBhYnNvbHV0ZSBkZWxheXMgZG9lcyBub3QgZm9yY2UgdGhlIGNvbnRyb2xsZXIgdG8gCisgICAgICAgICAgZ2VuZXJhdGUgbW9yZSBpbnRlcnJ1cHRzIHRoYW4gd2hhdCB0aGUgSW50ZXJydXB0IFRocm90dGxlIFJhdGUgCisgICAgICAgICAgYWxsb3dzLgorICAgIENBVVRJT046IElmIHlvdSBhcmUgdXNpbmcgdGhlIEludGVsIFBSTy8xMDAwIENUIE5ldHdvcmsgQ29ubmVjdGlvbiAKKyAgICAgICAgICAgICAoY29udHJvbGxlciA4MjU0NyksIHNldHRpbmcgSW50ZXJydXB0VGhyb3R0bGVSYXRlIHRvIGEgdmFsdWUgCisgICAgICAgICAgICAgZ3JlYXRlciB0aGFuIDc1LDAwMCwgbWF5IGhhbmcgKHN0b3AgdHJhbnNtaXR0aW5nKSBhZGFwdGVycyB1bmRlciAKKyAgICAgICAgICAgICBjZXJ0YWluIG5ldHdvcmsgY29uZGl0aW9ucy4gSWYgdGhpcyBvY2N1cnMgYSBORVRERVYgV0FUQ0hET0cgCisgICAgICAgICAgICAgbWVzc2FnZSBpcyBsb2dnZWQgaW4gdGhlIHN5c3RlbSBldmVudCBsb2cuIEluIGFkZGl0aW9uLCB0aGUgCisgICAgICAgICAgICAgY29udHJvbGxlciBpcyBhdXRvbWF0aWNhbGx5IHJlc2V0LCByZXN0b3JpbmcgdGhlIG5ldHdvcmsgCisgICAgICAgICAgICAgY29ubmVjdGlvbi4gVG8gZWxpbWluYXRlIHRoZSBwb3RlbnRpYWwgZm9yIHRoZSBoYW5nLCBlbnN1cmUgCisgICAgICAgICAgICAgdGhhdCBJbnRlcnJ1cHRUaHJvdHRsZVJhdGUgaXMgc2V0IG5vIGdyZWF0ZXIgdGhhbiA3NSwwMDAgYW5kIGlzIAorICAgICAgICAgICAgIG5vdCBzZXQgdG8gMC4KKyAgICBOT1RFOiBXaGVuIGUxMDAwIGlzIGxvYWRlZCB3aXRoIGRlZmF1bHQgc2V0dGluZ3MgYW5kIG11bHRpcGxlIGFkYXB0ZXJzIGFyZSAKKyAgICAgICAgICBpbiB1c2Ugc2ltdWx0YW5lb3VzbHksIHRoZSBDUFUgdXRpbGl6YXRpb24gbWF5IGluY3JlYXNlIG5vbi1saW5lYXJseS4gCisgICAgICAgICAgSW4gb3JkZXIgdG8gbGltaXQgdGhlIENQVSB1dGlsaXphdGlvbiB3aXRob3V0IGltcGFjdGluZyB0aGUgb3ZlcmFsbCAKKyAgICAgICAgICB0aHJvdWdocHV0LCB3ZSByZWNvbW1lbmQgdGhhdCB5b3UgbG9hZCB0aGUgZHJpdmVyIGFzIGZvbGxvd3M6CisKKyAgICAgICAgICAgICAgaW5zbW9kIGUxMDAwLm8gSW50ZXJydXB0VGhyb3R0bGVSYXRlPTMwMDAsMzAwMCwzMDAwCisKKyAgICAgICAgICBUaGlzIHNldHMgdGhlIEludGVycnVwdFRocm90dGxlUmF0ZSB0byAzMDAwIGludGVycnVwdHMvc2VjIGZvciB0aGUgCisgICAgICAgICAgZmlyc3QsIHNlY29uZCwgYW5kIHRoaXJkIGluc3RhbmNlcyBvZiB0aGUgZHJpdmVyLiBUaGUgcmFuZ2Ugb2YgMjAwMCB0byAKKyAgICAgICAgICAzMDAwIGludGVycnVwdHMgcGVyIHNlY29uZCB3b3JrcyBvbiBhIG1ham9yaXR5IG9mIHN5c3RlbXMgYW5kIGlzIGEgCisgICAgICAgICAgZ29vZCBzdGFydGluZyBwb2ludCwgYnV0IHRoZSBvcHRpbWFsIHZhbHVlIHdpbGwgYmUgcGxhdGZvcm0tc3BlY2lmaWMuIAorICAgICAgICAgIElmIENQVSB1dGlsaXphdGlvbiBpcyBub3QgYSBjb25jZXJuLCB1c2UgUlhfUE9MTElORyAoTkFQSSkgYW5kIGRlZmF1bHQgCisgICAgICAgICAgZHJpdmVyIHNldHRpbmdzLgorCitSeERlc2NyaXB0b3JzCitWYWxpZCBSYW5nZTogODAtMjU2IGZvciA4MjU0MiBhbmQgODI1NDMtYmFzZWQgYWRhcHRlcnMKKyAgICAgICAgICAgICA4MC00MDk2IGZvciBhbGwgb3RoZXIgc3VwcG9ydGVkIGFkYXB0ZXJzCitEZWZhdWx0IFZhbHVlOiAyNTYKKyAgICBUaGlzIHZhbHVlIGlzIHRoZSBudW1iZXIgb2YgcmVjZWl2ZSBkZXNjcmlwdG9ycyBhbGxvY2F0ZWQgYnkgdGhlIGRyaXZlci4gCisgICAgSW5jcmVhc2luZyB0aGlzIHZhbHVlIGFsbG93cyB0aGUgZHJpdmVyIHRvIGJ1ZmZlciBtb3JlIGluY29taW5nIHBhY2tldHMuIAorICAgIEVhY2ggZGVzY3JpcHRvciBpcyAxNiBieXRlcy4gIEEgcmVjZWl2ZSBidWZmZXIgaXMgYWxsb2NhdGVkIGZvciBlYWNoCisgICAgZGVzY3JpcHRvciBhbmQgY2FuIGVpdGhlciBiZSAyMDQ4IG9yIDQwOTYgYnl0ZXMgbG9uZywgZGVwZW5kaW5nIG9uIHRoZSBNVFUgCisKKyAgICBzZXR0aW5nLiBBbiBpbmNvbWluZyBwYWNrZXQgY2FuIHNwYW4gb25lIG9yIG1vcmUgcmVjZWl2ZSBkZXNjcmlwdG9ycy4gCisgICAgVGhlIG1heGltdW0gTVRVIHNpemUgaXMgMTYxMTAuCisKKyAgICBOT1RFOiBNVFUgZGVzaWduYXRlcyB0aGUgZnJhbWUgc2l6ZS4gSXQgb25seSBuZWVkcyB0byBiZSBzZXQgZm9yIEp1bWJvIAorICAgICAgICAgIEZyYW1lcy4KKyAgICBOT1RFOiBEZXBlbmRpbmcgb24gdGhlIGF2YWlsYWJsZSBzeXN0ZW0gcmVzb3VyY2VzLCB0aGUgcmVxdWVzdCBmb3IgYQorICAgIGhpZ2hlciBudW1iZXIgb2YgcmVjZWl2ZSBkZXNjcmlwdG9ycyBtYXkgYmUgZGVuaWVkLiAgSW4gdGhpcyBjYXNlLAorICAgIHVzZSBhIGxvd2VyIG51bWJlci4KKworUnhJbnREZWxheQorVmFsaWQgUmFuZ2U6IDAtNjU1MzUgKDA9b2ZmKQorRGVmYXVsdCBWYWx1ZTogMAorICAgIFRoaXMgdmFsdWUgZGVsYXlzIHRoZSBnZW5lcmF0aW9uIG9mIHJlY2VpdmUgaW50ZXJydXB0cyBpbiB1bml0cyBvZiAxLjAyNCAKKyAgICBtaWNyb3NlY29uZHMuICBSZWNlaXZlIGludGVycnVwdCByZWR1Y3Rpb24gY2FuIGltcHJvdmUgQ1BVIGVmZmljaWVuY3kgaWYgCisgICAgcHJvcGVybHkgdHVuZWQgZm9yIHNwZWNpZmljIG5ldHdvcmsgdHJhZmZpYy4gSW5jcmVhc2luZyB0aGlzIHZhbHVlIGFkZHMgCisgICAgZXh0cmEgbGF0ZW5jeSB0byBmcmFtZSByZWNlcHRpb24gYW5kIGNhbiBlbmQgdXAgZGVjcmVhc2luZyB0aGUgdGhyb3VnaHB1dCAKKyAgICBvZiBUQ1AgdHJhZmZpYy4gSWYgdGhlIHN5c3RlbSBpcyByZXBvcnRpbmcgZHJvcHBlZCByZWNlaXZlcywgdGhpcyB2YWx1ZSAKKyAgICBtYXkgYmUgc2V0IHRvbyBoaWdoLCBjYXVzaW5nIHRoZSBkcml2ZXIgdG8gcnVuIG91dCBvZiBhdmFpbGFibGUgcmVjZWl2ZSAKKyAgICBkZXNjcmlwdG9ycy4KKworICAgIENBVVRJT046IFdoZW4gc2V0dGluZyBSeEludERlbGF5IHRvIGEgdmFsdWUgb3RoZXIgdGhhbiAwLCBhZGFwdGVycyBtYXkgCisgICAgICAgICAgICAgaGFuZyAoc3RvcCB0cmFuc21pdHRpbmcpIHVuZGVyIGNlcnRhaW4gbmV0d29yayBjb25kaXRpb25zLiBJZiAKKyAgICAgICAgICAgICB0aGlzIG9jY3VycyBhIE5FVERFViBXQVRDSERPRyBtZXNzYWdlIGlzIGxvZ2dlZCBpbiB0aGUgc3lzdGVtCisgICAgICAgICAgICAgZXZlbnQgbG9nLiBJbiBhZGRpdGlvbiwgdGhlIGNvbnRyb2xsZXIgaXMgYXV0b21hdGljYWxseSByZXNldCwgCisgICAgICAgICAgICAgcmVzdG9yaW5nIHRoZSBuZXR3b3JrIGNvbm5lY3Rpb24uIFRvIGVsaW1pbmF0ZSB0aGUgcG90ZW50aWFsIGZvcgorICAgICAgICAgICAgIHRoZSBoYW5nIGVuc3VyZSB0aGF0IFJ4SW50RGVsYXkgaXMgc2V0IHRvIDAuCisKK1J4QWJzSW50RGVsYXkgKDgyNTQwLCA4MjU0NSBhbmQgbGF0ZXIgYWRhcHRlcnMgb25seSkKK1ZhbGlkIFJhbmdlOiAwLTY1NTM1ICgwPW9mZikKK0RlZmF1bHQgVmFsdWU6IDEyOAorICAgIFRoaXMgdmFsdWUsIGluIHVuaXRzIG9mIDEuMDI0IG1pY3Jvc2Vjb25kcywgbGltaXRzIHRoZSBkZWxheSBpbiB3aGljaCBhIAorICAgIHJlY2VpdmUgaW50ZXJydXB0IGlzIGdlbmVyYXRlZC4gVXNlZnVsIG9ubHkgaWYgUnhJbnREZWxheSBpcyBub24temVybywgCisgICAgdGhpcyB2YWx1ZSBlbnN1cmVzIHRoYXQgYW4gaW50ZXJydXB0IGlzIGdlbmVyYXRlZCBhZnRlciB0aGUgaW5pdGlhbCAKKyAgICBwYWNrZXQgaXMgcmVjZWl2ZWQgd2l0aGluIHRoZSBzZXQgYW1vdW50IG9mIHRpbWUuICBQcm9wZXIgdHVuaW5nLAorICAgIGFsb25nIHdpdGggUnhJbnREZWxheSwgbWF5IGltcHJvdmUgdHJhZmZpYyB0aHJvdWdocHV0IGluIHNwZWNpZmljIG5ldHdvcmsKKyAgICBjb25kaXRpb25zLgorCitTcGVlZCAoYWRhcHRlcnMgdXNpbmcgY29wcGVyIGNvbm5lY3Rpb25zIG9ubHkpCitWYWxpZCBTZXR0aW5nczogMCwgMTAsIDEwMCwgMTAwMAorRGVmYXVsdCBWYWx1ZTogMCAoYXV0by1uZWdvdGlhdGUgYXQgYWxsIHN1cHBvcnRlZCBzcGVlZHMpCisgICAgU3BlZWQgZm9yY2VzIHRoZSBsaW5lIHNwZWVkIHRvIHRoZSBzcGVjaWZpZWQgdmFsdWUgaW4gbWVnYWJpdHMgcGVyIHNlY29uZAorICAgIChNYnBzKS4gSWYgdGhpcyBwYXJhbWV0ZXIgaXMgbm90IHNwZWNpZmllZCBvciBpcyBzZXQgdG8gMCBhbmQgdGhlIGxpbmsgCisgICAgcGFydG5lciBpcyBzZXQgdG8gYXV0by1uZWdvdGlhdGUsIHRoZSBib2FyZCB3aWxsIGF1dG8tZGV0ZWN0IHRoZSBjb3JyZWN0IAorICAgIHNwZWVkLiBEdXBsZXggc2hvdWxkIGFsc28gYmUgc2V0IHdoZW4gU3BlZWQgaXMgc2V0IHRvIGVpdGhlciAxMCBvciAxMDAuCisKK1R4RGVzY3JpcHRvcnMKK1ZhbGlkIFJhbmdlOiA4MC0yNTYgZm9yIDgyNTQyIGFuZCA4MjU0My1iYXNlZCBhZGFwdGVycworICAgICAgICAgICAgIDgwLTQwOTYgZm9yIGFsbCBvdGhlciBzdXBwb3J0ZWQgYWRhcHRlcnMKK0RlZmF1bHQgVmFsdWU6IDI1NgorICAgIFRoaXMgdmFsdWUgaXMgdGhlIG51bWJlciBvZiB0cmFuc21pdCBkZXNjcmlwdG9ycyBhbGxvY2F0ZWQgYnkgdGhlIGRyaXZlci4KKyAgICBJbmNyZWFzaW5nIHRoaXMgdmFsdWUgYWxsb3dzIHRoZSBkcml2ZXIgdG8gcXVldWUgbW9yZSB0cmFuc21pdHMuIEVhY2ggCisgICAgZGVzY3JpcHRvciBpcyAxNiBieXRlcy4KKworICAgIE5PVEU6IERlcGVuZGluZyBvbiB0aGUgYXZhaWxhYmxlIHN5c3RlbSByZXNvdXJjZXMsIHRoZSByZXF1ZXN0IGZvciBhCisgICAgaGlnaGVyIG51bWJlciBvZiB0cmFuc21pdCBkZXNjcmlwdG9ycyBtYXkgYmUgZGVuaWVkLiAgSW4gdGhpcyBjYXNlLAorICAgIHVzZSBhIGxvd2VyIG51bWJlci4KKworVHhJbnREZWxheQorVmFsaWQgUmFuZ2U6IDAtNjU1MzUgKDA9b2ZmKQorRGVmYXVsdCBWYWx1ZTogNjQKKyAgICBUaGlzIHZhbHVlIGRlbGF5cyB0aGUgZ2VuZXJhdGlvbiBvZiB0cmFuc21pdCBpbnRlcnJ1cHRzIGluIHVuaXRzIG9mIAorICAgIDEuMDI0IG1pY3Jvc2Vjb25kcy4gVHJhbnNtaXQgaW50ZXJydXB0IHJlZHVjdGlvbiBjYW4gaW1wcm92ZSBDUFUKKyAgICBlZmZpY2llbmN5IGlmIHByb3Blcmx5IHR1bmVkIGZvciBzcGVjaWZpYyBuZXR3b3JrIHRyYWZmaWMuIElmIHRoZQorICAgIHN5c3RlbSBpcyByZXBvcnRpbmcgZHJvcHBlZCB0cmFuc21pdHMsIHRoaXMgdmFsdWUgbWF5IGJlIHNldCB0b28gaGlnaAorICAgIGNhdXNpbmcgdGhlIGRyaXZlciB0byBydW4gb3V0IG9mIGF2YWlsYWJsZSB0cmFuc21pdCBkZXNjcmlwdG9ycy4KKworVHhBYnNJbnREZWxheSAoODI1NDAsIDgyNTQ1IGFuZCBsYXRlciBhZGFwdGVycyBvbmx5KQorVmFsaWQgUmFuZ2U6IDAtNjU1MzUgKDA9b2ZmKQorRGVmYXVsdCBWYWx1ZTogNjQKKyAgICBUaGlzIHZhbHVlLCBpbiB1bml0cyBvZiAxLjAyNCBtaWNyb3NlY29uZHMsIGxpbWl0cyB0aGUgZGVsYXkgaW4gd2hpY2ggYSAKKyAgICB0cmFuc21pdCBpbnRlcnJ1cHQgaXMgZ2VuZXJhdGVkLiBVc2VmdWwgb25seSBpZiBUeEludERlbGF5IGlzIG5vbi16ZXJvLCAKKyAgICB0aGlzIHZhbHVlIGVuc3VyZXMgdGhhdCBhbiBpbnRlcnJ1cHQgaXMgZ2VuZXJhdGVkIGFmdGVyIHRoZSBpbml0aWFsIAorICAgIHBhY2tldCBpcyBzZW50IG9uIHRoZSB3aXJlIHdpdGhpbiB0aGUgc2V0IGFtb3VudCBvZiB0aW1lLiAgUHJvcGVyIHR1bmluZywKKyAgICBhbG9uZyB3aXRoIFR4SW50RGVsYXksIG1heSBpbXByb3ZlIHRyYWZmaWMgdGhyb3VnaHB1dCBpbiBzcGVjaWZpYyAKKyAgICBuZXR3b3JrIGNvbmRpdGlvbnMuCisKK1hzdW1SWCAobm90IGF2YWlsYWJsZSBvbiB0aGUgODI1NDItYmFzZWQgYWRhcHRlcikKK1ZhbGlkIFJhbmdlOiAwLTEKK0RlZmF1bHQgVmFsdWU6IDEKKyAgICBBIHZhbHVlIG9mICcxJyBpbmRpY2F0ZXMgdGhhdCB0aGUgZHJpdmVyIHNob3VsZCBlbmFibGUgSVAgY2hlY2tzdW0KKyAgICBvZmZsb2FkIGZvciByZWNlaXZlZCBwYWNrZXRzIChib3RoIFVEUCBhbmQgVENQKSB0byB0aGUgYWRhcHRlciBoYXJkd2FyZS4KKworU3BlZWQgYW5kIER1cGxleCBDb25maWd1cmF0aW9uCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworVGhyZWUga2V5d29yZHMgYXJlIHVzZWQgdG8gY29udHJvbCB0aGUgc3BlZWQgYW5kIGR1cGxleCBjb25maWd1cmF0aW9uLiBUaGVzZSAKK2tleXdvcmRzIGFyZSBTcGVlZCwgRHVwbGV4LCBhbmQgQXV0b05lZy4KKworSWYgdGhlIGJvYXJkIHVzZXMgYSBmaWJlciBpbnRlcmZhY2UsIHRoZXNlIGtleXdvcmRzIGFyZSBpZ25vcmVkLCBhbmQgdGhlIAorZmliZXIgaW50ZXJmYWNlIGJvYXJkIG9ubHkgbGlua3MgYXQgMTAwMCBNYnBzIGZ1bGwtZHVwbGV4LgorCitGb3IgY29wcGVyLWJhc2VkIGJvYXJkcywgdGhlIGtleXdvcmRzIGludGVyYWN0IGFzIGZvbGxvd3M6CisKKyAgVGhlIGRlZmF1bHQgb3BlcmF0aW9uIGlzIGF1dG8tbmVnb3RpYXRlLiBUaGUgYm9hcmQgYWR2ZXJ0aXNlcyBhbGwgc3VwcG9ydGVkCisgIHNwZWVkIGFuZCBkdXBsZXggY29tYmluYXRpb25zLCBhbmQgaXQgbGlua3MgYXQgdGhlIGhpZ2hlc3QgY29tbW9uIHNwZWVkIGFuZAorICBkdXBsZXggbW9kZSBJRiB0aGUgbGluayBwYXJ0bmVyIGlzIHNldCB0byBhdXRvLW5lZ290aWF0ZS4KKworICBJZiBTcGVlZCA9IDEwMDAsIGxpbWl0ZWQgYXV0by1uZWdvdGlhdGlvbiBpcyBlbmFibGVkIGFuZCBvbmx5IDEwMDAgTWJwcyBpcworICBhZHZlcnRpc2VkIChUaGUgMTAwMEJhc2VUIHNwZWMgcmVxdWlyZXMgYXV0by1uZWdvdGlhdGlvbi4pCisKKyAgSWYgU3BlZWQgPSAxMCBvciAxMDAsIHRoZW4gYm90aCBTcGVlZCBhbmQgRHVwbGV4IHNob3VsZCBiZSBzZXQuIEF1dG8tCisgIG5lZ290aWF0aW9uIGlzIGRpc2FibGVkLCBhbmQgdGhlIEF1dG9OZWcgcGFyYW1ldGVyIGlzIGlnbm9yZWQuIFBhcnRuZXIgU0hPVUxECisgIGFsc28gYmUgZm9yY2VkLgorCitUaGUgQXV0b05lZyBwYXJhbWV0ZXIgaXMgdXNlZCB3aGVuIG1vcmUgY29udHJvbCBpcyByZXF1aXJlZCBvdmVyIHRoZSBhdXRvLQorbmVnb3RpYXRpb24gcHJvY2Vzcy4gV2hlbiB0aGlzIHBhcmFtZXRlciBpcyB1c2VkLCBTcGVlZCBhbmQgRHVwbGV4IHBhcmFtZXRlcnMgCittdXN0IG5vdCBiZSBzcGVjaWZpZWQuIFRoZSBmb2xsb3dpbmcgdGFibGUgZGVzY3JpYmVzIHN1cHBvcnRlZCB2YWx1ZXMgZm9yIHRoZSAKK0F1dG9OZWcgcGFyYW1ldGVyOgorCitTcGVlZCAoTWJwcykgICAJCSAxMDAwICAgICAgMTAwICAgIDEwMCAgICAxMCAgICAgMTAKK0R1cGxleCAgICAgICAgICAgICAgICAgICBGdWxsICAgICAgRnVsbCAgIEhhbGYgICBGdWxsICAgSGFsZgorVmFsdWUgKGluIGJhc2UgMTYpICAgICAgIDB4MjAgICAgICAweDA4ICAgMHgwNCAgIDB4MDIgICAweDAxCisKK0V4YW1wbGU6IGluc21vZCBlMTAwMCBBdXRvTmVnPTB4MDMsIGxvYWRzIGUxMDAwIGFuZCBzcGVjaWZpZXMgKDEwIGZ1bGwgZHVwbGV4LCAKKzEwIGhhbGYgZHVwbGV4KSBmb3IgbmVnb3RpYXRpb24gd2l0aCB0aGUgcGVlci4KKworTm90ZSB0aGF0IHNldHRpbmcgQXV0b05lZyBkb2VzIG5vdCBndWFyYW50ZWUgdGhhdCB0aGUgYm9hcmQgd2lsbCBsaW5rIGF0IHRoZSAKK2hpZ2hlc3Qgc3BlY2lmaWVkIHNwZWVkIG9yIGR1cGxleCBtb2RlLCBidXQgdGhlIGJvYXJkIHdpbGwgbGluayBhdCB0aGUgCitoaWdoZXN0IHBvc3NpYmxlIHNwZWVkL2R1cGxleCBvZiB0aGUgbGluayBwYXJ0bmVyIElGIHRoZSBsaW5rIHBhcnRuZXIgaXMgYWxzbworc2V0IHRvIGF1dG8tbmVnb3RpYXRlLiBJZiB0aGUgbGluayBwYXJ0bmVyIGlzIGZvcmNlZCBzcGVlZC9kdXBsZXgsIHRoZSAKK2FkYXB0ZXIgTVVTVCBiZSBmb3JjZWQgdG8gdGhlIHNhbWUgc3BlZWQvZHVwbGV4LgorCisKK0FkZGl0aW9uYWwgQ29uZmlndXJhdGlvbnMKKz09PT09PT09PT09PT09PT09PT09PT09PT0KKworICBDb25maWd1cmluZyB0aGUgRHJpdmVyIG9uIERpZmZlcmVudCBEaXN0cmlidXRpb25zCisgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICBDb25maWd1cmluZyBhIG5ldHdvcmsgZHJpdmVyIHRvIGxvYWQgcHJvcGVybHkgd2hlbiB0aGUgc3lzdGVtIGlzIHN0YXJ0ZWQgaXMKKyAgZGlzdHJpYnV0aW9uIGRlcGVuZGVudC4gVHlwaWNhbGx5LCB0aGUgY29uZmlndXJhdGlvbiBwcm9jZXNzIGludm9sdmVzIGFkZGluZworICBhbiBhbGlhcyBsaW5lIHRvIC9ldGMvbW9kdWxlcy5jb25mIGFzIHdlbGwgYXMgZWRpdGluZyBvdGhlciBzeXN0ZW0gc3RhcnR1cCAKKyAgc2NyaXB0cyBhbmQvb3IgY29uZmlndXJhdGlvbiBmaWxlcy4gTWFueSBwb3B1bGFyIExpbnV4IGRpc3RyaWJ1dGlvbnMgc2hpcCAKKyAgd2l0aCB0b29scyB0byBtYWtlIHRoZXNlIGNoYW5nZXMgZm9yIHlvdS4gVG8gbGVhcm4gdGhlIHByb3BlciB3YXkgdG8gCisgIGNvbmZpZ3VyZSBhIG5ldHdvcmsgZGV2aWNlIGZvciB5b3VyIHN5c3RlbSwgcmVmZXIgdG8geW91ciBkaXN0cmlidXRpb24gCisgIGRvY3VtZW50YXRpb24uIElmIGR1cmluZyB0aGlzIHByb2Nlc3MgeW91IGFyZSBhc2tlZCBmb3IgdGhlIGRyaXZlciBvciBtb2R1bGUgCisgIG5hbWUsIHRoZSBuYW1lIGZvciB0aGUgTGludXggQmFzZSBEcml2ZXIgZm9yIHRoZSBJbnRlbCBQUk8vMTAwMCBGYW1pbHkgb2YgCisgIEFkYXB0ZXJzIGlzIGUxMDAwLgorCisgIEFzIGFuIGV4YW1wbGUsIGlmIHlvdSBpbnN0YWxsIHRoZSBlMTAwMCBkcml2ZXIgZm9yIHR3byBQUk8vMTAwMCBhZGFwdGVycyAKKyAgKGV0aDAgYW5kIGV0aDEpIGFuZCBzZXQgdGhlIHNwZWVkIGFuZCBkdXBsZXggdG8gMTBmdWxsIGFuZCAxMDBoYWxmLCBhZGQgdGhlIAorICBmb2xsb3dpbmcgdG8gbW9kdWxlcy5jb25mOgorCisgICAgICAgYWxpYXMgZXRoMCBlMTAwMAorICAgICAgIGFsaWFzIGV0aDEgZTEwMDAKKyAgICAgICBvcHRpb25zIGUxMDAwIFNwZWVkPTEwLDEwMCBEdXBsZXg9MiwxCisKKyAgVmlld2luZyBMaW5rIE1lc3NhZ2VzCisgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgIExpbmsgbWVzc2FnZXMgd2lsbCBub3QgYmUgZGlzcGxheWVkIHRvIHRoZSBjb25zb2xlIGlmIHRoZSBkaXN0cmlidXRpb24gaXMgCisgIHJlc3RyaWN0aW5nIHN5c3RlbSBtZXNzYWdlcy4gSW4gb3JkZXIgdG8gc2VlIG5ldHdvcmsgZHJpdmVyIGxpbmsgbWVzc2FnZXMgb24gCisgIHlvdXIgY29uc29sZSwgc2V0IGRtZXNnIHRvIGVpZ2h0IGJ5IGVudGVyaW5nIHRoZSBmb2xsb3dpbmc6CisKKyAgICAgICBkbWVzZyAtbiA4CisKKyAgTk9URTogVGhpcyBzZXR0aW5nIGlzIG5vdCBzYXZlZCBhY3Jvc3MgcmVib290cy4KKworICBKdW1ibyBGcmFtZXMKKyAgLS0tLS0tLS0tLS0tCisKKyAgVGhlIGRyaXZlciBzdXBwb3J0cyBKdW1ibyBGcmFtZXMgZm9yIGFsbCBhZGFwdGVycyBleGNlcHQgODI1NDItYmFzZWQgCisgIGFkYXB0ZXJzLiBKdW1ibyBGcmFtZXMgc3VwcG9ydCBpcyBlbmFibGVkIGJ5IGNoYW5naW5nIHRoZSBNVFUgdG8gYSB2YWx1ZSAKKyAgbGFyZ2VyIHRoYW4gdGhlIGRlZmF1bHQgb2YgMTUwMC4gVXNlIHRoZSBpZmNvbmZpZyBjb21tYW5kIHRvIGluY3JlYXNlIHRoZSAKKyAgTVRVIHNpemUuIEZvciBleGFtcGxlOgorCisgICAgICAgIGlmY29uZmlnIGV0aHggbXR1IDkwMDAgdXAKKworICBUaGUgbWF4aW11bSBNVFUgc2V0dGluZyBmb3IgSnVtYm8gRnJhbWVzIGlzIDE2MTEwLiBUaGlzIHZhbHVlIGNvaW5jaWRlcyAKKyAgd2l0aCB0aGUgbWF4aW11bSBKdW1ibyBGcmFtZXMgc2l6ZSBvZiAxNjEyOC4KKworICBOT1RFOiBKdW1ibyBGcmFtZXMgYXJlIHN1cHBvcnRlZCBhdCAxMDAwIE1icHMgb25seS4gVXNpbmcgSnVtYm8gRnJhbWVzIGF0IAorICAxMCBvciAxMDAgTWJwcyBtYXkgcmVzdWx0IGluIHBvb3IgcGVyZm9ybWFuY2Ugb3IgbG9zcyBvZiBsaW5rLgorCisKKyAgTk9URTogTVRVIGRlc2lnbmF0ZXMgdGhlIGZyYW1lIHNpemUuIFRvIGVuYWJsZSBKdW1ibyBGcmFtZXMsIGluY3JlYXNlIHRoZQorICBNVFUgc2l6ZSBvbiB0aGUgaW50ZXJmYWNlIGJleW9uZCAxNTAwLgorCisgIEV0aHRvb2wKKyAgLS0tLS0tLQorCisgIFRoZSBkcml2ZXIgdXRpbGl6ZXMgdGhlIGV0aHRvb2wgaW50ZXJmYWNlIGZvciBkcml2ZXIgY29uZmlndXJhdGlvbiBhbmQKKyAgZGlhZ25vc3RpY3MsIGFzIHdlbGwgYXMgZGlzcGxheWluZyBzdGF0aXN0aWNhbCBpbmZvcm1hdGlvbi4gIEV0aHRvb2wKKyAgdmVyc2lvbiAxLjYgb3IgbGF0ZXIgaXMgcmVxdWlyZWQgZm9yIHRoaXMgZnVuY3Rpb25hbGl0eS4KKworICBUaGUgbGF0ZXN0IHJlbGVhc2Ugb2YgZXRodG9vbCBjYW4gYmUgZm91bmQgZnJvbQorICBodHRwOi8vc2YubmV0L3Byb2plY3RzL2drZXJuZWwuICAKKworICBOT1RFOiBFdGh0b29sIDEuNiBvbmx5IHN1cHBvcnRzIGEgbGltaXRlZCBzZXQgb2YgZXRodG9vbCBvcHRpb25zLiBTdXBwb3J0IAorICBmb3IgYSBtb3JlIGNvbXBsZXRlIGV0aHRvb2wgZmVhdHVyZSBzZXQgY2FuIGJlIGVuYWJsZWQgYnkgdXBncmFkaW5nIAorICBldGh0b29sIHRvIGV0aHRvb2wtMS44LjEuIAorCisgIEVuYWJsaW5nIFdha2Ugb24gTEFOKiAoV29MKQorICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICBXb0wgaXMgY29uZmlndXJlZCB0aHJvdWdoIHRoZSBFdGh0b29sKiB1dGlsaXR5LiBFdGh0b29sIGlzIGluY2x1ZGVkIHdpdGgKKyAgYWxsIHZlcnNpb25zIG9mIFJlZCBIYXQgYWZ0ZXIgUmVkIEhhdCA3LjIuIEZvciBvdGhlciBMaW51eCBkaXN0cmlidXRpb25zLCAKKyAgZG93bmxvYWQgYW5kIGluc3RhbGwgRXRodG9vbCBmcm9tIHRoZSBmb2xsb3dpbmcgd2Vic2l0ZTogCisgIGh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvcHJvamVjdHMvZ2tlcm5lbC4KKworICBGb3IgaW5zdHJ1Y3Rpb25zIG9uIGVuYWJsaW5nIFdvTCB3aXRoIEV0aHRvb2wsIHJlZmVyIHRvIHRoZSB3ZWJzaXRlIGxpc3RlZCAKKyAgYWJvdmUuCisKKyAgV29MIHdpbGwgYmUgZW5hYmxlZCBvbiB0aGUgc3lzdGVtIGR1cmluZyB0aGUgbmV4dCBzaHV0IGRvd24gb3IgcmVib290LiAKKyAgRm9yIHRoaXMgZHJpdmVyIHZlcnNpb24sIGluIG9yZGVyIHRvIGVuYWJsZSBXb0wsIHRoZSBlMTAwMCBkcml2ZXIgbXVzdCBiZSAKKyAgbG9hZGVkIHdoZW4gc2h1dHRpbmcgZG93biBvciByZWJvb3RpbmcgdGhlIHN5c3RlbS4KKworICBOQVBJCisgIC0tLS0KKworICBOQVBJIChSeCBwb2xsaW5nIG1vZGUpIGlzIHN1cHBvcnRlZCBpbiB0aGUgZTEwMDAgZHJpdmVyLiBOQVBJIGlzIGVuYWJsZWQKKyAgb3IgZGlzYWJsZWQgYmFzZWQgb24gdGhlIGNvbmZpZ3VyYXRpb24gb2YgdGhlIGtlcm5lbC4gCisKKyAgU2VlIHd3dy5jeWJlcnVzLmNhL35oYWRpL3VzZW5peC1wYXBlci50Z3ogZm9yIG1vcmUgaW5mb3JtYXRpb24gb24gTkFQSS4KKworCitLbm93biBJc3N1ZXMKKz09PT09PT09PT09PQorCisgIEp1bWJvIEZyYW1lcyBTeXN0ZW0gUmVxdWlyZW1lbnQKKyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgIE1lbW9yeSBhbGxvY2F0aW9uIGZhaWx1cmVzIGhhdmUgYmVlbiBvYnNlcnZlZCBvbiBMaW51eCBzeXN0ZW1zIHdpdGggNjQgTUIgCisgIG9mIFJBTSBvciBsZXNzIHRoYXQgYXJlIHJ1bm5pbmcgSnVtYm8gRnJhbWVzLiBJZiB5b3UgYXJlIHVzaW5nIEp1bWJvIEZyYW1lcywKKyAgeW91ciBzeXN0ZW0gbWF5IHJlcXVpcmUgbW9yZSB0aGFuIHRoZSBhZHZlcnRpc2VkIG1pbmltdW0gcmVxdWlyZW1lbnQgb2YgNjQgTUIKKyAgb2Ygc3lzdGVtIG1lbW9yeS4KKworCitTdXBwb3J0Cis9PT09PT09CisKK0ZvciBnZW5lcmFsIGluZm9ybWF0aW9uLCBnbyB0byB0aGUgSW50ZWwgc3VwcG9ydCB3ZWJzaXRlIGF0OgorCisgICAgaHR0cDovL3N1cHBvcnQuaW50ZWwuY29tCisKK0lmIGFuIGlzc3VlIGlzIGlkZW50aWZpZWQgd2l0aCB0aGUgcmVsZWFzZWQgc291cmNlIGNvZGUgb24gdGhlIHN1cHBvcnRlZAora2VybmVsIHdpdGggYSBzdXBwb3J0ZWQgYWRhcHRlciwgZW1haWwgdGhlIHNwZWNpZmljIGluZm9ybWF0aW9uIHJlbGF0ZWQgdG8gCit0aGUgaXNzdWUgdG8gbGludXgubmljc0BpbnRlbC5jb20uCisKKworTGljZW5zZQorPT09PT09PQorCitUaGlzIHNvZnR3YXJlIHByb2dyYW0gaXMgcmVsZWFzZWQgdW5kZXIgdGhlIHRlcm1zIG9mIGEgbGljZW5zZSBhZ3JlZW1lbnQgCitiZXR3ZWVuIHlvdSAoJ0xpY2Vuc2VlJykgYW5kIEludGVsLiBEbyBub3QgdXNlIG9yIGxvYWQgdGhpcyBzb2Z0d2FyZSBvciBhbnkgCithc3NvY2lhdGVkIG1hdGVyaWFscyAoY29sbGVjdGl2ZWx5LCB0aGUgJ1NvZnR3YXJlJykgdW50aWwgeW91IGhhdmUgY2FyZWZ1bGx5IAorcmVhZCB0aGUgZnVsbCB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgTElDRU5TRSBsb2NhdGVkIGluIHRoaXMgc29mdHdhcmUgCitwYWNrYWdlLiBCeSBsb2FkaW5nIG9yIHVzaW5nIHRoZSBTb2Z0d2FyZSwgeW91IGFncmVlIHRvIHRoZSB0ZXJtcyBvZiB0aGlzIAorQWdyZWVtZW50LiBJZiB5b3UgZG8gbm90IGFncmVlIHdpdGggdGhlIHRlcm1zIG9mIHRoaXMgQWdyZWVtZW50LCBkbyBub3QgCitpbnN0YWxsIG9yIHVzZSB0aGUgU29mdHdhcmUuCisKKyogT3RoZXIgbmFtZXMgYW5kIGJyYW5kcyBtYXkgYmUgY2xhaW1lZCBhcyB0aGUgcHJvcGVydHkgb2Ygb3RoZXJzLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2VxbC50eHQgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZXFsLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZjE1NTAxCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2VxbC50eHQKQEAgLTAsMCArMSw1MjggQEAKKyAgRVFMIERyaXZlcjogU2VyaWFsIElQIExvYWQgQmFsYW5jaW5nIEhPV1RPCisgIFNpbW9uICJHdXJ1IEFsZXBoLU51bGwiIEphbmVzLCBzaW1vbkBuY20uY29tCisgIHYxLjEsIEZlYnJ1YXJ5IDI3LCAxOTk1CisKKyAgVGhpcyBpcyB0aGUgbWFudWFsIGZvciB0aGUgRVFMIGRldmljZSBkcml2ZXIuIEVRTCBpcyBhIHNvZnR3YXJlIGRldmljZQorICB0aGF0IGxldHMgeW91IGxvYWQtYmFsYW5jZSBJUCBzZXJpYWwgbGlua3MgKFNMSVAgb3IgdW5jb21wcmVzc2VkIFBQUCkKKyAgdG8gaW5jcmVhc2UgeW91ciBiYW5kd2lkdGguIEl0IHdpbGwgbm90IHJlZHVjZSB5b3VyIGxhdGVuY3kgKGkuZS4gcGluZworICB0aW1lcykgZXhjZXB0IGluIHRoZSBjYXNlIHdoZXJlIHlvdSBhbHJlYWR5IGhhdmUgbG90cyBvZiB0cmFmZmljIG9uCisgIHlvdXIgbGluaywgaW4gd2hpY2ggaXQgd2lsbCBoZWxwIHRoZW0gb3V0LiBUaGlzIGRyaXZlciBoYXMgYmVlbiB0ZXN0ZWQKKyAgd2l0aCB0aGUgMS4xLjc1IGtlcm5lbCwgYW5kIGlzIGtub3duIHRvIGhhdmUgcGF0Y2hlZCBjbGVhbmx5IHdpdGgKKyAgMS4xLjg2LiAgU29tZSB0ZXN0aW5nIHdpdGggMS4xLjkyIGhhcyBiZWVuIGRvbmUgd2l0aCB0aGUgdjEuMSBwYXRjaAorICB3aGljaCB3YXMgb25seSBjcmVhdGVkIHRvIHBhdGNoIGNsZWFubHkgaW4gdGhlIHZlcnkgbGF0ZXN0IGtlcm5lbAorICBzb3VyY2UgdHJlZXMuIChZZXMsIGl0IHdvcmtlZCBmaW5lLikKKworICAxLiAgSW50cm9kdWN0aW9uCisKKyAgV2hpY2ggaXMgd29yc2U/IEEgaHVnZSBmZWUgZm9yIGEgNTZLIGxlYXNlZCBsaW5lIG9yIHR3byBwaG9uZSBsaW5lcz8KKyAgSXQncyBwcm9iYWJseSB0aGUgZm9ybWVyLiAgSWYgeW91IGZpbmQgeW91cnNlbGYgY3JhdmluZyBtb3JlIGJhbmR3aWR0aCwKKyAgYW5kIGhhdmUgYSBJU1AgdGhhdCBpcyBmbGV4aWJsZSwgaXQgaXMgbm93IHBvc3NpYmxlIHRvIGJpbmQgbW9kZW1zCisgIHRvZ2V0aGVyIHRvIHdvcmsgYXMgb25lIHBvaW50LXRvLXBvaW50IGxpbmsgdG8gaW5jcmVhc2UgeW91cgorICBiYW5kd2lkdGguICBBbGwgd2l0aG91dCBoYXZpbmcgdG8gaGF2ZSBhIHNwZWNpYWwgYmxhY2sgYm94IG9uIGVpdGhlcgorICBzaWRlLgorCisKKyAgVGhlIGVxbCBkcml2ZXIgaGFzIG9ubHkgYmVlbiB0ZXN0ZWQgd2l0aCB0aGUgTGl2aW5nc3RvbiBQb3J0TWFzdGVyLTJlCisgIHRlcm1pbmFsIHNlcnZlci4gSSBkbyBub3Qga25vdyBpZiBvdGhlciB0ZXJtaW5hbCBzZXJ2ZXJzIHN1cHBvcnQgbG9hZC0KKyAgYmFsYW5jaW5nLCBidXQgSSBkbyBrbm93IHRoYXQgdGhlIFBvcnRNYXN0ZXIgZG9lcyBpdCwgYW5kIGRvZXMgaXQKKyAgYWxtb3N0IGFzIHdlbGwgYXMgdGhlIGVxbCBkcml2ZXIgc2VlbXMgdG8gZG8gaXQgKC0tIFVuZm9ydHVuYXRlbHksIGluCisgIG15IHRlc3Rpbmcgc28gZmFyLCB0aGUgTGl2aW5nc3RvbiBQb3J0TWFzdGVyIDJlJ3MgbG9hZC1iYWxhbmNpbmcgaXMgYQorICBnb29kIDEgdG8gMiBLQi9zIHNsb3dlciB0aGFuIHRoZSB0ZXN0IG1hY2hpbmUgd29ya2luZyB3aXRoIGEgMjguOCBLYnBzCisgIGFuZCAxNC40IEticHMgY29ubmVjdGlvbi4gIEhvd2V2ZXIsIEkgYW0gbm90IHN1cmUgdGhhdCBpdCByZWFsbHkgaXMKKyAgdGhlIFBvcnRNYXN0ZXIsIG9yIGlmIGl0J3MgTGludXgncyBUQ1AgZHJpdmVycy4gSSdtIHRvbGQgdGhhdCBMaW51eCdzCisgIFRDUCBpbXBsZW1lbnRhdGlvbiBpcyBwcmV0dHkgZmFzdCB0aG91Z2guLS0pCisKKworICBJIHN1Z2dlc3QgdG8gSVNQcyBvdXQgdGhlcmUgdGhhdCBpdCB3b3VsZCBwcm9iYWJseSBiZSBmYWlyIHRvIGNoYXJnZQorICBhIGxvYWQtYmFsYW5jaW5nIGNsaWVudCA3NSUgb2YgdGhlIGNvc3Qgb2YgdGhlIHNlY29uZCBsaW5lIGFuZCA1MCUgb2YKKyAgdGhlIGNvc3Qgb2YgdGhlIHRoaXJkIGxpbmUgZXRjLi4uCisKKworICBIZXksIHdlIGNhbiBhbGwgZHJlYW0geW91IGtub3cuLi4KKworCisgIDIuICBLZXJuZWwgQ29uZmlndXJhdGlvbgorCisgIEhlcmUgSSBkZXNjcmliZSB0aGUgZ2VuZXJhbCBzdGVwcyBvZiBnZXR0aW5nIGEga2VybmVsIHVwIGFuZCB3b3JraW5nCisgIHdpdGggdGhlIGVxbCBkcml2ZXIuCUZyb20gcGF0Y2hpbmcsIGJ1aWxkaW5nLCB0byBpbnN0YWxsaW5nLgorCisKKyAgMi4xLglQYXRjaGluZyBUaGUgS2VybmVsCisKKyAgSWYgeW91IGRvIG5vdCBoYXZlIG9yIGNhbm5vdCBnZXQgYSBjb3B5IG9mIHRoZSBrZXJuZWwgd2l0aCB0aGUgZXFsCisgIGRyaXZlciBmb2xkZWQgaW50byBpdCwgZ2V0IHlvdXIgY29weSBvZiB0aGUgZHJpdmVyIGZyb20KKyAgZnRwOi8vc2xhdWdodGVyLm5jbS5jb20vcHViL0xpbnV4L0xPQURfQkFMQU5DSU5HL2VxbC0xLjEudGFyLmd6LgorICBVbnBhY2sgdGhpcyBhcmNoaXZlIHNvbWVwbGFjZSBvYnZpb3VzIGxpa2UgL3Vzci9sb2NhbC9zcmMvLiAgSXQgd2lsbAorICBjcmVhdGUgdGhlIGZvbGxvd2luZyBmaWxlczoKKworCisKKyAgICAgICBfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCisgICAgICAgLXJ3LXItLXItLSBndXJ1L25jbQkxOTggSmFuIDE5IDE4OjUzIDE5OTUgZXFsLTEuMS9OTy1XQVJSQU5UWQorICAgICAgIC1ydy1yLS1yLS0gZ3VydS9uY20JMzA2MjAgRmViIDI3IDIxOjQwIDE5OTUgZXFsLTEuMS9lcWwtMS4xLnBhdGNoCisgICAgICAgLXJ3eHIteHIteCBndXJ1L25jbQkxNjExMSBKYW4gMTIgMjI6MjkgMTk5NSBlcWwtMS4xL2VxbF9lbnNsYXZlCisgICAgICAgLXJ3LXItLXItLSBndXJ1L25jbQkyMTk1IEphbiAxMCAyMTo0OCAxOTk1IGVxbC0xLjEvZXFsX2Vuc2xhdmUuYworICAgICAgIF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KKworICBVbnBhY2sgYSByZWNlbnQga2VybmVsIChzb21ldGhpbmcgYWZ0ZXIgMS4xLjkyKSBzb21lcGxhY2UgY29udmVuaWVudAorICBsaWtlIHNheSAvdXNyL3NyYy9saW51eC0xLjEuOTIuZXFsLiBVc2Ugc3ltYm9saWMgbGlua3MgdG8gcG9pbnQKKyAgL3Vzci9zcmMvbGludXggdG8gdGhpcyBkZXZlbG9wbWVudCBkaXJlY3RvcnkuCisKKworICBBcHBseSB0aGUgcGF0Y2ggYnkgcnVubmluZyB0aGUgY29tbWFuZHM6CisKKworICAgICAgIF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KKyAgICAgICBjZCAvdXNyL3NyYworICAgICAgIHBhdGNoIDwvdXNyL2xvY2FsL3NyYy9lcWwtMS4xL2VxbC0xLjEucGF0Y2gKKyAgICAgICBfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCisKKworCisKKworICAyLjIuCUJ1aWxkaW5nIFRoZSBLZXJuZWwKKworICBBZnRlciBwYXRjaGluZyB0aGUga2VybmVsLCBydW4gbWFrZSBjb25maWcgYW5kIGNvbmZpZ3VyZSB0aGUga2VybmVsCisgIGZvciB5b3VyIGhhcmR3YXJlLgorCisKKyAgQWZ0ZXIgY29uZmlndXJhdGlvbiwgbWFrZSBhbmQgaW5zdGFsbCBhY2NvcmRpbmcgdG8geW91ciBoYWJpdC4KKworCisgIDMuICBOZXR3b3JrIENvbmZpZ3VyYXRpb24KKworICBTbyBmYXIsIEkgaGF2ZSBvbmx5IHVzZWQgdGhlIGVxbCBkZXZpY2Ugd2l0aCB0aGUgRFNMSVAgU0xJUCBjb25uZWN0aW9uCisgIG1hbmFnZXIgYnkgTWF0dCBEaWxsb24gKC0tICJUaGUgbWFuIHdobyBzb2xkIGhpcyBzb3VsIHRvIGNvZGUgc28gbXVjaAorICBzbyBxdWlja2x5LiItLSkgLiAgSG93IHlvdSBjb25maWd1cmUgaXQgZm9yIG90aGVyICJjb25uZWN0aW9uIgorICBtYW5hZ2VycyBpcyB1cCB0byB5b3UuICBNb3N0IG90aGVyIGNvbm5lY3Rpb24gbWFuYWdlcnMgdGhhdCBJJ3ZlIHNlZW4KKyAgZG9uJ3QgZG8gYSB2ZXJ5IGdvb2Qgam9iIHdoZW4gaXQgY29tZXMgdG8gaGFuZGxpbmcgbW9yZSB0aGFuIG9uZQorICBjb25uZWN0aW9uLgorCisKKyAgMy4xLgkvZXRjL3JjLmQvcmMuaW5ldDEKKworICBJbiByYy5pbmV0MSwgaWZjb25maWcgdGhlIGVxbCBkZXZpY2UgdG8gdGhlIElQIGFkZHJlc3MgeW91IHVzdWFsbHkgdXNlCisgIGZvciB5b3VyIG1hY2hpbmUsIGFuZCB0aGUgTVRVIHlvdSBwcmVmZXIgZm9yIHlvdXIgU0xJUCBsaW5lcy4JT25lCisgIGNvdWxkIGFyZ3VlIHRoYXQgTVRVIHNob3VsZCBiZSByb3VnaGx5IGhhbGYgdGhlIHVzdWFsIHNpemUgZm9yIHR3bworICBtb2RlbXMsIG9uZS10aGlyZCBmb3IgdGhyZWUsIG9uZS1mb3VydGggZm9yIGZvdXIsIGV0Yy4uLiAgQnV0IGdvaW5nCisgIHRvbyBmYXIgYmVsb3cgMjk2IGlzIHByb2JhYmx5IG92ZXJraWxsLiBIZXJlIGlzIGFuIGV4YW1wbGUgaWZjb25maWcKKyAgY29tbWFuZCB0aGF0IHNldHMgdXAgdGhlIGVxbCBkZXZpY2U6CisKKworCisgICAgICAgX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXworICAgICAgIGlmY29uZmlnIGVxbCAxOTguNjcuMzMuMjM5IG10dSAxMDA2CisgICAgICAgX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXworCisKKworCisKKyAgT25jZSB0aGUgZXFsIGRldmljZSBpcyB1cCBhbmQgcnVubmluZywgYWRkIGEgc3RhdGljIGRlZmF1bHQgcm91dGUgdG8KKyAgaXQgaW4gdGhlIHJvdXRpbmcgdGFibGUgdXNpbmcgdGhlIGNvb2wgbmV3IHJvdXRlIHN5bnRheCB0aGF0IG1ha2VzCisgIGxpZmUgc28gbXVjaCBlYXNpZXI6CisKKworCisgICAgICAgX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXworICAgICAgIHJvdXRlIGFkZCBkZWZhdWx0IGVxbAorICAgICAgIF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KKworCisgIDMuMi4JRW5zbGF2aW5nIERldmljZXMgQnkgSGFuZAorCisgIEVuc2xhdmluZyBkZXZpY2VzIGJ5IGhhbmQgcmVxdWlyZXMgdHdvIHV0aWxpdHkgcHJvZ3JhbXM6IGVxbF9lbnNsYXZlCisgIGFuZCBlcWxfZW1hbmNpcGF0ZSAoLS0gZXFsX2VtYW5jaXBhdGUgaGFzbid0IGJlZW4gd3JpdHRlbiBiZWNhdXNlIHdoZW4KKyAgYW4gZW5zbGF2ZWQgZGV2aWNlICJkaWVzIiwgaXQgaXMgYXV0b21hdGljYWxseSB0YWtlbiBvdXQgb2YgdGhlIHF1ZXVlLgorICBJIGhhdmVuJ3QgZm91bmQgYSBnb29kIHJlYXNvbiB0byB3cml0ZSBpdCB5ZXQuLi4gb3RoZXIgdGhhbiBmb3IKKyAgY29tcGxldGVuZXNzLCBidXQgdGhhdCBpc24ndCBhIGdvb2QgbW90aXZhdG9yIGlzIGl0Py0tKQorCisKKyAgVGhlIHN5bnRheCBmb3IgZW5zbGF2aW5nIGEgZGV2aWNlIGlzICJlcWxfZW5zbGF2ZSA8bWFzdGVyLW5hbWU+CisgIDxzbGF2ZS1uYW1lPiA8ZXN0aW1hdGVkLWJwcz4iLiAgSGVyZSBhcmUgc29tZSBleGFtcGxlIGVuc2xhdmluZ3M6CisKKworCisgICAgICAgX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXworICAgICAgIGVxbF9lbnNsYXZlIGVxbCBzbDAgMjg4MDAKKyAgICAgICBlcWxfZW5zbGF2ZSBlcWwgcHBwMCAxNDQwMAorICAgICAgIGVxbF9lbnNsYXZlIGVxbCBzbDEgNTc2MDAKKyAgICAgICBfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCisKKworCisKKworICBXaGVuIHlvdSB3YW50IHRvIGZyZWUgYSBkZXZpY2UgZnJvbSBpdHMgbGlmZSBvZiBzbGF2ZXJ5LCB5b3UgY2FuCisgIGVpdGhlciBkb3duIHRoZSBkZXZpY2Ugd2l0aCBpZmNvbmZpZyAoZXFsIHdpbGwgYXV0b21hdGljYWxseSBidXJ5IHRoZQorICBkZWFkIHNsYXZlIGFuZCByZW1vdmUgaXQgZnJvbSBpdHMgcXVldWUpIG9yIHVzZSBlcWxfZW1hbmNpcGF0ZSB0byBmcmVlCisgIGl0LiAoLS0gT3IganVzdCBpZmNvbmZpZyBpdCBkb3duLCBhbmQgdGhlIGVxbCBkcml2ZXIgd2lsbCB0YWtlIGl0IG91dAorICBmb3IgeW91Li0tKQorCisKKworICAgICAgIF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KKyAgICAgICBlcWxfZW1hbmNpcGF0ZSBlcWwgc2wwCisgICAgICAgZXFsX2VtYW5jaXBhdGUgZXFsIHBwcDAKKyAgICAgICBlcWxfZW1hbmNpcGF0ZSBlcWwgc2wxCisgICAgICAgX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXworCisKKworCisKKyAgMy4zLglEU0xJUCBDb25maWd1cmF0aW9uIGZvciB0aGUgZXFsIERldmljZQorCisgIFRoZSBnZW5lcmFsIGlkZWEgaXMgdG8gYnJpbmcgdXAgYW5kIGtlZXAgdXAgYXMgbWFueSBTTElQIGNvbm5lY3Rpb25zCisgIGFzIHlvdSBuZWVkLCBhdXRvbWF0aWNhbGx5LgorCisKKyAgMy4zLjEuICAvZXRjL3NsaXAvcnVuc2xpcC5jb25mCisKKyAgSGVyZSBpcyBhbiBleGFtcGxlIHJ1bnNsaXAuY29uZjoKKworCisKKworCisKKworCisKKworCisKKworCisKKyAgX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXworICBuYW1lCQlzbC1saW5lLTEKKyAgZW5hYmxlZAorICBiYXVkCQkzODQwMAorICBtdHUJCTU3NgorICBkdWNtZAkJLWUgL2V0Yy9zbGlwL2RpYWxvdXQvY3VhMi0yODgueHAgLXQgOQorICBjb21tYW5kCSBlcWxfZW5zbGF2ZSBlcWwgJGludGVyZmFjZSAyODgwMAorICBhZGRyZXNzCSAxOTguNjcuMzMuMjM5CisgIGxpbmUJCS9kZXYvY3VhMgorCisgIG5hbWUJCXNsLWxpbmUtMgorICBlbmFibGVkCisgIGJhdWQJCTM4NDAwCisgIG10dQkJNTc2CisgIGR1Y21kCQktZSAvZXRjL3NsaXAvZGlhbG91dC9jdWEzLTI4OC54cCAtdCA5CisgIGNvbW1hbmQJIGVxbF9lbnNsYXZlIGVxbCAkaW50ZXJmYWNlIDI4ODAwCisgIGFkZHJlc3MJIDE5OC42Ny4zMy4yMzkKKyAgbGluZQkJL2Rldi9jdWEzCisgIF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KKworCisKKworCisgIDMuNC4JVXNpbmcgUFBQIGFuZCB0aGUgZXFsIERldmljZQorCisgIEkgaGF2ZSBub3QgeWV0IGRvbmUgYW55IGxvYWQtYmFsYW5jaW5nIHRlc3RpbmcgZm9yIFBQUCBkZXZpY2VzLCBtYWlubHkKKyAgYmVjYXVzZSBJIGRvbid0IGhhdmUgYSBQUFAtY29ubmVjdGlvbiBtYW5hZ2VyIGxpa2UgU0xJUCBoYXMgd2l0aAorICBEU0xJUC4gSSBkaWQgZmluZCBhIGdvb2QgdGlwIGZyb20gTGludXhORVQ6QmlsbHkgZm9yIFBQUCBwZXJmb3JtYW5jZToKKyAgbWFrZSBzdXJlIHlvdSBoYXZlIGFzeW5jbWFwIHNldCB0byBzb21ldGhpbmcgc28gdGhhdCBjb250cm9sCisgIGNoYXJhY3RlcnMgYXJlIG5vdCBlc2NhcGVkLgorCisKKyAgSSB0cmllZCB0byBmaXggdXAgYSBQUFAgc2NyaXB0L3N5c3RlbSBmb3IgcmVkaWFsaW5nIGxvc3QgUFBQCisgIGNvbm5lY3Rpb25zIGZvciB1c2Ugd2l0aCB0aGUgZXFsIGRyaXZlciB0aGUgd2Vla2VuZCBvZiBGZWIgMjUtMjYgJzk1CisgIChIZXJlYWZ0ZXIga25vd24gYXMgdGhlIDgtaG91ciBQUFAgSGF0ZSBGZXN0aXZhbCkuICBQZXJoYXBzIGxhdGVyIHRoaXMKKyAgeWVhci4KKworCisgIDQuICBBYm91dCB0aGUgU2xhdmUgU2NoZWR1bGVyIEFsZ29yaXRobQorCisgIFRoZSBzbGF2ZSBzY2hlZHVsZXIgcHJvYmFibHkgY291bGQgYmUgcmVwbGFjZWQgd2l0aCBhIGRvemVuIG90aGVyCisgIHRoaW5ncyBhbmQgcHVzaCB0cmFmZmljIG11Y2ggZmFzdGVyLglUaGUgZm9ybXVsYSBpbiB0aGUgY3VycmVudCBzZXQKKyAgdXAgb2YgdGhlIGRyaXZlciB3YXMgdHVuZWQgdG8gaGFuZGxlIHNsYXZlcyB3aXRoIHdpbGRseSBkaWZmZXJlbnQKKyAgYml0cy1wZXItc2Vjb25kICJwcmlvcml0aWVzIi4KKworCisgIEFsbCB0ZXN0aW5nIEkgaGF2ZSBkb25lIHdhcyB3aXRoIHR3byAyOC44IFYuRkMgbW9kZW1zLCBvbmUgY29ubmVjdGluZworICBhdCAyODgwMCBicHMgb3Igc2xvd2VyLCBhbmQgdGhlIG90aGVyIGNvbm5lY3RpbmcgYXQgMTQ0MDAgYnBzIGFsbCB0aGUKKyAgdGltZS4KKworCisgIE9uZSB2ZXJzaW9uIG9mIHRoZSBzY2hlZHVsZXIgd2FzIGFibGUgdG8gcHVzaCA1LjMgSy9zIHRocm91Z2ggdGhlCisgIDI4ODAwIGFuZCAxNDQwMCBjb25uZWN0aW9ucywgYnV0IHdoZW4gdGhlIHByaW9yaXRpZXMgb24gdGhlIGxpbmtzIHdlcmUKKyAgdmVyeSB3aWRlIGFwYXJ0ICg1NzYwMCB2cy4gMTQ0MDApIHRoZSAiZmFzdGVyIiBtb2RlbSByZWNlaXZlZCBhbGwKKyAgdHJhZmZpYyBhbmQgdGhlICJzbG93ZXIiIG1vZGVtIHN0YXJ2ZWQuCisKKworICA1LiAgVGVzdGVycycgUmVwb3J0cworCisgIFNvbWUgcGVvcGxlIGhhdmUgZXhwZXJpbWVudGVkIHdpdGggdGhlIGVxbCBkZXZpY2Ugd2l0aCBuZXdlcgorICBrZXJuZWxzICh0aGFuIDEuMS43NSkuICBJIGhhdmUgc2luY2UgdXBkYXRlZCB0aGUgZHJpdmVyIHRvIHBhdGNoCisgIGNsZWFubHkgaW4gbmV3ZXIga2VybmVscyBiZWNhdXNlIG9mIHRoZSByZW1vdmFsIG9mIHRoZSBvbGQgInNsYXZlLQorICBiYWxhbmNpbmciIGRyaXZlciBjb25maWcgb3B0aW9uLgorCisKKyAgbyAgaWNlZSBmcm9tIExpbnV4TkVUIHBhdGNoZWQgMS4xLjg2IHdpdGhvdXQgYW55IHJlamVjdHMgYW5kIHdhcyBhYmxlCisgICAgIHRvIGJvb3QgdGhlIGtlcm5lbCBhbmQgZW5zbGF2ZSBhIGNvdXBsZSBvZiBJU0ROIFBQUCBsaW5rcy4KKworICA1LjEuCVJhbmRvbHBoIEJlbnRzb24ncyBUZXN0IFJlcG9ydAorCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKyAgRnJvbSBiZW50c29uQGdyaWVnLnNlYXNsdWcub3JnIFdlZCBGZWIgIDggMTk6MDg6MDkgMTk5NQorICBEYXRlOiBUdWUsIDcgRmViIDk1IDIyOjU3IFBTVAorICBGcm9tOiBSYW5kb2xwaCBCZW50c29uIDxiZW50c29uQGdyaWVnLnNlYXNsdWcub3JnPgorICBUbzogZ3VydUBuY20uY29tCisgIFN1YmplY3Q6IEVRTCBkcml2ZXIgdGVzdHMKKworCisgIEkgaGF2ZSBiZWVuIGNoZWNraW5nIG91dCB5b3VyIGVxbCBkcml2ZXIuICAoTmljZSB3b3JrLCB0aGF0ISkKKyAgQWx0aG91Z2ggeW91IG1heSBhbHJlYWR5IGRvbmUgdGhpcyBwZXJmb3JtYW5jZSB0ZXN0aW5nLCBoZXJlCisgIGFyZSBzb21lIGRhdGEgSSd2ZSBkaXNjb3ZlcmVkLgorCisgIFJhbmRvbHBoIEJlbnRzb24KKyAgYmVudHNvbkBncmllZy5zZWFzbHVnLm9yZworCisgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisKKyAgQSBwc2V1ZG8tZGV2aWNlIGRyaXZlciwgRVFMLCB3cml0dGVuIGJ5IFNpbW9uIEphbmVzLCBjYW4gYmUgdXNlZAorICB0byBidW5kbGUgbXVsdGlwbGUgU0xJUCBjb25uZWN0aW9ucyBpbnRvIHdoYXQgYXBwZWFycyB0byBiZSBhCisgIHNpbmdsZSBjb25uZWN0aW9uLiAgVGhpcyBhbGxvd3Mgb25lIHRvIGltcHJvdmUgZGlhbC11cCBuZXR3b3JrCisgIGNvbm5lY3Rpdml0eSBncmFkdWFsbHksIHdpdGhvdXQgaGF2aW5nIHRvIGJ1eSBleHBlbnNpdmUgRFNVL0NTVQorICBoYXJkd2FyZSBhbmQgc2VydmljZXMuCisKKyAgSSBoYXZlIGRvbmUgc29tZSB0ZXN0aW5nIG9mIHRoaXMgc29mdHdhcmUsIHdpdGggdHdvIGdvYWxzIGluCisgIG1pbmQ6IGZpcnN0LCB0byBlbnN1cmUgaXQgYWN0dWFsbHkgd29ya3MgYXMgZGVzY3JpYmVkIGFuZAorICBzZWNvbmQsIGFzIGEgbWV0aG9kIG9mIGV4ZXJjaXNpbmcgbXkgZGV2aWNlIGRyaXZlci4KKworICBUaGUgZm9sbG93aW5nIHBlcmZvcm1hbmNlIG1lYXN1cmVtZW50cyB3ZXJlIGRlcml2ZWQgZnJvbSBhIHNldAorICBvZiBTTElQIGNvbm5lY3Rpb25zIHJ1biBiZXR3ZWVuIHR3byBMaW51eCBzeXN0ZW1zICgxLjEuODQpIHVzaW5nCisgIGEgNDg2RFgyLzY2IHdpdGggYSBDeWNsb20tOFlzIGFuZCBhIDQ4NlNMQy80MCB3aXRoIGEgQ3ljbG9tLTE2WS4KKyAgKFBvcnRzIDAsMSwyLDMgd2VyZSB1c2VkLiAgQSBsYXRlciBjb25maWd1cmF0aW9uIHdpbGwgZGlzdHJpYnV0ZQorICBwb3J0IHNlbGVjdGlvbiBhY3Jvc3MgdGhlIGRpZmZlcmVudCBDaXJydXMgY2hpcHMgb24gdGhlIGJvYXJkcy4pCisgIE9uY2UgYSBsaW5rIHdhcyBlc3RhYmxpc2hlZCwgSSB0aW1lZCBhIGJpbmFyeSBmdHAgdHJhbnNmZXIgb2YKKyAgMjg5Mjg0IGJ5dGVzIG9mIGRhdGEuCUlmIHRoZXJlIHdlcmUgbm8gb3ZlcmhlYWQgKHBhY2tldCBoZWFkZXJzLAorICBpbnRlci1jaGFyYWN0ZXIgYW5kIGludGVyLXBhY2tldCBkZWxheXMsIGV0Yy4pIHRoZSB0cmFuc2ZlcnMKKyAgd291bGQgdGFrZSB0aGUgZm9sbG93aW5nIHRpbWVzOgorCisgICAgICBiaXRzL3NlYwlzZWNvbmRzCisgICAgICAzNDU2MDAJOC4zCisgICAgICAyMzQ2MDAJMTIuMworICAgICAgMTcyODAwCTE2LjcKKyAgICAgIDE1MzYwMAkxOC44CisgICAgICA3NjgwMAkzNy42CisgICAgICA1NzYwMAk1MC4yCisgICAgICAzODQwMAk3NS4zCisgICAgICAyODgwMAkxMDAuNAorICAgICAgMTkyMDAJMTUwLjYKKyAgICAgIDk2MDAJMzAxLjMKKworICBBIHNpbmdsZSBsaW5lIHJ1bm5pbmcgYXQgdGhlIGxvd2VyIHNwZWVkcyBhbmQgd2l0aCBsYXJnZSBwYWNrZXRzCisgIGNvbWVzIHRvIHdpdGhpbiAyJSBvZiB0aGlzLiAgUGVyZm9ybWFuY2UgaXMgbGltaXRlZCBmb3IgdGhlIGhpZ2hlcgorICBzcGVlZHMgKGFzIHByZWRpY3RlZCBieSB0aGUgQ2lycnVzIGRhdGFib29rKSB0byBhbiBhZ2dyZWdhdGUgb2YKKyAgYWJvdXQgMTYwIGtiaXRzL3NlYy4JVGhlIG5leHQgcm91bmQgb2YgdGVzdGluZyB3aWxsIGRpc3RyaWJ1dGUKKyAgdGhlIGxvYWQgYWNyb3NzIHR3byBvciBtb3JlIENpcnJ1cyBjaGlwcy4KKworICBUaGUgZ29vZCBuZXdzIGlzIHRoYXQgb25lIGdldHMgbmVhcmx5IHRoZSBmdWxsIGFkdmFudGFnZSBvZiB0aGUKKyAgc2Vjb25kLCB0aGlyZCwgYW5kIGZvdXJ0aCBsaW5lJ3MgYmFuZHdpZHRoLiAgKFRoZSBiYWQgbmV3cyBpcworICB0aGF0IHRoZSBjb25uZWN0aW9uIGVzdGFibGlzaG1lbnQgc2VlbWVkIGZyYWdpbGUgZm9yIHRoZSBoaWdoZXIKKyAgc3BlZWRzLiAgT25jZSBlc3RhYmxpc2hlZCwgdGhlIGNvbm5lY3Rpb24gc2VlbWVkIHJvYnVzdCBlbm91Z2guKQorCisgICNsaW5lcyAgc3BlZWQJbXR1ICBzZWNvbmRzCXRoZW9yeSAgYWN0dWFsICAlb2YKKwkga2JpdC9zZWMgICAgICBkdXJhdGlvbglzcGVlZAlzcGVlZAltYXgKKyAgMwkxMTUyMDAgIDkwMAlfCTM0NTYwMAorICAzCTExNTIwMCAgNDAwCTE4LjEJMzQ1NjAwICAxNTk4MjUgIDQ2CisgIDIJMTE1MjAwICA5MDAJXwkyMzA0MDAKKyAgMgkxMTUyMDAgIDYwMAkxOC4xCTIzMDQwMCAgMTU5ODI1ICA2OQorICAyCTExNTIwMCAgNDAwCTE5LjMJMjMwNDAwICAxNDk4ODggIDY1CisgIDQJNTc2MDAJOTAwCV8JMjM0NjAwCisgIDQJNTc2MDAJNjAwCV8JMjM0NjAwCisgIDQJNTc2MDAJNDAwCV8JMjM0NjAwCisgIDMJNTc2MDAJNjAwCTIwLjkJMTcyODAwICAxMzg0MTMgIDgwCisgIDMJNTc2MDAJOTAwCTIxLjIJMTcyODAwICAxMzY0NTUgIDc4CisgIDMJMTE1MjAwICA2MDAJMjEuNwkzNDU2MDAgIDEzMzMxMSAgMzgKKyAgMwk1NzYwMAk0MDAJMjIuNQkxNzI4MDAgIDEyODU3MSAgNzQKKyAgNAkzODQwMAk5MDAJMjUuMgkxNTM2MDAgIDExNDc5NSAgNzQKKyAgNAkzODQwMAk2MDAJMjYuNAkxNTM2MDAgIDEwOTU3NyAgNzEKKyAgNAkzODQwMAk0MDAJMjcuMwkxNTM2MDAgIDEwNTk2NSAgNjgKKyAgMgk1NzYwMAk5MDAJMjkuMQkxMTUyMDAgIDk5NDEwLjMgODYKKyAgMQkxMTUyMDAgIDkwMAkzMC43CTExNTIwMCAgOTQyMjkuMyA4MQorICAyCTU3NjAwCTYwMAkzMC4yCTExNTIwMCAgOTU3ODkuNCA4MworICAzCTM4NDAwCTkwMAkzMC4zCTExNTIwMCAgOTU0NzMuMyA4MgorICAzCTM4NDAwCTYwMAkzMS4yCTExNTIwMCAgOTI3MTkuMiA4MAorICAxCTExNTIwMCAgNjAwCTMxLjMJMTE1MjAwICA5MjQyMwk4MAorICAyCTU3NjAwCTQwMAkzMi4zCTExNTIwMCAgODk1NjEuNiA3NworICAxCTExNTIwMCAgNDAwCTMyLjgJMTE1MjAwICA4ODE5Ni4zIDc2CisgIDMJMzg0MDAJNDAwCTMzLjUJMTE1MjAwICA4NjM1My40IDc0CisgIDIJMzg0MDAJOTAwCTQzLjcJNzY4MDAJNjYxOTcuNyA4NgorICAyCTM4NDAwCTYwMAk0NAk3NjgwMAk2NTc0Ni40IDg1CisgIDIJMzg0MDAJNDAwCTQ3LjIJNzY4MDAJNjEyODkJNzkKKyAgNAkxOTIwMAk5MDAJNTAuOAk3NjgwMAk1Njk0NS43IDc0CisgIDQJMTkyMDAJNDAwCTUzLjIJNzY4MDAJNTQzNzYuNyA3MAorICA0CTE5MjAwCTYwMAk1My43CTc2ODAwCTUzODcwLjQgNzAKKyAgMQk1NzYwMAk5MDAJNTQuNgk1NzYwMAk1Mjk4Mi40IDkxCisgIDEJNTc2MDAJNjAwCTU2LjIJNTc2MDAJNTE0NzQJODkKKyAgMwkxOTIwMAk5MDAJNjAuNQk1NzYwMAk0NzgxNS41IDgzCisgIDEJNTc2MDAJNDAwCTYwLjIJNTc2MDAJNDgwNTMuOCA4MworICAzCTE5MjAwCTYwMAk2Mgk1NzYwMAk0NjY1OC43IDgxCisgIDMJMTkyMDAJNDAwCTY0LjcJNTc2MDAJNDQ3MTEuNiA3NworICAxCTM4NDAwCTkwMAk3OS40CTM4NDAwCTM2NDMzLjggOTQKKyAgMQkzODQwMAk2MDAJODIuNAkzODQwMAkzNTEwNy4zIDkxCisgIDIJMTkyMDAJOTAwCTg0LjQJMzg0MDAJMzQyNzUuNCA4OQorICAxCTM4NDAwCTQwMAk4Ni44CTM4NDAwCTMzMzI3LjYgODYKKyAgMgkxOTIwMAk2MDAJODcuNgkzODQwMAkzMzAyMy4zIDg1CisgIDIJMTkyMDAJNDAwCTkxLjIJMzg0MDAJMzE3MTkuNyA4MgorICA0CTk2MDAJOTAwCTk0LjcJMzg0MDAJMzA1NDcuNCA3OQorICA0CTk2MDAJNDAwCTEwNgkzODQwMAkyNzI5MC45IDcxCisgIDQJOTYwMAk2MDAJMTEwCTM4NDAwCTI2Mjk4LjUgNjgKKyAgMwk5NjAwCTkwMAkxMTgJMjg4MDAJMjQ1MTUuNiA4NQorICAzCTk2MDAJNjAwCTEyMAkyODgwMAkyNDEwNwk4MworICAzCTk2MDAJNDAwCTEzMQkyODgwMAkyMjA4Mi43IDc2CisgIDEJMTkyMDAJOTAwCTE1NQkxOTIwMAkxODY2My41IDk3CisgIDEJMTkyMDAJNjAwCTE2MQkxOTIwMAkxNzk2OAk5MworICAxCTE5MjAwCTQwMAkxNzAJMTkyMDAJMTcwMTYuNyA4OAorICAyCTk2MDAJNjAwCTE3NgkxOTIwMAkxNjQzNi42IDg1CisgIDIJOTYwMAk5MDAJMTgwCTE5MjAwCTE2MDcxLjMgODMKKyAgMgk5NjAwCTQwMAkxODEJMTkyMDAJMTU5ODIuNSA4MworICAxCTk2MDAJOTAwCTMwNQk5NjAwCTk0ODQuNzIgOTgKKyAgMQk5NjAwCTYwMAkzMTQJOTYwMAk5MjEyLjg3IDk1CisgIDEJOTYwMAk0MDAJMzMyCTk2MDAJODcxMy4zNyA5MAorCisKKworCisKKyAgNS4yLglBbnRob255IEhlYWx5J3MgUmVwb3J0CisKKworCisKKworCisKKyAgRGF0ZTogTW9uLCAxMyBGZWIgMTk5NSAxNjoxNzoyOSArMTEwMCAoRVNUKQorICBGcm9tOiBBbnRvbnkgSGVhbGV5IDxhaGVhbGV5QHN0Lm5lcGVhbi51d3MuZWR1LmF1PgorICBUbzogU2ltb24gSmFuZXMgPGd1cnVAbmNtLmNvbT4KKyAgU3ViamVjdDogUmU6IExvYWQgQmFsYW5jaW5nCisKKyAgSGkgU2ltb24sCisJICBJJ3ZlIGluc3RhbGxlZCB5b3VyIHBhdGNoIGFuZCBpdCB3b3JrcyBncmVhdC4gSSBoYXZlIHRyaWFsZWQKKwkgIGl0IG92ZXIgdHdpbiBTTC9JUCBsaW5lcywganVzdCBvdmVyIG51bGwgbW9kZW1zLCBidXQgSSB3YXMKKwkgIGFibGUgdG8gZGF0YSBhdCBvdmVyIDQ4S2IvcyBbSVNETiBsaW5rIC1TaW1vbl0uIEkgbWFuYWdlZCBhCisJICB0cmFuc2ZlciBvZiB1cCB0byA3LjUgS2J5dGUvcyBvbiBvbmUgZ28sIGJ1dCBhdmVyYWdlZCBhcm91bmQKKwkgIDYuNCBLYnl0ZS9zLCB3aGljaCBJIHRoaW5rIGlzIHByZXR0eSBjb29sLiAgOikKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2V3cmszLnR4dCBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9ld3JrMy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTBlOWU1ZgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9ld3JrMy50eHQKQEAgLTAsMCArMSw0NiBAQAorVGhlIEV0aGVyV09SS1MgMyAgZHJpdmVyIGluIHRoaXMgZGlzdHJpYnV0aW9uIGlzICBkZXNpZ25lZCB0byAgd29yayB3aXRoIGFsbAora2VybmVscyAgID4gIDEuMS4zMyAgIChhcHByb3gpICBhbmQgIGluY2x1ZGVzICB0b29scyAgIGluICB0aGUgICdld3JrM3Rvb2xzJworc3ViZGlyZWN0b3J5ICAgdG8gIGFsbG93ICBzZXQgICB1cCBvZiAgIHRoZSAgIGNhcmQsICBzaW1pbGFyICB0byAgdGhlICBNU0RPUworJ05JQ1NFVFVQLkVYRScgdG9vbHMgcHJvdmlkZWQgb24gIHRoZSBET1MgZHJpdmVycyAgZGlzayAodHlwZSAnbWFrZScgaW4gdGhhdAorc3ViZGlyZWN0b3J5IHRvIG1ha2UgdGhlIHRvb2xzKS4KKworVGhlIHN1cHBvcnRlZCAgY2FyZHMgYXJlIERFMjAzLCAgREUyMDQgYW5kIERFMjA1LiAgQWxsICAgb3RoZXIgY2FyZHMgYXJlIE5PVAorc3VwcG9ydGVkIC0gcmVmZXIgdG8gJ2RlcGNhLmMnIGZvciBydW5uaW5nIHRoZSBMQU5DRSBiYXNlZCBuZXR3b3JrIGNhcmRzIGFuZAorJ2RlNHg1LmMnICBmb3IgdGhlICBESUdJVEFMICAgU2VtaWNvbmR1Y3RvciBQQ0kgIGNoaXAgIGJhc2VkICBhZGFwdGVycyAgZnJvbQorRGlnaXRhbC4KKworVGhlIGFiaWxpdHkgdG8gbG9hZCAgdGhpcyBkcml2ZXIgYXMgYSAgbG9hZGFibGUgbW9kdWxlIGhhcyBiZWVuIGluY2x1ZGVkIGFuZAordXNlZCBleHRlbnNpdmVseSAgZHVyaW5nIHRoZSBkcml2ZXIgIGRldmVsb3BtZW50ICh0byBzYXZlIHRob3NlICBsb25nIHJlYm9vdAorc2VxdWVuY2VzKS4gVG8gdXRpbGlzZSB0aGlzIGFiaWxpdHksIHlvdSBoYXZlIHRvIGRvIDggdGhpbmdzOgorCisgICAgMCkgaGF2ZSBhIGNvcHkgb2YgdGhlIGxvYWRhYmxlIG1vZHVsZXMgY29kZSBpbnN0YWxsZWQgb24geW91ciBzeXN0ZW0uCisgICAgMSkgY29weSBld3JrMy5jIGZyb20gdGhlICAvbGludXgvZHJpdmVycy9uZXQgZGlyZWN0b3J5IHRvIHlvdXIgZmF2b3VyaXRlCisgICAgdGVtcG9yYXJ5IGRpcmVjdG9yeS4KKyAgICAyKSBlZGl0IHRoZSAgc291cmNlIGNvZGUgbmVhciAgbGluZSAxODk4IHRvIHJlZmxlY3QgIHRoZSBJL08gYWRkcmVzcyBhbmQKKyAgICBJUlEgeW91J3JlIHVzaW5nLgorICAgIDMpIGNvbXBpbGUgIGV3cmszLmMsIGJ1dCBpbmNsdWRlIC1ETU9EVUxFIGluICB0aGUgY29tbWFuZCBsaW5lIHRvIGVuc3VyZQorICAgIHRoYXQgdGhlIGNvcnJlY3QgYml0cyBhcmUgY29tcGlsZWQgKHNlZSBlbmQgb2Ygc291cmNlIGNvZGUpLgorICAgIDQpIGlmIHlvdSBhcmUgd2FudGluZyB0byBhZGQgYSBuZXcgIGNhcmQsIGdvdG8gNS4gT3RoZXJ3aXNlLCByZWNvbXBpbGUgYQorICAgIGtlcm5lbCB3aXRoIHRoZSBld3JrMyBjb25maWd1cmF0aW9uIHR1cm5lZCBvZmYgYW5kIHJlYm9vdC4KKyAgICA1KSBpbnNtb2QgZXdyazMubworICAgICAgICAgIFtBbGFuIENveDogQ2hhbmdlZCB0aGlzIHNvIHlvdSBjYW4gaW5zbW9kIGV3cmszLm8gaXJxPXggaW89eV0KKyAgICAgICAgICBbQWRhbSBLcm9wZWxpbjogTXVsdGlwbGUgY2FyZHMgbm93IHN1cHBvcnRlZCBieSBpcnE9eDEseDIgaW89eTEseTJdCisgICAgNikgcnVuIHRoZSBuZXQgc3RhcnR1cCBiaXRzIGZvciB5b3VyIG5ldyBldGg/PyBpbnRlcmZhY2UgbWFudWFsbHkgCisgICAgKHVzdWFsbHkgL2V0Yy9yYy5pbmV0WzEyXSBhdCBib290IHRpbWUpLiAKKyAgICA3KSBlbmpveSEKKworICAgIE5vdGUgdGhhdCBhdXRvcHJvYmluZyBpcyBub3QgYWxsb3dlZCBpbiBsb2FkYWJsZSBtb2R1bGVzIC0gdGhlIHN5c3RlbSBpcworICAgIGFscmVhZHkgdXAgYW5kIHJ1bm5pbmcgYW5kIHlvdSdyZSBtZXNzaW5nIHdpdGggaW50ZXJydXB0cy4KKworICAgIFRvIHVubG9hZCBhIG1vZHVsZSwgdHVybiBvZmYgdGhlIGFzc29jaWF0ZWQgaW50ZXJmYWNlIAorICAgICdpZmNvbmZpZyBldGg/PyBkb3duJyB0aGVuICdybW1vZCBld3JrMycuCisKK1RoZSBwZXJmb3JtYW5jZSB3ZSd2ZSAgYWNoaWV2ZWQgc28gZmFyICBoYXMgYmVlbiBtZWFzdXJlZCB0aHJvdWdoIHRoZSAndHRjcCcKK3Rvb2wgICBhdCA5NzVrQi9zLiAgVGhpcyAgbWVhc3VyZXMgIHRoZSAgdG90YWwgIFRDUCAgc3RhY2sgcGVyZm9ybWFuY2Ugd2hpY2gKK2luY2x1ZGVzIHRoZSAgIGNhcmQsICBzbyBkb24ndCAgZXhwZWN0ICAgdG8gZ2V0ICAgbXVjaCBuZWFyZXIgIHRoZSAgMS4yNU1CL3MKK3RoZW9yZXRpY2FsIEV0aGVybmV0IHJhdGUuCisKKworRW5qb3khCisKK0RhdmUKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9maWx0ZXIudHh0IGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2ZpbHRlci50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmJmMjAwNQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9maWx0ZXIudHh0CkBAIC0wLDAgKzEsNDIgQEAKK2ZpbHRlci50eHQ6IExpbnV4IFNvY2tldCBGaWx0ZXJpbmcKK1dyaXR0ZW4gYnk6IEpheSBTY2h1bGlzdCA8anNjaGxzdEBzYW1iYS5vcmc+CisKK0ludHJvZHVjdGlvbgorPT09PT09PT09PT09CisKKwlMaW51eCBTb2NrZXQgRmlsdGVyaW5nIGlzIGRlcml2ZWQgZnJvbSB0aGUgQmVya2VsZXkKK1BhY2tldCBGaWx0ZXIuIFRoZXJlIGFyZSBzb21lIGRpc3RpbmN0IGRpZmZlcmVuY2VzIGJldHdlZW4KK3RoZSBCU0QgYW5kIExpbnV4IEtlcm5lbCBGaWx0ZXJpbmcuCisKK0xpbnV4IFNvY2tldCBGaWx0ZXJpbmcgKExTRikgYWxsb3dzIGEgdXNlci1zcGFjZSBwcm9ncmFtIHRvCithdHRhY2ggYSBmaWx0ZXIgb250byBhbnkgc29ja2V0IGFuZCBhbGxvdyBvciBkaXNhbGxvdyBjZXJ0YWluCit0eXBlcyBvZiBkYXRhIHRvIGNvbWUgdGhyb3VnaCB0aGUgc29ja2V0LiBMU0YgZm9sbG93cyBleGFjdGx5Cit0aGUgc2FtZSBmaWx0ZXIgY29kZSBzdHJ1Y3R1cmUgYXMgdGhlIEJTRCBCZXJrZWxleSBQYWNrZXQgRmlsdGVyCisoQlBGKSwgc28gcmVmZXJyaW5nIHRvIHRoZSBCU0QgYnBmLjQgbWFucGFnZSBpcyB2ZXJ5IGhlbHBmdWwgaW4KK2NyZWF0aW5nIGZpbHRlcnMuCisKK0xTRiBpcyBtdWNoIHNpbXBsZXIgdGhhbiBCUEYuIE9uZSBkb2VzIG5vdCBoYXZlIHRvIHdvcnJ5IGFib3V0CitkZXZpY2VzIG9yIGFueXRoaW5nIGxpa2UgdGhhdC4gWW91IHNpbXBseSBjcmVhdGUgeW91ciBmaWx0ZXIKK2NvZGUsIHNlbmQgaXQgdG8gdGhlIGtlcm5lbCB2aWEgdGhlIFNPX0FUVEFDSF9GSUxURVIgaW9jdGwgYW5kCitpZiB5b3VyIGZpbHRlciBjb2RlIHBhc3NlcyB0aGUga2VybmVsIGNoZWNrIG9uIGl0LCB5b3UgdGhlbgoraW1tZWRpYXRlbHkgYmVnaW4gZmlsdGVyaW5nIGRhdGEgb24gdGhhdCBzb2NrZXQuCisKK1lvdSBjYW4gYWxzbyBkZXRhY2ggZmlsdGVycyBmcm9tIHlvdXIgc29ja2V0IHZpYSB0aGUKK1NPX0RFVEFDSF9GSUxURVIgaW9jdGwuIFRoaXMgd2lsbCBwcm9iYWJseSBub3QgYmUgdXNlZCBtdWNoCitzaW5jZSB3aGVuIHlvdSBjbG9zZSBhIHNvY2tldCB0aGF0IGhhcyBhIGZpbHRlciBvbiBpdCB0aGUKK2ZpbHRlciBpcyBhdXRvbWFnaWNhbGx5IHJlbW92ZWQuIFRoZSBvdGhlciBsZXNzIGNvbW1vbiBjYXNlCittYXkgYmUgYWRkaW5nIGEgZGlmZmVyZW50IGZpbHRlciBvbiB0aGUgc2FtZSBzb2NrZXQgd2hlcmUgeW91IGhhZCBhbm90aGVyCitmaWx0ZXIgdGhhdCBpcyBzdGlsbCBydW5uaW5nOiB0aGUga2VybmVsIHRha2VzIGNhcmUgb2YgcmVtb3ZpbmcKK3RoZSBvbGQgb25lIGFuZCBwbGFjaW5nIHlvdXIgbmV3IG9uZSBpbiBpdHMgcGxhY2UsIGFzc3VtaW5nIHlvdXIKK2ZpbHRlciBoYXMgcGFzc2VkIHRoZSBjaGVja3MsIG90aGVyd2lzZSBpZiBpdCBmYWlscyB0aGUgb2xkIGZpbHRlcgord2lsbCByZW1haW4gb24gdGhhdCBzb2NrZXQuCisKK0V4YW1wbGVzCis9PT09PT09PQorCitJb2N0bHMtCitzZXRzb2Nrb3B0KHNvY2tmZCwgU09MX1NPQ0tFVCwgU09fQVRUQUNIX0ZJTFRFUiwgJkZpbHRlciwgc2l6ZW9mKEZpbHRlcikpOworc2V0c29ja29wdChzb2NrZmQsIFNPTF9TT0NLRVQsIFNPX0RFVEFDSF9GSUxURVIsICZ2YWx1ZSwgc2l6ZW9mKHZhbHVlKSk7CisKK1NlZSB0aGUgQlNEIGJwZi40IG1hbnBhZ2UgYW5kIHRoZSBCU0QgUGFja2V0IEZpbHRlciBwYXBlciB3cml0dGVuIGJ5CitTdGV2ZW4gTWNDYW5uZSBhbmQgVmFuIEphY29ic29uIG9mIExhd3JlbmNlIEJlcmtlbGV5IExhYm9yYXRvcnkuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZm9yZTIwMGUudHh0IGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2ZvcmUyMDBlLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMWYzMzdmCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2ZvcmUyMDBlLnR4dApAQCAtMCwwICsxLDY2IEBACisKK0ZPUkUgU3lzdGVtcyBQQ0EtMjAwRS9TQkEtMjAwRSBBVE0gTklDIGRyaXZlcgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoaXMgZHJpdmVyIGFkZHMgc3VwcG9ydCBmb3IgdGhlIEZPUkUgU3lzdGVtcyAyMDBFLXNlcmllcyBBVE0gYWRhcHRlcnMKK3RvIHRoZSBMaW51eCBvcGVyYXRpbmcgc3lzdGVtLiBJdCBpcyBiYXNlZCBvbiB0aGUgZWFybGllciBQQ0EtMjAwRSBkcml2ZXIKK3dyaXR0ZW4gYnkgVXdlIERhbm5vd3NraS4KKworVGhlIGRyaXZlciBzaW11bHRhbmVvdXNseSBzdXBwb3J0cyBQQ0EtMjAwRSBhbmQgU0JBLTIwMEUgYWRhcHRlcnMgb24KK2kzODYsIGFscGhhICh1bnRlc3RlZCksIHBvd2VycGMsIHNwYXJjIGFuZCBzcGFyYzY0IGFyY2hzLgorCitUaGUgaW50ZW50IGlzIHRvIGVuYWJsZSB0aGUgdXNlIG9mIGRpZmZlcmVudCBtb2RlbHMgb2YgRk9SRSBhZGFwdGVycyBhdCB0aGUKK3NhbWUgdGltZSwgYnkgaG9zdHMgdGhhdCBoYXZlIHNldmVyYWwgYnVzIGludGVyZmFjZXMgKHN1Y2ggYXMgUENJK1NCVVMsCitQQ0krTUNBIG9yIFBDSStFSVNBKS4KKworT25seSBQQ0kgYW5kIFNCVVMgZGV2aWNlcyBhcmUgY3VycmVudGx5IHN1cHBvcnRlZCBieSB0aGUgZHJpdmVyLCBidXQgc3VwcG9ydAorZm9yIG90aGVyIGJ1cyBpbnRlcmZhY2VzIHN1Y2ggYXMgRUlTQSBzaG91bGQgbm90IGJlIHRvbyBoYXJkIHRvIGFkZCAodGhpcyBtYXkKK2JlIG1vcmUgdHJpY2t5IGZvciB0aGUgTUNBIGJ1cywgdGhvdWdoLCBhcyBGT1JFIG1hZGUgc29tZSBNQ0Etc3BlY2lmaWMKK21vZGlmaWNhdGlvbnMgdG8gdGhlIGFkYXB0ZXIncyBBQUxJIGludGVyZmFjZSkuCisKKworRmlybXdhcmUgQ29weXJpZ2h0IE5vdGljZQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitQbGVhc2UgcmVhZCB0aGUgZm9yZTIwMGVfZmlybXdhcmVfY29weXJpZ2h0IGZpbGUgcHJlc2VudAoraW4gdGhlIGxpbnV4L2RyaXZlcnMvYXRtIGRpcmVjdG9yeSBmb3IgZGV0YWlscyBhbmQgcmVzdHJpY3Rpb25zLgorCisKK0Zpcm13YXJlIFVwZGF0ZXMKKy0tLS0tLS0tLS0tLS0tLS0KKworVGhlIEZPUkUgU3lzdGVtcyAyMDBFLXNlcmllcyBkcml2ZXIgaXMgc2hpcHBlZCB3aXRoIGZpcm13YXJlIGRhdGEgYmVpbmcgCit1cGxvYWRlZCB0byB0aGUgQVRNIGFkYXB0ZXJzIGF0IHN5c3RlbSBib290IHRpbWUgb3IgYXQgbW9kdWxlIGxvYWRpbmcgdGltZS4gCitUaGUgc3VwcGxpZWQgZmlybXdhcmUgaW1hZ2VzIHNob3VsZCB3b3JrIHdpdGggYWxsIGFkYXB0ZXJzLgorCitIb3dldmVyLCBpZiB5b3UgZW5jb3VudGVyIHByb2JsZW1zICh0aGUgZmlybXdhcmUgZG9lc24ndCBzdGFydCBvciB0aGUgZHJpdmVyCitpcyB1bmFibGUgdG8gcmVhZCB0aGUgUFJPTSBkYXRhKSwgeW91IG1heSBjb25zaWRlciB0cnlpbmcgYW5vdGhlciBmaXJtd2FyZQordmVyc2lvbi4gQWx0ZXJuYXRpdmUgYmluYXJ5IGZpcm13YXJlIGltYWdlcyBjYW4gYmUgZm91bmQgc29tZXdoZXJlIG9uIHRoZQorRm9yZVRob3VnaHQgQ0QtUk9NIHN1cHBsaWVkIHdpdGggeW91ciBhZGFwdGVyIGJ5IEZPUkUgU3lzdGVtcy4KKworWW91IGNhbiBhbHNvIGdldCB0aGUgbGF0ZXN0IGZpcm13YXJlIGltYWdlcyBmcm9tIEZPUkUgU3lzdGVtcyBhdAoraHR0cDovL3d3dy5mb3JlLmNvbS4gUmVnaXN0ZXIgVEFDVGljcyBPbmxpbmUgYW5kIGdvIHRvCit0aGUgJ3NvZnR3YXJlIHVwZGF0ZXMnIHBhZ2VzLiBUaGUgZmlybXdhcmUgYmluYXJpZXMgYXJlIHBhcnQgb2YKK3RoZSB2YXJpb3VzIEZvcmVUaG91Z2h0IHNvZnR3YXJlIGRpc3RyaWJ1dGlvbnMuCisKK05vdGljZSB0aGF0IGRpZmZlcmVudCB2ZXJzaW9ucyBvZiB0aGUgUENBLTIwMEUgZmlybXdhcmUgZXhpc3QsIGRlcGVuZGluZworb24gdGhlIGVuZGlhbmVzcyBvZiB0aGUgaG9zdCBhcmNoaXRlY3R1cmUuIFRoZSBkcml2ZXIgaXMgc2hpcHBlZCB3aXRoCitib3RoIGxpdHRsZSBhbmQgYmlnIGVuZGlhbiBQQ0EgZmlybXdhcmUgaW1hZ2VzLgorCitOYW1lIGFuZCBsb2NhdGlvbiBvZiB0aGUgbmV3IGZpcm13YXJlIGltYWdlcyBjYW4gYmUgc2V0IGF0IGtlcm5lbAorY29uZmlndXJhdGlvbiB0aW1lOgorCisxLiBDb3B5IHRoZSBuZXcgZmlybXdhcmUgYmluYXJ5IGZpbGVzICh3aXRoIC5iaW4sIC5iaW4xIG9yIC5iaW4yIHN1ZmZpeCkKKyAgIHRvIHNvbWUgZGlyZWN0b3J5LCBzdWNoIGFzIGxpbnV4L2RyaXZlcnMvYXRtLgorCisyLiBSZWNvbmZpZ3VyZSB5b3VyIGtlcm5lbCB0byBzZXQgdGhlIG5ldyBmaXJtd2FyZSBuYW1lIGFuZCBsb2NhdGlvbi4KKyAgIEV4cGVjdGVkIHBhdGhuYW1lcyBhcmUgYWJzb2x1dGUgb3IgcmVsYXRpdmUgdG8gdGhlIGRyaXZlcnMvYXRtIGRpcmVjdG9yeS4KKworMy4gUmVidWlsZCBhbmQgcmUtaW5zdGFsbCB5b3VyIGtlcm5lbCBvciB5b3VyIG1vZHVsZS4KKworCitGZWVkYmFjaworLS0tLS0tLS0KKworRmVlZGJhY2sgaXMgd2VsY29tZS4gUGxlYXNlIHNlbmQgc3VjY2VzcyBzdG9yaWVzL2J1ZyByZXBvcnRzLworcGF0Y2hlcy9pbXByb3ZlbWVudC9jb21tZW50cy9mbGFtZXMgdG8gPGxpenppQGNuYW0uZnI+LgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2ZyYW1lcmVsYXkudHh0IGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2ZyYW1lcmVsYXkudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFhMGI3MjAKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZnJhbWVyZWxheS50eHQKQEAgLTAsMCArMSwzOSBAQAorRnJhbWUgUmVsYXkgKEZSKSBzdXBwb3J0IGZvciBsaW51eCBpcyBidWlsdCBpbnRvIGEgdHdvIHRpZXJlZCBzeXN0ZW0gb2YgZGV2aWNlIAorZHJpdmVycy4gIFRoZSB1cHBlciBsYXllciBpbXBsZW1lbnRzIFJGQzE0OTAgRlIgc3BlY2lmaWNhdGlvbiwgYW5kIHVzZXMgdGhlCitEYXRhIExpbmsgQ29ubmVjdGlvbiBJZGVudGlmaWVyIChETENJKSBhcyBpdHMgaGFyZHdhcmUgYWRkcmVzcy4gIFVzdWFsbHkgdGhlc2UKK2FyZSBhc3NpZ25lZCBieSB5b3VyIG5ldHdvcmsgc3VwcGxpZXIsIHRoZXkgZ2l2ZSB5b3UgdGhlIG51bWJlci9udW1iZXJzIG9mCit0aGUgVmlydHVhbCBDb25uZWN0aW9ucyAoVkMpIGFzc2lnbmVkIHRvIHlvdS4KKworRWFjaCBETENJIGlzIGEgcG9pbnQtdG8tcG9pbnQgbGluayBiZXR3ZWVuIHlvdXIgbWFjaGluZSBhbmQgYSByZW1vdGUgb25lLgorQXMgc3VjaCwgYSBzZXBhcmF0ZSBkZXZpY2UgaXMgbmVlZGVkIHRvIGFjY29tbW9kYXRlIHRoZSByb3V0aW5nLiAgV2l0aGluIHRoZQorbmV0LXRvb2xzIGFyY2hpdmVzIGlzICdkbGNpY2ZnJy4gIFRoaXMgcHJvZ3JhbSB3aWxsIGNvbW11bmljYXRlIHdpdGggdGhlCitiYXNlICJETENJIiBkZXZpY2UsIGFuZCBjcmVhdGUgbmV3IG5ldCBkZXZpY2VzIG5hbWVkICdkbGNpMDAnLCAnZGxjaTAxJy4uLiAKK1RoZSBjb25maWd1cmF0aW9uIHNjcmlwdCB3aWxsIGFzayB5b3UgaG93IG1hbnkgRExDSXMgeW91IG5lZWQsIGFzIHdlbGwgYXMKK2hvdyBtYW55IERMQ0lzIHlvdSB3YW50IHRvIGFzc2lnbiB0byBlYWNoIEZyYW1lIFJlbGF5IEFjY2VzcyBEZXZpY2UgKEZSQUQpLgorCitUaGUgRExDSSB1c2VzIGEgbnVtYmVyIG9mIGZ1bmN0aW9uIGNhbGxzIHRvIGNvbW11bmljYXRlIHdpdGggdGhlIEZSQUQsIGFsbAorb2Ygd2hpY2ggYXJlIHN0b3JlZCBpbiB0aGUgRlJBRCdzIHByaXZhdGUgZGF0YSBhcmVhLiAgYXNzb2MvZGVhc3NvYywgCithY3RpdmF0ZS9kZWFjdGl2YXRlIGFuZCBkbGNpX2NvbmZpZy4gIFRoZSBETENJIHN1cHBsaWVzIGEgcmVjZWl2ZSBmdW5jdGlvbgordG8gdGhlIEZSQUQgdG8gYWNjZXB0IGluY29taW5nIHBhY2tldHMuCisKK1dpdGggdGhpcyBpbml0aWFsIG9mZmVyaW5nLCBvbmx5IDEgRlJBRCBkcml2ZXIgaXMgYXZhaWxhYmxlLiAgV2l0aCBtYW55IHRoYW5rcwordG8gU2FuZ29tYSBUZWNobm9sb2dpZXMsIERhdmlkIE1hbmRlbHN0YW0gJiBHZW5lIEtvemluLCB0aGUgUzUwMkEsIFM1MDJFICYgCitTNTA4IGFyZSBzdXBwb3J0ZWQuICBUaGlzIGRyaXZlciBpcyBjdXJyZW50bHkgc2V0IHVwIGZvciBvbmx5IEZSLCBidXQgYXMgCitTYW5nb21hIG1ha2VzIG1vcmUgZmlybXdhcmUgbW9kdWxlcyBhdmFpbGFibGUsIGl0IGNhbiBiZSB1cGRhdGVkIHRvIHByb3ZpZGUKK3RoZW0gYXMgd2VsbC4KKworQ29uZmlndXJhdGlvbiBvZiB0aGUgRlJBRCBtYWtlcyB1c2Ugb2YgYW5vdGhlciBuZXQtdG9vbHMgcHJvZ3JhbSwgJ2ZyYWRjZmcnLgorVGhpcyBwcm9ncmFtIG1ha2VzIHVzZSBvZiBhIGNvbmZpZ3VyYXRpb24gZmlsZSAod2hpY2ggZGxjaWNmZyBjYW4gYWxzbyByZWFkKQordG8gc3BlY2lmeSB0aGUgdHlwZXMgb2YgYm9hcmRzIHRvIGJlIGNvbmZpZ3VyZWQgYXMgRlJBRHMsIGFzIHdlbGwgYXMgcGVyZm9ybQorYW55IGJvYXJkIHNwZWNpZmljIGNvbmZpZ3VyYXRpb24uICBUaGUgU2FuZ29tYSBtb2R1bGUgb2YgZnJhZGNmZyBsb2FkcyB0aGUKK0ZSIGZpcm13YXJlIGludG8gdGhlIGNhcmQsIHNldHMgdGhlIGlycS9wb3J0L21lbW9yeSBpbmZvcm1hdGlvbiwgYW5kIHByb3ZpZGVzCithbiBpbml0aWFsIGNvbmZpZ3VyYXRpb24uCisKK0FkZGl0aW9uYWwgRlJBRCBkZXZpY2UgZHJpdmVycyBjYW4gYmUgYWRkZWQgYXMgaGFyZHdhcmUgaXMgYXZhaWxhYmxlLgorCitBdCB0aGlzIHRpbWUsIHRoZSBkbGNpY2ZnIGFuZCBmcmFkY2ZnIHByb2dyYW1zIGhhdmUgbm90IGJlZW4gaW5jb3Jwb3JhdGVkIGludG8KK3RoZSBuZXQtdG9vbHMgZGlzdHJpYnV0aW9uLiAgVGhleSBjYW4gYmUgZm91bmQgYXQgZnRwLmludmxvZ2ljLmNvbSwgaW4gCisvcHViL2xpbnV4LiAgTm90ZSB0aGF0IHdpdGggT1MvMiBGVFBELCB5b3UgZW5kIHVwIGluIC9wdWIgYnkgZGVmYXVsdCwgc28ganVzdAordXNlICdjZCBsaW51eCcuICB2MC4xMCBpcyBmb3IgdXNlIG9uIHByZS0yLjAuMyBhbmQgZWFybGllciwgdjAuMTUgaXMgZm9yIAorcHJlLTIuMC40IGFuZCBsYXRlci4KKwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2dlbl9zdGF0cy50eHQgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZ2VuX3N0YXRzLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMzI5N2Y3Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2dlbl9zdGF0cy50eHQKQEAgLTAsMCArMSwxMTcgQEAKK0dlbmVyaWMgbmV0d29ya2luZyBzdGF0aXN0aWNzIGZvciBuZXRsaW5rIHVzZXJzCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK1N0YXRpc3RpYyBjb3VudGVycyBhcmUgZ3JvdXBlZCBpbnRvIHN0cnVjdHM6CisKK1N0cnVjdCAgICAgICAgICAgICAgIFRMViB0eXBlICAgICAgICAgICAgICBEZXNjcmlwdGlvbgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZ25ldF9zdGF0c19iYXNpYyAgICAgVENBX1NUQVRTX0JBU0lDICAgICAgIEJhc2ljIHN0YXRpc3RpY3MKK2duZXRfc3RhdHNfcmF0ZV9lc3QgIFRDQV9TVEFUU19SQVRFX0VTVCAgICBSYXRlIGVzdGltYXRvcgorZ25ldF9zdGF0c19xdWV1ZSAgICAgVENBX1NUQVRTX1FVRVVFICAgICAgIFF1ZXVlIHN0YXRpc3RpY3MKK25vbmUgICAgICAgICAgICAgICAgIFRDQV9TVEFUU19BUFAgICAgICAgICBBcHBsaWNhdGlvbiBzcGVjaWZpYworCisKK0NvbGxlY3Rpbmc6CistLS0tLS0tLS0tLQorCitEZWNsYXJlIHRoZSBzdGF0aXN0aWMgc3RydWN0cyB5b3UgbmVlZDoKK3N0cnVjdCBteXN0cnVjdCB7CisJc3RydWN0IGduZXRfc3RhdHNfYmFzaWMJYnN0YXRzOworCXN0cnVjdCBnbmV0X3N0YXRzX3F1ZXVlCXFzdGF0czsKKwkuLi4KK307CisKK1VwZGF0ZSBzdGF0aXN0aWNzOgorbXlzdHJ1Y3QtPnRzdGF0cy5wYWNrZXQrKzsKK215c3RydWN0LT5xc3RhdHMuYmFja2xvZyArPSBza2ItPnBrdF9sZW47CisKKworRXhwb3J0IHRvIHVzZXJzcGFjZSAoRHVtcCk6CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworbXlfZHVtcGluZ19yb3V0aW5lKHN0cnVjdCBza19idWZmICpza2IsIC4uLikKK3sKKwlzdHJ1Y3QgZ25ldF9kdW1wIGR1bXA7CisKKwlpZiAoZ25ldF9zdGF0c19zdGFydF9jb3B5KHNrYiwgVENBX1NUQVRTMiwgJm15c3RydWN0LT5sb2NrLCAmZHVtcCkgPCAwKQorCQlnb3RvIHJ0YXR0cl9mYWlsdXJlOworCisJaWYgKGduZXRfc3RhdHNfY29weV9iYXNpYygmZHVtcCwgJm15c3RydWN0LT5ic3RhdHMpIDwgMCB8fAorCSAgICBnbmV0X3N0YXRzX2NvcHlfcXVldWUoJmR1bXAsICZteXN0cnVjdC0+cXN0YXRzKSA8IDAgfHwKKwkJZ25ldF9zdGF0c19jb3B5X2FwcCgmZHVtcCwgJnhzdGF0cywgc2l6ZW9mKHhzdGF0cykpIDwgMCkKKwkJZ290byBydGF0dHJfZmFpbHVyZTsKKworCWlmIChnbmV0X3N0YXRzX2ZpbmlzaF9jb3B5KCZkdW1wKSA8IDApCisJCWdvdG8gcnRhdHRyX2ZhaWx1cmU7CisJLi4uCit9CisKK1RDQV9TVEFUUy9UQ0FfWFNUQVRTIGJhY2t3YXJkIGNvbXBhdGliaWxpdHk6CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitQcmlvciB1c2VycyBvZiBzdHJ1Y3QgdGNfc3RhdHMgYW5kIHhzdGF0cyBjYW4gbWFpbnRhaW4gYmFja3dhcmQKK2NvbXBhdGliaWxpdHkgYnkgY2FsbGluZyB0aGUgY29tcGF0IHdyYXBwZXJzIHRvIGtlZXAgcHJvdmlkaW5nIHRoZQorZXhpc3RpbmcgVExWIHR5cGVzLgorCitteV9kdW1waW5nX3JvdXRpbmUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgLi4uKQoreworICAgIGlmIChnbmV0X3N0YXRzX3N0YXJ0X2NvcHlfY29tcGF0KHNrYiwgVENBX1NUQVRTMiwgVENBX1NUQVRTLAorCQlUQ0FfWFNUQVRTLCAmbXlzdHJ1Y3QtPmxvY2ssICZkdW1wKSA8IDApCisJCWdvdG8gcnRhdHRyX2ZhaWx1cmU7CisJLi4uCit9CisKK0Egc3RydWN0IHRjX3N0YXRzIHdpbGwgYmUgZmlsbGVkIG91dCBkdXJpbmcgZ25ldF9zdGF0c19jb3B5XyogY2FsbHMKK2FuZCBhcHBlbmRlZCB0byB0aGUgc2tiLiBUQ0FfWFNUQVRTIGlzIHByb3ZpZGVkIGlmIGduZXRfc3RhdHNfY29weV9hcHAKK3dhcyBjYWxsZWQuCisKKworTG9ja2luZzoKKy0tLS0tLS0tCisKK0xvY2tzIGFyZSB0YWtlbiBiZWZvcmUgd3JpdGluZyBhbmQgcmVsZWFzZWQgb25jZSBhbGwgc3RhdGlzdGljcyBoYXZlCitiZWVuIHdyaXR0ZW4uIExvY2tzIGFyZSBhbHdheXMgcmVsZWFzZWQgaW4gY2FzZSBvZiBhbiBlcnJvci4gWW91CithcmUgcmVzcG9uc2libGUgZm9yIG1ha2luZyBzdXJlIHRoYXQgdGhlIGxvY2sgaXMgaW5pdGlhbGl6ZWQuCisKKworUmF0ZSBFc3RpbWF0b3I6CistLS0tLS0tLS0tLS0tLQorCiswKSBQcmVwYXJlIGFuIGVzdGltYXRvciBhdHRyaWJ1dGUuIE1vc3QgbGlrZWx5IHRoaXMgd291bGQgYmUgaW4gdXNlcgorICAgc3BhY2UuIFRoZSB2YWx1ZSBvZiB0aGlzIFRMViBzaG91bGQgY29udGFpbiBhIHRjX2VzdGltYXRvciBzdHJ1Y3R1cmUuCisgICBBcyB1c3VhbCwgc3VjaCBhIFRMViBuZWVzIHRvIGJlIDMyIGJpdCBhbGlnbmVkIGFuZCB0aGVyZWZvcmUgdGhlCisgICBsZW5ndGggbmVlZHMgdG8gYmUgYXBwcm9wcmlhdGVseSBzZXQgZXRjLiBUaGUgZXN0aW1hdG9yIGludGVydmFsCisgICBhbmQgZXdtYSBsb2cgbmVlZCB0byBiZSBjb252ZXJ0ZWQgdG8gdGhlIGFwcHJvcHJpYXRlIHZhbHVlcy4KKyAgIHRjX2VzdGltYXRvci5jOjp0Y19zZXR1cF9lc3RpbWF0b3IoKSBpcyBhZHZpc2FibGUgdG8gYmUgdXNlZCBhcyB0aGUKKyAgIGNvbnZlcnNpb24gcm91dGluZS4gSXQgZG9lcyBhIGZldyBjbGV2ZXIgdGhpbmdzLiBJdCB0YWtlcyBhIHRpbWUKKyAgIGludGVydmFsIGluIG1pY3Jvc2VjcywgYSB0aW1lIGNvbnN0YW50IGFsc28gaW4gbWljcm9zZWNzIGFuZCBhIHN0cnVjdAorICAgdGNfZXN0aW1hdG9yIHRvICBiZSBwb3B1bGF0ZWQuIFRoZSByZXR1cm5lZCB0Y19lc3RpbWF0b3IgY2FuIGJlCisgICB0cmFuc3BvcnRlZCB0byB0aGUga2VybmVsLiAgVHJhbnNmZXIgc3VjaCBhIHN0cnVjdHVyZSBpbiBhIFRMViBvZiB0eXBlCisgICBUQ0FfUkFURSB0byB5b3VyIGNvZGUgaW4gdGhlIGtlcm5lbC4KKworSW4gdGhlIGtlcm5lbCB3aGVuIHNldHRpbmcgdXA6CisxKSBtYWtlIHN1cmUgeW91IGhhdmUgYmFzaWMgc3RhdHMgYW5kIHJhdGUgc3RhdHMgc2V0dXAgZmlyc3QuCisyKSBtYWtlIHN1cmUgeW91IGhhdmUgaW5pdGlhbGl6ZWQgc3RhdHMgbG9jayB0aGF0IGlzIHVzZWQgdG8gc2V0dXAgc3VjaAorICAgc3RhdHMuCiszKSBOb3cgaW5pdGlhbGl6ZSBhIG5ldyBlc3RpbWF0b3I6CisKKyAgIGludCByZXQgPSBnZW5fbmV3X2VzdGltYXRvcihteV9iYXNpY3N0YXRzLG15X3JhdGVfZXN0X3N0YXRzLAorICAgICAgIG15c3RhdHNfbG9jaywgYXR0cl93aXRoX3RjZXN0aW1hdG9yX3N0cnVjdCk7CisKKyAgIGlmIHJldCA9PSAwCisgICAgICAgc3VjY2VzcworICAgZWxzZQorICAgICAgIGZhaWxlZAorCitGcm9tIG5vdyBvbiwgZXZlcnl0aW1lIHlvdSBkdW1wIG15X3JhdGVfZXN0X3N0YXRzIGl0IHdpbGwgY29udGFpbgordXB0b2RhdGUgaW5mby4KKworT25jZSB5b3UgYXJlIGRvbmUsIGNhbGwgZ2VuX2tpbGxfZXN0aW1hdG9yKG15X2Jhc2ljc3RhdHMsCitteV9yYXRlX2VzdF9zdGF0cykgTWFrZSBzdXJlIHRoYXQgbXlfYmFzaWNzdGF0cyBhbmQgbXlfcmF0ZV9lc3Rfc3RhdHMKK2FyZSBzdGlsbCB2YWxpZCAoaS5lIHN0aWxsIGV4aXN0KSBhdCB0aGUgdGltZSBvZiBtYWtpbmcgdGhpcyBjYWxsLgorCisKK0F1dGhvcnM6CistLS0tLS0tLQorVGhvbWFzIEdyYWYgPHRncmFmQHN1dWcuY2g+CitKYW1hbCBIYWRpIFNhbGltIDxoYWRpQGN5YmVydXMuY2E+CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZ2VuZXJpYy1oZGxjLnR4dCBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9nZW5lcmljLWhkbGMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdkMWRjNmIKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZ2VuZXJpYy1oZGxjLnR4dApAQCAtMCwwICsxLDEzMSBAQAorR2VuZXJpYyBIRExDIGxheWVyCitLcnp5c3p0b2YgSGFsYXNhIDxraGNAcG0ud2F3LnBsPgorSmFudWFyeSwgMjAwMworCisKK0dlbmVyaWMgSERMQyBsYXllciBjdXJyZW50bHkgc3VwcG9ydHM6CistIEZyYW1lIFJlbGF5IChBTlNJLCBDQ0lUVCBhbmQgbm8gTE1JKSwgd2l0aCBBUlAgc3VwcG9ydCAobm8gSW5BUlApLgorICBOb3JtYWwgKHJvdXRlZCkgYW5kIEV0aGVybmV0LWJyaWRnZWQgKEV0aGVybmV0IGRldmljZSBlbXVsYXRpb24pCisgIGludGVyZmFjZXMgY2FuIHNoYXJlIGEgc2luZ2xlIFBWQy4KKy0gcmF3IEhETEMgLSBlaXRoZXIgSVAgKElQdjQpIGludGVyZmFjZSBvciBFdGhlcm5ldCBkZXZpY2UgZW11bGF0aW9uLgorLSBDaXNjbyBIRExDLAorLSBQUFAgKHVzZXMgc3luY3BwcC5jKSwKKy0gWC4yNSAodXNlcyBYLjI1IHJvdXRpbmVzKS4KKworVGhlcmUgYXJlIGhhcmR3YXJlIGRyaXZlcnMgZm9yIHRoZSBmb2xsb3dpbmcgY2FyZHM6CistIEMxMDEgYnkgTW94YSBUZWNobm9sb2dpZXMgQ28uLCBMdGQuCistIFJJU0NvbS9OMiBieSBTREwgQ29tbXVuaWNhdGlvbnMgSW5jLgorLSBhbmQgb3RoZXJzLCBzb21lIG5vdCBpbiB0aGUgb2ZmaWNpYWwga2VybmVsLgorCitFdGhlcm5ldCBkZXZpY2UgZW11bGF0aW9uICh1c2luZyBIRExDIG9yIEZyYW1lLVJlbGF5IFBWQykgaXMgY29tcGF0aWJsZQord2l0aCBJRUVFIDgwMi4xUSAoVkxBTnMpIGFuZCA4MDIuMUQgKEV0aGVybmV0IGJyaWRnaW5nKS4KKworCitNYWtlIHN1cmUgdGhlIGhkbGMubyBhbmQgdGhlIGhhcmR3YXJlIGRyaXZlciBhcmUgbG9hZGVkLiBJdCBzaG91bGQKK2NyZWF0ZSBhIG51bWJlciBvZiAiaGRsYyIgKGhkbGMwIGV0YykgbmV0d29yayBkZXZpY2VzLCBvbmUgZm9yIGVhY2gKK1dBTiBwb3J0LiBZb3UnbGwgbmVlZCB0aGUgInNldGhkbGMiIHV0aWxpdHksIGdldCBpdCBmcm9tOgorCWh0dHA6Ly9ocS5wbS53YXcucGwvaGRsYy8KKworQ29tcGlsZSBzZXRoZGxjLmMgdXRpbGl0eToKKwlnY2MgLU8yIC1XYWxsIC1vIHNldGhkbGMgc2V0aGRsYy5jCitNYWtlIHN1cmUgeW91J3JlIHVzaW5nIGEgY29ycmVjdCB2ZXJzaW9uIG9mIHNldGhkbGMgZm9yIHlvdXIga2VybmVsLgorCitVc2Ugc2V0aGRsYyB0byBzZXQgcGh5c2ljYWwgaW50ZXJmYWNlLCBjbG9jayByYXRlLCBIRExDIG1vZGUgdXNlZCwKK2FuZCBhZGQgYW55IHJlcXVpcmVkIFBWQ3MgaWYgdXNpbmcgRnJhbWUgUmVsYXkuCitVc3VhbGx5IHlvdSB3YW50IHNvbWV0aGluZyBsaWtlOgorCisJc2V0aGRsYyBoZGxjMCBjbG9jayBpbnQgcmF0ZSAxMjgwMDAKKwlzZXRoZGxjIGhkbGMwIGNpc2NvIGludGVydmFsIDEwIHRpbWVvdXQgMjUKK29yCisJc2V0aGRsYyBoZGxjMCByczIzMiBjbG9jayBleHQKKwlzZXRoZGxjIGhkbGMwIGZyIGxtaSBhbnNpCisJc2V0aGRsYyBoZGxjMCBjcmVhdGUgOTkKKwlpZmNvbmZpZyBoZGxjMCB1cAorCWlmY29uZmlnIHB2YzAgbG9jYWxJUCBwb2ludG9wb2ludCByZW1vdGVJUAorCitJbiBGcmFtZSBSZWxheSBtb2RlLCBpZmNvbmZpZyBtYXN0ZXIgaGRsYyBkZXZpY2UgdXAgKHdpdGhvdXQgYXNzaWduaW5nCithbnkgSVAgYWRkcmVzcyB0byBpdCkgYmVmb3JlIHVzaW5nIHB2YyBkZXZpY2VzLgorCisKK1NldHRpbmcgaW50ZXJmYWNlOgorCisqIHYzNSB8IHJzMjMyIHwgeDIxIHwgdDEgfCBlMSAtIHNldHMgcGh5c2ljYWwgaW50ZXJmYWNlIGZvciBhIGdpdmVuIHBvcnQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgdGhlIGNhcmQgaGFzIHNvZnR3YXJlLXNlbGVjdGFibGUgaW50ZXJmYWNlcworICBsb29wYmFjayAtIGFjdGl2YXRlIGhhcmR3YXJlIGxvb3BiYWNrIChmb3IgdGVzdGluZyBvbmx5KQorKiBjbG9jayBleHQgLSBleHRlcm5hbCBjbG9jayAodXNlcyBEVEUgUlggYW5kIFRYIGNsb2NrKQorKiBjbG9jayBpbnQgLSBpbnRlcm5hbCBjbG9jayAocHJvdmlkZXMgY2xvY2sgc2lnbmFsIG9uIERDRSBjbG9jayBvdXRwdXQpCisqIGNsb2NrIHR4aW50IC0gVFggaW50ZXJuYWwsIFJYIGV4dGVybmFsIChwcm92aWRlcyBUWCBjbG9jayBvbiBEQ0Ugb3V0cHV0KQorKiBjbG9jayB0eGZyb21yeCAtIFRYIGNsb2NrIGRlcml2ZWQgZnJvbSBSWCBjbG9jayAoVFggY2xvY2sgb24gRENFIG91dHB1dCkKKyogcmF0ZSAtIHNldHMgY2xvY2sgcmF0ZSBpbiBicHMgKG5vdCByZXF1aXJlZCBmb3IgZXh0ZXJuYWwgY2xvY2sgb3IKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciB0eGZyb21yeCkKKworU2V0dGluZyBwcm90b2NvbDoKKworKiBoZGxjIC0gc2V0cyByYXcgSERMQyAoSVAtb25seSkgbW9kZQorICBucnogLyBucnppIC8gZm0tbWFyayAvIGZtLXNwYWNlIC8gbWFuY2hlc3RlciAtIHNldHMgdHJhbnNtaXNzaW9uIGNvZGUKKyAgbm8tcGFyaXR5IC8gY3JjMTYgLyBjcmMxNi1wcjAgKENSQzE2IHdpdGggcHJlc2V0IHplcm9zKSAvIGNyYzMyLWl0dQorICBjcmMxNi1pdHUgKENSQzE2IHdpdGggSVRVLVQgcG9seW5vbWlhbCkgLyBjcmMxNi1pdHUtcHIwIC0gc2V0cyBwYXJpdHkKKworKiBoZGxjLWV0aCAtIEV0aGVybmV0IGRldmljZSBlbXVsYXRpb24gdXNpbmcgSERMQy4gUGFyaXR5IGFuZCBlbmNvZGluZworICBhcyBhYm92ZS4KKworKiBjaXNjbyAtIHNldHMgQ2lzY28gSERMQyBtb2RlIChJUCwgSVB2NiBhbmQgSVBYIHN1cHBvcnRlZCkKKyAgaW50ZXJ2YWwgLSB0aW1lIGluIHNlY29uZHMgYmV0d2VlbiBrZWVwYWxpdmUgcGFja2V0cworICB0aW1lb3V0IC0gdGltZSBpbiBzZWNvbmRzIGFmdGVyIGxhc3QgcmVjZWl2ZWQga2VlcGFsaXZlIHBhY2tldCBiZWZvcmUKKyAgICAgICAgICAgIHdlIGFzc3VtZSB0aGUgbGluayBpcyBkb3duCisKKyogcHBwIC0gc2V0cyBzeW5jaHJvbm91cyBQUFAgbW9kZQorCisqIHgyNSAtIHNldHMgWC4yNSBtb2RlCisKKyogZnIgLSBGcmFtZSBSZWxheSBtb2RlCisgIGxtaSBhbnNpIC8gY2NpdHQgLyBub25lIC0gTE1JIChsaW5rIG1hbmFnZW1lbnQpIHR5cGUKKyAgZGNlIC0gRnJhbWUgUmVsYXkgRENFIChuZXR3b3JrKSBzaWRlIExNSSBpbnN0ZWFkIG9mIGRlZmF1bHQgRFRFICh1c2VyKS4KKyAgSXQgaGFzIG5vdGhpbmcgdG8gZG8gd2l0aCBjbG9ja3MhCisgIHQzOTEgLSBsaW5rIGludGVncml0eSB2ZXJpZmljYXRpb24gcG9sbGluZyB0aW1lciAoaW4gc2Vjb25kcykgLSB1c2VyCisgIHQzOTIgLSBwb2xsaW5nIHZlcmlmaWNhdGlvbiB0aW1lciAoaW4gc2Vjb25kcykgLSBuZXR3b3JrCisgIG4zOTEgLSBmdWxsIHN0YXR1cyBwb2xsaW5nIGNvdW50ZXIgLSB1c2VyCisgIG4zOTIgLSBlcnJvciB0aHJlc2hvbGQgLSBib3RoIHVzZXIgYW5kIG5ldHdvcmsKKyAgbjM5MyAtIG1vbml0b3JlZCBldmVudHMgY291bnQgLSBib3RoIHVzZXIgYW5kIG5ldHdvcmsKKworRnJhbWUtUmVsYXkgb25seToKKyogY3JlYXRlIG4gfCBkZWxldGUgbiAtIGFkZHMgLyBkZWxldGVzIFBWQyBpbnRlcmZhY2Ugd2l0aCBETENJICNuLgorICBOZXdseSBjcmVhdGVkIGludGVyZmFjZSB3aWxsIGJlIG5hbWVkIHB2YzAsIHB2YzEgZXRjLgorCisqIGNyZWF0ZSBldGhlciBuIHwgZGVsZXRlIGV0aGVyIG4gLSBhZGRzIGEgZGV2aWNlIGZvciBFdGhlcm5ldC1icmlkZ2VkCisgIGZyYW1lcy4gVGhlIGRldmljZSB3aWxsIGJlIG5hbWVkIHB2Y2V0aDAsIHB2Y2V0aDEgZXRjLgorCisKKworCitCb2FyZC1zcGVjaWZpYyBpc3N1ZXMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCituMi5vIGFuZCBjMTAxLm8gbmVlZCBwYXJhbWV0ZXJzIHRvIHdvcms6CisKKwlpbnNtb2QgbjIgaHc9aW8saXJxLHJhbSxwb3J0c1s6aW8saXJxLC4uLl0KK2V4YW1wbGU6CisJaW5zbW9kIG4yIGh3PTB4MzAwLDEwLDB4RDAwMDAsMDEKKworb3IKKwlpbnNtb2QgYzEwMSBodz1pcnEscmFtWzppcnEsLi4uXQorZXhhbXBsZToKKwlpbnNtb2QgYzEwMSBodz05LDB4ZGMwMDAKKworSWYgYnVpbHQgaW50byB0aGUga2VybmVsLCB0aGVzZSBkcml2ZXJzIG5lZWQga2VybmVsIChjb21tYW5kIGxpbmUpIHBhcmFtZXRlcnM6CisJbjIuaHc9aW8saXJxLHJhbSxwb3J0czouLi4KK29yCisJYzEwMS5odz1pcnEscmFtOi4uLgorCisKKworSWYgeW91IGhhdmUgYSBwcm9ibGVtIHdpdGggTjIgb3IgQzEwMSBjYXJkLCB5b3UgY2FuIGlzc3VlIHRoZSAicHJpdmF0ZSIKK2NvbW1hbmQgdG8gc2VlIHBvcnQncyBwYWNrZXQgZGVzY3JpcHRvciByaW5ncyAoaW4ga2VybmVsIGxvZ3MpOgorCisJc2V0aGRsYyBoZGxjMCBwcml2YXRlCisKK1RoZSBoYXJkd2FyZSBkcml2ZXIgaGFzIHRvIGJlIGJ1aWxkIHdpdGggQ09ORklHX0hETENfREVCVUdfUklOR1MuCitBdHRhY2hpbmcgdGhpcyBpbmZvIHRvIGJ1ZyByZXBvcnRzIHdvdWxkIGJlIGhlbHBmdWwuIEFueXdheSwgbGV0IG1lIGtub3cKK2lmIHlvdSBoYXZlIHByb2JsZW1zIHVzaW5nIHRoaXMuCisKK0ZvciBwYXRjaGVzIGFuZCBvdGhlciBpbmZvIGxvb2sgYXQgaHR0cDovL2hxLnBtLndhdy5wbC9oZGxjLwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2lmZW5zbGF2ZS5jIGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2lmZW5zbGF2ZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYzMTVkMjAKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvaWZlbnNsYXZlLmMKQEAgLTAsMCArMSwxMTEwIEBACisvKiBNb2RlOiBDOworICogaWZlbnNsYXZlLmM6IENvbmZpZ3VyZSBuZXR3b3JrIGludGVyZmFjZXMgZm9yIHBhcmFsbGVsIHJvdXRpbmcuCisgKgorICoJVGhpcyBwcm9ncmFtIGNvbnRyb2xzIHRoZSBMaW51eCBpbXBsZW1lbnRhdGlvbiBvZiBydW5uaW5nIG11bHRpcGxlCisgKgluZXR3b3JrIGludGVyZmFjZXMgaW4gcGFyYWxsZWwuCisgKgorICogQXV0aG9yOglEb25hbGQgQmVja2VyIDxiZWNrZXJAY2VzZGlzLmdzZmMubmFzYS5nb3Y+CisgKgkJQ29weXJpZ2h0IDE5OTQtMTk5NiBEb25hbGQgQmVja2VyCisgKgorICoJCVRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdAorICoJCWFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqCQlMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqCVRoZSBhdXRob3IgbWF5IGJlIHJlYWNoZWQgYXMgYmVja2VyQENFU0RJUy5nc2ZjLm5hc2EuZ292LCBvciBDL08KKyAqCUNlbnRlciBvZiBFeGNlbGxlbmNlIGluIFNwYWNlIERhdGEgYW5kIEluZm9ybWF0aW9uIFNjaWVuY2VzCisgKgkgICBDb2RlIDkzMC41LCBHb2RkYXJkIFNwYWNlIEZsaWdodCBDZW50ZXIsIEdyZWVuYmVsdCBNRCAyMDc3MQorICoKKyAqICBDaGFuZ2VzIDoKKyAqICAgIC0gMjAwMC8xMC8wMiBXaWxseSBUYXJyZWF1IDx3aWxseSBhdCBtZXRhLXgub3JnPiA6CisgKiAgICAgICAtIGZldyBmaXhlcy4gTWFzdGVyJ3MgTUFDIGFkZHJlc3MgaXMgbm93IGNvcnJlY3RseSB0YWtlbiBmcm9tCisgKiAgICAgICAgIHRoZSBmaXJzdCBkZXZpY2Ugd2hlbiBub3QgcHJldmlvdXNseSBzZXQgOworICogICAgICAgLSBkZXRhY2ggc3VwcG9ydCA6IGNhbGwgQk9ORF9SRUxFQVNFIHRvIGRldGFjaCBhbiBlbnNsYXZlZCBpbnRlcmZhY2UuCisgKiAgICAgICAtIGdpdmUgYSBtaW5pLWhvd3RvIGZyb20gY29tbWFuZC1saW5lIGhlbHAgOiAjIGlmZW5zbGF2ZSAtaAorICoKKyAqICAgIC0gMjAwMS8wMi8xNiBDaGFkIE4uIFRpbmRlbCA8Y3RpbmRlbCBhdCBpZWVlIGRvdCBvcmc+IDoKKyAqICAgICAgIC0gTWFzdGVyIGlzIG5vdyBicm91Z2h0IGRvd24gYmVmb3JlIHNldHRpbmcgdGhlIE1BQyBhZGRyZXNzLiAgSW4KKyAqICAgICAgICAgdGhlIDIuNCBrZXJuZWwgeW91IGNhbid0IGNoYW5nZSB0aGUgTUFDIGFkZHJlc3Mgd2hpbGUgdGhlIGRldmljZSBpcworICogICAgICAgICB1cCBiZWNhdXNlIHlvdSBnZXQgRUJVU1kuCisgKgorICogICAgLSAyMDAxLzA5LzEzIFRha2FvIEluZG9oIDxpbmRvdSBkb3QgdGFrYW8gYXQganAgZG90IGZ1aml0c3UgZG90IGNvbT4KKyAqICAgICAgIC0gQWRkZWQgdGhlIGFiaWxpdHkgdG8gY2hhbmdlIHRoZSBhY3RpdmUgaW50ZXJmYWNlIG9uIGEgbW9kZSAxIGJvbmQKKyAqICAgICAgICAgYXQgcnVudGltZS4KKyAqCisgKiAgICAtIDIwMDEvMTAvMjMgQ2hhZCBOLiBUaW5kZWwgPGN0aW5kZWwgYXQgaWVlZSBkb3Qgb3JnPiA6CisgKiAgICAgICAtIE5vIGxvbmdlciBzZXQgdGhlIE1BQyBhZGRyZXNzIG9mIHRoZSBtYXN0ZXIuICBUaGUgYm9uZCBkZXZpY2Ugd2lsbAorICogICAgICAgICB0YWtlIGNhcmUgb2YgdGhpcyBpdHNlbGYKKyAqICAgICAgIC0gVHJ5IHRoZSBTSU9DKioqIHZlcnNpb25zIG9mIHRoZSBib25kaW5nIGlvY3RscyBiZWZvcmUgdXNpbmcgdGhlCisgKiAgICAgICAgIG9sZCB2ZXJzaW9ucworICogICAgLSAyMDAyLzAyLzE4IEVyaWsgSGFiYmluZ2EgPGVyaWtfaGFiYmluZ2EgQCBocCBkb3QgY29tPiA6CisgKiAgICAgICAtIGlmcjIuaWZyX2ZsYWdzIHdhcyBub3QgaW5pdGlhbGl6ZWQgaW4gdGhlIGh3YWRkcl9ub3RzZXQgY2FzZSwKKyAqICAgICAgICAgU0lPQ0dJRkZMQUdTIG5vdyBjYWxsZWQgYmVmb3JlIGh3YWRkcl9ub3RzZXQgdGVzdAorICoKKyAqICAgIC0gMjAwMi8xMC8zMSBUb255IEN1cmVpbmd0b24gPHRvbnkuY3VyZWluZ3RvbiAqIGhwX2NvbT4gOgorICogICAgICAgLSBJZiB0aGUgbWFzdGVyIGRvZXMgbm90IGhhdmUgYSBoYXJkd2FyZSBhZGRyZXNzIHdoZW4gdGhlIGZpcnN0IHNsYXZlCisgKiAgICAgICAgIGlzIGVuc2xhdmVkLCB0aGUgbWFzdGVyIGlzIGFzc2lnbmVkIHRoZSBoYXJkd2FyZSBhZGRyZXNzIG9mIHRoYXQKKyAqICAgICAgICAgc2xhdmUgLSB0aGVyZSBpcyBhIGNvbW1lbnQgaW4gYm9uZGluZy5jIHN0YXRpbmcgImlmZW5zbGF2ZSB0YWtlcworICogICAgICAgICBjYXJlIG9mIHRoaXMgbm93LiIgVGhpcyBjb3JyZWN0cyB0aGUgcHJvYmxlbSBvZiBzbGF2ZXMgaGF2aW5nCisgKiAgICAgICAgIGRpZmZlcmVudCBoYXJkd2FyZSBhZGRyZXNzZXMgaW4gYWN0aXZlLWJhY2t1cCBtb2RlIHdoZW4KKyAqICAgICAgICAgbXVsdGlwbGUgaW50ZXJmYWNlcyBhcmUgc3BlY2lmaWVkIG9uIGEgc2luZ2xlIGlmZW5zbGF2ZSBjb21tYW5kCisgKiAgICAgICAgIChpZmVuc2xhdmUgYm9uZDAgZXRoMCBldGgxKS4KKyAqCisgKiAgICAtIDIwMDMvMDMvMTggLSBUc2lwcHkgTWVuZGVsc29uIDx0c2lwcHkubWVuZGVsc29uIGF0IGludGVsIGRvdCBjb20+IGFuZAorICogICAgICAgICAgICAgICAgICAgU2htdWxpayBIZW4gPHNobXVsaWsuaGVuIGF0IGludGVsIGRvdCBjb20+CisgKiAgICAgICAtIE1vdmVkIHNldHRpbmcgdGhlIHNsYXZlJ3MgbWFjIGFkZHJlc3MgYW5kIG9wZW5uaW5nIGl0LCBmcm9tCisgKiAgICAgICAgIHRoZSBhcHBsaWNhdGlvbiB0byB0aGUgZHJpdmVyLiBUaGlzIGVuYWJsZXMgc3VwcG9ydCBvZiBtb2RlcworICogICAgICAgICB0aGF0IG5lZWQgdG8gdXNlIHRoZSB1bmlxdWUgbWFjIGFkZHJlc3Mgb2YgZWFjaCBzbGF2ZS4KKyAqICAgICAgICAgVGhlIGRyaXZlciBhbHNvIHRha2VzIGNhcmUgb2YgY2xvc2luZyB0aGUgc2xhdmUgYW5kIHJlc3RvcmluZyBpdHMKKyAqICAgICAgICAgb3JpZ2luYWwgbWFjIGFkZHJlc3MgdXBvbiByZWxlYXNlLgorICogICAgICAgICBJbiBhZGRpdGlvbiwgYmxvY2sgcG9zc2liaWxpdHkgb2YgZW5zbGF2aW5nIGJlZm9yZSB0aGUgbWFzdGVyIGlzIHVwLgorICogICAgICAgICBUaGlzIHByZXZlbnRzIHB1dHRpbmcgdGhlIHN5c3RlbSBpbiBhbiB1bmRlZmluZWQgc3RhdGUuCisgKgorICogICAgLSAyMDAzLzA1LzAxIC0gQW1pciBOb2FtIDxhbWlyLm5vYW0gYXQgaW50ZWwgZG90IGNvbT4KKyAqICAgICAgIC0gQWRkZWQgQUJJIHZlcnNpb24gY29udHJvbCB0byByZXN0b3JlIGNvbXBhdGliaWxpdHkgYmV0d2VlbgorICogICAgICAgICBuZXcvb2xkIGlmZW5zbGF2ZSBhbmQgbmV3L29sZCBib25kaW5nLgorICogICAgICAgLSBQcmV2ZW50IGFkZGluZyBhbiBhZGFwdGVyIHRoYXQgaXMgYWxyZWFkeSBhIHNsYXZlLgorICogICAgICAgICBGaXhlcyB0aGUgcHJvYmxlbSBvZiBzdGFsbGluZyB0aGUgdHJhbnNtaXNzaW9uIGFuZCBsZWF2aW5nCisgKiAgICAgICAgIHRoZSBzbGF2ZSBpbiBhIGRvd24gc3RhdGUuCisgKgorICogICAgLSAyMDAzLzA1LzAxIC0gU2htdWxpayBIZW4gPHNobXVsaWsuaGVuIGF0IGludGVsIGRvdCBjb20+CisgKiAgICAgICAtIFByZXZlbnQgZW5zbGF2aW5nIGlmIHRoZSBib25kIGRldmljZSBpcyBkb3duLgorICogICAgICAgICBGaXhlcyB0aGUgcHJvYmxlbSBvZiBsZWF2aW5nIHRoZSBzeXN0ZW0gaW4gdW5zdGFibGUgc3RhdGUgYW5kCisgKiAgICAgICAgIGhhbHRpbmcgd2hlbiB0cnlpbmcgdG8gcmVtb3ZlIHRoZSBtb2R1bGUuCisgKiAgICAgICAtIENsb3NlIHNvY2tldCBvbiBhbGwgYWJub3JtYWwgZXhpc3RzLgorICogICAgICAgLSBBZGQgdmVyc2lvbmluZyBzY2hlbWUgdGhhdCBmb2xsb3dzIHRoYXQgb2YgdGhlIGJvbmRpbmcgZHJpdmVyLgorICogICAgICAgICBjdXJyZW50IHZlcnNpb24gaXMgMS4wLjAgYXMgYSBiYXNlIGxpbmUuCisgKgorICogICAgLSAyMDAzLzA1LzIyIC0gSmF5IFZvc2J1cmdoIDxmdWJhciBhdCB1cyBkb3QgaWJtIGRvdCBjb20+CisgKgkgLSBpZmVuc2xhdmUgLWMgd2FzIGJyb2tlbjsgaXQncyBub3cgZml4ZWQKKyAqCSAtIEZpeGVkIHByb2JsZW0gd2l0aCByb3V0ZXMgdmFuaXNoaW5nIGZyb20gbWFzdGVyIGR1cmluZyBlbnNsYXZlCisgKgkgICBwcm9jZXNzaW5nLgorICoKKyAqICAgIC0gMjAwMy8wNS8yNyAtIEFtaXIgTm9hbSA8YW1pci5ub2FtIGF0IGludGVsIGRvdCBjb20+CisgKgkgLSBGaXggYmFja3dhcmQgY29tcGF0aWJpbGl0eSBpc3N1ZXM6CisgKgkgICBGb3IgZHJpdmVycyBub3QgdXNpbmcgQUJJIHZlcnNpb25zLCBzbGF2ZSB3YXMgc2V0IGRvd24gd2hpbGUKKyAqCSAgIGl0IHNob3VsZCBiZSBsZWZ0IHVwIGJlZm9yZSBlbnNsYXZpbmcuCisgKgkgICBBbHNvLCBtYXN0ZXIgd2FzIG5vdCBzZXQgZG93biBhbmQgdGhlIGRlZmF1bHQgc2V0X21hY19hZGRyZXNzKCkKKyAqCSAgIHdvdWxkIGZhaWwgYW5kIGdlbmVyYXRlIGFuIGVycm9yIG1lc3NhZ2UgaW4gdGhlIHN5c3RlbSBsb2cuCisgKiAJIC0gRm9yIG9wdF9jOiBzbGF2ZSBzaG91bGQgbm90IGJlIHNldCB0byB0aGUgbWFzdGVyJ3Mgc2V0dGluZworICoJICAgd2hpbGUgaXQgaXMgcnVubmluZy4gSXQgd2FzIGFscmVhZHkgc2V0IGR1cmluZyBlbnNsYXZlLiBUbworICoJICAgc2ltcGxpZnkgdGhpbmdzLCBpdCBpcyBub3cgaGFuZGVsZWQgc2VwYXJhdGVseS4KKyAqCisgKiAgICAtIDIwMDMvMTIvMDEgLSBTaG11bGlrIEhlbiA8c2htdWxpay5oZW4gYXQgaW50ZWwgZG90IGNvbT4KKyAqCSAtIENvZGUgY2xlYW51cCBhbmQgc3R5bGUgY2hhbmdlcworICoJICAgc2V0IHZlcnNpb24gdG8gMS4xLjAKKyAqLworCisjZGVmaW5lIEFQUF9WRVJTSU9OCSIxLjEuMCIKKyNkZWZpbmUgQVBQX1JFTERBVEUJIkRlY2VtYmVyIDEsIDIwMDMiCisjZGVmaW5lIEFQUF9OQU1FCSJpZmVuc2xhdmUiCisKK3N0YXRpYyBjaGFyICp2ZXJzaW9uID0KK0FQUF9OQU1FICIuYzp2IiBBUFBfVkVSU0lPTiAiICgiIEFQUF9SRUxEQVRFICIpXG4iCisibyBEb25hbGQgQmVja2VyIChiZWNrZXJAY2VzZGlzLmdzZmMubmFzYS5nb3YpLlxuIgorIm8gRGV0YWNoIHN1cHBvcnQgYWRkZWQgb24gMjAwMC8xMC8wMiBieSBXaWxseSBUYXJyZWF1ICh3aWxseSBhdCBtZXRhLXgub3JnKS5cbiIKKyJvIDIuNCBrZXJuZWwgc3VwcG9ydCBhZGRlZCBvbiAyMDAxLzAyLzE2IGJ5IENoYWQgTi4gVGluZGVsXG4iCisiICAoY3RpbmRlbCBhdCBpZWVlIGRvdCBvcmcpLlxuIjsKKworc3RhdGljIGNvbnN0IGNoYXIgKnVzYWdlX21zZyA9CisiVXNhZ2U6IGlmZW5zbGF2ZSBbLWZdIDxtYXN0ZXItaWY+IDxzbGF2ZS1pZj4gWzxzbGF2ZS1pZj4uLi5dXG4iCisiICAgICAgIGlmZW5zbGF2ZSAtZCAgIDxtYXN0ZXItaWY+IDxzbGF2ZS1pZj4gWzxzbGF2ZS1pZj4uLi5dXG4iCisiICAgICAgIGlmZW5zbGF2ZSAtYyAgIDxtYXN0ZXItaWY+IDxzbGF2ZS1pZj5cbiIKKyIgICAgICAgaWZlbnNsYXZlIC0taGVscFxuIjsKKworc3RhdGljIGNvbnN0IGNoYXIgKmhlbHBfbXNnID0KKyJcbiIKKyIgICAgICAgVG8gY3JlYXRlIGEgYm9uZCBkZXZpY2UsIHNpbXBseSBmb2xsb3cgdGhlc2UgdGhyZWUgc3RlcHMgOlxuIgorIiAgICAgICAtIGVuc3VyZSB0aGF0IHRoZSByZXF1aXJlZCBkcml2ZXJzIGFyZSBwcm9wZXJseSBsb2FkZWQgOlxuIgorIiAgICAgICAgICMgbW9kcHJvYmUgYm9uZGluZyA7IG1vZHByb2JlIDwzYzU5eHxlZXBybzEwMHxwY25ldDMyfHR1bGlwfC4uLj5cbiIKKyIgICAgICAgLSBhc3NpZ24gYW4gSVAgYWRkcmVzcyB0byB0aGUgYm9uZCBkZXZpY2UgOlxuIgorIiAgICAgICAgICMgaWZjb25maWcgYm9uZDAgPGFkZHI+IG5ldG1hc2sgPG1hc2s+IGJyb2FkY2FzdCA8YmNhc3Q+XG4iCisiICAgICAgIC0gYXR0YWNoIGFsbCB0aGUgaW50ZXJmYWNlcyB5b3UgbmVlZCB0byB0aGUgYm9uZCBkZXZpY2UgOlxuIgorIiAgICAgICAgICMgaWZlbnNsYXZlIFt7LWZ8LS1mb3JjZX1dIGJvbmQwIGV0aDAgW2V0aDEgW2V0aDJdLi4uXVxuIgorIiAgICAgICAgIElmIGJvbmQwIGRpZG4ndCBoYXZlIGEgTUFDIGFkZHJlc3MsIGl0IHdpbGwgdGFrZSBldGgwJ3MuIFRoZW4sIGFsbFxuIgorIiAgICAgICAgIGludGVyZmFjZXMgYXR0YWNoZWQgQUZURVIgdGhpcyBhc3NpZ25tZW50IHdpbGwgZ2V0IHRoZSBzYW1lIE1BQyBhZGRyLlxuIgorIiAgICAgICAgIChleGNlcHQgZm9yIEFMQi9UTEIgbW9kZXMpXG4iCisiXG4iCisiICAgICAgIFRvIHNldCB0aGUgYm9uZCBkZXZpY2UgZG93biBhbmQgYXV0b21hdGljYWxseSByZWxlYXNlIGFsbCB0aGUgc2xhdmVzIDpcbiIKKyIgICAgICAgICAjIGlmY29uZmlnIGJvbmQwIGRvd25cbiIKKyJcbiIKKyIgICAgICAgVG8gZGV0YWNoIGEgZGVhZCBpbnRlcmZhY2Ugd2l0aG91dCBzZXR0aW5nIHRoZSBib25kIGRldmljZSBkb3duIDpcbiIKKyIgICAgICAgICAjIGlmZW5zbGF2ZSB7LWR8LS1kZXRhY2h9IGJvbmQwIGV0aDAgW2V0aDEgW2V0aDJdLi4uXVxuIgorIlxuIgorIiAgICAgICBUbyBjaGFuZ2UgYWN0aXZlIHNsYXZlIDpcbiIKKyIgICAgICAgICAjIGlmZW5zbGF2ZSB7LWN8LS1jaGFuZ2UtYWN0aXZlfSBib25kMCBldGgwXG4iCisiXG4iCisiICAgICAgIFRvIHNob3cgbWFzdGVyIGludGVyZmFjZSBpbmZvXG4iCisiICAgICAgICAgIyBpZmVuc2xhdmUgYm9uZDBcbiIKKyJcbiIKKyIgICAgICAgVG8gc2hvdyBhbGwgaW50ZXJmYWNlcyBpbmZvXG4iCisiICAgICAgICMgaWZlbnNsYXZlIHstYXwtLWFsbC1pbnRlcmZhY2VzfVxuIgorIlxuIgorIiAgICAgICBUbyBiZSBtb3JlIHZlcmJvc2VcbiIKKyIgICAgICAgIyBpZmVuc2xhdmUgey12fC0tdmVyYm9zZX0gLi4uXG4iCisiXG4iCisiICAgICAgICMgaWZlbnNsYXZlIHstdXwtLXVzYWdlfSAgIFNob3cgdXNhZ2VcbiIKKyIgICAgICAgIyBpZmVuc2xhdmUgey1WfC0tdmVyc2lvbn0gU2hvdyB2ZXJzaW9uXG4iCisiICAgICAgICMgaWZlbnNsYXZlIHstaHwtLWhlbHB9ICAgIFRoaXMgbWVzc2FnZVxuIgorIlxuIjsKKworI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8Y3R5cGUuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPGZjbnRsLmg+CisjaW5jbHVkZSA8Z2V0b3B0Lmg+CisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgorI2luY2x1ZGUgPHN5cy9pb2N0bC5oPgorI2luY2x1ZGUgPGxpbnV4L2lmLmg+CisjaW5jbHVkZSA8bmV0L2lmX2FycC5oPgorI2luY2x1ZGUgPGxpbnV4L2lmX2V0aGVyLmg+CisjaW5jbHVkZSA8bGludXgvaWZfYm9uZGluZy5oPgorI2luY2x1ZGUgPGxpbnV4L3NvY2tpb3MuaD4KKwordHlwZWRlZiB1bnNpZ25lZCBsb25nIGxvbmcgdTY0OwkvKiBoYWNrLCBzbyB3ZSBtYXkgaW5jbHVkZSBrZXJuZWwncyBldGh0b29sLmggKi8KK3R5cGVkZWYgX191aW50MzJfdCB1MzI7CQkvKiBkaXR0byAqLwordHlwZWRlZiBfX3VpbnQxNl90IHUxNjsJCS8qIGRpdHRvICovCit0eXBlZGVmIF9fdWludDhfdCB1ODsJCS8qIGRpdHRvICovCisjaW5jbHVkZSA8bGludXgvZXRodG9vbC5oPgorCitzdHJ1Y3Qgb3B0aW9uIGxvbmdvcHRzW10gPSB7CisJLyogeyBuYW1lICBoYXNfYXJnICAqZmxhZyAgdmFsIH0gKi8KKwl7ImFsbC1pbnRlcmZhY2VzIiwJMCwgMCwgJ2EnfSwJLyogU2hvdyBhbGwgaW50ZXJmYWNlcy4gKi8KKwl7ImNoYW5nZS1hY3RpdmUiLAkwLCAwLCAnYyd9LAkvKiBDaGFuZ2UgdGhlIGFjdGl2ZSBzbGF2ZS4gICovCisJeyJkZXRhY2giLAkJMCwgMCwgJ2QnfSwJLyogRGV0YWNoIGEgc2xhdmUgaW50ZXJmYWNlLiAqLworCXsiZm9yY2UiLAkJMCwgMCwgJ2YnfSwJLyogRm9yY2UgdGhlIG9wZXJhdGlvbi4gKi8KKwl7ImhlbHAiLAkJMCwgMCwgJ2gnfSwJLyogR2l2ZSBoZWxwICovCisJeyJ1c2FnZSIsCQkwLCAwLCAndSd9LAkvKiBHaXZlIHVzYWdlICovCisJeyJ2ZXJib3NlIiwJCTAsIDAsICd2J30sCS8qIFJlcG9ydCBlYWNoIGFjdGlvbiB0YWtlbi4gKi8KKwl7InZlcnNpb24iLAkJMCwgMCwgJ1YnfSwJLyogRW1pdCB2ZXJzaW9uIGluZm9ybWF0aW9uLiAqLworCXsgMCwgMCwgMCwgMH0KK307CisKKy8qIENvbW1hbmQtbGluZSBmbGFncy4gKi8KK3Vuc2lnbmVkIGludAorb3B0X2EgPSAwLAkvKiBTaG93LWFsbC1pbnRlcmZhY2VzIGZsYWcuICovCitvcHRfYyA9IDAsCS8qIENoYW5nZS1hY3RpdmUtc2xhdmUgZmxhZy4gKi8KK29wdF9kID0gMCwJLyogRGV0YWNoIGEgc2xhdmUgaW50ZXJmYWNlLiAqLworb3B0X2YgPSAwLAkvKiBGb3JjZSB0aGUgb3BlcmF0aW9uLiAqLworb3B0X2ggPSAwLAkvKiBIZWxwICovCitvcHRfdSA9IDAsCS8qIFVzYWdlICovCitvcHRfdiA9IDAsCS8qIFZlcmJvc2UgZmxhZy4gKi8KK29wdF9WID0gMDsJLyogVmVyc2lvbiAqLworCitpbnQgc2tmZCA9IC0xOwkJLyogQUZfSU5FVCBzb2NrZXQgZm9yIGlvY3RsKCkgY2FsbHMuKi8KK2ludCBhYmlfdmVyID0gMDsJLyogdXNlcmxhbmQgLSBrZXJuZWwgQUJJIHZlcnNpb24gKi8KK2ludCBod2FkZHJfc2V0ID0gMDsJLyogTWFzdGVyJ3MgaHdhZGRyIGlzIHNldCAqLworaW50IHNhdmVkX2Vycm5vOworCitzdHJ1Y3QgaWZyZXEgbWFzdGVyX210dSwgbWFzdGVyX2ZsYWdzLCBtYXN0ZXJfaHdhZGRyOworc3RydWN0IGlmcmVxIHNsYXZlX210dSwgc2xhdmVfZmxhZ3MsIHNsYXZlX2h3YWRkcjsKKworc3RydWN0IGRldl9pZnIgeworCXN0cnVjdCBpZnJlcSAqcmVxX2lmcjsKKwljaGFyICpyZXFfbmFtZTsKKwlpbnQgcmVxX3R5cGU7Cit9OworCitzdHJ1Y3QgZGV2X2lmciBtYXN0ZXJfaWZyYVtdID0geworCXsmbWFzdGVyX210dSwgICAgICJTSU9DR0lGTVRVIiwgICAgIFNJT0NHSUZNVFV9LAorCXsmbWFzdGVyX2ZsYWdzLCAgICJTSU9DR0lGRkxBR1MiLCAgIFNJT0NHSUZGTEFHU30sCisJeyZtYXN0ZXJfaHdhZGRyLCAgIlNJT0NHSUZIV0FERFIiLCAgU0lPQ0dJRkhXQUREUn0sCisJe05VTEwsICIiLCAwfQorfTsKKworc3RydWN0IGRldl9pZnIgc2xhdmVfaWZyYVtdID0geworCXsmc2xhdmVfbXR1LCAgICAgIlNJT0NHSUZNVFUiLCAgICAgU0lPQ0dJRk1UVX0sCisJeyZzbGF2ZV9mbGFncywgICAiU0lPQ0dJRkZMQUdTIiwgICBTSU9DR0lGRkxBR1N9LAorCXsmc2xhdmVfaHdhZGRyLCAgIlNJT0NHSUZIV0FERFIiLCAgU0lPQ0dJRkhXQUREUn0sCisJe05VTEwsICIiLCAwfQorfTsKKworc3RhdGljIHZvaWQgaWZfcHJpbnQoY2hhciAqaWZuYW1lKTsKK3N0YXRpYyBpbnQgZ2V0X2Rydl9pbmZvKGNoYXIgKm1hc3Rlcl9pZm5hbWUpOworc3RhdGljIGludCBnZXRfaWZfc2V0dGluZ3MoY2hhciAqaWZuYW1lLCBzdHJ1Y3QgZGV2X2lmciBpZnJhW10pOworc3RhdGljIGludCBnZXRfc2xhdmVfZmxhZ3MoY2hhciAqc2xhdmVfaWZuYW1lKTsKK3N0YXRpYyBpbnQgc2V0X21hc3Rlcl9od2FkZHIoY2hhciAqbWFzdGVyX2lmbmFtZSwgc3RydWN0IHNvY2thZGRyICpod2FkZHIpOworc3RhdGljIGludCBzZXRfc2xhdmVfaHdhZGRyKGNoYXIgKnNsYXZlX2lmbmFtZSwgc3RydWN0IHNvY2thZGRyICpod2FkZHIpOworc3RhdGljIGludCBzZXRfc2xhdmVfbXR1KGNoYXIgKnNsYXZlX2lmbmFtZSwgaW50IG10dSk7CitzdGF0aWMgaW50IHNldF9pZl9mbGFncyhjaGFyICppZm5hbWUsIHNob3J0IGZsYWdzKTsKK3N0YXRpYyBpbnQgc2V0X2lmX3VwKGNoYXIgKmlmbmFtZSwgc2hvcnQgZmxhZ3MpOworc3RhdGljIGludCBzZXRfaWZfZG93bihjaGFyICppZm5hbWUsIHNob3J0IGZsYWdzKTsKK3N0YXRpYyBpbnQgY2xlYXJfaWZfYWRkcihjaGFyICppZm5hbWUpOworc3RhdGljIGludCBzZXRfaWZfYWRkcihjaGFyICptYXN0ZXJfaWZuYW1lLCBjaGFyICpzbGF2ZV9pZm5hbWUpOworc3RhdGljIGludCBjaGFuZ2VfYWN0aXZlKGNoYXIgKm1hc3Rlcl9pZm5hbWUsIGNoYXIgKnNsYXZlX2lmbmFtZSk7CitzdGF0aWMgaW50IGVuc2xhdmUoY2hhciAqbWFzdGVyX2lmbmFtZSwgY2hhciAqc2xhdmVfaWZuYW1lKTsKK3N0YXRpYyBpbnQgcmVsZWFzZShjaGFyICptYXN0ZXJfaWZuYW1lLCBjaGFyICpzbGF2ZV9pZm5hbWUpOworI2RlZmluZSB2X3ByaW50KGZtdCwgYXJncy4uLikJXAorCWlmIChvcHRfdikJCVwKKwkJZnByaW50ZihzdGRlcnIsIGZtdCwgIyMgYXJncyApCisKK2ludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCit7CisJY2hhciAqKnNwcCwgKm1hc3Rlcl9pZm5hbWUsICpzbGF2ZV9pZm5hbWU7CisJaW50IGMsIGksIHJ2OworCWludCByZXMgPSAwOworCWludCBleGNsdXNpdmUgPSAwOworCisJd2hpbGUgKChjID0gZ2V0b3B0X2xvbmcoYXJnYywgYXJndiwgImFjZGZodXZWIiwgbG9uZ29wdHMsIDApKSAhPSBFT0YpIHsKKwkJc3dpdGNoIChjKSB7CisJCWNhc2UgJ2EnOiBvcHRfYSsrOyBleGNsdXNpdmUrKzsgYnJlYWs7CisJCWNhc2UgJ2MnOiBvcHRfYysrOyBleGNsdXNpdmUrKzsgYnJlYWs7CisJCWNhc2UgJ2QnOiBvcHRfZCsrOyBleGNsdXNpdmUrKzsgYnJlYWs7CisJCWNhc2UgJ2YnOiBvcHRfZisrOyBleGNsdXNpdmUrKzsgYnJlYWs7CisJCWNhc2UgJ2gnOiBvcHRfaCsrOyBleGNsdXNpdmUrKzsgYnJlYWs7CisJCWNhc2UgJ3UnOiBvcHRfdSsrOyBleGNsdXNpdmUrKzsgYnJlYWs7CisJCWNhc2UgJ3YnOiBvcHRfdisrOyBicmVhazsKKwkJY2FzZSAnVic6IG9wdF9WKys7IGV4Y2x1c2l2ZSsrOyBicmVhazsKKworCQljYXNlICc/JzoKKwkJCWZwcmludGYoc3RkZXJyLCB1c2FnZV9tc2cpOworCQkJcmVzID0gMjsKKwkJCWdvdG8gb3V0OworCQl9CisJfQorCisJLyogb3B0aW9ucyBjaGVjayAqLworCWlmIChleGNsdXNpdmUgPiAxKSB7CisJCWZwcmludGYoc3RkZXJyLCB1c2FnZV9tc2cpOworCQlyZXMgPSAyOworCQlnb3RvIG91dDsKKwl9CisKKwlpZiAob3B0X3YgfHwgb3B0X1YpIHsKKwkJcHJpbnRmKHZlcnNpb24pOworCQlpZiAob3B0X1YpIHsKKwkJCXJlcyA9IDA7CisJCQlnb3RvIG91dDsKKwkJfQorCX0KKworCWlmIChvcHRfdSkgeworCQlwcmludGYodXNhZ2VfbXNnKTsKKwkJcmVzID0gMDsKKwkJZ290byBvdXQ7CisJfQorCisJaWYgKG9wdF9oKSB7CisJCXByaW50Zih1c2FnZV9tc2cpOworCQlwcmludGYoaGVscF9tc2cpOworCQlyZXMgPSAwOworCQlnb3RvIG91dDsKKwl9CisKKwkvKiBPcGVuIGEgYmFzaWMgc29ja2V0ICovCisJaWYgKChza2ZkID0gc29ja2V0KEFGX0lORVQsIFNPQ0tfREdSQU0sIDApKSA8IDApIHsKKwkJcGVycm9yKCJzb2NrZXQiKTsKKwkJcmVzID0gMTsKKwkJZ290byBvdXQ7CisJfQorCisJaWYgKG9wdF9hKSB7CisJCWlmIChvcHRpbmQgPT0gYXJnYykgeworCQkJLyogTm8gcmVtYWluaW5nIGFyZ3MgKi8KKwkJCS8qIHNob3cgYWxsIGludGVyZmFjZXMgKi8KKwkJCWlmX3ByaW50KChjaGFyICopTlVMTCk7CisJCQlnb3RvIG91dDsKKwkJfSBlbHNlIHsKKwkJCS8qIEp1c3Qgc2hvdyB1c2FnZSAqLworCQkJZnByaW50ZihzdGRlcnIsIHVzYWdlX21zZyk7CisJCQlyZXMgPSAyOworCQkJZ290byBvdXQ7CisJCX0KKwl9CisKKwkvKiBDb3B5IHRoZSBpbnRlcmZhY2UgbmFtZSAqLworCXNwcCA9IGFyZ3YgKyBvcHRpbmQ7CisJbWFzdGVyX2lmbmFtZSA9ICpzcHArKzsKKworCWlmIChtYXN0ZXJfaWZuYW1lID09IE5VTEwpIHsKKwkJZnByaW50ZihzdGRlcnIsIHVzYWdlX21zZyk7CisJCXJlcyA9IDI7CisJCWdvdG8gb3V0OworCX0KKworCS8qIGV4Y2hhbmdlIGFiaSB2ZXJzaW9uIHdpdGggYm9uZGluZyBtb2R1bGUgKi8KKwlyZXMgPSBnZXRfZHJ2X2luZm8obWFzdGVyX2lmbmFtZSk7CisJaWYgKHJlcykgeworCQlmcHJpbnRmKHN0ZGVyciwKKwkJCSJNYXN0ZXIgJyVzJzogRXJyb3I6IGhhbmRzaGFrZSB3aXRoIGRyaXZlciBmYWlsZWQuICIKKwkJCSJBYm9ydGluZ1xuIiwKKwkJCW1hc3Rlcl9pZm5hbWUpOworCQlnb3RvIG91dDsKKwl9CisKKwlzbGF2ZV9pZm5hbWUgPSAqc3BwKys7CisKKwlpZiAoc2xhdmVfaWZuYW1lID09IE5VTEwpIHsKKwkJaWYgKG9wdF9kIHx8IG9wdF9jKSB7CisJCQlmcHJpbnRmKHN0ZGVyciwgdXNhZ2VfbXNnKTsKKwkJCXJlcyA9IDI7CisJCQlnb3RvIG91dDsKKwkJfQorCisJCS8qIEEgc2luZ2xlIGFyZyBtZWFucyBzaG93IHRoZQorCQkgKiBjb25maWd1cmF0aW9uIGZvciB0aGlzIGludGVyZmFjZQorCQkgKi8KKwkJaWZfcHJpbnQobWFzdGVyX2lmbmFtZSk7CisJCWdvdG8gb3V0OworCX0KKworCXJlcyA9IGdldF9pZl9zZXR0aW5ncyhtYXN0ZXJfaWZuYW1lLCBtYXN0ZXJfaWZyYSk7CisJaWYgKHJlcykgeworCQkvKiBQcm9iYWJseSBhIGdvb2QgcmVhc29uIG5vdCB0byBnbyBvbiAqLworCQlmcHJpbnRmKHN0ZGVyciwKKwkJCSJNYXN0ZXIgJyVzJzogRXJyb3I6IGdldCBzZXR0aW5ncyBmYWlsZWQ6ICVzLiAiCisJCQkiQWJvcnRpbmdcbiIsCisJCQltYXN0ZXJfaWZuYW1lLCBzdHJlcnJvcihyZXMpKTsKKwkJZ290byBvdXQ7CisJfQorCisJLyogY2hlY2sgaWYgbWFzdGVyIGlzIGluZGVlZCBhIG1hc3RlcjsKKwkgKiBpZiBub3QgdGhlbiBmYWlsIGFueSBvcGVyYXRpb24KKwkgKi8KKwlpZiAoIShtYXN0ZXJfZmxhZ3MuaWZyX2ZsYWdzICYgSUZGX01BU1RFUikpIHsKKwkJZnByaW50ZihzdGRlcnIsCisJCQkiSWxsZWdhbCBvcGVyYXRpb247IHRoZSBzcGVjaWZpZWQgaW50ZXJmYWNlICclcycgIgorCQkJImlzIG5vdCBhIG1hc3Rlci4gQWJvcnRpbmdcbiIsCisJCQltYXN0ZXJfaWZuYW1lKTsKKwkJcmVzID0gMTsKKwkJZ290byBvdXQ7CisJfQorCisJLyogY2hlY2sgaWYgbWFzdGVyIGlzIHVwOyBpZiBub3QgdGhlbiBmYWlsIGFueSBvcGVyYXRpb24gKi8KKwlpZiAoIShtYXN0ZXJfZmxhZ3MuaWZyX2ZsYWdzICYgSUZGX1VQKSkgeworCQlmcHJpbnRmKHN0ZGVyciwKKwkJCSJJbGxlZ2FsIG9wZXJhdGlvbjsgdGhlIHNwZWNpZmllZCBtYXN0ZXIgaW50ZXJmYWNlICIKKwkJCSInJXMnIGlzIG5vdCB1cC5cbiIsCisJCQltYXN0ZXJfaWZuYW1lKTsKKwkJcmVzID0gMTsKKwkJZ290byBvdXQ7CisJfQorCisJLyogT25seSBmb3IgZW5zbGF2aW5nICovCisJaWYgKCFvcHRfYyAmJiAhb3B0X2QpIHsKKwkJc2FfZmFtaWx5X3QgbWFzdGVyX2ZhbWlseSA9IG1hc3Rlcl9od2FkZHIuaWZyX2h3YWRkci5zYV9mYW1pbHk7CisJCXVuc2lnbmVkIGNoYXIgKmh3YWRkciA9CisJCQkodW5zaWduZWQgY2hhciAqKW1hc3Rlcl9od2FkZHIuaWZyX2h3YWRkci5zYV9kYXRhOworCisJCS8qIFRoZSBmYW1pbHkgJzEnIGlzIEFSUEhSRF9FVEhFUiBmb3IgZXRoZXJuZXQuICovCisJCWlmIChtYXN0ZXJfZmFtaWx5ICE9IDEgJiYgIW9wdF9mKSB7CisJCQlmcHJpbnRmKHN0ZGVyciwKKwkJCQkiSWxsZWdhbCBvcGVyYXRpb246IFRoZSBzcGVjaWZpZWQgbWFzdGVyICIKKwkJCQkiaW50ZXJmYWNlICclcycgaXMgbm90IGV0aGVybmV0LWxpa2UuXG4gIgorCQkJCSJUaGlzIHByb2dyYW0gaXMgZGVzaWduZWQgdG8gd29yayB3aXRoICIKKwkJCQkiZXRoZXJuZXQtbGlrZSBuZXR3b3JrIGludGVyZmFjZXMuXG4gIgorCQkJCSJVc2UgdGhlICctZicgb3B0aW9uIHRvIGZvcmNlIHRoZSAiCisJCQkJIm9wZXJhdGlvbi5cbiIsCisJCQkJbWFzdGVyX2lmbmFtZSk7CisJCQlyZXMgPSAxOworCQkJZ290byBvdXQ7CisJCX0KKworCQkvKiBDaGVjayBtYXN0ZXIncyBodyBhZGRyICovCisJCWZvciAoaSA9IDA7IGkgPCA2OyBpKyspIHsKKwkJCWlmIChod2FkZHJbaV0gIT0gMCkgeworCQkJCWh3YWRkcl9zZXQgPSAxOworCQkJCWJyZWFrOworCQkJfQorCQl9CisKKwkJaWYgKGh3YWRkcl9zZXQpIHsKKwkJCXZfcHJpbnQoImN1cnJlbnQgaGFyZHdhcmUgYWRkcmVzcyBvZiBtYXN0ZXIgJyVzJyAiCisJCQkJImlzICUyLjJ4OiUyLjJ4OiUyLjJ4OiUyLjJ4OiUyLjJ4OiUyLjJ4LCAiCisJCQkJInR5cGUgJWRcbiIsCisJCQkJbWFzdGVyX2lmbmFtZSwKKwkJCQlod2FkZHJbMF0sIGh3YWRkclsxXSwKKwkJCQlod2FkZHJbMl0sIGh3YWRkclszXSwKKwkJCQlod2FkZHJbNF0sIGh3YWRkcls1XSwKKwkJCQltYXN0ZXJfZmFtaWx5KTsKKwkJfQorCX0KKworCS8qIEFjY2VwdHMgb25seSBvbmUgc2xhdmUgKi8KKwlpZiAob3B0X2MpIHsKKwkJLyogY2hhbmdlIGFjdGl2ZSBzbGF2ZSAqLworCQlyZXMgPSBnZXRfc2xhdmVfZmxhZ3Moc2xhdmVfaWZuYW1lKTsKKwkJaWYgKHJlcykgeworCQkJZnByaW50ZihzdGRlcnIsCisJCQkJIlNsYXZlICclcyc6IEVycm9yOiBnZXQgZmxhZ3MgZmFpbGVkLiAiCisJCQkJIkFib3J0aW5nXG4iLAorCQkJCXNsYXZlX2lmbmFtZSk7CisJCQlnb3RvIG91dDsKKwkJfQorCQlyZXMgPSBjaGFuZ2VfYWN0aXZlKG1hc3Rlcl9pZm5hbWUsIHNsYXZlX2lmbmFtZSk7CisJCWlmIChyZXMpIHsKKwkJCWZwcmludGYoc3RkZXJyLAorCQkJCSJNYXN0ZXIgJyVzJywgU2xhdmUgJyVzJzogRXJyb3I6ICIKKwkJCQkiQ2hhbmdlIGFjdGl2ZSBmYWlsZWRcbiIsCisJCQkJbWFzdGVyX2lmbmFtZSwgc2xhdmVfaWZuYW1lKTsKKwkJfQorCX0gZWxzZSB7CisJCS8qIEFjY2VwdCBtdWx0aXBsZSBzbGF2ZXMgKi8KKwkJZG8geworCQkJaWYgKG9wdF9kKSB7CisJCQkJLyogZGV0YWNoIGEgc2xhdmUgaW50ZXJmYWNlIGZyb20gdGhlIG1hc3RlciAqLworCQkJCXJ2ID0gZ2V0X3NsYXZlX2ZsYWdzKHNsYXZlX2lmbmFtZSk7CisJCQkJaWYgKHJ2KSB7CisJCQkJCS8qIENhbid0IHdvcmsgd2l0aCB0aGlzIHNsYXZlLiAqLworCQkJCQkvKiByZW1lbWJlciB0aGUgZXJyb3IgYW5kIHNraXAgaXQqLworCQkJCQlmcHJpbnRmKHN0ZGVyciwKKwkJCQkJCSJTbGF2ZSAnJXMnOiBFcnJvcjogZ2V0IGZsYWdzICIKKwkJCQkJCSJmYWlsZWQuIFNraXBwaW5nXG4iLAorCQkJCQkJc2xhdmVfaWZuYW1lKTsKKwkJCQkJcmVzID0gcnY7CisJCQkJCWNvbnRpbnVlOworCQkJCX0KKwkJCQlydiA9IHJlbGVhc2UobWFzdGVyX2lmbmFtZSwgc2xhdmVfaWZuYW1lKTsKKwkJCQlpZiAocnYpIHsKKwkJCQkJZnByaW50ZihzdGRlcnIsCisJCQkJCQkiTWFzdGVyICclcycsIFNsYXZlICclcyc6IEVycm9yOiAiCisJCQkJCQkiUmVsZWFzZSBmYWlsZWRcbiIsCisJCQkJCQltYXN0ZXJfaWZuYW1lLCBzbGF2ZV9pZm5hbWUpOworCQkJCQlyZXMgPSBydjsKKwkJCQl9CisJCQl9IGVsc2UgeworCQkJCS8qIGF0dGFjaCBhIHNsYXZlIGludGVyZmFjZSB0byB0aGUgbWFzdGVyICovCisJCQkJcnYgPSBnZXRfaWZfc2V0dGluZ3Moc2xhdmVfaWZuYW1lLCBzbGF2ZV9pZnJhKTsKKwkJCQlpZiAocnYpIHsKKwkJCQkJLyogQ2FuJ3Qgd29yayB3aXRoIHRoaXMgc2xhdmUuICovCisJCQkJCS8qIHJlbWVtYmVyIHRoZSBlcnJvciBhbmQgc2tpcCBpdCovCisJCQkJCWZwcmludGYoc3RkZXJyLAorCQkJCQkJIlNsYXZlICclcyc6IEVycm9yOiBnZXQgIgorCQkJCQkJInNldHRpbmdzIGZhaWxlZDogJXMuICIKKwkJCQkJCSJTa2lwcGluZ1xuIiwKKwkJCQkJCXNsYXZlX2lmbmFtZSwgc3RyZXJyb3IocnYpKTsKKwkJCQkJcmVzID0gcnY7CisJCQkJCWNvbnRpbnVlOworCQkJCX0KKwkJCQlydiA9IGVuc2xhdmUobWFzdGVyX2lmbmFtZSwgc2xhdmVfaWZuYW1lKTsKKwkJCQlpZiAocnYpIHsKKwkJCQkJZnByaW50ZihzdGRlcnIsCisJCQkJCQkiTWFzdGVyICclcycsIFNsYXZlICclcyc6IEVycm9yOiAiCisJCQkJCQkiRW5zbGF2ZSBmYWlsZWRcbiIsCisJCQkJCQltYXN0ZXJfaWZuYW1lLCBzbGF2ZV9pZm5hbWUpOworCQkJCQlyZXMgPSBydjsKKwkJCQl9CisJCQl9CisJCX0gd2hpbGUgKChzbGF2ZV9pZm5hbWUgPSAqc3BwKyspICE9IE5VTEwpOworCX0KKworb3V0OgorCWlmIChza2ZkID49IDApIHsKKwkJY2xvc2Uoc2tmZCk7CisJfQorCisJcmV0dXJuIHJlczsKK30KKworc3RhdGljIHNob3J0IG1pZl9mbGFnczsKKworLyogR2V0IHRoZSBpbnRlZmFjZSBjb25maWd1cmF0aW9uIGZyb20gdGhlIGtlcm5lbC4gKi8KK3N0YXRpYyBpbnQgaWZfZ2V0Y29uZmlnKGNoYXIgKmlmbmFtZSkKK3sKKwlzdHJ1Y3QgaWZyZXEgaWZyOworCWludCBtZXRyaWMsIG10dTsJLyogUGFyYW1ldGVycyBvZiB0aGUgbWFzdGVyIGludGVyZmFjZS4gKi8KKwlzdHJ1Y3Qgc29ja2FkZHIgZHN0YWRkciwgYnJvYWRhZGRyLCBuZXRtYXNrOworCXVuc2lnbmVkIGNoYXIgKmh3YWRkcjsKKworCXN0cmNweShpZnIuaWZyX25hbWUsIGlmbmFtZSk7CisJaWYgKGlvY3RsKHNrZmQsIFNJT0NHSUZGTEFHUywgJmlmcikgPCAwKQorCQlyZXR1cm4gLTE7CisJbWlmX2ZsYWdzID0gaWZyLmlmcl9mbGFnczsKKwlwcmludGYoIlRoZSByZXN1bHQgb2YgU0lPQ0dJRkZMQUdTIG9uICVzIGlzICV4LlxuIiwKKwkgICAgICAgaWZuYW1lLCBpZnIuaWZyX2ZsYWdzKTsKKworCXN0cmNweShpZnIuaWZyX25hbWUsIGlmbmFtZSk7CisJaWYgKGlvY3RsKHNrZmQsIFNJT0NHSUZBRERSLCAmaWZyKSA8IDApCisJCXJldHVybiAtMTsKKwlwcmludGYoIlRoZSByZXN1bHQgb2YgU0lPQ0dJRkFERFIgaXMgJTIuMnguJTIuMnguJTIuMnguJTIuMnguXG4iLAorCSAgICAgICBpZnIuaWZyX2FkZHIuc2FfZGF0YVswXSwgaWZyLmlmcl9hZGRyLnNhX2RhdGFbMV0sCisJICAgICAgIGlmci5pZnJfYWRkci5zYV9kYXRhWzJdLCBpZnIuaWZyX2FkZHIuc2FfZGF0YVszXSk7CisKKwlzdHJjcHkoaWZyLmlmcl9uYW1lLCBpZm5hbWUpOworCWlmIChpb2N0bChza2ZkLCBTSU9DR0lGSFdBRERSLCAmaWZyKSA8IDApCisJCXJldHVybiAtMTsKKworCS8qIEdvdHRhIGNvbnZlcnQgZnJvbSAnY2hhcicgdG8gdW5zaWduZWQgZm9yIHByaW50ZigpLiAqLworCWh3YWRkciA9ICh1bnNpZ25lZCBjaGFyICopaWZyLmlmcl9od2FkZHIuc2FfZGF0YTsKKwlwcmludGYoIlRoZSByZXN1bHQgb2YgU0lPQ0dJRkhXQUREUiBpcyB0eXBlICVkICAiCisJICAgICAgICIlMi4yeDolMi4yeDolMi4yeDolMi4yeDolMi4yeDolMi4yeC5cbiIsCisJICAgICAgIGlmci5pZnJfaHdhZGRyLnNhX2ZhbWlseSwgaHdhZGRyWzBdLCBod2FkZHJbMV0sCisJICAgICAgIGh3YWRkclsyXSwgaHdhZGRyWzNdLCBod2FkZHJbNF0sIGh3YWRkcls1XSk7CisKKwlzdHJjcHkoaWZyLmlmcl9uYW1lLCBpZm5hbWUpOworCWlmIChpb2N0bChza2ZkLCBTSU9DR0lGTUVUUklDLCAmaWZyKSA8IDApIHsKKwkJbWV0cmljID0gMDsKKwl9IGVsc2UKKwkJbWV0cmljID0gaWZyLmlmcl9tZXRyaWM7CisKKwlzdHJjcHkoaWZyLmlmcl9uYW1lLCBpZm5hbWUpOworCWlmIChpb2N0bChza2ZkLCBTSU9DR0lGTVRVLCAmaWZyKSA8IDApCisJCW10dSA9IDA7CisJZWxzZQorCQltdHUgPSBpZnIuaWZyX210dTsKKworCXN0cmNweShpZnIuaWZyX25hbWUsIGlmbmFtZSk7CisJaWYgKGlvY3RsKHNrZmQsIFNJT0NHSUZEU1RBRERSLCAmaWZyKSA8IDApIHsKKwkJbWVtc2V0KCZkc3RhZGRyLCAwLCBzaXplb2Yoc3RydWN0IHNvY2thZGRyKSk7CisJfSBlbHNlCisJCWRzdGFkZHIgPSBpZnIuaWZyX2RzdGFkZHI7CisKKwlzdHJjcHkoaWZyLmlmcl9uYW1lLCBpZm5hbWUpOworCWlmIChpb2N0bChza2ZkLCBTSU9DR0lGQlJEQUREUiwgJmlmcikgPCAwKSB7CisJCW1lbXNldCgmYnJvYWRhZGRyLCAwLCBzaXplb2Yoc3RydWN0IHNvY2thZGRyKSk7CisJfSBlbHNlCisJCWJyb2FkYWRkciA9IGlmci5pZnJfYnJvYWRhZGRyOworCisJc3RyY3B5KGlmci5pZnJfbmFtZSwgaWZuYW1lKTsKKwlpZiAoaW9jdGwoc2tmZCwgU0lPQ0dJRk5FVE1BU0ssICZpZnIpIDwgMCkgeworCQltZW1zZXQoJm5ldG1hc2ssIDAsIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHIpKTsKKwl9IGVsc2UKKwkJbmV0bWFzayA9IGlmci5pZnJfbmV0bWFzazsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBpZl9wcmludChjaGFyICppZm5hbWUpCit7CisJY2hhciBidWZmWzEwMjRdOworCXN0cnVjdCBpZmNvbmYgaWZjOworCXN0cnVjdCBpZnJlcSAqaWZyOworCWludCBpOworCisJaWYgKGlmbmFtZSA9PSAoY2hhciAqKU5VTEwpIHsKKwkJaWZjLmlmY19sZW4gPSBzaXplb2YoYnVmZik7CisJCWlmYy5pZmNfYnVmID0gYnVmZjsKKwkJaWYgKGlvY3RsKHNrZmQsIFNJT0NHSUZDT05GLCAmaWZjKSA8IDApIHsKKwkJCXBlcnJvcigiU0lPQ0dJRkNPTkYgZmFpbGVkIik7CisJCQlyZXR1cm47CisJCX0KKworCQlpZnIgPSBpZmMuaWZjX3JlcTsKKwkJZm9yIChpID0gaWZjLmlmY19sZW4gLyBzaXplb2Yoc3RydWN0IGlmcmVxKTsgLS1pID49IDA7IGlmcisrKSB7CisJCQlpZiAoaWZfZ2V0Y29uZmlnKGlmci0+aWZyX25hbWUpIDwgMCkgeworCQkJCWZwcmludGYoc3RkZXJyLAorCQkJCQkiJXM6IHVua25vd24gaW50ZXJmYWNlLlxuIiwKKwkJCQkJaWZyLT5pZnJfbmFtZSk7CisJCQkJY29udGludWU7CisJCQl9CisKKwkJCWlmICgoKG1pZl9mbGFncyAmIElGRl9VUCkgPT0gMCkgJiYgIW9wdF9hKSBjb250aW51ZTsKKwkJCS8qaWZlX3ByaW50KCZpZmUpOyovCisJCX0KKwl9IGVsc2UgeworCQlpZiAoaWZfZ2V0Y29uZmlnKGlmbmFtZSkgPCAwKSB7CisJCQlmcHJpbnRmKHN0ZGVyciwKKwkJCQkiJXM6IHVua25vd24gaW50ZXJmYWNlLlxuIiwgaWZuYW1lKTsKKwkJfQorCX0KK30KKworc3RhdGljIGludCBnZXRfZHJ2X2luZm8oY2hhciAqbWFzdGVyX2lmbmFtZSkKK3sKKwlzdHJ1Y3QgaWZyZXEgaWZyOworCXN0cnVjdCBldGh0b29sX2RydmluZm8gaW5mbzsKKwljaGFyICplbmRwdHI7CisKKwltZW1zZXQoJmlmciwgMCwgc2l6ZW9mKGlmcikpOworCXN0cm5jcHkoaWZyLmlmcl9uYW1lLCBtYXN0ZXJfaWZuYW1lLCBJRk5BTVNJWik7CisJaWZyLmlmcl9kYXRhID0gKGNhZGRyX3QpJmluZm87CisKKwlpbmZvLmNtZCA9IEVUSFRPT0xfR0RSVklORk87CisJc3RybmNweShpbmZvLmRyaXZlciwgImlmZW5zbGF2ZSIsIDMyKTsKKwlzbnByaW50ZihpbmZvLmZ3X3ZlcnNpb24sIDMyLCAiJWQiLCBCT05EX0FCSV9WRVJTSU9OKTsKKworCWlmIChpb2N0bChza2ZkLCBTSU9DRVRIVE9PTCwgJmlmcikgPCAwKSB7CisJCWlmIChlcnJubyA9PSBFT1BOT1RTVVBQKSB7CisJCQlnb3RvIG91dDsKKwkJfQorCisJCXNhdmVkX2Vycm5vID0gZXJybm87CisJCXZfcHJpbnQoIk1hc3RlciAnJXMnOiBFcnJvcjogZ2V0IGJvbmRpbmcgaW5mbyBmYWlsZWQgJXNcbiIsCisJCQltYXN0ZXJfaWZuYW1lLCBzdHJlcnJvcihzYXZlZF9lcnJubykpOworCQlyZXR1cm4gMTsKKwl9CisKKwlhYmlfdmVyID0gc3RydG91bChpbmZvLmZ3X3ZlcnNpb24sICZlbmRwdHIsIDApOworCWlmICgqZW5kcHRyKSB7CisgICAgICAgICAgICAgICAgdl9wcmludCgiTWFzdGVyICclcyc6IEVycm9yOiBnb3QgaW52YWxpZCBzdHJpbmcgYXMgYW4gQUJJICIKKwkJCSJ2ZXJzaW9uIGZyb20gdGhlIGJvbmRpbmcgbW9kdWxlXG4iLAorCQkJbWFzdGVyX2lmbmFtZSk7CisJCXJldHVybiAxOworCX0KKworb3V0OgorCXZfcHJpbnQoIkFCSSB2ZXIgaXMgJWRcbiIsIGFiaV92ZXIpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgY2hhbmdlX2FjdGl2ZShjaGFyICptYXN0ZXJfaWZuYW1lLCBjaGFyICpzbGF2ZV9pZm5hbWUpCit7CisJc3RydWN0IGlmcmVxIGlmcjsKKwlpbnQgcmVzID0gMDsKKworCWlmICghKHNsYXZlX2ZsYWdzLmlmcl9mbGFncyAmIElGRl9TTEFWRSkpIHsKKwkJZnByaW50ZihzdGRlcnIsCisJCQkiSWxsZWdhbCBvcGVyYXRpb246IFRoZSBzcGVjaWZpZWQgc2xhdmUgaW50ZXJmYWNlICIKKwkJCSInJXMnIGlzIG5vdCBhIHNsYXZlXG4iLAorCQkJc2xhdmVfaWZuYW1lKTsKKwkJcmV0dXJuIDE7CisJfQorCisJc3RybmNweShpZnIuaWZyX25hbWUsIG1hc3Rlcl9pZm5hbWUsIElGTkFNU0laKTsKKwlzdHJuY3B5KGlmci5pZnJfc2xhdmUsIHNsYXZlX2lmbmFtZSwgSUZOQU1TSVopOworCWlmICgoaW9jdGwoc2tmZCwgU0lPQ0JPTkRDSEFOR0VBQ1RJVkUsICZpZnIpIDwgMCkgJiYKKwkgICAgKGlvY3RsKHNrZmQsIEJPTkRfQ0hBTkdFX0FDVElWRV9PTEQsICZpZnIpIDwgMCkpIHsKKwkJc2F2ZWRfZXJybm8gPSBlcnJubzsKKwkJdl9wcmludCgiTWFzdGVyICclcyc6IEVycm9yOiBTSU9DQk9ORENIQU5HRUFDVElWRSBmYWlsZWQ6ICIKKwkJCSIlc1xuIiwKKwkJCW1hc3Rlcl9pZm5hbWUsIHN0cmVycm9yKHNhdmVkX2Vycm5vKSk7CisJCXJlcyA9IDE7CisJfQorCisJcmV0dXJuIHJlczsKK30KKworc3RhdGljIGludCBlbnNsYXZlKGNoYXIgKm1hc3Rlcl9pZm5hbWUsIGNoYXIgKnNsYXZlX2lmbmFtZSkKK3sKKwlzdHJ1Y3QgaWZyZXEgaWZyOworCWludCByZXMgPSAwOworCisJaWYgKHNsYXZlX2ZsYWdzLmlmcl9mbGFncyAmIElGRl9TTEFWRSkgeworCQlmcHJpbnRmKHN0ZGVyciwKKwkJCSJJbGxlZ2FsIG9wZXJhdGlvbjogVGhlIHNwZWNpZmllZCBzbGF2ZSBpbnRlcmZhY2UgIgorCQkJIiclcycgaXMgYWxyZWFkeSBhIHNsYXZlXG4iLAorCQkJc2xhdmVfaWZuYW1lKTsKKwkJcmV0dXJuIDE7CisJfQorCisJcmVzID0gc2V0X2lmX2Rvd24oc2xhdmVfaWZuYW1lLCBzbGF2ZV9mbGFncy5pZnJfZmxhZ3MpOworCWlmIChyZXMpIHsKKwkJZnByaW50ZihzdGRlcnIsCisJCQkiU2xhdmUgJyVzJzogRXJyb3I6IGJyaW5nIGludGVyZmFjZSBkb3duIGZhaWxlZFxuIiwKKwkJCXNsYXZlX2lmbmFtZSk7CisJCXJldHVybiByZXM7CisJfQorCisJaWYgKGFiaV92ZXIgPCAyKSB7CisJCS8qIE9sZGVyIGJvbmRpbmcgdmVyc2lvbnMgd291bGQgcGFuaWMgaWYgdGhlIHNsYXZlIGhhcyBubyBJUAorCQkgKiBhZGRyZXNzLCBzbyBnZXQgdGhlIElQIHNldHRpbmcgZnJvbSB0aGUgbWFzdGVyLgorCQkgKi8KKwkJcmVzID0gc2V0X2lmX2FkZHIobWFzdGVyX2lmbmFtZSwgc2xhdmVfaWZuYW1lKTsKKwkJaWYgKHJlcykgeworCQkJZnByaW50ZihzdGRlcnIsCisJCQkJIlNsYXZlICclcyc6IEVycm9yOiBzZXQgYWRkcmVzcyBmYWlsZWRcbiIsCisJCQkJc2xhdmVfaWZuYW1lKTsKKwkJCXJldHVybiByZXM7CisJCX0KKwl9IGVsc2UgeworCQlyZXMgPSBjbGVhcl9pZl9hZGRyKHNsYXZlX2lmbmFtZSk7CisJCWlmIChyZXMpIHsKKwkJCWZwcmludGYoc3RkZXJyLAorCQkJCSJTbGF2ZSAnJXMnOiBFcnJvcjogY2xlYXIgYWRkcmVzcyBmYWlsZWRcbiIsCisJCQkJc2xhdmVfaWZuYW1lKTsKKwkJCXJldHVybiByZXM7CisJCX0KKwl9CisKKwlpZiAobWFzdGVyX210dS5pZnJfbXR1ICE9IHNsYXZlX210dS5pZnJfbXR1KSB7CisJCXJlcyA9IHNldF9zbGF2ZV9tdHUoc2xhdmVfaWZuYW1lLCBtYXN0ZXJfbXR1Lmlmcl9tdHUpOworCQlpZiAocmVzKSB7CisJCQlmcHJpbnRmKHN0ZGVyciwKKwkJCQkiU2xhdmUgJyVzJzogRXJyb3I6IHNldCBNVFUgZmFpbGVkXG4iLAorCQkJCXNsYXZlX2lmbmFtZSk7CisJCQlyZXR1cm4gcmVzOworCQl9CisJfQorCisJaWYgKGh3YWRkcl9zZXQpIHsKKwkJLyogTWFzdGVyIGFscmVhZHkgaGFzIGFuIGh3YWRkcgorCQkgKiBzbyBzZXQgaXQncyBod2FkZHIgdG8gdGhlIHNsYXZlCisJCSAqLworCQlpZiAoYWJpX3ZlciA8IDEpIHsKKwkJCS8qIFRoZSBkcml2ZXIgaXMgdXNpbmcgYW4gb2xkIEFCSSwgc28KKwkJCSAqIHRoZSBhcHBsaWNhdGlvbiBzZXRzIHRoZSBzbGF2ZSdzCisJCQkgKiBod2FkZHIKKwkJCSAqLworCQkJcmVzID0gc2V0X3NsYXZlX2h3YWRkcihzbGF2ZV9pZm5hbWUsCisJCQkJCSAgICAgICAmKG1hc3Rlcl9od2FkZHIuaWZyX2h3YWRkcikpOworCQkJaWYgKHJlcykgeworCQkJCWZwcmludGYoc3RkZXJyLAorCQkJCQkiU2xhdmUgJyVzJzogRXJyb3I6IHNldCBodyBhZGRyZXNzICIKKwkJCQkJImZhaWxlZFxuIiwKKwkJCQkJc2xhdmVfaWZuYW1lKTsKKwkJCQlnb3RvIHVuZG9fbXR1OworCQkJfQorCisJCQkvKiBGb3Igb2xkIEFCSSB0aGUgYXBwbGljYXRpb24gbmVlZHMgdG8gYnJpbmcgdGhlCisJCQkgKiBzbGF2ZSBiYWNrIHVwCisJCQkgKi8KKwkJCXJlcyA9IHNldF9pZl91cChzbGF2ZV9pZm5hbWUsIHNsYXZlX2ZsYWdzLmlmcl9mbGFncyk7CisJCQlpZiAocmVzKSB7CisJCQkJZnByaW50ZihzdGRlcnIsCisJCQkJCSJTbGF2ZSAnJXMnOiBFcnJvcjogYnJpbmcgaW50ZXJmYWNlICIKKwkJCQkJImRvd24gZmFpbGVkXG4iLAorCQkJCQlzbGF2ZV9pZm5hbWUpOworCQkJCWdvdG8gdW5kb19zbGF2ZV9tYWM7CisJCQl9CisJCX0KKwkJLyogVGhlIGRyaXZlciBpcyB1c2luZyBhIG5ldyBBQkksCisJCSAqIHNvIHRoZSBkcml2ZXIgdGFrZXMgY2FyZSBvZiBzZXR0aW5nCisJCSAqIHRoZSBzbGF2ZSdzIGh3YWRkciBhbmQgYnJpbmdpbmcKKwkJICogaXQgdXAgYWdhaW4KKwkJICovCisJfSBlbHNlIHsKKwkJLyogTm8gaHdhZGRyIGZvciBtYXN0ZXIgeWV0LCBzbworCQkgKiBzZXQgdGhlIHNsYXZlJ3MgaHdhZGRyIHRvIGl0CisJCSAqLworCQlpZiAoYWJpX3ZlciA8IDEpIHsKKwkJCS8qIEZvciBvbGQgQUJJLCB0aGUgbWFzdGVyIG5lZWRzIHRvIGJlCisJCQkgKiBkb3duIGJlZm9yZSBzZXR0aW5nIGl0J3MgaHdhZGRyCisJCQkgKi8KKwkJCXJlcyA9IHNldF9pZl9kb3duKG1hc3Rlcl9pZm5hbWUsIG1hc3Rlcl9mbGFncy5pZnJfZmxhZ3MpOworCQkJaWYgKHJlcykgeworCQkJCWZwcmludGYoc3RkZXJyLAorCQkJCQkiTWFzdGVyICclcyc6IEVycm9yOiBicmluZyBpbnRlcmZhY2UgIgorCQkJCQkiZG93biBmYWlsZWRcbiIsCisJCQkJCW1hc3Rlcl9pZm5hbWUpOworCQkJCWdvdG8gdW5kb19tdHU7CisJCQl9CisJCX0KKworCQlyZXMgPSBzZXRfbWFzdGVyX2h3YWRkcihtYXN0ZXJfaWZuYW1lLAorCQkJCQkmKHNsYXZlX2h3YWRkci5pZnJfaHdhZGRyKSk7CisJCWlmIChyZXMpIHsKKwkJCWZwcmludGYoc3RkZXJyLAorCQkJCSJNYXN0ZXIgJyVzJzogRXJyb3I6IHNldCBodyBhZGRyZXNzICIKKwkJCQkiZmFpbGVkXG4iLAorCQkJCW1hc3Rlcl9pZm5hbWUpOworCQkJZ290byB1bmRvX210dTsKKwkJfQorCisJCWlmIChhYmlfdmVyIDwgMSkgeworCQkJLyogRm9yIG9sZCBBQkksIGJyaW5nIHRoZSBtYXN0ZXIKKwkJCSAqIGJhY2sgdXAKKwkJCSAqLworCQkJcmVzID0gc2V0X2lmX3VwKG1hc3Rlcl9pZm5hbWUsIG1hc3Rlcl9mbGFncy5pZnJfZmxhZ3MpOworCQkJaWYgKHJlcykgeworCQkJCWZwcmludGYoc3RkZXJyLAorCQkJCQkiTWFzdGVyICclcyc6IEVycm9yOiBicmluZyBpbnRlcmZhY2UgIgorCQkJCQkidXAgZmFpbGVkXG4iLAorCQkJCQltYXN0ZXJfaWZuYW1lKTsKKwkJCQlnb3RvIHVuZG9fbWFzdGVyX21hYzsKKwkJCX0KKwkJfQorCisJCWh3YWRkcl9zZXQgPSAxOworCX0KKworCS8qIERvIHRoZSByZWFsIHRoaW5nICovCisJc3RybmNweShpZnIuaWZyX25hbWUsIG1hc3Rlcl9pZm5hbWUsIElGTkFNU0laKTsKKwlzdHJuY3B5KGlmci5pZnJfc2xhdmUsIHNsYXZlX2lmbmFtZSwgSUZOQU1TSVopOworCWlmICgoaW9jdGwoc2tmZCwgU0lPQ0JPTkRFTlNMQVZFLCAmaWZyKSA8IDApICYmCisJICAgIChpb2N0bChza2ZkLCBCT05EX0VOU0xBVkVfT0xELCAmaWZyKSA8IDApKSB7CisJCXNhdmVkX2Vycm5vID0gZXJybm87CisJCXZfcHJpbnQoIk1hc3RlciAnJXMnOiBFcnJvcjogU0lPQ0JPTkRFTlNMQVZFIGZhaWxlZDogJXNcbiIsCisJCQltYXN0ZXJfaWZuYW1lLCBzdHJlcnJvcihzYXZlZF9lcnJubykpOworCQlyZXMgPSAxOworCX0KKworCWlmIChyZXMpIHsKKwkJZ290byB1bmRvX21hc3Rlcl9tYWM7CisJfQorCisJcmV0dXJuIDA7CisKKy8qIHJvbGxiYWNrIChiZXN0IGVmZm9ydCkgKi8KK3VuZG9fbWFzdGVyX21hYzoKKwlzZXRfbWFzdGVyX2h3YWRkcihtYXN0ZXJfaWZuYW1lLCAmKG1hc3Rlcl9od2FkZHIuaWZyX2h3YWRkcikpOworCWh3YWRkcl9zZXQgPSAwOworCWdvdG8gdW5kb19tdHU7Cit1bmRvX3NsYXZlX21hYzoKKwlzZXRfc2xhdmVfaHdhZGRyKHNsYXZlX2lmbmFtZSwgJihzbGF2ZV9od2FkZHIuaWZyX2h3YWRkcikpOwordW5kb19tdHU6CisJc2V0X3NsYXZlX210dShzbGF2ZV9pZm5hbWUsIHNsYXZlX210dS5pZnJfbXR1KTsKKwlyZXR1cm4gcmVzOworfQorCitzdGF0aWMgaW50IHJlbGVhc2UoY2hhciAqbWFzdGVyX2lmbmFtZSwgY2hhciAqc2xhdmVfaWZuYW1lKQoreworCXN0cnVjdCBpZnJlcSBpZnI7CisJaW50IHJlcyA9IDA7CisKKwlpZiAoIShzbGF2ZV9mbGFncy5pZnJfZmxhZ3MgJiBJRkZfU0xBVkUpKSB7CisJCWZwcmludGYoc3RkZXJyLAorCQkJIklsbGVnYWwgb3BlcmF0aW9uOiBUaGUgc3BlY2lmaWVkIHNsYXZlIGludGVyZmFjZSAiCisJCQkiJyVzJyBpcyBub3QgYSBzbGF2ZVxuIiwKKwkJCXNsYXZlX2lmbmFtZSk7CisJCXJldHVybiAxOworCX0KKworCXN0cm5jcHkoaWZyLmlmcl9uYW1lLCBtYXN0ZXJfaWZuYW1lLCBJRk5BTVNJWik7CisJc3RybmNweShpZnIuaWZyX3NsYXZlLCBzbGF2ZV9pZm5hbWUsIElGTkFNU0laKTsKKwlpZiAoKGlvY3RsKHNrZmQsIFNJT0NCT05EUkVMRUFTRSwgJmlmcikgPCAwKSAmJgorCSAgICAoaW9jdGwoc2tmZCwgQk9ORF9SRUxFQVNFX09MRCwgJmlmcikgPCAwKSkgeworCQlzYXZlZF9lcnJubyA9IGVycm5vOworCQl2X3ByaW50KCJNYXN0ZXIgJyVzJzogRXJyb3I6IFNJT0NCT05EUkVMRUFTRSBmYWlsZWQ6ICVzXG4iLAorCQkJbWFzdGVyX2lmbmFtZSwgc3RyZXJyb3Ioc2F2ZWRfZXJybm8pKTsKKwkJcmV0dXJuIDE7CisJfSBlbHNlIGlmIChhYmlfdmVyIDwgMSkgeworCQkvKiBUaGUgZHJpdmVyIGlzIHVzaW5nIGFuIG9sZCBBQkksIHNvIHdlJ2xsIHNldCB0aGUgaW50ZXJmYWNlCisJCSAqIGRvd24gdG8gYXZvaWQgYW55IGNvbmZsaWN0cyBkdWUgdG8gc2FtZSBNQUMvSVAKKwkJICovCisJCXJlcyA9IHNldF9pZl9kb3duKHNsYXZlX2lmbmFtZSwgc2xhdmVfZmxhZ3MuaWZyX2ZsYWdzKTsKKwkJaWYgKHJlcykgeworCQkJZnByaW50ZihzdGRlcnIsCisJCQkJIlNsYXZlICclcyc6IEVycm9yOiBicmluZyBpbnRlcmZhY2UgIgorCQkJCSJkb3duIGZhaWxlZFxuIiwKKwkJCQlzbGF2ZV9pZm5hbWUpOworCQl9CisJfQorCisJLyogc2V0IHRvIGRlZmF1bHQgbXR1ICovCisJc2V0X3NsYXZlX210dShzbGF2ZV9pZm5hbWUsIDE1MDApOworCisJcmV0dXJuIHJlczsKK30KKworc3RhdGljIGludCBnZXRfaWZfc2V0dGluZ3MoY2hhciAqaWZuYW1lLCBzdHJ1Y3QgZGV2X2lmciBpZnJhW10pCit7CisJaW50IGk7CisJaW50IHJlcyA9IDA7CisKKwlmb3IgKGkgPSAwOyBpZnJhW2ldLnJlcV9pZnI7IGkrKykgeworCQlzdHJuY3B5KGlmcmFbaV0ucmVxX2lmci0+aWZyX25hbWUsIGlmbmFtZSwgSUZOQU1TSVopOworCQlyZXMgPSBpb2N0bChza2ZkLCBpZnJhW2ldLnJlcV90eXBlLCBpZnJhW2ldLnJlcV9pZnIpOworCQlpZiAocmVzIDwgMCkgeworCQkJc2F2ZWRfZXJybm8gPSBlcnJubzsKKwkJCXZfcHJpbnQoIkludGVyZmFjZSAnJXMnOiBFcnJvcjogJXMgZmFpbGVkOiAlc1xuIiwKKwkJCQlpZm5hbWUsIGlmcmFbaV0ucmVxX25hbWUsCisJCQkJc3RyZXJyb3Ioc2F2ZWRfZXJybm8pKTsKKworCQkJcmV0dXJuIHNhdmVkX2Vycm5vOworCQl9CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZ2V0X3NsYXZlX2ZsYWdzKGNoYXIgKnNsYXZlX2lmbmFtZSkKK3sKKwlpbnQgcmVzID0gMDsKKworCXN0cm5jcHkoc2xhdmVfZmxhZ3MuaWZyX25hbWUsIHNsYXZlX2lmbmFtZSwgSUZOQU1TSVopOworCXJlcyA9IGlvY3RsKHNrZmQsIFNJT0NHSUZGTEFHUywgJnNsYXZlX2ZsYWdzKTsKKwlpZiAocmVzIDwgMCkgeworCQlzYXZlZF9lcnJubyA9IGVycm5vOworCQl2X3ByaW50KCJTbGF2ZSAnJXMnOiBFcnJvcjogU0lPQ0dJRkZMQUdTIGZhaWxlZDogJXNcbiIsCisJCQlzbGF2ZV9pZm5hbWUsIHN0cmVycm9yKHNhdmVkX2Vycm5vKSk7CisJfSBlbHNlIHsKKwkJdl9wcmludCgiU2xhdmUgJXM6IGZsYWdzICUwNFguXG4iLAorCQkJc2xhdmVfaWZuYW1lLCBzbGF2ZV9mbGFncy5pZnJfZmxhZ3MpOworCX0KKworCXJldHVybiByZXM7Cit9CisKK3N0YXRpYyBpbnQgc2V0X21hc3Rlcl9od2FkZHIoY2hhciAqbWFzdGVyX2lmbmFtZSwgc3RydWN0IHNvY2thZGRyICpod2FkZHIpCit7CisJdW5zaWduZWQgY2hhciAqYWRkciA9ICh1bnNpZ25lZCBjaGFyICopaHdhZGRyLT5zYV9kYXRhOworCXN0cnVjdCBpZnJlcSBpZnI7CisJaW50IHJlcyA9IDA7CisKKwlzdHJuY3B5KGlmci5pZnJfbmFtZSwgbWFzdGVyX2lmbmFtZSwgSUZOQU1TSVopOworCW1lbWNweSgmKGlmci5pZnJfaHdhZGRyKSwgaHdhZGRyLCBzaXplb2Yoc3RydWN0IHNvY2thZGRyKSk7CisJcmVzID0gaW9jdGwoc2tmZCwgU0lPQ1NJRkhXQUREUiwgJmlmcik7CisJaWYgKHJlcyA8IDApIHsKKwkJc2F2ZWRfZXJybm8gPSBlcnJubzsKKwkJdl9wcmludCgiTWFzdGVyICclcyc6IEVycm9yOiBTSU9DU0lGSFdBRERSIGZhaWxlZDogJXNcbiIsCisJCQltYXN0ZXJfaWZuYW1lLCBzdHJlcnJvcihzYXZlZF9lcnJubykpOworCQlyZXR1cm4gcmVzOworCX0gZWxzZSB7CisJCXZfcHJpbnQoIk1hc3RlciAnJXMnOiBoYXJkd2FyZSBhZGRyZXNzIHNldCB0byAiCisJCQkiJTIuMng6JTIuMng6JTIuMng6JTIuMng6JTIuMng6JTIuMnguXG4iLAorCQkJbWFzdGVyX2lmbmFtZSwgYWRkclswXSwgYWRkclsxXSwgYWRkclsyXSwKKwkJCWFkZHJbM10sIGFkZHJbNF0sIGFkZHJbNV0pOworCX0KKworCXJldHVybiByZXM7Cit9CisKK3N0YXRpYyBpbnQgc2V0X3NsYXZlX2h3YWRkcihjaGFyICpzbGF2ZV9pZm5hbWUsIHN0cnVjdCBzb2NrYWRkciAqaHdhZGRyKQoreworCXVuc2lnbmVkIGNoYXIgKmFkZHIgPSAodW5zaWduZWQgY2hhciAqKWh3YWRkci0+c2FfZGF0YTsKKwlzdHJ1Y3QgaWZyZXEgaWZyOworCWludCByZXMgPSAwOworCisJc3RybmNweShpZnIuaWZyX25hbWUsIHNsYXZlX2lmbmFtZSwgSUZOQU1TSVopOworCW1lbWNweSgmKGlmci5pZnJfaHdhZGRyKSwgaHdhZGRyLCBzaXplb2Yoc3RydWN0IHNvY2thZGRyKSk7CisJcmVzID0gaW9jdGwoc2tmZCwgU0lPQ1NJRkhXQUREUiwgJmlmcik7CisJaWYgKHJlcyA8IDApIHsKKwkJc2F2ZWRfZXJybm8gPSBlcnJubzsKKworCQl2X3ByaW50KCJTbGF2ZSAnJXMnOiBFcnJvcjogU0lPQ1NJRkhXQUREUiBmYWlsZWQ6ICVzXG4iLAorCQkJc2xhdmVfaWZuYW1lLCBzdHJlcnJvcihzYXZlZF9lcnJubykpOworCisJCWlmIChzYXZlZF9lcnJubyA9PSBFQlVTWSkgeworCQkJdl9wcmludCgiICBUaGUgZGV2aWNlIGlzIGJ1c3k6IGl0IG11c3QgYmUgaWRsZSAiCisJCQkJImJlZm9yZSBydW5uaW5nIHRoaXMgY29tbWFuZC5cbiIpOworCQl9IGVsc2UgaWYgKHNhdmVkX2Vycm5vID09IEVPUE5PVFNVUFApIHsKKwkJCXZfcHJpbnQoIiAgVGhlIGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHNldHRpbmcgIgorCQkJCSJ0aGUgTUFDIGFkZHJlc3MuXG4iCisJCQkJIiAgWW91ciBrZXJuZWwgbGlrZWx5IGRvZXMgbm90IHN1cHBvcnQgc2xhdmUgIgorCQkJCSJkZXZpY2VzLlxuIik7CisJCX0gZWxzZSBpZiAoc2F2ZWRfZXJybm8gPT0gRUlOVkFMKSB7CisJCQl2X3ByaW50KCIgIFRoZSBkZXZpY2UncyBhZGRyZXNzIHR5cGUgZG9lcyBub3QgbWF0Y2ggIgorCQkJCSJ0aGUgbWFzdGVyJ3MgYWRkcmVzcyB0eXBlLlxuIik7CisJCX0KKwkJcmV0dXJuIHJlczsKKwl9IGVsc2UgeworCQl2X3ByaW50KCJTbGF2ZSAnJXMnOiBoYXJkd2FyZSBhZGRyZXNzIHNldCB0byAiCisJCQkiJTIuMng6JTIuMng6JTIuMng6JTIuMng6JTIuMng6JTIuMnguXG4iLAorCQkJc2xhdmVfaWZuYW1lLCBhZGRyWzBdLCBhZGRyWzFdLCBhZGRyWzJdLAorCQkJYWRkclszXSwgYWRkcls0XSwgYWRkcls1XSk7CisJfQorCisJcmV0dXJuIHJlczsKK30KKworc3RhdGljIGludCBzZXRfc2xhdmVfbXR1KGNoYXIgKnNsYXZlX2lmbmFtZSwgaW50IG10dSkKK3sKKwlzdHJ1Y3QgaWZyZXEgaWZyOworCWludCByZXMgPSAwOworCisJaWZyLmlmcl9tdHUgPSBtdHU7CisJc3RybmNweShpZnIuaWZyX25hbWUsIHNsYXZlX2lmbmFtZSwgSUZOQU1TSVopOworCisJcmVzID0gaW9jdGwoc2tmZCwgU0lPQ1NJRk1UVSwgJmlmcik7CisJaWYgKHJlcyA8IDApIHsKKwkJc2F2ZWRfZXJybm8gPSBlcnJubzsKKwkJdl9wcmludCgiU2xhdmUgJyVzJzogRXJyb3I6IFNJT0NTSUZNVFUgZmFpbGVkOiAlc1xuIiwKKwkJCXNsYXZlX2lmbmFtZSwgc3RyZXJyb3Ioc2F2ZWRfZXJybm8pKTsKKwl9IGVsc2UgeworCQl2X3ByaW50KCJTbGF2ZSAnJXMnOiBNVFUgc2V0IHRvICVkLlxuIiwgc2xhdmVfaWZuYW1lLCBtdHUpOworCX0KKworCXJldHVybiByZXM7Cit9CisKK3N0YXRpYyBpbnQgc2V0X2lmX2ZsYWdzKGNoYXIgKmlmbmFtZSwgc2hvcnQgZmxhZ3MpCit7CisJc3RydWN0IGlmcmVxIGlmcjsKKwlpbnQgcmVzID0gMDsKKworCWlmci5pZnJfZmxhZ3MgPSBmbGFnczsKKwlzdHJuY3B5KGlmci5pZnJfbmFtZSwgaWZuYW1lLCBJRk5BTVNJWik7CisKKwlyZXMgPSBpb2N0bChza2ZkLCBTSU9DU0lGRkxBR1MsICZpZnIpOworCWlmIChyZXMgPCAwKSB7CisJCXNhdmVkX2Vycm5vID0gZXJybm87CisJCXZfcHJpbnQoIkludGVyZmFjZSAnJXMnOiBFcnJvcjogU0lPQ1NJRkZMQUdTIGZhaWxlZDogJXNcbiIsCisJCQlpZm5hbWUsIHN0cmVycm9yKHNhdmVkX2Vycm5vKSk7CisJfSBlbHNlIHsKKwkJdl9wcmludCgiSW50ZXJmYWNlICclcyc6IGZsYWdzIHNldCB0byAlMDRYLlxuIiwgaWZuYW1lLCBmbGFncyk7CisJfQorCisJcmV0dXJuIHJlczsKK30KKworc3RhdGljIGludCBzZXRfaWZfdXAoY2hhciAqaWZuYW1lLCBzaG9ydCBmbGFncykKK3sKKwlyZXR1cm4gc2V0X2lmX2ZsYWdzKGlmbmFtZSwgZmxhZ3MgfCBJRkZfVVApOworfQorCitzdGF0aWMgaW50IHNldF9pZl9kb3duKGNoYXIgKmlmbmFtZSwgc2hvcnQgZmxhZ3MpCit7CisJcmV0dXJuIHNldF9pZl9mbGFncyhpZm5hbWUsIGZsYWdzICYgfklGRl9VUCk7Cit9CisKK3N0YXRpYyBpbnQgY2xlYXJfaWZfYWRkcihjaGFyICppZm5hbWUpCit7CisJc3RydWN0IGlmcmVxIGlmcjsKKwlpbnQgcmVzID0gMDsKKworCXN0cm5jcHkoaWZyLmlmcl9uYW1lLCBpZm5hbWUsIElGTkFNU0laKTsKKwlpZnIuaWZyX2FkZHIuc2FfZmFtaWx5ID0gQUZfSU5FVDsKKwltZW1zZXQoaWZyLmlmcl9hZGRyLnNhX2RhdGEsIDAsIHNpemVvZihpZnIuaWZyX2FkZHIuc2FfZGF0YSkpOworCisJcmVzID0gaW9jdGwoc2tmZCwgU0lPQ1NJRkFERFIsICZpZnIpOworCWlmIChyZXMgPCAwKSB7CisJCXNhdmVkX2Vycm5vID0gZXJybm87CisJCXZfcHJpbnQoIkludGVyZmFjZSAnJXMnOiBFcnJvcjogU0lPQ1NJRkFERFIgZmFpbGVkOiAlc1xuIiwKKwkJCWlmbmFtZSwgc3RyZXJyb3Ioc2F2ZWRfZXJybm8pKTsKKwl9IGVsc2UgeworCQl2X3ByaW50KCJJbnRlcmZhY2UgJyVzJzogYWRkcmVzcyBjbGVhcmVkXG4iLCBpZm5hbWUpOworCX0KKworCXJldHVybiByZXM7Cit9CisKK3N0YXRpYyBpbnQgc2V0X2lmX2FkZHIoY2hhciAqbWFzdGVyX2lmbmFtZSwgY2hhciAqc2xhdmVfaWZuYW1lKQoreworCXN0cnVjdCBpZnJlcSBpZnI7CisJaW50IHJlczsKKwl1bnNpZ25lZCBjaGFyICppcGFkZHI7CisJaW50IGk7CisJc3RydWN0IHsKKwkJY2hhciAqcmVxX25hbWU7CisJCWNoYXIgKmRlc2M7CisJCWludCBnX2lvY3RsOworCQlpbnQgc19pb2N0bDsKKwl9IGlmcmFbXSA9IHsKKwkJeyJJRkFERFIiLCAiYWRkciIsIFNJT0NHSUZBRERSLCBTSU9DU0lGQUREUn0sCisJCXsiRFNUQUREUiIsICJkZXN0aW5hdGlvbiBhZGRyIiwgU0lPQ0dJRkRTVEFERFIsIFNJT0NTSUZEU1RBRERSfSwKKwkJeyJCUkRBRERSIiwgImJyb2FkY2FzdCBhZGRyIiwgU0lPQ0dJRkJSREFERFIsIFNJT0NTSUZCUkRBRERSfSwKKwkJeyJORVRNQVNLIiwgIm5ldG1hc2siLCBTSU9DR0lGTkVUTUFTSywgU0lPQ1NJRk5FVE1BU0t9LAorCQl7TlVMTCwgTlVMTCwgMCwgMH0sCisJfTsKKworCWZvciAoaSA9IDA7IGlmcmFbaV0ucmVxX25hbWU7IGkrKykgeworCQlzdHJuY3B5KGlmci5pZnJfbmFtZSwgbWFzdGVyX2lmbmFtZSwgSUZOQU1TSVopOworCQlyZXMgPSBpb2N0bChza2ZkLCBpZnJhW2ldLmdfaW9jdGwsICZpZnIpOworCQlpZiAocmVzIDwgMCkgeworCQkJaW50IHNhdmVkX2Vycm5vID0gZXJybm87CisKKwkJCXZfcHJpbnQoIkludGVyZmFjZSAnJXMnOiBFcnJvcjogU0lPQ0clcyBmYWlsZWQ6ICVzXG4iLAorCQkJCW1hc3Rlcl9pZm5hbWUsIGlmcmFbaV0ucmVxX25hbWUsCisJCQkJc3RyZXJyb3Ioc2F2ZWRfZXJybm8pKTsKKworCQkJaWZyLmlmcl9hZGRyLnNhX2ZhbWlseSA9IEFGX0lORVQ7CisJCQltZW1zZXQoaWZyLmlmcl9hZGRyLnNhX2RhdGEsIDAsCisJCQkgICAgICAgc2l6ZW9mKGlmci5pZnJfYWRkci5zYV9kYXRhKSk7CisJCX0KKworCQlzdHJuY3B5KGlmci5pZnJfbmFtZSwgc2xhdmVfaWZuYW1lLCBJRk5BTVNJWik7CisJCXJlcyA9IGlvY3RsKHNrZmQsIGlmcmFbaV0uc19pb2N0bCwgJmlmcik7CisJCWlmIChyZXMgPCAwKSB7CisJCQlpbnQgc2F2ZWRfZXJybm8gPSBlcnJubzsKKworCQkJdl9wcmludCgiSW50ZXJmYWNlICclcyc6IEVycm9yOiBTSU9DUyVzIGZhaWxlZDogJXNcbiIsCisJCQkJc2xhdmVfaWZuYW1lLCBpZnJhW2ldLnJlcV9uYW1lLAorCQkJCXN0cmVycm9yKHNhdmVkX2Vycm5vKSk7CisKKwkJCXJldHVybiByZXM7CisJCX0KKworCQlpcGFkZHIgPSBpZnIuaWZyX2FkZHIuc2FfZGF0YTsKKwkJdl9wcmludCgiSW50ZXJmYWNlICclcyc6IHNldCBJUCAlcyB0byAlZC4lZC4lZC4lZFxuIiwKKwkJCXNsYXZlX2lmbmFtZSwgaWZyYVtpXS5kZXNjLAorCQkJaXBhZGRyWzBdLCBpcGFkZHJbMV0sIGlwYWRkclsyXSwgaXBhZGRyWzNdKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIExvY2FsIHZhcmlhYmxlczoKKyAqICB2ZXJzaW9uLWNvbnRyb2w6IHQKKyAqICBrZXB0LW5ldy12ZXJzaW9uczogNQorICogIGMtaW5kZW50LWxldmVsOiA0CisgKiAgYy1iYXNpYy1vZmZzZXQ6IDQKKyAqICB0YWItd2lkdGg6IDQKKyAqICBjb21waWxlLWNvbW1hbmQ6ICJnY2MgLVdhbGwgLVdzdHJpY3QtcHJvdG90eXBlcyAtTyAtSS91c3Ivc3JjL2xpbnV4L2luY2x1ZGUgaWZlbnNsYXZlLmMgLW8gaWZlbnNsYXZlIgorICogRW5kOgorICovCisKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9pcC1zeXNjdGwudHh0IGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2lwLXN5c2N0bC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTJjODkzYQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9pcC1zeXNjdGwudHh0CkBAIC0wLDAgKzEsODc4IEBACisvcHJvYy9zeXMvbmV0L2lwdjQvKiBWYXJpYWJsZXM6CisKK2lwX2ZvcndhcmQgLSBCT09MRUFOCisJMCAtIGRpc2FibGVkIChkZWZhdWx0KQorCW5vdCAwIC0gZW5hYmxlZCAKKworCUZvcndhcmQgUGFja2V0cyBiZXR3ZWVuIGludGVyZmFjZXMuCisKKwlUaGlzIHZhcmlhYmxlIGlzIHNwZWNpYWwsIGl0cyBjaGFuZ2UgcmVzZXRzIGFsbCBjb25maWd1cmF0aW9uCisJcGFyYW1ldGVycyB0byB0aGVpciBkZWZhdWx0IHN0YXRlIChSRkMxMTIyIGZvciBob3N0cywgUkZDMTgxMgorCWZvciByb3V0ZXJzKQorCitpcF9kZWZhdWx0X3R0bCAtIElOVEVHRVIKKwlkZWZhdWx0IDY0CisKK2lwX25vX3BtdHVfZGlzYyAtIEJPT0xFQU4KKwlEaXNhYmxlIFBhdGggTVRVIERpc2NvdmVyeS4KKwlkZWZhdWx0IEZBTFNFCisKK21pbl9wbXR1IC0gSU5URUdFUgorCWRlZmF1bHQgNTYyIC0gbWluaW11bSBkaXNjb3ZlcmVkIFBhdGggTVRVCisKK210dV9leHBpcmVzIC0gSU5URUdFUgorCVRpbWUsIGluIHNlY29uZHMsIHRoYXQgY2FjaGVkIFBNVFUgaW5mb3JtYXRpb24gaXMga2VwdC4KKworbWluX2Fkdl9tc3MgLSBJTlRFR0VSCisJVGhlIGFkdmVydGlzZWQgTVNTIGRlcGVuZHMgb24gdGhlIGZpcnN0IGhvcCByb3V0ZSBNVFUsIGJ1dCB3aWxsCisJbmV2ZXIgYmUgbG93ZXIgdGhhbiB0aGlzIHNldHRpbmcuCisKK0lQIEZyYWdtZW50YXRpb246CisKK2lwZnJhZ19oaWdoX3RocmVzaCAtIElOVEVHRVIKKwlNYXhpbXVtIG1lbW9yeSB1c2VkIHRvIHJlYXNzZW1ibGUgSVAgZnJhZ21lbnRzLiBXaGVuIAorCWlwZnJhZ19oaWdoX3RocmVzaCBieXRlcyBvZiBtZW1vcnkgaXMgYWxsb2NhdGVkIGZvciB0aGlzIHB1cnBvc2UsCisJdGhlIGZyYWdtZW50IGhhbmRsZXIgd2lsbCB0b3NzIHBhY2tldHMgdW50aWwgaXBmcmFnX2xvd190aHJlc2gKKwlpcyByZWFjaGVkLgorCQoraXBmcmFnX2xvd190aHJlc2ggLSBJTlRFR0VSCisJU2VlIGlwZnJhZ19oaWdoX3RocmVzaAkKKworaXBmcmFnX3RpbWUgLSBJTlRFR0VSCisJVGltZSBpbiBzZWNvbmRzIHRvIGtlZXAgYW4gSVAgZnJhZ21lbnQgaW4gbWVtb3J5LgkKKworaXBmcmFnX3NlY3JldF9pbnRlcnZhbCAtIElOVEVHRVIKKwlSZWdlbmVyYXRpb24gaW50ZXJ2YWwgKGluIHNlY29uZHMpIG9mIHRoZSBoYXNoIHNlY3JldCAob3IgbGlmZXRpbWUgCisJZm9yIHRoZSBoYXNoIHNlY3JldCkgZm9yIElQIGZyYWdtZW50cy4KKwlEZWZhdWx0OiA2MDAKKworSU5FVCBwZWVyIHN0b3JhZ2U6CisKK2luZXRfcGVlcl90aHJlc2hvbGQgLSBJTlRFR0VSCisJVGhlIGFwcHJveGltYXRlIHNpemUgb2YgdGhlIHN0b3JhZ2UuICBTdGFydGluZyBmcm9tIHRoaXMgdGhyZXNob2xkCQorCWVudHJpZXMgd2lsbCBiZSB0aHJvd24gYWdncmVzc2l2ZWx5LiAgVGhpcyB0aHJlc2hvbGQgYWxzbyBkZXRlcm1pbmVzCisJZW50cmllcycgdGltZS10by1saXZlIGFuZCB0aW1lIGludGVydmFscyBiZXR3ZWVuIGdhcmJhZ2UgY29sbGVjdGlvbgorCXBhc3Nlcy4gIE1vcmUgZW50cmllcywgbGVzcyB0aW1lLXRvLWxpdmUsIGxlc3MgR0MgaW50ZXJ2YWwuCisKK2luZXRfcGVlcl9taW50dGwgLSBJTlRFR0VSCisJTWluaW11bSB0aW1lLXRvLWxpdmUgb2YgZW50cmllcy4gIFNob3VsZCBiZSBlbm91Z2ggdG8gY292ZXIgZnJhZ21lbnQKKwl0aW1lLXRvLWxpdmUgb24gdGhlIHJlYXNzZW1ibGluZyBzaWRlLiAgVGhpcyBtaW5pbXVtIHRpbWUtdG8tbGl2ZSAgaXMKKwlndWFyYW50ZWVkIGlmIHRoZSBwb29sIHNpemUgaXMgbGVzcyB0aGFuIGluZXRfcGVlcl90aHJlc2hvbGQuCisJTWVhc3VyZWQgaW4gamlmZmllcygxKS4KKworaW5ldF9wZWVyX21heHR0bCAtIElOVEVHRVIKKwlNYXhpbXVtIHRpbWUtdG8tbGl2ZSBvZiBlbnRyaWVzLiAgVW51c2VkIGVudHJpZXMgd2lsbCBleHBpcmUgYWZ0ZXIKKwl0aGlzIHBlcmlvZCBvZiB0aW1lIGlmIHRoZXJlIGlzIG5vIG1lbW9yeSBwcmVzc3VyZSBvbiB0aGUgcG9vbCAoaS5lLgorCXdoZW4gdGhlIG51bWJlciBvZiBlbnRyaWVzIGluIHRoZSBwb29sIGlzIHZlcnkgc21hbGwpLgorCU1lYXN1cmVkIGluIGppZmZpZXMoMSkuCisKK2luZXRfcGVlcl9nY19taW50aW1lIC0gSU5URUdFUgorCU1pbmltdW0gaW50ZXJ2YWwgYmV0d2VlbiBnYXJiYWdlIGNvbGxlY3Rpb24gcGFzc2VzLiAgVGhpcyBpbnRlcnZhbCBpcworCWluIGVmZmVjdCB1bmRlciBoaWdoIG1lbW9yeSBwcmVzc3VyZSBvbiB0aGUgcG9vbC4KKwlNZWFzdXJlZCBpbiBqaWZmaWVzKDEpLgorCitpbmV0X3BlZXJfZ2NfbWF4dGltZSAtIElOVEVHRVIKKwlNaW5pbXVtIGludGVydmFsIGJldHdlZW4gZ2FyYmFnZSBjb2xsZWN0aW9uIHBhc3Nlcy4gIFRoaXMgaW50ZXJ2YWwgaXMKKwlpbiBlZmZlY3QgdW5kZXIgbG93IChvciBhYnNlbnQpIG1lbW9yeSBwcmVzc3VyZSBvbiB0aGUgcG9vbC4KKwlNZWFzdXJlZCBpbiBqaWZmaWVzKDEpLgorCitUQ1AgdmFyaWFibGVzOiAKKwordGNwX3N5bl9yZXRyaWVzIC0gSU5URUdFUgorCU51bWJlciBvZiB0aW1lcyBpbml0aWFsIFNZTnMgZm9yIGFuIGFjdGl2ZSBUQ1AgY29ubmVjdGlvbiBhdHRlbXB0CisJd2lsbCBiZSByZXRyYW5zbWl0dGVkLiBTaG91bGQgbm90IGJlIGhpZ2hlciB0aGFuIDI1NS4gRGVmYXVsdCB2YWx1ZQorCWlzIDUsIHdoaWNoIGNvcnJlc3BvbmRzIHRvIH4xODBzZWNvbmRzLgorCit0Y3Bfc3luYWNrX3JldHJpZXMgLSBJTlRFR0VSCisJTnVtYmVyIG9mIHRpbWVzIFNZTkFDS3MgZm9yIGEgcGFzc2l2ZSBUQ1AgY29ubmVjdGlvbiBhdHRlbXB0IHdpbGwKKwliZSByZXRyYW5zbWl0dGVkLiBTaG91bGQgbm90IGJlIGhpZ2hlciB0aGFuIDI1NS4gRGVmYXVsdCB2YWx1ZQorCWlzIDUsIHdoaWNoIGNvcnJlc3BvbmRzIHRvIH4xODBzZWNvbmRzLgorCit0Y3Bfa2VlcGFsaXZlX3RpbWUgLSBJTlRFR0VSCisJSG93IG9mdGVuIFRDUCBzZW5kcyBvdXQga2VlcGFsaXZlIG1lc3NhZ2VzIHdoZW4ga2VlcGFsaXZlIGlzIGVuYWJsZWQuCisJRGVmYXVsdDogMmhvdXJzLgorCit0Y3Bfa2VlcGFsaXZlX3Byb2JlcyAtIElOVEVHRVIKKwlIb3cgbWFueSBrZWVwYWxpdmUgcHJvYmVzIFRDUCBzZW5kcyBvdXQsIHVudGlsIGl0IGRlY2lkZXMgdGhhdCB0aGUKKwljb25uZWN0aW9uIGlzIGJyb2tlbi4gRGVmYXVsdCB2YWx1ZTogOS4KKwordGNwX2tlZXBhbGl2ZV9pbnR2bCAtIElOVEVHRVIKKwlIb3cgZnJlcXVlbnRseSB0aGUgcHJvYmVzIGFyZSBzZW5kIG91dC4gTXVsdGlwbGllZCBieQorCXRjcF9rZWVwYWxpdmVfcHJvYmVzIGl0IGlzIHRpbWUgdG8ga2lsbCBub3QgcmVzcG9uZGluZyBjb25uZWN0aW9uLAorCWFmdGVyIHByb2JlcyBzdGFydGVkLiBEZWZhdWx0IHZhbHVlOiA3NXNlYyBpLmUuIGNvbm5lY3Rpb24KKwl3aWxsIGJlIGFib3J0ZWQgYWZ0ZXIgfjExIG1pbnV0ZXMgb2YgcmV0cmllcy4KKwordGNwX3JldHJpZXMxIC0gSU5URUdFUgorCUhvdyBtYW55IHRpbWVzIHRvIHJldHJ5IGJlZm9yZSBkZWNpZGluZyB0aGF0IHNvbWV0aGluZyBpcyB3cm9uZworCWFuZCBpdCBpcyBuZWNlc3NhcnkgdG8gcmVwb3J0IHRoaXMgc3VzcGljaW9uIHRvIG5ldHdvcmsgbGF5ZXIuCisJTWluaW1hbCBSRkMgdmFsdWUgaXMgMywgaXQgaXMgZGVmYXVsdCwgd2hpY2ggY29ycmVzcG9uZHMKKwl0byB+M3NlYy04bWluIGRlcGVuZGluZyBvbiBSVE8uCisKK3RjcF9yZXRyaWVzMiAtIElOVEVHRVIKKwlIb3cgbWF5IHRpbWVzIHRvIHJldHJ5IGJlZm9yZSBraWxsaW5nIGFsaXZlIFRDUCBjb25uZWN0aW9uLgorCVJGQzExMjIgc2F5cyB0aGF0IHRoZSBsaW1pdCBzaG91bGQgYmUgbG9uZ2VyIHRoYW4gMTAwIHNlYy4KKwlJdCBpcyB0b28gc21hbGwgbnVtYmVyLglEZWZhdWx0IHZhbHVlIDE1IGNvcnJlc3BvbmRzIHRvIH4xMy0zMG1pbgorCWRlcGVuZGluZyBvbiBSVE8uCisKK3RjcF9vcnBoYW5fcmV0cmllcyAtIElOVEVHRVIKKwlIb3cgbWF5IHRpbWVzIHRvIHJldHJ5IGJlZm9yZSBraWxsaW5nIFRDUCBjb25uZWN0aW9uLCBjbG9zZWQKKwlieSBvdXIgc2lkZS4gRGVmYXVsdCB2YWx1ZSA3IGNvcnJlc3BvbmRzIHRvIH41MHNlYy0xNm1pbgorCWRlcGVuZGluZyBvbiBSVE8uIElmIHlvdSBtYWNoaW5lIGlzIGxvYWRlZCBXRUIgc2VydmVyLAorCXlvdSBzaG91bGQgdGhpbmsgYWJvdXQgbG93ZXJpbmcgdGhpcyB2YWx1ZSwgc3VjaCBzb2NrZXRzCisJbWF5IGNvbnN1bWUgc2lnbmlmaWNhbnQgcmVzb3VyY2VzLiBDZi4gdGNwX21heF9vcnBoYW5zLgorCit0Y3BfZmluX3RpbWVvdXQgLSBJTlRFR0VSCisJVGltZSB0byBob2xkIHNvY2tldCBpbiBzdGF0ZSBGSU4tV0FJVC0yLCBpZiBpdCB3YXMgY2xvc2VkCisJYnkgb3VyIHNpZGUuIFBlZXIgY2FuIGJlIGJyb2tlbiBhbmQgbmV2ZXIgY2xvc2UgaXRzIHNpZGUsCisJb3IgZXZlbiBkaWVkIHVuZXhwZWN0ZWRseS4gRGVmYXVsdCB2YWx1ZSBpcyA2MHNlYy4KKwlVc3VhbCB2YWx1ZSB1c2VkIGluIDIuMiB3YXMgMTgwIHNlY29uZHMsIHlvdSBtYXkgcmVzdG9yZQorCWl0LCBidXQgcmVtZW1iZXIgdGhhdCBpZiB5b3VyIG1hY2hpbmUgaXMgZXZlbiB1bmRlcmxvYWRlZCBXRUIgc2VydmVyLAorCXlvdSByaXNrIHRvIG92ZXJmbG93IG1lbW9yeSB3aXRoIGtpbG90b25zIG9mIGRlYWQgc29ja2V0cywKKwlGSU4tV0FJVC0yIHNvY2tldHMgYXJlIGxlc3MgZGFuZ2Vyb3VzIHRoYW4gRklOLVdBSVQtMSwKKwliZWNhdXNlIHRoZXkgZWF0IG1heGltdW0gMS41SyBvZiBtZW1vcnksIGJ1dCB0aGV5IHRlbmQKKwl0byBsaXZlIGxvbmdlci4JQ2YuIHRjcF9tYXhfb3JwaGFucy4KKwordGNwX21heF90d19idWNrZXRzIC0gSU5URUdFUgorCU1heGltYWwgbnVtYmVyIG9mIHRpbWV3YWl0IHNvY2tldHMgaGVsZCBieSBzeXN0ZW0gc2ltdWx0YW5lb3VzbHkuCisJSWYgdGhpcyBudW1iZXIgaXMgZXhjZWVkZWQgdGltZS13YWl0IHNvY2tldCBpcyBpbW1lZGlhdGVseSBkZXN0cm95ZWQKKwlhbmQgd2FybmluZyBpcyBwcmludGVkLiBUaGlzIGxpbWl0IGV4aXN0cyBvbmx5IHRvIHByZXZlbnQKKwlzaW1wbGUgRG9TIGF0dGFja3MsIHlvdSBfbXVzdF8gbm90IGxvd2VyIHRoZSBsaW1pdCBhcnRpZmljaWFsbHksCisJYnV0IHJhdGhlciBpbmNyZWFzZSBpdCAocHJvYmFibHksIGFmdGVyIGluY3JlYXNpbmcgaW5zdGFsbGVkIG1lbW9yeSksCisJaWYgbmV0d29yayBjb25kaXRpb25zIHJlcXVpcmUgbW9yZSB0aGFuIGRlZmF1bHQgdmFsdWUuCisKK3RjcF90d19yZWN5Y2xlIC0gQk9PTEVBTgorCUVuYWJsZSBmYXN0IHJlY3ljbGluZyBUSU1FLVdBSVQgc29ja2V0cy4gRGVmYXVsdCB2YWx1ZSBpcyAwLgorCUl0IHNob3VsZCBub3QgYmUgY2hhbmdlZCB3aXRob3V0IGFkdmljZS9yZXF1ZXN0IG9mIHRlY2huaWNhbAorCWV4cGVydHMuCisKK3RjcF90d19yZXVzZSAtIEJPT0xFQU4KKwlBbGxvdyB0byByZXVzZSBUSU1FLVdBSVQgc29ja2V0cyBmb3IgbmV3IGNvbm5lY3Rpb25zIHdoZW4gaXQgaXMKKwlzYWZlIGZyb20gcHJvdG9jb2wgdmlld3BvaW50LiBEZWZhdWx0IHZhbHVlIGlzIDAuCisJSXQgc2hvdWxkIG5vdCBiZSBjaGFuZ2VkIHdpdGhvdXQgYWR2aWNlL3JlcXVlc3Qgb2YgdGVjaG5pY2FsCisJZXhwZXJ0cy4KKwordGNwX21heF9vcnBoYW5zIC0gSU5URUdFUgorCU1heGltYWwgbnVtYmVyIG9mIFRDUCBzb2NrZXRzIG5vdCBhdHRhY2hlZCB0byBhbnkgdXNlciBmaWxlIGhhbmRsZSwKKwloZWxkIGJ5IHN5c3RlbS4JSWYgdGhpcyBudW1iZXIgaXMgZXhjZWVkZWQgb3JwaGFuZWQgY29ubmVjdGlvbnMgYXJlCisJcmVzZXQgaW1tZWRpYXRlbHkgYW5kIHdhcm5pbmcgaXMgcHJpbnRlZC4gVGhpcyBsaW1pdCBleGlzdHMKKwlvbmx5IHRvIHByZXZlbnQgc2ltcGxlIERvUyBhdHRhY2tzLCB5b3UgX211c3RfIG5vdCByZWx5IG9uIHRoaXMKKwlvciBsb3dlciB0aGUgbGltaXQgYXJ0aWZpY2lhbGx5LCBidXQgcmF0aGVyIGluY3JlYXNlIGl0CisJKHByb2JhYmx5LCBhZnRlciBpbmNyZWFzaW5nIGluc3RhbGxlZCBtZW1vcnkpLAorCWlmIG5ldHdvcmsgY29uZGl0aW9ucyByZXF1aXJlIG1vcmUgdGhhbiBkZWZhdWx0IHZhbHVlLAorCWFuZCB0dW5lIG5ldHdvcmsgc2VydmljZXMgdG8gbGluZ2VyIGFuZCBraWxsIHN1Y2ggc3RhdGVzCisJbW9yZSBhZ2dyZXNzaXZlbHkuIExldCBtZSB0byByZW1pbmQgYWdhaW46IGVhY2ggb3JwaGFuIGVhdHMKKwl1cCB0byB+NjRLIG9mIHVuc3dhcHBhYmxlIG1lbW9yeS4KKwordGNwX2Fib3J0X29uX292ZXJmbG93IC0gQk9PTEVBTgorCUlmIGxpc3RlbmluZyBzZXJ2aWNlIGlzIHRvbyBzbG93IHRvIGFjY2VwdCBuZXcgY29ubmVjdGlvbnMsCisJcmVzZXQgdGhlbS4gRGVmYXVsdCBzdGF0ZSBpcyBGQUxTRS4gSXQgbWVhbnMgdGhhdCBpZiBvdmVyZmxvdworCW9jY3VycmVkIGR1ZSB0byBhIGJ1cnN0LCBjb25uZWN0aW9uIHdpbGwgcmVjb3Zlci4gRW5hYmxlIHRoaXMKKwlvcHRpb24gX29ubHlfIGlmIHlvdSBhcmUgcmVhbGx5IHN1cmUgdGhhdCBsaXN0ZW5pbmcgZGFlbW9uCisJY2Fubm90IGJlIHR1bmVkIHRvIGFjY2VwdCBjb25uZWN0aW9ucyBmYXN0ZXIuIEVuYWJsaW5nIHRoaXMKKwlvcHRpb24gY2FuIGhhcm0gY2xpZW50cyBvZiB5b3VyIHNlcnZlci4KKwordGNwX3N5bmNvb2tpZXMgLSBCT09MRUFOCisJT25seSB2YWxpZCB3aGVuIHRoZSBrZXJuZWwgd2FzIGNvbXBpbGVkIHdpdGggQ09ORklHX1NZTkNPT0tJRVMKKwlTZW5kIG91dCBzeW5jb29raWVzIHdoZW4gdGhlIHN5biBiYWNrbG9nIHF1ZXVlIG9mIGEgc29ja2V0IAorCW92ZXJmbG93cy4gVGhpcyBpcyB0byBwcmV2ZW50IGFnYWluc3QgdGhlIGNvbW1vbiAnc3luIGZsb29kIGF0dGFjaycKKwlEZWZhdWx0OiBGQUxTRQorCisJTm90ZSwgdGhhdCBzeW5jb29raWVzIGlzIGZhbGxiYWNrIGZhY2lsaXR5LgorCUl0IE1VU1QgTk9UIGJlIHVzZWQgdG8gaGVscCBoaWdobHkgbG9hZGVkIHNlcnZlcnMgdG8gc3RhbmQKKwlhZ2FpbnN0IGxlZ2FsIGNvbm5lY3Rpb24gcmF0ZS4gSWYgeW91IHNlZSBzeW5mbG9vZCB3YXJuaW5ncworCWluIHlvdXIgbG9ncywgYnV0IGludmVzdGlnYXRpb24Jc2hvd3MgdGhhdCB0aGV5IG9jY3VyCisJYmVjYXVzZSBvZiBvdmVybG9hZCB3aXRoIGxlZ2FsIGNvbm5lY3Rpb25zLCB5b3Ugc2hvdWxkIHR1bmUKKwlhbm90aGVyIHBhcmFtZXRlcnMgdW50aWwgdGhpcyB3YXJuaW5nIGRpc2FwcGVhci4KKwlTZWU6IHRjcF9tYXhfc3luX2JhY2tsb2csIHRjcF9zeW5hY2tfcmV0cmllcywgdGNwX2Fib3J0X29uX292ZXJmbG93LgorCisJc3luY29va2llcyBzZXJpb3VzbHkgdmlvbGF0ZSBUQ1AgcHJvdG9jb2wsIGRvIG5vdCBhbGxvdworCXRvIHVzZSBUQ1AgZXh0ZW5zaW9ucywgY2FuIHJlc3VsdCBpbiBzZXJpb3VzIGRlZ3JhZGF0aW9uCisJb2Ygc29tZSBzZXJ2aWNlcyAoZi5lLiBTTVRQIHJlbGF5aW5nKSwgdmlzaWJsZSBub3QgYnkgeW91LAorCWJ1dCB5b3VyIGNsaWVudHMgYW5kIHJlbGF5cywgY29udGFjdGluZyB5b3UuIFdoaWxlIHlvdSBzZWUKKwlzeW5mbG9vZCB3YXJuaW5ncyBpbiBsb2dzIG5vdCBiZWluZyByZWFsbHkgZmxvb2RlZCwgeW91ciBzZXJ2ZXIKKwlpcyBzZXJpb3VzbHkgbWlzY29uZmlndXJlZC4KKwordGNwX3N0ZHVyZyAtIEJPT0xFQU4KKwlVc2UgdGhlIEhvc3QgcmVxdWlyZW1lbnRzIGludGVycHJldGF0aW9uIG9mIHRoZSBUQ1AgdXJnIHBvaW50ZXIgZmllbGQuCisJTW9zdCBob3N0cyB1c2UgdGhlIG9sZGVyIEJTRCBpbnRlcnByZXRhdGlvbiwgc28gaWYgeW91IHR1cm4gdGhpcyBvbgorCUxpbnV4IG1pZ2h0IG5vdCBjb21tdW5pY2F0ZSBjb3JyZWN0bHkgd2l0aCB0aGVtLgkKKwlEZWZhdWx0OiBGQUxTRSAKKwkKK3RjcF9tYXhfc3luX2JhY2tsb2cgLSBJTlRFR0VSCisJTWF4aW1hbCBudW1iZXIgb2YgcmVtZW1iZXJlZCBjb25uZWN0aW9uIHJlcXVlc3RzLCB3aGljaCBhcmUKKwlzdGlsbCBkaWQgbm90IHJlY2VpdmUgYW4gYWNrbm93bGVkZ21lbnQgZnJvbSBjb25uZWN0aW5nIGNsaWVudC4KKwlEZWZhdWx0IHZhbHVlIGlzIDEwMjQgZm9yIHN5c3RlbXMgd2l0aCBtb3JlIHRoYW4gMTI4TWIgb2YgbWVtb3J5LAorCWFuZCAxMjggZm9yIGxvdyBtZW1vcnkgbWFjaGluZXMuIElmIHNlcnZlciBzdWZmZXJzIG9mIG92ZXJsb2FkLAorCXRyeSB0byBpbmNyZWFzZSB0aGlzIG51bWJlci4KKwordGNwX3dpbmRvd19zY2FsaW5nIC0gQk9PTEVBTgorCUVuYWJsZSB3aW5kb3cgc2NhbGluZyBhcyBkZWZpbmVkIGluIFJGQzEzMjMuCisKK3RjcF90aW1lc3RhbXBzIC0gQk9PTEVBTgorCUVuYWJsZSB0aW1lc3RhbXBzIGFzIGRlZmluZWQgaW4gUkZDMTMyMy4KKwordGNwX3NhY2sgLSBCT09MRUFOCisJRW5hYmxlIHNlbGVjdCBhY2tub3dsZWRnbWVudHMgKFNBQ0tTKS4KKwordGNwX2ZhY2sgLSBCT09MRUFOCisJRW5hYmxlIEZBQ0sgY29uZ2VzdGlvbiBhdm9pZGFuY2UgYW5kIGZhc3QgcmV0cmFuc21pc3Npb24uCisJVGhlIHZhbHVlIGlzIG5vdCB1c2VkLCBpZiB0Y3Bfc2FjayBpcyBub3QgZW5hYmxlZC4KKwordGNwX2RzYWNrIC0gQk9PTEVBTgorCUFsbG93cyBUQ1AgdG8gc2VuZCAiZHVwbGljYXRlIiBTQUNLcy4KKwordGNwX2VjbiAtIEJPT0xFQU4KKwlFbmFibGUgRXhwbGljaXQgQ29uZ2VzdGlvbiBOb3RpZmljYXRpb24gaW4gVENQLgorCit0Y3BfcmVvcmRlcmluZyAtIElOVEVHRVIKKwlNYXhpbWFsIHJlb3JkZXJpbmcgb2YgcGFja2V0cyBpbiBhIFRDUCBzdHJlYW0uCisJRGVmYXVsdDogMwkKKwordGNwX3JldHJhbnNfY29sbGFwc2UgLSBCT09MRUFOCisJQnVnLXRvLWJ1ZyBjb21wYXRpYmlsaXR5IHdpdGggc29tZSBicm9rZW4gcHJpbnRlcnMuCisJT24gcmV0cmFuc21pdCB0cnkgdG8gc2VuZCBiaWdnZXIgcGFja2V0cyB0byB3b3JrIGFyb3VuZCBidWdzIGluCisJY2VydGFpbiBUQ1Agc3RhY2tzLgorCit0Y3Bfd21lbSAtIHZlY3RvciBvZiAzIElOVEVHRVJzOiBtaW4sIGRlZmF1bHQsIG1heAorCW1pbjogQW1vdW50IG9mIG1lbW9yeSByZXNlcnZlZCBmb3Igc2VuZCBidWZmZXJzIGZvciBUQ1Agc29ja2V0LgorCUVhY2ggVENQIHNvY2tldCBoYXMgcmlnaHRzIHRvIHVzZSBpdCBkdWUgdG8gZmFjdCBvZiBpdHMgYmlydGguCisJRGVmYXVsdDogNEsKKworCWRlZmF1bHQ6IEFtb3VudCBvZiBtZW1vcnkgYWxsb3dlZCBmb3Igc2VuZCBidWZmZXJzIGZvciBUQ1Agc29ja2V0CisJYnkgZGVmYXVsdC4gVGhpcyB2YWx1ZSBvdmVycmlkZXMgbmV0LmNvcmUud21lbV9kZWZhdWx0IHVzZWQKKwlieSBvdGhlciBwcm90b2NvbHMsIGl0IGlzIHVzdWFsbHkgbG93ZXIgdGhhbiBuZXQuY29yZS53bWVtX2RlZmF1bHQuCisJRGVmYXVsdDogMTZLCisKKwltYXg6IE1heGltYWwgYW1vdW50IG9mIG1lbW9yeSBhbGxvd2VkIGZvciBhdXRvbWF0aWNhbGx5IHNlbGVjdGVkCisJc2VuZCBidWZmZXJzIGZvciBUQ1Agc29ja2V0LiBUaGlzIHZhbHVlIGRvZXMgbm90IG92ZXJyaWRlCisJbmV0LmNvcmUud21lbV9tYXgsICJzdGF0aWMiIHNlbGVjdGlvbiB2aWEgU09fU05EQlVGIGRvZXMgbm90IHVzZSB0aGlzLgorCURlZmF1bHQ6IDEyOEsKKwordGNwX3JtZW0gLSB2ZWN0b3Igb2YgMyBJTlRFR0VSczogbWluLCBkZWZhdWx0LCBtYXgKKwltaW46IE1pbmltYWwgc2l6ZSBvZiByZWNlaXZlIGJ1ZmZlciB1c2VkIGJ5IFRDUCBzb2NrZXRzLgorCUl0IGlzIGd1YXJhbnRlZWQgdG8gZWFjaCBUQ1Agc29ja2V0LCBldmVuIHVuZGVyIG1vZGVyYXRlIG1lbW9yeQorCXByZXNzdXJlLgorCURlZmF1bHQ6IDhLCisKKwlkZWZhdWx0OiBkZWZhdWx0IHNpemUgb2YgcmVjZWl2ZSBidWZmZXIgdXNlZCBieSBUQ1Agc29ja2V0cy4KKwlUaGlzIHZhbHVlIG92ZXJyaWRlcyBuZXQuY29yZS5ybWVtX2RlZmF1bHQgdXNlZCBieSBvdGhlciBwcm90b2NvbHMuCisJRGVmYXVsdDogODczODAgYnl0ZXMuIFRoaXMgdmFsdWUgcmVzdWx0cyBpbiB3aW5kb3cgb2YgNjU1MzUgd2l0aAorCWRlZmF1bHQgc2V0dGluZyBvZiB0Y3BfYWR2X3dpbl9zY2FsZSBhbmQgdGNwX2FwcF93aW46MCBhbmQgYSBiaXQKKwlsZXNzIGZvciBkZWZhdWx0IHRjcF9hcHBfd2luLiBTZWUgYmVsb3cgYWJvdXQgdGhlc2UgdmFyaWFibGVzLgorCisJbWF4OiBtYXhpbWFsIHNpemUgb2YgcmVjZWl2ZSBidWZmZXIgYWxsb3dlZCBmb3IgYXV0b21hdGljYWxseQorCXNlbGVjdGVkIHJlY2VpdmVyIGJ1ZmZlcnMgZm9yIFRDUCBzb2NrZXQuIFRoaXMgdmFsdWUgZG9lcyBub3Qgb3ZlcnJpZGUKKwluZXQuY29yZS5ybWVtX21heCwgInN0YXRpYyIgc2VsZWN0aW9uIHZpYSBTT19SQ1ZCVUYgZG9lcyBub3QgdXNlIHRoaXMuCisJRGVmYXVsdDogODczODAqMiBieXRlcy4KKwordGNwX21lbSAtIHZlY3RvciBvZiAzIElOVEVHRVJzOiBtaW4sIHByZXNzdXJlLCBtYXgKKwlsb3c6IGJlbG93IHRoaXMgbnVtYmVyIG9mIHBhZ2VzIFRDUCBpcyBub3QgYm90aGVyZWQgYWJvdXQgaXRzCisJbWVtb3J5IGFwcGV0aXRlLgorCisJcHJlc3N1cmU6IHdoZW4gYW1vdW50IG9mIG1lbW9yeSBhbGxvY2F0ZWQgYnkgVENQIGV4Y2VlZHMgdGhpcyBudW1iZXIKKwlvZiBwYWdlcywgVENQIG1vZGVyYXRlcyBpdHMgbWVtb3J5IGNvbnN1bXB0aW9uIGFuZCBlbnRlcnMgbWVtb3J5CisJcHJlc3N1cmUgbW9kZSwgd2hpY2ggaXMgZXhpdGVkIHdoZW4gbWVtb3J5IGNvbnN1bXB0aW9uIGZhbGxzCisJdW5kZXIgImxvdyIuCisKKwloaWdoOiBudW1iZXIgb2YgcGFnZXMgYWxsb3dlZCBmb3IgcXVldWVpbmcgYnkgYWxsIFRDUCBzb2NrZXRzLgorCisJRGVmYXVsdHMgYXJlIGNhbGN1bGF0ZWQgYXQgYm9vdCB0aW1lIGZyb20gYW1vdW50IG9mIGF2YWlsYWJsZQorCW1lbW9yeS4KKwordGNwX2FwcF93aW4gLSBJTlRFR0VSCisJUmVzZXJ2ZSBtYXgod2luZG93LzJedGNwX2FwcF93aW4sIG1zcykgb2Ygd2luZG93IGZvciBhcHBsaWNhdGlvbgorCWJ1ZmZlci4gVmFsdWUgMCBpcyBzcGVjaWFsLCBpdCBtZWFucyB0aGF0IG5vdGhpbmcgaXMgcmVzZXJ2ZWQuCisJRGVmYXVsdDogMzEKKwordGNwX2Fkdl93aW5fc2NhbGUgLSBJTlRFR0VSCisJQ291bnQgYnVmZmVyaW5nIG92ZXJoZWFkIGFzIGJ5dGVzLzJedGNwX2Fkdl93aW5fc2NhbGUKKwkoaWYgdGNwX2Fkdl93aW5fc2NhbGUgPiAwKSBvciBieXRlcy1ieXRlcy8yXigtdGNwX2Fkdl93aW5fc2NhbGUpLAorCWlmIGl0IGlzIDw9IDAuCisJRGVmYXVsdDogMgorCit0Y3BfcmZjMTMzNyAtIEJPT0xFQU4KKwlJZiBzZXQsIHRoZSBUQ1Agc3RhY2sgYmVoYXZlcyBjb25mb3JtaW5nIHRvIFJGQzEzMzcuIElmIHVuc2V0LAorCXdlIGFyZSBub3QgY29uZm9ybWluZyB0byBSRkMsIGJ1dCBwcmV2ZW50IFRDUCBUSU1FX1dBSVQKKwlhc3Nhc3NpbmF0aW9uLiAgIAorCURlZmF1bHQ6IDAKKwordGNwX2xvd19sYXRlbmN5IC0gQk9PTEVBTgorCUlmIHNldCwgdGhlIFRDUCBzdGFjayBtYWtlcyBkZWNpc2lvbnMgdGhhdCBwcmVmZXIgbG93ZXIKKwlsYXRlbmN5IGFzIG9wcG9zZWQgdG8gaGlnaGVyIHRocm91Z2hwdXQuICBCeSBkZWZhdWx0LCB0aGlzCisJb3B0aW9uIGlzIG5vdCBzZXQgbWVhbmluZyB0aGF0IGhpZ2hlciB0aHJvdWdocHV0IGlzIHByZWZlcnJlZC4KKwlBbiBleGFtcGxlIG9mIGFuIGFwcGxpY2F0aW9uIHdoZXJlIHRoaXMgZGVmYXVsdCBzaG91bGQgYmUKKwljaGFuZ2VkIHdvdWxkIGJlIGEgQmVvd3VsZiBjb21wdXRlIGNsdXN0ZXIuCisJRGVmYXVsdDogMAorCit0Y3Bfd2VzdHdvb2QgLSBCT09MRUFOCisgICAgICAgIEVuYWJsZSBUQ1AgV2VzdHdvb2QrIGNvbmdlc3Rpb24gY29udHJvbCBhbGdvcml0aG0uCisJVENQIFdlc3R3b29kKyBpcyBhIHNlbmRlci1zaWRlIG9ubHkgbW9kaWZpY2F0aW9uIG9mIHRoZSBUQ1AgUmVubyAKKwlwcm90b2NvbCBzdGFjayB0aGF0IG9wdGltaXplcyB0aGUgcGVyZm9ybWFuY2Ugb2YgVENQIGNvbmdlc3Rpb24gCisJY29udHJvbC4gSXQgaXMgYmFzZWQgb24gZW5kLXRvLWVuZCBiYW5kd2lkdGggZXN0aW1hdGlvbiB0byBzZXQgCisJY29uZ2VzdGlvbiB3aW5kb3cgYW5kIHNsb3cgc3RhcnQgdGhyZXNob2xkIGFmdGVyIGEgY29uZ2VzdGlvbiAKKwllcGlzb2RlLiBVc2luZyB0aGlzIGVzdGltYXRpb24sIFRDUCBXZXN0d29vZCsgYWRhcHRpdmVseSBzZXRzIGEgCisJc2xvdyBzdGFydCB0aHJlc2hvbGQgYW5kIGEgY29uZ2VzdGlvbiB3aW5kb3cgd2hpY2ggdGFrZXMgaW50byAKKwlhY2NvdW50IHRoZSBiYW5kd2lkdGggdXNlZCAgYXQgdGhlIHRpbWUgY29uZ2VzdGlvbiBpcyBleHBlcmllbmNlZC4gCisJVENQIFdlc3R3b29kKyBzaWduaWZpY2FudGx5IGluY3JlYXNlcyBmYWlybmVzcyB3cnQgVENQIFJlbm8gaW4gCisJd2lyZWQgbmV0d29ya3MgYW5kIHRocm91Z2hwdXQgb3ZlciB3aXJlbGVzcyBsaW5rcy4gICAKKyAgICAgICAgRGVmYXVsdDogMAorCit0Y3BfdmVnYXNfY29uZ19hdm9pZCAtIEJPT0xFQU4KKwlFbmFibGUgVENQIFZlZ2FzIGNvbmdlc3Rpb24gYXZvaWRhbmNlIGFsZ29yaXRobS4KKwlUQ1AgVmVnYXMgaXMgYSBzZW5kZXItc2lkZSBvbmx5IGNoYW5nZSB0byBUQ1AgdGhhdCBhbnRpY2lwYXRlcworCXRoZSBvbnNldCBvZiBjb25nZXN0aW9uIGJ5IGVzdGltYXRpbmcgdGhlIGJhbmR3aWR0aC4gVENQIFZlZ2FzCisJYWRqdXN0cyB0aGUgc2VuZGluZyByYXRlIGJ5IG1vZGlmeWluZyB0aGUgY29uZ2VzdGlvbgorCXdpbmRvdy4gVENQIFZlZ2FzIHNob3VsZCBwcm92aWRlIGxlc3MgcGFja2V0IGxvc3MsIGJ1dCBpdCBpcworCW5vdCBhcyBhZ2dyZXNzaXZlIGFzIFRDUCBSZW5vLgorCURlZmF1bHQ6MAorCit0Y3BfYmljIC0gQk9PTEVBTgorCUVuYWJsZSBCSUMgVENQIGNvbmdlc3Rpb24gY29udHJvbCBhbGdvcml0aG0uCisJQklDLVRDUCBpcyBhIHNlbmRlci1zaWRlIG9ubHkgY2hhbmdlIHRoYXQgZW5zdXJlcyBhIGxpbmVhciBSVFQKKwlmYWlybmVzcyB1bmRlciBsYXJnZSB3aW5kb3dzIHdoaWxlIG9mZmVyaW5nIGJvdGggc2NhbGFiaWxpdHkgYW5kCisJYm91bmRlZCBUQ1AtZnJpZW5kbGluZXNzLiBUaGUgcHJvdG9jb2wgY29tYmluZXMgdHdvIHNjaGVtZXMKKwljYWxsZWQgYWRkaXRpdmUgaW5jcmVhc2UgYW5kIGJpbmFyeSBzZWFyY2ggaW5jcmVhc2UuIFdoZW4gdGhlCisJY29uZ2VzdGlvbiB3aW5kb3cgaXMgbGFyZ2UsIGFkZGl0aXZlIGluY3JlYXNlIHdpdGggYSBsYXJnZQorCWluY3JlbWVudCBlbnN1cmVzIGxpbmVhciBSVFQgZmFpcm5lc3MgYXMgd2VsbCBhcyBnb29kCisJc2NhbGFiaWxpdHkuIFVuZGVyIHNtYWxsIGNvbmdlc3Rpb24gd2luZG93cywgYmluYXJ5IHNlYXJjaAorCWluY3JlYXNlIHByb3ZpZGVzIFRDUCBmcmllbmRsaW5lc3MuCisJRGVmYXVsdDogMAorCit0Y3BfYmljX2xvd193aW5kb3cgLSBJTlRFR0VSCisJU2V0cyB0aGUgdGhyZXNob2xkIHdpbmRvdyAoaW4gcGFja2V0cykgd2hlcmUgQklDIFRDUCBzdGFydHMgdG8KKwlhZGp1c3QgdGhlIGNvbmdlc3Rpb24gd2luZG93LiBCZWxvdyB0aGlzIHRocmVzaG9sZCBCSUMgVENQIGJlaGF2ZXMKKwl0aGUgc2FtZSBhcyB0aGUgZGVmYXVsdCBUQ1AgUmVuby4gCisJRGVmYXVsdDogMTQKKwordGNwX2JpY19mYXN0X2NvbnZlcmdlbmNlIC0gQk9PTEVBTgorCUZvcmNlcyBCSUMgVENQIHRvIG1vcmUgcXVpY2tseSByZXNwb25kIHRvIGNoYW5nZXMgaW4gY29uZ2VzdGlvbgorCXdpbmRvdy4gQWxsb3dzIHR3byBmbG93cyBzaGFyaW5nIHRoZSBzYW1lIGNvbm5lY3Rpb24gdG8gY29udmVyZ2UKKwltb3JlIHJhcGlkbHkuCisJRGVmYXVsdDogMQorCit0Y3BfZGVmYXVsdF93aW5fc2NhbGUgLSBJTlRFR0VSCisJU2V0cyB0aGUgbWluaW11bSB3aW5kb3cgc2NhbGUgVENQIHdpbGwgbmVnb3RpYXRlIGZvciBvbiBhbGwKKwljb25lY3Rpb25zLgorCURlZmF1bHQ6IDcKKwordGNwX3Rzb193aW5fZGl2aXNvciAtIElOVEVHRVIKKyAgICAgICBUaGlzIGFsbG93cyBjb250cm9sIG92ZXIgd2hhdCBwZXJjZW50YWdlIG9mIHRoZSBjb25nZXN0aW9uIHdpbmRvdworICAgICAgIGNhbiBiZSBjb25zdW1lZCBieSBhIHNpbmdsZSBUU08gZnJhbWUuCisgICAgICAgVGhlIHNldHRpbmcgb2YgdGhpcyBwYXJhbWV0ZXIgaXMgYSBjaG9pY2UgYmV0d2VlbiBidXJzdGluZXNzIGFuZAorICAgICAgIGJ1aWxkaW5nIGxhcmdlciBUU08gZnJhbWVzLgorICAgICAgIERlZmF1bHQ6IDgKKwordGNwX2ZydG8gLSBCT09MRUFOCisJRW5hYmxlcyBGLVJUTywgYW4gZW5oYW5jZWQgcmVjb3ZlcnkgYWxnb3JpdGhtIGZvciBUQ1AgcmV0cmFuc21pc3Npb24KKwl0aW1lb3V0cy4gIEl0IGlzIHBhcnRpY3VsYXJseSBiZW5lZmljaWFsIGluIHdpcmVsZXNzIGVudmlyb25tZW50cworCXdoZXJlIHBhY2tldCBsb3NzIGlzIHR5cGljYWxseSBkdWUgdG8gcmFuZG9tIHJhZGlvIGludGVyZmVyZW5jZQorCXJhdGhlciB0aGFuIGludGVybWVkaWF0ZSByb3V0ZXIgY29uZ2VzdGlvbi4KKworc29tYXhjb25uIC0gSU5URUdFUgorCUxpbWl0IG9mIHNvY2tldCBsaXN0ZW4oKSBiYWNrbG9nLCBrbm93biBpbiB1c2Vyc3BhY2UgYXMgU09NQVhDT05OLgorCURlZmF1bHRzIHRvIDEyOC4gIFNlZSBhbHNvIHRjcF9tYXhfc3luX2JhY2tsb2cgZm9yIGFkZGl0aW9uYWwgdHVuaW5nCisJZm9yIFRDUCBzb2NrZXRzLgorCitJUCBWYXJpYWJsZXM6CisKK2lwX2xvY2FsX3BvcnRfcmFuZ2UgLSAyIElOVEVHRVJTCisJRGVmaW5lcyB0aGUgbG9jYWwgcG9ydCByYW5nZSB0aGF0IGlzIHVzZWQgYnkgVENQIGFuZCBVRFAgdG8KKwljaG9vc2UgdGhlIGxvY2FsIHBvcnQuIFRoZSBmaXJzdCBudW1iZXIgaXMgdGhlIGZpcnN0LCB0aGUgCisJc2Vjb25kIHRoZSBsYXN0IGxvY2FsIHBvcnQgbnVtYmVyLiBEZWZhdWx0IHZhbHVlIGRlcGVuZHMgb24KKwlhbW91bnQgb2YgbWVtb3J5IGF2YWlsYWJsZSBvbiB0aGUgc3lzdGVtOgorCT4gMTI4TWIgMzI3NjgtNjEwMDAKKwk8IDEyOE1iIDEwMjQtNDk5OSBvciBldmVuIGxlc3MuCisJVGhpcyBudW1iZXIgZGVmaW5lcyBudW1iZXIgb2YgYWN0aXZlIGNvbm5lY3Rpb25zLCB3aGljaCB0aGlzCisJc3lzdGVtIGNhbiBpc3N1ZSBzaW11bHRhbmVvdXNseSB0byBzeXN0ZW1zIG5vdCBzdXBwb3J0aW5nCisJVENQIGV4dGVuc2lvbnMgKHRpbWVzdGFtcHMpLiBXaXRoIHRjcF90d19yZWN5Y2xlIGVuYWJsZWQKKwkoaS5lLiBieSBkZWZhdWx0KSByYW5nZSAxMDI0LTQ5OTkgaXMgZW5vdWdoIHRvIGlzc3VlIHVwIHRvCisJMjAwMCBjb25uZWN0aW9ucyBwZXIgc2Vjb25kIHRvIHN5c3RlbXMgc3VwcG9ydGluZyB0aW1lc3RhbXBzLgorCitpcF9ub25sb2NhbF9iaW5kIC0gQk9PTEVBTgorCUlmIHNldCwgYWxsb3dzIHByb2Nlc3NlcyB0byBiaW5kKCkgdG8gbm9uLWxvY2FsIElQIGFkZHJlc3NlcywKKwl3aGljaCBjYW4gYmUgcXVpdGUgdXNlZnVsIC0gYnV0IG1heSBicmVhayBzb21lIGFwcGxpY2F0aW9ucy4KKwlEZWZhdWx0OiAwCisKK2lwX2R5bmFkZHIgLSBCT09MRUFOCisJSWYgc2V0IG5vbi16ZXJvLCBlbmFibGVzIHN1cHBvcnQgZm9yIGR5bmFtaWMgYWRkcmVzc2VzLgorCUlmIHNldCB0byBhIG5vbi16ZXJvIHZhbHVlIGxhcmdlciB0aGFuIDEsIGEga2VybmVsIGxvZworCW1lc3NhZ2Ugd2lsbCBiZSBwcmludGVkIHdoZW4gZHluYW1pYyBhZGRyZXNzIHJld3JpdGluZworCW9jY3Vycy4KKwlEZWZhdWx0OiAwCisKK2ljbXBfZWNob19pZ25vcmVfYWxsIC0gQk9PTEVBTgoraWNtcF9lY2hvX2lnbm9yZV9icm9hZGNhc3RzIC0gQk9PTEVBTgorCUlmIGVpdGhlciBpcyBzZXQgdG8gdHJ1ZSwgdGhlbiB0aGUga2VybmVsIHdpbGwgaWdub3JlIGVpdGhlciBhbGwKKwlJQ01QIEVDSE8gcmVxdWVzdHMgc2VudCB0byBpdCBvciBqdXN0IHRob3NlIHRvIGJyb2FkY2FzdC9tdWx0aWNhc3QKKwlhZGRyZXNzZXMsIHJlc3BlY3RpdmVseS4KKworaWNtcF9yYXRlbGltaXQgLSBJTlRFR0VSCisJTGltaXQgdGhlIG1heGltYWwgcmF0ZXMgZm9yIHNlbmRpbmcgSUNNUCBwYWNrZXRzIHdob3NlIHR5cGUgbWF0Y2hlcworCWljbXBfcmF0ZW1hc2sgKHNlZSBiZWxvdykgdG8gc3BlY2lmaWMgdGFyZ2V0cy4KKwkwIHRvIGRpc2FibGUgYW55IGxpbWl0aW5nLCBvdGhlcndpc2UgdGhlIG1heGltYWwgcmF0ZSBpbiBqaWZmaWVzKDEpCisJRGVmYXVsdDogMTAwCisKK2ljbXBfcmF0ZW1hc2sgLSBJTlRFR0VSCisJTWFzayBtYWRlIG9mIElDTVAgdHlwZXMgZm9yIHdoaWNoIHJhdGVzIGFyZSBiZWluZyBsaW1pdGVkLgorCVNpZ25pZmljYW50IGJpdHM6IElIR0ZFRENCQTk4NzY1NDMyMTAKKwlEZWZhdWx0IG1hc2s6ICAgICAwMDAwMDAxMTAwMDAwMDExMDAwICg2MTY4KQorCisJQml0IGRlZmluaXRpb25zIChzZWUgaW5jbHVkZS9saW51eC9pY21wLmgpOgorCQkwIEVjaG8gUmVwbHkKKwkJMyBEZXN0aW5hdGlvbiBVbnJlYWNoYWJsZSAqCisJCTQgU291cmNlIFF1ZW5jaCAqCisJCTUgUmVkaXJlY3QKKwkJOCBFY2hvIFJlcXVlc3QKKwkJQiBUaW1lIEV4Y2VlZGVkICoKKwkJQyBQYXJhbWV0ZXIgUHJvYmxlbSAqCisJCUQgVGltZXN0YW1wIFJlcXVlc3QKKwkJRSBUaW1lc3RhbXAgUmVwbHkKKwkJRiBJbmZvIFJlcXVlc3QKKwkJRyBJbmZvIFJlcGx5CisJCUggQWRkcmVzcyBNYXNrIFJlcXVlc3QKKwkJSSBBZGRyZXNzIE1hc2sgUmVwbHkKKworCSogVGhlc2UgYXJlIHJhdGUgbGltaXRlZCBieSBkZWZhdWx0IChzZWUgZGVmYXVsdCBtYXNrIGFib3ZlKQorCitpY21wX2lnbm9yZV9ib2d1c19lcnJvcl9yZXNwb25zZXMgLSBCT09MRUFOCisJU29tZSByb3V0ZXJzIHZpb2xhdGUgUkZDMTEyMiBieSBzZW5kaW5nIGJvZ3VzIHJlc3BvbnNlcyB0byBicm9hZGNhc3QKKwlmcmFtZXMuICBTdWNoIHZpb2xhdGlvbnMgYXJlIG5vcm1hbGx5IGxvZ2dlZCB2aWEgYSBrZXJuZWwgd2FybmluZy4KKwlJZiB0aGlzIGlzIHNldCB0byBUUlVFLCB0aGUga2VybmVsIHdpbGwgbm90IGdpdmUgc3VjaCB3YXJuaW5ncywgd2hpY2gKKwl3aWxsIGF2b2lkIGxvZyBmaWxlIGNsdXR0ZXIuCisJRGVmYXVsdDogRkFMU0UKKworaWdtcF9tYXhfbWVtYmVyc2hpcHMgLSBJTlRFR0VSCisJQ2hhbmdlIHRoZSBtYXhpbXVtIG51bWJlciBvZiBtdWx0aWNhc3QgZ3JvdXBzIHdlIGNhbiBzdWJzY3JpYmUgdG8uCisJRGVmYXVsdDogMjAKKworY29uZi9pbnRlcmZhY2UvKiAgY2hhbmdlcyBzcGVjaWFsIHNldHRpbmdzIHBlciBpbnRlcmZhY2UgKHdoZXJlICJpbnRlcmZhY2UiIGlzIAorCQkgIHRoZSBuYW1lIG9mIHlvdXIgbmV0d29yayBpbnRlcmZhY2UpCitjb25mL2FsbC8qCSAgaXMgc3BlY2lhbCwgY2hhbmdlcyB0aGUgc2V0dGluZ3MgZm9yIGFsbCBpbnRlcmZhY2VzCisKKworbG9nX21hcnRpYW5zIC0gQk9PTEVBTgorCUxvZyBwYWNrZXRzIHdpdGggaW1wb3NzaWJsZSBhZGRyZXNzZXMgdG8ga2VybmVsIGxvZy4KKwlsb2dfbWFydGlhbnMgZm9yIHRoZSBpbnRlcmZhY2Ugd2lsbCBiZSBlbmFibGVkIGlmIGF0IGxlYXN0IG9uZSBvZgorCWNvbmYve2FsbCxpbnRlcmZhY2V9L2xvZ19tYXJ0aWFucyBpcyBzZXQgdG8gVFJVRSwKKwlpdCB3aWxsIGJlIGRpc2FibGVkIG90aGVyd2lzZQorCithY2NlcHRfcmVkaXJlY3RzIC0gQk9PTEVBTgorCUFjY2VwdCBJQ01QIHJlZGlyZWN0IG1lc3NhZ2VzLgorCWFjY2VwdF9yZWRpcmVjdHMgZm9yIHRoZSBpbnRlcmZhY2Ugd2lsbCBiZSBlbmFibGVkIGlmOgorCS0gYm90aCBjb25mL3thbGwsaW50ZXJmYWNlfS9hY2NlcHRfcmVkaXJlY3RzIGFyZSBUUlVFIGluIHRoZSBjYXNlIGZvcndhcmRpbmcKKwkgIGZvciB0aGUgaW50ZXJmYWNlIGlzIGVuYWJsZWQKKwlvcgorCS0gYXQgbGVhc3Qgb25lIG9mIGNvbmYve2FsbCxpbnRlcmZhY2V9L2FjY2VwdF9yZWRpcmVjdHMgaXMgVFJVRSBpbiB0aGUgY2FzZQorCSAgZm9yd2FyZGluZyBmb3IgdGhlIGludGVyZmFjZSBpcyBkaXNhYmxlZAorCWFjY2VwdF9yZWRpcmVjdHMgZm9yIHRoZSBpbnRlcmZhY2Ugd2lsbCBiZSBkaXNhYmxlZCBvdGhlcndpc2UKKwlkZWZhdWx0IFRSVUUgKGhvc3QpCisJCUZBTFNFIChyb3V0ZXIpCisKK2ZvcndhcmRpbmcgLSBCT09MRUFOCisJRW5hYmxlIElQIGZvcndhcmRpbmcgb24gdGhpcyBpbnRlcmZhY2UuCisKK21jX2ZvcndhcmRpbmcgLSBCT09MRUFOCisJRG8gbXVsdGljYXN0IHJvdXRpbmcuIFRoZSBrZXJuZWwgbmVlZHMgdG8gYmUgY29tcGlsZWQgd2l0aCBDT05GSUdfTVJPVVRFCisJYW5kIGEgbXVsdGljYXN0IHJvdXRpbmcgZGFlbW9uIGlzIHJlcXVpcmVkLgorCWNvbmYvYWxsL21jX2ZvcndhcmRpbmcgbXVzdCBhbHNvIGJlIHNldCB0byBUUlVFIHRvIGVuYWJsZSBtdWx0aWNhc3Qgcm91dGluZworCWZvciB0aGUgaW50ZXJmYWNlCisKK21lZGl1bV9pZCAtIElOVEVHRVIKKwlJbnRlZ2VyIHZhbHVlIHVzZWQgdG8gZGlmZmVyZW50aWF0ZSB0aGUgZGV2aWNlcyBieSB0aGUgbWVkaXVtIHRoZXkKKwlhcmUgYXR0YWNoZWQgdG8uIFR3byBkZXZpY2VzIGNhbiBoYXZlIGRpZmZlcmVudCBpZCB2YWx1ZXMgd2hlbgorCXRoZSBicm9hZGNhc3QgcGFja2V0cyBhcmUgcmVjZWl2ZWQgb25seSBvbiBvbmUgb2YgdGhlbS4KKwlUaGUgZGVmYXVsdCB2YWx1ZSAwIG1lYW5zIHRoYXQgdGhlIGRldmljZSBpcyB0aGUgb25seSBpbnRlcmZhY2UKKwl0byBpdHMgbWVkaXVtLCB2YWx1ZSBvZiAtMSBtZWFucyB0aGF0IG1lZGl1bSBpcyBub3Qga25vd24uCisJCisJQ3VycmVudGx5LCBpdCBpcyB1c2VkIHRvIGNoYW5nZSB0aGUgcHJveHlfYXJwIGJlaGF2aW9yOgorCXRoZSBwcm94eV9hcnAgZmVhdHVyZSBpcyBlbmFibGVkIGZvciBwYWNrZXRzIGZvcndhcmRlZCBiZXR3ZWVuCisJdHdvIGRldmljZXMgYXR0YWNoZWQgdG8gZGlmZmVyZW50IG1lZGlhLgorCitwcm94eV9hcnAgLSBCT09MRUFOCisJRG8gcHJveHkgYXJwLgorCXByb3h5X2FycCBmb3IgdGhlIGludGVyZmFjZSB3aWxsIGJlIGVuYWJsZWQgaWYgYXQgbGVhc3Qgb25lIG9mCisJY29uZi97YWxsLGludGVyZmFjZX0vcHJveHlfYXJwIGlzIHNldCB0byBUUlVFLAorCWl0IHdpbGwgYmUgZGlzYWJsZWQgb3RoZXJ3aXNlCisKK3NoYXJlZF9tZWRpYSAtIEJPT0xFQU4KKwlTZW5kKHJvdXRlcikgb3IgYWNjZXB0KGhvc3QpIFJGQzE2MjAgc2hhcmVkIG1lZGlhIHJlZGlyZWN0cy4KKwlPdmVycmlkZXMgaXBfc2VjdXJlX3JlZGlyZWN0cy4KKwlzaGFyZWRfbWVkaWEgZm9yIHRoZSBpbnRlcmZhY2Ugd2lsbCBiZSBlbmFibGVkIGlmIGF0IGxlYXN0IG9uZSBvZgorCWNvbmYve2FsbCxpbnRlcmZhY2V9L3NoYXJlZF9tZWRpYSBpcyBzZXQgdG8gVFJVRSwKKwlpdCB3aWxsIGJlIGRpc2FibGVkIG90aGVyd2lzZQorCWRlZmF1bHQgVFJVRQorCitzZWN1cmVfcmVkaXJlY3RzIC0gQk9PTEVBTgorCUFjY2VwdCBJQ01QIHJlZGlyZWN0IG1lc3NhZ2VzIG9ubHkgZm9yIGdhdGV3YXlzLAorCWxpc3RlZCBpbiBkZWZhdWx0IGdhdGV3YXkgbGlzdC4KKwlzZWN1cmVfcmVkaXJlY3RzIGZvciB0aGUgaW50ZXJmYWNlIHdpbGwgYmUgZW5hYmxlZCBpZiBhdCBsZWFzdCBvbmUgb2YKKwljb25mL3thbGwsaW50ZXJmYWNlfS9zZWN1cmVfcmVkaXJlY3RzIGlzIHNldCB0byBUUlVFLAorCWl0IHdpbGwgYmUgZGlzYWJsZWQgb3RoZXJ3aXNlCisJZGVmYXVsdCBUUlVFCisKK3NlbmRfcmVkaXJlY3RzIC0gQk9PTEVBTgorCVNlbmQgcmVkaXJlY3RzLCBpZiByb3V0ZXIuCisJc2VuZF9yZWRpcmVjdHMgZm9yIHRoZSBpbnRlcmZhY2Ugd2lsbCBiZSBlbmFibGVkIGlmIGF0IGxlYXN0IG9uZSBvZgorCWNvbmYve2FsbCxpbnRlcmZhY2V9L3NlbmRfcmVkaXJlY3RzIGlzIHNldCB0byBUUlVFLAorCWl0IHdpbGwgYmUgZGlzYWJsZWQgb3RoZXJ3aXNlCisJRGVmYXVsdDogVFJVRQorCitib290cF9yZWxheSAtIEJPT0xFQU4KKwlBY2NlcHQgcGFja2V0cyB3aXRoIHNvdXJjZSBhZGRyZXNzIDAuYi5jLmQgZGVzdGluZWQKKwlub3QgdG8gdGhpcyBob3N0IGFzIGxvY2FsIG9uZXMuIEl0IGlzIHN1cHBvc2VkLCB0aGF0CisJQk9PVFAgcmVsYXkgZGFlbW9uIHdpbGwgY2F0Y2ggYW5kIGZvcndhcmQgc3VjaCBwYWNrZXRzLgorCWNvbmYvYWxsL2Jvb3RwX3JlbGF5IG11c3QgYWxzbyBiZSBzZXQgdG8gVFJVRSB0byBlbmFibGUgQk9PVFAgcmVsYXkKKwlmb3IgdGhlIGludGVyZmFjZQorCWRlZmF1bHQgRkFMU0UKKwlOb3QgSW1wbGVtZW50ZWQgWWV0LgorCithY2NlcHRfc291cmNlX3JvdXRlIC0gQk9PTEVBTgorCUFjY2VwdCBwYWNrZXRzIHdpdGggU1JSIG9wdGlvbi4KKwljb25mL2FsbC9hY2NlcHRfc291cmNlX3JvdXRlIG11c3QgYWxzbyBiZSBzZXQgdG8gVFJVRSB0byBhY2NlcHQgcGFja2V0cworCXdpdGggU1JSIG9wdGlvbiBvbiB0aGUgaW50ZXJmYWNlCisJZGVmYXVsdCBUUlVFIChyb3V0ZXIpCisJCUZBTFNFIChob3N0KQorCitycF9maWx0ZXIgLSBCT09MRUFOCisJMSAtIGRvIHNvdXJjZSB2YWxpZGF0aW9uIGJ5IHJldmVyc2VkIHBhdGgsIGFzIHNwZWNpZmllZCBpbiBSRkMxODEyCisJICAgIFJlY29tbWVuZGVkIG9wdGlvbiBmb3Igc2luZ2xlIGhvbWVkIGhvc3RzIGFuZCBzdHViIG5ldHdvcmsKKwkgICAgcm91dGVycy4gQ291bGQgY2F1c2UgdHJvdWJsZXMgZm9yIGNvbXBsaWNhdGVkIChub3QgbG9vcCBmcmVlKQorCSAgICBuZXR3b3JrcyBydW5uaW5nIGEgc2xvdyB1bnJlbGlhYmxlIHByb3RvY29sIChzb3J0IG9mIFJJUCksCisJICAgIG9yIHVzaW5nIHN0YXRpYyByb3V0ZXMuCisKKwkwIC0gTm8gc291cmNlIHZhbGlkYXRpb24uCisKKwljb25mL2FsbC9ycF9maWx0ZXIgbXVzdCBhbHNvIGJlIHNldCB0byBUUlVFIHRvIGRvIHNvdXJjZSB2YWxpZGF0aW9uCisJb24gdGhlIGludGVyZmFjZQorCisJRGVmYXVsdCB2YWx1ZSBpcyAwLiBOb3RlIHRoYXQgc29tZSBkaXN0cmlidXRpb25zIGVuYWJsZSBpdAorCWluIHN0YXJ0dXAgc2NyaXB0cy4KKworYXJwX2ZpbHRlciAtIEJPT0xFQU4KKwkxIC0gQWxsb3dzIHlvdSB0byBoYXZlIG11bHRpcGxlIG5ldHdvcmsgaW50ZXJmYWNlcyBvbiB0aGUgc2FtZQorCXN1Ym5ldCwgYW5kIGhhdmUgdGhlIEFSUHMgZm9yIGVhY2ggaW50ZXJmYWNlIGJlIGFuc3dlcmVkCisJYmFzZWQgb24gd2hldGhlciBvciBub3QgdGhlIGtlcm5lbCB3b3VsZCByb3V0ZSBhIHBhY2tldCBmcm9tCisJdGhlIEFSUCdkIElQIG91dCB0aGF0IGludGVyZmFjZSAodGhlcmVmb3JlIHlvdSBtdXN0IHVzZSBzb3VyY2UKKwliYXNlZCByb3V0aW5nIGZvciB0aGlzIHRvIHdvcmspLiBJbiBvdGhlciB3b3JkcyBpdCBhbGxvd3MgY29udHJvbAorCW9mIHdoaWNoIGNhcmRzICh1c3VhbGx5IDEpIHdpbGwgcmVzcG9uZCB0byBhbiBhcnAgcmVxdWVzdC4KKworCTAgLSAoZGVmYXVsdCkgVGhlIGtlcm5lbCBjYW4gcmVzcG9uZCB0byBhcnAgcmVxdWVzdHMgd2l0aCBhZGRyZXNzZXMKKwlmcm9tIG90aGVyIGludGVyZmFjZXMuIFRoaXMgbWF5IHNlZW0gd3JvbmcgYnV0IGl0IHVzdWFsbHkgbWFrZXMKKwlzZW5zZSwgYmVjYXVzZSBpdCBpbmNyZWFzZXMgdGhlIGNoYW5jZSBvZiBzdWNjZXNzZnVsIGNvbW11bmljYXRpb24uCisJSVAgYWRkcmVzc2VzIGFyZSBvd25lZCBieSB0aGUgY29tcGxldGUgaG9zdCBvbiBMaW51eCwgbm90IGJ5CisJcGFydGljdWxhciBpbnRlcmZhY2VzLiBPbmx5IGZvciBtb3JlIGNvbXBsZXggc2V0dXBzIGxpa2UgbG9hZC0KKwliYWxhbmNpbmcsIGRvZXMgdGhpcyBiZWhhdmlvdXIgY2F1c2UgcHJvYmxlbXMuCisKKwlhcnBfZmlsdGVyIGZvciB0aGUgaW50ZXJmYWNlIHdpbGwgYmUgZW5hYmxlZCBpZiBhdCBsZWFzdCBvbmUgb2YKKwljb25mL3thbGwsaW50ZXJmYWNlfS9hcnBfZmlsdGVyIGlzIHNldCB0byBUUlVFLAorCWl0IHdpbGwgYmUgZGlzYWJsZWQgb3RoZXJ3aXNlCisKK2FycF9hbm5vdW5jZSAtIElOVEVHRVIKKwlEZWZpbmUgZGlmZmVyZW50IHJlc3RyaWN0aW9uIGxldmVscyBmb3IgYW5ub3VuY2luZyB0aGUgbG9jYWwKKwlzb3VyY2UgSVAgYWRkcmVzcyBmcm9tIElQIHBhY2tldHMgaW4gQVJQIHJlcXVlc3RzIHNlbnQgb24KKwlpbnRlcmZhY2U6CisJMCAtIChkZWZhdWx0KSBVc2UgYW55IGxvY2FsIGFkZHJlc3MsIGNvbmZpZ3VyZWQgb24gYW55IGludGVyZmFjZQorCTEgLSBUcnkgdG8gYXZvaWQgbG9jYWwgYWRkcmVzc2VzIHRoYXQgYXJlIG5vdCBpbiB0aGUgdGFyZ2V0J3MKKwlzdWJuZXQgZm9yIHRoaXMgaW50ZXJmYWNlLiBUaGlzIG1vZGUgaXMgdXNlZnVsIHdoZW4gdGFyZ2V0CisJaG9zdHMgcmVhY2hhYmxlIHZpYSB0aGlzIGludGVyZmFjZSByZXF1aXJlIHRoZSBzb3VyY2UgSVAKKwlhZGRyZXNzIGluIEFSUCByZXF1ZXN0cyB0byBiZSBwYXJ0IG9mIHRoZWlyIGxvZ2ljYWwgbmV0d29yaworCWNvbmZpZ3VyZWQgb24gdGhlIHJlY2VpdmluZyBpbnRlcmZhY2UuIFdoZW4gd2UgZ2VuZXJhdGUgdGhlCisJcmVxdWVzdCB3ZSB3aWxsIGNoZWNrIGFsbCBvdXIgc3VibmV0cyB0aGF0IGluY2x1ZGUgdGhlCisJdGFyZ2V0IElQIGFuZCB3aWxsIHByZXNlcnZlIHRoZSBzb3VyY2UgYWRkcmVzcyBpZiBpdCBpcyBmcm9tCisJc3VjaCBzdWJuZXQuIElmIHRoZXJlIGlzIG5vIHN1Y2ggc3VibmV0IHdlIHNlbGVjdCBzb3VyY2UKKwlhZGRyZXNzIGFjY29yZGluZyB0byB0aGUgcnVsZXMgZm9yIGxldmVsIDIuCisJMiAtIEFsd2F5cyB1c2UgdGhlIGJlc3QgbG9jYWwgYWRkcmVzcyBmb3IgdGhpcyB0YXJnZXQuCisJSW4gdGhpcyBtb2RlIHdlIGlnbm9yZSB0aGUgc291cmNlIGFkZHJlc3MgaW4gdGhlIElQIHBhY2tldAorCWFuZCB0cnkgdG8gc2VsZWN0IGxvY2FsIGFkZHJlc3MgdGhhdCB3ZSBwcmVmZXIgZm9yIHRhbGtzIHdpdGgKKwl0aGUgdGFyZ2V0IGhvc3QuIFN1Y2ggbG9jYWwgYWRkcmVzcyBpcyBzZWxlY3RlZCBieSBsb29raW5nCisJZm9yIHByaW1hcnkgSVAgYWRkcmVzc2VzIG9uIGFsbCBvdXIgc3VibmV0cyBvbiB0aGUgb3V0Z29pbmcKKwlpbnRlcmZhY2UgdGhhdCBpbmNsdWRlIHRoZSB0YXJnZXQgSVAgYWRkcmVzcy4gSWYgbm8gc3VpdGFibGUKKwlsb2NhbCBhZGRyZXNzIGlzIGZvdW5kIHdlIHNlbGVjdCB0aGUgZmlyc3QgbG9jYWwgYWRkcmVzcworCXdlIGhhdmUgb24gdGhlIG91dGdvaW5nIGludGVyZmFjZSBvciBvbiBhbGwgb3RoZXIgaW50ZXJmYWNlcywKKwl3aXRoIHRoZSBob3BlIHdlIHdpbGwgcmVjZWl2ZSByZXBseSBmb3Igb3VyIHJlcXVlc3QgYW5kCisJZXZlbiBzb21ldGltZXMgbm8gbWF0dGVyIHRoZSBzb3VyY2UgSVAgYWRkcmVzcyB3ZSBhbm5vdW5jZS4KKworCVRoZSBtYXggdmFsdWUgZnJvbSBjb25mL3thbGwsaW50ZXJmYWNlfS9hcnBfYW5ub3VuY2UgaXMgdXNlZC4KKworCUluY3JlYXNpbmcgdGhlIHJlc3RyaWN0aW9uIGxldmVsIGdpdmVzIG1vcmUgY2hhbmNlIGZvcgorCXJlY2VpdmluZyBhbnN3ZXIgZnJvbSB0aGUgcmVzb2x2ZWQgdGFyZ2V0IHdoaWxlIGRlY3JlYXNpbmcKKwl0aGUgbGV2ZWwgYW5ub3VuY2VzIG1vcmUgdmFsaWQgc2VuZGVyJ3MgaW5mb3JtYXRpb24uCisKK2FycF9pZ25vcmUgLSBJTlRFR0VSCisJRGVmaW5lIGRpZmZlcmVudCBtb2RlcyBmb3Igc2VuZGluZyByZXBsaWVzIGluIHJlc3BvbnNlIHRvCisJcmVjZWl2ZWQgQVJQIHJlcXVlc3RzIHRoYXQgcmVzb2x2ZSBsb2NhbCB0YXJnZXQgSVAgYWRkcmVzc2VzOgorCTAgLSAoZGVmYXVsdCk6IHJlcGx5IGZvciBhbnkgbG9jYWwgdGFyZ2V0IElQIGFkZHJlc3MsIGNvbmZpZ3VyZWQKKwlvbiBhbnkgaW50ZXJmYWNlCisJMSAtIHJlcGx5IG9ubHkgaWYgdGhlIHRhcmdldCBJUCBhZGRyZXNzIGlzIGxvY2FsIGFkZHJlc3MKKwljb25maWd1cmVkIG9uIHRoZSBpbmNvbWluZyBpbnRlcmZhY2UKKwkyIC0gcmVwbHkgb25seSBpZiB0aGUgdGFyZ2V0IElQIGFkZHJlc3MgaXMgbG9jYWwgYWRkcmVzcworCWNvbmZpZ3VyZWQgb24gdGhlIGluY29taW5nIGludGVyZmFjZSBhbmQgYm90aCB3aXRoIHRoZQorCXNlbmRlcidzIElQIGFkZHJlc3MgYXJlIHBhcnQgZnJvbSBzYW1lIHN1Ym5ldCBvbiB0aGlzIGludGVyZmFjZQorCTMgLSBkbyBub3QgcmVwbHkgZm9yIGxvY2FsIGFkZHJlc3NlcyBjb25maWd1cmVkIHdpdGggc2NvcGUgaG9zdCwKKwlvbmx5IHJlc29sdXRpb25zIGZvciBnbG9iYWwgYW5kIGxpbmsgYWRkcmVzc2VzIGFyZSByZXBsaWVkCisJNC03IC0gcmVzZXJ2ZWQKKwk4IC0gZG8gbm90IHJlcGx5IGZvciBhbGwgbG9jYWwgYWRkcmVzc2VzCisKKwlUaGUgbWF4IHZhbHVlIGZyb20gY29uZi97YWxsLGludGVyZmFjZX0vYXJwX2lnbm9yZSBpcyB1c2VkCisJd2hlbiBBUlAgcmVxdWVzdCBpcyByZWNlaXZlZCBvbiB0aGUge2ludGVyZmFjZX0KKworYXBwX3NvbGljaXQgLSBJTlRFR0VSCisJVGhlIG1heGltdW0gbnVtYmVyIG9mIHByb2JlcyB0byBzZW5kIHRvIHRoZSB1c2VyIHNwYWNlIEFSUCBkYWVtb24KKwl2aWEgbmV0bGluayBiZWZvcmUgZHJvcHBpbmcgYmFjayB0byBtdWx0aWNhc3QgcHJvYmVzIChzZWUKKwltY2FzdF9zb2xpY2l0KS4gIERlZmF1bHRzIHRvIDAuCisKK2Rpc2FibGVfcG9saWN5IC0gQk9PTEVBTgorCURpc2FibGUgSVBTRUMgcG9saWN5IChTUEQpIGZvciB0aGlzIGludGVyZmFjZQorCitkaXNhYmxlX3hmcm0gLSBCT09MRUFOCisJRGlzYWJsZSBJUFNFQyBlbmNyeXB0aW9uIG9uIHRoaXMgaW50ZXJmYWNlLCB3aGF0ZXZlciB0aGUgcG9saWN5CisKKworCit0YWcgLSBJTlRFR0VSCisJQWxsb3dzIHlvdSB0byB3cml0ZSBhIG51bWJlciwgd2hpY2ggY2FuIGJlIHVzZWQgYXMgcmVxdWlyZWQuCisJRGVmYXVsdCB2YWx1ZSBpcyAwLgorCisoMSkgSmlmZmllOiBpbnRlcm5hbCB0aW1ldW5pdCBmb3IgdGhlIGtlcm5lbC4gT24gdGhlIGkzODYgMS8xMDBzLCBvbiB0aGUKK0FscGhhIDEvMTAyNHMuIFNlZSB0aGUgSFogZGVmaW5lIGluIC91c3IvaW5jbHVkZS9hc20vcGFyYW0uaCBmb3IgdGhlIGV4YWN0Cit2YWx1ZSBvbiB5b3VyIHN5c3RlbS4gCisKK0FsZXhleSBLdXpuZXRzb3YuCitrdXpuZXRAbXMyLmluci5hYy5ydQorCitVcGRhdGVkIGJ5OgorQW5kaSBLbGVlbgorYWtAbXVjLmRlCitOaWNvbGFzIERlbG9uCitkZWxvbi5uaWNvbGFzQHdhbmFkb28uZnIKKworCisKKworL3Byb2Mvc3lzL25ldC9pcHY2LyogVmFyaWFibGVzOgorCitJUHY2IGhhcyBubyBnbG9iYWwgdmFyaWFibGVzIHN1Y2ggYXMgdGNwXyouICB0Y3BfKiBzZXR0aW5ncyB1bmRlciBpcHY0LyBhbHNvCithcHBseSB0byBJUHY2IFtYWFg/XS4KKworYmluZHY2b25seSAtIEJPT0xFQU4KKwlEZWZhdWx0IHZhbHVlIGZvciBJUFY2X1Y2T05MWSBzb2NrZXQgb3B0aW9uLAorCXdoaWNoIHJlc3RyaWN0cyB1c2Ugb2YgdGhlIElQdjYgc29ja2V0IHRvIElQdjYgY29tbXVuaWNhdGlvbiAKKwlvbmx5LgorCQlUUlVFOiBkaXNhYmxlIElQdjQtbWFwcGVkIGFkZHJlc3MgZmVhdHVyZQorCQlGQUxTRTogZW5hYmxlIElQdjQtbWFwcGVkIGFkZHJlc3MgZmVhdHVyZQorCisJRGVmYXVsdDogRkFMU0UgKGFzIHNwZWNpZmllZCBpbiBSRkMyNTUzYmlzKQorCitJUHY2IEZyYWdtZW50YXRpb246CisKK2lwNmZyYWdfaGlnaF90aHJlc2ggLSBJTlRFR0VSCisJTWF4aW11bSBtZW1vcnkgdXNlZCB0byByZWFzc2VtYmxlIElQdjYgZnJhZ21lbnRzLiBXaGVuIAorCWlwNmZyYWdfaGlnaF90aHJlc2ggYnl0ZXMgb2YgbWVtb3J5IGlzIGFsbG9jYXRlZCBmb3IgdGhpcyBwdXJwb3NlLAorCXRoZSBmcmFnbWVudCBoYW5kbGVyIHdpbGwgdG9zcyBwYWNrZXRzIHVudGlsIGlwNmZyYWdfbG93X3RocmVzaAorCWlzIHJlYWNoZWQuCisJCitpcDZmcmFnX2xvd190aHJlc2ggLSBJTlRFR0VSCisJU2VlIGlwNmZyYWdfaGlnaF90aHJlc2gJCisKK2lwNmZyYWdfdGltZSAtIElOVEVHRVIKKwlUaW1lIGluIHNlY29uZHMgdG8ga2VlcCBhbiBJUHY2IGZyYWdtZW50IGluIG1lbW9yeS4KKworaXA2ZnJhZ19zZWNyZXRfaW50ZXJ2YWwgLSBJTlRFR0VSCisJUmVnZW5lcmF0aW9uIGludGVydmFsIChpbiBzZWNvbmRzKSBvZiB0aGUgaGFzaCBzZWNyZXQgKG9yIGxpZmV0aW1lIAorCWZvciB0aGUgaGFzaCBzZWNyZXQpIGZvciBJUHY2IGZyYWdtZW50cy4KKwlEZWZhdWx0OiA2MDAKKworY29uZi9kZWZhdWx0Lyo6CisJQ2hhbmdlIHRoZSBpbnRlcmZhY2Utc3BlY2lmaWMgZGVmYXVsdCBzZXR0aW5ncy4KKworCitjb25mL2FsbC8qOgorCUNoYW5nZSBhbGwgdGhlIGludGVyZmFjZS1zcGVjaWZpYyBzZXR0aW5ncy4gIAorCisJW1hYWDogIE90aGVyIHNwZWNpYWwgZmVhdHVyZXMgdGhhbiBmb3J3YXJkaW5nP10KKworY29uZi9hbGwvZm9yd2FyZGluZyAtIEJPT0xFQU4KKwlFbmFibGUgZ2xvYmFsIElQdjYgZm9yd2FyZGluZyBiZXR3ZWVuIGFsbCBpbnRlcmZhY2VzLiAgCisKKwlJUHY0IGFuZCBJUHY2IHdvcmsgZGlmZmVyZW50bHkgaGVyZTsgZS5nLiBuZXRmaWx0ZXIgbXVzdCBiZSB1c2VkIAorCXRvIGNvbnRyb2wgd2hpY2ggaW50ZXJmYWNlcyBtYXkgZm9yd2FyZCBwYWNrZXRzIGFuZCB3aGljaCBub3QuCisKKwlUaGlzIGFsc28gc2V0cyBhbGwgaW50ZXJmYWNlcycgSG9zdC9Sb3V0ZXIgc2V0dGluZyAKKwknZm9yd2FyZGluZycgdG8gdGhlIHNwZWNpZmllZCB2YWx1ZS4gIFNlZSBiZWxvdyBmb3IgZGV0YWlscy4KKworCVRoaXMgcmVmZXJyZWQgdG8gYXMgZ2xvYmFsIGZvcndhcmRpbmcuCisKK2NvbmYvaW50ZXJmYWNlLyo6CisJQ2hhbmdlIHNwZWNpYWwgc2V0dGluZ3MgcGVyIGludGVyZmFjZS4KKworCVRoZSBmdW5jdGlvbmFsIGJlaGF2aW91ciBmb3IgY2VydGFpbiBzZXR0aW5ncyBpcyBkaWZmZXJlbnQgCisJZGVwZW5kaW5nIG9uIHdoZXRoZXIgbG9jYWwgZm9yd2FyZGluZyBpcyBlbmFibGVkIG9yIG5vdC4KKworYWNjZXB0X3JhIC0gQk9PTEVBTgorCUFjY2VwdCBSb3V0ZXIgQWR2ZXJ0aXNlbWVudHM7IGF1dG9jb25maWd1cmUgdXNpbmcgdGhlbS4KKwkKKwlGdW5jdGlvbmFsIGRlZmF1bHQ6IGVuYWJsZWQgaWYgbG9jYWwgZm9yd2FyZGluZyBpcyBkaXNhYmxlZC4KKwkJCSAgICBkaXNhYmxlZCBpZiBsb2NhbCBmb3J3YXJkaW5nIGlzIGVuYWJsZWQuCisKK2FjY2VwdF9yZWRpcmVjdHMgLSBCT09MRUFOCisJQWNjZXB0IFJlZGlyZWN0cy4KKworCUZ1bmN0aW9uYWwgZGVmYXVsdDogZW5hYmxlZCBpZiBsb2NhbCBmb3J3YXJkaW5nIGlzIGRpc2FibGVkLgorCQkJICAgIGRpc2FibGVkIGlmIGxvY2FsIGZvcndhcmRpbmcgaXMgZW5hYmxlZC4KKworYXV0b2NvbmYgLSBCT09MRUFOCisJQXV0b2NvbmZpZ3VyZSBhZGRyZXNzZXMgdXNpbmcgUHJlZml4IEluZm9ybWF0aW9uIGluIFJvdXRlciAKKwlBZHZlcnRpc2VtZW50cy4KKworCUZ1bmN0aW9uYWwgZGVmYXVsdDogZW5hYmxlZCBpZiBhY2NlcHRfcmEgaXMgZW5hYmxlZC4KKwkJCSAgICBkaXNhYmxlZCBpZiBhY2NlcHRfcmEgaXMgZGlzYWJsZWQuCisKK2RhZF90cmFuc21pdHMgLSBJTlRFR0VSCisJVGhlIGFtb3VudCBvZiBEdXBsaWNhdGUgQWRkcmVzcyBEZXRlY3Rpb24gcHJvYmVzIHRvIHNlbmQuCisJRGVmYXVsdDogMQorCQorZm9yd2FyZGluZyAtIEJPT0xFQU4KKwlDb25maWd1cmUgaW50ZXJmYWNlLXNwZWNpZmljIEhvc3QvUm91dGVyIGJlaGF2aW91ci4gIAorCisJTm90ZTogSXQgaXMgcmVjb21tZW5kZWQgdG8gaGF2ZSB0aGUgc2FtZSBzZXR0aW5nIG9uIGFsbCAKKwlpbnRlcmZhY2VzOyBtaXhlZCByb3V0ZXIvaG9zdCBzY2VuYXJpb3MgYXJlIHJhdGhlciB1bmNvbW1vbi4KKworCUZBTFNFOgorCisJQnkgZGVmYXVsdCwgSG9zdCBiZWhhdmlvdXIgaXMgYXNzdW1lZC4gIFRoaXMgbWVhbnM6CisKKwkxLiBJc1JvdXRlciBmbGFnIGlzIG5vdCBzZXQgaW4gTmVpZ2hib3VyIEFkdmVydGlzZW1lbnRzLgorCTIuIFJvdXRlciBTb2xpY2l0YXRpb25zIGFyZSBiZWluZyBzZW50IHdoZW4gbmVjZXNzYXJ5LgorCTMuIElmIGFjY2VwdF9yYSBpcyBUUlVFIChkZWZhdWx0KSwgYWNjZXB0IFJvdXRlciAKKwkgICBBZHZlcnRpc2VtZW50cyAoYW5kIGRvIGF1dG9jb25maWd1cmF0aW9uKS4KKwk0LiBJZiBhY2NlcHRfcmVkaXJlY3RzIGlzIFRSVUUgKGRlZmF1bHQpLCBhY2NlcHQgUmVkaXJlY3RzLgorCisJVFJVRToKKworCUlmIGxvY2FsIGZvcndhcmRpbmcgaXMgZW5hYmxlZCwgUm91dGVyIGJlaGF2aW91ciBpcyBhc3N1bWVkLiAKKwlUaGlzIG1lYW5zIGV4YWN0bHkgdGhlIHJldmVyc2UgZnJvbSB0aGUgYWJvdmU6CisKKwkxLiBJc1JvdXRlciBmbGFnIGlzIHNldCBpbiBOZWlnaGJvdXIgQWR2ZXJ0aXNlbWVudHMuCisJMi4gUm91dGVyIFNvbGljaXRhdGlvbnMgYXJlIG5vdCBzZW50LgorCTMuIFJvdXRlciBBZHZlcnRpc2VtZW50cyBhcmUgaWdub3JlZC4KKwk0LiBSZWRpcmVjdHMgYXJlIGlnbm9yZWQuCisKKwlEZWZhdWx0OiBGQUxTRSBpZiBnbG9iYWwgZm9yd2FyZGluZyBpcyBkaXNhYmxlZCAoZGVmYXVsdCksCisJCSBvdGhlcndpc2UgVFJVRS4KKworaG9wX2xpbWl0IC0gSU5URUdFUgorCURlZmF1bHQgSG9wIExpbWl0IHRvIHNldC4KKwlEZWZhdWx0OiA2NAorCittdHUgLSBJTlRFR0VSCisJRGVmYXVsdCBNYXhpbXVtIFRyYW5zZmVyIFVuaXQKKwlEZWZhdWx0OiAxMjgwIChJUHY2IHJlcXVpcmVkIG1pbmltdW0pCisKK3JvdXRlcl9zb2xpY2l0YXRpb25fZGVsYXkgLSBJTlRFR0VSCisJTnVtYmVyIG9mIHNlY29uZHMgdG8gd2FpdCBhZnRlciBpbnRlcmZhY2UgaXMgYnJvdWdodCB1cAorCWJlZm9yZSBzZW5kaW5nIFJvdXRlciBTb2xpY2l0YXRpb25zLgorCURlZmF1bHQ6IDEKKworcm91dGVyX3NvbGljaXRhdGlvbl9pbnRlcnZhbCAtIElOVEVHRVIKKwlOdW1iZXIgb2Ygc2Vjb25kcyB0byB3YWl0IGJldHdlZW4gUm91dGVyIFNvbGljaXRhdGlvbnMuCisJRGVmYXVsdDogNAorCityb3V0ZXJfc29saWNpdGF0aW9ucyAtIElOVEVHRVIKKwlOdW1iZXIgb2YgUm91dGVyIFNvbGljaXRhdGlvbnMgdG8gc2VuZCB1bnRpbCBhc3N1bWluZyBubyAKKwlyb3V0ZXJzIGFyZSBwcmVzZW50LgorCURlZmF1bHQ6IDMKKwordXNlX3RlbXBhZGRyIC0gSU5URUdFUgorCVByZWZlcmVuY2UgZm9yIFByaXZhY3kgRXh0ZW5zaW9ucyAoUkZDMzA0MSkuCisJICA8PSAwIDogZGlzYWJsZSBQcml2YWN5IEV4dGVuc2lvbnMKKwkgID09IDEgOiBlbmFibGUgUHJpdmFjeSBFeHRlbnNpb25zLCBidXQgcHJlZmVyIHB1YmxpYworCSAgICAgICAgIGFkZHJlc3NlcyBvdmVyIHRlbXBvcmFyeSBhZGRyZXNzZXMuCisJICA+ICAxIDogZW5hYmxlIFByaXZhY3kgRXh0ZW5zaW9ucyBhbmQgcHJlZmVyIHRlbXBvcmFyeQorCSAgICAgICAgIGFkZHJlc3NlcyBvdmVyIHB1YmxpYyBhZGRyZXNzZXMuCisJRGVmYXVsdDogIDAgKGZvciBtb3N0IGRldmljZXMpCisJCSAtMSAoZm9yIHBvaW50LXRvLXBvaW50IGRldmljZXMgYW5kIGxvb3BiYWNrIGRldmljZXMpCisKK3RlbXBfdmFsaWRfbGZ0IC0gSU5URUdFUgorCXZhbGlkIGxpZmV0aW1lIChpbiBzZWNvbmRzKSBmb3IgdGVtcG9yYXJ5IGFkZHJlc3Nlcy4KKwlEZWZhdWx0OiA2MDQ4MDAgKDcgZGF5cykKKwordGVtcF9wcmVmZXJlZF9sZnQgLSBJTlRFR0VSCisJUHJlZmVycmVkIGxpZmV0aW1lIChpbiBzZWNvbmRzKSBmb3IgdGVtcG9yYXJ5IGFkZHJlc3Nlcy4KKwlEZWZhdWx0OiA4NjQwMCAoMSBkYXkpCisKK21heF9kZXN5bmNfZmFjdG9yIC0gSU5URUdFUgorCU1heGltdW0gdmFsdWUgZm9yIERFU1lOQ19GQUNUT1IsIHdoaWNoIGlzIGEgcmFuZG9tIHZhbHVlCisJdGhhdCBlbnN1cmVzIHRoYXQgY2xpZW50cyBkb24ndCBzeW5jaHJvbml6ZSB3aXRoIGVhY2ggCisJb3RoZXIgYW5kIGdlbmVyYXRlIG5ldyBhZGRyZXNzZXMgYXQgZXhhY3RseSB0aGUgc2FtZSB0aW1lLgorCXZhbHVlIGlzIGluIHNlY29uZHMuCisJRGVmYXVsdDogNjAwCisJCityZWdlbl9tYXhfcmV0cnkgLSBJTlRFR0VSCisJTnVtYmVyIG9mIGF0dGVtcHRzIGJlZm9yZSBnaXZlIHVwIGF0dGVtcHRpbmcgdG8gZ2VuZXJhdGUKKwl2YWxpZCB0ZW1wb3JhcnkgYWRkcmVzc2VzLgorCURlZmF1bHQ6IDUKKworbWF4X2FkZHJlc3NlcyAtIElOVEVHRVIKKwlOdW1iZXIgb2YgbWF4aW11bSBhZGRyZXNzZXMgcGVyIGludGVyZmFjZS4gIDAgZGlzYWJsZXMgbGltaXRhdGlvbi4KKwlJdCBpcyByZWNvbW1lbmRlZCBub3Qgc2V0IHRvbyBsYXJnZSB2YWx1ZSAob3IgMCkgYmVjYXVzZSBpdCB3b3VsZCAKKwliZSB0b28gZWFzeSB3YXkgdG8gY3Jhc2gga2VybmVsIHRvIGFsbG93IHRvIGNyZWF0ZSB0b28gbXVjaCBvZiAKKwlhdXRvY29uZmlndXJlZCBhZGRyZXNzZXMuCisJRGVmYXVsdDogMTYKKworaWNtcC8qOgorcmF0ZWxpbWl0IC0gSU5URUdFUgorCUxpbWl0IHRoZSBtYXhpbWFsIHJhdGVzIGZvciBzZW5kaW5nIElDTVB2NiBwYWNrZXRzLgorCTAgdG8gZGlzYWJsZSBhbnkgbGltaXRpbmcsIG90aGVyd2lzZSB0aGUgbWF4aW1hbCByYXRlIGluIGppZmZpZXMoMSkKKwlEZWZhdWx0OiAxMDAKKworCitJUHY2IFVwZGF0ZSBieToKK1Bla2thIFNhdm9sYSA8cGVra2FzQG5ldGNvcmUuZmk+CitZT1NISUZVSkkgSGlkZWFraSAvIFVTQUdJIFByb2plY3QgPHlvc2hmdWppQGxpbnV4LWlwdjYub3JnPgorCisKKy9wcm9jL3N5cy9uZXQvYnJpZGdlLyogVmFyaWFibGVzOgorCiticmlkZ2UtbmYtY2FsbC1hcnB0YWJsZXMgLSBCT09MRUFOCisJMSA6IHBhc3MgYnJpZGdlZCBBUlAgdHJhZmZpYyB0byBhcnB0YWJsZXMnIEZPUldBUkQgY2hhaW4uCisJMCA6IGRpc2FibGUgdGhpcy4KKwlEZWZhdWx0OiAxCisKK2JyaWRnZS1uZi1jYWxsLWlwdGFibGVzIC0gQk9PTEVBTgorCTEgOiBwYXNzIGJyaWRnZWQgSVB2NCB0cmFmZmljIHRvIGlwdGFibGVzJyBjaGFpbnMuCisJMCA6IGRpc2FibGUgdGhpcy4KKwlEZWZhdWx0OiAxCisKK2JyaWRnZS1uZi1jYWxsLWlwNnRhYmxlcyAtIEJPT0xFQU4KKwkxIDogcGFzcyBicmlkZ2VkIElQdjYgdHJhZmZpYyB0byBpcDZ0YWJsZXMnIGNoYWlucy4KKwkwIDogZGlzYWJsZSB0aGlzLgorCURlZmF1bHQ6IDEKKworYnJpZGdlLW5mLWZpbHRlci12bGFuLXRhZ2dlZCAtIEJPT0xFQU4KKwkxIDogcGFzcyBicmlkZ2VkIHZsYW4tdGFnZ2VkIEFSUC9JUCB0cmFmZmljIHRvIGFycHRhYmxlcy9pcHRhYmxlcy4KKwkwIDogZGlzYWJsZSB0aGlzLgorCURlZmF1bHQ6IDEKKworCitVTkRPQ1VNRU5URUQ6CisKK2Rldl93ZWlnaHQgRklYTUUKK2Rpc2NvdmVyeV9zbG90cyBGSVhNRQorZGlzY292ZXJ5X3RpbWVvdXQgRklYTUUKK2Zhc3RfcG9sbF9pbmNyZWFzZSBGSVhNRQoraXA2X3F1ZXVlX21heGxlbiBGSVhNRQorbGFwX2tlZXBhbGl2ZV90aW1lIEZJWE1FCitsb19jb25nIEZJWE1FCittYXhfYmF1ZF9yYXRlIEZJWE1FCittYXhfZGdyYW1fcWxlbiBGSVhNRQorbWF4X25vcmVwbHlfdGltZSBGSVhNRQorbWF4X3R4X2RhdGFfc2l6ZSBGSVhNRQorbWF4X3R4X3dpbmRvdyBGSVhNRQorbWluX3R4X3R1cm5fdGltZSBGSVhNRQorbW9kX2NvbmcgRklYTUUKK25vX2NvbmcgRklYTUUKK25vX2NvbmdfdGhyZXNoIEZJWE1FCitzbG90X3RpbWVvdXQgRklYTUUKK3dhcm5fbm9yZXBseV90aW1lIEZJWE1FCisKKyRJZDogaXAtc3lzY3RsLnR4dCx2IDEuMjAgMjAwMS8xMi8xMyAwOTowMDoxOCBkYXZlbSBFeHAgJApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2lwX2R5bmFkZHIudHh0IGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2lwX2R5bmFkZHIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ1ZjNjMTIKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvaXBfZHluYWRkci50eHQKQEAgLTAsMCArMSwyOSBAQAorSVAgZHluYW1pYyBhZGRyZXNzIGhhY2stcG9ydCB2MC4wMworfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorVGhpcyBzdHVmZiBhbGxvd3MgZGlhbGQgT05FU0hPVCBjb25uZWN0aW9ucyB0byBnZXQgZXN0YWJsaXNoZWQgYnkKK2R5bmFtaWNhbGx5IGNoYW5naW5nIHBhY2tldCBzb3VyY2UgYWRkcmVzcyAoYW5kIHNvY2tldCdzIGlmIGxvY2FsIHByb2NzKS4KK0l0IGlzIGltcGxlbWVudGVkIGZvciBUQ1AgZGlhbGQtYm94IGNvbm5lY3Rpb25zKDEpIGFuZCBJUF9NQVNRdWVyYWRpbmcoMikuCisKK0lmIGVuYWJsZWRbKl0gYW5kIGZvcndhcmRpbmcgaW50ZXJmYWNlIGhhcyBjaGFuZ2VkOgorICAxKSAgU29ja2V0IChhbmQgcGFja2V0KSBzb3VyY2UgYWRkcmVzcyBpcyByZXdyaXR0ZW4gT04gUkVUUkFOU01JU1NJT05TCisgICAgICB3aGlsZSBpbiBTWU5fU0VOVCBzdGF0ZSAoZGlhbGQtYm94IHByb2Nlc3NlcykuCisgIDIpICBPdXQtYm91bmRlZCBNQVNRdWVyYWRlZCBzb3VyY2UgYWRkcmVzcyBjaGFuZ2VzIE9OIE9VVFBVVCAod2hlbgorICAgICAgaW50ZXJuYWwgaG9zdCBkb2VzIHJldHJhbnNtaXNzaW9uKSB1bnRpbCBhIHBhY2tldCBmcm9tIG91dHNpZGUgaXMKKyAgICAgIHJlY2VpdmVkIGJ5IHRoZSB0dW5uZWwuCisKK1RoaXMgaXMgc3BlY2lhbGx5IGhlbHBmdWwgZm9yIGF1dG8gZGlhbHVwIGxpbmtzIChkaWFsZCksIHdoZXJlIHRoZQorYGBhY3R1YWwnJyBvdXRnb2luZyBhZGRyZXNzIGlzIHVua25vd24gYXQgdGhlIG1vbWVudCB0aGUgbGluayBpcworZ29pbmcgdXAuIFNvLCB0aGUgKnNhbWUqIChsb2NhbCBBTkQgbWFzcXVlcmFkZWQpIGNvbm5lY3Rpb25zIHJlcXVlc3RzIHRoYXQKK2JyaW5nIHRoZSBsaW5rIHVwIHdpbGwgYmUgYWJsZSB0byBnZXQgZXN0YWJsaXNoZWQuCisKK1sqXSBBdCBib290LCBieSBkZWZhdWx0IG5vIGFkZHJlc3MgcmV3cml0aW5nIGlzIGF0dGVtcHRlZC4gCisgIFRvIGVuYWJsZToKKyAgICAgIyBlY2hvIDEgPiAvcHJvYy9zeXMvbmV0L2lwdjQvaXBfZHluYWRkcgorICBUbyBlbmFibGUgdmVyYm9zZSBtb2RlOgorICAgICAjIGVjaG8gMiA+IC9wcm9jL3N5cy9uZXQvaXB2NC9pcF9keW5hZGRyCisgIFRvIGRpc2FibGUgKGRlZmF1bHQpCisgICAgICMgZWNobyAwID4gL3Byb2Mvc3lzL25ldC9pcHY0L2lwX2R5bmFkZHIKKworRW5qb3khCisKKy0tIEp1YW5qbyAgPGpqY2lhcmxhQHJhaXoudW5jdS5lZHUuYXI+CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvaXBkZHAudHh0IGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2lwZGRwLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NjFhNTU1Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2lwZGRwLnR4dApAQCAtMCwwICsxLDc4IEBACitUZXh0IGZpbGUgZm9yIGlwZGRwLmM6CisJQXBwbGVUYWxrLUlQIERlY2Fwc3VsYXRpb24gYW5kIEFwcGxlVGFsay1JUCBFbmNhcHN1bGF0aW9uCisKK1RoaXMgdGV4dCBmaWxlIGlzIHdyaXR0ZW4gYnkgSmF5IFNjaHVsaXN0IDxqc2NobHN0QHNhbWJhLm9yZz4KKworSW50cm9kdWN0aW9uCistLS0tLS0tLS0tLS0KKworQXBwbGVUYWxrLUlQIChJUEREUCkgaXMgdGhlIG1ldGhvZCBjb21wdXRlcnMgY29ubmVjdGVkIHRvIEFwcGxlVGFsaworbmV0d29ya3MgY2FuIHVzZSB0byBjb21tdW5pY2F0ZSB2aWEgSVAuIEFwcGxlVGFsay1JUCBpcyBzaW1wbHkgSVAgZGF0YWdyYW1zCitpbnNpZGUgQXBwbGVUYWxrIHBhY2tldHMuCisKK1Rocm91Z2ggdGhpcyBkcml2ZXIgeW91IGNhbiBlaXRoZXIgYWxsb3cgeW91ciBMaW51eCBib3ggdG8gY29tbXVuaWNhdGUKK0lQIG92ZXIgYW4gQXBwbGVUYWxrIG5ldHdvcmsgb3IgeW91IGNhbiBwcm92aWRlIElQIGdhdGV3YXlpbmcgZnVuY3Rpb25zCitmb3IgeW91ciBBcHBsZVRhbGsgdXNlcnMuCisKK1lvdSBjYW4gY3VycmVudGx5IGVuY2Fwc3VsYXRlIG9yIGRlY2Fwc3VsYXRlIEFwcGxlVGFsay1JUCBvbiBMb2NhbFRhbGssCitFdGhlclRhbGsgYW5kIFBQUFRhbGsuIFRoZSBvbmx5IGxpbWl0IG9uIHRoZSBwcm90b2NvbCBpcyB0aGF0IG9mIHdoYXQKK2tlcm5lbCBBcHBsZVRhbGsgbGF5ZXIgYW5kIGRyaXZlcnMgYXJlIGF2YWlsYWJsZS4KKworRWFjaCBtb2RlIHJlcXVpcmVzIGl0cyBvd24gdXNlciBzcGFjZSBzb2Z0d2FyZS4KKworQ29tcGlsaW5nIEFwcGxlVGFsay1JUCBEZWNhcHN1bGF0aW9uL0VuY2Fwc3VsYXRpb24KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworQXBwbGVUYWxrLUlQIGRlY2Fwc3VsYXRpb24gbmVlZHMgdG8gYmUgY29tcGlsZWQgaW50byB5b3VyIGtlcm5lbC4gWW91Cit3aWxsIG5lZWQgdG8gdHVybiBvbiBBcHBsZVRhbGstSVAgZHJpdmVyIHN1cHBvcnQuIFRoZW4geW91IHdpbGwgbmVlZCB0bworc2VsZWN0IE9ORSBvZiB0aGUgdHdvIG9wdGlvbnM7IElQIHRvIEFwcGxlVGFsay1JUCBlbmNhcHN1bGF0aW9uIHN1cHBvcnQgb3IKK0FwcGxlVGFsay1JUCB0byBJUCBkZWNhcHN1bGF0aW9uIHN1cHBvcnQuIElmIHlvdSBjb21waWxlIHRoZSBkcml2ZXIKK3N0YXRpY2FsbHkgeW91IHdpbGwgb25seSBiZSBhYmxlIHRvIHVzZSB0aGUgZHJpdmVyIGZvciB0aGUgZnVuY3Rpb24geW91IGhhdmUKK2VuYWJsZWQgaW4gdGhlIGtlcm5lbC4gSWYgeW91IGNvbXBpbGUgdGhlIGRyaXZlciBhcyBhIG1vZHVsZSB5b3UgY2FuCitzZWxlY3Qgd2hhdCBtb2RlIHlvdSB3YW50IGl0IHRvIHJ1biBpbiB2aWEgYSBtb2R1bGUgbG9hZGluZyBwYXJhbS4KK2lwZGRwX21vZGU9MSBmb3IgQXBwbGVUYWxrLUlQIGVuY2Fwc3VsYXRpb24gYW5kIGlwZGRwX21vZGU9MiBmb3IKK0FwcGxlVGFsay1JUCB0byBJUCBkZWNhcHN1bGF0aW9uLgorCitCYXNpYyBpbnN0cnVjdGlvbnMgZm9yIHVzZXIgc3BhY2UgdG9vbHMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitUbyBlbmFibGUgQXBwbGVUYWxrLUlQIGRlY2Fwc3VsYXRpb24vZW5jYXBzdWxhdGlvbiB5b3Ugd2lsbCBuZWVkIHRoZSAKK3Byb3BlciB0b29scy4gWW91IGNhbiBnZXQgdGhlIHRvb2xzIGZvciBkZWNhcHN1bGF0aW9uIGZyb20KK2h0dHA6Ly9zcGFjczEuc3BhY3MuazEyLndpLnVzL35qc2NobHN0L2luZGV4Lmh0bWwgYW5kIGZvciBlbmNhcHN1bGF0aW9uCitmcm9tIGh0dHA6Ly93d3cubWF0aHMudW5tLmVkdS9+YnJhZGZvcmQvbHRwYy5odG1sCisKK0kgd2lsbCBicmllZmx5IGRlc2NyaWJlIHRoZSBvcGVyYXRpb24gb2YgdGhlIHRvb2xzLCBidXQgeW91IHdpbGwKK25lZWQgdG8gY29uc3VsdCB0aGUgc3VwcG9ydGluZyBkb2N1bWVudGF0aW9uIGZvciBlYWNoIHNldCBvZiB0b29scy4KKworRGVjYXBzdWxhdGlvbiAtIFlvdSB3aWxsIG5lZWQgdG8gZG93bmxvYWQgYSBzb2Z0d2FyZSBwYWNrYWdlIGNhbGxlZAorTWFjR2F0ZS4gSW4gdGhpcyBkaXN0cmlidXRpb24gdGhlcmUgd2lsbCBiZSBhIHRvb2wgY2FsbGVkIE1hY1JvdXRlCit3aGljaCBlbmFibGVzIHlvdSB0byBhZGQgcm91dGVzIHRvIHRoZSBrZXJuZWwgZm9yIHlvdXIgTWFjcyBieSBoYW5kLgorQWxzbyB0aGUgdG9vbCBNYWNSZWdHYXRlV2F5IGlzIGluY2x1ZGVkIHRvIHJlZ2lzdGVyIHRoZQorcHJvcGVyIElQIEdhdGV3YXkgYW5kIElQIGFkZHJlc3NlcyBmb3IgeW91ciBtYWNoaW5lLiBJbmNsdWRlZCBpbiB0aGlzCitkaXN0cmlidXRpb24gaXMgYSBwYXRjaCB0byBuZXRhdGFsay0xLjRiMithc3VuMi4wYTE3LjIgKGF2YWlsYWJsZSBmcm9tCitmdHAudS53YXNoaW5ndG9uLmVkdS9wdWIvdXNlci1zdXBwb3J0ZWQvYXN1bi8pIHRoaXMgcGF0Y2ggaXMgb3B0aW9uYWwKK2J1dCBpdCBhbGxvd3MgYXV0b21hdGljIGFkZGluZyBhbmQgZGVsZXRpbmcgb2Ygcm91dGVzIGZvciBNYWNzLiAoSGFuZHkKK2ZvciBsb2NhdGlvbnMgd2l0aCBsYXJnZSBNYWMgaW5zdGFsbGF0aW9ucykKKworRW5jYXBzdWxhdGlvbiAtIFlvdSB3aWxsIG5lZWQgdG8gZG93bmxvYWQgYSBzb2Z0d2FyZSBkYWVtb24gY2FsbGVkIGlwZGRwZC4KK1RoaXMgc29mdHdhcmUgZXhwZWN0cyB0aGVyZSB0byBiZSBhbiBBcHBsZVRhbGstSVAgZ2F0ZXdheSBvbiB0aGUgbmV0d29yay4KK1lvdSB3aWxsIGFsc28gbmVlZCB0byBhZGQgdGhlIHByb3BlciByb3V0ZXMgdG8gcm91dGUgeW91ciBMaW51eCBib3gncyBJUAordHJhZmZpYyBvdXQgdGhlIGlwZGRwIGludGVyZmFjZS4KKworQ29tbW9uIFVzZXMgb2YgaXBkZHAuYworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorT2YgY291cnNlIEFwcGxlVGFsay1JUCBkZWNhcHN1bGF0aW9uIGFuZCBlbmNhcHN1bGF0aW9uLCBidXQgc3BlY2lmaWNhbGx5CitkZWNhcHN1bGF0aW9uIGlzIGJlaW5nIHVzZWQgbW9zdCBmb3IgY29ubmVjdGluZyBMb2NhbFRhbGsgbmV0d29ya3MgdG8KK0lQIG5ldHdvcmtzLiBBbHRob3VnaCBpdCBoYXMgYmVlbiB1c2VkIG9uIEV0aGVyVGFsayBuZXR3b3JrcyB0byBhbGxvdworTWFjcyB0aGF0IGFyZSBvbmx5IGFibGUgdG8gdHVubmVsIElQIG92ZXIgRXRoZXJUYWxrLgorCitFbmNhcHN1bGF0aW9uIGhhcyBiZWVuIHVzZWQgdG8gYWxsb3cgYSBMaW51eCBib3ggc3R1Y2sgb24gYSBMb2NhbFRhbGsKK25ldHdvcmsgdG8gdXNlIElQLiBJdCBzaG91bGQgd29yayBlcXVhbGx5IHdlbGwgaWYgeW91IGFyZSBzdHVjayBvbiBhbgorRXRoZXJUYWxrIG9ubHkgbmV0d29yay4KKworRnVydGhlciBBc3Npc3RhbmNlCistLS0tLS0tLS0tLS0tLS0tLS0tCitZb3UgY2FuIGNvbnRhY3QgbWUgKEpheSBTY2h1bGlzdCA8anNjaGxzdEBzYW1iYS5vcmc+KSB3aXRoIGFueQorcXVlc3Rpb25zIHJlZ2FyZGluZyBkZWNhcHN1bGF0aW9uIG9yIGVuY2Fwc3VsYXRpb24uIEJyYWRmb3JkIFcuIEpvaG5zb24KKzxqb2huczM5M0BtYXJvb24udGMudW1uLmVkdT4gb3JpZ2luYWxseSB3cm90ZSB0aGUgaXBkZHAuYyBkcml2ZXIgZm9yIElQCitlbmNhcHN1bGF0aW9uIGluIEFwcGxlVGFsay4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9pcGhhc2UudHh0IGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2lwaGFzZS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzljY2I4NQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9pcGhhc2UudHh0CkBAIC0wLDAgKzEsMTU4IEBACisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJFQUQgTUUgRklTUlQKKwkJICBBVE0gKGkpQ2hpcCBJQSBMaW51eCBEcml2ZXIgU291cmNlCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICAgICAgICAgICAgICAgUmVhZCBUaGlzIEJlZm9yZSBZb3UgQmVnaW4hCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitEZXNjcmlwdGlvbgorLS0tLS0tLS0tLS0KKworVGhpcyBpcyB0aGUgUkVBRE1FIGZpbGUgZm9yIHRoZSBJbnRlcnBoYXNlIFBDSSBBVE0gKGkpQ2hpcCBJQSBMaW51eCBkcml2ZXIgCitzb3VyY2UgcmVsZWFzZS4KKworVGhlIGZlYXR1cmVzIGFuZCBsaW1pdGF0aW9ucyBvZiB0aGlzIGRyaXZlciBhcmUgYXMgZm9sbG93czoKKyAgICAtIEEgc2luZ2xlIFZQSSAoVlBJIHZhbHVlIG9mIDApIGlzIHN1cHBvcnRlZC4KKyAgICAtIFN1cHBvcnRzIDRLIFZDcyBmb3IgdGhlIHNlcnZlciBib2FyZCAod2l0aCA1MTJLIGNvbnRyb2wgbWVtb3J5KSBhbmQgMUsgCisgICAgICBWQ3MgZm9yIHRoZSBjbGllbnQgYm9hcmQgKHdpdGggMTI4SyBjb250cm9sIG1lbW9yeSkuCisgICAgLSBVQlIsIEFCUiBhbmQgQ0JSIHNlcnZpY2UgY2F0ZWdvcmllcyBhcmUgc3VwcG9ydGVkLgorICAgIC0gT25seSBBQUw1IGlzIHN1cHBvcnRlZC4gCisgICAgLSBTdXBwb3J0cyBzZXR0aW5nIG9mIFBDUiBvbiB0aGUgVkNzLiAKKyAgICAtIE11bHRpcGxlIGFkYXB0ZXJzIGluIGEgc3lzdGVtIGFyZSBzdXBwb3J0ZWQuCisgICAgLSBBbGwgdmFyaWFudHMgb2YgSW50ZXJwaGFzZSBBVE0gUENJIChpKUNoaXAgYWRhcHRlciBjYXJkcyBhcmUgc3VwcG9ydGVkLCAKKyAgICAgIGluY2x1ZGluZyB4NTc1IChPQzMsIGNvbnRyb2wgbWVtb3J5IDEyOEsgLCA1MTJLIGFuZCBwYWNrZXQgbWVtb3J5IDEyOEssIAorICAgICAgNTEySyBhbmQgMU0pLCB4NTI1IChVVFAyNSkgYW5kIHg1MzEgKERTMyBhbmQgRTMpLiBTZWUgCisgICAgICAgICAgIGh0dHA6Ly93d3cuaXBoYXNlLmNvbS9wcm9kdWN0cy9DbGFzc1NoZWV0LmNmbT9DbGFzc0lEPUFUTSAKKyAgICAgIGZvciBkZXRhaWxzLgorICAgIC0gT25seSB4ODYgcGxhdGZvcm1zIGFyZSBzdXBwb3J0ZWQuCisgICAgLSBTTVAgaXMgc3VwcG9ydGVkLgorCisKK0JlZm9yZSBZb3UgU3RhcnQKKy0tLS0tLS0tLS0tLS0tLS0gCisKKworSW5zdGFsbGF0aW9uCistLS0tLS0tLS0tLS0KKworMS4gSW5zdGFsbGluZyB0aGUgYWRhcHRlcnMgaW4gdGhlIHN5c3RlbQorICAgVG8gaW5zdGFsbCB0aGUgQVRNIGFkYXB0ZXJzIGluIHRoZSBzeXN0ZW0sIGZvbGxvdyB0aGUgc3RlcHMgYmVsb3cuCisgICAgICAgYS4gTG9naW4gYXMgcm9vdC4KKyAgICAgICBiLiBTaHV0IGRvd24gdGhlIHN5c3RlbSBhbmQgcG93ZXIgb2ZmIHRoZSBzeXN0ZW0uCisgICAgICAgYy4gSW5zdGFsbCBvbmUgb3IgbW9yZSBBVE0gYWRhcHRlcnMgaW4gdGhlIHN5c3RlbS4KKyAgICAgICBkLiBDb25uZWN0IGVhY2ggYWRhcHRlciB0byBhIHBvcnQgb24gYW4gQVRNIHN3aXRjaC4gVGhlIGdyZWVuICdMaW5rJyAKKyAgICAgICAgICBMRUQgb24gdGhlIGZyb250IHBhbmVsIG9mIHRoZSBhZGFwdGVyIHdpbGwgYmUgb24gaWYgdGhlIGFkYXB0ZXIgaXMgCisgICAgICAgICAgY29ubmVjdGVkIHRvIHRoZSBzd2l0Y2ggcHJvcGVybHkgd2hlbiB0aGUgc3lzdGVtIGlzIHBvd2VyZWQgdXAuCisgICAgICAgZS4gUG93ZXIgb24gYW5kIGJvb3QgdGhlIHN5c3RlbS4KKworMi4gWyBSZW1vdmVkIF0KKworMy4gUmVidWlsZCBrZXJuZWwgd2l0aCBBQlIgc3VwcG9ydAorICAgWyBhLiBhbmQgYi4gcmVtb3ZlZCBdCisgICAgYy4gUmVjb25maWd1cmUgdGhlIGtlcm5lbCwgY2hvb3NlIHRoZSBJbnRlcnBoYXNlIGlhIGRyaXZlciB0aHJvdWdoICJtYWtlIAorICAgICAgIG1lbnVjb25maWciIG9yICJtYWtlIHhjb25maWciLgorICAgIGQuIFJlYnVpbGQgdGhlIGtlcm5lbCwgbG9hZGFibGUgbW9kdWxlcyBhbmQgdGhlIGF0bSB0b29scy4gCisgICAgZS4gSW5zdGFsbCB0aGUgbmV3IGJ1aWx0IGtlcm5lbCBhbmQgbW9kdWxlcyBhbmQgcmVib290LgorCis0LiBMb2FkIHRoZSBhZGFwdGVyIGhhcmR3YXJlIGRyaXZlciAoaWEgZHJpdmVyKSBpZiBpdCBpcyBidWlsdCBhcyBhIG1vZHVsZQorICAgICAgIGEuIExvZ2luIGFzIHJvb3QuCisgICAgICAgYi4gQ2hhbmdlIGRpcmVjdG9yeSB0byAvbGliL21vZHVsZXMvPGtlcm5lbC12ZXJzaW9uPi9hdG0uCisgICAgICAgYy4gUnVuICJpbnNtb2Qgc3VuaS5vO2luc21vZCBpcGhhc2UubyIKKwkgIFRoZSB5ZWxsb3cgJ3N0YXR1cycgTEVEIG9uIHRoZSBmcm9udCBwYW5lbCBvZiB0aGUgYWRhcHRlciB3aWxsIGJsaW5rIAorICAgICAgICAgIHdoaWxlIHRoZSBkcml2ZXIgaXMgbG9hZGVkIGluIHRoZSBzeXN0ZW0uCisgICAgICAgZC4gVG8gdmVyaWZ5IHRoYXQgdGhlICdpYScgZHJpdmVyIGlzIGxvYWRlZCBzdWNjZXNzZnVsbHksIHJ1biB0aGUgCisgICAgICAgICAgZm9sbG93aW5nIGNvbW1hbmQ6CisKKyAgICAgICAgICAgICAgY2F0IC9wcm9jL2F0bS9kZXZpY2VzCisKKyAgICAgICAgICBJZiB0aGUgZHJpdmVyIGlzIGxvYWRlZCBzdWNjZXNzZnVsbHksIHRoZSBvdXRwdXQgb2YgdGhlIGNvbW1hbmQgd2lsbCAKKyAgICAgICAgICBiZSBzaW1pbGFyIHRvIHRoZSBmb2xsb3dpbmcgbGluZXM6CisKKyAgICAgICAgICAgICAgSXRmIFR5cGUgICAgRVNJLyJNQUMiYWRkciBBQUwoVFgsZXJyLFJYLGVycixkcm9wKSAuLi4KKyAgICAgICAgICAgICAgMCAgIGlhICAgICAgeHh4eHh4eHh4ICAwICggMCAwIDAgMCAwICkgIDUgKCAwIDAgMCAwIDAgKQorCisgICAgICAgICAgWW91IGNhbiBhbHNvIGNoZWNrIHRoZSBzeXN0ZW0gbG9nIGZpbGUgL3Zhci9sb2cvbWVzc2FnZXMgZm9yIG1lc3NhZ2VzCisgICAgICAgICAgcmVsYXRlZCB0byB0aGUgQVRNIGRyaXZlci4KKworNS4gSWEgRHJpdmVyIENvbmZpZ3VyYXRpb24gCisKKzUuMSBDb25maWd1cmF0aW9uIG9mIGFkYXB0ZXIgYnVmZmVycworICAgIFRoZSAoaSlDaGlwIGJvYXJkcyBoYXZlIDMgZGlmZmVyZW50IHBhY2tldCBSQU0gc2l6ZSB2YXJpYW50czogMTI4SywgNTEySyBhbmQKKyAgICAxTS4gVGhlIFJBTSBzaXplIGRlY2lkZXMgdGhlIG51bWJlciBvZiBidWZmZXJzIGFuZCBidWZmZXIgc2l6ZS4gVGhlIGRlZmF1bHQgCisgICAgc2l6ZSBhbmQgbnVtYmVyIG9mIGJ1ZmZlcnMgYXJlIHNldCBhcyBmb2xsb3dpbmc6IAorCisgICAgICAgICAgVG90b2wgICAgUnggUkFNICAgVHggUkFNICAgUnggQnVmICAgVHggQnVmICAgUnggYnVmICAgVHggYnVmCisgICAgICAgICBSQU0gc2l6ZSAgIHNpemUgICAgIHNpemUgICAgIHNpemUgICAgIHNpemUgICAgICBjbnQgICAgICBjbnQKKyAgICAgICAgIC0tLS0tLS0tICAtLS0tLS0gICAtLS0tLS0gICAtLS0tLS0gICAtLS0tLS0gICAtLS0tLS0gICAtLS0tLS0KKyAgICAgICAgICAgMTI4SyAgICAgIDY0SyAgICAgIDY0SyAgICAgIDEwSyAgICAgIDEwSyAgICAgICA2ICAgICAgICA2CisgICAgICAgICAgIDUxMksgICAgIDI1NksgICAgIDI1NksgICAgICAxMEsgICAgICAxMEsgICAgICAyNSAgICAgICAyNQorICAgICAgICAgICAgIDFNICAgICA1MTJLICAgICA1MTJLICAgICAgMTBLICAgICAgMTBLICAgICAgNTEgICAgICAgNTEKKworICAgICAgIFRoZXNlIHNldHRpbmcgc2hvdWxkIHdvcmsgd2VsbCBpbiBtb3N0IGVudmlyb25tZW50cywgYnV0IGNhbiBiZQorICAgICAgIGNoYW5nZWQgYnkgdHlwaW5nIHRoZSBmb2xsb3dpbmcgY29tbWFuZDogCisgCisgICAgICAgICAgIGluc21vZCA8SUFfRElSPi9pYS5vIElBX1JYX0JVRj08UlhfQ05UPiBJQV9SWF9CVUZfU1o9PFJYX1NJWkU+IFwKKyAgICAgICAgICAgICAgICAgICBJQV9UWF9CVUY9PFRYX0NOVD4gSUFfVFhfQlVGX1NaPTxUWF9TSVpFPiAKKyAgICAgICBXaGVyZToKKyAgICAgICAgICAgIFJYX0NOVCA9IG51bWJlciBvZiByZWNlaXZlIGJ1ZmZlcnMgaW4gdGhlIHJhbmdlICgxLTEyOCkKKyAgICAgICAgICAgIFJYX1NJWkUgPSBzaXplIG9mIHJlY2VpdmUgYnVmZmVycyBpbiB0aGUgcmFuZ2UgKDQ4LTY0SykKKyAgICAgICAgICAgIFRYX0NOVCA9IG51bWJlciBvZiB0cmFuc21pdCBidWZmZXJzIGluIHRoZSByYW5nZSAoMS0xMjgpCisgICAgICAgICAgICBUWF9TSVpFID0gc2l6ZSBvZiB0cmFuc21pdCBidWZmZXJzIGluIHRoZSByYW5nZSAoNDgtNjRLKQorCisgICAgICAgICAgICAxLiBUcmFuc21pdCBhbmQgcmVjZWl2ZSBidWZmZXIgc2l6ZSBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgNC4KKyAgICAgICAgICAgIDIuIENhcmUgc2hvdWxkIGJlIHRha2VuIHNvIHRoYXQgdGhlIG1lbW9yeSByZXF1aXJlZCBmb3IgdGhlCisgICAgICAgICAgICAgICB0cmFuc21pdCBhbmQgcmVjZWl2ZSBidWZmZXJzIGlzIGxlc3MgdGhhbiBvciBlcXVhbCB0byB0aGUKKyAgICAgICAgICAgICAgIHRvdGFsIGFkYXB0ZXIgcGFja2V0IG1lbW9yeS4gICAKKworNS4yIFR1cm4gb24gaWEgZGVidWcgdHJhY2UKKworICAgIFdoZW4gdGhlIGlhIGRyaXZlciBpcyBidWlsdCB3aXRoIHRoZSBDT05GSUdfQVRNX0lBX0RFQlVHIGZsYWcsIHRoZSBkcml2ZXIgCisgICAgY2FuIHByb3ZpZGUgbW9yZSBkZWJ1ZyB0cmFjZSBpZiBuZWVkZWQuIFRoZXJlIGlzIGEgYml0IG1hc2sgdmFyaWFibGUsIAorICAgIElBRGVidWdGbGFnLCB3aGljaCBjb250cm9scyB0aGUgb3V0cHV0IG9mIHRoZSB0cmFjZXMuIFlvdSBjYW4gZmluZCB0aGUgYml0IAorICAgIG1hcCBvZiB0aGUgSUFEZWJ1Z0ZsYWcgaW4gaXBoYXNlLmguIAorICAgIFRoZSBkZWJ1ZyB0cmFjZSBjYW4gYmUgdHVybiBvbiB0aHJvdWdoIHRoZSBpbnNtb2QgY29tbWFuZCBsaW5lIG9wdGlvbiwgZm9yIAorICAgIGV4YW1wbGUsICJpbnNtb2QgaXBoYXNlLm8gSUFEZWJ1Z0ZsYWc9MHhmZmZmZmZmZiIgY2FuIHR1cm4gb24gYWxsIHRoZSBkZWJ1ZyAKKyAgICB0cmFjZXMgdG9nZXRoZXIgd2l0aCBsb2FkaW5nIHRoZSBkcml2ZXIuCisKKzYuIElhIERyaXZlciBUZXN0IFVzaW5nIHR0Y3BfYXRtIGFuZCBQVkMKKworICAgRm9yIHRoZSBQVkMgc2V0dXAsIHRoZSB0ZXN0IG1hY2hpbmVzIGNhbiBlaXRoZXIgYmUgY29ubmVjdGVkIGJhY2stdG8tYmFjayBvciAKKyAgIHRocm91Z2ggYSBzd2l0Y2guIElmIGNvbm5lY3RlZCB0aHJvdWdoIHRoZSBzd2l0Y2gsIHRoZSBzd2l0Y2ggbXVzdCBiZSAKKyAgIGNvbmZpZ3VyZWQgZm9yIHRoZSBQVkMocykuCisKKyAgIGEuIEZvciBVQlIgdGVzdDoKKyAgICAgIEF0IHRoZSB0ZXN0IG1hY2hpbmUgaW50ZW5kZWQgdG8gcmVjZWl2ZSBkYXRhLCB0eXBlOgorICAgICAgICAgdHRjcF9hdG0gLXIgLWEgLXMgMC4xMDAgCisgICAgICBBdCB0aGUgb3RoZXIgdGVzdCBtYWNoaW5lLCB0eXBlOgorICAgICAgICAgdHRjcF9hdG0gLXQgLWEgLXMgMC4xMDAgLW4gMTAwMDAKKyAgICAgIFJ1biAidHRjcF9hdG0gLWgiIHRvIGRpc3BsYXkgbW9yZSBvcHRpb25zIG9mIHRoZSB0dGNwX2F0bSB0b29sLgorICAgYi4gRm9yIEFCUiB0ZXN0OgorICAgICAgSXQgaXMgdGhlIHNhbWUgYXMgdGhlIFVCUiB0ZXN0aW5nLCBidXQgd2l0aCBhbiBleHRyYSBjb21tYW5kIG9wdGlvbjoKKyAgICAgICAgIC1QYWJyOm1heF9wY3I9PHh4eD4KKyAgICAgICAgIHdoZXJlOgorICAgICAgICAgICAgIHh4eCA9IHRoZSBtYXhpbXVtIHBlYWsgY2VsbCByYXRlLCBmcm9tIDE3MCAtIDM1MzIwNy4KKyAgICAgICAgIFRoaXMgb3B0aW9uIG11c3QgYmUgc2V0IG9uIGJvdGggdGhlIG1hY2hpbmVzLgorICAgYy4gRm9yIENCUiB0ZXN0OgorICAgICAgSXQgaXMgdGhlIHNhbWUgYXMgdGhlIFVCUiB0ZXN0aW5nLCBidXQgd2l0aCBhbiBleHRyYSBjb21tYW5kIG9wdGlvbjoKKyAgICAgICAgIC1QY2JyOm1heF9wY3I9PHh4eD4KKyAgICAgICAgIHdoZXJlOgorICAgICAgICAgICAgIHh4eCA9IHRoZSBtYXhpbXVtIHBlYWsgY2VsbCByYXRlLCBmcm9tIDE3MCAtIDM1MzIwNy4KKyAgICAgICAgIFRoaXMgb3B0aW9uIG1heSBvbmx5IGJlIHNldCBvbiB0aGUgdHJhbnNtaXQgbWFjaGluZS4KKworCitPVVRTVEFORElORyBJU1NVRVMKKy0tLS0tLS0tLS0tLS0tLS0tLQorCisKKworQ29udGFjdCBJbmZvcm1hdGlvbgorLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAgIEN1c3RvbWVyIFN1cHBvcnQ6CisgICAgICAgICBVbml0ZWQgU3RhdGVzOglUZWxlcGhvbmU6CSgyMTQpIDY1NC01NTU1CisgICAgIAkJCUZheDoJCSgyMTQpIDY1NC01NTAwCisJCQlFLU1haWw6CQlpbnRvdWNoQGlwaGFzZS5jb20KKwkgRXVyb3BlOglUZWxlcGhvbmU6CTMzICgwKTEgNDEgMTUgNDQgMDAKKwkJCUZheDoJCTMzICgwKTEgNDEgMTUgMTIgMTMKKyAgICAgV29ybGQgV2lkZSBXZWI6CWh0dHA6Ly93d3cuaXBoYXNlLmNvbQorICAgICBBbm9ueW1vdXMgRlRQOglmdHAuaXBoYXNlLmNvbQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2lyZGEudHh0IGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2lyZGEudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjllNWI4ZTYKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvaXJkYS50eHQKQEAgLTAsMCArMSwxNCBAQAorVG8gdXNlIHRoZSBJckRBIHByb3RvY29scyB3aXRoaW4gTGludXggeW91IHdpbGwgbmVlZCB0byBnZXQgYSBzdWl0YWJsZSBjb3B5CitvZiB0aGUgSXJEQSBVdGlsaXRpZXMuIE1vcmUgZGV0YWlsZWQgaW5mb3JtYXRpb24gYWJvdXQgdGhlc2UgYW5kIGFzc29jaWF0ZWQKK3Byb2dyYW1zIGNhbiBiZSBmb3VuZCBvbiBodHRwOi8vaXJkYS5zb3VyY2Vmb3JnZS5uZXQvCisKK0ZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IGhvdyB0byB1c2UgdGhlIElyREEgcHJvdG9jb2wgc3RhY2ssIHNlZSB0aGUKK0xpbnV4IEluZmFyZWQgSE9XVE8gKGh0dHA6Ly93d3cudHV4bW9iaWwub3JnL0luZnJhcmVkLUhPV1RPL0luZnJhcmVkLUhPV1RPLmh0bWwpCitieSBXZXJuZXIgSGV1c2VyIDx3ZWhlQHR1eG1vYmlsLm9yZz4KKworVGhlcmUgaXMgYW4gYWN0aXZlIG1haWxpbmcgbGlzdCBmb3IgZGlzY3Vzc2luZyBMaW51eC1JckRBIG1hdHRlcnMgY2FsbGVkCisgICAgaXJkYS11c2Vyc0BsaXN0cy5zb3VyY2Vmb3JnZS5uZXQKKworCisKKwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2l4Z2IudHh0IGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2l4Z2IudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdjOTgyNzcKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvaXhnYi50eHQKQEAgLTAsMCArMSwyMTIgQEAKK0xpbnV4KiBCYXNlIERyaXZlciBmb3IgdGhlIEludGVsKFIpIFBSTy8xMEdiRSBGYW1pbHkgb2YgQWRhcHRlcnMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworTm92ZW1iZXIgMTcsIDIwMDQKKworCitDb250ZW50cworPT09PT09PT0KKworLSBJbiBUaGlzIFJlbGVhc2UKKy0gSWRlbnRpZnlpbmcgWW91ciBBZGFwdGVyCistIENvbW1hbmQgTGluZSBQYXJhbWV0ZXJzCistIEltcHJvdmluZyBQZXJmb3JtYW5jZQorLSBTdXBwb3J0CisKKworSW4gVGhpcyBSZWxlYXNlCis9PT09PT09PT09PT09PT0KKworVGhpcyBmaWxlIGRlc2NyaWJlcyB0aGUgTGludXgqIEJhc2UgRHJpdmVyIGZvciB0aGUgSW50ZWwoUikgUFJPLzEwR2JFIEZhbWlseSAKK29mIEFkYXB0ZXJzLCB2ZXJzaW9uIDEuMC54LiAgCisKK0ZvciBxdWVzdGlvbnMgcmVsYXRlZCB0byBoYXJkd2FyZSByZXF1aXJlbWVudHMsIHJlZmVyIHRvIHRoZSBkb2N1bWVudGF0aW9uIAorc3VwcGxpZWQgd2l0aCB5b3VyIEludGVsIFBSTy8xMEdiRSBhZGFwdGVyLiBBbGwgaGFyZHdhcmUgcmVxdWlyZW1lbnRzIGxpc3RlZCAKK2FwcGx5IHRvIHVzZSB3aXRoIExpbnV4LgorCitJZGVudGlmeWluZyBZb3VyIEFkYXB0ZXIKKz09PT09PT09PT09PT09PT09PT09PT09PQorCitUbyB2ZXJpZnkgeW91ciBJbnRlbCBhZGFwdGVyIGlzIHN1cHBvcnRlZCwgZmluZCB0aGUgYm9hcmQgSUQgbnVtYmVyIG9uIHRoZSAKK2FkYXB0ZXIuIExvb2sgZm9yIGEgbGFiZWwgdGhhdCBoYXMgYSBiYXJjb2RlIGFuZCBhIG51bWJlciBpbiB0aGUgZm9ybWF0ICAKK0ExMjM0NS0wMDEuIAorCitVc2UgdGhlIGFib3ZlIGluZm9ybWF0aW9uIGFuZCB0aGUgQWRhcHRlciAmIERyaXZlciBJRCBHdWlkZSBhdDoKKworICBodHRwOi8vc3VwcG9ydC5pbnRlbC5jb20vc3VwcG9ydC9uZXR3b3JrL2FkYXB0ZXIvcHJvMTAwLzIxMzk3Lmh0bQorCitGb3IgdGhlIGxhdGVzdCBJbnRlbCBuZXR3b3JrIGRyaXZlcnMgZm9yIExpbnV4LCBnbyB0bzoKKworICAgIGh0dHA6Ly9kb3dubG9hZGZpbmRlci5pbnRlbC5jb20vc2NyaXB0cy1kZi9zdXBwb3J0X2ludGVsLmFzcAorCitDb21tYW5kIExpbmUgUGFyYW1ldGVycworPT09PT09PT09PT09PT09PT09PT09PT0KKworSWYgdGhlIGRyaXZlciBpcyBidWlsdCBhcyBhIG1vZHVsZSwgdGhlICBmb2xsb3dpbmcgb3B0aW9uYWwgcGFyYW1ldGVycyBhcmUgCit1c2VkIGJ5IGVudGVyaW5nIHRoZW0gb24gdGhlIGNvbW1hbmQgbGluZSB3aXRoIHRoZSBtb2Rwcm9iZSBvciBpbnNtb2QgY29tbWFuZAordXNpbmcgdGhpcyBzeW50YXg6CisKKyAgICAgbW9kcHJvYmUgaXhnYiBbPG9wdGlvbj49PFZBTDE+LDxWQUwyPiwuLi5dCisKKyAgICAgaW5zbW9kIGl4Z2IgWzxvcHRpb24+PTxWQUwxPiw8VkFMMj4sLi4uXQorCitGb3IgZXhhbXBsZSwgd2l0aCB0d28gUFJPLzEwR2JFIFBDSSBhZGFwdGVycywgZW50ZXJpbmc6CisKKyAgICBpbnNtb2QgaXhnYiBUeERlc2NyaXB0b3JzPTgwLDEyOAorCitsb2FkcyB0aGUgaXhnYiBkcml2ZXIgd2l0aCA4MCBUWCByZXNvdXJjZXMgZm9yIHRoZSBmaXJzdCBhZGFwdGVyIGFuZCAxMjggVFggCityZXNvdXJjZXMgZm9yIHRoZSBzZWNvbmQgYWRhcHRlci4KKworVGhlIGRlZmF1bHQgdmFsdWUgZm9yIGVhY2ggcGFyYW1ldGVyIGlzIGdlbmVyYWxseSB0aGUgcmVjb21tZW5kZWQgc2V0dGluZywKK3VubGVzcyBvdGhlcndpc2Ugbm90ZWQuIEFsc28sIGlmIHRoZSBkcml2ZXIgaXMgc3RhdGljYWxseSBidWlsdCBpbnRvIHRoZQora2VybmVsLCB0aGUgZHJpdmVyIGlzIGxvYWRlZCB3aXRoIHRoZSBkZWZhdWx0IHZhbHVlcyBmb3IgYWxsIHRoZSBwYXJhbWV0ZXJzLgorRXRodG9vbCBjYW4gYmUgdXNlZCB0byBjaGFuZ2Ugc29tZSBvZiB0aGUgcGFyYW1ldGVycyBhdCBydW50aW1lLgorCitGbG93Q29udHJvbAorVmFsaWQgUmFuZ2U6IDAtMyAoMD1ub25lLCAxPVJ4IG9ubHksIDI9VHggb25seSwgMz1SeCZUeCkKK0RlZmF1bHQ6IFJlYWQgZnJvbSB0aGUgRUVQUk9NCisgICAgICAgICBJZiBFRVBST00gaXMgbm90IGRldGVjdGVkLCBkZWZhdWx0IGlzIDMKKyAgICBUaGlzIHBhcmFtZXRlciBjb250cm9scyB0aGUgYXV0b21hdGljIGdlbmVyYXRpb24oVHgpIGFuZCByZXNwb25zZShSeCkgdG8gCisgICAgRXRoZXJuZXQgUEFVU0UgZnJhbWVzLgorCitSeERlc2NyaXB0b3JzCitWYWxpZCBSYW5nZTogNjQtNTEyCitEZWZhdWx0IFZhbHVlOiA1MTIKKyAgICBUaGlzIHZhbHVlIGlzIHRoZSBudW1iZXIgb2YgcmVjZWl2ZSBkZXNjcmlwdG9ycyBhbGxvY2F0ZWQgYnkgdGhlIGRyaXZlci4gCisgICAgSW5jcmVhc2luZyB0aGlzIHZhbHVlIGFsbG93cyB0aGUgZHJpdmVyIHRvIGJ1ZmZlciBtb3JlIGluY29taW5nIHBhY2tldHMuIAorICAgIEVhY2ggZGVzY3JpcHRvciBpcyAxNiBieXRlcy4gIEEgcmVjZWl2ZSBidWZmZXIgaXMgYWxzbyBhbGxvY2F0ZWQgZm9yIAorICAgIGVhY2ggZGVzY3JpcHRvciBhbmQgY2FuIGJlIGVpdGhlciAyMDQ4LCA0MDU2LCA4MTkyLCBvciAxNjM4NCBieXRlcywgCisgICAgZGVwZW5kaW5nIG9uIHRoZSBNVFUgc2V0dGluZy4gV2hlbiB0aGUgTVRVIHNpemUgaXMgMTUwMCBvciBsZXNzLCB0aGUgCisgICAgcmVjZWl2ZSBidWZmZXIgc2l6ZSBpcyAyMDQ4IGJ5dGVzLiBXaGVuIHRoZSBNVFUgaXMgZ3JlYXRlciB0aGFuIDE1MDAgdGhlCisgICAgcmVjZWl2ZSBidWZmZXIgc2l6ZSB3aWxsIGJlIGVpdGhlciA0MDU2LCA4MTkyLCBvciAxNjM4NCBieXRlcy4gVGhlIAorICAgIG1heGltdW0gTVRVIHNpemUgaXMgMTYxMTQuCisKK1J4SW50RGVsYXkKK1ZhbGlkIFJhbmdlOiAwLTY1NTM1ICgwPW9mZikKK0RlZmF1bHQgVmFsdWU6IDYKKyAgICBUaGlzIHZhbHVlIGRlbGF5cyB0aGUgZ2VuZXJhdGlvbiBvZiByZWNlaXZlIGludGVycnVwdHMgaW4gdW5pdHMgb2YgCisgICAgMC44MTkyIG1pY3Jvc2Vjb25kcy4gIFJlY2VpdmUgaW50ZXJydXB0IHJlZHVjdGlvbiBjYW4gaW1wcm92ZSBDUFUgCisgICAgZWZmaWNpZW5jeSBpZiBwcm9wZXJseSB0dW5lZCBmb3Igc3BlY2lmaWMgbmV0d29yayB0cmFmZmljLiBJbmNyZWFzaW5nIAorICAgIHRoaXMgdmFsdWUgYWRkcyBleHRyYSBsYXRlbmN5IHRvIGZyYW1lIHJlY2VwdGlvbiBhbmQgY2FuIGVuZCB1cCAKKyAgICBkZWNyZWFzaW5nIHRoZSB0aHJvdWdocHV0IG9mIFRDUCB0cmFmZmljLiBJZiB0aGUgc3lzdGVtIGlzIHJlcG9ydGluZyAKKyAgICBkcm9wcGVkIHJlY2VpdmVzLCB0aGlzIHZhbHVlIG1heSBiZSBzZXQgdG9vIGhpZ2gsIGNhdXNpbmcgdGhlIGRyaXZlciB0byAKKyAgICBydW4gb3V0IG9mIGF2YWlsYWJsZSByZWNlaXZlIGRlc2NyaXB0b3JzLgorCitUeERlc2NyaXB0b3JzCitWYWxpZCBSYW5nZTogNjQtNDA5NgorRGVmYXVsdCBWYWx1ZTogMjU2CisgICAgVGhpcyB2YWx1ZSBpcyB0aGUgbnVtYmVyIG9mIHRyYW5zbWl0IGRlc2NyaXB0b3JzIGFsbG9jYXRlZCBieSB0aGUgZHJpdmVyLgorICAgIEluY3JlYXNpbmcgdGhpcyB2YWx1ZSBhbGxvd3MgdGhlIGRyaXZlciB0byBxdWV1ZSBtb3JlIHRyYW5zbWl0cy4gRWFjaCAKKyAgICBkZXNjcmlwdG9yIGlzIDE2IGJ5dGVzLgorCitYc3VtUlgKK1ZhbGlkIFJhbmdlOiAwLTEKK0RlZmF1bHQgVmFsdWU6IDEKKyAgICBBIHZhbHVlIG9mICcxJyBpbmRpY2F0ZXMgdGhhdCB0aGUgZHJpdmVyIHNob3VsZCBlbmFibGUgSVAgY2hlY2tzdW0KKyAgICBvZmZsb2FkIGZvciByZWNlaXZlZCBwYWNrZXRzIChib3RoIFVEUCBhbmQgVENQKSB0byB0aGUgYWRhcHRlciBoYXJkd2FyZS4KKworWHN1bVRYCitWYWxpZCBSYW5nZTogMC0xCitEZWZhdWx0IFZhbHVlOiAxCisgICAgQSB2YWx1ZSBvZiAnMScgaW5kaWNhdGVzIHRoYXQgdGhlIGRyaXZlciBzaG91bGQgZW5hYmxlIElQIGNoZWNrc3VtCisgICAgb2ZmbG9hZCBmb3IgdHJhbnNtaXR0ZWQgcGFja2V0cyAoYm90aCBVRFAgYW5kIFRDUCkgdG8gdGhlIGFkYXB0ZXIgCisgICAgaGFyZHdhcmUuCisKK0ltcHJvdmluZyBQZXJmb3JtYW5jZQorPT09PT09PT09PT09PT09PT09PT09CisKK1dpdGggdGhlIEludGVsIFBSTy8xMCBHYkUgYWRhcHRlciwgdGhlIGRlZmF1bHQgTGludXggY29uZmlndXJhdGlvbiB3aWxsIHZlcnkgCitsaWtlbHkgbGltaXQgdGhlIHRvdGFsIGF2YWlsYWJsZSB0aHJvdWdocHV0IGFydGlmaWNpYWxseS4gIFRoZXJlIGlzIGEgc2V0IG9mIAordGhpbmdzIHRoYXQgd2hlbiBhcHBsaWVkIHRvZ2V0aGVyIGluY3JlYXNlIHRoZSBhYmlsaXR5IG9mIExpbnV4IHRvIHRyYW5zbWl0IAorYW5kIHJlY2VpdmUgZGF0YS4gIFRoZSBmb2xsb3dpbmcgZW5oYW5jZW1lbnRzIHdlcmUgb3JpZ2luYWxseSBhY3F1aXJlZCBmcm9tCitzZXR0aW5ncyBwdWJsaXNoZWQgYXQgaHR0cDovL3d3dy5zcGVjLm9yZy93ZWI5OSBmb3IgdmFyaW91cyBzdWJtaXR0ZWQgcmVzdWx0cyAKK3VzaW5nIExpbnV4LgorCitOT1RFOiBUaGVzZSBjaGFuZ2VzIGFyZSBvbmx5IHN1Z2dlc3Rpb25zLCBhbmQgc2VydmUgYXMgYSBzdGFydGluZyBwb2ludCBmb3IgCit0dW5pbmcgeW91ciBuZXR3b3JrIHBlcmZvcm1hbmNlLgorCitUaGUgY2hhbmdlcyBhcmUgbWFkZSBpbiB0aHJlZSBtYWpvciB3YXlzLCBsaXN0ZWQgaW4gb3JkZXIgb2YgZ3JlYXRlc3QgZWZmZWN0OgorLSBVc2UgaWZjb25maWcgdG8gbW9kaWZ5IHRoZSBtdHUgKG1heGltdW0gdHJhbnNtaXNzaW9uIHVuaXQpIGFuZCB0aGUgdHhxdWV1ZWxlbiAKKyAgcGFyYW1ldGVyLgorLSBVc2Ugc3lzY3RsIHRvIG1vZGlmeSAvcHJvYyBwYXJhbWV0ZXJzIChlc3NlbnRpYWxseSBrZXJuZWwgdHVuaW5nKQorLSBVc2Ugc2V0cGNpIHRvIG1vZGlmeSB0aGUgTU1SQkMgZmllbGQgaW4gUENJLVggY29uZmlndXJhdGlvbiBzcGFjZSB0byBpbmNyZWFzZSAKKyAgdHJhbnNtaXQgYnVyc3QgbGVuZ3RocyBvbiB0aGUgYnVzLgorCitOT1RFOiBzZXRwY2kgbW9kaWZpZXMgdGhlIGFkYXB0ZXIncyBjb25maWd1cmF0aW9uIHJlZ2lzdGVycyB0byBhbGxvdyBpdCB0byByZWFkIAordXAgdG8gNGsgYnl0ZXMgYXQgYSB0aW1lIChmb3IgdHJhbnNtaXRzKS4gIEhvd2V2ZXIsIGZvciBzb21lIHN5c3RlbXMgdGhlIAorYmVoYXZpb3IgYWZ0ZXIgbW9kaWZ5aW5nIHRoaXMgcmVnaXN0ZXIgbWF5IGJlIHVuZGVmaW5lZCAocG9zc2libHkgZXJyb3JzIG9mIHNvbWUgCitraW5kKS4gQSBwb3dlci1jeWNsZSwgaGFyZCByZXNldCBvciBleHBsaWNpdGx5IHNldHRpbmcgdGhlIGU2IHJlZ2lzdGVyIGJhY2sgdG8gCisyMiAoc2V0cGNpIC1kIDgwODY6MTA0OCBlNi5iPTIyKSBtYXkgYmUgcmVxdWlyZWQgdG8gZ2V0IGJhY2sgdG8gYSBzdGFibGUgCitjb25maWd1cmF0aW9uLgorCistIENPUFkgdGhlc2UgbGluZXMgYW5kIHBhc3RlIHRoZW0gaW50byBpeGdiX3BlcmYuc2g6CisjIS9iaW4vYmFzaAorZWNobyAiY29uZmlndXJpbmcgbmV0d29yayBwZXJmb3JtYW5jZSAsIGVkaXQgdGhpcyBmaWxlIHRvIGNoYW5nZSB0aGUgaW50ZXJmYWNlIgorIyBzZXQgbW1yYmMgdG8gNGsgcmVhZHMsIG1vZGlmeSBvbmx5IEludGVsIDEwR2JFIGRldmljZSBJRHMKK3NldHBjaSAtZCA4MDg2OjEwNDggZTYuYj0yZQorIyBzZXQgdGhlIE1UVSAobWF4IHRyYW5zbWlzc2lvbiB1bml0KSAtIGl0IHJlcXVpcmVzIHlvdXIgc3dpdGNoIGFuZCBjbGllbnRzIHRvIGNoYW5nZSB0b28hCisjIHNldCB0aGUgdHhxdWV1ZWxlbgorIyB5b3VyIGl4Z2IgYWRhcHRlciBzaG91bGQgYmUgbG9hZGVkIGFzIGV0aDEgZm9yIHRoaXMgdG8gd29yaywgY2hhbmdlIGlmIG5lZWRlZAoraWZjb25maWcgZXRoMSBtdHUgOTAwMCB0eHF1ZXVlbGVuIDEwMDAgdXAKKyMgY2FsbCB0aGUgc3lzY3RsIHV0aWxpdHkgdG8gbW9kaWZ5IC9wcm9jL3N5cyBlbnRyaWVzIAorc3lzY3RsIC1wIC4vc3lzY3RsX2l4Z2IuY29uZiAKKy0gRU5EIGl4Z2JfcGVyZi5zaAorCistIENPUFkgdGhlc2UgbGluZXMgYW5kIHBhc3RlIHRoZW0gaW50byBzeXNjdGxfaXhnYi5jb25mOgorIyBzb21lIG9mIHRoZSBkZWZhdWx0cyBtYXkgYmUgZGlmZmVyZW50IGZvciB5b3VyIGtlcm5lbAorIyBjYWxsIHRoaXMgZmlsZSB3aXRoIHN5c2N0bCAtcCA8dGhpcyBmaWxlPgorIyB0aGVzZSBhcmUganVzdCBzdWdnZXN0ZWQgdmFsdWVzIHRoYXQgd29ya2VkIHdlbGwgdG8gaW5jcmVhc2UgdGhyb3VnaHB1dCBpbgorIyBzZXZlcmFsIG5ldHdvcmsgYmVuY2htYXJrIHRlc3RzLCB5b3VyIG1pbGVhZ2UgbWF5IHZhcnkKKworIyMjIElQVjQgc3BlY2lmaWMgc2V0dGluZ3MKK25ldC5pcHY0LnRjcF90aW1lc3RhbXBzID0gMCAjIHR1cm5zIFRDUCB0aW1lc3RhbXAgc3VwcG9ydCBvZmYsIGRlZmF1bHQgMSwgcmVkdWNlcyBDUFUgdXNlCituZXQuaXB2NC50Y3Bfc2FjayA9IDAgIyB0dXJuIFNBQ0sgc3VwcG9ydCBvZmYsIGRlZmF1bHQgb24KKyMgb24gc3lzdGVtcyB3aXRoIGEgVkVSWSBmYXN0IGJ1cyAtPiBtZW1vcnkgaW50ZXJmYWNlIHRoaXMgaXMgdGhlIGJpZyBnYWluZXIgCituZXQuaXB2NC50Y3Bfcm1lbSA9IDEwMDAwMDAwIDEwMDAwMDAwIDEwMDAwMDAwICMgc2V0cyBtaW4vZGVmYXVsdC9tYXggVENQIHJlYWQgYnVmZmVyLCBkZWZhdWx0IDQwOTYgODczODAgMTc0NzYwCituZXQuaXB2NC50Y3Bfd21lbSA9IDEwMDAwMDAwIDEwMDAwMDAwIDEwMDAwMDAwICMgc2V0cyBtaW4vcHJlc3N1cmUvbWF4IFRDUCB3cml0ZSBidWZmZXIsIGRlZmF1bHQgNDA5NiAxNjM4NCAxMzEwNzIKK25ldC5pcHY0LnRjcF9tZW0gPSAxMDAwMDAwMCAxMDAwMDAwMCAxMDAwMDAwMCAjIHNldHMgbWluL3ByZXNzdXJlL21heCBUQ1AgYnVmZmVyIHNwYWNlLCBkZWZhdWx0IDMxNzQ0IDMyMjU2IDMyNzY4CisKKyMjIyBDT1JFIHNldHRpbmdzIChtb3N0bHkgZm9yIHNvY2tldCBhbmQgVURQIGVmZmVjdCkKK25ldC5jb3JlLnJtZW1fbWF4ID0gNTI0Mjg3ICMgbWF4aW11bSByZWNlaXZlIHNvY2tldCBidWZmZXIgc2l6ZSwgZGVmYXVsdCAxMzEwNzEKK25ldC5jb3JlLndtZW1fbWF4ID0gNTI0Mjg3ICMgbWF4aW11bSBzZW5kIHNvY2tldCBidWZmZXIgc2l6ZSwgZGVmYXVsdCAxMzEwNzEKK25ldC5jb3JlLnJtZW1fZGVmYXVsdCA9IDUyNDI4NyAjIGRlZmF1bHQgcmVjZWl2ZSBzb2NrZXQgYnVmZmVyIHNpemUsIGRlZmF1bHQgNjU1MzUKK25ldC5jb3JlLndtZW1fZGVmYXVsdCA9IDUyNDI4NyAjIGRlZmF1bHQgc2VuZCBzb2NrZXQgYnVmZmVyIHNpemUsIGRlZmF1bHQgNjU1MzUKK25ldC5jb3JlLm9wdG1lbV9tYXggPSA1MjQyODcgIyBtYXhpbXVtIGFtb3VudCBvZiBvcHRpb24gbWVtb3J5IGJ1ZmZlcnMsIGRlZmF1bHQgMTAyNDAKK25ldC5jb3JlLm5ldGRldl9tYXhfYmFja2xvZyA9IDMwMDAwMCAjIG51bWJlciBvZiB1bnByb2Nlc3NlZCBpbnB1dCBwYWNrZXRzIGJlZm9yZSBrZXJuZWwgc3RhcnRzIGRyb3BwaW5nIHRoZW0sIGRlZmF1bHQgMzAwCistIEVORCBzeXNjdGxfaXhnYi5jb25mCisKK0VkaXQgdGhlIGl4Z2JfcGVyZi5zaCBzY3JpcHQgaWYgbmVjZXNzYXJ5IHRvIGNoYW5nZSBldGgxIHRvIHdoYXRldmVyIGludGVyZmFjZSAKK3lvdXIgaXhnYiBkcml2ZXIgaXMgdXNpbmcuCisKK05PVEU6IFVubGVzcyB0aGVzZSBzY3JpcHRzIGFyZSBhZGRlZCB0byB0aGUgYm9vdCBwcm9jZXNzLCB0aGVzZSBjaGFuZ2VzIHdpbGwgCitvbmx5IGxhc3Qgb25seSB1bnRpbCB0aGUgbmV4dCBzeXN0ZW0gcmVib290LgorCisKK1Jlc29sdmluZyBTbG93IFVEUCBUcmFmZmljCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitJZiB5b3VyIHNlcnZlciBkb2VzIG5vdCBzZWVtIHRvIGJlIGFibGUgdG8gcmVjZWl2ZSBVRFAgdHJhZmZpYyBhcyBmYXN0IGFzIGl0IAorY2FuIHJlY2VpdmUgVENQIHRyYWZmaWMsIGl0IGNvdWxkIGJlIGJlY2F1c2UgTGludXgsIGJ5IGRlZmF1bHQsIGRvZXMgbm90IHNldCAKK3RoZSBuZXR3b3JrIHN0YWNrIGJ1ZmZlcnMgYXMgbGFyZ2UgYXMgdGhleSBuZWVkIHRvIGJlIHRvIHN1cHBvcnQgaGlnaCBVRFAgCit0cmFuc2ZlciByYXRlcy4gT25lIHdheSB0byBhbGxldmlhdGUgdGhpcyBwcm9ibGVtIGlzIHRvIGFsbG93IG1vcmUgbWVtb3J5IHRvIAorYmUgdXNlZCBieSB0aGUgSVAgc3RhY2sgdG8gc3RvcmUgaW5jb21pbmcgZGF0YS4gCisKK0ZvciBpbnN0YW5jZSwgdXNlIHRoZSBjb21tYW5kczogCisgICAgc3lzY3RsIC13IG5ldC5jb3JlLnJtZW1fbWF4PTI2MjE0MworYW5kCisgICAgc3lzY3RsIC13IG5ldC5jb3JlLnJtZW1fZGVmYXVsdD0yNjIxNDMKK3RvIGluY3JlYXNlIHRoZSByZWFkIGJ1ZmZlciBtZW1vcnkgbWF4IGFuZCBkZWZhdWx0IHRvIDI2MjE0MyAoMjU2ayAtIDEpIGZyb20gCitkZWZhdWx0cyBvZiBtYXg9MTMxMDcxICgxMjhrIC0gMSkgYW5kIGRlZmF1bHQ9NjU1MzUgKDY0ayAtIDEpLiBUaGVzZSB2YXJpYWJsZXMgCit3aWxsIGluY3JlYXNlIHRoZSBhbW91bnQgb2YgbWVtb3J5IHVzZWQgYnkgdGhlIG5ldHdvcmsgc3RhY2sgZm9yIHJlY2VpdmVzLCBhbmQgCitjYW4gYmUgaW5jcmVhc2VkIHNpZ25pZmljYW50bHkgbW9yZSBpZiBuZWNlc3NhcnkgZm9yIHlvdXIgYXBwbGljYXRpb24uCisKK1N1cHBvcnQKKz09PT09PT0KKworRm9yIGdlbmVyYWwgaW5mb3JtYXRpb24gYW5kIHN1cHBvcnQsIGdvIHRvIHRoZSBJbnRlbCBzdXBwb3J0IHdlYnNpdGUgYXQ6CisKKyAgICBodHRwOi8vc3VwcG9ydC5pbnRlbC5jb20KKworSWYgYW4gaXNzdWUgaXMgaWRlbnRpZmllZCB3aXRoIHRoZSByZWxlYXNlZCBzb3VyY2UgY29kZSBvbiB0aGUgc3VwcG9ydGVkCitrZXJuZWwgd2l0aCBhIHN1cHBvcnRlZCBhZGFwdGVyLCBlbWFpbCB0aGUgc3BlY2lmaWMgaW5mb3JtYXRpb24gcmVsYXRlZCB0byAKK3RoZSBpc3N1ZSB0byBsaW51eC5uaWNzQGludGVsLmNvbS4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9sYXBiLW1vZHVsZS50eHQgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvbGFwYi1tb2R1bGUudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ0ZmM4ZjIKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvbGFwYi1tb2R1bGUudHh0CkBAIC0wLDAgKzEsMjYzIEBACisJCVRoZSBMaW51eCBMQVBCIE1vZHVsZSBJbnRlcmZhY2UgMS4zCisKKwkJICAgICAgSm9uYXRoYW4gTmF5bG9yIDI5LjEyLjk2CisKK0NoYW5nZWQgKEhlbm5lciBFaXNlbiwgMjAwMC0xMC0yOSk6IGludCByZXR1cm4gdmFsdWUgZm9yIGRhdGFfaW5kaWNhdGlvbigpIAorCitUaGUgTEFQQiBtb2R1bGUgd2lsbCBiZSBhIHNlcGFyYXRlbHkgY29tcGlsZWQgbW9kdWxlIGZvciB1c2UgYnkgYW55IHBhcnRzIG9mCit0aGUgTGludXggb3BlcmF0aW5nIHN5c3RlbSB0aGF0IHJlcXVpcmUgYSBMQVBCIHNlcnZpY2UuIFRoaXMgZG9jdW1lbnQKK2RlZmluZXMgdGhlIGludGVyZmFjZXMgdG8sIGFuZCB0aGUgc2VydmljZXMgcHJvdmlkZWQgYnkgdGhpcyBtb2R1bGUuIFRoZQordGVybSBtb2R1bGUgaW4gdGhpcyBjb250ZXh0IGRvZXMgbm90IGltcGx5IHRoYXQgdGhlIExBUEIgbW9kdWxlIGlzIGEKK3NlcGFyYXRlbHkgbG9hZGFibGUgbW9kdWxlLCBhbHRob3VnaCBpdCBtYXkgYmUuIFRoZSB0ZXJtIG1vZHVsZSBpcyB1c2VkIGluCitpdHMgbW9yZSBzdGFuZGFyZCBtZWFuaW5nLgorCitUaGUgaW50ZXJmYWNlIHRvIHRoZSBMQVBCIG1vZHVsZSBjb25zaXN0cyBvZiBmdW5jdGlvbnMgdG8gdGhlIG1vZHVsZSwKK2NhbGxiYWNrcyBmcm9tIHRoZSBtb2R1bGUgdG8gaW5kaWNhdGUgaW1wb3J0YW50IHN0YXRlIGNoYW5nZXMsIGFuZAorc3RydWN0dXJlcyBmb3IgZ2V0dGluZyBhbmQgc2V0dGluZyBpbmZvcm1hdGlvbiBhYm91dCB0aGUgbW9kdWxlLgorCitTdHJ1Y3R1cmVzCistLS0tLS0tLS0tCisKK1Byb2JhYmx5IHRoZSBtb3N0IGltcG9ydGFudCBzdHJ1Y3R1cmUgaXMgdGhlIHNrYnVmZiBzdHJ1Y3R1cmUgZm9yIGhvbGRpbmcKK3JlY2VpdmVkIGFuZCB0cmFuc21pdHRlZCBkYXRhLCBob3dldmVyIGl0IGlzIGJleW9uZCB0aGUgc2NvcGUgb2YgdGhpcworZG9jdW1lbnQuCisKK1RoZSB0d28gTEFQQiBzcGVjaWZpYyBzdHJ1Y3R1cmVzIGFyZSB0aGUgTEFQQiBpbml0aWFsaXNhdGlvbiBzdHJ1Y3R1cmUgYW5kCit0aGUgTEFQQiBwYXJhbWV0ZXIgc3RydWN0dXJlLiBUaGVzZSB3aWxsIGJlIGRlZmluZWQgaW4gYSBzdGFuZGFyZCBoZWFkZXIKK2ZpbGUsIDxsaW51eC9sYXBiLmg+LiBUaGUgaGVhZGVyIGZpbGUgPG5ldC9sYXBiLmg+IGlzIGludGVybmFsIHRvIHRoZSBMQVBCCittb2R1bGUgYW5kIGlzIG5vdCBmb3IgdXNlLgorCitMQVBCIEluaXRpYWxpc2F0aW9uIFN0cnVjdHVyZQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhpcyBzdHJ1Y3R1cmUgaXMgdXNlZCBvbmx5IG9uY2UsIGluIHRoZSBjYWxsIHRvIGxhcGJfcmVnaXN0ZXIgKHNlZSBiZWxvdykuCitJdCBjb250YWlucyBpbmZvcm1hdGlvbiBhYm91dCB0aGUgZGV2aWNlIGRyaXZlciB0aGF0IHJlcXVpcmVzIHRoZSBzZXJ2aWNlcworb2YgdGhlIExBUEIgbW9kdWxlLgorCitzdHJ1Y3QgbGFwYl9yZWdpc3Rlcl9zdHJ1Y3QgeworCXZvaWQgKCpjb25uZWN0X2NvbmZpcm1hdGlvbikoaW50IHRva2VuLCBpbnQgcmVhc29uKTsKKwl2b2lkICgqY29ubmVjdF9pbmRpY2F0aW9uKShpbnQgdG9rZW4sIGludCByZWFzb24pOworCXZvaWQgKCpkaXNjb25uZWN0X2NvbmZpcm1hdGlvbikoaW50IHRva2VuLCBpbnQgcmVhc29uKTsKKwl2b2lkICgqZGlzY29ubmVjdF9pbmRpY2F0aW9uKShpbnQgdG9rZW4sIGludCByZWFzb24pOworCWludCAgKCpkYXRhX2luZGljYXRpb24pKGludCB0b2tlbiwgc3RydWN0IHNrX2J1ZmYgKnNrYik7CisJdm9pZCAoKmRhdGFfdHJhbnNtaXQpKGludCB0b2tlbiwgc3RydWN0IHNrX2J1ZmYgKnNrYik7Cit9OworCitFYWNoIG1lbWJlciBvZiB0aGlzIHN0cnVjdHVyZSBjb3JyZXNwb25kcyB0byBhIGZ1bmN0aW9uIGluIHRoZSBkZXZpY2UgZHJpdmVyCit0aGF0IGlzIGNhbGxlZCB3aGVuIGEgcGFydGljdWxhciBldmVudCBpbiB0aGUgTEFQQiBtb2R1bGUgb2NjdXJzLiBUaGVzZSB3aWxsCitiZSBkZXNjcmliZWQgaW4gZGV0YWlsIGJlbG93LiBJZiBhIGNhbGxiYWNrIGlzIG5vdCByZXF1aXJlZCAoISEpIHRoZW4gYSBOVUxMCittYXkgYmUgc3Vic3RpdHV0ZWQuCisKKworTEFQQiBQYXJhbWV0ZXIgU3RydWN0dXJlCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhpcyBzdHJ1Y3R1cmUgaXMgdXNlZCB3aXRoIHRoZSBsYXBiX2dldHBhcm1zIGFuZCBsYXBiX3NldHBhcm1zIGZ1bmN0aW9ucworKHNlZSBiZWxvdykuIFRoZXkgYXJlIHVzZWQgdG8gYWxsb3cgdGhlIGRldmljZSBkcml2ZXIgdG8gZ2V0IGFuZCBzZXQgdGhlCitvcGVyYXRpb25hbCBwYXJhbWV0ZXJzIG9mIHRoZSBMQVBCIGltcGxlbWVudGF0aW9uIGZvciBhIGdpdmVuIGNvbm5lY3Rpb24uCisKK3N0cnVjdCBsYXBiX3Bhcm1zX3N0cnVjdCB7CisJdW5zaWduZWQgaW50IHQxOworCXVuc2lnbmVkIGludCB0MXRpbWVyOworCXVuc2lnbmVkIGludCB0MjsKKwl1bnNpZ25lZCBpbnQgdDJ0aW1lcjsKKwl1bnNpZ25lZCBpbnQgbjI7CisJdW5zaWduZWQgaW50IG4yY291bnQ7CisJdW5zaWduZWQgaW50IHdpbmRvdzsKKwl1bnNpZ25lZCBpbnQgc3RhdGU7CisJdW5zaWduZWQgaW50IG1vZGU7Cit9OworCitUMSBhbmQgVDIgYXJlIHByb3RvY29sIHRpbWluZyBwYXJhbWV0ZXJzIGFuZCBhcmUgZ2l2ZW4gaW4gdW5pdHMgb2YgMTAwbXMuIE4yCitpcyB0aGUgbWF4aW11bSBudW1iZXIgb2YgdHJpZXMgb24gdGhlIGxpbmsgYmVmb3JlIGl0IGlzIGRlY2xhcmVkIGEgZmFpbHVyZS4KK1RoZSB3aW5kb3cgc2l6ZSBpcyB0aGUgbWF4aW11bSBudW1iZXIgb2Ygb3V0c3RhbmRpbmcgZGF0YSBwYWNrZXRzIGFsbG93ZWQgdG8KK2JlIHVuYWNrbm93bGVkZ2VkIGJ5IHRoZSByZW1vdGUgZW5kLCB0aGUgdmFsdWUgb2YgdGhlIHdpbmRvdyBpcyBiZXR3ZWVuIDEKK2FuZCA3IGZvciBhIHN0YW5kYXJkIExBUEIgbGluaywgYW5kIGJldHdlZW4gMSBhbmQgMTI3IGZvciBhbiBleHRlbmRlZCBMQVBCCitsaW5rLgorCitUaGUgbW9kZSB2YXJpYWJsZSBpcyBhIGJpdCBmaWVsZCB1c2VkIGZvciBzZXR0aW5nIChhdCBwcmVzZW50KSB0aHJlZSB2YWx1ZXMuCitUaGUgYml0IGZpZWxkcyBoYXZlIHRoZSBmb2xsb3dpbmcgbWVhbmluZ3M6CisKK0JpdAlNZWFuaW5nCiswCUxBUEIgb3BlcmF0aW9uICgwPUxBUEJfU1RBTkRBUkQgMT1MQVBCX0VYVEVOREVEKS4KKzEJW1NNXUxQIG9wZXJhdGlvbiAoMD1MQVBCX1NMUCAxPUxBUEI9TUxQKS4KKzIJRFRFL0RDRSBvcGVyYXRpb24gKDA9TEFQQl9EVEUgMT1MQVBCX0RDRSkKKzMtMzEJUmVzZXJ2ZWQsIG11c3QgYmUgMC4KKworRXh0ZW5kZWQgTEFQQiBvcGVyYXRpb24gaW5kaWNhdGVzIHRoZSB1c2Ugb2YgZXh0ZW5kZWQgc2VxdWVuY2UgbnVtYmVycyBhbmQKK2NvbnNlcXVlbnRseSBsYXJnZXIgd2luZG93IHNpemVzLCB0aGUgZGVmYXVsdCBpcyBzdGFuZGFyZCBMQVBCIG9wZXJhdGlvbi4KK01MUCBvcGVyYXRpb24gaXMgdGhlIHNhbWUgYXMgU0xQIG9wZXJhdGlvbiBleGNlcHQgdGhhdCB0aGUgYWRkcmVzc2VzIHVzZWQgYnkKK0xBUEIgYXJlIGRpZmZlcmVudCB0byBpbmRpY2F0ZSB0aGUgbW9kZSBvZiBvcGVyYXRpb24sIHRoZSBkZWZhdWx0IGlzIFNpbmdsZQorTGluayBQcm9jZWR1cmUuIFRoZSBkaWZmZXJlbmNlIGJldHdlZW4gRENFIGFuZCBEVEUgb3BlcmF0aW9uIGlzIChpKSB0aGUKK2FkZHJlc3NlcyB1c2VkIGZvciBjb21tYW5kcyBhbmQgcmVzcG9uc2VzLCBhbmQgKGlpKSB3aGVuIHRoZSBEQ0UgaXMgbm90Citjb25uZWN0ZWQsIGl0IHNlbmRzIERNIHdpdGhvdXQgcG9sbHMgc2V0LCBldmVyeSBUMS4gVGhlIHVwcGVyIGNhc2UgY29uc3RhbnQKK25hbWVzIHdpbGwgYmUgZGVmaW5lZCBpbiB0aGUgcHVibGljIExBUEIgaGVhZGVyIGZpbGUuCisKKworRnVuY3Rpb25zCistLS0tLS0tLS0KKworVGhlIExBUEIgbW9kdWxlIHByb3ZpZGVzIGEgbnVtYmVyIG9mIGZ1bmN0aW9uIGVudHJ5IHBvaW50cy4KKworCitpbnQgbGFwYl9yZWdpc3Rlcih2b2lkICp0b2tlbiwgc3RydWN0IGxhcGJfcmVnaXN0ZXJfc3RydWN0KTsKKworVGhpcyBtdXN0IGJlIGNhbGxlZCBiZWZvcmUgdGhlIExBUEIgbW9kdWxlIG1heSBiZSB1c2VkLiBJZiB0aGUgY2FsbCBpcworc3VjY2Vzc2Z1bCB0aGVuIExBUEJfT0sgaXMgcmV0dXJuZWQuIFRoZSB0b2tlbiBtdXN0IGJlIGEgdW5pcXVlIGlkZW50aWZpZXIKK2dlbmVyYXRlZCBieSB0aGUgZGV2aWNlIGRyaXZlciB0byBhbGxvdyBmb3IgdGhlIHVuaXF1ZSBpZGVudGlmaWNhdGlvbiBvZiB0aGUKK2luc3RhbmNlIG9mIHRoZSBMQVBCIGxpbmsuIEl0IGlzIHJldHVybmVkIGJ5IHRoZSBMQVBCIG1vZHVsZSBpbiBhbGwgb2YgdGhlCitjYWxsYmFja3MsIGFuZCBpcyB1c2VkIGJ5IHRoZSBkZXZpY2UgZHJpdmVyIGluIGFsbCBjYWxscyB0byB0aGUgTEFQQiBtb2R1bGUuCitGb3IgbXVsdGlwbGUgTEFQQiBsaW5rcyBpbiBhIHNpbmdsZSBkZXZpY2UgZHJpdmVyLCBtdWx0aXBsZSBjYWxscyB0bworbGFwYl9yZWdpc3RlciBtdXN0IGJlIG1hZGUuIFRoZSBmb3JtYXQgb2YgdGhlIGxhcGJfcmVnaXN0ZXJfc3RydWN0IGlzIGdpdmVuCithYm92ZS4gVGhlIHJldHVybiB2YWx1ZXMgYXJlOgorCitMQVBCX09LCQkJTEFQQiByZWdpc3RlcmVkIHN1Y2Nlc3NmdWxseS4KK0xBUEJfQkFEVE9LRU4JCVRva2VuIGlzIGFscmVhZHkgcmVnaXN0ZXJlZC4KK0xBUEJfTk9NRU0JCU91dCBvZiBtZW1vcnkKKworCitpbnQgbGFwYl91bnJlZ2lzdGVyKHZvaWQgKnRva2VuKTsKKworVGhpcyByZWxlYXNlcyBhbGwgdGhlIHJlc291cmNlcyBhc3NvY2lhdGVkIHdpdGggYSBMQVBCIGxpbmsuIEFueSBjdXJyZW50CitMQVBCIGxpbmsgd2lsbCBiZSBhYmFuZG9uZWQgd2l0aG91dCBmdXJ0aGVyIG1lc3NhZ2VzIGJlaW5nIHBhc3NlZC4gQWZ0ZXIKK3RoaXMgY2FsbCwgdGhlIHZhbHVlIG9mIHRva2VuIGlzIG5vIGxvbmdlciB2YWxpZCBmb3IgYW55IGNhbGxzIHRvIHRoZSBMQVBCCitmdW5jdGlvbi4gVGhlIHZhbGlkIHJldHVybiB2YWx1ZXMgYXJlOgorCitMQVBCX09LCQkJTEFQQiB1bnJlZ2lzdGVyZWQgc3VjY2Vzc2Z1bGx5LgorTEFQQl9CQURUT0tFTgkJSW52YWxpZC91bmtub3duIExBUEIgdG9rZW4uCisKKworaW50IGxhcGJfZ2V0cGFybXModm9pZCAqdG9rZW4sIHN0cnVjdCBsYXBiX3Bhcm1zX3N0cnVjdCAqcGFybXMpOworCitUaGlzIGFsbG93cyB0aGUgZGV2aWNlIGRyaXZlciB0byBnZXQgdGhlIHZhbHVlcyBvZiB0aGUgY3VycmVudCBMQVBCCit2YXJpYWJsZXMsIHRoZSBsYXBiX3Bhcm1zX3N0cnVjdCBpcyBkZXNjcmliZWQgYWJvdmUuIFRoZSB2YWxpZCByZXR1cm4gdmFsdWVzCithcmU6CisKK0xBUEJfT0sJCQlMQVBCIGdldHBhcm1zIHdhcyBzdWNjZXNzZnVsLgorTEFQQl9CQURUT0tFTgkJSW52YWxpZC91bmtub3duIExBUEIgdG9rZW4uCisKKworaW50IGxhcGJfc2V0cGFybXModm9pZCAqdG9rZW4sIHN0cnVjdCBsYXBiX3Bhcm1zX3N0cnVjdCAqcGFybXMpOworCitUaGlzIGFsbG93cyB0aGUgZGV2aWNlIGRyaXZlciB0byBzZXQgdGhlIHZhbHVlcyBvZiB0aGUgY3VycmVudCBMQVBCCit2YXJpYWJsZXMsIHRoZSBsYXBiX3Bhcm1zX3N0cnVjdCBpcyBkZXNjcmliZWQgYWJvdmUuIFRoZSB2YWx1ZXMgb2YgdDF0aW1lciwKK3QydGltZXIgYW5kIG4yY291bnQgYXJlIGlnbm9yZWQsIGxpa2V3aXNlIGNoYW5naW5nIHRoZSBtb2RlIGJpdHMgd2hlbgorY29ubmVjdGVkIHdpbGwgYmUgaWdub3JlZC4gQW4gZXJyb3IgaW1wbGllcyB0aGF0IG5vbmUgb2YgdGhlIHZhbHVlcyBoYXZlCitiZWVuIGNoYW5nZWQuIFRoZSB2YWxpZCByZXR1cm4gdmFsdWVzIGFyZToKKworTEFQQl9PSwkJCUxBUEIgZ2V0cGFybXMgd2FzIHN1Y2Nlc3NmdWwuCitMQVBCX0JBRFRPS0VOCQlJbnZhbGlkL3Vua25vd24gTEFQQiB0b2tlbi4KK0xBUEJfSU5WQUxVRQkJT25lIG9mIHRoZSB2YWx1ZXMgd2FzIG91dCBvZiBpdHMgYWxsb3dhYmxlIHJhbmdlLgorCisKK2ludCBsYXBiX2Nvbm5lY3RfcmVxdWVzdCh2b2lkICp0b2tlbik7CisKK0luaXRpYXRlIGEgY29ubmVjdCB1c2luZyB0aGUgY3VycmVudCBwYXJhbWV0ZXIgc2V0dGluZ3MuIFRoZSB2YWxpZCByZXR1cm4KK3ZhbHVlcyBhcmU6CisKK0xBUEJfT0sJCQlMQVBCIGlzIHN0YXJ0aW5nIHRvIGNvbm5lY3QuCitMQVBCX0JBRFRPS0VOCQlJbnZhbGlkL3Vua25vd24gTEFQQiB0b2tlbi4KK0xBUEJfQ09OTkVDVEVECQlMQVBCIG1vZHVsZSBpcyBhbHJlYWR5IGNvbm5lY3RlZC4KKworCitpbnQgbGFwYl9kaXNjb25uZWN0X3JlcXVlc3Qodm9pZCAqdG9rZW4pOworCitJbml0aWF0ZSBhIGRpc2Nvbm5lY3QuIFRoZSB2YWxpZCByZXR1cm4gdmFsdWVzIGFyZToKKworTEFQQl9PSwkJCUxBUEIgaXMgc3RhcnRpbmcgdG8gZGlzY29ubmVjdC4KK0xBUEJfQkFEVE9LRU4JCUludmFsaWQvdW5rbm93biBMQVBCIHRva2VuLgorTEFQQl9OT1RDT05ORUNURUQJTEFQQiBtb2R1bGUgaXMgbm90IGNvbm5lY3RlZC4KKworCitpbnQgbGFwYl9kYXRhX3JlcXVlc3Qodm9pZCAqdG9rZW4sIHN0cnVjdCBza19idWZmICpza2IpOworCitRdWV1ZSBkYXRhIHdpdGggdGhlIExBUEIgbW9kdWxlIGZvciB0cmFuc21pdHRpbmcgb3ZlciB0aGUgbGluay4gSWYgdGhlIGNhbGwKK2lzIHN1Y2Nlc3NmdWwgdGhlbiB0aGUgc2tidWZmIGlzIG93bmVkIGJ5IHRoZSBMQVBCIG1vZHVsZSBhbmQgbWF5IG5vdCBiZQordXNlZCBieSB0aGUgZGV2aWNlIGRyaXZlciBhZ2Fpbi4gVGhlIHZhbGlkIHJldHVybiB2YWx1ZXMgYXJlOgorCitMQVBCX09LCQkJTEFQQiBoYXMgYWNjZXB0ZWQgdGhlIGRhdGEuCitMQVBCX0JBRFRPS0VOCQlJbnZhbGlkL3Vua25vd24gTEFQQiB0b2tlbi4KK0xBUEJfTk9UQ09OTkVDVEVECUxBUEIgbW9kdWxlIGlzIG5vdCBjb25uZWN0ZWQuCisKKworaW50IGxhcGJfZGF0YV9yZWNlaXZlZCh2b2lkICp0b2tlbiwgc3RydWN0IHNrX2J1ZmYgKnNrYik7CisKK1F1ZXVlIGRhdGEgd2l0aCB0aGUgTEFQQiBtb2R1bGUgd2hpY2ggaGFzIGJlZW4gcmVjZWl2ZWQgZnJvbSB0aGUgZGV2aWNlLiBJdAoraXMgZXhwZWN0ZWQgdGhhdCB0aGUgZGF0YSBwYXNzZWQgdG8gdGhlIExBUEIgbW9kdWxlIGhhcyBza2ItPmRhdGEgcG9pbnRpbmcKK3RvIHRoZSBiZWdpbm5pbmcgb2YgdGhlIExBUEIgZGF0YS4gSWYgdGhlIGNhbGwgaXMgc3VjY2Vzc2Z1bCB0aGVuIHRoZSBza2J1ZmYKK2lzIG93bmVkIGJ5IHRoZSBMQVBCIG1vZHVsZSBhbmQgbWF5IG5vdCBiZSB1c2VkIGJ5IHRoZSBkZXZpY2UgZHJpdmVyIGFnYWluLgorVGhlIHZhbGlkIHJldHVybiB2YWx1ZXMgYXJlOgorCitMQVBCX09LCQkJTEFQQiBoYXMgYWNjZXB0ZWQgdGhlIGRhdGEuCitMQVBCX0JBRFRPS0VOCQlJbnZhbGlkL3Vua25vd24gTEFQQiB0b2tlbi4KKworCitDYWxsYmFja3MKKy0tLS0tLS0tLQorCitUaGVzZSBjYWxsYmFja3MgYXJlIGZ1bmN0aW9ucyBwcm92aWRlZCBieSB0aGUgZGV2aWNlIGRyaXZlciBmb3IgdGhlIExBUEIKK21vZHVsZSB0byBjYWxsIHdoZW4gYW4gZXZlbnQgb2NjdXJzLiBUaGV5IGFyZSByZWdpc3RlcmVkIHdpdGggdGhlIExBUEIKK21vZHVsZSB3aXRoIGxhcGJfcmVnaXN0ZXIgKHNlZSBhYm92ZSkgaW4gdGhlIHN0cnVjdHVyZSBsYXBiX3JlZ2lzdGVyX3N0cnVjdAorKHNlZSBhYm92ZSkuCisKKwordm9pZCAoKmNvbm5lY3RfY29uZmlybWF0aW9uKSh2b2lkICp0b2tlbiwgaW50IHJlYXNvbik7CisKK1RoaXMgaXMgY2FsbGVkIGJ5IHRoZSBMQVBCIG1vZHVsZSB3aGVuIGEgY29ubmVjdGlvbiBpcyBlc3RhYmxpc2hlZCBhZnRlcgorYmVpbmcgcmVxdWVzdGVkIGJ5IGEgY2FsbCB0byBsYXBiX2Nvbm5lY3RfcmVxdWVzdCAoc2VlIGFib3ZlKS4gVGhlIHJlYXNvbiBpcworYWx3YXlzIExBUEJfT0suCisKKwordm9pZCAoKmNvbm5lY3RfaW5kaWNhdGlvbikodm9pZCAqdG9rZW4sIGludCByZWFzb24pOworCitUaGlzIGlzIGNhbGxlZCBieSB0aGUgTEFQQiBtb2R1bGUgd2hlbiB0aGUgbGluayBpcyBlc3RhYmxpc2hlZCBieSB0aGUgcmVtb3RlCitzeXN0ZW0uIFRoZSB2YWx1ZSBvZiByZWFzb24gaXMgYWx3YXlzIExBUEJfT0suCisKKwordm9pZCAoKmRpc2Nvbm5lY3RfY29uZmlybWF0aW9uKSh2b2lkICp0b2tlbiwgaW50IHJlYXNvbik7CisKK1RoaXMgaXMgY2FsbGVkIGJ5IHRoZSBMQVBCIG1vZHVsZSB3aGVuIGFuIGV2ZW50IG9jY3VycyBhZnRlciB0aGUgZGV2aWNlCitkcml2ZXIgaGFzIGNhbGxlZCBsYXBiX2Rpc2Nvbm5lY3RfcmVxdWVzdCAoc2VlIGFib3ZlKS4gVGhlIHJlYXNvbiBpbmRpY2F0ZXMKK3doYXQgaGFzIGhhcHBlbmVkLiBJbiBhbGwgY2FzZXMgdGhlIExBUEIgbGluayBjYW4gYmUgcmVnYXJkZWQgYXMgYmVpbmcKK3Rlcm1pbmF0ZWQuIFRoZSB2YWx1ZXMgZm9yIHJlYXNvbiBhcmU6CisKK0xBUEJfT0sJCQlUaGUgTEFQQiBsaW5rIHdhcyB0ZXJtaW5hdGVkIG5vcm1hbGx5LgorTEFQQl9OT1RDT05ORUNURUQJVGhlIHJlbW90ZSBzeXN0ZW0gd2FzIG5vdCBjb25uZWN0ZWQuCitMQVBCX1RJTUVET1VUCQlObyByZXNwb25zZSB3YXMgcmVjZWl2ZWQgaW4gTjIgdHJpZXMgZnJvbSB0aGUgcmVtb3RlCisJCQlzeXN0ZW0uCisKKwordm9pZCAoKmRpc2Nvbm5lY3RfaW5kaWNhdGlvbikodm9pZCAqdG9rZW4sIGludCByZWFzb24pOworCitUaGlzIGlzIGNhbGxlZCBieSB0aGUgTEFQQiBtb2R1bGUgd2hlbiB0aGUgbGluayBpcyB0ZXJtaW5hdGVkIGJ5IHRoZSByZW1vdGUKK3N5c3RlbSBvciBhbm90aGVyIGV2ZW50IGhhcyBvY2N1cnJlZCB0byB0ZXJtaW5hdGUgdGhlIGxpbmsuIFRoaXMgbWF5IGJlCityZXR1cm5lZCBpbiByZXNwb25zZSB0byBhIGxhcGJfY29ubmVjdF9yZXF1ZXN0IChzZWUgYWJvdmUpIGlmIHRoZSByZW1vdGUKK3N5c3RlbSByZWZ1c2VkIHRoZSByZXF1ZXN0LiBUaGUgdmFsdWVzIGZvciByZWFzb24gYXJlOgorCitMQVBCX09LCQkJVGhlIExBUEIgbGluayB3YXMgdGVybWluYXRlZCBub3JtYWxseSBieSB0aGUgcmVtb3RlCisJCQlzeXN0ZW0uCitMQVBCX1JFRlVTRUQJCVRoZSByZW1vdGUgc3lzdGVtIHJlZnVzZWQgdGhlIGNvbm5lY3QgcmVxdWVzdC4KK0xBUEJfTk9UQ09OTkVDVEVECVRoZSByZW1vdGUgc3lzdGVtIHdhcyBub3QgY29ubmVjdGVkLgorTEFQQl9USU1FRE9VVAkJTm8gcmVzcG9uc2Ugd2FzIHJlY2VpdmVkIGluIE4yIHRyaWVzIGZyb20gdGhlIHJlbW90ZQorCQkJc3lzdGVtLgorCisKK2ludCAoKmRhdGFfaW5kaWNhdGlvbikodm9pZCAqdG9rZW4sIHN0cnVjdCBza19idWZmICpza2IpOworCitUaGlzIGlzIGNhbGxlZCBieSB0aGUgTEFQQiBtb2R1bGUgd2hlbiBkYXRhIGhhcyBiZWVuIHJlY2VpdmVkIGZyb20gdGhlCityZW1vdGUgc3lzdGVtIHRoYXQgc2hvdWxkIGJlIHBhc3NlZCBvbnRvIHRoZSBuZXh0IGxheWVyIGluIHRoZSBwcm90b2NvbAorc3RhY2suIFRoZSBza2J1ZmYgYmVjb21lcyB0aGUgcHJvcGVydHkgb2YgdGhlIGRldmljZSBkcml2ZXIgYW5kIHRoZSBMQVBCCittb2R1bGUgd2lsbCBub3QgcGVyZm9ybSBhbnkgbW9yZSBhY3Rpb25zIG9uIGl0LiBUaGUgc2tiLT5kYXRhIHBvaW50ZXIgd2lsbAorYmUgcG9pbnRpbmcgdG8gdGhlIGZpcnN0IGJ5dGUgb2YgZGF0YSBhZnRlciB0aGUgTEFQQiBoZWFkZXIuCisKK1RoaXMgbWV0aG9kIHNob3VsZCByZXR1cm4gTkVUX1JYX0RST1AgKGFzIGRlZmluZWQgaW4gdGhlIGhlYWRlcgorZmlsZSBpbmNsdWRlL2xpbnV4L25ldGRldmljZS5oKSBpZiBhbmQgb25seSBpZiB0aGUgZnJhbWUgd2FzIGRyb3BwZWQKK2JlZm9yZSBpdCBjb3VsZCBiZSBkZWxpdmVyZWQgdG8gdGhlIHVwcGVyIGxheWVyLgorCisKK3ZvaWQgKCpkYXRhX3RyYW5zbWl0KSh2b2lkICp0b2tlbiwgc3RydWN0IHNrX2J1ZmYgKnNrYik7CisKK1RoaXMgaXMgY2FsbGVkIGJ5IHRoZSBMQVBCIG1vZHVsZSB3aGVuIGRhdGEgaXMgdG8gYmUgdHJhbnNtaXR0ZWQgdG8gdGhlCityZW1vdGUgc3lzdGVtIGJ5IHRoZSBkZXZpY2UgZHJpdmVyLiBUaGUgc2tidWZmIGJlY29tZXMgdGhlIHByb3BlcnR5IG9mIHRoZQorZGV2aWNlIGRyaXZlciBhbmQgdGhlIExBUEIgbW9kdWxlIHdpbGwgbm90IHBlcmZvcm0gYW55IG1vcmUgYWN0aW9ucyBvbiBpdC4KK1RoZSBza2ItPmRhdGEgcG9pbnRlciB3aWxsIGJlIHBvaW50aW5nIHRvIHRoZSBmaXJzdCBieXRlIG9mIHRoZSBMQVBCIGhlYWRlci4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9sdHBjLnR4dCBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9sdHBjLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZTJhOTEyCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2x0cGMudHh0CkBAIC0wLDAgKzEsMTMxIEBACitUaGlzIGlzIHRoZSBBTFBIQSB2ZXJzaW9uIG9mIHRoZSBsdHBjIGRyaXZlci4KKworSW4gb3JkZXIgdG8gdXNlIGl0LCB5b3Ugd2lsbCBuZWVkIGF0IGxlYXN0IHZlcnNpb24gMS4zLjMgb2YgdGhlCituZXRhdGFsayBwYWNrYWdlLCBhbmQgdGhlIEFwcGxlIG9yIEZhcmFsbG9uIExvY2FsVGFsayBQQyBjYXJkLgorVGhlcmUgYXJlIGEgbnVtYmVyIG9mIGRpZmZlcmVudCBMb2NhbFRhbGsgY2FyZHMgZm9yIHRoZSBQQzsgdGhpcworZHJpdmVyIGFwcGxpZXMgb25seSB0byB0aGUgb25lIHdpdGggdGhlIDY1YzAyIHByb2Nlc3NvciBjaGlwIG9uIGl0LgorCitUbyBpbmNsdWRlIGl0IGluIHRoZSBrZXJuZWwsIHNlbGVjdCB0aGUgQ09ORklHX0xUUEMgc3dpdGNoIGluIHRoZQorY29uZmlndXJhdGlvbiBkaWFsb2cuICBZb3UgY2FuIGFsc28gY29tcGlsZSBpdCBhcyBhIG1vZHVsZS4KKworV2hpbGUgdGhlIGRyaXZlciB3aWxsIGF0dGVtcHQgdG8gYXV0b3Byb2JlIHRoZSBJL08gcG9ydCBhZGRyZXNzLCBJUlEKK2xpbmUsIGFuZCBETUEgY2hhbm5lbCBvZiB0aGUgY2FyZCwgdGhpcyBkb2VzIG5vdCBhbHdheXMgd29yay4gIEZvcgordGhpcyByZWFzb24sIHlvdSBzaG91bGQgYmUgcHJlcGFyZWQgdG8gc3VwcGx5IHRoZXNlIHBhcmFtZXRlcnMKK3lvdXJzZWxmLiAgKHNlZSAiQ2FyZCBDb25maWd1cmF0aW9uIiBiZWxvdyBmb3IgaG93IHRvIGRldGVybWluZSBvcgorY2hhbmdlIHRoZSBzZXR0aW5ncyBvbiB5b3VyIGNhcmQpCisKK1doZW4gdGhlIGRyaXZlciBpcyBjb21waWxlZCBpbnRvIHRoZSBrZXJuZWwsIHlvdSBjYW4gYWRkIGEgbGluZSBzdWNoCithcyB0aGUgZm9sbG93aW5nIHRvIHlvdXIgL2V0Yy9saWxvLmNvbmY6CisKKyBhcHBlbmQ9Imx0cGM9MHgyNDAsOSwxIgorCit3aGVyZSB0aGUgcGFyYW1ldGVycyAoaW4gb3JkZXIpIGFyZSB0aGUgcG9ydCBhZGRyZXNzLCBJUlEsIGFuZCBETUEKK2NoYW5uZWwuICBUaGUgc2Vjb25kIGFuZCB0aGlyZCB2YWx1ZXMgY2FuIGJlIG9taXR0ZWQsIGluIHdoaWNoIGNhc2UKK3RoZSBkcml2ZXIgd2lsbCB0cnkgdG8gZGV0ZXJtaW5lIHRoZW0gaXRzZWxmLgorCitJZiB5b3UgbG9hZCB0aGUgZHJpdmVyIGFzIGEgbW9kdWxlLCB5b3UgY2FuIHBhc3MgdGhlIHBhcmFtZXRlcnMgImlvPSIsCisiaXJxPSIsIGFuZCAiZG1hPSIgb24gdGhlIGNvbW1hbmQgbGluZSB3aXRoIGluc21vZCBvciBtb2Rwcm9iZSwgb3IgYWRkCit0aGVtIGFzIG9wdGlvbnMgaW4gL2V0Yy9tb2Rwcm9iZS5jb25mOgorCisgYWxpYXMgbHQwIGx0cGMgIyBhdXRvbG9hZCB0aGUgbW9kdWxlIHdoZW4gdGhlIGludGVyZmFjZSBpcyBjb25maWd1cmVkCisgb3B0aW9ucyBsdHBjIGlvPTB4MjQwIGlycT05IGRtYT0xCisKK0JlZm9yZSBzdGFydGluZyB1cCB0aGUgbmV0YXRhbGsgZGVtb25zIChwZXJoYXBzIGluIHJjLmxvY2FsKSwgeW91CituZWVkIHRvIGFkZCBhIGxpbmUgc3VjaCBhczoKKworIC9zYmluL2lmY29uZmlnIGx0MCAxMjcuMC4wLjQyCisKK1RoZSBhZGRyZXNzIGlzIHVuaW1wb3J0YW50IC0gaG93ZXZlciwgdGhlIGNhcmQgbmVlZHMgdG8gYmUgY29uZmlndXJlZAord2l0aCBpZmNvbmZpZyBzbyB0aGF0IE5ldGF0YWxrIGNhbiBmaW5kIGl0LgorCitUaGUgYXBwcm9wcmlhdGUgbmV0YXRhbGsgY29uZmlndXJhdGlvbiBkZXBlbmRzIG9uIHdoZXRoZXIgeW91IGFyZQorYXR0YWNoZWQgdG8gYSBuZXR3b3JrIHRoYXQgaW5jbHVkZXMgQXBwbGVUYWxrIHJvdXRlcnMgb3Igbm90LiAgSWYsCitsaWtlIG1lLCB5b3UgYXJlIHNpbXBseSBjb25uZWN0aW5nIHRvIHlvdXIgaG9tZSBNYWNpbnRvc2hlcyBhbmQKK3ByaW50ZXJzLCB5b3UgbmVlZCB0byBzZXQgdXAgbmV0YXRhbGsgdG8gInNlZWQiLiAgVGhlIHdheSBJIGRvIHRoaXMKK2lzIHRvIGhhdmUgdGhlIGxpbmVzCisKKyBkdW1teSAtc2VlZCAtcGhhc2UgMiAtbmV0IDIwMDAgLWFkZHIgMjAwMC4yNiAtem9uZSAiMTAzMyIKKyBsdDAgLXNlZWQgLXBoYXNlIDEgLW5ldCAxMDMzIC1hZGRyIDEwMzMuMjcgLXpvbmUgIjEwMzMiCisKK2luIG15IGF0YWxrZC5jb25mLiAgV2hhdCBpcyBnb2luZyBvbiBoZXJlIGlzIHRoYXQgSSBuZWVkIHRvIGZvb2wKK25ldGF0YWxrIGludG8gdGhpbmtpbmcgdGhhdCB0aGVyZSBhcmUgdHdvIEFwcGxlVGFsayBpbnRlcmZhY2VzCitwcmVzZW50OyBvdGhlcndpc2UsIGl0IHJlZnVzZXMgdG8gc2VlZC4gIFRoaXMgaXMgYSBoYWNrLCBhbmQgYSBtb3JlCitwZXJtYW5lbnQgc29sdXRpb24gd291bGQgYmUgdG8gYWx0ZXIgdGhlIG5ldGF0YWxrIGNvZGUuICBBbHNvLCBtYWtlCitzdXJlIHlvdSBoYXZlIHRoZSBjb3JyZWN0IG5hbWUgZm9yIHRoZSBkdW1teSBpbnRlcmZhY2UgLSBJZiBpdCdzCitjb21waWxlZCBhcyBhIG1vZHVsZSwgeW91IHdpbGwgbmVlZCB0byByZWZlciB0byBpdCBhcyAiZHVtbXkwIiBvciBzb21lCitzdWNoLgorCitJZiB5b3UgYXJlIGF0dGFjaGVkIHRvIGFuIGV4dGVuZGVkIEFwcGxlVGFsayBuZXR3b3JrLCB3aXRoIHJvdXRlcnMgb24KK2l0LCB0aGVuIHlvdSBkb24ndCBuZWVkIHRvIGZvb2wgYXJvdW5kIHdpdGggdGhpcyAtLSB0aGUgYXBwcm9wcmlhdGUKK2xpbmUgaW4gYXRhbGtkLmNvbmYgaXMKKworIGx0MCAtcGhhc2UgMQorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitDYXJkIENvbmZpZ3VyYXRpb246CisKK1RoZSBpbnRlcnJ1cHRzIGFuZCBzbyBmb3J0aCBhcmUgY29uZmlndXJlZCB2aWEgdGhlIGRpcHN3aXRjaCBvbiB0aGUKK2JvYXJkLiAgU2V0IHRoZSBzd2l0Y2hlcyBzbyBhcyBub3QgdG8gY29uZmxpY3Qgd2l0aCBvdGhlciBoYXJkd2FyZS4KKworICAgICAgIEludGVycnVwdHMgLS0gc2V0IGF0IG1vc3Qgb25lLiAgSWYgbm9uZSBhcmUgc2V0LCB0aGUgZHJpdmVyIHVzZXMKKyAgICAgICBwb2xsZWQgbW9kZS4gIEJlY2F1c2UgdGhlIGNhcmQgd2FzIGRldmVsb3BlZCBpbiB0aGUgWFQgZXJhLCB0aGUKKyAgICAgICBvcmlnaW5hbCBkb2N1bWVudGF0aW9uIHJlZmVycyB0byBJUlEyLiAgU2luY2UgeW91J2xsIGJlIHJ1bm5pbmcKKyAgICAgICB0aGlzIG9uIGFuIEFUIChvciBsYXRlcikgY2xhc3MgbWFjaGluZSwgdGhhdCByZWFsbHkgbWVhbnMgSVJROS4KKworICAgICAgIFNXMSAgICAgSVJRIDQKKyAgICAgICBTVzIgICAgIElSUSAzCisgICAgICAgU1czICAgICBJUlEgOSAoMiBpbiBvcmlnaW5hbCBjYXJkIGRvY3VtZW50YXRpb24gb25seSBhcHBsaWVzIHRvIFhUKQorCisKKyAgICAgICBETUEgLS0gY2hvb3NlIERNQSAxIG9yIDMsIGFuZCBzZXQgYm90aCBjb3JyZXNwb25kaW5nIHN3aXRjaGVzLgorCisgICAgICAgU1c0ICAgICBETUEgMworICAgICAgIFNXNSAgICAgRE1BIDEKKyAgICAgICBTVzYgICAgIERNQSAzCisgICAgICAgU1c3ICAgICBETUEgMQorCisKKyAgICAgICBJL08gYWRkcmVzcyAtLSBjaG9vc2Ugb25lLgorCisgICAgICAgU1c4ICAgICAyMjAgLyAyNDAKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworSVA6CisKK1llcywgaXQgaXMgcG9zc2libGUgdG8gZG8gSVAgb3ZlciBMb2NhbFRhbGsuICBIb3dldmVyLCB5b3UgY2FuJ3QganVzdAordHJlYXQgdGhlIExvY2FsVGFsayBkZXZpY2UgbGlrZSBhbiBvcmRpbmFyeSBFdGhlcm5ldCBkZXZpY2UsIGV2ZW4gaWYKK3RoYXQncyB3aGF0IGl0IGxvb2tzIGxpa2UgdG8gTmV0YXRhbGsuCisKK0luc3RlYWQsIHlvdSBmb2xsb3cgdGhlIHNhbWUgcHJvY2VkdXJlIGFzIGZvciBkb2luZyBJUCBpbiBFdGhlclRhbGsuCitTZWUgRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2lwZGRwLnR4dCBmb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUKK2tlcm5lbCBkcml2ZXIgYW5kIHVzZXJzcGFjZSB0b29scyBuZWVkZWQuCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0JVR1M6CisKK0lSUSBhdXRvcHJvYmluZyBvZnRlbiBkb2Vzbid0IHdvcmsgb24gYSBjb2xkIGJvb3QuICBUbyBnZXQgYXJvdW5kCit0aGlzLCBlaXRoZXIgY29tcGlsZSB0aGUgZHJpdmVyIGFzIGEgbW9kdWxlLCBvciBwYXNzIHRoZSBwYXJhbWV0ZXJzCitmb3IgdGhlIGNhcmQgdG8gdGhlIGtlcm5lbCBhcyBkZXNjcmliZWQgYWJvdmUuCisKK0Fsc28sIGFzIHVzdWFsLCBhdXRvcHJvYmluZyBpcyBub3QgcmVjb21tZW5kZWQgd2hlbiB5b3UgdXNlIHRoZSBkcml2ZXIKK2FzIGEgbW9kdWxlLiAodGhvdWdoIGl0IHVzdWFsbHkgd29ya3MgYXQgYm9vdCB0aW1lLCBhdCBsZWFzdCkKKworUG9sbGVkIG1vZGUgaXMgKnJlYWxseSogc2xvdyBzb21ldGltZXMsIGJ1dCB0aGlzIHNlZW1zIHRvIGRlcGVuZCBvbgordGhlIGNvbmZpZ3VyYXRpb24gb2YgdGhlIG5ldHdvcmsuCisKK0l0IG1heSB0aGVvcmV0aWNhbGx5IGJlIHBvc3NpYmxlIHRvIHVzZSB0d28gTFRQQyBjYXJkcyBpbiB0aGUgc2FtZQorbWFjaGluZSwgYnV0IHRoaXMgaXMgdW5zdXBwb3J0ZWQsIHNvIGlmIHlvdSByZWFsbHkgd2FudCB0byBkbyB0aGlzLAoreW91J2xsIHByb2JhYmx5IGhhdmUgdG8gaGFjayB0aGUgaW5pdGlhbGl6YXRpb24gY29kZSBhIGJpdC4KKworX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KKworVEhBTktTOgorCVRoYW5rcyB0byBBbGFuIENveCBmb3IgaGVscGZ1bCBkaXNjdXNzaW9ucyBlYXJseSBvbiBpbiB0aGlzCit3b3JrLCBhbmQgdG8gRGVuaXMgSGFpbnN3b3J0aCBmb3IgZG9pbmcgdGhlIGJsZWVkaW5nLWVkZ2UgdGVzdGluZy4KKworLS0gQnJhZGZvcmQgSm9obnNvbiA8YnJhZGZvcmRAbWF0aC51bW4uZWR1PgorCistLSBVcGRhdGVkIDExLzA5LzE5OTggYnkgRGF2aWQgSHVnZ2lucy1EYWluZXMgPGRoZEBkZWJpYW4ub3JnPgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL211bHRpY2FzdC50eHQgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvbXVsdGljYXN0LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MDQ5YTY0Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL211bHRpY2FzdC50eHQKQEAgLTAsMCArMSw2NCBAQAorQmVoYXZpb3VyIG9mIENhcmRzIFVuZGVyIE11bHRpY2FzdAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitUaGlzIGlzIGhvdyB0aGV5IGN1cnJlbnRseSBiZWhhdmUsIG5vdCB3aGF0IHRoZSBoYXJkd2FyZSBjYW4gZG8tLWZvciBleGFtcGxlLAordGhlIExhbmNlIGRyaXZlciBkb2Vzbid0IHVzZSBpdHMgZmlsdGVyLCBldmVuIHRob3VnaCB0aGUgY29kZSBmb3IgbG9hZGluZworaXQgaXMgaW4gdGhlIERFQyBMYW5jZS1iYXNlZCBkcml2ZXIuCisKK1RoZSBmb2xsb3dpbmcgYXJlIHJlcXVpcmVtZW50cyBmb3IgbXVsdGljYXN0aW5nIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0FwcGxlVGFsawlNdWx0aWNhc3QJaGFyZHdhcmUgZmlsdGVyaW5nIG5vdCBpbXBvcnRhbnQgYnV0CisJCQkJIGF2b2lkIGNhcmRzIG9ubHkgZG9pbmcgcHJvbWlzYworSVAtTXVsdGljYXN0CU11bHRpY2FzdAloYXJkd2FyZSBmaWx0ZXJzIHJlYWxseSBoZWxwCitJUC1NUm91dGUJQWxsTXVsdGkJaGFyZHdhcmUgZmlsdGVycyBhcmUgb2Ygbm8gaGVscAorCisKK0JvYXJkCQlNdWx0aWNhc3QJQWxsTXVsdGkJUHJvbWlzYwkJRmlsdGVyCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKzNjNTAxCQlZRVMJCVlFUwkJWUVTCQlTb2Z0d2FyZQorM2M1MDMJCVlFUwkJWUVTCQlZRVMJCUhhcmR3YXJlCiszYzUwNQkJWUVTCQlOTwkJWUVTCQlIYXJkd2FyZQorM2M1MDcJCU5PCQlOTwkJTk8JCU4vQQorM2M1MDkJCVlFUwkJWUVTCQlZRVMJCVNvZnR3YXJlCiszYzU5eAkJWUVTCQlZRVMJCVlFUwkJU29mdHdhcmUKK2FjMzIwMAkJWUVTCQlZRVMJCVlFUwkJSGFyZHdhcmUKK2Fwcmljb3QJCVlFUwkJUFJPTUlTQwkJWUVTCQlIYXJkd2FyZQorYXJjbmV0CQlOTwkJTk8JCU5PCQlOL0EKK2F0MTcwMAkJUFJPTUlTQwkJUFJPTUlTQwkJWUVTCQlTb2Z0d2FyZQorYXRwCQlQUk9NSVNDCQlQUk9NSVNDCQlZRVMJCVNvZnR3YXJlCitjczg5eDAJCVlFUwkJWUVTCQlZRVMJCVNvZnR3YXJlCitkZTR4NQkJWUVTCQlZRVMJCVlFUwkJSGFyZHdhcmUKK2RlNjAwCQlOTwkJTk8JCU5PCQlOL0EKK2RlNjIwCQlQUk9NSVNDCQlQUk9NSVNDCQlZRVMJCVNvZnR3YXJlCitkZXBjYQkJWUVTCQlQUk9NSVNDCQlZRVMJCUhhcmR3YXJlCitkbWZlCQlZRVMJCVlFUwkJWUVTCQlTb2Z0d2FyZSgqKQorZTIxMDAJCVlFUwkJWUVTCQlZRVMJCUhhcmR3YXJlCitlZXBybwkJWUVTCQlQUk9NSVNDCQlZRVMJCUhhcmR3YXJlCitlZXhwcmVzcwlOTwkJTk8JCU5PCQlOL0EKK2V3cmszCQlZRVMJCVBST01JU0MJCVlFUwkJSGFyZHdhcmUKK2hwLXBsdXMJCVlFUwkJWUVTCQlZRVMJCUhhcmR3YXJlCitocAkJWUVTCQlZRVMJCVlFUwkJSGFyZHdhcmUKK2hwMTAwCQlZRVMJCVlFUwkJWUVTCQlIYXJkd2FyZQoraWJtdHIJCU5PCQlOTwkJTk8JCU4vQQoraW9jMy1ldGgJWUVTCQlZRVMJCVlFUwkJSGFyZHdhcmUKK2xhbmNlCQlZRVMJCVlFUwkJWUVTCQlTb2Z0d2FyZSgjKQorbmUJCVlFUwkJWUVTCQlZRVMJCUhhcmR3YXJlCituaTUyCQk8LS0tLS0tLS0tLS0tLS0tLS0tIEJ1Z2d5IC0tLS0tLS0tLS0tLS0tLS0tLT4KK25pNjUJCVlFUwkJWUVTCQlZRVMJCVNvZnR3YXJlKCMpCitzZWVxCQlOTwkJTk8JCU5PCQlOL0EKK3NnaXNlZWsJCTwtLS0tLS0tLS0tLS0tLS0tLS0gQnVnZ3kgLS0tLS0tLS0tLS0tLS0tLS0tPgorc2tfZzE2CQlOTwkJTk8JCVlFUwkJTi9BCitzbWMtdWx0cmEJWUVTCQlZRVMJCVlFUwkJSGFyZHdhcmUKK3N1bmxhbmNlCVlFUwkJWUVTCQlZRVMJCUhhcmR3YXJlCit0dWxpcAkJWUVTCQlZRVMJCVlFUwkJSGFyZHdhcmUKK3dhdmVsYW4JCVlFUwkJUFJPTUlTQwkJWUVTCQlIYXJkd2FyZQord2QJCVlFUwkJWUVTCQlZRVMJCUhhcmR3YXJlCit4aXJjMnBzX2NzCVlFUwkJWUVTCQlZRVMJCUhhcmR3YXJlCit6bmV0CQlZRVMJCVlFUwkJWUVTCQlTb2Z0d2FyZQorCisKK1BST01JU0MgPSBUaGlzIG11bHRpY2FzdCBtb2RlIGlzIGluIGZhY3QgcHJvbWlzY3VvdXMgbW9kZS4gQXZvaWQgdXNpbmcKK2NhcmRzIHdobyBnbyBQUk9NSVNDIG9uIGFueSBtdWx0aWNhc3QgaW4gYSBtdWx0aWNhc3Qga2VybmVsLgorCisoIykgPSBIYXJkd2FyZSBtdWx0aWNhc3Qgc3VwcG9ydCBpcyBub3QgdXNlZCB5ZXQuCisoKikgPSBIYXJkd2FyZSBzdXBwb3J0IGZvciBEYXZpY29tIDkxMzIgY2hpcHNldCBvbmx5LgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25jc2EtdGVsbmV0IGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25jc2EtdGVsbmV0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ3N2QyOGIKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvbmNzYS10ZWxuZXQKQEAgLTAsMCArMSwxNiBAQAorTkNTQSB0ZWxuZXQgZG9lc24ndCB3b3JrIHdpdGggcGF0aCBNVFUgZGlzY292ZXJ5IGVuYWJsZWQuIFRoaXMgaXMgZHVlIHRvIGEKK2J1ZyBpbiBOQ1NBIHRoYXQgYWxzbyBzdG9wcyBpdCB3b3JraW5nIHdpdGggb3RoZXIgbW9kZXJuIG5ldHdvcmtpbmcgY29kZQorc3VjaCBhcyBTb2xhcmlzLgorCitUaGUgZm9sbG93aW5nIGluZm9ybWF0aW9uIGlzIGNvdXJ0ZXN5IG9mIAorTWFyZWsgPG1hcmVrbUBpMTdsaW51eGIuaXN0cy5wd3Iud3JvYy5wbD4KKworVGhlcmUgaXMgYSBmaXhlZCB2ZXJzaW9uIHNvbWV3aGVyZSBvbiBmdHAudXBlLmFjLnphIChzb3JyeSwgSSBkb24ndAorcmVtZW1iZXIgdGhlIGV4YWN0IHBhdGhuYW1lLCBhbmQgdGhpcyBzaXRlIGlzIHZlcnkgc2xvdyBmcm9tIGhlcmUpLgorSXQgbWF5IG9yIG1heSBub3QgYmUgZmFzdGVyIGZvciB5b3UgdG8gZ2V0IGl0IGZyb20KK2Z0cDovL2Z0cC5pc3RzLnB3ci53cm9jLnBsL3B1Yi9tc2Rvcy90ZWxuZXQvbmNzYV91cGUvdGVsMjMwNzQuemlwCisoc291cmNlIGlzIGluIHYyMzA3MDRzLnppcCkuICBJIGhhdmUgdGVzdGVkIGl0IHdpdGggMS4zLjc5ICh3aXRoCitwYXRoIG10dSBkaXNjb3ZlcnkgZW5hYmxlZCAtIG5jc2EgMi4zLjA4IGRpZG4ndCB3b3JrKSBhbmQgaXQgc2VlbXMKK3RvIHdvcmsuICBJIGRvbid0IGtub3cgaWYgYW55b25lIGlzIHdvcmtpbmcgb24gdGhpcyBjb2RlIC0gdGhpcwordmVyc2lvbiBpcyBvdmVyIGEgeWVhciBvbGQuICBUb28gYmFkIC0gaXQncyBmYXN0ZXIgYW5kIG9mdGVuIG1vcmUKK3N0YWJsZSB0aGFuIHRoZXNlIHdpbmRvemUgdGVsbmV0cywgYW5kIHJ1bnMgb24gYWxtb3N0IGFueXRoaW5nLi4uCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvbmV0LW1vZHVsZXMudHh0IGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25ldC1tb2R1bGVzLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zODMwYTgzCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25ldC1tb2R1bGVzLnR4dApAQCAtMCwwICsxLDMyNCBAQAorV2VkIDItQXVnLTk1ICA8bWF0dGkuYWFybmlvQHV0dS5maT4KKworCQlMaW51eCBuZXR3b3JrIGRyaXZlciBtb2R1bGVzCisKKwlEbyBub3QgbWlzdGFrZSB0aGlzIGZvciAiUkVBRE1FLm1vZHVsZXMiIGF0IHRoZSB0b3AtbGV2ZWwKKwlkaXJlY3RvcnkhICBUaGF0IGRvY3VtZW50IHRlbGxzIGFib3V0IG1vZHVsZXMgaW4gZ2VuZXJhbCwgd2hpbGUKKwl0aGlzIG9uZSB0ZWxscyBvbmx5IGFib3V0IG5ldHdvcmsgZGV2aWNlIGRyaXZlciBtb2R1bGVzLgorCisJVGhpcyBpcyBhIHBvdHBvdXJyaSBvZiBJTlNNT0QtdGltZSgqKSBjb25maWd1cmF0aW9uIG9wdGlvbnMKKwkoaWYgc3VjaCBleGlzdHMpIGFuZCB0aGVpciBkZWZhdWx0IHZhbHVlcyBvZiB2YXJpb3VzIG1vZHVsZXMKKwlpbiB0aGUgTGludXggbmV0d29yayBkcml2ZXJzIGNvbGxlY3Rpb24uCisKKwlTb21lIG1vZHVsZXMgaGF2ZSBhbHNvIGhpZGRlbiAoPSBub24tZG9jdW1lbnRlZCkgdHVuYWJsZSB2YWx1ZXMuCisJVGhlIGNob2ljZSBvZiBub3QgZG9jdW1lbnRpbmcgdGhlbSBpcyBiYXNlZCBvbiBnZW5lcmFsIGJlbGllZiwgdGhhdAorCXRoZSBsZXNzIHRoZSB1c2VyIG5lZWRzIHRvIGtub3csIHRoZSBiZXR0ZXIuICAoVGhlcmUgYXJlIHRoaW5ncyB0aGF0CisJZHJpdmVyIGRldmVsb3BlcnMgY2FuIHVzZSwgb3RoZXJzIHNob3VsZCBub3QgY29uZnVzZSB0aGVtc2VsdmVzLikKKworCUluIG1hbnkgY2FzZXMgaXQgaXMgaGlnaGx5IHByZWZlcnJlZCB0aGF0IGluc21vZDppbmcgaXMgZG9uZQorCU9OTFkgd2l0aCBkZWZpbmluZyBhbiBleHBsaWNpdCBhZGRyZXNzIGZvciB0aGUgY2FyZCwgQU5EIEJZCisJTk9UIFVTSU5HIEFVVE8tUFJPQklORyEKKworCU5vdyBtb3N0IGNhcmRzIGhhdmUgc29tZSBleHBsaWNpdGx5IGRlZmluZWQgYmFzZSBhZGRyZXNzIHRoYXQgdGhleQorCWFyZSBjb21waWxlZCB3aXRoICh0byBhdm9pZCBhdXRvLXByb2JpbmcsIGFtb25nIG90aGVyIHRoaW5ncykuCisJSWYgdGhhdCBjb21waWxlZCB2YWx1ZSBkb2VzIG5vdCBtYXRjaCB5b3VyIGFjdHVhbCBjb25maWd1cmF0aW9uLAorCWRvIHVzZSB0aGUgImlvPTB4WFhYIiAtcGFyYW1ldGVyIGZvciB0aGUgaW5zbW9kLCBhbmQgZ2l2ZSB0aGVyZQorCWEgdmFsdWUgbWF0Y2hpbmcgeW91ciBlbnZpcm9ubWVudC4KKworCUlmIHlvdSBhcmUgYWR2ZW50dXJvdXMsIHlvdSBjYW4gYXNrIHRoZSBkcml2ZXIgdG8gYXV0b3Byb2JlCisJYnkgdXNpbmcgdGhlICJpbz0wIiBwYXJhbWV0ZXIsIGhvd2V2ZXIgaXQgaXMgYSBwb3RlbnRpYWxseSBkYW5nZXJvdXMKKwl0aGluZyB0byBkbyBpbiBhIGxpdmUgc3lzdGVtLiAgKElmIHlvdSBkb24ndCBrbm93IHdoZXJlIHRoZQorCWNhcmQgaXMgbG9jYXRlZCwgeW91IGNhbiB0cnkgYXV0b3Byb2JpbmcsIGFuZCBhZnRlciBwb3NzaWJsZQorCWNyYXNoIHJlY292ZXJ5LCBpbnNtb2Qgd2l0aCBwcm9wZXIgSU8tYWRkcmVzcy4uKQorCisJLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwkoKikJIklOU01PRC10aW1lIiBtZWFucyB3aGVuIHlvdSBsb2FkIG1vZHVsZSB3aXRoCisJCS9zYmluL2luc21vZCAgeW91IGNhbiBmZWVkIGl0IG9wdGlvbmFsIHBhcmFtZXRlcnMuCisJCVNlZSAibWFuIGluc21vZCIuCisJLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworCisJODM5MCBiYXNlZCBOZXR3b3JrIE1vZHVsZXMJCShQYXVsIEdvcnRtYWtlciwgTm92IDEyLCAxOTk1KQorCS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyhJbmNsdWRlczogc21jLXVsdHJhLCBuZSwgd2QsIDNjNTAzLCBocCwgaHAtcGx1cywgZTIxMDAgYW5kIGFjMzIwMCkKKworVGhlIDgzOTAgc2VyaWVzIG9mIG5ldHdvcmsgZHJpdmVycyBub3cgc3VwcG9ydCBtdWx0aXBsZSBjYXJkIHN5c3RlbXMgd2l0aG91dCAKK3JlbG9hZGluZyB0aGUgc2FtZSBtb2R1bGUgbXVsdGlwbGUgdGltZXMgKG1lbW9yeSBlZmZpY2llbnQhKSBUaGlzIGlzIGRvbmUgYnkgCitzcGVjaWZ5aW5nIG11bHRpcGxlIGNvbW1hIHNlcGFyYXRlZCB2YWx1ZXMsIHN1Y2ggYXM6CisKKwlpbnNtb2QgM2M1MDMubyBpbz0weDI4MCwweDMwMCwweDMzMCwweDM1MCAgeGN2cj0wLDEsMCwxCisKK1RoZSBhYm92ZSB3b3VsZCBoYXZlIHRoZSBvbmUgbW9kdWxlIGNvbnRyb2xsaW5nIGZvdXIgM2M1MDMgY2FyZHMsIHdpdGggY2FyZCAyCithbmQgNCB1c2luZyBleHRlcm5hbCB0cmFuc2NlaXZlcnMuIFRoZSAiaW5zbW9kIiBtYW51YWwgZGVzY3JpYmVzIHRoZSB1c2FnZQorb2YgY29tbWEgc2VwYXJhdGVkIHZhbHVlIGxpc3RzLgorCitJdCBpcyAqU1RST05HTFkgUkVDT01NRU5ERUQqIHRoYXQgeW91IHN1cHBseSAiaW89IiBpbnN0ZWFkIG9mIGF1dG9wcm9iaW5nLgorSWYgYW4gImlvPSIgYXJndW1lbnQgaXMgbm90IHN1cHBsaWVkLCB0aGVuIHRoZSBJU0EgZHJpdmVycyB3aWxsIGNvbXBsYWluCithYm91dCBhdXRvcHJvYmluZyBiZWluZyBub3QgcmVjb21tZW5kZWQsIGFuZCBiZWdydWRnaW5nbHkgYXV0b3Byb2JlIGZvcgorYSAqU0lOR0xFIENBUkQgT05MWSogLS0gaWYgeW91IHdhbnQgdG8gdXNlIG11bHRpcGxlIGNhcmRzIHlvdSAqaGF2ZSogdG8gCitzdXBwbHkgYW4gImlvPTB4Tk5OLDB4UVFRLC4uLiIgYXJndW1lbnQuCisKK1RoZSBuZSBtb2R1bGUgaXMgYW4gZXhjZXB0aW9uIHRvIHRoZSBhYm92ZS4gQSBORTIwMDAgaXMgZXNzZW50aWFsbHkgYW4KKzgzOTAgY2hpcCwgc29tZSBidXMgZ2x1ZSBhbmQgc29tZSBSQU0uIEJlY2F1c2Ugb2YgdGhpcywgdGhlIG5lIHByb2JlIGlzCittb3JlIGludmFzaXZlIHRoYW4gdGhlIHJlc3QsIGFuZCBzbyBhdCBib290IHdlIG1ha2Ugc3VyZSB0aGUgbmUgcHJvYmUgaXMgCitkb25lIGxhc3Qgb2YgYWxsIHRoZSA4MzkwIGNhcmRzIChzbyB0aGF0IGl0IHdvbid0IHRyaXAgb3ZlciBvdGhlciA4MzkwIGJhc2VkCitjYXJkcykgV2l0aCBtb2R1bGVzIHdlIGNhbid0IGVuc3VyZSB0aGF0IGFsbCBvdGhlciBub24tbmUgODM5MCBjYXJkcyBoYXZlCithbHJlYWR5IGJlZW4gZm91bmQuIEJlY2F1c2Ugb2YgdGhpcywgdGhlIG5lIG1vZHVsZSBSRVFVSVJFUyBhbiAiaW89MHhOTk4iIAorYXJndW1lbnQgcGFzc2VkIGluIHZpYSBpbnNtb2QuIEl0IHdpbGwgcmVmdXNlIHRvIGF1dG9wcm9iZS4KKworSXQgaXMgYWxzbyB3b3J0aCBub3RpbmcgdGhhdCBhdXRvLUlSUSBwcm9iYWJseSBpc24ndCBhcyByZWxpYWJsZSBkdXJpbmcgCit0aGUgZmx1cnJ5IG9mIGludGVycnVwdCBhY3Rpdml0eSBvbiBhIHJ1bm5pbmcgbWFjaGluZS4gQ2FyZHMgc3VjaCBhcyB0aGUgCituZTIwMDAgdGhhdCBjYW4ndCBnZXQgdGhlIElSUSBzZXR0aW5nIGZyb20gYW4gRUVQUk9NIG9yIGNvbmZpZ3VyYXRpb24KK3JlZ2lzdGVyIGFyZSBwcm9iYWJseSBiZXN0IHN1cHBsaWVkIHdpdGggYW4gImlycT1NIiBhcmd1bWVudCBhcyB3ZWxsLgorCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0NhcmQvTW9kdWxlIExpc3QgLSBDb25maWd1cmFibGUgUGFyYW1ldGVycyBhbmQgRGVmYXVsdCBWYWx1ZXMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworM2M1MDEuYzoKKwlpbyAgPSAweDI4MAlJTyBiYXNlIGFkZHJlc3MKKwlpcnEgPSA1CQlJUlEKKwkoUHJvYmVzIHBvcnRzOgkweDI4MCwgMHgzMDApCisKKzNjNTAzLmM6CisJaW8gPSAwCQkoSXQgd2lsbCBjb21wbGFpbiBpZiB5b3UgZG9uJ3Qgc3VwcGx5IGFuICJpbz0weE5OTiIpCisJaXJxID0gMAkJKElSUSBzb2Z0d2FyZSBzZWxlY3RlZCBieSBkcml2ZXIgdXNpbmcgYXV0b0lSUSkKKwl4Y3ZyID0gMAkoVXNlIHhjdnI9MSB0byBzZWxlY3QgZXh0ZXJuYWwgdHJhbnNjZWl2ZXIuKQorCShQcm9iZXMgcG9ydHM6IDB4MzAwLCAweDMxMCwgMHgzMzAsIDB4MzUwLCAweDI1MCwgMHgyODAsIDB4MkEwLCAweDJFMCkKKworM2M1MDUuYzoKKwlpbyA9IDAKKwlpcnEgPSAwCisJZG1hID0gNiAgICAgICAgIChub3QgYXV0b3Byb2JlZCkKKwkoUHJvYmVzIHBvcnRzOiAweDMwMCwgMHgyODAsIDB4MzEwKQorCiszYzUwNy5jOgorCWlvID0gMHgzMDAKKwlpcnEgPSAwCisJKFByb2JlcyBwb3J0czogMHgzMDAsIDB4MzIwLCAweDM0MCwgMHgyODApCisKKzNjNTA5LmM6CisJaW8gPSAwCisJaXJxID0gMAorCSggTW9kdWxlIGxvYWQtdGltZSBwcm9iaW5nIFdvcmtzIHJlbGlhYmx5IG9ubHkgb24gRUlTQSwgSVNBIElELVBST0JFCisJICBJUyBOT1QgUkVMSUFCTEUhICBDb21waWxlIHRoaXMgZHJpdmVyIHN0YXRpY2FsbHkgaW50byBrZXJuZWwgZm9yCisJICBub3csIGlmIHlvdSBuZWVkIGl0IGF1dG8tcHJvYmluZyBvbiBhbiBJU0EtYnVzIG1hY2hpbmUuICkKKworODM5MC5jOgorCShObyBwdWJsaWMgb3B0aW9ucywgc2V2ZXJhbCBvdGhlciBtb2R1bGVzIG5lZWQgdGhpcyBvbmUpCisKK2EyMDY1LmM6CisJU2luY2UgdGhpcyBpcyBhIFpvcnJvIGJvYXJkLCBpdCBzdXBwb3J0cyBmdWxsIGF1dG9wcm9iaW5nLCBldmVuIGZvcgorCW11bHRpcGxlIGJvYXJkcy4gKG02OGsvQW1pZ2EpCisKK2FjMzIwMC5jOgorCWlvID0gMAkJKENoZWNrcyAweDEwMDAgdG8gMHg4ZmZmIGluIDB4MTAwMCBpbnRlcnZhbHMpCisJaXJxID0gMAkJKFJlYWQgZnJvbSBjb25maWcgcmVnaXN0ZXIpCisJKEVJU0EgcHJvYmluZy4uKQorCithcHJpY290LmM6CisJaW8gPSAweDMwMCAgKENhbid0IGJlIGFsdGVyZWQhKQorCWlycSA9IDEwCisKK2FyY25ldC5jOgorCWlvID0gMAorCWlycW51bSA9IDAKKwlzaG1lbSA9IDAKKwludW0gPSAwCisJRE8gU0VUIFRIRVNFIE1BTlVBTExZIEFUIElOU01PRCEKKwkoV2hlbiBwcm9iaW5nLCBsb29rcyBhdCB0aGUgZm9sbG93aW5nIHBvc3NpYmxlIGFkZHJlc3NlczoKKwkgU3VnZ2VzdGVkIG9uZXM6CisJCTB4MzAwLCAweDJFMCwgMHgyRjAsIDB4MkQwCisJIE90aGVyIG9uZXM6CisJCTB4MjAwLCAweDIxMCwgMHgyMjAsIDB4MjMwLCAweDI0MCwgMHgyNTAsIDB4MjYwLCAweDI3MCwKKwkJMHgyODAsIDB4MjkwLCAweDJBMCwgMHgyQjAsIDB4MkMwLAorCQkgICAgICAgMHgzMTAsIDB4MzIwLCAweDMzMCwgMHgzNDAsIDB4MzUwLCAweDM2MCwgMHgzNzAsCisJCTB4MzgwLCAweDM5MCwgMHgzQTAsCQkJICAweDNFMCwgMHgzRjAgICkKKworYXJpYWRuZS5jOgorCVNpbmNlIHRoaXMgaXMgYSBab3JybyBib2FyZCwgaXQgc3VwcG9ydHMgZnVsbCBhdXRvcHJvYmluZywgZXZlbiBmb3IKKwltdWx0aXBsZSBib2FyZHMuIChtNjhrL0FtaWdhKQorCithdDE3MDAuYzoKKwlpbyA9IDB4MjYwCisJaXJxID0gMAorCShQcm9iZXMgcG9ydHM6IDB4MjYwLCAweDI4MCwgMHgyQTAsIDB4MjQwLCAweDM0MCwgMHgzMjAsIDB4MzgwLCAweDMwMCkKKworYXRhcmlfYmlvbmV0LmM6CisJU3VwcG9ydHMgZnVsbCBhdXRvcHJvYmluZy4gKG02OGsvQXRhcmkpCisKK2F0YXJpX3BhbXNuZXQuYzoKKwlTdXBwb3J0cyBmdWxsIGF1dG9wcm9iaW5nLiAobTY4ay9BdGFyaSkKKworYXRhcmlsYW5jZS5jOgorCVN1cHBvcnRzIGZ1bGwgYXV0b3Byb2JpbmcuIChtNjhrL0F0YXJpKQorCithdHAuYzogKk5vdCBtb2R1bGFyaXplZCoKKwkoUHJvYmVzIHBvcnRzOiAweDM3OCwgMHgyNzgsIDB4M0JDOworCSBmaXhlZCBJUlFzOiA1IGFuZCA3CQkJKQorCitjb3BzLmM6CisJaW8gPSAweDI0MAorCWlycSA9IDUKKwlub2RlaWQgPSAwCShBdXRvU2VsZWN0ID0gMCwgTm9kZUlEIDEtMjU0IGlzIGhhbmQgc2VsZWN0ZWQuKQorCShQcm9iZXMgcG9ydHM6IDB4MjQwLCAweDM0MCwgMHgyMDAsIDB4MjEwLCAweDIyMCwgMHgyMzAsIDB4MjYwLAorCQkgICAgICAgMHgyQTAsIDB4MzAwLCAweDMxMCwgMHgzMjAsIDB4MzMwLCAweDM1MCwgMHgzNjApCQorCitkZTR4NS5jOgorCWlvID0gMHgwMDBiCisJaXJxID0gMTAKKwlpc19ub3RfZGVjID0gMCAgLS0gRm9yIG5vbi1ERUMgY2FyZCB1c2luZyBERUMgMjEwNDAvMjEwNDEvMjExNDAgY2hpcCwgc2V0IHRoaXMgdG8gMQorCShFSVNBLCBhbmQgUENJIHByb2JpbmcpCisKK2RlNjAwLmM6CisJZGU2MDBfZGVidWcgPSAwCisJKE9uIHBvcnQgMHgzNzgsIGlycSA3IC0tIGxwdDE7ICBjb21waWxlIHRpbWUgY29uZmlndXJhYmxlKQorCitkZTYyMC5jOgorCWJuYyA9IDAsIHV0cCA9IDAgIDwtLSBGb3JjZSBtZWRpYSBieSBzZXR0aW5nIGVpdGhlci4KKwlpbyA9IDB4Mzc4CShhbHNvIGNvbXBpbGUtdGltZSBjb25maWd1cmFibGUpCisJaXJxID0gNworCitkZXBjYS5jOgorCWlvID0gMHgyMDAKKwlpcnEgPSA3CisJKFByb2JlcyBwb3J0czoJSVNBOiAgMHgzMDAsIDB4MjAwOworCQkJRUlTQTogMHgwYzAwCQkpCisKK2R1bW15LmM6CisJTm8gb3B0aW9ucworCitlMjEwMC5jOgorCWlvID0gMAkJKEl0IHdpbGwgY29tcGxhaW4gaWYgeW91IGRvbid0IHN1cHBseSBhbiAiaW89MHhOTk4iKQorCWlycSA9IDAJCShJUlEgc29mdHdhcmUgc2VsZWN0ZWQgYnkgZHJpdmVyKQorCW1lbSA9IDAJCShPdmVycmlkZSBkZWZhdWx0IHNoYXJlZCBtZW1vcnkgc3RhcnQgb2YgMHhkMDAwMCkKKwl4Y3ZyID0gMAkoVXNlIHhjdnI9MSB0byBzZWxlY3QgZXh0ZXJuYWwgdHJhbnNjZWl2ZXIuKQorCShQcm9iZXMgcG9ydHM6IDB4MzAwLCAweDI4MCwgMHgzODAsIDB4MjIwKQorCitlZXByby5jOgorCWlvID0gMHgyMDAKKwlpcnEgPSAwCisJKFByb2JlcyBwb3J0czogMHgyMDAsIDB4MjQwLCAweDI4MCwgMHgyQzAsIDB4MzAwLCAweDMyMCwgMHgzNDAsIDB4MzYwKQorCitlZXhwcmVzcy5jOgorCWlvID0gMHgzMDAKKwlpcnEgPSAwCQkoSVJRIHZhbHVlIHJlYWQgZnJvbSBFRVBST00pCisJKFByb2JlcyBwb3J0czogMHgzMDAsIDB4MjcwLCAweDMyMCwgMHgzNDApCisKK2VxbC5jOgorCShObyBwYXJhbWV0ZXJzKQorCitld3JrMy5jOgorCWlvID0gMHgzMDAKKwlpcnEgPSA1CisJKFdpdGggbW9kdWxlIG5vIGF1dG9wcm9iaW5nIQorCSBPbiBFSVNBLWJ1cyBkb2VzIEVJU0EgcHJvYmluZy4KKwkgU3RhdGljIGxpbmthZ2UgcHJvYmVzIHBvcnRzIG9uIElTQSBidXM6CisJCTB4MTAwLCAweDEyMCwgMHgxNDAsIDB4MTYwLCAweDE4MCwgMHgxQTAsIDB4MUMwLAorCQkweDIwMCwgMHgyMjAsIDB4MjQwLCAweDI2MCwgMHgyODAsIDB4MkEwLCAweDJDMCwgMHgyRTAsCisJCTB4MzAwLCAgICAgICAgMHgzNDAsIDB4MzYwLCAweDM4MCwgMHgzQTAsIDB4M0MwKQorCitocC1wbHVzLmM6CisJaW8gPSAwCQkoSXQgd2lsbCBjb21wbGFpbiBpZiB5b3UgZG9uJ3Qgc3VwcGx5IGFuICJpbz0weE5OTiIpCisJaXJxID0gMAkJKElSUSByZWFkIGZyb20gY29uZmlndXJhdGlvbiByZWdpc3RlcikKKwkoUHJvYmVzIHBvcnRzOiAweDIwMCwgMHgyNDAsIDB4MjgwLCAweDJDMCwgMHgzMDAsIDB4MzIwLCAweDM0MCkKKworaHAuYzoKKwlpbyA9IDAJCShJdCB3aWxsIGNvbXBsYWluIGlmIHlvdSBkb24ndCBzdXBwbHkgYW4gImlvPTB4Tk5OIikKKwlpcnEgPSAwCQkoSVJRIHNvZnR3YXJlIHNlbGVjdGVkIGJ5IGRyaXZlciB1c2luZyBhdXRvSVJRKQorCShQcm9iZXMgcG9ydHM6IDB4MzAwLCAweDMyMCwgMHgzNDAsIDB4MjgwLCAweDJDMCwgMHgyMDAsIDB4MjQwKQorCitocDEwMC5jOgorCWhwMTAwX3BvcnQgPSAwIChJTy1iYXNlIGFkZHJlc3MpCisJKERvZXMgRUlTQS1wcm9iaW5nLCBpZiBvbiBFSVNBLXNsb3Q7CisJIE9uIElTQS1idXMgcHJvYmVzIGFsbCBwb3J0cyBmcm9tIDB4MTAwIHRocnUgdG8gMHgzRTAKKwkgaW4gaW5jcmVtZW50cyBvZiAweDAyMCkKKworaHlkcmEuYzoKKwlTaW5jZSB0aGlzIGlzIGEgWm9ycm8gYm9hcmQsIGl0IHN1cHBvcnRzIGZ1bGwgYXV0b3Byb2JpbmcsIGV2ZW4gZm9yCisJbXVsdGlwbGUgYm9hcmRzLiAobTY4ay9BbWlnYSkKKworaWJtdHIuYzoKKwlpbyA9IDB4YTIwLCAweGEyNCAoYXV0b3Byb2JlZCBieSBkZWZhdWx0KQorCWlycSA9IDAgKGRyaXZlciBjYW5ub3Qgc2VsZWN0IGlycSAtIHJlYWQgZnJvbSBoYXJkd2FyZSkKKwltZW0gPSAwIChzaGFyZWQgbWVtb3J5IGJhc2Ugc2V0IGF0IDB4ZDAwMDAgYW5kIG5vdCB5ZXQgCisJICAgICAgICAgYWJsZSB0byBvdmVycmlkZSB0aHJ1IG1lbT0gcGFyYW1ldGVyLikKKworbGFuY2UuYzogKk5vdCBtb2R1bGFyaXplZCoKKwkoUENJLCBhbmQgSVNBIHByb2Jpbmc7ICJDT05GSUdfUENJIiBuZWVkZWQgZm9yIFBDSSBzdXBwb3J0KQorCShQcm9iZXMgSVNBIHBvcnRzOiAweDMwMCwgMHgzMjAsIDB4MzQwLCAweDM2MCkKKworbG9vcGJhY2suYzogKlN0YXRpYyBrZXJuZWwgY29tcG9uZW50KgorCituZS5jOgorCWlvID0gMAkJKEV4cGxpY2l0bHkgKnJlcXVpcmVzKiBhbiAiaW89MHhOTk4iIHZhbHVlKQorCWlycSA9IDAJCShUcmllcyB0byBkZXRlcm1pbmUgY29uZmlndXJlZCBJUlEgdmlhIGF1dG9JUlEpCisJKFByb2JlcyBwb3J0czogMHgzMDAsIDB4MjgwLCAweDMyMCwgMHgzNDAsIDB4MzYwKQorCituZXRfaW5pdC5jOiAqU3RhdGljIGtlcm5lbCBjb21wb25lbnQqCisKK25pNTIuYzogKk5vdCBtb2R1bGFyaXplZCoKKwkoUHJvYmVzIHBvcnRzOgkweDMwMCwgMHgyODAsIDB4MzYwLCAweDMyMCwgMHgzNDAKKwkJbWVtczoJMHhEMDAwMCwgMHhEMjAwMCwgMHhDODAwMCwgMHhDQTAwMCwKKwkJCTB4RDQwMDAsIDB4RDYwMDAsIDB4RDgwMDAgKQorCituaTY1LmM6ICpOb3QgbW9kdWxhcml6ZWQqICAqKjE2TUIgTUVNT1JZIEJBUlJJRVIgQlVHKioKKwkoUHJvYmVzIHBvcnRzOgkweDMwMCwgMHgzMjAsIDB4MzQwLCAweDM2MCkKKworcGkyLmM6CSpOb3QgbW9kdWxhcml6ZWQqICh3ZWxsLCBOT04tU1RBTkRBUkQgbW9kdWxhcml6YXRpb24hKQorCU9ubHkgb25lIGNhcmQgc3VwcG9ydGVkIGF0IHRoaXMgdGltZS4KKwkoUHJvYmVzIHBvcnRzOiAweDM4MCwgMHgzMDAsIDB4MzIwLCAweDM0MCwgMHgzNjAsIDB4M0EwKQorCitwbGlwLmM6CisJaW8gPSAwCisJaXJxID0gMAkJKGJ5IGRlZmF1bHQsIHVzZXMgSVJRIDUgZm9yIHBvcnQgYXQgMHgzYmMsIElSUSA3CisJCQlmb3IgcG9ydCBhdCAweDM3OCwgYW5kIElSUSAyIGZvciBwb3J0IGF0IDB4Mjc4KQorCShQcm9iZXMgcG9ydHM6IDB4Mjc4LCAweDM3OCwgMHgzYmMpCisKK3BwcC5jOgorCU5vIG9wdGlvbnMgKHBwcC0yLjIrIGhhcyBzb21lLCB0aGlzIGlzIGJhc2VkIG9uIG5vbi1keW5hbWljCisJdmVyc2lvbiBmcm9tIHBwcC0yLjEuMmQpCisKK3NlZXE4MDA1LmM6ICpOb3QgbW9kdWxhcml6ZWQqCisJKFByb2JlcyBwb3J0czogMHgzMDAsIDB4MzIwLCAweDM0MCwgMHgzNjApCisKK3NrX2cxNi5jOiAqTm90IG1vZHVsYXJpemVkKgorCShQcm9iZXMgcG9ydHM6IDB4MTAwLCAweDE4MCwgMHgyMDgsIDB4MjIwbSAweDI4OCwgMHgzMjAsIDB4MzI4LCAweDM5MCkKKworc2tlbGV0b24uYzogKlNrZWxldG9uKgorCitzbGhjLmM6CisJTm8gY29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzCisKK3NsaXAuYzoKKwlzbGlwX21heGRldiA9IDI1NiAoZGVmYXVsdCB2YWx1ZSBmcm9tIFNMX05SVU5JVCBvbiBzbGlwLmgpCisKKworc21jLXVsdHJhLmM6CisJaW8gPSAwCQkoSXQgd2lsbCBjb21wbGFpbiBpZiB5b3UgZG9uJ3Qgc3VwcGx5IGFuICJpbz0weE5OTiIpCisJaXJxID0gMAkJKElSUSB2YWwuIHJlYWQgZnJvbSBFRVBST00pCisJKFByb2JlcyBwb3J0czoJMHgyMDAsIDB4MjIwLCAweDI0MCwgMHgyODAsIDB4MzAwLCAweDM0MCwgMHgzODApCisKK3R1bGlwLmM6ICpQYXJ0aWFsIG1vZHVsYXJpemF0aW9uKgorCShpbml0LXRpbWUgbWVtb3J5IGFsbG9jYXRpb24gbWFrZXMgcHJvYmxlbXMuLikKKwordHVubmVsLmM6CisJTm8gaW5zbW9kIHBhcmFtZXRlcnMKKword2F2ZWxhbi5jOgorCWlvID0gMHgzOTAJKFNldHRhYmxlLCBidXQgY2hhbmdlIG5vdCByZWNvbW1lbmRlZCkKKwlpcnEgPSAwCQkoTm90IGhvbm91cmVkLCBpZiBjaGFuZ2VkLi4pCisKK3dkLmM6CisJaW8gPSAwCQkoSXQgd2lsbCBjb21wbGFpbiBpZiB5b3UgZG9uJ3Qgc3VwcGx5IGFuICJpbz0weE5OTiIpCisJaXJxID0gMAkJKElSUSB2YWwuIHJlYWQgZnJvbSBFRVBST00sIGFuY2llbnQgY2FyZHMgdXNlIGF1dG9JUlEpCisJbWVtID0gMAkJKEZvcmNlIHNoYXJlZC1tZW1vcnkgb24gYWRkcmVzcyAweEM4MDAwLCBvciB3aGF0ZXZlci4uKQorCW1lbV9lbmQgPSAwCShGb3JjZSBub24tc3RkLiBtZW0uIHNpemUgdmlhIHN1cHBseWluZyBtZW1fZW5kIHZhbC4pCisJCQkoZWcuIGZvciAzMmsgV0Q4MDAzRUJULCB1c2UgbWVtPTB4ZDAwMDAgbWVtX2VuZD0weGQ4MDAwKQorCShQcm9iZXMgcG9ydHM6CTB4MzAwLCAweDI4MCwgMHgzODAsIDB4MjQwKQorCit6bmV0LmM6ICpOb3QgbW9kdWxhcml6ZWQqCisJKE9ubHkgb25lIGRldmljZSBvbiAgWmVuaXRoIFotTm90ZSAobm90ZWJvb2s/KSBzeXN0ZW1zLAorCSBjb25maWd1cmF0aW9uIGluZm9ybWF0aW9uIGZyb20gKEVFKVBST00pCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvbmV0Y29uc29sZS50eHQgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvbmV0Y29uc29sZS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTM2MThmYgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9uZXRjb25zb2xlLnR4dApAQCAtMCwwICsxLDU3IEBACisKK3N0YXJ0ZWQgYnkgSW5nbyBNb2xuYXIgPG1pbmdvQHJlZGhhdC5jb20+LCAyMDAxLjA5LjE3CisyLjYgcG9ydCBhbmQgbmV0cG9sbCBhcGkgYnkgTWF0dCBNYWNrYWxsIDxtcG1Ac2VsZW5pYy5jb20+LCBTZXAgOSAyMDAzCisKK1BsZWFzZSBzZW5kIGJ1ZyByZXBvcnRzIHRvIE1hdHQgTWFja2FsbCA8bXBtQHNlbGVuaWMuY29tPgorCitUaGlzIG1vZHVsZSBsb2dzIGtlcm5lbCBwcmludGsgbWVzc2FnZXMgb3ZlciBVRFAgYWxsb3dpbmcgZGVidWdnaW5nIG9mCitwcm9ibGVtIHdoZXJlIGRpc2sgbG9nZ2luZyBmYWlscyBhbmQgc2VyaWFsIGNvbnNvbGVzIGFyZSBpbXByYWN0aWNhbC4KKworSXQgY2FuIGJlIHVzZWQgZWl0aGVyIGJ1aWx0LWluIG9yIGFzIGEgbW9kdWxlLiBBcyBhIGJ1aWx0LWluLAorbmV0Y29uc29sZSBpbml0aWFsaXplcyBpbW1lZGlhdGVseSBhZnRlciBOSUMgY2FyZHMgYW5kIHdpbGwgYnJpbmcgdXAKK3RoZSBzcGVjaWZpZWQgaW50ZXJmYWNlIGFzIHNvb24gYXMgcG9zc2libGUuIFdoaWxlIHRoaXMgZG9lc24ndCBhbGxvdworY2FwdHVyZSBvZiBlYXJseSBrZXJuZWwgcGFuaWNzLCBpdCBkb2VzIGNhcHR1cmUgbW9zdCBvZiB0aGUgYm9vdAorcHJvY2Vzcy4KKworSXQgdGFrZXMgYSBzdHJpbmcgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXIgIm5ldGNvbnNvbGUiIGluIHRoZQorZm9sbG93aW5nIGZvcm1hdDoKKworIG5ldGNvbnNvbGU9W3NyYy1wb3J0XUBbc3JjLWlwXS9bPGRldj5dLFt0Z3QtcG9ydF1APHRndC1pcD4vW3RndC1tYWNhZGRyXQorCisgICB3aGVyZQorICAgICAgICBzcmMtcG9ydCAgICAgIHNvdXJjZSBmb3IgVURQIHBhY2tldHMgKGRlZmF1bHRzIHRvIDY2NjUpCisgICAgICAgIHNyYy1pcCAgICAgICAgc291cmNlIElQIHRvIHVzZSAoaW50ZXJmYWNlIGFkZHJlc3MpCisgICAgICAgIGRldiAgICAgICAgICAgbmV0d29yayBpbnRlcmZhY2UgKGV0aDApCisgICAgICAgIHRndC1wb3J0ICAgICAgcG9ydCBmb3IgbG9nZ2luZyBhZ2VudCAoNjY2NikKKyAgICAgICAgdGd0LWlwICAgICAgICBJUCBhZGRyZXNzIGZvciBsb2dnaW5nIGFnZW50CisgICAgICAgIHRndC1tYWNhZGRyICAgZXRoZXJuZXQgTUFDIGFkZHJlc3MgZm9yIGxvZ2dpbmcgYWdlbnQgKGJyb2FkY2FzdCkKKworRXhhbXBsZXM6CisKKyBsaW51eCBuZXRjb25zb2xlPTQ0NDRAMTAuMC4wLjEvZXRoMSw5MzUzQDEwLjAuMC4yLzEyOjM0OjU2Ojc4OjlhOmJjCisKKyAgb3IKKworIGluc21vZCBuZXRjb25zb2xlIG5ldGNvbnNvbGU9QC8sQDEwLjAuMC4yLworCitCdWlsdC1pbiBuZXRjb25zb2xlIHN0YXJ0cyBpbW1lZGlhdGVseSBhZnRlciB0aGUgVENQIHN0YWNrIGlzCitpbml0aWFsaXplZCBhbmQgYXR0ZW1wdHMgdG8gYnJpbmcgdXAgdGhlIHN1cHBsaWVkIGRldiBhdCB0aGUgc3VwcGxpZWQKK2FkZHJlc3MuCisKK1RoZSByZW1vdGUgaG9zdCBjYW4gcnVuIGVpdGhlciAnbmV0Y2F0IC11IC1sIC1wIDxwb3J0Picgb3Igc3lzbG9nZC4KKworV0FSTklORzogdGhlIGRlZmF1bHQgdGFyZ2V0IGV0aGVybmV0IHNldHRpbmcgdXNlcyB0aGUgYnJvYWRjYXN0CitldGhlcm5ldCBhZGRyZXNzIHRvIHNlbmQgcGFja2V0cywgd2hpY2ggY2FuIGNhdXNlIGluY3JlYXNlZCBsb2FkIG9uCitvdGhlciBzeXN0ZW1zIG9uIHRoZSBzYW1lIGV0aGVybmV0IHNlZ21lbnQuCisKK05PVEU6IHRoZSBuZXR3b3JrIGRldmljZSAoZXRoMSBpbiB0aGUgYWJvdmUgY2FzZSkgY2FuIHJ1biBhbnkga2luZAorb2Ygb3RoZXIgbmV0d29yayB0cmFmZmljLCBuZXRjb25zb2xlIGlzIG5vdCBpbnRydXNpdmUuIE5ldGNvbnNvbGUKK21pZ2h0IGNhdXNlIHNsaWdodCBkZWxheXMgaW4gb3RoZXIgdHJhZmZpYyBpZiB0aGUgdm9sdW1lIG9mIGtlcm5lbAorbWVzc2FnZXMgaXMgaGlnaCwgYnV0IHNob3VsZCBoYXZlIG5vIG90aGVyIGltcGFjdC4KKworTmV0Y29uc29sZSB3YXMgZGVzaWduZWQgdG8gYmUgYXMgaW5zdGFudGFuZW91cyBhcyBwb3NzaWJsZSwgdG8KK2VuYWJsZSB0aGUgbG9nZ2luZyBvZiBldmVuIHRoZSBtb3N0IGNyaXRpY2FsIGtlcm5lbCBidWdzLiBJdCB3b3JrcworZnJvbSBJUlEgY29udGV4dHMgYXMgd2VsbCwgYW5kIGRvZXMgbm90IGVuYWJsZSBpbnRlcnJ1cHRzIHdoaWxlCitzZW5kaW5nIHBhY2tldHMuIER1ZSB0byB0aGVzZSB1bmlxdWUgbmVlZHMsIGNvbmZpZ3VyYXRpb24gY2FuIG5vdAorYmUgbW9yZSBhdXRvbWF0aWMsIGFuZCBzb21lIGZ1bmRhbWVudGFsIGxpbWl0YXRpb25zIHdpbGwgcmVtYWluOgorb25seSBJUCBuZXR3b3JrcywgVURQIHBhY2tldHMgYW5kIGV0aGVybmV0IGRldmljZXMgYXJlIHN1cHBvcnRlZC4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9uZXRkZXZpY2VzLnR4dCBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9uZXRkZXZpY2VzLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNTA5ZjNhCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25ldGRldmljZXMudHh0CkBAIC0wLDAgKzEsNzUgQEAKKworTmV0d29yayBEZXZpY2VzLCB0aGUgS2VybmVsLCBhbmQgWW91IQorCisKK0ludHJvZHVjdGlvbgorPT09PT09PT09PT09CitUaGUgZm9sbG93aW5nIGlzIGEgcmFuZG9tIGNvbGxlY3Rpb24gb2YgZG9jdW1lbnRhdGlvbiByZWdhcmRpbmcKK25ldHdvcmsgZGV2aWNlcy4KKworc3RydWN0IG5ldF9kZXZpY2UgYWxsb2NhdGlvbiBydWxlcworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorTmV0d29yayBkZXZpY2Ugc3RydWN0dXJlcyBuZWVkIHRvIHBlcnNpc3QgZXZlbiBhZnRlciBtb2R1bGUgaXMgdW5sb2FkZWQgYW5kCittdXN0IGJlIGFsbG9jYXRlZCB3aXRoIGttYWxsb2MuICBJZiBkZXZpY2UgaGFzIHJlZ2lzdGVyZWQgc3VjY2Vzc2Z1bGx5LAoraXQgd2lsbCBiZSBmcmVlZCBvbiBsYXN0IHVzZSBieSBmcmVlX25ldGRldi4gIFRoaXMgaXMgcmVxdWlyZWQgdG8gaGFuZGxlIHRoZQorcGF0aG9sb2dpYyBjYXNlIGNsZWFubHkgKGV4YW1wbGU6IHJtbW9kIG15ZHJpdmVyIDwvc3lzL2NsYXNzL25ldC9teWV0aC9tdHUgKQorCitUaGVyZSBhcmUgcm91dGluZXMgaW4gbmV0X2luaXQuYyB0byBoYW5kbGUgdGhlIGNvbW1vbiBjYXNlcyBvZgorYWxsb2NfZXRoZXJkZXYsIGFsbG9jX25ldGRldi4gIFRoZXNlIHJlc2VydmUgZXh0cmEgc3BhY2UgZm9yIGRyaXZlcgorcHJpdmF0ZSBkYXRhIHdoaWNoIGdldHMgZnJlZWQgd2hlbiB0aGUgbmV0d29yayBkZXZpY2UgaXMgZnJlZWQuIElmCitzZXBhcmF0ZWx5IGFsbG9jYXRlZCBkYXRhIGlzIGF0dGFjaGVkIHRvIHRoZSBuZXR3b3JrIGRldmljZQorKGRldi0+cHJpdikgdGhlbiBpdCBpcyB1cCB0byB0aGUgbW9kdWxlIGV4aXQgaGFuZGxlciB0byBmcmVlIHRoYXQuCisKKworc3RydWN0IG5ldF9kZXZpY2Ugc3luY2hyb25pemF0aW9uIHJ1bGVzCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK2Rldi0+b3BlbjoKKwlTeW5jaHJvbml6YXRpb246IHJ0bmxfbG9jaygpIHNlbWFwaG9yZS4KKwlDb250ZXh0OiBwcm9jZXNzCisKK2Rldi0+c3RvcDoKKwlTeW5jaHJvbml6YXRpb246IHJ0bmxfbG9jaygpIHNlbWFwaG9yZS4KKwlDb250ZXh0OiBwcm9jZXNzCisJTm90ZTE6IG5ldGlmX3J1bm5pbmcoKSBpcyBndWFyYW50ZWVkIGZhbHNlCisJTm90ZTI6IGRldi0+cG9sbCgpIGlzIGd1YXJhbnRlZWQgdG8gYmUgc3RvcHBlZAorCitkZXYtPmRvX2lvY3RsOgorCVN5bmNocm9uaXphdGlvbjogcnRubF9sb2NrKCkgc2VtYXBob3JlLgorCUNvbnRleHQ6IHByb2Nlc3MKKworZGV2LT5nZXRfc3RhdHM6CisJU3luY2hyb25pemF0aW9uOiBkZXZfYmFzZV9sb2NrIHJ3bG9jay4KKwlDb250ZXh0OiBub21pbmFsbHkgcHJvY2VzcywgYnV0IGRvbid0IHNsZWVwIGluc2lkZSBhbiByd2xvY2sKKworZGV2LT5oYXJkX3N0YXJ0X3htaXQ6CisJU3luY2hyb25pemF0aW9uOiBkZXYtPnhtaXRfbG9jayBzcGlubG9jay4KKwlXaGVuIHRoZSBkcml2ZXIgc2V0cyBORVRJRl9GX0xMVFggaW4gZGV2LT5mZWF0dXJlcyB0aGlzIHdpbGwgYmUKKwljYWxsZWQgd2l0aG91dCBob2xkaW5nIHhtaXRfbG9jay4gSW4gdGhpcyBjYXNlIHRoZSBkcml2ZXIgCisJaGFzIHRvIGxvY2sgYnkgaXRzZWxmIHdoZW4gbmVlZGVkLiBJdCBpcyByZWNvbW1lbmRlZCB0byB1c2UgYSB0cnkgbG9jaworCWZvciB0aGlzIGFuZCByZXR1cm4gLTEgd2hlbiB0aGUgc3BpbiBsb2NrIGZhaWxzLiAKKwlUaGUgbG9ja2luZyB0aGVyZSBzaG91bGQgYWxzbyBwcm9wZXJseSBwcm90ZWN0IGFnYWluc3QgCisJc2V0X211bHRpY2FzdF9saXN0CisJQ29udGV4dDogQkhzIGRpc2FibGVkCisJTm90ZXM6IG5ldGlmX3F1ZXVlX3N0b3BwZWQoKSBpcyBndWFyYW50ZWVkIGZhbHNlCisJUmV0dXJuIGNvZGVzOiAKKwlvIE5FVERFVl9UWF9PSyBldmVyeXRoaW5nIG9rLiAKKwlvIE5FVERFVl9UWF9CVVNZIENhbm5vdCB0cmFuc21pdCBwYWNrZXQsIHRyeSBsYXRlciAKKwkgIFVzdWFsbHkgYSBidWcsIG1lYW5zIHF1ZXVlIHN0YXJ0L3N0b3AgZmxvdyBjb250cm9sIGlzIGJyb2tlbiBpbgorCSAgdGhlIGRyaXZlci4gTm90ZTogdGhlIGRyaXZlciBtdXN0IE5PVCBwdXQgdGhlIHNrYiBpbiBpdHMgRE1BIHJpbmcuCisJbyBORVRERVZfVFhfTE9DS0VEIExvY2tpbmcgZmFpbGVkLCBwbGVhc2UgcmV0cnkgcXVpY2tseS4KKwkgIE9ubHkgdmFsaWQgd2hlbiBORVRJRl9GX0xMVFggaXMgc2V0LgorCitkZXYtPnR4X3RpbWVvdXQ6CisJU3luY2hyb25pemF0aW9uOiBkZXYtPnhtaXRfbG9jayBzcGlubG9jay4KKwlDb250ZXh0OiBCSHMgZGlzYWJsZWQKKwlOb3RlczogbmV0aWZfcXVldWVfc3RvcHBlZCgpIGlzIGd1YXJhbnRlZWQgdHJ1ZQorCitkZXYtPnNldF9tdWx0aWNhc3RfbGlzdDoKKwlTeW5jaHJvbml6YXRpb246IGRldi0+eG1pdF9sb2NrIHNwaW5sb2NrLgorCUNvbnRleHQ6IEJIcyBkaXNhYmxlZAorCitkZXYtPnBvbGw6CisJU3luY2hyb25pemF0aW9uOiBfX0xJTktfU1RBVEVfUlhfU0NIRUQgYml0IGluIGRldi0+c3RhdGUuICBTZWUKKwkJZGV2X2Nsb3NlIGNvZGUgYW5kIGNvbW1lbnRzIGluIG5ldC9jb3JlL2Rldi5jIGZvciBtb3JlIGluZm8uCisJQ29udGV4dDogc29mdGlycQorCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvbmV0aWYtbXNnLnR4dCBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9uZXRpZi1tc2cudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE4YWQ0Y2UKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvbmV0aWYtbXNnLnR4dApAQCAtMCwwICsxLDc5IEBACisKK19fX19fX19fX19fX19fX18KK05FVElGIE1zZyBMZXZlbAorCitUaGUgZGVzaWduIG9mIHRoZSBuZXR3b3JrIGludGVyZmFjZSBtZXNzYWdlIGxldmVsIHNldHRpbmcuCisKK0hpc3RvcnkKKworIFRoZSBkZXNpZ24gb2YgdGhlIGRlYnVnZ2luZyBtZXNzYWdlIGludGVyZmFjZSB3YXMgZ3VpZGVkIGFuZAorIGNvbnN0cmFpbmVkIGJ5IGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5IHByZXZpb3VzIHByYWN0aWNlLiAgSXQgaXMgdXNlZnVsCisgdG8gdW5kZXJzdGFuZCB0aGUgaGlzdG9yeSBhbmQgZXZvbHV0aW9uIGluIG9yZGVyIHRvIHVuZGVyc3RhbmQgY3VycmVudAorIHByYWN0aWNlIGFuZCByZWxhdGUgaXQgdG8gb2xkZXIgZHJpdmVyIHNvdXJjZSBjb2RlLgorCisgRnJvbSB0aGUgYmVnaW5uaW5nIG9mIExpbnV4LCBlYWNoIG5ldHdvcmsgZGV2aWNlIGRyaXZlciBoYXMgaGFkIGEgbG9jYWwKKyBpbnRlZ2VyIHZhcmlhYmxlIHRoYXQgY29udHJvbHMgdGhlIGRlYnVnIG1lc3NhZ2UgbGV2ZWwuICBUaGUgbWVzc2FnZQorIGxldmVsIHJhbmdlZCBmcm9tIDAgdG8gNywgYW5kIG1vbm90b25pY2FsbHkgaW5jcmVhc2VkIGluIHZlcmJvc2l0eS4KKworIFRoZSBtZXNzYWdlIGxldmVsIHdhcyBub3QgcHJlY2lzZWx5IGRlZmluZWQgcGFzdCBsZXZlbCAzLCBidXQgd2VyZQorIGFsd2F5cyBpbXBsZW1lbnRlZCB3aXRoaW4gKy0xIG9mIHRoZSBzcGVjaWZpZWQgbGV2ZWwuICBEcml2ZXJzIHRlbmRlZAorIHRvIHNoZWQgdGhlIG1vcmUgdmVyYm9zZSBsZXZlbCBtZXNzYWdlcyBhcyB0aGV5IG1hdHVyZWQuCisgICAgMCAgTWluaW1hbCBtZXNzYWdlcywgb25seSBlc3NlbnRpYWwgaW5mb3JtYXRpb24gb24gZmF0YWwgZXJyb3JzLgorICAgIDEgIFN0YW5kYXJkIG1lc3NhZ2VzLCBpbml0aWFsaXphdGlvbiBzdGF0dXMuICBObyBydW4tdGltZSBtZXNzYWdlcworICAgIDIgIFNwZWNpYWwgbWVkaWEgc2VsZWN0aW9uIG1lc3NhZ2VzLCBnZW5lcmFsbHkgdGltZXItZHJpdmVyLgorICAgIDMgIEludGVyZmFjZSBzdGFydHMgYW5kIHN0b3BzLCBpbmNsdWRpbmcgbm9ybWFsIHN0YXR1cyBtZXNzYWdlcworICAgIDQgIFR4IGFuZCBSeCBmcmFtZSBlcnJvciBtZXNzYWdlcywgYW5kIGFibm9ybWFsIGRyaXZlciBvcGVyYXRpb24KKyAgICA1ICBUeCBwYWNrZXQgcXVldWUgaW5mb3JtYXRpb24sIGludGVycnVwdCBldmVudHMuCisgICAgNiAgU3RhdHVzIG9uIGVhY2ggY29tcGxldGVkIFR4IHBhY2tldCBhbmQgcmVjZWl2ZWQgUnggcGFja2V0cworICAgIDcgIEluaXRpYWwgY29udGVudHMgb2YgVHggYW5kIFJ4IHBhY2tldHMKKworIEluaXRpYWxseSB0aGlzIG1lc3NhZ2UgbGV2ZWwgdmFyaWFibGUgd2FzIHVuaXF1ZWx5IG5hbWVkIGluIGVhY2ggZHJpdmVyCisgZS5nLiAibGFuY2VfZGVidWciLCBzbyB0aGF0IGEga2VybmVsIHN5bWJvbGljIGRlYnVnZ2VyIGNvdWxkIGxvY2F0ZSBhbmQKKyBtb2RpZnkgdGhlIHNldHRpbmcuICBXaGVuIGtlcm5lbCBtb2R1bGVzIGJlY2FtZSBjb21tb24sIHRoZSB2YXJpYWJsZXMKKyB3ZXJlIGNvbnNpc3RlbnRseSByZW5hbWVkIHRvICJkZWJ1ZyIgYW5kIGFsbG93ZWQgdG8gYmUgc2V0IGFzIGEgbW9kdWxlCisgcGFyYW1ldGVyLgorCisgVGhpcyBhcHByb2FjaCB3b3JrZWQgd2VsbC4gIEhvd2V2ZXIgdGhlcmUgaXMgYWx3YXlzIGEgZGVtYW5kIGZvcgorIGFkZGl0aW9uYWwgZmVhdHVyZXMuICBPdmVyIHRoZSB5ZWFycyB0aGUgZm9sbG93aW5nIGVtZXJnZWQgYXMKKyByZWFzb25hYmxlIGFuZCBlYXNpbHkgaW1wbGVtZW50ZWQgZW5oYW5jZW1lbnRzCisgICBVc2luZyBhbiBpb2N0bCgpIGNhbGwgdG8gbW9kaWZ5IHRoZSBsZXZlbC4KKyAgIFBlci1pbnRlcmZhY2UgcmF0aGVyIHRoYW4gcGVyLWRyaXZlciBtZXNzYWdlIGxldmVsIHNldHRpbmcuCisgICBNb3JlIHNlbGVjdGl2ZSBjb250cm9sIG92ZXIgdGhlIHR5cGUgb2YgbWVzc2FnZXMgZW1pdHRlZC4KKworIFRoZSBuZXRpZl9tc2cgcmVjb21tYW5kYXRpb24gYWRkcyB0aGVzZSBmZWF0dXJlcyB3aXRoIG9ubHkgYSBtaW5vcgorIGNvbXBsZXhpdHkgYW5kIGNvZGUgc2l6ZSBpbmNyZWFzZS4KKworIFRoZSByZWNvbW1lbmRhdGlvbiBpcyB0aGUgZm9sbG93aW5nIHBvaW50cworICAgIFJldGFpbmluZyB0aGUgcGVyLWRyaXZlciBpbnRlZ2VyIHZhcmlhYmxlICJkZWJ1ZyIgYXMgYSBtb2R1bGUKKyAgICBwYXJhbWV0ZXIgd2l0aCBhIGRlZmF1bHQgbGV2ZWwgb2YgJzEnLgorCisgICAgQWRkaW5nIGEgcGVyLWludGVyZmFjZSBwcml2YXRlIHZhcmlhYmxlIG5hbWVkICJtc2dfZW5hYmxlIi4gIFRoZQorICAgIHZhcmlhYmxlIGlzIGEgYml0IG1hcCByYXRoZXIgdGhhbiBhIGxldmVsLCBhbmQgaXMgaW5pdGlhbGl6ZWQgYXMKKyAgICAgICAxIDw8IGRlYnVnCisgICAgT3IgbW9yZSBwcmVjaXNlbHkKKyAgICAgICAgZGVidWcgPCAwID8gMCA6IDEgPDwgbWluKHNpemVvZihpbnQpLTEsIGRlYnVnKQorCisgICAgTWVzc2FnZXMgc2hvdWxkIGNoYW5nZXMgZnJvbQorICAgICAgaWYgKGRlYnVnID4gMSkKKyAgICAgICAgICAgcHJpbnRrKE1TR19ERUJVRyAiJXM6IC4uLgorICAgIHRvCisgICAgICBpZiAobnAtPm1zZ19lbmFibGUgJiBORVRJRl9NU0dfTElOSykKKyAgICAgICAgICAgcHJpbnRrKE1TR19ERUJVRyAiJXM6IC4uLgorCisKK1RoZSBzZXQgb2YgbWVzc2FnZSBsZXZlbHMgaXMgbmFtZWQKKyAgT2xkIGxldmVsICAgTmFtZSAgIEJpdCBwb3NpdGlvbgorICAgIDAgICAgTkVUSUZfTVNHX0RSVgkJMHgwMDAxCisgICAgMSAgICBORVRJRl9NU0dfUFJPQkUJMHgwMDAyCisgICAgMiAgICBORVRJRl9NU0dfTElOSwkJMHgwMDA0CisgICAgMiAgICBORVRJRl9NU0dfVElNRVIJMHgwMDA0CisgICAgMyAgICBORVRJRl9NU0dfSUZET1dOCTB4MDAwOAorICAgIDMgICAgTkVUSUZfTVNHX0lGVVAJCTB4MDAwOAorICAgIDQgICAgTkVUSUZfTVNHX1JYX0VSUgkweDAwMTAKKyAgICA0ICAgIE5FVElGX01TR19UWF9FUlIJMHgwMDEwCisgICAgNSAgICBORVRJRl9NU0dfVFhfUVVFVUVECTB4MDAyMAorICAgIDUgICAgTkVUSUZfTVNHX0lOVFIJCTB4MDAyMAorICAgIDYgICAgTkVUSUZfTVNHX1RYX0RPTkUJMHgwMDQwCisgICAgNiAgICBORVRJRl9NU0dfUlhfU1RBVFVTCTB4MDA0MAorICAgIDcgICAgTkVUSUZfTVNHX1BLVERBVEEJMHgwMDgwCisKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9vbHltcGljLnR4dCBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9vbHltcGljLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNjVhOTQwCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL29seW1waWMudHh0CkBAIC0wLDAgKzEsNzkgQEAKKworSUJNIFBDSSBQaXQvUGl0LVBoeS9PbHltcGljIENISVBTRVQgQkFTRUQgVE9LRU4gUklORyBDQVJEUyBSRUFETUUKKworUmVsZWFzZSAwLjIuMCAtIFJlbGVhc2UgICAgCisJSnVuZSA4dGggMTk5OSBQZXRlciBEZSBTY2hyaWp2ZXIgJiBNaWtlIFBoaWxsaXBzCitSZWxlYXNlIDAuOS5DIC0gUmVsZWFzZQorCUFwcmlsIDE4dGggMjAwMSBNaWtlIFBoaWxsaXBzCisKK1RoYW5rczoKK0VyaWsgRGUgQ29jaywgQWRyaWFuIEJyaWRnZXR0IGFuZCBGcmFuayBGaWVuZSBmb3IgdGhlaXIgCitwYXRpZW5jZSBhbmQgdGVzdGluZy4KK0RvbmFsZCBDaGFtcGlvbiBmb3IgdGhlIGNhcmRidXMgc3VwcG9ydAorS3lsZSBMdWNrZSBmb3IgdGhlIGRtYSBhcGkgY2hhbmdlcy4gICAKK0pvbmF0aG9uIEJpdG5lciBmb3IgaGFyZHdhcmUgc3VwcG9ydC4gCitFdmVyeWJvZHkgb24gbGludXgtdHIgZm9yIHRoZWlyIGNvbnRpbnVlZCBzdXBwb3J0LiAgCisgCitPcHRpb25zOgorCitUaGUgZHJpdmVyIGFjY2VwdHMgZm91ciBvcHRpb25zOiByaW5nc3BlZWQsIHBrdF9idWZfc3osICAKK21lc3NhZ2VfbGV2ZWwgYW5kIG5ldHdvcmtfbW9uaXRvci4KKworVGhlc2Ugb3B0aW9ucyBjYW4gYmUgc3BlY2lmaWVkIGRpZmZlcmVudGx5IGZvciBlYWNoIGNhcmQgZm91bmQuIAorCityaW5nc3BlZWQ6ICBIYXMgb25lIG9mIHRocmVlIHNldHRpbmdzIDAgKGRlZmF1bHQpLCA0IG9yIDE2LiAgMCB3aWxsIAorbWFrZSB0aGUgY2FyZCBhdXRvc2Vuc2UgdGhlIHJpbmdzcGVlZCBhbmQgam9pbiBhdCB0aGUgYXBwcm9wcmlhdGUgc3BlZWQsIAordGhpcyB3aWxsIGJlIHRoZSBkZWZhdWx0IG9wdGlvbiBmb3IgbW9zdCBwZW9wbGUuICA0IG9yIDE2IGFsbG93IHlvdSB0byAKK2V4cGxpY2l0bHkgZm9yY2UgdGhlIGNhcmQgdG8gb3BlcmF0ZSBhdCBhIGNlcnRhaW4gc3BlZWQuICBUaGUgY2FyZCB3aWxsIGZhaWwgCitpZiB5b3UgdHJ5IHRvIGluc2VydCBpdCBhdCB0aGUgd3Jvbmcgc3BlZWQuIChBbHRob3VnaCBzb21lIGh1YnMgd2lsbCBhbGxvdyAKK3RoaXMgc28gYmUgKnZlcnkqIGNhcmVmdWwpLiAgVGhlIG1haW4gcHVycG9zZSBmb3IgZXhwbGljaXRseSBzZXR0aW5nIHRoZSByaW5nCitzcGVlZCBpcyBmb3Igd2hlbiB0aGUgY2FyZCBpcyBmaXJzdCBvbiB0aGUgcmluZy4gIEluIGF1dG9zZW5zZSBtb2RlLCBpZiB0aGUgY2FyZAorY2Fubm90IGRldGVjdCBhbnkgYWN0aXZlIG1vbml0b3JzIG9uIHRoZSByaW5nIGl0IHdpbGwgbm90IG9wZW4sIHNvIHlvdSBtdXN0IAorcmUtaW5pdCB0aGUgY2FyZCBhdCB0aGUgYXBwcm9wcmlhdGUgc3BlZWQuICBVbmZvcnR1bmF0ZWx5IGF0IHByZXNlbnQgdGhlIG9ubHkKK3dheSBvZiBkb2luZyB0aGlzIGlzIHJtbW9kIGFuZCBpbnNtb2Qgd2hpY2ggaXMgYSBiaXQgdG91Z2ggaWYgaXQgaXMgY29tcGlsZWQKK2luIHRoZSBrZXJuZWwuCisKK3BrdF9idWZfc3o6ICBUaGlzIGlzIHRoaXMgaW5pdGlhbCByZWNlaXZlIGJ1ZmZlciBhbGxvY2F0aW9uIHNpemUuICBUaGlzIHdpbGwKK2RlZmF1bHQgdG8gNDA5NiBpZiBubyB2YWx1ZSBpcyBlbnRlcmVkLiBZb3UgbWF5IGluY3JlYXNlIHBlcmZvcm1hbmNlIG9mIHRoZSAKK2RyaXZlciBieSBzZXR0aW5nIHRoaXMgdG8gYSB2YWx1ZSBsYXJnZXIgdGhhbiB0aGUgbmV0d29yayBwYWNrZXQgc2l6ZSwgYWx0aG91Z2gKK3RoZSBkcml2ZXIgbm93IHJlLXNpemVzIGJ1ZmZlcnMgYmFzZWQgb24gTVRVIHNldHRpbmdzIGFzIHdlbGwuIAorCittZXNzYWdlX2xldmVsOiBDb250cm9scyBsZXZlbCBvZiBtZXNzYWdlcyBjcmVhdGVkIGJ5IHRoZSBkcml2ZXIuIERlZmF1bHRzIHRvIDA6Cit3aGljaCBvbmx5IGRpc3BsYXlzIHN0YXJ0LXVwIGFuZCBjcml0aWNhbCBtZXNzYWdlcy4gIFByZXNlbnRseSBhbnkgbm9uLXplcm8gCit2YWx1ZSB3aWxsIGRpc3BsYXkgYWxsIHNvZnQgbWVzc2FnZXMgYXMgd2VsbC4gIE5CIFRoaXMgZG9lcyBub3QgdHVybiAKK2RlYnVnZ2luZyBtZXNzYWdlcyBvbiwgdGhhdCBtdXN0IGJlIGRvbmUgYnkgbW9kaWZpZWQgdGhlIHNvdXJjZSBjb2RlLgorCituZXR3b3JrX21vbml0b3I6IEFueSBub24temVybyB2YWx1ZSB3aWxsIHByb3ZpZGUgYSBxdWFzaSBuZXR3b3JrIG1vbml0b3JpbmcgCittb2RlLiAgQWxsIHVuZXhwZWN0ZWQgTUFDIGZyYW1lcyAoYmVhY29uaW5nIGV0Yy4pIHdpbGwgYmUgcmVjZWl2ZWQKK2J5IHRoZSBkcml2ZXIgYW5kIHRoZSBzb3VyY2UgYW5kIGRlc3RpbmF0aW9uIGFkZHJlc3NlcyBwcmludGVkLiAKK0Fsc28gYW4gZW50cnkgd2lsbCBiZSBhZGRlZCBpbiAgL3Byb2MvbmV0IGNhbGxlZCBvbHltcGljX3RyJWQsIHdoZXJlIHRyJWQKK2lzIHRoZSByZWdpc3RlcmVkIGRldmljZSBuYW1lLCBpLmUgdHIwLCB0cjEsIGV0Yy4gVGhpcyBkaXNwbGF5cyBsb3cKK2xldmVsIGluZm9ybWF0aW9uIGFib3V0IHRoZSBjb25maWd1cmF0aW9uIG9mIHRoZSByaW5nIGFuZCB0aGUgYWRhcHRlci4KK1RoaXMgZmVhdHVyZSBoYXMgYmVlbiBkZXNpZ25lZCBmb3IgbmV0d29yayBhZG1pbmlzdHJhdG9ycyB0byBhc3Npc3QgaW4gCit0aGUgZGlhZ25vc2lzIG9mIG5ldHdvcmsgLyByaW5nIHByb2JsZW1zLiAoVGhpcyB1c2VkIHRvIE9MWU1QSUNfTkVUV09SS19NT05JVE9SLAorYnV0IGhhcyBub3cgY2hhbmdlZCB0byBhbGxvdyBlYWNoIGFkYXB0ZXIgdG8gYmUgY29uZmlndXJlZCBkaWZmZXJlbnRseSBhbmQKK3RvIGFsbGV2aWF0ZSB0aGUgbmVjZXNzaXR5IHRvIHJlLWNvbXBpbGUgb2x5bXBpYyB0byB0dXJuIHRoZSBvcHRpb24gb24pLgorCitNdWx0aS1jYXJkOgorCitUaGUgZHJpdmVyIHdpbGwgZGV0ZWN0IG11bHRpcGxlIGNhcmRzIGFuZCB3aWxsIHdvcmsgd2l0aCBzaGFyZWQgaW50ZXJydXB0cywKK2VhY2ggY2FyZCBpcyBhc3NpZ25lZCB0aGUgbmV4dCB0b2tlbiByaW5nIGRldmljZSwgaS5lLiB0cjAgLCB0cjEsIHRyMi4gIFRoZSAKK2RyaXZlciBzaG91bGQgYWxzbyBoYXBwaWx5IHJlc2lkZSBpbiB0aGUgc3lzdGVtIHdpdGggb3RoZXIgZHJpdmVycy4gIEl0IGhhcyAKK2JlZW4gdGVzdGVkIHdpdGggaWJtdHIuYyBydW5uaW5nLCBhbmQgSSBwZXJzb25hbGx5IGhhdmUgaGFkIG9uZSBPbGljb20gUENJIAorY2FyZCBhbmQgdHdvIElCTSBvbHltcGljIGNhcmRzIChhbGwgb24gdGhlIHNhbWUgaW50ZXJydXB0KSwgYWxsIHJ1bm5pbmcKK3RvZ2V0aGVyLiAKKworVmFyaWFibGUgTVRVIHNpemU6CisKK1RoZSBkcml2ZXIgY2FuIGhhbmRsZSBhIE1UVSBzaXplIHVwdG8gZWl0aGVyIDQ1MDAgb3IgMTgwMDAgZGVwZW5kaW5nIHVwb24gCityaW5nIHNwZWVkLiAgVGhlIGRyaXZlciBhbHNvIGNoYW5nZXMgdGhlIHNpemUgb2YgdGhlIHJlY2VpdmUgYnVmZmVycyBhcyBwYXJ0CitvZiB0aGUgbXR1IHJlLXNpemluZywgc28gaWYgeW91IHNldCBtdHUgPSAxODAwMCwgeW91IHdpbGwgbmVlZCB0byBiZSBhYmxlCit0byBhbGxvY2F0ZSAxNiAqIChza19idWZmIHdpdGggMTgwMDAgYnVmZmVyIHNpemUpIGNhbGwgaXQgMTg1MDAgYnl0ZXMgcGVyIHJpbmcgCitwb3NpdGlvbiA9IDI5NiwwMDAgYnl0ZXMgb2YgbWVtb3J5IHNwYWNlLCBwbHVzIG9mIGNvdXJzZSBhbnl0aGluZyAKK25lY2Vzc2FyeSBmb3IgdGhlIHR4IHNrX2J1ZmYncy4gIFJlbWVtYmVyIHRoaXMgaXMgcGVyIGNhcmQsIHNvIGlmIHlvdSBhcmUKK2J1aWxkaW5nIHJvdXRlcnMsIGdhdGV3YXkncyBldGMsIHlvdSBjb3VsZCBzdGFydCB0byB1c2UgYSBsb3Qgb2YgbWVtb3J5CityZWFsIGZhc3QuCisKKworNi84Lzk5IFBldGVyIERlIFNjaHJpanZlciBhbmQgTWlrZSBQaGlsbGlwcworCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvcGFja2V0X21tYXAudHh0IGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3BhY2tldF9tbWFwLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZDRjZjc4Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3BhY2tldF9tbWFwLnR4dApAQCAtMCwwICsxLDM5OSBAQAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKysgQUJTVFJBQ1QKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoaXMgZmlsZSBkb2N1bWVudHMgdGhlIENPTkZJR19QQUNLRVRfTU1BUCBvcHRpb24gYXZhaWxhYmxlIHdpdGggdGhlIFBBQ0tFVAorc29ja2V0IGludGVyZmFjZSBvbiAyLjQgYW5kIDIuNiBrZXJuZWxzLiBUaGlzIHR5cGUgb2Ygc29ja2V0cyBpcyB1c2VkIGZvciAKK2NhcHR1cmUgbmV0d29yayB0cmFmZmljIHdpdGggdXRpbGl0aWVzIGxpa2UgdGNwZHVtcCBvciBhbnkgb3RoZXIgdGhhdCB1c2VzIAordGhlIGxpYnBjYXAgbGlicmFyeS4gCisKK1lvdSBjYW4gZmluZCB0aGUgbGF0ZXN0IHZlcnNpb24gb2YgdGhpcyBkb2N1bWVudCBhdAorCisgICAgaHR0cDovL3B1c2EudXYuZXMvfnVsaXNzZXMvcGFja2V0X21tYXAvCisKK1BsZWFzZSBzZW5kIG1lIHlvdXIgY29tbWVudHMgdG8KKworICAgIFVsaXNzZXMgQWxvbnNvIENhbWFy8yA8dWFjYUBpLmhhdGUuc3BhbS5hbHVtbmkudXYuZXM+CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKysgV2h5IHVzZSBQQUNLRVRfTU1BUAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworSW4gTGludXggMi40LzIuNiBpZiBQQUNLRVRfTU1BUCBpcyBub3QgZW5hYmxlZCwgdGhlIGNhcHR1cmUgcHJvY2VzcyBpcyB2ZXJ5CitpbmVmZmljaWVudC4gSXQgdXNlcyB2ZXJ5IGxpbWl0ZWQgYnVmZmVycyBhbmQgcmVxdWlyZXMgb25lIHN5c3RlbSBjYWxsCit0byBjYXB0dXJlIGVhY2ggcGFja2V0LCBpdCByZXF1aXJlcyB0d28gaWYgeW91IHdhbnQgdG8gZ2V0IHBhY2tldCdzIAordGltZXN0YW1wIChsaWtlIGxpYnBjYXAgYWx3YXlzIGRvZXMpLgorCitJbiB0aGUgb3RoZXIgaGFuZCBQQUNLRVRfTU1BUCBpcyB2ZXJ5IGVmZmljaWVudC4gUEFDS0VUX01NQVAgcHJvdmlkZXMgYSBzaXplIAorY29uZmlndXJhYmxlIGNpcmN1bGFyIGJ1ZmZlciBtYXBwZWQgaW4gdXNlciBzcGFjZS4gVGhpcyB3YXkgcmVhZGluZyBwYWNrZXRzIGp1c3QgCituZWVkcyB0byB3YWl0IGZvciB0aGVtLCBtb3N0IG9mIHRoZSB0aW1lIHRoZXJlIGlzIG5vIG5lZWQgdG8gaXNzdWUgYSBzaW5nbGUgCitzeXN0ZW0gY2FsbC4gQnkgdXNpbmcgYSBzaGFyZWQgYnVmZmVyIGJldHdlZW4gdGhlIGtlcm5lbCBhbmQgdGhlIHVzZXIgCithbHNvIGhhcyB0aGUgYmVuZWZpdCBvZiBtaW5pbWl6aW5nIHBhY2tldCBjb3BpZXMuCisKK0l0J3MgZmluZSB0byB1c2UgUEFDS0VUX01NQVAgdG8gaW1wcm92ZSB0aGUgcGVyZm9ybWFuY2Ugb2YgdGhlIGNhcHR1cmUgcHJvY2VzcywgCitidXQgaXQgaXNuJ3QgZXZlcnl0aGluZy4gQXQgbGVhc3QsIGlmIHlvdSBhcmUgY2FwdHVyaW5nIGF0IGhpZ2ggc3BlZWRzICh0aGlzIAoraXMgcmVsYXRpdmUgdG8gdGhlIGNwdSBzcGVlZCksIHlvdSBzaG91bGQgY2hlY2sgaWYgdGhlIGRldmljZSBkcml2ZXIgb2YgeW91ciAKK25ldHdvcmsgaW50ZXJmYWNlIGNhcmQgc3VwcG9ydHMgc29tZSBzb3J0IG9mIGludGVycnVwdCBsb2FkIG1pdGlnYXRpb24gb3IgCisoZXZlbiBiZXR0ZXIpIGlmIGl0IHN1cHBvcnRzIE5BUEksIGFsc28gbWFrZSBzdXJlIGl0IGlzIGVuYWJsZWQuCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisrIEhvdyB0byB1c2UgQ09ORklHX1BBQ0tFVF9NTUFQCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitGcm9tIHRoZSB1c2VyIHN0YW5kcG9pbnQsIHlvdSBzaG91bGQgdXNlIHRoZSBoaWdoZXIgbGV2ZWwgbGlicGNhcCBsaWJyYXJ5LCB3aWNoCitpcyBhIGRlIGZhY3RvIHN0YW5kYXJkLCBwb3J0YWJsZSBhY3Jvc3MgbmVhcmx5IGFsbCBvcGVyYXRpbmcgc3lzdGVtcworaW5jbHVkaW5nIFdpbjMyLiAKKworU2FpZCB0aGF0LCBhdCB0aW1lIG9mIHRoaXMgd3JpdGluZywgb2ZmaWNpYWwgbGlicGNhcCAwLjguMSBpcyBvdXQgYW5kIGRvZXNuJ3QgaW5jbHVkZQorc3VwcG9ydCBmb3IgUEFDS0VUX01NQVAsIGFuZCBhbHNvIHByb2JhYmx5IHRoZSBsaWJwY2FwIGluY2x1ZGVkIGluIHlvdXIgZGlzdHJpYnV0aW9uLiAKKworSSdtIGF3YXJlIG9mIHR3byBpbXBsZW1lbnRhdGlvbnMgb2YgUEFDS0VUX01NQVAgaW4gbGlicGNhcDoKKworICAgIGh0dHA6Ly9wdXNhLnV2LmVzL351bGlzc2VzL3BhY2tldF9tbWFwLyAgKGJ5IFNpbW9uIFBhdGFyaW4sIGJhc2VkIG9uIGxpYnBjYXAgMC42LjIpCisgICAgaHR0cDovL3B1YmxpYy5sYW5sLmdvdi9jcHcvICAgICAgICAgICAgICAoYnkgUGhpbCBXb29kLCBiYXNlZCBvbiBsYXN0ZXN0IGxpYnBjYXApCisKK1RoZSByZXN0IG9mIHRoaXMgZG9jdW1lbnQgaXMgaW50ZW5kZWQgZm9yIHBlb3BsZSB3aG8gd2FudCB0byB1bmRlcnN0YW5kCit0aGUgbG93IGxldmVsIGRldGFpbHMgb3Igd2FudCB0byBpbXByb3ZlIGxpYnBjYXAgYnkgaW5jbHVkaW5nIFBBQ0tFVF9NTUFQCitzdXBwb3J0LgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKyBIb3cgdG8gdXNlIENPTkZJR19QQUNLRVRfTU1BUCBkaXJlY3RseQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworRnJvbSB0aGUgc3lzdGVtIGNhbGxzIHN0YW5kIHBvaW50LCB0aGUgdXNlIG9mIFBBQ0tFVF9NTUFQIGludm9sdmVzCit0aGUgZm9sbG93aW5nIHByb2Nlc3M6CisKKworW3NldHVwXSAgICAgc29ja2V0KCkgLS0tLS0tLT4gY3JlYXRpb24gb2YgdGhlIGNhcHR1cmUgc29ja2V0CisgICAgICAgICAgICBzZXRzb2Nrb3B0KCkgLS0tPiBhbGxvY2F0aW9uIG9mIHRoZSBjaXJjdWxhciBidWZmZXIgKHJpbmcpCisgICAgICAgICAgICBtbWFwKCkgLS0tLS0tLS0tPiBtYXBpbmcgb2YgdGhlIGFsbG9jYXRlZCBidWZmZXIgdG8gdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VyIHByb2Nlc3MKKworW2NhcHR1cmVdICAgcG9sbCgpIC0tLS0tLS0tLT4gdG8gd2FpdCBmb3IgaW5jb21pbmcgcGFja2V0cworCitbc2h1dGRvd25dICBjbG9zZSgpIC0tLS0tLS0tPiBkZXN0cnVjdGlvbiBvZiB0aGUgY2FwdHVyZSBzb2NrZXQgYW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWFsbG9jYXRpb24gb2YgYWxsIGFzc29jaWF0ZWQgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvdXJjZXMuCisKKworc29ja2V0IGNyZWF0aW9uIGFuZCBkZXN0cnVjdGlvbiBpcyBzdHJhaWdodCBmb3J3YXJkLCBhbmQgaXMgZG9uZSAKK3RoZSBzYW1lIHdheSB3aXRoIG9yIHdpdGhvdXQgUEFDS0VUX01NQVA6CisKK2ludCBmZDsKKworZmQ9IHNvY2tldChQRl9QQUNLRVQsIG1vZGUsIGh0b25zKEVUSF9QX0FMTCkpCisKK3doZXJlIG1vZGUgaXMgU09DS19SQVcgZm9yIHRoZSByYXcgaW50ZXJmYWNlIHdlcmUgbGluayBsZXZlbAoraW5mb3JtYXRpb24gY2FuIGJlIGNhcHR1cmVkIG9yIFNPQ0tfREdSQU0gZm9yIHRoZSBjb29rZWQKK2ludGVyZmFjZSB3aGVyZSBsaW5rIGxldmVsIGluZm9ybWF0aW9uIGNhcHR1cmUgaXMgbm90IAorc3VwcG9ydGVkIGFuZCBhIGxpbmsgbGV2ZWwgcHNldWRvLWhlYWRlciBpcyBwcm92aWRlZCAKK2J5IHRoZSBrZXJuZWwuCisKK1RoZSBkZXN0cnVjdGlvbiBvZiB0aGUgc29ja2V0IGFuZCBhbGwgYXNzb2NpYXRlZCByZXNvdXJjZXMKK2lzIGRvbmUgYnkgYSBzaW1wbGUgY2FsbCB0byBjbG9zZShmZCkuCisKK05leHQgSSB3aWxsIGRlc2NyaWJlIFBBQ0tFVF9NTUFQIHNldHRpbmdzIGFuZCBpdCdzIGNvbnN0cmFpbnRzLAorYWxzbyB0aGUgbWFwaW5nIG9mIHRoZSBjaXJjdWxhciBidWZmZXIgaW4gdGhlIHVzZXIgcHJvY2VzcyBhbmQgCit0aGUgdXNlIG9mIHRoaXMgYnVmZmVyLgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKyBQQUNLRVRfTU1BUCBzZXR0aW5ncworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworCitUbyBzZXR1cCBQQUNLRVRfTU1BUCBmcm9tIHVzZXIgbGV2ZWwgY29kZSBpcyBkb25lIHdpdGggYSBjYWxsIGxpa2UKKworICAgICBzZXRzb2Nrb3B0KGZkLCBTT0xfUEFDS0VULCBQQUNLRVRfUlhfUklORywgKHZvaWQgKikgJnJlcSwgc2l6ZW9mKHJlcSkpCisKK1RoZSBtb3N0IHNpZ25pZmljYW50IGFyZ3VtZW50IGluIHRoZSBwcmV2aW91cyBjYWxsIGlzIHRoZSByZXEgcGFyYW1ldGVyLCAKK3RoaXMgcGFyYW1ldGVyIG11c3QgdG8gaGF2ZSB0aGUgZm9sbG93aW5nIHN0cnVjdHVyZToKKworICAgIHN0cnVjdCB0cGFja2V0X3JlcQorICAgIHsKKyAgICAgICAgdW5zaWduZWQgaW50ICAgIHRwX2Jsb2NrX3NpemU7ICAvKiBNaW5pbWFsIHNpemUgb2YgY29udGlndW91cyBibG9jayAqLworICAgICAgICB1bnNpZ25lZCBpbnQgICAgdHBfYmxvY2tfbnI7ICAgIC8qIE51bWJlciBvZiBibG9ja3MgKi8KKyAgICAgICAgdW5zaWduZWQgaW50ICAgIHRwX2ZyYW1lX3NpemU7ICAvKiBTaXplIG9mIGZyYW1lICovCisgICAgICAgIHVuc2lnbmVkIGludCAgICB0cF9mcmFtZV9ucjsgICAgLyogVG90YWwgbnVtYmVyIG9mIGZyYW1lcyAqLworICAgIH07CisKK1RoaXMgc3RydWN0dXJlIGlzIGRlZmluZWQgaW4gL3Vzci9pbmNsdWRlL2xpbnV4L2lmX3BhY2tldC5oIGFuZCBlc3RhYmxpc2hlcyBhIAorY2lyY3VsYXIgYnVmZmVyIChyaW5nKSBvZiB1bnN3YXBwYWJsZSBtZW1vcnkgbWFwcGVkIGluIHRoZSBjYXB0dXJlIHByb2Nlc3MuIAorQmVpbmcgbWFwcGVkIGluIHRoZSBjYXB0dXJlIHByb2Nlc3MgYWxsb3dzIHJlYWRpbmcgdGhlIGNhcHR1cmVkIGZyYW1lcyBhbmQgCityZWxhdGVkIG1ldGEtaW5mb3JtYXRpb24gbGlrZSB0aW1lc3RhbXBzIHdpdGhvdXQgcmVxdWlyaW5nIGEgc3lzdGVtIGNhbGwuCisKK0NhcHR1cmVkIGZyYW1lcyBhcmUgZ3JvdXBlZCBpbiBibG9ja3MuIEVhY2ggYmxvY2sgaXMgYSBwaHlzaWNhbGx5IGNvbnRpZ3VvdXMgCityZWdpb24gb2YgbWVtb3J5IGFuZCBob2xkcyB0cF9ibG9ja19zaXplL3RwX2ZyYW1lX3NpemUgZnJhbWVzLiBUaGUgdG90YWwgbnVtYmVyIAorb2YgYmxvY2tzIGlzIHRwX2Jsb2NrX25yLiBOb3RlIHRoYXQgdHBfZnJhbWVfbnIgaXMgYSByZWR1bmRhbnQgcGFyYW1ldGVyIGJlY2F1c2UKKworICAgIGZyYW1lc19wZXJfYmxvY2sgPSB0cF9ibG9ja19zaXplL3RwX2ZyYW1lX3NpemUKKworaW5kZWVkLCBwYWNrZXRfc2V0X3JpbmcgY2hlY2tzIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb24gaXMgdHJ1ZQorCisgICAgZnJhbWVzX3Blcl9ibG9jayAqIHRwX2Jsb2NrX25yID09IHRwX2ZyYW1lX25yCisKKworTGV0cyBzZWUgYW4gZXhhbXBsZSwgd2l0aCB0aGUgZm9sbG93aW5nIHZhbHVlczoKKworICAgICB0cF9ibG9ja19zaXplPSA0MDk2CisgICAgIHRwX2ZyYW1lX3NpemU9IDIwNDgKKyAgICAgdHBfYmxvY2tfbnIgID0gNAorICAgICB0cF9mcmFtZV9uciAgPSA4CisKK3dlIHdpbGwgZ2V0IHRoZSBmb2xsb3dpbmcgYnVmZmVyIHN0cnVjdHVyZToKKworICAgICAgICBibG9jayAjMSAgICAgICAgICAgICAgICAgYmxvY2sgIzIgICAgICAgICAKKystLS0tLS0tLS0rLS0tLS0tLS0tKyAgICArLS0tLS0tLS0tKy0tLS0tLS0tLSsgICAgCit8IGZyYW1lIDEgfCBmcmFtZSAyIHwgICAgfCBmcmFtZSAzIHwgZnJhbWUgNCB8ICAgIAorKy0tLS0tLS0tLSstLS0tLS0tLS0rICAgICstLS0tLS0tLS0rLS0tLS0tLS0tKyAgICAKKworICAgICAgICBibG9jayAjMyAgICAgICAgICAgICAgICAgYmxvY2sgIzQKKystLS0tLS0tLS0rLS0tLS0tLS0tKyAgICArLS0tLS0tLS0tKy0tLS0tLS0tLSsKK3wgZnJhbWUgNSB8IGZyYW1lIDYgfCAgICB8IGZyYW1lIDcgfCBmcmFtZSA4IHwKKystLS0tLS0tLS0rLS0tLS0tLS0tKyAgICArLS0tLS0tLS0tKy0tLS0tLS0tLSsKKworQSBmcmFtZSBjYW4gYmUgb2YgYW55IHNpemUgd2l0aCB0aGUgb25seSBjb25kaXRpb24gaXQgY2FuIGZpdCBpbiBhIGJsb2NrLiBBIGJsb2NrCitjYW4gb25seSBob2xkIGFuIGludGVnZXIgbnVtYmVyIG9mIGZyYW1lcywgb3IgaW4gb3RoZXIgd29yZHMsIGEgZnJhbWUgY2Fubm90IAorYmUgc3Bhd24gYWNjcm9zcyB0d28gYmxvY2tzIHNvIHRoZXJlIGFyZSBzb21lIGRhdGFpbHMgeW91IGhhdmUgdG8gdGFrZSBpbnRvIAorYWNjb3VudCB3aGVuIGNob29zaW5nIHRoZSBmcmFtZV9zaXplLiBTZWUgIk1hcGluZyBhbmQgdXNlIG9mIHRoZSBjaXJjdWxhciAKK2J1ZmZlciAocmluZykiLgorCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisrIFBBQ0tFVF9NTUFQIHNldHRpbmcgY29uc3RyYWludHMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0luIGtlcm5lbCB2ZXJzaW9ucyBwcmlvciB0byAyLjQuMjYgKGZvciB0aGUgMi40IGJyYW5jaCkgYW5kIDIuNi41ICgyLjYgYnJhbmNoKSwKK3RoZSBQQUNLRVRfTU1BUCBidWZmZXIgY291bGQgaG9sZCBvbmx5IDMyNzY4IGZyYW1lcyBpbiBhIDMyIGJpdCBhcmNoaXRlY3R1cmUgb3IKKzE2Mzg0IGluIGEgNjQgYml0IGFyY2hpdGVjdHVyZS4gRm9yIGluZm9ybWF0aW9uIG9uIHRoZXNlIGtlcm5lbCB2ZXJzaW9ucworc2VlIGh0dHA6Ly9wdXNhLnV2LmVzL351bGlzc2VzL3BhY2tldF9tbWFwL3BhY2tldF9tbWFwLnByZS0yLjQuMjZfMi42LjUudHh0CisKKyBCbG9jayBzaXplIGxpbWl0CistLS0tLS0tLS0tLS0tLS0tLS0KKworQXMgc3RhdGVkIGVhcmxpZXIsIGVhY2ggYmxvY2sgaXMgYSBjb250aWd1b3VzIHBoeXNpY2FsIHJlZ2lvbiBvZiBtZW1vcnkuIFRoZXNlIAorbWVtb3J5IHJlZ2lvbnMgYXJlIGFsbG9jYXRlZCB3aXRoIGNhbGxzIHRvIHRoZSBfX2dldF9mcmVlX3BhZ2VzKCkgZnVuY3Rpb24uIEFzIAordGhlIG5hbWUgaW5kaWNhdGVzLCB0aGlzIGZ1bmN0aW9uIGFsbG9jYXRlcyBwYWdlcyBvZiBtZW1vcnksIGFuZCB0aGUgc2Vjb25kCithcmd1bWVudCBpcyAib3JkZXIiIG9yIGEgcG93ZXIgb2YgdHdvIG51bWJlciBvZiBwYWdlcywgdGhhdCBpcyAKKyhmb3IgUEFHRV9TSVpFID09IDQwOTYpIG9yZGVyPTAgPT0+IDQwOTYgYnl0ZXMsIG9yZGVyPTEgPT0+IDgxOTIgYnl0ZXMsIAorb3JkZXI9MiA9PT4gMTYzODQgYnl0ZXMsIGV0Yy4gVGhlIG1heGltdW0gc2l6ZSBvZiBhIAorcmVnaW9uIGFsbG9jYXRlZCBieSBfX2dldF9mcmVlX3BhZ2VzIGlzIGRldGVybWluZWQgYnkgdGhlIE1BWF9PUkRFUiBtYWNyby4gTW9yZSAKK3ByZWNpc2VseSB0aGUgbGltaXQgY2FuIGJlIGNhbGN1bGF0ZWQgYXM6CisKKyAgIFBBR0VfU0laRSA8PCBNQVhfT1JERVIKKworICAgSW4gYSBpMzg2IGFyY2hpdGVjdHVyZSBQQUdFX1NJWkUgaXMgNDA5NiBieXRlcyAKKyAgIEluIGEgMi40L2kzODYga2VybmVsIE1BWF9PUkRFUiBpcyAxMAorICAgSW4gYSAyLjYvaTM4NiBrZXJuZWwgTUFYX09SREVSIGlzIDExCisKK1NvIGdldF9mcmVlX3BhZ2VzIGNhbiBhbGxvY2F0ZSBhcyBtdWNoIGFzIDRNQiBvciA4TUIgaW4gYSAyLjQvMi42IGtlcm5lbCAKK3Jlc3BlY3RpdmVseSwgd2l0aCBhbiBpMzg2IGFyY2hpdGVjdHVyZS4KKworVXNlciBzcGFjZSBwcm9ncmFtcyBjYW4gaW5jbHVkZSAvdXNyL2luY2x1ZGUvc3lzL3VzZXIuaCBhbmQgCisvdXNyL2luY2x1ZGUvbGludXgvbW16b25lLmggdG8gZ2V0IFBBR0VfU0laRSBNQVhfT1JERVIgZGVjbGFyYXRpb25zLgorCitUaGUgcGFnZXNpemUgY2FuIGFsc28gYmUgZGV0ZXJtaW5lZCBkeW5hbWljYWxseSB3aXRoIHRoZSBnZXRwYWdlc2l6ZSAoMikgCitzeXN0ZW0gY2FsbC4gCisKKworIEJsb2NrIG51bWJlciBsaW1pdAorLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVG8gdW5kZXJzdGFuZCB0aGUgY29uc3RyYWludHMgb2YgUEFDS0VUX01NQVAsIHdlIGhhdmUgdG8gc2VlIHRoZSBzdHJ1Y3R1cmUgCit1c2VkIHRvIGhvbGQgdGhlIHBvaW50ZXJzIHRvIGVhY2ggYmxvY2suCisKK0N1cnJlbnRseSwgdGhpcyBzdHJ1Y3R1cmUgaXMgYSBkeW5hbWljYWxseSBhbGxvY2F0ZWQgdmVjdG9yIHdpdGgga21hbGxvYyAKK2NhbGxlZCBwZ192ZWMsIGl0cyBzaXplIGxpbWl0cyB0aGUgbnVtYmVyIG9mIGJsb2NrcyB0aGF0IGNhbiBiZSBhbGxvY2F0ZWQuCisKKyAgICArLS0tKy0tLSstLS0rLS0tKworICAgIHwgeCB8IHggfCB4IHwgeCB8CisgICAgKy0tLSstLS0rLS0tKy0tLSsKKyAgICAgIHwgICB8ICAgfCAgIHwKKyAgICAgIHwgICB8ICAgfCAgIHYKKyAgICAgIHwgICB8ICAgdiAgYmxvY2sgIzQKKyAgICAgIHwgICB2ICBibG9jayAjMworICAgICAgdiAgYmxvY2sgIzIKKyAgICAgYmxvY2sgIzEKKworCitrbWFsbG9jIGFsbG9jYXRlcyBhbnkgbnVtYmVyIG9mIGJ5dGVzIG9mIHBoaXNpY2FsbHkgY29udGlndW91cyBtZW1vcnkgZnJvbSAKK2EgcG9vbCBvZiBwcmUtZGV0ZXJtaW5lZCBzaXplcy4gVGhpcyBwb29sIG9mIG1lbW9yeSBpcyBtYW50YWluZWQgYnkgdGhlIHNsYWIgCithbGxvY2F0b3Igd2ljaCBpcyBhdCB0aGUgZW5kIHRoZSByZXNwb25zaWJsZSBmb3IgZG9pbmcgdGhlIGFsbG9jYXRpb24gYW5kIAoraGVuY2Ugd2ljaCBpbXBvc2VzIHRoZSBtYXhpbXVtIG1lbW9yeSB0aGF0IGttYWxsb2MgY2FuIGFsbG9jYXRlLiAKKworSW4gYSAyLjQvMi42IGtlcm5lbCBhbmQgdGhlIGkzODYgYXJjaGl0ZWN0dXJlLCB0aGUgbGltaXQgaXMgMTMxMDcyIGJ5dGVzLiBUaGUgCitwcmVkZXRlcm1pbmVkIHNpemVzIHRoYXQga21hbGxvYyB1c2VzIGNhbiBiZSBjaGVja2VkIGluIHRoZSAic2l6ZS08Ynl0ZXM+IiAKK2VudHJpZXMgb2YgL3Byb2Mvc2xhYmluZm8KKworSW4gYSAzMiBiaXQgYXJjaGl0ZWN0dXJlLCBwb2ludGVycyBhcmUgNCBieXRlcyBsb25nLCBzbyB0aGUgdG90YWwgbnVtYmVyIG9mIAorcG9pbnRlcnMgdG8gYmxvY2tzIGlzCisKKyAgICAgMTMxMDcyLzQgPSAzMjc2OCBibG9ja3MKKworCisgUEFDS0VUX01NQVAgYnVmZmVyIHNpemUgY2FsY3VsYXRvcgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0RlZmluaXRpb25zOgorCis8c2l6ZS1tYXg+ICAgIDogaXMgdGhlIG1heGltdW0gc2l6ZSBvZiBhbGxvY2FibGUgd2l0aCBrbWFsbG9jIChzZWUgL3Byb2Mvc2xhYmluZm8pCis8cG9pbnRlciBzaXplPjogZGVwZW5kcyBvbiB0aGUgYXJjaGl0ZWN0dXJlIC0tIHNpemVvZih2b2lkICopCis8cGFnZSBzaXplPiAgIDogZGVwZW5kcyBvbiB0aGUgYXJjaGl0ZWN0dXJlIC0tIFBBR0VfU0laRSBvciBnZXRwYWdlc2l6ZSAoMikKKzxtYXgtb3JkZXI+ICAgOiBpcyB0aGUgdmFsdWUgZGVmaW5lZCB3aXRoIE1BWF9PUkRFUgorPGZyYW1lIHNpemU+ICA6IGl0J3MgYW4gdXBwZXIgYm91bmQgb2YgZnJhbWUncyBjYXB0dXJlIHNpemUgKG1vcmUgb24gdGhpcyBsYXRlcikKKworZnJvbSB0aGVzZSBkZWZpbml0aW9ucyB3ZSB3aWxsIGRlcml2ZSAKKworCTxibG9jayBudW1iZXI+ID0gPHNpemUtbWF4Pi88cG9pbnRlciBzaXplPgorCTxibG9jayBzaXplPiA9IDxwYWdlc2l6ZT4gPDwgPG1heC1vcmRlcj4KKworc28sIHRoZSBtYXggYnVmZmVyIHNpemUgaXMKKworCTxibG9jayBudW1iZXI+ICogPGJsb2NrIHNpemU+CisKK2FuZCwgdGhlIG51bWJlciBvZiBmcmFtZXMgYmUKKworCTxibG9jayBudW1iZXI+ICogPGJsb2NrIHNpemU+IC8gPGZyYW1lIHNpemU+CisKK1N1cG9zc2UgdGhlIGZvbGxvd2luZyBwYXJhbWV0ZXJzLCB3aWNoIGFwcGx5IGZvciAyLjYga2VybmVsIGFuZCBhbgoraTM4NiBhcmNoaXRlY3R1cmU6CisKKwk8c2l6ZS1tYXg+ID0gMTMxMDcyIGJ5dGVzCisJPHBvaW50ZXIgc2l6ZT4gPSA0IGJ5dGVzCisJPHBhZ2VzaXplPiA9IDQwOTYgYnl0ZXMKKwk8bWF4LW9yZGVyPiA9IDExCisKK2FuZCBhIHZhbHVlIGZvciA8ZnJhbWUgc2l6ZT4gb2YgMjA0OCBieXRlYXMuIFRoZXNlIHBhcmFtZXRlcnMgd2lsbCB5aWVsZAorCisJPGJsb2NrIG51bWJlcj4gPSAxMzEwNzIvNCA9IDMyNzY4IGJsb2NrcworCTxibG9jayBzaXplPiA9IDQwOTYgPDwgMTEgPSA4IE1pQi4KKworYW5kIGhlbmNlIHRoZSBidWZmZXIgd2lsbCBoYXZlIGEgMjYyMTQ0IE1pQiBzaXplLiBTbyBpdCBjYW4gaG9sZCAKKzI2MjE0NCBNaUIgLyAyMDQ4IGJ5dGVzID0gMTM0MjE3NzI4IGZyYW1lcworCisKK0FjdHVhbGx5LCB0aGlzIGJ1ZmZlciBzaXplIGlzIG5vdCBwb3NzaWJsZSB3aXRoIGFuIGkzODYgYXJjaGl0ZWN0dXJlLiAKK1JlbWVtYmVyIHRoYXQgdGhlIG1lbW9yeSBpcyBhbGxvY2F0ZWQgaW4ga2VybmVsIHNwYWNlLCBpbiB0aGUgY2FzZSBvZiAKK2FuIGkzODYga2VybmVsJ3MgbWVtb3J5IHNpemUgaXMgbGltaXRlZCB0byAxR2lCLgorCitBbGwgbWVtb3J5IGFsbG9jYXRpb25zIGFyZSBub3QgZnJlZWQgdW50aWwgdGhlIHNvY2tldCBpcyBjbG9zZWQuIFRoZSBtZW1vcnkgCithbGxvY2F0aW9ucyBhcmUgZG9uZSB3aXRoIEdGUF9LRVJORUwgcHJpb3JpdHksIHRoaXMgYmFzaWNhbGx5IG1lYW5zIHRoYXQgCit0aGUgYWxsb2NhdGlvbiBjYW4gd2FpdCBhbmQgc3dhcCBvdGhlciBwcm9jZXNzJyBtZW1vcnkgaW4gb3JkZXIgdG8gYWxsb2NhdGUgCit0aGUgbmVjZWNlc3NhcnkgbWVtb3J5LCBzbyBub3JtYWxseSBsaW1pdHMgY2FuIGJlIHJlYWNoZWQuCisKKyBPdGhlciBjb25zdHJhaW50cworLS0tLS0tLS0tLS0tLS0tLS0tLQorCitJZiB5b3UgY2hlY2sgdGhlIHNvdXJjZSBjb2RlIHlvdSB3aWxsIHNlZSB0aGF0IHdoYXQgSSBkcmF3IGhlcmUgYXMgYSBmcmFtZQoraXMgbm90IG9ubHkgdGhlIGxpbmsgbGV2ZWwgZnJhbWUuIEF0IHRoZSBiZWdpbmluZyBvZiBlYWNoIGZyYW1lIHRoZXJlIGlzIGEgCitoZWFkZXIgY2FsbGVkIHN0cnVjdCB0cGFja2V0X2hkciB1c2VkIGluIFBBQ0tFVF9NTUFQIHRvIGhvbGQgbGluayBsZXZlbCdzIGZyYW1lCittZXRhIGluZm9ybWF0aW9uIGxpa2UgdGltZXN0YW1wLiBTbyB3aGF0IHdlIGRyYXcgaGVyZSBhIGZyYW1lIGl0J3MgcmVhbGx5IAordGhlIGZvbGxvd2luZyAoZnJvbSBpbmNsdWRlL2xpbnV4L2lmX3BhY2tldC5oKToKKworLyoKKyAgIEZyYW1lIHN0cnVjdHVyZToKKworICAgLSBTdGFydC4gRnJhbWUgbXVzdCBiZSBhbGlnbmVkIHRvIFRQQUNLRVRfQUxJR05NRU5UPTE2CisgICAtIHN0cnVjdCB0cGFja2V0X2hkcgorICAgLSBwYWQgdG8gVFBBQ0tFVF9BTElHTk1FTlQ9MTYKKyAgIC0gc3RydWN0IHNvY2thZGRyX2xsCisgICAtIEdhcCwgY2hvc2VuIHNvIHRoYXQgcGFja2V0IGRhdGEgKFN0YXJ0K3RwX25ldCkgYWxpZ25lcyB0byAKKyAgICAgVFBBQ0tFVF9BTElHTk1FTlQ9MTYKKyAgIC0gU3RhcnQrdHBfbWFjOiBbIE9wdGlvbmFsIE1BQyBoZWFkZXIgXQorICAgLSBTdGFydCt0cF9uZXQ6IFBhY2tldCBkYXRhLCBhbGlnbmVkIHRvIFRQQUNLRVRfQUxJR05NRU5UPTE2LgorICAgLSBQYWQgdG8gYWxpZ24gdG8gVFBBQ0tFVF9BTElHTk1FTlQ9MTYKKyAqLworICAgICAgICAgICAKKyAKKyBUaGUgZm9sbG93aW5nIGFyZSBjb25kaXRpb25zIHRoYXQgYXJlIGNoZWNrZWQgaW4gcGFja2V0X3NldF9yaW5nCisKKyAgIHRwX2Jsb2NrX3NpemUgbXVzdCBiZSBhIG11bHRpcGxlIG9mIFBBR0VfU0laRSAoMSkKKyAgIHRwX2ZyYW1lX3NpemUgbXVzdCBiZSBncmVhdGVyIHRoYW4gVFBBQ0tFVF9IRFJMRU4gKG9idmlvdXMpCisgICB0cF9mcmFtZV9zaXplIG11c3QgYmUgYSBtdWx0aXBsZSBvZiBUUEFDS0VUX0FMSUdOTUVOVAorICAgdHBfZnJhbWVfbnIgICBtdXN0IGJlIGV4YWN0bHkgZnJhbWVzX3Blcl9ibG9jayp0cF9ibG9ja19ucgorCitOb3RlIHRoYXQgdHBfYmxvY2tfc2l6ZSBzaG91bGQgYmUgY2hvb3NlZCB0byBiZSBhIHBvd2VyIG9mIHR3byBvciB0aGVyZSB3aWxsCitiZSBhIHdhc3RlIG9mIG1lbW9yeS4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKysgTWFwaW5nIGFuZCB1c2Ugb2YgdGhlIGNpcmN1bGFyIGJ1ZmZlciAocmluZykKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZSBtYXBpbmcgb2YgdGhlIGJ1ZmZlciBpbiB0aGUgdXNlciBwcm9jZXNzIGlzIGRvbmUgd2l0aCB0aGUgY29udmVudGlvbmFsIAorbW1hcCBmdW5jdGlvbi4gRXZlbiB0aGUgY2lyY3VsYXIgYnVmZmVyIGlzIGNvbXBvdW5kIG9mIHNldmVyYWwgcGh5c2ljYWxseQorZGlzY29udGlndW91cyBibG9ja3Mgb2YgbWVtb3J5LCB0aGV5IGFyZSBjb250aWd1b3VzIHRvIHRoZSB1c2VyIHNwYWNlLCBoZW5jZQoranVzdCBvbmUgY2FsbCB0byBtbWFwIGlzIG5lZWRlZDoKKworICAgIG1tYXAoMCwgc2l6ZSwgUFJPVF9SRUFEfFBST1RfV1JJVEUsIE1BUF9TSEFSRUQsIGZkLCAwKTsKKworSWYgdHBfZnJhbWVfc2l6ZSBpcyBhIGRpdmlzb3Igb2YgdHBfYmxvY2tfc2l6ZSBmcmFtZXMgd2lsbCBiZSAKK2NvbnRpZ3Vvc2x5IHNwYWNlZCBieSB0cF9mcmFtZV9zaXplIGJ5dGVzLiBJZiBub3QsIGVhY2ggCit0cF9ibG9ja19zaXplL3RwX2ZyYW1lX3NpemUgZnJhbWVzIHRoZXJlIHdpbGwgYmUgYSBnYXAgYmV0d2VlbiAKK3RoZSBmcmFtZXMuIFRoaXMgaXMgYmVjYXVzZSBhIGZyYW1lIGNhbm5vdCBiZSBzcGF3biBhY3Jvc3MgdHdvCitibG9ja3MuIAorCitBdCB0aGUgYmVnaW5uaW5nIG9mIGVhY2ggZnJhbWUgdGhlcmUgaXMgYW4gc3RhdHVzIGZpZWxkIChzZWUgCitzdHJ1Y3QgdHBhY2tldF9oZHIpLiBJZiB0aGlzIGZpZWxkIGlzIDAgbWVhbnMgdGhhdCB0aGUgZnJhbWUgaXMgcmVhZHkKK3RvIGJlIHVzZWQgZm9yIHRoZSBrZXJuZWwsIElmIG5vdCwgdGhlcmUgaXMgYSBmcmFtZSB0aGUgdXNlciBjYW4gcmVhZCAKK2FuZCB0aGUgZm9sbG93aW5nIGZsYWdzIGFwcGx5OgorCisgICAgIGZyb20gaW5jbHVkZS9saW51eC9pZl9wYWNrZXQuaAorCisgICAgICNkZWZpbmUgVFBfU1RBVFVTX0NPUFkgICAgICAgICAgMiAKKyAgICAgI2RlZmluZSBUUF9TVEFUVVNfTE9TSU5HICAgICAgICA0IAorICAgICAjZGVmaW5lIFRQX1NUQVRVU19DU1VNTk9UUkVBRFkgIDggCisKKworVFBfU1RBVFVTX0NPUFkgICAgICAgIDogVGhpcyBmbGFnIGluZGljYXRlcyB0aGF0IHRoZSBmcmFtZSAoYW5kIGFzc29jaWF0ZWQKKyAgICAgICAgICAgICAgICAgICAgICAgIG1ldGEgaW5mb3JtYXRpb24pIGhhcyBiZWVuIHRydW5jYXRlZCBiZWNhdXNlIGl0J3MgCisgICAgICAgICAgICAgICAgICAgICAgICBsYXJnZXIgdGhhbiB0cF9mcmFtZV9zaXplLiBUaGlzIHBhY2tldCBjYW4gYmUgCisgICAgICAgICAgICAgICAgICAgICAgICByZWFkIGVudGlyZWx5IHdpdGggcmVjdmZyb20oKS4KKyAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgSW4gb3JkZXIgdG8gbWFrZSB0aGlzIHdvcmsgaXQgbXVzdCB0byBiZQorICAgICAgICAgICAgICAgICAgICAgICAgZW5hYmxlZCBwcmV2aW91c2x5IHdpdGggc2V0c29ja29wdCgpIGFuZCAKKyAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBQQUNLRVRfQ09QWV9USFJFU0ggb3B0aW9uLiAKKworICAgICAgICAgICAgICAgICAgICAgICAgVGhlIG51bWJlciBvZiBmcmFtZXMgdGhhbiBjYW4gYmUgYnVmZmVyZWQgdG8gCisgICAgICAgICAgICAgICAgICAgICAgICBiZSByZWFkIHdpdGggcmVjdmZyb20gaXMgbGltaXRlZCBsaWtlIGEgbm9ybWFsIHNvY2tldC4KKyAgICAgICAgICAgICAgICAgICAgICAgIFNlZSB0aGUgU09fUkNWQlVGIG9wdGlvbiBpbiB0aGUgc29ja2V0ICg3KSBtYW4gcGFnZS4KKworVFBfU1RBVFVTX0xPU0lORyAgICAgIDogaW5kaWNhdGVzIHRoZXJlIHdlcmUgcGFja2V0IGRyb3BzIGZyb20gbGFzdCB0aW1lIAorICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGlzdGljcyB3aGVyZSBjaGVja2VkIHdpdGggZ2V0c29ja29wdCgpIGFuZAorICAgICAgICAgICAgICAgICAgICAgICAgdGhlIFBBQ0tFVF9TVEFUSVNUSUNTIG9wdGlvbi4KKworVFBfU1RBVFVTX0NTVU1OT1RSRUFEWTogY3VycmVudGx5IGl0J3MgdXNlZCBmb3Igb3V0Z29pbmcgSVAgcGFja2V0cyB3aWNoIAorICAgICAgICAgICAgICAgICAgICAgICAgaXQncyBjaGVja3N1bSB3aWxsIGJlIGRvbmUgaW4gaGFyZHdhcmUuIFNvIHdoaWxlIAorICAgICAgICAgICAgICAgICAgICAgICAgcmVhZGluZyB0aGUgcGFja2V0IHdlIHNob3VsZCBub3QgdHJ5IHRvIGNoZWNrIHRoZSAKKyAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrc3VtLiAKKworZm9yIGNvbnZlbmllbmNlIHRoZXJlIGFyZSBhbHNvIHRoZSBmb2xsb3dpbmcgZGVmaW5lczoKKworICAgICAjZGVmaW5lIFRQX1NUQVRVU19LRVJORUwgICAgICAgIDAKKyAgICAgI2RlZmluZSBUUF9TVEFUVVNfVVNFUiAgICAgICAgICAxCisKK1RoZSBrZXJuZWwgaW5pdGlhbGl6ZXMgYWxsIGZyYW1lcyB0byBUUF9TVEFUVVNfS0VSTkVMLCB3aGVuIHRoZSBrZXJuZWwKK3JlY2VpdmVzIGEgcGFja2V0IGl0IHB1dHMgaW4gdGhlIGJ1ZmZlciBhbmQgdXBkYXRlcyB0aGUgc3RhdHVzIHdpdGgKK2F0IGxlYXN0IHRoZSBUUF9TVEFUVVNfVVNFUiBmbGFnLiBUaGVuIHRoZSB1c2VyIGNhbiByZWFkIHRoZSBwYWNrZXQsCitvbmNlIHRoZSBwYWNrZXQgaXMgcmVhZCB0aGUgdXNlciBtdXN0IHplcm8gdGhlIHN0YXR1cyBmaWVsZCwgc28gdGhlIGtlcm5lbCAKK2NhbiB1c2UgYWdhaW4gdGhhdCBmcmFtZSBidWZmZXIuCisKK1RoZSB1c2VyIGNhbiB1c2UgcG9sbCAoYW55IG90aGVyIHZhcmlhbnQgc2hvdWxkIGFwcGx5IHRvbykgdG8gY2hlY2sgaWYgbmV3CitwYWNrZXRzIGFyZSBpbiB0aGUgcmluZzoKKworICAgIHN0cnVjdCBwb2xsZmQgcGZkOworCisgICAgcGZkLmZkID0gZmQ7CisgICAgcGZkLnJldmVudHMgPSAwOworICAgIHBmZC5ldmVudHMgPSBQT0xMSU58UE9MTFJETk9STXxQT0xMRVJSOworCisgICAgaWYgKHN0YXR1cyA9PSBUUF9TVEFUVVNfS0VSTkVMKQorICAgICAgICByZXR2YWwgPSBwb2xsKCZwZmQsIDEsIHRpbWVvdXQpOworCitJdCBkb2Vzbid0IGluY3VyIGluIGEgcmFjZSBjb25kaXRpb24gdG8gZmlyc3QgY2hlY2sgdGhlIHN0YXR1cyB2YWx1ZSBhbmQgCit0aGVuIHBvbGwgZm9yIGZyYW1lcy4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKysgVEhBTktTCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgCisgICBKZXNzZSBCcmFuZGVidXJnLCBmb3IgZml4aW5nIG15IGdyYW1tYXRoaWNhbC9zcGVsbGluZyBlcnJvcnMKKwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3BrdGdlbi50eHQgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvcGt0Z2VuLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYzRiNGQwCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3BrdGdlbi50eHQKQEAgLTAsMCArMSwyMTQgQEAKKworCisgICAgICAgICAgICAgICAgICBIT1dUTyBmb3IgdGhlIGxpbnV4IHBhY2tldCBnZW5lcmF0b3IgCisgICAgICAgICAgICAgICAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworRGF0ZTogMDQxMjIxCisKK0VuYWJsZSBDT05GSUdfTkVUX1BLVEdFTiB0byBjb21waWxlIGFuZCBidWlsZCBwa3RnZW4ubyBlaXRoZXIgaW4ga2VybmVsCitvciBhcyBtb2R1bGUuIE1vZHVsZSBpcyBwcmVmZXJyZWQuIGluc21vZCBwa3RnZW4gaWYgbmVlZGVkLiBPbmNlIHJ1bm5pbmcKK3BrdGdlbiBjcmVhdGVzIGEgdGhyZWFkIG9uIGVhY2ggQ1BVIHdoZXJlIGVhY2ggdGhyZWFkIGhhcyBhZmZpbnR5IGl0J3MgQ1BVLgorTW9uaXRvcmluZyBhbmQgY29udHJvbGxpbmcgaXMgZG9uZSB2aWEgL3Byb2MuIEVhc2llc3QgdG8gc2VsZWN0IGEgc3VpdGFibGUgCithIHNhbXBsZSBzY3JpcHQgYW5kIGNvbmZpZ3VyZS4KKworT24gYSBkdWFsIENQVToKKworcHMgYXV4IHwgZ3JlcCBwa3QKK3Jvb3QgICAgICAgMTI5ICAwLjMgIDAuMCAgICAgMCAgICAwID8gICAgICAgIFNXICAgIDIwMDMgNTIzOjIwIFtwa3RnZW4vMF0KK3Jvb3QgICAgICAgMTMwICAwLjMgIDAuMCAgICAgMCAgICAwID8gICAgICAgIFNXICAgIDIwMDMgNTA5OjUwIFtwa3RnZW4vMV0KKworCitGb3IgbW9udG9yaW5nIGFuZCBjb250cm9sIHBrdGdlbiBjcmVhdGVzOgorCS9wcm9jL25ldC9wa3RnZW4vcGdjdHJsCisJL3Byb2MvbmV0L3BrdGdlbi9rcGt0Z2VuZF9YCisgICAgICAgIC9wcm9jL25ldC9wa3RnZW4vZXRoWAorCisKK1ZpZXdpbmcgdGhyZWFkcworPT09PT09PT09PT09PT09CisvcHJvYy9uZXQvcGt0Z2VuL2twa3RnZW5kXzAgCitOYW1lOiBrcGt0Z2VuZF8wICBtYXhfYmVmb3JlX3NvZnRpcnE6IDEwMDAwCitSdW5uaW5nOiAKK1N0b3BwZWQ6IGV0aDEgCitSZXN1bHQ6IE9LOiBtYXhfYmVmb3JlX3NvZnRpcnE9MTAwMDAKKworTW9zdCBpbXBvcnRhbnQgdGhlIGRldmljZXMgYXNzaWdlbmQgdG8gdGhyZWFkLiBOb3RlISBBIGRldmljZSBjYW4gb25seSBiZWxvbmcgCit0byBvbmUgdGhyZWFkLgorCisKK1ZpZXdpbmcgZGV2aWNlcworPT09PT09PT09PT09PT09CisKK1Bhcm0gc2VjdGlvbiBob2xkcyBjb25maWd1cmVkIGluZm8uIEN1cnJlbnQgaG9sZCBydW5uaW5nIHN0YXRzLiAKK1Jlc3VsdCBpcyBwcmludGVkIGFmdGVyIHJ1biBvciBhZnRlciBpbnRlcnJ1cHRpb24uIEV4YW1wbGU6CisKKy9wcm9jL25ldC9wa3RnZW4vZXRoMSAgICAgICAKKworUGFyYW1zOiBjb3VudCAxMDAwMDAwMCAgbWluX3BrdF9zaXplOiA2MCAgbWF4X3BrdF9zaXplOiA2MAorICAgICBmcmFnczogMCAgZGVsYXk6IDAgIGNsb25lX3NrYjogMTAwMDAwMCAgaWZuYW1lOiBldGgxCisgICAgIGZsb3dzOiAwIGZsb3dsZW46IDAKKyAgICAgZHN0X21pbjogMTAuMTAuMTEuMiAgZHN0X21heDogCisgICAgIHNyY19taW46ICAgc3JjX21heDogCisgICAgIHNyY19tYWM6IDAwOjAwOjAwOjAwOjAwOjAwICBkc3RfbWFjOiAwMDowNDoyMzpBQzpGRDo4MgorICAgICB1ZHBfc3JjX21pbjogOSAgdWRwX3NyY19tYXg6IDkgIHVkcF9kc3RfbWluOiA5ICB1ZHBfZHN0X21heDogOQorICAgICBzcmNfbWFjX2NvdW50OiAwICBkc3RfbWFjX2NvdW50OiAwIAorICAgICBGbGFnczogCitDdXJyZW50OgorICAgICBwa3RzLXNvZmFyOiAxMDAwMDAwMCAgZXJyb3JzOiAzOTY2NAorICAgICBzdGFydGVkOiAxMTAzMDUzOTg2MjQ1MTg3dXMgIHN0b3BwZWQ6IDExMDMwNTM5OTkzNDYzMjl1cyBpZGxlOiA4ODA0MDF1cworICAgICBzZXFfbnVtOiAxMDAwMDAxMSAgY3VyX2RzdF9tYWNfb2Zmc2V0OiAwICBjdXJfc3JjX21hY19vZmZzZXQ6IDAKKyAgICAgY3VyX3NhZGRyOiAweDEwYTBhMGEgIGN1cl9kYWRkcjogMHgyMGIwYTBhCisgICAgIGN1cl91ZHBfZHN0OiA5ICBjdXJfdWRwX3NyYzogOQorICAgICBmbG93czogMAorUmVzdWx0OiBPSzogMTMxMDExNDIoYzEyMjIwNzQxK2Q4ODA0MDEpIHVzZWMsIDEwMDAwMDAwICg2MGJ5dGUsMGZyYWdzKQorICA3NjMyOTJwcHMgMzkwTWIvc2VjICgzOTA4MDU1MDRicHMpIGVycm9yczogMzk2NjQKKworQ29uZmd1cmluZyB0aHJlYWRzIGFuZCBkZXZpY2VzCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK1RoaXMgaXMgZG9uZSB2aWEgdGhlIC9wcm9jIGludGVyZmFjZSBlYXNpZXN0IGRvbmUgdmlhIHBnc2V0IGluIHRoZSBzY3JpcHRzCisKK0V4YW1wbGVzOgorCisgcGdzZXQgImNsb25lX3NrYiAxIiAgICAgc2V0cyB0aGUgbnVtYmVyIG9mIGNvcGllcyBvZiB0aGUgc2FtZSBwYWNrZXQKKyBwZ3NldCAiY2xvbmVfc2tiIDAiICAgICB1c2Ugc2luZ2xlIFNLQiBmb3IgYWxsIHRyYW5zbWl0cworIHBnc2V0ICJwa3Rfc2l6ZSA5MDE0IiAgIHNldHMgcGFja2V0IHNpemUgdG8gOTAxNAorIHBnc2V0ICJmcmFncyA1IiAgICAgICAgIHBhY2tldCB3aWxsIGNvbnNpc3Qgb2YgNSBmcmFnbWVudHMKKyBwZ3NldCAiY291bnQgMjAwMDAwIiAgICBzZXRzIG51bWJlciBvZiBwYWNrZXRzIHRvIHNlbmQsIHNldCB0byB6ZXJvCisgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGNvbnRpbmlvdXMgc2VuZHMgdW50aWxsIGV4cGxpY2l0bCBzdG9wcGVkLgorCisgcGdzZXQgImRlbGF5IDUwMDAiICAgICAgYWRkcyBkZWxheSB0byBoYXJkX3N0YXJ0X3htaXQoKS4gbmFub3NlY29uZHMKKworIHBnc2V0ICJkc3QgMTAuMC4wLjEiICAgIHNldHMgSVAgZGVzdGluYXRpb24gYWRkcmVzcworICAgICAgICAgICAgICAgICAgICAgICAgIChCRVdBUkUhIFRoaXMgZ2VuZXJhdG9yIGlzIHZlcnkgYWdncmVzc2l2ZSEpCisKKyBwZ3NldCAiZHN0X21pbiAxMC4wLjAuMSIgICAgICAgICAgICBTYW1lIGFzIGRzdAorIHBnc2V0ICJkc3RfbWF4IDEwLjAuMC4yNTQiICAgICAgICAgIFNldCB0aGUgbWF4aW11bSBkZXN0aW5hdGlvbiBJUC4KKyBwZ3NldCAic3JjX21pbiAxMC4wLjAuMSIgICAgICAgICAgICBTZXQgdGhlIG1pbmltdW0gKG9yIG9ubHkpIHNvdXJjZSBJUC4KKyBwZ3NldCAic3JjX21heCAxMC4wLjAuMjU0IiAgICAgICAgICBTZXQgdGhlIG1heGltdW0gc291cmNlIElQLgorIHBnc2V0ICJkc3Q2IGZlYzA6OjEiICAgICBJUFY2IGRlc3RpbmF0aW9uIGFkZHJlc3MKKyBwZ3NldCAic3JjNiBmZWMwOjoyIiAgICAgSVBWNiBzb3VyY2UgYWRkcmVzcworIHBnc2V0ICJkc3RtYWMgMDA6MDA6MDA6MDA6MDA6MDAiICAgIHNldHMgTUFDIGRlc3RpbmF0aW9uIGFkZHJlc3MKKyBwZ3NldCAic3JjbWFjIDAwOjAwOjAwOjAwOjAwOjAwIiAgICBzZXRzIE1BQyBzb3VyY2UgYWRkcmVzcworCisgcGdzZXQgInNyY19tYWNfY291bnQgMSIgU2V0cyB0aGUgbnVtYmVyIG9mIE1BQ3Mgd2UnbGwgcmFuZ2UgdGhyb3VnaC4gIAorICAgICAgICAgICAgICAgICAgICAgICAgIFRoZSAnbWluaW11bScgTUFDIGlzIHdoYXQgeW91IHNldCB3aXRoIHNyY21hYy4KKworIHBnc2V0ICJkc3RfbWFjX2NvdW50IDEiIFNldHMgdGhlIG51bWJlciBvZiBNQUNzIHdlJ2xsIHJhbmdlIHRocm91Z2guCisgICAgICAgICAgICAgICAgICAgICAgICAgVGhlICdtaW5pbXVtJyBNQUMgaXMgd2hhdCB5b3Ugc2V0IHdpdGggZHN0bWFjLgorCisgcGdzZXQgImZsYWcgW25hbWVdIiAgICAgU2V0IGEgZmxhZyB0byBkZXRlcm1pbmUgYmVoYXZpb3VyLiAgQ3VycmVudCBmbGFncworICAgICAgICAgICAgICAgICAgICAgICAgIGFyZTogSVBTUkNfUk5EICNJUCBTb3VyY2UgaXMgcmFuZG9tIChiZXR3ZWVuIG1pbi9tYXgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSVBEU1RfUk5ELCBVRFBTUkNfUk5ELAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVURQRFNUX1JORCwgTUFDU1JDX1JORCwgTUFDRFNUX1JORCAKKworIHBnc2V0ICJ1ZHBfc3JjX21pbiA5IiAgIHNldCBVRFAgc291cmNlIHBvcnQgbWluLCBJZiA8IHVkcF9zcmNfbWF4LCB0aGVuCisgICAgICAgICAgICAgICAgICAgICAgICAgY3ljbGUgdGhyb3VnaCB0aGUgcG9ydCByYW5nZS4KKworIHBnc2V0ICJ1ZHBfc3JjX21heCA5IiAgIHNldCBVRFAgc291cmNlIHBvcnQgbWF4LgorIHBnc2V0ICJ1ZHBfZHN0X21pbiA5IiAgIHNldCBVRFAgZGVzdGluYXRpb24gcG9ydCBtaW4sIElmIDwgdWRwX2RzdF9tYXgsIHRoZW4KKyAgICAgICAgICAgICAgICAgICAgICAgICBjeWNsZSB0aHJvdWdoIHRoZSBwb3J0IHJhbmdlLgorIHBnc2V0ICJ1ZHBfZHN0X21heCA5IiAgIHNldCBVRFAgZGVzdGluYXRpb24gcG9ydCBtYXguCisKKyBwZ3NldCBzdG9wICAgIAkgICAgICAgICAgYWJvcnRzIGluamVjdGlvbi4gQWxzbywgXkMgYWJvcnRzIGdlbmVyYXRvci4KKworCitFeGFtcGxlIHNjcmlwdHMKKz09PT09PT09PT09PT09PQorCitBIGNvbGxlY3Rpb24gb2Ygc21hbGwgdHV0b3JpYWwgc2NyaXB0cyBmb3IgcGt0Z2VuIGlzIGluIGV4cGFtcGxlcyBkaXIuCisKK3BrdGdlbi5jb25mLTEtMSAgICAgICAgICAgICAgICAgICMgMSBDUFUgMSBkZXYgCitwa3RnZW4uY29uZi0xLTIgICAgICAgICAgICAgICAgICAjIDEgQ1BVIDIgZGV2Citwa3RnZW4uY29uZi0yLTEgICAgICAgICAgICAgICAgICAjIDIgQ1BVJ3MgMSBkZXYgCitwa3RnZW4uY29uZi0yLTIgICAgICAgICAgICAgICAgICAjIDIgQ1BVJ3MgMiBkZXYKK3BrdGdlbi5jb25mLTEtMS1yZG9zICAgICAgICAgICAgICMgMSBDUFUgMSBkZXYgdy4gcm91dGUgRG9TIAorcGt0Z2VuLmNvbmYtMS0xLWlwNiAgICAgICAgICAgICAgIyAxIENQVSAxIGRldiBpcHY2Citwa3RnZW4uY29uZi0xLTEtaXA2LXJkb3MgICAgICAgICAjIDEgQ1BVIDEgZGV2IGlwdjYgIHcuIHJvdXRlIERvUworcGt0Z2VuLmNvbmYtMS0xLWZsb3dzICAgICAgICAgICAgIyAxIENQVSAxIGRldiBtdWx0aXBsZSBmbG93cy4KKworUnVuIGluIHNoZWxsOiAuL3BrdGdlbi5jb25mLVgtWSBJdCBkb2VzIGFsbCB0aGUgc2V0dXAgaW5jbHVkaW5nIHNlbmRpbmcuIAorCisKK0ludGVycnVwdCBhZmZpbml0eQorPT09PT09PT09PT09PT09PT09PQorTm90ZSB3aGVuIGFkZGluZyBkZXZpY2VzIHRvIGEgc3BlY2lmaWMgQ1BVIHRoZXJlIGdvb2QgaWRlYSB0byBhbHNvIGFzc2lnbiAKKy9wcm9jL2lycS9YWC9zbXBfYWZmaW5pdHkgc28gdGhlIFRYLWludGVycnVwdHMgZ2V0cyBib3VuZCB0byB0aGUgc2FtZSBDUFUuCithcyB0aGlzIHJlZHVjZXMgY2FjaGUgYm91bmNpbmcgd2hlbiBmcmVlaW5nIHNrYidzLgorCisKK0N1cnJlbnQgY29tbWFuZHMgYW5kIGNvbmZpZ3VyYXRpb24gb3B0aW9ucworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKyoqIFBnY29udHJvbCBjb21tYW5kczoKKworc3RhcnQKK3N0b3AKKworKiogVGhyZWFkIGNvbW1hbmRzOgorCithZGRfZGV2aWNlCityZW1fZGV2aWNlX2FsbAorbWF4X2JlZm9yZV9zb2Z0aXJxCisKKworKiogRGV2aWNlIGNvbW1hbmRzOgorCitjb3VudAorY2xvbmVfc2tiCitkZWJ1ZworCitmcmFncworZGVsYXkKKworc3JjX21hY19jb3VudAorZHN0X21hY19jb3VudAorCitwa3Rfc2l6ZSAKK21pbl9wa3Rfc2l6ZQorbWF4X3BrdF9zaXplCisKK3VkcF9zcmNfbWluCit1ZHBfc3JjX21heAorCit1ZHBfZHN0X21pbgordWRwX2RzdF9tYXgKKworZmxhZworICBJUFNSQ19STkQKKyAgVFhTSVpFX1JORAorICBJUERTVF9STkQKKyAgVURQU1JDX1JORAorICBVRFBEU1RfUk5ECisgIE1BQ1NSQ19STkQKKyAgTUFDRFNUX1JORAorCitkc3RfbWluCitkc3RfbWF4CisKK3NyY19taW4KK3NyY19tYXgKKworZHN0X21hYworc3JjX21hYworCitjbGVhcl9jb3VudGVycworCitkc3Q2CitzcmM2CisKK2Zsb3dzCitmbG93bGVuCisKK1JlZmVyZW5jZXM6CitmdHA6Ly9yb2J1ci5zbHUuc2UvcHViL0xpbnV4L25ldC1kZXZlbG9wbWVudC9wa3RnZW4tdGVzdGluZy8KK2Z0cDovL3JvYnVyLnNsdS5zZS9wdWIvTGludXgvbmV0LWRldmVsb3BtZW50L3BrdGdlbi10ZXN0aW5nL2V4YW1wbGVzLworCitQYXBlciBmcm9tIExpbnV4LUtvbmdyZXNzIGluIEVybGFuZ2VuIDIwMDQuCitmdHA6Ly9yb2J1ci5zbHUuc2UvcHViL0xpbnV4L25ldC1kZXZlbG9wbWVudC9wa3RnZW4tdGVzdGluZy9wa3RnZW5fcGFwZXIucGRmCisKK1RoYW5rcyB0bzoKK0dyYW50IEdydW5kbGVyIGZvciB0ZXN0aW5nIG9uIElBLTY0IGFuZCBwYXJpc2MsIEhhcmFsZCBXZWx0ZSwgIExlbm5lcnQgQnV5dGVuaGVrCitTdGVwaGVuIEhlbW1pbmdlciwgQW5kaSBLbGVlbiwgRGF2ZSBNaWxsZXIgYW5kIG1hbnkgb3RoZXJzLgorCisKK0dvb2QgbHVjayB3aXRoIHRoZSBsaW51eCBuZXQtZGV2ZWxvcG1lbnQuClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3BvbGljeS1yb3V0aW5nLnR4dCBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9wb2xpY3ktcm91dGluZy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzZmNjkzNgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9wb2xpY3ktcm91dGluZy50eHQKQEAgLTAsMCArMSwxNTAgQEAKK0NsYXNzZXMKKy0tLS0tLS0KKworCSJDbGFzcyIgaXMgYSBjb21wbGV0ZSByb3V0aW5nIHRhYmxlIGluIGNvbW1vbiBzZW5zZS4KKwlJLmUuIGl0IGlzIHRyZWUgb2Ygbm9kZXMgKGRlc3RpbmF0aW9uIHByZWZpeCwgdG9zLCBtZXRyaWMpCisJd2l0aCBhdHRhY2hlZCBpbmZvcm1hdGlvbjogZ2F0ZXdheSwgZGV2aWNlIGV0Yy4KKwlUaGlzIHRyZWUgaXMgbG9va2VkIHVwIGFzIHNwZWNpZmllZCBpbiBSRkMxODEyIDUuMi40LjMKKwkxLiBCYXNpYyBtYXRjaAorCTIuIExvbmdlc3QgbWF0Y2gKKwkzLiBXZWFrIFRPUy4KKwk0LiBNZXRyaWMuIChzaG91bGQgbm90IGJlIGluIGtlcm5lbCBzcGFjZSwgYnV0IHRoZXkgYXJlKQorCTUuIEFkZGl0aW9uYWwgcHJ1bmluZyBydWxlcy4gKG5vdCBpbiBrZXJuZWwgc3BhY2UpLgorCQorCVdlIGhhdmUgdHdvIHNwZWNpYWwgdHlwZSBvZiBub2RlczoKKwlSRUpFQ1QgLSBhYm9ydCByb3V0ZSBsb29rdXAgYW5kIHJldHVybiBhbiBlcnJvciB2YWx1ZS4KKwlUSFJPVyAgLSBhYm9ydCByb3V0ZSBsb29rdXAgaW4gdGhpcyBjbGFzcy4KKworCisJQ3VycmVudGx5IHRoZSBudW1iZXIgb2YgY2xhc3NlcyBpcyBsaW1pdGVkIHRvIDI1NQorCSgwIGlzIHJlc2VydmVkIGZvciAibm90IHNwZWNpZmllZCBjbGFzcyIpCisKKwlUaHJlZSBjbGFzc2VzIGFyZSBidWlsdGluOgorCisJUlRfQ0xBU1NfTE9DQUw9MjU1IC0gbG9jYWwgaW50ZXJmYWNlIGFkZHJlc3NlcywKKwlicm9hZGNhc3RzLCBuYXQgYWRkcmVzc2VzLgorCisJUlRfQ0xBU1NfTUFJTj0yNTQgIC0gYWxsIG5vcm1hbCByb3V0ZXMgYXJlIHB1dCB0aGVyZQorCWJ5IGRlZmF1bHQuCisKKwlSVF9DTEFTU19ERUZBVUxUPTI1MyAtIGlmIGlwX2ZpYl9tb2RlbD09MSwgdGhlbgorCW5vcm1hbCBkZWZhdWx0IHJvdXRlcyBhcmUgcHV0IHRoZXJlLCBpZiBpcF9maWJfbW9kZWw9PTIKKwlhbGwgZ2F0ZXdheSByb3V0ZXMgYXJlIHB1dCB0aGVyZS4KKworCitSdWxlcworLS0tLS0KKwlSdWxlIGlzIGEgcmVjb3JkIG9mIChzcmMgcHJlZml4LCBzcmMgaW50ZXJmYWNlLCB0b3MsIGRzdCBwcmVmaXgpCisJd2l0aCBhdHRhY2hlZCBpbmZvcm1hdGlvbi4KKworCVJ1bGUgdHlwZXM6CisJUlRQX1JPVVRFIC0gbG9va3VwIGluIGF0dGFjaGVkIGNsYXNzCisJUlRQX05BVCAgIC0gbG9va3VwIGluIGF0dGFjaGVkIGNsYXNzIGFuZCBpZiBhIG1hdGNoIGlzIGZvdW5kLAorCQkgICAgdHJhbnNsYXRlIHBhY2tldCBzb3VyY2UgYWRkcmVzcy4KKwlSVFBfTUFTUVVFUkFERSAtIGxvb2t1cCBpbiBhdHRhY2hlZCBjbGFzcyBhbmQgaWYgYSBtYXRjaCBpcyBmb3VuZCwKKwkJICAgIG1hc3F1ZXJhZGUgcGFja2V0IGFzIHNvdXJjZWQgYnkgdXMuCisJUlRQX0RST1AgICAtIHNpbGVudGx5IGRyb3AgdGhlIHBhY2tldC4KKwlSVFBfUkVKRUNUIC0gZHJvcCB0aGUgcGFja2V0IGFuZCBzZW5kIElDTVAgTkVUIFVOUkVBQ0hBQkxFLgorCVJUUF9QUk9ISUJJVCAtIGRyb3AgdGhlIHBhY2tldCBhbmQgc2VuZCBJQ01QIENPTU0uIEFETS4gUFJPSElCSVRFRC4KKworCVJ1bGUgZmxhZ3M6CisJUlRSRl9MT0cgLSBsb2cgcm91dGUgY3JlYXRpb25zLgorCVJUUkZfVkFMVkUgLSBPbmUgd2F5IHJvdXRlICh1c2VkIHdpdGggbWFzcXVlcmFkaW5nKQorCitEZWZhdWx0IHNldHVwOgorCityb290QGFtYmVyOi9wdWIvaXAtcm91dGluZyAjIGlwcm91dGUgLXIKK0tlcm5lbCByb3V0aW5nIHBvbGljeSBydWxlcworUHJlZiBTb3VyY2UgICAgICAgICAgICAgRGVzdGluYXRpb24gICAgICAgIFRPUyBJZmFjZSAgIENsCisgICAwIGRlZmF1bHQgICAgICAgICAgICBkZWZhdWx0ICAgICAgICAgICAgMDAgICogICAgICAgMjU1CisgMjU0IGRlZmF1bHQgICAgICAgICAgICBkZWZhdWx0ICAgICAgICAgICAgMDAgICogICAgICAgMjU0CisgMjU1IGRlZmF1bHQgICAgICAgICAgICBkZWZhdWx0ICAgICAgICAgICAgMDAgICogICAgICAgMjUzCisKKworTG9va3VwIGFsZ29yaXRobQorLS0tLS0tLS0tLS0tLS0tLQorCisJV2Ugc2NhbiBydWxlcyBsaXN0LCBhbmQgaWYgYSBydWxlIGlzIG1hdGNoZWQsIGFwcGx5IGl0LgorCUlmIGEgcm91dGUgaXMgZm91bmQsIHJldHVybiBpdC4KKwlJZiBpdCBpcyBub3QgZm91bmQgb3IgYSBUSFJPVyBub2RlIHdhcyBtYXRjaGVkLCBjb250aW51ZQorCXRvIHNjYW4gcnVsZXMuCisKK0FwcGxpY2F0aW9ucworLS0tLS0tLS0tLS0tCisKKzEuCUp1c3QgaWdub3JlIGNsYXNzZXMuIEFsbCB0aGUgcm91dGVzIGFyZSBwdXQgaW50byBNQUlOIGNsYXNzCisJKGFuZC9vciBpbnRvIERFRkFVTFQgY2xhc3MpLgorCisJSE9XVE86ICBpcHJvdXRlIGFkZCBQUkVGSVggWyB0b3MgVE9TIF0gWyBndyBHVyBdIFsgZGV2IERFViBdCisJCVsgbWV0cmljIE1FVFJJQyBdIFsgcmVqZWN0IF0gLi4uIChsb29rIGF0IGlwcm91dGUgdXRpbGl0eSkKKworCQlvciB1c2Ugcm91dGUgdXRpbGl0eSBmcm9tIGN1cnJlbnQgbmV0LXRvb2xzLgorCQkKKzIuCU9wcG9zaXRlIGNhc2UuIEp1c3QgZm9yZ2V0IGFsbCB0aGF0IHlvdSBrbm93IGFib3V0IHJvdXRpbmcKKwl0YWJsZXMuIEV2ZXJ5IHJ1bGUgaXMgc3VwcGxpZWQgd2l0aCBpdHMgb3duIGdhdGV3YXksIGRldmljZQorCWluZm8uIHJlY29yZC4gVGhpcyBhcHByb2FjaCBpcyBub3QgYXBwcm9wcmlhdGUgZm9yIGF1dG9tYXRlZAorCXJvdXRlIG1haW50ZW5hbmNlLCBidXQgaXQgaXMgaWRlYWwgZm9yIG1hbnVhbCBjb25maWd1cmF0aW9uLgorCisJSE9XVE86ICBpcHJvdXRlIGFkZHJ1bGUgWyBmcm9tIFBSRUZJWCBdIFsgdG8gUFJFRklYIF0gWyB0b3MgVE9TIF0KKwkJWyBkZXYgSU5QVVRERVZdIFsgcHJlZiBQUkVGRVJFTkNFIF0gcm91dGUgWyBndyBHQVRFV0FZIF0KKwkJWyBkZXYgT1VUREVWIF0gLi4uLi4KKworCVdhcm5pbmc6IEFzIG9mIG5vdyB0aGUgc2l6ZSBvZiB0aGUgcm91dGluZyB0YWJsZSBpbiB0aGlzCisJYXBwcm9hY2ggaXMgbGltaXRlZCB0byAyNTYuIElmIHNvbWVvbmUgbGlrZXMgdGhpcyBtb2RlbCwgSSdsbAorCXJlbGF4IHRoaXMgbGltaXRhdGlvbi4KKworMy4JT1NQRiBjbGFzc2VzIChzZWUgUkZDMTU4MywgUkZDMTgxMiBFLjMuMykKKwlWZXJ5IGNsZWFuLCBzdGFibGUgYW5kIHJvYnVzdCBhbGdvcml0aG0gZm9yIE9TUEYgcm91dGluZworCWRvbWFpbnMuIFVuZm9ydHVuYXRlbHksIGl0IGlzIG5vdCB3aWRlbHkgdXNlZCBpbiB0aGUgSW50ZXJuZXQuCisKKwlQcm9wb3NlZCBzZXR1cDoKKwkyNTUgbG9jYWwgYWRkcmVzc2VzCisJMjU0IGludGVyZmFjZSByb3V0ZXMKKwkyNTMgQVNFIHJvdXRlcyB3aXRoIGV4dGVybmFsIG1ldHJpYworCTI1MiBBU0Ugcm91dGVzIHdpdGggaW50ZXJuYWwgbWV0cmljCisJMjUxIGludGVyLWFyZWEgcm91dGVzCisJMjUwIGludHJhLWFyZWEgcm91dGVzIGZvciAxc3QgYXJlYQorCTI0OSBpbnRyYS1hcmVhIHJvdXRlcyBmb3IgMm5kIGFyZWEKKwlldGMuCisJCisJUnVsZXM6CisJaXByb3V0ZSBhZGRydWxlIGNsYXNzIDI1MworCWlwcm91dGUgYWRkcnVsZSBjbGFzcyAyNTIKKwlpcHJvdXRlIGFkZHJ1bGUgY2xhc3MgMjUxCisJaXByb3V0ZSBhZGRydWxlIHRvIGEtcHJlZml4LWZvci0xc3QtYXJlYSBjbGFzcyAyNTAKKwlpcHJvdXRlIGFkZHJ1bGUgdG8gYW5vdGhlci1wcmVmaXgtZm9yLTFzdC1hcmVhIGNsYXNzIDI1MAorCS4uLgorCWlwcm91dGUgYWRkcnVsZSB0byBhLXByZWZpeC1mb3ItMm5kLWFyZWEgY2xhc3MgMjQ5CisJLi4uCisKKwlBcmVhIGNsYXNzZXMgbXVzdCBiZSB0ZXJtaW5hdGVkIHdpdGggcmVqZWN0IHJlY29yZC4KKwlpcHJvdXRlIGFkZCBkZWZhdWx0IHJlamVjdCBjbGFzcyAyNTAKKwlpcHJvdXRlIGFkZCBkZWZhdWx0IHJlamVjdCBjbGFzcyAyNDkKKwkuLi4KKworNC4JVGhlIFZhcmlhbnQgUm91dGVyIFJlcXVpcmVtZW50cyBBbGdvcml0aG0gKFJGQzE4MTIgRS4zLjIpCisJQ3JlYXRlIDE2IGNsYXNzZXMgZm9yIGRpZmZlcmVudCBUT1MgdmFsdWVzLgorCUl0IGlzIGEgZnVubnksIGJ1dCBwcmV0dHkgdXNlbGVzcyBhbGdvcml0aG0uCisJSSBsaXN0ZWQgaXQganVzdCB0byBzaG93IHRoZSBwb3dlciBvZiBuZXcgcm91dGluZyBjb2RlLgorCis1LglBbGwgdGhlIHZhcmlldHkgb2YgY29tYmluYXRpb25zLi4uLi4uCisKKworR0FURUQKKy0tLS0tCisKKwlHYXRlZCBkb2VzIG5vdCB1bmRlcnN0YW5kIGNsYXNzZXMsIGJ1dCBpdCB3aWxsIHdvcmsKKwloYXBwaWx5IGluIE1BSU4rREVGQVVMVC4gQWxsIHBvbGljeSByb3V0ZXMgY2FuIGJlIHNldAorCWFuZCBtYWludGFpbmVkIG1hbnVhbGx5LgorCitJTVBPUlRBTlQgTk9URQorLS0tLS0tLS0tLS0tLS0KKwlyb3V0ZS5jIGhhcyBhIGNvbXBpbGF0aW9uIHRpbWUgc3dpdGNoIENPTkZJR19JUF9MT0NBTF9SVF9QT0xJQ1kuCisJSWYgaXQgaXMgc2V0LCBsb2NhbGx5IG9yaWdpbmF0ZWQgcGFja2V0cyBhcmUgcm91dGVkCisJdXNpbmcgYWxsIHRoZSBwb2xpY3kgbGlzdC4gVGhpcyBpcyBub3QgdmVyeSBjb252ZW5pZW50IGFuZAorCXByZXR0eSBhbWJpZ3VvdXMgd2hlbiB1c2VkIHdpdGggTkFUIGFuZCBtYXNxdWVyYWRpbmcuCisJSSBzZXQgaXQgdG8gRkFMU0UgYnkgZGVmYXVsdC4KKworCitBbGV4ZXkgS3V6bmV0b3YKK2t1em5ldEBtczIuaW5yLmFjLnJ1CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvcHBwX2dlbmVyaWMudHh0IGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3BwcF9nZW5lcmljLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNWI1MTcyCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3BwcF9nZW5lcmljLnR4dApAQCAtMCwwICsxLDQzMiBAQAorCQlQUFAgR2VuZXJpYyBEcml2ZXIgYW5kIENoYW5uZWwgSW50ZXJmYWNlCisJCS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworCQkJICAgIFBhdWwgTWFja2VycmFzCisJCQkgICBwYXVsdXNAc2FtYmEub3JnCisJCQkgICAgICA3IEZlYiAyMDAyCisKK1RoZSBnZW5lcmljIFBQUCBkcml2ZXIgaW4gbGludXgtMi40IHByb3ZpZGVzIGFuIGltcGxlbWVudGF0aW9uIG9mIHRoZQorZnVuY3Rpb25hbGl0eSB3aGljaCBpcyBvZiB1c2UgaW4gYW55IFBQUCBpbXBsZW1lbnRhdGlvbiwgaW5jbHVkaW5nOgorCisqIHRoZSBuZXR3b3JrIGludGVyZmFjZSB1bml0IChwcHAwIGV0Yy4pCisqIHRoZSBpbnRlcmZhY2UgdG8gdGhlIG5ldHdvcmtpbmcgY29kZQorKiBQUFAgbXVsdGlsaW5rOiBzcGxpdHRpbmcgZGF0YWdyYW1zIGJldHdlZW4gbXVsdGlwbGUgbGlua3MsIGFuZAorICBvcmRlcmluZyBhbmQgY29tYmluaW5nIHJlY2VpdmVkIGZyYWdtZW50cworKiB0aGUgaW50ZXJmYWNlIHRvIHBwcGQsIHZpYSBhIC9kZXYvcHBwIGNoYXJhY3RlciBkZXZpY2UKKyogcGFja2V0IGNvbXByZXNzaW9uIGFuZCBkZWNvbXByZXNzaW9uCisqIFRDUC9JUCBoZWFkZXIgY29tcHJlc3Npb24gYW5kIGRlY29tcHJlc3Npb24KKyogZGV0ZWN0aW5nIG5ldHdvcmsgdHJhZmZpYyBmb3IgZGVtYW5kIGRpYWxsaW5nIGFuZCBmb3IgaWRsZSB0aW1lb3V0cworKiBzaW1wbGUgcGFja2V0IGZpbHRlcmluZworCitGb3Igc2VuZGluZyBhbmQgcmVjZWl2aW5nIFBQUCBmcmFtZXMsIHRoZSBnZW5lcmljIFBQUCBkcml2ZXIgY2FsbHMgb24KK3RoZSBzZXJ2aWNlcyBvZiBQUFAgYGNoYW5uZWxzJy4gIEEgUFBQIGNoYW5uZWwgZW5jYXBzdWxhdGVzIGEKK21lY2hhbmlzbSBmb3IgdHJhbnNwb3J0aW5nIFBQUCBmcmFtZXMgZnJvbSBvbmUgbWFjaGluZSB0byBhbm90aGVyLiAgQQorUFBQIGNoYW5uZWwgaW1wbGVtZW50YXRpb24gY2FuIGJlIGFyYml0cmFyaWx5IGNvbXBsZXggaW50ZXJuYWxseSBidXQKK2hhcyBhIHZlcnkgc2ltcGxlIGludGVyZmFjZSB3aXRoIHRoZSBnZW5lcmljIFBQUCBjb2RlOiBpdCBtZXJlbHkgaGFzCit0byBiZSBhYmxlIHRvIHNlbmQgUFBQIGZyYW1lcywgcmVjZWl2ZSBQUFAgZnJhbWVzLCBhbmQgb3B0aW9uYWxseQoraGFuZGxlIGlvY3RsIHJlcXVlc3RzLiAgQ3VycmVudGx5IHRoZXJlIGFyZSBQUFAgY2hhbm5lbAoraW1wbGVtZW50YXRpb25zIGZvciBhc3luY2hyb25vdXMgc2VyaWFsIHBvcnRzLCBzeW5jaHJvbm91cyBzZXJpYWwKK3BvcnRzLCBhbmQgZm9yIFBQUCBvdmVyIGV0aGVybmV0LgorCitUaGlzIGFyY2hpdGVjdHVyZSBtYWtlcyBpdCBwb3NzaWJsZSB0byBpbXBsZW1lbnQgUFBQIG11bHRpbGluayBpbiBhCituYXR1cmFsIGFuZCBzdHJhaWdodGZvcndhcmQgd2F5LCBieSBhbGxvd2luZyBtb3JlIHRoYW4gb25lIGNoYW5uZWwgdG8KK2JlIGxpbmtlZCB0byBlYWNoIHBwcCBuZXR3b3JrIGludGVyZmFjZSB1bml0LiAgVGhlIGdlbmVyaWMgbGF5ZXIgaXMKK3Jlc3BvbnNpYmxlIGZvciBzcGxpdHRpbmcgZGF0YWdyYW1zIG9uIHRyYW5zbWl0IGFuZCByZWNvbWJpbmluZyB0aGVtCitvbiByZWNlaXZlLgorCisKK1BQUCBjaGFubmVsIEFQSQorLS0tLS0tLS0tLS0tLS0tCisKK1NlZSBpbmNsdWRlL2xpbnV4L3BwcF9jaGFubmVsLmggZm9yIHRoZSBkZWNsYXJhdGlvbiBvZiB0aGUgdHlwZXMgYW5kCitmdW5jdGlvbnMgdXNlZCB0byBjb21tdW5pY2F0ZSBiZXR3ZWVuIHRoZSBnZW5lcmljIFBQUCBsYXllciBhbmQgUFBQCitjaGFubmVscy4KKworRWFjaCBjaGFubmVsIGhhcyB0byBwcm92aWRlIHR3byBmdW5jdGlvbnMgdG8gdGhlIGdlbmVyaWMgUFBQIGxheWVyLAordmlhIHRoZSBwcHBfY2hhbm5lbC5vcHMgcG9pbnRlcjoKKworKiBzdGFydF94bWl0KCkgaXMgY2FsbGVkIGJ5IHRoZSBnZW5lcmljIGxheWVyIHdoZW4gaXQgaGFzIGEgZnJhbWUgdG8KKyAgc2VuZC4gIFRoZSBjaGFubmVsIGhhcyB0aGUgb3B0aW9uIG9mIHJlamVjdGluZyB0aGUgZnJhbWUgZm9yCisgIGZsb3ctY29udHJvbCByZWFzb25zLiAgSW4gdGhpcyBjYXNlLCBzdGFydF94bWl0KCkgc2hvdWxkIHJldHVybiAwCisgIGFuZCB0aGUgY2hhbm5lbCBzaG91bGQgY2FsbCB0aGUgcHBwX291dHB1dF93YWtldXAoKSBmdW5jdGlvbiBhdCBhCisgIGxhdGVyIHRpbWUgd2hlbiBpdCBjYW4gYWNjZXB0IGZyYW1lcyBhZ2FpbiwgYW5kIHRoZSBnZW5lcmljIGxheWVyCisgIHdpbGwgdGhlbiBhdHRlbXB0IHRvIHJldHJhbnNtaXQgdGhlIHJlamVjdGVkIGZyYW1lKHMpLiAgSWYgdGhlIGZyYW1lCisgIGlzIGFjY2VwdGVkLCB0aGUgc3RhcnRfeG1pdCgpIGZ1bmN0aW9uIHNob3VsZCByZXR1cm4gMS4KKworKiBpb2N0bCgpIHByb3ZpZGVzIGFuIGludGVyZmFjZSB3aGljaCBjYW4gYmUgdXNlZCBieSBhIHVzZXItc3BhY2UKKyAgcHJvZ3JhbSB0byBjb250cm9sIGFzcGVjdHMgb2YgdGhlIGNoYW5uZWwncyBiZWhhdmlvdXIuICBUaGlzCisgIHByb2NlZHVyZSB3aWxsIGJlIGNhbGxlZCB3aGVuIGEgdXNlci1zcGFjZSBwcm9ncmFtIGRvZXMgYW4gaW9jdGwKKyAgc3lzdGVtIGNhbGwgb24gYW4gaW5zdGFuY2Ugb2YgL2Rldi9wcHAgd2hpY2ggaXMgYm91bmQgdG8gdGhlCisgIGNoYW5uZWwuICAoVXN1YWxseSBpdCB3b3VsZCBvbmx5IGJlIHBwcGQgd2hpY2ggd291bGQgZG8gdGhpcy4pCisKK1RoZSBnZW5lcmljIFBQUCBsYXllciBwcm92aWRlcyBzZXZlbiBmdW5jdGlvbnMgdG8gY2hhbm5lbHM6CisKKyogcHBwX3JlZ2lzdGVyX2NoYW5uZWwoKSBpcyBjYWxsZWQgd2hlbiBhIGNoYW5uZWwgaGFzIGJlZW4gY3JlYXRlZCwgdG8KKyAgbm90aWZ5IHRoZSBQUFAgZ2VuZXJpYyBsYXllciBvZiBpdHMgcHJlc2VuY2UuICBGb3IgZXhhbXBsZSwgc2V0dGluZworICBhIHNlcmlhbCBwb3J0IHRvIHRoZSBQUFBESVNDIGxpbmUgZGlzY2lwbGluZSBjYXVzZXMgdGhlIHBwcF9hc3luYworICBjaGFubmVsIGNvZGUgdG8gY2FsbCB0aGlzIGZ1bmN0aW9uLgorCisqIHBwcF91bnJlZ2lzdGVyX2NoYW5uZWwoKSBpcyBjYWxsZWQgd2hlbiBhIGNoYW5uZWwgaXMgdG8gYmUKKyAgZGVzdHJveWVkLiAgRm9yIGV4YW1wbGUsIHRoZSBwcHBfYXN5bmMgY2hhbm5lbCBjb2RlIGNhbGxzIHRoaXMgd2hlbgorICBhIGhhbmd1cCBpcyBkZXRlY3RlZCBvbiB0aGUgc2VyaWFsIHBvcnQuCisKKyogcHBwX291dHB1dF93YWtldXAoKSBpcyBjYWxsZWQgYnkgYSBjaGFubmVsIHdoZW4gaXQgaGFzIHByZXZpb3VzbHkKKyAgcmVqZWN0ZWQgYSBjYWxsIHRvIGl0cyBzdGFydF94bWl0IGZ1bmN0aW9uLCBhbmQgY2FuIG5vdyBhY2NlcHQgbW9yZQorICBwYWNrZXRzLgorCisqIHBwcF9pbnB1dCgpIGlzIGNhbGxlZCBieSBhIGNoYW5uZWwgd2hlbiBpdCBoYXMgcmVjZWl2ZWQgYSBjb21wbGV0ZQorICBQUFAgZnJhbWUuCisKKyogcHBwX2lucHV0X2Vycm9yKCkgaXMgY2FsbGVkIGJ5IGEgY2hhbm5lbCB3aGVuIGl0IGhhcyBkZXRlY3RlZCB0aGF0IGEKKyAgZnJhbWUgaGFzIGJlZW4gbG9zdCBvciBkcm9wcGVkIChmb3IgZXhhbXBsZSwgYmVjYXVzZSBvZiBhIEZDUyAoZnJhbWUKKyAgY2hlY2sgc2VxdWVuY2UpIGVycm9yKS4KKworKiBwcHBfY2hhbm5lbF9pbmRleCgpIHJldHVybnMgdGhlIGNoYW5uZWwgaW5kZXggYXNzaWduZWQgYnkgdGhlIFBQUAorICBnZW5lcmljIGxheWVyIHRvIHRoaXMgY2hhbm5lbC4gIFRoZSBjaGFubmVsIHNob3VsZCBwcm92aWRlIHNvbWUgd2F5CisgIChlLmcuIGFuIGlvY3RsKSB0byB0cmFuc21pdCB0aGlzIGJhY2sgdG8gdXNlci1zcGFjZSwgYXMgdXNlci1zcGFjZQorICB3aWxsIG5lZWQgaXQgdG8gYXR0YWNoIGFuIGluc3RhbmNlIG9mIC9kZXYvcHBwIHRvIHRoaXMgY2hhbm5lbC4KKworKiBwcHBfdW5pdF9udW1iZXIoKSByZXR1cm5zIHRoZSB1bml0IG51bWJlciBvZiB0aGUgcHBwIG5ldHdvcmsKKyAgaW50ZXJmYWNlIHRvIHdoaWNoIHRoaXMgY2hhbm5lbCBpcyBjb25uZWN0ZWQsIG9yIC0xIGlmIHRoZSBjaGFubmVsCisgIGlzIG5vdCBjb25uZWN0ZWQuCisKK0Nvbm5lY3RpbmcgYSBjaGFubmVsIHRvIHRoZSBwcHAgZ2VuZXJpYyBsYXllciBpcyBpbml0aWF0ZWQgZnJvbSB0aGUKK2NoYW5uZWwgY29kZSwgcmF0aGVyIHRoYW4gZnJvbSB0aGUgZ2VuZXJpYyBsYXllci4gIFRoZSBjaGFubmVsIGlzCitleHBlY3RlZCB0byBoYXZlIHNvbWUgd2F5IGZvciBhIHVzZXItbGV2ZWwgcHJvY2VzcyB0byBjb250cm9sIGl0CitpbmRlcGVuZGVudGx5IG9mIHRoZSBwcHAgZ2VuZXJpYyBsYXllci4gIEZvciBleGFtcGxlLCB3aXRoIHRoZQorcHBwX2FzeW5jIGNoYW5uZWwsIHRoaXMgaXMgcHJvdmlkZWQgYnkgdGhlIGZpbGUgZGVzY3JpcHRvciB0byB0aGUKK3NlcmlhbCBwb3J0LgorCitHZW5lcmFsbHkgYSB1c2VyLWxldmVsIHByb2Nlc3Mgd2lsbCBpbml0aWFsaXplIHRoZSB1bmRlcmx5aW5nCitjb21tdW5pY2F0aW9ucyBtZWRpdW0gYW5kIHByZXBhcmUgaXQgdG8gZG8gUFBQLiAgRm9yIGV4YW1wbGUsIHdpdGggYW4KK2FzeW5jIHR0eSwgdGhpcyBjYW4gaW52b2x2ZSBzZXR0aW5nIHRoZSB0dHkgc3BlZWQgYW5kIG1vZGVzLCBpc3N1aW5nCittb2RlbSBjb21tYW5kcywgYW5kIHRoZW4gZ29pbmcgdGhyb3VnaCBzb21lIHNvcnQgb2YgZGlhbG9nIHdpdGggdGhlCityZW1vdGUgc3lzdGVtIHRvIGludm9rZSBQUFAgc2VydmljZSB0aGVyZS4gIFdlIHJlZmVyIHRvIHRoaXMgcHJvY2VzcworYXMgYGRpc2NvdmVyeScuICBUaGVuIHRoZSB1c2VyLWxldmVsIHByb2Nlc3MgdGVsbHMgdGhlIG1lZGl1bSB0bworYmVjb21lIGEgUFBQIGNoYW5uZWwgYW5kIHJlZ2lzdGVyIGl0c2VsZiB3aXRoIHRoZSBnZW5lcmljIFBQUCBsYXllci4KK1RoZSBjaGFubmVsIHRoZW4gaGFzIHRvIHJlcG9ydCB0aGUgY2hhbm5lbCBudW1iZXIgYXNzaWduZWQgdG8gaXQgYmFjawordG8gdGhlIHVzZXItbGV2ZWwgcHJvY2Vzcy4gIEZyb20gdGhhdCBwb2ludCwgdGhlIFBQUCBuZWdvdGlhdGlvbiBjb2RlCitpbiB0aGUgUFBQIGRhZW1vbiAocHBwZCkgY2FuIHRha2Ugb3ZlciBhbmQgcGVyZm9ybSB0aGUgUFBQCituZWdvdGlhdGlvbiwgYWNjZXNzaW5nIHRoZSBjaGFubmVsIHRocm91Z2ggdGhlIC9kZXYvcHBwIGludGVyZmFjZS4KKworQXQgdGhlIGludGVyZmFjZSB0byB0aGUgUFBQIGdlbmVyaWMgbGF5ZXIsIFBQUCBmcmFtZXMgYXJlIHN0b3JlZCBpbgorc2tidWZmIHN0cnVjdHVyZXMgYW5kIHN0YXJ0IHdpdGggdGhlIHR3by1ieXRlIFBQUCBwcm90b2NvbCBudW1iZXIuCitUaGUgZnJhbWUgZG9lcyAqbm90KiBpbmNsdWRlIHRoZSAweGZmIGBhZGRyZXNzJyBieXRlIG9yIHRoZSAweDAzCitgY29udHJvbCcgYnl0ZSB0aGF0IGFyZSBvcHRpb25hbGx5IHVzZWQgaW4gYXN5bmMgUFBQLiAgTm9yIGlzIHRoZXJlCithbnkgZXNjYXBpbmcgb2YgY29udHJvbCBjaGFyYWN0ZXJzLCBub3IgYXJlIHRoZXJlIGFueSBGQ1Mgb3IgZnJhbWluZworY2hhcmFjdGVycyBpbmNsdWRlZC4gIFRoYXQgaXMgYWxsIHRoZSByZXNwb25zaWJpbGl0eSBvZiB0aGUgY2hhbm5lbAorY29kZSwgaWYgaXQgaXMgbmVlZGVkIGZvciB0aGUgcGFydGljdWxhciBtZWRpdW0uICBUaGF0IGlzLCB0aGUgc2tidWZmcworcHJlc2VudGVkIHRvIHRoZSBzdGFydF94bWl0KCkgZnVuY3Rpb24gY29udGFpbiBvbmx5IHRoZSAyLWJ5dGUKK3Byb3RvY29sIG51bWJlciBhbmQgdGhlIGRhdGEsIGFuZCB0aGUgc2tidWZmcyBwcmVzZW50ZWQgdG8gcHBwX2lucHV0KCkKK211c3QgYmUgaW4gdGhlIHNhbWUgZm9ybWF0LgorCitUaGUgY2hhbm5lbCBtdXN0IHByb3ZpZGUgYW4gaW5zdGFuY2Ugb2YgYSBwcHBfY2hhbm5lbCBzdHJ1Y3QgdG8KK3JlcHJlc2VudCB0aGUgY2hhbm5lbC4gIFRoZSBjaGFubmVsIGlzIGZyZWUgdG8gdXNlIHRoZSBgcHJpdmF0ZScgZmllbGQKK2hvd2V2ZXIgaXQgd2lzaGVzLiAgVGhlIGNoYW5uZWwgc2hvdWxkIGluaXRpYWxpemUgdGhlIGBtdHUnIGFuZAorYGhkcmxlbicgZmllbGRzIGJlZm9yZSBjYWxsaW5nIHBwcF9yZWdpc3Rlcl9jaGFubmVsKCkgYW5kIG5vdCBjaGFuZ2UKK3RoZW0gdW50aWwgYWZ0ZXIgcHBwX3VucmVnaXN0ZXJfY2hhbm5lbCgpIHJldHVybnMuICBUaGUgYG10dScgZmllbGQKK3JlcHJlc2VudHMgdGhlIG1heGltdW0gc2l6ZSBvZiB0aGUgZGF0YSBwYXJ0IG9mIHRoZSBQUFAgZnJhbWVzLCB0aGF0CitpcywgaXQgZG9lcyBub3QgaW5jbHVkZSB0aGUgMi1ieXRlIHByb3RvY29sIG51bWJlci4KKworSWYgdGhlIGNoYW5uZWwgbmVlZHMgc29tZSBoZWFkcm9vbSBpbiB0aGUgc2tidWZmcyBwcmVzZW50ZWQgdG8gaXQgZm9yCit0cmFuc21pc3Npb24gKGkuZS4sIHNvbWUgc3BhY2UgZnJlZSBpbiB0aGUgc2tidWZmIGRhdGEgYXJlYSBiZWZvcmUgdGhlCitzdGFydCBvZiB0aGUgUFBQIGZyYW1lKSwgaXQgc2hvdWxkIHNldCB0aGUgYGhkcmxlbicgZmllbGQgb2YgdGhlCitwcHBfY2hhbm5lbCBzdHJ1Y3QgdG8gdGhlIGFtb3VudCBvZiBoZWFkcm9vbSByZXF1aXJlZC4gIFRoZSBnZW5lcmljCitQUFAgbGF5ZXIgd2lsbCBhdHRlbXB0IHRvIHByb3ZpZGUgdGhhdCBtdWNoIGhlYWRyb29tIGJ1dCB0aGUgY2hhbm5lbAorc2hvdWxkIHN0aWxsIGNoZWNrIGlmIHRoZXJlIGlzIHN1ZmZpY2llbnQgaGVhZHJvb20gYW5kIGNvcHkgdGhlIHNrYnVmZgoraWYgdGhlcmUgaXNuJ3QuCisKK09uIHRoZSBpbnB1dCBzaWRlLCBjaGFubmVscyBzaG91bGQgaWRlYWxseSBwcm92aWRlIGF0IGxlYXN0IDIgYnl0ZXMgb2YKK2hlYWRyb29tIGluIHRoZSBza2J1ZmZzIHByZXNlbnRlZCB0byBwcHBfaW5wdXQoKS4gIFRoZSBnZW5lcmljIFBQUAorY29kZSBkb2VzIG5vdCByZXF1aXJlIHRoaXMgYnV0IHdpbGwgYmUgbW9yZSBlZmZpY2llbnQgaWYgdGhpcyBpcyBkb25lLgorCisKK0J1ZmZlcmluZyBhbmQgZmxvdyBjb250cm9sCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGUgZ2VuZXJpYyBQUFAgbGF5ZXIgaGFzIGJlZW4gZGVzaWduZWQgdG8gbWluaW1pemUgdGhlIGFtb3VudCBvZiBkYXRhCit0aGF0IGl0IGJ1ZmZlcnMgaW4gdGhlIHRyYW5zbWl0IGRpcmVjdGlvbi4gIEl0IG1haW50YWlucyBhIHF1ZXVlIG9mCit0cmFuc21pdCBwYWNrZXRzIGZvciB0aGUgUFBQIHVuaXQgKG5ldHdvcmsgaW50ZXJmYWNlIGRldmljZSkgcGx1cyBhCitxdWV1ZSBvZiB0cmFuc21pdCBwYWNrZXRzIGZvciBlYWNoIGF0dGFjaGVkIGNoYW5uZWwuICBOb3JtYWxseSB0aGUKK3RyYW5zbWl0IHF1ZXVlIGZvciB0aGUgdW5pdCB3aWxsIGNvbnRhaW4gYXQgbW9zdCBvbmUgcGFja2V0OyB0aGUKK2V4Y2VwdGlvbnMgYXJlIHdoZW4gcHBwZCBzZW5kcyBwYWNrZXRzIGJ5IHdyaXRpbmcgdG8gL2Rldi9wcHAsIGFuZAord2hlbiB0aGUgY29yZSBuZXR3b3JraW5nIGNvZGUgY2FsbHMgdGhlIGdlbmVyaWMgbGF5ZXIncyBzdGFydF94bWl0KCkKK2Z1bmN0aW9uIHdpdGggdGhlIHF1ZXVlIHN0b3BwZWQsIGkuZS4gd2hlbiB0aGUgZ2VuZXJpYyBsYXllciBoYXMKK2NhbGxlZCBuZXRpZl9zdG9wX3F1ZXVlKCksIHdoaWNoIG9ubHkgaGFwcGVucyBvbiBhIHRyYW5zbWl0IHRpbWVvdXQuCitUaGUgc3RhcnRfeG1pdCBmdW5jdGlvbiBhbHdheXMgYWNjZXB0cyBhbmQgcXVldWVzIHRoZSBwYWNrZXQgd2hpY2ggaXQKK2lzIGFza2VkIHRvIHRyYW5zbWl0LgorCitUcmFuc21pdCBwYWNrZXRzIGFyZSBkZXF1ZXVlZCBmcm9tIHRoZSBQUFAgdW5pdCB0cmFuc21pdCBxdWV1ZSBhbmQKK3RoZW4gc3ViamVjdGVkIHRvIFRDUC9JUCBoZWFkZXIgY29tcHJlc3Npb24gYW5kIHBhY2tldCBjb21wcmVzc2lvbgorKERlZmxhdGUgb3IgQlNELUNvbXByZXNzIGNvbXByZXNzaW9uKSwgYXMgYXBwcm9wcmlhdGUuICBBZnRlciB0aGlzCitwb2ludCB0aGUgcGFja2V0cyBjYW4gbm8gbG9uZ2VyIGJlIHJlb3JkZXJlZCwgYXMgdGhlIGRlY29tcHJlc3Npb24KK2FsZ29yaXRobXMgcmVseSBvbiByZWNlaXZpbmcgY29tcHJlc3NlZCBwYWNrZXRzIGluIHRoZSBzYW1lIG9yZGVyIHRoYXQKK3RoZXkgd2VyZSBnZW5lcmF0ZWQuCisKK0lmIG11bHRpbGluayBpcyBub3QgaW4gdXNlLCB0aGlzIHBhY2tldCBpcyB0aGVuIHBhc3NlZCB0byB0aGUgYXR0YWNoZWQKK2NoYW5uZWwncyBzdGFydF94bWl0KCkgZnVuY3Rpb24uICBJZiB0aGUgY2hhbm5lbCByZWZ1c2VzIHRvIHRha2UKK3RoZSBwYWNrZXQsIHRoZSBnZW5lcmljIGxheWVyIHNhdmVzIGl0IGZvciBsYXRlciB0cmFuc21pc3Npb24uICBUaGUKK2dlbmVyaWMgbGF5ZXIgd2lsbCBjYWxsIHRoZSBjaGFubmVsJ3Mgc3RhcnRfeG1pdCgpIGZ1bmN0aW9uIGFnYWluCit3aGVuIHRoZSBjaGFubmVsIGNhbGxzICBwcHBfb3V0cHV0X3dha2V1cCgpIG9yIHdoZW4gdGhlIGNvcmUKK25ldHdvcmtpbmcgY29kZSBjYWxscyB0aGUgZ2VuZXJpYyBsYXllcidzIHN0YXJ0X3htaXQoKSBmdW5jdGlvbgorYWdhaW4uICBUaGUgZ2VuZXJpYyBsYXllciBjb250YWlucyBubyB0aW1lb3V0IGFuZCByZXRyYW5zbWlzc2lvbgorbG9naWM7IGl0IHJlbGllcyBvbiB0aGUgY29yZSBuZXR3b3JraW5nIGNvZGUgZm9yIHRoYXQuCisKK0lmIG11bHRpbGluayBpcyBpbiB1c2UsIHRoZSBnZW5lcmljIGxheWVyIGRpdmlkZXMgdGhlIHBhY2tldCBpbnRvIG9uZQorb3IgbW9yZSBmcmFnbWVudHMgYW5kIHB1dHMgYSBtdWx0aWxpbmsgaGVhZGVyIG9uIGVhY2ggZnJhZ21lbnQuICBJdAorZGVjaWRlcyBob3cgbWFueSBmcmFnbWVudHMgdG8gdXNlIGJhc2VkIG9uIHRoZSBsZW5ndGggb2YgdGhlIHBhY2tldAorYW5kIHRoZSBudW1iZXIgb2YgY2hhbm5lbHMgd2hpY2ggYXJlIHBvdGVudGlhbGx5IGFibGUgdG8gYWNjZXB0IGEKK2ZyYWdtZW50IGF0IHRoZSBtb21lbnQuICBBIGNoYW5uZWwgaXMgcG90ZW50aWFsbHkgYWJsZSB0byBhY2NlcHQgYQorZnJhZ21lbnQgaWYgaXQgZG9lc24ndCBoYXZlIGFueSBmcmFnbWVudHMgY3VycmVudGx5IHF1ZXVlZCB1cCBmb3IgaXQKK3RvIHRyYW5zbWl0LiAgVGhlIGNoYW5uZWwgbWF5IHN0aWxsIHJlZnVzZSBhIGZyYWdtZW50OyBpbiB0aGlzIGNhc2UKK3RoZSBmcmFnbWVudCBpcyBxdWV1ZWQgdXAgZm9yIHRoZSBjaGFubmVsIHRvIHRyYW5zbWl0IGxhdGVyLiAgVGhpcworc2NoZW1lIGhhcyB0aGUgZWZmZWN0IHRoYXQgbW9yZSBmcmFnbWVudHMgYXJlIGdpdmVuIHRvIGhpZ2hlci0KK2JhbmR3aWR0aCBjaGFubmVscy4gIEl0IGFsc28gbWVhbnMgdGhhdCB1bmRlciBsaWdodCBsb2FkLCB0aGUgZ2VuZXJpYworbGF5ZXIgd2lsbCB0ZW5kIHRvIGZyYWdtZW50IGxhcmdlIHBhY2tldHMgYWNyb3NzIGFsbCB0aGUgY2hhbm5lbHMsCit0aHVzIHJlZHVjaW5nIGxhdGVuY3ksIHdoaWxlIHVuZGVyIGhlYXZ5IGxvYWQsIHBhY2tldHMgd2lsbCB0ZW5kIHRvIGJlCit0cmFuc21pdHRlZCBhcyBzaW5nbGUgZnJhZ21lbnRzLCB0aHVzIHJlZHVjaW5nIHRoZSBvdmVyaGVhZCBvZgorZnJhZ21lbnRhdGlvbi4KKworCitTTVAgc2FmZXR5CistLS0tLS0tLS0tCisKK1RoZSBQUFAgZ2VuZXJpYyBsYXllciBoYXMgYmVlbiBkZXNpZ25lZCB0byBiZSBTTVAtc2FmZS4gIExvY2tzIGFyZQordXNlZCBhcm91bmQgYWNjZXNzZXMgdG8gdGhlIGludGVybmFsIGRhdGEgc3RydWN0dXJlcyB3aGVyZSBuZWNlc3NhcnkKK3RvIGVuc3VyZSB0aGVpciBpbnRlZ3JpdHkuICBBcyBwYXJ0IG9mIHRoaXMsIHRoZSBnZW5lcmljIGxheWVyCityZXF1aXJlcyB0aGF0IHRoZSBjaGFubmVscyBhZGhlcmUgdG8gY2VydGFpbiByZXF1aXJlbWVudHMgYW5kIGluIHR1cm4KK3Byb3ZpZGVzIGNlcnRhaW4gZ3VhcmFudGVlcyB0byB0aGUgY2hhbm5lbHMuICBFc3NlbnRpYWxseSB0aGUgY2hhbm5lbHMKK2FyZSByZXF1aXJlZCB0byBwcm92aWRlIHRoZSBhcHByb3ByaWF0ZSBsb2NraW5nIG9uIHRoZSBwcHBfY2hhbm5lbAorc3RydWN0dXJlcyB0aGF0IGZvcm0gdGhlIGJhc2lzIG9mIHRoZSBjb21tdW5pY2F0aW9uIGJldHdlZW4gdGhlCitjaGFubmVsIGFuZCB0aGUgZ2VuZXJpYyBsYXllci4gIFRoaXMgaXMgYmVjYXVzZSB0aGUgY2hhbm5lbCBwcm92aWRlcwordGhlIHN0b3JhZ2UgZm9yIHRoZSBwcHBfY2hhbm5lbCBzdHJ1Y3R1cmUsIGFuZCBzbyB0aGUgY2hhbm5lbCBpcworcmVxdWlyZWQgdG8gcHJvdmlkZSB0aGUgZ3VhcmFudGVlIHRoYXQgdGhpcyBzdG9yYWdlIGV4aXN0cyBhbmQgaXMKK3ZhbGlkIGF0IHRoZSBhcHByb3ByaWF0ZSB0aW1lcy4KKworVGhlIGdlbmVyaWMgbGF5ZXIgcmVxdWlyZXMgdGhlc2UgZ3VhcmFudGVlcyBmcm9tIHRoZSBjaGFubmVsOgorCisqIFRoZSBwcHBfY2hhbm5lbCBvYmplY3QgbXVzdCBleGlzdCBmcm9tIHRoZSB0aW1lIHRoYXQKKyAgcHBwX3JlZ2lzdGVyX2NoYW5uZWwoKSBpcyBjYWxsZWQgdW50aWwgYWZ0ZXIgdGhlIGNhbGwgdG8KKyAgcHBwX3VucmVnaXN0ZXJfY2hhbm5lbCgpIHJldHVybnMuCisKKyogTm8gdGhyZWFkIG1heSBiZSBpbiBhIGNhbGwgdG8gYW55IG9mIHBwcF9pbnB1dCgpLCBwcHBfaW5wdXRfZXJyb3IoKSwKKyAgcHBwX291dHB1dF93YWtldXAoKSwgcHBwX2NoYW5uZWxfaW5kZXgoKSBvciBwcHBfdW5pdF9udW1iZXIoKSBmb3IgYQorICBjaGFubmVsIGF0IHRoZSB0aW1lIHRoYXQgcHBwX3VucmVnaXN0ZXJfY2hhbm5lbCgpIGlzIGNhbGxlZCBmb3IgdGhhdAorICBjaGFubmVsLgorCisqIHBwcF9yZWdpc3Rlcl9jaGFubmVsKCkgYW5kIHBwcF91bnJlZ2lzdGVyX2NoYW5uZWwoKSBtdXN0IGJlIGNhbGxlZAorICBmcm9tIHByb2Nlc3MgY29udGV4dCwgbm90IGludGVycnVwdCBvciBzb2Z0aXJxL0JIIGNvbnRleHQuCisKKyogVGhlIHJlbWFpbmluZyBnZW5lcmljIGxheWVyIGZ1bmN0aW9ucyBtYXkgYmUgY2FsbGVkIGF0IHNvZnRpcnEvQkgKKyAgbGV2ZWwgYnV0IG11c3Qgbm90IGJlIGNhbGxlZCBmcm9tIGEgaGFyZHdhcmUgaW50ZXJydXB0IGhhbmRsZXIuCisKKyogVGhlIGdlbmVyaWMgbGF5ZXIgbWF5IGNhbGwgdGhlIGNoYW5uZWwgc3RhcnRfeG1pdCgpIGZ1bmN0aW9uIGF0CisgIHNvZnRpcnEvQkggbGV2ZWwgYnV0IHdpbGwgbm90IGNhbGwgaXQgYXQgaW50ZXJydXB0IGxldmVsLiAgVGh1cyB0aGUKKyAgc3RhcnRfeG1pdCgpIGZ1bmN0aW9uIG1heSBub3QgYmxvY2suCisKKyogVGhlIGdlbmVyaWMgbGF5ZXIgd2lsbCBvbmx5IGNhbGwgdGhlIGNoYW5uZWwgaW9jdGwoKSBmdW5jdGlvbiBpbgorICBwcm9jZXNzIGNvbnRleHQuCisKK1RoZSBnZW5lcmljIGxheWVyIHByb3ZpZGVzIHRoZXNlIGd1YXJhbnRlZXMgdG8gdGhlIGNoYW5uZWxzOgorCisqIFRoZSBnZW5lcmljIGxheWVyIHdpbGwgbm90IGNhbGwgdGhlIHN0YXJ0X3htaXQoKSBmdW5jdGlvbiBmb3IgYQorICBjaGFubmVsIHdoaWxlIGFueSB0aHJlYWQgaXMgYWxyZWFkeSBleGVjdXRpbmcgaW4gdGhhdCBmdW5jdGlvbiBmb3IKKyAgdGhhdCBjaGFubmVsLgorCisqIFRoZSBnZW5lcmljIGxheWVyIHdpbGwgbm90IGNhbGwgdGhlIGlvY3RsKCkgZnVuY3Rpb24gZm9yIGEgY2hhbm5lbAorICB3aGlsZSBhbnkgdGhyZWFkIGlzIGFscmVhZHkgZXhlY3V0aW5nIGluIHRoYXQgZnVuY3Rpb24gZm9yIHRoYXQKKyAgY2hhbm5lbC4KKworKiBCeSB0aGUgdGltZSBhIGNhbGwgdG8gcHBwX3VucmVnaXN0ZXJfY2hhbm5lbCgpIHJldHVybnMsIG5vIHRocmVhZAorICB3aWxsIGJlIGV4ZWN1dGluZyBpbiBhIGNhbGwgZnJvbSB0aGUgZ2VuZXJpYyBsYXllciB0byB0aGF0IGNoYW5uZWwncworICBzdGFydF94bWl0KCkgb3IgaW9jdGwoKSBmdW5jdGlvbiwgYW5kIHRoZSBnZW5lcmljIGxheWVyIHdpbGwgbm90CisgIGNhbGwgZWl0aGVyIG9mIHRob3NlIGZ1bmN0aW9ucyBzdWJzZXF1ZW50bHkuCisKKworSW50ZXJmYWNlIHRvIHBwcGQKKy0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZSBQUFAgZ2VuZXJpYyBsYXllciBleHBvcnRzIGEgY2hhcmFjdGVyIGRldmljZSBpbnRlcmZhY2UgY2FsbGVkCisvZGV2L3BwcC4gIFRoaXMgaXMgdXNlZCBieSBwcHBkIHRvIGNvbnRyb2wgUFBQIGludGVyZmFjZSB1bml0cyBhbmQKK2NoYW5uZWxzLiAgQWx0aG91Z2ggdGhlcmUgaXMgb25seSBvbmUgL2Rldi9wcHAsIGVhY2ggb3BlbiBpbnN0YW5jZSBvZgorL2Rldi9wcHAgYWN0cyBpbmRlcGVuZGVudGx5IGFuZCBjYW4gYmUgYXR0YWNoZWQgZWl0aGVyIHRvIGEgUFBQIHVuaXQKK29yIGEgUFBQIGNoYW5uZWwuICBUaGlzIGlzIGFjaGlldmVkIHVzaW5nIHRoZSBmaWxlLT5wcml2YXRlX2RhdGEgZmllbGQKK3RvIHBvaW50IHRvIGEgc2VwYXJhdGUgb2JqZWN0IGZvciBlYWNoIG9wZW4gaW5zdGFuY2Ugb2YgL2Rldi9wcHAuICBJbgordGhpcyB3YXkgYW4gZWZmZWN0IHNpbWlsYXIgdG8gU29sYXJpcycgY2xvbmUgb3BlbiBpcyBvYnRhaW5lZCwKK2FsbG93aW5nIHVzIHRvIGNvbnRyb2wgYW4gYXJiaXRyYXJ5IG51bWJlciBvZiBQUFAgaW50ZXJmYWNlcyBhbmQKK2NoYW5uZWxzIHdpdGhvdXQgaGF2aW5nIHRvIGZpbGwgdXAgL2RldiB3aXRoIGh1bmRyZWRzIG9mIGRldmljZSBuYW1lcy4KKworV2hlbiAvZGV2L3BwcCBpcyBvcGVuZWQsIGEgbmV3IGluc3RhbmNlIGlzIGNyZWF0ZWQgd2hpY2ggaXMgaW5pdGlhbGx5Cit1bmF0dGFjaGVkLiAgVXNpbmcgYW4gaW9jdGwgY2FsbCwgaXQgY2FuIHRoZW4gYmUgYXR0YWNoZWQgdG8gYW4KK2V4aXN0aW5nIHVuaXQsIGF0dGFjaGVkIHRvIGEgbmV3bHktY3JlYXRlZCB1bml0LCBvciBhdHRhY2hlZCB0byBhbgorZXhpc3RpbmcgY2hhbm5lbC4gIEFuIGluc3RhbmNlIGF0dGFjaGVkIHRvIGEgdW5pdCBjYW4gYmUgdXNlZCB0byBzZW5kCithbmQgcmVjZWl2ZSBQUFAgY29udHJvbCBmcmFtZXMsIHVzaW5nIHRoZSByZWFkKCkgYW5kIHdyaXRlKCkgc3lzdGVtCitjYWxscywgYWxvbmcgd2l0aCBwb2xsKCkgaWYgbmVjZXNzYXJ5LiAgU2ltaWxhcmx5LCBhbiBpbnN0YW5jZQorYXR0YWNoZWQgdG8gYSBjaGFubmVsIGNhbiBiZSB1c2VkIHRvIHNlbmQgYW5kIHJlY2VpdmUgUFBQIGZyYW1lcyBvbgordGhhdCBjaGFubmVsLgorCitJbiBtdWx0aWxpbmsgdGVybXMsIHRoZSB1bml0IHJlcHJlc2VudHMgdGhlIGJ1bmRsZSwgd2hpbGUgdGhlIGNoYW5uZWxzCityZXByZXNlbnQgdGhlIGluZGl2aWR1YWwgcGh5c2ljYWwgbGlua3MuICBUaHVzLCBhIFBQUCBmcmFtZSBzZW50IGJ5IGEKK3dyaXRlIHRvIHRoZSB1bml0IChpLmUuLCB0byBhbiBpbnN0YW5jZSBvZiAvZGV2L3BwcCBhdHRhY2hlZCB0byB0aGUKK3VuaXQpIHdpbGwgYmUgc3ViamVjdCB0byBidW5kbGUtbGV2ZWwgY29tcHJlc3Npb24gYW5kIHRvIGZyYWdtZW50YXRpb24KK2Fjcm9zcyB0aGUgaW5kaXZpZHVhbCBsaW5rcyAoaWYgbXVsdGlsaW5rIGlzIGluIHVzZSkuICBJbiBjb250cmFzdCwgYQorUFBQIGZyYW1lIHNlbnQgYnkgYSB3cml0ZSB0byB0aGUgY2hhbm5lbCB3aWxsIGJlIHNlbnQgYXMtaXMgb24gdGhhdAorY2hhbm5lbCwgd2l0aG91dCBhbnkgbXVsdGlsaW5rIGhlYWRlci4KKworQSBjaGFubmVsIGlzIG5vdCBpbml0aWFsbHkgYXR0YWNoZWQgdG8gYW55IHVuaXQuICBJbiB0aGlzIHN0YXRlIGl0IGNhbgorYmUgdXNlZCBmb3IgUFBQIG5lZ290aWF0aW9uIGJ1dCBub3QgZm9yIHRoZSB0cmFuc2ZlciBvZiBkYXRhIHBhY2tldHMuCitJdCBjYW4gdGhlbiBiZSBjb25uZWN0ZWQgdG8gYSBQUFAgdW5pdCB3aXRoIGFuIGlvY3RsIGNhbGwsIHdoaWNoCittYWtlcyBpdCBhdmFpbGFibGUgdG8gc2VuZCBhbmQgcmVjZWl2ZSBkYXRhIHBhY2tldHMgZm9yIHRoYXQgdW5pdC4KKworVGhlIGlvY3RsIGNhbGxzIHdoaWNoIGFyZSBhdmFpbGFibGUgb24gYW4gaW5zdGFuY2Ugb2YgL2Rldi9wcHAgZGVwZW5kCitvbiB3aGV0aGVyIGl0IGlzIHVuYXR0YWNoZWQsIGF0dGFjaGVkIHRvIGEgUFBQIGludGVyZmFjZSwgb3IgYXR0YWNoZWQKK3RvIGEgUFBQIGNoYW5uZWwuICBUaGUgaW9jdGwgY2FsbHMgd2hpY2ggYXJlIGF2YWlsYWJsZSBvbiBhbgordW5hdHRhY2hlZCBpbnN0YW5jZSBhcmU6CisKKyogUFBQSU9DTkVXVU5JVCBjcmVhdGVzIGEgbmV3IFBQUCBpbnRlcmZhY2UgYW5kIG1ha2VzIHRoaXMgL2Rldi9wcHAKKyAgaW5zdGFuY2UgdGhlICJvd25lciIgb2YgdGhlIGludGVyZmFjZS4gIFRoZSBhcmd1bWVudCBzaG91bGQgcG9pbnQgdG8KKyAgYW4gaW50IHdoaWNoIGlzIHRoZSBkZXNpcmVkIHVuaXQgbnVtYmVyIGlmID49IDAsIG9yIC0xIHRvIGFzc2lnbiB0aGUKKyAgbG93ZXN0IHVudXNlZCB1bml0IG51bWJlci4gIEJlaW5nIHRoZSBvd25lciBvZiB0aGUgaW50ZXJmYWNlIG1lYW5zCisgIHRoYXQgdGhlIGludGVyZmFjZSB3aWxsIGJlIHNodXQgZG93biBpZiB0aGlzIGluc3RhbmNlIG9mIC9kZXYvcHBwIGlzCisgIGNsb3NlZC4KKworKiBQUFBJT0NBVFRBQ0ggYXR0YWNoZXMgdGhpcyBpbnN0YW5jZSB0byBhbiBleGlzdGluZyBQUFAgaW50ZXJmYWNlLgorICBUaGUgYXJndW1lbnQgc2hvdWxkIHBvaW50IHRvIGFuIGludCBjb250YWluaW5nIHRoZSB1bml0IG51bWJlci4KKyAgVGhpcyBkb2VzIG5vdCBtYWtlIHRoaXMgaW5zdGFuY2UgdGhlIG93bmVyIG9mIHRoZSBQUFAgaW50ZXJmYWNlLgorCisqIFBQUElPQ0FUVENIQU4gYXR0YWNoZXMgdGhpcyBpbnN0YW5jZSB0byBhbiBleGlzdGluZyBQUFAgY2hhbm5lbC4KKyAgVGhlIGFyZ3VtZW50IHNob3VsZCBwb2ludCB0byBhbiBpbnQgY29udGFpbmluZyB0aGUgY2hhbm5lbCBudW1iZXIuCisKK1RoZSBpb2N0bCBjYWxscyBhdmFpbGFibGUgb24gYW4gaW5zdGFuY2Ugb2YgL2Rldi9wcHAgYXR0YWNoZWQgdG8gYQorY2hhbm5lbCBhcmU6CisKKyogUFBQSU9DREVUQUNIIGRldGFjaGVzIHRoZSBpbnN0YW5jZSBmcm9tIHRoZSBjaGFubmVsLiAgVGhpcyBpb2N0bCBpcworICBkZXByZWNhdGVkIHNpbmNlIHRoZSBzYW1lIGVmZmVjdCBjYW4gYmUgYWNoaWV2ZWQgYnkgY2xvc2luZyB0aGUKKyAgaW5zdGFuY2UuICBJbiBvcmRlciB0byBwcmV2ZW50IHBvc3NpYmxlIHJhY2VzIHRoaXMgaW9jdGwgd2lsbCBmYWlsCisgIHdpdGggYW4gRUlOVkFMIGVycm9yIGlmIG1vcmUgdGhhbiBvbmUgZmlsZSBkZXNjcmlwdG9yIHJlZmVycyB0byB0aGlzCisgIGluc3RhbmNlIChpLmUuIGFzIGEgcmVzdWx0IG9mIGR1cCgpLCBkdXAyKCkgb3IgZm9yaygpKS4KKworKiBQUFBJT0NDT05ORUNUIGNvbm5lY3RzIHRoaXMgY2hhbm5lbCB0byBhIFBQUCBpbnRlcmZhY2UuICBUaGUKKyAgYXJndW1lbnQgc2hvdWxkIHBvaW50IHRvIGFuIGludCBjb250YWluaW5nIHRoZSBpbnRlcmZhY2UgdW5pdAorICBudW1iZXIuICBJdCB3aWxsIHJldHVybiBhbiBFSU5WQUwgZXJyb3IgaWYgdGhlIGNoYW5uZWwgaXMgYWxyZWFkeQorICBjb25uZWN0ZWQgdG8gYW4gaW50ZXJmYWNlLCBvciBFTlhJTyBpZiB0aGUgcmVxdWVzdGVkIGludGVyZmFjZSBkb2VzCisgIG5vdCBleGlzdC4KKworKiBQUFBJT0NESVNDT05OIGRpc2Nvbm5lY3RzIHRoaXMgY2hhbm5lbCBmcm9tIHRoZSBQUFAgaW50ZXJmYWNlIHRoYXQKKyAgaXQgaXMgY29ubmVjdGVkIHRvLiAgSXQgd2lsbCByZXR1cm4gYW4gRUlOVkFMIGVycm9yIGlmIHRoZSBjaGFubmVsCisgIGlzIG5vdCBjb25uZWN0ZWQgdG8gYW4gaW50ZXJmYWNlLgorCisqIEFsbCBvdGhlciBpb2N0bCBjb21tYW5kcyBhcmUgcGFzc2VkIHRvIHRoZSBjaGFubmVsIGlvY3RsKCkgZnVuY3Rpb24uCisKK1RoZSBpb2N0bCBjYWxscyB0aGF0IGFyZSBhdmFpbGFibGUgb24gYW4gaW5zdGFuY2UgdGhhdCBpcyBhdHRhY2hlZCB0bworYW4gaW50ZXJmYWNlIHVuaXQgYXJlOgorCisqIFBQUElPQ1NNUlUgc2V0cyB0aGUgTVJVIChtYXhpbXVtIHJlY2VpdmUgdW5pdCkgZm9yIHRoZSBpbnRlcmZhY2UuCisgIFRoZSBhcmd1bWVudCBzaG91bGQgcG9pbnQgdG8gYW4gaW50IGNvbnRhaW5pbmcgdGhlIG5ldyBNUlUgdmFsdWUuCisKKyogUFBQSU9DU0ZMQUdTIHNldHMgZmxhZ3Mgd2hpY2ggY29udHJvbCB0aGUgb3BlcmF0aW9uIG9mIHRoZQorICBpbnRlcmZhY2UuICBUaGUgYXJndW1lbnQgc2hvdWxkIGJlIGEgcG9pbnRlciB0byBhbiBpbnQgY29udGFpbmluZworICB0aGUgbmV3IGZsYWdzIHZhbHVlLiAgVGhlIGJpdHMgaW4gdGhlIGZsYWdzIHZhbHVlIHRoYXQgY2FuIGJlIHNldAorICBhcmU6CisJU0NfQ09NUF9UQ1AJCWVuYWJsZSB0cmFuc21pdCBUQ1AgaGVhZGVyIGNvbXByZXNzaW9uCisJU0NfTk9fVENQX0NDSUQJCWRpc2FibGUgY29ubmVjdGlvbi1pZCBjb21wcmVzc2lvbiBmb3IKKwkJCQlUQ1AgaGVhZGVyIGNvbXByZXNzaW9uCisJU0NfUkVKX0NPTVBfVENQCQlkaXNhYmxlIHJlY2VpdmUgVENQIGhlYWRlciBkZWNvbXByZXNzaW9uCisJU0NfQ0NQX09QRU4JCUNvbXByZXNzaW9uIENvbnRyb2wgUHJvdG9jb2wgKENDUCkgaXMKKwkJCQlvcGVuLCBzbyBpbnNwZWN0IENDUCBwYWNrZXRzCisJU0NfQ0NQX1VQCQlDQ1AgaXMgdXAsIG1heSAoZGUpY29tcHJlc3MgcGFja2V0cworCVNDX0xPT1BfVFJBRkZJQwkJc2VuZCBJUCB0cmFmZmljIHRvIHBwcGQKKwlTQ19NVUxUSUxJTksJCWVuYWJsZSBQUFAgbXVsdGlsaW5rIGZyYWdtZW50YXRpb24gb24KKwkJCQl0cmFuc21pdHRlZCBwYWNrZXRzCisJU0NfTVBfU0hPUlRTRVEJCWV4cGVjdCBzaG9ydCBtdWx0aWxpbmsgc2VxdWVuY2UKKwkJCQludW1iZXJzIG9uIHJlY2VpdmVkIG11bHRpbGluayBmcmFnbWVudHMKKwlTQ19NUF9YU0hPUlRTRVEJCXRyYW5zbWl0IHNob3J0IG11bHRpbGluayBzZXF1ZW5jZSBub3MuCisKKyAgVGhlIHZhbHVlcyBvZiB0aGVzZSBmbGFncyBhcmUgZGVmaW5lZCBpbiA8bGludXgvaWZfcHBwLmg+LiAgTm90ZQorICB0aGF0IHRoZSB2YWx1ZXMgb2YgdGhlIFNDX01VTFRJTElOSywgU0NfTVBfU0hPUlRTRVEgYW5kCisgIFNDX01QX1hTSE9SVFNFUSBiaXRzIGFyZSBpZ25vcmVkIGlmIHRoZSBDT05GSUdfUFBQX01VTFRJTElOSyBvcHRpb24KKyAgaXMgbm90IHNlbGVjdGVkLgorCisqIFBQUElPQ0dGTEFHUyByZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgc3RhdHVzL2NvbnRyb2wgZmxhZ3MgZm9yIHRoZQorICBpbnRlcmZhY2UgdW5pdC4gIFRoZSBhcmd1bWVudCBzaG91bGQgcG9pbnQgdG8gYW4gaW50IHdoZXJlIHRoZSBpb2N0bAorICB3aWxsIHN0b3JlIHRoZSBmbGFncyB2YWx1ZS4gIEFzIHdlbGwgYXMgdGhlIHZhbHVlcyBsaXN0ZWQgYWJvdmUgZm9yCisgIFBQUElPQ1NGTEFHUywgdGhlIGZvbGxvd2luZyBiaXRzIG1heSBiZSBzZXQgaW4gdGhlIHJldHVybmVkIHZhbHVlOgorCVNDX0NPTVBfUlVOCQlDQ1AgY29tcHJlc3NvciBpcyBydW5uaW5nCisJU0NfREVDT01QX1JVTgkJQ0NQIGRlY29tcHJlc3NvciBpcyBydW5uaW5nCisJU0NfRENfRVJST1IJCUNDUCBkZWNvbXByZXNzb3IgZGV0ZWN0ZWQgbm9uLWZhdGFsIGVycm9yCisJU0NfRENfRkVSUk9SCQlDQ1AgZGVjb21wcmVzc29yIGRldGVjdGVkIGZhdGFsIGVycm9yCisKKyogUFBQSU9DU0NPTVBSRVNTIHNldHMgdGhlIHBhcmFtZXRlcnMgZm9yIHBhY2tldCBjb21wcmVzc2lvbiBvcgorICBkZWNvbXByZXNzaW9uLiAgVGhlIGFyZ3VtZW50IHNob3VsZCBwb2ludCB0byBhIHBwcF9vcHRpb25fZGF0YQorICBzdHJ1Y3R1cmUgKGRlZmluZWQgaW4gPGxpbnV4L2lmX3BwcC5oPiksIHdoaWNoIGNvbnRhaW5zIGEKKyAgcG9pbnRlci9sZW5ndGggcGFpciB3aGljaCBzaG91bGQgZGVzY3JpYmUgYSBibG9jayBvZiBtZW1vcnkKKyAgY29udGFpbmluZyBhIENDUCBvcHRpb24gc3BlY2lmeWluZyBhIGNvbXByZXNzaW9uIG1ldGhvZCBhbmQgaXRzCisgIHBhcmFtZXRlcnMuICBUaGUgcHBwX29wdGlvbl9kYXRhIHN0cnVjdCBhbHNvIGNvbnRhaW5zIGEgYHRyYW5zbWl0JworICBmaWVsZC4gIElmIHRoaXMgaXMgMCwgdGhlIGlvY3RsIHdpbGwgYWZmZWN0IHRoZSByZWNlaXZlIHBhdGgsCisgIG90aGVyd2lzZSB0aGUgdHJhbnNtaXQgcGF0aC4KKworKiBQUFBJT0NHVU5JVCByZXR1cm5zLCBpbiB0aGUgaW50IHBvaW50ZWQgdG8gYnkgdGhlIGFyZ3VtZW50LCB0aGUgdW5pdAorICBudW1iZXIgb2YgdGhpcyBpbnRlcmZhY2UgdW5pdC4KKworKiBQUFBJT0NTREVCVUcgc2V0cyB0aGUgZGVidWcgZmxhZ3MgZm9yIHRoZSBpbnRlcmZhY2UgdG8gdGhlIHZhbHVlIGluCisgIHRoZSBpbnQgcG9pbnRlZCB0byBieSB0aGUgYXJndW1lbnQuICBPbmx5IHRoZSBsZWFzdCBzaWduaWZpY2FudCBiaXQKKyAgaXMgdXNlZDsgaWYgdGhpcyBpcyAxIHRoZSBnZW5lcmljIGxheWVyIHdpbGwgcHJpbnQgc29tZSBkZWJ1ZworICBtZXNzYWdlcyBkdXJpbmcgaXRzIG9wZXJhdGlvbi4gIFRoaXMgaXMgb25seSBpbnRlbmRlZCBmb3IgZGVidWdnaW5nCisgIHRoZSBnZW5lcmljIFBQUCBsYXllciBjb2RlOyBpdCBpcyBnZW5lcmFsbHkgbm90IGhlbHBmdWwgZm9yIHdvcmtpbmcKKyAgb3V0IHdoeSBhIFBQUCBjb25uZWN0aW9uIGlzIGZhaWxpbmcuCisKKyogUFBQSU9DR0RFQlVHIHJldHVybnMgdGhlIGRlYnVnIGZsYWdzIGZvciB0aGUgaW50ZXJmYWNlIGluIHRoZSBpbnQKKyAgcG9pbnRlZCB0byBieSB0aGUgYXJndW1lbnQuCisKKyogUFBQSU9DR0lETEUgcmV0dXJucyB0aGUgdGltZSwgaW4gc2Vjb25kcywgc2luY2UgdGhlIGxhc3QgZGF0YQorICBwYWNrZXRzIHdlcmUgc2VudCBhbmQgcmVjZWl2ZWQuICBUaGUgYXJndW1lbnQgc2hvdWxkIHBvaW50IHRvIGEKKyAgcHBwX2lkbGUgc3RydWN0dXJlIChkZWZpbmVkIGluIDxsaW51eC9wcHBfZGVmcy5oPikuICBJZiB0aGUKKyAgQ09ORklHX1BQUF9GSUxURVIgb3B0aW9uIGlzIGVuYWJsZWQsIHRoZSBzZXQgb2YgcGFja2V0cyB3aGljaCByZXNldAorICB0aGUgdHJhbnNtaXQgYW5kIHJlY2VpdmUgaWRsZSB0aW1lcnMgaXMgcmVzdHJpY3RlZCB0byB0aG9zZSB3aGljaAorICBwYXNzIHRoZSBgYWN0aXZlJyBwYWNrZXQgZmlsdGVyLgorCisqIFBQUElPQ1NNQVhDSUQgc2V0cyB0aGUgbWF4aW11bSBjb25uZWN0aW9uLUlEIHBhcmFtZXRlciAoYW5kIHRodXMgdGhlCisgIG51bWJlciBvZiBjb25uZWN0aW9uIHNsb3RzKSBmb3IgdGhlIFRDUCBoZWFkZXIgY29tcHJlc3NvciBhbmQKKyAgZGVjb21wcmVzc29yLiAgVGhlIGxvd2VyIDE2IGJpdHMgb2YgdGhlIGludCBwb2ludGVkIHRvIGJ5IHRoZQorICBhcmd1bWVudCBzcGVjaWZ5IHRoZSBtYXhpbXVtIGNvbm5lY3Rpb24tSUQgZm9yIHRoZSBjb21wcmVzc29yLiAgSWYKKyAgdGhlIHVwcGVyIDE2IGJpdHMgb2YgdGhhdCBpbnQgYXJlIG5vbi16ZXJvLCB0aGV5IHNwZWNpZnkgdGhlIG1heGltdW0KKyAgY29ubmVjdGlvbi1JRCBmb3IgdGhlIGRlY29tcHJlc3Nvciwgb3RoZXJ3aXNlIHRoZSBkZWNvbXByZXNzb3IncworICBtYXhpbXVtIGNvbm5lY3Rpb24tSUQgaXMgc2V0IHRvIDE1LgorCisqIFBQUElPQ1NOUE1PREUgc2V0cyB0aGUgbmV0d29yay1wcm90b2NvbCBtb2RlIGZvciBhIGdpdmVuIG5ldHdvcmsKKyAgcHJvdG9jb2wuICBUaGUgYXJndW1lbnQgc2hvdWxkIHBvaW50IHRvIGFuIG5waW9jdGwgc3RydWN0IChkZWZpbmVkCisgIGluIDxsaW51eC9pZl9wcHAuaD4pLiAgVGhlIGBwcm90b2NvbCcgZmllbGQgZ2l2ZXMgdGhlIFBQUCBwcm90b2NvbAorICBudW1iZXIgZm9yIHRoZSBwcm90b2NvbCB0byBiZSBhZmZlY3RlZCwgYW5kIHRoZSBgbW9kZScgZmllbGQKKyAgc3BlY2lmaWVzIHdoYXQgdG8gZG8gd2l0aCBwYWNrZXRzIGZvciB0aGF0IHByb3RvY29sOgorCisJTlBNT0RFX1BBU1MJbm9ybWFsIG9wZXJhdGlvbiwgdHJhbnNtaXQgYW5kIHJlY2VpdmUgcGFja2V0cworCU5QTU9ERV9EUk9QCXNpbGVudGx5IGRyb3AgcGFja2V0cyBmb3IgdGhpcyBwcm90b2NvbAorCU5QTU9ERV9FUlJPUglkcm9wIHBhY2tldHMgYW5kIHJldHVybiBhbiBlcnJvciBvbiB0cmFuc21pdAorCU5QTU9ERV9RVUVVRQlxdWV1ZSB1cCBwYWNrZXRzIGZvciB0cmFuc21pdCwgZHJvcCByZWNlaXZlZAorCQkJcGFja2V0cworCisgIEF0IHByZXNlbnQgTlBNT0RFX0VSUk9SIGFuZCBOUE1PREVfUVVFVUUgaGF2ZSB0aGUgc2FtZSBlZmZlY3QgYXMKKyAgTlBNT0RFX0RST1AuCisKKyogUFBQSU9DR05QTU9ERSByZXR1cm5zIHRoZSBuZXR3b3JrLXByb3RvY29sIG1vZGUgZm9yIGEgZ2l2ZW4KKyAgcHJvdG9jb2wuICBUaGUgYXJndW1lbnQgc2hvdWxkIHBvaW50IHRvIGFuIG5waW9jdGwgc3RydWN0IHdpdGggdGhlCisgIGBwcm90b2NvbCcgZmllbGQgc2V0IHRvIHRoZSBQUFAgcHJvdG9jb2wgbnVtYmVyIGZvciB0aGUgcHJvdG9jb2wgb2YKKyAgaW50ZXJlc3QuICBPbiByZXR1cm4gdGhlIGBtb2RlJyBmaWVsZCB3aWxsIGJlIHNldCB0byB0aGUgbmV0d29yay0KKyAgcHJvdG9jb2wgbW9kZSBmb3IgdGhhdCBwcm90b2NvbC4KKworKiBQUFBJT0NTUEFTUyBhbmQgUFBQSU9DU0FDVElWRSBzZXQgdGhlIGBwYXNzJyBhbmQgYGFjdGl2ZScgcGFja2V0CisgIGZpbHRlcnMuICBUaGVzZSBpb2N0bHMgYXJlIG9ubHkgYXZhaWxhYmxlIGlmIHRoZSBDT05GSUdfUFBQX0ZJTFRFUgorICBvcHRpb24gaXMgc2VsZWN0ZWQuICBUaGUgYXJndW1lbnQgc2hvdWxkIHBvaW50IHRvIGEgc29ja19mcHJvZworICBzdHJ1Y3R1cmUgKGRlZmluZWQgaW4gPGxpbnV4L2ZpbHRlci5oPikgY29udGFpbmluZyB0aGUgY29tcGlsZWQgQlBGCisgIGluc3RydWN0aW9ucyBmb3IgdGhlIGZpbHRlci4gIFBhY2tldHMgYXJlIGRyb3BwZWQgaWYgdGhleSBmYWlsIHRoZQorICBgcGFzcycgZmlsdGVyOyBvdGhlcndpc2UsIGlmIHRoZXkgZmFpbCB0aGUgYGFjdGl2ZScgZmlsdGVyIHRoZXkgYXJlCisgIHBhc3NlZCBidXQgdGhleSBkbyBub3QgcmVzZXQgdGhlIHRyYW5zbWl0IG9yIHJlY2VpdmUgaWRsZSB0aW1lci4KKworKiBQUFBJT0NTTVJSVSBlbmFibGVzIG9yIGRpc2FibGVzIG11bHRpbGluayBwcm9jZXNzaW5nIGZvciByZWNlaXZlZAorICBwYWNrZXRzIGFuZCBzZXRzIHRoZSBtdWx0aWxpbmsgTVJSVSAobWF4aW11bSByZWNvbnN0cnVjdGVkIHJlY2VpdmUKKyAgdW5pdCkuICBUaGUgYXJndW1lbnQgc2hvdWxkIHBvaW50IHRvIGFuIGludCBjb250YWluaW5nIHRoZSBuZXcgTVJSVQorICB2YWx1ZS4gIElmIHRoZSBNUlJVIHZhbHVlIGlzIDAsIHByb2Nlc3Npbmcgb2YgcmVjZWl2ZWQgbXVsdGlsaW5rCisgIGZyYWdtZW50cyBpcyBkaXNhYmxlZC4gIFRoaXMgaW9jdGwgaXMgb25seSBhdmFpbGFibGUgaWYgdGhlCisgIENPTkZJR19QUFBfTVVMVElMSU5LIG9wdGlvbiBpcyBzZWxlY3RlZC4KKworTGFzdCBtb2RpZmllZDogNy1mZWItMjAwMgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3Byb2NfbmV0X3RjcC50eHQgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvcHJvY19uZXRfdGNwLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41OWNiOTE1Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3Byb2NfbmV0X3RjcC50eHQKQEAgLTAsMCArMSw0NyBAQAorVGhpcyBkb2N1bWVudCBkZXNjcmliZXMgdGhlIGludGVyZmFjZXMgL3Byb2MvbmV0L3RjcCBhbmQgL3Byb2MvbmV0L3RjcDYuCisKK1RoZXNlIC9wcm9jIGludGVyZmFjZXMgcHJvdmlkZSBpbmZvcm1hdGlvbiBhYm91dCBjdXJyZW50bHkgYWN0aXZlIFRDUCAKK2Nvbm5lY3Rpb25zLCBhbmQgYXJlIGltcGxlbWVudGVkIGJ5IHRjcF9nZXRfaW5mbygpIGluIG5ldC9pcHY0L3RjcF9pcHY0LmMgYW5kCit0Y3A2X2dldF9pbmZvKCkgaW4gbmV0L2lwdjYvdGNwX2lwdjYuYywgcmVzcGVjdGl2ZWx5LgorCitJdCB3aWxsIGZpcnN0IGxpc3QgYWxsIGxpc3RlbmluZyBUQ1Agc29ja2V0cywgYW5kIG5leHQgbGlzdCBhbGwgZXN0YWJsaXNoZWQKK1RDUCBjb25uZWN0aW9ucy4gQSB0eXBpY2FsIGVudHJ5IG9mIC9wcm9jL25ldC90Y3Agd291bGQgbG9vayBsaWtlIHRoaXMgKHNwbGl0IAordXAgaW50byAzIHBhcnRzIGJlY2F1c2Ugb2YgdGhlIGxlbmd0aCBvZiB0aGUgbGluZSk6CisKKyAgIDQ2OiAwMTAzMTBBQzo5QzRDIDAzMDMxMEFDOjE3NzAgMDEgCisgICB8ICAgICAgfCAgICAgIHwgICAgICB8ICAgICAgfCAgIHwtLT4gY29ubmVjdGlvbiBzdGF0ZQorICAgfCAgICAgIHwgICAgICB8ICAgICAgfCAgICAgIHwtLS0tLS0+IHJlbW90ZSBUQ1AgcG9ydCBudW1iZXIKKyAgIHwgICAgICB8ICAgICAgfCAgICAgIHwtLS0tLS0tLS0tLS0tPiByZW1vdGUgSVB2NCBhZGRyZXNzCisgICB8ICAgICAgfCAgICAgIHwtLS0tLS0tLS0tLS0tLS0tLS0tLT4gbG9jYWwgVENQIHBvcnQgbnVtYmVyCisgICB8ICAgICAgfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT4gbG9jYWwgSVB2NCBhZGRyZXNzCisgICB8LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT4gbnVtYmVyIG9mIGVudHJ5CisKKyAgIDAwMDAwMTUwOjAwMDAwMDAwIDAxOjAwMDAwMDE5IDAwMDAwMDAwICAKKyAgICAgIHwgICAgICAgIHwgICAgIHwgICAgIHwgICAgICAgfC0tPiBudW1iZXIgb2YgdW5yZWNvdmVyZWQgUlRPIHRpbWVvdXRzCisgICAgICB8ICAgICAgICB8ICAgICB8ICAgICB8LS0tLS0tLS0tLT4gbnVtYmVyIG9mIGppZmZpZXMgdW50aWwgdGltZXIgZXhwaXJlcworICAgICAgfCAgICAgICAgfCAgICAgfC0tLS0tLS0tLS0tLS0tLS0+IHRpbWVyX2FjdGl2ZSAoc2VlIGJlbG93KQorICAgICAgfCAgICAgICAgfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0+IHJlY2VpdmUtcXVldWUKKyAgICAgIHwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPiB0cmFuc21pdC1xdWV1ZQorCisgICAxMDAwICAgICAgICAwIDU0MTY1Nzg1IDQgY2QxZTYwNDAgMjUgNCAyNyAzIC0xCisgICAgfCAgICAgICAgICB8ICAgIHwgICAgIHwgICAgfCAgICAgfCAgfCB8ICB8IHwtLT4gc2xvdyBzdGFydCBzaXplIHRocmVzaG9sZCwgCisgICAgfCAgICAgICAgICB8ICAgIHwgICAgIHwgICAgfCAgICAgfCAgfCB8ICB8ICAgICAgb3IgLTEgaWYgdGhlIHRyZXNob2xkCisgICAgfCAgICAgICAgICB8ICAgIHwgICAgIHwgICAgfCAgICAgfCAgfCB8ICB8ICAgICAgaXMgPj0gMHhGRkZGCisgICAgfCAgICAgICAgICB8ICAgIHwgICAgIHwgICAgfCAgICAgfCAgfCB8ICB8LS0tLT4gc2VuZGluZyBjb25nZXN0aW9uIHdpbmRvdworICAgIHwgICAgICAgICAgfCAgICB8ICAgICB8ICAgIHwgICAgIHwgIHwgfC0tLS0tLS0+IChhY2sucXVpY2s8PDEpfGFjay5waW5ncG9uZworICAgIHwgICAgICAgICAgfCAgICB8ICAgICB8ICAgIHwgICAgIHwgIHwtLS0tLS0tLS0+IFByZWRpY3RlZCB0aWNrIG9mIHNvZnQgY2xvY2sKKyAgICB8ICAgICAgICAgIHwgICAgfCAgICAgfCAgICB8ICAgICB8ICAgICAgICAgICAgICAoZGVsYXllZCBBQ0sgY29udHJvbCBkYXRhKQorICAgIHwgICAgICAgICAgfCAgICB8ICAgICB8ICAgIHwgICAgIHwtLS0tLS0tLS0tLS0+IHJldHJhbnNtaXQgdGltZW91dAorICAgIHwgICAgICAgICAgfCAgICB8ICAgICB8ICAgIHwtLS0tLS0tLS0tLS0tLS0tLS0+IGxvY2F0aW9uIG9mIHNvY2tldCBpbiBtZW1vcnkKKyAgICB8ICAgICAgICAgIHwgICAgfCAgICAgfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPiBzb2NrZXQgcmVmZXJlbmNlIGNvdW50CisgICAgfCAgICAgICAgICB8ICAgIHwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT4gaW5vZGUKKyAgICB8ICAgICAgICAgIHwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPiB1bmFuc3dlcmVkIDAtd2luZG93IHByb2JlcworICAgIHwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0+IHVpZAorCit0aW1lcl9hY3RpdmU6CisgIDAgIG5vIHRpbWVyIGlzIHBlbmRpbmcKKyAgMSAgcmV0cmFuc21pdC10aW1lciBpcyBwZW5kaW5nCisgIDIgIGFub3RoZXIgdGltZXIgKGUuZy4gZGVsYXllZCBhY2sgb3Iga2VlcGFsaXZlKSBpcyBwZW5kaW5nCisgIDMgIHRoaXMgaXMgYSBzb2NrZXQgaW4gVElNRV9XQUlUIHN0YXRlLiBOb3QgYWxsIGZpZWxkcyB3aWxsIGNvbnRhaW4gCisgICAgIGRhdGEgKG9yIGV2ZW4gZXhpc3QpCisgIDQgIHplcm8gd2luZG93IHByb2JlIHRpbWVyIGlzIHBlbmRpbmcKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9wdC50eHQgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvcHQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcyZTg4OGMKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvcHQudHh0CkBAIC0wLDAgKzEsNTggQEAKK1RoaXMgaXMgdGhlIFJFQURNRSBmb3IgdGhlIEdyYWNpbGlzIFBhY2tldHdpbiBkZXZpY2UgZHJpdmVyLCB2ZXJzaW9uIDAuNQorQUxQSEEgZm9yIExpbnV4IDEuMy40My4KKworVGhlc2UgZmlsZXMgd2lsbCBhbGxvdyB5b3UgdG8gdGFsayB0byB0aGUgUGFja2VUd2luIChub3cga25vdyBhcyBQVCkgYW5kCitjb25uZWN0IHRocm91Z2ggaXQganVzdCBsaWtlIGEgcGFpciBvZiBUTkNzLiAgVG8gZG8gdGhpcyB5b3Ugd2lsbCBhbHNvCityZXF1aXJlIHRoZSBBWC4yNSBjb2RlIGluIHRoZSBrZXJuZWwgZW5hYmxlZC4KKworVGhlcmUgYXJlIGZvdXIgZmlsZXMgaW4gdGhpcyBhcmNoaXZlOyB0aGlzIHJlYWRtZSwgYSBwYXRjaCBmaWxlLCBhIC5jIGZpbGUKK2FuZCBmaW5hbGx5IGEgLmggZmlsZS4gIFRoZSB0d28gcHJvZ3JhbSBmaWxlcyBuZWVkIHRvIGJlIHB1dCBpbnRvIHRoZQorZHJpdmVycy9uZXQgZGlyZWN0b3J5IGluIHRoZSBMaW51eCBzb3VyY2UgdHJlZSwgZm9yIG1lIHRoaXMgaXMgdGhlCitkaXJlY3RvcnkgL3Vzci9zcmMvbGludXgvZHJpdmVycy9uZXQuICBUaGUgcGF0Y2ggZmlsZSBuZWVkcyB0byBiZSBwYXRjaGVkIGluCithdCB0aGUgdG9wIG9mIHRoZSBMaW51eCBzb3VyY2UgdHJlZSAoL3Vzci9zcmMvbGludXggaW4gbXkgY2FzZSkuCisKK1lvdSB3aWxsIG1vc3QgcHJvYmFibHkgaGF2ZSB0byBlZGl0IHRoZSBwdC5jIGZpbGUgdG8gc3VpdCB5b3VyIG93biBzZXR1cCwKK3RoaXMgc2hvdWxkIGp1c3QgaW52b2x2ZSBjaGFuZ2luZyBzb21lIG9mIHRoZSBkZWZpbmVzIGF0IHRoZSB0b3Agb2YgdGhlIGZpbGUuIAorUGxlYXNlIG5vdGUgdGhhdCBpZiB5b3UgcnVuIGFuIGV4dGVybmFsIG1vZGVtIHlvdSBtdXN0IHNwZWNpZnkgYSBzcGVlZCBvZiAwLgorCitUaGUgcHJvZ3JhbSBpcyBjdXJyZW50bHkgc2V0dXAgdG8gcnVuIGEgNDgwMCBiYXVkIGV4dGVybmFsIG1vZGVtIG9uIHBvcnQgQQorYW5kIGEgS2FudHJvbmljcyBERS05NjAwIGRhdWdodGVyIGJvYXJkIG9uIHBvcnQgQiBzbyBpZiB5b3UgaGF2ZSB0aGlzIChvcgorc29tZXRoaW5nIHNpbWlsYXIpIHRoZW4geW91J3JlIHJpZ2h0LgorCitUbyBjb21waWxlIGluIHRoZSBkcml2ZXIsIHB1dCB0aGUgZmlsZXMgaW4gdGhlIGNvcnJlY3QgcGxhY2UgYW5kIHBhdGNoIGluCit0aGUgZGlmZi4gIFlvdSB3aWxsIGhhdmUgdG8gcmUtY29uZmlndXJlIHRoZSBrZXJuZWwgYWdhaW4gYmVmb3JlIHlvdQorcmVjb21waWxlIGl0LiAKKworVGhlIGRyaXZlciBpcyBub3QgcmVhbCBnb29kIGF0IHRoZSBtb21lbnQgZm9yIGZpbmRpbmcgdGhlIGNhcmQuICBZb3UgY2FuCisnaGVscCcgaXQgYnkgY2hhbmdpbmcgdGhlIG9yZGVyIG9mIHRoZSBwb3RlbnRpYWwgYWRkcmVzc2VzIGluIHRoZSBzdHJ1Y3R1cmUKK2ZvdW5kIGluIHRoZSBwdF9pbml0KCkgZnVuY3Rpb24gc28gdGhlIGFkZHJlc3Mgb2Ygd2hlcmUgdGhlIGNhcmQgaXMgaXMgcHV0CitmaXJzdC4KKworQWZ0ZXIgY29tcGlsaW5nLCB5b3UgaGF2ZSB0byBnZXQgdGhlbSBnb2luZywgdGhleSBhcmUgcHJldHR5IHdlbGwgbGlrZSBhbnkKK290aGVyIG5ldCBkZXZpY2UgYW5kIGp1c3QgbmVlZCBpZmNvbmZpZyB0byBnZXQgdGhlbSBnb2luZy4KK0FzIGFuIGV4YW1wbGUsIGhlcmUgaXMgbXkgL2V0Yy9yYy5uZXQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyMKKyMgQ29uZmlndXJlIHRoZSBQYWNrZVR3aW4sIHBvcnQgQS4KKy9zYmluL2lmY29uZmlnIHB0MGEgNDQuMTM2LjguODcgaHcgYXgyNSB2azJ4bHogbXR1IDUxMiAKKy9zYmluL2lmY29uZmlnIHB0MGEgNDQuMTM2LjguODcgYnJvYWRjYXN0IDQ0LjEzNi44LjI1NSBuZXRtYXNrIDI1NS4yNTUuMjU1LjAKKy9zYmluL3JvdXRlIGFkZCAtbmV0IDQ0LjEzNi44LjAgbmV0bWFzayAyNTUuMjU1LjI1NS4wIGRldiBwdDBhCisvc2Jpbi9yb3V0ZSBhZGQgLW5ldCA0NC4wLjAuMCBuZXRtYXNrIDI1NS4wLjAuMCBndyA0NC4xMzYuOC42OCBkZXYgcHQwYQorL3NiaW4vcm91dGUgYWRkIC1uZXQgMTM4LjI1LjE2LjAgbmV0bWFzayAyNTUuMjU1LjI0MC4wIGRldiBwdDBhCisvc2Jpbi9yb3V0ZSBhZGQgLWhvc3QgNDQuMTM2LjguMjU1IGRldiBwdDBhCisjCisjIENvbmZpZ3VyZSB0aGUgUGFja2VUd2luLCBwb3J0IEIuCisvc2Jpbi9pZmNvbmZpZyBwdDBiIDQ0LjEzNi44Ljg3IGh3IGF4MjUgdmsyeGx6LTEgbXR1IDUxMgorL3NiaW4vaWZjb25maWcgcHQwYiA0NC4xMzYuOC44NyBicm9hZGNhc3QgNDQuMjU1LjI1NS4yNTUgbmV0bWFzayAyNTUuMC4wLjAKKy9zYmluL3JvdXRlIGFkZCAtaG9zdCA0NC4xMzYuOC4yMTYgZGV2IHB0MGIKKy9zYmluL3JvdXRlIGFkZCAtaG9zdCA0NC4xMzYuOC45NSAgZGV2IHB0MGIKKy9zYmluL3JvdXRlIGFkZCAtaG9zdCA0NC4yNTUuMjU1LjI1NSBkZXYgcHQwYgorCitUaGlzIHZlcnNpb24gb2YgdGhlIGRyaXZlciBjb21lcyB1bmRlciB0aGUgR05VIEdQTC4gIElmIHlvdSBoYXZlIG9uZSBvZiBteQorcHJldmlvdXMgKG5vbi1HUEwpIHZlcnNpb25zIG9mIHRoZSBkcml2ZXIsIHBsZWFzZSB1cGRhdGUgdG8gdGhpcyBvbmUuCisKK0kgaG9wZSB0aGF0IHRoaXMgYWxsIHdvcmtzIHdlbGwgZm9yIHlvdS4gIEkgd291bGQgYmUgcGxlYXNlZCB0byBoZWFyIGhvdworbWFueSBwZW9wbGUgdXNlIHRoZSBkcml2ZXIgYW5kIGlmIGl0IGRvZXMgaXRzIGpvYi4KKworICAtIENyYWlnIHZrMnhseiA8Y3NtYWxsQHNtYWxsLmRyb3BiZWFyLmlkLmF1PgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3JheV9jcy50eHQgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvcmF5X2NzLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMWRlZjAwCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3JheV9jcy50eHQKQEAgLTAsMCArMSwxNTEgQEAKK1NlcHRlbWJlciAyMSwgMTk5OQorCitDb3B5cmlnaHQgKGMpIDE5OTggIENvcmV5IFRob21hcyAoY29yZXlAd29ybGQuc3RkLmNvbSkKKworVGhpcyBmaWxlIGlzIHRoZSBkb2N1bWVudGF0aW9uIGZvciB0aGUgUmF5bGluayBXaXJlbGVzcyBMQU4gY2FyZCBkcml2ZXIgZm9yCitMaW51eC4gIFRoZSBSYXlsaW5rIHdpcmVsZXNzIExBTiBjYXJkIGlzIGEgUENNQ0lBIGNhcmQgd2hpY2ggcHJvdmlkZXMgSUVFRQorODAyLjExIGNvbXBhdGlibGUgd2lyZWxlc3MgbmV0d29yayBjb25uZWN0aXZpdHkgYXQgMSBhbmQgMiBtZWdhYml0cy9zZWNvbmQuCitTZWUgaHR0cDovL3d3dy5yYXl0aGVvbi5jb20vbWljcm8vcmF5bGluay8gZm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdGhlIFJheWxpbmsKK2NhcmQuICBUaGlzIGRyaXZlciBpcyBpbiBlYXJseSBkZXZlbG9wbWVudCBhbmQgZG9lcyBoYXZlIGJ1Z3MuICBTZWUgdGhlIGtub3duCitidWdzIGFuZCBsaW1pdGF0aW9ucyBhdCB0aGUgZW5kIG9mIHRoaXMgZG9jdW1lbnQgZm9yIG1vcmUgaW5mb3JtYXRpb24uCitUaGlzIGRyaXZlciBhbHNvIHdvcmtzIHdpdGggV2ViR2VhcidzIEF2aWF0b3IgMi40IGFuZCBBdmlhdG9yIFBybword2lyZWxlc3MgTEFOIGNhcmRzLgorCitBcyBvZiBrZXJuZWwgMi4zLjE4LCB0aGUgcmF5X2NzIGRyaXZlciBpcyBwYXJ0IG9mIHRoZSBMaW51eCBrZXJuZWwKK3NvdXJjZS4gIE15IHdlYiBwYWdlIGZvciB0aGUgZGV2ZWxvcG1lbnQgb2YgcmF5X2NzIGlzIGF0CitodHRwOi8vd29ybGQuc3RkLmNvbS9+Y29yZXkvcmF5bGluay5odG1sIGFuZCBJIGNhbiBiZSBlbWFpbGVkIGF0Citjb3JleUB3b3JsZC5zdGQuY29tCisKK1RoZSBrZXJuZWwgZHJpdmVyIGlzIGJhc2VkIG9uIHJheV9jcy0xLjYyLnRnegorCitUaGUgZHJpdmVyIGF0IG15IHdlYiBwYWdlIGlzIGludGVuZGVkIHRvIGJlIHVzZWQgYXMgYW4gYWRkIG9uIHRvCitEYXZpZCBIaW5kcyBwY21jaWEgcGFja2FnZS4gIEFsbCB0aGUgY29tbWFuZCBsaW5lIHBhcmFtZXRlcnMgYXJlCithdmFpbGFibGUgd2hlbiBjb21waWxlZCBhcyBhIG1vZHVsZS4gIFdoZW4gYnVpbHQgaW50byB0aGUga2VybmVsLCBvbmx5Cit0aGUgZXNzaWQ9IHN0cmluZyBwYXJhbWV0ZXIgaXMgYXZhaWxhYmxlIHZpYSB0aGUga2VybmVsIGNvbW1hbmQgbGluZS4KK1RoaXMgd2lsbCBjaGFuZ2UgYWZ0ZXIgdGhlIG1ldGhvZCBvZiBzb3J0aW5nIG91dCBwYXJhbWV0ZXJzIGZvciBhbGwKK3RoZSBQQ01DSUEgZHJpdmVycyBpcyBhZ3JlZWQgdXBvbi4gIElmIHlvdSBtdXN0IGhhdmUgYSBidWlsdCBpbiBkcml2ZXIKK3dpdGggbm9uZGVmYXVsdCBwYXJhbWV0ZXJzLCB0aGV5IGNhbiBiZSBlZGl0ZWQgaW4KKy91c3Ivc3JjL2xpbnV4L2RyaXZlcnMvbmV0L3BjbWNpYS9yYXlfY3MuYy4gIFNlYXJjaGluZyBmb3IgTU9EVUxFX1BBUk0KK3dpbGwgZmluZCB0aGVtIGFsbC4KKworSW5mb3JtYXRpb24gb24gY2FyZCBzZXJ2aWNlcyBpcyBhdmFpbGFibGUgYXQ6CisJZnRwOi8vaHlwZXIuc3RhbmZvcmQuZWR1L3B1Yi9wY21jaWEvZG9jCisgICAgICAgIGh0dHA6Ly9oeXBlci5zdGFuZm9yZC5lZHUvSHlwZXJOZXdzL2dldC9wY21jaWEvaG9tZS5odG1sCisKKworQ2FyZCBzZXJ2aWNlcyB1c2VyIHByb2dyYW1zIGFyZSBzdGlsbCByZXF1aXJlZCBmb3IgUENNQ0lBIGRldmljZXMuCitwY21jaWEtY3MtMy4xLjEgb3IgZ3JlYXRlciBpcyByZXF1aXJlZCBmb3IgdGhlIGtlcm5lbCB2ZXJzaW9uIG9mCit0aGUgZHJpdmVyLgorCitDdXJyZW50bHksIHJheV9jcyBpcyBub3QgcGFydCBvZiBEYXZpZCBIaW5kcyBjYXJkIHNlcnZpY2VzIHBhY2thZ2UsCitzbyB0aGUgZm9sbG93aW5nIG1hZ2ljIGlzIHJlcXVpcmVkLgorCitBdCB0aGUgZW5kIG9mIHRoZSAvZXRjL3BjbWNpYS9jb25maWcub3B0cyBmaWxlLCBhZGQgdGhlIGxpbmU6IAorc291cmNlIC4vcmF5X2NzLm9wdHMgCitUaGlzIHdpbGwgbWFrZSBjYXJkIHNlcnZpY2VzIHJlYWQgdGhlIHJheV9jcy5vcHRzIGZpbGUKK3doZW4gc3RhcnRpbmcuICBDcmVhdGUgdGhlIGZpbGUgL2V0Yy9wY21jaWEvcmF5X2NzLm9wdHMgY29udGFpbmluZyB0aGUKK2ZvbGxvd2luZzoKKworIyMjIyBzdGFydCBvZiAvZXRjL3BjbWNpYS9yYXlfY3Mub3B0cyAjIyMjIyMjIyMjIyMjIyMjIyMjCisjIENvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgUmF5bGluayBXaXJlbGVzcyBMQU4gUENNQ0lBIGNhcmQKK2RldmljZSAicmF5X2NzIgorICBjbGFzcyAibmV0d29yayIgbW9kdWxlICJtaXNjL3JheV9jcyIKKworY2FyZCAiUmF5TGluayBQQyBDYXJkIFdMQU4gQWRhcHRlciIKKyAgbWFuZmlkIDB4MDFhNiwgMHgwMDAwCisgIGJpbmQgInJheV9jcyIKKworbW9kdWxlICJtaXNjL3JheV9jcyIgb3B0cyAiIgorIyMjIyBlbmQgb2YgL2V0Yy9wY21jaWEvcmF5X2NzLm9wdHMgIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKworVG8gam9pbiBhbiBleGlzdGluZyBuZXR3b3JrIHdpdGgKK2RpZmZlcmVudCBwYXJhbWV0ZXJzLCBjb250YWN0IHRoZSBuZXR3b3JrIGFkbWluaXN0cmF0b3IgZm9yIHRoZSAKK2NvbmZpZ3VyYXRpb24gaW5mb3JtYXRpb24sIGFuZCBlZGl0IC9ldGMvcGNtY2lhL3JheV9jcy5vcHRzLgorQWRkIHRoZSBwYXJhbWV0ZXJzIGJlbG93IGJldHdlZW4gdGhlIGVtcHR5IHF1b3Rlcy4KKworUGFyYW1ldGVycyBmb3IgcmF5X2NzIGRyaXZlciB3aGljaCBtYXkgYmUgc3BlY2lmaWVkIGluIHJheV9jcy5vcHRzOgorCitiYyAgICAgICAgICAgICAgaW50ZWdlciAgICAgICAgIDAgPSBub3JtYWwgbW9kZSAoODAyLjExIHRpbWluZykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSA9IHNsb3cgZG93biBpbnRlciBmcmFtZSB0aW1pbmcgdG8gYWxsb3cKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wZXJhdGlvbiB3aXRoIG9sZGVyIGJyZWV6ZWNvbSBhY2Nlc3MKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvaW50cy4KKworYmVhY29uX3BlcmlvZAlpbnRlZ2VyICAgICAgICAgYmVhY29uIHBlcmlvZCBpbiBLaWxvLW1pY3Jvc2Vjb25kcworCQkJCWxlZ2FsIHZhbHVlcyA9IG11c3QgYmUgaW50ZWdlciBtdWx0aXBsZSAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2YgaG9wIGR3ZWxsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQgPSAyNTYKKworY291bnRyeSAgICAgICAgIGludGVnZXIgICAgICAgICAxID0gVVNBIChkZWZhdWx0KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyID0gRXVyb3BlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMgPSBKYXBhbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0ID0gS29yZWEKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNSA9IFNwYWluCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDYgPSBGcmFuY2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNyA9IElzcmFlbAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4ID0gQXVzdHJhbGlhCisKK2Vzc2lkCQlzdHJpbmcJCUVTUyBJRCAtIG5ldHdvcmsgbmFtZSB0byBqb2luCisJCQkJc3RyaW5nIHdpdGggbWF4aW11bSBsZW5ndGggb2YgMzIgY2hhcnMKKwkJCQlkZWZhdWx0IHZhbHVlID0gIkFESE9DX0VTU0lEIgorCitob3BfZHdlbGwJaW50ZWdlciAgICAgICAgIGhvcCBkd2VsbCB0aW1lIGluIEtpbG8tbWljcm9zZWNvbmRzIAorCQkJCWxlZ2FsIHZhbHVlcyA9IDE2LDMyLDY0LDEyOChkZWZhdWx0KSwyNTYKKworaXJxX21hc2sJaW50ZWdlciAgICAgICAgIGxpbnV4IHN0YW5kYXJkIDE2IGJpdCB2YWx1ZSAxYml0L0lSUQorCQkJCWxzYiBpcyBJUlEgMCwgYml0IDEgaXMgSVJRIDEgZXRjLgorCQkJCVVzZWQgdG8gcmVzdHJpY3QgY2hvaWNlIG9mIElSUSdzIHRvIHVzZS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVjb21tZW5kZWQgbWV0aG9kIGZvciBjb250cm9sbGluZworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnRlcnJ1cHRzIGlzIGluIC9ldGMvcGNtY2lhL2NvbmZpZy5vcHRzCisKK25ldF90eXBlCWludGVnZXIJCTAgKGRlZmF1bHQpID0gYWRob2MgbmV0d29yaywgCisJCQkJMSA9IGluZnJhc3RydWN0dXJlCisKK3BoeV9hZGRyCXN0cmluZyAgICAgICAgICBzdHJpbmcgY29udGFpbmluZyBuZXcgTUFDIGFkZHJlc3MgaW4KKwkJCQloZXgsIG11c3Qgc3RhcnQgd2l0aCB4IGVnCisJCQkJeDAwMDA4ZjEyMzQ1NgorCitwc20JCWludGVnZXIgICAgICAgICAwID0gY29udGludW91c2x5IGFjdGl2ZQorCQkJCTEgPSBwb3dlciBzYXZlIG1vZGUgKG5vdCB1c2VmdWwgeWV0KQorCitwY19kZWJ1ZwlpbnRlZ2VyCQkoMC01KSBsYXJnZXIgdmFsdWVzIGZvciBtb3JlIHZlcmJvc2UKKwkJCQlsb2dnaW5nLiAgUmVwbGFjZXMgcmF5X2RlYnVnLgorCityYXlfZGVidWcJaW50ZWdlcgkJUmVwbGFjZWQgd2l0aCBwY19kZWJ1ZworCityYXlfbWVtX3NwZWVkICAgaW50ZWdlciAgICAgICAgIGRlZmF1bHRzIHRvIDUwMAorCitzbmlmZmVyICAgICAgICAgaW50ZWdlciAgICAgICAgIDAgPSBub3Qgc25pZmZlciAoZGVmYXVsdCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSA9IHNuaWZmZXIgd2hpY2ggY2FuIGJlIHVzZWQgdG8gcmVjb3JkIGFsbAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0d29yayB0cmFmZmljIHVzaW5nIHRjcGR1bXAgb3Igc2ltaWxhciwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidXQgbm8gbm9ybWFsIG5ldHdvcmsgdXNlIGlzIGFsbG93ZWQuCisKK3RyYW5zbGF0ZQlpbnRlZ2VyCQkwID0gbm8gdHJhbnNsYXRpb24gKGVuY2Fwc3VsYXRlIGZyYW1lcykKKwkJCQkxID0gdHJhbnNsYXRpb24gICAgKFJGQzEwNDIvODAyLjEpCisKKworTW9yZSBvbiBzbmlmZmVyIG1vZGU6CisKK3RjcGR1bXAgZG9lcyBub3QgdW5kZXJzdGFuZCA4MDIuMTEgaGVhZGVycywgc28gaXQgY2FuJ3QKK2ludGVycHJldCB0aGUgY29udGVudHMsIGJ1dCBpdCBjYW4gcmVjb3JkIHRvIGEgZmlsZS4gIFRoaXMgaXMgb25seQordXNlZnVsIGZvciBkZWJ1Z2dpbmcgODAyLjExIGxvd2xldmVsIHByb3RvY29scyB0aGF0IGFyZSBub3QgdmlzaWJsZSB0bworbGludXguICBJZiB5b3Ugd2FudCB0byB3YXRjaCBmdHAgeGZlcnMsIG9yIGRvIHNpbWlsYXIgdGhpbmdzLCB5b3UKK2Rvbid0IG5lZWQgdG8gdXNlIHNuaWZmZXIgbW9kZS4gIEFsc28sIHNvbWUgcGFja2V0IHR5cGVzIGFyZSBuZXZlcgorc2VudCB1cCBieSB0aGUgY2FyZCwgc28geW91IHdpbGwgbmV2ZXIgc2VlIHRoZW0gKGFjaywgcnRzLCBjdHMsIHByb2JlCitldGMuKSAgVGhlcmUgaXMgYSBzaW1wbGUgcHJvZ3JhbSAoc2hvd2NhcCkgaW5jbHVkZWQgaW4gdGhlIHJheV9jcworcGFja2FnZSB3aGljaCBwYXJzZXMgdGhlIDgwMi4xMSBoZWFkZXJzLgorCitLbm93biBQcm9ibGVtcyBhbmQgbWlzc2luZyBmZWF0dXJlcworCisgICAgICAgIERvZXMgbm90IHdvcmsgd2l0aCBub24geDg2CisKKwlEb2VzIG5vdCB3b3JrIHdpdGggU01QCisKKwlTdXBwb3J0IGZvciBkZWZyYWdtZW50aW5nIGZyYW1lcyBpcyBub3QgeWV0IGRlYnVnZ2VkLCBhbmQgaW4KKwlmYWN0IGlzIGtub3duIHRvIG5vdCB3b3JrLiAgSSBoYXZlIG5ldmVyIGVuY291bnRlcmVkIGEgbmV0IHNldAorCXVwIHRvIGZyYWdtZW50LCBidXQgc3RpbGwsIGl0IHNob3VsZCBiZSBmaXhlZC4KKworCVRoZSBpb2N0bCBzdXBwb3J0IGlzIGluY29tcGxldGUuICBUaGUgaGFyZHdhcmUgYWRkcmVzcyBjYW5ub3QgYmUgc2V0CisJdXNpbmcgaWZjb25maWcgeWV0LiAgSWYgYSBkaWZmZXJlbnQgaGFyZHdhcmUgYWRkcmVzcyBpcyBuZWVkZWQsIGl0IG1heQorCWJlIHNldCB1c2luZyB0aGUgcGh5X2FkZHIgcGFyYW1ldGVyIGluIHJheV9jcy5vcHRzLiAgVGhpcyByZXF1aXJlcworCWEgY2FyZCBpbnNlcnRpb24gdG8gdGFrZSBlZmZlY3QuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvcm91dGluZy50eHQgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvcm91dGluZy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTI2ODM4YgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9yb3V0aW5nLnR4dApAQCAtMCwwICsxLDQ2IEBACitUaGUgZGlyZWN0b3J5IGZ0cC5pbnIuYWMucnU6L2lwLXJvdXRpbmcgY29udGFpbnM6CisKKy0gaXByb3V0ZS5jIC0gInByb2Zlc3Npb25hbCIgcm91dGluZyB0YWJsZSBtYWludGVuYW5jZSB1dGlsaXR5LgorCistIHJkaXNjLnRhci5neiAtIHJkaXNjIGRhZW1vbiwgcG9ydGVkIGZyb20gU3VuLgorCVNUUk9OR0xZIFJFQ09NTUVOREVEIEZPUiBBTEwgSE9TVFMuCisKKy0gcm91dGluZy50Z3ogLSBvcmlnaW5hbCBNaWtlIE1jTGFnYW4ncyByb3V0ZSBieSBzb3VyY2UgcGF0Y2guCisJCUN1cnJlbnRseSBpdCBpcyBvYnNvbGV0ZS4KKworLSBnYXRlZC5kaWYtc3M8TkVXRVNUPi5neiAtIGdhdGVkLVIzXzZBbHBoYV8yIGZpeGVzLgorCSAgICAgICAgTG9vayBhdCBSRUFETUUuZ2F0ZWQKKworLSBtcm91dGVkLTMuOC5kaWYuZ3ogLSBtcm91dGVkLTMuOCBmaXhlcy4KKworLSBydG1vbi5jIC0gdHJpdmlhbCBkZWJ1Z2dpbmcgdXRpbGl0eTogcmVhZHMgYW5kIHN0b3JlcyBuZXRsaW5rLgorCisKK05FV1MgZm9yIHVzZXIuCisKKy0gUG9saWN5IGJhc2VkIHJvdXRpbmcuIFJvdXRpbmcgZGVjaXNpb25zIGFyZSBtYWRlIG9uIHRoZSBiYXNpcworICBub3Qgb25seSBvZiBkZXN0aW5hdGlvbiBhZGRyZXNzLCBidXQgYWxzbyBzb3VyY2UgYWRkcmVzcywKKyAgVE9TIGFuZCBpbmNvbWluZyBpbnRlcmZhY2UuCistIENvbXBsZXRlIHNldCBvZiBJUCBsZXZlbCBjb250cm9sIG1lc3NhZ2VzLgorICBOb3cgTGludXggaXMgdGhlIG9ubHkgT1MgaW4gdGhlIHdvcmxkIGNvbXBseWluZyB0byBSRkMgcmVxdWlyZW1lbnRzLgorICBHcmVhdCB3aW4gOCkKKy0gTmV3IGludGVyZmFjZSBhZGRyZXNzaW5nIHBhcmFkaWdtLgorICBBc3NpZ25tZW50IG9mIGFkZHJlc3MgcmFuZ2VzIHRvIGludGVyZmFjZSwKKyAgbXVsdGlwbGUgcHJlZml4ZXMgZXRjLiBldGMuCisgIERvIG5vdCBib3RoZXIsIGl0IGlzIGNvbXBhdGlibGUgd2l0aCB0aGUgb2xkIG9uZS4gTW9yZW92ZXI6CistIFlvdSBkb24ndCBuZWVkIHRvIGRvICJyb3V0ZSBhZGQgYWFhLmJiYi5jY2MuLi4gZXRoMCIgYW55bW9yZSwKKyAgaXQgaXMgZG9uZSBhdXRvbWF0aWNhbGx5LgorLSAiQWJzdHJhY3QiIFVOSVggc29ja2V0cyBhbmQgc2VjdXJpdHkgZW5oYW5jZW1lbnRzLgorICBUaGlzIGlzIG5lY2Vzc2FyeSB0byB1c2UgVElSUEMgYW5kIFRMSSBlbXVsYXRpb24gbGlicmFyeS4KKworTkVXUyBmb3IgaGFja2VyLgorCistIE5ldyBkZXN0aW5hdGlvbiBjYWNoZS4gRmxleGlibGUsIHJvYnVzdCBhbmQganVzdCBiZWF1dGlmdWwuCistIE5ldHdvcmsgc3RhY2sgaXMgcmVvcmRlcmVkLCBzaW1wbGlmaWVkLCBvcHRpbWl6ZWQsIGEgbG90IG9mIGJ1Z3MgZml4ZWQuCisgICh3ZWxsLCBhbmQgbmV3IGJ1Z3Mgd2VyZSBpbnRyb2R1Y2VkLCBidXQgSSBoYXZlbid0IHNlZW4gdGhlbSB5ZXQgOCkpCisgIEl0IGlzIGRpZmZpY3VsdCB0byBkZXNjcmliZSBhbGwgdGhlIGNoYW5nZXMsIGxvb2sgaW50byBzb3VyY2UuCisKK0lmIHlvdSBzZWUgdGhpcyBmaWxlLCB0aGVuIHRoaXMgcGF0Y2ggd29ya3MgOCkKKworQWxleGV5IEt1em5ldHNvdi4KK2t1em5ldEBtczIuaW5yLmFjLnJ1CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvczJpby50eHQgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvczJpby50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjcyNmI1MgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9zMmlvLnR4dApAQCAtMCwwICsxLDQ4IEBACitTMklPIFRlY2hub2xvZ2llcyBYRnJhbWUgMTAgR2lnIGFkYXB0ZXIuCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0kuIE1vZHVsZSBsb2FkYWJsZSBwYXJhbWV0ZXJzLgorV2hlbiBsb2FkZWQgYXMgYSBtb2R1bGUsIHRoZSBkcml2ZXIgcHJvdmlkZXMgYSBob3N0IG9mIE1vZHVsZSBsb2FkYWJsZQorcGFyYW1ldGVycywgc28gdGhlIGRldmljZSBjYW4gYmUgdHVuZWQgYXMgcGVyIHRoZSB1c2VycyBuZWVkcy4KK0EgbGlzdCBvZiB0aGUgTW9kdWxlIHBhcmFtcyBpcyBnaXZlbiBiZWxvdy4KKyhpKQlyaW5nX251bTogVGhpcyBjYW4gYmUgdXNlZCB0byBwcm9ncmFtIHRoZSBudW1iZXIgb2YKKwkJIHJlY2VpdmUgcmluZ3MgdXNlZCBpbiB0aGUgZHJpdmVyLgorKGlpKQlyaW5nX2xlbjogVGhpcyBkZWZpbmVzIHRoZSBudW1iZXIgb2YgZGVzY3JpcHRvcnMgZWFjaCByaW5nCisJCSBjYW4gaGF2ZS4gVGhlcmUgY2FuIGJlIGEgbWF4aW11bSBvZiA4IHJpbmdzLgorKGlpaSkJZnJhbWVfbGVuOiBUaGlzIGlzIGFuIGFycmF5IG9mIHNpemUgOC4gVXNpbmcgdGhpcyB3ZSBjYW4gCisJCSBzZXQgdGhlIG1heGltdW0gc2l6ZSBvZiB0aGUgcmVjZWl2ZWQgZnJhbWUgdGhhdCBjYW4KKwkJIGJlIHN0ZWVyZWQgaW50byB0aGUgY29ycnNwb25kaW5nIHJlY2VpdmUgcmluZy4JCisoaXYpCWZpZm9fbnVtOiBUaGlzIGRlZmluZXMgdGhlIG51bWJlciBvZiBUeCBGSUZPcyB0aGF0cyB1c2VkIGluCisJCSB0aGUgZHJpdmVyLiAKKyh2KQlmaWZvX2xlbjogRWFjaCBlbGVtZW50IGRlZmluZXMgdGhlIG51bWJlciBvZiAKKyAJCSBUeCBkZXNjcmlwdG9ycyB0aGF0IGNhbiBiZSBhc3NvY2lhdGVkIHdpdGggZWFjaCAKKwkJIGNvcnJlc3BvbmRpbmcgRklGTy4gVGhlcmUgYXJlIGEgbWF4aW11bSBvZiA4IEZJRk9zLgorKHZpKQl0eF9wcmlvOiBUaGlzIGlzIGEgYm9vbCwgaWYgbW9kdWxlIGlzIGxvYWRlZCB3aXRoIGEgbm9uLXplcm8KKwkJdmFsdWUgZm9yIHR4X3ByaW8gbXVsdGkgRklGTyBzY2hlbWUgaXMgYWN0aXZhdGVkLgorKHZpaSkJcnhfcHJpbzogVGhpcyBpcyBhIGJvb2wsIGlmIG1vZHVsZSBpcyBsb2FkZWQgd2l0aCBhIG5vbi16ZXJvCisJCXZhbHVlIGZvciB0eF9wcmlvIG11bHRpIFJJTkcgc2NoZW1lIGlzIGFjdGl2YXRlZC4KKyh2aWlpKQlsYXRlbmN5X3RpbWVyOiBUaGUgdmFsdWUgZ2l2ZW4gYWdhaW5zdCB0aGlzIHBhcmFtIHdpbGwgYmUKKwkJIGxvYWRlZAlpbnRvIHRoZSBsYXRlbmN5IHRpbWVyIHJlZ2lzdGVyIGluIFBDSSBDb25maWcKKwkJIHNwYWNlLCBlbHNlIHRoZSByZWdpc3RlciBpcyBsZWZ0IHdpdGggaXRzIHJlc2V0IHZhbHVlLgorCitJSS4gUGVyZm9ybWFuY2UgdHVuaW5nLgorIEJ5IGNoYW5naW5nIGEgZmV3IHN5c2N0bCBwYXJhbWV0ZXJzLgorCUNvcHkgdGhlIGZvbGxvd2luZyBsaW5lcyBpbnRvIGEgZmlsZSBhbmQgcnVuIHRoZSBmb2xsb3dpbmcgY29tbWFuZCwKKwkic3lzY3RsIC1wIDxmaWxlX25hbWU+IgorIyMjIElQVjQgc3BlY2lmaWMgc2V0dGluZ3MKK25ldC5pcHY0LnRjcF90aW1lc3RhbXBzID0gMCAjIHR1cm5zIFRDUCB0aW1lc3RhbXAgc3VwcG9ydCBvZmYsIGRlZmF1bHQgMSwgcmVkdWNlcyBDUFUgdXNlCituZXQuaXB2NC50Y3Bfc2FjayA9IDAgIyB0dXJuIFNBQ0sgc3VwcG9ydCBvZmYsIGRlZmF1bHQgb24KKyMgb24gc3lzdGVtcyB3aXRoIGEgVkVSWSBmYXN0IGJ1cyAtPiBtZW1vcnkgaW50ZXJmYWNlIHRoaXMgaXMgdGhlIGJpZyBnYWluZXIKK25ldC5pcHY0LnRjcF9ybWVtID0gMTAwMDAwMDAgMTAwMDAwMDAgMTAwMDAwMDAgIyBzZXRzIG1pbi9kZWZhdWx0L21heCBUQ1AgcmVhZCBidWZmZXIsIGRlZmF1bHQgNDA5NiA4NzM4MCAxNzQ3NjAKK25ldC5pcHY0LnRjcF93bWVtID0gMTAwMDAwMDAgMTAwMDAwMDAgMTAwMDAwMDAgIyBzZXRzIG1pbi9wcmVzc3VyZS9tYXggVENQIHdyaXRlIGJ1ZmZlciwgZGVmYXVsdCA0MDk2IDE2Mzg0IDEzMTA3MgorbmV0LmlwdjQudGNwX21lbSA9IDEwMDAwMDAwIDEwMDAwMDAwIDEwMDAwMDAwICMgc2V0cyBtaW4vcHJlc3N1cmUvbWF4IFRDUCBidWZmZXIgc3BhY2UsIGRlZmF1bHQgMzE3NDQgMzIyNTYgMzI3NjgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisjIyMgQ09SRSBzZXR0aW5ncyAobW9zdGx5IGZvciBzb2NrZXQgYW5kIFVEUCBlZmZlY3QpCituZXQuY29yZS5ybWVtX21heCA9IDUyNDI4NyAjIG1heGltdW0gcmVjZWl2ZSBzb2NrZXQgYnVmZmVyIHNpemUsIGRlZmF1bHQgMTMxMDcxCituZXQuY29yZS53bWVtX21heCA9IDUyNDI4NyAjIG1heGltdW0gc2VuZCBzb2NrZXQgYnVmZmVyIHNpemUsIGRlZmF1bHQgMTMxMDcxCituZXQuY29yZS5ybWVtX2RlZmF1bHQgPSA1MjQyODcgIyBkZWZhdWx0IHJlY2VpdmUgc29ja2V0IGJ1ZmZlciBzaXplLCBkZWZhdWx0IDY1NTM1CituZXQuY29yZS53bWVtX2RlZmF1bHQgPSA1MjQyODcgIyBkZWZhdWx0IHNlbmQgc29ja2V0IGJ1ZmZlciBzaXplLCBkZWZhdWx0IDY1NTM1CituZXQuY29yZS5vcHRtZW1fbWF4ID0gNTI0Mjg3ICMgbWF4aW11bSBhbW91bnQgb2Ygb3B0aW9uIG1lbW9yeSBidWZmZXJzLCBkZWZhdWx0IDEwMjQwCituZXQuY29yZS5uZXRkZXZfbWF4X2JhY2tsb2cgPSAzMDAwMDAgIyBudW1iZXIgb2YgdW5wcm9jZXNzZWQgaW5wdXQgcGFja2V0cyBiZWZvcmUga2VybmVsIHN0YXJ0cyBkcm9wcGluZyB0aGVtLCBkZWZhdWx0IDMwMAorLS0tRW5kIG9mIHBlcmZvcm1hbmNlIHR1bmluZyBmaWxlLS0tCisKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9zY3RwLnR4dCBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9zY3RwLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYzc5MGE3Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3NjdHAudHh0CkBAIC0wLDAgKzEsMzggQEAKK0xpbnV4IEtlcm5lbCBTQ1RQIAorCitUaGlzIGlzIHRoZSBjdXJyZW50IEJFVEEgcmVsZWFzZSBvZiB0aGUgTGludXggS2VybmVsIFNDVFAgcmVmZXJlbmNlCitpbXBsZW1lbnRhdGlvbi4gIAorCitTQ1RQIChTdHJlYW0gQ29udHJvbCBUcmFuc21pc3Npb24gUHJvdG9jb2wpIGlzIGEgSVAgYmFzZWQsIG1lc3NhZ2Ugb3JpZW50ZWQsCityZWxpYWJsZSB0cmFuc3BvcnQgcHJvdG9jb2wsIHdpdGggY29uZ2VzdGlvbiBjb250cm9sLCBzdXBwb3J0IGZvcgordHJhbnNwYXJlbnQgbXVsdGktaG9taW5nLCBhbmQgbXVsdGlwbGUgb3JkZXJlZCBzdHJlYW1zIG9mIG1lc3NhZ2VzLgorUkZDMjk2MCBkZWZpbmVzIHRoZSBjb3JlIHByb3RvY29sLiAgVGhlIElFVEYgU0lHVFJBTiB3b3JraW5nIGdyb3VwIG9yaWdpbmFsbHkKK2RldmVsb3BlZCB0aGUgU0NUUCBwcm90b2NvbCBhbmQgbGF0ZXIgaGFuZGVkIHRoZSBwcm90b2NvbCBvdmVyIHRvIHRoZSAKK1RyYW5zcG9ydCBBcmVhIChUU1ZXRykgd29ya2luZyBncm91cCBmb3IgdGhlIGNvbnRpbnVlZCBldm9sdmVtZW50IG9mIFNDVFAgYXMgYSAKK2dlbmVyYWwgcHVycG9zZSB0cmFuc3BvcnQuICAKKworU2VlIHRoZSBJRVRGIHdlYnNpdGUgKGh0dHA6Ly93d3cuaWV0Zi5vcmcpIGZvciBmdXJ0aGVyIGRvY3VtZW50cyBvbiBTQ1RQLiAKK1NlZSBodHRwOi8vd3d3LmlldGYub3JnL3JmYy9yZmMyOTYwLnR4dCAKKworVGhlIGluaXRpYWwgcHJvamVjdCBnb2FsIGlzIHRvIGNyZWF0ZSBhbiBMaW51eCBrZXJuZWwgcmVmZXJlbmNlIGltcGxlbWVudGF0aW9uCitvZiBTQ1RQIHRoYXQgaXMgUkZDIDI5NjAgY29tcGxpYW50IGFuZCBwcm92aWRlcyBhbiBwcm9ncmFtbWluZyBpbnRlcmZhY2UgCityZWZlcnJlZCB0byBhcyB0aGUgIFVEUC1zdHlsZSBBUEkgb2YgdGhlIFNvY2tldHMgRXh0ZW5zaW9ucyBmb3IgU0NUUCwgYXMgCitwcm9wb3NlZCBpbiBJRVRGIEludGVybmV0LURyYWZ0cy4gICAgCisKKworQ2F2ZWF0czogIAorCistbGtzY3RwIGNhbiBiZSBidWlsdCBhcyBzdGF0aWNhbGx5IG9yIGFzIGEgbW9kdWxlLiAgSG93ZXZlciwgYmUgYXdhcmUgdGhhdCAKK21vZHVsZSByZW1vdmFsIG9mIGxrc2N0cCBpcyBub3QgeWV0IGEgc2FmZSBhY3Rpdml0eS4gICAKKworLVRoZXJlIGlzIHRlbnRhdGl2ZSBzdXBwb3J0IGZvciBJUHY2LCBidXQgbW9zdCB3b3JrIGhhcyBnb25lIHRvd2FyZHMgCitpbXBsZW1lbnRhdGlvbiBhbmQgdGVzdGluZyBsa3NjdHAgb24gSVB2NC4gICAKKworCitGb3IgbW9yZSBpbmZvcm1hdGlvbiwgcGxlYXNlIHZpc2l0IHRoZSBsa3NjdHAgcHJvamVjdCB3ZWJzaXRlOgorICAgaHR0cDovL3d3dy5zZi5uZXQvcHJvamVjdHMvbGtzY3RwCisKK09yIGNvbnRhY3QgdGhlIGxrc2N0cCBkZXZlbG9wZXJzIHRocm91Z2ggdGhlIG1haWxpbmcgbGlzdDoKKyAgIDxsa3NjdHAtZGV2ZWxvcGVyc0BsaXN0cy5zb3VyY2Vmb3JnZS5uZXQ+IAorCisKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9zaGFwZXIudHh0IGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3NoYXBlci50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmM0ZWJiNgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9zaGFwZXIudHh0CkBAIC0wLDAgKzEsNDggQEAKK1RyYWZmaWMgU2hhcGVyIEZvciBMaW51eAorCitUaGlzIGlzIHRoZSBjdXJyZW50IEJFVEEgcmVsZWFzZSBvZiB0aGUgdHJhZmZpYyBzaGFwZXIgZm9yIExpbnV4LiBJdCB3b3Jrcword2l0aGluIHRoZSBmb2xsb3dpbmcgbGltaXRzOgorCitvCU1pbmltdW0gc2hhcGluZyBzcGVlZCBpcyBjdXJyZW50bHkgYWJvdXQgOTYwMCBiYXVkIChpdCBjYW4gb25seQorc2hhcGUgZG93biB0byAxIGJ5dGUgcGVyIGNsb2NrIHRpY2spCisKK28JTWF4aW11bSBpcyBhYm91dCAyNTZLLCBpdCB3aWxsIGdvIGFib3ZlIHRoaXMgYnV0IGdldCBhIGJpdCBibG9ja3kuCisKK28JSWYgeW91IGlmY29uZmlnIHRoZSBtYXN0ZXIgZGV2aWNlIHRoYXQgYSBzaGFwZXIgaXMgYXR0YWNoZWQgdG8gZG93bgordGhlbiB5b3VyIG1hY2hpbmUgd2lsbCBmb2xsb3cuCisKK28JVGhlIHNoYXBlciBtdXN0IGJlIGEgbW9kdWxlLgorCisKK1NldHVwOgorCisJQSBzaGFwZXIgZGV2aWNlIGlzIGNvbmZpZ3VyZWQgdXNpbmcgdGhlIHNoYXBlY29uZmlnIHByb2dyYW0uCitUeXBpY2FsbHkgeW91IHdpbGwgZG8gc29tZXRoaW5nIGxpa2UgdGhpcworCitzaGFwZWNmZyBhdHRhY2ggc2hhcGVyMCBldGgxCitzaGFwZWNmZyBzcGVlZCBzaGFwZXIwIDY0MDAwCitpZmNvbmZpZyBzaGFwZXIwIG15aG9zdCBuZXRtYXNrIDI1NS4yNTUuMjU1LjI0MCBicm9hZGNhc3QgMS4yLjMuNC4yNTUgdXAKK3JvdXRlIGFkZCAtbmV0IHNvbWUubmV0d29yayBuZXRtYXNrIGEuYi5jLmQgZGV2IHNoYXBlcjAKKworVGhlIHNoYXBlciBzaG91bGQgaGF2ZSB0aGUgc2FtZSBJUCBhZGRyZXNzIGFzIHRoZSBkZXZpY2UgaXQgaXMgYXR0YWNoZWQgdG8KK2ZvciBub3JtYWwgdXNlLgorCitHb3RjaGFzOgorCisJVGhlIHNoYXBlciBzaGFwZXMgdHJhbnNtaXR0ZWQgdHJhZmZpYy4gSXQncyByYXRoZXIgaW1wb3NzaWJsZSB0bworc2hhcGUgcmVjZWl2ZWQgdHJhZmZpYyBleGNlcHQgYXQgdGhlIGVuZCAob3IgYSByb3V0ZXIpIHRyYW5zbWl0dGluZyBpdC4KKworCUdhdGVkL3JvdXRlZC9yd2hvZC9tcm91dGVkIGFsbCBzZWUgdGhlIHNoYXBlciBhcyBhbiBhZGRpdGlvbmFsIGRldmljZQorYW5kIHdpbGwgdHJlYXQgaXQgYXMgc3VjaCB1bmxlc3MgcGF0Y2hlZC4gTm90ZSB0aGF0IGZvciBtcm91dGVkIHlvdSBjYW4gcnVuCittcm91dGVkIHR1bm5lbHMgdmlhIGEgdHJhZmZpYyBzaGFwZXIgdG8gY29udHJvbCBiYW5kd2lkdGggdXNhZ2UuCisKKwlUaGUgc2hhcGVyIGlzIGRldmljZS9yb3V0ZSBiYXNlZC4gVGhpcyBtYWtlcyBpdCB2ZXJ5IGVhc3kgdG8gdXNlCit3aXRoIGFueSBzZXR1cCBCVVQgbGVzcyBmbGV4aWJsZS4gWW91IG1heSBuZWVkIHRvIHVzZSBpcHJvdXRlMiB0byBzZXQgdXAKK211bHRpcGxlIHJvdXRlIHRhYmxlcyB0byBnZXQgdGhlIGZsZXhpYmlsaXR5LgorCisJVGhlcmUgaXMgbm8gImJvcnJvd2luZyIgb3IgInNoYXJpbmciIHNjaGVtZS4gVGhpcyBpcyBhIHNpbXBsZQordHJhZmZpYyBsaW1pdGVyLiBXZSBpbXBsZW1lbnQgVmFuIEphY29ic29uIGFuZCBTYWxseSBGbG95ZCdzIENCUQorYXJjaGl0ZWN0dXJlIGludG8gTGludXggMi4yLiBUaGlzIGlzIHRoZSBwcmVmZXJyZWQgc29sdXRpb24uIFNoYXBlciBpcworZm9yIHNpbXBsZSBvciBiYWNrIGNvbXBhdGlibGUgc2V0dXBzLgorCitBbGFuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvc2lzOTAwLnR4dCBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9zaXM5MDAudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJkZGZmZDcKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvc2lzOTAwLnR4dApAQCAtMCwwICsxLDI1NyBAQAorCitTaVMgOTAwLzcwMTYgRmFzdCBFdGhlcm5ldCBEZXZpY2UgRHJpdmVyCisKK09sbGllIExobworCitMZWkgQ2h1biBDaGFuZworCisgICBDb3B5cmlnaHQgqSAxOTk5IGJ5IFNpbGljb24gSW50ZWdyYXRlZCBTeXN0ZW0gQ29ycC4KKyAgIAorICAgVGhpcyBkb2N1bWVudCBnaXZlcyBzb21lIGluZm9ybWF0aW9uIG9uIGluc3RhbGxhdGlvbiBhbmQgdXNhZ2Ugb2YgU2lTCisgICA5MDAvNzAxNiBkZXZpY2UgZHJpdmVyIHVuZGVyIExpbnV4LgorICAgCisgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdAorICAgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICAgCisgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VCisgICBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgICAKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNworICAgVVNBCisgICAgIF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCisgICAKKyAgIFRhYmxlIG9mIENvbnRlbnRzCisgICAxLiBJbnRyb2R1Y3Rpb24KKyAgIDIuIENoYW5nZXMKKyAgIDMuIFRlc3RlZCBFbnZpcm9ubWVudAorICAgNC4gRmlsZXMgaW4gVGhpcyBQYWNrYWdlCisgICA1LiBJbnN0YWxsYXRpb24KKyAgICAgICAgICAKKyAgICAgICAgQnVpbGRpbmcgdGhlIGRyaXZlciBhcyBsb2FkYWJsZSBtb2R1bGUKKyAgICAgICAgQnVpbGRpbmcgdGhlIGRyaXZlciBpbnRvIGtlcm5lbAorICAgICAgICAgICAgICAgIAorICAgNi4gS25vd24gUHJvYmxlbXMgYW5kIEJ1Z3MKKyAgIDcuIFJldmlzaW9uIEhpc3RvcnkKKyAgIDguIEFja25vd2xlZGdlbWVudHMKKyAgICAgX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KKyAgIAorQ2hhcHRlciAxLiBJbnRyb2R1Y3Rpb24KKworICAgVGhpcyBkb2N1bWVudCBkZXNjcmliZXMgdGhlIHJldmlzaW9uIDEuMDYgYW5kIDEuMDcgb2YgU2lTIDkwMC83MDE2CisgICBGYXN0IEV0aGVybmV0IGRldmljZSBkcml2ZXIgdW5kZXIgTGludXguIFRoZSBkcml2ZXIgaXMgZGV2ZWxvcGVkIGJ5CisgICBTaWxpY29uIEludGVncmF0ZWQgU3lzdGVtIENvcnAuIGFuZCBkaXN0cmlidXRlZCBmcmVlbHkgdW5kZXIgdGhlIEdOVQorICAgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKS4gVGhlIGRyaXZlciBjYW4gYmUgY29tcGlsZWQgYXMgYSBsb2FkYWJsZQorICAgbW9kdWxlIGFuZCB1c2VkIHVuZGVyIExpbnV4IGtlcm5lbCB2ZXJzaW9uIDIuMi54LiAocmV2LiAxLjA2KSBXaXRoCisgICBtaW5pbWFsIGNoYW5nZXMsIHRoZSBkcml2ZXIgY2FuIGFsc28gYmUgdXNlZCB1bmRlciAyLjMueCBhbmQgMi40LngKKyAgIGtlcm5lbCAocmV2LiAxLjA3KSwgcGxlYXNlIHNlZSBDaGFwdGVyIDUuIElmIHlvdSBhcmUgaW50ZW5kZWQgdG8gdXNlCisgICB0aGUgZHJpdmVyIGZvciBlYXJsaWVyIGtlcm5lbHMsIHlvdSBhcmUgb24geW91ciBvd24uCisgICAKKyAgIFRoZSBkcml2ZXIgaXMgdGVzdGVkIHdpdGggdXN1YWwgVENQL0lQIGFwcGxpY2F0aW9ucyBpbmNsdWRpbmcgRlRQLAorICAgVGVsbmV0LCBOZXRzY2FwZSBldGMuIGFuZCBpcyB1c2VkIGNvbnN0YW50bHkgYnkgdGhlIGRldmVsb3BlcnMuCisgICAKKyAgIFBsZWFzZSBzZW5kIGFsbCBjb21tZW50cy9maXhlcy9xdWVzdGlvbnMgdG8gTGVpLUNodW4gQ2hhbmcuCisgICAgIF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCisgICAKK0NoYXB0ZXIgMi4gQ2hhbmdlcworCisgICBDaGFuZ2VzIG1hZGUgaW4gUmV2aXNpb24gMS4wNworICAgCisgICAgMS4gU2VwYXJhdGlvbiBvZiBzaXM5MDAuYyBhbmQgc2lzOTAwLmggaW4gb3JkZXIgdG8gbW92ZSBtb3N0IGNvbnN0YW50CisgICAgICAgZGVmaW5pdGlvbiB0byBzaXM5MDAuaCAobWFueSBvZiB0aG9zZSBjb25zdGFudHMgd2VyZSBjb3JyZWN0ZWQpCisgICAgMi4gQ2xlYW4gdXAgUENJIGRldGVjdGlvbiwgdGhlIHBjaS1zY2FuIGZyb20gRG9uYWxkIEJlY2tlciB3ZXJlIG5vdAorICAgICAgIHVzZWQsIGp1c3Qgc2ltcGxlIHBjaV9maW5kXyouCisgICAgMy4gTUlJIGRldGVjdGlvbiBpcyBtb2RpZmllZCB0byBzdXBwb3J0IG11bHRpcGxlIG1paSB0cmFuc2NlaXZlci4KKyAgICA0LiBCdWdzIGluIHJlYWRfZWVwcm9tLCBtZGlvXyogd2VyZSByZW1vdmVkLgorICAgIDUuIExvdCBvZiBzaXM5MDAgaXJyZWxldmFudCBjb21tZW50cyB3ZXJlIHJlbW92ZWQvY2hhbmdlZCBhbmQgbW9yZQorICAgICAgIGNvbW1lbnRzIHdlcmUgYWRkZWQgdG8gcmVmbGVjdCB0aGUgcmVhbCBzaXR1YXRpb24uCisgICAgNi4gQ2xlYW4gdXAgb2YgcGh5c2ljYWwvdmlydHVhbCBhZGRyZXNzIHNwYWNlIG1lc3MgaW4gYnVmZmVyCisgICAgICAgZGVzY3JpcHRvcnMuCisgICAgNy4gQmV0dGVyIHRyYW5zbWl0L3JlY2VpdmUgZXJyb3IgaGFuZGxpbmcuCisgICAgOC4gVGhlIGRyaXZlciBub3cgdXNlcyB6ZXJvLWNvcHkgc2luZ2xlIGJ1ZmZlciBtYW5hZ2VtZW50IHNjaGVtZSB0bworICAgICAgIGltcHJvdmUgcGVyZm9ybWFuY2UuCisgICAgOS4gTmFtZXMgb2YgdmFyaWFibGVzIHdlcmUgY2hhbmdlZCB0byBiZSBtb3JlIGNvbnNpc3RlbnQuCisgICAxMC4gQ2xlYW4gdXAgb2YgYXVvLW5lZ290aWF0aW9uIGFuZCB0aW1lciBjb2RlLgorICAgMTEuIEF1dG9tYXRpYyBkZXRlY3Rpb24gYW5kIGNoYW5nZSBvZiBQSFkgb24gdGhlIGZseS4KKyAgIDEyLiBCdWcgaW4gbWFjIHByb2JpbmcgZml4ZWQuCisgICAxMy4gRml4IDYzMEUgZXF1YWxpZXIgcHJvYmxlbSBieSBtb2RpZnlpbmcgdGhlIGVxdWFsaXplciB3b3JrYXJvdW5kCisgICAgICAgcnVsZS4KKyAgIDE0LiBTdXBwb3J0IGZvciBJQ1MxODkzIDEwLzEwMCBJbnRlcmF0ZWQgUEhZY2VpdmVyLgorICAgMTUuIFN1cHBvcnQgZm9yIG1lZGlhIHNlbGVjdCBieSBpZmNvbmZpZy4KKyAgIDE2LiBBZGRlZCBrZXJuZWwtZG9jIGV4dHJhdGFibGUgZG9jdW1lbnRhdGlvbi4KKyAgICAgX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KKyAgIAorQ2hhcHRlciAzLiBUZXN0ZWQgRW52aXJvbm1lbnQKKworICAgVGhpcyBkcml2ZXIgaXMgZGV2ZWxvcGVkIG9uIHRoZSBmb2xsb3dpbmcgaGFyZHdhcmUKKyAgIAorICAgICAqIEludGVsIENlbGVyb24gNTAwIHdpdGggU2lTIDYzMCAocmV2IDAyKSBjaGlwc2V0CisgICAgICogU2lTIDkwMCAocmV2IDAxKSBhbmQgU2lTIDcwMTYvNzAxNCBGYXN0IEV0aGVybmV0IENhcmQKKyAgICAgICAKKyAgIGFuZCB0ZXN0ZWQgd2l0aCB0aGVzZSBzb2Z0d2FyZSBlbnZpcm9ubWVudHMKKyAgIAorICAgICAqIFJlZCBIYXQgTGludXggdmVyc2lvbiA2LjIKKyAgICAgKiBMaW51eCBrZXJuZWwgdmVyc2lvbiAyLjQuMAorICAgICAqIE5ldHNjYXBlIHZlcnNpb24gNC42CisgICAgICogTmNGVFAgMy4wLjAgYmV0YSAxOAorICAgICAqIFNhbWJhIHZlcnNpb24gMi4wLjMKKyAgICAgX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KKyAgIAorQ2hhcHRlciA0LiBGaWxlcyBpbiBUaGlzIFBhY2thZ2UKKworICAgSW4gdGhlIHBhY2thZ2UgeW91IGNhbiBmaW5kIHRoZXNlIGZpbGVzOgorICAgCisgICBzaXM5MDAuYworICAgICAgICAgIERyaXZlciBzb3VyY2UgZmlsZSBpbiBDCisgICAgICAgICAgCisgICBzaXM5MDAuaAorICAgICAgICAgIEhlYWRlciBmaWxlIGZvciBzaXM5MDAuYworICAgICAgICAgIAorICAgc2lzOTAwLnNnbWwKKyAgICAgICAgICBEb2NCb29rIFNHTUwgc291cmNlIG9mIHRoZSBkb2N1bWVudAorICAgICAgICAgIAorICAgc2lzOTAwLnR4dAorICAgICAgICAgIERyaXZlciBkb2N1bWVudCBpbiBwbGFpbiB0ZXh0CisgICAgIF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCisgICAKK0NoYXB0ZXIgNS4gSW5zdGFsbGF0aW9uCisKKyAgIFNpbGljb24gSW50ZWdyYXRlZCBTeXN0ZW0gQ29ycC4gaXMgY29vcGVyYXRpbmcgY2xvc2VseSB3aXRoIGNvcmUgTGludXgKKyAgIEtlcm5lbCBkZXZlbG9wZXJzLiBUaGUgcmV2aXNpb25zIG9mIFNpUyA5MDAgZHJpdmVyIGFyZSBkaXN0cmlidXRlZCBieQorICAgdGhlIHVzdWFsbCBjaGFubmVscyBmb3Iga2VybmVsIHRhciBmaWxlcyBhbmQgcGF0Y2hlcy4gVGhvc2Uga2VybmVsIHRhcgorICAgZmlsZXMgZm9yIG9mZmljaWFsIGtlcm5lbCBhbmQgcGF0Y2hlcyBmb3Iga2VybmVsIHByZS1yZWxlYXNlIGNhbiBiZQorICAgZG93bmxvYWQgYXQgb2ZmaWNpYWwga2VybmVsIGZ0cCBzaXRlIGFuZCBpdHMgbWlycm9ycy4gVGhlIDEuMDYKKyAgIHJldmlzaW9uIGNhbiBiZSBmb3VuZCBpbiBrZXJuZWwgdmVyc2lvbiBsYXRlciB0aGFuIDIuMy4xNSBhbmQKKyAgIHByZS0yLjIuMTQsIGFuZCAxLjA3IHJldmlzaW9uIGNhbiBiZSBmb3VuZCBpbiBrZXJuZWwgdmVyc2lvbiAyLjQuMC4gSWYKKyAgIHlvdSBoYXZlIG5vIHByaW9yIGV4cGVyaWVuY2UgaW4gbmV0d29ya2luZyB1bmRlciBMaW51eCwgcGxlYXNlIHJlYWQKKyAgIEV0aGVybmV0IEhPV1RPIGFuZCBOZXR3b3JraW5nIEhPV1RPIGF2YWlsYWJsZSBmcm9tIExpbnV4IERvY3VtZW50YXRpb24KKyAgIFByb2plY3QgKExEUCkuCisgICAKKyAgIFRoZSBkcml2ZXIgaXMgYnVuZGxlZCBpbiByZWxlYXNlIGxhdGVyIHRoYW4gMi4yLjExIGFuZCAyLjMuMTUgc28gdGhpcworICAgaXMgdGhlIG1vc3QgZWFzeSBjYXNlLiBCZSBzdXJlIHlvdSBoYXZlIHRoZSBhcHByb3ByaWF0ZSBwYWNrYWdlcyBmb3IKKyAgIGNvbXBpbGluZyBrZXJuZWwgc291cmNlLiBUaG9zZSBwYWNrYWdlcyBhcmUgbGlzdGVkIGluIERvY3VtZW50L0NoYW5nZXMKKyAgIGluIGtlcm5lbCBzb3VyY2UgZGlzdHJpYnV0aW9uLiBJZiB5b3UgaGF2ZSB0byBpbnN0YWxsIHRoZSBkcml2ZXIgb3RoZXIKKyAgIHRoYW4gdGhvc2UgYnVuZGxlZCBpbiBrZXJuZWwgcmVsZWFzZSwgeW91IHNob3VsZCBoYXZlIHlvdXIgZHJpdmVyIGZpbGUKKyAgIHNpczkwMC5jIGFuZCBzaXM5MDAuaCBjb3BpZWQgaW50byAvdXNyL3NyYy9saW51eC9kcml2ZXJzL25ldC8gZmlyc3QuCisgICBUaGVyZSBhcmUgdHdvIGFsdGVybmF0aXZlIHdheXMgdG8gaW5zdGFsbCB0aGUgZHJpdmVyCisgICAgIF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCisgICAKK0J1aWxkaW5nIHRoZSBkcml2ZXIgYXMgbG9hZGFibGUgbW9kdWxlCisKKyAgIFRvIGJ1aWxkIHRoZSBkcml2ZXIgYXMgYSBsb2FkYWJsZSBrZXJuZWwgbW9kdWxlIHlvdSBoYXZlIHRvCisgICByZWNvbmZpZ3VyZSB0aGUga2VybmVsIHRvIGFjdGl2YXRlIG5ldHdvcmsgc3VwcG9ydCBieQorICAgCittYWtlIG1lbnVjb25maWcKKworICAgQ2hvb3NlICJMb2FkYWJsZSBtb2R1bGUgc3VwcG9ydCAtLS0+IiwgdGhlbiBzZWxlY3QgIkVuYWJsZSBsb2FkYWJsZQorICAgbW9kdWxlIHN1cHBvcnQiLgorICAgCisgICBDaG9vc2UgIk5ldHdvcmsgRGV2aWNlIFN1cHBvcnQgLS0tPiIsIHNlbGVjdCAiRXRoZXJuZXQgKDEwIG9yCisgICAxMDBNYml0KSIuIFRoZW4gc2VsZWN0ICJFSVNBLCBWTEIsIFBDSSBhbmQgb24gYm9hcmQgY29udHJvbGxlcnMiLCBhbmQKKyAgIGNob29zZSAiU2lTIDkwMC83MDE2IFBDSSBGYXN0IEV0aGVybmV0IEFkYXB0ZXIgc3VwcG9ydCIgdG8gIk0iLgorICAgCisgICBBZnRlciByZWNvbmZpZ3VyaW5nIHRoZSBrZXJuZWwsIHlvdSBjYW4gbWFrZSB0aGUgZHJpdmVyIG1vZHVsZSBieQorICAgCittYWtlIG1vZHVsZXMKKworICAgVGhlIGRyaXZlciBzaG91bGQgYmUgY29tcGlsZWQgd2l0aCBubyBlcnJvcnMuIEFmdGVyIGNvbXBpbGluZyB0aGUKKyAgIGRyaXZlciwgdGhlIGRyaXZlciBjYW4gYmUgaW5zdGFsbGVkIHRvIHByb3BlciBwbGFjZSBieQorICAgCittYWtlIG1vZHVsZXNfaW5zdGFsbAorCisgICBMb2FkIHRoZSBkcml2ZXIgaW50byBrZXJuZWwgYnkKKyAgIAoraW5zbW9kIHNpczkwMAorCisgICBXaGVuIGxvYWRpbmcgdGhlIGRyaXZlciBpbnRvIG1lbW9yeSwgc29tZSBpbmZvcm1hdGlvbiBtZXNzYWdlIGNhbiBiZQorICAgdmlldyBieQorICAgCitkbWVzZworCisgICBvcgorY2F0IC92YXIvbG9nL21lc3NhZ2UKKworICAgSWYgdGhlIGRyaXZlciBpcyBsb2FkZWQgcHJvcGVybHkgeW91IHdpbGwgaGF2ZSBtZXNzYWdlcyBzaW1pbGFyIHRvCisgICB0aGlzOgorICAgCitzaXM5MDAuYzogdjEuMDcuMDYgIDExLzA3LzIwMDAKK2V0aDA6IFNpUyA5MDAgUENJIEZhc3QgRXRoZXJuZXQgYXQgMHhkMDAwLCBJUlEgMTAsIDAwOjAwOmU4OjgzOjdmOmE0LgorZXRoMDogU2lTIDkwMCBJbnRlcm5hbCBNSUkgUEhZIHRyYW5zY2VpdmVyIGZvdW5kIGF0IGFkZHJlc3MgMS4KK2V0aDA6IFVzaW5nIFNpUyA5MDAgSW50ZXJuYWwgTUlJIFBIWSBhcyBkZWZhdWx0CisKKyAgIHNob3dpbmcgdGhlIHZlcnNpb24gb2YgdGhlIGRyaXZlciBhbmQgdGhlIHJlc3VsdHMgb2YgcHJvYmluZyByb3V0aW5lLgorICAgCisgICBPbmNlIHRoZSBkcml2ZXIgaXMgbG9hZGVkLCBuZXR3b3JrIGNhbiBiZSBicm91Z2h0IHVwIGJ5CisgICAKKy9zYmluL2lmY29uZmlnIGV0aDAgSVBBRERSIGJyb2FkY2FzdCBCUk9BRENBU1QgbmV0bWFzayBORVRNQVNLIG1lZGlhIFRZUEUKKworICAgd2hlcmUgSVBBRERSLCBCUk9BRENBU1QsIE5FVE1BU0sgYXJlIHlvdXIgSVAgYWRkcmVzcywgYnJvYWRjYXN0CisgICBhZGRyZXNzIGFuZCBuZXRtYXNrIHJlc3BlY3RpdmVseS4gVFlQRSBpcyB1c2VkIHRvIHNldCBtZWRpdW0gdHlwZSB1c2VkCisgICBieSB0aGUgZGV2aWNlLiBUeXBpY2FsIHZhbHVlcyBhcmUgIjEwYmFzZVQiKHR3aXN0ZWQtcGFpciAxME1icHMKKyAgIEV0aGVybmV0KSBvciAiMTAwYmFzZVQiICh0d2lzdGVkLXBhaXIgMTAwTWJwcyBFdGhlcm5ldCkuIEZvciBtb3JlCisgICBpbmZvcm1hdGlvbiBvbiBob3cgdG8gY29uZmlndXJlIG5ldHdvcmsgaW50ZXJmYWNlLCBwbGVhc2UgcmVmZXIgdG8KKyAgIE5ldHdvcmtpbmcgSE9XVE8uCisgICAKKyAgIFRoZSBsaW5rIHN0YXR1cyBpcyBhbHNvIHNob3duIGJ5IGtlcm5lbCBtZXNzYWdlcy4gRm9yIGV4YW1wbGUsIGFmdGVyCisgICB0aGUgbmV0d29yayBpbnRlcmZhY2UgaXMgYWN0aXZhdGVkLCB5b3UgbWF5IGhhdmUgdGhlIG1lc3NhZ2U6CisgICAKK2V0aDA6IE1lZGlhIExpbmsgT24gMTAwbWJwcyBmdWxsLWR1cGxleAorCisgICBJZiB5b3UgdHJ5IHRvIHVucGx1ZyB0aGUgdHdpc3QgcGFpciAoVFApIGNhYmxlIHlvdSB3aWxsIGdldAorICAgCitldGgwOiBNZWRpYSBMaW5rIE9mZgorCisgICBpbmRpY2F0aW5nIHRoYXQgdGhlIGxpbmsgaXMgZmFpbGVkLgorICAgICBfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXworICAgCitCdWlsZGluZyB0aGUgZHJpdmVyIGludG8ga2VybmVsCisKKyAgIElmIHlvdSB3YW50IHRvIG1ha2UgdGhlIGRyaXZlciBpbnRvIGtlcm5lbCwgY2hvb3NlICJZIiByYXRoZXIgdGhhbiAiTSIKKyAgIG9uICJTaVMgOTAwLzcwMTYgUENJIEZhc3QgRXRoZXJuZXQgQWRhcHRlciBzdXBwb3J0IiB3aGVuIGNvbmZpZ3VyaW5nCisgICB0aGUga2VybmVsLiBCdWlsZCB0aGUga2VybmVsIGltYWdlIGluIHRoZSB1c3VhbCB3YXkKKyAgIAorbWFrZSBjbGVhbgorCittYWtlIGJ6bGlsbworCisgICBOZXh0IHRpbWUgdGhlIHN5c3RlbSByZWJvb3QsIHlvdSBoYXZlIHRoZSBkcml2ZXIgaW4gbWVtb3J5LgorICAgICBfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXworICAgCitDaGFwdGVyIDYuIEtub3duIFByb2JsZW1zIGFuZCBCdWdzCisKKyAgIFRoZXJlIGFyZSBzb21lIGtub3duIHByb2JsZW1zIGFuZCBidWdzLiBJZiB5b3UgZmluZCBhbnkgb3RoZXIgYnVncworICAgcGxlYXNlIG1haWwgdG8gbGNjaGFuZ0BzaXMuY29tLnR3CisgICAKKyAgICAxLiBBTTc5QzkwMSBIb21lUE5BIFBIWSBpcyBub3QgdGhvcm91Z2hseSB0ZXN0ZWQsIHRoZXJlIG1heSBiZSBzb21lCisgICAgICAgYnVncyBpbiB0aGUgIm9uIHRoZSBmbHkiIGNoYW5nZSBvZiB0cmFuc2NlaXZlci4KKyAgICAyLiBBIGJ1ZyBpcyBoaWRkZW4gc29tZXdoZXJlIGluIHRoZSByZWNlaXZlIGJ1ZmZlciBtYW5hZ2VtZW50IGNvZGUsCisgICAgICAgdGhlIGJ1ZyBjYXVzZXMgTlVMTCBwb2ludGVyIHJlZmVyZW5jZSBpbiB0aGUga2VybmVsLiBUaGlzIGZhdWx0IGlzCisgICAgICAgY2F1Z2h0IGJlZm9yZSBiYWQgdGhpbmdzIGhhcHBlbiBhbmQgcmVwb3J0ZWQgd2l0aCB0aGUgbWVzc2FnZToKKyAgICAgICBldGgwOiBOVUxMIHBvaW50ZXIgZW5jb3VudGVyZWQgaW4gUnggcmluZywgc2tpcHBpbmcgd2hpY2ggY2FuIGJlCisgICAgICAgdmlld2VkIHdpdGggZG1lc2cgb3IgY2F0IC92YXIvbG9nL21lc3NhZ2UuCisgICAgMy4gVGhlIG1lZGlhIHR5cGUgY2hhbmdlIGZyb20gMTBNYnBzIHRvIDEwME1icHMgdHdpc3RlZC1wYWlyIGV0aGVybmV0CisgICAgICAgYnkgaWZjb25maWcgY2F1c2VzIHRoZSBtZWRpYSBsaW5rIGRvd24uCisgICAgIF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCisgICAKK0NoYXB0ZXIgNy4gUmV2aXNpb24gSGlzdG9yeQorCisgICAgICogTm92ZW1iZXIgMTMsIDIwMDAsIFJldmlzaW9uIDEuMDcsIHNldmVudGggcmVsZWFzZSwgNjMwRSBwcm9ibGVtCisgICAgICAgZml4ZWQgYW5kIGZ1cnRoZXIgY2xlYW4gdXAuCisgICAgICogTm92ZW1iZXIgNCwgMTk5OSwgUmV2aXNpb24gMS4wNiwgU2Vjb25kIHJlbGVhc2UsIGxvdHMgb2YgY2xlYW4gdXAKKyAgICAgICBhbmQgb3B0aW1pemF0aW9uLgorICAgICAqIEF1Z3VzdCA4LCAxOTk5LCBSZXZpc2lvbiAxLjA1LCBJbml0aWFsIFB1YmxpYyBSZWxlYXNlCisgICAgIF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCisgICAKK0NoYXB0ZXIgOC4gQWNrbm93bGVkZ2VtZW50cworCisgICBUaGlzIGRyaXZlciB3YXMgb3JpZ2luYWxseSBkZXJpdmVkIGZvcm0gRG9uYWxkIEJlY2tlcidzIHBjaS1za2VsZXRvbgorICAgYW5kIHJ0bDgxMzkgZHJpdmVycy4gRG9uYWxkIGFsc28gcHJvdmlkZWQgdmFyaW91cyBzdWdnZXN0aW9uIHJlZ2FyZGVkCisgICB3aXRoIGltcHJvdmVtZW50cyBtYWRlIGluIHJldmlzaW9uIDEuMDYuCisgICAKKyAgIFRoZSAxLjA1IHJldmlzaW9uIHdhcyBjcmVhdGVkIGJ5IEppbSBIdWFuZywgQU1EIDc5YzkwMSBzdXBwb3J0IHdhcworICAgYWRkZWQgYnkgQ2hpbi1TaGFuIExpLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3NrOThsaW4udHh0IGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3NrOThsaW4udHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg1MWZjOTcKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvc2s5OGxpbi50eHQKQEAgLTAsMCArMSw1NjggQEAKKyhDKUNvcHlyaWdodCAxOTk5LTIwMDQgTWFydmVsbChSKS4KK0FsbCByaWdodHMgcmVzZXJ2ZWQKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitzazk4bGluLnR4dCBjcmVhdGVkIDEzLUZlYi0yMDA0CisKK1JlYWRtZSBGaWxlIGZvciBzazk4bGluIHY2LjIzCitNYXJ2ZWxsIFl1a29uL1N5c0tvbm5lY3QgU0stOTh4eCBHaWdhYml0IEV0aGVybmV0IEFkYXB0ZXIgZmFtaWx5IGRyaXZlciBmb3IgTElOVVgKKworVGhpcyBmaWxlIGNvbnRhaW5zCisgMSAgT3ZlcnZpZXcKKyAyICBSZXF1aXJlZCBGaWxlcworIDMgIEluc3RhbGxhdGlvbgorICAgIDMuMSAgRHJpdmVyIEluc3RhbGxhdGlvbgorICAgIDMuMiAgSW5jbHVzaW9uIG9mIGFkYXB0ZXIgYXQgc3lzdGVtIHN0YXJ0CisgNCAgRHJpdmVyIFBhcmFtZXRlcnMKKyAgICA0LjEgIFBlci1Qb3J0IFBhcmFtZXRlcnMKKyAgICA0LjIgIEFkYXB0ZXIgUGFyYW1ldGVycworIDUgIExhcmdlIEZyYW1lIFN1cHBvcnQKKyA2ICBWTEFOIGFuZCBMaW5rIEFnZ3JlZ2F0aW9uIFN1cHBvcnQgKElFRUUgODAyLjEsIDgwMi4xcSwgODAyLjNhZCkKKyA3ICBUcm91Ymxlc2hvb3RpbmcKKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKworMSAgT3ZlcnZpZXcKKz09PT09PT09PT09CisKK1RoZSBzazk4bGluIGRyaXZlciBzdXBwb3J0cyB0aGUgTWFydmVsbCBZdWtvbiBhbmQgU3lzS29ubmVjdCAKK1NLLTk4eHgvU0stOTV4eCBjb21wbGlhbnQgR2lnYWJpdCBFdGhlcm5ldCBBZGFwdGVyIG9uIExpbnV4LiBJdCBoYXMgCitiZWVuIHRlc3RlZCB3aXRoIExpbnV4IG9uIEludGVsL3g4NiBtYWNoaW5lcy4KKyoqKgorCisKKzIgIFJlcXVpcmVkIEZpbGVzCis9PT09PT09PT09PT09PT09PQorCitUaGUgbGludXgga2VybmVsIHNvdXJjZS4KK05vIGFkZGl0aW9uYWwgZmlsZXMgcmVxdWlyZWQuCisqKioKKworCiszICBJbnN0YWxsYXRpb24KKz09PT09PT09PT09PT09PQorCitJdCBpcyByZWNvbW1lbmRlZCB0byBkb3dubG9hZCB0aGUgbGF0ZXN0IHZlcnNpb24gb2YgdGhlIGRyaXZlciBmcm9tIHRoZSAKK1N5c0tvbm5lY3Qgd2ViIHNpdGUgd3d3LnN5c2tvbm5lY3QuY29tLiBJZiB5b3UgaGF2ZSBkb3dubG9hZGVkIHRoZSBsYXRlc3QKK2RyaXZlciwgdGhlIExpbnV4IGtlcm5lbCBoYXMgdG8gYmUgcGF0Y2hlZCBiZWZvcmUgdGhlIGRyaXZlciBjYW4gYmUgCitpbnN0YWxsZWQuIEZvciBkZXRhaWxzIG9uIGhvdyB0byBwYXRjaCBhIExpbnV4IGtlcm5lbCwgcmVmZXIgdG8gdGhlIAorcGF0Y2gudHh0IGZpbGUuCisKKzMuMSAgRHJpdmVyIEluc3RhbGxhdGlvbgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZSBmb2xsb3dpbmcgc3RlcHMgZGVzY3JpYmUgdGhlIGFjdGlvbnMgdGhhdCBhcmUgcmVxdWlyZWQgdG8gaW5zdGFsbAordGhlIGRyaXZlciBhbmQgdG8gc3RhcnQgaXQgbWFudWFsbHkuIFRoZXNlIHN0ZXBzIHNob3VsZCBiZSBjYXJyaWVkCitvdXQgZm9yIHRoZSBpbml0aWFsIGRyaXZlciBzZXR1cC4gT25jZSBjb25maXJtZWQgdG8gYmUgb2ssIHRoZXkgY2FuCitiZSBpbmNsdWRlZCBpbiB0aGUgc3lzdGVtIHN0YXJ0LgorCitOT1RFIDE6IFRvIHBlcmZvcm0gdGhlIGZvbGxvd2luZyB0YXNrcyB5b3UgbmVlZCAncm9vdCcgYWNjZXNzLgorCitOT1RFIDI6IEluIGNhc2Ugb2YgcHJvYmxlbXMsIHBsZWFzZSByZWFkIHRoZSBzZWN0aW9uICJUcm91Ymxlc2hvb3RpbmciIAorICAgICAgICBiZWxvdy4KKworVGhlIGRyaXZlciBjYW4gZWl0aGVyIGJlIGludGVncmF0ZWQgaW50byB0aGUga2VybmVsIG9yIGl0IGNhbiBiZSBjb21waWxlZCAKK2FzIGEgbW9kdWxlLiBTZWxlY3QgdGhlIGFwcHJvcHJpYXRlIG9wdGlvbiBkdXJpbmcgdGhlIGtlcm5lbCAKK2NvbmZpZ3VyYXRpb24uCisKK0NvbXBpbGUvdXNlIHRoZSBkcml2ZXIgYXMgYSBtb2R1bGUKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK1RvIGNvbXBpbGUgdGhlIGRyaXZlciwgZ28gdG8gdGhlIGRpcmVjdG9yeSAvdXNyL3NyYy9saW51eCBhbmQKK2V4ZWN1dGUgdGhlIGNvbW1hbmQgIm1ha2UgbWVudWNvbmZpZyIgb3IgIm1ha2UgeGNvbmZpZyIgYW5kIHByb2NlZWQgYXMgCitmb2xsb3dzOgorCitUbyBpbnRlZ3JhdGUgdGhlIGRyaXZlciBwZXJtYW5lbnRseSBpbnRvIHRoZSBrZXJuZWwsIHByb2NlZWQgYXMgZm9sbG93czoKKworMS4gU2VsZWN0IHRoZSBtZW51ICJOZXR3b3JrIGRldmljZSBzdXBwb3J0IiBhbmQgdGhlbiAiRXRoZXJuZXQoMTAwME1iaXQpIgorMi4gTWFyayAiTWFydmVsbCBZdWtvbiBDaGlwc2V0IC8gU3lzS29ubmVjdCBTSy05OHh4IGZhbWlseSBzdXBwb3J0IiAKKyAgIHdpdGggKCopIAorMy4gQnVpbGQgYSBuZXcga2VybmVsIHdoZW4gdGhlIGNvbmZpZ3VyYXRpb24gb2YgdGhlIGFib3ZlIG9wdGlvbnMgaXMgCisgICBmaW5pc2hlZC4KKzQuIEluc3RhbGwgdGhlIG5ldyBrZXJuZWwuCis1LiBSZWJvb3QgeW91ciBzeXN0ZW0uCisKK1RvIHVzZSB0aGUgZHJpdmVyIGFzIGEgbW9kdWxlLCBwcm9jZWVkIGFzIGZvbGxvd3M6CisKKzEuIEVuYWJsZSAnbG9hZGFibGUgbW9kdWxlIHN1cHBvcnQnIGluIHRoZSBrZXJuZWwuCisyLiBGb3IgYXV0b21hdGljIGRyaXZlciBzdGFydCwgZW5hYmxlIHRoZSAnS2VybmVsIG1vZHVsZSBsb2FkZXInLgorMy4gU2VsZWN0IHRoZSBtZW51ICJOZXR3b3JrIGRldmljZSBzdXBwb3J0IiBhbmQgdGhlbiAiRXRoZXJuZXQoMTAwME1iaXQpIgorNC4gTWFyayAiTWFydmVsbCBZdWtvbiBDaGlwc2V0IC8gU3lzS29ubmVjdCBTSy05OHh4IGZhbWlseSBzdXBwb3J0IiAKKyAgIHdpdGggKE0pCis1LiBFeGVjdXRlIHRoZSBjb21tYW5kICJtYWtlIG1vZHVsZXMiLgorNi4gRXhlY3V0ZSB0aGUgY29tbWFuZCAibWFrZSBtb2R1bGVzX2luc3RhbGwiLgorICAgVGhlIGFwcHJvcGlhdGUgbW9kdWxlcyB3aWxsIGJlIGluc3RhbGxlZC4KKzcuIFJlYm9vdCB5b3VyIHN5c3RlbS4KKworCitMb2FkIHRoZSBtb2R1bGUgbWFudWFsbHkKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorVG8gbG9hZCB0aGUgbW9kdWxlIG1hbnVhbGx5LCBwcm9jZWVkIGFzIGZvbGxvd3M6CisKKzEuIEVudGVyICJtb2Rwcm9iZSBzazk4bGluIi4KKzIuIElmIGEgTWFydmVsbCBZdWtvbiBvciBTeXNLb25uZWN0IFNLLTk4eHggYWRhcHRlciBpcyBpbnN0YWxsZWQgaW4gCisgICB5b3VyIGNvbXB1dGVyIGFuZCB5b3UgaGF2ZSBhIC9wcm9jIGZpbGUgc3lzdGVtLCBleGVjdXRlIHRoZSBjb21tYW5kOgorICAgImxzIC9wcm9jL25ldC9zazk4bGluLyIgCisgICBUaGlzIHNob3VsZCBwcm9kdWNlIGFuIG91dHB1dCBjb250YWluaW5nIGEgbGluZSB3aXRoIHRoZSBmb2xsb3dpbmcgCisgICBmb3JtYXQ6CisgICBldGgwICAgZXRoMSAgLi4uCisgICB3aGljaCBpbmRpY2F0ZXMgdGhhdCB5b3VyIGFkYXB0ZXIgaGFzIGJlZW4gZm91bmQgYW5kIGluaXRpYWxpemVkLgorICAgCisgICBOT1RFIDE6IElmIHlvdSBoYXZlIG1vcmUgdGhhbiBvbmUgTWFydmVsbCBZdWtvbiBvciBTeXNLb25uZWN0IFNLLTk4eHggCisgICAgICAgICAgIGFkYXB0ZXIgaW5zdGFsbGVkLCB0aGUgYWRhcHRlcnMgd2lsbCBiZSBsaXN0ZWQgYXMgJ2V0aDAnLCAKKyAgICAgICAgICAgICAgICAgICAnZXRoMScsICdldGgyJywgZXRjLgorICAgICAgICAgICAgICAgICAgIEZvciBlYWNoIGFkYXB0ZXIsIHJlcGVhdCBzdGVwcyAzIGFuZCA0IGJlbG93LgorCisgICBOT1RFIDI6IElmIHlvdSBoYXZlIG90aGVyIEV0aGVybmV0IGFkYXB0ZXJzIGluc3RhbGxlZCwgeW91ciBNYXJ2ZWxsCisgICAgICAgICAgIFl1a29uIG9yIFN5c0tvbm5lY3QgU0stOTh4eCBhZGFwdGVyIHdpbGwgYmUgbWFwcGVkIHRvIHRoZSAKKyAgICAgICAgICAgICAgICAgICBuZXh0IGF2YWlsYWJsZSBudW1iZXIsIGUuZy4gJ2V0aDEnLiBUaGUgbWFwcGluZyBpcyBleGVjdXRlZCAKKyAgICAgICAgICAgICAgICAgICBhdXRvbWF0aWNhbGx5LgorICAgICAgICAgICBUaGUgbW9kdWxlIGluc3RhbGxhdGlvbiBtZXNzYWdlIChkaXNwbGF5ZWQgZWl0aGVyIGluIGEgc3lzdGVtCisgICAgICAgICAgIGxvZyBmaWxlIG9yIG9uIHRoZSBjb25zb2xlKSBwcmludHMgYSBsaW5lIGZvciBlYWNoIGFkYXB0ZXIgCisgICAgICAgICAgIGZvdW5kIGNvbnRhaW5pbmcgdGhlIGNvcnJlc3BvbmRpbmcgJ2V0aFgnLgorCiszLiBTZWxlY3QgYW4gSVAgYWRkcmVzcyBhbmQgYXNzaWduIGl0IHRvIHRoZSByZXNwZWN0aXZlIGFkYXB0ZXIgYnkgCisgICBlbnRlcmluZzoKKyAgIGlmY29uZmlnIGV0aDAgPGlwLWFkZHJlc3M+CisgICBXaXRoIHRoaXMgY29tbWFuZCwgdGhlIGFkYXB0ZXIgaXMgY29ubmVjdGVkIHRvIHRoZSBFdGhlcm5ldC4gCisgICAKKyAgIFNLLTk4eHggR2lnYWJpdCBFdGhlcm5ldCBTZXJ2ZXIgQWRhcHRlcnM6IFRoZSB5ZWxsb3cgTEVEIG9uIHRoZSBhZGFwdGVyIAorICAgaXMgbm93IGFjdGl2ZSwgdGhlIGxpbmsgc3RhdHVzIExFRCBvZiB0aGUgcHJpbWFyeSBwb3J0IGlzIGFjdGl2ZSBhbmQgCisgICB0aGUgbGluayBzdGF0dXMgTEVEIG9mIHRoZSBzZWNvbmRhcnkgcG9ydCAob24gZHVhbCBwb3J0IGFkYXB0ZXJzKSBpcyAKKyAgIGJsaW5raW5nIChpZiB0aGUgcG9ydHMgYXJlIGNvbm5lY3RlZCB0byBhIHN3aXRjaCBvciBodWIpLgorICAgU0stOTh4eCBWMi4wIEdpZ2FiaXQgRXRoZXJuZXQgQWRhcHRlcnM6IFRoZSBsaW5rIHN0YXR1cyBMRUQgaXMgYWN0aXZlLgorICAgSW4gYWRkaXRpb24sIHlvdSB3aWxsIHJlY2VpdmUgYSBzdGF0dXMgbWVzc2FnZSBvbiB0aGUgY29uc29sZSBzdGF0aW5nCisgICAiZXRoWDogbmV0d29yayBjb25uZWN0aW9uIHVwIHVzaW5nIHBvcnQgWSIgYW5kIHNob3dpbmcgdGhlIHNlbGVjdGVkIAorICAgY29ubmVjdGlvbiBwYXJhbWV0ZXJzICh4IHN0YW5kcyBmb3IgdGhlIGV0aGVybmV0IGRldmljZSBudW1iZXIgCisgICAoMCwxLDIsIGV0YyksIHkgc3RhbmRzIGZvciB0aGUgcG9ydCBuYW1lIChBIG9yIEIpKS4KKworICAgTk9URTogSWYgeW91IGFyZSBpbiBkb3VidCBhYm91dCBJUCBhZGRyZXNzZXMsIGFzayB5b3VyIG5ldHdvcmsKKyAgICAgICAgIGFkbWluaXN0cmF0b3IgZm9yIGFzc2lzdGFuY2UuCisgIAorNC4gWW91ciBhZGFwdGVyIHNob3VsZCBub3cgYmUgZnVsbHkgb3BlcmF0aW9uYWwuCisgICBVc2UgJ3BpbmcgPG90aGVyc3RhdGlvbj4nIHRvIHZlcmlmeSB0aGUgY29ubmVjdGlvbiB0byBvdGhlciBjb21wdXRlcnMgCisgICBvbiB5b3VyIG5ldHdvcmsuCis1LiBUbyBjaGVjayB0aGUgYWRhcHRlciBjb25maWd1cmF0aW9uIHZpZXcgL3Byb2MvbmV0L3NrOThsaW4vW2RldmljZW5hbWVdLgorICAgRm9yIGV4YW1wbGUgYnkgZXhlY3V0aW5nOiAgICAKKyAgICJjYXQgL3Byb2MvbmV0L3NrOThsaW4vZXRoMCIgCisKK1VubG9hZCB0aGUgbW9kdWxlCistLS0tLS0tLS0tLS0tLS0tLQorVG8gc3RvcCBhbmQgdW5sb2FkIHRoZSBkcml2ZXIgbW9kdWxlcywgcHJvY2VlZCBhcyBmb2xsb3dzOgorCisxLiBFeGVjdXRlIHRoZSBjb21tYW5kICJpZmNvbmZpZyBldGgwIGRvd24iLgorMi4gRXhlY3V0ZSB0aGUgY29tbWFuZCAicm1tb2Qgc2s5OGxpbiIuCisKKzMuMiAgSW5jbHVzaW9uIG9mIGFkYXB0ZXIgYXQgc3lzdGVtIHN0YXJ0CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitTaW5jZSBhIGxhcmdlIG51bWJlciBvZiBkaWZmZXJlbnQgTGludXggZGlzdHJpYnV0aW9ucyBhcmUgCithdmFpbGFibGUsIHdlIGFyZSB1bmFibGUgdG8gZGVzY3JpYmUgYSBnZW5lcmFsIGluc3RhbGxhdGlvbiBwcm9jZWR1cmUKK2ZvciB0aGUgZHJpdmVyIG1vZHVsZS4KK0JlY2F1c2UgdGhlIGRyaXZlciBpcyBub3cgaW50ZWdyYXRlZCBpbiB0aGUga2VybmVsLCBpbnN0YWxsYXRpb24gc2hvdWxkCitiZSBlYXN5LCB1c2luZyB0aGUgc3RhbmRhcmQgbWVjaGFuaXNtIG9mIHlvdXIgZGlzdHJpYnV0aW9uLgorUmVmZXIgdG8gdGhlIGRpc3RyaWJ1dGlvbidzIG1hbnVhbCBmb3IgaW5zdGFsbGF0aW9uIG9mIGV0aGVybmV0IGFkYXB0ZXJzLgorCisqKioKKworNCAgRHJpdmVyIFBhcmFtZXRlcnMKKz09PT09PT09PT09PT09PT09PT09CisKK1BhcmFtZXRlcnMgY2FuIGJlIHNldCBhdCB0aGUgY29tbWFuZCBsaW5lIGFmdGVyIHRoZSBtb2R1bGUgaGFzIGJlZW4gCitsb2FkZWQgd2l0aCB0aGUgY29tbWFuZCAnbW9kcHJvYmUnLgorSW4gc29tZSBkaXN0cmlidXRpb25zLCB0aGUgY29uZmlndXJhdGlvbiB0b29scyBhcmUgYWJsZSB0byBwYXNzIHBhcmFtZXRlcnMKK3RvIHRoZSBkcml2ZXIgbW9kdWxlLgorCitJZiB5b3UgdXNlIHRoZSBrZXJuZWwgbW9kdWxlIGxvYWRlciwgeW91IGNhbiBzZXQgZHJpdmVyIHBhcmFtZXRlcnMKK2luIHRoZSBmaWxlIC9ldGMvbW9kcHJvYmUuY29uZiAob3IgL2V0Yy9tb2R1bGVzLmNvbmYgaW4gMi40IG9yIGVhcmxpZXIpLgorVG8gc2V0IHRoZSBkcml2ZXIgcGFyYW1ldGVycyBpbiB0aGlzIGZpbGUsIHByb2NlZWQgYXMgZm9sbG93czoKKworMS4gSW5zZXJ0IGEgbGluZSBvZiB0aGUgZm9ybSA6CisgICBvcHRpb25zIHNrOThsaW4gLi4uCisgICBGb3IgIi4uLiIsIHRoZSBzYW1lIHN5bnRheCBpcyByZXF1aXJlZCBhcyBkZXNjcmliZWQgZm9yIHRoZSBjb21tYW5kCisgICBsaW5lIHBhcmFtYXRlcnMgb2YgbW9kcHJvYmUgYmVsb3cuCisyLiBUbyBhY3RpdmF0ZSB0aGUgbmV3IHBhcmFtZXRlcnMsIGVpdGhlciByZWJvb3QgeW91ciBjb21wdXRlcgorICAgb3IgCisgICB1bmxvYWQgYW5kIHJlbG9hZCB0aGUgZHJpdmVyLgorICAgVGhlIHN5bnRheCBvZiB0aGUgZHJpdmVyIHBhcmFtZXRlcnMgaXM6CisKKyAgICAgICAgbW9kcHJvYmUgc2s5OGxpbiBwYXJhbWV0ZXI9dmFsdWUxWyx2YWx1ZTJbLHZhbHVlMy4uLl1dCisKKyAgIHdoZXJlIHZhbHVlMSByZWZlcnMgdG8gdGhlIGZpcnN0IGFkYXB0ZXIsIHZhbHVlMiB0byB0aGUgc2Vjb25kIGV0Yy4KKworTk9URTogQWxsIHBhcmFtZXRlcnMgYXJlIGNhc2Ugc2Vuc2l0aXZlLiBXcml0ZSB0aGVtIGV4YWN0bHkgYXMgc2hvd24gCisgICAgICBiZWxvdy4KKworRXhhbXBsZToKK1N1cHBvc2UgeW91IGhhdmUgdHdvIGFkYXB0ZXJzLiBZb3Ugd2FudCB0byBzZXQgYXV0by1uZWdvdGlhdGlvbgorb24gdGhlIGZpcnN0IGFkYXB0ZXIgdG8gT04gYW5kIG9uIHRoZSBzZWNvbmQgYWRhcHRlciB0byBPRkYuCitZb3UgYWxzbyB3YW50IHRvIHNldCBEdXBsZXhDYXBhYmlsaXRpZXMgb24gdGhlIGZpcnN0IGFkYXB0ZXIKK3RvIEZVTEwsIGFuZCBvbiB0aGUgc2Vjb25kIGFkYXB0ZXIgdG8gSEFMRi4KK1RoZW4sIHlvdSBtdXN0IGVudGVyOgorCisgICAgICAgIG1vZHByb2JlIHNrOThsaW4gQXV0b05lZ19BPU9uLE9mZiBEdXBDYXBfQT1GdWxsLEhhbGYKKworTk9URTogVGhlIG51bWJlciBvZiBhZGFwdGVycyB0aGF0IGNhbiBiZSBjb25maWd1cmVkIHRoaXMgd2F5IGlzCisgICAgICBsaW1pdGVkIGluIHRoZSBkcml2ZXIgKGZpbGUgc2tnZS5jLCBjb25zdGFudCBTS19NQVhfQ0FSRF9QQVJBTSkuCisgICAgICBUaGUgY3VycmVudCBsaW1pdCBpcyAxNi4gSWYgeW91IGhhcHBlbiB0byBpbnN0YWxsCisgICAgICBtb3JlIGFkYXB0ZXJzLCBhZGp1c3QgdGhpcyBhbmQgcmVjb21waWxlLgorCisKKzQuMSAgUGVyLVBvcnQgUGFyYW1ldGVycworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZXNlIHNldHRpbmdzIGFyZSBhdmFpbGFibGUgZm9yIGVhY2ggcG9ydCBvbiB0aGUgYWRhcHRlci4KK0luIHRoZSBmb2xsb3dpbmcgZGVzY3JpcHRpb24sICc/JyBzdGFuZHMgZm9yIHRoZSBwb3J0IGZvcgord2hpY2ggeW91IHNldCB0aGUgcGFyYW1ldGVyIChBIG9yIEIpLgorCitTcGVlZAorLS0tLS0KK1BhcmFtZXRlcjogICAgU3BlZWRfPworVmFsdWVzOiAgICAgICAxMCwgMTAwLCAxMDAwLCBBdXRvCitEZWZhdWx0OiAgICAgIEF1dG8KKworVGhpcyBwYXJhbWV0ZXIgaXMgdXNlZCB0byBzZXQgdGhlIHNwZWVkIGNhcGFiaWxpdGllcy4gSXQgaXMgb25seSB2YWxpZCAKK2ZvciB0aGUgU0stOTh4eCBWMi4wIGNvcHBlciBhZGFwdGVycy4KK1VzdWFsbHksIHRoZSBzcGVlZCBpcyBuZWdvdGlhdGVkIGJldHdlZW4gdGhlIHR3byBwb3J0cyBkdXJpbmcgbGluayAKK2VzdGFibGlzaG1lbnQuIElmIHRoaXMgZmFpbHMsIGEgcG9ydCBjYW4gYmUgZm9yY2VkIHRvIGEgc3BlY2lmaWMgc2V0dGluZword2l0aCB0aGlzIHBhcmFtZXRlci4KKworQXV0by1OZWdvdGlhdGlvbgorLS0tLS0tLS0tLS0tLS0tLQorUGFyYW1ldGVyOiAgICBBdXRvTmVnXz8KK1ZhbHVlczogICAgICAgT24sIE9mZiwgU2Vuc2UKK0RlZmF1bHQ6ICAgICAgT24KKyAgCitUaGUgIlNlbnNlIi1tb2RlIGF1dG9tYXRpY2FsbHkgZGV0ZWN0cyB3aGV0aGVyIHRoZSBsaW5rIHBhcnRuZXIgc3VwcG9ydHMKK2F1dG8tbmVnb3RpYXRpb24gb3Igbm90LgorCitEdXBsZXggQ2FwYWJpbGl0aWVzCistLS0tLS0tLS0tLS0tLS0tLS0tCitQYXJhbWV0ZXI6ICAgIER1cENhcF8/CitWYWx1ZXM6ICAgICAgIEhhbGYsIEZ1bGwsIEJvdGgKK0RlZmF1bHQ6ICAgICAgQm90aAorCitUaGlzIHBhcmFtZXRlcnMgaXMgb25seSByZWxldmFudCBpZiBhdXRvLW5lZ290aWF0aW9uIGZvciB0aGlzIHBvcnQgaXMgCitub3Qgc2V0IHRvICJTZW5zZSIuIElmIGF1dG8tbmVnb3RpYXRpb24gaXMgc2V0IHRvICJPbiIsIGFsbCB0aHJlZSB2YWx1ZXMKK2FyZSBwb3NzaWJsZS4gSWYgaXQgaXMgc2V0IHRvICJPZmYiLCBvbmx5ICJGdWxsIiBhbmQgIkhhbGYiIGFyZSBhbGxvd2VkLgorVGhpcyBwYXJhbWV0ZXIgaXMgdXNlZnVsbCBpZiB5b3VyIGxpbmsgcGFydG5lciBkb2VzIG5vdCBzdXBwb3J0IGFsbAorcG9zc2libGUgY29tYmluYXRpb25zLgorCitGbG93IENvbnRyb2wKKy0tLS0tLS0tLS0tLQorUGFyYW1ldGVyOiAgICBGbG93Q3RybF8/CitWYWx1ZXM6ICAgICAgIFN5bSwgU3ltT3JSZW0sIExvY1NlbmQsIE5vbmUKK0RlZmF1bHQ6ICAgICAgU3ltT3JSZW0KKworVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIHVzZWQgdG8gc2V0IHRoZSBmbG93IGNvbnRyb2wgY2FwYWJpbGl0aWVzIHRoZSAKK3BvcnQgcmVwb3J0cyBkdXJpbmcgYXV0by1uZWdvdGlhdGlvbi4gSXQgY2FuIGJlIHNldCBmb3IgZWFjaCBwb3J0IAoraW5kaXZpZHVhbGx5LgorUG9zc2libGUgbW9kZXM6CisgICAtLSBTeW0gICAgICA9IFN5bW1ldHJpYzogYm90aCBsaW5rIHBhcnRuZXJzIGFyZSBhbGxvd2VkIHRvIHNlbmQgCisgICAgICAgICAgICAgICAgICBQQVVTRSBmcmFtZXMKKyAgIC0tIFN5bU9yUmVtID0gU3ltbWV0cmljT3JSZW1vdGU6IGJvdGggb3Igb25seSByZW1vdGUgcGFydG5lciAKKyAgICAgICAgICAgICAgICAgIGFyZSBhbGxvd2VkIHRvIHNlbmQgUEFVU0UgZnJhbWVzCisgICAtLSBMb2NTZW5kICA9IExvY2FsU2VuZDogb25seSBsb2NhbCBsaW5rIHBhcnRuZXIgaXMgYWxsb3dlZCAKKyAgICAgICAgICAgICAgICAgIHRvIHNlbmQgUEFVU0UgZnJhbWVzCisgICAtLSBOb25lICAgICA9IG5vIGxpbmsgcGFydG5lciBpcyBhbGxvd2VkIHRvIHNlbmQgUEFVU0UgZnJhbWVzCisgIAorTk9URTogVGhpcyBwYXJhbWV0ZXIgaXMgaWdub3JlZCBpZiBhdXRvLW5lZ290aWF0aW9uIGlzIHNldCB0byAiT2ZmIi4KKworUm9sZSBpbiBNYXN0ZXItU2xhdmUtTmVnb3RpYXRpb24gKDEwMDBCYXNlLVQgb25seSkKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitQYXJhbWV0ZXI6ICAgIFJvbGVfPworVmFsdWVzOiAgICAgICBBdXRvLCBNYXN0ZXIsIFNsYXZlCitEZWZhdWx0OiAgICAgIEF1dG8KKworVGhpcyBwYXJhbWV0ZXIgaXMgb25seSB2YWxpZCBmb3IgdGhlIFNLLTk4MjEgYW5kIFNLLTk4MjIgYWRhcHRlcnMuCitGb3IgdHdvIDEwMDBCYXNlLVQgcG9ydHMgdG8gY29tbXVuaWNhdGUsIG9uZSBtdXN0IHRha2UgdGhlIHJvbGUgb2YgdGhlCittYXN0ZXIgKHByb3ZpZGluZyB0aW1pbmcgaW5mb3JtYXRpb24pLCB3aGlsZSB0aGUgb3RoZXIgbXVzdCBiZSB0aGUgCitzbGF2ZS4gVXN1YWxseSwgdGhpcyBpcyBuZWdvdGlhdGVkIGJldHdlZW4gdGhlIHR3byBwb3J0cyBkdXJpbmcgbGluayAKK2VzdGFibGlzaG1lbnQuIElmIHRoaXMgZmFpbHMsIGEgcG9ydCBjYW4gYmUgZm9yY2VkIHRvIGEgc3BlY2lmaWMgc2V0dGluZword2l0aCB0aGlzIHBhcmFtZXRlci4KKworCis0LjIgIEFkYXB0ZXIgUGFyYW1ldGVycworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQ29ubmVjdGlvbiBUeXBlIChTSy05OHh4IFYyLjAgY29wcGVyIGFkYXB0ZXJzIG9ubHkpCistLS0tLS0tLS0tLS0tLS0KK1BhcmFtZXRlcjogICAgQ29uVHlwZQorVmFsdWVzOiAgICAgICBBdXRvLCAxMDBGRCwgMTAwSEQsIDEwRkQsIDEwSEQKK0RlZmF1bHQ6ICAgICAgQXV0bworCitUaGUgcGFyYW1ldGVyICdDb25UeXBlJyBpcyBhIGNvbWJpbmF0aW9uIG9mIGFsbCBmaXZlIHBlci1wb3J0IHBhcmFtZXRlcnMKK3dpdGhpbiBvbmUgc2luZ2xlIHBhcmFtZXRlci4gVGhpcyBzaW1wbGlmaWVzIHRoZSBjb25maWd1cmF0aW9uIG9mIGJvdGggcG9ydHMKK29mIGFuIGFkYXB0ZXIgY2FyZCEgVGhlIGRpZmZlcmVudCB2YWx1ZXMgb2YgdGhpcyB2YXJpYWJsZSByZWZsZWN0IHRoZSBtb3N0IAorbWVhbmluZ2Z1bCBjb21iaW5hdGlvbnMgb2YgcG9ydCBwYXJhbWV0ZXJzLgorCitUaGUgZm9sbG93aW5nIHRhYmxlIHNob3dzIHRoZSB2YWx1ZXMgb2YgJ0NvblR5cGUnIGFuZCB0aGUgY29ycmVzcG9uZGluZworY29tYmluYXRpb25zIG9mIHRoZSBwZXItcG9ydCBwYXJhbWV0ZXJzOgorCisgICAgQ29uVHlwZSAgIHwgIER1cENhcCAgIEF1dG9OZWcgICBGbG93Q3RybCAgIFJvbGUgICAgICAgICAgICAgU3BlZWQKKyAgICAtLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIEF1dG8gICAgICB8ICBCb3RoICAgICBPbiAgICAgICAgU3ltT3JSZW0gICBBdXRvICAgICAgICAgICAgIEF1dG8KKyAgICAxMDBGRCAgICAgfCAgRnVsbCAgICAgT2ZmICAgICAgIE5vbmUgICAgICAgQXV0byAoaWdub3JlZCkgICAxMDAKKyAgICAxMDBIRCAgICAgfCAgSGFsZiAgICAgT2ZmICAgICAgIE5vbmUgICAgICAgQXV0byAoaWdub3JlZCkgICAxMDAKKyAgICAxMEZEICAgICAgfCAgRnVsbCAgICAgT2ZmICAgICAgIE5vbmUgICAgICAgQXV0byAoaWdub3JlZCkgICAxMAorICAgIDEwSEQgICAgICB8ICBIYWxmICAgICBPZmYgICAgICAgTm9uZSAgICAgICBBdXRvIChpZ25vcmVkKSAgIDEwCisKK1N0YXRpbmcgYW55IG90aGVyIHBvcnQgcGFyYW1ldGVyIHRvZ2V0aGVyIHdpdGggdGhpcyAnQ29uVHlwZScgdmFyaWFibGUKK3dpbGwgcmVzdWx0IGluIGEgbWVyZ2VkIGNvbmZpZ3VyYXRpb24gb2YgdGhvc2Ugc2V0dGluZ3MuIFRoaXMgZHVlIHRvIAordGhlIGZhY3QsIHRoYXQgdGhlIHBlci1wb3J0IHBhcmFtZXRlcnMgKGUuZy4gU3BlZWRfPyApIGhhdmUgYSBoaWdoZXIKK3ByaW9yaXR5IHRoYW4gdGhlIGNvbWJpbmVkIHZhcmlhYmxlICdDb25UeXBlJy4KKworTk9URTogVGhpcyBwYXJhbWV0ZXIgaXMgYWx3YXlzIHVzZWQgb24gYm90aCBwb3J0cyBvZiB0aGUgYWRhcHRlciBjYXJkLgorCitJbnRlcnJ1cHQgTW9kZXJhdGlvbgorLS0tLS0tLS0tLS0tLS0tLS0tLS0KK1BhcmFtZXRlcjogICAgTW9kZXJhdGlvbgorVmFsdWVzOiAgICAgICBOb25lLCBTdGF0aWMsIER5bmFtaWMKK0RlZmF1bHQ6ICAgICAgTm9uZQorCitJbnRlcnJ1cHQgbW9kZXJhdGlvbiBpcyBlbXBsb3llZCB0byBsaW1pdCB0aGUgbWF4bWltdW0gbnVtYmVyIG9mIGludGVycnVwdHMKK3RoZSBkcml2ZXIgaGFzIHRvIHNlcnZlLiBUaGF0IGlzLCBvbmUgb3IgbW9yZSBpbnRlcnJ1cHRzICh3aGljaCBpbmRpY2F0ZSBhbnkKK3RyYW5zbWl0IG9yIHJlY2VpdmUgcGFja2V0IHRvIGJlIHByb2Nlc3NlZCkgYXJlIHF1ZXVlZCB1bnRpbCB0aGUgZHJpdmVyIAorcHJvY2Vzc2VzIHRoZW0uIFdoZW4gcXVldWVkIGludGVycnVwdHMgYXJlIHRvIGJlIHNlcnZlZCwgaXMgZGV0ZXJtaW5lZCBieSB0aGUKKydJbnRzUGVyU2VjJyBwYXJhbWV0ZXIsIHdoaWNoIGlzIGV4cGxhaW5lZCBsYXRlciBiZWxvdy4KKworUG9zc2libGUgbW9kZXM6CisKKyAgIC0tIE5vbmUgLSBObyBpbnRlcnJ1cHQgbW9kZXJhdGlvbiBpcyBhcHBsaWVkIG9uIHRoZSBhZGFwdGVyIGNhcmQuIAorICAgICAgVGhlcmVmb3JlLCBlYWNoIHRyYW5zbWl0IG9yIHJlY2VpdmUgaW50ZXJydXB0IGlzIHNlcnZlZCBpbW1lZGlhdGVseQorICAgICAgYXMgc29vbiBhcyBpdCBhcHBlYXJzIG9uIHRoZSBpbnRlcnJ1cHQgbGluZSBvZiB0aGUgYWRhcHRlciBjYXJkLgorCisgICAtLSBTdGF0aWMgLSBJbnRlcnJ1cHQgbW9kZXJhdGlvbiBpcyBhcHBsaWVkIG9uIHRoZSBhZGFwdGVyIGNhcmQuIAorICAgICAgQWxsIHRyYW5zbWl0IGFuZCByZWNlaXZlIGludGVycnVwdHMgYXJlIHF1ZXVlZCB1bnRpbCBhIGNvbXBsZXRlCisgICAgICBtb2RlcmF0aW9uIGludGVydmFsIGVuZHMuIElmIHN1Y2ggYSBtb2RlcmF0aW9uIGludGVydmFsIGVuZHMsIGFsbAorICAgICAgcXVldWVkIGludGVycnVwdHMgYXJlIHByb2Nlc3NlZCBpbiBvbmUgYmlnIGJ1bmNoIHdpdGhvdXQgYW55IGRlbGF5LgorICAgICAgVGhlIHRlcm0gJ3N0YXRpYycgcmVmbGVjdHMgdGhlIGZhY3QsIHRoYXQgaW50ZXJydXB0IG1vZGVyYXRpb24gaXMKKyAgICAgIGFsd2F5cyBlbmFibGVkLCByZWdhcmRsZXNzIGhvdyBtdWNoIG5ldHdvcmsgbG9hZCBpcyBjdXJyZW50bHkgCisgICAgICBwYXNzaW5nIHZpYSBhIHBhcnRpY3VsYXIgaW50ZXJmYWNlLiBJbiBhZGRpdGlvbiwgdGhlIGR1cmF0aW9uIG9mCisgICAgICB0aGUgbW9kZXJhdGlvbiBpbnRlcnZhbCBoYXMgYSBmaXhlZCBsZW5ndGggdGhhdCBuZXZlciBjaGFuZ2VzIHdoaWxlCisgICAgICB0aGUgZHJpdmVyIGlzIG9wZXJhdGlvbmFsLgorCisgICAtLSBEeW5hbWljIC0gSW50ZXJydXB0IG1vZGVyYXRpb24gbWlnaHQgYmUgYXBwbGllZCBvbiB0aGUgYWRhcHRlciBjYXJkLAorICAgICAgZGVwZW5kaW5nIG9uIHRoZSBsb2FkIG9mIHRoZSBzeXN0ZW0uIElmIHRoZSBkcml2ZXIgZGV0ZWN0cyB0aGF0IHRoZQorICAgICAgc3lzdGVtIGxvYWQgaXMgdG9vIGhpZ2gsIHRoZSBkcml2ZXIgdHJpZXMgdG8gc2hpZWxkIHRoZSBzeXN0ZW0gYWdhaW5zdCAKKyAgICAgIHRvbyBtdWNoIG5ldHdvcmsgbG9hZCBieSBlbmFibGluZyBpbnRlcnJ1cHQgbW9kZXJhdGlvbi4gSWYgLSBhdCBhIGxhdGVyCisgICAgICB0aW1lIC0gdGhlIENQVSB1dGlsaXphdG9uIGRlY3JlYXNlcyBhZ2FpbiAob3IgaWYgdGhlIG5ldHdvcmsgbG9hZCBpcyAKKyAgICAgIG5lZ2xpZ2libGUpIHRoZSBpbnRlcnJ1cHQgbW9kZXJhdGlvbiB3aWxsIGF1dG9tYXRpY2FsbHkgYmUgZGlzYWJsZWQuCisKK0ludGVycnVwdCBtb2RlcmF0aW9uIHNob3VsZCBiZSB1c2VkIHdoZW4gdGhlIGRyaXZlciBoYXMgdG8gaGFuZGxlIG9uZSBvciBtb3JlCitpbnRlcmZhY2VzIHdpdGggYSBoaWdoIG5ldHdvcmsgbG9hZCwgd2hpY2ggLSBhcyBhIGNvbnNlcXVlbmNlIC0gbGVhZHMgYWxzbyB0byBhCitoaWdoIENQVSB1dGlsaXphdGlvbi4gV2hlbiBtb2RlcmF0aW9uIGlzIGFwcGxpZWQgaW4gc3VjaCBoaWdoIG5ldHdvcmsgbG9hZCAKK3NpdHVhdGlvbnMsIENQVSBsb2FkIG1pZ2h0IGJlIHJlZHVjZWQgYnkgMjAtMzAlLgorCitOT1RFOiBUaGUgZHJhd2JhY2sgb2YgdXNpbmcgaW50ZXJydXB0IG1vZGVyYXRpb24gaXMgYW4gaW5jcmVhc2Ugb2YgdGhlIHJvdW5kLQordHJpcC10aW1lIChSVFQpLCBkdWUgdG8gdGhlIHF1ZXVlaW5nIGFuZCBzZXJ2aW5nIG9mIGludGVycnVwdHMgYXQgZGVkaWNhdGVkCittb2RlcmF0aW9uIHRpbWVzLgorCitJbnRlcnJ1cHRzIHBlciBzZWNvbmQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLQorUGFyYW1ldGVyOiAgICBJbnRzUGVyU2VjCitWYWx1ZXM6ICAgICAgIDMwLi4uNDAwMDAgKGludGVycnVwdHMgcGVyIHNlY29uZCkKK0RlZmF1bHQ6ICAgICAgMjAwMAorCitUaGlzIHBhcmFtZXRlciBpcyBvbmx5IHVzZWQsIGlmIGVpdGhlciBzdGF0aWMgb3IgZHluYW1pYyBpbnRlcnJ1cHQgbW9kZXJhdGlvbgoraXMgdXNlZCBvbiBhIG5ldHdvcmsgYWRhcHRlciBjYXJkLiBVc2luZyB0aGlzIHBhcmFtdGVyIGlmIG5vIG1vZGVyYXRpb24gaXMKK2FwcGxpZWQsIHdpbGwgbGVhZCB0byBubyBhY3Rpb24gcGVyZm9ybWVkLgorCitUaGlzIHBhcmFtZXRlciBkZXRlcm1pbmVzIHRoZSBsZW5ndGggb2YgYW55IGludGVycnVwdCBtb2RlcmF0aW9uIGludGVydmFsLiAKK0Fzc3VtaW5nIHRoYXQgc3RhdGljIGludGVycnVwdCBtb2RlcmF0aW9uIGlzIHRvIGJlIHVzZWQsIGFuICdJbnRzUGVyU2VjJyAKK3BhcmFtZXRlciB2YWx1ZSBvZiAyMDAwIHdpbGwgbGVhZCB0byBhbiBpbnRlcnJ1cHQgbW9kZXJhdGlvbiBpbnRlcnZhbCBvZgorNTAwIG1pY3Jvc2Vjb25kcy4gCisKK05PVEU6IFRoZSBkdXJhdGlvbiBvZiB0aGUgbW9kZXJhdGlvbiBpbnRlcnZhbCBpcyB0byBiZSBjaG9zZW4gd2l0aCBjYXJlLgorQXQgZmlyc3QgZ2xhbmNlLCBzZWxlY3RpbmcgYSB2ZXJ5IGxvbmcgZHVyYXRpb24gKGUuZy4gb25seSAxMDAgaW50ZXJydXB0cyBwZXIgCitzZWNvbmQpIHNlZW1zIHRvIGJlIG1lYW5pbmdmdWwsIGJ1dCB0aGUgaW5jcmVhc2Ugb2YgcGFja2V0LXByb2Nlc3NpbmcgZGVsYXkgCitpcyB0cmVtZW5kb3VzLiBPbiB0aGUgb3RoZXIgaGFuZCwgc2VsZWN0aW5nIGEgdmVyeSBzaG9ydCBtb2RlcmF0aW9uIHRpbWUgbWlnaHQKK2NvbXBlbnNhdGUgdGhlIHVzZSBvZiBhbnkgbW9kZXJhdGlvbiBiZWluZyBhcHBsaWVkLgorCisKK1ByZWZlcnJlZCBQb3J0CistLS0tLS0tLS0tLS0tLQorUGFyYW1ldGVyOiAgICBQcmVmUG9ydAorVmFsdWVzOiAgICAgICBBLCBCCitEZWZhdWx0OiAgICAgIEEKKworVGhpcyBpcyB1c2VkIHRvIGZvcmNlIHRoZSBwcmVmZXJyZWQgcG9ydCB0byBBIG9yIEIgKG9uIGR1YWwtcG9ydCBuZXR3b3JrIAorYWRhcHRlcnMpLiBUaGUgcHJlZmVycmVkIHBvcnQgaXMgdGhlIG9uZSB0aGF0IGlzIHVzZWQgaWYgYm90aCBhcmUgZGV0ZWN0ZWQKK2FzIGZ1bGx5IGZ1bmN0aW9uYWwuCisKK1JMTVQgTW9kZSAoUmVkdW5kYW50IExpbmsgTWFuYWdlbWVudCBUZWNobm9sb2d5KQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitQYXJhbWV0ZXI6ICAgIFJsbXRNb2RlCitWYWx1ZXM6ICAgICAgIENoZWNrTGlua1N0YXRlLENoZWNrTG9jYWxQb3J0LCBDaGVja1NlZywgRHVhbE5ldAorRGVmYXVsdDogICAgICBDaGVja0xpbmtTdGF0ZQorCitSTE1UIG1vbml0b3JzIHRoZSBzdGF0dXMgb2YgdGhlIHBvcnQuIElmIHRoZSBsaW5rIG9mIHRoZSBhY3RpdmUgcG9ydCAKK2ZhaWxzLCBSTE1UIHN3aXRjaGVzIGltbWVkaWF0ZWx5IHRvIHRoZSBzdGFuZGJ5IGxpbmsuIFRoZSB2aXJ0dWFsIGxpbmsgaXMgCittYWludGFpbmVkIGFzIGxvbmcgYXMgYXQgbGVhc3Qgb25lICdwaHlzaWNhbCcgbGluayBpcyB1cC4gCisKK1Bvc3NpYmxlIG1vZGVzOgorCisgICAtLSBDaGVja0xpbmtTdGF0ZSAtIENoZWNrIGxpbmsgc3RhdGUgb25seTogUkxNVCB1c2VzIHRoZSBsaW5rIHN0YXRlCisgICAgICByZXBvcnRlZCBieSB0aGUgYWRhcHRlciBoYXJkd2FyZSBmb3IgZWFjaCBpbmRpdmlkdWFsIHBvcnQgdG8gCisgICAgICBkZXRlcm1pbmUgd2hldGhlciBhIHBvcnQgY2FuIGJlIHVzZWQgZm9yIGFsbCBuZXR3b3JrIHRyYWZmaWMgb3IgCisgICAgICBub3QuCisKKyAgIC0tIENoZWNrTG9jYWxQb3J0IC0gSW4gdGhpcyBtb2RlLCBSTE1UIG1vbml0b3JzIHRoZSBuZXR3b3JrIHBhdGggCisgICAgICBiZXR3ZWVuIHRoZSB0d28gcG9ydHMgb2YgYW4gYWRhcHRlciBieSByZWd1bGFybHkgZXhjaGFuZ2luZyBwYWNrZXRzCisgICAgICBiZXR3ZWVuIHRoZW0uIFRoaXMgbW9kZSByZXF1aXJlcyBhIG5ldHdvcmsgY29uZmlndXJhdGlvbiBpbiB3aGljaCAKKyAgICAgIHRoZSB0d28gcG9ydHMgYXJlIGFibGUgdG8gInNlZSIgZWFjaCBvdGhlciAoaS5lLiB0aGVyZSBtdXN0IG5vdCBiZSAKKyAgICAgIGFueSByb3V0ZXIgYmV0d2VlbiB0aGUgcG9ydHMpLgorCisgICAtLSBDaGVja1NlZyAtIENoZWNrIGxvY2FsIHBvcnQgYW5kIHNlZ21lbnRhdGlvbjogVGhpcyBtb2RlIHN1cHBvcnRzIHRoZQorICAgICAgc2FtZSBmdW5jdGlvbnMgYXMgdGhlIENoZWNrTG9jYWxQb3J0IG1vZGUgYW5kIGFkZGl0aW9uYWxseSBjaGVja3MgCisgICAgICBuZXR3b3JrIHNlZ21lbnRhdGlvbiBiZXR3ZWVuIHRoZSBwb3J0cy4gVGhlcmVmb3JlLCB0aGlzIG1vZGUgaXMgb25seQorICAgICAgdG8gYmUgdXNlZCBpZiBHaWdhYml0IEV0aGVybmV0IHN3aXRjaGVzIGFyZSBpbnN0YWxsZWQgb24gdGhlIG5ldHdvcmsKKyAgICAgIHRoYXQgaGF2ZSBiZWVuIGNvbmZpZ3VyZWQgdG8gdXNlIHRoZSBTcGFubmluZyBUcmVlIHByb3RvY29sLiAKKworICAgLS0gRHVhbE5ldCAtIEluIHRoaXMgbW9kZSwgcG9ydHMgQSBhbmQgQiBhcmUgdXNlZCBhcyBzZXBhcmF0ZSBkZXZpY2VzLiAKKyAgICAgIElmIHlvdSBoYXZlIGEgZHVhbCBwb3J0IGFkYXB0ZXIsIHBvcnQgQSB3aWxsIGJlIGNvbmZpZ3VyZWQgYXMgZXRoMCAKKyAgICAgIGFuZCBwb3J0IEIgYXMgZXRoMS4gQm90aCBwb3J0cyBjYW4gYmUgdXNlZCBpbmRlcGVuZGVudGx5IHdpdGggCisgICAgICBkaXN0aW5jdCBJUCBhZGRyZXNzZXMuIFRoZSBwcmVmZXJyZWQgcG9ydCBzZXR0aW5nIGlzIG5vdCB1c2VkLiAKKyAgICAgIFJMTVQgaXMgdHVybmVkIG9mZi4KKyAgIAorTk9URTogUkxNVCBtb2RlcyBDTFAgYW5kIENMUFNTIGFyZSBkZXNpZ25lZCB0byBvcGVyYXRlIGluIGNvbmZpZ3VyYXRpb25zIAorICAgICAgd2hlcmUgYSBuZXR3b3JrIHBhdGggYmV0d2VlbiB0aGUgcG9ydHMgb24gb25lIGFkYXB0ZXIgZXhpc3RzLiAKKyAgICAgIE1vcmVvdmVyLCB0aGV5IGFyZSBub3QgZGVzaWduZWQgdG8gd29yayB3aGVyZSBhZGFwdGVycyBhcmUgY29ubmVjdGVkCisgICAgICBiYWNrLXRvLWJhY2suCisqKioKKworCis1ICBMYXJnZSBGcmFtZSBTdXBwb3J0Cis9PT09PT09PT09PT09PT09PT09PT09CisKK1RoZSBkcml2ZXIgc3VwcG9ydHMgbGFyZ2UgZnJhbWVzIChhbHNvIGNhbGxlZCBqdW1ibyBmcmFtZXMpLiBVc2luZyBsYXJnZSAKK2ZyYW1lcyBjYW4gcmVzdWx0IGluIGFuIGltcHJvdmVkIHRocm91Z2hwdXQgaWYgdHJhbnNmZXJyaW5nIGxhcmdlIGFtb3VudHMgCitvZiBkYXRhLgorVG8gZW5hYmxlIGxhcmdlIGZyYW1lcywgc2V0IHRoZSBNVFUgKG1heGltdW0gdHJhbnNmZXIgdW5pdCkgb2YgdGhlIAoraW50ZXJmYWNlIHRvIHRoZSBkZXNpcmVkIHZhbHVlICh1cCB0byA5MDAwKSwgZXhlY3V0ZSB0aGUgZm9sbG93aW5nIAorY29tbWFuZDoKKyAgICAgIGlmY29uZmlnIGV0aDAgbXR1IDkwMDAKK1RoaXMgd2lsbCBvbmx5IHdvcmsgaWYgeW91IGhhdmUgdHdvIGFkYXB0ZXJzIGNvbm5lY3RlZCBiYWNrLXRvLWJhY2sKK29yIGlmIHlvdSB1c2UgYSBzd2l0Y2ggdGhhdCBzdXBwb3J0cyBsYXJnZSBmcmFtZXMuIFdoZW4gdXNpbmcgYSBzd2l0Y2gsIAoraXQgc2hvdWxkIGJlIGNvbmZpZ3VyZWQgdG8gYWxsb3cgbGFyZ2UgZnJhbWVzIGFuZCBhdXRvLW5lZ290aWF0aW9uIHNob3VsZCAgCitiZSBzZXQgdG8gT0ZGLiBUaGUgc2V0dGluZyBtdXN0IGJlIGNvbmZpZ3VyZWQgb24gYWxsIGFkYXB0ZXJzIHRoYXQgY2FuIGJlIAorcmVhY2hlZCBieSB0aGUgbGFyZ2UgZnJhbWVzLiBJZiBvbmUgYWRhcHRlciBpcyBub3Qgc2V0IHRvIHJlY2VpdmUgbGFyZ2UgCitmcmFtZXMsIGl0IHdpbGwgc2ltcGx5IGRyb3AgdGhlbS4KKworWW91IGNhbiBzd2l0Y2ggYmFjayB0byB0aGUgc3RhbmRhcmQgZXRoZXJuZXQgZnJhbWUgc2l6ZSBieSBleGVjdXRpbmcgdGhlIAorZm9sbG93aW5nIGNvbW1hbmQ6CisgICAgICBpZmNvbmZpZyBldGgwIG10dSAxNTAwCisKK1RvIHBlcm1hbmVudGx5IGNvbmZpZ3VyZSB0aGlzIHNldHRpbmcsIGFkZCBhIHNjcmlwdCB3aXRoIHRoZSAnaWZjb25maWcnIAorbGluZSB0byB0aGUgc3lzdGVtIHN0YXJ0dXAgc2VxdWVuY2UgKG5hbWVkIHNvbWV0aGluZyBsaWtlICJTOTlzazk4bGluIiAKK2luIC9ldGMvcmMuZC9yYzIuZCkuCisqKioKKworCis2ICBWTEFOIGFuZCBMaW5rIEFnZ3JlZ2F0aW9uIFN1cHBvcnQgKElFRUUgODAyLjEsIDgwMi4xcSwgODAyLjNhZCkKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitUaGUgTWFydmVsbCBZdWtvbi9TeXNLb25uZWN0IExpbnV4IGRyaXZlcnMgYXJlIGFibGUgdG8gc3VwcG9ydCBWTEFOIGFuZCAKK0xpbmsgQWdncmVnYXRpb24gYWNjb3JkaW5nIHRvIElFRUUgc3RhbmRhcmRzIDgwMi4xLCA4MDIuMXEsIGFuZCA4MDIuM2FkLiAKK1RoZXNlIGZlYXR1cmVzIGFyZSBvbmx5IGF2YWlsYWJsZSBhZnRlciBpbnN0YWxsYXRpb24gb2Ygb3BlbiBzb3VyY2UgCittb2R1bGVzIGF2YWlsYWJsZSBvbiB0aGUgSW50ZXJuZXQ6CitGb3IgVkxBTiBnbyB0bzogaHR0cDovL3d3dy5jYW5kZWxhdGVjaC5jb20vfmdyZWVhci92bGFuLmh0bWwKK0ZvciBMaW5rIEFnZ3JlZ2F0aW9uIGdvIHRvOiBodHRwOi8vd3d3LnN0LnJpbS5vci5qcC9+eXVtbworCitOT1RFOiBTeXNLb25uZWN0IEdtYkggZG9lcyBub3Qgb2ZmZXIgYW55IHN1cHBvcnQgZm9yIHRoZXNlIG9wZW4gc291cmNlIAorICAgICAgbW9kdWxlcyBhbmQgZG9lcyBub3QgdGFrZSB0aGUgcmVzcG9uc2liaWxpdHkgZm9yIGFueSBraW5kIG9mIAorICAgICAgZmFpbHVyZXMgb3IgcHJvYmxlbXMgYXJpc2luZyBpbiBjb25uZWN0aW9uIHdpdGggdGhlc2UgbW9kdWxlcy4KKworTk9URTogQ29uZmlndXJpbmcgTGluayBBZ2dyZWdhdGlvbiBvbiBhIFN5c0tvbm5lY3QgZHVhbCBsaW5rIGFkYXB0ZXIgbWF5IAorICAgICAgY2F1c2UgcHJvYmxlbXMgd2hlbiB1bmxvYWRpbmcgdGhlIGRyaXZlci4KKworCis3ICBUcm91Ymxlc2hvb3RpbmcKKz09PT09PT09PT09PT09PT09PQorCitJZiBhbnkgcHJvYmxlbXMgb2NjdXIgZHVyaW5nIHRoZSBpbnN0YWxsYXRpb24gcHJvY2VzcywgY2hlY2sgdGhlIAorZm9sbG93aW5nIGxpc3Q6CisKKworUHJvYmxlbTogIFRoZSBTSy05OHh4IGFkYXB0ZXIgY2FuIG5vdCBiZSBmb3VuZCBieSB0aGUgZHJpdmVyLgorU29sdXRpb246IEluIC9wcm9jL3BjaSBzZWFyY2ggZm9yIHRoZSBmb2xsb3dpbmcgZW50cnk6CisgICAgICAgICAgICAgJ0V0aGVybmV0IGNvbnRyb2xsZXI6IFN5c0tvbm5lY3QgU0stOTh4eCAuLi4nCisgICAgICAgICAgSWYgdGhpcyBlbnRyeSBleGlzdHMsIHRoZSBTSy05OHh4IG9yIFNLLTk4eHggVjIuMCBhZGFwdGVyIGhhcyAKKyAgICAgICAgICBiZWVuIGZvdW5kIGJ5IHRoZSBzeXN0ZW0gYW5kIHNob3VsZCBiZSBvcGVyYXRpb25hbC4KKyAgICAgICAgICBJZiB0aGlzIGVudHJ5IGRvZXMgbm90IGV4aXN0IG9yIGlmIHRoZSBmaWxlICcvcHJvYy9wY2knIGlzIG5vdCAKKyAgICAgICAgICBmb3VuZCwgdGhlcmUgbWF5IGJlIGEgaGFyZHdhcmUgcHJvYmxlbSBvciB0aGUgUENJIHN1cHBvcnQgbWF5IAorICAgICAgICAgIG5vdCBiZSBlbmFibGVkIGluIHlvdXIga2VybmVsLgorICAgICAgICAgIFRoZSBhZGFwdGVyIGNhbiBiZSBjaGVja2VkIHVzaW5nIHRoZSBkaWFnbm9zdGljcyBwcm9ncmFtIHdoaWNoIAorICAgICAgICAgIGlzIGF2YWlsYWJsZSBvbiB0aGUgU3lzS29ubmVjdCB3ZWIgc2l0ZToKKyAgICAgICAgICB3d3cuc3lza29ubmVjdC5jb20KKyAgICAgICAgICAKKyAgICAgICAgICBTb21lIENPTVBBUSBtYWNoaW5lcyBoYXZlIHByb2JsZW1zIGRlYWxpbmcgd2l0aCBQQ0kgdW5kZXIgTGludXguCisgICAgICAgICAgTGludXguIFRoaXMgcHJvYmxlbSBpcyBkZXNjcmliZWQgaW4gdGhlICdQQ0kgaG93dG8nIGRvY3VtZW50CisgICAgICAgICAgKGluY2x1ZGVkIGluIHNvbWUgZGlzdHJpYnV0aW9ucyBvciBhdmFpbGFibGUgZnJvbSB0aGUKKyAgICAgICAgICB3ZWIsIGUuZy4gYXQgJ3d3dy5saW51eC5vcmcnKS4gCisKKworUHJvYmxlbTogIFByb2dyYW1zIHN1Y2ggYXMgJ2lmY29uZmlnJyBvciAncm91dGUnIGNhbiBub3QgYmUgZm91bmQgb3IgdGhlIAorICAgICAgICAgIGVycm9yIG1lc3NhZ2UgJ09wZXJhdGlvbiBub3QgcGVybWl0dGVkJyBpcyBkaXNwbGF5ZWQuCitSZWFzb246ICAgWW91IGFyZSBub3QgbG9nZ2VkIGluIGFzIHVzZXIgJ3Jvb3QnLgorU29sdXRpb246IExvZ291dCBhbmQgbG9naW4gYXMgJ3Jvb3QnIG9yIGNoYW5nZSB0byAncm9vdCcgdmlhICdzdScuCisKKworUHJvYmxlbTogIFVwb24gdXNlIG9mIHRoZSBjb21tYW5kICdwaW5nIDxhZGRyZXNzPicgdGhlIG1lc3NhZ2UKKyAgICAgICAgICAicGluZzogc2VuZHRvOiBOZXR3b3JrIGlzIHVucmVhY2hhYmxlIiBpcyBkaXNwbGF5ZWQuCitSZWFzb246ICAgWW91ciByb3V0ZSBpcyBub3Qgc2V0IGNvcnJlY3RseS4KK1NvbHV0aW9uOiBJZiB5b3UgYXJlIHVzaW5nIFJlZEhhdCwgeW91IHByb2JhYmx5IGZvcmdvdCB0byBzZXQgdXAgdGhlIAorICAgICAgICAgIHJvdXRlIGluIHRoZSAnbmV0d29yayBjb25maWd1cmF0aW9uJy4KKyAgICAgICAgICBDaGVjayB0aGUgZXhpc3Rpbmcgcm91dGVzIHdpdGggdGhlICdyb3V0ZScgY29tbWFuZCBhbmQgY2hlY2sgCisgICAgICAgICAgaWYgYW4gZW50cnkgZm9yICdldGgwJyBleGlzdHMsIGFuZCBpZiBzbywgaWYgaXQgaXMgc2V0IGNvcnJlY3RseS4KKworCitQcm9ibGVtOiAgVGhlIGRyaXZlciBjYW4gYmUgc3RhcnRlZCwgdGhlIGFkYXB0ZXIgaXMgY29ubmVjdGVkIHRvIHRoZSAKKyAgICAgICAgICBuZXR3b3JrLCBidXQgeW91IGNhbm5vdCByZWNlaXZlIG9yIHRyYW5zbWl0IGFueSBwYWNrZXRzOyAKKyAgICAgICAgICBlLmcuICdwaW5nJyBkb2VzIG5vdCB3b3JrLgorUmVhc29uOiAgIFRoZXJlIGlzIGFuIGluY29ycmVjdCByb3V0ZSBpbiB5b3VyIHJvdXRpbmcgdGFibGUuCitTb2x1dGlvbjogQ2hlY2sgdGhlIHJvdXRpbmcgdGFibGUgd2l0aCB0aGUgY29tbWFuZCAncm91dGUnIGFuZCByZWFkIHRoZSAKKyAgICAgICAgICBtYW51YWwgaGVscCBwYWdlcyBkZWFsaW5nIHdpdGggcm91dGVzIChlbnRlciAnbWFuIHJvdXRlJykuCisKK05PVEU6IEFsdGhvdWdoIHRoZSAyLjIueCBrZXJuZWwgdmVyc2lvbnMgZ2VuZXJhdGUgdGhlIHJvdXRpbmcgZW50cnkgCisgICAgICBhdXRvbWF0aWNhbGx5LCBwcm9ibGVtcyBvZiB0aGlzIGtpbmQgbWF5IG9jY3VyIGhlcmUgYXMgd2VsbC4gV2UndmUgCisgICAgICBjb21lIGFjcm9zcyBhIHNpdHVhdGlvbiBpbiB3aGljaCB0aGUgZHJpdmVyIHN0YXJ0ZWQgY29ycmVjdGx5IGF0IAorICAgICAgc3lzdGVtIHN0YXJ0LCBidXQgYWZ0ZXIgdGhlIGRyaXZlciBoYXMgYmVlbiByZW1vdmVkIGFuZCByZWxvYWRlZCwKKyAgICAgIHRoZSByb3V0ZSBvZiB0aGUgYWRhcHRlcidzIG5ldHdvcmsgcG9pbnRlZCB0byB0aGUgJ2R1bW15MCdkZXZpY2UgCisgICAgICBhbmQgaGFkIHRvIGJlIGNvcnJlY3RlZCBtYW51YWxseS4KKworCitQcm9ibGVtOiAgWW91ciBjb21wdXRlciBzaG91bGQgYWN0IGFzIGEgcm91dGVyIGJldHdlZW4gbXVsdGlwbGUgCisgICAgICAgICAgSVAgc3VibmV0d29ya3MgKHVzaW5nIG11bHRpcGxlIGFkYXB0ZXJzKSwgYnV0IGNvbXB1dGVycyBpbiAKKyAgICAgICAgICBvdGhlciBzdWJuZXR3b3JrcyBjYW5ub3QgYmUgcmVhY2hlZC4KK1JlYXNvbjogICBFaXRoZXIgdGhlIHJvdXRlcidzIGtlcm5lbCBpcyBub3QgY29uZmlndXJlZCBmb3IgSVAgZm9yd2FyZGluZyAKKyAgICAgICAgICBvciB0aGUgcm91dGluZyB0YWJsZSBhbmQgZ2F0ZXdheSBjb25maWd1cmF0aW9uIG9mIGF0IGxlYXN0IG9uZSAKKyAgICAgICAgICBjb21wdXRlciBpcyBub3Qgd29ya2luZy4KKworUHJvYmxlbTogIFVwb24gZHJpdmVyIHN0YXJ0LCB0aGUgZm9sbG93aW5nIGVycm9yIG1lc3NhZ2UgaXMgZGlzcGxheWVkOgorICAgICAgICAgICJldGgwOiAtLSBFUlJPUiAtLQorICAgICAgICAgIENsYXNzOiBpbnRlcm5hbCBTb2Z0d2FyZSBlcnJvcgorICAgICAgICAgIE5yOiAgICAweGNjCisgICAgICAgICAgTXNnOiAgIFNrR2VJbml0UG9ydCgpIGNhbm5vdCBpbml0IHJ1bm5pbmcgcG9ydHMiCitSZWFzb246ICAgWW91IGFyZSB1c2luZyBhIGRyaXZlciBjb21waWxlZCBmb3Igc2luZ2xlIHByb2Nlc3NvciBtYWNoaW5lcyAKKyAgICAgICAgICBvbiBhIG11bHRpcHJvY2Vzc29yIG1hY2hpbmUgd2l0aCBTTVAgKFN5bW1ldHJpYyBNdWx0aVByb2Nlc3NvcikgCisgICAgICAgICAga2VybmVsLgorU29sdXRpb246IENvbmZpZ3VyZSB5b3VyIGtlcm5lbCBhcHByb3ByaWF0ZWx5IGFuZCByZWNvbXBpbGUgdGhlIGtlcm5lbCBvcgorICAgICAgICAgIHRoZSBtb2R1bGVzLgorCisKKworSWYgeW91ciBwcm9ibGVtIGlzIG5vdCBsaXN0ZWQgaGVyZSwgcGxlYXNlIGNvbnRhY3QgU3lzS29ubmVjdCdzIHRlY2huaWNhbAorc3VwcG9ydCBmb3IgaGVscCAobGludXhAc3lza29ubmVjdC5kZSkuCitXaGVuIGNvbnRhY3Rpbmcgb3VyIHRlY2huaWNhbCBzdXBwb3J0LCBwbGVhc2UgZW5zdXJlIHRoYXQgdGhlIGZvbGxvd2luZyAKK2luZm9ybWF0aW9uIGlzIGF2YWlsYWJsZToKKy0gU3lzdGVtIE1hbnVmYWN0dXJlciBhbmQgSFcgSW5mb3JtYXRpb25zIChDUFUsIE1lbW9yeS4uLiApCistIFBDSS1Cb2FyZHMgaW4geW91ciBzeXN0ZW0KKy0gRGlzdHJpYnV0aW9uCistIEtlcm5lbCB2ZXJzaW9uCistIERyaXZlciB2ZXJzaW9uCisqKioKKworCisKKyoqKkVuZCBvZiBSZWFkbWUgRmlsZSoqKgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3NrZnAudHh0IGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3NrZnAudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNhNDE5ZWQKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvc2tmcC50eHQKQEAgLTAsMCArMSwyMjAgQEAKKyhDKUNvcHlyaWdodCAxOTk4LTIwMDAgU3lzS29ubmVjdCwKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitza2ZwLnR4dCBjcmVhdGVkIDExLU1heS0yMDAwCisKK1JlYWRtZSBGaWxlIGZvciBza2ZwLm8gdjIuMDYKKworCitUaGlzIGZpbGUgY29udGFpbnMKKygxKSBPVkVSVklFVworKDIpIFNVUFBPUlRFRCBBREFQVEVSUworKDMpIEdFTkVSQUwgSU5GT1JNQVRJT04KKyg0KSBJTlNUQUxMQVRJT04KKyg1KSBJTkNMVVNJT04gT0YgVEhFIEFEQVBURVIgSU4gU1lTVEVNIFNUQVJUCisoNikgVFJPVUJMRVNIT09USU5HCisoNykgRlVOQ1RJT04gT0YgVEhFIEFEQVBURVIgTEVEUworKDgpIEhJU1RPUlkKKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKworCisoMSkgT1ZFUlZJRVcKKz09PT09PT09PT09PQorCitUaGlzIFJFQURNRSBleHBsYWlucyBob3cgdG8gdXNlIHRoZSBkcml2ZXIgJ3NrZnAnIGZvciBMaW51eCB3aXRoIHlvdXIKK25ldHdvcmsgYWRhcHRlci4KKworQ2hhcHRlciAyOiBDb250YWlucyBhIGxpc3Qgb2YgYWxsIG5ldHdvcmsgYWRhcHRlcnMgdGhhdCBhcmUgc3VwcG9ydGVkIGJ5CisJICAgdGhpcyBkcml2ZXIuCisKK0NoYXB0ZXIgMzogR2l2ZXMgc29tZSBnZW5lcmFsIGluZm9ybWF0aW9uLgorCitDaGFwdGVyIDQ6IERlc2NyaWJlcyBjb21tb24gcHJvYmxlbXMgYW5kIHNvbHV0aW9ucy4KKworQ2hhcHRlciA1OiBTaG93cyB0aGUgY2hhbmdlZCBmdW5jdGlvbmFsaXR5IG9mIHRoZSBhZGFwdGVyIExFRHMuCisKK0NoYXB0ZXIgNjogSGlzdG9yeSBvZiBkZXZlbG9wbWVudC4KKworKioqCisKKworKDIpIFNVUFBPUlRFRCBBREFQVEVSUworPT09PT09PT09PT09PT09PT09PT09PQorCitUaGUgbmV0d29yayBkcml2ZXIgJ3NrZnAnIHN1cHBvcnRzIHRoZSBmb2xsb3dpbmcgbmV0d29yayBhZGFwdGVyczoKK1N5c0tvbm5lY3QgYWRhcHRlcnM6CisgIC0gU0stNTUyMSAoU0stTkVUIEZEREktVVApCisgIC0gU0stNTUyMiAoU0stTkVUIEZEREktVVAgREFTKQorICAtIFNLLTU1NDEgKFNLLU5FVCBGRERJLUZQKQorICAtIFNLLTU1NDMgKFNLLU5FVCBGRERJLUxQKQorICAtIFNLLTU1NDQgKFNLLU5FVCBGRERJLUxQIERBUykKKyAgLSBTSy01ODIxIChTSy1ORVQgRkRESS1VUDY0KQorICAtIFNLLTU4MjIgKFNLLU5FVCBGRERJLVVQNjQgREFTKQorICAtIFNLLTU4NDEgKFNLLU5FVCBGRERJLUZQNjQpCisgIC0gU0stNTg0MyAoU0stTkVUIEZEREktTFA2NCkKKyAgLSBTSy01ODQ0IChTSy1ORVQgRkRESS1MUDY0IERBUykKK0NvbXBhcSBhZGFwdGVycyAobm90IHRlc3RlZCk6CisgIC0gTmV0ZWxsaWdlbnQgMTAwIEZEREkgREFTIEZpYnJlIFNDCisgIC0gTmV0ZWxsaWdlbnQgMTAwIEZEREkgU0FTIEZpYnJlIFNDCisgIC0gTmV0ZWxsaWdlbnQgMTAwIEZEREkgREFTIFVUUAorICAtIE5ldGVsbGlnZW50IDEwMCBGRERJIFNBUyBVVFAKKyAgLSBOZXRlbGxpZ2VudCAxMDAgRkRESSBTQVMgRmlicmUgTUlDCisqKioKKworCisoMykgR0VORVJBTCBJTkZPUk1BVElPTgorPT09PT09PT09PT09PT09PT09PT09PT0KKworRnJvbSB2Mi4wMSBvbiwgdGhlIGRyaXZlciBpcyBpbnRlZ3JhdGVkIGluIHRoZSBsaW51eCBrZXJuZWwgc291cmNlcy4KK1RoZXJlZm9yLCB0aGUgaW5zdGFsbGF0aW9uIGlzIHRoZSBzYW1lIGFzIGZvciBhbnkgb3RoZXIgYWRhcHRlcgorc3VwcG9ydGVkIGJ5IHRoZSBrZXJuZWwuCitSZWZlciB0byB0aGUgbWFudWFsIG9mIHlvdXIgZGlzdHJpYnV0aW9uIGFib3V0IHRoZSBpbnN0YWxsYXRpb24KK29mIG5ldHdvcmsgYWRhcHRlcnMuCitNYWtlcyBteSBsaWZlIG11Y2ggZWFzaWVyIDotKQorKioqCisKKworKDQpIFRST1VCTEVTSE9PVElORworPT09PT09PT09PT09PT09PT09PQorCitJZiB5b3UgcnVuIGludG8gcHJvYmxlbXMgZHVyaW5nIGluc3RhbGxhdGlvbiwgY2hlY2sgdGhvc2UgaXRlbXM6CisKK1Byb2JsZW06ICBUaGUgRkRESSBhZGFwdGVyIGNhbiBub3QgYmUgZm91bmQgYnkgdGhlIGRyaXZlci4KK1JlYXNvbjogICBMb29rIGluIC9wcm9jL3BjaSBmb3IgdGhlIGZvbGxvd2luZyBlbnRyeToKKyAgICAgICAgICAgICAnRkRESSBuZXR3b3JrIGNvbnRyb2xsZXI6IFN5c0tvbm5lY3QgU0stRkRESS1QQ0kgLi4uJworCSAgSWYgdGhpcyBlbnRyeSBleGlzdHMsIHRoZW4gdGhlIEZEREkgYWRhcHRlciBoYXMgYmVlbgorCSAgZm91bmQgYnkgdGhlIHN5c3RlbSBhbmQgc2hvdWxkIGJlIGFibGUgdG8gYmUgdXNlZC4KKwkgIElmIHRoaXMgZW50cnkgZG9lcyBub3QgZXhpc3Qgb3IgaWYgdGhlIGZpbGUgJy9wcm9jL3BjaScKKwkgIGlzIG5vdCB0aGVyZSwgdGhlbiB5b3UgbWF5IGhhdmUgYSBoYXJkd2FyZSBwcm9ibGVtIG9yIFBDSQorCSAgc3VwcG9ydCBtYXkgbm90IGJlIGVuYWJsZWQgaW4geW91ciBrZXJuZWwuCisJICBUaGUgYWRhcHRlciBjYW4gYmUgY2hlY2tlZCB1c2luZyB0aGUgZGlhZ25vc3RpYyBwcm9ncmFtCisJICB3aGljaCBpcyBhdmFpbGFibGUgZnJvbSB0aGUgU3lzS29ubmVjdCB3ZWIgc2l0ZToKKwkgICAgICB3d3cuc3lza29ubmVjdC5kZQorCSAgU29tZSBDT01QQVEgbWFjaGluZXMgaGF2ZSBhIHByb2JsZW0gd2l0aCBQQ0kgdW5kZXIKKwkgIExpbnV4LiBUaGlzIGlzIGRlc2NyaWJlZCBpbiB0aGUgJ1BDSSBob3d0bycgZG9jdW1lbnQKKwkgIChpbmNsdWRlZCBpbiBzb21lIGRpc3RyaWJ1dGlvbnMgb3IgYXZhaWxhYmxlIGZyb20gdGhlCisJICB3d3csIGUuZy4gYXQgJ3d3dy5saW51eC5vcmcnKSBhbmQgbm8gd29ya2Fyb3VuZCBpcyBhdmFpbGFibGUuCisKK1Byb2JsZW06ICBZb3Ugd2FudCB0byB1c2UgeW91ciBjb21wdXRlciBhcyBhIHJvdXRlciBiZXR3ZWVuCisgICAgICAgICAgbXVsdGlwbGUgSVAgc3VibmV0d29ya3MgKHVzaW5nIG11bHRpcGxlIGFkYXB0ZXJzKSwgYnV0CisJICB5b3UgY2FuIG5vdCByZWFjaCBjb21wdXRlcnMgaW4gb3RoZXIgc3VibmV0d29ya3MuCitSZWFzb246ICAgRWl0aGVyIHRoZSByb3V0ZXIncyBrZXJuZWwgaXMgbm90IGNvbmZpZ3VyZWQgZm9yIElQCisJICBmb3J3YXJkaW5nIG9yIHRoZXJlIGlzIGEgcHJvYmxlbSB3aXRoIHRoZSByb3V0aW5nIHRhYmxlCisJICBhbmQgZ2F0ZXdheSBjb25maWd1cmF0aW9uIGluIGF0IGxlYXN0IG9uZSBvZiB0aGUKKwkgIGNvbXB1dGVycy4KKworSWYgeW91ciBwcm9ibGVtIGlzIG5vdCBsaXN0ZWQgaGVyZSwgcGxlYXNlIGNvbnRhY3Qgb3VyCit0ZWNobmljYWwgc3VwcG9ydCBmb3IgaGVscC4gCitZb3UgY2FuIHNlbmQgZW1haWwgdG86CisgIGxpbnV4QHN5c2tvbm5lY3QuZGUKK1doZW4gY29udGFjdGluZyBvdXIgdGVjaG5pY2FsIHN1cHBvcnQsCitwbGVhc2UgZW5zdXJlIHRoYXQgdGhlIGZvbGxvd2luZyBpbmZvcm1hdGlvbiBpcyBhdmFpbGFibGU6CistIFN5c3RlbSBNYW51ZmFjdHVyZXIgYW5kIE1vZGVsCistIEJvYXJkcyBpbiB5b3VyIHN5c3RlbQorLSBEaXN0cmlidXRpb24KKy0gS2VybmVsIHZlcnNpb24KKworKioqCisKKworKDUpIEZVTkNUSU9OIE9GIFRIRSBBREFQVEVSIExFRFMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKyAgICAgICAgVGhlIGZ1bmN0aW9uYWxpdHkgb2YgdGhlIExFRCdzIG9uIHRoZSBGRERJIG5ldHdvcmsgYWRhcHRlcnMgd2FzCisgICAgICAgIGNoYW5nZWQgaW4gU01UIHZlcnNpb24gdjIuODIuIFdpdGggdGhpcyBuZXcgU01UIHZlcnNpb24sIHRoZSB5ZWxsb3cKKyAgICAgICAgTEVEIHdvcmtzIGFzIGEgcmluZyBvcGVyYXRpb25hbCBpbmRpY2F0b3IuIEFuIGFjdGl2ZSB5ZWxsb3cgTEVECisgICAgICAgIGluZGljYXRlcyB0aGF0IHRoZSByaW5nIGlzIGRvd24uIFRoZSBncmVlbiBMRUQgb24gdGhlIGFkYXB0ZXIgbm93CisgICAgICAgIHdvcmtzIGFzIGEgbGluayBpbmRpY2F0b3Igd2hlcmUgYW4gYWN0aXZlIEdSRUVOIExFRCBpbmRpY2F0ZXMgdGhhdAorICAgICAgICB0aGUgcmVzcGVjdGl2ZSBwb3J0IGhhcyBhIHBoeXNpY2FsIGNvbm5lY3Rpb24uCisKKyAgICAgICAgV2l0aCB2ZXJzaW9ucyBvZiBTTVQgcHJpb3IgdG8gdjIuODIgYSByaW5nIHVwIHdhcyBpbmRpY2F0ZWQgaWYgdGhlCisgICAgICAgIHllbGxvdyBMRUQgd2FzIG9mZiB3aGlsZSB0aGUgZ3JlZW4gTEVEKHMpIHNob3dlZCB0aGUgY29ubmVjdGlvbgorICAgICAgICBzdGF0dXMgb2YgdGhlIGFkYXB0ZXIuIER1cmluZyBhIHJpbmcgZG93biB0aGUgZ3JlZW4gTEVEIHdhcyBvZmYgYW5kCisgICAgICAgIHRoZSB5ZWxsb3cgTEVEIHdhcyBvbi4KKworICAgICAgICBBbGwgaW1wbGVtZW50YXRpb25zIGluZGljYXRlIHRoYXQgYSBkcml2ZXIgaXMgbm90IGxvYWRlZCBpZgorICAgICAgICBhbGwgTEVEcyBhcmUgb2ZmLgorCisqKioKKworCisoNikgSElTVE9SWQorPT09PT09PT09PT0KKwordjIuMDYgKDIwMDAwNTExKSAoSW4tS2VybmVsIHZlcnNpb24pCisgICAgTmV3IGZlYXR1cmVzOgorCS0gNjQgYml0IHN1cHBvcnQKKwktIG5ldyBwY2kgZG1hIGludGVyZmFjZQorCS0gaW4ga2VybmVsIDIuMy45OQorCit2Mi4wNSAoMjAwMDAyMTcpIChJbi1LZXJuZWwgdmVyc2lvbikKKyAgICBOZXcgZmVhdHVyZXM6CisJLSBDaGFuZ2VzIGZvciAyLjMuNDUga2VybmVsCisKK3YyLjA0ICgyMDAwMDIwNykgKFN0YW5kYWxvbmUgdmVyc2lvbikKKyAgICBOZXcgZmVhdHVyZXM6CisJLSBBZGRlZCByeC90eCBieXRlIGNvdW50ZXIKKwordjIuMDMgKDIwMDAwMTExKSAoU3RhbmRhbG9uZSB2ZXJzaW9uKQorICAgIFByb2JsZW1zIGZpeGVkOgorCS0gRml4ZWQgcHJpbnRrIHN0YXRlbWVudHMgZnJvbSB2Mi4wMgorCit2Mi4wMiAoOTkxMjE1KSAoU3RhbmRhbG9uZSB2ZXJzaW9uKQorICAgIFByb2JsZW1zIGZpeGVkOgorCS0gUmVtb3ZlZCB1bm5lY2Vzc2FyeSBvdXRwdXQKKwktIEZpeGVkIHBhdGggZm9yICJwcmludHZlci5zaCIgaW4gbWFrZWZpbGUKKwordjIuMDEgKDk5MTEyMikgKEluLUtlcm5lbCB2ZXJzaW9uKQorICAgIE5ldyBmZWF0dXJlczoKKwktIEludGVncmF0aW9uIGluIExpbnV4IGtlcm5lbCBzb3VyY2VzCisJLSBTdXBwb3J0IGZvciBtZW1vcnkgbWFwcGVkIEkvTy4KKwordjIuMDAgKDk5MTExMikKKyAgICBOZXcgZmVhdHVyZXM6CisJLSBGdWxsIHNvdXJjZSByZWxlYXNlZCB1bmRlciBHUEwKKwordjEuMDUgKDk5MTAyMykKKyAgICBQcm9ibGVtcyBmaXhlZDoKKwktIENvbXBpbGF0aW9uIHdpdGgga2VybmVsIHZlcnNpb24gMi4yLjEzIGZhaWxlZAorCit2MS4wNCAoOTkwNDI3KQorICAgIENoYW5nZXM6CisJLSBOZXcgU01UIG1vZHVsZSBpbmNsdWRlZCwgY2hhbmdpbmcgTEVEIGZ1bmN0aW9uYWxpdHkKKyAgICBQcm9ibGVtcyBmaXhlZDoKKwktIFN5bmNocm9uaXphdGlvbiBvbiBTTVAgbWFjaGluZXMgd2FzIGJ1Z2d5CisKK3YxLjAzICg5OTAzMjUpCisgICAgUHJvYmxlbXMgZml4ZWQ6CisJLSBJbnRlcnJ1cHQgcm91dGluZyBvbiBTTVAgbWFjaGluZXMgY291bGQgYmUgaW5jb3JyZWN0CisKK3YxLjAyICg5OTAzMTApCisgICAgTmV3IGZlYXR1cmVzOgorCS0gU3VwcG9ydCBmb3Iga2VybmVsIHZlcnNpb25zIDIuMi54IGFkZGVkCisJLSBLZXJuZWwgcGF0Y2ggaW5zdGVhZCBvZiBwcml2YXRlIGR1cGxpY2F0ZSBvZiBrZXJuZWwgZnVuY3Rpb25zCisKK3YxLjAxICg5ODA4MTIpCisgICAgUHJvYmxlbXMgZml4ZWQ6CisJQ29ubmVjdGlvbiBoYW5ndXAgd2l0aCB0ZWxuZXQKKwlTbG93IHRlbG5ldCBjb25uZWN0aW9uCisKK3YxLjAwIGJldGEgMDEgKDk4MDUwNykKKyAgICBOZXcgZmVhdHVyZXM6CisJTm9uZS4KKyAgICBQcm9ibGVtcyBmaXhlZDoKKwlOb25lLgorICAgIEtub3duIGxpbWl0YXRpb25zOgorICAgICAgICAtIHRhciBhcmNoaXZlIGluc3RlYWQgb2Ygc3RhbmRhcmQgcGFja2FnZSBmb3JtYXQgKHJwbSkuCisJLSBGRERJIHN0YXRpc3RpYyBpcyBlbXB0eS4KKwktIG5vdCB0ZXN0ZWQgd2l0aCAyLjEueHgga2VybmVscworCS0gaW50ZWdyYXRpb24gaW4ga2VybmVsIG5vdCB0ZXN0ZWQKKwktIG5vdCB0ZXN0ZWQgc2ltdWx0YW5lb3VzbHkgd2l0aCBGRERJIGFkYXB0ZXJzIGZyb20gb3RoZXIgdmVuZG9ycy4KKwktIG9ubHkgWDg2IHByb2Nlc3NvcnMgc3VwcG9ydGVkLgorCS0gU0JBIChTeW5jaHJvbm91cyBCYW5kd2lkdGggQWxsb2NhdG9yKSBwYXJhbWV0ZXJzIGNhbgorCSAgbm90IGJlIGNvbmZpZ3VyZWQuCisJLSBkb2VzIG5vdCB3b3JrIG9uIHNvbWUgQ09NUEFRIG1hY2hpbmVzLiBTZWUgdGhlIFBDSSBob3d0bworCSAgZG9jdW1lbnQgZm9yIGRldGFpbHMgYWJvdXQgdGhpcyBwcm9ibGVtLgorCS0gZGF0YSBjb3JydXB0aW9uIHdpdGgga2VybmVsIHZlcnNpb25zIGJlbG93IDIuMC4zMy4KKworKioqIEVuZCBvZiBpbmZvcm1hdGlvbiBmaWxlICoqKgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3NsaWNlY29tLmh1biBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9zbGljZWNvbS5odW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWFjZjE5MQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9zbGljZWNvbS5odW4KQEAgLTAsMCArMSwzNzEgQEAKKworU2xpY2VDT00gYWRhcHRlciBmZWxoYXN6bmFsb2kgZG9rdW1lbnRhY2lvamEgLSAwLjUxIHZlcnppb2hvegorCitCYXJ082sgSXN0duFuIDxiYXJ0b2tpQGl0Yy5odT4KK1V0b2xzbyBtb2Rvc2l0YXM6IFdlZCBBdWcgMjkgMTc6MjY6NTggQ0VTVCAyMDAxCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0hhc3puYWxhdGE6CisKK0ZvcmRpdGFzOgorCitDb2RlIG1hdHVyaXR5IGxldmVsIG9wdGlvbnMKKwlbKl0gUHJvbXB0IGZvciBkZXZlbG9wbWVudCBhbmQvb3IgaW5jb21wbGV0ZSBjb2RlL2RyaXZlcnMKKworTmV0d29yayBkZXZpY2Ugc3VwcG9ydAorCVdhbiBpbnRlcmZhY2VzCisJCTxNPiBNdWx0aUdhdGUgKENPTVgpIHN5bmNocm9ub3VzCisJCQk8TT4gU3VwcG9ydCBmb3IgTVVOSUNIIGJhc2VkIGJvYXJkczogU2xpY2VDT00sIFBDSUNPTSAoTkVXKQorCQkJPE0+IFN1cHBvcnQgZm9yIEhETEMgYW5kIHN5bmNQUFAuLi4KKworCitBIG1vZHVsb2sgYmV0b2x0ZXNlOgorCittb2Rwcm9iZSBjb214CisKK21vZHByb2JlIGNvbXgtcHJvdG8tcHBwCQkjIGEgQ2lzY28tSERMQyBlcyBhIFN5bmNQUFAgcHJvdG9rb2xsdCBpcworCQkJCSMgZXogYSBtb2R1bCBhZGphCisKK21vZHByb2JlIGNvbXgtaHctbXVuaWNoCQkjIGEgbW9kdWwgYmV0b2x0b2Rlc2tvciBhem9ubmFsIGplbGVudCBhCisJCQkJIyBzeXNsb2diYSBhIGRldGVrdGFsdCBrYXJ0eWFrcm9sCisKKworS29uZmlndXJhbGFzOgorCisjIEV6ZW4gYXogaW50ZXJmZXN6ZW4gQ2lzY28tSERMQyB2b25hbGkgcHJvdG9rb2xsIGZvZyBmdXRuaQorIyBBeiBpbnRlcmZlc3poZXogcmVuZGVsdCBpZG9zemVsZXRlazogMSwyICgxMjgga2JpdC9zZWMtZXMgdm9uYWwpCisjIChhIEcuNzAzIGtlcmV0YmVuIGF6IGVsc28gYWRhdG90IHZpdm8gaWRvc3plbGV0IGF6IDEtZXMpCisjCitta2RpciAvcHJvYy9jb214L2NvbXgwLjEvCitlY2hvIHNsaWNlY29tCT4vcHJvYy9jb214L2NvbXgwLjEvYm9hcmR0eXBlCitlY2hvIGhkbGMJPi9wcm9jL2NvbXgvY29teDAuMS9wcm90b2NvbAorZWNobyAxIDIJPi9wcm9jL2NvbXgvY29teDAuMS90aW1lc2xvdHMKKworCisjIEV6ZW4gYXogaW50ZXJmZXN6ZW4gU3luY1BQUCB2b25hbGkgcHJvdG9rb2xsIGZvZyBmdXRuaQorIyBBeiBpbnRlcmZlc3poZXogcmVuZGVsdCBpZG9zemVsZXQ6IDMgKDY0IGtiaXQvc2VjLWVzIHZvbmFsKQorIworbWtkaXIgL3Byb2MvY29teC9jb214MC4yLworZWNobyBzbGljZWNvbQk+L3Byb2MvY29teC9jb214MC4yL2JvYXJkdHlwZQorZWNobyBwcHAJPi9wcm9jL2NvbXgvY29teDAuMi9wcm90b2NvbAorZWNobyAzCQk+L3Byb2MvY29teC9jb214MC4yL3RpbWVzbG90cworCisuLi4KKworaWZjb25maWcgY29teDAuMSB1cAoraWZjb25maWcgY29teDAuMiB1cAorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitBIENPTVggZHJpdmVyZWsgZGVmYXVsdCAyMCBjc29tYWdueWkgdHJhbnNtaXQgcXVldWUtdCByZW5kZWxuZWsgYSBoYWxvemF0aQoraW50ZXJmZXN6ZWtoZXouIFdBTiBoYWxvemF0b2tiYW4gZW5uZWwgaG9zc3phYmJhdCBpcyBzem9rYXMgaGFzem5hbG5pCisoMjAgZXMgMTAwIGtvem90dCksIGhvZ3kgYSB2b25hbCBraWhhc3puYWx0c2FnYSBuYWd5IHRlcmhlbGVzIGVzZXRlbiBqb2JiCitsZWd5ZW4gKGJhciBlenplbCBtZWdubyBhIHZhcmhhdG8ga2VzbGVsdGV0ZXMgYSBjc29tYWdvayBzb3JiYW4gYWxsYXNhIG1pYXR0KToKKworIyBpZmNvbmZpZyBjb214MCB0eHF1ZXVlbGVuIDUwCisKK0V6dCBhIGJlYWxsaXRhc2kgbGVoZXRvc2VnZXQgY3NhayBheiB1amFiYiBkaXN6dHJpYnVjaW9rIGlmY29uZmlnIHBhcmFuY3NhCit0YW1vZ2F0amEgKGFtaWsgbWFyIGEgMi4yIGtlcm5lbGVraGV6IGtlc3p1bHRlaywgbWludCBhIFJlZEhhdCA2LjEgdmFneSBhCitEZWJpYW4gMi4yKS4KKworQSAyLjEtZXMgRGViaWFuIGRpc3p0cmlidWNpb2hveiBhIGh0dHA6Ly93d3cuZGViaWFuLm9yZy9+cmN3LzIuMi9uZXRiYXNlLworY2ltcm9sIHRvbHRoZXRvIGxlIHVqYWJiIG5ldGJhc2UgY3NvbWFnLCBhbWkgbWFyIGlseWV0IHRhbW9nYXRvIGlmY29uZmlnCitwYXJhbmNzb3QgdGFydGFsbWF6LiBCb3ZlYmJlbiBhIDIuMiBrZXJuZWwgaGFzem5hbGF0YXJvbCBEZWJpYW4gMi4xIGFsYXR0OgoraHR0cDovL3d3dy5kZWJpYW4ub3JnL3JlbGVhc2VzL3N0YWJsZS9ydW5uaW5nLWtlcm5lbC0yLjIKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQSBrYXJ0eWEgTEVELWplaW5layBqZWxlbnRlc2U6CisKK3Bpcm9zCS0gZWcsIGhhIFJlbW90ZSBBbGFybS1vdCBrdWxkIGEgdHVsb2xkYWwKK3pvbGQJLSBlZywgaGEgYSB2ZXR0IGplbGJlbiBtZWd0YWxhbGphIGEga2VyZXRzemlua3JvbnQKKworUmVzemxldGVzZWJiZW46CisKK3Bpcm9zOgl6b2xkOglqZWxlbnRlczoKKworLQktCW5pbmNzIGtlcmV0c3ppbmtyb24gKG5pbmNzIGplbCwgdmFneSByb3NzeiBhIGplbCkKKy0JZWcJIm1pbmRlbiByZW5kYmVuIgorZWcJZWcJYSB2ZXRlbCBPSywgZGUgYSB0dWxvbGRhbCBSZW1vdGUgQWxhcm0tb3Qga3VsZAorZWcJLQlleiBuaW5jcyBlcnRlbG1lenZlLCBlZ3llbG9yZSBmdW5rY2lvIG5lbGt1bAorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitSZXN6bGV0ZXNlYmIgbGVpcmFzIGEgaGFyZHZlciBiZWFsbGl0YXNpIGxlaGV0b3NlZ2Vpcm9sOgorCitBeiBhbHRhbGFub3MsLSBlcyBhIHByb3Rva29sbC1yZXRlZ2VrIGJlYWxsaXRhc2kgbGVoZXRvc2VnZWlyb2wgYSAnY29teC50eHQnCitmYWpsYmFuIGxlaXJ0YWsgU2xpY2VDT00ga2FydHlhbmFsIGlzIGVydmVueWVzZWssIGl0dCBjc2FrIGEgaGFyZHZlci1zcGVjaWZpa3VzCitiZWFsbGl0YXNpIGxlaGV0b3NlZ2VrIHZhbm5hayBvc3N6ZWZvZ2xhbHZhOgorCitLb25maWd1cmFsYXNpIGludGVyZmVzeiBhIC9wcm9jL2NvbXgvIGFsYXR0OgorCitNaW5kZW4gdGltZXNsb3QtY3NvcG9ydG5hayBrdWxvbiBjb214KiBpbnRlcmZlc3p0IGtlbGwgbGV0cmVob3puaSBta2Rpci1yZWw6Citjb214MCwgY29teDEsIC4uIHN0Yi4gSXR0IGJlYWxsaXRoYXRvLCBob2d5IGF6IGFkb3R0IGludGVyZmVzeiBoYW55YWRpayBrYXJ0eWEKK21lbHlpayB0aW1lc2xvdGphKGkpYm9sIGFsbGpvbiBvc3N6ZS4gQSBDaXNjby1mZWxlIHNlcmlhbDM6MSBlbG5ldmV6ZXNlaworKHNlcmlhbDM6MSA9IGEgMy4ga2FydHlhYmFuIGF6IDEtZXMgaWRvc3plbGV0LWNzb3BvcnQpIExpbnV4b24gYWxpYXNpbmctb3QKK2plbGVudGVuZW5laywgZXplcnQgbWkgbmVtIHR1ZHVuayBpbHllbiBlbG5ldmV6ZXN0IGhhc3puYWxuaS4KKworVG9iYiBrYXJ0eWEgZXNldGVuIGEgY29teDAuMSwgY29teDAuMiwgLi4uIHZhZ3kgc2xpY2UwLjEsIHNsaWNlMC4yIG5ldmVrCitoYXN6bmFsaGF0b2FrLgorCitUb2JiIFNsaWNlQ09NIGthcnR5YSBpcyBsZWhldCBlZ3kgZ2VwYmVuLCBkZSBzYWphdCBpbnRlcnJ1cHQga2VsbCBtaW5kZWd5aWtuZWssCituZW0gdHVkIG1lZyBtZWdvc3p0b3R0IGludGVycnVwdG90IGtlemVsbmkuCisKK0F6IGVnZXN6IGthcnR5YXQgZXJpbnRvIGJlYWxsaXRhc29rOgorCitBeiBpb3BvcnQgZXMgaXJxIGJlYWxsaXRhcyBuaW5jczogYW1pdCBhIFBDSSBCSU9TIGtpb3N6dCBhIHJlbmRzemVybmVrLAorYXp0IGhhc3puYWxqYSBhIGRyaXZlci4KKworCitjb214MC9ib2FyZG51bQktIGhhbnlhZGlrIFNsaWNlQ09NIGthcnR5YSBhIGdlcGJlbiAoYSAndGVybWVzemV0ZXMnIFBDSQorCQlzb3JyZW5kYmVuIGVydHZlOiBhaG9neWFuIGEgL3Byb2MvcGNpLWJhbiB2YWd5IGF6ICdsc3BjaScKKwkJa2ltZW5ldGViZW4gbWVnamVsZW5paywgYWx0YWxhYmFuIGF6IGFsYXBsYXBpIFBDSSBtZWdoYWp0bworCQlhcmFta29yb2tob3oga296ZWxlYmIgZXNvIGthcnR5YWsgYSBraXNlYmIgc29yc3phbXVhaykKKworCQlEZWZhdWx0OiAwICgwLXRvbCBrZXpkb2RpayBhIHN6YW1vbGFzKQorCisKK0JhciBhIGtvdmV0a2V6b2tldCBjc2FrIGVneS1lZ3kgaW50ZXJmZXN6ZW4gYWxsaXRqdWsgYXQsIG1lZ2lzIGF6IGVnZXN6IGthcnR5YQorbXVrb2Rlc2V0IGVneXN6ZXJyZSBhbGxpdGphay4gQSBtZWdrb3RlcyBob2d5IGNzYWsgVVAtYmFuIGxldm8gaW50ZXJmZXN6ZW4KK2hhc3puYWxoYXRvYWssIGF6ZXJ0IHZhbiwgbWVydCBrdWxvbmJlbiBuZW0gdmFydCBlcmVkbWVueWVrcmUgdmV6ZXRuZSBlZ3kgaWx5ZW4KK3BhcmFuY2Nzb3JvemF0OgorCisJZWNobyAwICAgICAgICA+Ym9hcmRudW0KKwllY2hvIGludGVybmFsID5jbG9ja19zb3VyY2UKKwllY2hvIDEgICAgICAgID5ib2FyZG51bQorCistIEV6IGEgMC1zIGJvYXJkIGNsb2NrX3NvdXJjZS1hdCBhbGxpdGFuYSBhdC4KKworRXplayBhIGJlYWxsaXRhc29rIG1lZ21hcmFkbmFrIGF6IG9zc3plcyBpbnRlcmZlc3ogdG9ybGVzZWtvciwgZGUgdG9ybG9kbmVrCithIGRyaXZlciBtb2R1bCBraS9iZXRvbHRlc2Vrb3IuCisKKworY29teDAvY2xvY2tfc291cmNlIC0gQSBUeCBvcmFqZWxmb3JyYXNhLCBhIENpc2NvLXZhbCBoYXNvbmxhdG9zcmEga2VzenVsdC4KKwlIYXN6bmFsYXRhOgorCisJcGFwYXlhOiMgZWNobyBsaW5lICAgICA+L3Byb2MvY29teC9jb214MC9jbG9ja19zb3VyY2UKKwlwYXBheWE6IyBlY2hvIGludGVybmFsID4vcHJvYy9jb214L2NvbXgwL2Nsb2NrX3NvdXJjZQorCisJbGluZSAgICAgLSBBIFR4IG9yYWplbGV0IGEgdmV0dCBhZGF0Zm9seWFtYm9sIGRla29kb2xqYSwgaWd5ZWtzemlrCisJCWlnYXpvZG5pIGhvenphLiBIYSBuZW0gbGF0IG9yYWplbGV0IGF6IGlucHV0b24sIGFra29yCisJCWF0YWxsIGEgc2FqYXQgb3JhamVsZ2VuZXJhdG9yYXJhLgorCWludGVybmFsIC0gQSBUeCBvcmFqZWxldCBhIHNhamF0IG9yYWplbGdlbmVyYXRvcmEgc3pvbGdhbHRhdGphLgorCisJRGVmYXVsdDogbGluZQorCisJTm9ybWFsIG9zc3plYWxsaXRhcyBlc2V0ZW4gYSB0YXZrb3psZXNpIHN6b2xnYWx0YXRvIGVzemtvemUKKwkocGwuIEhEU0wgbW9kZW0pIGFkamEgYXogb3JhamVsZXQsIGV6ZXJ0IGV6IGEgZGVmYXVsdC4KKworCitjb214MC9mcmFtaW5nCS0gQSBDUkM0IGtpL2JlIGthcGNzb2xhc2EKKworCUEgQ1JDNDogMTYgUENNIGtlcmV0ZXQgKEEgUENNIGtlcmV0IGF6LCBhbWliZSBhIDMyIGRhcmFiIDY0CisJa2lsb2JpdGVzIGNzYXRvcm5hIHZhbiBiZW11bHRpcGxleGFsdmEuIE5lbSBvc3N6ZXRldmVzenRlbmRvIGEgSERMQworCWtlcmV0dGVsLikgMng4IC1hcyBjc29wb3J0b2tyYSBvc3p0YW5haywgZXMgYXpva2hveiA0LTQgYml0ZXMgQ1JDLXQKKwlzemFtb2xuYWsuIEVsc29zb3JiYW4gYSB2b25hbCBtaW5vc2VnZW5layBhIG1vbml0b3JvemFzYXJhIHN6b2xnYWwuCisKKwlwYXBheWE6fiMgZWNobyBjcmM0CT4vcHJvYy9jb214L2NvbXgwL2ZyYW1pbmcKKwlwYXBheWE6fiMgZWNobyBuby1jcmM0CT4vcHJvYy9jb214L2NvbXgwL2ZyYW1pbmcKKworCURlZmF1bHQgYSAnY3JjNCcsIGEgTUFUQVYgdm9uYWxhayBhbHRhbGFiYW4gaWd5IGZ1dG5hay4gRGUgaGEgbmVtCisJZWd5Zm9ybWEgaXMgYSBiZWFsbGl0YXMgYSB2b25hbCBrZXQgdmVnZW4sIGF0dG9sIGEgZm9yZ2Fsb20gYWx0YWxhYmFuCisJYXQgdHVkIG1lbm5pLgorCisKK2NvbXgwL2xpbmVjb2RlCS0gQSB2b25hbGkga29kb2xhcyBiZWFsbGl0YXNhCisKKwlwYXBheWE6fiMgZWNobyBoZGIzCT4vcHJvYy9jb214L2NvbXgwL2xpbmVjb2RlCisJcGFwYXlhOn4jIGVjaG8gYW1pCT4vcHJvYy9jb214L2NvbXgwL2xpbmVjb2RlCisKKwlEZWZhdWx0IGEgJ2hkYjMnLCBhIE1BVEFWIHZvbmFsYWsgaWd5IGZ1dG5hay4KKwkKKwkoYXogQU1JIGtvZG9sYXMgaWdlbiByaXRrYSBFMS1lcyB2b25hbGFrbmFsKS4gSGEgZXogYSBiZWFsbGl0YXMgbmVtCisJZWd5ZXppayBhIHZvbmFsIGtldCB2ZWdlbiwgYWtrb3IgZWxvZm9yZHVsaGF0IGhvZ3kgYSBrZXJldHN6aW5rcm9uCisJb3NzemVqb24sIGRlIENSQzQtaGliYWsgZXMgYSB2b25hbGFrb24gYXR2aXR0IGFkYXRva2JhbiBpcyBoaWJhaworCWtlbGV0a2V6bmVrIChhbWl0IGEgSERMQy9TeW5jUFBQIHN6aW50ZW4gQ1JDLWhpYmF2YWwgamVsZXopCisKKworY29teDAvcmVnCS0gYSBrYXJ0eWEgYXJhbWtvcmVpbmVrLCBhIE1VTklDSCAocmVnKSBlcyBhIEZBTEMgKGxiaXJlZykKK2NvbXgwL2xiaXJlZwlyZWdpc3p0ZXJlaW5layBrb3p2ZXRsZW4gZWxlcmVzZS4gSGFzem5hbGF0YToKKworCQllY2hvID5yZWcgMHgwNCAweDAJLSBhIDQtZXMgcmVnaXN6dGVyYmUgMC10IGlyCisJCWVjaG8gPnJlZyAweDEwNAkJLSBwcmludGsoKS12YWwga2lpcmphIGEgNC1lcyByZWdpc3p0ZXIKKwkJCQkJdGFydGFsbWF0IGEgc3lzbG9nYmEuCisKKwkJV0FSTklORzogZXplayBjc2FrIGEgZmVqbGVzenRlc2hleiBrZXN6dWx0ZWssIHNvayBnYWxpYmF0CisJCWxlaGV0IHZlbHVrIG9rb3puaSEKKworCitjb214MC9sb29wYmFjayAtIEEga2FydHlhIEcuNzAzIGplbGVuZWsgYSB2aXNzemFodXJrb2xhc2FyYSBpcyB2YW4gbGVoZXRvc2VnOgorCisJcGFwYXlhOiMgZWNobyBub25lICAgPi9wcm9jL2NvbXgvY29teDAvbG9vcGJhY2sKKwlwYXBheWE6IyBlY2hvIGxvY2FsICA+L3Byb2MvY29teC9jb214MC9sb29wYmFjaworCXBhcGF5YTojIGVjaG8gcmVtb3RlID4vcHJvYy9jb214L2NvbXgwL2xvb3BiYWNrCisKKwlub25lICAgLSBuaW5jcyB2aXNzemFodXJrb2xhcywgbm9ybWFsIG11a29kZXMKKwlsb2NhbCAgLSBhIGthcnR5YSBhIHNhamF0IG1hZ2EgYWx0YWwgYWRvdHQgamVsZXQga2FwamEgdmlzc3phCisJcmVtb3RlIC0gYSBrYXJ0eWEgYSBraXZ1bHJvbCB2ZXR0IGplbGV0IGFkamEga2lmZWxlCisKKwlEZWZhdWx0OiBub25lCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0F6IGludGVyZmVzemhleiAoQ2lzY28gdGVybWlub2xvZ2lhYmFuICdjaGFubmVsLWdyb3VwJykga2FwY3NvbG9kbyBiZWFsbGl0YXNvazoKKworY29teDAvdGltZXNsb3RzCS0gbWVseSB0aW1lc2xvdG9rIChpZG9zemVsZXRlaykgdGFydG96bmFrIGF6IGFkb3R0IGludGVyZmVzemhlei4KKworCXBhcGF5YTp+IyBjYXQgL3Byb2MvY29teC9jb214MC90aW1lc2xvdHMKKwkxIDMgNCA1IDYKKwlwYXBheWE6fiMKKworCUVneSB0aW1lc2xvdCBtZWdrZXJlc2VzZSAoaGFueWFzIGludGVyZmVzemJlIHRhcnRvemlrIG5hbHVuayk6CisKKwlwYXBheWE6fiMgZ3JlcCAnIDQnIC9wcm9jL2NvbXgvY29teCovdGltZXNsb3RzCisJL3Byb2MvY29teC9jb214MC90aW1lc2xvdHM6MSAzIDQgNSA2CisJcGFwYXlhOn4jCisKKwlCZWFsbGl0YXNhOgorCXBhcGF5YTp+IyBlY2hvICcxIDUgMiA2IDcgOCcgPi9wcm9jL2NvbXgvY29teDAvdGltZXNsb3RzCisJCisJQSB0aW1lc2xvdG9rIHNvcnJlbmRqZSBuZW0gc3phbWl0LCAnMSAzIDInIHVneWFuYXogbWludCBheiAnMSAyIDMnLgorCisJQmVhbGxpdGFzaG96IGF6IGFkb3R0IGludGVyZmVzem5layBET1dOLWJhbiBrZWxsIGxlbm5pZQorCShpZmNvbmZpZyBjb214MCBkb3duKSwgZGUgdWd5YW5hbm5hayBhIGthcnR5YW5hayBhIHRvYmJpIGludGVyZmVzemUKKwl1emVtZWxoZXQga296YmVuLgorCisJQmVhbGxpdGFza29yIGxlZWxsZW5vcnppLCBob2d5IGF6IHVqIHRpbWVzbG90b2sgbmVtIHV0a296bmVrLWUgZWd5CisJbWFzaWsgaW50ZXJmZXN6IHRpbWVzbG90amFpdmFsLiBIYSB1dGtvem5laywgYWtrb3IgbmVtIGFsbGl0amEgYXQuCisKKwlNaW5kaWcgMTAtZXMgc3phbXJlbmRzemVyYmVuIHRvcnRlbmlrIGEgdGltZXNsb3RvayBlcnRlbG1lemVzZSwgbmVob2d5CisJYSAwOCwgMDkgYWxha3UgZmVsaXJhc3Qgcm9zc3p1bCBlcnRlbG1lenplLgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitBeiBpbnRlcmZlc3playBlcyBhIGthcnR5YSBhbGxhcG90YW5hayBsZWtlcmRlemVzZToKKworLSBBICcgJy1zemVsIGtlemRvZG8gc29yb2sgYXogZXJlZGV0aSBraW1lbmV0ZXQsIGEgLy8tcmVsIGtlemRvZG8gc29yb2sgYQorbWFneWFyYXphdG90IGplbHppay4KKworIHBhcGF5YTp+JCBjYXQgL3Byb2MvY29teC9jb214MS9zdGF0dXMKKyBJbnRlcmZhY2UgYWRtaW5pc3RyYXRpdmUgc3RhdHVzIGlzIFVQLCBtb2RlbSBzdGF0dXMgaXMgVVAsIHByb3RvY29sIGlzIFVQCisgTW9kZW0gc3RhdHVzIGNoYW5nZXM6IDAsIFRyYW5zbWl0dGVyIHN0YXR1cyBpcyBJRExFLCB0YnVzeTogMAorIEludGVyZmFjZSBsb2FkIChpbnB1dCk6IDk3ODM3NiAvIDk0NzgwOCAvIDk1MTAyNCBiaXRzL3MgKDVzLzVtLzE1bSkKKyAgICAgICAgICAgICAgIChvdXRwdXQpOiA5NzgzNzYgLyA5NDc4NDggLyA5NTEwMjQgYml0cy9zICg1cy81bS8xNW0pCisgRGVidWcgZmxhZ3M6IG5vbmUKKyBSWCBlcnJvcnM6IGxlbjogMjIsIG92ZXJydW46IDEsIGNyYzogMCwgYWJvcnRzOiAwCisgICAgICAgICAgICBidWZmZXIgb3ZlcnJ1bjogMCwgcGJ1ZmZlciBvdmVycnVuOiAwCisgVFggZXJyb3JzOiB1bmRlcnJ1bjogMAorIExpbmUga2VlcGFsaXZlICh2YWx1ZTogMTApIHN0YXR1cyBVUCBbMF0KKworLy8gSXR0IGtlemRvZGlrIGEgaGFyZHZlci1zcGVjaWZpa3VzIHJlc3o6CisgQ29udHJvbGxlciBzdGF0dXM6CisgICAgICAgICBObyBhbGFybXMKKworLy8gQWxhcm06IGhpYmFqZWx6ZXM6CisvLworLy8gTm8gYWxhcm1zIC0gbWluZGVuIHJlbmRiZW4KKy8vCisvLyBMT1MgIC0gTG9zcyBPZiBTaWduYWwgLSBuZW0gZXJ6ZWtlbCBqZWxldCBhIGJlbWVuZXRlbi4KKy8vIEFJUyAgLSBBbGFybSBJbmRpY2F0aW9uIFNpZ25hbCAtIGNzYWsgZWd5bWFzIHV0YW5pIDEtZXNlayBqb25uZWsKKy8vCWEgYmVtZW5ldGVuLCBhIHR1bG9sZGFsIGlneSBpcyBqZWxlemhldGkgaG9neSBtZWdoaWJhc29kb3R0IHZhZ3kKKy8vCW5pbmNzIGluaWNpYWxpemFsdmEuCisvLyBBVVhQIC0gQXV4aWxpYXJ5IFBhdHRlcm4gSW5kaWNhdGlvbiAtIDAxMDEwMTAxLi4gc29yb3phdCBqb24gYSBiZW1lbmV0ZW4uCisvLyBMRkEgIC0gTG9zcyBvZiBGcmFtZSBBbGlnbm1lbnQgLSBuaW5jcyBrZXJldHN6aW5rcm9uCisvLyBSUkEgIC0gUmVjZWl2ZSBSZW1vdGUgQWxhcm0gLSBhIHR1bG9sZGFsIGVsLCBkZSBoaWJhdCBqZWxlei4KKy8vIExNRkEgLSBMb3NzIG9mIENSQzQgTXVsdGlmcmFtZSBBbGlnbm1lbnQgLSBuaW5jcyBDUkM0LW11bHRpa2VyZXQtc3ppbmtyb24KKy8vIE5NRiAgLSBObyBNdWx0aWZyYW1lIGFsaWdubWVudCBGb3VuZCBhZnRlciA0MDAgbXNlYyAtIGlseWVuIGFsYXJtIGEgbm8tY3JjNAorLy8JZXMgY3JjNCBrZXJldGV6ZXNlayBlc2V0ZW4gbmluY3MsIGxhc2QgbGVudGViYgorLy8KKy8vIEVneWViIGxlaGV0c2VnZXMgaGliYWplbHplc2VrOgorLy8KKy8vIFRyYW5zbWl0IExpbmUgU2hvcnQgLSBhIGthcnR5YSB1Z3kgZXJ6aSBob2d5IGF6IGFkYXNpIGtpbWVuZXRlIHJvdmlkcmUKKy8vCXZhbiB6YXJ2YSwgZXplcnQga2lrYXBjc29sdGEgYXogYWRhc3QuIChuZW0gZmVsdGV0bGVudWwgdmVzemkgZXN6cmUKKy8vCWEga3Vsc28gcm92aWR6YXJhdCkKKworLy8gQSB2ZXRlbGkgb2xkYWwgY3NvbWFnamFpbmFrIGxhbmNvbHQgbGlzdGFpLCBkZWJ1ZyBjZWxva3JhOgorCisgUnggcmluZzoKKyAgICAgICAgIHJhZnV0b3R0OiAwCisgICAgICAgICBsYXN0Y2hlY2s6IDUwODQ1NzMxLCBqaWZmaWVzOiA1MTMxNDI4MQorICAgICAgICAgYmFzZTogMDE3YjE4NTgKKyAgICAgICAgIHJ4X2Rlc2NfcHRyOiAwCisgICAgICAgICByeF9kZXNjX3B0cjogMDE3YjE4NTgKKyAgICAgICAgIGh3X2N1cnJfcHRyOiAwMTdiMTg1OAorICAgICAgICAgMDYwNDAwMDAgMDE3YjE4NjggMDE3YjE4OTggYzAxNmZmMDAKKyAgICAgICAgIDA2MDQwMDAwIDAxN2IxODc4IDAxN2IxZTljIGMwMTZmZjAwCisgICAgICAgICA0NjA0MDAwMCAwMTdiMTg4OCAwMTdiMjRhMCBjMDE2ZmYwMAorICAgICAgICAgMDYwNDAwMDAgMDE3YjE4NTggMDE3YjJhYTQgYzAxNmZmMDAKKworLy8gQSBrYXJ0eWF0IGhhc3puYWxvIHRvYmJpIGludGVyZmVzejogYSAwLXMgY2hhbm5lbC1ncm91cCBhIGNvbXgxIGludGVyZmVzeiwKKy8vIGVzIGF6IDEsMiwuLi4sMTYgdGltZXNsb3RvayB0YXJ0b3puYWsgaG96emE6CisKKyBJbnRlcmZhY2VzIHVzaW5nIHRoaXMgYm9hcmQ6IChjaGFubmVsLWdyb3VwLCBpbnRlcmZhY2UsIHRpbWVzbG90cykKKyAgICAgICAgICAwIGNvbXgxOiAxIDIgMyA0IDUgNiA3IDggOSAxMCAxMSAxMiAxMyAxNCAxNSAxNgorICAgICAgICAgIDEgY29teDI6IDE3CisgICAgICAgICAgMiBjb214MzogMTgKKyAgICAgICAgICAzIGNvbXg0OiAxOQorICAgICAgICAgIDQgY29teDU6IDIwCisgICAgICAgICAgNSBjb214NjogMjEKKyAgICAgICAgICA2IGNvbXg3OiAyMgorICAgICAgICAgIDcgY29teDg6IDIzCisgICAgICAgICAgOCBjb214OTogMjQKKyAgICAgICAgICA5IGNvbXgxMDogMjUKKyAgICAgICAgIDEwIGNvbXgxMTogMjYKKyAgICAgICAgIDExIGNvbXgxMjogMjcKKyAgICAgICAgIDEyIGNvbXgxMzogMjgKKyAgICAgICAgIDEzIGNvbXgxNDogMjkKKyAgICAgICAgIDE0IGNvbXgxNTogMzAKKyAgICAgICAgIDE1IGNvbXgxNjogMzEKKworLy8gSGFueSBlc2VtZW55dCBrZXplbHQgbGUgYSBkcml2ZXIgZWd5LWVneSBoYXJkdmVyLWludGVycnVwdCBraXN6b2xnYWxhc2FuYWw6CisKKyBJbnRlcnJ1cHQgd29yayBoaXN0b2dyYW06CisgaGlzdFsgMF06ICAgICAgICAwIGhpc3RbIDFdOiAgICAgICAgMiBoaXN0WyAyXTogICAgMTg1NzQgaGlzdFsgM106ICAgICAgIDc5CisgaGlzdFsgNF06ICAgICAgIDE0IGhpc3RbIDVdOiAgICAgICAgMSBoaXN0WyA2XTogICAgICAgIDAgaGlzdFsgN106ICAgICAgICAxCisgaGlzdFsgOF06ICAgICAgICAwIGhpc3RbIDldOiAgICAgICAgNworCisvLyBIYW55IGtpa3VsZGVuZG8gY3NvbWFnIHZvbHQgbWFyIGEgVHgtcmluZ2JlbiBhbWlrb3IgdWphYmIgbGV0dCBpcnZhIGJlbGU6CisKKyBUeCByaW5nIGhpc3RvZ3JhbToKKyBoaXN0WyAwXTogICAgIDIzMjkgaGlzdFsgMV06ICAgICAgICAwIGhpc3RbIDJdOiAgICAgICAgMCBoaXN0WyAzXTogICAgICAgIDAKKworLy8gQXogRTEtaW50ZXJmZXN6IGhpYmEtc3phbWxhbG9pLCBheiByZmMyNDk1LW5layBtZWdmZWxlbG9lbjoKKy8vIChrYi4gYSBDaXNjbyByb3V0ZXJlayAic2hvdyBjb250cm9sbGVycyBlMSIgZm9ybWF0dW1hYmFuOiBodHRwOi8vd3d3LmNpc2NvLmNvbS91bml2ZXJjZC9jYy90ZC9kb2MvcHJvZHVjdC9zb2Z0d2FyZS9pb3MxMS9yYm9vay9yaW50ZXJmYy5odG0jeHRvY2lkMjU2NjkxMjYpCisKK0RhdGEgaW4gY3VycmVudCBpbnRlcnZhbCAoOTEgc2Vjb25kcyBlbGFwc2VkKToKKyAgIDk1MTYgTGluZSBDb2RlIFZpb2xhdGlvbnMsIDY1IFBhdGggQ29kZSBWaW9sYXRpb25zLCAyIEUtQml0IEVycm9ycworICAgMCBTbGlwIFNlY3MsIDIgRnIgTG9zcyBTZWNzLCAyIExpbmUgRXJyIFNlY3MsIDAgRGVncmFkZWQgTWlucworICAgMCBFcnJvcmVkIFNlY3MsIDAgQnVyc3R5IEVyciBTZWNzLCAwIFNldmVyZWx5IEVyciBTZWNzLCAxMSBVbmF2YWlsIFNlY3MKK0RhdGEgaW4gSW50ZXJ2YWwgMSAoMTUgbWludXRlcyk6CisgICAwIExpbmUgQ29kZSBWaW9sYXRpb25zLCAwIFBhdGggQ29kZSBWaW9sYXRpb25zLCAwIEUtQml0IEVycm9ycworICAgMCBTbGlwIFNlY3MsIDAgRnIgTG9zcyBTZWNzLCAwIExpbmUgRXJyIFNlY3MsIDAgRGVncmFkZWQgTWlucworICAgMCBFcnJvcmVkIFNlY3MsIDAgQnVyc3R5IEVyciBTZWNzLCAwIFNldmVyZWx5IEVyciBTZWNzLCAwIFVuYXZhaWwgU2VjcworRGF0YSBpbiBsYXN0IDQgaW50ZXJ2YWxzICgxIGhvdXIpOgorICAgMCBMaW5lIENvZGUgVmlvbGF0aW9ucywgMCBQYXRoIENvZGUgVmlvbGF0aW9ucywgMCBFLUJpdCBFcnJvcnMKKyAgIDAgU2xpcCBTZWNzLCAwIEZyIExvc3MgU2VjcywgMCBMaW5lIEVyciBTZWNzLCAwIERlZ3JhZGVkIE1pbnMKKyAgIDAgRXJyb3JlZCBTZWNzLCAwIEJ1cnN0eSBFcnIgU2VjcywgMCBTZXZlcmVseSBFcnIgU2VjcywgMCBVbmF2YWlsIFNlY3MKK0RhdGEgaW4gbGFzdCA5NiBpbnRlcnZhbHMgKDI0IGhvdXJzKToKKyAgIDAgTGluZSBDb2RlIFZpb2xhdGlvbnMsIDAgUGF0aCBDb2RlIFZpb2xhdGlvbnMsIDAgRS1CaXQgRXJyb3JzCisgICAwIFNsaXAgU2VjcywgMCBGciBMb3NzIFNlY3MsIDAgTGluZSBFcnIgU2VjcywgMCBEZWdyYWRlZCBNaW5zCisgICAwIEVycm9yZWQgU2VjcywgMCBCdXJzdHkgRXJyIFNlY3MsIDAgU2V2ZXJlbHkgRXJyIFNlY3MsIDAgVW5hdmFpbCBTZWNzCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK05laGFueSBrdWxvbmxlZ2VzZWJiIGJlYWxsaXRhc2kgbGVoZXRvc2VnIChpZG92ZWwgYmVlcHVsaGV0bmVrIG1hamQgYSBkcml2ZXJiZSk6CitFemVra2VsIHNvayBnYWxpYmF0IGxlaGV0IG9rb3puaSwgbmFneW9uIG92YXRvc2FuIGtlbGwgb2tldCBoYXN6bmFsbmkhCisKKwltb2RpZmllZCBDUkMtNCwgZm9yIGltcHJvdmVkIGludGVyd29ya2luZyBvZiBDUkMtNCBhbmQgbm9uLUNSQy00CisJZGV2aWNlczogKGxhc2QgcGFnZSAxMDcgZXMgZzcwNiBBbm5leCBCKQorCQlsYmlyZWdbIDB4MWIgXSB8PSAweDA4CisJCWxiaXJlZ1sgMHgxYyBdIHw9IDB4YzAKKwktIGlseWVua29yIGVydGVsbWV6ZXR0IGF6IE5NRiAtICdObyBNdWx0aWZyYW1lIGFsaWdubWVudCBGb3VuZCBhZnRlcgorCTQwMCBtc2VjJyBhbGFybS4KKworCUZBTEMgLSBhIHZvbmFsaSBtZWdoYWp0byBJQworCWxvY2FsIGxvb3AgLSBhIHNhamF0IGFkYXNvbWF0IGhhbGxqYW0gdmlzc3phCisJcmVtb3RlIGxvb3AgLSBhIGtpdnVscm9sIGpvdm8gYWRhc3QgYWRvbSB2aXNzemEKKworCUVneSBoaWJha2VyZXNlc3JlIGhhc3puYWxoYXRvIGRvbG9nOgorCQktIDEtZXMgdGltZXNsb3QgbG9jYWwgbG9vcCBhIEZBTEMtYmFuOgllY2hvID5sYmlyZWcgMHgxZCAweDIxCisJCS0gbG9jYWwgbG9vcCBraWthcGNzb2xhc2E6CQllY2hvID5sYmlyZWcgMHgxZCAweDAwCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvc2xpY2Vjb20udHh0IGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3NsaWNlY29tLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41OWNmZDk1Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3NsaWNlY29tLnR4dApAQCAtMCwwICsxLDM2OSBAQAorCitTbGljZUNPTSBhZGFwdGVyIHVzZXIncyBkb2N1bWVudGF0aW9uIC0gZm9yIHRoZSAwLjUxIGRyaXZlciB2ZXJzaW9uCisKK1dyaXR0ZW4gYnkgQmFydPNrIElzdHbhbiA8YmFydG9raUBpdGMuaHU+CisKK0VuZ2xpc2ggdHJhbnNsYXRpb246IExha2F0b3MgR3n2cmd5IDxneXVyaUBpdGMuaHU+CitNb24gRGVjIDExIDE1OjI4OjQyIENFVCAyMDAwCisKK0xhc3QgbW9kaWZpZWQ6IFdlZCBBdWcgMjkgMTc6MjU6MzcgQ0VTVCAyMDAxCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1VzYWdlOgorCitDb21waWxpbmcgdGhlIGtlcm5lbDoKKworQ29kZSBtYXR1cml0eSBsZXZlbCBvcHRpb25zCisJWypdIFByb21wdCBmb3IgZGV2ZWxvcG1lbnQgYW5kL29yIGluY29tcGxldGUgY29kZS9kcml2ZXJzCisKK05ldHdvcmsgZGV2aWNlIHN1cHBvcnQKKwlXYW4gaW50ZXJmYWNlcworCQk8TT4gTXVsdGlHYXRlIChDT01YKSBzeW5jaHJvbm91cworCQkJPE0+IFN1cHBvcnQgZm9yIE1VTklDSCBiYXNlZCBib2FyZHM6IFNsaWNlQ09NLCBQQ0lDT00gKE5FVykKKwkJCTxNPiBTdXBwb3J0IGZvciBIRExDIGFuZCBzeW5jUFBQLi4uCisKKworTG9hZGluZyB0aGUgbW9kdWxlczoKKworbW9kcHJvYmUgY29teAorCittb2Rwcm9iZSBjb214LXByb3RvLXBwcAkJIyBtb2R1bGUgZm9yICBDaXNjby1IRExDIGFuZCBTeW5jUFBQIHByb3RvY29scworCittb2Rwcm9iZSBjb214LWh3LW11bmljaAkJIyB0aGUgbW9kdWxlIGxvZ3MgaW5mb3JtYXRpb24gYnkgdGhlIGtlcm5lbAorCQkJCSMgYWJvdXQgdGhlIGRldGVjdGVkIGJvYXJkcworCisKK0NvbmZpZ3VyaW5nIHRoZSBib2FyZDoKKworIyBUaGlzIGludGVyZmFjZSB3aWxsIHVzZSB0aGUgQ2lzY28tSERMQyBsaW5lIHByb3RvY29sLAorIyB0aGUgdGltZXNsaWNlcyBhc3NpZ25lZCBhcmUgMSwyICgxMjggS2lCaXQgbGluZSBzcGVlZCkKKyMgKHRoZSBmaXJzdCBkYXRhIHRpbWVzbGljZSBpbiB0aGUgRy43MDMgZnJhbWUgaXMgbm8uIDEpCisjCitta2RpciAvcHJvYy9jb214L2NvbXgwLjEvCitlY2hvIHNsaWNlY29tCT4vcHJvYy9jb214L2NvbXgwLjEvYm9hcmR0eXBlCitlY2hvIGhkbGMJPi9wcm9jL2NvbXgvY29teDAuMS9wcm90b2NvbAorZWNobyAxIDIJPi9wcm9jL2NvbXgvY29teDAuMS90aW1lc2xvdHMKKworCisjIFRoaXMgaW50ZXJmYWNlIHVzZXMgU3luY1BQUCBsaW5lIHByb3RvY29sLCB0aGUgYXNzaWduZWQgCisjIGlzIG5vLiAzICg2NCBLaUJpdCBsaW5lIHNwZWVkKQorIworbWtkaXIgL3Byb2MvY29teC9jb214MC4yLworZWNobyBzbGljZWNvbQk+L3Byb2MvY29teC9jb214MC4yL2JvYXJkdHlwZQorZWNobyBwcHAJPi9wcm9jL2NvbXgvY29teDAuMi9wcm90b2NvbAorZWNobyAzCQk+L3Byb2MvY29teC9jb214MC4yL3RpbWVzbG90cworCisuLi4KKworaWZjb25maWcgY29teDAuMSB1cAoraWZjb25maWcgY29teDAuMiB1cAorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGUgQ09NWCBpbnRlcmZhY2VzIHVzZSBhIDEwIHBhY2tldCB0cmFuc21pdCBxdWV1ZSBieSBkZWZhdWx0LCBob3dldmVyIFdBTgorbmV0d29ya3Mgc29tZXRpbWVzIHVzZSBiaWdnZXIgdmFsdWVzICgyMCB0byAxMDApLCB0byB1dGlsaXplIHRoZSBsaW5lIGJldHRlcgorYnkgbGFyZ2UgdHJhZmZpYyAodGhvdWdoIHRoZSBsaW5lIGRlbGF5IGluY3JlYXNlcyBiZWNhdXNlIG9mIG1vcmUgcGFja2V0cworam9pbiB0aGUgcXVldWUpLgorCisjIGlmY29uZmlnIGNvbXgwIHR4cXVldWVsZW4gNTAKKworVGhpcyBvcHRpb24gaXMgb25seSBzdXBwb3J0ZWQgYnkgdGhlIGlmY29uZmlnIGNvbW1hbmQgb2YgdGhlIGxhdGVyIAorZGlzdHJpYnV0aW9ucywgd2hpY2ggY2FtZSB3aXRoIDIuMiBrZXJuZWxzLCBzdWNoIGFzIFJlZEhhdCA2LjEgb3IgRGViaWFuIDIuMi4KKworWW91IGNhbiBkb3dubG9hZCBhIG5ld2VyIG5ldGJhc2UgcGFja2V0IGZyb20gCitodHRwOi8vd3d3LmRlYmlhbi5vcmcvfnJjdy8yLjIvbmV0YmFzZS8gZm9yIERlYmlhbiAyLjEsIHdoaWNoIGhhcyBhIG5ldworaWZjb25maWcuIFlvdSBjYW4gZ2V0IGZ1cnRoZXIgaW5mb3JtYXRpb24gYWJvdXQgdXNpbmcgMi4yIGtlcm5lbCB3aXRoCitEZWJpYW4gMi4xIGZyb20gaHR0cDovL3d3dy5kZWJpYW4ub3JnL3JlbGVhc2VzL3N0YWJsZS9ydW5uaW5nLWtlcm5lbC0yLjIKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlIFNsaWNlQ29tIExFRHM6CisKK3JlZAktIG9uLCBpZiB0aGUgaW50ZXJmYWNlIGlzIHVuY29uZmlndXJlZCwgb3IgaXQgZ2V0cyBSZW1vdGUgQWxhcm0tcworZ3JlZW4JLSBvbiwgaWYgdGhlIGJvYXJkIGZpbmRzIGZyYW1lLXN5bmMgaW4gdGhlIHJlY2VpdmVkIHNpZ25hbCAJCisKK0EgYml0IG1vcmUgZGV0YWlsZWQ6CisKK3JlZDoJZ3JlZW46CW1lYW5pbmc6CisKKy0JLQlubyBmcmFtZS1zeW5jLCBubyBzaWduYWwgcmVjZWl2ZWQsIG9yIHNpZ25hbCBTTkFGVS4KKy0Jb24JIkV2ZXJ5dGhpbmcgaXMgT0siCitvbglvbglSZWNlcGlvbiBpcyBvaywgYnV0IHRoZSByZW1vdGUgZW5kIHNlbmRzIFJlbW90ZSBBbGFybQorb24JLQlUaGUgaW50ZXJmYWNlIGlzIHVuY29uZmlndXJlZAorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitBIG1vcmUgZGV0YWlsZWQgZGVzY3JpcHRpb24gb2YgdGhlIGhhcmR3YXJlIHNldHRpbmcgb3B0aW9uczoKKworVGhlIGdlbmVyYWwgYW5kIHRoZSBwcm90b2NvbCBsYXllciBvcHRpb25zIGRlc2NyaWJlZCBpbiB0aGUgJ2NvbXgudHh0JyBmaWxlCithcHBseSB0byB0aGUgU2xpY2VDb20gYXMgd2VsbCwgSSBvbmx5IHN1bW1hcml6ZSB0aGUgU2xpY2VDb20gaGFyZHdhcmUgc3BlY2lmaWMKK3NldHRpbmdzIGJlbG93LgorCitUaGUgJy9wcm9jL2NvbXgnIGNvbmZpZ3VyaW5nIGludGVyZmFjZToKKworQW4gaW50ZXJmYWNlIGRpcmVjdG9yeSBzaG91bGQgYmUgY3JlYXRlZCBmb3IgZXZlcnkgdGltZXNsb3QgZ3JvdXAgd2l0aAorJ21rZGlyJywgZSxnOiAnY29teDAnLCAnY29teDEnIGV0Yy4gVGhlIHRpbWVzbG90cyBjYW4gYmUgYXNzaWduZWQgaGVyZSB0byB0aGUKK3NwZWNpZmljIGludGVyZmFjZS4gVGhlIENpc2NvLWxpa2UgbmFtaW5nIGNvbnZlbnRpb24gKHNlcmlhbDM6MSAtIGZpcnN0Cit0aW1lc2xvdCBncm91cCBvZiB0aGUgM3JkLiBib2FyZCkgY2FuJ3QgYmUgdXNlZCBoZXJlLCBiZWNhdXNlIHRoZXNlIG1lYW4gSVAKK2FsaWFzaW5nIGluIExpbnV4LgorCitZb3UgY2FuIGdpdmUgYW55IG1lYW5pbmdmdWwgbmFtZSB0byBrZWVwIHRoZSBjb25maWd1cmF0aW9uIGNsZWFyOyAKK2UuZzogJ2NvbXgwLjEnLCAnY29teDAuMicsICdjb214MS4xJywgY29teDEuMicsIGlmIHlvdSBoYXZlIHR3byBib2FyZHMKK3dpdGggdHdvIGludGVyZmFjZXMgZWFjaC4KKworU2V0dGluZ3MsIHdoaWNoIGFwcGx5IHRvIHRoZSBib2FyZDoKKworTmVpdGhlciAnaW8nIG5vciAnaXJxJyBzZXR0aW5ncyByZXF1aXJlZCwgdGhlIGRyaXZlciB1c2VzIHRoZSByZXNvdXJjZXMKK2dpdmVuIGJ5IHRoZSBQQ0kgQklPUy4KKworY29teDAvYm9hcmRudW0JLSBib2FyZCBudW1iZXIgb2YgdGhlIFNsaWNlQ29tIGluIHRoZSBQQyAodXNpbmcgdGhlICduYXR1cmFsJworCQlQQ0kgb3JkZXIpIGFzIGxpc3RlZCBpbiAnL3Byb2MvcGNpJyBvciB0aGUgb3V0cHV0IG9mIHRoZQorCSAJJ2xzcGNpJyBjb21tYW5kLCBnZW5lcmFsbHkgdGhlIHNsb3RzIG5lYXJlciB0byB0aGUgbW90aGVyYm9hcmQKKwkJUENJIGRyaXZlciBjaGlwcyBoYXZlIHRoZSBsb3dlciBudW1iZXJzLgorCQkKKwkJRGVmYXVsdDogMCAodGhlIGNvdW50aW5nIHN0YXJ0cyB3aXRoIDApCisKK1Rob3VnaCB0aGUgb3B0aW9ucyBiZWxvdyBhcmUgdG8gYmUgc2V0IG9uIGEgc2luZ2xlIGludGVyZmFjZSwgdGhleSBhcHBseSB0byB0aGUKK3dob2xlIGJvYXJkLiBUaGUgcmVzdHJpY3Rpb24sIHRvIHVzZSB0aGVtIG9uICdVUCcgaW50ZXJmYWNlcywgaXMgYmVjYXVzZSB0aGUgCitjb21tYW5kIHNlcXVlbmNlIGJlbG93IGNvdWxkIGxlYWQgdG8gdW5wcmVkaWNhYmxlIHJlc3VsdHMuCisKKwkjIGVjaG8gMCAgICAgICAgPmJvYXJkbnVtCisJIyBlY2hvIGludGVybmFsID5jbG9ja19zb3VyY2UKKwkjIGVjaG8gMSAgICAgICAgPmJvYXJkbnVtCisKK1RoZSBzZXF1ZW5jZSB3b3VsZCBzZXQgdGhlIGNsb2NrIHNvdXJjZSBvZiBib2FyZCAwLgorCitUaGVzZSBzZXR0aW5ncyB3aWxsIHBlcnNpc3QgYWZ0ZXIgYWxsIHRoZSBpbnRlcmZhY2VzIGFyZSBjbGVhcmVkLCBidXQgYXJlCitjbGVhcmVkIHdoZW4gdGhlIGRyaXZlciBtb2R1bGUgaXMgdW5sb2FkZWQgYW5kIGxvYWRlZCBhZ2Fpbi4KKworY29teDAvY2xvY2tfc291cmNlIC0gc291cmNlIG9mIHRoZSB0cmFuc21pdCBjbG9jaworCVVzYWdlOgorCisJIyBlY2hvIGxpbmUgICAgID4vcHJvYy9jb214L2NvbXgwL2Nsb2NrX3NvdXJjZQorCSMgZWNobyBpbnRlcm5hbCA+L3Byb2MvY29teC9jb214MC9jbG9ja19zb3VyY2UKKworCWxpbmUJLSBUaGUgVHggY2xvY2sgaXMgYmVpbmcgZGVjb2RlZCBpZiB0aGUgaW5wdXQgZGF0YSBzdHJlYW0sCisJCWlmIG5vIGNsb2NrIHNlZW4gb24gdGhlIGlucHV0LCB0aGVuIHRoZSBib2FyZCB3aWxsIHVzZSBpdCdzCisJCW93biBjbG9jayBnZW5lcmF0b3IuCisKKwlpbnRlcm5hbCAtIFRoZSBUeCBjbG9jayBpcyBzdXBwbGllZCBieSB0aGUgYnVpbHRpbiBjbG9jayBnZW5lcmF0b3IuIAkKKworCURlZmF1bHQ6IGxpbmUKKworCU5vcm1hbGx5LCB0aGUgdGVsZWNvbW11bmljYXRpb24gY29tcGFueSdzIGVuZCBkZXZpY2UgKHRoZSBIRFNMCisJbW9kZW0pIHByb3ZpZGVzIHRoZSBUeCBjbG9jaywgdGhhdCdzIHdoeSAnbGluZScgaXMgdGhlIGRlZmF1bHQuCisKK2NvbXgwL2ZyYW1pbmcJLSBTd2l0Y2hpbmcgQ1JDNCBvZmYvb24KKworCUNSQzQ6IDE2IFBDTSBmcmFtZXMgKFRoZSAzMiA2NEtpYml0IGNoYW5uZWxzIGFyZSBtdWx0aXBsZXhlZCBpbnRvIGEKKwlQQ00gZnJhbWUsIG5vdGhpbmcgdG8gZG8gd2l0aCBIRExDIGZyYW1lcykgYXJlIGRpdmlkZWQgaW50byAyeDgKKwlncm91cHMsIGVhY2ggZ3JvdXAgaGFzIGEgNCBiaXQgQ1JDLgorCisJIyBlY2hvIGNyYzQJPi9wcm9jL2NvbXgvY29teDAvZnJhbWluZworCSMgZWNobyBuby1jcmM0CT4vcHJvYy9jb214L2NvbXgwL2ZyYW1pbmcKKworCURlZmF1bHQgaXMgJ2NyYzQnLCB0aGUgSHVuZ2FyaWFuIE1BVEFWIGxpbmVzIGJlaGF2ZSBsaWtlIHRoaXMuIAorCVRoZSB0cmFmZmljIGdlbmVyYWxseSBwYXNzZXMgaWYgdGhpcyBzZXR0aW5nIG9uIGJvdGggZW5kcyBkb24ndCBtYXRjaC4KKworY29teDAvbGluZWNvZGUJLSBTZXR0aW5nIHRoZSBsaW5lIGNvZGluZworCisJIyBlY2hvIGhkYjMJPi9wcm9jL2NvbXgvY29teDAvbGluZWNvZGUKKwkjIGVjaG8gYW1pCT4vcHJvYy9jb214L2NvbXgwL2xpbmVjb2RlCisKKwlEZWZhdWx0IGEgJ2hkYjMnLCBNQVRBViBsaW5lcyB1c2UgdGhpcy4KKwkKKwkoQU1JIGNvZGluZyBpcyByYXJlbHkgdXNlZCB3aXRoIEUxIGxpbmVzKS4gRnJhbWUgc3luYyBtYXkgb2NjdXIsIGlmCisJdGhpcyBzZXR0aW5nIGRvZXNuJ3QgbWF0Y2ggdGhlIG90aGVyIGVuZCdzLCBidXQgQ1JDNCBhbmQgZGF0YSBlcnJvcnMKKwl3aWxsIGNvbWUsIHdoaWNoIHdpbGwgcmVzdWx0IGluIENSQyBlcnJvcnMgb24gSERMQy9TeW5jUFBQIGxldmVsLiAKKworY29teDAvcmVnCS0gZGlyZWN0IGFjY2VzcyB0byB0aGUgYm9hcmQncyBNVU5JQ0ggKHJlZykgYW5kIEZBTEMgKGxiaXJlZykKK2NvbXgwL2xiaXJlZwljaXJjdWl0J3MgcmVnaXN0ZXJzICAKKworCSMgZWNobyA+cmVnIDB4MDQgMHgwCS0gd3JpdGUgMCB0byByZWdpc3RlciA0CisJIyBlY2hvID5yZWcgMHgxMDQJLSB3cml0ZSB0aGUgY29udGVudHMgb2YgcmVnaXN0ZXIgNCB3aXRoCisJCQkJcHJpbnRrKCkgdG8gc3lzbG9nCisKK1dBUk5JTkchIFRoZXNlIGFyZSBvbmx5IGZvciBkZXZlbG9wbWVudCBwdXJwb3NlcywgbWVzc2luZyB3aXRoIHRoaXMgd2lsbAorCXJlc3VsdCBtdWNoIHRyb3VibGUhCisKK2NvbXgwL2xvb3BiYWNrIC0gUGxhY2VzIGEgbG9vcCB0byB0aGUgYm9hcmQncyBHLjcwMyBzaWduYWxzCisKKwkjIGVjaG8gbm9uZSAgID4vcHJvYy9jb214L2NvbXgwL2xvb3BiYWNrCisJIyBlY2hvIGxvY2FsICA+L3Byb2MvY29teC9jb214MC9sb29wYmFjaworCSMgZWNobyByZW1vdGUgPi9wcm9jL2NvbXgvY29teDAvbG9vcGJhY2sKKworCW5vbmUgICAtIG5vcm1hbCBvcGVyYXRpb24sIG5vIGxvb3AKKwlsb2NhbCAgLSB0aGUgYm9hcmQgcmVjZWl2ZXMgaXQncyBvd24gb3V0cHV0CisJcmVtb3RlIC0gdGhlIGJvYXJkIHNlbmRzIHRoZSByZWNlaXZlZCBkYXRhIHRvIHRoZSByZW1vdGUgc2lkZQorCisJRGVmYXVsdDogbm9uZQorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitJbnRlcmZhY2UgKGNoYW5uZWwgZ3JvdXAgaW4gQ2lzY28gdGVybXMpIHNldHRpbmdzOiAKKworY29teDAvdGltZXNsb3RzCS0gd2hpY2ggdGltZXNsb3RzIGJlbG9uZyB0byB0aGUgZ2l2ZW4gaW50ZXJmYWNlCisKKwlTZXR0aW5nOgorCisJIyBlY2hvICcxIDUgMiA2IDcgOCcgPi9wcm9jL2NvbXgvY29teDAvdGltZXNsb3RzCisKKwkjIGNhdCAvcHJvYy9jb214L2NvbXgwL3RpbWVzbG90cworCTEgMiA1IDYgNyA4IAorCSMKKworCUZpbmRpbmcgYSB0aW1lc2xvdDogCisKKwkjIGdyZXAgJyA0JyAvcHJvYy9jb214L2NvbXgqL3RpbWVzbG90cworCS9wcm9jL2NvbXgvY29teDAvdGltZXNsb3RzOjEgMyA0IDUgNgorCSMKKworCVRoZSB0aW1lc2xvdHMgY2FuIGJlIGluIGFueSBvcmRlciwgJzEgMiAzJyBpcyB0aGUgc2FtZSBhcyAnMSAzIDInLgorCisJVGhlIGludGVyZmFjZSBoYXMgdG8gYmUgRE9XTiBkdXJpbmcgdGhlIHNldHRpbmcgKCdpZmNvbmZpZyBjb214MAorCWRvd24nKSwgYnV0IHRoZSBvdGhlciBpbnRlcmZhY2VzIGNvdWxkIG9wZXJhdGUgbm9ybWFsbHkuCisKKwlUaGUgZHJpdmVyIGNoZWNrcyBpZiB0aGUgYXNzaWduZWQgdGltZXNsb3RzIGFyZSB2YWNhbnQsIGlmIG5vdCwgdGhlbgorCXRoZSBzZXR0aW5nIHdvbid0IGJlIGFwcGxpZWQuCisKKwlUaGUgdGltZXNsb3QgdmFsdWVzIGFyZSB0cmVhdGVkIGFzIGRlY2ltYWwgbnVtYmVycywgbm90IHRvIG1pc3VuZGVyc3RhbmQKKwl2YWx1ZXMgb2YgMDgsIDA5IGZvcm0uCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0NoZWNraW5nIHRoZSBpbnRlcmZhY2UgYW5kIGJvYXJkIHN0YXR1czoKKworLSBMaW5lcyBiZWdpbm5pbmcgd2l0aCAnICcgKHNwYWNlKSBiZWxvbmcgdG8gdGhlIG9yaWdpbmFsIG91dHB1dCwgdGhlIGxpbmVzCit3aGljaCBiZWdpbiB3aXRoICcvLycgYXJlIHRoZSBjb21tZW50cy4KKworIHBhcGF5YTp+JCBjYXQgL3Byb2MvY29teC9jb214MS9zdGF0dXMKKyBJbnRlcmZhY2UgYWRtaW5pc3RyYXRpdmUgc3RhdHVzIGlzIFVQLCBtb2RlbSBzdGF0dXMgaXMgVVAsIHByb3RvY29sIGlzIFVQCisgTW9kZW0gc3RhdHVzIGNoYW5nZXM6IDAsIFRyYW5zbWl0dGVyIHN0YXR1cyBpcyBJRExFLCB0YnVzeTogMAorIEludGVyZmFjZSBsb2FkIChpbnB1dCk6IDk3ODM3NiAvIDk0NzgwOCAvIDk1MTAyNCBiaXRzL3MgKDVzLzVtLzE1bSkKKyAgICAgICAgICAgICAgIChvdXRwdXQpOiA5NzgzNzYgLyA5NDc4NDggLyA5NTEwMjQgYml0cy9zICg1cy81bS8xNW0pCisgRGVidWcgZmxhZ3M6IG5vbmUKKyBSWCBlcnJvcnM6IGxlbjogMjIsIG92ZXJydW46IDEsIGNyYzogMCwgYWJvcnRzOiAwCisgICAgICAgICAgICBidWZmZXIgb3ZlcnJ1bjogMCwgcGJ1ZmZlciBvdmVycnVuOiAwCisgVFggZXJyb3JzOiB1bmRlcnJ1bjogMAorIExpbmUga2VlcGFsaXZlICh2YWx1ZTogMTApIHN0YXR1cyBVUCBbMF0KKworLy8gVGhlIGhhcmR3YXJlIHNwZWNpZmljIHBhcnQgc3RhcnRzIGhlcmU6CisgQ29udHJvbGxlciBzdGF0dXM6CisgICAgICAgICBObyBhbGFybXMKKworLy8gQWxhcm06IAorLy8KKy8vIE5vIGFsYXJtcyAtIEV2ZXJ5dGhpbmcgT0sKKy8vCisvLyBMT1MgIC0gTG9zcyBPZiBTaWduYWwgLSBObyBzaWduYWwgc2Vuc2VkIG9uIHRoZSBpbnB1dAorLy8gQUlTICAtIEFsYXJtIEluZGljYXRpb24gU2lnbmFsIC0gVGhlIHJlbW90IHNpZGUgc2VuZHMgJzExMTExMTExJy1zLCAKKy8vCWl0IHRlbGxzLCB0aGF0IHRoZXJlJ3MgYW4gZXJyb3IgY29uZGl0aW9uLCBvciBpdCdzIG5vdAorLy8JaW5pdGlhbGlzZWQuCisvLyBBVVhQIC0gQXV4aWxpYXJ5IFBhdHRlcm4gSW5kaWNhdGlvbiAtIDAxMDEwMTAxLi4gcmVjZWl2ZWQuCisvLyBMRkEgIC0gTG9zcyBvZiBGcmFtZSBBbGlnbm1lbnQgLSBubyBmcmFtZSBzeW5jIHJlY2VpdmVkLgorLy8gUlJBICAtIFJlY2VpdmUgUmVtb3RlIEFsYXJtIC0gdGhlIHJlbW90ZSBlbmQncyBPSywgYnV0IHNpbmduYWxzIGVycm9yIGNvbmQuCisvLyBMTUZBIC0gTG9zcyBvZiBDUkM0IE11bHRpZnJhbWUgQWxpZ25tZW50IC0gbm8gQ1JDNCBtdWx0aWZyYW1lIHN5bmMuCisvLyBOTUYgIC0gTm8gTXVsdGlmcmFtZSBhbGlnbm1lbnQgRm91bmQgYWZ0ZXIgNDAwIG1zZWMgLSBubyBzdWNoIGFsYXJtIHVzaW5nCisvLwluby1jcmM0IG9yIGNyYzQgZnJhbWluZywgc2VlIGJlbG93LgorLy8KKy8vIE90aGVyIHBvc3NpYmxlIGVycm9yIG1lc3NhZ2VzOgorLy8KKy8vIFRyYW5zbWl0IExpbmUgU2hvcnQgLSB0aGUgYm9hcmQgZmVsdCwgdGhhdCBpdCdzIG91dHB1dCBpcyBzaG9ydC1jaXJjdWl0ZWQsCisvLyAJc28gaXQgc3dpdGNoZWQgdGhlIHRyYW5zbWlzc2lvbiBvZmYuIChUaGUgYm9hcmQgY2FuJ3QgZGVmaW5pdGVseSB0ZWxsLAorLy8JdGhhdCBpdCdzIG91dHB1dCBpcyBzaG9ydC1jaXJjdWl0ZWQuKQorCisvLyBDaGFpbmVkIGxpc3Qgb2YgdGhlIHJlY2VpdmVkIHBhY2tldHMsIGZvciBkZWJ1ZyBwdXJwb3NlczoKKworIFJ4IHJpbmc6CisgICAgICAgICByYWZ1dG90dDogMAorICAgICAgICAgbGFzdGNoZWNrOiA1MDg0NTczMSwgamlmZmllczogNTEzMTQyODEKKyAgICAgICAgIGJhc2U6IDAxN2IxODU4CisgICAgICAgICByeF9kZXNjX3B0cjogMAorICAgICAgICAgcnhfZGVzY19wdHI6IDAxN2IxODU4CisgICAgICAgICBod19jdXJyX3B0cjogMDE3YjE4NTgKKyAgICAgICAgIDA2MDQwMDAwIDAxN2IxODY4IDAxN2IxODk4IGMwMTZmZjAwCisgICAgICAgICAwNjA0MDAwMCAwMTdiMTg3OCAwMTdiMWU5YyBjMDE2ZmYwMAorICAgICAgICAgNDYwNDAwMDAgMDE3YjE4ODggMDE3YjI0YTAgYzAxNmZmMDAKKyAgICAgICAgIDA2MDQwMDAwIDAxN2IxODU4IDAxN2IyYWE0IGMwMTZmZjAwCisKKy8vIEFsbCB0aGUgaW50ZXJmYWNlcyB1c2luZyB0aGUgYm9hcmQ6IGNvbXgxLCB1c2luZyB0aGUgMSwyLC4uLjE2IHRpbWVzbG90cywKKy8vIGNvbXgyLCB1c2luZyB0aW1lc2xvdCAxNywgZXRjLgorCisgSW50ZXJmYWNlcyB1c2luZyB0aGlzIGJvYXJkOiAoY2hhbm5lbC1ncm91cCwgaW50ZXJmYWNlLCB0aW1lc2xvdHMpCisgICAgICAgICAgMCBjb214MTogMSAyIDMgNCA1IDYgNyA4IDkgMTAgMTEgMTIgMTMgMTQgMTUgMTYKKyAgICAgICAgICAxIGNvbXgyOiAxNworICAgICAgICAgIDIgY29teDM6IDE4CisgICAgICAgICAgMyBjb214NDogMTkKKyAgICAgICAgICA0IGNvbXg1OiAyMAorICAgICAgICAgIDUgY29teDY6IDIxCisgICAgICAgICAgNiBjb214NzogMjIKKyAgICAgICAgICA3IGNvbXg4OiAyMworICAgICAgICAgIDggY29teDk6IDI0CisgICAgICAgICAgOSBjb214MTA6IDI1CisgICAgICAgICAxMCBjb214MTE6IDI2CisgICAgICAgICAxMSBjb214MTI6IDI3CisgICAgICAgICAxMiBjb214MTM6IDI4CisgICAgICAgICAxMyBjb214MTQ6IDI5CisgICAgICAgICAxNCBjb214MTU6IDMwCisgICAgICAgICAxNSBjb214MTY6IDMxCisKKy8vIFRoZSBudW1iZXIgb2YgZXZlbnRzIGhhbmRsZWQgYnkgdGhlIGRyaXZlciBkdXJpbmcgYW4gaW50ZXJydXB0IGN5Y2xlOgorCisgSW50ZXJydXB0IHdvcmsgaGlzdG9ncmFtOgorIGhpc3RbIDBdOiAgICAgICAgMCBoaXN0WyAxXTogICAgICAgIDIgaGlzdFsgMl06ICAgIDE4NTc0IGhpc3RbIDNdOiAgICAgICA3OQorIGhpc3RbIDRdOiAgICAgICAxNCBoaXN0WyA1XTogICAgICAgIDEgaGlzdFsgNl06ICAgICAgICAwIGhpc3RbIDddOiAgICAgICAgMQorIGhpc3RbIDhdOiAgICAgICAgMCBoaXN0WyA5XTogICAgICAgIDcKKworLy8gVGhlIG51bWJlciBvZiBwYWNrZXRzIHRvIHNlbmQgaW4gdGhlIFR4IHJpbmcsIHdoZW4gYSBuZXcgb25lIGFycml2ZWQ6CisKKyBUeCByaW5nIGhpc3RvZ3JhbToKKyBoaXN0WyAwXTogICAgIDIzMjkgaGlzdFsgMV06ICAgICAgICAwIGhpc3RbIDJdOiAgICAgICAgMCBoaXN0WyAzXTogICAgICAgIDAKKworLy8gVGhlIGVycm9yIGNvdW50ZXJzIG9mIHRoZSBFMSBpbnRlcmZhY2UsIGFjY29yZGluZyB0byB0aGUgUkZDMjQ5NSwKKy8vIChzaW1pbGFyIHRvIHRoZSBDaXNjbyAic2hvdyBjb250cm9sbGVycyBlMSIgY29tbWFuZCdzIG91dHB1dDoKKy8vIGh0dHA6Ly93d3cuY2lzY28uY29tL3VuaXZlcmNkL2NjL3RkL2RvYy9wcm9kdWN0L3NvZnR3YXJlL2lvczExL3Jib29rL3JpbnRlcmZjLmh0bSN4dG9jaWQyNTY2OTEyNikKKworRGF0YSBpbiBjdXJyZW50IGludGVydmFsICg5MSBzZWNvbmRzIGVsYXBzZWQpOgorICAgOTUxNiBMaW5lIENvZGUgVmlvbGF0aW9ucywgNjUgUGF0aCBDb2RlIFZpb2xhdGlvbnMsIDIgRS1CaXQgRXJyb3JzCisgICAwIFNsaXAgU2VjcywgMiBGciBMb3NzIFNlY3MsIDIgTGluZSBFcnIgU2VjcywgMCBEZWdyYWRlZCBNaW5zCisgICAwIEVycm9yZWQgU2VjcywgMCBCdXJzdHkgRXJyIFNlY3MsIDAgU2V2ZXJlbHkgRXJyIFNlY3MsIDExIFVuYXZhaWwgU2VjcworRGF0YSBpbiBJbnRlcnZhbCAxICgxNSBtaW51dGVzKToKKyAgIDAgTGluZSBDb2RlIFZpb2xhdGlvbnMsIDAgUGF0aCBDb2RlIFZpb2xhdGlvbnMsIDAgRS1CaXQgRXJyb3JzCisgICAwIFNsaXAgU2VjcywgMCBGciBMb3NzIFNlY3MsIDAgTGluZSBFcnIgU2VjcywgMCBEZWdyYWRlZCBNaW5zCisgICAwIEVycm9yZWQgU2VjcywgMCBCdXJzdHkgRXJyIFNlY3MsIDAgU2V2ZXJlbHkgRXJyIFNlY3MsIDAgVW5hdmFpbCBTZWNzCitEYXRhIGluIGxhc3QgNCBpbnRlcnZhbHMgKDEgaG91cik6CisgICAwIExpbmUgQ29kZSBWaW9sYXRpb25zLCAwIFBhdGggQ29kZSBWaW9sYXRpb25zLCAwIEUtQml0IEVycm9ycworICAgMCBTbGlwIFNlY3MsIDAgRnIgTG9zcyBTZWNzLCAwIExpbmUgRXJyIFNlY3MsIDAgRGVncmFkZWQgTWlucworICAgMCBFcnJvcmVkIFNlY3MsIDAgQnVyc3R5IEVyciBTZWNzLCAwIFNldmVyZWx5IEVyciBTZWNzLCAwIFVuYXZhaWwgU2VjcworRGF0YSBpbiBsYXN0IDk2IGludGVydmFscyAoMjQgaG91cnMpOgorICAgMCBMaW5lIENvZGUgVmlvbGF0aW9ucywgMCBQYXRoIENvZGUgVmlvbGF0aW9ucywgMCBFLUJpdCBFcnJvcnMKKyAgIDAgU2xpcCBTZWNzLCAwIEZyIExvc3MgU2VjcywgMCBMaW5lIEVyciBTZWNzLCAwIERlZ3JhZGVkIE1pbnMKKyAgIDAgRXJyb3JlZCBTZWNzLCAwIEJ1cnN0eSBFcnIgU2VjcywgMCBTZXZlcmVseSBFcnIgU2VjcywgMCBVbmF2YWlsIFNlY3MKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworU29tZSB1bmlxdWUgb3B0aW9ucywgKG1heSBnZXQgaW50byB0aGUgZHJpdmVyIGxhdGVyKToKK1RyZWF0IHRoZW0gdmVyeSBjYXJlZnVsbHksIHRoZXNlIGNhbiBjYXVzZSBtdWNoIHRyb3VibGUhCisKKwltb2RpZmllZCBDUkMtNCwgZm9yIGltcHJvdmVkIGludGVyd29ya2luZyBvZiBDUkMtNCBhbmQgbm9uLUNSQy00CisJZGV2aWNlczogKHNlZSBwYWdlIDEwNyBhbmQgZzcwNiBBbm5leCBCKQorCQlsYmlyZWdbIDB4MWIgXSB8PSAweDA4CisJCWxiaXJlZ1sgMHgxYyBdIHw9IDB4YzAKKworCS0gVGhlIE5NRiAtICdObyBNdWx0aWZyYW1lIGFsaWdubWVudCBGb3VuZCBhZnRlciA0MDAgbXNlYycgYWxhcm0gCisJY29tZXMgaW50byBhY2NvdW50LgorCisJRkFMQyAtIHRoZSBsaW5lIGRyaXZlciBjaGlwLgorCWxvY2FsIGxvb3AgLSBJIGhlYXIgbXkgdHJhbnNtaXNzaW9uIGJhY2suCisJcmVtb3RlIGxvb3AgLSBJIGVjaG8gdGhlIHJlbW90ZSB0cmFuc21pc3Npb24gYmFjay4KKworCVNvbWV0aGluZyB1c2VmdWwgZm9yIGZpbmRpbmcgZXJyb3JzOgorCQorCQktIGxvY2FsIGxvb3AgZm9yIHRpbWVzbG90IDEgaW4gdGhlIEZBTEMgY2hpcDoKKworCSMgZWNobyA+bGJpcmVnIDB4MWQgMHgyMQorCisJCS0gU3dpdGhpbmcgdGhlIGxvb3Agb2ZmOgorCisJIyBlY2hvID5sYmlyZWcgMHgxZCAweDAwCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvc21jOS50eHQgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvc21jOS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDFlMTUwNwotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9zbWM5LnR4dApAQCAtMCwwICsxLDQyIEBACisKK1NNQyA5eHh4eCBEcml2ZXIgCitSZXZpc2lvbiAwLjEyIAorMy81Lzk2CitDb3B5cmlnaHQgMTk5NiAgRXJpayBTdGFobG1hbiAKK1JlbGVhc2VkIHVuZGVyIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gCisKK1RoaXMgZmlsZSBjb250YWlucyB0aGUgaW5zdHJ1Y3Rpb25zIGFuZCBjYXZlYXRzIGZvciBteSBTTUM5eHh4IGRyaXZlci4gIFlvdQorc2hvdWxkIG5vdCBiZSB1c2luZyB0aGUgZHJpdmVyIHdpdGhvdXQgcmVhZGluZyB0aGlzIGZpbGUuICAKKworVGhpbmdzIHRvIG5vdGUgYWJvdXQgaW5zdGFsbGF0aW9uOgorCisgIDEuIFRoZSBkcml2ZXIgc2hvdWxkIHdvcmsgb24gYWxsIGtlcm5lbHMgZnJvbSAxLjIuMTMgdW50aWwgMS4zLjcxLgorCShBIGtlcm5lbCBwYXRjaCBpcyBzdXBwbGllZCBmb3IgMS4zLjcxICkKKworICAyLiBJZiB5b3UgaW5jbHVkZSB0aGlzIGludG8gdGhlIGtlcm5lbCwgeW91IG1pZ2h0IG5lZWQgdG8gY2hhbmdlIHNvbWUKKwlvcHRpb25zLCBzdWNoIGFzIGZvciBmb3JjaW5nIElSUS4gICAKKworIAorICAzLiAgVG8gY29tcGlsZSBhcyBhIG1vZHVsZSwgcnVuICdtYWtlJyAuICAgCisJTWFrZSB3aWxsIGdpdmUgeW91IHRoZSBhcHByb3ByaWF0ZSBvcHRpb25zIGZvciB2YXJpb3VzIGtlcm5lbCBzdXBwb3J0LgorIAorICA0LiAgTG9hZGluZyB0aGUgZHJpdmVyIGFzIGEgbW9kdWxlIDoKKworCXVzZTogICBpbnNtb2Qgc21jOTE5NC5vIAorCW9wdGlvbmFsIHBhcmFtZXRlcnM6CisJCWlvPXh4eHggICAgOiB5b3VyIGJhc2UgYWRkcmVzcworCQlpcnE9eHgJICAgOiB5b3VyIGlycSAKKwkJaWZwb3J0PXggICA6CTAgZm9yIHdoYXRldmVyIGlzIGRlZmF1bHQKKwkJCQkxIGZvciB0d2lzdGVkIHBhaXIKKwkJCQkyIGZvciBBVUkgICggb3IgQk5DIG9uIHNvbWUgY2FyZHMgKQorCitIb3cgdG8gb2J0YWluIHRoZSBsYXRlc3QgdmVyc2lvbj8gCisJCitGVFA6ICAKKwlmdHA6Ly9mZW5yaXMuY2FtcHVzLnZ0LmVkdS9zbWM5L3NtYzktMTIudGFyLmd6CisJZnRwOi8vc2Zib3gudnQuZWR1L2ZpbGVib3gvRi9mZW5yaXMvc21jOS9zbWM5LTEyLnRhci5neiAKKyAgIAorCitDb250YWN0aW5nIG1lOgorICAgIGVyaWtAbWFpbC52dC5lZHUKKyAKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9zbWN0ci50eHQgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvc21jdHIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRjODY2ZjUKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvc21jdHIudHh0CkBAIC0wLDAgKzEsNjYgQEAKK1RleHQgRmlsZSBmb3IgdGhlIFNNQyBUb2tlbkNhcmQgVG9rZW5SaW5nIExpbnV4IGRyaXZlciAoc21jdHIuYykuCisgICAgICAgIEJ5IEpheSBTY2h1bGlzdCA8anNjaGxzdEBzYW1iYS5vcmc+CisKK1RoZSBMaW51eCBTTUMgVG9rZW4gUmluZyBkcml2ZXIgd29ya3Mgd2l0aCB0aGUgU01DIFRva2VuQ2FyZCBFbGl0ZSAoODExNVQpIAorSVNBIGFuZCBTTUMgVG9rZW5DYXJkIEVsaXRlL0EgKDgxMTVUL0EpIE1DQSBhZGFwdGVycy4KKworTGF0ZXN0IGluZm9ybWF0aW9uIG9uIHRoaXMgZHJpdmVyIGNhbiBiZSBvYnRhaW5lZCBvbiB0aGUgTGludXgtU05BIFdXVyBzaXRlLgorUGxlYXNlIHBvaW50IHlvdXIgYnJvd3NlciB0bzogaHR0cDovL3d3dy5saW51eC1zbmEub3JnCisKK1RoaXMgZHJpdmVyIGlzIHJhdGhlciBzaW1wbGUgdG8gdXNlLiBTZWxlY3QgWSB0byBUb2tlbiBSaW5nIGFkYXB0ZXIgc3VwcG9ydAoraW4gdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uLiBBIGNob2ljZSBmb3IgU01DIFRva2VuIFJpbmcgYWRhcHRlcnMgd2lsbAorYXBwZWFyLiBUaGlzIGRyaXZlcyBzdXBwb3J0cyBhbGwgU01DIElTQS9NQ0EgYWRhcHRlcnMuIENob29zZSB0aGlzCitvcHRpb24uIEkgcGVyc29uYWxseSByZWNvbW1lbmQgY29tcGlsaW5nIHRoZSBkcml2ZXIgYXMgYSBtb2R1bGUgKE0pLCBidXQgaWYgeW91Cit5b3Ugd291bGQgbGlrZSB0byBjb21waWxlIGl0IHN0YXRpY2x5IGFuc3dlciBZIGluc3RlYWQuCisKK1RoaXMgZHJpdmVyIHN1cHBvcnRzIG11bHRpcGxlIGFkYXB0ZXJzIHdpdGhvdXQgdGhlIG5lZWQgdG8gbG9hZCBtdWx0aXBsZSBjb3BpZXMKK29mIHRoZSBkcml2ZXIuIFlvdSBzaG91bGQgYmUgYWJsZSB0byBsb2FkIHVwIHRvIDcgYWRhcHRlcnMgd2l0aG91dCBhbnkga2VybmVsCittb2RpZmljYXRpb25zLCBpZiB5b3UgYXJlIGluIG5lZWQgb2YgbW9yZSBwbGVhc2UgY29udGFjdCB0aGUgbWFpbnRhaW5lciBvZiB0aGlzCitkcml2ZXIuCisKK0xvYWQgdGhlIGRyaXZlciBlaXRoZXIgYnkgbGlsby9sb2FkbGluIG9yIGFzIGEgbW9kdWxlLiBXaGVuIGEgbW9kdWxlIHVzaW5nIHRoZQorZm9sbG93aW5nIGNvbW1hbmQgd2lsbCBzdWZmaWNlIGZvciBtb3N0OgorCisjIG1vZHByb2JlIHNtY3RyCitzbWN0ci5jOiB2MS4wMCAxMi82Lzk5IGJ5IGpzY2hsc3RAc2FtYmEub3JnCit0cjA6IFNNQyBUb2tlbkNhcmQgODExNVQgYXQgSW8gMHgzMDAsIElycSAxMCwgUm9tIDB4ZDgwMDAsIFJhbSAweGNjMDAwLgorCitOb3cganVzdCBzZXR1cCB0aGUgZGV2aWNlIHZpYSBpZmNvbmZpZyBhbmQgc2V0IGFuZCByb3V0ZXMgeW91IG1heSBoYXZlLiBBZnRlcgordGhpcyB5b3UgYXJlIHJlYWR5IHRvIHN0YXJ0IHNlbmRpbmcgc29tZSB0b2tlbnMuCisKK0VycmF0YToKKzEpLiBGb3IgYW55b25lIHdvbmRlcmluZyB3aGVyZSB0byBwaWNrIHVwIHRoZSBTTUMgYWRhcHRlcnMgcGxlYXNlIGJyb3dzZQorICAgIHRvIGh0dHA6Ly93d3cuc21jLmNvbQorCisyKS4gSWYgeW91IGFyZSB0aGUgZmlyc3Qvb25seSBUb2tlbiBSaW5nIENsaWVudCBvbiBhIFRva2VuIFJpbmcgTEFOLCBwbGVhc2UKKyAgICBzcGVjaWZ5IHRoZSByaW5nc3BlZWQgd2l0aCB0aGUgcmluZ3NwZWVkPVs0LzE2XSBtb2R1bGUgb3B0aW9uLiBJZiBubworICAgIHJpbmdzcGVlZCBpcyBzcGVjaWZpZWQgdGhlIGRyaXZlciB3aWxsIGF0dGVtcHQgdG8gYXV0b2RldGVjdCB0aGUgcmluZworICAgIHNwZWVkIGFuZC9vciBpZiB0aGUgYWRhcHRlciBpcyB0aGUgZmlyc3Qvb25seSBzdGF0aW9uIG9uIHRoZSByaW5nIHRha2UKKyAgICB0aGUgYXBwcm9wcmlhdGUgYWN0aW9ucy4gCisKKyAgICBOT1RFOiBEZWZhdWx0IHJpbmcgc3BlZWQgaXMgMTZNQiBVVFAuCisKKzMpLiBQblAgc3VwcG9ydCBmb3IgdGhpcyBhZGFwdGVyIHN1Y2tzLiBJIHJlY29tbWVuZCBoYXJkIHNldHRpbmcgdGhlIAorICAgIElPL01FTS9JUlEgYnkgdGhlIGp1bXBlcnMgb24gdGhlIGFkYXB0ZXIuIElmIHRoaXMgaXMgbm90IHBvc3NpYmxlCisgICAgbG9hZCB0aGUgbW9kdWxlIHdpdGggdGhlIGZvbGxvd2luZyBpbz1baW9hZGRyXSBtZW09W21lbV9hZGRyXQorICAgIGlycT1baXJxX251bV0uCisKKyAgICBUaGUgZm9sbG93aW5nIElSUSwgSU8sIGFuZCBNRU0gc2V0dGluZ3MgYXJlIHN1cHBvcnRlZC4KKworICAgIElPIHBvcnRzOgorICAgIDB4MjAwLCAweDIyMCwgMHgyNDAsIDB4MjYwLCAweDI4MCwgMHgyQTAsIDB4MkMwLCAweDJFMCwgMHgzMDAsCisgICAgMHgzMjAsIDB4MzQwLCAweDM2MCwgMHgzODAuCisKKyAgICBJUlFzOgorICAgIDIsIDMsIDQsIDUsIDcsIDgsIDksIDEwLCAxMSwgMTIsIDEzLCAxNCwgMTUKKworICAgIE1lbW9yeSBhZGRyZXNzZXM6CisgICAgMHhBMDAwMCwgMHhBNDAwMCwgMHhBODAwMCwgMHhBQzAwMCwgMHhCMDAwMCwgMHhCNDAwMCwKKyAgICAweEI4MDAwLCAweEJDMDAwLCAweEMwMDAwLCAweEM0MDAwLCAweEM4MDAwLCAweENDMDAwLAorICAgIDB4RDAwMDAsIDB4RDQwMDAsIDB4RDgwMDAsIDB4REMwMDAsIDB4RTAwMDAsIDB4RTQwMDAsCisgICAgMHhFODAwMCwgMHhFQzAwMCwgMHhGMDAwMCwgMHhGNDAwMCwgMHhGODAwMCwgMHhGQzAwMAorCitUaGlzIGRyaXZlciBpcyB1bmRlciB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuIEl0cyBGaXJtd2FyZSBpbWFnZSBpcworaW5jbHVkZWQgYXMgYW4gaW5pdGlhbGl6ZWQgQy1hcnJheSBhbmQgaXMgbGljZW5zZWQgYnkgU01DIHRvIHRoZSBMaW51eAordXNlcnMgb2YgdGhpcyBkcml2ZXIuIEhvd2V2ZXIgbm8gd2FycmFudHkgYWJvdXQgaXRzIGZpdG5lc3MgaXMgZXhwcmVzc2VkIG9yCitpbXBsaWVkIGJ5IFNNQy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy90Y3AudHh0IGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3RjcC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzE3NDkwMAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy90Y3AudHh0CkBAIC0wLDAgKzEsMzkgQEAKK0hvdyB0aGUgbmV3IFRDUCBvdXRwdXQgbWFjaGluZSBbbnlpXSB3b3Jrcy4KKworCitEYXRhIGlzIGtlcHQgb24gYSBzaW5nbGUgcXVldWUuIFRoZSBza2ItPnVzZXJzIGZsYWcgdGVsbHMgdXMgaWYgdGhlIGZyYW1lIGlzCitvbmUgdGhhdCBoYXMgYmVlbiBxdWV1ZWQgYWxyZWFkeS4gVG8gYWRkIGEgZnJhbWUgd2UgdGhyb3cgaXQgb24gdGhlIGVuZC4gQWNrCit3YWxrcyBkb3duIHRoZSBsaXN0IGZyb20gdGhlIHN0YXJ0LgorCitXZSBrZWVwIGEgc2V0IG9mIGNvbnRyb2wgZmxhZ3MKKworCisJc2stPnRjcF9wZW5kX2V2ZW50CisKKwkJVENQX1BFTkRfQUNLCQkJQWNrIG5lZWRlZAorCQlUQ1BfQUNLX05PVwkJCU5lZWRlZCBub3cKKwkJVENQX1dJTkRPVwkJCVdpbmRvdyB1cGRhdGUgY2hlY2sKKwkJVENQX1dJTlpFUk8JCQlaZXJvIHByb2JpbmcKKworCisJc2stPnRyYW5zbWl0X3F1ZXVlCQlUaGUgdHJhbnNtaXNzaW9uIGZyYW1lIGJlZ2luCisJc2stPnRyYW5zbWl0X25ldwkJRmlyc3QgbmV3IGZyYW1lIHBvaW50ZXIKKwlzay0+dHJhbnNtaXRfZW5kCQlXaGVyZSB0byBhZGQgZnJhbWVzCisKKwlzay0+dGNwX2xhc3RfdHhfYWNrCQlMYXN0IGFjayBzZWVuCisJc2stPnRjcF9kdXBfYWNrCQkJRHVwIGFjayBjb3VudCBmb3IgZmFzdCByZXRyYW5zbWl0CisKKworRnJhbWVzIGFyZSBxdWV1ZWQgZm9yIG91dHB1dCBieSB0Y3Bfd3JpdGUuIFdlIGRvIG91ciBiZXN0IHRvIHNlbmQgdGhlIGZyYW1lcworb2ZmIGltbWVkaWF0ZWx5IGlmIHBvc3NpYmxlLCBidXQgb3RoZXJ3aXNlIHF1ZXVlIGFuZCBjb21wdXRlIHRoZSBib2R5CitjaGVja3N1bSBpbiB0aGUgY29weS4gCisKK1doZW4gYSB3cml0ZSBpcyBkb25lIHdlIHRyeSB0byBjbGVhciBhbnkgcGVuZGluZyBldmVudHMgYW5kIHBpZ2d5IGJhY2sgdGhlbS4KK0lmIHRoZSB3aW5kb3cgaXMgZnVsbCB3ZSBxdWV1ZSBmdWxsIHNpemVkIGZyYW1lcy4gT24gdGhlIGZpcnN0IHRpbWVvdXQgaW4KK3plcm8gd2luZG93IHdlIHNwbGl0IHRoaXMuCisKK09uIGEgdGltZXIgd2Ugd2FsayB0aGUgcmV0cmFuc21pdCBsaXN0IHRvIHNlbmQgYW55IHJldHJhbnNtaXRzLCB1cGRhdGUgdGhlCitiYWNrb2ZmIHRpbWVycyBldGMuIEEgY2hhbmdlIG9mIHJvdXRlIHRhYmxlIHN0YW1wIGNhdXNlcyBhIGNoYW5nZSBvZiBoZWFkZXIKK2FuZCByZWNvbXB1dGUuIFdlIGFkZCBhbnkgbmV3IHRjcCBsZXZlbCBoZWFkZXJzIGFuZCByZWZpbmlzaCB0aGUgY2hlY2tzdW0KK2JlZm9yZSBzZW5kaW5nLiAKKwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3RsYW4udHh0IGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3RsYW4udHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdlNmFhNWIKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvdGxhbi50eHQKQEAgLTAsMCArMSwxMTcgQEAKKyhDKSAxOTk3LTE5OTggQ2FsZGVyYSwgSW5jLgorKEMpIDE5OTggSmFtZXMgQmFua3MKKyhDKSAxOTk5LTIwMDEgVG9yYmVuIE1hdGhpYXNlbiA8dG1tQGltYWdlLmRrLCB0b3JiZW4ubWF0aGlhc2VuQGNvbXBhcS5jb20+CisKK0ZvciBkcml2ZXIgaW5mb3JtYXRpb24vdXBkYXRlcyB2aXNpdCBodHRwOi8vb3BlbnNvdXJjZS5jb21wYXEuY29tCisKKworVExBTiBkcml2ZXIgZm9yIExpbnV4LCB2ZXJzaW9uIDEuMTRhCitSRUFETUUKKworCitJLiAgU3VwcG9ydGVkIERldmljZXMuCisKKyAgICBPbmx5IFBDSSBkZXZpY2VzIHdpbGwgd29yayB3aXRoIHRoaXMgZHJpdmVyLgorCisgICAgU3VwcG9ydGVkOgorICAgIFZlbmRvciBJRAlEZXZpY2UgSUQJTmFtZQorICAgIDBlMTEJYWUzMgkJQ29tcGFxIE5ldGVsbGlnZW50IDEwLzEwMCBUWCBQQ0kgVVRQCisgICAgMGUxMQlhZTM0CQlDb21wYXEgTmV0ZWxsaWdlbnQgMTAgVCBQQ0kgVVRQCisgICAgMGUxMQlhZTM1CQlDb21wYXEgSW50ZWdyYXRlZCBOZXRGbGV4IDMvUAorICAgIDBlMTEJYWU0MAkJQ29tcGFxIE5ldGVsbGlnZW50IER1YWwgMTAvMTAwIFRYIFBDSSBVVFAKKyAgICAwZTExCWFlNDMJCUNvbXBhcSBOZXRlbGxpZ2VudCBJbnRlZ3JhdGVkIDEwLzEwMCBUWCBVVFAKKyAgICAwZTExCWIwMTEJCUNvbXBhcSBOZXRlbGxpZ2VudCAxMC8xMDAgVFggRW1iZWRkZWQgVVRQCisgICAgMGUxMQliMDEyCQlDb21wYXEgTmV0ZWxsaWdlbnQgMTAgVC8yIFBDSSBVVFAvQ29heAorICAgIDBlMTEJYjAzMAkJQ29tcGFxIE5ldGVsbGlnZW50IDEwLzEwMCBUWCBVVFAKKyAgICAwZTExCWYxMzAJCUNvbXBhcSBOZXRGbGV4IDMvUAorICAgIDBlMTEJZjE1MAkJQ29tcGFxIE5ldEZsZXggMy9QCisgICAgMTA4ZAkwMDEyCQlPbGljb20gT0MtMjMyNQkKKyAgICAxMDhkCTAwMTMJCU9saWNvbSBPQy0yMTgzCisgICAgMTA4ZAkwMDE0CQlPbGljb20gT0MtMjMyNgkKKworCisgICAgQ2F2ZWF0czoKKyAgICAKKyAgICBJIGFtIG5vdCBzdXJlIGlmIDEwMEJhc2VUWCBkYXVnaHRlcmJvYXJkcyAoZm9yIHRob3NlIGNhcmRzIHdoaWNoCisgICAgc3VwcG9ydCBzdWNoIHRoaW5ncykgd2lsbCB3b3JrLiAgSSBoYXZlbid0IGhhZCBhbnkgc29saWQgZXZpZGVuY2UKKyAgICBlaXRoZXIgd2F5LgorCisgICAgSG93ZXZlciwgaWYgYSBjYXJkIHN1cHBvcnRzIDEwMEJhc2VUeCB3aXRob3V0IHJlcXVpcmluZyBhbiBhZGQKKyAgICBvbiBkYXVnaHRlcmJvYXJkLCBpdCBzaG91bGQgd29yayB3aXRoIDEwMEJhc2VUeC4KKworICAgIFRoZSAiTmV0ZWxsaWdlbnQgMTAgVC8yIFBDSSBVVFAvQ29heCIgKGIwMTIpIGRldmljZSBpcyB1bnRlc3RlZCwKKyAgICBidXQgSSBkbyBub3QgZXhwZWN0IGFueSBwcm9ibGVtcy4KKyAgICAKKworSUkuICAgRHJpdmVyIE9wdGlvbnMKKwkxLiBZb3UgY2FuIGFwcGVuZCBkZWJ1Zz14IHRvIHRoZSBlbmQgb2YgdGhlIGluc21vZCBsaW5lIHRvIGdldAorICAgICAgICAgICBkZWJ1ZyBtZXNzYWdlcywgd2hlcmUgeCBpcyBhIGJpdCBmaWVsZCB3aGVyZSB0aGUgYml0cyBtZWFuCisJICAgdGhlIGZvbGxvd2luZzoKKwkgICAKKwkgICAweDAxCQlUdXJuIG9uIGdlbmVyYWwgZGVidWdnaW5nIG1lc3NhZ2VzLgorCSAgIDB4MDIJCVR1cm4gb24gcmVjZWl2ZSBkZWJ1Z2dpbmcgbWVzc2FnZXMuCisJICAgMHgwNAkJVHVybiBvbiB0cmFuc21pdCBkZWJ1Z2dpbmcgbWVzc2FnZXMuCisJICAgMHgwOAkJVHVybiBvbiBsaXN0IGRlYnVnZ2luZyBtZXNzYWdlcy4KKworCTIuIFlvdSBjYW4gYXBwZW5kIGF1aT0xIHRvIHRoZSBlbmQgb2YgdGhlIGluc21vZCBsaW5lIHRvIGNhdXNlCisgICAgICAgICAgIHRoZSBhZGFwdGVyIHRvIHVzZSB0aGUgQVVJIGludGVyZmFjZSBpbnN0ZWFkIG9mIHRoZSAxMCBCYXNlIFQKKyAgICAgICAgICAgaW50ZXJmYWNlLiAgVGhpcyBpcyBhbHNvIHdoYXQgdG8gZG8gaWYgeW91IHdhbnQgdG8gdXNlIHRoZSBCTkMKKwkgICBjb25uZWN0b3Igb24gYSBUTEFOIGJhc2VkIGRldmljZS4gIChTZXR0aW5nIHRoaXMgb3B0aW9uIG9uIGEKKwkgICBkZXZpY2UgdGhhdCBkb2VzIG5vdCBoYXZlIGFuIEFVSS9CTkMgY29ubmVjdG9yIHdpbGwgcHJvYmFibHkKKwkgICBjYXVzZSBpdCB0byBub3QgZnVuY3Rpb24gY29ycmVjdGx5LikKKworCTMuIFlvdSBjYW4gc2V0IGR1cGxleD0xIHRvIGZvcmNlIGhhbGYgZHVwbGV4LCBhbmQgZHVwbGV4PTIgdG8KKwkgICBmb3JjZSBmdWxsIGR1cGxleC4KKworCTQuIFlvdSBjYW4gc2V0IHNwZWVkPTEwIHRvIGZvcmNlIDEwTWJzIG9wZXJhdGlvbiwgYW5kIHNwZWVkPTEwMAorCSAgIHRvIGZvcmNlIDEwME1icyBvcGVyYXRpb24uIChJJ20gbm90IHN1cmUgd2hhdCB3aWxsIGhhcHBlbgorCSAgIGlmIGEgY2FyZCB3aGljaCBvbmx5IHN1cHBvcnRzIDEwTWJzIGlzIGZvcmNlZCBpbnRvIDEwME1icworCSAgIG1vZGUuKQorCisJNS4gWW91IGhhdmUgdG8gdXNlIHNwZWVkPVggZHVwbGV4PVkgdG9nZXRoZXIgbm93LiBJZiB5b3UganVzdAorCSAgIGRvICJpbnNtb2QgdGxhbi5vIHNwZWVkPTEwMCIgdGhlIGRyaXZlciB3aWxsIGRvIEF1dG8tTmVnLgorCSAgIFRvIGZvcmNlIGEgMTBNYnBzIEhhbGYtRHVwbGV4IGxpbmsgZG8gImluc21vZCB0bGFuLm8gc3BlZWQ9MTAgCisJICAgZHVwbGV4PTEiLgorCisJNi4gSWYgdGhlIGRyaXZlciBpcyBidWlsdCBpbnRvIHRoZSBrZXJuZWwsIHlvdSBjYW4gdXNlIHRoZSAzcmQKKwkgICBhbmQgNHRoIHBhcmFtZXRlcnMgdG8gc2V0IGF1aSBhbmQgZGVidWcgcmVzcGVjdGl2ZWx5LiAgRm9yCisJICAgZXhhbXBsZToKKworCSAgIGV0aGVyPTAsMCwweDEsMHg3LGV0aDAKKworCSAgIFRoaXMgc2V0cyBhdWkgdG8gMHgxIGFuZCBkZWJ1ZyB0byAweDcsIGFzc3VtaW5nIGV0aDAgaXMgYQorCSAgIHN1cHBvcnRlZCBUTEFOIGRldmljZS4KKworCSAgIFRoZSBiaXRzIGluIHRoZSB0aGlyZCBieXRlIGFyZSBhc3NpZ25lZCBhcyBmb2xsb3dzOgorCisJCTB4MDEgPSBhdWkKKwkJMHgwMiA9IHVzZSBoYWxmIGR1cGxleAorCQkweDA0ID0gdXNlIGZ1bGwgZHVwbGV4CisJCTB4MDggPSB1c2UgMTBCYXNlVAorCQkweDEwID0gdXNlIDEwMEJhc2VUeAorCisJICAgWW91IGFsc28gbmVlZCB0byBzZXQgYm90aCBzcGVlZCBhbmQgZHVwbGV4IHNldHRpbmdzIHdoZW4gZm9yY2luZworCSAgIHNwZWVkcyB3aXRoIGtlcm5lbC1wYXJhbWV0ZXJzLiAKKwkgICBldGhlcj0wLDAsMHgxMiwwLGV0aDAgd2lsbCBmb3JjZSBsaW5rIHRvIDEwME1icHMgSGFsZi1EdXBsZXguCisKKwk3LiBJZiB5b3UgaGF2ZSBtb3JlIHRoYW4gb25lIHRsYW4gYWRhcHRlciBpbiB5b3VyIHN5c3RlbSwgeW91IGNhbgorCSAgIHVzZSB0aGUgYWJvdmUgb3B0aW9ucyBvbiBhIHBlciBhZGFwdGVyIGJhc2lzLiBUbyBmb3JjZSBhIDEwME1iaXQvSEQKKwkgICBsaW5rIHdpdGggeW91ciBldGgxIGFkYXB0ZXIgdXNlOgorCSAgIAorCSAgIGluc21vZCB0bGFuIHNwZWVkPTAsMTAwIGR1cGxleD0wLDEKKworCSAgIE5vdyBldGgwIHdpbGwgdXNlIGF1dG8tbmVnIGFuZCBldGgxIHdpbGwgYmUgZm9yY2VkIHRvIDEwME1iaXQvSEQuCisJICAgTm90ZSB0aGF0IHRoZSB0bGFuIGRyaXZlciBzdXBwb3J0cyBhIG1heGltdW0gb2YgOCBhZGFwdGVycy4KKworCitJSUkuICBUaGluZ3MgdG8gdHJ5IGlmIHlvdSBoYXZlIHByb2JsZW1zLgorCTEuIE1ha2Ugc3VyZSB5b3VyIGNhcmQncyBQQ0kgaWQgaXMgYW1vbmcgdGhvc2UgbGlzdGVkIGluCisJICAgc2VjdGlvbiBJLCBhYm92ZS4KKwkyLiBNYWtlIHN1cmUgcm91dGluZyBpcyBjb3JyZWN0LgorCTMuIFRyeSBmb3JjaW5nIGRpZmZlcmVudCBzcGVlZC9kdXBsZXggc2V0dGluZ3MKKworCitUaGVyZSBpcyBhbHNvIGEgdGxhbiBtYWlsaW5nIGxpc3Qgd2hpY2ggeW91IGNhbiBqb2luIGJ5IHNlbmRpbmcgInN1YnNjcmliZSB0bGFuIgoraW4gdGhlIGJvZHkgb2YgYW4gZW1haWwgdG8gbWFqb3Jkb21vQHZ1c2VyLnZ1LnVuaW9uLmVkdS4KK1RoZXJlIGlzIGFsc28gYSB0bGFuIHdlYnNpdGUgYXQgaHR0cDovL29wZW5zb3VyY2UuY29tcGFxLmNvbQorCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvdG1zMzgwdHIudHh0IGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3RtczM4MHRyLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNzllNTI3Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3RtczM4MHRyLnR4dApAQCAtMCwwICsxLDE0NyBAQAorVGV4dCBmaWxlIGZvciB0aGUgTGludXggU3lzS29ubmVjdCBUb2tlbiBSaW5nIElTQS9QQ0kgQWRhcHRlciBEcml2ZXIuCisJVGV4dCBmaWxlIGJ5OiBKYXkgU2NodWxpc3QgPGpzY2hsc3RAc2FtYmEub3JnPgorCitUaGUgTGludXggU3lzS29ubmVjdCBUb2tlbiBSaW5nIGRyaXZlciB3b3JrcyB3aXRoIHRoZSBTeXNLb25uZWN0IFRSNC8xNigrKSBJU0EsCitTeXNLb25uZWN0IFRSNC8xNigrKSBQQ0ksIFN5c0tvbm5lY3QgVFI0LzE2IFBDSSwgYW5kIG9sZGVyIHJldmlzaW9ucyBvZiB0aGUKK1NLIE5FVCBUUjQvMTYgSVNBIGNhcmQuCisKK0xhdGVzdCBpbmZvcm1hdGlvbiBvbiB0aGlzIGRyaXZlciBjYW4gYmUgb2J0YWluZWQgb24gdGhlIExpbnV4LVNOQSBXV1cgc2l0ZS4KK1BsZWFzZSBwb2ludCB5b3VyIGJyb3dzZXIgdG86IAoraHR0cDovL3d3dy5saW51eC1zbmEub3JnCisKK01hbnkgdGhhbmtzIHRvIENocmlzdG9waCBHb29zIGZvciBoaXMgZXhjZWxsZW50IHdvcmsgb24gdGhpcyBkcml2ZXIgYW5kCitTeXNLb25uZWN0IGZvciBkb25hdGluZyB0aGUgYWRhcHRlcnMgdG8gTGludXgtU05BIGZvciB0aGUgdGVzdGluZyBhbmQgCittYWludGVuYW5jZSBvZiB0aGlzIGRldmljZSBkcml2ZXIuCisKK0ltcG9ydGFudCBpbmZvcm1hdGlvbiB0byBiZSBub3RlZDoKKzEuIEFkYXB0ZXJzIGNhbiBiZSBzbG93IHRvIG9wZW4gKH4yMCBzZWNzKSBhbmQgY2xvc2UgKH41IHNlY3MpLCBwbGVhc2UgYmUgCisgICBwYXRpZW50LgorMi4gVGhpcyBkcml2ZXIgd29ya3MgdmVyeSB3ZWxsIHdoZW4gYXV0b3Byb2JpbmcgZm9yIGFkYXB0ZXJzLiBXaHkgZXZlbiAKKyAgIHRoaW5rIGFib3V0IHRob3NlIG5hc3R5IGlvL2ludC9kbWEgc2V0dGluZ3Mgb2YgbW9kcHJvYmUgd2hlbiB0aGUgZHJpdmVyIAorICAgd2lsbCBkbyBpdCBhbGwgZm9yIHlvdSEKKworVGhpcyBkcml2ZXIgaXMgcmF0aGVyIHNpbXBsZSB0byB1c2UuIFNlbGVjdCBZIHRvIFRva2VuIFJpbmcgYWRhcHRlciBzdXBwb3J0CitpbiB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24uIEEgY2hvaWNlIGZvciBTeXNLb25uZWN0IFRva2VuIFJpbmcgYWRhcHRlcnMgd2lsbAorYXBwZWFyLiBUaGlzIGRyaXZlcyBzdXBwb3J0cyBhbGwgU3lzS29ubmVjdCBJU0EgYW5kIFBDSSBhZGFwdGVycy4gQ2hvb3NlIHRoaXMKK29wdGlvbi4gSSBwZXJzb25hbGx5IHJlY29tbWVuZCBjb21waWxpbmcgdGhlIGRyaXZlciBhcyBhIG1vZHVsZSAoTSksIGJ1dCBpZiB5b3UKK3lvdSB3b3VsZCBsaWtlIHRvIGNvbXBpbGUgaXQgc3RhdGljbHkgYW5zd2VyIFkgaW5zdGVhZC4KKworVGhpcyBkcml2ZXIgc3VwcG9ydHMgbXVsdGlwbGUgYWRhcHRlcnMgd2l0aG91dCB0aGUgbmVlZCB0byBsb2FkIG11bHRpcGxlIGNvcGllcworb2YgdGhlIGRyaXZlci4gWW91IHNob3VsZCBiZSBhYmxlIHRvIGxvYWQgdXAgdG8gNyBhZGFwdGVycyB3aXRob3V0IGFueSBrZXJuZWwKK21vZGlmaWNhdGlvbnMsIGlmIHlvdSBhcmUgaW4gbmVlZCBvZiBtb3JlIHBsZWFzZSBjb250YWN0IHRoZSBtYWludGFpbmVyIG9mIHRoaXMKK2RyaXZlci4KKworTG9hZCB0aGUgZHJpdmVyIGVpdGhlciBieSBsaWxvL2xvYWRsaW4gb3IgYXMgYSBtb2R1bGUuIFdoZW4gYSBtb2R1bGUgdXNpbmcgdGhlCitmb2xsb3dpbmcgY29tbWFuZCB3aWxsIHN1ZmZpY2UgZm9yIG1vc3Q6CisKKyMgbW9kcHJvYmUgc2t0cgorCitUaGlzIHdpbGwgcHJvZHVjZSBvdXRwdXQgc2ltaWxhciB0byB0aGUgZm9sbG93aW5nOiAoT3V0cHV0IGlzIHVzZXIgc3BlY2lmaWMpCisKK3NrdHIuYzogdjEuMDEgMDgvMjkvOTcgYnkgQ2hyaXN0b3BoIEdvb3MKK3RyMDogU0sgTkVUIFRSIDQvMTYgUENJIGZvdW5kIGF0IDB4NjEwMCwgdXNpbmcgSVJRIDE3LgordHIxOiBTSyBORVQgVFIgNC8xNiBQQ0kgZm91bmQgYXQgMHg2MjAwLCB1c2luZyBJUlEgMTYuCit0cjI6IFNLIE5FVCBUUiA0LzE2IElTQSBmb3VuZCBhdCAweGEyMCwgdXNpbmcgSVJRIDEwIGFuZCBETUEgNS4KKworTm93IGp1c3Qgc2V0dXAgdGhlIGRldmljZSB2aWEgaWZjb25maWcgYW5kIHNldCBhbmQgcm91dGVzIHlvdSBtYXkgaGF2ZS4gQWZ0ZXIKK3RoaXMgeW91IGFyZSByZWFkeSB0byBzdGFydCBzZW5kaW5nIHNvbWUgdG9rZW5zLgorCitFcnJhdGE6CitGb3IgYW55b25lIHdvbmRlcmluZyB3aGVyZSB0byBwaWNrIHVwIHRoZSBTeXNLb25uZWN0IGFkYXB0ZXJzIHBsZWFzZSBicm93c2UKK3RvIGh0dHA6Ly93d3cuc3lza29ubmVjdC5jb20KKworVGhpcyBkcml2ZXIgaXMgdW5kZXIgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiBJdHMgRmlybXdhcmUgaW1hZ2UgaXMgCitpbmNsdWRlZCBhcyBhbiBpbml0aWFsaXplZCBDLWFycmF5IGFuZCBpcyBsaWNlbnNlZCBieSBTeXNLb25uZWN0IHRvIHRoZSBMaW51eCAKK3VzZXJzIG9mIHRoaXMgZHJpdmVyLiBIb3dldmVyIG5vIHdhcnJhbnR5IGFib3V0IGl0cyBmaXRuZXNzIGlzIGV4cHJlc3NlZCBvciAKK2ltcGxpZWQgYnkgU3lzS29ubmVjdC4KKworQmVsb3cgZmluZCBhdHRhY2hlZCB0aGUgc2V0dGluZyBmb3IgdGhlIFNLIE5FVCBUUiA0LzE2IElTQSBhZGFwdGVycworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAgICAgICAgICAgICAgICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgICAgICAgICAgICAgICAgICAqKiogICBDIE8gTiBUIEUgTiBUIFMgICAqKioKKyAgICAgICAgICAgICAgICAgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKKyAgICAgICAgICAgICAgICAxKSBMb2NhdGlvbiBvZiBESVAtU3dpdGNoIFcxCisgICAgICAgICAgICAgICAgMikgRGVmYXVsdCBzZXR0aW5ncworICAgICAgICAgICAgICAgIDMpIERJUC1Td2l0Y2ggVzEgZGVzY3JpcHRpb24KKworCisgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgIENIQVBURVIgMSAgICAgTE9DQVRJT04gT0YgRElQLVNXSVRDSAorICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitVxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEvwor/lXExMTExMS/ICAgICAgICAgICAgICAgICAgICAgICAgIFXExMTExL8gICAgICAgICAgICBVxMTEvyAgICAgICAgIP4KK/5BxMTExMTEVSAgICAgICAgICAgICAgICAgICAgICBXMSBBxMTExMRVICAgICBVxMTExL8g/iAgIP4gICAgICAgICD+Civ+VcTExMTExL8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg/iAgICD+IP4gICD+ICAgICAgVcTExb8KK/5BxMTExMTEVSAgICAgICAgICAgICAgVcTExMTExMTExMTEvyAgICAgICAgICBBxMTExFUg/iAgIP4gICAgICD+ICD+/gor/lXExMTExMS/ICAgICAgICAgICAgICD+ICAgICAgICAgICD+ICAgICAgICAgIFXExMS/ICBBxMTEVSAgICAgIEHExMVVCiv+QcTExMTExFUgICAgICAgICAgICAgIP4gVE1TMzgwQzI2IP4gICAgICAgICAg/iAgIP4gICAgICAgICAgICAgICAg/gor/lXExMTExMS/ICAgICAgICAgICAgICD+ICAgICAgICAgICD+ICAgICAgICAgIEHExMRVICAgICAgICAgICAgICAgIEHEvwor/kHExMTExMRVICAgICAgICAgICAgICD+ICAgICAgICAgICD+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIP4g/gor/iAgICAgICAgICAgICAgICAgICAgICBBxMTExMTExMTExMRVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIP4g/gor/iAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIP4g/gor/iAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEHEVQor/iAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIP4KK/4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICD+Civ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg/gor/iAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIP4KK0HExMTExMTExMTExMRBxMTExMTExMTExMTExMTExEHExEHExMTExMTExMTExMTExMTExMTExMTExEHExMTExMTExMRVCisgICAgICAgICAgICAgQcTExMTExMTExMTExMTExMRVICBBxMTExMTExMTExMTExMTExMTExMTExMRVCisKKyAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgQ0hBUFRFUiAyICAgICBERUZBVUxUIFNFVFRJTkdTCisgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKyAgICAgICAgICBXMSAgICAxICAyICAzICA0ICA1ICA2ICA3ICA4CisgICAgICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgICAgICAgIHwgT04gICAgWCAgICAgICAgICAgICAgICAgICAgICB8CisgICAgICAgIHwgT0ZGICAgICAgWCAgWCAgWCAgWCAgWCAgWCAgWCB8CisgICAgICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisKKyAgICAgICAgVzEuMSA9IE9OICAgICAgICAgICAgICAgQWRhcHRlciBkcml2ZXMgYWRkcmVzcyBsaW5lcyBTQTE3Li4xOQorICAgICAgICBXMS4yIC0gMS41ID0gT0ZGICAgICAgICBCb290Uk9NIGRpc2FibGVkCisgICAgICAgIFcxLjYgLSAxLjggPSBPRkYgICAgICAgIEkvTyBhZGRyZXNzIDBBMjBoCisKKyAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgQ0hBUFRFUiAzICAgICBESVAgU1dJVENIIFcxIERFU0NSSVBUSU9OCisgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKyAgICAgIFXExMRBxMTEQcTExEHExMRBxMTEQcTExEHExMRBxMTEvyAgT04KKyAgICAgIP4gMSD+IDIg/iAzIP4gNCD+IDUg/iA2IP4gNyD+IDgg/gorICAgICAgQcTExEHExMRBxMTEQcTExEHExMRBxMTEQcTExEHExMRVICBPRkYKKyAgICAgIHxBRCB8IEJvb3RST00gQWRkci4gfCAgSS9PICAgICAgfAorICAgICAgKy0rLSstLS0tLS0tKy0tLS0tLS0rLS0tLS0rLS0tLS0rCisgICAgICAgIHwgICAgICAgICB8ICAgICAgICAgICAgIHwKKyAgICAgICAgfCAgICAgICAgIHwgICAgICAgICAgICAgKy0tLS0tLSA2ICAgICA3ICAgICA4CisgICAgICAgIHwgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgT04gICAgT04gICAgT04gICAgICAgMTkwMGgKKyAgICAgICAgfCAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICBPTiAgICBPTiAgICBPRkYgICAgICAwOTAwaAorICAgICAgICB8ICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgIE9OICAgIE9GRiAgIE9OICAgICAgIDE5ODBoCisgICAgICAgIHwgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgT04gICAgT0ZGICAgT0ZGICAgICAgMDk4MGgKKyAgICAgICAgfCAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICBPRkYgICBPTiAgICBPTiAgICAgICAxYjIwaAorICAgICAgICB8ICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgIE9GRiAgIE9OICAgIE9GRiAgICAgIDBiMjBoCisgICAgICAgIHwgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgT0ZGICAgT0ZGICAgT04gICAgICAgMWEyMGgKKyAgICAgICAgfCAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICBPRkYgICBPRkYgICBPRkYgICAgICAwYTIwaCAgICAoKykKKyAgICAgICAgfCAgICAgICAgIHwKKyAgICAgICAgfCAgICAgICAgIHwKKyAgICAgICAgfCAgICAgICAgICstLS0tLS0tLSAyICAgICAzICAgICA0ICAgICA1CisgICAgICAgIHwgICAgICAgICAgICAgICAgICAgT0ZGICAgeCAgICAgeCAgICAgeCAgICAgICBkaXNhYmxlZCAgKCspCisgICAgICAgIHwgICAgICAgICAgICAgICAgICAgT04gICAgT04gICAgT04gICAgT04gICAgICBDMDAwMAorICAgICAgICB8ICAgICAgICAgICAgICAgICAgIE9OICAgIE9OICAgIE9OICAgIE9GRiAgICAgQzQwMDAKKyAgICAgICAgfCAgICAgICAgICAgICAgICAgICBPTiAgICBPTiAgICBPRkYgICBPTiAgICAgIEM4MDAwCisgICAgICAgIHwgICAgICAgICAgICAgICAgICAgT04gICAgT04gICAgT0ZGICAgT0ZGICAgICBDQzAwMAorICAgICAgICB8ICAgICAgICAgICAgICAgICAgIE9OICAgIE9GRiAgIE9OICAgIE9OICAgICAgRDAwMDAKKyAgICAgICAgfCAgICAgICAgICAgICAgICAgICBPTiAgICBPRkYgICBPTiAgICBPRkYgICAgIEQ0MDAwCisgICAgICAgIHwgICAgICAgICAgICAgICAgICAgT04gICAgT0ZGICAgT0ZGICAgT04gICAgICBEODAwMAorICAgICAgICB8ICAgICAgICAgICAgICAgICAgIE9OICAgIE9GRiAgIE9GRiAgIE9GRiAgICAgREMwMDAKKyAgICAgICAgfAorICAgICAgICB8CisgICAgICAgICstLS0tLSAxCisgICAgICAgICAgICAgICBPRkYgICAgYWRhcHRlciBkb2VzIE5PVCBkcml2ZSBTQTwxNy4uMTk+CisgICAgICAgICAgICAgICBPTiAgICAgYWRhcHRlciBkcml2ZXMgU0E8MTcuLjE5PiAgKCspCisKKworICAgICAgICAoKykgbWVhbnMgZGVmYXVsdCBzZXR0aW5nCisKKyAgICAgICAgICAgICAgICAgICAgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy90dW50YXAudHh0IGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3R1bnRhcC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWMzZDEwOQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy90dW50YXAudHh0CkBAIC0wLDAgKzEsMTQ3IEBACitVbml2ZXJzYWwgVFVOL1RBUCBkZXZpY2UgZHJpdmVyLgorQ29weXJpZ2h0IChDKSAxOTk5LTIwMDAgTWF4aW0gS3Jhc255YW5za3kgPG1heF9ta0B5YWhvby5jb20+CisKKyAgTGludXgsIFNvbGFyaXMgZHJpdmVycyAKKyAgQ29weXJpZ2h0IChDKSAxOTk5LTIwMDAgTWF4aW0gS3Jhc255YW5za3kgPG1heF9ta0B5YWhvby5jb20+CisKKyAgRnJlZUJTRCBUQVAgZHJpdmVyIAorICBDb3B5cmlnaHQgKGMpIDE5OTktMjAwMCBNYWtzaW0gWWV2bWVua2luIDxtX2V2bWVua2luQHlhaG9vLmNvbT4KKworICBSZXZpc2lvbiBvZiB0aGlzIGRvY3VtZW50IDIwMDIgYnkgRmxvcmlhbiBUaGllbCA8Zmxvcmlhbi50aGllbEBnbXgubmV0PgorCisxLiBEZXNjcmlwdGlvbgorICBUVU4vVEFQIHByb3ZpZGVzIHBhY2tldCByZWNlcHRpb24gYW5kIHRyYW5zbWlzc2lvbiBmb3IgdXNlciBzcGFjZSBwcm9ncmFtcy4gCisgIEl0IGNhbiBiZSBzZWVuIGFzIGEgc2ltcGxlIFBvaW50LXRvLVBvaW50IG9yIEV0aGVybmV0IGRldmljZSwgd2hpY2gsCisgIGluc3RlYWQgb2YgcmVjZWl2aW5nIHBhY2tldHMgZnJvbSBwaHlzaWNhbCBtZWRpYSwgcmVjZWl2ZXMgdGhlbSBmcm9tIAorICB1c2VyIHNwYWNlIHByb2dyYW0gYW5kIGluc3RlYWQgb2Ygc2VuZGluZyBwYWNrZXRzIHZpYSBwaHlzaWNhbCBtZWRpYSAKKyAgd3JpdGVzIHRoZW0gdG8gdGhlIHVzZXIgc3BhY2UgcHJvZ3JhbS4gCisKKyAgSW4gb3JkZXIgdG8gdXNlIHRoZSBkcml2ZXIgYSBwcm9ncmFtIGhhcyB0byBvcGVuIC9kZXYvbmV0L3R1biBhbmQgaXNzdWUgYQorICBjb3JyZXNwb25kaW5nIGlvY3RsKCkgdG8gcmVnaXN0ZXIgYSBuZXR3b3JrIGRldmljZSB3aXRoIHRoZSBrZXJuZWwuIEEgbmV0d29yaworICBkZXZpY2Ugd2lsbCBhcHBlYXIgYXMgdHVuWFggb3IgdGFwWFgsIGRlcGVuZGluZyBvbiB0aGUgb3B0aW9ucyBjaG9zZW4uIFdoZW4KKyAgdGhlIHByb2dyYW0gY2xvc2VzIHRoZSBmaWxlIGRlc2NyaXB0b3IsIHRoZSBuZXR3b3JrIGRldmljZSBhbmQgYWxsCisgIGNvcnJlc3BvbmRpbmcgcm91dGVzIHdpbGwgZGlzYXBwZWFyLgorCisgIERlcGVuZGluZyBvbiB0aGUgdHlwZSBvZiBkZXZpY2UgY2hvc2VuIHRoZSB1c2Vyc3BhY2UgcHJvZ3JhbSBoYXMgdG8gcmVhZC93cml0ZQorICBJUCBwYWNrZXRzICh3aXRoIHR1bikgb3IgZXRoZXJuZXQgZnJhbWVzICh3aXRoIHRhcCkuIFdoaWNoIG9uZSBpcyBiZWluZyB1c2VkCisgIGRlcGVuZHMgb24gdGhlIGZsYWdzIGdpdmVuIHdpdGggdGhlIGlvY3RsKCkuCisKKyAgVGhlIHBhY2thZ2UgZnJvbSBodHRwOi8vdnR1bi5zb3VyY2Vmb3JnZS5uZXQvdHVuIGNvbnRhaW5zIHR3byBzaW1wbGUgZXhhbXBsZXMKKyAgZm9yIGhvdyB0byB1c2UgdHVuIGFuZCB0YXAgZGV2aWNlcy4gQm90aCBwcm9ncmFtcyB3b3JrIGxpa2UgYSBicmlkZ2UgYmV0d2VlbgorICB0d28gbmV0d29yayBpbnRlcmZhY2VzLgorICBicl9zZWxlY3QuYyAtIGJyaWRnZSBiYXNlZCBvbiBzZWxlY3Qgc3lzdGVtIGNhbGwuCisgIGJyX3NpZ2lvLmMgIC0gYnJpZGdlIGJhc2VkIG9uIGFzeW5jIGlvIGFuZCBTSUdJTyBzaWduYWwuCisgIEhvd2V2ZXIsIHRoZSBiZXN0IGV4YW1wbGUgaXMgVlR1biBodHRwOi8vdnR1bi5zb3VyY2Vmb3JnZS5uZXQgOikpCisKKzIuIENvbmZpZ3VyYXRpb24gCisgIENyZWF0ZSBkZXZpY2Ugbm9kZToKKyAgICAgbWtkaXIgL2Rldi9uZXQgKGlmIGl0IGRvZXNuJ3QgZXhpc3QgYWxyZWFkeSkKKyAgICAgbWtub2QgL2Rldi9uZXQvdHVuIGMgMTAgMjAwCisgIAorICBTZXQgcGVybWlzc2lvbnM6CisgICAgIGUuZy4gY2htb2QgMDcwMCAvZGV2L25ldC90dW4KKyAgICAgaWYgeW91IHdhbnQgdGhlIGRldmljZSBvbmx5IGFjY2Vzc2libGUgYnkgcm9vdC4gR2l2aW5nIHJlZ3VsYXIgdXNlcnMgdGhlCisgICAgIHJpZ2h0IHRvIGFzc2lnbiBuZXR3b3JrIGRldmljZXMgaXMgTk9UIGEgZ29vZCBpZGVhLiBVc2VycyBjb3VsZCBhc3NpZ24KKyAgICAgYm9ndXMgbmV0d29yayBpbnRlcmZhY2VzIHRvIHRyaWNrIGZpcmV3YWxscyBvciBhZG1pbmlzdHJhdG9ycy4KKworICBEcml2ZXIgbW9kdWxlIGF1dG9sb2FkaW5nCisKKyAgICAgTWFrZSBzdXJlIHRoYXQgIktlcm5lbCBtb2R1bGUgbG9hZGVyIiAtIG1vZHVsZSBhdXRvLWxvYWRpbmcKKyAgICAgc3VwcG9ydCBpcyBlbmFibGVkIGluIHlvdXIga2VybmVsLiAgVGhlIGtlcm5lbCBzaG91bGQgbG9hZCBpdCBvbgorICAgICBmaXJzdCBhY2Nlc3MuCisgIAorICBNYW51YWwgbG9hZGluZyAKKyAgICAgaW5zZXJ0IHRoZSBtb2R1bGUgYnkgaGFuZDoKKyAgICAgICAgbW9kcHJvYmUgdHVuCisKKyAgSWYgeW91IGRvIGl0IHRoZSBsYXR0ZXIgd2F5LCB5b3UgaGF2ZSB0byBsb2FkIHRoZSBtb2R1bGUgZXZlcnkgdGltZSB5b3UKKyAgbmVlZCBpdCwgaWYgeW91IGRvIGl0IHRoZSBvdGhlciB3YXkgaXQgd2lsbCBiZSBhdXRvbWF0aWNhbGx5IGxvYWRlZCB3aGVuCisgIC9kZXYvbmV0L3R1biBpcyBiZWluZyBvcGVuZWQuCisKKzMuIFByb2dyYW0gaW50ZXJmYWNlIAorICAzLjEgTmV0d29yayBkZXZpY2UgYWxsb2NhdGlvbjoKKworICBjaGFyICpkZXYgc2hvdWxkIGJlIHRoZSBuYW1lIG9mIHRoZSBkZXZpY2Ugd2l0aCBhIGZvcm1hdCBzdHJpbmcgKGUuZy4KKyAgInR1biVkIiksIGJ1dCAoYXMgZmFyIGFzIEkgY2FuIHNlZSkgdGhpcyBjYW4gYmUgYW55IHZhbGlkIG5ldHdvcmsgZGV2aWNlIG5hbWUuCisgIE5vdGUgdGhhdCB0aGUgY2hhcmFjdGVyIHBvaW50ZXIgYmVjb21lcyBvdmVyd3JpdHRlbiB3aXRoIHRoZSByZWFsIGRldmljZSBuYW1lCisgIChlLmcuICJ0dW4wIikKKworICAjaW5jbHVkZSA8bGludXgvaWYuaD4KKyAgI2luY2x1ZGUgPGxpbnV4L2lmX3R1bi5oPgorCisgIGludCB0dW5fYWxsb2MoY2hhciAqZGV2KQorICB7CisgICAgICBzdHJ1Y3QgaWZyZXEgaWZyOworICAgICAgaW50IGZkLCBlcnI7CisKKyAgICAgIGlmKCAoZmQgPSBvcGVuKCIvZGV2L25ldC90dW4iLCBPX1JEV1IpKSA8IDAgKQorICAgICAgICAgcmV0dXJuIHR1bl9hbGxvY19vbGQoZGV2KTsKKworICAgICAgbWVtc2V0KCZpZnIsIDAsIHNpemVvZihpZnIpKTsKKworICAgICAgLyogRmxhZ3M6IElGRl9UVU4gICAtIFRVTiBkZXZpY2UgKG5vIEV0aGVybmV0IGhlYWRlcnMpIAorICAgICAgICogICAgICAgIElGRl9UQVAgICAtIFRBUCBkZXZpY2UgIAorICAgICAgICoKKyAgICAgICAqICAgICAgICBJRkZfTk9fUEkgLSBEbyBub3QgcHJvdmlkZSBwYWNrZXQgaW5mb3JtYXRpb24gIAorICAgICAgICovIAorICAgICAgaWZyLmlmcl9mbGFncyA9IElGRl9UVU47IAorICAgICAgaWYoICpkZXYgKQorICAgICAgICAgc3RybmNweShpZnIuaWZyX25hbWUsIGRldiwgSUZOQU1TSVopOworCisgICAgICBpZiggKGVyciA9IGlvY3RsKGZkLCBUVU5TRVRJRkYsICh2b2lkICopICZpZnIpKSA8IDAgKXsKKyAgICAgICAgIGNsb3NlKGZkKTsKKyAgICAgICAgIHJldHVybiBlcnI7CisgICAgICB9CisgICAgICBzdHJjcHkoZGV2LCBpZnIuaWZyX25hbWUpOworICAgICAgcmV0dXJuIGZkOworICB9ICAgICAgICAgICAgICAKKyAKKyAgMy4yIEZyYW1lIGZvcm1hdDoKKyAgSWYgZmxhZyBJRkZfTk9fUEkgaXMgbm90IHNldCBlYWNoIGZyYW1lIGZvcm1hdCBpczogCisgICAgIEZsYWdzIFsyIGJ5dGVzXQorICAgICBQcm90byBbMiBieXRlc10KKyAgICAgUmF3IHByb3RvY29sKElQLCBJUHY2LCBldGMpIGZyYW1lLgorCitVbml2ZXJzYWwgVFVOL1RBUCBkZXZpY2UgZHJpdmVyIEZyZXF1ZW50bHkgQXNrZWQgUXVlc3Rpb24uCisgICAKKzEuIFdoYXQgcGxhdGZvcm1zIGFyZSBzdXBwb3J0ZWQgYnkgVFVOL1RBUCBkcml2ZXIgPworQ3VycmVudGx5IGRyaXZlciBoYXMgYmVlbiB3cml0dGVuIGZvciAzIFVuaWNlczoKKyAgIExpbnV4IGtlcm5lbHMgMi4yLngsIDIuNC54IAorICAgRnJlZUJTRCAzLngsIDQueCwgNS54CisgICBTb2xhcmlzIDIuNiwgNy4wLCA4LjAKKworMi4gV2hhdCBpcyBUVU4vVEFQIGRyaXZlciB1c2VkIGZvcj8KK0FzIG1lbnRpb25lZCBhYm92ZSwgbWFpbiBwdXJwb3NlIG9mIFRVTi9UQVAgZHJpdmVyIGlzIHR1bm5lbGluZy4gCitJdCBpcyB1c2VkIGJ5IFZUdW4gKGh0dHA6Ly92dHVuLnNvdXJjZWZvcmdlLm5ldCkuCisKK0Fub3RoZXIgaW50ZXJlc3RpbmcgYXBwbGljYXRpb24gdXNpbmcgVFVOL1RBUCBpcyBwaXBzZWNkCisoaHR0cDovL3BlcnNvLmVuc3QuZnIvfmJleXNzYWMvcGlwc2VjLyksIGFuIHVzZXJzcGFjZSBJUFNlYworaW1wbGVtZW50YXRpb24gdGhhdCBjYW4gdXNlIGNvbXBsZXRlIGtlcm5lbCByb3V0aW5nICh1bmxpa2UgRnJlZVMvV0FOKS4KKworMy4gSG93IGRvZXMgVmlydHVhbCBuZXR3b3JrIGRldmljZSBhY3R1YWxseSB3b3JrID8gCitWaXJ0dWFsIG5ldHdvcmsgZGV2aWNlIGNhbiBiZSB2aWV3ZWQgYXMgYSBzaW1wbGUgUG9pbnQtdG8tUG9pbnQgb3IKK0V0aGVybmV0IGRldmljZSwgd2hpY2ggaW5zdGVhZCBvZiByZWNlaXZpbmcgcGFja2V0cyBmcm9tIGEgcGh5c2ljYWwgCittZWRpYSwgcmVjZWl2ZXMgdGhlbSBmcm9tIHVzZXIgc3BhY2UgcHJvZ3JhbSBhbmQgaW5zdGVhZCBvZiBzZW5kaW5nIAorcGFja2V0cyB2aWEgcGh5c2ljYWwgbWVkaWEgc2VuZHMgdGhlbSB0byB0aGUgdXNlciBzcGFjZSBwcm9ncmFtLiAKKworTGV0J3Mgc2F5IHRoYXQgeW91IGNvbmZpZ3VyZWQgSVBYIG9uIHRoZSB0YXAwLCB0aGVuIHdoZW5ldmVyIAordGhlIGtlcm5lbCBzZW5kcyBhbiBJUFggcGFja2V0IHRvIHRhcDAsIGl0IGlzIHBhc3NlZCB0byB0aGUgYXBwbGljYXRpb24KKyhWVHVuIGZvciBleGFtcGxlKS4gVGhlIGFwcGxpY2F0aW9uIGVuY3J5cHRzLCBjb21wcmVzc2VzIGFuZCBzZW5kcyBpdCB0byAKK3RoZSBvdGhlciBzaWRlIG92ZXIgVENQIG9yIFVEUC4gVGhlIGFwcGxpY2F0aW9uIG9uIHRoZSBvdGhlciBzaWRlIGRlY29tcHJlc3NlcworYW5kIGRlY3J5cHRzIHRoZSBkYXRhIHJlY2VpdmVkIGFuZCB3cml0ZXMgdGhlIHBhY2tldCB0byB0aGUgVEFQIGRldmljZSwgCit0aGUga2VybmVsIGhhbmRsZXMgdGhlIHBhY2tldCBsaWtlIGl0IGNhbWUgZnJvbSByZWFsIHBoeXNpY2FsIGRldmljZS4KKworNC4gV2hhdCBpcyB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIFRVTiBkcml2ZXIgYW5kIFRBUCBkcml2ZXI/CitUVU4gd29ya3Mgd2l0aCBJUCBmcmFtZXMuIFRBUCB3b3JrcyB3aXRoIEV0aGVybmV0IGZyYW1lcy4KKworVGhpcyBtZWFucyB0aGF0IHlvdSBoYXZlIHRvIHJlYWQvd3JpdGUgSVAgcGFja2V0cyB3aGVuIHlvdSBhcmUgdXNpbmcgdHVuIGFuZAorZXRoZXJuZXQgZnJhbWVzIHdoZW4gdXNpbmcgdGFwLgorCis1LiBXaGF0IGlzIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gQlBGIGFuZCBUVU4vVEFQIGRyaXZlcj8KK0JGUCBpcyBhbiBhZHZhbmNlZCBwYWNrZXQgZmlsdGVyLiBJdCBjYW4gYmUgYXR0YWNoZWQgdG8gZXhpc3RpbmcKK25ldHdvcmsgaW50ZXJmYWNlLiBJdCBkb2VzIG5vdCBwcm92aWRlIGEgdmlydHVhbCBuZXR3b3JrIGludGVyZmFjZS4KK0EgVFVOL1RBUCBkcml2ZXIgZG9lcyBwcm92aWRlIGEgdmlydHVhbCBuZXR3b3JrIGludGVyZmFjZSBhbmQgaXQgaXMgcG9zc2libGUKK3RvIGF0dGFjaCBCUEYgdG8gdGhpcyBpbnRlcmZhY2UuCisKKzYuIERvZXMgVEFQIGRyaXZlciBzdXBwb3J0IGtlcm5lbCBFdGhlcm5ldCBicmlkZ2luZz8KK1llcy4gTGludXggYW5kIEZyZWVCU0QgZHJpdmVycyBzdXBwb3J0IEV0aGVybmV0IGJyaWRnaW5nLiAKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy92b3J0ZXgudHh0IGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3ZvcnRleC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmExMmE5ZQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy92b3J0ZXgudHh0CkBAIC0wLDAgKzEsNDUwIEBACitEb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvdm9ydGV4LnR4dAorQW5kcmV3IE1vcnRvbiA8YW5kcmV3bUB1b3cuZWR1LmF1PgorMzAgQXByaWwgMjAwMAorCisKK1RoaXMgZG9jdW1lbnQgZGVzY3JpYmVzIHRoZSB1c2FnZSBhbmQgZXJyYXRhIG9mIHRoZSAzQ29tICJWb3J0ZXgiIGRldmljZQorZHJpdmVyIGZvciBMaW51eCwgM2M1OXguYy4KKworVGhlIGRyaXZlciB3YXMgd3JpdHRlbiBieSBEb25hbGQgQmVja2VyIDxiZWNrZXJAc2N5bGQuY29tPgorCitEb24gaXMgbm8gbG9uZ2VyIHRoZSBwcmltZSBtYWludGFpbmVyIG9mIHRoaXMgdmVyc2lvbiBvZiB0aGUgZHJpdmVyLiAKK1BsZWFzZSByZXBvcnQgcHJvYmxlbXMgdG8gb25lIG9yIG1vcmUgb2Y6CisKKyAgQW5kcmV3IE1vcnRvbiA8YW5kcmV3bUB1b3cuZWR1LmF1PgorICBOZXRkZXYgbWFpbGluZyBsaXN0IDxuZXRkZXZAb3NzLnNnaS5jb20+CisgIExpbnV4IGtlcm5lbCBtYWlsaW5nIGxpc3QgPGxpbnV4LWtlcm5lbEB2Z2VyLmtlcm5lbC5vcmc+CisKK1BsZWFzZSBub3RlIHRoZSAnUmVwb3J0aW5nIGFuZCBEaWFnbm9zaW5nIFByb2JsZW1zJyBzZWN0aW9uIGF0IHRoZSBlbmQKK29mIHRoaXMgZmlsZS4KKworCitTaW5jZSBrZXJuZWwgMi4zLjk5LXByZTYsIHRoaXMgZHJpdmVyIGluY29ycG9yYXRlcyB0aGUgc3VwcG9ydCBmb3IgdGhlCiszYzU3NS1zZXJpZXMgQ2FyZGJ1cyBjYXJkcyB3aGljaCB1c2VkIHRvIGJlIGhhbmRsZWQgYnkgM2M1NzVfY2IuYy4KKworVGhpcyBkcml2ZXIgc3VwcG9ydHMgdGhlIGZvbGxvd2luZyBoYXJkd2FyZToKKworICAgM2M1OTAgVm9ydGV4IDEwTWJwcworICAgM2M1OTIgRUlTQSAxMG1icHMgRGVtb24vVm9ydGV4CisgICAzYzU5NyBFSVNBIEZhc3QgRGVtb24vVm9ydGV4CisgICAzYzU5NSBWb3J0ZXggMTAwYmFzZVR4CisgICAzYzU5NSBWb3J0ZXggMTAwYmFzZVQ0CisgICAzYzU5NSBWb3J0ZXggMTAwYmFzZS1NSUkKKyAgIDNDb20gVm9ydGV4CisgICAzYzkwMCBCb29tZXJhbmcgMTBiYXNlVAorICAgM2M5MDAgQm9vbWVyYW5nIDEwTWJwcyBDb21ibworICAgM2M5MDAgQ3ljbG9uZSAxME1icHMgVFBPCisgICAzYzkwMEIgQ3ljbG9uZSAxME1icHMgVAorICAgM2M5MDAgQ3ljbG9uZSAxME1icHMgQ29tYm8KKyAgIDNjOTAwIEN5Y2xvbmUgMTBNYnBzIFRQQworICAgM2M5MDBCLUZMIEN5Y2xvbmUgMTBiYXNlLUZMCisgICAzYzkwNSBCb29tZXJhbmcgMTAwYmFzZVR4CisgICAzYzkwNSBCb29tZXJhbmcgMTAwYmFzZVQ0CisgICAzYzkwNUIgQ3ljbG9uZSAxMDBiYXNlVHgKKyAgIDNjOTA1QiBDeWNsb25lIDEwLzEwMC9CTkMKKyAgIDNjOTA1Qi1GWCBDeWNsb25lIDEwMGJhc2VGeAorICAgM2M5MDVDIFRvcm5hZG8KKyAgIDNjOTgwIEN5Y2xvbmUKKyAgIDNjU09ITzEwMC1UWCBIdXJyaWNhbmUKKyAgIDNjNTU1IExhcHRvcCBIdXJyaWNhbmUKKyAgIDNjNTc1IEJvb21lcmFuZyBDYXJkQnVzCisgICAzQ0NGRTU3NSBDeWNsb25lIENhcmRCdXMKKyAgIDNDQ0ZFNTc1Q1QgQ3ljbG9uZSBDYXJkQnVzCisgICAzQ0NGRTY1NiBDeWNsb25lIENhcmRCdXMKKyAgIDNDQ0ZFTTY1NiBDeWNsb25lIENhcmRCdXMKKyAgIDNjNDUwIEN5Y2xvbmUvdW5rbm93bgorCisKK01vZHVsZSBwYXJhbWV0ZXJzCis9PT09PT09PT09PT09PT09PQorCitUaGVyZSBhcmUgc2V2ZXJhbCBwYXJhbWV0ZXJzIHdoaWNoIG1heSBiZSBwcm92aWRlZCB0byB0aGUgZHJpdmVyIHdoZW4KK2l0cyBtb2R1bGUgaXMgbG9hZGVkLiAgVGhlc2UgYXJlIHVzdWFsbHkgcGxhY2VkIGluIC9ldGMvbW9kcHJvYmUuY29uZgorKC9ldGMvbW9kdWxlcy5jb25mIGluIDIuNCkuICBFeGFtcGxlOgorCitvcHRpb25zIDNjNTl4IGRlYnVnPTMgcnhfY29weWJyZWFrPTMwMAorCitJZiB5b3UgYXJlIHVzaW5nIHRoZSBQQ01DSUEgdG9vbHMgKGNhcmRtZ3IpIHRoZW4gdGhlIG9wdGlvbnMgbWF5IGJlCitwbGFjZWQgaW4gL2V0Yy9wY21jaWEvY29uZmlnLm9wdHM6CisKK21vZHVsZSAiM2M1OXgiIG9wdHMgImRlYnVnPTMgcnhfY29weWJyZWFrPTMwMCIKKworCitUaGUgc3VwcG9ydGVkIHBhcmFtZXRlcnMgYXJlOgorCitkZWJ1Zz1OCisKKyAgV2hlcmUgTiBpcyBhIG51bWJlciBmcm9tIDAgdG8gNy4gIEFueXRoaW5nIGFib3ZlIDMgcHJvZHVjZXMgYSBsb3QKKyAgb2Ygb3V0cHV0IGluIHlvdXIgc3lzdGVtIGxvZ3MuICBkZWJ1Zz0xIGlzIGRlZmF1bHQuCisKK29wdGlvbnM9TjEsTjIsTjMsLi4uCisKKyAgRWFjaCBudW1iZXIgaW4gdGhlIGxpc3QgcHJvdmlkZXMgYW4gb3B0aW9uIHRvIHRoZSBjb3JyZXNwb25kaW5nCisgIG5ldHdvcmsgY2FyZC4gIFNvIGlmIHlvdSBoYXZlIHR3byAzYzkwNSdzIGFuZCB5b3Ugd2lzaCB0byBwcm92aWRlCisgIHRoZW0gd2l0aCBvcHRpb24gMHgyMDQgeW91IHdvdWxkIHVzZToKKworICAgIG9wdGlvbnM9MHgyMDQsMHgyMDQKKworICBUaGUgaW5kaXZpZHVhbCBvcHRpb25zIGFyZSBjb21wb3NlZCBvZiBhIG51bWJlciBvZiBiaXRmaWVsZHMgd2hpY2gKKyAgaGF2ZSB0aGUgZm9sbG93aW5nIG1lYW5pbmdzOgorCisgIFBvc3NpYmxlIG1lZGlhIHR5cGUgc2V0dGluZ3MKKwkwCTEwYmFzZVQKKwkxCTEwTWJzIEFVSQorCTIJdW5kZWZpbmVkCisJMwkxMGJhc2UyIChCTkMpCisJNAkxMDBiYXNlLVRYCisJNQkxMDBiYXNlLUZYCisJNglNSUkgKE1lZGlhIEluZGVwZW5kZW50IEludGVyZmFjZSkKKwk3CVVzZSBkZWZhdWx0IHNldHRpbmcgZnJvbSBFRVBST00KKwk4ICAgICAgIEF1dG9uZWdvdGlhdGUKKwk5ICAgICAgIEV4dGVybmFsIE1JSQorCTEwICAgICAgVXNlIGRlZmF1bHQgc2V0dGluZyBmcm9tIEVFUFJPTQorCisgIFdoZW4gZ2VuZXJhdGluZyBhIHZhbHVlIGZvciB0aGUgJ29wdGlvbnMnIHNldHRpbmcsIHRoZSBhYm92ZSBtZWRpYQorICBzZWxlY3Rpb24gdmFsdWVzIG1heSBiZSBPUidlZCAob3IgYWRkZWQgdG8pIHRoZSBmb2xsb3dpbmc6CisKKyAgMHg4MDAwICBTZXQgZHJpdmVyIGRlYnVnZ2luZyBsZXZlbCB0byA3CisgIDB4NDAwMCAgU2V0IGRyaXZlciBkZWJ1Z2dpbmcgbGV2ZWwgdG8gMgorICAweDA0MDAgIEVuYWJsZSBXYWtlLW9uLUxBTgorICAweDAyMDAgIEZvcmNlIGZ1bGwgZHVwbGV4IG1vZGUuCisgIDB4MDAxMCAgQnVzLW1hc3RlciBlbmFibGUgYml0IChPbGQgVm9ydGV4IGNhcmRzIG9ubHkpCisKKyAgRm9yIGV4YW1wbGU6CisKKyAgICBpbnNtb2QgM2M1OXggb3B0aW9ucz0weDIwNAorCisgIHdpbGwgZm9yY2UgZnVsbC1kdXBsZXggMTAwYmFzZS1UWCwgcmF0aGVyIHRoYW4gYWxsb3dpbmcgdGhlIHVzdWFsCisgIGF1dG9uZWdvdGlhdGlvbi4KKworZ2xvYmFsX29wdGlvbnM9TgorCisgIFNldHMgdGhlIGBvcHRpb25zJyBwYXJhbWV0ZXIgZm9yIGFsbCAzYzU5eCBOSUNzIGluIHRoZSBtYWNoaW5lLiAKKyAgRW50cmllcyBpbiB0aGUgYG9wdGlvbnMnIGFycmF5IGFib3ZlIHdpbGwgb3ZlcnJpZGUgYW55IHNldHRpbmcgb2YKKyAgdGhpcy4KKworZnVsbF9kdXBsZXg9TjEsTjIsTjMuLi4KKworICBTaW1pbGFyIHRvIGJpdCA5IG9mICdvcHRpb25zJy4gIEZvcmNlcyB0aGUgY29ycmVzcG9uZGluZyBjYXJkIGludG8KKyAgZnVsbC1kdXBsZXggbW9kZS4gIFBsZWFzZSB1c2UgdGhpcyBpbiBwcmVmZXJlbmNlIHRvIHRoZSBgb3B0aW9ucycKKyAgcGFyYW1ldGVyLgorCisgIEluIGZhY3QsIHBsZWFzZSBkb24ndCB1c2UgdGhpcyBhdCBhbGwhIFlvdSdyZSBiZXR0ZXIgb2ZmIGdldHRpbmcKKyAgYXV0b25lZ290aWF0aW9uIHdvcmtpbmcgcHJvcGVybHkuCisKK2dsb2JhbF9mdWxsX2R1cGxleD1OMQorCisgIFNldHMgZnVsbCBkdXBsZXggbW9kZSBmb3IgYWxsIDNjNTl4IE5JQ3MgaW4gdGhlIG1hY2hpbmUuICBFbnRyaWVzCisgIGluIHRoZSBgZnVsbF9kdXBsZXgnIGFycmF5IGFib3ZlIHdpbGwgb3ZlcnJpZGUgYW55IHNldHRpbmcgb2YgdGhpcy4KKworZmxvd19jdHJsPU4xLE4yLE4zLi4uCisKKyAgVXNlIDgwMi4zeCBNQUMtbGF5ZXIgZmxvdyBjb250cm9sLiAgVGhlIDNjb20gY2FyZHMgb25seSBzdXBwb3J0IHRoZQorICBQQVVTRSBjb21tYW5kLCB3aGljaCBtZWFucyB0aGF0IHRoZXkgd2lsbCBzdG9wIHNlbmRpbmcgcGFja2V0cyBmb3IgYQorICBzaG9ydCBwZXJpb2QgaWYgdGhleSByZWNlaXZlIGEgUEFVU0UgZnJhbWUgZnJvbSB0aGUgbGluayBwYXJ0bmVyLiAKKworICBUaGUgZHJpdmVyIG9ubHkgYWxsb3dzIGZsb3cgY29udHJvbCBvbiBhIGxpbmsgd2hpY2ggaXMgb3BlcmF0aW5nIGluCisgIGZ1bGwgZHVwbGV4IG1vZGUuCisKKyAgVGhpcyBmZWF0dXJlIGRvZXMgbm90IGFwcGVhciB0byB3b3JrIG9uIHRoZSAzYzkwNSAtIG9ubHkgM2M5MDVCIGFuZAorICAzYzkwNUMgaGF2ZSBiZWVuIHRlc3RlZC4KKworICBUaGUgM2NvbSBjYXJkcyBhcHBlYXIgdG8gb25seSByZXNwb25kIHRvIFBBVVNFIGZyYW1lcyB3aGljaCBhcmUKKyAgc2VudCB0byB0aGUgcmVzZXJ2ZWQgZGVzdGluYXRpb24gYWRkcmVzcyBvZiAwMTo4MDpjMjowMDowMDowMS4gIFRoZXkKKyAgZG8gbm90IGhvbm91ciBQQVVTRSBmcmFtZXMgd2hpY2ggYXJlIHNlbnQgdG8gdGhlIHN0YXRpb24gTUFDIGFkZHJlc3MuCisKK3J4X2NvcHlicmVhaz1NCisKKyAgVGhlIGRyaXZlciBwcmVhbGxvY2F0ZXMgMzIgZnVsbC1zaXplZCAoMTUzNiBieXRlKSBuZXR3b3JrIGJ1ZmZlcnMKKyAgZm9yIHJlY2VpdmluZy4gIFdoZW4gYSBwYWNrZXQgYXJyaXZlcywgdGhlIGRyaXZlciBoYXMgdG8gZGVjaWRlCisgIHdoZXRoZXIgdG8gbGVhdmUgdGhlIHBhY2tldCBpbiBpdHMgZnVsbC1zaXplZCBidWZmZXIsIG9yIHRvIGFsbG9jYXRlCisgIGEgc21hbGxlciBidWZmZXIgYW5kIGNvcHkgdGhlIHBhY2tldCBhY3Jvc3MgaW50byBpdC4KKworICBUaGlzIGlzIGEgc3BlZWQvc3BhY2UgdHJhZGVvZmYuCisKKyAgVGhlIHZhbHVlIG9mIHJ4X2NvcHlicmVhayBpcyB1c2VkIHRvIGRlY2lkZSB3aGVuIHRvIG1ha2UgdGhlIGNvcHkuIAorICBJZiB0aGUgcGFja2V0IHNpemUgaXMgbGVzcyB0aGFuIHJ4X2NvcHlicmVhaywgdGhlIHBhY2tldCBpcyBjb3BpZWQuIAorICBUaGUgZGVmYXVsdCB2YWx1ZSBmb3IgcnhfY29weWJyZWFrIGlzIDIwMCBieXRlcy4KKworbWF4X2ludGVycnVwdF93b3JrPU4KKworICBUaGUgZHJpdmVyJ3MgaW50ZXJydXB0IHNlcnZpY2Ugcm91dGluZSBjYW4gaGFuZGxlIG1hbnkgcmVjZWl2ZSBhbmQKKyAgdHJhbnNtaXQgcGFja2V0cyBpbiBhIHNpbmdsZSBpbnZvY2F0aW9uLiAgSXQgZG9lcyB0aGlzIGluIGEgbG9vcC4gCisgIFRoZSB2YWx1ZSBvZiBtYXhfaW50ZXJydXB0X3dvcmsgZ292ZXJucyBob3cgbW5heSB0aW1lcyB0aGUgaW50ZXJydXB0CisgIHNlcnZpY2Ugcm91dGluZSB3aWxsIGxvb3AuICBUaGUgZGVmYXVsdCB2YWx1ZSBpcyAzMiBsb29wcy4gIElmIHRoaXMKKyAgaXMgZXhjZWVkZWQgdGhlIGludGVycnVwdCBzZXJ2aWNlIHJvdXRpbmUgZ2l2ZXMgdXAgYW5kIGdlbmVyYXRlcyBhCisgIHdhcm5pbmcgbWVzc2FnZSAiZXRoMDogVG9vIG11Y2ggd29yayBpbiBpbnRlcnJ1cHQiLgorCitod19jaGVja3N1bXM9TjEsTjIsTjMsLi4uCisKKyAgUmVjZW50IDNjb20gTklDcyBhcmUgYWJsZSB0byBnZW5lcmF0ZSBJUHY0LCBUQ1AgYW5kIFVEUCBjaGVja3N1bXMKKyAgaW4gaGFyZHdhcmUuICBMaW51eCBoYXMgdXNlZCB0aGUgUnggY2hlY2tzdW1taW5nIGZvciBhIGxvbmcgdGltZS4gCisgIFRoZSAiemVybyBjb3B5IiBwYXRjaCB3aGljaCBpcyBwbGFubmVkIGZvciB0aGUgMi40IGtlcm5lbCBzZXJpZXMKKyAgYWxsb3dzIHlvdSB0byBtYWtlIHVzZSBvZiB0aGUgTklDJ3MgRE1BIHNjYXR0ZXIvZ2F0aGVyIGFuZCB0cmFuc21pdAorICBjaGVja3N1bW1pbmcgYXMgd2VsbC4KKworICBUaGUgZHJpdmVyIGlzIHNldCB1cCBzbyB0aGF0LCB3aGVuIHRoZSB6ZXJvY29weSBwYXRjaCBpcyBhcHBsaWVkLAorICBhbGwgVG9ybmFkbyBhbmQgQ3ljbG9uZSBkZXZpY2VzIHdpbGwgdXNlIFMvRyBhbmQgVHggY2hlY2tzdW1zLgorCisgIFRoaXMgbW9kdWxlIHBhcmFtZXRlciBoYXMgYmVlbiBwcm92aWRlZCBzbyB5b3UgY2FuIG92ZXJyaWRlIHRoaXMKKyAgZGVjaXNpb24uICBJZiB5b3UgdGhpbmsgdGhhdCBUeCBjaGVja3N1bXMgYXJlIGNhdXNpbmcgYSBwcm9ibGVtLCB5b3UKKyAgbWF5IGRpc2FibGUgdGhlIGZlYXR1cmUgd2l0aCBgaHdfY2hlY2tzdW1zPTAnLgorCisgIElmIHlvdSB0aGluayB5b3VyIE5JQyBzaG91bGQgYmUgcGVyZm9ybWluZyBUeCBjaGVja3N1bW1pbmcgYW5kIHRoZQorICBkcml2ZXIgaXNuJ3QgZW5hYmxpbmcgaXQsIHlvdSBjYW4gZm9yY2UgdGhlIHVzZSBvZiBoYXJkd2FyZSBUeAorICBjaGVja3N1bW1pbmcgd2l0aCBgaHdfY2hlY2tzdW1zPTEnLgorCisgIFRoZSBkcml2ZXIgZHJvcHMgYSBtZXNzYWdlIGluIHRoZSBsb2dmaWxlcyB0byBpbmRpY2F0ZSB3aGV0aGVyIG9yCisgIG5vdCBpdCBpcyB1c2luZyBoYXJkd2FyZSBzY2F0dGVyL2dhdGhlciBhbmQgaGFyZHdhcmUgVHggY2hlY2tzdW1zLgorCisgIFNjYXR0ZXIvZ2F0aGVyIGFuZCBoYXJkd2FyZSBjaGVja3N1bXMgcHJvdmlkZSBjb25zaWRlcmFibGUKKyAgcGVyZm9ybWFuY2UgaW1wcm92ZW1lbnQgZm9yIHRoZSBzZW5kZmlsZSgpIHN5c3RlbSBjYWxsLCBidXQgYSBzbWFsbAorICBkZWNyZWFzZSBpbiB0aHJvdWdocHV0IGZvciBzZW5kKCkuICBUaGVyZSBpcyBubyBlZmZlY3QgdXBvbiByZWNlaXZlCisgIGVmZmljaWVuY3kuCisKK2NvbXBhcV9pb2FkZHI9TgorY29tcGFxX2lycT1OCitjb21wYXFfZGV2aWNlX2lkPU4KKworICAiVmFyaWFibGVzIHRvIHdvcmstYXJvdW5kIHRoZSBDb21wYXEgUENJIEJJT1MzMiBwcm9ibGVtIi4uLi4KKword2F0Y2hkb2c9TgorCisgIFNldHMgdGhlIHRpbWUgZHVyYXRpb24gKGluIG1pbGxpc2Vjb25kcykgYWZ0ZXIgd2hpY2ggdGhlIGtlcm5lbAorICBkZWNpZGVzIHRoYXQgdGhlIHRyYW5zbWl0dGVyIGhhcyBiZWNvbWUgc3R1Y2sgYW5kIG5lZWRzIHRvIGJlIHJlc2V0LiAKKyAgVGhpcyBpcyBtYWlubHkgZm9yIGRlYnVnZ2luZyBwdXJwb3NlcywgYWx0aG91Z2ggaXQgbWF5IGJlIGFkdmFudGFnZW91cworICB0byBpbmNyZWFzZSB0aGlzIHZhbHVlIG9uIExBTnMgd2hpY2ggaGF2ZSB2ZXJ5IGhpZ2ggY29sbGlzaW9uIHJhdGVzLgorICBUaGUgZGVmYXVsdCB2YWx1ZSBpcyA1MDAwICg1LjAgc2Vjb25kcykuCisKK2VuYWJsZV93b2w9TjEsTjIsTjMsLi4uCisKKyAgRW5hYmxlIFdha2Utb24tTEFOIHN1cHBvcnQgZm9yIHRoZSByZWxldmFudCBpbnRlcmZhY2UuICBEb25hbGQKKyAgQmVja2VyJ3MgYGV0aGVyLXdha2UnIGFwcGxpY2F0aW9uIG1heSBiZSB1c2VkIHRvIHdha2Ugc3VzcGVuZGVkCisgIG1hY2hpbmVzLgorCisgIEFsc28gZW5hYmxlcyB0aGUgTklDJ3MgcG93ZXIgbWFuYWdlbWVudCBzdXBwb3J0LgorCitnbG9iYWxfZW5hYmxlX3dvbD1OCisKKyAgU2V0cyBlbmFibGVfd29sIG1vZGUgZm9yIGFsbCAzYzU5eCBOSUNzIGluIHRoZSBtYWNoaW5lLiAgRW50cmllcyBpbgorICB0aGUgYGVuYWJsZV93b2wnIGFycmF5IGFib3ZlIHdpbGwgb3ZlcnJpZGUgYW55IHNldHRpbmcgb2YgdGhpcy4KKworTWVkaWEgc2VsZWN0aW9uCistLS0tLS0tLS0tLS0tLS0KKworQSBudW1iZXIgb2YgdGhlIG9sZGVyIE5JQ3Mgc3VjaCBhcyB0aGUgM2M1OTAgYW5kIDNjOTAwIHNlcmllcyBoYXZlCisxMGJhc2UyIGFuZCBBVUkgaW50ZXJmYWNlcy4KKworUHJpb3IgdG8gSmFudWFyeSwgMjAwMSB0aGlzIGRyaXZlciB3b3VsZCBhdXRvZXNlbGVjdCB0aGUgMTBiYXNlMiBvciBBVUkKK3BvcnQgaWYgaXQgZGlkbid0IGRldGVjdCBhY3Rpdml0eSBvbiB0aGUgMTBiYXNlVCBwb3J0LiAgSXQgd291bGQgdGhlbgorZ2V0IHN0dWNrIG9uIHRoZSAxMGJhc2UyIHBvcnQgYW5kIGEgZHJpdmVyIHJlbG9hZCB3YXMgbmVjZXNzYXJ5IHRvCitzd2l0Y2ggYmFjayB0byAxMGJhc2VULiAgVGhpcyBiZWhhdmlvdXIgY291bGQgbm90IGJlIHByZXZlbnRlZCB3aXRoIGEKK21vZHVsZSBvcHRpb24gb3ZlcnJpZGUuCisKK0xhdGVyIChjdXJyZW50KSB2ZXJzaW9ucyBvZiB0aGUgZHJpdmVyIF9kb18gc3VwcG9ydCBsb2NraW5nIG9mIHRoZQorbWVkaWEgdHlwZS4gIFNvIGlmIHlvdSBsb2FkIHRoZSBkcml2ZXIgbW9kdWxlIHdpdGgKKworCW1vZHByb2JlIDNjNTl4IG9wdGlvbnM9MAorCitpdCB3aWxsIHBlcm1hbmVudGx5IHNlbGVjdCB0aGUgMTBiYXNlVCBwb3J0LiAgQXV0b21hdGljIHNlbGVjdGlvbiBvZgorb3RoZXIgbWVkaWEgdHlwZXMgZG9lcyBub3Qgb2NjdXIuCisKKworVHJhbnNtaXQgZXJyb3IsIFR4IHN0YXR1cyByZWdpc3RlciA4MgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGlzIGlzIGEgY29tbW9uIGVycm9yIHdoaWNoIGlzIGFsbW9zdCBhbHdheXMgY2F1c2VkIGJ5IGFub3RoZXIgaG9zdCBvbgordGhlIHNhbWUgbmV0d29yayBiZWluZyBpbiBmdWxsLWR1cGxleCBtb2RlLCB3aGlsZSB0aGlzIGhvc3QgaXMgaW4KK2hhbGYtZHVwbGV4IG1vZGUuICBZb3UgbmVlZCB0byBmaW5kIHRoYXQgb3RoZXIgaG9zdCBhbmQgbWFrZSBpdCBydW4gaW4KK2hhbGYtZHVwbGV4IG1vZGUgb3IgZml4IHRoaXMgaG9zdCB0byBydW4gaW4gZnVsbC1kdXBsZXggbW9kZS4KKworQXMgYSBsYXN0IHJlc29ydCwgeW91IGNhbiBmb3JjZSB0aGUgM2M1OXggZHJpdmVyIGludG8gZnVsbC1kdXBsZXggbW9kZQord2l0aAorCisJb3B0aW9ucyAzYzU5eCBmdWxsX2R1cGxleD0xCisKK2J1dCB0aGlzIGhhcyB0byBiZSB2aWV3ZWQgYXMgYSB3b3JrYXJvdW5kIGZvciBicm9rZW4gbmV0d29yayBnZWFyIGFuZAorc2hvdWxkIG9ubHkgcmVhbGx5IGJlIHVzZWQgZm9yIGVxdWlwbWVudCB3aGljaCBjYW5ub3QgYXV0b25lZ290aWF0ZS4KKworCitBZGRpdGlvbmFsIHJlc291cmNlcworLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworRGV0YWlscyBvZiB0aGUgZGV2aWNlIGRyaXZlciBpbXBsZW1lbnRhdGlvbiBhcmUgYXQgdGhlIHRvcCBvZiB0aGUgc291cmNlIGZpbGUuCisKK0FkZGl0aW9uYWwgZG9jdW1lbnRhdGlvbiBpcyBhdmFpbGFibGUgYXQgRG9uIEJlY2tlcidzIExpbnV4IERyaXZlcnMgc2l0ZToKKworICBodHRwOi8vd3d3LnNjeWxkLmNvbS9uZXR3b3JrL3ZvcnRleC5odG1sCisKK0RvbmFsZCBCZWNrZXIncyBkcml2ZXIgZGV2ZWxvcG1lbnQgc2l0ZToKKworICAgICBodHRwOi8vd3d3LnNjeWxkLmNvbS9uZXR3b3JrCisKK0RvbmFsZCdzIHZvcnRleC1kaWFnIHByb2dyYW0gaXMgdXNlZnVsIGZvciBpbnNwZWN0aW5nIHRoZSBOSUMncyBzdGF0ZToKKworICAgICBodHRwOi8vd3d3LnNjeWxkLmNvbS9kaWFnLyNwY2ktZGlhZ3MKKworRG9uYWxkJ3MgbWlpLWRpYWcgcHJvZ3JhbSBtYXkgYmUgdXNlZCBmb3IgaW5zcGVjdGluZyBhbmQgbWFuaXB1bGF0aW5nCit0aGUgTklDJ3MgTWVkaWEgSW5kZXBlbmRlbnQgSW50ZXJmYWNlIHN1YnN5c3RlbToKKworICAgICBodHRwOi8vd3d3LnNjeWxkLmNvbS9kaWFnLyNtaWktZGlhZworCitEb25hbGQncyB3YWtlLW9uLUxBTiBwYWdlOgorCisgICAgIGh0dHA6Ly93d3cuc2N5bGQuY29tL2V4cGVydC93YWtlLW9uLWxhbi5odG1sCisKKzNDb20ncyBkb2N1bWVudGF0aW9uIGZvciBtYW55IE5JQ3MsIGluY2x1ZGluZyB0aGUgb25lcyBzdXBwb3J0ZWQgYnkKK3RoaXMgZHJpdmVyIGlzIGF2YWlsYWJsZSBhdCAKKworICAgICBodHRwOi8vc3VwcG9ydC4zY29tLmNvbS9wYXJ0bmVycy9kZXZlbG9wZXIvZGV2ZWxvcGVyX2Zvcm0uaHRtbAorCiszQ29tJ3MgRE9TLWJhc2VkIGFwcGxpY2F0aW9uIGZvciBzZXR0aW5nIHVwIHRoZSBOSUNzIEVFUFJPTXM6CisKKwlmdHA6Ly9mdHAuM2NvbS5jb20vcHViL25pYy8zYzkweC8zYzkweHgyLmV4ZQorCitEcml2ZXIgdXBkYXRlcyBhbmQgYSBkZXRhaWxlZCBjaGFuZ2Vsb2cgZm9yIHRoZSBtb2RpZmljYXRpb25zIHdoaWNoCit3ZXJlIG1hZGUgZm9yIHRoZSAyLjMvMiw0IHNlcmllcyBrZXJuZWwgaXMgYXZhaWxhYmxlIGF0CisKKyAgICAgaHR0cDovL3d3dy51b3cuZWR1LmF1L35hbmRyZXdtL2xpbnV4LyMzYzU5eC0yLjMKKworCitBdXRvbmVnb3RpYXRpb24gbm90ZXMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgIFRoZSBkcml2ZXIgdXNlcyBhIG9uZS1taW51dGUgaGVhcnRiZWF0IGZvciBhZGFwdGluZyB0byBjaGFuZ2VzIGluCisgIHRoZSBleHRlcm5hbCBMQU4gZW52aXJvbm1lbnQuICBUaGlzIG1lYW5zIHRoYXQgd2hlbiwgZm9yIGV4YW1wbGUsIGEKKyAgbWFjaGluZSBpcyB1bnBsdWdnZWQgZnJvbSBhIGh1YmJlZCAxMGJhc2VUIExBTiBwbHVnZ2VkIGludG8gYQorICBzd2l0Y2hlZCAxMDBiYXNlVCBMQU4sIHRoZSB0aHJvdWdocHV0IHdpbGwgYmUgcXVpdGUgZHJlYWRmdWwgZm9yIHVwCisgIHRvIHNpeHR5IHNlY29uZHMuICBCZSBwYXRpZW50LgorCisgIENpc2NvIGludGVyb3BlcmFiaWxpdHkgbm90ZSBmcm9tIFdhbHRlciBXb25nIDx3Y3crQENNVS5FRFU+OgorCisgIE9uIGEgc2lkZSBub3RlLCBhZGRpbmcgSEFTX05XQVkgc2VlbXMgdG8gc2hhcmUgYSBwcm9ibGVtIHdpdGggdGhlCisgIENpc2NvIDY1MDkgc3dpdGNoLiAgU3BlY2lmaWNhbGx5LCB5b3UgbmVlZCB0byBjaGFuZ2UgdGhlIHNwYW5uaW5nCisgIHRyZWUgcGFyYW1ldGVyIGZvciB0aGUgcG9ydCB0aGUgbWFjaGluZSBpcyBwbHVnZ2VkIGludG8gdG8gJ3BvcnRmYXN0JworICBtb2RlLiAgT3RoZXJ3aXNlLCB0aGUgbmVnb3RpYXRpb24gZmFpbHMuICBUaGlzIGhhcyBiZWVuIGFuIGlzc3VlCisgIHdlJ3ZlIG5vdGljZWQgZm9yIGEgd2hpbGUgYnV0IGhhdmVuJ3QgaGFkIHRoZSB0aW1lIHRvIHRyYWNrIGRvd24uCisKKyAgQ2lzY28gc3dpdGNoZXMgICAgKEplZmYgQnVzY2ggPGpidXNjaEBkZWphLmNvbT4pCisKKyAgICBNeSAic3RhbmRhcmQgY29uZmlnIiBmb3IgcG9ydHMgdG8gd2hpY2ggUEMncy9zZXJ2ZXJzIGNvbm5lY3QgZGlyZWN0bHk6CisKKyAgICAgICAgaW50ZXJmYWNlIEZhc3RFdGhlcm5ldDAvTgorICAgICAgICBkZXNjcmlwdGlvbiBtYWNoaW5lbmFtZQorICAgICAgICBsb2FkLWludGVydmFsIDMwCisgICAgICAgIHNwYW5uaW5nLXRyZWUgcG9ydGZhc3QKKworICAgIElmIGF1dG9uZWdvdGlhdGlvbiBpcyBhIHByb2JsZW0sIHlvdSBtYXkgbmVlZCB0byBzcGVjaWZ5ICJzcGVlZAorICAgIDEwMCIgYW5kICJkdXBsZXggZnVsbCIgYXMgd2VsbCAob3IgInNwZWVkIDEwIiBhbmQgImR1cGxleCBoYWxmIikuCisKKyAgICBXQVJOSU5HOiBETyBOT1QgaG9vayB1cCBodWJzL3N3aXRjaGVzL2JyaWRnZXMgdG8gdGhlc2UKKyAgICBzcGVjaWFsbHktY29uZmlndXJlZCBwb3J0cyEgVGhlIHN3aXRjaCB3aWxsIGJlY29tZSB2ZXJ5IGNvbmZ1c2VkLgorCisKK1JlcG9ydGluZyBhbmQgZGlhZ25vc2luZyBwcm9ibGVtcworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK01haW50YWluZXJzIGZpbmQgdGhhdCBhY2N1cmF0ZSBhbmQgY29tcGxldGUgcHJvYmxlbSByZXBvcnRzIGFyZQoraW52YWx1YWJsZSBpbiByZXNvbHZpbmcgZHJpdmVyIHByb2JsZW1zLiAgV2UgYXJlIGZyZXF1ZW50bHkgbm90IGFibGUgdG8KK3JlcHJvZHVjZSBwcm9ibGVtcyBhbmQgbXVzdCByZWx5IG9uIHlvdXIgcGF0aWVuY2UgYW5kIGVmZm9ydHMgdG8gZ2V0IHRvCit0aGUgYm90dG9tIG9mIHRoZSBwcm9ibGVtLgorCitJZiB5b3UgYmVsaWV2ZSB5b3UgaGF2ZSBhIGRyaXZlciBwcm9ibGVtIGhlcmUgYXJlIHNvbWUgb2YgdGhlCitzdGVwcyB5b3Ugc2hvdWxkIHRha2U6CisKKy0gSXMgaXQgcmVhbGx5IGEgZHJpdmVyIHByb2JsZW0/CisKKyAgIEVsaW1pbmF0ZSBzb21lIHZhcmlhYmxlczogdHJ5IGRpZmZlcmVudCBjYXJkcywgZGlmZmVyZW50CisgICBjb21wdXRlcnMsIGRpZmZlcmVudCBjYWJsZXMsIGRpZmZlcmVudCBwb3J0cyBvbiB0aGUgc3dpdGNoL2h1YiwKKyAgIGRpZmZlcmVudCB2ZXJzaW9ucyBvZiB0aGUga2VybmVsIG9yIG9mdGhlIGRyaXZlciwgZXRjLgorCistIE9LLCBpdCdzIGEgZHJpdmVyIHByb2JsZW0uCisKKyAgIFlvdSBuZWVkIHRvIGdlbmVyYXRlIGEgcmVwb3J0LiAgVHlwaWNhbGx5IHRoaXMgaXMgYW4gZW1haWwgdG8gdGhlCisgICBtYWludGFpbmVyIGFuZC9vciBsaW51eC1uZXRAdmdlci5rZXJuZWwub3JnLiAgVGhlIG1haW50YWluZXIncworICAgZW1haWwgYWRkcmVzcyB3aWxsIGJlIGludGhlIGRyaXZlciBzb3VyY2Ugb3IgaW4gdGhlIE1BSU5UQUlORVJTIGZpbGUuCisKKy0gVGhlIGNvbnRlbnRzIG9mIHlvdXIgcmVwb3J0IHdpbGwgdmFyeSBhIGxvdCBkZXBlbmRpbmcgdXBvbiB0aGUKKyAgcHJvYmxlbS4gIElmIGl0J3MgYSBrZXJuZWwgY3Jhc2ggdGhlbiB5b3Ugc2hvdWxkIHJlZmVyIHRvIHRoZQorICBSRVBPUlRJTkctQlVHUyBmaWxlLgorCisgIEJ1dCBmb3IgbW9zdCBwcm9ibGVtcyBpdCBpcyB1c2VmdWwgdG8gcHJvdmlkZSB0aGUgZm9sbG93aW5nOgorCisgICBvIEtlcm5lbCB2ZXJzaW9uLCBkcml2ZXIgdmVyc2lvbgorCisgICBvIEEgY29weSBvZiB0aGUgYmFubmVyIG1lc3NhZ2Ugd2hpY2ggdGhlIGRyaXZlciBnZW5lcmF0ZXMgd2hlbgorICAgICBpdCBpcyBpbml0aWFsaXNlZC4gIEZvciBleGFtcGxlOgorCisgICAgIGV0aDA6IDNDb20gUENJIDNjOTA1QyBUb3JuYWRvIGF0IDB4YTQwMCwgIDAwOjUwOmRhOjZhOjg4OmYwLCBJUlEgMTkKKyAgICAgOEsgYnl0ZS13aWRlIFJBTSA1OjMgUng6VHggc3BsaXQsIGF1dG9zZWxlY3QvQXV0b25lZ290aWF0ZSBpbnRlcmZhY2UuCisgICAgIE1JSSB0cmFuc2NlaXZlciBmb3VuZCBhdCBhZGRyZXNzIDI0LCBzdGF0dXMgNzgyZC4KKyAgICAgRW5hYmxpbmcgYnVzLW1hc3RlciB0cmFuc21pdHMgYW5kIHdob2xlLWZyYW1lIHJlY2VpdmVzLgorCisgICAgIE5PVEU6IFlvdSBtdXN0IHByb3ZpZGUgdGhlIGBkZWJ1Zz0yJyBtb2Rwcm9iZSBvcHRpb24gdG8gZ2VuZXJhdGUKKyAgICAgYSBmdWxsIGRldGVjdGlvbiBtZXNzYWdlLiAgUGxlYXNlIGRvIHRoaXM6CisKKwltb2Rwcm9iZSAzYzU5eCBkZWJ1Zz0yCisKKyAgIG8gSWYgaXQgaXMgYSBQQ0kgZGV2aWNlLCB0aGUgcmVsZXZhbnQgb3V0cHV0IGZyb20gJ2xzcGNpIC12eCcsIGVnOgorCisgICAgIDAwOjA5LjAgRXRoZXJuZXQgY29udHJvbGxlcjogM0NvbSBDb3Jwb3JhdGlvbiAzYzkwNUMtVFggW0Zhc3QgRXRoZXJsaW5rXSAocmV2IDc0KQorICAgICAgICAgICAgIFN1YnN5c3RlbTogM0NvbSBDb3Jwb3JhdGlvbjogVW5rbm93biBkZXZpY2UgOTIwMAorICAgICAgICAgICAgIEZsYWdzOiBidXMgbWFzdGVyLCBtZWRpdW0gZGV2c2VsLCBsYXRlbmN5IDMyLCBJUlEgMTkKKyAgICAgICAgICAgICBJL08gcG9ydHMgYXQgYTQwMCBbc2l6ZT0xMjhdCisgICAgICAgICAgICAgTWVtb3J5IGF0IGRiMDAwMDAwICgzMi1iaXQsIG5vbi1wcmVmZXRjaGFibGUpIFtzaXplPTEyOF0KKyAgICAgICAgICAgICBFeHBhbnNpb24gUk9NIGF0IDx1bmFzc2lnbmVkPiBbZGlzYWJsZWRdIFtzaXplPTEyOEtdCisgICAgICAgICAgICAgQ2FwYWJpbGl0aWVzOiBbZGNdIFBvd2VyIE1hbmFnZW1lbnQgdmVyc2lvbiAyCisgICAgIDAwOiBiNyAxMCAwMCA5MiAwNyAwMCAxMCAwMiA3NCAwMCAwMCAwMiAwOCAyMCAwMCAwMAorICAgICAxMDogMDEgYTQgMDAgMDAgMDAgMDAgMDAgZGIgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAKKyAgICAgMjA6IDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIGI3IDEwIDAwIDEwCisgICAgIDMwOiAwMCAwMCAwMCAwMCBkYyAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwNSAwMSAwYSAwYQorCisgICBvIEEgZGVzY3JpcHRpb24gb2YgdGhlIGVudmlyb25tZW50OiAxMGJhc2VUPyAxMDBiYXNlVD8KKyAgICAgZnVsbC9oYWxmIGR1cGxleD8gc3dpdGNoZWQgb3IgaHViYmVkPworCisgICBvIEFueSBhZGRpdGlvbmFsIG1vZHVsZSBwYXJhbWV0ZXJzIHdoaWNoIHlvdSBtYXkgYmUgcHJvdmlkaW5nIHRvIHRoZSBkcml2ZXIuCisKKyAgIG8gQW55IGtlcm5lbCBsb2dzIHdoaWNoIGFyZSBwcm9kdWNlZC4gIFRoZSBtb3JlIHRoZSBtZXJyaWVyLiAKKyAgICAgSWYgdGhpcyBpcyBhIGxhcmdlIGZpbGUgYW5kIHlvdSBhcmUgc2VuZGluZyB5b3VyIHJlcG9ydCB0byBhCisgICAgIG1haWxpbmcgbGlzdCwgbWVudGlvbiB0aGF0IHlvdSBoYXZlIHRoZSBsb2dmaWxlLCBidXQgZG9uJ3Qgc2VuZAorICAgICBpdC4gIElmIHlvdSdyZSByZXBvcnRpbmcgZGlyZWN0IHRvIHRoZSBtYWludGFpbmVyIHRoZW4ganVzdCBzZW5kCisgICAgIGl0LgorCisgICAgIFRvIGVuc3VyZSB0aGF0IGFsbCBrZXJuZWwgbG9ncyBhcmUgYXZhaWxhYmxlLCBhZGQgdGhlCisgICAgIGZvbGxvd2luZyBsaW5lIHRvIC9ldGMvc3lzbG9nLmNvbmY6CisKKyAgICAgICAgIGtlcm4uKiAvdmFyL2xvZy9tZXNzYWdlcworCisgICAgIFRoZW4gcmVzdGFydCBzeXNsb2dkIHdpdGg6CisKKyAgICAgICAgIC9ldGMvcmMuZC9pbml0LmQvc3lzbG9nIHJlc3RhcnQKKworICAgICAoVGhlIGFib3ZlIG1heSB2YXJ5LCBkZXBlbmRpbmcgdXBvbiB3aGljaCBMaW51eCBkaXN0cmlidXRpb24geW91IHVzZSkuCisKKyAgICBvIElmIHlvdXIgcHJvYmxlbSBpcyByZXByb2R1Y2libGUgdGhlbiB0aGF0J3MgZ3JlYXQuICBUcnkgdGhlCisgICAgICBmb2xsb3dpbmc6CisKKyAgICAgIDEpIEluY3JlYXNlIHRoZSBkZWJ1ZyBsZXZlbC4gIFVzdWFsbHkgdGhpcyBpcyBkb25lIHZpYToKKworICAgICAgICAgYSkgbW9kcHJvYmUgZHJpdmVyIGRlYnVnPTcKKyAgICAgICAgIGIpIEluIC9ldGMvbW9kcHJvYmUuY29uZiAob3IgL2V0Yy9tb2R1bGVzLmNvbmYgZm9yIDIuNCk6CisgICAgICAgICAgICBvcHRpb25zIGRyaXZlciBkZWJ1Zz03CisKKyAgICAgIDIpIFJlY3JlYXRlIHRoZSBwcm9ibGVtIHdpdGggdGhlIGhpZ2hlciBkZWJ1ZyBsZXZlbCwKKyAgICAgICAgIHNlbmQgYWxsIGxvZ3MgdG8gdGhlIG1haW50YWluZXIuCisKKyAgICAgIDMpIERvd25sb2FkIHlvdSBjYXJkJ3MgZGlhZ25vc3RpYyB0b29sIGZyb20gRG9uYWxkCisgICAgICAgICBCYWNrZXIncyB3ZWJzaXRlIGh0dHA6Ly93d3cuc2N5bGQuY29tL2RpYWcuICBEb3dubG9hZAorICAgICAgICAgbWlpLWRpYWcuYyBhcyB3ZWxsLiAgQnVpbGQgdGhlc2UuCisKKyAgICAgICAgIGEpIFJ1biAndm9ydGV4LWRpYWcgLWFhZWUnIGFuZCAnbWlpLWRpYWcgLXYnIHdoZW4gdGhlIGNhcmQgaXMKKyAgICAgICAgICAgIHdvcmtpbmcgY29ycmVjdGx5LiAgU2F2ZSB0aGUgb3V0cHV0LgorCisgICAgICAgICBiKSBSdW4gdGhlIGFib3ZlIGNvbW1hbmRzIHdoZW4gdGhlIGNhcmQgaXMgbWFsZnVuY3Rpb25pbmcuICBTZW5kCisgICAgICAgICAgICBib3RoIHNldHMgb2Ygb3V0cHV0LgorCitGaW5hbGx5LCBwbGVhc2UgYmUgcGF0aWVudCBhbmQgYmUgcHJlcGFyZWQgdG8gZG8gc29tZSB3b3JrLiAgWW91IG1heSBlbmQgdXAgd29ya2luZyBvbgordGhpcyBwcm9ibGVtIGZvciBhIHdlZWsgb3IgbW9yZSBhcyB0aGUgbWFpbnRhaW5lciBhc2tzIG1vcmUgcXVlc3Rpb25zLCBhc2tzIGZvciBtb3JlCit0ZXN0cywgYXNrcyBmb3IgcGF0Y2hlcyB0byBiZSBhcHBsaWVkLCBldGMuICBBdCB0aGUgZW5kIG9mIGl0IGFsbCwgdGhlIHByb2JsZW0gbWF5IGV2ZW4KK3JlbWFpbiB1bnJlc29sdmVkLgorCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvd2FuLXJvdXRlci50eHQgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvd2FuLXJvdXRlci50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWVhMjBjZAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy93YW4tcm91dGVyLnR4dApAQCAtMCwwICsxLDYyMiBAQAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitMaW51eCBXQU4gUm91dGVyIFV0aWxpdGllcyBQYWNrYWdlCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK1ZlcnNpb24gMi4yLjEgCitNYXIgMjgsIDIwMDEKK0F1dGhvcjogTmVuYWQgQ29yYmljIDxuY29yYmljQHNhbmdvbWEuY29tPgorQ29weXJpZ2h0IChjKSAxOTk1LTIwMDEgU2FuZ29tYSBUZWNobm9sb2dpZXMgSW5jLgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0lOVFJPRFVDVElPTgorCitXaWRlIEFyZWEgTmV0d29ya3MgKFdBTnMpIGFyZSB1c2VkIHRvIGludGVyY29ubmVjdCBMb2NhbCBBcmVhIE5ldHdvcmtzIChMQU5zKQorYW5kL29yIHN0YW5kLWFsb25lIGhvc3RzIG92ZXIgdmFzdCBkaXN0YW5jZXMgd2l0aCBkYXRhIHRyYW5zZmVyIHJhdGVzCitzaWduaWZpY2FudGx5IGhpZ2hlciB0aGFuIHRob3NlIGFjaGlldmFibGUgd2l0aCBjb21tb25seSB1c2VkIGRpYWwtdXAKK2Nvbm5lY3Rpb25zLgorCitVc3VhbGx5IGFuIGV4dGVybmFsIGRldmljZSBjYWxsZWQgYFdBTiByb3V0ZXInIHNpdHRpbmcgb24geW91ciBsb2NhbCBuZXR3b3JrCitvciBjb25uZWN0ZWQgdG8geW91ciBtYWNoaW5lJ3Mgc2VyaWFsIHBvcnQgcHJvdmlkZXMgcGh5c2ljYWwgY29ubmVjdGlvbiB0bworV0FOLiAgQWx0aG91Z2ggcm91dGVyJ3Mgam9iIG1heSBiZSBhcyBzaW1wbGUgYXMgdGFraW5nIHlvdXIgbG9jYWwgbmV0d29yawordHJhZmZpYywgY29udmVydGluZyBpdCB0byBXQU4gZm9ybWF0IGFuZCBwaXBpbmcgaXQgdGhyb3VnaCB0aGUgV0FOIGxpbmssIHRoZXNlCitkZXZpY2VzIGFyZSBub3RvcmlvdXNseSBleHBlbnNpdmUsIHdpdGggcHJpY2VzIGFzIG11Y2ggYXMgMiAtIDUgdGltZXMgaGlnaGVyCit0aGVuIHRoZSBwcmljZSBvZiBhIHR5cGljYWwgUEMgYm94LgorCitBbHRlcm5hdGl2ZWx5LCBjb25zaWRlcmluZyByb2J1c3RuZXNzIGFuZCBtdWx0aXRhc2tpbmcgY2FwYWJpbGl0aWVzIG9mIExpbnV4LAorYW4gaW50ZXJuYWwgcm91dGVyIGNhbiBiZSBidWlsdCAobW9zdCByb3V0ZXJzIHVzZSBzb21lIHNvcnQgb2Ygc3RyaXBwZWQgZG93bgorVW5peC1saWtlIG9wZXJhdGluZyBzeXN0ZW0gYW55d2F5KS4gV2l0aCBhIG51bWJlciBvZiByZWxhdGl2ZWx5IGluZXhwZW5zaXZlIFdBTgoraW50ZXJmYWNlIGNhcmRzIGF2YWlsYWJsZSBvbiB0aGUgbWFya2V0LCBhIHBlcmZlY3RseSB1c2FibGUgcm91dGVyIGNhbiBiZQorYnVpbHQgZm9yIGxlc3MgdGhhbiBoYWxmIGEgcHJpY2Ugb2YgYW4gZXh0ZXJuYWwgcm91dGVyLiAgWWV0IGEgTGludXggYm94CithY3RpbmcgYXMgYSByb3V0ZXIgY2FuIHN0aWxsIGJlIHVzZWQgZm9yIG90aGVyIHB1cnBvc2VzLCBzdWNoIGFzIGZpcmUtd2FsbGluZywKK3J1bm5pbmcgRlRQLCBXV1cgb3IgRE5TIHNlcnZlciwgZXRjLgorCitUaGlzIGtlcm5lbCBtb2R1bGUgaW50cm9kdWNlcyB0aGUgbm90aW9uIG9mIGEgV0FOIExpbmsgRHJpdmVyIChXTEQpIHRvIExpbnV4CitvcGVyYXRpbmcgc3lzdGVtIGFuZCBwcm92aWRlcyBnZW5lcmljIGhhcmR3YXJlLWluZGVwZW5kZW50IHNlcnZpY2VzIGZvciBzdWNoCitkcml2ZXJzLiAgV2h5IGNhbiBleGlzdGluZyBMaW51eCBuZXR3b3JrIGRldmljZSBpbnRlcmZhY2Ugbm90IGJlIHVzZWQgZm9yCit0aGlzIHB1cnBvc2U/ICBXZWxsLCBpdCBjYW4uICBIb3dldmVyLCB0aGVyZSBhcmUgYSBmZXcga2V5IGRpZmZlcmVuY2VzIGJldHdlZW4KK2EgdHlwaWNhbCBuZXR3b3JrIGludGVyZmFjZSAoZS5nLiBFdGhlcm5ldCkgYW5kIGEgV0FOIGxpbmsuCisKK01hbnkgV0FOIHByb3RvY29scywgc3VjaCBhcyBYLjI1IGFuZCBmcmFtZSByZWxheSwgYWxsb3cgZm9yIG11bHRpcGxlIGxvZ2ljYWwKK2Nvbm5lY3Rpb25zIChrbm93biBhcyBgdmlydHVhbCBjaXJjdWl0cycgaW4gWC4yNSB0ZXJtaW5vbG9neSkgb3ZlciBhIHNpbmdsZQorcGh5c2ljYWwgbGluay4gIEVhY2ggc3VjaCB2aXJ0dWFsIGNpcmN1aXQgbWF5IChhbmQgYWxtb3N0IGFsd2F5cyBkb2VzKSBsZWFkCit0byBhIGRpZmZlcmVudCBnZW9ncmFwaGljYWwgbG9jYXRpb24gYW5kLCB0aGVyZWZvcmUsIGRpZmZlcmVudCBuZXR3b3JrLiAgQXMgYQorcmVzdWx0LCBpdCBpcyB0aGUgdmlydHVhbCBjaXJjdWl0LCBub3QgdGhlIHBoeXNpY2FsIGxpbmssIHRoYXQgcmVwcmVzZW50cyBhCityb3V0ZSBhbmQsIHRoZXJlZm9yZSwgYSBuZXR3b3JrIGludGVyZmFjZSBpbiBMaW51eCB0ZXJtcy4KKworVG8gZnVydGhlciBjb21wbGljYXRlIHRoaW5ncywgdmlydHVhbCBjaXJjdWl0cyBhcmUgdXN1YWxseSB2b2xhdGlsZSBpbiBuYXR1cmUKKyhleGNsdWRpbmcgc28gY2FsbGVkIGBwZXJtYW5lbnQnIHZpcnR1YWwgY2lyY3VpdHMgb3IgUFZDcykuICBXaXRoIGFsbW9zdCBubwordGltZSByZXF1aXJlZCB0byBzZXQgdXAgYW5kIHRlYXIgZG93biBhIHZpcnR1YWwgY2lyY3VpdCwgaXQgaXMgaGlnaGx5IGRlc2lyYWJsZQordG8gaW1wbGVtZW50IG9uLWRlbWFuZCBjb25uZWN0aW9ucyBpbiBvcmRlciB0byBtaW5pbWl6ZSBuZXR3b3JrIGNoYXJnZXMuICBTbwordW5saWtlIGEgdHlwaWNhbCBuZXR3b3JrIGRyaXZlciwgdGhlIFdBTiBkcml2ZXIgbXVzdCBiZSBhYmxlIHRvIGhhbmRsZSBtdWx0aXBsZQorbmV0d29yayBpbnRlcmZhY2VzIGFuZCBjb3BlIGFzIG11bHRpcGxlIHZpcnR1YWwgY2lyY3VpdHMgY29tZSBpbnRvIGV4aXN0ZW5jZQorYW5kIGdvIGF3YXkgZHluYW1pY2FsbHkuCisgCitMYXN0LCBidXQgbm90IGxlYXN0LCBXQU4gY29uZmlndXJhdGlvbiBpcyBtdWNoIG1vcmUgY29tcGxleCB0aGFuIHRoYXQgb2Ygc2F5CitFdGhlcm5ldCBhbmQgbWF5IHdlbGwgYW1vdW50IHRvIHNldmVyYWwgZG96ZW5zIG9mIHBhcmFtZXRlcnMuICBTb21lIG9mIHRoZW0KK2FyZSAibGluay13aWRlIiAgd2hpbGUgb3RoZXJzIGFyZSB2aXJ0dWFsIGNpcmN1aXQtc3BlY2lmaWMuICBUaGUgc2FtZSBob2xkcwordHJ1ZSBmb3IgV0FOIHN0YXRpc3RpY3Mgd2hpY2ggaXMgYnkgZmFyIG1vcmUgZXh0ZW5zaXZlIGFuZCBleHRyZW1lbHkgdXNlZnVsCit3aGVuIHRyb3VibGVzaG9vdGluZyBXQU4gY29ubmVjdGlvbnMuICBFeHRlbmRpbmcgdGhlIGlmY29uZmlnIHV0aWxpdHkgdG8gc3VpdAordGhlc2UgbmVlZHMgbWF5IGJlIHBvc3NpYmxlLCBidXQgZG9lcyBub3Qgc2VlbSBxdWl0ZSByZWFzb25hYmxlLiAgVGhlcmVmb3JlLCBhCitXQU4gY29uZmlndXJhdGlvbiB1dGlsaXR5IGFuZCBjb3JyZXNwb25kaW5nIGFwcGxpY2F0aW9uIHByb2dyYW1tZXIncyBpbnRlcmZhY2UKK2lzIG5lZWRlZCBmb3IgdGhpcyBwdXJwb3NlLgorCitNb3N0IG9mIHRoZXNlIHByb2JsZW1zIGFyZSB0YWtlbiBjYXJlIG9mIGJ5IHRoaXMgbW9kdWxlLiAgSXRzIGdvYWwgaXMgdG8KK3Byb3ZpZGUgYSB1c2VyIHdpdGggbW9yZS1vci1sZXNzIHN0YW5kYXJkIGxvb2sgYW5kIGZlZWwgZm9yIGFsbCBXQU4gZGV2aWNlcyBhbmQKK2Fzc2lzdCBhIFdBTiBkZXZpY2UgZHJpdmVyIHdyaXRlciBieSBwcm92aWRpbmcgY29tbW9uIHNlcnZpY2VzLCBzdWNoIGFzOgorCisgbyBVc2VyLWxldmVsIGludGVyZmFjZSB2aWEgL3Byb2MgZmlsZSBzeXN0ZW0KKyBvIENlbnRyYWxpemVkIGNvbmZpZ3VyYXRpb24KKyBvIERldmljZSBtYW5hZ2VtZW50IChzZXR1cCwgc2h1dGRvd24sIGV0Yy4pCisgbyBOZXR3b3JrIGludGVyZmFjZSBtYW5hZ2VtZW50IChkeW5hbWljIGNyZWF0aW9uL2Rlc3RydWN0aW9uKQorIG8gUHJvdG9jb2wgZW5jYXBzdWxhdGlvbi9kZWNhcHN1bGF0aW9uCisKK1RvIGJhIGFibGUgdG8gdXNlIHRoZSBMaW51eCBXQU4gUm91dGVyIHlvdSB3aWxsIGFsc28gbmVlZCBhIFdBTiBUb29scyBwYWNrYWdlCithdmFpbGFibGUgZnJvbQorCisJZnRwLnNhbmdvbWEuY29tL3B1Yi9saW51eC9jdXJyZW50X3dhbnBpcGUvd2FucGlwZS1YLlkuWi50Z3oKKword2hlcmUgdlguWS5aIHJlcHJlc2VudCB0aGUgd2FucGlwZSB2ZXJzaW9uIG51bWJlci4KKworRm9yIHRlY2huaWNhbCBxdWVzdGlvbnMgYW5kL29yIGNvbW1lbnRzIHBsZWFzZSBlLW1haWwgdG8gbmNvcmJpY0BzYW5nb21hLmNvbS4KK0ZvciBnZW5lcmFsIGlucXVpcmllcyBwbGVhc2UgY29udGFjdCBTYW5nb21hIFRlY2hub2xvZ2llcyBJbmMuIGJ5CisKKwlIb3RsaW5lOgkxLTgwMC0zODgtMjQ3NQkoVVNBIGFuZCBDYW5hZGEsIHRvbGwgZnJlZSkKKwlQaG9uZToJCSg5MDUpIDQ3NC0xOTkwICBleHQ6IDEwNgorCUZheDoJCSg5MDUpIDQ3NC05MjIzCisJRS1tYWlsOgkJZG1Ac2FuZ29tYS5jb20JKERhdmlkIE1hbmRlbHN0YW0pCisJV1dXOgkJaHR0cDovL3d3dy5zYW5nb21hLmNvbQorCisKK0lOU1RBTExBVElPTgorCitQbGVhc2UgcmVhZCB0aGUgV2FucGlwZUZvckxpbnV4LnBkZiBtYW51YWwgb24gaG93IHRvIAoraW5zdGFsbCB0aGUgV0FOUElQRSB0b29scyBhbmQgZHJpdmVycyBwcm9wZXJseS4gCisKKworQWZ0ZXIgaW5zdGFsbGluZyB3YW5waXBlIHBhY2thZ2U6IC91c3IvbG9jYWwvd2Fucm91dGVyL2RvYy4gCitPbiB0aGUgZnRwLnNhbmdvbWEuY29tIDogL2xpbnV4L2N1cnJlbnRfd2FucGlwZS9kb2MKKworCitDT1BZUklHSFQgQU5EIExJQ0VOU0lORyBJTkZPUk1BVElPTgorCitUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlcgordGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKK0ZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKK1RoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKK0ZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCitZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoCit0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MKK0F2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorCisKKworQUNLTk9XTEVER0VNRU5UUworCitUaGlzIHByb2R1Y3QgaXMgYmFzZWQgb24gdGhlIFdBTlBJUEUodG0pIE11bHRpcHJvdG9jb2wgV0FOIFJvdXRlciBkZXZlbG9wZWQKK2J5IFNhbmdvbWEgVGVjaG5vbG9naWVzIEluYy4gZm9yIExpbnV4IDIuMC54IGFuZCAyLjIueC4gIFN1Y2Nlc3Mgb2YgdGhlIFdBTlBJUEUKK3RvZ2V0aGVyIHdpdGggdGhlIG5leHQgbWFqb3IgcmVsZWFzZSBvZiBMaW51eCBrZXJuZWwgaW4gc3VtbWVyIDE5OTYgY29tbWFuZGVkCithZGVxdWF0ZSBjaGFuZ2VzIHRvIHRoZSBXQU5QSVBFIGNvZGUgdG8gdGFrZSBmdWxsIGFkdmFudGFnZSBvZiBuZXcgTGludXgKK2ZlYXR1cmVzLgorCitJbnN0ZWFkIG9mIGNvbnRpbnVpbmcgZGV2ZWxvcGluZyBwcm9wcmlldGFyeSBpbnRlcmZhY2UgdGllZCB0byBTYW5nb21hIFdBTgorY2FyZHMsIHdlIGRlY2lkZWQgdG8gc2VwYXJhdGUgYWxsIGhhcmR3YXJlLWluZGVwZW5kZW50IGNvZGUgaW50byBhIHNlcGFyYXRlCittb2R1bGUgYW5kIGRlZmluZWQgdHdvIGxldmVscyBvZiBpbnRlcmZhY2VzIC0gb25lIGZvciB1c2VyLWxldmVsIGFwcGxpY2F0aW9ucworYW5kIGFub3RoZXIgZm9yIGtlcm5lbC1sZXZlbCBXQU4gZHJpdmVycy4gIFdBTlBJUEUgaXMgbm93IGltcGxlbWVudGVkIGFzIGEKK1dBTiBkcml2ZXIgY29tcGxpYW50IHdpdGggdGhlIFdBTiBMaW5rIERyaXZlciBpbnRlcmZhY2UuICBBbHNvIGEgZ2VuZXJhbAorcHVycG9zZSBXQU4gY29uZmlndXJhdGlvbiB1dGlsaXR5IGFuZCBhIHNldCBvZiBzaGVsbCBzY3JpcHRzIHdhcyBkZXZlbG9wZWQgdG8gCitzdXBwb3J0IFdBTiByb3V0ZXIgYXQgdGhlIHVzZXIgbGV2ZWwuCisKK01hbnkgdXNlZnVsIGlkZWFzIGNvbmNlcm5pbmcgaGFyZHdhcmUtaW5kZXBlbmRlbnQgaW50ZXJmYWNlIGltcGxlbWVudGF0aW9uCit3ZXJlIGdpdmVuIGJ5IE1pa2UgTWNMYWdhbiA8bWlrZS5tY2xhZ2FuQGxpbnV4Lm9yZz4gYW5kIGhpcyBpbXBsZW1lbnRhdGlvbgorb2YgdGhlIEZyYW1lIFJlbGF5IHJvdXRlciBhbmQgZHJpdmVycyBmb3IgU2FuZ29tYSBjYXJkcyAoZGxjaS9zZGxhKS4KKworV2l0aCB0aGUgbmV3IGltcGxlbWVudGF0aW9uIG9mIHRoZSBBUElzIGJlaW5nIGluY29ycG9yYXRlZCBpbnRvIHRoZSBXQU5QSVBFLAorYSBzcGVjaWFsIHRoYW5rIGdvZXMgdG8gQWxhbiBDb3ggaW4gcHJvdmlkaW5nIGluc2lnaHQgaW50byBCU0Qgc29ja2V0cy4KKworU3BlY2lhbCB0aGFua3MgdG8gYWxsIHRoZSBXQU5QSVBFIHVzZXJzIHdobyBwZXJmb3JtZWQgZmllbGQtdGVzdGluZywgcmVwb3J0ZWQKK2J1Z3MgYW5kIG1hZGUgdmFsdWFibGUgY29tbWVudHMgYW5kIHN1Z2dlc3Rpb25zIHRoYXQgaGVscCB1cyB0byBpbXByb3ZlIHRoaXMKK3Byb2R1Y3QuCisKKworCitORVcgSU4gVEhJUyBSRUxFQVNFCisKKwlvIFVwZGF0ZWQgdGhlIFdBTkNGRyB1dGlsaXR5CisJCUNhbGxzIHRoZSBwcHBjb25maWcgdG8gY29uZmlndXJlIHRoZSBQUFBECisJCWZvciBhc3luYyBjb25uZWN0aW9ucy4KKworCW8gQWRkZWQgdGhlIFBQUENPTkZJRyB1dGlsaXR5CisJCVVzZWQgdG8gY29uZmlndXJlIHRoZSBQUFBEIGRhbWVvbiBmb3IgdGhlCisJCVdBTlBJUEUgQXN5bmMgUFBQIGFuZCBzdGFuZGFyZCBzZXJpYWwgcG9ydC4KKwkJVGhlIHdhbmNmZyBjYWxscyB0aGUgcHBwY29uZmlnIHRvIGNvbmZpZ3VyZQorCQl0aGUgcHBwZC4KKworCW8gRml4ZWQgdGhlIFBDSSBhdXRvZGV0ZWN0IGZlYXR1cmUuICAKKwkJVGhlIFNMT1QgMCB3YXMgdXNlZCBhcyBhbiBhdXRvZGV0ZWN0IG9wdGlvbgorCQlob3dldmVyLCBzb21lIGhpZ2ggZW5kIFBDJ3Mgc2xvdCBudW1iZXJzIHN0YXJ0CisJCWZyb20gMC4gCisKKwlvIFRoaXMgcmVsZWFzZSBoYXMgYmVlbiB0ZXN0ZWQgd2l0aCB0aGUgbmV3IGJhY2t1cGQKKwkgIGRhZW1vbiByZWxlYXNlLgorCQorCitQUk9EVUNUIENPTVBPTkVOVFMgQU5EIFJFTEFURUQgRklMRVMKKworL2V0YzogKG9yIHVzZXIgZGVmaW5lZCkKKwl3YW5waXBlMS5jb25mCWRlZmF1bHQgcm91dGVyIGNvbmZpZ3VyYXRpb24gZmlsZQorCisvbGliL21vZHVsZXMvWC5ZLlovbWlzYzoKKwl3YW5yb3V0ZXIubwlyb3V0ZXIga2VybmVsIGxvYWRhYmxlIG1vZHVsZQorCWFmX3dhbnBpcGUubwl3YW5waXBlIGFwaSBzb2NrZXQgbW9kdWxlCisKKy9saWIvbW9kdWxlcy9YLlkuWi9uZXQ6CisJc2RsYWRydi5vCVNhbmdvbWEgU0RMQSBzdXBwb3J0IG1vZHVsZQorCXdhbnBpcGUubwlTYW5nb21hIFdBTlBJUEUodG0pIGRyaXZlciBtb2R1bGUKKworL3Byb2MvbmV0L3dhbnJvdXRlcgorCUNvbmZpZwkJcmVhZHMgY3VycmVudCByb3V0ZXIgY29uZmlndXJhdGlvbgorCVN0YXR1cwkJcmVhZHMgY3VycmVudCByb3V0ZXIgc3RhdHVzCisJe25hbWV9CQlyZWFkcyBXQU4gZHJpdmVyIHN0YXRpc3RpY3MKKworL3Vzci9zYmluOgorCXdhbnJvdXRlcgl3YW5yb3V0ZXIgc3RhcnQtdXAgc2NyaXB0CisJd2FuY29uZmlnCXdhbnJvdXRlciBjb25maWd1cmF0aW9uIHV0aWxpdHkKKwlzZGxhZHVtcAlXQU5QSVBFIGFkYXB0ZXIgbWVtb3J5IGR1bXAgdXRpbGl0eQorICAgICAgICBmcGlwZW1vbiAgICAgICAgTW9uaXRvciBmb3IgRnJhbWUgUmVsYXkKKyAgICAgICAgY3BpcGVtb24gICAgICAgIE1vbml0b3IgZm9yIENpc2NvIEhETEMKKwlwcGlwZW1vbiAJTW9uaXRvciBmb3IgUFBQCisJeHBpcGVtb24gCU1vbml0b3IgZm9yIFgyNQorCXdwa2JkbW9uICAgICAgICBXQU5QSVBFIGtleWJvYXJkIGxlZCBtb25pdG9yL2RlYnVnZ2VyCisKKy91c3IvbG9jYWwvd2Fucm91dGVyOgorCVJFQURNRQkJdGhpcyBmaWxlCisJQ09QWUlORwkJR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKwlTZXR1cAkJaW5zdGFsbGF0aW9uIHNjcmlwdAorCUZpbGVsaXN0CWRpc3RyaWJ1dGlvbiBkZWZpbml0aW9uIGZpbGUKKwl3YW5yb3V0ZXIucmMJbWV0YS1jb25maWd1cmF0aW9uIGZpbGUgCisJCQkodXNlZCBieSB0aGUgU2V0dXAgYW5kIHdhbnJvdXRlciBzY3JpcHQpCisKKy91c3IvbG9jYWwvd2Fucm91dGVyL2RvYzoKKwl3YW5waXBlRm9yTGludXgucGRmIAlXQU4gUm91dGVyIFVzZXIncyBNYW51YWwKKworL3Vzci9sb2NhbC93YW5yb3V0ZXIvcGF0Y2hlczoKKwl3YW5yb3V0ZXItdjIyMTMuZ3ogIAlwYXRjaCBmb3IgTGludXgga2VybmVscyAyLjIuMTEgdXAgdG8gMi4yLjEzLgorCXdhbnJvdXRlci12MjIxNC5neglwYXRjaCBmb3IgTGludXgga2VybmVsIDIuMi4xNC4gCisJd2Fucm91dGVyLXYyMjE1Lmd6CXBhdGNoIGZvciBMaW51eCBrZXJuZWxzIDIuMi4xNSB0byAyLjIuMTcuCisJd2Fucm91dGVyLXYyMjE4Lmd6CXBhdGNoIGZvciBMaW51eCBrZXJuZWxzIDIuMi4xOCBhbmQgdXAuCisJd2Fucm91dGVyLXYyNDAuZ3oJcGF0Y2ggZm9yIExpbnV4IGtlcm5lbCAyLjQuMC4gIAorCXdhbnJvdXRlci12MjQyLmd6CXBhdGNoIGZvciBMaW51eCBrZXJuZWwgMi40LjIgYW5kIHVwLgorCXdhbnJvdXRlci12MjAzNC5neglwYXRjaCBmb3IgTGludXgga2VybmVsIDIuMC4zNAorCXdhbnJvdXRlci12MjAzNi5neiAJcGF0Y2ggZm9yIExpbnV4IGtlcm5lbCAyLjAuMzYgYW5kIHVwLiAKKworL3Vzci9sb2NhbC93YW5yb3V0ZXIvcGF0Y2hlcy9rZHJpdmVyczoKKwlTb3VyY2VzIG9mIHRoZSBsYXRlc3QgV0FOUElQRSBkZXZpY2UgZHJpdmVycy4KKwlUaGVzZSBhcmUgdXNlZCB0byBVUEdSQURFIHRoZSBsaW51eCBrZXJuZWwgdG8gdGhlIG5ld2VzdAorCXZlcnNpb24gaWYgdGhlIGtlcm5lbCBzb3VyY2UgaGFzIGFscmVhZHkgYmVlbiBwYXRoY2VkIHdpdGgKKwlXQU5QSVBFIGRyaXZlcnMuCisKKy91c3IvbG9jYWwvd2Fucm91dGVyL3NhbXBsZXM6CisJaW50ZXJmYWNlCXNhbXBsZSBpbnRlcmZhY2UgY29uZmlndXJhdGlvbiBmaWxlCisJd2FucGlwZTEuY3ByaSAJQ0hETEMgcHJpbWFyeSBwb3J0CisgICAgIAl3YW5waXBlMi5jc2VjIAlDSERMQyBzZWNvbmRhcnkgcG9ydAorICAgICAJd2FucGlwZTEuZnIgICAJRnJhbWUgUmVsYXkgcHJvdG9jb2wKKyAgICAgCXdhbnBpcGUxLnBwcCAgCVBQUCBwcm90b2NvbCApIAorCXdhbnBpcGUxLmFzeQlDSERMQyBBU1lOQyBwcm90b2NvbAorCXdhbnBpcGUxLngyNQlYMjUgcHJvdG9jb2wKKwl3YW5waXBlMS5zdHR5CVN5bmMgVFRZIGRyaXZlciAoVXNlZCBieSBLZXJuZWwgUFBQRCBkYWVtb24pCisJd2FucGlwZTEuYXR0eQlBc3luYyBUVFkgZHJpdmVyIChVc2VkIGJ5IEtlcm5lbCBQUFBEIGRhZW1vbikKKwl3YW5yb3V0ZXIucmMJc2FtcGxlIG1ldGEtY29uZmlndXJhdGlvbiBmaWxlCisKKy91c3IvbG9jYWwvd2Fucm91dGVyL3V0aWw6CisJKgkJd2FuLXRvb2xzIHV0aWxpdGllcyBzb3VyY2UgY29kZQorCisvdXNyL2xvY2FsL3dhbnJvdXRlci9hcGkveDI1OgorCSoJCXgyNSBhcGkgc2FtcGxlIHByb2dyYW1zLgorL3Vzci9sb2NhbC93YW5yb3V0ZXIvYXBpL2NoZGxjOgorCSoJCWNoZGxjIGFwaSBzYW1wbGUgcHJvZ3JhbXMuCisvdXNyL2xvY2FsL3dhbnJvdXRlci9hcGkvZnI6CisJKgkJZnIgYXBpIHNhbXBsZSBwcm9ncmFtcy4KKy91c3IvbG9jYWwvd2Fucm91dGVyL2NvbmZpZy93YW5jZmc6CisJd2FuY2ZnCQlXQU5QSVBFIEdVSSBjb25maWd1cmF0aW9uIHByb2dyYW0uCisgICAgICAgICAgICAgICAgICAgICAgICBDcmVhdGVzIHdhbnBpcGUjLmNvbmYgZmlsZXMuIAorL3Vzci9sb2NhbC93YW5yb3V0ZXIvY29uZmlnL2NmZ2Z0MToKKwljZmdmdDEJCUdVSSBDU1UvRFNVIGNvbmZpZ3VyYXRpb24gcHJvZ3JhbS4KKworL3Vzci9pbmNsdWRlL2xpbnV4OgorCXdhbnJvdXRlci5oCXJvdXRlciBBUEkgZGVmaW5pdGlvbnMKKwl3YW5waXBlLmgJV0FOUElQRSBBUEkgZGVmaW5pdGlvbnMKKwlzZGxhZHJ2LmgJU0RMQSBzdXBwb3J0IG1vZHVsZSBBUEkgZGVmaW5pdGlvbnMKKwlzZGxhc2ZtLmgJU0RMQSBmaXJtd2FyZSBtb2R1bGUgZGVmaW5pdGlvbnMKKwlpZl93YW5waXBlLmgJV0FOUElQRSBTb2NrZXQgZGVmaW5pdGlvbnMKKwlpZl93YW5waXBlX2NvbW1vbi5oCVdBTlBJUEUgU29ja2V0L0RyaXZlciBjb21tb24gZGVmaW5pdGlvbnMuCisJc2RsYXBjaS5oCVdBTlBJUEUgUENJIGRlZmluaXRpb25zCisJCisKKy91c3Ivc3JjL2xpbnV4L25ldC93YW5yb3V0ZXI6CisJKgkJd2Fucm91dGVyIHNvdXJjZSBjb2RlCisKKy92YXIvbG9nOgorCXdhbnJvdXRlcgl3YW5yb3V0ZXIgc3RhcnQtdXAgbG9nIChjcmVhdGVkIGJ5IHRoZSBTZXR1cCBzY3JpcHQpCisKKy92YXIvbG9jazogIChvciAvdmFyL2xvY2svc3Vic3lzIGZvciBSZWRIYXQpCisJd2Fucm91dGVyCXdhbnJvdXRlciBsb2NrIGZpbGUgKGNyZWF0ZWQgYnkgdGhlIFNldHVwIHNjcmlwdCkKKworL3Vzci9sb2NhbC93YW5yb3V0ZXIvZmlybXdhcmU6CisJZnI1MTQuc2ZtCUZyYW1lIHJlbGF5IGZpcm13YXJlIGZvciBTYW5nb21hIFM1MDgvUzUxNCBjYXJkCisJY2R1YWw1MTQuc2ZtCUR1YWwgUG9ydCBDaXNjbyBIRExDIGZpcm13YXJlIGZvciBTYW5nb21hIFM1MDgvUzUxNCBjYXJkCisJcHBwNTE0LnNmbSAgICAgIFBQUCBGaXJtd2FyZSBmb3IgU2FuZ29tYSBTNTA4IGFuZCBTNTE0IGNhcmRzCisJeDI1XzUwOC5zZm0JWDI1IEZpcm13YXJlIGZvciBTYW5nb21hIFM1MDggY2FyZC4KKworCitSRVZJU0lPTiBISVNUT1JZCisKKzEuMC4wCURlY2VtYmVyIDMxLCAxOTk2CUluaXRpYWwgdmVyc2lvbgorCisxLjAuMQlKYW51YXJ5IDMwLCAxOTk3CVN0YXR1cyBhbmQgc3RhdGlzdGljcyBjYW4gYmUgcmVhZCB2aWEgL3Byb2MKKwkJCQlmaWxlc3lzdGVtIGVudHJpZXMuCisKKzEuMC4yICAgQXByaWwgMzAsIDE5OTcgICAgICAgICAgQWRkZWQgVURQIG1hbmFnZW1lbnQgdmlhIG1vbml0b3JzLgorCisxLjAuMwlKdW5lIDMsIDE5OTcJCVVEUCBtYW5hZ2VtZW50IGZvciBtdWx0aXBsZSBib2FyZHMgdXNpbmcgRnJhbWUKKwkJCQlSZWxheSBhbmQgUFBQCisJCQkJRW5hYmxlZCBjb250aW51b3VzIHRyYW5zbWlzc2lvbiBvZiBDb25maWd1cmUgCisJCQkJUmVxdWVzdCBQYWNrZXQgZm9yIFBQUCAoZm9yIDUwOCBvbmx5KQorCQkJCUNvbm5lY3Rpb24gVGltZW91dCBmb3IgUFBQIGNoYW5nZWQgZnJvbSA5MDAgdG8gMAorCQkJCUZsb3cgQ29udHJvbCBQcm9ibGVtIGZpeGVkIGZvciBGcmFtZSBSZWxheQorCisxLjAuNAlKdWx5IDEwLCAxOTk3CQlTNTA4L0ZUMSBtb25pdG9yaW5nIGNhcGFiaWxpdHkgaW4gZnBpcGVtb24gYW5kCisJCQkJcHBpcGVtb24gdXRpbGl0aWVzLgorCQkJCUNvbmZpZ3VyYWJsZSBUVEwgZm9yIFVEUCBwYWNrZXRzLgorCQkJCU11bHRpY2FzdCBhbmQgQnJvYWRjYXN0IElQIHNvdXJjZSBhZGRyZXNzZXMgYXJlCisJCQkJc2lsZW50bHkgZGlzY2FyZGVkLgorCisxLjAuNQlKdWx5IDI4LCAxOTk3CQlDb25maWd1cmFibGUgVDM5MSxUMzkyLE4zOTEsTjM5MixOMzkzIGZvciBGcmFtZQorCQkJCVJlbGF5IGluIHJvdXRlci5jb25mLgorCQkJCUNvbmZpZ3VyYWJsZSBNZW1vcnkgQWRkcmVzcyB0aHJvdWdoIHJvdXRlci5jb25mIAorCQkJCWZvciBGcmFtZSBSZWxheSwgUFBQIGFuZCBYLjI1LiAoY29tbWVudGluZyB0aGlzCisgCQkJCW91dCBlbmFibGVzIGF1dG8tZGV0ZWN0aW9uKS4KKwkJCQlGaXhlZCBmcmVlaW5nIHVwIHJlY2VpdmVkIGJ1ZmZlcnMgdXNpbmcga2ZyZWUoKQorIAkJCQlmb3IgRnJhbWUgUmVsYXkgYW5kIFguMjUuCisJCQkJUHJvdGVjdCBzZGxhX3BlZWsoKSBieSBjYWxsaW5nIHNhdmVfZmxhZ3MoKSwKKwkJCQljbGkoKSBhbmQgcmVzdG9yZV9mbGFncygpLgorCQkJCUNoYW5nZWQgbnVtYmVyIG9mIFRyYWNlIGVsZW1lbnRzIGZyb20gMzIgdG8gMjAKKwkJCQlBZGRlZCBETENJIHNwZWNpZmljIGRhdGEgbW9uaXRvcmluZyBpbiBGUElQRU1PTi4gCisyLjAuMAlOb3YgMDcsIDE5OTcJCUltcGxlbWVudGVkIHByb3RlY3Rpb24gb2YgUkFDRSBjb25kaXRpb25zIGJ5IAorCQkJCWNyaXRpY2FsIGZsYWdzIGZvciBGUkFNRSBSRUxBWSBhbmQgUFBQLgorCQkJCURMQ0kgTGlzdCBpbnRlcnJ1cHQgbW9kZSBpbXBsZW1lbnRlZC4KKwkJCQlJUFggc3VwcG9ydCBpbiBGUkFNRSBSRUxBWSBhbmQgUFBQLgorCQkJCUlQWCBTZXJ2ZXIgU3VwcG9ydCAoTUFSUykKKwkJCQlNb3JlIGRyaXZlciBzcGVjaWZpYyBzdGF0cyBpbmNsdWRlZCBpbiBGUElQRU1PTgorCQkJCWFuZCBQSVBFTU9OLgorCisyLjAuMQlOb3YgMjgsIDE5OTcJCUJ1ZyBGaXhlcyBmb3IgdmVyc2lvbiAyLjAuMC4KKwkJCQlQcm90ZWN0aW9uIG9mICJlbmFibGVfaXJxKCkiIHdoaWxlIAorCQkJCSJkaXNhYmxlX2lycSgpIiBoYXMgYmVlbiBlbmFibGVkIGZyb20gYW55IG90aGVyCisJCQkJcm91dGluZSAoZm9yIEZyYW1lIFJlbGF5LCBQUFAgYW5kIFgyNSkuCisJCQkJQWRkZWQgYWRkaXRpb25hbCBTdGF0cyBmb3IgRnBpcGVtb24gYW5kIFBwaXBlbW9uCisJCQkJSW1wcm92ZWQgTG9hZCBTaGFyaW5nIGZvciBtdWx0aXBsZSBib2FyZHMKKworMi4wLjIJRGVjIDA5LCAxOTk3CQlTdXBwb3J0IGZvciBQQVAgYW5kIENIQVAgZm9yIHBwcCBoYXMgYmVlbgorCQkJCWltcGxlbWVudGVkLgorCisyLjAuMwlBdWcgMTUsIDE5OTgJCU5ldyByZWxlYXNlIHN1cHBvcnRpbmcgQ2lzY28gSERMQywgQ0lSIGZvciBGcmFtZQorCQkJCXJlbGF5LCBEeW5hbWljIElQIGFzc2lnbm1lbnQgZm9yIFBQUCBhbmQgSW52ZXJzZQorCQkJCUFycCBzdXBwb3J0IGZvciBGcmFtZS1yZWxheS4gIE1hbiBQYWdlcyBhcmUgCisJCQkJaW5jbHVkZWQgZm9yIGJldHRlciBzdXBwb3J0IGFuZCBhIG5ldyB1dGlsaXR5CisJCQkJZm9yIGNvbmZpZ3VyaW5nIEZUMSBjYXJkcy4KKworMi4wLjQJRGVjIDA5LCAxOTk4CSAgICAgICAgRHVhbCBQb3J0IHN1cHBvcnQgZm9yIENpc2NvIEhETEMuCisJCQkJU3VwcG9ydCBmb3IgSERMQyAoTEFQQikgQVBJLgorCQkJCVN1cHBvcnRzIEJpU3luYyBTdHJlYW1pbmcgY29kZSBmb3IgUzUwMkUgCisJCQkJYW5kIFM1MDMgY2FyZHMuCisJCQkJU3VwcG9ydCBmb3IgU3RyZWFtaW5nIEhETEMgQVBJLgorCQkJCVByb3ZpZGVzIGEgQlNEIHNvY2tldCBpbnRlcmZhY2UgZm9yIAorCQkJCWNyZWF0aW5nIGFwcGxpY2F0aW9ucyB1c2luZyBCaVN5bmMKKyAgIAkJCQlzdHJlYW1pbmcuICAgICAgICAKKworMi4wLjUgICBBdWcgMDQsIDE5OTkgCQlDSERMQyBpbml0aWFsaXphdGluIGJ1ZyBmaXguCisJCQkJUFBQIGludGVycnVwdCBkcml2ZW4gZHJpdmVyOiAKKyAgCQkJCUZpeCB0byB0aGUgUFBQIGxpbmUgaGFuZ3VwIHByb2JsZW0uCisJCQkJTmV3IFBQUCBmaXJtd2FyZQorCQkJCUFkZGVkIGNvbW1lbnRzIHRvIHRoZSBzdGFydHVwIFNZU1RFTSBFUlJPUiBtZXNzYWdlcworCQkJCVhwaXBlbW9uIGRlYnVnZ2luZyBhcHBsaWNhdGlvbiBmb3IgdGhlIFgyNSBwcm90b2NvbAorCQkJCU5ldyBVU0VSX01BTlVBTC50eHQKKwkJCQlGaXhlZCB0aGUgb2RkIGJvdW5kYXJ5IDRieXRlIHdyaXRlcyB0byB0aGUgYm9hcmQuCisJCQkJQmlTeW5jIFN0cmVhbWluZyBjb2RlIGhhcyBiZWVuIHRha2VuIG91dC4gIAorCQkJCSBBdmFpbGFibGUgYXMgYSBwYXRjaC4KKwkJCQlTdHJlYW1pbmcgSERMQyBBUEkgaGFzIGJlZW4gdGFrZW4gb3V0LiAgCisJCQkJIEF2YWlsYWJsZSBhcyBhIHBhdGNoLiAgICAgICAgICAgICAgICAgCisKKzIuMC42ICAgQXVnIDE3LCAxOTk5CQlJbmNyZWFzZWQgZGVidWdnaW5nIGluIHN0YXR1cCBzY3JpcHRzCisJCQkJRml4ZWQgaW5zYWxsYXRpb24gYnVncyBmcm9tIDIuMC41CisJCQkJS2VybmVsIHBhdGNoIHdvcmtzIGZvciBib3RoIDIuMi4xMCBhbmQgMi4yLjExIGtlcm5lbHMuCisJCQkJVGhlcmUgaXMgbm8gZnVuY3Rpb25hbCBkaWZmZXJlbmNlIGJldHdlZW4gdGhlIHR3byBwYWNrYWdlcyAgICAgICAgIAorCisyLjAuNyAgIEF1ZyAyNiwgMTk5OQkJbyAgTWVyZ2VkIFgyNUFQSSBjb2RlIGludG8gV0FOUElQRS4KKwkJCQlvICBGaXhlZCBhIG1lbWVvcnkgbGVhayBmb3IgWDI1QVBJCisJCQkJbyAgVXBkYXRlZCB0aGUgWDI1QVBJIGNvZGUgZm9yIDIuMi5YIGtlcm5lbHMuCisJCQkJbyAgSW1wcm92ZWQgTkVNIGhhbmRsaW5nLiAgIAorCisyLjEuMAlPY3QgMjUsIDE5OTkJCW8gTmV3IGNvZGUgZm9yIFM1MTQgUENJIENhcmQKKwkJCQlvIE5ldyBDSERMQyBhbmQgRnJhbWUgUmVsYXkgZHJpdmVycworCQkJCW8gUFBQIGFuZCBYMjUgYXJlIG5vdCBzdXBwb3J0ZWQgaW4gdGhpcyByZWxlYXNlICAgIAorCisyLjEuMQlOb3YgMzAsIDE5OTkJCW8gUFBQIHN1cHBvcnQgZm9yIFM1MTQgUENJIENhcmRzCisKKzIuMS4zICAgQXByIDA2LCAyMDAwCQlvIFNvY2tldCBiYXNlZCB4MjVhcGkgCisJCQkJbyBTb2NrZXQgYmFzZWQgY2hkbGMgYXBpCisJCQkJbyBTb2NrZXQgYmFzZWQgZnIgYXBpCisJCQkJbyBEdWFsIFBvcnQgUmVjZWl2ZSBvbmx5IENIRExDIHN1cHBvcnQuCisJCQkJbyBBc3luY2hyb25vdXMgQ0hETEMgc3VwcG9ydCAoU2Vjb25kYXJ5IFBvcnQpCisJCQkJbyBjZmdmdDEgR1VJIGNzdS9kc3UgY29uZmlndXJhdG9yCisJCQkJbyB3YW5jZmcgR1VJIGNvbmZpZ3VyYXRpb24gZmlsZSAKKwkJCQkgIGNvbmZpZ3VyYXRvci4KKwkJCQlvIEFyY2hpdGVjdHVhbCBkaXJlY3RvcnkgY2hhbmdlcy4KKworYmV0YS0yLjEuNCBKdWwgMjAwMAkJbyBEeW5hbWljIGludGVyZmFjZSBjb25maWd1cmF0aW9uOgorCQkJCQlOZXR3b3JrIGludGVyZmFjZXMgcmVmbGVjdCB0aGUgc3RhdGUKKwkJCQkJb2YgcHJvdG9jb2wgbGF5ZXIuICBJZiB0aGUgcHJvdG9jb2wgYmVjb21lcworCQkJCQlkaXNjb25uZWN0ZWQsIGRyaXZlciB3aWxsIGJyaW5nIGRvd24KKwkJCQkJdGhlIGludGVyZmFjZS4gIE9uY2UgdGhlIHByb3RvY29sIHJlY29ubmVjdHMKKwkJCQkJdGhlIGludGVyZmFjZSB3aWxsIGJlIGJyb3VnaHQgdXAuIAorCQkJCQkKKwkJCQkJTm90ZTogVGhpcyBvcHRpb24gaXMgdHVybmVkIG9mZiBieSBkZWZhdWx0LgorCisJCQkJbyBEeW5hbWljIHdhbnJvdXRlciBzZXR1cCB1c2luZyAnd2FuY29uZmlnJzoKKwkJCQkJd2FuY29uZmlnIHV0aWxpdHkgY2FuIGJlIHVzZWQgdG8KKwkJCQkJc2h1dGRvd24scmVzdGFydCxzdGFydCBvciByZWNvbmZpZ3VyZSAKKwkJCQkJYSB2aXJ0dWFsIGNpcmN1aXQgZHluYW1pY2FsbHkuCisJCQkJICAgICAKKwkJCQkJRnJhbWUgUmVsYXk6ICBFYWNoIERMQ0kgY2FuIGJlOiAKKwkJCQkJCSAgICAgIGNyZWF0ZWQsc3RvcHBlZCxyZXN0YXJ0ZWQgYW5kIHJlY29uZmlndXJlZAorCQkJCQkJICAgICAgZHluYW1pY2FsbHkgdXNpbmcgd2FuY29uZmlnLgorCQkJCQkKKwkJCQkJCSAgICAgIGV4OiB3YW5jb25maWcgY2FyZCB3YW5waXBlMSBkZXYgd3AxX2ZyMTYgdXAKKwkJCQkgIAorCQkJCW8gV2Fucm91dGVyIHN0YXJ0dXAgdmlhIGNvbW1hbmQgbGluZSBhcmd1bWVudHM6CisJCQkJCXdhbmNvbmZpZyBhbHNvIHN1cHBvcnRzIHdhbnJvdXRlciBzdGFydHVwIHZpYSBjb21tYW5kIGxpbmUKKwkJCQkJYXJndW1lbnRzLiAgVGh1cywgdGhlcmUgaXMgbm8gbmVlZCB0byBjcmVhdGUgYSB3YW5waXBlIy5jb25mCisJCQkJCWNvbmZpZ3VyYXRpb24gZmlsZS4gIAorCisJCQkJbyBTb2NrZXQgYmFzZWQgeDI1YXBpIHVwZGF0ZS9idWcgZml4ZXMuCisJCQkJCUFkZGVkIHN1cHBvcnQgZm9yIExDTiBudW1iZXJzIGdyZWF0ZXIgdGhhbiAyNTUuCisJCQkJCU9wdGlvbiB0byBwYXNzIHVwIG1vZGVtIG1lc3NhZ2VzLgorCQkJCQlQcm92aWRlZCBhIFBDSSBJUlEgY2hlY2ssIHNvIGEgc2luZ2xlIFM1MTQKKwkJCQkJY2FyZCBpcyBndWFyYW50ZWVkIHRvIGhhdmUgYSBub24tc2hhcmluZyBpbnRlcnJ1cHQuCisKKwkJCQlvIEZpeGVzIHRvIHRoZSB3YW5jZmcgdXRpbGl0eS4KKwkJCQlvIE5ldyBGVDEgZGVidWdnaW5nIHN1cHBvcnQgdmlhICpwaXBlbW9uIHV0aWxpdGllcy4KKwkJCQlvIEZyYW1lIFJlbGF5IEFSUCBzdXBwb3J0IEVuYWJsZWQuCisKK2JldGEzLTIuMS40IEp1bCAyMDAwCQlvIFgyNSBNX0JJVCBQcm9ibGVtIGZpeC4KKwkJCQlvIEFkZGVkIHRoZSBNdWx0aS1Qb3J0IFBQUAorCQkJCSAgVXBkYXRlZCB1dGlsaXRlcyBmb3IgdGhlIE11bHRpLVBvcnQgUFBQLgorCisyLjEuNAlBdXQgMjAwMAorCQkJCW8gSW4gWDI1QVBJOgorCQkJCQlNYXhpbXVtIHBhY2tldCBhbiBhcHBsaWNhdGlvbiBjYW4gc2VuZAorCQkJCQl0byB0aGUgZHJpdmVyIGhhcyBiZWVuIGV4dGVuZGVkIHRvIDQwOTYgYnl0ZXMuCisKKwkJCQkJRml4ZWQgdGhlIHgyNSBzdGFydHVwIGJ1Zy4gRW5hYmxlIAorCQkJCQljb21tdW5pY2F0aW9ucyBvbmx5IGFmdGVyIGFsbCBpbnRlcmZhY2VzCisJCQkJCWNvbWUgdXAuICBISUdIIFNWQy9QVkMgaXMgdXNlZCB0byBjYWxjdWxhdGUKKwkJCQkJdGhlIG51bWJlciBvZiBjaGFubmVscy4KKwkJCQkJRW5hYmxlIHByb3RvY29sIG9ubHkgYWZ0ZXIgYWxsIGludGVyZmFjZXMKKwkJCQkJYXJlIGVuYWJsZWQuCisKKwkJCQlvIEFkZGVkIGFuIGV4dHJhIHN0YXRlIHRvIHRoZSBGVDEgY29uZmlnLCBrZXJuZWwgbW9kdWxlLgorCQkJCW8gVXBkYXRlZCB0aGUgcGlwZW1vbiBkZWJ1Z2dlcnMuCisKKwkJCQlvIEJsb2NrZWQgdGhlIE11bHRpLVBvcnQgUFBQIGZyb20gcnVubmluZyBvbiBrZXJuZWxzCisJCQkJICAyLjIuMTYgb3IgZ3JlYXRlciwgZHVlIHRvIHN5bmNwcHAga2VybmVsIG1vZHVsZQorCQkJCSAgY2hhbmdlLiAKKwkgIAorYmV0YTEtMi4xLjUgCU5vdiAxNSAyMDAwCisJCQkJbyBGaXhlZCB0aGUgTXVsaXRQb3J0IFBQUCBTdXBwb3J0IGZvciBrZXJuZWxzIDIuMi4xNiBhbmQgYWJvdmUuCisJCQkJICAyLjIuWCBrZXJuZWxzIG9ubHkKKworCQkJCW8gU2VjdXJlZCB0aGUgZHJpdmVyIFVEUCBkZWJ1Z2dpbmcgY2FsbHMKKwkJCQkJLSBBbGwgaWxsZWdhbCBuZXRvd3JrIGRlYnVnZ2luZyBjYWxscyBhcmUgcmVwb3J0ZWQgdG8KKwkJCQkJICB0aGUgbG9nLgorCQkJCQktIERlZmluZWQgYSBzZXQgb2YgYWxsb3dlZCBjb21tYW5kcywgYWxsIG90aGVyIGRlbmllZC4KKwkJCQkJCisJCQkJbyBDcGlwZW1vbgorCQkJCQktIEFkZGVkIHNldCBGVDEgY29tbWFuZHMgdG8gdGhlIGNwaXBlbW9uLiBUaHVzIENTVS9EU1UKKwkJCQkJICBjb25maWd1cmFpdG9uIGNhbiBiZSBwZXJmb3JtZWQgdXNpbmcgY3BpcGVtb24uCisJCQkJCSAgQWxsIHN5c3RlbXMgdGhhdCBjYW5ub3QgcnVuIGNmZ2Z0MSBHVUkgdXRpbGl0eSBzaG91bGQKKwkJCQkJICB1c2UgY3BpcGVtb24gdG8gY29uZmlndXJlIHRoZSBvbiBib2FyZCBDU1UvRFNVLgorCisKKwkJCQlvIEtleWJvYXJkIExlZCBNb25pdG9yL0RlYnVnZ2VyCisJCQkJCS0gQSBuZXcgdXRpbHR5IC91c3Ivc2Jpbi93cGtiZG1vbiB1c2VzIGtleWJvYXJkIGxlZHMKKwkJCQkJICB0byBjb252ZXkgb3BlcmF0aW5hbCBzdGF0aXN0aWMgaW5mb3JtYXRpb24gb2YgdGhlIAorCQkJCQkgIFNhbmdvbWEgV0FOUElQRSBjYXJkcy4KKwkJCQkJTlVNX0xPQ0sgICAgPSBMaW5lIFN0YXRlICAoT249Y29ubmVjdGVkLCAgICBPZmY9ZGlzY29ubmVjdGVkKQorCQkJCQlDQVBTX0xPQ0sgICA9IFR4IGRhdGEgICAgIChPbj10cmFuc21pdHRpbmcsIE9mZj1ubyB0eCBkYXRhKQorCQkJCQlTQ1JPTExfTE9DSyA9IFJ4IGRhdGEgICAgIChPbj1yZWNlaXZpbmcsICAgIE9mZj1ubyByeCBkYXRhCisJCQkJCQorCQkJCW8gSGFyZHdhcmUgcHJvYmUgb24gbW9kdWxlIGxvYWQgYW5kIGR5bmFtaWMgZGV2aWNlIGFsbG9jYXRpb24KKwkJCQkJLSBEdXJpbmcgV0FOUElQRSBtb2R1bGUgbG9hZCwgYWxsIFNhbmdvbWEgY2FyZHMgYXJlIHByb2JlZAorCQkJCQkgIGFuZCBmb3VuZCBpbmZvcm1hdGlvbiBpcyBwcmludGVkIGluIHRoZSAvdmFyL2xvZy9tZXNzYWdlcy4KKwkJCQkJLSBJZiBubyBjYXJkcyBhcmUgZm91bmQsIHRoZSBtb2R1bGUgbG9hZCBmYWlscy4KKwkJCQkJLSBBcHByb3ByaWF0ZSBudW1iZXIgb2YgZGV2aWNlcyBhcmUgZHluYW1pY2FsbHkgbG9hZGVkIAorCQkJCQkgIGJhc2VkIG9uIHRoZSBudW1iZXIgb2YgU2FuZ29tYSBjYXJkcyBmb3VuZC4KKworCQkJCQkgIE5vdGU6IFRoZSBrZXJuZWwgY29uZmlndXJhaXRvbiBvcHRpb24gCisJCQkJCQlDT05GSUdfV0FOUElQRV9DQVJEUyBoYXMgYmVlbiB0YWtlbiBvdXQuCisJCQkJCQorCQkJCW8gRml4ZWQgdGhlIEZyYW1lIFJlbGF5IGFuZCBDaGRsYyBuZXR3b3JrIGludGVyZmFjZXMgc28gdGhleSBhcmUKKwkJCQkgIGNvbXBhdGlibGUgd2l0aCBsaWJwY2FwIGxpYnJhcmllcy4gIE1lYW5pbmcsIHRjcGR1bXAsIHNub3J0LAorCQkJCSAgZXRoZXJlYWwsIGFuZCBhbGwgb3RoZXIgcGFja2V0IHNuaWZmZXJzIGFuZCBkZWJ1Z2dlcnMgd29yayBvbgorCQkJCSAgYWxsIFdBTlBJUEUgbmV0b3dyayBpbnRlcmZhY2VzLgorCQkJCQktIFNldCB0aGUgbmV0d29yayBpbnRlcmZhY2UgZW5jb2RpbmcgdHlwZSB0byBBUlBIUkRfUFBQLgorCQkJCQkgIFRoaXMgdGVsbCB0aGUgc25pZmZlcnMgdGhhdCBkYXRhIG9idGFpbmVkIGZyb20gdGhlCisJCQkJCSAgbmV0d29yayBpbnRlcmZhY2UgaXMgaW4gcHVyZSBJUCBmb3JtYXQuCisJCQkJICBGaXggZm9yIDIuMi5YIGtlcm5lbHMgb25seS4KKwkJCQkKKwkJCQlvIFRydWUgaW50ZXJmYWNlIGVuY29kaW5nIG9wdGlvbiBmb3IgRnJhbWUgUmVsYXkgYW5kIENIRExDCisJCQkJCS0gVGhlIGFib3ZlIGZpeCBzZXRzIHRoZSBuZXR3b3JrIGludGVyZmFjZSBlbmNvZGluZworCQkJCQkgIHR5cGUgdG8gQVJQSFJEX1BQUCwgaG93ZXZlciBzb21lIGN1c3RvbWVycyB1c2UKKwkJCQkJICB0aGUgZW5jb2RpbmcgaW50ZXJmYWNlIHR5cGUgdG8gZGV0ZXJtaW5lIHRoZQorCQkJCQkgIHByb3RvY29sIHJ1bm5pbmcuICBUaGVyZWZvcmUsIHRoZSBUVVJFIEVOQ09ESU5HCisJCQkJCSAgb3B0aW9uIHdpbGwgc2V0IHRoZSBpbnRlcmZhY2UgdHlwZSBiYWNrIHRvIHRoZQorCQkJCQkgIG9yaWdpbmFsIHZhbHVlLiAgCisKKwkJCQkJICBOT1RFOiBJZiB0aGlzIG9wdGlvbiBpcyB1c2VkIHdpdGggRnJhbWUgUmVsYXkgYW5kIENIRExDCisJCQkJCQlsaWJwY2FwIGxpYnJhcnkgc3VwcG9ydCB3aWxsIGJlIGJyb2tlbi4gIAorCQkJCQkJaS5lLiB0Y3BkdW1wIHdpbGwgbm90IHdvcmsuCisJCQkJCUZpeCBmb3IgMi4yLnggS2VybmVscyBvbmx5LgorCQkJCQkJCisJCQkJbyBFdGhlcm5ldCBCcmlkZ2luZCBvdmVyIEZyYW1lIFJlbGF5CisJCQkJCS0gVGhlIEZyYW1lIFJlbGF5IGJyaWRnaW5nIGhhcyBiZWVuIGRldmVsb3BlZCBieSAKKwkJCQkJICBLcmlzdGlhbiBIb2ZmbWFubiBhbmQgTWFyayBXZWxscy4gIAorCQkJCQktIFRoZSBMaW51eCBrZXJuZWwgYnJpZGdlIGlzIHVzZWQgdG8gc2VuZCBldGhlcm5ldCAKKwkJCQkJICBkYXRhIG92ZXIgdGhlIGZyYW1lIHJlbGF5IGxpbmtzLgorCQkJCQlGb3IgMi4yLlggS2VybmVscyBvbmx5LgorCisJCQkJbyBBZGRlZCBleHRlbnNpdmUgMi4wLlggc3VwcG9ydC4gTW9zdCBuZXcgZmVhdHVyZXMgb2YKKwkJCQkgIDIuMS41IGZvciBwcm90b2NvbHMgRnJhbWUgUmVsYXksIFBQUCBhbmQgQ0hETEMgYXJlCisJCQkJICBzdXBwb3J0ZWQgdW5kZXIgMi4wLlgga2VybmVscy4gCisKK2JldGExLTIuMi4wIAlEZWMgMzAgMjAwMAorCQkJCW8gVXBkYXRlZCBkcml2ZXJzIGZvciAyLjQuWCBrZXJuZWxzLgorCQkJCW8gVXBkYXRlZCBkcml2ZXJzIGZvciBTTVAgc3VwcG9ydC4KKwkJCQlvIFgyNUFQSSBpcyBub3cgYWJsZSB0byBzaGFyZSBQQ0kgaW50ZXJydXB0cy4KKwkJCQlvIFRvb2sgb3V0IGEgZ2VuZXJhbCBwb2xsaW5nIHJvdXRpbmUgdGhhdCB3YXMgdXNlZAorCQkJCSAgb25seSBieSBYMjVBUEkuIAorCQkJCW8gQWRkZWQgYXBwcm9wcmlhdGUgbG9ja3MgdG8gdGhlIGR5bmFtaWMgcmVjb25maWd1cmF0aW9uCisJCQkJICBjb2RlLgorCQkJCW8gRml4ZWQgYSBidWcgaW4gdGhlIGtleWJvYXJkIGRlYnVnIG1vbml0b3IuCisKK2JldGEyLTIuMi4wCUphbiA4IDIwMDEKKwkJCQlvIFBhdGNoZXMgZm9yIDIuNC4wIGtlcm5lbAorCQkJCW8gUGF0Y2hlcyBmb3IgMi4yLjE4IGtlcm5lbAorCQkJCW8gTWlub3IgdXBkYXRlcyB0byBQUFAgYW5kIENITERDIGRyaXZlcnMuCisJCQkJICBOb3RlOiBObyBmdW5jdGluYWwgZGlmZmVyZW5jZS4gCisKK2JldGEzLTIuMi45CUphbiAxMCAyMDAxCisJCQkJbyBJIG1pc3NlZCB0aGUgMi4yLjE4IGtlcm5lbCBwYXRjaGVzIGluIGJldGEyLTIuMi4wCisJCQkJICByZWxlYXNlLiAgVGhleSBhcmUgaW5jbHVkZWQgaW4gdGhpcyByZWxlYXNlLgorCitTdGFibGUgUmVsZWFzZQorMi4yLjAJCUZlYiAwMSAyMDAxCisJCQkJbyBCdWcgZml4IGluIHdhbmNmZyBHVUkgY29uZmlndXJhdG9yLgorCQkJCQlUaGUgZWRpdCBmdW5jdGlvbiBkaWRuJ3Qgd29yayBwcm9wZXJseS4KKworCitiYXRhMS0yLjIuMQlGZWIgMDkgMjAwMQorCQkJbyBXQU5QSVBFIFRUWSBEcml2ZXIgZW11bGF0aW9uLiAKKwkJCSAgVHdvIG1vZGVzIG9mIG9wZXJhdGlvbiBTeW5jIGFuZCBBc3luYy4KKwkJCQlTeW5jOiBVc2luZyB0aGUgUFBQRCBkYWVtb24sIGtlcm5lbCBTeW5jUFBQIGxheWVyCisJCQkJICAgICAgYW5kIHRoZSBXYW5waXBlIHN5bmMgVFRZIGRyaXZlcjogYSBQUFAgcHJvdG9jb2wgCisJCQkJICAgICAgY29ubmVjdGlvbiBjYW4gYmUgZXN0YWJsaXNoZWQgdmlhIFNhbmdvbWEgYWRhcHRlciwgb3ZlcgorCQkJCSAgICAgIGEgVDEgbGVhc2VkIGxpbmUuCisJCQkKKwkJCQkgICAgICBUaGUgMi40LjAga2VybmVsIFBQUCBsYXllciBzdXBwb3J0cyBNVUxUSUxJTksKKwkJCQkgICAgICBwcm90b2NvbCwgdGhhdCBjYW4gYmUgdXNlZCB0byBidW5kbGUgYW55IG51bWJlciBvZiBTYW5nb21hCisJCQkJICAgICAgYWRhcHRlcnMgKFQxIGxpbmVzKSBpbnRvIG9uZSwgdW5kZXIgYSBzaW5nbGUgSVAgYWRkcmVzcy4KKwkJCQkgICAgICBUaHVzLCBlZmZpY2llbnRseSBvYnRhaW5pbmcgbXVsdGlwbGUgVDEgdGhyb3VnaHB1dC4gCisKKwkJCQkgICAgICBOT1RFOiBUaGUgcmVtb3RlIHNpZGUgbXVzdCBhbHNvIGltcGxlbWVudCBNVUxUSUxJTksgUFBQCisJCQkJCSAgICBwcm90b2NvbC4KKworCQkJCUFzeW5jOlVzaW5nIHRoZSBQUFBEIGRhZW1vbiwga2VybmVsIEFzeW5jUFBQIGxheWVyCisJCQkJICAgICAgYW5kIHRoZSBXQU5QSVBFIGFzeW5jIFRUWSBkcml2ZXI6IGEgUFBQIHByb3RvY29sCisJCQkJICAgICAgY29ubmVjdGlvbiBjYW4gYmUgZXN0YWJsaXNoZWQgdmlhIFNhbmdvbWEgYWRhcHRlciBhbmQKKwkJCQkgICAgICBhIG1vZGVtLCBvdmVyIGEgdGVsZXBob25lIGxpbmUuCisKKwkJCQkgICAgICBUaHVzLCB0aGUgV0FOUElQRSBhc3luYyBUVFkgZHJpdmVyIHNpbXVsYXRlcyBhIHNlcmlhbAorCQkJCSAgICAgIFRUWSBkcml2ZXIgdGhhdCB3b3VsZCBub3JtYWxseSBiZSB1c2VkIHRvIGludGVyZmFjZSB0aGUgCisJCQkJICAgICAgTU9ERU0gdG8gdGhlIGxpbnV4IGtlcm5lbC4KKwkJCQkKKwkJCW8gV0FOUElQRSBQUFAgQmFja3VwIFV0aWxpdHkKKwkJCQlUaGlzIHV0aWxpdHkgd2lsbCBtb25pdG9yIHRoZSBzdGF0ZSBvZiB0aGUgUFBQIFQxIGxpbmUuCisJCQkJSW4gY2FzZSBvZiBmYWlsdXJlLCBhIGRpYWwgdXAgY29ubmVjdGlvbiB3aWxsIGJlIGVzdGFibGlzaGVkCisJCQkJdmlhIHBwcGQgZGFlbW9uLCBldGhlciB2aWEgYSBzZXJpYWwgdHR5IGRyaXZlciAoc2VyaWFsIHBvcnQpLCAKKwkJCQlvciBhIFdBTlBJUEUgYXN5bmMgVFRZIGRyaXZlciAoaW4gY2FzZSBzZXJpYWwgcG9ydCBpcyB1bmF2YWlsYWJsZSkuCisJCQkJCisJCQkJRnVydGhlcm1vcmUsIHdoaWxlIGluIGRpYWwgdXAgbW9kZSwgdGhlIHByaW1hcnkgUFBQIFQxIGxpbmsKKwkJCQl3aWxsIGJlIG1vbml0b3JlZCBmb3Igc2lnbnMgb2YgbGlmZS4gIAorCisJCQkJSWYgdGhlIFBQUCBUMSBsaW5rIGNvbWVzIGJhY2sgdG8gbGlmZSwgdGhlIGRpYWwgdXAgY29ubmVjdGlvbgorCQkJCXdpbGwgYmUgc2h1dGRvd24gYW5kIFQxIGxpbmUgcmUtZXN0YWJsaXNoZWQuCisJCQkKKworCQkJbyBOZXcgU2V0dXAgaW5zdGFsbGF0aW9uIHNjcmlwdC4KKwkJCQlPcHRpb24gdG8gVVBHUkFERSBkZXZpY2UgZHJpdmVycyBpZiB0aGUga2VybmVsIHNvdXJjZSBoYXMKKwkJCQlhbHJlYWR5IGJlZW4gcGF0Y2hlZCB3aXRoIFdBTlBJUEUuCisKKwkJCQlPcHRpb24gdG8gQ09NUElMRSBXQU5QSVBFIG1vZHVsZXMgYWdhaW5zdCB0aGUgY3VycmVudGx5IAorCQkJCXJ1bm5pbmcga2VybmVsLCB0aHVzIG5vIG5lZWQgZm9yIG1hbnVhbCBrZXJuZWwgYW5kIG1vZHVsZQorCQkJCXJlLWNvbXBpbGF0aW4uCisJCQkKKwkJCW8gVXBkYXRlcyBhbmQgQnVnIEZpeGVzIHRvIHdhbmNmZyB1dGlsaXR5LgorCitiYXRhMi0yLjIuMQlGZWIgMjAgMjAwMQorCisJCQlvIEJ1ZyBmaXhlcyB0byB0aGUgQ0hETEMgZGV2aWNlIGRyaXZlcnMuCisJCQkJVGhlIGRyaXZlciBoYWQgY29tcGlsYXRpb24gcHJvYmxlbXMgdW5kZXIga2VybmVscworCQkJCTIuMi4xNCBvciBsb3dlci4KKworCQkJbyBCdWcgZml4ZXMgdG8gdGhlIFNldHVwIGluc3RhbGxhdGlvbiBzY3JpcHQuCisJCQkJVGhlIGRldmljZSBkcml2ZXJzIGNvbXBpbGF0aW9uIG9wdGlvbnMgZGlkbid0IHdvcmsKKwkJCQlwcm9wZXJseS4KKworCQkJbyBVcGRhdGUgdG8gdGhlIHdwYmFja3VwZCBkYWVtb24uICAKKwkJCQlPcHRpbWl6ZWQgdGhlIGNyb3NzLW92ZXIgdGltZXMsIGJldHdlZW4gdGhlIHByaW1hcnkKKwkJCQlsaW5rIGFuZCB0aGUgYmFja3VwIGRpYWx1cC4KKworYmV0YTMtMi4yLjEJTWFyIDAyIDIwMDEKKwkJCW8gUGF0Y2hlcyBmb3IgMi40LjIga2VybmVsLgorCisJCQlvIEJ1ZyBmaXhlcyB0byB1dGlsLyBtYWtlIGZpbGVzLgorCQkJbyBCdWcgZml4ZXMgdG8gdGhlIFNldHVwIGluc3RhbGxhdGlvbiBzY3JpcHQuCisKKwkJCW8gVG9vayBvdXQgdGhlIGJhY2t1cGQgc3VwcG9ydCBhbmQgbWFkZSBpdCBpbnRvCisJCQkgIGFzIHNlcGFyYXRlIHBhY2thZ2UuCisJCQkgIAorYmV0YTQtMi4yLjEgICAgIE1hciAxMiAyMDAxCisKKwkJbyBGaXggdG8gdGhlIEZyYW1lIFJlbGF5IERldmljZSBkcml2ZXIuCisJCQlJUFNBQyBzZW5kcyBhIHBhY2tldCBvZiB6ZXJvIGxlbmd0aAorCQkJaGVhZGVyIHRvIHRoZSBmcmFtZSByZWxheSBkcml2ZXIuICBUaGUKKwkJCWRyaXZlciB0cmllcyB0byBwdXNoIGl0cyBvd24gMiBieXRlIGhlYWRlcgorCQkJaW50byB0aGUgcGFja2V0LCB3aGljaCBjYXVzZXMgdGhlIGRyaXZlciB0bworCQkJY3Jhc2guCisKKwkJbyBGaXggdGhlIFdBTlBJUEUgcmUtY29uZmlndXJhdGlvbiBjb2RlLgorCQkJQnVnIHdhcyBmb3VuZCBieSB0cnlpbmcgdG8gcnVuICB0aGUgY2ZnZnQxIHdoaWxlIHRoZQorCQkJaW50ZXJmYWNlIHdhcyBhbHJlYWR5IHJ1bm5pbmcuICAKKworCQlvIFVwZGF0ZXMgdG8gY2ZnZnQxLgorCQkJV3JpdGVzIGEgd2FucGlwZSMuY2ZnZnQxIGNvbmZpZ3VyYXRpb24gZmlsZQorCQkJb25jZSB0aGUgQ1NVL0RTVSBpcyBjb25maWd1cmVkLiBUaGlzIGZpbGUgY2FuCisJCQlob2xkcyB0aGUgY3VycmVudCBDU1UvRFNVIGNvbmZpZ3VyYXRpb24uCisKKworCis+Pj4+Pj4gRU5EIE9GIFJFQURNRSA8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDwKKworCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvd2FucGlwZS50eHQgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvd2FucGlwZS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWVhMjBjZAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy93YW5waXBlLnR4dApAQCAtMCwwICsxLDYyMiBAQAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitMaW51eCBXQU4gUm91dGVyIFV0aWxpdGllcyBQYWNrYWdlCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK1ZlcnNpb24gMi4yLjEgCitNYXIgMjgsIDIwMDEKK0F1dGhvcjogTmVuYWQgQ29yYmljIDxuY29yYmljQHNhbmdvbWEuY29tPgorQ29weXJpZ2h0IChjKSAxOTk1LTIwMDEgU2FuZ29tYSBUZWNobm9sb2dpZXMgSW5jLgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0lOVFJPRFVDVElPTgorCitXaWRlIEFyZWEgTmV0d29ya3MgKFdBTnMpIGFyZSB1c2VkIHRvIGludGVyY29ubmVjdCBMb2NhbCBBcmVhIE5ldHdvcmtzIChMQU5zKQorYW5kL29yIHN0YW5kLWFsb25lIGhvc3RzIG92ZXIgdmFzdCBkaXN0YW5jZXMgd2l0aCBkYXRhIHRyYW5zZmVyIHJhdGVzCitzaWduaWZpY2FudGx5IGhpZ2hlciB0aGFuIHRob3NlIGFjaGlldmFibGUgd2l0aCBjb21tb25seSB1c2VkIGRpYWwtdXAKK2Nvbm5lY3Rpb25zLgorCitVc3VhbGx5IGFuIGV4dGVybmFsIGRldmljZSBjYWxsZWQgYFdBTiByb3V0ZXInIHNpdHRpbmcgb24geW91ciBsb2NhbCBuZXR3b3JrCitvciBjb25uZWN0ZWQgdG8geW91ciBtYWNoaW5lJ3Mgc2VyaWFsIHBvcnQgcHJvdmlkZXMgcGh5c2ljYWwgY29ubmVjdGlvbiB0bworV0FOLiAgQWx0aG91Z2ggcm91dGVyJ3Mgam9iIG1heSBiZSBhcyBzaW1wbGUgYXMgdGFraW5nIHlvdXIgbG9jYWwgbmV0d29yawordHJhZmZpYywgY29udmVydGluZyBpdCB0byBXQU4gZm9ybWF0IGFuZCBwaXBpbmcgaXQgdGhyb3VnaCB0aGUgV0FOIGxpbmssIHRoZXNlCitkZXZpY2VzIGFyZSBub3RvcmlvdXNseSBleHBlbnNpdmUsIHdpdGggcHJpY2VzIGFzIG11Y2ggYXMgMiAtIDUgdGltZXMgaGlnaGVyCit0aGVuIHRoZSBwcmljZSBvZiBhIHR5cGljYWwgUEMgYm94LgorCitBbHRlcm5hdGl2ZWx5LCBjb25zaWRlcmluZyByb2J1c3RuZXNzIGFuZCBtdWx0aXRhc2tpbmcgY2FwYWJpbGl0aWVzIG9mIExpbnV4LAorYW4gaW50ZXJuYWwgcm91dGVyIGNhbiBiZSBidWlsdCAobW9zdCByb3V0ZXJzIHVzZSBzb21lIHNvcnQgb2Ygc3RyaXBwZWQgZG93bgorVW5peC1saWtlIG9wZXJhdGluZyBzeXN0ZW0gYW55d2F5KS4gV2l0aCBhIG51bWJlciBvZiByZWxhdGl2ZWx5IGluZXhwZW5zaXZlIFdBTgoraW50ZXJmYWNlIGNhcmRzIGF2YWlsYWJsZSBvbiB0aGUgbWFya2V0LCBhIHBlcmZlY3RseSB1c2FibGUgcm91dGVyIGNhbiBiZQorYnVpbHQgZm9yIGxlc3MgdGhhbiBoYWxmIGEgcHJpY2Ugb2YgYW4gZXh0ZXJuYWwgcm91dGVyLiAgWWV0IGEgTGludXggYm94CithY3RpbmcgYXMgYSByb3V0ZXIgY2FuIHN0aWxsIGJlIHVzZWQgZm9yIG90aGVyIHB1cnBvc2VzLCBzdWNoIGFzIGZpcmUtd2FsbGluZywKK3J1bm5pbmcgRlRQLCBXV1cgb3IgRE5TIHNlcnZlciwgZXRjLgorCitUaGlzIGtlcm5lbCBtb2R1bGUgaW50cm9kdWNlcyB0aGUgbm90aW9uIG9mIGEgV0FOIExpbmsgRHJpdmVyIChXTEQpIHRvIExpbnV4CitvcGVyYXRpbmcgc3lzdGVtIGFuZCBwcm92aWRlcyBnZW5lcmljIGhhcmR3YXJlLWluZGVwZW5kZW50IHNlcnZpY2VzIGZvciBzdWNoCitkcml2ZXJzLiAgV2h5IGNhbiBleGlzdGluZyBMaW51eCBuZXR3b3JrIGRldmljZSBpbnRlcmZhY2Ugbm90IGJlIHVzZWQgZm9yCit0aGlzIHB1cnBvc2U/ICBXZWxsLCBpdCBjYW4uICBIb3dldmVyLCB0aGVyZSBhcmUgYSBmZXcga2V5IGRpZmZlcmVuY2VzIGJldHdlZW4KK2EgdHlwaWNhbCBuZXR3b3JrIGludGVyZmFjZSAoZS5nLiBFdGhlcm5ldCkgYW5kIGEgV0FOIGxpbmsuCisKK01hbnkgV0FOIHByb3RvY29scywgc3VjaCBhcyBYLjI1IGFuZCBmcmFtZSByZWxheSwgYWxsb3cgZm9yIG11bHRpcGxlIGxvZ2ljYWwKK2Nvbm5lY3Rpb25zIChrbm93biBhcyBgdmlydHVhbCBjaXJjdWl0cycgaW4gWC4yNSB0ZXJtaW5vbG9neSkgb3ZlciBhIHNpbmdsZQorcGh5c2ljYWwgbGluay4gIEVhY2ggc3VjaCB2aXJ0dWFsIGNpcmN1aXQgbWF5IChhbmQgYWxtb3N0IGFsd2F5cyBkb2VzKSBsZWFkCit0byBhIGRpZmZlcmVudCBnZW9ncmFwaGljYWwgbG9jYXRpb24gYW5kLCB0aGVyZWZvcmUsIGRpZmZlcmVudCBuZXR3b3JrLiAgQXMgYQorcmVzdWx0LCBpdCBpcyB0aGUgdmlydHVhbCBjaXJjdWl0LCBub3QgdGhlIHBoeXNpY2FsIGxpbmssIHRoYXQgcmVwcmVzZW50cyBhCityb3V0ZSBhbmQsIHRoZXJlZm9yZSwgYSBuZXR3b3JrIGludGVyZmFjZSBpbiBMaW51eCB0ZXJtcy4KKworVG8gZnVydGhlciBjb21wbGljYXRlIHRoaW5ncywgdmlydHVhbCBjaXJjdWl0cyBhcmUgdXN1YWxseSB2b2xhdGlsZSBpbiBuYXR1cmUKKyhleGNsdWRpbmcgc28gY2FsbGVkIGBwZXJtYW5lbnQnIHZpcnR1YWwgY2lyY3VpdHMgb3IgUFZDcykuICBXaXRoIGFsbW9zdCBubwordGltZSByZXF1aXJlZCB0byBzZXQgdXAgYW5kIHRlYXIgZG93biBhIHZpcnR1YWwgY2lyY3VpdCwgaXQgaXMgaGlnaGx5IGRlc2lyYWJsZQordG8gaW1wbGVtZW50IG9uLWRlbWFuZCBjb25uZWN0aW9ucyBpbiBvcmRlciB0byBtaW5pbWl6ZSBuZXR3b3JrIGNoYXJnZXMuICBTbwordW5saWtlIGEgdHlwaWNhbCBuZXR3b3JrIGRyaXZlciwgdGhlIFdBTiBkcml2ZXIgbXVzdCBiZSBhYmxlIHRvIGhhbmRsZSBtdWx0aXBsZQorbmV0d29yayBpbnRlcmZhY2VzIGFuZCBjb3BlIGFzIG11bHRpcGxlIHZpcnR1YWwgY2lyY3VpdHMgY29tZSBpbnRvIGV4aXN0ZW5jZQorYW5kIGdvIGF3YXkgZHluYW1pY2FsbHkuCisgCitMYXN0LCBidXQgbm90IGxlYXN0LCBXQU4gY29uZmlndXJhdGlvbiBpcyBtdWNoIG1vcmUgY29tcGxleCB0aGFuIHRoYXQgb2Ygc2F5CitFdGhlcm5ldCBhbmQgbWF5IHdlbGwgYW1vdW50IHRvIHNldmVyYWwgZG96ZW5zIG9mIHBhcmFtZXRlcnMuICBTb21lIG9mIHRoZW0KK2FyZSAibGluay13aWRlIiAgd2hpbGUgb3RoZXJzIGFyZSB2aXJ0dWFsIGNpcmN1aXQtc3BlY2lmaWMuICBUaGUgc2FtZSBob2xkcwordHJ1ZSBmb3IgV0FOIHN0YXRpc3RpY3Mgd2hpY2ggaXMgYnkgZmFyIG1vcmUgZXh0ZW5zaXZlIGFuZCBleHRyZW1lbHkgdXNlZnVsCit3aGVuIHRyb3VibGVzaG9vdGluZyBXQU4gY29ubmVjdGlvbnMuICBFeHRlbmRpbmcgdGhlIGlmY29uZmlnIHV0aWxpdHkgdG8gc3VpdAordGhlc2UgbmVlZHMgbWF5IGJlIHBvc3NpYmxlLCBidXQgZG9lcyBub3Qgc2VlbSBxdWl0ZSByZWFzb25hYmxlLiAgVGhlcmVmb3JlLCBhCitXQU4gY29uZmlndXJhdGlvbiB1dGlsaXR5IGFuZCBjb3JyZXNwb25kaW5nIGFwcGxpY2F0aW9uIHByb2dyYW1tZXIncyBpbnRlcmZhY2UKK2lzIG5lZWRlZCBmb3IgdGhpcyBwdXJwb3NlLgorCitNb3N0IG9mIHRoZXNlIHByb2JsZW1zIGFyZSB0YWtlbiBjYXJlIG9mIGJ5IHRoaXMgbW9kdWxlLiAgSXRzIGdvYWwgaXMgdG8KK3Byb3ZpZGUgYSB1c2VyIHdpdGggbW9yZS1vci1sZXNzIHN0YW5kYXJkIGxvb2sgYW5kIGZlZWwgZm9yIGFsbCBXQU4gZGV2aWNlcyBhbmQKK2Fzc2lzdCBhIFdBTiBkZXZpY2UgZHJpdmVyIHdyaXRlciBieSBwcm92aWRpbmcgY29tbW9uIHNlcnZpY2VzLCBzdWNoIGFzOgorCisgbyBVc2VyLWxldmVsIGludGVyZmFjZSB2aWEgL3Byb2MgZmlsZSBzeXN0ZW0KKyBvIENlbnRyYWxpemVkIGNvbmZpZ3VyYXRpb24KKyBvIERldmljZSBtYW5hZ2VtZW50IChzZXR1cCwgc2h1dGRvd24sIGV0Yy4pCisgbyBOZXR3b3JrIGludGVyZmFjZSBtYW5hZ2VtZW50IChkeW5hbWljIGNyZWF0aW9uL2Rlc3RydWN0aW9uKQorIG8gUHJvdG9jb2wgZW5jYXBzdWxhdGlvbi9kZWNhcHN1bGF0aW9uCisKK1RvIGJhIGFibGUgdG8gdXNlIHRoZSBMaW51eCBXQU4gUm91dGVyIHlvdSB3aWxsIGFsc28gbmVlZCBhIFdBTiBUb29scyBwYWNrYWdlCithdmFpbGFibGUgZnJvbQorCisJZnRwLnNhbmdvbWEuY29tL3B1Yi9saW51eC9jdXJyZW50X3dhbnBpcGUvd2FucGlwZS1YLlkuWi50Z3oKKword2hlcmUgdlguWS5aIHJlcHJlc2VudCB0aGUgd2FucGlwZSB2ZXJzaW9uIG51bWJlci4KKworRm9yIHRlY2huaWNhbCBxdWVzdGlvbnMgYW5kL29yIGNvbW1lbnRzIHBsZWFzZSBlLW1haWwgdG8gbmNvcmJpY0BzYW5nb21hLmNvbS4KK0ZvciBnZW5lcmFsIGlucXVpcmllcyBwbGVhc2UgY29udGFjdCBTYW5nb21hIFRlY2hub2xvZ2llcyBJbmMuIGJ5CisKKwlIb3RsaW5lOgkxLTgwMC0zODgtMjQ3NQkoVVNBIGFuZCBDYW5hZGEsIHRvbGwgZnJlZSkKKwlQaG9uZToJCSg5MDUpIDQ3NC0xOTkwICBleHQ6IDEwNgorCUZheDoJCSg5MDUpIDQ3NC05MjIzCisJRS1tYWlsOgkJZG1Ac2FuZ29tYS5jb20JKERhdmlkIE1hbmRlbHN0YW0pCisJV1dXOgkJaHR0cDovL3d3dy5zYW5nb21hLmNvbQorCisKK0lOU1RBTExBVElPTgorCitQbGVhc2UgcmVhZCB0aGUgV2FucGlwZUZvckxpbnV4LnBkZiBtYW51YWwgb24gaG93IHRvIAoraW5zdGFsbCB0aGUgV0FOUElQRSB0b29scyBhbmQgZHJpdmVycyBwcm9wZXJseS4gCisKKworQWZ0ZXIgaW5zdGFsbGluZyB3YW5waXBlIHBhY2thZ2U6IC91c3IvbG9jYWwvd2Fucm91dGVyL2RvYy4gCitPbiB0aGUgZnRwLnNhbmdvbWEuY29tIDogL2xpbnV4L2N1cnJlbnRfd2FucGlwZS9kb2MKKworCitDT1BZUklHSFQgQU5EIExJQ0VOU0lORyBJTkZPUk1BVElPTgorCitUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlcgordGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKK0ZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKK1RoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKK0ZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCitZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoCit0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MKK0F2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorCisKKworQUNLTk9XTEVER0VNRU5UUworCitUaGlzIHByb2R1Y3QgaXMgYmFzZWQgb24gdGhlIFdBTlBJUEUodG0pIE11bHRpcHJvdG9jb2wgV0FOIFJvdXRlciBkZXZlbG9wZWQKK2J5IFNhbmdvbWEgVGVjaG5vbG9naWVzIEluYy4gZm9yIExpbnV4IDIuMC54IGFuZCAyLjIueC4gIFN1Y2Nlc3Mgb2YgdGhlIFdBTlBJUEUKK3RvZ2V0aGVyIHdpdGggdGhlIG5leHQgbWFqb3IgcmVsZWFzZSBvZiBMaW51eCBrZXJuZWwgaW4gc3VtbWVyIDE5OTYgY29tbWFuZGVkCithZGVxdWF0ZSBjaGFuZ2VzIHRvIHRoZSBXQU5QSVBFIGNvZGUgdG8gdGFrZSBmdWxsIGFkdmFudGFnZSBvZiBuZXcgTGludXgKK2ZlYXR1cmVzLgorCitJbnN0ZWFkIG9mIGNvbnRpbnVpbmcgZGV2ZWxvcGluZyBwcm9wcmlldGFyeSBpbnRlcmZhY2UgdGllZCB0byBTYW5nb21hIFdBTgorY2FyZHMsIHdlIGRlY2lkZWQgdG8gc2VwYXJhdGUgYWxsIGhhcmR3YXJlLWluZGVwZW5kZW50IGNvZGUgaW50byBhIHNlcGFyYXRlCittb2R1bGUgYW5kIGRlZmluZWQgdHdvIGxldmVscyBvZiBpbnRlcmZhY2VzIC0gb25lIGZvciB1c2VyLWxldmVsIGFwcGxpY2F0aW9ucworYW5kIGFub3RoZXIgZm9yIGtlcm5lbC1sZXZlbCBXQU4gZHJpdmVycy4gIFdBTlBJUEUgaXMgbm93IGltcGxlbWVudGVkIGFzIGEKK1dBTiBkcml2ZXIgY29tcGxpYW50IHdpdGggdGhlIFdBTiBMaW5rIERyaXZlciBpbnRlcmZhY2UuICBBbHNvIGEgZ2VuZXJhbAorcHVycG9zZSBXQU4gY29uZmlndXJhdGlvbiB1dGlsaXR5IGFuZCBhIHNldCBvZiBzaGVsbCBzY3JpcHRzIHdhcyBkZXZlbG9wZWQgdG8gCitzdXBwb3J0IFdBTiByb3V0ZXIgYXQgdGhlIHVzZXIgbGV2ZWwuCisKK01hbnkgdXNlZnVsIGlkZWFzIGNvbmNlcm5pbmcgaGFyZHdhcmUtaW5kZXBlbmRlbnQgaW50ZXJmYWNlIGltcGxlbWVudGF0aW9uCit3ZXJlIGdpdmVuIGJ5IE1pa2UgTWNMYWdhbiA8bWlrZS5tY2xhZ2FuQGxpbnV4Lm9yZz4gYW5kIGhpcyBpbXBsZW1lbnRhdGlvbgorb2YgdGhlIEZyYW1lIFJlbGF5IHJvdXRlciBhbmQgZHJpdmVycyBmb3IgU2FuZ29tYSBjYXJkcyAoZGxjaS9zZGxhKS4KKworV2l0aCB0aGUgbmV3IGltcGxlbWVudGF0aW9uIG9mIHRoZSBBUElzIGJlaW5nIGluY29ycG9yYXRlZCBpbnRvIHRoZSBXQU5QSVBFLAorYSBzcGVjaWFsIHRoYW5rIGdvZXMgdG8gQWxhbiBDb3ggaW4gcHJvdmlkaW5nIGluc2lnaHQgaW50byBCU0Qgc29ja2V0cy4KKworU3BlY2lhbCB0aGFua3MgdG8gYWxsIHRoZSBXQU5QSVBFIHVzZXJzIHdobyBwZXJmb3JtZWQgZmllbGQtdGVzdGluZywgcmVwb3J0ZWQKK2J1Z3MgYW5kIG1hZGUgdmFsdWFibGUgY29tbWVudHMgYW5kIHN1Z2dlc3Rpb25zIHRoYXQgaGVscCB1cyB0byBpbXByb3ZlIHRoaXMKK3Byb2R1Y3QuCisKKworCitORVcgSU4gVEhJUyBSRUxFQVNFCisKKwlvIFVwZGF0ZWQgdGhlIFdBTkNGRyB1dGlsaXR5CisJCUNhbGxzIHRoZSBwcHBjb25maWcgdG8gY29uZmlndXJlIHRoZSBQUFBECisJCWZvciBhc3luYyBjb25uZWN0aW9ucy4KKworCW8gQWRkZWQgdGhlIFBQUENPTkZJRyB1dGlsaXR5CisJCVVzZWQgdG8gY29uZmlndXJlIHRoZSBQUFBEIGRhbWVvbiBmb3IgdGhlCisJCVdBTlBJUEUgQXN5bmMgUFBQIGFuZCBzdGFuZGFyZCBzZXJpYWwgcG9ydC4KKwkJVGhlIHdhbmNmZyBjYWxscyB0aGUgcHBwY29uZmlnIHRvIGNvbmZpZ3VyZQorCQl0aGUgcHBwZC4KKworCW8gRml4ZWQgdGhlIFBDSSBhdXRvZGV0ZWN0IGZlYXR1cmUuICAKKwkJVGhlIFNMT1QgMCB3YXMgdXNlZCBhcyBhbiBhdXRvZGV0ZWN0IG9wdGlvbgorCQlob3dldmVyLCBzb21lIGhpZ2ggZW5kIFBDJ3Mgc2xvdCBudW1iZXJzIHN0YXJ0CisJCWZyb20gMC4gCisKKwlvIFRoaXMgcmVsZWFzZSBoYXMgYmVlbiB0ZXN0ZWQgd2l0aCB0aGUgbmV3IGJhY2t1cGQKKwkgIGRhZW1vbiByZWxlYXNlLgorCQorCitQUk9EVUNUIENPTVBPTkVOVFMgQU5EIFJFTEFURUQgRklMRVMKKworL2V0YzogKG9yIHVzZXIgZGVmaW5lZCkKKwl3YW5waXBlMS5jb25mCWRlZmF1bHQgcm91dGVyIGNvbmZpZ3VyYXRpb24gZmlsZQorCisvbGliL21vZHVsZXMvWC5ZLlovbWlzYzoKKwl3YW5yb3V0ZXIubwlyb3V0ZXIga2VybmVsIGxvYWRhYmxlIG1vZHVsZQorCWFmX3dhbnBpcGUubwl3YW5waXBlIGFwaSBzb2NrZXQgbW9kdWxlCisKKy9saWIvbW9kdWxlcy9YLlkuWi9uZXQ6CisJc2RsYWRydi5vCVNhbmdvbWEgU0RMQSBzdXBwb3J0IG1vZHVsZQorCXdhbnBpcGUubwlTYW5nb21hIFdBTlBJUEUodG0pIGRyaXZlciBtb2R1bGUKKworL3Byb2MvbmV0L3dhbnJvdXRlcgorCUNvbmZpZwkJcmVhZHMgY3VycmVudCByb3V0ZXIgY29uZmlndXJhdGlvbgorCVN0YXR1cwkJcmVhZHMgY3VycmVudCByb3V0ZXIgc3RhdHVzCisJe25hbWV9CQlyZWFkcyBXQU4gZHJpdmVyIHN0YXRpc3RpY3MKKworL3Vzci9zYmluOgorCXdhbnJvdXRlcgl3YW5yb3V0ZXIgc3RhcnQtdXAgc2NyaXB0CisJd2FuY29uZmlnCXdhbnJvdXRlciBjb25maWd1cmF0aW9uIHV0aWxpdHkKKwlzZGxhZHVtcAlXQU5QSVBFIGFkYXB0ZXIgbWVtb3J5IGR1bXAgdXRpbGl0eQorICAgICAgICBmcGlwZW1vbiAgICAgICAgTW9uaXRvciBmb3IgRnJhbWUgUmVsYXkKKyAgICAgICAgY3BpcGVtb24gICAgICAgIE1vbml0b3IgZm9yIENpc2NvIEhETEMKKwlwcGlwZW1vbiAJTW9uaXRvciBmb3IgUFBQCisJeHBpcGVtb24gCU1vbml0b3IgZm9yIFgyNQorCXdwa2JkbW9uICAgICAgICBXQU5QSVBFIGtleWJvYXJkIGxlZCBtb25pdG9yL2RlYnVnZ2VyCisKKy91c3IvbG9jYWwvd2Fucm91dGVyOgorCVJFQURNRQkJdGhpcyBmaWxlCisJQ09QWUlORwkJR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKwlTZXR1cAkJaW5zdGFsbGF0aW9uIHNjcmlwdAorCUZpbGVsaXN0CWRpc3RyaWJ1dGlvbiBkZWZpbml0aW9uIGZpbGUKKwl3YW5yb3V0ZXIucmMJbWV0YS1jb25maWd1cmF0aW9uIGZpbGUgCisJCQkodXNlZCBieSB0aGUgU2V0dXAgYW5kIHdhbnJvdXRlciBzY3JpcHQpCisKKy91c3IvbG9jYWwvd2Fucm91dGVyL2RvYzoKKwl3YW5waXBlRm9yTGludXgucGRmIAlXQU4gUm91dGVyIFVzZXIncyBNYW51YWwKKworL3Vzci9sb2NhbC93YW5yb3V0ZXIvcGF0Y2hlczoKKwl3YW5yb3V0ZXItdjIyMTMuZ3ogIAlwYXRjaCBmb3IgTGludXgga2VybmVscyAyLjIuMTEgdXAgdG8gMi4yLjEzLgorCXdhbnJvdXRlci12MjIxNC5neglwYXRjaCBmb3IgTGludXgga2VybmVsIDIuMi4xNC4gCisJd2Fucm91dGVyLXYyMjE1Lmd6CXBhdGNoIGZvciBMaW51eCBrZXJuZWxzIDIuMi4xNSB0byAyLjIuMTcuCisJd2Fucm91dGVyLXYyMjE4Lmd6CXBhdGNoIGZvciBMaW51eCBrZXJuZWxzIDIuMi4xOCBhbmQgdXAuCisJd2Fucm91dGVyLXYyNDAuZ3oJcGF0Y2ggZm9yIExpbnV4IGtlcm5lbCAyLjQuMC4gIAorCXdhbnJvdXRlci12MjQyLmd6CXBhdGNoIGZvciBMaW51eCBrZXJuZWwgMi40LjIgYW5kIHVwLgorCXdhbnJvdXRlci12MjAzNC5neglwYXRjaCBmb3IgTGludXgga2VybmVsIDIuMC4zNAorCXdhbnJvdXRlci12MjAzNi5neiAJcGF0Y2ggZm9yIExpbnV4IGtlcm5lbCAyLjAuMzYgYW5kIHVwLiAKKworL3Vzci9sb2NhbC93YW5yb3V0ZXIvcGF0Y2hlcy9rZHJpdmVyczoKKwlTb3VyY2VzIG9mIHRoZSBsYXRlc3QgV0FOUElQRSBkZXZpY2UgZHJpdmVycy4KKwlUaGVzZSBhcmUgdXNlZCB0byBVUEdSQURFIHRoZSBsaW51eCBrZXJuZWwgdG8gdGhlIG5ld2VzdAorCXZlcnNpb24gaWYgdGhlIGtlcm5lbCBzb3VyY2UgaGFzIGFscmVhZHkgYmVlbiBwYXRoY2VkIHdpdGgKKwlXQU5QSVBFIGRyaXZlcnMuCisKKy91c3IvbG9jYWwvd2Fucm91dGVyL3NhbXBsZXM6CisJaW50ZXJmYWNlCXNhbXBsZSBpbnRlcmZhY2UgY29uZmlndXJhdGlvbiBmaWxlCisJd2FucGlwZTEuY3ByaSAJQ0hETEMgcHJpbWFyeSBwb3J0CisgICAgIAl3YW5waXBlMi5jc2VjIAlDSERMQyBzZWNvbmRhcnkgcG9ydAorICAgICAJd2FucGlwZTEuZnIgICAJRnJhbWUgUmVsYXkgcHJvdG9jb2wKKyAgICAgCXdhbnBpcGUxLnBwcCAgCVBQUCBwcm90b2NvbCApIAorCXdhbnBpcGUxLmFzeQlDSERMQyBBU1lOQyBwcm90b2NvbAorCXdhbnBpcGUxLngyNQlYMjUgcHJvdG9jb2wKKwl3YW5waXBlMS5zdHR5CVN5bmMgVFRZIGRyaXZlciAoVXNlZCBieSBLZXJuZWwgUFBQRCBkYWVtb24pCisJd2FucGlwZTEuYXR0eQlBc3luYyBUVFkgZHJpdmVyIChVc2VkIGJ5IEtlcm5lbCBQUFBEIGRhZW1vbikKKwl3YW5yb3V0ZXIucmMJc2FtcGxlIG1ldGEtY29uZmlndXJhdGlvbiBmaWxlCisKKy91c3IvbG9jYWwvd2Fucm91dGVyL3V0aWw6CisJKgkJd2FuLXRvb2xzIHV0aWxpdGllcyBzb3VyY2UgY29kZQorCisvdXNyL2xvY2FsL3dhbnJvdXRlci9hcGkveDI1OgorCSoJCXgyNSBhcGkgc2FtcGxlIHByb2dyYW1zLgorL3Vzci9sb2NhbC93YW5yb3V0ZXIvYXBpL2NoZGxjOgorCSoJCWNoZGxjIGFwaSBzYW1wbGUgcHJvZ3JhbXMuCisvdXNyL2xvY2FsL3dhbnJvdXRlci9hcGkvZnI6CisJKgkJZnIgYXBpIHNhbXBsZSBwcm9ncmFtcy4KKy91c3IvbG9jYWwvd2Fucm91dGVyL2NvbmZpZy93YW5jZmc6CisJd2FuY2ZnCQlXQU5QSVBFIEdVSSBjb25maWd1cmF0aW9uIHByb2dyYW0uCisgICAgICAgICAgICAgICAgICAgICAgICBDcmVhdGVzIHdhbnBpcGUjLmNvbmYgZmlsZXMuIAorL3Vzci9sb2NhbC93YW5yb3V0ZXIvY29uZmlnL2NmZ2Z0MToKKwljZmdmdDEJCUdVSSBDU1UvRFNVIGNvbmZpZ3VyYXRpb24gcHJvZ3JhbS4KKworL3Vzci9pbmNsdWRlL2xpbnV4OgorCXdhbnJvdXRlci5oCXJvdXRlciBBUEkgZGVmaW5pdGlvbnMKKwl3YW5waXBlLmgJV0FOUElQRSBBUEkgZGVmaW5pdGlvbnMKKwlzZGxhZHJ2LmgJU0RMQSBzdXBwb3J0IG1vZHVsZSBBUEkgZGVmaW5pdGlvbnMKKwlzZGxhc2ZtLmgJU0RMQSBmaXJtd2FyZSBtb2R1bGUgZGVmaW5pdGlvbnMKKwlpZl93YW5waXBlLmgJV0FOUElQRSBTb2NrZXQgZGVmaW5pdGlvbnMKKwlpZl93YW5waXBlX2NvbW1vbi5oCVdBTlBJUEUgU29ja2V0L0RyaXZlciBjb21tb24gZGVmaW5pdGlvbnMuCisJc2RsYXBjaS5oCVdBTlBJUEUgUENJIGRlZmluaXRpb25zCisJCisKKy91c3Ivc3JjL2xpbnV4L25ldC93YW5yb3V0ZXI6CisJKgkJd2Fucm91dGVyIHNvdXJjZSBjb2RlCisKKy92YXIvbG9nOgorCXdhbnJvdXRlcgl3YW5yb3V0ZXIgc3RhcnQtdXAgbG9nIChjcmVhdGVkIGJ5IHRoZSBTZXR1cCBzY3JpcHQpCisKKy92YXIvbG9jazogIChvciAvdmFyL2xvY2svc3Vic3lzIGZvciBSZWRIYXQpCisJd2Fucm91dGVyCXdhbnJvdXRlciBsb2NrIGZpbGUgKGNyZWF0ZWQgYnkgdGhlIFNldHVwIHNjcmlwdCkKKworL3Vzci9sb2NhbC93YW5yb3V0ZXIvZmlybXdhcmU6CisJZnI1MTQuc2ZtCUZyYW1lIHJlbGF5IGZpcm13YXJlIGZvciBTYW5nb21hIFM1MDgvUzUxNCBjYXJkCisJY2R1YWw1MTQuc2ZtCUR1YWwgUG9ydCBDaXNjbyBIRExDIGZpcm13YXJlIGZvciBTYW5nb21hIFM1MDgvUzUxNCBjYXJkCisJcHBwNTE0LnNmbSAgICAgIFBQUCBGaXJtd2FyZSBmb3IgU2FuZ29tYSBTNTA4IGFuZCBTNTE0IGNhcmRzCisJeDI1XzUwOC5zZm0JWDI1IEZpcm13YXJlIGZvciBTYW5nb21hIFM1MDggY2FyZC4KKworCitSRVZJU0lPTiBISVNUT1JZCisKKzEuMC4wCURlY2VtYmVyIDMxLCAxOTk2CUluaXRpYWwgdmVyc2lvbgorCisxLjAuMQlKYW51YXJ5IDMwLCAxOTk3CVN0YXR1cyBhbmQgc3RhdGlzdGljcyBjYW4gYmUgcmVhZCB2aWEgL3Byb2MKKwkJCQlmaWxlc3lzdGVtIGVudHJpZXMuCisKKzEuMC4yICAgQXByaWwgMzAsIDE5OTcgICAgICAgICAgQWRkZWQgVURQIG1hbmFnZW1lbnQgdmlhIG1vbml0b3JzLgorCisxLjAuMwlKdW5lIDMsIDE5OTcJCVVEUCBtYW5hZ2VtZW50IGZvciBtdWx0aXBsZSBib2FyZHMgdXNpbmcgRnJhbWUKKwkJCQlSZWxheSBhbmQgUFBQCisJCQkJRW5hYmxlZCBjb250aW51b3VzIHRyYW5zbWlzc2lvbiBvZiBDb25maWd1cmUgCisJCQkJUmVxdWVzdCBQYWNrZXQgZm9yIFBQUCAoZm9yIDUwOCBvbmx5KQorCQkJCUNvbm5lY3Rpb24gVGltZW91dCBmb3IgUFBQIGNoYW5nZWQgZnJvbSA5MDAgdG8gMAorCQkJCUZsb3cgQ29udHJvbCBQcm9ibGVtIGZpeGVkIGZvciBGcmFtZSBSZWxheQorCisxLjAuNAlKdWx5IDEwLCAxOTk3CQlTNTA4L0ZUMSBtb25pdG9yaW5nIGNhcGFiaWxpdHkgaW4gZnBpcGVtb24gYW5kCisJCQkJcHBpcGVtb24gdXRpbGl0aWVzLgorCQkJCUNvbmZpZ3VyYWJsZSBUVEwgZm9yIFVEUCBwYWNrZXRzLgorCQkJCU11bHRpY2FzdCBhbmQgQnJvYWRjYXN0IElQIHNvdXJjZSBhZGRyZXNzZXMgYXJlCisJCQkJc2lsZW50bHkgZGlzY2FyZGVkLgorCisxLjAuNQlKdWx5IDI4LCAxOTk3CQlDb25maWd1cmFibGUgVDM5MSxUMzkyLE4zOTEsTjM5MixOMzkzIGZvciBGcmFtZQorCQkJCVJlbGF5IGluIHJvdXRlci5jb25mLgorCQkJCUNvbmZpZ3VyYWJsZSBNZW1vcnkgQWRkcmVzcyB0aHJvdWdoIHJvdXRlci5jb25mIAorCQkJCWZvciBGcmFtZSBSZWxheSwgUFBQIGFuZCBYLjI1LiAoY29tbWVudGluZyB0aGlzCisgCQkJCW91dCBlbmFibGVzIGF1dG8tZGV0ZWN0aW9uKS4KKwkJCQlGaXhlZCBmcmVlaW5nIHVwIHJlY2VpdmVkIGJ1ZmZlcnMgdXNpbmcga2ZyZWUoKQorIAkJCQlmb3IgRnJhbWUgUmVsYXkgYW5kIFguMjUuCisJCQkJUHJvdGVjdCBzZGxhX3BlZWsoKSBieSBjYWxsaW5nIHNhdmVfZmxhZ3MoKSwKKwkJCQljbGkoKSBhbmQgcmVzdG9yZV9mbGFncygpLgorCQkJCUNoYW5nZWQgbnVtYmVyIG9mIFRyYWNlIGVsZW1lbnRzIGZyb20gMzIgdG8gMjAKKwkJCQlBZGRlZCBETENJIHNwZWNpZmljIGRhdGEgbW9uaXRvcmluZyBpbiBGUElQRU1PTi4gCisyLjAuMAlOb3YgMDcsIDE5OTcJCUltcGxlbWVudGVkIHByb3RlY3Rpb24gb2YgUkFDRSBjb25kaXRpb25zIGJ5IAorCQkJCWNyaXRpY2FsIGZsYWdzIGZvciBGUkFNRSBSRUxBWSBhbmQgUFBQLgorCQkJCURMQ0kgTGlzdCBpbnRlcnJ1cHQgbW9kZSBpbXBsZW1lbnRlZC4KKwkJCQlJUFggc3VwcG9ydCBpbiBGUkFNRSBSRUxBWSBhbmQgUFBQLgorCQkJCUlQWCBTZXJ2ZXIgU3VwcG9ydCAoTUFSUykKKwkJCQlNb3JlIGRyaXZlciBzcGVjaWZpYyBzdGF0cyBpbmNsdWRlZCBpbiBGUElQRU1PTgorCQkJCWFuZCBQSVBFTU9OLgorCisyLjAuMQlOb3YgMjgsIDE5OTcJCUJ1ZyBGaXhlcyBmb3IgdmVyc2lvbiAyLjAuMC4KKwkJCQlQcm90ZWN0aW9uIG9mICJlbmFibGVfaXJxKCkiIHdoaWxlIAorCQkJCSJkaXNhYmxlX2lycSgpIiBoYXMgYmVlbiBlbmFibGVkIGZyb20gYW55IG90aGVyCisJCQkJcm91dGluZSAoZm9yIEZyYW1lIFJlbGF5LCBQUFAgYW5kIFgyNSkuCisJCQkJQWRkZWQgYWRkaXRpb25hbCBTdGF0cyBmb3IgRnBpcGVtb24gYW5kIFBwaXBlbW9uCisJCQkJSW1wcm92ZWQgTG9hZCBTaGFyaW5nIGZvciBtdWx0aXBsZSBib2FyZHMKKworMi4wLjIJRGVjIDA5LCAxOTk3CQlTdXBwb3J0IGZvciBQQVAgYW5kIENIQVAgZm9yIHBwcCBoYXMgYmVlbgorCQkJCWltcGxlbWVudGVkLgorCisyLjAuMwlBdWcgMTUsIDE5OTgJCU5ldyByZWxlYXNlIHN1cHBvcnRpbmcgQ2lzY28gSERMQywgQ0lSIGZvciBGcmFtZQorCQkJCXJlbGF5LCBEeW5hbWljIElQIGFzc2lnbm1lbnQgZm9yIFBQUCBhbmQgSW52ZXJzZQorCQkJCUFycCBzdXBwb3J0IGZvciBGcmFtZS1yZWxheS4gIE1hbiBQYWdlcyBhcmUgCisJCQkJaW5jbHVkZWQgZm9yIGJldHRlciBzdXBwb3J0IGFuZCBhIG5ldyB1dGlsaXR5CisJCQkJZm9yIGNvbmZpZ3VyaW5nIEZUMSBjYXJkcy4KKworMi4wLjQJRGVjIDA5LCAxOTk4CSAgICAgICAgRHVhbCBQb3J0IHN1cHBvcnQgZm9yIENpc2NvIEhETEMuCisJCQkJU3VwcG9ydCBmb3IgSERMQyAoTEFQQikgQVBJLgorCQkJCVN1cHBvcnRzIEJpU3luYyBTdHJlYW1pbmcgY29kZSBmb3IgUzUwMkUgCisJCQkJYW5kIFM1MDMgY2FyZHMuCisJCQkJU3VwcG9ydCBmb3IgU3RyZWFtaW5nIEhETEMgQVBJLgorCQkJCVByb3ZpZGVzIGEgQlNEIHNvY2tldCBpbnRlcmZhY2UgZm9yIAorCQkJCWNyZWF0aW5nIGFwcGxpY2F0aW9ucyB1c2luZyBCaVN5bmMKKyAgIAkJCQlzdHJlYW1pbmcuICAgICAgICAKKworMi4wLjUgICBBdWcgMDQsIDE5OTkgCQlDSERMQyBpbml0aWFsaXphdGluIGJ1ZyBmaXguCisJCQkJUFBQIGludGVycnVwdCBkcml2ZW4gZHJpdmVyOiAKKyAgCQkJCUZpeCB0byB0aGUgUFBQIGxpbmUgaGFuZ3VwIHByb2JsZW0uCisJCQkJTmV3IFBQUCBmaXJtd2FyZQorCQkJCUFkZGVkIGNvbW1lbnRzIHRvIHRoZSBzdGFydHVwIFNZU1RFTSBFUlJPUiBtZXNzYWdlcworCQkJCVhwaXBlbW9uIGRlYnVnZ2luZyBhcHBsaWNhdGlvbiBmb3IgdGhlIFgyNSBwcm90b2NvbAorCQkJCU5ldyBVU0VSX01BTlVBTC50eHQKKwkJCQlGaXhlZCB0aGUgb2RkIGJvdW5kYXJ5IDRieXRlIHdyaXRlcyB0byB0aGUgYm9hcmQuCisJCQkJQmlTeW5jIFN0cmVhbWluZyBjb2RlIGhhcyBiZWVuIHRha2VuIG91dC4gIAorCQkJCSBBdmFpbGFibGUgYXMgYSBwYXRjaC4KKwkJCQlTdHJlYW1pbmcgSERMQyBBUEkgaGFzIGJlZW4gdGFrZW4gb3V0LiAgCisJCQkJIEF2YWlsYWJsZSBhcyBhIHBhdGNoLiAgICAgICAgICAgICAgICAgCisKKzIuMC42ICAgQXVnIDE3LCAxOTk5CQlJbmNyZWFzZWQgZGVidWdnaW5nIGluIHN0YXR1cCBzY3JpcHRzCisJCQkJRml4ZWQgaW5zYWxsYXRpb24gYnVncyBmcm9tIDIuMC41CisJCQkJS2VybmVsIHBhdGNoIHdvcmtzIGZvciBib3RoIDIuMi4xMCBhbmQgMi4yLjExIGtlcm5lbHMuCisJCQkJVGhlcmUgaXMgbm8gZnVuY3Rpb25hbCBkaWZmZXJlbmNlIGJldHdlZW4gdGhlIHR3byBwYWNrYWdlcyAgICAgICAgIAorCisyLjAuNyAgIEF1ZyAyNiwgMTk5OQkJbyAgTWVyZ2VkIFgyNUFQSSBjb2RlIGludG8gV0FOUElQRS4KKwkJCQlvICBGaXhlZCBhIG1lbWVvcnkgbGVhayBmb3IgWDI1QVBJCisJCQkJbyAgVXBkYXRlZCB0aGUgWDI1QVBJIGNvZGUgZm9yIDIuMi5YIGtlcm5lbHMuCisJCQkJbyAgSW1wcm92ZWQgTkVNIGhhbmRsaW5nLiAgIAorCisyLjEuMAlPY3QgMjUsIDE5OTkJCW8gTmV3IGNvZGUgZm9yIFM1MTQgUENJIENhcmQKKwkJCQlvIE5ldyBDSERMQyBhbmQgRnJhbWUgUmVsYXkgZHJpdmVycworCQkJCW8gUFBQIGFuZCBYMjUgYXJlIG5vdCBzdXBwb3J0ZWQgaW4gdGhpcyByZWxlYXNlICAgIAorCisyLjEuMQlOb3YgMzAsIDE5OTkJCW8gUFBQIHN1cHBvcnQgZm9yIFM1MTQgUENJIENhcmRzCisKKzIuMS4zICAgQXByIDA2LCAyMDAwCQlvIFNvY2tldCBiYXNlZCB4MjVhcGkgCisJCQkJbyBTb2NrZXQgYmFzZWQgY2hkbGMgYXBpCisJCQkJbyBTb2NrZXQgYmFzZWQgZnIgYXBpCisJCQkJbyBEdWFsIFBvcnQgUmVjZWl2ZSBvbmx5IENIRExDIHN1cHBvcnQuCisJCQkJbyBBc3luY2hyb25vdXMgQ0hETEMgc3VwcG9ydCAoU2Vjb25kYXJ5IFBvcnQpCisJCQkJbyBjZmdmdDEgR1VJIGNzdS9kc3UgY29uZmlndXJhdG9yCisJCQkJbyB3YW5jZmcgR1VJIGNvbmZpZ3VyYXRpb24gZmlsZSAKKwkJCQkgIGNvbmZpZ3VyYXRvci4KKwkJCQlvIEFyY2hpdGVjdHVhbCBkaXJlY3RvcnkgY2hhbmdlcy4KKworYmV0YS0yLjEuNCBKdWwgMjAwMAkJbyBEeW5hbWljIGludGVyZmFjZSBjb25maWd1cmF0aW9uOgorCQkJCQlOZXR3b3JrIGludGVyZmFjZXMgcmVmbGVjdCB0aGUgc3RhdGUKKwkJCQkJb2YgcHJvdG9jb2wgbGF5ZXIuICBJZiB0aGUgcHJvdG9jb2wgYmVjb21lcworCQkJCQlkaXNjb25uZWN0ZWQsIGRyaXZlciB3aWxsIGJyaW5nIGRvd24KKwkJCQkJdGhlIGludGVyZmFjZS4gIE9uY2UgdGhlIHByb3RvY29sIHJlY29ubmVjdHMKKwkJCQkJdGhlIGludGVyZmFjZSB3aWxsIGJlIGJyb3VnaHQgdXAuIAorCQkJCQkKKwkJCQkJTm90ZTogVGhpcyBvcHRpb24gaXMgdHVybmVkIG9mZiBieSBkZWZhdWx0LgorCisJCQkJbyBEeW5hbWljIHdhbnJvdXRlciBzZXR1cCB1c2luZyAnd2FuY29uZmlnJzoKKwkJCQkJd2FuY29uZmlnIHV0aWxpdHkgY2FuIGJlIHVzZWQgdG8KKwkJCQkJc2h1dGRvd24scmVzdGFydCxzdGFydCBvciByZWNvbmZpZ3VyZSAKKwkJCQkJYSB2aXJ0dWFsIGNpcmN1aXQgZHluYW1pY2FsbHkuCisJCQkJICAgICAKKwkJCQkJRnJhbWUgUmVsYXk6ICBFYWNoIERMQ0kgY2FuIGJlOiAKKwkJCQkJCSAgICAgIGNyZWF0ZWQsc3RvcHBlZCxyZXN0YXJ0ZWQgYW5kIHJlY29uZmlndXJlZAorCQkJCQkJICAgICAgZHluYW1pY2FsbHkgdXNpbmcgd2FuY29uZmlnLgorCQkJCQkKKwkJCQkJCSAgICAgIGV4OiB3YW5jb25maWcgY2FyZCB3YW5waXBlMSBkZXYgd3AxX2ZyMTYgdXAKKwkJCQkgIAorCQkJCW8gV2Fucm91dGVyIHN0YXJ0dXAgdmlhIGNvbW1hbmQgbGluZSBhcmd1bWVudHM6CisJCQkJCXdhbmNvbmZpZyBhbHNvIHN1cHBvcnRzIHdhbnJvdXRlciBzdGFydHVwIHZpYSBjb21tYW5kIGxpbmUKKwkJCQkJYXJndW1lbnRzLiAgVGh1cywgdGhlcmUgaXMgbm8gbmVlZCB0byBjcmVhdGUgYSB3YW5waXBlIy5jb25mCisJCQkJCWNvbmZpZ3VyYXRpb24gZmlsZS4gIAorCisJCQkJbyBTb2NrZXQgYmFzZWQgeDI1YXBpIHVwZGF0ZS9idWcgZml4ZXMuCisJCQkJCUFkZGVkIHN1cHBvcnQgZm9yIExDTiBudW1iZXJzIGdyZWF0ZXIgdGhhbiAyNTUuCisJCQkJCU9wdGlvbiB0byBwYXNzIHVwIG1vZGVtIG1lc3NhZ2VzLgorCQkJCQlQcm92aWRlZCBhIFBDSSBJUlEgY2hlY2ssIHNvIGEgc2luZ2xlIFM1MTQKKwkJCQkJY2FyZCBpcyBndWFyYW50ZWVkIHRvIGhhdmUgYSBub24tc2hhcmluZyBpbnRlcnJ1cHQuCisKKwkJCQlvIEZpeGVzIHRvIHRoZSB3YW5jZmcgdXRpbGl0eS4KKwkJCQlvIE5ldyBGVDEgZGVidWdnaW5nIHN1cHBvcnQgdmlhICpwaXBlbW9uIHV0aWxpdGllcy4KKwkJCQlvIEZyYW1lIFJlbGF5IEFSUCBzdXBwb3J0IEVuYWJsZWQuCisKK2JldGEzLTIuMS40IEp1bCAyMDAwCQlvIFgyNSBNX0JJVCBQcm9ibGVtIGZpeC4KKwkJCQlvIEFkZGVkIHRoZSBNdWx0aS1Qb3J0IFBQUAorCQkJCSAgVXBkYXRlZCB1dGlsaXRlcyBmb3IgdGhlIE11bHRpLVBvcnQgUFBQLgorCisyLjEuNAlBdXQgMjAwMAorCQkJCW8gSW4gWDI1QVBJOgorCQkJCQlNYXhpbXVtIHBhY2tldCBhbiBhcHBsaWNhdGlvbiBjYW4gc2VuZAorCQkJCQl0byB0aGUgZHJpdmVyIGhhcyBiZWVuIGV4dGVuZGVkIHRvIDQwOTYgYnl0ZXMuCisKKwkJCQkJRml4ZWQgdGhlIHgyNSBzdGFydHVwIGJ1Zy4gRW5hYmxlIAorCQkJCQljb21tdW5pY2F0aW9ucyBvbmx5IGFmdGVyIGFsbCBpbnRlcmZhY2VzCisJCQkJCWNvbWUgdXAuICBISUdIIFNWQy9QVkMgaXMgdXNlZCB0byBjYWxjdWxhdGUKKwkJCQkJdGhlIG51bWJlciBvZiBjaGFubmVscy4KKwkJCQkJRW5hYmxlIHByb3RvY29sIG9ubHkgYWZ0ZXIgYWxsIGludGVyZmFjZXMKKwkJCQkJYXJlIGVuYWJsZWQuCisKKwkJCQlvIEFkZGVkIGFuIGV4dHJhIHN0YXRlIHRvIHRoZSBGVDEgY29uZmlnLCBrZXJuZWwgbW9kdWxlLgorCQkJCW8gVXBkYXRlZCB0aGUgcGlwZW1vbiBkZWJ1Z2dlcnMuCisKKwkJCQlvIEJsb2NrZWQgdGhlIE11bHRpLVBvcnQgUFBQIGZyb20gcnVubmluZyBvbiBrZXJuZWxzCisJCQkJICAyLjIuMTYgb3IgZ3JlYXRlciwgZHVlIHRvIHN5bmNwcHAga2VybmVsIG1vZHVsZQorCQkJCSAgY2hhbmdlLiAKKwkgIAorYmV0YTEtMi4xLjUgCU5vdiAxNSAyMDAwCisJCQkJbyBGaXhlZCB0aGUgTXVsaXRQb3J0IFBQUCBTdXBwb3J0IGZvciBrZXJuZWxzIDIuMi4xNiBhbmQgYWJvdmUuCisJCQkJICAyLjIuWCBrZXJuZWxzIG9ubHkKKworCQkJCW8gU2VjdXJlZCB0aGUgZHJpdmVyIFVEUCBkZWJ1Z2dpbmcgY2FsbHMKKwkJCQkJLSBBbGwgaWxsZWdhbCBuZXRvd3JrIGRlYnVnZ2luZyBjYWxscyBhcmUgcmVwb3J0ZWQgdG8KKwkJCQkJICB0aGUgbG9nLgorCQkJCQktIERlZmluZWQgYSBzZXQgb2YgYWxsb3dlZCBjb21tYW5kcywgYWxsIG90aGVyIGRlbmllZC4KKwkJCQkJCisJCQkJbyBDcGlwZW1vbgorCQkJCQktIEFkZGVkIHNldCBGVDEgY29tbWFuZHMgdG8gdGhlIGNwaXBlbW9uLiBUaHVzIENTVS9EU1UKKwkJCQkJICBjb25maWd1cmFpdG9uIGNhbiBiZSBwZXJmb3JtZWQgdXNpbmcgY3BpcGVtb24uCisJCQkJCSAgQWxsIHN5c3RlbXMgdGhhdCBjYW5ub3QgcnVuIGNmZ2Z0MSBHVUkgdXRpbGl0eSBzaG91bGQKKwkJCQkJICB1c2UgY3BpcGVtb24gdG8gY29uZmlndXJlIHRoZSBvbiBib2FyZCBDU1UvRFNVLgorCisKKwkJCQlvIEtleWJvYXJkIExlZCBNb25pdG9yL0RlYnVnZ2VyCisJCQkJCS0gQSBuZXcgdXRpbHR5IC91c3Ivc2Jpbi93cGtiZG1vbiB1c2VzIGtleWJvYXJkIGxlZHMKKwkJCQkJICB0byBjb252ZXkgb3BlcmF0aW5hbCBzdGF0aXN0aWMgaW5mb3JtYXRpb24gb2YgdGhlIAorCQkJCQkgIFNhbmdvbWEgV0FOUElQRSBjYXJkcy4KKwkJCQkJTlVNX0xPQ0sgICAgPSBMaW5lIFN0YXRlICAoT249Y29ubmVjdGVkLCAgICBPZmY9ZGlzY29ubmVjdGVkKQorCQkJCQlDQVBTX0xPQ0sgICA9IFR4IGRhdGEgICAgIChPbj10cmFuc21pdHRpbmcsIE9mZj1ubyB0eCBkYXRhKQorCQkJCQlTQ1JPTExfTE9DSyA9IFJ4IGRhdGEgICAgIChPbj1yZWNlaXZpbmcsICAgIE9mZj1ubyByeCBkYXRhCisJCQkJCQorCQkJCW8gSGFyZHdhcmUgcHJvYmUgb24gbW9kdWxlIGxvYWQgYW5kIGR5bmFtaWMgZGV2aWNlIGFsbG9jYXRpb24KKwkJCQkJLSBEdXJpbmcgV0FOUElQRSBtb2R1bGUgbG9hZCwgYWxsIFNhbmdvbWEgY2FyZHMgYXJlIHByb2JlZAorCQkJCQkgIGFuZCBmb3VuZCBpbmZvcm1hdGlvbiBpcyBwcmludGVkIGluIHRoZSAvdmFyL2xvZy9tZXNzYWdlcy4KKwkJCQkJLSBJZiBubyBjYXJkcyBhcmUgZm91bmQsIHRoZSBtb2R1bGUgbG9hZCBmYWlscy4KKwkJCQkJLSBBcHByb3ByaWF0ZSBudW1iZXIgb2YgZGV2aWNlcyBhcmUgZHluYW1pY2FsbHkgbG9hZGVkIAorCQkJCQkgIGJhc2VkIG9uIHRoZSBudW1iZXIgb2YgU2FuZ29tYSBjYXJkcyBmb3VuZC4KKworCQkJCQkgIE5vdGU6IFRoZSBrZXJuZWwgY29uZmlndXJhaXRvbiBvcHRpb24gCisJCQkJCQlDT05GSUdfV0FOUElQRV9DQVJEUyBoYXMgYmVlbiB0YWtlbiBvdXQuCisJCQkJCQorCQkJCW8gRml4ZWQgdGhlIEZyYW1lIFJlbGF5IGFuZCBDaGRsYyBuZXR3b3JrIGludGVyZmFjZXMgc28gdGhleSBhcmUKKwkJCQkgIGNvbXBhdGlibGUgd2l0aCBsaWJwY2FwIGxpYnJhcmllcy4gIE1lYW5pbmcsIHRjcGR1bXAsIHNub3J0LAorCQkJCSAgZXRoZXJlYWwsIGFuZCBhbGwgb3RoZXIgcGFja2V0IHNuaWZmZXJzIGFuZCBkZWJ1Z2dlcnMgd29yayBvbgorCQkJCSAgYWxsIFdBTlBJUEUgbmV0b3dyayBpbnRlcmZhY2VzLgorCQkJCQktIFNldCB0aGUgbmV0d29yayBpbnRlcmZhY2UgZW5jb2RpbmcgdHlwZSB0byBBUlBIUkRfUFBQLgorCQkJCQkgIFRoaXMgdGVsbCB0aGUgc25pZmZlcnMgdGhhdCBkYXRhIG9idGFpbmVkIGZyb20gdGhlCisJCQkJCSAgbmV0d29yayBpbnRlcmZhY2UgaXMgaW4gcHVyZSBJUCBmb3JtYXQuCisJCQkJICBGaXggZm9yIDIuMi5YIGtlcm5lbHMgb25seS4KKwkJCQkKKwkJCQlvIFRydWUgaW50ZXJmYWNlIGVuY29kaW5nIG9wdGlvbiBmb3IgRnJhbWUgUmVsYXkgYW5kIENIRExDCisJCQkJCS0gVGhlIGFib3ZlIGZpeCBzZXRzIHRoZSBuZXR3b3JrIGludGVyZmFjZSBlbmNvZGluZworCQkJCQkgIHR5cGUgdG8gQVJQSFJEX1BQUCwgaG93ZXZlciBzb21lIGN1c3RvbWVycyB1c2UKKwkJCQkJICB0aGUgZW5jb2RpbmcgaW50ZXJmYWNlIHR5cGUgdG8gZGV0ZXJtaW5lIHRoZQorCQkJCQkgIHByb3RvY29sIHJ1bm5pbmcuICBUaGVyZWZvcmUsIHRoZSBUVVJFIEVOQ09ESU5HCisJCQkJCSAgb3B0aW9uIHdpbGwgc2V0IHRoZSBpbnRlcmZhY2UgdHlwZSBiYWNrIHRvIHRoZQorCQkJCQkgIG9yaWdpbmFsIHZhbHVlLiAgCisKKwkJCQkJICBOT1RFOiBJZiB0aGlzIG9wdGlvbiBpcyB1c2VkIHdpdGggRnJhbWUgUmVsYXkgYW5kIENIRExDCisJCQkJCQlsaWJwY2FwIGxpYnJhcnkgc3VwcG9ydCB3aWxsIGJlIGJyb2tlbi4gIAorCQkJCQkJaS5lLiB0Y3BkdW1wIHdpbGwgbm90IHdvcmsuCisJCQkJCUZpeCBmb3IgMi4yLnggS2VybmVscyBvbmx5LgorCQkJCQkJCisJCQkJbyBFdGhlcm5ldCBCcmlkZ2luZCBvdmVyIEZyYW1lIFJlbGF5CisJCQkJCS0gVGhlIEZyYW1lIFJlbGF5IGJyaWRnaW5nIGhhcyBiZWVuIGRldmVsb3BlZCBieSAKKwkJCQkJICBLcmlzdGlhbiBIb2ZmbWFubiBhbmQgTWFyayBXZWxscy4gIAorCQkJCQktIFRoZSBMaW51eCBrZXJuZWwgYnJpZGdlIGlzIHVzZWQgdG8gc2VuZCBldGhlcm5ldCAKKwkJCQkJICBkYXRhIG92ZXIgdGhlIGZyYW1lIHJlbGF5IGxpbmtzLgorCQkJCQlGb3IgMi4yLlggS2VybmVscyBvbmx5LgorCisJCQkJbyBBZGRlZCBleHRlbnNpdmUgMi4wLlggc3VwcG9ydC4gTW9zdCBuZXcgZmVhdHVyZXMgb2YKKwkJCQkgIDIuMS41IGZvciBwcm90b2NvbHMgRnJhbWUgUmVsYXksIFBQUCBhbmQgQ0hETEMgYXJlCisJCQkJICBzdXBwb3J0ZWQgdW5kZXIgMi4wLlgga2VybmVscy4gCisKK2JldGExLTIuMi4wIAlEZWMgMzAgMjAwMAorCQkJCW8gVXBkYXRlZCBkcml2ZXJzIGZvciAyLjQuWCBrZXJuZWxzLgorCQkJCW8gVXBkYXRlZCBkcml2ZXJzIGZvciBTTVAgc3VwcG9ydC4KKwkJCQlvIFgyNUFQSSBpcyBub3cgYWJsZSB0byBzaGFyZSBQQ0kgaW50ZXJydXB0cy4KKwkJCQlvIFRvb2sgb3V0IGEgZ2VuZXJhbCBwb2xsaW5nIHJvdXRpbmUgdGhhdCB3YXMgdXNlZAorCQkJCSAgb25seSBieSBYMjVBUEkuIAorCQkJCW8gQWRkZWQgYXBwcm9wcmlhdGUgbG9ja3MgdG8gdGhlIGR5bmFtaWMgcmVjb25maWd1cmF0aW9uCisJCQkJICBjb2RlLgorCQkJCW8gRml4ZWQgYSBidWcgaW4gdGhlIGtleWJvYXJkIGRlYnVnIG1vbml0b3IuCisKK2JldGEyLTIuMi4wCUphbiA4IDIwMDEKKwkJCQlvIFBhdGNoZXMgZm9yIDIuNC4wIGtlcm5lbAorCQkJCW8gUGF0Y2hlcyBmb3IgMi4yLjE4IGtlcm5lbAorCQkJCW8gTWlub3IgdXBkYXRlcyB0byBQUFAgYW5kIENITERDIGRyaXZlcnMuCisJCQkJICBOb3RlOiBObyBmdW5jdGluYWwgZGlmZmVyZW5jZS4gCisKK2JldGEzLTIuMi45CUphbiAxMCAyMDAxCisJCQkJbyBJIG1pc3NlZCB0aGUgMi4yLjE4IGtlcm5lbCBwYXRjaGVzIGluIGJldGEyLTIuMi4wCisJCQkJICByZWxlYXNlLiAgVGhleSBhcmUgaW5jbHVkZWQgaW4gdGhpcyByZWxlYXNlLgorCitTdGFibGUgUmVsZWFzZQorMi4yLjAJCUZlYiAwMSAyMDAxCisJCQkJbyBCdWcgZml4IGluIHdhbmNmZyBHVUkgY29uZmlndXJhdG9yLgorCQkJCQlUaGUgZWRpdCBmdW5jdGlvbiBkaWRuJ3Qgd29yayBwcm9wZXJseS4KKworCitiYXRhMS0yLjIuMQlGZWIgMDkgMjAwMQorCQkJbyBXQU5QSVBFIFRUWSBEcml2ZXIgZW11bGF0aW9uLiAKKwkJCSAgVHdvIG1vZGVzIG9mIG9wZXJhdGlvbiBTeW5jIGFuZCBBc3luYy4KKwkJCQlTeW5jOiBVc2luZyB0aGUgUFBQRCBkYWVtb24sIGtlcm5lbCBTeW5jUFBQIGxheWVyCisJCQkJICAgICAgYW5kIHRoZSBXYW5waXBlIHN5bmMgVFRZIGRyaXZlcjogYSBQUFAgcHJvdG9jb2wgCisJCQkJICAgICAgY29ubmVjdGlvbiBjYW4gYmUgZXN0YWJsaXNoZWQgdmlhIFNhbmdvbWEgYWRhcHRlciwgb3ZlcgorCQkJCSAgICAgIGEgVDEgbGVhc2VkIGxpbmUuCisJCQkKKwkJCQkgICAgICBUaGUgMi40LjAga2VybmVsIFBQUCBsYXllciBzdXBwb3J0cyBNVUxUSUxJTksKKwkJCQkgICAgICBwcm90b2NvbCwgdGhhdCBjYW4gYmUgdXNlZCB0byBidW5kbGUgYW55IG51bWJlciBvZiBTYW5nb21hCisJCQkJICAgICAgYWRhcHRlcnMgKFQxIGxpbmVzKSBpbnRvIG9uZSwgdW5kZXIgYSBzaW5nbGUgSVAgYWRkcmVzcy4KKwkJCQkgICAgICBUaHVzLCBlZmZpY2llbnRseSBvYnRhaW5pbmcgbXVsdGlwbGUgVDEgdGhyb3VnaHB1dC4gCisKKwkJCQkgICAgICBOT1RFOiBUaGUgcmVtb3RlIHNpZGUgbXVzdCBhbHNvIGltcGxlbWVudCBNVUxUSUxJTksgUFBQCisJCQkJCSAgICBwcm90b2NvbC4KKworCQkJCUFzeW5jOlVzaW5nIHRoZSBQUFBEIGRhZW1vbiwga2VybmVsIEFzeW5jUFBQIGxheWVyCisJCQkJICAgICAgYW5kIHRoZSBXQU5QSVBFIGFzeW5jIFRUWSBkcml2ZXI6IGEgUFBQIHByb3RvY29sCisJCQkJICAgICAgY29ubmVjdGlvbiBjYW4gYmUgZXN0YWJsaXNoZWQgdmlhIFNhbmdvbWEgYWRhcHRlciBhbmQKKwkJCQkgICAgICBhIG1vZGVtLCBvdmVyIGEgdGVsZXBob25lIGxpbmUuCisKKwkJCQkgICAgICBUaHVzLCB0aGUgV0FOUElQRSBhc3luYyBUVFkgZHJpdmVyIHNpbXVsYXRlcyBhIHNlcmlhbAorCQkJCSAgICAgIFRUWSBkcml2ZXIgdGhhdCB3b3VsZCBub3JtYWxseSBiZSB1c2VkIHRvIGludGVyZmFjZSB0aGUgCisJCQkJICAgICAgTU9ERU0gdG8gdGhlIGxpbnV4IGtlcm5lbC4KKwkJCQkKKwkJCW8gV0FOUElQRSBQUFAgQmFja3VwIFV0aWxpdHkKKwkJCQlUaGlzIHV0aWxpdHkgd2lsbCBtb25pdG9yIHRoZSBzdGF0ZSBvZiB0aGUgUFBQIFQxIGxpbmUuCisJCQkJSW4gY2FzZSBvZiBmYWlsdXJlLCBhIGRpYWwgdXAgY29ubmVjdGlvbiB3aWxsIGJlIGVzdGFibGlzaGVkCisJCQkJdmlhIHBwcGQgZGFlbW9uLCBldGhlciB2aWEgYSBzZXJpYWwgdHR5IGRyaXZlciAoc2VyaWFsIHBvcnQpLCAKKwkJCQlvciBhIFdBTlBJUEUgYXN5bmMgVFRZIGRyaXZlciAoaW4gY2FzZSBzZXJpYWwgcG9ydCBpcyB1bmF2YWlsYWJsZSkuCisJCQkJCisJCQkJRnVydGhlcm1vcmUsIHdoaWxlIGluIGRpYWwgdXAgbW9kZSwgdGhlIHByaW1hcnkgUFBQIFQxIGxpbmsKKwkJCQl3aWxsIGJlIG1vbml0b3JlZCBmb3Igc2lnbnMgb2YgbGlmZS4gIAorCisJCQkJSWYgdGhlIFBQUCBUMSBsaW5rIGNvbWVzIGJhY2sgdG8gbGlmZSwgdGhlIGRpYWwgdXAgY29ubmVjdGlvbgorCQkJCXdpbGwgYmUgc2h1dGRvd24gYW5kIFQxIGxpbmUgcmUtZXN0YWJsaXNoZWQuCisJCQkKKworCQkJbyBOZXcgU2V0dXAgaW5zdGFsbGF0aW9uIHNjcmlwdC4KKwkJCQlPcHRpb24gdG8gVVBHUkFERSBkZXZpY2UgZHJpdmVycyBpZiB0aGUga2VybmVsIHNvdXJjZSBoYXMKKwkJCQlhbHJlYWR5IGJlZW4gcGF0Y2hlZCB3aXRoIFdBTlBJUEUuCisKKwkJCQlPcHRpb24gdG8gQ09NUElMRSBXQU5QSVBFIG1vZHVsZXMgYWdhaW5zdCB0aGUgY3VycmVudGx5IAorCQkJCXJ1bm5pbmcga2VybmVsLCB0aHVzIG5vIG5lZWQgZm9yIG1hbnVhbCBrZXJuZWwgYW5kIG1vZHVsZQorCQkJCXJlLWNvbXBpbGF0aW4uCisJCQkKKwkJCW8gVXBkYXRlcyBhbmQgQnVnIEZpeGVzIHRvIHdhbmNmZyB1dGlsaXR5LgorCitiYXRhMi0yLjIuMQlGZWIgMjAgMjAwMQorCisJCQlvIEJ1ZyBmaXhlcyB0byB0aGUgQ0hETEMgZGV2aWNlIGRyaXZlcnMuCisJCQkJVGhlIGRyaXZlciBoYWQgY29tcGlsYXRpb24gcHJvYmxlbXMgdW5kZXIga2VybmVscworCQkJCTIuMi4xNCBvciBsb3dlci4KKworCQkJbyBCdWcgZml4ZXMgdG8gdGhlIFNldHVwIGluc3RhbGxhdGlvbiBzY3JpcHQuCisJCQkJVGhlIGRldmljZSBkcml2ZXJzIGNvbXBpbGF0aW9uIG9wdGlvbnMgZGlkbid0IHdvcmsKKwkJCQlwcm9wZXJseS4KKworCQkJbyBVcGRhdGUgdG8gdGhlIHdwYmFja3VwZCBkYWVtb24uICAKKwkJCQlPcHRpbWl6ZWQgdGhlIGNyb3NzLW92ZXIgdGltZXMsIGJldHdlZW4gdGhlIHByaW1hcnkKKwkJCQlsaW5rIGFuZCB0aGUgYmFja3VwIGRpYWx1cC4KKworYmV0YTMtMi4yLjEJTWFyIDAyIDIwMDEKKwkJCW8gUGF0Y2hlcyBmb3IgMi40LjIga2VybmVsLgorCisJCQlvIEJ1ZyBmaXhlcyB0byB1dGlsLyBtYWtlIGZpbGVzLgorCQkJbyBCdWcgZml4ZXMgdG8gdGhlIFNldHVwIGluc3RhbGxhdGlvbiBzY3JpcHQuCisKKwkJCW8gVG9vayBvdXQgdGhlIGJhY2t1cGQgc3VwcG9ydCBhbmQgbWFkZSBpdCBpbnRvCisJCQkgIGFzIHNlcGFyYXRlIHBhY2thZ2UuCisJCQkgIAorYmV0YTQtMi4yLjEgICAgIE1hciAxMiAyMDAxCisKKwkJbyBGaXggdG8gdGhlIEZyYW1lIFJlbGF5IERldmljZSBkcml2ZXIuCisJCQlJUFNBQyBzZW5kcyBhIHBhY2tldCBvZiB6ZXJvIGxlbmd0aAorCQkJaGVhZGVyIHRvIHRoZSBmcmFtZSByZWxheSBkcml2ZXIuICBUaGUKKwkJCWRyaXZlciB0cmllcyB0byBwdXNoIGl0cyBvd24gMiBieXRlIGhlYWRlcgorCQkJaW50byB0aGUgcGFja2V0LCB3aGljaCBjYXVzZXMgdGhlIGRyaXZlciB0bworCQkJY3Jhc2guCisKKwkJbyBGaXggdGhlIFdBTlBJUEUgcmUtY29uZmlndXJhdGlvbiBjb2RlLgorCQkJQnVnIHdhcyBmb3VuZCBieSB0cnlpbmcgdG8gcnVuICB0aGUgY2ZnZnQxIHdoaWxlIHRoZQorCQkJaW50ZXJmYWNlIHdhcyBhbHJlYWR5IHJ1bm5pbmcuICAKKworCQlvIFVwZGF0ZXMgdG8gY2ZnZnQxLgorCQkJV3JpdGVzIGEgd2FucGlwZSMuY2ZnZnQxIGNvbmZpZ3VyYXRpb24gZmlsZQorCQkJb25jZSB0aGUgQ1NVL0RTVSBpcyBjb25maWd1cmVkLiBUaGlzIGZpbGUgY2FuCisJCQlob2xkcyB0aGUgY3VycmVudCBDU1UvRFNVIGNvbmZpZ3VyYXRpb24uCisKKworCis+Pj4+Pj4gRU5EIE9GIFJFQURNRSA8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDwKKworCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvd2F2ZWxhbi50eHQgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvd2F2ZWxhbi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzFhY2Y1ZQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy93YXZlbGFuLnR4dApAQCAtMCwwICsxLDczIEBACisJVGhlIFdhdmVsYW4gZHJpdmVycyBzYWdhCisJLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKwlCeSBKZWFuIFRvdXJyaWxoZXMgPGp0QGhwbC5ocC5jb20+CisKKwlUaGUgV2F2ZWxhbiBpcyBhIFJhZGlvIG5ldHdvcmsgYWRhcHRlciBkZXNpZ25lZCBieQorTHVjZW50LiBVbmRlciB0aGlzIGdlbmVyaWMgbmFtZSBpcyBoaWRkZW4gcXVpdGUgYSB2YXJpZXR5IG9mIGhhcmR3YXJlLAorYW5kIG1hbnkgTGludXggZHJpdmVyIHRvIHN1cHBvcnQgaXQuCisJVGhlIGdldCB0aGUgZnVsbCBzdG9yeSBvbiBXaXJlbGVzcyBMQU5zLCBwbGVhc2UgY29uc3VsdCA6CisJCWh0dHA6Ly93d3cuaHBsLmhwLmNvbS9wZXJzb25hbC9KZWFuX1RvdXJyaWxoZXMvTGludXgvCisKKyJ3YXZlbGFuIiBkcml2ZXIgKG9sZCBJU0EgV2F2ZWxhbikKKy0tLS0tLS0tLS0tLS0tLS0KKwlvIENvbmZpZyA6CU5ldHdvcmsgZGV2aWNlIC0+IFdpcmVsZXNzIExBTiAtPiBBVCZUIFdhdmVMQU4KKwlvIExvY2F0aW9uIDoJLi4uL2RyaXZlcnMvbmV0L3dhdmVsYW4qCisJbyBpbi1saW5lIGRvYyA6CS4uLi9kcml2ZXJzL25ldC93YXZlbGFuLnAuaAorCW8gb24tbGluZSBkb2MgOgorCSAgICBodHRwOi8vd3d3LmhwbC5ocC5jb20vcGVyc29uYWwvSmVhbl9Ub3VycmlsaGVzL0xpbnV4L1dhdmVsYW4uaHRtbAorCisJVGhpcyBpcyB0aGUgZHJpdmVyIGZvciB0aGUgSVNBIHZlcnNpb24gb2YgdGhlIGZpcnN0IGdlbmVyYXRpb24KK29mIHRoZSBXYXZlbGFuLCBub3cgZGlzY29udGludWVkLiBUaGUgZGV2aWNlIGlzIDIgTWIvcywgY29tcG9zZWQgb2YgYQorSW50ZWwgODI1ODYgY29udHJvbGxlciBhbmQgYSBMdWNlbnQgTW9kZW0sIGFuZCBpcyBOT1QgODAyLjExIGNvbXBsaWFudC4KKwlUaGUgZHJpdmVyIGhhcyBiZWVuIHRlc3RlZCB3aXRoIHRoZSBmb2xsb3dpbmcgaGFyZHdhcmUgOgorCW8gV2F2ZWxhbiBJU0EgOTE1IE1IeiAoZnVsbCBsZW5ndGggSVNBIGNhcmQpIAorCW8gV2F2ZWxhbiBJU0EgOTE1IE1IeiAyLjAgKGhhbGYgbGVuZ3RoIElTQSBjYXJkKSAKKwlvIFdhdmVsYW4gSVNBIDIuNCBHSHogKGZ1bGwgbGVuZ3RoIElTQSBjYXJkLCBmaXhlZCBmcmVxdWVuY3kpIAorCW8gV2F2ZWxhbiBJU0EgMi40IEdIeiAyLjAgKGhhbGYgbGVuZ3RoIElTQSBjYXJkLCBmcmVxdWVuY3kgc2VsZWN0YWJsZSkgCisJbyBBYm92ZSBjYXJkcyB3aXRoIHRoZSBvcHRpb25hbCBERVMgZW5jcnlwdGlvbiBmZWF0dXJlIAorCisid2F2ZWxhbl9jcyIgZHJpdmVyIChvbGQgUGNtY2lhIFdhdmVsYW4pCistLS0tLS0tLS0tLS0tLS0tLS0tCisJbyBDb25maWcgOglOZXR3b3JrIGRldmljZSAtPiBQQ01DSUEgbmV0d29yayAtPgorCQkJCVBjbWNpYSBXaXJlbGVzcyBMQU4gLT4gQVQmVC9MdWNlbnQgV2F2ZUxBTgorCW8gTG9jYXRpb24gOgkuLi4vZHJpdmVycy9uZXQvcGNtY2lhL3dhdmVsYW4qCisJbyBpbi1saW5lIGRvYyA6CS4uLi9kcml2ZXJzL25ldC9wY21jaWEvd2F2ZWxhbl9jcy5oCisJbyBvbi1saW5lIGRvYyA6CisJICAgIGh0dHA6Ly93d3cuaHBsLmhwLmNvbS9wZXJzb25hbC9KZWFuX1RvdXJyaWxoZXMvTGludXgvV2F2ZWxhbi5odG1sCisKKwlUaGlzIGlzIHRoZSBkcml2ZXIgZm9yIHRoZSBQQ01DSUEgdmVyc2lvbiBvZiB0aGUgZmlyc3QKK2dlbmVyYXRpb24gb2YgdGhlIFdhdmVsYW4sIG5vdyBkaXNjb250aW51ZWQuIFRoZSBkZXZpY2UgaXMgMiBNYi9zLAorY29tcG9zZWQgb2YgYSBJbnRlbCA4MjU5MyBjb250cm9sbGVyICh0b3RhbGx5IGRpZmZlcmVudCBmcm9tIHRoZSA4MjU4NikKK2FuZCBhIEx1Y2VudCBNb2RlbSwgYW5kIE5PVCA4MDIuMTEgY29tcGF0aWJsZS4KKwlUaGUgZHJpdmVyIGhhcyBiZWVuIHRlc3RlZCB3aXRoIHRoZSBmb2xsb3dpbmcgaGFyZHdhcmUgOgorCW8gV2F2ZWxhbiBQY21jaWEgOTE1IE1IeiAyLjAgKFBjbWNpYSBjYXJkICsgc2VwYXJhdGUKKwkJCQkJbW9kZW0vYW50ZW5uYSBibG9jaykgCisJbyBXYXZlbGFuIFBjbWNpYSAyLjQgR0h6IDIuMCAoUGNtY2lhIGNhcmQgKyBzZXBhcmF0ZQorCQkJCQltb2RlbS9hbnRlbm5hIGJsb2NrKSAKKworInd2bGFuX2NzIiBkcml2ZXIgKFdhdmVsYW4gSUVFRSwgR1BMKQorLS0tLS0tLS0tLS0tLS0tLS0KKwlvIENvbmZpZyA6CU5vdCB5ZXQgaW4ga2VybmVsCisJbyBMb2NhdGlvbiA6CVBjbWNpYSBwYWNrYWdlIDMuMS4xMCsKKwlvIG9uLWxpbmUgZG9jIDoJaHR0cDovL3d3dy5mYXN0YS5maC1kb3J0bXVuZC5kZS91c2Vycy9hbmR5L3d2bGFuLworCisJVGhpcyBpcyB0aGUgZHJpdmVyIGZvciB0aGUgY3VycmVudCBnZW5lcmF0aW9uIG9mIFdhdmVsYW4gSUVFRSwKK3doaWNoIGlzIDgwMi4xMSBjb21wYXRpYmxlLiBEZXBlbmRpbmcgb24gdmVyc2lvbiwgaXQgaXMgMiBNYi9zIG9yIDExCitNYi9zLCB3aXRoIG9yIHdpdGhvdXQgZW5jcnlwdGlvbiwgYWxsIGltcGxlbWVudGVkIGluIEx1Y2VudCBzcGVjaWZpYworRFNQICh0aGUgSGVybWVzKS4KKwlUaGlzIGlzIGEgR1BMIGZ1bGwgc291cmNlIFBDTUNJQSBkcml2ZXIgKElTQSBpcyBqdXN0IGEgUGNtY2lhCitjYXJkIHdpdGggSVNBLVBjbWNpYSBicmlkZ2UpLgorCisid2F2ZWxhbjJfY3MiIGRyaXZlciAoV2F2ZWxhbiBJRUVFLCBiaW5hcnkpCistLS0tLS0tLS0tLS0tLS0tLS0tLQorCW8gQ29uZmlnIDoJTm90IHlldCBpbiBrZXJuZWwKKwlvIExvY2F0aW9uIDoJZnRwOi8vc291cmNlZm9yZ2Uub3JnL3BjbWNpYS9jb250cmliLworCisJVGhpcyBkcml2ZXIgc3VwcG9ydCBleGFjdGx5IHRoZSBzYW1lIGhhcmR3YXJlIGFzIHRoZSBwcmV2aW91cworZHJpdmVyLCB0aGUgbWFpbiBkaWZmZXJlbmNlIGlzIHRoYXQgaXQgaXMgYmFzZWQgb24gYSBiaW5hcnkgbGlicmFyeQorYW5kIHN1cHBvcnRlZCBieSBMdWNlbnQuCisKKwlJIGhvcGUgaXQgY2xlYXJzIHRoZSBjb25mdXNpb24gOy0pCisKKwlKZWFuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcveDI1LWlmYWNlLnR4dCBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy94MjUtaWZhY2UudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk3NWNjODcKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcveDI1LWlmYWNlLnR4dApAQCAtMCwwICsxLDEyMyBAQAorCQkJWC4yNSBEZXZpY2UgRHJpdmVyIEludGVyZmFjZSAxLjEKKworCQkJICAgSm9uYXRoYW4gTmF5bG9yIDI2LjEyLjk2CisKK1RoaXMgaXMgYSBkZXNjcmlwdGlvbiBvZiB0aGUgbWVzc2FnZXMgdG8gYmUgcGFzc2VkIGJldHdlZW4gdGhlIFguMjUgUGFja2V0CitMYXllciBhbmQgdGhlIFguMjUgZGV2aWNlIGRyaXZlci4gVGhleSBhcmUgZGVzaWduZWQgdG8gYWxsb3cgZm9yIHRoZSBlYXN5CitzZXR0aW5nIG9mIHRoZSBMQVBCIG1vZGUgZnJvbSB3aXRoaW4gdGhlIFBhY2tldCBMYXllci4KKworVGhlIFguMjUgZGV2aWNlIGRyaXZlciB3aWxsIGJlIGNvZGVkIG5vcm1hbGx5IGFzIHBlciB0aGUgTGludXggZGV2aWNlIGRyaXZlcgorc3RhbmRhcmRzLiBNb3N0IFguMjUgZGV2aWNlIGRyaXZlcnMgd2lsbCBiZSBtb2RlcmF0ZWx5IHNpbWlsYXIgdG8gdGhlCithbHJlYWR5IGV4aXN0aW5nIEV0aGVybmV0IGRldmljZSBkcml2ZXJzLiBIb3dldmVyIHVubGlrZSB0aG9zZSBkcml2ZXJzLCB0aGUKK1guMjUgZGV2aWNlIGRyaXZlciBoYXMgYSBzdGF0ZSBhc3NvY2lhdGVkIHdpdGggaXQsIGFuZCB0aGlzIGluZm9ybWF0aW9uCituZWVkcyB0byBiZSBwYXNzZWQgdG8gYW5kIGZyb20gdGhlIFBhY2tldCBMYXllciBmb3IgcHJvcGVyIG9wZXJhdGlvbi4KKworQWxsIG1lc3NhZ2VzIGFyZSBoZWxkIGluIHNrX2J1ZmYncyBqdXN0IGxpa2UgcmVhbCBkYXRhIHRvIGJlIHRyYW5zbWl0dGVkCitvdmVyIHRoZSBMQVBCIGxpbmsuIFRoZSBmaXJzdCBieXRlIG9mIHRoZSBza2J1ZmYgaW5kaWNhdGVzIHRoZSBtZWFuaW5nIG9mCit0aGUgcmVzdCBvZiB0aGUgc2tidWZmLCBpZiBhbnkgbW9yZSBpbmZvcm1hdGlvbiBkb2VzIGV4aXN0LgorCisKK1BhY2tldCBMYXllciB0byBEZXZpY2UgRHJpdmVyCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitGaXJzdCBCeXRlID0gMHgwMAorCitUaGlzIGluZGljYXRlcyB0aGF0IHRoZSByZXN0IG9mIHRoZSBza2J1ZmYgY29udGFpbnMgZGF0YSB0byBiZSB0cmFuc21pdHRlZAorb3ZlciB0aGUgTEFQQiBsaW5rLiBUaGUgTEFQQiBsaW5rIHNob3VsZCBhbHJlYWR5IGV4aXN0IGJlZm9yZSBhbnkgZGF0YSBpcworcGFzc2VkIGRvd24uCisKK0ZpcnN0IEJ5dGUgPSAweDAxCisKK0VzdGFibGlzaCB0aGUgTEFQQiBsaW5rLiBJZiB0aGUgbGluayBpcyBhbHJlYWR5IGVzdGFibGlzaGVkIHRoZW4gdGhlIGNvbm5lY3QKK2NvbmZpcm1hdGlvbiBtZXNzYWdlIHNob3VsZCBiZSByZXR1cm5lZCBhcyBzb29uIGFzIHBvc3NpYmxlLgorCitGaXJzdCBCeXRlID0gMHgwMgorCitUZXJtaW5hdGUgdGhlIExBUEIgbGluay4gSWYgaXQgaXMgYWxyZWFkeSBkaXNjb25uZWN0ZWQgdGhlbiB0aGUgZGlzY29ubmVjdAorY29uZmlybWF0aW9uIG1lc3NhZ2Ugc2hvdWxkIGJlIHJldHVybmVkIGFzIHNvb24gYXMgcG9zc2libGUuCisKK0ZpcnN0IEJ5dGUgPSAweDAzCisKK0xBUEIgcGFyYW1ldGVycy4gVG8gYmUgZGVmaW5lZC4KKworCitEZXZpY2UgRHJpdmVyIHRvIFBhY2tldCBMYXllcgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworRmlyc3QgQnl0ZSA9IDB4MDAKKworVGhpcyBpbmRpY2F0ZXMgdGhhdCB0aGUgcmVzdCBvZiB0aGUgc2tidWZmIGNvbnRhaW5zIGRhdGEgdGhhdCBoYXMgYmVlbgorcmVjZWl2ZWQgb3ZlciB0aGUgTEFQQiBsaW5rLgorCitGaXJzdCBCeXRlID0gMHgwMQorCitMQVBCIGxpbmsgaGFzIGJlZW4gZXN0YWJsaXNoZWQuIFRoZSBzYW1lIG1lc3NhZ2UgaXMgdXNlZCBmb3IgYm90aCBhIExBUEIKK2xpbmsgY29ubmVjdF9jb25maXJtYXRpb24gYW5kIGEgY29ubmVjdF9pbmRpY2F0aW9uLgorCitGaXJzdCBCeXRlID0gMHgwMgorCitMQVBCIGxpbmsgaGFzIGJlZW4gdGVybWluYXRlZC4gVGhpcyBzYW1lIG1lc3NhZ2UgaXMgdXNlZCBmb3IgYm90aCBhIExBUEIKK2xpbmsgZGlzY29ubmVjdF9jb25maXJtYXRpb24gYW5kIGEgZGlzY29ubmVjdF9pbmRpY2F0aW9uLgorCitGaXJzdCBCeXRlID0gMHgwMworCitMQVBCIHBhcmFtZXRlcnMuIFRvIGJlIGRlZmluZWQuCisKKworCitQb3NzaWJsZSBQcm9ibGVtcworPT09PT09PT09PT09PT09PT0KKworKEhlbm5lciBFaXNlbiwgMjAwMC0xMC0yOCkKKworVGhlIFguMjUgcGFja2V0IGxheWVyIHByb3RvY29sIGRlcGVuZHMgb24gYSByZWxpYWJsZSBkYXRhbGluayBzZXJ2aWNlLgorVGhlIExBUEIgcHJvdG9jb2wgcHJvdmlkZXMgc3VjaCByZWxpYWJsZSBzZXJ2aWNlLiBCdXQgdGhpcyByZWxpYWJpbGl0eQoraXMgbm90IHByZXNlcnZlZCBieSB0aGUgTGludXggbmV0d29yayBkZXZpY2UgZHJpdmVyIGludGVyZmFjZToKKworLSBXaXRoIExpbnV4IDIuNC54IChhbmQgYWJvdmUpIFNNUCBrZXJuZWxzLCBwYWNrZXQgb3JkZXJpbmcgaXMgbm90CisgIHByZXNlcnZlZC4gRXZlbiBpZiBhIGRldmljZSBkcml2ZXIgY2FsbHMgbmV0aWZfcngoc2tiMSkgYW5kIGxhdGVyCisgIG5ldGlmX3J4KHNrYjIpLCBza2IyIG1pZ2h0IGJlIGRlbGl2ZXJlZCB0byB0aGUgbmV0d29yayBsYXllcgorICBlYXJsaWVyIHRoYXQgc2tiMS4KKy0gRGF0YSBwYXNzZWQgdXBzdHJlYW0gYnkgbWVhbnMgb2YgbmV0aWZfcngoKSBtaWdodCBiZSBkcm9wcGVkIGJ5IHRoZQorICBrZXJuZWwgaWYgdGhlIGJhY2tsb2cgcXVldWUgaXMgY29uZ2VzdGVkLgorCitUaGUgWC4yNSBwYWNrZXQgbGF5ZXIgcHJvdG9jb2wgd2lsbCBkZXRlY3QgdGhpcyBhbmQgcmVzZXQgdGhlIHZpcnR1YWwKK2NhbGwgaW4gcXVlc3Rpb24uIEJ1dCBtYW55IHVwcGVyIGxheWVyIHByb3RvY29scyBhcmUgbm90IGRlc2lnbmVkIHRvCitoYW5kbGUgc3VjaCBOLVJlc2V0IGV2ZW50cyBncmFjZWZ1bGx5LiBBbmQgZnJlcXVlbnQgTi1SZXNldCBldmVudHMKK3dpbGwgYWx3YXlzIGRlZ3JhZGUgcGVyZm9ybWFuY2UuCisKK1RodXMsIGRyaXZlciBhdXRob3JzIHNob3VsZCBtYWtlIG5ldGlmX3J4KCkgYXMgcmVsaWFibGUgYXMgcG9zc2libGU6CisKK1NNUCByZS1vcmRlcmluZyB3aWxsIG5vdCBvY2N1ciBpZiB0aGUgZHJpdmVyJ3MgaW50ZXJydXB0IGhhbmRsZXIgaXMKK2Fsd2F5cyBleGVjdXRlZCBvbiB0aGUgc2FtZSBDUFUuIFRodXMsCisKKy0gRHJpdmVyIGF1dGhvcnMgc2hvdWxkIHVzZSBpcnEgYWZmaW5pdHkgZm9yIHRoZSBpbnRlcnJ1cHQgaGFuZGxlci4KKworVGhlIHByb2JhYmlsaXR5IG9mIHBhY2tldCBsb3NzIGR1ZSB0byBiYWNrbG9nIGNvbmdlc3Rpb24gY2FuIGJlCityZWR1Y2VkIGJ5IHRoZSBmb2xsb3dpbmcgbWVhc3VyZXMgb3IgYSBjb21iaW5hdGlvbiB0aGVyZW9mOgorCisoMSkgRHJpdmVycyBmb3Iga2VybmVsIHZlcnNpb25zIDIuNC54IGFuZCBhYm92ZSBzaG91bGQgYWx3YXlzIGNoZWNrIHRoZQorICAgIHJldHVybiB2YWx1ZSBvZiBuZXRpZl9yeCgpLiBJZiBpdCByZXR1cm5zIE5FVF9SWF9EUk9QLCB0aGUKKyAgICBkcml2ZXIncyBMQVBCIHByb3RvY29sIG11c3Qgbm90IGNvbmZpcm0gcmVjZXB0aW9uIG9mIHRoZSBmcmFtZQorICAgIHRvIHRoZSBwZWVyLiAKKyAgICBUaGlzIHdpbGwgcmVsaWFibHkgc3VwcHJlc3MgcGFja2V0IGxvc3MuIFRoZSBMQVBCIHByb3RvY29sIHdpbGwKKyAgICBhdXRvbWF0aWNhbGx5IGNhdXNlIHRoZSBwZWVyIHRvIHJlLXRyYW5zbWl0IHRoZSBkcm9wcGVkIHBhY2tldAorICAgIGxhdGVyLgorICAgIFRoZSBsYXBiIG1vZHVsZSBpbnRlcmZhY2Ugd2FzIG1vZGlmaWVkIHRvIHN1cHBvcnQgdGhpcy4gSXRzCisgICAgZGF0YV9pbmRpY2F0aW9uKCkgbWV0aG9kIHNob3VsZCBub3cgdHJhbnNwYXJlbnRseSBwYXNzIHRoZQorICAgIG5ldGlmX3J4KCkgcmV0dXJuIHZhbHVlIHRvIHRoZSAobGFwYiBtb3BkdWxlKSBjYWxsZXIuCisoMikgRHJpdmVycyBmb3Iga2VybmVsIHZlcnNpb25zIDIuMi54IHNob3VsZCBhbHdheXMgY2hlY2sgdGhlIGdsb2JhbAorICAgIHZhcmlhYmxlIG5ldGRldl9kcm9wcGluZyB3aGVuIGEgbmV3IGZyYW1lIGlzIHJlY2VpdmVkLiBUaGUgZHJpdmVyCisgICAgc2hvdWxkIG9ubHkgY2FsbCBuZXRpZl9yeCgpIGlmIG5ldGRldl9kcm9wcGluZyBpcyB6ZXJvLiBPdGhlcndpc2UKKyAgICB0aGUgZHJpdmVyIHNob3VsZCBub3QgY29uZmlybSBkZWxpdmVyeSBvZiB0aGUgZnJhbWUgYW5kIGRyb3AgaXQuCisgICAgQWx0ZXJuYXRpdmVseSwgdGhlIGRyaXZlciBjYW4gcXVldWUgdGhlIGZyYW1lIGludGVybmFsbHkgYW5kIGNhbGwKKyAgICBuZXRpZl9yeCgpIGxhdGVyIHdoZW4gbmV0aWZfZHJvcHBpbmcgaXMgMCBhZ2Fpbi4gSW4gdGhhdCBjYXNlLCBkZWxpdmVyeQorICAgIGNvbmZpcm1hdGlvbiBzaG91bGQgYWxzbyBiZSBkZWZlcnJlZCBzdWNoIHRoYXQgdGhlIGludGVybmFsIHF1ZXVlCisgICAgY2Fubm90IGdyb3cgdG8gbXVjaC4KKyAgICBUaGlzIHdpbGwgbm90IHJlbGlhYmx5IGF2b2lkIHBhY2tldCBsb3NzLCBidXQgdGhlIHByb2JhYmlsaXR5CisgICAgb2YgcGFja2V0IGxvc3MgaW4gbmV0aWZfcngoKSBwYXRoIHdpbGwgYmUgc2lnbmlmaWNhbnRseSByZWR1Y2VkLgorKDMpIEFkZGl0aW9uYWxseSwgZHJpdmVyIGF1dGhvcnMgbWlnaHQgY29uc2lkZXIgdG8gc3VwcG9ydAorICAgIENPTkZJR19ORVRfSFdfRkxPV0NPTlRST0wuIFRoaXMgYWxsb3dzIHRoZSBkcml2ZXIgdG8gYmUgd29rZW4gdXAKKyAgICB3aGVuIGEgcHJldmlvdXNseSBjb25nZXN0ZWQgYmFja2xvZyBxdWV1ZSBiZWNvbWVzIGVtcHR5IGFnYWluLgorICAgIFRoZSBkcml2ZXIgY291bGQgdXNlcyB0aGlzIGZvciBmbG93LWNvbnRyb2xsaW5nIHRoZSBwZWVyIGJ5IG1lYW5zCisgICAgb2YgdGhlIExBUEIgcHJvdG9jb2wncyBmbG93LWNvbnRyb2wgc2VydmljZS4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy94MjUudHh0IGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3gyNS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzkxYzZkNwotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy94MjUudHh0CkBAIC0wLDAgKzEsNDQgQEAKK0xpbnV4IFguMjUgUHJvamVjdAorCitBcyBteSB0aGlyZCB5ZWFyIGRpc3NlcnRhdGlvbiBhdCBVbml2ZXJzaXR5IEkgaGF2ZSB0YWtlbiBpdCB1cG9uIG15c2VsZiB0bword3JpdGUgYW4gWC4yNSBpbXBsZW1lbnRhdGlvbiBmb3IgTGludXguIE15IGFpbSBpcyB0byBwcm92aWRlIGEgY29tcGxldGUgWC4yNQorUGFja2V0IExheWVyIGFuZCBhIExBUEIgbW9kdWxlIHRvIGFsbG93IGZvciAibm9ybWFsIiBYLjI1IHRvIGJlIHJ1biB1c2luZworTGludXguIFRoZXJlIGFyZSB0d28gc29ydHMgb2YgWC4yNSBjYXJkcyBhdmFpbGFibGUsIGludGVsbGlnZW50IG9uZXMgdGhhdAoraW1wbGVtZW50IExBUEIgb24gdGhlIGNhcmQgaXRzZWxmLCBhbmQgdW5pbnRlbGxpZ2VudCBvbmVzIHRoYXQgc2ltcGx5IGRvCitmcmFtaW5nLCBiaXQtc3R1ZmZpbmcgYW5kIGNoZWNrc3VtbWluZy4gVGhlc2UgYm90aCBuZWVkIHRvIGJlIGhhbmRsZWQgYnkgdGhlCitzeXN0ZW0uCisKK0kgdGhlcmVmb3JlIGRlY2lkZWQgdG8gd3JpdGUgdGhlIGltcGxlbWVudGF0aW9uIHN1Y2ggdGhhdCBhcyBmYXIgYXMgdGhlCitQYWNrZXQgTGF5ZXIgaXMgY29uY2VybmVkLCB0aGUgbGluayBsYXllciB3YXMgYmVpbmcgcGVyZm9ybWVkIGJ5IGEgbG93ZXIKK2xheWVyIG9mIHRoZSBMaW51eCBrZXJuZWwgYW5kIHRoZXJlZm9yZSBpdCBkaWQgbm90IGNvbmNlcm4gaXRzZWxmIHdpdGgKK2ltcGxlbWVudGF0aW9uIG9mIExBUEIuIFRoZXJlZm9yZSB0aGUgTEFQQiBtb2R1bGVzIHdvdWxkIGJlIGNhbGxlZCBieQordW5pbnRlbGxpZ2VudCBYLjI1IGNhcmQgZHJpdmVycyBhbmQgbm90IGJ5IGludGVsbGlnZW50IG9uZXMsIHRoaXMgd291bGQKK3Byb3ZpZGUgYSB1bmlmb3JtIGRldmljZSBkcml2ZXIgaW50ZXJmYWNlLCBhbmQgc2ltcGxpZnkgY29uZmlndXJhdGlvbi4KKworVG8gY29uZnVzZSBtYXR0ZXJzIGEgbGl0dGxlLCBhbiA4MDIuMiBMTEMgaW1wbGVtZW50YXRpb24gZm9yIExpbnV4IGlzIGJlaW5nCit3cml0dGVuIHdoaWNoIHdpbGwgYWxsb3cgWC4yNSB0byBiZSBydW4gb3ZlciBhbiBFdGhlcm5ldCAob3IgVG9rZW4gUmluZykgYW5kCitjb25mb3JtIHdpdGggdGhlIEpOVCAiUGluayBCb29rIiwgdGhpcyB3aWxsIGhhdmUgYSBkaWZmZXJlbnQgaW50ZXJmYWNlIHRvCit0aGUgUGFja2V0IExheWVyIGJ1dCB0aGVyZSB3aWxsIGJlIG5vIGNvbmZ1c2lvbiBzaW5jZSB0aGUgY2xhc3Mgb2YgZGV2aWNlCitiZWluZyBzZXJ2ZWQgYnkgdGhlIExMQyB3aWxsIGJlIGNvbXBsZXRlbHkgc2VwYXJhdGUgZnJvbSBMQVBCLiBUaGUgTExDCitpbXBsZW1lbnRhdGlvbiBpcyBiZWluZyBkb25lIGFzIHBhcnQgb2YgYW5vdGhlciBwcm90b2NvbCBwcm9qZWN0IChTTkEpIGFuZAorYnkgYSBkaWZmZXJlbnQgYXV0aG9yLgorCitKdXN0IHdoZW4geW91IHRob3VnaHQgdGhhdCBpdCBjb3VsZCBub3QgYmVjb21lIG1vcmUgY29uZnVzaW5nLCBhbm90aGVyCitvcHRpb24gYXBwZWFyZWQsIFhPVC4gVGhpcyBhbGxvd3MgWC4yNSBQYWNrZXQgTGF5ZXIgZnJhbWVzIHRvIG9wZXJhdGUgb3ZlcgordGhlIEludGVybmV0IHVzaW5nIFRDUC9JUCBhcyBhIHJlbGlhYmxlIGxpbmsgbGF5ZXIuIFJGQzE2MTMgc3BlY2lmaWVzIHRoZQorZm9ybWF0IGFuZCBiZWhhdmlvdXIgb2YgdGhlIHByb3RvY29sLiBJZiB0aW1lIHBlcm1pdHMgdGhpcyBvcHRpb24gd2lsbCBhbHNvCitiZSBhY3RpdmVseSBjb25zaWRlcmVkLgorCitBIGxpbnV4LXgyNSBtYWlsaW5nIGxpc3QgaGFzIGJlZW4gY3JlYXRlZCBhdCB2Z2VyLmtlcm5lbC5vcmcgdG8gc3VwcG9ydCB0aGUKK2RldmVsb3BtZW50IGFuZCB1c2Ugb2YgTGludXggWC4yNS4gSXQgaXMgZWFybHkgZGF5cyB5ZXQsIGJ1dCBpbnRlcmVzdGVkCitwYXJ0aWVzIGFyZSB3ZWxjb21lIHRvIHN1YnNjcmliZSB0byBpdC4gSnVzdCBzZW5kIGEgbWVzc2FnZSB0bworbWFqb3Jkb21vQHZnZXIua2VybmVsLm9yZyB3aXRoIHRoZSBmb2xsb3dpbmcgaW4gdGhlIG1lc3NhZ2UgYm9keToKKworc3Vic2NyaWJlIGxpbnV4LXgyNQorZW5kCisKK1RoZSBjb250ZW50cyBvZiB0aGUgU3ViamVjdCBsaW5lIGFyZSBpZ25vcmVkLgorCitKb25hdGhhbgorCitnNGtseEBnNGtseC5kZW1vbi5jby51awpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3o4NTMwZHJ2LnR4dCBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy96ODUzMGRydi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjIwNmFiYgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy96ODUzMGRydi50eHQKQEAgLTAsMCArMSw2NTcgQEAKK1RoaXMgaXMgYSBzdWJzZXQgb2YgdGhlIGRvY3VtZW50YXRpb24uIFRvIHVzZSB0aGlzIGRyaXZlciB5b3UgTVVTVCBoYXZlIHRoZQorZnVsbCBwYWNrYWdlIGZyb206CisKK0ludGVybmV0OgorPT09PT09PT09CisKKzEuIGZ0cDovL2Z0cC5jY2FjLnJ3dGgtYWFjaGVuLmRlL3B1Yi9qci96ODUzMGRydi11dGlsc18zLjAtMy50YXIuZ3oKKworMi4gZnRwOi8vZnRwLnBzcHQuZmkvcHViL2hhbS9saW51eC9heDI1L3o4NTMwZHJ2LXV0aWxzXzMuMC0zLnRhci5negorCitQbGVhc2Ugbm90ZSB0aGF0IHRoZSBpbmZvcm1hdGlvbiBpbiB0aGlzIGRvY3VtZW50IG1heSBiZSBob3BlbGVzc2x5IG91dGRhdGVkLgorQSBuZXcgdmVyc2lvbiBvZiB0aGUgZG9jdW1lbnRhdGlvbiwgYWxvbmcgd2l0aCBsaW5rcyB0byBvdGhlciBpbXBvcnRhbnQKK0xpbnV4IEtlcm5lbCBBWC4yNSBkb2N1bWVudGF0aW9uIGFuZCBwcm9ncmFtcywgaXMgYXZhaWxhYmxlIG9uCitodHRwOi8veWFpbmEuZGUvanJldXRlcgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisKKwkgU0NDLkMgLSBMaW51eCBkcml2ZXIgZm9yIFo4NTMwIGJhc2VkIEhETEMgY2FyZHMgZm9yIEFYLjI1ICAgICAgCisKKyAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKKyAgICAgICAgKGMpIDE5OTMsMjAwMCBieSBKb2VyZyBSZXV0ZXIgREwxQktFIDxqcmV1dGVyQHlhaW5hLmRlPgorCisgICAgICAgIHBvcnRpb25zIChjKSAxOTkzIEd1aWRvIHRlbiBEb2xsZSBQRTFOTloKKworICAgICAgICBmb3IgdGhlIGNvbXBsZXRlIGNvcHlyaWdodCBub3RpY2Ugc2VlID4+IENvcHlpbmcuWjg1MzBEUlYgPDwKKworICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogCisKKworMS4gSW5pdGlhbGl6YXRpb24gb2YgdGhlIGRyaXZlcgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitUbyB1c2UgdGhlIGRyaXZlciwgMyBzdGVwcyBtdXN0IGJlIHBlcmZvcm1lZDoKKworICAgICAxLiBpZiBjb21waWxlZCBhcyBtb2R1bGU6IGxvYWRpbmcgdGhlIG1vZHVsZQorICAgICAyLiBTZXR1cCBvZiBoYXJkd2FyZSwgTU9ERU0gYW5kIEtJU1MgcGFyYW1ldGVycyB3aXRoIHNjY2luaXQKKyAgICAgMy4gQXR0YWNoIGVhY2ggY2hhbm5lbCB0byB0aGUgTGludXgga2VybmVsIEFYLjI1IHdpdGggImlmY29uZmlnIgorCitVbmxpa2UgdGhlIHZlcnNpb25zIGJlbG93IDIuNCB0aGlzIGRyaXZlciBpcyBhIHJlYWwgbmV0d29yayBkZXZpY2UKK2RyaXZlci4gSWYgeW91IHdhbnQgdG8gcnVuIHhOT1MgaW5zdGVhZCBvZiBvdXIgZmluZSBrZXJuZWwgQVguMjUKK3VzZSBhIDIueCB2ZXJzaW9uIChhdmFpbGFibGUgZnJvbSBhYm92ZSBzaXRlcykgb3IgcmVhZCB0aGUKK0FYLjI1LUhPV1RPIG9uIGhvdyB0byBlbXVsYXRlIGEgS0lTUyBUTkMgb24gbmV0d29yayBkZXZpY2UgZHJpdmVycy4KKworCisxLjEgTG9hZGluZyB0aGUgbW9kdWxlCis9PT09PT09PT09PT09PT09PT09PT09CisKKyhJZiB5b3UncmUgZ29pbmcgdG8gY29tcGlsZSB0aGUgZHJpdmVyIGFzIGEgcGFydCBvZiB0aGUga2VybmVsIGltYWdlLAorIHNraXAgdGhpcyBjaGFwdGVyIGFuZCBjb250aW51ZSB3aXRoIDEuMikKKworQmVmb3JlIHlvdSBjYW4gdXNlIGEgbW9kdWxlLCB5b3UnbGwgaGF2ZSB0byBsb2FkIGl0IHdpdGgKKworCWluc21vZCBzY2MubworCitwbGVhc2UgcmVhZCAnbWFuIGluc21vZCcgdGhhdCBjb21lcyB3aXRoIG1vZHVsZS1pbml0LXRvb2xzLgorCitZb3Ugc2hvdWxkIGluY2x1ZGUgdGhlIGluc21vZCBpbiBvbmUgb2YgdGhlIC9ldGMvcmMuZC9yYy4qIGZpbGVzLAorYW5kIGRvbid0IGZvcmdldCB0byBpbnNlcnQgYSBjYWxsIG9mIHNjY2luaXQgYWZ0ZXIgdGhhdC4gSXQKK3dpbGwgcmVhZCB5b3VyIC9ldGMvejg1MzBkcnYuY29uZi4KKworMS4yLiAvZXRjL3o4NTMwZHJ2LmNvbmYKKz09PT09PT09PT09PT09PT09PT09PT09CisKK1RvIHNldHVwIGFsbCBwYXJhbWV0ZXJzIHlvdSBtdXN0IHJ1biAvc2Jpbi9zY2Npbml0IGZyb20gb25lCitvZiB5b3VyIHJjLiotZmlsZXMuIFRoaXMgaGFzIHRvIGJlIGRvbmUgQkVGT1JFIHlvdSBjYW4KKyJpZmNvbmZpZyIgYW4gaW50ZXJmYWNlLiBTY2Npbml0IHJlYWRzIHRoZSBmaWxlIC9ldGMvejg1MzBkcnYuY29uZgorYW5kIHNldHMgdGhlIGhhcmR3YXJlLCBNT0RFTSBhbmQgS0lTUyBwYXJhbWV0ZXJzLiBBIHNhbXBsZSBmaWxlIGlzCitkZWxpdmVyZWQgd2l0aCB0aGlzIHBhY2thZ2UuIENoYW5nZSBpdCB0byB5b3VyIG5lZWRzLgorCitUaGUgZmlsZSBpdHNlbGYgY29uc2lzdHMgb2YgdHdvIG1haW4gc2VjdGlvbnMuCisKKzEuMi4xIGNvbmZpZ3VyYXRpb24gb2YgaGFyZHdhcmUgcGFyYW1ldGVycworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK1RoZSBoYXJkd2FyZSBzZXR1cCBzZWN0aW9uIGRlZmluZXMgdGhlIGZvbGxvd2luZyBwYXJhbWV0ZXJzIGZvciBlYWNoCitaODUzMDoKKworY2hpcCAgICAxCitkYXRhX2EgIDB4MzAwICAgICAgICAgICAgICAgICAgICMgZGF0YSBwb3J0IEEKK2N0cmxfYSAgMHgzMDQgICAgICAgICAgICAgICAgICAgIyBjb250cm9sIHBvcnQgQQorZGF0YV9iICAweDMwMSAgICAgICAgICAgICAgICAgICAjIGRhdGEgcG9ydCBCCitjdHJsX2IgIDB4MzA1ICAgICAgICAgICAgICAgICAgICMgY29udHJvbCBwb3J0IEIKK2lycSAgICAgNSAgICAgICAgICAgICAgICAgICAgICAgIyBJUlEgTm8uIDUKK3BjbG9jayAgNDkxNTIwMCAgICAgICAgICAgICAgICAgIyBjbG9jaworYm9hcmQgICBCQVlDT00gICAgICAgICAgICAgICAgICAjIGhhcmR3YXJlIHR5cGUKK2VzY2MgICAgbm8gICAgICAgICAgICAgICAgICAgICAgIyBlbmhhbmNlZCBTQ0MgY2hpcD8gKDg1ODAvODUxODAvODUyODApCit2ZWN0b3IgIDAgICAgICAgICAgICAgICAgICAgICAgICMgbGF0Y2ggZm9yIGludGVycnVwdCB2ZWN0b3IKK3NwZWNpYWwgbm8gICAgICAgICAgICAgICAgICAgICAgIyBhZGRyZXNzIG9mIHNwZWNpYWwgZnVuY3Rpb24gcmVnaXN0ZXIKK29wdGlvbiAgMCAgICAgICAgICAgICAgICAgICAgICAgIyBvcHRpb24gdG8gc2V0IHZpYSBzZnIKKworCitjaGlwCS0gdGhpcyBpcyBqdXN0IGEgZGVsaW1pdGVyIHRvIG1ha2Ugc2NjaW5pdCBhIGJpdCBzaW1wbGVyIHRvCisJICBwcm9ncmFtLiBBIHBhcmFtZXRlciBoYXMgbm8gZWZmZWN0LgorCitkYXRhX2EgIC0gdGhlIGFkZHJlc3Mgb2YgdGhlIGRhdGEgcG9ydCBBIG9mIHRoaXMgWjg1MzAgKG5lZWRlZCkKK2N0cmxfYSAgLSB0aGUgYWRkcmVzcyBvZiB0aGUgY29udHJvbCBwb3J0IEEgKG5lZWRlZCkKK2RhdGFfYiAgLSB0aGUgYWRkcmVzcyBvZiB0aGUgZGF0YSBwb3J0IEIgKG5lZWRlZCkKK2N0cmxfYiAgLSB0aGUgYWRkcmVzcyBvZiB0aGUgY29udHJvbCBwb3J0IEIgKG5lZWRlZCkKKworaXJxICAgICAtIHRoZSB1c2VkIElSUSBmb3IgdGhpcyBjaGlwLiBEaWZmZXJlbnQgY2hpcHMgY2FuIHVzZSBkaWZmZXJlbnQKKyAgICAgICAgICBJUlFzIG9yIHRoZSBzYW1lLiBJZiB0aGV5IHNoYXJlIGFuIGludGVycnVwdCwgaXQgbmVlZHMgdG8gYmUKKwkgIHNwZWNpZmllZCB3aXRoaW4gb25lIGNoaXAtZGVmaW5pdGlvbiBvbmx5LgorCitwY2xvY2sgIC0gdGhlIGNsb2NrIGF0IHRoZSBQQ0xLIHBpbiBvZiB0aGUgWjg1MzAgKG9wdGlvbiwgNDkxNTIwMCBpcworICAgICAgICAgIGRlZmF1bHQpLCBtZWFzdXJlZCBpbiBIZXJ0egorCitib2FyZCAgIC0gdGhlICJ0eXBlIiBvZiB0aGUgYm9hcmQ6CisKKwkgICBTQ0MgdHlwZSAgICAgICAgICAgICAgICAgdmFsdWUKKwkgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwkgICBQQTBIWlAgU0NDIGNhcmQgICAgICAgICAgUEEwSFpQCisJICAgRUFHTEUgY2FyZCAgICAgICAgICAgICAgIEVBR0xFCisJICAgUEMxMDAgY2FyZCAgICAgICAgICAgICAgIFBDMTAwCisJICAgUFJJTVVTLVBDIChERzlCTCkgY2FyZCAgIFBSSU1VUworCSAgIEJheUNvbSAoVSlTQ0MgY2FyZCAgICAgICBCQVlDT00KKworZXNjYyAgICAtIGlmIHlvdSB3YW50IHN1cHBvcnQgZm9yIEVTQ0MgY2hpcHMgKDg1ODAsIDg1MTgwLCA4NTI4MCksIHNldAorICAgICAgICAgIHRoaXMgdG8gInllcyIgKG9wdGlvbiwgZGVmYXVsdHMgdG8gIm5vIikKKwordmVjdG9yICAtIGFkZHJlc3Mgb2YgdGhlIHZlY3RvciBsYXRjaCAoYWthICJpbnRhY2sgcG9ydCIpIGZvciBQQTBIWlAKKyAgICAgICAgICBjYXJkcy4gVGhlcmUgY2FuIGJlIG9ubHkgb25lIHZlY3RvciBsYXRjaCBmb3IgYWxsIGNoaXBzIQorCSAgKG9wdGlvbiwgZGVmYXVsdHMgdG8gMCkKKworc3BlY2lhbCAtIGFkZHJlc3Mgb2YgdGhlIHNwZWNpYWwgZnVuY3Rpb24gcmVnaXN0ZXIgb24gc2V2ZXJhbCBjYXJkcy4KKyAgICAgICAgICAob3B0aW9uLCBkZWZhdWx0cyB0byAwKQorCitvcHRpb24gIC0gVGhlIHZhbHVlIHlvdSB3cml0ZSBpbnRvIHRoYXQgcmVnaXN0ZXIgKG9wdGlvbiwgZGVmYXVsdCBpcyAwKQorCitZb3UgY2FuIHNwZWNpZnkgdXAgdG8gZm91ciBjaGlwcyAoOCBjaGFubmVscykuIElmIHRoaXMgaXMgbm90IGVub3VnaCwKK2p1c3QgY2hhbmdlCisKKwkjZGVmaW5lIE1BWFNDQyA0CisKK3RvIGEgaGlnaGVyIHZhbHVlLgorCitFeGFtcGxlIGZvciB0aGUgQkFZQ09NIFVTQ0M6CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK2NoaXAgICAgMQorZGF0YV9hICAweDMwMCAgICAgICAgICAgICAgICAgICAjIGRhdGEgcG9ydCBBCitjdHJsX2EgIDB4MzA0ICAgICAgICAgICAgICAgICAgICMgY29udHJvbCBwb3J0IEEKK2RhdGFfYiAgMHgzMDEgICAgICAgICAgICAgICAgICAgIyBkYXRhIHBvcnQgQgorY3RybF9iICAweDMwNSAgICAgICAgICAgICAgICAgICAjIGNvbnRyb2wgcG9ydCBCCitpcnEgICAgIDUgICAgICAgICAgICAgICAgICAgICAgICMgSVJRIE5vLiA1ICgjKQorYm9hcmQgICBCQVlDT00gICAgICAgICAgICAgICAgICAjIGhhcmR3YXJlIHR5cGUgKCopCisjCisjIFNDQyBjaGlwIDIKKyMKK2NoaXAgICAgMgorZGF0YV9hICAweDMwMgorY3RybF9hICAweDMwNgorZGF0YV9iICAweDMwMworY3RybF9iICAweDMwNworYm9hcmQgICBCQVlDT00KKworQW4gZXhhbXBsZSBmb3IgYSBQQTBIWlAgY2FyZDoKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK2NoaXAgMQorZGF0YV9hIDB4MTUzCitkYXRhX2IgMHgxNTEKK2N0cmxfYSAweDE1MgorY3RybF9iIDB4MTUwCitpcnEgOQorcGNsb2NrIDQ5MTUyMDAKK2JvYXJkIFBBMEhaUAordmVjdG9yIDB4MTY4Citlc2NjIG5vCisjCisjCisjCitjaGlwIDIKK2RhdGFfYSAweDE1NworZGF0YV9iIDB4MTU1CitjdHJsX2EgMHgxNTYKK2N0cmxfYiAweDE1NAoraXJxIDkKK3BjbG9jayA0OTE1MjAwCitib2FyZCBQQTBIWlAKK3ZlY3RvciAweDE2OAorZXNjYyBubworCitBIERSU0kgd291bGQgc2hvdWxkIHByb2JhYmx5IHdvcmsgd2l0aCB0aGlzOgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyhhY3R1YWxseTogdHdvIERSU0kgY2FyZHMuLi4pCisKK2NoaXAgMQorZGF0YV9hIDB4MzAzCitkYXRhX2IgMHgzMDEKK2N0cmxfYSAweDMwMgorY3RybF9iIDB4MzAwCitpcnEgNworcGNsb2NrIDQ5MTUyMDAKK2JvYXJkIERSU0kKK2VzY2Mgbm8KKyMKKyMKKyMKK2NoaXAgMgorZGF0YV9hIDB4MzEzCitkYXRhX2IgMHgzMTEKK2N0cmxfYSAweDMxMgorY3RybF9iIDB4MzEwCitpcnEgNworcGNsb2NrIDQ5MTUyMDAKK2JvYXJkIERSU0kKK2VzY2Mgbm8KKworTm90ZSB0aGF0IHlvdSBjYW5ub3QgdXNlIHRoZSBvbi1ib2FyZCBiYXVkcmF0ZSBnZW5lcmF0b3Igb2ZmIERSU0kKK2NhcmRzLiBVc2UgIm1vZGUgZHBsbCIgZm9yIGNsb2NrIHNvdXJjZSAoc2VlIGJlbG93KS4KKworVGhpcyBpcyBiYXNlZCBvbiBpbmZvcm1hdGlvbiBwcm92aWRlZCBieSBNaWtlIEJpbG93IChhbmQgdmVyaWZpZWQKK2J5IFBhdWwgSGVsYXkpCisKK1RoZSB1dGlsaXR5ICJnZW5jZmciCistLS0tLS0tLS0tLS0tLS0tLS0tLQorCitJZiB5b3Ugb25seSBrbm93IHRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgUEUxQ0hMIGRyaXZlciBmb3IgRE9TLAorcnVuIGdlbmNmZy4gSXQgd2lsbCBnZW5lcmF0ZSB0aGUgY29ycmVjdCBwb3J0IGFkZHJlc3NlcyAoSSBob3BlKS4KK0l0cyBwYXJhbWV0ZXJzIGFyZSBleGFjdGx5IHRoZSBzYW1lIGFzIHRoZSBvbmVzIHlvdSB1c2Ugd2l0aAordGhlICJhdHRhY2ggc2NjIiBjb21tYW5kIGluIG5ldCwgZXhjZXB0IHRoYXQgdGhlIHN0cmluZyAiaW5pdCIgbXVzdCAKK25vdCBhcHBlYXIuIEV4YW1wbGU6CisKK2dlbmNmZyAyIDB4MTUwIDQgMiAwIDEgMHgxNjggOSA0OTE1MjAwIAorCit3aWxsIHByaW50IGEgc2tlbGV0b24gejg1MzBkcnYuY29uZiBmb3IgdGhlIE9wdG9TQ0MgdG8gc3Rkb3V0LgorCitnZW5jZmcgMiAweDMwMCAyIDQgNSAtNCAwIDcgNDkxNTIwMCAweDEwCisKK2RvZXMgdGhlIHNhbWUgZm9yIHRoZSBCQVlDT00gVVNDQyBjYXJkLiBJbiBteSBvcGluaW9uIGl0IGlzIG11Y2ggZWFzaWVyCit0byBlZGl0IHNjY19jb25maWcuaC4uLiAKKworCisxLjIuMiBjaGFubmVsIGNvbmZpZ3VyYXRpb24KKz09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitUaGUgY2hhbm5lbCBkZWZpbml0aW9uIGlzIGRpdmlkZWQgaW50byB0aHJlZSBzdWIgc2VjdGlvbnMgZm9yIGVhY2gKK2NoYW5uZWw6CisKK0FuIGV4YW1wbGUgZm9yIHNjYzA6CisKKyMgREVWSUNFCisKK2RldmljZSBzY2MwCSMgdGhlIGRldmljZSBmb3IgdGhlIGZvbGxvd2luZyBwYXJhbXMKKworIyBNT0RFTSAvIEJVRkZFUlMKKworc3BlZWQgMTIwMAkJIyB0aGUgZGVmYXVsdCBiYXVkcmF0ZQorY2xvY2sgZHBsbAkJIyBjbG9jayBzb3VyY2U6IAorCQkJIyAJZHBsbCAgICAgPSBub3JtYWwgaGFsZiBkdXBsZXggb3BlcmF0aW9uCisJCQkjIAlleHRlcm5hbCA9IE1PREVNIHByb3ZpZGVzIG93biBSeC9UeCBjbG9jaworCQkJIwlkaXZpZGVyICA9IHVzZSBmdWxsIGR1cGxleCBkaXZpZGVyIGlmCisJCQkjCQkgICBpbnN0YWxsZWQgKDEpCittb2RlIG5yemkJCSMgSERMQyBlbmNvZGluZyBtb2RlCisJCQkjCW5yemkgPSAxazIgTU9ERU0sIEczUlVIIDlrNiBNT0RFTQorCQkJIwlucnogID0gREY5SUMgOWs2IE1PREVNCisJCQkjCitidWZzaXplCTM4NAkJIyBzaXplIG9mIGJ1ZmZlcnMuIE5vdGUgdGhhdCB0aGlzIG11c3QgaW5jbHVkZQorCQkJIyB0aGUgQVguMjUgaGVhZGVyLCBub3Qgb25seSB0aGUgZGF0YSBmaWVsZCEKKwkJCSMgKG9wdGlvbmFsLCBkZWZhdWx0cyB0byAzODQpCisKKyMgS0lTUyAoTGF5ZXIgMSkKKwordHhkZWxheSAzNiAgICAgICAgICAgICAgIyAoc2VlIGNoYXB0ZXIgMS40KQorcGVyc2lzdCA2NAorc2xvdCAgICA4Cit0YWlsICAgIDgKK2Z1bGxkdXAgMAord2FpdCAgICAxMgorbWluICAgICAzCittYXhrZXkgIDcKK2lkbGUgICAgMworbWF4ZGVmICAxMjAKK2dyb3VwICAgMAordHhvZmYgICBvZmYKK3NvZnRkY2Qgb24gICAgICAgICAgICAgICAgICAgCitzbGlwICAgIG9mZgorCitUaGUgb3JkZXIgV0lUSElOIHRoZXNlIHNlY3Rpb25zIGlzIHVuaW1wb3J0YW50LiBUaGUgb3JkZXIgT0YgdGhlc2UKK3NlY3Rpb25zIElTIGltcG9ydGFudC4gVGhlIE1PREVNIHBhcmFtZXRlcnMgYXJlIHNldCB3aXRoIHRoZSBmaXJzdAorcmVjb2duaXplZCBLSVNTIHBhcmFtZXRlci4uLgorCitQbGVhc2Ugbm90ZSB0aGF0IHlvdSBjYW4gaW5pdGlhbGl6ZSB0aGUgYm9hcmQgb25seSBvbmNlIGFmdGVyIGJvb3QKKyhvciBpbnNtb2QpLiBZb3UgY2FuIGNoYW5nZSBhbGwgcGFyYW1ldGVycyBidXQgIm1vZGUiIGFuZCAiY2xvY2siIAorbGF0ZXIgd2l0aCB0aGUgU2NjcGFyYW0gcHJvZ3JhbSBvciB0aHJvdWdoIEtJU1MuIEp1c3QgdG8gYXZvaWQgCitzZWN1cml0eSBob2xlcy4uLiAKKworKDEpIHRoaXMgZGl2aWRlciBpcyB1c3VhbGx5IG1vdW50ZWQgb24gdGhlIFNDQy1QQkMgKFBBMEhaUCkgb3Igbm90CisgICAgcHJlc2VudCBhdCBhbGwgKEJheUNvbSkuIEl0IGZlZWRzIGJhY2sgdGhlIG91dHB1dCBvZiB0aGUgRFBMTCAKKyAgICAoZGlnaXRhbCBwbGwpIGFzIHRyYW5zbWl0IGNsb2NrLiBVc2luZyB0aGlzIG1vZGUgd2l0aG91dCBhIGRpdmlkZXIgCisgICAgaW5zdGFsbGVkIHdpbGwgbm9ybWFsbHkgcmVzdWx0IGluIGtleWluZyB0aGUgdHJhbnNjZWl2ZXIgdW50aWwgCisgICAgbWF4a2V5IGV4cGlyZXMgLS0tIG9mIGNvdXJzZSB3aXRob3V0IHNlbmRpbmcgYW55dGhpbmcgKHVzZWZ1bCkuCisKKzIuIEF0dGFjaG1lbnQgb2YgYSBjaGFubmVsIGJ5IHlvdXIgQVguMjUgc29mdHdhcmUKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworMi4xIEtlcm5lbCBBWC4yNQorPT09PT09PT09PT09PT09PQorCitUbyBzZXQgdXAgYW4gQVguMjUgZGV2aWNlIHlvdSBjYW4gc2ltcGx5IHR5cGU6CisKKwlpZmNvbmZpZyBzY2MwIDQ0LjEyOC4xLjEgaHcgYXgyNSBkbDB0aGEtNworCitUaGlzIHdpbGwgY3JlYXRlIGEgbmV0d29yayBpbnRlcmZhY2Ugd2l0aCB0aGUgSVAgbnVtYmVyIDQ0LjEyOC4yMC4xMDcgCithbmQgdGhlIGNhbGxzaWduICJkbDB0aGEiLiBJZiB5b3UgZG8gbm90IGhhdmUgYW55IElQIG51bWJlciAoeWV0KSB5b3UgCitjYW4gdXNlIGFueSBvZiB0aGUgNDQuMTI4LjAuMCBuZXR3b3JrLiBOb3RlIHRoYXQgeW91IGRvIG5vdCBuZWVkIAorYXhhdHRhY2guIFRoZSBwdXJwb3NlIG9mIGF4YXR0YWNoIChsaWtlIHNsYXR0YWNoKSBpcyB0byBjcmVhdGUgYSBLSVNTIAorbmV0d29yayBkZXZpY2UgbGlua2VkIHRvIGEgVFRZLiBQbGVhc2UgcmVhZCB0aGUgZG9jdW1lbnRhdGlvbiBvZiB0aGUgCitheDI1LXV0aWxzIGFuZCB0aGUgQVguMjUtSE9XVE8gdG8gbGVhcm4gaG93IHRvIHNldCB0aGUgcGFyYW1ldGVycyBvZgordGhlIGtlcm5lbCBBWC4yNS4KKworMi4yIE5PUywgTkVUIGFuZCBURktJU1MKKz09PT09PT09PT09PT09PT09PT09PT09CisKK1NpbmNlIHRoZSBUVFkgZHJpdmVyIChha2EgS0lTUyBUTkMgZW11bGF0aW9uKSBpcyBnb25lIHlvdSBuZWVkCit0byBlbXVsYXRlIHRoZSBvbGQgYmVoYXZpb3VyLiBUaGUgY29zdCBvZiB1c2luZyB0aGVzZSBwcm9ncmFtcyBpcwordGhhdCB5b3UgcHJvYmFibHkgbmVlZCB0byBjb21waWxlIHRoZSBrZXJuZWwgQVguMjUsIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlcgoreW91IGFjdHVhbGx5IHVzZSBpdCBvciBub3QuIEZpcnN0IHNldHVwIHlvdXIgL2V0Yy9heDI1L2F4cG9ydHMsCitmb3IgZXhhbXBsZToKKworCTlrNglkbDB0aGEtOSAgOTYwMCAgMjU1IDQgOTYwMCBiYXVkIHBvcnQgKHNjYzMpCisJYXhsaW5rCWRsMHRoYS0xNSAzODQwMCAyNTUgNCBMaW5rIHRvIE5PUworCitOb3cgImlmY29uZmlnIiB0aGUgc2NjIGRldmljZToKKworCWlmY29uZmlnIHNjYzMgNDQuMTI4LjEuMSBodyBheDI1IGRsMHRoYS05CisKK1lvdSBjYW4gbm93IGF4YXR0YWNoIGEgcHNldWRvLVRUWToKKworCWF4YXR0YWNoIC9kZXYvcHR5czAgYXhsaW5rCisKK2FuZCBzdGFydCB5b3VyIE5PUyBhbmQgYXR0YWNoIC9kZXYvcHR5czAgdGhlcmUuIFRoZSBwcm9ibGVtIGlzIHRoYXQKK05PUyBpcyByZWFjaGFibGUgb25seSB2aWEgZGlnaXBlYXRpbmcgdGhyb3VnaCB0aGUga2VybmVsIEFYLjI1CisoZGlzYXN0cm91cyBvbiBhIERBTUEgY29udHJvbGxlZCBjaGFubmVsKS4gVG8gc29sdmUgdGhpcyBwcm9ibGVtLAorY29uZmlndXJlICJyeGVjaG8iIHRvIGVjaG8gdGhlIGluY29taW5nIGZyYW1lcyBmcm9tICI5azYiIHRvICJheGxpbmsiCithbmQgb3V0Z29pbmcgZnJhbWVzIGZyb20gImF4bGluayIgdG8gIjlrNiIgYW5kIHN0YXJ0OgorCisJcnhlY2hvCisKK09yIHNpbXBseSB1c2UgImtpc3NicmlkZ2UiIGNvbWluZyB3aXRoIHo4NTMwZHJ2LXV0aWxzOgorCisJaWZjb25maWcgc2NjMyBodyBheDI1IGRsMHRoYS05CisJa2lzc2JyaWRnZSBzY2MzIC9kZXYvcHR5czAKKworCiszLiBBZGp1c3RtZW50IGFuZCBEaXNwbGF5IG9mIHBhcmFtZXRlcnMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCiszLjEgRGlzcGxheWluZyBTQ0MgUGFyYW1ldGVyczoKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitPbmNlIGEgU0NDIGNoYW5uZWwgaGFzIGJlZW4gYXR0YWNoZWQsIHRoZSBwYXJhbWV0ZXIgc2V0dGluZ3MgYW5kIAorc29tZSBzdGF0aXN0aWMgaW5mb3JtYXRpb24gY2FuIGJlIHNob3duIHVzaW5nIHRoZSBwYXJhbSBwcm9ncmFtOgorCitkbDFia2UtdTp+JCBzY2NzdGF0IHNjYzAKKworUGFyYW1ldGVyczoKKworc3BlZWQgICAgICAgOiAxMjAwIGJhdWQKK3R4ZGVsYXkgICAgIDogMzYKK3BlcnNpc3QgICAgIDogMjU1CitzbG90dGltZSAgICA6IDAKK3R4dGFpbCAgICAgIDogOAorZnVsbGR1cCAgICAgOiAxCit3YWl0dGltZSAgICA6IDEyCittaW50aW1lICAgICA6IDMgc2VjCittYXhrZXl1cCAgICA6IDcgc2VjCitpZGxldGltZSAgICA6IDMgc2VjCittYXhkZWZlciAgICA6IDEyMCBzZWMKK2dyb3VwICAgICAgIDogMHgwMAordHhvZmYgICAgICAgOiBvZmYKK3NvZnRkY2QgICAgIDogb24KK1NMSVAgICAgICAgIDogb2ZmCisKK1N0YXR1czoKKworSERMQyAgICAgICAgICAgICAgICAgIFo4NTMwICAgICAgICAgICBJbnRlcnJ1cHRzICAgICAgICAgQnVmZmVycworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK1NlbnQgICAgICAgOiAgICAgMjczICBSeE92ZXIgOiAgICAgMCAgUnhJbnRzIDogICAxMjUwNzQgIFNpemUgICAgOiAgMzg0CitSZWNlaXZlZCAgIDogICAgMTA5NSAgVHhVbmRlcjogICAgIDAgIFR4SW50cyA6ICAgICA0Njg0ICBOb1NwYWNlIDogICAgMAorUnhFcnJvcnMgICA6ICAgIDE1OTEgICAgICAgICAgICAgICAgICBFeEludHMgOiAgICAxMTc3NgorVHhFcnJvcnMgICA6ICAgICAgIDAgICAgICAgICAgICAgICAgICBTcEludHMgOiAgICAgMTUwMworVHggU3RhdGUgICA6ICAgIGlkbGUKKworCitUaGUgc3RhdHVzIGluZm8gc2hvd24gaXM6CisKK1NlbnQJCS0gbnVtYmVyIG9mIGZyYW1lcyB0cmFuc21pdHRlZAorUmVjZWl2ZWQJLSBudW1iZXIgb2YgZnJhbWVzIHJlY2VpdmVkCitSeEVycm9ycwktIG51bWJlciBvZiByZWNlaXZlIGVycm9ycyAoQ1JDLCBBQk9SVCkKK1R4RXJyb3JzCS0gbnVtYmVyIG9mIGRpc2NhcmRlZCBUeCBmcmFtZXMgKGR1ZSB0byB2YXJpb3VzIHJlYXNvbnMpIAorVHggU3RhdGUJLSBzdGF0dXMgb2YgdGhlIFR4IGludGVycnVwdCBoYW5kbGVyOiBpZGxlL2J1c3kvYWN0aXZlL3RhaWwgKDIpCitSeE92ZXIJCS0gbnVtYmVyIG9mIHJlY2VpdmVyIG92ZXJydW5zCitUeFVuZGVyCQktIG51bWJlciBvZiB0cmFuc21pdHRlciB1bmRlcnJ1bnMKK1J4SW50cwkJLSBudW1iZXIgb2YgcmVjZWl2ZXIgaW50ZXJydXB0cworVHhJbnRzCQktIG51bWJlciBvZiB0cmFuc21pdHRlciBpbnRlcnJ1cHRzCitFcEludHMJCS0gbnVtYmVyIG9mIHJlY2VpdmVyIHNwZWNpYWwgY29uZGl0aW9uIGludGVycnVwdHMKK1NwSW50cwkJLSBudW1iZXIgb2YgZXh0ZXJuYWwvc3RhdHVzIGludGVycnVwdHMKK1NpemUJCS0gbWF4aW11bSBzaXplIG9mIGFuIEFYLjI1IGZyYW1lICgqd2l0aCogQVguMjUgaGVhZGVycyEpCitOb1NwYWNlCQktIG51bWJlciBvZiB0aW1lcyBhIGJ1ZmZlciBjb3VsZCBub3QgZ2V0IGFsbG9jYXRlZAorCitBbiBvdmVycnVuIGlzIGFibm9ybWFsLiBJZiBsb3RzIG9mIHRoZXNlIG9jY3VyLCB0aGUgcHJvZHVjdCBvZgorYmF1ZHJhdGUgYW5kIG51bWJlciBvZiBpbnRlcmZhY2VzIGlzIHRvbyBoaWdoIGZvciB0aGUgcHJvY2Vzc2luZworcG93ZXIgb2YgeW91ciBjb21wdXRlci4gTm9TcGFjZSBlcnJvcnMgYXJlIHVubGlrZWx5IHRvIGJlIGNhdXNlZCBieSB0aGUKK2RyaXZlciBvciB0aGUga2VybmVsIEFYLjI1LgorCisKKzMuMiBTZXR0aW5nIFBhcmFtZXRlcnMKKz09PT09PT09PT09PT09PT09PT09PT0KKworCitUaGUgc2V0dGluZyBvZiBwYXJhbWV0ZXJzIG9mIHRoZSBlbXVsYXRlZCBLSVNTIFROQyBpcyBkb25lIGluIHRoZSAKK3NhbWUgd2F5IGluIHRoZSBTQ0MgZHJpdmVyLiBZb3UgY2FuIGNoYW5nZSBwYXJhbWV0ZXJzIGJ5IHVzaW5nCit0aGUga2lzc3Bhcm1zIHByb2dyYW0gZnJvbSB0aGUgYXgyNS11dGlscyBwYWNrYWdlIG9yIHVzZSB0aGUgcHJvZ3JhbSAKKyJzY2NwYXJhbSI6CisKKyAgICAgc2NjcGFyYW0gPGRldmljZT4gPHBhcmFtbmFtZT4gPGRlY2ltYWwtfGhleGFkZWNpbWFsIHZhbHVlPgorCitZb3UgY2FuIGNoYW5nZSB0aGUgZm9sbG93aW5nIHBhcmFtZXRlcnM6CisKK3BhcmFtCSAgICA6IHZhbHVlCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3NwZWVkICAgICAgIDogMTIwMAordHhkZWxheSAgICAgOiAzNgorcGVyc2lzdCAgICAgOiAyNTUKK3Nsb3R0aW1lICAgIDogMAordHh0YWlsICAgICAgOiA4CitmdWxsZHVwICAgICA6IDEKK3dhaXR0aW1lICAgIDogMTIKK21pbnRpbWUgICAgIDogMworbWF4a2V5dXAgICAgOiA3CitpZGxldGltZSAgICA6IDMKK21heGRlZmVyICAgIDogMTIwCitncm91cCAgICAgICA6IDB4MDAKK3R4b2ZmICAgICAgIDogb2ZmCitzb2Z0ZGNkICAgICA6IG9uCitTTElQICAgICAgICA6IG9mZgorCisKK1RoZSBwYXJhbWV0ZXJzIGhhdmUgdGhlIGZvbGxvd2luZyBtZWFuaW5nOgorCitzcGVlZDoKKyAgICAgVGhlIGJhdWRyYXRlIG9uIHRoaXMgY2hhbm5lbCBpbiBiaXRzL3NlYworCisgICAgIEV4YW1wbGU6IHNjY3BhcmFtIC9kZXYvc2NjMyBzcGVlZCA5NjAwCisKK3R4ZGVsYXk6CisgICAgIFRoZSBkZWxheSAoaW4gdW5pdHMgb2YgMTAgbXMpIGFmdGVyIGtleWluZyBvZiB0aGUgCisgICAgIHRyYW5zbWl0dGVyLCB1bnRpbCB0aGUgZmlyc3QgYnl0ZSBpcyBzZW50LiBUaGlzIGlzIHVzdWFsbHkgCisgICAgIGNhbGxlZCAiVFhERUxBWSIgaW4gYSBUTkMuICBXaGVuIDAgaXMgc3BlY2lmaWVkLCB0aGUgZHJpdmVyIAorICAgICB3aWxsIGp1c3Qgd2FpdCB1bnRpbCB0aGUgQ1RTIHNpZ25hbCBpcyBhc3NlcnRlZC4gVGhpcyAKKyAgICAgYXNzdW1lcyB0aGUgcHJlc2VuY2Ugb2YgYSB0aW1lciBvciBvdGhlciBjaXJjdWl0cnkgaW4gdGhlIAorICAgICBNT0RFTSBhbmQvb3IgdHJhbnNtaXR0ZXIsIHRoYXQgYXNzZXJ0cyBDVFMgd2hlbiB0aGUgCisgICAgIHRyYW5zbWl0dGVyIGlzIHJlYWR5IGZvciBkYXRhLgorICAgICBBIG5vcm1hbCB2YWx1ZSBvZiB0aGlzIHBhcmFtZXRlciBpcyAzMC0zNi4KKworICAgICBFeGFtcGxlOiBzY2NwYXJhbSAvZGV2L3NjYzAgdHhkIDIwCisKK3BlcnNpc3Q6CisgICAgIFRoaXMgaXMgdGhlIHByb2JhYmlsaXR5IHRoYXQgdGhlIHRyYW5zbWl0dGVyIHdpbGwgYmUga2V5ZWQgCisgICAgIHdoZW4gdGhlIGNoYW5uZWwgaXMgZm91bmQgdG8gYmUgZnJlZS4gIEl0IGlzIGEgdmFsdWUgZnJvbSAwIAorICAgICB0byAyNTUsIGFuZCB0aGUgcHJvYmFiaWxpdHkgaXMgKHZhbHVlKzEpLzI1Ni4gIFRoZSB2YWx1ZSAKKyAgICAgc2hvdWxkIGJlIHNvbWV3aGVyZSBuZWFyIDUwLTYwLCBhbmQgc2hvdWxkIGJlIGxvd2VyZWQgd2hlbiAKKyAgICAgdGhlIGNoYW5uZWwgaXMgdXNlZCBtb3JlIGhlYXZpbHkuCisKKyAgICAgRXhhbXBsZTogc2NjcGFyYW0gL2Rldi9zY2MyIHBlcnNpc3QgMjAKKworc2xvdHRpbWU6CisgICAgIFRoaXMgaXMgdGhlIHRpbWUgYmV0d2VlbiBzYW1wbGVzIG9mIHRoZSBjaGFubmVsLiBJdCBpcyAKKyAgICAgZXhwcmVzc2VkIGluIHVuaXRzIG9mIDEwIG1zLiAgQWJvdXQgMjAwLTMwMCBtcyAodmFsdWUgMjAtMzApIAorICAgICBzZWVtcyB0byBiZSBhIGdvb2QgdmFsdWUuCisKKyAgICAgRXhhbXBsZTogc2NjcGFyYW0gL2Rldi9zY2MwIHNsb3QgMjAKKwordGFpbDoKKyAgICAgVGhlIHRpbWUgdGhlIHRyYW5zbWl0dGVyIHdpbGwgcmVtYWluIGtleWVkIGFmdGVyIHRoZSBsYXN0IAorICAgICBieXRlIG9mIGEgcGFja2V0IGhhcyBiZWVuIHRyYW5zZmVycmVkIHRvIHRoZSBTQ0MuIFRoaXMgaXMgCisgICAgIG5lY2Vzc2FyeSBiZWNhdXNlIHRoZSBDUkMgYW5kIGEgZmxhZyBzdGlsbCBoYXZlIHRvIGxlYXZlIHRoZSAKKyAgICAgU0NDIGJlZm9yZSB0aGUgdHJhbnNtaXR0ZXIgaXMga2V5ZWQgZG93bi4gVGhlIHZhbHVlIGRlcGVuZHMgCisgICAgIG9uIHRoZSBiYXVkcmF0ZSBzZWxlY3RlZC4gIEEgZmV3IGNoYXJhY3RlciB0aW1lcyBzaG91bGQgYmUgCisgICAgIHN1ZmZpY2llbnQsIGUuZy4gNDBtcyBhdCAxMjAwIGJhdWQuICh2YWx1ZSA0KQorICAgICBUaGUgdmFsdWUgb2YgdGhpcyBwYXJhbWV0ZXIgaXMgaW4gMTAgbXMgdW5pdHMuCisKKyAgICAgRXhhbXBsZTogc2NjcGFyYW0gL2Rldi9zY2MyIDQKKworZnVsbDoKKyAgICAgVGhlIGZ1bGwtZHVwbGV4IG1vZGUgc3dpdGNoLiBUaGlzIGNhbiBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZyAKKyAgICAgdmFsdWVzOgorCisgICAgIDA6ICAgVGhlIGludGVyZmFjZSB3aWxsIG9wZXJhdGUgaW4gQ1NNQSBtb2RlICh0aGUgbm9ybWFsIAorICAgICAgICAgIGhhbGYtZHVwbGV4IHBhY2tldCByYWRpbyBvcGVyYXRpb24pCisgICAgIDE6ICAgRnVsbGR1cGxleCBtb2RlLCBpLmUuIHRoZSB0cmFuc21pdHRlciB3aWxsIGJlIGtleWVkIGF0IAorICAgICAgICAgIGFueSB0aW1lLCB3aXRob3V0IGNoZWNraW5nIHRoZSByZWNlaXZlZCBjYXJyaWVyLiAgSXQgCisgICAgICAgICAgd2lsbCBiZSB1bmtleWVkIHdoZW4gdGhlcmUgYXJlIG5vIHBhY2tldHMgdG8gYmUgc2VudC4KKyAgICAgMjogICBMaWtlIDEsIGJ1dCB0aGUgdHJhbnNtaXR0ZXIgd2lsbCByZW1haW4ga2V5ZWQsIGFsc28gCisgICAgICAgICAgd2hlbiB0aGVyZSBhcmUgbm8gcGFja2V0cyB0byBiZSBzZW50LiAgRmxhZ3Mgd2lsbCBiZSAKKyAgICAgICAgICBzZW50IGluIHRoYXQgY2FzZSwgdW50aWwgYSB0aW1lb3V0IChwYXJhbWV0ZXIgMTApIAorICAgICAgICAgIG9jY3Vycy4KKworICAgICBFeGFtcGxlOiBzY2NwYXJhbSAvZGV2L3NjYzAgZnVsbGR1cCBvZmYKKword2FpdDoKKyAgICAgVGhlIGluaXRpYWwgd2FpdHRpbWUgYmVmb3JlIGFueSB0cmFuc21pdCBhdHRlbXB0LCBhZnRlciB0aGUgCisgICAgIGZyYW1lIGhhcyBiZWVuIHF1ZXVlIGZvciB0cmFuc21pdC4gIFRoaXMgaXMgdGhlIGxlbmd0aCBvZiAKKyAgICAgdGhlIGZpcnN0IHNsb3QgaW4gQ1NNQSBtb2RlLiAgSW4gZnVsbCBkdXBsZXggbW9kZXMgaXQgaXMKKyAgICAgc2V0IHRvIDAgZm9yIG1heGltdW0gcGVyZm9ybWFuY2UuCisgICAgIFRoZSB2YWx1ZSBvZiB0aGlzIHBhcmFtZXRlciBpcyBpbiAxMCBtcyB1bml0cy4gCisKKyAgICAgRXhhbXBsZTogc2NjcGFyYW0gL2Rldi9zY2MxIHdhaXQgNAorCittYXhrZXk6CisgICAgIFRoZSBtYXhpbWFsIHRpbWUgdGhlIHRyYW5zbWl0dGVyIHdpbGwgYmUga2V5ZWQgdG8gc2VuZCAKKyAgICAgcGFja2V0cywgaW4gc2Vjb25kcy4gIFRoaXMgY2FuIGJlIHVzZWZ1bCBvbiBidXN5IENTTUEgCisgICAgIGNoYW5uZWxzLCB0byBhdm9pZCAiZ2V0dGluZyBhIGJhZCByZXB1dGF0aW9uIiB3aGVuIHlvdSBhcmUgCisgICAgIGdlbmVyYXRpbmcgYSBsb3Qgb2YgdHJhZmZpYy4gIEFmdGVyIHRoZSBzcGVjaWZpZWQgdGltZSBoYXMgCisgICAgIGVsYXBzZWQsIG5vIG5ldyBmcmFtZSB3aWxsIGJlIHN0YXJ0ZWQuIEluc3RlYWQsIHRoZSB0cmFucy0KKyAgICAgbWl0dGVyIHdpbGwgYmUgc3dpdGNoZWQgb2ZmIGZvciBhIHNwZWNpZmllZCB0aW1lIChwYXJhbWV0ZXIgCisgICAgIG1pbiksIGFuZCB0aGVuIHRoZSBzZWxlY3RlZCBhbGdvcml0aG0gZm9yIGtleXVwIHdpbGwgYmUgCisgICAgIHN0YXJ0ZWQgYWdhaW4uCisgICAgIFRoZSB2YWx1ZSAwIGFzIHdlbGwgYXMgIm9mZiIgd2lsbCBkaXNhYmxlIHRoaXMgZmVhdHVyZSwgCisgICAgIGFuZCBhbGxvdyBpbmZpbml0ZSB0cmFuc21pc3Npb24gdGltZS4gCisKKyAgICAgRXhhbXBsZTogc2NjcGFyYW0gL2Rldi9zY2MwIG1heGsgMjAKKworbWluOgorICAgICBUaGlzIGlzIHRoZSB0aW1lIHRoZSB0cmFuc21pdHRlciB3aWxsIGJlIHN3aXRjaGVkIG9mZiB3aGVuIAorICAgICB0aGUgbWF4aW11bSB0cmFuc21pc3Npb24gdGltZSBpcyBleGNlZWRlZC4KKworICAgICBFeGFtcGxlOiBzY2NwYXJhbSAvZGV2L3NjYzMgbWluIDEwCisKK2lkbGUKKyAgICAgVGhpcyBwYXJhbWV0ZXIgc3BlY2lmaWVzIHRoZSBtYXhpbXVtIGlkbGUgdGltZSBpbiBmdWxsIGR1cGxleCAKKyAgICAgMiBtb2RlLCBpbiBzZWNvbmRzLiAgV2hlbiBubyBmcmFtZXMgaGF2ZSBiZWVuIHNlbnQgZm9yIHRoaXMgCisgICAgIHRpbWUsIHRoZSB0cmFuc21pdHRlciB3aWxsIGJlIGtleWVkIGRvd24uICBBIHZhbHVlIG9mIDAgaXMKKyAgICAgaGFzIHNhbWUgcmVzdWx0IGFzIHRoZSBmdWxsZHVwbGV4IG1vZGUgMS4gVGhpcyBwYXJhbWV0ZXIKKyAgICAgY2FuIGJlIGRpc2FibGVkLgorCisgICAgIEV4YW1wbGU6IHNjY3BhcmFtIC9kZXYvc2NjMiBpZGxlIG9mZgkjIHRyYW5zbWl0IGZvcmV2ZXIKKworbWF4ZGVmZXIKKyAgICAgVGhpcyBpcyB0aGUgbWF4aW11bSB0aW1lIChpbiBzZWNvbmRzKSB0byB3YWl0IGZvciBhIGZyZWUgY2hhbm5lbAorICAgICB0byBzZW5kLiBXaGVuIHRoaXMgdGltZXIgZXhwaXJlcyB0aGUgdHJhbnNtaXR0ZXIgd2lsbCBiZSBrZXllZCAKKyAgICAgSU1NRURJQVRFTFkuIElmIHlvdSBsb3ZlIHRvIGdldCB0cm91YmxlIHdpdGggb3RoZXIgdXNlcnMgeW91CisgICAgIHNob3VsZCBzZXQgdGhpcyB0byBhIHZlcnkgbG93IHZhbHVlIDstKQorCisgICAgIEV4YW1wbGU6IHNjY3BhcmFtIC9kZXYvc2NjMCBtYXhkZWZlciAyNDAJIyAyIG1pbnV0ZXMKKworCit0eG9mZjoKKyAgICAgV2hlbiB0aGlzIHBhcmFtZXRlciBoYXMgdGhlIHZhbHVlIDAsIHRoZSB0cmFuc21pc3Npb24gb2YgcGFja2V0cworICAgICBpcyBlbmFibGUuIE90aGVyd2lzZSBpdCBpcyBkaXNhYmxlZC4KKworICAgICBFeGFtcGxlOiBzY2NwYXJhbSAvZGV2L3NjYzIgdHhvZmYgb24KKworZ3JvdXA6CisgICAgIEl0IGlzIHBvc3NpYmxlIHRvIGJ1aWxkIHNwZWNpYWwgcmFkaW8gZXF1aXBtZW50IHRvIHVzZSBtb3JlIHRoYW4gCisgICAgIG9uZSBmcmVxdWVuY3kgb24gdGhlIHNhbWUgYmFuZCwgZS5nLiB1c2luZyBzZXZlcmFsIHJlY2VpdmVycyBhbmQgCisgICAgIG9ubHkgb25lIHRyYW5zbWl0dGVyIHRoYXQgY2FuIGJlIHN3aXRjaGVkIGJldHdlZW4gZnJlcXVlbmNpZXMuCisgICAgIEFsc28sIHlvdSBjYW4gY29ubmVjdCBzZXZlcmFsIHJhZGlvcyB0aGF0IGFyZSBhY3RpdmUgb24gdGhlIHNhbWUgCisgICAgIGJhbmQuICBJbiB0aGVzZSBjYXNlcywgaXQgaXMgbm90IHBvc3NpYmxlLCBvciBub3QgYSBnb29kIGlkZWEsIHRvIAorICAgICB0cmFuc21pdCBvbiBtb3JlIHRoYW4gb25lIGZyZXF1ZW5jeS4gIFRoZSBTQ0MgZHJpdmVyIHByb3ZpZGVzIGEgCisgICAgIG1ldGhvZCB0byBsb2NrIHRyYW5zbWl0dGVycyBvbiBkaWZmZXJlbnQgaW50ZXJmYWNlcywgdXNpbmcgdGhlIAorICAgICAicGFyYW0gPGludGVyZmFjZT4gZ3JvdXAgPHg+IiBjb21tYW5kLiAgVGhpcyB3aWxsIG9ubHkgd29yayB3aGVuIAorICAgICB5b3UgYXJlIHVzaW5nIENTTUEgbW9kZSAocGFyYW1ldGVyIGZ1bGwgPSAwKS4KKyAgICAgVGhlIG51bWJlciA8eD4gbXVzdCBiZSAwIGlmIHlvdSB3YW50IG5vIGdyb3VwIHJlc3RyaWN0aW9ucywgYW5kIAorICAgICBjYW4gYmUgY29tcHV0ZWQgYXMgZm9sbG93cyB0byBjcmVhdGUgcmVzdHJpY3RlZCBncm91cHM6CisgICAgIDx4PiBpcyB0aGUgc3VtIG9mIHNvbWUgT0NUQUwgbnVtYmVyczoKKworICAgICAyMDAgIFRoaXMgdHJhbnNtaXR0ZXIgd2lsbCBvbmx5IGJlIGtleWVkIHdoZW4gYWxsIG90aGVyIAorICAgICAgICAgIHRyYW5zbWl0dGVycyBpbiB0aGUgZ3JvdXAgYXJlIG9mZi4KKyAgICAgMTAwICBUaGlzIHRyYW5zbWl0dGVyIHdpbGwgb25seSBiZSBrZXllZCB3aGVuIHRoZSBjYXJyaWVyIAorICAgICAgICAgIGRldGVjdCBvZiBhbGwgb3RoZXIgaW50ZXJmYWNlcyBpbiB0aGUgZ3JvdXAgaXMgb2ZmLgorICAgICAweHggIEEgYnl0ZSB0aGF0IGNhbiBiZSB1c2VkIHRvIGRlZmluZSBkaWZmZXJlbnQgZ3JvdXBzLiAgCisgICAgICAgICAgSW50ZXJmYWNlcyBhcmUgaW4gdGhlIHNhbWUgZ3JvdXAsIHdoZW4gdGhlIGxvZ2ljYWwgQU5EIAorICAgICAgICAgIGJldHdlZW4gdGhlaXIgeHggdmFsdWVzIGlzIG5vbnplcm8uCisKKyAgICAgRXhhbXBsZXM6CisgICAgIFdoZW4gMiBpbnRlcmZhY2VzIHVzZSBncm91cCAyMDEsIHRoZWlyIHRyYW5zbWl0dGVycyB3aWxsIG5ldmVyIGJlIAorICAgICBrZXllZCBhdCB0aGUgc2FtZSB0aW1lLgorICAgICBXaGVuIDIgaW50ZXJmYWNlcyB1c2UgZ3JvdXAgMTAxLCB0aGUgdHJhbnNtaXR0ZXJzIHdpbGwgb25seSBrZXkgCisgICAgIHdoZW4gYm90aCBjaGFubmVscyBhcmUgY2xlYXIgYXQgdGhlIHNhbWUgdGltZS4gIFdoZW4gZ3JvdXAgMzAxLCAKKyAgICAgdGhlIHRyYW5zbWl0dGVycyB3aWxsIG5vdCBiZSBrZXllZCBhdCB0aGUgc2FtZSB0aW1lLgorCisgICAgIERvbid0IGZvcmdldCB0byBjb252ZXJ0IHRoZSBvY3RhbCBudW1iZXJzIGludG8gZGVjaW1hbCBiZWZvcmUKKyAgICAgeW91IHNldCB0aGUgcGFyYW1ldGVyLgorCisgICAgIEV4YW1wbGU6ICh0byBiZSB3cml0dGVuKQorCitzb2Z0ZGNkOgorICAgICB1c2UgYSBzb2Z0d2FyZSBkY2QgaW5zdGVhZCBvZiB0aGUgcmVhbCBvbmUuLi4gVXNlZnVsIGZvciBhIHZlcnkKKyAgICAgc2xvdyBzcXVlbGNoLgorCisgICAgIEV4YW1wbGU6IHNjY3BhcmFtIC9kZXYvc2NjMCBzb2Z0IG9uCisKKworNC4gUHJvYmxlbXMgCis9PT09PT09PT09PQorCitJZiB5b3UgaGF2ZSB0eC1wcm9ibGVtcyB3aXRoIHlvdXIgQmF5Q29tIFVTQ0MgY2FyZCBwbGVhc2UgY2hlY2sKK3RoZSBtYW51ZmFjdHVyZXIgb2YgdGhlIDg1MzAuIFNHUyBjaGlwcyBoYXZlIGEgc2xpZ2h0bHkKK2RpZmZlcmVudCB0aW1pbmcuIFRyeSBaaWxvZy4uLiAgQSBzb2x1dGlvbiBpcyB0byB3cml0ZSB0byByZWdpc3RlciA4IAoraW5zdGVhZCB0byB0aGUgZGF0YSBwb3J0LCBidXQgdGhpcyB3b24ndCB3b3JrIHdpdGggdGhlIEVTQ0MgY2hpcHMuIAorKlNJR0ghKgorCitBIHZlcnkgY29tbW9uIHByb2JsZW0gaXMgdGhhdCB0aGUgUFRUIGxvY2tzIHVudGlsIHRoZSBtYXhrZXl1cCB0aW1lcgorZXhwaXJlcywgYWx0aG91Z2ggaW50ZXJydXB0cyBhbmQgY2xvY2sgc291cmNlIGFyZSBjb3JyZWN0LiBJbiBtb3N0CitjYXNlcyBjb21waWxpbmcgdGhlIGRyaXZlciB3aXRoIENPTkZJR19TQ0NfREVMQVkgKHNldCB3aXRoCittYWtlIGNvbmZpZykgc29sdmVzIHRoZSBwcm9ibGVtcy4gRm9yIG1vcmUgaGludHMgcmVhZCB0aGUgKHBzZXVkbykgRkFRIAorYW5kIHRoZSBkb2N1bWVudGF0aW9uIGNvbWluZyB3aXRoIHo4NTMwZHJ2LXV0aWxzLgorCitJIGdvdCByZXBvcnRzIHRoYXQgdGhlIGRyaXZlciBoYXMgcHJvYmxlbXMgb24gc29tZSAzODYtYmFzZWQgc3lzdGVtcy4KKyhpLmUuIEFtc3RyYWQpIFRob3NlIHN5c3RlbXMgaGF2ZSBhIGJvZ3VzIEFUIGJ1cyB0aW1pbmcgd2hpY2ggd2lsbAorbGVhZCB0byBkZWxheWVkIGFuc3dlcnMgb24gaW50ZXJydXB0cy4gWW91IGNhbiByZWNvZ25pemUgdGhlc2UKK3Byb2JsZW1zIGJ5IGxvb2tpbmcgYXQgdGhlIG91dHB1dCBvZiBTY2NzdGF0IGZvciB0aGUgc3VzcGVjdGVkCitwb3J0LiBJZiBpdCBzaG93cyB1bmRlci0gYW5kIG92ZXJydW5zIHlvdSBvd24gc3VjaCBhIHN5c3RlbS4KKworRGVsYXllZCBwcm9jZXNzaW5nIG9mIHJlY2VpdmVkIGRhdGE6IFRoaXMgZGVwZW5kcyBvbgorCistIHRoZSBrZXJuZWwgdmVyc2lvbgorCistIGtlcm5lbCBwcm9maWxpbmcgY29tcGlsZWQgb3Igbm90CisKKy0gYSBoaWdoIGludGVycnVwdCBsb2FkCisKKy0gYSBoaWdoIGxvYWQgb2YgdGhlIG1hY2hpbmUgLS0tIHJ1bm5pbmcgWCwgWG1vcnBoLCBYViBhbmQgUG92cmF5LAorICB3aGlsZSBjb21waWxpbmcgdGhlIGtlcm5lbC4uLiBobW0gLi4uIGV2ZW4gd2l0aCAzMiBNQiBSQU0gLi4uICA7LSkKKyAgT3IgcnVubmluZyBhIG5hbWVkIGZvciB0aGUgd2hvbGUgLmFtcHIub3JnIGRvbWFpbiBvbiBhbiA4IE1CCisgIGJveC4uLgorCistIHVzaW5nIGluZm9ybWF0aW9uIGZyb20gcnhlY2hvIG9yIGtpc3NicmlkZ2UuCisKK0tlcm5lbCBwYW5pY3M6IHBsZWFzZSByZWFkIC9saW51eC9SRUFETUUgYW5kIGZpbmQgb3V0IGlmIGl0CityZWFsbHkgb2NjdXJyZWQgd2l0aGluIHRoZSBzY2MgZHJpdmVyLgorCitJZiB5b3UgY2Fubm90IHNvbHZlIGEgcHJvYmxlbSwgc2VuZCBtZQorCistIGEgZGVzY3JpcHRpb24gb2YgdGhlIHByb2JsZW0sCistIGluZm9ybWF0aW9uIG9uIHlvdXIgaGFyZHdhcmUgKGNvbXB1dGVyIHN5c3RlbSwgc2NjIGJvYXJkLCBtb2RlbSkKKy0geW91ciBrZXJuZWwgdmVyc2lvbgorLSB0aGUgb3V0cHV0IG9mIGNhdCAvcHJvYy9uZXQvejg1MzAKKworNC4gVGhvciBSTEMxMDAKKz09PT09PT09PT09PT09CisKK015c3RlcmlvdXNseSB0aGlzIGJvYXJkIHNlZW1zIG5vdCB0byB3b3JrIHdpdGggdGhlIGRyaXZlci4gQW55b25lCitnb3QgaXQgdXAtYW5kLXJ1bm5pbmc/CisKKworTWFueSB0aGFua3MgdG8gTGludXMgVG9ydmFsZHMgYW5kIEFsYW4gQ294IGZvciBpbmNsdWRpbmcgdGhlIGRyaXZlcgoraW4gdGhlIExpbnV4IHN0YW5kYXJkIGRpc3RyaWJ1dGlvbiBhbmQgdGhlaXIgc3VwcG9ydC4KKworSm9lcmcgUmV1dGVyCWFtcHItbmV0OiBkbDFia2VAZGIwcHJhLmFtcHIub3JnCisJCUFYLTI1ICAgOiBETDFCS0UgQCBEQjBBQkguI0JBWS5ERVUuRVUKKwkJSW50ZXJuZXQ6IGpyZXV0ZXJAeWFpbmEuZGUKKwkJV1dXICAgICA6IGh0dHA6Ly95YWluYS5kZS9qcmV1dGVyCg==