ID0tLS0tLS0tLS0tLS0tLQogPQogPSAgVGhlIFRlcm0gUHJvY2Vzc29yIEtpbXdpdHUrKwogPQogPS0tLS0tLS0tLS0tLS0tCgoKS2ltd2l0dSsrIGlzIGEgc3lzdGVtIHRoYXQgc3VwcG9ydHMgdGhlIGNvbnN0cnVjdGlvbiBvZiBwcm9ncmFtcyB0aGF0IHVzZQp0cmVlcyBvciB0ZXJtcyBhcyB0aGVpciBtYWluIGRhdGEgc3RydWN0dXJlLgpGb3IgdGhlIEtpbXdpdHUrKyB3ZWIgc2l0ZSAoaW5jbHVkaW5nIG5ld2VzdCB2ZXJzaW9uKSBoYXZlIGEgbG9vayBhdAppdHMgaG9tZXBhZ2Ugb24gaHR0cDovL3NpdGUuaW5mb3JtYXRpay5odS1iZXJsaW4uZGUva2ltd2l0dSsrLiAKS2ltd2l0dSsrIGlzIGRlcml2ZWQgZnJvbSBLaW13aXR1IDQuNCwgc2VlIGh0dHA6Ly9wdXJsLm9jbGMub3JnL25ldC9raW13aXR1LgoKCgpIb3cgaXMgdGhpcyBkaXN0cmlidXRpb24gc3RydWN0dXJlZD8KCiAgU291cmNlczoKCXNyYy8qCglzcmMvR2VuLmJvb3QvKgoKICAgIFRoZSBUZXJtIFByb2Nlc3NvciB3YXMgbWFkZSB1c2luZyBpdHNlbGYuCiAgICBUaGUgc3JjIGRpcmVjdG9yeSBjb250YWlucyB0aGUgYHJlYWwnICouayAoS2ltd2l0dSsrIGlucHV0KSBzb3VyY2VzLgogICAgVGhlIHNyYy9HZW4uYm9vdCBkaXJlY3RvcnkgY29udGFpbnMgdGhlICoue2gsY2N9IGtjKystZ2VuZXJhdGVkIGZpbGVzCiAgICB0aGF0IHlvdSBuZWVkIHRvIGJvb3RzdHJhcCBpdC4KICAgIEEgc3JjL0dlbi4qIGRpcmVjdG9yeSwgd2hlcmUgKiBpcyB5b3VyIHRhcmdldCBhcmNoaXRlY3R1cmUsIHdpbGwgYmUKICAgIGNyZWF0ZWQgd2hpbGUga2MrKyBpcyBiZWluZyBtYWRlLiBJdCB3aWxsIGNvbnRhaW4gKGxpbmtzIHRvKSB0aGUKICAgIGtjLWdlbmVyYXRlZCBmaWxlcyB1c2VkIGZvciBib290LXN0cmFwcGluZywgdGhlIGNvbXBpbGVkIC5vIGZpbGVzCiAgICBhbmQgdGhlIGxpbmtlZCBiaW5hcnkgZXhlY3V0YWJsZSBrYysrLgoKICBNYW51YWw6CgltYW4vbWFuL2tjKysuMQoKICAgIFRlbGxzIHlvdSBhbGwgeW91IG5lZWQgdG8ga25vdyB0byBpbnZva2Uga2MrKyAoS2ltd2l0dSsrKS4KCiAgRG9jdW1lbnRhdGlvbjoKCWRvYy8qCgogICAgVGhlIGRvY3VtZW50YXRpb24gaXMgbm90IHlldCBhdmFpYWJsZS4gWW91IGNhbiB1c2UgdGhlIGRvY3VtZW50YXRpb24KICAgIGZvciBLaW13aXR1IGluc3RlYWQsIHVzaW5nIGEgc2hvcnQga2MtPmtjKysgdHJhbnNpdGlvbiBndWlkZS4KCgpIb3cgZG8gSSBpbnN0YWxsIEtpbXdpdHU/CgogIFBsZWFzZSByZWZlciB0byBJTlNUQUxMLgoKCldoaWNoIGFyY2hpdGVjdHVyZXMgYXJlIHN1cHBvcnRlZD8KCiAgS2ltd2l0dSsrIGp1c3QgcmVhZHMgYW5kIHdyaXRlcyB0ZXh0IGZpbGVzLCBpbiBwcmluY2lwbGUgaXQgc2hvdWxkIHJ1bgogIG9uIGFueSBhcmNoaXRlY3R1cmUgeW91IGNhbiB0aGluayBvZi4KICBEZXZlbG9wbWVudCBpcyBkb25lIG1haW5seSBvbiBTb2xhcmlzIGFuZCBHTlUvTGludXgsIHRoZXNlIHdpbGwgYmUgc3VwcG9ydGVkCiAgYmVzdC4gUHJvYmFibHkgYWxzbyBXaW5kb3dzIE5ULgoKCkRvIEkgbmVlZCBhIHJ1bm5pbmcgS2ltd2l0dSsrIHRvIGluc3RhbGwgS2ltd2l0dSsrPwoKICBObywgeW91IGRvbid0LiBzcmMgZGlyZWN0b3J5IGNvbnRhaW5zIGV2ZXJ5dGhpbmcgbmVlZGVkIHRvIGJvb3RzdHJhcAogIEtpbXdpdHUrKy4KCgpXaHkgZG8geW91IGJvdGhlciBtZSB3aXRoIGFsbCB0aGlzIG5vbi1zZW5zZSBhYm91dCBib290c3RyYXBwaW5nIGFuZCBhbGw/CgogIElmIHlvdSBldmVyIG5lZWQgdG8gYXBwbHkgYSBwYXRjaCwgeW91IHdpbGwgbmVlZCB0byBrbm93IGhvdyB0byBjaGFuZ2UKICBLaW13aXR1KyssIGFuZCB5b3Ugd2lsbCBuZWVkIHRoZSBgcmVhbCcgKi5rIHNvdXJjZXMgb2YgS2ltd2l0dSsrLCBub3QgdGhlCiAgZ2VuZXJhdGVkICoue2gsY2N9IHN0dWZmIGluIHNyYy4KCgpIb3cgZG8gSSBtYWtlIGNoYW5nZXMgaW4gS2ltd2l0dSsrPwoKICBZb3UgZG9uJ3Qgd2FudCB0by4gWW91IGFzayB1cyB0byBjaGFuZ2UgS2ltd2l0dSsrIGlmIHlvdSBmaW5kIGFueXRoaW5nIHRoYXQKICBuZWVkcyB0byBiZSBjaGFuZ2VkLgoKICBCdXQsIGlmIHlvdSBuZWVkIHRvIGNoYW5nZSBhbnl0aGluZyBpbiB0aGUgc291cmNlcyBvZiBLaW13aXR1KyssIHlvdSBzaG91bGQKICBtYWtlIHlvdXIgY2hhbmdlIGluIHRoZSBzcmMgZGlyZWN0b3J5LCAqbm90KiBpbiB0aGUgR2VuLiogZGlyZWN0b3J5LCBiZWNhdXNlCiAgdGhlIGNvbnRlbnRzIG9mIHRoYXQgZGlyZWN0b3J5IHdpbGwgYmUgb3ZlcndyaXR0ZW4gZHVyaW5nIHRoZSBtYWtpbmcgb2YgdGhlCiAgbmV3IEtpbXdpdHUrKy4KICBOb3RlIHRoYXQgaW4gdGhpcyBjYXNlIHlvdSB3aWxsICpuZWVkKiBhIHJ1bm5pbmcgS2ltd2l0dSsrIHRvIGJ1aWxkIHRoZSBuZXcKICBvbmUuIEFmdGVyIG1ha2luZyB5b3VyIGNoYW5nZXMsIGV4ZWN1dGUgYG1ha2UnIG9yIGBtYWtlIHMxJyBpbiB0aGUgc3JjCiAgZGlyZWN0b3J5LiBJZiBldmVyeXRoaW5nIGlzIG9rLCB5b3Ugd2lsbCBmaW5kIGEgbmV3IGJpbmFyeSBzcmMvR2VuLiova2MrK19zMS4KCgpXaG8gc2hvdWxkIEkgY29udGFjdCBpZiBJIGZpbmQgYW55dGhpbmcgdGhhdCBuZWVkcyB0byBiZSBjaGFuZ2VkPwooT3IgaGF2ZSBvdGhlciBxdWVzdGlvbnMgcmVsYXRlZCB0byBLaW13aXR1KysuKQoKICBGb3Igb3JpZ2luYWwgS2ltd2l0dSBpdCBpczoKICAgIEF4ZWwgQmVsaW5mYW50ZSA8YmVsaW5mYW5AY3MudXR3ZW50ZS5ubD4gdGVsLiAgKzMxLzUzIDQ4OTM3NzQKICAgIFlvdSBjYW4gY29udGFjdCBtZSBmb3IgYW55IHF1ZXN0aW9uIHJlbGF0ZWQgdG8gS2ltd2l0dS4KCiAgRm9yIEtpbXdpdHUrKywgcGxlYXNlIGNvbnRhY3Q6CiAgICBNYXJ0aW4gdm9uIEz2d2lzIDxsb2V3aXNAaW5mb3JtYXRpay5odS1iZXJsaW4uZGU+IG9yCiAgICBNaWNoYWVsIFBpZWZlbCA8cGllZmVsQGluZm9ybWF0aWsuaHUtYmVybGluLmRlPiwKICAgIGJvdGggZnJvbSBIdW1ib2xkdC1Vbml2ZXJzaXR5LCBCZXJsaW4KCgpXaGF0IGlzIHRoZSBsaWNlbmNlPwogIAogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbmNlLCBvcgogIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAgUGxlYXNlIHJlZmVyIHRvIHRoZSBmaWxlIEdQTCBjb250YWluaW5nIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpbgogIHZlcnNpb24gMi4gVGhlIHRlcm1zIG9mIHRoZSBsaWNlbmNlIGFsbG93IHRoZSBkZXZlbG9wbWVudCBvZiBjb21tZXJjaWFsCiAgc29mdHdhcmUgd2l0aCBLaW13aXR1KysuCgo=