PGgyPlRoZSA8Y29kZT51cGNfYWxsX3NjYXR0ZXI8L2NvZGU+IGZ1bmN0aW9uPC9oMj4KCjxoND5TeW5vcHNpczwvaDQ+CjxwcmU+ICAgIAogICAgI2luY2x1ZGUgJmx0O3VwYy5oJmd0OwogICAgI2luY2x1ZGUgJmx0O3VwY19jb2xsZWN0aXZlLmgmZ3Q7CiAgICB2b2lkIHVwY19hbGxfc2NhdHRlcihzaGFyZWQgdm9pZCAqIHJlc3RyaWN0IGRzdCwgCiAgICAgICAgICAgICAgICAgICAgICAgICBzaGFyZWQgY29uc3Qgdm9pZCAqIHJlc3RyaWN0IHNyYywgCiAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgbmJ5dGVzLCAKICAgICAgICAgICAgICAgICAgICAgICAgIHVwY19mbGFnX3QgZmxhZ3MpOwogICAgICAgICAgICAgICAKPC9wcmU+CjxwPgo8aDQ+RGVzY3JpcHRpb248L2g0Pgo8cD4KVGhlIDxjb2RlPnVwY19hbGxfc2NhdHRlciA8L2NvZGU+ICBmdW5jdGlvbiAKY29waWVzIHRoZSBpdGggYmxvY2sgb2YgYW4gYXJlYSBvZiBzaGFyZWQKbWVtb3J5IHdpdGggYWZmaW5pdHkgdG8gYSBzaW5nbGUgdGhyZWFkIHRvIGEgYmxvY2sgb2Ygc2hhcmVkIG1lbW9yeSB3aXRoCmFmZmluaXR5IHRvIHRoZSBpdGggdGhyZWFkLiBUaGUgbnVtYmVyIG9mIGJ5dGVzIGluIGVhY2ggYmxvY2sgaXMgPGNvZGU+bmJ5dGVzPC9jb2RlPi4KPHA+PGNvZGU+bmJ5dGVzPC9jb2RlPiBtdXN0IGJlIHN0cmljdGx5IGdyZWF0ZXIgdGhhbiAwLgo8cD5UaGUgPGNvZGU+dXBjX2FsbF9zY2F0dGVyIDwvY29kZT4gIGZ1bmN0aW9uIHRyZWF0cyB0aGUgPGNvZGU+c3JjPC9jb2RlPiBwb2ludGVyIGFzIGlmIGl0IHBvaW50ZWQgdG8gYQpzaGFyZWQgbWVtb3J5IGFyZWEgd2l0aCB0aGUgdHlwZToKPHByZT4KICAgIHNoYXJlZCBbXSBjaGFyW25ieXRlcyAqIFRIUkVBRFNdCiA8L3ByZT4KPHA+YW5kIGl0IHRyZWF0cyB0aGUgPGNvZGU+ZHN0PC9jb2RlPiBwb2ludGVyIGFzIGlmIGl0IHBvaW50ZWQgdG8gYSBzaGFyZWQgbWVtb3J5IGFyZWEgd2l0aAp0aGUgdHlwZToKPHByZT4KICAgIHNoYXJlZCBbbmJ5dGVzXSBjaGFyW25ieXRlcyAqIFRIUkVBRFNdCjwvcHJlPgo8cD5UaGUgdGFyZ2V0IG9mIHRoZSA8Y29kZT5kc3Q8L2NvZGU+IHBvaW50ZXIgbXVzdCBoYXZlIGFmZmluaXR5IHRvIHRocmVhZCAwLgo8cD5UaGUgPGNvZGU+ZHN0PC9jb2RlPiBwb2ludGVyIGlzIHRyZWF0ZWQgYXMgaWYgaXQgaGFzIHBoYXNlIDAuCjxwPkZvciBlYWNoIHRocmVhZCBpLCB0aGUgZWZmZWN0IGlzIGVxdWl2YWxlbnQgdG8gY29weWluZyB0aGUgaXRoIGJsb2NrIG9mIDxjb2RlPm5ieXRlczwvY29kZT4KYnl0ZXMgcG9pbnRlZCB0byBieSA8Y29kZT5zcmM8L2NvZGU+IHRvIHRoZSBibG9jayBvZiA8Y29kZT5uYnl0ZXM8L2NvZGU+IGJ5dGVzIHBvaW50ZWQgdG8gYnkgCjxjb2RlPmRzdDwvY29kZT4gdGhhdApoYXMgYWZmaW5pdHkgdG8gdGhyZWFkIGkuCjx1bD4KPGxpPkVYQU1QTEUgMTogPGNvZGU+dXBjX2FsbF9zY2F0dGVyPC9jb2RlPiBmb3IgdGhlIGR5bmFtaWMgVEhSRUFEUyB0cmFuc2xhdGlvbiBlbnZpcm9ubWVudC4KPHByZT4KI2luY2x1ZGUgJmx0O3VwYy5oJmd0OwojaW5jbHVkZSAmbHQ7dXBjX2NvbGxlY3RpdmUuaCZndDsKI2RlZmluZSBOVU1FTEVNUyAxMAojZGVmaW5lIFNSQ19USFJFQUQgMQpzaGFyZWQgaW50ICpBOwpzaGFyZWQgW10gaW50ICpteUEsICpzcmNBOwpzaGFyZWQgW05VTUVMRU1TXSBpbnQgQltOVU1FTEVNUypUSFJFQURTXTsKLy8gYWxsb2NhdGUgYW5kIGluaXRpYWxpemUgYW4gYXJyYXkgZGlzdHJpYnV0ZWQgYWNyb3NzIGFsbCB0aHJlYWRzCkEgPSB1cGNfYWxsX2FsbG9jKFRIUkVBRFMsIFRIUkVBRFMqTlVNRUxFTVMqc2l6ZW9mKGludCkpOwpteUEgPSAoc2hhcmVkIFtdIGludCAqKSAmQVtNWVRIUkVBRF07CmZvciAoaT0wOyBpPE5VTUVMRU1TKlRIUkVBRFM7IGkrKykKbXlBW2ldID0gaSArIE5VTUVMRU1TKlRIUkVBRFMqTVlUSFJFQUQ7IC8vIChmb3IgZXhhbXBsZSkKLy8gc2NhdHRlciB0aGUgU1JDX1RIUkVBRNVzIHJvdyBvZiB0aGUgYXJyYXkKc3JjQSA9IChzaGFyZWQgW10gaW50ICopICZBW1NSQ19USFJFQURdOwp1cGNfYmFycmllcjsKdXBjX2FsbF9zY2F0dGVyKCBCLCBzcmNBLCBzaXplb2YoaW50KSpOVU1FTEVNUywKVVBDX0lOX05PU1lOQyB8IFVQQ19PVVRfTk9TWU5DKTsKdXBjX2JhcnJpZXI7CjwvcHJlPgo8bGk+RVhBTVBMRSAyOiA8Y29kZT51cGNfYWxsX3NjYXR0ZXI8L2NvZGU+ICBmb3IgdGhlIHN0YXRpYyBUSFJFQURTIHRyYW5zbGF0aW9uIGVudmlyb25tZW50Lgo8cHJlPgojaW5jbHVkZSAmbHQ7dXBjLmgmZ3Q7CiNpbmNsdWRlICZsdDt1cGNfY29sbGVjdGl2ZS5oJmd0OwojZGVmaW5lIE5FTEVNUyAxMApzaGFyZWQgW10gaW50IEFbTkVMRU1TKlRIUkVBRFNdOwpzaGFyZWQgW05FTEVNU10gaW50IEJbTkVMRU1TKlRIUkVBRFNdOwogCi8vIEluaXRpYWxpemUgQS4KdXBjX2FsbF9zY2F0dGVyKCBCLCBBLCBzaXplb2YoaW50KSpORUxFTVMsClVQQ19JTl9BTExTWU5DIHwgVVBDX09VVF9BTExTWU5DICk7CjwvcHJlPgogCjwvdWw+CjxwPiZuYnNwCjxwPiZuYnNwCjxwPjxhIGhyZWY9InRlcm1zLmh0bWwiPlRlcm1zLCBkZWZpbml0aW9ucywgYW5kIHN5bWJvbHM8L2E+PGJyPgo8cD48YSBocmVmPSJpbmRleC5odG1sIj5CYWNrIHRvIGluZGV4IG9mIGFsbCBVUEMgZnVuY3Rpb25zPC9hPgo=