PCFET0NUWVBFIGh0bWwKICBQVUJMSUMgIi0vL1czQy8vRFREIFhIVE1MIDEuMCBUcmFuc2l0aW9uYWwvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwxL0RURC94aHRtbDEtdHJhbnNpdGlvbmFsLmR0ZCI+CjxodG1sIGxhbmc9ImVuLXVzIiB4bWw6bGFuZz0iZW4tdXMiPgo8aGVhZD4KPCEtLSAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogKiBDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCiAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CiAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCiAqIAogKiBDb250cmlidXRvcnM6CiAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovIC0tPgogPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgaHJlZj0iLi4vLi4vb3JnLmVjbGlwc2Uud3N0LmRvYy51c2VyL2NvbW1vbi5jc3MiIC8+Cgo8dGl0bGU+Q3JlYXRpbmcgV2ViIHNlcnZpY2VzIHdpdGggdGhlIEFwYWNoZSBBeGlzIHJ1bi10aW1lIGVudmlyb25tZW50PC90aXRsZT4KPC9oZWFkPgo8Ym9keSBpZD0iYXhpc292ZXJ2aWV3Ij48YSBuYW1lPSJheGlzb3ZlcnZpZXciPjwhLS0gLS0+PC9hPgoKPGgxIGNsYXNzPSJ0b3BpY3RpdGxlMSI+Q3JlYXRpbmcgV2ViIHNlcnZpY2VzIHdpdGggdGhlIEFwYWNoZSBBeGlzIHJ1bi10aW1lIGVudmlyb25tZW50PC9oMT4KPGRpdj48cD5UaGlzIHJ1bi10aW1lIGVudmlyb25tZW50IGlzIGZvciB1c2VycyB3aG8gcHJlZmVyIHRvIGRldmVsb3AgZm9yCnRoZSBvcGVuIEFwYWNoZSBBeGlzIHBsYXRmb3JtLiBJdCBpcyBmb3Igbm9uLXByb2R1Y3Rpb24gdXNlIG9ubHkuIEF4aXMgaXMKdGhlIHRoaXJkIGdlbmVyYXRpb24gb2YgdGhlIEFwYWNoZSBTT0FQIGltcGxlbWVudGF0aW9uLqAgSXQgZXZvbHZlZCBmcm9tCkFwYWNoZSBTT0FQICh3aGljaCBiZWdhbiBhdCBJQk08c3VwPq48L3N1cD4gYXMgU09BUDRKKSB0byBtYWtlIHRoZSBTT0FQIGVuZ2luZSBtb3JlIGZsZXhpYmxlLApjb25maWd1cmFibGUsIGFuZCBhYmxlIHRvIGhhbmRsZSBib3RoIFNPQVAgYW5kIHRoZSB1cGNvbWluZyBYTUwgUHJvdG9jb2wgc3BlY2lmaWNhdGlvbgpmcm9tIHRoZSBXM0Mgb3Blbi1zb3VyY2UgZWZmb3J0LjwvcD4KPGRpdiBjbGFzcz0ic2VjdGlvbiI+PGg0IGNsYXNzPSJzZWN0aW9udGl0bGUiPk92ZXJ2aWV3PC9oND48cD5BeGlzIGlzIGJhc2VkIG9uIEpTUiAxMDEgSmF2YZkgQVBJcwpmb3IgWE1MIGJhc2VkIFJQQyAoYWxzbyBrbm93biBhcyBKQVgtUlBDKS6gIEpTUiAxMDEgcHJvdmlkZXMgYSBzaW5nbGUKaW50ZXJmYWNlIHRvIGFueSBYTUwtYmFzZWQgUlBDIG1lY2hhbmlzbSwgaW5jbHVkaW5nIFNPQVAuPC9wPgo8cD5XZWIgc2VydmljZXMKYXBwbGljYXRpb24gc2VydmVyIHVzZXMgQXhpcyB3aXRoaW4gYSBzZXJ2bGV0IHRvIHByb2Nlc3MgdGhlIGluY29taW5nIG1lc3NhZ2UsCmV4dHJhY3QgaW5mb3JtYXRpb24gZnJvbSB0aGUgbWVzc2FnZSBoZWFkZXJzLCBhbmQgcGF5bG9hZHMsIGFzIHdlbGwgYXMgY29uZm9ybWluZwp0byB0aGUgcGFydGljdWxhciBSUEMgc2VtYW50aWNzLiA8L3A+CjxwPlRoZSBsZXZlbCBvZiBBeGlzIGN1cnJlbnRseSBzdXBwb3J0ZWQKYnkgdGhpcyBwcm9kdWN0IGlzIDEuMC4goEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIEF4aXMsCnJlZmVyIHRvICA8YSBocmVmPSJodHRwOi8veG1sLmFwYWNoZS5vcmcvYXhpcyIgdGFyZ2V0PSJfYmxhbmsiPmh0dHA6Ly94bWwuYXBhY2hlLm9yZy9heGlzPC9hPi4KVGhlIFVzZXIncyBHdWlkZSBhdmFpbGFibGUgb24gdGhpcyBzaXRlIHByb3ZpZGVzIG1vcmUgaW4tZGVwdGggaW5mb3JtYXRpb24KYWJvdXQgdXNpbmcgV2ViIHNlcnZpY2VzIHdpdGggQXBhY2hlIEF4aXMuIFRoZSBSZWFkaW5nIEd1aWRlIGxpc3RzIHNldmVyYWwKZG9jdW1lbnRzIHRvIGZ1cnRoZXIgeW91ciB1bmRlcnN0YW5kaW5nIG9mIEF4aXMuPC9wPgo8ZGl2IGNsYXNzPSJub3RlIj48c3BhbiBjbGFzcz0ibm90ZXRpdGxlIj5Ob3RlOjwvc3Bhbj4gVGhlIHN1cHBvcnQgZm9yCkF4aXMgaXMgbGltaXRlZCB0byB2YWxpZGF0aW9uIHRoYXQgdGhlIGFwcGxpY2F0aW9uCmlzIGludm9raW5nIHRoZSBBeGlzIGVtaXR0ZXJzIGNvcnJlY3RseS4gU3VwcG9ydCBmb3Igb3RoZXIgQXhpcyBpc3N1ZXMgc2hvdWxkCmJlIGRpcmVjdGVkIHRvIDxhIGhyZWY9Imh0dHA6Ly93cy5hcGFjaGUub3JnL2F4aXMiIHRhcmdldD0iX2JsYW5rIj5odHRwOi8vd3MuYXBhY2hlLm9yZy9heGlzPC9hPjwvZGl2Pgo8L2Rpdj4KPC9kaXY+CjxkaXY+Cjx1bCBjbGFzcz0idWxsaW5rcyI+CjxsaSBjbGFzcz0idWxjaGlsZGxpbmsiPjxzdHJvbmc+PGEgaHJlZj0iLi4vdGFza3MvdHdzYmVhbmEuaHRtbCI+Q3JlYXRpbmcgYSBXZWIgc2VydmljZSBmcm9tIGEgSmF2YSBiZWFuIHVzaW5nIHRoZSBBcGFjaGUgQXhpcyBydW4tdGltZSBlbnZpcm9ubWVudDwvYT48L3N0cm9uZz48YnIgLz4KVGhlIFdlYiBTZXJ2aWNlIHdpemFyZCBhc3Npc3RzIHlvdSBpbiBjcmVhdGluZyBhIG5ldyBXZWIgc2VydmljZSwKY29uZmlndXJpbmcgaXQgZm9yIGRlcGxveW1lbnQsIGFuZCBkZXBsb3lpbmcgdGhlIFdlYiBzZXJ2aWNlIHRvIGEgc2VydmVyLgpPbmNlIHlvdXIgV2ViIHNlcnZpY2UgaXMgZGVwbG95ZWQsIHRoZSB3aXphcmQgYXNzaXN0cyB5b3UgaW4gZ2VuZXJhdGluZyB0aGUKY2xpZW50IHByb3h5IGFuZCBzYW1wbGUgYXBwbGljYXRpb24gdG8gdGVzdCB0aGUgV2ViIHNlcnZpY2UuIFdoZW4geW91IGhhdmUKY29tcGxldGVkIHRlc3RpbmcsIHlvdSBjYW4gcHVibGlzaCB5b3VyIFdlYiBzZXJ2aWNlIHRvIGEgVURESSBCdXNpbmVzcyBSZWdpc3RyeQp1c2luZyB0aGUgRXhwb3J0IHdpemFyZC48L2xpPgo8bGkgY2xhc3M9InVsY2hpbGRsaW5rIj48c3Ryb25nPjxhIGhyZWY9Ii4uL3Rhc2tzL3Rza2x3c2RsYS5odG1sIj5DcmVhdGluZyBhIEphdmEgYmVhbiBza2VsZXRvbiBmcm9tIGEgV1NETCBkb2N1bWVudCB1c2luZyB0aGUgQXBhY2hlIEF4aXMgcnVuLXRpbWUgZW52aXJvbm1lbnQ8L2E+PC9zdHJvbmc+PGJyIC8+ClRoZSBXZWIgc2VydmljZSB3aXphcmQgYXNzaXN0cyB5b3UgaW4gY3JlYXRpbmcgYSBza2VsZXRvbiBiZWFuCmZyb20gYW4gZXhpc3RpbmcgV1NETCBkb2N1bWVudC4gVGhlIHNrZWxldG9uIGJlYW4gY29udGFpbnMgYSBzZXQgb2YgbWV0aG9kcwp0aGF0IGNvcnJlc3BvbmQgdG8gdGhlIG9wZXJhdGlvbnMgZGVzY3JpYmVkIGluIHRoZSBXU0RMIGRvY3VtZW50LiBXaGVuIHRoZQpiZWFuIGlzIGNyZWF0ZWQsIGVhY2ggbWV0aG9kIGhhcyBhIHRyaXZpYWwgaW1wbGVtZW50YXRpb24gdGhhdCB5b3UgcmVwbGFjZQpieSBlZGl0aW5nIHRoZSBiZWFuLjwvbGk+CjxsaSBjbGFzcz0idWxjaGlsZGxpbmsiPjxzdHJvbmc+PGEgaHJlZj0iLi4vdGFza3MvdHNhbXBhcHBhLmh0bWwiPkdlbmVyYXRpbmcgYSBKYXZhIGNsaWVudCBwcm94eSBhbmQgYSBzYW1wbGUgYXBwbGljYXRpb24gZnJvbSBhIFdTREwgZG9jdW1lbnQgdXNpbmcgdGhlIEF4aXMgcnVuLXRpbWUgZW52aXJvbm1lbnQ8L2E+PC9zdHJvbmc+PGJyIC8+ClRoZSBXZWIgU2VydmljZSBDbGllbnQgd2l6YXJkIGFzc2lzdHMgeW91IGluIGdlbmVyYXRpbmcgYSBKYXZhIGJlYW4KcHJveHkgYW5kIGEgc2FtcGxlIGFwcGxpY2F0aW9uLiBUaGUgc2FtcGxlIFdlYiBhcHBsaWNhdGlvbiBkZW1vbnN0cmF0ZXMgaG93CnRvIGNvZGUgYSBwcm94eSBmaWxlLjwvbGk+CjwvdWw+Cgo8ZGl2IGNsYXNzPSJsaW5rbGlzdCI+PHN0cm9uZz5SZWxhdGVkIENvbmNlcHRzPC9zdHJvbmc+PGJyIC8+Cgo8ZGl2PjxhIGhyZWY9Ii4uLy4uL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9jb25jZXB0cy9jd3MuaHRtbCI+V2ViIHNlcnZpY2VzPC9hPjwvZGl2Pgo8ZGl2PjxhIGhyZWY9Ii4uLy4uL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9jb25jZXB0cy9jd3NpbndzYS5odG1sIj5Ub29scyBmb3IgV2ViIHNlcnZpY2VzIGRldmVsb3BtZW50PC9hPjwvZGl2Pgo8ZGl2PjxhIGhyZWY9Ii4uLy4uL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9jb25jZXB0cy9jamF4cnBjLmh0bWwiPkpBWC1SUEM8L2E+PC9kaXY+PC9kaXY+Cgo8ZGl2IGNsYXNzPSJsaW5rbGlzdCI+PHN0cm9uZz5SZWxhdGVkIFRhc2tzPC9zdHJvbmc+PGJyIC8+Cgo8ZGl2PjxhIGhyZWY9Ii4uLy4uL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci90YXNrcy90b3ZlcndzLmh0bWwiPiBEZXZlbG9waW5nIFdlYiBzZXJ2aWNlczwvYT48L2Rpdj48L2Rpdj4KPC9kaXY+CjwvYm9keT4KPC9odG1sPg==