ICBDaGFuZ2Vsb2cgZm9yIHRoZSBjLWFyZXMgcHJvamVjdAoKVmVyc2lvbiAxLjMuMCAoQXVndXN0IDI5LCAyMDA0KQoKKiBBdWd1c3QgMjEKCi0gQWxmcmVkbyBUdXBvbmUgcHJvdmlkZWQgYSBmaXggZm9yIHRoZSBXaW5kb3dzIGNvZGUgaW4gZ2V0X2lwaGxwYXBpX2Ruc19pbmZvKCkKICB3aGVuIGdldHRpbmcgdGhlIEROUyBzZXJ2ZXIgZXRjLgoKKiBKdW5lIDE5CgotIEFkZGVkIHNvbWUgY2hlY2tzIGZvciB0aGUgYWRkcmluZm8gc3RydWN0dXJlLgoKKiBKdW5lIDIKCi0gV2lsbGlhbSBBaGVybjoKCiAgTWFrZSBVRFAgc29ja2V0cyBub24tYmxvY2tpbmcuIEkndmUgY29uZmlybWVkIHRoYXQgYXQgbGVhc3Qgb24gTGludXggMi40IGEKICByZWFkIGV2ZW50IGNhbiBjb21lIGJhY2sgZnJvbSBwb2xsKCkgb24gYSB2YWxpZCBTT0NLX0RHUkFNIHNvY2tldCBidXQKICByZWN2KDIpIHdpbGwgc3RpbGwgYmxvY2suIFRoaXMgcGF0Y2ggZG9lc24ndCBpZ25vcmUgRUFHQUlOIGluCiAgcmVhZF91ZHBfcGFja2V0cygpLCB0aG91Z2ggbWF5YmUgaXQgc2hvdWxkLiAoVGhpcyBwYXRjaCB3YXMgZWRpdGVkIGJ5IERhbmllbAogIFN0ZW5iZXJnIGFuZCBhIG5ldyBjb25maWd1cmUgdGVzdCB3YXMgYWRkZWQgKGltcG9ydGVkIGZyb20gY3VybCdzIGNvbmZpZ3VyZSkKICB0byBwcm9wZXJseSBkZXRlY3Qgd2hhdCBub24tYmxvY2tpbmcgc29ja2V0IGFwcHJvYWNoIHRvIHVzZS4pCgogIEknbSBub3QgcXVpdGUgc3VyZSBob3cgdGhpcyB3YXMgaGFwcGVuaW5nLCBidXQgSSd2ZSBiZWVuIHNlZWluZyBQVFIgcXVlcmllcwogIHdoaWNoIHNlZW0gdG8gcmV0dXJuIGVtcHR5IHJlc3BvbnNlcy4gQXQgbGVhc3QsIHRoZXkgd2VyZSBlbXB0eSB3aGVuIGNhbGxpbmcKICBhcmVzX2V4cGFuZF9uYW1lKCkgb24gdGhlIHJlY29yZC4gSGVyZSdzIGEgcGF0Y2ggd2hpY2ggZ3VhcmFudGVlcyB0bwogIE5VTC10ZXJtaW5hdGUgdGhlIGV4cGFuZGVkIG5hbWUuIFRoZSBvbGQgYmVoYXZpb3IgZmFpbGVkIHRvIE5VTC10ZXJtaW5hdGUgaWYKICBsZW4gd2FzIDAsIGFuZCB0aGlzIHdhcyBjYXVzaW5nIHN0cmxlbigpIHRvIHJ1biBwYXN0IHRoZSBlbmQgb2YgdGhlIGJ1ZmZlcgogIGFmdGVyIGNhbGxpbmcgYXJlc19leHBhbmRfbmFtZSgpIGFuZCBnZXR0aW5nIEFSRVNfU1VDQ0VTUyBhcyB0aGUgcmV0dXJuCiAgdmFsdWUuIElmIHEgaXMgbm90IGdyZWF0ZXIgdGhhbiAqcyB0aGVuIGl0J3MgZXF1YWwgYW5kICpzIGlzIGFsd2F5cwogIGFsbG9jYXRlZCB3aXRoIGF0IGxlYXN0IG9uZSBieXRlLgoKKiBNYXkgMTYKCi0gQWRkZWQgYXJlc19nZXRuYW1laW5mbyB3aGljaCBtaW1pY3MgdGhlIGdldG5hbWVpbmZvIEFQSSAoYW5vdGhlciBmZWF0dXJlCiAgdGhhdCBjb3VsZCB1c2UgdGVzdGluZykuCgoqIE1heSAxNAoKLSBBZGRlZCBhbiBpbmV0X250b3AgZnVuY3Rpb24gZnJvbSBCSU5EIGZvciBzeXN0ZW1zIHRoYXQgZG8gbm90IGhhdmUgaXQuCgoqIEFwcmlsIDkKCi0gTWFkZSBzb3J0bGlzdCBzdXBwb3J0IElQdjYgKHRoaXMgY2FuIHByb2JhYmx5IHVzZSBzb21lIHRlc3RpbmcpLgoKLSBNYWRlIHNvcnRsaXN0IHN1cHBvcnQgQ0lEUiBtYXRjaGluZyBmb3IgSVB2NC4KCiogQXByaWwgOAoKLSBBZGRlZCBwcmVsaW1pbmFyeSBJUHY2IHN1cHBvcnQgdG8gYXJlc19nZXRob3N0YnluYW1lLiBDdXJyZW50bHksIHNvcnRsaXN0CiAgZG9lcyBub3Qgd29yayB3aXRoIElQdjYuIEFsc28gcHJvdmlkZWQgYW4gaW1wbGVtZW50YXRpb24gb2YgYml0bmNtcCBmcm9tCiAgQklORCBmb3Igc3lzdGVtcyB0aGF0IGRvIG5vdCBzdXBwbHkgdGhpcyBmdW5jdGlvbi4gVGhpcyB3aWxsIGJlIHVzZWQgdG8gYWRkCiAgSVB2NiBzdXBwb3J0IHRvIHNvcnRsaXN0LgoKLSBNYWRlIGFyZXNfZ2V0aG9zdGJ5YWRkciBzdXBwb3J0IElQdjYgYnkgc3BlY2lmeWluZyBBRl9JTkVUNiBhcyB0aGUgZmFtaWx5LgogIFRoZSBmdW5jdGlvbiBjYW4gbG9va3VwIElQdjYgYWRkcmVzc2VzIGJvdGggZnJvbSBmaWxlcyAoL2V0Yy9ob3N0cykgYW5kCiAgRE5TIGxvb2t1cHMuCgoqIEFwcmlsIDcKCi0gVHVwb25lIEFsZnJlZG8gZml4ZWQgaW5jbHVkZXMgb2YgYXJwYS9uYW1lc2VyX2NvbXBhdC5oIHRvIGJ1aWxkIGZpbmUgb24gTWFjCiAgT1MgWC4KCiogQXByaWwgNQoKLSBEb21pbmljayBNZWdsaW86IFByb3ZpZGVkIGltcGxlbWVudGF0aW9ucyBvZiBpbmV0X25ldF9wdG9uIGFuZCBpbmV0X3B0b24KICBmcm9tIEJJTkQgZm9yIHN5c3RlbXMgdGhhdCBkbyBub3QgaW5jbHVkZSB0aGVzZSBmdW5jdGlvbnMuCgoqIE1hcmNoIDExLCAyMDA1CgotIERvbWluaWNrIE1lZ2xpbyBhZGRlZCBhcmVzX3BhcnNlX2FhYWFfcmVwbHkuYyBhbmQgZGlkIHZhcmlvdXMKICBhZGp1c3RtZW50cy4gVGhlIGZpcnN0IGxpdHRsZSBzdGVwcyB0b3dhcmRzIElQdjYgc3VwcG9ydCEKCiogTm92ZW1iZXIgNwoKLSBGaXhlZCB0aGUgVkMgcHJvamVjdCBhbmQgbWFrZWZpbGUgdG8gdXNlIGFyZXNfY2FuY2VsIGFuZCBhcmVzX3ZlcnNpb24KCiogT2N0b2JlciAyNAoKLSBUaGUgcmVsZWFzZWQgYXJlc192ZXJzaW9uLmggZnJvbSAxLjIuMSBzYXlzIDEuMi4wIGR1ZSB0byBhIG1ha2V0Z3ogZmxhdy4KICBUaGlzIGlzIG5vdyBmaXhlZC4KClZlcnNpb24gMS4yLjEgKE9jdG9iZXIgMjAsIDIwMDQpCgoqIFNlcHRlbWJlciAyOQoKLSBIZW5yaWsgU3RvZXJuZXIgZml4OiBnb3QgYSByZXBvcnQgdGhhdCBUcnU2NCBVbml4ICh0aGUgdW5peCBmcm9tIERpZ2l0YWwKICB3aGVuIHRoZXkgbWFkZSBBbHBoYSdzKSB1c2VzIC9ldGMvc3ZjLmNvbmYgZm9yIHRoZSBwdXJwb3NlIGZpeGVkIGJlbG93IGZvcgogIG90aGVyIE9TZXMuIEhlIG1hZGUgYy1hcmVzIGNoZWNrIGZvciBhbmQgdW5kZXJzdGFuZCBpdCBpZiBwcmVzZW50LgoKLSBOb3cgYy1hcmVzIHdpbGwgdXNlIGxvY2FsIGhvc3QgbmFtZSBsb29rdXAgX2JlZm9yZV8gRE5TIHJlc29sdmluZyBieSBkZWZhdWx0CiAgaWYgbm90aGluZyBlbHNlIGlzIHRvbGQuCgoqIFNlcHRlbWJlciAyNgoKLSBIZW5yaWsgU3RvZXJuZXI6IGZvdW5kIG91dCB0aGF0IGMtYXJlcyBkb2VzIG5vdCBsb29rIGF0IHRoZSAvZXRjL2hvc3QuY29uZgogIGZpbGUgdG8gZGV0ZXJtaW5lIHRoZSBzZXF1ZW5jZSBpbiB3aGljaCB0byBzZWFyY2ggL2V0Yy9ob3N0cyBhbmQgRE5TLiAgU28gb24KICBzeXN0ZW1zIHdoZXJlIHRoaXMgb3JkZXIgaXMgZGVmaW5lZCBieSAvZXRjL2hvc3QuY29uZiBpbnN0ZWFkIG9mIGEgImxvb2t1cCIKICBlbnRyeSBpbiAvZXRjL3Jlc29sdi5jb25mLCBjLWFyZXMgd2lsbCBhbHdheXMgZGVmYXVsdCB0byBsb29raW5nIGluIEROUwogIGZpcnN0LCBhbmQgL2V0Yy9ob3N0cyBzZWNvbmQuCgogIGMtYXJlcyBub3cgbG9va3MgYXQKCiAgMSkgcmVzb2x2LmNvbmYgKGZvciB0aGUgImxvb2t1cCIgbGluZSk7CiAgMikgbnNzd2l0Y2guZm9uIChmb3IgdGhlICJob3N0czoiIGxpbmUpOwogIDMpIGhvc3QuY29uZiAoZm9yIHRoZSAib3JkZXIiIGxpbmUpLgoKICBGaXJzdCBtYXRjaCB3aW5zLgoKLSBEb21pbmljayBNZWdsaW8gcGF0Y2hlZDogQy1hcmVzIG9uIFdpbmRvd3MgYXNzdW1lZCB0aGF0IHRoZSBIT1NUUyBmaWxlIGlzCiAgbG9jYXRlZCBpbiBhIHN0YXRpYyBsb2NhdGlvbi4gSXQgYXNzdW1lZAogIEM6XFdpbmRvd3NcU3lzdGVtMzJcRHJpdmVyc1xFdGMuIFRoaXMgaXMgYSBwb29yIGFzc3VtcHRpb24gdG8gbWFrZS4gSW4gZmFjdCwKICB0aGUgbG9jYXRpb24gb2YgdGhlIEhPU1RTIGZpbGUgY2FuIGJlIGNoYW5nZWQgdmlhIGEgcmVnaXN0cnkgc2V0dGluZy4KCiAgVGhlcmUgaXMgYSBrZXkgY2FsbGVkIERhdGFiYXNlUGF0aCB3aGljaCBzcGVjaWZpZXMgdGhlIHBhdGggdG8gdGhlIEhPU1RTCiAgZmlsZToKICBodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vdGVjaG5ldC9pdHNvbHV0aW9ucy9uZXR3b3JrL2RlcGxveS9kZXBvdmcvdGNwaXAyay5tc3B4CgogIFRoZSBwYXRjaCB3aWxsIG1ha2UgYy1hcmVzIGNvcnJlY3RseSBjb25zdWx0IHRoZSByZWdpc3RyeSBmb3IgdGhlIGxvY2F0aW9uCiAgb2YgdGhpcyBmaWxlLgoKKiBBdWd1c3QgMjkKCi0gR2lzbGUgVmFuZW0gZml4ZWQgdGhlIE1TVkMgYnVpbGQgZmlsZXMuCgoqIEF1Z3VzdCAyMAoKLSBHaXNsZSBWYW5lbSBtYWRlIGMtYXJlcyBidWlsZCBhbmQgd29yayB3aXRoIGhpcyBXYXR0LTMyIFRDUC9JUCBzdGFjay4KCiogQXVndXN0IDEzCgotIEhhcnNoYWwgUHJhZGhhbiBtYWRlIGEgbWlub3Igc3ludGF4IGNoYW5nZSBpbiBhcmVzX2luaXQuYyB0byBtYWtlIGl0IGJ1aWxkCiAgZmluZSB3aXRoIE1TVkMgNy4xCgoqIEp1bHkgMjQKCi0gTWFkZSB0aGUgbGliIGdldCBidWlsdCBzdGF0aWMgb25seSBpZiAtLWVuYWJsZS1kZWJ1ZyBpcyB1c2VkLgoKLSBHaXNsZSBWYW5lbSBmaXhlZDoKCiAgQmFzaWNhbGx5IGluIGxvb3BzIGxpa2UgaGFuZGxlX2Vycm9ycygpLCAncXVlcnktPm5leHQnIHdhcyBhc3NpZ25lZCBhIGxvY2FsCiAgdmFyaWFibGUgYW5kIHRoZW4gcXVlcnkgd2FzIHJlZmVyZW5jZWQgYWZ0ZXIgdGhlIG1lbW9yeSB3YXMgZnJlZWQgYnkKICBuZXh0X3NlcnZlcigpLiBJJ3ZlIGNoYW5nZWQgdGhhdCBzbyBuZXh0X3NlcnZlcigpIGFuZCBlbmRfcXVlcnkoKSByZXR1cm5zCiAgdGhlIG5leHQgcXVlcnkuIFNvIGNhbGxlcnMgc2hvdWxkIHVzZSB0aGlzIHJldC12YWx1ZS4KCiAgVGhlIG5leHQgcHJvYmxlbSB3YXMgdGhhdCAnc2VydmVyLT50Y3BfYnVmZmVyX3BvcycgaGFkIGEgcmFuZG9tIHZhbHVlIGF0CiAgZW50cnkgdG8gMXN0IHJlY3YoKSAobHVja2lseSBjYXVzaW5nIFdpbnNvY2sgdG8gcmV0dXJuIEVOT0JVRlMpLgoKICBJJ3ZlIGFsc28gYWRkZWQgYSBhcmVzX3dyaXRldigpIGZvciBXaW5kb3dzIHRvIHN0cmVhbWxpbmUgdGhlIGNvZGUgYSBiaXQKICBtb3JlLgoKKiBKdWx5IDIwCi0gRml4ZWQgYSBmZXcgdmFyaWFibGUgcmV0dXJuIHR5cGVzIGZvciBzb21lIHN5c3RlbSBjYWxscy4gTWFkZSBjb25maWd1cmUKICBjaGVjayBmb3Igc3NpemVfdCB0byBtYWtlIGl0IHBvc3NpYmxlIHRvIHVzZSB0aGF0IHdoZW4gcmVjZWl2aW5nIHRoZSBzZW5kKCkKICBlcnJvciBjb2RlLiBUaGlzIGlzIG5lY2Vzc2FyeSB0byBwcmV2ZW50IGNvbXBpbGVyIHdhcm5pbmdzIG9uIHNvbWUgc3lzdGVtcy4KCi0gTWFkZSBjb25maWd1cmUgY3JlYXRlIGNvbmZpZy5oLCBhbmQgYWxsIHNvdXJjZSBmaWxlcyBub3cgaW5jbHVkZSBzZXR1cC5oIHRoYXQKICBtaWdodCBpbmNsdWRlIHRoZSBwcm9wZXIgY29uZmlnLmggKG9yIGEgaGFuZGljcmFmdGVkIGFsdGVybmF0aXZlKS4KCi0gU3dpdGNoZWQgdG8gJ2FyZXNfc29ja2V0X3QnIHR5cGUgZm9yIHNvY2tldHMgaW4gYXJlcywgc2luY2UgV2luZG93cyBkb24ndAogIHVzZSAnaW50JyBmb3IgdGhhdC4KCi0gYXV0b21ha2UtaWZpZWQgYW5kIGxpYm9vbC1pZmllZCBjLWFyZXMuIE5vdyBpdCBidWlsZHMgbGliY2FyZXMgYXMgYSBzaGFyZWQKICBsaWIgb24gbW9zdCBwbGF0Zm9ybXMgaWYgd2FudGVkLiAoVGhpcyBibG9hdGVkIHRoZSBzaXplIG9mIHRoZSByZWxlYXNlCiAgYXJjaGl2ZSB3aXRoIGFub3RoZXIgMjAwSyEpCgotIE1ha2VmaWxlLmFtIG5vdyB1c2VzIE1ha2VmaWxlLmluYyBmb3IgdGhlIGMgc291cmNlcywgaCBoZWFkZXJzIGFuZCBtYW4KICBwYWdlcywgdG8gbWFrZSBpdCBlYXNpZXIgZm9yIG90aGVyIG1ha2VmaWxlcyB0byB1c2UgdGhlIGV4YWN0IHNhbWUgc2V0IG9mCiAgZmlsZXMuCgotIEFkanVzdGVkICdtYWtldGd6JyB0byB1c2UgdGhlIG5ldyBhdXRvbWFrZSBtYWdpYyB3aGVuIGJ1aWxkaW5nIGRpc3RyaWJ1dGlvbgogIGFyY2hpdmVzLgoKLSBBbnlvbmUgZGVzaXJlcyBIVE1MIGFuZC9vciBQREYgdmVyc2lvbnMgb2YgdGhlIG1hbiBwYWdlcyBpbiB0aGUgcmVsZWFzZQogIGFyY2hpdmVzPwoKKiBKdWx5IDMKLSBH/G50ZXIgS25hdWYgbWFkZSBjLWFyZXMgYnVpbGQgYW5kIHJ1biBvbiBOb3ZlbGwgTmV0d2FyZS4KCiogSnVseSAxCi0gR2lzbGUgVmFuZW0gcHJvdmlkZWQgTWFrZWZpbGUuZGogdG8gYnVpbGQgd2l0aCBkamdwcCwgYWRkZWQgYSBmZXcgbW9yZSBkamdwcAogIGZpeGVzIGFuZCBtYWRlIGFyZXMgbm90IHVzZSAnZXJybm8nIHRvIHByb3ZpZGUgZnVydGhlciBpbmZvIG9uIFdpbmRvd3MuCgoqIEp1bmUgMzAKLSBHaXNsZSBWYW5lbSBtYWRlIGl0IGJ1aWxkIHdpdGggZGpncHAgYW5kIHJ1biBmaW5lIHdpdGggdGhlIFdhdHQtMzIgc3RhY2suCgoqIEp1bmUgMTAKLSBHaXNsZSBWYW5lbSdzIGluaXQgcGF0Y2ggZm9yIFdpbmRvd3M6CgogIFRoZSBpbml0X2J5X3Jlc29sdl9jb25mKCkgZnVuY3Rpb24gZmV0Y2hlcyB0aGUgRE5TLXNlcnZlcihzKQogIGZyb20gYSBzZXJpZXMgb2YgcmVnaXN0cnkgYnJhbmNoZXMuCgogIFRoaXMgY2FuIGJlIHdyb25nIGluIHRoZSBjYXNlIHdoZXJlIERIQ1AgaGFzIGFzc2lnbmVkIG5hbWVzZXJ2ZXJzLCBidXQgdGhlCiAgdXNlciBoYXMgb3ZlcnJpZGRlbiB0aGVzZSBzZXJ2ZXJzIHdpdGggb3RoZXIgcHJlZmVyZWQgc2V0dGluZ3MuIFRoZW4gaXQncwogIHdyb25nIHRvIHVzZSB0aGUgREhDUE5BTUVTRVJWRVIgc2V0dGluZyBpbiByZWdpc3RyeS4KCiAgSW4gdGhlIGNhc2Ugb2Ygbm8gZ2xvYmFsIERIQ1AtYXNzaWduZWQgb3IgZml4ZWQgc2VydmVycywgYnV0IEROUyBzZXJ2ZXIocykKICBwZXIgYWRhcHRlciwgb25lIGhhcyB0byBxdWVyeSB0aGUgYWRhcHRlciBicmFuY2hlcy4gIEJ1dCBob3cgY2FuIGMtYXJlcyBrbm93CiAgd2hpY2ggYWRhcHRlciBpcyB2YWxpZCBmb3IgdXNlPyBBRkFJQ1MgaXQgY2FuJ3QuIFRoZXJlIGNvdWxkIGJlIG9uZSBhZGFwdGVyCiAgdGhhdCBpcyBkb3duIChlLmcuIGEgVlBOIGFkYXB0ZXIpLgoKICBTbyBpdCdzIGJldHRlciB0byBsZWF2ZSB0aGlzIHRvIHRoZSBJUCBIZWxwZXIgQVBJIChpcGhsYXBpKSBhdmFpbGFibGUgaW4KICBXaW4tOTgvMjAwMCBhbmQgbGF0ZXIuIE15IHBhdGNoIGZhbGxzLWJhY2sgdG8gdGhlIG9sZCB3YXkgaWYgbm90IGF2YWlsYWJsZS4KCiogSnVuZSA4Ci0gSmFtZXMgQnVyc2EgZml4ZWQgYW4gaW5pdCBpc3N1ZSBmb3IgUklTQyBPUy4KCiogTWF5IDExCi0gTmljbyBTdGFwcGVuYmVsdCByZXBvcnRlZCB0aGF0IHdoZW4gcHJvY2Vzc2luZyBkb21haW4gYW5kIHNlYXJjaCBsaW5lcyBpbgogIHRoZSByZXNvbHYuY29uZiBmaWxlLCB0aGUgZmlyc3QgZW50cnkgZW5jb3VudGVyZWQgaXMgcHJvY2Vzc2VkIGFuZCB1c2VkIGFzCiAgdGhlIHNlYXJjaCBsaXN0LiBBY2NvcmRpbmcgdG8gdGhlIG1hbnVhbCBwYWdlcyBmb3IgYm90aCBMaW51eCwgU29sYXJpcyBhbmQKICBUcnU2NCwgdGhlIGxhc3QgZW50cnkgb2YgZWl0aGVyIGEgZG9tYWluIG9yIGEgc2VhcmNoIGZpZWxkIGlzIHVzZWQuCgogIFRoaXMgaXMgbm93IGFkanVzdGVkIGluIHRoZSBjb2RlCgpWZXJzaW9uIDEuMi4wIChBcHJpbCAxMywgMjAwNCkKCiogQXByaWwgMiwgMjAwNAotIFVwZGF0ZWQgdmFyaW91cyBtYW4gcGFnZXMgdG8gbG9vayBuaWNlciB3aGVuIGNvbnZlcnRlZCB0byBIVE1MIG9uIHRoZSB3ZWIKICBzaXRlLgoKKiBBcHJpbCAxLCAyMDA0Ci0gRGlyayBNYW5za2UgcHJvdmlkZWQgYSBuZXcgZnVuY3Rpb24gdGhhdCBpcyBub3cgbmFtZWQgYXJlc19jYW5jZWwoKS4gSXQgaXMKICB1c2VkIHRvIGNhbmNlbC9jbGVhbnVwIGEgcmVzb2x2ZS9yZXF1ZXN0IG1hZGUgdXNpbmcgYXJlcyBmdW5jdGlvbnMgb24gdGhlCiAgZ2l2ZW4gYXJlcyBjaGFubmVsLiBJdCBkb2VzIG5vdCBkZXN0cm95L2tpbGwgdGhlIGFyZXMgY2hhbm5lbCBpdHNlbGYuCgotIERvbWluaWNrIE1lZ2xpbyBjbGVhbmVkIHVwIHRoZSBmb3JtYXR0aW5nIGluIHNldmVyYWwgbWFuIHBhZ2VzLgoKKiBNYXJjaCAzMCwgMjAwNAotIERvbWluaWNrIE1lZ2xpbydzIG5ldyBhcmVzX2V4cGFuZF9zdHJpbmcuIEEgaGVscGVyIGZ1bmN0aW9uIHdoZW4gZGVjb2RpbmcKICBpbmNvbWluZyBETlMgcGFja2FnZXMuCgotIERhbmllbCBTdGVuYmVyZyBtb2RpZmllZCB0aGUgTWFrZWZpbGUuaW4gdG8gdXNlIGEgZm9yIGxvb3AgZm9yIHRoZSBtYW4gcGFnZQogIGluc3RhbGxhdGlvbiB0byBpbXByb3ZlIG92ZXJ2aWV3IGFuZCBtYWtlIGl0IGVhc2llciB0byBhZGQgbWFuIHBhZ2VzLgoKVmVyc2lvbiAxLjEuMCAoTWFyY2ggMTEsIDIwMDQpCgoqIE1hcmNoIDksIDIwMDQKLSBHaXNsZSBWYW5lbSBpbXByb3ZlZCBidWlsZCBvbiBXaW5kb3dzLgoKKiBGZWJydWFyeSAyNSwgMjAwNAotIERhbiBGYW5kcmljaCBmb3VuZCBhIGZsYXcgaW4gdGhlIEZlYiAyMiBmaXguCgotIEFkZGVkIGJldHRlciBjb25maWd1cmUgLS1lbmFibGUtZGVidWcgbG9naWMgKHRha2VuIGZyb20gdGhlIGN1cmwgY29uZmlndXJlCiAgc2NyaXB0KS4gQWRkZWQgYWNpbmNsdWRlLm00IHRvIHRoZSB0YXJiYWxsLgoKKiBGZWJydWFyeSAyMywgMjAwNAotIFJlbW92ZWQgYXJlc19mcmVlX2Vycm1lbSgpLCB0aGUgZnVuY3Rpb24sIHRoZSBmaWxlIGFuZCB0aGUgbWFuIHBhZ2UuIEl0IHdhcwogIG5vdCB1c2VkIGFuZCBpdCBkaWQgbm90aGluZy4KCi0gRml4ZWQgYSBsb3Qgb2YgY29kZSB0aGF0IHdhc24ndCAiNjRiaXQgY2xlYW4iIGFuZCB0aHVzIGNhdXNlZCBhIGxvdCBvZgogIGNvbXBpbGVyIHdhcm5pbmdzIG9uIHBpY2t5IGNvbXBpbGVycy4KCiogRmVicnVhcnkgMjIsIDIwMDQKLSBEb21pbmljayBNZWdsaW8gbWFkZSBhcmVzIGluaXQgc3VwcG9ydCBtdWx0aXBsZSBuYW1lIHNlcnZlcnMgaW4gdGhlCiAgTmFtZVNlcnZlciBrZXkgb24gV2luZG93cy4KCiogRmVicnVhcnkgMTYsIDIwMDQKLSBNb2RpZmllZCBhcmVzX3ByaXZhdGUuaCB0byBpbmNsdWRlIGxpYmN1cmwncyBtZW1vcnkgZGVidWcgaGVhZGVyIGlmCiAgQ1VSTERFQlVHIGlzIHNldC4gVGhpcyBtYWtlcyBhbGwgdGhlIGFyZXMtZnVuY3Rpb25zIHN1cGVydmlzZWQgcHJvcGVybHkgYnkKICB0aGUgY3VybCB0ZXN0IHN1aXRlLiBUaGlzIGFsc28gZm9yY2VkIG1lIHRvIGFkZCBpbmNsdXNpb24gb2YgdGhlCiAgYXJlc19wcml2YXRlLmggaGVhZGVyIGluIGEgZmV3IG1vcmUgZmlsZXMgdGhhdCBhcmUgdXNpbmcgc29tZSBraW5kIG9mCiAgbWVtb3J5LXJlbGF0ZWQgcmVzb3VyY2VzLgoKLSBNYWRlIHRoZSBtYWtlZmlsZSBvbmx5IGJ1aWxkIGFob3N0IGFuZCBhZGlnIGlmICdtYWtlIGRlbW9zJyBpcyB1c2VkLgoKKiBGZWJydWFyeSAxMCwgMjAwNAotIERpcmsgTWFuc2tlIG1hZGUgYXJlc192ZXJzaW9uLmggaW5zdGFsbGVkIHdpdGggJ21ha2UgaW5zdGFsbCcKCiogRmVicnVhcnkgNCwgMjAwNAotIGFyZXNfZnJlZV9lcnJtZW0oKSBpcyBzdWJqZWN0IGZvciByZW1vdmFsLCBpdCBpcyBzaW1wbHkgcHJlc2VudCBmb3IgZnV0dXJlCiAgcHVycG9zZXMsIGFuZCBzaW5jZSB3ZSByZW1vdmVkIHRoZSBleHRyYSBwYXJhbWV0ZXIgaW4gc3RyZXJyb3IoKSBpdCB3b24ndAogIGJlIHVzZWQgYnkgYy1hcmVzIQotIGNvbmZpZ3VyZSAtLWVuYWJsZS1kZWJ1ZyBub3cgZW5hYmxlcyBwaWNreSBjb21waWxlciBvcHRpb25zIGlmIGdjYyBpcyB1c2VkCi0gZml4ZWQgc2V2ZXJhbCBjb21waWxlciB3YXJuaW5ncyAtLWVuYWJsZS1kZWJ1ZyBzaG93ZWQgYW5kIEpvZXJnIE11ZWxsZXItVG9sawogIHJlcG9ydGVkCgpWZXJzaW9uIDEuMC4wIChGZWJydWFyeSAzLCAyMDA0KQoKKiBGZWJydWFyeSAzLCAyMDA0Ci0gbm93IHdlIHByb2R1Y2UgdGhlIGxpYmNhcmVzLmEgbGlicmFyeSBpbnN0ZWFkIG9mIHRoZSBwcmV2aW91cyBsaWJhcmVzLmEKICBzaW5jZSB3ZSBhcmUgbm8gbG9uZ2VyIGNvbXBhdGlibGUKCiogRmVicnVhcnkgMiwgMjAwNAoKLSBhcmVzX3N0cmVycm9yKCkgaGFzIG9uZSBhcmd1bWVudCBsZXNzLiBUaGlzIGlzIHRoZSBmaXJzdCBvZmZpY2lhbAogIG1vZGlmaWNhdGlvbiBvZiB0aGUgZXhpc3RpbmcgcHJvdmlkZWQgYXJlcyBBUEkuCgoqIEphbnVhcnkgMjksIDIwMDQKCi0gRGlyayBNYW5za2UgZml4ZWQgaG93IHRoZSBzb2NrZXQgaXMgc2V0IG5vbi1ibG9ja2luZy4KCiogSmFudWFyeSA0LCAyMDA0CgotIERvbWluaWNrIE1lZ2xpbyBtYWRlIHRoZSBwcml2YXRlIGdldHRpbWVvZmRheSgpIGJlY29tZSBhcmVzX2dldHRpbWVvZmRheSgpCiAgaW5zdGVhZCBpbiBvcmRlciB0byBub3QgcG9sbHV0ZSB0aGUgbmFtZSBzcGFjZSBhbmQgcmlzayBjb2xsaWRpbmcgd2l0aAogIG90aGVyIGxpYnJhcmllcycgdmVyc2lvbnMgb2YgdGhpcyBmdW5jdGlvbi4KCiogT2N0b2JlciAyNCwgMjAwMy4gRGFuaWVsIFN0ZW5iZXJnCgogIEFkZGVkIGFyZXNfdmVyc2lvbigpLgoKVmVyc2lvbiAxLjAtcHJlMSAoOCBPY3RvYmVyIDIwMDMpCgotIEphbWVzIEJ1cnNhIG1hZGUgaXQgcnVuIG9uIFJJU0MgT1MKCi0gRG9taW5pY2sgTWVnbGlvIG1hZGUgaXQgcnVuIGZpbmUgb24gTlQ0CgotIER1bmNhbiBXaWxjb3ggbWFkZSBpdCB3b3JrIGZpbmUgb24gTWFjIE9TIFgKCi0gRGFuaWVsIFN0ZW5iZXJnIGFkanVzdGVkIHRoZSB3aW5kb3dzIHBvcnQKCi0gbGlyZW4gYXQgdml2aXNpbW8uY29tIG1hZGUgdGhlIGluaXRpYWwgd2luZG93cyBwb3J0CgoqIEltcG9ydGVkIHRoZSBzb3VyY2VzIGZyb20gYXJlcyAxLjEuMQo=