PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpDaGFuZ2VzIHNpbmNlIGZvciBVLUJvb3QgMC4xLjA6Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KCiogUGF0Y2ggYnkgVGhvbWFzIEZyaWVkZW4sIDEzIE5vdiAyMDAyOgogIEFkZCBjb2RlIGZvciBBbWlnYU9uZSBib2FyZAogIChwcmVsaW1pbmFyeSBtZXJnZSB0byBVLUJvb3QsIHN0aWxsIFdJUCkKCiogUGF0Y2ggYnkgSm9uIERpZWtlbWEsIDEyIE5vdiAyMDAyOgogIC0gQWRkaW5nIFVSTCBmb3IgSUVFRSBPVUkgbG9va3VwCiAgLSBNYWtpbmcgdGhlIGF1dG9ib290ICNkZWZpbmVzIGRlcGVuZGVudCBvbiBDT05GSUdfQVVUT0JPT1RfS0VZRUQKICAgIGJlaW5nIGRlZmluZWQuCiAgLSBJbiB0aGUgQ09ORklHX0VYVFJBX0VOVl9TRVRUSU5HUyAjZGVmaW5lLCB0aGUgcm9vdC1vbi1pbml0cmQgYW5kCiAgICByb290LW9uLW5mcyBtYWNyb3MgYXJlIGRlc2lnbmVkIHRvIHN3aXRjaCBob3cgdGhlIGRlZmF1bHQgYm9vdAogICAgbWV0aG9kIGdldHMgZGVmaW5lZC4KCiogUGF0Y2ggYnkgRGFuaWVsIEVuZ3N0cvZtLCAxMyBOb3YgMjAwMjoKICBBZGQgc3VwcG9ydCBmb3IgaTM4NiBhcmNoaXRlY3R1cmUgYW5kIEFNRCBTQzUyMCBib2FyZAoKKiBQYXRjaCBieSBQaWVycmUgQXViZXJ0LCAxMiBOb3YgMjAwMjoKICBBZGQgc3VwcG9ydCBmb3IgRE9TIGZpbGVzeXN0ZW0gYW5kIGJvb3RpbmcgZnJvbSBET1MgZmxvcHB5IGRpc2sKCiogUGF0Y2ggYnkgSmltIFNhbmRveiwgMDcgTm92IDIwMDI6CiAgSW5jcmVhc2UgbnVtYmVyIG9mIG5ldHdvcmsgUlggYnVmZmVycyAoUEtUQlVGU1JYIGluCiAgImluY2x1ZGUvbmV0LmgiKSBmb3IgRUVQUk8xMDAgYmFzZWQgYm9hcmRzIChlc3BlY2lhbGx5IFNQODI0MCkKICB3aGljaCBzaG93ZWQgIlJlY2VpdmVyIGlzIG5vdCByZWFkeSIgZXJyb3JzIHdoZW4gVS1Cb290IHdhcwogIHByb2Nlc3NpbmcgdGhlIHJlY2VpdmUgYnVmZmVycyBzbG93ZXIgdGhhbiB0aGUgbmV0d29yayBjb250cm9sbGVyCiAgd2FzIGZpbGxpbmcgdGhlbS4KCiogUGF0Y2ggYnkgQW5kcmVhcyBPYmVycml0dGVyLCAwOSBOb3YgMjAwMjoKICBDaGFuZ2UgYmVoYXZpb3VyIG9mIE5ldExvb3AoKTogcmV0dXJuIC0xIGZvciBlcnJvcnMsIGZpbGVzaXplCiAgb3RoZXJ3aXNlOyByZXR1cm4gY29kZSAwIGlzIHZhbGlkIGFuIG1lYW5zIG5vIGZpbGUgbG9hZGVkIC0gaW4gdGhpcwogIGNhc2UgdGhlIGVudmlyb25tZW50IHN0aWxsIGdldHMgdXBkYXRlZCEKCiogUGF0Y2hlcyBieSBKb24gRGlla2VtYSwgOSBOb3YgMjAwMjoKICAtIGltcHJvdmUgQURDL0RBQyBjbG9ja2luZyBvbiB0aGUgU0FDU25nIGJvYXJkIHRvIGFsaWduCiAgICB0aGUgZmFpbGluZyBlZGdlcyBvZiBMUkNMSyBhbmQgU0NMSwogIC0gc2JjODI2MCBjb25maWd1cmF0aW9uIHR3ZWFrcwogIC0gYWRkIHN0YXR1cyBMRUQgc3VwcG9ydCBmb3IgODJ4eCBzeXN0ZW1zCiAgLSB3aXJlIHNzcGkvc3NwbyBjb21tYW5kcyBpbnRvIGNvbW1hbmQgaGFuZGxlcjsgaW1wcm92ZWQgZXJyb3IKICAgIGhhbmRsZXJpbmcKICAtIGFkZCB0aW1lc3RhbXAgc3VwcG9ydCBhbmQgYWx0ZXJuYXRlIG1lbW9yeSB0ZXN0IHRvIHRoZQogICAgU0FDU25nIGNvbmZpZ3VyYXRpb24KCiogUGF0Y2ggYnkgVmluY2UgSHVzb3Zza3ksIDcgTm92IDIwMDI6CiAgQWRkICItbiIgdG8gbGlua2VyIG9wdGlvbnMgdG8gZ2V0IHJpZCBvZiAiTm90IGVub3VnaCByb29tIGZvcgogIHByb2dyYW0gaGVhZGVycyIgcHJvYmxlbQoKKiBQYXRjaCBieSBEYXZpZCBN/GxsZXIsIDA1IE5vdiAyMDAyCiAgUmVuYW1lIENPTkZJR19QTExfSU5QVVRfRlJFUSB0byBDT05GSUdfU1lTX0NMS19GUkVRCiAgc28gd2UgY2FuIHVzZSBhbiBhbHJlYWR5IGV4aXN0aW5nIG5hbWUKCiogUGF0Y2ggYnkgUGllcnJlIEF1YmVydCwgMDUgTm92IDIwMDIKICBIYXJkd2FyZSByZWxhdGllZCBpbXByb3ZtZW50cyBpbiBGREMgYm9vdCBjb2RlCgoqIFBhdGNoIGJ5IEhvbGdlciBTY2h1cmlnLCA1IE5vdiAyMDAyOgogIE1ha2UgdGhlIFBYQSByZWFsbHkgY2hhbmdlIGl0J3MgZnJlcXVlbmN5CgoqIFBhdGNoIGJ5IFBpZXJyZSBBdWJlcnQsIDA1IE5vdiAyMDAyCiAgQWRkIHN1cHBvcnQgZm9yIHNsYXZlIHNlcmlhbCBTcGFydGFuIDIgRlBHQXMKCiogRml4IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IChNQUMgIGFkZHJlc3MpICBpbiAgOHh4ICBTQ0MvRkVDICBldGhlcm5ldAogIGRyaXZlcnMKCiogQWRkIHN1cHBvcnQgZm9yIGxvZyBidWZmZXIgd2hpY2ggY2FuIGJlIHBhc3NlZCB0byBMaW51eCBrZXJuZWwncwogIHN5c2xvZyBtZWNoYW5pc207IHVzZWQgZXNwZWNpYWxseSBmb3IgUE9TVCByZXN1bHRzLgoKKiBQYXRjaCBieSBLbGF1cyBIZXlkZWNrLCAzMSBPY3QgMjAwMjoKICBBZGQgaW5pdGlhbCBzdXBwb3J0IGZvciBrdXA0ayBib2FyZAoKKiBQYXRjaCBieSBSb2JlcnQgU2Nod2ViZWwsIDA0IE5vdiAyMDAyOgogIC0gdXNlIHdhdGNoZG9nIHRvIHJlc2V0IFBYQTI1MCBzeXN0ZW1zCiAgLSBhZGRlZCBwcm9ncmVzcyBjYWxsYmFja3MgdG8gKHNvbWUgb2YgdGhlKSBBUk0gY29kZQogIC0gdXBkYXRlIGZvciBDb2dlbnQgQ1NCMjI2IGJvYXJkCgoqIEFkZCBzdXBwb3J0IGZvciBGUFM4NjAgYm9hcmQKCiogUGF0Y2ggYnkgR3VpbGxhdW1lIEFsZXhhbmRyZSwsIDA0IE5vdiAyMDAyOgogIEltcHJvdmUgUENJIGFjY2VzcyBvbiAzMi1iaXRzIENvbXBhY3QgUENJIGJ1cwoKKiBGaXggbWRlbGF5KCkgb24gVFJBQiAtIHRoaXMgd2FzIHN0aWxsIHRoZSBkZWJ1Z2dpbmcgdmVyc2lvbiB3aXRoCiAgc2Vjb25kcyBpbnN0ZWFkIG9mIG1zLgoKKiBQYXRjaCBieSBSb2JlcnQgU2Nod2ViZWwsIDEgTm92IDIwMDI6CiAgWFNjYWxlIHJlbGF0ZWQgY2xlYW51cCAoYWZmZWN0cyBhbGwgQVJNIGJvYXJkcykKCiogQ2xlYW51cCBvZiBuYW1lcyBhbmQgUkVBRE1FLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpOb3RlcyBmb3IgVS1Cb290IDAuMS4wOgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CgpUaGlzIGlzIHRoZSBpbml0aWFsIHZlcnNpb24gb2YgIkRhcyBVLUJvb3QiLCB0aGUgVW5pdmVyc2FsIEJvb3QgTG9hZGVyLgoKSXQgaXMgYmFzZWQgb24gdmVyc2lvbiAyLjAuMCAodGhlICJIYWxsb3dlZW4gUmVsZWFzZSIpIG9mIFBQQ0Jvb3QuCkZvciBpbmZvcm1hdGlvbiBhYm91dCB0aGUgaGlzdG9yeSBvZiB0aGUgcHJvamVjdCBwbGVhc2Ugc2VlIHRoZQpQUENCb290IHByb2plY3QgcGFnZSBhdCBodHRwOi8vc291cmNlZm9yZ2UubmV0L3Byb2plY3RzL3BwY2Jvb3QKCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K