TGludXgqIEJhc2UgRHJpdmVyIGZvciBJbnRlbChSKSBFdGhlcm5ldCBOZXR3b3JrIENvbm5lY3Rpb24KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KCk1hcmNoIDUsIDIwMTIKCkNvbnRlbnRzCj09PT09PT09CgotIEluIFRoaXMgUmVsZWFzZQotIElkZW50aWZ5aW5nIFlvdXIgQWRhcHRlcgotIEJ1aWxkaW5nIGFuZCBJbnN0YWxsYXRpb24KLSBDb21tYW5kIExpbmUgUGFyYW1ldGVycwotIEFkZGl0aW9uYWwgQ29uZmlndXJhdGlvbnMKLSBLbm93biBJc3N1ZXMvVHJvdWJsZXNob290aW5nCi0gU3VwcG9ydAoKSW4gVGhpcyBSZWxlYXNlCj09PT09PT09PT09PT09PQoKVGhpcyBmaWxlIGRlc2NyaWJlcyB0aGUgaWdiIExpbnV4KiBCYXNlIERyaXZlciBmb3IgSW50ZWwgRXRoZXJuZXQgTmV0d29yayAKQ29ubmVjdGlvbi4gIFRoaXMgZHJpdmVyIHN1cHBvcnRzIGtlcm5lbCB2ZXJzaW9ucyAyLjQueCBhbmQgMi42LnguIAoKVGhpcyBkcml2ZXIgaXMgb25seSBzdXBwb3J0ZWQgYXMgYSBsb2FkYWJsZSBtb2R1bGUgYXQgdGhpcyB0aW1lLiAgSW50ZWwgaXMKbm90IHN1cHBseWluZyBwYXRjaGVzIGFnYWluc3QgdGhlIGtlcm5lbCBzb3VyY2UgdG8gYWxsb3cgZm9yIHN0YXRpYyBsaW5raW5nCm9mIHRoZSBkcml2ZXIuICBGb3IgcXVlc3Rpb25zIHJlbGF0ZWQgdG8gaGFyZHdhcmUgcmVxdWlyZW1lbnRzLCByZWZlciB0byB0aGUKZG9jdW1lbnRhdGlvbiBzdXBwbGllZCB3aXRoIHlvdXIgSW50ZWwgR2lnYWJpdCBhZGFwdGVyLiAgQWxsIGhhcmR3YXJlCnJlcXVpcmVtZW50cyBsaXN0ZWQgYXBwbHkgdG8gdXNlIHdpdGggTGludXguCgpUaGUgZm9sbG93aW5nIGZlYXR1cmVzIGFyZSBub3cgYXZhaWxhYmxlIGluIHN1cHBvcnRlZCBrZXJuZWxzOgogLSBOYXRpdmUgVkxBTnMKIC0gQ2hhbm5lbCBCb25kaW5nICh0ZWFtaW5nKQogLSBTTk1QCgpDaGFubmVsIEJvbmRpbmcgZG9jdW1lbnRhdGlvbiBjYW4gYmUgZm91bmQgaW4gdGhlIExpbnV4IGtlcm5lbCBzb3VyY2U6Ci9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvYm9uZGluZy50eHQKClRoZSBpZ2IgZHJpdmVyIHN1cHBvcnRzIElFRUUgMTU4OCB0aW1lIHN0YW1waW5nIGZvciBrZXJuZWxzIDIuNi4zMCBhbmQgYWJvdmUuICAKClRoZSBkcml2ZXIgaW5mb3JtYXRpb24gcHJldmlvdXNseSBkaXNwbGF5ZWQgaW4gdGhlIC9wcm9jIGZpbGVzeXN0ZW0gaXMgbm90CnN1cHBvcnRlZCBpbiB0aGlzIHJlbGVhc2UuICBBbHRlcm5hdGl2ZWx5LCB5b3UgY2FuIHVzZSBldGh0b29sICh2ZXJzaW9uIDEuNgpvciBsYXRlciksIGxzcGNpLCBhbmQgaWZjb25maWcgdG8gb2J0YWluIHRoZSBzYW1lIGluZm9ybWF0aW9uLgoKSW5zdHJ1Y3Rpb25zIG9uIHVwZGF0aW5nIGV0aHRvb2wgY2FuIGJlIGZvdW5kIGluIHRoZSBzZWN0aW9uICJBZGRpdGlvbmFsCkNvbmZpZ3VyYXRpb25zIiBsYXRlciBpbiB0aGlzIGRvY3VtZW50LgoKSWRlbnRpZnlpbmcgWW91ciBBZGFwdGVyCj09PT09PT09PT09PT09PT09PT09PT09PQoKRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gaG93IHRvIGlkZW50aWZ5IHlvdXIgYWRhcHRlciwgZ28gdG8gdGhlIEFkYXB0ZXIgJgpEcml2ZXIgSUQgR3VpZGUgYXQ6CgogICAgaHR0cDovL3N1cHBvcnQuaW50ZWwuY29tL3N1cHBvcnQvZ28vbmV0d29yay9hZGFwdGVyL2lkZ3VpZGUuaHRtCgpGb3IgdGhlIGxhdGVzdCBJbnRlbCBuZXR3b3JrIGRyaXZlcnMgZm9yIExpbnV4LCByZWZlciB0byB0aGUgZm9sbG93aW5nCndlYnNpdGUuICBTZWxlY3QgdGhlIGxpbmsgZm9yIHlvdXIgYWRhcHRlci4KCiAgICBodHRwOi8vc3VwcG9ydC5pbnRlbC5jb20vc3VwcG9ydC9nby9uZXR3b3JrL2FkYXB0ZXIvaG9tZS5odG0KCkJ1aWxkaW5nIGFuZCBJbnN0YWxsYXRpb24KPT09PT09PT09PT09PT09PT09PT09PT09PQoKVG8gYnVpbGQgYSBiaW5hcnkgUlBNKiBwYWNrYWdlIG9mIHRoaXMgZHJpdmVyLCBydW4gJ3JwbWJ1aWxkIC10Ygo8ZmlsZW5hbWUudGFyLmd6PicuICBSZXBsYWNlIDxmaWxlbmFtZS50YXIuZ3o+IHdpdGggdGhlIHNwZWNpZmljIGZpbGVuYW1lCm9mIHRoZSBkcml2ZXIuCgpOT1RFOiBGb3IgdGhlIGJ1aWxkIHRvIHdvcmsgcHJvcGVybHksIHRoZSBjdXJyZW50bHkgcnVubmluZyBrZXJuZWwgTVVTVAogICAgICBtYXRjaCB0aGUgdmVyc2lvbiBhbmQgY29uZmlndXJhdGlvbiBvZiB0aGUgaW5zdGFsbGVkIGtlcm5lbCBzb3VyY2VzLgogICAgICBJZiB5b3UgaGF2ZSBqdXN0IHJlY29tcGlsZWQgdGhlIGtlcm5lbCByZWJvb3QgdGhlIHN5c3RlbSBub3cuCgogICAgICBSUE0gZnVuY3Rpb25hbGl0eSBoYXMgb25seSBiZWVuIHRlc3RlZCBpbiBSZWQgSGF0IGRpc3RyaWJ1dGlvbnMuCgoxLiBNb3ZlIHRoZSBiYXNlIGRyaXZlciB0YXIgZmlsZSB0byB0aGUgZGlyZWN0b3J5IG9mIHlvdXIgY2hvaWNlLiAgRm9yCiAgIGV4YW1wbGUsIHVzZSAvaG9tZS91c2VybmFtZS9pZ2Igb3IgL3Vzci9sb2NhbC9zcmMvaWdiLgoKMi4gVW50YXIvdW56aXAgYXJjaGl2ZToKCiAgICAgdGFyIHp4ZiBpZ2IteC54LngudGFyLmd6CgozLiBDaGFuZ2UgdG8gdGhlIGRyaXZlciBzcmMgZGlyZWN0b3J5OgoKICAgICBjZCBpZ2IteC54Lngvc3JjLwoKNC4gQ29tcGlsZSB0aGUgZHJpdmVyIG1vZHVsZToKCiAgICAgbWFrZSBpbnN0YWxsCgogICBUaGUgYmluYXJ5IHdpbGwgYmUgaW5zdGFsbGVkIGFzOgoKICAgICAvbGliL21vZHVsZXMvPEtFUk5FTCBWRVJTSU9OPi9rZXJuZWwvZHJpdmVycy9uZXQvaWdiL2lnYi5ba11vCgogICBUaGUgaW5zdGFsbCBsb2NhdGlvbnMgbGlzdGVkIGFib3ZlIGFyZSB0aGUgZGVmYXVsdCBsb2NhdGlvbnMuICBUaGV5CiAgIG1pZ2h0IG5vdCBiZSBjb3JyZWN0IGZvciBjZXJ0YWluIExpbnV4IGRpc3RyaWJ1dGlvbnMuICAKCjUuIExvYWQgdGhlIG1vZHVsZSB1c2luZyBlaXRoZXIgdGhlIGluc21vZCBvciBtb2Rwcm9iZSBjb21tYW5kOgoKICAgICBtb2Rwcm9iZSBpZ2IKCiAgICAgaW5zbW9kIGlnYgoKICAgTm90ZSB0aGF0IGZvciAyLjYga2VybmVscyB0aGUgaW5zbW9kIGNvbW1hbmQgY2FuIGJlIHVzZWQgaWYgdGhlIGZ1bGwKICAgcGF0aCB0byB0aGUgZHJpdmVyIG1vZHVsZSBpcyBzcGVjaWZpZWQuICBGb3IgZXhhbXBsZToKCiAgICAgaW5zbW9kIC9saWIvbW9kdWxlcy88S0VSTkVMIFZFUlNJT04+L2tlcm5lbC9kcml2ZXJzL25ldC9pZ2IvaWdiLmtvCgogICBXaXRoIDIuNiBiYXNlZCBrZXJuZWxzIGFsc28gbWFrZSBzdXJlIHRoYXQgb2xkZXIgaWdiIGRyaXZlcnMgYXJlCiAgIHJlbW92ZWQgZnJvbSB0aGUga2VybmVsLCBiZWZvcmUgbG9hZGluZyB0aGUgbmV3IG1vZHVsZToKCiAgICAgcm1tb2QgaWdiOyBtb2Rwcm9iZSBpZ2IKCjYuIEFzc2lnbiBhbiBJUCBhZGRyZXNzIHRvIHRoZSBpbnRlcmZhY2UgYnkgZW50ZXJpbmcgdGhlIGZvbGxvd2luZywgd2hlcmUKICAgeCBpcyB0aGUgaW50ZXJmYWNlIG51bWJlcjoKCiAgICAgaWZjb25maWcgZXRoeCA8SVBfYWRkcmVzcz4KCjcuIFZlcmlmeSB0aGF0IHRoZSBpbnRlcmZhY2Ugd29ya3MuICBFbnRlciB0aGUgZm9sbG93aW5nLCB3aGVyZSA8SVBfYWRkcmVzcz4KICAgaXMgdGhlIElQIGFkZHJlc3MgZm9yIGFub3RoZXIgbWFjaGluZSBvbiB0aGUgc2FtZSBzdWJuZXQgYXMgdGhlCiAgIGludGVyZmFjZSB0aGF0IGlzIGJlaW5nIHRlc3RlZDoKCiAgICAgcGluZyAgPElQX2FkZHJlc3M+CgpUUk9VQkxFU0hPT1RJTkc6IFNvbWUgc3lzdGVtcyBoYXZlIHRyb3VibGUgc3VwcG9ydGluZyBNU0kgYW5kL29yIE1TSS1YIAppbnRlcnJ1cHRzLiBJZiB5b3UgYmVsaWV2ZSB5b3VyIHN5c3RlbSBuZWVkcyB0byBkaXNhYmxlIHRoaXMgc3R5bGUgb2YgCmludGVycnVwdCwgdGhlIGRyaXZlciBjYW4gYmUgYnVpbHQgYW5kIGluc3RhbGxlZCB3aXRoIHRoZSBjb21tYW5kOgoKICAgICBtYWtlIENGTEFHU19FWFRSQT0tRERJU0FCTEVfUENJX01TSSBpbnN0YWxsCgpOb3JtYWxseSB0aGUgZHJpdmVyIHdpbGwgZ2VuZXJhdGUgYW4gaW50ZXJydXB0IGV2ZXJ5IHR3byBzZWNvbmRzLCBzbyBpZiAKeW91IGNhbiBzZWUgdGhhdCB5b3UncmUgbm8gbG9uZ2VyIGdldHRpbmcgaW50ZXJydXB0cyBpbiBjYXQgL3Byb2MvaW50ZXJydXB0cwpmb3IgdGhlIGV0aFggaWdiIGRldmljZSwgdGhlbiB0aGlzIHdvcmthcm91bmQgbWF5IGJlIG5lY2Vzc2FyeS4KClRvIGJ1aWxkIGlnYiBkcml2ZXIgd2l0aCBEQ0E6Ci0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCklmIHlvdXIga2VybmVsIHN1cHBvcnRzIERDQSwgdGhlIGRyaXZlciB3aWxsIGJ1aWxkIGJ5IGRlZmF1bHQgd2l0aCBEQ0EgZW5hYmxlZC4KCkNvbW1hbmQgTGluZSBQYXJhbWV0ZXJzCj09PT09PT09PT09PT09PT09PT09PT09CgpJZiB0aGUgZHJpdmVyIGlzIGJ1aWx0IGFzIGEgbW9kdWxlLCB0aGUgIGZvbGxvd2luZyBvcHRpb25hbCBwYXJhbWV0ZXJzCmFyZSB1c2VkIGJ5IGVudGVyaW5nIHRoZW0gb24gdGhlIGNvbW1hbmQgbGluZSB3aXRoIHRoZSBtb2Rwcm9iZSBjb21tYW5kCnVzaW5nIHRoaXMgc3ludGF4OgoKICAgICBtb2Rwcm9iZSBpZ2IgWzxvcHRpb24+PTxWQUwxPiw8VkFMMj4sLi4uXQoKRm9yIGV4YW1wbGU6CgogICAgIG1vZHByb2JlIGlnYiBJbnRlcnJ1cHRUaHJvdHRsZVJhdGU9MTYwMDAsMTYwMDAKCgpUaGUgZGVmYXVsdCB2YWx1ZSBmb3IgZWFjaCBwYXJhbWV0ZXIgaXMgZ2VuZXJhbGx5IHRoZSByZWNvbW1lbmRlZCBzZXR0aW5nLAp1bmxlc3Mgb3RoZXJ3aXNlIG5vdGVkLgoKTk9URVM6ICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgSW50ZXJydXB0VGhyb3R0bGVSYXRlLAogICAgICAgIHBhcmFtZXRlciwgc2VlIHRoZSBhcHBsaWNhdGlvbiBub3RlIGF0OgogICAgICAgIGh0dHA6Ly93d3cuaW50ZWwuY29tL2Rlc2lnbi9uZXR3b3JrL2FwcGxub3RzL2FwNDUwLmh0bQoKICAgICAgICBBIGRlc2NyaXB0b3IgZGVzY3JpYmVzIGEgZGF0YSBidWZmZXIgYW5kIGF0dHJpYnV0ZXMgcmVsYXRlZCB0bwogICAgICAgIHRoZSBkYXRhIGJ1ZmZlci4gIFRoaXMgaW5mb3JtYXRpb24gaXMgYWNjZXNzZWQgYnkgdGhlIGhhcmR3YXJlLgoKSW50ZXJydXB0VGhyb3R0bGVSYXRlCi0tLS0tLS0tLS0tLS0tLS0tLS0tLQpWYWxpZCBSYW5nZTogICAwLDEsMywxMDAtMTAwMDAwICgwPW9mZiwgMT1keW5hbWljLCAzPWR5bmFtaWMgY29uc2VydmF0aXZlKQpEZWZhdWx0IFZhbHVlOiAzCgpUaGUgZHJpdmVyIGNhbiBsaW1pdCB0aGUgYW1vdW50IG9mIGludGVycnVwdHMgcGVyIHNlY29uZCB0aGF0IHRoZSBhZGFwdGVyCndpbGwgZ2VuZXJhdGUgZm9yIGluY29taW5nIHBhY2tldHMuIEl0IGRvZXMgdGhpcyBieSB3cml0aW5nIGEgdmFsdWUgdG8gdGhlIAphZGFwdGVyIHRoYXQgaXMgYmFzZWQgb24gdGhlIG1heGltdW0gYW1vdW50IG9mIGludGVycnVwdHMgdGhhdCB0aGUgYWRhcHRlciAKd2lsbCBnZW5lcmF0ZSBwZXIgc2Vjb25kLgoKU2V0dGluZyBJbnRlcnJ1cHRUaHJvdHRsZVJhdGUgdG8gYSB2YWx1ZSBncmVhdGVyIG9yIGVxdWFsIHRvIDEwMAp3aWxsIHByb2dyYW0gdGhlIGFkYXB0ZXIgdG8gc2VuZCBvdXQgYSBtYXhpbXVtIG9mIHRoYXQgbWFueSBpbnRlcnJ1cHRzCnBlciBzZWNvbmQsIGV2ZW4gaWYgbW9yZSBwYWNrZXRzIGhhdmUgY29tZSBpbi4gVGhpcyByZWR1Y2VzIGludGVycnVwdApsb2FkIG9uIHRoZSBzeXN0ZW0gYW5kIGNhbiBsb3dlciBDUFUgdXRpbGl6YXRpb24gdW5kZXIgaGVhdnkgbG9hZCwKYnV0IHdpbGwgaW5jcmVhc2UgbGF0ZW5jeSBhcyBwYWNrZXRzIGFyZSBub3QgcHJvY2Vzc2VkIGFzIHF1aWNrbHkuCgpUaGUgZGVmYXVsdCBiZWhhdmlvdXIgb2YgdGhlIGRyaXZlciBwcmV2aW91c2x5IGFzc3VtZWQgYSBzdGF0aWMgCkludGVycnVwdFRocm90dGxlUmF0ZSB2YWx1ZSBvZiA4MDAwLCBwcm92aWRpbmcgYSBnb29kIGZhbGxiYWNrIHZhbHVlIGZvciAKYWxsIHRyYWZmaWMgdHlwZXMsYnV0IGxhY2tpbmcgaW4gc21hbGwgcGFja2V0IHBlcmZvcm1hbmNlIGFuZCBsYXRlbmN5LiAKVGhlIGhhcmR3YXJlIGNhbiBoYW5kbGUgbWFueSBtb3JlIHNtYWxsIHBhY2tldHMgcGVyIHNlY29uZCBob3dldmVyLCBhbmQgCmZvciB0aGlzIHJlYXNvbiBhbiBhZGFwdGl2ZSBpbnRlcnJ1cHQgbW9kZXJhdGlvbiBhbGdvcml0aG0gd2FzIGltcGxlbWVudGVkLgoKVGhlIGRyaXZlciBoYXMgdHdvIGFkYXB0aXZlIG1vZGVzIChzZXR0aW5nIDEgb3IgMykgaW4gd2hpY2ggaXQgZHluYW1pY2FsbHkKYWRqdXN0cyB0aGUgSW50ZXJydXB0VGhyb3R0bGVSYXRlIHZhbHVlIGJhc2VkIG9uIHRoZSB0cmFmZmljIHRoYXQgaXQgcmVjZWl2ZXMuCkFmdGVyIGRldGVybWluaW5nIHRoZSB0eXBlIG9mIGluY29taW5nIHRyYWZmaWMgaW4gdGhlIGxhc3QgdGltZWZyYW1lLCBpdCB3aWxsCmFkanVzdCB0aGUgSW50ZXJydXB0VGhyb3R0bGVSYXRlIHRvIGFuIGFwcHJvcHJpYXRlIHZhbHVlIGZvciB0aGF0IHRyYWZmaWMuCgpUaGUgYWxnb3JpdGhtIGNsYXNzaWZpZXMgdGhlIGluY29taW5nIHRyYWZmaWMgZXZlcnkgaW50ZXJ2YWwgaW50bwpjbGFzc2VzLiAgT25jZSB0aGUgY2xhc3MgaXMgZGV0ZXJtaW5lZCwgdGhlIEludGVycnVwdFRocm90dGxlUmF0ZSB2YWx1ZSBpcyAKYWRqdXN0ZWQgdG8gc3VpdCB0aGF0IHRyYWZmaWMgdHlwZSB0aGUgYmVzdC4gVGhlcmUgYXJlIHRocmVlIGNsYXNzZXMgZGVmaW5lZDogCiJCdWxrIHRyYWZmaWMiLCBmb3IgbGFyZ2UgYW1vdW50cyBvZiBwYWNrZXRzIG9mIG5vcm1hbCBzaXplOyAiTG93IGxhdGVuY3kiLApmb3Igc21hbGwgYW1vdW50cyBvZiB0cmFmZmljIGFuZC9vciBhIHNpZ25pZmljYW50IHBlcmNlbnRhZ2Ugb2Ygc21hbGwKcGFja2V0czsgYW5kICJMb3dlc3QgbGF0ZW5jeSIsIGZvciBhbG1vc3QgY29tcGxldGVseSBzbWFsbCBwYWNrZXRzIG9yIAptaW5pbWFsIHRyYWZmaWMuCgpJbiBkeW5hbWljIGNvbnNlcnZhdGl2ZSBtb2RlLCB0aGUgSW50ZXJydXB0VGhyb3R0bGVSYXRlIHZhbHVlIGlzIHNldCB0byA0MDAwIApmb3IgdHJhZmZpYyB0aGF0IGZhbGxzIGluIGNsYXNzICJCdWxrIHRyYWZmaWMiLiBJZiB0cmFmZmljIGZhbGxzIGluIHRoZSAiTG93IApsYXRlbmN5IiBvciAiTG93ZXN0IGxhdGVuY3kiIGNsYXNzLCB0aGUgSW50ZXJydXB0VGhyb3R0bGVSYXRlIGlzIGluY3JlYXNlZCAKc3RlcHdpc2UgdG8gMjAwMDAuIFRoaXMgZGVmYXVsdCBtb2RlIGlzIHN1aXRhYmxlIGZvciBtb3N0IGFwcGxpY2F0aW9ucy4KCkZvciBzaXR1YXRpb25zIHdoZXJlIGxvdyBsYXRlbmN5IGlzIHZpdGFsIHN1Y2ggYXMgY2x1c3RlciBvcgpncmlkIGNvbXB1dGluZywgdGhlIGFsZ29yaXRobSBjYW4gcmVkdWNlIGxhdGVuY3kgZXZlbiBtb3JlIHdoZW4KSW50ZXJydXB0VGhyb3R0bGVSYXRlIGlzIHNldCB0byBtb2RlIDEuIEluIHRoaXMgbW9kZSwgd2hpY2ggb3BlcmF0ZXMKdGhlIHNhbWUgYXMgbW9kZSAzLCB0aGUgSW50ZXJydXB0VGhyb3R0bGVSYXRlIHdpbGwgYmUgaW5jcmVhc2VkIHN0ZXB3aXNlIHRvIAo3MDAwMCBmb3IgdHJhZmZpYyBpbiBjbGFzcyAiTG93ZXN0IGxhdGVuY3kiLgoKU2V0dGluZyBJbnRlcnJ1cHRUaHJvdHRsZVJhdGUgdG8gMCB0dXJucyBvZmYgYW55IGludGVycnVwdCBtb2RlcmF0aW9uCmFuZCBtYXkgaW1wcm92ZSBzbWFsbCBwYWNrZXQgbGF0ZW5jeSwgYnV0IGlzIGdlbmVyYWxseSBub3Qgc3VpdGFibGUKZm9yIGJ1bGsgdGhyb3VnaHB1dCB0cmFmZmljLgoKTk9URTogIER5bmFtaWMgaW50ZXJydXB0IHRocm90dGxpbmcgaXMgb25seSBhcHBsaWNhYmxlIHRvIGFkYXB0ZXJzCiAgICAgICBvcGVyYXRpbmcgaW4gTVNJIG9yIExlZ2FjeSBpbnRlcnJ1cHQgbW9kZSwgdXNpbmcgYSBzaW5nbGUKICAgICAgIHJlY2VpdmUgcXVldWUuCgpOT1RFOiAgV2hlbiBpZ2IgaXMgbG9hZGVkIHdpdGggZGVmYXVsdCBzZXR0aW5ncyBhbmQgbXVsdGlwbGUgYWRhcHRlcnMKICAgICAgIGFyZSBpbiB1c2Ugc2ltdWx0YW5lb3VzbHksIHRoZSBDUFUgdXRpbGl6YXRpb24gbWF5IGluY3JlYXNlIG5vbi0KICAgICAgIGxpbmVhcmx5LiAgSW4gb3JkZXIgdG8gbGltaXQgdGhlIENQVSB1dGlsaXphdGlvbiB3aXRob3V0IGltcGFjdGluZwogICAgICAgdGhlIG92ZXJhbGwgdGhyb3VnaHB1dCwgd2UgcmVjb21tZW5kIHRoYXQgeW91IGxvYWQgdGhlIGRyaXZlciBhcwogICAgICAgZm9sbG93czoKCiAgICAgICAgICAgbW9kcHJvYmUgaWdiIEludGVycnVwdFRocm90dGxlUmF0ZT0zMDAwLDMwMDAsMzAwMAoKICAgICAgIFRoaXMgc2V0cyB0aGUgSW50ZXJydXB0VGhyb3R0bGVSYXRlIHRvIDMwMDAgaW50ZXJydXB0cy9zZWMgZm9yCiAgICAgICB0aGUgZmlyc3QsIHNlY29uZCwgYW5kIHRoaXJkIGluc3RhbmNlcyBvZiB0aGUgZHJpdmVyLiAgVGhlIHJhbmdlCiAgICAgICBvZiAyMDAwIHRvIDMwMDAgaW50ZXJydXB0cyBwZXIgc2Vjb25kIHdvcmtzIG9uIGEgbWFqb3JpdHkgb2YKICAgICAgIHN5c3RlbXMgYW5kIGlzIGEgZ29vZCBzdGFydGluZyBwb2ludCwgYnV0IHRoZSBvcHRpbWFsIHZhbHVlIHdpbGwKICAgICAgIGJlIHBsYXRmb3JtLXNwZWNpZmljLiAgSWYgQ1BVIHV0aWxpemF0aW9uIGlzIG5vdCBhIGNvbmNlcm4sIHVzZQogICAgICAgZGVmYXVsdCBkcml2ZXIgc2V0dGluZ3MuCgpMTEkgKExvdyBMYXRlbmN5IEludGVycnVwdHMpCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gCkxMSSBhbGxvd3MgZm9yIGltbWVkaWF0ZSBnZW5lcmF0aW9uIG9mIGFuIGludGVycnVwdCB1cG9uIHByb2Nlc3NpbmcgcmVjZWl2ZSAKcGFja2V0cyB0aGF0IG1hdGNoIGNlcnRhaW4gY3JpdGVyaWEgYXMgc2V0IGJ5IHRoZSBwYXJhbWV0ZXJzIGRlc2NyaWJlZCBiZWxvdy4gCkxMSSBwYXJhbWV0ZXJzIGFyZSBub3QgZW5hYmxlZCB3aGVuIExlZ2FjeSBpbnRlcnJ1cHRzIGFyZSB1c2VkLiBZb3UgbXVzdCBiZSAKdXNpbmcgTVNJIG9yIE1TSS1YIChzZWUgY2F0IC9wcm9jL2ludGVycnVwdHMpIHRvIHN1Y2Nlc3NmdWxseSB1c2UgTExJLgoKTExJUG9ydAotLS0tLS0tClZhbGlkIFJhbmdlOiAgIDAtNjU1MzUKRGVmYXVsdCBWYWx1ZTogMCAoZGlzYWJsZWQpCgpMTEkgaXMgY29uZmlndXJlZCB3aXRoIHRoZSBMTElQb3J0IGNvbW1hbmQtbGluZSBwYXJhbWV0ZXIsIHdoaWNoIHNwZWNpZmllcyAKd2hpY2ggVENQIHBvcnQgc2hvdWxkIGdlbmVyYXRlIExvdyBMYXRlbmN5IEludGVycnVwdHMuCgpGb3IgZXhhbXBsZSwgdXNpbmcgTExJUG9ydD04MCB3b3VsZCBjYXVzZSB0aGUgYm9hcmQgdG8gZ2VuZXJhdGUgYW4gCmltbWVkaWF0ZSBpbnRlcnJ1cHQgdXBvbiByZWNlaXB0IG9mIGFueSBwYWNrZXQgc2VudCB0byBUQ1AgcG9ydCA4MCBvbiB0aGUgCmxvY2FsIG1hY2hpbmUuCgpXQVJOSU5HOiBFbmFibGluZyBMTEkgY2FuIHJlc3VsdCBpbiBhbiBleGNlc3NpdmUgbnVtYmVyIG9mIGludGVycnVwdHMvc2Vjb25kIAp0aGF0IG1heSBjYXVzZSBwcm9ibGVtcyB3aXRoIHRoZSBzeXN0ZW0gYW5kIGluIHNvbWUgY2FzZXMgbWF5IGNhdXNlIGEga2VybmVsIApwYW5pYy4gCgpMTElQdXNoCi0tLS0tLS0KVmFsaWQgUmFuZ2U6ICAgMC0xCkRlZmF1bHQgVmFsdWU6IDAgKGRpc2FibGVkKQoKQ2FuIGJlIHNldCB0byBiZSBlbmFibGVkIG9yIGRpc2FibGVkIChkZWZhdWx0KS4gSXQgaXMgbW9zdCAKZWZmZWN0aXZlIGluIGFuIGVudmlyb25tZW50IHdpdGggbWFueSBzbWFsbCB0cmFuc2FjdGlvbnMuCk5PVEU6IEVuYWJsaW5nIExMSVB1c2ggbWF5IGFsbG93IGEgZGVuaWFsIG9mIHNlcnZpY2UgYXR0YWNrLgoKTExJU2l6ZQotLS0tLS0tClZhbGlkIFJhbmdlOiAgIDAtMTUwMApEZWZhdWx0IFZhbHVlOiAwIChkaXNhYmxlZCkKCkNhdXNlcyBhbiBpbW1lZGlhdGUgaW50ZXJydXB0IGlmIHRoZSBib2FyZCByZWNlaXZlcyBhIHBhY2tldCBzbWFsbGVyIAp0aGFuIHRoZSBzcGVjaWZpZWQgc2l6ZS4KCkludE1vZGUKLS0tLS0tLQpWYWxpZCBSYW5nZTogMCAtIDIgKDAgPSBMZWdhY3kgSW50LCAxID0gTVNJIGFuZCAyID0gTVNJLVgpCkRlZmF1bHQgVmFsdWU6IDIKCkludE1vZGUgY29udHJvbHMgYWxsb3cgbG9hZCB0aW1lIGNvbnRyb2wgb3ZlciB0aGUgdHlwZSBvZiBpbnRlcnJ1cHQKcmVnaXN0ZXJlZCBmb3IgYnkgdGhlIGRyaXZlci4gIE1TSS1YIGlzIHJlcXVpcmVkIGZvciBtdWx0aXBsZSBxdWV1ZQpzdXBwb3J0LCBhbmQgc29tZSBrZXJuZWxzIGFuZCBjb21iaW5hdGlvbnMgb2Yga2VybmVsIC5jb25maWcgb3B0aW9ucyB3aWxsCmZvcmNlIGEgbG93ZXIgbGV2ZWwgb2YgaW50ZXJydXB0IHN1cHBvcnQuICAnY2F0IC9wcm9jL2ludGVycnVwdHMnIHdpbGwgc2hvdwpkaWZmZXJlbnQgdmFsdWVzIGZvciBlYWNoIHR5cGUgb2YgaW50ZXJydXB0LgoKUlNTCi0tLQpWYWxpZCBSYW5nZTogICAwLTgKRGVmYXVsdCBWYWx1ZTogMQoKMCAtIEFzc2lnbiB1cCB0byB3aGljaGV2ZXIgaXMgbGVzcywgbnVtYmVyIG9mIENQVVMgb3IgbnVtYmVyIG9mIHF1ZXVlcwpYIC0gQXNzaWduIFggcXVldWVzIHdoZXJlIFggaXMgbGVzcyB0aGFuIHRoZSBtYXhpbXVtIG51bWJlciBvZiBxdWV1ZXMKCk5vdGU6IGZvciA4MjU3NS1iYXNlZCBhZGFwdGVycyB0aGUgbWF4aW11bSBudW1iZXIgb2YgcXVldWVzIGlzIDQ7IGZvciAKODI1NzYtYmFzZWQgYW5kIG5ld2VyIGFkYXB0ZXJzIGl0IGlzIDguCgpUaGlzIHBhcmFtZXRlciBpcyBhbHNvIGFmZmVjdGVkIGJ5IHRoZSBWTURxIHBhcmFtZXRlciBpbiB0aGF0IGl0IHdpbGwgbGltaXQgdGhlCnF1ZXVlcyBtb3JlLgoKICAgICAgVk1EUQpNb2RlbCAwICAxICAyICAzKwo4MjU3NSA0ICA0ICAzICAxCjgyNTc2IDggIDIgIDIgIDIKODI1ODAgOCAgMSAgMSAgMQoKVk1EUQotLS0tClZhbGlkIFJhbmdlOiAgMCAtIDQgb24gODI1NzUtYmFzZWQgYWRhcHRlcnM7IGFuZCAwIC0gOCBmb3IgODI1NzYvODI1ODAtYmFzZWQgCmFkYXB0ZXJzLgpEZWZhdWx0IFZhbHVlOiAwCgpTdXBwb3J0cyBlbmFibGluZyBWTURxIHBvb2xzIGFzIHRoaXMgaXMgbmVlZGVkIHRvIHN1cHBvcnQgU1ItSU9WLgoKMCAtIGRpc2FibGVkCjEgLSBzZXRzIHRoZSBuZXRkZXYgYXMgcG9vbCAwCjIrIC0gYWRkIGFkZGl0aW9uYWwgcXVldWVzIGJ1dCB0aGV5IGN1cnJlbnRseSBhcmUgbm90IHVzZWQuCgpUaGlzIHBhcmFtZXRlciBpcyBmb3JjZWQgdG8gMSBvciBtb3JlIGlmIHRoZSBtYXhfdmZzIG1vZHVsZSBwYXJhbWV0ZXIgaXMgdXNlZC4gCkluIGFkZGl0aW9uIHRoZSBudW1iZXIgb2YgcXVldWVzIGF2YWlsYWJsZSBmb3IgUlNTIGlzIGxpbWl0ZWQgaWYgdGhpcyBpcyBzZXQgdG8KMSBvciBncmVhdGVyLgogCm1heF92ZnMKLS0tLS0tLQpWYWxpZCBSYW5nZTogICAwLTcKRGVmYXVsdCBWYWx1ZTogMAoKSWYgdGhlIHZhbHVlIGlzIGdyZWF0ZXIgdGhhbiAwIGl0IHdpbGwgYWxzbyBmb3JjZSB0aGUgVk1EcSBwYXJhbWV0ZXIgdG8gYmUgMSAKb3IgbW9yZS4KClRoaXMgcGFyYW1ldGVyIGFkZHMgc3VwcG9ydCBmb3IgU1ItSU9WLiAgSXQgY2F1c2VzIHRoZSBkcml2ZXIgdG8gc3Bhd24gdXAgdG8gCm1heF92ZnMgd29ydGggb2YgdmlydHVhbCBmdW5jdGlvbi4gIAoKUXVldWVQYWlycwotLS0tLS0tLS0tClZhbGlkIFJhbmdlOiAgMC0xCkRlZmF1bHQgVmFsdWU6ICAxIChUWCBhbmQgUlggd2lsbCBiZSBwYWlyZWQgb250byBvbmUgaW50ZXJydXB0IHZlY3RvcikKCklmIHNldCB0byAwLCB3aGVuIE1TSS1YIGlzIGVuYWJsZWQsIHRoZSBUWCBhbmQgUlggd2lsbCBhdHRlbXB0IHRvIG9jY3VweQpzZXBhcmF0ZSB2ZWN0b3JzLiAgICAKClRoaXMgb3B0aW9uIGNhbiBiZSBvdmVycmlkZGVuIHRvIDEgaWYgdGhlcmUgYXJlIG5vdCBzdWZmaWNpZW50IGludGVycnVwdHMKYXZhaWxhYmxlLiAgVGhpcyBjYW4gb2NjdXIgaWYgYW55IGNvbWJpbmF0aW9uIG9mIFJTUywgVk1EUSwgYW5kIG1heF92ZnMgCnJlc3VsdHMgaW4gbW9yZSB0aGFuIDQgcXVldWVzIGJlaW5nIHVzZWQuCgpOb2RlCi0tLS0KVmFsaWQgUmFuZ2U6ICAgMC1uCkRlZmF1bHQgVmFsdWU6IC0xIChvZmYpCgogIDAgLSBuOiB3aGVyZSBuIGlzIHRoZSBudW1iZXIgb2YgdGhlIE5VTUEgbm9kZSB0aGF0IHNob3VsZCBiZSB1c2VkIHRvIAogICAgICAgICBhbGxvY2F0ZSBtZW1vcnkgZm9yIHRoaXMgYWRhcHRlciBwb3J0LiAKICAtMTogdXNlcyB0aGUgZHJpdmVyIGRlZmF1bHQgb2YgYWxsb2NhdGluZyBtZW1vcnkgb24gd2hpY2hldmVyIHByb2Nlc3NvciBpcwogICAgICBydW5uaW5nIGluc21vZC9tb2Rwcm9iZS4gCgpUaGUgTm9kZSBwYXJhbWV0ZXIgd2lsbCBhbGxvdyB5b3UgdG8gcGljayB3aGljaCBOVU1BIG5vZGUgeW91IHdhbnQgdG8gaGF2ZSB0aGUKYWRhcHRlciBhbGxvY2F0ZSBtZW1vcnkgZnJvbS4gIEFsbCBkcml2ZXIgc3RydWN0dXJlcywgaW4tbWVtb3J5IHF1ZXVlcywgYW5kIApyZWNlaXZlIGJ1ZmZlcnMgd2lsbCBiZSBhbGxvY2F0ZWQgb24gdGhlIG5vZGUgc3BlY2lmaWVkLiAgVGhpcyBwYXJhbWV0ZXIgaXMKb25seSB1c2VmdWwgd2hlbiBpbnRlcnJ1cHQgYWZmaW5pdHkgaXMgc3BlY2lmaWVkLCBvdGhlcndpc2Ugc29tZSBwb3J0aW9uIG9mIHRoZQp0aW1lIHRoZSBpbnRlcnJ1cHQgY291bGQgcnVuIG9uIGEgZGlmZmVyZW50IGNvcmUgdGhhbiB0aGUgbWVtb3J5IGlzIGFsbG9jYXRlZCAKb24sIGNhdXNpbmcgc2xvd2VyIG1lbW9yeSBhY2Nlc3MgYW5kIGltcGFjdGluZyB0aHJvdWdocHV0LCBDUFUsIG9yIGJvdGguCgpFRUUKLS0tClZhbGlkIFJhbmdlOiAgMC0xCkRlZmF1bHQgVmFsdWU6IDEgKGVuYWJsZWQpCgpBIGxpbmsgYmV0d2VlbiB0d28gRUVFLWNvbXBsaWFudCBkZXZpY2VzIHdpbGwgcmVzdWx0IGluIHBlcmlvZGljIGJ1cnN0cyBvZiAKZGF0YSBmb2xsb3dlZCBieSBwZXJpb2RzIHdoZXJlIHRoZSBsaW5rIGlzIGluIGFuIGlkbGUgc3RhdGUuIFRoaXMgTG93ClBvd2VyIElkbGUgKExQSSkgc3RhdGUgaXMgc3VwcG9ydGVkIGluIGJvdGggMUdicHMgYW5kIDEwME1icHMgbGluayBzcGVlZHMuIApOT1RFOiBFRUUgc3VwcG9ydCByZXF1aXJlcyBhdXRvbmVnb3RpYXRpb24uCgpETUFDCi0tLS0KVmFsaWQgUmFuZ2U6IDAsIDI1MCwgNTAwLCAxMDAwLCAyMDAwLCAzMDAwLCA0MDAwLCA1MDAwLCA2MDAwLCA3MDAwLCA4MDAwLCAKOTAwMCwgMTAwMDAuCkRlZmF1bHQgVmFsdWU6IDAgKGRpc2FibGVkKQogIApFbmFibGVzIG9yIGRpc2FibGVzIERNQSBDb2FsZXNjaW5nIGZlYXR1cmUuIFZhbHVlcyBhcmUgaW4gdXNlY5JzIGFuZCBpbmNyZWFzZQp0aGUgaW50ZXJuYWwgRE1BIENvYWxlc2NpbmcgZmVhdHVyZZJzIGludGVybmFsIHRpbWVyLiAgRE1BIChEaXJlY3QgTWVtb3J5IApBY2Nlc3MpIGFsbG93cyB0aGUgbmV0d29yayBkZXZpY2UgdG8gbW92ZSBwYWNrZXQgZGF0YSBkaXJlY3RseSB0byB0aGUgCnN5c3RlbSdzIG1lbW9yeSwgcmVkdWNpbmcgQ1BVIHV0aWxpemF0aW9uLiBIb3dldmVyLCB0aGUgZnJlcXVlbmN5IGFuZCByYW5kb20KaW50ZXJ2YWxzIGF0IHdoaWNoIHBhY2tldHMgYXJyaXZlIGRvIG5vdCBhbGxvdyB0aGUgc3lzdGVtIHRvIGVudGVyIGEgbG93ZXIgCnBvd2VyIHN0YXRlLiBETUEgQ29hbGVzY2luZyBhbGxvd3MgdGhlIGFkYXB0ZXIgdG8gY29sbGVjdCBwYWNrZXRzIGJlZm9yZSBpdCAKaW5pdGlhdGVzIGEgRE1BIGV2ZW50LiBUaGlzIG1heSBpbmNyZWFzZSBuZXR3b3JrIGxhdGVuY3kgYnV0IGFsc28gaW5jcmVhc2VzCnRoZSBjaGFuY2VzIHRoYXQgdGhlIHN5c3RlbSB3aWxsIGVudGVyIGEgbG93ZXIgcG93ZXIgc3RhdGUuIAoKVHVybmluZyBvbiBETUEgQ29hbGVzY2luZyBtYXkgc2F2ZSBlbmVyZ3kgd2l0aCBrZXJuZWwgMi42LjMyIGFuZCBsYXRlci4gVGhpcwp3aWxsIGltcGFydCB0aGUgZ3JlYXRlc3QgY2hhbmNlIGZvciB5b3VyIHN5c3RlbSB0byBjb25zdW1lIGxlc3MgcG93ZXIuIERNQSAKQ29hbGVzY2luZyBpcyBlZmZlY3RpdmUgaW4gaGVscGluZyBwb3RlbnRpYWxseSBzYXZpbmcgdGhlIHBsYXRmb3JtIHBvd2VyIG9ubHkKd2hlbiBpdCBpcyBlbmFibGVkIGFjcm9zcyBhbGwgYWN0aXZlIHBvcnRzLgoKSW50ZXJydXB0VGhyb3R0bGVSYXRlIChJVFIpIHNob3VsZCBiZSBzZXQgdG8gZHluYW1pYy4gV2hlbiBJVFI9MCwgRE1BIApDb2FsZXNjaW5nIGlzIGF1dG9tYXRpY2FsbHkgZGlzYWJsZWQuIAogCkEgd2hpdGVwYXBlciBjb250YWluaW5nIGluZm9ybWF0aW9uIG9uIGhvdyB0byBiZXN0IGNvbmZpZ3VyZSB5b3VyIHBsYXRmb3JtIAppcyBhdmFpbGFibGUgb24gdGhlIEludGVsIHdlYnNpdGUuCgpNREQgKE1hbGljaW91cyBEcml2ZXIgRGV0ZWN0aW9uKQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpWYWxpZCBSYW5nZTogMCwgMTsgMCA9IERpc2FibGUsIDEgPSBFbmFibGUKRGVmYXVsdCBWYWx1ZTogMQoKVGhpcyBwYXJhbWV0ZXIgaXMgb25seSByZWxldmFudCBmb3IgSTM1MCBkZXZpY2VzIG9wZXJhdGluZyBpbiBTUi1JT1YgbW9kZS4gV2hlbgp0aGlzIHBhcmFtZXRlciBpcyBzZXQsIHRoZSBkcml2ZXIgZGV0ZWN0cyBtYWxpY2lvdXMgVkYgZHJpdmVyIGFuZCBkaXNhYmxlcyBpdHMKVFgvUlggcXVldWVzIHVudGlsIGEgVkYgZHJpdmVyIHJlc2V0IG9jY3Vycy4KIAoKQWRkaXRpb25hbCBDb25maWd1cmF0aW9ucwo9PT09PT09PT09PT09PT09PT09PT09PT09CgogIENvbmZpZ3VyaW5nIHRoZSBEcml2ZXIgb24gRGlmZmVyZW50IERpc3RyaWJ1dGlvbnMKICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgQ29uZmlndXJpbmcgYSBuZXR3b3JrIGRyaXZlciB0byBsb2FkIHByb3Blcmx5IHdoZW4gdGhlIHN5c3RlbSBpcyBzdGFydGVkCiAgaXMgZGlzdHJpYnV0aW9uIGRlcGVuZGVudC4gIFR5cGljYWxseSwgdGhlIGNvbmZpZ3VyYXRpb24gcHJvY2VzcyBpbnZvbHZlcwogIGFkZGluZyBhbiBhbGlhcyBsaW5lIHRvIC9ldGMvbW9kdWxlcy5jb25mIG9yIC9ldGMvbW9kcHJvYmUuY29uZiBhcyB3ZWxsCiAgYXMgZWRpdGluZyBvdGhlciBzeXN0ZW0gc3RhcnR1cCBzY3JpcHRzIGFuZC9vciBjb25maWd1cmF0aW9uIGZpbGVzLiAgTWFueQogIHBvcHVsYXIgTGludXggZGlzdHJpYnV0aW9ucyBzaGlwIHdpdGggdG9vbHMgdG8gbWFrZSB0aGVzZSBjaGFuZ2VzIGZvciB5b3UuCiAgVG8gbGVhcm4gdGhlIHByb3BlciB3YXkgdG8gY29uZmlndXJlIGEgbmV0d29yayBkZXZpY2UgZm9yIHlvdXIgc3lzdGVtLAogIHJlZmVyIHRvIHlvdXIgZGlzdHJpYnV0aW9uIGRvY3VtZW50YXRpb24uICBJZiBkdXJpbmcgdGhpcyBwcm9jZXNzIHlvdSBhcmUKICBhc2tlZCBmb3IgdGhlIGRyaXZlciBvciBtb2R1bGUgbmFtZSwgdGhlIG5hbWUgZm9yIHRoZSBMaW51eCBCYXNlIERyaXZlcgogIGZvciB0aGUgR2lnYWJpdCBGYW1pbHkgb2YgQWRhcHRlcnMgaXMgaWdiLgoKICBBcyBhbiBleGFtcGxlLCBpZiB5b3UgaW5zdGFsbCB0aGUgaWdiIGRyaXZlciBmb3IgdHdvIEdpZ2FiaXQgYWRhcHRlcnMgCiAgKGV0aDAgYW5kIGV0aDEpIGFuZCB3YW50IHRvIHNldCB0aGUgaW50ZXJydXB0IG1vZGUgdG8gTVNJLVggYW5kIE1TSSAKICByZXNwZWN0aXZlbHksIGFkZCB0aGUgZm9sbG93aW5nIHRvIG1vZHVsZXMuY29uZiBvciAvZXRjL21vZHByb2JlLmNvbmY6CgogICAgICAgYWxpYXMgZXRoMCBpZ2IKICAgICAgIGFsaWFzIGV0aDEgaWdiCiAgICAgICBvcHRpb25zIGlnYiBJbnRNb2RlPTIsMQoKICBWaWV3aW5nIExpbmsgTWVzc2FnZXMKICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0KICBMaW5rIG1lc3NhZ2VzIHdpbGwgbm90IGJlIGRpc3BsYXllZCB0byB0aGUgY29uc29sZSBpZiB0aGUgZGlzdHJpYnV0aW9uIGlzCiAgcmVzdHJpY3Rpbmcgc3lzdGVtIG1lc3NhZ2VzLiAgSW4gb3JkZXIgdG8gc2VlIG5ldHdvcmsgZHJpdmVyIGxpbmsgbWVzc2FnZXMKICBvbiB5b3VyIGNvbnNvbGUsIHNldCBkbWVzZyB0byBlaWdodCBieSBlbnRlcmluZyB0aGUgZm9sbG93aW5nOgoKICAgICAgIGRtZXNnIC1uIDgKCiAgTk9URTogVGhpcyBzZXR0aW5nIGlzIG5vdCBzYXZlZCBhY3Jvc3MgcmVib290cy4KCiAgSnVtYm8gRnJhbWVzCiAgLS0tLS0tLS0tLS0tCiAgSnVtYm8gRnJhbWVzIHN1cHBvcnQgaXMgZW5hYmxlZCBieSBjaGFuZ2luZyB0aGUgTVRVIHRvIGEgdmFsdWUgbGFyZ2VyIHRoYW4KICB0aGUgZGVmYXVsdCBvZiAxNTAwLiAgVXNlIHRoZSBpZmNvbmZpZyBjb21tYW5kIHRvIGluY3JlYXNlIHRoZSBNVFUgc2l6ZS4KICBGb3IgZXhhbXBsZToKCiAgICAgICBpZmNvbmZpZyBldGg8eD4gbXR1IDkwMDAgdXAKCiAgVGhpcyBzZXR0aW5nIGlzIG5vdCBzYXZlZCBhY3Jvc3MgcmVib290cy4gIEl0IGNhbiBiZSBtYWRlIHBlcm1hbmVudCBpZgogIHlvdSBhZGQ6CgogICAgICAgTVRVPTkwMDAKCiAgIHRvIHRoZSBmaWxlIC9ldGMvc3lzY29uZmlnL25ldHdvcmstc2NyaXB0cy9pZmNmZy1ldGg8eD4uICBUaGlzIGV4YW1wbGUKICAgYXBwbGllcyB0byB0aGUgUmVkIEhhdCBkaXN0cmlidXRpb25zOyBvdGhlciBkaXN0cmlidXRpb25zIG1heSBzdG9yZSB0aGlzCiAgIHNldHRpbmcgaW4gYSBkaWZmZXJlbnQgbG9jYXRpb24uCgogIE5vdGVzOgoKICAtIFRvIGVuYWJsZSBKdW1ibyBGcmFtZXMsIGluY3JlYXNlIHRoZSBNVFUgc2l6ZSBvbiB0aGUgaW50ZXJmYWNlIGJleW9uZAogICAgMTUwMC4KCiAgLSBUaGUgbWF4aW11bSBNVFUgc2V0dGluZyBmb3IgSnVtYm8gRnJhbWVzIGlzIDkyMTYuICBUaGlzIHZhbHVlIGNvaW5jaWRlcwogICAgd2l0aCB0aGUgbWF4aW11bSBKdW1ibyBGcmFtZXMgc2l6ZSBvZiA5MjM0IGJ5dGVzLgoKICAtIFVzaW5nIEp1bWJvIGZyYW1lcyBhdCAxMCBvciAxMDAgTWJwcyBpcyBub3Qgc3VwcG9ydGVkIGFuZCBtYXkgcmVzdWx0IGluCiAgICBwb29yIHBlcmZvcm1hbmNlIG9yIGxvc3Mgb2YgbGluay4KCiAgZXRodG9vbAogIC0tLS0tLS0KICBUaGUgZHJpdmVyIHV0aWxpemVzIHRoZSBldGh0b29sIGludGVyZmFjZSBmb3IgZHJpdmVyIGNvbmZpZ3VyYXRpb24gYW5kCiAgZGlhZ25vc3RpY3MsIGFzIHdlbGwgYXMgZGlzcGxheWluZyBzdGF0aXN0aWNhbCBpbmZvcm1hdGlvbi4gIGV0aHRvb2wKICB2ZXJzaW9uIDMuMCBvciBsYXRlciBpcyByZXF1aXJlZCBmb3IgdGhpcyBmdW5jdGlvbmFsaXR5LCBhbHRob3VnaCB3ZSAKICBzdHJvbmdseSByZWNvbW1lbmQgZG93bmxvYWRpbmcgdGhlIGxhdGVzdCB2ZXJzaW9uIGF0OgoKICBodHRwOi8vZnRwLmtlcm5lbC5vcmcvcHViL3NvZnR3YXJlL25ldHdvcmsvZXRodG9vbC8uCgogIEVuYWJsaW5nIFdha2Ugb24gTEFOKiAoV29MKQogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogIFdvTCBpcyBjb25maWd1cmVkIHRocm91Z2ggdGhlIGV0aHRvb2wqIHV0aWxpdHkuICBldGh0b29sIGlzIGluY2x1ZGVkIHdpdGgKICBhbGwgdmVyc2lvbnMgb2YgUmVkIEhhdCBhZnRlciBSZWQgSGF0IDcuMi4gIEZvciBvdGhlciBMaW51eCBkaXN0cmlidXRpb25zLAogIGRvd25sb2FkIGFuZCBpbnN0YWxsIGV0aHRvb2wgZnJvbSB0aGUgZm9sbG93aW5nIHdlYnNpdGU6CiAgaHR0cDovL3NvdXJjZWZvcmdlLm5ldC9wcm9qZWN0cy9na2VybmVsLgoKICBGb3IgaW5zdHJ1Y3Rpb25zIG9uIGVuYWJsaW5nIFdvTCB3aXRoIGV0aHRvb2wsIHJlZmVyIHRvIHRoZSB3ZWJzaXRlIGxpc3RlZAogIGFib3ZlLgoKICBXb0wgd2lsbCBiZSBlbmFibGVkIG9uIHRoZSBzeXN0ZW0gZHVyaW5nIHRoZSBuZXh0IHNodXQgZG93biBvciByZWJvb3QuCiAgRm9yIHRoaXMgZHJpdmVyIHZlcnNpb24sIGluIG9yZGVyIHRvIGVuYWJsZSBXb0wsIHRoZSBpZ2IgZHJpdmVyIG11c3QgYmUKICBsb2FkZWQgd2hlbiBzaHV0dGluZyBkb3duIG9yIHJlYm9vdGluZyB0aGUgc3lzdGVtLgoKICBXYWtlIE9uIExBTiBpcyBvbmx5IHN1cHBvcnRlZCBvbiBwb3J0IEEgb2YgbXVsdGktcG9ydCBhZGFwdGVycy4KCiAgV2FrZSBPbiBMQU4gaXMgbm90IHN1cHBvcnRlZCBmb3IgdGhlIEludGVsKFIpIEdpZ2FiaXQgVlQgUXVhZCBQb3J0IFNlcnZlciAKICBBZGFwdGVyLgoKICBNdWx0aXF1ZXVlCiAgLS0tLS0tLS0tLQogIEluIHRoaXMgbW9kZSwgYSBzZXBhcmF0ZSBNU0ktWCB2ZWN0b3IgaXMgYWxsb2NhdGVkIGZvciBlYWNoIHF1ZXVlIGFuZCBvbmUKICBmb3IgIm90aGVyIiBpbnRlcnJ1cHRzIHN1Y2ggYXMgbGluayBzdGF0dXMgY2hhbmdlIGFuZCBlcnJvcnMuICBBbGwgCiAgaW50ZXJydXB0cyBhcmUgdGhyb3R0bGVkIHZpYSBpbnRlcnJ1cHQgbW9kZXJhdGlvbi4gIEludGVycnVwdCBtb2RlcmF0aW9uIAogIG11c3QgYmUgdXNlZCB0byBhdm9pZCBpbnRlcnJ1cHQgc3Rvcm1zIHdoaWxlIHRoZSBkcml2ZXIgaXMgcHJvY2Vzc2luZyBvbmUgCiAgaW50ZXJydXB0LiAgVGhlIG1vZGVyYXRpb24gdmFsdWUgc2hvdWxkIGJlIGF0IGxlYXN0IGFzIGxhcmdlIGFzIHRoZSBleHBlY3RlZAogIHRpbWUgZm9yIHRoZSBkcml2ZXIgdG8gcHJvY2VzcyBhbiBpbnRlcnJ1cHQuIE11bHRpcXVldWUgaXMgb2ZmIGJ5IGRlZmF1bHQuCgogIFJFUVVJUkVNRU5UUzogTVNJLVggc3VwcG9ydCBpcyByZXF1aXJlZCBmb3IgTXVsdGlxdWV1ZS4gSWYgTVNJLVggaXMgbm90IAogIGZvdW5kLCB0aGUgc3lzdGVtIHdpbGwgZmFsbGJhY2sgdG8gTVNJIG9yIHRvIExlZ2FjeSBpbnRlcnJ1cHRzLiBUaGlzIGRyaXZlcgogIHN1cHBvcnRzIG11bHRpcXVldWUgaW4ga2VybmVsIHZlcnNpb25zIDIuNi4yNCBhbmQgZ3JlYXRlci4gVGhpcyBkcml2ZXIgCiAgc3VwcG9ydHMgcmVjZWl2ZSBtdWx0aXF1ZXVlIG9uIGFsbCBrZXJuZWxzIHRoYXQgc3VwcG9ydCBNU0ktWC4gCiAgTk9URVM6IERvIG5vdCB1c2UgTVNJLVggd2l0aCB0aGUgMi42LjE5IG9yIDIuNi4yMCBrZXJuZWxzLgogIE9uIHNvbWUga2VybmVscyBhIHJlYm9vdCBpcyByZXF1aXJlZCB0byBzd2l0Y2ggYmV0d2VlbiBhIHNpbmdsZSBxdWV1ZSBtb2RlCiAgYW5kIG11bHRpcXVldWUgbW9kZXMsIG9yIHZpY2UtdmVyc2EuCgogIExSTwogIC0tLQogIExhcmdlIFJlY2VpdmUgT2ZmbG9hZCAoTFJPKSBpcyBhIHRlY2huaXF1ZSBmb3IgaW5jcmVhc2luZyBpbmJvdW5kIHRocm91Z2hwdXQKICBvZiBoaWdoLWJhbmR3aWR0aCBuZXR3b3JrIGNvbm5lY3Rpb25zIGJ5IHJlZHVjaW5nIENQVSBvdmVyaGVhZC4gSXQgd29ya3MgYnkKICBhZ2dyZWdhdGluZyBtdWx0aXBsZSBpbmNvbWluZyBwYWNrZXRzIGZyb20gYSBzaW5nbGUgc3RyZWFtIGludG8gYSBsYXJnZXIgCiAgYnVmZmVyIGJlZm9yZSB0aGV5IGFyZSBwYXNzZWQgaGlnaGVyIHVwIHRoZSBuZXR3b3JraW5nIHN0YWNrLCB0aHVzIHJlZHVjaW5nCiAgdGhlIG51bWJlciBvZiBwYWNrZXRzIHRoYXQgaGF2ZSB0byBiZSBwcm9jZXNzZWQuIExSTyBjb21iaW5lcyBtdWx0aXBsZSAKICBFdGhlcm5ldCBmcmFtZXMgaW50byBhIHNpbmdsZSByZWNlaXZlIGluIHRoZSBzdGFjaywgdGhlcmVieSBwb3RlbnRpYWxseSAKICBkZWNyZWFzaW5nIENQVSB1dGlsaXphdGlvbiBmb3IgcmVjZWl2ZXMuCgogIE5PVEU6IExSTyByZXF1aXJlcyAyLjQuMjIgb3IgbGF0ZXIga2VybmVsIHZlcnNpb24uCgogIElHQl9MUk8gaXMgYSBjb21waWxlIHRpbWUgZmxhZy4gVGhlIHVzZXIgY2FuIGVuYWJsZSBpdCBhdCBjb21waWxlIAogIHRpbWUgdG8gYWRkIHN1cHBvcnQgZm9yIExSTyBmcm9tIHRoZSBkcml2ZXIuIFRoZSBmbGFnIGlzIHVzZWQgYnkgYWRkaW5nIAogIENGTEFHU19FWFRSQT0iLURJR0JfTFJPIiB0byB0aGUgbWFrZSBmaWxlIHdoZW4gaXQncyBiZWluZyBjb21waWxlZC4gCgogICAgIG1ha2UgQ0ZMQUdTX0VYVFJBPSItRElHQl9MUk8iIGluc3RhbGwKCiAgWW91IGNhbiB2ZXJpZnkgdGhhdCB0aGUgZHJpdmVyIGlzIHVzaW5nIExSTyBieSBsb29raW5nIGF0IHRoZXNlIGNvdW50ZXJzIGluIAogIGV0aHRvb2w6CgogIGxyb19hZ2dyZWdhdGVkIC0gY291bnQgb2YgdG90YWwgcGFja2V0cyB0aGF0IHdlcmUgY29tYmluZWQKICBscm9fZmx1c2hlZCAtIGNvdW50cyB0aGUgbnVtYmVyIG9mIHBhY2tldHMgZmx1c2hlZCBvdXQgb2YgTFJPCiAgbHJvX3JlY3ljbGVkIC0gcmVmbGVjdHMgdGhlIG51bWJlciBvZiBidWZmZXJzIHJldHVybmVkIHRvIHRoZSByaW5nIGZyb20gCiAgcmVjeWNsaW5nCgogIE5PVEU6IElQdjYgYW5kIFVEUCBhcmUgbm90IHN1cHBvcnRlZCBieSBMUk8uCgogIE1BQyBhbmQgVkxBTiBhbnRpLXNwb29maW5nIGZlYXR1cmUKICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgV2hlbiBhIG1hbGljaW91cyBkcml2ZXIgYXR0ZW1wdHMgdG8gc2VuZCBhIHNwb29mZWQgcGFja2V0LCBpdCBpcyBkcm9wcGVkIGJ5IAogIHRoZSBoYXJkd2FyZSBhbmQgbm90IHRyYW5zbWl0dGVkLiAgQW4gaW50ZXJydXB0IGlzIHNlbnQgdG8gdGhlIFBGIGRyaXZlciAKICBub3RpZnlpbmcgaXQgb2YgdGhlIHNwb29mIGF0dGVtcHQuCgogIFdoZW4gYSBzcG9vZmVkIHBhY2tldCBpcyBkZXRlY3RlZCB0aGUgUEYgZHJpdmVyIHdpbGwgc2VuZCB0aGUgZm9sbG93aW5nIAogIG1lc3NhZ2UgdG8gdGhlIHN5c3RlbSBsb2cgKGRpc3BsYXllZCBieSAgdGhlICJkbWVzZyIgY29tbWFuZCk6CgogIFNwb29mIGV2ZW50KHMpIGRldGVjdGVkIG9uIFZGKG4pCgogIFdoZXJlIG49dGhlIFZGIHRoYXQgYXR0ZW1wdGVkIHRvIGRvIHRoZSBzcG9vZmluZy4KCiAgU2V0dGluZyBNQUMgQWRkcmVzcywgVkxBTiBhbmQgUmF0ZSBMaW1pdCBVc2luZyBJUHJvdXRlMiBUb29sCiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgWW91IGNhbiBzZXQgYSBNQUMgYWRkcmVzcyBvZiBhIFZpcnR1YWwgRnVuY3Rpb24gKFZGKSwgYSBkZWZhdWx0IFZMQU4gYW5kIHRoZQogIHJhdGUgbGltaXQgdXNpbmcgdGhlIElQcm91dGUyIHRvb2wuIERvd25sb2FkIHRoZSBsYXRlc3QgdmVyc2lvbiBvZiB0aGUgCiAgaXByb3V0ZTIgdG9vbCBmcm9tIFNvdXJjZWZvcmdlIGlmIHlvdXIgdmVyc2lvbiBkb2VzIG5vdCBoYXZlIGFsbCB0aGUKICBmZWF0dXJlcyB5b3UgcmVxdWlyZS4KCiAgCktub3duIElzc3Vlcy9Ucm91Ymxlc2hvb3RpbmcKPT09PT09PT09PT09PT09PT09PT09PT09PT09PQoKSGFyZHdhcmUgSXNzdWVzOgotLS0tLS0tLS0tLS0tLS0tCkZvciBrbm93biBoYXJkd2FyZSBhbmQgdHJvdWJsZXNob290aW5nIGlzc3VlcywgZWl0aGVyIHJlZmVyIHRvIHRoZSAiUmVsZWFzZSAKTm90ZXMiIGluIHlvdXIgVXNlciBHdWlkZSwgb3IgZm9yIG1vcmUgZGV0YWlsZWQgaW5mb3JtYXRpb24sIGdvIHRvIHRoZSAKZm9sbG93aW5nIHdlYnNpdGU6CgogICAgaHR0cDovL3d3dy5pbnRlbC5jb20KCkluIHRoZSBzZWFyY2ggYm94IGVudGVyIHlvdXIgZGV2aWNlcyBjb250cm9sbGVyIElEIGZvbGxvd2VkIGJ5ICJzcGVjIHVwZGF0ZSIgCihpLmUuLCA4MjU5OSBzcGVjIHVwZGF0ZSkuIFRoZSBzcGVjIHVwZGF0ZSBmaWxlIGhhcyBjb21wbGV0ZSBpbmZvcm1hdGlvbiBvbgprbm93biBoYXJkd2FyZSBpc3N1ZXMuCgpTb2Z0d2FyZSBJc3N1ZXM6Ci0tLS0tLS0tLS0tLS0tLS0KCiAgTk9URTogQWZ0ZXIgaW5zdGFsbGluZyB0aGUgZHJpdmVyLCBpZiB5b3VyIEludGVsIEV0aGVybmV0IE5ldHdvcmsgQ29ubmVjdGlvbgogIGlzIG5vdCB3b3JraW5nLCB2ZXJpZnkgdGhhdCB5b3UgaGF2ZSBpbnN0YWxsZWQgdGhlIGNvcnJlY3QgZHJpdmVyLgoKICBVc2luZyB0aGUgaWdiIGRyaXZlciBvbiAyLjQgb3Igb2xkZXIgMi42IGJhc2VkIGtlcm5lbHMKICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICBEdWUgdG8gbGltaXRlZCBzdXBwb3J0IGZvciBQQ0ktRXhwcmVzcyBpbiAyLjQga2VybmVscyBhbmQgb2xkZXIgMi42IGtlcm5lbHMsCiAgdGhlIGlnYiBkcml2ZXIgbWF5IHJ1biBpbnRvIGludGVycnVwdCByZWxhdGVkIHByb2JsZW1zIG9uIHNvbWUgc3lzdGVtcywgCiAgc3VjaCBhcyBubyBsaW5rIG9yIGhhbmcgd2hlbiBicmluZ2luZyB1cCB0aGUgZGV2aWNlLgoKICBXZSByZWNvbW1lbmQgdGhlIG5ld2VyIDIuNiBiYXNlZCBrZXJuZWxzLCBhcyB0aGVzZSBrZXJuZWxzIGNvcnJlY3RseQogIGNvbmZpZ3VyZSB0aGUgUENJLUV4cHJlc3MgY29uZmlndXJhdGlvbiBzcGFjZSBvZiB0aGUgYWRhcHRlciBhbmQgYWxsCiAgaW50ZXJ2ZW5pbmcgYnJpZGdlcy4gSWYgeW91IGFyZSByZXF1aXJlZCB0byB1c2UgYSAyLjQga2VybmVsLCB1c2UgYSAyLjQga2VybmVsIAogIG5ld2VyIHRoYW4gMi40LjMwLiBGb3IgMi42IGtlcm5lbHMgd2UgcmVjb21tZW5kIHVzaW5nIHRoZSAyLjYuMjEga2VybmVsIG9yIAogIG5ld2VyLgoKICBBbHRlcm5hdGl2ZWx5LCBvbiAyLjYga2VybmVscyB5b3UgbWF5IGRpc2FibGUgTVNJIHN1cHBvcnQgaW4gdGhlIGtlcm5lbCBieSAKICBib290aW5nIHdpdGggdGhlICJwY2k9bm9tc2kiIG9wdGlvbiBvciBwZXJtYW5lbnRseSBkaXNhYmxlIE1TSSBzdXBwb3J0IGluIAogIHlvdXIga2VybmVsIGJ5IGNvbmZpZ3VyaW5nIHlvdXIga2VybmVsIHdpdGggQ09ORklHX1BDSV9NU0kgdW5zZXQuCgogIEludGVsKFIpIEFjdGl2ZSBNYW5hZ2VtZW50IFRlY2hub2xvZ3kgMi4wLCAyLjEsIDIuNSBub3Qgc3VwcG9ydGVkIGluIAogIGNvbmp1bmN0aW9uIHdpdGggTGludXggZHJpdmVyCiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgogIERyaXZlciBDb21waWxhdGlvbgogIC0tLS0tLS0tLS0tLS0tLS0tLQogIFdoZW4gdHJ5aW5nIHRvIGNvbXBpbGUgdGhlIGRyaXZlciBieSBydW5uaW5nIG1ha2UgaW5zdGFsbCwgdGhlIGZvbGxvd2luZwogIGVycm9yIG1heSBvY2N1cjoKCiAgICAiTGludXgga2VybmVsIHNvdXJjZSBub3QgY29uZmlndXJlZCAtIG1pc3NpbmcgdmVyc2lvbi5oIgoKICBUbyBzb2x2ZSB0aGlzIGlzc3VlLCBjcmVhdGUgdGhlIHZlcnNpb24uaCBmaWxlIGJ5IGdvaW5nIHRvIHRoZSBMaW51eCBzb3VyY2UKICB0cmVlIGFuZCBlbnRlcmluZzoKCiAgICBtYWtlIGluY2x1ZGUvbGludXgvdmVyc2lvbi5oLgoKICBQZXJmb3JtYW5jZSBEZWdyYWRhdGlvbiB3aXRoIEp1bWJvIEZyYW1lcwogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgRGVncmFkYXRpb24gaW4gdGhyb3VnaHB1dCBwZXJmb3JtYW5jZSBtYXkgYmUgb2JzZXJ2ZWQgaW4gc29tZSBKdW1ibyBmcmFtZXMgCiAgZW52aXJvbm1lbnRzLiBJZiB0aGlzIGlzIG9ic2VydmVkLCBpbmNyZWFzaW5nIHRoZSBhcHBsaWNhdGlvbidzIHNvY2tldCBidWZmZXIKICBzaXplIGFuZC9vciBpbmNyZWFzaW5nIHRoZSAvcHJvYy9zeXMvbmV0L2lwdjQvdGNwXyptZW0gZW50cnkgdmFsdWVzIG1heSBoZWxwLgogIFNlZSB0aGUgc3BlY2lmaWMgYXBwbGljYXRpb24gbWFudWFsIGFuZCAKICAvdXNyL3NyYy9saW51eCovRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2lwLXN5c2N0bC50eHQgZm9yIG1vcmUgZGV0YWlscy4KCiAgSnVtYm8gRnJhbWVzIG9uIEZvdW5kcnkgQmlnSXJvbiA4MDAwIHN3aXRjaAogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICBUaGVyZSBpcyBhIGtub3duIGlzc3VlIHVzaW5nIEp1bWJvIGZyYW1lcyB3aGVuIGNvbm5lY3RlZCB0byBhIEZvdW5kcnkKICBCaWdJcm9uIDgwMDAgc3dpdGNoLiAgVGhpcyBpcyBhIDNyZCBwYXJ0eSBsaW1pdGF0aW9uLiAgSWYgeW91IGV4cGVyaWVuY2UKICBsb3NzIG9mIHBhY2tldHMsIGxvd2VyIHRoZSBNVFUgc2l6ZS4KCiAgTXVsdGlwbGUgSW50ZXJmYWNlcyBvbiBTYW1lIEV0aGVybmV0IEJyb2FkY2FzdCBOZXR3b3JrCiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgRHVlIHRvIHRoZSBkZWZhdWx0IEFSUCBiZWhhdmlvciBvbiBMaW51eCwgaXQgaXMgbm90IHBvc3NpYmxlIHRvIGhhdmUKICBvbmUgc3lzdGVtIG9uIHR3byBJUCBuZXR3b3JrcyBpbiB0aGUgc2FtZSBFdGhlcm5ldCBicm9hZGNhc3QgZG9tYWluCiAgKG5vbi1wYXJ0aXRpb25lZCBzd2l0Y2gpIGJlaGF2ZSBhcyBleHBlY3RlZC4gIEFsbCBFdGhlcm5ldCBpbnRlcmZhY2VzCiAgd2lsbCByZXNwb25kIHRvIElQIHRyYWZmaWMgZm9yIGFueSBJUCBhZGRyZXNzIGFzc2lnbmVkIHRvIHRoZSBzeXN0ZW0uCiAgVGhpcyByZXN1bHRzIGluIHVuYmFsYW5jZWQgcmVjZWl2ZSB0cmFmZmljLgoKICBJZiB5b3UgaGF2ZSBtdWx0aXBsZSBpbnRlcmZhY2VzIGluIGEgc2VydmVyLCBlaXRoZXIgdHVybiBvbiBBUlAKICBmaWx0ZXJpbmcgYnkgZW50ZXJpbmc6CgogICAgZWNobyAxID4gL3Byb2Mvc3lzL25ldC9pcHY0L2NvbmYvYWxsL2FycF9maWx0ZXIKICAodGhpcyBvbmx5IHdvcmtzIGlmIHlvdXIga2VybmVsJ3MgdmVyc2lvbiBpcyBoaWdoZXIgdGhhbiAyLjQuNSksCgogIE5PVEU6IFRoaXMgc2V0dGluZyBpcyBub3Qgc2F2ZWQgYWNyb3NzIHJlYm9vdHMuICBUaGUgY29uZmlndXJhdGlvbgogIGNoYW5nZSBjYW4gYmUgbWFkZSBwZXJtYW5lbnQgYnkgYWRkaW5nIHRoZSBsaW5lOgogICAgbmV0LmlwdjQuY29uZi5hbGwuYXJwX2ZpbHRlciA9IDEKICB0byB0aGUgZmlsZSAvZXRjL3N5c2N0bC5jb25mCgogICAgICBvciwKCiAgaW5zdGFsbCB0aGUgaW50ZXJmYWNlcyBpbiBzZXBhcmF0ZSBicm9hZGNhc3QgZG9tYWlucyAoZWl0aGVyIGluCiAgZGlmZmVyZW50IHN3aXRjaGVzIG9yIGluIGEgc3dpdGNoIHBhcnRpdGlvbmVkIHRvIFZMQU5zKS4KCiAgRGlzYWJsZSByeCBmbG93IGNvbnRyb2wgd2l0aCBldGh0b29sCiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgSW4gb3JkZXIgdG8gZGlzYWJsZSByZWNlaXZlIGZsb3cgY29udHJvbCB1c2luZyBldGh0b29sLCB5b3UgbXVzdCB0dXJuCiAgb2ZmIGF1dG8tbmVnb3RpYXRpb24gb24gdGhlIHNhbWUgY29tbWFuZCBsaW5lLgoKICBGb3IgZXhhbXBsZToKCiAgIGV0aHRvb2wgLUEgZXRoPyBhdXRvbmVnIG9mZiByeCBvZmYKCiAgVW5wbHVnZ2luZyBuZXR3b3JrIGNhYmxlIHdoaWxlIGV0aHRvb2wgLXAgaXMgcnVubmluZwogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICBJbiBrZXJuZWwgdmVyc2lvbnMgMi41LjUwIGFuZCBsYXRlciAoaW5jbHVkaW5nIDIuNiBrZXJuZWwpLCB1bnBsdWdnaW5nIAogIHRoZSBuZXR3b3JrIGNhYmxlIHdoaWxlIGV0aHRvb2wgLXAgaXMgcnVubmluZyB3aWxsIGNhdXNlIHRoZSBzeXN0ZW0gdG8gCiAgYmVjb21lIHVucmVzcG9uc2l2ZSB0byBrZXlib2FyZCBjb21tYW5kcywgZXhjZXB0IGZvciBjb250cm9sLWFsdC1kZWxldGUuICAKICBSZXN0YXJ0aW5nIHRoZSBzeXN0ZW0gYXBwZWFycyB0byBiZSB0aGUgb25seSByZW1lZHkuCgogIFRyb3VibGUgcGFzc2luZyB0cmFmZmljIHdpdGggb24gcG9ydHMgMSBhbmQgMiB1c2luZyBSSEVMMwogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogIFRoZXJlIGlzIGEga25vd24gaGFyZHdhcmUgY29tcGF0aWJpbGl0eSBpc3N1ZSBvbiBzb21lIHN5c3RlbXMgd2l0aCBSSEVMMyAKICBrZXJuZWxzLiBUcmFmZmljIG9uIHBvcnRzIDEgYW5kIDIgbWF5IGJlIHNsb3dlciB0aGFuIGV4cGVjdGVkIGFuZCBwaW5nIHRpbWVzCiAgaGlnaGVyIHRoYW4gZXhwZWN0ZWQuIAoKICBUaGlzIGlzc3VlIE1BWSBiZSByZXNvbHZlZCBieSB1cGRhdGluZyB0byB0aGUgbGF0ZXN0IGtlcm5lbCBhbmQgQklPUy4gWW91IGNhbiAKICBjaGVjayB5b3VyIHN5c3RlbSdzIEJJT1MgYnkgZG93bmxvYWRpbmcgdGhlIExpbnV4IEZpcm13YXJlIERldmVsb3BlciBLaXQgdGhhdCAKICBjYW4gYmUgb2J0YWluZWQgYXQgaHR0cDovL3d3dy5saW51eGZpcm13YXJla2l0Lm9yZy8KCiAgRG8gTm90IFVzZSBMUk8gV2hlbiBSb3V0aW5nIFBhY2tldHMKICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogIER1ZSB0byBhIGtub3duIGdlbmVyYWwgY29tcGF0aWJpbGl0eSBpc3N1ZSB3aXRoIExSTyBhbmQgcm91dGluZywgZG8gbm90IHVzZQogIExSTyB3aGVuIHJvdXRpbmcgcGFja2V0cy4KCiAgQnVpbGQgZXJyb3Igd2l0aCBBc2lhbnV4IDMuMCAtIHJlZGVmaW5pdGlvbiBvZiB0eXBlZGVmICdpcnFfaGFuZGxlcl90JwogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogIFNvbWUgc3lzdGVtcyBtYXkgZXhwZXJpZW5jZSBidWlsZCBpc3N1ZXMgZHVlIHRvIHJlZGVmaW5pdGlvbiBvZiBpcnFfaGFuZGxlcl90LiAgCiAgVG8gcmVzb2x2ZSB0aGlzIGlzc3VlIGJ1aWxkIHRoZSBkcml2ZXIgKHN0ZXAgNCBhYm92ZSkgdXNpbmcgdGhlIGNvbW1hbmQ6CgogICAgbWFrZSBDRkxBR1NfRVhUUkE9LURBWF9SRUxFQVNFX0NPREU9MSBpbnN0YWxsCgogIE1TSS1YIElzc3VlcyB3aXRoIEtlcm5lbHMgYmV0d2VlbiAyLjYuMTkgLSAyLjYuMjEgKGluY2x1c2l2ZSkKICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgS2VybmVsIHBhbmljcyBhbmQgaW5zdGFiaWxpdHkgbWF5IGJlIG9ic2VydmVkIG9uIGFueSBNU0ktWCBoYXJkd2FyZSBpZiB5b3UgCiAgdXNlIGlycWJhbGFuY2Ugd2l0aCBrZXJuZWxzIGJldHdlZW4gMi42LjE5IGFuZCAyLjYuMjEuIElmIHN1Y2ggcHJvYmxlbXMgYXJlIAogIGVuY291bnRlcmVkLCB5b3UgbWF5IGRpc2FibGUgdGhlIGlycWJhbGFuY2UgZGFlbW9uIG9yIHVwZ3JhZGUgdG8gYSBuZXdlciAKICBrZXJuZWwuCgogIFJ4IFBhZ2UgQWxsb2NhdGlvbiBFcnJvcnMKICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgUGFnZSBhbGxvY2F0aW9uIGZhaWx1cmUuIG9yZGVyOjAgZXJyb3JzIG1heSBvY2N1ciB1bmRlciBzdHJlc3Mgd2l0aCBrZXJuZWxzIAogIDIuNi4yNSBhbmQgYWJvdmUuIFRoaXMgaXMgY2F1c2VkIGJ5IHRoZSB3YXkgdGhlIExpbnV4IGtlcm5lbCByZXBvcnRzIHRoaXMgCiAgc3RyZXNzZWQgY29uZGl0aW9uLgoKICBVbmRlciBSZWRoYXQgNS40LUdBIC0gU3lzdGVtIE1heSBDcmFzaCB3aGVuIENsb3NpbmcgR3Vlc3QgT1MgV2luZG93IGFmdGVyIAogIExvYWRpbmcvVW5sb2FkaW5nIFBoeXNpY2FsIEZ1bmN0aW9uIChQRikgRHJpdmVyCiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogIERvIG5vdCByZW1vdmUgdGhlIGlnYiBkcml2ZXIgZnJvbSBEb20wIHdoaWxlIFZpcnR1YWwgRnVuY3Rpb25zIChWRnMpIGFyZSAKICBhc3NpZ25lZCB0byBndWVzdHMuIFZGcyBtdXN0IGZpcnN0IHVzZSB0aGUgeG0gInBjaS1kZXRhY2giIGNvbW1hbmQgdG8gCiAgaG90LXBsdWcgdGhlIFZGIGRldmljZSBvdXQgb2YgdGhlIFZNIGl0IGlzIGFzc2lnbmVkIHRvIG9yIGVsc2Ugc2h1dCBkb3duIHRoZQogIFZNLgoKICBTTEVTMTAgU1AzIHJhbmRvbSBzeXN0ZW0gcGFuaWMgd2hlbiByZWxvYWRpbmcgZHJpdmVyCiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgVGhpcyBpcyBhIGtub3duIFNMRVMtMTAgU1AzIGlzc3VlLiBBZnRlciByZXF1ZXN0aW5nIGludGVycnVwdHMgZm9yIE1TSS1YIAogIHZlY3RvcnMsIHN5c3RlbSBtYXkgcGFuaWMuIAoKICBDdXJyZW50bHkgdGhlIG9ubHkga25vd24gd29ya2Fyb3VuZCBpcyB0byBidWlsZCB0aGUgZHJpdmVycyB3aXRoIAogIENGTEFHU19FWFRSQT0tRERJU0FCTEVfUENJX01TSSBpZiB0aGUgZHJpdmVyIG5lZWQgdG8gYmUgbG9hZGVkL3VubG9hZGVkLgogIE90aGVyd2lzZSB0aGUgZHJpdmVyIGNhbiBiZSBsb2FkZWQgb25jZSBhbmQgd2lsbCBiZSBzYWZlLCBidXQgdW5sb2FkaW5nIGl0IAogIHdpbGwgbGVhZCB0byB0aGUgaXNzdWUuCgogIEVuYWJsaW5nIFNSLUlPViBpbiBhIDMyLWJpdCBNaWNyb3NvZnQqIFdpbmRvd3MqIFNlcnZlciAyMDA4IEd1ZXN0IE9TIHVzaW5nCiAgSW50ZWwgKFIpIDgyNTc2LWJhc2VkIEdiRSBvciBJbnRlbCAoUikgODI1OTktYmFzZWQgMTBHYkUgY29udHJvbGxlciB1bmRlciBLVk0KICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogIEtWTSBIeXBlcnZpc29yL1ZNTSBzdXBwb3J0cyBkaXJlY3QgYXNzaWdubWVudCBvZiBhIFBDSWUgZGV2aWNlIHRvIGEgVk0uICBUaGlzIAogIGluY2x1ZGVzIHRyYWRpdGlvbmFsIFBDSWUgZGV2aWNlcywgYXMgd2VsbCBhcyBTUi1JT1YtY2FwYWJsZSBkZXZpY2VzIHVzaW5nCiAgSW50ZWwgODI1NzYtYmFzZWQgYW5kIDgyNTk5LWJhc2VkIGNvbnRyb2xsZXJzLgoKICBXaGlsZSBkaXJlY3QgYXNzaWdubWVudCBvZiBhIFBDSWUgZGV2aWNlIG9yIGFuIFNSLUlPViBWaXJ0dWFsIEZ1bmN0aW9uIChWRikKICB0byBhIExpbnV4LWJhc2VkIFZNIHJ1bm5pbmcgMi42LjMyIG9yIGxhdGVyIGtlcm5lbCB3b3JrcyBmaW5lLCB0aGVyZSBpcyBhCiAga25vd24gaXNzdWUgd2l0aCBNaWNyb3NvZnQgV2luZG93cyBTZXJ2ZXIgMjAwOCBWTSB0aGF0IHJlc3VsdHMgaW4gYSAieWVsbG93IAogIGJhbmciIGVycm9yLiBUaGlzIHByb2JsZW0gaXMgd2l0aGluIHRoZSBLVk0gVk1NIGl0c2VsZiwgbm90IHRoZSBJbnRlbCBkcml2ZXIsCiAgb3IgdGhlIFNSLUlPViBsb2dpYyBvZiB0aGUgVk1NLCBidXQgcmF0aGVyIHRoYXQgS1ZNIGVtdWxhdGVzIGFuIG9sZGVyIENQVSAKICBtb2RlbCBmb3IgdGhlIGd1ZXN0cywgYW5kIHRoaXMgb2xkZXIgQ1BVIG1vZGVsIGRvZXMgbm90IHN1cHBvcnQgTVNJLVgKICBpbnRlcnJ1cHRzLCB3aGljaCBpcyBhIHJlcXVpcmVtZW50IGZvciBJbnRlbCBTUi1JT1YuICAKCiAgSWYgeW91IHdpc2ggdG8gdXNlIHRoZSBJbnRlbCA4MjU3NiBvciA4MjU5OS1iYXNlZCBjb250cm9sbGVycyBpbiBTUi1JT1YgbW9kZQogIHdpdGggS1ZNIGFuZCBhIE1pY3Jvc29mdCBXaW5kb3dzIFNlcnZlciAyMDA4IGd1ZXN0IHRyeSB0aGUgZm9sbG93aW5nIAogIHdvcmthcm91bmQuIFRoZSB3b3JrYXJvdW5kIGlzIHRvIHRlbGwgS1ZNIHRvIGVtdWxhdGUgYSBkaWZmZXJlbnQgbW9kZWwgb2YgQ1BVCiAgd2hlbiB1c2luZyBxZW11IHRvIGNyZWF0ZSB0aGUgS1ZNIGd1ZXN0OiAKCiAgICAgICAiLWNwdSBxZW11NjQsbW9kZWw9MTMiCgogIEhvc3QgbWF5IHJlYm9vdCBhZnRlciByZW1vdmluZyBQRiB3aGVuIFZGIGlzIGFjdGl2ZSBpbiBndWVzdAogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogIFVzaW5nIGtlcm5lbCB2ZXJzaW9ucyBlYXJsaWVyIHRoYW4gMy4yLCBkbyBub3QgdW5sb2FkIHRoZSBQRiBkcml2ZXIgd2l0aCAKICBhY3RpdmUgVkZzLiBEb2luZyB0aGlzIHdpbGwgY2F1c2UgeW91ciBWRnMgdG8gc3RvcCB3b3JraW5nIHVudGlsIHlvdSByZWxvYWQKICB0aGUgUEYgZHJpdmVyIGFuZCBtYXkgY2F1c2UgYSBzcG9udGFuZW91cyByZWJvb3Qgb2YgeW91ciBzeXN0ZW0uCgoKU3VwcG9ydAo9PT09PT09CgpGb3IgZ2VuZXJhbCBpbmZvcm1hdGlvbiwgZ28gdG8gdGhlIEludGVsIHN1cHBvcnQgd2Vic2l0ZSBhdDoKCiAgICB3d3cuaW50ZWwuY29tL3N1cHBvcnQvCgpvciB0aGUgSW50ZWwgV2lyZWQgTmV0d29ya2luZyBwcm9qZWN0IGhvc3RlZCBieSBTb3VyY2Vmb3JnZSBhdDoKCiAgICBodHRwOi8vc291cmNlZm9yZ2UubmV0L3Byb2plY3RzL2UxMDAwCgpJZiBhbiBpc3N1ZSBpcyBpZGVudGlmaWVkIHdpdGggdGhlIHJlbGVhc2VkIHNvdXJjZSBjb2RlIG9uIHRoZSBzdXBwb3J0ZWQKa2VybmVsIHdpdGggYSBzdXBwb3J0ZWQgYWRhcHRlciwgZW1haWwgdGhlIHNwZWNpZmljIGluZm9ybWF0aW9uIHJlbGF0ZWQKdG8gdGhlIGlzc3VlIHRvIGUxMDAwLWRldmVsQGxpc3RzLnNmLm5ldAoKTGljZW5zZQo9PT09PT09CgpJbnRlbCBHaWdhYml0IExpbnV4IGRyaXZlci4KQ29weXJpZ2h0KGMpIDE5OTkgLSAyMDEyIEludGVsIENvcnBvcmF0aW9uLgoKVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwKdmVyc2lvbiAyLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KClRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yCkZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IKbW9yZSBkZXRhaWxzLgoKWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aAp0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKNTEgRnJhbmtsaW4gU3QgLSBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KClRoZSBmdWxsIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoaXMgZGlzdHJpYnV0aW9uIGluCnRoZSBmaWxlIGNhbGxlZCAiQ09QWUlORyIuCgpUcmFkZW1hcmtzCj09PT09PT09PT0KCkludGVsLCBJdGFuaXVtLCBhbmQgUGVudGl1bSBhcmUgdHJhZGVtYXJrcyBvciByZWdpc3RlcmVkIHRyYWRlbWFya3Mgb2YKSW50ZWwgQ29ycG9yYXRpb24gb3IgaXRzIHN1YnNpZGlhcmllcyBpbiB0aGUgVW5pdGVkIFN0YXRlcyBhbmQgb3RoZXIKY291bnRyaWVzLgoKKiBPdGhlciBuYW1lcyBhbmQgYnJhbmRzIG1heSBiZSBjbGFpbWVkIGFzIHRoZSBwcm9wZXJ0eSBvZiBvdGhlcnMuCg==