PGh0bWw+CjxoZWFkPgoJPHRpdGxlPkJPT1NUX1BQX0lOQ0xVREVfU0VMRjwvdGl0bGU+Cgk8bGluayByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiBocmVmPSIuLi9zdHlsZXMuY3NzIj4KPC9oZWFkPgo8Ym9keT4KCTxkaXYgc3R5bGU9Im1hcmdpbi1sZWZ0OiAgMHB4OyI+CgkJVGhlIDxiPkJPT1NUX1BQX0lOQ0xVREVfU0VMRjwvYj4gbWFjcm8gaW5jbHVkZXMgYSBmaWxlIGluZGlyZWN0bHkuCgk8L2Rpdj4KCTxoND5Vc2FnZTwvaDQ+CgkJPGRpdiBjbGFzcz0iY29kZSI+CgkJCSNpbmNsdWRlIDxiPkJPT1NUX1BQX0lOQ0xVREVfU0VMRjwvYj4oKQoJCTwvZGl2PgoJPGg0PkFyZ3VtZW50czwvaDQ+CgkJPGRsPgoJCQk8ZHQ+ZmlsZW5hbWU8L2R0PgoJCQk8ZGQ+CgkJCQlBIHF1b3RlZCBvciBhbmdsZS1icmFja2V0ZWQgZmlsZW5hbWUgdG8gYmUgaW5jbHVkZWQgYnkgPGI+Qk9PU1RfUFBfSU5DTFVERV9TRUxGPC9iPi4KCQkJPC9kZD4KCQk8L2RsPgoJPGg0PlJlbWFya3M8L2g0PgoJCTxkaXY+CgkJCTxiPkJPT1NUX1BQX0lORElSRUNUX1NFTEY8L2I+IG11c3QgYmUgZGVmaW5lZCBwcmlvciB0byB1c2luZyB0aGlzIG1hY3JvLgoJCTwvZGl2PgoJCTxkaXY+CgkJCU1vc3QgcHJlcHJvY2Vzc29ycyB3aWxsIG5vdCBhbGxvdyBhIGZpbGUgdG8gZGlyZWN0bHkgaW5jbHVkZSBpdHNlbGYtLWV2ZW4gd2hlbiB0aGUgZmlsZSBwcm90ZWN0cyBpdHNlbGYgZnJvbSBzdWNoIGEgc2NlbmFyaW8uJm5ic3A7CgkJCVRoaXMgbWFjcm8sIGluIGNvbWJpbmF0aW9uIHdpdGggPGI+Qk9PU1RfUFBfSU5ESVJFQ1RfU0VMRjwvYj4gYWxsb3dzIGEgZmlsZSB0byBpbmNsdWRlIGl0c2VsZiBpbmRpcmVjdGx5LgoJCTwvZGl2PgoJCTxkaXY+CgkJCVdoaWxlIDxiPkJPT1NUX1BQX0lORElSRUNUX1NFTEY8L2I+IGlzIGJlaW5nIGluY2x1ZGVkLCA8Yj5CT09TVF9QUF9JTkNMVURFX1NFTEY8L2I+IGRlZmluZXMgdGhlIG1hY3JvIDxiPkJPT1NUX1BQX0lTX1NFTEZJU0g8L2I+IHRvIDxpPjE8L2k+LiZuYnNwOwoJCQlXaGVuIGl0IHJldHVybnMgZnJvbSB0aGUgaW5jbHVzaW9uLCA8Yj5CT09TVF9QUF9JU19TRUxGSVNIPC9iPiBpcyB1bmRlZmluZWQuCgkJPC9kaXY+Cgk8aDQ+U2VlIEFsc288L2g0PgoJCTx1bD4KCQkJPGxpPjxhIGhyZWY9ImluZGlyZWN0X3NlbGYuaHRtbCI+Qk9PU1RfUFBfSU5ESVJFQ1RfU0VMRjwvYT48L2xpPgoJCQk8bGk+PGEgaHJlZj0iaXNfc2VsZmlzaC5odG1sIj5CT09TVF9QUF9JU19TRUxGSVNIPC9hPjwvbGk+CgkJPC91bD4KCTxoND5SZXF1aXJlbWVudHM8L2g0PgoJCTxkaXY+CgkJCTxiPkhlYWRlcjo8L2I+ICZuYnNwOzxhIGhyZWY9Ii4uL2hlYWRlcnMvaXRlcmF0aW9uL3NlbGYuaHRtbCI+Jmx0O2Jvb3N0L3ByZXByb2Nlc3Nvci9pdGVyYXRpb24vc2VsZi5ocHAmZ3Q7PC9hPgoJCTwvZGl2PgoJPGg0PlNhbXBsZSBDb2RlPC9oND4KPGRpdj48cHJlPgovLyBmaWxlLmgKI2lmICE8YSBocmVmPSJpc19zZWxmaXNoLmh0bWwiPkJPT1NUX1BQX0lTX1NFTEZJU0g8L2E+CgogICAjaWZuZGVmIEZJTEVfSF8KICAgI2RlZmluZSBGSUxFX0hfCgogICAjaW5jbHVkZSAmbHQ7PGEgaHJlZj0iLi4vaGVhZGVycy9pdGVyYXRpb24vc2VsZi5odG1sIj5ib29zdC9wcmVwcm9jZXNzb3IvaXRlcmF0aW9uL3NlbGYuaHBwPC9hPiZndDsKCiAgICNkZWZpbmUgTkFNRSBYCiAgIHN0cnVjdCBOQU1FIHsKICAgICAgLy8gLi4uCiAgICAgICNkZWZpbmUgPGEgaHJlZj0iaW5kaXJlY3Rfc2VsZi5odG1sIj5CT09TVF9QUF9JTkRJUkVDVF9TRUxGPC9hPiAiZmlsZS5oIgogICAgICAjaW5jbHVkZSA8YSBocmVmPSJpbmNsdWRlX3NlbGYuaHRtbCI+Qk9PU1RfUFBfSU5DTFVERV9TRUxGPC9hPigpCiAgIH07CgogICAjZGVmaW5lIE5BTUUgWQogICBzdHJ1Y3QgTkFNRSB7CiAgICAgIC8vIC4uLgogICAgICAjZGVmaW5lIDxhIGhyZWY9ImluZGlyZWN0X3NlbGYuaHRtbCI+Qk9PU1RfUFBfSU5ESVJFQ1RfU0VMRjwvYT4gImZpbGUuaCIKICAgICAgI2luY2x1ZGUgPGEgaHJlZj0iaW5jbHVkZV9zZWxmLmh0bWwiPkJPT1NUX1BQX0lOQ0xVREVfU0VMRjwvYT4oKQogICB9OwoKICAgI2RlZmluZSBOQU1FIFoKICAgc3RydWN0IE5BTUUgewogICAgICAvLyAuLi4KICAgICAgI2RlZmluZSA8YSBocmVmPSJpbmRpcmVjdF9zZWxmLmh0bWwiPkJPT1NUX1BQX0lORElSRUNUX1NFTEY8L2E+ICJmaWxlLmgiCiAgICAgICNpbmNsdWRlIDxhIGhyZWY9ImluY2x1ZGVfc2VsZi5odG1sIj5CT09TVF9QUF9JTkNMVURFX1NFTEY8L2E+KCkKICAgfTsKCiAgICNlbmRpZgoKI2Vsc2UKCiAgICAgIGlubGluZSBib29sIHZhbGlkYXRlKE5BTUUqIHApIHsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgIH0KCiAgICAgIHRlbXBsYXRlJmx0O2NsYXNzIFQmZ3Q7IGJvb2wgdmFsaWRhdGUoVCogcCkgewogICAgICAgICByZXR1cm4gZHluYW1pY19jYXN0Jmx0O05BTUUqJmd0OyhwKTsKICAgICAgfQoKICAgI3VuZGVmIE5BTUUKCiNlbmRpZgo8L3ByZT48L2Rpdj4KCTxociBzaXplPSIxIj4KCTxkaXYgc3R5bGU9Im1hcmdpbi1sZWZ0OiAwcHg7Ij4KCQk8aT6pIENvcHlyaWdodCA8YSBocmVmPSJodHRwOi8vd3d3LmhvdXNlbWFycXVlLmNvbSIgdGFyZ2V0PSJfdG9wIj5Ib3VzZW1hcnF1ZSBPeTwvYT4gMjAwMjwvaT4KCQk8L2JyPjxpPqkgQ29weXJpZ2h0IFBhdWwgTWVuc29uaWRlcyAyMDAyPC9pPgoJPC9kaXY+Cgk8ZGl2IHN0eWxlPSJtYXJnaW4tbGVmdDogMHB4OyI+CgkJPHA+PHNtYWxsPkRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBCb29zdCBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMC4gKFNlZQoJCWFjY29tcGFueWluZyBmaWxlIDxhIGhyZWY9Ii4uLy4uLy4uLy4uL0xJQ0VOU0VfMV8wLnR4dCI+TElDRU5TRV8xXzAudHh0PC9hPiBvcgoJCWNvcHkgYXQgPGEgaHJlZj0KCQkiaHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0Ij53d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dDwvYT4pPC9zbWFsbD48L3A+Cgk8L2Rpdj4KPC9ib2R5Pgo8L2h0bWw+Cg==