XGRvY3VtZW50Y2xhc3N7aG93dG99CgpcdGl0bGV7UHl0aG9uIE9wZW5TU0wgTWFudWFsfQoKXHJlbGVhc2V7MC45fQoKXGF1dGhvcntNYXJ0aW4gU2r2Z3Jlbn0KXGF1dGhvcmFkZHJlc3N7XGVtYWlse21hcnRpbkBzdHJha3QuY29tfX0KClx1c2VwYWNrYWdlW2VuZ2xpc2hde2JhYmVsfQpcdXNlcGFja2FnZVtUMV17Zm9udGVuY30KClxiZWdpbntkb2N1bWVudH0KClxtYWtldGl0bGUKClxiZWdpbnthYnN0cmFjdH0KXG5vaW5kZW50ClRoaXMgbW9kdWxlIGlzIGEgcmF0aGVyIHRoaW4gd3JhcHBlciBhcm91bmQgKGEgc3Vic2V0IG9mKSB0aGUgT3BlblNTTCBsaWJyYXJ5LgpXaXRoIHRoaW4gd3JhcHBlciBJIG1lYW4gdGhhdCBhIGxvdCBvZiB0aGUgb2JqZWN0IG1ldGhvZHMgZG8gbm90aGluZyBtb3JlIHRoYW4KY2FsbGluZyBhIGNvcnJlc3BvbmRpbmcgZnVuY3Rpb24gaW4gdGhlIE9wZW5TU0wgbGlicmFyeS4KXGVuZHthYnN0cmFjdH0KClx0YWJsZW9mY29udGVudHMKCgpcc2VjdGlvbntJbnRyb2R1Y3Rpb24gXGxhYmVse2ludHJvfX0KClRoZSByZWFzb24gcHlPcGVuU1NMIHdhcyBjcmVhdGVkIGlzIHRoYXQgdGhlIFNTTCBzdXBwb3J0IGluIHRoZSBzb2NrZXQgbW9kdWxlCmluIFB5dGhvbiAyLjEgKHRoZSBjb250ZW1wb3JhcnkgdmVyc2lvbiBvZiBQeXRob24gd2hlbiB0aGUgcHlPcGVuU1NMIHByb2plY3QKd2FzIGJlZ3VuKSB3YXMgc2V2ZXJlbHkgbGltaXRlZC4gIE90aGVyIE9wZW5TU0wgd3JhcHBlcnMgZm9yIFB5dGhvbiBhdCB0aGUgdGltZQp3ZXJlIGFsc28gbGltaXRlZCwgdGhvdWdoIGluIGRpZmZlcmVudCB3YXlzLiAgVW5mb3J0dW5hdGVseSwgUHl0aG9uJ3Mgc3RhbmRhcmQKbGlicmFyeSBTU0wgc3VwcG9ydCBoYXMgcmVtYWluZWQgd2VhaywgYWx0aG91Z2ggb3RoZXIgcGFja2FnZXMgKHN1Y2ggYXMKTTJDcnlwdG9cZm9vdG5vdGV7U2VlIFx1cmx7aHR0cDovL2NoYW5kbGVycHJvamVjdC5vcmcvUHJvamVjdHMvTWVUb29DcnlwdG99fSkKaGF2ZSBtYWRlIGdyZWF0IGFkdmFuY2VzIGFuZCBub3cgZXF1YWwgb3IgZXhjZWVkIHB5T3BlblNTTCdzIGZ1bmN0aW9uYWxpdHkuCgpUaGUgcmVhc29uIHB5T3BlblNTTCBjb250aW51ZXMgdG8gYmUgbWFpbnRhaW5lZCBpcyB0aGF0IHRoZXJlIGlzIGEgc2lnbmlmaWNhbnQKdXNlciBjb21tdW5pdHkgYXJvdW5kIGl0LCBhcyB3ZWxsIGFzIGEgbGFyZ2UgYW1vdW50IG9mIHNvZnR3YXJlIHdoaWNoIGRlcGVuZHMKb24gaXQuICBJdCBpcyBhIGdyZWF0IGJlbmVmaXQgdG8gbWFueSBwZW9wbGUgZm9yIHB5T3BlblNTTCB0byBjb250aW51ZSB0byBleGlzdAphbmQgYWR2YW5jZS4KClxzZWN0aW9ue0J1aWxkaW5nIGFuZCBJbnN0YWxsaW5nIFxsYWJlbHtidWlsZGluZ319CgpUaGVzZSBpbnN0cnVjdGlvbnMgY2FuIGFsc28gYmUgZm91bmQgaW4gdGhlIGZpbGUgXHZlcmJ8SU5TVEFMTHwuCgpJIGhhdmUgdGVzdGVkIHRoaXMgb24gRGViaWFuIExpbnV4IHN5c3RlbXMgKHdvb2R5IGFuZCBzaWQpLCBTb2xhcmlzIDIuNiBhbmQKMi43LiBPdGhlcnMgaGF2ZSBzdWNjZXNzZnVsbHkgY29tcGlsZWQgaXQgb24gV2luZG93cyBhbmQgTlQuCgpcc3Vic2VjdGlvbntCdWlsZGluZyB0aGUgTW9kdWxlIG9uIGEgVW5peCBTeXN0ZW0gXGxhYmVse2J1aWxkaW5nLXVuaXh9fQoKcHlPcGVuU1NMIHVzZXMgZGlzdHV0aWxzLCBzbyB0aGVyZSByZWFsbHkgc2hvdWxkbid0IGJlIGFueSBwcm9ibGVtcy4gVG8gYnVpbGQKdGhlIGxpYnJhcnk6ClxiZWdpbnt2ZXJiYXRpbX0KcHl0aG9uIHNldHVwLnB5IGJ1aWxkClxlbmR7dmVyYmF0aW19CgpJZiB5b3VyIE9wZW5TU0wgaGVhZGVyIGZpbGVzIGFyZW4ndCBpbiBcdmVyYnwvdXNyL2luY2x1ZGV8LCB5b3UgbWF5IG5lZWQgdG8Kc3VwcGx5IHRoZSBcdmVyYnwtSXwgZmxhZyB0byBsZXQgdGhlIHNldHVwIHNjcmlwdCBrbm93IHdoZXJlIHRvIGxvb2suIFRoZSBzYW1lCmdvZXMgZm9yIHRoZSBsaWJyYXJpZXMgb2YgY291cnNlLCB1c2UgdGhlIFx2ZXJifC1MfCBmbGFnLiBOb3RlIHRoYXQKXHZlcmJ8YnVpbGR8IHdvbid0IGFjY2VwdCB0aGVzZSBmbGFncywgc28geW91IGhhdmUgdG8gcnVuIGZpcnN0Clx2ZXJifGJ1aWxkX2V4dHwgYW5kIHRoZW4gXHZlcmJ8YnVpbGR8ISBFeGFtcGxlOgpcYmVnaW57dmVyYmF0aW19CnB5dGhvbiBzZXR1cC5weSBidWlsZF9leHQgLUkvdXNyL2xvY2FsL3NzbC9pbmNsdWRlIC1ML3Vzci9sb2NhbC9zc2wvbGliCnB5dGhvbiBzZXR1cC5weSBidWlsZApcZW5ke3ZlcmJhdGltfQoKTm93IHlvdSBzaG91bGQgaGF2ZSBhIGRpcmVjdG9yeSBjYWxsZWQgXHZlcmJ8T3BlblNTTHwgdGhhdCBjb250YWlucyBlLmcuClx2ZXJifFNTTC5zb3wgYW5kIFx2ZXJifF9faW5pdF9fLnB5fCBzb21ld2hlcmUgaW4gdGhlIGJ1aWxkIGRpY3JlY3RvcnksCnNvIGp1c3Q6ClxiZWdpbnt2ZXJiYXRpbX0KcHl0aG9uIHNldHVwLnB5IGluc3RhbGwKXGVuZHt2ZXJiYXRpbX0KCklmIHlvdSwgZm9yIHNvbWUgYXJjYW5lIHJlYXNvbiwgZG9uJ3Qgd2FudCB0aGUgbW9kdWxlIHRvIGFwcGVhciBpbiB0aGUKXHZlcmJ8c2l0ZS1wYWNrYWdlc3wgZGlyZWN0b3J5LCB1c2UgdGhlIFx2ZXJifC0tcHJlZml4fCBvcHRpb24uCgpZb3UgY2FuLCBvZiBjb3Vyc2UsIGRvClxiZWdpbnt2ZXJiYXRpbX0KcHl0aG9uIHNldHVwLnB5IC0taGVscApcZW5ke3ZlcmJhdGltfQoKdG8gZmluZCBvdXQgbW9yZSBhYm91dCBob3cgdG8gdXNlIHRoZSBzY3JpcHQuCgpcc3Vic2VjdGlvbntCdWlsZGluZyB0aGUgTW9kdWxlIG9uIGEgV2luZG93cyBTeXN0ZW0gXGxhYmVse2J1aWxkaW5nLXdpbmRvd3N9fQoKQmlnIHRoYW5rcyB0byBJdGFtYXIgU2h0dWxsLVRyYXVyaW5nIGFuZCBPbGVnIE9ybG92IGZvciB0aGVpciBoZWxwIHdpdGgKV2luZG93cyBidWlsZCBpbnN0cnVjdGlvbnMuICBTYW1lIGFzIGZvciBVbml4IHN5c3RlbXMsIHdlIGhhdmUgdG8gc2VwYXJhdGUKdGhlIFx2ZXJifGJ1aWxkX2V4dHwgYW5kIHRoZSBcdmVyYnxidWlsZHwuCgpCdWlsZGluZyB0aGUgbGlicmFyeToKClxiZWdpbnt2ZXJiYXRpbX0Kc2V0dXAucHkgYnVpbGRfZXh0IC1JIC4uLlxvcGVuc3NsXGluYzMyIC1MIC4uLlxvcGVuc3NsXG91dDMyZGxsCnNldHVwLnB5IGJ1aWxkClxlbmR7dmVyYmF0aW19CgpXaGVyZSBcdmVyYnwuLi5cb3BlbnNzbHwgaXMgb2YgY291cnNlIHRoZSBsb2NhdGlvbiBvZiB5b3VyIE9wZW5TU0wgaW5zdGFsbGF0aW9uLgoKSW5zdGFsbGF0aW9uIGlzIHRoZSBzYW1lIGFzIGZvciBVbml4IHN5c3RlbXM6ClxiZWdpbnt2ZXJiYXRpbX0Kc2V0dXAucHkgaW5zdGFsbApcZW5ke3ZlcmJhdGltfQoKQW5kIHNpbWlsYXJpbHksIHlvdSBjYW4gZG8KXGJlZ2lue3ZlcmJhdGltfQpzZXR1cC5weSAtLWhlbHAKXGVuZHt2ZXJiYXRpbX0KCnRvIGdldCBtb3JlIGluZm9ybWF0aW9uLgoKClxzZWN0aW9ue1xtb2R1bGV7T3BlblNTTH0gLS0tIFB5dGhvbiBpbnRlcmZhY2UgdG8gT3BlblNTTCBcbGFiZWx7b3BlbnNzbH19CgpcZGVjbGFyZW1vZHVsZXtleHRlbnNpb259e09wZW5TU0x9Clxtb2R1bGVzeW5vcHNpc3tQeXRob24gaW50ZXJmYWNlIHRvIE9wZW5TU0x9CgpUaGlzIHBhY2thZ2UgcHJvdmlkZXMgYSBoaWdoLWxldmVsIGludGVyZmFjZSB0byB0aGUgZnVuY3Rpb25zIGluIHRoZQpPcGVuU1NMIGxpYnJhcnkuIFRoZSBmb2xsb3dpbmcgbW9kdWxlcyBhcmUgZGVmaW5lZDoKClxiZWdpbntkYXRhZGVzY317Y3J5cHRvfQpHZW5lcmljIGNyeXB0b2dyYXBoaWMgbW9kdWxlLiBOb3RlIHRoYXQgaWYgYW55dGhpbmcgaXMgaW5jb21wbGV0ZSwgdGhpcyBtb2R1bGUgaXMhClxlbmR7ZGF0YWRlc2N9CgpcYmVnaW57ZGF0YWRlc2N9e3JhbmR9CkFuIGludGVyZmFjZSB0byB0aGUgT3BlblNTTCBwc2V1ZG8gcmFuZG9tIG51bWJlciBnZW5lcmF0b3IuClxlbmR7ZGF0YWRlc2N9CgpcYmVnaW57ZGF0YWRlc2N9e1NTTH0KQW4gaW50ZXJmYWNlIHRvIHRoZSBTU0wtc3BlY2lmaWMgcGFydHMgb2YgT3BlblNTTC4KXGVuZHtkYXRhZGVzY30KCgolICUgJSBjcnlwdG8gbW9kdWxlT3BlblNTTAoKXHN1YnNlY3Rpb257XG1vZHVsZXtjcnlwdG99IC0tLSBHZW5lcmljIGNyeXB0b2dyYXBoaWMgbW9kdWxlIFxsYWJlbHtvcGVuc3NsLWNyeXB0b319CgpcZGVjbGFyZW1vZHVsZXtleHRlbnNpb259e2NyeXB0b30KXG1vZHVsZXN5bm9wc2lze0dlbmVyaWMgY3J5cHRvZ3JhcGhpYyBtb2R1bGV9CgpcYmVnaW57ZGF0YWRlc2N9e1g1MDlUeXBlfQpBIFB5dGhvbiB0eXBlIG9iamVjdCByZXByZXNlbnRpbmcgdGhlIFg1MDkgb2JqZWN0IHR5cGUuClxlbmR7ZGF0YWRlc2N9CgpcYmVnaW57ZnVuY2Rlc2N9e1g1MDl9e30KRmFjdG9yeSBmdW5jdGlvbiB0aGF0IGNyZWF0ZXMgYW4gWDUwOSBvYmplY3QuClxlbmR7ZnVuY2Rlc2N9CgpcYmVnaW57ZGF0YWRlc2N9e1g1MDlOYW1lVHlwZX0KQSBQeXRob24gdHlwZSBvYmplY3QgcmVwcmVzZW50aW5nIHRoZSBYNTA5TmFtZSBvYmplY3QgdHlwZS4KXGVuZHtkYXRhZGVzY30KClxiZWdpbntmdW5jZGVzY317WDUwOU5hbWV9e3g1MDluYW1lfQpGYWN0b3J5IGZ1bmN0aW9uIHRoYXQgY3JlYXRlcyBhIGNvcHkgb2YgXHZhcnt4NTA5bmFtZX0uClxlbmR7ZnVuY2Rlc2N9CgpcYmVnaW57ZGF0YWRlc2N9e1g1MDlSZXFUeXBlfQpBIFB5dGhvbiB0eXBlIG9iamVjdCByZXByZXNlbnRpbmcgdGhlIFg1MDlSZXEgb2JqZWN0IHR5cGUuClxlbmR7ZGF0YWRlc2N9CgpcYmVnaW57ZnVuY2Rlc2N9e1g1MDlSZXF9e30KRmFjdG9yeSBmdW5jdGlvbiB0aGF0IGNyZWF0ZXMgYW4gWDUwOVJlcSBvYmplY3QuClxlbmR7ZnVuY2Rlc2N9CgpcYmVnaW57ZGF0YWRlc2N9e1g1MDlTdG9yZVR5cGV9CkEgUHl0aG9uIHR5cGUgb2JqZWN0IHJlcHJlc2VudGluZyB0aGUgWDUwOVN0b3JlIG9iamVjdCB0eXBlLgpcZW5ke2RhdGFkZXNjfQoKXGJlZ2lue2RhdGFkZXNjfXtQS2V5VHlwZX0KQSBQeXRob24gdHlwZSBvYmplY3QgcmVwcmVzZW50aW5nIHRoZSBQS2V5IG9iamVjdCB0eXBlLgpcZW5ke2RhdGFkZXNjfQoKXGJlZ2lue2Z1bmNkZXNjfXtQS2V5fXt9CkZhY3RvcnkgZnVuY3Rpb24gdGhhdCBjcmVhdGVzIGEgUEtleSBvYmplY3QuClxlbmR7ZnVuY2Rlc2N9CgpcYmVnaW57ZGF0YWRlc2N9e1BLQ1M3VHlwZX0KQSBQeXRob24gdHlwZSBvYmplY3QgcmVwcmVzZW50aW5nIHRoZSBQS0NTNyBvYmplY3QgdHlwZS4KXGVuZHtkYXRhZGVzY30KClxiZWdpbntkYXRhZGVzY317UEtDUzEyVHlwZX0KQSBQeXRob24gdHlwZSBvYmplY3QgcmVwcmVzZW50aW5nIHRoZSBQS0NTMTIgb2JqZWN0IHR5cGUuClxlbmR7ZGF0YWRlc2N9CgpcYmVnaW57ZGF0YWRlc2N9e1g1MDlFeHRlbnNpb25UeXBlfQpBIFB5dGhvbiB0eXBlIG9iamVjdCByZXByZXNlbnRpbmcgdGhlIFg1MDlFeHRlbnNpb24gb2JqZWN0IHR5cGUuClxlbmR7ZGF0YWRlc2N9CgpcYmVnaW57ZnVuY2Rlc2N9e1g1MDlFeHRlbnNpb259e3R5cGVuYW1lLCBjcml0aWNhbCwgdmFsdWV9CkZhY3RvcnkgZnVuY3Rpb24gdGhhdCBjcmVhdGVzIGEgWDUwOUV4dGVuc2lvbiBvYmplY3QuClxlbmR7ZnVuY2Rlc2N9CgpcYmVnaW57ZGF0YWRlc2N9e05ldHNjYXBlU1BLSVR5cGV9CkEgUHl0aG9uIHR5cGUgb2JqZWN0IHJlcHJlc2VudGluZyB0aGUgTmV0c2NhcGVTUEtJIG9iamVjdCB0eXBlLgpcZW5ke2RhdGFkZXNjfQoKXGJlZ2lue2Z1bmNkZXNjfXtOZXRzY2FwZVNQS0l9e1xvcHRpb25hbHtlbmN9fQpGYWN0b3J5IGZ1bmN0aW9uIHRoYXQgY3JlYXRlcyBhIE5ldHNjYXBlU1BLSSBvYmplY3QuIElmIHRoZSBcdmFye2VuY30gYXJndW1lbnQKaXMgcHJlc2VudCwgaXQgc2hvdWxkIGJlIGEgYmFzZTY0LWVuY29kZWQgc3RyaW5nIHJlcHJlc2VudGluZyBhIE5ldHNjYXBlU1BLSQpvYmplY3QsIGFzIHJldHVybmVkIGJ5IHRoZSBcbWV0aG9ke2I2NF9lbmNvZGV9IG1ldGhvZC4KXGVuZHtmdW5jZGVzY30KClxiZWdpbntkYXRhZGVzY317RklMRVRZUEVfUEVNfQpcZGF0YWxpbmV7RklMRVRZUEVfQVNOMX0KRmlsZSB0eXBlIGNvbnN0YW50cy4KXGVuZHtkYXRhZGVzY30KClxiZWdpbntkYXRhZGVzY317VFlQRV9SU0F9ClxkYXRhbGluZXtUWVBFX0RTQX0KS2V5IHR5cGUgY29uc3RhbnRzLgpcZW5ke2RhdGFkZXNjfQoKXGJlZ2lue2V4Y2Rlc2N9e0Vycm9yfQpHZW5lcmljIGV4Y2VwdGlvbiB1c2VkIGluIHRoZSBcbW9kdWxle2NyeXB0b30gbW9kdWxlLgpcZW5ke2V4Y2Rlc2N9CgpcYmVnaW57ZnVuY2Rlc2N9e2R1bXBfY2VydGlmaWNhdGV9e3R5cGUsIGNlcnR9CkR1bXAgdGhlIGNlcnRpZmljYXRlIFx2YXJ7Y2VydH0gaW50byBhIGJ1ZmZlciBzdHJpbmcgZW5jb2RlZCB3aXRoIHRoZSB0eXBlClx2YXJ7dHlwZX0uClxlbmR7ZnVuY2Rlc2N9CgpcYmVnaW57ZnVuY2Rlc2N9e2R1bXBfY2VydGlmaWNhdGVfcmVxdWVzdH17dHlwZSwgcmVxfQpEdW1wIHRoZSBjZXJ0aWZpY2F0ZSByZXF1ZXN0IFx2YXJ7cmVxfSBpbnRvIGEgYnVmZmVyIHN0cmluZyBlbmNvZGVkIHdpdGggdGhlCnR5cGUgXHZhcnt0eXBlfS4KXGVuZHtmdW5jZGVzY30KClxiZWdpbntmdW5jZGVzY317ZHVtcF9wcml2YXRla2V5fXt0eXBlLCBwa2V5XG9wdGlvbmFseywgY2lwaGVyLCBwYXNzcGhyYXNlfX0KRHVtcCB0aGUgcHJpdmF0ZSBrZXkgXHZhcntwa2V5fSBpbnRvIGEgYnVmZmVyIHN0cmluZyBlbmNvZGVkIHdpdGggdGhlIHR5cGUKXHZhcnt0eXBlfSwgb3B0aW9uYWxseSAoaWYgXHZhcnt0eXBlfSBpcyBcY29uc3RhbnR7RklMRVRZUEVfUEVNfSkgZW5jcnlwdGluZyBpdAp1c2luZyBcdmFye2NpcGhlcn0gYW5kIFx2YXJ7cGFzc3BocmFzZX0uCgpcdmFye3Bhc3NwaHJhc2V9IG11c3QgYmUgZWl0aGVyIGEgc3RyaW5nIG9yIGEgY2FsbGJhY2sgZm9yIHByb3ZpZGluZyB0aGUKcGFzcyBwaHJhc2UuClxlbmR7ZnVuY2Rlc2N9CgpcYmVnaW57ZnVuY2Rlc2N9e2xvYWRfY2VydGlmaWNhdGV9e3R5cGUsIGJ1ZmZlcn0KTG9hZCBhIGNlcnRpZmljYXRlIChYNTA5KSBmcm9tIHRoZSBzdHJpbmcgXHZhcntidWZmZXJ9IGVuY29kZWQgd2l0aCB0aGUKdHlwZSBcdmFye3R5cGV9LgpcZW5ke2Z1bmNkZXNjfQoKXGJlZ2lue2Z1bmNkZXNjfXtsb2FkX2NlcnRpZmljYXRlX3JlcXVlc3R9e3R5cGUsIGJ1ZmZlcn0KTG9hZCBhIGNlcnRpZmljYXRlIHJlcXVlc3QgKFg1MDlSZXEpIGZyb20gdGhlIHN0cmluZyBcdmFye2J1ZmZlcn0gZW5jb2RlZCB3aXRoCnRoZSB0eXBlIFx2YXJ7dHlwZX0uClxlbmR7ZnVuY2Rlc2N9CgpcYmVnaW57ZnVuY2Rlc2N9e2xvYWRfcHJpdmF0ZWtleX17dHlwZSwgYnVmZmVyXG9wdGlvbmFseywgcGFzc3BocmFzZX19CkxvYWQgYSBwcml2YXRlIGtleSAoUEtleSkgZnJvbSB0aGUgc3RyaW5nIFx2YXJ7YnVmZmVyfSBlbmNvZGVkIHdpdGgKdGhlIHR5cGUgXHZhcnt0eXBlfSAobXVzdCBiZSBvbmUgb2YgXGNvbnN0YW50e0ZJTEVUWVBFX1BFTX0gYW5kClxjb25zdGFudHtGSUxFVFlQRV9BU04xfSkuCgpcdmFye3Bhc3NwaHJhc2V9IG11c3QgYmUgZWl0aGVyIGEgc3RyaW5nIG9yIGEgY2FsbGJhY2sgZm9yIHByb3ZpZGluZyB0aGUKcGFzcyBwaHJhc2UuClxlbmR7ZnVuY2Rlc2N9CgpcYmVnaW57ZnVuY2Rlc2N9e2xvYWRfcGtjczdfZGF0YX17dHlwZSwgYnVmZmVyfQpMb2FkIHBrY3M3IGRhdGEgZnJvbSB0aGUgc3RyaW5nIFx2YXJ7YnVmZmVyfSBlbmNvZGVkIHdpdGggdGhlIHR5cGUgXHZhcnt0eXBlfS4KXGVuZHtmdW5jZGVzY30KClxiZWdpbntmdW5jZGVzY317bG9hZF9wa2NzMTJ9e2J1ZmZlclxvcHRpb25hbHssIHBhc3NwaHJhc2V9fQpMb2FkIHBrY3MxMiBkYXRhIGZyb20gdGhlIHN0cmluZyBcdmFye2J1ZmZlcn0uIElmIHRoZSBwa2NzMTIgc3RydWN0dXJlIGlzCmVuY3J5cHRlZCwgYSBcdmFye3Bhc3NwaHJhc2V9IG11c3QgYmUgaW5jbHVkZWQuClxlbmR7ZnVuY2Rlc2N9Cgpcc3Vic3Vic2VjdGlvbntYNTA5IG9iamVjdHMgXGxhYmVse29wZW5zc2wteDUwOX19CgpYNTA5IG9iamVjdHMgaGF2ZSB0aGUgZm9sbG93aW5nIG1ldGhvZHM6CgpcYmVnaW57bWV0aG9kZGVzY31bWDUwOV17Z2V0X2lzc3Vlcn17fQpSZXR1cm4gYW4gWDUwOU5hbWUgb2JqZWN0IHJlcHJlc2VudGluZyB0aGUgaXNzdWVyIG9mIHRoZSBjZXJ0aWZpY2F0ZS4KXGVuZHttZXRob2RkZXNjfQoKXGJlZ2lue21ldGhvZGRlc2N9W1g1MDlde2dldF9wdWJrZXl9e30KUmV0dXJuIGEgUEtleSBvYmplY3QgcmVwcmVzZW50aW5nIHRoZSBwdWJsaWMga2V5IG9mIHRoZSBjZXJ0aWZpY2F0ZS4KXGVuZHttZXRob2RkZXNjfQoKXGJlZ2lue21ldGhvZGRlc2N9W1g1MDlde2dldF9zZXJpYWxfbnVtYmVyfXt9ClJldHVybiB0aGUgY2VydGlmaWNhdGUgc2VyaWFsIG51bWJlci4KXGVuZHttZXRob2RkZXNjfQoKXGJlZ2lue21ldGhvZGRlc2N9W1g1MDlde2dldF9zdWJqZWN0fXt9ClJldHVybiBhbiBYNTA5TmFtZSBvYmplY3QgcmVwcmVzZW50aW5nIHRoZSBzdWJqZWN0IG9mIHRoZSBjZXJ0aWZpY2F0ZS4KXGVuZHttZXRob2RkZXNjfQoKXGJlZ2lue21ldGhvZGRlc2N9W1g1MDlde2dldF92ZXJzaW9ufXt9ClJldHVybiB0aGUgY2VydGlmaWNhdGUgdmVyc2lvbi4KXGVuZHttZXRob2RkZXNjfQoKXGJlZ2lue21ldGhvZGRlc2N9W1g1MDlde2dldF9ub3RCZWZvcmV9e30KUmV0dXJuIGEgc3RyaW5nIGdpdmluZyB0aGUgdGltZSBiZWZvcmUgd2hpY2ggdGhlIGNlcnRpZmljYXRlIGlzIG5vdCB2YWxpZC4gIFRoZQpzdHJpbmcgaXMgZm9ybWF0dGVkIGFzIGFuIEFTTjEgR0VORVJBTElaRURUSU1FOgpcYmVnaW57dmVyYmF0aW19CiAgICAgICAgICAgICAgICAgWVlZWU1NRERoaG1tc3NaCiAgICAgICAgICAgICAgICAgWVlZWU1NRERoaG1tc3MraGhtbQogICAgICAgICAgICAgICAgIFlZWVlNTUREaGhtbXNzLWhobW0KXGVuZHt2ZXJiYXRpbX0KSWYgbm8gdmFsdWUgZXhpc3RzIGZvciB0aGlzIGZpZWxkLCBcY29kZXtOb25lfSBpcyByZXR1cm5lZC4KXGVuZHttZXRob2RkZXNjfQoKXGJlZ2lue21ldGhvZGRlc2N9W1g1MDlde2dldF9ub3RBZnRlcn17fQpSZXR1cm4gYSBzdHJpbmcgZ2l2aW5nIHRoZSB0aW1lIGFmdGVyIHdoaWNoIHRoZSBjZXJ0aWZpY2F0ZSBpcyBub3QgdmFsaWQuICBUaGUKc3RyaW5nIGlzIGZvcm1hdHRlZCBhcyBhbiBBU04xIEdFTkVSQUxJWkVEVElNRToKXGJlZ2lue3ZlcmJhdGltfQogICAgICAgICAgICAgICAgIFlZWVlNTUREaGhtbXNzWgogICAgICAgICAgICAgICAgIFlZWVlNTUREaGhtbXNzK2hobW0KICAgICAgICAgICAgICAgICBZWVlZTU1ERGhobW1zcy1oaG1tClxlbmR7dmVyYmF0aW19CklmIG5vIHZhbHVlIGV4aXN0cyBmb3IgdGhpcyBmaWVsZCwgXGNvZGV7Tm9uZX0gaXMgcmV0dXJuZWQuClxlbmR7bWV0aG9kZGVzY30KClxiZWdpbnttZXRob2RkZXNjfVtYNTA5XXtzZXRfbm90QmVmb3JlfXt3aGVufQpDaGFuZ2UgdGhlIHRpbWUgYmVmb3JlIHdoaWNoIHRoZSBjZXJ0aWZpY2F0ZSBpcyBub3QgdmFsaWQuICBcdmFye3doZW59IGlzIGEKc3RyaW5nIGZvcm1hdHRlZCBhcyBhbiBBU04xIEdFTkVSQUxJWkVEVElNRToKXGJlZ2lue3ZlcmJhdGltfQogICAgICAgICAgICAgICAgIFlZWVlNTUREaGhtbXNzWgogICAgICAgICAgICAgICAgIFlZWVlNTUREaGhtbXNzK2hobW0KICAgICAgICAgICAgICAgICBZWVlZTU1ERGhobW1zcy1oaG1tClxlbmR7dmVyYmF0aW19ClxlbmR7bWV0aG9kZGVzY30KClxiZWdpbnttZXRob2RkZXNjfVtYNTA5XXtzZXRfbm90QWZ0ZXJ9e3doZW59CkNoYW5nZSB0aGUgdGltZSBhZnRlciB3aGljaCB0aGUgY2VydGlmaWNhdGUgaXMgbm90IHZhbGlkLiAgXHZhcnt3aGVufSBpcyBhCnN0cmluZyBmb3JtYXR0ZWQgYXMgYW4gQVNOMSBHRU5FUkFMSVpFRFRJTUU6ClxiZWdpbnt2ZXJiYXRpbX0KICAgICAgICAgICAgICAgICBZWVlZTU1ERGhobW1zc1oKICAgICAgICAgICAgICAgICBZWVlZTU1ERGhobW1zcytoaG1tCiAgICAgICAgICAgICAgICAgWVlZWU1NRERoaG1tc3MtaGhtbQpcZW5ke3ZlcmJhdGltfQpcZW5ke21ldGhvZGRlc2N9CgpcYmVnaW57bWV0aG9kZGVzY31bWDUwOV17Z210aW1lX2Fkal9ub3RCZWZvcmV9e3RpbWV9CkFkanVzdCB0aGUgdGltZXN0YW1wIChpbiBHTVQpIHdoZW4gdGhlIGNlcnRpZmljYXRlIHN0YXJ0cyBiZWluZyB2YWxpZC4KXGVuZHttZXRob2RkZXNjfQoKXGJlZ2lue21ldGhvZGRlc2N9W1g1MDlde2dtdGltZV9hZGpfbm90QWZ0ZXJ9e3RpbWV9CkFkanVzdCB0aGUgdGltZXN0YW1wIChpbiBHTVQpIHdoZW4gdGhlIGNlcnRpZmljYXRlIHN0b3BzIGJlaW5nIHZhbGlkLgpcZW5ke21ldGhvZGRlc2N9CgpcYmVnaW57bWV0aG9kZGVzY31bWDUwOV17aGFzX2V4cGlyZWR9e30KQ2hlY2tzIHRoZSBjZXJ0aWZpY2F0ZSdzIHRpbWUgc3RhbXAgYWdhaW5zdCBjdXJyZW50IHRpbWUuIFJldHVybnMgdHJ1ZSBpZiB0aGUKY2VydGlmaWNhdGUgaGFzIGV4cGlyZWQgYW5kIGZhbHNlIG90aGVyd2lzZS4KXGVuZHttZXRob2RkZXNjfQoKXGJlZ2lue21ldGhvZGRlc2N9W1g1MDlde3NldF9pc3N1ZXJ9e2lzc3Vlcn0KU2V0IHRoZSBpc3N1ZXIgb2YgdGhlIGNlcnRpZmljYXRlIHRvIFx2YXJ7aXNzdWVyfS4KXGVuZHttZXRob2RkZXNjfQoKXGJlZ2lue21ldGhvZGRlc2N9W1g1MDlde3NldF9wdWJrZXl9e3BrZXl9ClNldCB0aGUgcHVibGljIGtleSBvZiB0aGUgY2VydGlmaWNhdGUgdG8gXHZhcntwa2V5fS4KXGVuZHttZXRob2RkZXNjfQoKXGJlZ2lue21ldGhvZGRlc2N9W1g1MDlde3NldF9zZXJpYWxfbnVtYmVyfXtzZXJpYWxub30KU2V0IHRoZSBzZXJpYWwgbnVtYmVyIG9mIHRoZSBjZXJ0aWZpY2F0ZSB0byBcdmFye3NlcmlhbG5vfS4KXGVuZHttZXRob2RkZXNjfQoKXGJlZ2lue21ldGhvZGRlc2N9W1g1MDlde3NldF9zdWJqZWN0fXtzdWJqZWN0fQpTZXQgdGhlIHN1YmplY3Qgb2YgdGhlIGNlcnRpZmljYXRlIHRvIFx2YXJ7c3ViamVjdH0uClxlbmR7bWV0aG9kZGVzY30KClxiZWdpbnttZXRob2RkZXNjfVtYNTA5XXtzZXRfdmVyc2lvbn17dmVyc2lvbn0KU2V0IHRoZSBjZXJ0aWZpY2F0ZSB2ZXJzaW9uIHRvIFx2YXJ7dmVyc2lvbn0uClxlbmR7bWV0aG9kZGVzY30KClxiZWdpbnttZXRob2RkZXNjfVtYNTA5XXtzaWdufXtwa2V5LCBkaWdlc3R9ClNpZ24gdGhlIGNlcnRpZmljYXRlLCB1c2luZyB0aGUga2V5IFx2YXJ7cGtleX0gYW5kIHRoZSBtZXNzYWdlIGRpZ2VzdCBhbGdvcml0aG0KaWRlbnRpZmllZCBieSB0aGUgc3RyaW5nIFx2YXJ7ZGlnZXN0fS4KXGVuZHttZXRob2RkZXNjfQoKXGJlZ2lue21ldGhvZGRlc2N9W1g1MDlde3N1YmplY3RfbmFtZV9oYXNofXt9ClJldHVybiB0aGUgaGFzaCBvZiB0aGUgY2VydGlmaWNhdGUgc3ViamVjdC4KXGVuZHttZXRob2RkZXNjfQoKXGJlZ2lue21ldGhvZGRlc2N9W1g1MDlde2RpZ2VzdH17ZGlnZXN0X25hbWV9ClJldHVybiBhIGRpZ2VzdCBvZiB0aGUgY2VydGlmaWNhdGUsIHVzaW5nIHRoZSBcdmFye2RpZ2VzdF9uYW1lfSBtZXRob2QuClx2YXJ7ZGlnZXN0X25hbWV9IG11c3QgYmUgYSBzdHJpbmcgZGVzY3JpYmluZyBhIGRpZ2VzdCBhbGdvcml0aG0gc3VwcG9ydGVkCmJ5IE9wZW5TU0wgKGJ5IEVWUF9nZXRfZGlnZXN0YnluYW1lLCBzcGVjaWZpY2FsbHkpLiAgRm9yIGV4YW1wbGUsClxjb25zdGFudHsibWQ1In0gb3IgXGNvbnN0YW50eyJzaGExIn0uClxlbmR7bWV0aG9kZGVzY30KClxiZWdpbnttZXRob2RkZXNjfVtYNTA5XXthZGRfZXh0ZW5zaW9uc317ZXh0ZW5zaW9uc30KQWRkIHRoZSBleHRlbnNpb25zIGluIHRoZSBzZXF1ZW5jZSBcdmFye2V4dGVuc2lvbnN9IHRvIHRoZSBjZXJ0aWZpY2F0ZS4KXGVuZHttZXRob2RkZXNjfQoKXHN1YnN1YnNlY3Rpb257WDUwOU5hbWUgb2JqZWN0cyBcbGFiZWx7b3BlbnNzbC14NTA5bmFtZX19CgpYNTA5TmFtZSBvYmplY3RzIGhhdmUgdGhlIGZvbGxvd2luZyBtZXRob2RzOgoKXGJlZ2lue21ldGhvZGRlc2N9W1g1MDlOYW1lXXtoYXNofXt9ClJldHVybiBhbiBpbnRlZ2VyIGdpdmluZyB0aGUgZmlyc3QgZm91ciBieXRlcyBvZiB0aGUgTUQ1IGRpZ2VzdCBvZiB0aGUgREVSCnJlcHJlc2VudGF0aW9uIG9mIHRoZSBuYW1lLgpcZW5ke21ldGhvZGRlc2N9CgpcYmVnaW57bWV0aG9kZGVzY31bWDUwOU5hbWVde2Rlcn17fQpSZXR1cm4gYSBzdHJpbmcgZ2l2aW5nIHRoZSBERVIgcmVwcmVzZW50YXRpb24gb2YgdGhlIG5hbWUuClxlbmR7bWV0aG9kZGVzY30KClxiZWdpbnttZXRob2RkZXNjfVtYNTA5TmFtZV17Z2V0X2NvbXBvbmVudHN9e30KUmV0dXJuIGEgbGlzdCBvZiB0d28tdHVwbGVzIG9mIHN0cmluZ3MgZ2l2aW5nIHRoZSBjb21wb25lbnRzIG9mIHRoZSBuYW1lLgpcZW5ke21ldGhvZGRlc2N9CgpYNTA5TmFtZSBvYmplY3RzIGhhdmUgdGhlIGZvbGxvd2luZyBtZW1iZXJzOgoKXGJlZ2lue21lbWJlcmRlc2N9W1g1MDlOYW1lXXtjb3VudHJ5TmFtZX0KVGhlIGNvdW50cnkgb2YgdGhlIGVudGl0eS4gXGNvZGV7Q30gbWF5IGJlIHVzZWQgYXMgYW4gYWxpYXMgZm9yClxjb2Rle2NvdW50cnlOYW1lfS4KXGVuZHttZW1iZXJkZXNjfQoKXGJlZ2lue21lbWJlcmRlc2N9W1g1MDlOYW1lXXtzdGF0ZU9yUHJvdmluY2VOYW1lfQpUaGUgc3RhdGUgb3IgcHJvdmluY2Ugb2YgdGhlIGVudGl0eS4gXGNvZGV7U1R9IG1heSBiZSB1c2VkIGFzIGFuIGFsaWFzIGZvcgpcY29kZXtzdGF0ZU9yUHJvdmluY2VOYW1lfbcKXGVuZHttZW1iZXJkZXNjfQoKXGJlZ2lue21lbWJlcmRlc2N9W1g1MDlOYW1lXXtsb2NhbGl0eU5hbWV9ClRoZSBsb2NhbGl0eSBvZiB0aGUgZW50aXR5LiBcY29kZXtMfSBtYXkgYmUgdXNlZCBhcyBhbiBhbGlhcyBmb3IKXGNvZGV7bG9jYWxpdHlOYW1lfS4KXGVuZHttZW1iZXJkZXNjfQoKXGJlZ2lue21lbWJlcmRlc2N9W1g1MDlOYW1lXXtvcmdhbml6YXRpb25OYW1lfQpUaGUgb3JnYW5pemF0aW9uIG5hbWUgb2YgdGhlIGVudGl0eS4gXGNvZGV7T30gbWF5IGJlIHVzZWQgYXMgYW4gYWxpYXMgZm9yClxjb2Rle29yZ2FuaXphdGlvbk5hbWV9LgpcZW5ke21lbWJlcmRlc2N9CgpcYmVnaW57bWVtYmVyZGVzY31bWDUwOU5hbWVde29yZ2FuaXphdGlvbmFsVW5pdE5hbWV9ClRoZSBvcmdhbml6YXRpb25hbCB1bml0IG9mIHRoZSBlbnRpdHkuIFxjb2Rle09VfSBtYXkgYmUgdXNlZCBhcyBhbiBhbGlhcyBmb3IKXGNvZGV7b3JnYW5pemF0aW9uYWxVbml0TmFtZX0uClxlbmR7bWVtYmVyZGVzY30KClxiZWdpbnttZW1iZXJkZXNjfVtYNTA5TmFtZV17Y29tbW9uTmFtZX0KVGhlIGNvbW1vbiBuYW1lIG9mIHRoZSBlbnRpdHkuIFxjb2Rle0NOfSBtYXkgYmUgdXNlZCBhcyBhbiBhbGlhcyBmb3IKXGNvZGV7Y29tbW9uTmFtZX0uClxlbmR7bWVtYmVyZGVzY30KClxiZWdpbnttZW1iZXJkZXNjfVtYNTA5TmFtZV17ZW1haWxBZGRyZXNzfQpUaGUgZS1tYWlsIGFkZHJlc3Mgb2YgdGhlIGVudGl0eS4KXGVuZHttZW1iZXJkZXNjfQoKXHN1YnN1YnNlY3Rpb257WDUwOVJlcSBvYmplY3RzIFxsYWJlbHtvcGVuc3NsLXg1MDlyZXF9fQoKWDUwOVJlcSBvYmplY3RzIGhhdmUgdGhlIGZvbGxvd2luZyBtZXRob2RzOgoKXGJlZ2lue21ldGhvZGRlc2N9W1g1MDlSZXFde2dldF9wdWJrZXl9e30KUmV0dXJuIGEgUEtleSBvYmplY3QgcmVwcmVzZW50aW5nIHRoZSBwdWJsaWMga2V5IG9mIHRoZSBjZXJ0aWZpY2F0ZSByZXF1ZXN0LgpcZW5ke21ldGhvZGRlc2N9CgpcYmVnaW57bWV0aG9kZGVzY31bWDUwOVJlcV17Z2V0X3N1YmplY3R9e30KUmV0dXJuIGFuIFg1MDlOYW1lIG9iamVjdCByZXByZXNlbnRpbmcgdGhlIHN1YmplY3Qgb2YgdGhlIGNlcnRpZmljYXRlLgpcZW5ke21ldGhvZGRlc2N9CgpcYmVnaW57bWV0aG9kZGVzY31bWDUwOVJlcV17c2V0X3B1YmtleX17cGtleX0KU2V0IHRoZSBwdWJsaWMga2V5IG9mIHRoZSBjZXJ0aWZpY2F0ZSByZXF1ZXN0IHRvIFx2YXJ7cGtleX0uClxlbmR7bWV0aG9kZGVzY30KClxiZWdpbnttZXRob2RkZXNjfVtYNTA5UmVxXXtzaWdufXtwa2V5LCBkaWdlc3R9ClNpZ24gdGhlIGNlcnRpZmljYXRlIHJlcXVlc3QsIHVzaW5nIHRoZSBrZXkgXHZhcntwa2V5fSBhbmQgdGhlIG1lc3NhZ2UgZGlnZXN0CmFsZ29yaXRobSBpZGVudGlmaWVkIGJ5IHRoZSBzdHJpbmcgXHZhcntkaWdlc3R9LgpcZW5ke21ldGhvZGRlc2N9CgpcYmVnaW57bWV0aG9kZGVzY31bWDUwOVJlcV17dmVyaWZ5fXtwa2V5fQpWZXJpZnkgYSBjZXJ0aWZpY2F0ZSByZXF1ZXN0IHVzaW5nIHRoZSBwdWJsaWMga2V5IFx2YXJ7cGtleX0uClxlbmR7bWV0aG9kZGVzY30KClxiZWdpbnttZXRob2RkZXNjfVtYNTA5UmVxXXtzZXRfdmVyc2lvbn17dmVyc2lvbn0KU2V0IHRoZSB2ZXJzaW9uIChSRkMgMjQ1OSwgNC4xLjIuMSkgb2YgdGhlIGNlcnRpZmljYXRlIHJlcXVlc3QgdG8KXHZhcnt2ZXJzaW9ufS4KXGVuZHttZXRob2RkZXNjfQoKXGJlZ2lue21ldGhvZGRlc2N9W1g1MDlSZXFde2dldF92ZXJzaW9ufXt9CkdldCB0aGUgdmVyc2lvbiAoUkZDIDI0NTksIDQuMS4yLjEpIG9mIHRoZSBjZXJ0aWZpY2F0ZSByZXF1ZXN0LgpcZW5ke21ldGhvZGRlc2N9Cgpcc3Vic3Vic2VjdGlvbntYNTA5U3RvcmUgb2JqZWN0cyBcbGFiZWx7b3BlbnNzbC14NTA5c3RvcmV9fQoKVGhlIFg1MDlTdG9yZSBvYmplY3QgaGFzIGN1cnJlbnRseSBqdXN0IG9uZSBtZXRob2Q6CgpcYmVnaW57bWV0aG9kZGVzY31bWDUwOVN0b3JlXXthZGRfY2VydH17Y2VydH0KQWRkIHRoZSBjZXJ0aWZpY2F0ZSBcdmFye2NlcnR9IHRvIHRoZSBjZXJ0aWZpY2F0ZSBzdG9yZS4KXGVuZHttZXRob2RkZXNjfQoKXHN1YnN1YnNlY3Rpb257UEtleSBvYmplY3RzIFxsYWJlbHtvcGVuc3NsLXBrZXl9fQoKVGhlIFBLZXkgb2JqZWN0IGhhcyB0aGUgZm9sbG93aW5nIG1ldGhvZHM6CgpcYmVnaW57bWV0aG9kZGVzY31bUEtleV17Yml0c317fQpSZXR1cm4gdGhlIG51bWJlciBvZiBiaXRzIG9mIHRoZSBrZXkuClxlbmR7bWV0aG9kZGVzY30KClxiZWdpbnttZXRob2RkZXNjfVtQS2V5XXtnZW5lcmF0ZV9rZXl9e3R5cGUsIGJpdHN9CkdlbmVyYXRlIGEgcHVibGljL3ByaXZhdGUga2V5IHBhaXIgb2YgdGhlIHR5cGUgXHZhcnt0eXBlfSAob25lIG9mClxjb25zdGFudHtUWVBFX1JTQX0gYW5kIFxjb25zdGFudHtUWVBFX0RTQX0pIHdpdGggdGhlIHNpemUgXHZhcntiaXRzfS4KXGVuZHttZXRob2RkZXNjfQoKXGJlZ2lue21ldGhvZGRlc2N9W1BLZXlde3R5cGV9e30KUmV0dXJuIHRoZSB0eXBlIG9mIHRoZSBrZXkuClxlbmR7bWV0aG9kZGVzY30KClxzdWJzdWJzZWN0aW9ue1BLQ1M3IG9iamVjdHMgXGxhYmVse29wZW5zc2wtcGtjczd9fQoKUEtDUzcgb2JqZWN0cyBoYXZlIHRoZSBmb2xsb3dpbmcgbWV0aG9kczoKClxiZWdpbnttZXRob2RkZXNjfVtQS0NTN117dHlwZV9pc19zaWduZWR9e30KRklYTUUKXGVuZHttZXRob2RkZXNjfQoKXGJlZ2lue21ldGhvZGRlc2N9W1BLQ1M3XXt0eXBlX2lzX2VudmVsb3BlZH17fQpGSVhNRQpcZW5ke21ldGhvZGRlc2N9CgpcYmVnaW57bWV0aG9kZGVzY31bUEtDUzdde3R5cGVfaXNfc2lnbmVkQW5kRW52ZWxvcGVkfXt9CkZJWE1FClxlbmR7bWV0aG9kZGVzY30KClxiZWdpbnttZXRob2RkZXNjfVtQS0NTN117dHlwZV9pc19kYXRhfXt9CkZJWE1FClxlbmR7bWV0aG9kZGVzY30KClxiZWdpbnttZXRob2RkZXNjfVtQS0NTN117Z2V0X3R5cGVfbmFtZX17fQpHZXQgdGhlIHR5cGUgbmFtZSBvZiB0aGUgUEtDUzcuClxlbmR7bWV0aG9kZGVzY30KClxzdWJzdWJzZWN0aW9ue1BLQ1MxMiBvYmplY3RzIFxsYWJlbHtvcGVuc3NsLXBrY3MxMn19CgpQS0NTMTIgb2JqZWN0cyBoYXZlIHRoZSBmb2xsb3dpbmcgbWV0aG9kczoKClxiZWdpbnttZXRob2RkZXNjfVtQS0NTMTJde2dldF9jZXJ0aWZpY2F0ZX17fQpSZXR1cm4gY2VydGlmaWNhdGUgcG9ydGlvbiBvZiB0aGUgUEtDUzEyIHN0cnVjdHVyZS4KXGVuZHttZXRob2RkZXNjfQoKXGJlZ2lue21ldGhvZGRlc2N9W1BLQ1MxMl17Z2V0X3ByaXZhdGVrZXl9e30KUmV0dXJuIHByaXZhdGUga2V5IHBvcnRpb24gb2YgdGhlIFBLQ1MxMiBzdHJ1Y3R1cmUKXGVuZHttZXRob2RkZXNjfQoKXGJlZ2lue21ldGhvZGRlc2N9W1BLQ1MxMl17Z2V0X2NhX2NlcnRpZmljYXRlc317fQpSZXR1cm4gQ0EgY2VydGlmaWNhdGVzIHdpdGhpbiB0aGUgUEtDUzEyIG9iamVjdCBhcyBhIHR1cGxlLiBSZXR1cm5zCk5vbmUgaWYgbm8gQ0EgY2VydGlmaWNhdGVzIGFyZSBwcmVzZW50LgpcZW5ke21ldGhvZGRlc2N9Cgpcc3Vic3Vic2VjdGlvbntYNTA5RXh0ZW5zaW9uIG9iamVjdHMgXGxhYmVse29wZW5zc2wtNTA5ZXh0fX0KClg1MDlFeHRlbnNpb24gb2JqZWN0cyBoYXZlIHNldmVyYWwgbWV0aG9kczoKClxiZWdpbnttZXRob2RkZXNjfVtYNTA5RXh0ZW5zaW9uXXtnZXRfY3JpdGljYWx9e30KUmV0dXJuIHRoZSBjcml0aWNhbCBmaWVsZCBvZiB0aGUgZXh0ZW5zaW9uIG9iamVjdC4KXGVuZHttZXRob2RkZXNjfQoKXGJlZ2lue21ldGhvZGRlc2N9W1g1MDlFeHRlbnNpb25de2dldF9zaG9ydF9uYW1lfXt9ClJldHVybiB0aGUgc2hvcnQgdHlwZSBuYW1lIG9mIHRoZSBleHRlbnNpb24gb2JqZWN0LgpcZW5ke21ldGhvZGRlc2N9Cgpcc3Vic3Vic2VjdGlvbntOZXRzY2FwZVNQS0kgb2JqZWN0cyBcbGFiZWx7b3BlbnNzbC1uZXRzY2FwZS1zcGtpfX0KCk5ldHNjYXBlU1BLSSBvYmplY3RzIGhhdmUgdGhlIGZvbGxvd2luZyBtZXRob2RzOgoKXGJlZ2lue21ldGhvZGRlc2N9W05ldHNjYXBlU1BLSV17YjY0X2VuY29kZX17fQpSZXR1cm4gYSBiYXNlNjQtZW5jb2RlZCBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIG9iamVjdC4KXGVuZHttZXRob2RkZXNjfQoKXGJlZ2lue21ldGhvZGRlc2N9W05ldHNjYXBlU1BLSV17Z2V0X3B1YmtleX17fQpSZXR1cm4gdGhlIHB1YmxpYyBrZXkgb2Ygb2JqZWN0LgpcZW5ke21ldGhvZGRlc2N9CgpcYmVnaW57bWV0aG9kZGVzY31bTmV0c2NhcGVTUEtJXXtzZXRfcHVia2V5fXtrZXl9ClNldCB0aGUgcHVibGljIGtleSBvZiB0aGUgb2JqZWN0IHRvIFx2YXJ7a2V5fS4KXGVuZHttZXRob2RkZXNjfQoKXGJlZ2lue21ldGhvZGRlc2N9W05ldHNjYXBlU1BLSV17c2lnbn17a2V5LCBkaWdlc3RfbmFtZX0KU2lnbiB0aGUgTmV0c2NhcGVTUEtJIG9iamVjdCB1c2luZyB0aGUgZ2l2ZW4gXHZhcntrZXl9IGFuZApcdmFye2RpZ2VzdF9uYW1lfS4gIFx2YXJ7ZGlnZXN0X25hbWV9IG11c3QgYmUgYSBzdHJpbmcgZGVzY3JpYmluZyBhIGRpZ2VzdAphbGdvcml0aG0gc3VwcG9ydGVkIGJ5IE9wZW5TU0wgKGJ5IEVWUF9nZXRfZGlnZXN0YnluYW1lLCBzcGVjaWZpY2FsbHkpLiAgRm9yCmV4YW1wbGUsIFxjb25zdGFudHsibWQ1In0gb3IgXGNvbnN0YW50eyJzaGExIn0uClxlbmR7bWV0aG9kZGVzY30KClxiZWdpbnttZXRob2RkZXNjfVtOZXRzY2FwZVNQS0lde3ZlcmlmeX17a2V5fQpWZXJpZnkgdGhlIE5ldHNjYXBlU1BLSSBvYmplY3QgdXNpbmcgdGhlIGdpdmVuIFx2YXJ7a2V5fS4KXGVuZHttZXRob2RkZXNjfQoKCiUgJSAlIHJhbmQgbW9kdWxlCgpcc3Vic2VjdGlvbntcbW9kdWxle3JhbmR9IC0tLSBBbiBpbnRlcmZhY2UgdG8gdGhlIE9wZW5TU0wgcHNldWRvIHJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yIFxsYWJlbHtvcGVuc3NsLXJhbmR9fQoKXGRlY2xhcmVtb2R1bGV7ZXh0ZW5zaW9ufXtyYW5kfQpcbW9kdWxlc3lub3BzaXN7QW4gaW50ZXJmYWNlIHRvIHRoZSBPcGVuU1NMIHBzZXVkbyByYW5kb20gbnVtYmVyIGdlbmVyYXRvcn0KClRoaXMgbW9kdWxlIGhhbmRsZXMgdGhlIE9wZW5TU0wgcHNldWRvIHJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yIChQUk5HKSBhbmQKZGVjbGFyZXMgdGhlIGZvbGxvd2luZzoKClxiZWdpbntmdW5jZGVzY317YWRkfXtzdHJpbmcsIGVudHJvcHl9Ck1peCBieXRlcyBmcm9tIFx2YXJ7c3RyaW5nfSBpbnRvIHRoZSBQUk5HIHN0YXRlLiBUaGUgXHZhcntlbnRyb3B5fSBhcmd1bWVudCBpcwoodGhlIGxvd2VyIGJvdW5kIG9mKSBhbiBlc3RpbWF0ZSBvZiBob3cgbXVjaCByYW5kb21uZXNzIGlzIGNvbnRhaW5lZCBpbgpcdmFye3N0cmluZ30sIG1lYXN1cmVkIGluIGJ5dGVzLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIGUuZy4gXHJmY3sxNzUwfS4KXGVuZHtmdW5jZGVzY30KClxiZWdpbntmdW5jZGVzY317ZWdkfXtwYXRoXG9wdGlvbmFseywgYnl0ZXN9fQpRdWVyeSB0aGUgRW50cm9weSBHYXRoZXJpbmcgRGFlbW9uXGZvb3Rub3Rle1NlZQpcdXJse2h0dHA6Ly93d3cubG90aGFyLmNvbS90ZWNoL2NyeXB0by99fSBvbiBzb2NrZXQgXHZhcntwYXRofSBmb3IgXHZhcntieXRlc30KYnl0ZXMgb2YgcmFuZG9tIGRhdGEgYW5kIGFuZCB1c2VzIFxmdW5jdGlvbnthZGR9IHRvIHNlZWQgdGhlIFBSTkcuIFRoZSBkZWZhdWx0CnZhbHVlIG9mIFx2YXJ7Ynl0ZXN9IGlzIDI1NS4KXGVuZHtmdW5jZGVzY30KClxiZWdpbntmdW5jZGVzY317bG9hZF9maWxlfXtwYXRoXG9wdGlvbmFseywgYnl0ZXN9fQpSZWFkIFx2YXJ7Ynl0ZXN9IGJ5dGVzIChvciBhbGwgb2YgaXQsIGlmIFx2YXJ7Ynl0ZXN9IGlzIG5lZ2F0aXZlKSBvZiBkYXRhIGZyb20KdGhlIGZpbGUgXHZhcntwYXRofSB0byBzZWVkIHRoZSBQUk5HLiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiBcdmFye2J5dGVzfSBpcyAtMS4KXGVuZHtmdW5jZGVzY30KClxiZWdpbntmdW5jZGVzY317c2NyZWVufXt9CkFkZCB0aGUgY3VycmVudCBjb250ZW50cyBvZiB0aGUgc2NyZWVuIHRvIHRoZSBQUk5HIHN0YXRlLgpBdmFpbGFiaWxpdHk6IFdpbmRvd3MuClxlbmR7ZnVuY2Rlc2N9CgpcYmVnaW57ZnVuY2Rlc2N9e3NlZWR9e3N0cmluZ30KVGhpcyBpcyBlcXVpdmFsZW50IHRvIGNhbGxpbmcgXGZ1bmN0aW9ue2FkZH0gd2l0aCBcdmFye2VudHJvcHl9IGFzIHRoZSBsZW5ndGgKb2YgdGhlIHN0cmluZy4KXGVuZHtmdW5jZGVzY30KClxiZWdpbntmdW5jZGVzY317c3RhdHVzfXt9ClJldHVybnMgdHJ1ZSBpZiB0aGUgUFJORyBoYXMgYmVlbiBzZWVkZWQgd2l0aCBlbm91Z2ggZGF0YSwgYW5kIGZhbHNlIG90aGVyd2lzZS4KXGVuZHtmdW5jZGVzY30KClxiZWdpbntmdW5jZGVzY317d3JpdGVfZmlsZX17cGF0aH0KV3JpdGUgYSBudW1iZXIgb2YgcmFuZG9tIGJ5dGVzIChjdXJyZW50bHkgMTAyNCkgdG8gdGhlIGZpbGUgXHZhcntwYXRofS4gVGhpcwpmaWxlIGNhbiB0aGVuIGJlIHVzZWQgd2l0aCBcZnVuY3Rpb257bG9hZF9maWxlfSB0byBzZWVkIHRoZSBQUk5HIGFnYWluLgpcZW5ke2Z1bmNkZXNjfQoKCgolICUgJSBTU0wgbW9kdWxlCgpcc3Vic2VjdGlvbntcbW9kdWxle1NTTH0gLS0tIEFuIGludGVyZmFjZSB0byB0aGUgU1NMLXNwZWNpZmljIHBhcnRzIG9mIE9wZW5TU0wgXGxhYmVse29wZW5zc2wtc3NsfX0KClxkZWNsYXJlbW9kdWxle2V4dGVuc2lvbn17U1NMfQpcbW9kdWxlc3lub3BzaXN7QW4gaW50ZXJmYWNlIHRvIHRoZSBTU0wtc3BlY2lmaWMgcGFydHMgb2YgT3BlblNTTH0KClRoaXMgbW9kdWxlIGhhbmRsZXMgdGhpbmdzIHNwZWNpZmljIHRvIFNTTC4gVGhlcmUgYXJlIHR3byBvYmplY3RzIGRlZmluZWQ6CkNvbnRleHQsIENvbm5lY3Rpb24uCgpcYmVnaW57ZGF0YWRlc2N9e1NTTHYyX01FVEhPRH0KXGRhdGFsaW5le1NTTHYzX01FVEhPRH0KXGRhdGFsaW5le1NTTHYyM19NRVRIT0R9ClxkYXRhbGluZXtUTFN2MV9NRVRIT0R9ClRoZXNlIGNvbnN0YW50cyByZXByZXNlbnQgdGhlIGRpZmZlcmVudCBTU0wgbWV0aG9kcyB0byB1c2Ugd2hlbiBjcmVhdGluZyBhCmNvbnRleHQgb2JqZWN0LgpcZW5ke2RhdGFkZXNjfQoKXGJlZ2lue2RhdGFkZXNjfXtWRVJJRllfTk9ORX0KXGRhdGFsaW5le1ZFUklGWV9QRUVSfQpcZGF0YWxpbmV7VkVSSUZZX0ZBSUxfSUZfTk9fUEVFUl9DRVJUfQpUaGVzZSBjb25zdGFudHMgcmVwcmVzZW50IHRoZSB2ZXJpZmljYXRpb24gbW9kZSB1c2VkIGJ5IHRoZSBDb250ZXh0Cm9iamVjdCdzIFxtZXRob2R7c2V0X3ZlcmlmeX0gbWV0aG9kLgpcZW5ke2RhdGFkZXNjfQoKXGJlZ2lue2RhdGFkZXNjfXtGSUxFVFlQRV9QRU19ClxkYXRhbGluZXtGSUxFVFlQRV9BU04xfQpGaWxlIHR5cGUgY29uc3RhbnRzIHVzZWQgd2l0aCB0aGUgXG1ldGhvZHt1c2VfY2VydGlmaWNhdGVfZmlsZX0gYW5kClxtZXRob2R7dXNlX3ByaXZhdGVrZXlfZmlsZX0gbWV0aG9kcyBvZiBDb250ZXh0IG9iamVjdHMuClxlbmR7ZGF0YWRlc2N9CgpcYmVnaW57ZGF0YWRlc2N9e09QX1NJTkdMRV9ESF9VU0V9ClxkYXRhbGluZXtPUF9FUEhFTUVSQUxfUlNBfQpcZGF0YWxpbmV7T1BfTk9fU1NMdjJ9ClxkYXRhbGluZXtPUF9OT19TU0x2M30KXGRhdGFsaW5le09QX05PX1RMU3YxfQpDb25zdGFudHMgdXNlZCB3aXRoIFxtZXRob2R7c2V0X29wdGlvbnN9IG9mIENvbnRleHQgb2JqZWN0cy4KXGNvbnN0YW50e09QX1NJTkdMRV9ESF9VU0V9IG1lYW5zIHRvIGFsd2F5cyBjcmVhdGUgYSBuZXcga2V5IHdoZW4gdXNpbmcgZXBoZW1lcmFsCkRpZmZpZS1IZWxsbWFuLiBcY29uc3RhbnR7T1BfRVBIRU1FUkFMX1JTQX0gbWVhbnMgdG8gYWx3YXlzIHVzZSBlcGhlbWVyYWwgUlNBIGtleXMKd2hlbiBkb2luZyBSU0Egb3BlcmF0aW9ucy4gXGNvbnN0YW50e09QX05PX1NTTHYyfSwgXGNvbnN0YW50e09QX05PX1NTTHYzfSBhbmQKXGNvbnN0YW50e09QX05PX1RMU3YxfSBtZWFucyB0byBkaXNhYmxlIHRob3NlIHNwZWNpZmljIHByb3RvY29scy4gVGhpcyBpcwppbnRlcmVzdGluZyBpZiB5b3UncmUgdXNpbmcgZS5nLiBcY29uc3RhbnR7U1NMdjIzX01FVEhPRH0gdG8gZ2V0IGFuIFNTTHYyLWNvbXBhdGlibGUKaGFuZHNoYWtlLCBidXQgZG9uJ3Qgd2FudCB0byB1c2UgU1NMdjIuClxlbmR7ZGF0YWRlc2N9CgpcYmVnaW57ZGF0YWRlc2N9e0NvbnRleHRUeXBlfQpBIFB5dGhvbiB0eXBlIG9iamVjdCByZXByZXNlbnRpbmcgdGhlIENvbnRleHQgb2JqZWN0IHR5cGUuClxlbmR7ZGF0YWRlc2N9CgpcYmVnaW57ZnVuY2Rlc2N9e0NvbnRleHR9e21ldGhvZH0KRmFjdG9yeSBmdW5jdGlvbiB0aGF0IGNyZWF0ZXMgYSBuZXcgQ29udGV4dCBvYmplY3QgZ2l2ZW4gYW4gU1NMIG1ldGhvZC4gVGhlCm1ldGhvZCBzaG91bGQgYmUgXGNvbnN0YW50e1NTTHYyX01FVEhPRH0sIFxjb25zdGFudHtTU0x2M19NRVRIT0R9LApcY29uc3RhbnR7U1NMdjIzX01FVEhPRH0gb3IgXGNvbnN0YW50e1RMU3YxX01FVEhPRH0uClxlbmR7ZnVuY2Rlc2N9CgpcYmVnaW57ZGF0YWRlc2N9e0Nvbm5lY3Rpb25UeXBlfQpBIFB5dGhvbiB0eXBlIG9iamVjdCByZXByZXNlbnRpbmcgdGhlIENvbm5lY3Rpb24gb2JqZWN0IHR5cGUuClxlbmR7ZGF0YWRlc2N9CgpcYmVnaW57ZnVuY2Rlc2N9e0Nvbm5lY3Rpb259e2NvbnRleHQsIHNvY2tldH0KRmFjdG9yeSBmdW5jdGlvbiB0aGF0IGNyZWF0ZXMgYSBuZXcgQ29ubmVjdGlvbiBvYmplY3QgZ2l2ZW4gYW4gU1NMIGNvbnRleHQgYW5kCmEgc29ja2V0IFxmb290bm90ZXtBY3R1YWxseSwgYWxsIHRoYXQgaXMgcmVxdWlyZWQgaXMgYW4gb2JqZWN0IHRoYXQKICBcZW1waHtiZWhhdmVzfSBsaWtlIGEgc29ja2V0LCB5b3UgY291bGQgZXZlbiB1c2UgZmlsZXMsIGV2ZW4gdGhvdWdoIGl0J2QgYmUKICB0cmlja3kgdG8gZ2V0IHRoZSBoYW5kc2hha2VzIHJpZ2h0IX0gb2JqZWN0LiAgXHZhcntzb2NrZXR9IG1heSBiZSBcdmFye05vbmV9OwppbiB0aGlzIGNhc2UsIHRoZSBDb25uZWN0aW9uIGlzIGNyZWF0ZWQgd2l0aCBhIG1lbW9yeSBCSU86IHNlZSB0aGUKXG1ldGhvZHtiaW9fcmVhZH0sIFxtZXRob2R7YmlvX3dyaXRlfSwgYW5kIFxtZXRob2R7YmlvX3NodXRkb3dufSBtZXRob2RzLgpcZW5ke2Z1bmNkZXNjfQoKXGJlZ2lue2V4Y2Rlc2N9e0Vycm9yfQpUaGlzIGV4Y2VwdGlvbiBpcyB1c2VkIGFzIGEgYmFzZSBjbGFzcyBmb3IgdGhlIG90aGVyIFNTTC1yZWxhdGVkCmV4Y2VwdGlvbnMsIGJ1dCBtYXkgYWxzbyBiZSByYWlzZWQgZGlyZWN0bHkuCgpXaGVuZXZlciB0aGlzIGV4Y2VwdGlvbiBpcyByYWlzZWQgZGlyZWN0bHksIGl0IGhhcyBhIGxpc3Qgb2YgZXJyb3IgbWVzc2FnZXMKZnJvbSB0aGUgT3BlblNTTCBlcnJvciBxdWV1ZSwgd2hlcmUgZWFjaCBpdGVtIGlzIGEgdHVwbGUgXGNvZGV7KFx2YXJ7bGlifSwKXHZhcntmdW5jdGlvbn0sIFx2YXJ7cmVhc29ufSl9LiBIZXJlIFx2YXJ7bGlifSwgXHZhcntmdW5jdGlvbn0gYW5kIFx2YXJ7cmVhc29ufQphcmUgYWxsIHN0cmluZ3MsIGRlc2NyaWJpbmcgd2hlcmUgYW5kIHdoYXQgdGhlIHByb2JsZW0gaXMuIFNlZSBcbWFucGFnZXtlcnJ9ezN9CmZvciBtb3JlIGluZm9ybWF0aW9uLgpcZW5ke2V4Y2Rlc2N9CgpcYmVnaW57ZXhjZGVzY317WmVyb1JldHVybkVycm9yfQpUaGlzIGV4Y2VwdGlvbiBtYXRjaGVzIHRoZSBlcnJvciByZXR1cm4gY29kZSBcY29kZXtTU0xfRVJST1JfWkVST19SRVRVUk59LCBhbmQKaXMgcmFpc2VkIHdoZW4gdGhlIFNTTCBDb25uZWN0aW9uIGhhcyBiZWVuIGNsb3NlZC4gSW4gU1NMIDMuMCBhbmQgVExTIDEuMCwgdGhpcwpvbmx5IG9jY3VycyBpZiBhIGNsb3N1cmUgYWxlcnQgaGFzIG9jY3VycmVkIGluIHRoZSBwcm90b2NvbCwgaS5lLiB0aGUKY29ubmVjdGlvbiBoYXMgYmVlbiBjbG9zZWQgY2xlYW5seS4gTm90ZSB0aGF0IHRoaXMgZG9lcyBub3QgbmVjZXNzYXJpbHkKbWVhbiB0aGF0IHRoZSB0cmFuc3BvcnQgbGF5ZXIgKGUuZy4gYSBzb2NrZXQpIGhhcyBiZWVuIGNsb3NlZC4KCkl0IG1heSBzZWVtIGEgbGl0dGxlIHN0cmFuZ2UgdGhhdCB0aGlzIGlzIGFuIGV4Y2VwdGlvbiwgYnV0IGl0IGRvZXMgbWF0Y2ggYW4KXGNvZGV7U1NMX0VSUk9SfSBjb2RlLCBhbmQgaXMgdmVyeSBjb252ZW5pZW50LgpcZW5ke2V4Y2Rlc2N9CgpcYmVnaW57ZXhjZGVzY317V2FudFJlYWRFcnJvcn0KVGhlIG9wZXJhdGlvbiBkaWQgbm90IGNvbXBsZXRlOyB0aGUgc2FtZSBJL08gbWV0aG9kIHNob3VsZCBiZSBjYWxsZWQgYWdhaW4KbGF0ZXIsIHdpdGggdGhlIHNhbWUgYXJndW1lbnRzLiBBbnkgSS9PIG1ldGhvZCBjYW4gbGVhZCB0byB0aGlzIHNpbmNlIG5ldwpoYW5kc2hha2VzIGNhbiBvY2N1ciBhdCBhbnkgdGltZS4KXGVuZHtleGNkZXNjfQoKXGJlZ2lue2V4Y2Rlc2N9e1dhbnRXcml0ZUVycm9yfQpTZWUgXGV4Y2VwdGlvbntXYW50UmVhZEVycm9yfS4KXGVuZHtleGNkZXNjfQoKXGJlZ2lue2V4Y2Rlc2N9e1dhbnRYNTA5TG9va3VwRXJyb3J9ClRoZSBvcGVyYXRpb24gZGlkIG5vdCBjb21wbGV0ZSBiZWNhdXNlIGFuIGFwcGxpY2F0aW9uIGNhbGxiYWNrIGhhcyBhc2tlZCB0byBiZQpjYWxsZWQgYWdhaW4uIFRoZSBJL08gbWV0aG9kIHNob3VsZCBiZSBjYWxsZWQgYWdhaW4gbGF0ZXIsIHdpdGggdGhlIHNhbWUKYXJndW1lbnRzLiBOb3RlOiBUaGlzIHdvbid0IG9jY3VyIGluIHRoaXMgdmVyc2lvbiwgYXMgdGhlcmUgYXJlIG5vIHN1Y2gKY2FsbGJhY2tzIGluIHRoaXMgdmVyc2lvbi4KXGVuZHtleGNkZXNjfQoKXGJlZ2lue2V4Y2Rlc2N9e1N5c0NhbGxFcnJvcn0KVGhlIFxleGNlcHRpb257U3lzQ2FsbEVycm9yfSBvY2N1cnMgd2hlbiB0aGVyZSdzIGFuIEkvTyBlcnJvciBhbmQgT3BlblNTTCdzCmVycm9yIHF1ZXVlIGRvZXMgbm90IGNvbnRhaW4gYW55IGluZm9ybWF0aW9uLiBUaGlzIGNhbiBtZWFuIHR3byB0aGluZ3M6IEFuCmVycm9yIGluIHRoZSB0cmFuc3BvcnQgcHJvdG9jb2wsIG9yIGFuIGVuZCBvZiBmaWxlIHRoYXQgdmlvbGF0ZXMgdGhlIHByb3RvY29sLgpUaGUgcGFyYW1ldGVyIHRvIHRoZSBleGNlcHRpb24gaXMgYWx3YXlzIGEgcGFpciBcY29kZXsoXHZhcntlcnJudW19LApcdmFye2VycnN0cn0pfS4KXGVuZHtleGNkZXNjfQoKClxzdWJzdWJzZWN0aW9ue0NvbnRleHQgb2JqZWN0cyBcbGFiZWx7b3BlbnNzbC1jb250ZXh0fX0KCkNvbnRleHQgb2JqZWN0cyBoYXZlIHRoZSBmb2xsb3dpbmcgbWV0aG9kczoKClxiZWdpbnttZXRob2RkZXNjfVtDb250ZXh0XXtjaGVja19wcml2YXRla2V5fXt9CkNoZWNrIGlmIHRoZSBwcml2YXRlIGtleSAobG9hZGVkIHdpdGggXG1ldGhvZHt1c2VfcHJpdmF0ZWtleVxvcHRpb25hbHtfZmlsZX19KQptYXRjaGVzIHRoZSBjZXJ0aWZpY2F0ZSAobG9hZGVkIHdpdGggXG1ldGhvZHt1c2VfY2VydGlmaWNhdGVcb3B0aW9uYWx7X2ZpbGV9fSkuClJldHVybnMgXGNvZGV7Tm9uZX0gaWYgdGhleSBtYXRjaCwgcmFpc2VzIFxleGNlcHRpb257RXJyb3J9IG90aGVyd2lzZS4KXGVuZHttZXRob2RkZXNjfQoKXGJlZ2lue21ldGhvZGRlc2N9W0NvbnRleHRde2dldF9hcHBfZGF0YX17fQpSZXRyaWV2ZSBhcHBsaWNhdGlvbiBkYXRhIGFzIHNldCBieSBcbWV0aG9ke3NldF9hcHBfZGF0YX0uClxlbmR7bWV0aG9kZGVzY30KClxiZWdpbnttZXRob2RkZXNjfVtDb250ZXh0XXtnZXRfY2VydF9zdG9yZX17fQpSZXRyaWV2ZSB0aGUgY2VydGlmaWNhdGUgc3RvcmUgKGEgWDUwOVN0b3JlIG9iamVjdCkgdGhhdCB0aGUgY29udGV4dCB1c2VzLgpUaGlzIGNhbiBiZSB1c2VkIHRvIGFkZCAidHJ1c3RlZCIgY2VydGlmaWNhdGVzIHdpdGhvdXQgdXNpbmcgdGhlLgpcbWV0aG9ke2xvYWRfdmVyaWZ5X2xvY2F0aW9ucygpfSBtZXRob2QuClxlbmR7bWV0aG9kZGVzY30KClxiZWdpbnttZXRob2RkZXNjfVtDb250ZXh0XXtnZXRfdGltZW91dH17fQpSZXRyaWV2ZSBzZXNzaW9uIHRpbWVvdXQsIGFzIHNldCBieSBcbWV0aG9ke3NldF90aW1lb3V0fS4gVGhlIGRlZmF1bHQgaXMgMzAwCnNlY29uZHMuClxlbmR7bWV0aG9kZGVzY30KClxiZWdpbnttZXRob2RkZXNjfVtDb250ZXh0XXtnZXRfdmVyaWZ5X2RlcHRofXt9ClJldHJpZXZlIHRoZSBDb250ZXh0IG9iamVjdCdzIHZlcmlmeSBkZXB0aCwgYXMgc2V0IGJ5ClxtZXRob2R7c2V0X3ZlcmlmeV9kZXB0aH0uClxlbmR7bWV0aG9kZGVzY30KClxiZWdpbnttZXRob2RkZXNjfVtDb250ZXh0XXtnZXRfdmVyaWZ5X21vZGV9e30KUmV0cmlldmUgdGhlIENvbnRleHQgb2JqZWN0J3MgdmVyaWZ5IG1vZGUsIGFzIHNldCBieSBcbWV0aG9ke3NldF92ZXJpZnl9LgpcZW5ke21ldGhvZGRlc2N9CgpcYmVnaW57bWV0aG9kZGVzY31bQ29udGV4dF17bG9hZF9jbGllbnRfY2F9e3BlbWZpbGV9ClJlYWQgYSBmaWxlIHdpdGggUEVNLWZvcm1hdHRlZCBjZXJ0aWZpY2F0ZXMgdGhhdCB3aWxsIGJlIHNlbnQgdG8gdGhlIGNsaWVudAp3aGVuIHJlcXVlc3RpbmcgYSBjbGllbnQgY2VydGlmaWNhdGUuClxlbmR7bWV0aG9kZGVzY30KClxiZWdpbnttZXRob2RkZXNjfVtDb250ZXh0XXtsb2FkX3ZlcmlmeV9sb2NhdGlvbnN9e3BlbWZpbGUsIGNhcGF0aH0KU3BlY2lmeSB3aGVyZSBDQSBjZXJ0aWZpY2F0ZXMgZm9yIHZlcmlmaWNhdGlvbiBwdXJwb3NlcyBhcmUgbG9jYXRlZC4gVGhlc2UKYXJlIHRydXN0ZWQgY2VydGlmaWNhdGVzLiBOb3RlIHRoYXQgdGhlIGNlcnRpZmljYXRlcyBoYXZlIHRvIGJlIGluIFBFTQpmb3JtYXQuICBJZiBjYXBhdGggaXMgcGFzc2VkLCBpdCBtdXN0IGJlIGEgZGlyZWN0b3J5IHByZXBhcmVkIHVzaW5nIHRoZQpcY29kZXtjX3JlaGFzaH0gdG9vbCBpbmNsdWRlZCB3aXRoIE9wZW5TU0wuICBFaXRoZXIsIGJ1dCBub3QgYm90aCwgb2YKXHZhcntwZW1maWxlfSBvciBcdmFye2NhcGF0aH0gbWF5IGJlIFxjb2Rle05vbmV9LgpcZW5ke21ldGhvZGRlc2N9CgpcYmVnaW57bWV0aG9kZGVzY31bQ29udGV4dF17c2V0X2RlZmF1bHRfdmVyaWZ5X3BhdGhzfXt9ClNwZWNpZnkgdGhhdCB0aGUgcGxhdGZvcm0gcHJvdmlkZWQgQ0EgY2VydGlmaWNhdGVzIGFyZSB0byBiZSB1c2VkIGZvcgp2ZXJpZmljYXRpb24gcHVycG9zZXMuICBUaGlzIG1ldGhvZCBtYXkgbm90IHdvcmsgcHJvcGVybHkgb24gT1MgWC4KXGVuZHttZXRob2RkZXNjfQoKXGJlZ2lue21ldGhvZGRlc2N9W0NvbnRleHRde2xvYWRfdG1wX2RofXtkaGZpbGV9CkxvYWQgcGFyYW1ldGVycyBmb3IgRXBoZW1lcmFsIERpZmZpZS1IZWxsbWFuIGZyb20gXHZhcntkaGZpbGV9LgpcZW5ke21ldGhvZGRlc2N9CgpcYmVnaW57bWV0aG9kZGVzY31bQ29udGV4dF17c2V0X2FwcF9kYXRhfXtkYXRhfQpBc3NvY2lhdGUgXHZhcntkYXRhfSB3aXRoIHRoaXMgQ29udGV4dCBvYmplY3QuIFx2YXJ7ZGF0YX0gY2FuIGJlIHJldHJpZXZlZApsYXRlciB1c2luZyB0aGUgXG1ldGhvZHtnZXRfYXBwX2RhdGF9IG1ldGhvZC4KXGVuZHttZXRob2RkZXNjfQoKXGJlZ2lue21ldGhvZGRlc2N9W0NvbnRleHRde3NldF9jaXBoZXJfbGlzdH17Y2lwaGVyc30KU2V0IHRoZSBsaXN0IG9mIGNpcGhlcnMgdG8gYmUgdXNlZCBpbiB0aGlzIGNvbnRleHQuIFNlZSB0aGUgT3BlblNTTCBtYW51YWwgZm9yCm1vcmUgaW5mb3JtYXRpb24gKGUuZy4gY2lwaGVycygxKSkKXGVuZHttZXRob2RkZXNjfQoKXGJlZ2lue21ldGhvZGRlc2N9W0NvbnRleHRde3NldF9pbmZvX2NhbGxiYWNrfXtjYWxsYmFja30KU2V0IHRoZSBpbmZvcm1hdGlvbiBjYWxsYmFjayB0byBcdmFye2NhbGxiYWNrfS4gVGhpcyBmdW5jdGlvbiB3aWxsIGJlIGNhbGxlZApmcm9tIHRpbWUgdG8gdGltZSBkdXJpbmcgU1NMIGhhbmRzaGFrZXMuClx2YXJ7Y2FsbGJhY2t9IHNob3VsZCB0YWtlIHRocmVlIGFyZ3VtZW50czogYSBDb25uZWN0aW9uIG9iamVjdCBhbmQgdHdvCmludGVnZXJzLiBUaGUgZmlyc3QgaW50ZWdlciBzcGVjaWZpZXMgd2hlcmUgaW4gdGhlIFNTTCBoYW5kc2hha2UgdGhlIGZ1bmN0aW9uCndhcyBjYWxsZWQsIGFuZCB0aGUgb3RoZXIgdGhlIHJldHVybiBjb2RlIGZyb20gYSAocG9zc2libHkgZmFpbGVkKSBpbnRlcm5hbApmdW5jdGlvbiBjYWxsLgpcZW5ke21ldGhvZGRlc2N9CgpcYmVnaW57bWV0aG9kZGVzY31bQ29udGV4dF17c2V0X29wdGlvbnN9e29wdGlvbnN9CkFkZCBTU0wgb3B0aW9ucy4gT3B0aW9ucyB5b3UgaGF2ZSBzZXQgYmVmb3JlIGFyZSBub3QgY2xlYXJlZCEKVGhpcyBtZXRob2Qgc2hvdWxkIGJlIHVzZWQgd2l0aCB0aGUgXGNvbnN0YW50e09QXyp9IGNvbnN0YW50cy4KXGVuZHttZXRob2RkZXNjfQoKXGJlZ2lue21ldGhvZGRlc2N9W0NvbnRleHRde3NldF9wYXNzd2RfY2J9e2NhbGxiYWNrXG9wdGlvbmFseywgdXNlcmRhdGF9fQpTZXQgdGhlIHBhc3NwaHJhc2UgY2FsbGJhY2sgdG8gXHZhcntjYWxsYmFja30uIFRoaXMgZnVuY3Rpb24gd2lsbCBiZSBjYWxsZWQKd2hlbiBhIHByaXZhdGUga2V5IHdpdGggYSBwYXNzcGhyYXNlIGlzIGxvYWRlZC4gXHZhcntjYWxsYmFja30gbXVzdCBhY2NlcHQKdGhyZWUgcG9zaXRpb25hbCBhcmd1bWVudHMuICBGaXJzdCwgYW4gaW50ZWdlciBnaXZpbmcgdGhlIG1heGltdW0gbGVuZ3RoIG9mCnRoZSBwYXNzcGhyYXNlIGl0IG1heSByZXR1cm4uICBJZiB0aGUgcmV0dXJuZWQgcGFzc3BocmFzZSBpcyBsb25nZXIgdGhhbgp0aGlzLCBpdCB3aWxsIGJlIHRydW5jYXRlZC4gIFNlY29uZCwgYSBib29sZWFuIHZhbHVlIHdoaWNoIHdpbGwgYmUgdHJ1ZSBpZgp0aGUgdXNlciBzaG91bGQgYmUgcHJvbXB0ZWQgZm9yIHRoZSBwYXNzcGhyYXNlIHR3aWNlIGFuZCB0aGUgY2FsbGJhY2sgc2hvdWxkCnZlcmlmeSB0aGF0IHRoZSB0d28gdmFsdWVzIHN1cHBsaWVkIGFyZSBlcXVhbC4gVGhpcmQsIHRoZSB2YWx1ZSBnaXZlbiBhcyB0aGUKXHZhcnt1c2VyZGF0YX0gcGFyYW1ldGVyIHRvIFxtZXRob2R7c2V0X3Bhc3N3ZF9jYn0uICBJZiBhbiBlcnJvciBvY2N1cnMsClx2YXJ7Y2FsbGJhY2t9IHNob3VsZCByZXR1cm4gYSBmYWxzZSB2YWx1ZSAoZS5nLiBhbiBlbXB0eSBzdHJpbmcpLgpcZW5ke21ldGhvZGRlc2N9CgpcYmVnaW57bWV0aG9kZGVzY31bQ29udGV4dF17c2V0X3Nlc3Npb25faWR9e25hbWV9ClNldCB0aGUgY29udGV4dCBcdmFye25hbWV9IHdpdGhpbiB3aGljaCBhIHNlc3Npb24gY2FuIGJlIHJldXNlZCBmb3IgdGhpcwpDb250ZXh0IG9iamVjdC4gVGhpcyBpcyBuZWVkZWQgd2hlbiBkb2luZyBzZXNzaW9uIHJlc3VtcHRpb24sIGJlY2F1c2UgdGhlcmUgaXMKbm8gd2F5IGZvciBhIHN0b3JlZCBzZXNzaW9uIHRvIGtub3cgd2hpY2ggQ29udGV4dCBvYmplY3QgaXQgaXMgYXNzb2NpYXRlZCB3aXRoLgpcdmFye25hbWV9IG1heSBiZSBhbnkgYmluYXJ5IGRhdGEuClxlbmR7bWV0aG9kZGVzY30KClxiZWdpbnttZXRob2RkZXNjfVtDb250ZXh0XXtzZXRfdGltZW91dH17dGltZW91dH0KU2V0IHRoZSB0aW1lb3V0IGZvciBuZXdseSBjcmVhdGVkIHNlc3Npb25zIGZvciB0aGlzIENvbnRleHQgb2JqZWN0IHRvClx2YXJ7dGltZW91dH0uIFx2YXJ7dGltZW91dH0gbXVzdCBiZSBnaXZlbiBpbiAod2hvbGUpIHNlY29uZHMuIFRoZSBkZWZhdWx0CnZhbHVlIGlzIDMwMCBzZWNvbmRzLiBTZWUgdGhlIE9wZW5TU0wgbWFudWFsIGZvciBtb3JlIGluZm9ybWF0aW9uIChlLmcuClNTTF9DVFhfc2V0X3RpbWVvdXQoMykpLgpcZW5ke21ldGhvZGRlc2N9CgpcYmVnaW57bWV0aG9kZGVzY31bQ29udGV4dF17c2V0X3ZlcmlmeX17bW9kZSwgY2FsbGJhY2t9ClNldCB0aGUgdmVyaWZpY2F0aW9uIGZsYWdzIGZvciB0aGlzIENvbnRleHQgb2JqZWN0IHRvIFx2YXJ7bW9kZX0gYW5kIHNwZWNpZnkKdGhhdCBcdmFye2NhbGxiYWNrfSBzaG91bGQgYmUgdXNlZCBmb3IgdmVyaWZpY2F0aW9uIGNhbGxiYWNrcy4gXHZhcnttb2RlfQpzaG91bGQgYmUgb25lIG9mIFxjb25zdGFudHtWRVJJRllfTk9ORX0gYW5kIFxjb25zdGFudHtWRVJJRllfUEVFUn0uIElmClxjb25zdGFudHtWRVJJRllfUEVFUn0gaXMgdXNlZCwgXHZhcnttb2RlfSBjYW4gYmUgT1I6ZWQgd2l0aApcY29uc3RhbnR7VkVSSUZZX0ZBSUxfSUZfTk9fUEVFUl9DRVJUfSBhbmQgXGNvbnN0YW50e1ZFUklGWV9DTElFTlRfT05DRX0gdG8KZnVydGhlciBjb250cm9sIHRoZSBiZWhhdmlvdXIuClx2YXJ7Y2FsbGJhY2t9IHNob3VsZCB0YWtlIGZpdmUgYXJndW1lbnRzOiBBIENvbm5lY3Rpb24gb2JqZWN0LCBhbiBYNTA5IG9iamVjdCwKYW5kIHRocmVlIGludGVnZXIgdmFyaWFibGVzLCB3aGljaCBhcmUgaW4gdHVybiBwb3RlbnRpYWwgZXJyb3IgbnVtYmVyLCBlcnJvcgpkZXB0aCBhbmQgcmV0dXJuIGNvZGUuIFx2YXJ7Y2FsbGJhY2t9IHNob3VsZCByZXR1cm4gdHJ1ZSBpZiB2ZXJpZmljYXRpb24gcGFzc2VzCmFuZCBmYWxzZSBvdGhlcndpc2UuClxlbmR7bWV0aG9kZGVzY30KClxiZWdpbnttZXRob2RkZXNjfVtDb250ZXh0XXtzZXRfdmVyaWZ5X2RlcHRofXtkZXB0aH0KU2V0IHRoZSBtYXhpbXVtIGRlcHRoIGZvciB0aGUgY2VydGlmaWNhdGUgY2hhaW4gdmVyaWZpY2F0aW9uIHRoYXQgc2hhbGwgYmUKYWxsb3dlZCBmb3IgdGhpcyBDb250ZXh0IG9iamVjdC4KXGVuZHttZXRob2RkZXNjfQoKXGJlZ2lue21ldGhvZGRlc2N9W0NvbnRleHRde3VzZV9jZXJ0aWZpY2F0ZX17Y2VydH0KVXNlIHRoZSBjZXJ0aWZpY2F0ZSBcdmFye2NlcnR9IHdoaWNoIGhhcyB0byBiZSBhIFg1MDkgb2JqZWN0LgpcZW5ke21ldGhvZGRlc2N9CgpcYmVnaW57bWV0aG9kZGVzY31bQ29udGV4dF17YWRkX2V4dHJhX2NoYWluX2NlcnR9e2NlcnR9CkFkZHMgdGhlIGNlcnRpZmljYXRlIFx2YXJ7Y2VydH0sIHdoaWNoIGhhcyB0byBiZSBhIFg1MDkgb2JqZWN0LCB0byB0aGUKY2VydGlmaWNhdGUgY2hhaW4gcHJlc2VudGVkIHRvZ2V0aGVyIHdpdGggdGhlIGNlcnRpZmljYXRlLgpcZW5ke21ldGhvZGRlc2N9CgpcYmVnaW57bWV0aG9kZGVzY31bQ29udGV4dF17dXNlX2NlcnRpZmljYXRlX2NoYWluX2ZpbGV9e2ZpbGV9CkxvYWQgYSBjZXJ0aWZpY2F0ZSBjaGFpbiBmcm9tIFx2YXJ7ZmlsZX0gd2hpY2ggbXVzdCBiZSBQRU0gZW5jb2RlZC4KXGVuZHttZXRob2RkZXNjfQoKXGJlZ2lue21ldGhvZGRlc2N9W0NvbnRleHRde3VzZV9wcml2YXRla2V5fXtwa2V5fQpVc2UgdGhlIHByaXZhdGUga2V5IFx2YXJ7cGtleX0gd2hpY2ggaGFzIHRvIGJlIGEgUEtleSBvYmplY3QuClxlbmR7bWV0aG9kZGVzY30KClxiZWdpbnttZXRob2RkZXNjfVtDb250ZXh0XXt1c2VfY2VydGlmaWNhdGVfZmlsZX17ZmlsZVxvcHRpb25hbHssIGZvcm1hdH19CkxvYWQgdGhlIGZpcnN0IGNlcnRpZmljYXRlIGZvdW5kIGluIFx2YXJ7ZmlsZX0uIFRoZSBjZXJ0aWZpY2F0ZSBtdXN0IGJlIGluIHRoZQpmb3JtYXQgc3BlY2lmaWVkIGJ5IFx2YXJ7Zm9ybWF0fSwgd2hpY2ggaXMgZWl0aGVyIFxjb25zdGFudHtGSUxFVFlQRV9QRU19IG9yClxjb25zdGFudHtGSUxFVFlQRV9BU04xfS4gVGhlIGRlZmF1bHQgaXMgXGNvbnN0YW50e0ZJTEVUWVBFX1BFTX0uClxlbmR7bWV0aG9kZGVzY30KClxiZWdpbnttZXRob2RkZXNjfVtDb250ZXh0XXt1c2VfcHJpdmF0ZWtleV9maWxlfXtmaWxlXG9wdGlvbmFseywgZm9ybWF0fX0KTG9hZCB0aGUgZmlyc3QgcHJpdmF0ZSBrZXkgZm91bmQgaW4gXHZhcntmaWxlfS4gVGhlIHByaXZhdGUga2V5IG11c3QgYmUgaW4gdGhlCmZvcm1hdCBzcGVjaWZpZWQgYnkgXHZhcntmb3JtYXR9LCB3aGljaCBpcyBlaXRoZXIgXGNvbnN0YW50e0ZJTEVUWVBFX1BFTX0gb3IKXGNvbnN0YW50e0ZJTEVUWVBFX0FTTjF9LiBUaGUgZGVmYXVsdCBpcyBcY29uc3RhbnR7RklMRVRZUEVfUEVNfS4KXGVuZHttZXRob2RkZXNjfQoKClxzdWJzdWJzZWN0aW9ue0Nvbm5lY3Rpb24gb2JqZWN0cyBcbGFiZWx7b3BlbnNzbC1jb25uZWN0aW9ufX0KCkNvbm5lY3Rpb24gb2JqZWN0cyBoYXZlIHRoZSBmb2xsb3dpbmcgbWV0aG9kczoKClxiZWdpbnttZXRob2RkZXNjfVtDb25uZWN0aW9uXXthY2NlcHR9e30KQ2FsbCB0aGUgXG1ldGhvZHthY2NlcHR9IG1ldGhvZCBvZiB0aGUgdW5kZXJseWluZyBzb2NrZXQgYW5kIHNldCB1cCBTU0wgb24gdGhlCnJldHVybmVkIHNvY2tldCwgdXNpbmcgdGhlIENvbnRleHQgb2JqZWN0IHN1cHBsaWVkIHRvIHRoaXMgQ29ubmVjdGlvbiBvYmplY3QgYXQKY3JlYXRpb24uIFJldHVybnMgYSBwYWlyIFxjb2RleyhcdmFye2Nvbm59LCBcdmFye2FkZHJlc3N9KX0uIHdoZXJlIFx2YXJ7Y29ubn0KaXMgdGhlIG5ldyBDb25uZWN0aW9uIG9iamVjdCBjcmVhdGVkLCBhbmQgXHZhcnthZGRyZXNzfSBpcyBhcyByZXR1cm5lZCBieSB0aGUKc29ja2V0J3MgXG1ldGhvZHthY2NlcHR9LgpcZW5ke21ldGhvZGRlc2N9CgpcYmVnaW57bWV0aG9kZGVzY31bQ29ubmVjdGlvbl17YmluZH17YWRkcmVzc30KQ2FsbCB0aGUgXG1ldGhvZHtiaW5kfSBtZXRob2Qgb2YgdGhlIHVuZGVybHlpbmcgc29ja2V0LgpcZW5ke21ldGhvZGRlc2N9CgpcYmVnaW57bWV0aG9kZGVzY31bQ29ubmVjdGlvbl17Y2xvc2V9e30KQ2FsbCB0aGUgXG1ldGhvZHtjbG9zZX0gbWV0aG9kIG9mIHRoZSB1bmRlcmx5aW5nIHNvY2tldC4gTm90ZTogSWYgeW91IHdhbnQKY29ycmVjdCBTU0wgY2xvc3VyZSwgeW91IG5lZWQgdG8gY2FsbCB0aGUgXG1ldGhvZHtzaHV0ZG93bn0gbWV0aG9kIGZpcnN0LgpcZW5ke21ldGhvZGRlc2N9CgpcYmVnaW57bWV0aG9kZGVzY31bQ29ubmVjdGlvbl17Y29ubmVjdH17YWRkcmVzc30KQ2FsbCB0aGUgXG1ldGhvZHtjb25uZWN0fSBtZXRob2Qgb2YgdGhlIHVuZGVybHlpbmcgc29ja2V0IGFuZCBzZXQgdXAgU1NMIG9uIHRoZQpzb2NrZXQsIHVzaW5nIHRoZSBDb250ZXh0IG9iamVjdCBzdXBwbGllZCB0byB0aGlzIENvbm5lY3Rpb24gb2JqZWN0IGF0CmNyZWF0aW9uLgpcZW5ke21ldGhvZGRlc2N9CgpcYmVnaW57bWV0aG9kZGVzY31bQ29ubmVjdGlvbl17Y29ubmVjdF9leH17YWRkcmVzc30KQ2FsbCB0aGUgXG1ldGhvZHtjb25uZWN0X2V4fSBtZXRob2Qgb2YgdGhlIHVuZGVybHlpbmcgc29ja2V0IGFuZCBzZXQgdXAgU1NMIG9uCnRoZSBzb2NrZXQsIHVzaW5nIHRoZSBDb250ZXh0IG9iamVjdCBzdXBwbGllZCB0byB0aGlzIENvbm5lY3Rpb24gb2JqZWN0IGF0CmNyZWF0aW9uLiBOb3RlIHRoYXQgaWYgdGhlIFxtZXRob2R7Y29ubmVjdF9leH0gbWV0aG9kIG9mIHRoZSBzb2NrZXQgZG9lc24ndApyZXR1cm4gMCwgU1NMIHdvbid0IGJlIGluaXRpYWxpemVkLgpcZW5ke21ldGhvZGRlc2N9CgpcYmVnaW57bWV0aG9kZGVzY31bQ29ubmVjdGlvbl17ZG9faGFuZHNoYWtlfXt9ClBlcmZvcm0gYW4gU1NMIGhhbmRzaGFrZSAodXN1YWxseSBjYWxsZWQgYWZ0ZXIgXG1ldGhvZHtyZW5lZ290aWF0ZX0gb3Igb25lIG9mClxtZXRob2R7c2V0X2FjY2VwdF9zdGF0ZX0gb3IgXG1ldGhvZHtzZXRfYWNjZXB0X3N0YXRlfSkuIFRoaXMgY2FuIHJhaXNlIHRoZQpzYW1lIGV4Y2VwdGlvbnMgYXMgXG1ldGhvZHtzZW5kfSBhbmQgXG1ldGhvZHtyZWN2fS4KXGVuZHttZXRob2RkZXNjfQoKXGJlZ2lue21ldGhvZGRlc2N9W0Nvbm5lY3Rpb25de2ZpbGVub317fQpSZXRyaWV2ZSB0aGUgZmlsZSBkZXNjcmlwdG9yIG51bWJlciBmb3IgdGhlIHVuZGVybHlpbmcgc29ja2V0LgpcZW5ke21ldGhvZGRlc2N9CgpcYmVnaW57bWV0aG9kZGVzY31bQ29ubmVjdGlvbl17bGlzdGVufXtiYWNrbG9nfQpDYWxsIHRoZSBcbWV0aG9ke2xpc3Rlbn0gbWV0aG9kIG9mIHRoZSB1bmRlcmx5aW5nIHNvY2tldC4KXGVuZHttZXRob2RkZXNjfQoKXGJlZ2lue21ldGhvZGRlc2N9W0Nvbm5lY3Rpb25de2dldF9hcHBfZGF0YX17fQpSZXRyaWV2ZSBhcHBsaWNhdGlvbiBkYXRhIGFzIHNldCBieSBcbWV0aG9ke3NldF9hcHBfZGF0YX0uClxlbmR7bWV0aG9kZGVzY30KClxiZWdpbnttZXRob2RkZXNjfVtDb25uZWN0aW9uXXtnZXRfY2lwaGVyX2xpc3R9e30KUmV0cmlldmUgdGhlIGxpc3Qgb2YgY2lwaGVycyB1c2VkIGJ5IHRoZSBDb25uZWN0aW9uIG9iamVjdC4gV0FSTklORzogVGhpcyBBUEkKaGFzIGNoYW5nZWQuIEl0IHVzZWQgdG8gdGFrZSBhbiBvcHRpb25hbCBwYXJhbWV0ZXIgYW5kIGp1c3QgcmV0dXJuIGEgc3RyaW5nLApidXQgbm90IGl0IHJldHVybnMgdGhlIGVudGlyZSBsaXN0IGluIG9uZSBnby4KXGVuZHttZXRob2RkZXNjfQoKXGJlZ2lue21ldGhvZGRlc2N9W0Nvbm5lY3Rpb25de2dldF9jb250ZXh0fXt9ClJldHJpZXZlIHRoZSBDb250ZXh0IG9iamVjdCBhc3NvY2lhdGVkIHdpdGggdGhpcyBDb25uZWN0aW9uLgpcZW5ke21ldGhvZGRlc2N9CgpcYmVnaW57bWV0aG9kZGVzY31bQ29ubmVjdGlvbl17Z2V0X3BlZXJfY2VydGlmaWNhdGV9e30KUmV0cmlldmUgdGhlIG90aGVyIHNpZGUncyBjZXJ0aWZpY2F0ZSAoaWYgYW55KQpcZW5ke21ldGhvZGRlc2N9CgpcYmVnaW57bWV0aG9kZGVzY31bQ29ubmVjdGlvbl17Z2V0cGVlcm5hbWV9e30KQ2FsbCB0aGUgXG1ldGhvZHtnZXRwZWVybmFtZX0gbWV0aG9kIG9mIHRoZSB1bmRlcmx5aW5nIHNvY2tldC4KXGVuZHttZXRob2RkZXNjfQoKXGJlZ2lue21ldGhvZGRlc2N9W0Nvbm5lY3Rpb25de2dldHNvY2tuYW1lfXt9CkNhbGwgdGhlIFxtZXRob2R7Z2V0c29ja25hbWV9IG1ldGhvZCBvZiB0aGUgdW5kZXJseWluZyBzb2NrZXQuClxlbmR7bWV0aG9kZGVzY30KClxiZWdpbnttZXRob2RkZXNjfVtDb25uZWN0aW9uXXtnZXRzb2Nrb3B0fXtsZXZlbCwgb3B0bmFtZVxvcHRpb25hbHssIGJ1Zmxlbn19CkNhbGwgdGhlIFxtZXRob2R7Z2V0c29ja29wdH0gbWV0aG9kIG9mIHRoZSB1bmRlcmx5aW5nIHNvY2tldC4KXGVuZHttZXRob2RkZXNjfQoKXGJlZ2lue21ldGhvZGRlc2N9W0Nvbm5lY3Rpb25de3BlbmRpbmd9e30KUmV0cmlldmUgdGhlIG51bWJlciBvZiBieXRlcyB0aGF0IGNhbiBiZSBzYWZlbHkgcmVhZCBmcm9tIHRoZSBTU0wgYnVmZmVyCihcZW1waHtub3R9IHRoZSB1bmRlcmx5aW5nIHRyYW5zcG9ydCBidWZmZXIpLgpcZW5ke21ldGhvZGRlc2N9CgpcYmVnaW57bWV0aG9kZGVzY31bQ29ubmVjdGlvbl17cmVjdn17YnVmc2l6ZX0KUmVjZWl2ZSBkYXRhIGZyb20gdGhlIENvbm5lY3Rpb24uIFRoZSByZXR1cm4gdmFsdWUgaXMgYSBzdHJpbmcgcmVwcmVzZW50aW5nIHRoZQpkYXRhIHJlY2VpdmVkLiBUaGUgbWF4aW11bSBhbW91bnQgb2YgZGF0YSB0byBiZSByZWNlaXZlZCBhdCBvbmNlLCBpcyBzcGVjaWZpZWQKYnkgXHZhcntidWZzaXplfS4KXGVuZHttZXRob2RkZXNjfQoKXGJlZ2lue21ldGhvZGRlc2N9W0Nvbm5lY3Rpb25de2Jpb193cml0ZX17Ynl0ZXN9CklmIHRoZSBDb25uZWN0aW9uIHdhcyBjcmVhdGVkIHdpdGggYSBtZW1vcnkgQklPLCB0aGlzIG1ldGhvZCBjYW4gYmUgdXNlZCB0byBhZGQKYnl0ZXMgdG8gdGhlIHJlYWQgZW5kIG9mIHRoYXQgbWVtb3J5IEJJTy4gIFRoZSBDb25uZWN0aW9uIGNhbiB0aGVuIHJlYWQgdGhlCmJ5dGVzIChmb3IgZXhhbXBsZSwgaW4gcmVzcG9uc2UgdG8gYSBjYWxsIHRvIFxtZXRob2R7cmVjdn0pLgpcZW5ke21ldGhvZGRlc2N9CgpcYmVnaW57bWV0aG9kZGVzY31bQ29ubmVjdGlvbl17cmVuZWdvdGlhdGV9e30KUmVuZWdvdGlhdGUgdGhlIFNTTCBzZXNzaW9uLiBDYWxsIHRoaXMgaWYgeW91IHdpc2ggdG8gY2hhbmdlIGNpcGhlciBzdWl0ZXMgb3IKYW55dGhpbmcgbGlrZSB0aGF0LgpcZW5ke21ldGhvZGRlc2N9CgpcYmVnaW57bWV0aG9kZGVzY31bQ29ubmVjdGlvbl17c2VuZH17c3RyaW5nfQpTZW5kIHRoZSBcdmFye3N0cmluZ30gZGF0YSB0byB0aGUgQ29ubmVjdGlvbi4KXGVuZHttZXRob2RkZXNjfQoKXGJlZ2lue21ldGhvZGRlc2N9W0Nvbm5lY3Rpb25de2Jpb19yZWFkfXtidWZzaXplfQpJZiB0aGUgQ29ubmVjdGlvbiB3YXMgY3JlYXRlZCB3aXRoIGEgbWVtb3J5IEJJTywgdGhpcyBtZXRob2QgY2FuIGJlIHVzZWQgdG8KcmVhZCBieXRlcyBmcm9tIHRoZSB3cml0ZSBlbmQgb2YgdGhhdCBtZW1vcnkgQklPLiAgTWFueSBDb25uZWN0aW9uIG1ldGhvZHMgd2lsbAphZGQgYnl0ZXMgd2hpY2ggbXVzdCBiZSByZWFkIGluIHRoaXMgbWFubmVyIG9yIHRoZSBidWZmZXIgd2lsbCBldmVudHVhbGx5IGZpbGwKdXAgYW5kIHRoZSBDb25uZWN0aW9uIHdpbGwgYmUgYWJsZSB0byB0YWtlIG5vIGZ1cnRoZXIgYWN0aW9ucy4KXGVuZHttZXRob2RkZXNjfQoKXGJlZ2lue21ldGhvZGRlc2N9W0Nvbm5lY3Rpb25de3NlbmRhbGx9e3N0cmluZ30KU2VuZCBhbGwgb2YgdGhlIFx2YXJ7c3RyaW5nfSBkYXRhIHRvIHRoZSBDb25uZWN0aW9uLiBUaGlzIGNhbGxzIFxtZXRob2R7c2VuZH0KcmVwZWF0ZWRseSB1bnRpbCBhbGwgZGF0YSBpcyBzZW50LiBJZiBhbiBlcnJvciBvY2N1cnMsIGl0J3MgaW1wb3NzaWJsZSB0byB0ZWxsCmhvdyBtdWNoIGRhdGEgaGFzIGJlZW4gc2VudC4KXGVuZHttZXRob2RkZXNjfQoKXGJlZ2lue21ldGhvZGRlc2N9W0Nvbm5lY3Rpb25de3NldF9hY2NlcHRfc3RhdGV9e30KU2V0IHRoZSBjb25uZWN0aW9uIHRvIHdvcmsgaW4gc2VydmVyIG1vZGUuIFRoZSBoYW5kc2hha2Ugd2lsbCBiZSBoYW5kbGVkCmF1dG9tYXRpY2FsbHkgYnkgcmVhZC93cml0ZS4KXGVuZHttZXRob2RkZXNjfQoKXGJlZ2lue21ldGhvZGRlc2N9W0Nvbm5lY3Rpb25de3NldF9hcHBfZGF0YX17ZGF0YX0KQXNzb2NpYXRlIFx2YXJ7ZGF0YX0gd2l0aCB0aGlzIENvbm5lY3Rpb24gb2JqZWN0LiBcdmFye2RhdGF9IGNhbiBiZSByZXRyaWV2ZWQKbGF0ZXIgdXNpbmcgdGhlIFxtZXRob2R7Z2V0X2FwcF9kYXRhfSBtZXRob2QuClxlbmR7bWV0aG9kZGVzY30KClxiZWdpbnttZXRob2RkZXNjfVtDb25uZWN0aW9uXXtzZXRfY29ubmVjdF9zdGF0ZX17fQpTZXQgdGhlIGNvbm5lY3Rpb24gdG8gd29yayBpbiBjbGllbnQgbW9kZS4gVGhlIGhhbmRzaGFrZSB3aWxsIGJlIGhhbmRsZWQKYXV0b21hdGljYWxseSBieSByZWFkL3dyaXRlLgpcZW5ke21ldGhvZGRlc2N9CgpcYmVnaW57bWV0aG9kZGVzY31bQ29ubmVjdGlvbl17c2V0YmxvY2tpbmd9e2ZsYWd9CkNhbGwgdGhlIFxtZXRob2R7c2V0YmxvY2tpbmd9IG1ldGhvZCBvZiB0aGUgdW5kZXJseWluZyBzb2NrZXQuClxlbmR7bWV0aG9kZGVzY30KClxiZWdpbnttZXRob2RkZXNjfVtDb25uZWN0aW9uXXtzZXRzb2Nrb3B0fXtsZXZlbCwgb3B0bmFtZSwgdmFsdWV9CkNhbGwgdGhlIFxtZXRob2R7c2V0c29ja29wdH0gbWV0aG9kIG9mIHRoZSB1bmRlcmx5aW5nIHNvY2tldC4KXGVuZHttZXRob2RkZXNjfQoKXGJlZ2lue21ldGhvZGRlc2N9W0Nvbm5lY3Rpb25de3NodXRkb3dufXt9ClNlbmQgdGhlIHNodXRkb3duIG1lc3NhZ2UgdG8gdGhlIENvbm5lY3Rpb24uIFJldHVybnMgdHJ1ZSBpZiB0aGUgc2h1dGRvd24KbWVzc2FnZSBleGNoYW5nZSBpcyBjb21wbGV0ZWQgYW5kIGZhbHNlIG90aGVyd2lzZSAoaW4gd2hpY2ggY2FzZSB5b3UgY2FsbApcbWV0aG9ke3JlY3YoKX0gb3IgXG1ldGhvZHtzZW5kKCl9IHdoZW4gdGhlIGNvbm5lY3Rpb24gYmVjb21lcwpyZWFkYWJsZS93cml0ZWFibGUuClxlbmR7bWV0aG9kZGVzY30KClxiZWdpbnttZXRob2RkZXNjfVtDb25uZWN0aW9uXXtnZXRfc2h1dGRvd259e30KR2V0IHRoZSBzaHV0ZG93biBzdGF0ZSBvZiB0aGUgQ29ubmVjdGlvbi4gIFJldHVybnMgYSBiaXR2ZWN0b3Igb2YgZWl0aGVyIG9yCmJvdGggb2YgXHZhcntTRU5UX1NIVVRET1dOfSBhbmQgXHZhcntSRUNFSVZFRF9TSFVURE9XTn0uClxlbmR7bWV0aG9kZGVzY30KClxiZWdpbnttZXRob2RkZXNjfVtDb25uZWN0aW9uXXtzZXRfc2h1dGRvd259e3N0YXRlfQpTZXQgdGhlIHNodXRkb3duIHN0YXRlIG9mIHRoZSBDb25uZWN0aW9uLiAgXHZhcntzdGF0ZX0gaXMgYSBiaXR2ZWN0b3Igb2YKZWl0aGVyIG9yIGJvdGggb2YgXHZhcntTRU5UX1NIVVRET1dOfSBhbmQgXHZhcntSRUNFSVZFRF9TSFVURE9XTn0uClxlbmR7bWV0aG9kZGVzY30KClxiZWdpbnttZXRob2RkZXNjfVtDb25uZWN0aW9uXXtzb2NrX3NodXRkb3dufXtob3d9CkNhbGwgdGhlIFxtZXRob2R7c2h1dGRvd259IG1ldGhvZCBvZiB0aGUgdW5kZXJseWluZyBzb2NrZXQuClxlbmR7bWV0aG9kZGVzY30KClxiZWdpbnttZXRob2RkZXNjfVtDb25uZWN0aW9uXXtiaW9fc2h1dGRvd259e30KSWYgdGhlIENvbm5lY3Rpb24gd2FzIGNyZWF0ZWQgd2l0aCBhIG1lbW9yeSBCSU8sIHRoaXMgbWV0aG9kIGNhbiBiZSB1c2VkIHRvCmluZGljYXRlIHRoYXQgYGBlbmQgb2YgZmlsZScnIGhhcyBiZWVuIHJlYWNoZWQgb24gdGhlIHJlYWQgZW5kIG9mIHRoYXQgbWVtb3J5CkJJTy4KXGVuZHttZXRob2RkZXNjfQoKXGJlZ2lue21ldGhvZGRlc2N9W0Nvbm5lY3Rpb25de3N0YXRlX3N0cmluZ317fQpSZXRyaWV2ZSBhIHZlcmJvc2Ugc3RyaW5nIGRldGFpbGluZyB0aGUgc3RhdGUgb2YgdGhlIENvbm5lY3Rpb24uClxlbmR7bWV0aG9kZGVzY30KClxiZWdpbnttZXRob2RkZXNjfVtDb25uZWN0aW9uXXt3YW50X3JlYWR9e30KQ2hlY2tzIGlmIG1vcmUgZGF0YSBoYXMgdG8gYmUgcmVhZCBmcm9tIHRoZSB0cmFuc3BvcnQgbGF5ZXIgdG8gY29tcGxldGUgYW4Kb3BlcmF0aW9uLgpcZW5ke21ldGhvZGRlc2N9CgpcYmVnaW57bWV0aG9kZGVzY31bQ29ubmVjdGlvbl17d2FudF93cml0ZX17fQpDaGVja3MgaWYgdGhlcmUgaXMgZGF0YSB0byB3cml0ZSB0byB0aGUgdHJhbnNwb3J0IGxheWVyIHRvIGNvbXBsZXRlIGFuCm9wZXJhdGlvbi4KXGVuZHttZXRob2RkZXNjfQoKCgpcc2VjdGlvbntJbnRlcm5hbHMgXGxhYmVse2ludGVybmFsc319CgpXZSByYW4gaW50byB0aHJlZSBtYWluIHByb2JsZW1zIGRldmVsb3BpbmcgdGhpczogRXhjZXB0aW9ucywgY2FsbGJhY2tzIGFuZAphY2Nlc3Npbmcgc29ja2V0IG1ldGhvZHMuIFRoaXMgaXMgd2hhdCB0aGlzIGNoYXB0ZXIgaXMgYWJvdXQuCgpcc3Vic2VjdGlvbntFeGNlcHRpb25zIFxsYWJlbHtleGNlcHRpb25zfX0KCldlIHJlYWxpemVkIGVhcmx5IHRoYXQgbW9zdCBvZiB0aGUgZXhjZXB0aW9ucyB3b3VsZCBiZSByYWlzZWQgYnkgdGhlIEkvTwpmdW5jdGlvbnMgb2YgT3BlblNTTCwgc28gaXQgZmVsdCBuYXR1cmFsIHRvIG1pbWljIE9wZW5TU0wncyBlcnJvciBjb2RlIHN5c3RlbSwKdHJhbnNsYXRpbmcgdGhlbSBpbnRvIFB5dGhvbiBleGNlcHRpb25zLiBUaGlzIG5hdHVyYWxseSBnaXZlcyB1cyB0aGUgZXhjZXB0aW9ucwpcZXhjZXB0aW9ue1NTTC5aZXJvUmV0dXJuRXJyb3J9LCBcZXhjZXB0aW9ue1NTTC5XYW50UmVhZEVycm9yfSwKXGV4Y2VwdGlvbntTU0wuV2FudFdyaXRlRXJyb3J9LCBcZXhjZXB0aW9ue1NTTC5XYW50WDUwOUxvb2t1cEVycm9yfSBhbmQKXGV4Y2VwdGlvbntTU0wuU3lzQ2FsbEVycm9yfS4KCkZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHRoaXMsIHNlZSBzZWN0aW9uIFxyZWZ7b3BlbnNzbC1zc2x9LgoKClxzdWJzZWN0aW9ue0NhbGxiYWNrcyBcbGFiZWx7Y2FsbGJhY2tzfX0KClRoZXJlIGFyZSBhIG51bWJlciBvZiBwcm9ibGVtcyB3aXRoIGNhbGxiYWNrcy4gRmlyc3Qgb2YgYWxsLCBPcGVuU1NMIGlzIHdyaXR0ZW4KYXMgYSBDIGxpYnJhcnksIGl0J3Mgbm90IG1lYW50IHRvIGhhdmUgUHl0aG9uIGNhbGxiYWNrcywgc28gYSB3YXkgYXJvdW5kIHRoYXQKaXMgbmVlZGVkLiBBbm90aGVyIHByb2JsZW0gaXMgdGhyZWFkIHN1cHBvcnQuIEEgbG90IG9mIHRoZSBPcGVuU1NMIEkvTwpmdW5jdGlvbnMgY2FuIGJsb2NrIGlmIHRoZSBzb2NrZXQgaXMgaW4gYmxvY2tpbmcgbW9kZSwgYW5kIHRoZW4geW91IHdhbnQgb3RoZXIKUHl0aG9uIHRocmVhZHMgdG8gYmUgYWJsZSB0byBkbyBvdGhlciB0aGluZ3MuIFRoZSByZWFsIHRyb3VibGUgaXMgaWYgeW91J3ZlCnJlbGVhc2VkIHRoZSBnbG9iYWwgQ1B5dGhvbiBpbnRlcnByZXRlciBsb2NrIHRvIGRvIGEgcG90ZW50aWFsbHkgYmxvY2tpbmcKb3BlcmF0aW9uLCBhbmQgdGhlIG9wZXJhdGlvbiBjYWxscyBhIGNhbGxiYWNrLiBUaGVuIHdlIG11c3QgdGFrZSB0aGUgR0lMIGJhY2ssCnNpbmNlIGNhbGxpbmcgUHl0aG9uIEFQSXMgd2l0aG91dCBob2xkaW5nIGl0IGlzIG5vdCBhbGxvd2VkLgoKVGhlcmUgYXJlIHR3byBzb2x1dGlvbnMgdG8gdGhlIGZpcnN0IHByb2JsZW0sIGJvdGggb2Ygd2hpY2ggYXJlIG5lY2Vzc2FyeS4gVGhlCmZpcnN0IHNvbHV0aW9uIHRvIHVzZSBpcyBpZiB0aGUgQyBjYWxsYmFjayBhbGxvd3MgJyd1c2VyZGF0YScnIHRvIGJlIHBhc3NlZCB0bwppdCAoYW4gYXJiaXRyYXJ5IHBvaW50ZXIgbm9ybWFsbHkpLiBUaGlzIGlzIGdyZWF0ISBXZSBjYW4gc2V0IG91ciBQeXRob24KZnVuY3Rpb24gb2JqZWN0IGFzIHRoZSByZWFsIHVzZXJkYXRhIGFuZCBlbXVsYXRlIHVzZXJkYXRhIGZvciB0aGUgUHl0aG9uCmZ1bmN0aW9uIGluIGFub3RoZXIgd2F5LiBUaGUgb3RoZXIgc29sdXRpb24gY2FuIGJlIHVzZWQgaWYgYW4gb2JqZWN0IHdpdGggYW4KJydhcHBfZGF0YScnIHN5c3RlbSBhbHdheXMgaXMgcGFzc2VkIHRvIHRoZSBjYWxsYmFjay4gRm9yIGV4YW1wbGUsIHRoZSBTU0wKb2JqZWN0IGluIE9wZW5TU0wgaGFzIGFwcF9kYXRhIGZ1bmN0aW9ucyBhbmQgaW4gZS5nLiB0aGUgdmVyaWZpY2F0aW9uCmNhbGxiYWNrcywgeW91IGNhbiByZXRyaWV2ZSB0aGUgcmVsYXRlZCBTU0wgb2JqZWN0LiBXaGF0IHdlIGRvIGlzIHRvIHNldCBvdXIKd3JhcHBlciBcY2xhc3N7Q29ubmVjdGlvbn0gb2JqZWN0IGFzIGFwcF9kYXRhIGZvciB0aGUgU1NMIG9iamVjdCwgYW5kIHdlIGNhbgplYXNpbHkgZmluZCB0aGUgUHl0aG9uIGNhbGxiYWNrLgoKVGhlIG90aGVyIHByb2JsZW0gaXMgc29sdmVkIHVzaW5nIHRocmVhZCBsb2NhbCB2YXJpYWJsZXMuICBXaGVuZXZlciB0aGUgR0lMIGlzCnJlbGVhc2VkIGJlZm9yZSBjYWxsaW5nIGludG8gYW4gT3BlblNTTCBBUEksIHRoZSBQeVRocmVhZFN0YXRlIHBvaW50ZXIgcmV0dXJuZWQKYnkgXGNmdW5jdGlvbntQeUV2YWxfU2F2ZVN0YXRlfSBpcyBzdG9yZWQgaW4gYSBnbG9iYWwgdGhyZWFkIGxvY2FsIHZhcmlhYmxlCih1c2luZyBQeXRob24ncyBvd24gVExTIEFQSSwgXGNmdW5jdGlvbntQeVRocmVhZF9zZXRfa2V5X3ZhbHVlfSkuICBXaGVuIGl0IGlzCm5lY2Vzc2FyeSB0byByZS1hY3F1aXJlIHRoZSBHSUwsIGVpdGhlciBhZnRlciB0aGUgT3BlblNTTCBBUEkgcmV0dXJucyBvciBpbiBhIEMKY2FsbGJhY2sgaW52b2tlZCBieSB0aGF0IE9wZW5TU0wgQVBJLCB0aGUgdmFsdWUgb2YgdGhlIHRocmVhZCBsb2NhbCB2YXJpYWJsZSBpcwpyZXRyaWV2ZWQgKFxjZnVuY3Rpb257UHlUaHJlYWRfZ2V0X2tleV92YWx1ZX0pIGFuZCB1c2VkIHRvIHJlLWFjcXVpcmUgdGhlIEdJTC4KVGhpcyBhbGxvd3MgUHl0aG9uIHRocmVhZHMgdG8gZXhlY3V0ZSB3aGlsZSBPcGVuU1NMIEFQSXMgYXJlIHJ1bm5pbmcgYW5kIGFsbG93cwp1c2Ugb2YgYW55IHBhcnRpY3VsYXIgcHlPcGVuU1NMIG9iamVjdCBmcm9tIGFueSBQeXRob24gdGhyZWFkLCBzaW5jZSB0aGVyZSBpcwpubyBwZXItdGhyZWFkIHN0YXRlIGFzc29jaWF0ZWQgd2l0aCBhbnkgb2YgdGhlc2Ugb2JqZWN0cyBhbmQgc2luY2UgT3BlblNTTCBpcwp0aHJlYWRzYWZlIChhcyBsb25nIGFzIHByb3Blcmx5IGluaXRpYWxpemVkLCBhcyBweU9wZW5TU0wgaW5pdGlhbGl6ZXMgaXQpLgoKClxzdWJzZWN0aW9ue0FjZXNzaW5nIFNvY2tldCBNZXRob2RzIFxsYWJlbHtzb2NrZXQtbWV0aG9kc319CgpXZSBxdWlja2x5IHNhdyB0aGUgYmVuZWZpdCBvZiB3cmFwcGluZyBzb2NrZXQgbWV0aG9kcyBpbiB0aGUKXGNsYXNze1NTTC5Db25uZWN0aW9ufSBjbGFzcywgZm9yIGFuIGVhc3kgdHJhbnNpdGlvbiBpbnRvIHVzaW5nIFNTTC4gVGhlCnByb2JsZW0gaGVyZSBpcyB0aGF0IHRoZSBcbW9kdWxle3NvY2tldH0gbW9kdWxlIGxhY2tzIGEgQyBBUEksIGFuZCBhbGwgdGhlCm1ldGhvZHMgYXJlIGRlY2xhcmVkIHN0YXRpYy4gT25lIGFwcHJvYWNoIHdvdWxkIGJlIHRvIGhhdmUgXG1vZHVsZXtPcGVuU1NMfSBhcwphIHN1Ym1vZHVsZSB0byB0aGUgXG1vZHVsZXtzb2NrZXR9IG1vZHVsZSwgcGxhY2luZyBhbGwgdGhlIGNvZGUgaW4KXGZpbGV7c29ja2V0bW9kdWxlLmN9LCBidXQgdGhpcyBpcyBvYnZpb3VzbHkgbm90IGEgZ29vZCBzb2x1dGlvbiwgc2luY2UgeW91Cm1pZ2h0IG5vdCB3YW50IHRvIGltcG9ydCB0b25uZXMgb2YgZXh0cmEgc3R1ZmYgeW91J3JlIG5vdCBnb2luZyB0byB1c2Ugd2hlbgppbXBvcnRpbmcgdGhlIFxtb2R1bGV7c29ja2V0fSBtb2R1bGUuIFRoZSBvdGhlciBhcHByb2FjaCBpcyB0byBzb21laG93IGdldCBhCnBvaW50ZXIgdG8gdGhlIG1ldGhvZCB0byBiZSBjYWxsZWQsIGVpdGhlciB0aGUgQyBmdW5jdGlvbiwgb3IgYSBjYWxsYWJsZSBQeXRob24Kb2JqZWN0LiBUaGlzIGlzIG5vdCByZWFsbHkgYSBnb29kIHNvbHV0aW9uIGVpdGhlciwgc2luY2UgdGhlcmUncyBhIGxvdCBvZgpsb29rdXBzIGludm9sdmVkLgoKVGhlIHdheSBpdCB3b3JrcyBpcyB0aGF0IHlvdSBoYXZlIHRvIHN1cHBseSBhIGBgXGNsYXNze3NvY2tldH0tbGlrZScnIHRyYW5zcG9ydApvYmplY3QgdG8gdGhlIFxjbGFzc3tTU0wuQ29ubmVjdGlvbn0uIFRoZSBvbmx5IHJlcXVpcmVtZW50IG9mIHRoaXMgb2JqZWN0IGlzCnRoYXQgaXQgaGFzIGEgXG1ldGhvZHtmaWxlbm8oKX0gbWV0aG9kIHRoYXQgcmV0dXJucyBhIGZpbGUgZGVzY3JpcHRvciB0aGF0J3MKdmFsaWQgYXQgdGhlIEMgbGV2ZWwgKGkuZS4geW91IGNhbiB1c2UgdGhlIHN5c3RlbSBjYWxscyByZWFkIGFuZCB3cml0ZSkuIElmIHlvdQp3YW50IHRvIHVzZSB0aGUgXG1ldGhvZHtjb25uZWN0KCl9IG9yIFxtZXRob2R7YWNjZXB0KCl9IG1ldGhvZHMgb2YgdGhlClxjbGFzc3tTU0wuQ29ubmVjdGlvbn0gb2JqZWN0LCB0aGUgdHJhbnNwb3J0IG9iamVjdCBoYXMgdG8gc3VwcGx5IHN1Y2gKbWV0aG9kcyB0b28uIEFwYXJ0IGZyb20gdGhlbSwgYW55IG1ldGhvZCBsb29rdXBzIGluIHRoZSBcY2xhc3N7U1NMLkNvbm5lY3Rpb259Cm9iamVjdCB0aGF0IGZhaWwgYXJlIHBhc3NlZCBvbiB0byB0aGUgdW5kZXJseWluZyB0cmFuc3BvcnQgb2JqZWN0LgoKRnV0dXJlIGNoYW5nZXMgbWlnaHQgYmUgdG8gYWxsb3cgUHl0aG9uLWxldmVsIHRyYW5zcG9ydCBvYmplY3RzLCB0aGF0IGluc3RlYWQKb2YgaGF2aW5nIFxtZXRob2R7ZmlsZW5vKCl9IG1ldGhvZHMsIGhhdmUgXG1ldGhvZHtyZWFkKCl9IGFuZCBcbWV0aG9ke3dyaXRlKCl9Cm1ldGhvZHMsIHNvIG1vcmUgYWR2YW5jZWQgZmVhdHVyZXMgb2YgUHl0aG9uIGNhbiBiZSB1c2VkLiBUaGlzIHdvdWxkIHByb2JhYmx5CmVudGFpbCBzb21lIHNvcnQgb2YgT3BlblNTTCBgYEJJT3MnJywgYnV0IGNvbnZlcnRpbmcgUHl0aG9uIHN0cmluZ3MgYmFjayBhbmQKZm9ydGggaXMgZXhwZW5zaXZlLCBzbyB0aGlzIHNob3VsZG4ndCBiZSB1c2VkIHVubGVzcyBuZWNlc3NhcnkuIE90aGVyIG5pY2UKdGhpbmdzIHdvdWxkIGJlIHRvIGJlIGFibGUgdG8gcGFzcyBpbiBkaWZmZXJlbnQgdHJhbnNwb3J0IG9iamVjdHMgZm9yIHJlYWRpbmcKYW5kIHdyaXRpbmcsIGJ1dCB0aGVuIHRoZSBcbWV0aG9ke2ZpbGVubygpfSBtZXRob2Qgb2YgXGNsYXNze1NTTC5Db25uZWN0aW9ufQpiZWNvbWVzIHZpcnR1YWxseSB1c2VsZXNzLiBBbHNvLCBzaG91bGQgdGhlIG1ldGhvZCByZXNvbHV0aW9uIGJlIHVzZWQgb24gdGhlCnJlYWQtdHJhbnNwb3J0IG9yIHRoZSB3cml0ZS10cmFuc3BvcnQ/CgoKXGVuZHtkb2N1bWVudH0K