VGhpcyBmaWxlIGNvbnRhaW5zIGJyaWVmIGluZm9ybWF0aW9uIGFib3V0IHRoZSBTQ1NJIHRhcGUgZHJpdmVyLgpUaGUgZHJpdmVyIGlzIGN1cnJlbnRseSBtYWludGFpbmVkIGJ5IEthaSBN5Gtpc2FyYSAoZW1haWwKS2FpLk1ha2lzYXJhQGtvbHVtYnVzLmZpKQoKTGFzdCBtb2RpZmllZDogTW9uIE1hciAgNyAyMToxNDo0NCAyMDA1IGJ5IGthaS5tYWtpc2FyYQoKCkJBU0lDUwoKVGhlIGRyaXZlciBpcyBnZW5lcmljLCBpLmUuLCBpdCBkb2VzIG5vdCBjb250YWluIGFueSBjb2RlIHRhaWxvcmVkCnRvIGFueSBzcGVjaWZpYyB0YXBlIGRyaXZlLiBUaGUgdGFwZSBwYXJhbWV0ZXJzIGNhbiBiZSBzcGVjaWZpZWQgd2l0aApvbmUgb2YgdGhlIGZvbGxvd2luZyB0aHJlZSBtZXRob2RzOgoKMS4gRWFjaCB1c2VyIGNhbiBzcGVjaWZ5IHRoZSB0YXBlIHBhcmFtZXRlcnMgaGUvc2hlIHdhbnRzIHRvIHVzZQpkaXJlY3RseSB3aXRoIGlvY3Rscy4gVGhpcyBpcyBhZG1pbmlzdHJhdGl2ZWx5IGEgdmVyeSBzaW1wbGUgYW5kCmZsZXhpYmxlIG1ldGhvZCBhbmQgYXBwbGljYWJsZSB0byBzaW5nbGUtdXNlciB3b3Jrc3RhdGlvbnMuIEhvd2V2ZXIsCmluIGEgbXVsdGl1c2VyIGVudmlyb25tZW50IHRoZSBuZXh0IHVzZXIgZmluZHMgdGhlIHRhcGUgcGFyYW1ldGVycyBpbgpzdGF0ZSB0aGUgcHJldmlvdXMgdXNlciBsZWZ0IHRoZW0uCgoyLiBUaGUgc3lzdGVtIG1hbmFnZXIgKHJvb3QpIGNhbiBkZWZpbmUgZGVmYXVsdCB2YWx1ZXMgZm9yIHNvbWUgdGFwZQpwYXJhbWV0ZXJzLCBsaWtlIGJsb2NrIHNpemUgYW5kIGRlbnNpdHkgdXNpbmcgdGhlIE1UU0VURFJWQlVGRkVSIGlvY3RsLgpUaGVzZSBwYXJhbWV0ZXJzIGNhbiBiZSBwcm9ncmFtbWVkIHRvIGNvbWUgaW50byBlZmZlY3QgZWl0aGVyIHdoZW4gYQpuZXcgdGFwZSBpcyBsb2FkZWQgaW50byB0aGUgZHJpdmUgb3IgaWYgd3JpdGluZyBiZWdpbnMgYXQgdGhlCmJlZ2lubmluZyBvZiB0aGUgdGFwZS4gVGhlIHNlY29uZCBtZXRob2QgaXMgYXBwbGljYWJsZSBpZiB0aGUgdGFwZQpkcml2ZSBwZXJmb3JtcyBhdXRvLWRldGVjdGlvbiBvZiB0aGUgdGFwZSBmb3JtYXQgd2VsbCAobGlrZSBzb21lClFJQy1kcml2ZXMpLiBUaGUgcmVzdWx0IGlzIHRoYXQgYW55IHRhcGUgY2FuIGJlIHJlYWQsIHdyaXRpbmcgY2FuIGJlCmNvbnRpbnVlZCB1c2luZyBleGlzdGluZyBmb3JtYXQsIGFuZCB0aGUgZGVmYXVsdCBmb3JtYXQgaXMgdXNlZCBpZgp0aGUgdGFwZSBpcyByZXdyaXR0ZW4gZnJvbSB0aGUgYmVnaW5uaW5nIChvciBhIG5ldyB0YXBlIGlzIHdyaXR0ZW4KZm9yIHRoZSBmaXJzdCB0aW1lKS4gVGhlIGZpcnN0IG1ldGhvZCBpcyBhcHBsaWNhYmxlIGlmIHRoZSBkcml2ZQpkb2VzIG5vdCBwZXJmb3JtIGF1dG8tZGV0ZWN0aW9uIHdlbGwgZW5vdWdoIGFuZCB0aGVyZSBpcyBhIHNpbmdsZQoic2Vuc2libGUiIG1vZGUgZm9yIHRoZSBkZXZpY2UuIEFuIGV4YW1wbGUgaXMgYSBEQVQgZHJpdmUgdGhhdCBpcwp1c2VkIG9ubHkgaW4gdmFyaWFibGUgYmxvY2sgbW9kZSAoSSBkb24ndCBrbm93IGlmIHRoaXMgaXMgc2Vuc2libGUKb3Igbm90IDotKS4KClRoZSB1c2VyIGNhbiBvdmVycmlkZSB0aGUgcGFyYW1ldGVycyBkZWZpbmVkIGJ5IHRoZSBzeXN0ZW0KbWFuYWdlci4gVGhlIGNoYW5nZXMgcGVyc2lzdCB1bnRpbCB0aGUgZGVmYXVsdHMgYWdhaW4gY29tZSBpbnRvCmVmZmVjdC4KCjMuIEJ5IGRlZmF1bHQsIHVwIHRvIGZvdXIgbW9kZXMgY2FuIGJlIGRlZmluZWQgYW5kIHNlbGVjdGVkIHVzaW5nIHRoZSBtaW5vcgpudW1iZXIgKGJpdHMgNSBhbmQgNikuIFRoZSBudW1iZXIgb2YgbW9kZXMgY2FuIGJlIGNoYW5nZWQgYnkgY2hhbmdpbmcKU1RfTkJSX01PREVfQklUUyBpbiBzdC5oLiBNb2RlIDAgY29ycmVzcG9uZHMgdG8gdGhlIGRlZmF1bHRzIGRpc2N1c3NlZAphYm92ZS4gQWRkaXRpb25hbCBtb2RlcyBhcmUgZG9ybWFudCB1bnRpbCB0aGV5IGFyZSBkZWZpbmVkIGJ5IHRoZQpzeXN0ZW0gbWFuYWdlciAocm9vdCkuIFdoZW4gc3BlY2lmaWNhdGlvbiBvZiBhIG5ldyBtb2RlIGlzIHN0YXJ0ZWQsCnRoZSBjb25maWd1cmF0aW9uIG9mIG1vZGUgMCBpcyB1c2VkIHRvIHByb3ZpZGUgYSBzdGFydGluZyBwb2ludCBmb3IKZGVmaW5pdGlvbiBvZiB0aGUgbmV3IG1vZGUuCgpVc2luZyB0aGUgbW9kZXMgYWxsb3dzIHRoZSBzeXN0ZW0gbWFuYWdlciB0byBnaXZlIHRoZSB1c2VycyBjaG9pY2VzCm92ZXIgc29tZSBvZiB0aGUgYnVmZmVyaW5nIHBhcmFtZXRlcnMgbm90IGRpcmVjdGx5IGFjY2Vzc2libGUgdG8gdGhlCnVzZXJzIChidWZmZXJlZCBhbmQgYXN5bmNocm9ub3VzIHdyaXRlcykuIFRoZSBtb2RlcyBhbHNvIGFsbG93IGNob2ljZXMKYmV0d2VlbiBmb3JtYXRzIGluIG11bHRpLXRhcGUgb3BlcmF0aW9ucyAodGhlIGV4cGxpY2l0bHkgb3ZlcnJpZGRlbgpwYXJhbWV0ZXJzIGFyZSByZXNldCB3aGVuIGEgbmV3IHRhcGUgaXMgbG9hZGVkKS4KCklmIG1vcmUgdGhhbiBvbmUgbW9kZSBpcyB1c2VkLCBhbGwgbW9kZXMgc2hvdWxkIGNvbnRhaW4gZGVmaW5pdGlvbnMKZm9yIHRoZSBzYW1lIHNldCBvZiBwYXJhbWV0ZXJzLgoKTWFueSBVbmljZXMgY29udGFpbiBpbnRlcm5hbCB0YWJsZXMgdGhhdCBhc3NvY2lhdGUgZGlmZmVyZW50IG1vZGVzIHRvCnN1cHBvcnRlZCBkZXZpY2VzLiBUaGUgTGludXggU0NTSSB0YXBlIGRyaXZlciBkb2VzIG5vdCBjb250YWluIHN1Y2gKdGFibGVzIChhbmQgd2lsbCBub3QgZG8gdGhhdCBpbiBmdXR1cmUpLiBJbnN0ZWFkIG9mIHRoYXQsIGEgdXRpbGl0eQpwcm9ncmFtIGNhbiBiZSBtYWRlIHRoYXQgZmV0Y2hlcyB0aGUgaW5xdWlyeSBkYXRhIHNlbnQgYnkgdGhlIGRldmljZSwKc2NhbnMgaXRzIGRhdGFiYXNlLCBhbmQgc2V0cyB1cCB0aGUgbW9kZXMgdXNpbmcgdGhlIGlvY3Rscy4gQW5vdGhlcgphbHRlcm5hdGl2ZSBpcyB0byBtYWtlIGEgc21hbGwgc2NyaXB0IHRoYXQgdXNlcyBtdCB0byBzZXQgdGhlIGRlZmF1bHRzCnRhaWxvcmVkIHRvIHRoZSBzeXN0ZW0uCgpUaGUgZHJpdmVyIHN1cHBvcnRzIGZpeGVkIGFuZCB2YXJpYWJsZSBibG9jayBzaXplICh3aXRoaW4gYnVmZmVyCmxpbWl0cykuIEJvdGggdGhlIGF1dG8tcmV3aW5kIChtaW5vciBlcXVhbHMgZGV2aWNlIG51bWJlcikgYW5kCm5vbi1yZXdpbmQgZGV2aWNlcyAobWlub3IgaXMgMTI4ICsgZGV2aWNlIG51bWJlcikgYXJlIGltcGxlbWVudGVkLgoKSW4gdmFyaWFibGUgYmxvY2sgbW9kZSwgdGhlIGJ5dGUgY291bnQgaW4gd3JpdGUoKSBkZXRlcm1pbmVzIHRoZSBzaXplCm9mIHRoZSBwaHlzaWNhbCBibG9jayBvbiB0YXBlLiBXaGVuIHJlYWRpbmcsIHRoZSBkcml2ZSByZWFkcyB0aGUgbmV4dAp0YXBlIGJsb2NrIGFuZCByZXR1cm5zIHRvIHRoZSB1c2VyIHRoZSBkYXRhIGlmIHRoZSByZWFkKCkgYnl0ZSBjb3VudAppcyBhdCBsZWFzdCB0aGUgYmxvY2sgc2l6ZS4gT3RoZXJ3aXNlLCBlcnJvciBFTk9NRU0gaXMgcmV0dXJuZWQuCgpJbiBmaXhlZCBibG9jayBtb2RlLCB0aGUgZGF0YSB0cmFuc2ZlciBiZXR3ZWVuIHRoZSBkcml2ZSBhbmQgdGhlCmRyaXZlciBpcyBpbiBtdWx0aXBsZXMgb2YgdGhlIGJsb2NrIHNpemUuIFRoZSB3cml0ZSgpIGJ5dGUgY291bnQgbXVzdApiZSBhIG11bHRpcGxlIG9mIHRoZSBibG9jayBzaXplLiBUaGlzIGlzIG5vdCByZXF1aXJlZCB3aGVuIHJlYWRpbmcgYnV0Cm1heSBiZSBhZHZpc2FibGUgZm9yIHBvcnRhYmlsaXR5LgoKU3VwcG9ydCBpcyBwcm92aWRlZCBmb3IgY2hhbmdpbmcgdGhlIHRhcGUgcGFydGl0aW9uIGFuZCBwYXJ0aXRpb25pbmcKb2YgdGhlIHRhcGUgd2l0aCBvbmUgb3IgdHdvIHBhcnRpdGlvbnMuIEJ5IGRlZmF1bHQgc3VwcG9ydCBmb3IKcGFydGl0aW9uZWQgdGFwZSBpcyBkaXNhYmxlZCBmb3IgZWFjaCBkcml2ZXIgYW5kIGl0IGNhbiBiZSBlbmFibGVkCndpdGggdGhlIGlvY3RsIE1UU0VURFJWQlVGRkVSLgoKQnkgZGVmYXVsdCB0aGUgZHJpdmVyIHdyaXRlcyBvbmUgZmlsZW1hcmsgd2hlbiB0aGUgZGV2aWNlIGlzIGNsb3NlZCBhZnRlcgp3cml0aW5nIGFuZCB0aGUgbGFzdCBvcGVyYXRpb24gaGFzIGJlZW4gYSB3cml0ZS4gVHdvIGZpbGVtYXJrcyBjYW4gYmUKb3B0aW9uYWxseSB3cml0dGVuLiBJbiBib3RoIGNhc2VzIGVuZCBvZiBkYXRhIGlzIHNpZ25pZmllZCBieQpyZXR1cm5pbmcgemVybyBieXRlcyBmb3IgdHdvIGNvbnNlY3V0aXZlIHJlYWRzLgoKSWYgcmV3aW5kLCBvZmZsaW5lLCBic2YsIG9yIHNlZWsgaXMgZG9uZSBhbmQgcHJldmlvdXMgdGFwZSBvcGVyYXRpb24gd2FzCndyaXRlLCBhIGZpbGVtYXJrIGlzIHdyaXR0ZW4gYmVmb3JlIG1vdmluZyB0YXBlLgoKVGhlIGNvbXBpbGUgb3B0aW9ucyBhcmUgZGVmaW5lZCBpbiB0aGUgZmlsZSBsaW51eC9kcml2ZXJzL3Njc2kvc3Rfb3B0aW9ucy5oLgoKNC4gSWYgdGhlIG9wZW4gb3B0aW9uIE9fTk9OQkxPQ0sgaXMgdXNlZCwgb3BlbiBzdWNjZWVkcyBldmVuIGlmIHRoZQpkcml2ZSBpcyBub3QgcmVhZHkuIElmIE9fTk9OQkxPQ0sgaXMgbm90IHVzZWQsIHRoZSBkcml2ZXIgd2FpdHMgZm9yCnRoZSBkcml2ZSB0byBiZWNvbWUgcmVhZHkuIElmIHRoaXMgZG9lcyBub3QgaGFwcGVuIGluIFNUX0JMT0NLX1NFQ09ORFMKc2Vjb25kcywgb3BlbiBmYWlscyB3aXRoIHRoZSBlcnJubyB2YWx1ZSBFSU8uIFdpdGggT19OT05CTE9DSyB0aGUKZGV2aWNlIGNhbiBiZSBvcGVuZWQgZm9yIHdyaXRpbmcgZXZlbiBpZiB0aGVyZSBpcyBhIHdyaXRlIHByb3RlY3RlZAp0YXBlIGluIHRoZSBkcml2ZSAoY29tbWFuZHMgdHJ5aW5nIHRvIHdyaXRlIHNvbWV0aGluZyByZXR1cm4gZXJyb3IgaWYKYXR0ZW1wdGVkKS4KCgpNSU5PUiBOVU1CRVJTCgpUaGUgdGFwZSBkcml2ZXIgY3VycmVudGx5IHN1cHBvcnRzIDEyOCBkcml2ZXMgYnkgZGVmYXVsdC4gVGhpcyBudW1iZXIKY2FuIGJlIGluY3JlYXNlZCBieSBlZGl0aW5nIHN0LmggYW5kIHJlY29tcGlsaW5nIHRoZSBkcml2ZXIgaWYKbmVjZXNzYXJ5LiBUaGUgdXBwZXIgbGltaXQgaXMgMl4xNyBkcml2ZXMgaWYgNCBtb2RlcyBmb3IgZWFjaCBkcml2ZQphcmUgdXNlZC4KClRoZSBtaW5vciBudW1iZXJzIGNvbnNpc3Qgb2YgdGhlIGZvbGxvd2luZyBiaXQgZmllbGRzOgoKZGV2X3VwcGVyIG5vbi1yZXcgbW9kZSBkZXYtbG93ZXIKICAyMCAtICA4ICAgICA3ICAgIDYgNSAgNCAgICAgIDAKVGhlIG5vbi1yZXdpbmQgYml0IGlzIGFsd2F5cyBiaXQgNyAodGhlIHVwcGVybW9zdCBiaXQgaW4gdGhlIGxvd2VybW9zdApieXRlKS4gVGhlIGJpdHMgZGVmaW5pbmcgdGhlIG1vZGUgYXJlIGJlbG93IHRoZSBub24tcmV3aW5kIGJpdC4gVGhlCnJlbWFpbmluZyBiaXRzIGRlZmluZSB0aGUgdGFwZSBkZXZpY2UgbnVtYmVyLiBUaGlzIG51bWJlcmluZyBpcwpiYWNrd2FyZCBjb21wYXRpYmxlIHdpdGggdGhlIG51bWJlcmluZyB1c2VkIHdoZW4gdGhlIG1pbm9yIG51bWJlciB3YXMKb25seSA4IGJpdHMgd2lkZS4KCgpTWVNGUyBTVVBQT1JUCgpUaGUgZHJpdmVyIGNyZWF0ZXMgdGhlIGRpcmVjdG9yeSAvc3lzL2NsYXNzL3Njc2lfdGFwZSBhbmQgcG9wdWxhdGVzIGl0IHdpdGgKZGlyZWN0b3JpZXMgY29ycmVzcG9uZGluZyB0byB0aGUgZXhpc3RpbmcgdGFwZSBkZXZpY2VzLiBUaGVyZSBhcmUgYXV0b3Jld2luZAphbmQgbm9uLXJld2luZCBlbnRyaWVzIGZvciBlYWNoIG1vZGUuIFRoZSBuYW1lcyBhcmUgc3R4eSBhbmQgbnN0eHksIHdoZXJlIHgKaXMgdGhlIHRhcGUgbnVtYmVyIGFuZCB5IGEgY2hhcmFjdGVyIGNvcnJlc3BvbmRpbmcgdG8gdGhlIG1vZGUgKG5vbmUsIGwsIG0sCmEpLiBGb3IgZXhhbXBsZSwgdGhlIGRpcmVjdG9yaWVzIGZvciB0aGUgZmlyc3QgdGFwZSBkZXZpY2UgYXJlIChhc3N1bWluZyBmb3VyCm1vZGVzKTogc3QwICBuc3QwICBzdDBsICBuc3QwbCAgc3QwbSAgbnN0MG0gIHN0MGEgIG5zdDBhLgoKRWFjaCBkaXJlY3RvcnkgY29udGFpbnMgdGhlIGVudHJpZXM6IGRlZmF1bHRfYmxrc2l6ZSAgZGVmYXVsdF9jb21wcmVzc2lvbgpkZWZhdWx0X2RlbnNpdHkgIGRlZmluZWQgIGRldiAgZGV2aWNlICBkcml2ZXIuIFRoZSBmaWxlICdkZWZpbmVkJyBjb250YWlucyAxCmlmIHRoZSBtb2RlIGlzIGRlZmluZWQgYW5kIHplcm8gaWYgbm90IGRlZmluZWQuIFRoZSBmaWxlcyAnZGVmYXVsdF8qJyBjb250YWluCnRoZSBkZWZhdWx0cyBzZXQgYnkgdGhlIHVzZXIuIFRoZSB2YWx1ZSAtMSBtZWFucyB0aGUgZGVmYXVsdCBpcyBub3Qgc2V0LiBUaGUKZmlsZSAnZGV2JyBjb250YWlucyB0aGUgZGV2aWNlIG51bWJlcnMgY29ycmVzcG9uZGluZyB0byB0aGlzIGRldmljZS4gVGhlIGxpbmtzCidkZXZpY2UnIGFuZCAnZHJpdmVyJyBwb2ludCB0byB0aGUgU0NTSSBkZXZpY2UgYW5kIGRyaXZlciBlbnRyaWVzLgoKQSBsaW5rIG5hbWVkICd0YXBlJyBpcyBtYWRlIGZyb20gdGhlIFNDU0kgZGV2aWNlIGRpcmVjdG9yeSB0byB0aGUgY2xhc3MKZGlyZWN0b3J5IGNvcnJlc3BvbmRpbmcgdG8gdGhlIG1vZGUgMCBhdXRvLXJld2luZCBkZXZpY2UgKGUuZy4sIHN0MCkuIAoKCkJTRCBBTkQgU1lTIFYgU0VNQU5USUNTCgpUaGUgdXNlciBjYW4gY2hvb3NlIGJldHdlZW4gdGhlc2UgdHdvIGJlaGF2aW91cnMgb2YgdGhlIHRhcGUgZHJpdmVyIGJ5CmRlZmluaW5nIHRoZSB2YWx1ZSBvZiB0aGUgc3ltYm9sIFNUX1NZU1YuIFRoZSBzZW1hbnRpY3MgZGlmZmVyIHdoZW4gYQpmaWxlIGJlaW5nIHJlYWQgaXMgY2xvc2VkLiBUaGUgQlNEIHNlbWFudGljcyBsZWF2ZXMgdGhlIHRhcGUgd2hlcmUgaXQKY3VycmVudGx5IGlzIHdoZXJlYXMgdGhlIFNZUyBWIHNlbWFudGljcyBtb3ZlcyB0aGUgdGFwZSBwYXN0IHRoZSBuZXh0CmZpbGVtYXJrIHVubGVzcyB0aGUgZmlsZW1hcmsgaGFzIGp1c3QgYmVlbiBjcm9zc2VkLgoKVGhlIGRlZmF1bHQgaXMgQlNEIHNlbWFudGljcy4KCgpCVUZGRVJJTkcKClRoZSBkcml2ZXIgdHJpZXMgdG8gZG8gdHJhbnNmZXJzIGRpcmVjdGx5IHRvL2Zyb20gdXNlciBzcGFjZS4gSWYgdGhpcwppcyBub3QgcG9zc2libGUsIGEgZHJpdmVyIGJ1ZmZlciBhbGxvY2F0ZWQgYXQgcnVuLXRpbWUgaXMgdXNlZC4gSWYKZGlyZWN0IGkvbyBpcyBub3QgcG9zc2libGUgZm9yIHRoZSB3aG9sZSB0cmFuc2ZlciwgdGhlIGRyaXZlciBidWZmZXIKaXMgdXNlZCAoaS5lLiwgYm91bmNlIGJ1ZmZlcnMgZm9yIGluZGl2aWR1YWwgcGFnZXMgYXJlIG5vdAp1c2VkKS4gRGlyZWN0IGkvbyBjYW4gYmUgaW1wb3NzaWJsZSBiZWNhdXNlIG9mIHNldmVyYWwgcmVhc29ucywgZS5nLjoKLSBvbmUgb3IgbW9yZSBwYWdlcyBhcmUgYXQgYWRkcmVzc2VzIG5vdCByZWFjaGFibGUgYnkgdGhlIEhCQQotIHRoZSBudW1iZXIgb2YgcGFnZXMgaW4gdGhlIHRyYW5zZmVyIGV4Y2VlZHMgdGhlIG51bWJlciBvZgogIHNjYXR0ZXIvZ2F0aGVyIHNlZ21lbnRzIHBlcm1pdHRlZCBieSB0aGUgSEJBCi0gb25lIG9yIG1vcmUgcGFnZXMgY2FuJ3QgYmUgbG9ja2VkIGludG8gbWVtb3J5IChzaG91bGQgbm90IGhhcHBlbiBpbgogIGFueSByZWFzb25hYmxlIHNpdHVhdGlvbikKClRoZSBzaXplIG9mIHRoZSBkcml2ZXIgYnVmZmVycyBpcyBhbHdheXMgYXQgbGVhc3Qgb25lIHRhcGUgYmxvY2suIEluIGZpeGVkCmJsb2NrIG1vZGUsIHRoZSBtaW5pbXVtIGJ1ZmZlciBzaXplIGlzIGRlZmluZWQgKGluIDEwMjQgYnl0ZSB1bml0cykgYnkKU1RfRklYRURfQlVGRkVSX0JMT0NLUy4gV2l0aCBzbWFsbCBibG9jayBzaXplIHRoaXMgYWxsb3dzIGJ1ZmZlcmluZyBvZgpzZXZlcmFsIGJsb2NrcyBhbmQgdXNpbmcgb25lIFNDU0kgcmVhZCBvciB3cml0ZSB0byB0cmFuc2ZlciBhbGwgb2YgdGhlCmJsb2Nrcy4gQnVmZmVyaW5nIG9mIGRhdGEgYWNyb3NzIHdyaXRlIGNhbGxzIGluIGZpeGVkIGJsb2NrIG1vZGUgaXMKYWxsb3dlZCBpZiBTVF9CVUZGRVJfV1JJVEVTIGlzIG5vbi16ZXJvIGFuZCBkaXJlY3QgaS9vIGlzIG5vdCB1c2VkLgpCdWZmZXIgYWxsb2NhdGlvbiB1c2VzIGNodW5rcyBvZiBtZW1vcnkgaGF2aW5nIHNpemVzIDJebiAqIChwYWdlCnNpemUpLiBCZWNhdXNlIG9mIHRoaXMgdGhlIGFjdHVhbCBidWZmZXIgc2l6ZSBtYXkgYmUgbGFyZ2VyIHRoYW4gdGhlCm1pbmltdW0gYWxsb3dhYmxlIGJ1ZmZlciBzaXplLgoKTk9URSB0aGF0IGlmIGRpcmVjdCBpL28gaXMgdXNlZCwgdGhlIHNtYWxsIHdyaXRlcyBhcmUgbm90IGJ1ZmZlcmVkLiBUaGlzIG1heQpjYXVzZSBhIHN1cnByaXNlIHdoZW4gbW92aW5nIGZyb20gMi40LiBUaGVyZSBzbWFsbCB3cml0ZXMgKGUuZy4sIHRhciB3aXRob3V0Ci1iIG9wdGlvbikgbWF5IGhhdmUgaGFkIGdvb2QgdGhyb3VnaHB1dCBidXQgdGhpcyBpcyBub3QgdHJ1ZSBhbnkgbW9yZSB3aXRoCjIuNi4gRGlyZWN0IGkvbyBjYW4gYmUgdHVybmVkIG9mZiB0byBzb2x2ZSB0aGlzIHByb2JsZW0gYnV0IGEgYmV0dGVyIHNvbHV0aW9uCmlzIHRvIHVzZSBiaWdnZXIgd3JpdGUoKSBieXRlIGNvdW50cyAoZS5nLiwgdGFyIC1iIDY0KS4KCkFzeW5jaHJvbm91cyB3cml0aW5nLiBXcml0aW5nIHRoZSBidWZmZXIgY29udGVudHMgdG8gdGhlIHRhcGUgaXMKc3RhcnRlZCBhbmQgdGhlIHdyaXRlIGNhbGwgcmV0dXJucyBpbW1lZGlhdGVseS4gVGhlIHN0YXR1cyBpcyBjaGVja2VkCmF0IHRoZSBuZXh0IHRhcGUgb3BlcmF0aW9uLiBBc3luY2hyb25vdXMgd3JpdGVzIGFyZSBub3QgZG9uZSB3aXRoCmRpcmVjdCBpL28gYW5kIG5vdCBpbiBmaXhlZCBibG9jayBtb2RlLgoKQnVmZmVyZWQgd3JpdGVzIGFuZCBhc3luY2hyb25vdXMgd3JpdGVzIG1heSBpbiBzb21lIHJhcmUgY2FzZXMgY2F1c2UKcHJvYmxlbXMgaW4gbXVsdGl2b2x1bWUgb3BlcmF0aW9ucyBpZiB0aGVyZSBpcyBub3QgZW5vdWdoIHNwYWNlIG9uIHRoZQp0YXBlIGFmdGVyIHRoZSBlYXJseS13YXJuaW5nIG1hcmsgdG8gZmx1c2ggdGhlIGRyaXZlciBidWZmZXIuCgpSZWFkIGFoZWFkIGZvciBmaXhlZCBibG9jayBtb2RlIChTVF9SRUFEX0FIRUFEKS4gRmlsbGluZyB0aGUgYnVmZmVyIGlzCmF0dGVtcHRlZCBldmVuIGlmIHRoZSB1c2VyIGRvZXMgbm90IHdhbnQgdG8gZ2V0IGFsbCBvZiB0aGUgZGF0YSBhdAp0aGlzIHJlYWQgY29tbWFuZC4gU2hvdWxkIGJlIGRpc2FibGVkIGZvciB0aG9zZSBkcml2ZXMgdGhhdCBkb24ndCBsaWtlCmEgZmlsZW1hcmsgdG8gdHJ1bmNhdGUgYSByZWFkIHJlcXVlc3Qgb3IgdGhhdCBkb24ndCBsaWtlIGJhY2tzcGFjaW5nLgoKU2NhdHRlci9nYXRoZXIgYnVmZmVycyAoYnVmZmVycyB0aGF0IGNvbnNpc3Qgb2YgY2h1bmtzIG5vbi1jb250aWd1b3VzCmluIHRoZSBwaHlzaWNhbCBtZW1vcnkpIGFyZSB1c2VkIGlmIGNvbnRpZ3VvdXMgYnVmZmVycyBjYW4ndCBiZQphbGxvY2F0ZWQuIFRvIHN1cHBvcnQgYWxsIFNDU0kgYWRhcHRlcnMgKGluY2x1ZGluZyB0aG9zZSBub3QKc3VwcG9ydGluZyBzY2F0dGVyL2dhdGhlciksIGJ1ZmZlciBhbGxvY2F0aW9uIGlzIHVzaW5nIHRoZSBmb2xsb3dpbmcKdGhyZWUga2luZHMgb2YgY2h1bmtzOgoxLiBUaGUgaW5pdGlhbCBzZWdtZW50IHRoYXQgaXMgdXNlZCBmb3IgYWxsIFNDU0kgYWRhcHRlcnMgaW5jbHVkaW5nCnRob3NlIG5vdCBzdXBwb3J0aW5nIHNjYXR0ZXIvZ2F0aGVyLiBUaGUgc2l6ZSBvZiB0aGlzIGJ1ZmZlciB3aWxsIGJlCihQQUdFX1NJWkUgPDwgU1RfRklSU1RfT1JERVIpIGJ5dGVzIGlmIHRoZSBzeXN0ZW0gY2FuIGdpdmUgYSBjaHVuayBvZgp0aGlzIHNpemUgKGFuZCBpdCBpcyBub3QgbGFyZ2VyIHRoYW4gdGhlIGJ1ZmZlciBzaXplIHNwZWNpZmllZCBieQpTVF9CVUZGRVJfQkxPQ0tTKS4gSWYgdGhpcyBzaXplIGlzIG5vdCBhdmFpbGFibGUsIHRoZSBkcml2ZXIgaGFsdmVzCnRoZSBzaXplIGFuZCB0cmllcyBhZ2FpbiB1bnRpbCB0aGUgc2l6ZSBvZiBvbmUgcGFnZS4gVGhlIGRlZmF1bHQKc2V0dGluZ3MgaW4gc3Rfb3B0aW9ucy5oIG1ha2UgdGhlIGRyaXZlciB0byB0cnkgdG8gYWxsb2NhdGUgYWxsIG9mIHRoZQpidWZmZXIgYXMgb25lIGNodW5rLgoyLiBUaGUgc2NhdHRlci9nYXRoZXIgc2VnbWVudHMgdG8gZmlsbCB0aGUgc3BlY2lmaWVkIGJ1ZmZlciBzaXplIGFyZQphbGxvY2F0ZWQgc28gdGhhdCBhcyBtYW55IHNlZ21lbnRzIGFzIHBvc3NpYmxlIGFyZSB1c2VkIGJ1dCB0aGUgbnVtYmVyCm9mIHNlZ21lbnRzIGRvZXMgbm90IGV4Y2VlZCBTVF9GSVJTVF9TRy4KMy4gVGhlIHJlbWFpbmluZyBzZWdtZW50cyBiZXR3ZWVuIFNUX01BWF9TRyAob3IgdGhlIG1vZHVsZSBwYXJhbWV0ZXIKbWF4X3NnX3NlZ3MpIGFuZCB0aGUgbnVtYmVyIG9mIHNlZ21lbnRzIHVzZWQgaW4gcGhhc2VzIDEgYW5kIDIKYXJlIHVzZWQgdG8gZXh0ZW5kIHRoZSBidWZmZXIgYXQgcnVuLXRpbWUgaWYgdGhpcyBpcyBuZWNlc3NhcnkuIFRoZQpudW1iZXIgb2Ygc2NhdHRlci9nYXRoZXIgc2VnbWVudHMgYWxsb3dlZCBmb3IgdGhlIFNDU0kgYWRhcHRlciBpcyBub3QKZXhjZWVkZWQgaWYgaXQgaXMgc21hbGxlciB0aGFuIHRoZSBtYXhpbXVtIG51bWJlciBvZiBzY2F0dGVyL2dhdGhlcgpzZWdtZW50cyBzcGVjaWZpZWQuIElmIHRoZSBtYXhpbXVtIG51bWJlciBhbGxvd2VkIGZvciB0aGUgU0NTSSBhZGFwdGVyCmlzIHNtYWxsZXIgdGhhbiB0aGUgbnVtYmVyIG9mIHNlZ21lbnRzIHVzZWQgaW4gcGhhc2VzIDEgYW5kIDIsCmV4dGVuZGluZyB0aGUgYnVmZmVyIHdpbGwgYWx3YXlzIGZhaWwuCgoKRU9NIEJFSEFWSU9VUiBXSEVOIFdSSVRJTkcKCldoZW4gdGhlIGVuZCBvZiBtZWRpdW0gZWFybHkgd2FybmluZyBpcyBlbmNvdW50ZXJlZCwgdGhlIGN1cnJlbnQgd3JpdGUKaXMgZmluaXNoZWQgYW5kIHRoZSBudW1iZXIgb2YgYnl0ZXMgaXMgcmV0dXJuZWQuIFRoZSBuZXh0IHdyaXRlCnJldHVybnMgLTEgYW5kIGVycm5vIGlzIHNldCB0byBFTk9TUEMuIFRvIGVuYWJsZSB3cml0aW5nIGEgdHJhaWxlciwKdGhlIG5leHQgd3JpdGUgaXMgYWxsb3dlZCB0byBwcm9jZWVkIGFuZCwgaWYgc3VjY2Vzc2Z1bCwgdGhlIG51bWJlciBvZgpieXRlcyBpcyByZXR1cm5lZC4gQWZ0ZXIgdGhpcywgLTEgYW5kIHRoZSBudW1iZXIgb2YgYnl0ZXMgYXJlCmFsdGVybmF0ZWx5IHJldHVybmVkIHVudGlsIHRoZSBwaHlzaWNhbCBlbmQgb2YgbWVkaXVtIChvciBzb21lIG90aGVyCmVycm9yKSBpcyBlbmNvdW50ZXJlZC4KCgpNT0RVTEUgUEFSQU1FVEVSUwoKVGhlIGJ1ZmZlciBzaXplLCB3cml0ZSB0aHJlc2hvbGQsIGFuZCB0aGUgbWF4aW11bSBudW1iZXIgb2YgYWxsb2NhdGVkIGJ1ZmZlcnMKYXJlIGNvbmZpZ3VyYWJsZSB3aGVuIHRoZSBkcml2ZXIgaXMgbG9hZGVkIGFzIGEgbW9kdWxlLiBUaGUga2V5d29yZHMgYXJlOgoKYnVmZmVyX2ticz14eHggICAgICAgICAgICAgdGhlIGJ1ZmZlciBzaXplIGZvciBmaXhlZCBibG9jayBtb2RlIGlzIHNldAoJCQkgICB0byB4eHgga2lsb2J5dGVzCndyaXRlX3RocmVzaG9sZF9rYnM9eHh4ICAgIHRoZSB3cml0ZSB0aHJlc2hvbGQgaW4ga2lsb2J5dGVzIHNldCB0byB4eHgKbWF4X3NnX3NlZ3M9eHh4CQkgICB0aGUgbWF4aW11bSBudW1iZXIgb2Ygc2NhdHRlci9nYXRoZXIKCQkJICAgc2VnbWVudHMKdHJ5X2RpcmVjdF9pbz14CQkgICB0cnkgZGlyZWN0IHRyYW5zZmVyIGJldHdlZW4gdXNlciBidWZmZXIgYW5kCgkJCSAgIHRhcGUgZHJpdmUgaWYgdGhpcyBpcyBub24temVybwoKTm90ZSB0aGF0IGlmIHRoZSBidWZmZXIgc2l6ZSBpcyBjaGFuZ2VkIGJ1dCB0aGUgd3JpdGUgdGhyZXNob2xkIGlzIG5vdApzZXQsIHRoZSB3cml0ZSB0aHJlc2hvbGQgaXMgc2V0IHRvIHRoZSBuZXcgYnVmZmVyIHNpemUgLSAyIGtCLgoKCkJPT1QgVElNRSBDT05GSUdVUkFUSU9OCgpJZiB0aGUgZHJpdmVyIGlzIGNvbXBpbGVkIGludG8gdGhlIGtlcm5lbCwgdGhlIHNhbWUgcGFyYW1ldGVycyBjYW4gYmUKYWxzbyBzZXQgdXNpbmcsIGUuZy4sIHRoZSBMSUxPIGNvbW1hbmQgbGluZS4gVGhlIHByZWZlcnJlZCBzeW50YXggaXMKdG8gdXNlIHRoZSBzYW1lIGtleXdvcmQgdXNlZCB3aGVuIGxvYWRpbmcgYXMgbW9kdWxlIGJ1dCBwcmVwZW5kZWQKd2l0aCAnc3QuJy4gRm9yIGluc3RhbmNlLCB0byBzZXQgdGhlIG1heGltdW0gbnVtYmVyIG9mIHNjYXR0ZXIvZ2F0aGVyCnNlZ21lbnRzLCB0aGUgcGFyYW1ldGVyICdzdC5tYXhfc2dfc2Vncz14eCcgc2hvdWxkIGJlIHVzZWQgKHh4IGlzIHRoZQpudW1iZXIgb2Ygc2NhdHRlci9nYXRoZXIgc2VnbWVudHMpLgoKRm9yIGNvbXBhdGliaWxpdHksIHRoZSBvbGQgc3ludGF4IGZyb20gZWFybHkgMi41IGFuZCAyLjQga2VybmVsCnZlcnNpb25zIGlzIHN1cHBvcnRlZC4gVGhlIHNhbWUga2V5d29yZHMgY2FuIGJlIHVzZWQgYXMgd2hlbiBsb2FkaW5nCnRoZSBkcml2ZXIgYXMgbW9kdWxlLiBJZiBzZXZlcmFsIHBhcmFtZXRlcnMgYXJlIHNldCwgdGhlIGtleXdvcmQtdmFsdWUKcGFpcnMgYXJlIHNlcGFyYXRlZCB3aXRoIGEgY29tbWEgKG5vIHNwYWNlcyBhbGxvd2VkKS4gQSBjb2xvbiBjYW4gYmUKdXNlZCBpbnN0ZWFkIG9mIHRoZSBlcXVhbCBtYXJrLiBUaGUgZGVmaW5pdGlvbiBpcyBwcmVwZW5kZWQgYnkgdGhlCnN0cmluZyBzdD0uIEhlcmUgaXMgYW4gZXhhbXBsZToKCglzdD1idWZmZXJfa2JzOjY0LHdyaXRlX3RocmVzaG9sZF9rYnM6NjAKClRoZSBmb2xsb3dpbmcgc3ludGF4IHVzZWQgYnkgdGhlIG9sZCBrZXJuZWwgdmVyc2lvbnMgaXMgYWxzbyBzdXBwb3J0ZWQ6CgogICAgICAgICAgIHN0PWFhWyxiYlssZGRdXQoKd2hlcmUKICBhYSBpcyB0aGUgYnVmZmVyIHNpemUgZm9yIGZpeGVkIGJsb2NrIG1vZGUgaW4gMTAyNCBieXRlIHVuaXRzCiAgYmIgaXMgdGhlIHdyaXRlIHRocmVzaG9sZCBpbiAxMDI0IGJ5dGUgdW5pdHMKICBkZCBpcyB0aGUgbWF4aW11bSBudW1iZXIgb2Ygc2NhdHRlci9nYXRoZXIgc2VnbWVudHMKCgpJT0NUTFMKClRoZSB0YXBlIGlzIHBvc2l0aW9uZWQgYW5kIHRoZSBkcml2ZSBwYXJhbWV0ZXJzIGFyZSBzZXQgd2l0aCBpb2N0bHMKZGVmaW5lZCBpbiBtdGlvLmggVGhlIHRhcGUgY29udHJvbCBwcm9ncmFtICdtdCcgdXNlcyB0aGVzZSBpb2N0bHMuIFRyeQp0byBmaW5kIGFuIG10IHRoYXQgc3VwcG9ydHMgYWxsIG9mIHRoZSBMaW51eCBTQ1NJIHRhcGUgaW9jdGxzIGFuZApvcGVucyB0aGUgZGV2aWNlIGZvciB3cml0aW5nIGlmIHRoZSB0YXBlIGNvbnRlbnRzIHdpbGwgYmUgbW9kaWZpZWQKKGxvb2sgZm9yIGEgcGFja2FnZSBtdC1zdCogZnJvbSB0aGUgTGludXggZnRwIHNpdGVzOyB0aGUgR05VIG10IGRvZXMKbm90IG9wZW4gZm9yIHdyaXRpbmcgZm9yLCBlLmcuLCBlcmFzZSkuCgpUaGUgc3VwcG9ydGVkIGlvY3RscyBhcmU6CgpUaGUgZm9sbG93aW5nIHVzZSB0aGUgc3RydWN0dXJlIG10b3A6CgpNVEZTRiAgIFNwYWNlIGZvcndhcmQgb3ZlciBjb3VudCBmaWxlbWFya3MuIFRhcGUgcG9zaXRpb25lZCBhZnRlciBmaWxlbWFyay4KTVRGU0ZNICBBcyBhYm92ZSBidXQgdGFwZSBwb3NpdGlvbmVkIGJlZm9yZSBmaWxlbWFyay4KTVRCU0YJU3BhY2UgYmFja3dhcmQgb3ZlciBjb3VudCBmaWxlbWFya3MuIFRhcGUgcG9zaXRpb25lZCBiZWZvcmUKICAgICAgICBmaWxlbWFyay4KTVRCU0ZNICBBcyBhYm92ZSBidXQgYXBlIHBvc2l0aW9uZWQgYWZ0ZXIgZmlsZW1hcmsuCk1URlNSICAgU3BhY2UgZm9yd2FyZCBvdmVyIGNvdW50IHJlY29yZHMuCk1UQlNSICAgU3BhY2UgYmFja3dhcmQgb3ZlciBjb3VudCByZWNvcmRzLgpNVEZTUyAgIFNwYWNlIGZvcndhcmQgb3ZlciBjb3VudCBzZXRtYXJrcy4KTVRCU1MgICBTcGFjZSBiYWNrd2FyZCBvdmVyIGNvdW50IHNldG1hcmtzLgpNVFdFT0YgIFdyaXRlIGNvdW50IGZpbGVtYXJrcy4KTVRXU00gICBXcml0ZSBjb3VudCBzZXRtYXJrcy4KTVRSRVcgICBSZXdpbmQgdGFwZS4KTVRPRkZMICBTZXQgZGV2aWNlIG9mZiBsaW5lIChvZnRlbiByZXdpbmQgcGx1cyBlamVjdCkuCk1UTk9QICAgRG8gbm90aGluZyBleGNlcHQgZmx1c2ggdGhlIGJ1ZmZlcnMuCk1UUkVURU4gUmUtdGVuc2lvbiB0YXBlLgpNVEVPTSAgIFNwYWNlIHRvIGVuZCBvZiByZWNvcmRlZCBkYXRhLgpNVEVSQVNFIEVyYXNlIHRhcGUuIElmIHRoZSBhcmd1bWVudCBpcyB6ZXJvLCB0aGUgc2hvcnQgZXJhc2UgY29tbWFuZAoJaXMgdXNlZC4gVGhlIGxvbmcgZXJhc2UgY29tbWFuZCBpcyB1c2VkIHdpdGggYWxsIG90aGVyIHZhbHVlcwoJb2YgdGhlIGFyZ3VtZW50LgpNVFNFRUsJU2VlayB0byB0YXBlIGJsb2NrIGNvdW50LiBVc2VzIFRhbmRiZXJnLWNvbXBhdGlibGUgc2VlayAoUUZBKQogICAgICAgIGZvciBTQ1NJLTEgZHJpdmVzIGFuZCBTQ1NJLTIgc2VlayBmb3IgU0NTSS0yIGRyaXZlcy4gVGhlIGZpbGUgYW5kCglibG9jayBudW1iZXJzIGluIHRoZSBzdGF0dXMgYXJlIG5vdCB2YWxpZCBhZnRlciBhIHNlZWsuCk1UU0VUQkxLIFNldCB0aGUgZHJpdmUgYmxvY2sgc2l6ZS4gU2V0dGluZyB0byB6ZXJvIHNldHMgdGhlIGRyaXZlIGludG8KICAgICAgICB2YXJpYWJsZSBibG9jayBtb2RlIChpZiBhcHBsaWNhYmxlKS4KTVRTRVRERU5TSVRZIFNldHMgdGhlIGRyaXZlIGRlbnNpdHkgY29kZSB0byBhcmcuIFNlZSBkcml2ZQogICAgICAgIGRvY3VtZW50YXRpb24gZm9yIGF2YWlsYWJsZSBjb2Rlcy4KTVRMT0NLIGFuZCBNVFVOTE9DSyBFeHBsaWNpdGx5IGxvY2svdW5sb2NrIHRoZSB0YXBlIGRyaXZlIGRvb3IuCk1UTE9BRCBhbmQgTVRVTkxPQUQgRXhwbGljaXRseSBsb2FkIGFuZCB1bmxvYWQgdGhlIHRhcGUuIElmIHRoZQoJY29tbWFuZCBhcmd1bWVudCB4IGlzIGJldHdlZW4gTVRfU1RfSFBMT0FERVJfT0ZGU0VUICsgMSBhbmQKCU1UX1NUX0hQTE9BREVSX09GRlNFVCArIDYsIHRoZSBudW1iZXIgeCBpcyB1c2VkIHNlbnQgdG8gdGhlCglkcml2ZSB3aXRoIHRoZSBjb21tYW5kIGFuZCBpdCBzZWxlY3RzIHRoZSB0YXBlIHNsb3QgdG8gdXNlIG9mCglIUCBDMTU1M0EgY2hhbmdlci4KTVRDT01QUkVTU0lPTiBTZXRzIGNvbXByZXNzaW5nIG9yIHVuY29tcHJlc3NpbmcgZHJpdmUgbW9kZSB1c2luZyB0aGUKCVNDU0kgbW9kZSBwYWdlIDE1LiBOb3RlIHRoYXQgc29tZSBkcml2ZXMgb3RoZXIgbWV0aG9kcyBmb3IKCWNvbnRyb2wgb2YgY29tcHJlc3Npb24uIFNvbWUgZHJpdmVzIChsaWtlIHRoZSBFeGFieXRlcykgdXNlCglkZW5zaXR5IGNvZGVzIGZvciBjb21wcmVzc2lvbiBjb250cm9sLiBTb21lIGRyaXZlcyB1c2UgYW5vdGhlcgoJbW9kZSBwYWdlIGJ1dCB0aGlzIHBhZ2UgaGFzIG5vdCBiZWVuIGltcGxlbWVudGVkIGluIHRoZQoJZHJpdmVyLiBTb21lIGRyaXZlcyB3aXRob3V0IGNvbXByZXNzaW9uIGNhcGFiaWxpdHkgd2lsbCBhY2NlcHQKCWFueSBjb21wcmVzc2lvbiBtb2RlIHdpdGhvdXQgZXJyb3IuCk1UU0VUUEFSVCBNb3ZlcyB0aGUgdGFwZSB0byB0aGUgcGFydGl0aW9uIGdpdmVuIGJ5IHRoZSBhcmd1bWVudCBhdCB0aGUKCW5leHQgdGFwZSBvcGVyYXRpb24uIFRoZSBibG9jayBhdCB3aGljaCB0aGUgdGFwZSBpcyBwb3NpdGlvbmVkCglpcyB0aGUgYmxvY2sgd2hlcmUgdGhlIHRhcGUgd2FzIHByZXZpb3VzbHkgcG9zaXRpb25lZCBpbiB0aGUKCW5ldyBhY3RpdmUgcGFydGl0aW9uIHVubGVzcyB0aGUgbmV4dCB0YXBlIG9wZXJhdGlvbiBpcwoJTVRTRUVLLiBJbiB0aGlzIGNhc2UgdGhlIHRhcGUgaXMgbW92ZWQgZGlyZWN0bHkgdG8gdGhlIGJsb2NrCglzcGVjaWZpZWQgYnkgTVRTRUVLLiBNVFNFVFBBUlQgaXMgaW5hY3RpdmUgdW5sZXNzCglNVF9TVF9DQU5fUEFSVElUSU9OUyBzZXQuCk1UTUtQQVJUIEZvcm1hdHMgdGhlIHRhcGUgd2l0aCBvbmUgcGFydGl0aW9uIChhcmd1bWVudCB6ZXJvKSBvciB0d28KCXBhcnRpdGlvbnMgKHRoZSBhcmd1bWVudCBnaXZlcyBpbiBtZWdhYnl0ZXMgdGhlIHNpemUgb2YKCXBhcnRpdGlvbiAxIHRoYXQgaXMgcGh5c2ljYWxseSB0aGUgZmlyc3QgcGFydGl0aW9uIG9mIHRoZQoJdGFwZSkuIFRoZSBkcml2ZSBoYXMgdG8gc3VwcG9ydCBwYXJ0aXRpb25zIHdpdGggc2l6ZSBzcGVjaWZpZWQKCWJ5IHRoZSBpbml0aWF0b3IuIEluYWN0aXZlIHVubGVzcyBNVF9TVF9DQU5fUEFSVElUSU9OUyBzZXQuCk1UU0VURFJWQlVGRkVSCglJcyB1c2VkIGZvciBzZXZlcmFsIHB1cnBvc2VzLiBUaGUgY29tbWFuZCBpcyBvYnRhaW5lZCBmcm9tIGNvdW50CiAgICAgICAgd2l0aCBtYXNrIE1UX1NFVF9PUFRJT05TLCB0aGUgbG93IG9yZGVyIGJpdHMgYXJlIHVzZWQgYXMgYXJndW1lbnQuCglUaGlzIGNvbW1hbmQgaXMgb25seSBhbGxvd2VkIGZvciB0aGUgc3VwZXJ1c2VyIChyb290KS4gVGhlCglzdWJjb21tYW5kcyBhcmU6CgkwCiAgICAgICAgICAgVGhlIGRyaXZlIGJ1ZmZlciBvcHRpb24gaXMgc2V0IHRvIHRoZSBhcmd1bWVudC4gWmVybyBtZWFucwogICAgICAgICAgIG5vIGJ1ZmZlcmluZy4KICAgICAgICBNVF9TVF9CT09MRUFOUwogICAgICAgICAgIFNldHMgdGhlIGJ1ZmZlcmluZyBvcHRpb25zLiBUaGUgYml0cyBhcmUgdGhlIG5ldyBzdGF0ZXMKICAgICAgICAgICAoZW5hYmxlZC9kaXNhYmxlZCkgdGhlIGZvbGxvd2luZyBvcHRpb25zIChpbiB0aGUKCSAgIHBhcmVudGhlc2lzIGlzIHNwZWNpZmllZCB3aGV0aGVyIHRoZSBvcHRpb24gaXMgZ2xvYmFsIG9yCgkgICBjYW4gYmUgc3BlY2lmaWVkIGRpZmZlcmVudGx5IGZvciBlYWNoIG1vZGUpOgoJICAgICBNVF9TVF9CVUZGRVJfV1JJVEVTIHdyaXRlIGJ1ZmZlcmluZyAobW9kZSkKCSAgICAgTVRfU1RfQVNZTkNfV1JJVEVTIGFzeW5jaHJvbm91cyB3cml0ZXMgKG1vZGUpCiAgICAgICAgICAgICBNVF9TVF9SRUFEX0FIRUFEICByZWFkIGFoZWFkIChtb2RlKQogICAgICAgICAgICAgTVRfU1RfVFdPX0ZNIHdyaXRpbmcgb2YgdHdvIGZpbGVtYXJrcyAoZ2xvYmFsKQoJICAgICBNVF9TVF9GQVNUX0VPTSB1c2luZyB0aGUgU0NTSSBzcGFjaW5nIHRvIEVPRCAoZ2xvYmFsKQoJICAgICBNVF9TVF9BVVRPX0xPQ0sgYXV0b21hdGljIGxvY2tpbmcgb2YgdGhlIGRyaXZlIGRvb3IgKGdsb2JhbCkKICAgICAgICAgICAgIE1UX1NUX0RFRl9XUklURVMgdGhlIGRlZmF1bHRzIGFyZSBtZWFudCBvbmx5IGZvciB3cml0ZXMgKG1vZGUpCgkgICAgIE1UX1NUX0NBTl9CU1IgYmFja3NwYWNpbmcgb3ZlciBtb3JlIHRoYW4gb25lIHJlY29yZHMgY2FuCgkJYmUgdXNlZCBmb3IgcmVwb3NpdGlvbmluZyB0aGUgdGFwZSAoZ2xvYmFsKQoJICAgICBNVF9TVF9OT19CTEtMSU1TIHRoZSBkcml2ZXIgZG9lcyBub3QgYXNrIHRoZSBibG9jayBsaW1pdHMKCQlmcm9tIHRoZSBkcml2ZSAoYmxvY2sgc2l6ZSBjYW4gYmUgY2hhbmdlZCBvbmx5IHRvCgkJdmFyaWFibGUpIChnbG9iYWwpCgkgICAgIE1UX1NUX0NBTl9QQVJUSVRJT05TIGVuYWJsZXMgc3VwcG9ydCBmb3IgcGFydGl0aW9uZWQKCQl0YXBlcyAoZ2xvYmFsKQoJICAgICBNVF9TVF9TQ1NJMkxPR0lDQUwgdGhlIGxvZ2ljYWwgYmxvY2sgbnVtYmVyIGlzIHVzZWQgaW4KCQl0aGUgTVRTRUVLIGFuZCBNVElPQ1BPUyBmb3IgU0NTSS0yIGRyaXZlcyBpbnN0ZWFkIG9mCgkJdGhlIGRldmljZSBkZXBlbmRlbnQgYWRkcmVzcy4gSXQgaXMgcmVjb21tZW5kZWQgdG8gc2V0CgkJdGhpcyBmbGFnIHVubGVzcyB0aGVyZSBhcmUgdGFwZXMgdXNpbmcgdGhlIGRldmljZQoJCWRlcGVuZGVudCAoZnJvbSB0aGUgb2xkIHRpbWVzKSAoZ2xvYmFsKQoJICAgICBNVF9TVF9TWVNWIHNldHMgdGhlIFNZU1Ygc2VtYW50aWNzIChtb2RlKQoJICAgICBNVF9TVF9OT1dBSVQgZW5hYmxlcyBpbW1lZGlhdGUgbW9kZSAoaS5lLiwgZG9uJ3Qgd2FpdCBmb3IKCSAgICAgICAgdGhlIGNvbW1hbmQgdG8gZmluaXNoKSBmb3Igc29tZSBjb21tYW5kcyAoZS5nLiwgcmV3aW5kKQoJICAgICBNVF9TVF9ERUJVR0dJTkcgZGVidWdnaW5nIChnbG9iYWw7IGRlYnVnZ2luZyBtdXN0IGJlCgkJY29tcGlsZWQgaW50byB0aGUgZHJpdmVyKQoJTVRfU1RfU0VUQk9PTEVBTlMKCU1UX1NUX0NMRUFSQk9PTEVBTlMKCSAgIFNldHMgb3IgY2xlYXJzIHRoZSBvcHRpb24gYml0cy4KICAgICAgICBNVF9TVF9XUklURV9USFJFU0hPTEQKICAgICAgICAgICBTZXRzIHRoZSB3cml0ZSB0aHJlc2hvbGQgZm9yIHRoaXMgZGV2aWNlIHRvIGtpbG9ieXRlcwogICAgICAgICAgIHNwZWNpZmllZCBieSB0aGUgbG93ZXN0IGJpdHMuCglNVF9TVF9ERUZfQkxLU0laRQoJICAgRGVmaW5lcyB0aGUgZGVmYXVsdCBibG9jayBzaXplIHNldCBhdXRvbWF0aWNhbGx5LiBWYWx1ZQoJICAgMHhmZmZmZmYgbWVhbnMgdGhhdCB0aGUgZGVmYXVsdCBpcyBub3QgdXNlZCBhbnkgbW9yZS4KCU1UX1NUX0RFRl9ERU5TSVRZCglNVF9TVF9ERUZfRFJWQlVGRkVSCgkgICBVc2VkIHRvIHNldCBvciBjbGVhciB0aGUgZGVuc2l0eSAoOCBiaXRzKSwgYW5kIGRyaXZlIGJ1ZmZlcgoJICAgc3RhdGUgKDMgYml0cykuIElmIHRoZSB2YWx1ZSBpcyBNVF9TVF9DTEVBUl9ERUZBVUxUCgkgICAoMHhmZmZmZikgdGhlIGRlZmF1bHQgd2lsbCBub3QgYmUgdXNlZCBhbnkgbW9yZS4gT3RoZXJ3aXNlCgkgICB0aGUgbG93ZXJtb3N0IGJpdHMgb2YgdGhlIHZhbHVlIGNvbnRhaW4gdGhlIG5ldyB2YWx1ZSBvZgoJICAgdGhlIHBhcmFtZXRlci4KCU1UX1NUX0RFRl9DT01QUkVTU0lPTgoJICAgVGhlIGNvbXByZXNzaW9uIGRlZmF1bHQgd2lsbCBub3QgYmUgdXNlZCBpZiB0aGUgdmFsdWUgb2YKCSAgIHRoZSBsb3dlcm1vc3QgYnl0ZSBpcyAweGZmLiBPdGhlcndpc2UgdGhlIGxvd2VybW9zdCBiaXQKCSAgIGNvbnRhaW5zIHRoZSBuZXcgZGVmYXVsdC4gSWYgdGhlIGJpdHMgOC0xNSBhcmUgc2V0IHRvIGEKCSAgIG5vbi16ZXJvIG51bWJlciwgYW5kIHRoaXMgbnVtYmVyIGlzIG5vdCAweGZmLCB0aGUgbnVtYmVyIGlzCgkgICB1c2VkIGFzIHRoZSBjb21wcmVzc2lvbiBhbGdvcml0aG0uIFRoZSB2YWx1ZQoJICAgTVRfU1RfQ0xFQVJfREVGQVVMVCBjYW4gYmUgdXNlZCB0byBjbGVhciB0aGUgY29tcHJlc3Npb24KCSAgIGRlZmF1bHQuCglNVF9TVF9TRVRfVElNRU9VVAoJICAgU2V0IHRoZSBub3JtYWwgdGltZW91dCBpbiBzZWNvbmRzIGZvciB0aGlzIGRldmljZS4gVGhlCgkgICBkZWZhdWx0IGlzIDkwMCBzZWNvbmRzICgxNSBtaW51dGVzKS4gVGhlIHRpbWVvdXQgc2hvdWxkIGJlCgkgICBsb25nIGVub3VnaCBmb3IgdGhlIHJldHJpZXMgZG9uZSBieSB0aGUgZGV2aWNlIHdoaWxlCgkgICByZWFkaW5nL3dyaXRpbmcuCglNVF9TVF9TRVRfTE9OR19USU1FT1VUCgkgICBTZXQgdGhlIGxvbmcgdGltZW91dCB0aGF0IGlzIHVzZWQgZm9yIG9wZXJhdGlvbnMgdGhhdCBhcmUKCSAgIGtub3duIHRvIHRha2UgYSBsb25nIHRpbWUuIFRoZSBkZWZhdWx0IGlzIDE0MDAwIHNlY29uZHMKCSAgICgzLjkgaG91cnMpLiBGb3IgZXJhc2UgdGhpcyB2YWx1ZSBpcyBmdXJ0aGVyIG11bHRpcGxpZWQgYnkKCSAgIGVpZ2h0LgoJTVRfU1RfU0VUX0NMTgoJICAgU2V0IHRoZSBjbGVhbmluZyByZXF1ZXN0IGludGVycHJldGF0aW9uIHBhcmFtZXRlcnMgdXNpbmcKCSAgIHRoZSBsb3dlc3QgMjQgYml0cyBvZiB0aGUgYXJndW1lbnQuIFRoZSBkcml2ZXIgY2FuIHNldCB0aGUKCSAgIGdlbmVyaWMgc3RhdHVzIGJpdCBHTVRfQ0xOIGlmIGEgY2xlYW5pbmcgcmVxdWVzdCBiaXQgcGF0dGVybgoJICAgaXMgZm91bmQgZnJvbSB0aGUgZXh0ZW5kZWQgc2Vuc2UgZGF0YS4gTWFueSBkcml2ZXMgc2V0IG9uZSBvcgoJICAgbW9yZSBiaXRzIGluIHRoZSBleHRlbmRlZCBzZW5zZSBkYXRhIHdoZW4gdGhlIGRyaXZlIG5lZWRzCgkgICBjbGVhbmluZy4gVGhlIGJpdHMgYXJlIGRldmljZS1kZXBlbmRlbnQuIFRoZSBkcml2ZXIgaXMKCSAgIGdpdmVuIHRoZSBudW1iZXIgb2YgdGhlIHNlbnNlIGRhdGEgYnl0ZSAodGhlIGxvd2VzdCBlaWdodAoJICAgYml0cyBvZiB0aGUgYXJndW1lbnQ7IG11c3QgYmUgPj0gMTggKHZhbHVlcyAxIC0gMTcKCSAgIHJlc2VydmVkKSBhbmQgPD0gdGhlIG1heGltdW0gcmVxdWVzdGVkIHNlbnNlIGRhdGEgc2l4ZSksIAoJICAgYSBtYXNrIHRvIHNlbGVjdCB0aGUgcmVsZXZhbnQgYml0cyAodGhlIGJpdHMgOS0xNiksIGFuZCB0aGUKCSAgIGJpdCBwYXR0ZXJuIChiaXRzIDE3LTIzKS4gSWYgdGhlIGJpdCBwYXR0ZXJuIGlzIHplcm8sIG9uZQoJICAgb3IgbW9yZSBiaXRzIHVuZGVyIHRoZSBtYXNrIGluZGljYXRlIGNsZWFuaW5nIHJlcXVlc3QuIElmCgkgICB0aGUgcGF0dGVybiBpcyBub24temVybywgdGhlIHBhdHRlcm4gbXVzdCBtYXRjaCB0aGUgbWFza2VkCgkgICBzZW5zZSBkYXRhIGJ5dGUuCgoJICAgKFRoZSBjbGVhbmluZyBiaXQgaXMgc2V0IGlmIHRoZSBhZGRpdGlvbmFsIHNlbnNlIGNvZGUgYW5kCgkgICBxdWFsaWZpZXIgMDBoIDE3aCBhcmUgc2VlbiByZWdhcmRsZXNzIG9mIHRoZSBzZXR0aW5nIG9mCgkgICBNVF9TVF9TRVRfQ0xOLikKClRoZSBmb2xsb3dpbmcgaW9jdGwgdXNlcyB0aGUgc3RydWN0dXJlIG10cG9zOgpNVElPQ1BPUyBSZWFkcyB0aGUgY3VycmVudCBwb3NpdGlvbiBmcm9tIHRoZSBkcml2ZS4gVXNlcwogICAgICAgIFRhbmRiZXJnLWNvbXBhdGlibGUgUUZBIGZvciBTQ1NJLTEgZHJpdmVzIGFuZCB0aGUgU0NTSS0yCiAgICAgICAgY29tbWFuZCBmb3IgdGhlIFNDU0ktMiBkcml2ZXMuCgpUaGUgZm9sbG93aW5nIGlvY3RsIHVzZXMgdGhlIHN0cnVjdHVyZSBtdGdldCB0byByZXR1cm4gdGhlIHN0YXR1czoKTVRJT0NHRVQgUmV0dXJucyBzb21lIHN0YXR1cyBpbmZvcm1hdGlvbi4KICAgICAgICBUaGUgZmlsZSBudW1iZXIgYW5kIGJsb2NrIG51bWJlciB3aXRoaW4gZmlsZSBhcmUgcmV0dXJuZWQuIFRoZQogICAgICAgIGJsb2NrIGlzIC0xIHdoZW4gaXQgY2FuJ3QgYmUgZGV0ZXJtaW5lZCAoZS5nLiwgYWZ0ZXIgTVRCU0YpLgogICAgICAgIFRoZSBkcml2ZSB0eXBlIGlzIGVpdGhlciBNVElTU0NTSTEgb3IgTVRJU1NDU0kyLgogICAgICAgIFRoZSBudW1iZXIgb2YgcmVjb3ZlcmVkIGVycm9ycyBzaW5jZSB0aGUgcHJldmlvdXMgc3RhdHVzIGNhbGwKICAgICAgICBpcyBzdG9yZWQgaW4gdGhlIGxvd2VyIHdvcmQgb2YgdGhlIGZpZWxkIG10X2VycmVnLgogICAgICAgIFRoZSBjdXJyZW50IGJsb2NrIHNpemUgYW5kIHRoZSBkZW5zaXR5IGNvZGUgYXJlIHN0b3JlZCBpbiB0aGUgZmllbGQKICAgICAgICBtdF9kc3JlZyAoc2hpZnRzIGZvciB0aGUgc3ViZmllbGRzIGFyZSBNVF9TVF9CTEtTSVpFX1NISUZUIGFuZAogICAgICAgIE1UX1NUX0RFTlNJVFlfU0hJRlQpLgoJVGhlIEdNVF94eHggc3RhdHVzIGJpdHMgcmVmbGVjdCB0aGUgZHJpdmUgc3RhdHVzLiBHTVRfRFJfT1BFTgoJaXMgc2V0IGlmIHRoZXJlIGlzIG5vIHRhcGUgaW4gdGhlIGRyaXZlLiBHTVRfRU9EIG1lYW5zIGVpdGhlcgoJZW5kIG9mIHJlY29yZGVkIGRhdGEgb3IgZW5kIG9mIHRhcGUuIEdNVF9FT1QgbWVhbnMgZW5kIG9mIHRhcGUuCgoKTUlTQ0VMTEFORU9VUyBDT01QSUxFIE9QVElPTlMKClRoZSByZWNvdmVyZWQgd3JpdGUgZXJyb3JzIGFyZSBjb25zaWRlcmVkIGZhdGFsIGlmIFNUX1JFQ09WRVJFRF9XUklURV9GQVRBTAppcyBkZWZpbmVkLgoKVGhlIG1heGltdW0gbnVtYmVyIG9mIHRhcGUgZGV2aWNlcyBpcyBkZXRlcm1pbmVkIGJ5IHRoZSBkZWZpbmUKU1RfTUFYX1RBUEVTLiBJZiBtb3JlIHRhcGVzIGFyZSBkZXRlY3RlZCBhdCBkcml2ZXIgaW5pdGlhbGl6YXRpb24sIHRoZQptYXhpbXVtIGlzIGFkanVzdGVkIGFjY29yZGluZ2x5LgoKSW1tZWRpYXRlIHJldHVybiBmcm9tIHRhcGUgcG9zaXRpb25pbmcgU0NTSSBjb21tYW5kcyBjYW4gYmUgZW5hYmxlZCBieQpkZWZpbmluZyBTVF9OT1dBSVQuIElmIHRoaXMgaXMgZGVmaW5lZCwgdGhlIHVzZXIgc2hvdWxkIHRha2UgY2FyZSB0aGF0CnRoZSBuZXh0IHRhcGUgb3BlcmF0aW9uIGlzIG5vdCBzdGFydGVkIGJlZm9yZSB0aGUgcHJldmlvdXMgb25lIGhhcwpmaW5pc2hlZC4gVGhlIGRyaXZlcyBhbmQgU0NTSSBhZGFwdGVycyBzaG91bGQgaGFuZGxlIHRoaXMgY29uZGl0aW9uCmdyYWNlZnVsbHksIGJ1dCBzb21lIGRyaXZlL2FkYXB0ZXIgY29tYmluYXRpb25zIGFyZSBrbm93biB0byBoYW5nIHRoZQpTQ1NJIGJ1cyBpbiB0aGlzIGNhc2UuCgpUaGUgTVRFT00gY29tbWFuZCBpcyBieSBkZWZhdWx0IGltcGxlbWVudGVkIGFzIHNwYWNpbmcgb3ZlciAzMjc2NwpmaWxlbWFya3MuIFdpdGggdGhpcyBtZXRob2QgdGhlIGZpbGUgbnVtYmVyIGluIHRoZSBzdGF0dXMgaXMKY29ycmVjdC4gVGhlIHVzZXIgY2FuIHJlcXVlc3QgdXNpbmcgZGlyZWN0IHNwYWNpbmcgdG8gRU9EIGJ5IHNldHRpbmcKU1RfRkFTVF9FT00gMSAob3IgdXNpbmcgdGhlIE1UX1NUX09QVElPTlMgaW9jdGwpLiBJbiB0aGlzIGNhc2UgdGhlIGZpbGUKbnVtYmVyIHdpbGwgYmUgaW52YWxpZC4KCldoZW4gdXNpbmcgcmVhZCBhaGVhZCBvciBidWZmZXJlZCB3cml0ZXMgdGhlIHBvc2l0aW9uIHdpdGhpbiB0aGUgZmlsZQptYXkgbm90IGJlIGNvcnJlY3QgYWZ0ZXIgdGhlIGZpbGUgaXMgY2xvc2VkIChjb3JyZWN0IHBvc2l0aW9uIG1heQpyZXF1aXJlIGJhY2tzcGFjaW5nIG92ZXIgbW9yZSB0aGFuIG9uZSByZWNvcmQpLiBUaGUgY29ycmVjdCBwb3NpdGlvbgp3aXRoaW4gZmlsZSBjYW4gYmUgb2J0YWluZWQgaWYgU1RfSU5fRklMRV9QT1MgaXMgZGVmaW5lZCBhdCBjb21waWxlCnRpbWUgb3IgdGhlIE1UX1NUX0NBTl9CU1IgYml0IGlzIHNldCBmb3IgdGhlIGRyaXZlIHdpdGggYW4gaW9jdGwuCihUaGUgZHJpdmVyIGFsd2F5cyBiYWNrcyBvdmVyIGEgZmlsZW1hcmsgY3Jvc3NlZCBieSByZWFkIGFoZWFkIGlmIHRoZQp1c2VyIGRvZXMgbm90IHJlcXVlc3QgZGF0YSB0aGF0IGZhci4pCgoKREVCVUdHSU5HIEhJTlRTCgpUbyBlbmFibGUgZGVidWdnaW5nIG1lc3NhZ2VzLCBlZGl0IHN0LmMgYW5kICNkZWZpbmUgREVCVUcgMS4gQXMgc2VlbgphYm92ZSwgZGVidWdnaW5nIGNhbiBiZSBzd2l0Y2hlZCBvZmYgd2l0aCBhbiBpb2N0bCBpZiBkZWJ1Z2dpbmcgaXMKY29tcGlsZWQgaW50byB0aGUgZHJpdmVyLiBUaGUgZGVidWdnaW5nIG91dHB1dCBpcyBub3Qgdm9sdW1pbm91cy4KCklmIHRoZSB0YXBlIHNlZW1zIHRvIGhhbmcsIEkgd291bGQgYmUgdmVyeSBpbnRlcmVzdGVkIHRvIGhlYXIgd2hlcmUKdGhlIGRyaXZlciBpcyB3YWl0aW5nLiBXaXRoIHRoZSBjb21tYW5kICdwcyAtbCcgeW91IGNhbiBzZWUgdGhlIHN0YXRlCm9mIHRoZSBwcm9jZXNzIHVzaW5nIHRoZSB0YXBlLiBJZiB0aGUgc3RhdGUgaXMgRCwgdGhlIHByb2Nlc3MgaXMKd2FpdGluZyBmb3Igc29tZXRoaW5nLiBUaGUgZmllbGQgV0NIQU4gdGVsbHMgd2hlcmUgdGhlIGRyaXZlciBpcwp3YWl0aW5nLiBJZiB5b3UgaGF2ZSB0aGUgY3VycmVudCBTeXN0ZW0ubWFwIGluIHRoZSBjb3JyZWN0IHBsYWNlIChpbgovYm9vdCBmb3IgdGhlIHByb2NwcyBJIHVzZSkgb3IgaGF2ZSB1cGRhdGVkIC9ldGMvcHNkYXRhYmFzZSAoZm9yIGttZW0KcHMpLCBwcyB3cml0ZXMgdGhlIGZ1bmN0aW9uIG5hbWUgaW4gdGhlIFdDSEFOIGZpZWxkLiBJZiBub3QsIHlvdSBoYXZlCnRvIGxvb2sgdXAgdGhlIGZ1bmN0aW9uIGZyb20gU3lzdGVtLm1hcC4KCk5vdGUgYWxzbyB0aGF0IHRoZSB0aW1lb3V0cyBhcmUgdmVyeSBsb25nIGNvbXBhcmVkIHRvIG1vc3Qgb3RoZXIKZHJpdmVycy4gVGhpcyBtZWFucyB0aGF0IHRoZSBMaW51eCBkcml2ZXIgbWF5IGFwcGVhciBodW5nIGFsdGhvdWdoIHRoZQpyZWFsIHJlYXNvbiBpcyB0aGF0IHRoZSB0YXBlIGZpcm13YXJlIGhhcyBnb3QgY29uZnVzZWQuCg==