LyoqIEBwYWdlIGFwcmVxX2NoYW5nZXMgQ0hBTkdFUwpAYnJpZWYgTGlzdCBvZiBtYWpvciBjaGFuZ2VzLgoKQHN1YnN1YnNlY3Rpb24gdjJfMTggQ2hhbmdlcyB3aXRoIGxpYmFwcmVxMi0yLjE4IChpbiBkZXZlbG9wbWVudCkKCi0gTXVsdGlwYXJ0IHBhcnNlcgogIEFsbG93IGVtcHR5IHBhcnQgIm5hbWUiIGFuZCAiZmlsZW5hbWUiIChyZXN0b3JlIHYyLjE2IGJlaGF2aW91cikuCgpAc3Vic3Vic2VjdGlvbiB2Ml8xNyBDaGFuZ2VzIHdpdGggbGliYXByZXEyLTIuMTcgKHJlbGVhc2VkIDI1IEF1Z3VzdCwgMjAyMikKCi0gTXVsdGlwYXJ0IGhlYWRlciBwYXJzZXIgW1lhbm4gWWxhdmljXQogIFJld29yayBhcHJlcV9wYXJzZV9oZWFkZXJzKCkgdG8gZGlzY2FyZCBDUkxGIG9mIGZvbGRlZCB2YWx1ZXMuCgpAc3Vic3Vic2VjdGlvbiB2Ml8xNiBDaGFuZ2VzIHdpdGggbGliYXByZXEyLTIuMTYgKHJlbGVhc2VkIDE3IE1hcmNoLCAyMDIxKQoKLSBCdWlsZCBbU3RldmUgSGF5XQogIEZpeCBmaWxlIGF0dHJpYnV0ZSBmb3IgbW9kdWxlcyBsaXN0ZWQgYXMgcHJvdmlkZWQgaW4gTUVUQS55bWwuCgpAc3Vic3Vic2VjdGlvbiB2Ml8xNSBDaGFuZ2VzIHdpdGggbGliYXByZXEyLTIuMTUgKHJlbGVhc2VkIDE3IE5vdmVtYmVyLCAyMDIwKQoKLSBTRUNVUklUWTogQ1ZFLTIwMTktMTI0MTIgKGN2ZS5taXRyZS5vcmcpCiAgQyBBUEkgW01heCBLZWxsZXJtYW5uXQogIEZpeCBhIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSB3aGVuIHBhcnNpbmcgbWFsZm9ybWVkCiAgbXVsdGlwYXJ0IGRhdGEgaW4gYXByZXFfcGFyc2VfbXVsdGlwYXJ0KCkuCgotIEMgQVBJIFtZYW5uIFlsYXZpY10KICBJbiBhcHJlcV9icmlnYWRlX2NvbmNhdCgpLCBmaXggbWVtb3J5IGhhbmRsaW5nIGFuZCBjcmVhdGUKICB0aGUgRklMRSBidWNrZXQgY29ycmVjdGx5LgoKLSBCdWlsZCBbUGV0ciBQaXNhcl0KICBGaXggIm1ha2UgcmVsZWFzZSIgb24gVW5peC4KCkBzdWJzdWJzZWN0aW9uIHYyXzE0IENoYW5nZXMgd2l0aCBsaWJhcHJlcTItMi4xNCAobm90IHJlbGVhc2VkKQoKLSBCdWlsZCBbc3RldmVoYXldCiAgRml4IGh0dHBkLTIuNC54IGJ1aWxkIGZvciBXaW4zMi4KCi0gQnVpbGQgW1JpY2hhcmQgTSBLYW5kYXJpYW5dCiAgRml4IGRlYnVnIGJ1aWxkIGZvciBXaW4zMi4KCi0gQyBBUEkgW2pvZXNdCiAgRml4IG1vZF9hcHJlcTIncyBjb25maWcgbWVyZ2luZy4KCi0gUGVybCBnbHVlCiAgVXBkYXRlZCBsaWNlbnNlIGluZm8gaW4gTUVUQS55bWwKICBVcGRhdGVkIGRvY3VtZW50YXRpb24gZm9yIEFwYWNoZTI6OkNvb2tpZQoKQHN1YnN1YnNlY3Rpb24gdjJfMTMgQ2hhbmdlcyB3aXRoIGxpYmFwcmVxMi0yLjEzIChyZWxlYXNlZCBEZWNlbWJlciAzLCAyMDEwKQoKLSBIVFRQIE9ubHkgQ29va2llIFtSb2JlcnQgU3RvbmUgJiBBZGFtIFByaW1lXQogIFRoZSBDIGFuZCBQZXJsIENvb2tpZSBBUElzIG5vdyBzdXBwb3J0IGFuIEh0dHBPbmx5IGZsYWcgdG8gdGVsbCAKICB1c2VyIGFnZW50cyB0byBkZW55IGNsaWVudC1zaWRlIHNjcmlwdCBhY2Nlc3MgdG8gdGhlIGNvb2tpZQoKQHN1YnN1YnNlY3Rpb24gdjJfMTIgQ2hhbmdlcyB3aXRoIGxpYmFwcmVxMi0yLjEyIChyZWxlYXNlZCBNYXJjaCAxMywgMjAwOSkKCi0gQyBBUEkgW2pvZXNdCiAgTWFrZSB0aGUgY29va2llIHBhcnNlciBhIGxpdHRsZSBtb3JlIGZsZXhpYmxlLgoKQHN1YnN1YnNlY3Rpb24gdjJfMTEgQ2hhbmdlcyB3aXRoIGxpYmFwcmVxMi0yLjExIChub3QgcmVsZWFzZWQpCgotIEludGVyYWN0aXZlIENHSSBtb2R1bGUgW2lzc2FjXQogIEFsbG93IGNnaSBtb2R1bGUgdG8gaW50ZXJhY3RpdmVseSBwcm9tcHQgZm9yIHBhcmFtZXRlcnMgYW5kIGNvb2tpZXMgd2hlbgogIHJ1bm5pbmcgYSBzY3JpcHQgZnJvbSB0aGUgY29tbWFuZCBsaW5lIGFuZCBub3QgZnJvbSBhIENHSSBpbnRlcmZhY2UKCkBzdWJzdWJzZWN0aW9uIHYyXzEwIENoYW5nZXMgd2l0aCBsaWJhcHJlcTItMi4xMCAobm90IHJlbGVhc2VkKQoKLSBQZXJsIEdsdWUgW2pvZXNdCiAgRml4IHRoZSBsaW5raW5nIG9mIHRoZSBwZXJsIG1vZHVsZXMgdG8gbGliYXByZXEyIGFuZCBsaWJhcHIKICBvbiBTb2xhcmlzLgoKLSBQZXJsIEdsdWUgW2pvZXNdCiAgRml4IGluc3RhbGwtdGltZSBsaW5raW5nIGlzc3VlIG9mIHRoZSAuc28gbW9kdWxlcy4KICBQcmV2aW91c2x5IHRoZXkgd291bGQgcmVtYWluIGxpbmtlZCBhZ2FpbnN0IHRoZSBzcmMKICBsaWJyYXJ5IHBhdGgsIG5vdCB0aGUgaW5zdGFsbCBwYXRoLgoKLSBDIEFQSSBbam9lc10KICBBZGQgb3B0aW9uYWwgaW50ZXJmYWNlIGZvciBhcHJlcV9oYW5kbGVfYXBhY2hlMigpLgoKLSBDIEFQSSBbam9lc10KICBDbGVhbiB1cCBidWdneSBhcHJlcV9ob29rX2ZpbmRfcGFyYW0oKS4KCi0gUGVybCBHbHVlIEJ1aWxkIFtQaGlsaXAgTS4gR29sbHVjY2ldCiAgY29uZmlnLnN0YXR1cyBmb3JtYXQgY2hhbmdlZCBmb3JtYXQgeWV0IGFnYWluIGluIGF1dG9jb25mIDIuNjIrLgoKLSBMaWNlbnNlIFtNbGFkZW4gVHVya10KICBBZGQgbGliYXByZXEucmMgYW5kIGdlbmVyYXRlIGxpYmFwcmVxLnJlcwoKLSBCdWlsZCBbTWxhZGVuIFR1cmtdCiAgQWRkIEFQUkVRX0RFQ0xBUkVfRVhQT1JUL0FQUkVRX0RFQ0xBUkVfU1RBVElDCiAgaW4gdGhlIHNhbWUgd2F5IGFzIEFQUiBkZWNsYXJlcyBzbyB0aGF0IGRsbGV4cG9ydC9kbGxpbXBvcnQKICBnZXQgY29ycmVjdGx5IGhhbmRsZWQuICAgCgotIEJ1aWxkIFtSYW5keSBLb2Jlc10KICBBZGQgYXBwcm9wcmlhdGUgbWFuaWZlc3QgY29tbWFuZCB0byBlbWJlZCBtYW5pZmVzdCBmaWxlcyBvbiBXaW4zMiAKICB3aGVuIHVzaW5nIFZDOAoKLSBDIEFQSSBbQW5keSBHcnVuZG1hbiwgam9lc10KICBBZGQgbWlzc2luZyBieXRlc19yZWFkIGluaXRpYWxpemVyIHRvIGFwcmVxX2hhbmRsZV9jdXN0b20oKS4KCi0gQyBBUEkgW3N1Z2dlc3RlZCBieSBWaW5heSBZIFMsIHRlc3RlZCBieSBTdGV2ZSBIYXkgYW5kIFBldGVyIFdhbHNoYW1dCiAgRm9yIFdpbjMyLCByZW1vdmUgdGhlCiAgICAgZmxhZyB8PSBBUFJfRklMRV9OT0NMRUFOVVAgfCBBUFJfU0hBUkVMT0NLOwogIGluIGFwcmVxX2ZpbGVfY2xlYW51cCwgdG8gYXZvaWQgcHJvYmxlbXMgd2l0aCBmaWxlIHVwbG9hZHMuCgpAc3Vic3Vic2VjdGlvbiB2Ml8wOSBDaGFuZ2VzIHdpdGggbGliYXByZXEyLTIuMDkgKCBub3QgcmVsZWFzZWQpCgotIEMgQVBJIFtqb2VzXQogIEZpeCBsZWFrIGFzc29jaWF0ZWQgdG8gY2FsbGluZyBhcHJlcV9icmlnYWRlX2Z3cml0ZSgpIG9uIGFuIHVwbG9hZAogIGJyaWdhZGUuCgotIEJ1aWxkIFtQaGlsaXAgTS4gR29sbHVjY2ldCiAgU3VuT1MgKFNvbGFyaXMpIAogIFVzZXJzIG11c3QgdXNlIGdtYWtlIG5vdCBtYWtlIGZvciBidWlsZGluZy4KCi0gQnVpbGQgW1BoaWxpcCBNLiBHb2xsdWNjaV0KICBTdW5PUyAoU29sYXJpcykKICBDb2RlIGFyb3VuZCBidWcgaW4gbGlidG9vbCAoYXQgbGVhc3QgaW4gMS41LjE4LCAxLjUuMjAsIDEuNS4yMikKICBjYXVzaW5nIG1vZF9hcHJlcTIgdG8gYmUgYnVpbHQgaW5zdGVhZCBvZiBtb2RfYXByZXEyLnNvCgotIEMgQVBJIFtQaGlsaXAgTS4gR29sbHVjY2ldCiAgRml4IGNvbXBhcmlzb24gc2lnbmVkIHZzIHVuc2lnbmVkIGNvbXBhcmlzb24KICBpbiBhcHJlcV9md3JpdGV2KCkgb24gU3VuT1MvZ2NjIHdoZXJlIGlvdmVjLmlvdl9sZW4gaXMgYSBsb25nLgoKLSBCdWlsZCBbUGhpbGlwIE0uIEdvbGx1Y2NpXQogIFN1bk9TIChTb2xhcmlzKQogIGZpeCBkdXBsaWNhdGUgbGluayBlcnJvciB0byBsaWJleHBhdC5zbyAtLSBieSB1c2luZyB0aGUgb25lIGZyb20gaHR0cGQKICBleGNsdXNpdmVseSBub3cuCgotIEJ1aWxkIFtQaGlsaXAgTS4gR29sbHVjY2ldCiAgY29kZSBhcm91bmQgfCNfISFfI3wgYXV0b2NvbmYgMi42MCBidWcuCgoKQHN1YnN1YnNlY3Rpb24gdjJfMDggQ2hhbmdlcyB3aXRoIGxpYmFwcmVxMi0yLjA4IChyZWxlYXNlZCBBdWd1c3QgOCwgMjAwNikKCi0gUGVybCBBUEkgW1JhbmR5IEtvYmVzXQogIGFkZCBBUFJfRklMRV9OT0NMRUFOVVAgfCBBUFJfU0hBUkVMT0NLIHRvIGZsYWdzIHBhc3NlZCB0bwogIGFwcmVxX2ZpbGVfbWt0ZW1wKCkgb24gV2luMzIgaW4gbGlicmFyeS91dGlsLmMsIGluIG9yZGVyIHRvIAogIGNsZWFuIHVwIG9jY2FzaW9uYWwgc3RyYXkgdGVtcCBmaWxlcyBsZWZ0IGJlaGluZCBpbiB0aGUgCiAgUGVybCB1cGxvYWQgdGVzdCAocmVwb3J0ZWQgYnkgU3RldmUgSGF5KQoKLSBCdWlsZCBbUGhpbGlwIE0uIEdvbGx1Y2NpLCBCb2phbiBTbW9qdmVyLCBqb2VzXQogIG1ha2UgaW5wdXQgYnJpZ2FkZSB2b2xhdGlsZSBpbiBvcmRlciB0byBnaXZlIGhpbnRzIHRvIEdDQwogIGh0dHBzOi8vYnVnemlsbGEucmVkaGF0LmNvbS9idWd6aWxsYS9zaG93X2J1Zy5jZ2k/aWQ9MTkzNzQwCiAgVGhpcyBmaXhlcyBhbiBpbmZpbml0ZSBsb29rIHNwbGl0X29uX2JkcnkoKSBvZiBsaWJyYXJ5L3BhcnNlcl9tdWx0aXBhcnQuYwogIHBhcnRpY3VsYXJseSBvbiBsaW51eC9nY2MgNC54IHBsYXRmb3Jtcy4KCi0gUGVybCBHbHVlCiAgRml4ICJ2YWx1ZSBjb21wdXRlZCBub3QgdXNlZCIgZ2NjIDQuMS54IGNvbXBpbGUgZXJyb3JzCiAgCi0gQnVpbGQgW1JhbmR5IEtvYmVzXQogIEZpeCB0aGUgbG9jYXRpb24gb2YgYXB4cyBhbmQgdGhlIG5hbWVzIG9mIHRoZSBhcHIgYW5kIGFwcnV0aWwKICBsaWJyYXJpZXMgb24gV2luMzIgdG8gZW5hYmxlIGJ1aWxkaW5nIGFnYWluc3QgQXBhY2hlLzIuMi4KCi0gUGVybCBHbHVlIGRvY3MgW1BoaWxpcCBNLiBHb2xsdWNjaV0KICBGaXggdGhlICdkb2NzX2luc3RhbGwnIG1ha2UgdGFyZ2V0IHRvIGFjdHVhbGx5IGluc3RhbGwKICB0aGUgZG9jcyBmb3IgdGhlIHBlcmwgZ2x1ZS4KCi0gUGVybCBHbHVlIEJ1aWxkIFtQaGlsaXAgTS4gR29sbHVjY2ldCiAgUmVnZW5lcmF0ZSBnbHVlL3BlcmwveHNidWlsZGVyL3BwcG9ydC5oIHRvIGZpeCBwZXJsIDUuOC44KyBvbiBzb21lCiAgcGxhZm9ybXMuICAKCi0gQyBBUEkgW2pvZXNdCiAgQWRkIGNvZGUgZm9yIGFwcmVxX2Nvb2tpZXMoKS4KCi0gUGVybCBBUEkgW2pvZXNdCiAgRXhwb3NlIHRoZSBjb25zdGFudHMgaW4gYXByZXFfZXJyb3IuaCB2aWEgdGhlIEFQUjo6UmVxdWVzdDo6RXJyb3IgcGFja2FnZS4KCgpAc3Vic3Vic2VjdGlvbiB2Ml8wNyBDaGFuZ2VzIHdpdGggbGliYXByZXEyLTIuMDcgKHJlbGVhc2VkIEZlYnJ1YXJ5IDEyLCAyMDA2KQoKCi0gQyBBUEkgW2pvZXNdCiAgU0VDVVJJVFk6IENWRS0yMDA2LTAwNDIgKGN2ZS5taXRyZS5vcmcpCiAgRWxpbWluYXRlIHBvdGVudGlhbCBxdWFkcmF0aWMgYmVoYXZpb3IgaW4gYXByZXFfcGFyc2VfaGVhZGVycygpIGFuZAogIGFwcmVxX3BhcnNlX3VybGVuY29kZWQoKS4KCi0gUGVybCBBUEkgW1BoaWxpcCBNLiBHb2xsdWNjaV0KICBGaXggQXBhY2hlMjo6Q29va2llLT5jb29raWVzKCkgdG8gY29tcGx5IHdpdGggaXRzIGRvY3VtZW50YXRpb24KCi0gQyBBUEkgW1BoaWxpcCBNLiBHb2xsdWNjaV0KICBVc2UgdGhlIEFQUkVRX0RFRkFVTFRfUkVBRF9MSU1JVCBjb25zdGFudCBmb3IgdGhlIHJlYWRfbGltaXQKCi0gQyBBUEkgW1ZpbGxlIFNreXR05CwgRGlyayBOZWhyaW5nXQogIEFkZCBleHBsaWNpdCBjYXN0IGluIGFwcmVxX2VzY2FwZSgpL2FwcmVxX3V0aWwuaCB0byBrZWVwCiAgQysrIGNvbXBpbGVycyBoYXBweS4KCi0gQyBBUEkgW2pvZXNdCiAgUHJvdGVjdCBhZ2FpbnN0IGFyYml0cmFyeSByZWN1cnNpb24gZGVwdGggaW4gYXByZXFfcGFyc2VfbXVsdGlwYXJ0KCkKICBieSBhZGRpbmcgYSByZWFzb25hYmxlIGNvbXBpbGUtdGltZSBNQVhfTEVWRUwgbGltaXQuCgotIEMgQVBJIFtqb2VzXQogIENsZWFuIHVwIGVuZC1vZi1maWxlIHBhcnNpbmcgZm9yIGFwcmVxX3BhcnNlX211bHRpcGFydCgpLCAKICBjb25mb3JtaW5nIHRvIHJmYy0yMDQ2IKcgNS4xLjEuCgotIFBlcmwgQVBJIFtqb2VzXQogIE1vdmUgQVBSOjpSZXF1ZXN0OjpQYXJhbTo6VGFibGUgYW5kIEFQUjo6UmVxdWVzdDo6Q29va2llOjpUYWJsZQogIHBhY2thZ2VzIHRvIEFQUjo6UmVxdWVzdCBtb2R1bGUuCgotIFBlcmwgWFMgW1N0ZXZlIEhheV0KICBGaXggY29tcGlsZSBwcm9ibGVtcyBvbiBXaW4zMiB3aXRob3V0IFBFUkxfSU1QTElDSVRfU1lTCiAgcmVsYXRlZCB0byBsaW5rIGJlaW5nIGFuIHVucmVzb2x2ZWQgc3ltYm9sLgoKLSBQZXJsIEFQSSBbam9lc10KICBBUFI6OlJlcXVlc3Q6OkNvb2tpZTo6dGhhdygpIGlzbid0IGEgY2xhc3MgbWV0aG9kLgoKLSBDIEFQSSBbam9lc10KICBGaXggb2ZmLWJ5LW9uZSBidWcgaW4gdGhlIGNvbnRpbnVhdGlvbi1saW5lcyBwb3J0aW9uIG9mIHRoZQogIGhlYWRlciBwYXJzZXIuCgotIFBlcmwgQVBJIFtqb2VzXQogIE1vdmUgQVBSOjpSZXF1ZXN0Ojp1cGxvYWQgdG8gQVBSOjpSZXF1ZXN0LCB3aGVyZSBpdCBiZWxvbmdzLgoKLSBQZXJsIFhTIFtOaWtvbGF5IEFuYW5pZXZdCiAgVXNlIE1QX1NUQVRJQyBkZWNsYXJhdGlvbnMgdG8gYWxsb3cgQ3lnd2luIGJ1aWxkcy4KCi0gUGVybCBBUEkgW2pvZXNdCiAgZW5jb2RlKCkvZGVjb2RlKCkgd2VyZSBidXN0ZWQgd2l0aCB6ZXJvLWxlbmd0aCBhcmdzLiAgVGhpcyBjYXVzZWQKICBBcGFjaGUyOjpDb29raWU6Om5ldygpIHRvIHNlZ2ZhdWx0IG9uIGNvb2tpZSB2YWx1ZSBvZiAiIi4KCi0gQyBBUEkgW2pvZXNdCiAgQWRkIGFwcmVxX2NoYXJzZXRfZGl2aW5lKCkgYW5kIGVsaW1pbmF0ZSBjaGFyc2V0IG9mZnNldCBmcm9tIHJldHVybgogIHZhbHVlIG9mIGFwcmVxX2RlY29kZSh2KS4KCi0gQyBBUEkgW2pvZXNdCiAgSW1wcm92ZSB0aGUgY3AxMjUyLWNoYXJzZXQgaGV1cmlzdGljcyBmb3IgYXByZXFfZGVjb2RlKHYpLgoKLSBDIEFQSSBbUmFscGggTWF0dGVzXQogIEFkZCBleHBsaWNpdCBjYXN0cyBmb3IgYXByZXFfcGFyYW1fY2hhcnNldF8qIHRvIGtlZXAgYysrIGNvbXBpbGVycyBoYXBweS4KCgpAc3Vic3Vic2VjdGlvbiB2Ml8wNl9kZXYgQ2hhbmdlcyB3aXRoIGxpYmFwcmVxMi0yLjA2LWRldiAocmVsZWFzZWQgSnVseSAyMCwgMjAwNSkKCgotIEMgQVBJIFtNYXJjIEdy4GNpYSwgam9lc10KICBGaXggYXByZXFfZGVjb2RlKHYpIHdoZW4gaXNvLWxhdGluLTEgY2hhcnMgYXBwZWFyCiAgYXQgdGhlIGVuZCBvZiBhbiBlbmNvZGVkIHN0cmluZy4KCi0gUGVybCBBUEkgW1BoaWxpcCBNLiBHb2xsdWNjaV0KICBGaXggIkF0dGVtcHQgdG8gZnJlZSB0ZW1wIHByZW1hdHVyZWx5IiBlcnJvciBpbiBhcHJlcV94c19jcm9haygpLgoKLSBDIEFQSSBbUGhpbGlwIE0uIEdvbGx1Y2NpXQogIEFkZCBtb2RfYXByZXEyIHRvIGh0dHBkJ3Mgc2VydmVyIHRva2Vucy4KCi0gUGVybCBBUEkgW2pvZXNdCiAgRHJvcCBzdXBwb3J0IGZvciAkcmVxLT5lbnYoKSwgd2hpY2ggYWxzbyBkaWVkIHdpdGggMi4wNS1kZXYuCgotIFBlcmwgQVBJIFtqb2VzXQogIFN1cHBvcnQgZm9yIHRhYmxlIHNldC9hZGQvZGVsZXRlIG1ldGhvZHMgaXMgZm9ybWFsbHkgd2l0aGRyYXduLgogIFRlY2huaWNhbGx5IHRoaXMgZmVhdHVyZSBkaWVkIHdpdGggdGhlIG1vZHVsZSBBUEkgcmVmYWN0b3JpbmcgaW4KICAyLjA1LWRldi4KCi0gQyBBUEkgW21heF0KICBSaWdodC1oYW5kIGxpbWl0IG9mIGFwcmVxX2JyaWdhZGVfbW92ZSgpIGlzIGRlY2xhcmVkIGFzICJleGNsdWRpbmciLAogIGJ1dCBBUFJfUklOR19VTlNQTElDRSgpIHdhbnRzIGFuICJpbmNsdWRpbmciIHJpZ2h0LWhhbmQgbGltaXQuIEZpeGVkCiAgdGhpcyBieSBwYXNzaW5nIHRoZSBwcmV2aW91cyBidWNrZXQuCgotIFBlcmwgQVBJIFtqb2VzXQogIERyb3Agc3VwcG9ydCBmb3IgQXBhY2hlMjo6UmVxdWVzdDo6bmV3J3MgSE9PS19EQVRBLgogIFVQTE9BRF9IT09LIG5vdyB0YWtlcyBvbmx5IHR3byBhcmd1bWVudHM6ICgkdXBsb2FkLCAkZGF0YSkuCgotIFBlcmwgQVBJIFtqb2VzXQogIERyb3Agc3VwcG9ydCBmb3IgQXBhY2hlMjo6Q29va2llOjpKYXI6Om5ldydzIFZBTFVFX0NMQVNTLgogIDIuMDUtZGV2IGJyb2tlIHRoYXQgQVBJLCBhbmQgaXQncyBub3Qgd29ydGggdHJ5aW5nIHRvIGZpeC4KICBQZW9wbGUgd2hvIG5lZWQgdGhhdCBzaG91bGQgdXNlIEFQUjo6UmVxdWVzdDo6Q29va2llOjpUYWJsZSdzCiAgY29va2llX2NsYXNzKCkgQVBJIGluc3RlYWQuCgotIFBlcmwgQVBJIFtqb2VzXQogIEZpeCBjb29raWUgZG9tYWluL3BhdGggbXVuZ2luZyBpbiBBcGFjaGUyOjpDb29raWU6Om5ldygpLgoKCkBzdWJzdWJzZWN0aW9uIHYyXzA1X2RldiBDaGFuZ2VzIHdpdGggbGliYXByZXEyLTIuMDUtZGV2IChyZWxlYXNlZCBNYXkgNSwgMjAwNSkKCgotIFdpbjMyIGJ1aWxkIFtSYW5keSBLb2Jlc10KICBIYXZlIHRvcC1sZXZlbCAnbm1ha2UnLCAnbm1ha2UgdGVzdCcsIGFuZCAnbm1ha2UgaW5zdGFsbCcKICB0YXJnZXRzLCByZXNwZWN0aXZlbHksIGFsc28gaW5jbHVkZSBidWlsZGluZywgdGVzdGluZywgYW5kCiAgaW5zdGFsbGluZyB0aGUgY29ycmVzcG9uZGluZyBwZXJsIGdsdWUgdGFyZ2V0cy4KCi0gQyBBUEkgW2dlb2ZmXQogIE1pbmltdW0gaHR0cGQgdmVyc2lvbiBpcyBub3cgMi4wLjQ4LCB3aGljaCBpbmNsdWRlcyB0aGUgb2ZmaWNpYWwKICBhcHIgMC45LjQgcmVsZWFzZS4KCi0gQyBBUEkgW01heCBLZWxsZXJtYW5uXQogIEZpeCBhcHJlcV9xdW90ZS4KCi0gUGVybCBBUEkgW2pvZXNdCiAgUmVtb3ZlIEFwYWNoZTI6OlJlcXVlc3Q6OmFyZ3MuICBXQVJOSU5HOiB0aHJvdWdoIGluaGVyaXRhbmNlLAogIGFyZ3MoKSBub3cgbWFwcyB0byBBcGFjaGUyOjpSZXF1ZXN0UmVjOjphcmdzLiAgRm9sa3MgdGhhdCB3YW50CiAgdGhlIHByZS0yLjA1LWRldiBiZWhhdmlvciBuZWVkIHRvIGludm9rZSBBUFI6OlJlcXVlc3Q6OmFyZ3MgYnkgbmFtZS4KCi0gQyBBUEkgW2pvZXMsIE1heCBLZWxsZXJtYW5uXQogIEFkZCBhcHJlcV9pbml0aWFsaXplLCBhcHJlcV9wcmVfaW5pdGlhbGl6ZSBhbmQgYXByZXFfcG9zdF9pbml0aWFsaXplLgogIFRoZXNlIGFyZSBub3QgdGhyZWFkLXNhZmUgb3BlcmF0aW9ucywgc28gYXBwbGljYXRpb25zIG5lZWQgdG8gZW5zdXJlCiAgdGhleSBhcmUgaW52b2tlZCAoaW4gdGhlIGNvcnJlY3Qgc2VxdWVuY2UpIHByaW9yIHRvIHVzaW5nIGFueSBhcHJlcTIKICBtb2R1bGVzLgoKLSBDLCBQZXJsIEFQSSBbam9lc10KICBBZGQgcG9vbCwgYnVja2V0X2FsbG9jIHRvIGFwcmVxX2hhbmRsZV90LgoKLSBQZXJsIEFQSSBbam9lc10KICBEcm9wICRkYXRhIGFyZ3VtZW50IGZyb20gVVBMT0FEX0hPT0ssIGFuZCBhbHNvIGRyb3AgSE9PS19EQVRBIG9wdGlvbi4KICBQZXJsIGZvbGtzIHNob3VsZCB1c2UgYSBjbG9zdXJlIGluc3RlYWQgb2YgcGFzc2luZyBpbiBjb250ZXh0IGRhdGEuCgotIFBlcmwgQVBJIFtqb2VzXQogIE1vdmUgYmFrZSwgYmFrZTIgdG8gQXBhY2hlMjo6Q29va2llLCBub3cgcmVxdWlyaW5nCiAgYW4gZXh0cmEgJHIgYXJndW1lbnQuICBBbHNvICIiLW9wZXJhdG9yIGlzIG1hcHBlZAogIHRvIGFzX3N0cmluZygpIGZvciBBcGFjaGUyOjpDb29raWU7ICBidXQgQVBSOjpSZXF1ZXN0OjpDb29raWUKICBtYXBzIGl0IHRvIHZhbHVlKCkuCgotIEMgQVBJIFtqb2VzXQogIFJlbW92ZSBoZWFkZXJfaW4gJiBoZWFkZXJfb3V0IGZyb20gYXByZXFfbW9kdWxlX3QuCiAgUmVtb3ZlIGFwcmVxX3VhX2Nvb2tpZV92ZXJzaW9uKCkgYW5kIGFwcmVxX2Nvb2tpZV9iYWtlKigpLgogIFJlbW92ZSBjb29raWUyIGFyZ3VtZW50IHRvIGFwcmVxX2hhbmRsZV9jdXN0b20oKS4KCi0gQyBBUEkgW2pvZXNdCiAgcy9BUFJFUS9BUFJFUTIvZyBpbiB3ZWJzZXJ2ZXIgY29uZmlndXJhdGlvbiBkaXJlY3RpdmVzLgoKLSBDIEFQSSBbSWdvciBTaGV2Y2hlbmtvLCBQaGlsaXAgR29sbHVjY2ldCiAgRml4IHNlZ2ZhdWx0IGluIG1mZCBwYXJzZXIgY2F1c2VkIGJ5IHBhcnRzIHcvIGVtcHR5IHBhcmFtIG5hbWVzLgoKLSBDIEFQSSBbam9lc10KICBBZGQgYXByZXFfY3AxMjUyX3RvX3V0ZjgoKS4KCi0gQywgUGVybCBBUEkgW2pvZXNdCiAgQWRkIGNoYXJzZXQgc3VwcG9ydCBmb3IgcGFyYW1zIGFuZCBjb3VwbGUgdGhlIFN2VVRGOCBmbGFnCiAgdG8gdGhlIHBhcmFtJ3MgdGFpbnQgZmxhZy4KCi0gQyBBUEkgW2pvZXNdCiAgUmVwbGFjZSB2LT5zaXplIHdpdGggdi0+bmxlbiArIHYtPmRsZW4uCiAgQWRkZWQgc3VwcG9ydGluZyBhcHJlcV92YWx1ZV90YWJsZV9hZGQoKS4KCi0gQyBBUEkgW2pvZXNdCiAgUmVtb3ZlIGFwcmVxX2Nvb2tpZV9hdHRyKCkuCgotIEMgQVBJIFtqb2VzXQogIC0gQWRkIGFwcmVxX2Vycm9yLmgsIGFwcmVxX21vZHVsZS5oLgogIC0gUmVuYW1lIGFwcmVxX3J1biogYW5kIGFwcmVxX21ha2UqIGZ1bmNzIHRvIGNvbmZvcm0gd2l0aCAKICAgIGFwcmVxXyRvYmpfJG1ldGggc2NoZW1lLgogIC0gUmVwbGFjZSBjLT52ZXJzaW9uICYgYy0+c2VjdXJlIHdpdGggZmxhZ3MuCiAgLSBQYXJzZXJzIGFyZSBhc3N1bWVkIHRvIGJlIHdvcmtpbmcgd2l0aCBleHRlcm5hbCBkYXRhLCBzbyB0aGUKICAgIGNvb2tpZXMgJiBwYXJhbXMgdGhleSBwcm9kdWNlIGFyZSBtYXJrZWQgdGFpbnRlZC4KCi0gQyBBUEkgW2pvZXNdCiAgYXByZXFfcGFyc2VfY29va2llX2hlYWRlcigpIGZhaWxlZCB0byBwYXJzZSBSRkMgQ29va2llIGhlYWRlcnMgd2hpY2gKICBjb250YWluZWQgbm8gc3BhY2UgY2hhcnMgYWZ0ZXIgdGhlICckVmVyc2lvbj0xJyBwcmVhbWJsZS4KCi0gQyBBUEkgW2pvZXNdCiAgUmVvcmdhbml6ZSBhcm91bmQgaW5jbHVkZS8sIGxpYnJhcnkvLCBhbmQgbW9kdWxlLyBkaXJzLgoKLSBDIFRlc3RzIFtqb2VzXQogIFJlcGxhY2UgQ3VUZXN0LWJhc2VkIHRlc3RzIHdpdGggY3VzdG9tIFRBUC1jb21wbGlhbnQgZnJhbWV3b3JrLgoKLSBDIEFQSSBbTWF4IEtlbGxlcm1hbm5dCiAgQ29udGludWUgdGhlIEFQSSBpbXByb3ZlbWVudHM6CgogIC0gQ29udmVydCBBUFJFUV9SVU5fUEFSU0VSIGFuZCBBUFJFUV9SVU5fSE9PSyB0byBpbmxpbmUsIGFuZCBkb3duY2FzZSB0aGVtLgogIC0gUmVtb3ZlIGFwcmVxX21lbW1lbS4KICAtIENvbnZlcnQgYXByZXFfKHVuKWVzY2FwZSB0byBpbmxpbmUuCiAgLSBhcHJlcV9lc2NhcGUgZG9lcyBub3QgY3JlYXRlIGFuIGFwcmVxX3ZhbHVlX3QqLgogIC0gSW5pdGlhbGl6ZSBkZWZhdWx0X3BhcnNlcnMgZXhwbGljaXRseSB0byBOVUxMLgogIC0gQ29udmVydCBBUFJFUV9CUklHQURFX0NPUFkgdG8gaW5saW5lLCBhbmQgZG93bmNhc2UgaXQuCiAgLSBMb3dlcmNhc2UgQVBSRVFfQlJJR0FERV9TRVRBU0lERSwgQVBSRVFfQlJJR0FERV9DT1BZLgogIC0gQ29udmVydCBhcHJlcV9jb29raWVfbmFtZSBhbmQgYXByZXFfY29va2llX3ZhbHVlIG1hY3JvcyB0byBpbmxpbmUuCiAgLSBDb252ZXJ0IGFwcmVxX3BhcmFtX25hbWUsIGFwcmVxX3BhcmFtX3ZhbHVlLCBhcHJlcV9wYXJhbV9pbmZvLCBhbmQKICAgIGFwcmVxX3BhcmFtX2JyaWdhZGUgdG8gaW5saW5lLgoKLSBDIEFQSSBbam9lc10KICBXaWRlc3ByZWFkIEFQSSByZWZhY3Rvcml6YXRpb24gdG8gcmVtb3ZlIGFwcmVxX2phcl90IGFuZCBhcHJlcV9yZXF1ZXN0X3Q6CiAgCiAgLSBIZWFkZXIgaW5jbHVkZXMgcmVvcmdhbml6ZWQ7IGFwcmVxX3BhcnNlcnMuaCBhZGRlZCAoYmFjayBhZ2FpbikuCiAgLSBSZXBsYWNlZCBhcHJlcV9qYXJfdCBhbmQgYXByZXFfcmVxdWVzdF90IHdpdGggc2luZ2xlIGFwcmVxX2Vudl9oYW5kbGVfdC4KICAtIEFkZGVkIGNvbnN0IHF1YWxpZmllciB0byAidiIgYXR0cmlidXRlIG9mIGFwcmVxX2Nvb2tpZV90IGFuZCBhcHJlcV9wYXJhbV90LgogIC0gVXNlIHVuaW9uIHR5cGUtcHVucyB0byBkcm9wIGNvbnN0IHF1YWxpZmllcnMgaW5zaWRlIHRoZSBuZXcKICAgIGFwcmVxX3ZhbHVlX3RvX2Nvb2tpZSBhbmQgYXByZXFfdmFsdWVfdG9fcGFyYW0gaW1wbGVtZW50YXRpb25zCiAgICAoZ2NjIGdlbmVyYXRlcyBzYW1lIG9iamVjdCBjb2RlIGFzIHRoZSBtYWNybyB2ZXJzaW9ucyBkaWQpLgogIC0gTW92ZWQgImZsYWdzIiBhdHRyaWJ1dGUgZnJvbSBhcHJlcV92YWx1ZV90IHRvIGFwcmVxX2Nvb2tpZV90IGFuZCBhcHJlcV9wYXJhbV90LgogIC0gUmVtb3ZlIGVudiBhcmd1bWVudCBmcm9tIGhvb2tzIGFuZCBwYXJzZXJzLgogIC0gUmVkdWNlIGFwcmVxX2Vudl9tb2R1bGUgdG8gbWluaW1hbCBzZXQgb2Ygb3BlcmF0aW9ucy4KICAtIFJlcGxhY2UgYXByZXFfbG9nIGNhbGxzIHdpdGggYXByZXEtc3BlY2lmaWMgZXJyb3IgY29kZXMuCiAgLSBIb29rcyBhcmUgY2FsbGVkIG9uIGVhY2ggYm9keSBwYXJhbSBub3csIG5vdCBqdXN0IGR1cmluZyBmaWxlIHVwbG9hZHMuCiAgLSBUaWUgdGhlIGNnaSBoYW5kbGUgdG8gaXRzIGNyZWF0b3IgcG9vbC4KCiAgRGV0YWlsZWQgY2hhbmdlcyBieSBoZWFkZXIgZmlsZToKCiAgW2FwcmVxLmhdCiAgLSBSZW1vdmUgZmxhZ3MgZnJvbSBhcHJlcV92YWx1ZV90LgogIC0gUmVtb3ZlIGNvbnN0IHF1YWxpZmllciBmcm9tIGFwcmVxX3ZhbHVlX3QncyAibmFtZSIgYXR0cmlidXRlLgogIC0gUmVtb3ZlIGFwcmVxX3ZhbHVlX21lcmdlKiBhbmQgYXByZXFfdmFsdWVfY29weSouCiAgLSBSZW1vdmUgYXByZXFfY2hhcl90b192YWx1ZSwgYXByZXFfc3RydG92YWwsIGFuZCBhcHJlcV9zdHJsZW4uCiAgLSBNb3ZlIGFwcmVxX2VuY3R5cGUgdG8gYXByZXFfZW52LmguCiAgLSBNb3ZlIGFwcmVxX2Vudl9oYW5kbGVfdCBzdHJ1Y3QgZGVmaW5pdGlvbiB0byBhcHJlcV9lbnYuaAogIC0gQ2hhbmdlIHNpZ25hdHVyZSBvZiBhcHJlcV9kZWNvZGUuCiAgLSBNb3ZlIGFwcmVxX2JyaWdhZGVfY29uY2F0IGhlcmUsIGNoYW5nZWQgaXRzIHNpZ25hdHVyZSBhbmQgaW1wcm92ZWQgaXQgYWxvdC4KICAtIFJlbW92ZSBhcHJlcV9icmlnYWRlX3Nwb29sZmlsZS4KICAtIERyb3BwZWQgQVBSRVFfKl9FTkNUWVBFLCByZW5hbWVkIHNvbWUgQVBSRVFfJGZvbyBkZWZhdWx0cyBBUFJFUV9ERUZBVUxUXyRmb28uCiAgLSBBZGRlZCBBUFJFUV9FUlJPUl8qLgoKICBbYXByZXFfY29va2llLmhdCiAgLSBSZW1vdmUgYXByZXFfZW52LmggaW5jbHVkZS4KICAtIFJlbW92ZSBhcHJlcV9qYXJfdC4KICAtIEFkZCAiZmxhZ3MiIHRvIGFwcmVxX2Nvb2tpZV90LCBhZGQgY29uc3QgcXVhbGlmaWVyIHRvIGl0cyAidiIgYXR0ci4KICAtIFJlbW92ZSBhcHJlcV9qYXIqIGZ1bmN0aW9ucy4KICAtIEFkZCBhcHJlcV9wYXJzZV9jb29raWVfaGVhZGVyLgogIC0gTW92ZSBhcHJlcV9jb29raWUsIGFwcmVxX2Nvb2tpZV9iYWtlKDIpLCBhbmQgCiAgICBhcHJlcV91YV9jb29raWVfdmVyc2lvbiB0byBhcHJlcV9lbnYuaC4KCiAgW2FwcmVxX3BhcmFtcy5oXQogIC0gUmVtb3ZlIGFwcmVxX2Vudi5oIGluY2x1ZGUuCiAgLSBSZW1vdmUgYXByZXFfcmVxdWVzdF90LgogIC0gQWRkICJmbGFncyIgdG8gYXByZXFfcGFyYW1fdCwgYW5kIGNvbnN0IHF1YWxpZmllciB0byBpdHMgInYiIGF0dHIuCiAgLSBSZW5hbWUgImJiIiBhdHRyaWJ1dGUgInVwbG9hZCIgaW4gYXByZXFfcGFyYW1fdC4KICAtIFJlbW92ZSBhcHJlcV9yZXF1ZXN0KiBmdW5jdGlvbnMuCiAgLSBSZW1vdmUgYXByZXFfcGFyc2VfcmVxdWVzdC4KICAtIENoYW5nZWQgYXByZXFfZGVjb2RlX3BhcmFtIHNpZ25hdHVyZS4KICAtIFJlcGxhY2UgZW52IGFyZ3VtZW50IHdpdGggYXByX3RhYmxlX3QgaW4gYXByZXFfcGFyYW1zX2FzX2FycmF5LAogICAgYXByZXFfcGFyYW1zX2FzX3N0cmluZywKICAtIE1vdmUgcmVtYWluaW5nIGFwcmVxX3BhcmFtKiB0byBhcHJlcV9lbnYuaC4KICAtIE1vdmUgcGFyc2VyIGFuZCBob29rIHN1YnN1YnNlY3Rpb25zIHRvIGFwcmVxX3BhcnNlcnMuaC4KICAtIENoYW5nZSBhcHJlcV91cGxvYWQocykgb2xkIGFwcmVxX3JlcXVlc3RfdCBhcmcgdG8gYXByX3RhYmxlX3QuCgogIFthcHJlcV9wYXJzZXJzLmhdCiAgLSBBY3F1aXJlIHRoZSBob29rIGFuZCBwYXJzZXIgc3Vic3Vic2VjdGlvbnMgb2Ygb3JpZ2luYWwgYXByZXFfcGFyYW1zLmguCiAgLSBSZW1vdmUgZW52IGFyZ3VtZW50IGZyb20gQVBSRVFfUEFSU0VSX0FSR1MgYW5kIEFQUkVRX0hPT0tfQVJHUwogIC0gQXVnbWVudCBhcHJlcV9ob29rX3QgYW5kIGFwcmVxX3BhcnNlcl90IHRvIHJlcGxhY2UgbWlzc2luZyBlbnYgZmVhdHVyZXMuCiAgLSBDaGFuZ2UgYXByZXFfbWFrZV9wYXJzZXIgYW5kIGFwcmVxX21ha2VfaG9vayBzaWduYXR1cmVzLgogIC0gUmVuYW1lIGFwcmVxX2FkZF9ob29rIHRvIGFwcmVxX3BhcnNlcl9hZGRfaG9vaywgcmV0dXJuaW5nIGFwcl9zdGF0dXNfdC4KICAtIENoYW5nZSBhcHJlcV9wYXJzZXIgc2lnbmF0dXJlLgoKICBbYXByZXFfZW52LmhdCiAgLSBSZW1vdmUgcmVhZCwgbG9nLCBwb29sLCBidWNrZXRfYWxsb2MsIHJlcXVlc3QsIGphciwgYW5kIHF1ZXJ5X3N0cmluZyBtZXRob2RzLgogIC0gSW5jbHVkZSBhcHJlcV9wYXJzZXJzLmguCiAgLSBSZW9yZ2FuaXplIGFwcmVxX2Vudl9tb2R1bGVfdCB0byBwcm92aWRlIGhvb2ssIHBhcnNlciwgamFyLCBhcmdzLAogICAgJiBib2R5IHRhYmxlIG9wcy4KICAtIFJlbmFtZSBtYXhfYnJpZ2FkZSB0byAiYnJpZ2FkZV9saW1pdCIsIG1heF9ib2R5IHRvICJyZWFkX2xpbWl0Ii4KICAtIENoYW5nZSByZWxhdGVkIG1vZHVsZSBzaWdzLCBpbmNsdWRpbmcgdGVtcF9kaXIsIHRvIGdldC9zZXQgbWV0aG9kcy4KICAtIEFkZCBwYXJzZXIgYW5kIHJlYWRfbGltaXQgYXJncyB0byBhcHJlcV9lbnZfbWFrZV9jdXN0b21faGFuZGxlLgogIC0gRHJvcCAibmFtZSIgYXJnIGFuZCBBUFJFUV9FTlZfTU9EVUxFID1+IHMvX0VOVi8vLgogIC0gcy9hcHJlcV9lbnZfbWFrZS9hcHJlcV9oYW5kbGUvIGluIHRoZSBoYW5kbGUgY29uc3RydWN0b3IgbmFtZXMuCgogIFttb2RfYXByZXEuYywgYXByZXFfZW52X2FwYWNoZTIuaF0KICAtIENoYW5nZWQgQVBSRVFfTWF4KiBjb25maWdzIHRvIEFQUkVRX0JyaWdhZGVMaW1pdCBhbmQgQVBSRVFfUmVhZExpbWl0LgogIC0gSGFuZGxlIGNvbnN0cnVjdG9yIHJlbmFtZWQgYXByZXFfaGFuZGxlX2FwYWNoZTIuCgotIEMgQVBJIFtqb2VzXQogIE1ha2Ugb3VyICJsaWJ0b29sIGN1cnJlbnQgaW50ZXJmYWNlIiBudW1iZXIgZGVwZW5kIG9uIGFwcidzIAogIG1ham9yIG51bWJlci4gIFRoaXMgYWxsb3dzIGxpYmFwcmVxMiB0byBiZSBpbnN0YWxsZWQgaW50byBhIAogIHN5c3RlbS13aWRlIGxvY2F0aW9uIHdoaWxlIGF2b2lkaW5nIEFCSSBjb25mbGljdHMgYXJpc2luZyBmcm9tCiAgb3VyIGFwci1iYXNlZCBpbnRlcmZhY2VzLgoKLSBDIEFQSSBbTWF4IEtlbGxlcm1hbm5dCiAgSW50cm9kdWNlIGFwcmVxX2Vudl9oYW5kbGVfdCB0byByZXBsYWNlIHRoZSB2b2lkICplbnYgdXNhZ2UuCiAgQWxzbyBhZGRlZCBhcHJlcV9lbnZfY3VzdG9tIGZvciBtYWtpbmcgcHJpdmF0ZSBoYW5kbGVzLCBhbmQgbmV3IAogIGFwcmVxX2Vudl9hcGFjaGUyLmggdG8gbGV0IG1vZF9hcHJlcSBleHBvcnQgYXByZXFfZW52X21ha2VfYXBhY2hlMi4KCi0gQyBBUEkgW01heCBLZWxsZXJtYW5uXQogIFJlbmFtZSBhcHJlcV9lbnZfdCB0byBhcHJlcV9lbnZfbW9kdWxlX3QsIHRvIHByZXBhcmUgZm9yCiAgYSBuZXcgdGhyZWFkLXNhZmUgYXByZXFfZW52IEFQSS4KCi0gQyBBUEkgW01heCBLZWxsZXJtYW5uXQogIG1vZF9hcHJlcSBtdXN0IGNoZWNrIHRoZSByZXR1cm4gdmFsdWUgb2YgYXByZXFfYnJpZ2FkZV9jb25jYXQKICB0byBhdm9pZCBhIFJBTS1jb25zdW1pbmcgaW5maW5pdGUgbG9vcC4gIEEgYmFkIEFQUkVRX1RlbXBEaXIgCiAgc2V0dGluZyBjYW4gY2F1c2UgdGhpcyBzaXR1YXRpb24uCgotIEMgQVBJIFtqb2VzXQogIFByb3ZpZGUgd29ya2Fyb3VuZCBmb3IgY2h1bmtlZCB0cmFpbGVycyBidWcgaW4gYXBfaHR0cF9maWx0ZXIuCgotIEMsIFBlcmwgQVBJIFtqb2VzXQogIFNldmVyYWwgdXBsb2FkLXJlbGF0ZWQgYnVnZml4ZXM6CiAgIDEpIGFwcmVxX3VwbG9hZCBhbmQgYXByZXFfdXBsb2FkcyBkaWQgbm90IHNlYXJjaCB0aGUgZnVsbCBib2R5IHRhYmxlLAogICAyKSAkdXBsb2FkLT5zbHVycCBhbmQgJGlvLT5yZWFkIGRpZCBub3QgYXV0b3ZpdmlmeSB0aGUgcmVzdWx0YW50IHN0cmluZy4KCi0gQyBBUEkgW2pvZXNdCiAgQWRkICJmbGFncyIgYXR0cmlidXRlIHRvIGFwcmVxX3ZhbHVlX3QsIHBsYW5uaW5nIGZvciBjaGFyc2V0IHN1cHBvcnQuCiAgVGhpcyBpcyBhbiBBQkkgY2hhbmdlLCBzdGFydGluZyB3aXRoIGxpYmFwcmVxMi5zby4yLjAuMjQuCgotIEMgQVBJIFtqb2VzXQogIEFkZCBhcHJlcV9lbnZfYnVja2V0X2FsbG9jKCkgdG8gZ2V0IGFuIGFsbG9jYXRvciBkaXJlY3RseSBmcm9tIHRoZQogIGVudmlyb25tZW50IGluc3RlYWQgb2YgY3JlYXRpbmcgdGhlbSBmcm9tIGEgcG9vbC4gIFRoaXMgaXMgYW4KICBBQkkgY2hhbmdlLCBzdGFydGluZyB3aXRoIGxpYmFwcmVxMi5zby4yLjAuMjMuCgotIEJ1aWxkIHN5c3RlbSBbam9lc10KICBBZGQgLS13aXRoLWFwYWNoZTItaHR0cGQgb3B0aW9uIHNvIHVzZXJzIGNhbiBvdmVycmlkZSBhcHhzJ3MKICBub3Rpb24gb2Ygd2hlcmUgdGhlIGh0dHBkIGV4ZWN1dGFibGUgaXMuICBYU0J1aWxkZXIncyBoZWFkZXIKICBwYXJzZXIgcnVucyBmcm9tIGJ1aWxkY29uZiBub3cgaW5zdGVhZCBvZiBjb25maWd1cmUsIHNvIHdlCiAgd2lsbCBpbmNsdWRlIHRob3NlIHRhYmxlcyBpbiB0aGUgcmVsZWFzZSB0YXJiYWxsLiAgYnVpbGRjb25mCiAgZ2V0cyBhbiBhZGRpdGlvbmFsIC0td2l0aC1wZXJsIG9wdGlvbiBmb3IgcnVubmluZyB0aGUgeHNidWlsZGVyLnBsCiAgcGFyc2luZyBzY3JpcHQuICBUaGUgWFMgZ2VuZXJhdGlvbiBjb2RlIGluIHhzYnVpbGRlci5wbCBoYXMgbW92ZWQgCiAgdG8gZ2x1ZS9wZXJsL01ha2VmaWxlLlBMLgoKLSBQZXJsIEFQSSBbam9lc10KICBBbGxvdyBjdG9ycyBmb3IgQXBhY2hlOjpDb29raWUsIEFwYWNoZTo6Q29va2llOjpKYXIKICBhbmQgQXBhY2hlOjo6UmVxdWVzdCB0byBhY2NlcHQgQXBhY2hlOjpSZXF1ZXN0IG9iamVjdHMKICAoaW5zdGVhZCBvZiByZXF1aXJpbmcgYW4gQXBhY2hlOjpSZXF1ZXN0UmVjIG9iamVjdCkuCiAgVGhpcyB0aHJlYWQgZGV0YWlscyB0aGUgYnVnCiAgICAgICAgaHR0cDovL3RocmVhZC5nbWFuZS5vcmcvZ21hbmUuY29tcC5hcGFjaGUubW9kLXBlcmwvMTU3MjcKCi0gQyBBUEkgW0JvamFuIFNtb2p2ZXJdCiAgQmFrZSBjb29raWVzIHdpdGggZXJyX2hlYWRlcnNfb3V0IHNvIHRoZXkgYXJlCiAgc2VudCBvbiBub24tMnh4IHNlcnZlciByZXNwb25zZXMgKGllLiBhIDMwNCByZWRpcmVjdCkuCiAgQWxzbyBlbnN1cmUgdGhhdCBoZWFkZXJzIGFyZSBjb3BpZWQgd2l0aCBhcHJfdGFibGVfYWRkCiAgaW5zdGVhZCBvZiBhcHJfdGFibGVfYWRkbi4gIFNpbmNlIGFwcmVxX2Nvb2tpZV9iYWtlKCkKICBhbGxvY2F0ZXMgZnJvbSB0aGUgc3RhY2ssIHRoZSBTZXQtQ29va2llIGhlYWRlcnMgd291bGQgCiAgb2NjYXNpb25hbGx5IGdldCBtYW5nbGVkIHdpdGhvdXQgdGhpcyBwYXRjaC4KCi0gQyBBUEkgW2pvZXNdCiAgQWRkIGFwcmVxX3JlZ2lzdGVyX3BhcnNlcigpLCB3aGljaCBhbGxvd3MgdXNlcnMgdG8gYWRkCiAgdGhlaXIgb3duIHBhcnNlcnMgdG8gYXByZXFfcGFyc2VyKCkncyByZWNvZ25pemVkIE1JTUUgdHlwZXMuCgotIEMgQVBJIFtqb2VzXQogIFN1cHBvcnQgIm11bHRpcGFydC9taXhlZCIgZmlsZSB1cGxvYWRzLgogIFN1cHBvcnQgWEZvcm1zJyAibXVsdGlwYXJ0L3JlbGF0ZWQiIGVuY3R5cGUuCgotIEMgQVBJIFtqb2VzXQogIEFkZCBhcHJlcV9ob29rX2Fwcl94bWxfcGFyc2VyKCksIHdoaWNoIGlzIGEgc2ltcGxlIHdyYXBwZXIKICBob29rIGFyb3VuZCBBUFIncyBleHBhdC1iYXNlZCBhcHJfeG1sX3BhcnNlci4gIEFkZCBhIGdlbmVyaWMKICBwYXJzZXIgYXByZXFfcGFyc2VfZ2VuZXJpYygpIHRvIHBhcnNlIGFyYml0cmFyeSBlbmN0eXBlcyB1c2luZwogIHRoZSBob29rIEFQSS4KCgpAc3Vic3Vic2VjdGlvbiB2Ml8wNF9kZXYgQ2hhbmdlcyB3aXRoIGxpYmFwcmVxMi0yLjA0LWRldiAocmVsZWFzZWQgQXVndXN0IDMwLCAyMDA0KQoKCi0gUGVybCBBUEkgW2pvZXNdCiAgQWRkIFRBSU5UIGNoZWNrcywgbWFya2luZyBhbGwgcGFyc2VkIGRhdGEgYXMgdGFpbnRlZC4KCi0gQyBBUEkgW2pvZXNdCiAgQWRkIGJvZHlfc3RhdHVzIGF0dHJpYnV0ZSB0byBhcHJlcV9yZXF1ZXN0X3QsIHRvIGFsbG93IHRoZSBib3RoCiAgZW52aXJvbm1lbnQgYW5kIHRoZSBwYXJzZXIgdG8gcmVwb3J0IGFueSBlcnJvcnMgZW5jb3VudGVyZWQuCgotIEMgQVBJIFtyYW5keWssIGpvZXNdCiAgQ29va2llIHBhcnNlciB3YXMgbG9ja2luZyB1cCBvbiBub24tYWxwaGFudW1lcmljIGNoYXJzIGluIGNvb2tpZSBuYW1lcy4KICBBbHNvIFJGQyBDb29raWUgYXR0cmlidXRlcyBhcmUgYWx3YXlzIGNoZWNrZWQgZm9yIHF1b3RlcyBkdXJpbmcgYmFrZSgyKSwKICBhbmQgdGhlIHF1b3RlcyBhcmUgbm93IHN0cmlwcGVkIGZyb20gaW5jb21pbmcgUkZDIGNvb2tpZXMgZHVyaW5nIHBhcnNpbmcgCiAgKGJ1dCB0aGV5IGFyZSBuZXZlciBzdHJpcHBlZCBmcm9tIHRoZSBhY3R1YWwgY29va2llIHZhbHVlKS4KCi0gUGVybCBBUEkgW2pvZXNdCiAgQXBhY2hlOjpDb29raWU6Okphci0+bmV3IGFjY2VwdHMgYSBWQUxVRV9DTEFTUyBhcmd1bWVudCwgd2hpY2ggZWZmZWN0aXZlbHkKICBibGVzc2VzIGFsbCB0aGUgamFyJ3MgY29va2llcyBpbnRvIHRoYXQgY2xhc3MsIHdoaWNoIHNpbXBsaWZpZXMgc3ViY2xhc3NpbmcKICBBcGFjaGU6OkNvb2tpZS4gICBBY2NvcmRpbmdseSBBcGFjaGU6OkNvb2tpZS0+ZnJlZXplKCR2YWx1ZSkgbm8gbG9uZ2VyIGFjY2VwdHMgCiAgYSBmcmVlemUoKS1hYmxlIG9iamVjdCBpbiAkdmFsdWUuCgotIEMgQVBJIFtNYXJrdXMgV2ljaGl0aWxsLCByYW5keWssIGpvZXNdCiAgRHJvcCBBUFJfREVMT05DTE9TRSBmcm9tIGFwcmVxX2ZpbGVfbWt0ZW1wIGltcGxlbWVudGF0aW9uIGFuZCBpbnN0YWxsCiAgYXByZXFfZmlsZV9jbGVhbnVwLiBXaGVuIHBhc3NlZCB0byBhcHJfZmlsZV9vcGVuIG9uIFdpbjMyLCBBUFJfREVMT05DTE9TRSAKICBzZXRzIHRoZSBGSUxFX1NIQVJFRF9ERUxFVEUgZmxhZywgd2hpY2ggaXMsIHVuZm9ydHVuYXRlbHksIGEgcHJvcGVydHkgdGhhdAogIGlzIHByZXNlcnZlZCBhY3Jvc3MgTlRGUyAiaGFyZCIgbGlua3MuICBUaGlzIGJyZWFrcyBhcHBzIHRoYXQgbGluaygpIAogIHRoZSB0ZW1wIGZpbGUgdG8gYSBwZXJtYW5lbnQgbG9jYXRpb24sIGFuZCBzdWJzZXF1ZW50bHkgZXhwZWN0IHRvIG9wZW4gaXQgCiAgd2l0aG91dCBGSUxFX1NIQVJFRF9ERUxFVEUgYmVmb3JlIHRoZSBvcmlnaW5hbCB0ZW1wZmlsZSBpcyBjbG9zZWQrZGVsZXRlZC4gCiAgSW4gZmFjdCwgZXZlbiBBcGFjaGU6OlVwbG9hZCBkb2VzIHRoaXMsIHNvIGl0IGlzIGEgY29tbW9uIGVub3VnaCBldmVudCB0aGF0CiAgdGhlIGFwcmVxX2ZpbGVfY2xlYW51cCB3b3JrYXJvdW5kIGlzIG5lY2Vzc2FyeS4KCi0gQyBBUEkgW0tlbiBCdXJjaGFtLCBqb2VzXQogIEZpeCBidWcgaW4gdXJsIHBhcnNlciB0aGF0IG9jY3VycyB3aGVuIGEgJVhYLWVuY29kZWQgc2VxdWVuY2UKICBpcyBzcGxpdCBhY3Jvc3MgbXVsdGlwbGUgYnVja2V0cy4gIEFkZGVkIGFwcmVxX2RlY29kZV9kZWNvZGV2CiAgdG8gbWFrZSB0aGlzIHByb2JsZW0gbGVzcyBpbmNvbnZlbmllbnQuCgotIFBlcmwgQVBJIFtqb2VzXQogIEV4Y2VwdGlvbiBvYmplY3RzIGluaGVyaXQgZnJvbSB0aGUgb2JqZWN0IHdoaWNoIHJhaXNlZCBpdCwKICB3aGljaCBhbGxvd3MgJEAgdG8gaW52b2tlIGl0cyBtZXRob2RzIHdpdGggaW1wdW5pdHkgKGV4Y2VwdGlvbnMgCiAgYXJlIGRpc2FibGVkIGZvciBvYmplY3RzIHdoaWNoIGRlcml2ZSBmcm9tIGFuIGV4Y2VwdGlvbiBjbGFzcykuCgotIFBlcmwgQVBJIFtqb2VzXQogIEltcGxlbWVudCBIT09LX0RBVEEgYW5kIFVQTE9BRF9IT09LLgoKLSBQZXJsIEFQSSBbam9lc10KICBBZGQgc2FmZSBYUyB3cmFwcGVycyBmb3IgJHRhYmxlLT5hZGQsICR0YWJsZS0+c2V0LCAkdGFibGUtPlNUT1JFLAogIGFuZCAkdGFibGVfY2xhc3MtPm5ldy4KCi0gUGVybCBBUEkgW2pvZXNdCiAgQWRkIGV4Y2VwdGlvbnMgdG8gJHVwbG9hZC0+bGluaywgJHVwbG9hZC0+dGVtcG5hbWUsICR1cGxvYWQtPnNsdXJwLCAKICBhbmQgJGNvb2tpZS0+c2V0X2F0dHIuICBSZXR1cm4gdmFsdWUgb2YgJHVwbG9hZC0+c2x1cnAgaXMgbm93IHRoZSAKICB1cGxvYWQgbGVuZ3RoLiAgQWxzbyBkb2N1bWVudCBuZXcgJHVwbG9hZC0+aW8uCgotIEMgQVBJIFtqb2VzXQogIFJlc3RyaWN0IGFsbCBhcHJfc3RhdHVzX3QgY29kZXMgdG8gQVBSX1NVQ0NFU1MsIEFQUl9JTkNPTVBMRVRFLAogIEFQUl9FR0VORVJBTCwgQVBSX0VJTklULCBBUFJfRU5PVElNUEwsIHNpbmNlIGFueSBvdGhlcnMgd2lsbAogIGdlbmVyYXRlIGNvbmZ1c2luZyBlcnJvciBtZXNzYWdlcyBmcm9tIGFwcl9zdHJlcnJvci4KCi0gUGVybCBBUEkgW2pvZXNdCiAgQWRkZWQgJHVwbG9hZC0+aW8gd2l0aCBhIFRJRUhBTkRMRSBBUEkgbGF5ZXJlZCBvdmVyIEFQUjo6QnJpZ2FkZS4gICAkdXBsb2FkLT5maAogIHJlbWFpbnMgaW1wbGVtZW50ZWQgYXMgYW4gQVBSOjpQZXJsSU8gb2JqZWN0LCB3aGljaCBpcyBzZWVrYWJsZSBidXQgbGVzcyBlZmZpY2llbnQgCiAgYW5kIGN1cnJlbnRseSBzdWZmZXJzIHNvbWUgcG9ydGFiaWxpdHkgaXNzdWVzIGFzc29jaWF0ZWQgd2l0aCBsYXJnZWZpbGUgc3VwcG9ydAogIGluIHBlcmwgYW5kIGFwci4KCi0gUGVybCBBUEkgW2pvZXNdCiAgQWRkZWQgYXByZXFfeHNfY3JvYWsgZm9yIHRocm93aW5nIEFQUjo6RXJyb3IgZXhjZXB0aW9ucyBhbmQgaW5jbHVkZWQKICBlcnJvci1jaGVja2luZyBvbiAkcmVxLT5wYXJhbSwgJHJlcS0+YXJncywgJHJlcS0+Ym9keSwgJHJlcS0+dXBsb2FkLCAKICBhbmQgJGphci0+Z2V0LgoKLSBQZXJsIEFQSSBbam9lc10KICBBZGRlZCAkamFyLT5zdGF0dXMsICRyZXEtPmFyZ3Nfc3RhdHVzIGFuZCAkcmVxLT5ib2R5X3N0YXR1cyB0byByZXBvcnQKICBwYXJzaW5nIGVycm9ycy4gQWxzbyBhZGQgJHVwbG9hZC0+dGVtcG5hbWUgcGVyIHVzZXIgcmVxdWVzdC4KCi0gQyBBUEkgW2pvZXNdCiAgRHJvcHBlZCBzdGF0dXMgYXR0cmlidXRlIG9mIGFwcmVxX3ZhbHVlX3QuICBBZGRlZCBzdGF0dXMgZmllbGQgdG8KICBhcHJlcV9qYXJfdCBhbmQgYWRkZWQgYXJnc19zdGF0dXMgZmllbGQgdG8gYXByZXFfcmVxdWVzdF90LiBQYXJzZXJzCiAgYWxzbyBtdXN0IHJldHVybiB0aGVpciBwdWJsaWMgc3RhdHVzIGNvZGUgd2hlbiBhIE5VTEwgYnJpZ2FkZSBpcyBwYXNzZWQuCiAgYXByZXFfaG9va19kaXNhYmxlX3VwbG9hZHMoKSBpcyBhbHNvIGFkZGVkLgoKICBUaGlzIGlzIGFuIEFCSSBjaGFuZ2UgYWZmZWN0aW5nIGFsbCB2ZXJzaW9ucyBvZiBsaWJhcHJlcTIgcHJpb3IgdG8gMi4wLjEyLgoKLSBQZXJsIEFQSSBbam9lc10KICAkdXBsb2FkLT5pbmZvIHJldHVybnMgYSBwcm9wZXIgQVBSOjpUYWJsZSBvYmplY3Qgbm93LiBBbHNvIGltcGxlbWVudGVkCiAgJHVwbG9hZC0+c2l6ZSwgJHVwbG9hZC0+ZmgsIGFuZCAkdXBsb2FkLT50eXBlLgoKLSBDIEFQSSBbSmVhbi1GcmFu529pcyBNZWVzc2VdCiAgbWZkIHBhcnNlciBmYWlscyB0byBwYXJzZSBDUkxGLXRlcm1pbmF0ZWQgZmlsZXMgd2hlbiB0aGUgdGVybWluYXRpbmcKICBib3VuZGFyeSBzdHJpbmcgaXMgYXQgdGhlIHN0YXJ0IG9mIGEgbmV3IGJ1Y2tldC4gIFRoaXMgaXMgcmVwb3J0ZWRseQogIGEgY29tbW9uIGV2ZW50IGZvciBQREYgZmlsZXMgdXBsb2FkZWQgd2l0aCBOZXRzY2FwZSA3LgoKLSBQZXJsIEFQSSBbam9lc10KICBBZGQgYmFjay1jb21wYXQgc3VwcG9ydCBmb3IgQXBhY2hlOjpDb29raWUtPmZldGNoKCkgdmlhCiAgQXBhY2hlLT5yZXF1ZXN0LgoKLSBDIEFQSSBbam9lc10KICBBZGQgTWF4Qm9keSwgTWF4QnJpZ2FkZSwgYW5kIFRlbXBEaXIgcGVyLWRpciBkaXJlY3RpdmVzIHRvIG1vZF9hcHJlcSAKICBmaWx0ZXIuCgotIEMgQVBJIFtqb2VzXQogIFJlcGxhY2UgZnJlZS90ZW1wbmFtIGRlcGVuZGVuY3kgaW4gYXByZXFfZmlsZV9ta3RlbXAoKSB3aXRoCiAgYXByX3RlbXBfZGlyX2dldCgpLiAgQWRkIGFkZGl0aW9uYWwgZ2NjIHdhcm5pbmcgZmxhZ3Mgd2hlbgogIC0tZW5hYmxlLW1haW50YWluZXItbW9kZSBpcyBzZXQuCgotIEMgQVBJIFtqb2VzLCBTY290dCBIdXR0b25dCiAgUmVwbGFjZSBhcHJlcV9icmlnYWRlX2NvcHkgd2l0aCBtb3JlIGVmZmVjdGl2ZSBBUFJFUV9CUklHQURFX0NPUFkKICBtYWNyby4gIEFsc28gaW50cm9kdWNlIEFQUkVRX0JSSUdBREVfU0VUQVNJREUgdG8gZGVhbCB3aXRoIGJ1Y2tldHMgCiAgdGhhdCBuZWVkIHRvIGJlIHNldCBhc2lkZSBmb3IgdXNlIGluIGZ1dHVyZSBmdW5jdGlvbiBjYWxscy4gbW9kX3NzbCAKICBnZW5lcmF0ZXMgdHJhbnNpZW50IGJ1Y2tldHMgd2hpY2ggdGlja2xlZCB0aGlzIGJ1Zy4KCi0gUGVybCBBUEkgW2pvZXNdCiAgU2VwYXJhdGUgQXBhY2hlOjpVcGxvYWQgbW9kdWxlIGZyb20gQXBhY2hlOjpSZXF1ZXN0IGZvciAKICBiZXR0ZXIgb3JnYW5pemF0aW9uLgoKCkBzdWJzdWJzZWN0aW9uIHYyXzAzX2RldiBDaGFuZ2VzIHdpdGggbGliYXByZXEyLTIuMDMtZGV2IChyZWxlYXNlZCBKdW5lIDEyLCAyMDA0KQoKCi0gQyBBUEkgW2pvZXNdCiAgIk9iamVjdGlmeSIgY29va2llL2phciBBUEk6IHMvYXByZXFfKG1ha2V8c2VyaWFsaXplKV9jb29raWUvYXByZXFfY29va2llXyQxLwogIGFuZCByZW9yZGVyaW5nIGFyZ3Mgc28gdGhlIGNvb2tpZS9qYXIgb2JqZWN0IGlzIGFsd2F5cyB0aGUgZmlyc3QgYXJndW1lbnQuCiAgTWFjcm9zIGFkZGVkIHRvIHByb3ZpZGUgc291cmNlLWNvbXBhdGliaWxpdHkgd2l0aCB0aGUgb2xkIG5hbWVzLgoKLSBQZXJsIEFQSSBbam9lc10KICBBZGRlZCAkdXBsb2FkLT5zbHVycCgkZGF0YSksIHdoaWNoIHJlYWRzIHRoZSBjb250ZW50cyBvZiB0aGUgZmlsZQogIHVwbG9hZCAiJHVwbG9hZCIgaW50byB0aGUgc2NhbGFyICIkZGF0YSIuCgotIEMgQVBJIFtqb2VzLCByYW5keWtdCiAgYXByZXFfcnVuXyhob29rfHBhcnNlcikgYXJlIG1hY3Jvcywgc28gdGhleSBhcmUgY2FwaXRhbGl6ZWQgbm93LgogIEZpeGVkIGFwcmVxX3BhcmFtc19hc19zdHJpbmcoKSBhbmQgYWRkZWQgYXByZXFfcGFyYW1zX2FzX2FycmF5KCkuCiAgUmV3b3JrZWQgZGVmaW5pdGlvbnMgb2YgQVBSRVFfREVDTEFSRV9IT09LLCBBUFJFUV9ERUNMQVJFX1BBUlNFUiAKICBhbmQgYXByZXFfKHBhcnNlcnxob29rKV90LCBob3BlZnVsbHkgdG8gYmUgbW9yZSBXaW4zMiBmcmllbmRseS4KICBBbHNvIHVwZGF0ZWQgdGhlIGRvY3VtZW50YXRpb24uCgotIEMgQVBJIFtqb2VzXQogIENvbXBlbnNhdGUgZm9yIGEgbWlzc2luZyBDUkxGIGluIGVtcHR5IGZpbGUgdXBsb2FkIGJsb2NrLCB3aGljaCAKICBhY3R1YWxseSBjb21wbGllcyB3aXRoIFJGQyAyMDQ2IHN1YnN1YnNlY3Rpb24gNS4xLjEuICBLb25xdWVyb3IgKHZlcnNpb24gdW5rbm93bikKICBhbmQgTW96aWxsYSAwLjkuNyBhcmUga25vd24gdG8gZW1pdCBzdWNoIGJsb2Nrcy4KCi0gUGVybCBBUEkgW2pvZXNdCiAgJHJlcS0+dXBsb2FkKCkgaW4gbGlzdCBjb250ZXh0IGZhaWxlZCB0byBmaWx0ZXIgb3V0IG5vbi11cGxvYWRzLgogIEFsc28gJHJlcS0+dXBsb2FkKCJub25leGlzdGVudC1rZXktbmFtZSIpIHNlZ2ZhdWx0cy4KCi0gUGVybCB0ZXN0IHN1aXRlCiAgdC9URVNULlBMIG11c3QgcnVuIHBhcmVudCBjbGFzcycgcHJlX2NvbmZpZ3VyZSB0byBnZXQgdGhlCiAgY29uZmlndXJhdGlvbiByaWdodAoKLSBDIEFQSSBbam9lc10KICBhcHJlcV9icmlnYWRlX2NvbmNhdCgpIHdhc24ndCBzdXBwbHlpbmcgdGhlIGZpbmFsIEVPUyBidWNrZXQKICB0byBsYXJnZSBicmlnYWRlcyAoPjI1NkspLCB3aGljaCBzb210aW1lcyBjYXVzZWQgdGhlIHByZWZldGNoIAogIGxvb3AgaW4gbW9kX2FwcmVxLmMncyBhcHJlcV9maWx0ZXIoKSB0byBoYW5nLgoKLSBEb2N1bWVudGF0aW9uIFtqb2VzXQogIENIQU5HRVMgZmlsZSByZWZvcm1hdHRlZCwgcmVtb3ZpbmcgZGF0ZXMgJiBvdGhlciBjbHV0dGVyIAogIGFzIFN0YXMgc3VnZ2VzdHMuCgotIEMgQVBJIFtqb2VzXQogIFJld3JvdGUgY2dpX3JlYWQoKSBpbiBhcHJlcV9lbnYuYyBhbmQgcmV3b3JrZWQgbW9kX2FwcmVxLmMgCiAgdG8gZW5mb3JjZSBhcHJlcV9lbnZfbWF4X2JvZHkoKSBzZXR0aW5ncy4KCi0gQyBBUEkgW2pvZXNdCiAgRml4ZWQgYnVnIGluIHVybF9wYXJzZXIgY29kZS0gbWlzc2luZyBjb250ZXh0IGJyaWdhZGUgd2FzCiAgbmVlZGVkIHRvIHRyYWNrIGtleS12YWx1ZSBwYWlycyB3aGljaCBzcGFuIG11bHRpcGxlIGJ1Y2tldHMuCgotIEMgQVBJIFtqb2VzXQogIEFQSSBtb2RpZmljYXRpb25zOiByZW1vdmVkIHN0cnVjdCBhcHJlcV9jZmdfdCwgYWRkaW5nCiAgbmV3IGFwcmVxX2VudiBob29rcyBtYXhfYm9keSwgbWF4X2JyaWdhZGVfbGVuLCBhbmQgdGVtcF9kaXIuCiAgRm9sZGVkIGFwcmVxX3BhcnNlcnMuaCBpbnRvIGFwcmVxX3BhcmFtcy5oIGFuZCBtb2RpZmllZCB0aGUgYXJndW1lbnRzIAogIHRvIGFwcmVxX3J1bl9wYXJzZXIoKSBhbmQgYXByZXFfcnVuX2hvb2soKS4gUmVuYW1lZCAKICBhcHJlcV9wYXJzZXJfdCdzIGNvbnRlbnRfdHlwZSBhcyBlbmN0eXBlIGFuZCBhcHJlcV9jb3B5X2JyaWdhZGUoKQogIGFzIGFwcmVxX2JyaWdhZGVfY29weSgpLgogIFRoZXNlIGNoYW5nZXMgbWFrZSBsaWJhcHJlcTIuc28uMi4wLjUgaW5jb21wYXRpYmxlIHdpdGggZWFybGllciAKICB2ZXJzaW9ucy4KCi0gUGVybCBBUEkgW3N0YXNdCiAgSW5jbHVkZSBwcHBvcnQuaCBmcm9tIGJsZWFkLXBlcmwgdG8gc3VwcG9ydCBvbGRlciBwZXJscy4KICBBZGQgYSBwcm9wZXIgc3VwcG9ydCBmb3IgaXRocmVhZHMuCgotIEMgQVBJIFtTd2VuIFNjaGlsbGlnLCBqb2VzXQogIEZpeGVkIGJ1ZyBpbiBjYWxjdWxhdGlvbiBvZiBOZXRzY2FwZSBjb29raWUgZXhwaXJhdGlvbiBkYXRlcy4KICBhcHJfdGltZV90IGlzIG1lYXN1cmVkIGluIG1pY3Jvc2Vjb25kcywgbm90IHNlY29uZHMsIHdoaWNoCiAgdGhyZXcgb2ZmIHRoZSBhcml0aG1ldGljOyBhcHJfdGltZV9mcm9tX3NlYyB3YXMgbmVlZGVkIGZvcgogIHRoZSBjb252ZXJzaW9uLgoKLSBDIEFQSSBbTWF4IEtlbGxlcm1hbm5dCiAgRml4IHNlZ2ZhdWx0IGNhdXNlZCBieSBpbnZhbGlkICUtZXNjYXBlIHNlcXVlbmNlIGluIHF1ZXJ5IHN0cmluZy4KCgpAc3Vic3Vic2VjdGlvbiB2Ml8wMl9kZXYgQ2hhbmdlcyB3aXRoIGxpYmFwcmVxMi0yLjAyLWRldiAocmVsZWFzZWQgTm92IDE1LCAyMDAzKQoKCi0gUGVybCBBUEkgW2pvZXNdCiAgRml4IGJvZ3VzIHBvb2wvY29va2llIGluaXRpYWxpemVycyBpbiBBcGFjaGU6OkNvb2tpZTo6c2V0X2F0dHIoKSwKICB3aGljaCBjYXVzZWQgQXBhY2hlOjpDb29raWU6Om5ldyB0byBzZWdmYXVsdC4gIEJ1ZwogIGZpcnN0IHJlcG9ydGVkIHRvIG1vZHBlcmwgbGlzdCBieSBXb2xmZ2FuZyBLdWJlbnMuCgoKQHN1YnN1YnNlY3Rpb24gdjJfMDFfZGV2IENoYW5nZXMgd2l0aCBsaWJhcHJlcTItMi4wMS1kZXYgKHJlbGVhc2VkIE5vdiAxMCwgMjAwMykKCgotIGJ1aWxkIHN5c3RlbSBbam9lc10KICBTa2lwIEFwYWNoZTo6VGVzdCB0ZXN0cyBpbiBlbnYvIHdoZW4gQXBhY2hlOjpUZXN0IGlzIHVuYXZhaWxhYmxlLgogIFRoaXMgYWxsb3dzIHRoZSBDIEFQSSB0byBiZSBidWlsZCBhbmQgaW5zdGFsbGVkIHdpdGhvdXQgcmVxdWlyaW5nCiAgQXBhY2hlOjpUZXN0IChpdCBpcyBzdGlsbCBhIHJlcXVpcmVtZW50IGZvciBjb21waWxpbmcgdGhlIHBlcmwgZ2x1ZSkuCgotIEMgQVBJIG1vZF9hcHJlcS5jIFtqb2VzXQogIFBhcnNlciBlcnJvcnMgd2VyZSBjcmVlcGluZyBpbnRvIHRoZSByZXR1cm4gdmFsdWUgb2YgYXByZXFfZmlsdGVyLAogIHdoaWNoIGJyZWFrcyB0aGUgInRyYW5zcGFyZW50IHRlZSIgcGFyYWRpZ20uICBUaGlzIGNhdXNlZCBib2d1cwogICI0MDAgQmFkIFJlcXVlc3QiIHJlc3BvbnNlcyAoZmlyc3QgcmVwb3J0ZWQgYnkgVmxhZGltaXIgRHVkbykgCiAgdG8gb2NjdXIgd2hlbiBsaWJhcHJlcTIgd2FzIHVzZWQgYnkgYW4gb3V0cHV0IGZpbHRlciBkdXJpbmcgYSBHRVQgCiAgcmVxdWVzdCAoaGFuZGxlZCBieSBhcGFjaGUyJ3MgZGVmYXVsdCBoYW5kbGVyKS4gIFRoZSB0ZXN0IHN1aXRlIAogIGhhcyBiZWVuIHVwZGF0ZWQgYWNjb3JkaW5nbHkuCgotIEMgQVBJIFtqb2VzXQogIEluY29ycG9yYXRlIGxpYmFwcmVxX2NnaSBpbnRvIGxpYmFwcmVxMiBhcyB0aGUgZGVmYXVsdCBlbnZpcm9ubWVudCwKICBhbmQgYWRkIGFwcmVxX2Vudl90IGFuZCBpbml0aWFsaXplciBhcHJlcV9lbnZfbW9kdWxlKCkgdG8gbWFuYWdlIHRoZQogIGVudmlyb25tZW50IGF0IHJ1bnRpbWUgKGRldGVybWluaW5nIHRoZSBlbnZpcm9ubWVudCBhdCBsb2FkLXRpbWUKICB3YXMgcHJvYmxlbWF0aWMgb24gbm9uLUVMRiBzeXN0ZW1zKS4KCgpAc3Vic3Vic2VjdGlvbiB2Ml8wXzAgQ2hhbmdlcyB3aXRoIGxpYmFwcmVxMi0yLjAwLWRldiAoT2N0IDI1LCAyMDAzKQoKCi0gQyBBUEk6IGxpYmFwcmVxX2NnaS5jIFtyYW5keWssIGpvZXNdCiAgQ0dJIGVudmlyb25tZW50IGRlZmluZWQgYnkgZW52L2xpYmFwcmVxX2NnaS5jIGlzIGZ1bmN0aW9uYWwKICAod2l0aCB0ZXN0cyBhZGRlZCB0byBlbnYvdCkuICBUaGlzIGxpYnJhcnkgbWF5IHNvb24gYmUgaW5jb3Jwb3JhdGVkCiAgZGlyZWN0bHkgaW50byBsaWJhcHJlcTIgYXMgYSBkZWZhdWx0IGVudmlyb21lbnQuCgotIEMgQVBJOiBtb2RfYXByZXEuYyBbam9lc10KICBBZGRlZCBjdHgtPnNhd19lb3MgdG8gZW5zdXJlIHdlIGRvbid0IHJlYWQgZnJvbSB1cHN0cmVhbSBmaWx0ZXJzCiAgYWZ0ZXIgcmVjZWl2aW5nIGFuIGVvcyBidWNrZXQuICBPdGhlcndpc2UgaXQgd2FzIHBvc3NpYmxlIGZvcgogIHR3byBlb3MgYnVja2V0cyB0byBhcHBlYXIgd2hlbiBhIHByZWZldGNoIHJlYWQgaXMgaW52b2x2ZWQsIHdoaWNoCiAgYnJlYWtzIG90aGVyIG1vZHVsZXMgbGlrZSBtb2RfcHJveHkuICBUaGlzIGJ1ZyB3YXMgdW5jb3ZlcmVkIGJ5CiAgUGhpbGlwcGUgQ2hpYXNzb24uICBtb2RfYXByZXEncyBhcHJlcV9lbnZfbWFqaWNfbnVtYmVyIGJ1bXBlZCB0bwogIHJlZmxlY3QgdGhlIGFkZGVkIGZpeGVzLgoKLSBjb25maWd1cmU6IC0tZW5hYmxlLXBlcmwtZ2x1ZSBbam9lc10KICBUaGUgLS1lbmFibGUtcGVybC1nbHVlIG9wdGlvbiBpbnRlZ3JhdGVzIHRoZSBwZXJsIGdsdWUgaW50byB0aGUgCiAgbm9ybWFsIFVuaXggYnVpbGQgY3ljbGUuICBJdCBpcyBkaXNhYmxlZCBieSBkZWZhdWx0LCBidXQgaXMgc2lsZW50bHkgCiAgcmVlbmFibGVkIGlmIHRoZSB1c2VyIGNvbmZpZ3VyZXMgdGhlIHNvdXJjZSB0cmVlIHZpYSBNYWtlZmlsZS5QTC4KCi0gQyBBUEkgW2pvZXNdCiAgQWRkZWQgYXByZXFfaGVhZGVyX2F0dHJpYnV0ZSgpIGFuZCBmaXhlZCBtZmQgcGFyc2VyIHRvIGFsbG93IAogICJjaGFyc2V0IiBhdHRyaWJ1dGUgdG8gYXBwZWFyIGluIHRoZSBDb250ZW50LVR5cGUgaGVhZGVyLiAgU3ZlbgogIEdlaXNsZXIgcG9pbnRzIG91dCB0aGF0IE9wZXJhIDcuMjAgZG9lcyBnZW5lcmF0ZSBzdWNoIGhlYWRlcnMuIAoKLSBDIEFQSSBbam9lc10KICBBZGRlZCB2ZXJzaW9uaW5nIEFQSSBmb2xsb3dpbmcgaHR0cDovL2Fwci5hcGFjaGUub3JnL3ZlcnNpb25pbmcuaHRtbAogIGFwcmVxX2VudiByZW5hbWVkIGFwcmVxX2Vudl9uYW1lLCBhbmQgYXByZXFfZW52X21hZ2ljX251bWJlciBhZGRlZAogIHRvIHByb3ZpZGUgdmVyc2lvbmluZyBmb3IgZW52aXJvbm1lbnRzIChtb2R1bGVzKS4gIFRoZSBoZWFkZXIgZmlsZXMgCiAgYXJlIG5vdyBpbnN0YWxsZWQgdG8gImluY2x1ZGUvYXByZXEyIiwgYW5kIHRoZSBsaWJyYXJ5IGlzIHJlbmFtZWQgCiAgImxpYmFwcmVxMiIuIEFsc28gYWRkZWQgYW4gYXByZXEyLWNvbmZpZyBzY3JpcHQgYmFzZWQgb24gYXB1LWNvbmZpZy4KCi0gY29uZmlndXJlOiBzdGF0aWMgbW9kX2FwcmVxLmMgW0JvamFuIFNtb2p2ZXIsIGpvZXNdCiAgQWRkIC0td2l0aC1hcGFjaGUyLXNyYyBjb25maWd1cmUgb3B0aW9uLCBhbG9uZyB3aXRoIC0td2l0aC1hcHItY29uZmlnCiAgYW5kIC0td2l0aC1hcHUtY29uZmlnLCBhbmQgcHJvdmlkZSBzdXBwb3J0IGZvciBjb21waWxpbmcgbW9kX2FwcmVxIAogIGludG8gaHR0cGQgYXMgYSBzdGF0aWMgYXBhY2hlIG1vZHVsZS4KCi0gQyBBUEk6IG1vZF9hcHJlcS5jIFtqb2VzXQogIFN1cHBvcnQgZm9yIGludGVybmFsIHJlZGlyZWN0cyBhZGRlZCB0byB0aGUgbW9kX2FwcmVxIGZpbHRlci4KICBUaGlzIGVuc3VyZXMgYW55IFBPU1QgZGF0YSBwcmVmZXRjaGVkIGluIHRoZSBtYWluIHJlcXVlc3QgCiAgZ2V0cyBwYXNzZWQgYWxvbmcgdG8gdGhlIHN1YnJlcXVlc3QgaGFuZGxlcihzKS4KCi0gQyBidWdmaXg6IGFwcmVxX2RlY29kZSBbR3JhaGFtIENsYXJrXQogIElmIHRoZSBzb3VyY2UgYW5kIGRlc3RpbmF0aW9uIHN0cmluZ3MgYXJlIHJlcHJlc2VudGVkIGJ5IHRoZSBzYW1lCiAgcG9pbnRlciAtIGUuZy4gaWYgY2FsbGVkIGFzIGFwcmVxX3VuZXNjYXBlKHMpIC0gc3RyaW5nIHMgaXMgbW9kaWZpZWQKICBpbmNvcnJlY3RseSBpbiBnZW5lcmFsLiAgUGF0Y2ggaW5jbHVkZXMgbmV3IHVuaXQgdGVzdC4KCi0gUGVybCBBUEkgW2pvZXNdCiAgQWRkZWQgJHJlcS0+cGFyc2UsICRyZXEtPnN0YXR1cywgJiAicHJlcGFyc2UiIGxvZ2ljIAogIHRvICRyZXEtPnBhcmFtICYgJHJlcS0+dXBsb2FkLgoKLSBDIEFQSSBbam9lc10KICBBZGRlZCAicHJlcGFyc2UiIGxvZ2ljIHRvIGFwcmVxX3BhcmFtcyAmIGFwcmVxX3VwbG9hZHMKICB0byBicmluZyBiZWhhdmlvciBpbiBsaW5lIHdpdGggbGliYXByZXEtMS54LgoKLSBDIEFQSSBbam9lc10KICBEcm9wcGVkIHBhcmFtLT5jaGFyc2V0LgogIE1ha2UgYXByZXFfYnJpZ2FkZV9jb25jYXQgcHVibGljLCBzbyBtb2RfYXByZXEgY2FuIHVzZSBpdAogIGZvciBpdHMgY3R4LT5zcG9vbCBicmlnYWRlLgoKLSBEb2N1bWVudGF0aW9uIFtqb2VzXQogIFVwZGF0ZWQgQ29va2llX3BvZCB0byByZWZsZWN0IEFQSSBjaGFuZ2VzIG92ZXIgdjEuWC4KCi0gRG9jdW1lbnRhdGlvbiBbam9lc10KICBBZGRlZCBkb3h5Z2VuIGxpbmtzIHRvIEFwYWNoZTo6UmVxdWVzdCBhbmQgQXBhY2hlOjpDb29raWUgCiAgcGVybCBkb2NzLgoKLSBDIEFQSSBbam9lc10KICBBZGRlZCBhcHJlcV9jb3B5X2JyaWdhZGUoYmIpIHRvIGFwcmVxLmguCgotIEMgQVBJIFtqb2VzXQogIFRoZSBuZXcgZmlsdGVyLWJhc2VkIGRlc2lnbiByZXF1aXJlZCBhIGNvbXBsZXRlIAogIGRlcGFydHVyZSBmcm9tIGxpYmFwcmVxLTEuWCBjb2RlYmFzZS4gbGliYXByZXEtMgogIGlzIGJhc2VkIHNvbGVseSBvbiBBUFIsIGFuZCB0byBiZSBmdWxseSBmdW5jdGlvbmFsLCAKICByZXF1aXJlcyBhIHN1cHBvcnRpbmcgZW52aXJvbm1lbnQgc2ltaWxhciB0byBBcGFjaGUtMi4KICBBIHBlcnNvbiB3aXNoaW5nIHRvIHBvcnQgbGliYXByZXEtMiB0byBhIG5ldyBlbnZpcm9ubWVudAogIG5lZWRzIHRvIHByb3ZpZGUgZGVmaW5pdGlvbnMgZm9yIHRoZSBkZWNsYXJhdGlvbnMgaW4gYXByZXFfZW52LmguCgotIFBlcmwgQVBJIFtqb2VzXQogIEFnZ3JlZ2F0ZXMgYXJlIGFsd2F5cyBjb2xsZWN0ZWQgaW50byBhbiBBUFI6OlRhYmxlLWJhc2VkIHBhY2thZ2UuCiAgTmV3IHRhYmxlIHBhY2thZ2VzOiBBcGFjaGU6OkNvb2tpZTo6VGFibGUsIEFwYWNoZTo6UmVxdWVzdDo6VGFibGUsCiAgYW5kIEFwYWNoZTo6VXBsb2FkOjpUYWJsZS4KCi0gUGVybCBBUEkgW2pvZXNdCiAgQXBhY2hlOjpDb29raWUtPmZldGNoIG5vdyByZXF1aXJlcyBhbiAiZW52aXJvbm1lbnQiIGFyZ3VtZW50ICgkcikuCiAgSXRzIHJldHVybiB2YWx1ZSBpcyBibGVzc2VkIGludG8gdGhlIEFwYWNoZTo6Q29va2llOjpKYXIgY2xhc3MuCgotIFBlcmwgQVBJIFtqb2VzXQogIFR3byBuZXcgcmVxdWVzdCBsb29rdXAgZnVuY3Rpb25zOgogIC0jICRyZXEtPmFyZ3MgLSBwYXJhbSBsb29rdXAgdXNpbmcgb25seSB0aGUgcXVlcnkgc3RyaW5nCiAgLSMgJHJlcS0+Ym9keSAtIHBhcmFtIGxvb2t1cCB1c2luZyBvbmx5IHRoZSBQT1NUIGRhdGEKCgoqKi8K