PGh0bWw+CjxoZWFkPgoJPHRpdGxlPmxvY2FsX2l0ZXJhdGlvbi5odG1sPC90aXRsZT4KCTxsaW5rIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIGhyZWY9Ii4uL3N0eWxlcy5jc3MiPgo8L2hlYWQ+Cjxib2R5Pgo8aDQ+TG9jYWwgSXRlcmF0aW9uPC9oND4KPGRpdj4KCUxvY2FsIGl0ZXJhdGlvbiBpcyBhIHNpbXBsZSB2ZXJ0aWNhbCByZXBldGl0aW9uIGNvbnN0cnVjdC4mbmJzcDsKCUl0IGV4cGFuZHMgYSBtYWNybyB3aXRoIGVhY2ggbnVtYmVyIGluIGEgdXNlci1zcGVjaWZpZWQgcmFuZ2UuJm5ic3A7CglFYWNoIGV4cGFuc2lvbiBpcyBvbiBhIHNlcGFyYXRlIGxpbmUuCjwvZGl2Pgo8aDQ+VHV0b3JpYWw8L2g0Pgo8ZGl2PgoJVGhpcyBtZWNoYW5pc20gcmVxdWlyZXMgdHdvIHBpZWNlcyBvZiBpbmZvcm1hdGlvbiB0byBvcGVyYXRlOiZuYnNwOwoJYSByYW5nZSB0byBpdGVyYXRlIG92ZXIgYW5kIGEgbWFjcm8gdG8gZXhwYW5kIG9uIGVhY2ggaXRlcmF0aW9uLiZuYnNwOwoJVGhpcyBpbmZvcm1hdGlvbiBpcyBvYnRhaW5lZCBieSB0aGUgbWVjaGFuaXNtIHRocm91Z2ggdHdvIDxpPm5hbWVkIGV4dGVybmFsIGFyZ3VtZW50czwvaT4uJm5ic3A7CglUaGVzZSBhcmd1bWVudHMgYXJlIHNwZWNpZmllZCBhcyB1c2VyLWRlZmluZWQgbWFjcm9zIG5hbWVkIDxiPkJPT1NUX1BQX0xPQ0FMX0xJTUlUUzwvYj4gYW5kIDxiPkJPT1NUX1BQX0xPQ0FMX01BQ1JPPC9iPi4KPC9kaXY+CjxkaXY+Cgk8Yj5CT09TVF9QUF9MT0NBTF9MSU1JVFM8L2I+IHNwZWNpZmllcyBhIHJhbmdlIG9mIHZhbHVlcyB0byBpdGVyYXRlIG92ZXIuJm5ic3A7CglJdCA8aT5tdXN0PC9pPiBleHBhbmQgdG8gYSA8aT50dXBsZTwvaT4gY29udGFpbmluZyB0d28gZWxlbWVudHMtLWEgbG93ZXIgYW5kIHVwcGVyIGJvdW5kLiZuYnNwOwoJQm90aCB0aGUgdXBwZXIgYW5kIGxvd2VyIGJvdW5kcyBtdXN0IGJlIG51bWVyaWMgdmFsdWVzIGluIHRoZSByYW5nZSBvZiA8aT4wPC9pPiB0byA8Yj5CT09TVF9QUF9MSU1JVF9JVEVSQVRJT048L2I+LiZuYnNwOwoJRm9yIGV4YW1wbGUsIGlmIHRoZSB1c2VyIHdpc2hlcyBhIG1hY3JvIHRvIGJlIGV4cGFuZGVkIHdpdGggbnVtYmVycyByYW5naW5nIGZyb20gPGk+MDwvaT4gdG8gPGk+MTA8L2k+LAoJPGI+Qk9PU1RfUFBfTE9DQUxfTElNSVRTPC9iPiB3b3VsZCBiZSBkZWZpbmVkIGxpa2UgdGhpczoKPC9kaXY+CjxkaXYgY2xhc3M9ImNvZGUiPjxwcmU+CiNkZWZpbmUgQk9PU1RfUFBfTE9DQUxfTElNSVRTICgwLCAxMCkKPC9wcmU+PC9kaXY+CjxkaXY+CglOb3RlIHRoYXQgdGhlcmUgaXMgd2hpdGVzcGFjZSBhZnRlciB0aGUgbmFtZSBvZiB0aGUgbWFjcm8uJm5ic3A7CglUaGUgbWFjcm8gPGk+ZG9lcyBub3Q8L2k+IHRha2UgPGk+dHdvPC9pPiBhcmd1bWVudHMuJm5ic3A7CglJbiB0aGUgY2FzZSBhYm92ZSwgaWYgdGhlcmUgd2FzIG5vIHdoaXRlc3BhY2UsIGEgcHJlcHJvY2Vzc2luZyBlcnJvciB3b3VsZCBvY2N1ciBiZWNhdXNlIDxpPjA8L2k+IGFuZCA8aT4xMDwvaT4gYXJlIGludmFsaWQgaWRlbnRpZmllcnMuCjwvZGl2Pgo8ZGl2PgoJQm90aCB0aGUgdXBwZXIgYW5kIGxvd2VyIGJvdW5kcyBzcGVjaWZpZWQgaW4gdGhlIDxiPkJPT1NUX1BQX0xPQ0FMX0xJTUlUUzwvYj4gbWFjcm8gYXJlIDxpPmV2YWx1YXRlZCBwYXJhbWV0ZXJzPC9pPi4mbmJzcDsKCVRoaXMgaW1wbGllcyB0aGF0IHRoZXkgY2FuIGluY2x1ZGUgc2ltcGxlIGFyaXRobWV0aWMgb3IgbG9naWNhbCBleHByZXNzaW9ucy4mbmJzcDsKCUZvciBpbnN0YW5jZSwgdGhlIGFib3ZlIGRlZmluaXRpb24gY291bGQgZWFzaWx5IGhhdmUgYmVlbiB3cml0dGVuIGxpa2UgdGhpczoKPC9kaXY+CjxkaXYgY2xhc3M9ImNvZGUiPjxwcmU+CiNkZWZpbmUgTigpIDUKI2RlZmluZSBCT09TVF9QUF9MT0NBTF9MSU1JVFMgKDAsIE4oKSArIDUpCjwvcHJlPjwvZGl2Pgo8ZGl2PgoJQmVjYXVzZSBvZiB0aGlzLCBpZiB0aGUgd2hpdGVzcGFjZSBhZnRlciB0aGUgbWFjcm8gbmFtZSBpcyBlbGlkZWQsIGl0IGlzIHBvc3NpYmxlIGZvciB0aGUgZGVmaW5pdGlvbiB0byBiZSBzeW50YWN0aWNhbGx5IHZhbGlkOgo8L2Rpdj4KPGRpdiBjbGFzcz0iY29kZSI+PHByZT4KI2RlZmluZSBBIDAKI2RlZmluZSBCIDEwCiNkZWZpbmUgQk9PU1RfUFBfTE9DQUxfTElNSVRTKEEsIEIpCiAgIC8vIG5vdGU6ICBubyB3aGl0ZXNwYWNlICAgXgo8L3ByZT48L2Rpdj4KPGRpdj4KCUlmIHRoaXMgaGFwcGVucywgYW4gZXJyb3Igd2lsbCBvY2N1ciBpbnNpZGUgdGhlIG1lY2hhbmlzbSB3aGVuIGl0IGF0dGVtcHRzIHRvIHVzZSB0aGlzIG1hY3JvLiZuYnNwOwoJVGhlIGVycm9yIG1lc3NhZ2VzIHRoYXQgcmVzdWx0IG1heSBiZSBvYnNjdXJlLCBzbyBhbHdheXMgcmVtZW1iZXIgdG8gaW5jbHVkZSB0aGUgd2hpdGVzcGFjZS4mbmJzcDsKCUEgPGk+Y29ycmVjdDwvaT4gdmVyc2lvbiBvZiB0aGUgYWJvdmUgbG9va3MgbGlrZSB0aGlzOgo8L2Rpdj4KPGRpdiBjbGFzcz0iY29kZSI+PHByZT4KI2RlZmluZSBBIDAKI2RlZmluZSBCIDEwCiNkZWZpbmUgQk9PU1RfUFBfTE9DQUxfTElNSVRTIChBLCBCKQogICAvLyBub3RlOiAgaGFzIHdoaXRlc3BhY2UgIF4KPC9wcmU+PC9kaXY+CjxkaXY+Cgk8Yj5CT09TVF9QUF9MT0NBTF9NQUNSTzwvYj4gaXMgdGhlIG1hY3JvIHRoYXQgaXMgZXhwYW5kZWQgYnkgdGhlIG1lY2hhbmlzbS4mbmJzcDsKCVRoaXMgbWFjcm8gaXMgZXhwYW5kZWQgb24gZWFjaCBpdGVyYXRpb24gd2l0aCB0aGUgY3VycmVudCBudW1iZXIgb2YgdGhlIGl0ZXJhdGlvbi4mbmJzcDsKCUl0IG11c3QgZGVmaW5lZCBhcyBhIHVuYXJ5IG1hY3JvIDxpPm9yPC9pPiByZXN1bHQgaW4gYSBtYWNybyB0aGF0IGNhbiBiZSBjYWxsZWQgd2l0aCBvbmUgYXJndW1lbnQ6CjwvZGl2Pgo8ZGl2IGNsYXNzPSJjb2RlIj48cHJlPgojZGVmaW5lIEJPT1NUX1BQX0xPQ0FMX01BQ1JPKG4pIFwKICAgdGVtcGxhdGUmbHQ7Jmd0OyBzdHJ1Y3Qgc2FtcGxlJmx0O24mZ3Q7IHsgfTsgXAogICAvKiovCjwvcHJlPjwvZGl2Pgo8ZGl2PgoJLi4ub3IuLi4KPC9kaXY+CjxkaXYgY2xhc3M9ImNvZGUiPjxwcmU+CiNkZWZpbmUgU0FNUExFKG4pIFwKICAgdGVtcGxhdGUmbHQ7Jmd0OyBzdHJ1Y3Qgc2FtcGxlJmx0O24mZ3Q7IHsgfTsgXAogICAvKiovCgojZGVmaW5lIEJPT1NUX1BQX0xPQ0FMX01BQ1JPIFNBTVBMRQo8L3ByZT48L2Rpdj4KPGRpdj4KCU9uY2UgdGhlc2UgdHdvIG1hY3JvcyBhcmUgZGVmaW5lZCwgdGhlIGxvY2FsIGl0ZXJhdGlvbiBpcyBpbml0aWF0ZWQgYnkgPGk+aW5jbHVkaW5nPC9pPiA8Yj5CT09TVF9QUF9MT0NBTF9JVEVSQVRFPC9iPigpLgo8L2Rpdj4KPGRpdiBjbGFzcz0iY29kZSI+PHByZT4KPz89aW5jbHVkZSBCT09TVF9QUF9MT0NBTF9JVEVSQVRFKCkKPC9wcmU+PC9kaXY+CjxkaXY+CgkoVGhlIDxjb2RlPj8/PTwvY29kZT4gdG9rZW4gaXMgYSB0cmlncmFwaCBmb3IgPGNvZGU+IzwvY29kZT4uJm5ic3A7CglJIHVzZSB0aGUgdHJpZ3JhcGggdG8gbWFrZSBpdCBjbGVhciB0aGF0IEkgYW0gPGk+aW5jbHVkaW5nPC9pPiBhIGZpbGUgcmF0aGVyIHRoYW4gZGVmaW5pbmcgb3IgZXhwYW5kaW5nIGEgbWFjcm8sIGJ1dCBpdCBpcyBub3QgbmVjZXNzYXJ5LiZuYnNwOwoJRXZlbiB0aGUgZGlncmFwaCB2ZXJzaW9uLCA8Y29kZT4lOjwvY29kZT4sIGNvdWxkIGJlIHVzZWQuJm5ic3A7CglTb21lIGNvbXBpbGVycyBkbyBub3QgcmVhZGlseSBhY2NlcHQgdHJpZ3JhcGhzIGFuZCBkaWdyYXBocywgc28ga2VlcCB0aGF0IGluIG1pbmQuJm5ic3A7CglPdGhlciB0aGFuIHRoYXQsIHVzZSB3aGljaGV2ZXIgb25lIHlvdSBwcmVmZXIuKQo8L2Rpdj4KPGRpdj4KCUluIG9yZGVyIHRvIHJlcGVhdCB0aGUgPGNvZGU+c2FtcGxlPC9jb2RlPiBzcGVjaWFsaXphdGlvbiwgdGhlIHBpZWNlcyBtdXN0IGJlIHB1dCB0b2dldGhlci4uLi4KPC9kaXY+CjxkaXYgY2xhc3M9ImNvZGUiPjxwcmU+CiNkZWZpbmUgQk9PU1RfUFBfTE9DQUxfTUFDUk8obikgXAogICB0ZW1wbGF0ZSZsdDsmZ3Q7IHN0cnVjdCBzYW1wbGUmbHQ7biZndDsgeyB9OyBcCiAgIC8qKi8KCiNkZWZpbmUgQk9PU1RfUFBfTE9DQUxfTElNSVRTICgwLCAxMCkKPz89aW5jbHVkZSBCT09TVF9QUF9MT0NBTF9JVEVSQVRFKCkKPC9wcmU+PC9kaXY+CjxkaXY+CglUaGlzIHdpbGwgcmVzdWx0IGluIGEgc3BlY2lhbGl6YXRpb24gb2YgPGNvZGU+c2FtcGxlPC9jb2RlPiBmb3IgZWFjaCBudW1iZXIgaW4gdGhlIHJhbmdlIG9mIDxpPjA8L2k+IHRvIDxpPjEwPC9pPi4mbmJzcDsKCVRoZSBvdXRwdXQgd2lsbCBsb29rIHNvbWV0aGluZyBsaWtlIHRoaXM6CjwvZGl2Pgo8ZGl2IGNsYXNzPSJjb2RlIj48cHJlPgp0ZW1wbGF0ZSZsdDsmZ3Q7IHN0cnVjdCBzYW1wbGUmbHQ7MCZndDsgeyB9Owp0ZW1wbGF0ZSZsdDsmZ3Q7IHN0cnVjdCBzYW1wbGUmbHQ7MSZndDsgeyB9Owp0ZW1wbGF0ZSZsdDsmZ3Q7IHN0cnVjdCBzYW1wbGUmbHQ7MiZndDsgeyB9OwoKLy8gLi4uCgp0ZW1wbGF0ZSZsdDsmZ3Q7IHN0cnVjdCBzYW1wbGUmbHQ7MTAmZ3Q7IHsgfTsKPC9wcmU+PC9kaXY+CjxkaXY+CglBZnRlciB0aGUgbG9jYWwtaXRlcmF0aW9uIGlzIGNvbXBsZXRlLCBib3RoIDxiPkJPT1NUX1BQX0xPQ0FMX0xJTUlUUzwvYj4gYW5kIDxiPkJPT1NUX1BQX0xPQ0FMX01BQ1JPPC9iPiBhcmUgYXV0b21hdGljYWxseSB1bmRlZmluZWQuJm5ic3A7CglJZiB0aGUgdmFsdWVzIG5lZWQgdG8gYmUgcmV0YWluZWQgZm9yIGEgZnV0dXJlIGxvY2FsLWl0ZXJhdGlvbiwgdGhleSBtdXN0IGJlIGRlZmluZWQgaW5kaXJlY3RseToKPC9kaXY+CjxkaXYgY2xhc3M9ImNvZGUiPjxwcmU+CiNkZWZpbmUgTElNSVRTICgwLCAxMCkKCiNkZWZpbmUgU0FNUExFKG4pIFwKICAgdGVtcGxhdGUmbHQ7Jmd0OyBzdHJ1Y3Qgc2FtcGxlJmx0O24mZ3Q7IHsgfTsgXAogICAvKiovCgojZGVmaW5lIEJPT1NUX1BQX0xPQ0FMX0xJTUlUUyBMSU1JVFMKI2RlZmluZSBCT09TVF9QUF9MT0NBTF9NQUNSTyhuKSBTQU1QTEUobikKCj8/PWluY2x1ZGUgQk9PU1RfUFBfTE9DQUxfSVRFUkFURSgpCjwvcHJlPjwvZGl2Pgo8aDQ+U2VlIEFsc288L2g0Pgo8dWw+Cgk8bGk+PGEgaHJlZj0iLi4vcmVmL2xvY2FsX2l0ZXJhdGUuaHRtbCI+Qk9PU1RfUFBfTE9DQUxfSVRFUkFURTwvYT48L2xpPgoJPGxpPjxhIGhyZWY9Ii4uL3JlZi9sb2NhbF9saW1pdHMuaHRtbCI+Qk9PU1RfUFBfTE9DQUxfTElNSVRTPC9hPjwvbGk+Cgk8bGk+PGEgaHJlZj0iLi4vcmVmL2xvY2FsX21hY3JvLmh0bWwiPkJPT1NUX1BQX0xPQ0FMX01BQ1JPPC9hPjwvbGk+CjwvdWw+CjxkaXYgY2xhc3M9InNpZyI+LSBQYXVsIE1lbnNvbmlkZXM8L2Rpdj4KCTxociBzaXplPSIxIj4KCTxkaXYgc3R5bGU9Im1hcmdpbi1sZWZ0OiAwcHg7Ij4KCQk8aT6pIENvcHlyaWdodCA8YSBocmVmPSJodHRwOi8vd3d3LmhvdXNlbWFycXVlLmNvbSIgdGFyZ2V0PSJfdG9wIj5Ib3VzZW1hcnF1ZSBPeTwvYT4gMjAwMjwvaT4KCQk8L2JyPjxpPqkgQ29weXJpZ2h0IFBhdWwgTWVuc29uaWRlcyAyMDAyPC9pPgoJPC9kaXY+Cgk8ZGl2IHN0eWxlPSJtYXJnaW4tbGVmdDogMHB4OyI+CgkJPHA+PHNtYWxsPkRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBCb29zdCBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMC4gKFNlZQoJCWFjY29tcGFueWluZyBmaWxlIDxhIGhyZWY9Ii4uLy4uLy4uLy4uL0xJQ0VOU0VfMV8wLnR4dCI+TElDRU5TRV8xXzAudHh0PC9hPiBvcgoJCWNvcHkgYXQgPGEgaHJlZj0KCQkiaHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0Ij53d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dDwvYT4pPC9zbWFsbD48L3A+Cgk8L2Rpdj4KPC9ib2R5Pgo8L2h0bWw+