ICAgVGhlIFBDSSBFeHByZXNzIEFkdmFuY2VkIEVycm9yIFJlcG9ydGluZyBEcml2ZXIgR3VpZGUgSE9XVE8KCQlULiBMb25nIE5ndXllbgk8dG9tLmwubmd1eWVuQGludGVsLmNvbT4KCQlZYW5taW4gWmhhbmcJPHlhbm1pbi56aGFuZ0BpbnRlbC5jb20+CgkJCQkwNy8yOS8yMDA2CgoKMS4gT3ZlcnZpZXcKCjEuMSBBYm91dCB0aGlzIGd1aWRlCgpUaGlzIGd1aWRlIGRlc2NyaWJlcyB0aGUgYmFzaWNzIG9mIHRoZSBQQ0kgRXhwcmVzcyBBZHZhbmNlZCBFcnJvcgpSZXBvcnRpbmcgKEFFUikgZHJpdmVyIGFuZCBwcm92aWRlcyBpbmZvcm1hdGlvbiBvbiBob3cgdG8gdXNlIGl0LCBhcwp3ZWxsIGFzIGhvdyB0byBlbmFibGUgdGhlIGRyaXZlcnMgb2YgZW5kcG9pbnQgZGV2aWNlcyB0byBjb25mb3JtIHdpdGgKUENJIEV4cHJlc3MgQUVSIGRyaXZlci4KCjEuMiBDb3B5cmlnaHQgqSBJbnRlbCBDb3Jwb3JhdGlvbiAyMDA2LgoKMS4zIFdoYXQgaXMgdGhlIFBDSSBFeHByZXNzIEFFUiBEcml2ZXI/CgpQQ0kgRXhwcmVzcyBlcnJvciBzaWduYWxpbmcgY2FuIG9jY3VyIG9uIHRoZSBQQ0kgRXhwcmVzcyBsaW5rIGl0c2VsZgpvciBvbiBiZWhhbGYgb2YgdHJhbnNhY3Rpb25zIGluaXRpYXRlZCBvbiB0aGUgbGluay4gUENJIEV4cHJlc3MKZGVmaW5lcyB0d28gZXJyb3IgcmVwb3J0aW5nIHBhcmFkaWdtczogdGhlIGJhc2VsaW5lIGNhcGFiaWxpdHkgYW5kCnRoZSBBZHZhbmNlZCBFcnJvciBSZXBvcnRpbmcgY2FwYWJpbGl0eS4gVGhlIGJhc2VsaW5lIGNhcGFiaWxpdHkgaXMKcmVxdWlyZWQgb2YgYWxsIFBDSSBFeHByZXNzIGNvbXBvbmVudHMgcHJvdmlkaW5nIGEgbWluaW11bSBkZWZpbmVkCnNldCBvZiBlcnJvciByZXBvcnRpbmcgcmVxdWlyZW1lbnRzLiBBZHZhbmNlZCBFcnJvciBSZXBvcnRpbmcKY2FwYWJpbGl0eSBpcyBpbXBsZW1lbnRlZCB3aXRoIGEgUENJIEV4cHJlc3MgYWR2YW5jZWQgZXJyb3IgcmVwb3J0aW5nCmV4dGVuZGVkIGNhcGFiaWxpdHkgc3RydWN0dXJlIHByb3ZpZGluZyBtb3JlIHJvYnVzdCBlcnJvciByZXBvcnRpbmcuCgpUaGUgUENJIEV4cHJlc3MgQUVSIGRyaXZlciBwcm92aWRlcyB0aGUgaW5mcmFzdHJ1Y3R1cmUgdG8gc3VwcG9ydCBQQ0kKRXhwcmVzcyBBZHZhbmNlZCBFcnJvciBSZXBvcnRpbmcgY2FwYWJpbGl0eS4gVGhlIFBDSSBFeHByZXNzIEFFUgpkcml2ZXIgcHJvdmlkZXMgdGhyZWUgYmFzaWMgZnVuY3Rpb25zOgoKLQlHYXRoZXJzIHRoZSBjb21wcmVoZW5zaXZlIGVycm9yIGluZm9ybWF0aW9uIGlmIGVycm9ycyBvY2N1cnJlZC4KLQlSZXBvcnRzIGVycm9yIHRvIHRoZSB1c2Vycy4KLQlQZXJmb3JtcyBlcnJvciByZWNvdmVyeSBhY3Rpb25zLgoKQUVSIGRyaXZlciBvbmx5IGF0dGFjaGVzIHJvb3QgcG9ydHMgd2hpY2ggc3VwcG9ydCBQQ0ktRXhwcmVzcyBBRVIKY2FwYWJpbGl0eS4KCgoyLiBVc2VyIEd1aWRlCgoyLjEgSW5jbHVkZSB0aGUgUENJIEV4cHJlc3MgQUVSIFJvb3QgRHJpdmVyIGludG8gdGhlIExpbnV4IEtlcm5lbAoKVGhlIFBDSSBFeHByZXNzIEFFUiBSb290IGRyaXZlciBpcyBhIFJvb3QgUG9ydCBzZXJ2aWNlIGRyaXZlciBhdHRhY2hlZAp0byB0aGUgUENJIEV4cHJlc3MgUG9ydCBCdXMgZHJpdmVyLiBJZiBhIHVzZXIgd2FudHMgdG8gdXNlIGl0LCB0aGUgZHJpdmVyCmhhcyB0byBiZSBjb21waWxlZC4gT3B0aW9uIENPTkZJR19QQ0lFQUVSIHN1cHBvcnRzIHRoaXMgY2FwYWJpbGl0eS4gSXQKZGVwZW5kcyBvbiBDT05GSUdfUENJRVBPUlRCVVMsIHNvIHBscy4gc2V0IENPTkZJR19QQ0lFUE9SVEJVUz15IGFuZApDT05GSUdfUENJRUFFUiA9IHkuCgoyLjIgTG9hZCBQQ0kgRXhwcmVzcyBBRVIgUm9vdCBEcml2ZXIKVGhlcmUgaXMgYSBjYXNlIHdoZXJlIGEgc3lzdGVtIGhhcyBBRVIgc3VwcG9ydCBpbiBCSU9TLiBFbmFibGluZyB0aGUgQUVSClJvb3QgZHJpdmVyIGFuZCBoYXZpbmcgQUVSIHN1cHBvcnQgaW4gQklPUyBtYXkgcmVzdWx0IHVucHJlZGljdGFibGUKYmVoYXZpb3IuIFRvIGF2b2lkIHRoaXMgY29uZmxpY3QsIGEgc3VjY2Vzc2Z1bCBsb2FkIG9mIHRoZSBBRVIgUm9vdCBkcml2ZXIKcmVxdWlyZXMgQUNQSSBfT1NDIHN1cHBvcnQgaW4gdGhlIEJJT1MgdG8gYWxsb3cgdGhlIEFFUiBSb290IGRyaXZlciB0bwpyZXF1ZXN0IGZvciBuYXRpdmUgY29udHJvbCBvZiBBRVIuIFNlZSB0aGUgUENJIEZXIDMuMCBTcGVjaWZpY2F0aW9uIGZvcgpkZXRhaWxzIHJlZ2FyZGluZyBPU0MgdXNhZ2UuIEN1cnJlbnRseSwgbG90cyBvZiBmaXJtd2FyZXMgZG9uJ3QgcHJvdmlkZQpfT1NDIHN1cHBvcnQgd2hpbGUgdGhleSB1c2UgUENJIEV4cHJlc3MuIFRvIHN1cHBvcnQgc3VjaCBmaXJtd2FyZXMsCmZvcmNlbG9hZCwgYSBwYXJhbWV0ZXIgb2YgdHlwZSBib29sLCBjb3VsZCBlbmFibGUgQUVSIHRvIGNvbnRpbnVlIHRvCmJlIGluaXRpYXRlZCBhbHRob3VnaCBmaXJtd2FyZXMgaGF2ZSBubyBfT1NDIHN1cHBvcnQuIFRvIGVuYWJsZSB0aGUKd2Fsa2Fyb3VuZCwgcGxzLiBhZGQgYWVyZHJpdmVyLmZvcmNlbG9hZD15IHRvIGtlcm5lbCBib290IHBhcmFtZXRlciBsaW5lCndoZW4gYm9vdGluZyBrZXJuZWwuIE5vdGUgdGhhdCBmb3JjZWxvYWQ9biBieSBkZWZhdWx0LgoKbm9zb3VyY2VpZCwgYW5vdGhlciBwYXJhbWV0ZXIgb2YgdHlwZSBib29sLCBjYW4gYmUgdXNlZCB3aGVuIGJyb2tlbgpoYXJkd2FyZSAobW9zdGx5IGNoaXBzZXRzKSBoYXMgcm9vdCBwb3J0cyB0aGF0IGNhbm5vdCBvYnRhaW4gdGhlIHJlcG9ydGluZwpzb3VyY2UgSUQuIG5vc291cmNlaWQ9biBieSBkZWZhdWx0LgoKMi4zIEFFUiBlcnJvciBvdXRwdXQKV2hlbiBhIFBDSS1FIEFFUiBlcnJvciBpcyBjYXB0dXJlZCwgYW4gZXJyb3IgbWVzc2FnZSB3aWxsIGJlIG91dHB1dGVkIHRvCmNvbnNvbGUuIElmIGl0J3MgYSBjb3JyZWN0YWJsZSBlcnJvciwgaXQgaXMgb3V0cHV0ZWQgYXMgYSB3YXJuaW5nLgpPdGhlcndpc2UsIGl0IGlzIHByaW50ZWQgYXMgYW4gZXJyb3IuIFNvIHVzZXJzIGNvdWxkIGNob29zZSBkaWZmZXJlbnQKbG9nIGxldmVsIHRvIGZpbHRlciBvdXQgY29ycmVjdGFibGUgZXJyb3IgbWVzc2FnZXMuCgpCZWxvdyBzaG93cyBhbiBleGFtcGxlLgorLS0tLS0tIFBDSS1FeHByZXNzIERldmljZSBFcnJvciAtLS0tLSsKRXJyb3IgU2V2ZXJpdHkgICAgICAgICAgOiBVbmNvcnJlY3RlZCAoRmF0YWwpClBDSUUgQnVzIEVycm9yIHR5cGUgICAgIDogVHJhbnNhY3Rpb24gTGF5ZXIKVW5zdXBwb3J0ZWQgUmVxdWVzdCAgICAgOiBGaXJzdApSZXF1ZXN0ZXIgSUQgICAgICAgICAgICA6IDA1MDAKVmVuZG9ySUQ9ODA4NmgsIERldmljZUlEPTAzMjloLCBCdXM9MDVoLCBEZXZpY2U9MDBoLCBGdW5jdGlvbj0wMGgKVExCIEhlYWRlcjoKMDQwMDAwMDEgMDAyMDBhMDMgMDUwMTAwMDAgMDAwNTAxMDAKCkluIHRoZSBleGFtcGxlLCAnUmVxdWVzdGVyIElEJyBtZWFucyB0aGUgSUQgb2YgdGhlIGRldmljZSB3aG8gc2VuZHMKdGhlIGVycm9yIG1lc3NhZ2UgdG8gcm9vdCBwb3J0LiBQbHMuIHJlZmVyIHRvIHBjaSBleHByZXNzIHNwZWNzIGZvcgpvdGhlciBmaWVsZHMuCgoKMy4gRGV2ZWxvcGVyIEd1aWRlCgpUbyBlbmFibGUgQUVSIGF3YXJlIHN1cHBvcnQgcmVxdWlyZXMgYSBzb2Z0d2FyZSBkcml2ZXIgdG8gY29uZmlndXJlCnRoZSBBRVIgY2FwYWJpbGl0eSBzdHJ1Y3R1cmUgd2l0aGluIGl0cyBkZXZpY2UgYW5kIHRvIHByb3ZpZGUgY2FsbGJhY2tzLgoKVG8gc3VwcG9ydCBBRVIgYmV0dGVyLCBkZXZlbG9wZXJzIG5lZWQgdW5kZXJzdGFuZCBob3cgQUVSIGRvZXMgd29yawpmaXJzdGx5LgoKUENJIEV4cHJlc3MgZXJyb3JzIGFyZSBjbGFzc2lmaWVkIGludG8gdHdvIHR5cGVzOiBjb3JyZWN0YWJsZSBlcnJvcnMKYW5kIHVuY29ycmVjdGFibGUgZXJyb3JzLiBUaGlzIGNsYXNzaWZpY2F0aW9uIGlzIGJhc2VkIG9uIHRoZSBpbXBhY3RzCm9mIHRob3NlIGVycm9ycywgd2hpY2ggbWF5IHJlc3VsdCBpbiBkZWdyYWRlZCBwZXJmb3JtYW5jZSBvciBmdW5jdGlvbgpmYWlsdXJlLgoKQ29ycmVjdGFibGUgZXJyb3JzIHBvc2Ugbm8gaW1wYWN0cyBvbiB0aGUgZnVuY3Rpb25hbGl0eSBvZiB0aGUKaW50ZXJmYWNlLiBUaGUgUENJIEV4cHJlc3MgcHJvdG9jb2wgY2FuIHJlY292ZXIgd2l0aG91dCBhbnkgc29mdHdhcmUKaW50ZXJ2ZW50aW9uIG9yIGFueSBsb3NzIG9mIGRhdGEuIFRoZXNlIGVycm9ycyBhcmUgZGV0ZWN0ZWQgYW5kCmNvcnJlY3RlZCBieSBoYXJkd2FyZS4gVW5saWtlIGNvcnJlY3RhYmxlIGVycm9ycywgdW5jb3JyZWN0YWJsZQplcnJvcnMgaW1wYWN0IGZ1bmN0aW9uYWxpdHkgb2YgdGhlIGludGVyZmFjZS4gVW5jb3JyZWN0YWJsZSBlcnJvcnMKY2FuIGNhdXNlIGEgcGFydGljdWxhciB0cmFuc2FjdGlvbiBvciBhIHBhcnRpY3VsYXIgUENJIEV4cHJlc3MgbGluawp0byBiZSB1bnJlbGlhYmxlLiBEZXBlbmRpbmcgb24gdGhvc2UgZXJyb3IgY29uZGl0aW9ucywgdW5jb3JyZWN0YWJsZQplcnJvcnMgYXJlIGZ1cnRoZXIgY2xhc3NpZmllZCBpbnRvIG5vbi1mYXRhbCBlcnJvcnMgYW5kIGZhdGFsIGVycm9ycy4KTm9uLWZhdGFsIGVycm9ycyBjYXVzZSB0aGUgcGFydGljdWxhciB0cmFuc2FjdGlvbiB0byBiZSB1bnJlbGlhYmxlLApidXQgdGhlIFBDSSBFeHByZXNzIGxpbmsgaXRzZWxmIGlzIGZ1bGx5IGZ1bmN0aW9uYWwuIEZhdGFsIGVycm9ycywgb24KdGhlIG90aGVyIGhhbmQsIGNhdXNlIHRoZSBsaW5rIHRvIGJlIHVucmVsaWFibGUuCgpXaGVuIEFFUiBpcyBlbmFibGVkLCBhIFBDSSBFeHByZXNzIGRldmljZSB3aWxsIGF1dG9tYXRpY2FsbHkgc2VuZCBhbgplcnJvciBtZXNzYWdlIHRvIHRoZSBQQ0lFIHJvb3QgcG9ydCBhYm92ZSBpdCB3aGVuIHRoZSBkZXZpY2UgY2FwdHVyZXMKYW4gZXJyb3IuIFRoZSBSb290IFBvcnQsIHVwb24gcmVjZWl2aW5nIGFuIGVycm9yIHJlcG9ydGluZyBtZXNzYWdlLAppbnRlcm5hbGx5IHByb2Nlc3NlcyBhbmQgbG9ncyB0aGUgZXJyb3IgbWVzc2FnZSBpbiBpdHMgUENJIEV4cHJlc3MKY2FwYWJpbGl0eSBzdHJ1Y3R1cmUuIEVycm9yIGluZm9ybWF0aW9uIGJlaW5nIGxvZ2dlZCBpbmNsdWRlcyBzdG9yaW5nCnRoZSBlcnJvciByZXBvcnRpbmcgYWdlbnQncyByZXF1ZXN0b3IgSUQgaW50byB0aGUgRXJyb3IgU291cmNlCklkZW50aWZpY2F0aW9uIFJlZ2lzdGVycyBhbmQgc2V0dGluZyB0aGUgZXJyb3IgYml0cyBvZiB0aGUgUm9vdCBFcnJvcgpTdGF0dXMgUmVnaXN0ZXIgYWNjb3JkaW5nbHkuIElmIEFFUiBlcnJvciByZXBvcnRpbmcgaXMgZW5hYmxlZCBpbiBSb290CkVycm9yIENvbW1hbmQgUmVnaXN0ZXIsIHRoZSBSb290IFBvcnQgZ2VuZXJhdGVzIGFuIGludGVycnVwdCBpZiBhbgplcnJvciBpcyBkZXRlY3RlZC4KCk5vdGUgdGhhdCB0aGUgZXJyb3JzIGFzIGRlc2NyaWJlZCBhYm92ZSBhcmUgcmVsYXRlZCB0byB0aGUgUENJIEV4cHJlc3MKaGllcmFyY2h5IGFuZCBsaW5rcy4gVGhlc2UgZXJyb3JzIGRvIG5vdCBpbmNsdWRlIGFueSBkZXZpY2Ugc3BlY2lmaWMKZXJyb3JzIGJlY2F1c2UgZGV2aWNlIHNwZWNpZmljIGVycm9ycyB3aWxsIHN0aWxsIGdldCBzZW50IGRpcmVjdGx5IHRvCnRoZSBkZXZpY2UgZHJpdmVyLgoKMy4xIENvbmZpZ3VyZSB0aGUgQUVSIGNhcGFiaWxpdHkgc3RydWN0dXJlCgpBRVIgYXdhcmUgZHJpdmVycyBvZiBQQ0kgRXhwcmVzcyBjb21wb25lbnQgbmVlZCBjaGFuZ2UgdGhlIGRldmljZQpjb250cm9sIHJlZ2lzdGVycyB0byBlbmFibGUgQUVSLiBUaGV5IGFsc28gY291bGQgY2hhbmdlIEFFUiByZWdpc3RlcnMsCmluY2x1ZGluZyBtYXNrIGFuZCBzZXZlcml0eSByZWdpc3RlcnMuIEhlbHBlciBmdW5jdGlvbgpwY2lfZW5hYmxlX3BjaWVfZXJyb3JfcmVwb3J0aW5nIGNvdWxkIGJlIHVzZWQgdG8gZW5hYmxlIEFFUi4gU2VlCnNlY3Rpb24gMy4zLgoKMy4yLiBQcm92aWRlIGNhbGxiYWNrcwoKMy4yLjEgY2FsbGJhY2sgcmVzZXRfbGluayB0byByZXNldCBwY2kgZXhwcmVzcyBsaW5rCgpUaGlzIGNhbGxiYWNrIGlzIHVzZWQgdG8gcmVzZXQgdGhlIHBjaSBleHByZXNzIHBoeXNpY2FsIGxpbmsgd2hlbiBhCmZhdGFsIGVycm9yIGhhcHBlbnMuIFRoZSByb290IHBvcnQgYWVyIHNlcnZpY2UgZHJpdmVyIHByb3ZpZGVzIGEKZGVmYXVsdCByZXNldF9saW5rIGZ1bmN0aW9uLCBidXQgZGlmZmVyZW50IHVwc3RyZWFtIHBvcnRzIG1pZ2h0CmhhdmUgZGlmZmVyZW50IHNwZWNpZmljYXRpb25zIHRvIHJlc2V0IHBjaSBleHByZXNzIGxpbmssIHNvIGFsbAp1cHN0cmVhbSBwb3J0cyBzaG91bGQgcHJvdmlkZSB0aGVpciBvd24gcmVzZXRfbGluayBmdW5jdGlvbnMuCgpJbiBzdHJ1Y3QgcGNpZV9wb3J0X3NlcnZpY2VfZHJpdmVyLCBhIG5ldyBwb2ludGVyLCByZXNldF9saW5rLCBpcwphZGRlZC4KCnBjaV9lcnNfcmVzdWx0X3QgKCpyZXNldF9saW5rKSAoc3RydWN0IHBjaV9kZXYgKmRldik7CgpTZWN0aW9uIDMuMi4yLjIgcHJvdmlkZXMgbW9yZSBkZXRhaWxlZCBpbmZvIG9uIHdoZW4gdG8gY2FsbApyZXNldF9saW5rLgoKMy4yLjIgUENJIGVycm9yLXJlY292ZXJ5IGNhbGxiYWNrcwoKVGhlIFBDSSBFeHByZXNzIEFFUiBSb290IGRyaXZlciB1c2VzIGVycm9yIGNhbGxiYWNrcyB0byBjb29yZGluYXRlCndpdGggZG93bnN0cmVhbSBkZXZpY2UgZHJpdmVycyBhc3NvY2lhdGVkIHdpdGggYSBoaWVyYXJjaHkgaW4gcXVlc3Rpb24Kd2hlbiBwZXJmb3JtaW5nIGVycm9yIHJlY292ZXJ5IGFjdGlvbnMuCgpEYXRhIHN0cnVjdCBwY2lfZHJpdmVyIGhhcyBhIHBvaW50ZXIsIGVycl9oYW5kbGVyLCB0byBwb2ludCB0bwpwY2lfZXJyb3JfaGFuZGxlcnMgd2hvIGNvbnNpc3RzIG9mIGEgY291cGxlIG9mIGNhbGxiYWNrIGZ1bmN0aW9uCnBvaW50ZXJzLiBBRVIgZHJpdmVyIGZvbGxvd3MgdGhlIHJ1bGVzIGRlZmluZWQgaW4KcGNpLWVycm9yLXJlY292ZXJ5LnR4dCBleGNlcHQgcGNpIGV4cHJlc3Mgc3BlY2lmaWMgcGFydHMgKGUuZy4KcmVzZXRfbGluaykuIFBscy4gcmVmZXIgdG8gcGNpLWVycm9yLXJlY292ZXJ5LnR4dCBmb3IgZGV0YWlsZWQKZGVmaW5pdGlvbnMgb2YgdGhlIGNhbGxiYWNrcy4KCkJlbG93IHNlY3Rpb25zIHNwZWNpZnkgd2hlbiB0byBjYWxsIHRoZSBlcnJvciBjYWxsYmFjayBmdW5jdGlvbnMuCgozLjIuMi4xIENvcnJlY3RhYmxlIGVycm9ycwoKQ29ycmVjdGFibGUgZXJyb3JzIHBvc2Ugbm8gaW1wYWN0cyBvbiB0aGUgZnVuY3Rpb25hbGl0eSBvZgp0aGUgaW50ZXJmYWNlLiBUaGUgUENJIEV4cHJlc3MgcHJvdG9jb2wgY2FuIHJlY292ZXIgd2l0aG91dCBhbnkKc29mdHdhcmUgaW50ZXJ2ZW50aW9uIG9yIGFueSBsb3NzIG9mIGRhdGEuIFRoZXNlIGVycm9ycyBkbyBub3QKcmVxdWlyZSBhbnkgcmVjb3ZlcnkgYWN0aW9ucy4gVGhlIEFFUiBkcml2ZXIgY2xlYXJzIHRoZSBkZXZpY2Uncwpjb3JyZWN0YWJsZSBlcnJvciBzdGF0dXMgcmVnaXN0ZXIgYWNjb3JkaW5nbHkgYW5kIGxvZ3MgdGhlc2UgZXJyb3JzLgoKMy4yLjIuMiBOb24tY29ycmVjdGFibGUgKG5vbi1mYXRhbCBhbmQgZmF0YWwpIGVycm9ycwoKSWYgYW4gZXJyb3IgbWVzc2FnZSBpbmRpY2F0ZXMgYSBub24tZmF0YWwgZXJyb3IsIHBlcmZvcm1pbmcgbGluayByZXNldAphdCB1cHN0cmVhbSBpcyBub3QgcmVxdWlyZWQuIFRoZSBBRVIgZHJpdmVyIGNhbGxzIGVycm9yX2RldGVjdGVkKGRldiwKcGNpX2NoYW5uZWxfaW9fbm9ybWFsKSB0byBhbGwgZHJpdmVycyBhc3NvY2lhdGVkIHdpdGhpbiBhIGhpZXJhcmNoeSBpbgpxdWVzdGlvbi4gZm9yIGV4YW1wbGUsCkVuZFBvaW50PD09PkRvd25zdHJlYW1Qb3J0IEI8PT0+VXBzdHJlYW1Qb3J0IEE8PT0+Um9vdFBvcnQuCklmIFVwc3RyZWFtIHBvcnQgQSBjYXB0dXJlcyBhbiBBRVIgZXJyb3IsIHRoZSBoaWVyYXJjaHkgY29uc2lzdHMgb2YKRG93bnN0cmVhbSBwb3J0IEIgYW5kIEVuZFBvaW50LgoKQSBkcml2ZXIgbWF5IHJldHVybiBQQ0lfRVJTX1JFU1VMVF9DQU5fUkVDT1ZFUiwKUENJX0VSU19SRVNVTFRfRElTQ09OTkVDVCwgb3IgUENJX0VSU19SRVNVTFRfTkVFRF9SRVNFVCwgZGVwZW5kaW5nIG9uCndoZXRoZXIgaXQgY2FuIHJlY292ZXIgb3IgdGhlIEFFUiBkcml2ZXIgY2FsbHMgbW1pb19lbmFibGVkIGFzIG5leHQuCgpJZiBhbiBlcnJvciBtZXNzYWdlIGluZGljYXRlcyBhIGZhdGFsIGVycm9yLCBrZXJuZWwgd2lsbCBicm9hZGNhc3QKZXJyb3JfZGV0ZWN0ZWQoZGV2LCBwY2lfY2hhbm5lbF9pb19mcm96ZW4pIHRvIGFsbCBkcml2ZXJzIHdpdGhpbgphIGhpZXJhcmNoeSBpbiBxdWVzdGlvbi4gVGhlbiwgcGVyZm9ybWluZyBsaW5rIHJlc2V0IGF0IHVwc3RyZWFtIGlzCm5lY2Vzc2FyeS4gQXMgZGlmZmVyZW50IGtpbmRzIG9mIGRldmljZXMgbWlnaHQgdXNlIGRpZmZlcmVudCBhcHByb2FjaGVzCnRvIHJlc2V0IGxpbmssIEFFUiBwb3J0IHNlcnZpY2UgZHJpdmVyIGlzIHJlcXVpcmVkIHRvIHByb3ZpZGUgdGhlCmZ1bmN0aW9uIHRvIHJlc2V0IGxpbmsuIEZpcnN0bHksIGtlcm5lbCBsb29rcyBmb3IgaWYgdGhlIHVwc3RyZWFtCmNvbXBvbmVudCBoYXMgYW4gYWVyIGRyaXZlci4gSWYgaXQgaGFzLCBrZXJuZWwgdXNlcyB0aGUgcmVzZXRfbGluawpjYWxsYmFjayBvZiB0aGUgYWVyIGRyaXZlci4gSWYgdGhlIHVwc3RyZWFtIGNvbXBvbmVudCBoYXMgbm8gYWVyIGRyaXZlcgphbmQgdGhlIHBvcnQgaXMgZG93bnN0cmVhbSBwb3J0LCB3ZSB3aWxsIHVzZSB0aGUgYWVyIGRyaXZlciBvZiB0aGUKcm9vdCBwb3J0IHdobyByZXBvcnRzIHRoZSBBRVIgZXJyb3IuIEFzIGZvciB1cHN0cmVhbSBwb3J0cywKdGhleSBzaG91bGQgcHJvdmlkZSB0aGVpciBvd24gYWVyIHNlcnZpY2UgZHJpdmVycyB3aXRoIHJlc2V0X2xpbmsKZnVuY3Rpb24uIElmIGVycm9yX2RldGVjdGVkIHJldHVybnMgUENJX0VSU19SRVNVTFRfQ0FOX1JFQ09WRVIgYW5kCnJlc2V0X2xpbmsgcmV0dXJucyBQQ0lfRVJTX1JFU1VMVF9SRUNPVkVSRUQsIHRoZSBlcnJvciBoYW5kbGluZyBnb2VzCnRvIG1taW9fZW5hYmxlZC4KCjMuMyBoZWxwZXIgZnVuY3Rpb25zCgozLjMuMSBpbnQgcGNpX2VuYWJsZV9wY2llX2Vycm9yX3JlcG9ydGluZyhzdHJ1Y3QgcGNpX2RldiAqZGV2KTsKcGNpX2VuYWJsZV9wY2llX2Vycm9yX3JlcG9ydGluZyBlbmFibGVzIHRoZSBkZXZpY2UgdG8gc2VuZCBlcnJvcgptZXNzYWdlcyB0byByb290IHBvcnQgd2hlbiBhbiBlcnJvciBpcyBkZXRlY3RlZC4gTm90ZSB0aGF0IGRldmljZXMKZG9uJ3QgZW5hYmxlIHRoZSBlcnJvciByZXBvcnRpbmcgYnkgZGVmYXVsdCwgc28gZGV2aWNlIGRyaXZlcnMgbmVlZApjYWxsIHRoaXMgZnVuY3Rpb24gdG8gZW5hYmxlIGl0LgoKMy4zLjIgaW50IHBjaV9kaXNhYmxlX3BjaWVfZXJyb3JfcmVwb3J0aW5nKHN0cnVjdCBwY2lfZGV2ICpkZXYpOwpwY2lfZGlzYWJsZV9wY2llX2Vycm9yX3JlcG9ydGluZyBkaXNhYmxlcyB0aGUgZGV2aWNlIHRvIHNlbmQgZXJyb3IKbWVzc2FnZXMgdG8gcm9vdCBwb3J0IHdoZW4gYW4gZXJyb3IgaXMgZGV0ZWN0ZWQuCgozLjMuMyBpbnQgcGNpX2NsZWFudXBfYWVyX3VuY29ycmVjdF9lcnJvcl9zdGF0dXMoc3RydWN0IHBjaV9kZXYgKmRldik7CnBjaV9jbGVhbnVwX2Flcl91bmNvcnJlY3RfZXJyb3Jfc3RhdHVzIGNsZWFudXBzIHRoZSB1bmNvcnJlY3RhYmxlCmVycm9yIHN0YXR1cyByZWdpc3Rlci4KCjMuNCBGcmVxdWVudCBBc2tlZCBRdWVzdGlvbnMKClE6IFdoYXQgaGFwcGVucyBpZiBhIFBDSSBFeHByZXNzIGRldmljZSBkcml2ZXIgZG9lcyBub3QgcHJvdmlkZSBhbgplcnJvciByZWNvdmVyeSBoYW5kbGVyIChwY2lfZHJpdmVyLT5lcnJfaGFuZGxlciBpcyBlcXVhbCB0byBOVUxMKT8KCkE6IFRoZSBkZXZpY2VzIGF0dGFjaGVkIHdpdGggdGhlIGRyaXZlciB3b24ndCBiZSByZWNvdmVyZWQuIElmIHRoZQplcnJvciBpcyBmYXRhbCwga2VybmVsIHdpbGwgcHJpbnQgb3V0IHdhcm5pbmcgbWVzc2FnZXMuIFBsZWFzZSByZWZlcgp0byBzZWN0aW9uIDMgZm9yIG1vcmUgaW5mb3JtYXRpb24uCgpROiBXaGF0IGhhcHBlbnMgaWYgYW4gdXBzdHJlYW0gcG9ydCBzZXJ2aWNlIGRyaXZlciBkb2VzIG5vdCBwcm92aWRlCmNhbGxiYWNrIHJlc2V0X2xpbms/CgpBOiBGYXRhbCBlcnJvciByZWNvdmVyeSB3aWxsIGZhaWwgaWYgdGhlIGVycm9ycyBhcmUgcmVwb3J0ZWQgYnkgdGhlCnVwc3RyZWFtIHBvcnRzIHdobyBhcmUgYXR0YWNoZWQgYnkgdGhlIHNlcnZpY2UgZHJpdmVyLgoKUTogSG93IGRvZXMgdGhpcyBpbmZyYXN0cnVjdHVyZSBkZWFsIHdpdGggZHJpdmVyIHRoYXQgaXMgbm90IFBDSQpFeHByZXNzIGF3YXJlPwoKQTogVGhpcyBpbmZyYXN0cnVjdHVyZSBjYWxscyB0aGUgZXJyb3IgY2FsbGJhY2sgZnVuY3Rpb25zIG9mIHRoZQpkcml2ZXIgd2hlbiBhbiBlcnJvciBoYXBwZW5zLiBCdXQgaWYgdGhlIGRyaXZlciBpcyBub3QgYXdhcmUgb2YKUENJIEV4cHJlc3MsIHRoZSBkZXZpY2UgbWlnaHQgbm90IHJlcG9ydCBpdHMgb3duIGVycm9ycyB0byByb290CnBvcnQuCgpROiBXaGF0IG1vZGlmaWNhdGlvbnMgd2lsbCB0aGF0IGRyaXZlciBuZWVkIHRvIG1ha2UgaXQgY29tcGF0aWJsZQp3aXRoIHRoZSBQQ0kgRXhwcmVzcyBBRVIgUm9vdCBkcml2ZXI/CgpBOiBJdCBjb3VsZCBjYWxsIHRoZSBoZWxwZXIgZnVuY3Rpb25zIHRvIGVuYWJsZSBBRVIgaW4gZGV2aWNlcyBhbmQKY2xlYW51cCB1bmNvcnJlY3RhYmxlIHN0YXR1cyByZWdpc3Rlci4gUGxzLiByZWZlciB0byBzZWN0aW9uIDMuMy4KCgo0LiBTb2Z0d2FyZSBlcnJvciBpbmplY3Rpb24KCkRlYnVnZ2luZyBQQ0lFIEFFUiBlcnJvciByZWNvdmVyeSBjb2RlIGlzIHF1aXRlIGRpZmZpY3VsdCBiZWNhdXNlIGl0CmlzIGhhcmQgdG8gdHJpZ2dlciByZWFsIGhhcmR3YXJlIGVycm9ycy4gU29mdHdhcmUgYmFzZWQgZXJyb3IKaW5qZWN0aW9uIGNhbiBiZSB1c2VkIHRvIGZha2UgdmFyaW91cyBraW5kcyBvZiBQQ0lFIGVycm9ycy4KCkZpcnN0IHlvdSBzaG91bGQgZW5hYmxlIFBDSUUgQUVSIHNvZnR3YXJlIGVycm9yIGluamVjdGlvbiBpbiBrZXJuZWwKY29uZmlndXJhdGlvbiwgdGhhdCBpcywgZm9sbG93aW5nIGl0ZW0gc2hvdWxkIGJlIGluIHlvdXIgLmNvbmZpZy4KCkNPTkZJR19QQ0lFQUVSX0lOSkVDVD15IG9yIENPTkZJR19QQ0lFQUVSX0lOSkVDVD1tCgpBZnRlciByZWJvb3Qgd2l0aCBuZXcga2VybmVsIG9yIGluc2VydCB0aGUgbW9kdWxlLCBhIGRldmljZSBmaWxlIG5hbWVkCi9kZXYvYWVyX2luamVjdCBzaG91bGQgYmUgY3JlYXRlZC4KClRoZW4sIHlvdSBuZWVkIGEgdXNlciBzcGFjZSB0b29sIG5hbWVkIGFlci1pbmplY3QsIHdoaWNoIGNhbiBiZSBnb3R0ZW4KZnJvbToKICAgIGh0dHA6Ly93d3cua2VybmVsLm9yZy9wdWIvbGludXgvdXRpbHMvcGNpL2Flci1pbmplY3QvCgpNb3JlIGluZm9ybWF0aW9uIGFib3V0IGFlci1pbmplY3QgY2FuIGJlIGZvdW5kIGluIHRoZSBkb2N1bWVudCBjb21lcwp3aXRoIGl0cyBzb3VyY2UgY29kZS4K