diff --git a/about.html b/about.html index aed1dd0..1b616ca 100644 --- a/about.html +++ b/about.html @@ -529,9 +529,9 @@

3 Session Info

[1] stats graphics grDevices utils datasets methods base loaded via a namespace (and not attached): - [1] digest_0.6.35 R6_2.5.1 fastmap_1.2.0 xfun_0.45 + [1] digest_0.6.36 R6_2.5.1 fastmap_1.2.0 xfun_0.45 [5] cachem_1.1.0 knitr_1.47 htmltools_0.5.8.1 rmarkdown_2.27 - [9] lifecycle_1.0.4 cli_3.6.2 sass_0.4.9 jquerylib_0.1.4 + [9] lifecycle_1.0.4 cli_3.6.3 sass_0.4.9 jquerylib_0.1.4 [13] compiler_4.4.1 tools_4.4.1 evaluate_0.24.0 bslib_0.7.0 [17] yaml_2.3.8 rlang_1.1.4 jsonlite_1.8.8 diff --git a/expectations-gradStudent.html b/expectations-gradStudent.html index 9c9f39d..44cf14c 100644 --- a/expectations-gradStudent.html +++ b/expectations-gradStudent.html @@ -1135,8 +1135,8 @@

4.15 Communication

messages that do not need an urgent response, you may email me. Please limit your use of email as much as possible. I -hate email (archived at https://perma.cc/9XJE-BM8N); we get way too much of it, +hate email (archived at https://perma.cc/T855-U9MQ); we get way too much of it, it is impersonal, it does not communicate tone well (often leading to misinterpretation and sometimes hurt feelings), and it is difficult for me to stay on top of my inbox. I encourage you to stop by my office or @@ -1160,8 +1160,7 @@

4.15 Communication

dissertations, etc. when they are your best possible work (the Henry Kissinger criterion). That means going through multiple revisions, reading it out loud to yourself, etc. Here is an excerpt about -Dr. Kissinger (Krausman, +Dr. Kissinger (Krausman, 2021):

“Henry Kissinger, a former Secretary of State under President Nixon, @@ -1905,7 +1904,7 @@

6.1.3 Clinical Work -
LS0tCnRpdGxlOiAiTGFiIEV4cGVjdGF0aW9ucyBmb3IgR3JhZHVhdGUgU3R1ZGVudHMiCi0tLQoKYGBge3Igc2V0dXAsIGluY2x1ZGUgPSBGQUxTRX0Ka25pdHI6Om9wdHNfY2h1bmskc2V0KAogIGVjaG8gPSBUUlVFLAogIGVycm9yID0gVFJVRSwKICBjb21tZW50ID0gIiIpCmBgYAoKUGxlYXNlIHJlYWQgdGhlIHdob2xlIGRvY3VtZW50IG9mIGxhYiBleHBlY3RhdGlvbnNbXjFdIGNhcmVmdWxseS4KSWYgeW91IGhhdmUgcXVlc3Rpb25zIG9yIGNvbmNlcm5zLCBwbGVhc2UgdGFsayB3aXRoIG1lIGFib3V0IHRoZW07IHRoZSBkb2N1bWVudCwgbGlrZSBteSByZXNlYXJjaCBzdHlsZSwgaXMgYSB3b3JrIGluIHByb2dyZXNzLgpJIGhvcGUgdGhpcyBkb2N1bWVudCBjb252ZXlzIHRoZSBjYXJlIGFuZCB0aG91Z2h0ZnVsbmVzcyBJIGJyaW5nIHRvIHRoZSB3b3JrIHdlIGRvIHRvZ2V0aGVyLgpJIHJldmlldyB0aGlzIGRvY3VtZW50IHBlcmlvZGljYWxseSB0byBtYWtlIHN1cmUgdGhhdCBteSBleHBlY3RhdGlvbnMgYW5kIG9ibGlnYXRpb25zIGFyZSBjbGVhciBhbmQgdGhhdCBub3RoaW5nIGltcG9ydGFudCBpcyBmb3Jnb3R0ZW4uCgojIFRoZSBicm9hZCBnb2FscyBvZiBteSByZXNlYXJjaCBwcm9ncmFtIHsjZ29hbHMtbXlSZXNlYXJjaH0KCkFzIHBhcnQgb2YgbXkgam9iIGFzIGEgcHJvZmVzc29yLCBJIGFtIGV4cGVjdGVkIHRvIHdyaXRlIGdyYW50cyBhbmQgaW5pdGlhdGUgcmVzZWFyY2ggdGhhdCB3aWxsIG1ha2UgdGFuZ2libGUgY29udHJpYnV0aW9ucyB0byBzY2llbmNlLCB0aGUgYWNhZGVtaWMgY29tbXVuaXR5LCBhbmQgdG8gc29jaWV0eS4KWW91IHdpbGwgYmUgaGVscGluZyBtZSBjYXJyeSBvdXTigJRhbmQgaW1wcm92ZeKAlHRoaXMgcmVzZWFyY2guCkFsb25nIHRoZSB3YXksIHRoZSBnb2FsIGlzIHRoYXQgeW91IHdpbGwgZGV2ZWxvcCBhbiBpbmRlcGVuZGVudCByZXNlYXJjaCBwcm9ncmFtLgpJdCBpcyBpbXBlcmF0aXZlIHRoYXQgd2UgaW1wbGVtZW50IHN0cm9uZyBzY2llbnRpZmljIG1ldGhvZHMsIGFuZCBjb25kdWN0IG91cnNlbHZlcyBpbiBhbiBldGhpY2FsIHdheS4KRGlzc2VtaW5hdGlvbiBvZiB0aGUga25vd2xlZGdlIHdlIGdhaW4gaXMgY3JpdGljYWwgdG8gdGhlIGFkdmFuY2VtZW50IG9mIG91ciBmaWVsZC4KVGh1cywgYSBwcmltYXJ5IGdvYWwgb2Ygb3VyIHdvcmsgaXMgcHVibGlzaGluZyBvdXIgZmluZGluZ3MgaW4gc2NpZW50aWZpYyBqb3VybmFscy4KCiMgVGhlIGJyb2FkIGdvYWxzIG9mIG1lbnRvcmluZyB7I2dvYWxzLW1lbnRvcmluZ30KClRoZSBnb2FscyBvZiBtZW50b3JpbmcgaW4gdGhpcyBsYWIgYXJlIGZvciBlYWNoIHRyYWluZWUgKnRvIHJlY2VpdmUgdGhlb3JldGljYWwgYW5kIHRlY2huaWNhbCB0cmFpbmluZywgdG8gd29yayBwcm9kdWN0aXZlbHkgb24gaW50ZXJlc3RpbmcgcmVzZWFyY2ggcHJvamVjdHMsIGFuZCB0byBiZXN0IHByZXBhcmUgdGhlbXNlbHZlcyBmb3IgdGhlaXIgZnV0dXJlIGNhcmVlciouClRodXMsIGEgbWFqb3IgZW1waGFzaXMgb2YgeW91ciB3b3JrIHdpbGwgYmUgZGF0YSBhbmFseXNpcywgd3JpdGluZywgYW5kIHB1Ymxpc2hpbmcgcGFwZXJzIGluIHN0cm9uZyBqb3VybmFscy4KSGVyZSBJIGxpc3Qgc29tZSBleHBlY3RhdGlvbnMgdG8gaGVscCB5b3UgdW5kZXJzdGFuZCBob3cgdGhlIGxhYiBvcGVyYXRlcyBhbmQgaG93IHdlIGNhbiBhY2hpZXZlIHRoZXNlIGdvYWxzIHRvZ2V0aGVyLgoKIyBXaGF0IHRyYWluZWVzIGNhbiBleHBlY3Qgb2YgbWUgeyNleHBlY3RPZk1lfQoKSGVyZSBhcmUgd2hhdCB0cmFpbmVlcyBjYW4gZXhwZWN0IG9mIG1lOgoKMS4gSSB3aWxsIHdvcmsgdGlyZWxlc3NseSBmb3IgdGhlIGdvb2Qgb2YgdGhlIGxhYiBncm91cDsgdGhlIHN1Y2Nlc3Mgb2YgZXZlcnkgbWVtYmVyIG9mIG91ciBncm91cCBpcyBteSB0b3AgcHJpb3JpdHksIG5vIG1hdHRlciB0aGVpciBwZXJzb25hbCBzdHJlbmd0aHMgYW5kIHdlYWtuZXNzZXMsIG9yIGNhcmVlciBnb2Fscy4KMS4gSSB3aWxsIHNldCBoaWdoIHN0YW5kYXJkcyBmb3IgdGhlIGxhYiBncm91cCwgaW5jbHVkaW5nIHlvdSwgb3RoZXJzLCBhbmQgbXlzZWxmLgoxLiBJIHdpbGwgcHJvdmlkZSB5b3UgZ3VpZGFuY2UgYW5kIHJlc291cmNlcyB0byBjb25kdWN0IHJlc2VhcmNoIHByb2plY3RzIHdlIGFyZSBib3RoIGludGVyZXN0ZWQgaW4uCjEuIEkgd2lsbCBoZWxwIHlvdSBuYXZpZ2F0ZSB5b3VyIGdyYWR1YXRlIHByb2dyYW0gb2Ygc3R1ZHkuCjEuIEkgd2lsbCBsZWFkIGJ5IGV4YW1wbGUgYW5kIGZhY2lsaXRhdGUgeW91ciB0cmFpbmluZyBpbiBjb21wbGVtZW50YXJ5IHNraWxscyBuZWVkZWQgdG8gYmUgYSBzdWNjZXNzZnVsIHNjaWVudGlzdCwgc3VjaCBhcyBvcmFsIGFuZCB3cml0dGVuIGNvbW11bmljYXRpb24gc2tpbGxzLCBncmFudCB3cml0aW5nLCBsYWIgbWFuYWdlbWVudCwgbWVudG9yaW5nLCBhbmQgc2NpZW50aWZpYyBwcm9mZXNzaW9uYWxpc20uCjEuIEkgd2lsbCBwcm92aWRlIHlvdSBndWlkYW5jZSBhbmQgcmVzb3VyY2VzIGZvciB5b3VyIGNhcmVlciBkZXZlbG9wbWVudC4KMS4gSSB3aWxsIHJlcGx5IHByb21wdGx5IHRvIHRoZSBtYXRlcmlhbHMgeW91IHNlbmQgbWUgKGUuZy4sIGVtYWlscywgZHJhZnRzLCBhbmQgc2xpZGVzKS4KMS4gSSB3aWxsIHJlc3BlY3QgeW91ciB0aW1lIGFuZCB3b3JrLCBhbmQgZ2l2ZSB5b3UgY3JlZGl0IGFwcHJvcHJpYXRlbHkuCjEuIEkgd2lsbCBwcm92aWRlIGFkdmljZSBvbiBvdGhlciBpc3N1ZXMsIGlmIHlvdSBjaG9vc2UgdG8gZW5nYWdlIG1lLgoxLiBJIHdpbGwgYmUgeW91ciBhZHZvY2F0ZS4KCiMgV2hhdCBJIGV4cGVjdCBvZiB0cmFpbmVlcyB7I215RXhwZWN0YXRpb25zfQoKSGVyZSBpcyB3aGF0IEkgZXhwZWN0IG9mIHRyYWluZWVzOgoKMS4gTWFpbnRhaW4gZ29vZCBwcm9ncmVzcyBvbiByZXNlYXJjaCBhbmQgdHJhaW5pbmctcmVsYXRlZCBhY3Rpdml0aWVzCjEuIFdvcmsgaW4gbGFiIGR1cmluZyB0aGUgd29ya2RheSAod2hlbiB5b3UgYXJlIG5vdCBpbiBjbGFzcywgdGVhY2hpbmcsIG9yIGRvaW5nIGNsaW5pY2FsIHdvcmspCjEuIENvbmR1Y3QgYWxsIHJlc2VhcmNoIGFuZCB0cmFpbmluZy1yZWxhdGVkIGFjdGl2aXRpZXMgcmVzcG9uc2libHkKMS4gUmVzcGVjdCBvdGhlciBsYWIgbWVtYmVycwoKSSBhbSBhbWJpdGlvdXMgYW5kIGhhdmUgaGlnaCBzdGFuZGFyZHMsIGFuZCBJIGV4cGVjdCB0aGUgc2FtZSBmcm9tIHlvdS4KQmVsb3cgYXJlIG1vcmUgZGV0YWlsZWQgZGVzY3JpcHRpb25zIG9mIHRoZSBleHBlY3RhdGlvbnM6CgojIyBSZXNlYXJjaCBwcm9qZWN0cyBhbmQgdHJhaW5pbmcgeyNyZXNlYXJjaFRyYWluaW5nfQoKVGFrZSBhZHZhbnRhZ2Ugb2YgeW91ciBvcHBvcnR1bml0eSB0byB3b3JrIGF0IGEgd29ybGQtY2xhc3MgdW5pdmVyc2l0eSBieSBkZXZlbG9waW5nIGFuZCByZWZpbmluZyBzdGVsbGFyIHNjaWVudGlmaWMgc2tpbGxzLgpJIGV4cGVjdCB0aGF0IHlvdSB3aWxsIGxlYXJuIGhvdyB0byBwbGFuLCBkZXNpZ24sIGFuZCBjb25kdWN0IGhpZ2gtcXVhbGl0eSBzY2llbnRpZmljIHJlc2VhcmNoLgoKSSBleHBlY3QgYWxsIHRyYWluZWVzIHRvIG1haW50YWluIGdvb2QgcHJvZ3Jlc3Mgb24gdGhlaXIgcHJvamVjdHMuClRoaXMgaW5jbHVkZXM6IGtlZXBpbmcgdXBkYXRlZCBvbiB0aGUgbGl0ZXJhdHVyZSBhbmQgcmVzZWFyY2ggbWV0aG9kcywgYWN0aXZlbHkgdGhpbmtpbmcgYWJvdXQgdGhlIGJlc3Qgd2F5cyB0byBjb25kdWN0IHlvdXIgcmVzZWFyY2ggcHJvamVjdHMgYW5kIGFwcGx5aW5nIHRoZW0sIHJlZ3VsYXJseSBkaXNjdXNzaW5nIHlvdXIgcmVzZWFyY2ggcHJvZ3Jlc3Mgd2l0aCBtZSwgZm9sbG93aW5nIHRoZSBwbGFucyBiYXNlZCBvbiBvdXIgZGlzY3Vzc2lvbnMsIGFuZCBwcmVzZW50aW5nIChjb25mZXJlbmNlcywgcHJlc2VudGF0aW9ucywgYW5kL29yIGpvdXJuYWwgYXJ0aWNsZXMpIHRoZSBmaW5kaW5ncyBhdCBhIHNhdGlzZmFjdG9yeSBsZXZlbC4KV3JpdGluZyBpcyB0aGUgc2luZ2xlIG1vc3QgaW1wb3J0YW50IGFiaWxpdHkgdG8gZGV2ZWxvcCBkdXJpbmcgZ3JhZHVhdGUgc2Nob29sLgpJIGV4cGVjdCB5b3UgdG8gd3JpdGUgZnJlcXVlbnRseSwgYW5kIEkgZW5jb3VyYWdlIHlvdSB0byB3cml0ZSBkYWlseS4KSSBlbmNvdXJhZ2Ugc3R1ZGVudHMgdG8gcmVhZCBQYXVsIFNpbHZhJ3MgIltIb3cgdG8gV3JpdGUgYSBMb3RdKGh0dHBzOi8vd3d3LmFtYXpvbi5jb20vSG93LVdyaXRlLUxvdC1QcmFjdGljYWwtUHJvZHVjdGl2ZS9kcC8xNDMzODI5NzM4KSAoYXJjaGl2ZWQgYXQgaHR0cHM6Ly9wZXJtYS5jYy9DNlhWLTg0VVIpLCIgYW5kIEkgYW0gaGFwcHkgdG8gbGVuZCB0aGUgYm9vayB0byB5b3UuCkkgZW5jb3VyYWdlIHlvdSB0byB1c2UgRW5kTm90ZSwgWm90ZXJvLCBvciBhbm90aGVyIHJlZmVyZW5jZSBtYW5hZ2VyIHRvIG1hbmFnZSB5b3VyIHJlZmVyZW5jZXMgYW5kIHdyaXRlIHRoZSBSZWZlcmVuY2VzIHNlY3Rpb24gb2YgcGFwZXJzLgpSZWZlcmVuY2UgbWFuYWdlbWVudCBzb2Z0d2FyZSB3aWxsIHNhdmUgeW91IGxvdHMgb2YgdGltZS4KQWRkaXRpb25hbGx5LCBwbGVhc2UgZm9sbG93IHRoZSBsYWIncyBbd3JpdGluZyBndWlkZWxpbmVzXSh3cml0aW5nLmh0bWwpLgoKTXkgZXhwZWN0YXRpb24gaXMgdGhhdCB5b3Ugd2lsbCBiZSBlbmdhZ2VkIGluIHJlc2VhcmNoIGFjdGl2aXRpZXMgYmV5b25kIHRob3NlIHJlcXVpcmVkIGJ5IHRoZSBwcm9ncmFtLgpIYXZlIG11bHRpcGxlIHJlc2VhcmNoIHByb2plY3RzIHRvIHdvcmsgb24uCkhhdmluZyBtdWx0aXBsZSBvbmdvaW5nIHByb2plY3RzIHByb3ZpZGVzIGltcG9ydGFudCBkaXZlcnNpZmljYXRpb27igJRpZiBhIGdpdmVuIHByb2plY3QgaXMgbm90IHdvcmtpbmcgb3V0IGFzIGV4cGVjdGVkLCB5b3UgaGF2ZSBvdGhlciBwcm9qZWN0cyB5b3UgY2FuIHR1cm4gdG8uCkJ1dCBmb2N1cyBhbmQgZmluaXNoLgpUaGUgImN1cnJlbmN5IiBpbiBzY2llbmNlIGlzIHB1Ymxpc2hlZCBwYXBlcnPigJR0aGV5IGRyaXZlIGEgbG90IG9mIHdoYXQgd2UgZG8uCkJlY2F1c2Ugb3VyIGxhYiBpcyBzdXBwb3J0ZWQgYnkgdGF4cGF5ZXIgZG9sbGFycywgd2UgaGF2ZSBhbiBvYmxpZ2F0aW9uIHRvIGNvbXBsZXRlIGFuZCBkaXNzZW1pbmF0ZSBvdXIgZmluZGluZ3MuCkkgZXhwZWN0IHlvdSB0byBsZWFkIGZpcnN0LWF1dGhvcmVkIHByb2plY3RzIChpbiBhZGRpdGlvbiB0byBhbnkgY29sbGFib3JhdGl2ZSBwcm9qZWN0cykgYW5kIHRvIHB1Ymxpc2ggeW91ciB3b3JrIGluIGhpZ2gtaW1wYWN0IGpvdXJuYWxzLgpJdCBpcyBteSBwb2xpY3kgdGhhdCBzdHVkZW50cyBhcmUgZmlyc3QtYXV0aG9yIG9uIGFsbCB3b3JrIGZvciB3aGljaCB0aGV5IGxlYWQgdGhlIGRhdGEgYW5hbHlzaXMgYW5kIHdyaXRpbmcuCkkgd2lsbCBwdXNoIHlvdSB0byBwdWJsaXNoIHlvdXIgcmVzZWFyY2ggYXMgeW91IG1vdmUgdGhyb3VnaCB5b3VyIHRyYWluaW5nIHByb2dyYW0sIDx1Pm5vdDwvdT4gb25seSBhdCB0aGUgZW5kLgpJIGV4cGVjdCB0cmFpbmVlcyB0byBiZSBsZWFkIGF1dGhvciBvbiBhdCBsZWFzdCB0d28gam91cm5hbCBwYXBlciBzdWJtaXNzaW9ucywgcHJlZmVyYWJseSB0aHJlZSBvciBmb3VyIChvciBtb3JlISkuClByb2R1Y3Rpdml0eSBpbiB0ZXJtcyBvZiBwdWJsaXNoaW5nIGhpZ2gtcXVhbGl0eSBwYXBlcnMgYW5kIHNlY3VyaW5nIGZ1bmRpbmcgaXMgY3J1Y2lhbCB0byBiZSBjb21wZXRpdGl2ZSBmb3IgbWFueSBqb2JzLgoKSSBleHBlY3QgeW91IHRvIGFwcGx5IGZvciBleHRlcm5hbCBmdW5kaW5n4oCUZXhhbXBsZXMgaW5jbHVkZSB0aGUgTmF0aW9uYWwgU2NpZW5jZSBGb3VuZGF0aW9uIEdyYWR1YXRlIFJlc2VhcmNoIEZlbGxvd3NoaXAgUHJvZ3JhbSAoTlNGLUdSRlApIGFuZCB0aGUgTmF0aW9uYWwgSW5zdGl0dXRlcyBvZiBIZWFsdGggTmF0aW9uYWwgUmVzZWFyY2ggU2VydmljZSBBd2FyZCAoTklIIE5SU0EpLgpJIGVuY291cmFnZSBzdHVkZW50cyB0byBzdWJtaXQgYSBOU0YtR1JGUCBpbiB0aGVpciBmaXJzdCBzZW1lc3Rlci4KSSBlbmNvdXJhZ2Ugc3R1ZGVudHMgdG8gc3VibWl0IGEgTklIIE5SU0EgaW4gdGhlaXIgc2Vjb25kIG9yIHRoaXJkIHllYXIuCkdldHRpbmcgYSBmaXJzdC1hdXRob3JlZCBwdWJsaWNhdGlvbiBpbiB5b3VyIGZpcnN0IG9yIHNlY29uZCB5ZWFyIGlzIGltcG9ydGFudCBmb3IgdGhlc2UgKGFuZCBvdGhlcikgZmVsbG93c2hpcHMgYW5kIGZvciBhd2FyZHMuCgpGb3IgbWFueSBqb2JzLCBwcmVzZW50YXRpb24gc2tpbGxzIGFyZSBhbHNvIGhpZ2hseSBpbXBvcnRhbnQsIGluY2x1ZGluZyBza2lsbHMgaW4gcHJlc2VudGluZyByZXNlYXJjaCB0byBicm9hZCBhdWRpZW5jZXMgb2Ygc2NpZW50aXN0cyBvdXRzaWRlIG9mIHlvdXIgYXJlYS4KRm9yIGFjYWRlbWljIHBvc2l0aW9ucywgd2hpbGUgcGFwZXJzIGFuZCBncmFudHMgImdldCB5b3VyIGZvb3QgaW4gdGhlIGRvb3IiIGFuZCBoZWxwIHlvdSBnZXQgYW4gaW50ZXJ2aWV3LCB0aGUgImpvYiB0YWxrIiAodHlwaWNhbGx5IHRvIHRoZSB3aG9sZSBEZXBhcnRtZW50KSBpcyB0aGUgc2luZ2xlIG1vc3QgaW1wb3J0YW50IGNyaXRlcmlvbiBkdXJpbmcgYSBqb2IgaW50ZXJ2aWV34oCUYmVjYXVzZSB0aGF0IGlzIHRoZSBvbmUgdGhpbmcgdGhhdCBhbGwgZmFjdWx0eSBzZWUuClRodXMsIEkgZXhwZWN0IHlvdSB0byBwcmVzZW50IHlvdXIgcmVzZWFyY2ggZnJlcXVlbnRseSBhbmQgaW4gbXVsdGlwbGUgb3V0bGV0cy4KQ2hhbGxlbmdlIHlvdXJzZWxmIGJ5IHByZXNlbnRpbmcgeW91ciB3b3JrIGF0IG1lZXRpbmdzIGFuZCBzZW1pbmFycyBhcyBlYXJseSBhcyB5b3UgY2FuLgpJIGFsc28gZXhwZWN0IHlvdSB0byBnbyB0byBEZXBhcnRtZW50YWwgY29sbG9xdWlhIHNlcmllcyBieSBzcGVha2VycyB3aG8gYXJlIG91dHNpZGUgb2YgeW91ciBhcmVhLgoKV2Ugd2lsbCBoYXZlIG1lZXRpbmdzIHRvIGRpc2N1c3MgdGhlIHJlc2VhcmNoIHByb2plY3QocykgeW91IGZpbmQgaW50ZXJlc3RpbmcgdGhhdCBhbHNvIGFkdmFuY2UgdGhlIGxhYidzIGludGVyZXN0cy4KSSBhbHdheXMgd2VsY29tZSBuZXcgaWRlYXMgYW5kIHByb2plY3QgcHJvcG9zYWxzLCBzbyBwbGVhc2UgY29tZSB0byBtZSBpZiB5b3Ugd2FudCB0byBkaXNjdXNzIG5ldyBwcm9qZWN0cy4KQSBwaWVjZSBvZiBhZHZpY2UgdGhhdCB3YXMgZ2l2ZW4gdG8gbWUgYXMgYSBncmFkdWF0ZSBzdHVkZW50IHRoYXQgSSBwYXNzIG9udG8geW91IGlzIHRvIGZpbmQgYSBxdWVzdGlvbiBvciBwcm9ibGVtIHRoYXQgZXhjaXRlcyB5b3UgYW5kICJkYXRlIiBpdC4KWW91IHdpbGwga25vdyB0aGF0IHlvdSBoYXZlIGZvdW5kIGFuIGlkZWEgdGhhdCB0cnVseSBleGNpdGVzIHlvdSB3aGVuIHlvdSBmaW5kIHlvdXJzZWxmIHRoaW5raW5nIGFib3V0IGl0IHdoaWxlIGJydXNoaW5nIHlvdXIgdGVldGgsIGdvaW5nIGZvciB3YWxrcywgZXRjLgpNdWNoIG9mIHRoZSBpbXBvcnRhbnQgYW5kIGV4Y2l0aW5nIHdvcmsgaW4gc2NpZW5jZSBoYXBwZW5zIGF0IHRoZSBpZGVhcyBzdGFnZS4KCiMjIERhdGEgYW5kIHJlc2VhcmNoIG1hdGVyaWFscyB7I2RhdGFBbmRSZXNlYXJjaE1hdGVyaWFsc30KCkNvbmZpZGVudGlhbGl0eSBvZiBkYXRhIGlzIHBhcmFtb3VudC4KQWxsIGhhcmQtY29weSBwaHlzaWNhbCByZXNlYXJjaCBkYXRhIG11c3QgcmVtYWluIGluIHRoZSBsYWIuCkFsbCBlbGVjdHJvbmljIGRhdGEgc2hvdWxkIGJlIGFjY2Vzc2VkIGZyb20gdGhlIGxhYiwgb24gdW5pdmVyc2l0eSBjb21wdXRlcnMsIG9yIHNlY3VyZSBwcml2YXRlIGNvbXB1dGVycy4KRWxlY3Ryb25pYyBkYXRhIHNob3VsZCBub3QgYmUgYWNjZXNzZWQgb24gcHVibGljIGNvbXB1dGVycy4KSWRlbnRpZmlhYmxlIGVsZWN0cm9uaWMgZGF0YSBzaG91bGQgYmUgc3RvcmVkIG9ubHkgb24gdGhlIGxhYidzIFJEU1Mgc2hhcmUgYW5kIHNob3VsZCBub3QgYmUgc2F2ZWQgb250byB5b3VyIGNvbXB1dGVyLgpXaGVuIHdvcmtpbmcgZnJvbSBwcml2YXRlIHNwYWNlcywgdGhlIHVuaXZlcnNpdHkgVlBOIGNhbiBiZSBhY2Nlc3NlZCB0byBlbnN1cmUgYSBzZWN1cmUgaW50ZXJuZXQgY29ubmVjdGlvbi4KCllvdSBhcmUgZXhwZWN0ZWQgdG8gbWFpbnRhaW4gZGV0YWlsZWQsIG9yZ2FuaXplZCwgYW5kIGFjY3VyYXRlIGxhYm9yYXRvcnkgcmVjb3JkcyBpbiBhIGxhYiBub3RlYm9vay4KQmUgYXdhcmUgdGhhdCBhbGwgdGFuZ2libGUgcmVzZWFyY2ggZGF0YSBhbmQgcmVsYXRlZCByZXNlYXJjaCBtYXRlcmlhbHMgYXJlIG15IHByb3BlcnR5IGFzIHRoZSBsYWIgZGlyZWN0b3IuCldoZW4geW91IGxlYXZlIHRoZSBsYWIsIEkgZW5jb3VyYWdlIHlvdSB0byByZXRhaW4gYWNjZXNzIHRvIHRoZSBsYWIncyByZXNlYXJjaCBkYXRhIHZpYSBWUE4gdG8gdGhlIGxhYiBkcml2ZSAoUkRTUyBzaGFyZSkuCk9uZSBmdWxsIHNldCBvZiBhbGwgZGF0YSBtdXN0IHN0YXkgaW4gdGhlIGxhYiwgd2l0aCBhcHByb3ByaWF0ZSBhbmQgYWNjZXNzaWJsZSBkb2N1bWVudGF0aW9uLgpSZWd1bGFybHkgYmFjayB1cCB0aGUgZmlsZXMgb24geW91ciBjb21wdXRlciB1c2luZyBNaWNyb3NvZnQgT25lRHJpdmUsIHdoaWNoIGlzIHByb3ZpZGVkIGJ5IHRoZSB1bml2ZXJzaXR5LgpEZS1pZGVudGlmaWVkIGRhdGEgYW5kIGFuYWx5c2lzIHNjcmlwdHMgYXNzb2NpYXRlZCB3aXRoIHByb2plY3RzIHNob3VsZCBiZSBzYXZlZCBpbiB0aGUgcHJvamVjdCByZXBvc2l0b3J5IG9mIHRoZSBsYWIncyBHaXRMYWIgcGFnZSAoaHR0cHM6Ly9yZXNlYXJjaC1naXQudWlvd2EuZWR1L1BldGVyc2VuTGFiKSwgd2hpY2ggaXMgaG9zdGVkIGJ5IHRoZSB1bml2ZXJzaXR5IGFuZCBhcHByb3ZlZCBieSBvdXIgSVJCLgoKIyMgUmVzZWFyY2ggZXRoaWNzIHsjcmVzZWFyY2hFdGhpY3N9CgpZb3Ugc2hvdWxkIHJlc3BlY3QgYWxsIGV0aGljYWwgc3RhbmRhcmRz4oCUaW5jbHVkaW5nIGNvbXBsaWFuY2Ugd2l0aCBhbGwgdW5pdmVyc2l0eSwgc3RhdGUsIGFuZCBmZWRlcmFsIHJlZ3VsYXRpb25zIGluIGFkZGl0aW9uIHRvIHRoZSBBUEEgRXRoaWNzIENvZGXigJRhcyB0aGV5IHJlbGF0ZSB0byByZXNwb25zaWJsZSBjb25kdWN0IGluIHJlc2VhcmNoLCBwb3NzaWJsZSBjb25mbGljdHMgb2YgaW50ZXJlc3QsIHByaXZhY3kgYW5kIGh1bWFuIHN1YmplY3RzIHJlc2VhcmNoLCBsYWJvcmF0b3J5IHNhZmV0eSwgYXV0aG9yc2hpcCwgcGVlci1yZXZpZXcgZ3VpZGVsaW5lcywgYW5kIGRhdGEgb3duZXJzaGlwLCByZXBvcnRpbmcsIGFuZCBzaGFyaW5nLgpXaGVuIGV0aGljYWwgZGlsZW1tYXMgb3IgdW5jZXJ0YWludGllcyBhcmlzZSwgYXNrIG1lIGFuZCBvdGhlcnMgZm9yIGd1aWRhbmNlLgpDb25zdWx0LCBjb25zdWx0LCBjb25zdWx0IQoKSW4gdGhpcyBsYWIsIHdlIHdvcmsgaGFyZCB0byBkbyB0aGUgYmVzdCBzY2llbmNlIHdlIGNhbi4KRHVyaW5nIHRoZSBwcm9jZXNzLCBvYnN0YWNsZXMgYW5kIGZydXN0cmF0aW9ucyBhcmUgaW5ldml0YWJsZSwgYW5kIHNvbWV0aW1lcyBtb3JlIGNvbW1vbiB0aGFuIHlvdSB3b3VsZCBpbWFnaW5lLgpJdCBpcyBteSBob3BlIHRoYXQgd2Ugd2lsbCB3b3JrIHRvZ2V0aGVyIHRvIHRhY2tsZSB0aGVzZSBjaGFsbGVuZ2VzIGFuZCB0byBidWlsZCB1cCB5b3VyIHJlc2lsaWVuY2UuClRvIHRoaXMgZW5kLCBwbGVhc2Uga2VlcCBtZSB1cGRhdGVkIG9uIHlvdXIgcHJvZ3Jlc3PigJRib3RoIHRoZSBnb29kIGFuZCBiYWQuCgpNaXN0YWtlcyBhcmUgaW5ldml0YWJsZSBhbmQgYXJlIHBhcnQgb2YgeW91ciB0cmFpbmluZywgc28gZG8gbm90IGZlZWwgYmFkIGFib3V0IG1ha2luZyBtaXN0YWtlc+KAlEkgbWFrZSBtaXN0YWtlcyBvbiBhIGRhaWx5IGJhc2lzLgpJIHN0cml2ZSBmb3IgdGhlIGxhYiB0byBwcm92aWRlIGEgc3VwcG9ydGl2ZSBlbnZpcm9ubWVudCB0byBhc2sgcXVlc3Rpb25zIGFuZCBhZG1pdCBtaXN0YWtlcy4KQXMgeW91ciBtZW50b3IsIEkgYW0gYWxzbyByZXNwb25zaWJsZSBmb3IgeW91ciByZXNlYXJjaCBhbmQgdHJhaW5pbmcuClNvIHBsZWFzZSBkbyBsZXQgbWUga25vdyBpZiBzdWNoIHRoaW5ncyBoYXBwZW4gYW5kIHdlIHdpbGwgd29yayB0b2dldGhlciB0byByZWNvdmVyIGZyb20gdGhlbS4KVXN1YWxseSB0aGUgZWFybGllciB5b3UgaW5mb3JtIG1lLCB0aGUgbGVzcyBkYW1hZ2UgdGhlcmUgd2lsbCBiZS4KQmVpbmcgZnJhbmsgYWJvdXQgeW91ciBtaXN0YWtlcyB3aWxsIGJlIGdyZWF0bHkgYXBwcmVjaWF0ZWQuCkhvd2V2ZXIsIHRoaW5ncyBsaWtlIGludGVudGlvbmFsbHkgZmFraW5nIGRhdGEgYW5kIGludGVudGlvbmFsbHkgY292ZXJpbmcgbWlzdGFrZXMgYXJlIHVuYWNjZXB0YWJsZSBhbmQgd2lsbCBsZWFkIHRvIHNldmVyZSBjb25zZXF1ZW5jZXMuCgojIyBUaW1lIGluIGxhYiB7I3RpbWVJbkxhYn0KCkkgZXhwZWN0IHlvdSB0byBiZSBhdCB3b3JrIGFuZCBvbiBjYW1wdXMgZHVyaW5nIHRoZSB3b3JrZGF5OiA5aXNo4oCTNWlzaCBvciA4aXNo4oCTNGlzaC4KSW4gYWRkaXRpb24sIEkgZXhwZWN0IHlvdXIgYXZhaWxhYmlsaXR5IHRvIHNwYW4gOeKAkzUgZm9yIHNjaGVkdWxpbmcgbWVldGluZ3Mgd2l0aCBtZSBvciBtZW1iZXJzIG9mIHRoZSB0ZWFt4oCUdGhlIHNhbWUgaG91cnMsIGdlbmVyYWxseSwgdGhhdCB0aGUgcHJvZ3JhbSBhdHRlbXB0cyB0byBzY2hlZHVsZSBtZWV0aW5ncy4KRHVyaW5nIHRoZSB3b3JrZGF5LCB5b3UgYXJlIGV4cGVjdGVkIHRvIHdvcmsgaW4gdGhlIGxhYiB3aGVuIHlvdSBhcmUgbm90IGluIGNsYXNzLCB0ZWFjaGluZywgb3IgZG9pbmcgY2xpbmljYWwgd29yay4KVGhpcyBpcyBub3QgYWJvdXQgYWNjb3VudGFiaWxpdHnigJRyYXRoZXIsIGl0IGlzIHRvIHRoZSBiZW5lZml0IG9mIHlvdSBhbmQgdGhlIHRlYW0uCk91ciBhcHByb2FjaCBpcyBvcHRpbWFsIGZvciB0aGUgdHlwZSBvZiBwcm9qZWN0cyB3ZSBjYXJyeSBvdXQ6IGxvbmdpdHVkaW5hbCBwcm9qZWN0cyBzdWNoIGFzIG91cnMgYXJlIG9uZSBiaWcgZW50ZXJwcmlzZSB3aXRoIG1hbnkgbW92aW5nIHBhcnRzLCBhbGwgb2Ygd2hpY2ggaGF2ZSB0byB3b3JrIHRvZ2V0aGVyIHNtb290aGx5LgpFYWNoIHN0dWRlbnQncyBpbmRpdmlkdWFsIHByb2plY3QgaXMgZW1iZWRkZWQgaW4gdGhhdCBsYXJnZXIgdW1icmVsbGEgKHJldGFpbmluZyBlYWNoIHN0dWRlbnQncyB1bmlxdWVuZXNzLCBpZGVhcywgZXRjLikuClRodXMsIHRoZSBwaHlzaWNhbCBpbnRlcmFjdGlvbnMgZm9yIHRoZSB3aG9sZSB0ZWFtLCBpbiBvbmUgc3BhY2UsIHdpdGggc2hhcmVkIHdvcmsgZXRoaWMsIGFyZSBzbyBpbXBvcnRhbnQuClBhcnQgb2YgeW91ciBqb2IgaXMgdG8gYmUgaW4gdGhlIGxhYiAod2l0aCB5b3VyIGRvb3Igb3BlbikgYW5kIHRvIHRhbGsgd2l0aCBvdGhlciBwZW9wbGUgYWJvdXQgeW91ciByZXNlYXJjaC4KV2UgYWxsIGJlbmVmaXQgZnJvbSBoYXZpbmcgYSBncm91cCBvZiBwZW9wbGUgd2UgY2FuIHRhbGsgd2l0aCBhYm91dCByZXNlYXJjaCBxdWVzdGlvbnMgYW5kIHByb2JsZW1zLgpXZSBoYXZlIGEgY29sbGFib3JhdGl2ZSBsYWIgZW52aXJvbm1lbnQuCk91ciBsYWIgd29ya3MgYXMgYSB0ZWFtLCBhbmQgb3RoZXIgbGFiIG1lbWJlcnMgY291bnQgb24geW91IGJlaW5nIHRoZXJlLgpMaWtld2lzZSwgeW91IGJlbmVmaXQgZnJvbSBoYXZpbmcgb3RoZXIgdGVhbSBtZW1iZXJzLCBteXNlbGYsIGFuZCBEZXBhcnRtZW50YWwgc3RhZmYgYXZhaWxhYmxlLgpXb3JraW5nIGluIHRoZSBsYWIgc3BhY2UgaGVscHMgaW1wcm92ZSBxdWFsaXR5IGNvbnRyb2wgb2YgbGFiIHByb2NlZHVyZXMgYW5kIGNhbiBsZWFkIHRvIGV4Y2l0aW5nIGNvbGxhYm9yYXRpdmUgcHJvamVjdHMuClRoaXMgc2hvcnQgYmx1cmIgb24gaG93ICJbSXNvbGF0aW9uIGlzIG9uZSBvZiB0aGUgYmlnZ2VzdCBlbmVtaWVzIG9mIGdyYWR1YXRlIHN0dWRlbnRzXShodHRwczovL3d3dy5pbnNpZGVoaWdoZXJlZC5jb20vdmlld3MvMjAwNS8xMC8yNi93ZS1uZWVkLWh1bWFuaXRpZXMtbGFicykiIChhcmNoaXZlZCBhdCBodHRwczovL3Blcm1hLmNjL0dLNTYtN0xMVykgbWF5IGdpdmUgeW91IHNvbWUgaW5zaWdodCB3aHkgZmFjZXRpbWUgaW4gdGhlIGxhYiBpcyBzbyBpbXBvcnRhbnQ6Cgo+ICJJIHdvbmRlciBob3cgYW4gRW5nbGlzaCBwcm9mZXNzb3Igd291bGQgZmVlbCBzcGVuZGluZyBhIHdlZWsgaW4gYSBwaHlzaWNzIGxhYi4KPiBOb3QgYWJvdXQgdGhlIHNjaWVudGlmaWMgd29yaywgYnV0IGFib3V0IHRoZSBmcmVxdWVudCwgb25nb2luZyBpbnRlcmFjdGlvbiBiZXR3ZWVuIHN0dWRlbnRzIGFuZCBwZWVycywgcG9zdC1kb2NzIGFuZCBmYWN1bHR5Lgo+IFNjaWVudGlzdHMgc2VlIGVhY2ggb3RoZXIgaW4gdGhlIGxhYiwgaWYgbm90IGRhaWx5LCB0aGVuIGF0IGxlYXN0IHdlZWtseS4KPiBUaGV5IGhhdmUgZnJlcXVlbnQgbGFiIG1lZXRpbmdzLCBjb2xsb3F1aWEgYW5kIGludGVyYWN0aW9uIHdpdGggc2Nob2xhcnMgYXQgb3RoZXIgdW5pdmVyc2l0aWVzIGFyb3VuZCBqb2ludCByZXNlYXJjaC4KPiBEdXJpbmcgbXkgZ3JhZHVhdGUgdHJhaW5pbmcgaW4gcHN5Y2hvbG9neSBhdCBNY0dpbGwgVW5pdmVyc2l0eSwgZXNwZWNpYWxseSBpbiB0aGUgcmVzZWFyY2ggbGFiIGF0IHRoZSBNb250cmVhbCBOZXVyb2xvZ2ljYWwgSW5zdGl0dXRlLCBJIHNwZW50IGhvdXJzIGhhbmdpbmcgYXJvdW5kIHRoZSBwb3N0LWRvY3MuCj4gSSBsZWFybmVkIGF0IGxlYXN0IGFzIG11Y2ggZnJvbSB0aGVtIGFzIEkgZGlkIGZyb20gbXkgaW50ZXJhY3Rpb25zIHdpdGggbXkgcHJvZmVzc29ycy4KPiBUaGUgZXhwZWN0YXRpb24gd2FzIHRoYXQgSSB3b3VsZCBiZSBhdCB0aGUgbGFiIDkgdG8gNSBvciBtb3JlLCBldmVyeSBkYXkuCj4gSSBzYXcgbXkgYWR2aXNlciBldmVyeSBkYXkuIiDigJMgR2luYSBIaWF0dAoKT2YgY291cnNlLCB0aGVyZSBhcmUgZXhjZXB0aW9uczsgaWYgeW91IGFyZSBzaWNrLCBzdGF5IGhvbWUuCllvdSBkbyBub3QgbmVlZCBteSBwZXJtaXNzaW9uIHRvIGF0dGVuZCBtZWRpY2FsIGFwcG9pbnRtZW50cyBkdXJpbmcgbGFiIGhvdXJzLgpJZiB5b3UgYXJlIHVuYWJsZSB0byBjb21lIGludG8gbGFiIGR1ZSB0byBiYWQgd2VhdGhlciwganVzdCBsZXQgbWUga25vdyBhbmQgeW91IHNob3VsZCBiZSBhdmFpbGFibGUgdG8gYmUgcmVhY2gtYWJsZSBxdWlja2x5LCBqdXN0IGFzIHlvdSB3b3VsZCBiZSBpZiB5b3Ugd2VyZSBpbiBsYWIuCgpOZXZlcnRoZWxlc3MsIGdyYWR1YXRlIHNjaG9vbCBpcyBub3QgYSA0MCBob3VyIHBlciB3ZWVrIGpvYi4KR3JhZHVhdGUgc3R1ZGVudHMgY2FuIGV4cGVjdCB0byB3b3JrIGFuIGF2ZXJhZ2Ugb2YgNTAgaG91cnMgcGVyIHdlZWsuCk91dHNpZGUgb2YgdGhlIHdvcmtkYXksIHlvdSBhcmUgd2VsY29tZSB0byB3b3JrIGZyb20gdGhlIGxhYiwgb3LigJRhcyBsb25nIGFzIHlvdSBlbnN1cmUgY29uZmlkZW50aWFsaXR5IG9mIGRhdGHigJRmcm9tIGhvbWUgb3IgZnJvbSBvdGhlciBzcGFjZXMuClRoYXQgc2FpZCwgdGhlIG1vc3QgaW1wb3J0YW50IHRoaW5nIGlzIGZvciB5b3UgdG8gZ2V0IHRoZSBqb2IgZG9uZeKAlHlvdSBhcmUgaW4geW91ciBjYXJlZXIgbm93IGFuZCBhcmUgaW52ZXN0aW5nIGluIHlvdXJzZWxmLgpHcmFkdWF0ZSByZXNlYXJjaCByZXF1aXJlcyBmdWxsLXRpbWUgZGVkaWNhdGlvbiBhbmQgeWVhci1yb3VuZCBlZmZvcnQuCgpEaXNjdXNzIHBvbGljaWVzIG9uIHdvcmsgaG91cnMsIHNpY2sgbGVhdmUsIGFuZCB2YWNhdGlvbiB3aXRoIG1lIGRpcmVjdGx5LgpJdCBpcyBpbXBvcnRhbnQgdG8gdGFrZSB0aW1lIG9mZiB0byBkZWNvbXByZXNzIGZyb20gdGltZSB0byB0aW1lLgpXb3JrLWxpZmUgYmFsYW5jZSBhbmQgdmFjYXRpb24gdGltZSBhcmUgZXNzZW50aWFsIGZvciBjcmVhdGl2ZSB0aGlua2luZyBhbmQgZ29vZCBoZWFsdGgsIGFuZCBJIGVuY291cmFnZSB5b3UgdG8gdGFrZSByZWd1bGFyIHZhY2F0aW9ucy4KWW91IGNhbiB0YWtlIHRocmVlIHdlZWtzIG9mIHZhY2F0aW9uIHRpbWUgZWFjaCB5ZWFyLCBhbmQgeW91IGFyZSBub3QgZXhwZWN0ZWQgdG8gd29yayBkdXJpbmcgW3VuaXZlcnNpdHkgaG9saWRheXNdKGh0dHBzOi8vZ3JhZC51aW93YS5lZHUvZ3JhZHVhdGUtc3R1ZGVudC1lbXBsb3ltZW50LWFncmVlbWVudC9wYWlkLWxlYXZlcy1hbmQtaG9saWRheSkuCkluIGFkZGl0aW9uLCBJIGRvIG5vdCBleHBlY3Qgc3R1ZGVudHMgdG8gd29yayBiZXR3ZWVuIDEyLzE1IGFuZCB0aGUgZmlyc3Qgd2VlayBvZiBKYW51YXJ5LgpQbGVhc2UgZGlzY3VzcyB5b3VyIHZhY2F0aW9uIHBsYW5zIHdpdGggbWUgYmVmb3JlIGJvb2tpbmcgeW91ciB0cmlwLgpDb25zdWx0IHdpdGggbWUgYW5kIG5vdGlmeSBmZWxsb3cgbGFiIG1lbWJlcnMgaW4gYWR2YW5jZSBvZiBhbnkgcGxhbm5lZCBhYnNlbmNlcywgd2l0aCBhcyBtdWNoIGFkdmFuY2Ugbm90aWNlIGFzIHBvc3NpYmxl4oCUYXQgbGVhc3QgdHdvIHdlZWtzJyBub3RpY2Ugb3IgbW9yZSBpZiBmZWFzaWJsZS4KUGxlYXNlIHBsYW4gdGhhdCBpZiB5b3UgYXJlIGF3YXksIG90aGVycyB3aWxsIG5lZWQgdG8gdGFrZSBvdmVyIHlvdXIgcmVzcG9uc2liaWxpdGllcywgc28gcGxhbm5pbmcgZm9yIGFkZXF1YXRlIGxlYWQgdGltZSBhbmQgdHJhaW5pbmcgbWF5IGJlIG5lY2Vzc2FyeS4KUGxlYXNlIGRpc2N1c3Mgd2l0aCBtZSBpZiB5b3UgcGxhbiB0byB0YWtlIGEgc3VtbWVyIGludGVybnNoaXAgb3IgYm9vdGNhbXAuCgojIyBNZWV0aW5ncyB7I21lZXRpbmdzfQoKVGhlcmUgYXJlIHRocmVlIHR5cGVzIG9mIG1lZXRpbmdzOiBsYWIgbWVldGluZ3MsIGdyb3VwIG1lZXRpbmdzLCBhbmQgb25lLW9uLW9uZSBtZWV0aW5ncy4KTGFiIG1lZXRpbmdzIG9jY3VyIHdlZWtseS4KQWxsIGxhYiBtZW1iZXJzIGFyZSBleHBlY3RlZCB0byBhdHRlbmQuClR5cGljYWwgZm9ybXMgb2YgbGFiIG1lZXRpbmdzIGFyZSBhcnRpY2xlIGRpc2N1c3Npb25zIChsZWQgYnkgb25lIGxhYiBtZW1iZXIpLCBwcm9qZWN0IHByZXNlbnRhdGlvbnMsIHRhbGtzIGdpdmVuIGJ5IGd1ZXN0IHNwZWFrZXJzLCBhbmQgcHJvZmVzc2lvbmFsIGRldmVsb3BtZW50IHdvcmtzaG9wcy4KWW91IHNob3VsZCByZWFkIHRoZXNlIG1hdGVyaWFscyBpbiBhZHZhbmNlLgpZb3UgYXJlIGV4cGVjdGVkIHRvIGNvbnRyaWJ1dGUgd2l0aCBxdWVzdGlvbnMgYW5kL29yIGNvbW1lbnRzIGR1cmluZyBsYWIgbWVldGluZ3MuClRoZSB1bml2ZXJzaXR5IGFuZCBvdXIgbGFiIHVzZSBPdXRsb29rIGZvciBzY2hlZHVsaW5nOyB5b3UgYXJlIGV4cGVjdGVkIHRvIGtlZXAgeW91ciB1bml2ZXJzaXR5IE91dGxvb2sgYWNjb3VudCB1cCB0byBkYXRlLgoKT25lLW9uLW9uZSBtZWV0aW5ncyBhcmUgNDUtbWluLCB3ZWVrbHkgbWVldGluZ3MgYmV0d2VlbiBlYWNoIHRyYWluZWUgYW5kIG1lLgpZb3UgY2FuIGFsc28gc2NoZWR1bGUgb25lLW9mZiBvbmUtb24tb25lIG1lZXRpbmdzIHdpdGggbWUuCldoZW4gc2NoZWR1bGluZyB5b3VyIG9uZS1vbi1vbmUgYW5kIG90aGVyIG1lZXRpbmdzLCBzZW5kIGFsbCBvZiB5b3VyIGF2YWlsYWJsZSB0aW1lcyAoYmV0d2VlbiA5YW0gYW5kIDVwbSksIG5vdCBqdXN0IHlvdXIgcHJlZmVycmVkIHRpbWVzIQpZb3UgbWF5IGluZGljYXRlIHdoaWNoIG9mIHlvdXIgYXZhaWxhYmxlIHRpbWVzIGFyZSBwcmVmZXJyZWQgb3IgbGVzcyBwcmVmZXJyZWQuCk9uZS1vbi1vbmUgbWVldGluZ3MgYXJlIGRlc2lnbmVkIGZvciB1cyB0byBkaXNjdXNzIGFueSB0cmFpbmluZyBhbmQgcmVzZWFyY2gtcmVsYXRlZCBpc3N1ZXMgaW4gZGV0YWlsIGFuZCB0byBmb3JtIHBsYW5zIGZvciB0aGUgbmVhciBmdXR1cmUsIGluIGFkZGl0aW9uIHRvIGFueSBjaGFsbGVuZ2VzLgpNYWtlIHN1cmUgdGhhdCB5b3UgYWxzbyB1c2UgdGhpcyB0aW1lIHRvIGNvbW11bmljYXRlIG5ldyBpZGVhcyB0aGF0IHlvdSBoYXZlIGFib3V0IHlvdXIgd29yayBhbmQgY2hhbGxlbmdlcyB0aGF0IHlvdSBhcmUgZmFjaW5nLgpSZW1lbWJlcjogSSBjYW5ub3QgYWRkcmVzcyBvciBhZHZpc2UgYWJvdXQgaXNzdWVzIHRoYXQgeW91IGRvIG5vdCBicmluZyB0byBteSBhdHRlbnRpb24uCkkgZXhwZWN0IHRyYWluZWVzIHRvIGF0dGVuZCBhbGwgdGhlaXIgb25lLW9uLW9uZSBtZWV0aW5ncy4KSSB1bmRlcnN0YW5kIHRoYXQgc29tZXRpbWVzIHRoZXJlIGlzIG5vdGhpbmcgdG8gcmVwb3J0LCBzbyBvY2Nhc2lvbmFsIGNhbmNlbGxhdGlvbiBpcyBmaW5lLgpUaGF0IHNhaWQsIG5vdGUgdGhhdCBldmVuIGlmIHlvdSBoYXZlIG5vdGhpbmcgdG8gcmVwb3J0LCBzb21ldGltZXMgaGF2aW5nIHRoZSBtZWV0aW5nIGNhbiBzdGlsbCBiZSBhZHZhbnRhZ2VvdXMgYW5kIGl0IG1heSBiZSB3b3J0aCBvdXIgdGltZSB0byBzdGlsbCBjaGVjayBpbi4KRG8gbm90IGNhbmNlbCBtZWV0aW5ncyB3aXRoIG1lIGlmIHlvdSBmZWVsIHRoYXQgeW91IGhhdmUgbm90IG1hZGUgYWRlcXVhdGUgcHJvZ3Jlc3Mgb24geW91ciByZXNlYXJjaDsgdGhlc2UgbWlnaHQgYmUgdGhlIG1vc3QgY3JpdGljYWwgdGltZXMgdG8gbWVldCB3aXRoIGEgbWVudG9yLgoKWW91IGFyZSBleHBlY3RlZCB0byBhc2sgcXVlc3Rpb25zIGFuZCB0YWtlIG5vdGVzIGR1cmluZyBtZWV0aW5ncy4KQmUgcmVzcGVjdGZ1bCBvZiBteSB0aW1lIGFuZCBtYWtlIGFueSBuZWNlc3NhcnkgY2hhbmdlcyAodG8gcGFwZXJzLCBhbmFseXNpcyBjb2RlLCBldGMuKSBhZnRlciB0aGUgbWVldGluZywgYmFzZWQgb24geW91ciBub3RlcyBhbmQgb24geW91ciBvd24gdGltZeKAlHVubGVzcyBJIGFtIHdvcmtpbmcgb24gdGhlIGRvY3VtZW50IGRpcmVjdGx5LgoKQmVzaWRlcyBtZWV0aW5ncywgdHJhaW5lZXMgYXJlIHdlbGNvbWUgdG8gZHJvcCBieSBteSBvZmZpY2UgYW55dGltZSB0byBkaXNjdXNzIHJlc2VhcmNoLCB0cmFpbmluZywgYW5kIGFkbWluaXN0cmF0aW9uLXJlbGF0ZWQgaXNzdWVzLgpJIGhhdmUgYW4gb3Blbi1kb29yIHBvbGljeTogbXkgZG9vciBpcyBhbHdheXMgb3BlbiAoZmlndXJhdGl2ZWx5IHNwZWFraW5nKS4KSSB3aWxsIGJlIGhhcHB5IHRvIG1lZXQgd2l0aCB5b3UgYXMgbG9uZyBhcyBJIGRvIG5vdCBoYXZlIGFub3RoZXIgb2JsaWdhdGlvbi4KTXkgb2ZmaWNlIGFuZCBwaG9uZSBudW1iZXIgaXM6IFtzZWUgW215IFVuaXZlcnNpdHkgcGFnZV0oaHR0cHM6Ly9wc3ljaG9sb2d5LnVpb3dhLmVkdS9wZW9wbGUvaXNhYWMtcGV0ZXJzZW4pXS4KTXkgY2VsbCBpczogW2JsaW5kZWQgZm9yIHRoZSBpbnRlcm5ldOKApmp1c3QgYXNrXS4KCiMjIE9wZW4gc2NpZW5jZSB7I29wZW5TY2llbmNlfQoKV2UsIGFzIGEgbGFiLCB2YWx1ZSBhbmQgc3RyaXZlIHRvIGFkdmFuY2UgdGhlIG1pc3Npb24gb2YgW29wZW4gc2NpZW5jZV0oaHR0cHM6Ly9vbmxpbmVsaWJyYXJ5LndpbGV5LmNvbS9kb2kvMTAuMTAwMi9pY2QuMjMxNSkgdG8gaW1wcm92ZSB0aGUgYWNjZXNzaWJpbGl0eSwgcmVwcm9kdWNpYmlsaXR5LCBhbmQgcmVwbGljYWJpbGl0eSBvZiBzY2llbmNlLgpBcyBzdWNoLCBhbGwgbGFiIG1lbWJlcnMgYXJlIGV4cGVjdGVkIHRvIGNvbmR1Y3QgcmVzZWFyY2ggdHJhbnNwYXJlbnRseSBhbmQgdG8gcHJvbW90ZSByZXByb2R1Y2liaWxpdHkuClRoaXMgaW5jbHVkZXMsIGJ1dCBpcyBub3QgbGltaXRlZCB0bywgcHJlLSBvciBjby1yZWdpc3RlcmluZyBzdHVkaWVzLCBzaGFyaW5nIGFuYWx5c2lzIHNjcmlwdHMgYW5kIGRhdGEsIHVzaW5nIHZlcnNpb24gY29udHJvbCAoR2l0TGFiKSwgc3VibWl0dGluZyBbcHJlcHJpbnRzXShodHRwczovL3BzeWFyeGl2LmNvbSkgd2hlbiBzdWJtaXR0aW5nIGEgbWFudXNjcmlwdCB0byBhIGpvdXJuYWwsIGFuZCBwcm92aWRpbmcgc3VwcG9ydCBmb3Igb3RoZXIgbGFicycgYXR0ZW1wdHMgdG8gcmVwbGljYXRlIGFuZCByZXByb2R1Y2Ugb3VyIGZpbmRpbmdzLgpXZSB1c2UgR2l0TGFiIGZvciB2ZXJzaW9uIGNvbnRyb2wuCk91ciBsYWIncyB0ZW1wbGF0ZSBmb3IgR2l0TGFiIHJlcG9zaXRvcmllcyBjYW4gYmUgZm91bmQgaGVyZTogaHR0cHM6Ly9yZXNlYXJjaC1naXQudWlvd2EuZWR1L1BldGVyc2VuTGFiL1RlbXBsYXRlLgpPdXIgbGFiJ3MgdGVtcGxhdGUgZm9yIHByb2plY3RzIG9uIHRoZSBPcGVuIFNjaWVuY2UgRnJhbWV3b3JrIChPU0YpIGNhbiBiZSBmb3VuZCBoZXJlW14yXTogaHR0cHM6Ly9vc2YuaW8vNHc5c3YuCkZvbGxvdyBvdXIgW2xhYidzIGd1aWRlIGZvciBvcGVuIHNjaWVuY2VdKG9wZW5TY2llbmNlLmh0bWwpLgoKIyMgQ29sbGFib3JhdGlvbnMgeyNjb2xsYWJvcmF0aW9uc30KCkFsbCBsYWIgbWVtYmVycyBhcmUgZW5jb3VyYWdlZCB0byBleHBsb3JlIGNvbGxhYm9yYXRpb24gb3Bwb3J0dW5pdGllcyBib3RoIHdpdGhpbiBhbmQgb3V0c2lkZSBvZiB0aGUgbGFiLgpJIGFzayB0cmFpbmVlcyB0byAoMSkgcmVzcGVjdCB5b3VyIGNvbGxhYm9yYXRvcnMnIHRpbWUgYW5kIHJlc291cmNlcywgYW5kICgyKSBpbmZvcm0gbWUgaWYgeW91IGFyZSBzZWVraW5nIGNvbGxhYm9yYXRpb25zIHdpdGggb3IgYXJlIGNvbGxhYm9yYXRpbmcgd2l0aCByZXNlYXJjaGVycyAoZS5nLiwgZmluaXNoaW5nIHlvdXIgcHJvamVjdHMgaW4geW91ciBwcmV2aW91cyBsYWIpIG91dHNpZGUgb2YgdGhlIGxhYi4KVHJhaW5lZXMgYXJlIGV4cGVjdGVkIHRvIGhhdmUgYSBmaXJtIGZvb3RpbmcgaW4gdGhlaXIgcmVzZWFyY2ggcHJvZ3Jlc3MgaW4gdGhpcyBsYWIgYmVmb3JlIGNvbGxhYm9yYXRpbmcgd2l0aCBvdXRzaWRlIHJlc2VhcmNoZXJzLgpJIGV4cGVjdCB5b3UgdG8gZGlzY3VzcyBvcmRlciBvZiBhdXRob3JzaGlwIHdpdGggbWUgZWFybHkgb24gd2hlbiB0aGVyZSBhcmUgcG90ZW50aWFsIGNvbGxhYm9yYXRvcnMuCgojIyBSZWFkaW5ncyBhbmQgcmVzb3VyY2VzIHsjcmVhZGluZ3NSZXNvdXJjZXN9CgpUcmFpbmVlcyBhcmUgZXhwZWN0ZWQgdG8gcmVhZCBmb3VuZGF0aW9uYWwgYXJ0aWNsZXMgcmVsYXRpbmcgdG8gdGhlIGxhYiBhbmQgdG8gdGhlaXIgcmVzZWFyY2ggaW50ZXJlc3RzLgpFeGFtcGxlcyBvZiBmb3VuZGF0aW9uYWwgYXJ0aWNsZXMgYXJlIG9uIHRoZSBsYWIncyBHb29nbGUgRHJpdmUgZm9sZGVyIG9mIFtwcmltZXIgYXJ0aWNsZXNdKGh0dHBzOi8vZHJpdmUuZ29vZ2xlLmNvbS9kcml2ZS91LzAvZm9sZGVycy8xWGxQVzM3QURmbjZpQ0N2cHQzczZWd1d4T01La2pKTnUpW14yXS4KSSBhbHNvIGV4cGVjdCB5b3UgdG8gcmVhZCBvbmUgb2YgdGhlIHByaW1lciBhcnRpY2xlcyBieSBTY2h3YXJ0eiAoMjAwOCkgdGl0bGVkLCAiW1RoZSBJbXBvcnRhbmNlIG9mIFN0dXBpZGl0eSBpbiBTY2llbnRpZmljIFJlc2VhcmNoXShodHRwczovL2RyaXZlLmdvb2dsZS5jb20vZmlsZS9kLzFLaHlxWDUxWkwzVUVUMEhqRFJtdUFpeC1vN21lOUNxdy92aWV3P3VzcD1zaGFyaW5nKS4iCkl0IGlzIGltcG9ydGFudCB0byBmZWVsIGNvbWZvcnRhYmxlIGZlZWxpbmcgc3R1cGlkIGluIHNjaWVuY2U7IGlmIHlvdSAoYW5kIGFueSBvZiB1cykgZG8gbm90IGZlZWwgc3R1cGlkLCB3ZSBhcmUgbm90IGRvaW5nIHNjaWVuY2UgcmlnaHQhCkl0IGlzIGFsc28gaW1wb3J0YW50IHRvIHJlYWQgYmFja2dyb3VuZCBpbmZvcm1hdGlvbiBhbmQgcHJvdG9jb2xzIGFib3V0IG91ciBwcm9qZWN0cy4KCldlIGhhdmUgYSBsaXN0IG9mIGxhYiByZXNvdXJjZXMgZm9yIGdyYWR1YXRlIHN0dWRlbnRzIG9uIG91ciBMYWIncyBUcmVsbG8gYm9hcmQgY2FsbGVkICJHcmFkIFN0dWRlbnRzIlteMl06IGh0dHBzOi8vdHJlbGxvLmNvbS9iL1dqcWJncFc5L2dyYWQtc3R1ZGVudHMuClRoZSBUcmVsbG8gYm9hcmQgaW5jbHVkZXMgaXRlbXMgZm9yIG9uYm9hcmRpbmcsIGltcG9ydGFudCBmb3VuZGF0aW9uYWwgc2tpbGxzIGZvciBzY2llbnRpZmljIHRyYWluaW5nLCB1c2VmdWwgc29mdHdhcmUsIGFuZCByZWxldmFudCBqb3VybmFscywgb3JnYW5pemF0aW9ucywgY29uZmVyZW5jZXMsIGFuZCBsaXN0c2VydnMuCkl0IGFsc28gaW5jbHVkZXMgdHJhaW5pbmcgbWF0ZXJpYWxzIGZvciB2YXJpb3VzIHNvZnR3YXJlIChlLmcuLCBSRURDYXAsIEdpdExhYiwgUikuCkFuZCBpdCBpbmNsdWRlcyBhIGxpc3Qgb2YgdGhlIHRpbWVzIHRvIGJsb2NrIG9mZiBkdXJpbmcgdGhlIHNlbWVzdGVyLgoKRGF0YSBhbmFseXNpcyBndWlkZXMgZm9yIHRoZSBsYWIgYXJlIGF2YWlsYWJsZSBoZXJlOiBodHRwczovL2RldnBzeWxhYi5naXRodWIuaW8vRGF0YUFuYWx5c2lzCgojIyBUcmFpbmluZyB7I3RyYWluaW5nfQoKSSBleHBlY3QgeW91IHRvIHRha2Ugb3duZXJzaGlwIG92ZXIgeW91ciBlZHVjYXRpb25hbCBleHBlcmllbmNlcy4KWW91ciBlZHVjYXRpb24gaXMgeW91ciByZXNwb25zaWJpbGl0eeKAlHlvdSBoYXZlIHRoZSBwcmltYXJ5IHJlc3BvbnNpYmlsaXR5IGZvciB0aGUgc3VjY2Vzc2Z1bCBjb21wbGV0aW9uIG9mIHlvdXIgZGVncmVlLgpJIGVuY291cmFnZSB5b3UgdG8gZm9sbG93IHRoZSBbcmVjb21tZW5kZWQgdGltZWxpbmVzXSgjdGltZWxpbmVzKSBmb3IgW3Jlc2VhcmNoXSgjdGltZWxpbmUtcmVzZWFyY2gpLCBbY291cnNld29ya10oI3RpbWVsaW5lLWNvdXJzZXdvcmspLCBhbmQgW2NsaW5pY2FsIHdvcmtdKCN0aW1lbGluZS1jbGluaWNhbCkgKHNlZSB0aGUgQXBwZW5kaXgpLiAKWW91IHNob3VsZCBtYWludGFpbiBhIGhpZ2ggbGV2ZWwgb2YgcHJvZmVzc2lvbmFsaXNtLCBzZWxmLW1vdGl2YXRpb24sIGVuZ2FnZW1lbnQsIHNjaWVudGlmaWMgY3VyaW9zaXR5LCBhbmQgZXRoaWNhbCBzdGFuZGFyZHMuCllvdSBzaG91bGQgYWxzbyBiZSBrbm93bGVkZ2VhYmxlIG9mIGFuZCBjb21wbHkgd2l0aCBhbGwgcG9saWNpZXMsIGRlYWRsaW5lcywgYW5kIHJlcXVpcmVtZW50cyBvZiB0aGUgZ3JhZHVhdGUgcHJvZ3JhbSwgdGhlIGdyYWR1YXRlIGNvbGxlZ2UsIGFuZCB0aGUgdW5pdmVyc2l0eS4KRnVydGhlciwgSSBleHBlY3QgeW91IHRvIGFjdGl2ZWx5IGN1bHRpdmF0ZSB5b3VyIHByb2Zlc3Npb25hbCBkZXZlbG9wbWVudC4KVUkgaGFzIG91dHN0YW5kaW5nIHJlc291cmNlcyBpbiBwbGFjZSB0byBzdXBwb3J0IHByb2Zlc3Npb25hbCBkZXZlbG9wbWVudCBmb3Igc3R1ZGVudHMsIGluY2x1ZGluZyBwcm9mZXNzaW9uYWwgZGV2ZWxvcG1lbnQgc2VtaW5hcnMgYW5kIHdvcmtzaG9wcyBvbiB0b3BpY3Mgc3VjaCBhcyBvcmFsIGNvbW11bmljYXRpb24sIHNjaWVudGlmaWMgd3JpdGluZywgY29sbGFib3JhdGl2ZSByZXNlYXJjaCwgc3RhdGlzdGljYWwgbWV0aG9kcywgdGVhY2hpbmcsIGFuZCBtZW50b3JpbmcuCkkgZXhwZWN0IHlvdSB0byB0YWtlIGFkdmFudGFnZSBvZiB0aGVzZSByZXNvdXJjZXMuCllvdSBhcmUgYWxzbyBlbmNvdXJhZ2VkIHRvIHRhbGsgd2l0aCBvdGhlciBtZW1iZXJzIG9mIHRoZSBsYWIsIG90aGVyIHN0dWRlbnRzLCBhbmQgZmFjdWx0eSB0byBsZWFybiB3YXlzIG9mIGVmZmVjdGl2ZWx5IG5hdmlnYXRpbmcgZ3JhZHVhdGUgc2Nob29sLgoKQXZvaWQgY2xpbmljYWwgY2xpcXVlLWlzaG5lc3MgYW5kIGluc3VsYXJpdHkuClRoZSBtb3N0IGlubm92YXRpdmUgc2NpZW5jZSB0cmFuc2NlbmRzIHRyYWRpdGlvbmFsIGJvdW5kYXJpZXMuCkkgZXhwZWN0IHlvdSB0byBzcGVuZCB0aW1lIGFuZCB0YWxrIHNjaWVuY2Ugd2l0aCBncmFkdWF0ZSBzdHVkZW50cyBhbmQgZmFjdWx0eSBpbiBhcmVhcyBvdXRzaWRlIG9mIGNsaW5pY2FsIChlLmcuLCBCQ04sIGNvZ25pdGlvbinigJRib3RoIHRvIGJyb2FkZW4geW91ciBwZXJzcGVjdGl2ZXMgYW5kIHRvIGluY29ycG9yYXRlIGJhc2ljIHNjaWVuY2UgcGVyc3BlY3RpdmVzIGludG8geW91ciB3b3JrLCB3aGlsZSBhbHNvIGJlaW5nIGEgZ29vZCBEZXBhcnRtZW50YWwgY2l0aXplbi4KQ2xpbmljYWwgc3R1ZGVudHMgYXQgc29tZSBwcm9ncmFtcyB3cm9uZ2x5IHRoaW5rIHRoZXkgYXJlIHNwZWNpYWwgYW5kIHRoaW5rIG9mIHRoZWlyIHdvcmsgYXMgc3VwZXJpb3IgdG8gYmFzaWMgc2NpZW5jZS4KQ2xpbmljYWwgc2NpZW5jZSBpcyBub3QgYSByZXNlYXJjaCBhcmVh4oCUY2xpbmljYWwgc2NpZW5jZSB1c2VzIGJhc2ljIHNjaWVuY2UgKGUuZy4sIGNvZ25pdGl2ZSwgc29jaWFsLCBkZXZlbG9wbWVudGFsLCBiaW9sb2dpY2FsIHNjaWVuY2UpIGluIHJpZ29yb3VzIHdheXMgdG8gYW5zd2VyIGNsaW5pY2FsbHkgcmVsZXZhbnQgcXVlc3Rpb25zLgoKSSBleHBlY3QgYWxsIHRyYWluZWVzIHRvIGNvbXBseSB3aXRoIHRoZWlyIHJlc3BlY3RpdmUgdHJhaW5pbmcgcGxhbnMgKGUuZy4sIHRyYWluaW5nIHBsYW5zIG9mIHlvdXIgZGVncmVlIHByb2dyYW0pLCBzdWNoIGFzIHRha2luZyByZXF1aXJlZCBjb3Vyc2VzLCBtYWludGFpbmluZyBwYXNzaW5nIGdyYWRlcywgZnVsZmlsbGluZyB0ZWFjaGluZyBhc3Npc3RhbnQgZHV0aWVzLCBjbGluaWNhbCB0cmFpbmluZywgYW5kIG9yZ2FuaXppbmcgY29tbWl0dGVlIG1lZXRpbmdzLgpZb3UgYXJlIGV4cGVjdGVkIHRvIGF0dGVuZCBhbmQgYWN0aXZlbHkgcGFydGljaXBhdGUgaW4gYWxsIGdyb3VwIG1lZXRpbmdzIGFuZCBpbiBzZW1pbmFycyB0aGF0IGFyZSBwYXJ0IG9mIHlvdXIgZWR1Y2F0aW9uYWwgcHJvZ3JhbS4KSSBleHBlY3QgeW91IHRvIGF0dGVuZCBjb25mZXJlbmNlcywgQ2xpbmljYWwgUm91bmRzLCBEZXZlbG9wbWVudGFsIERpc2N1c3Npb24sIERhdGEgVGVhbSBhbmQgbGFiIG1lZXRpbmdzLCBEZUxUQSBDZW50ZXIsIEZyaWRheSBjb2xsb3F1aWEgc2VyaWVzLCBhbmQgb3RoZXIgcmVsZXZhbnQgYnJvd25iYWdzIHN1Y2ggYXMgQ29nbml0aW9uLCBCZWhhdmlvcmFsICYgQ29nbml0aXZlIE5ldXJvc2NpZW5jZSAoQkNOKSwgYW5kIHRoZSBJb3dhIE5ldXJvc2NpZW5jZSBJbnN0aXR1dGUgKElOSSkuCldoZW4gd2UgZ28gdG8gY29uZmVyZW5jZXMsIEkgd2lsbCBpbnRyb2R1Y2UgeW91IHRvIG15IHByb2Zlc3Npb25hbCBuZXR3b3JrIGFuZCBlbmNvdXJhZ2UgeW91IHRvIGJ1aWxkIHNraWxscyBpbiBuZXR3b3JraW5nLgoKV2Ugd2lsbCBkaXNjdXNzIHlvdXIgdHJhaW5pbmcgYW5kIGNhcmVlciBkZXZlbG9wbWVudCBwbGFucy4KQWxsIHByb2dyYW0gcmVxdWlyZW1lbnRzIGFyZSBpbiB0aGUgRGVwYXJ0bWVudCdzIFtHcmFkdWF0ZSBIYW5kYm9va10oaHR0cHM6Ly9wc3ljaG9sb2d5LnVpb3dhLmVkdS9zaXRlcy9wc3ljaG9sb2d5LnVpb3dhLmVkdS9maWxlcy8yMDIzLTA4L0dyYWRIYW5kYm9vazIwMjMlMjAtJTIwQXVndXN0LnBkZikgYW5kL29yIHRoZSBHcmFkdWF0ZSBDb2xsZWdlJ3MgW01hbnVhbCBvZiBSdWxlcyBhbmQgUmVndWxhdGlvbnNdKGh0dHBzOi8vZ3JhZC51aW93YS5lZHUvYWNhZGVtaWNzL21hbnVhbCkuCkkgaW5jbHVkZSBhIHN1Z2dlc3RlZCB0aW1lbGluZSBmb3IgeW91ciByZXNlYXJjaCwgY2xpbmljYWwgdHJhaW5pbmcsIGFuZCBjb3Vyc2V3b3JrIFtiZWxvd10oI3RpbWVsaW5lcykuClBsZWFzZSBjb25zdWx0IHdpdGggbWUgYmVmb3JlIHNlbGVjdGluZyB5b3VyIGNvdXJzZXMsIGNsaW5pY2FsIHByYWN0aWNhLCBhbmQgb3RoZXIgdGltZS1pbnRlbnNpdmUgdHJhaW5pbmcgZXhwZXJpZW5jZXMuCgpGb3Igc29tZSBzdHVkZW50cywgdGhlcmUgbWF5IGJlIHJlbGV2YW50IHRyYWluaW5nIGZlbGxvd3NoaXBzLgpGb3IgaW5zdGFuY2UsIHRoZSBCZWhhdmlvcmFsLUJpb21lZGljYWwgSW50ZXJmYWNlIFRyYWluaW5nIFByb2dyYW0gKEJCSVApIHByb3ZpZGVzIHRyYWluaW5nIGluIGJpby1tZWRpY2FsIHJlc2VhcmNoLgoKVGhpcyBpcyBhIHJlc2VhcmNoLW9yaWVudGVkIHByb2dyYW07IHlvdSBhcmUgZXhwZWN0ZWQgdG8gcHJpb3JpdGl6ZSByZXNlYXJjaCByZWxhdGl2ZSB0byB5b3VyIG90aGVyIG9ibGlnYXRpb25zLgpJZiB5b3UgYXJlIGdldHRpbmcgYWxsIEFzIGluIGNsYXNzZXMsIHlvdSBhcmUgc3BlbmRpbmcgdG9vIG11Y2ggdGltZSBvbiBjb3Vyc2V3b3JrIQpbR3JhZGVzIGluIGdyYWQgc2Nob29sIGRvbid0IG1hdHRlcl0oaHR0cHM6Ly9waGRjb21pY3MuY29tL2NvbWljcy9hcmNoaXZlLnBocD9jb21pY2lkPTQ2OSkgKGFzIGxvbmcgYXMgeW91IHBhc3MgeW91ciBjbGFzc2VzOyBhcmNoaXZlZCBhdCBodHRwczovL3Blcm1hLmNjL0tEVTItNzlKWiksIGFuZCB0aGUgc29vbmVyIHlvdSBmaWd1cmUgdGhhdCBvdXQsIHRoZSBiZXR0ZXIgb2ZmIGFuZCBtb3JlIHByb2R1Y3RpdmUgeW91IHdpbGwgYmUuCkluc3RlYWQgb2YgZm9jdXNpbmcgeW91ciBsZWFybmluZyBvbiBjb3Vyc2V3b3JrLCBsZWFybiBieSBkb2luZy4KVGFrZSB3aGF0IHlvdSBuZWVkIGZyb20gY2xhc3NlcyB0byBhZHZhbmNlIHlvdXIgcmVzZWFyY2ggcHJvZ3JhbS4KClBsZWFzZSByZWZlciB0byB0aGUgQ2xpbmljIE1hbnVhbCBmb3IgZ3VpZGVsaW5lcyByZWdhcmRpbmcgZmFjZS10by1mYWNlIGhvdXJzIChvbiB0aGUgY2xpbmljIGRyaXZlW14zXTogYFxcaW93YS51aW93YS5lZHVcc2hhcmVkXENMQVNcRGVwYXJ0bWVudGFsXFBCU1xDbGluaWNcQ2xpbmljIE1hbnVhbFxgKS4KRm9yIGNsaW5pY2FsIHN0dWRlbnRzLCBpdCBpcyBpbXBvcnRhbnQgdG8gcmVndWxhcmx5IHRyYWNrIHlvdXIgY2xpbmljYWwgZXhwZXJpZW5jZXMgYW5kIGhvdXJzIHRvIGVuc3VyZSB0aGF0IHlvdSBhcmUgbWVldGluZyBhcHByb3ByaWF0ZSBtaWxlc3RvbmVzIGluIHlvdXIgdHJhaW5pbmcuClRoZSBwcm9ncmFtIGhhcyBhbiBpbnN0aXR1dGlvbmFsIGFjY291bnQgZm9yIFtUaW1lMlRyYWNrXShodHRwczovL3RpbWUydHJhY2suY29tKS4KWW91IGFyZSBleHBlY3RlZCB0byB1c2UgaXQgdG8gdHJhY2sgaG91cnMgYW5kIGFyZSBleHBlY3RlZCB0byBzdGF5IGNhdWdodCB1cCBpbiB5b3VyIHRyYWNraW5nLgpXZSB3aWxsIGRpc2N1c3MgeW91ciBwbGFucyBmb3IgY2xpbmljYWwgdHJhaW5pbmcgYW5kIHByYWN0aWN1bSBvcHBvcnR1bml0aWVzIGR1cmluZyBvdXIgcmVndWxhciBpbmRpdmlkdWFsIG1lZXRpbmdzLgpJIHdpbGwgYWxzbyBwcm92aWRlIGNsaW5pY2FsIHN1cGVydmlzaW9uIG9mIHNvbWUgb2YgeW91ciBjYXNlcyBhcyBwYXJ0IG9mIHRoZSBTZWFzaG9yZSBDbGluaWMuCkkgYW0gYSBsaWNlbnNlZCBjbGluaWNhbCBwc3ljaG9sb2dpc3QsIHNvIGFzc2Vzc21lbnQgaG91cnMgaW4gbXkgcmVzZWFyY2ggbGFiIGNvdW50IGFzIGNsaW5pY2FsIGhvdXJzLgoKIyMgU29mdHdhcmUgeyNzb2Z0d2FyZX0KCk15IGxhYiBwcmltYXJpbHkgdXNlcyBgUmAgZm9yIGRhdGEgbWFuYWdlbWVudCBhbmQgYW5hbHlzaXMgYmVjYXVzZSBpdCBpcyBmcmVlLCBvcGVuIHNvdXJjZSwgb3BlbiBwbGF0Zm9ybSwgY29kZS1iYXNlZCAod2hpY2ggaW5jcmVhc2VzIHNoYXJlLWFiaWxpdHkgYW5kIHJlcHJvZHVjaWJpbGl0eSBvZiBhbmFseXNlcyksIGFuZCBzdXBwb3J0cyBhZHZhbmNlZCBzdGF0aXN0aWNzIGFuZCBzdGF0ZS1vZi10aGUtYXJ0IGdyYXBoaWNzIGZyb20gcGFja2FnZXMgZGVzaWduZWQgYnkgc3RhdGlzdGljYWwgZXhwZXJ0cyBhbGwgb3ZlciB0aGUgd29ybGQsIGFuZCB0byB3aGljaCBhbnlvbmUgKGluY2x1ZGluZyB5b3UpIGNhbiBjb250cmlidXRlLgpXZSBhbHNvIHVzZSBgTUFUTEFCYCBmb3IgcHJvY2Vzc2luZyBvZiBldmVudC1yZWxhdGVkIHBvdGVudGlhbCBkYXRhIGFuZCBgTXBsdXNgIGZvciBzdHJ1Y3R1cmFsIGVxdWF0aW9uIG1vZGVsaW5nLgpZb3UgYXJlIGVuY291cmFnZWQgdG8gbGVhcm4gYFJgIGFuZCBhbnkgb3RoZXIgc3BlY2lhbGl6ZWQgc29mdHdhcmUgdGhhdCB3aWxsIGFsbG93IHlvdSB0byBhbnN3ZXIgdGhlIHJlc2VhcmNoIHF1ZXN0aW9ucyB5b3UgYXJlIHB1cnN1aW5nLgpJZiB0aGVyZSdzIGFub3RoZXIgdG9vbCBvciBzb2Z0d2FyZSBwYWNrYWdlIHRoYXQgY2FuIGRvIHNvbWV0aGluZyBlYXNpZXIsIGJldHRlciwgbW9yZSBlZmZpY2llbnRseSwgb3Igd2l0aCBncmVhdGVyIHJlcHJvZHVjaWJpbGl0eSB0aGFuIHdoYXQgd2UgYXJlIHVzaW5nLCBmZWVsIGZyZWUgdG8gdXNlIGl04oCUdGhvdWdoIEkgbWF5IG5vdCBiZSBhYmxlIHRvIHByb3ZpZGUgZm9ybWFsIGd1aWRhbmNlLgpGb3IgaW5zdGFuY2UsIGBQeXRob25gIGlzIGEgZnJlZSBwcm9ncmFtbWluZyBsYW5ndWFnZSB0aGF0IGlzIGVtZXJnaW5nIGFzIGEgbmljZSBjb21wbGVtZW50IHRvIGBSYCBmb3Igc3RhdGlzdGljYWwgcHJvZ3JhbW1pbmcuCk5vIG1hdHRlciB3aGljaCBzb2Z0d2FyZSB5b3UgdXNlLCB5b3Ugc2hvdWxkIGJlIGFibGUgdG8gdW5kZXJzdGFuZCBhbmQgZXhwbGFpbiB3aGF0IHRoZSBhbmFseXNpcyBpcyBkb2luZyBhbmQgYmUgYWJsZSB0byBpbnRlcnByZXQgYW5kIGV4cGxhaW4gdGhlIG91dHB1dC4KCiMjIEJlc3QgcHJhY3RpY2VzIHsjYmVzdFByYWN0aWNlc30KCkkgZXhwZWN0IHlvdSB0byBmb2xsb3cgb3BlbiBzY2llbmNlIHByYWN0aWNlcyAoZGVzY3JpYmVkIGFib3ZlKS4KSSBleHBlY3QgeW91IHRvIGNvbW1lbnQgeW91ciBjb2RlIHNvIHRoYXQgb3RoZXJzIGNhbiB1bmRlcnN0YW5kIGl0IChhbmQgc28geW91IGNhbiB1bmRlcnN0YW5kIGl0IHdoZW4geW91IGdvIGJhY2sgdG8gaXQgNSsgeWVhcnMgbGF0ZXIpLgpJIGV4cGVjdCB5b3UgdG8gdXNlIHZlcnNpb24gY29udHJvbCAoZ2l0IHdpdGggR2l0TGFiKSB3aXRoIGFsbCBwcm9qZWN0cyBhbmQgdG8gc2F2ZSB5b3VyIGxhYiBwcm9qZWN0cyBpbiBhIHJlcG8gb24gdGhlIFtsYWIncyBHaXRMYWIgcGFnZV0oaHR0cHM6Ly9yZXNlYXJjaC1naXQudWlvd2EuZWR1L1BldGVyc2VuTGFiKS4KQ29tbWl0IGFuZCBwdXNoIHlvdXIgd29yayB0byB0aGUgR2l0TGFiIHJlcG8gb2Z0ZW4uClVzaW5nIHZlcnNpb24gY29udHJvbCBwcm92aWRlcyBtYW55IGJlbmVmaXRzOiAoYSkgaXQgcHJvdmlkZXMgYmFja3VwcyBvZiBhbGwgZmlsZXMgaW4gdGhlIGNsb3VkLCAoYikgaXQgYWxsb3dzIHlvdSB0byBhY2Nlc3MgdGhlIGZpbGVzIGluIHRoZSBjbG91ZCBmcm9tIGFueSBjb21wdXRlciB3aXRoIGFjY2VzcyB0byB0aGUgaW50ZXJuZXQsIGV2ZW4gaWYgeW91IGFyZSBhd2F5IGZyb20geW91ciBsb2NhbCBjb21wdXRlciwgKGMpIGl0IHByb3ZpZGVzIGhpc3Rvcnkgb2YgYWxsIChjb21taXR0ZWQpIGNoYW5nZXMgbWFkZSB0byBhbGwgZmlsZXMuCklmIHlvdSBtYWtlIGEgbWlzdGFrZSBpbiB5b3VyIGNvZGUsIHlvdSBjYW4gZWFzaWx5IHJldmVydCB0byBhIHByaW9yIHZlcnNpb24gYmVjYXVzZSB5b3UgdG9vayBzbmFwc2hvdHMgKGNvbW1pdHMpIG9mIHlvdXIgZmlsZXMhCihkKSBJdCBhbGxvd3MgeW91IHRvIHdyaXRlIGNsZWFuZXIgY29kZSBiZWNhdXNlIHlvdSBkbyBub3QgbmVlZCB0byBrZWVwIGFsbCB0aGUgb2xkLCAiY29tbWVudGVkIG91dCIgbGluZXMgb2YgY29kZSwgKGUpIGl0IGhlbHBzIHdpdGggcHJvamVjdCBvcmdhbml6YXRpb247IHlvdSBubyBsb25nZXIgaGF2ZSB0byBrZWVwIGZpbGVzIG9yIGZvbGRlcnMgbmFtZWQgInByb2plY3Rfb2xkIiAob3IgInByb2plY3RfMiIsICJbcHJvamVjdF9maW5hbF0oaHR0cHM6Ly9waGRjb21pY3MuY29tL2NvbWljcy9hcmNoaXZlLnBocD9jb21pY2lkPTE1MzEpIiAoYXJjaGl2ZWQgYXQgaHR0cHM6Ly9wZXJtYS5jYy8zUTVELVhLVEopLCBvciB3aGF0ZXZlciksIChmKSBpdCBrZWVwcyBhbGwgZmlsZXMgZm9yIHRoZSBwcm9qZWN0IHNlbGYtY29udGFpbmVkLCB3aGljaCBoZWxwcyBpbmNyZWFzZSByZXByb2R1Y2liaWxpdHksIGFuZCAoZykgaXQgYWxsb3dzIGVhc2llciBjb2xsYWJvcmF0aW9uIHdpdGggb3RoZXJzIG9uIHRoZSBwcm9qZWN0LgoKIyMgT3RoZXIgcmVzcG9uc2liaWxpdGllcyB7I290aGVyUmVzcG9uc2liaWxpdGllc30KCkkgZXhwZWN0IHlvdSB0byBiZSBhIHRlYW0gcGxheWVyLCB0byBjb250cmlidXRlIHRvIHRoZSB0ZWFtLCBhbmQgdG8gdGFrZSBhIGxlYWRlcnNoaXAgcm9sZSBpbiB0aGUgbGFiLgpTdHJpdmUgdG8gYmUgdGhlIHZlcnkgYmVzdCBsYWIgY2l0aXplbiBhbmQgY2l0aXplbiBvZiB0aGUgRGVwYXJ0bWVudCBhbmQgVW5pdmVyc2l0eS4KUmVnYXJkbGVzcyBvZiB5b3VyIHNvdXJjZSBvZiBmdW5kaW5nIChlLmcuLCB0ZWFjaGluZyBhc3Npc3RhbnRzaGlwLCByZXNlYXJjaCBhc3Npc3RhbnRzaGlwLCBmZWxsb3dzaGlwL2dyYW50KSwgeW91IGNhbiBleHBlY3QgbGFiLXJlbGF0ZWQgYXNzaWdubWVudHMgdGhhdCBhcmUgZm9yIHRoZSBiZXR0ZXJtZW50IG9mIHRoZSB0ZWFtLgpGb3IgaW5zdGFuY2UsIEkgZXhwZWN0IHlvdSB0byBzdXBlcnZpc2UgYSBjb2RpbmcgdGFzay4KSSBleHBlY3QgeW91IHRvIGxlYXJuIHRoZSBsYWIgcHJvY2VkdXJlcyBhbmQgcHJvdG9jb2xzLgpZb3Ugc2hvdWxkIGJlIGFibGUgdG8gdHJhaW4gcmVzZWFyY2ggYXNzaXN0YW50cyBvciBsYWIgc3RhZmYgb24gdmFyaW91cyBwcm9jZWR1cmVzLgpJIGV4cGVjdCB5b3UgdG8gd29yayB0byBlbnN1cmUgcXVhbGl0eSBjb250cm9sIG9mIGxhYiBwcm9jZWR1cmVzIHNvIHRoYXQgd2UgYXJlIGNvbGxlY3RpbmcgYW5kIHByb2Nlc3NpbmcgaGlnaC1xdWFsaXR5IGRhdGEgaW4gYW4gZWZmaWNpZW50IHdheS4KSSBleHBlY3QgeW91IHRvIGhlbHAgb3RoZXIgdGVhbSBtZW1iZXJzLCBpbmNsdWRpbmcgdW5kZXJncmFkdWF0ZSByZXNlYXJjaCBhc3Npc3RhbnRzIHdpdGggaW5kZXBlbmRlbnQgcmVzZWFyY2ggcHJvamVjdHMsIEhvbm9ycyBwcm9qZWN0cyBhbmQgdGhlc2VzLCBqb2Igb3IgZ3JhZHVhdGUgYXBwbGljYXRpb25zL2ludGVydmlld3MsIGV0Yy4KRG9pbmcgc28gd2lsbCBoZWxwIHlvdSBidWlsZCBpbXBvcnRhbnQgc2tpbGxzIGluIG1lbnRvcmluZy4KClJlZ2FyZGxlc3Mgb2YgeW91ciBzb3VyY2Ugb2YgZnVuZGluZywgeW91IGFyZSBleHBlY3RlZCB0byBzcGVuZCBtb3N0IG9mIHlvdXIgdGltZSBkb2luZyBsYWItcmVsYXRlZCByZXNlYXJjaC4KSWYgeW91IGFyZSBmdW5kZWQgb24gYSByZXNlYXJjaCBhc3Npc3RhbnRzaGlwIGZyb20gdGhlIGxhYiwgSSBleHBlY3QgeW91IHdpbGwgc3BlbmQgYXQgbGVhc3QgMjAgaG91cnMgKGZvciBhIGZ1bGwtdGltZSBhc3Npc3RhbnRzaGlwOyBhdCBsZWFzdCAxMCBob3VycyBmb3IgYSBoYWxmLXRpbWUgYXNzaXN0YW50c2hpcCkgZG9pbmcgbGFiLXJlbGF0ZWQgcmVzZWFyY2ggZnJvbSB0aGUgcmVsZXZhbnQgZ3JhbnQocykgYW5kIGxhYi1hc3NpZ25lZCB3b3JrIHRoYXQgaXMgc2VwYXJhdGUgZnJvbSBjb3Vyc2V3b3JrLCBjbGluaWNhbCB3b3JrLCB3b3JrIHRvd2FyZCBwcm9ncmFtIHJlcXVpcmVtZW50cyAoZS5nLiwgQ29tcHMgZXhhbXMpLCBvdGhlciByZXNlYXJjaC1yZWxhdGVkIHdvcmssIGFuZCBvdGhlciBlbmRlYXZvcnMuClRoaXMgaXMgYW4gZXRoaWNhbCBvYmxpZ2F0aW9uIGdpdmVuIG91ciBmZWRlcmFsIHNvdXJjZXMgb2YgZnVuZGluZy4KSWYgeW91IGFyZSB1bmFibGUgdG8gY29tbWl0IHRvIGEgZnVsbCByZXNlYXJjaCBsb2FkIChhbmQgdGhlcmVmb3JlIHdvdWxkIG5vdCBiZSBhYmxlIHRvIG1lZXQgdGhlIGV4cGVjdGF0aW9ucyBvZiBhIHJlc2VhcmNoIGFzc2lzdGFudHNoaXApLCB5b3Ugc2hvdWxkIHRlbGwgbWUgYmVmb3JlIGFzc2lzdGFudHNoaXBzIGFyZSBhc3NpZ25lZCwgc28geW91IGNhbiBiZSBnaXZlbiBhIHRlYWNoaW5nIGFzc2lzdGFudHNoaXAgb3IgYW5vdGhlciBzb3VyY2Ugb2YgZnVuZGluZy4KTmV2ZXJ0aGVsZXNzLCBldmVuIHdpdGggYSB0ZWFjaGluZyBhc3Npc3RhbnRzaGlwLCB5b3UgYXJlIGV4cGVjdGVkIHRvIHNwZW5kIG1vc3Qgb2YgeW91ciB0aW1lIGRvaW5nIGxhYi1yZWxhdGVkIHJlc2VhcmNoLgpZb3Ugc2hvdWxkIG5vdCBzcGVuZCBtb3JlIHRoYW4gMTAgaG91cnMgcGVyIHdlZWsgZG9pbmcgdGVhY2hpbmctcmVsYXRlZCB3b3JrIGZvciBhIGhhbGYtdGltZSB0ZWFjaGluZyBhc3Npc3RhbnRzaGlwLCBhbmQgbm90IG1vcmUgdGhhbiAyMCBob3VycyBmb3IgYSBmdWxsLXRpbWUgdGVhY2hpbmcgYXNzaXN0YW50c2hpcCAoYW5kIGdlbmVyYWxseSBtdWNoIGxlc3MgdGhhbiB0aGF0KS4KCllvdSBzaG91bGQgdGFsayB3aXRoIG1lIGFuZCBnZXQgbXkgYXBwcm92YWwgYmVmb3JlIGRvaW5nIG9yIGFkZGluZyBhbnkgZXh0ZXJuYWwgcHJhY3RpY2EuClBlciBsYWIgYW5kIHByb2dyYW0gZXhwZWN0YXRpb25zLCB5b3Ugc2hvdWxkIG5vdCBzcGVuZCBtb3JlIHRoYW4gMS41IGZ1bGwgZGF5cyAoaS5lLiwgMTIgaG91cnMpIGRvaW5nIGNsaW5pYy1yZWxhdGVkIHdvcmsgcGVyIHdlZWsuCkRvIG5vdCBmb2N1cyB0b28gbXVjaCBvbiBjbGluaWNhbCBob3VyczsgUGguRC4gc3R1ZGVudHMgZnJvbSBub24tY2xpbmljYWwgc2NpZW5jZSBwcm9ncmFtcyBhbmQgUHN5LkQuIHN0dWRlbnRzIHdpbGwgaGF2ZSB3YXkgbW9yZSBjbGluaWNhbCBob3VycyB0aGFuIHlvdeKAlHlvdSBhcmUgbm90IGNvbXBldGluZyB3aXRoIHRoZW0gZm9yIHRoZSBzYW1lIHR5cGVzIG9mIHNpdGVzLgpZb3Ugd2lsbCBiZSBtb3N0IGNvbXBldGl0aXZlIGF0IFtjbGluaWNhbCBzY2llbmNlIGludGVybnNoaXAgc2l0ZXNdKGh0dHBzOi8vd3d3LmFjYWRwc3ljaGNsaW5pY2Fsc2NpZW5jZS5vcmcvaW50ZXJuc2hpcC1wcm9ncmFtcy5odG1sKSAoYXJjaGl2ZWQgYXQgaHR0cHM6Ly9wZXJtYS5jYy8yVlJLLUpSTVEpLCB3aGljaCBjYXJlIG11Y2ggbW9yZSBhYm91dCB0aGUgKnF1YWxpdHkqIG9mIHRyYWluaW5nIHRoYW4gdGhlICpxdWFudGl0eSogb2YgdHJhaW5pbmcuCkFuZCBVSSBoYXMgdG9wLW5vdGNoIGNsaW5pY2FsIHRyYWluaW5nLgpJbnRlcm5zaGlwIHNpdGVzIGFsc28gY2FyZSBoZWF2aWx5IGFib3V0IHNjaWVudGlmaWMgcHJvZHVjdGl2aXR5IGluY2x1ZGluZyBwdWJsaWNhdGlvbnMgKFtMdW5kIGV0IGFsLiwgMjAxNl0oaHR0cHM6Ly9wc3ljbmV0LmFwYS5vcmcvcmVjb3JkLzIwMTUtNTcwNzMtMDAxKSksIGFuZCB0aGlzIGlzIGV2ZW4gbW9yZSB0cnVlIGZvciBjbGluaWNhbCBzY2llbmNlIGludGVybnNoaXAgc2l0ZXMuCkkgaGFkIGZvdXIgZmlyc3QtYXV0aG9yZWQgcHVibGljYXRpb25zIChuaW5lIHRvdGFsKSBhbmQgYW4gTlJTQSB3aGVuIEkgYXBwbGllZCBmb3IgaW50ZXJuc2hpcCBhbmQgcmVjZWl2ZWQgMTMgaW50ZXJ2aWV3IGludml0YXRpb25zIG91dCBvZiAxNSBzaXRlcy4KSSBhbSBoYXBweSB0byBzaGFyZSBteSBwcmVwYXJhdGlvbiwgYXBwbGljYXRpb24sIGFuZCBpbnRlcnZpZXcgbWF0ZXJpYWxzIGV0Yy4KZm9yIGludGVybnNoaXBzLCBqb2JzLCBldGMuIGFuZCB0byB3b3JrIHdpdGggeW91IHRvIG1ha2UgdGhlbSBhcyBzdHJvbmcgYXMgcG9zc2libGUuCgpQbGVhc2UgZG8gbm90IGhpZGUgaW4geW91ciBvZmZpY2U7IGdldCBvdXQgYW5kIG1lZXQgcGVvcGxlIGF0IGdyb3VwIGFuZCBkZXBhcnRtZW50YWwgZXZlbnRzLgpJZiBhIGNvbGxvcXVpdW0gaXMgZ2l2ZW4gaW4gYW4gYXJlYSBpbiB3aGljaCB5b3UgaGF2ZSBhIHJlc2VhcmNoIGludGVyZXN0LCBzaWduIHVwIHRvIG1lZXQgd2l0aCB0aGUgc3BlYWtlci4KR28gdXAgdG8gc3BlYWtlcnMgYWZ0ZXIgdGFsa3MsIGludHJvZHVjZSB5b3Vyc2VsZiwgYW5kIGV4cHJlc3MgaW50ZXJlc3QgaW4gdGhlaXIgd29yayBieSBhc2tpbmcgcXVlc3Rpb25zLgpOZXR3b3JraW5nIHNraWxscyBhcmUgaW1wb3J0YW50IGFuZCBjYW4gb2Z0ZW4gbGVhZCB0byBqb2Igb3Bwb3J0dW5pdGllcy4KCiMjIENhcmVlciBkZXZlbG9wbWVudCB7I2NhcmVlckRldmVsb3BtZW50fQoKSSBzdHJvbmdseSBiZWxpZXZlIHRoYXQgdGhlIGxhYiBncm93cyBiZXR0ZXIgd2l0aCBlYWNoIHRyYWluZWUgYWNoaWV2aW5nIHRoZWlyIGNhcmVlciBnb2Fscy4KSSByZXNwZWN0IGFuZCBzdXBwb3J0IGVhY2ggdHJhaW5lZSdzIGNhcmVlciBjaG9pY2UgYW5kIHVuZGVyc3RhbmQgdGhhdCB0aGluZ3MgY2FuIGNoYW5nZSBvdmVyIHRpbWUuCkF0IHRoZSBzYW1lIHRpbWUsIGtlZXAgaW4gbWluZCB0aGF0IHRoaXMgaXMgYSBbcmVzZWFyY2gtb3JpZW50ZWQgdHJhaW5pbmcgcHJvZ3JhbV0oaHR0cHM6Ly9wc3ljaG9sb2d5LnVpb3dhLmVkdS9ncmFkdWF0ZSkgYW5kIGlzIGJlc3QgYWxpZ25lZCB3aXRoIGNhcmVlcnMgaW4gd2hpY2ggcmVzZWFyY2ggd2lsbCBiZSBhIGtleSBjb21wb25lbnQuCkZvciBwcm9zcGVjdGl2ZSBncmFkdWF0ZSBzdHVkZW50cywgaWYgeW91IGhhdmUgZ29hbHMgb2YgYmVpbmcgYSBjbGluaWNpYW4sIEkgd291bGQgZGlzc3VhZGUgeW91IGZyb20gam9pbmluZyBvdXIgcHJvZ3JhbSBhbmQgdGhpcyBsYWI7IHlvdSB3b3VsZCBub3QgYmUgaGFwcHkgaGVyZS4KCldlIHdpbGwgZGlzY3VzcyB5b3VyIGNhcmVlciBkZXZlbG9wbWVudCBwbGFucyBhbmQgaG93IEkgY2FuIGJlc3Qgc3VwcG9ydCB0aGVtLgpEdXJpbmcgZWFjaCBGYWxsIHNlbWVzdGVyLCBJIGV4cGVjdCB5b3UgdG8gY29tcGxldGUgYW4gSW5kaXZpZHVhbCBEZXZlbG9wbWVudCBQbGFuIChbaHR0cHM6Ly9teWlkcC5zY2llbmNlY2FyZWVycy5vcmddKGh0dHBzOi8vbXlpZHAuc2NpZW5jZWNhcmVlcnMub3JnKTsgYXJjaGl2ZWQgYXQgaHR0cHM6Ly9wZXJtYS5jYy9NVDI3LUNQUDIpLCBhbmQgdG8gcmV2aWV3IGFuZCBkaXNjdXNzIHRoZSByZXN1bHRzIHdpdGggbWUuCkkgZXhwZWN0IHlvdSB0byBpbmZvcm0gbWUgaWYgdGhlcmUgaXMgYW55IGNoYW5nZSBpbiB5b3VyIGNhcmVlciBwbGFucyBzbyB0aGF0IHlvdXIgbGFiIGFjdGl2aXRpZXMgY2FuIGJlIGJldHRlciBhbGlnbmVkIHRvIHlvdXIgbmV3IGdvYWxzLgpJbiBhZGRpdGlvbiB0byBhY2FkZW1pYyBjYXJlZXJzIChlLmcuLCByZXNlYXJjaC90ZWFjaGluZy9jbGluaWNhbCB3b3JrIGF0IFIxIHVuaXZlcnNpdHksIGFjYWRlbWljIG1lZGljYWwgY2VudGVyLCBvciBsaWJlcmFsIGFydHMgY29sbGVnZSksIEkgc3VwcG9ydCBwbGFucyBmb3IgaW5kdXN0cnkgYW5kIG5vbi1hY2FkZW1pYyBjYXJlZXJzIChlLmcuLCBkYXRhIHNjaWVuY2UsIGNvbnN1bHRpbmcsIGdvdmVybm1lbnQsIE5HTzsgdGhlc2UgYXJlIGp1c3QgZXhhbXBsZXPigJR0aGVyZSBhcmUgbWFueSBvdGhlcnMpLgpZb3UgYXJlIHdlbGNvbWUgdG8gZ2V0IHRoZSB0cmFpbmluZyB5b3UgbmVlZCwgcHJvdmlkZWQgdGhhdCB5b3UgbWFpbnRhaW4gZ29vZCBwcm9ncmVzcyBvbiB5b3VyIGRlZ3JlZS1yZWxhdGVkIHRyYWluaW5nIGFuZCByZXNlYXJjaC4KU2VlayB0aGUgZXhwZXJpZW5jZSBvZiBmYWN1bHR5LCBwcm9mZXNzaW9uYWxzLCBwb3N0LWRvY3MsIGFuZCBvdGhlciBzdHVkZW50cyB0byBoZWxwIHlvdSBvdXQuCgpJZiB5b3Ugd2FudCBhbiBhY2FkZW1pYyBqb2IsIEkga25vdyB3aGF0IGl0IHRha2VzIHRvIGdldCBvbmUgKGluIHRlcm1zIG9mIHB1YmxpY2F0aW9ucywgZ3JhbnRzLCBldGMuKSwgc28ganVzdCBhc2suCkkgYW0gYWxzbyBoYXBweSB0byB0YWxrIHdpdGggeW91IGFib3V0IHdoYXQgYW4gUjEgYWNhZGVtaWMgam9iIGlzIGxpa2UgKGUuZy4sIHNldHRpbmcgdXAgYW5kIHJ1bm5pbmcgYSBsYWIsIHRlYWNoaW5nKeKAlEkgbG92ZSBteSBqb2IgYW5kIGhhdmUgYSBwYXNzaW9uIGZvciB0aGUgd29yayB3ZSBkby4KSSBnZXQgdG8gYmUgcGFydCBvZiBhbiBpbnZpZ29yYXRpbmcgaW50ZWxsZWN0dWFsIGVudmlyb25tZW50IGluIHdoaWNoIEkgZ2V0IHRvIGxlYXJuIGV2ZXJ5IGRheSwgZ2V0IHRvIGJlIGFyb3VuZCBleGNpdGluZyBpZGVhcyBhbmQgd29ybGQtcmVub3duZWQgZXhwZXJ0cyBjb25kdWN0aW5nIGN1dHRpbmctZWRnZSByZXNlYXJjaCwgYW5kIGhhdmUgdGhlIGludGVsbGVjdHVhbCBmcmVlZG9tIHRvIGdldCBwYWlkIHRvIHN0dWR5IHdoYXRldmVyIEkgd2FudCB0byBzdHVkeS4KSSBjYW5ub3QgaW1hZ2luZSBhbnl0aGluZyBiZXR0ZXIuClRoYXQgc2FpZCwgdGhlcmUgYXJlIG5vdCBlbm91Z2ggZmFjdWx0eSBwb3NpdGlvbnMgZm9yIGFsbCBQaC5ELiBncmFkdWF0ZXMgYW5kIGl0IGlzIG5vdCB0aGUgYmVzdCBmaXQgZm9yIGV2ZXJ5b25lLgpJIHdpbGwgd29yayB3aXRoIHlvdSB0byBmaW5kIHRoZSBjYXJlZXIgdGhhdCBpcyB0aGUgcmlnaHQgZml0IGZvciB5b3UuCgojIyBNeSBhcHByb2FjaCB0byBtZW50b3JzaGlwIHsjYXBwcm9hY2hUb01lbnRvcnNoaXB9CgpBcyBhIGNsaW5pY2FsLWRldmVsb3BtZW50YWwgcHN5Y2hvbG9naXN0LCBJIHRha2UgYSBkZXZlbG9wbWVudGFsIHBlcnNwZWN0aXZlIHRvIG1lbnRvcnNoaXAuCkVhcmx5IG9uIGluIHlvdXIgdHJhaW5pbmcsIEkgYWltIHRvIHByb3ZpZGUgc3VmZmljaWVudCBzdHJ1Y3R1cmUgYW5kIHNjYWZmb2xkaW5nLgpBcyB5b3UgZGV2ZWxvcCBwcm9maWNpZW5jeSBpbiBhIHNraWxsLCBJIHN0cml2ZSB0byB3aXRoZHJhdyB0aGUgc2NhZmZvbGRzIHNvIHRoYXQgeW91IGRldmVsb3AgaW5kZXBlbmRlbmNlIGFuZCBhdXRvbm9teS4KVGhlIHNlY29uZCBhcHByb2FjaCB0byBteSBtZW50b3JzaGlwIHN0eWxlIGlzIGFuIGVtcGhhc2lzIG9uIGxlYXJuaW5nIGJ5IGRvaW5nLgpJIGVuY291cmFnZSBzdHVkZW50cyB0byBsZWFybiBieSBhcHBseWluZyB0aGUgc2tpbGxzIHRvIHByb2plY3RzIHRoZXkgYXJlIHdvcmtpbmcgb24gaW4gdGhlIGxhYiwgcmF0aGVyIHRoYW4gcmVseWluZyBvbiBjb3Vyc2V3b3JrIGFuZCBvdGhlciBtZXRob2RzLgpJIHZpZXcgbXkgcm9sZSBhcyBmb3N0ZXJpbmcgeW91ciBwcm9mZXNzaW9uYWwgY29uZmlkZW5jZSBhbmQgZW5jb3VyYWdpbmcgeW91ciBjcml0aWNhbCB0aGlua2luZywgc2tlcHRpY2lzbSwgYW5kIGNyZWF0aXZpdHkuCgpEbyBub3QgaGVzaXRhdGUgdG8gYXNrIHF1ZXN0aW9ucyBpZiBJIGFtIGFyb3VuZDsgaXQgaXMgb2Z0ZW4gYmV0dGVyIHRvIGFzayBxdWVzdGlvbnMgdGhhbiB0byBtYWtlIGEgbWlzdGFrZSB0aGF0IGNvdWxkIGhhdmUgYmVlbiBlYXNpbHkgYXZvaWRlZC4KSSBhbSBwZXJpb2RpY2FsbHkgYXdheSwgYW5kIEkgZXhwZWN0IHlvdSB0byBnZXQgdGhpbmdzIGRvbmUgd2VsbCB3aXRob3V0IG1lLgpZb3UgYXJlIGVuY291cmFnZWQgdG8gYmUgaW5kZXBlbmRlbnQ7IGRvIG5vdCBiZSBhZnJhaWQgdG8gdHJ5IHRvIGRvIGRldGVjdGl2ZSB3b3JrIG9uIHlvdXIgb3duIGlmIEkgYW0gbm90IGFyb3VuZC4KVGhlcmUgaXMgYWxzbyBhIGJlbmVmaXQgdG8gbGVhcm5pbmcgYnkgdHJpYWwgYW5kIGVycm9yLgpXZSBoYXZlIGEgaGVscGZ1bCwgZXhwZXJpZW5jZWQgbGFiLCBzbyBrbm93IHRoYXQgcGVvcGxlIG90aGVyIHRoYW4gbWUgbWF5IGJlIGV4Y2VsbGVudCByZXNvdXJjZXMuCgpJbiBvcmRlciBmb3Igc3VwZXJ2aXNpb24gdG8gYmUgZWZmZWN0aXZlLCBJIGhvcGUgdGhhdCBvdXIgcmVsYXRpb25zaGlwIHdpbGwgaW5jbHVkZSBvcGVuIGNvbW11bmljYXRpb24gYW5kIHR3by13YXkgZmVlZGJhY2suCklmIHRoZXJlIGFyZSB3YXlzIEkgY2FuIGJlIGEgYmV0dGVyIG1lbnRvciBmb3IgeW91LCBwbGVhc2UgbGV0IG1lIGtub3cuCkkgdmFsdWUgb3Blbm5lc3MgdG8gbGVhcm5pbmcgYXMgYSBjb250aW51b3VzLCBkZXZlbG9wbWVudGFsLCBsaWZlLWxvbmcgcHJvY2VzcyBhbmQgSSB3aWxsIG1vZGVsIGFuZCBwcm9tb3RlIG9wZW5uZXNzIGFuZCByZWNlcHRpdml0eSB0byBmZWVkYmFjay4KSSBleHBlY3QgdGhhdCB0cmFpbmVlcyB3aWxsIGV4cHJlc3MgZGlzYWdyZWVtZW50cyBhbmQgZGlmZmVyZW5jZXMgaW4gb3BpbmlvbiB3aXRoIG1lLgpJIGRvIG5vdCB2aWV3IHByb2Zlc3Npb25hbCBkaXNhZ3JlZW1lbnRzIGFzIHBlcnNvbmFsOyB0aGUgYmVzdCBzY2llbmNlIGFyaXNlcyBvdXQgb2YgdGhlIGZyZWUgYW5kIGNvbnN0cnVjdGl2ZSBleGNoYW5nZSBvZiBtdWx0aXBsZSBwZXJzcGVjdGl2ZXMgYW5kIGlkZWFzLgpJIGV4cGVjdCB0aGF0IHRyYWluZWVzIHdpbGwgYXR0ZW1wdCB0byBhZGRyZXNzIGNvbmZsaWN0cyBpbiB0aGUgbWVudG9y4oCTbWVudGVlIHJlbGF0aW9uc2hpcC4KCkkgc3RyaXZlIHRvIGJ1aWxkIGFuZCB0byBzdXBwb3J0IGEgZGl2ZXJzZSB0ZWFtLCB0byB0cmVhdCBwZW9wbGUgZXF1aXRhYmx5LCBhbmQgdG8gYmUgaW5jbHVzaXZlIG9mIHBlb3BsZSBmcm9tIGFsbCBiYWNrZ3JvdW5kcy4KSWYgdGhlcmUgYXJlIHRoaW5ncyB0aGF0IHRoZSBsYWIgb3IgSSBjYW4gZG8gdG8gaGVscCB5b3Ugb3Igb3RoZXJzIGZlZWwgbW9yZSBpbmNsdWRlZCwgcGxlYXNlIGxldCBtZSBrbm93LgoKSSBhbSBjb21taXR0ZWQgdG8gbWVudG9yaW5nIHlvdSwgZXZlbiBhZnRlciB5b3UgbGVhdmUgbXkgbGFiLgpJIGFtIGNvbW1pdHRlZCB0byB5b3VyIGVkdWNhdGlvbiBhbmQgdHJhaW5pbmcgd2hpbGUgeW91IGFyZSBpbiBteSBsYWIsIGFuZCB0byBhZHZpc2luZyBhbmQgZ3VpZGluZyB5b3VyIGNhcmVlciBkZXZlbG9wbWVudOKAlHRvIHRoZSBleHRlbnQgeW91IHdpc2jigJRsb25nIGFmdGVyIHlvdSBsZWF2ZS4KSSB3aWxsIHByb3ZpZGUgaG9uZXN0IGxldHRlcnMgb2YgZXZhbHVhdGlvbiBmb3IgeW91IHdoZW4geW91IHJlcXVlc3QgdGhlbS4KCiMjIENvbW11bmljYXRpb24geyNjb21tdW5pY2F0aW9ufQoKRmVlbCBmcmVlIHRvIHVzZSBTbGFjayBmb3IgYnJpZWYgY29tbXVuaWNhdGlvbiB3aXRoIG1lLgpIb3dldmVyLCB3ZSBkbyBub3QgdXNlIGRpcmVjdCBtZXNzYWdlcyBpbiBTbGFjayAoc2VlIHRoZSBsYWIgbWFudWFsKS4KQWxsIFNsYWNrIGNvbW11bmljYXRpb24gc2hvdWxkIGJlIGluIHRlYW0tZmFjaW5nIGNoYW5uZWxzIHNvIG90aGVycyBjYW4gYmVuZWZpdCBmcm9tIHRoZSBpbmZvcm1hdGlvbiBhbmQgc28gd2UgY2FuIGdvIGJhY2sgYW5kIHJlZmVyZW5jZSBpdCBsYXRlci4KRm9yIGxvbmdlciBjb21tdW5pY2F0aW9uLCBwbGVhc2UgY2FsbCBvciBzdG9wIGJ5IG15IG9mZmljZS4KSSBmaW5kIHRoaXMgbXVjaCBtb3JlIGVmZmljaWVudCBhbmQgcGxlYXNhbnQgdGhhbiB3cml0aW5nIGFuZCByZWFkaW5nIGxlbmd0aHkgY29tbXVuaWNhdGlvbi4KRm9yIHNlbmRpbmcgbWFudXNjcmlwdHMsIHBlcnNvbmFsIGluZm9ybWF0aW9uLCBhbmQgbWVzc2FnZXMgdGhhdCBkbyBub3QgbmVlZCBhbiB1cmdlbnQgcmVzcG9uc2UsIHlvdSBtYXkgZW1haWwgbWUuClBsZWFzZSBsaW1pdCB5b3VyIHVzZSBvZiBlbWFpbCBhcyBtdWNoIGFzIHBvc3NpYmxlLgpbSSBoYXRlIGVtYWlsXShodHRwczovL3d3dy5jaHJvbmljbGUuY29tL2FydGljbGUvaXMtZW1haWwtbWFraW5nLXByb2Zlc3NvcnMtc3R1cGlkKSAoYXJjaGl2ZWQgYXQgaHR0cHM6Ly9wZXJtYS5jYy85WEpFLUJNOE4pOyB3ZSBnZXQgd2F5IHRvbyBtdWNoIG9mIGl0LCBpdCBpcyBpbXBlcnNvbmFsLCBpdCBkb2VzIG5vdCBjb21tdW5pY2F0ZSB0b25lIHdlbGwgKG9mdGVuIGxlYWRpbmcgdG8gbWlzaW50ZXJwcmV0YXRpb24gYW5kIHNvbWV0aW1lcyBodXJ0IGZlZWxpbmdzKSwgYW5kIGl0IGlzIGRpZmZpY3VsdCBmb3IgbWUgdG8gc3RheSBvbiB0b3Agb2YgbXkgaW5ib3guCkkgZW5jb3VyYWdlIHlvdSB0byBzdG9wIGJ5IG15IG9mZmljZSBvciB0byBjYWxsIG15IG9mZmljZSBwaG9uZSBpbnN0ZWFkIG9mIHJlbHlpbmcgb24gZW1haWwsIHdoZW5ldmVyIHBvc3NpYmxlLgoKV2hlbiB5b3UgY29udGFjdCBtZSBvciBzZW5kIG1lIG1hdGVyaWFscywgeW91IGNhbiBleHBlY3QgbWUgdG8gcmVzcG9uZCBwcm9tcHRseS4KTGlrZXdpc2UsIEkgZXhwZWN0IHlvdSB0byByZXNwb25kIHByb21wdGx5IHdoZW4gSSBvciBhbm90aGVyIGxhYiBtZW1iZXIgY29udGFjdHMgeW91IChpbiBtb3N0IGNhc2VzLCB3aXRoaW4gNDggaG91cnMpLgpJZiB5b3UgbmVlZCB0aW1lIHRvIGdhdGhlciBpbmZvcm1hdGlvbiBpbiByZXNwb25zZSB0byBhIFNsYWNrIG1lc3NhZ2Ugb3IgZW1haWwsIHBsZWFzZSBhY2tub3dsZWRnZSByZWNlaXB0IG9mIHRoZSBtZXNzYWdlIGFuZCBpbmRpY2F0ZSB3aGVuIHlvdSB3aWxsIGJlIGFibGUgdG8gcHJvdmlkZSB0aGUgcmVxdWVzdGVkIGluZm9ybWF0aW9uLgpBdCB0aW1lcywgSSBtYXkgY29udGFjdCB5b3UgYnkgZW1haWwgb3IgU2xhY2sgYWZ0ZXIgaG91cnMgKGlmIHRoYXQgaXMgd2hlbiBpdCBpcyBtb3N0IGNvbnZlbmllbnQsIHNvIHRoYXQgSSBkbyBub3QgZm9yZ2V0IHRvKS4KSG93ZXZlciwgeW91IGFyZSBcKm5vdFwqIGV4cGVjdGVkIHRvIHJlc3BvbmQgYWZ0ZXIgaG91cnMuCkkgd2lsbCBjYWxsIHlvdSBpZiBzb21ldGhpbmcgaXMgdXJnZW50LgoKQmUgbWluZGZ1bCBvZiB0aGUgY29uc3RyYWludHMgb24gbXkgdGltZS4KQWxsb3cgYSBtaW5pbXVtIG9mIG9uZSB3ZWVrIHByaW9yIHRvIHN1Ym1pc3Npb24gZGVhZGxpbmVzIGZvciBtZSB0byByZWFkIGFuZCByZXNwb25kIHRvIHNob3J0IG1hdGVyaWFscyBzdWNoIGFzIGNvbmZlcmVuY2UgYWJzdHJhY3RzIGFuZCB0aHJlZSB3ZWVrcyBmb3IgbWUgdG8gd29yayBvbiBtYW51c2NyaXB0cywgZ3JhbnQgcHJvcG9zYWxzLCBhbmQgbGV0dGVycyBvZiByZWNvbW1lbmRhdGlvbi4KUGxlYXNlIGRvIG5vdCBhc3N1bWUgSSBjYW4gcmVhZCBtYXRlcmlhbHMgd2l0aGluIGEgZGF5IG9yIHR3bywgZXNwZWNpYWxseSB3aGVuIEkgYW0gdHJhdmVsaW5nLgpQbGVhc2Ugb25seSBzZW5kIGRyYWZ0cyBvZiBtYW51c2NyaXB0cywgZ3JhbnQgcHJvcG9zYWxzLCBkaXNzZXJ0YXRpb25zLCBldGMuIHdoZW4gdGhleSBhcmUgeW91ciA8dT5iZXN0IHBvc3NpYmxlIHdvcms8L3U+ICh0aGUgSGVucnkgS2lzc2luZ2VyIGNyaXRlcmlvbikuClRoYXQgbWVhbnMgZ29pbmcgdGhyb3VnaCBtdWx0aXBsZSByZXZpc2lvbnMsIHJlYWRpbmcgaXQgb3V0IGxvdWQgdG8geW91cnNlbGYsIGV0Yy4KSGVyZSBpcyBhbiBleGNlcnB0IGFib3V0IERyLiBLaXNzaW5nZXIgKFtLcmF1c21hbiwgMjAyMV0oaHR0cHM6Ly93aWxkbGlmZS5vbmxpbmVsaWJyYXJ5LndpbGV5LmNvbS9kb2kvMTAuMTAwMi9qd21nLjIxOTkyKSk6Cgo+ICJIZW5yeSBLaXNzaW5nZXIsIGEgZm9ybWVyIFNlY3JldGFyeSBvZiBTdGF0ZSB1bmRlciBQcmVzaWRlbnQgTml4b24sIHVuZGVyc3Rvb2QgdGhlIGltcG9ydGFuY2Ugb2YgY29udGludWFsbHkgaW1wcm92aW5nIHdyaXRpbmcgc2tpbGxzLgo+IFdpbnN0b24gTG9yZCB3YXMgS2lzc2luZ2VyJ3Mgc3BlZWNoIHdyaXRlciBhbmQgZHVyaW5nIHRoZSBsYXRlIDE5NjBzIGFuZCBlYXJseSAxOTcwcywgTG9yZCBoYWQgYmVlbiB0YXNrZWQgd2l0aCB3cml0aW5nIGEgc3BlZWNoIGFib3V0IHRocmVlIGltcG9ydGFudCBmb3JlaWduIHBvbGljeSBwcm9qZWN0czogdGhlIG9wZW5pbmcgb2YgQ2hpbmEgdG8gdGhlIFdlc3QsIGJyaW5naW5nIHRoZSBWaWV0bmFtIFdhciB0byBhIGNsb3NlLCBhbmQgYW4gYXR0ZW1wdCB0byBpbXByb3ZlIHJlbGF0aW9ucyB3aXRoIHRoZSBSdXNzaWFucy4KV3JpdGluZyBhIHNwZWVjaCBmb3IgS2lzc2luZ2VyIHdhcyBub3QgYW4gZWFzeSBqb2IgYmVjYXVzZSBLaXNzaW5nZXIgd2FzIGEgc3BlZWNoIHdyaXRlciBoaW1zZWxmIGFuZCBoYXJzaCBjcml0aWMuCj4gCj4gVGhlIHN0b3J5IGdvZXMgdGhhdCBMb3JkIHByZXBhcmVkIGFuZCBzdWJtaXR0ZWQgYSBmaXJzdCBkcmFmdCBvZiBhIHNwZWVjaCB0byBLaXNzaW5nZXIgb25lIGV2ZW5pbmcuCj4gS2lzc2luZ2VyIHRoZW4gY2FsbGVkIExvcmQgdGhlIG5leHQgbW9ybmluZyBmb3IgZmVlZGJhY2sgb24gdGhlIHNwZWVjaCBhbmQgYXNrcyAiSXMgdGhpcyB0aGUgYmVzdCB5b3UgY2FuIGRvPyIKPiAKPiBMb3JkIHJlcGxpZXMgIkhlbnJ5LCBJIHRob3VnaHQgc28sIGJ1dCBJJ2xsIHRyeSBhZ2Fpbi4iCj4gCj4gTG9yZCB0aGVuIHdlbnQgYmFjayB0byB0aGUgZHJhd2luZyBib2FyZCwgdHdlYWtlZCwgcmV2aXNlZCwgYW5kIHJlc3VibWl0dGVkIGFub3RoZXIgZHJhZnQgYSBmZXcgZGF5cyBsYXRlci4KPiAKPiBUaGUgbmV4dCBkYXksIEtpc3NpbmdlciBjYWxsZWQgTG9yZCBpbnRvIGhpcyBvZmZpY2UgYW5kIGFnYWluIGFza2VkICJBcmUgeW91IHN1cmUgdGhpcyBpcyB0aGUgYmVzdCB5b3UgY2FuIGRvPyIKPiAKPiBMb3JkIGJlZ2FuIHRvIHF1ZXN0aW9uIGhpcyB3b3JrIGFuZCBzYWlkICJXZWxsLCBJIHJlYWxseSB0aG91Z2h0IHNvLiBJJ2xsIHRyeSBhZ2Fpbi4iCj4gCj4gQmVsaWV2ZSBpdCBvciBub3QsIHRoaXMgdW5jb21mb3J0YWJsZSBhbmQgcmVqZWN0aW5nIHByb2Nlc3Mgd2VudCBvbiBmb3IgOCBkcmFmdHMsIGVhY2ggdGltZSBLaXNzaW5nZXIgc3RhbmRpbmcgZmlybSB0byBoaXMgb3JpZ2luYWwgZmVlZGJhY2sgb2YgIklzIHRoaXMgdGhlIGJlc3QgeW91IGNhbiBkbz8iCj4gCj4gTG9yZCByZXR1cm5lZCB0byBLaXNzaW5nZXIncyBvZmZpY2Ugd2l0aCB0aGUgbm93IG5pbnRoIGRyYWZ0IGFuZCBhd2FpdGVkIGhpcyByZXNwb25zZS4KPiAKPiBTdXJlbHkgZW5vdWdoLCBLaXNzaW5nZXIgY2FsbGVkIExvcmQgaW4gdGhlIG5leHQgZGF5IGFuZCBhc2tzIGhpbSB0aGUgc2FtZSBxdWVzdGlvbiwgIklzIHRoaXMgdGhlIGJlc3QgeW91IGNhbiBkbz8iCj4gCj4gTG9yZCwgbm93IGNvbXBsZXRlbHkgZmVkIHVwLCBmdXJpb3VzbHkgcmVwbGllZCAiSGVucnkhIEkndmUgYmVhdGVuIG15IGJyYWlucyBvdXTigJR0aGlzIGlzIHRoZSBuaW50aCBkcmFmdCEgSSBrbm93IGl0J3MgdGhlIGJlc3QgSSBjYW4gZG87IEkgY2FuJ3QgcG9zc2libHkgaW1wcm92ZSBvbmUgbW9yZSB3b3JkISEhIgo+IAo+IEtpc3NpbmdlciB0aGVuIGxvb2tlZCBhdCBMb3JkIGFuZCBub25jaGFsYW50bHkgc2FpZCAiV2VsbCwgaW4gdGhhdCBjYXNlLCBub3cgSSdsbCByZWFkIGl0LiIKCiMjIExhYiBjdWx0dXJlIHsjbGFiQ3VsdHVyZX0KCldpdGhpbiBhIGxhYiBlbnZpcm9ubWVudCwgb2NjYXNpb25hbGx5IGNvbXBldGl0aXZlIHRob3VnaHRzIG9yIGVtb3Rpb25zIG1heSBhcmlzZS4KVGhpcyBsYWIgaXMgbm90IGEgcGxhY2UgZm9yIGNvbXBldGl0aW9uLCBidXQgY29sbGFib3JhdGlvbi4KV2UgYXJlIGEgZ3JvdXAgb2YgcmVzZWFyY2hlcnMgd29ya2luZyB0b3dhcmQgYSBjb21tb24gZ29hbCwgYW5kIGFsbCBtZW1iZXJzIGFyZSBlbmNvdXJhZ2VkIHRvIHdvcmsgdG9nZXRoZXIgY29sbGFib3JhdGl2ZWx5LgpBIHJpc2luZyB0aWRlIGxpZnRzIGFsbCBib2F0cy4KQ29tcGV0aXRpdmUgYmVoYXZpb3IgaXMgbm90IGNvbmR1Y2l2ZSB0byBhIHByb2R1Y3RpdmUgbGFib3JhdG9yeSwgYW5kIHRoaXMgc29ydCBvZiBiZWhhdmlvciB3aWxsIHN0cmljdGx5IG5vdCBiZSB0b2xlcmF0ZWQuCkRvIG5vdCBjb21wYXJlIHlvdXJzZWxmIHRvIG90aGVycy4KWW91IGFyZSBvbiB5b3VyIG93biBwYXRoLgpFYWNoIG1lbnRlZSBuZWVkcyBkaWZmZXJlbnQgdGhpbmdzLCBhbmQgSSB3aWxsIGRvIG15IGJlc3QgdG8gZ2V0IHRvIGtub3cgeW91IGFzIGFuIGluZGl2aWR1YWwsIGFuZCB5b3VyIGluZGl2aWR1YWwgc2tpbGxzLCBwcmVmZXJlbmNlcywgYW5kIGdvYWxzLgpDdWx0aXZhdGluZyBhIGNvbW1vbiB2YWx1ZSBvZiBodW1pbGl0eSBpcyBpbXBvcnRhbnQgaW4gcmVzZWFyY2gsIGJlY2F1c2Ugd2UgYXJlIGFsd2F5cyBhc2tpbmcgcXVlc3Rpb25zIHRvIHdoaWNoIHdlIGluaGVyZW50bHkgZG8gbm90IGtub3cgdGhlIGFuc3dlci4KRWxpdGlzdCBiZWhhdmlvciBpcyBub3QgY29uZHVjaXZlIHRvIGdyb3d0aCBhbmQgZGV2ZWxvcG1lbnQsIGFuZCBhcyBzdWNoLCBpcyBub3QgYXBwcm9wcmlhdGUgZm9yIHRoZSBsYWIgZW52aXJvbm1lbnQuClRoZSBsYWIgY3VsdHVyZSBpcyBvZiB1dG1vc3QgaW1wb3J0YW5jZSB0byBhIGhlYWx0aHksIGZ1bmN0aW9uYWwgZ3JvdXAsIGFuZCBwcm9mZXNzaW9uYWwgYmVoYXZpb3IgaXMgYXQgdGhlIGNlbnRlciBvZiBidWlsZGluZyB0aGlzIGN1bHR1cmUuCklmIHlvdSBoYXZlIGpvaW5lZCB0aGUgbGFiLCB5b3UgaGF2ZSBiZWVuIHNlbGVjdGVkIGFtb25nIG1hbnkgcXVhbGlmaWVkIGFwcGxpY2FudHMgZm9yIHRoaXMgcG9zaXRpb24uCkkgZW5jb3VyYWdlIHlvdSB0byBzaGFyZSB5b3VyIHRob3VnaHRzIGFuZCBpZGVhcyB3aXRoIHRoZSBsYWIuCktlZXBpbmcgdGhlbSB0byB5b3Vyc2VsZiB3b3VsZCBiZSBhIGRpc3NlcnZpY2UgdG8gdGhlIHRlYW0uCgojIyBQcm9mZXNzaW9uYWxpc20geyNwcm9mZXNzaW9uYWxpc219CgpTaG93IHVwIG9uIHRpbWUsIGZ1bGx5IHByZXBhcmVkIGZvciBtZWV0aW5ncy4KSWYgeW91IHdpbGwgbmVlZCB0byBtaXNzIGEgbWVldGluZywgbGV0IHRoZSByZWxldmFudCB0ZWFtIG1lbWJlcnMga25vdyBpbiBhZHZhbmNlLCB3aXRoIGFzIG11Y2ggYWR2YW5jZSBub3RpY2UgYXMgcG9zc2libGUuClVuZXhjdXNlZCBhYnNlbmNlcyBhcmUgbm90IGFjY2VwdGFibGUgaW4gYSBwcm9mZXNzaW9uYWwgZW52aXJvbm1lbnQuCgpJZiB5b3UgaGF2ZSBjcml0aWNhbCB0aG91Z2h0cyB0byBzaGFyZSB3aXRoIHNvbWVvbmUsIGRvIG5vdCBzZW5kIHRoZW0gaW4gU2xhY2sgb3IgaW4gZW1haWw7IGluc3RlYWQsIGNhbGwgb3IgdGFsayB0byB0aGUgcGVyc29uIGRpcmVjdGx5LgpCZSByZXNwb25zaXZlIHRvIGFkdmljZSBhbmQgY29uc3RydWN0aXZlIGNyaXRpY2lzbS4KVGhlIGZlZWRiYWNrIHlvdSBnZXQgZnJvbSBtZSwgeW91ciBjb2xsZWFndWVzLCB5b3VyIGNvbW1pdHRlZSBtZW1iZXJzLCB5b3VyIGNvdXJzZSBpbnN0cnVjdG9ycywgeW91ciBjbGluaWNhbCBzdXBlcnZpc29ycywgYW5kIHlvdXIgdGVhY2hpbmcgc3VwZXJ2aXNvcnMgaXMgaW50ZW5kZWQgdG8gaW1wcm92ZSB5b3VyIHdvcmsgYW5kIGhlbHAgeW91IHN1Y2NlZWQuCkRvIHlvdXIgYmVzdCBub3QgdG8gdGFrZSBpdCBwZXJzb25hbGx5LgpXZSBhbGwgaGF2ZSByb29tIHRvIGdyb3cuCgojIyBJbnRlcmFjdGlvbnMgd2l0aCBvdGhlcnMgeyNpbnRlcmFjdGlvbnN9CgpJIGV4cGVjdCBhbGwgbGFiIG1lbWJlcnMgdG8gcmVzcGVjdCBlYWNoIG90aGVyLgpGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBob3cgeW91IGFyZSBleHBlY3RlZCB0byBpbnRlcmFjdCB3aXRoIG90aGVycywgc2VlIHRoZSByZWxldmFudCBzZWN0aW9uIG9uICJJbnRlcmFjdGlvbnMgd2l0aCBPdGhlcnMiIGluIHRoZSBwYWdlIG9uIFtFeHBlY3RhdGlvbnMgZm9yIEV2ZXJ5b25lIGluIHRoZSBMYWJdKGV4cGVjdGF0aW9ucy1ldmVyeW9uZS5odG1sI2ludGVyYWN0aW9ucykuCgpJZiBhbm90aGVyIG1lbWJlciBvZiB0aGUgbGFiIGlzIG5vdCBjb21wbHlpbmcgd2l0aCB0aGVzZSBwb2xpY2llcywgcGxlYXNlIGZpcnN0IGF0dGVtcHQgdG8gc3BlYWsgdG8gdGhlIHBlcnNvbiBkaXJlY3RseS4KVGhlIEFQQSBDb2RlIG9mIEV0aGljcyBhZHZpc2VzIHRoYXQgdGhpcyBpcyBhIGZpcnN0IHN0ZXAgdG93YXJkIHJlc29sdXRpb24uCklmIHRoYXQgaXMgbm90IHBvc3NpYmxlLCBhcHByb3ByaWF0ZSwgb3IgcHJvdmVzIGluZWZmZWN0aXZlIChpLmUuLCBkb2VzIG5vdCBjaGFuZ2UgYmVoYXZpb3IpLCBwbGVhc2Ugc3BlYWsgdG8gbWUgYWJvdXQgdGhlIHByb2JsZW0gaW1tZWRpYXRlbHkuClBsZWFzZSBhbHNvIHNwZWFrIHRvIG1lIGlmIHlvdSB0aGluayB5b3UgaGF2ZSBhbiBpbnRlcnBlcnNvbmFsIGlzc3VlIHdpdGggbWUuCklmLCBhZnRlciBoYXZpbmcgdGFsa2VkIHdpdGggbWUsIHlvdSBmZWVsIHRoZSBpc3N1ZSB3aWxsIG5vdCBiZSByZXNvbHZlZCBhbmQgeW91IHdhbnQgdG8gc3BlYWsgdG8gc29tZW9uZSBlbHNlIHRvIGFkZHJlc3MgdGhlIGlzc3VlLCBmb2xsb3cgdGhlIGNoYWluIG9mIGNvbW1hbmQgYW5kIHRhbGsgdG8gdGhlIEFyZWEgQ29vcmRpbmF0b3IsIHRoZSBEaXJlY3RvciBvZiBHcmFkdWF0ZSBTdHVkaWVzLCBhbmQvb3IgdGhlIERlcGFydG1lbnRhbCBFeGVjdXRpdmUgT2ZmaWNlci4KVGhlIGNoYWluIG9mIGNvbW1hbmQgaXMgZGVwaWN0ZWQgaW4gdGhlIFtsYWIgb3JnYW5pemF0aW9uYWwgY2hhcnRdKG1hbnVhbC5odG1sI29yZ2FuaXphdGlvbmFsQ2hhcnQpLgoKIyMgUGVyZm9ybWFuY2UgaW1wcm92ZW1lbnQgcGxhbiB7I3BlcmZvcm1hbmNlSW1wcm92ZW1lbnRQbGFufQoKSW4gdGhlIGNhc2UgdGhhdCB5b3VyIHByb2dyZXNzIGlzIHVuc2F0aXNmYWN0b3J5IGZvciBhbiBleHRlbmRlZCBwZXJpb2QsIHdlIG5lZWQgdG8gZGlzY3VzcyBhbmQgaW1wbGVtZW50IGEgcGxhbiB0byBpbXByb3ZlIHlvdXIgcGVyZm9ybWFuY2UsIHdoaWNoIGV2ZW50dWFsbHkgd2lsbCBiZSBoZWxwZnVsIGZvciB5b3VyIGNhcmVlciBwbGFuLCB0b28uClRoZSBwZXJmb3JtYW5jZSBpbXByb3ZlbWVudCBwbGFuIHdpbGwgbGlrZWx5IGludm9sdmUgY2xvc2VyIG1vbml0b3Jpbmcgb2YgeW91ciBwcm9ncmVzcyBhbmQgcmVzZWFyY2ggYWN0aXZpdGllcyB1bnRpbCBhIHByZWRlZmluZWQgZ29hbCBpcyByZWFjaGVkIChlLmcuLCBwdWJsaXNoaW5nIGEgcGFwZXIpLgoKIyMgQWNjb21tb2RhdGlvbnMgeyNhY2NvbW1vZGF0aW9uc30KClNvbWV0aW1lcywgbGlmZSBldmVudHMgb3IgbWVkaWNhbC9oZWFsdGgtcmVsYXRlZCBpc3N1ZXMgbWF5IGltcGFjdCB5b3VyIGFiaWxpdHkgdG8gbWVldCBzb21lIG9mIHRoZSBsYWIgZXhwZWN0YXRpb25zLgpZb3UgYXJlIGVuY291cmFnZWQgdG8gc2VlayBtZWRpY2FsL3Byb2Zlc3Npb25hbCBoZWxwIGlmIHN1Y2ggaXNzdWVzIGFyaXNlLCBldmVuIGlmIHRoZSBhcHBvaW50bWVudHMgb2NjdXIgZHVyaW5nIHlvdXIgcmVndWxhciBsYWIgaG91cnMuCklmIHRoZXJlIGFyZSBsYWItcmVsYXRlZCBhY2NvbW1vZGF0aW9ucyB0aGF0IHdvdWxkIGJlIGhlbHBmdWwgdG8geW91LCBwbGVhc2UgbGV0IG1lIGtub3cgYW5kL29yIGNvbnRhY3QgdGhlIFVJIFN0dWRlbnQgRGlzYWJpbGl0eSBTZXJ2aWNlcyAoaHR0cHM6Ly9zZHMuc3R1ZGVudGxpZmUudWlvd2EuZWR1KS4KQW55IGRldmlhdGlvbnMgZnJvbSB0aGUgbGFiIGV4cGVjdGF0aW9ucyBzaG91bGQgYmUgYXBwcm92ZWQgYnkgbWUgb3Igc2hvdWxkIGNvaW5jaWRlIHdpdGggZG9jdW1lbnRhdGlvbiBmcm9tIFVJIEh1bWFuIFJlc291cmNlcyBvciBTdHVkZW50IERpc2FiaWxpdHkgU2VydmljZXMgb3V0bGluaW5nIGFsdGVyYXRpb25zLgpJZiB5b3UgaGF2ZSBjb25jZXJucyBhYm91dCBtZWV0aW5nIHlvdXIgcmVzcG9uc2liaWxpdGllcyBvciBleHBlY3RhdGlvbnMsIHBsZWFzZSB0YWxrIHRvIG1lLgoKIyMgV2VsbC1iZWluZyB7I3dlbGxiZWluZ30KCkxhc3QgYnV0IG5vdCBsZWFzdCwgeW91ciB3ZWxsLWJlaW5nIGlzIHZlcnkgaW1wb3J0YW50LgpJIHdlbnQgdGhyb3VnaCB0aGUgcHJvY2VzcyBvZiBncmFkdWF0ZSBzY2hvb2wgYW5kIHVuZGVyc3RhbmQgaG93IHN0cmVzc2Z1bCB0aGluZ3MgY2FuIGJlIGZyb20gbXkgb3duIGV4cGVyaWVuY2VzLgpJZiB5b3UgZmVlbCBkb3duIGZvciBhbnkgcmVhc29uLCBwbGVhc2UgdGFsayB0byBtZSBvciBhbnlvbmUgeW91IGZlZWwgY29tZm9ydGFibGUgdGFsa2luZyB0by4KWW91IGFyZSBhbHNvIGVuY291cmFnZWQgdG8gc2VlayBwcm9mZXNzaW9uYWwgaGVscOKAlGl0IGlzIG5vdCBhIHNpZ24gb2Ygd2Vha25lc3M7IGl0IGlzIGEgc2lnbiBvZiB5b3UgdGFraW5nIGNhcmUgb2YgeW91cnNlbGYuCgpSZW1lbWJlciB0aGF0IGFsbCBvZiB1cyBhcmUgIm5ldyIgYXQgdmFyaW91cyBwb2ludHMgaW4gb3VyIGNhcmVlcnMuCkltcG9zdGVyIHN5bmRyb21lIGlzIG5vcm1hbDsgSSBlbmNvdXJhZ2UgeW91IHRvIGFkb3B0IGEgZ3Jvd3RoIG1pbmRzZXQuCllvdSBhcmUgbWVhbnQgdG8gYmUgaGVyZSEKRmFpbHVyZSBpcyBjb21tb24gaW4gYWNhZGVtaWEuClRha2UgYSBsb29rIGF0IHRoZSBbQ1Ygb2YgRmFpbHVyZXNdKGh0dHBzOi8vd3d3LnVuaS1nb2V0dGluZ2VuLmRlL2RlL2RvY3VtZW50L2Rvd25sb2FkL2JlZDI3MDZmZDM0ZTI5ODIyMDA0ZGJlMjljZDAwYmI1LnBkZi9Kb2hhbm5lc19IYXVzaG9mZXJfQ1Zfb2ZfRmFpbHVyZXMlNWIxJTVkLnBkZikgKGFyY2hpdmVkIGF0IGh0dHBzOi8vcGVybWEuY2MvNlVGUi1aQlY0KS4KUGVyc2lzdGVuY2UgcGF5cyBvZmYuCkkgaGF2ZSBmb3VuZCBpdCBoZWxwZnVsIHRvIGhhdmUgYSBbImZlZWxnb29kIiBlbWFpbCBmb2xkZXJdKGh0dHBzOi8vYmxvZ3Muc2NpZW50aWZpY2FtZXJpY2FuLmNvbS9ndWVzdC1ibG9nL3RoZS1hd2Vzb21lc3QtNy15ZWFyLXBvc3Rkb2Mtb3ItaG93LWktbGVhcm5lZC10by1zdG9wLXdvcnJ5aW5nLWFuZC1sb3ZlLXRoZS10ZW51cmUtdHJhY2stZmFjdWx0eS1saWZlLykgKGFyY2hpdmVkIGF0IGh0dHBzOi8vcGVybWEuY2MvQzNDQi0yNUxVKSB0aGF0IEkgY2FuIHJlZmVyIGJhY2sgdG8gd2hlbiB0aGluZ3MgYXJlIGRpZmZpY3VsdC4KCkRvIG5vdCBmb3JnZXQgdG8gbGF1Z2ggYW5kIGhhdmUgZnVuIQpHcmFkdWF0ZSBzY2hvb2wgaXMgYSBjaGFsbGVuZ2luZyBqb2Igd2l0aCB2ZXJ5IGhpZ2ggZXhwZWN0YXRpb25zLCBidXQgaXQgc2hvdWxkIGFsc28gYmUgZnVuLgpZb3UgZ2V0IHRvIHN0dWR5IHNvbWV0aGluZyB0aGF0IGlzIGV4Y2l0aW5nIHRvIHlvdSBhbmQgZ2V0IHBhaWQgdG8gZG8gaXQhClRvIHF1b3RlIFtOb3JtYW4gUmFtc2V5J3MgZ3VpZGUgZm9yIGdyYWR1YXRlIHN0dWRlbnRzXShodHRwczovL3d3dy5jcy50dWZ0cy5lZHUvfm5yL3N0dWRlbnRzL2d1aWRlLnBkZikgKGFyY2hpdmVkIGF0IGh0dHBzOi8vcGVybWEuY2MvM1dGWS1TSDNMKSwgIlRvIHN1c3RhaW4geW91cnNlbGYgdGhyb3VnaCBkaWZmaWN1bHQgdGltZXMsIGZpbmQgcmVzZWFyY2ggdGhhdCBtZWFucyBhIGxvdCB0byB5b3UuClN1Y2Nlc3NmdWwgcmVzZWFyY2hlcnMgZmluZCBpbnRlcmVzdGluZyBwcm9ibGVtcyBhbmQgZmFsbCBpbiBsb3ZlIHdpdGggdGhlbS4KSW4gb3BlcmF0aW9uYWwgdGVybXMsIHNvbWUgRnJpZGF5IG5pZ2h0cyBzaG91bGQgYmUgc3BlbnQgaGF2aW5nIGZ1biBvdXQgaW4gdGhlIHdvcmxkLCBidXQgaWYgeW91IGFyZW4ndCBhbHNvIHNwZW5kaW5nIHNvbWUgRnJpZGF5IG5pZ2h0cyBoYXZpbmcgZnVuIHdpdGggeW91ciByZXNlYXJjaCwgeW91J3JlIG5vdCBkb2luZyB0aGUgcmlnaHQgcmVzZWFyY2guIgoKIyMgRXhwZWN0YXRpb25zIGZvciBFdmVyeW9uZSBpbiBMYWIgeyNleHBlY3RhdGlvbnNGb3JFdmVyeW9uZX0KCkluIGFkZGl0aW9uIHRvIHRoZSBleHBlY3RhdGlvbnMgZGVzY3JpYmVkIGFib3ZlIGZvciBncmFkdWF0ZSBzdHVkZW50cywgcGxlYXNlIGFsc28gcmVhZCB0aGUgW2V4cGVjdGF0aW9ucyBmb3IgZXZlcnlvbmUgaW4gdGhlIGxhYl0oZXhwZWN0YXRpb25zLWV2ZXJ5b25lLmh0bWwpLgoKIyBTaWduYXR1cmUgeyNzaWduYXR1cmV9CgpQbGVhc2UgZG93bmxvYWQsIHNpZ24sIGFuZCBlbWFpbCB0aGUgYmVsb3cgZG9jdW1lbnQgdG8gRHIuIFBldGVyc2VuIHByaW9yIHRvIHlvdXIgZmlyc3QgZGF5IGluIGxhYi4KCjxlbWJlZCBzcmM9IkZpbGVzL3NpZ25hdHVyZV9wYWdlLnBkZiIgd2lkdGg9IjEwMDAiIGhlaWdodD0iNjAwIj4KCiMgQXBwZW5kaXggeyNhcHBlbmRpeH0KCiMjIEFwcHJveGltYXRlIEV4cGVjdGVkIFRpbWVsaW5lcyB7I3RpbWVsaW5lc30KCiMjIyBSZXNlYXJjaCBUaW1lbGluZSB7I3RpbWVsaW5lLXJlc2VhcmNofQoKfCAqKlNlbWVzdGVyKiogICB8ICoqUmVzZWFyY2ggVGFzayBHb2FsKHMpKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAp8LS0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18CnwgWWVhciAxOiBGYWxsICAgfCBGb3JtIFJlc2VhcmNoIEFkdmlzb3J5IENvbW1pdHRlZSAoUkFDKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKfCAgICAgICAgICAgICAgICB8IFNlbGVjdCB0b3BpYyBmb3IgMXN0LXllYXIgcHJvamVjdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAp8ICAgICAgICAgICAgICAgIHwgQmFja2dyb3VuZCByZWFkaW5ncyBvbiB0b3BpYyBhbmQgcXVhbnRpdGF0aXZlIG1ldGhvZHMgICAgICAgICAgICAgICAgICAgICAgICB8CnwgICAgICAgICAgICAgICAgfCBCZWdpbiB3cml0aW5nIGxpdGVyYXR1cmUgcmV2aWV3IGZvciAxc3QteWVhciBwcm9qZWN0ICAgICAgICAgICAgICAgICAgICAgICAgIHwKfCAgICAgICAgICAgICAgICB8IFJBQyBNZWV0aW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAp8IFllYXIgMTogU3ByaW5nIHwgQ29tcGxldGUgbGl0ZXJhdHVyZSByZXZpZXcgZm9yIDFzdCB5ZWFyIHByb2plY3QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CnwgICAgICAgICAgICAgICAgfCBCZWdpbiBtZXRob2RzIGFuZCBkYXRhIGFuYWx5c2lzIGZvciAxc3QteWVhciBwcm9qZWN0ICAgICAgICAgICAgICAgICAgICAgICAgIHwKfCAgICAgICAgICAgICAgICB8IFJBQyBNZWV0aW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAp8IFllYXIgMjogU3VtbWVyIHwgQ29tcGxldGUgYW5hbHlzaXMgZm9yIDFzdC15ZWFyIHByb2plY3QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CnwgICAgICAgICAgICAgICAgfCBXcml0ZS11cCByZXN1bHRzIGFuZCBkaXNjdXNzaW9uIHNlY3Rpb24gZm9yIDFzdC15ZWFyIHByb2plY3QgICAgICAgICAgICAgICAgIHwKfCBZZWFyIDI6IEZhbGwgICB8IDFzdCB5ZWFyIHByb2plY3Qgd3JpdHRlbiBkb2N1bWVudCBkdWUgKE1vbmRheSBhZnRlciBUaGFua3NnaXZpbmcpICAgICAgICAgICAgfAp8ICAgICAgICAgICAgICAgIHwgUkFDIE1lZXRpbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CnwgWWVhciAyOiBTcHJpbmcgfCAxc3QteWVhciBwcm9qZWN0IHByZXNlbnRhdGlvbiB0byBkZXBhcnRtZW50ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKfCAgICAgICAgICAgICAgICB8IFN1Ym1pdCAxc3QteWVhciBwcm9qZWN0IGZvciBwdWJsaWNhdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAp8ICAgICAgICAgICAgICAgIHwgQmVnaW4gZm9ybXVsYXRpbmcgY29tcHJlaGVuc2l2ZSBwYXBlciB0b3BpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CnwgICAgICAgICAgICAgICAgfCBSQUMgTWVldGluZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKfCAgICAgICAgICAgICAgICB8IEZvcm0gY29tcHJlaGVuc2l2ZSBleGFtIGNvbW1pdHRlZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAp8IFllYXIgMzogU3VtbWVyIHwgRmxlc2ggb3V0IGNvbXByZWhlbnNpdmUgcGFwZXIgdG9waWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CnwgICAgICAgICAgICAgICAgfCBXcml0ZSBjb21wcmVoZW5zaXZlIHBhcGVyIHByb3Bvc2FsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKfCBZZWFyIDM6IEZhbGwgICB8IENvbXByZWhlbnNpdmUgcGFwZXIgcHJvcG9zYWwgbWVldGluZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAp8ICAgICAgICAgICAgICAgIHwgV3JpdGUgY29tcHJlaGVuc2l2ZSBwYXBlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CnwgWWVhciAzOiBTcHJpbmcgfCBUdXJuIGluIGNvbXByZWhlbnNpdmUgcGFwZXIgZHJhZnQgMSAoc2Vjb25kIE1vbmRheSBpbiBGZWJydWFyeSkgICAgICAgICAgICAgIHwKfCAgICAgICAgICAgICAgICB8IFJlY2VpdmUgZmVlZGJhY2sgZnJvbSBjb21taXR0ZWUgKDMgd2VlayB0dXJuLWFyb3VuZCkgICAgICAgICAgICAgICAgICAgICAgICAgfAp8ICAgICAgICAgICAgICAgIHwgUmV2aXNlIGFuZCByZXN1Ym1pdCBjb21wcmVoZW5zaXZlIHBhcGVyIChNb25kYXkgYmVmb3JlIGxhc3Qgd2VlayBvZiBjbGFzc2VzKSB8CnwgICAgICAgICAgICAgICAgfCBGaW5hbCBjb21wcmVoZW5zaXZlIGV4YW0gY29tbWl0dGVlIG1lZXRpbmcgd2l0aCBvcmFsIGRlZmVuc2UgICAgICAgICAgICAgICAgIHwKfCBZZWFyIDQ6IFN1bW1lciB8IEJlZ2luIHdvcmsgb24gZGlzc2VydGF0aW9uIHByb3NwZWN0dXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAp8IFllYXIgNDogRmFsbCAgIHwgRm9ybSBkaXNzZXJ0YXRpb24gY29tbWl0dGVlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CnwgICAgICAgICAgICAgICAgfCBDb250aW51ZSB3cml0aW5nIGRpc3NlcnRhdGlvbiBwcm9zcGVjdHVzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKfCBZZWFyIDQ6IFNwcmluZyB8IENvbXBsZXRlIGRpc3NlcnRhdGlvbiBwcm9zcGVjdHVzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAp8ICAgICAgICAgICAgICAgIHwgRGVmZW5kIGRpc3NlcnRhdGlvbiBwcm9zcGVjdHVzIChieSBzcHJpbmcgYnJlYWspICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CnwgICAgICAgICAgICAgICAgfCBCZWdpbiBkaXNzZXJ0YXRpb24gcmVzZWFyY2ggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKfCBZZWFyIDU6IFN1bW1lciB8IERpc3NlcnRhdGlvbiByZXNlYXJjaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAp8IFllYXIgNTogRmFsbCAgIHwgRGlzc2VydGF0aW9uIHJlc2VhcmNoICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CnwgICAgICAgICAgICAgICAgfCBBcHBseSBmb3IgaW50ZXJuc2hpcCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKfCBZZWFyIDU6IFNwcmluZyB8IERpc3NlcnRhdGlvbiByZXNlYXJjaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAp8ICAgICAgICAgICAgICAgIHwgSW50ZXJ2aWV3IGZvciBpbnRlcm5zaGlwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CnwgICAgICAgICAgICAgICAgfCBEZWZlbmQgZGlzc2VydGF0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKfCBZZWFyIDY6IFN1bW1lciB8IFtDbGluaWNhbCBzdHVkZW50czogQmVnaW4gSW50ZXJuc2hpcF0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAp8IFllYXIgNjogRmFsbCAgIHwgW0NsaW5pY2FsIHN0dWRlbnRzOiBJbnRlcm5zaGlwXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CnwgWWVhciA2OiBTcHJpbmcgfCBbQ2xpbmljYWwgc3R1ZGVudHM6IEludGVybnNoaXBdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKfCBZZWFyIDc6IFN1bW1lciB8IEdyYWR1YXRlIHdpdGggUGguRC4hICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAoKVGhlc2UgYXJlIGd1aWRlcG9zdHMgdG93YXJkIGNvbXBsZXRpbmcgcHJvZ3JhbSByZXF1aXJlbWVudHMgd2l0aGluIGEgNS15ZWFyIHRpbWVmcmFtZS4KVGhlIHllYXIgb2YgY2xpbmljYWwgaW50ZXJuc2hpcCBpcyBvbmx5IGZvciBzdHVkZW50cyBpbiB0aGUgQ2xpbmljYWwgU2NpZW5jZSBhcmVhLgpBcyB3ZSBoYXZlIGRpc2N1c3NlZCwgbXkgZXhwZWN0YXRpb24gaXMgdGhhdCB5b3Ugd2lsbCBiZSBlbmdhZ2VkIGluIHJlc2VhcmNoIGFjdGl2aXRpZXMgKmJleW9uZCogdGhvc2UgcmVxdWlyZWQgYnkgdGhlIHByb2dyYW0uCgojIyMgQ291cnNld29yayBUaW1lbGluZSB7I3RpbWVsaW5lLWNvdXJzZXdvcmt9Cgp8ICoqU2VtZXN0ZXIqKiAgIHwgKipDb3Vyc2V3b3JrIEdvYWwocykqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKfC0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18CnwgWWVhciAxOiBGYWxsICAgfCBPcmllbnRhdGlvbiB0byBDbGluaWNhbCBSZXNlYXJjaCAod2l0aCBEQ1QpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAp8ICAgICAgICAgICAgICAgIHwgUXVhbnRpdGF0aXZlIE1ldGhvZHMgQ291cnNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKfCAgICAgICAgICAgICAgICB8IERlc2NyaXB0aXZlIFBzeWNob3BhdGhvbG9neSBPUiBQc3ljaG9sb2dpY2FsIFRoZXJhcGllcyAgICAgICAgICAgICAgICAgICB8CnwgICAgICAgICAgICAgICAgfCBJbnRyb2R1Y3RvcnkgUHJhY3RpY3VtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAp8ICAgICAgICAgICAgICAgIHwgUmVzZWFyY2ggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKfCBZZWFyIDE6IFNwcmluZyB8IFF1YW50aXRhdGl2ZSBDb3Vyc2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CnwgICAgICAgICAgICAgICAgfCBQcmluY2lwbGVzIG9mIFBzeWNob2xvZ2ljYWwgQXNzZXNzbWVudCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAp8ICAgICAgICAgICAgICAgIHwgQnJlYWR0aCBDb3Vyc2UgKEhpc3RvcnksIENvZ25pdGl2ZSwgU29jaWFsLCBCaW9sb2dpY2FsLCBEZXZlbG9wbWVudGFsKSAgIHwKfCAgICAgICAgICAgICAgICB8IEFzc2Vzc21lbnQgUHJhY3RpY3VtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CnwgICAgICAgICAgICAgICAgfCBSZXNlYXJjaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAp8IFllYXIgMjogU3VtbWVyIHwgQXNzZXNzbWVudCBQcmFjdGljdW0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKfCBZZWFyIDI6IEZhbGwgICB8IERlc2NyaXB0aXZlIFBzeWNob3BhdGhvbG9neSBPUiBQc3ljaG9sb2dpY2FsIFRoZXJhcGllcyAgICAgICAgICAgICAgICAgICB8CnwgICAgICAgICAgICAgICAgfCBCcmVhZHRoIENvdXJzZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAp8ICAgICAgICAgICAgICAgIHwgQXNzZXNzbWVudCBQcmFjdGljdW0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKfCAgICAgICAgICAgICAgICB8IFJlc2VhcmNoICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CnwgWWVhciAyOiBTcHJpbmcgfCBCcmVhZHRoL0JCSVAgQ291cnNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAp8ICAgICAgICAgICAgICAgIHwgQnJlYWR0aCBDb3Vyc2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKfCAgICAgICAgICAgICAgICB8IFRoZXJhcHkgcHJhY3RpY3VtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CnwgICAgICAgICAgICAgICAgfCBSZXNlYXJjaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAp8IFllYXIgMzogU3VtbWVyIHwgVGhlcmFweSBQcmFjdGljdW0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKfCBZZWFyIDM6IEZhbGwgICB8IEJyZWFkdGggQ291cnNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CnwgICAgICAgICAgICAgICAgfCBSZXNlYXJjaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAp8ICAgICAgICAgICAgICAgIHwgVGhlcmFweSBwcmFjdGljdW0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKfCBZZWFyIDM6IFNwcmluZyB8IEJyZWFkdGggQ291cnNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CnwgICAgICAgICAgICAgICAgfCBSZXNlYXJjaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAp8ICAgICAgICAgICAgICAgIHwgVGhlcmFweSBwcmFjdGljdW0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKfCBZZWFyIDQ6IFN1bW1lciB8IFRoZXJhcHkgUHJhY3RpY3VtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CnwgWWVhciA0OiBGYWxsICAgfCBCcmVhZHRoIENvdXJzZSAoaWYgbmVlZGVkKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAp8ICAgICAgICAgICAgICAgIHwgUmVzZWFyY2ggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKfCAgICAgICAgICAgICAgICB8IFRoZXJhcHkgcHJhY3RpY3VtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CnwgWWVhciA0OiBTcHJpbmcgfCBCcmVhZHRoIENvdXJzZSAoaWYgbmVlZGVkKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAp8ICAgICAgICAgICAgICAgIHwgUmVzZWFyY2ggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKfCAgICAgICAgICAgICAgICB8IFRoZXJhcHkgcHJhY3RpY3VtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CnwgWWVhciA1OiBTdW1tZXIgfCBUaGVyYXB5IFByYWN0aWN1bSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAp8IFllYXIgNTogRmFsbCAgIHwgRGlzc2VydGF0aW9uIFJlc2VhcmNoICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKfCAgICAgICAgICAgICAgICB8IFRoZXJhcHkvRXh0ZXJuYWwgUHJhY3RpY3VtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CnwgWWVhciA1OiBTcHJpbmcgfCBEaXNzZXJ0YXRpb24gUmVzZWFyY2ggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAp8ICAgICAgICAgICAgICAgIHwgVGhlcmFweS9FeHRlcm5hbCBQcmFjdGljdW0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKfCBZZWFyIDYgICAgICAgICB8IEludGVybnNoaXAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CgoqKkNsaW5pY2FsIFNjaWVuY2UgQXJlYSBDb3Vyc2UgUmVxdWlyZW1lbnRzKioKCi0gMyBDbGluaWNhbCBDb3JlIENvdXJzZXMgKFBzeWNob3BhdGhvbG9neSwgVGhlcmFwaWVzLCBBc3Nlc3NtZW50KQotIDIgUXVhbnRpdGF0aXZlIENvdXJzZXMKLSA0IEJyZWFkdGggQ291cnNlcyAoQmlvbG9naWNhbCwgQ29nbml0aXZlLCBEZXZlbG9wbWVudGFsLCBhbmQgU29jaWFsIEJhc2VzIG9mIEJlaGF2aW9yKQotIEhpc3RvcnkgYW5kIFN5c3RlbXMKLSBcKkJlaGF2aW9yYWwtQmlvbWVkaWNhbCBJbnRlcmZhY2UgVHJhaW5pbmcgUHJvZ3JhbSAoQkJJUCkgcmVxdWlyZWQgY291cnNlIChpZiB5b3UgYXJlIHBhcnQgb2YgQkJJUCkKCk5vdGU6IEJyZWFkdGggY291cnNlcyBjYW4gYmUgY29tcGxldGVkIHdpdGggZGlyZWN0ZWQgcmVhZGluZ3MuCgojIyMgQ2xpbmljYWwgV29yayBUaW1lbGluZSB7I3RpbWVsaW5lLWNsaW5pY2FsfQoKfCAqKlNlbWVzdGVyKiogICB8ICoqQ2xpbmljYWwgVGFzayBHb2FsKHMpKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKfC0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwKfCBZZWFyIDE6IEZhbGwgICB8IEF0dGVuZCBDbGluaWNhbCBSb3VuZHMgKE1vbmRheXMgZnJvbSAxMjozMOKAkzE6MjApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAp8ICAgICAgICAgICAgICAgIHwgV29yayB3aXRoIGFkdmFuY2VkIGdyYWR1YXRlIHN0dWRlbnRzIG9uIGFzc2Vzc21lbnQgc2tpbGxzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAp8ICAgICAgICAgICAgICAgIHwgSW50ZXJ2aWV3aW5nIHByYWN0aWN1bSB3aXRoIENsaW5pYyBEaXJlY3RvciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAp8IFllYXIgMTogU3ByaW5nIHwgQXR0ZW5kIENsaW5pY2FsIFJvdW5kcyAoTW9uZGF5cyBmcm9tIDEyOjMw4oCTMToyMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CnwgICAgICAgICAgICAgICAgfCBXb3JrIHdpdGggYWR2YW5jZWQgZ3JhZHVhdGUgc3R1ZGVudHMgb24gYXNzZXNzbWVudCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CnwgICAgICAgICAgICAgICAgfCBCZWdpbiBjb21wbGV0aW5nIGludGVsbGVjdHVhbCBkaXNhYmlsaXR5IGFzc2Vzc21lbnRzIGluIGNsaW5pYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CnwgICAgICAgICAgICAgICAgfCBJbnRlcnZpZXdpbmcgcHJhY3RpY3VtIHdpdGggQ2xpbmljIERpcmVjdG9yICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CnwgWWVhciAyOiBTdW1tZXIgfCBDb250aW51ZSBpbnRlbGxlY3R1YWwgZGlzYWJpbGl0eSBhc3Nlc3NtZW50cywgYmVnaW4gU0RTIGFzc2Vzc21lbnRzICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CnwgWWVhciAyOiBGYWxsICAgfCBDb21wbGV0ZSBTRFMgYW5kIERIUyBhc3Nlc3NtZW50cyBpbiBTZWFzaG9yZSBDbGluaWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CnwgICAgICAgICAgICAgICAgfCBBdHRlbmQgQ2xpbmljYWwgUm91bmRzIChNb25kYXlzIGZyb20gMTI6MzDigJMxOjIwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKfCAgICAgICAgICAgICAgICB8IFdlZWtseSAybmQteWVhciBzZW1pbmFyIHdpdGggQ2xpbmljIERpcmVjdG9yIChNb3RpdmF0aW9uYWwgSW50ZXJ2aWV3aW5nLCBCZWhhdmlvcmFsIEFjdGl2YXRpb24pIHwKfCBZZWFyIDI6IFNwcmluZyB8IENvbXBsZXRlIGFzc2Vzc21lbnRzIGluIFNlYXNob3JlIENsaW5pYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKfCAgICAgICAgICAgICAgICB8IEJlZ2luIHRha2luZyB0aGVyYXB5IGNhc2VzIGluIFNlYXNob3JlIENsaW5pYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKfCAgICAgICAgICAgICAgICB8IEF0dGVuZCBDbGluaWNhbCBSb3VuZHMgKE1vbmRheXMgZnJvbSAxMjozMOKAkzE6MjApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAp8ICAgICAgICAgICAgICAgIHwgV2Vla2x5IDJuZC15ZWFyIHNlbWluYXIgd2l0aCBDbGluaWMgRGlyZWN0b3IgKE1vdGl2YXRpb25hbCBJbnRlcnZpZXdpbmcsIEJlaGF2aW9yYWwgQWN0aXZhdGlvbikgfAp8IFllYXIgMzogU3VtbWVyIHwgQ29tcGxldGUgYXNzZXNzbWVudHMgaW4gU2Vhc2hvcmUgQ2xpbmljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAp8ICAgICAgICAgICAgICAgIHwgV29yayB3aXRoIHRoZXJhcHkgY2FzZXMgaW4gU2Vhc2hvcmUgQ2xpbmljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAp8IFllYXIgMzogRmFsbCAgIHwgQ29tcGxldGUgYXNzZXNzbWVudHMgaW4gU2Vhc2hvcmUgQ2xpbmljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAp8ICAgICAgICAgICAgICAgIHwgV29yayB3aXRoIHRoZXJhcHkgY2FzZXMgaW4gU2Vhc2hvcmUgQ2xpbmljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAp8ICAgICAgICAgICAgICAgIHwgQXR0ZW5kIENsaW5pY2FsIFJvdW5kcyAoTW9uZGF5cyBmcm9tIDEyOjMw4oCTMToyMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CnwgICAgICAgICAgICAgICAgfCBXZWVrbHkgM3JkLXllYXIgc2VtaW5hciAoRXhwb3N1cmUgVGhlcmFweSBhbmQgb3RoZXIgYXBwcm9hY2hlcykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CnwgWWVhciAzOiBTcHJpbmcgfCBDb21wbGV0ZSBhc3Nlc3NtZW50cyBpbiBTZWFzaG9yZSBDbGluaWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CnwgICAgICAgICAgICAgICAgfCBXb3JrIHdpdGggdGhlcmFweSBjYXNlcyBpbiBTZWFzaG9yZSBDbGluaWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CnwgICAgICAgICAgICAgICAgfCBBdHRlbmQgQ2xpbmljYWwgUm91bmRzIChNb25kYXlzIGZyb20gMTI6MzDigJMxOjIwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKfCAgICAgICAgICAgICAgICB8IFdlZWtseSAzcmQteWVhciBzZW1pbmFyIChFeHBvc3VyZSBUaGVyYXB5IGFuZCBvdGhlciBhcHByb2FjaGVzKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKfCBZZWFyIDQ6IFN1bW1lciB8IENvbXBsZXRlIGFzc2Vzc21lbnRzIGluIFNlYXNob3JlIENsaW5pYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKfCAgICAgICAgICAgICAgICB8IFdvcmsgd2l0aCB0aGVyYXB5IGNhc2VzIGluIFNlYXNob3JlIENsaW5pYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKfCBZZWFyIDQ6IEZhbGwgICB8IFNlYXNob3JlIENsaW5pYyB3b3JrIGFuZC9vciBFeHRlcm5hbCBQcmFjdGljdW0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKfCAgICAgICAgICAgICAgICB8IEF0dGVuZCBDbGluaWNhbCBSb3VuZHMgKE1vbmRheXMgZnJvbSAxMjozMOKAkzE6MjApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAp8IFllYXIgNDogU3ByaW5nIHwgU2Vhc2hvcmUgQ2xpbmljIHdvcmsgYW5kL29yIEV4dGVybmFsIFByYWN0aWN1bSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAp8ICAgICAgICAgICAgICAgIHwgQXR0ZW5kIENsaW5pY2FsIFJvdW5kcyAoTW9uZGF5cyBmcm9tIDEyOjMw4oCTMToyMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CnwgWWVhciA1OiBTdW1tZXIgfCBTZWFzaG9yZSBDbGluaWMgd29yayBhbmQvb3IgRXh0ZXJuYWwgUHJhY3RpY3VtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CnwgWWVhciA1OiBGYWxsICAgfCBTZWFzaG9yZSBDbGluaWMgd29yayBhbmQvb3IgRXh0ZXJuYWwgUHJhY3RpY3VtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CnwgICAgICAgICAgICAgICAgfCBBdHRlbmQgQ2xpbmljYWwgUm91bmRzIChNb25kYXlzIGZyb20gMTI6MzDigJMxOjIwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKfCAgICAgICAgICAgICAgICB8IEFwcGx5IGZvciBpbnRlcm5zaGlwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKfCBZZWFyIDU6IFNwcmluZyB8IEludGVydmlldyBmb3IgSW50ZXJuc2hpcCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKfCBZZWFyIDYgICAgICAgICB8IEFQQS1BY2NyZWRpdGVkIEludGVybnNoaXAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKClteMV06IE1hbnkgb2YgdGhlIGxhYiBleHBlY3RhdGlvbnMgd2VyZSBjb2JibGVkIHRvZ2V0aGVyIGZyb20gYSB2YXJpZXR5IG9mIG90aGVyIGxhYnMgYW5kIGFyZSBub3QgdW5pcXVlIHRvIHRoaXMgbGFiLgogIExpa2V3aXNlLCBzb21lIG9mIHRoZSBsYW5ndWFnZSB1c2VkIGluIHRoaXMgZG9jdW1lbnQgd2FzIGJvcnJvd2VkIGZyb20gb3RoZXIgc291cmNlcy4KICAKW14yXTogQXNrIG1lIHRvIGdpdmUgeW91IGFjY2Vzcy4KICBJdCBpcyBlYXNpZXN0IHRvIHNoYXJlIHRoZSBbR29vZ2xlIERyaXZlIGZvbGRlciBvZiBwcmltZXIgYXJ0aWNsZXNdKGh0dHBzOi8vZHJpdmUuZ29vZ2xlLmNvbS9kcml2ZS91LzAvZm9sZGVycy8xWGxQVzM3QURmbjZpQ0N2cHQzczZWd1d4T01La2pKTnUpIHdpdGggeW91ciBHb29nbGUgYWNjb3VudC4KClteM106IFlvdSBuZWVkIHRvIGJlIG9uIHRoZSBWUE4gdG8gYWNjZXNzLgogIFlvdSBtYXkgbmVlZCB0byBjb250YWN0IHRoZSBjbGluaWMgZGlyZWN0b3IgdG8gZ2V0IGFjY2VzcyB0byB0aGUgQ2xpbmljIERyaXZlLgo=
+
LS0tCnRpdGxlOiAiTGFiIEV4cGVjdGF0aW9ucyBmb3IgR3JhZHVhdGUgU3R1ZGVudHMiCi0tLQoKYGBge3Igc2V0dXAsIGluY2x1ZGUgPSBGQUxTRX0Ka25pdHI6Om9wdHNfY2h1bmskc2V0KAogIGVjaG8gPSBUUlVFLAogIGVycm9yID0gVFJVRSwKICBjb21tZW50ID0gIiIpCmBgYAoKUGxlYXNlIHJlYWQgdGhlIHdob2xlIGRvY3VtZW50IG9mIGxhYiBleHBlY3RhdGlvbnNbXjFdIGNhcmVmdWxseS4KSWYgeW91IGhhdmUgcXVlc3Rpb25zIG9yIGNvbmNlcm5zLCBwbGVhc2UgdGFsayB3aXRoIG1lIGFib3V0IHRoZW07IHRoZSBkb2N1bWVudCwgbGlrZSBteSByZXNlYXJjaCBzdHlsZSwgaXMgYSB3b3JrIGluIHByb2dyZXNzLgpJIGhvcGUgdGhpcyBkb2N1bWVudCBjb252ZXlzIHRoZSBjYXJlIGFuZCB0aG91Z2h0ZnVsbmVzcyBJIGJyaW5nIHRvIHRoZSB3b3JrIHdlIGRvIHRvZ2V0aGVyLgpJIHJldmlldyB0aGlzIGRvY3VtZW50IHBlcmlvZGljYWxseSB0byBtYWtlIHN1cmUgdGhhdCBteSBleHBlY3RhdGlvbnMgYW5kIG9ibGlnYXRpb25zIGFyZSBjbGVhciBhbmQgdGhhdCBub3RoaW5nIGltcG9ydGFudCBpcyBmb3Jnb3R0ZW4uCgojIFRoZSBicm9hZCBnb2FscyBvZiBteSByZXNlYXJjaCBwcm9ncmFtIHsjZ29hbHMtbXlSZXNlYXJjaH0KCkFzIHBhcnQgb2YgbXkgam9iIGFzIGEgcHJvZmVzc29yLCBJIGFtIGV4cGVjdGVkIHRvIHdyaXRlIGdyYW50cyBhbmQgaW5pdGlhdGUgcmVzZWFyY2ggdGhhdCB3aWxsIG1ha2UgdGFuZ2libGUgY29udHJpYnV0aW9ucyB0byBzY2llbmNlLCB0aGUgYWNhZGVtaWMgY29tbXVuaXR5LCBhbmQgdG8gc29jaWV0eS4KWW91IHdpbGwgYmUgaGVscGluZyBtZSBjYXJyeSBvdXTigJRhbmQgaW1wcm92ZeKAlHRoaXMgcmVzZWFyY2guCkFsb25nIHRoZSB3YXksIHRoZSBnb2FsIGlzIHRoYXQgeW91IHdpbGwgZGV2ZWxvcCBhbiBpbmRlcGVuZGVudCByZXNlYXJjaCBwcm9ncmFtLgpJdCBpcyBpbXBlcmF0aXZlIHRoYXQgd2UgaW1wbGVtZW50IHN0cm9uZyBzY2llbnRpZmljIG1ldGhvZHMsIGFuZCBjb25kdWN0IG91cnNlbHZlcyBpbiBhbiBldGhpY2FsIHdheS4KRGlzc2VtaW5hdGlvbiBvZiB0aGUga25vd2xlZGdlIHdlIGdhaW4gaXMgY3JpdGljYWwgdG8gdGhlIGFkdmFuY2VtZW50IG9mIG91ciBmaWVsZC4KVGh1cywgYSBwcmltYXJ5IGdvYWwgb2Ygb3VyIHdvcmsgaXMgcHVibGlzaGluZyBvdXIgZmluZGluZ3MgaW4gc2NpZW50aWZpYyBqb3VybmFscy4KCiMgVGhlIGJyb2FkIGdvYWxzIG9mIG1lbnRvcmluZyB7I2dvYWxzLW1lbnRvcmluZ30KClRoZSBnb2FscyBvZiBtZW50b3JpbmcgaW4gdGhpcyBsYWIgYXJlIGZvciBlYWNoIHRyYWluZWUgKnRvIHJlY2VpdmUgdGhlb3JldGljYWwgYW5kIHRlY2huaWNhbCB0cmFpbmluZywgdG8gd29yayBwcm9kdWN0aXZlbHkgb24gaW50ZXJlc3RpbmcgcmVzZWFyY2ggcHJvamVjdHMsIGFuZCB0byBiZXN0IHByZXBhcmUgdGhlbXNlbHZlcyBmb3IgdGhlaXIgZnV0dXJlIGNhcmVlciouClRodXMsIGEgbWFqb3IgZW1waGFzaXMgb2YgeW91ciB3b3JrIHdpbGwgYmUgZGF0YSBhbmFseXNpcywgd3JpdGluZywgYW5kIHB1Ymxpc2hpbmcgcGFwZXJzIGluIHN0cm9uZyBqb3VybmFscy4KSGVyZSBJIGxpc3Qgc29tZSBleHBlY3RhdGlvbnMgdG8gaGVscCB5b3UgdW5kZXJzdGFuZCBob3cgdGhlIGxhYiBvcGVyYXRlcyBhbmQgaG93IHdlIGNhbiBhY2hpZXZlIHRoZXNlIGdvYWxzIHRvZ2V0aGVyLgoKIyBXaGF0IHRyYWluZWVzIGNhbiBleHBlY3Qgb2YgbWUgeyNleHBlY3RPZk1lfQoKSGVyZSBhcmUgd2hhdCB0cmFpbmVlcyBjYW4gZXhwZWN0IG9mIG1lOgoKMS4gSSB3aWxsIHdvcmsgdGlyZWxlc3NseSBmb3IgdGhlIGdvb2Qgb2YgdGhlIGxhYiBncm91cDsgdGhlIHN1Y2Nlc3Mgb2YgZXZlcnkgbWVtYmVyIG9mIG91ciBncm91cCBpcyBteSB0b3AgcHJpb3JpdHksIG5vIG1hdHRlciB0aGVpciBwZXJzb25hbCBzdHJlbmd0aHMgYW5kIHdlYWtuZXNzZXMsIG9yIGNhcmVlciBnb2Fscy4KMS4gSSB3aWxsIHNldCBoaWdoIHN0YW5kYXJkcyBmb3IgdGhlIGxhYiBncm91cCwgaW5jbHVkaW5nIHlvdSwgb3RoZXJzLCBhbmQgbXlzZWxmLgoxLiBJIHdpbGwgcHJvdmlkZSB5b3UgZ3VpZGFuY2UgYW5kIHJlc291cmNlcyB0byBjb25kdWN0IHJlc2VhcmNoIHByb2plY3RzIHdlIGFyZSBib3RoIGludGVyZXN0ZWQgaW4uCjEuIEkgd2lsbCBoZWxwIHlvdSBuYXZpZ2F0ZSB5b3VyIGdyYWR1YXRlIHByb2dyYW0gb2Ygc3R1ZHkuCjEuIEkgd2lsbCBsZWFkIGJ5IGV4YW1wbGUgYW5kIGZhY2lsaXRhdGUgeW91ciB0cmFpbmluZyBpbiBjb21wbGVtZW50YXJ5IHNraWxscyBuZWVkZWQgdG8gYmUgYSBzdWNjZXNzZnVsIHNjaWVudGlzdCwgc3VjaCBhcyBvcmFsIGFuZCB3cml0dGVuIGNvbW11bmljYXRpb24gc2tpbGxzLCBncmFudCB3cml0aW5nLCBsYWIgbWFuYWdlbWVudCwgbWVudG9yaW5nLCBhbmQgc2NpZW50aWZpYyBwcm9mZXNzaW9uYWxpc20uCjEuIEkgd2lsbCBwcm92aWRlIHlvdSBndWlkYW5jZSBhbmQgcmVzb3VyY2VzIGZvciB5b3VyIGNhcmVlciBkZXZlbG9wbWVudC4KMS4gSSB3aWxsIHJlcGx5IHByb21wdGx5IHRvIHRoZSBtYXRlcmlhbHMgeW91IHNlbmQgbWUgKGUuZy4sIGVtYWlscywgZHJhZnRzLCBhbmQgc2xpZGVzKS4KMS4gSSB3aWxsIHJlc3BlY3QgeW91ciB0aW1lIGFuZCB3b3JrLCBhbmQgZ2l2ZSB5b3UgY3JlZGl0IGFwcHJvcHJpYXRlbHkuCjEuIEkgd2lsbCBwcm92aWRlIGFkdmljZSBvbiBvdGhlciBpc3N1ZXMsIGlmIHlvdSBjaG9vc2UgdG8gZW5nYWdlIG1lLgoxLiBJIHdpbGwgYmUgeW91ciBhZHZvY2F0ZS4KCiMgV2hhdCBJIGV4cGVjdCBvZiB0cmFpbmVlcyB7I215RXhwZWN0YXRpb25zfQoKSGVyZSBpcyB3aGF0IEkgZXhwZWN0IG9mIHRyYWluZWVzOgoKMS4gTWFpbnRhaW4gZ29vZCBwcm9ncmVzcyBvbiByZXNlYXJjaCBhbmQgdHJhaW5pbmctcmVsYXRlZCBhY3Rpdml0aWVzCjEuIFdvcmsgaW4gbGFiIGR1cmluZyB0aGUgd29ya2RheSAod2hlbiB5b3UgYXJlIG5vdCBpbiBjbGFzcywgdGVhY2hpbmcsIG9yIGRvaW5nIGNsaW5pY2FsIHdvcmspCjEuIENvbmR1Y3QgYWxsIHJlc2VhcmNoIGFuZCB0cmFpbmluZy1yZWxhdGVkIGFjdGl2aXRpZXMgcmVzcG9uc2libHkKMS4gUmVzcGVjdCBvdGhlciBsYWIgbWVtYmVycwoKSSBhbSBhbWJpdGlvdXMgYW5kIGhhdmUgaGlnaCBzdGFuZGFyZHMsIGFuZCBJIGV4cGVjdCB0aGUgc2FtZSBmcm9tIHlvdS4KQmVsb3cgYXJlIG1vcmUgZGV0YWlsZWQgZGVzY3JpcHRpb25zIG9mIHRoZSBleHBlY3RhdGlvbnM6CgojIyBSZXNlYXJjaCBwcm9qZWN0cyBhbmQgdHJhaW5pbmcgeyNyZXNlYXJjaFRyYWluaW5nfQoKVGFrZSBhZHZhbnRhZ2Ugb2YgeW91ciBvcHBvcnR1bml0eSB0byB3b3JrIGF0IGEgd29ybGQtY2xhc3MgdW5pdmVyc2l0eSBieSBkZXZlbG9waW5nIGFuZCByZWZpbmluZyBzdGVsbGFyIHNjaWVudGlmaWMgc2tpbGxzLgpJIGV4cGVjdCB0aGF0IHlvdSB3aWxsIGxlYXJuIGhvdyB0byBwbGFuLCBkZXNpZ24sIGFuZCBjb25kdWN0IGhpZ2gtcXVhbGl0eSBzY2llbnRpZmljIHJlc2VhcmNoLgoKSSBleHBlY3QgYWxsIHRyYWluZWVzIHRvIG1haW50YWluIGdvb2QgcHJvZ3Jlc3Mgb24gdGhlaXIgcHJvamVjdHMuClRoaXMgaW5jbHVkZXM6IGtlZXBpbmcgdXBkYXRlZCBvbiB0aGUgbGl0ZXJhdHVyZSBhbmQgcmVzZWFyY2ggbWV0aG9kcywgYWN0aXZlbHkgdGhpbmtpbmcgYWJvdXQgdGhlIGJlc3Qgd2F5cyB0byBjb25kdWN0IHlvdXIgcmVzZWFyY2ggcHJvamVjdHMgYW5kIGFwcGx5aW5nIHRoZW0sIHJlZ3VsYXJseSBkaXNjdXNzaW5nIHlvdXIgcmVzZWFyY2ggcHJvZ3Jlc3Mgd2l0aCBtZSwgZm9sbG93aW5nIHRoZSBwbGFucyBiYXNlZCBvbiBvdXIgZGlzY3Vzc2lvbnMsIGFuZCBwcmVzZW50aW5nIChjb25mZXJlbmNlcywgcHJlc2VudGF0aW9ucywgYW5kL29yIGpvdXJuYWwgYXJ0aWNsZXMpIHRoZSBmaW5kaW5ncyBhdCBhIHNhdGlzZmFjdG9yeSBsZXZlbC4KV3JpdGluZyBpcyB0aGUgc2luZ2xlIG1vc3QgaW1wb3J0YW50IGFiaWxpdHkgdG8gZGV2ZWxvcCBkdXJpbmcgZ3JhZHVhdGUgc2Nob29sLgpJIGV4cGVjdCB5b3UgdG8gd3JpdGUgZnJlcXVlbnRseSwgYW5kIEkgZW5jb3VyYWdlIHlvdSB0byB3cml0ZSBkYWlseS4KSSBlbmNvdXJhZ2Ugc3R1ZGVudHMgdG8gcmVhZCBQYXVsIFNpbHZhJ3MgIltIb3cgdG8gV3JpdGUgYSBMb3RdKGh0dHBzOi8vd3d3LmFtYXpvbi5jb20vSG93LVdyaXRlLUxvdC1QcmFjdGljYWwtUHJvZHVjdGl2ZS9kcC8xNDMzODI5NzM4KSAoYXJjaGl2ZWQgYXQgaHR0cHM6Ly9wZXJtYS5jYy9DNlhWLTg0VVIpLCIgYW5kIEkgYW0gaGFwcHkgdG8gbGVuZCB0aGUgYm9vayB0byB5b3UuCkkgZW5jb3VyYWdlIHlvdSB0byB1c2UgRW5kTm90ZSwgWm90ZXJvLCBvciBhbm90aGVyIHJlZmVyZW5jZSBtYW5hZ2VyIHRvIG1hbmFnZSB5b3VyIHJlZmVyZW5jZXMgYW5kIHdyaXRlIHRoZSBSZWZlcmVuY2VzIHNlY3Rpb24gb2YgcGFwZXJzLgpSZWZlcmVuY2UgbWFuYWdlbWVudCBzb2Z0d2FyZSB3aWxsIHNhdmUgeW91IGxvdHMgb2YgdGltZS4KQWRkaXRpb25hbGx5LCBwbGVhc2UgZm9sbG93IHRoZSBsYWIncyBbd3JpdGluZyBndWlkZWxpbmVzXSh3cml0aW5nLmh0bWwpLgoKTXkgZXhwZWN0YXRpb24gaXMgdGhhdCB5b3Ugd2lsbCBiZSBlbmdhZ2VkIGluIHJlc2VhcmNoIGFjdGl2aXRpZXMgYmV5b25kIHRob3NlIHJlcXVpcmVkIGJ5IHRoZSBwcm9ncmFtLgpIYXZlIG11bHRpcGxlIHJlc2VhcmNoIHByb2plY3RzIHRvIHdvcmsgb24uCkhhdmluZyBtdWx0aXBsZSBvbmdvaW5nIHByb2plY3RzIHByb3ZpZGVzIGltcG9ydGFudCBkaXZlcnNpZmljYXRpb27igJRpZiBhIGdpdmVuIHByb2plY3QgaXMgbm90IHdvcmtpbmcgb3V0IGFzIGV4cGVjdGVkLCB5b3UgaGF2ZSBvdGhlciBwcm9qZWN0cyB5b3UgY2FuIHR1cm4gdG8uCkJ1dCBmb2N1cyBhbmQgZmluaXNoLgpUaGUgImN1cnJlbmN5IiBpbiBzY2llbmNlIGlzIHB1Ymxpc2hlZCBwYXBlcnPigJR0aGV5IGRyaXZlIGEgbG90IG9mIHdoYXQgd2UgZG8uCkJlY2F1c2Ugb3VyIGxhYiBpcyBzdXBwb3J0ZWQgYnkgdGF4cGF5ZXIgZG9sbGFycywgd2UgaGF2ZSBhbiBvYmxpZ2F0aW9uIHRvIGNvbXBsZXRlIGFuZCBkaXNzZW1pbmF0ZSBvdXIgZmluZGluZ3MuCkkgZXhwZWN0IHlvdSB0byBsZWFkIGZpcnN0LWF1dGhvcmVkIHByb2plY3RzIChpbiBhZGRpdGlvbiB0byBhbnkgY29sbGFib3JhdGl2ZSBwcm9qZWN0cykgYW5kIHRvIHB1Ymxpc2ggeW91ciB3b3JrIGluIGhpZ2gtaW1wYWN0IGpvdXJuYWxzLgpJdCBpcyBteSBwb2xpY3kgdGhhdCBzdHVkZW50cyBhcmUgZmlyc3QtYXV0aG9yIG9uIGFsbCB3b3JrIGZvciB3aGljaCB0aGV5IGxlYWQgdGhlIGRhdGEgYW5hbHlzaXMgYW5kIHdyaXRpbmcuCkkgd2lsbCBwdXNoIHlvdSB0byBwdWJsaXNoIHlvdXIgcmVzZWFyY2ggYXMgeW91IG1vdmUgdGhyb3VnaCB5b3VyIHRyYWluaW5nIHByb2dyYW0sIDx1Pm5vdDwvdT4gb25seSBhdCB0aGUgZW5kLgpJIGV4cGVjdCB0cmFpbmVlcyB0byBiZSBsZWFkIGF1dGhvciBvbiBhdCBsZWFzdCB0d28gam91cm5hbCBwYXBlciBzdWJtaXNzaW9ucywgcHJlZmVyYWJseSB0aHJlZSBvciBmb3VyIChvciBtb3JlISkuClByb2R1Y3Rpdml0eSBpbiB0ZXJtcyBvZiBwdWJsaXNoaW5nIGhpZ2gtcXVhbGl0eSBwYXBlcnMgYW5kIHNlY3VyaW5nIGZ1bmRpbmcgaXMgY3J1Y2lhbCB0byBiZSBjb21wZXRpdGl2ZSBmb3IgbWFueSBqb2JzLgoKSSBleHBlY3QgeW91IHRvIGFwcGx5IGZvciBleHRlcm5hbCBmdW5kaW5n4oCUZXhhbXBsZXMgaW5jbHVkZSB0aGUgTmF0aW9uYWwgU2NpZW5jZSBGb3VuZGF0aW9uIEdyYWR1YXRlIFJlc2VhcmNoIEZlbGxvd3NoaXAgUHJvZ3JhbSAoTlNGLUdSRlApIGFuZCB0aGUgTmF0aW9uYWwgSW5zdGl0dXRlcyBvZiBIZWFsdGggTmF0aW9uYWwgUmVzZWFyY2ggU2VydmljZSBBd2FyZCAoTklIIE5SU0EpLgpJIGVuY291cmFnZSBzdHVkZW50cyB0byBzdWJtaXQgYSBOU0YtR1JGUCBpbiB0aGVpciBmaXJzdCBzZW1lc3Rlci4KSSBlbmNvdXJhZ2Ugc3R1ZGVudHMgdG8gc3VibWl0IGEgTklIIE5SU0EgaW4gdGhlaXIgc2Vjb25kIG9yIHRoaXJkIHllYXIuCkdldHRpbmcgYSBmaXJzdC1hdXRob3JlZCBwdWJsaWNhdGlvbiBpbiB5b3VyIGZpcnN0IG9yIHNlY29uZCB5ZWFyIGlzIGltcG9ydGFudCBmb3IgdGhlc2UgKGFuZCBvdGhlcikgZmVsbG93c2hpcHMgYW5kIGZvciBhd2FyZHMuCgpGb3IgbWFueSBqb2JzLCBwcmVzZW50YXRpb24gc2tpbGxzIGFyZSBhbHNvIGhpZ2hseSBpbXBvcnRhbnQsIGluY2x1ZGluZyBza2lsbHMgaW4gcHJlc2VudGluZyByZXNlYXJjaCB0byBicm9hZCBhdWRpZW5jZXMgb2Ygc2NpZW50aXN0cyBvdXRzaWRlIG9mIHlvdXIgYXJlYS4KRm9yIGFjYWRlbWljIHBvc2l0aW9ucywgd2hpbGUgcGFwZXJzIGFuZCBncmFudHMgImdldCB5b3VyIGZvb3QgaW4gdGhlIGRvb3IiIGFuZCBoZWxwIHlvdSBnZXQgYW4gaW50ZXJ2aWV3LCB0aGUgImpvYiB0YWxrIiAodHlwaWNhbGx5IHRvIHRoZSB3aG9sZSBEZXBhcnRtZW50KSBpcyB0aGUgc2luZ2xlIG1vc3QgaW1wb3J0YW50IGNyaXRlcmlvbiBkdXJpbmcgYSBqb2IgaW50ZXJ2aWV34oCUYmVjYXVzZSB0aGF0IGlzIHRoZSBvbmUgdGhpbmcgdGhhdCBhbGwgZmFjdWx0eSBzZWUuClRodXMsIEkgZXhwZWN0IHlvdSB0byBwcmVzZW50IHlvdXIgcmVzZWFyY2ggZnJlcXVlbnRseSBhbmQgaW4gbXVsdGlwbGUgb3V0bGV0cy4KQ2hhbGxlbmdlIHlvdXJzZWxmIGJ5IHByZXNlbnRpbmcgeW91ciB3b3JrIGF0IG1lZXRpbmdzIGFuZCBzZW1pbmFycyBhcyBlYXJseSBhcyB5b3UgY2FuLgpJIGFsc28gZXhwZWN0IHlvdSB0byBnbyB0byBEZXBhcnRtZW50YWwgY29sbG9xdWlhIHNlcmllcyBieSBzcGVha2VycyB3aG8gYXJlIG91dHNpZGUgb2YgeW91ciBhcmVhLgoKV2Ugd2lsbCBoYXZlIG1lZXRpbmdzIHRvIGRpc2N1c3MgdGhlIHJlc2VhcmNoIHByb2plY3QocykgeW91IGZpbmQgaW50ZXJlc3RpbmcgdGhhdCBhbHNvIGFkdmFuY2UgdGhlIGxhYidzIGludGVyZXN0cy4KSSBhbHdheXMgd2VsY29tZSBuZXcgaWRlYXMgYW5kIHByb2plY3QgcHJvcG9zYWxzLCBzbyBwbGVhc2UgY29tZSB0byBtZSBpZiB5b3Ugd2FudCB0byBkaXNjdXNzIG5ldyBwcm9qZWN0cy4KQSBwaWVjZSBvZiBhZHZpY2UgdGhhdCB3YXMgZ2l2ZW4gdG8gbWUgYXMgYSBncmFkdWF0ZSBzdHVkZW50IHRoYXQgSSBwYXNzIG9udG8geW91IGlzIHRvIGZpbmQgYSBxdWVzdGlvbiBvciBwcm9ibGVtIHRoYXQgZXhjaXRlcyB5b3UgYW5kICJkYXRlIiBpdC4KWW91IHdpbGwga25vdyB0aGF0IHlvdSBoYXZlIGZvdW5kIGFuIGlkZWEgdGhhdCB0cnVseSBleGNpdGVzIHlvdSB3aGVuIHlvdSBmaW5kIHlvdXJzZWxmIHRoaW5raW5nIGFib3V0IGl0IHdoaWxlIGJydXNoaW5nIHlvdXIgdGVldGgsIGdvaW5nIGZvciB3YWxrcywgZXRjLgpNdWNoIG9mIHRoZSBpbXBvcnRhbnQgYW5kIGV4Y2l0aW5nIHdvcmsgaW4gc2NpZW5jZSBoYXBwZW5zIGF0IHRoZSBpZGVhcyBzdGFnZS4KCiMjIERhdGEgYW5kIHJlc2VhcmNoIG1hdGVyaWFscyB7I2RhdGFBbmRSZXNlYXJjaE1hdGVyaWFsc30KCkNvbmZpZGVudGlhbGl0eSBvZiBkYXRhIGlzIHBhcmFtb3VudC4KQWxsIGhhcmQtY29weSBwaHlzaWNhbCByZXNlYXJjaCBkYXRhIG11c3QgcmVtYWluIGluIHRoZSBsYWIuCkFsbCBlbGVjdHJvbmljIGRhdGEgc2hvdWxkIGJlIGFjY2Vzc2VkIGZyb20gdGhlIGxhYiwgb24gdW5pdmVyc2l0eSBjb21wdXRlcnMsIG9yIHNlY3VyZSBwcml2YXRlIGNvbXB1dGVycy4KRWxlY3Ryb25pYyBkYXRhIHNob3VsZCBub3QgYmUgYWNjZXNzZWQgb24gcHVibGljIGNvbXB1dGVycy4KSWRlbnRpZmlhYmxlIGVsZWN0cm9uaWMgZGF0YSBzaG91bGQgYmUgc3RvcmVkIG9ubHkgb24gdGhlIGxhYidzIFJEU1Mgc2hhcmUgYW5kIHNob3VsZCBub3QgYmUgc2F2ZWQgb250byB5b3VyIGNvbXB1dGVyLgpXaGVuIHdvcmtpbmcgZnJvbSBwcml2YXRlIHNwYWNlcywgdGhlIHVuaXZlcnNpdHkgVlBOIGNhbiBiZSBhY2Nlc3NlZCB0byBlbnN1cmUgYSBzZWN1cmUgaW50ZXJuZXQgY29ubmVjdGlvbi4KCllvdSBhcmUgZXhwZWN0ZWQgdG8gbWFpbnRhaW4gZGV0YWlsZWQsIG9yZ2FuaXplZCwgYW5kIGFjY3VyYXRlIGxhYm9yYXRvcnkgcmVjb3JkcyBpbiBhIGxhYiBub3RlYm9vay4KQmUgYXdhcmUgdGhhdCBhbGwgdGFuZ2libGUgcmVzZWFyY2ggZGF0YSBhbmQgcmVsYXRlZCByZXNlYXJjaCBtYXRlcmlhbHMgYXJlIG15IHByb3BlcnR5IGFzIHRoZSBsYWIgZGlyZWN0b3IuCldoZW4geW91IGxlYXZlIHRoZSBsYWIsIEkgZW5jb3VyYWdlIHlvdSB0byByZXRhaW4gYWNjZXNzIHRvIHRoZSBsYWIncyByZXNlYXJjaCBkYXRhIHZpYSBWUE4gdG8gdGhlIGxhYiBkcml2ZSAoUkRTUyBzaGFyZSkuCk9uZSBmdWxsIHNldCBvZiBhbGwgZGF0YSBtdXN0IHN0YXkgaW4gdGhlIGxhYiwgd2l0aCBhcHByb3ByaWF0ZSBhbmQgYWNjZXNzaWJsZSBkb2N1bWVudGF0aW9uLgpSZWd1bGFybHkgYmFjayB1cCB0aGUgZmlsZXMgb24geW91ciBjb21wdXRlciB1c2luZyBNaWNyb3NvZnQgT25lRHJpdmUsIHdoaWNoIGlzIHByb3ZpZGVkIGJ5IHRoZSB1bml2ZXJzaXR5LgpEZS1pZGVudGlmaWVkIGRhdGEgYW5kIGFuYWx5c2lzIHNjcmlwdHMgYXNzb2NpYXRlZCB3aXRoIHByb2plY3RzIHNob3VsZCBiZSBzYXZlZCBpbiB0aGUgcHJvamVjdCByZXBvc2l0b3J5IG9mIHRoZSBsYWIncyBHaXRMYWIgcGFnZSAoaHR0cHM6Ly9yZXNlYXJjaC1naXQudWlvd2EuZWR1L1BldGVyc2VuTGFiKSwgd2hpY2ggaXMgaG9zdGVkIGJ5IHRoZSB1bml2ZXJzaXR5IGFuZCBhcHByb3ZlZCBieSBvdXIgSVJCLgoKIyMgUmVzZWFyY2ggZXRoaWNzIHsjcmVzZWFyY2hFdGhpY3N9CgpZb3Ugc2hvdWxkIHJlc3BlY3QgYWxsIGV0aGljYWwgc3RhbmRhcmRz4oCUaW5jbHVkaW5nIGNvbXBsaWFuY2Ugd2l0aCBhbGwgdW5pdmVyc2l0eSwgc3RhdGUsIGFuZCBmZWRlcmFsIHJlZ3VsYXRpb25zIGluIGFkZGl0aW9uIHRvIHRoZSBBUEEgRXRoaWNzIENvZGXigJRhcyB0aGV5IHJlbGF0ZSB0byByZXNwb25zaWJsZSBjb25kdWN0IGluIHJlc2VhcmNoLCBwb3NzaWJsZSBjb25mbGljdHMgb2YgaW50ZXJlc3QsIHByaXZhY3kgYW5kIGh1bWFuIHN1YmplY3RzIHJlc2VhcmNoLCBsYWJvcmF0b3J5IHNhZmV0eSwgYXV0aG9yc2hpcCwgcGVlci1yZXZpZXcgZ3VpZGVsaW5lcywgYW5kIGRhdGEgb3duZXJzaGlwLCByZXBvcnRpbmcsIGFuZCBzaGFyaW5nLgpXaGVuIGV0aGljYWwgZGlsZW1tYXMgb3IgdW5jZXJ0YWludGllcyBhcmlzZSwgYXNrIG1lIGFuZCBvdGhlcnMgZm9yIGd1aWRhbmNlLgpDb25zdWx0LCBjb25zdWx0LCBjb25zdWx0IQoKSW4gdGhpcyBsYWIsIHdlIHdvcmsgaGFyZCB0byBkbyB0aGUgYmVzdCBzY2llbmNlIHdlIGNhbi4KRHVyaW5nIHRoZSBwcm9jZXNzLCBvYnN0YWNsZXMgYW5kIGZydXN0cmF0aW9ucyBhcmUgaW5ldml0YWJsZSwgYW5kIHNvbWV0aW1lcyBtb3JlIGNvbW1vbiB0aGFuIHlvdSB3b3VsZCBpbWFnaW5lLgpJdCBpcyBteSBob3BlIHRoYXQgd2Ugd2lsbCB3b3JrIHRvZ2V0aGVyIHRvIHRhY2tsZSB0aGVzZSBjaGFsbGVuZ2VzIGFuZCB0byBidWlsZCB1cCB5b3VyIHJlc2lsaWVuY2UuClRvIHRoaXMgZW5kLCBwbGVhc2Uga2VlcCBtZSB1cGRhdGVkIG9uIHlvdXIgcHJvZ3Jlc3PigJRib3RoIHRoZSBnb29kIGFuZCBiYWQuCgpNaXN0YWtlcyBhcmUgaW5ldml0YWJsZSBhbmQgYXJlIHBhcnQgb2YgeW91ciB0cmFpbmluZywgc28gZG8gbm90IGZlZWwgYmFkIGFib3V0IG1ha2luZyBtaXN0YWtlc+KAlEkgbWFrZSBtaXN0YWtlcyBvbiBhIGRhaWx5IGJhc2lzLgpJIHN0cml2ZSBmb3IgdGhlIGxhYiB0byBwcm92aWRlIGEgc3VwcG9ydGl2ZSBlbnZpcm9ubWVudCB0byBhc2sgcXVlc3Rpb25zIGFuZCBhZG1pdCBtaXN0YWtlcy4KQXMgeW91ciBtZW50b3IsIEkgYW0gYWxzbyByZXNwb25zaWJsZSBmb3IgeW91ciByZXNlYXJjaCBhbmQgdHJhaW5pbmcuClNvIHBsZWFzZSBkbyBsZXQgbWUga25vdyBpZiBzdWNoIHRoaW5ncyBoYXBwZW4gYW5kIHdlIHdpbGwgd29yayB0b2dldGhlciB0byByZWNvdmVyIGZyb20gdGhlbS4KVXN1YWxseSB0aGUgZWFybGllciB5b3UgaW5mb3JtIG1lLCB0aGUgbGVzcyBkYW1hZ2UgdGhlcmUgd2lsbCBiZS4KQmVpbmcgZnJhbmsgYWJvdXQgeW91ciBtaXN0YWtlcyB3aWxsIGJlIGdyZWF0bHkgYXBwcmVjaWF0ZWQuCkhvd2V2ZXIsIHRoaW5ncyBsaWtlIGludGVudGlvbmFsbHkgZmFraW5nIGRhdGEgYW5kIGludGVudGlvbmFsbHkgY292ZXJpbmcgbWlzdGFrZXMgYXJlIHVuYWNjZXB0YWJsZSBhbmQgd2lsbCBsZWFkIHRvIHNldmVyZSBjb25zZXF1ZW5jZXMuCgojIyBUaW1lIGluIGxhYiB7I3RpbWVJbkxhYn0KCkkgZXhwZWN0IHlvdSB0byBiZSBhdCB3b3JrIGFuZCBvbiBjYW1wdXMgZHVyaW5nIHRoZSB3b3JrZGF5OiA5aXNo4oCTNWlzaCBvciA4aXNo4oCTNGlzaC4KSW4gYWRkaXRpb24sIEkgZXhwZWN0IHlvdXIgYXZhaWxhYmlsaXR5IHRvIHNwYW4gOeKAkzUgZm9yIHNjaGVkdWxpbmcgbWVldGluZ3Mgd2l0aCBtZSBvciBtZW1iZXJzIG9mIHRoZSB0ZWFt4oCUdGhlIHNhbWUgaG91cnMsIGdlbmVyYWxseSwgdGhhdCB0aGUgcHJvZ3JhbSBhdHRlbXB0cyB0byBzY2hlZHVsZSBtZWV0aW5ncy4KRHVyaW5nIHRoZSB3b3JrZGF5LCB5b3UgYXJlIGV4cGVjdGVkIHRvIHdvcmsgaW4gdGhlIGxhYiB3aGVuIHlvdSBhcmUgbm90IGluIGNsYXNzLCB0ZWFjaGluZywgb3IgZG9pbmcgY2xpbmljYWwgd29yay4KVGhpcyBpcyBub3QgYWJvdXQgYWNjb3VudGFiaWxpdHnigJRyYXRoZXIsIGl0IGlzIHRvIHRoZSBiZW5lZml0IG9mIHlvdSBhbmQgdGhlIHRlYW0uCk91ciBhcHByb2FjaCBpcyBvcHRpbWFsIGZvciB0aGUgdHlwZSBvZiBwcm9qZWN0cyB3ZSBjYXJyeSBvdXQ6IGxvbmdpdHVkaW5hbCBwcm9qZWN0cyBzdWNoIGFzIG91cnMgYXJlIG9uZSBiaWcgZW50ZXJwcmlzZSB3aXRoIG1hbnkgbW92aW5nIHBhcnRzLCBhbGwgb2Ygd2hpY2ggaGF2ZSB0byB3b3JrIHRvZ2V0aGVyIHNtb290aGx5LgpFYWNoIHN0dWRlbnQncyBpbmRpdmlkdWFsIHByb2plY3QgaXMgZW1iZWRkZWQgaW4gdGhhdCBsYXJnZXIgdW1icmVsbGEgKHJldGFpbmluZyBlYWNoIHN0dWRlbnQncyB1bmlxdWVuZXNzLCBpZGVhcywgZXRjLikuClRodXMsIHRoZSBwaHlzaWNhbCBpbnRlcmFjdGlvbnMgZm9yIHRoZSB3aG9sZSB0ZWFtLCBpbiBvbmUgc3BhY2UsIHdpdGggc2hhcmVkIHdvcmsgZXRoaWMsIGFyZSBzbyBpbXBvcnRhbnQuClBhcnQgb2YgeW91ciBqb2IgaXMgdG8gYmUgaW4gdGhlIGxhYiAod2l0aCB5b3VyIGRvb3Igb3BlbikgYW5kIHRvIHRhbGsgd2l0aCBvdGhlciBwZW9wbGUgYWJvdXQgeW91ciByZXNlYXJjaC4KV2UgYWxsIGJlbmVmaXQgZnJvbSBoYXZpbmcgYSBncm91cCBvZiBwZW9wbGUgd2UgY2FuIHRhbGsgd2l0aCBhYm91dCByZXNlYXJjaCBxdWVzdGlvbnMgYW5kIHByb2JsZW1zLgpXZSBoYXZlIGEgY29sbGFib3JhdGl2ZSBsYWIgZW52aXJvbm1lbnQuCk91ciBsYWIgd29ya3MgYXMgYSB0ZWFtLCBhbmQgb3RoZXIgbGFiIG1lbWJlcnMgY291bnQgb24geW91IGJlaW5nIHRoZXJlLgpMaWtld2lzZSwgeW91IGJlbmVmaXQgZnJvbSBoYXZpbmcgb3RoZXIgdGVhbSBtZW1iZXJzLCBteXNlbGYsIGFuZCBEZXBhcnRtZW50YWwgc3RhZmYgYXZhaWxhYmxlLgpXb3JraW5nIGluIHRoZSBsYWIgc3BhY2UgaGVscHMgaW1wcm92ZSBxdWFsaXR5IGNvbnRyb2wgb2YgbGFiIHByb2NlZHVyZXMgYW5kIGNhbiBsZWFkIHRvIGV4Y2l0aW5nIGNvbGxhYm9yYXRpdmUgcHJvamVjdHMuClRoaXMgc2hvcnQgYmx1cmIgb24gaG93ICJbSXNvbGF0aW9uIGlzIG9uZSBvZiB0aGUgYmlnZ2VzdCBlbmVtaWVzIG9mIGdyYWR1YXRlIHN0dWRlbnRzXShodHRwczovL3d3dy5pbnNpZGVoaWdoZXJlZC5jb20vdmlld3MvMjAwNS8xMC8yNi93ZS1uZWVkLWh1bWFuaXRpZXMtbGFicykiIChhcmNoaXZlZCBhdCBodHRwczovL3Blcm1hLmNjL0dLNTYtN0xMVykgbWF5IGdpdmUgeW91IHNvbWUgaW5zaWdodCB3aHkgZmFjZXRpbWUgaW4gdGhlIGxhYiBpcyBzbyBpbXBvcnRhbnQ6Cgo+ICJJIHdvbmRlciBob3cgYW4gRW5nbGlzaCBwcm9mZXNzb3Igd291bGQgZmVlbCBzcGVuZGluZyBhIHdlZWsgaW4gYSBwaHlzaWNzIGxhYi4KPiBOb3QgYWJvdXQgdGhlIHNjaWVudGlmaWMgd29yaywgYnV0IGFib3V0IHRoZSBmcmVxdWVudCwgb25nb2luZyBpbnRlcmFjdGlvbiBiZXR3ZWVuIHN0dWRlbnRzIGFuZCBwZWVycywgcG9zdC1kb2NzIGFuZCBmYWN1bHR5Lgo+IFNjaWVudGlzdHMgc2VlIGVhY2ggb3RoZXIgaW4gdGhlIGxhYiwgaWYgbm90IGRhaWx5LCB0aGVuIGF0IGxlYXN0IHdlZWtseS4KPiBUaGV5IGhhdmUgZnJlcXVlbnQgbGFiIG1lZXRpbmdzLCBjb2xsb3F1aWEgYW5kIGludGVyYWN0aW9uIHdpdGggc2Nob2xhcnMgYXQgb3RoZXIgdW5pdmVyc2l0aWVzIGFyb3VuZCBqb2ludCByZXNlYXJjaC4KPiBEdXJpbmcgbXkgZ3JhZHVhdGUgdHJhaW5pbmcgaW4gcHN5Y2hvbG9neSBhdCBNY0dpbGwgVW5pdmVyc2l0eSwgZXNwZWNpYWxseSBpbiB0aGUgcmVzZWFyY2ggbGFiIGF0IHRoZSBNb250cmVhbCBOZXVyb2xvZ2ljYWwgSW5zdGl0dXRlLCBJIHNwZW50IGhvdXJzIGhhbmdpbmcgYXJvdW5kIHRoZSBwb3N0LWRvY3MuCj4gSSBsZWFybmVkIGF0IGxlYXN0IGFzIG11Y2ggZnJvbSB0aGVtIGFzIEkgZGlkIGZyb20gbXkgaW50ZXJhY3Rpb25zIHdpdGggbXkgcHJvZmVzc29ycy4KPiBUaGUgZXhwZWN0YXRpb24gd2FzIHRoYXQgSSB3b3VsZCBiZSBhdCB0aGUgbGFiIDkgdG8gNSBvciBtb3JlLCBldmVyeSBkYXkuCj4gSSBzYXcgbXkgYWR2aXNlciBldmVyeSBkYXkuIiDigJMgR2luYSBIaWF0dAoKT2YgY291cnNlLCB0aGVyZSBhcmUgZXhjZXB0aW9uczsgaWYgeW91IGFyZSBzaWNrLCBzdGF5IGhvbWUuCllvdSBkbyBub3QgbmVlZCBteSBwZXJtaXNzaW9uIHRvIGF0dGVuZCBtZWRpY2FsIGFwcG9pbnRtZW50cyBkdXJpbmcgbGFiIGhvdXJzLgpJZiB5b3UgYXJlIHVuYWJsZSB0byBjb21lIGludG8gbGFiIGR1ZSB0byBiYWQgd2VhdGhlciwganVzdCBsZXQgbWUga25vdyBhbmQgeW91IHNob3VsZCBiZSBhdmFpbGFibGUgdG8gYmUgcmVhY2gtYWJsZSBxdWlja2x5LCBqdXN0IGFzIHlvdSB3b3VsZCBiZSBpZiB5b3Ugd2VyZSBpbiBsYWIuCgpOZXZlcnRoZWxlc3MsIGdyYWR1YXRlIHNjaG9vbCBpcyBub3QgYSA0MCBob3VyIHBlciB3ZWVrIGpvYi4KR3JhZHVhdGUgc3R1ZGVudHMgY2FuIGV4cGVjdCB0byB3b3JrIGFuIGF2ZXJhZ2Ugb2YgNTAgaG91cnMgcGVyIHdlZWsuCk91dHNpZGUgb2YgdGhlIHdvcmtkYXksIHlvdSBhcmUgd2VsY29tZSB0byB3b3JrIGZyb20gdGhlIGxhYiwgb3LigJRhcyBsb25nIGFzIHlvdSBlbnN1cmUgY29uZmlkZW50aWFsaXR5IG9mIGRhdGHigJRmcm9tIGhvbWUgb3IgZnJvbSBvdGhlciBzcGFjZXMuClRoYXQgc2FpZCwgdGhlIG1vc3QgaW1wb3J0YW50IHRoaW5nIGlzIGZvciB5b3UgdG8gZ2V0IHRoZSBqb2IgZG9uZeKAlHlvdSBhcmUgaW4geW91ciBjYXJlZXIgbm93IGFuZCBhcmUgaW52ZXN0aW5nIGluIHlvdXJzZWxmLgpHcmFkdWF0ZSByZXNlYXJjaCByZXF1aXJlcyBmdWxsLXRpbWUgZGVkaWNhdGlvbiBhbmQgeWVhci1yb3VuZCBlZmZvcnQuCgpEaXNjdXNzIHBvbGljaWVzIG9uIHdvcmsgaG91cnMsIHNpY2sgbGVhdmUsIGFuZCB2YWNhdGlvbiB3aXRoIG1lIGRpcmVjdGx5LgpJdCBpcyBpbXBvcnRhbnQgdG8gdGFrZSB0aW1lIG9mZiB0byBkZWNvbXByZXNzIGZyb20gdGltZSB0byB0aW1lLgpXb3JrLWxpZmUgYmFsYW5jZSBhbmQgdmFjYXRpb24gdGltZSBhcmUgZXNzZW50aWFsIGZvciBjcmVhdGl2ZSB0aGlua2luZyBhbmQgZ29vZCBoZWFsdGgsIGFuZCBJIGVuY291cmFnZSB5b3UgdG8gdGFrZSByZWd1bGFyIHZhY2F0aW9ucy4KWW91IGNhbiB0YWtlIHRocmVlIHdlZWtzIG9mIHZhY2F0aW9uIHRpbWUgZWFjaCB5ZWFyLCBhbmQgeW91IGFyZSBub3QgZXhwZWN0ZWQgdG8gd29yayBkdXJpbmcgW3VuaXZlcnNpdHkgaG9saWRheXNdKGh0dHBzOi8vZ3JhZC51aW93YS5lZHUvZ3JhZHVhdGUtc3R1ZGVudC1lbXBsb3ltZW50LWFncmVlbWVudC9wYWlkLWxlYXZlcy1hbmQtaG9saWRheSkuCkluIGFkZGl0aW9uLCBJIGRvIG5vdCBleHBlY3Qgc3R1ZGVudHMgdG8gd29yayBiZXR3ZWVuIDEyLzE1IGFuZCB0aGUgZmlyc3Qgd2VlayBvZiBKYW51YXJ5LgpQbGVhc2UgZGlzY3VzcyB5b3VyIHZhY2F0aW9uIHBsYW5zIHdpdGggbWUgYmVmb3JlIGJvb2tpbmcgeW91ciB0cmlwLgpDb25zdWx0IHdpdGggbWUgYW5kIG5vdGlmeSBmZWxsb3cgbGFiIG1lbWJlcnMgaW4gYWR2YW5jZSBvZiBhbnkgcGxhbm5lZCBhYnNlbmNlcywgd2l0aCBhcyBtdWNoIGFkdmFuY2Ugbm90aWNlIGFzIHBvc3NpYmxl4oCUYXQgbGVhc3QgdHdvIHdlZWtzJyBub3RpY2Ugb3IgbW9yZSBpZiBmZWFzaWJsZS4KUGxlYXNlIHBsYW4gdGhhdCBpZiB5b3UgYXJlIGF3YXksIG90aGVycyB3aWxsIG5lZWQgdG8gdGFrZSBvdmVyIHlvdXIgcmVzcG9uc2liaWxpdGllcywgc28gcGxhbm5pbmcgZm9yIGFkZXF1YXRlIGxlYWQgdGltZSBhbmQgdHJhaW5pbmcgbWF5IGJlIG5lY2Vzc2FyeS4KUGxlYXNlIGRpc2N1c3Mgd2l0aCBtZSBpZiB5b3UgcGxhbiB0byB0YWtlIGEgc3VtbWVyIGludGVybnNoaXAgb3IgYm9vdGNhbXAuCgojIyBNZWV0aW5ncyB7I21lZXRpbmdzfQoKVGhlcmUgYXJlIHRocmVlIHR5cGVzIG9mIG1lZXRpbmdzOiBsYWIgbWVldGluZ3MsIGdyb3VwIG1lZXRpbmdzLCBhbmQgb25lLW9uLW9uZSBtZWV0aW5ncy4KTGFiIG1lZXRpbmdzIG9jY3VyIHdlZWtseS4KQWxsIGxhYiBtZW1iZXJzIGFyZSBleHBlY3RlZCB0byBhdHRlbmQuClR5cGljYWwgZm9ybXMgb2YgbGFiIG1lZXRpbmdzIGFyZSBhcnRpY2xlIGRpc2N1c3Npb25zIChsZWQgYnkgb25lIGxhYiBtZW1iZXIpLCBwcm9qZWN0IHByZXNlbnRhdGlvbnMsIHRhbGtzIGdpdmVuIGJ5IGd1ZXN0IHNwZWFrZXJzLCBhbmQgcHJvZmVzc2lvbmFsIGRldmVsb3BtZW50IHdvcmtzaG9wcy4KWW91IHNob3VsZCByZWFkIHRoZXNlIG1hdGVyaWFscyBpbiBhZHZhbmNlLgpZb3UgYXJlIGV4cGVjdGVkIHRvIGNvbnRyaWJ1dGUgd2l0aCBxdWVzdGlvbnMgYW5kL29yIGNvbW1lbnRzIGR1cmluZyBsYWIgbWVldGluZ3MuClRoZSB1bml2ZXJzaXR5IGFuZCBvdXIgbGFiIHVzZSBPdXRsb29rIGZvciBzY2hlZHVsaW5nOyB5b3UgYXJlIGV4cGVjdGVkIHRvIGtlZXAgeW91ciB1bml2ZXJzaXR5IE91dGxvb2sgYWNjb3VudCB1cCB0byBkYXRlLgoKT25lLW9uLW9uZSBtZWV0aW5ncyBhcmUgNDUtbWluLCB3ZWVrbHkgbWVldGluZ3MgYmV0d2VlbiBlYWNoIHRyYWluZWUgYW5kIG1lLgpZb3UgY2FuIGFsc28gc2NoZWR1bGUgb25lLW9mZiBvbmUtb24tb25lIG1lZXRpbmdzIHdpdGggbWUuCldoZW4gc2NoZWR1bGluZyB5b3VyIG9uZS1vbi1vbmUgYW5kIG90aGVyIG1lZXRpbmdzLCBzZW5kIGFsbCBvZiB5b3VyIGF2YWlsYWJsZSB0aW1lcyAoYmV0d2VlbiA5YW0gYW5kIDVwbSksIG5vdCBqdXN0IHlvdXIgcHJlZmVycmVkIHRpbWVzIQpZb3UgbWF5IGluZGljYXRlIHdoaWNoIG9mIHlvdXIgYXZhaWxhYmxlIHRpbWVzIGFyZSBwcmVmZXJyZWQgb3IgbGVzcyBwcmVmZXJyZWQuCk9uZS1vbi1vbmUgbWVldGluZ3MgYXJlIGRlc2lnbmVkIGZvciB1cyB0byBkaXNjdXNzIGFueSB0cmFpbmluZyBhbmQgcmVzZWFyY2gtcmVsYXRlZCBpc3N1ZXMgaW4gZGV0YWlsIGFuZCB0byBmb3JtIHBsYW5zIGZvciB0aGUgbmVhciBmdXR1cmUsIGluIGFkZGl0aW9uIHRvIGFueSBjaGFsbGVuZ2VzLgpNYWtlIHN1cmUgdGhhdCB5b3UgYWxzbyB1c2UgdGhpcyB0aW1lIHRvIGNvbW11bmljYXRlIG5ldyBpZGVhcyB0aGF0IHlvdSBoYXZlIGFib3V0IHlvdXIgd29yayBhbmQgY2hhbGxlbmdlcyB0aGF0IHlvdSBhcmUgZmFjaW5nLgpSZW1lbWJlcjogSSBjYW5ub3QgYWRkcmVzcyBvciBhZHZpc2UgYWJvdXQgaXNzdWVzIHRoYXQgeW91IGRvIG5vdCBicmluZyB0byBteSBhdHRlbnRpb24uCkkgZXhwZWN0IHRyYWluZWVzIHRvIGF0dGVuZCBhbGwgdGhlaXIgb25lLW9uLW9uZSBtZWV0aW5ncy4KSSB1bmRlcnN0YW5kIHRoYXQgc29tZXRpbWVzIHRoZXJlIGlzIG5vdGhpbmcgdG8gcmVwb3J0LCBzbyBvY2Nhc2lvbmFsIGNhbmNlbGxhdGlvbiBpcyBmaW5lLgpUaGF0IHNhaWQsIG5vdGUgdGhhdCBldmVuIGlmIHlvdSBoYXZlIG5vdGhpbmcgdG8gcmVwb3J0LCBzb21ldGltZXMgaGF2aW5nIHRoZSBtZWV0aW5nIGNhbiBzdGlsbCBiZSBhZHZhbnRhZ2VvdXMgYW5kIGl0IG1heSBiZSB3b3J0aCBvdXIgdGltZSB0byBzdGlsbCBjaGVjayBpbi4KRG8gbm90IGNhbmNlbCBtZWV0aW5ncyB3aXRoIG1lIGlmIHlvdSBmZWVsIHRoYXQgeW91IGhhdmUgbm90IG1hZGUgYWRlcXVhdGUgcHJvZ3Jlc3Mgb24geW91ciByZXNlYXJjaDsgdGhlc2UgbWlnaHQgYmUgdGhlIG1vc3QgY3JpdGljYWwgdGltZXMgdG8gbWVldCB3aXRoIGEgbWVudG9yLgoKWW91IGFyZSBleHBlY3RlZCB0byBhc2sgcXVlc3Rpb25zIGFuZCB0YWtlIG5vdGVzIGR1cmluZyBtZWV0aW5ncy4KQmUgcmVzcGVjdGZ1bCBvZiBteSB0aW1lIGFuZCBtYWtlIGFueSBuZWNlc3NhcnkgY2hhbmdlcyAodG8gcGFwZXJzLCBhbmFseXNpcyBjb2RlLCBldGMuKSBhZnRlciB0aGUgbWVldGluZywgYmFzZWQgb24geW91ciBub3RlcyBhbmQgb24geW91ciBvd24gdGltZeKAlHVubGVzcyBJIGFtIHdvcmtpbmcgb24gdGhlIGRvY3VtZW50IGRpcmVjdGx5LgoKQmVzaWRlcyBtZWV0aW5ncywgdHJhaW5lZXMgYXJlIHdlbGNvbWUgdG8gZHJvcCBieSBteSBvZmZpY2UgYW55dGltZSB0byBkaXNjdXNzIHJlc2VhcmNoLCB0cmFpbmluZywgYW5kIGFkbWluaXN0cmF0aW9uLXJlbGF0ZWQgaXNzdWVzLgpJIGhhdmUgYW4gb3Blbi1kb29yIHBvbGljeTogbXkgZG9vciBpcyBhbHdheXMgb3BlbiAoZmlndXJhdGl2ZWx5IHNwZWFraW5nKS4KSSB3aWxsIGJlIGhhcHB5IHRvIG1lZXQgd2l0aCB5b3UgYXMgbG9uZyBhcyBJIGRvIG5vdCBoYXZlIGFub3RoZXIgb2JsaWdhdGlvbi4KTXkgb2ZmaWNlIGFuZCBwaG9uZSBudW1iZXIgaXM6IFtzZWUgW215IFVuaXZlcnNpdHkgcGFnZV0oaHR0cHM6Ly9wc3ljaG9sb2d5LnVpb3dhLmVkdS9wZW9wbGUvaXNhYWMtcGV0ZXJzZW4pXS4KTXkgY2VsbCBpczogW2JsaW5kZWQgZm9yIHRoZSBpbnRlcm5ldOKApmp1c3QgYXNrXS4KCiMjIE9wZW4gc2NpZW5jZSB7I29wZW5TY2llbmNlfQoKV2UsIGFzIGEgbGFiLCB2YWx1ZSBhbmQgc3RyaXZlIHRvIGFkdmFuY2UgdGhlIG1pc3Npb24gb2YgW29wZW4gc2NpZW5jZV0oaHR0cHM6Ly9vbmxpbmVsaWJyYXJ5LndpbGV5LmNvbS9kb2kvMTAuMTAwMi9pY2QuMjMxNSkgdG8gaW1wcm92ZSB0aGUgYWNjZXNzaWJpbGl0eSwgcmVwcm9kdWNpYmlsaXR5LCBhbmQgcmVwbGljYWJpbGl0eSBvZiBzY2llbmNlLgpBcyBzdWNoLCBhbGwgbGFiIG1lbWJlcnMgYXJlIGV4cGVjdGVkIHRvIGNvbmR1Y3QgcmVzZWFyY2ggdHJhbnNwYXJlbnRseSBhbmQgdG8gcHJvbW90ZSByZXByb2R1Y2liaWxpdHkuClRoaXMgaW5jbHVkZXMsIGJ1dCBpcyBub3QgbGltaXRlZCB0bywgcHJlLSBvciBjby1yZWdpc3RlcmluZyBzdHVkaWVzLCBzaGFyaW5nIGFuYWx5c2lzIHNjcmlwdHMgYW5kIGRhdGEsIHVzaW5nIHZlcnNpb24gY29udHJvbCAoR2l0TGFiKSwgc3VibWl0dGluZyBbcHJlcHJpbnRzXShodHRwczovL3BzeWFyeGl2LmNvbSkgd2hlbiBzdWJtaXR0aW5nIGEgbWFudXNjcmlwdCB0byBhIGpvdXJuYWwsIGFuZCBwcm92aWRpbmcgc3VwcG9ydCBmb3Igb3RoZXIgbGFicycgYXR0ZW1wdHMgdG8gcmVwbGljYXRlIGFuZCByZXByb2R1Y2Ugb3VyIGZpbmRpbmdzLgpXZSB1c2UgR2l0TGFiIGZvciB2ZXJzaW9uIGNvbnRyb2wuCk91ciBsYWIncyB0ZW1wbGF0ZSBmb3IgR2l0TGFiIHJlcG9zaXRvcmllcyBjYW4gYmUgZm91bmQgaGVyZTogaHR0cHM6Ly9yZXNlYXJjaC1naXQudWlvd2EuZWR1L1BldGVyc2VuTGFiL1RlbXBsYXRlLgpPdXIgbGFiJ3MgdGVtcGxhdGUgZm9yIHByb2plY3RzIG9uIHRoZSBPcGVuIFNjaWVuY2UgRnJhbWV3b3JrIChPU0YpIGNhbiBiZSBmb3VuZCBoZXJlW14yXTogaHR0cHM6Ly9vc2YuaW8vNHc5c3YuCkZvbGxvdyBvdXIgW2xhYidzIGd1aWRlIGZvciBvcGVuIHNjaWVuY2VdKG9wZW5TY2llbmNlLmh0bWwpLgoKIyMgQ29sbGFib3JhdGlvbnMgeyNjb2xsYWJvcmF0aW9uc30KCkFsbCBsYWIgbWVtYmVycyBhcmUgZW5jb3VyYWdlZCB0byBleHBsb3JlIGNvbGxhYm9yYXRpb24gb3Bwb3J0dW5pdGllcyBib3RoIHdpdGhpbiBhbmQgb3V0c2lkZSBvZiB0aGUgbGFiLgpJIGFzayB0cmFpbmVlcyB0byAoMSkgcmVzcGVjdCB5b3VyIGNvbGxhYm9yYXRvcnMnIHRpbWUgYW5kIHJlc291cmNlcywgYW5kICgyKSBpbmZvcm0gbWUgaWYgeW91IGFyZSBzZWVraW5nIGNvbGxhYm9yYXRpb25zIHdpdGggb3IgYXJlIGNvbGxhYm9yYXRpbmcgd2l0aCByZXNlYXJjaGVycyAoZS5nLiwgZmluaXNoaW5nIHlvdXIgcHJvamVjdHMgaW4geW91ciBwcmV2aW91cyBsYWIpIG91dHNpZGUgb2YgdGhlIGxhYi4KVHJhaW5lZXMgYXJlIGV4cGVjdGVkIHRvIGhhdmUgYSBmaXJtIGZvb3RpbmcgaW4gdGhlaXIgcmVzZWFyY2ggcHJvZ3Jlc3MgaW4gdGhpcyBsYWIgYmVmb3JlIGNvbGxhYm9yYXRpbmcgd2l0aCBvdXRzaWRlIHJlc2VhcmNoZXJzLgpJIGV4cGVjdCB5b3UgdG8gZGlzY3VzcyBvcmRlciBvZiBhdXRob3JzaGlwIHdpdGggbWUgZWFybHkgb24gd2hlbiB0aGVyZSBhcmUgcG90ZW50aWFsIGNvbGxhYm9yYXRvcnMuCgojIyBSZWFkaW5ncyBhbmQgcmVzb3VyY2VzIHsjcmVhZGluZ3NSZXNvdXJjZXN9CgpUcmFpbmVlcyBhcmUgZXhwZWN0ZWQgdG8gcmVhZCBmb3VuZGF0aW9uYWwgYXJ0aWNsZXMgcmVsYXRpbmcgdG8gdGhlIGxhYiBhbmQgdG8gdGhlaXIgcmVzZWFyY2ggaW50ZXJlc3RzLgpFeGFtcGxlcyBvZiBmb3VuZGF0aW9uYWwgYXJ0aWNsZXMgYXJlIG9uIHRoZSBsYWIncyBHb29nbGUgRHJpdmUgZm9sZGVyIG9mIFtwcmltZXIgYXJ0aWNsZXNdKGh0dHBzOi8vZHJpdmUuZ29vZ2xlLmNvbS9kcml2ZS91LzAvZm9sZGVycy8xWGxQVzM3QURmbjZpQ0N2cHQzczZWd1d4T01La2pKTnUpW14yXS4KSSBhbHNvIGV4cGVjdCB5b3UgdG8gcmVhZCBvbmUgb2YgdGhlIHByaW1lciBhcnRpY2xlcyBieSBTY2h3YXJ0eiAoMjAwOCkgdGl0bGVkLCAiW1RoZSBJbXBvcnRhbmNlIG9mIFN0dXBpZGl0eSBpbiBTY2llbnRpZmljIFJlc2VhcmNoXShodHRwczovL2RyaXZlLmdvb2dsZS5jb20vZmlsZS9kLzFLaHlxWDUxWkwzVUVUMEhqRFJtdUFpeC1vN21lOUNxdy92aWV3P3VzcD1zaGFyaW5nKS4iCkl0IGlzIGltcG9ydGFudCB0byBmZWVsIGNvbWZvcnRhYmxlIGZlZWxpbmcgc3R1cGlkIGluIHNjaWVuY2U7IGlmIHlvdSAoYW5kIGFueSBvZiB1cykgZG8gbm90IGZlZWwgc3R1cGlkLCB3ZSBhcmUgbm90IGRvaW5nIHNjaWVuY2UgcmlnaHQhCkl0IGlzIGFsc28gaW1wb3J0YW50IHRvIHJlYWQgYmFja2dyb3VuZCBpbmZvcm1hdGlvbiBhbmQgcHJvdG9jb2xzIGFib3V0IG91ciBwcm9qZWN0cy4KCldlIGhhdmUgYSBsaXN0IG9mIGxhYiByZXNvdXJjZXMgZm9yIGdyYWR1YXRlIHN0dWRlbnRzIG9uIG91ciBMYWIncyBUcmVsbG8gYm9hcmQgY2FsbGVkICJHcmFkIFN0dWRlbnRzIlteMl06IGh0dHBzOi8vdHJlbGxvLmNvbS9iL1dqcWJncFc5L2dyYWQtc3R1ZGVudHMuClRoZSBUcmVsbG8gYm9hcmQgaW5jbHVkZXMgaXRlbXMgZm9yIG9uYm9hcmRpbmcsIGltcG9ydGFudCBmb3VuZGF0aW9uYWwgc2tpbGxzIGZvciBzY2llbnRpZmljIHRyYWluaW5nLCB1c2VmdWwgc29mdHdhcmUsIGFuZCByZWxldmFudCBqb3VybmFscywgb3JnYW5pemF0aW9ucywgY29uZmVyZW5jZXMsIGFuZCBsaXN0c2VydnMuCkl0IGFsc28gaW5jbHVkZXMgdHJhaW5pbmcgbWF0ZXJpYWxzIGZvciB2YXJpb3VzIHNvZnR3YXJlIChlLmcuLCBSRURDYXAsIEdpdExhYiwgUikuCkFuZCBpdCBpbmNsdWRlcyBhIGxpc3Qgb2YgdGhlIHRpbWVzIHRvIGJsb2NrIG9mZiBkdXJpbmcgdGhlIHNlbWVzdGVyLgoKRGF0YSBhbmFseXNpcyBndWlkZXMgZm9yIHRoZSBsYWIgYXJlIGF2YWlsYWJsZSBoZXJlOiBodHRwczovL2RldnBzeWxhYi5naXRodWIuaW8vRGF0YUFuYWx5c2lzCgojIyBUcmFpbmluZyB7I3RyYWluaW5nfQoKSSBleHBlY3QgeW91IHRvIHRha2Ugb3duZXJzaGlwIG92ZXIgeW91ciBlZHVjYXRpb25hbCBleHBlcmllbmNlcy4KWW91ciBlZHVjYXRpb24gaXMgeW91ciByZXNwb25zaWJpbGl0eeKAlHlvdSBoYXZlIHRoZSBwcmltYXJ5IHJlc3BvbnNpYmlsaXR5IGZvciB0aGUgc3VjY2Vzc2Z1bCBjb21wbGV0aW9uIG9mIHlvdXIgZGVncmVlLgpJIGVuY291cmFnZSB5b3UgdG8gZm9sbG93IHRoZSBbcmVjb21tZW5kZWQgdGltZWxpbmVzXSgjdGltZWxpbmVzKSBmb3IgW3Jlc2VhcmNoXSgjdGltZWxpbmUtcmVzZWFyY2gpLCBbY291cnNld29ya10oI3RpbWVsaW5lLWNvdXJzZXdvcmspLCBhbmQgW2NsaW5pY2FsIHdvcmtdKCN0aW1lbGluZS1jbGluaWNhbCkgKHNlZSB0aGUgQXBwZW5kaXgpLiAKWW91IHNob3VsZCBtYWludGFpbiBhIGhpZ2ggbGV2ZWwgb2YgcHJvZmVzc2lvbmFsaXNtLCBzZWxmLW1vdGl2YXRpb24sIGVuZ2FnZW1lbnQsIHNjaWVudGlmaWMgY3VyaW9zaXR5LCBhbmQgZXRoaWNhbCBzdGFuZGFyZHMuCllvdSBzaG91bGQgYWxzbyBiZSBrbm93bGVkZ2VhYmxlIG9mIGFuZCBjb21wbHkgd2l0aCBhbGwgcG9saWNpZXMsIGRlYWRsaW5lcywgYW5kIHJlcXVpcmVtZW50cyBvZiB0aGUgZ3JhZHVhdGUgcHJvZ3JhbSwgdGhlIGdyYWR1YXRlIGNvbGxlZ2UsIGFuZCB0aGUgdW5pdmVyc2l0eS4KRnVydGhlciwgSSBleHBlY3QgeW91IHRvIGFjdGl2ZWx5IGN1bHRpdmF0ZSB5b3VyIHByb2Zlc3Npb25hbCBkZXZlbG9wbWVudC4KVUkgaGFzIG91dHN0YW5kaW5nIHJlc291cmNlcyBpbiBwbGFjZSB0byBzdXBwb3J0IHByb2Zlc3Npb25hbCBkZXZlbG9wbWVudCBmb3Igc3R1ZGVudHMsIGluY2x1ZGluZyBwcm9mZXNzaW9uYWwgZGV2ZWxvcG1lbnQgc2VtaW5hcnMgYW5kIHdvcmtzaG9wcyBvbiB0b3BpY3Mgc3VjaCBhcyBvcmFsIGNvbW11bmljYXRpb24sIHNjaWVudGlmaWMgd3JpdGluZywgY29sbGFib3JhdGl2ZSByZXNlYXJjaCwgc3RhdGlzdGljYWwgbWV0aG9kcywgdGVhY2hpbmcsIGFuZCBtZW50b3JpbmcuCkkgZXhwZWN0IHlvdSB0byB0YWtlIGFkdmFudGFnZSBvZiB0aGVzZSByZXNvdXJjZXMuCllvdSBhcmUgYWxzbyBlbmNvdXJhZ2VkIHRvIHRhbGsgd2l0aCBvdGhlciBtZW1iZXJzIG9mIHRoZSBsYWIsIG90aGVyIHN0dWRlbnRzLCBhbmQgZmFjdWx0eSB0byBsZWFybiB3YXlzIG9mIGVmZmVjdGl2ZWx5IG5hdmlnYXRpbmcgZ3JhZHVhdGUgc2Nob29sLgoKQXZvaWQgY2xpbmljYWwgY2xpcXVlLWlzaG5lc3MgYW5kIGluc3VsYXJpdHkuClRoZSBtb3N0IGlubm92YXRpdmUgc2NpZW5jZSB0cmFuc2NlbmRzIHRyYWRpdGlvbmFsIGJvdW5kYXJpZXMuCkkgZXhwZWN0IHlvdSB0byBzcGVuZCB0aW1lIGFuZCB0YWxrIHNjaWVuY2Ugd2l0aCBncmFkdWF0ZSBzdHVkZW50cyBhbmQgZmFjdWx0eSBpbiBhcmVhcyBvdXRzaWRlIG9mIGNsaW5pY2FsIChlLmcuLCBCQ04sIGNvZ25pdGlvbinigJRib3RoIHRvIGJyb2FkZW4geW91ciBwZXJzcGVjdGl2ZXMgYW5kIHRvIGluY29ycG9yYXRlIGJhc2ljIHNjaWVuY2UgcGVyc3BlY3RpdmVzIGludG8geW91ciB3b3JrLCB3aGlsZSBhbHNvIGJlaW5nIGEgZ29vZCBEZXBhcnRtZW50YWwgY2l0aXplbi4KQ2xpbmljYWwgc3R1ZGVudHMgYXQgc29tZSBwcm9ncmFtcyB3cm9uZ2x5IHRoaW5rIHRoZXkgYXJlIHNwZWNpYWwgYW5kIHRoaW5rIG9mIHRoZWlyIHdvcmsgYXMgc3VwZXJpb3IgdG8gYmFzaWMgc2NpZW5jZS4KQ2xpbmljYWwgc2NpZW5jZSBpcyBub3QgYSByZXNlYXJjaCBhcmVh4oCUY2xpbmljYWwgc2NpZW5jZSB1c2VzIGJhc2ljIHNjaWVuY2UgKGUuZy4sIGNvZ25pdGl2ZSwgc29jaWFsLCBkZXZlbG9wbWVudGFsLCBiaW9sb2dpY2FsIHNjaWVuY2UpIGluIHJpZ29yb3VzIHdheXMgdG8gYW5zd2VyIGNsaW5pY2FsbHkgcmVsZXZhbnQgcXVlc3Rpb25zLgoKSSBleHBlY3QgYWxsIHRyYWluZWVzIHRvIGNvbXBseSB3aXRoIHRoZWlyIHJlc3BlY3RpdmUgdHJhaW5pbmcgcGxhbnMgKGUuZy4sIHRyYWluaW5nIHBsYW5zIG9mIHlvdXIgZGVncmVlIHByb2dyYW0pLCBzdWNoIGFzIHRha2luZyByZXF1aXJlZCBjb3Vyc2VzLCBtYWludGFpbmluZyBwYXNzaW5nIGdyYWRlcywgZnVsZmlsbGluZyB0ZWFjaGluZyBhc3Npc3RhbnQgZHV0aWVzLCBjbGluaWNhbCB0cmFpbmluZywgYW5kIG9yZ2FuaXppbmcgY29tbWl0dGVlIG1lZXRpbmdzLgpZb3UgYXJlIGV4cGVjdGVkIHRvIGF0dGVuZCBhbmQgYWN0aXZlbHkgcGFydGljaXBhdGUgaW4gYWxsIGdyb3VwIG1lZXRpbmdzIGFuZCBpbiBzZW1pbmFycyB0aGF0IGFyZSBwYXJ0IG9mIHlvdXIgZWR1Y2F0aW9uYWwgcHJvZ3JhbS4KSSBleHBlY3QgeW91IHRvIGF0dGVuZCBjb25mZXJlbmNlcywgQ2xpbmljYWwgUm91bmRzLCBEZXZlbG9wbWVudGFsIERpc2N1c3Npb24sIERhdGEgVGVhbSBhbmQgbGFiIG1lZXRpbmdzLCBEZUxUQSBDZW50ZXIsIEZyaWRheSBjb2xsb3F1aWEgc2VyaWVzLCBhbmQgb3RoZXIgcmVsZXZhbnQgYnJvd25iYWdzIHN1Y2ggYXMgQ29nbml0aW9uLCBCZWhhdmlvcmFsICYgQ29nbml0aXZlIE5ldXJvc2NpZW5jZSAoQkNOKSwgYW5kIHRoZSBJb3dhIE5ldXJvc2NpZW5jZSBJbnN0aXR1dGUgKElOSSkuCldoZW4gd2UgZ28gdG8gY29uZmVyZW5jZXMsIEkgd2lsbCBpbnRyb2R1Y2UgeW91IHRvIG15IHByb2Zlc3Npb25hbCBuZXR3b3JrIGFuZCBlbmNvdXJhZ2UgeW91IHRvIGJ1aWxkIHNraWxscyBpbiBuZXR3b3JraW5nLgoKV2Ugd2lsbCBkaXNjdXNzIHlvdXIgdHJhaW5pbmcgYW5kIGNhcmVlciBkZXZlbG9wbWVudCBwbGFucy4KQWxsIHByb2dyYW0gcmVxdWlyZW1lbnRzIGFyZSBpbiB0aGUgRGVwYXJ0bWVudCdzIFtHcmFkdWF0ZSBIYW5kYm9va10oaHR0cHM6Ly9wc3ljaG9sb2d5LnVpb3dhLmVkdS9zaXRlcy9wc3ljaG9sb2d5LnVpb3dhLmVkdS9maWxlcy8yMDIzLTA4L0dyYWRIYW5kYm9vazIwMjMlMjAtJTIwQXVndXN0LnBkZikgYW5kL29yIHRoZSBHcmFkdWF0ZSBDb2xsZWdlJ3MgW01hbnVhbCBvZiBSdWxlcyBhbmQgUmVndWxhdGlvbnNdKGh0dHBzOi8vZ3JhZC51aW93YS5lZHUvYWNhZGVtaWNzL21hbnVhbCkuCkkgaW5jbHVkZSBhIHN1Z2dlc3RlZCB0aW1lbGluZSBmb3IgeW91ciByZXNlYXJjaCwgY2xpbmljYWwgdHJhaW5pbmcsIGFuZCBjb3Vyc2V3b3JrIFtiZWxvd10oI3RpbWVsaW5lcykuClBsZWFzZSBjb25zdWx0IHdpdGggbWUgYmVmb3JlIHNlbGVjdGluZyB5b3VyIGNvdXJzZXMsIGNsaW5pY2FsIHByYWN0aWNhLCBhbmQgb3RoZXIgdGltZS1pbnRlbnNpdmUgdHJhaW5pbmcgZXhwZXJpZW5jZXMuCgpGb3Igc29tZSBzdHVkZW50cywgdGhlcmUgbWF5IGJlIHJlbGV2YW50IHRyYWluaW5nIGZlbGxvd3NoaXBzLgpGb3IgaW5zdGFuY2UsIHRoZSBCZWhhdmlvcmFsLUJpb21lZGljYWwgSW50ZXJmYWNlIFRyYWluaW5nIFByb2dyYW0gKEJCSVApIHByb3ZpZGVzIHRyYWluaW5nIGluIGJpby1tZWRpY2FsIHJlc2VhcmNoLgoKVGhpcyBpcyBhIHJlc2VhcmNoLW9yaWVudGVkIHByb2dyYW07IHlvdSBhcmUgZXhwZWN0ZWQgdG8gcHJpb3JpdGl6ZSByZXNlYXJjaCByZWxhdGl2ZSB0byB5b3VyIG90aGVyIG9ibGlnYXRpb25zLgpJZiB5b3UgYXJlIGdldHRpbmcgYWxsIEFzIGluIGNsYXNzZXMsIHlvdSBhcmUgc3BlbmRpbmcgdG9vIG11Y2ggdGltZSBvbiBjb3Vyc2V3b3JrIQpbR3JhZGVzIGluIGdyYWQgc2Nob29sIGRvbid0IG1hdHRlcl0oaHR0cHM6Ly9waGRjb21pY3MuY29tL2NvbWljcy9hcmNoaXZlLnBocD9jb21pY2lkPTQ2OSkgKGFzIGxvbmcgYXMgeW91IHBhc3MgeW91ciBjbGFzc2VzOyBhcmNoaXZlZCBhdCBodHRwczovL3Blcm1hLmNjL0tEVTItNzlKWiksIGFuZCB0aGUgc29vbmVyIHlvdSBmaWd1cmUgdGhhdCBvdXQsIHRoZSBiZXR0ZXIgb2ZmIGFuZCBtb3JlIHByb2R1Y3RpdmUgeW91IHdpbGwgYmUuCkluc3RlYWQgb2YgZm9jdXNpbmcgeW91ciBsZWFybmluZyBvbiBjb3Vyc2V3b3JrLCBsZWFybiBieSBkb2luZy4KVGFrZSB3aGF0IHlvdSBuZWVkIGZyb20gY2xhc3NlcyB0byBhZHZhbmNlIHlvdXIgcmVzZWFyY2ggcHJvZ3JhbS4KClBsZWFzZSByZWZlciB0byB0aGUgQ2xpbmljIE1hbnVhbCBmb3IgZ3VpZGVsaW5lcyByZWdhcmRpbmcgZmFjZS10by1mYWNlIGhvdXJzIChvbiB0aGUgY2xpbmljIGRyaXZlW14zXTogYFxcaW93YS51aW93YS5lZHVcc2hhcmVkXENMQVNcRGVwYXJ0bWVudGFsXFBCU1xDbGluaWNcQ2xpbmljIE1hbnVhbFxgKS4KRm9yIGNsaW5pY2FsIHN0dWRlbnRzLCBpdCBpcyBpbXBvcnRhbnQgdG8gcmVndWxhcmx5IHRyYWNrIHlvdXIgY2xpbmljYWwgZXhwZXJpZW5jZXMgYW5kIGhvdXJzIHRvIGVuc3VyZSB0aGF0IHlvdSBhcmUgbWVldGluZyBhcHByb3ByaWF0ZSBtaWxlc3RvbmVzIGluIHlvdXIgdHJhaW5pbmcuClRoZSBwcm9ncmFtIGhhcyBhbiBpbnN0aXR1dGlvbmFsIGFjY291bnQgZm9yIFtUaW1lMlRyYWNrXShodHRwczovL3RpbWUydHJhY2suY29tKS4KWW91IGFyZSBleHBlY3RlZCB0byB1c2UgaXQgdG8gdHJhY2sgaG91cnMgYW5kIGFyZSBleHBlY3RlZCB0byBzdGF5IGNhdWdodCB1cCBpbiB5b3VyIHRyYWNraW5nLgpXZSB3aWxsIGRpc2N1c3MgeW91ciBwbGFucyBmb3IgY2xpbmljYWwgdHJhaW5pbmcgYW5kIHByYWN0aWN1bSBvcHBvcnR1bml0aWVzIGR1cmluZyBvdXIgcmVndWxhciBpbmRpdmlkdWFsIG1lZXRpbmdzLgpJIHdpbGwgYWxzbyBwcm92aWRlIGNsaW5pY2FsIHN1cGVydmlzaW9uIG9mIHNvbWUgb2YgeW91ciBjYXNlcyBhcyBwYXJ0IG9mIHRoZSBTZWFzaG9yZSBDbGluaWMuCkkgYW0gYSBsaWNlbnNlZCBjbGluaWNhbCBwc3ljaG9sb2dpc3QsIHNvIGFzc2Vzc21lbnQgaG91cnMgaW4gbXkgcmVzZWFyY2ggbGFiIGNvdW50IGFzIGNsaW5pY2FsIGhvdXJzLgoKIyMgU29mdHdhcmUgeyNzb2Z0d2FyZX0KCk15IGxhYiBwcmltYXJpbHkgdXNlcyBgUmAgZm9yIGRhdGEgbWFuYWdlbWVudCBhbmQgYW5hbHlzaXMgYmVjYXVzZSBpdCBpcyBmcmVlLCBvcGVuIHNvdXJjZSwgb3BlbiBwbGF0Zm9ybSwgY29kZS1iYXNlZCAod2hpY2ggaW5jcmVhc2VzIHNoYXJlLWFiaWxpdHkgYW5kIHJlcHJvZHVjaWJpbGl0eSBvZiBhbmFseXNlcyksIGFuZCBzdXBwb3J0cyBhZHZhbmNlZCBzdGF0aXN0aWNzIGFuZCBzdGF0ZS1vZi10aGUtYXJ0IGdyYXBoaWNzIGZyb20gcGFja2FnZXMgZGVzaWduZWQgYnkgc3RhdGlzdGljYWwgZXhwZXJ0cyBhbGwgb3ZlciB0aGUgd29ybGQsIGFuZCB0byB3aGljaCBhbnlvbmUgKGluY2x1ZGluZyB5b3UpIGNhbiBjb250cmlidXRlLgpXZSBhbHNvIHVzZSBgTUFUTEFCYCBmb3IgcHJvY2Vzc2luZyBvZiBldmVudC1yZWxhdGVkIHBvdGVudGlhbCBkYXRhIGFuZCBgTXBsdXNgIGZvciBzdHJ1Y3R1cmFsIGVxdWF0aW9uIG1vZGVsaW5nLgpZb3UgYXJlIGVuY291cmFnZWQgdG8gbGVhcm4gYFJgIGFuZCBhbnkgb3RoZXIgc3BlY2lhbGl6ZWQgc29mdHdhcmUgdGhhdCB3aWxsIGFsbG93IHlvdSB0byBhbnN3ZXIgdGhlIHJlc2VhcmNoIHF1ZXN0aW9ucyB5b3UgYXJlIHB1cnN1aW5nLgpJZiB0aGVyZSdzIGFub3RoZXIgdG9vbCBvciBzb2Z0d2FyZSBwYWNrYWdlIHRoYXQgY2FuIGRvIHNvbWV0aGluZyBlYXNpZXIsIGJldHRlciwgbW9yZSBlZmZpY2llbnRseSwgb3Igd2l0aCBncmVhdGVyIHJlcHJvZHVjaWJpbGl0eSB0aGFuIHdoYXQgd2UgYXJlIHVzaW5nLCBmZWVsIGZyZWUgdG8gdXNlIGl04oCUdGhvdWdoIEkgbWF5IG5vdCBiZSBhYmxlIHRvIHByb3ZpZGUgZm9ybWFsIGd1aWRhbmNlLgpGb3IgaW5zdGFuY2UsIGBQeXRob25gIGlzIGEgZnJlZSBwcm9ncmFtbWluZyBsYW5ndWFnZSB0aGF0IGlzIGVtZXJnaW5nIGFzIGEgbmljZSBjb21wbGVtZW50IHRvIGBSYCBmb3Igc3RhdGlzdGljYWwgcHJvZ3JhbW1pbmcuCk5vIG1hdHRlciB3aGljaCBzb2Z0d2FyZSB5b3UgdXNlLCB5b3Ugc2hvdWxkIGJlIGFibGUgdG8gdW5kZXJzdGFuZCBhbmQgZXhwbGFpbiB3aGF0IHRoZSBhbmFseXNpcyBpcyBkb2luZyBhbmQgYmUgYWJsZSB0byBpbnRlcnByZXQgYW5kIGV4cGxhaW4gdGhlIG91dHB1dC4KCiMjIEJlc3QgcHJhY3RpY2VzIHsjYmVzdFByYWN0aWNlc30KCkkgZXhwZWN0IHlvdSB0byBmb2xsb3cgb3BlbiBzY2llbmNlIHByYWN0aWNlcyAoZGVzY3JpYmVkIGFib3ZlKS4KSSBleHBlY3QgeW91IHRvIGNvbW1lbnQgeW91ciBjb2RlIHNvIHRoYXQgb3RoZXJzIGNhbiB1bmRlcnN0YW5kIGl0IChhbmQgc28geW91IGNhbiB1bmRlcnN0YW5kIGl0IHdoZW4geW91IGdvIGJhY2sgdG8gaXQgNSsgeWVhcnMgbGF0ZXIpLgpJIGV4cGVjdCB5b3UgdG8gdXNlIHZlcnNpb24gY29udHJvbCAoZ2l0IHdpdGggR2l0TGFiKSB3aXRoIGFsbCBwcm9qZWN0cyBhbmQgdG8gc2F2ZSB5b3VyIGxhYiBwcm9qZWN0cyBpbiBhIHJlcG8gb24gdGhlIFtsYWIncyBHaXRMYWIgcGFnZV0oaHR0cHM6Ly9yZXNlYXJjaC1naXQudWlvd2EuZWR1L1BldGVyc2VuTGFiKS4KQ29tbWl0IGFuZCBwdXNoIHlvdXIgd29yayB0byB0aGUgR2l0TGFiIHJlcG8gb2Z0ZW4uClVzaW5nIHZlcnNpb24gY29udHJvbCBwcm92aWRlcyBtYW55IGJlbmVmaXRzOiAoYSkgaXQgcHJvdmlkZXMgYmFja3VwcyBvZiBhbGwgZmlsZXMgaW4gdGhlIGNsb3VkLCAoYikgaXQgYWxsb3dzIHlvdSB0byBhY2Nlc3MgdGhlIGZpbGVzIGluIHRoZSBjbG91ZCBmcm9tIGFueSBjb21wdXRlciB3aXRoIGFjY2VzcyB0byB0aGUgaW50ZXJuZXQsIGV2ZW4gaWYgeW91IGFyZSBhd2F5IGZyb20geW91ciBsb2NhbCBjb21wdXRlciwgKGMpIGl0IHByb3ZpZGVzIGhpc3Rvcnkgb2YgYWxsIChjb21taXR0ZWQpIGNoYW5nZXMgbWFkZSB0byBhbGwgZmlsZXMuCklmIHlvdSBtYWtlIGEgbWlzdGFrZSBpbiB5b3VyIGNvZGUsIHlvdSBjYW4gZWFzaWx5IHJldmVydCB0byBhIHByaW9yIHZlcnNpb24gYmVjYXVzZSB5b3UgdG9vayBzbmFwc2hvdHMgKGNvbW1pdHMpIG9mIHlvdXIgZmlsZXMhCihkKSBJdCBhbGxvd3MgeW91IHRvIHdyaXRlIGNsZWFuZXIgY29kZSBiZWNhdXNlIHlvdSBkbyBub3QgbmVlZCB0byBrZWVwIGFsbCB0aGUgb2xkLCAiY29tbWVudGVkIG91dCIgbGluZXMgb2YgY29kZSwgKGUpIGl0IGhlbHBzIHdpdGggcHJvamVjdCBvcmdhbml6YXRpb247IHlvdSBubyBsb25nZXIgaGF2ZSB0byBrZWVwIGZpbGVzIG9yIGZvbGRlcnMgbmFtZWQgInByb2plY3Rfb2xkIiAob3IgInByb2plY3RfMiIsICJbcHJvamVjdF9maW5hbF0oaHR0cHM6Ly9waGRjb21pY3MuY29tL2NvbWljcy9hcmNoaXZlLnBocD9jb21pY2lkPTE1MzEpIiAoYXJjaGl2ZWQgYXQgaHR0cHM6Ly9wZXJtYS5jYy8zUTVELVhLVEopLCBvciB3aGF0ZXZlciksIChmKSBpdCBrZWVwcyBhbGwgZmlsZXMgZm9yIHRoZSBwcm9qZWN0IHNlbGYtY29udGFpbmVkLCB3aGljaCBoZWxwcyBpbmNyZWFzZSByZXByb2R1Y2liaWxpdHksIGFuZCAoZykgaXQgYWxsb3dzIGVhc2llciBjb2xsYWJvcmF0aW9uIHdpdGggb3RoZXJzIG9uIHRoZSBwcm9qZWN0LgoKIyMgT3RoZXIgcmVzcG9uc2liaWxpdGllcyB7I290aGVyUmVzcG9uc2liaWxpdGllc30KCkkgZXhwZWN0IHlvdSB0byBiZSBhIHRlYW0gcGxheWVyLCB0byBjb250cmlidXRlIHRvIHRoZSB0ZWFtLCBhbmQgdG8gdGFrZSBhIGxlYWRlcnNoaXAgcm9sZSBpbiB0aGUgbGFiLgpTdHJpdmUgdG8gYmUgdGhlIHZlcnkgYmVzdCBsYWIgY2l0aXplbiBhbmQgY2l0aXplbiBvZiB0aGUgRGVwYXJ0bWVudCBhbmQgVW5pdmVyc2l0eS4KUmVnYXJkbGVzcyBvZiB5b3VyIHNvdXJjZSBvZiBmdW5kaW5nIChlLmcuLCB0ZWFjaGluZyBhc3Npc3RhbnRzaGlwLCByZXNlYXJjaCBhc3Npc3RhbnRzaGlwLCBmZWxsb3dzaGlwL2dyYW50KSwgeW91IGNhbiBleHBlY3QgbGFiLXJlbGF0ZWQgYXNzaWdubWVudHMgdGhhdCBhcmUgZm9yIHRoZSBiZXR0ZXJtZW50IG9mIHRoZSB0ZWFtLgpGb3IgaW5zdGFuY2UsIEkgZXhwZWN0IHlvdSB0byBzdXBlcnZpc2UgYSBjb2RpbmcgdGFzay4KSSBleHBlY3QgeW91IHRvIGxlYXJuIHRoZSBsYWIgcHJvY2VkdXJlcyBhbmQgcHJvdG9jb2xzLgpZb3Ugc2hvdWxkIGJlIGFibGUgdG8gdHJhaW4gcmVzZWFyY2ggYXNzaXN0YW50cyBvciBsYWIgc3RhZmYgb24gdmFyaW91cyBwcm9jZWR1cmVzLgpJIGV4cGVjdCB5b3UgdG8gd29yayB0byBlbnN1cmUgcXVhbGl0eSBjb250cm9sIG9mIGxhYiBwcm9jZWR1cmVzIHNvIHRoYXQgd2UgYXJlIGNvbGxlY3RpbmcgYW5kIHByb2Nlc3NpbmcgaGlnaC1xdWFsaXR5IGRhdGEgaW4gYW4gZWZmaWNpZW50IHdheS4KSSBleHBlY3QgeW91IHRvIGhlbHAgb3RoZXIgdGVhbSBtZW1iZXJzLCBpbmNsdWRpbmcgdW5kZXJncmFkdWF0ZSByZXNlYXJjaCBhc3Npc3RhbnRzIHdpdGggaW5kZXBlbmRlbnQgcmVzZWFyY2ggcHJvamVjdHMsIEhvbm9ycyBwcm9qZWN0cyBhbmQgdGhlc2VzLCBqb2Igb3IgZ3JhZHVhdGUgYXBwbGljYXRpb25zL2ludGVydmlld3MsIGV0Yy4KRG9pbmcgc28gd2lsbCBoZWxwIHlvdSBidWlsZCBpbXBvcnRhbnQgc2tpbGxzIGluIG1lbnRvcmluZy4KClJlZ2FyZGxlc3Mgb2YgeW91ciBzb3VyY2Ugb2YgZnVuZGluZywgeW91IGFyZSBleHBlY3RlZCB0byBzcGVuZCBtb3N0IG9mIHlvdXIgdGltZSBkb2luZyBsYWItcmVsYXRlZCByZXNlYXJjaC4KSWYgeW91IGFyZSBmdW5kZWQgb24gYSByZXNlYXJjaCBhc3Npc3RhbnRzaGlwIGZyb20gdGhlIGxhYiwgSSBleHBlY3QgeW91IHdpbGwgc3BlbmQgYXQgbGVhc3QgMjAgaG91cnMgKGZvciBhIGZ1bGwtdGltZSBhc3Npc3RhbnRzaGlwOyBhdCBsZWFzdCAxMCBob3VycyBmb3IgYSBoYWxmLXRpbWUgYXNzaXN0YW50c2hpcCkgZG9pbmcgbGFiLXJlbGF0ZWQgcmVzZWFyY2ggZnJvbSB0aGUgcmVsZXZhbnQgZ3JhbnQocykgYW5kIGxhYi1hc3NpZ25lZCB3b3JrIHRoYXQgaXMgc2VwYXJhdGUgZnJvbSBjb3Vyc2V3b3JrLCBjbGluaWNhbCB3b3JrLCB3b3JrIHRvd2FyZCBwcm9ncmFtIHJlcXVpcmVtZW50cyAoZS5nLiwgQ29tcHMgZXhhbXMpLCBvdGhlciByZXNlYXJjaC1yZWxhdGVkIHdvcmssIGFuZCBvdGhlciBlbmRlYXZvcnMuClRoaXMgaXMgYW4gZXRoaWNhbCBvYmxpZ2F0aW9uIGdpdmVuIG91ciBmZWRlcmFsIHNvdXJjZXMgb2YgZnVuZGluZy4KSWYgeW91IGFyZSB1bmFibGUgdG8gY29tbWl0IHRvIGEgZnVsbCByZXNlYXJjaCBsb2FkIChhbmQgdGhlcmVmb3JlIHdvdWxkIG5vdCBiZSBhYmxlIHRvIG1lZXQgdGhlIGV4cGVjdGF0aW9ucyBvZiBhIHJlc2VhcmNoIGFzc2lzdGFudHNoaXApLCB5b3Ugc2hvdWxkIHRlbGwgbWUgYmVmb3JlIGFzc2lzdGFudHNoaXBzIGFyZSBhc3NpZ25lZCwgc28geW91IGNhbiBiZSBnaXZlbiBhIHRlYWNoaW5nIGFzc2lzdGFudHNoaXAgb3IgYW5vdGhlciBzb3VyY2Ugb2YgZnVuZGluZy4KTmV2ZXJ0aGVsZXNzLCBldmVuIHdpdGggYSB0ZWFjaGluZyBhc3Npc3RhbnRzaGlwLCB5b3UgYXJlIGV4cGVjdGVkIHRvIHNwZW5kIG1vc3Qgb2YgeW91ciB0aW1lIGRvaW5nIGxhYi1yZWxhdGVkIHJlc2VhcmNoLgpZb3Ugc2hvdWxkIG5vdCBzcGVuZCBtb3JlIHRoYW4gMTAgaG91cnMgcGVyIHdlZWsgZG9pbmcgdGVhY2hpbmctcmVsYXRlZCB3b3JrIGZvciBhIGhhbGYtdGltZSB0ZWFjaGluZyBhc3Npc3RhbnRzaGlwLCBhbmQgbm90IG1vcmUgdGhhbiAyMCBob3VycyBmb3IgYSBmdWxsLXRpbWUgdGVhY2hpbmcgYXNzaXN0YW50c2hpcCAoYW5kIGdlbmVyYWxseSBtdWNoIGxlc3MgdGhhbiB0aGF0KS4KCllvdSBzaG91bGQgdGFsayB3aXRoIG1lIGFuZCBnZXQgbXkgYXBwcm92YWwgYmVmb3JlIGRvaW5nIG9yIGFkZGluZyBhbnkgZXh0ZXJuYWwgcHJhY3RpY2EuClBlciBsYWIgYW5kIHByb2dyYW0gZXhwZWN0YXRpb25zLCB5b3Ugc2hvdWxkIG5vdCBzcGVuZCBtb3JlIHRoYW4gMS41IGZ1bGwgZGF5cyAoaS5lLiwgMTIgaG91cnMpIGRvaW5nIGNsaW5pYy1yZWxhdGVkIHdvcmsgcGVyIHdlZWsuCkRvIG5vdCBmb2N1cyB0b28gbXVjaCBvbiBjbGluaWNhbCBob3VyczsgUGguRC4gc3R1ZGVudHMgZnJvbSBub24tY2xpbmljYWwgc2NpZW5jZSBwcm9ncmFtcyBhbmQgUHN5LkQuIHN0dWRlbnRzIHdpbGwgaGF2ZSB3YXkgbW9yZSBjbGluaWNhbCBob3VycyB0aGFuIHlvdeKAlHlvdSBhcmUgbm90IGNvbXBldGluZyB3aXRoIHRoZW0gZm9yIHRoZSBzYW1lIHR5cGVzIG9mIHNpdGVzLgpZb3Ugd2lsbCBiZSBtb3N0IGNvbXBldGl0aXZlIGF0IFtjbGluaWNhbCBzY2llbmNlIGludGVybnNoaXAgc2l0ZXNdKGh0dHBzOi8vd3d3LmFjYWRwc3ljaGNsaW5pY2Fsc2NpZW5jZS5vcmcvaW50ZXJuc2hpcC1wcm9ncmFtcy5odG1sKSAoYXJjaGl2ZWQgYXQgaHR0cHM6Ly9wZXJtYS5jYy8yVlJLLUpSTVEpLCB3aGljaCBjYXJlIG11Y2ggbW9yZSBhYm91dCB0aGUgKnF1YWxpdHkqIG9mIHRyYWluaW5nIHRoYW4gdGhlICpxdWFudGl0eSogb2YgdHJhaW5pbmcuCkFuZCBVSSBoYXMgdG9wLW5vdGNoIGNsaW5pY2FsIHRyYWluaW5nLgpJbnRlcm5zaGlwIHNpdGVzIGFsc28gY2FyZSBoZWF2aWx5IGFib3V0IHNjaWVudGlmaWMgcHJvZHVjdGl2aXR5IGluY2x1ZGluZyBwdWJsaWNhdGlvbnMgKFtMdW5kIGV0IGFsLiwgMjAxNl0oaHR0cHM6Ly9wc3ljbmV0LmFwYS5vcmcvcmVjb3JkLzIwMTUtNTcwNzMtMDAxKSksIGFuZCB0aGlzIGlzIGV2ZW4gbW9yZSB0cnVlIGZvciBjbGluaWNhbCBzY2llbmNlIGludGVybnNoaXAgc2l0ZXMuCkkgaGFkIGZvdXIgZmlyc3QtYXV0aG9yZWQgcHVibGljYXRpb25zIChuaW5lIHRvdGFsKSBhbmQgYW4gTlJTQSB3aGVuIEkgYXBwbGllZCBmb3IgaW50ZXJuc2hpcCBhbmQgcmVjZWl2ZWQgMTMgaW50ZXJ2aWV3IGludml0YXRpb25zIG91dCBvZiAxNSBzaXRlcy4KSSBhbSBoYXBweSB0byBzaGFyZSBteSBwcmVwYXJhdGlvbiwgYXBwbGljYXRpb24sIGFuZCBpbnRlcnZpZXcgbWF0ZXJpYWxzIGV0Yy4KZm9yIGludGVybnNoaXBzLCBqb2JzLCBldGMuIGFuZCB0byB3b3JrIHdpdGggeW91IHRvIG1ha2UgdGhlbSBhcyBzdHJvbmcgYXMgcG9zc2libGUuCgpQbGVhc2UgZG8gbm90IGhpZGUgaW4geW91ciBvZmZpY2U7IGdldCBvdXQgYW5kIG1lZXQgcGVvcGxlIGF0IGdyb3VwIGFuZCBkZXBhcnRtZW50YWwgZXZlbnRzLgpJZiBhIGNvbGxvcXVpdW0gaXMgZ2l2ZW4gaW4gYW4gYXJlYSBpbiB3aGljaCB5b3UgaGF2ZSBhIHJlc2VhcmNoIGludGVyZXN0LCBzaWduIHVwIHRvIG1lZXQgd2l0aCB0aGUgc3BlYWtlci4KR28gdXAgdG8gc3BlYWtlcnMgYWZ0ZXIgdGFsa3MsIGludHJvZHVjZSB5b3Vyc2VsZiwgYW5kIGV4cHJlc3MgaW50ZXJlc3QgaW4gdGhlaXIgd29yayBieSBhc2tpbmcgcXVlc3Rpb25zLgpOZXR3b3JraW5nIHNraWxscyBhcmUgaW1wb3J0YW50IGFuZCBjYW4gb2Z0ZW4gbGVhZCB0byBqb2Igb3Bwb3J0dW5pdGllcy4KCiMjIENhcmVlciBkZXZlbG9wbWVudCB7I2NhcmVlckRldmVsb3BtZW50fQoKSSBzdHJvbmdseSBiZWxpZXZlIHRoYXQgdGhlIGxhYiBncm93cyBiZXR0ZXIgd2l0aCBlYWNoIHRyYWluZWUgYWNoaWV2aW5nIHRoZWlyIGNhcmVlciBnb2Fscy4KSSByZXNwZWN0IGFuZCBzdXBwb3J0IGVhY2ggdHJhaW5lZSdzIGNhcmVlciBjaG9pY2UgYW5kIHVuZGVyc3RhbmQgdGhhdCB0aGluZ3MgY2FuIGNoYW5nZSBvdmVyIHRpbWUuCkF0IHRoZSBzYW1lIHRpbWUsIGtlZXAgaW4gbWluZCB0aGF0IHRoaXMgaXMgYSBbcmVzZWFyY2gtb3JpZW50ZWQgdHJhaW5pbmcgcHJvZ3JhbV0oaHR0cHM6Ly9wc3ljaG9sb2d5LnVpb3dhLmVkdS9ncmFkdWF0ZSkgYW5kIGlzIGJlc3QgYWxpZ25lZCB3aXRoIGNhcmVlcnMgaW4gd2hpY2ggcmVzZWFyY2ggd2lsbCBiZSBhIGtleSBjb21wb25lbnQuCkZvciBwcm9zcGVjdGl2ZSBncmFkdWF0ZSBzdHVkZW50cywgaWYgeW91IGhhdmUgZ29hbHMgb2YgYmVpbmcgYSBjbGluaWNpYW4sIEkgd291bGQgZGlzc3VhZGUgeW91IGZyb20gam9pbmluZyBvdXIgcHJvZ3JhbSBhbmQgdGhpcyBsYWI7IHlvdSB3b3VsZCBub3QgYmUgaGFwcHkgaGVyZS4KCldlIHdpbGwgZGlzY3VzcyB5b3VyIGNhcmVlciBkZXZlbG9wbWVudCBwbGFucyBhbmQgaG93IEkgY2FuIGJlc3Qgc3VwcG9ydCB0aGVtLgpEdXJpbmcgZWFjaCBGYWxsIHNlbWVzdGVyLCBJIGV4cGVjdCB5b3UgdG8gY29tcGxldGUgYW4gSW5kaXZpZHVhbCBEZXZlbG9wbWVudCBQbGFuIChbaHR0cHM6Ly9teWlkcC5zY2llbmNlY2FyZWVycy5vcmddKGh0dHBzOi8vbXlpZHAuc2NpZW5jZWNhcmVlcnMub3JnKTsgYXJjaGl2ZWQgYXQgaHR0cHM6Ly9wZXJtYS5jYy9NVDI3LUNQUDIpLCBhbmQgdG8gcmV2aWV3IGFuZCBkaXNjdXNzIHRoZSByZXN1bHRzIHdpdGggbWUuCkkgZXhwZWN0IHlvdSB0byBpbmZvcm0gbWUgaWYgdGhlcmUgaXMgYW55IGNoYW5nZSBpbiB5b3VyIGNhcmVlciBwbGFucyBzbyB0aGF0IHlvdXIgbGFiIGFjdGl2aXRpZXMgY2FuIGJlIGJldHRlciBhbGlnbmVkIHRvIHlvdXIgbmV3IGdvYWxzLgpJbiBhZGRpdGlvbiB0byBhY2FkZW1pYyBjYXJlZXJzIChlLmcuLCByZXNlYXJjaC90ZWFjaGluZy9jbGluaWNhbCB3b3JrIGF0IFIxIHVuaXZlcnNpdHksIGFjYWRlbWljIG1lZGljYWwgY2VudGVyLCBvciBsaWJlcmFsIGFydHMgY29sbGVnZSksIEkgc3VwcG9ydCBwbGFucyBmb3IgaW5kdXN0cnkgYW5kIG5vbi1hY2FkZW1pYyBjYXJlZXJzIChlLmcuLCBkYXRhIHNjaWVuY2UsIGNvbnN1bHRpbmcsIGdvdmVybm1lbnQsIE5HTzsgdGhlc2UgYXJlIGp1c3QgZXhhbXBsZXPigJR0aGVyZSBhcmUgbWFueSBvdGhlcnMpLgpZb3UgYXJlIHdlbGNvbWUgdG8gZ2V0IHRoZSB0cmFpbmluZyB5b3UgbmVlZCwgcHJvdmlkZWQgdGhhdCB5b3UgbWFpbnRhaW4gZ29vZCBwcm9ncmVzcyBvbiB5b3VyIGRlZ3JlZS1yZWxhdGVkIHRyYWluaW5nIGFuZCByZXNlYXJjaC4KU2VlayB0aGUgZXhwZXJpZW5jZSBvZiBmYWN1bHR5LCBwcm9mZXNzaW9uYWxzLCBwb3N0LWRvY3MsIGFuZCBvdGhlciBzdHVkZW50cyB0byBoZWxwIHlvdSBvdXQuCgpJZiB5b3Ugd2FudCBhbiBhY2FkZW1pYyBqb2IsIEkga25vdyB3aGF0IGl0IHRha2VzIHRvIGdldCBvbmUgKGluIHRlcm1zIG9mIHB1YmxpY2F0aW9ucywgZ3JhbnRzLCBldGMuKSwgc28ganVzdCBhc2suCkkgYW0gYWxzbyBoYXBweSB0byB0YWxrIHdpdGggeW91IGFib3V0IHdoYXQgYW4gUjEgYWNhZGVtaWMgam9iIGlzIGxpa2UgKGUuZy4sIHNldHRpbmcgdXAgYW5kIHJ1bm5pbmcgYSBsYWIsIHRlYWNoaW5nKeKAlEkgbG92ZSBteSBqb2IgYW5kIGhhdmUgYSBwYXNzaW9uIGZvciB0aGUgd29yayB3ZSBkby4KSSBnZXQgdG8gYmUgcGFydCBvZiBhbiBpbnZpZ29yYXRpbmcgaW50ZWxsZWN0dWFsIGVudmlyb25tZW50IGluIHdoaWNoIEkgZ2V0IHRvIGxlYXJuIGV2ZXJ5IGRheSwgZ2V0IHRvIGJlIGFyb3VuZCBleGNpdGluZyBpZGVhcyBhbmQgd29ybGQtcmVub3duZWQgZXhwZXJ0cyBjb25kdWN0aW5nIGN1dHRpbmctZWRnZSByZXNlYXJjaCwgYW5kIGhhdmUgdGhlIGludGVsbGVjdHVhbCBmcmVlZG9tIHRvIGdldCBwYWlkIHRvIHN0dWR5IHdoYXRldmVyIEkgd2FudCB0byBzdHVkeS4KSSBjYW5ub3QgaW1hZ2luZSBhbnl0aGluZyBiZXR0ZXIuClRoYXQgc2FpZCwgdGhlcmUgYXJlIG5vdCBlbm91Z2ggZmFjdWx0eSBwb3NpdGlvbnMgZm9yIGFsbCBQaC5ELiBncmFkdWF0ZXMgYW5kIGl0IGlzIG5vdCB0aGUgYmVzdCBmaXQgZm9yIGV2ZXJ5b25lLgpJIHdpbGwgd29yayB3aXRoIHlvdSB0byBmaW5kIHRoZSBjYXJlZXIgdGhhdCBpcyB0aGUgcmlnaHQgZml0IGZvciB5b3UuCgojIyBNeSBhcHByb2FjaCB0byBtZW50b3JzaGlwIHsjYXBwcm9hY2hUb01lbnRvcnNoaXB9CgpBcyBhIGNsaW5pY2FsLWRldmVsb3BtZW50YWwgcHN5Y2hvbG9naXN0LCBJIHRha2UgYSBkZXZlbG9wbWVudGFsIHBlcnNwZWN0aXZlIHRvIG1lbnRvcnNoaXAuCkVhcmx5IG9uIGluIHlvdXIgdHJhaW5pbmcsIEkgYWltIHRvIHByb3ZpZGUgc3VmZmljaWVudCBzdHJ1Y3R1cmUgYW5kIHNjYWZmb2xkaW5nLgpBcyB5b3UgZGV2ZWxvcCBwcm9maWNpZW5jeSBpbiBhIHNraWxsLCBJIHN0cml2ZSB0byB3aXRoZHJhdyB0aGUgc2NhZmZvbGRzIHNvIHRoYXQgeW91IGRldmVsb3AgaW5kZXBlbmRlbmNlIGFuZCBhdXRvbm9teS4KVGhlIHNlY29uZCBhcHByb2FjaCB0byBteSBtZW50b3JzaGlwIHN0eWxlIGlzIGFuIGVtcGhhc2lzIG9uIGxlYXJuaW5nIGJ5IGRvaW5nLgpJIGVuY291cmFnZSBzdHVkZW50cyB0byBsZWFybiBieSBhcHBseWluZyB0aGUgc2tpbGxzIHRvIHByb2plY3RzIHRoZXkgYXJlIHdvcmtpbmcgb24gaW4gdGhlIGxhYiwgcmF0aGVyIHRoYW4gcmVseWluZyBvbiBjb3Vyc2V3b3JrIGFuZCBvdGhlciBtZXRob2RzLgpJIHZpZXcgbXkgcm9sZSBhcyBmb3N0ZXJpbmcgeW91ciBwcm9mZXNzaW9uYWwgY29uZmlkZW5jZSBhbmQgZW5jb3VyYWdpbmcgeW91ciBjcml0aWNhbCB0aGlua2luZywgc2tlcHRpY2lzbSwgYW5kIGNyZWF0aXZpdHkuCgpEbyBub3QgaGVzaXRhdGUgdG8gYXNrIHF1ZXN0aW9ucyBpZiBJIGFtIGFyb3VuZDsgaXQgaXMgb2Z0ZW4gYmV0dGVyIHRvIGFzayBxdWVzdGlvbnMgdGhhbiB0byBtYWtlIGEgbWlzdGFrZSB0aGF0IGNvdWxkIGhhdmUgYmVlbiBlYXNpbHkgYXZvaWRlZC4KSSBhbSBwZXJpb2RpY2FsbHkgYXdheSwgYW5kIEkgZXhwZWN0IHlvdSB0byBnZXQgdGhpbmdzIGRvbmUgd2VsbCB3aXRob3V0IG1lLgpZb3UgYXJlIGVuY291cmFnZWQgdG8gYmUgaW5kZXBlbmRlbnQ7IGRvIG5vdCBiZSBhZnJhaWQgdG8gdHJ5IHRvIGRvIGRldGVjdGl2ZSB3b3JrIG9uIHlvdXIgb3duIGlmIEkgYW0gbm90IGFyb3VuZC4KVGhlcmUgaXMgYWxzbyBhIGJlbmVmaXQgdG8gbGVhcm5pbmcgYnkgdHJpYWwgYW5kIGVycm9yLgpXZSBoYXZlIGEgaGVscGZ1bCwgZXhwZXJpZW5jZWQgbGFiLCBzbyBrbm93IHRoYXQgcGVvcGxlIG90aGVyIHRoYW4gbWUgbWF5IGJlIGV4Y2VsbGVudCByZXNvdXJjZXMuCgpJbiBvcmRlciBmb3Igc3VwZXJ2aXNpb24gdG8gYmUgZWZmZWN0aXZlLCBJIGhvcGUgdGhhdCBvdXIgcmVsYXRpb25zaGlwIHdpbGwgaW5jbHVkZSBvcGVuIGNvbW11bmljYXRpb24gYW5kIHR3by13YXkgZmVlZGJhY2suCklmIHRoZXJlIGFyZSB3YXlzIEkgY2FuIGJlIGEgYmV0dGVyIG1lbnRvciBmb3IgeW91LCBwbGVhc2UgbGV0IG1lIGtub3cuCkkgdmFsdWUgb3Blbm5lc3MgdG8gbGVhcm5pbmcgYXMgYSBjb250aW51b3VzLCBkZXZlbG9wbWVudGFsLCBsaWZlLWxvbmcgcHJvY2VzcyBhbmQgSSB3aWxsIG1vZGVsIGFuZCBwcm9tb3RlIG9wZW5uZXNzIGFuZCByZWNlcHRpdml0eSB0byBmZWVkYmFjay4KSSBleHBlY3QgdGhhdCB0cmFpbmVlcyB3aWxsIGV4cHJlc3MgZGlzYWdyZWVtZW50cyBhbmQgZGlmZmVyZW5jZXMgaW4gb3BpbmlvbiB3aXRoIG1lLgpJIGRvIG5vdCB2aWV3IHByb2Zlc3Npb25hbCBkaXNhZ3JlZW1lbnRzIGFzIHBlcnNvbmFsOyB0aGUgYmVzdCBzY2llbmNlIGFyaXNlcyBvdXQgb2YgdGhlIGZyZWUgYW5kIGNvbnN0cnVjdGl2ZSBleGNoYW5nZSBvZiBtdWx0aXBsZSBwZXJzcGVjdGl2ZXMgYW5kIGlkZWFzLgpJIGV4cGVjdCB0aGF0IHRyYWluZWVzIHdpbGwgYXR0ZW1wdCB0byBhZGRyZXNzIGNvbmZsaWN0cyBpbiB0aGUgbWVudG9y4oCTbWVudGVlIHJlbGF0aW9uc2hpcC4KCkkgc3RyaXZlIHRvIGJ1aWxkIGFuZCB0byBzdXBwb3J0IGEgZGl2ZXJzZSB0ZWFtLCB0byB0cmVhdCBwZW9wbGUgZXF1aXRhYmx5LCBhbmQgdG8gYmUgaW5jbHVzaXZlIG9mIHBlb3BsZSBmcm9tIGFsbCBiYWNrZ3JvdW5kcy4KSWYgdGhlcmUgYXJlIHRoaW5ncyB0aGF0IHRoZSBsYWIgb3IgSSBjYW4gZG8gdG8gaGVscCB5b3Ugb3Igb3RoZXJzIGZlZWwgbW9yZSBpbmNsdWRlZCwgcGxlYXNlIGxldCBtZSBrbm93LgoKSSBhbSBjb21taXR0ZWQgdG8gbWVudG9yaW5nIHlvdSwgZXZlbiBhZnRlciB5b3UgbGVhdmUgbXkgbGFiLgpJIGFtIGNvbW1pdHRlZCB0byB5b3VyIGVkdWNhdGlvbiBhbmQgdHJhaW5pbmcgd2hpbGUgeW91IGFyZSBpbiBteSBsYWIsIGFuZCB0byBhZHZpc2luZyBhbmQgZ3VpZGluZyB5b3VyIGNhcmVlciBkZXZlbG9wbWVudOKAlHRvIHRoZSBleHRlbnQgeW91IHdpc2jigJRsb25nIGFmdGVyIHlvdSBsZWF2ZS4KSSB3aWxsIHByb3ZpZGUgaG9uZXN0IGxldHRlcnMgb2YgZXZhbHVhdGlvbiBmb3IgeW91IHdoZW4geW91IHJlcXVlc3QgdGhlbS4KCiMjIENvbW11bmljYXRpb24geyNjb21tdW5pY2F0aW9ufQoKRmVlbCBmcmVlIHRvIHVzZSBTbGFjayBmb3IgYnJpZWYgY29tbXVuaWNhdGlvbiB3aXRoIG1lLgpIb3dldmVyLCB3ZSBkbyBub3QgdXNlIGRpcmVjdCBtZXNzYWdlcyBpbiBTbGFjayAoc2VlIHRoZSBsYWIgbWFudWFsKS4KQWxsIFNsYWNrIGNvbW11bmljYXRpb24gc2hvdWxkIGJlIGluIHRlYW0tZmFjaW5nIGNoYW5uZWxzIHNvIG90aGVycyBjYW4gYmVuZWZpdCBmcm9tIHRoZSBpbmZvcm1hdGlvbiBhbmQgc28gd2UgY2FuIGdvIGJhY2sgYW5kIHJlZmVyZW5jZSBpdCBsYXRlci4KRm9yIGxvbmdlciBjb21tdW5pY2F0aW9uLCBwbGVhc2UgY2FsbCBvciBzdG9wIGJ5IG15IG9mZmljZS4KSSBmaW5kIHRoaXMgbXVjaCBtb3JlIGVmZmljaWVudCBhbmQgcGxlYXNhbnQgdGhhbiB3cml0aW5nIGFuZCByZWFkaW5nIGxlbmd0aHkgY29tbXVuaWNhdGlvbi4KRm9yIHNlbmRpbmcgbWFudXNjcmlwdHMsIHBlcnNvbmFsIGluZm9ybWF0aW9uLCBhbmQgbWVzc2FnZXMgdGhhdCBkbyBub3QgbmVlZCBhbiB1cmdlbnQgcmVzcG9uc2UsIHlvdSBtYXkgZW1haWwgbWUuClBsZWFzZSBsaW1pdCB5b3VyIHVzZSBvZiBlbWFpbCBhcyBtdWNoIGFzIHBvc3NpYmxlLgpbSSBoYXRlIGVtYWlsXShodHRwczovL3d3dy5jaHJvbmljbGUuY29tL2FydGljbGUvaXMtZW1haWwtbWFraW5nLXByb2Zlc3NvcnMtc3R1cGlkKSAoYXJjaGl2ZWQgYXQgaHR0cHM6Ly9wZXJtYS5jYy9UODU1LVU5TVEpOyB3ZSBnZXQgd2F5IHRvbyBtdWNoIG9mIGl0LCBpdCBpcyBpbXBlcnNvbmFsLCBpdCBkb2VzIG5vdCBjb21tdW5pY2F0ZSB0b25lIHdlbGwgKG9mdGVuIGxlYWRpbmcgdG8gbWlzaW50ZXJwcmV0YXRpb24gYW5kIHNvbWV0aW1lcyBodXJ0IGZlZWxpbmdzKSwgYW5kIGl0IGlzIGRpZmZpY3VsdCBmb3IgbWUgdG8gc3RheSBvbiB0b3Agb2YgbXkgaW5ib3guCkkgZW5jb3VyYWdlIHlvdSB0byBzdG9wIGJ5IG15IG9mZmljZSBvciB0byBjYWxsIG15IG9mZmljZSBwaG9uZSBpbnN0ZWFkIG9mIHJlbHlpbmcgb24gZW1haWwsIHdoZW5ldmVyIHBvc3NpYmxlLgoKV2hlbiB5b3UgY29udGFjdCBtZSBvciBzZW5kIG1lIG1hdGVyaWFscywgeW91IGNhbiBleHBlY3QgbWUgdG8gcmVzcG9uZCBwcm9tcHRseS4KTGlrZXdpc2UsIEkgZXhwZWN0IHlvdSB0byByZXNwb25kIHByb21wdGx5IHdoZW4gSSBvciBhbm90aGVyIGxhYiBtZW1iZXIgY29udGFjdHMgeW91IChpbiBtb3N0IGNhc2VzLCB3aXRoaW4gNDggaG91cnMpLgpJZiB5b3UgbmVlZCB0aW1lIHRvIGdhdGhlciBpbmZvcm1hdGlvbiBpbiByZXNwb25zZSB0byBhIFNsYWNrIG1lc3NhZ2Ugb3IgZW1haWwsIHBsZWFzZSBhY2tub3dsZWRnZSByZWNlaXB0IG9mIHRoZSBtZXNzYWdlIGFuZCBpbmRpY2F0ZSB3aGVuIHlvdSB3aWxsIGJlIGFibGUgdG8gcHJvdmlkZSB0aGUgcmVxdWVzdGVkIGluZm9ybWF0aW9uLgpBdCB0aW1lcywgSSBtYXkgY29udGFjdCB5b3UgYnkgZW1haWwgb3IgU2xhY2sgYWZ0ZXIgaG91cnMgKGlmIHRoYXQgaXMgd2hlbiBpdCBpcyBtb3N0IGNvbnZlbmllbnQsIHNvIHRoYXQgSSBkbyBub3QgZm9yZ2V0IHRvKS4KSG93ZXZlciwgeW91IGFyZSBcKm5vdFwqIGV4cGVjdGVkIHRvIHJlc3BvbmQgYWZ0ZXIgaG91cnMuCkkgd2lsbCBjYWxsIHlvdSBpZiBzb21ldGhpbmcgaXMgdXJnZW50LgoKQmUgbWluZGZ1bCBvZiB0aGUgY29uc3RyYWludHMgb24gbXkgdGltZS4KQWxsb3cgYSBtaW5pbXVtIG9mIG9uZSB3ZWVrIHByaW9yIHRvIHN1Ym1pc3Npb24gZGVhZGxpbmVzIGZvciBtZSB0byByZWFkIGFuZCByZXNwb25kIHRvIHNob3J0IG1hdGVyaWFscyBzdWNoIGFzIGNvbmZlcmVuY2UgYWJzdHJhY3RzIGFuZCB0aHJlZSB3ZWVrcyBmb3IgbWUgdG8gd29yayBvbiBtYW51c2NyaXB0cywgZ3JhbnQgcHJvcG9zYWxzLCBhbmQgbGV0dGVycyBvZiByZWNvbW1lbmRhdGlvbi4KUGxlYXNlIGRvIG5vdCBhc3N1bWUgSSBjYW4gcmVhZCBtYXRlcmlhbHMgd2l0aGluIGEgZGF5IG9yIHR3bywgZXNwZWNpYWxseSB3aGVuIEkgYW0gdHJhdmVsaW5nLgpQbGVhc2Ugb25seSBzZW5kIGRyYWZ0cyBvZiBtYW51c2NyaXB0cywgZ3JhbnQgcHJvcG9zYWxzLCBkaXNzZXJ0YXRpb25zLCBldGMuIHdoZW4gdGhleSBhcmUgeW91ciA8dT5iZXN0IHBvc3NpYmxlIHdvcms8L3U+ICh0aGUgSGVucnkgS2lzc2luZ2VyIGNyaXRlcmlvbikuClRoYXQgbWVhbnMgZ29pbmcgdGhyb3VnaCBtdWx0aXBsZSByZXZpc2lvbnMsIHJlYWRpbmcgaXQgb3V0IGxvdWQgdG8geW91cnNlbGYsIGV0Yy4KSGVyZSBpcyBhbiBleGNlcnB0IGFib3V0IERyLiBLaXNzaW5nZXIgKFtLcmF1c21hbiwgMjAyMV0oaHR0cHM6Ly9kb2kub3JnLzEwLjEwMDIvandtZy4yMTk5MikpOgoKPiAiSGVucnkgS2lzc2luZ2VyLCBhIGZvcm1lciBTZWNyZXRhcnkgb2YgU3RhdGUgdW5kZXIgUHJlc2lkZW50IE5peG9uLCB1bmRlcnN0b29kIHRoZSBpbXBvcnRhbmNlIG9mIGNvbnRpbnVhbGx5IGltcHJvdmluZyB3cml0aW5nIHNraWxscy4KPiBXaW5zdG9uIExvcmQgd2FzIEtpc3NpbmdlcidzIHNwZWVjaCB3cml0ZXIgYW5kIGR1cmluZyB0aGUgbGF0ZSAxOTYwcyBhbmQgZWFybHkgMTk3MHMsIExvcmQgaGFkIGJlZW4gdGFza2VkIHdpdGggd3JpdGluZyBhIHNwZWVjaCBhYm91dCB0aHJlZSBpbXBvcnRhbnQgZm9yZWlnbiBwb2xpY3kgcHJvamVjdHM6IHRoZSBvcGVuaW5nIG9mIENoaW5hIHRvIHRoZSBXZXN0LCBicmluZ2luZyB0aGUgVmlldG5hbSBXYXIgdG8gYSBjbG9zZSwgYW5kIGFuIGF0dGVtcHQgdG8gaW1wcm92ZSByZWxhdGlvbnMgd2l0aCB0aGUgUnVzc2lhbnMuCldyaXRpbmcgYSBzcGVlY2ggZm9yIEtpc3NpbmdlciB3YXMgbm90IGFuIGVhc3kgam9iIGJlY2F1c2UgS2lzc2luZ2VyIHdhcyBhIHNwZWVjaCB3cml0ZXIgaGltc2VsZiBhbmQgaGFyc2ggY3JpdGljLgo+IAo+IFRoZSBzdG9yeSBnb2VzIHRoYXQgTG9yZCBwcmVwYXJlZCBhbmQgc3VibWl0dGVkIGEgZmlyc3QgZHJhZnQgb2YgYSBzcGVlY2ggdG8gS2lzc2luZ2VyIG9uZSBldmVuaW5nLgo+IEtpc3NpbmdlciB0aGVuIGNhbGxlZCBMb3JkIHRoZSBuZXh0IG1vcm5pbmcgZm9yIGZlZWRiYWNrIG9uIHRoZSBzcGVlY2ggYW5kIGFza3MgIklzIHRoaXMgdGhlIGJlc3QgeW91IGNhbiBkbz8iCj4gCj4gTG9yZCByZXBsaWVzICJIZW5yeSwgSSB0aG91Z2h0IHNvLCBidXQgSSdsbCB0cnkgYWdhaW4uIgo+IAo+IExvcmQgdGhlbiB3ZW50IGJhY2sgdG8gdGhlIGRyYXdpbmcgYm9hcmQsIHR3ZWFrZWQsIHJldmlzZWQsIGFuZCByZXN1Ym1pdHRlZCBhbm90aGVyIGRyYWZ0IGEgZmV3IGRheXMgbGF0ZXIuCj4gCj4gVGhlIG5leHQgZGF5LCBLaXNzaW5nZXIgY2FsbGVkIExvcmQgaW50byBoaXMgb2ZmaWNlIGFuZCBhZ2FpbiBhc2tlZCAiQXJlIHlvdSBzdXJlIHRoaXMgaXMgdGhlIGJlc3QgeW91IGNhbiBkbz8iCj4gCj4gTG9yZCBiZWdhbiB0byBxdWVzdGlvbiBoaXMgd29yayBhbmQgc2FpZCAiV2VsbCwgSSByZWFsbHkgdGhvdWdodCBzby4gSSdsbCB0cnkgYWdhaW4uIgo+IAo+IEJlbGlldmUgaXQgb3Igbm90LCB0aGlzIHVuY29tZm9ydGFibGUgYW5kIHJlamVjdGluZyBwcm9jZXNzIHdlbnQgb24gZm9yIDggZHJhZnRzLCBlYWNoIHRpbWUgS2lzc2luZ2VyIHN0YW5kaW5nIGZpcm0gdG8gaGlzIG9yaWdpbmFsIGZlZWRiYWNrIG9mICJJcyB0aGlzIHRoZSBiZXN0IHlvdSBjYW4gZG8/Igo+IAo+IExvcmQgcmV0dXJuZWQgdG8gS2lzc2luZ2VyJ3Mgb2ZmaWNlIHdpdGggdGhlIG5vdyBuaW50aCBkcmFmdCBhbmQgYXdhaXRlZCBoaXMgcmVzcG9uc2UuCj4gCj4gU3VyZWx5IGVub3VnaCwgS2lzc2luZ2VyIGNhbGxlZCBMb3JkIGluIHRoZSBuZXh0IGRheSBhbmQgYXNrcyBoaW0gdGhlIHNhbWUgcXVlc3Rpb24sICJJcyB0aGlzIHRoZSBiZXN0IHlvdSBjYW4gZG8/Igo+IAo+IExvcmQsIG5vdyBjb21wbGV0ZWx5IGZlZCB1cCwgZnVyaW91c2x5IHJlcGxpZWQgIkhlbnJ5ISBJJ3ZlIGJlYXRlbiBteSBicmFpbnMgb3V04oCUdGhpcyBpcyB0aGUgbmludGggZHJhZnQhIEkga25vdyBpdCdzIHRoZSBiZXN0IEkgY2FuIGRvOyBJIGNhbid0IHBvc3NpYmx5IGltcHJvdmUgb25lIG1vcmUgd29yZCEhISIKPiAKPiBLaXNzaW5nZXIgdGhlbiBsb29rZWQgYXQgTG9yZCBhbmQgbm9uY2hhbGFudGx5IHNhaWQgIldlbGwsIGluIHRoYXQgY2FzZSwgbm93IEknbGwgcmVhZCBpdC4iCgojIyBMYWIgY3VsdHVyZSB7I2xhYkN1bHR1cmV9CgpXaXRoaW4gYSBsYWIgZW52aXJvbm1lbnQsIG9jY2FzaW9uYWxseSBjb21wZXRpdGl2ZSB0aG91Z2h0cyBvciBlbW90aW9ucyBtYXkgYXJpc2UuClRoaXMgbGFiIGlzIG5vdCBhIHBsYWNlIGZvciBjb21wZXRpdGlvbiwgYnV0IGNvbGxhYm9yYXRpb24uCldlIGFyZSBhIGdyb3VwIG9mIHJlc2VhcmNoZXJzIHdvcmtpbmcgdG93YXJkIGEgY29tbW9uIGdvYWwsIGFuZCBhbGwgbWVtYmVycyBhcmUgZW5jb3VyYWdlZCB0byB3b3JrIHRvZ2V0aGVyIGNvbGxhYm9yYXRpdmVseS4KQSByaXNpbmcgdGlkZSBsaWZ0cyBhbGwgYm9hdHMuCkNvbXBldGl0aXZlIGJlaGF2aW9yIGlzIG5vdCBjb25kdWNpdmUgdG8gYSBwcm9kdWN0aXZlIGxhYm9yYXRvcnksIGFuZCB0aGlzIHNvcnQgb2YgYmVoYXZpb3Igd2lsbCBzdHJpY3RseSBub3QgYmUgdG9sZXJhdGVkLgpEbyBub3QgY29tcGFyZSB5b3Vyc2VsZiB0byBvdGhlcnMuCllvdSBhcmUgb24geW91ciBvd24gcGF0aC4KRWFjaCBtZW50ZWUgbmVlZHMgZGlmZmVyZW50IHRoaW5ncywgYW5kIEkgd2lsbCBkbyBteSBiZXN0IHRvIGdldCB0byBrbm93IHlvdSBhcyBhbiBpbmRpdmlkdWFsLCBhbmQgeW91ciBpbmRpdmlkdWFsIHNraWxscywgcHJlZmVyZW5jZXMsIGFuZCBnb2Fscy4KQ3VsdGl2YXRpbmcgYSBjb21tb24gdmFsdWUgb2YgaHVtaWxpdHkgaXMgaW1wb3J0YW50IGluIHJlc2VhcmNoLCBiZWNhdXNlIHdlIGFyZSBhbHdheXMgYXNraW5nIHF1ZXN0aW9ucyB0byB3aGljaCB3ZSBpbmhlcmVudGx5IGRvIG5vdCBrbm93IHRoZSBhbnN3ZXIuCkVsaXRpc3QgYmVoYXZpb3IgaXMgbm90IGNvbmR1Y2l2ZSB0byBncm93dGggYW5kIGRldmVsb3BtZW50LCBhbmQgYXMgc3VjaCwgaXMgbm90IGFwcHJvcHJpYXRlIGZvciB0aGUgbGFiIGVudmlyb25tZW50LgpUaGUgbGFiIGN1bHR1cmUgaXMgb2YgdXRtb3N0IGltcG9ydGFuY2UgdG8gYSBoZWFsdGh5LCBmdW5jdGlvbmFsIGdyb3VwLCBhbmQgcHJvZmVzc2lvbmFsIGJlaGF2aW9yIGlzIGF0IHRoZSBjZW50ZXIgb2YgYnVpbGRpbmcgdGhpcyBjdWx0dXJlLgpJZiB5b3UgaGF2ZSBqb2luZWQgdGhlIGxhYiwgeW91IGhhdmUgYmVlbiBzZWxlY3RlZCBhbW9uZyBtYW55IHF1YWxpZmllZCBhcHBsaWNhbnRzIGZvciB0aGlzIHBvc2l0aW9uLgpJIGVuY291cmFnZSB5b3UgdG8gc2hhcmUgeW91ciB0aG91Z2h0cyBhbmQgaWRlYXMgd2l0aCB0aGUgbGFiLgpLZWVwaW5nIHRoZW0gdG8geW91cnNlbGYgd291bGQgYmUgYSBkaXNzZXJ2aWNlIHRvIHRoZSB0ZWFtLgoKIyMgUHJvZmVzc2lvbmFsaXNtIHsjcHJvZmVzc2lvbmFsaXNtfQoKU2hvdyB1cCBvbiB0aW1lLCBmdWxseSBwcmVwYXJlZCBmb3IgbWVldGluZ3MuCklmIHlvdSB3aWxsIG5lZWQgdG8gbWlzcyBhIG1lZXRpbmcsIGxldCB0aGUgcmVsZXZhbnQgdGVhbSBtZW1iZXJzIGtub3cgaW4gYWR2YW5jZSwgd2l0aCBhcyBtdWNoIGFkdmFuY2Ugbm90aWNlIGFzIHBvc3NpYmxlLgpVbmV4Y3VzZWQgYWJzZW5jZXMgYXJlIG5vdCBhY2NlcHRhYmxlIGluIGEgcHJvZmVzc2lvbmFsIGVudmlyb25tZW50LgoKSWYgeW91IGhhdmUgY3JpdGljYWwgdGhvdWdodHMgdG8gc2hhcmUgd2l0aCBzb21lb25lLCBkbyBub3Qgc2VuZCB0aGVtIGluIFNsYWNrIG9yIGluIGVtYWlsOyBpbnN0ZWFkLCBjYWxsIG9yIHRhbGsgdG8gdGhlIHBlcnNvbiBkaXJlY3RseS4KQmUgcmVzcG9uc2l2ZSB0byBhZHZpY2UgYW5kIGNvbnN0cnVjdGl2ZSBjcml0aWNpc20uClRoZSBmZWVkYmFjayB5b3UgZ2V0IGZyb20gbWUsIHlvdXIgY29sbGVhZ3VlcywgeW91ciBjb21taXR0ZWUgbWVtYmVycywgeW91ciBjb3Vyc2UgaW5zdHJ1Y3RvcnMsIHlvdXIgY2xpbmljYWwgc3VwZXJ2aXNvcnMsIGFuZCB5b3VyIHRlYWNoaW5nIHN1cGVydmlzb3JzIGlzIGludGVuZGVkIHRvIGltcHJvdmUgeW91ciB3b3JrIGFuZCBoZWxwIHlvdSBzdWNjZWVkLgpEbyB5b3VyIGJlc3Qgbm90IHRvIHRha2UgaXQgcGVyc29uYWxseS4KV2UgYWxsIGhhdmUgcm9vbSB0byBncm93LgoKIyMgSW50ZXJhY3Rpb25zIHdpdGggb3RoZXJzIHsjaW50ZXJhY3Rpb25zfQoKSSBleHBlY3QgYWxsIGxhYiBtZW1iZXJzIHRvIHJlc3BlY3QgZWFjaCBvdGhlci4KRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gaG93IHlvdSBhcmUgZXhwZWN0ZWQgdG8gaW50ZXJhY3Qgd2l0aCBvdGhlcnMsIHNlZSB0aGUgcmVsZXZhbnQgc2VjdGlvbiBvbiAiSW50ZXJhY3Rpb25zIHdpdGggT3RoZXJzIiBpbiB0aGUgcGFnZSBvbiBbRXhwZWN0YXRpb25zIGZvciBFdmVyeW9uZSBpbiB0aGUgTGFiXShleHBlY3RhdGlvbnMtZXZlcnlvbmUuaHRtbCNpbnRlcmFjdGlvbnMpLgoKSWYgYW5vdGhlciBtZW1iZXIgb2YgdGhlIGxhYiBpcyBub3QgY29tcGx5aW5nIHdpdGggdGhlc2UgcG9saWNpZXMsIHBsZWFzZSBmaXJzdCBhdHRlbXB0IHRvIHNwZWFrIHRvIHRoZSBwZXJzb24gZGlyZWN0bHkuClRoZSBBUEEgQ29kZSBvZiBFdGhpY3MgYWR2aXNlcyB0aGF0IHRoaXMgaXMgYSBmaXJzdCBzdGVwIHRvd2FyZCByZXNvbHV0aW9uLgpJZiB0aGF0IGlzIG5vdCBwb3NzaWJsZSwgYXBwcm9wcmlhdGUsIG9yIHByb3ZlcyBpbmVmZmVjdGl2ZSAoaS5lLiwgZG9lcyBub3QgY2hhbmdlIGJlaGF2aW9yKSwgcGxlYXNlIHNwZWFrIHRvIG1lIGFib3V0IHRoZSBwcm9ibGVtIGltbWVkaWF0ZWx5LgpQbGVhc2UgYWxzbyBzcGVhayB0byBtZSBpZiB5b3UgdGhpbmsgeW91IGhhdmUgYW4gaW50ZXJwZXJzb25hbCBpc3N1ZSB3aXRoIG1lLgpJZiwgYWZ0ZXIgaGF2aW5nIHRhbGtlZCB3aXRoIG1lLCB5b3UgZmVlbCB0aGUgaXNzdWUgd2lsbCBub3QgYmUgcmVzb2x2ZWQgYW5kIHlvdSB3YW50IHRvIHNwZWFrIHRvIHNvbWVvbmUgZWxzZSB0byBhZGRyZXNzIHRoZSBpc3N1ZSwgZm9sbG93IHRoZSBjaGFpbiBvZiBjb21tYW5kIGFuZCB0YWxrIHRvIHRoZSBBcmVhIENvb3JkaW5hdG9yLCB0aGUgRGlyZWN0b3Igb2YgR3JhZHVhdGUgU3R1ZGllcywgYW5kL29yIHRoZSBEZXBhcnRtZW50YWwgRXhlY3V0aXZlIE9mZmljZXIuClRoZSBjaGFpbiBvZiBjb21tYW5kIGlzIGRlcGljdGVkIGluIHRoZSBbbGFiIG9yZ2FuaXphdGlvbmFsIGNoYXJ0XShtYW51YWwuaHRtbCNvcmdhbml6YXRpb25hbENoYXJ0KS4KCiMjIFBlcmZvcm1hbmNlIGltcHJvdmVtZW50IHBsYW4geyNwZXJmb3JtYW5jZUltcHJvdmVtZW50UGxhbn0KCkluIHRoZSBjYXNlIHRoYXQgeW91ciBwcm9ncmVzcyBpcyB1bnNhdGlzZmFjdG9yeSBmb3IgYW4gZXh0ZW5kZWQgcGVyaW9kLCB3ZSBuZWVkIHRvIGRpc2N1c3MgYW5kIGltcGxlbWVudCBhIHBsYW4gdG8gaW1wcm92ZSB5b3VyIHBlcmZvcm1hbmNlLCB3aGljaCBldmVudHVhbGx5IHdpbGwgYmUgaGVscGZ1bCBmb3IgeW91ciBjYXJlZXIgcGxhbiwgdG9vLgpUaGUgcGVyZm9ybWFuY2UgaW1wcm92ZW1lbnQgcGxhbiB3aWxsIGxpa2VseSBpbnZvbHZlIGNsb3NlciBtb25pdG9yaW5nIG9mIHlvdXIgcHJvZ3Jlc3MgYW5kIHJlc2VhcmNoIGFjdGl2aXRpZXMgdW50aWwgYSBwcmVkZWZpbmVkIGdvYWwgaXMgcmVhY2hlZCAoZS5nLiwgcHVibGlzaGluZyBhIHBhcGVyKS4KCiMjIEFjY29tbW9kYXRpb25zIHsjYWNjb21tb2RhdGlvbnN9CgpTb21ldGltZXMsIGxpZmUgZXZlbnRzIG9yIG1lZGljYWwvaGVhbHRoLXJlbGF0ZWQgaXNzdWVzIG1heSBpbXBhY3QgeW91ciBhYmlsaXR5IHRvIG1lZXQgc29tZSBvZiB0aGUgbGFiIGV4cGVjdGF0aW9ucy4KWW91IGFyZSBlbmNvdXJhZ2VkIHRvIHNlZWsgbWVkaWNhbC9wcm9mZXNzaW9uYWwgaGVscCBpZiBzdWNoIGlzc3VlcyBhcmlzZSwgZXZlbiBpZiB0aGUgYXBwb2ludG1lbnRzIG9jY3VyIGR1cmluZyB5b3VyIHJlZ3VsYXIgbGFiIGhvdXJzLgpJZiB0aGVyZSBhcmUgbGFiLXJlbGF0ZWQgYWNjb21tb2RhdGlvbnMgdGhhdCB3b3VsZCBiZSBoZWxwZnVsIHRvIHlvdSwgcGxlYXNlIGxldCBtZSBrbm93IGFuZC9vciBjb250YWN0IHRoZSBVSSBTdHVkZW50IERpc2FiaWxpdHkgU2VydmljZXMgKGh0dHBzOi8vc2RzLnN0dWRlbnRsaWZlLnVpb3dhLmVkdSkuCkFueSBkZXZpYXRpb25zIGZyb20gdGhlIGxhYiBleHBlY3RhdGlvbnMgc2hvdWxkIGJlIGFwcHJvdmVkIGJ5IG1lIG9yIHNob3VsZCBjb2luY2lkZSB3aXRoIGRvY3VtZW50YXRpb24gZnJvbSBVSSBIdW1hbiBSZXNvdXJjZXMgb3IgU3R1ZGVudCBEaXNhYmlsaXR5IFNlcnZpY2VzIG91dGxpbmluZyBhbHRlcmF0aW9ucy4KSWYgeW91IGhhdmUgY29uY2VybnMgYWJvdXQgbWVldGluZyB5b3VyIHJlc3BvbnNpYmlsaXRpZXMgb3IgZXhwZWN0YXRpb25zLCBwbGVhc2UgdGFsayB0byBtZS4KCiMjIFdlbGwtYmVpbmcgeyN3ZWxsYmVpbmd9CgpMYXN0IGJ1dCBub3QgbGVhc3QsIHlvdXIgd2VsbC1iZWluZyBpcyB2ZXJ5IGltcG9ydGFudC4KSSB3ZW50IHRocm91Z2ggdGhlIHByb2Nlc3Mgb2YgZ3JhZHVhdGUgc2Nob29sIGFuZCB1bmRlcnN0YW5kIGhvdyBzdHJlc3NmdWwgdGhpbmdzIGNhbiBiZSBmcm9tIG15IG93biBleHBlcmllbmNlcy4KSWYgeW91IGZlZWwgZG93biBmb3IgYW55IHJlYXNvbiwgcGxlYXNlIHRhbGsgdG8gbWUgb3IgYW55b25lIHlvdSBmZWVsIGNvbWZvcnRhYmxlIHRhbGtpbmcgdG8uCllvdSBhcmUgYWxzbyBlbmNvdXJhZ2VkIHRvIHNlZWsgcHJvZmVzc2lvbmFsIGhlbHDigJRpdCBpcyBub3QgYSBzaWduIG9mIHdlYWtuZXNzOyBpdCBpcyBhIHNpZ24gb2YgeW91IHRha2luZyBjYXJlIG9mIHlvdXJzZWxmLgoKUmVtZW1iZXIgdGhhdCBhbGwgb2YgdXMgYXJlICJuZXciIGF0IHZhcmlvdXMgcG9pbnRzIGluIG91ciBjYXJlZXJzLgpJbXBvc3RlciBzeW5kcm9tZSBpcyBub3JtYWw7IEkgZW5jb3VyYWdlIHlvdSB0byBhZG9wdCBhIGdyb3d0aCBtaW5kc2V0LgpZb3UgYXJlIG1lYW50IHRvIGJlIGhlcmUhCkZhaWx1cmUgaXMgY29tbW9uIGluIGFjYWRlbWlhLgpUYWtlIGEgbG9vayBhdCB0aGUgW0NWIG9mIEZhaWx1cmVzXShodHRwczovL3d3dy51bmktZ29ldHRpbmdlbi5kZS9kZS9kb2N1bWVudC9kb3dubG9hZC9iZWQyNzA2ZmQzNGUyOTgyMjAwNGRiZTI5Y2QwMGJiNS5wZGYvSm9oYW5uZXNfSGF1c2hvZmVyX0NWX29mX0ZhaWx1cmVzJTViMSU1ZC5wZGYpIChhcmNoaXZlZCBhdCBodHRwczovL3Blcm1hLmNjLzZVRlItWkJWNCkuClBlcnNpc3RlbmNlIHBheXMgb2ZmLgpJIGhhdmUgZm91bmQgaXQgaGVscGZ1bCB0byBoYXZlIGEgWyJmZWVsZ29vZCIgZW1haWwgZm9sZGVyXShodHRwczovL2Jsb2dzLnNjaWVudGlmaWNhbWVyaWNhbi5jb20vZ3Vlc3QtYmxvZy90aGUtYXdlc29tZXN0LTcteWVhci1wb3N0ZG9jLW9yLWhvdy1pLWxlYXJuZWQtdG8tc3RvcC13b3JyeWluZy1hbmQtbG92ZS10aGUtdGVudXJlLXRyYWNrLWZhY3VsdHktbGlmZS8pIChhcmNoaXZlZCBhdCBodHRwczovL3Blcm1hLmNjL0MzQ0ItMjVMVSkgdGhhdCBJIGNhbiByZWZlciBiYWNrIHRvIHdoZW4gdGhpbmdzIGFyZSBkaWZmaWN1bHQuCgpEbyBub3QgZm9yZ2V0IHRvIGxhdWdoIGFuZCBoYXZlIGZ1biEKR3JhZHVhdGUgc2Nob29sIGlzIGEgY2hhbGxlbmdpbmcgam9iIHdpdGggdmVyeSBoaWdoIGV4cGVjdGF0aW9ucywgYnV0IGl0IHNob3VsZCBhbHNvIGJlIGZ1bi4KWW91IGdldCB0byBzdHVkeSBzb21ldGhpbmcgdGhhdCBpcyBleGNpdGluZyB0byB5b3UgYW5kIGdldCBwYWlkIHRvIGRvIGl0IQpUbyBxdW90ZSBbTm9ybWFuIFJhbXNleSdzIGd1aWRlIGZvciBncmFkdWF0ZSBzdHVkZW50c10oaHR0cHM6Ly93d3cuY3MudHVmdHMuZWR1L35uci9zdHVkZW50cy9ndWlkZS5wZGYpIChhcmNoaXZlZCBhdCBodHRwczovL3Blcm1hLmNjLzNXRlktU0gzTCksICJUbyBzdXN0YWluIHlvdXJzZWxmIHRocm91Z2ggZGlmZmljdWx0IHRpbWVzLCBmaW5kIHJlc2VhcmNoIHRoYXQgbWVhbnMgYSBsb3QgdG8geW91LgpTdWNjZXNzZnVsIHJlc2VhcmNoZXJzIGZpbmQgaW50ZXJlc3RpbmcgcHJvYmxlbXMgYW5kIGZhbGwgaW4gbG92ZSB3aXRoIHRoZW0uCkluIG9wZXJhdGlvbmFsIHRlcm1zLCBzb21lIEZyaWRheSBuaWdodHMgc2hvdWxkIGJlIHNwZW50IGhhdmluZyBmdW4gb3V0IGluIHRoZSB3b3JsZCwgYnV0IGlmIHlvdSBhcmVuJ3QgYWxzbyBzcGVuZGluZyBzb21lIEZyaWRheSBuaWdodHMgaGF2aW5nIGZ1biB3aXRoIHlvdXIgcmVzZWFyY2gsIHlvdSdyZSBub3QgZG9pbmcgdGhlIHJpZ2h0IHJlc2VhcmNoLiIKCiMjIEV4cGVjdGF0aW9ucyBmb3IgRXZlcnlvbmUgaW4gTGFiIHsjZXhwZWN0YXRpb25zRm9yRXZlcnlvbmV9CgpJbiBhZGRpdGlvbiB0byB0aGUgZXhwZWN0YXRpb25zIGRlc2NyaWJlZCBhYm92ZSBmb3IgZ3JhZHVhdGUgc3R1ZGVudHMsIHBsZWFzZSBhbHNvIHJlYWQgdGhlIFtleHBlY3RhdGlvbnMgZm9yIGV2ZXJ5b25lIGluIHRoZSBsYWJdKGV4cGVjdGF0aW9ucy1ldmVyeW9uZS5odG1sKS4KCiMgU2lnbmF0dXJlIHsjc2lnbmF0dXJlfQoKUGxlYXNlIGRvd25sb2FkLCBzaWduLCBhbmQgZW1haWwgdGhlIGJlbG93IGRvY3VtZW50IHRvIERyLiBQZXRlcnNlbiBwcmlvciB0byB5b3VyIGZpcnN0IGRheSBpbiBsYWIuCgo8ZW1iZWQgc3JjPSJGaWxlcy9zaWduYXR1cmVfcGFnZS5wZGYiIHdpZHRoPSIxMDAwIiBoZWlnaHQ9IjYwMCI+CgojIEFwcGVuZGl4IHsjYXBwZW5kaXh9CgojIyBBcHByb3hpbWF0ZSBFeHBlY3RlZCBUaW1lbGluZXMgeyN0aW1lbGluZXN9CgojIyMgUmVzZWFyY2ggVGltZWxpbmUgeyN0aW1lbGluZS1yZXNlYXJjaH0KCnwgKipTZW1lc3RlcioqICAgfCAqKlJlc2VhcmNoIFRhc2sgR29hbChzKSoqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKfC0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfAp8IFllYXIgMTogRmFsbCAgIHwgRm9ybSBSZXNlYXJjaCBBZHZpc29yeSBDb21taXR0ZWUgKFJBQykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CnwgICAgICAgICAgICAgICAgfCBTZWxlY3QgdG9waWMgZm9yIDFzdC15ZWFyIHByb2plY3QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKfCAgICAgICAgICAgICAgICB8IEJhY2tncm91bmQgcmVhZGluZ3Mgb24gdG9waWMgYW5kIHF1YW50aXRhdGl2ZSBtZXRob2RzICAgICAgICAgICAgICAgICAgICAgICAgfAp8ICAgICAgICAgICAgICAgIHwgQmVnaW4gd3JpdGluZyBsaXRlcmF0dXJlIHJldmlldyBmb3IgMXN0LXllYXIgcHJvamVjdCAgICAgICAgICAgICAgICAgICAgICAgICB8CnwgICAgICAgICAgICAgICAgfCBSQUMgTWVldGluZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKfCBZZWFyIDE6IFNwcmluZyB8IENvbXBsZXRlIGxpdGVyYXR1cmUgcmV2aWV3IGZvciAxc3QgeWVhciBwcm9qZWN0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAp8ICAgICAgICAgICAgICAgIHwgQmVnaW4gbWV0aG9kcyBhbmQgZGF0YSBhbmFseXNpcyBmb3IgMXN0LXllYXIgcHJvamVjdCAgICAgICAgICAgICAgICAgICAgICAgICB8CnwgICAgICAgICAgICAgICAgfCBSQUMgTWVldGluZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKfCBZZWFyIDI6IFN1bW1lciB8IENvbXBsZXRlIGFuYWx5c2lzIGZvciAxc3QteWVhciBwcm9qZWN0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAp8ICAgICAgICAgICAgICAgIHwgV3JpdGUtdXAgcmVzdWx0cyBhbmQgZGlzY3Vzc2lvbiBzZWN0aW9uIGZvciAxc3QteWVhciBwcm9qZWN0ICAgICAgICAgICAgICAgICB8CnwgWWVhciAyOiBGYWxsICAgfCAxc3QgeWVhciBwcm9qZWN0IHdyaXR0ZW4gZG9jdW1lbnQgZHVlIChNb25kYXkgYWZ0ZXIgVGhhbmtzZ2l2aW5nKSAgICAgICAgICAgIHwKfCAgICAgICAgICAgICAgICB8IFJBQyBNZWV0aW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAp8IFllYXIgMjogU3ByaW5nIHwgMXN0LXllYXIgcHJvamVjdCBwcmVzZW50YXRpb24gdG8gZGVwYXJ0bWVudCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CnwgICAgICAgICAgICAgICAgfCBTdWJtaXQgMXN0LXllYXIgcHJvamVjdCBmb3IgcHVibGljYXRpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKfCAgICAgICAgICAgICAgICB8IEJlZ2luIGZvcm11bGF0aW5nIGNvbXByZWhlbnNpdmUgcGFwZXIgdG9waWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAp8ICAgICAgICAgICAgICAgIHwgUkFDIE1lZXRpbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CnwgICAgICAgICAgICAgICAgfCBGb3JtIGNvbXByZWhlbnNpdmUgZXhhbSBjb21taXR0ZWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKfCBZZWFyIDM6IFN1bW1lciB8IEZsZXNoIG91dCBjb21wcmVoZW5zaXZlIHBhcGVyIHRvcGljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAp8ICAgICAgICAgICAgICAgIHwgV3JpdGUgY29tcHJlaGVuc2l2ZSBwYXBlciBwcm9wb3NhbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CnwgWWVhciAzOiBGYWxsICAgfCBDb21wcmVoZW5zaXZlIHBhcGVyIHByb3Bvc2FsIG1lZXRpbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKfCAgICAgICAgICAgICAgICB8IFdyaXRlIGNvbXByZWhlbnNpdmUgcGFwZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAp8IFllYXIgMzogU3ByaW5nIHwgVHVybiBpbiBjb21wcmVoZW5zaXZlIHBhcGVyIGRyYWZ0IDEgKHNlY29uZCBNb25kYXkgaW4gRmVicnVhcnkpICAgICAgICAgICAgICB8CnwgICAgICAgICAgICAgICAgfCBSZWNlaXZlIGZlZWRiYWNrIGZyb20gY29tbWl0dGVlICgzIHdlZWsgdHVybi1hcm91bmQpICAgICAgICAgICAgICAgICAgICAgICAgIHwKfCAgICAgICAgICAgICAgICB8IFJldmlzZSBhbmQgcmVzdWJtaXQgY29tcHJlaGVuc2l2ZSBwYXBlciAoTW9uZGF5IGJlZm9yZSBsYXN0IHdlZWsgb2YgY2xhc3NlcykgfAp8ICAgICAgICAgICAgICAgIHwgRmluYWwgY29tcHJlaGVuc2l2ZSBleGFtIGNvbW1pdHRlZSBtZWV0aW5nIHdpdGggb3JhbCBkZWZlbnNlICAgICAgICAgICAgICAgICB8CnwgWWVhciA0OiBTdW1tZXIgfCBCZWdpbiB3b3JrIG9uIGRpc3NlcnRhdGlvbiBwcm9zcGVjdHVzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKfCBZZWFyIDQ6IEZhbGwgICB8IEZvcm0gZGlzc2VydGF0aW9uIGNvbW1pdHRlZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAp8ICAgICAgICAgICAgICAgIHwgQ29udGludWUgd3JpdGluZyBkaXNzZXJ0YXRpb24gcHJvc3BlY3R1cyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CnwgWWVhciA0OiBTcHJpbmcgfCBDb21wbGV0ZSBkaXNzZXJ0YXRpb24gcHJvc3BlY3R1cyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKfCAgICAgICAgICAgICAgICB8IERlZmVuZCBkaXNzZXJ0YXRpb24gcHJvc3BlY3R1cyAoYnkgc3ByaW5nIGJyZWFrKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAp8ICAgICAgICAgICAgICAgIHwgQmVnaW4gZGlzc2VydGF0aW9uIHJlc2VhcmNoICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CnwgWWVhciA1OiBTdW1tZXIgfCBEaXNzZXJ0YXRpb24gcmVzZWFyY2ggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKfCBZZWFyIDU6IEZhbGwgICB8IERpc3NlcnRhdGlvbiByZXNlYXJjaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAp8ICAgICAgICAgICAgICAgIHwgQXBwbHkgZm9yIGludGVybnNoaXAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CnwgWWVhciA1OiBTcHJpbmcgfCBEaXNzZXJ0YXRpb24gcmVzZWFyY2ggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKfCAgICAgICAgICAgICAgICB8IEludGVydmlldyBmb3IgaW50ZXJuc2hpcCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAp8ICAgICAgICAgICAgICAgIHwgRGVmZW5kIGRpc3NlcnRhdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CnwgWWVhciA2OiBTdW1tZXIgfCBbQ2xpbmljYWwgc3R1ZGVudHM6IEJlZ2luIEludGVybnNoaXBdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKfCBZZWFyIDY6IEZhbGwgICB8IFtDbGluaWNhbCBzdHVkZW50czogSW50ZXJuc2hpcF0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAp8IFllYXIgNjogU3ByaW5nIHwgW0NsaW5pY2FsIHN0dWRlbnRzOiBJbnRlcm5zaGlwXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CnwgWWVhciA3OiBTdW1tZXIgfCBHcmFkdWF0ZSB3aXRoIFBoLkQuISAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKClRoZXNlIGFyZSBndWlkZXBvc3RzIHRvd2FyZCBjb21wbGV0aW5nIHByb2dyYW0gcmVxdWlyZW1lbnRzIHdpdGhpbiBhIDUteWVhciB0aW1lZnJhbWUuClRoZSB5ZWFyIG9mIGNsaW5pY2FsIGludGVybnNoaXAgaXMgb25seSBmb3Igc3R1ZGVudHMgaW4gdGhlIENsaW5pY2FsIFNjaWVuY2UgYXJlYS4KQXMgd2UgaGF2ZSBkaXNjdXNzZWQsIG15IGV4cGVjdGF0aW9uIGlzIHRoYXQgeW91IHdpbGwgYmUgZW5nYWdlZCBpbiByZXNlYXJjaCBhY3Rpdml0aWVzICpiZXlvbmQqIHRob3NlIHJlcXVpcmVkIGJ5IHRoZSBwcm9ncmFtLgoKIyMjIENvdXJzZXdvcmsgVGltZWxpbmUgeyN0aW1lbGluZS1jb3Vyc2V3b3JrfQoKfCAqKlNlbWVzdGVyKiogICB8ICoqQ291cnNld29yayBHb2FsKHMpKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CnwtLS0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfAp8IFllYXIgMTogRmFsbCAgIHwgT3JpZW50YXRpb24gdG8gQ2xpbmljYWwgUmVzZWFyY2ggKHdpdGggRENUKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKfCAgICAgICAgICAgICAgICB8IFF1YW50aXRhdGl2ZSBNZXRob2RzIENvdXJzZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CnwgICAgICAgICAgICAgICAgfCBEZXNjcmlwdGl2ZSBQc3ljaG9wYXRob2xvZ3kgT1IgUHN5Y2hvbG9naWNhbCBUaGVyYXBpZXMgICAgICAgICAgICAgICAgICAgfAp8ICAgICAgICAgICAgICAgIHwgSW50cm9kdWN0b3J5IFByYWN0aWN1bSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKfCAgICAgICAgICAgICAgICB8IFJlc2VhcmNoICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CnwgWWVhciAxOiBTcHJpbmcgfCBRdWFudGl0YXRpdmUgQ291cnNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAp8ICAgICAgICAgICAgICAgIHwgUHJpbmNpcGxlcyBvZiBQc3ljaG9sb2dpY2FsIEFzc2Vzc21lbnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKfCAgICAgICAgICAgICAgICB8IEJyZWFkdGggQ291cnNlIChIaXN0b3J5LCBDb2duaXRpdmUsIFNvY2lhbCwgQmlvbG9naWNhbCwgRGV2ZWxvcG1lbnRhbCkgICB8CnwgICAgICAgICAgICAgICAgfCBBc3Nlc3NtZW50IFByYWN0aWN1bSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAp8ICAgICAgICAgICAgICAgIHwgUmVzZWFyY2ggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKfCBZZWFyIDI6IFN1bW1lciB8IEFzc2Vzc21lbnQgUHJhY3RpY3VtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CnwgWWVhciAyOiBGYWxsICAgfCBEZXNjcmlwdGl2ZSBQc3ljaG9wYXRob2xvZ3kgT1IgUHN5Y2hvbG9naWNhbCBUaGVyYXBpZXMgICAgICAgICAgICAgICAgICAgfAp8ICAgICAgICAgICAgICAgIHwgQnJlYWR0aCBDb3Vyc2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKfCAgICAgICAgICAgICAgICB8IEFzc2Vzc21lbnQgUHJhY3RpY3VtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CnwgICAgICAgICAgICAgICAgfCBSZXNlYXJjaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAp8IFllYXIgMjogU3ByaW5nIHwgQnJlYWR0aC9CQklQIENvdXJzZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKfCAgICAgICAgICAgICAgICB8IEJyZWFkdGggQ291cnNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CnwgICAgICAgICAgICAgICAgfCBUaGVyYXB5IHByYWN0aWN1bSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAp8ICAgICAgICAgICAgICAgIHwgUmVzZWFyY2ggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKfCBZZWFyIDM6IFN1bW1lciB8IFRoZXJhcHkgUHJhY3RpY3VtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CnwgWWVhciAzOiBGYWxsICAgfCBCcmVhZHRoIENvdXJzZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAp8ICAgICAgICAgICAgICAgIHwgUmVzZWFyY2ggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKfCAgICAgICAgICAgICAgICB8IFRoZXJhcHkgcHJhY3RpY3VtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CnwgWWVhciAzOiBTcHJpbmcgfCBCcmVhZHRoIENvdXJzZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAp8ICAgICAgICAgICAgICAgIHwgUmVzZWFyY2ggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKfCAgICAgICAgICAgICAgICB8IFRoZXJhcHkgcHJhY3RpY3VtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CnwgWWVhciA0OiBTdW1tZXIgfCBUaGVyYXB5IFByYWN0aWN1bSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAp8IFllYXIgNDogRmFsbCAgIHwgQnJlYWR0aCBDb3Vyc2UgKGlmIG5lZWRlZCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKfCAgICAgICAgICAgICAgICB8IFJlc2VhcmNoICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CnwgICAgICAgICAgICAgICAgfCBUaGVyYXB5IHByYWN0aWN1bSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAp8IFllYXIgNDogU3ByaW5nIHwgQnJlYWR0aCBDb3Vyc2UgKGlmIG5lZWRlZCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKfCAgICAgICAgICAgICAgICB8IFJlc2VhcmNoICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CnwgICAgICAgICAgICAgICAgfCBUaGVyYXB5IHByYWN0aWN1bSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAp8IFllYXIgNTogU3VtbWVyIHwgVGhlcmFweSBQcmFjdGljdW0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKfCBZZWFyIDU6IEZhbGwgICB8IERpc3NlcnRhdGlvbiBSZXNlYXJjaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CnwgICAgICAgICAgICAgICAgfCBUaGVyYXB5L0V4dGVybmFsIFByYWN0aWN1bSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAp8IFllYXIgNTogU3ByaW5nIHwgRGlzc2VydGF0aW9uIFJlc2VhcmNoICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKfCAgICAgICAgICAgICAgICB8IFRoZXJhcHkvRXh0ZXJuYWwgUHJhY3RpY3VtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CnwgWWVhciA2ICAgICAgICAgfCBJbnRlcm5zaGlwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAoKKipDbGluaWNhbCBTY2llbmNlIEFyZWEgQ291cnNlIFJlcXVpcmVtZW50cyoqCgotIDMgQ2xpbmljYWwgQ29yZSBDb3Vyc2VzIChQc3ljaG9wYXRob2xvZ3ksIFRoZXJhcGllcywgQXNzZXNzbWVudCkKLSAyIFF1YW50aXRhdGl2ZSBDb3Vyc2VzCi0gNCBCcmVhZHRoIENvdXJzZXMgKEJpb2xvZ2ljYWwsIENvZ25pdGl2ZSwgRGV2ZWxvcG1lbnRhbCwgYW5kIFNvY2lhbCBCYXNlcyBvZiBCZWhhdmlvcikKLSBIaXN0b3J5IGFuZCBTeXN0ZW1zCi0gXCpCZWhhdmlvcmFsLUJpb21lZGljYWwgSW50ZXJmYWNlIFRyYWluaW5nIFByb2dyYW0gKEJCSVApIHJlcXVpcmVkIGNvdXJzZSAoaWYgeW91IGFyZSBwYXJ0IG9mIEJCSVApCgpOb3RlOiBCcmVhZHRoIGNvdXJzZXMgY2FuIGJlIGNvbXBsZXRlZCB3aXRoIGRpcmVjdGVkIHJlYWRpbmdzLgoKIyMjIENsaW5pY2FsIFdvcmsgVGltZWxpbmUgeyN0aW1lbGluZS1jbGluaWNhbH0KCnwgKipTZW1lc3RlcioqICAgfCAqKkNsaW5pY2FsIFRhc2sgR29hbChzKSoqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CnwtLS0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18CnwgWWVhciAxOiBGYWxsICAgfCBBdHRlbmQgQ2xpbmljYWwgUm91bmRzIChNb25kYXlzIGZyb20gMTI6MzDigJMxOjIwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKfCAgICAgICAgICAgICAgICB8IFdvcmsgd2l0aCBhZHZhbmNlZCBncmFkdWF0ZSBzdHVkZW50cyBvbiBhc3Nlc3NtZW50IHNraWxscyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKfCAgICAgICAgICAgICAgICB8IEludGVydmlld2luZyBwcmFjdGljdW0gd2l0aCBDbGluaWMgRGlyZWN0b3IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKfCBZZWFyIDE6IFNwcmluZyB8IEF0dGVuZCBDbGluaWNhbCBSb3VuZHMgKE1vbmRheXMgZnJvbSAxMjozMOKAkzE6MjApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAp8ICAgICAgICAgICAgICAgIHwgV29yayB3aXRoIGFkdmFuY2VkIGdyYWR1YXRlIHN0dWRlbnRzIG9uIGFzc2Vzc21lbnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAp8ICAgICAgICAgICAgICAgIHwgQmVnaW4gY29tcGxldGluZyBpbnRlbGxlY3R1YWwgZGlzYWJpbGl0eSBhc3Nlc3NtZW50cyBpbiBjbGluaWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAp8ICAgICAgICAgICAgICAgIHwgSW50ZXJ2aWV3aW5nIHByYWN0aWN1bSB3aXRoIENsaW5pYyBEaXJlY3RvciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAp8IFllYXIgMjogU3VtbWVyIHwgQ29udGludWUgaW50ZWxsZWN0dWFsIGRpc2FiaWxpdHkgYXNzZXNzbWVudHMsIGJlZ2luIFNEUyBhc3Nlc3NtZW50cyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAp8IFllYXIgMjogRmFsbCAgIHwgQ29tcGxldGUgU0RTIGFuZCBESFMgYXNzZXNzbWVudHMgaW4gU2Vhc2hvcmUgQ2xpbmljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAp8ICAgICAgICAgICAgICAgIHwgQXR0ZW5kIENsaW5pY2FsIFJvdW5kcyAoTW9uZGF5cyBmcm9tIDEyOjMw4oCTMToyMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CnwgICAgICAgICAgICAgICAgfCBXZWVrbHkgMm5kLXllYXIgc2VtaW5hciB3aXRoIENsaW5pYyBEaXJlY3RvciAoTW90aXZhdGlvbmFsIEludGVydmlld2luZywgQmVoYXZpb3JhbCBBY3RpdmF0aW9uKSB8CnwgWWVhciAyOiBTcHJpbmcgfCBDb21wbGV0ZSBhc3Nlc3NtZW50cyBpbiBTZWFzaG9yZSBDbGluaWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CnwgICAgICAgICAgICAgICAgfCBCZWdpbiB0YWtpbmcgdGhlcmFweSBjYXNlcyBpbiBTZWFzaG9yZSBDbGluaWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CnwgICAgICAgICAgICAgICAgfCBBdHRlbmQgQ2xpbmljYWwgUm91bmRzIChNb25kYXlzIGZyb20gMTI6MzDigJMxOjIwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKfCAgICAgICAgICAgICAgICB8IFdlZWtseSAybmQteWVhciBzZW1pbmFyIHdpdGggQ2xpbmljIERpcmVjdG9yIChNb3RpdmF0aW9uYWwgSW50ZXJ2aWV3aW5nLCBCZWhhdmlvcmFsIEFjdGl2YXRpb24pIHwKfCBZZWFyIDM6IFN1bW1lciB8IENvbXBsZXRlIGFzc2Vzc21lbnRzIGluIFNlYXNob3JlIENsaW5pYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKfCAgICAgICAgICAgICAgICB8IFdvcmsgd2l0aCB0aGVyYXB5IGNhc2VzIGluIFNlYXNob3JlIENsaW5pYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKfCBZZWFyIDM6IEZhbGwgICB8IENvbXBsZXRlIGFzc2Vzc21lbnRzIGluIFNlYXNob3JlIENsaW5pYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKfCAgICAgICAgICAgICAgICB8IFdvcmsgd2l0aCB0aGVyYXB5IGNhc2VzIGluIFNlYXNob3JlIENsaW5pYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKfCAgICAgICAgICAgICAgICB8IEF0dGVuZCBDbGluaWNhbCBSb3VuZHMgKE1vbmRheXMgZnJvbSAxMjozMOKAkzE6MjApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAp8ICAgICAgICAgICAgICAgIHwgV2Vla2x5IDNyZC15ZWFyIHNlbWluYXIgKEV4cG9zdXJlIFRoZXJhcHkgYW5kIG90aGVyIGFwcHJvYWNoZXMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAp8IFllYXIgMzogU3ByaW5nIHwgQ29tcGxldGUgYXNzZXNzbWVudHMgaW4gU2Vhc2hvcmUgQ2xpbmljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAp8ICAgICAgICAgICAgICAgIHwgV29yayB3aXRoIHRoZXJhcHkgY2FzZXMgaW4gU2Vhc2hvcmUgQ2xpbmljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAp8ICAgICAgICAgICAgICAgIHwgQXR0ZW5kIENsaW5pY2FsIFJvdW5kcyAoTW9uZGF5cyBmcm9tIDEyOjMw4oCTMToyMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CnwgICAgICAgICAgICAgICAgfCBXZWVrbHkgM3JkLXllYXIgc2VtaW5hciAoRXhwb3N1cmUgVGhlcmFweSBhbmQgb3RoZXIgYXBwcm9hY2hlcykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CnwgWWVhciA0OiBTdW1tZXIgfCBDb21wbGV0ZSBhc3Nlc3NtZW50cyBpbiBTZWFzaG9yZSBDbGluaWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CnwgICAgICAgICAgICAgICAgfCBXb3JrIHdpdGggdGhlcmFweSBjYXNlcyBpbiBTZWFzaG9yZSBDbGluaWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CnwgWWVhciA0OiBGYWxsICAgfCBTZWFzaG9yZSBDbGluaWMgd29yayBhbmQvb3IgRXh0ZXJuYWwgUHJhY3RpY3VtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CnwgICAgICAgICAgICAgICAgfCBBdHRlbmQgQ2xpbmljYWwgUm91bmRzIChNb25kYXlzIGZyb20gMTI6MzDigJMxOjIwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKfCBZZWFyIDQ6IFNwcmluZyB8IFNlYXNob3JlIENsaW5pYyB3b3JrIGFuZC9vciBFeHRlcm5hbCBQcmFjdGljdW0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKfCAgICAgICAgICAgICAgICB8IEF0dGVuZCBDbGluaWNhbCBSb3VuZHMgKE1vbmRheXMgZnJvbSAxMjozMOKAkzE6MjApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAp8IFllYXIgNTogU3VtbWVyIHwgU2Vhc2hvcmUgQ2xpbmljIHdvcmsgYW5kL29yIEV4dGVybmFsIFByYWN0aWN1bSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAp8IFllYXIgNTogRmFsbCAgIHwgU2Vhc2hvcmUgQ2xpbmljIHdvcmsgYW5kL29yIEV4dGVybmFsIFByYWN0aWN1bSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAp8ICAgICAgICAgICAgICAgIHwgQXR0ZW5kIENsaW5pY2FsIFJvdW5kcyAoTW9uZGF5cyBmcm9tIDEyOjMw4oCTMToyMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CnwgICAgICAgICAgICAgICAgfCBBcHBseSBmb3IgaW50ZXJuc2hpcCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CnwgWWVhciA1OiBTcHJpbmcgfCBJbnRlcnZpZXcgZm9yIEludGVybnNoaXAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CnwgWWVhciA2ICAgICAgICAgfCBBUEEtQWNjcmVkaXRlZCBJbnRlcm5zaGlwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CgpbXjFdOiBNYW55IG9mIHRoZSBsYWIgZXhwZWN0YXRpb25zIHdlcmUgY29iYmxlZCB0b2dldGhlciBmcm9tIGEgdmFyaWV0eSBvZiBvdGhlciBsYWJzIGFuZCBhcmUgbm90IHVuaXF1ZSB0byB0aGlzIGxhYi4KICBMaWtld2lzZSwgc29tZSBvZiB0aGUgbGFuZ3VhZ2UgdXNlZCBpbiB0aGlzIGRvY3VtZW50IHdhcyBib3Jyb3dlZCBmcm9tIG90aGVyIHNvdXJjZXMuCiAgClteMl06IEFzayBtZSB0byBnaXZlIHlvdSBhY2Nlc3MuCiAgSXQgaXMgZWFzaWVzdCB0byBzaGFyZSB0aGUgW0dvb2dsZSBEcml2ZSBmb2xkZXIgb2YgcHJpbWVyIGFydGljbGVzXShodHRwczovL2RyaXZlLmdvb2dsZS5jb20vZHJpdmUvdS8wL2ZvbGRlcnMvMVhsUFczN0FEZm42aUNDdnB0M3M2VndXeE9NS2tqSk51KSB3aXRoIHlvdXIgR29vZ2xlIGFjY291bnQuCgpbXjNdOiBZb3UgbmVlZCB0byBiZSBvbiB0aGUgVlBOIHRvIGFjY2Vzcy4KICBZb3UgbWF5IG5lZWQgdG8gY29udGFjdCB0aGUgY2xpbmljIGRpcmVjdG9yIHRvIGdldCBhY2Nlc3MgdG8gdGhlIENsaW5pYyBEcml2ZS4K