PGh0bWw+CjxoZWFkPgoJPHRpdGxlPmV2YWx1YXRlZF9zbG90cy5odG1sPC90aXRsZT4KCTxsaW5rIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIGhyZWY9Ii4uL3N0eWxlcy5jc3MiPgo8L2hlYWQ+Cjxib2R5Pgo8aDQ+RXZhbHVhdGVkIFNsb3RzPC9oND4KPGRpdj4KCVRoZSBldmFsdWF0ZWQgc2xvdCBtZWNoYW5pc20gaXMgYSB0b29sIHRvIGZ1bGx5IGV2YWx1YXRlIGEgY29uc3RhbnQgaW50ZWdyYWwgZXhwcmVzc2lvbiBhbmQgYXZvaWQgdGhlIGxhenkgZXZhbHVhdGlvbiBub3JtYWxseSBwZXJmb3JtZWQgYnkgdGhlIHByZXByb2Nlc3Nvci4KPC9kaXY+CjxoND5UdXRvcmlhbDwvaDQ+CjxkaXY+CglJbiBvcmRlciB0byB1bmRlcnN0YW5kIHRoZSB1c2Ugb2Ygc3VjaCBhIG1lY2hhbmlzbSwgSSB3aWxsIHN0YXJ0IHdpdGggYSBzaW1wbGUgZmlsZS1pdGVyYXRpb24gZXhhbXBsZS4mbmJzcDsKCUNvbnNpZGVyIHRoZSBmb2xsb3dpbmcgc2NlbmFyaW8uLi4uCjwvZGl2Pgo8ZGl2IGNsYXNzID0iY29kZSI+PHByZT4KZm9yIChpbnQgaSA9IDA7IGkgPCAxMDsgKytpKSB7CiAgIGZvciAoaW50IGogPSAwOyBqIDwgaTsgKytqKSB7CiAgICAgIC8vIC4uLiB1c2UgaSBhbmQgagogICB9Cn0KPC9wcmU+PC9kaXY+CjxkaXY+CglUaGUgYWJvdmUgaXMgYSBzaW1wbGUgcnVudGltZSBtb2RlbCBvZiB0aGUgZm9sbG93aW5nIG11bHRpZGltZW5zaW9uYWwgZmlsZS1pdGVyYXRpb24uLi4uCjwvZGl2Pgo8ZGl2IGNsYXNzPSJjb2RlIj48cHJlPgovLyBmaWxlLmhwcAojaWYgIUJPT1NUX1BQX0lTX0lURVJBVElORwogICAjaWZuZGVmIEZJTEVfSFBQXwogICAjZGVmaW5lIEZJTEVfSFBQXwoKICAgI2luY2x1ZGUgJmx0O2Jvb3N0L3ByZXByb2Nlc3Nvci9pdGVyYXRpb24vaXRlcmF0ZS5ocHAmZ3Q7CgogICAjZGVmaW5lIEJPT1NUX1BQX0lURVJBVElPTl9QQVJBTVNfMSAoMywgKDAsIDksICJmaWxlLmhwcCIpKQogICAjaW5jbHVkZSBCT09TVF9QUF9JVEVSQVRFKCkKCiAgICNlbmRpZiAvLyBGSUxFX0hQUF8KI2VsaWYgQk9PU1RfUFBfSVRFUkFUSU9OX0RFUFRIKCkgPT0gMQogICAjZGVmaW5lIEkgQk9PU1RfUFBfSVRFUkFUSU9OKCkKCiAgICNkZWZpbmUgQk9PU1RfUFBfSVRFUkFUSU9OX1BBUkFNU18yICgzLCAoMCwgSSwgImZpbGUuaHBwIikpCiAgICNpbmNsdWRlIEJPT1NUX1BQX0lURVJBVEUoKQoKICAgI3VuZGVmIEkKI2VsaWYgQk9PU1RfUFBfSVRFUkFUSU9OX0RFUFRIKCkgPT0gMgogICAjZGVmaW5lIEogQk9PU1RfUFBfSVRFUkFUSU9OKCkKCiAgIC8vIHVzZSBJIGFuZCBKCgogICAjdW5kZWYgSgojZW5kaWYKPC9wcmU+PC9kaXY+CjxkaXY+CglUaGVyZSBpcyBhIHByb2JsZW0gd2l0aCB0aGUgY29kZSBhYm92ZS4mbmJzcDsKCVRoZSB3cml0ZXIgZXhwZWN0ZWQgPGk+STwvaT4gdG8gcmVmZXIgdGhlIHByZXZpb3VzIGl0ZXJhdGlvbiBmcmFtZS4mbmJzcDsKCUhvd2V2ZXIsIHRoYXQgaXMgbm90IHRoZSBjYXNlLiZuYnNwOwoJV2hlbiB0aGUgdXNlciByZWZlcnMgdG8gPGk+STwvaT4sIGhlIGlzIGFjdHVhbGx5IHJlZmVycmluZyB0byA8Yj5CT09TVF9QUF9JVEVSQVRJT048L2I+KCksCglub3QgdGhlIHZhbHVlIG9mIDxiPkJPT1NUX1BQX0lURVJBVElPTjwvYj4oKSBhdCB0aGUgcG9pbnQgb2YgZGVmaW5pdGlvbi4mbmJzcDsKCUluc3RlYWQsIGl0IHJlZmVycyB0byBleGFjdGx5IHRoZSBzYW1lIHZhbHVlIHRvIHdoaWNoIDxpPko8L2k+IHJlZmVycy4KPC9kaXY+CjxkaXY+CglUaGUgcHJvYmxlbSBpcyB0aGF0IHRoZSBwcmVwcm9jZXNzb3IgYWx3YXlzIGV2YWx1YXRlcyBldmVyeXRoaW5nIHdpdGggbGF6eSBldmFsdWF0aW9uLiZuYnNwOwoJVG8gc29sdmUgdGhlIHByb2JsZW0sIHdlIG5lZWQgPGk+STwvaT4gdG8gYmUgPGk+ZXZhbHVhdGVkPC9pPiBoZXJlOgo8L2Rpdj4KPGRpdiBjbGFzcz0iY29kZSI+PHByZT4KLy8gLi4uCiNlbGlmIEJPT1NUX1BQX0lURVJBVElPTl9ERVBUSCgpID09IDEKICAgI2RlZmluZSBJIEJPT1NUX1BQX0lURVJBVElPTigpCi8vIC4uLgo8L3ByZT48L2Rpdj4KPGRpdj4KCUZvcnR1bmF0ZWx5LCB0aGUgbGlicmFyeSBvZmZlcnMgYSBtZWNoYW5pc20gdG8gZG8ganVzdCB0aGF0OiZuYnNwOyBldmFsdWF0ZWQgc2xvdHMuJm5ic3A7CglUaGUgZm9sbG93aW5nIGNvZGUgdXNlcyB0aGlzIG1lY2hhbmlzbSB0byAiZml4IiB0aGUgZXhhbXBsZSBhYm92ZS4uLgo8L2Rpdj4KPGRpdiBjbGFzcz0iY29kZSI+PHByZT4KLy8gLi4uCiNlbGlmIEJPT1NUX1BQX0lURVJBVElPTl9ERVBUSCgpID09IDEKICAgI2RlZmluZSBCT09TVF9QUF9WQUxVRSBCT09TVF9QUF9JVEVSQVRJT04oKQogICAjaW5jbHVkZSBCT09TVF9QUF9BU1NJR05fU0xPVCgxKQogICAjZGVmaW5lIEkgQk9PU1RfUFBfU0xPVCgxKQovLyAuLi4KPC9wcmU+PC9kaXY+CjxkaXY+CglUaGVyZSBhcmUgdHdvIHN0ZXBzIHRvIHRoZSBhc3NpZ25tZW50IG9mIGFuIGV2YWx1YXRlZCBzbG90LiZuYnNwOwoJRmlyc3QsIHRoZSB1c2VyIG11c3QgZGVmaW5lIHRoZSA8aT5uYW1lZCBleHRlcm5hbCBhcmd1bWVudDwvaT4gPGI+Qk9PU1RfUFBfVkFMVUU8L2I+LiZuYnNwOwoJVGhpcyB2YWx1ZSBtdXN0IGJlIGFuIGludGVncmFsIGNvbnN0YW50IGV4cHJlc3Npb24uJm5ic3A7CglTZWNvbmQsIHRoZSB1c2VyIG11c3QgPGk+aW5jbHVkZTwvaT4gPGI+Qk9PU1RfUFBfQVNTSUdOX1NMT1Q8L2I+KDxpPng8L2k+KSwgd2hlcmUgPGk+eDwvaT4gaXMgdGhlIHBhcnRpY3VsYXIgc2xvdCB0byBiZSBhc3NpZ25lZCB0byAoPGk+MTwvaT4gdG8gPGI+Qk9PU1RfUFBfTElNSVRfU0xPVF9DT1VOVDwvYj4pLiZuYnNwOwoJVGhpcyB3aWxsIGV2YWx1YXRlIDxiPkJPT1NUX1BQX1ZBTFVFPC9iPiBhbmQgYXNzaWduIHRoZSByZXN1bHQgdG8gdGhlIHNsb3QgYXQgaW5kZXggPGk+eDwvaT4uCjwvZGl2Pgo8ZGl2PgoJVG8gcmV0cmlldmUgYSBzbG90J3MgdmFsdWUsIHRoZSB1c2VyIG11c3QgdXNlIDxiPkJPT1NUX1BQX1NMT1Q8L2I+KDxpPng8L2k+KS4KPC9kaXY+CjxkaXY+CglJbiB0aGUgY2FzZSBhYm92ZSwgPGk+STwvaT4gaXMgPGk+c3RpbGw8L2k+IGxhemlseSBldmFsdWF0ZWQuJm5ic3A7CglIb3dldmVyLCBpdCBub3cgZXZhbHVhdGVzIHRvIDxiPkJPT1NUX1BQX1NMT1Q8L2I+KDxpPjE8L2k+KS4mbmJzcDsKCVRoaXMgdmFsdWUgPGk+d2lsbCBub3QgY2hhbmdlPC9pPiB1bmxlc3MgdGhlcmUgaXMgYSBzdWJzZXF1ZW50IGNhbGwgdG8gPGI+Qk9PU1RfUFBfQVNTSUdOX1NMT1Q8L2I+KDxpPjE8L2k+KS4KPC9kaXY+CjxoND5BZHZhbmNlZCBUZWNobmlxdWVzPC9oND4KPGRpdj4KCVRoZSBzbG90IG1lY2hhbmlzbSBjYW4gYWxzbyBiZSB1c2VkIHRvIHBlcmZvcm0gY2FsY3VsYXRpb25zOgo8L2Rpdj4KPGRpdiBjbGFzcz0iY29kZSI+PHByZT4KI2luY2x1ZGUgJmx0O2lvc3RyZWFtJmd0OwoKI2luY2x1ZGUgJmx0O2Jvb3N0L3ByZXByb2Nlc3Nvci9zbG90L3Nsb3QuaHBwJmd0OwojaW5jbHVkZSAmbHQ7Ym9vc3QvcHJlcHJvY2Vzc29yL3N0cmluZ2l6ZS5ocHAmZ3Q7CgojZGVmaW5lIFgoKSA0CgojZGVmaW5lIEJPT1NUX1BQX1ZBTFVFIDEgKyAyICsgMyArIFgoKQojaW5jbHVkZSBCT09TVF9QUF9BU1NJR05fU0xPVCgxKQoKI3VuZGVmIFgKCmludCBtYWluKHZvaWQpIHsKICAgc3RkOjpjb3V0CiAgICAgICZsdDsmbHQ7IEJPT1NUX1BQX1NUUklOR0laRShCT09TVF9QUF9TTE9UKDEpKQogICAgICAmbHQ7Jmx0OyAmYW1wO3N0ZDo6ZW5kbDsKICAgcmV0dXJuIDA7Cn0KPC9wcmU+PC9kaXY+CjxkaXY+CglJbiBlc3NlbmNlLCBhbnl0aGluZyB0aGF0IGNhbiBiZSBldmFsdWF0ZWQgaW4gYW4gI2lmIChvciAjZWxpZikgcHJlcHJvY2Vzc29yIGRpcmVjdGl2ZSBpcyBhdmFpbGFibGUgPGk+ZXhjZXB0PC9pPiB0aGUgPGk+ZGVmaW5lZDwvaT4gb3BlcmF0b3IuCjwvZGl2Pgo8ZGl2PgoJSXQgaXMgZXZlbiBwb3NzaWJsZSB0byB1c2UgYSBwYXJ0aWN1bGFyIHNsb3QgaXRzZWxmIHdoaWxlIHJlYXNzaWduaW5nIGl0Ogo8L2Rpdj4KPGRpdiBjbGFzcz0iY29kZSI+PHByZT4KI2RlZmluZSBCT09TVF9QUF9WQUxVRSAyMAojaW5jbHVkZSBCT09TVF9QUF9BU1NJR05fU0xPVCgxKQoKI2RlZmluZSBCT09TVF9QUF9WQUxVRSAyICogQk9PU1RfUFBfU0xPVCgxKQojaW5jbHVkZSBCT09TVF9QUF9BU1NJR05fU0xPVCgxKQoKQk9PU1RfUFBfU0xPVCgxKSAvLyA0MAo8L3ByZT48L2Rpdj4KPGg0PlNlZSBBbHNvPC9oND4KPHVsPgoJPGxpPjxhIGhyZWY9Ii4uL3JlZi9hc3NpZ25fc2xvdC5odG1sIj5CT09TVF9QUF9BU1NJR05fU0xPVDwvYT48L2xpPgoJPGxpPjxhIGhyZWY9Ii4uL3JlZi9saW1pdF9zbG90X2NvdW50Lmh0bWwiPkJPT1NUX1BQX0xJTUlUX1NMT1RfQ09VTlQ8L2E+PC9saT4KCTxsaT48YSBocmVmPSIuLi9yZWYvc2xvdC5odG1sIj5CT09TVF9QUF9TTE9UPC9hPjwvbGk+Cgk8bGk+PGEgaHJlZj0iLi4vcmVmL3ZhbHVlLmh0bWwiPkJPT1NUX1BQX1ZBTFVFPC9hPjwvbGk+CjwvdWw+CjxkaXYgY2xhc3M9InNpZyI+LSBQYXVsIE1lbnNvbmlkZXM8L2Rpdj4KCTxociBzaXplPSIxIj4KCTxkaXYgc3R5bGU9Im1hcmdpbi1sZWZ0OiAwcHg7Ij4KCQk8aT6pIENvcHlyaWdodCA8YSBocmVmPSJodHRwOi8vd3d3LmhvdXNlbWFycXVlLmNvbSIgdGFyZ2V0PSJfdG9wIj5Ib3VzZW1hcnF1ZSBPeTwvYT4gMjAwMjwvaT4KCQk8L2JyPjxpPqkgQ29weXJpZ2h0IFBhdWwgTWVuc29uaWRlcyAyMDAyPC9pPgoJPC9kaXY+Cgk8ZGl2IHN0eWxlPSJtYXJnaW4tbGVmdDogMHB4OyI+CgkJPHA+PHNtYWxsPkRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBCb29zdCBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMC4gKFNlZQoJCWFjY29tcGFueWluZyBmaWxlIDxhIGhyZWY9Ii4uLy4uLy4uLy4uL0xJQ0VOU0VfMV8wLnR4dCI+TElDRU5TRV8xXzAudHh0PC9hPiBvcgoJCWNvcHkgYXQgPGEgaHJlZj0KCQkiaHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0Ij53d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dDwvYT4pPC9zbWFsbD48L3A+Cgk8L2Rpdj4KPC9ib2R5Pgo8L2h0bWw+Cg==