PD9waHAKCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQlyZXF1aXJlX29uY2UoJF9TRVJWRVJbJ0RPQ1VNRU5UX1JPT1QnXSAuICIvZWNsaXBzZS5vcmctY29tbW9uL3N5c3RlbS9hcHAuY2xhc3MucGhwIik7CXJlcXVpcmVfb25jZSgkX1NFUlZFUlsnRE9DVU1FTlRfUk9PVCddIC4gIi9lY2xpcHNlLm9yZy1jb21tb24vc3lzdGVtL25hdi5jbGFzcy5waHAiKTsgCXJlcXVpcmVfb25jZSgkX1NFUlZFUlsnRE9DVU1FTlRfUk9PVCddIC4gIi9lY2xpcHNlLm9yZy1jb21tb24vc3lzdGVtL21lbnUuY2xhc3MucGhwIik7IAkkQXBwIAk9IG5ldyBBcHAoKTsJJE5hdgk9IG5ldyBOYXYoKTsJJE1lbnUgCT0gbmV3IE1lbnUoKTsJCWluY2x1ZGUoIl9wcm9qZWN0Q29tbW9uLnBocCIpOyAgICAjIEFsbCBvbiB0aGUgc2FtZSBsaW5lIHRvIHVuY2x1dHRlciB0aGUgdXNlcidzIGRlc2t0b3AnCgoJCgkjCgkjIEJlZ2luOiBwYWdlLXNwZWNpZmljIHNldHRpbmdzLiAgQ2hhbmdlIHRoZXNlLiAKCSRwYWdlVGl0bGUgCQk9ICJOZXcgT3BlbiBTb3VyY2UgSW5pdGlhdGl2ZSBmb3IgQXV0b21vdGl2ZSBTb2Z0d2FyZSBEZXZlbG9wbWVudCBUb29scyI7CgkkcGFnZUtleXdvcmRzCT0gImVsaXBzZSwgYXV0b21vdGl2ZSwgYXV0b3NhciI7CgkkcGFnZUF1dGhvcgkJPSAiSWFuIFNrZXJyZXR0IjsKCQoJIyBBZGQgcGFnZS1zcGVjaWZpYyBOYXYgYmFycyBoZXJlCgkjIEZvcm1hdCBpcyBMaW5rIHRleHQsIGxpbmsgVVJMIChjYW4gYmUgaHR0cDovL3d3dy5zb21lb3RoZXJzaXRlLmNvbS8pLCB0YXJnZXQgKF9zZWxmLCBfYmxhbmspCgkjICROYXYtPmFkZEN1c3RvbU5hdigiTXkgTGluayIsICJteXBhZ2UucGhwIiwgIl9zZWxmIik7CgkjICROYXYtPmFkZEN1c3RvbU5hdigiR29vZ2xlIiwgImh0dHA6Ly93d3cuZ29vZ2xlLmNvbS8iLCAiX2JsYW5rIik7CgoJIyBFbmQ6IHBhZ2Utc3BlY2lmaWMgc2V0dGluZ3MKCSMKCQoJIyBQYXN0ZSB5b3VyIEhUTUwgY29udGVudCBiZXR3ZWVuIHRoZSBFT0hUTUwgbWFya2VycyEJCgkkaHRtbCA9IDw8PEVPSFRNTAoJPHN0eWxlPgoJCS5wYWRkZWRsaXN0IGxpIHsJcGFkZGluZy1ib3R0b206N3B4Owl9Cgk8L3N0eWxlPgoJCjxkaXYgaWQ9Im1haW5jb250ZW50Ij4KCTxkaXYgaWQ9Im1pZGNvbHVtbiI+CgkKCQk8aDE+JHBhZ2VUaXRsZTwvaDE+CgkJCgkJPGJyPgogIDxwPjxzdHJvbmc+T3R0YXdhLCBDYW5hZGEgLSBKdWx5IDIwLCAyMDExPC9zdHJvbmc+IC0gVGhlIEVjbGlwc2UgRm91bmRhdGlvbiBpcyBwbGVhc2VkIHRvIGFubm91bmNlIHRoZSBjcmVhdGlvbiBvZiBhIG5ldyBvcGVuIHNvdXJjZSBpbml0aWF0aXZlIHRvIGRlZmluZSBhbmQgaW1wbGVtZW50IGEgc3RhbmRhcmQgcGxhdGZvcm0gCiAgZm9yIHRoZSBzb2Z0d2FyZSBkZXZlbG9wbWVudCB0b29scyB1c2VkIGluIHRoZSBhdXRvbW90aXZlIGluZHVzdHJ5LiAgIEdlcm1hbiBjYXJtYWtlciBCTVcgR3JvdXAsIHRoZSBhdXRvbW90aXZlIHN1cHBsaWVycyBSb2JlcnQgQm9zY2ggR21iSCBhbmQgQ29udGluZW50YWwgQUcsIGFuZCB0aGUgRWNsaXBzZSBTdHJhdGVnaWMgCiAgTWVtYmVyIGl0ZW1pcyBBRyBmcm9tIEz8bmVuLCBHZXJtYW55IGFyZSBmb3VuZGluZyBtZW1iZXJzIG9mIHRoZSBpbml0aWF0aXZlIHRoYXQgd2lsbCBvcGVyYXRlIGFzIGFuIEVjbGlwc2UgSW5kdXN0cnkgV29ya2luZyBHcm91cC4gICBUaGUgbmV3IDxhIGhyZWY9Imh0dHA6Ly93aWtpLmVjbGlwc2Uub3JnL0F1dG9fSVdHIj5FY2xpcHNlIEF1dG9tb3RpdmUgSW5kdXN0cnkgV29ya2luZyBHcm91cDwvYT4gd2lsbCAKICBiZSBvcGVuIHRvIGFueSBvcmdhbml6YXRpb25zIHRoYXQgd2FudCB0byBwYXJ0aWNpcGF0ZSBpbiB0aGUgZ29hbCBvZiBlc3RhYmxpc2hpbmcgYSBzdGFuZGFyZCB0b29scyBwbGF0Zm9ybSB0aGF0IHdpbGwgYmUgdXNlZCB0aHJvdWdob3V0IHRoZSBhdXRvbW90aXZlIHN1cHBseSBjaGFpbi48L3A+CgogIDxwPklubm92YXRpb24gaW4gdGhlIGF1dG9tb3RpdmUgaW5kdXN0cnkgaXMgbW9zdGx5IGFjaGlldmVkIGJ5IGVsZWN0cm9uaWNzIGFuZCBzb2Z0d2FyZSBmdW5jdGlvbnMuICBUaGUgc3lzdGVtIGF1dG9tb2JpbGUgaXMgYmVjb21pbmcgaW5jcmVhc2luZ2x5IGNvbXBsZXgsIGFuIG9wZW4gZGV2ZWxvcGVyIHRvb2wgd29ya2JlbmNoIAogIHRoYXQgZXh0ZW5kcyB0aHJvdWdob3V0IHRoZSBzdXBwbHktY2hhaW4gaXMgYmVjb21pbmcgYSBtdXN0IGZvciB0aGUgaW5kdXN0cnkuICBJbXByb3ZlbWVudHMgYW5kIGlubm92YXRpb25zIHRvIHRoZXNlIHNvZnR3YXJlIGRldmVsb3BtZW50IHRvb2xzIGFyZSByZXF1aXJlZCB0byBhY2NlbGVyYXRlIHByb2R1Y3QgCiAgZGV2ZWxvcG1lbnQsIGNyZWF0ZSBoaWdoIHF1YWxpdHkgc29mdHdhcmUgZmVhdHVyZXMgYW5kIGltcHJvdmUgaW50ZWdyYXRpb24gYWNyb3NzIHRoZSBhdXRvbW90aXZlIHN1cHBseSBjaGFpbi4gIDwvcD4KCiAgPHA+k0JNVyB1c2VzIHN0YW5kYXJkcyBzdWNoIGFzIEFVVE9TQVIsIEZsZXhyYXkgb3IgR2VuaXZpIGluIHRoZSBkZXZlbG9wbWVudCBvZiBhdXRvbW90aXZlIHNvZnR3YXJlLiBJdCBpcyBhIG5lY2Vzc2FyeSBjb25kaXRpb24gZm9yIEJNVywgdGhhdCB0aGUgdG9vbCBjaGFpbiBzdXBwb3J0cyB0aGVzZSBzdGFuZGFyZHMuIFdlIAogIGJlbGlldmUgdGhhdCB0b29scyBiYXNlZCBvbiBFY2xpcHNlIGFyZSBhbiBlZmZpY2llbnQgd2F5IHRvIHJlZHVjZSBnYXBzIGluIHRoZSB0b29sIGNoYWluLiBJdCBjYW4gYmUgdmVyeSBoZWxwZnVsIGlmIEVjbGlwc2UtYmFzZWQgdG9vbHMgY2FuIG5vdCBvbmx5IGJlIHVzZWQgYXMgYSBzdGFuZC1hbG9uZSB0b29sIGJ1dCBhbHNvIAogIGFzIGludGVncmF0ZWQgY29tcG9uZW50cyBpbiBhIGxhcmdlciBlbnZpcm9ubWVudC4gVGhlIGludGVyb3BlcmFiaWxpdHkgYmV0d2VlbiB0aGUgZGlmZmVyZW50IEVjbGlwc2UgcGx1Zy1pbnMgZnJvbSB0b29sIHZlbmRvcnMgY2FuIGFjY2VsZXJhdGUgdGhlIGRldmVsb3BtZW50IHByb2Nlc3MslCAKk0VjbGlwc2UgaXMgYSBkZS1mYWN0byBzdGFuZGFyZCBpbiB0aGUgZmllbGQgb2YgZGV2ZWxvcGluZyBzb2Z0d2FyZSBkZXZlbG9wbWVudCB0b29scyAoZm9yIGV4YW1wbGUgQVJUT1ApIGFuZCBhcyBpbnRlZ3JhdGVkICBkZXZlbG9wbWVudCBlbnZpcm9ubWVudCBmb3IgcHJvZ3JhbW1pbmcgYXV0b21vdGl2ZSBzb2Z0d2FyZS4gIApUaGVyZWZvcmUsIGEgdW5pZmllZCBFY2xpcHNlIHBsYXRmb3JtIGlzIHRvIGJlIGFncmVlZCBvbiBieSBhbGwgcGFydGljaXBhbnRzIGluIHRoZSBFQUlXRy4gRm9yIHRoaXMgcmVhc29uLCB0aGUgZnV0dXJlIHBhcnRpY2lwYXRpb24gb2YgdG9vbCBtYW51ZmFjdHVyZXJzIGluIHRoZSBFQUlXRyBpcyBhYnNvbHV0ZWx5IG5lY2Vzc2FyeS4gCkEgc2luZ2xlIHBsYXRmb3JtIGNhbiByZWR1Y2UgaW50ZXJuYWwgY29zdHMgYW5kIGFjY2VsZXJhdGUgY3Jvc3MtY29tcGFueSBkZXZlbG9wbWVudCBwcm9jZXNzZXMuIEJNVyB3aWxsIHVzZSB0aGUgRWNsaXBzZSBwbGF0Zm9ybSBkZXZlbG9wZWQgYnkgdGhlIFdvcmtpbmcgR3JvdXAgYXMgYSBzdHJhdGVnaWMgZGV2ZWxvcG1lbnQgCmVudmlyb25tZW50LpQgCjwvcD4KCjxwPpNDcmVhdGluZyBhIHN0YW5kYXJkIHBsYXRmb3JtIGZvciBhdXRvbW90aXZlIHRvb2xzIHdpbGwgaGVscCB1cyB0byBmYXN0ZXIgaW5ub3ZhdGUgd2l0aG91dCBjb21wcm9taXNpbmcgcXVhbGl0eSyUIGV4cGxhaW5zIEhhcmFsZCBNYWNrYW11bCwgU2VuaW9yIEV4cGVydCwgQ29ycG9yYXRlIFNlY3RvciBSZXNlYXJjaCBhbmQgCkFkdmFuY2UgRW5naW5lZXJpbmcsIFJvYmVydCBCb3NjaCBHbWJILiCTQ29sbGFib3JhdGluZyB3aXRoIGFuIG9wZW4gc291cmNlIGNvbW11bml0eSB3aWxsIGFsbG93IHVzIHRvIHNoYXJlIHRoZSBjb3N0cyBhbmQgYmVzdCBwcmFjdGljZXMgZm9yIGJ1aWxkaW5nIG5ldyB0b29scyB3aXRoIG90aGVyIGNvbXBhbmllcyBpbiB0aGUgCmF1dG9tb3RpdmUgaW5kdXN0cnkuIFdlIHNlZSB0aGlzIG9wZW4gaW5ub3ZhdGlvbiBhcyB0aGUgZnV0dXJlIGZvciBvdXIgc29mdHdhcmUgdG9vbHMgc3RyYXRlZ3kulDwvcD4KCjxwPpNXaGlsZSB3ZSBidW5kbGUgZm9yY2VzIHRvIGNyZWF0ZSB0aGUgcGxhdGZvcm0gdGhhdCB3ZSBuZWVkLCB3ZSBwcm92aWRlIGEgcGxhdGZvcm0gdG8gb3VyIHRvb2xzIHZlbmRvcnMgdGhhdCB0aGV5IGNhbiB1c2UgdG8gc2VhbWxlc3NseSBpbnRlZ3JhdGUgdGhlaXIgcHJvZHVjdHMgaW4gb3VyIHdvcmtiZW5jaC4gSW4gCmFkZGl0aW9uLCB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSBlbmFibGVzIHVzIHRvIG1vZGlmeSBhbmQgZXh0ZW5kIHRoZSBwbGF0Zm9ybSB0byBvdXIgbmVlZHMhlCBzYXlzIElnbmFjaW8gR2Fycm8sIEhlYWQgb2YgSVQgUExNIFN5c3RlbXMgYW5kIFNvZnR3YXJlIGF0IENvbnRpbmVudGFsIEF1dG9tb3RpdmUuPC9wPgoKPHA+VGhlIEF1dG9tb3RpdmUgSW5kdXN0cnkgV29ya2luZyBHcm91cCB3aWxsIG9wZXJhdGUgdW5kZXIgdGhlIEVjbGlwc2UgRm91bmRhdGlvbiwgYW4gb3BlbiBzb3VyY2UgRm91bmRhdGlvbiB0aGF0IHNwZWNpYWxpemVzIGluIHNvZnR3YXJlIGRldmVsb3BtZW50IHRvb2xzIGFuZCBydW50aW1lLiAgIEVjbGlwc2UgSW5kdXN0cnkgCldvcmtpbmcgR3JvdXBzIGFsbG93IG9yZ2FuaXphdGlvbnMgdG8gY29sbGFib3JhdGUgb24gdGhlIGRldmVsb3BtZW50IG9mIG5ldyB0ZWNobm9sb2d5IGlubm92YXRpb24uICBUaGUgcmVzdWx0cyBvZiB0aGUgd29ya2luZyBncm91cCB3aWxsIGJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIAooRVBMKSwgYSBjb21tZXJjaWFsIGZyaWVuZGx5IG9wZW4gc291cmNlIGxpY2Vuc2UuICA8L3A+CgoKCTxzdHJvbmc+QWJvdXQgdGhlIEVjbGlwc2UgRm91bmRhdGlvbjwvc3Ryb25nPgoJPHA+RWNsaXBzZSBpcyBhbiBvcGVuIHNvdXJjZSBjb21tdW5pdHksIHdob3NlIHByb2plY3RzIGFyZSBmb2N1c2VkIG9uIGJ1aWxkaW5nIGFuIG9wZW4gZGV2ZWxvcG1lbnQgcGxhdGZvcm0gY29tcHJpc2VkIG9mIGV4dGVuc2libGUgCglmcmFtZXdvcmtzLCB0b29scyBhbmQgcnVudGltZXMgZm9yIGJ1aWxkaW5nLCBkZXBsb3lpbmcgYW5kIG1hbmFnaW5nIHNvZnR3YXJlIGFjcm9zcyB0aGUgbGlmZWN5Y2xlLiBBIGxhcmdlLCB2aWJyYW50IGVjb3N5c3RlbSBvZiBtYWpvciAKCXRlY2hub2xvZ3kgdmVuZG9ycywgaW5ub3ZhdGl2ZSBzdGFydC11cHMsIHVuaXZlcnNpdGllcyBhbmQgcmVzZWFyY2ggaW5zdGl0dXRpb25zIGFuZCBpbmRpdmlkdWFscyBleHRlbmQsIGNvbXBsZW1lbnQgYW5kIHN1cHBvcnQgdGhlIAoJRWNsaXBzZSBQbGF0Zm9ybS48L3A+Cgk8cD5UaGUgRWNsaXBzZSBGb3VuZGF0aW9uIGlzIGEgbm90LWZvci1wcm9maXQsIG1lbWJlciBzdXBwb3J0ZWQgY29ycG9yYXRpb24gdGhhdCBob3N0cyB0aGUgRWNsaXBzZSBwcm9qZWN0cy4gRnVsbCBkZXRhaWxzIG9mIEVjbGlwc2UgCglhbmQgdGhlIEVjbGlwc2UgRm91bmRhdGlvbiBhcmUgYXZhaWxhYmxlIGF0IDxhIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmciPnd3dy5lY2xpcHNlLm9yZzwvYT4JPC9wPgogIAoKCTwvZGl2PgoKCTwhLS0gcmVtb3ZlIHRoZSBlbnRpcmUgPGRpdj4gdGFnIHRvIG9taXQgdGhlIHJpZ2h0IGNvbHVtbiEgIC0tPgoJPGRpdiBpZD0icmlnaHRjb2x1bW4iPgoJCTxkaXYgY2xhc3M9InNpZGVpdGVtIj4KCQkJPGg2PlJlbGF0ZWQgTGlua3M8L2g2PgoJCQk8dWw+CgkJCQk8bGk+PGEgaHJlZj0iaHR0cDovL3dpa2kuZWNsaXBzZS5vcmcvQXV0b19JV0ciPkF1dG9tb3RpdmUgSVdHPC9hPjwvbGk+CgkJCTwvdWw+CgkJPC9kaXY+Cgk8L2Rpdj4JCjwvZGl2PgoKCkVPSFRNTDsKCSRodG1sID0gbWJfY29udmVydF9lbmNvZGluZygkaHRtbCwgIkhUTUwtRU5USVRJRVMiLCAiSVNPLTg4NTktMSIpOwoJJHBhZ2VUaXRsZSA9IG1iX2NvbnZlcnRfZW5jb2RpbmcoJHBhZ2VUaXRsZSwgIkhUTUwtRU5USVRJRVMiLCAiSVNPLTg4NTktMSIpOwoJIyBHZW5lcmF0ZSB0aGUgd2ViIHBhZ2UKCSRBcHAtPmdlbmVyYXRlUGFnZSgkdGhlbWUsICRNZW51LCAkTmF2LCAkcGFnZUF1dGhvciwgJHBhZ2VLZXl3b3JkcywgJHBhZ2VUaXRsZSwgJGh0bWwpOwo/PgoK