CkludHJvZHVjdGlvbgoKCSAgVGhpcyBpcyBhIGZyYW1lIGJ1ZmZlciBkZXZpY2UgZHJpdmVyIGZvciAzZGZ4JyBWb29kb28gR3JhcGhpY3MgCgkoYWthIHZvb2RvbyAxLCBha2Egc3N0MSkgYW5kIFZvb2Rvb7IgKGFrYSBWb29kb28gMiwgYWthIENWRykgYmFzZWQgCgl2aWRlbyBib2FyZHMuIEl0J3MgaGlnaGx5IGV4cGVyaW1lbnRhbCBjb2RlLCBidXQgaXMgZ3VhcmFudGVlZCB0byB3b3JrCglvbiBteSBjb21wdXRlciwgd2l0aCBteSAiTWF4aSBHYW1lciAzRCIgYW5kICJNYXhpIEdhbWVyIDNksiIgYm9hcmRzLAoJYW5kIHdpdGggbWUgImJldHdlZW4gY2hhaXIgYW5kIGtleWJvYXJkIi4gU29tZSBwZW9wbGUgdGVzdGVkIG90aGVyCgljb21iaW5hdGlvbnMgYW5kIGl0IHNlZW1zIHRoYXQgaXQgd29ya3MuCgkgIFRoZSBtYWluIHBhZ2UgaXMgbG9jYXRlZCBhdCA8aHR0cDovL3NzdGZiLnNvdXJjZWZvcmdlLm5ldD4sIGFuZCBpZgoJeW91IHdhbnQgdGhlIGxhdGVzdCB2ZXJzaW9uLCBjaGVjayBvdXQgdGhlIENWUywgYXMgdGhlIGRyaXZlciBpcyBhIHdvcmsKCWluIHByb2dyZXNzLCBJIGZlZWwgdW5jb21mb3J0YWJsZSB3aXRoIHJlbGVhc2luZyB0YXJiYWxscyBvZiBzb21ldGhpbmcKCW5vdCBjb21wbGV0ZWx5IHdvcmtpbmcuLi5Eb24ndCB3b3JyeSwgaXQncyBzdGlsbCBtb3JlIHRoYW4gdXNlYWJsZQoJKEkgZWF0IG15IG93biBkb2cgZm9vZCkKCgkgIFBsZWFzZSByZWFkIHRoZSBCdWcgc2VjdGlvbiwgYW5kIHJlcG9ydCBhbnkgc3VjY2VzcyBvciBmYWlsdXJlIHRvIG1lCgkoR2hvemxhbmUgVG91bWkgPGd0b3VtaUBsYXBvc3RlLm5ldD4pLgoJICBCVFcsIElmIHlvdSBoYXZlIG9ubHkgb25lIG1vbml0b3IgLCBhbmQgeW91IGRvbid0IGZlZWwgbGlrZSBwbGF5aW5nCgl3aXRoIHRoZSB2Z2EgcGFzc3Rocm91IGNhYmxlLCBJIGNhbiBvbmx5IHN1Z2dlc3QgYm9ycm93aW5nIGEgc2NyZWVuCglzb21ld2hlcmUuLi4gCgoKSW5zdGFsbGF0aW9uIAoKCSAgVGhpcyBkcml2ZXIgKHNob3VsZCkgd29yayBvbiBpeDg2LCB3aXRoICJsYXRlIiAyLjIueCBrZXJuZWwgKHRlc3RlZAoJd2l0aCB4ID0gMTkpIGFuZCAicmVjZW50IiAyLjQueCBrZXJuZWwsIGFzIGEgbW9kdWxlIG9yIGNvbXBpbGVkIGluLgoJICBJdCBoYXMgYmVlbiBpbmNsdWRlZCBpbiBtYWluc3RyZWFtIGtlcm5lbCBzaW5jZSB0aGUgaW5mYW1vdXMgMi40LjEwLgoJICBZb3UgY2FuIGFwcGx5IHRoZSBwYXRjaGVzIGZvdW5kIGluIHNzdGZiL2tlcm5lbC8qLTIuezJ8NH0ueC5wYXRjaCwKCWFuZCBjb3B5IHNzdGZiLmMgdG8gbGludXgvZHJpdmVycy92aWRlby8sIG9yIGFwcGx5IGEgc2luZ2xlIHBhdGNoLCAKCXNzdGZiL3BhdGNoLTIuezJ8NH0ueC1zc3RmYi15eW1tZGQgdG8geW91ciBsaW51eCBzb3VyY2UgdHJlZS4KCgkgIFRoZW4gY29uZmlndXJlIHlvdXIga2VybmVsIGFzIHVzdWFsOiBjaG9vc2UgIm0iIG9yICJ5IiB0byAzRGZ4IFZvb2RvbwoJR3JhcGhpY3MgaW4gc2VjdGlvbiAiY29uc29sZSIuIENvbXBpbGUsIGluc3RhbGwsIGhhdmUgZnVuLi4uIGFuZCBwbGVhc2UKCWRyb3AgbWUgYSByZXBvcnQgOikKCgpNb2R1bGUgVXNhZ2UKCQoJV2FybmluZ3MuCgkjIFlvdSBzaG91bGQgcmVhZCBjb21wbGV0ZWx5IHRoaXMgc2VjdGlvbiBiZWZvcmUgaXNzdWluZyBhbnkgY29tbWFuZC4KCSMgSWYgeW91IGhhdmUgb25seSBvbmUgbW9uaXRvciB0byBwbGF5IHdpdGgsIG9uY2UgeW91IGluc21vZCB0aGUKCSAgbW9kdWxlLCB0aGUgM2RmeCB0YWtlcyBjb250cm9sIG9mIHRoZSBvdXRwdXQsIHNvIHlvdSdsbCBoYXZlIHRvCgkgIHBsdWcgdGhlIG1vbml0b3IgdG8gdGhlICJub3JtYWwiIHZpZGVvIGJvYXJkIGluIG9yZGVyIHRvIGlzc3VlCgkgIHRoZSBjb21tYW5kcywgb3IgeW91IGNhbiBibGluZGx5IHVzZSBzc3RfZGJnX3ZnYXBhc3MKICAgICAgICAgIGluIHRoZSB0b29scyBkaXJlY3RvcnkgKFNlZSBUb29scykuIFRoZSBsYXRlc3Qgc29sdXRpb24gaXMgcGFzcyB0aGUKCSAgcGFyYW1ldGVyIHZnYXBhc3M9MSB3aGVuIGluc21vZGRpbmcgdGhlIGRyaXZlci4gKFNlZSBLZXJuZWwvTW9kdWxlcwoJICBPcHRpb25zKQoKCU1vZHVsZSBpbnNlcnRpb246CgkjIGluc21vZCBzc3RmYi5vCgkgIHlvdSBzaG91bGQgc2VlIHNvbWUgc3RyYW5nZSBvdXRwdXQgZnJvbSB0aGUgYm9hcmQ6IAoJICBhIGJpZyBibHVlIHNxdWFyZSwgYSBncmVlbiBhbmQgYSByZWQgc21hbGwgc3F1YXJlcyBhbmQgYSB2ZXJ0aWNhbAoJICB3aGl0ZSByZWN0YW5nbGUuIHdoeT8gdGhlIGZ1bmN0aW9uJ3MgbmFtZSBpcyBzZWxmLWV4cGxhbmF0b3J5OgoJICAic3N0ZmJfdGVzdCgpIi4uLgoJICAoaWYgeW91IGRvbid0IGhhdmUgYSBzZWNvbmQgbW9uaXRvciwgeW91J2xsIGhhdmUgdG8gcGx1ZyB5b3VyIG1vbml0b3IKCSAgZGlyZWN0bHkgdG8gdGhlIDJEIHZpZGVvY2FyZCB0byBzZWUgd2hhdCB5b3UncmUgdHlwaW5nKQoJIyBjb24yZmIgL2Rldi9mYnggL2Rldi90dHl4CgkgIGJpbmQgYSB0dHkgdG8gdGhlIG5ldyBmcmFtZSBidWZmZXIuIGlmIHlvdSBhbHJlYWR5IGhhdmUgYSBmcmFtZQoJICBidWZmZXIgZHJpdmVyLCB0aGUgdm9vZG9vIGZiIHdpbGwgbGlrZWx5IGJlIC9kZXYvZmIxLiBpZiBub3QsIAoJICB0aGUgZGV2aWNlIHdpbGwgYmUgL2Rldi9mYjAuIFlvdSBjYW4gY2hlY2sgdGhpcyBieSBkb2luZyBhIAoJICBjYXQgL3Byb2MvZmIuIFlvdSBjYW4gZmluZCBhIGNvcHkgb2YgY29uMmZiIGluIHRvb2xzLyBkaXJlY3RvcnkuCgkgIGlmIHlvdSBkb24ndCBoYXZlIGFub3RoZXIgZmIgZGV2aWNlLCB0aGlzIHN0ZXAgaXMgc3VwZXJmbHVvdXMsCgkgIGFzIHRoZSBjb25zb2xlIHN1YnN5c3RlbSBhdXRvbWFnaWNhbHkgYmluZHMgdHR5cyB0byB0aGUgZmIuCgkjIHN3aXRjaCB0byB0aGUgdmlydHVhbCBjb25zb2xlIHlvdSBqdXN0IG1hcHBlZC4gInRhZGFhYSIgLi4uCgoJTW9kdWxlIHJlbW92YWw6CgkjIGNvbjJmYiAvZGV2L2ZieCAvZGV2L3R0eXgKCSAgYmluZCB0aGUgdHR5IHRvIHRoZSBvbGQgZnJhbWUgYnVmZmVyIHNvIHRoZSBtb2R1bGUgY2FuIGJlIHJlbW92ZWQuCgkgIChob3cgZG9lcyBpdCB3b3JrIHdpdGggdmdhY29uID8gc2hvcnQgYW5zd2VyIDogaXQgZG9lc24ndCB3b3JrKQoJIyBybW1vZCBzc3RmYgoKCktlcm5lbC9Nb2R1bGVzIE9wdGlvbnMKCglZb3UgY2FuIHBhc3Mgc29tZSBvcHRpb25zIHRvIHRoZSBzc3RmYiBtb2R1bGUsIGFuZCB2aWEgdGhlIGtlcm5lbCAKCWNvbW1hbmQgbGluZSB3aGVuIHRoZSBkcml2ZXIgaXMgY29tcGlsZWQgaW46Cglmb3IgbW9kdWxlIDogaW5zbW9kIHNzdGZiLm8gb3B0aW9uMT12YWx1ZTEgb3B0aW9uMj12YWx1ZTIgLi4uCglpbiBrZXJuZWwgOiAgdmlkZW89c3N0ZmI6b3B0aW9uMSxvcHRpb24yOnZhbHVlMixvcHRpb24zIC4uLgoJCglzc3RmYiBzdXBwb3J0cyB0aGUgZm9sbG93aW5nIG9wdGlvbnMgOgoKTW9kdWxlCQlLZXJuZWwJCURlc2NyaXB0aW9uCgp2Z2FwYXNzPTAJdmdhbm9wYXNzCUVuYWJsZSBvciBkaXNhYmxlIFZHQSBwYXNzdGhyb3UgY2FibGUuCnZnYXBhc3M9MQl2Z2FwYXNzCQlXaGVuIGVuYWJsZWQsIHRoZSBtb25pdG9yIHdpbGwgZ2V0IHRoZSBzaWduYWwKCQkJCWZyb20gdGhlIFZHQSBib2FyZCBhbmQgbm90IGZyb20gdGhlIHZvb2Rvby4KCQkJCURlZmF1bHQ6IG5vcGFzcwoKbWVtPXgJCW1lbTp4CQlGb3JjZSBmcmFtZSBidWZmZXIgbWVtb3J5IGluIE1pQgoJCQkJYWxsb3dlZCB2YWx1ZXM6IDAsIDEsIDIsIDQuCgkJCQlEZWZhdWx0OiAwICg9IGF1dG9kZXRlY3QpCgppbnZlcnNlPTEJaW52ZXJzZQkJU3VwcG9zZWQgdG8gZW5hYmxlIGludmVyc2UgY29uc29sZS4KCQkJCWRvZXNuJ3Qgd29yayB5ZXQuLi4KCmNsaXBwaW5nPTEJY2xpcHBpbmcJRW5hYmxlIG9yIGRpc2FibGUgY2xpcHBpbmcuCmNsaXBwaW5nPTAJbm9jbGlwcGluZwlXaXRoIGNsaXBwaW5nIGVuYWJsZWQsIGFsbCBvZmZzY3JlZW4KCQkJCXJlYWRzIGFuZCB3cml0ZXMgYXJlIGRpc2NhcmRlZC4KCQkJCURlZmF1bHQ6IGVuYWJsZSBjbGlwcGluZy4KCmdmeGNsaz14CWdmeGNsazp4CUZvcmNlIGdyYXBoaWMgY2xvY2sgZnJlcXVlbmN5IChpbiBNSHopLgoJCQkJQmUgY2FyZWZ1bCB3aXRoIHRoaXMgb3B0aW9uLCBpdCBtYXkgYmUKCQkJCURBTkdFUk9VUy4KCQkJCURlZmF1bHQ6IGF1dG8gCgkJCQkJNTBNaHogZm9yIFZvb2RvbyAxLAoJCQkJCTc1TUh6IGZvciBWb29kb28gMi4gCgpzbG93cGNpPTEJZmFzdHBjaQkJRW5hYmxlIG9yIGRpc2FibGUgZmFzdCBQQ0kgcmVhZC93cml0ZXMuCnNsb3dwY2k9MQlzbG93cGNpCQlEZWZhdWx0IDogZmFzdHBjaQoKZGV2PXgJCWRldjp4CQlBdHRhY2ggdGhlIGRyaXZlciB0byBkZXZpY2UgbnVtYmVyIHguCgkJCQkwIGlzIHRoZSBmaXJzdCBjb21wYXRpYmxlIGJvYXJkIChpbiAKCQkJCWxzcGNpIG9yZGVyKQoKVG9vbHMKCglUaGVzZSB0b29scyBhcmUgbW9zdGx5IGZvciBkZWJ1Z2dpbmcgcHVycG9zZXMsIGJ1dCB5b3UgY2FuIAoJZmluZCBzb21lIG9mIHRoZXNlIGludGVyZXN0aW5nIDoKCSAtIGNvbjJmYiAsIG1hcHMgYSB0dHkgdG8gYSBmYnJhbWVidWZmZXIgLgoJCWNvbjJmYiAvZGV2L2ZiMSAvZGV2L3R0eTUKCSAtIHNzdF9kYmdfdmdhcGFzcyAsIGNoYW5nZXMgdmdhIHBhc3N0aHJvdS4gWW91IGhhdmUgdG8gcmVjb21waWxlIHRoZQoJZHJpdmVyIHdpdGggU1NUX0RFQlVHIGFuZCBTU1RfREVCVUdfSU9DVEwgc2V0IHRvIDEKCQlzc3RfZGJnX3ZnYXBhc3MgL2Rldi9mYjEgMSAoZW5hYmxlcyB2Z2EgY2FibGUpCgkJc3N0X2RiZ192Z2FwYXNzIC9kZXYvZmIxIDAgKGRpc2FibGVzIHZnYSBjYWJsZSkKCSAtIGdsaWRlX3Jlc2V0ICwgcmVzZXRzIHRoZSB2b29kb28gdXNpbmcgZ2xpZGUKCQl1c2UgdGhpcyBhZnRlciBybW1vZGluZyBzc3RmYiwgaWYgdGhlIG1vZHVsZSByZWZ1c2VzIHRvCgkJcmVpbnNlcnQgLgoKQnVncwoKCS0gRE8gTk9UIHVzZSBnbGlkZSB3aGlsZSB0aGUgc3N0ZmIgbW9kdWxlIGlzIGluLCB5b3UnbGwgbW9zdCBsaWtlbHkKCWhhbmcgeW91ciBjb21wdXRlci4KCS0gSWYgeW91IHNlZSBzb21lIGFydGVmYWN0cyAocGl4ZWxzIG5vdCBjbGVhbmluZyBhbmQgc3R1ZmYgbGlrZSB0aGF0KSwgCgl0cnkgdHVybmluZyBvZmYgY2xpcHBpbmcgKGNsaXBwaW5nPTApLCBhbmQvb3IgdXNpbmcgc2xvd3BjaQoJLSB0aGUgZHJpdmVyIGRvbid0IGRldGVjdCB0aGUgNE1iIGZyYW1lIGJ1ZmZlciB2b29kb29zLCBpdCBzZWVtcyB0aGF0Cgl0aGUgMiBsYXN0IE1icyB3cmFwIGFyb3VuZC4gbG9va2luZyBpbnRvIHRoYXQgLgoJLSBUaGUgZHJpdmVyIGlzIDE2IGJwcCBvbmx5LCAyNC8zMiB3b24ndCB3b3JrLgoJLSBUaGUgZHJpdmVyIGlzIG5vdCB5b3VyX2Zhdm9yaXRlX3RveS1zYWZlLiB0aGlzIGluY2x1ZGVzIFNNUC4uLgogICAgICAgICAgW0FjdHVhbGx5IGZyb20gaW5zcGVjdGlvbiBpdCBzZWVtcyB0byBiZSBzYWZlIC0gQWxhbl0KCS0gd2hlbiB1c2luZyBYRnJlZTg2IEZCZGV2IChYIG92ZXIgZmJkZXYpIHlvdSBtYXkgc2VlIHN0cmFuZ2UgY29sb3IKCXBhdHRlcm5zIGF0IHRoZSBib3JkZXIgb2YgeW91ciB3aW5kb3dzICh0aGUgcGl4ZWxzIGxvc2UgdGhlIGxvd2VzdAoJYnl0ZSAtPiBiYXNpY2FseSB0aGUgYmx1ZSBjb21wb25lbnQgbmQgc29tZSBvZiB0aGUgZ3JlZW4pIC4gSSdtIHVuYWJsZQoJdG8gcmVwcm9kdWNlIHRoaXMgd2l0aCBYRnJlZTg2LTMuMywgYnV0IG9uZSBvZiB0aGUgdGVzdGVycyBoYXMgdGhpcwoJcHJvYmxlbSB3aXRoIFhGcmVlODYtNC4gYXBwYXJlbnRseSByZWNlbnQgWGZyZWU4Ni00Lnggc29sdmUgdGhpcwoJcHJvYmxlbS4KCS0gSSBkaWRuJ3QgcmVhbGx5IHRlc3QgY2hhbmdpbmcgdGhlIHBhbGV0dGUsIHNvIHlvdSBtYXkgZmluZCBzb21lIHdlaXJkCgl0aGluZ3Mgd2hlbiBwbGF5aW5nIHdpdGggdGhhdC4KCS0gU29tZXRpbWVzIHRoZSBkcml2ZXIgd2lsbCBub3QgcmVjb2duaXNlIHRoZSBEQUMgLCBhbmQgdGhlCiAgICAgICAgaW5pdGlhbGlzYXRpb24gd2lsbCBmYWlsLiB0aGlzIGlzIHNwZWNpZmljYWx5IHRydWUgZm9yCgl2b29kb28gMiBib2FyZHMgLCBidXQgaXQgc2hvdWxkIGJlIHNvbHZlZCBpbiByZWNlbnQgdmVyc2lvbnMuIHBsZWFzZQoJY29udGFjdCBtZSAuCgktIHRoZSAyNC8zMiBpcyBub3QgbGlrZWx5IHRvIHdvcmsgYW55dGltZSBzb29uICwga25vd2luZyB0aGF0IHRoZQoJaGFyZHdhcmUgZG9lcyAuLi4gdW51c3VhbCB0aGlncyBpbiAyNC8zMiBicHAKCS0gV2hlbiB1c2VkIHdpdGggYW50aGVyIHZpZGVvIGJvYXJkLCBjdXJyZW50IGxpbWl0YXRpb25zIG9mIGxpbnV4Cgljb25zb2xlIHN1YnN5c3RlbSBjYW4gY2F1c2Ugc29tZSB0cm91Ymxlcywgc3BlY2lmaWNhbHksIHlvdSBzaG91bGQKCWRpc2FibGUgc29mdHdhcmUgc2Nyb2xsYmFjayAsIGFzIGl0IGNhbiBvb3BzIGJhZGx5IC4uLgoKVG9kbwoKCS0gR2V0IHJpZCBvZiB0aGUgcHJldmlvdXMgcGFyYWdyYXBoLgoJLSBCdXkgbW9yZSBjb2ZmZWUuCgktIHRlc3QvcG9ydCB0byBvdGhlciBhcmNoLgoJLSB0cnkgdG8gYWRkIHBhbm5pbmcgdXNpbmcgdHdlZWtzIHdpdGggZnJvbnQgYW5kIGJhY2sgYnVmZmVyIC4KCS0gdHJ5IHRvIGltcGxlbWVudCBhY2NlbCBvbiB2b29kb28yLCB0aGlzIGJvYXJkIGNhbiBhY3R1YWxseSBkbyBhIAoJICBsb3QgaW4gMkQgZXZlbiBpZiBpdCB3YXMgc29sZCBhcyBhIDNEIG9ubHkgYm9hcmQgLi4uCgpnaG96LgoKLS0gCkdob3psYW5lIFRvdW1pIDxndG91bWlAbGFwb3N0ZS5uZXQ+CgoKJERhdGU6IDIwMDIvMDUvMDkgMjA6MTE6NDUgJApodHRwOi8vc3N0ZmIuc291cmNlZm9yZ2UubmV0L1JFQURNRQo=