PD9waHAgIAkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCXJlcXVpcmVfb25jZSgkX1NFUlZFUlsnRE9DVU1FTlRfUk9PVCddIC4gIi9lY2xpcHNlLm9yZy1jb21tb24vc3lzdGVtL2FwcC5jbGFzcy5waHAiKTsJcmVxdWlyZV9vbmNlKCRfU0VSVkVSWydET0NVTUVOVF9ST09UJ10gLiAiL2VjbGlwc2Uub3JnLWNvbW1vbi9zeXN0ZW0vbmF2LmNsYXNzLnBocCIpOyAJcmVxdWlyZV9vbmNlKCRfU0VSVkVSWydET0NVTUVOVF9ST09UJ10gLiAiL2VjbGlwc2Uub3JnLWNvbW1vbi9zeXN0ZW0vbWVudS5jbGFzcy5waHAiKTsgCSRBcHAgCT0gbmV3IEFwcCgpOwkkTmF2CT0gbmV3IE5hdigpOwkkTWVudSAJPSBuZXcgTWVudSgpOwkJaW5jbHVkZSgiX3Byb2plY3RDb21tb24ucGhwIik7ICAgICMgQWxsIG9uIHRoZSBzYW1lIGxpbmUgdG8gdW5jbHV0dGVyIHRoZSB1c2VyJ3MgZGVza3RvcCcKCQoJIwoJIyBCZWdpbjogcGFnZS1zcGVjaWZpYyBzZXR0aW5ncy4gIENoYW5nZSB0aGVzZS4gCgkkcGFnZVRpdGxlIAkJPSAiRVBJQyBDb21tdW5pdHkgUG9ydGFsIjsKCSRwYWdlS2V5d29yZHMJPSAiRWNsaXBzZSBGb3VuZGF0aW9uLCBFUElDLCBjb21tdW5pdHksIHJjcCwgcHJlc3MgcmVsZWFzZSwgZWNsaXBzZWNvbiI7CgkkcGFnZUF1dGhvcgkJPSAiSWFuIFNrZXJyZXR0IjsKCQoJIyBBZGQgcGFnZS1zcGVjaWZpYyBOYXYgYmFycyBoZXJlCgkjIEZvcm1hdCBpcyBMaW5rIHRleHQsIGxpbmsgVVJMIChjYW4gYmUgaHR0cDovL3d3dy5zb21lb3RoZXJzaXRlLmNvbS8pLCB0YXJnZXQgKF9zZWxmLCBfYmxhbmspCgkjICROYXYtPmFkZEN1c3RvbU5hdigiTXkgTGluayIsICJteXBhZ2UucGhwIiwgIl9zZWxmIik7CgkjICROYXYtPmFkZEN1c3RvbU5hdigiR29vZ2xlIiwgImh0dHA6Ly93d3cuZ29vZ2xlLmNvbS8iLCAiX2JsYW5rIik7CgoJIyBFbmQ6IHBhZ2Utc3BlY2lmaWMgc2V0dGluZ3MKCSMKCQoJIyBQYXN0ZSB5b3VyIEhUTUwgY29udGVudCBiZXR3ZWVuIHRoZSBFT0hUTUwgbWFya2VycyEJCgkkaHRtbCA9IDw8PEVPSFRNTAo8ZGl2IGlkPSJtYWluY29udGVudCI+Cgk8ZGl2IGlkPSJtaWRjb2x1bW4iPgoJCTxoMT4kcGFnZVRpdGxlPC9oMT4KCQk8aDI+UHJlc3MgUmVsZWFzZTwvaDI+CgkJPGgyIEFMSUdOPSJDRU5URVIiPjxzdHJvbmc+RWNsaXBzZSBGb3VuZGF0aW9uIExhdW5jaGVzIENvbW11bml0eSBQb3J0YWwgdG8gUHJvbW90ZSB0aGUgRWNsaXBzZSBFY29zeXN0ZW08L3N0cm9uZz48L2gyPgoJCTx1bD4KCQk8bGk+R2VudWl0ZWMsIElubm9vcHJhY3QgYW5kIEluc3RhbnRpYXRpb25zIENvbnRyaWJ1dGlvbiBCZWNvbWVzIENvcmUgUmVwb3NpdG9yeSBmb3IgRWNsaXBzZS1iYXNlZCBPZmZlcmluZ3M8L2xpPgoJCTwvdWw+CgkJPHA+PHN0cm9uZz5KQVZBT05FIChCT09USCAxMTM4KSwgU0FOIEZSQU5DSVNDTywgQ2FsaWYuLCBNYXkgMTUsIDIwMDY8L3N0cm9uZz4gliBUaGUgRWNsaXBzZSBGb3VuZGF0aW9uIHRvZGF5IAoJCWxhdW5jaGVkIGEgY29tbXVuaXR5IHBvcnRhbCB0byBwcm9tb3RlIHRoZSBhZG9wdGlvbiBvZiBFY2xpcHNlLWJhc2VkIGNvbW1lcmNpYWwgcHJvZHVjdHMsIGNvbXBsZW1lbnRhcnkgb3BlbiAKCQlzb3VyY2UgcHJvamVjdHMgYW5kIEVjbGlwc2UtcmVsYXRlZCB0cmFpbmluZywgc3VwcG9ydCBhbmQgc2VydmljZXMuIFRoZSBwb3J0YWwsIEVjbGlwc2UgUGx1Zy1pbiBDZW50cmFsICgKCQlFUElDKSwgbWFrZXMgaXQgZWFzaWVyIHRoYW4gZXZlciBmb3IgZGV2ZWxvcGVycywgc29mdHdhcmUgdmVuZG9ycyBhbmQgZW50ZXJwcmlzZXMgdG8gZmluZCBoaWdoIHF1YWxpdHkgb3BlbiAKCQlzb3VyY2UgYW5kIGNvbW1lcmNpYWwgcGx1Zy1pbnMsIHRvb2xzIGFuZCBhZGQtb24gc2VydmljZXMgdG8gZW5oYW5jZSB0aGVpciBFY2xpcHNlIGRldmVsb3BtZW50LiAgIFRoZSBFUElDIAoJCXBvcnRhbCB3aWxsIGJlIGEga2V5IHBhcnQgb2YgdGhlIEVjbGlwc2UgRm91bmRhdGlvbpJzIGVmZm9ydCB0byBwcm9tb3RlIGFuZCBncm93IHRoZSBvdmVyYWxsIEVjbGlwc2UgCgkJZWNvc3lzdGVtLiA8L3A+CgoJCTxwPkVQSUMgd2FzIGluaXRpYWxseSBjcmVhdGVkIGluIDIwMDQgYW5kIG9wZXJhdGVkIGJ5IGFuIGFsbGlhbmNlIG9mIHRocmVlIEVjbGlwc2UgRm91bmRhdGlvbiBtZW1iZXIgCgkJY29tcGFuaWVzIEdlbnVpdGVjLCBJbm5vb3ByYWN0IGFuZCBJbnN0YW50aWF0aW9ucy4gIFRoZSB0aHJlZSBjb21wYW5pZXMgaGF2ZSBjb250cmlidXRlZCB0aGUgZXhpc3RpbmcgRVBJQyAKCQlzaXRlIHRvIHRoZSBFY2xpcHNlIEZvdW5kYXRpb24gYW5kIHdpbGwgcmVtYWluIGFjdGl2ZWx5IGludm9sdmVkIGluIHRoZSBkZXZlbG9wbWVudCBhbmQgZXZvbHV0aW9uIG9mIHRoZSBzaXRlLgoJCTwvcD4KCgkJPHA+VG9kYXksIHRoZSBFY2xpcHNlIGVjb3N5c3RlbSBpcyBvbmUgb2YgdGhlIGxhcmdlc3QgY29tbXVuaXRpZXMgb2YgY29tbWVyY2lhbCB2ZW5kb3JzLCBvcGVuIHNvdXJjZSBwcm9qZWN0cywgCgkJYW5kIHNlcnZpY2UgYW5kIGVkdWNhdGlvbiB0aGF0IGhhcyBkZXZlbG9wZWQgYXJvdW5kIGEgY29tbW9uIGludGVncmF0aW9uIHBsYXRmb3JtLiAgIFRoZXJlIGFyZSBvdmVyIDEwMDAgCgkJZGlmZmVyZW50IHBsdWctaW5zLCA5NTAgRWNsaXBzZSByZWxhdGVkIHByb2plY3RzIGxpc3RlZCBvbiBTb3VyY2VGb3JnZSBhbmQgYW4gZXN0aW1hdGVkIDIwMCBpbmRlcGVuZGVudCAKCQlzb2Z0d2FyZSB2ZW5kb3JzIChJU1ZzKSB0aGF0IGFyZSB1c2luZyBFY2xpcHNlIGFzIHRoZSBwbGF0Zm9ybSBmb3IgdGhlaXIgY29tbWVyY2lhbCBwcm9kdWN0cy4gICBUaGUgbmV3IAoJCXBvcnRhbCBvZmZlcnMgYSBjZW50cmFsIHJlcG9zaXRvcnkgZm9yIHRoaXMgY29tbXVuaXR5IHRvIHByb21vdGUgdGhlaXIgRWNsaXBzZS1iYXNlZCBwcm9kdWN0cy4gICBJdCB3aWxsIAoJCWFsc28gbWFrZSBpdCBlYXNpZXIgZm9yIHBvdGVudGlhbCB1c2VycyB0byBmaW5kIEVjbGlwc2UtYmFzZWQgcHJvZHVjdHMuPC9wPgogCgkJPHA+k1RoZSBFY2xpcHNlIGVjb3N5c3RlbSBoYXMgZ3JlYXRseSBtYXR1cmVkIG92ZXIgdGhlIGxhc3QgZmV3IHllYXJzLCBldmlkZW5jZWQgYnkgdGhlIGdyb3dpbmcgbnVtYmVyIG9mIAoJCXBsdWctaW5zIGFuZCB0b29scyBhdmFpbGFibGUslCBzYWlkIE1pa2UgTWlsaW5rb3ZpY2gsIGV4ZWN1dGl2ZSBkaXJlY3RvciBvZiB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uLiCTV2UgCgkJYmVsaWV2ZSB0aGF0IHRvIHJlYWxpemUgdGhlIGZ1bGwgcG90ZW50aWFsIG9mIHRoZSBlY29zeXN0ZW0sIGl0IGlzIGltcG9ydGFudCB0aGF0IHdlIG1ha2UgaXQgbW9yZSBhY2Nlc3NpYmxlIAoJCXRvIHRoZSBjb21tdW5pdHkuICAgT3VyIGdvYWwgd2l0aCBFUElDIGlzIHRvIGhhdmUgaXQgYmUgdGhlIHBsYWNlIGZvciBmaW5kaW5nIEVjbGlwc2UgcmVsYXRlZCBwcm9kdWN0cyBhbmQgCgkJc2VydmljZXMulDwvcD4KCgkJPHA+lE9uZSBvZiBJbm5vb3ByYWN0knMgbWlzc2lvbnMgaGFzIGJlZW4gdG8gZmFjaWxpdGF0ZSB0aGUgYWRvcHRpb24gb2YgRWNsaXBzZSBhbmQgRWNsaXBzZSBwbHVnaW5zIGJ5IHRoZSAKCQlkZXZlbG9wbWVudCBjb21tdW5pdHkslCBzYWlkIEpvY2hlbiBLcmF1c2UsIENFTyBvZiBJbm5vb3ByYWN0LiAgk1RoZSBFUGlDIGFsbGlhbmNlIHdhcyBmb3JtZWQgd2l0aCB0aGlzIGdvYWwgCgkJaW4gbWluZCBhbmQgaGFzIGJlZW4gc3VjY2Vzc2Z1bCBpbiBwcm92aWRpbmcgYSByZWxpYWJsZSBzb3VyY2Ugb2YgaW5mb3JtYXRpb24gb24gdGhlIGVjb3N5c3RlbSBvZiBwbHVnaW5zLiAKCQlBIG1lcmdlciBiZXR3ZWVuIEVQaUMgYW5kIEVjbGlwc2Uub3JnIHdpbGwgYWNjZWxlcmF0ZSB0aGUgZGV2ZWxvcG1lbnQgY29tbXVuaXR5knMgYWNjZXNzaWJpbGl0eSBvZiB0aGUgCgkJRWNsaXBzZSBlY29zeXN0ZW0uPC9wPgoKCQk8cD6TR2VudWl0ZWMgaXMgcGxlYXNlZCB0byBoYXZlIGJlZW4gcGFydCBvZiB0aGUgb3JpZ2luYWwgbGF1bmNoIGZvciBFUElDIGFuZCBhcmUgY29tbWl0dGVkIHRvIGNvbnRpbnVlZCAKCQljb250cmlidXRpb24gZm9yIHRoZSBuZXcgcG9ydGFsLJQgc2FpZCBNYWhlciBNYXNyaSwgUHJlc2lkZW50IG9mIEdlbnVpdGVjIExMQy4gIJNJdCB3YXMgY2xlYXIgdG8gdXMgdGhhdCB0aGUgCgkJYmVzdCBpbnRlcmVzdCBvZiB0aGUgRWNsaXBzZSBlY29zeXN0ZW0gaXMgdG8gZXhwYW5kIGNvbW11bml0eSBjb250cmlidXRpb24gdG93YXJkIG1ha2luZyB0aGUgbmV3IHBvcnRhbCB0aGUgCgkJcXVpbnRlc3NlbnRpYWwgc291cmNlIGZvciBFY2xpcHNlIGluZm9ybWF0aW9uLpQ8L3A+CgoJCTxwPpNJbnN0YW50aWF0aW9ucyBpcyB2ZXJ5IHBsZWFzZWQgdG8gcGFydGljaXBhdGUgaW4gdGhpcyBpbXBvcnRhbnQgZG9uYXRpb24gdG8gdGhlIEVjbGlwc2UgRm91bmRhdGlvbi4gCgkJVGhlIEVQSUMgcG9ydGFsIGlzIGEga2V5IHRvb2wgZm9yIHVzIGFuZCBvdXIgY3VzdG9tZXJzIGFuZCB3ZSBsb29rIGZvcndhcmQgdG8gdGhlIEZvdW5kYXRpb24gdGFraW5nIGl0IHRvIAoJCXRoZSBuZXh0IGxldmVsIGZvciB0aGUgZW50aXJlIEVjbGlwc2UgRWNvc3lzdGVtIiwgc2FpZCBNaWtlIFRheWxvciwgUHJlc2lkZW50L0NFTyBvZiBJbnN0YW50aWF0aW9ucy48L3A+CgkKCQk8cD5UaGUgRVBJQyBjb21tdW5pdHkgcG9ydGFsIGNhbiBiZSBmb3VuZCBhdCA8YSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2VwbHVnaW5jZW50cmFsLmNvbS8iPnd3dy5lY2xpcHNlcGx1Z2luY2VudHJhbC5jb208L2E+PC9wPgoJCTxwPjxzdHJvbmc+QWJvdXQgdGhlIEVjbGlwc2UgRm91bmRhdGlvbjwvc3Ryb25nPjxiciAvPgoJCUVjbGlwc2UgaXMgYW4gb3BlbiBzb3VyY2UgY29tbXVuaXR5IHdob3NlIHByb2plY3RzIGFyZSBmb2N1c2VkIG9uIHByb3ZpZGluZyBhbiBleHRlbnNpYmxlIGRldmVsb3BtZW50IHBsYXRmb3JtIGFuZCBhcHBsaWNhdGlvbiBmcmFtZXdvcmtzIGZvciBidWlsZGluZyBzb2Z0d2FyZS4gRWNsaXBzZSBwcm92aWRlcyBleHRlbnNpYmxlIHRvb2xzIGFuZCBmcmFtZXdvcmtzIHRoYXQgc3BhbiB0aGUgc29mdHdhcmUgZGV2ZWxvcG1lbnQgbGlmZWN5Y2xlLCBpbmNsdWRpbmcgc3VwcG9ydCBmb3IgbW9kZWxpbmcsIGxhbmd1YWdlIGRldmVsb3BtZW50IGVudmlyb25tZW50cyBmb3IgSmF2YSwgQy9DKysgYW5kIG90aGVycywgdGVzdGluZyBhbmQgcGVyZm9ybWFuY2UsIGJ1c2luZXNzIGludGVsbGlnZW5jZSwgcmljaCBjbGllbnQgYXBwbGljYXRpb25zIGFuZCBlbWJlZGRlZCBkZXZlbG9wbWVudC4gQSBsYXJnZSwgdmlicmFudCBlY29zeXN0ZW0gb2YgbWFqb3IgdGVjaG5vbG9neSB2ZW5kb3JzLCBpbm5vdmF0aXZlIHN0YXJ0LXVwcywgdW5pdmVyc2l0aWVzIGFuZCByZXNlYXJjaCBpbnN0aXR1dGlvbnMgYW5kIGluZGl2aWR1YWxzIGV4dGVuZCwgY29tcGxlbWVudCBhbmQgc3VwcG9ydCB0aGUgRWNsaXBzZSBQbGF0Zm9ybS48L3A+CgkJPHA+VGhlIEVjbGlwc2UgRm91bmRhdGlvbiBpcyBhIG5vdC1mb3ItcHJvZml0LCBtZW1iZXIgc3VwcG9ydGVkIGNvcnBvcmF0aW9uIHRoYXQgaG9zdHMgdGhlIEVjbGlwc2UgcHJvamVjdHMuIEZ1bGwgZGV0YWlscyBvZiBFY2xpcHNlIGFuZCB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uIGFyZSBhdmFpbGFibGUgYXQgPGEgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZyI+d3d3LmVjbGlwc2Uub3JnPC9hPi48L3A+CgkJPGJyIC8+CgkJPGNlbnRlcj4jICMgIzwvY2VudGVyPiAKCQk8YnIgLz4KCQlBbGwgY29tcGFueS9wcm9kdWN0IG5hbWVzIGFuZCBzZXJ2aWNlIG1hcmtzIG1heSBiZSB0cmFkZW1hcmtzIG9yIHJlZ2lzdGVyZWQgdHJhZGVtYXJrcyBvZiB0aGVpciByZXNwZWN0aXZlIGNvbXBhbmllcy4KCQk8YnIgLz48YnIgLz48c3Ryb25nPlByZXNzIENvbnRhY3Q8L3N0cm9uZz48YnI+CQoJCUNoYW50YWwgWWFuZy9MYXVyYSBBY2tlcm1hbjxicj4KCQlTY2h3YXJ0eiBDb21tdW5pY2F0aW9uczxicj4KCQk3ODEtNjg0LTA3NzA8YnI+CgkJZWNsaXBzZUBzY2h3YXJ0ei1wci5jb20gPGJyPgoJCTxicj4KCQk8YnI+CgoJCTwvcD4KCQkJCQkJCQoJPC9kaXY+CgoJCQo8L2Rpdj4KCgpFT0hUTUw7CgoKCSMgR2VuZXJhdGUgdGhlIHdlYiBwYWdlCgkkQXBwLT5nZW5lcmF0ZVBhZ2UoJHRoZW1lLCAkTWVudSwgJE5hdiwgJHBhZ2VBdXRob3IsICRwYWdlS2V5d29yZHMsICRwYWdlVGl0bGUsICRodG1sKTsKPz4KCg==