XGRvY3VtZW50Y2xhc3N7bGxuY3N9DQpcdXNlcGFja2FnZXthbXNtYXRoLGFtc3N5bWIsdXJsfQ0KXHVzZXBhY2thZ2V7YWxnb3JpdGhtfQ0KXHVzZXBhY2thZ2V7YWxncHNldWRvY29kZX0NClx1c2VwYWNrYWdle2dyYXBoaWN4fQ0KXHVzZXBhY2thZ2V7bWF0aGNvbXB9DQoNClxuZXdjb21tYW5ke1xDeWN9e1xtYXRocm17XFBoaX19DQpcbmV3Y29tbWFuZHtcRnJvYn17XG1hdGhybXtcUGhpfX0NClxuZXdjb21tYW5ke1x0d2lzdH17XG1hdGhybXtcUHNpfX0NClxuZXdjb21tYW5ke1xGfXtcbWF0aGJie0Z9fQ0KXG5ld2NvbW1hbmR7XGhhbGZ9WzFde3tcbGZsb29yIzEvMlxyZmxvb3J9fQ0KXG5ld2NvbW1hbmR7XG9yZH17XHFvcG5hbWVccmVsYXh7bm99e29yZH19DQpcbmV3Y29tbWFuZHtcc2lnbn17XHFvcG5hbWVccmVsYXh7bm99e3NpZ259fQ0KXG5ld2NvbW1hbmR7XHRyfXtccW9wbmFtZVxyZWxheHtub317dHJ9fQ0KXG5ld2NvbW1hbmR7XFp9e1xtYXRoYmJ7Wn19DQpcbmV3Y29tbWFuZHtcQ3BwfXtDXGtlcm4tMC4wNWVtXHRleHR0dHsrXGtlcm4tMC4wM2VtK319DQpcbmV3Y29tbWFuZHtccHB9e1wsXGtlcm4tMC4wNWVtXHRleHR0dHsrXGtlcm4tMC4wMzFlbSt9fQ0KXG5ld2NvbW1hbmRcVHtccnVsZXswcHR9ezIuNmV4fX0NCg0KXG5ld2NvbW1hbmR7XElucHV0fXtcaXRlbVtcdGV4dHNje0lucHV0On1dfQ0KXG5ld2NvbW1hbmR7XE91dHB1dH17XGl0ZW1bXHRleHRzY3tPdXRwdXQ6fV19DQoNClxzbG9wcHkNCg0KXGJlZ2lue2RvY3VtZW50fQ0KDQpccGFnZXN0eWxle3BsYWlufQ0KDQpcdGl0bGV7VGhlIEFwYWNoZSBNaWxhZ3JvIENyeXB0byBMaWJyYXJ5fQ0KDQpcYXV0aG9yew0KTWljaGFlbCBTY290dCANCn0NCg0KXGluc3RpdHV0ZXt9DQoNClxpbnN0aXR1dGV7DQolQ2hpZWYgQ3J5cHRvZ3JhcGhlciBcXA0KTUlSQUNMIExhYnNcXCUNCiVcYmZ7Rm9yIEludGVybmFsIERpc3RyaWJ1dGlvbiBPbmx5fSBcXA0KXGVtYWlse21pa2Uuc2NvdHRAbWlyYWNsLmNvbX0gXFwNCn0NCg0KXG1ha2V0aXRsZQ0KDQpcYmVnaW57YWJzdHJhY3R9DQoNCldlIGludHJvZHVjZSBhIG5ldyBtdWx0aS1saW5ndWFsIGNyeXB0byBsaWJyYXJ5LCBzcGVjaWZpY2FsbHkgZGVzaWduZWQgdG8gc3VwcG9ydCB0aGUgSW50ZXJuZXQgb2YgVGhpbmdzLg0KDQpcZW5ke2Fic3RyYWN0fSANCg0KXHNlY3Rpb257SW50cm9kdWN0aW9ufVxsYWJlbHtzZWM6aW50cm99DQoNCiVPbmUgb2YgdGhlIG1ham9yIG15c3RlcmllcyBpbiB0aGUgcmVhbC13b3JsZCBvZiBjcnlwdG8gaXMgcmVzaXN0YW5jZSB0byB0aGUgZXhwbG9pdGF0aW9uIG9mIG5ldyByZXNlYXJjaCBpZGVhcy4gSXRzIG5vdCB0aGF0IGNyeXB0b2dyYXBoaWMgcmVzZWFyY2ggaGFzIGZhaWxlZCB0byB0aHJvdyB1cCBuZXcgaWRlYXMgdGhhdCBoYXZlDQoldGhlIHBvdGVudGlhbCBmb3IgY29tbWVyY2lhbCBleHBsb2l0YXRpb24gLS0gZmFyIGZyb20gaXQuIEJ1dCBpbiB0aGUgcmVhbC13b3JsZCAxOTcwJ3MgY3J5cHRvIHJ1bGVzIHN1cHJlbWUsIGFuZCB2ZXJ5IGxpdHRsZSBoYXBwZW5zIHRoYXQgaXNuJ3QgUEtJL1JTQSBiYXNlZC4gVGhlIHJlYXNvbnMgZm9yIHRoaXMgYXJlIG1hbnkgYW5kIHZhcmllZC4NCiVIb3dldmVyIG9uZSBwYXJ0IG9mIHRoZSBwdXp6bGUgbWlnaHQgYmUgdGhlIG5vbi1hdmFpbGFiaWxpdHkgb2YgZWFzeS10by11c2Ugb3BlbiBzb3VyY2UgY3J5cHRvZ3JhcGhpYyB0b29scywgdGhhdCBkbyBub3QgcmVxdWlyZSBpbiBkZXB0aCBjcnlwdG9ncmFwaGljIGV4cGVydGlzZSB0byBkZXBsb3kuDQoNCiVJbiBwYXJ0aWN1bGFyIA0KVGhlcmUgYXJlIG1hbnkgY3J5cHRvIGxpYnJhcmllcyBvdXQgdGhlcmUuIE1hbnkgb2ZmZXIgYSBiZXdpbGRlcmluZyB2YXJpZXR5IG9mIGNyeXB0b2dyYXBoaWMgcHJpbWl0aXZlcywgYXQgZGlmZmVyZW50IGxldmVscyBvZiBzZWN1cml0eS4gTWFueSB1c2UgZXh0ZW5zaXZlIGFzc2VtYmx5IGxhbmd1YWdlIA0KaW4gb3JkZXIgdG8gYmUgYXMgZmFzdCBhcyBwb3NzaWJsZS4gTWFueSBhcmUgdmVyeSBiaWcsIGV2ZW4gYmxvYXRlZC4gU29tZSByZWx5IG9uIG90aGVyIGV4dGVybmFsIGxpYnJhcmllcy4gTWFueSB3ZXJlIGRlc2lnbmVkIGJ5IGFjYWRlbWljcyBmb3IgYWNhZGVtaWNzLCBhbmQgc28gYXJlIG5vdCByZWFsbHkgc3VpdGFibGUgZm9yIA0KY29tbWVyY2lhbCB1c2UuIE1hbnkgYXJlIG90aGVyd2lzZSBleGNlbGxlbnQsIGJ1dCBub3Qgd3JpdHRlbiBpbiBvdXIgZmF2b3VyaXRlIGxhbmd1YWdlLg0KDQpUaGUgQXBhY2hlIE1pbGFncm8gQ3J5cHRvIExpYnJhcnkgKEFNQ0wpIFxmb290bm90ZXtcdXJse2h0dHBzOi8vZ2l0aHViLmNvbS9NSVJBQ0wvYW1jbC5naXR9fSBpcyBkaWZmZXJlbnQuIEFNQ0wgaXMgY29tcGxldGVseSBzZWxmLWNvbnRhaW5lZCAoZXhjZXB0IGZvciB0aGUgcmVxdWlyZW1lbnQgZm9yIGFuIGV4dGVybmFsIGVudHJvcHkgc291cmNlIGZvciByYW5kb20gbnVtYmVyIGdlbmVyYXRpb24pLiBBTUNMIGlzIGZvciB1c2UgaW4gDQp0aGUgcHJlLXF1YW50dW0gZXJhIC0tIHRoYXQgaXMgaW4gdGhlIGhlcmUgYW5kIG5vdy4gV2l0aCANCnRoZSBhZHZlbnQgb2YgYSB3b3JrYWJsZSBxdWFudHVtIGNvbXB1dGVyLCBBTUNMIHdpbGwgYmVjb21lIGhpc3RvcnkuIEJ1dCB3ZSBhcmUgbm90IGV4cGVjdGluZyB0aGF0IHRvIGhhcHBlbiBhbnkgdGltZSBzb29uLg0KDQpBTUNMIGlzIHBvcnRhYmxlIC0tIHRoZXJlIGlzIG5vIGFzc2VtYmx5IGxhbmd1YWdlLiBUaGUgb3JpZ2luYWwgdmVyc2lvbiBpcyB3cml0dGVuIGluIEMsIEphdmEsIEphdmFzY3JpcHQsIEdvIGFuZCBTd2lmdCB1c2luZyBvbmx5IGdlbmVyaWMgcHJvZ3JhbW1pbmcgY29uc3RydWN0cywgYnV0IEFNQ0wgaXMgdHJ1bHkgDQptdWx0aS1saW5ndWFsLCBhcyBjb21wYXRpYmxlIA0KdmVyc2lvbnMgd2lsbCBiZSBhdmFpbGFibGUgaW4gbWFueSBvdGhlciBsYW5ndWFnZXMgKHNlZSBiZWxvdykuIFRoZXNlIHZlcnNpb25zIHdpbGwgYmUgaWRlbnRpY2FsIGluIHRoYXQgZm9yIHRoZSBzYW1lIGlucHV0cyB0aGV5IHdpbGwgbm90IG9ubHkgcHJvZHVjZSB0aGUgc2FtZSBvdXRwdXRzLCBidXQgYWxsIGludGVybmFsIGNhbGN1bGF0aW9ucyB3aWxsIGFsc28gYmUgdGhlIHNhbWUuIA0KQU1DTCBpcyBmYXN0LCBidXQgZG9lcyBub3QgYXR0ZW1wdCB0byBzZXQgc3BlZWQgcmVjb3JkcyAoYSBwYXJ0aWN1bGFyIGFjYWRlbWljIG9ic2Vzc2lvbikuIFRoZXJlIGFyZSBvZiBjb3Vyc2UgY29udGV4dHMgd2hlcmUgc3BlZWQgaXMgb2YgdGhlIGVzc2VuY2UgLS0gZm9yIGV4YW1wbGUgZm9yIGEgc2VydmVyIGZhcm0gd2hpY2ggbXVzdCBoYW5kbGUgDQptdWx0aXBsZSBTU0wgY29ubmVjdGlvbnMsIGFuZCB3aGVyZSBhIDEwXCUgc3BlZWQgaW5jcmVhc2UgaW1wbGllcyB0aGUgbmVlZCBmb3IgMTBcJSBsZXNzIHNlcnZlcnMsIHdpdGggYSBhIDEwXCUgc2F2aW5nIG9uIGVsZWN0cmljaXR5LiBCdXQgaW4gdGhlIEludGVybmV0IG9mIFRoaW5ncyB3ZSB3b3VsZCBzdWdnZXN0IHRoYXQgdGhpcyBpcyBsZXNzIA0KaW1wb3J0YW50LiBJbiBnZW5lcmFsIHRoZSBzcGVlZA0KaXMgZXhwZWN0ZWQgdG8gYmUgYGBnb29kIGVub3VnaCcnLiBIb3dldmVyIEFNQ0wgaXMgc21hbGwuIFNvbWUgbGlicmFyaWVzIGJvYXN0IG9mIGhhdmluZyBodW5kcmVkcyBvZiB0aG91c2FuZHMgb2YgbGluZXMgb2YgY29kZSAtIEFNQ0wgaGFzIGxlc3MgdGhhbiAxMCwwMDAuIEFNQ0wgdGFrZXMgdXAgdGhlIG1pbmltdW0gb2YgDQpST00vUkFNIHJlc291cmNlcyBpbiBvcmRlciB0byBmaXQgaW50byB0aGUgc21hbGxlc3QgcG9zc2libGUgZW1iZWRkZWQgZm9vdHByaW50LCBjb25zaXN0ZW50IHdpdGggb3RoZXIgZGVzaWduIGNvbnN0cmFpbnRzLiBJdCBpcyBleHBlY3RlZCB0aGF0IHRoaXMgd2lsbCBiZSB2aXRhbCBmb3IgaW1wbGVtZW50YXRpb25zIHRoYXQgDQpzdXBwb3J0IHNlY3VyaXR5IGluIHRoZSBJbnRlcm5ldCBvZiBUaGluZ3MuIEFNQ0wgKHRoZSBDIHZlcnNpb24pIG9ubHkgdXNlcyBzdGFjayBtZW1vcnksIGFuZCBpcyB0aHVzIG5hdGl2ZWx5IG11bHRpLXRocmVhZGVkLg0KDQpPbmx5IG9uZSBsZXZlbCBvZiBzZWN1cml0eSBpcyBzdXBwb3J0ZWQsIGVxdWl2YWxlbnQgdG8gMTI4LWJpdCBBRVMuIFRoaXMgaXMgdGhlIGN1cnJlbnQgc3RhbmRhcmQgbGV2ZWwgZm9yIGNyeXB0b2dyYXBoeSB0aGF0IGlzIGV4cGVjdGVkIHRvIGJlIHVuYnJlYWthYmxlLiBBcyBhIGp1c3RpZmljYXRpb24gd2UgY291bGQgbm90IA0KaW1wcm92ZSBvbiB0aGF0IGdpdmVuIGJ5IE1pZWxlIGFuZCBMZW5zdHJhIFxjaXRle21sfSAtLSBgYFdpdGggMTI4LWJpdCBzZWN1cml0eSBtb3JlIHRoYW4gc3VmZmljaWVudCBmb3IgdGhlIGZvcmVzZWVhYmxlIGZ1dHVyZSwgaXQgaXMgbm90IA0KY2xlYXIgZWl0aGVyIHdoYXQgcHVycG9zZSBpcyBzZXJ2ZWQgYnkgaGlnaGVyIHNlY3VyaXR5IGxldmVscywgb3RoZXIgdGhhbiBjYXRlcmluZyANCnRvIJNUT1AgU0VDUkVUlCAxOTItYml0IHNlY3VyaXR5IC4uLi4uIEluIHRoaXMgY29udGV4dCBpdCBpcyBpbnRlcmVzdGluZyB0byANCm5vdGUgdGhhdCAyNTYtYml0IEFFUywgYWxzbyBwcmVzY3JpYmVkIC4uLi4uLiBmb3Igk1RPUCBTRUNSRVSULCB3YXMgaW50cm9kdWNlZCANCm9ubHkgdG8gc3RpbGwgaGF2ZSBhIDEyOC1iaXQgc2VjdXJlIHN5bW1ldHJpYyBjaXBoZXIgaW4gdGhlIHBvc3QtcXVhbnR1bSB3b3JsZCANCi4uLi4uLiwgYW5kIHRoYXQgMTkyLWJpdCBzZWN1cml0eSB3YXMgbWVyZWx5IGEgc2lkZS1lZmZlY3QgdGhhdCByZXN1bHRlZCBmcm9tIA0KdGhlIGNhbGN1bGF0aW9uICgxMjgrMjU2KS8yIC4uLi4uLi4gSW4gdGhhdCB3b3JsZCBFQ0MgaXMgb2Jzb2xldGUgYW55aG93LicnDQoNCg0KQU1DTCBtYWtlcyBtb3N0IA0Kb2YgdGhlIGNob2ljZXMgZm9yIHlvdSBhcyB0byB3aGljaCBwcmltaXRpdmVzIHRvIHVzZSwgYmFzZWQgb24gdGhlIGJlc3QgYXZhaWxhYmxlIGN1cnJlbnQgYWR2aWNlLiBTcGVjaWZpY2FsbHkgaXQgdXNlcyBBRVMtMTI4IGZvciBzeW1tZXRyaWMgZW5jcnlwdGlvbiwgU0hBMjU2IGZvciBoYXNoaW5nLCAyNTYtYml0IHByaW1lIGZpZWxkIGVsbGlwdGljDQpjdXJ2ZXMgZm9yIHB1YmxpYyBrZXkgcHJvdG9jb2xzLCBhbmQgMjU2LWJpdCBCTiBjdXJ2ZXMgdG8gc3VwcG9ydCBwYWlyaW5nLWJhc2VkIHByb3RvY29scy4gSG93ZXZlciB0aHJlZSBkaWZmZXJlbnQgcGFyYW1ldGVyaXphdGlvbnMgb2YgRWxsaXB0aWMgY3VydmUgYXJlIHN1cHBvcnRlZCAtIFdlaWVyc3RyYXNzLCBFZHdhcmRzIGFuZCANCk1vbnRnb21lcnksIGFzIGVhY2ggaXMgYXBwcm9wcmlhdGUgd2l0aGluIGl0cyBvd24gbmljaGUuIEluIGVhY2ggY2FzZSBvbmx5IHRoZSBzdGFuZGFyZCBwcm9qZWN0aXZlIGNvb3JkaW5hdGVzIGFyZSB1c2VkLiBCdXQgeW91IGRvIGdldCB0byANCmNob29zZSB0aGUgYWN0dWFsIGVsbGlwdGljIGN1cnZlLCB3aXRoIHN1cHBvcnQgZm9yIHRocmVlIGRpZmZlcmVudCANCmZvcm1zIG9mIHRoZSBtb2R1bHVzLiBGb3IgcGFpcmluZ3Mgd2UgYXNzdW1lIGEgbW9kdWx1cyBjb25ncnVlbnQgdG8gJDMgXGJtb2QgOCQgd2l0aCBhIEQtdHlwZSB0d2lzdCwgcGFyYW1ldGVyaXplZCBieSBhIG5lZ2F0aXZlICR4JCB2YWx1ZSBcY2l0ZXtiYXJyZXRvLW5hZWhyaWd9Lg0KU3RhbmRhcmQgbW9kZXMgb2YgQUVTIGFyZSBzdXBwb3J0ZWQsIHBsdXMgR0NNIG1vZGUgZm9yIGF1dGhlbnRpY2F0ZWQgZW5jcnlwdGlvbi4NCg0KVGhlIEMgdmVyc2lvbiBvZiBBTUNMIGlzIGNvbmZpZ3VyZWQgYXQgY29tcGlsZSB0aW1lIGZvciAxNiwgMzIgb3IgNjQgYml0IHByb2Nlc3NvcnMsIGFuZCBmb3IgYSBzcGVjaWZpYyBlbGxpcHRpYyBjdXJ2ZS4gVGhlIEphdmEgYW5kIEphdmFzY3JpcHQgdmVyc2lvbnMgYXJlIChvYnZpb3VzbHkpIHByb2Nlc3NvciBhZ25vc3RpYywgDQpidXQgdGhlIHNhbWUgY2hvaWNlcyBvZiBlbGxpcHRpYyBjdXJ2ZSBhcmUgYXZhaWxhYmxlLg0KDQpBTUNMIGlzIHdyaXR0ZW4gd2l0aCBhbiBhd2FyZW5lc3Mgb2YgdGhlIGFiaWxpdGllcyBvZiBtb2Rlcm4gcGlwZWxpbmVkIHByb2Nlc3NvcnMuIEluIHBhcnRpY3VsYXIgdGhlcmUgd2FzIGFuIGF3YXJlbmVzcyB0aGF0IHRoZSB1bnByZWRpY3RhYmxlIHByb2dyYW0gYnJhbmNoIHNob3VsZCBiZSBhdm9pZGVkIGF0IGFsbCBjb3N0cywgbm90IA0Kb25seSBhcyBpdCBzbG93cyBkb3duIHRoZSBwcm9jZXNzb3IsIGJ1dCBhcyBpdCBtYXkgb3BlbiB0aGUgZG9vciB0byBzaWRlLWNoYW5uZWwgYXR0YWNrcy4gVGhlIGlubm9jdW91cyBsb29raW5nIHtcdHQgaWZ9IHN0YXRlbWVudCAtLSB1bmxlc3MgaXRzIG91dGNvbWUgY2FuIGJlIGFjY3VyYXRlbHkgcHJlZGljdGVkIC0tIGlzIHRoZSBlbmVteSANCm9mIHF1YWxpdHkgY3J5cHRvIHNvZnR3YXJlLg0KDQpJbiB0aGUgc2VxdWVsIHdlIHJlZmVyIHRvIHRoZSBDIHZlcnNpb24gb2YgQU1DTCwgdW5sZXNzIG90aGVyd2lzZSBzcGVjaWZpZWQuIFdlIGVtcGhhc2lzIHRoYXQgYWxsIEFNQ0wgdmVyc2lvbnMgYXJlIGNvbXBsZXRlbHkgc2VsZi1jb250YWluZWQuIE5vIGV4dGVybmFsIA0KbGlicmFyaWVzIG9yIHBhY2thZ2VzIGFyZSByZXF1aXJlZCB0byBpbXBsZW1lbnQgYWxsIG9mIHRoZSBzdXBwb3J0ZWQgY3J5cHRvZ3JhcGhpYyBmdW5jdGlvbmFsaXR5IChvdGhlciB0aGFuIGZvciBhbiBleHRlcm5hbCBlbnRyb3B5IHNvdXJjZSkuDQoNClxzZWN0aW9ue0NvbnRleHR9DQoNCkEgY3J5cHRvIGxpYnJhcnkgZG9lcyBub3QgZnVuY3Rpb24gaXMgaXNvbGF0aW9uLiBUaGUgQU1DTCB3YXMgb3JpZ2luYWxseSBkZXNpZ25lZCB0byBzdXBwb3J0IHRoZSBNSVJBQ0wgSW9UIHNvbHV0aW9uLiBUaGUgTUlSQUNMIElvVCBzb2x1dGlvbiBpcyBiYXNlZCBvbiBhIGNsb3VkLWJhc2VkIGluZnJhc3RydWN0dXJlIGRlc2lnbmVkIGJ5IE1JUkFDTCANCnRvIHN1cHBvcnQgdGhlIE0tUGluIHByb3RvY29sIFxjaXRle21waW59LCBidXQgd2hpY2ggaGFzIHdpZGVyIGFwcGxpY2F0aW9uIHRvIG5vdmVsIHByb3RvY29scyBvZiBwYXJ0aWN1bGFyIHJlbGV2YW5jZSB0byB0aGUgSW9ULiBUaGlzIGRvY3VtZW50IGRlc2NyaWJlcyB0aGUgQU1DTCBsaWJyYXJ5IHdoaWNoIHdhcyBvcmlnaW5hbGx5IGRlc2lnbmVkIGZvciBpbnRlcm5hbCB1c2UsIA0KYnV0IHdoaWNoIGhhcyBub3cgcmVhY2hlZCBhIGxldmVsIG9mIG1hdHVyaXR5IHdoZXJlIHdlIGFyZSBwbGVhc2VkIHRvIG1ha2UgaXQgYXZhaWxhYmxlIGFzIGEgc2VydmljZSB0byB0aGUgd2lkZXIgY29tbXVuaXR5IGFzIGFuIG9wZW4gc291cmNlIHByb2R1Y3QsIHVuZGVyIGEgc3RhbmRhcmQgQXBhY2hlIDIuMCBsaWNlbnNlLg0KDQpcc2VjdGlvbntMaWJyYXJ5IFN0cnVjdHVyZX0NCg0KVGhlIG1vZHVsZXMgdGhhdCBtYWtlIHVwIEFNQ0wgYXJlIHNob3duIGJlbG93LCB3aXRoIHNvbWUgaW5kaWNhdGlvbiBvZiBob3cgdGhleSBpbnRlcmFjdC4gU2V2ZXJhbCBleGFtcGxlIEFQSXMgd2lsbCBiZSBwcm92aWRlZCB0byBpbXBsZW1lbnQgY29tbW9uIHByb3RvY29scy4gTm90ZSB0aGF0IGFsbA0KaW50ZXJhY3Rpb24gd2l0aCB0aGUgQVBJIGlzIHZpYSBtYWNoaW5lLWluZGVwZW5kZW50IGVuZGlhbi1pbmRpZmZlcmVudCBhcnJheXMgb2YgYnl0ZXMgKGEuay5hLiBvY3RldCBzdHJpbmdzKS4gDQpUaGVyZWZvcmUgdGhlIHVuZGVybHlpbmcgd29ya2luZ3Mgb2YgdGhlIGxpYnJhcnkgYXJlIGludmlzaWJsZSB0byB0aGUgY29uc3VtZXIgb2YgaXRzIHNlcnZpY2VzLg0KDQpcYmVnaW57ZmlndXJlfVshaHRiXQ0KICBcYmVnaW57Y2VudGVyfQ0KICAgIFxpbmNsdWRlZ3JhcGhpY3Nbd2lkdGg9MTIwbW0gXXtjbGludC5lcHN9DQogIFxlbmR7Y2VudGVyfQ0KICBcY2FwdGlvbntcc21hbGwgVGhlIEFNQ0wgbGlicmFyeS59DQogIFxsYWJlbHtjbGludH0NClxlbmR7ZmlndXJlfQ0KDQpUaGUgc3ltbWV0cmljIGVuY3J5cHRpb24gYW5kIGhhc2hpbmcgY29kZSwgYWxvbmcgd2l0aCB0aGUgcmFuZG9tIG51bWJlciBnZW5lcmF0aW9uLCBpcyB1bmludGVyZXN0aW5nLCBhbmQgc2luY2Ugd2UgbWFrZSBubyBjbGFpbXMgZm9yIGl0LCB3ZSB3aWxsIG5vdCByZWZlciB0byBpdCBhZ2Fpbi4gSXQgd2FzIG1vc3RseQ0KYm9ycm93ZWQgZnJvbSBvdXIgd2VsbC1rbm93biBNSVJBQ0wgbGlicmFyeS4NCg0KXHNlY3Rpb257SGFuZGxpbmcgMjU2LWJpdCBOdW1iZXJzfQ0KDQpcc3Vic2VjdGlvbntSZXByZXNlbnRhdGlvbn0NCg0KT25lIG9mIHRoZSBtYWpvciBkZXNpZ24gZGVjaXNpb25zIGlzIGhvdyB0byByZXByZXNlbnQgdGhlIDI1Ni1iaXQgZmllbGQgZWxlbWVudHMgcmVxdWlyZWQgZm9yIHRoZSBlbGxpcHRpYyBjdXJ2ZSBhbmQgcGFpcmluZy1iYXNlZCBjcnlwdG9ncmFwaHkuIEhlcmUgdGhlcmUgYXJlIHR3byBkaWZmZXJlbnQgYXBwcm9hY2hlcy4gDQpPbmUgaXMgdG8gcGFjayB0aGUgYml0cyBhcyB0aWdodGx5IGFzIHBvc3NpYmxlIGludG8gY29tcHV0ZXIgd29yZHMuIEZvciBleGFtcGxlIG9uIGEgNjQtYml0IGNvbXB1dGVyIDI1Ni1iaXQgbnVtYmVycyBjYW4gYmUgc3RvcmVkIGluIGp1c3QgNCB3b3Jkcy4gSG93ZXZlciB0byBtYW5pcHVsYXRlIG51bWJlcnMgaW4gdGhpcyANCmZvcm0sIGV2ZW4gZm9yIHNpbXBsZSBhZGRpdGlvbiwgcmVxdWlyZXMgaGFuZGxpbmcgb2YgY2FycnkgYml0cyBpZiBvdmVyZmxvdyBpcyB0byBiZSBhdm9pZGVkLCANCmFuZCBhIGhpZ2gtbGV2ZWwgbGFuZ3VhZ2UgZG9lcyBub3QgaGF2ZSBkaXJlY3QgYWNjZXNzIHRvIGNhcnJ5IGZsYWdzLiBJdCBpcyBwb3NzaWJsZSB0byBlbXVsYXRlIHRoZSBmbGFncywgYnV0IHRoaXMgd291bGQgYmUgaW5lZmZpY2llbnQuIEluIGZhY3QgdGhpcyBhcHByb2FjaCBpcyBvbmx5IHJlYWxseSBzdWl0YWJsZSANCmZvciBhbiBhc3NlbWJseSBsYW5ndWFnZSBpbXBsZW1lbnRhdGlvbi4NCg0KVGhlIGFsdGVybmF0aXZlIGlkZWEgaXMgdG8gdXNlIGV4dHJhIHdvcmRzIGZvciB0aGUgcmVwcmVzZW50YXRpb24sIGFuZCB0aGVuIHRyeSB0byBvZmZzZXQgdGhlIGFkZGl0aW9uYWwgY29zdCBieSB0YWtpbmcgZnVsbCBhZHZhbnRhZ2Ugb2YgdGhlIGBgc3BhcmUnJyBiaXRzIGluIGV2ZXJ5IHdvcmQuIA0KVGhpcyBpZGVhIGZvbGxvd3MgYSBgYGNvcm5lciBvZiB0aGUgbGl0ZXJhdHVyZScnIFxjaXRle2Jlcm5zdGVpbi1jaHVlbmdzYXRpYW5zdXAtbGFuZ2V9IHdoaWNoIGhhcyBiZWVuIHByb21vdGVkIGJ5IEJlcm5zdGVpbiBhbmQgaGlzIGNvbGxhYm9yYXRvcnMgaW4gc2V2ZXJhbCBwdWJsaWNhdGlvbnMuDQpSZWZlciB0byBmaWd1cmUgXHJlZnt3b3Jkc30sIHdoZXJlIGVhY2ggZGlnaXQgb2YgdGhlIHJlcHJlc2VudGF0aW9uIGlzIHN0b3JlZCBhcyBhIHNpZ25lZCBpbnRlZ2VyIHdoaWNoIGlzIHRoZSBzaXplIG9mIHRoZSBwcm9jZXNzb3Igd29yZC1sZW5ndGguIA0KDQoNCk5vdGUgdGhhdCBhbG1vc3QgYWxsIGFyaXRobWV0aWMgdGFrZXMgcGxhY2UgbW9kdWxvIGEgMjU2LWJpdCBwcmltZSBudW1iZXIsIHRoZSBtb2R1bHVzIHJlcHJlc2VudGluZyB0aGUgZmllbGQgb3ZlciB3aGljaCB0aGUgZWxsaXB0aWMgY3VydmUgaXMgZGVmaW5lZCwgaGVyZSBkZW5vdGVkIGFzICRwJC4NCg0KT24gNjQtYml0IHByb2Nlc3NvcnMsIEFNQ0wgcmVwcmVzZW50cyBudW1iZXJzIHRvIHRoZSBiYXNlICQyXns1Nn0kIGluIGEgNSBlbGVtZW50IGFycmF5LCB0aGUgV29yZCBFeGNlc3MgaXMgNyBiaXRzLCBhbmQgZm9yIGEgMjU2LWJpdCBtb2R1bHVzIHRoZSBGaWVsZCBFeGNlc3MgaXMgMjQgYml0cw0KDQpPbiAzMi1iaXQgcHJvY2Vzc29ycywgQU1DTCByZXByZXNlbnRzIG51bWJlcnMgdG8gdGhlIGJhc2UgJDJeezI5fSQgaW4gYSA5IGVsZW1lbnQgYXJyYXksIHRoZSBXb3JkIEV4Y2VzcyBpcyAyIGJpdHMsIGFuZCBmb3IgYSAyNTYtYml0IG1vZHVsdXMgdGhlIEZpZWxkIEV4Y2VzcyBpcyA1IGJpdHMNCg0KT24gMTYtYml0IHByb2Nlc3NvcnMsIEFNQ0wgcmVwcmVzZW50cyBudW1iZXJzIHRvIHRoZSBiYXNlICQyXnsxM30kIGluIGEgMjAgZWxlbWVudCBhcnJheSwgdGhlIFdvcmQgRXhjZXNzIGlzIDIgYml0cywgYW5kIGZvciBhIDI1Ni1iaXQgbW9kdWx1cyB0aGUgRmllbGQgRXhjZXNzIGlzIDQgYml0cw0KDQpTdWNoIGEgcmVwcmVzZW50YXRpb24gb2YgYSAyNTYtYml0IG51bWJlciBpcyByZWZlcnJlZCB0byBhcyBhIHtCSUd9LiBBZGRpdGlvbiBvciBzdWJ0cmFjdGlvbiBvZiBhIHBhaXIgb2Yge0JJR31zLCByZXN1bHRzIGluIGFub3RoZXIge0JJR30uDQoNClRoZSBKYXZhIHZlcnNpb24gdXNlcyBleGFjdGx5IHRoZSBzYW1lIDMyLWJpdCByZXByZXNlbnRhdGlvbiBhcyBhYm92ZS4gRm9yIEphdmFzY3JpcHQgKHdoZXJlIGFsbCBudW1iZXJzIGFyZSBzdG9yZWQgYXMgNjQtYml0IGZsb2F0aW5nIHBvaW50IHdpdGggYSA1Mi1iaXQgbWFudGlzc2EsIGJ1dCBtb3N0bHkgDQptYW5pcHVsYXRlZCBhcyAzMi1iaXQgaW50ZWdlcnMpLCBudW1iZXJzDQphcmUgcmVwcmVzZW50ZWQgdG8gdGhlIGJhc2UgJDJeezI0fSQgaW4gYW4gMTEgZWxlbWVudCBhcnJheSwgdGhlIFdvcmQgRXhjZXNzIGlzIDcgYml0cywgYW5kIHRoZSBGaWVsZCBFeGNlc3MgZm9yIGEgMjU2LWJpdCBtb2R1bHVzIGlzIDggYml0cy4gDQoNClxzdWJzZWN0aW9ue0FkZGl0aW9uIGFuZCBTdWJ0cmFjdGlvbn0NCg0KVGhlIGV4aXN0YW5jZSBvZiBhIHdvcmQgZXhjZXNzIG1lYW5zIGZvciBleGFtcGxlIHRoYXQgbXVsdGlwbGUgZmllbGQgZWxlbWVudHMgY2FuIGJlIGFkZGVkIHRvZ2V0aGVyIGRpZ2l0IGJ5IGRpZ2l0LCB3aXRob3V0IHByb2Nlc3Npbmcgb2YgY2FycmllcywgYmVmb3JlIG92ZXJmbG93IGNhbiBvY2N1ci4gDQpPbmx5IG9jY2FzaW9uYWxseSB3aWxsIHRoZXJlIGJlIGEgcmVxdWlyZW1lbnQgdG8ge1xpdCBub3JtYWxpc2V9IHRoZXNlIHtcaXQgZXh0ZW5kZWR9IHZhbHVlcywgIHRoYXQgaXMgdG8gZm9yY2UgdGhlbSBiYWNrIGludG8gdGhlIG9yaWdpbmFsIGZvcm1hdC4gTm90ZSB0aGF0IHRoaXMgaXMgaW5kZXBlbmRlbnQgb2YgdGhlIG1vZHVsdXMuDQoNClRoZSBleGlzdGFuY2Ugb2YgYSBmaWVsZCBleGNlc3MgbWVhbnMgdGhhdCwgaW5kZXBlbmRlbnQgb2YgdGhlIHdvcmQgZXhjZXNzLCBtdWx0aXBsZSBmaWVsZCBlbGVtZW50cyBjYW4gYmUgYWRkZWQgdG9nZXRoZXIgYmVmb3JlIGl0IGlzIHJlcXVpcmVkIHRvIHJlZHVjZSB0aGUgc3VtIHdpdGggcmVzcGVjdCB0byB0aGUgbW9kdWx1cy4gSW4gdGhlIA0KbGl0ZXJhdHVyZSB0aGlzIGlzIHJlZmVycmVkIHRvIGFzIGxhenksIG9yIGRlbGF5ZWQsIHJlZHVjdGlvbi4gSW4gZmFjdCB3ZSBhbGxvdyB0aGUgbW9kdWx1cyB0byBiZSBhcyBzbWFsbCBhcyAyNTQgYml0cywgd2hpY2ggb2J2aW91c2x5IGluY3JlYXNlcyB0aGUgZmllbGQgZXhjZXNzLg0KDQpOb3RlIHRoYXQgdGhlc2UgdHdvIG1lY2hhbmlzbXMgYXNzb2NpYXRlZCB3aXRoIHRoZSB3b3JkIGV4Y2VzcyBhbmQgdGhlIGZpZWxkIGV4Y2VzcyAob2Z0ZW4gY29uZnVzZWQgaW4gdGhlIGxpdGVyYXR1cmUpIG9wZXJhdGUgbGFyZ2VseSBpbmRlcGVuZGVudGx5IG9mIGVhY2ggb3RoZXIuDQoNCkFNQ0wgaGFzIG5vIHN1cHBvcnQgZm9yIG5lZ2F0aXZlIG51bWJlcnMuIFRoZXJlZm9yZSBzdWJ0cmFjdGlvbiB3aWxsIGJlIGltcGxlbWVudGVkIGFzIGZpZWxkIG5lZ2F0aW9uIGZvbGxvd2VkIGJ5IGFkZGl0aW9uLiBOZWdhdGlvbiBpcyBwZXJmb3JtZWQgdXNpbmcgdGhlIG1ldGhvZCBkZXNjcmliZWQgYXMgDQpPcHRpb24gMSBpbiBcY2l0ZXthcmFuaGEta2FyYWJpbmEtbG9uZ2EtZ2Vib3R5cy1sb3Blen0uIEJhc2ljYWxseSB0aGUgDQpudW1iZXIgb2YgdGhlIGFjdGl2ZSBiaXRzIGluIHRoZSBmaWVsZCBleGNlc3Mgb2YgdGhlIG51bWJlciB0byBiZSBuZWdhdGVkIGlzIGRldGVybWluZWQsIHRoZSBtb2R1bHVzIGlzIHNoaWZ0ZWQgbGVmdCBieSB0aGlzIGFtb3VudCBwbHVzIG9uZSwgYW5kIHRoZSB2YWx1ZSB0byBiZSBuZWdhdGVkIGlzIHN1YnRyYWN0ZWQgZnJvbSB0aGlzIHZhbHVlLg0KTm90ZSB0aGF0IGJlY2F1c2Ugb2YgdGhlIGBgcGx1cyAxJycsIHRoaXMgd2lsbCBhbHdheXMgcHJvZHVjZSBhIHBvc2l0aXZlIHJlc3VsdCBhdCB0aGUgY29zdCBvZiBlYXRpbmcgYSBiaXQgaW50byB0aGUgZmllbGQgZXhjZXNzLg0KDQpcYmVnaW57ZmlndXJlfVshaHRiXQ0KICBcYmVnaW57Y2VudGVyfQ0KICAgIFxpbmNsdWRlZ3JhcGhpY3Nbd2lkdGg9MTIwbW0gXXt3b3Jkcy5lcHN9DQogIFxlbmR7Y2VudGVyfQ0KICBcY2FwdGlvbntcc21hbGwgMjU2LWJpdCBudW1iZXIgcmVwcmVzZW50YXRpb259DQogIFxsYWJlbHt3b3Jkc30NClxlbmR7ZmlndXJlfQ0KDQpOb3JtYWxpc2F0aW9uIG9mIGV4dGVuZGVkIG51bWJlcnMgcmVxdWlyZXMgdGhlIHdvcmQgZXhjZXNzIG9mIGVhY2ggZGlnaXQgdG8gYmUgc2hpZnRlZCByaWdodCBieSB0aGUgbnVtYmVyIG9mIGJhc2UgYml0cywgYW5kIGFkZGVkIHRvIHRoZSBuZXh0IGRpZ2l0LCB3b3JraW5nIHJpZ2h0IHRvIGxlZnQuIE5vdGUgdGhhdCB3aGVuIG51bWJlcnMgDQphcmUgc3VidHJhY3RlZCBkaWdpdC1ieS1kaWdpdCBpbmRpdmlkdWFsIGRpZ2l0cyBtYXkgYmVjb21lIG5lZ2F0aXZlLiBIb3dldmVyDQpzaW5jZSB3ZSBhcmUgYXZvaWRpbmcgdXNpbmcgdGhlIHNpZ24gYml0LCBkdWUgdG8gdGhlIG1hZ2ljIG9mIDIncyBjb21wbGVtZW50IGFyaXRobWV0aWMsIHRoaXMgYWxsIHdvcmtzIGZpbmUgd2l0aG91dCBhbnkgY29uZGl0aW9uYWwgYnJhbmNoZXMuDQoNClJlZHVjdGlvbiBvZiB1bnJlZHVjZWQgQklHIG51bWJlcnMgaXMgY2FycmllZCBvdXQgdXNpbmcgYSBzaW1wbGUgc2hpZnQtY29tcGFyZS1hbmQtc3VidHJhY3Qgb2YgdGhlIG1vZHVsdXMsIHdpdGggb25lIHN1YnRyYWN0aW9uIG5lZWRlZCBvbiBhdmVyYWdlIGhhbGYgb2YgdGhlIHRpbWUgZm9yIGV2ZXJ5IGFjdGl2ZSBiaXQgaW4gdGhlIGZpZWxkIGV4Y2Vzcy4gDQpIb3BlZnVsbHkgc3VjaCByZWR1Y3Rpb25zIHdpbGwgcmFyZWx5IGJlIHJlcXVpcmVkLCBhcyB0aGV5IGFyZSBzbG93IGFuZCBpbnZvbHZlIHVucHJlZGljdGFibGUgcHJvZ3JhbSBicmFuY2hlcy4NCg0KU2luY2UgdGhlIGxlbmd0aCBvZiBmaWVsZCBlbGVtZW50cyBpcyBmaXhlZCBhdCBjb21waWxlIHRpbWUsIGl0IGlzIGV4cGVjdGVkIHRoYXQgdGhlIGNvbXBpbGVyIHdpbGwgdW5yb2xsIG1vc3Qgb2YgdGhlIHRpbWUtY3JpdGljYWwgbG9vcHMuIEluIGFueSBjYXNlIHRoZSBjb25kaXRpb25hbCBicmFuY2ggcmVxdWlyZWQgYXQgdGhlIGZvb3Qgb2YgYSANCmZpeGVkLXNpemUgbG9vcCBjYW4gYmUgYWNjdXJhdGVseSBwcmVkaWN0ZWQgYnkgbW9kZXJuIGhhcmR3YXJlLg0KDQpUaGUgcHJvYmxlbSBub3cgaXMgdG8gZGVjaWRlIHdoZW4gdG8gbm9ybWFsaXNlIGFuZCB3aGVuIHRvIHJlZHVjZSBudW1iZXJzIHRvIGF2b2lkIHRoZSBwb3NzaWJpbGl0eSBvZiBvdmVyZmxvdy4gVGhlcmUgYXJlIHR3byB3YXlzIG9mIGRvaW5nIHRoaXMuIE9uZSBpcyB0byBtb25pdG9yIHRoZSBleGNlc3NlcyBhdCBydW4tdGltZSBhbmQgYWN0IHdoZW4gdGhlIA0KdGhyZWF0IG9mIG92ZXJmbG93IGFyaXNlcy4gVGhlIHNlY29uZCBpcyB0byBkbyBhIGNhcmVmdWwgYW5hbHlzaXMgb2YgdGhlIGNvZGUgYW5kIGluc2VydCBub3JtYWxpc2F0aW9uIGFuZCByZWR1Y3Rpb24gY29kZSBhdCBwb2ludHMgd2hlcmUgdGhlIHBvc3NpYmlsaXR5IG9mIG92ZXJmbG93IG1heSBhcmlzZSwgYmFzZWQgb24gYSBzdGF0aWMgd29yc3QtY2FzZSANCmFuYWx5c2lzLiANCg0KVGhlIGZpZWxkIGV4Y2VzcyAkRV9uJCBvZiBhIG51bWJlciAkbiQgaXMgZWFzaWx5IGNhcHR1cmVkIGJ5IGEgc2ltcGxlIG1hc2tpbmcgYW5kIHNoaWZ0aW5nIG9mIHRoZSB0b3Agd29yZC4gSWYgdHdvIG5vcm1hbGlzZWQgbnVtYmVycyAkYSQgYW5kICRiJCBhcmUgdG8gYmUgYWRkZWQgdGhlbiB0aGUgZXhjZXNzIG9mIHRoZWlyIHN1bSB3aWxsIGJlIGF0IHdvcnN0IA0KJEVfYSArIEVfYiArMSQuIEFzIGxvbmcgYXMgdGhpcyBpcyBsZXNzIHRoYW4gJDJee0ZFfSQgd2hlcmUgJEZFJCBpcyB0aGUgZmllbGQgZXhjZXNzLCB0aGVuIHdlIGFyZSBmaW5lLiBPdGhlcndpc2UgYm90aCBudW1iZXJzIHNob3VsZCBiZSByZWR1Y2VkIHByaW9yIHRvIHRoZSBhZGRpdGlvbi4gSW4gQU1DTCB0aGVzZSBjaGVja3MgYXJlIA0KcGVyZm9ybWVkIGF0IHJ1bi10aW1lLiBIb3dldmVyLCBhcyB3ZSBzaGFsbCBzZWUsIGluIHByYWN0aXNlIHRoZXNlIHJlZHVjdGlvbnMgYXJlIHZlcnkgcmFyZWx5IHJlcXVpcmVkLiBTbyB0aGUge1x0dCBpZn0gc3RhdGVtZW50IHVzZWQgdG8gY29udHJvbCB0aGVtIGlzIGhpZ2hseSBwcmVkaWN0YWJsZS4gT2JzZXJ2ZSB0aGF0IGV2ZW4NCmluIHRoZSB3b3JzdCBjYXNlLCBmb3IgYSAxNi1iaXQgaW1wbGVtZW50YXRpb24sIHRoZSBleGNlc3MgaXMgYSBnZW5lcm91cyAkRkU9NCQsIGFuZCBzbyBtYW55IGVsZW1lbnRzIGNhbiBiZSBhZGRlZCBvciBzdWJ0cmFjdGVkIGJlZm9yZSByZWR1Y3Rpb24gaXMgcmVxdWlyZWQuDQoNClRoZSB3b3JzdCBjYXNlIHdvcmQgZXhjZXNzIGZvciB0aGUgcmVzdWx0IG9mIGEgY2FsY3VsYXRpb24gaXMgaGFyZGVyIHRvIGNhbGN1bGF0ZSBhdCBydW4gdGltZSwgYXMgaXQgd291bGQgcmVxdWlyZSBpbnNwZWN0aW9uIG9mIGV2ZXJ5IGRpZ2l0IG9mIGV2ZXJ5IHtCSUd9LiBUaGlzIHdvdWxkIHNsb3cgY29tcHV0YXRpb24gZG93biB0byBhbiB1bmFjY2VwdGFibGUgZXh0ZW50LiANClRoZXJlZm9yZSBpbiB0aGlzIGNhc2UNCndlIHVzZSBzdGF0aWMgYW5hbHlzaXMgYW5kIGluc2VydCBub3JtYWxpc2F0aW9uIGNvZGUgd2hlcmUgd2Uga25vdyBpdCBtaWdodCBiZSBuZWVkZWQuIFRoaXMgcHJvY2VzcyB3YXMgc3VwcG9ydGVkIGJ5IHNwZWNpYWwgZGVidWdnaW5nIGNvZGUgdGhhdCB3YXJuZWQgb2YgcGxhY2VzIHdoZXJlIG92ZXJmbG93IHdhcyBwb3NzaWJsZSwgYmFzZWQgb24gYSBzaW1wbGUNCndvcnN0LWNhc2UgYW5hbHlzaXMuDQoNClxzdWJzZWN0aW9ue011bHRpcGxpY2F0aW9uIGFuZCBSZWR1Y3Rpb259DQoNClRvIHN1cHBvcnQgbXVsdGlwbGljYXRpb24gb2Yge0JJR31zLCB3ZSB3aWxsIHJlcXVpcmUgYSBkb3VibGUtbGVuZ3RoIHtEQklHfSB0eXBlLiBBbHNvIHRoZSBwYXJ0aWFsIHByb2R1Y3RzIHRoYXQgYXJpc2UgaW4gdGhlIHByb2Nlc3Mgb2YgbG9uZyBtdWx0aXBsaWNhdGlvbiB3aWxsIHJlcXVpcmUgYSBkb3VibGUtbGVuZ3RoIGRhdGEgdHlwZS4gRm9ydHVuYXRlbHkgbWFueSANCnBvcHVsYXIgQyBjb21waWxlcnMsIGxpa2UgR251IHtHQ0N9LCBhbHdheXMgc3VwcG9ydCBhbiBpbnRlZ2VyIHR5cGUgdGhhdCBpcyBkb3VibGUgdGhlIG5hdGl2ZSB3b3JkLWxlbmd0aC4gRm9yIEphdmEgdGhlIGBgaW50JycgdHlwZSBpcyAzMi1iaXRzIGFuZCB0aGVyZSBpcyBhIGRvdWJsZS1sZW5ndGggYGBsb25nJycgdHlwZSB3aGljaCBpcyA2NC1iaXQuDQpPZiBjb3Vyc2UgZm9yIEphdmFzY3JpcHQgYSBkb3VibGUgbGVuZ3RoIHR5cGUgaXMgbm90IHBvc3NpYmxlLCBhbmQgc28gdGhlIHBhcnRpYWwgcHJvZHVjdHMgbXVzdCBiZSBhY2NvbW9kYXRlZCB3aXRoaW4gdGhlIDUyLWJpdCBtYW50aXNzYS4NCg0KSXQgaXMgZ2VuZXJhbGx5IGFjY2VwdGVkIHRoYXQgdGhlIGZhc3Rlc3Qgd2F5IHRvIGRvIG11bHRpLXByZWNpc2lvbiBtdWx0aXBsaWNhdGlvbiBpcyB0byBhY2N1bXVsYXRlIHRoZSBkb3VibGUtbGVuZ3RoIHBhcnRpYWwgcHJvZHVjdHMgdGhhdCBjb250cmlidXRlIHRvIGVhY2ggY29sdW1uIGluIHRoZSBjbGFzc2ljIHNjaG9vbC1ib3kgbG9uZyBtdWx0aXBsaWNhdGlvbg0KYWxnb3JpdGhtLCBhbHNvIGtub3duIGFzIHRoZSBDb21iYSBtZXRob2QuIFRoZW4gYXQgdGhlIGZvb3Qgb2YgdGhlIGNvbHVtbiB0aGUgdG90YWwgaXMgc3BsaXQgaW50byB0aGUgc3VtIGZvciB0aGF0IGNvbHVtbiwgYW5kIHRoZSBjYXJyeSB0byB0aGUgbmV4dCBjb2x1bW4sIHdvcmtpbmcgcmlnaHQtdG8tbGVmdC4gSWYgdGhlIG51bWJlcnMgYXJlIG5vcm1hbGlzZWQgDQpwcmlvciB0byB0aGUgbXVsdGlwbGljYXRpb24sIHRoZW4gDQp3aXRoIHRoZSB3b3JkIGV4Y2Vzc2VzIHRoYXQgd2UgaGF2ZSBjaG9zZW4sIHRoaXMgd2lsbCBub3QgcmVzdWx0IGluIG92ZXJmbG93LiBUaGUge0RCSUd9IHByb2R1Y3Qgd2lsbCBiZSBhdXRvbWF0aWNhbGx5IG5vcm1hbGlzZWQgYXMgYSByZXN1bHQgb2YgdGhpcyBwcm9jZXNzLiBTcXVhcmluZyBjYW4gYmUgZG9uZSBpbiBhIA0Kc2ltaWxhciBmYXNoaW9uLCBidXQgb25seSByZXF1aXJlcyBqdXN0IG92ZXIgaGFsZiBvZiB0aGUgbnVtYmVyIG9mIHBhcnRpYWwgcHJvZHVjdHMsIGFuZCBzbyBpdCBtYXkgYmUgc29tZXdoYXQgZmFzdGVyLg0KDQpUaGUge0RCSUd9IHZhbHVlIHRoYXQgcmVzdWx0cyBmcm9tIGEgbXVsdGlwbGljYXRpb24gb3Igc3F1YXJpbmcgbWF5IGJlIGltbWVkaWF0ZWx5IHJlZHVjZWQgd2l0aCByZXNwZWN0IHRvIHRoZSBtb2R1bHVzIHRvIGJyaW5nIGl0IGJhY2sgdG8gYSB7QklHfS4gSG93ZXZlciBhZ2FpbiB3ZSBtYXkgY2hvb3NlIHRvIGRlbGF5IHRoaXMgDQpyZWR1Y3Rpb24sIGFuZCB0aGVyZWZvcmUgd2UgbmVlZCB0aGUgYWJpbGl0eSB0byBzYWZlbHkgYWRkIGFuZCBzdWJ0cmFjdCBEQklHIG51bWJlcnMgd2hpbGUgYWdhaW4gYXZvaWRpbmcgb3ZlcmZsb3cuDQoNClRoZSBtZXRob2QgdXNlZCBmb3IgZnVsbCByZWR1Y3Rpb24gb2YgYSBEQklHIGJhY2sgdG8gYSBCSUcgZGVwZW5kcyBvbiB0aGUgZm9ybSBvZiB0aGUgbW9kdWx1cy4gV2UgY2hvb3NlIHRvIHN1cHBvcnQgdGhyZWUgZGlzdGluY3QgdHlwZXMgb2YgbW9kdWx1cywgKGEpIHBzZXVkbyBNZXJzZW5uZSBvZiB0aGUgZm9ybSAkMl5uLWMkIHdoZXJlIA0KJGMkIGlzIHNtYWxsIGFuZCAkbiQgaXMgdGhlIHNpemUgb2YgdGhlIG1vZHVsdXMgaW4gYml0cywgDQooYikgTW9udGdvbWVyeS1mcmllbmRseSBvZiB0aGUgZm9ybSAkay4yXm4tMSQsIGFuZCAoYykgbW9kdWxpIG9mIG5vIHNwZWNpYWwgZm9ybS4gRm9yIGNhc2VzIChiKSBhbmQgKGMpIHdlIGNvbnZlcnQgYWxsIA0KZmllbGQgZWxlbWVudHMgdG8gTW9udGdvbWVyeSdzIHtcaXQgbn0tcmVzaWR1ZSBmb3JtLCBhbmQgdXNlIE1vbnRnb21lcnkncyBmYXN0IG1ldGhvZCBmb3IgbW9kdWxhciByZWR1Y3Rpb24gXGNpdGV7bW9udGdvbWVyeX0uIEluIGFsbCBjYXNlcyB0aGUgREJJRyBudW1iZXIgdG8gYmUgcmVkdWNlZCAkeSQgbXVzdCBiZSBpbiB0aGUgDQpyYW5nZSAkMDx5PHBSJCAoYSByZXF1aXJlbWVudCBvZiBNb250Z29tZXJ5J3MgbWV0aG9kKSwgYW5kIHRoZSByZXN1bHQgJHgkIGlzIGd1YXJhbnRlZWQgdG8gDQpiZSBpbiB0aGUgcmFuZ2UgJDA8eDwycCQsIHdoZXJlICRSPTJeezI1NitGRX0kIGZvciBhIDI1Ni1iaXQgbW9kdWx1cy4gTm90ZSB0aGF0IHRoZSBCSUcgcmVzdWx0IHdpbGwgYmUgKG5lYXJseSkgZnVsbHkgcmVkdWNlZC4gVGhlIGZhY3QgdGhhbiB3ZSBhbGxvdyAkeCQgdG8gYmUgbGFyZ2VyIHRoYW4gJHAkIG1lYW5zIHRoYXQgd2UgY2FuIGF2b2lkDQp0aGUgbm90b3Jpb3VzIE1vbnRnb21lcnkgYGBmaW5hbCBzdWJ0cmFjdGlvbicnIFxjaXRle21vbnRnb21lcnl9Lg0KDQpPYnNlcnZlIGhvdyB1bnJlZHVjZWQgbnVtYmVycyBpbnZvbHZlZCBpbiBjb21wbGV4IGNhbGN1bGF0aW9ucyB0ZW5kIHRvIGJlIChuZWFybHkgZnVsbHkpIHJlZHVjZWQgaWYgdGhleSBhcmUgaW52b2x2ZWQgaW4gYSBtb2R1bGFyIG11bHRpcGxpY2F0aW9uLiBTbyBmb3IgZXhhbXBsZSBpZiBmaWVsZCBlbGVtZW50ICR4JCBoYXMgYSBsYXJnZSBmaWVsZCBleGNlc3MsDQphbmQgaWYgd2UgY2FsY3VsYXRlICR4PXgueSQsIHRoZW4gYXMgbG9uZyBhcyB0aGUgdW5yZWR1Y2VkIHByb2R1Y3QgaXMgbGVzcyB0aGFuICRwUiQsIHRoZSByZXN1bHQgd2lsbCBiZSBhIG5lYXJseSBmdWxseSByZWR1Y2VkICR4JC4gU28gaW4gbWFueSBjYXNlcyB0aGVyZSBpcyBhIG5hdHVyYWwgdGVuZGVuY3kgZm9yIGZpZWxkIGV4Y2Vzc2VzIA0Kbm90IHRvIGdyb3cgd2l0aG91dCBsaW1pdCwgYW5kIG5vdCB0byBvdmVyZmxvdywgd2l0aG91dCByZXF1aXJpbmcgZXhwbGljaXQgYWN0aW9uIG9uIG91ciBwYXJ0Lg0KDQpDb25zaWRlciBub3cgYSBzZXF1ZW5jZSBvZiBjb2RlIHRoYXQgYWRkcywgc3VidHJhY3RzIGFuZCBtdWx0aXBsaWVzIGZpZWxkIGVsZW1lbnRzLCBhcyBtaWdodCBhcmlzZSBpbiBlbGxpcHRpYyBjdXJ2ZSBhZGRpdGlvbnMgYW5kIGRvdWJsaW5ncy4gQXNzdW1lIHRoYXQgdGhlIGNvZGUgaGFzIGJlZW4gYW5hbHlzZWQgYW5kIHRoYXQgbm9ybWFsaXNhdGlvbiANCmNvZGUgaGFzIGJlZW4gaW5zZXJ0ZWQgd2hlcmUgbmVlZGVkLiBBc3N1bWUgdGhhdCB0aGUgcmVkdWN0aW9uIGNvZGUgdGhhdCANCmFjdGl2YXRlcyBpZiB0aGVyZSBpcyBhIHBvc3NpYmlsaXR5IG9mIGFuIGVsZW1lbnQgb3ZlcmZsb3dpbmcgaXRzIGZpZWxkIGV4Y2Vzcywgd2hpbGUgcHJlc2VudCwgbmV2ZXIgaW4gZmFjdCBpcyB0cmlnZ2VyZWQgKGR1ZSB0byB0aGUgYmVoYXZpb3VyIGRlc2NyaWJlZCBhYm92ZSkuIFRoZW4gd2UgYXNzZXJ0IHRoYXQgdGhlcmUgaXMgb25seSBvbmUgDQpwb3NzaWJsZSBwbGFjZSBpbiB3aGljaCBhbiB1bnByZWRpY3RlZCBicmFuY2ggbWF5IG9jY3VyLiBUaGlzIHdpbGwgYmUgaW4gdGhlIG5lZ2F0aW9uIGNvZGUgYXNzb2NpYXRlZCB3aXRoIGEgc3VidHJhY3Rpb24sIHdoZXJlIHRoZSBudW1iZXIgb2YgYml0cyBpbiB0aGUgZmllbGQgZXhjZXNzIG11c3QgYmUgY291bnRlZC4gSG93ZXZlciB3ZSB3b3VsZCANCnBvaW50IG91dCB0aGF0IHNvbWUgYXJjaGl0ZWN0dXJlcyBkbyBub3cgc3VwcG9ydCBtYWNoaW5lIGNvZGUgaW5zdHJ1Y3Rpb25zIHRoYXQgY291bnQgdGhlIG51bWJlciBvZiBhY3RpdmUgYml0cyBpbiBhIGNvbXB1dGVyIHJlZ2lzdGVyIC0tIGFsdGhvdWdoIHVuZm9ydHVuYXRlbHkgdGhpcyBjYXBhYmlsaXR5IGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhlIA0KdHlwaWNhbCBoaWdoLWxldmVsIGxhbmd1YWdlIHN5bnRheC4NCg0KXHNlY3Rpb257RXh0ZW5zaW9uIEZpZWxkIGFyaXRobWV0aWN9DQoNClRvIHN1cHBvcnQgY3J5cHRvZ3JhcGhpYyBwYWlyaW5ncyB3ZSB3aWxsIG5lZWQgc3VwcG9ydCBmb3IgZXh0ZW5zaW9uIGZpZWxkcy4gV2UgdXNlIGEgdG93ZXJpbmcgb2YgZXh0ZW5zaW9ucywgZnJvbSAkXEZfcCQgdG8gJFxGX3twXjJ9JCB0byAkXEZfe3BeNH0kIHRvICRcRl97cF57MTJ9fSQgYXMgcmVxdWlyZWQgZm9yIA0KQk4gY3VydmVzIFxjaXRle2JhcnJldG8tbmFlaHJpZ30uIEFuIGVsZW1lbnQgDQpvZiB0aGUgcXVhZHJhdGljIGV4dGVuc2lvbiBmaWVsZCB3aWxsIGJlIHJlcHJlc2VudGVkIGFzICRmPWEraWIkLCB3aGVyZSAkaSQgaXMgdGhlIHNxdWFyZSByb290IG9mIHRoZSBxdWFkcmF0aWMgbm9uLXJlc2lkdWUgLTEuDQpUbyBhZGQsIHN1YnRyYWN0IGFuZCBtdWx0aXBseSB0aGVtIHdlIHVzZSB0aGUgb2J2aW91cyBtZXRob2RzLiBIb3dldmVyIGZvciBuZWdhdGlvbiB3ZSBjYW4gY29uc3RydWN0ICQtZj0tYS1pYiQgYXMgJGItKGErYikraS4oYS0oYStiKSQgd2hpY2ggcmVxdWlyZXMgb25seSBvbmUgYmFzZSBmaWVsZCBuZWdhdGlvbi4gQSBzaW1pbGFyIGlkZWEgDQpjYW4gYmUgdXNlZCByZWN1cnNpdmVseSBmb3IgaGlnaGVyIG9yZGVyIGV4dGVuc2lvbnMsIHNvIHRoYXQgb25seSBvbmUgYmFzZSBmaWVsZCBuZWdhdGlvbiBpcyBldmVyIHJlcXVpcmVkLg0KDQoNClxzZWN0aW9ue0VsbGlwdGljIEN1cnZlc30NCg0KVGhyZWUgdHlwZXMgb2YgRWxsaXB0aWMgY3VydmUgYXJlIHN1cHBvcnRlZCBmb3IgdGhlIGltcGxlbWVudGF0aW9uIG9mIEVsbGlwdGljIEN1cnZlIENyeXB0b2dyYXBoeSAoRUNDKSwgYnV0IGN1cnZlcyBhcmUgbGltaXRlZCB0byBwb3B1bGFyIGZhbWlsaWVzIHRoYXQgc3VwcG9ydCBmYXN0ZXIgaW1wbGVtZW50YXRpb24uIFdlaWVyc3RyYXNzIA0KY3VydmVzIGFyZSBzdXBwb3J0ZWQgdXNpbmcgdGhlIFNob3J0IFdlaWVyc3RyYXNzIHJlcHJlc2VudGF0aW9uOi0NCg0KJCQgeV4yPXheMytBeCtCICQkDQoNCndoZXJlICRBPTAkIG9yICRBPS0zJC4gRWR3YXJkcyBjdXJ2ZXMgYXJlIHN1cHBvcnRlZCB1c2luZyBib3RoIHJlZ3VsYXIgYW5kIHR3aXN0ZWQgRWR3YXJkcyBmb3JtYXQ6LQ0KDQokJCBBeF4yK3leMj0xK0J4XjJ5XjIgJCQNCg0Kd2hlcmUgJEE9MSQgb3IgJEE9LTEkLiBNb250Z29tZXJ5IGN1cnZlcyBhcmUgcmVwcmVzZW50ZWQgYXM6LQ0KDQokJCB5XjI9eF4zK0F4XjIreCAkJA0KDQp3aGVyZSAkQSQgbXVzdCBiZSBzbWFsbC4NCg0KSW4gdGhlIHBhcnRpY3VsYXIgY2FzZSBvZiBlbGxpcHRpYyBjdXJ2ZSBwb2ludCBtdWx0aXBsaWNhdGlvbiwgdGhlcmUgYXJlIHBvdGVudGlhbGx5IGEgbXlyaWFkIG9mIHZlcnkgZGFuZ2Vyb3VzIHNpZGUtY2hhbm5lbCBhdHRhY2tzIHRoYXQgYXJpc2UgZnJvbSB1c2luZyB0aGUgY2xhc3NpYyBkb3VibGUtYW5kLWFkZCBhbGdvcml0aG0NCmFuZCBpdHMgdmFyaWFudHMuIFZ1bG5lcmFiaWxpdGllcyBhcmlzZSBpZiBicmFuY2hlcyBhcmUgdGFrZW4gdGhhdCBkZXBlbmQgb24gc2VjcmV0IGJpdHMsIG9yIGlmIGRhdGEgaXMgZXZlbiBhY2Nlc3NlZCB1c2luZyBzZWNyZXQgdmFsdWVzIGFzIGluZGljZXMuDQpNYW55IHR5cGVzIG9mIGNvdW50ZXItbWVhc3VyZXMgaGF2ZSBiZWVuIHN1Z2dlc3RlZC4gVGhlIHNpbXBsZXN0IHNvbHV0aW9uIGlzIHRvIHVzZSBhIGNvbnN0YW50LXRpbWUgYWxnb3JpdGhtIGxpa2UgdGhlIE1vbnRnb21lcnkgbGFkZGVyLCB3aGljaCBoYXMgYSB2ZXJ5IHNpbXBsZSBzdHJ1Y3R1cmUsIHVzZXMgdmVyeSBsaXR0bGUgDQptZW1vcnkgYW5kIGhhcyBubyBrZXktYml0LWRlcGVuZGVudCBicmFuY2hlcy4gDQpJZiB1c2luZyBhIE1vbnRnb21lcnkgcmVwcmVzZW50YXRpb24gb2YgdGhlIGVsbGlwdGljIGN1cnZlIHRoZSBNb250Z29tZXJ5IGxhZGRlciBcY2l0ZXttb250Z29tZXJ5Mn0gaXMgaW4gZmFjdCB0aGUgb3B0aW1hbCBhbGdvcml0aG0gZm9yIHBvaW50IG11bHRpcGxpY2F0aW9uLiBGb3Igb3RoZXIgcmVwcmVzZW50YXRpb25zIHdlIHVzZSBhIA0KZml4ZWQtc2l6ZWQgc2lnbmVkIHdpbmRvdyBtZXRob2QsIGFzIGRlc2NyaWJlZCBpbiBcY2l0ZXtib3MtY29zdGVsbG8tbG9uZ2EtbmFlaHJpZ30uIA0KDQpBTUNMIGhhcyBidWlsdC1pbiBzdXBwb3J0IGZvciBtb3N0IHN0YW5kYXJkaXNlZCBlbGxpcHRpYyBjdXJ2ZXMsIGFsb25nIHdpdGggbWFueSBjdXJ2ZXMgdGhhdCBoYXZlIGJlZW4gcHJvcG9zZWQgZm9yIHN0YW5kYXJkaXNhdGlvbiBhdCBvdXIgY2hvc2VuIGxldmVsIG9mIHNlY3VyaXR5LiANClNwZWNpZmljYWxseSBpdCBzdXBwb3J0cyB0aGUgTklTVCBjdXJ2ZSBcY2l0ZXtjZXJ0aWNvbX0sIFxjaXRle25pc3R9LCB0aGUgd2VsbCBrbm93biBDdXJ2ZTI1NTE5IFxjaXRle2Jlcm5zdGVpbn0sIHRoZSAyNTYtYml0IEJyYWlucG9vbCBjdXJ2ZSBcY2l0ZXticmFpbnBvb2x9LCB0aGUgQU5TU0kgY3VydmUgXGNpdGV7QU5TU0l9LCBhbmQgZm91cg0KTlVNUyAoTm90aGluZy1VcC1NeS1TbGVldmUpIGN1cnZlcyBwcm9wb3NlZCBieSBCb3MgZXQgYWwuIFxjaXRle2Jvcy1jb3N0ZWxsby1sb25nYS1uYWVocmlnfS4gU29tZSBvZiB0aGVzZSBwcm9wb3NhbHMgc3VwcG9ydCBvbmx5IGEgV2VpZXJzdHJhc3MgcmVwcmVzZW50YXRpb24sIGJ1dCBtYW55IGFsc28gYWxsb3cgYW4gRWR3YXJkcyBhbmQgTW9udGdvbWVyeSANCmZvcm0uIFRvb2xzIGFyZSBwcm92aWRlZCB0byBhbGxvdyBlYXN5IGludGVncmF0aW9uIG9mIG1vcmUgY3VydmVzLg0KDQoNClxzZWN0aW9ue1N1cHBvcnQgZm9yIGNsYXNzaWMgRmluaXRlIEZpZWxkIE1ldGhvZHN9DQoNCkJlZm9yZSBFbGxpcHRpYyBDdXJ2ZXMsIGNyeXB0b2dyYXBoeSBkZXBlbmRlZCBvbiBtZXRob2RzIGJhc2VkIG9uIHNpbXBsZSBmaW5pdGUgZmllbGRzLiBUaGUgbW9zdCBmYW1vdXMgb2YgdGhlc2Ugd291bGQgYmUgdGhlIHdlbGwga25vd24gUlNBIG1ldGhvZC4gVGhlc2UgbWV0aG9kcyBoYXZlIHRoZSBhZHZhbnRhZ2Ugb2YNCmJlaW5nIGVmZmVjdGl2ZWx5IHBhcmFtZXRlcmxlc3MsIGFuZCB0aGVyZWZvcmUgdGhlIGlzc3VlIG9mIHRydXN0IGluIHBhcmFtZXRlcnMgdGhhdCBhcmlzZXMgZm9yIGVsbGlwdGljIGN1cnZlcywgaXMgbm90IGFuIGlzc3VlLiBIb3dldmVyIHRoZXNlIG1ldGhvZHMgYXJlIHN1YmplY3QgdG8gaW5kZXggY2FsY3VsdXMgYmFzZWQNCm1ldGhvZHMgb2YgY3J5cHRhbmFseXNpcywgYW5kIHNvIGZpZWxkcyBhbmQga2V5cyBhcmUgdHlwaWNhbGx5IG11Y2ggbGFyZ2VyLiBTbyBob3cgdG8gc3VwcG9ydCBmb3IgZXhhbXBsZSBhIDIwNDgtYml0IGltcGxlbWVudGF0aW9uIG9mIFJTQSBiYXNlZCBvbiBhIGxpYnJhcnkgZGVzaWduZWQgZm9yIG9wdGltaXplZCAyNTYtYml0IG9wZXJhdGlvbnM/IFRoZSBpZGVhIGlzIHNpbXBsZSAtLQ0KdXNlIEFNQ0wgYXMgYSB2aXJ0dWFsIDI1Ni1iaXQgbWFjaGluZSwgYW5kIGJ1aWxkIDIwNDgtYml0IGFyaXRobWV0aWMgb24gdG9wIG9mIHRoYXQuIEFuZCB0byBjbGF3IGJhY2sgc29tZSBkZWNlbnQgcGVyZm9ybWFuY2UgdXNlIHRoZSBLYXJhdHN1YmEgbWV0aG9kIFxjaXRle2tudXRofSBzbyB0aGF0IGZvciBleGFtcGxlIDIwNDgtYml0IG11bHRpcGxpY2F0aW9uDQpyZWN1cnNlcyBlZmZpY2llbnRseSByaWdodCBkb3duIHRvIDI1Ni1iaXQgb3BlcmF0aW9ucy4gT2YgY291cnNlIHRoZSBkb3duc2lkZSBvZiB0aGUgS2FyYXRzdWJhIG1ldGhvZCBpcyB0aGF0IHdoaWxlIGl0IHNhdmVzIG9uIG11bHRpcGxpY2F0aW9ucywgdGhlIG51bWJlciBvZiBhZGRpdGlvbnMgYW5kIHN1YnRyYWN0aW9ucyBpcyBncmVhdGx5IGluY3JlYXNlZC4NCkhvd2V2ZXIgdGhlIGV4aXN0YW5jZSBvZiBnZW5lcm91cyB3b3JkIGV4Y2Vzc2VzIGluIG91ciByZXByZXNlbnRhdGlvbiBtYWtlcyB0aGlzIGxlc3Mgb2YgYSBwcm9ibGVtLCBhcyBtb3N0IGFkZGl0aW9ucyBjYW4gYmUgY2FycmllZCBvdXQgd2l0aG91dCBub3JtYWxpc2F0aW9uLiANCg0KU2VjcmV0IGtleSBvcGVyYXRpb25zIGxpa2UgUlNBIGRlY3J5cHRpb24gdXNlIHRoZSBNb250Z29tZXJ5IGxhZGRlciB0byBhY2hpZXZlIHNpZGUtY2hhbm5lbC1hdHRhY2sgcmVzaXN0YW5jZS4NCg0KVGhlIGltcGxlbWVudGF0aW9uIGNhbiBjdXJyZW50bHkgc3VwcG9ydCAkMTAyNC4yXm4kIGJpdCBmaWVsZHMsIHNvIGZvciBleGFtcGxlIDIwNDgtYml0IFJTQSBjYW4gYmUgdXNlZCB0byBnZXQgcmVhc29uYWJseSBjbG9zZSB0byB0aGUgQUVTLTEyOC1iaXQgbGV2ZWwgb2Ygc2VjdXJpdHksIGFuZCBpZiBkZXNpcmVkIDQwOTYgYml0IFJTQSBjYW4gYmUgdXNlZCB0bw0KY29tZm9ydGFibHkgZXhjZWVkIGl0LiANCg0KTm90ZSB0aGF0IHRoaXMgY29kZSBpcyBzdXBwb3J0ZWQgaW5kZXBlbmRlbnRseSBvZiB0aGUgZWxsaXB0aWMgY3VydmUgY29kZS4gU28gZm9yIGV4YW1wbGUgUlNBIGFuZCBFQ0MgY2FuIGJlIHJ1biB0b2dldGhlciB3aXRoaW4gYSBzaW5nbGUgYXBwbGljYXRpb24uIA0KDQpIb3dldmVyIHdlIHJlZ2FyZCB0aGVzZSBtZXRob2RzIGFzIGBgbGVnYWN5JycgYXMgaW4gb3VyIHZpZXcgRUNDIGJhc2VkIG1ldGhvZHMgYXJlIGEgbXVjaCBiZXR0ZXIgZml0IGZvciB0aGUgSW9ULiANCg0KXHNlY3Rpb257TXVsdGktTGluZ3VhbCBzdXBwb3J0fQ0KDQpJdCBpcyBhIGJpZyBhc2sgdG8gZGV2ZWxvcCBhbmQgbWFpbnRhaW4gbXVsdGlwbGUgdmVyc2lvbnMgb2YgYSBjcnlwdG8gbGlicmFyeSB3cml0dGVuIGluIHJhZGljYWxseSBkaWZmZXJlbnQgbGFuZ3VhZ2VzIHN1Y2ggYXMgQywgSmF2YSwgSmF2YXNjcmlwdCwgR28gYW5kIFN3aWZ0LiBUaGlzIGhhcyBkaXNjb3VyYWdlZCB0aGUgdXNlIG9mDQpsYW5ndWFnZSBzcGVjaWZpYyBtZXRob2RzICh3aGljaCBhcmUgaW4gYW55IGNhc2Ugb2YgbGl0dGxlIHJlbGV2YW5jZSBoZXJlKSwgYW5kIHN0cm9uZ2x5IGVuY291cmFnZWQgdGhlIHVzZSBvZiBzaW1wbGUsIGdlbmVyaWMgY29tcHV0ZXIgbGFuZ3VhZ2UgY29uc3RydWN0cy4gDQoNClRoaXMgYXBwcm9hY2ggYnJpbmdzIGEgc3VycHJpc2luZyBib251czogQU1DTCBjYW4gYmUgYXV0b21hdGljYWxseSBjb252ZXJ0ZWQgdG8gbWFueSBvdGhlciBsYW5ndWFnZXMgdXNpbmcgYXZhaWxhYmxlIHRyYW5zbGF0b3IgdG9vbHMuIEZvciBleGFtcGxlIFRhbmdpYmxlIFNvZnR3YXJlIFNvbHV0aW9ucyBcY2l0ZXt0c3N9DQptYXJrZXQgYSBKYXZhIHRvIENcIyBjb252ZXJ0ZXIuIFRoaXMgZ2VuZXJhdGVkIGFuIGVmZmljaWVudCBmdWxseSBmdW5jdGlvbmFsIENcIyB2ZXJzaW9uIG9mIEFNQ0wgd2l0aGluIG1pbnV0ZXMuIFRoZSBzYW1lIGNvbXBhbnkgbWFya2V0IGEgSmF2YSB0byBWaXN1YWwgQmFzaWMgY29udmVydGVyLiANCkdvb2dsZSBoYXZlIGEgSmF2YSB0byBPYmplY3RpdmUgQw0KY29udmVydGVyIFxjaXRle2dvbH0gc3BlY2lmaWNhbGx5IGRlc2lnbmVkIHRvIGNvbnZlcnQgQW5kcm9pZCBhcHBzIGRldmVsb3BlZCBpbiBKYXZhLCB0byBpT1MgYXBwcyB3cml0dGVuIGluIE9iamVjdGl2ZSBDLg0KDQpPZiBjb3Vyc2Ugbm90IGFsbCBsYW5ndWFnZXMgY2FuIGJlIHN1cHBvcnRlZCBpbiB0aGlzIHdheSwgc28gc3VwcG9ydCBmb3Igc29tZSB3aWxsIGJlIGRldmVsb3BlZCBtYW51YWxseS4gSW4gcGFydGljdWxhciBhIFJ1c3QgdmVyc2lvbiBpcyBjdXJyZW50bHkgdW5kZXIgZGV2ZWxvcG1lbnQuDQoNCg0KXHNlY3Rpb257RGlzY3Vzc2lvbn0NCg0KV2UgZm91bmQgaW4gb3VyIGNvZGUgdGhhdCwgd2l0aCBmZXcgZXhjZXB0aW9ucywgcmVkdWN0aW9ucyBkdWUgdG8gcG9zc2libGUgb3ZlcmZsb3cgb2YgdGhlIGZpZWxkIGV4Y2VzcyBvZiBhIEJJRyB3ZXJlIHZlcnkgcmFyZSwgZXNwZWNpYWxseSBmb3IgdGhlIDY0LWJpdCB2ZXJzaW9uIG9mIHRoZSBsaWJyYXJ5LiBTaW1pbGFybHkgDQpub3JtYWxpc2F0aW9uIHdhcyANCnJhcmVseSBuZWVkZWQgZm9yIHRoZSA2NC1iaXQgY29kZS4gVGhpcyBpcyBkdWUgdG8gdGhlIG11Y2ggZ3JlYXRlciBleGNlc3NlcyB0aGF0IGFwcGx5IGluIHRoZSA2NC1iaXQgcmVwcmVzZW50YXRpb24uIEluIHNvbWUgZXhwZXJpbWVudHMgd2UgY2FsY3VsYXRlZCB0aG91c2FuZHMgb2YgcmFuZG9tIHBhaXJpbmdzLCANCmFuZCByZWR1Y3Rpb24gZHVlIHRvIGZpZWxkIGV4Y2VzcyBvdmVyZmxvdyBkZXRlY3Rpb24gbmV2ZXIgaGFwcGVuZWQuDQoNCkluIGdlbmVyYWwgaW4gZGV2ZWxvcGluZyBBTUNMIHdlIHRyaWVkIHRvIHVzZSBvcHRpbWFsIG1ldGhvZHMsIHdpdGhvdXQgZ29pbmcgdG8gd2hhdCB3ZSAodmVyeSBzdWJqZWN0aXZlbHkpIHJlZ2FyZGVkIGFzIGV4dHJlbWVzIGluIG9yZGVyIHRvIG1heGltaXNlIHBlcmZvcm1hbmNlLiANCkFsZ29yaXRobXMgdGhhdCByZXF1aXJlIGxlc3MgbWVtb3J5IHdlcmUgZ2VuZXJhbGx5IHByZWZlcnJlZCBpZiB0aGUgaW1wYWN0IG9uIHBlcmZvcm1hbmNlIHdhcyBub3QgbGFyZ2UuIFNvbWUgb3B0aW1pemF0aW9ucywgd2hpbGUgcGVyZmVjdGx5IHZhbGlkLCBhcmUgaGFyZCB0byANCmltcGxlbWVudCB3aXRob3V0IGhhdmluZyBhIHNpZ25pZmljYW50IGltcGFjdCBvbiBwcm9ncmFtIHJlYWRhYmlsaXR5IGFuZCBtYWludGFpbmFiaWxpdHkuIERlY2lkaW5nIHdoaWNoIG9wdGltaXphdGlvbnMgdG8gdXNlIGFuZCB3aGljaCB0byByZWplY3QgKG9uIHRoZSBncm91bmRzIG9mIGNvZGUgc2l6ZSBhbmQgbmVnYXRpdmUgaW1wYWN0IG9uIGNvZGUgDQpyZWFkYWJpbGl0eSBhbmQgbWFpbnRhaW5hYmlsaXR5KSBpcyBhZG1pdHRlZGx5IHJhdGhlciBhcmJpdHJhcnkhDQoNCk9uZSBub3RhYmxlIG9taXNzaW9uIGZyb20gQU1DTCBpcyB0aGUgdXNlIG9mIHByZWNvbXB1dGF0aW9uIG9uIGZpeGVkIHBhcmFtZXRlcnMgaW4gb3JkZXIgdG8gc3BlZWQgdXAgY2VydGFpbiBjYWxjdWxhdGlvbnMuIFdlIHRyeSB0byBqdXN0aWZ5IHRoaXMsIHJhdGhlciB1bmNvbnZpbmNpbmdseSwgYnkgcG9pbnRpbmcgb3V0IA0KdGhhdCBwcmVjb21wdXRhdGlvbiBtdXN0IG9mIG5lY2Vzc2l0eSBpbmNyZWFzZSBjb2RlIHNpemUuIEZ1cnRoZXJtb3JlIHN1Y2ggbWV0aG9kcyBhcmUgbW9yZSBzZW5zaXRpdmUgdG8gc2lkZS1jaGFubmVsIGF0dGFja3MgYW5kIG11Y2ggb2YgdGhlaXIgc3BlZWQgYWR2YW50YWdlIHdpbGwgYmUgbG9zdCBpZiB0aGV5IGFyZSB0byBiZSANCmZ1bGx5IHNpZGUtY2hhbm5lbCBwcm90ZWN0ZWQuIEFsc28gcHJlY29tcHV0YXRpb24gb24gc2VjcmV0IHZhbHVlcyBjbGVhcmx5IGluY3JlYXNlcyB0aGUgYW1vdW50IG9mIHNlY3JldCBkYXRhIHRoYXQgbmVlZHMgdG8gYmUgcHJvdGVjdGVkLg0KSG93ZXZlciBvdXIgdmlldyBtaWdodCBjaGFuZ2UgaW4gbGF0ZXIgdmVyc2lvbnMgZGVwZW5kaW5nIG9uIG91ciBpbi10aGUtZmllbGQgZXhwZXJpZW5jZXMgb2YgdXNpbmcgQU1DTC4NCg0KJVxuZXdwYWdlDQpcYmlibGlvZ3JhcGh5c3R5bGV7cGxhaW59DQpcYmlibGlvZ3JhcGh5e2FtY2x9DQoNCiVcbmV3cGFnZQ0KXGFwcGVuZGl4DQoNClxzZWN0aW9uKntCZW5jaG1hcmtzfQ0KDQpTaW5jZSBBTUNMIGlzIGludGVuZGVkIGZvciB0aGUgSW50ZXJuZXQgb2YgVGhpbmdzLCB3ZSB0aGluayBpdCBhcHByb3ByaWF0ZSB0byBnaXZlIHNvbWUgdGltaW5ncyBiYXNlZCBvbiBhbiBpbXBsZW1lbnRhdGlvbiBvbiB0aGUgUmFzcGJlcnJ5IFBpICh2ZXJzaW9uIDIpIGNvbXB1dGVyLCB3aGljaCBpcw0KYmFzZWQgb24gYSAzMi1iaXQgQVJNNyBjaGlwLiBXZSBkbyBub3Qgb3ZlcmNsb2NrIHRoZSA5MDBNSHogcHJvY2Vzc29yLiANCg0KV2UgZGV2ZWxvcGVkIHRocmVlIEFQSSBwcm9ncmFtcywgb25lIHdoaWNoIHRlc3RzIHN0YW5kYXJkIG1ldGhvZHMgb2YgZWxsaXB0aWMgY3VydmUga2V5IGV4Y2hhbmdlLCBwdWJsaWMga2V5IGNyeXB0b2dyYXBoeSBhbmQgZGlnaXRhbCBzaWduYXR1cmUuIEFub3RoZXIgaW1wbGVtZW50cyBhbGwgY29tcG9uZW50cyBvZiBvdXIgTS1QaW4gcHJvdG9jb2wsDQphIHBhaXJpbmctYmFzZWQgcHJvdG9jb2wgb2YgbWVkaXVtIGNvbXBsZXhpdHkgXGNpdGV7bXBpbn0uICBUaGUgZm9ybWVyIHVzZXMgdGhlIGVkMjU1MTkgRWR3YXJkcyBjdXJ2ZSBcY2l0ZXtiZXJuc3RlaW4tZHVpZi1sYW5nZS1zY2h3YWJlLXlhbmd9IHdpdGggaXRzIHBzZXVkby1tZXJzZW5uZSBtb2R1bHVzLCBhbmQgdGhlIGxhdHRlciBhIEJOIGN1cnZlLg0KRmluYWxseSB3ZSBpbXBsZW1lbnQgYWxsIHRoZSBzdGVwcyBvZiB0aGUgUlNBIHB1YmxpYyBrZXkgZW5jcnlwdGlvbiBwcm90b2NvbCB1c2luZyAyMDQ4LWJpdCBrZXlzLCB0aGF0IGlzIGtleSBnZW5lcmF0aW9uLCBlbmNyeXB0aW9uIGFuZCBkZWNyeXB0aW9uLg0KDQpUaGVzZSBtaWdodCBiZSByZWdhcmRlZCBhcyByZXByZXNlbnRhdGl2ZSBvZiB3aGF0IG1pZ2h0IGJlIGV4cGVjdGVkIGZvciBhbiBpbXBsZW1lbnRhdGlvbiBvZiBhIHR5cGljYWwgZWxsaXB0aWMgY3VydmUgKEVDQykgcHJvdG9jb2wsIGEgdHlwaWNhbCBwYWlyaW5nLWJhc2VkIChQQkMpIHByb3RvY29sLCBhbmQgYSB0eXBpY2FsIGNsYXNzaWMgDQpwdWJsaWMga2V5IHByb3RvY29sIGJhc2VkIG9uIFJTQS4NClRoZSByZXN1bHRzIGluIHRoZSBmaXJzdCB0YWJsZSBpbmRpY2F0ZSB0aGUgY29kZSBhbmQgc3RhY2sgcmVxdWlyZW1lbnRzIHdoZW4gdGhlc2UgcHJvZ3JhbXMgd2VyZSBjb21waWxlZCB1c2luZyB2ZXJzaW9uIDQuOCBvZiB0aGUgR0NDIGNvbXBpbGVyLCB1c2luZyB0aGUgc3RhbmRhcmQgIC1PMyAob3B0aW1pemUgZm9yIGJlc3QgcGVyZm9ybWFuY2UpIGFuZCAtT3MNCihvcHRpbWl6ZSBmb3IgbWluaW11bSBzaXplKSBmbGFncywgYW5kIGEgZmxhZyB0byBpbmRpY2F0ZSB0aGUgc3BlY2lmaWMgQVJNIGFyY2hpdGVjdHVyZSAoQ29ydGV4LUE3KS4NCg0KDQpcYmVnaW57dGFibGV9DQpcY2VudGVyaW5nDQpcYmVnaW57dGFidWxhcn17fGx8Y3xjfH0NClxobGluZQ0KJn5+Q29kZSBTaXplfn4mfk1heGltdW0gU3RhY2sgVXNhZ2V+XFwNClxobGluZQ0KfkVDQyAgLU8zICYgNjgwODUgJiA0MTQwICBcXCAgJQ0KfkVDQyAgLU9zICYgMzExMTUgJiAzNzUyIFxcICAgJQ0KflBCQyAgLU8zICYgODQwMzEgJiA4MTQwIFxcICAgJQ0KflBCQyAgLU9zICYgNDYwNDQgJiA3OTA0IFxcICAgJQ0KflJTQSAgLU8zICYgNjE0NjEgJiA1MzMyIFxcICAgJQ0KflJTQSAgLU9zICYgMjM0NDkgJiA1MjI4IFxcICAgJQ0KXGhsaW5lDQpcZW5ke3RhYnVsYXJ9DQp+XFwNClxjYXB0aW9ue1R5cGljYWwgTWVtb3J5IEZvb3RwcmludH0NClxsYWJlbHtmb290cHJpbnR9DQpcZW5ke3RhYmxlfQ0KDQoNCk5leHQgd2UgZ2l2ZSBzb21lIHRpbWluZ3MgZm9yIGEgc2luZ2xlIFNQQS1wcm90ZWN0ZWQgRUNDIHBvaW50IG11bHRpcGxpY2F0aW9uIG9uIGFuIEVkd2FyZHMgY3VydmUsIGZvciB0aGUgY2FsY3VsYXRpb24gb2YgYSBzaW5nbGUgUEJDIHBhaXJpbmcgb24gdGhlIEJOIGN1cnZlLCBhbmQgZm9yIGEgU1BBLXByb3RlY3RlZCAyMDQ4LWJpdCBSU0EgZGVjcnlwdGlvbi4NCg0KXGJlZ2lue3RhYmxlfQ0KXGNlbnRlcmluZw0KXGJlZ2lue3RhYnVsYXJ9e3xsfGN8fQ0KXGhsaW5lDQomflRpbWUgaW4gbWlsbGlzZWNvbmRzflxcDQpcaGxpbmUNCn5FQ0MgcG9pbnQgbXVsdGlwbGljYXRpb24gLU8zICYgMy45ICBcXCAlIA0KfkVDQyBwb2ludCBtdWx0aXBsaWNhdGlvbiAtT3MgJiA1LjkgXFwgJSANCn5QQkMgcGFpcmluZyAtTzMgJiA0Ny40IFxcICUgDQp+UEJDIHBhaXJpbmcgLU9zICYgNzcuMyBcXCAlIA0KflJTQSBkZWNyeXB0aW9uIC1PMyAmIDE1NSBcXCAgJSAgDQp+UlNBIGRlY3J5cHRpb24gLU9zICYgMjMzIFxcICAlIA0KXGhsaW5lDQpcZW5ke3RhYnVsYXJ9DQp+XFwNClxjYXB0aW9ue0MgQmVuY2htYXJrc30NClxsYWJlbHtjc3BlZWR9DQpcZW5ke3RhYmxlfQ0KDQpPYnNlcnZlIHRoYXQgd2UgZG8gbm90IGNvbXBhcmUgdGhlc2UgdGltaW5ncyB3aXRoIGFueSBvdGhlciAtLSBiZWNhdXNlIHRoYXQgaXMgbm90IHRoZSBwb2ludC4NClRoZSBwb2ludCBpcyAtLSBhcmUgdGhleSBgYGdvb2QgZW5vdWdoJycgZm9yIHdoYXRldmVyIGFwcGxpY2F0aW9uIHlvdSBoYXZlIGluIG1pbmQ/IEFuZCB3ZSBzdXNwZWN0IHRoYXQsIGluIHRoZSBncmVhdCBtYWpvcml0eSBvZiBjYXNlcywgdGhleSBhcmUuDQoNCkNsZWFybHkgZm9yIEphdmEgYW5kIEphdmFzY3JpcHQgd2UgYXJlIGNvbXBsZXRlbHkgYXQgdGhlIG1lcmN5IG9mIHRoZSBlZmZpY2llbmN5IChvciBvdGhlcndpc2UpIG9mIHRoZSB2aXJ0dWFsIG1hY2hpbmUuIEFzIGNhbiBiZSBzZWVuIGZyb20gdGhlc2UgSmF2YXNjcmlwdCB0aW1pbmdzLCB0aGVzZQ0KY2FuIHZhcnkgc2lnbmlmaWNhbnRseS4NCg0KDQpcYmVnaW57dGFibGV9DQpcY2VudGVyaW5nDQpcYmVnaW57dGFidWxhcn17fGx8bHxsfGN8fQ0KXGhsaW5lDQogJiB+RGV2aWNlfiAmIH5Ccm93c2VyfiAmflRpbWUgaW4gc2Vjb25kc35cXA0KXGhsaW5lDQp+RUNDIHBvaW50IG11bHRpcGxpY2F0aW9ufiAgJiB+UmFzcGJlcnJ5IFBpfiAmIH5FcGlwaGFueX4gJiAwLjY1ICBcXA0KICAmIH5BcHBsZSBpUGFkIDJ+ICYgflNhZmFyaX4gJiAwLjA5NiAgXFwNCiAgJiB+U2Ftc3VuZyBHYWxheHkgTm90ZSA0fiAmIH5DaHJvbWV+ICYgMC4wMTggIFxcDQp+UEJDIHBhaXJpbmd+ICAmICB+UmFzcGJlcnJ5IFBpfiAmIH5FcGlwaGFueX4gJiAxMS4wXFwNCiAmICB+QXBwbGUgaVBhZCAyfiAmIH5TYWZhcml+ICYgMS42XFwNCiAmICB+U2Ftc3VuZyBHYWxheHkgTm90ZSA0fiAmIH5DaHJvbWV+ICYgMC4zMFxcDQpcaGxpbmUNClxlbmR7dGFidWxhcn0NCn5cXA0KXGNhcHRpb257SmF2YVNjcmlwdCBCZW5jaG1hcmtzfQ0KXGxhYmVse2pzc3BlZWR9DQpcZW5ke3RhYmxlfQ0KDQoNClxlbmR7ZG9jdW1lbnR9DQo=