ZGlmZiAtLWdpdCBhL0lOU1RBTEwgYi9JTlNUQUxMCmluZGV4IGViZjU0ZGUuLmYzNzg1ZmYgMTAwNjQ0Ci0tLSBhL0lOU1RBTEwKKysrIGIvSU5TVEFMTApAQCAtMSwzNTcgKzEgQEAKLVRoaXMgaXMgbXkgY29weSBvZiBzb21lIGluZm9ybWF0aW9uIEkgd3JvdGUgZm9yIG1vZF90Y2wgZm9yIEFwYWNoZSAyLjAgZnJvbTogV3JveCBQcmVzcy4gSVNCTiAxLTg2MTAwNy0yMi0xIEFwY2hlIDIuMC4gIElmIHlvdSB3YW50IGl0IHByZXR0eSBwcmludGVkIGdldCB0aGUgYm9vay4gKE1LTCkKLQotVGhpbmdzIHRoYXQgYXJlIGRpZmZlcmVudCBzaW5jZSB0aGlzIHdhcyB3cml0dGVuLgotCi0xLiBzdXBwb3J0cyBBcGFjaGUgMi4wLjQwCi0yLiBmaXJzdCByZWxlYXNlIG9mIG1vZF90Y2wgMS4wLCBJJ3ZlIGJlZW4gcnVubmluZyB0aGlzIGZvciBtb250aHMgc3RhYmxlIG5vIGVycm9ycyBpbiBlcnJvcl9sb2cuCi0gICBJIGRvbid0IHRoaW5rIGFsbCBvZiB0aGUgZnVuY3Rpb25hbGl0eSBpcyBjb21wbGV0ZSBidXQgaXQncyBkZWNlbnRseSBicm9hZC4gIFNvbWUgdGhpbmdzIGFyZQotICAgbWlzc2luZyBsaWtlIHRoZSBib3VuZGFyeSBpbiB0aGUgcmVxdWVzdF9yZWMsIGJlY2F1c2UgaXQgZG9lc24ndCBleGlzdCBpbiBBcGFjaGUgYW55bW9yZS4uLgotMy4gSSByZWNvbW1lbmQgdXNpbmcgVGNsIDguNCBzaW5jZSBpdCBzdXBwb3J0cyBXaWRlSW50ICg2NC1iaXQpIGludGVnZXJzLgotNC4gUnVucyBvbiBTb2xhcmlzIDkgc3BhcmN2OSBBQkkgd2hpY2ggaXMgdGhlIDY0LWJpdCBBQkksIEkgYXNzdW1lIGl0IHdpbGwgcnVuIG9uIG90aGVycyBhcyB3ZWxsLgotICAgKHVzZWQgZ2NjIDMuMS4xIHdpdGggLW02NCkKLTUuIFlvdSBjYW4gdXNlIC0td2l0aC10Y2xkaXI9cGF0aF90b190Y2xDb25maWcuc2ggaW4gLi9jb25maWd1cmUKLTYuIC4vY29uZmlndXJlIGFsc28gYWRkcyAtUjx0Y2xfbGlicmFyeV9wYXRoPiB0byBsaW5rZXIgcGhhc2UuICBKdXN0IGluIGNhc2UgeW91IGRvbid0IGhhdmUKLSAgIC91c3IvbG9jYWwvbGliIHNldHVwIGFzIGRlZmF1bHQuCi0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1Nb2RfdGNsIGluY29ycG9yYXRlcyBhIFRjbCBpbnRlcnByZXRlciBpbnRvIHRoZSBBcGFjaGUgd2ViIHNlcnZlci4gIFRoaXMgd2lsbCBhbGxvdyBBcGFjaGUgdG8gcnVuIFRjbCBzY3JpcHRzIG5hdGl2ZWx5IHdpdGhvdXQgaGF2aW5nIHRvIHJlbG9hZCBhIFRjbCBpbnRlcnByZXRlciBldmVyeSB0aW1lIHRoZSBzY3JpcHQgaXMgcnVuLiAgVGhlIFRjbCBzY3JpcHRzIGFyZSBjYWNoZWQgaW4gdGhlIFRjbCBpbnRlcnByZXRlciB1bnRpbCB0aGUgc2NyaXB0IGZpbGUgbW9kaWZpY2F0aW9uIHRpbWUgY2hhbmdlcyBvciBBcGFjaGUgaXMgcmVzdGFydGVkLiAgVGhpcyBhbGxvd3MgVGNsIHNjcmlwdHMgdXNpbmcgbW9kX3RjbCBpbiBBcGFjaGUgdG8gZXhlY3V0ZSBtdWNoIGZhc3RlciB0aGFuIHRyYWRpdGlvbmFsIENHSSBzY3JpcHRzIHdoaWNoIG11c3QgaW5pdGlhbGl6ZSBhbiBpbnRlcnByZXRlciBldmVyeSB0aW1lIGEgc2NyaXB0IGlzIGV4ZWN1dGVkLiAgQWRkaXRpb25hbGx5IG1vZF90Y2wgZXhwb3J0cyB0aGUgQXBhY2hlIEFQSSB3aGljaCBhbGxvd3MgYSBwcm9ncmFtbWVyIHRvIGhhdmUgY29tcGxldGUgY29udHJvbCBvdmVyIGh0dHAgcmVxdWVzdHMgdGhhdCBDR0kgc2NyaXB0cyBjYW4gbm90IHByb3ZpZGUuCi0KLU1vZF90Y2wgaXMgYW4gQXBhY2hlIG1vZHVsZSBpbiBpdHMgb3duIHJpZ2h0LCBidXQgaXQgY2FuIGFsc28gYmUgdXNlZCBhcyBhIGdhdGV3YXkgZm9yIHdyaXRpbmcgQXBhY2hlIG1vZHVsZXMgaW4gVGNsIHZlcnN1cyBDLiAgRXhpc3RpbmcgVGNsIHBhY2thZ2VzIHdoZXRoZXIgd3JpdHRlbiBpbiBDIG9yIFRjbCBjYW4gYmUgZWFzaWx5IGludGVncmF0ZWQgaW50byBtb2RfdGNsIHNjcmlwdHMuICBUaGlzIGFsbG93cyBhIGxhcmdlIGNvbGxlY3Rpb24gb2YgZXhpc3RpbmcgVGNsIHBhY2thZ2VzIHRvIGJlIHVzZWQgd2l0aG91dCBoYXZpbmcgdG8gcmV3cml0ZSBmdW5jdGlvbmFsaXR5IG9yIGluY3VyIGEgcGVyZm9ybWFuY2UgaGl0IGJ5IHVzaW5nIGFuIGFsdGVybmF0aXZlIGV4ZWN1dGlvbiBtb2RlbCBsaWtlIENHSS4KLQotTW9kX3RjbCBpcyBkZXNpZ25lZCB0byBiZSBwb3dlcmZ1bCwgbGlnaHR3ZWlnaHQsIGFuZCBmYXN0LiAgVGhlIGFkZGl0aW9uYWwgb3ZlcmhlYWQgZnJvbSB0aGUgVGNsIGludGVycHJldGVyIHdpbGwgYmUgbmVnbGlnaWJsZSB3aGVuIGNvbnNpZGVyaW5nIHRoZSBmbGV4aWJpbGl0eSBhbmQgc3BlZWQgYWNoaWV2ZWQuICBJbiBhZGRpdGlvbiB0aGVyZSBpcyBubyBmbHVmZiBpbnZvbHZlZCB3aXRoIG1vZF90Y2wsIG9ubHkgdGhlIGF2YWlsYWJpbGl0eSBvZiB0aGUgQXBhY2hlIEFQSSBhbmQgVGNsIGludGVycHJldGVyIGlzIHByb3ZpZGVkLiAgVGhlIHByb2dyYW1tZXIgaXMgZ2l2ZW4gdGhlIGNob2ljZSBvZiB3aGF0IHBhY2thZ2VzIG1heSBiZSBuZWNlc3NhcnkgZm9yIGVhY2ggc2NyaXB0LCBmb3IgZXhhbXBsZSBhIHBhY2thZ2UgbWF5IGJlIHJlcXVpcmVkIGZvciBjb21tdW5pY2F0aW9uIHdpdGggYSBkYXRhYmFzZS4gIFRoaXMgcHJvdmlkZXMgbGVzcyByZXNvdXJjZSBwb2xsdXRpb24sIGRlcGVuZGVuY3kgb24gYWRkaXRpb25hbCByZXF1aXJlZCBwYWNrYWdlcywgYW5kIGJldHRlciBlZmZpY2llbmN5IGluIHRoZSBodHRwIHJlcXVlc3QgcHJvY2Vzcy4KLQotQnVpbGRpbmcgYW5kIEluc3RhbGxpbmcgQXBhY2hlIHdpdGggbW9kX3RjbAotCi1Nb2RfdGNsIGlzIGNvbmZpZ3VyZWQgdXNpbmcgdGhlIEFwYWNoZSAyLjAgY29uZmlndXJhdGlvbiBzeXN0ZW0uICBOb3JtYWxseSBhIHZhbmlsbGEgaW5zdGFsbCBvZiBBcGFjaGUgZG9lc27VdCByZXF1aXJlIGEgcmVidWlsZCBvZiB0aGUgY29uZmlndXJhdGlvbiBzeXN0ZW0sIGJ1dCBzaW5jZSBtb2RfdGNsIHJlcXVpcmVzIGxpYnJhcmllcyBub3QgdXN1YWxseSBidWlsdCBpbnRvIEFwYWNoZSBpdCBpcyBuZWNlc3NhcnkgdG8gcmVidWlsZCB0aGUgY29uZmlndXJlIHNjcmlwdCB1c2luZyBHTlUgYXV0b2NvbmYuICBUaGUgR05VIGF1dG9jb25mIHRvb2xzIG1heSBhbHJlYWR5IGJlIGluc3RhbGxlZCBvbiB5b3VyIHN5c3RlbSBhbmQgYSBjaGVjayBzaG91bGQgYmUgcGVyZm9ybWVkIHRvIGNvbmZpcm0gdGhpcyB0byBhdm9pZCB1bm5lY2Vzc2FyeSByZWluc3RhbGxhdGlvbi4gIElmIHRoZSBHTlUgYXV0b2NvbmYgdG9vbHMgYXJlIG5vdCBpbnN0YWxsZWQgdGhlbiB0aGV5IGNhbiBiZSBkb3dubG9hZGVkIGZyb20gYSBHTlUgZGlzdHJpYnV0aW9uIHNpdGUsIGZvciBtb3JlIGluZm9ybWF0aW9uIGNoZWNrIHRoZSBHTlUgYXV0b2NvbmYgd2Vic2l0ZSBodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvYXV0b2NvbmYvLiAgUGxlYXNlIG5vdGUgdGhhdCBHTlUgYXV0b2NvbmYgYWxzbyByZXF1aXJlcyBhIHJlY2VudCByZWxlYXNlIG9mIGFuIG00IG1hY3JvIHByb2Nlc3Nvci4gIFRoZSBuZXh0IHN0ZXAgaXMgdG8gZG93bmxvYWQgdGhlIG1vZF90Y2wgc291cmNlIGZyb20gdGhlIEFwYWNoZSBUY2wgcHJvamVjdCB3ZWIgc2l0ZSBhdCBodHRwOi8vdGNsLmFwYWNoZS5vcmcgb3IgZnJvbSBhbm9ueW1vdXMgQ1ZTLiAgVGhlIGZvbGxvd2luZyBDVlMgY29tbWFuZHMgd2lsbCBjaGVja291dCB0aGUgbW9kX3RjbCBzb3VyY2UgZnJvbSBjdnMuYXBhY2hlLm9yZywgbm8gc2FuZGJveCBpcyByZXF1aXJlZCBhcyB0aGlzIHdpbGwgZG93bmxvYWQgYWxsIHRoZSBzb3VyY2UgdG8gdGhlIHRjbC1tb2R0Y2wgZGlyZWN0b3J5LiAgVGhlIENWUyBsb2dpbiBwYXNzd29yZCBpcyBhbm9uY3ZzLgotCi0kIGN2cyAtZDpwc2VydmVyOmFub25jdnNAY3ZzLmFwYWNoZS5vcmc6L2hvbWUvY3ZzcHVibGljIGxvZ2luCi0oTG9nZ2luZyBpbiB0byBhbm9uY3ZzQGN2cy5hcGFjaGUub3JnKQotQ1ZTIHBhc3N3b3JkOiA8ZW50ZXIgYW5vbmN2cz4KLSQgY3ZzIC1kOnBzZXJ2ZXI6YW5vbmN2c0BjdnMuYXBhY2hlLm9yZzovaG9tZS9jdnNwdWJsaWMgY2hlY2tvdXQgdGNsLW1vZHRjbAotCi1JZiBtb2RfdGNsIGlzIGRvd25sb2FkZWQgZnJvbSB0aGUgQXBhY2hlIFRjbCBwcm9qZWN0IHdlYiBzaXRlIHRoZW4gdGhlIHBhY2thZ2UgbXVzdCBiZSB1bi1hcmNoaXZlZCBhbmQgbW92ZWQgdG8gdGhlIEFwYWNoZSAyLjAgbW9kdWxlcyBkaXJlY3RvcnkuICBJZiBDVlMgaXMgdXNlZCB0aGUgZGlyZWN0b3J5IG11c3QgYmUgcmVuYW1lZCB0byBtb2RfdGNsIGZyb20gdGNsLW1vZHRjbCBhbmQgdGhlbiBtb3ZlZCB0byB0aGUgQXBhY2hlIDIuMCBtb2R1bGVzIGRpcmVjdG9yeS4gIEl0IGlzIGltcG9ydGFudCB0byBub3RlIHRoYXQgdGhlIGRpcmVjdG9yeSB0aGF0IGNvbnRhaW5zIHRoZSBtb2RfdGNsIHNvdXJjZSBtdXN0IGJlIG5hbWVkIG1vZF90Y2wgb3RoZXJ3aXNlIHRoZSBBcGFjaGUgY29uZmlndXJhdGlvbiBzeXN0ZW0gd2lsbCBub3QgcmVjb2duaXplIG1vZF90Y2wuICBUaGUgZm9sbG93aW5nIGV4YW1wbGUgYXNzdW1lcyB0aGUgQXBhY2hlIDIuMCBzb3VyY2UgZGlzdHJpYnV0aW9uIGlzIGxvY2F0ZWQgaW4gdGhlIHNhbWUgZGlyZWN0b3J5IHdoZXJlIHRoZSBtb2RfdGNsIHNvdXJjZSB3YXMgYWNxdWlyZWQgdGhyb3VnaCBDVlMuCi0KLSQgbXYgdGNsLW1vZHRjbCBodHRwZC0yLjAuMzIvbW9kdWxlcy9tb2RfdGNsCi0KLU5vdyB0aGUgQXBhY2hlIGNvbmZpZ3VyYXRpb24gc3lzdGVtIGlzIHJlYWR5IHRvIGJlIHJlYnVpbHQgYW5kIGluY2x1ZGUgbW9kX3RjbC4gIENoYW5nZSBkaXJlY3RvcnkgdG8gdGhlIHJvb3QgbGV2ZWwgb2YgdGhlIEFwYWNoZSAyLjAgc291cmNlIGFuZCByZWJ1aWxkIHRoZSBjb25maWd1cmF0aW9uIHN5c3RlbS4KLQotJCBjZCBodHRwZC0yLjAuMzIKLSQgYXV0b2NvbmYKLSQgYXV0b2hlYWRlcgotCi1SdW5uaW5nIHRoZSBjb25maWd1cmUgc2NyaXB0IHdpdGggdGhlIGhlbHAgZmxhZyB3aWxsIHNob3cgdGhhdCBtb2RfdGNsIGNvbmZpZ3VyYXRpb24gbWFjcm9zIGhhdmUgYmVlbiBhc3NpbWlsYXRlZCBpbnRvIHRoZSBBcGFjaGUgY29uZmlndXJhdGlvbiBzeXN0ZW0uCi0KLSQgLi9jb25maWd1cmUgLS1oZWxwCi3JCi0tLWRpc2FibGUtdGNsICAgICAgICAgICBlbWJlZGRlZCB0Y2wgaW50ZXJwcmV0ZXIKLckKLQotbW9kX3RjbCBpcyBlbmFibGVkIGJ5IGRlZmF1bHQgb25jZSB0aGUgQXBhY2hlIGNvbmZpZ3VyYXRpb24gaGFzIGJlZW4gcmVidWlsdC4gIElmIGl0IGlzIG5lY2Vzc2FyeSB0byBkaXNhYmxlIG1vZF90Y2wgdGhlbiB0aGlzIG1heSBiZSBhY2NvbXBsaXNoZWQgZnJvbSB0aGUgLS1kaXNhYmxlLXRjbCBvcHRpb24gcGFzc2VkIHRvIHRoZSBjb25maWd1cmUgc2NyaXB0LgotCi1UaGUgbmV4dCBzdGVwIGlzIHRvIGNvbmZpZ3VyZSB0aGUgQXBhY2hlIGJ1aWxkIHByb2Nlc3MgYnkgcnVubmluZyB0aGUgY29uZmlndXJlIHNjcmlwdC4gIER1cmluZyBjb25maWd1cmF0aW9uIHdlIHdpbGwgc2VlIHN0YXR1cyBvdXRwdXQsIHRoZSBtb2RfdGNsIGNvbmZpZ3VyYXRpb24gc3RhdHVzIG91dHB1dCB3aWxsIGxvb2sgc2ltaWxhciB0byB0aGUgZm9sbG93aW5nLgotCi1jaGVja2luZyB3aGV0aGVyIHRvIGVuYWJsZSBtb2RfdGNsLi4uIHllcyAoZGVmYXVsdCkKLWNoZWNraW5nIGZvciB0Y2wuaC4uLiB5ZXMKLWNoZWNraW5nIGZvciBpbnR0eXBlcy5oLi4uIHllcwotY2hlY2tpbmcgZm9yIGludF90eXBlcy5oLi4uIG5vCi1jaGVja2luZyBmb3Igc3lzL21tYW4uaC4uLiAoY2FjaGVkKSB5ZXMKLWNoZWNraW5nIGZvciBhc3ByaW50Zi4uLiBubwotY2hlY2tpbmcgZm9yIG1tYXAuLi4gKGNhY2hlZCkgeWVzCi1jaGVja2luZyBmb3IgdGNsQ29uZmlnLnNoIGluIC91c3IvbG9jYWwvbGliLi4uIHllcwotY2hlY2tpbmcgZm9yIHRjbCB2ZXJzaW9uLi4uIDguMwotCi1JdCBpcyBpbXBvcnRhbnQgdG8gbWFrZSBzdXJlIHRoYXQgY29uZmlndXJhdGlvbiBmb3VuZCB0aGUgdGNsLmggaGVhZGVyIGZpbGUuICBJZiB0aGUgdGNsLmggaGVhZGVyIGZpbGUgd2FzIG5vdCBmb3VuZCBleHRyYSBpbmNsdWRlIHBhdGhzIG1heSBiZSByZXF1aXJlZCB3aGVuIGNvbXBpbGluZyBBcGFjaGUgMi4wLCBvciBhIFRjbCBkaXN0cmlidXRpb24gbWF5IG5vdCBiZSBpbnN0YWxsZWQuICBJZiBUY2wgaXMgbm90IGluc3RhbGxlZCB0aGUgVGNsIHNvZnR3YXJlIGNhbiBiZSBvYnRhaW5lZCBmcm9tIGh0dHA6Ly93d3cudGNsLnRrLiAgQ29uZmlndXJhdGlvbiB3aWxsIGZhaWwgaWYgdGhlIHRjbENvbmZpZy5zaCBmaWxlIGlzIG5vdCBmb3VuZCBvciB0aGUgbWFqb3IgVGNsIHZlcnNpb24gaW5zdGFsbGVkIGlzIGxlc3MgdGhhbiA4LjAuICBJdCBpcyByZWNvbW1lbmRlZCB0aGF0IHRoZSBsYXRlc3QgVGNsIHZlcnNpb24gYmUgdXNlZC4gIElmIFRjbCBpcyBpbnN0YWxsZWQgYW5kIGNvbmZpZ3VyYXRpb24gd2FzIHVuYWJsZSB0byBmaW5kIHRoZSB0Y2xDb25maWcuc2ggZmlsZSB0aGVuIHRoZSBtb2RfdGNsIGNvbmZpZ3VyYXRpb24gbWFjcm9zIG1heSBiZSBtb2RpZmllZC4gIEJ5IGRlZmF1bHQgbW9kX3RjbCBjb25maWd1cmF0aW9uIGFzc3VtZXMgdGhlIHRjbENvbmZpZy5zaCB3aWxsIGJlIGZvdW5kIGluIHRoZSBkaXJlY3RvcmllcyAvdXNyL2xpYiBvciAvdXNyL2xvY2FsL2xpYi4gIElmIHRoZSBUY2wgZGlzdHJpYnV0aW9uIG9uIHRoZSBzeXN0ZW0gaXMgaW5zdGFsbGVkIGluIGEgZGlmZmVyZW50IGxvY2F0aW9uIHRoZW4gdGhlIGZpbGUgY29uZmlnLm00IGluIHRoZSBtb2RfdGNsIGRpcmVjdG9yeSBjYW4gYmUgbW9kaWZpZWQgdG8gc2VhcmNoIGluIG90aGVyIGRpcmVjdG9yaWVzLiAgSWYgdGhpcyBpcyBuZWNlc3NhcnkgdGhlbiBjaGFuZ2UgZGlyZWN0b3J5IHRvIHRoZSBtb2RfdGNsIGRpcmVjdG9yeSBhbmQgZWRpdCB0aGUgY29uZmlnLm00IGZpbGUuICBJbiB0aGUgY29uZmlnLm00IGZpbGUgdGhlcmUgaXMgYSB2YXJpYWJsZSBjYWxsZWQgZGlycy4gIEFwcGVuZCBhZGRpdGlvbmFsIHNlYXJjaCBwYXRocyB0byB0aGlzIHN0cmluZyB0byBhbGxvdyBtb3JlIGRpcmVjdG9yaWVzIHRvIGJlIHNlYXJjaGVkLiAgVGhlIGZvbGxvd2luZyBleGFtcGxlIHNob3dzIHRoZSBhZGRpdGlvbiBvZiB0aGUgL3Vzci9sb2NhbDIvbGliIGRpcmVjdG9yeS4KLQotyQotQUNfQ0hFQ0tfRlVOQ1MoYXNwcmludGYgbW1hcCkKLQotZGlycz0iL3Vzci9sb2NhbC9saWIgL3Vzci9saWIgL3Vzci9sb2NhbDIvbGliIgotCi1mb3VuZD0wCi3JCi0KLUlmIGFueSBtb2RpZmljYXRpb25zIGhhdmUgYmVlbiBtYWRlIHRvIHRoZSBjb25maWcubTQgZmlsZSB0aGVuIGF1dG9jb25mIGFuZCBhdXRvaGVhZGVyIHdpbGwgaGF2ZSB0byBiZSBydW4gYWdhaW4uCi0KLUFmdGVyIGNvbmZpZ3VyYXRpb24gaGFzIGNvbXBsZXRlZCB0aGUgQXBhY2hlIHdlYiBzZXJ2ZXIgY2FuIGJlIGNvbXBpbGVkLiAgQ2hhbmdlIGRpcmVjdG9yeSB0byB0aGUgcm9vdCBsZXZlbCBvZiB0aGUgQXBhY2hlIDIuMCBzb3VyY2UgZGlzdHJpYnV0aW9uIGFuZCBleGVjdXRlIHRoZSBmb2xsb3dpbmcgY29tbWFuZHMuCi0KLSQgbWFrZQotJCBtYWtlIGluc3RhbGwKLQotVGhpcyB3aWxsIGNvbXBpbGUgQXBhY2hlIDIuMCB3aXRoIG1vZF90Y2wgYW5kIGluc3RhbGwgdGhlIGRpc3RyaWJ1dGlvbiBpbiB0aGUgbG9jYXRpb24gc3BlY2lmaWVkIGF0IGNvbmZpZ3VyYXRpb24gdGltZS4gIFRoZSBBcGFjaGUgMi4wIGJpbmFyeSB3aWxsIGNvbnRhaW4gYSBzdGF0aWNhbGx5IGxpbmtlZCBtb2RfdGNsIG1vZHVsZSB3aGljaCBtYXkgYWxzbyBzdGF0aWNhbGx5IGxpbmsgVGNsIGxpYnJhcmllcyBkZXBlbmRpbmcgb24geW91ciBUY2wgaW5zdGFsbGF0aW9uLgotCi1Db25maWd1cmluZyBtb2RfdGNsIGluIEFwYWNoZSBDb25maWd1cmUgRmlsZXMKLQotSW4gb3JkZXIgdG8gdXNlIG1vZF90Y2wgaW4gQXBhY2hlIDIuMCBzb21lIG1vZF90Y2wgY29uZmlndXJhdGlvbiBkaXJlY3RpdmVzIGFyZSByZXF1aXJlZCBpbiB0aGUgQXBhY2hlIDIuMCBjb25maWd1cmF0aW9uIGZpbGUsIHVzdWFsbHkgY2FsbGVkIGh0dHBkLmNvbmYuICBNb2RfdGNsIGlzIG1hZGUgYWN0aXZlIGJ5IGFjdGl2YXRpbmcgb25lIG9mIHRoZSBtb2R1bGUgaG9vayBjYWxscy4gIFRoZXJlIGFyZSB0ZW4gaG9vayBjYWxscyBpbiB0b3RhbCBjb3JyZXNwb25kaW5nIHRvIHRoZSBhdmFpbGFibGUgaG9vayBjYWxscyBpbiB0aGUgQXBhY2hlIEFQSS4gIEFsbCBob29rcyByZXF1aXJlIGFuIGFyZ3VtZW50IG9mIHRoZSBlbnRpcmUgcGh5c2ljYWwgcGF0aCB0byB0aGUgZmlsZSB0aGF0IGNvbnRhaW5zIHRoZSBob29rIHByb2NlZHVyZSBleGNlcHQgdGhlIGNvbnRlbnQgaGFuZGxlciBob29rIGNhbGxlZCBUY2xfSG9va19IYW5kbGVyLiAgRXZlcnkgaG9vayBkb2VzIHJlcXVpcmUgYW4gYXJndW1lbnQgc3BlY2lmeWluZyB0aGUgbmFtZSBvZiB0aGUgcHJvY2VkdXJlIHRvIGJlIGNhbGxlZC4gIE1vZF90Y2wgY29uZmlndXJhdGlvbiBkaXJlY3RpdmVzIGFyZSB2YWxpZCB3aXRoaW4gQXBhY2hlIDxEaXJlY3Rvcnk+yTwvRGlyZWN0b3J5PiBvciA8TG9jYXRpb24+yTwvTG9jYXRpb24+IGJsb2Nrcy4KLQotTW9kX3RjbCBIb29rIENvbmZpZ3VyYXRpb24gRGlyZWN0aXZlcyBpbiBPcmRlciBvZiBFeGVjdXRpb24KLVRjbF9Ib29rX1Bvc3RfUmVhZF9SZXF1ZXN0CUVuYWJsZXMgdGhlIHBvc3QgcmVhZCByZXF1ZXN0IGhhbmRsZXIgZm9yIHJlcXVlc3Qgc2V0dXAuCi1UY2xfSG9va19UcmFuc2xhdGVfTmFtZQlFbmFibGVzIHRoZSB0cmFuc2xhdGUgbmFtZSBoYW5kbGVyIGZvciBVUkkgdG8gZmlsZSB0cmFuc2xhdGlvbi4KLVRjbF9Ib29rX0hlYWRlcl9QYXJzZXIJRW5hYmxlcyB0aGUgaGVhZGVyIHBhcnNlciBoYW5kbGVyIGZvciBwYXJzaW5nIGh0dHAgaGVhZGVycy4KLVRjbF9Ib29rX0FjY2Vzc19DaGVja2VyCUVuYWJsZXMgdGhlIGFjY2VzcyBjaGVja2VyLgotVGNsX0hvb2tfQ2hlY2tfVXNlcl9JRAlFbmFibGVzIHRoZSBjaGVjayB1c2VyIGlkIGhhbmRsZXIuCi1UY2xfSG9va19BdXRoX0NoZWNrZXIJRW5hYmxlcyB0aGUgYXV0aCBjaGVja2VyLgotVGNsX0hvb2tfVHlwZV9DaGVja2VyCUVuYWJsZXMgdGhlIHR5cGUgY2hlY2tlci4KLVRjbF9Ib29rX0ZpeHVwcwlFbmFibGVzIGEgZml4IHVwIGhhbmRsZXIuCi1UY2xfSG9va19IYW5kbGVyCUVuYWJsZXMgdGhlIGNvbnRlbnQgaGFuZGxlciBmb3IgZGVsaXZlcnkgb2YgZGF0YSB0byBjbGllbnQuCi1UY2xfSG9va19Mb2dfVHJhbnNhY3Rpb24JRW5hYmxlcyB0aGUgbG9nIHRyYW5zYWN0aW9uIGhhbmRsZXIuCi0KLUNoYW5jZXMgYXJlIHRoZSBUY2xfSG9va19IYW5kbGVyIGNvbmZpZ3VyYXRpb24gZGlyZWN0aXZlIHdpbGwgYmUgdGhlIG1vc3QgY29tbW9ubHkgb25lIHVzZWQuICBUaGlzIGlzIHRoZSBoYW5kbGVyIHRoYXQgYWN0dWFsbHkgZGVsaXZlcnMgdGhlIGNvbnRlbnQgYW5kIGRvZXMgbW9zdCBvZiB0aGUgd29yay4gIFRoaXMgaGFuZGxlciBhbHNvIGRvZXMgbm90IHJlcXVpcmUgYSBmaWxlIG5hbWUgYXJndW1lbnQgcGFzc2VkIHRvIGl0LCB0aGlzIGlzIGJlY2F1c2UgbWFueSBkaWZmZXJlbnQgc2NyaXB0IGZpbGVzIG1heSBjb250YWluIGluZGl2aWR1YWwgY29udGVudCBoYW5kbGVycy4gIElmIHRoZSBvdGhlciBwaGFzZXMgb2YgcmVxdWVzdCBwcm9jZXNzaW5nIHdlcmUgYWxsb3dlZCB0byBvcGVyYXRlIHRoaXMgd2F5IHRoZSByZXF1ZXN0IHByb2Nlc3Mgd291bGQgYmUgbXVjaCBtb3JlIGNvbXBsZXgsIGFuZCBtaXhpbmcgZGlmZmVyZW50IGZpbGUgdHlwZXMgd2l0aCBtb2RfdGNsIHNjcmlwdHMgd291bGQgYmUgaW1wb3NzaWJsZS4KLQotSW4gYWRkaXRpb24gdG8gdGhlIGhvb2sgZGlyZWN0aXZlcyB0aGVyZSBhcmUgYWxzbyBjb25maWd1cmF0aW9uIGRpcmVjdGl2ZXMgZm9yIHByZSBzZXR0aW5nIHZhcmlhYmxlcyBpbiBzY3JpcHRzLiAgVGhlIFRjbF9WYXIgZGlyZWN0aXZlIGlzIHVzZWQgd2hlbiB3ZSB3YW50IHRvIHNldCBzY2FsYXIgdmFyaWFibGVzIG9yIGFycmF5IHZhcmlhYmxlcy4gVGNsX0xpc3RWYXIgaXMgdXNlZCB0byBjcmVhdGUgYSBsaXN0LgotCi08RGlyZWN0b3J5IC8+Ci3JCi1UY2xfVmFyIG15X251bWJlciA3Ci1UY2xfVmFyIG15X2FycmF5IG15X3ZhbHVlMSAxMAotVGNsX1ZhciBteV9hcnJheSBteV92YWx1ZTIgMjAKLVRjbF9MaXN0VmFyIG15X2xpc3QgMQotVGNsX0xpc3RWYXIgbXlfbGlzdCAyCi1UY2xfTGlzdFZhciBteV9saXN0IDMKLckKLTwvRGlyZWN0b3J5PgotCi1JbiB0aGUgYWJvdmUgZXhhbXBsZSBteV9udW1iZXIgaXMgYSBzY2FsYXIgdmFyaWFibGUgd2l0aCB2YWx1ZSA3LCBteV9hcnJheSBpcyBhbiBhc3NvY2lhdGl2ZSBhcnJheSB3aXRoIDIgZWxlbWVudHMsIGFuZCBteV9saXN0IGlzIGEgbGlzdCB3aXRoIHZhbHVlIHsxLDIsM30uICBWYXJpYWJsZXMgc2V0IGZyb20gdGhlIGNvbmZpZ3VyYXRpb24gZmlsZSBhcmUgYXV0b21hdGljYWxseSBzZXQgaW4gdGhlIGNhbGxpbmcgc2NyaXB0cyBuYW1lc3BhY2UsIHNvIHRoZSBUY2wga2V5d29yZCB2YXJpYWJsZSB3aWxsIGJlIHJlcXVpcmVkIHdoZW4gdXNpbmcgdGhlc2UgdmFyaWFibGVzLiAgVGhlc2UgdmFyaWFibGVzIGFyZSBvbmx5IGluaXRpYWxpemVkIG9uY2UgaW4gYSBmaWxlcyBuYW1lc3BhY2UuICBJZiBjb2RlIHdpdGhpbiBvbmUgb2YgdGhlIGhhbmRsZXJzIGlzIGNhbGxlZCBhbmQgbW9kaWZpZXMgdGhlIHZhcmlhYmxlcyB0aGVuIHRoZXkgd2lsbCBiZSBwZXJtYW5lbnRseSBtb2RpZmllZCB1bnRpbCBBcGFjaGUgaXMgcmVzdGFydGVkLiAgVmFyaWFibGVzIHdpbGwgcmVtYWluIHBlcnNpc3RlbnQgaW4gdGhlIFRjbCBpbnRlcnByZXRlciBldmVuIGlmIGEgc2NyaXB0IGlzIHJlbG9hZGVkIGJlY2F1c2UgaXQgd2FzIG1vZGlmaWVkLgotCi1UaGUgZm9sbG93aW5nIGV4YW1wbGUgZGVtb25zdHJhdGVzIGEgc2ltcGxlIGNvbmZpZ3VyYXRpb24gc2V0dXAgZm9yIHVzaW5nIG1vZF90Y2wgaW4gYSB2aXJ0dWFsIGhvc3QgZGlyZWN0aXZlLgotCi08VmlydHVhbEhvc3QgMTI3LjAuMC4xPgotICAgIFNlcnZlck5hbWUgYW55Lmhvc3QKLQotICAgIERvY3VtZW50Um9vdCAiL2FueS5ob3N0IgotCi0gICAgPERpcmVjdG9yeSAvPgotICAgICAgICBPcHRpb25zIEZvbGxvd1N5bUxpbmtzCi0gICAgICAgIEFsbG93T3ZlcnJpZGUgTm9uZQotICAgIDwvRGlyZWN0b3J5PgotCi0gICAgPERpcmVjdG9yeSAvYW55Lmhvc3Q+Ci0jIGFsbG93IGZpbGVzIGVuZGluZyB3aXRoIHRoZSBleHRlbnN0aW9uIC50bSB0byB1c2UgbW9kX3RjbCBhcyBhIGNvbnRlbnQgaGFuZGxlcgotICAgICAgICBBZGRIYW5kbGVyIHRjbC1oYW5kbGVyIHRtCi0KLSAgICAgICAgVGNsX0hvb2tfSGFuZGxlciBjb250ZW50X2hhbmRsZXIKLSAgICA8L0RpcmVjdG9yeT4KLTwvVmlydHVhbEhvc3Q+Ci0KLVRoaXMgY29uZmlndXJhdGlvbiBleGFtcGxlIHdpbGwgYWxsb3cgYW55IG1peGVkIGZpbGVzIGluIHRoZSAvYW55Lmhvc3QgZGlyZWN0b3J5IGFuZCB3aWxsIGV4ZWN1dGUgYW55IHNjcmlwdCB3aXRoIGEgZmlsZW5hbWUgZW5kaW5nIGluIC50bSB0byBiZSBleGVjdXRlZCBieSBtb2RfdGNsLiAgVGhpcyBhbGxvd3MgdXMgdG8gbWl4IGh0bWwgYW5kIG1vZF90Y2wgc2NyaXB0cyB0b2dldGhlciBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuCi0KLVdyaXRpbmcgbW9kX3RjbCBTY3JpcHRzCi0KLU9uY2UgY29uZmlndXJhdGlvbiBpcyBzZXQgdXAgd2UgYXJlIHJlYWR5IHRvIHN0YXJ0IHdyaXRpbmcgdGhlIGFjdHVhbCBtb2RfdGNsIHNjcmlwdCB0aGF0IHdpbGwgY29udGFpbiB0aGUgbmVjZXNzYXJ5IGhhbmRsZXJzLiAgVXNpbmcgdGhlIHByZXZpb3VzIGNvbmZpZ3VyYXRpb24gZXhhbXBsZSB3ZSB3aWxsIGFzc3VtZSB0aGF0IHdlIGFyZSBnb2luZyB0byB3cml0ZSBhIG1vZF90Y2wgc2NyaXB0IGNhbGxlZCBoZWxsby50bSBpbiB0aGUgL2FueS5ob3N0IGRpcmVjdG9yeS4KLQotbmFtZXNwYWNlIGltcG9ydCAtZm9yY2UgOjphcGFjaGU6OioKLQotcHJvYyBjb250ZW50X2hhbmRsZXIgeyB9IHsKLSAgICB2YXJpYWJsZSA6OmFwYWNoZTo6T0sKLQotICAgIGFwX3NlbmRfaHR0cF9oZWFkZXIKLQotICAgIHJwdXRzINJoZWxsbyB3b3JsZC7TCi0KLSAgICByZXR1cm4gJE9LCi19Ci0KLVdoZW4gdGhpcyBzY3JpcHQgaXMgcnVuIGl0IHdpbGwgcHJpbnQgaGVsbG8gd29ybGQgaW4gdGhlIGNsaWVudHMgYnJvd3Nlci4gIFRoZXJlIGFyZSBzZXZlcmFsIGl0ZW1zIHRvIG5vdGUgaW4gdGhpcyBzY3JpcHQuICBPbmUgdGhlIGZpcnN0IGxpbmUgaXMgYSBuYW1lc3BhY2UgaW1wb3J0IG9mIGV2ZXJ5dGhpbmcgaW4gdGhlIDo6YXBhY2hlIG5hbWVzcGFjZSBpbnRvIHRoZSBjdXJyZW50IG5hbWVzcGFjZS4gIFRoaXMgYWxsb3dzIHVzIHRvIHVzZSB0aGUgQXBhY2hlIEFQSSBmdW5jdGlvbnMgKGxpa2UgcnB1dHMpIHdpdGhvdXQgaGF2aW5nIHRvIHByZWZpeCA6OmFwYWNoZTo6LiAgSXQgaXMgbm90IG5lY2Vzc2FyeSB0byBpbXBvcnQgdGhlIEFwYWNoZSBBUEkgbGlrZSB0aGlzIGJ1dCBpdCB3aWxsIG1ha2UgaXQgZWFzaWVyIGlmIHRoZSBBcGFjaGUgQVBJIGlzIHJlZmVyZW5jZWQgZnJlcXVlbnRseS4gIEV2ZW4gaWYgdGhlIEFwYWNoZSBBUEkgaXMgaW1wb3J0ZWQgaXQgaXMgc3RpbGwgbmVjZXNzYXJ5IHRvIGRlY2xhcmUgdmFyaWFibGVzIGluIHByb2NlZHVyZXMgZnJvbSBvdGhlciBuYW1lc3BhY2VzIChsaWtlIDo6YXBhY2hlOjpPSykuICBUaGUgYXBfc2VuZF9odHRwX2hlYWRlciBmdW5jdGlvbiB3aWxsIHNlbmQgaHR0cCBoZWFkZXJzIHRvIHRoZSBjbGllbnQgYnJvd3NlciwgZXZlbiBpZiB3ZSBkb27VdCBkZWZpbmUgYW55IGhlYWRlcnMgQXBhY2hlIHdpbGwgc2VuZCBkZWZhdWx0IGhlYWRlcnMuICBUaGUgcnB1dHMgY29tbWFuZCBvcGVyYXRlcyBhbG1vc3QgaWRlbnRpY2FsbHkgdG8gdGhlIFRjbCBjb21tYW5kIHB1dHMsIGluc3RlYWQgb2Ygd3JpdGluZyB0byBhIGZpbGUgZGVzY3JpcHRvciBycHV0cyB3cml0ZXMgdG8gdGhlIGNsaWVudHMgYnJvd3Nlci4gIHJwdXRzIGNhbiBub3Qgd3JpdGUgdG8gZGlmZmVyZW50IGZpbGUgZGVzY3JpcHRvcnMuICBBZnRlciBldmVyeSBoYW5kbGVyIGlzIHJ1biBpdCBtdXN0IHJldHVybiB3aXRoIGEgdmFsdWUgdGhhdCBzaWduaWZpZXMgdGhlIG91dGNvbWUgb2YgdGhlIHJlcXVlc3QgcGhhc2UuICBUaGUgc2V2ZW4gbW9zdCBjb21tb24gcmV0dXJuIHZhbHVlcyBhcmU6IE9LLCBERUNMSU5FRCwgRE9ORSwgSFRUUF9JTlRFUk5BTF9TRVJWRVJfRVJST1IsIEhUVFBfQkFEX1JFUVVFU1QsIEhUVFBfTU9WRURfVEVNUE9SQVJJTFksIGFuZCBIVFRQX05PVF9GT1VORC4KLQotVGhlIEFwYWNoZSBBUEkgaW4gbW9kX3RjbAotCi1Ob3cgdGhhdCB3ZSB1bmRlcnN0YW5kIHRoZSBiYXNpY3Mgb2Ygd3JpdGluZyBhIG1vZF90Y2wgc2NyaXB0IHdlIGNhbiB0YWtlIHRoZSBuZXh0IHN0ZXAgYW5kIGV4cGxvcmUgdGhlIEFwYWNoZSBBUEkgaW4gbW9kX3RjbC4gIEFsbCBBcGFjaGUgQVBJIGZ1bmN0aW9ucyBhcmUgaW1wbGVtZW50ZWQgdXNpbmcgdGhlIFRjbF9DcmVhdGVPYmpDb21tYW5kKCkgVGNsIEFQSSBmdW5jdGlvbiwgdGhpcyBpcyB3aHkgVGNsIDguMCBpcyByZXF1aXJlZC4gIFVzaW5nIFRjbCBvYmplY3RzIGluc3RlYWQgb2Ygc3RyaW5ncyBpbmNyZWFzZXMgdGhlIGVmZmljaWVuY3kgb2YgdGhlIHJlcXVlc3QgcGhhc2VzLiAgVGhlIEFwYWNoZSBBUEkgaW1wbGVtZW50YXRpb24gaW4gbW9kX3RjbCBjYW4gYmUgYnJva2VuIGRvbmUgYXMgZm9sbG93cy4gIEFsbCBBcGFjaGUgQVBJIHByb2NlZHVyZXMgYXJlIGRlY2xhcmVkIGluIHRoZSA6OmFwYWNoZSBuYW1lc3BhY2UuCi0KLWh0dHBfY29yZS5oIFByb2NlZHVyZXMJCQotYXBfYWxsb3dfb3B0aW9ucwlyZXR1cm5zIGludGVnZXIJcmVxdWlyZXMgbm8gYXJndW1lbnRzCi1hcF9hbGxvd19vdmVycmlkZXMJcmV0dXJucyBpbnRlZ2VyCXJlcXVpcmVzIG5vIGFyZ3VtZW50cwotYXBfZGVmYXVsdF90eXBlCXJldHVybnMgc3RyaW5nCXJlcXVpcmVzIG5vIGFyZ3VtZW50cwotYXBfZG9jdW1lbnRfcm9vdAlyZXR1cm5zIHN0cmluZwlyZXF1aXJlcyBubyBhcmd1bWVudHMKLWFwX2dldF9yZW1vdGVfaG9zdAlyZXR1cm5zIHN0cmluZwlyZXF1aXJlcyBpbnRlZ2VyIGFyZ3VtZW50Ci1hcF9nZXRfcmVtb3RlX2xvZ25hbWUJcmV0dXJucyBzdHJpbmcJcmVxdWlyZXMgbm8gYXJndW1lbnRzCi1hcF9jb25zdHJ1Y3RfdXJsCXJldHVybnMgc3RyaW5nCXJlcXVpcmVzIHVyaSBzdHJpbmcgYXJndW1lbnQKLWFwX2dldF9zZXJ2ZXJfbmFtZQlyZXR1cm5zIHN0cmluZ3MJcmVxdWlyZXMgbm8gYXJndW1lbnRzCi1hcF9nZXRfc2VydmVyX3BvcnQJcmV0dXJucyBpbnRlZ2VyCXJlcXVpcmVzIG5vIGFyZ3VtZW50cwotYXBfZ2V0X2xpbWl0X3JlcV9ib2R5CXJldHVybnMgbG9uZwlyZXF1aXJlcyBubyBhcmd1bWVudHMKLWFwX2dldF9saW1pdF94bWxfYm9keQlyZXR1cm5zIGludGVnZXIJcmVxdWlyZXMgbm8gYXJndW1lbnRzCi1hcF9jdXN0b21fcmVzcG9uc2UJcmV0dXJucyBub3RoaW5nCXJlcXVpcmVzIGludGVnZXIgYW5kIHN0cmluZyBhcmd1bWVudHMKLWFwX2V4aXN0c19jb25maWdfZGVmaW5lCXJldHVybnMgaW50ZWdlcglyZXF1aXJlcyBzdHJpbmcgYXJndW1lbnQKLWFwX2F1dGhfdHlwZQlyZXR1cm5zIHN0cmluZwlyZXF1aXJlcyBubyBhcmd1bWVudHMKLWFwX2F1dGhfbmFtZQlyZXR1cm5zIHN0cmluZwlyZXF1aXJlcyBubyBhcmd1bWVudHMKLWFwX3NhdGlzZmllcwlyZXR1cm5zIGludGVnZXIJcmVxdWlyZXMgbm8gYXJndW1lbnRzCi1hcF9yZXF1aXJlcwlyZXR1cm5zIGxpc3QJcmVxdWlyZXMgbm8gYXJndW1lbnRzCi1odHRwX2xvZy5oIFByb2NlZHVyZXMJCQotYXBfbG9nX2Vycm9yCXJldHVybnMgbm90aGluZ3MJcmVxdWlyZXMgbGV2ZWwgaW50ZWdlcjsgc3RhdHVzIGludGVnZXIgYW5kIGxvZyBzdHJpbmcgYXJndW1lbnRzCi1odHRwX3Byb3RvY29sLmggUHJvY2VkdXJlcwkJCi1hcF9zZW5kX2h0dHBfaGVhZGVyCXJldHVybnMgbm90aGluZwlyZXF1aXJlcyBubyBhcmd1bWVudHMKLWFwX3NlbmRfaHR0cF90cmFjZQlyZXR1cm5zIGludGVnZXIJcmVxdWlyZXMgbm8gYXJndW1lbnRzCi1hcF9zZW5kX2h0dHBfb3B0aW9ucwlyZXR1cm5zIGludGVnZXIJcmVxdWlyZXMgbm8gYXJndW1lbnRzCi1hcF9maW5hbGl6ZV9yZXF1ZXN0X3Byb3RvY29sCXJldHVybnMgbm90aGluZwlyZXF1aXJlcyBubyBhcmd1bWVudHMKLWFwX3NlbmRfZXJyb3JfcmVzcG9uc2UJcmV0dXJucyBub3RoaW5nCXJlcXVpcmVzIHJlY3Vyc2l2ZSBlcnJvciBpbnRlZ2VyCi1hcF9zZXRfY29udGVudF9sZW5ndGgJcmV0dXJucyBub3RoaW5nCXJlcXVpcmVzIGxlbmd0aCBpbnRlZ2VyCi1hcF9zZXRfa2VlcGFsaXZlCXJldHVybnMgaW50ZWdlcglyZXF1aXJlcyBubyBhcmd1bWVudHMKLWFwX3JhdGlvbmFsaXplX210aW1lCXJldHVybnMgaW50ZWdlcglyZXF1aXJlcyBtdGltZSBpbnRlZ2VyCi1hcF9tYWtlX2V0YWcJcmV0dXJucyBzdHJpbmcJcmVxdWlyZXMgZm9yY2Vfd2VhayBpbnRlZ2VyCi1hcF9zZXRfZXRhZwlyZXR1cm5zIG5vdGhpbmcJcmVxdWlyZXMgbm8gYXJndW1lbnRzCi1hcF9zZXRfbGFzdF9tb2RpZmllZAlyZXR1cm5zIG5vdGhpbmcJcmVxdWlyZXMgbm8gYXJndW1lbnRzCi1hcF9tZWV0c19jb25kaXRpb25zCXJldHVybnMgaW50ZWdlcglyZXF1aXJlIG5vIGFyZ3VtZW50cwotYXBfcnB1dHMJcmV0dXJucyBub3RoaW5nCWFjY2VwdHMg0G5vbmV3bGluZSBvcHRpb247IHJlcXVpcmVzIHN0cmluZwotYXBfcndyaXRlCXJldHVybnMgbm90aGluZwlyZXF1aXJlcyBkYXRhCi1hcF9yZmx1c2gJcmV0dXJucyBub3RoaW5nCXJlcXVpcmVzIG5vIGFyZ3VtZW50cwotYXBfZ2V0X3N0YXR1c19saW5lCXJldHVybnMgc3RyaW5nCXJlcXVpcmVzIHN0YXR1cyBpbnRnZXIKLWFwX3NldHVwX2NsaWVudF9ibG9jawlyZXR1cm5zIGludGVnZXIJcmVxdWlyZXMgcmVhZCBwb2xpY3kgaW50ZWdlcgotYXBfZ2V0X2NsaWVudF9ibG9jawlyZXR1cm5zIGludGVnZXIgYW5kIHNldHMgdmFyaWFibGUgUiB0byByZXR1cm5lZCBkYXRhCXJlcXVpcmVzIGJ1ZnNpeiBpbnRlZ2VyCi1hcF9kaXNjYXJkX3JlcXVlc3RfYm9keQlyZXR1cm5zIGludGVnZXIJcmVxdWlyZXMgbm8gYXJndW1lbnRzCi1hcF9ub3RlX2F1dGhfZmFpbHVyZQlyZXR1cm5zIG5vdGhpbmcJcmVxdWlyZXMgbm8gYXJndW1lbnRzCi1hcF9ub3RlX2Jhc2ljX2F1dGhfZmFpbHVyZQlyZXR1cm5zIG5vdGhpbmcJcmVxdWlyZXMgbm8gYXJndW1lbnRzCi1hcF9ub3RlX2RpZ2VzdF9hdXRoX2ZhaWx1cmUJcmV0dXJucyBub3RoaW5nCXJlcXVpcmVzIG5vIGFyZ3VtZW50cwotYXBfZ2V0X2Jhc2ljX2F1dGhfcHcJcmV0dXJucyBpbnRlZ2VyIGFuZCBzZXRzIHZhcmlhYmxlIFIgdG8gc3RyaW5nCXJlcXVpcmVzIG5vIGFyZ3VtZW50cwotYXBfcGFyc2VfdXJpCXJldHVybnMgbm90aGluZwlyZXF1aXJlcyB1cmkgc3RyaW5nCi1hcF9tZXRob2RfbnVtYmVyX29mCXJldHVybnMgaW50ZWdlcglyZXF1aXJlcyBtZXRob2Qgc3RyaW5nCi1hcF9tZXRob2RfbmFtZV9vZglyZXR1cm5zIHN0cmluZwlyZXF1aXJlcyBtZXRob2QgaW50ZWdlcgotaHR0cF9yZXF1ZXN0LmgJCQotYXBfaW50ZXJuYWxfcmVkaXJlY3QJcmV0dXJucyBub3RoaW5nCXJlcXVpcmVzIHVyaSBzdHJpbmcKLWFwX2ludGVybmFsX3JlZGlyZWN0X2hhbmRsZXIJcmV0dXJucyBub3RoaW5nCXJlcXVpcmVzIHVyaSBzdHJpbmcKLWFwX3NvbWVfYXV0aF9yZXF1aXJlZAlyZXR1cm5zIGludGVnZXIJcmVxdWlyZXMgbm8gYXJndW1lbnRzCi1hcF91cGRhdGVfbXRpbWUJcmV0dXJucyBub3RoaW5nCXJlcXVpcmVzIGRlcGVuZGVuY3kgbXRpbWUgaW50ZWdlcgotYXBfYWxsb3dfbWV0aG9kcwlyZXR1cm5zIG5vdGhpbmcJcmVxdWlyZXMgcmVzZXQgaW50Z2VyIGFuZCBtZXRob2RzIHN0cmluZwotaHR0cGQuaAkJCi1hcF9nZXRfc2VydmVyX3ZlcnNpb24JcmV0dXJucyBzdHJpbmcJcmVxdWlyZXMgbm8gYXJndW1lbnRzCi1hcF9hZGRfdmVyc2lvbl9jb21wb25lbnQJcmV0dXJucyBubyBhcmd1bWVudHMJcmVxdWlyZXMgdmVyc2lvbiBzdHJpbmcKLWFwX2dldF9zZXJ2ZXJfYnVpbHQJcmV0dXJucyBzdHJpbmcJcmVxdWlyZXMgbm8gYXJndW1lbnRzCi11dGlsX3NjcmlwdC5oCQkKLWFwX2NyZWF0ZV9lbnZpcm9ubWVudAlyZXR1cm5zIG5vdGhpbmcgYW5kIHNldHMgdmFyaWFibGUgZW52CXJlcXVpcmVzIG5vIGFyZ3VtZW50cwotCi1UaGVyZSBhcmUgYWxzbyBzb21lIHV0aWxpdHkgcHJvY2VkdXJlcyBkZWZpbmVkIGZvciBpbnRlcmFjdGluZyB3aXRoIGxhcmdlIG91dHB1dCwgcmVhZGluZyBQT1NUIHJlcXVlc3RzLCBhbmQgcmVhZGluZyBhbmQgc2V0dGluZyB2YXJpYWJsZXMgaW4gQXBhY2hlIHJlcXVlc3RfcmVjIHN0cnVjdHVyZXMuICBUaGUgZmlyc3QgdXRpbGl0eSBmdW5jdGlvbiBpcyBhYm9ydC4gIFRoZSBhYm9ydCBwcm9jZWR1cmUgYWNjZXB0cyBhIHN0cmluZyBhcmd1bWVudCB3aGljaCB3aWxsIGJlIGRpc3BsYXllZCBpbiB0aGUgZXJyb3IgbWVzc2FnZSwgYWJvcnQgcmV0dXJucyBub3RoaW5nIGFuZCB3aWxsIGltbWVkaWF0ZWx5IGFib3J0IHByb2Nlc3Npbmcgb2YgdGhlIGhhbmRsZXIgYW5kIHJldHVybiBhIEhUVFBfSU5URVJOQUxfU0VSVkVSX0VSUk9SLiAgVGhlIHJlYWRfcG9zdCBwcm9jZWR1cmUgd2lsbCByZWFkIFBPU1QgcmVxdWVzdHMsIGl0IGFjY2VwdHMgbm8gYXJndW1lbnRzIGFuZCByZXR1cm5zIG5vdGhpbmcuICByZWFkX3Bvc3Qgd2lsbCBzZXQgYW4gYXJyYXkgbmFtZWQgcHJhbSBpbiB0aGUgbG9jYWwgbmFtZXNwYWNlIHdpdGggYWxsIHRoZSByZWFkIGRhdGEgZnJvbSB0aGUgUE9TVC4gIFRoZXJlIGlzIGFsc28gYSBzcGVjaWFsIHByb2NlZHVyZSBjYWxsZWQgb3V0cHV0IHdoaWNoIGhlbHBzIHdyaXRlIGxhcmdlIGFtb3VudHMgb2YgZGF0YSB0byBhIGNsaWVudC4gIFRoZSBvdXRwdXQgcHJvY2VkdXJlIGVzc2VudGlhbGx5IGNhbGxzIHJwdXRzIGZvciBlYWNoIGxpbmUsIG11bHRpcGxlIGxpbmVzIG11c3QgYmUgY29udGFpbmVkIHdpdGhpbiBjdXJseSBicmFjZXMgKGxpa2UgdGhpczogb3V0cHV0IHsgySB9KS4gIFRoZSBuZXh0IHR3byBwcm9jZWR1cmVzIHJlYWQgYW5kIHdyaXRlIHZhcmlhYmxlcyB0byB0aGUgcmVxdWVzdF9yZWMgc3RydWN0dXJlIGluIHRoZSBBcGFjaGUgQVBJLiAgVG8gcmVhZCByZXF1ZXN0X3JlYyB2YXJpYWJsZXMgd2UgdXNlIHRoZSBjb21tYW5kIHIsIHRvIHNldCByZXF1ZXN0X3JlYyB2YXJpYWJsZXMgd2UgdXNlIHRoZSBjb21tYW5kIHJfc2V0LiAgQWxsIHZhcmlhYmxlcyBhcmUgcmVhZGFibGUgYnV0IG5vdCBhbGwgdmFyaWFibGVzIGFyZSB3cml0YWJsZS4KLQotciBQcm9jZWR1cmUgQXJndW1lbnRzCi1hbGxvd2VkCVJldHVybnMgaW50ZWdlcglSZXF1aXJlcyA2NC1iaXQgaW50ZWdlcgotYWxsb3dlZF9tZXRob2RzCVJldHVybnMgbGlzdCBvZiBzdHJpbmdzCVJlcXVpcmVzIGxpc3Qgb2Ygc3RyaW5ncwotYWxsb3dlZF94bWV0aG9kcwlSZXR1cm5zIGxpc3Qgb2Ygc3RyaW5ncwlSZXF1aXJlcyBsaXN0IG9mIHN0cmluZ3MKLWFwX2F1dGhfdHlwZQlSZXR1cm5zIHN0cmluZwlSZXF1aXJlcyBzdHJpbmcKLWFyZ3MJUmV0dXJucyBzdHJpbmcJUmVxdWlyZXMgc3RyaW5nIAotYXNzYmFja3dhcmRzCVJldHVybnMgaW50ZWdlcglSZXF1aXJlcyBpbnRlZ2VyIAotYm91bmRhcnkJUmV0dXJucyBzdHJpbmcJTm90IHdyaXRhYmxlCi1ieXRlc19zZW50CVJldHVybnMgaW50ZWdlcglOb3Qgd3JpdGFibGUKLWNodW5rZWQJUmV0dXJucyBpbnRlZ2VyCU5vdCB3cml0YWJsZQotY2xlbmd0aAlSZXR1cm5zIGxvbmcgaW50ZWdlcglOb3Qgd3JpdGFibGUKLWNvbnRlbnRfZW5jb2RpbmcJUmV0dXJucyBzdHJpbmcJUmVxdWlyZXMgc3RyaW5nCi1jb250ZW50X3R5cGUJUmV0dXJucyBzdHJpbmcJUmVxdWlyZXMgc3RyaW5nIAotZXJyX2hlYWRlcnNfb3V0CVJldHVybnMgbGlzdCBvZiBzdHJpbmdzIGFuZCBzZXRzIGVycl9oZWFkZXJzX291dCBhcnJheQlSZXF1aXJlcyBoZWFkZXIgbmFtZSBhbmQgdmFsdWUgc3RyaW5nCi1leHBlY3RpbmdfMTAwCVJldHVybnMgaW50ZWdlcglOb3Qgd3JpdGFibGUKLWZpbGVuYW1lCVJldHVybnMgc3RyaW5nCVJlcXVpcmVzIHN0cmluZwotaGFuZGxlcglSZXR1cm5zIHN0cmluZwlOb3Qgd3JpdGFibGUKLWhlYWRlcnNfaW4JUmV0dXJucyBsaXN0IG9mIHN0cmluZ3MgYW5kIHNldHMgaGVhZGVyc19pbiBhcnJheQlOb3Qgd3JpdGFibGUKLWhlYWRlcnNfb3V0CVJldHVybnMgbGlzdCBvZiBzdHJpbmdzIGFuZCBzZXRzIGhlYWRlcnNfb3V0IGFycmF5CVJlcXVpcmVzIGhlYWRlciBuYW1lIGFuZCB2YWx1ZSBzdHJpbmcgCi1oZWFkZXJfb25seQlSZXR1cm5zIGludGVnZXIJUmVxdWlyZXMgaW50ZWdlciAKLWhvc3RuYW1lCVJldHVybnMgc3RyaW5nCU5vdCB3cml0YWJsZQotbWV0aG9kCVJldHVybnMgc3RyaW5nCU5vdCB3cml0YWJsZQotbWV0aG9kX251bWJlcglSZXR1cm5zIGludGVnZXIJTm90IHdyaXRhYmxlCi1tdGltZQlSZXR1cm5zIGludGVnZXIJTm90IHdyaXRhYmxlCi1ub3RlcwlSZXR1cm5zIGxpc3Qgb2Ygc3RyaW5ncyBhbmQgc2V0cyBub3RlcyBhcnJheQlSZXF1aXJlcyBub3RlIG5hbWUgYW5kIHZhbHVlIHN0cmluZwotbm9fY2FjaGUJUmV0dXJucyBpbnRlZ2VyCVJlcXVpcmVzIGludGVnZXIKLW5vX2xvY2FsX2NvcHkJUmV0dXJucyBpbnRlZ2VyCVJlcXVpcmVzIGludGVnZXIgCi1wYXJzZWRfdXJpCVJldHVybnMgbGlzdCBvZiBzdHJpbmdzCVJlcXVpcmVzIHN0cmluZwotcGF0aF9pbmZvCVJldHVybnMgc3RyaW5nCVJlcXVpcmVzIHN0cmluZwotcHJvdG9jb2wJUmV0dXJucyBzdHJpbmcJUmVxdWlyZXMgc3RyaW5nCi1wcm90b19udW0JUmV0dXJucyBpbnRlZ2VyCVJlcXVpcmVzIGludGVnZXIKLXByb3h5cmVxCVJldHVybnMgaW50ZWdlcglSZXF1aXJlcyBpbnRlZ2VyCi1yYW5nZQlSZXR1cm5zIHN0cmluZwlOb3Qgd3JpdGFibGUKLXJlYWRfYm9keQlSZXR1cm5zIGludGVnZXIJTm90IHdyaXRhYmxlCi1yZWFkX2NodW5rZWQJUmV0dXJucyBpbnRlZ2VyCU5vdCB3cml0YWJsZQotcmVhZF9sZW5ndGgJUmV0dXJucyBsb25nIGludGVnZXIJTm90IHdyaXRhYmxlCi1yZW1haW5pbmcJUmV0dXJucyBsb25nIGludGVnZXIJTm90IHdyaXRhYmxlCi1yZXF1ZXN0X3RpbWUJUmV0dXJucyBsb25nIGludGVnZXIJTm90IHdyaXRhYmxlCi1zZW50X2JvZHljdAlSZXR1cm5zIGludGVnZXIJTm90IHdyaXRhYmxlCi1zdGF0dXMJUmV0dXJucyBpbnRlZ2VyCU5vdCB3cml0YWJsZQotc3RhdHVzX2xpbmUJUmV0dXJucyBzdHJpbmcJTm90IHdyaXRhYmxlCi1zdWJwcm9jZXNzX2VudglSZXR1cm5zIGxpc3Qgb2Ygc3RyaW5ncyBhbmQgc2V0cyBzdWJwcm9jZXNzX2VudiBhcnJheQlSZXF1aXJlcyBuYW1lIGFuZCB2YWx1ZSBzdHJpbmcKLXRoZV9yZXF1ZXN0CVJldHVybnMgc3RyaW5nCVJlcXVpcmVzIHN0cmluZyAKLXVucGFyc2VkX3VyaQlSZXR1cm5zIHN0cmluZwlSZXF1aXJlcyBzdHJpbmcKLXVyaQlSZXR1cm5zIHN0cmluZwlSZXF1aXJlcyBzdHJpbmcgCi11c2VyCVJldHVybnMgc3RyaW5nCVJlcXVpcmVzIHN0cmluZyAKLXZsaXN0X3ZhbGlkYXRvcglSZXR1cm5zIHN0cmluZwlSZXF1aXJlcyBzdHJpbmcKLQotciBjb25uZWN0aW9uIFByb2NlZHVyZSBBcmd1bWVudHMKLXJlbW90ZV9pcAlSZXR1cm5zIHN0cmluZwlOb3Qgd3JpdGFibGUKLXJlbW90ZV9ob3N0CVJldHVybnMgc3RyaW5nCU5vdCB3cml0YWJsZQotcmVtb3RlX2xvZ25hbWUJUmV0dXJucyBzdHJpbmcJTm90IHdyaXRhYmxlCi1hYm9ydGVkCVJldHVybnMgaW50ZWdlcglOb3Qgd3JpdGFibGUKLWtlZXBhbGl2ZQlSZXR1cm5zIGludGVnZXIJTm90IHdyaXRhYmxlCi1kb3VibGVyZXZlcnNlCVJldHVybnMgaW50ZWdlcglOb3Qgd3JpdGFibGUKLWtlZXBhbGl2ZXMJUmV0dXJucyBpbnRlZ2VyCU5vdCB3cml0YWJsZQotbG9jYWxfaXAJUmV0dXJucyBzdHJpbmcJTm90IHdyaXRhYmxlCi1sb2NhbF9ob3N0CVJldHVybnMgc3RyaW5nCU5vdCB3cml0YWJsZQotaWQJUmV0dXJucyBzdHJpbmcJTm90IHdyaXRhYmxlCi1ub3RlcwlSZXR1cm5zIGxpc3Qgb2Ygc3RyaW5ncyBhbmQgc2V0cyBjb25uZWN0aW9uX25vdGVzIGFycmF5CVJlcXVpcmVzIG5vdGUgbmFtZSBhbmQgdmFsdWUgc3RyaW5nCi0KLXIgc2VydmVyIFByb2NlZHVyZSBBcmd1bWVudHMKLWRlZm5fbmFtZQlSZXR1cm5zIHN0cmluZwlOb3Qgd3JpdGFibGUKLWRlZm5fbGluZV9udW1iZXIJUmV0dXJucyBpbnRlZ2VyCU5vdCB3cml0YWJsZQotc2VydmVyX2FkbWluCVJldHVybnMgc3RyaW5nCU5vdCB3cml0YWJsZQotc2VydmVyX2hvc3RuYW1lCVJldHVybnMgc3RyaW5nCU5vdCB3cml0YWJsZQotcG9ydAlSZXR1cm5zIGludGVnZXIJTm90IHdyaXRhYmxlCi1lcnJvcl9mbmFtZQlSZXR1cm5zIHN0cmluZwlOb3Qgd3JpdGFibGUKLWxvZ2xldmVsCVJldHVybnMgc3RyaW5nCU5vdCB3cml0YWJsZQotaXNfdmlydHVhbAlSZXR1cm5zIHN0cmluZwlOb3Qgd3JpdGFibGUKLWFkZHJzCVJldHVybnMgbGlzdAlOb3Qgd3JpdGFibGUKLXRpbWVvdXQJUmV0dXJucyBpbnRlZ2VyCU5vdCB3cml0YWJsZQota2VlcF9hbGl2ZV90aW1lb3V0CVJldHVybnMgaW50ZWdlcglOb3Qgd3JpdGFibGUKLWtlZXBfYWxpdmVfbWF4CVJldHVybnMgaW50ZWdlcglOb3Qgd3JpdGFibGUKLWtlZXBfYWxpdmUJUmV0dXJucyBpbnRlZ2VyCU5vdCB3cml0YWJsZQotcGF0aAlSZXR1cm5zIHN0cmluZwlOb3Qgd3JpdGFibGUKLW5hbWVzCVJldHVybnMgbGlzdCBvZiBzdHJpbmdzCU5vdCB3cml0YWJsZQotd2lsZF9uYW1lcwlSZXR1cm5zIGxpc3Qgb2Ygc3RyaW5ncwlOb3Qgd3JpdGFibGUKLWxpbWl0X3JlcV9saW5lCVJldHVybnMgaW50ZWdlcglOb3Qgd3JpdGFibGUKLWxpbWl0X3JlcV9maWVsZHNpemUJUmV0dXJucyBpbnRlZ2VyCU5vdCB3cml0YWJsZQotbGltaXRfcmVxX2ZpZWxkcwlSZXR1cm5zIGludGVnZXIJTm90IHdyaXRhYmxlCi0KLVRoZSBmb2xsb3dpbmcgc2NyaXB0IHdpbGwgaWxsdXN0cmF0ZSBwb3J0aW9ucyBvZiBtb2RfdGNsIHRoYXQgd2lsbCBiZSBtb3N0IGNvbW1vbmx5IHVzZWQuICBUaGlzIGZpbGUgaXMgY2FsbGVkIGV4YW1wbGUudG0uCi0KLXByb2MgY29udGVudF9oYW5kbGVyIHsgfSB7Ci0gICAgICAgIHZhcmlhYmxlIHByYW0KLSAgICAgICAgdmFyaWFibGUgZW52Ci0gICAgICAgIHZhcmlhYmxlIDo6YXBhY2hlOjpPSwotICAgICAgICB2YXJpYWJsZSA6OmFwYWNoZTo6TV9QT1NUCi0KLSAgICAgICAgaWYgeyBbciBtZXRob2RfbnVtYmVyXSA9PSAkTV9QT1NUIH0gewotICAgICAgICAgICAgICAgIHJlYWRfcG9zdAotICAgICAgICB9Ci0KLSAgICAgICAgcl9zZXQgY29udGVudF90eXBlICJ0ZXh0L2h0bWwiCi0KLSAgICAgICAgYXBfY3JlYXRlX2Vudmlyb25tZW50Ci0gICAgICAgIAotICAgICAgICBzZXQgZW52X2xpc3QgW2FycmF5IG5hbWVzIGVudl0KLSAgICAgICAgc2V0IHBybV9saXN0IFthcnJheSBuYW1lcyBwcmFtXQotCi0gICAgICAgIGFwX3NlbmRfaHR0cF9oZWFkZXIKLSAgICAgICAgCi0gICAgICAgIHJwdXRzICI8SFI+PEI+RW52aXJvbm1lbnQ8L0I+PEJSPjxCUj4iCi0gICAgICAgIAotICAgICAgICBmb3JlYWNoIGkgJGVudl9saXN0IHsKLSAgICAgICAgICAgICAgICBycHV0cyAiJGk9JGVudigkaSk8QlI+IgotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBycHV0cyAiPEhSPjxCPlBvc3RlZCBWYXJpYWJsZXM8L0I+PEJSPjxCUj4iCi0gICAgICAgIAotICAgICAgICBmb3JlYWNoIGkgJHBybV9saXN0IHsKLSAgICAgICAgICAgICAgICBycHV0cyAiJGk9JHByYW0oJGkpPEJSPiIKLSAgICAgICAgfQotCi0gICAgICAgIHJwdXRzICI8SFI+IgotCi0gICAgICAgIG91dHB1dCB7Ci0gICAgICAgICAgICAgICAgPENFTlRFUj4KLSAgICAgICAgICAgICAgICA8Rk9STSBNRVRIT0Q9UE9TVCBBQ1RJT049W3IgdXJpXT4KLSAgICAgICAgICAgICAgICAgICAgICAgIDxJTlBVVCBUWVBFPXRleHQgTkFNRT11c2VyX2lucHV0PgotICAgICAgICAgICAgICAgICAgICAgICAgPElOUFVUIFRZUEU9c3VibWl0PgotICAgICAgICAgICAgICAgIDwvRk9STT4KLSAgICAgICAgICAgICAgICA8QlI+Ci0gICAgICAgICAgICAgICAgW2FwX2dldF9zZXJ2ZXJfdmVyc2lvbl0sIFthcF9nZXRfc2VydmVyX2J1aWx0XQotICAgICAgICAgICAgICAgIDwvQ0VOVEVSPgotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuICRPSwotfQotCi1Mb29raW5nIGF0IHRoaXMgc2NyaXB0IHdlIHNlZSB0aGF0IHRoZSBbciBtZXRob2RfbnVtYmVyXSBmdW5jdGlvbiBpcyB1c2VmdWwgaW4gZGV0ZXJtaW5pbmcgdGhlIHR5cGUgb2YgcmVxdWVzdCBiZWluZyBwcm9jZXNzZWQuICBNX1BPU1QgaXMgYW4gQXBhY2hlIEFQSSBjb25zdGFudCB0aGF0IHNwZWNpZmllcyBhIHJlcXVlc3QgYXMgYW4gaHR0cCBQT1NUIHJlcXVlc3QgdHlwZS4gIFRoZXJlIGFyZSBzZXZlcmFsIG90aGVyIHJlcXVlc3QgdHlwZXMgZGVmaW5lZCBpbiB0aGUgQXBhY2hlIEFQSSBhbHNvLCB0aGUgb3RoZXIgbW9zdCB1c2VmdWwgb25lIHdpbGwgYmUgTV9HRVQuICBJZiB0aGUgcmVxdWVzdCBwcm9jZXNzZWQgaW4gdGhlIGV4YW1wbGUudG0gc2NyaXB0IGlzIGEgUE9TVCB0aGVuIHdlIG1ha2UgYSBjYWxsIHRvIHJlYWRfcG9zdCB0byBwYXJzZSB0aGUgUE9TVCBkYXRhIGFuZCBzdG9yZSB0aGUgcmVzdWx0cyBpbiB0aGUgYXJyYXkgcHJhbS4gIE5leHQgd2UgaW5pdGlhbGl6ZSB0aGUgZW52aXJvbm1lbnQgd2l0aCBhIGNhbGwgdG8gW2FwX2NyZWF0ZV9lbnZpcm9ubWVudF0sIHRoaXMgd2lsbCBzZXQgdXAgdGhlIGVudiBhcnJheSB3aXRoIGVudmlyb25tZW50IHZhcmlhYmxlcy4gIE5vdGljZSB0aGF0IEFwYWNoZSB3aWxsIGFkZCBlbnZpcm9ubWVudCB2YXJpYWJsZXMgdGhhdCBjb3JyZXNwb25kIHRvIENHSSBwYXJhbWV0ZXJzLCB0aGlzIGlzIHVzZWZ1bCBmb3IgZW11bGF0aW5nIENHSSBmdW5jdGlvbmFsaXR5IGFuZCBhbGxvd3MgcG9ydGluZyBvZiBDR0kgc2NyaXB0cyB0byBiZSBtb3JlIGZsZXhpYmxlLiAgVGhlIGNvbnRlbnRfaGFuZGxlciBpbiBleGFtcGxlLnRtIHdpbGwgZXNzZW50aWFsbHkgcHJpbnQgZW52aXJvbm1lbnQgdmFyaWFibGVzIGFuZCBhbnkgcHJhbSB2YXJpYWJsZXMgdGhhdCB3ZXJlIHNldCBmcm9tIGEgUE9TVCByZXF1ZXN0LiAgVGhlIHJlbWFpbmRlciBvZiB0aGUgc2NyaXB0IHVzZXMgdGhlIHByb3ZpZGVkIG91dHB1dCBwcm9jZWR1cmUgdG8gc2VuZCBhIGJsb2NrIG9mIEhUTUwgdG8gdGhlIGNsaWVudCwgbm90aWNlIHRoYXQgcHJvY2VkdXJlIGNhbGxzIGluIG91dHB1dCB3aWxsIHdvcmsgYXMgZXhwZWN0ZWQuCi0KLUFkZGl0aW9uYWwgUmVzb3VyY2VzCi0KLU1vZF90Y2wgaXMgcGFydCBvZiB0aGUgVGNsIEFwYWNoZSBQcm9qZWN0IGxvY2F0ZWQgYXQgaHR0cDovL3RjbC5hcGFjaGUub3JnLiAgSW5mb3JtYXRpb24gYWJvdXQgdGhlIFRjbCBBcGFjaGUgUHJvamVjdCBhbmQgb3RoZXIgQXBhY2hlIG1vZHVsZXMgdXNpbmcgVGNsIGNhbiBiZSBmb3VuZCBoZXJlLiAgSW5mb3JtYXRpb24gb24gZ2VuZXJhbCBUY2wgdG9waWNzIGFuZCBkZXZlbG9wbWVudCBpcyBsb2NhdGVkIGF0IGh0dHA6Ly93d3cudGNsLnRrLgorU2VlIGh0dHA6Ly90Y2wuYXBhY2hlLm9yZy9tb2RfdGNsLyBmb3IgaW5zdGFsbGF0aW9uIGluc3RydWN0aW9ucy4KZGlmZiAtLWdpdCBhL1JFQURNRSBiL1JFQURNRQppbmRleCA3ODIwMTAyLi4zYzQ1YmI3IDEwMDY0NAotLS0gYS9SRUFETUUKKysrIGIvUkVBRE1FCkBAIC04LDcgKzgsNyBAQAogRG9jdW1lbnRhdGlvbgogLS0tLS0tLS0tLS0tLQogCi1TZWUgdGhlIElOU1RBTEwgZmlsZS4KK1NlZSBodHRwOi8vdGNsLmFwYWNoZS5vcmcvbW9kX3RjbC8KIAogdGNsX2NvcmUuYzoKICAgY29yZSByb3V0aW5lcywgaGFuZGxlcnMsIGNvbmZpZ3VyYXRpb24sIGluaXRpYWxpemF0aW9uCg==