QXBhY2hlIE9wZW5NZWV0aW5ncyBbSW5jdWJhdGluZ10gLSBSRUFETUUNCkxpY2Vuc2VkIHVuZGVyIEFwYWNoZSBMaWNlbnNlIDIuMCAtIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMA0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCg0KDQpBYm91dA0KPT09PT0NCkFwYWNoZSBPcGVubWVldGluZ3MgW0luY3ViYXRpbmddIHByb3ZpZGVzIHZpZGVvIGNvbmZlcmVuY2luZywgaW5zdGFudCBtZXNzYWdpbmcsIHdoaXRlIGJvYXJkLCBjb2xsYWJvcmF0aXZlIA0KZG9jdW1lbnQgZWRpdGluZyBhbmQgb3RoZXIgZ3JvdXB3YXJlIHRvb2xzIHVzaW5nIEFQSSBmdW5jdGlvbnMgb2YgdGhlIFJlZDUgU3RyZWFtaW5nIA0KU2VydmVyIGZvciBSZW1vdGluZyBhbmQgU3RyZWFtaW5nLiANCg0KDQpSZWxlYXNlIE5vdGVzDQo9PT09PT09PT09PT09DQpzZWUgQ0hBTkdFUyBmaWxlIGZvciBkZXRhaWxlZCBsb2cNCg0KX1Jlc3R5bGVkIFVJXw0KVGhlIFVJIGhhcyBiZWVuIHJlLWZhY3RvcmVkIHRvIGhhdmUgYSBjb21tb24gbG9vayBhbmQgZmVlLiBBZGRpdGlvbmFsbHkgbW9zdCANCm9mIHRoZSBpY29ucyBhcmUgbm93IGxvYWRlZCBhdCBydW50aW1lLiBUaGF0IG1lYW5zIHlvdSBjYW4gY2hhbmdlIGNvbG9ycyBhbmQgaWNvbnMgYXQgDQpydW50aW1lIHdpdGhvdXQgY2hhbmdpbmcgdGhlIHNvdXJjZSBjb2RlLiANCk1vcmUgaW5mbzogaHR0cDovL2luY3ViYXRvci5hcGFjaGUub3JnL29wZW5tZWV0aW5ncy90aGVtZXMtYW5kLWJyYW5kaW5nLmh0bWwNCg0KX05ldyBDYWxlbmRhcl8NClRoZSBjYWxlbmRhciB3YXMgY29tcGxldGVseSByZS1mYWN0b3JlZCBhbmQgZ290IGEgbmV3IFVJIHRoYXQgd2FzIGJ1aWxkIGZyb20gDQpzY3JhdGNoIHRoYXQgYWxzbyBhZGRzIHNvbWUgbmV3IGZ1bmN0aW9ucy4gRm9yIGV4YW1wbGUgaXQgaXMgcG9zc2libGUgbm93IHRvIHBhc3N3b3JkIA0KcHJvdGVjdCBpbnZpdGF0aW9ucyBzZW5kIHZpYSB0aGUgY2FsZW5kYXIuIEZ1cnRoZXIgdGhlIHRpbWV6b25lIGhhbmRsaW5nIGhhcyBiZWVuIA0KcmUtZmFjdG9yZWQgYW5kIHRoZXJlIGlzIG5vdyBhbHNvIGEgU09BUC9SRVNUIEFQSSB0byBoYW5kbGUgY2FsZW5kYXIgRXZlbnRzIA0KKCBodHRwOi8vaW5jdWJhdG9yLmFwYWNoZS5vcmcvb3Blbm1lZXRpbmdzL1NvYXBSZXN0QVBJLmh0bWwgKQ0KDQpfSW50ZWdyYXRpb24gd2l0aCBBc3Rlcmlza18NClRoZSBhcHBsaWNhdGlvbiBjb250YWlucyBub3cgbW9kdWxlcyB0byBkaXJlY3RseSBpbnRlZ3JhdGUgT3Blbk1lZXRpbmdzIHdpdGggQXN0ZXJpc2sgDQpmb3IgU0lQL1ZvSVAgaW50ZWdyYXRpb24uIEl0IGVuYWJsZXMgeW91IHRvIGRpYWwgaW4gYXMgd2VsbCBhcyBkaWFsIG91dCBvZiBjb25mZXJlbmNlIA0Kcm9vbSB0byBTSVAgb3IgbGFuZGxhbmUgcGhvbmVzLiANCk1vcmUgaW5mbzogaHR0cDovL2luY3ViYXRvci5hcGFjaGUub3JnL29wZW5tZWV0aW5ncy92b2lwLXNpcC1pbnRlZ3JhdGlvbi5odG1sDQoNCl9JbnN0YWxsL0JhY2t1cC9JbXBvcnQgdmlhIGNvbW1hbmQgbGluZV8NCiBBZGRpdGlvbmFsbHkgdG8gdGhlIFdlYi1JbnRlcmZhY2UgeW91IGNhbiBub3cgZG8gYWxsIGJhc2ljIG9wZXJhdGlvbnMgdmlhIHRoZSBjb25zb2xlLiANCiBKdXN0IGNkIHRvIHlvdXIgT3Blbk1lZXRpbmdzIGluc3RhbGxhdGlvbiBkaXJlY3RvcnkgYW5kIHR5cGUgk2FkbWlulCBhbmQgeW91IHdpbGwgc2VlIA0KIGFsbCBvcHRpb25zIGF2YWlsYWJsZSAoT3Blbk1lZXRpbmdzIHNlcnZpY2Ugc2hvdWxkIGJlIHNodXQgZG93biB3aGlsZSBkb2luZyB0aG9zZSBvcGVyYXRpb25zKQ0KDQpfVXNpbmcgU1dGMTAgZm9yIFZpZGVvIENvbXBvbmVudHNfDQpBbGwgYXVkaW8vdmlkZW8gcmVsYXRlZCBjb21wb25lbnRzIG5vdyB1c2UgU1dGMTAgZm9yIGJyb2FkY2FzdGluZyBhbmQgcmVjZWl2aW5nIA0KYXVkaW8gYW5kIHZpZGVvIHNpZ25hbHMuIFRoYXQgbWFrZXMgaXQgcG9zc2libGUgdG8gdXNlIGZvciBleGFtcGxlIHRoZSBlY2hvIGNhbmNlbGxhdGlvbiANCmZlYXR1cmUgYnVpbGQgaW4gdGhlIFNXRjEwIEZsYXNoIFBsYXllci4NCg0KVGhlcmUgYXJlIGEgbG90IG1vcmUgaW1wcm92ZW1lbnRzIGZvciBleGFtcGxlIHRvIHJlY29yZGluZywgc2NyZWVuIHNoYXJpbmcgYW5kIG5ldyBsYXlvdXQgDQpvcHRpb25zLiBUbyBzZWUgdGhlIGZ1bGwgbGlzdCBwbGVhc2UgcmV2aWV3IG91ciBSZWxlYXNlIE5vdGVzIGZvciBWZXJzaW9uIDIuMDoNCmh0dHBzOi8vaXNzdWVzLmFwYWNoZS5vcmcvamlyYS9zZWN1cmUvUmVsZWFzZU5vdGUuanNwYT9wcm9qZWN0SWQ9MTIzMTI3MjAmdmVyc2lvbj0xMjMxOTE5Nw0KDQpUaGVyZSBhcmUgYWxzbyBuZXcgSW50ZWdyYXRpb24gUGx1Z2lucyBhdmFpbGFibGUhDQoNCl9JbnRlZ3JhdGlvbiBpbnRvIEF0bGFzc2lhbiBKaXJhXw0KVGhlcmUgaXMgYSBwbHVnaW4gaW4gb3VyIFNWTiB0aGF0IHdpbGwgYmUgcmVsZWFzZWQgc29vbiANCmZvciBpbnRlZ3JhdGlvbiB3aXRoIEF0bGFzc2lhbiBKaXJhLCB5b3UgY2FuIHdhdGNoIGEgZGVtbyBoZXJlOiANCmh0dHBzOi8vYmxvZ3MuYXBhY2hlLm9yZy9vcGVubWVldGluZ3MvZW50cnkvamlyYV9pbnRlZ3JhdGlvbl9hcGFjaGVfb3Blbm1lZXRpbmdzX2RlbW8NCg0KX0ludGVncmF0aW9uIGludG8gQXRsYXNzaWFuIENvbmZsdWVuY2VfDQpTYW1lIGZvciBBdGxhc3NpYW4gQ29uZmx1ZW5jZSBXaWtpLCB5b3UgY2FuIHdhdGNoIA0KYSBkZW1vIGhlcmU6IGh0dHBzOi8vYmxvZ3MuYXBhY2hlLm9yZy9vcGVubWVldGluZ3MvZW50cnkvZGVtb192aWRlb19hYm91dF91cGNvbWluZ19hdGxhc3NpYW4NCg0KX0ltcG9ydGFudCBDaGFuZ2VzXw0KT3Blbk9mZmljZSBzZXJ2aWNlIGRvZXMgbm90IG5lZWQgYW55IG1vcmUgdG8gYmUgc3RhcnRlZC4gQnV0IHlvdSBoYXZlIA0KdG8gc2V0IHRoZSBwYXRoIHRvIE9wZW5PZmZpY2UgKG9yIExpYnJlT2ZmaWNlKSBhbmQgSk9EQ29udmVydGVyIHRvb2xzIGluIA0KT3Blbk1lZXRpbmdzIGNvbmZpZ3VyYXRpb24uIE9wZW5NZWV0aW5ncyAoYW5kIEpPRENvbnZlcnRlcikgd2lsbCBzdGFydCBhbmQgc3RvcCB0aGUgDQpPcGVuT2ZmaWNlIHNlcnZpY2Ugd2hlbiB0aGV5IG5lZWQgaXQuDQpJZiB5b3UgYXJlIHVzaW5nIE15U1FMOiBNeVNRTCBkcml2ZXIgaXMgbm8gbW9yZSBwYXJ0IG9mIHRoZSBkaXN0cmlidXRpb24gZHVlIHRvIGxpY2Vuc2UgcmVzdHJpY3Rpb25zLiANCllvdSB3aWxsIG5lZWQgdG8gZG93bmxvYWQgdGhlIEpDb25uZWN0b3IgRHJpdmVyIG9uIHlvdXIgb3duLCBzZWU6DQpodHRwOi8vaW5jdWJhdG9yLmFwYWNoZS5vcmcvb3Blbm1lZXRpbmdzL015U1FMQ29uZmlnLmh0bWwNCg0KX1VwZ3JhZGluZyBmcm9tIFZlcnNpb24gMS45IG9yIHByaW9yXw0KVG8gdXBkYXRlIGZyb20gYW4gb2xkIHZlcnNpb24gb2YgT3Blbk1lZXRpbmdzIHRvIDIueCANCnlvdSBzaG91bGQgdXNlIHRoZSBpbnRlZ3JhdGVkIEJhY2t1cCBhbmQgSW1wb3J0IHRvb2wgdGhhdCBleGlzdHMgc2luY2UgYXJvdW5kIFZlcnNpb24gMS4zLiANCllvdSBzaG91bGQgZm9sbG93IG91ciBkb2N1bWVudGF0aW9uLCANCnNlZTogaHR0cDovL2luY3ViYXRvci5hcGFjaGUub3JnL29wZW5tZWV0aW5ncy9VcGdyYWRlLmh0bWwgDQoNCg0KR2V0dGluZyBTdGFydGVkDQo9PT09PT09PT09PT09PT0NClBsZWFzZSB2aXNpdCB0aGUgcHJvamVjdCB3ZWJzaXRlIGZvciB0aGUgbGF0ZXN0IGluZm9ybWF0aW9uOg0KICAgIGh0dHA6Ly9pbmN1YmF0b3IuYXBhY2hlLm9yZy9vcGVubWVldGluZ3MvDQogICAgDQpEb2N1bWVudGF0aW9uIGZvciBJbnN0YWxsYXRpb24gYW5kIFVwZ3JhZGU6DQogICAgaHR0cDovL2luY3ViYXRvci5hcGFjaGUub3JnL29wZW5tZWV0aW5ncy9pbnN0YWxsYXRpb24uaHRtbA0KICAgIGh0dHA6Ly9pbmN1YmF0b3IuYXBhY2hlLm9yZy9vcGVubWVldGluZ3MvVXBncmFkZS5odG1sDQoNCkFsb25nIHdpdGggdGhlIGRldmVsb3BlciBtYWlsaW5nIGxpc3QgYXJjaGl2ZToNCiAgICBodHRwOi8vaW5jdWJhdG9yLmFwYWNoZS5vcmcvb3Blbm1lZXRpbmdzL21haWwtbGlzdHMuaHRtbA0KICAgIA0KICAgIA0KU3lzdGVtIFJlcXVpcmVtZW50cw0KPT09PT09PT09PT09PT09PT09PQ0KWW91IG5lZWQgYSBwbGF0Zm9ybSB0aGF0IHN1cHBvcnRzIFN1biBKYXZhIFNFIDYuDQoNCg0KQnVpbGRpbmcgYW5kIHJ1bm5pbmcNCj09PT09PT09PT09PT09PT09PT09DQpUbyBidWlsZCBmcm9tIHNvdXJjZSBjb2RlOg0KDQogIC0gUmVxdWlyZW1lbnRzOg0KICAgIFNvdXJjZXMgY29tcGlsYXRpb24gcmVxdWlyZSBTdW4gSmF2YSBTRSA2Lg0KICAgIFRoZSBwcm9qZWN0IGlzIGJ1aWx0IHdpdGggQXBhY2hlIEFOVCAxLjguNiBvciBsYXRlci4NCiAgDQogIC0gVG8gYnVpbGQgdGhlIE9wZW5NZWV0aW5ncyBwcm9qZWN0IHJ1biBhbnQgaW4gdGhlIHJvb3QgZGlyZWN0b3J5Og0KICAgICBhbnQNCiAgICANCkZvciBhIGRldGFpbGVkIGRvY3VtZW50YXRpb24gb24gaG93IHRvIGJ1aWxkIGZyb20gc291cmNlIGFuZCBvcHRpb25zIHNlZToNCiAgICBodHRwOi8vaW5jdWJhdG9yLmFwYWNoZS5vcmcvb3Blbm1lZXRpbmdzL0J1aWxkSW5zdHJ1Y3Rpb25zLmh0bWwNCiAgICANCg0KICAgIA==