LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQpSRUFETUUgZm9yIHBjY3RzIDEuMzNtcjIwIChNYWludGVuYW5jZSBSZWxlYXNlICMyMCkgcmVsZWFzZSBkYXRlIDUgQXVndXN0IDE5OTkNCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KDQogICAgICAgICAgICAgICAgICAgICAgICAgIFBhcnIgUmVzZWFyY2ggQ29ycG9yYXRpb24NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpdGgNCiAgICAgICAgICAgICAgICAgIFB1cmR1ZSBVbml2ZXJzaXR5IEVsZWN0cmljYWwgRW5naW5lZXJpbmcNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuZA0KICAgICAgICAgICAgICAgICAgICAgICBVbml2ZXJzaXR5IG9mIE1pbm5lc290YSwgQUhQQ1JDDQoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGVyZW5jZSBQYXJyDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJ1c3NlbGwgUXVvbmcNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdpbGwgQ29oZW4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhhbmsgRGlldHoNCg0KDQpBIGNlbnRyYWwgcGxhY2UgZm9yIGluZm9ybWF0aW9uIGFib3V0IFBDQ1RTIDEuMzMgaXM6DQoNCiAgICAgICAgaHR0cDovL3d3dy5wb2xob2RlLmNvbS9wY2N0cy5odG1sDQoNClRoZSBtYWludGVuYW5jZSByZWxlYXNlIGlzIGF2YWlsYWJsZSBmcm9tOg0KDQogICAgICAgIGh0dHA6Ly93d3cucG9saG9kZS5jb20vcGNjdHMxMzNtci56aXANCg0KVGhlcmUgaXMgYSByZWFkeS10by1ydW4gdmVyc2lvbiBmb3Igd2luMzIgZm9yIE1pY3Jvc29mdCBWaXN1YWwgU3R1ZGlvDQphdCB0aGUgc2FtZSBzaXRlLiAgSXQgaXMgYXZhaWxhYmxlIGZyb206DQoNCiAgICAgICAgaHR0cDovL3d3dy5wb2xob2RlLmNvbS93aW4zMi56aXANCg0KVGhlcmUgaXMgYSBuZXdzZ3JvdXAgZGVkaWNhdGVkIHRvIHBjY3RzIDEuMzMgYW5kIHJlbGF0ZWQgdG9waWNzOg0KDQogICAgICAgIGNvbXAuY29tcGlsZXJzLnRvb2xzLnBjY3RzDQoNCllvdSBtYXkgYWxzbyB3YW50IHRvIHJlZ2lzdGVyIGZvciB0aGUgYW50bHItaW50ZXJlc3QgbWFpbGluZyBsaXN0DQp3aGljaCBpcyBwcm92aWRlZCBncmF0aXMgYnkgdGhlIGZvbGxvd2luZyBzZXJ2aWNlOg0KDQogICAgICAgIGh0dHA6Ly93d3cub25lc2l0ZS5jb20NCg0KTmV3IHVzZXJzIHNob3VsZCB2aXNpdCBodHRwOi8vd3d3LnBvbGhvZGUuY29tL3BjY3RzLmh0bWwgaW4NCm9yZGVyIHRvIGdldCB0aGUgZm9sbG93aW5nIGRvY3VtZW50Og0KDQogICAgICAgICJOb3RlcyBGb3IgTmV3IFVzZXJzIG9mIFBDQ1RTIg0KDQpUaGlzIGlzIGEgUG9zdHNjcmlwdCBmaWxlIG9mIGFib3V0IDQwIHBhZ2VzIHdoaWNoIGlzIGV4dHJlbWVseSANCnVzZWZ1bCBmb3Igc29tZW9uZSBzdGFydGluZyBvdXQuIEl0IGlzIGEgYmFzZWQgb24gMS4zM21yNyBzbyBpcyBhDQpsaXR0bGUgYml0IG91dC1vZi1kYXRlLiAgVGhlIHNlY3Rpb24gb24gc2VtYW50aWMgcHJlZGljYXRlcyBpcw0KdmVyeSBvdXQgb2YgZGF0ZSwgYnV0IEkgaGF2ZSBub3QgaGFkIHRpbWUgdG8gcmV2aXNlIGl0Lg0KDQpXaGVuIHlvdSBoYXZlIGEgbGl0dGxlIG1vcmUgZXhwZXJpZW5jZSwgYmUgc3VyZSB0byByZXZpZXcgdGhlDQpmb2xsb3dpbmcgZG9jdW1lbnRzIGluIHRoZSBkaXN0cmlidXRpb24ga2l0Og0KDQogICAgICAgICAgICBDSEFOR0VTX0ZST01fMTMzLnR4dA0KICAgICAgICAgICAgQ0hBTkdFU19GUk9NXzEzM19CRUZPUkVfTVIxMy50eHQNCiAgICAgICAgICAgIEtOT1dOX1BST0JMRU1TLnR4dA0KDQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQogICAgICAgICAgICAgICAgICAgICAgSU5TVEFMTEFUSU9OIChVbml4KQ0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KMC4gRG93bmxvYWQgaHR0cDovL3d3dy5wb2xob2RlLmNvbS9wY2N0czEzM21yLnppcA0KDQoxLiBVbnppcCB0aGUgZGlzdHJpYnV0aW9uIGtpdCB0byB5b3VyIHByZWZlcnJlZCBsb2NhdGlvbi4NCg0KMi4gY2QgdG8gdGhlIG1haW4gcGNjdHMgZGlyZWN0b3J5Lg0KDQozLiBtYWtlDQoNCiAgIFRoaXMgd2lsbCBjcmVhdGU6DQoNCiAgICAgICAgYW50bHIuZXhlDQogICAgICAgIGRsZy5leGUNCiAgICAgICAgc29yY2VyZXIuZXhlDQogICAgICAgIGdlbm1rLmV4ZQ0KDQo0LiBBZGQgcGNjdHMvYmluIHRvIHlvdXIgcGF0aC4NCg0KNS4gVG8gZ2V0IGFuIHVwLXRvLWRhdGUgbGlzdCBvZiBwcm9ncmFtIG9wdGlvbnMgZXhlY3V0ZSB0aGUNCiAgIHByb2dyYW0gd2l0aCBubyBjb21tYW5kIGxpbmUgb3B0aW9ucy4gIFRvIGdldCB1cC10by1kYXRlDQogICBkb2N1bWVudGF0aW9uIHJlYWQgQ0hBTkdFU19GUk9NXzEzMyoudHh0IGFuZCBLTk9XTl9QUk9CTEVNUy50eHQNCiAgIGF0Og0KDQogICAgICAgICAgIGh0dHA6Ly93d3cucG9saG9kZS5jb20vcGNjdHMuaHRtbC4NCg0KNi4gWW91IG5lZWQgbm90IGNyZWF0ZSBhIGxpYnJhcnkuICBUaGUgbWFrZWZpbGUgY3JlYXRlZCBieSBnZW5taw0KICAgYXNzdW1lcyB0aGF0IHRoZSBmaWxlcyBhcmUgbm90IHBhcnQgb2YgYSBsaWJyYXJ5LiANCg0KICAgSWYgeW91IHdpc2ggdG8gY3JlYXRlIGEgbGlicmFyeSBmcm9tIGVsZW1lbnRzIG9mIHBjY3RzL2g6DQoNCiAgIElmIHRoZSBmaXJzdCBsZXR0ZXIgb2YgdGhlIGZpbGVuYW1lIGlzIGxvd2VyY2FzZSAodXBwZXJjYXNlKSBpdCBpcw0KICAgcmVsYXRlZCB0byB0aGUgY29kZSBnZW5lcmF0ZWQgdXNpbmcgdGhlIHBjY3RzIEMgbW9kZSAoQysrIG1vZGUpLg0KICAgU29tZSBvZiB0aGUgLmMgYW5kIC5jcHAgZmlsZXMgaW4gdGhlIGggZGlyZWN0b3J5IGFyZSBub3QgbWVhbnQgdG8NCiAgIGJlIHBsYWNlZCBpbiBhIGxpYnJhcnkgYW5kIHdpbGwgbm90IGNvbXBpbGUgYmVjYXVzZSB0aGV5IGFyZSBtZWFudA0KICAgdG8gYmUgI2luY2x1ZGUgaW4gcGNjdHMgZ2VuZXJhdGVkIGZpbGVzIHdoaWNoIGFyZSBncmFtbWFyIHNwZWNpZmljLg0KDQogICBGb3IgQysrIHVzZXJzIHBsYWNlIHRoZSBmb2xsb3dpbmcgZWxlbWVudHMgaW4gdGhlIGxpYnJhcnk6DQoNCiAgICAgICAgQVBhcnNlci5jcHANCiAgICAgICAgQVNUQmFzZS5jcHANCiAgICAgICAgQVRva2VuQnVmZmVyLmNwcA0KICAgICAgICBCdWZGaWxlSW5wdXQuY3BwIChvcHRpb25hbCkNCiAgICAgICAgRExleGVyQmFzZS5jcHANCiAgICAgICAgUENDVFNBU1QuY3BwDQogICAgICAgIFNMaXN0LmNwcA0KDQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQogICAgICAgICAgICAgICAgICAgIElOU1RBTExBVElPTiAoV2luMzIpDQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQoNCkkndmUgdHJpZWQgdG8ga2VlcCB0aGUgd2luMzIga2l0IHRvIHRoZSBtaW5pbXVtIG5lY2Vzc2FyeSB0byBnZXQgDQp1cCBhbmQgcnVubmluZy4gIFRoZSBjb21wbGV0ZSBraXQgY29udGFpbnMgYWRkaXRpb25hbCBpbmZvcm1hdGlvbg0KKHNvbWUgaGlzdG9yaWNhbCksIHNvdXJjZSBjb2RlLCBhbmQgRGV2U3R1ZGlvIHByb2plY3RzIGZvciANCnJlYnVpbGRpbmcgcGNjdHMgZnJvbSB0aGUgc291cmNlIGNvZGUuDQoNClRoZSBraXQgaXMgbm93IGRpc3RyaWJ1dGVkIHdpdGggYm90aCBNU1ZDIDUgYW5kIE1TVkM2IHN0eWxlIHByb2plY3RzLg0KDQowLiBEb3dubG9hZCBodHRwOi8vd3d3LnBvbGhvZGUuY29tL3dpbjMyLnppcC4NCg0KICAgWW91IG1heSBhbHNvIHdpc2ggdG8gZG93bmxvYWQ6DQoNCiAgICAgICAgaHR0cDovL3d3dy5wb2xob2RlLmNvbS9DSEFOR0VTX0ZST01fMTMzLnR4dA0KICAgICAgICBodHRwOi8vd3d3LnBvbGhvZGUuY29tL0NIQU5HRVNfRlJPTV8xMzNfQkVGT1JFX01SMTMudHh0DQogICAgICAgIGh0dHA6Ly93d3cucG9saG9kZS5jb20vS05PV05fUFJPQkxFTVMudHh0DQoNCjEuIFVuemlwIHRoZSBkaXN0cmlidXRpb24ga2l0IHRvIHlvdXIgcHJlZmVycmVkIGxvY2F0aW9uLg0KDQogICBUaGlzIHdpbGwgY3JlYXRlOg0KDQogICAgICAgICBhIHBjY3RzIGRpcmVjdG9yeSB0cmVlDQogICAgICAgICAgICBwY2N0cy9iaW4vKi5leGUNCiAgICAgICAgICAgIHBjY3RzL2xpYi8qLmxpYg0KICAgICAgICAgICAgcGNjdHMvaC8qDQogICAgICAgICAgICBzb3JjZXJlci9saWIvKg0KICAgICAgICAgICAgc29yY2VyZXIvaC8qDQoNCiAgICAgICAgIGFuIGV4YW1wbGUgZGlyZWN0b3J5IHRyZWUNCiAgICAgICAgICAgIGV4YW1wbGVcY2FsY0FTVFwqDQogICAgICAgICAgICBleGFtcGxlXHNpbXBsZVwqDQoNCjIuIERlZmluZSB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGUgUENDVFMgdG8gcG9pbnQgdG8gdGhlIG1haW4NCiAgIHBjY3RzIGRpcmVjdG9yeS4NCg0KMy4gVHJ5IGJ1aWxkaW5nIHRoZSBzaW1wbGUgcHJvamVjdDogZXhhbXBsZVxzaW1wbGVcc2ltcGxlNTAuZHN3DQogICBvciBzaW1wbGU2MC5kc3cuDQoNCjQuIFRyeSBidWlsZGluZyB0aGUgY29tcGxleCBwcm9qZWN0OiBleGFtcGxlXGNhbGNBU1RcY2FsY0FTVDUwLmRzdw0KICAgb3IgY2FsY0FTVDYwLmRzdy4NCg0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KICAgICAgICAgICAgICAgICAgICAgIElOU1RBTExBVElPTiAoREVDL1ZNUykNCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCg0KREVDL1ZNUyBzdXBwb3J0IGFkZGVkIGJ5IFBp6XJvbm5lIEplYW4tRnJhbudvaXMgKGpmcEBhbHRhdmlzdGEubmV0KQ0KDQowLiBEb3dubG9hZCBodHRwOi8vd3d3LnBvbGhvZGUuY29tL3BjY3RzMTMzbXIuemlwDQoNCjEuIFVuemlwIHRoZSBkaXN0cmlidXRpb24ga2l0IHRvIHlvdXIgcHJlZmVycmVkIGxvY2F0aW9uLg0KDQoyLiBzZXQgZGVmYXVsdCB0byB0aGUgbWFpbiBwY2N0cyBkaXJlY3RvcnkuDQoNCjMuIEBtYWtlZmlsZS52bXMNCg0KICAgVGhpcyB3aWxsIGNyZWF0ZSBpbiBkaXJlY3RvcnkgWy5iaW5dOg0KDQogICAgICAgIGFudGxyLmV4ZQ0KICAgICAgICBkbGcuZXhlDQogICAgICAgIHNvcmNlcmVyLmV4ZQ0KICAgICAgICBnZW5tay5leGUNCg0KNS4gVG8gZ2V0IGFuIHVwLXRvLWRhdGUgbGlzdCBvZiBwcm9ncmFtIG9wdGlvbnMgZXhlY3V0ZSB0aGUNCiAgIHByb2dyYW0gd2l0aCBubyBjb21tYW5kIGxpbmUgb3B0aW9ucy4gIFRvIGdldCB1cC10by1kYXRlDQogICBkb2N1bWVudGF0aW9uIHJlYWQgQ0hBTkdFU19GUk9NXzEzMyoudHh0IGFuZCBLTk9XTl9QUk9CTEVNUy50eHQNCiAgIGF0IGh0dHA6Ly93d3cucG9saG9kZS5jb20vcGNjdHMuaHRtbC4NCg==