TWF5YmUgMzU1LzExMyBpcyBhY3R1YWxseSB0aGUgZGVmaW5pdGlvbiBvZiBQSSBhbmQgZXZlcnlv bmUgZWxzZSBnb3QKaXQgd3JvbmcgbG9sCgpPbiAzMCBNYXkgMjAxNSBhdCAxNToxMywgUnlhbiBP J0Nvbm5vciA8cm9jaWZpZXJAZ21haWwuY29tPiB3cm90ZToKPiBMb2wgb2sgNDQyNzAwNzA0NDYx NTExNTA1MDAzNDg1NDY0ODUyNTY4NTg3MTU4NyAvCj4gMTQwOTE2MDEwODUwNjI3Njc4MzA4NTcx ODQ0MDI1MjM3NTA5OTY1MyB0YWtlcyB0aGUgY2FrZS4KPgo+IE9uIDMwIE1heSAyMDE1IGF0IDA2 OjM5LCBEYW5pZWwgU2VycGVsbCA8ZGFuaWVsLnNlcnBlbGxAZ21haWwuY29tPiB3cm90ZToKPj4g SGksCj4+Cj4+IE9uIEZyaSwgTWF5IDI5LCAyMDE1IGF0IDg6MzMgQU0sIFJ1c3NlbGxNYyA8YXBw dGVjaG56QGdtYWlsLmNvbT4gd3JvdGU6Cj4+PiBJIHNhaWQ6Cj4+Pgo+Pj4+Cj4+PiBTb21ldGhp bmcgYmV0dGVyIHRoYW4gMzU1LzExMyBsb29rcyBkdWUgdG8gcG9wIG91dCBhcm91bmQKPj4+PiAy NDg2MTAgLyA3OTEzNSAod2hpY2ggaXMgYSBtdWx0aXBsZSBvZiAzNTUvMTEzKQo+Pj4KPj4+IFRo YXQgc2hvdWxkIGhhdmUgYmVlbjogIDI0ODUwMCAvIDc5MTAwLgo+Pj4gTm90ICB0aGUgMjQ4NjEw IC8gNzkxMzUgdGhhdCBJIHdyb3RlLCB3aGljaCB3YXMgZm9yIGEgbmVhcmJ5IGNlbGwgdGhhdCB3 YXMKPj4+IGFuIGluZmVyaW9yIGxvY2FsIG1heGltdW0uCj4+Cj4+IFRoZXJlIGFyZSBkaWZmZXJl bnQgbWV0cmljcyBvZiB3aGljaCBhcHByb3hpbWF0aW9uIGlzICJiZXR0ZXIiLgo+Pgo+PiBJZiB5 b3VyIG1ldHJpYyBpcyAibnVtYmVyIG9mIGJpdHMgb2YgbnVtZXJhdG9yICsgZGVub21pbmF0b3Ig LSBudW1iZXIgb2YgYml0cwo+PiBvZiB0aGUgYXBwcm94aW1hdGlvbiIsIDM1NS8xMTMgaXMgdGhl IGJlc3QgPCAxMF4yNTAsIHdpdGggOC41ICsgNi44IC0KPj4gMjEuOCA9IC02LjUKPj4KPj4gU28s IDM1NS8xMTMgaGFzIDYuNSBiaXRzIGxlc3MgdGhhbiB0aGUgZXF1aXZhbGVudCAiMy4xNDE1OTI5 My4uIi4KPj4KPj4gV2l0aCBhIGJydXRlLWZvcmNlIHNlYXJjaCwgdGhvc2UgYXJlIG90aGVyICJn b29kIiBhcHByb3hpbWF0aW9uczoKPj4KPj4gMyAvIDEgIGU6IDAuMTQyICAgYml0czogICAxLjYg KyAgMC4wIC0gMi44ICA9IC0xLjIKPj4gMjIgLyA3ICBlOiAwLjAwMTI2ICAgYml0czogICA0LjUg KyAgMi44IC0gOS42ICA9IC0yLjQKPj4gMzU1IC8gMTEzICBlOiAyLjY3ZS0wNyAgIGJpdHM6ICAg OC41ICsgIDYuOCAtIDIxLjggPSAtNi41Cj4+IDU0MTkzNTEgLyAxNzI1MDMzICBlOiAyLjIxZS0x NCAgIGJpdHM6ICAyMi40ICsgMjAuNyAtIDQ1LjQgPSAtMi4zCj4+IDIxMDUzMzQzMTQxIC8gNjcw MTQ4NzI1OSAgZTogMi42MmUtMjIgICBiaXRzOiAgMzQuMyArIDMyLjYgLSA3MS43ID0gLTQuOAo+ PiAyNjQ2NjkzMTI1MTM5MzA0MzQ1IC8gODQyNDY4NTg3NDI2NTEzMjA3ICBlOiAxLjQxZS0zOCAg IGJpdHM6ICA2MS4yICsKPj4gNTkuNSAtMTI1LjcgPSAtNS4wCj4+IDQ0MjcwMDcwNDQ2MTUxMTUw NTAwMzQ4NTQ2NDg1MjU2ODU4NzE1ODcgLwo+PiAxNDA5MTYwMTA4NTA2Mjc2NzgzMDg1NzE4NDQw MjUyMzc1MDk5NjUzIGU6IDMuMTFlLTgxICAgYml0czogMTMxLjcKPj4gKzEzMC4xIC0yNjcuNCA9 IC01LjcKPj4KPj4gImUiIGlzIHRoZSBhYnNvbHV0ZSBlcnJvciAoYXByb3gtcGkpLCB0aGUgYml0 cyBpcyBhcyBleHBsYWluZWQgYWJvdmUuCj4+IEFzIHlvdSBzZWUsIGV2ZW4KPj4gd2l0aCA0MCBk aWdpdCBudW1iZXJzIHlvdSBjYW4ndCBnYWluIGFzIG11Y2ggYml0cyBhcyB3aXRoIDM1NS8xMTMu Cj4+Cj4+IElmIHlvdXIgbWV0cmljIGlzIHNpbXBseSAiYmVzdCBhYnNvbHV0ZSBlcnJvciIsIHRo ZW4gdGhlcmUgYXJlIG1hbnkKPj4gYXBwcm94aW1hdGlvbnMuIEhlcmUgaXMKPj4gYSB0YWJsZTog aHR0cDovL3Fpbi5sYXlhLmNvbS90ZWNoX3Byb2plY3RzX2FwcHJveHBpLmh0bWwKPj4KPj4gVGhl IGZvbGxvd2luZyBweXRob24gcHJvZ3JhbSBjYW4gZ2VuZXJhdGUgYSB0YWJsZSBzaW1pbGFyIHRv IHRoZSBhYm92ZQo+PiBmb3IgYW55IG51bWJlcgo+PiBzcGVjaWZpZWQgb24gY29tbWFuZCBsaW5l Ogo+Pgo+PiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQo+PiAj IS91c3IvYmluL2VudiBweXRob24KPj4gaW1wb3J0IGRlY2ltYWwsIHN5cywgbWF0aAo+PiBkZWNp bWFsLmdldGNvbnRleHQoKS5wcmVjID0gMjUwICMgVXNlIGEgYmlnZ2VyIG51bWJlciBpZiB5b3Ug bmVlZCBtb3JlIHByZWNpc2lvbgo+PiBsb2cyID0gbWF0aC5sb2coMikKPj4gYmVzdCA9IDEwMAo+ Pgo+PiBkZWYgdGVzdE51bShudW1lciwgZGVub20sIG51bSk6Cj4+ICAgICBnbG9iYWwgYmVzdAo+ Pgo+PiAgICAgeCA9IGRlY2ltYWwuRGVjaW1hbChudW1lcikgLyBkZWNpbWFsLkRlY2ltYWwoZGVu b20pCj4+ICAgICBlID0gZmxvYXQoeCAtIG51bSkKPj4KPj4gICAgIHBvcyA9IFRydWUKPj4gICAg IGlmIGUgPCAwIDoKPj4gICAgICAgICBlID0gLSBlCj4+ICAgICAgICAgcG9zID0gRmFsc2UKPj4K Pj4gICAgICMgVW5jb21tZW50IG9uZSBvZiB0aG9zZSB0YXJnZXQgc2VhcmNoOgo+PiAjICAgIGIg PSBlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgQmVzdCBhYnNvbHV0 ZSBlcnJvcgo+PiAgICAgYiA9IG51bWVyICogZGVub20gKiBlICAgICAgICAgICAgICAgICAgICAg ICAgIyBCZXN0IHVzZSBvZiBiaXRzCj4+ICMgICAgYiA9IGUgKiBtYXRoLnNxcnQobnVtZXIqbnVt ZXIrZGVub20qZGVub20pICAgIyBCZXN0IGVycm9yCj4+IHByb3BvcnRpb25hbCB0byBudW1lci9k ZW5vbQo+PiAgICAgaWYgYiA8IGJlc3QgOgo+PiAgICAgICAgIGRpYWcgPSBlICogbWF0aC5zcXJ0 KG51bWVyKm51bWVyK2Rlbm9tKmRlbm9tKQo+PiAgICAgICAgIGJpdDEgPSBtYXRoLmxvZyhudW1l cikgLyBsb2cyCj4+ICAgICAgICAgYml0MiA9IG1hdGgubG9nKGRlbm9tKSAvIGxvZzIKPj4gICAg ICAgICBpZiBlID09IDA6Cj4+ICAgICAgICAgICAgIGJpdGUgPSAwCj4+ICAgICAgICAgZWxzZToK Pj4gICAgICAgICAgICAgYml0ZSA9IG1hdGgubG9nKGUpIC8gbG9nMgo+PiAgICAgICAgIGJlc3Qg PSBiCj4+ICAgICAgICAgcHJpbnQgInswOjMxZH0vezE6MzFkfSA9IHsyOi42MGZ9IGU9ezM6OC4z Z30gKGRpYWc6IHs4OjYuMWd9KQo+PiAoYml0czogezQ6LjFmfSt7NTouMWZ9LXs2Oi4xZn0gPSB7 NzouMWZ9KSIuZm9ybWF0KAo+PiAgICAgICAgICAgICBudW1lciAsIGRlbm9tICwgeCAsIGUsIGJp dDEsIGJpdDIsIC1iaXRlLCBiaXQxK2JpdDIrYml0ZSwgZGlhZykKPj4KPj4gICAgIHJldHVybiBw b3MKPj4KPj4gIyBTdGFydGluZyBzZWFyY2ggdmFsdWVzLCB1c2VzIFN0ZXJu4oCTQnJvY290IHNl YXJjaCB0cmVlCj4+IG4wID0gMAo+PiBkMCA9IDEKPj4gbjEgPSAxCj4+IGQxID0gMAo+PiAjIFRh cmdldCB2YWx1ZSBzcGVjaWZpZWQgaW4gY29tbWFuZCBsaW5lICh1c2UgYXMgbWFueSBkaWdpdHMg YXMgeW91IG5lZWQpCj4+IHRhcmdldCA9IGRlY2ltYWwuRGVjaW1hbChzeXMuYXJndlsxXSkKPj4K Pj4gd2hpbGUgZDAgPCAxZSs0MDoKPj4gICAgIG51bSA9IG4wK24xCj4+ICAgICBkZW4gPSBkMCtk MQo+PiAgICAgaWYgdGVzdE51bShudW0sIGRlbiwgdGFyZ2V0KToKPj4gICAgICAgICBuMSA9IG51 bQo+PiAgICAgICAgIGQxID0gZGVuCj4+ICAgICBlbHNlOgo+PiAgICAgICAgIG4wID0gbnVtCj4+ ICAgICAgICAgZDAgPSBkZW4KPj4gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0KPj4KPj4gLS0KPj4gaHR0cDovL3d3dy5waWNsaXN0LmNvbS90ZWNocmVmL3BpY2xp c3QgUElDL1NYIEZBUSAmIGxpc3QgYXJjaGl2ZQo+PiBWaWV3L2NoYW5nZSB5b3VyIG1lbWJlcnNo aXAgb3B0aW9ucyBhdAo+PiBodHRwOi8vbWFpbG1hbi5taXQuZWR1L21haWxtYW4vbGlzdGluZm8v cGljbGlzdAoKLS0gCmh0dHA6Ly93d3cucGljbGlzdC5jb20vdGVjaHJlZi9waWNsaXN0IFBJQy9T WCBGQVEgJiBsaXN0IGFyY2hpdmUKVmlldy9jaGFuZ2UgeW91ciBtZW1iZXJzaGlwIG9wdGlvbnMg YXQKaHR0cDovL21haWxtYW4ubWl0LmVkdS9tYWlsbWFuL2xpc3RpbmZvL3BpY2xpc3QK .