PGh0bWw+CjxoZWFkPgoJPHRpdGxlPkJPT1NUX1BQX0FERF9EPC90aXRsZT4KCTxsaW5rIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIGhyZWY9Ii4uL3N0eWxlcy5jc3MiPgo8L2hlYWQ+Cjxib2R5PgoJPGRpdiBzdHlsZT0ibWFyZ2luLWxlZnQ6ICAwcHg7Ij4KCQlUaGUgPGI+Qk9PU1RfUFBfQUREX0Q8L2I+IG1hY3JvIGV4cGFuZHMgdG8gdGhlIHN1bSBvZiBpdHMgc2Vjb25kIGFuZCB0aGlyZCBhcmd1bWVudHMuJm5ic3A7CgkJSXQgcmVlbnRlcnMgPGI+Qk9PU1RfUFBfV0hJTEU8L2I+IHdpdGggbWF4aW11bSBlZmZpY2llbmN5LgoJPC9kaXY+Cgk8aDQ+VXNhZ2U8L2g0PgoJCTxkaXYgY2xhc3M9ImNvZGUiPgoJCQk8Yj5CT09TVF9QUF9BRERfRDwvYj4oPGk+ZDwvaT4sIDxpPng8L2k+LCA8aT55PC9pPikKCQk8L2Rpdj4KCTxoND5Bcmd1bWVudHM8L2g0PgoJCTxkbD4KCQkJPGR0PmQ8L2R0PgoJCQk8ZGQ+CgkJCQlUaGUgbmV4dCBhdmFpbGFibGUgPGI+Qk9PU1RfUFBfV0hJTEU8L2I+IGl0ZXJhdGlvbi4mbmJzcDsKCQkJPC9kZD4KCQkJPGR0Png8L2R0PgoJCQk8ZGQ+CgkJCQlUaGUgZmlyc3QgYWRkZW5kIG9mIHRoZSBvcGVyYXRpb24uJm5ic3A7CgkJCQlWYWxpZCB2YWx1ZXMgcmFuZ2UgZnJvbSA8aT4wPC9pPiB0byA8Yj5CT09TVF9QUF9MSU1JVF9NQUc8L2I+LgoJCQk8L2RkPgoJCQk8ZHQ+eTwvZHQ+CgkJCTxkZD4KCQkJCVRoZSBzZWNvbmQgYWRkZW5kIG9mIHRoZSBvcGVyYXRpb24uJm5ic3A7CgkJCQlWYWxpZCB2YWx1ZXMgcmFuZ2UgZnJvbSA8aT4wPC9pPiB0byA8Yj5CT09TVF9QUF9MSU1JVF9NQUc8L2I+LgoJCQk8L2RkPgoJCTwvZGw+Cgk8aDQ+UmVtYXJrczwvaDQ+CgkJPGRpdj4KCQkJSWYgdGhlIHN1bSBvZiA8aT54PC9pPiBhbmQgPGk+eTwvaT4gaXMgZ3JlYXRlciB0aGFuIDxiPkJPT1NUX1BQX0xJTUlUX01BRzwvYj4sIHRoZSByZXN1bHQgaXMgc2F0dXJhdGVkIHRvIDxiPkJPT1NUX1BQX0xJTUlUX01BRzwvYj4uCgkJPC9kaXY+CgkJPGRpdj4KCQkJVGhpcyBtYWNybyBpcyB0aGUgbW9zdCBlZmZpY2llbnQgd2hlbiA8aT54PC9pPiBpcyBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gPGk+eTwvaT4uJm5ic3A7CgkJCUhvd2V2ZXIsIHRoZSBlZmZpY2llbmN5IGdhaW4gaXMgbm90IHdvcnRoIGFjdHVhbGx5IGNvbXBhcmluZyB0aGUgdHdvIGFyZ3VtZW50cyBwcmlvciB0byBpbnZvY2F0aW9uLiZuYnNwOwoJCQlJbiBvdGhlciB3b3JkcywgPGk+eDwvaT4gc2hvdWxkIGJlIHRoZSBhZGRlbmQgdGhhdCBpcyA8aT5tb3N0IGxpa2VseTwvaT4gdG8gYmUgdGhlIGxhcmdlc3Qgb2YgdGhlIHR3byBvcGVyYW5kcy4KCQk8L2Rpdj4KCTxoND5TZWUgQWxzbzwvaDQ+CgkJPHVsPgoJCQk8bGk+PGEgaHJlZj0iYWRkLmh0bWwiPkJPT1NUX1BQX0FERDwvYT48L2xpPgoJCQk8bGk+PGEgaHJlZj0ibGltaXRfbWFnLmh0bWwiPkJPT1NUX1BQX0xJTUlUX01BRzwvYT48L2xpPgoJCTwvdWw+Cgk8aDQ+UmVxdWlyZW1lbnRzPC9oND4KCQk8ZGl2PgoJCQk8Yj5IZWFkZXI6PC9iPiAmbmJzcDs8YSBocmVmPSIuLi9oZWFkZXJzL2FyaXRobWV0aWMvYWRkLmh0bWwiPiZsdDtib29zdC9wcmVwcm9jZXNzb3IvYXJpdGhtZXRpYy9hZGQuaHBwJmd0OzwvYT4KCQk8L2Rpdj4KCTxoND5TYW1wbGUgQ29kZTwvaDQ+CjxkaXY+PHByZT4KI2luY2x1ZGUgJmx0OzxhIGhyZWY9Ii4uL2hlYWRlcnMvYXJpdGhtZXRpYy9hZGQuaHRtbCI+Ym9vc3QvcHJlcHJvY2Vzc29yL2FyaXRobWV0aWMvYWRkLmhwcDwvYT4mZ3Q7CiNpbmNsdWRlICZsdDs8YSBocmVmPSIuLi9oZWFkZXJzL2FyaXRobWV0aWMvZGVjLmh0bWwiPmJvb3N0L3ByZXByb2Nlc3Nvci9hcml0aG1ldGljL2RlYy5ocHA8L2E+Jmd0OwojaW5jbHVkZSAmbHQ7PGEgaHJlZj0iLi4vaGVhZGVycy9jb250cm9sL3doaWxlLmh0bWwiPmJvb3N0L3ByZXByb2Nlc3Nvci9jb250cm9sL3doaWxlLmhwcDwvYT4mZ3Q7CiNpbmNsdWRlICZsdDs8YSBocmVmPSIuLi9oZWFkZXJzL3R1cGxlL2VsZW0uaHRtbCI+Ym9vc3QvcHJlcHJvY2Vzc29yL3R1cGxlL2VsZW0uaHBwPC9hPiZndDsKCiNkZWZpbmUgUFJFRChkLCBkYXRhKSA8YSBocmVmPSJ0dXBsZV9lbGVtLmh0bWwiPkJPT1NUX1BQX1RVUExFX0VMRU08L2E+KDIsIDAsIGRhdGEpCgojZGVmaW5lIE9QKGQsIGRhdGEpIFwKICAgKCBcCiAgICAgIDxhIGhyZWY9ImRlYy5odG1sIj5CT09TVF9QUF9ERUM8L2E+KCBcCiAgICAgICAgIDxhIGhyZWY9InR1cGxlX2VsZW0uaHRtbCI+Qk9PU1RfUFBfVFVQTEVfRUxFTTwvYT4oMiwgMCwgZGF0YSkgXAogICAgICApLCBcCiAgICAgIDxhIGhyZWY9ImFkZF9kLmh0bWwiPkJPT1NUX1BQX0FERF9EPC9hPiggXAogICAgICAgICBkLCBcCiAgICAgICAgIDxhIGhyZWY9InR1cGxlX2VsZW0uaHRtbCI+Qk9PU1RfUFBfVFVQTEVfRUxFTTwvYT4oMiwgMSwgZGF0YSksIFwKICAgICAgICAgMiBcCiAgICAgICkgXAogICApIFwKICAgLyoqLwoKLy8gaW5jcmVtZW50ICd4JyBieSAyICduJyB0aW1lcwojZGVmaW5lIFNUUklERSh4LCBuKSA8YSBocmVmPSJ0dXBsZV9lbGVtLmh0bWwiPkJPT1NUX1BQX1RVUExFX0VMRU08L2E+KDIsIDEsIDxhIGhyZWY9IndoaWxlLmh0bWwiPkJPT1NUX1BQX1dISUxFPC9hPihQUkVELCBPUCwgKG4sIHgpKSkKClNUUklERSgxMCwgMikgLy8gZXhwYW5kcyB0byAxNApTVFJJREUoNTEsIDYpIC8vIGV4cGFuZHMgdG8gNjMKPC9wcmU+PC9kaXY+Cgk8aHIgc2l6ZT0iMSI+Cgk8ZGl2IHN0eWxlPSJtYXJnaW4tbGVmdDogMHB4OyI+CgkJPGk+qSBDb3B5cmlnaHQgPGEgaHJlZj0iaHR0cDovL3d3dy5ob3VzZW1hcnF1ZS5jb20iIHRhcmdldD0iX3RvcCI+SG91c2VtYXJxdWUgT3k8L2E+IDIwMDI8L2k+CgkJPC9icj48aT6pIENvcHlyaWdodCBQYXVsIE1lbnNvbmlkZXMgMjAwMjwvaT4KCTwvZGl2PgoJPGRpdiBzdHlsZT0ibWFyZ2luLWxlZnQ6IDBweDsiPgoJCTxwPjxzbWFsbD5EaXN0cmlidXRlZCB1bmRlciB0aGUgQm9vc3QgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjAuIChTZWUKCQlhY2NvbXBhbnlpbmcgZmlsZSA8YSBocmVmPSIuLi8uLi8uLi8uLi9MSUNFTlNFXzFfMC50eHQiPkxJQ0VOU0VfMV8wLnR4dDwvYT4gb3IKCQljb3B5IGF0IDxhIGhyZWY9CgkJImh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dCI+d3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQ8L2E+KTwvc21hbGw+PC9wPgoJPC9kaXY+CjwvYm9keT4KPC9odG1sPgo=