DQpEaXNjbGFpbWVyDQoNCg0KDQpUaGUgYXR0YWNoZWQgcGF0Y2ggZmlsZSBpcyBkZXJpdmVkIGZy b20gT3BlbkxEQVAgU29mdHdhcmUuIEFsbCBvZiB0aGUgbW9kaWZpY2F0aW9ucyB0byBPcGVuTERB UCBTb2Z0d2FyZSByZXByZXNlbnRlZCBpbiB0aGUgZm9sbG93aW5nIHBhdGNoKGVzKSB3ZXJlIGRl dmVsb3BlZCBieSBKdWVyZyBCaXJjaGVyIGp1ZXJnLmJpcmNoZXJAaGVsbWVkaWNhLmNvbS4gSSBo YXZlIG5vdCBhc3NpZ25lZCByaWdodHMgYW5kL29yIGludGVyZXN0IGluIHRoaXMgd29yayB0byBh bnkgcGFydHkuDQoNCkksIEp1ZXJnIEJpcmNoZXIsIGhlcmVieSBwbGFjZSB0aGUgZm9sbG93aW5n IG1vZGlmaWNhdGlvbnMgdG8gT3BlbkxEQVAgU29mdHdhcmUgKGFuZCBvbmx5IHRoZXNlIG1vZGlm aWNhdGlvbnMpIGludG8gdGhlIHB1YmxpYyBkb21haW4uIEhlbmNlLCB0aGVzZSBtb2RpZmljYXRp b25zIG1heSBiZSBmcmVlbHkgdXNlZCBhbmQvb3IgcmVkaXN0cmlidXRlZCBmb3IgYW55IHB1cnBv c2Ugd2l0aCBvciB3aXRob3V0IGF0dHJpYnV0aW9uIGFuZC9vciBvdGhlciBub3RpY2UuDQoNCg0K DQpPbiAyNy8wNS8xNiAxMzoxNiwgIkhvd2FyZCBDaHUiIDxoeWNAc3ltYXMuY29tPiB3cm90ZToN Cg0KPmp1ZXJnLmJpcmNoZXJAaGVsbWVkaWNhLmNvbSB3cm90ZToNCj4+IEZ1bGxfTmFtZTogSnVl cmcgQmlyY2hlcg0KPj4gVmVyc2lvbjogbG1kYiAobWFzdGVyKQ0KPj4gT1M6IE1hY09TIC8gTGlu dXgNCj4+IFVSTDogZnRwOi8vZnRwLm9wZW5sZGFwLm9yZy9pbmNvbWluZy9KdWVyZ19CaXJjaGVy XzE2MDUyNy1JbXByb3ZlZC1oYW5kbGluZy1mb3ItbGFyZ2UtbnVtYmVyLW9mLWRhdGFiYXNlcy5w YXRjaA0KPj4gU3VibWlzc2lvbiBmcm9tOiAoTlVMTCkgKDE3OC44Mi4zNy4xOTUpDQo+DQo+VGhh bmtzIGZvciB0aGUgcGF0Y2gsIGJ1dCBmb3IgYSBjaGFuZ2Ugb2YgdGhpcyBzaXplIHlvdSBhbHNv IG5lZWQgdG8gaW5jbHVkZSANCj5hbiBJUCBSaWdodHMgbm90aWNlLCBhcyBkb2N1bWVudGVkIG9u IHRoZSBDb250cmlidXRpbmcgZ3VpZGVsaW5lcy4NCj4+DQo+Pg0KPj4gVGhlcmUgaXMgYSBpbmNy ZWFzZWQgcGVyZm9ybWFuY2UgcGVuYWx0eSB0aGUgbW9yZSBkYXRhYmFzZXMgYXJlIGNyZWF0ZWQg d2l0aGluDQo+PiB0aGUgc2FtZSBlbnZpcm9ubWVudC4gSSB3YXMgbG9va2luZyBmb3IgYSB3YXkg dGhlIGltcHJvdmUgdGhhdCBieSBrZWVwaW5nIHRoZQ0KPj4gc2ltcGxpY2l0eSBvZiB0cmFja2lu ZyBkYXRhYmFzZXMgd2l0aGluIGEgbGlzdCB3aXRoIGRpcmVjdCBhY2Nlc3MgYnkgaW5kZXgNCj4+ IChNREJfZGJpKS4NCj4+IG1kYl9kYmlfb3BlbigpIGlzIGhvd2V2ZXIgbm90IGltcHJvdmVkIHdp dGggdGhlIGFzc3VtcHRpb24gdGhhdCB0aGUgZGF0YWJhc2UNCj4+IGhhbmRsZSAoZGJpKSBpcyBj YWNoZWQgaW4gdGhlIGFwcGxpY2F0aW9uLiBTbyBtZGJfZGJpX29wZW4oKSBzaG91bGQgaGFwcGVu IG9ubHkNCj4+IG9uY2UgZm9yIGVhY2ggZGF0YWJhc2UgZHVyaW5nIHRoZSBsaWZlIHRpbWUgb2Yg YW4gYXBwbGljYXRpb24uDQo+Pg0KPj4NCj4+IE9uZSBpc3N1ZSBpcyB0aGF0IG1kYl90eG5fYmVn aW4oKSAoZm9yIHJlYWQtb25seSB0cmFuc2FjdGlvbnMpIGNhbGxvYyB0aGUNCj4+IHNpemVvZihN REJfdHhuKSArIG1lX21heGRicyAqIHNpemVvZihNREJfZGIgKyAxKS4gVGhlIHBsdXMgMSBmb3Ig dGhlIGRiZmxhZ3MuDQo+PiBIb3dldmVyIGl0IGlzIHN1ZmZpY2llbnQgb25seSB0byBtYWxsb2Mg dGhhdCBzaXplIGFuZCBjbGVhciB0aGUgc2l6ZW9mKE1EQl90eG4pDQo+Pg0KPj4gICAgICBtZW1z ZXQodHhuLCAwLCBzaXplb2YoTURCX3R4bikNCj4+DQo+PiBBZnRlciB0aGF0IHRoZSBkYXRhIGJl eW9uZCB0aGUgTURCX3R4biBpcyBub3QgaW5pdGlhbGl6ZWQgd2hpY2ggaXMgb2sgZm9yIHRoZQ0K Pj4gbW9tZW50Lg0KPj4NCj4+IFRoZSBuZXh0IGltcHJvdmVtZW50IGhhcHBlbnMgaW4gbWRiX3R4 bl9yZW5ldzAoKSB3aGVyZSB0aGUgZGJmbGFncyBhcmUgb25seSBzZXQNCj4+IHRvIERCX1VOVVNF RCAoYSBuZXcgZmxhZykgZm9yIGVhY2ggZGF0YWJhc2UgY3VycmVudGx5IG9wZW5lZCBpbiB0aGUN Cj4+IGVudmlyb25tZW50Lg0KPj4NCj4+ICAgICAgbWVtc2V0KHR4bi0+bXRfZGJmbGFncywgREJf VU5VU0VELCB0eG4tPm10X251bWRicyk7DQo+Pg0KPj4gVGhlIGZvcm1lciBjb2RlIHVzZWQgdG8g dG8gbG9vcCB0aHJvdWdoIGVhY2ggZGF0YWJhc2UgdG8gY2FsY3VsYXRlIHRoZSBkYmZsYWdzLg0K Pj4gVGhpcyBpcyBzdGlsbCBkb25lIGJ1dCBsYXppbHkgZm9yIGVhY2ggYWNjZXNzZWQgZGF0YWJh c2Ugd2l0aCB0aGUgYXNzdW1wdGlvbg0KPj4gdGhhdCBhIHJlYWQgb25seSB0cmFuc2FjdGlvbiBy YXJlbHkgdXNlcyBhbGwgZGF0YWJhc2VzIG9mIHRoZSBlbnZpcm9ubWVudC4NCj4+DQo+PiBUaGUg bGF6eSBpbml0aWFsaXphdGlvbiBvZiB0aGUgZGJmbGFnIGhhcHBlbnMgaW4gdGhlIG1hY3JvIFRY Tl9EQklfRVhJU1Qgd2hpY2gNCj4+IGlzIGFsd2F5cyB1c2VkIHdoZW4gYSBkYXRhYmFzZSBoYW5k bGUgKGRiaSkgaXMgcGFzc2VkIHRvIGFuIGZ1bmN0aW9uLg0KPj4gVGhlIGZsYWdzIGFyZSB1cGRh dGVkIGluIG1kYl9zZXR1cF9kYl9pbmZvKCkgb25jZSBhIGRhdGFiYXNlIGlzIGFjY2VzcyB3aGlj aCBpcw0KPj4gbWFya2VkIGFzIHVudXNlZCAoREJfVU5VU0VEKS4NCj4+DQo+PiBzdGF0aWMgaW50 IG1kYl9zZXR1cF9kYl9pbmZvKE1EQl90eG4gKnR4biwgTURCX2RiaSBkYmkpIHsNCj4+ICAgICAg LyogU2V0dXAgZGIgaW5mbyAqLw0KPj4gICAgICB1aW50MTZfdCB4ID0gdHhuLT5tdF9lbnYtPm1l X2RiZmxhZ3NbZGJpXTsNCj4+ICAgICAgdHhuLT5tdF9kYnNbZGJpXS5tZF9mbGFncyA9IHggJiBQ RVJTSVNURU5UX0ZMQUdTOw0KPj4gICAgICB0eG4tPm10X2RiZmxhZ3NbZGJpXSA9ICh4ICYgTURC X1ZBTElEKSA/IERCX1ZBTElEfERCX1VTUlZBTElEfERCX1NUQUxFIDogMDsNCj4+ICAgICAgcmV0 dXJuICh0eG4tPm10X2RiZmxhZ3NbZGJpXSAmIHZhbGlkaXR5KTsNCj4+IH0NCj4+DQo+PiAgICAg IC8qKiBDaGVjayBcYiB0eG4gYW5kIFxiIGRiaSBhcmd1bWVudHMgdG8gYSBmdW5jdGlvbiBhbmQg aW5pdGlhbGl6ZSBkYiBpbmZvDQo+PiBpZiBuZWVkZWQgKi8NCj4+ICNkZWZpbmUgVFhOX0RCSV9F WElTVCh0eG4sIGRiaSwgdmFsaWRpdHkpIFwNCj4+ICAgICAgKCh0eG4pICYmIChkYmkjQzNDKHR4 biktPm10X251bWRicyAmJiAoKCh0eG4pLT5tdF9kYmZsYWdzW2RiaV0gJiAodmFsaWRpdHkpKQ0K Pj4gfHwgKCgodHhuKS0+bXRfZGJmbGFnc1tkYmldICYgREJfVU5VU0VEKSAmJiBtZGJfc2V0dXBf ZGJfaW5mbygodHhuKSwgKGRiaSksDQo+PiAodmFsaWRpdHkpKSkpKQ0KPj4NCj4+DQo+PiBUaGUg bmV4dCBpbXByb3ZlbWVudCBpcyBkb25lIGluIGFueSBmdW5jdGlvbiB3aGljaCBuZWVkcyB0byBs b29wIHRocm91Z2ggdGhlDQo+PiBkYXRhYmFzZXMgZm9yIGV4YW1wbGUgaW4gbWRiX2N1cnNvcnNf Y2xvc2UoKS4gQWdhaW4gdGhlIG1vcmUgZGF0YWJhc2VzIGluIHRoZQ0KPj4gZW52aXJvbm1lbnQg dGhlIGxvbmdlciB0aGUgZXhlY3V0aW9uIHRpbWUuDQo+PiBJdCBzaG91bGQgYmUgYmVzdCBpZiBs b29waW5nIG9ubHkgdGhyb3VnaCBkYmZsYWdzIGFuZCBzZWFyY2hpbmcgZm9yIHRob3NlDQo+PiBk YXRhYmFzZXMgd2hpY2ggYXJlIHVzZWQgKCFEQl9VTlVTRUQpLiBUaGlzIGNvdWxkIGJlIGRvbmUg Ynl0ZSB3aXNlIG9yIG1vcmUNCj4+IGVmZmljaWVudCBpbiA4LzQgYnl0ZSBzdGVwcyBjb21wYXJp bmcgd2l0aCBhbiBleHRlbmRlZCBtYXNrIERCX1VOVVNFRF9MT05HDQo+PiBpbnN0ZWFkIG9mIERC X1VOVVNFRC4gU28gd2UgY2FuIHNraXAgOCBvciA0ICgzMiBiaXQpIHVudXNlZCBkYXRhYmFzZXMg aW4gb25lDQo+PiBzdGVwIChzdGlsbCB3aXRoIHRoZSBhc3N1bXB0aW9uIHRoYXQgYSB0cmFuc2Fj dGlvbiByYXJlbHkgdXNlcyBhbGwgZGF0YWJhc2VzIG9mDQo+PiB0aGUgZW52aXJvbm1lbnQpLg0K Pj4NCj4+IFNvIHRoZSBsb29wIGxvb2tzIGFzIGZvbGxvd3MgYWx3YXlzIHN0YXJ0aW5nIGF0IHRo ZSBsb3dlciBpbmRleCB0byBhdm9pZA0KPj4gYWxpZ25tZW50IGlzc3VlcyB3aXRoIEFSTSBwcmlv ciB2Ni4NCj4+DQo+PiAjZGVmaW5lIERCX1VOVVNFRCAgICAgICAweDIwICAgICAgICAgICAgICAg IC8qKjwgREIgbm90IHVzZWQgaW4gdGhpcyB0eG4gKi8NCj4+DQo+PiAjaWZkZWYgTURCX1ZMMzIN Cj4+ICNkZWZpbmUgREJfVU5VU0VEX0xPTkcgIDB4MjAyMDIwMjAgICAgICAgICAgLyogREJfVU5V U0VEIGxvbmcgbWFzayBmb3IgZmFzdA0KPj4gdHJhY2tpbmcgKi8NCj4+ICNlbHNlDQo+PiAjZGVm aW5lIERCX1VOVVNFRF9MT05HICAweDIwMjAyMDIwMjAyMDIwMjAgIC8qIERCX1VOVVNFRCBsb25n IG1hc2sgZm9yIGZhc3QNCj4+IHRyYWNraW5nICovDQo+PiAjZW5kaWYNCj4+DQo+Pg0KPj4gI2lm ZGVmIE1EQl9WTDMyDQo+PiAjZGVmaW5lIE1EQl9XT1JEICAgIHVuc2lnbmVkIGludA0KPj4gI2Vs c2UNCj4+ICNkZWZpbmUgTURCX1dPUkQgICAgdW5zaWduZWQgbG9uZyBsb25nDQo+PiAjZW5kaWYN Cj4+DQo+Pg0KPj4NCj4+ICAgICAgTURCX2RiaSAlMz0gc3JjLT5tdF9udW1kYnM7DQo+PiAgICAg IE1EQl9kYmkgaSA9IDA7DQo+Pg0KPj4gICAgICB3aGlsZSAoMSkgew0KPj4gICAgICAgICAgdW5z aWduZWQgaW50IHVwcGVyID0gaSArIHNpemVvZihNREJfV09SRCk7DQo+PiAgICAgICAgICBpZiAo dXBwZXIgPCBuKSB7DQo+PiAgICAgICAgICAgICAgLy8gc2tpcCB1bnVzZWQNCj4+ICAgICAgICAg ICAgICBpZiAoKCooTURCX1dPUkQgKikodGRiZmxhZ3MgKyBpKSkgPT0gREJfVU5VU0VEX0xPTkcp IHsNCj4+ICAgICAgICAgICAgICAgICAgaSA9IHVwcGVyOw0KPj4gICAgICAgICAgICAgICAgICBj b250aW51ZTsNCj4+ICAgICAgICAgICAgICB9DQo+PiAgICAgICAgICB9DQo+PiAgICAgICAgICBl bHNlIHsNCj4+ICAgICAgICAgICAgICB1cHBlciA9IG47DQo+PiAgICAgICAgICB9DQo+Pg0KPj4g ICAgICAgICAgZm9yICg7IGkgPCB1cHBlcjsgaSsrKSB7DQo+PiAgICAgICAgICAgICAgLy8gYW55 IG90aGVyIGZpbHRlciBjcml0ZXJpYSBhcHByb3ByaWF0ZSB0byB0aGUgZnVuY3Rpb24NCj4+ICAg ICAgICAgICAgICAuLi4uDQo+PiAgICAgICAgICB9DQo+PiAgICAgICAgICBpZiAoaSA+PSBuKSB7 DQo+PiAgICAgICAgICAgICAgYnJlYWs7DQo+PiAgICAgICAgICB9DQo+PiAgICAgIH0NCj4+DQo+ Pg0KPj4NCj4NCj4NCj4tLSANCj4gICAtLSBIb3dhcmQgQ2h1DQo+ICAgQ1RPLCBTeW1hcyBDb3Jw LiAgICAgICAgICAgaHR0cDovL3d3dy5zeW1hcy5jb20NCj4gICBEaXJlY3RvciwgSGlnaGxhbmQg U3VuICAgICBodHRwOi8vaGlnaGxhbmRzdW4uY29tL2h5Yy8NCj4gICBDaGllZiBBcmNoaXRlY3Qs IE9wZW5MREFQICBodHRwOi8vd3d3Lm9wZW5sZGFwLm9yZy9wcm9qZWN0Lw0K