PD9waHAgIAkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCXJlcXVpcmVfb25jZSgkX1NFUlZFUlsnRE9DVU1FTlRfUk9PVCddIC4gIi9lY2xpcHNlLm9yZy1jb21tb24vc3lzdGVtL2FwcC5jbGFzcy5waHAiKTsJcmVxdWlyZV9vbmNlKCRfU0VSVkVSWydET0NVTUVOVF9ST09UJ10gLiAiL2VjbGlwc2Uub3JnLWNvbW1vbi9zeXN0ZW0vbmF2LmNsYXNzLnBocCIpOyAJcmVxdWlyZV9vbmNlKCRfU0VSVkVSWydET0NVTUVOVF9ST09UJ10gLiAiL2VjbGlwc2Uub3JnLWNvbW1vbi9zeXN0ZW0vbWVudS5jbGFzcy5waHAiKTsgCSRBcHAgCT0gbmV3IEFwcCgpOwkkTmF2CT0gbmV3IE5hdigpOwkkTWVudSAJPSBuZXcgTWVudSgpOwkJaW5jbHVkZSgkQXBwLT5nZXRQcm9qZWN0Q29tbW9uKCkpOyAgICAjIEFsbCBvbiB0aGUgc2FtZSBsaW5lIHRvIHVuY2x1dHRlciB0aGUgdXNlcidzIGRlc2t0b3AnCgokcGFnZVRpdGxlIAkJPSAiQXJjaGl2ZWQgVGVjaG5vbG9neSBQcm9qZWN0cyI7CiRwYWdlS2V5d29yZHMJPSAidGVjaG5vbG9neSI7CiRwYWdlQXV0aG9yCQk9ICJCam9ybiBGcmVlbWFuLUJlbnNvbiBOb3YgMjAvMDUiOwoKb2Jfc3RhcnQoKTsKPz4KICAgIDxkaXYgaWQ9Im1haW5jb250ZW50Ij4KCTxkaXYgaWQ9Im1pZGNvbHVtbiI+CiAgICAgICAgPGgxPjw/PSAkcGFnZVRpdGxlID8+PC9oMT4KICAgICAgICAKPHN0eWxlPgpib2R5IHsgIApiYWNrZ3JvdW5kLWltYWdlOiB1cmwoJy9pbWFnZXMvYXJjaGl2ZS5naWYnKTsKYmFja2dyb3VuZC1yZXBlYXQ6IHJlcGVhdC15Cn0KPC9zdHlsZT4KCiAgICAgIDxwPlByb2plY3RzIHVuZGVyIHRoZSBFY2xpcHNlIFRlY2hub2xvZ3kgUHJvamVjdCBoYXZlIGxpbWl0ZWQgbGlmZWN5Y2xlcy4KICAgICAgVW5saWtlIHRoZSBtYWpvciB0b3AtbGV2ZWwgUHJvamVjdHMsIHRoZSBUZWNobm9sb2d5IFByb2plY3RzIGFyZSBtZWFudCB0bwogICAgICBiZSB0ZWNobm9sb2d5IGV4cGxvcmF0aW9ucyBvciBpbmN1YmF0b3JzLiBXaGVuIHRoZXNlIHByb2plY3RzIGhhdmUKICAgICAgZXhwbG9yZWQsIHByb3ZlZCwgb3IgZGlzcHJvdmVkIHRoZWlyIGFzc29jaWF0ZWQgdGVjaG5vbG9naWVzLCB0aGUgcHJvamVjdAogICAgICBjb21lcyB0byBpdHMgbmF0dXJhbCBlbmQuIEZvciBzb21lIHByb2plY3RzLCB0aGlzIGVuZCBpcyBhIHBhcGVyCiAgICAgIHB1Ymxpc2hpbmcgdGhlIHJlc2VhcmNoIHJlc3VsdHM7IGZvciBvdGhlcnMsIHRoaXMgZW5kIGlzIHRvIGJlCiAgICAgIGluY29ycG9yYXRlZCBpbnRvIHRoZSBiYXNlIHRlY2hub2xvZ3kgb2YgYW5vdGhlciB0b3AtbGV2ZWwgcHJvamVjdC4gPC9wPgoJCQogICAgICA8cD48YSBocmVmPSIvbmV3c2dyb3Vwcy9hcmNoaXZlZGdyb3Vwcy5waHAiPkFyY2hpdmVkCiAgICAgIG5ld3Nncm91cHM8L2E+IGFuZCA8YSBocmVmPSIvbWFpbC9hcmNoaXZlZGxpc3RzLnBocCI+bWFpbGluZwogICAgICBsaXN0czwvYT4gYXJlIGFsc28gYXZhaWxhYmxlIHNlcGFyYXRlbHkuIDwvcD4KICAgICAgCjxoMj5DTUU8L2gyPgogICAgICA8cD5UaGUgQ01FIHdlYnNpdGUsIG5ld3Nncm91cCwgbWFpbGluZyBsaXN0LCBzb3VyY2UgY29kZSwgZXRjLgogICAgICBhcmUgYXZhaWxhYmxlIGluIDxhIGhyZWY9Imh0dHA6Ly9hcmNoaXZlLmVjbGlwc2Uub3JnL3RlY2hub2xvZ3kvYXJjaGl2ZXMvY21lLXByb2plY3QudGFyLmd6ICI+YSAKICAgICAgY29tcHJlc3NlZCB0YXIgYXJjaGl2ZSA8Zm9udCBzaXplPS0xPigyNTZNYik8L2ZvbnQ+PC9hPjxicj4KCQkKPGgyPktvaTwvaDI+CiAgICAgIEtvaSB2ZXJzaW9uIDEuMCBpcyBmdW5jdGlvbmFsbHkgY29tcGxldGUgYW5kIGN1cnJlbnRseSB1c2VkIGluIGNvbW1lcmNpYWwKICAgICAgRWNsaXBzZSBhZGQtb25zLiBLb2kgcHJvdmlkZXMgYSBpbnRyYS13b3Jrc3BhY2UgY29tbXVuaWNhdGlvbiBwbGF0Zm9ybSBmb3IKICAgICAgZGV2ZWxvcG1lbnQgb2YgY29sbGFib3JhdGl2ZSBFY2xpcHNlIGZlYXR1cmVzLiBFeGFtcGxlcyBvZiBjb2xsYWJvcmF0aXZlCiAgICAgIGZlYXR1cmVzIHRoYXQgYXJlIHBvc3NpYmxlIHVzaW5nIEtvaSByYW5nZSBmcm9tIHRoZSByZWxhdGl2ZWx5IHNpbXBsZSBzdWNoCiAgICAgIGFzIGV2ZW50IG5vdGlmaWNhdGlvbiAoY2hlY2staW4sIGNoZWNrLW91dCwgY29uZmxpY3RpbmcgY2hhbmdlcywgZXRjLikgdG8KICAgICAgc29tZXRoaW5nIGFzIGNvbXBsZXggYSBzdXBwb3J0aW5nIHJlbW90ZSBwYWlyIHByb2dyYW1taW5nLiZuYnNwOwogICAgICA8cD5UaGUgS29pIGluZnJhc3RydWN0dXJlIGlzIGJ1aWx0IGFyb3VuZCBhIGNsaWVudC9zZXJ2ZXIgYXJjaGl0ZWN0dXJlCiAgICAgIHVzaW5nIGEgV2ViIFNlcnZpY2VzIFJQQyBjb21tdW5pY2F0aW9ucyBtb2RlbC4gVGhlIGNsaWVudHMgYXJlIGluZGl2aWR1YWwKICAgICAgZWNsaXBzZSBwbGF0Zm9ybSBpbnN0YW5jZXMgdGhhdCBjb21tdW5pY2F0ZSB3aXRoIGEgJnF1b3Q7Y29sbGFib3JhdGlvbgogICAgICBzZXJ2ZXImcXVvdDsgdGhhdCBzdXBwb3J0cyBkYXRhIHBlcnNpc3RlbmNlIGFuZCBpbXBsZW1lbnRzIHNoYXJlZAogICAgICBjb2xsYWJvcmF0aXZlIHNlcnZpY2VzLiBUaGUgYmFzZSBpbmZyYXN0cnVjdHVyZSBhbHNvIGluY2x1ZGVzIHNvbWUgYmFzZQogICAgICBzZXJ2aWNlcyBzdWNoIGFzIHVzZXIgaWRlbnRpZmljYXRpb24vYXV0aGVudGljYXRpb24sIGNsaWVudC10by1jbGllbnQKICAgICAgbWVzc2FnaW5nLCBhbmQgZXZlbnQgbm90aWZpY2F0aW9uLjwvcD4KICAgICAgPHA+VGhlIEtvaSB3ZWJzaXRlLCBuZXdzZ3JvdXAsIG1haWxpbmcgbGlzdCwgc291cmNlIGNvZGUsIGFuZCBsYXRlc3QKICAgICAgZG93bmxvYWQgYXJlIGF2YWlsYWJsZSBpbiA8YSBocmVmPSJodHRwOi8vYXJjaGl2ZS5lY2xpcHNlLm9yZy90ZWNobm9sb2d5L2FyY2hpdmVzL2tvaS1wcm9qZWN0LnRhci5neiI+YQogICAgICBjb21wcmVzc2VkIHRhciBhcmNoaXZlIDxmb250IHNpemU9LTE+KDYuNU1iKTwvZm9udD48L2E+Ljxicj4KICAgICAgCiA8aDI+RGFsaSBFSkIgT2JqZWN0LVJlbGF0aW9uYWwgTWFwcGluZyBQcm9qZWN0PC9oMj4gICAgCiAgICA8cD5UaGUgZ29hbCBvZiBEYWxpIGlzIHRvIGJ1aWxkIHN1cHBvcnQgZm9yIHRoZSBkZWZpbml0aW9uIGFuZCBlZGl0aW5nIG9mIE9iamVjdC1SZWxhdGlvbmFsIE1hcHBpbmdzIChPUk0pIAoJZm9yIEVKQiAzLjAgRW50aXRpZXMgKEpTUiAyMjApLiBFSkIgMy4wIGlzIHBhcnQgb2YgdGhlIEphdmEgRUUgNSBzcGVjaWZpY2F0aW9uIChKU1IgMjQ0KS4gCglEYWxpIGlzIGNvbXByaXNlZCBvZiBhIHNldCBvZiBleHRlbnNpYmxlIGZyYW1ld29ya3MgYW5kIGV4ZW1wbGFyeSB0b29scyBkZXNpZ25lZCB0byByZWR1Y2UgCgl0aGUgY29tcGxleGl0eSBvZiBPUk0gYnkgcHJvdmlkaW5nIGNyZWF0aW9uIGFuZCBhdXRvbWF0ZWQgaW5pdGlhbCBtYXBwaW5nIHdpemFyZHMsIAoJY29kZSBhc3Npc3RhbmNlLCBhbmQgZHluYW1pYyBwcm9ibGVtIGlkZW50aWZpY2F0aW9uLjwvcD4KCTxwPlRoaXMgcHJvamVjdCBoYXMgbW92ZWQgZnJvbSB0aGUKICAgICAgVGVjaG5vbG9neSBQTUMgdG8gdGhlIDxhIGhyZWY9Ii93ZWJ0b29scyI+V2ViIFRvb2xzCiAgICAgIFBsYXRmb3JtPC9hPiBwcm9qZWN0LjwvcD4KCTxwPlRoZSBEYWxpIHdlYnNpdGUsIG5ld3Nncm91cCwgbWFpbGluZyBsaXN0LCBzb3VyY2UgY29kZSwgYW5kIGxhdGVzdAogICAgZG93bmxvYWQgYXJlIGF2YWlsYWJsZSBpbiA8YSBocmVmPSJodHRwOi8vYXJjaGl2ZS5lY2xpcHNlLm9yZy90ZWNobm9sb2d5L2FyY2hpdmVzL2pzcjIyMG9ybS1wcm9qZWN0LnRhci5neiI+YQogICAgY29tcHJlc3NlZCB0YXIgYXJjaGl2ZSA8Zm9udCBzaXplPS0xPig2LjVNYik8L2ZvbnQ+PC9hPi48L3A+CiAgICAKPGgyPklERSBmb3IgTGFzemxvPC9oMj4KPHA+SURFIGZvciBMYXN6bG8gaXMgYW4gRWNsaXBzZS1iYXNlZCBkZXZlbG9wbWVudCBlbnZpcm9ubWVudCBmb3IgCmNyZWF0aW5nLCBlZGl0aW5nLCBkZWJ1Z2dpbmcsIGFuZCB0ZXN0aW5nIGFwcGxpY2F0aW9ucyBiYXNlZCBvbiAKdGhlIExaWCBkZWNsYXJhdGl2ZSBtYXJrLXVwIGxhbmd1YWdlLiBMYXN6bG8gaXMgYmFzZWQgb24gTFpYLCAKd2hpY2ggaXMgYW4gWE1MIGFuZCBKYXZhU2NyaXB0IGRlc2NyaXB0aW9uIGxhbmd1YWdlIHNpbWlsYXIgaW4gCnNwaXJpdCB0byBYVUwgKFhNTCBVc2VyIGludGVyZmFjZSBMYW5ndWFnZSkgYW5kIFhBTUwgCigiTG9uZ2hvcm4iIG1hcmstdXAgbGFuZ3VhZ2UgYnkgTWljcm9zb2Z0wikuPC9wPgo8cD5UaGUgTGFzemxvIFBsYXRmb3JtIGlzIGFuIG9wZW4tc291cmNlIHBsYXRmb3JtIGZvciB0aGUgZGV2ZWxvcG1lbnQKIGFuZCBkZWxpdmVyeSBvZiBSaWNoIEludGVybmV0IGFwcGxpY2F0aW9ucyAoc2VlIAogPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVubGFzemxvLm9yZyI+aHR0cDovL3d3dy5vcGVubGFzemxvLm9yZzwvYT4gZm9yIG1vcmUgaW5mb3JtYXRpb24pIHdoZXJlIHRoZSBMWlggWE1MIAogbWFyay11cCBpcyB1c2VkIHRvIGNyZWF0ZSB0aGUgdXNlciBpbnRlcmZhY2VzLgogPC9wPgo8cD5UaGUgTGFzemxvIHdlYnNpdGUsIG5ld3Nncm91cCwgbWFpbGluZyBsaXN0LCBzb3VyY2UgY29kZSwgYW5kIGxhdGVzdCAKZG93bmxvYWQgYXJlIGF2YWlsYWJsZSBpbiA8YSBocmVmPSJodHRwOi8vYXJjaGl2ZS5lY2xpcHNlLm9yZy90ZWNobm9sb2d5L2FyY2hpdmVzL2xhc3psby1wcm9qZWN0LnRhci5neiI+CmEgY29tcHJlc3NlZCB0YXIgYXJjaGl2ZS4gPGZvbnQgc2l6ZT0tMT4oOU1CKTwvZm9udD48L2E+PC9wPgogICAgCgo8aDI+TGVwaWRvLCBUb29scyBmb3IgQXBhY2hlIENvY29vbjwvaDI+Cgk8cD5UaGUgTGVwaWRvIHdlYnNpdGUsIG5ld3Nncm91cCwgbWFpbGluZyBsaXN0LCBzb3VyY2UgY29kZSwgYW5kIGxhdGVzdCAKCWRvd25sb2FkIGFyZSBhdmFpbGFibGUgaW4gPGEgaHJlZj0iaHR0cDovL2FyY2hpdmUuZWNsaXBzZS5vcmcvdGVjaG5vbG9neS9hcmNoaXZlcy9sZXBpZG8tcHJvamVjdC50YXIuZ3oiPgoJYSBjb21wcmVzc2VkIHRhciBhcmNoaXZlIDxmb250IHNpemU9LTE+KDlNQik8L2ZvbnQ+PC9hPjwvcD4KCjxoMj5PTUVMRVQgKE9wZW4gTW9kZWxpbmcgCiAgICAgIEVudmlyb25tZW50IHdpdGggTGlua3MgZm9yIEV4dGVuc2lvbnMgYW5kIFRyYW5zZm9ybWF0aW9ucyk8L2gyPgogVGhlIE9wZW4gTW9kZWxpbmcgRW52aXJvbm1lbnQgd2l0aCBMaW5rcyBmb3IgRXh0ZW5zaW9uIGJ5IFRyYW5zZm9ybWF0aW9uIHByb2plY3QgYWltZWQgdG8gcHJvdmlkZSB0aGUgYWJpbGl0eSB0byBpbnRlZ3JhdGUgdGhlIGluY3JlYXNpbmdseSB3aWRlIHZhcmlldHkgb2YgbW9kZWxpbmcgdHJhbnNmb3JtYXRpb24gdGVjaG5vbG9naWVzIGFuZCB0b29scyBzbyB0aGF0IG90aGVyd2lzZSBpbmNvbXBhdGlibGUgdG9vbHMgY291bGQgYmUgdXNlZCBpbiBjb21iaW5hdGlvbi4gQXMgc3VjaCBPTUVMRVQgY291bGQgYmUgdmlld2VkIGFzIGEgbmV4dCBnZW5lcmF0aW9uIG1ha2UsIHVzaW5nIG1ldGEtbW9kZWxzIHRvIGdpdmUgc3RyaWN0IHR5cGUgc2lnbmF0dXJlcyBmb3IgbW9kZWxzIGFuZCB0cmFuc2Zvcm1hdGlvbnMgYmV0d2VlbiBtb2RlbHMuCiAgICAgIDxwPjxiPlN1Y2Nlc3Nlczxicj4KICAgICAgPC9iPk9NRUxFVCBkZW1vbnN0cmF0ZWQgYW4gYWJpbGl0eSB0byBpbnRlZ3JhdGUgdmFyaW91cyB0b29scywgc3VwcG9ydGluZyB0cmFuc2Zvcm1hdGlvbnMgd3JpdHRlbiBpbiBKYXZhLCBYU0xUMSwgWFNMVDIsIG9yIEFOVC4gT01FTEVUIHBpb25lZXJlZCBhIG11bHRpLWxldmVsIHR5cGluZyBzeXN0ZW0gZm9yIG1ldGEtbW9kZWxzIHNvIHRoYXQgYSBtb2RlbCBjb21mb3JtaW5nIHRvIGEgbWV0YS1tb2RlbCBjb3VsZCBiZSBkZXNjcmliZWQgYXMgYSBmaWxlIHJlcHJlc2VudGF0aW9uIG9mIGFuIFhNTCAxLjAgc2VyaWFsaXphdGlvbiBvZiBhbiBYTUkgMS4zIGVuY29kaW5nIG9mIGEgVU1MIDEuNCBtZXRhLW1vZGVsLCB0aGVyZWJ5IGFsbG93aW5nIHRyYW5zZm9ybWF0aW9ucyB0byBvcGVyYXRlIGF0IGFwcHJvcHJpYXRlIGxldmVscyBvZiBhYnN0cmFjdGlvbi4gV29yayBpbiBwcm9ncmVzcyBzdXBwb3J0ZWQgQVRMLCBUZWZrYXQsIGEgc2ltcGxlIGNvbXBvc2l0ZSB0cmFuc2Zvcm1hdGlvbiBsYW5ndWFnZSBhbmQgYSBzZXQgb2YgRWNvcmVzIGZvciB2YXJpb3VzIE1PRiBhbmQgVU1MIHN0YW5kYXJkcy48YnI+CiAgICAgIDxicj4KICAgICAgPGI+RmFpbHVyZXM8YnI+CiAgICAgIDwvYj5PTUVMRVQgbmV2ZXIgYWNxdWlyZWQgc3VmZmljaWVudCByZXNvdXJjZXMgdG8gcHJvZ3Jlc3MgYXQgYSBzYXRpc2ZhY3RvcnkgcmF0ZS4gTGFjayBvZiByZXNvdXJjZXMgd2FzIGEgcGFydGljdWxhciBwcm9ibGVtIGZvciBhbiBpbnRlZ3JhdGlvbiBwcm9qZWN0IHNpbmNlIGl0IHdhcyB0b28gZWFzeSB0byBiZSBkaXN0cmFjdGVkIGludG8gbG9va2luZyBhdCBldmVyeSBvdGhlciBpbnRlcmVzdGluZyBtb2RlbGluZyBwcm9qZWN0IGFuZCBjb25jbHVkaW5nIHRoYXQgeWVzIHRoYXQgdG9vIHdvdWxkIGJlIGdvb2QgdG8gaW50ZWdyYXRlIHdpdGggT01FTEVULiBMYWNrIG9mIHJlc291cmNlcyBhbHNvIHByZXZlbnRzIHRoZSByZWxlYXNlIG9mIE1PRiBhbmQgVU1MIG1vZGVscyBzaW5jZSBsaWNlbnNpbmcgaXNzdWVzIHdlcmUgbmV2ZXIgcmVzb2x2ZWQuPC9wPgogICAgICA8cD48Yj5GaW5hbCBzdGF0dXM8L2I+PGJyPgogICAgICBPTUVMRVQgd2FzIGp1c3QgYWJvdXQgZnVuY3Rpb25hbCB3aXRoIHJlc3BlY3QgdG8gaW52b2tpbmcgaW5kaXZpZHVhbCB0cmFuc2Zvcm1hdGlvbnMsIGJ1dCB0aGF0IHdhcyBtb3JlIHNlbnNpYmx5IGRvbmUgd2l0aGluIHRoZSBlbnZpcm9ubWVudCBvZiB0aGF0IHRyYW5zZm9ybWF0aW9uLiBPTUVMRVQgd2FzIGNsb3NlIHRvIHN1cHBvcnRpbmcgY29tcG9zaXRlIHRyYW5zZm9ybWF0aW9ucyBhdCB3aGljaCBwb2ludCBPTUVMRVQgd291bGQgYmVjb21lIHVzZWZ1bC48L3A+CiAgICAgIDxwPlByaW9yIHRvIGFyY2hpdmluZywgdGhlIHByZXZhaWxpbmcgQ1ZTIHN0YXR1cyB3YXMgdXBncmFkZWQgdG8gc3VwcG9ydCBFY2xpcHNlIDMuMSBhbmQgSmF2YSA1LiBUaGUgZmluYWwgcmVsZWFzZSBvbiB0aGUgdXBkYXRlIHNpdGUgbmVlZGVkIHRoZSBFY2xpcHNlIDMuMU00IHJlbGVhc2UgdG8gYXZvaWQgcHJvYmxlbXMgd2l0aCBlYXJseSBFY2xpcHNlIHN1cHBvcnQgZm9yIEphdmEgNS4mbmJzcDs8L3A+Cgo8cD5UaGUgPGEgaHJlZj0iL21kZGkiPiBNRERpIHByb2plY3Q8L2E+IGhhcyBhbG1vc3QgaWRlbnRpY2FsIGdvYWxzIHRvIE9NRUxFVCBhbmQgc2lnbmlmaWNhbnRseSBncmVhdGVyIHJlc291cmNlcy4gSXQgaXMgdGhlcmVmb3JlIGhvcGVkIHRoYXQgTUREaSBjYW4gZnVsZmlsbCBPTUVMRVQncyBhbWJpdGlvbnMuJm5ic3A7PC9wPgoKPHA+VGhlIE9NRUxFVCB3ZWJzaXRlLCBuZXdzZ3JvdXAsIG1haWxpbmcgbGlzdCwgc291cmNlIGNvZGUsIGFuZCBsYXRlc3QgZG93bmxvYWQKYXJlIGF2YWlsYWJsZSBpbiBhIDxhIGhyZWY9Imh0dHA6Ly9hcmNoaXZlLmVjbGlwc2Uub3JnL3RlY2hub2xvZ3kvYXJjaGl2ZXMvb21lbGV0LXByb2plY3QudGFyLmd6Ij5jb21wcmVzc2VkIHRhcgphcmNoaXZlIDxmb250IHNpemU9LTE+KDJtYik8L2ZvbnQ+PC9hPjwvcD4KCjxoMj5Qb2xsaW5hdGU8L2gyPgo8aDM+R29hbHMgQWNoaWV2ZWQ8L2gzPgpQb2xsaW5hdGUgaXMgYW4gRWNsaXBzZSB0ZWNobm9sb2d5IHByb2plY3QgZm9yIGJ1aWxkIGFuIEVjbGlwc2UtYmFzZWQKSURFIGFuZCB0b29sc2V0IHRoYXQgbGV2ZXJhZ2VzIG9wZW4gc291cmNlIGFwcGxpY2F0aW9uIGZyYW1ld29ya3MgQXBhY2hlCkJlZWhpdmUgYW5kIHBsYXRmb3JtcyBsaWtlIFdlYiBUb29scyBQbGF0Zm9ybS4gVGhlcmUgaXMgYSB0aWdodCBmb2N1cyBvbgpCZWVoaXZlIHJlbGF0ZWQgZnVuY3Rpb25hbGl0eSBtYWtpbmcgZXZlcnl0aGluZyBlbHNlIHRoYXQgUG9sbGluYXRlCm5lZWRzIHNlY29uZGFyeS4gCj5Gcm9tIGluY2VwdGlvbiB1bnRpbCB3b3JrIGVuZGVkIGF0IHRoZSBlbmQgb2YgUTEgMjAwNSwgUG9sbGluYXRlIGZvY3VzZWQKb24gYnVpbGRpbmcgb24gV1RQIHRvIGFkZHJlc3MgQXBhY2hlIEJlZWhpdmUgTmV0VUkgYW5kIFBhZ2VGbG93cywKbGVhdmluZyBDb250cm9scyBhbmQgV2ViIFNlcnZpY2VzIE1ldGFEYXRhIGZvciB0aGUgZnV0dXJlLiBUbyB0aGF0IGVuZCwKdGhlcmUgaXMgYSBiYXNpYyBQYWdlIEZsb3cgRWRpdG9yIGluIFBvbGxpbmF0ZSBwbHVzIGJhc2ljIHN1cHBvcnQgZm9yCmFzc2VtYmxpbmcgYW5kIGxhdW5jaGluZyBhIEJlZWhpdmUgYmFzZWQgd2ViIGFwcGxpY2F0aW9uLgoKPGgzPkZpbmFsIFN0YXR1czwvaDM+CkF0IHRoaXMgdGltZSB0aGUgUG9sbGluYXRlIFByb2plY3QgaXMgaW4gYXJjaGl2YWwuICBXZSB3b3VsZCB3ZWxjb21lCm90aGVycyBmcm9tIHRoZSBjb21tdW5pdHkgd2hvIGFyZSBpbnRlcmVzdGVkIGluIFBvbGxpbmF0ZSB0byBzdGVwLXVwIGFuZApsZWFkIG9yIGNvbnRyaWJ1dGUgdG8gdGhlIHByb2plY3QuIDxwPlRoZSBQb2xsaW5hdGUgd2Vic2l0ZSwgbmV3c2dyb3VwLCBtYWlsaW5nIGxpc3QsIHNvdXJjZSBjb2RlLCBhbmQKbGF0ZXN0IGRvd25sb2FkcyBhcmUgYXZhaWxhYmxlIGluIGEgPGEgaHJlZj0iaHR0cDovL2FyY2hpdmUuZWNsaXBzZS5vcmcvdGVjaG5vbG9neS9hcmNoaXZlcy9wb2xsaW5hdGUtcHJvamVjdC50YXIuZ3oiPmNvbXByZXNzZWQKdGFyIGFyY2hpdmUgPGZvbnQgc2l6ZT0tMT4oMTU1TWIpPC9mb250PjwvYT4gCgo8aDM+TW9yZSBpbmZvcm1hdGlvbjwvaDM+ClZpc2l0IDxhIGhyZWY9Imh0dHA6Ly9iZWVoaXZlLmFwYWNoZS5vcmcvIj5iZWVoaXZlLmFwYWNoZS5vcmc8L2E+IGZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHRoZSBhcGFjaGUgYmVlaGl2ZQpwcm9qZWN0LiBWaXNpdCA8YSBocmVmPSIvd2VidG9vbHMvIj53d3cuZWNsaXBzZS5vcmcvd2VidG9vbHM8L2E+IGZvciBpbmZvcm1hdGlvbiBhYm91dCB0aGUgd2ViIHRvb2xzCnByb2plY3QuIEFkZGl0aW9uYWwgcmVzb3VyY2VzIGFyZSBhdmFpbGFibGUgYXQgPGEgaHJlZj0iaHR0cDovL2RldjJkZXYuYmVhLmNvbS9vcGVuc291cmNlIj5kZXYyZGV2LmJlYS5jb20vb3BlbnNvdXJjZTwvYT4gYW5kCjxhIGhyZWY9Imh0dHA6Ly9kZXYyZGV2LmJlYS5jb20vZWNsaXBzZSI+ZGV2MmRldi5iZWEuY29tL2VjbGlwc2U8L2E+IGZvciBhcnRpY2xlcywgYmxvZ3MgYW5kIG90aGVyIHJlbGF0ZWQgbWF0ZXJpYWwuCgo8aDI+U3RlbGxhdGlvbjwvaDI+CiAgICAgIFN0ZWxsYXRpb24gaXMgYSBzb2Z0d2FyZSBjb25maWd1cmF0aW9uIG1hbmFnZW1lbnQgc3lzdGVtIGRlc2lnbmVkIHRvIGJlIAogICAgICBhbiBleHRlbnNpYmxlIHBsYXRmb3JtIGZvciBidWlsZGluZyBzeXN0ZW1zIGJhc2VkIG9uIHRoZSBpbnRlZ3JhdGlvbiBvZiAKICAgICAgYWR2YW5jZWQgb3IgZXhwZXJpbWVudGFsIFNDTSB0ZWNobmlxdWVzIHdpdGggdGhlIEVjbGlwc2UgZGV2ZWxvcG1lbnQgZW52aXJvbm1lbnQuIAogICAgICBUaGUgU3RlbGxhdGlvbiBwcm9qZWN0IHdpbGwgYmUgdXNpbmcgdGhpcyBzeXN0ZW0gdG8gaW50ZWdyYXRlIHN1cHBvcnQgZm9yIAogICAgICBmaW5lLWdyYWluZWQgc29mdHdhcmUgYXJ0aWZhY3RzIGludG8gdGhlIEVjbGlwc2UgZW52aXJvbm1lbnQsIHdpdGggcGFydGljdWxhciAKICAgICAgZm9jdXMgb24gZHluYW1pYyBwcm9ncmFtIG9yZ2FuaXphdGlvbiwgYW5kIGludGVyLXByb2dyYW0gY29vcmRpbmF0aW9uLjxwPlRoZSBTdGVsbGF0aW9uIHdlYnNpdGUsIG5ld3Nncm91cCwgbWFpbGluZyBsaXN0LCBzb3VyY2UgY29kZSwgYW5kCiAgICAgIGxhdGVzdCBkb3dubG9hZCBhcmUgYXZhaWxhYmxlIGluIGEgPGEgaHJlZj0iaHR0cDovL2FyY2hpdmUuZWNsaXBzZS5vcmcvdGVjaG5vbG9neS9hcmNoaXZlcy9zdGVsbGF0aW9uLXByb2plY3QudGFyLmd6Ij5jb21wcmVzc2VkCiAgICAgIHRhciBhcmNoaXZlIDxmb250IHNpemU9LTE+KDExME1iKTwvZm9udD48L2E+LgogCjxoMj48YSBocmVmPSIvd2VidG9vbHMiIHRhcmdldD0iX3RvcCI+V1NWVCAoV2ViIFNlcnZpY2UgVmFsaWRhdGlvbiAKICAgICAgVG9vbHMpPC9hPjwvaDI+ClRoZSBtaXNzaW9uIG9mIHRoZSBwcm9qZWN0IGlzIHRvIHByb3ZpZGUgYSBzZXQgb2Ygd2ViIHNlcnZpY2UgdmFsaWRhdGlvbgp0b29scyB0aGF0IGNhbiBiZSB1c2VkIGR1cmluZyB0aGUgZGV2ZWxvcG1lbnQsIGRlcGxveW1lbnQsIHRlc3RpbmcgYW5kCmRlYnVnZ2luZyBvZiB3ZWIgc2VydmljZSBhcHBsaWNhdGlvbnMuLi4gVGhpcyBwcm9qZWN0IGhhcyBtb3ZlZCBmcm9tIHRoZQogICAgICBUZWNobm9sb2d5IFBNQyB0byB0aGUgPGEgaHJlZj0iL3dlYnRvb2xzIj5XZWIgVG9vbHMKICAgICAgUGxhdGZvcm08L2E+IHByb2plY3QuIChGb3IgYXJjaGl2YWwgcmVhc29ucywgdGhlIGxhc3QgaW5kZXBlbmRlbnQgcmVsZWFzZQogICAgICBvZiBXU1ZUIGlzIDxhIGhyZWY9Ii4uL3dzdnQvaW5kZXguaHRtbCIgdGFyZ2V0PSJfdG9wIj5zdGlsbCBhdmFpbGFibGU8L2E+LikKCjxoMj48YSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2VtZiIgdGFyZ2V0PSJfdG9wIj5YU0Q8L2E+PC9oMj4KICAgICAgVGhlIFhTRCBJbmZvc2V0IE1vZGVsIGlzIGEgcmVmZXJlbmNlIGxpYnJhcnkgZm9yIHVzZSB3aXRoIGFueSBjb2RlIHRoYXQgCiAgICAgIGV4YW1pbmVzLCBjcmVhdGVzIG9yIG1vZGlmaWVzIFhNTCBTY2hlbWFzIChzdGFuZGFsb25lIG9yIGFzIHBhcnQgb2Ygb3RoZXIgCiAgICAgIGFydGlmYWN0cywgc3VjaCBhcyBYRm9ybXMgb3IgV1NETCBkb2N1bWVudHMpLi4uIFRoaXMgcHJvamVjdCBoYXMgbW92ZWQKICAgICAgZnJvbSB0aGUgVGVjaG5vbG9neSBQTUMgdG8gdGhlIDxhIGhyZWY9Ii9lbWYiPkVjbGlwc2UgTW9kZWxpbmcgRnJhbWV3b3JrPC9hPgogICAgICBwcm9qZWN0LjwvdGQ+CiAgICAgIDxiciAvPjxiciAvPgogPC9kaXY+CiA8L2Rpdj4KPD9waHAKCSMgUGFzdGUgeW91ciBIVE1MIGNvbnRlbnQgYmV0d2VlbiB0aGUgRU9IVE1MIG1hcmtlcnMhCQoJJGh0bWwgPSBvYl9nZXRfY29udGVudHMoKTsKCW9iX2VuZF9jbGVhbigpOwoKCSMgR2VuZXJhdGUgdGhlIHdlYiBwYWdlCgkkQXBwLT5nZW5lcmF0ZVBhZ2UoJHRoZW1lLCAkTWVudSwgJE5hdiwgJHBhZ2VBdXRob3IsICRwYWdlS2V5d29yZHMsICRwYWdlVGl0bGUsICRodG1sKTsKPz4K