TmFtZQ0KDQogICAgRVhUX3N5bmNfcmV1c2UNCg0KTmFtZSBTdHJpbmdzDQoNCiAgICBFR0xfRVhUX3N5bmNfcmV1c2UNCg0KQ29udHJpYnV0b3JzDQoNCiAgICBEYW5pZWwgS2FydGNoDQogICAgSmVmZiBWaWdpbA0KICAgIFJheSBTbWl0aA0KDQpDb250YWN0cw0KDQogICAgRGFuaWVsIEthcnRjaCwgTlZJRElBIENvcnBvcmF0aW9uIChka2FydGNoICdhdCcgbnZpZGlhLmNvbSkNCg0KU3RhdHVzDQoNCiAgICBDb21wbGV0ZQ0KDQpWZXJzaW9uDQoNCiAgICBWZXJzaW9uIDQsIE1heSAxNiwgMjAxOA0KDQpOdW1iZXINCg0KICAgIEVHTCBFeHRlbnNpb24gIzEyOA0KDQpFeHRlbnNpb24gdHlwZQ0KDQogICAgRUdMIGRpc3BsYXkgZXh0ZW5zaW9uDQoNCkRlcGVuZGVuY2llcw0KDQogICAgUmVxdWlyZXMgRUdMIDEuNSBvciBFR0wgMS40IHdpdGggRUdMX0tIUl9mZW5jZV9zeW5jDQoNCiAgICBJbnRlcmFjdHMgd2l0aCBFR0xfS0hSX3JldXNhYmxlX3N5bmMgDQogICAgSW50ZXJhY3RzIHdpdGggRUdMX0FORFJPSURfbmF0aXZlX2ZlbmNlX3N5bmMNCiAgICBJbnRlcmFjdHMgd2l0aCBFR0xfTlZfY3VkYV9ldmVudA0KDQogICAgVGhpcyBleHRlbnNpb24gaXMgd3JpdHRlbiBhZ2FpbnN0IHRoZSB3b3JkaW5nIG9mIHRoZSBFR0wgMS41DQogICAgU3BlY2lmaWNhdGlvbi4NCg0KT3ZlcnZpZXcNCg0KICAgIFRoZSBvcmlnaW5hbCBFR0xTeW5jIGV4dGVuc2lvbnMgc2VwYXJhdGVkIHN5bmMgb2JqZWN0cyBpbnRvIHR3bw0KICAgIHR5cGVzOiBmZW5jZSBzeW5jIG9iamVjdHMgc2lnbmFsZWQgYnkgb25lIHRpbWUgZXZlbnRzIGluIGFuDQogICAgQVBJIGNvbW1hbmQgcGlwZWxpbmU7IGFuZCByZXVzYWJsZSBzeW5jIG9iamVjdHMgc2lnbmFsZWQgYnkgY29tbWFuZHMNCiAgICB3aGljaCBjYW4gYmUgaXNzdWVkIGFnYWluIGFuZCBhZ2Fpbi4gSG93ZXZlciwgdGhpcyBjb25mbGF0ZXMNCiAgICByZXVzYWJpbGl0eSBvZiB0aGUgZXZlbnQgdHJpZ2dlcmluZyBhIHN5bmMgb2JqZWN0IHdpdGggdGhlIEVHTFN5bmMNCiAgICBvYmplY3QgaXRzZWxmLg0KDQogICAgQWx0aG91Z2ggdGhlIGV2ZW50IGFzc29jaWF0ZWQgd2l0aCBhIGZlbmNlIHN5bmMgb2JqZWN0IHdpbGwgb25seQ0KICAgIG9jY3VyIG9uY2UsIHRoZXJlIGlzIG5vIHJlYXNvbiB0aGF0IGl0IGNhbid0IGJlIHJlcGxhY2VkIHdpdGggYSBuZXcNCiAgICBldmVudC4gRG9pbmcgc28gd291bGQgYXZvaWQgdW5uZWNlc3NhcnkgYWxsb2NhdGlvbiBhbmQgZnJlZQ0KICAgIG9wZXJhdGlvbnMgaW4gYW4gYXBwbGljYXRpb24gdGhhdCByZXBlYXRlZGx5IHdhaXRzIGZvciBldmVudHMuIFdpdGgNCiAgICB0aGUgY3VycmVudCBpbnRlcmZhY2VzLCBzdWNoIGFwcGxpY2F0aW9ucyBtdXN0IGNvbnN0YW50bHkgY3JlYXRlIGFuZA0KICAgIGRlc3Ryb3kgbmV3IEVHTFN5bmMgb2JqZWN0cy4NCg0KICAgIFRoaXMgZXh0ZW5zaW9uIGFsbG93cyBhbGwgc3luYyBvYmplY3RzIHRvIGJlIHJldXNhYmxlLiBXaGVuIGEgc3luYw0KICAgIG9iamVjdCBpcyBpbiB0aGUgc2lnbmFsZWQgc3RhdGUsIGl0IGNhbiBiZSByZXNldCBiYWNrIHRvIGFuDQogICAgdW5zaWduYWxlZCBzdGF0ZSwgcmVnZW5lcmF0aW5nIG9yIHJlZXZhbHVhdGluZyB0aGUgZXZlbnRzIHRoYXQNCiAgICB0cmlnZ2VyIHRoZW0uIEZvciBmZW5jZSBzeW5jIG9iamVjdHMsIHRoaXMgbWVhbnMgZ2VuZXJhdGluZyBhIG5ldw0KICAgIGZlbmNlIGluIHRoZSBjdXJyZW50IEFQSS4gRm9yIE9wZW5DTCBldmVudCBzeW5jIG9iamVjdHMsIHRoaXMgbWVhbnMNCiAgICB3YWl0aW5nIGZvciBhIG5ldyBPcGVuQ0wgZXZlbnQgaGFuZGxlLiBUaGlzIG1lY2hhbmlzbSBhbHNvIGFsbG93cw0KICAgIHN5bmMgb2JqZWN0cyB0byBiZSBjcmVhdGVkIGluIHRoZSBzaWduYWxlZCBzdGF0ZSB3aXRoIG5vIGFzc29jaWF0ZWQNCiAgICBmZW5jZS9ldmVudCwgYW5kIGhhdmUgb25lIGFwcGxpZWQgbGF0ZXIuIFRodXMgYWxsIEVHTFN5bmNzIHJlcXVpcmVkDQogICAgYnkgYW4gYXBwbGljYXRpb24gY2FuIGJlIGFsbG9jYXRlZCB1cCBmcm9udCwgYmVmb3JlIGFueSByZW5kZXJpbmcNCiAgICBvcGVyYXRpb25zIGhhdmUgYmVndW4uDQoNCk5ldyBUeXBlcw0KDQogICAgTm9uZQ0KDQpOZXcgVG9rZW5zDQoNCiAgICBOb25lDQoNCk5ldyBQcm9jZWR1cmVzIGFuZCBGdW5jdGlvbnMNCg0KICAgIEVHTEJvb2xlYW4gZWdsVW5zaWduYWxTeW5jRVhUKA0KICAgICAgICAgICAgICAgICAgICBFR0xEaXNwbGF5IGRweSwNCiAgICAgICAgICAgICAgICAgICAgRUdMU3luYyBzeW5jLA0KICAgICAgICAgICAgICAgICAgICBjb25zdCBFR0xBdHRyaWIgKmF0dHJpYl9saXN0KTsNCg0KUmVwbGFjZSB0ZXh0IG9mIHN1YnNlY3Rpb25zIG9mIDMuOC4xIHRocm91Z2ggMy44LjEuMiBvZiBFR0wgMS41DQpTcGVjaWZpY2F0aW9uLiBFeGlzdGluZyB0YWJsZXMgYXJlIHByZXNlcnZlZC4NCg0KICAgIDMuOC4xIFN5bmMgT2JqZWN0cw0KDQogICAgSW4gYWRkaXRpb24gdG8gdGhlIGFmb3JlbWVudGlvbmVkIHN5bmNocm9uaXphdGlvbiBmdW5jdGlvbnMsIHdoaWNoDQogICAgcHJvdmlkZSBhbiBlZmZpY2llbnQgbWVhbnMgb2Ygc2VyaWFsaXppbmcgY2xpZW50IGFuZCBuYXRpdmUgQVBJDQogICAgb3BlcmF0aW9ucyB3aXRoaW4gYSB0aHJlYWQsIDxzeW5jIG9iamVjdHM+IGFyZSBwcm92aWRlZCB0byBlbmFibGUNCiAgICBzeW5jaHJvbml6YXRpb24gb2YgY2xpZW50IEFQSSBvcGVyYXRpb25zIGJldHdlZW4gdGhyZWFkcyBhbmQvb3INCiAgICBiZXR3ZWVuIEFQSSBjb250ZXh0cy4gU3luYyBvYmplY3RzIG1heSBiZSB0ZXN0ZWQgb3Igd2FpdGVkIHVwb24gYnkNCiAgICBhcHBsaWNhdGlvbiB0aHJlYWRzLg0KDQogICAgU3luYyBvYmplY3RzIGhhdmUgYSBzdGF0dXMgd2l0aCB0d28gcG9zc2libGUgc3RhdGVzOiA8c2lnbmFsZWQ+IGFuZA0KICAgIDx1bnNpZ25hbGVkPiwgYW5kIG1heSBpbml0aWFsbHkgYmUgaW4gZWl0aGVyIHN0YXRlLiBFR0wgbWF5IGJlIGFza2VkDQogICAgdG8gd2FpdCBmb3IgYSBzeW5jIG9iamVjdCB0byBiZWNvbWUgc2lnbmFsZWQsIG9yIGEgc3luYyBvYmplY3SScw0KICAgIHN0YXR1cyBtYXkgYmUgcXVlcmllZC4NCg0KICAgIERlcGVuZGluZyBvbiB0aGUgdHlwZSBvZiBhIHN5bmMgb2JqZWN0LCBpdHMgc3RhdHVzIG1heSBiZSBjaGFuZ2VkDQogICAgZWl0aGVyIGJ5IGFuIGV4dGVybmFsIGV2ZW50LCBvciBieSBleHBsaWNpdGx5IHNpZ25hbGluZyBhbmQvb3INCiAgICB1bnNpZ25hbGluZyB0aGUgc3luYy4gQWxsIHN5bmMgb2JqZWN0cyBhcmUgcmV1c2FibGUuIE9uY2UgdGhleSBlbnRlcg0KICAgIHRoZSBzaWduYWxlZCBzdGF0ZSwgdGhleSBtYXkgYmUgY2hhbmdlZCBiYWNrIHRvIHVuc2lnbmFsZWQsIHBvc3NpYmx5DQogICAgcmVwbGFjaW5nIHRoZSBhc3NvY2lhdGVkIGV4dGVybmFsIGV2ZW50IHRoYXQgc2lnbmFscyB0aGVtLg0KDQogICAgU3luYyBvYmplY3RzIGFyZSBhc3NvY2lhdGVkIHdpdGggYW4gRUdMRGlzcGxheSB3aGVuIHRoZXkgYXJlDQogICAgY3JlYXRlZCwgYW5kIGhhdmUgPGF0dHJpYnV0ZXM+IGRlZmluaW5nIGFkZGl0aW9uYWwgYXNwZWN0cyBvZiB0aGUNCiAgICBzeW5jIG9iamVjdC4gQWxsIHN5bmMgb2JqZWN0cyBpbmNsdWRlIGF0dHJpYnV0ZXMgZm9yIHRoZWlyIHR5cGUgYW5kDQogICAgdGhlaXIgc3RhdHVzLiBBZGRpdGlvbmFsIGF0dHJpYnV0ZXMgYXJlIGRpc2N1c3NlZCBiZWxvdyBmb3INCiAgICBkaWZmZXJlbnQgdHlwZXMgb2Ygc3luYyBvYmplY3RzLiBJZiBhIHN5bmMgb2JqZWN0IGlzIGNyZWF0ZWQgaW4gdGhlDQogICAgc2lnbmFsZWQgc3RhdGUsIGl0cyBpbml0aWFsIGF0dHJpYnV0ZSBsaXN0IG1heSBiZSBpbmNvbXBsZXRlLCB3aXRoDQogICAgYXR0cmlidXRlcyBuZWNlc3NhcnkgZm9yIGl0cyB0eXBlIHByb3ZpZGVkIHdoZW4gaXQgaXMgY2hhbmdlZCB0bw0KICAgIHVuc2lnbmFsZWQuDQoNCiAgICA8RmVuY2Ugc3luYyBvYmplY3RzPiBoYXZlIGFuIGFzc29jaWF0ZWQgZmVuY2UgY29tbWFuZCBpbiBhIGNsaWVudA0KICAgIEFQSS4gQSBuZXcgZmVuY2UgY29tbWFuZCBpcyBnZW5lcmF0ZWQgd2hlbmV2ZXIgdGhlIHN5bmMgb2JqZWN0DQogICAgZW50ZXJzIHRoZSB1bnNpZ25hbGVkIHN0YXRlLiBXaGVuIHRoZSBjbGllbnQgQVBJIGV4ZWN1dGVzIHRoZSBmZW5jZQ0KICAgIGNvbW1hbmQsIGFuIGV2ZW50IGlzIGdlbmVyYXRlZCB3aGljaCBzaWduYWxzIHRoZSBjb3JyZXNwb25kaW5nIGZlbmNlDQogICAgc3luYyBvYmplY3QuIEZlbmNlIHN5bmMgb2JqZWN0cyBtYXkgbm90IGJlIGV4cGxpY2l0bHkgc2lnbmFsZWQuDQogICAgRmVuY2Ugc3luYyBvYmplY3RzIG1heSBiZSB1c2VkIHRvIHdhaXQgZm9yIHBhcnRpYWwgY29tcGxldGlvbiBvZiBhDQogICAgY2xpZW50IEFQSSBjb21tYW5kIHN0cmVhbSwgYXMgYSBtb3JlIGZsZXhpYmxlIGZvcm0gb2YgZ2xGaW5pc2ggb3INCiAgICB2Z0ZpbmlzaC4NCg0KICAgIEFuIDxPcGVuQ0wgZXZlbnQgc3luYyBvYmplY3Q+IHJlZmxlY3RzIHRoZSBzdGF0dXMgb2YgYSBjb3JyZXNwb25kaW5nDQogICAgT3BlbkNMIGV2ZW50IG9iamVjdCB0byB3aGljaCB0aGUgc3luYyBvYmplY3QgaXMgbGlua2VkLiBUaGlzDQogICAgcHJvdmlkZXMgYW5vdGhlciBtZXRob2Qgb2YgY29vcmRpbmF0aW5nIHNoYXJpbmcgb2YgaW1hZ2VzIGJldHdlZW4NCiAgICBFR0wgYW5kIE9wZW5DTCAoc2VlIENoYXB0ZXIgOSBvZiB0aGUgT3BlbkNMIDEuMCBTcGVjaWZpY2F0aW9uIGFuZA0KICAgIHRoZSBjbF9raHJfZWdsX2ltYWdlIGV4dGVuc2lvbikuIFdhaXRpbmcgb24gc3VjaCBhIHN5bmMgb2JqZWN0IGlzDQogICAgZXF1aXZhbGVudCB0byB3YWl0aW5nIGZvciBjb21wbGV0aW9uIG9mIHRoZSBsaW5rZWQgT3BlbkNMIGV2ZW50DQogICAgb2JqZWN0Lg0KDQogICAgVGhlIGNvbW1hbmQNCg0KICAgICAgICBFR0xTeW5jIGVnbENyZWF0ZVN5bmMoRUdMRGlzcGxheSBkcHksIEVHTGVudW0gdHlwZSwgY29uc3QNCiAgICAgICAgICAgIEVHTEF0dHJpYiAqYXR0cmliX2xpc3QpOw0KDQogICAgY3JlYXRlcyBhIHN5bmMgb2JqZWN0IG9mIHRoZSBzcGVjaWZpZWQgPHR5cGU+IGFzc29jaWF0ZWQgd2l0aCB0aGUNCiAgICBzcGVjaWZpZWQgZGlzcGxheSA8ZHB5PiwgYW5kIHJldHVybnMgYSBoYW5kbGUgdG8gdGhlIG5ldyBvYmplY3QuDQogICAgPGF0dHJpYiBsaXN0PiBpcyBOVUxMIG9yIGFuIGF0dHJpYnV0ZS12YWx1ZSBsaXN0IHNwZWNpZnlpbmcgb3RoZXINCiAgICBhdHRyaWJ1dGVzIG9mIHRoZSBzeW5jIG9iamVjdCwgdGVybWluYXRlZCBieSBhbiBhdHRyaWJ1dGUgZW50cnkNCiAgICBFR0xfTk9ORS4gQXR0cmlidXRlcyBub3Qgc3BlY2lmaWVkIGluIHRoZSBsaXN0IHdpbGwgYmUgYXNzaWduZWQNCiAgICB0aGVpciBkZWZhdWx0IHZhbHVlcy4NCg0KICAgIFRoZSBFR0xfU1lOQ19TVEFUVVMgYXR0cmlidXRlIGlzIGRlZmluZWQgZm9yIGFsbCBzeW5jIHR5cGVzLCBidXQgbWF5DQogICAgb25seSBiZSBzcGVjaWZpZWQgZXhwbGljaXRseSBhdCBjcmVhdGlvbiB0aW1lIGZvciBzb21lIHR5cGVzIG9mIHN5bmMNCiAgICBvYmplY3RzLCBhcyBkaXNjdXNzZWQgYmVsb3cuIE90aGVyIGF0dHJpYnV0ZXMgYXJlIG9ubHkgYWxsb3dlZCBhcw0KICAgIGluZGljYXRlZCBiZWxvdyBmb3IgdGhlIHN5bmMgdHlwZS4NCg0KICAgIEVycm9ycw0KDQogICAgICAgIGVnbENyZWF0ZVN5bmMgcmV0dXJucyBFR0xfTk9fU1lOQyBvbiBmYWlsdXJlLg0KICAgICAgICBJZiA8ZHB5PiBpcyBub3QgdGhlIG5hbWUgb2YgYSB2YWxpZCwgaW5pdGlhbGl6ZWQgRUdMRGlzcGxheSwgYW4NCiAgICAgICAgRUdMX0JBRF9ESVNQTEFZIGVycm9yIGlzIGdlbmVyYXRlZC4NCiAgICAgICAgSWYgPGF0dHJpYl9saXN0PiBjb250YWlucyBhbiBhdHRyaWJ1dGUgbmFtZSBub3QgZGVmaW5lZCBvciBub3QNCiAgICAgICAgYWxsb3dlZCBmb3IgdGhlIHR5cGUgb2Ygc3luYyBvYmplY3QgYmVpbmcgY3JlYXRlZCwgYW4NCiAgICAgICAgRUdMX0JBRF9BVFRSSUJVVEUgZXJyb3IgaXMgZ2VuZXJhdGVkLg0KICAgICAgICBJZiA8dHlwZT4gaXMgbm90IGEgc3VwcG9ydGVkIHR5cGUgb2Ygc3luYyBvYmplY3QsIGFuDQogICAgICAgIEVHTF9CQURfUEFSQU1FVEVSIGVycm9yIGlzIGdlbmVyYXRlZC4NCiAgICAgICAgSWYgPHR5cGU+IGlzIEVHTF9TWU5DX0ZFTkNFLCB0aGUgRUdMX1NZTkNfU1RBVFVTIGF0dHJpYnV0ZSBpcw0KICAgICAgICBzZXQgdG8gRUdMX1VOU0lHTkFMRUQsIGFuZCBhbnkgb2YgdGhlIGZvbGxvd2luZyBhcmUgdHJ1ZSBvZiB0aGUNCiAgICAgICAgY3VycmVudCBjb250ZXh0IGZvciB0aGUgYm91bmQgQVBJICh0aGUgY29udGV4dCByZXR1cm5lZCBieQ0KICAgICAgICBlZ2xHZXRDdXJyZW50Q29udGV4dCksIGFuIEVHTF9CQURfTUFUQ0ggZXJyb3IgaXMgZ2VuZXJhdGVkOg0KICAgICAgICAgICogVGhlcmUgaXMgbm8gY3VycmVudCBjb250ZXh0IChpLmUuLCBlZ2xHZXRDdXJyZW50Q29udGV4dA0KICAgICAgICAgICAgcmV0dXJucyBFR0xfTk9fQ09OVEVYVCkuDQogICAgICAgICAgKiA8ZHB5PiBkb2VzIG5vdCBtYXRjaCB0aGUgRUdMRGlzcGxheSBvZiB0aGUgY29udGV4dCAodGhlDQogICAgICAgICAgICBFR0xEaXNwbGF5IHJldHVybmVkIGJ5IGVnbEdldEN1cnJlbnREaXNwbGF5KS4NCiAgICAgICAgICAqIFRoZSBjb250ZXh0IGRvZXMgbm90IHN1cHBvcnQgZmVuY2UgY29tbWFuZHMuDQoNCiAgICBXaGlsZSBpbiB0aGUgdW5zaWduYWxlZCBzdGF0ZSwgdGhlIHN5bmNocm9uaXphdGlvbiBldmVudCBhc3NvY2lhdGVkDQogICAgd2l0aCBhIHN5bmMgb2JqZWN0IGNhbm5vdCBiZSBjaGFuZ2VkLiBXaGVuIHRoZSA8Y29uZGl0aW9uPiBvZiBhIHN5bmMNCiAgICBvYmplY3QgaW4gdGhlIHVuc2lnbmFsZWQgc3RhdGUgaXMgc2F0aXNmaWVkLCB0aGUgc3luYyBpcyBzaWduYWxlZCwNCiAgICBjYXVzaW5nIGFueSBlZ2xDbGllbnRXYWl0U3luYyBvciBlZ2xXYWl0U3luYyBjb21tYW5kcyAoc2VlIGJlbG93KQ0KICAgIGJsb2NraW5nIG9uIHRoZSBzeW5jIHRvIHVuYmxvY2suDQoNCiAgICBPbmNlIHNpZ25hbGVkLCBhIHN5bmMgb2JqZWN0IG1heSBiZSByZXVzZWQgZm9yIGEgbmV3IHN5bmNocm9uaXphdGlvbg0KICAgIGV2ZW50IGJ5IHN3aXRjaGluZyBpdCBiYWNrIHRvIHVuc2lnbmFsZWQuIFRoZSBjb21tYW5kDQoNCiAgICAgICAgRUdMQm9vbGVhbiBlZ2xVbnNpZ25hbFN5bmNFWFQoRUdMRGlzcGxheSBkcHksIEVHTFN5bmMgc3luYywNCiAgICAgICAgICAgIGNvbnN0IEVHTEF0dHJpYiAqYXR0cmliX2xpc3QpOw0KDQogICAgY2FuIGJlIHVzZWQgdG8gY2hhbmdlIHRoZSA8c3luYz4gYXNzb2NpYXRlZCB3aXRoIGRpc3BsYXkgPGRweT4gZnJvbQ0KICAgIHRoZSBzaWduYWxlZCBzdGF0ZSB0byB0aGUgdW5zaWduYWxlZCBzdGF0ZS4gVGhlIGF0dHJpYnV0ZSBsaXN0IG1heQ0KICAgIGJlIHVzZWQgdG8gcHJvdmlkZSBvciByZXBsYWNlIGF0dHJpYnV0ZXMgc3BlY2lmaWMgdG8gdGhlIHN5bmMgdHlwZQ0KICAgIGFzIGRpc2N1c3NlZCBiZWxvdy4gVGhlIHN5bmMgb2JqZWN0J3MgdHlwZSBhbmQgY29uZGl0aW9uIG1heSBub3QgYmUNCiAgICBjaGFuZ2VkLg0KDQogICAgRXJyb3JzDQoNCiAgICAgICAgZWdsVW5zaWduYWxTeW5jRVhUIHJldHVybnMgRUdMX0ZBTFNFIG9uIGZhaWx1cmUsIGFuZCBoYXMgbm8NCiAgICAgICAgZWZmZWN0IG9uIDxzeW5jPi4NCiAgICAgICAgSWYgPGRweT4gaXMgbm90IHRoZSBuYW1lIG9mIGEgdmFsaWQsIGluaXRpYWxpemVkIEVHTERpc3BsYXksIGFuDQogICAgICAgIEVHTF9CQURfRElTUExBWSBlcnJvciBpcyBnZW5lcmF0ZWQuDQogICAgICAgIElmIDxzeW5jPiBpcyBub3QgYSB2YWxpZCBzeW5jIG9iamVjdCBhc3NvY2lhdGVkIHdpdGggPGRweT4sIGFuDQogICAgICAgIEVHTF9CQURfUEFSQU1FVEVSIGVycm9yIGlzIGdlbmVyYXRlZC4NCiAgICAgICAgSWYgPGF0dHJpYl9saXN0PiBjb250YWlucyBhbiBhdHRyaWJ1dGUgbmFtZSBub3QgZGVmaW5lZCBmb3IgdGhlDQogICAgICAgIHR5cGUgb2YgPHN5bmM+LCBhbiBFR0xfQkFEX0FUVFJJQlVURSBlcnJvciBpcyBnZW5lcmF0ZWQuDQogICAgICAgIElmIDxzeW5jPiBpcyBhbHJlYWR5IGluIHRoZSB1bnNpZ25hbGVkIHN0YXRlLCBhbiBFR0xfQkFEX0FDQ0VTUw0KICAgICAgICBlcnJvciBpcyBnZW5lcmF0ZWQuDQogICAgICAgIElmIDxzeW5jPidzIHR5cGUgaXMgRUdMX1NZTkNfRkVOQ0UgYW5kIGFueSBvZiB0aGUgZm9sbG93aW5nIGFyZQ0KICAgICAgICB0cnVlIG9mIHRoZSBjdXJyZW50IGNvbnRleHQgZm9yIHRoZSBib3VuZCBBUEkgKHRoZSBjb250ZXh0DQogICAgICAgIHJldHVybmVkIGJ5IGVnbEdldEN1cnJlbnRDb250ZXh0KSwgYW4gRUdMX0JBRF9NQVRDSCBlcnJvciBpcw0KICAgICAgICBnZW5lcmF0ZWQ6DQogICAgICAgICAgKiBUaGVyZSBpcyBubyBjdXJyZW50IGNvbnRleHQgKGkuZS4sIGVnbEdldEN1cnJlbnRDb250ZXh0DQogICAgICAgICAgICByZXR1cm5zIEVHTF9OT19DT05URVhUKS4NCiAgICAgICAgICAqIDxkcHk+IGRvZXMgbm90IG1hdGNoIHRoZSBFR0xEaXNwbGF5IG9mIHRoZSBjb250ZXh0ICh0aGUNCiAgICAgICAgICAgIEVHTERpc3BsYXkgcmV0dXJuZWQgYnkgZWdsR2V0Q3VycmVudERpc3BsYXkpLg0KICAgICAgICAgICogVGhlIGNvbnRleHQgZG9lcyBub3Qgc3VwcG9ydCBmZW5jZSBjb21tYW5kcy4NCiAgICAgICAgSWYgPHN5bmM+J3MgdHlwZSBpcyBFR0xfU1lOQ19DTF9FVkVOVCBhbmQgRUdMX0NMX0VWRU5UX0hBTkRMRQ0KICAgICAgICBpcyBub3Qgc3BlY2lmaWVkIGluIDxhdHRyaWJfbGlzdD4sIHRoZW4gYW4gRUdMX0JBRF9BVFRSSUJVVEUNCiAgICAgICAgZXJyb3IgaXMgZ2VuZXJhdGVkLg0KDQogICAgMy44LjEuMSAgQ3JlYXRpbmcgYW5kIFNpZ25hbGluZyBGZW5jZSBTeW5jIE9iamVjdHMNCg0KICAgIElmIHR5cGUgaXMgRUdMX1NZTkNfRkVOQ0UsIGEgZmVuY2Ugc3luYyBvYmplY3QgaXMgY3JlYXRlZC4gVGhlDQogICAgRUdMX1NZTkNfU1RBVFVTIGF0dHJpYnV0ZSBtYXkgYmUgc3BlY2lmaWVkIGFzIGVpdGhlciBFR0xfVU5TSUdOQUxFRA0KICAgIG9yIEVHTF9TSUdOQUxFRCwgYW5kIHdpbGwgZGVmYXVsdCB0byBFR0xfVU5TSUdOQUxFRC4gTm8gb3RoZXINCiAgICBhdHRyaWJ1dGVzIG1heSBiZSBzcGVjaWZpZWQgZm9yIGEgZmVuY2Ugc3luYyBvYmplY3QsIGVpdGhlciB3aXRoDQogICAgZWdsQ3JlYXRlU3luYyBvciBlZ2xVbnNpZ25hbFN5bmNFWFQuIFF1ZXJpYWJsZSBhdHRyaWJ1dGVzIG9mIHRoZQ0KICAgIGZlbmNlIHN5bmMgb2JqZWN0IGFyZSBzZXQgYXMgc2hvd24gaW4gdGFibGUgMy43Lg0KDQogICAgV2hlbiBhIGZlbmNlIHN5bmMgb2JqZWN0IGlzIGNyZWF0ZWQgaW4gdGhlIHVuc2lnbmFsZWQgc3RhdGUsIG9yDQogICAgc3dpdGNoZWQgdG8gdGhhdCBzdGF0ZSB3aXRoIGVnbFVuc2lnbmFsU3luY0VYVCwgYSBmZW5jZSBjb21tYW5kIGlzDQogICAgaW5zZXJ0ZWQgaW50byB0aGUgY29tbWFuZCBzdHJlYW0gb2YgdGhlIGJvdW5kIGNsaWVudCBBUEmScyBjdXJyZW50DQogICAgY29udGV4dCAoaS5lLiwgdGhlIGNvbnRleHQgcmV0dXJuZWQgYnkgZWdsR2V0Q3VycmVudENvbnRleHQpLCBhbmQgaXMNCiAgICBhc3NvY2lhdGVkIHdpdGggdGhlIHN5bmMgb2JqZWN0Lg0KDQogICAgVGhlIG9ubHkgY29uZGl0aW9uIHN1cHBvcnRlZCBmb3IgZmVuY2Ugc3luYyBvYmplY3RzIGlzDQogICAgRUdMX1NZTkNfUFJJT1JfQ09NTUFORFNfQ09NUExFVEUsIHdoaWNoIGlzIHNhdGlzZmllZCBieSBjb21wbGV0aW9uDQogICAgb2YgdGhlIGZlbmNlIGNvbW1hbmQgY29ycmVzcG9uZGluZyB0byB0aGUgc3luYyBvYmplY3QsIGFuZCBhbGwNCiAgICBwcmVjZWRpbmcgY29tbWFuZHMgaW4gdGhlIGFzc29jaWF0ZWQgY2xpZW50IEFQSSBjb250ZXh0knMgY29tbWFuZA0KICAgIHN0cmVhbS4gVGhlIHN5bmMgb2JqZWN0IHdpbGwgbm90IGJlIHNpZ25hbGVkIHVudGlsIGFsbCBlZmZlY3RzIGZyb20NCiAgICB0aGVzZSBjb21tYW5kcyBvbiB0aGUgY2xpZW50IEFQSZJzIGludGVybmFsIGFuZCBmcmFtZWJ1ZmZlciBzdGF0ZQ0KICAgIGFyZSBmdWxseSByZWFsaXplZC4gTm8gb3RoZXIgc3RhdGUgaXMgYWZmZWN0ZWQgYnkgZXhlY3V0aW9uIG9mIHRoZQ0KICAgIGZlbmNlIGNvbW1hbmQuDQoNCiAgICBHZW5lcmF0aW9uIG9mIGZlbmNlIGNvbW1hbmRzIGZvciBmZW5jZSBzeW5jIG9iamVjdHMgcmVxdWlyZXMgc3VwcG9ydA0KICAgIGZyb20gdGhlIGJvdW5kIGNsaWVudCBBUEksIGFuZCB3aWxsIG5vdCBzdWNjZWVkIHVubGVzcyB0aGUgY2xpZW50DQogICAgQVBJIHNhdGlzZmllcyBvbmUgb2YgdGhlIGZvbGxvd2luZyBwcm9wZXJ0aWVzLiBOb3RlIHRoYXQgZWdsV2FpdFN5bmMNCiAgICAoc2VlIHNlY3Rpb24gMy44LjEuMykgYWxzbyByZXF1aXJlcyBzYXRpc2Z5aW5nIHRoZXNlIGNvbmRpdGlvbnMuDQogICAgICAqIGNsaWVudCBBUEkgaXMgT3BlbkdMLCBhbmQgZWl0aGVyIHRoZSBPcGVuR0wgdmVyc2lvbiBpcyAzLjIgb3INCiAgICAgICAgZ3JlYXRlciwgb3IgdGhlIEdMX0FSQl9zeW5jIGV4dGVuc2lvbiBpcyBzdXBwb3J0ZWQuDQogICAgICAqIGNsaWVudCBBUEkgaXMgT3BlbkdMIEVTLCBhbmQgZWl0aGVyIHRoZSBPcGVuR0wgRVMgdmVyc2lvbiBpcyAzLjANCiAgICAgICAgb3IgZ3JlYXRlciwgb3IgdGhlIEdMX09FU19FR0xfc3luYyBleHRlbnNpb24gaXMgc3VwcG9ydGVkLg0KICAgICAgKiBjbGllbnQgQVBJIGlzIE9wZW5WRywgYW5kIHRoZSBWR19LSFJfRUdMX3N5bmMgZXh0ZW5zaW9uIGlzDQogICAgICAgIHN1cHBvcnRlZC4NCg0KICAgIDMuOC4xLjIgIENyZWF0aW5nIGFuZCBTaWduYWxpbmcgT3BlbkNMIEV2ZW50IFN5bmMgT2JqZWN0cw0KDQogICAgSWYgdHlwZSBpcyBFR0xfU1lOQ19DTF9FVkVOVCwgYW4gT3BlbkNMIGV2ZW50IHN5bmMgb2JqZWN0IGlzDQogICAgY3JlYXRlZC4gIFRoZSBFR0xfU1lOQ19TVEFUVVMgYXR0cmlidXRlIG1heSBub3QgYmUgZXhwbGljaXRseQ0KICAgIHNwZWNpZmllZCBkdXJpbmcgY3JlYXRpb24gb2YgdGhpcyB0eXBlIG9mIHN5bmMgb2JqZWN0LiBJZiBubw0KICAgIEVHTF9DTF9FVkVOVF9IQU5ETEUgYXR0cmlidXRlIGlzIHNwZWNpZmllZCBhdCBjcmVhdGlvbiB0aW1lLCB0aGUNCiAgICBzeW5jIG9iamVjdCB3aWxsIGJlIGNyZWF0ZWQgaW4gdGhlIHNpZ25hbGVkIHN0YXRlLiBPdGhlcndpc2UgaXRzDQogICAgc3RhdHVzIHdpbGwgYmUgZGV0ZXJtaW5lZCBieSB0aGUgcHJvdmlkZWQgT3BlbkNMIGV2ZW50LCBhcyBkZXNjcmliZWQNCiAgICBiZWxvdy4gQW4gRUdMX0NMX0VWRU5UX0hBTkRMRSBtdXN0IGFsd2F5cyBiZSBzcGVjaWZpZWQgZm9yDQogICAgZWdsVW5zaWduYWxTeW5jRVhULg0KDQogICAgVG8gdXNlIGFuIE9wZW5DTCBldmVudCBzeW5jIG9iamVjdCwgdGhlIEVHTF9TWU5DX0NMX0VWRU5UIGF0dHJpYnV0ZQ0KICAgIG11c3QgYmUgc2V0IHRvIGEgdmFsaWQgT3BlbkNMIDxldmVudD4gaGFuZGxlIHJldHVybmVkIGJ5IGEgY2FsbCB0bw0KICAgIGNsRW5xdWV1ZVJlbGVhc2VHTE9iamVjdHMgb3IgY2xFbnF1ZXVlUmVsZWFzZUVHTE9iamVjdHM7IG90aGVyIHR5cGVzDQogICAgb2YgT3BlbkNMIGV2ZW50IGhhbmRsZXMgYXJlIG5vdCBzdXBwb3J0ZWQuIEltcGxlbWVudGF0aW9ucyBhcmUgbm90DQogICAgcmVxdWlyZWQgdG8gdmFsaWRhdGUgdGhlIE9wZW5DTCBldmVudCwgYW5kIHBhc3NpbmcgYW4gaW52YWxpZCBldmVudA0KICAgIGhhbmRsZSBpbiA8YXR0cmliX2xpc3Q+IG1heSByZXN1bHQgaW4gdW5kZWZpbmVkIGJlaGF2aW9yIHVwIHRvIGFuZA0KICAgIGluY2x1ZGluZyBwcm9ncmFtIHRlcm1pbmF0aW9uLiBOb3RlIHRoYXQgRUdMX0NMX0VWRU5UX0hBTkRMRSBpcyBub3QNCiAgICBhIHF1ZXJpYWJsZSBwcm9wZXJ0eSBvZiBhIHN5bmMgb2JqZWN0LiBRdWVyaWFibGUgYXR0cmlidXRlcyBvZiB0aGUNCiAgICBPcGVuQ0wgZXZlbnQgc3luYyBvYmplY3QgYXJlIHNldCBhcyBzaG93biBpbiB0YWJsZSAzLjguDQoNCiAgICBUaGUgc3RhdHVzIG9mIHN1Y2ggYSBzeW5jIG9iamVjdCBkZXBlbmRzIG9uIDxldmVudD4uIFdoZW4gdGhlIHN0YXR1cw0KICAgIG9mIDxldmVudD4gaXMgQ0xfUVVFVUVELCBDTF9TVUJNSVRURUQsIG9yIENMX1JVTk5JTkcsIHRoZSBzdGF0dXMgb2YNCiAgICB0aGUgbGlua2VkIHN5bmMgb2JqZWN0IHdpbGwgYmUgRUdMX1VOU0lHTkFMRUQuIFdoZW4gdGhlIHN0YXR1cyBvZg0KICAgIDxldmVudD4gY2hhbmdlcyB0byBDTF9DT01QTEVURSwgdGhlIHN0YXR1cyBvZiB0aGUgbGlua2VkIHN5bmMgb2JqZWN0DQogICAgd2lsbCBiZWNvbWUgRUdMX1NJR05BTEVELg0KDQogICAgVGhlIG9ubHkgY29uZGl0aW9uIHN1cHBvcnRlZCBmb3IgT3BlbkNMIGV2ZW50IHN5bmMgb2JqZWN0cyBpcw0KICAgIEVHTF9TWU5DX0NMX0VWRU5UX0NPTVBMRVRFLCB3aGljaCBpcyBzYXRpc2ZpZWQgd2hlbiB0aGUgc3RhdHVzIG9mDQogICAgdGhlIE9wZW5DTCBldmVudCBhc3NvY2lhdGVkIHdpdGggdGhlIHN5bmMgb2JqZWN0IGNoYW5nZXMgdG8NCiAgICBDTF9DT01QTEVURS4NCg0KICAgIEFzc29jaWF0aW5nIGFuIE9wZW5DTCBldmVudCBoYW5kbGUgd2l0aCBhIHN5bmMgb2JqZWN0IHBsYWNlcyBhDQogICAgcmVmZXJlbmNlIG9uIHRoZSBsaW5rZWQgT3BlbkNMIG9iamVjdC4gV2hlbiB0aGUgc3luYyBvYmplY3QgaXMNCiAgICBkZWxldGVkIG9yIHRoZSBldmVudCBoYW5kbGUgaXMgcmVwbGFjZWQsIHRoZSByZWZlcmVuY2Ugd2lsbCBiZQ0KICAgIHJlbW92ZWQgZnJvbSB0aGUgT3BlbkNMIG9iamVjdC4NCg0KSWYgRUdMX0tIUl9yZXVzYWJsZV9zeW5jIGlzIHByZXNlbnQsIHRoZW4gZm9yIHN5bmMgb2JqZWN0cyBvZiB0eXBlDQpFR0xfU1lOQ19SRVVTQUJMRV9LSFIsIHRoZSBpbml0aWFsIHZhbHVlIG9mIEVHTF9TWU5DX1NUQVRVUyBtYXkgYmUNCnNldCB0byBlaXRoZXIgRUdMX1VOU0lHTkFMRUQgb3IgRUdMX1NJR05BTEVELCBhbmQgd2lsbCBkZWZhdWx0IHRvDQpFR0xfVU5TSUdOQUxFRC4NCg0KSWYgRUdMX0FORFJPSURfbmF0aXZlX2ZlbmNlX3N5bmMgaXMgcHJlc2VudCwgdGhlbiBmb3IgbmF0aXZlIGZlbmNlIHN5bmMNCm9iamVjdHMsIHRoZSBFR0xfU1lOQ19OQVRJVkVfRkVOQ0VfRkRfQU5EUk9JRCBhdHRyaWJ1dGUgbWF5IGJlIHNwZWNpZmllZA0KaW4gZWdsVW5zaWduYWxTeW5jRVhUIGFzIHdlbGwgYXMgZWdsQ3JlYXRlU3luYy4gSWYgaXQgaXMgc2V0IHRvIGFueXRoaW5nDQpvdGhlciB0aGFuIEVHTF9OT19OQVRJVkVfRkVOQ0VfRkRfQU5EUk9JRCBhdCBjcmVhdGlvbiB0aW1lLCB0aGVuIGl0cw0KaW5pdGlhbCBFR0xfU1lOQ19TVEFUVVMgd2lsbCByZWZsZWN0IHRoZSBjdXJyZW50IHN0YXR1cyBvZiB0aGUgcHJvdmlkZWQNCmZlbmNlIEZELCBhbmQgaXQgaXMgYW4gZXJyb3IgdG8gc3BlY2lmaWNhbGx5IHNldCB0aGUgc3RhdHVzLiBJZiBpdCBpcw0Kc2V0IHRvIEVHTF9OT19OQVRJVkVfRkVOQ0VfRkRfQU5EUk9JRCwgdGhlbiBpdHMgRUdMX1NZTkNfU1RBVFVTIG1heSBiZQ0Kc2V0IHRvIGVpdGhlciBFR0xfVU5TSUdOQUxFRCAodGhlIGRlZmF1bHQpIG9yIEVHTF9TSUdOQUxFRC4gSWYgdGhlDQpzdGF0dXMgaXMgc2lnbmFsZWQsIHRoZW4gbm8gbmF0aXZlIGZlbmNlIHdpbGwgYmUgZ2VuZXJhdGVkIHVudGlsIGFmdGVyDQppdCBpcyBzd2l0Y2hlZCB0byB1bnNpZ25hbGVkLiBJZiBlZ2xVbnNpZ25hbFN5bmNFWFQgaXMgY2FsbGVkIGZvciBhDQpuYXRpdmUgZmVuY2Ugc3luYyBvYmplY3Qgd2l0aCBhbiBGRCBvZiBFR0xfTk9fTkFUSVZFX0ZFTkNFX0ZEX0FORFJPSUQsDQp0aGVuIGEgbmV3IG5hdGl2ZSBmZW5jZSB3aWxsIGJlIGdlbmVyYXRlZCBhdCB0aGUgbmV4dCBGbHVzaCgpLCBhcw0KZGVzY3JpYmVkIGZvciBlZ2xDcmVhdGVTeW5jLg0KDQpJZiBFR0xfTlZfY3VkYV9ldmVudCBpcyBwcmVzZW50LCB0aGVuIGZvciBDVURBIGV2ZW50IHN5bmMgb2JqZWN0cywgdGhlDQpFR0xfQ1VEQV9FVkVOVF9IQU5ETEVfTlYgbWF5IGJlIHNwZWNpZmllZCBpbiBlZ2xVbnNpZ25hbFN5bmNFWFQgYXMgd2VsbA0KYXMgZWdsQ3JlYXRlU3luYy4gVGhlIGN1cnJlbnQgQ1VEQSBldmVudCBoYW5kbGUgaXMgZXZhbHVhdGVkIGF0IHRoZSB0aW1lDQp0aGUgRUdMIHN5bmMgb2JqZWN0IGJlY29tZXMgdW5zaWduYWxlZCwgYW5kIHN1YnNlcXVlbnQgbW9kaWZpY2F0aW9uIG9mDQp0aGUgQ1VEQSBvYmplY3Qgd2l0aCBjdWRhRXZlbnRSZWNvcmQgaGFzIG5vIGVmZmVjdCBvbiB0aGUgc3luYyBvYmplY3QNCnVudGlsIGl0IGlzIHNpZ25hbGVkLiBTdWJzZXF1ZW50bHkgcmVzdG9yaW5nIHRoZSBzeW5jIG9iamVjdCB0bw0KdW5zaWduYWxlZCB3aWxsIGNhdXNlIHRoZSBDVURBIG9iamVjdCB0byBiZSByZWV2YWx1YXRlZC4NCg0KSXNzdWVzDQoNCiAgICAxLiAgU2hvdWxkIGEgbmV3IGF0dHJpYnV0ZSBiZSByZXF1aXJlZCB0byBzcGVjaWZ5IGEgc3luYyBvYmplY3QgYXMNCiAgICAgICAgcmV1c2FibGU/DQoNCiAgICAgICAgUkVTT0xWRUQ6IE5vLiBUaGUgcHJlc2VuY2Ugb2YgdGhpcyBleHRlbnNpb24gaXMgc3VmZmljaWVudCB0bw0KICAgICAgICBpbmRpY2F0ZSByZXVzYWJpbGl0eSBvZiBhbGwgc3luYyBvYmplY3RzLiBUaGlzIHdpbGwgbm90IGNyZWF0ZQ0KICAgICAgICBhbnkgaW5jb21wYXRpYmlsaXRpZXMgd2l0aCBleGlzdGluZyBhcHBsaWNhdGlvbnMgdGhhdCB1c2Ugc3luYw0KICAgICAgICBvYmplY3RzIG9ubHkgb25jZS4NCg0KICAgIDIuICBDYW4gd2UgbGV2ZXJhZ2UgdGhlIGV4aXN0aW5nIGVnbFNpZ25hbFN5bmNLSFIgZnVuY3Rpb24gZnJvbQ0KICAgICAgICBFR0xfS0hSX3JldXNhYmxlX3N5bmMgZm9yIHRoaXMgZXh0ZW5zaW9uPw0KDQogICAgICAgIFJFU09MVkVEOiBOby4gU29tZSB0eXBlcyBvZiBzeW5jIG9iamVjdHMgcmVxdWlyZSBhdHRyaWJ1dGVzDQogICAgICAgIHdoaWNoIGFyZSB0aGVtc2VsdmVzIHNpbmdsZS11c2Ugb2JqZWN0cywgYW5kIG11c3QgYmUgcmVwbGFjZWQNCiAgICAgICAgZm9yIHRoZSBzeW5jIG9iamVjdCB0byBiZSByZXVzZWQuIFRoZXJlZm9yZSBhIG5ldyBmdW5jdGlvbiB3aGljaA0KICAgICAgICB0YWtlcyBhbiBhdHRyaWJ1dGUgbGlzdCBpcyByZXF1aXJlZC4NCg0KICAgIDMuICBTaG91bGQgdGhlIGZ1bmN0aW9uIGZvciB1bnNpZ25hbGluZyBiZSBiYXNlZCBvbiBlZ2xTaWduYWxTeW5jS0hSDQogICAgICAgIGZyb20gdGhlIEtIUl9yZXVzYWJsZV9zeW5jIGV4dGVuc2lvbiwgYW5kIHRha2UgYSBtb2RlIHBhcmFtZXRlcg0KICAgICAgICB0byBkaXN0aW5ndWlzaCBzaWduYWxpbmcvdW5zaWduYWxpbmc/DQoNCiAgICAgICAgUkVTT0xWRUQ6IE5vLiBXaGlsZSBhbGwgc3luYyBvYmplY3RzIHdpbGwgc3VwcG9ydCB1bnNpZ25hbGluZywNCiAgICAgICAgdGhlIHJldXNhYmxlIHN5bmMgb2JqZWN0IGlzIHRoZSBvbmx5IGtub3duIG9uZSB0aGF0IHN1cHBvcnRzDQogICAgICAgIGRpcmVjdCBzaWduYWxpbmcsIHJhdGhlciB0aGFuIHNpZ25hbGluZyB0aHJvdWdoIHNvbWUgY29uZGl0aW9uDQogICAgICAgIGJlaW5nIGFjaGlldmVkLiBUaGVyZWZvcmUgaXQgaXMgc2ltcGxlc3QgdG8gaGF2ZSB0aGUgbmV3DQogICAgICAgIGZ1bmN0aW9uIG9ubHkgc3VwcG9ydCB1bnNpZ25hbGluZywgYW5kIGNvbnRpbnVlIHRvIHVzZSB0aGUgb2xkDQogICAgICAgIGV4dGVuc2lvbiBmb3IgdGhlIG9uZSBjYXNlIHdoZXJlIHNpZ25hbGluZyBpcyByZXF1aXJlZC4NCg0KICAgIDQuICBJZiB0aGUgaW5pdGlhbCBhdHRyaWJ1dGUgbGlzdCBpcyBpbmNvbXBsZXRlIChlLmcuIGFuIE9wZW5DTA0KICAgICAgICBldmVudCBoYW5kbGUgaXMgbm90IHByb3ZpZGVkIGR1cmluZyBjcmVhdGlvbiBvZiBhbiBPcGVuQ0wgZXZlbnQNCiAgICAgICAgc3luYyBvYmplY3QpLCBzaG91bGQgdGhlIEVHTF9TWU5DX1NUQVRVUyBkZWZhdWx0IHRvIEVHTF9TSUdOQUxFRA0KICAgICAgICByYXRoZXIgdGhhbiBnZW5lcmF0aW5nIGFuIGVycm9yIGlmIGl0IGlzIGxlZnQgdW5zcGVjaWZpZWQ/DQoNCiAgICAgICAgUkVTT0xWRUQ6IEhhbmRsaW5nIG9mIGFsbG93ZWQvZGVmYXVsdCB2YWx1ZXMgZm9yIEVHTF9TWU5DX1NUQVRVUw0KICAgICAgICBpcyBiYXNlZCBvbiB0aGUgc3luYyB0eXBlLiBGb3IgZmVuY2Ugc3luY3MsIGVpdGhlciB2YWx1ZSBpcw0KICAgICAgICBhbGxvd2VkLCBkZWZhdWx0aW5nIHRvIEVHTF9VTlNJR05BTEVELiBGb3IgT3BlbkNMIGV2ZW50IHN5bmNzLA0KICAgICAgICB0aGUgdmFsdWUgbWF5IG5vdCBiZSBzcGVjaWZpZWQsIGFuZCBpbnN0ZWFkIGlzIGRldGVybWluZWQgYnkNCiAgICAgICAgd2hldGhlciBhbiBPcGVuQ0wgZXZlbnQgaXMgcHJvdmlkZWQgYXQgY3JlYXRpb24gdGltZSwgYW5kIGlmIHNvDQogICAgICAgIGJ5IHRoZSBzdGF0dXMgb2YgdGhhdCBldmVudC4NCg0KUmV2aXNpb24gSGlzdG9yeQ0KDQogICAgIzQgIChNYXkgMTYsIDIwMTgpIERhbmllbCBLYXJ0Y2gNCiAgICAgICAgLSBNaW5vciBjb3JyZWN0aW9ucyB0byB3b3JkaW5nDQoNCiAgICAjMyAgKEFwcmlsIDIwLCAyMDE4KSBEYW5pZWwgS2FydGNoDQogICAgICAgIC0gUmVuYW1lZCB0byBFWFQNCiAgICAgICAgLSBGaXhlZCBncmFtbWF0aWNhbCBlcnJvcnMgYW5kIHByZXBhcmVkIGZvciBwdWJsaWNhdGlvbg0KDQogICAgIzIgIChKYW51YXJ5IDIzLCAyMDE4KSBEYW5pZWwgS2FydGNoDQogICAgICAgIC0gUmV3cm90ZSBzb21lIHNlY3Rpb25zIGZvciBjbGFyaXR5LCBhbmQgZml4ZWQgdHlwb3MNCiAgICAgICAgLSBDaGFuZ2VkIGRlZmF1bHQvYWxsb3dlZCBiZWhhdmlvciBmb3Igc2lnbmFsIHN0YXRlIGF0IGNyZWF0aW9uDQogICAgICAgICAgdGltZSB0byBiZSBkZXRlcm1pbmVkIGJ5IHRoZSBzeW5jIHR5cGUgYW5kIG90aGVyIGF0dHJpYnV0ZXMuDQogICAgICAgIC0gU2ltcGxpZmllZCBpbnRlcmFjdGlvbiB3aXRoIEVHTF9LSFJfcmV1c2FibGVfc3luYy4NCiAgICAgICAgLSBSZWZpbmVkIGludGVyYWN0aW9uIHdpdGggRUdMX0FORFJPSURfbmF0aXZlX2ZlbmNlX3N5bmMgdG8NCiAgICAgICAgICBjbGFyaWZ5IGFsbG93ZWQgaW5pdGlhbCBzdGF0ZXMgZm9yIHRoZSBzeW5jIHN0YXR1cyBhbmQgZml4IHRoZQ0KICAgICAgICAgIGRlc2NyaXB0aW9uIG9mIHdoZW4gbmV3IG5hdGl2ZSBmZW5jZXMgYXJlIGdlbmVyYXRlZC4NCg0KICAgICMxICAoSmFudWFyeSAxNiwgMjAxOCkgRGFuaWVsIEthcnRjaA0KICAgICAgICAtIEluaXRpYWwgZHJhZnQgYXMgWFhYDQo=