ICAgICAgICAgICAgICAgICAgICAgICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIQVByb3h5IGhvdy10bwogICAgICAgICAgICAgICAgICAgICAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlcnNpb24gMS41LjE1CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lsbHkgdGFycmVhdQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjAxNS8xMS8wMQoKCjEpIEhvdyB0byBidWlsZCBpdAotLS0tLS0tLS0tLS0tLS0tLS0KCkZpcnN0LCBwbGVhc2Ugbm90ZSB0aGF0IHRoaXMgdmVyc2lvbiBpcyBhIHN0YWJsZSB2ZXJzaW9uLCBzbyBpbiBnZW5lcmFsIGlmIHlvdQphcmUgbm90IHVzZWQgdG8gYnVpbGQgZnJvbSBzb3VyY2VzLCBpdCBpcyByZWNvbW1lbmRlZCB0aGF0IGluc3RlYWQgeW91IGZvbGxvdwp0aGUgcGFja2FnZWQgdXBkYXRlcyBwcm92aWRlZCBieSB5b3VyIHNvZnR3YXJlIHZlbmRvciBvciBMaW51eCBkaXN0cmlidXRpb24uCk1vc3Qgb2YgdGhlbSBhcmUgdGFraW5nIHRoaXMgdGFzayBzZXJpb3VzbHkgYW5kIGFyZSBkb2luZyBhIGdvb2Qgam9iLiBJZiBmb3IKYW55IHJlYXNvbiB5b3UnZCBwcmVmZXIgYSBkaWZmZXJlbnQgdmVyc2lvbiB0aGFuIHRoZSBvbmUgcGFja2FnZWQgZm9yIHlvdXIKc3lzdGVtLCBvciB0byBnZXQgc29tZSBjb21tZXJjaWFsIHN1cHBvcnQsIG90aGVyIGNob2ljZXMgYXJlIGF2YWlsYWJsZSBhdCA6CgogICAgICAgICAgICAgICAgICAgICAgICBodHRwOi8vd3d3LmhhcHJveHkuY29tLwoKVG8gYnVpbGQgaGFwcm94eSwgeW91IHdpbGwgbmVlZCA6CiAgLSBHTlUgbWFrZS4gTmVpdGhlciBTb2xhcmlzIG5vciBPcGVuQlNEJ3MgbWFrZSB3b3JrIHdpdGggdGhlIEdOVSBNYWtlZmlsZS4KICAgIElmIHlvdSBnZXQgbWFueSBzeW50YXggZXJyb3JzIHdoZW4gcnVubmluZyAibWFrZSIsIHlvdSBtYXkgd2FudCB0byByZXRyeQogICAgd2l0aCAiZ21ha2UiIHdoaWNoIGlzIHRoZSBuYW1lIGNvbW1vbmx5IHVzZWQgZm9yIEdOVSBtYWtlIG9uIEJTRCBzeXN0ZW1zLgogIC0gR0NDIGJldHdlZW4gMi45NSBhbmQgNC44LiBPdGhlcnMgbWF5IHdvcmssIGJ1dCBub3QgdGVzdGVkLgogIC0gR05VIGxkCgpBbHNvLCB5b3UgbWlnaHQgd2FudCB0byBidWlsZCB3aXRoIGxpYnBjcmUgc3VwcG9ydCwgd2hpY2ggd2lsbCBwcm92aWRlIGEgdmVyeQplZmZpY2llbnQgcmVnZXggaW1wbGVtZW50YXRpb24gYW5kIHdpbGwgYWxzbyBmaXggc29tZSBiYWRuZXNzIG9uIFNvbGFyaXMnIG9uZS4KClRvIGJ1aWxkIGhhcHJveHksIHlvdSBoYXZlIHRvIGNob29zZSB5b3VyIHRhcmdldCBPUyBhbW9uZ3N0IHRoZSBmb2xsb3dpbmcgb25lcwphbmQgYXNzaWduIGl0IHRvIHRoZSBUQVJHRVQgdmFyaWFibGUgOgoKICAtIGxpbnV4MjIgICAgIGZvciBMaW51eCAyLjIKICAtIGxpbnV4MjQgICAgIGZvciBMaW51eCAyLjQgYW5kIGFib3ZlIChkZWZhdWx0KQogIC0gbGludXgyNGUgICAgZm9yIExpbnV4IDIuNCB3aXRoIHN1cHBvcnQgZm9yIGEgd29ya2luZyBlcG9sbCAoPiAwLjIxKQogIC0gbGludXgyNiAgICAgZm9yIExpbnV4IDIuNiBhbmQgYWJvdmUKICAtIGxpbnV4MjYyOCAgIGZvciBMaW51eCAyLjYuMjgsIDMueCwgYW5kIGFib3ZlIChlbmFibGVzIHNwbGljZSBhbmQgdHByb3h5KQogIC0gc29sYXJpcyAgICAgZm9yIFNvbGFyaXMgOCBvciAxMCAob3RoZXJzIHVudGVzdGVkKQogIC0gZnJlZWJzZCAgICAgZm9yIEZyZWVCU0QgNSB0byAxMCAob3RoZXJzIHVudGVzdGVkKQogIC0gb3N4ICAgICAgICAgZm9yIE1hYyBPUy9YCiAgLSBvcGVuYnNkICAgICBmb3IgT3BlbkJTRCAzLjEgYW5kIGFib3ZlCiAgLSBhaXg1MSAgICAgICBmb3IgQUlYIDUuMQogIC0gYWl4NTIgICAgICAgZm9yIEFJWCA1LjIKICAtIGN5Z3dpbiAgICAgIGZvciBDeWd3aW4KICAtIGdlbmVyaWMgICAgIGZvciBhbnkgb3RoZXIgT1Mgb3IgdmVyc2lvbi4KICAtIGN1c3RvbSAgICAgIHRvIG1hbnVhbGx5IGFkanVzdCBldmVyeSBzZXR0aW5nCgpZb3UgbWF5IGFsc28gY2hvb3NlIHlvdXIgQ1BVIHRvIGJlbmVmaXQgZnJvbSBzb21lIG9wdGltaXphdGlvbnMuIFRoaXMgaXMKcGFydGljdWxhcmx5IGltcG9ydGFudCBvbiBVbHRyYVNwYXJjIG1hY2hpbmVzLiBGb3IgdGhpcywgeW91IGNhbiBhc3NpZ24Kb25lIG9mIHRoZSBmb2xsb3dpbmcgY2hvaWNlcyB0byB0aGUgQ1BVIHZhcmlhYmxlIDoKCiAgLSBpNjg2IGZvciBpbnRlbCBQZW50aXVtUHJvLCBQZW50aXVtIDIgYW5kIGFib3ZlLCBBTUQgQXRobG9uCiAgLSBpNTg2IGZvciBpbnRlbCBQZW50aXVtLCBBTUQgSzYsIFZJQSBDMy4KICAtIHVsdHJhc3BhcmMgOiBTdW4gVWx0cmFTcGFyYyBJL0lJL0lJSS9JViBwcm9jZXNzb3IKICAtIG5hdGl2ZSA6IHVzZSB0aGUgYnVpbGQgbWFjaGluZSdzIHNwZWNpZmljIHByb2Nlc3NvciBvcHRpbWl6YXRpb25zLiBVc2Ugd2l0aAogICAgZXh0cmVtZSBjYXJlLCBhbmQgbmV2ZXIgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIChrbm93biB0byBicmVhaykuCiAgLSBnZW5lcmljIDogYW55IG90aGVyIHByb2Nlc3NvciBvciBubyBDUFUtc3BlY2lmaWMgb3B0aW1pemF0aW9uLiAoZGVmYXVsdCkKCkFsdGVybmF0aXZlbHksIHlvdSBtYXkganVzdCBzZXQgdGhlIENQVV9DRkxBR1MgdmFsdWUgdG8gdGhlIG9wdGltYWwgR0NDIG9wdGlvbnMKZm9yIHlvdXIgcGxhdGZvcm0uCgpZb3UgbWF5IHdhbnQgdG8gYnVpbGQgc3BlY2lmaWMgdGFyZ2V0IGJpbmFyaWVzIHdoaWNoIGRvIG5vdCBtYXRjaCB5b3VyIG5hdGl2ZQpjb21waWxlcidzIHRhcmdldC4gVGhpcyBpcyBwYXJ0aWN1bGFybHkgdHJ1ZSBvbiA2NC1iaXQgc3lzdGVtcyB3aGVuIHlvdSB3YW50CnRvIGJ1aWxkIGEgMzItYml0IGJpbmFyeS4gVXNlIHRoZSBBUkNIIHZhcmlhYmxlIGZvciB0aGlzIHB1cnBvc2UuIFJpZ2h0IG5vdwppdCBvbmx5IGtub3dzIGFib3V0IGEgZmV3IHg4NiB2YXJpYW50cyAoaTM4NixpNDg2LGk1ODYsaTY4Nix4ODZfNjQpLCB0d28KZ2VuZXJpYyBvbmVzICgzMiw2NCkgYW5kIHNldHMgLW0zMi8tbTY0IGFzIHdlbGwgYXMgLW1hcmNoPTxhcmNoPiBhY2NvcmRpbmdseS4KCklmIHlvdXIgc3lzdGVtIHN1cHBvcnRzIFBDUkUgKFBlcmwgQ29tcGF0aWJsZSBSZWd1bGFyIEV4cHJlc3Npb25zKSwgdGhlbiB5b3UKcmVhbGx5IHNob3VsZCBidWlsZCB3aXRoIGxpYnBjcmUgd2hpY2ggaXMgYmV0d2VlbiAyIGFuZCAxMCB0aW1lcyBmYXN0ZXIgdGhhbgpvdGhlciBsaWJjIGltcGxlbWVudGF0aW9ucy4gUmVnZXggYXJlIHVzZWQgZm9yIGhlYWRlciBwcm9jZXNzaW5nIChkZWxldGlvbiwKcmV3cml0aW5nLCBhbGxvdywgZGVueSkuIFRoZSBvbmx5IGluY29udmVuaWVudCBvZiBsaWJwY3JlIGlzIHRoYXQgaXQgaXMgbm90CnlldCB3aWRlbHkgc3ByZWFkLCBzbyBpZiB5b3UgYnVpbGQgZm9yIG90aGVyIHN5c3RlbXMsIHlvdSBtaWdodCBnZXQgaW50bwp0cm91YmxlIGlmIHRoZXkgZG9uJ3QgaGF2ZSB0aGUgZHluYW1pYyBsaWJyYXJ5LiBJbiB0aGlzIHNpdHVhdGlvbiwgeW91IHNob3VsZApzdGF0aWNhbGx5IGxpbmsgbGlicGNyZSBpbnRvIGhhcHJveHkgc28gdGhhdCBpdCB3aWxsIG5vdCBiZSBuZWNlc3NhcnkgdG8KaW5zdGFsbCBpdCBvbiB0YXJnZXQgc3lzdGVtcy4gQXZhaWxhYmxlIGJ1aWxkIG9wdGlvbnMgZm9yIFBDUkUgYXJlIDoKCiAgLSBVU0VfUENSRT0xIHRvIHVzZSBsaWJwY3JlLCBpbiB3aGF0ZXZlciBmb3JtIGlzIGF2YWlsYWJsZSBvbiB5b3VyIHN5c3RlbQogICAgKHNoYXJlZCBvciBzdGF0aWMpCgogIC0gVVNFX1NUQVRJQ19QQ1JFPTEgdG8gdXNlIGEgc3RhdGljIHZlcnNpb24gb2YgbGlicGNyZSBldmVuIGlmIHRoZSBkeW5hbWljCiAgICBvbmUgaXMgYXZhaWxhYmxlLiBUaGlzIHdpbGwgZW5oYW5jZSBwb3J0YWJpbGl0eS4KCiAgLSB3aXRoIG5vIG9wdGlvbiwgdXNlIHlvdXIgT1MgbGliYydzIHN0YW5kYXJkIHJlZ2V4IGltcGxlbWVudGF0aW9uIChkZWZhdWx0KS4KICAgIFdhcm5pbmchIGdyb3VwIHJlZmVyZW5jZXMgb24gU29sYXJpcyBzZWVtIGJyb2tlbi4gVXNlIHN0YXRpYy1wY3JlIHdoZW5ldmVyCiAgICBwb3NzaWJsZS4KClJlY2VudCBzeXN0ZW1zIGNhbiByZXNvbHZlIElQdjYgaG9zdCBuYW1lcyB1c2luZyBnZXRhZGRyaW5mbygpLiBUaGlzIHByaW1pdGl2ZQppcyBub3QgcHJlc2VudCBpbiBhbGwgbGliY3MgYW5kIGRvZXMgbm90IHdvcmsgaW4gYWxsIG9mIHRoZW0gZWl0aGVyLiBTdXBwb3J0IGluCmdsaWJjIHdhcyBicm9rZW4gYmVmb3JlIDIuMy4gU29tZSBlbWJlZGRlZCBsaWJzIG1heSBub3QgcHJvcGVybHkgd29yayBlaXRoZXIsCnRodXMsIHN1cHBvcnQgaXMgZGlzYWJsZWQgYnkgZGVmYXVsdCwgbWVhbmluZyB0aGF0IHNvbWUgaG9zdCBuYW1lcyB3aGljaCBvbmx5CnJlc29sdmUgYXMgSVB2NiBhZGRyZXNzZXMgd2lsbCBub3QgcmVzb2x2ZSBhbmQgY29uZmlncyBtaWdodCBlbWl0IGFuIGVycm9yCmR1cmluZyBwYXJzaW5nLiBJZiB5b3Uga25vdyB0aGF0IHlvdXIgT1MgbGliYyBoYXMgcmVsaWFibGUgc3VwcG9ydCBmb3IKZ2V0YWRkcmluZm8oKSwgeW91IGNhbiBhZGQgVVNFX0dFVEFERFJJTkZPPTEgb24gdGhlIG1ha2UgY29tbWFuZCBsaW5lIHRvIGVuYWJsZQppdC4gVGhpcyBpcyB0aGUgcmVjb21tZW5kZWQgb3B0aW9uIGZvciBtb3N0IExpbnV4IGRpc3RybyBwYWNrYWdlcnMgc2luY2UgaXQncwp3b3JraW5nIGZpbmUgb24gYWxsIHJlY2VudCBtYWluc3RyZWFtIGRpc3Ryb3MuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZW5hYmxlZCBvbgpTb2xhcmlzIDggYW5kIGFib3ZlLCBhcyBpdCdzIGtub3duIHRvIHdvcmsuCgpJdCBpcyBwb3NzaWJsZSB0byBhZGQgbmF0aXZlIHN1cHBvcnQgZm9yIFNTTCB1c2luZyB0aGUgR05VIG1ha2VmaWxlLCBieSBwYXNzaW5nCiJVU0VfT1BFTlNTTD0xIiBvbiB0aGUgbWFrZSBjb21tYW5kIGxpbmUuIFRoZSBsaWJzc2wgYW5kIGxpYmNyeXB0byB3aWxsCmF1dG9tYXRpY2FsbHkgYmUgbGlua2VkIHdpdGggaGFwcm94eS4gU29tZSBzeXN0ZW1zIGFsc28gcmVxdWlyZSBsaWJ6LCBzbyBpZiB0aGUKYnVpbGQgZmFpbHMgZHVlIHRvIG1pc3Npbmcgc3ltYm9scyBzdWNoIGFzIGRlZmxhdGVJbml0KCksIHRoZW4gdHJ5IGFnYWluIHdpdGgKIkFERExJQj0tbHoiLgoKVG8gbGluayBPcGVuU1NMIHN0YXRpY2FsbHkgYWdhaW5zdCBoYXByb3h5LCBidWlsZCBPcGVuU1NMIHdpdGggdGhlIG5vLXNoYXJlZAprZXl3b3JkIGFuZCBpbnN0YWxsIGl0IHRvIGEgbG9jYWwgZGlyZWN0b3J5LCBzbyB5b3VyIHN5c3RlbSBpcyBub3QgYWZmZWN0ZWQgOgoKICAgICQgZXhwb3J0IFNUQVRJQ0xJQlNTTD0vdG1wL3N0YXRpY2xpYnNzbAogICAgJCAuL2NvbmZpZyAtLXByZWZpeD0kU1RBVElDTElCU1NMIG5vLXNoYXJlZAogICAgJCBtYWtlICYmIG1ha2UgaW5zdGFsbF9zdwoKV2hlbiBidWlsZGluZyBoYXByb3h5LCBwYXNzIHRoYXQgcGF0aCB2aWEgU1NMX0lOQyBhbmQgU1NMX0xJQiB0byBtYWtlIGFuZAppbmNsdWRlIGFkZGl0aW9uYWwgbGlicyB3aXRoIEFERExJQiBpZiBuZWVkZWQgKGluIHRoaXMgY2FzZSBmb3IgZXhhbXBsZSBsaWJkbCk6CgogICAgJCBtYWtlIFRBUkdFVD1saW51eDI2IFVTRV9PUEVOU1NMPTEgU1NMX0lOQz0kU1RBVElDTElCU1NML2luY2x1ZGUgU1NMX0xJQj0kU1RBVElDTElCU1NML2xpYiBBRERMSUI9LWxkbAoKSXQgaXMgYWxzbyBwb3NzaWJsZSB0byBpbmNsdWRlIG5hdGl2ZSBzdXBwb3J0IGZvciBaTElCIHRvIGJlbmVmaXQgZnJvbSBIVFRQCmNvbXByZXNzaW9uLiBGb3IgdGhpcywgcGFzcyAiVVNFX1pMSUI9MSIgb24gdGhlICJtYWtlIiBjb21tYW5kIGxpbmUgYW5kIGVuc3VyZQp0aGF0IHpsaWIgaXMgcHJlc2VudCBvbiB0aGUgc3lzdGVtLgoKQnkgZGVmYXVsdCwgdGhlIERFQlVHIHZhcmlhYmxlIGlzIHNldCB0byAnLWcnIHRvIGVuYWJsZSBkZWJ1ZyBzeW1ib2xzLiBJdCBpcwpub3Qgd2lzZSB0byBkaXNhYmxlIGl0IG9uIHVuY29tbW9uIHN5c3RlbXMsIGJlY2F1c2UgaXQncyBvZnRlbiB0aGUgb25seSB3YXkgdG8KZ2V0IGEgY29tcGxldGUgY29yZSB3aGVuIHlvdSBuZWVkIG9uZS4gT3RoZXJ3aXNlLCB5b3UgY2FuIHNldCBERUJVRyB0byAnLXMnIHRvCnN0cmlwIHRoZSBiaW5hcnkuCgpGb3IgZXhhbXBsZSwgSSB1c2UgdGhpcyB0byBidWlsZCBmb3IgU29sYXJpcyA4IDoKCiAgICAkIG1ha2UgVEFSR0VUPXNvbGFyaXMgQ1BVPXVsdHJhc3BhcmMgVVNFX1NUQVRJQ19QQ1JFPTEKCkFuZCBJIGJ1aWxkIGl0IHRoaXMgd2F5IG9uIE9wZW5CU0Qgb3IgRnJlZUJTRCA6CgogICAgJCBnbWFrZSBUQVJHRVQ9ZnJlZWJzZCBVU0VfUENSRT0xIFVTRV9PUEVOU1NMPTEgVVNFX1pMSUI9MQoKQW5kIG9uIGEgY2xhc3NpYyBMaW51eCB3aXRoIFNTTCBhbmQgWkxJQiBzdXBwb3J0IChlZzogUmVkIEhhdCA1LngpIDoKCiAgICAkIG1ha2UgVEFSR0VUPWxpbnV4MjYgVVNFX1BDUkU9MSBVU0VfT1BFTlNTTD0xIFVTRV9aTElCPTEKCkFuZCBvbiBhIHJlY2VudCBMaW51eCA+PSAyLjYuMjggd2l0aCBTU0wgYW5kIFpMSUIgc3VwcG9ydCA6CgogICAgJCBtYWtlIFRBUkdFVD1saW51eDI2MjggVVNFX1BDUkU9MSBVU0VfT1BFTlNTTD0xIFVTRV9aTElCPTEKCkluIG9yZGVyIHRvIGJ1aWxkIGEgMzItYml0IGJpbmFyeSBvbiBhbiB4ODZfNjQgTGludXggc3lzdGVtIHdpdGggU1NMIHN1cHBvcnQKd2l0aG91dCBzdXBwb3J0IGZvciBjb21wcmVzc2lvbiBidXQgd2hlbiBPcGVuU1NMIHJlcXVpcmVzIFpMSUIgYW55d2F5IDoKCiAgICAkIG1ha2UgVEFSR0VUPWxpbnV4MjYgQVJDSD1pMzg2IFVTRV9PUEVOU1NMPTEgQURETElCPS1segoKVGhlIFNTTCBzdGFjayBzdXBwb3J0cyBzZXNzaW9uIGNhY2hlIHN5bmNocm9uaXphdGlvbiBiZXR3ZWVuIGFsbCBydW5uaW5nCnByb2Nlc3Nlcy4gVGhpcyBpbnZvbHZlcyBzb21lIGF0b21pYyBvcGVyYXRpb25zIGFuZCBzeW5jaHJvbml6YXRpb24gb3BlcmF0aW9ucwp3aGljaCBjb21lIGluIG11bHRpcGxlIGZsYXZvcnMgZGVwZW5kaW5nIG9uIHRoZSBzeXN0ZW0gYW5kIGFyY2hpdGVjdHVyZSA6CgogIEF0b21pYyBvcGVyYXRpb25zIDoKICAgIC0gaW50ZXJuYWwgYXNzZW1ibGVyIHZlcnNpb25zIGZvciB4ODYveDg2XzY0IGFyY2hpdGVjdHVyZXMKCiAgICAtIGdjYyBidWlsdGlucyBmb3Igb3RoZXIgYXJjaGl0ZWN0dXJlcy4gU29tZSBhcmNoaXRlY3R1cmVzIG1pZ2h0IG5vdAogICAgICBiZSBmdWxseSBzdXBwb3J0ZWQgb3IgbWlnaHQgcmVxdWlyZSBhIG1vcmUgcmVjZW50IHZlcnNpb24gb2YgZ2NjLgogICAgICBJZiB5b3VyIGFyY2hpdGVjdHVyZSBpcyBub3Qgc3VwcG9ydGVkLCB5b3Ugd2lsbHkgaGF2ZSB0byBlaXRoZXIgdXNlCiAgICAgIHB0aHJlYWQgaWYgc3VwcG9ydGVkLCBvciB0byBkaXNhYmxlIHRoZSBzaGFyZWQgY2FjaGUuCgogICAgLSBwdGhyZWFkIChwb3NpeCB0aHJlYWRzKS4gUHRocmVhZHMgYXJlIHZlcnkgY29tbW9uIGJ1dCBpbnRlci1wcm9jZXNzCiAgICAgIHN1cHBvcnQgaXMgbm90IHRoYXQgY29tbW9uLCBhbmQgc29tZSBvbGRlciBvcGVyYXRpbmcgc3lzdGVtcyBkaWQgbm90CiAgICAgIHJlcG9ydCBhbiBlcnJvciB3aGVuIGVuYWJsaW5nIG11bHRpLXByb2Nlc3MgbW9kZSwgc28gdGhleSB1c2VkIHRvCiAgICAgIHNpbGVudGx5IGZhaWwsIHBvc3NpYmx5IGNhdXNpbmcgY3Jhc2hlcy4gTGludXgncyBpbXBsZW1lbnRhdGlvbiBpcwogICAgICBmaW5lLiBPcGVuQlNEIGRvZXNuJ3Qgc3VwcG9ydCB0aGVtIGFuZCBkb2Vzbid0IGJ1aWxkLiBGcmVlQlNEIDkgYnVpbGRzCiAgICAgIGFuZCByZXBvcnRzIGFuIGVycm9yIGF0IHJ1bnRpbWUsIHdoaWxlIGNlcnRhaW4gb2xkZXIgdmVyc2lvbnMgbWlnaHQKICAgICAgc2lsZW50bHkgZmFpbC4gUHRocmVhZHMgYXJlIGVuYWJsZWQgdXNpbmcgVVNFX1BUSFJFQURfUFNIQVJFRD0xLgoKICBTeW5jaHJvbml6YXRpb24gb3BlcmF0aW9ucyA6CiAgICAtIGludGVybmFsIHNwaW5sb2NrIDogdGhpcyBtb2RlIGlzIE9TLWluZGVwZW5kYW50LCBsaWdodCBidXQgd2lsbCBub3QKICAgICAgc2NhbGUgd2VsbCB0byBtYW55IHByb2Nlc3Nlcy4gSG93ZXZlciwgYWNjZXNzZXMgdG8gdGhlIHNlc3Npb24gY2FjaGUKICAgICAgYXJlIHJhcmUgZW5vdWdoIHRoYXQgdGhpcyBtb2RlIGNvdWxkIGNlcnRhaW5seSBhbHdheXMgYmUgdXNlZC4gVGhpcwogICAgICBpcyB0aGUgZGVmYXVsdCBtb2RlLgoKICAgIC0gRnV0ZXhlcywgd2hpY2ggYXJlIExpbnV4LXNwZWNpZmljIGhpZ2hseSBzY2FsYWJsZSBsaWdodCB3ZWlnaHQgbXV0ZXhlcwogICAgICBpbXBsZW1lbnRlZCBpbiB1c2VyLXNwYWNlIHdpdGggc29tZSBsaW1pdGVkIGFzc2lzdGFuY2UgZnJvbSB0aGUga2VybmVsLgogICAgICBUaGlzIGlzIHRoZSBkZWZhdWx0IG9uIExpbnV4IDIuNiBhbmQgYWJvdmUgYW5kIGlzIGVuYWJsZWQgYnkgcGFzc2luZwogICAgICBVU0VfRlVURVg9MQoKICAgIC0gcHRocmVhZCAocG9zaXggdGhyZWFkcykuIFNlZSBhYm92ZS4KCklmIG5vbmUgb2YgdGhlc2UgbWVjaGFuaXNtcyBpcyBzdXBwb3J0ZWQgYnkgeW91ciBwbGF0Zm9ybSwgeW91IG1heSBuZWVkIHRvCmJ1aWxkIHdpdGggVVNFX1BSSVZBVEVfQ0FDSEU9MSB0byB0b3RhbGx5IGRpc2FibGUgU1NMIGNhY2hlIHNoYXJpbmcuIFRoZW4KaXQgaXMgYmV0dGVyIG5vdCB0byBydW4gU1NMIG9uIG11bHRpcGxlIHByb2Nlc3Nlcy4KCklmIHlvdSBuZWVkIHRvIHBhc3Mgb3RoZXIgZGVmaW5lcywgaW5jbHVkZXMsIGxpYnJhcmllcywgZXRjLi4uIHRoZW4gcGxlYXNlCmNoZWNrIHRoZSBNYWtlZmlsZSB0byBzZWUgd2hpY2ggb25lcyB3aWxsIGJlIGF2YWlsYWJsZSBpbiB5b3VyIGNhc2UsIGFuZAp1c2UgdGhlIFVTRV8qIHZhcmlhYmxlcyBpbiB0aGUgTWFrZWZpbGUuCgpBSVggNS4zIGlzIGtub3duIHRvIHdvcmsgd2l0aCB0aGUgZ2VuZXJpYyB0YXJnZXQuIEhvd2V2ZXIsIGZvciB0aGUgYmluYXJ5IHRvCmFsc28gcnVuIG9uIDUuMiBvciBlYXJsaWVyLCB5b3UgbmVlZCB0byBidWlsZCB3aXRoIERFRklORT0iLURfTVNHUVNVUFBPUlQiLApvdGhlcndpc2UgX19mZF9zZWxlY3QoKSB3aWxsIGJlIHVzZWQgd2hpbGUgbm90IGJlaW5nIHByZXNlbnQgaW4gdGhlIGxpYmMsIGJ1dAp0aGlzIGlzIGVhc2lseSBhZGRyZXNzZWQgdXNpbmcgdGhlICJhaXg1MiIgdGFyZ2V0LiBJZiB5b3UgZ2V0IGJ1aWxkIGVycm9ycwpiZWNhdXNlIG9mIHN0cmFuZ2Ugc3ltYm9scyBvciBzZWN0aW9uIG1pc21hdGNoZXMsIHNpbXBseSByZW1vdmUgLWcgZnJvbQpERUJVR19DRkxBR1MuCgpZb3UgY2FuIGVhc2lseSBkZWZpbmUgeW91ciBvd24gdGFyZ2V0IHdpdGggdGhlIEdOVSBNYWtlZmlsZS4gVW5rbm93biB0YXJnZXRzCmFyZSBwcm9jZXNzZWQgd2l0aCBubyBkZWZhdWx0IG9wdGlvbiBleGNlcHQgVVNFX1BPTEw9ZGVmYXVsdC4gU28geW91IGNhbiB2ZXJ5CndlbGwgdXNlIHRoYXQgcHJvcGVydHkgdG8gZGVmaW5lIHlvdXIgb3duIHNldCBvZiBvcHRpb25zLiBVU0VfUE9MTCBjYW4gZXZlbiBiZQpkaXNhYmxlZCBieSBzZXR0aW5nIFVTRV9QT0xMPSIiLiBGb3IgZXhhbXBsZSA6CgogICAgJCBnbWFrZSBUQVJHRVQ9dGlueSBVU0VfUE9MTD0iIiBUQVJHRVRfQ0ZMQUdTPS1mb21pdC1mcmFtZS1wb2ludGVyCgoKMikgSG93IHRvIGluc3RhbGwgaXQKLS0tLS0tLS0tLS0tLS0tLS0tLS0KClRvIGluc3RhbGwgaGFwcm94eSwgeW91IGNhbiBlaXRoZXIgY29weSB0aGUgc2luZ2xlIHJlc3VsdGluZyBiaW5hcnkgdG8gdGhlCnBsYWNlIHlvdSB3YW50LCBvciBydW4gOgoKICAgICQgc3VkbyBtYWtlIGluc3RhbGwKCklmIHlvdSdyZSBwYWNrYWdpbmcgaXQgZm9yIGFub3RoZXIgc3lzdGVtLCB5b3UgY2FuIHNwZWNpZnkgaXRzIHJvb3QgZGlyZWN0b3J5CmluIHRoZSB1c3VhbCBERVNURElSIHZhcmlhYmxlLgoKCjMpIEhvdyB0byBzZXQgaXQgdXAKLS0tLS0tLS0tLS0tLS0tLS0tLQoKVGhlcmUgaXMgc29tZSBkb2N1bWVudGF0aW9uIGluIHRoZSBkb2MvIGRpcmVjdG9yeSA6CgogICAgLSBhcmNoaXRlY3R1cmUudHh0IDogdGhpcyBpcyB0aGUgYXJjaGl0ZWN0dXJlIG1hbnVhbC4gSXQgaXMgcXVpdGUgb2xkIGFuZAogICAgICBkb2VzIG5vdCB0ZWxsIGFib3V0IHRoZSBuaWNlIG5ldyBmZWF0dXJlcywgYnV0IGl0J3Mgc3RpbGwgYSBnb29kIHN0YXJ0aW5nCiAgICAgIHBvaW50IHdoZW4geW91IGtub3cgd2hhdCB5b3Ugd2FudCBidXQgZG9uJ3Qga25vdyBob3cgdG8gZG8gaXQuCgogICAgLSBjb25maWd1cmF0aW9uLnR4dCA6IHRoaXMgaXMgdGhlIGNvbmZpZ3VyYXRpb24gbWFudWFsLiBJdCByZWNhbGxzIGEgZmV3CiAgICAgIGVzc2VudGlhbCBIVFRQIGJhc2ljIGNvbmNlcHRzLCBhbmQgZGV0YWlscyBhbGwgdGhlIGNvbmZpZ3VyYXRpb24gZmlsZQogICAgICBzeW50YXggKGtleXdvcmRzLCB1bml0cykuIEl0IGFsc28gZGVzY3JpYmVzIHRoZSBsb2cgYW5kIHN0YXRzIGZvcm1hdC4gSXQKICAgICAgaXMgbm9ybWFsbHkgYWx3YXlzIHVwIHRvIGRhdGUuIElmIHlvdSBzZWUgdGhhdCBzb21ldGhpbmcgaXMgbWlzc2luZyBmcm9tCiAgICAgIGl0LCBwbGVhc2UgcmVwb3J0IGl0IGFzIHRoaXMgaXMgYSBidWcuIFBsZWFzZSBub3RlIHRoYXQgdGhpcyBmaWxlIGlzCiAgICAgIGh1Z2UgYW5kIHRoYXQgaXQncyBnZW5lcmFsbHkgbW9yZSBjb252ZW5pZW50IHRvIHJldmlldyBDeXJpbCBCb2506SdzCiAgICAgIEhUTUwgdHJhbnNsYXRpb24gb25saW5lIGhlcmUgOgoKICAgICAgICAgICBodHRwOi8vY2JvbnRlLmdpdGh1Yi5pby9oYXByb3h5LWRjb252L2NvbmZpZ3VyYXRpb24tMS41Lmh0bWwKCiAgICAtIGhhcHJveHktZW4udHh0IC8gaGFwcm94eS1mci50eHQgOiB0aGVzZSBhcmUgdGhlIG9sZCBvdXRkYXRlZCBkb2NzLiBZb3UKICAgICAgc2hvdWxkIG5ldmVyIG5lZWQgdGhlbS4gSWYgeW91IGRvLCB0aGVuIHBsZWFzZSByZXBvcnQgd2hhdCB5b3UgZGlkbid0CiAgICAgIGZpbmQgaW4gdGhlIG90aGVyIG9uZXMuCgogICAgLSBncGwudHh0IC8gbGdwbC50eHQgOiB0aGUgY29weSBvZiB0aGUgbGljZW5zZXMgY292ZXJpbmcgdGhlIHNvZnR3YXJlLiBTZWUKICAgICAgdGhlICdMSUNFTlNFJyBmaWxlIGF0IHRoZSB0b3AgZm9yIG1vcmUgaW5mb3JtYXRpb24uCgogICAgLSB0aGUgcmVzdCBpcyBtYWlubHkgZm9yIGRldmVsb3BlcnMuCgpUaGVyZSBhcmUgYWxzbyBhIG51bWJlciBvZiBuaWNlIGNvbmZpZ3VyYXRpb24gZXhhbXBsZXMgaW4gdGhlICJleGFtcGxlcyIKZGlyZWN0b3J5IGFzIHdlbGwgYXMgb24gc2V2ZXJhbCBzaXRlcyBhbmQgYXJ0aWNsZXMgb24gdGhlIG5ldCB3aGljaCBhcmUgbGlua2VkCnRvIGZyb20gdGhlIGhhcHJveHkgd2ViIHNpdGUuCgoKNCkgSG93IHRvIHJlcG9ydCBhIGJ1ZwotLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgpJdCBpcyBwb3NzaWJsZSB0aGF0IGZyb20gdGltZSB0byB0aW1lIHlvdSdsbCBmaW5kIGEgYnVnLiBBIGJ1ZyBpcyBhIGNhc2Ugd2hlcmUKd2hhdCB5b3Ugc2VlIGlzIG5vdCB3aGF0IGlzIGRvY3VtZW50ZWQuIE90aGVyd2lzZSBpdCBjYW4gYmUgYSBtaXNkZXNpZ24uIElmIHlvdQpmaW5kIHRoYXQgc29tZXRoaW5nIGlzIHN0dXBpZGx5IGRlc2lnbiwgcGxlYXNlIGRpc2N1c3MgaXQgb24gdGhlIGxpc3QgKHNlZSB0aGUKImhvdyB0byBjb250cmlidXRlIiBzZWN0aW9uIGJlbG93KS4gSWYgeW91IGZlZWwgbGlrZSB5b3UncmUgcHJvY2VlZGluZyByaWdodAphbmQgaGFwcm94eSBkb2Vzbid0IG9iZXksIHRoZW4gZmlyc3QgYXNrIHlvdXJzZWxmIGlmIGl0IGlzIHBvc3NpYmxlIHRoYXQgbm9ib2R5CmJlZm9yZSB5b3UgaGFzIGV2ZW4gZW5jb3VudGVyZWQgdGhpcyBpc3N1ZS4gSWYgaXQncyB1bmxpa2VseSwgdGhlIHlvdSBwcm9iYWJseQpoYXZlIGFuIGlzc3VlIGluIHlvdXIgc2V0dXAuIEp1c3QgaW4gY2FzZSBvZiBkb3VidCwgcGxlYXNlIGNvbnN1bHQgdGhlIG1haWxpbmcKbGlzdCBhcmNoaXZlcyA6CgogICAgICAgICAgICAgICAgICAgICAgICBodHRwOi8vbWFyYy5pbmZvLz9sPWhhcHJveHkKCk90aGVyd2lzZSwgcGxlYXNlIHRyeSB0byBnYXRoZXIgdGhlIG1heGltdW0gYW1vdW50IG9mIGluZm9ybWF0aW9uIHRvIGhlbHAKcmVwcm9kdWNlIHRoZSBpc3N1ZSBhbmQgc2VuZCB0aGF0IHRvIHRoZSBtYWlsaW5nIGxpc3QgOgoKICAgICAgICAgICAgICAgICAgICAgICAgaGFwcm94eUBmb3JtaWx1eC5vcmcKClBsZWFzZSBpbmNsdWRlIHlvdXIgY29uZmlndXJhdGlvbiBhbmQgbG9ncy4gWW91IGNhbiBtYXNrIHlvdXIgSVAgYWRkcmVzc2VzIGFuZApwYXNzd29yZHMsIHdlIGRvbid0IG5lZWQgdGhlbS4gQnV0IGl0J3MgZXNzZW50aWFsIHRoYXQgeW91IHBvc3QgeW91ciBjb25maWcgaWYKeW91IHdhbnQgcGVvcGxlIHRvIGd1ZXNzIHdoYXQgaXMgaGFwcGVuaW5nLgoKQWxzbywga2VlcCBpbiBtaW5kIHRoYXQgaGFwcm94eSBpcyBkZXNpZ25lZCB0byBORVZFUiBDUkFTSC4gSWYgeW91IHNlZSBpdCBkaWUKd2l0aG91dCBhbnkgcmVhc29uLCB0aGVuIGl0IGRlZmluaXRlbHkgaXMgYSBjcml0aWNhbCBidWcgdGhhdCBtdXN0IGJlIHJlcG9ydGVkCmFuZCB1cmdlbnRseSBmaXhlZC4gSXQgaGFzIGhhcHBlbmVkIGEgY291cGxlIG9mIHRpbWVzIGluIHRoZSBwYXN0LCBlc3NlbnRpYWxseQpvbiBkZXZlbG9wbWVudCB2ZXJzaW9ucyBydW5uaW5nIG9uIG5ldyBhcmNoaXRlY3R1cmVzLiBJZiB5b3UgdGhpbmsgeW91ciBzZXR1cAppcyBmYWlybHkgY29tbW9uLCB0aGVuIGl0IGlzIHBvc3NpYmxlIHRoYXQgdGhlIGlzc3VlIGlzIHRvdGFsbHkgdW5yZWxhdGVkLgpBbnl3YXksIGlmIHRoYXQgaGFwcGVucywgZmVlbCBmcmVlIHRvIGNvbnRhY3QgbWUgZGlyZWN0bHksIGFzIEkgd2lsbCBnaXZlIHlvdQppbnN0cnVjdGlvbnMgb24gaG93IHRvIGNvbGxlY3QgYSB1c2FibGUgY29yZSBmaWxlLCBhbmQgd2lsbCBwcm9iYWJseSBhc2sgZm9yCm90aGVyIGNhcHR1cmVzIHRoYXQgeW91J2xsIG5vdCB3YW50IHRvIHNoYXJlIHdpdGggdGhlIGxpc3QuCgoKNSkgSG93IHRvIGNvbnRyaWJ1dGUKLS0tLS0tLS0tLS0tLS0tLS0tLS0KClBsZWFzZSBjYXJlZnVsbHkgcmVhZCB0aGUgQ09OVFJJQlVUSU5HIGZpbGUgdGhhdCBjb21lcyB3aXRoIHRoZSBzb3VyY2VzLiBJdCBpcwptYW5kYXRvcnkuCgotLSBlbmQK