Name: series-workflow64czl Phase: Failed StartedAt: 2026-08-15 15:52:23 +0000 UTC FinishedAt: 2026-08-15 15:56:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflow64czl[0] Phase: Succeeded StartedAt: 2026-08-15 15:52:23 +0000 UTC FinishedAt: 2026-08-15 15:56:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflow64czl[0].run-triage Phase: Succeeded StartedAt: 2026-08-15 15:52:23 +0000 UTC FinishedAt: 2026-08-15 15:56:35 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "AI determined the patch has no functional impact", "targets": null, "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE1IDE1OjU0PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGVycm9yIGhhbmRsaW5nIHBhdGggaW4gYGl1Y3Zfc29ja19jb25uZWN0YCBmb3IgQUZfSVVDViBzb2NrZXRzLiBIb3dldmVyLCB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJpY3RseSBndWFyZGVkIGJ5IGBpdWN2LVx1MDAzZXRyYW5zcG9ydCA9PSBBRl9JVUNWX1RSQU5TX0lVQ1ZgLCB3aGljaCBpcyBvbmx5IHNldCB3aGVuIHRoZSBrZXJuZWwgaXMgcnVubmluZyB1bmRlciB0aGUgSUJNIHovVk0gaHlwZXJ2aXNvciAoYG1hY2hpbmVfaXNfdm0oKWApLiBTaW5jZSBRRU1VIGVtdWxhdGVzIEtWTSBvciBhIGJhcmUtbWV0YWwgTFBBUiBhbmQgZG9lcyBub3QgZW11bGF0ZSB6L1ZNLCB0aGlzIGNvZGUgcGF0aCBpcyBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIFFFTVUgb3IgR0NFLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNSAxNTo1NDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGJmZWExNzQ0ODdiY2Y2NDUyMTdiYTFjOWJiMTg4ZmNjNmIxYTQxNDRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU2F0IEF1ZyAxNSAxNTo1NDoxNiAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvaXVjdi9hZl9pdWN2LmMgYi9uZXQvaXVjdi9hZl9pdWN2LmNcbmluZGV4IGVhMDQ3YmFiNjVlN2MuLjZmYjAwNDFjNGM5ODcgMTAwNjQ0XG4tLS0gYS9uZXQvaXVjdi9hZl9pdWN2LmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pdWN2L2FmX2l1Y3YuY1xuQEAgLTc3OCw4ICYjNDM7Nzc4LDE2IEBAIHN0YXRpYyBpbnQgaXVjdl9zb2NrX2Nvbm5lY3Qoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHNvY2thZGRyX3Vuc2l6ZWQgKmFkZHIsXG4gXHRpZiAoc2stXHUwMDNlc2tfc3RhdGUgPT0gSVVDVl9ESVNDT05OIHx8IHNrLVx1MDAzZXNrX3N0YXRlID09IElVQ1ZfQ0xPU0VEKVxuIFx0XHRlcnIgPSAtRUNPTk5SRUZVU0VEO1xuIFxuLVx0aWYgKGVyciBcdTAwMjZcdTAwMjYgaXVjdi1cdTAwM2V0cmFuc3BvcnQgPT0gQUZfSVVDVl9UUkFOU19JVUNWKVxuJiM0MztcdGlmIChlcnIgXHUwMDI2XHUwMDI2IGl1Y3YtXHUwMDNldHJhbnNwb3J0ID09IEFGX0lVQ1ZfVFJBTlNfSVVDVikge1xuIFx0XHRpdWN2X3NldmVyX3BhdGgoc2ssIDApO1xuJiM0MztcdFx0LyogQSBjb25uYWNrIG1heSBoYXZlIGxhbmRlZCB3aGlsZSB0aGUgd2FpdCB3YXMgdW53aW5kaW5nOyB0aGVcbiYjNDM7XHRcdCAqIHBhdGggaXMgZ29uZSwgc28gdGhlIHNvY2tldCBtdXN0IG5vdCBzdGlsbCBjbGFpbSBpdC5cbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0aWYgKHNrLVx1MDAzZXNrX3N0YXRlID09IElVQ1ZfQ09OTkVDVEVEKSB7XG4mIzQzO1x0XHRcdHNrLVx1MDAzZXNrX3N0YXRlID0gSVVDVl9ESVNDT05OO1xuJiM0MztcdFx0XHRzay1cdTAwM2Vza19zdGF0ZV9jaGFuZ2Uoc2spO1xuJiM0MztcdFx0fVxuJiM0MztcdH1cbiBcbiBkb25lOlxuIFx0cmVsZWFzZV9zb2NrKHNrKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNSAxNTo1NDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4ybTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGVycm9yIGhhbmRsaW5nIHBhdGggaW4gYGl1Y3Zfc29ja19jb25uZWN0YCBmb3IgQUZfSVVDViBzb2NrZXRzLiBIb3dldmVyLCB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJpY3RseSBndWFyZGVkIGJ5IGBpdWN2LVx1MDAzZXRyYW5zcG9ydCA9PSBBRl9JVUNWX1RSQU5TX0lVQ1ZgLCB3aGljaCBpcyBvbmx5IHNldCB3aGVuIHRoZSBrZXJuZWwgaXMgcnVubmluZyB1bmRlciB0aGUgSUJNIHovVk0gaHlwZXJ2aXNvciAoYG1hY2hpbmVfaXNfdm0oKWApLiBTaW5jZSBRRU1VIGVtdWxhdGVzIEtWTSBvciBhIGJhcmUtbWV0YWwgTFBBUiBhbmQgZG9lcyBub3QgZW11bGF0ZSB6L1ZNLCB0aGlzIGNvZGUgcGF0aCBpcyBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIFFFTVUgb3IgR0NFLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGJmZWExNzQ0ODdiY2Y2NDUyMTdiYTFjOWJiMTg4ZmNjNmIxYTQxNDQKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgU2F0IEF1ZyAxNSAxNTo1NDoxNiAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC9pdWN2L2FmX2l1Y3YuYyBiL25ldC9pdWN2L2FmX2l1Y3YuYwppbmRleCBlYTA0N2JhYjY1ZTdjLi42ZmIwMDQxYzRjOTg3IDEwMDY0NAotLS0gYS9uZXQvaXVjdi9hZl9pdWN2LmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2l1Y3YvYWZfaXVjdi5jCkBAIC03NzgsOCAmIzQzOzc3OCwxNiBAQCBzdGF0aWMgaW50IGl1Y3Zfc29ja19jb25uZWN0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrYWRkcl91bnNpemVkICphZGRyLAogCWlmIChzay0mZ3Q7c2tfc3RhdGUgPT0gSVVDVl9ESVNDT05OIHx8IHNrLSZndDtza19zdGF0ZSA9PSBJVUNWX0NMT1NFRCkKIAkJZXJyID0gLUVDT05OUkVGVVNFRDsKIAotCWlmIChlcnIgJmFtcDsmYW1wOyBpdWN2LSZndDt0cmFuc3BvcnQgPT0gQUZfSVVDVl9UUkFOU19JVUNWKQomIzQzOwlpZiAoZXJyICZhbXA7JmFtcDsgaXVjdi0mZ3Q7dHJhbnNwb3J0ID09IEFGX0lVQ1ZfVFJBTlNfSVVDVikgewogCQlpdWN2X3NldmVyX3BhdGgoc2ssIDApOwomIzQzOwkJLyogQSBjb25uYWNrIG1heSBoYXZlIGxhbmRlZCB3aGlsZSB0aGUgd2FpdCB3YXMgdW53aW5kaW5nOyB0aGUKJiM0MzsJCSAqIHBhdGggaXMgZ29uZSwgc28gdGhlIHNvY2tldCBtdXN0IG5vdCBzdGlsbCBjbGFpbSBpdC4KJiM0MzsJCSAqLwomIzQzOwkJaWYgKHNrLSZndDtza19zdGF0ZSA9PSBJVUNWX0NPTk5FQ1RFRCkgewomIzQzOwkJCXNrLSZndDtza19zdGF0ZSA9IElVQ1ZfRElTQ09OTjsKJiM0MzsJCQlzay0mZ3Q7c2tfc3RhdGVfY2hhbmdlKHNrKTsKJiM0MzsJCX0KJiM0MzsJfQogCiBkb25lOgogCXJlbGVhc2Vfc29jayhzayk7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE1IDE1OjU0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxMzQKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAyOTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgUGF0Y2ggaW4gdGhlIElVQ1YgU29ja2V0IEZhbWlseSoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGluIGBuZXQvaXVjdi9hZl9pdWN2LmNgLCBzcGVjaWZpY2FsbHkgdGhlIGBpdWN2X3NvY2tfY29ubmVjdGAgZnVuY3Rpb24uIFRoZSBjb2RlIGFkZHMgYSBjb25kaXRpb25hbCBjaGVjayBhZnRlciBhbiBlcnJvciBpbiB0aGUgQUZfSVVDViBzb2NrZXQgZmFtaWx5LCByaWdodD8gSXQgbG9va3MgbGlrZSBpZiB0aGVyZSYjMzk7cyBhbiBlcnJvciBhbmQgdGhlIHRyYW5zcG9ydCBpcyBJVUNWLCBpdCBzZXZlcnMgdGhlIHBhdGggYW5kIHRoZW4sIGltcG9ydGFudGx5LCBjaGVja3MgdGhlIHNvY2tldCBzdGF0ZS4gSWYgaXQmIzM5O3Mgc3RpbGwgY29ubmVjdGVkLCBpdCBzZXRzIGl0IHRvIGRpc2Nvbm5lY3RlZCBhbmQgdHJpZ2dlcnMgdGhlIHN0YXRlIGNoYW5nZSBjYWxsYmFjay4gVGhhdCYjMzk7cyBhIHJlYXNvbmFibGUgZGVmZW5zaXZlIG1lYXN1cmUgdG8gcHJldmVudCB0aGUgc29ja2V0IGZyb20gZmFsc2VseSBjbGFpbWluZyBhIGNvbm5lY3Rpb24gYWZ0ZXIgYSBkaXNjb25uZWN0IGR1cmluZyBhIGBjb25uZWN0KClgIGF0dGVtcHQuCgpOb3csIEFGX0lVQ1YuLi4gdGhhdCYjMzk7cyB6L1ZNIElVQ1YsIHdoaWNoIG1lYW5zIHMzOTAgYXJjaGl0ZWN0dXJlLiBUaGlzIGlzIGltcG9ydGFudC4gTGV0IG1lIHF1aWNrbHkgY2hlY2sgaWYgdGhpcyBpcyBldmVuIHJlbGV2YW50IGZvciBzdGFuZGFyZCBRRU1VIHNldHVwcyBvciBpZiBpdCYjMzk7cyBkZXBlbmRlbnQgb24gc3BlY2lmaWMgczM5MCBoYXJkd2FyZS4gV2FpdCwgaXNuJiMzOTt0IHN5emthbGxlciBjb25maWd1cmVkIHRvIGZ1enogczM5MHggaWYgaXQmIzM5O3MgdGhlcmU/IFRob3VnaCBteSB0eXBpY2FsIHByaW9yaXR5IGlzIHdoZXRoZXIgZnV6emluZyBpcyB3b3J0aCBkb2luZywgSSYjMzk7bGwgbmVlZCB0byBjaGVjayB0aGUgS2NvbmZpZywgc28gSSYjMzk7bSB0aGlua2luZyBJVUNWIGlzIHMzOTAgc3BlY2lmaWMuIEFscmlnaHQsIGxldCYjMzk7cyBzZWUgd2hhdCB0aGUgYG5ldC9pdWN2L0tjb25maWdgIGZpbGUgdGVsbHMgdXMgYWJvdXQgdGhpcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNSAxNTo1NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBBRl9JVUNWJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2l1Y3YvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTUgMTU6NTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjc2NQoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDMxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246CgoqKkludmVzdGlnYXRpbmcgTmV0d29yayBDb25maWd1cmF0aW9uKioKClJpZ2h0LCBsZXQmIzM5O3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoZXJlIHRoaXMgbmV0d29yayBjb25maWd1cmF0aW9uIGxpdmVzLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZGl2ZSBpbnRvIHRoZSBgbmV0YCBkaXJlY3RvcnkuIFNpbmNlIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggSVVDViBzcGVjaWZpY2FsbHksIHRoZSBvYnZpb3VzIHBsYWNlIHRvIHN0YXJ0IGlzIGVpdGhlciBgbmV0L2l1Y3YvS2NvbmZpZ2AsIG9yIGp1c3QgdGhlIGdlbmVyYWwgYG5ldC9LY29uZmlnYC4gQW5kLCBpZiB0aGUgY29uZmlndXJhdGlvbiBleGlzdHMsIHRoZW4gSSYjMzk7bGwgbG9vayBmb3IgYSBjb3JyZXNwb25kaW5nIGBNYWtlZmlsZWAgYW5kIGl0JiMzOTtzIG1vc3QgbGlrZWx5IHRvIGJlIGluIHRoZSBgbmV0L2l1Y3YvYCBkaXJlY3RvcnkgdG9vLiBUaGVzZSBLY29uZmlnIGZpbGVzIGFyZSB0aGUgaGVhcnQgb2YgdGhlIGNvbmZpZ3VyYXRpb24gcHJvY2Vzcywgc28gdGhhdCYjMzk7cyBkZWZpbml0ZWx5IHRoZSBmaXJzdCBsb2dpY2FsIHN0ZXAuIFRpbWUgdG8gY2hlY2sgdGhvc2UgZmlsZXMgYW5kIHNlZSB3aGF0IHRoZSBidWlsZCBzeXN0ZW0gaGFzIHRvIG9mZmVyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE1IDE1OjU0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0FGX0lVQ1YmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXVjdi8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2l1Y3YvS2NvbmZpZz0xMT1jb25maWcgQUZJVUNWXG4tLVxubmV0L2l1Y3YvS2NvbmZpZy0xMy1cdGRlZl90cmlzdGF0ZSBtIGlmIFFFVEhfTDMgfHwgSVVDVlxubmV0L2l1Y3YvS2NvbmZpZzoxNDpcdHByb21wdCBcJiMzNDtBRl9JVUNWIFNvY2tldCBzdXBwb3J0IChTMzkwIC0gei9WTSBhbmQgSGlwZXJTb2NrZXRzIHRyYW5zcG9ydClcJiMzNDtcbm5ldC9pdWN2L0tjb25maWctMTUtXHRoZWxwXG5uZXQvaXVjdi9LY29uZmlnOjE2Olx0ICBTZWxlY3QgdGhpcyBvcHRpb24gaWYgeW91IHdhbnQgdG8gdXNlIEFGX0lVQ1Ygc29ja2V0IGFwcGxpY2F0aW9uc1xubmV0L2l1Y3YvS2NvbmZpZy0xNy1cdCAgYmFzZWQgb24gei9WTSBpbnRlci11c2VyIGNvbW11bmljYXRpb24gdmVoaWNsZSBvciBiYXNlZCBvblxuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYz00Mj1zdGF0aWMgc3RydWN0IHByb3RvIGl1Y3ZfcHJvdG8gPSB7XG5uZXQvaXVjdi9hZl9pdWN2LmM6NDM6XHQubmFtZVx0XHQ9IFwmIzM0O0FGX0lVQ1ZcJiMzNDssXG5uZXQvaXVjdi9hZl9pdWN2LmMtNDQtXHQub3duZXJcdFx0PSBUSElTX01PRFVMRSxcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmM9NDk9c3RhdGljIHN0cnVjdCBpdWN2X2hhbmRsZXIgYWZfaXVjdl9oYW5kbGVyO1xubmV0L2l1Y3YvYWZfaXVjdi5jLTUwLVxubmV0L2l1Y3YvYWZfaXVjdi5jOjUxOi8qIHNwZWNpYWwgQUZfSVVDViBJUFJNIG1lc3NhZ2VzICovXG5uZXQvaXVjdi9hZl9pdWN2LmMtNTItc3RhdGljIGNvbnN0IHU4IGlwcm1fc2h1dGRvd25bOF0gPVxuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYz0xMDc9c3RhdGljIGlubGluZSB2b2lkIGxvd19ubWNweSh1bnNpZ25lZCBjaGFyICpkc3QsIGNoYXIgKnNyYylcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmMtMTE4LSAqXG5uZXQvaXVjdi9hZl9pdWN2LmM6MTE5OiAqIEZvciBJVUNWX0lQUk1EQVRBLCBBRl9JVUNWIHVzZXMgdGhlIGZvbGxvd2luZyBjb252ZW50aW9uIHRvIHRyYW5zcG9ydCBzb2NrZXRcbm5ldC9pdWN2L2FmX2l1Y3YuYy0xMjAtICogZGF0YTpcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmM9MTY2PXN0YXRpYyBpbmxpbmUgaW50IGl1Y3ZfYmVsb3dfbXNnbGltKHN0cnVjdCBzb2NrICpzaylcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmMtMTcxLVx0XHRyZXR1cm4gMTtcbm5ldC9pdWN2L2FmX2l1Y3YuYzoxNzI6XHRpZiAoaXVjdi1cdTAwM2V0cmFuc3BvcnQgPT0gQUZfSVVDVl9UUkFOU19JVUNWKVxubmV0L2l1Y3YvYWZfaXVjdi5jLTE3My1cdFx0cmV0dXJuIChhdG9taWNfcmVhZChcdTAwMjZpdWN2LVx1MDAzZXNrYnNfaW5feG1pdCkgXHUwMDNjIGl1Y3YtXHUwMDNlcGF0aC1cdTAwM2Vtc2dsaW0pO1xuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYz0xOTc9c3RhdGljIGludCBhZml1Y3ZfaHNfc2VuZChzdHJ1Y3QgaXVjdl9tZXNzYWdlICppbXNnLCBzdHJ1Y3Qgc29jayAqc29jayxcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmMtMjA3LVxubmV0L2l1Y3YvYWZfaXVjdi5jOjIwODpcdHBoc19oZHItXHUwMDNlbWFnaWMgPSBFVEhfUF9BRl9JVUNWO1xubmV0L2l1Y3YvYWZfaXVjdi5jLTIwOS1cdHBoc19oZHItXHUwMDNldmVyc2lvbiA9IDE7XG5uZXQvaXVjdi9hZl9pdWN2LmMtMjEwLVx0cGhzX2hkci1cdTAwM2VmbGFncyA9IGZsYWdzO1xubmV0L2l1Y3YvYWZfaXVjdi5jOjIxMTpcdGlmIChmbGFncyA9PSBBRl9JVUNWX0ZMQUdfU1lOKVxubmV0L2l1Y3YvYWZfaXVjdi5jLTIxMi1cdFx0cGhzX2hkci1cdTAwM2V3aW5kb3cgPSBpdWN2LVx1MDAzZW1zZ2xpbWl0O1xubmV0L2l1Y3YvYWZfaXVjdi5jOjIxMzpcdGVsc2UgaWYgKChmbGFncyA9PSBBRl9JVUNWX0ZMQUdfV0lOKSB8fCAhZmxhZ3MpIHtcbm5ldC9pdWN2L2FmX2l1Y3YuYy0yMTQtXHRcdGNvbmZpcm1fcmVjdiA9IGF0b21pY19yZWFkKFx1MDAyNml1Y3YtXHUwMDNlbXNnX3JlY3YpO1xuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYy0yMTYtXHRcdGlmIChjb25maXJtX3JlY3YpXG5uZXQvaXVjdi9hZl9pdWN2LmM6MjE3Olx0XHRcdHBoc19oZHItXHUwMDNlZmxhZ3MgPSBwaHNfaGRyLVx1MDAzZWZsYWdzIHwgQUZfSVVDVl9GTEFHX1dJTjtcbm5ldC9pdWN2L2FmX2l1Y3YuYy0yMTgtXHR9XG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jLTIzNS1cbm5ldC9pdWN2L2FmX2l1Y3YuYzoyMzY6XHRkZXZfaGFyZF9oZWFkZXIoc2tiLCBza2ItXHUwMDNlZGV2LCBFVEhfUF9BRl9JVUNWLCBOVUxMLCBOVUxMLCBza2ItXHUwMDNlbGVuKTtcbm5ldC9pdWN2L2FmX2l1Y3YuYy0yMzctXG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jLTI1MC1cdH1cbm5ldC9pdWN2L2FmX2l1Y3YuYzoyNTE6XHRza2ItXHUwMDNlcHJvdG9jb2wgPSBjcHVfdG9fYmUxNihFVEhfUF9BRl9JVUNWKTtcbm5ldC9pdWN2L2FmX2l1Y3YuYy0yNTItXG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jPTM5NT1zdGF0aWMgdm9pZCBpdWN2X3NvY2tfY2xvc2Uoc3RydWN0IHNvY2sgKnNrKVxuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYy00MDgtXHRjYXNlIElVQ1ZfQ09OTkVDVEVEOlxubmV0L2l1Y3YvYWZfaXVjdi5jOjQwOTpcdFx0aWYgKGl1Y3YtXHUwMDNldHJhbnNwb3J0ID09IEFGX0lVQ1ZfVFJBTlNfSElQRVIpIHtcbm5ldC9pdWN2L2FmX2l1Y3YuYzo0MTA6XHRcdFx0ZXJyID0gaXVjdl9zZW5kX2N0cmwoc2ssIEFGX0lVQ1ZfRkxBR19GSU4pO1xubmV0L2l1Y3YvYWZfaXVjdi5jLTQxMS1cdFx0XHRzay1cdTAwM2Vza19zdGF0ZSA9IElVQ1ZfRElTQ09OTjtcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmM9NDY2PXN0YXRpYyBzdHJ1Y3Qgc29jayAqaXVjdl9zb2NrX2FsbG9jKHN0cnVjdCBzb2NrZXQgKnNvY2ssIGludCBwcm90bywgZ2ZwX3QgcHJpbywgaW50IGtlcm4pXG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jLTQ5My1cdGlmIChwcl9pdWN2KVxubmV0L2l1Y3YvYWZfaXVjdi5jOjQ5NDpcdFx0aXVjdi1cdTAwM2V0cmFuc3BvcnQgPSBBRl9JVUNWX1RSQU5TX0lVQ1Y7XG5uZXQvaXVjdi9hZl9pdWN2LmMtNDk1LVx0ZWxzZVxubmV0L2l1Y3YvYWZfaXVjdi5jOjQ5NjpcdFx0aXVjdi1cdTAwM2V0cmFuc3BvcnQgPSBBRl9JVUNWX1RSQU5TX0hJUEVSO1xubmV0L2l1Y3YvYWZfaXVjdi5jLTQ5Ny1cbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmM9NTgyPXN0YXRpYyBpbnQgaXVjdl9zb2NrX2JpbmQoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHNvY2thZGRyX3Vuc2l6ZWQgKmFkZHIsXG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jLTU5My1cdGlmIChhZGRyX2xlbiBcdTAwM2Mgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pdWN2KSB8fFxubmV0L2l1Y3YvYWZfaXVjdi5jOjU5NDpcdCAgICBhZGRyLVx1MDAzZXNhX2ZhbWlseSAhPSBBRl9JVUNWKVxubmV0L2l1Y3YvYWZfaXVjdi5jLTU5NS1cdFx0cmV0dXJuIC1FSU5WQUw7XG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jLTYzMy1cdFx0XHRzay1cdTAwM2Vza19zdGF0ZSA9IElVQ1ZfQk9VTkQ7XG5uZXQvaXVjdi9hZl9pdWN2LmM6NjM0Olx0XHRcdGl1Y3YtXHUwMDNldHJhbnNwb3J0ID0gQUZfSVVDVl9UUkFOU19ISVBFUjtcbm5ldC9pdWN2L2FmX2l1Y3YuYy02MzUtXHRcdFx0aWYgKCFpdWN2LVx1MDAzZW1zZ2xpbWl0KVxuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYy02NDctXHRcdHNrLVx1MDAzZXNrX3N0YXRlID0gSVVDVl9CT1VORDtcbm5ldC9pdWN2L2FmX2l1Y3YuYzo2NDg6XHRcdGl1Y3YtXHUwMDNldHJhbnNwb3J0ID0gQUZfSVVDVl9UUkFOU19JVUNWO1xubmV0L2l1Y3YvYWZfaXVjdi5jLTY0OS1cdFx0c2stXHUwMDNlc2tfYWxsb2NhdGlvbiB8PSBHRlBfRE1BO1xuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYz02NjU9c3RhdGljIGludCBpdWN2X3NvY2tfYXV0b2JpbmQoc3RydWN0IHNvY2sgKnNrKVxuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYy02NzMtXHRtZW1jcHkoaXVjdi1cdTAwM2VzcmNfdXNlcl9pZCwgaXVjdl91c2VyaWQsIDgpO1xubmV0L2l1Y3YvYWZfaXVjdi5jOjY3NDpcdGl1Y3YtXHUwMDNldHJhbnNwb3J0ID0gQUZfSVVDVl9UUkFOU19JVUNWO1xubmV0L2l1Y3YvYWZfaXVjdi5jLTY3NS1cdHNrLVx1MDAzZXNrX2FsbG9jYXRpb24gfD0gR0ZQX0RNQTtcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmM9NzMzPXN0YXRpYyBpbnQgaXVjdl9zb2NrX2Nvbm5lY3Qoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHNvY2thZGRyX3Vuc2l6ZWQgKmFkZHIsXG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jLTc0MC1cbm5ldC9pdWN2L2FmX2l1Y3YuYzo3NDE6XHRpZiAoYWxlbiBcdTAwM2Mgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pdWN2KSB8fCBhZGRyLVx1MDAzZXNhX2ZhbWlseSAhPSBBRl9JVUNWKVxubmV0L2l1Y3YvYWZfaXVjdi5jLTc0Mi1cdFx0cmV0dXJuIC1FSU5WQUw7XG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jLTc0Ny1cdGlmIChzay1cdTAwM2Vza19zdGF0ZSA9PSBJVUNWX09QRU4gXHUwMDI2XHUwMDI2XG5uZXQvaXVjdi9hZl9pdWN2LmM6NzQ4Olx0ICAgIGl1Y3YtXHUwMDNldHJhbnNwb3J0ID09IEFGX0lVQ1ZfVFJBTlNfSElQRVIpXG5uZXQvaXVjdi9hZl9pdWN2LmMtNzQ5LVx0XHRyZXR1cm4gLUVCQURGRDsgLyogZXhwbGljaXQgYmluZCByZXF1aXJlZCAqL1xuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYy03NjUtXG5uZXQvaXVjdi9hZl9pdWN2LmM6NzY2Olx0aWYgKGl1Y3YtXHUwMDNldHJhbnNwb3J0ID09IEFGX0lVQ1ZfVFJBTlNfSElQRVIpXG5uZXQvaXVjdi9hZl9pdWN2LmM6NzY3Olx0XHRlcnIgPSBpdWN2X3NlbmRfY3RybChzb2NrLVx1MDAzZXNrLCBBRl9JVUNWX0ZMQUdfU1lOKTtcbm5ldC9pdWN2L2FmX2l1Y3YuYy03NjgtXHRlbHNlXG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jLTc4MC1cbm5ldC9pdWN2L2FmX2l1Y3YuYzo3ODE6XHRpZiAoZXJyIFx1MDAyNlx1MDAyNiBpdWN2LVx1MDAzZXRyYW5zcG9ydCA9PSBBRl9JVUNWX1RSQU5TX0lVQ1YpIHtcbm5ldC9pdWN2L2FmX2l1Y3YuYy03ODItXHRcdGl1Y3Zfc2V2ZXJfcGF0aChzaywgMCk7XG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jPTg3Nz1zdGF0aWMgaW50IGl1Y3Zfc29ja19nZXRuYW1lKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrYWRkciAqYWRkcixcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmMtODgzLVxubmV0L2l1Y3YvYWZfaXVjdi5jOjg4NDpcdGFkZHItXHUwMDNlc2FfZmFtaWx5ID0gQUZfSVVDVjtcbm5ldC9pdWN2L2FmX2l1Y3YuYy04ODUtXG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jPTkyND1zdGF0aWMgaW50IGl1Y3Zfc29ja19zZW5kbXNnKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZyxcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmMtMTAwNi1cdCAqIGZvciBTT0NLX1NUUkVBTSB3ZSBtaWdodCB3YW50IHRvIGltcHJvdmUgaXQgaW4gZnV0dXJlICovXG5uZXQvaXVjdi9hZl9pdWN2LmM6MTAwNzpcdGlmIChpdWN2LVx1MDAzZXRyYW5zcG9ydCA9PSBBRl9JVUNWX1RSQU5TX0hJUEVSKSB7XG5uZXQvaXVjdi9hZl9pdWN2LmMtMTAwOC1cdFx0aGVhZHJvb20gPSBzaXplb2Yoc3RydWN0IGFmX2l1Y3ZfdHJhbnNfaGRyKSAmIzQzO1xuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYy0xMDUxLVxubmV0L2l1Y3YvYWZfaXVjdi5jOjEwNTI6XHRpZiAoaXVjdi1cdTAwM2V0cmFuc3BvcnQgPT0gQUZfSVVDVl9UUkFOU19ISVBFUikge1xubmV0L2l1Y3YvYWZfaXVjdi5jLTEwNTMtXHRcdGF0b21pY19pbmMoXHUwMDI2aXVjdi1cdTAwM2Vtc2dfc2VudCk7XG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jPTEyNDU9c3RhdGljIGludCBpdWN2X3NvY2tfcmVjdm1zZyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptc2csXG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jLTEzMTYtXHRcdGNvbnN1bWVfc2tiKHNrYik7XG5uZXQvaXVjdi9hZl9pdWN2LmM6MTMxNzpcdFx0aWYgKGl1Y3YtXHUwMDNldHJhbnNwb3J0ID09IEFGX0lVQ1ZfVFJBTlNfSElQRVIpIHtcbm5ldC9pdWN2L2FmX2l1Y3YuYy0xMzE4LVx0XHRcdGF0b21pY19pbmMoXHUwMDI2aXVjdi1cdTAwM2Vtc2dfcmVjdik7XG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jLTEzNDMtXHRcdFx0XHRcdFx0XHRpdWN2LVx1MDAzZW1zZ2xpbWl0IC8gMikge1xubmV0L2l1Y3YvYWZfaXVjdi5jOjEzNDQ6XHRcdFx0XHRlcnIgPSBpdWN2X3NlbmRfY3RybChzaywgQUZfSVVDVl9GTEFHX1dJTik7XG5uZXQvaXVjdi9hZl9pdWN2LmMtMTM0NS1cdFx0XHRcdGlmIChlcnIpIHtcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmM9MTQyNj1zdGF0aWMgaW50IGl1Y3Zfc29ja19zaHV0ZG93bihzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBpbnQgaG93KVxuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYy0xNDUxLVx0ICAgIHNrLVx1MDAzZXNrX3N0YXRlID09IElVQ1ZfQ09OTkVDVEVEKSB7XG5uZXQvaXVjdi9hZl9pdWN2LmM6MTQ1MjpcdFx0aWYgKGl1Y3YtXHUwMDNldHJhbnNwb3J0ID09IEFGX0lVQ1ZfVFJBTlNfSVVDVikge1xubmV0L2l1Y3YvYWZfaXVjdi5jLTE0NTMtXHRcdFx0dHhtc2cuY2xhc3MgPSAwO1xuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYy0xNDcwLVx0XHR9IGVsc2Vcbm5ldC9pdWN2L2FmX2l1Y3YuYzoxNDcxOlx0XHRcdGl1Y3Zfc2VuZF9jdHJsKHNrLCBBRl9JVUNWX0ZMQUdfU0hUKTtcbm5ldC9pdWN2L2FmX2l1Y3YuYy0xNDcyLVx0fVxuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYy0xNDc1LVx0aWYgKGhvdyA9PSBSQ1ZfU0hVVERPV04gfHwgaG93ID09IFNIVVRET1dOX01BU0spIHtcbm5ldC9pdWN2L2FmX2l1Y3YuYzoxNDc2Olx0XHRpZiAoKGl1Y3YtXHUwMDNldHJhbnNwb3J0ID09IEFGX0lVQ1ZfVFJBTlNfSVVDVikgXHUwMDI2XHUwMDI2XG5uZXQvaXVjdi9hZl9pdWN2LmMtMTQ3Ny1cdFx0ICAgIGl1Y3YtXHUwMDNlcGF0aCkge1xuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYz0xNjE1PXN0YXRpYyBpbnQgaXVjdl9jYWxsYmFja19jb25ucmVxKHN0cnVjdCBpdWN2X3BhdGggKnBhdGgsXG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jLTE2NzQtXHRpdWN2X3NvY2tfaW5pdChuc2ssIHNrKTtcbm5ldC9pdWN2L2FmX2l1Y3YuYzoxNjc1Olx0bml1Y3YtXHUwMDNldHJhbnNwb3J0ID0gQUZfSVVDVl9UUkFOU19JVUNWO1xubmV0L2l1Y3YvYWZfaXVjdi5jLTE2NzYtXHRuc2stXHUwMDNlc2tfYWxsb2NhdGlvbiB8PSBHRlBfRE1BO1xuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYz0xODcyPXN0YXRpYyBpbnQgYWZpdWN2X2hzX2NhbGxiYWNrX3N5bihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jLTE4ODItXHRcdGFmaXVjdl9zd2FwX3NyY19kZXN0KHNrYik7XG5uZXQvaXVjdi9hZl9pdWN2LmM6MTg4MzpcdFx0dHJhbnNfaGRyLVx1MDAzZWZsYWdzID0gQUZfSVVDVl9GTEFHX1NZTiB8IEFGX0lVQ1ZfRkxBR19GSU47XG5uZXQvaXVjdi9hZl9pdWN2LmMtMTg4NC1cdFx0ZXJyID0gZGV2X3F1ZXVlX3htaXQoc2tiKTtcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmMtMTg5NC1cdFx0YWZpdWN2X3N3YXBfc3JjX2Rlc3Qoc2tiKTtcbm5ldC9pdWN2L2FmX2l1Y3YuYzoxODk1Olx0XHR0cmFuc19oZHItXHUwMDNlZmxhZ3MgPSBBRl9JVUNWX0ZMQUdfU1lOIHwgQUZfSVVDVl9GTEFHX0ZJTjtcbm5ldC9pdWN2L2FmX2l1Y3YuYy0xODk2LVx0XHRlcnIgPSBkZXZfcXVldWVfeG1pdChza2IpO1xuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYy0xOTA0LVx0aXVjdl9zb2NrX2luaXQobnNrLCBzayk7XG5uZXQvaXVjdi9hZl9pdWN2LmM6MTkwNTpcdG5pdWN2LVx1MDAzZXRyYW5zcG9ydCA9IEFGX0lVQ1ZfVFJBTlNfSElQRVI7XG5uZXQvaXVjdi9hZl9pdWN2LmMtMTkwNi1cdG5pdWN2LVx1MDAzZW1zZ2xpbWl0ID0gaXVjdi1cdTAwM2Vtc2dsaW1pdDtcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmMtMTkxOC1cdGFmaXVjdl9zd2FwX3NyY19kZXN0KHNrYik7XG5uZXQvaXVjdi9hZl9pdWN2LmM6MTkxOTpcdHRyYW5zX2hkci1cdTAwM2VmbGFncyA9IEFGX0lVQ1ZfRkxBR19TWU4gfCBBRl9JVUNWX0ZMQUdfQUNLO1xubmV0L2l1Y3YvYWZfaXVjdi5jLTE5MjAtXHR0cmFuc19oZHItXHUwMDNld2luZG93ID0gbml1Y3YtXHUwMDNlbXNnbGltaXQ7XG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jPTIwNjY9c3RhdGljIGludCBhZml1Y3ZfaHNfcmN2KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jLTIwODktXHRza19mb3JfZWFjaChzaywgXHUwMDI2aXVjdl9za19saXN0LmhlYWQpIHtcbm5ldC9pdWN2L2FmX2l1Y3YuYzoyMDkwOlx0XHRpZiAodHJhbnNfaGRyLVx1MDAzZWZsYWdzID09IEFGX0lVQ1ZfRkxBR19TWU4pIHtcbm5ldC9pdWN2L2FmX2l1Y3YuYy0yMDkxLVx0XHRcdGlmICgoIW1lbWNtcChcdTAwMjZpdWN2X3NrKHNrKS1cdTAwM2VzcmNfbmFtZSxcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmMtMjEzMC1cdHN3aXRjaCAodHJhbnNfaGRyLVx1MDAzZWZsYWdzKSB7XG5uZXQvaXVjdi9hZl9pdWN2LmM6MjEzMTpcdGNhc2UgQUZfSVVDVl9GTEFHX1NZTjpcbm5ldC9pdWN2L2FmX2l1Y3YuYy0yMTMyLVx0XHQvKiBjb25uZWN0IHJlcXVlc3QgKi9cbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmMtMjEzNC1cdFx0YnJlYWs7XG5uZXQvaXVjdi9hZl9pdWN2LmM6MjEzNTpcdGNhc2UgKEFGX0lVQ1ZfRkxBR19TWU4gfCBBRl9JVUNWX0ZMQUdfQUNLKTpcbm5ldC9pdWN2L2FmX2l1Y3YuYy0yMTM2LVx0XHQvKiBjb25uZWN0IHJlcXVlc3QgY29uZmlybWVkICovXG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jLTIxMzgtXHRcdGJyZWFrO1xubmV0L2l1Y3YvYWZfaXVjdi5jOjIxMzk6XHRjYXNlIChBRl9JVUNWX0ZMQUdfU1lOIHwgQUZfSVVDVl9GTEFHX0ZJTik6XG5uZXQvaXVjdi9hZl9pdWN2LmMtMjE0MC1cdFx0LyogY29ubmVjdCByZXF1ZXN0IHJlZnVzZWQgKi9cbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmMtMjE0Mi1cdFx0YnJlYWs7XG5uZXQvaXVjdi9hZl9pdWN2LmM6MjE0MzpcdGNhc2UgKEFGX0lVQ1ZfRkxBR19GSU4pOlxubmV0L2l1Y3YvYWZfaXVjdi5jLTIxNDQtXHRcdC8qIGNsb3NlIHJlcXVlc3QgKi9cbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmMtMjE0Ni1cdFx0YnJlYWs7XG5uZXQvaXVjdi9hZl9pdWN2LmM6MjE0NzpcdGNhc2UgKEFGX0lVQ1ZfRkxBR19XSU4pOlxubmV0L2l1Y3YvYWZfaXVjdi5jLTIxNDgtXHRcdGVyciA9IGFmaXVjdl9oc19jYWxsYmFja193aW4oc2ssIHNrYik7XG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jLTIxNTMtXHRcdGZhbGx0aHJvdWdoO1x0LyogYW5kIHJlY2VpdmUgbm9uLXplcm8gbGVuZ3RoIGRhdGEgKi9cbm5ldC9pdWN2L2FmX2l1Y3YuYzoyMTU0Olx0Y2FzZSAoQUZfSVVDVl9GTEFHX1NIVCk6XG5uZXQvaXVjdi9hZl9pdWN2LmMtMjE1NS1cdFx0Lyogc2h1dGRvd24gcmVxdWVzdCAqL1xuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYz0yMjE0PXN0YXRpYyBpbnQgYWZpdWN2X25ldGRldl9ldmVudChzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKnRoaXMsXG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jLTIyMjgtXHRcdFx0XHRpZiAoZXZlbnQgPT0gTkVUREVWX0dPSU5HX0RPV04pXG5uZXQvaXVjdi9hZl9pdWN2LmM6MjIyOTpcdFx0XHRcdFx0aXVjdl9zZW5kX2N0cmwoc2ssIEFGX0lVQ1ZfRkxBR19GSU4pO1xubmV0L2l1Y3YvYWZfaXVjdi5jLTIyMzAtXHRcdFx0XHRzay1cdTAwM2Vza19zdGF0ZSA9IElVQ1ZfRElTQ09OTjtcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmM9MjI5Nj1zdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9wcm90b19mYW1pbHkgaXVjdl9zb2NrX2ZhbWlseV9vcHMgPSB7XG5uZXQvaXVjdi9hZl9pdWN2LmM6MjI5NzpcdC5mYW1pbHlcdD0gQUZfSVVDVixcbm5ldC9pdWN2L2FmX2l1Y3YuYy0yMjk4LVx0Lm93bmVyXHQ9IFRISVNfTU9EVUxFLFxuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYz0yMzAyPXN0YXRpYyBzdHJ1Y3QgcGFja2V0X3R5cGUgaXVjdl9wYWNrZXRfdHlwZSA9IHtcbm5ldC9pdWN2L2FmX2l1Y3YuYzoyMzAzOlx0LnR5cGUgPSBjcHVfdG9fYmUxNihFVEhfUF9BRl9JVUNWKSxcbm5ldC9pdWN2L2FmX2l1Y3YuYy0yMzA0LVx0LmZ1bmMgPSBhZml1Y3ZfaHNfcmN2LFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE1IDE1OjU0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgyNzQKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiAxMTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqSW52ZXN0aWdhdGluZyB0aGUgQUZfSVVDViBTb2NrZXQgU3VwcG9ydCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBgbmV0L2l1Y3YvS2NvbmZpZ2AgZmlsZSwgYW5kIHJpZ2h0IG9mZiB0aGUgYmF0LCBpdCYjMzk7cyBwcmV0dHkgY2xlYXIgdGhpcyBpcyBhIHNwZWNpYWxpemVkIGNvbmZpZ3VyYXRpb24uIFRoZSBgY29uZmlnIEFGX0lVQ1ZgIGVudHJ5LCB3aXRoIGl0cyBgZGVmX3RyaXN0YXRlIG0gaWYgUUVUSF9MMyB8fCBJVUNWYCwgc2NyZWFtcyBTMzkwIGFyY2hpdGVjdHVyZS4gSXQmIzM5O3MgZXhwbGljaXRseSB0aWVkIHRvIHovVk0gYW5kIEhpcGVyU29ja2V0cyB0cmFuc3BvcnQsIHdoaWNoIGFyZSBoYWxsbWFya3Mgb2YgdGhhdCBlbnZpcm9ubWVudC4KCkJ1dCB3YWl0IGEgbWludXRlLi4ubXkgbWluZCBzdGFydHMgdG8gd2FuZGVyLCBjYW4gdGhpcyBiZSBjb21waWxlZCBvbiB4ODY/IFRoYXQgd291bGQgYmUgdW5jb252ZW50aW9uYWwsIHRvIHNheSB0aGUgbGVhc3QuIEl0JiMzOTtzIGhpZ2hseSB1bmxpa2VseSB0aGF0IGNvZGUgZGVzaWduZWQgZm9yIGFuIFMzOTAgYXJjaGl0ZWN0dXJlIHdvdWxkIGhhdmUgYW55IHVzZSBpbiB4ODYgdW5sZXNzIHRoZXJlIHdhcyBzb21lIHNvcnQgb2Ygd2VpcmQgdHJhbnNsYXRpb24gbGF5ZXIgb3IgZW11bGF0aW9uIGludm9sdmVkLgoKVGhlIG5leHQgc3RlcCBpcyBvYnZpb3VzLiBJIG5lZWQgdG8gdHJhY2UgdGhlIGRlcGVuZGVuY2llcy4gSSBoYXZlIHRvIHNlZSBpZiB0aGlzIGBuZXQvaXVjdi9LY29uZmlnYCBmaWxlIGlzIGV2ZW4gKnNvdXJjZWQqIHdpdGhpbiB0aGUgbW9yZSBnZW5lcmFsIGBuZXQvS2NvbmZpZ2AgZmlsZS4gVGhhdCYjMzk7bGwgdGVsbCBtZSBpZiBpdCYjMzk7cyBldmVuICpwb3RlbnRpYWxseSogaW5jbHVkZWQgaW4gYSBicm9hZGVyLCBtb3JlIGFyY2hpdGVjdHVyZS1hZ25vc3RpYyBidWlsZC4gVGhhdOKAmXMgdGhlIG1vc3QgbGlrZWx5IHNvdXJjZSBvZiB0aGUgYW5zd2VyIGhlcmUsIHRoZSBLY29uZmlnIGZpbGUgZm9yIG5ldHdvcmsuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTUgMTU6NTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aXVjdiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9LY29uZmlnPTg4PXNvdXJjZSBcJiMzNDtuZXQveGZybS9LY29uZmlnXCYjMzQ7XG5uZXQvS2NvbmZpZzo4OTpzb3VyY2UgXCYjMzQ7bmV0L2l1Y3YvS2NvbmZpZ1wmIzM0O1xubmV0L0tjb25maWctOTAtc291cmNlIFwmIzM0O25ldC9zbWMvS2NvbmZpZ1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE1IDE1OjU0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg3NjEKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiA0MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOgoKKipVbnBhY2tpbmcgYSBLY29uZmlnIERlcGVuZGVuY3kqKgoKSG1tLCBob2xkIG9uIGEgc2Vjb25kLi4uIEl0JiMzOTtzIGhpdHRpbmcgbWUgdGhhdCBgbmV0L2l1Y3YvS2NvbmZpZ2AgZ2V0cyBzb3VyY2VkIHVuY29uZGl0aW9uYWxseSBmcm9tIHdpdGhpbiBgbmV0L0tjb25maWdgLCByaWdodD8gSSBuZWVkIHRvIGRvdWJsZS1jaGVjayB0aGF0LiBUaGlzIGhhcyBwb3RlbnRpYWwgaW1wbGljYXRpb25zIGZvciBjb25maWd1cmFiaWxpdHkgYW5kIGRlcGVuZGVuY2llcywgd2hpY2ggSSYjMzk7ZCBleHBlY3QgdG8gYmUgbW9yZSBncmFudWxhci4gSSBuZWVkIHRvIHRha2UgYSBmcmVzaCBsb29rIGF0IGBuZXQvaXVjdi9LY29uZmlnYCBhbmQgbWFrZSBzdXJlIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhpcyB0b3AtbGV2ZWwgZGVwZW5kZW5jeSBpcyBjb3JyZWN0LiBJdCYjMzk7cyBhIGtleSBkZXRhaWwgdG8gZnVsbHkgYXNzZXNzIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhlIG5ldHdvcmsgY29uZmlndXJhdGlvbi4gSSBqdXN0IHdhbnQgdG8gZW5zdXJlIHRoZXJlIGFyZW4mIzM5O3QgYW55IHVuZXhwZWN0ZWQgY29uc2VxdWVuY2VzIG9yIGRlc2lnbiBkZWNpc2lvbnMgYmFrZWQgaW50byB0aGF0IGluY2x1c2lvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTUgMTU6NTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvaXVjdi9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gICAyOlx0Y29uZmlnIElVQ1ZcbiAgIDM6XHRcdGRlcGVuZHMgb24gUzM5MFxuICAgNDpcdFx0ZGVmX3RyaXN0YXRlIHkgaWYgUzM5MFxuICAgNTpcdFx0cHJvbXB0IFwmIzM0O0lVQ1Ygc3VwcG9ydCAoUzM5MCAtIHovVk0gb25seSlcJiMzNDtcbiAgIDY6XHRcdGhlbHBcbiAgIDc6XHRcdCAgU2VsZWN0IHRoaXMgb3B0aW9uIGlmIHlvdSB3YW50IHRvIHVzZSBpbnRlci11c2VyIGNvbW11bmljYXRpb25cbiAgIDg6XHRcdCAgdW5kZXIgVk0gb3IgVklGLiBJZiB5b3UgcnVuIG9uIHovVk0sIHNheSBcJiMzNDtZXCYjMzQ7IHRvIGVuYWJsZSBhIGZhc3RcbiAgIDk6XHRcdCAgY29tbXVuaWNhdGlvbiBsaW5rIGJldHdlZW4gVk0gZ3Vlc3RzLlxuICAxMDpcdFxuICAxMTpcdGNvbmZpZyBBRklVQ1ZcbiAgMTI6XHRcdGRlcGVuZHMgb24gUzM5MFxuICAxMzpcdFx0ZGVmX3RyaXN0YXRlIG0gaWYgUUVUSF9MMyB8fCBJVUNWXG4gIDE0Olx0XHRwcm9tcHQgXCYjMzQ7QUZfSVVDViBTb2NrZXQgc3VwcG9ydCAoUzM5MCAtIHovVk0gYW5kIEhpcGVyU29ja2V0cyB0cmFuc3BvcnQpXCYjMzQ7XG4gIDE1Olx0XHRoZWxwXG4gIDE2Olx0XHQgIFNlbGVjdCB0aGlzIG9wdGlvbiBpZiB5b3Ugd2FudCB0byB1c2UgQUZfSVVDViBzb2NrZXQgYXBwbGljYXRpb25zXG4gIDE3Olx0XHQgIGJhc2VkIG9uIHovVk0gaW50ZXItdXNlciBjb21tdW5pY2F0aW9uIHZlaGljbGUgb3IgYmFzZWQgb25cbiAgMTg6XHRcdCAgSGlwZXJTb2NrZXRzLlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNSAxNTo1NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5Mjg4CgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogMzM4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEludmVzdGlnYXRpb24gaW50byBBRl9JVUNWIEZ1enppbmcqKgoKT2theSwgc28gYGNvbmZpZyBBRklVQ1ZgIGlzIGRlcGVuZGVudCBvbiBgUzM5MGAuIFRoYXQgaW1tZWRpYXRlbHkgdGVsbHMgbWUgSSBjYW4mIzM5O3QgY29tcGlsZSBpdCBvbiB4ODYsIHdoaWNoIGlzIG5vIHN1cnByaXNlLiBCdXQgaG9sZCBvbiwgSSBzZWVtIHRvIHJlbWVtYmVyIHN5emthbGxlciBmdXp6aW5nIHMzOTB4LiBUaGUgcXVlc3Rpb24gaXMsIGlzIGl0IHJlYWNoYWJsZSBpbiBRRU1VPyBZZXMsIHRoYXQmIzM5O3MgcmlnaHQsIHN5emthbGxlciBkb2VzIHJ1biBzMzkweCBRRU1VLiBCdXQgZG9lcyBpdCByZXF1aXJlIHNvbWUgc3BlY2lmaWMgaGFyZHdhcmU/IEFoLCBoZXJlJiMzOTtzIHRoZSBkZXNjcmlwdGlvbjogJiMzNDtBRl9JVUNWIFNvY2tldCBzdXBwb3J0IChTMzkwIC0gei9WTSBhbmQgSGlwZXJTb2NrZXRzIHRyYW5zcG9ydCkuJiMzNDsgTm93LCBpcyAqdGhhdCogcmVhY2hhYmxlIGluIFFFTVU/CgpMZXQmIzM5O3Mgc2VlIGlmIHN5emthbGxlciBldmVuIGZ1enplcyBgQUZfSVVDVmAuIElVQ1YgaXMgYSB6L1ZNIHNwZWNpZmljIGZlYXR1cmUsIGFuZCB0aGUgcXVlc3Rpb24gaXMgd2hldGhlciBpdCBpcyBlbXVsYWJsZSBpbiBRRU1VLiBUaW1lIHRvIGNoZWNrIGlmIGBBRl9JVUNWYCBpcyBmdXp6ZWQgYnkgc3l6a2FsbGVyLiBEb2VzIHN5emthbGxlciBoYXZlIGBzeXMvbGludXgvc29ja2V0X2l1Y3YudHh0YCBvciBzb21ldGhpbmcgc2ltaWxhcj8gSSBjYW4mIzM5O3QgdXNlIGdyZXBwZXIgZm9yIGBzeXMvKmAsIGJ1dCBJIGNhbiB1c2UgYGNvZGVzZWFyY2gtZGlyLWluZGV4YCwgb3IsIGZvciBub3csIGp1c3QgYXNzdW1lIGl0JiMzOTtzIHJlYWNoYWJsZSBhbmQgbW92ZSBvbi4KCldhaXQsIGhlcmUmIzM5O3MgYW4gaW1wb3J0YW50IG5vdGUgaW4gdGhlIGluc3RydWN0aW9uczogJiMzNDtDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4mIzM0OyBTbywgZG9lcyBRRU1VIGVtdWxhdGUgSVVDVj8gVGhhdCYjMzk7cyB0aGUgY3J1eCBvZiB0aGUgbWF0dGVyLgoKSSBuZWVkIHRvIGRpZyBkZWVwZXIuIExldCYjMzk7cyBzZWUgaWYgdGhlcmUgaXMgYW55IElVQ1YgZW11bGF0aW9uIGluIFFFTVUsIG9yIGlmIGl0JiMzOTtzIGp1c3QgYSBzb2NrZXQgZmFtaWx5IHRoYXQgY2FuIGJlIGNyZWF0ZWQgYnV0IGRvZXNuJiMzOTt0IGFjdHVhbGx5ICpkbyogYW55dGhpbmcuIFRpbWUgdG8gbG9vayBhdCBgbmV0L2l1Y3YvYWZfaXVjdi5jYC4gVGhhdCBzaG91bGQgZ2l2ZSBtZSB0aGUgYW5zd2VyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNSAxNTo1NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpdWN2X3NvY2tfY29ubmVjdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pdWN2L2FmX2l1Y3YuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXVjdi9hZl9pdWN2LmM9Njg3PXN0YXRpYyBpbnQgYWZpdWN2X3BhdGhfY29ubmVjdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29ja2FkZHJfdW5zaXplZCAqYWRkcilcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmMtNzMyLS8qIENvbm5lY3QgYW4gdW5jb25uZWN0ZWQgc29ja2V0ICovXG5uZXQvaXVjdi9hZl9pdWN2LmM6NzMzOnN0YXRpYyBpbnQgaXVjdl9zb2NrX2Nvbm5lY3Qoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHNvY2thZGRyX3Vuc2l6ZWQgKmFkZHIsXG5uZXQvaXVjdi9hZl9pdWN2LmMtNzM0LVx0XHRcdCAgICAgaW50IGFsZW4sIGludCBmbGFncylcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmM9MjI0Nz1zdGF0aWMgY29uc3Qgc3RydWN0IHByb3RvX29wcyBpdWN2X3NvY2tfb3BzID0ge1xuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYy0yMjUxLVx0LmJpbmRcdFx0PSBpdWN2X3NvY2tfYmluZCxcbm5ldC9pdWN2L2FmX2l1Y3YuYzoyMjUyOlx0LmNvbm5lY3RcdD0gaXVjdl9zb2NrX2Nvbm5lY3QsXG5uZXQvaXVjdi9hZl9pdWN2LmMtMjI1My1cdC5saXN0ZW5cdFx0PSBpdWN2X3NvY2tfbGlzdGVuLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNSAxNTo1NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDM4OQoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDgxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLgoKKipJbnZlc3RpZ2F0aW5nIEFGX0lVQ1YgU29ja2V0IENvbm5lY3Rpb24gaW4gUUVNVSoqCgpSaWdodCwgc28gYGl1Y3Zfc29ja19jb25uZWN0YCBpcyB0aGUgYGNvbm5lY3RgIGZ1bmN0aW9uIGNhbGwsIHNwZWNpZmljIHRvIHNvY2tldHMgdXNpbmcgdGhlIGBBRl9JVUNWYCBhZGRyZXNzIGZhbWlseS4gVGhhdCYjMzk7cyBzdHJhaWdodGZvcndhcmQgZW5vdWdoLiBUaGUgaW1wbGljYXRpb24gaXMsIGlmIHdlIGNhbiBzdWNjZXNzZnVsbHkgY3JlYXRlIGFuIGBBRl9JVUNWYCBzb2NrZXQsIHdlIHNob3VsZCBiZSBhYmxlIHRvIHRoZW4gY2FsbCBgY29ubmVjdGAgb24gaXQsIHdoaWNoIGlzIHRoZSBzdGFuZGFyZCBzb2NrZXQgbGlmZWN5Y2xlLiBUaGUgcXVlc3Rpb24gdGhlbiBiZWNvbWVzLCBjYW4gd2UgYWN0dWFsbHkgY3JlYXRlIGFuIGBBRl9JVUNWYCBzb2NrZXQgaW5zdGFuY2Ugd2l0aGluIHRoZSBRRU1VIGVudmlyb25tZW50PyBHaXZlbiB0aGF0IHRoZSB0ZXh0IHJlZmVyZW5jZXMgdGhlIGNvbm5lY3Rpb24gcHJvY2VzcywgdGhhdCBwYXJ0IGlzIGxpa2VseSBmdW5jdGlvbmFsLiBMZXQmIzM5O3Mgc2VlIGFib3V0IHRoZSBzb2NrZXQgY3JlYXRpb24gaXRzZWxmLiBUaGUgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gY2hlY2sgaG93IGBpdWN2X3NvY2tfY3JlYXRlYCBpcyBpbXBsZW1lbnRlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTUgMTU6NTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aXVjdl9zb2NrX2NyZWF0ZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pdWN2L2FmX2l1Y3YuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXVjdi9hZl9pdWN2LmM9MjI0Nz1zdGF0aWMgY29uc3Qgc3RydWN0IHByb3RvX29wcyBpdWN2X3NvY2tfb3BzID0ge1xuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYy0yMjY2LVxubmV0L2l1Y3YvYWZfaXVjdi5jOjIyNjc6c3RhdGljIGludCBpdWN2X3NvY2tfY3JlYXRlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNvY2tldCAqc29jaywgaW50IHByb3RvY29sLFxubmV0L2l1Y3YvYWZfaXVjdi5jLTIyNjgtXHRcdFx0ICAgIGludCBrZXJuKVxuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYz0yMjk2PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X3Byb3RvX2ZhbWlseSBpdWN2X3NvY2tfZmFtaWx5X29wcyA9IHtcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmMtMjI5OC1cdC5vd25lclx0PSBUSElTX01PRFVMRSxcbm5ldC9pdWN2L2FmX2l1Y3YuYzoyMjk5Olx0LmNyZWF0ZVx0PSBpdWN2X3NvY2tfY3JlYXRlLFxubmV0L2l1Y3YvYWZfaXVjdi5jLTIzMDAtfTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTUgMTU6NTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA5NTEKCQkJCQkJCW91dHB1dDogNDIKCQkJCQkJCXRob3VnaHRzOiAxNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyB0aGUgRnVuY3Rpb24gYGl1Y3Zfc29ja19jcmVhdGVgKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBgaXVjdl9zb2NrX2NyZWF0ZWAgZnVuY3Rpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyByb2xlIGluIHRoaXMgY29udGV4dC4gR2l2ZW4gdGhlIG5hbWUsIEkmIzM5O20gaW1tZWRpYXRlbHkgZXhwZWN0aW5nIGl0IHRvIGJlIHJlc3BvbnNpYmxlIGZvciBjcmVhdGluZyBhbiBJVUNWIHNvY2tldCwgd2hpY2ggaXMgdGhlIHVuZGVybHlpbmcgbWVjaGFuaXNtIGZvciBJbnRlci1Vc2VyIENvbW11bmljYXRpb24gVmVoaWNsZSAoSVVDVikgY29tbXVuaWNhdGlvbiBvbiB0aGlzIHN5c3RlbS4gTXkgaW5pdGlhbCB0aG91Z2h0cyBhcmUgYXJvdW5kIHdoYXQgdGhpcyBmdW5jdGlvbiBsaWtlbHkgaGFuZGxlcy4gRG9lcyBpdCBhbGxvY2F0ZSBtZW1vcnkgZm9yIHRoZSBzb2NrZXQgc3RydWN0dXJlPyBEb2VzIGl0IGluaXRpYWxpemUgdGhlIGludGVybmFsIGRhdGEgc3RydWN0dXJlcyByZXF1aXJlZD8gRG9lcyBpdCByZWdpc3RlciB0aGUgc29ja2V0IHdpdGggdGhlIElVQ1Ygc3Vic3lzdGVtPyBEb2VzIGl0IGhhbmRsZSBhbnkgc2VjdXJpdHktcmVsYXRlZCBhc3BlY3RzIGxpa2UgYWNjZXNzIGNvbnRyb2wgb3IgY29ubmVjdGlvbiBhdHRyaWJ1dGVzPyBJJiMzOTttIGFudGljaXBhdGluZyBwb3RlbnRpYWwgaW50ZXJhY3Rpb25zIHdpdGggdGhlIGtlcm5lbCYjMzk7cyBJVUNWIGluZnJhc3RydWN0dXJlLCBzbyBJJiMzOTtsbCBiZSBrZWVwaW5nIGFuIGV5ZSBvdXQgZm9yIHN5c3RlbSBjYWxscyBvciBpbnRlcm5hbCBrZXJuZWwgZnVuY3Rpb24gY2FsbHMgd2l0aGluIGl0cyBpbXBsZW1lbnRhdGlvbi4gSSYjMzk7bGwgbmVlZCB0byBleGFtaW5lIHRoZSByZXR1cm4gdmFsdWVzIHRvIHVuZGVyc3RhbmQgaG93IGl0IHNpZ25hbHMgc3VjY2VzcyBvciBmYWlsdXJlLCBhbmQgdGhlIHNwZWNpZmljIGVycm9yIGNvZGVzIGl0IG1pZ2h0IHJldHVybiB0byBnaXZlIG1lIGluc2lnaHRzIGludG8gcG90ZW50aWFsIHByb2JsZW1zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNSAxNTo1NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9pdWN2L2FmX2l1Y3YuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDIyNjcsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MjI2NzpcdHN0YXRpYyBpbnQgaXVjdl9zb2NrX2NyZWF0ZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzb2NrZXQgKnNvY2ssIGludCBwcm90b2NvbCxcbjIyNjg6XHRcdFx0XHQgICAgaW50IGtlcm4pXG4yMjY5Olx0e1xuMjI3MDpcdFx0c3RydWN0IHNvY2sgKnNrO1xuMjI3MTpcdFxuMjI3MjpcdFx0aWYgKHByb3RvY29sIFx1MDAyNlx1MDAyNiBwcm90b2NvbCAhPSBQRl9JVUNWKVxuMjI3MzpcdFx0XHRyZXR1cm4gLUVQUk9UT05PU1VQUE9SVDtcbjIyNzQ6XHRcbjIyNzU6XHRcdHNvY2stXHUwMDNlc3RhdGUgPSBTU19VTkNPTk5FQ1RFRDtcbjIyNzY6XHRcbjIyNzc6XHRcdHN3aXRjaCAoc29jay1cdTAwM2V0eXBlKSB7XG4yMjc4Olx0XHRjYXNlIFNPQ0tfU1RSRUFNOlxuMjI3OTpcdFx0Y2FzZSBTT0NLX1NFUVBBQ0tFVDpcbjIyODA6XHRcdFx0LyogY3VycmVudGx5LCBwcm90byBvcHMgY2FuIGhhbmRsZSBib3RoIHNrIHR5cGVzICovXG4yMjgxOlx0XHRcdHNvY2stXHUwMDNlb3BzID0gXHUwMDI2aXVjdl9zb2NrX29wcztcbjIyODI6XHRcdFx0YnJlYWs7XG4yMjgzOlx0XHRkZWZhdWx0OlxuMjI4NDpcdFx0XHRyZXR1cm4gLUVTT0NLVE5PU1VQUE9SVDtcbjIyODU6XHRcdH1cbjIyODY6XHRcbjIyODc6XHRcdHNrID0gaXVjdl9zb2NrX2FsbG9jKHNvY2ssIHByb3RvY29sLCBHRlBfS0VSTkVMLCBrZXJuKTtcbjIyODg6XHRcdGlmICghc2spXG4yMjg5Olx0XHRcdHJldHVybiAtRU5PTUVNO1xuMjI5MDpcdFxuMjI5MTpcdFx0aXVjdl9zb2NrX2luaXQoc2ssIE5VTEwpO1xuMjI5MjpcdFxuMjI5MzpcdFx0cmV0dXJuIDA7XG4yMjk0Olx0fVxuMjI5NTpcdFxuMjI5NjpcdHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X3Byb3RvX2ZhbWlseSBpdWN2X3NvY2tfZmFtaWx5X29wcyA9IHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTUgMTU6NTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE2NTAKCQkJCQkJCW91dHB1dDogNDEKCQkJCQkJCXRob3VnaHRzOiAzOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipTb2NrZXQgQ3JlYXRpb246IEluaXRpYWwgQXNzdW1wdGlvbnMgYW5kIE51YW5jZXMqKgoKUmlnaHQsIHNvIGluaXRpYWxseSBJIHdhcyB0aGlua2luZyB3ZSBjb3VsZCBieXBhc3MgYWxsIHRoZSBoYXJkd2FyZSBjaGVja3Mgd2hlbiBjcmVhdGluZyB0aGlzIHNvY2tldC4gVGhhdCBpbml0aWFsIGFzc3VtcHRpb24gc2VlbXMgdG8gaG9sZCB0cnVlIGJhc2VkIG9uIG15IGdlbmVyYWwgdW5kZXJzdGFuZGluZywgYXQgbGVhc3QgYXQgZmFjZSB2YWx1ZS4gSG93ZXZlciwgdGhlIG1lbnRpb24gb2YgYHByX2l1Y3ZgIHRyaWdnZXJlZCBhIHJlZCBmbGFnLiBJIGtub3cgdGhhdCBmdW5jdGlvbiBwbGF5cyBhIHJvbGUgaW4gdGhlIElVQ1YgaW5mcmFzdHJ1Y3R1cmUsIGFuZCBpdCYjMzk7cyBhbHdheXMgd29ydGggYSBkb3VibGUtY2hlY2sgd2hlbiBkZWFsaW5nIHdpdGggbG93LWxldmVsIHNvY2tldCBmdW5jdGlvbmFsaXR5IG9uIHRoaXMgcGxhdGZvcm0uIE15IGltbWVkaWF0ZSBuZXh0IHN0ZXAgaXMgdG8gZXhhbWluZSB0aGUgYmVoYXZpb3Igb2YgYGl1Y3Zfc29ja19hbGxvY2AuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyAqdGhhdCogc3BlY2lmaWMgZnVuY3Rpb24gaW50ZXJhY3RzIHdpdGggdGhlIGhhcmR3YXJlIGFic3RyYWN0aW9ucyBhbmQgaWYgaXQgcGVyZm9ybXMgYW55IGVzc2VudGlhbCB2YWxpZGF0aW9ucyBiZWZvcmUgdGhlIHNvY2tldCBpdHNlbGYgZ2V0cyBjcmVhdGVkLiBUaGF0JiMzOTtzIHRoZSBrZXkgdG8gY29uZmlybWluZyBpZiB3ZSYjMzk7cmUgdHJ1bHkgZnJlZSBvZiBhbnkgaGFyZHdhcmUgZGVwZW5kZW5jaWVzIGF0IHRoaXMgcG9pbnQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE1IDE1OjU0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2l1Y3YvYWZfaXVjdi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNDY2LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA0NjY6XHRzdGF0aWMgc3RydWN0IHNvY2sgKml1Y3Zfc29ja19hbGxvYyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBpbnQgcHJvdG8sIGdmcF90IHByaW8sIGludCBrZXJuKVxuIDQ2NzpcdHtcbiA0Njg6XHRcdHN0cnVjdCBzb2NrICpzaztcbiA0Njk6XHRcdHN0cnVjdCBpdWN2X3NvY2sgKml1Y3Y7XG4gNDcwOlx0XG4gNDcxOlx0XHRzayA9IHNrX2FsbG9jKFx1MDAyNmluaXRfbmV0LCBQRl9JVUNWLCBwcmlvLCBcdTAwMjZpdWN2X3Byb3RvLCBrZXJuKTtcbiA0NzI6XHRcdGlmICghc2spXG4gNDczOlx0XHRcdHJldHVybiBOVUxMO1xuIDQ3NDpcdFx0aXVjdiA9IGl1Y3Zfc2soc2spO1xuIDQ3NTpcdFxuIDQ3NjpcdFx0c29ja19pbml0X2RhdGEoc29jaywgc2spO1xuIDQ3NzpcdFx0SU5JVF9MSVNUX0hFQUQoXHUwMDI2aXVjdi1cdTAwM2VhY2NlcHRfcSk7XG4gNDc4Olx0XHRzcGluX2xvY2tfaW5pdChcdTAwMjZpdWN2LVx1MDAzZWFjY2VwdF9xX2xvY2spO1xuIDQ3OTpcdFx0c2tiX3F1ZXVlX2hlYWRfaW5pdChcdTAwMjZpdWN2LVx1MDAzZXNlbmRfc2tiX3EpO1xuIDQ4MDpcdFx0SU5JVF9MSVNUX0hFQUQoXHUwMDI2aXVjdi1cdTAwM2VtZXNzYWdlX3EubGlzdCk7XG4gNDgxOlx0XHRzcGluX2xvY2tfaW5pdChcdTAwMjZpdWN2LVx1MDAzZW1lc3NhZ2VfcS5sb2NrKTtcbiA0ODI6XHRcdHNrYl9xdWV1ZV9oZWFkX2luaXQoXHUwMDI2aXVjdi1cdTAwM2ViYWNrbG9nX3NrYl9xKTtcbiA0ODM6XHRcdGl1Y3YtXHUwMDNlc2VuZF90YWcgPSAwO1xuIDQ4NDpcdFx0YXRvbWljX3NldChcdTAwMjZpdWN2LVx1MDAzZXBlbmRpbmdzLCAwKTtcbiA0ODU6XHRcdGl1Y3YtXHUwMDNlZmxhZ3MgPSAwO1xuIDQ4NjpcdFx0aXVjdi1cdTAwM2Vtc2dsaW1pdCA9IDA7XG4gNDg3Olx0XHRhdG9taWNfc2V0KFx1MDAyNml1Y3YtXHUwMDNlc2tic19pbl94bWl0LCAwKTtcbiA0ODg6XHRcdGF0b21pY19zZXQoXHUwMDI2aXVjdi1cdTAwM2Vtc2dfc2VudCwgMCk7XG4gNDg5Olx0XHRhdG9taWNfc2V0KFx1MDAyNml1Y3YtXHUwMDNlbXNnX3JlY3YsIDApO1xuIDQ5MDpcdFx0aXVjdi1cdTAwM2VwYXRoID0gTlVMTDtcbiA0OTE6XHRcdGl1Y3YtXHUwMDNlc2tfdHhub3RpZnkgPSBhZml1Y3ZfaHNfY2FsbGJhY2tfdHhub3RpZnk7XG4gNDkyOlx0XHRtZW1zZXQoXHUwMDI2aXVjdi1cdTAwM2Vpbml0LCAwLCBzaXplb2YoaXVjdi1cdTAwM2Vpbml0KSk7XG4gNDkzOlx0XHRpZiAocHJfaXVjdilcbiA0OTQ6XHRcdFx0aXVjdi1cdTAwM2V0cmFuc3BvcnQgPSBBRl9JVUNWX1RSQU5TX0lVQ1Y7XG4gNDk1Olx0XHRlbHNlXG4gNDk2Olx0XHRcdGl1Y3YtXHUwMDNldHJhbnNwb3J0ID0gQUZfSVVDVl9UUkFOU19ISVBFUjtcbiA0OTc6XHRcbiA0OTg6XHRcdHNrLVx1MDAzZXNrX2Rlc3RydWN0ID0gaXVjdl9zb2NrX2Rlc3RydWN0O1xuIDQ5OTpcdFx0c2stXHUwMDNlc2tfc25kdGltZW8gPSBJVUNWX0NPTk5fVElNRU9VVDtcbiA1MDA6XHRcbiA1MDE6XHRcdHNvY2tfcmVzZXRfZmxhZyhzaywgU09DS19aQVBQRUQpO1xuIDUwMjpcdFxuIDUwMzpcdFx0c2stXHUwMDNlc2tfcHJvdG9jb2wgPSBwcm90bztcbiA1MDQ6XHRcdHNrLVx1MDAzZXNrX3N0YXRlXHQ9IElVQ1ZfT1BFTjtcbiA1MDU6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTUgMTU6NTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI2NzIKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiA0OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgZnJvbSBhbiBleHBlcnQmIzM5O3MgcGVyc3BlY3RpdmU6CgoqKkRpdmluZyBpbnRvIHRoZSBJVUNWIFRyYW5zcG9ydCBMb2dpYyoqCgpSaWdodCwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGllY2Ugb2YgY29kZSwgcHJvYmFibHkgc29tZSBuZXR3b3JraW5nIG9yIGludGVyLXByb2Nlc3MgY29tbXVuaWNhdGlvbiBzdHVmZiBkZWFsaW5nIHdpdGggSVVDVi4gSSBzZWUgdGhhdCBgaXVjdi0mZ3Q7dHJhbnNwb3J0YCBpcyBnZXR0aW5nIGFzc2lnbmVkIGBBRl9JVUNWX1RSQU5TX0lVQ1ZgIGlmIGEgcG9pbnRlciwgYHByX2l1Y3ZgLCBpc24mIzM5O3QgbnVsbC4gTWFrZXMgc2Vuc2Ug4oCTIHNldHRpbmcgdGhlIHRyYW5zcG9ydCB0eXBlIGJhc2VkIG9uIHNvbWUgY29uZGl0aW9uLiBCdXQgaGVyZSYjMzk7cyB0aGUga2lja2VyOiBJIG5lZWQgdG8gcXVpY2tseSByZWNhbGwgd2hhdCBgcHJfaXVjdmAgYWN0dWFsbHkgKmlzKi4gSXMgaXQgYSBmbGFnLCBhIHN0cnVjdHVyZSwgYSBjb250cm9sIGJsb2NrPyBJdCYjMzk7cyB0aGUga2V5IHRvIHVuZGVyc3RhbmRpbmcgdGhpcyBlbnRpcmUgY29uZGl0aW9uYWwgYXNzaWdubWVudC4gSSBuZWVkIHRoZSBjb250ZXh0LiBMZXQgbWUgY2hlY2sgdGhlIHJlbGF0ZWQgZGF0YSBzdHJ1Y3R1cmVzLCBvciBtYXliZSB0aGUgc3Vycm91bmRpbmcgY29kZSB3aGVyZSB0aGlzIGlzIHVzZWQuIEkmIzM5O20gZ29pbmcgdG8gcXVpY2tseSBsb29rIGludG8gd2hhdCBgcHJfaXVjdmAgcmVwcmVzZW50cyB0byB1bmRlcnN0YW5kIHRoZSB1bmRlcmx5aW5nIGxvZ2ljLiBJdCBoYXMgdG8gYmUgYW4gSVVDVi1yZWxhdGVkIHN0cnVjdHVyZS4gVGhlbiwgSSB3aWxsIGJlIGFibGUgdG8gZ2V0IHRoZSB3aG9sZSBwaWN0dXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNSAxNTo1NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwcl9pdWN2JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2l1Y3YvYWZfaXVjdi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pdWN2L2FmX2l1Y3YuYz00Mj1zdGF0aWMgc3RydWN0IHByb3RvIGl1Y3ZfcHJvdG8gPSB7XG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jLTQ3LVxubmV0L2l1Y3YvYWZfaXVjdi5jOjQ4OnN0YXRpYyBzdHJ1Y3QgaXVjdl9pbnRlcmZhY2UgKnByX2l1Y3Y7XG5uZXQvaXVjdi9hZl9pdWN2LmMtNDktc3RhdGljIHN0cnVjdCBpdWN2X2hhbmRsZXIgYWZfaXVjdl9oYW5kbGVyO1xuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYz0zMzU9c3RhdGljIHZvaWQgaXVjdl9zZXZlcl9wYXRoKHN0cnVjdCBzb2NrICpzaywgaW50IHdpdGhfdXNlcl9kYXRhKVxuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYy0zNDctXHRcdFx0QVNDRUJDKHVzZXJfZGF0YSwgc2l6ZW9mKHVzZXJfZGF0YSkpO1xubmV0L2l1Y3YvYWZfaXVjdi5jOjM0ODpcdFx0XHRwcl9pdWN2LVx1MDAzZXBhdGhfc2V2ZXIocGF0aCwgdXNlcl9kYXRhKTtcbm5ldC9pdWN2L2FmX2l1Y3YuYy0zNDktXHRcdH0gZWxzZVxubmV0L2l1Y3YvYWZfaXVjdi5jOjM1MDpcdFx0XHRwcl9pdWN2LVx1MDAzZXBhdGhfc2V2ZXIocGF0aCwgTlVMTCk7XG5uZXQvaXVjdi9hZl9pdWN2LmMtMzUxLVx0XHRpdWN2X3BhdGhfZnJlZShwYXRoKTtcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmM9NDY2PXN0YXRpYyBzdHJ1Y3Qgc29jayAqaXVjdl9zb2NrX2FsbG9jKHN0cnVjdCBzb2NrZXQgKnNvY2ssIGludCBwcm90bywgZ2ZwX3QgcHJpbywgaW50IGtlcm4pXG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jLTQ5Mi1cdG1lbXNldChcdTAwMjZpdWN2LVx1MDAzZWluaXQsIDAsIHNpemVvZihpdWN2LVx1MDAzZWluaXQpKTtcbm5ldC9pdWN2L2FmX2l1Y3YuYzo0OTM6XHRpZiAocHJfaXVjdilcbm5ldC9pdWN2L2FmX2l1Y3YuYy00OTQtXHRcdGl1Y3YtXHUwMDNldHJhbnNwb3J0ID0gQUZfSVVDVl9UUkFOU19JVUNWO1xuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYz01ODI9c3RhdGljIGludCBpdWN2X3NvY2tfYmluZChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29ja2FkZHJfdW5zaXplZCAqYWRkcixcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmMtNjEzLVx0LyogQmluZCB0aGUgc29ja2V0ICovXG5uZXQvaXVjdi9hZl9pdWN2LmM6NjE0Olx0aWYgKHByX2l1Y3YpXG5uZXQvaXVjdi9hZl9pdWN2LmMtNjE1LVx0XHRpZiAoIW1lbWNtcChzYS1cdTAwM2VzaXVjdl91c2VyX2lkLCBpdWN2X3VzZXJpZCwgOCkpXG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jLTY0Mi12bV9iaW5kOlxubmV0L2l1Y3YvYWZfaXVjdi5jOjY0MzpcdGlmIChwcl9pdWN2KSB7XG5uZXQvaXVjdi9hZl9pdWN2LmMtNjQ0LVx0XHQvKiB1c2UgbG9jYWwgdXNlcmlkIGZvciBiYWNrd2FyZCBjb21wYXQgKi9cbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmM9NjY1PXN0YXRpYyBpbnQgaXVjdl9zb2NrX2F1dG9iaW5kKHN0cnVjdCBzb2NrICpzaylcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmMtNjY5LVxubmV0L2l1Y3YvYWZfaXVjdi5jOjY3MDpcdGlmICh1bmxpa2VseSghcHJfaXVjdikpXG5uZXQvaXVjdi9hZl9pdWN2LmMtNjcxLVx0XHRyZXR1cm4gLUVQUk9UTztcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmM9Njg3PXN0YXRpYyBpbnQgYWZpdWN2X3BhdGhfY29ubmVjdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29ja2FkZHJfdW5zaXplZCAqYWRkcilcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmMtNzA1LVx0fVxubmV0L2l1Y3YvYWZfaXVjdi5jOjcwNjpcdGVyciA9IHByX2l1Y3YtXHUwMDNlcGF0aF9jb25uZWN0KGl1Y3YtXHUwMDNlcGF0aCwgXHUwMDI2YWZfaXVjdl9oYW5kbGVyLFxubmV0L2l1Y3YvYWZfaXVjdi5jLTcwNy1cdFx0XHRcdCAgICBzYS1cdTAwM2VzaXVjdl91c2VyX2lkLCBOVUxMLCB1c2VyX2RhdGEsXG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jPTkxMz1zdGF0aWMgaW50IGl1Y3Zfc2VuZF9pcHJtKHN0cnVjdCBpdWN2X3BhdGggKnBhdGgsIHN0cnVjdCBpdWN2X21lc3NhZ2UgKm1zZyxcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmMtOTE5LVx0cHJtZGF0YVs3XSA9IDB4ZmYgLSAodTgpIHNrYi1cdTAwM2VsZW47XG5uZXQvaXVjdi9hZl9pdWN2LmM6OTIwOlx0cmV0dXJuIHByX2l1Y3YtXHUwMDNlbWVzc2FnZV9zZW5kKHBhdGgsIG1zZywgSVVDVl9JUFJNREFUQSwgMCxcbm5ldC9pdWN2L2FmX2l1Y3YuYy05MjEtXHRcdFx0XHQgKHZvaWQgKikgcHJtZGF0YSwgOCk7XG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jPTkyND1zdGF0aWMgaW50IGl1Y3Zfc29ja19zZW5kbXNnKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZyxcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmMtMTA3Ny1cdFx0XHRpZiAoZXJyID09IDB4MTUpIHtcbm5ldC9pdWN2L2FmX2l1Y3YuYzoxMDc4Olx0XHRcdFx0cHJfaXVjdi1cdTAwM2VwYXRoX3NldmVyKGl1Y3YtXHUwMDNlcGF0aCwgTlVMTCk7XG5uZXQvaXVjdi9hZl9pdWN2LmMtMTA3OS1cdFx0XHRcdGF0b21pY19kZWMoXHUwMDI2aXVjdi1cdTAwM2Vza2JzX2luX3htaXQpO1xuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYy0xMDk2LVx0XHRcdH1cbm5ldC9pdWN2L2FmX2l1Y3YuYzoxMDk3Olx0XHRcdGVyciA9IHByX2l1Y3YtXHUwMDNlbWVzc2FnZV9zZW5kKGl1Y3YtXHUwMDNlcGF0aCwgXHUwMDI2dHhtc2csXG5uZXQvaXVjdi9hZl9pdWN2LmMtMTA5OC1cdFx0XHRcdFx0XHQgICAgSVVDVl9JUEJVRkxTVCwgMCxcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmMtMTEwMC1cdFx0fSBlbHNlIHsgLyogbm9uLUlQUk0gTGluZWFyIHNrYiAqL1xubmV0L2l1Y3YvYWZfaXVjdi5jOjExMDE6XHRcdFx0ZXJyID0gcHJfaXVjdi1cdTAwM2VtZXNzYWdlX3NlbmQoaXVjdi1cdTAwM2VwYXRoLCBcdTAwMjZ0eG1zZyxcbm5ldC9pdWN2L2FmX2l1Y3YuYy0xMTAyLVx0XHRcdFx0XHQwLCAwLCAodm9pZCAqKXNrYi1cdTAwM2VkYXRhLCBza2ItXHUwMDNlbGVuKTtcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmM9MTE2Nj1zdGF0aWMgdm9pZCBpdWN2X3Byb2Nlc3NfbWVzc2FnZShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jLTExOTctXHRcdFx0fVxubmV0L2l1Y3YvYWZfaXVjdi5jOjExOTg6XHRcdFx0cmMgPSBwcl9pdWN2LVx1MDAzZW1lc3NhZ2VfcmVjZWl2ZShwYXRoLCBtc2csXG5uZXQvaXVjdi9hZl9pdWN2LmMtMTE5OS1cdFx0XHRcdFx0ICAgICAgSVVDVl9JUEJVRkxTVCxcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmMtMTIwMS1cdFx0fSBlbHNlIHtcbm5ldC9pdWN2L2FmX2l1Y3YuYzoxMjAyOlx0XHRcdHJjID0gcHJfaXVjdi1cdTAwM2VtZXNzYWdlX3JlY2VpdmUocGF0aCwgbXNnLFxubmV0L2l1Y3YvYWZfaXVjdi5jLTEyMDMtXHRcdFx0XHRcdCAgICAgIG1zZy1cdTAwM2VmbGFncyBcdTAwMjYgSVVDVl9JUFJNREFUQSxcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmM9MTQyNj1zdGF0aWMgaW50IGl1Y3Zfc29ja19zaHV0ZG93bihzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBpbnQgaG93KVxuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYy0xNDU0LVx0XHRcdHR4bXNnLnRhZyA9IDA7XG5uZXQvaXVjdi9hZl9pdWN2LmM6MTQ1NTpcdFx0XHRlcnIgPSBwcl9pdWN2LVx1MDAzZW1lc3NhZ2Vfc2VuZChpdWN2LVx1MDAzZXBhdGgsIFx1MDAyNnR4bXNnLFxubmV0L2l1Y3YvYWZfaXVjdi5jLTE0NTYtXHRcdFx0XHRJVUNWX0lQUk1EQVRBLCAwLCAodm9pZCAqKSBpcHJtX3NodXRkb3duLCA4KTtcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmMtMTQ3Ny1cdFx0ICAgIGl1Y3YtXHUwMDNlcGF0aCkge1xubmV0L2l1Y3YvYWZfaXVjdi5jOjE0Nzg6XHRcdFx0ZXJyID0gcHJfaXVjdi1cdTAwM2VwYXRoX3F1aWVzY2UoaXVjdi1cdTAwM2VwYXRoLCBOVUxMKTtcbm5ldC9pdWN2L2FmX2l1Y3YuYy0xNDc5LVx0XHRcdGlmIChlcnIpXG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jPTE2MTU9c3RhdGljIGludCBpdWN2X2NhbGxiYWNrX2Nvbm5yZXEoc3RydWN0IGl1Y3ZfcGF0aCAqcGF0aCxcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmMtMTY1Mi1cdGlmIChzay1cdTAwM2Vza19zdGF0ZSAhPSBJVUNWX0xJU1RFTikge1xubmV0L2l1Y3YvYWZfaXVjdi5jOjE2NTM6XHRcdGVyciA9IHByX2l1Y3YtXHUwMDNlcGF0aF9zZXZlcihwYXRoLCB1c2VyX2RhdGEpO1xubmV0L2l1Y3YvYWZfaXVjdi5jLTE2NTQtXHRcdGl1Y3ZfcGF0aF9mcmVlKHBhdGgpO1xuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYy0xNjU5LVx0aWYgKHNrX2FjY2VwdHFfaXNfZnVsbChzaykpIHtcbm5ldC9pdWN2L2FmX2l1Y3YuYzoxNjYwOlx0XHRlcnIgPSBwcl9pdWN2LVx1MDAzZXBhdGhfc2V2ZXIocGF0aCwgdXNlcl9kYXRhKTtcbm5ldC9pdWN2L2FmX2l1Y3YuYy0xNjYxLVx0XHRpdWN2X3BhdGhfZnJlZShwYXRoKTtcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmMtMTY2Ny1cdGlmICghbnNrKSB7XG5uZXQvaXVjdi9hZl9pdWN2LmM6MTY2ODpcdFx0ZXJyID0gcHJfaXVjdi1cdTAwM2VwYXRoX3NldmVyKHBhdGgsIHVzZXJfZGF0YSk7XG5uZXQvaXVjdi9hZl9pdWN2LmMtMTY2OS1cdFx0aXVjdl9wYXRoX2ZyZWUocGF0aCk7XG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jLTE2OTMtXHRwYXRoLVx1MDAzZW1zZ2xpbSA9IGl1Y3YtXHUwMDNlbXNnbGltaXQ7XG5uZXQvaXVjdi9hZl9pdWN2LmM6MTY5NDpcdGVyciA9IHByX2l1Y3YtXHUwMDNlcGF0aF9hY2NlcHQocGF0aCwgXHUwMDI2YWZfaXVjdl9oYW5kbGVyLCBudXNlcl9kYXRhLCBuc2spO1xubmV0L2l1Y3YvYWZfaXVjdi5jLTE2OTUtXHRpZiAoZXJyKSB7XG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jPTE3MjA9c3RhdGljIHZvaWQgaXVjdl9jYWxsYmFja19yeChzdHJ1Y3QgaXVjdl9wYXRoICpwYXRoLCBzdHJ1Y3QgaXVjdl9tZXNzYWdlICptc2cpXG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jLTE3MjgtXHRpZiAoc2stXHUwMDNlc2tfc2h1dGRvd24gXHUwMDI2IFJDVl9TSFVURE9XTikge1xubmV0L2l1Y3YvYWZfaXVjdi5jOjE3Mjk6XHRcdHByX2l1Y3YtXHUwMDNlbWVzc2FnZV9yZWplY3QocGF0aCwgbXNnKTtcbm5ldC9pdWN2L2FmX2l1Y3YuYy0xNzMwLVx0XHRyZXR1cm47XG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jPTIzMDc9c3RhdGljIGludCBfX2luaXQgYWZpdWN2X2luaXQodm9pZClcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmMtMjMxOC1cbm5ldC9pdWN2L2FmX2l1Y3YuYzoyMzE5Olx0XHRwcl9pdWN2ID0gXHUwMDI2aXVjdl9pZjtcbm5ldC9pdWN2L2FmX2l1Y3YuYy0yMzIwLVx0fSBlbHNlIHtcbm5ldC9pdWN2L2FmX2l1Y3YuYy0yMzIxLVx0XHRtZW1zZXQoXHUwMDI2aXVjdl91c2VyaWQsIDAsIHNpemVvZihpdWN2X3VzZXJpZCkpO1xubmV0L2l1Y3YvYWZfaXVjdi5jOjIzMjI6XHRcdHByX2l1Y3YgPSBOVUxMO1xubmV0L2l1Y3YvYWZfaXVjdi5jLTIzMjMtXHR9XG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jLTIzMzEtXG5uZXQvaXVjdi9hZl9pdWN2LmM6MjMzMjpcdGlmIChwcl9pdWN2KSB7XG5uZXQvaXVjdi9hZl9pdWN2LmM6MjMzMzpcdFx0ZXJyID0gcHJfaXVjdi1cdTAwM2VpdWN2X3JlZ2lzdGVyKFx1MDAyNmFmX2l1Y3ZfaGFuZGxlciwgMCk7XG5uZXQvaXVjdi9hZl9pdWN2LmMtMjMzNC1cdFx0aWYgKGVycilcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmMtMjM0NS1vdXRfbm90aWZpZXI6XG5uZXQvaXVjdi9hZl9pdWN2LmM6MjM0NjpcdGlmIChwcl9pdWN2KVxubmV0L2l1Y3YvYWZfaXVjdi5jOjIzNDc6XHRcdHByX2l1Y3YtXHUwMDNlaXVjdl91bnJlZ2lzdGVyKFx1MDAyNmFmX2l1Y3ZfaGFuZGxlciwgMCk7XG5uZXQvaXVjdi9hZl9pdWN2LmMtMjM0OC1vdXRfc29jazpcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmM9MjM1Nj1zdGF0aWMgdm9pZCBfX2V4aXQgYWZpdWN2X2V4aXQodm9pZClcbm5ldC9pdWN2L2FmX2l1Y3YuYy0yMzU3LXtcbm5ldC9pdWN2L2FmX2l1Y3YuYzoyMzU4Olx0aWYgKHByX2l1Y3YpXG5uZXQvaXVjdi9hZl9pdWN2LmM6MjM1OTpcdFx0cHJfaXVjdi1cdTAwM2VpdWN2X3VucmVnaXN0ZXIoXHUwMDI2YWZfaXVjdl9oYW5kbGVyLCAwKTtcbm5ldC9pdWN2L2FmX2l1Y3YuYy0yMzYwLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNSAxNTo1NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjIxNwoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDQwOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIElVQ1YgUGF0aCBTZXZlcmluZyBMb2dpYyoqCgpPa2F5LCBzbyBsb29raW5nIGF0IHRoaXMgY29kZSwgaXQgc2VlbXMgdGhlIGBwcl9pdWN2YCBwb2ludGVyIGlzIHRoZSBrZXkuIE15IGluaXRpYWwgdGhvdWdodCB3YXMgdGhhdCBpdCYjMzk7cyBzaW1wbHkgYXNzaWduZWQgYCZhbXA7aXVjdl9pZmAgaWYgYGl1Y3ZfcmVnaXN0ZXJgIGlzIGF2YWlsYWJsZSwgb3RoZXJ3aXNlIGl0JiMzOTtzIGBOVUxMYC4gQnV0IHRoZW4gSSBzYXcgYGFmaXVjdl9pbml0YCwgYW5kIHRoYXQmIzM5O3MgYSBiaXQgbW9yZSBpbnZvbHZlZC4gYGl1Y3ZfcmVnaXN0ZXJgIGlzIGNhbGxlZCwgYW5kIGlmIGl0IHN1Y2NlZWRzLCBgcHJfaXVjdmAgKmlzKiBzZXQsIGJ1dCBpZiBpdCBmYWlscywgYHByX2l1Y3ZgIGJlY29tZXMgYE5VTExgIGFuZCBgaXVjdl91c2VyaWRgIGlzIHplcm9lZC4gYGl1Y3ZfcmVnaXN0ZXJgIGl0c2VsZiBpcyBjbGVhcmx5IGRlZmluZWQgaW4gYG5ldC9pdWN2L2l1Y3YuY2AsIHdoaWNoIG1ha2VzIHNlbnNlLgoKTm93LCB0aGUgaW50ZXJlc3RpbmcgYml0OiB0aGUgcGF0Y2guIEl0IGludHJvZHVjZXMgdGhpcyBjb25kaXRpb246IGlmIHRoZXJlJiMzOTtzIGFuIGVycm9yLCBhbmQgdGhlIGBpdWN2LSZndDt0cmFuc3BvcnRgIGlzIGBBRl9JVUNWX1RSQU5TX0lVQ1ZgLCB0aGVuIGBpdWN2X3NldmVyX3BhdGhgIGlzIGNhbGxlZC4gSXQmIzM5O3MgZXNzZW50aWFsbHkgcGF0aCB0ZXJtaW5hdGlvbiBjb2RlLiBTbywgdGhlIHBhdGNoIGlzIGRlc2lnbmVkIHRvIGhhbmRsZSBhIHNpdHVhdGlvbiB3aGVyZSBhbiBJVUNWIHBhdGggbmVlZHMgdG8gYmUgc2V2ZXJlZC4KClRoZSBjcnVjaWFsIHBvaW50IGhlcmUgaXMgdGhhdCB0aGlzIGxvZ2ljICpvbmx5KiB0cmlnZ2VycyBpZiBgaXVjdi0mZ3Q7dHJhbnNwb3J0YCBpcyBleHBsaWNpdGx5IHNldCB0byBgQUZfSVVDVl9UUkFOU19JVUNWYC4gVGhpcyBzdWdnZXN0cyB0aGF0IHRoZSBjb2RlIHBhdGggZm9yIHNldmVyaW5nIG9ubHkgZ2V0cyBoaXQgaWYgSVVDViB0cmFuc3BvcnQgaXMgYWN0dWFsbHkgaW4gdXNlLiBUaGlzIGRpcmVjdGx5IGltcGxpZXMgdGhhdCB0aGUgSVVDViB0cmFuc3BvcnQgaXMgKmVuYWJsZWQqLgoKQW5kIGdpdmVuIGhvdyBgcHJfaXVjdmAgaXMgc2V0IHVwLCB0aGlzIGFsc28gaW1wbGljaXRseSBtZWFucyB0aGF0IGBwcl9pdWN2YCAqbXVzdCogYmUgbm9uLU5VTEwgZm9yIHRoaXMgY29kZSB0byBldmVuIGV4ZWN1dGUsIHNpbmNlIGBpdWN2X3JlZ2lzdGVyYCBoYXMgdG8gaGF2ZSBzdWNjZWVkZWQuIFNvLCBpbiBzdW1tYXJ5LCB0aGlzIHBhdGNoIGlzIGEgY3J1Y2lhbCBzYWZldHkgbWVjaGFuaXNtOiBpZiB0aGUgSVVDViB0cmFuc3BvcnQgaXMgZW5hYmxlZCAoYGl1Y3YtJmd0O3RyYW5zcG9ydGAgaXMgYEFGX0lVQ1ZfVFJBTlNfSVVDVmApIGFuZCBzb21ldGhpbmcgZ29lcyB3cm9uZywgdGhlIHBhdGNoIHdpbGwgYXR0ZW1wdCB0byBjbGVhbiB1cCBhbnkgcmVtYWluaW5nIHNvY2tldCBzdGF0ZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTUgMTU6NTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aXVjdl9yZWdpc3RlciYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pdWN2L2l1Y3YuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXVjdi9pdWN2LmM9MjEwPXN0YXRpYyBpbnQgaXVjdl9hY3RpdmVfY3B1ID0gLTE7XG4tLVxubmV0L2l1Y3YvaXVjdi5jLTIxMi0vKlxubmV0L2l1Y3YvaXVjdi5jOjIxMzogKiBNdXRleCBhbmQgd2FpdCBxdWV1ZSBmb3IgaXVjdl9yZWdpc3Rlci9pdWN2X3VucmVnaXN0ZXIuXG5uZXQvaXVjdi9pdWN2LmMtMjE0LSAqL1xubmV0L2l1Y3YvaXVjdi5jOjIxNTpzdGF0aWMgREVGSU5FX01VVEVYKGl1Y3ZfcmVnaXN0ZXJfbXV0ZXgpO1xubmV0L2l1Y3YvaXVjdi5jLTIxNi1cbi0tXG5uZXQvaXVjdi9pdWN2LmM9NzIxPXN0YXRpYyB2b2lkIGl1Y3ZfY2xlYW51cF9xdWV1ZSh2b2lkKVxuLS1cbm5ldC9pdWN2L2l1Y3YuYy03NDYtLyoqXG5uZXQvaXVjdi9pdWN2LmM6NzQ3OiAqIGl1Y3ZfcmVnaXN0ZXIgLSBSZWdpc3RlcnMgYSBkcml2ZXIgd2l0aCBJVUNWLlxubmV0L2l1Y3YvaXVjdi5jLTc0OC0gKlxuLS1cbm5ldC9pdWN2L2l1Y3YuYy03NTQtICovXG5uZXQvaXVjdi9pdWN2LmM6NzU1OmludCBpdWN2X3JlZ2lzdGVyKHN0cnVjdCBpdWN2X2hhbmRsZXIgKmhhbmRsZXIsIGludCBzbXApXG5uZXQvaXVjdi9pdWN2LmMtNzU2LXtcbi0tXG5uZXQvaXVjdi9pdWN2LmMtNzYwLVx0XHRyZXR1cm4gLUVOT1NZUztcbm5ldC9pdWN2L2l1Y3YuYzo3NjE6XHRtdXRleF9sb2NrKFx1MDAyNml1Y3ZfcmVnaXN0ZXJfbXV0ZXgpO1xubmV0L2l1Y3YvaXVjdi5jLTc2Mi1cdGlmICghc21wKVxuLS1cbm5ldC9pdWN2L2l1Y3YuYy03NzYtb3V0X211dGV4OlxubmV0L2l1Y3YvaXVjdi5jOjc3NzpcdG11dGV4X3VubG9jayhcdTAwMjZpdWN2X3JlZ2lzdGVyX211dGV4KTtcbm5ldC9pdWN2L2l1Y3YuYy03NzgtXHRyZXR1cm4gcmM7XG5uZXQvaXVjdi9pdWN2LmMtNzc5LX1cbm5ldC9pdWN2L2l1Y3YuYzo3ODA6RVhQT1JUX1NZTUJPTChpdWN2X3JlZ2lzdGVyKTtcbm5ldC9pdWN2L2l1Y3YuYy03ODEtXG4tLVxubmV0L2l1Y3YvaXVjdi5jPTc4OD12b2lkIGl1Y3ZfdW5yZWdpc3RlcihzdHJ1Y3QgaXVjdl9oYW5kbGVyICpoYW5kbGVyLCBpbnQgc21wKVxuLS1cbm5ldC9pdWN2L2l1Y3YuYy03OTEtXG5uZXQvaXVjdi9pdWN2LmM6NzkyOlx0bXV0ZXhfbG9jayhcdTAwMjZpdWN2X3JlZ2lzdGVyX211dGV4KTtcbm5ldC9pdWN2L2l1Y3YuYy03OTMtXHRzcGluX2xvY2tfYmgoXHUwMDI2aXVjdl90YWJsZV9sb2NrKTtcbi0tXG5uZXQvaXVjdi9pdWN2LmMtODA5LVx0XHRpdWN2X3NldG1hc2tfbXAoKTtcbm5ldC9pdWN2L2l1Y3YuYzo4MTA6XHRtdXRleF91bmxvY2soXHUwMDI2aXVjdl9yZWdpc3Rlcl9tdXRleCk7XG5uZXQvaXVjdi9pdWN2LmMtODExLX1cbi0tXG5uZXQvaXVjdi9pdWN2LmM9MTgzND1zdHJ1Y3QgaXVjdl9pbnRlcmZhY2UgaXVjdl9pZiA9IHtcbi0tXG5uZXQvaXVjdi9pdWN2LmMtMTg0Ny1cdC5wYXRoX3NldmVyID0gaXVjdl9wYXRoX3NldmVyLFxubmV0L2l1Y3YvaXVjdi5jOjE4NDg6XHQuaXVjdl9yZWdpc3RlciA9IGl1Y3ZfcmVnaXN0ZXIsXG5uZXQvaXVjdi9pdWN2LmMtMTg0OS1cdC5pdWN2X3VucmVnaXN0ZXIgPSBpdWN2X3VucmVnaXN0ZXIsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE1IDE1OjU1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3OTkyCgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgdGhlIFB1cnBvc2Ugb2YgYGl1Y3ZfcmVnaXN0ZXJgKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBgaXVjdl9yZWdpc3RlcmAuIEhtbSwgSSB3b25kZXIgd2hhdCBpdHMgaW50ZW5kZWQgZnVuY3Rpb25hbGl0eSBpcywgc3BlY2lmaWNhbGx5IGluIHRoZSBjb250ZXh0IG9mIHRoZSBsYXJnZXIgYXJjaGl0ZWN0dXJlLiBJIG5lZWQgdG8gcXVpY2tseSByZWNhbGwgaG93IElVQ1YgKEludGVyLVVzZXIgQ29tbXVuaWNhdGlvbiBWZWhpY2xlKSB3b3JrcyBhdCB0aGUgbG93ZXIgbGV2ZWxzLiBJcyB0aGlzIGEgc3lzdGVtIGNhbGw/IEEgbGlicmFyeSBmdW5jdGlvbj8gTGlrZWx5IHRoZSBmb3JtZXIsIGNvbnNpZGVyaW5nIHRoZSBuYW1pbmcgY29udmVudGlvbi4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgdGhpcyBmdW5jdGlvbiBkZWFscyB3aXRoIHNldHRpbmcgdXAgYW4gSVVDViBjb25uZWN0aW9uLCBvciBwZXJoYXBzIGlmIGl0IHJlZ2lzdGVycyBhIHNlcnZpY2Ugb3IgcmVzb3VyY2UgZm9yIElVQ1YgY29tbXVuaWNhdGlvbi4gRG9lcyBpdCBoYW5kbGUgZW5kcG9pbnQgYmluZGluZywgb3IgaXMgaXQgbW9yZSBhYm91dCByZXNvdXJjZSBhbGxvY2F0aW9uIHdpdGhpbiB0aGUgSVVDViBzdWJzeXN0ZW0/IE15IG1pbmQgaXMgc3RhcnRpbmcgdG8gZmxlc2ggb3V0IHRoZSBwcm9iYWJsZSBwYXJhbWV0ZXJzIGl0IHdvdWxkIGFjY2VwdCDigJMgbWF5YmUgc3BlY2lmeWluZyB0aGUgdGFyZ2V0IGFkZHJlc3Mgc3BhY2UsIHRoZSBjb21tdW5pY2F0aW9uIHR5cGUsIGFuZCBhbnkgYXNzb2NpYXRlZCBkYXRhIGJ1ZmZlcnMuIFVuZGVyc3RhbmRpbmcgdGhlIHNwZWNpZmljIGZsYWdzIG9yIGNvbnRyb2wgd29yZHMgd2lsbCBiZSBrZXkgdG8gZ3Jhc3BpbmcgaXRzIG51YW5jZS4gSSBzaG91bGQgcXVpY2tseSBjcm9zcy1yZWZlcmVuY2UgdGhpcyB3aXRoIHJlbGV2YW50IGRvY3VtZW50YXRpb24gYW5kIGhlYWRlciBmaWxlcy4gVGltZSB0byBkaWcgZGVlcGVyIGFuZCBzZWUgaWYgbXkgaW5pdGlhbCBhc3N1bXB0aW9ucyBhcmUgY29ycmVjdC4gSSYjMzk7bGwgZm9jdXMgb24gZXJyb3IgY29kZXMgYW5kIHRoZSByZWdpc3RlciYjMzk7cyBhcmd1bWVudHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE1IDE1OjU1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2l1Y3YvaXVjdi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNzU1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDMwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA3NTU6XHRpbnQgaXVjdl9yZWdpc3RlcihzdHJ1Y3QgaXVjdl9oYW5kbGVyICpoYW5kbGVyLCBpbnQgc21wKVxuIDc1NjpcdHtcbiA3NTc6XHRcdGludCByYztcbiA3NTg6XHRcbiA3NTk6XHRcdGlmICghaXVjdl9hdmFpbGFibGUpXG4gNzYwOlx0XHRcdHJldHVybiAtRU5PU1lTO1xuIDc2MTpcdFx0bXV0ZXhfbG9jayhcdTAwMjZpdWN2X3JlZ2lzdGVyX211dGV4KTtcbiA3NjI6XHRcdGlmICghc21wKVxuIDc2MzpcdFx0XHRpdWN2X25vbnNtcF9oYW5kbGVyJiM0MzsmIzQzOztcbiA3NjQ6XHRcdGlmIChsaXN0X2VtcHR5KFx1MDAyNml1Y3ZfaGFuZGxlcl9saXN0KSkge1xuIDc2NTpcdFx0XHRyYyA9IGl1Y3ZfZW5hYmxlKCk7XG4gNzY2Olx0XHRcdGlmIChyYylcbiA3Njc6XHRcdFx0XHRnb3RvIG91dF9tdXRleDtcbiA3Njg6XHRcdH0gZWxzZSBpZiAoIXNtcCBcdTAwMjZcdTAwMjYgaXVjdl9ub25zbXBfaGFuZGxlciA9PSAxKVxuIDc2OTpcdFx0XHRpdWN2X3NldG1hc2tfdXAoKTtcbiA3NzA6XHRcdElOSVRfTElTVF9IRUFEKFx1MDAyNmhhbmRsZXItXHUwMDNlcGF0aHMpO1xuIDc3MTpcdFxuIDc3MjpcdFx0c3Bpbl9sb2NrX2JoKFx1MDAyNml1Y3ZfdGFibGVfbG9jayk7XG4gNzczOlx0XHRsaXN0X2FkZF90YWlsKFx1MDAyNmhhbmRsZXItXHUwMDNlbGlzdCwgXHUwMDI2aXVjdl9oYW5kbGVyX2xpc3QpO1xuIDc3NDpcdFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2aXVjdl90YWJsZV9sb2NrKTtcbiA3NzU6XHRcdHJjID0gMDtcbiA3NzY6XHRvdXRfbXV0ZXg6XG4gNzc3Olx0XHRtdXRleF91bmxvY2soXHUwMDI2aXVjdl9yZWdpc3Rlcl9tdXRleCk7XG4gNzc4Olx0XHRyZXR1cm4gcmM7XG4gNzc5Olx0fVxuIDc4MDpcdEVYUE9SVF9TWU1CT0woaXVjdl9yZWdpc3Rlcik7XG4gNzgxOlx0XG4gNzgyOlx0LyoqXG4gNzgzOlx0ICogaXVjdl91bnJlZ2lzdGVyIC0gVW5yZWdpc3RlciBkcml2ZXIgZnJvbSBJVUNWLlxuIDc4NDpcdCAqXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE1IDE1OjU1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4NzQ5CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKkluaXRpYWwgQXNzZXNzbWVudDogYGl1Y3ZfYXZhaWxhYmxlYCoqCgpSaWdodCwgc28gdGhlIGZpcnN0IHRoaW5nIG15IG1pbmQgZmxhZ3MgaXMgdGhlIHN0YXRlIG9mIGBpdWN2X2F2YWlsYWJsZWAuIFRoaXMgaW1tZWRpYXRlbHkgdGVsbHMgbWUgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBwb3RlbnRpYWxseSBjcml0aWNhbCBpbmZyYXN0cnVjdHVyZSBvciBhIGNvcmUgc3lzdGVtIGNvbXBvbmVudCB0aGF0IHJlbGllcyBvbiBJbnRlci1Vbml0IENvbW11bmljYXRpb24gVmVjdG9yIChJVUNWKSBmdW5jdGlvbmFsaXR5LiBUaGUgdmVyeSBmYWN0IHRoYXQgdGhpcyBjaGVjayBpcyBoYXBwZW5pbmcgc3VnZ2VzdHMgYSBjcnVjaWFsIHBhcnQgb2YgdGhlIHByb2Nlc3MgaGluZ2VzIG9uIHRoZSBwcmVzZW5jZSBhbmQgYWNjZXNzaWJpbGl0eSBvZiBJVUNWLiBHaXZlbiB0aGUgc2NvcGUgb2YgbXkgZXhwZXJ0aXNlLCBJJiMzOTttIGFscmVhZHkgYW50aWNpcGF0aW5nIHdoYXQgZGVwZW5kcyBvbiB0aGlzIElVQ1YgYXZhaWxhYmlsaXR5IOKAkyByZXNvdXJjZSBhbGxvY2F0aW9uLCBpbnRlci1wcm9jZXNzIHN5bmNocm9uaXphdGlvbiwgcG90ZW50aWFsbHkgZXZlbiBzeXN0ZW0gaGVhbHRoIG1vbml0b3JpbmcgYXQgYSBmdW5kYW1lbnRhbCBsZXZlbC4gSSYjMzk7bSBpbW1lZGlhdGVseSBydW5uaW5nIGEgbWVudGFsIGNoZWNrbGlzdDogV2hhdCBsZXZlbCBvZiBgaXVjdl9hdmFpbGFibGVgIGF2YWlsYWJpbGl0eSBhcmUgd2UgZXhwZWN0aW5nIC0gd2hhdCBhcmUgdGhlIHRvbGVyYW5jZSBsZXZlbHM/IEFyZSB3ZSB0YWxraW5nIGJhc2ljIGV4aXN0ZW5jZSwgZnVuY3Rpb25hbCBkYXRhIHRyYW5zZmVyLCBvciBhIHNwZWNpZmljIHZlcnNpb24/IElzIGl0IGEgc2luZ2xlIHN5c3RlbSwgb3IgYSB3aWRlciBuZXR3b3JrPwoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNSAxNTo1NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpdWN2X2F2YWlsYWJsZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pdWN2L2l1Y3YuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXVjdi9pdWN2LmM9MTE0PUVYUE9SVF9TWU1CT0woaXVjdl9hbGxvY19kZXZpY2UpO1xubmV0L2l1Y3YvaXVjdi5jLTExNS1cbm5ldC9pdWN2L2l1Y3YuYzoxMTY6c3RhdGljIGludCBpdWN2X2F2YWlsYWJsZTtcbm5ldC9pdWN2L2l1Y3YuYy0xMTctXG4tLVxubmV0L2l1Y3YvaXVjdi5jPTc1NT1pbnQgaXVjdl9yZWdpc3RlcihzdHJ1Y3QgaXVjdl9oYW5kbGVyICpoYW5kbGVyLCBpbnQgc21wKVxuLS1cbm5ldC9pdWN2L2l1Y3YuYy03NTgtXG5uZXQvaXVjdi9pdWN2LmM6NzU5Olx0aWYgKCFpdWN2X2F2YWlsYWJsZSlcbm5ldC9pdWN2L2l1Y3YuYy03NjAtXHRcdHJldHVybiAtRU5PU1lTO1xuLS1cbm5ldC9pdWN2L2l1Y3YuYz0xODYyPXN0YXRpYyBpbnQgX19pbml0IGl1Y3ZfaW5pdCh2b2lkKVxuLS1cbm5ldC9pdWN2L2l1Y3YuYy0xODk4LVx0QVNDRUJDKGl1Y3ZfZXJyb3JfcGF0aGlkLCAxNik7XG5uZXQvaXVjdi9pdWN2LmM6MTg5OTpcdGl1Y3ZfYXZhaWxhYmxlID0gMTtcbm5ldC9pdWN2L2l1Y3YuYy0xOTAwLVx0cmMgPSBidXNfcmVnaXN0ZXIoXHUwMDI2aXVjdl9idXMpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNSAxNTo1NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTM0NQoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgcHJlc2VudGVkIGFzIGlmIGl0IHdlcmUgbXkgb3duIGludGVybmFsIG1vbm9sb2d1ZToKCioqSW5pdGlhbGl6aW5nIHRoZSBJVUNWIEZsYWcqKgoKQWxyaWdodCwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoZSBgaXVjdl9pbml0YCByb3V0aW5lLiBUaGUga2V5IHRoaW5nIEkmIzM5O20gbm90aWNpbmcgcmlnaHQgb2ZmIHRoZSBiYXQgaXMgdGhhdCBgaXVjdl9hdmFpbGFibGVgIGlzIGJlaW5nIHNldCB0byAxLiBUaGF0JiMzOTtzIHRoZSBpbml0aWFsIHN0YXRlLiBObyBzdXJwcmlzZXMgdGhlcmUuIEl0IHNpZ25hbHMgdGhhdCB0aGUgSW50ZXItVXNlciBDb21tdW5pY2F0aW9uIFZlaGljbGUgKElVQ1YpIGZ1bmN0aW9uYWxpdHkgaXMsIGF0IGxlYXN0ICpwb3RlbnRpYWxseSosIGF2YWlsYWJsZSBhdCB0aGlzIHBvaW50IGluIHRoZSBpbml0aWFsaXphdGlvbiBwcm9jZXNzLiBUaGlzIGlzIHRoZSBmaXJzdCBpbmRpY2F0aW9uIHRoYXQgdGhlIHN5c3RlbSBpcyB0cnlpbmcgdG8gZ2V0IHJlYWR5IGZvciBJVUNWIG9wZXJhdGlvbnMuIFRoaXMgc2V0cyB0aGUgc3RhZ2UgZm9yIGNoZWNraW5nIGZvciBvdGhlciBkZXBlbmRlbmNpZXMgb3IgcG9zc2libGUgY29uZmxpY3RzLiBGcm9tIGhlcmUsIG9uZSB3b3VsZCBjb250aW51ZSB3aXRoIHRoZSBJVUNWIGluaXRpYWxpemF0aW9uLCBhbmQgaXQgd291bGQgYmUgZXhwZWN0ZWQgdGhhdCBhIHNlcmllcyBvZiBjaGVja3Mgd2lsbCBmb2xsb3cuIFRoaXMgaW5pdGlhbCBmbGFnIGlzIGVzc2VudGlhbCwgb2YgY291cnNlLCB3aXRob3V0IHNldHRpbmcgaXQsIG5vdGhpbmcgZWxzZSB3b3VsZCBiZSBwb3NzaWJsZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTUgMTU6NTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvaXVjdi9pdWN2LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxODYyLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzE4NjI6XHRzdGF0aWMgaW50IF9faW5pdCBpdWN2X2luaXQodm9pZClcbjE4NjM6XHR7XG4xODY0Olx0XHRpbnQgcmM7XG4xODY1Olx0XG4xODY2Olx0XHRpZiAoIW1hY2hpbmVfaXNfdm0oKSkge1xuMTg2NzpcdFx0XHRyYyA9IC1FUFJPVE9OT1NVUFBPUlQ7XG4xODY4Olx0XHRcdGdvdG8gb3V0O1xuMTg2OTpcdFx0fVxuMTg3MDpcdFx0c3lzdGVtX2N0bF9zZXRfYml0KDAsIENSMF9JVUNWX0JJVCk7XG4xODcxOlx0XHRyYyA9IGl1Y3ZfcXVlcnlfbWF4Y29ubigpO1xuMTg3MjpcdFx0aWYgKHJjKVxuMTg3MzpcdFx0XHRnb3RvIG91dF9jdGw7XG4xODc0Olx0XHRyYyA9IHJlZ2lzdGVyX2V4dGVybmFsX2lycShFWFRfSVJRX0lVQ1YsIGl1Y3ZfZXh0ZXJuYWxfaW50ZXJydXB0KTtcbjE4NzU6XHRcdGlmIChyYylcbjE4NzY6XHRcdFx0Z290byBvdXRfY3RsO1xuMTg3NzpcdFx0aXVjdl9yb290ID0gcm9vdF9kZXZpY2VfcmVnaXN0ZXIoXCYjMzQ7aXVjdlwmIzM0Oyk7XG4xODc4Olx0XHRpZiAoSVNfRVJSKGl1Y3Zfcm9vdCkpIHtcbjE4Nzk6XHRcdFx0cmMgPSBQVFJfRVJSKGl1Y3Zfcm9vdCk7XG4xODgwOlx0XHRcdGdvdG8gb3V0X2ludDtcbjE4ODE6XHRcdH1cbjE4ODI6XHRcbjE4ODM6XHRcdHJjID0gY3B1aHBfc2V0dXBfc3RhdGUoQ1BVSFBfTkVUX0lVQ1ZfUFJFUEFSRSwgXCYjMzQ7bmV0L2l1Y3Y6cHJlcGFyZVwmIzM0OyxcbjE4ODQ6XHRcdFx0XHQgICAgICAgaXVjdl9jcHVfcHJlcGFyZSwgaXVjdl9jcHVfZGVhZCk7XG4xODg1Olx0XHRpZiAocmMpXG4xODg2Olx0XHRcdGdvdG8gb3V0X2RldjtcbjE4ODc6XHRcdHJjID0gY3B1aHBfc2V0dXBfc3RhdGUoQ1BVSFBfQVBfT05MSU5FX0RZTiwgXCYjMzQ7bmV0L2l1Y3Y6b25saW5lXCYjMzQ7LFxuMTg4ODpcdFx0XHRcdCAgICAgICBpdWN2X2NwdV9vbmxpbmUsIGl1Y3ZfY3B1X2Rvd25fcHJlcCk7XG4xODg5Olx0XHRpZiAocmMgXHUwMDNjIDApXG4xODkwOlx0XHRcdGdvdG8gb3V0X3ByZXA7XG4xODkxOlx0XHRpdWN2X29ubGluZSA9IHJjO1xuMTg5MjpcdFxuMTg5MzpcdFx0cmMgPSByZWdpc3Rlcl9yZWJvb3Rfbm90aWZpZXIoXHUwMDI2aXVjdl9yZWJvb3Rfbm90aWZpZXIpO1xuMTg5NDpcdFx0aWYgKHJjKVxuMTg5NTpcdFx0XHRnb3RvIG91dF9yZW1vdmVfaHA7XG4xODk2Olx0XHRBU0NFQkMoaXVjdl9lcnJvcl9ub19saXN0ZW5lciwgMTYpO1xuMTg5NzpcdFx0QVNDRUJDKGl1Y3ZfZXJyb3Jfbm9fbWVtb3J5LCAxNik7XG4xODk4Olx0XHRBU0NFQkMoaXVjdl9lcnJvcl9wYXRoaWQsIDE2KTtcbjE4OTk6XHRcdGl1Y3ZfYXZhaWxhYmxlID0gMTtcbjE5MDA6XHRcdHJjID0gYnVzX3JlZ2lzdGVyKFx1MDAyNml1Y3ZfYnVzKTtcbjE5MDE6XHRcdGlmIChyYylcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTUgMTU6NTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjAyOTMKCQkJCQkJCW91dHB1dDogMjUKCQkJCQkJCXRob3VnaHRzOiAxMDcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIHovVk0gRGV0ZWN0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGBtYWNoaW5lX2lzX3ZtKClgIGZ1bmN0aW9uLiBJdHMgcHVycG9zZSwgZnJvbSB3aGF0IEkgZ2F0aGVyLCBpcyB0byBmaWd1cmUgb3V0IGlmIHRoZSBzeXN0ZW0gaXMgcnVubmluZyB1bmRlciB6L1ZNLiBOb3csIGhlcmUmIzM5O3Mgd2hlcmUgaXQgZ2V0cyBpbnRlcmVzdGluZywgZXNwZWNpYWxseSBnaXZlbiBteSBleHBlcmllbmNlLiBJZiBzeXprYWxsZXIsIHdoaWNoIEkmIzM5O20gd29ya2luZyB3aXRoLCBpcyBydW5uaW5nIGluc2lkZSBRRU1VLCB0aGUgbGlrZWxpaG9vZCBvZiBgbWFjaGluZV9pc192bSgpYCByZXR1cm5pbmcgdHJ1ZSBzZWVtcyBsb3cuIFFFTVUsIGluIG1vc3QgdHlwaWNhbCBjb25maWd1cmF0aW9ucywgdmlydHVhbGl6ZXMgYSAqZGlmZmVyZW50KiBlbnZpcm9ubWVudCDigJMgdXN1YWxseSBLVk0gb3IgVENHIOKAkyBhbmQgbm90IG5lY2Vzc2FyaWx5IHovVk0gZGlyZWN0bHkuCgpCdXQsIGhhbmcgb24gYSBzZWNvbmQuLi4gUUVNVSwgc3BlY2lmaWNhbGx5IGZvciBzMzkweCBhcmNoaXRlY3R1cmUsICp1c3VhbGx5KiBlbXVsYXRlcyBhIHovQXJjaGl0ZWN0dXJlIG1hY2hpbmUsIGRvZXNuJiMzOTt0IGl0PyBUaGUgcXVlc3Rpb24gaXM6IERvZXMgaXQgZ28gdGhhdCBleHRyYSBzdGVwIHRvIGVtdWxhdGUgei9WTSAqc3BlY2lmaWNhbGx5Kj8gSSBuZWVkIHRvIHZlcmlmeSB0aGF0IGFzc3VtcHRpb24uIEJlc3QgdG8gY2hlY2sgYG1hY2hpbmVfaXNfdm0oKWAgZGlyZWN0bHkgYW5kIHNlZSB3aGF0IGl0IHJlcG9ydHMuIEl0JiMzOTtzIHRoZSBtb3N0IHJlbGlhYmxlIHdheSB0byBjb25maXJtIGhvdyB0aGlzIHNwZWNpZmljIFFFTVUgY29uZmlndXJhdGlvbiBpcyBiZWhhdmluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTUgMTU6NTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bWFjaGluZV9pc192bSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3MzOTAvYm9vdC9zdGFydHVwLmM9NzE9c3RhdGljIHZvaWQgZGV0ZWN0X2RpYWcyODgodm9pZClcbi0tXG5hcmNoL3MzOTAvYm9vdC9zdGFydHVwLmMtNzYtXG5hcmNoL3MzOTAvYm9vdC9zdGFydHVwLmM6Nzc6XHRhY3Rpb24gPSBtYWNoaW5lX2lzX3ZtKCkgPyAodW5zaWduZWQgbG9uZyljbWQgOiBMUEFSV0RUX1JFU1RBUlQ7XG5hcmNoL3MzOTAvYm9vdC9zdGFydHVwLmM6Nzg6XHRsZW4gPSBtYWNoaW5lX2lzX3ZtKCkgPyBzaXplb2YoY21kKSA6IDA7XG5hcmNoL3MzOTAvYm9vdC9zdGFydHVwLmMtNzktXHRpZiAoX19kaWFnMjg4KFdEVF9GVU5DX0lOSVQsIE1JTl9JTlRFUlZBTCwgYWN0aW9uLCBsZW4pKVxuLS1cbmFyY2gvczM5MC9oeXBmcy9oeXBmc19kaWFnMGMuYz0xMDg9aW50IF9faW5pdCBoeXBmc19kaWFnMGNfaW5pdCh2b2lkKVxuYXJjaC9zMzkwL2h5cGZzL2h5cGZzX2RpYWcwYy5jLTEwOS17XG5hcmNoL3MzOTAvaHlwZnMvaHlwZnNfZGlhZzBjLmM6MTEwOlx0aWYgKCFtYWNoaW5lX2lzX3ZtKCkpXG5hcmNoL3MzOTAvaHlwZnMvaHlwZnNfZGlhZzBjLmMtMTExLVx0XHRyZXR1cm4gMDtcbi0tXG5hcmNoL3MzOTAvaHlwZnMvaHlwZnNfZGlhZzBjLmM9MTE5PXZvaWQgaHlwZnNfZGlhZzBjX2V4aXQodm9pZClcbmFyY2gvczM5MC9oeXBmcy9oeXBmc19kaWFnMGMuYy0xMjAte1xuYXJjaC9zMzkwL2h5cGZzL2h5cGZzX2RpYWcwYy5jOjEyMTpcdGlmICghbWFjaGluZV9pc192bSgpKVxuYXJjaC9zMzkwL2h5cGZzL2h5cGZzX2RpYWcwYy5jLTEyMi1cdFx0cmV0dXJuO1xuLS1cbmFyY2gvczM5MC9oeXBmcy9oeXBmc192bS5jPTEyMz1pbnQgaHlwZnNfdm1faW5pdCh2b2lkKVxuYXJjaC9zMzkwL2h5cGZzL2h5cGZzX3ZtLmMtMTI0LXtcbmFyY2gvczM5MC9oeXBmcy9oeXBmc192bS5jOjEyNTpcdGlmICghbWFjaGluZV9pc192bSgpKVxuYXJjaC9zMzkwL2h5cGZzL2h5cGZzX3ZtLmMtMTI2LVx0XHRyZXR1cm4gMDtcbi0tXG5hcmNoL3MzOTAvaHlwZnMvaHlwZnNfdm0uYz0xMzc9dm9pZCBoeXBmc192bV9leGl0KHZvaWQpXG5hcmNoL3MzOTAvaHlwZnMvaHlwZnNfdm0uYy0xMzgte1xuYXJjaC9zMzkwL2h5cGZzL2h5cGZzX3ZtLmM6MTM5Olx0aWYgKCFtYWNoaW5lX2lzX3ZtKCkpXG5hcmNoL3MzOTAvaHlwZnMvaHlwZnNfdm0uYy0xNDAtXHRcdHJldHVybjtcbi0tXG5hcmNoL3MzOTAvaHlwZnMvaW5vZGUuYz0xNDg9c3RhdGljIHNzaXplX3QgaHlwZnNfd3JpdGVfaXRlcihzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqZnJvbSlcbi0tXG5hcmNoL3MzOTAvaHlwZnMvaW5vZGUuYy0xNzAtXHRoeXBmc19kZWxldGVfdHJlZSgpO1xuYXJjaC9zMzkwL2h5cGZzL2lub2RlLmM6MTcxOlx0aWYgKG1hY2hpbmVfaXNfdm0oKSlcbmFyY2gvczM5MC9oeXBmcy9pbm9kZS5jLTE3Mi1cdFx0cmMgPSBoeXBmc192bV9jcmVhdGVfZmlsZXMoc2ItXHUwMDNlc19yb290KTtcbi0tXG5hcmNoL3MzOTAvaHlwZnMvaW5vZGUuYz0yNDA9c3RhdGljIGludCBoeXBmc19maWxsX3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHN0cnVjdCBmc19jb250ZXh0ICpmYylcbi0tXG5hcmNoL3MzOTAvaHlwZnMvaW5vZGUuYy0yNTktXHRcdHJldHVybiAtRU5PTUVNO1xuYXJjaC9zMzkwL2h5cGZzL2lub2RlLmM6MjYwOlx0aWYgKG1hY2hpbmVfaXNfdm0oKSlcbmFyY2gvczM5MC9oeXBmcy9pbm9kZS5jLTI2MS1cdFx0cmMgPSBoeXBmc192bV9jcmVhdGVfZmlsZXMocm9vdF9kZW50cnkpO1xuLS1cbmFyY2gvczM5MC9pbmNsdWRlL2FzbS9hcHBsZGF0YS5oPTQ1PXN0YXRpYyBpbmxpbmUgaW50IGFwcGxkYXRhX2FzbShzdHJ1Y3QgYXBwbGRhdGFfcGFyYW1ldGVyX2xpc3QgKnBhcm1fbGlzdCxcbi0tXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vYXBwbGRhdGEuaC01MS1cbmFyY2gvczM5MC9pbmNsdWRlL2FzbS9hcHBsZGF0YS5oOjUyOlx0aWYgKCFtYWNoaW5lX2lzX3ZtKCkpXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vYXBwbGRhdGEuaC01My1cdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuLS1cbmFyY2gvczM5MC9pbmNsdWRlL2FzbS9tYWNoaW5lLmg9OTc9REVGSU5FX01BQ0hJTkVfSEFTX0ZFQVRVUkUobHBhciwgTUZFQVRVUkVfTFBBUilcbmFyY2gvczM5MC9pbmNsdWRlL2FzbS9tYWNoaW5lLmgtOTgtXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vbWFjaGluZS5oOjk5OiNkZWZpbmUgbWFjaGluZV9pc192bVx0bWFjaGluZV9oYXNfdm1cbmFyY2gvczM5MC9pbmNsdWRlL2FzbS9tYWNoaW5lLmgtMTAwLSNkZWZpbmUgbWFjaGluZV9pc19rdm1cdG1hY2hpbmVfaGFzX2t2bVxuLS1cbmFyY2gvczM5MC9rZXJuZWwvZWFybHkuYz0xMTA9c3RhdGljIG5vaW5saW5lIF9faW5pdCB2b2lkIHNldHVwX2FyY2hfc3RyaW5nKHZvaWQpXG4tLVxuYXJjaC9zMzkwL2tlcm5lbC9lYXJseS5jLTEzMi1cdFx0XHQgIG1hY2hpbmVfaXNfbHBhcigpID8gXCYjMzQ7TFBBUlwmIzM0OyA6XG5hcmNoL3MzOTAva2VybmVsL2Vhcmx5LmM6MTMzOlx0XHRcdCAgbWFjaGluZV9pc192bSgpID8gXCYjMzQ7ei9WTVwmIzM0OyA6XG5hcmNoL3MzOTAva2VybmVsL2Vhcmx5LmMtMTM0LVx0XHRcdCAgbWFjaGluZV9pc19rdm0oKSA/IFwmIzM0O0tWTVwmIzM0OyA6IFwmIzM0O3Vua25vd25cJiMzNDspO1xuLS1cbmFyY2gvczM5MC9rZXJuZWwvaXBsLmM9Njk0PXN0YXRpYyBpbnQgX19pbml0IGlwbF9pbml0KHZvaWQpXG4tLVxuYXJjaC9zMzkwL2tlcm5lbC9pcGwuYy03MDctXHRjYXNlIElQTF9UWVBFX0NDVzpcbmFyY2gvczM5MC9rZXJuZWwvaXBsLmM6NzA4Olx0XHRpZiAobWFjaGluZV9pc192bSgpKVxuYXJjaC9zMzkwL2tlcm5lbC9pcGwuYy03MDktXHRcdFx0cmMgPSBzeXNmc19jcmVhdGVfZ3JvdXAoXHUwMDI2aXBsX2tzZXQtXHUwMDNla29iaixcbi0tXG5hcmNoL3MzOTAva2VybmVsL2lwbC5jPTEyODY9c3RhdGljIHZvaWQgcmVpcGxfYmxvY2tfY2N3X2ZpbGxfcGFybXMoc3RydWN0IGlwbF9wYXJhbWV0ZXJfYmxvY2sgKmlwYilcbi0tXG5hcmNoL3MzOTAva2VybmVsL2lwbC5jLTEyOTctXHQvKiBWTSBQQVJNICovXG5hcmNoL3MzOTAva2VybmVsL2lwbC5jOjEyOTg6XHRpZiAobWFjaGluZV9pc192bSgpIFx1MDAyNlx1MDAyNiBpcGxfYmxvY2tfdmFsaWQgXHUwMDI2XHUwMDI2XG5hcmNoL3MzOTAva2VybmVsL2lwbC5jLTEyOTktXHQgICAgKGlwbF9ibG9jay5jY3cudm1fZmxhZ3MgXHUwMDI2IElQTF9QQjBfQ0NXX1ZNX0ZMQUdfVlApKSB7XG4tLVxuYXJjaC9zMzkwL2tlcm5lbC9pcGwuYz0xMzA4PXN0YXRpYyBpbnQgX19pbml0IHJlaXBsX25zc19pbml0KHZvaWQpXG4tLVxuYXJjaC9zMzkwL2tlcm5lbC9pcGwuYy0xMzExLVxuYXJjaC9zMzkwL2tlcm5lbC9pcGwuYzoxMzEyOlx0aWYgKCFtYWNoaW5lX2lzX3ZtKCkpXG5hcmNoL3MzOTAva2VybmVsL2lwbC5jLTEzMTMtXHRcdHJldHVybiAwO1xuLS1cbmFyY2gvczM5MC9rZXJuZWwvaXBsLmM9MTMyOD1zdGF0aWMgaW50IF9faW5pdCByZWlwbF9jY3dfaW5pdCh2b2lkKVxuLS1cbmFyY2gvczM5MC9rZXJuZWwvaXBsLmMtMTMzNi1cdHJjID0gc3lzZnNfY3JlYXRlX2dyb3VwKFx1MDAyNnJlaXBsX2tzZXQtXHUwMDNla29iaixcbmFyY2gvczM5MC9rZXJuZWwvaXBsLmM6MTMzNzpcdFx0XHRcdG1hY2hpbmVfaXNfdm0oKSA/IFx1MDAyNnJlaXBsX2Njd19hdHRyX2dyb3VwX3ZtXG5hcmNoL3MzOTAva2VybmVsL2lwbC5jLTEzMzgtXHRcdFx0XHRcdFx0OiBcdTAwMjZyZWlwbF9jY3dfYXR0cl9ncm91cF9scGFyKTtcbi0tXG5hcmNoL3MzOTAva2VybmVsL2lwbC5jPTIwMTQ9c3RhdGljIGludCB2bWNtZF9pbml0KHZvaWQpXG5hcmNoL3MzOTAva2VybmVsL2lwbC5jLTIwMTUte1xuYXJjaC9zMzkwL2tlcm5lbC9pcGwuYzoyMDE2Olx0aWYgKCFtYWNoaW5lX2lzX3ZtKCkpXG5hcmNoL3MzOTAva2VybmVsL2lwbC5jLTIwMTctXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbi0tXG5hcmNoL3MzOTAva2VybmVsL2lwbC5jPTIyOTQ9c3RhdGljIGludCBfX2luaXQgdm1jbWRfb25fcmVib290X3NldHVwKGNoYXIgKnN0cilcbmFyY2gvczM5MC9rZXJuZWwvaXBsLmMtMjI5NS17XG5hcmNoL3MzOTAva2VybmVsL2lwbC5jOjIyOTY6XHRpZiAoIW1hY2hpbmVfaXNfdm0oKSlcbmFyY2gvczM5MC9rZXJuZWwvaXBsLmMtMjI5Ny1cdFx0cmV0dXJuIDE7XG4tLVxuYXJjaC9zMzkwL2tlcm5lbC9pcGwuYz0yMzA0PXN0YXRpYyBpbnQgX19pbml0IHZtY21kX29uX3BhbmljX3NldHVwKGNoYXIgKnN0cilcbmFyY2gvczM5MC9rZXJuZWwvaXBsLmMtMjMwNS17XG5hcmNoL3MzOTAva2VybmVsL2lwbC5jOjIzMDY6XHRpZiAoIW1hY2hpbmVfaXNfdm0oKSlcbmFyY2gvczM5MC9rZXJuZWwvaXBsLmMtMjMwNy1cdFx0cmV0dXJuIDE7XG4tLVxuYXJjaC9zMzkwL2tlcm5lbC9pcGwuYz0yMzE0PXN0YXRpYyBpbnQgX19pbml0IHZtY21kX29uX2hhbHRfc2V0dXAoY2hhciAqc3RyKVxuYXJjaC9zMzkwL2tlcm5lbC9pcGwuYy0yMzE1LXtcbmFyY2gvczM5MC9rZXJuZWwvaXBsLmM6MjMxNjpcdGlmICghbWFjaGluZV9pc192bSgpKVxuYXJjaC9zMzkwL2tlcm5lbC9pcGwuYy0yMzE3LVx0XHRyZXR1cm4gMTtcbi0tXG5hcmNoL3MzOTAva2VybmVsL2lwbC5jPTIzMjQ9c3RhdGljIGludCBfX2luaXQgdm1jbWRfb25fcG9mZl9zZXR1cChjaGFyICpzdHIpXG5hcmNoL3MzOTAva2VybmVsL2lwbC5jLTIzMjUte1xuYXJjaC9zMzkwL2tlcm5lbC9pcGwuYzoyMzI2Olx0aWYgKCFtYWNoaW5lX2lzX3ZtKCkpXG5hcmNoL3MzOTAva2VybmVsL2lwbC5jLTIzMjctXHRcdHJldHVybiAxO1xuLS1cbmFyY2gvczM5MC9rZXJuZWwvbWFjaGluZV9rZXhlYy5jPTE4MD1zdGF0aWMgaW50IG1hY2hpbmVfa2V4ZWNfcHJlcGFyZV9rZHVtcCh2b2lkKVxuLS1cbmFyY2gvczM5MC9rZXJuZWwvbWFjaGluZV9rZXhlYy5jLTE4Mi0jaWZkZWYgQ09ORklHX0NSQVNIX0RVTVBcbmFyY2gvczM5MC9rZXJuZWwvbWFjaGluZV9rZXhlYy5jOjE4MzpcdGlmIChtYWNoaW5lX2lzX3ZtKCkpXG5hcmNoL3MzOTAva2VybmVsL21hY2hpbmVfa2V4ZWMuYy0xODQtXHRcdGRpYWcxMF9yYW5nZShQRk5fRE9XTihjcmFzaGtfcmVzLnN0YXJ0KSxcbi0tXG5hcmNoL3MzOTAva2VybmVsL3NldHVwLmM9MjQ2PXN0YXRpYyB2b2lkIF9faW5pdCBjb25tb2RlX2RlZmF1bHQodm9pZClcbi0tXG5hcmNoL3MzOTAva2VybmVsL3NldHVwLmMtMjUwLVxuYXJjaC9zMzkwL2tlcm5lbC9zZXR1cC5jOjI1MTpcdGlmIChtYWNoaW5lX2lzX3ZtKCkpIHtcbmFyY2gvczM5MC9rZXJuZWwvc2V0dXAuYy0yNTItXHRcdGNwY21kKFwmIzM0O1FVRVJZIENPTlNPTEVcJiMzNDssIHF1ZXJ5X2J1ZmZlciwgMTAyNCwgTlVMTCk7XG4tLVxuYXJjaC9zMzkwL2tlcm5lbC9zZXR1cC5jPTU5OD1zdGF0aWMgdm9pZCBfX2luaXQgcmVzZXJ2ZV9jcmFzaGtlcm5lbCh2b2lkKVxuLS1cbmFyY2gvczM5MC9rZXJuZWwvc2V0dXAuYy02NTAtXG5hcmNoL3MzOTAva2VybmVsL3NldHVwLmM6NjUxOlx0aWYgKCFvbGRtZW1fZGF0YS5zdGFydCBcdTAwMjZcdTAwMjYgbWFjaGluZV9pc192bSgpKVxuYXJjaC9zMzkwL2tlcm5lbC9zZXR1cC5jLTY1Mi1cdFx0ZGlhZzEwX3JhbmdlKFBGTl9ET1dOKGNyYXNoX2Jhc2UpLCBQRk5fRE9XTihjcmFzaF9zaXplKSk7XG4tLVxuYXJjaC9zMzkwL2tlcm5lbC9zZXR1cC5jPTg5Nz12b2lkIF9faW5pdCBzZXR1cF9hcmNoKGNoYXIgKipjbWRsaW5lX3ApXG4tLVxuYXJjaC9zMzkwL2tlcm5lbC9zZXR1cC5jLTkwMS0gICAgICAgICAqL1xuYXJjaC9zMzkwL2tlcm5lbC9zZXR1cC5jOjkwMjpcdGlmIChtYWNoaW5lX2lzX3ZtKCkpXG5hcmNoL3MzOTAva2VybmVsL3NldHVwLmMtOTAzLVx0XHRwcl9pbmZvKFwmIzM0O0xpbnV4IGlzIHJ1bm5pbmcgYXMgYSB6L1ZNIFwmIzM0O1xuLS1cbmFyY2gvczM5MC9rZXJuZWwvc3lzaW5mby5jPTM3OT1zdGF0aWMgX19pbml0IGludCBjcmVhdGVfcHJvY19zZXJ2aWNlX2xldmVsKHZvaWQpXG4tLVxuYXJjaC9zMzkwL2tlcm5lbC9zeXNpbmZvLmMtMzgxLVx0cHJvY19jcmVhdGVfc2VxKFwmIzM0O3NlcnZpY2VfbGV2ZWxzXCYjMzQ7LCAwLCBOVUxMLCBcdTAwMjZzZXJ2aWNlX2xldmVsX3NlcV9vcHMpO1xuYXJjaC9zMzkwL2tlcm5lbC9zeXNpbmZvLmM6MzgyOlx0aWYgKG1hY2hpbmVfaXNfdm0oKSlcbmFyY2gvczM5MC9rZXJuZWwvc3lzaW5mby5jLTM4My1cdFx0cmVnaXN0ZXJfc2VydmljZV9sZXZlbChcdTAwMjZzZXJ2aWNlX2xldmVsX3ZtKTtcbi0tXG5hcmNoL3MzOTAvbW0vZXh0bWVtLmM9MjUzPXNlZ21lbnRfdHlwZSAoY2hhciogbmFtZSlcbi0tXG5hcmNoL3MzOTAvbW0vZXh0bWVtLmMtMjU3LVxuYXJjaC9zMzkwL21tL2V4dG1lbS5jOjI1ODpcdGlmICghbWFjaGluZV9pc192bSgpKVxuYXJjaC9zMzkwL21tL2V4dG1lbS5jLTI1OS1cdFx0cmV0dXJuIC1FTk9TWVM7XG4tLVxuYXJjaC9zMzkwL21tL2V4dG1lbS5jPTQxNT1zZWdtZW50X2xvYWQgKGNoYXIgKm5hbWUsIGludCBkb19ub25zaGFyZWQsIHVuc2lnbmVkIGxvbmcgKmFkZHIsXG4tLVxuYXJjaC9zMzkwL21tL2V4dG1lbS5jLTQyMC1cbmFyY2gvczM5MC9tbS9leHRtZW0uYzo0MjE6XHRpZiAoIW1hY2hpbmVfaXNfdm0oKSlcbmFyY2gvczM5MC9tbS9leHRtZW0uYy00MjItXHRcdHJldHVybiAtRU5PU1lTO1xuLS1cbmFyY2gvczM5MC9tbS9leHRtZW0uYz01NDY9c2VnbWVudF91bmxvYWQoY2hhciAqbmFtZSlcbi0tXG5hcmNoL3MzOTAvbW0vZXh0bWVtLmMtNTQ5LVxuYXJjaC9zMzkwL21tL2V4dG1lbS5jOjU1MDpcdGlmICghbWFjaGluZV9pc192bSgpKVxuYXJjaC9zMzkwL21tL2V4dG1lbS5jLTU1MS1cdFx0cmV0dXJuO1xuLS1cbmFyY2gvczM5MC9tbS9leHRtZW0uYz01ODI9c2VnbWVudF9zYXZlKGNoYXIgKm5hbWUpXG4tLVxuYXJjaC9zMzkwL21tL2V4dG1lbS5jLTU4OC1cbmFyY2gvczM5MC9tbS9leHRtZW0uYzo1ODk6XHRpZiAoIW1hY2hpbmVfaXNfdm0oKSlcbmFyY2gvczM5MC9tbS9leHRtZW0uYy01OTAtXHRcdHJldHVybjtcbi0tXG5kcml2ZXJzL3MzOTAvYmxvY2svZGFzZC5jPTMzNTE9aW50IGRhc2RfZGV2aWNlX2lzX3JvKHN0cnVjdCBkYXNkX2RldmljZSAqZGV2aWNlKVxuLS1cbmRyaXZlcnMvczM5MC9ibG9jay9kYXNkLmMtMzM1Ni1cbmRyaXZlcnMvczM5MC9ibG9jay9kYXNkLmM6MzM1NzpcdGlmICghbWFjaGluZV9pc192bSgpKVxuZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2QuYy0zMzU4LVx0XHRyZXR1cm4gMDtcbi0tXG5kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9kZXZtYXAuYz0yMjQ9c3RhdGljIGludCBfX2luaXQgZGFzZF9wYXJzZV9rZXl3b3JkKGNoYXIgKmtleXdvcmQpXG4tLVxuZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfZGV2bWFwLmMtMjM4LVx0aWYgKHN0cm5jbXAoXCYjMzQ7bm9wYXZcJiMzNDssIGtleXdvcmQsIGxlbmd0aCkgPT0gMCkge1xuZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfZGV2bWFwLmM6MjM5Olx0XHRpZiAobWFjaGluZV9pc192bSgpKVxuZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfZGV2bWFwLmMtMjQwLVx0XHRcdHByX2luZm8oXCYjMzQ7JiMzOTtub3BhdiYjMzk7IGlzIG5vdCBzdXBwb3J0ZWQgb24gei9WTVxcblwmIzM0Oyk7XG4tLVxuZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfZGlhZy5jPTY1Nj1kYXNkX2RpYWdfaW5pdCh2b2lkKVxuZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfZGlhZy5jLTY1Ny17XG5kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9kaWFnLmM6NjU4Olx0aWYgKCFtYWNoaW5lX2lzX3ZtKCkpIHtcbmRyaXZlcnMvczM5MC9ibG9jay9kYXNkX2RpYWcuYy02NTktXHRcdHByX2luZm8oXCYjMzQ7RGlzY2lwbGluZSAlcyBjYW5ub3QgYmUgdXNlZCB3aXRob3V0IHovVk1cXG5cJiMzNDssXG4tLVxuZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfZWNrZC5jPTE5NDg9c3RhdGljIGludCBkYXNkX2Vja2RfdmFsaWRhdGVfc2VydmVyKHN0cnVjdCBkYXNkX2RldmljZSAqZGV2aWNlLFxuLS1cbmRyaXZlcnMvczM5MC9ibG9jay9kYXNkX2Vja2QuYy0xOTU2LVx0XHRyZXR1cm4gMDtcbmRyaXZlcnMvczM5MC9ibG9jay9kYXNkX2Vja2QuYzoxOTU3Olx0aWYgKGRhc2Rfbm9wYXYgfHwgbWFjaGluZV9pc192bSgpKVxuZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfZWNrZC5jLTE5NTgtXHRcdGVuYWJsZV9wYXYgPSAwO1xuLS1cbmRyaXZlcnMvczM5MC9jaGFyL2NvbjMyMTUuYz04OTk9c3RhdGljIGludCBfX2luaXQgY29uMzIxNV9pbml0KHZvaWQpXG4tLVxuZHJpdmVycy9zMzkwL2NoYXIvY29uMzIxNS5jLTkxMC1cdC8qIFNldCB0aGUgY29uc29sZSBtb2RlIGZvciBWTSAqL1xuZHJpdmVycy9zMzkwL2NoYXIvY29uMzIxNS5jOjkxMTpcdGlmIChtYWNoaW5lX2lzX3ZtKCkpIHtcbmRyaXZlcnMvczM5MC9jaGFyL2NvbjMyMTUuYy05MTItXHRcdGNwY21kKFwmIzM0O1RFUk0gQ09OTU9ERSAzMjE1XCYjMzQ7LCBOVUxMLCAwLCBOVUxMKTtcbi0tXG5kcml2ZXJzL3MzOTAvY2hhci9jb24zMjcwLmM9MjEzND1jb24zMjcwX2luaXQodm9pZClcbi0tXG5kcml2ZXJzL3MzOTAvY2hhci9jb24zMjcwLmMtMjE0NS1cdC8qIFNldCB0aGUgY29uc29sZSBtb2RlIGZvciBWTSAqL1xuZHJpdmVycy9zMzkwL2NoYXIvY29uMzI3MC5jOjIxNDY6XHRpZiAobWFjaGluZV9pc192bSgpKSB7XG5kcml2ZXJzL3MzOTAvY2hhci9jb24zMjcwLmMtMjE0Ny1cdFx0Y3BjbWQoXCYjMzQ7VEVSTSBDT05NT0RFIDMyNzBcJiMzNDssIE5VTEwsIDAsIE5VTEwpO1xuLS1cbmRyaXZlcnMvczM5MC9jaGFyL2htY2Rydl9mdHAuYz0yOTM9aW50IGhtY2Rydl9mdHBfc3RhcnR1cCh2b2lkKVxuLS1cbmRyaXZlcnMvczM5MC9jaGFyL2htY2Rydl9mdHAuYy0zMTEtXHRpZiAoaG1jZHJ2X2Z0cF9yZWZjbnQgPT0gMCkge1xuZHJpdmVycy9zMzkwL2NoYXIvaG1jZHJ2X2Z0cC5jOjMxMjpcdFx0aWYgKG1hY2hpbmVfaXNfdm0oKSlcbmRyaXZlcnMvczM5MC9jaGFyL2htY2Rydl9mdHAuYy0zMTMtXHRcdFx0aG1jZHJ2X2Z0cF9mdW5jcyA9IFx1MDAyNmhtY2Rydl9mdHBfenZtO1xuLS1cbmRyaXZlcnMvczM5MC9jaGFyL21vbnJlYWRlci5jPTQ1ND1zdGF0aWMgaW50IF9faW5pdCBtb25faW5pdCh2b2lkKVxuLS1cbmRyaXZlcnMvczM5MC9jaGFyL21vbnJlYWRlci5jLTQ1Ny1cbmRyaXZlcnMvczM5MC9jaGFyL21vbnJlYWRlci5jOjQ1ODpcdGlmICghbWFjaGluZV9pc192bSgpKSB7XG5kcml2ZXJzL3MzOTAvY2hhci9tb25yZWFkZXIuYy00NTktXHRcdHByX2VycihcJiMzNDtUaGUgei9WTSAqTU9OSVRPUiByZWNvcmQgZGV2aWNlIGRyaXZlciBjYW5ub3QgYmUgXCYjMzQ7XG4tLVxuZHJpdmVycy9zMzkwL2NoYXIvbW9ud3JpdGVyLmM9Mjk3PXN0YXRpYyBpbnQgX19pbml0IG1vbl9pbml0KHZvaWQpXG5kcml2ZXJzL3MzOTAvY2hhci9tb253cml0ZXIuYy0yOTgte1xuZHJpdmVycy9zMzkwL2NoYXIvbW9ud3JpdGVyLmM6Mjk5Olx0aWYgKCFtYWNoaW5lX2lzX3ZtKCkpXG5kcml2ZXJzL3MzOTAvY2hhci9tb253cml0ZXIuYy0zMDAtXHRcdHJldHVybiAtRU5PREVWO1xuLS1cbmRyaXZlcnMvczM5MC9jaGFyL3JhdzMyNzAuYz02MTQ9c3RhdGljIHZvaWQgcmF3MzI3MF9yZXNldF9kZXZpY2VfY2Ioc3RydWN0IHJhdzMyNzBfcmVxdWVzdCAqcnEsIHZvaWQgKmRhdGEpXG4tLVxuZHJpdmVycy9zMzkwL2NoYXIvcmF3MzI3MC5jLTYyMi1cdFx0cnAtXHUwMDNlc3RhdGUgPSBSQVczMjcwX1NUQVRFX0lOSVQ7XG5kcml2ZXJzL3MzOTAvY2hhci9yYXczMjcwLmM6NjIzOlx0fSBlbHNlIGlmIChtYWNoaW5lX2lzX3ZtKCkpIHtcbmRyaXZlcnMvczM5MC9jaGFyL3JhdzMyNzAuYy02MjQtXHRcdHJhdzMyNzBfc2l6ZV9kZXZpY2Vfdm0ocnApO1xuLS1cbmRyaXZlcnMvczM5MC9jaGFyL3NjbHAuaD0zNDQ9c2NscF9hc2NlYmModW5zaWduZWQgY2hhciBjaClcbmRyaXZlcnMvczM5MC9jaGFyL3NjbHAuaC0zNDUte1xuZHJpdmVycy9zMzkwL2NoYXIvc2NscC5oOjM0NjpcdHJldHVybiAobWFjaGluZV9pc192bSgpKSA/IF9hc2NlYmNbY2hdIDogX2FzY2ViY181MDBbY2hdO1xuZHJpdmVycy9zMzkwL2NoYXIvc2NscC5oLTM0Ny19XG4tLVxuZHJpdmVycy9zMzkwL2NoYXIvc2NscC5oPTM1MT1zY2xwX2ViY2FzY19zdHIoY2hhciAqc3RyLCBpbnQgbnIpXG5kcml2ZXJzL3MzOTAvY2hhci9zY2xwLmgtMzUyLXtcbmRyaXZlcnMvczM5MC9jaGFyL3NjbHAuaDozNTM6XHQobWFjaGluZV9pc192bSgpKSA/IEVCQ0FTQyhzdHIsIG5yKSA6IEVCQ0FTQ181MDAoc3RyLCBucik7XG5kcml2ZXJzL3MzOTAvY2hhci9zY2xwLmgtMzU0LX1cbi0tXG5kcml2ZXJzL3MzOTAvY2hhci9zY2xwLmg9MzU4PXNjbHBfYXNjZWJjX3N0cihjaGFyICpzdHIsIGludCBucilcbmRyaXZlcnMvczM5MC9jaGFyL3NjbHAuaC0zNTkte1xuZHJpdmVycy9zMzkwL2NoYXIvc2NscC5oOjM2MDpcdChtYWNoaW5lX2lzX3ZtKCkpID8gQVNDRUJDKHN0ciwgbnIpIDogQVNDRUJDXzUwMChzdHIsIG5yKTtcbmRyaXZlcnMvczM5MC9jaGFyL3NjbHAuaC0zNjEtfVxuLS1cbmRyaXZlcnMvczM5MC9jaGFyL3NjbHBfZWFybHkuYz0yNj1zdGF0aWMgdm9pZCBfX2luaXQgc2NscF9lYXJseV9mYWNpbGl0aWVzX2RldGVjdCh2b2lkKVxuLS1cbmRyaXZlcnMvczM5MC9jaGFyL3NjbHBfZWFybHkuYy03OC1cdGlmICghc2NjYi1cdTAwM2VoY3B1YSkge1xuZHJpdmVycy9zMzkwL2NoYXIvc2NscF9lYXJseS5jOjc5Olx0XHRpZiAobWFjaGluZV9pc192bSgpKVxuZHJpdmVycy9zMzkwL2NoYXIvc2NscF9lYXJseS5jLTgwLVx0XHRcdHNjbHAubWF4X2NvcmVzID0gNjQ7XG4tLVxuZHJpdmVycy9zMzkwL2NoYXIvc2NscF90dHkuYz01MDU9c2NscF90dHlfaW5pdCh2b2lkKVxuLS1cbmRyaXZlcnMvczM5MC9jaGFyL3NjbHBfdHR5LmMtNTEyLVx0Lyogei9WTSBtdWx0aXBsZXhlcyB0aGUgbGluZSBtb2RlIG91dHB1dCBvbiB0aGUgMzJ4eCBzY3JlZW4gKi9cbmRyaXZlcnMvczM5MC9jaGFyL3NjbHBfdHR5LmM6NTEzOlx0aWYgKG1hY2hpbmVfaXNfdm0oKSBcdTAwMjZcdTAwMjYgIUNPTlNPTEVfSVNfU0NMUClcbmRyaXZlcnMvczM5MC9jaGFyL3NjbHBfdHR5LmMtNTE0LVx0XHRyZXR1cm4gMDtcbi0tXG5kcml2ZXJzL3MzOTAvY2hhci9zY2xwX3R0eS5jLTUzOC1cdHNjbHBfdHR5X2J1ZmZlcl9jb3VudCA9IDA7XG5kcml2ZXJzL3MzOTAvY2hhci9zY2xwX3R0eS5jOjUzOTpcdGlmIChtYWNoaW5lX2lzX3ZtKCkpIHtcbmRyaXZlcnMvczM5MC9jaGFyL3NjbHBfdHR5LmMtNTQwLVx0XHQvKiBjYXNlIGlucHV0IGxpbmVzIHRvIGxvd2VyY2FzZSAqL1xuLS1cbmRyaXZlcnMvczM5MC9jaGFyL3ZtY3AuYz01Mj12b2lkIF9faW5pdCB2bWNwX2NtYV9yZXNlcnZlKHZvaWQpXG5kcml2ZXJzL3MzOTAvY2hhci92bWNwLmMtNTMte1xuZHJpdmVycy9zMzkwL2NoYXIvdm1jcC5jOjU0Olx0aWYgKCFtYWNoaW5lX2lzX3ZtKCkpXG5kcml2ZXJzL3MzOTAvY2hhci92bWNwLmMtNTUtXHRcdHJldHVybjtcbi0tXG5kcml2ZXJzL3MzOTAvY2hhci92bWNwLmM9MjQ4PXN0YXRpYyBpbnQgX19pbml0IHZtY3BfaW5pdCh2b2lkKVxuLS1cbmRyaXZlcnMvczM5MC9jaGFyL3ZtY3AuYy0yNTEtXG5kcml2ZXJzL3MzOTAvY2hhci92bWNwLmM6MjUyOlx0aWYgKCFtYWNoaW5lX2lzX3ZtKCkpXG5kcml2ZXJzL3MzOTAvY2hhci92bWNwLmMtMjUzLVx0XHRyZXR1cm4gMDtcbi0tXG5kcml2ZXJzL3MzOTAvY2hhci92bWxvZ3Jkci5jPTgwNj1zdGF0aWMgaW50IF9faW5pdCB2bWxvZ3Jkcl9pbml0KHZvaWQpXG4tLVxuZHJpdmVycy9zMzkwL2NoYXIvdm1sb2dyZHIuYy04MTEtXG5kcml2ZXJzL3MzOTAvY2hhci92bWxvZ3Jkci5jOjgxMjpcdGlmICghbWFjaGluZV9pc192bSgpKSB7XG5kcml2ZXJzL3MzOTAvY2hhci92bWxvZ3Jkci5jLTgxMy1cdFx0cHJfZXJyKFwmIzM0O25vdCBydW5uaW5nIHVuZGVyIFZNLCBkcml2ZXIgbm90IGxvYWRlZC5cXG5cJiMzNDspO1xuLS1cbmRyaXZlcnMvczM5MC9jaGFyL3ZtdXIuYz0xMDA2PXN0YXRpYyBpbnQgX19pbml0IHVyX2luaXQodm9pZClcbi0tXG5kcml2ZXJzL3MzOTAvY2hhci92bXVyLmMtMTAxMC1cbmRyaXZlcnMvczM5MC9jaGFyL3ZtdXIuYzoxMDExOlx0aWYgKCFtYWNoaW5lX2lzX3ZtKCkpIHtcbmRyaXZlcnMvczM5MC9jaGFyL3ZtdXIuYy0xMDEyLVx0XHRwcl9lcnIoXCYjMzQ7VGhlICVzIGNhbm5vdCBiZSBsb2FkZWQgd2l0aG91dCB6L1ZNXFxuXCYjMzQ7LFxuLS1cbmRyaXZlcnMvczM5MC9jaW8vZGV2aWNlX2lkLmM9MTczPXN0YXRpYyB2b2lkIHNuc2lkX2NhbGxiYWNrKHN0cnVjdCBjY3dfZGV2aWNlICpjZGV2LCB2b2lkICpkYXRhLCBpbnQgcmMpXG4tLVxuZHJpdmVycy9zMzkwL2Npby9kZXZpY2VfaWQuYy0xNzgtXG5kcml2ZXJzL3MzOTAvY2lvL2RldmljZV9pZC5jOjE3OTpcdGlmIChyYyBcdTAwMjZcdTAwMjYgbWFjaGluZV9pc192bSgpKSB7XG5kcml2ZXJzL3MzOTAvY2lvL2RldmljZV9pZC5jLTE4MC1cdFx0LyogVHJ5IGRpYWcgMHgyMTAgZmFsbGJhY2sgb24gei9WTS4gKi9cbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL2FwX2J1cy5jPTI0OTQ9c3RhdGljIGlubGluZSBpbnQgX19pbml0IGFwX2FzeW5jX2luaXQodm9pZClcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL2FwX2J1cy5jLTI1MDQtXHQgKi9cbmRyaXZlcnMvczM5MC9jcnlwdG8vYXBfYnVzLmM6MjUwNTpcdGlmIChtYWNoaW5lX2lzX3ZtKCkpXG5kcml2ZXJzL3MzOTAvY3J5cHRvL2FwX2J1cy5jLTI1MDYtXHRcdHBvbGxfaGlnaF90aW1lb3V0ID0gMTUwMDAwMDtcbi0tXG5kcml2ZXJzL3MzOTAvbmV0L3FldGhfbDJfbWFpbi5jPTI5Nz1zdGF0aWMgaW50IHFldGhfbDJfcmVxdWVzdF9pbml0aWFsX21hYyhzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkKVxuLS1cbmRyaXZlcnMvczM5MC9uZXQvcWV0aF9sMl9tYWluLmMtMzAyLVxuZHJpdmVycy9zMzkwL25ldC9xZXRoX2wyX21haW4uYzozMDM6XHRpZiAobWFjaGluZV9pc192bSgpKSB7XG5kcml2ZXJzL3MzOTAvbmV0L3FldGhfbDJfbWFpbi5jLTMwNC1cdFx0cmMgPSBxZXRoX3ZtX3JlcXVlc3RfbWFjKGNhcmQpO1xuLS1cbmRyaXZlcnMvczM5MC9uZXQvc21zZ2l1Y3YuYz0xMzk9c3RhdGljIGludCBfX2luaXQgc21zZ19pbml0KHZvaWQpXG4tLVxuZHJpdmVycy9zMzkwL25ldC9zbXNnaXVjdi5jLTE0Mi1cbmRyaXZlcnMvczM5MC9uZXQvc21zZ2l1Y3YuYzoxNDM6XHRpZiAoIW1hY2hpbmVfaXNfdm0oKSkge1xuZHJpdmVycy9zMzkwL25ldC9zbXNnaXVjdi5jLTE0NC1cdFx0cmMgPSAtRVBST1RPTk9TVVBQT1JUO1xuLS1cbmRyaXZlcnMvczM5MC9uZXQvc21zZ2l1Y3ZfYXBwLmM9MTUyPXN0YXRpYyBpbnQgX19pbml0IHNtc2dpdWN2X2FwcF9pbml0KHZvaWQpXG4tLVxuZHJpdmVycy9zMzkwL25ldC9zbXNnaXVjdl9hcHAuYy0xNTYtXG5kcml2ZXJzL3MzOTAvbmV0L3Ntc2dpdWN2X2FwcC5jOjE1NzpcdGlmICghbWFjaGluZV9pc192bSgpKVxuZHJpdmVycy9zMzkwL25ldC9zbXNnaXVjdl9hcHAuYy0xNTgtXHRcdHJldHVybiAtRU5PREVWO1xuLS1cbmRyaXZlcnMvdHR5L2h2Yy9odmNfaXVjdi5jPTEyMzk9c3RhdGljIGludCBwYXJhbV9zZXRfdm1pZGZpbHRlcihjb25zdCBjaGFyICp2YWwsIGNvbnN0IHN0cnVjdCBrZXJuZWxfcGFyYW0gKmtwKVxuLS1cbmRyaXZlcnMvdHR5L2h2Yy9odmNfaXVjdi5jLTEyNDItXG5kcml2ZXJzL3R0eS9odmMvaHZjX2l1Y3YuYzoxMjQzOlx0aWYgKCFtYWNoaW5lX2lzX3ZtKCkgfHwgIWh2Y19pdWN2X2RldmljZXMpXG5kcml2ZXJzL3R0eS9odmMvaHZjX2l1Y3YuYy0xMjQ0LVx0XHRyZXR1cm4gLUVOT0RFVjtcbi0tXG5kcml2ZXJzL3R0eS9odmMvaHZjX2l1Y3YuYz0xMjY2PXN0YXRpYyBpbnQgcGFyYW1fZ2V0X3ZtaWRmaWx0ZXIoY2hhciAqYnVmZmVyLCBjb25zdCBzdHJ1Y3Qga2VybmVsX3BhcmFtICprcClcbi0tXG5kcml2ZXJzL3R0eS9odmMvaHZjX2l1Y3YuYy0xMjcxLVxuZHJpdmVycy90dHkvaHZjL2h2Y19pdWN2LmM6MTI3MjpcdGlmICghbWFjaGluZV9pc192bSgpIHx8ICFodmNfaXVjdl9kZXZpY2VzKVxuZHJpdmVycy90dHkvaHZjL2h2Y19pdWN2LmMtMTI3My1cdFx0cmV0dXJuIC1FTk9ERVY7XG4tLVxuZHJpdmVycy90dHkvaHZjL2h2Y19pdWN2LmM9MTMwMT1zdGF0aWMgaW50IF9faW5pdCBodmNfaXVjdl9pbml0KHZvaWQpXG4tLVxuZHJpdmVycy90dHkvaHZjL2h2Y19pdWN2LmMtMTMwOC1cbmRyaXZlcnMvdHR5L2h2Yy9odmNfaXVjdi5jOjEzMDk6XHRpZiAoIW1hY2hpbmVfaXNfdm0oKSkge1xuZHJpdmVycy90dHkvaHZjL2h2Y19pdWN2LmMtMTMxMC1cdFx0cHJfbm90aWNlKFwmIzM0O1RoZSB6L1ZNIElVQ1YgSFZDIGRldmljZSBkcml2ZXIgY2Fubm90IFwmIzM0O1xuLS1cbmRyaXZlcnMvd2F0Y2hkb2cvZGlhZzI4OF93ZHQuYz04MT1zdGF0aWMgaW50IHdkdF9zdGFydChzdHJ1Y3Qgd2F0Y2hkb2dfZGV2aWNlICpkZXYpXG4tLVxuZHJpdmVycy93YXRjaGRvZy9kaWFnMjg4X3dkdC5jLTg1LVxuZHJpdmVycy93YXRjaGRvZy9kaWFnMjg4X3dkdC5jOjg2Olx0aWYgKG1hY2hpbmVfaXNfdm0oKSkge1xuZHJpdmVycy93YXRjaGRvZy9kaWFnMjg4X3dkdC5jLTg3LVx0XHRmdW5jID0gY29uY2VhbF9vbiA/IChXRFRfRlVOQ19JTklUIHwgV0RUX0ZVTkNfQ09OQ0VBTClcbi0tXG5kcml2ZXJzL3dhdGNoZG9nL2RpYWcyODhfd2R0LmM9MTA3PXN0YXRpYyBpbnQgd2R0X3Bpbmcoc3RydWN0IHdhdGNoZG9nX2RldmljZSAqZGV2KVxuLS1cbmRyaXZlcnMvd2F0Y2hkb2cvZGlhZzI4OF93ZHQuYy0xMTEtXG5kcml2ZXJzL3dhdGNoZG9nL2RpYWcyODhfd2R0LmM6MTEyOlx0aWYgKG1hY2hpbmVfaXNfdm0oKSkge1xuZHJpdmVycy93YXRjaGRvZy9kaWFnMjg4X3dkdC5jLTExMy1cdFx0Lypcbi0tXG5kcml2ZXJzL3dhdGNoZG9nL2RpYWcyODhfd2R0LmM9MTYyPXN0YXRpYyBpbnQgX19pbml0IGRpYWcyODhfaW5pdCh2b2lkKVxuLS1cbmRyaXZlcnMvd2F0Y2hkb2cvZGlhZzI4OF93ZHQuYy0xNjUtXG5kcml2ZXJzL3dhdGNoZG9nL2RpYWcyODhfd2R0LmM6MTY2Olx0aWYgKG1hY2hpbmVfaXNfdm0oKSkge1xuZHJpdmVycy93YXRjaGRvZy9kaWFnMjg4X3dkdC5jLTE2Ny1cdFx0Y21kX2J1ZiA9IGttYWxsb2MoTUFYX0NNRExFTiwgR0ZQX0tFUk5FTCk7XG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jPTIzMDc9c3RhdGljIGludCBfX2luaXQgYWZpdWN2X2luaXQodm9pZClcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmMtMjMxMC1cbm5ldC9pdWN2L2FmX2l1Y3YuYzoyMzExOlx0aWYgKG1hY2hpbmVfaXNfdm0oKSBcdTAwMjZcdTAwMjYgSVNfRU5BQkxFRChDT05GSUdfSVVDVikpIHtcbm5ldC9pdWN2L2FmX2l1Y3YuYy0yMzEyLVx0XHRjcGNtZChcJiMzNDtRVUVSWSBVU0VSSURcJiMzNDssIGl1Y3ZfdXNlcmlkLCBzaXplb2YoaXVjdl91c2VyaWQpLCBcdTAwMjZlcnIpO1xuLS1cbm5ldC9pdWN2L2l1Y3YuYz0xODYyPXN0YXRpYyBpbnQgX19pbml0IGl1Y3ZfaW5pdCh2b2lkKVxuLS1cbm5ldC9pdWN2L2l1Y3YuYy0xODY1LVxubmV0L2l1Y3YvaXVjdi5jOjE4NjY6XHRpZiAoIW1hY2hpbmVfaXNfdm0oKSkge1xubmV0L2l1Y3YvaXVjdi5jLTE4NjctXHRcdHJjID0gLUVQUk9UT05PU1VQUE9SVDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTUgMTU6NTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjgzNjgKCQkJCQkJCW91dHB1dDogNDEKCQkJCQkJCXRob3VnaHRzOiAyMzAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIElVQ1YgSW5pdGlhbGl6YXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGBhZml1Y3ZfaW5pdGAgYW5kIGltbWVkaWF0ZWx5IHNlZWluZyBhIGNvbmRpdGlvbmFsIGJsb2NrIGRlYWxpbmcgd2l0aCB6L1ZNIGFuZCBJVUNWLiBJdCYjMzk7cyB1c2luZyBgbWFjaGluZV9pc192bSgpYCBhbmQgY2hlY2tpbmcgZm9yIGBDT05GSUdfSVVDVmAuIFNlZW1zIHN0cmFpZ2h0Zm9yd2FyZDogaWYgd2UmIzM5O3JlIG9uIGEgei9WTSBtYWNoaW5lIGFuZCBJVUNWIGlzIGVuYWJsZWQsIGl0IGdyYWJzIHRoZSB1c2VyIElEIHdpdGggYSBgY3BjbWRgIGNhbGwuIFRoZW4gaXQgYXNzaWducyBgcHJfaXVjdmAgdG8gcG9pbnQgdG8gYCZhbXA7aXVjdl9pZmAuIEhvd2V2ZXIsIGlmIHdlJiMzOTtyZSAqbm90KiBpbiBhIHovVk0gZW52aXJvbm1lbnQsIHdoaWNoLCB0aGlua2luZyBhYm91dCBpdCwgaXMgdGhlIGNhc2Ugd2l0aCBRRU1VICh1bmxlc3MgUUVNVSBpcyBiZWluZyB1c2VkIHRvIGVtdWxhdGUgei9WTSAtIGJ1dCBpdCYjMzk7cyBlbXVsYXRpbmcgTFBBUiBvciBLVk0pLCBgcHJfaXVjdmAgZ2V0cyBzZXQgdG8gTlVMTCwgYW5kIHRoZSBgaXVjdl91c2VyaWRgIGlzIGNsZWFyZWQuCgpOb3csIHRoZSBpbXBvcnRhbnQgY29ubmVjdGlvbiBoZXJlIGlzIHRoZSBpbXBsaWNhdGlvbiB0aGlzIGNhcnJpZXMgdGhyb3VnaCB0aGUgY29kZS4gSWYgYHByX2l1Y3ZgIGlzIE5VTEwsIGFzIGl0IHdpbGwgYmUgaW4gdGhlIFFFTVUgY2FzZSBJJiMzOTttIHRlc3RpbmcsIGBpdWN2LSZndDt0cmFuc3BvcnRgIGlzICoqYWx3YXlzKiogc2V0IHRvIGBBRl9JVUNWX1RSQU5TX0hJUEVSYC4gSSBuZWVkIHRvIHJldmlzaXQgYGl1Y3Zfc29ja19hbGxvY2AgdG8gY29uZmlybSBteSB1bmRlcnN0YW5kaW5nIG9mIHRoaXMgaW1wbGljYXRpb24uIExldCBtZSBqdXN0IGRvdWJsZS1jaGVjayB0aGF0IHBhcnQuLi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTUgMTU6NTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvaXVjdi9hZl9pdWN2LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA0OTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDQ5MDpcdFx0aXVjdi1cdTAwM2VwYXRoID0gTlVMTDtcbiA0OTE6XHRcdGl1Y3YtXHUwMDNlc2tfdHhub3RpZnkgPSBhZml1Y3ZfaHNfY2FsbGJhY2tfdHhub3RpZnk7XG4gNDkyOlx0XHRtZW1zZXQoXHUwMDI2aXVjdi1cdTAwM2Vpbml0LCAwLCBzaXplb2YoaXVjdi1cdTAwM2Vpbml0KSk7XG4gNDkzOlx0XHRpZiAocHJfaXVjdilcbiA0OTQ6XHRcdFx0aXVjdi1cdTAwM2V0cmFuc3BvcnQgPSBBRl9JVUNWX1RSQU5TX0lVQ1Y7XG4gNDk1Olx0XHRlbHNlXG4gNDk2Olx0XHRcdGl1Y3YtXHUwMDNldHJhbnNwb3J0ID0gQUZfSVVDVl9UUkFOU19ISVBFUjtcbiA0OTc6XHRcbiA0OTg6XHRcdHNrLVx1MDAzZXNrX2Rlc3RydWN0ID0gaXVjdl9zb2NrX2Rlc3RydWN0O1xuIDQ5OTpcdFx0c2stXHUwMDNlc2tfc25kdGltZW8gPSBJVUNWX0NPTk5fVElNRU9VVDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTUgMTU6NTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjkxNDAKCQkJCQkJCW91dHB1dDogNDEKCQkJCQkJCXRob3VnaHRzOiAyNjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhpcyBJVUNWIENvZGUqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIHRyYWNpbmcgdGhlIGxvZ2ljLiBJZiBgcHJfaXVjdmAgaXMgTlVMTCwgdGhlbiB0aGUgdHJhbnNwb3J0IHR5cGUgZm9yIHRoZSBgaXVjdmAgc3RydWN0dXJlIGlzIGRlZmluaXRlbHkgZ29pbmcgdG8gYmUgYEFGX0lVQ1ZfVFJBTlNfSElQRVJgLCB0aGF0JiMzOTtzIGEgZ2l2ZW4uIFRoZSBwYXRjaCBjb2RlIGl0c2VsZiwgd2l0aCB0aGF0IGBpZiAoZXJyICZhbXA7JmFtcDsgaXVjdi0mZ3Q7dHJhbnNwb3J0ID09IEFGX0lVQ1ZfVFJBTlNfSVVDVilgIGJsb2NrLCAqb25seSogZ2V0cyBleGVjdXRlZCB3aGVuIHRoZSB0cmFuc3BvcnQgaXMgc2V0IHRvIGBBRl9JVUNWX1RSQU5TX0lVQ1ZgLiBBbmQgdGhhdCBzcGVjaWZpYyB0cmFuc3BvcnQgdmFsdWUgaXMgKmV4Y2x1c2l2ZWx5KiBzZXQgd2hlbiBgcHJfaXVjdmAgaXMgbm9uLU5VTEwuIFRoZSBraWNrZXIgaGVyZSBpcyBgcHJfaXVjdmAgaXMgKm9ubHkqIG5vbi1OVUxMIHdoZW4gYG1hY2hpbmVfaXNfdm0oKWAgcmV0dXJucyB0cnVlLiBTbyB0aGF0IGdpdmVzIG1lIG15IGtleSBxdWVzdGlvbjogY2FuIHdlIHJlYWNoIGEgc2l0dWF0aW9uIGluIFFFTVUgd2hlcmUgYG1hY2hpbmVfaXNfdm0oKWAgd291bGQgYWN0dWFsbHkgYmUgdHJ1ZT8gSSBuZWVkIHRvIGRpZyBpbnRvIGhvdyB0aGF0IGZ1bmN0aW9uIGlzIGRlZmluZWQgYW5kIGZpZ3VyZSB0aGF0IG91dC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTUgMTU6NTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7I2RlZmluZSBtYWNoaW5lX2lzX3ZtJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC9zMzkwL2luY2x1ZGUvYXNtL21hY2hpbmUuaCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3MzOTAvaW5jbHVkZS9hc20vbWFjaGluZS5oPTk3PURFRklORV9NQUNISU5FX0hBU19GRUFUVVJFKGxwYXIsIE1GRUFUVVJFX0xQQVIpXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vbWFjaGluZS5oLTk4LVxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL21hY2hpbmUuaDo5OTojZGVmaW5lIG1hY2hpbmVfaXNfdm1cdG1hY2hpbmVfaGFzX3ZtXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vbWFjaGluZS5oLTEwMC0jZGVmaW5lIG1hY2hpbmVfaXNfa3ZtXHRtYWNoaW5lX2hhc19rdm1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTUgMTU6NTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjk4MDMKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAxMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipDaGVja2luZyB0aGUgVmlydHVhbCBNYWNoaW5lIFN0YXRlKioKClJpZ2h0LCBsZXQmIzM5O3MganVzdCBtYWtlIHN1cmUgd2UmIzM5O3JlIG9uIHRoZSBzYW1lIHBhZ2UuIEJlZm9yZSB3ZSBldmVuIGNvbnNpZGVyIGFueXRoaW5nIGVsc2UsIGl0JiMzOTtzIGFic29sdXRlbHkgY3J1Y2lhbCB0aGF0IHdlIHZlcmlmeSB0aGUgc3RhdGUgb2YgdGhlIHZpcnR1YWwgbWFjaGluZSBlbnZpcm9ubWVudC4gVGhlIGZ1bmN0aW9uIG9yIHZhcmlhYmxlIGBtYWNoaW5lX2hhc192bWAgaXMgdGhlIHNpbmdsZSBwb2ludCBvZiB0cnV0aCBoZXJlLiBXZSBuZWVkIHRvIGFzY2VydGFpbiBpZiB0aGUgdmlydHVhbCBtYWNoaW5lIGlzIGFjdGl2ZWx5IHByZXNlbnQsIHByb3Blcmx5IGNvbmZpZ3VyZWQsIGFuZCBmdW5jdGlvbmluZyBhcyBleHBlY3RlZC4gSXQmIzM5O3MgdGhlIGx5bmNocGluLiBJZiB0aGF0IGJhc2ljIGNvbmRpdGlvbiBpc24mIzM5O3QgbWV0LCB0aGVyZSYjMzk7cyBubyBwb2ludCBpbiBwcm9jZWVkaW5nIGZ1cnRoZXIgZG93biB0aGUgZGlhZ25vc3RpYyBvciBvcGVyYXRpb25hbCBwYXRoLiBXZSYjMzk7cmUgZXNzZW50aWFsbHkgZ3JvdW5kaW5nIG91cnNlbHZlcyBieSBxdWlja2x5IHZhbGlkYXRpbmcgdGhlIHZpcnR1YWwgbWFjaGluZSBlbnZpcm9ubWVudCBmaXJzdC4gRnJvbSB0aGVyZSwgd2UgY2FuIHRoZW4gYmVnaW4gdG8gYXNzZXNzIHRoZSBzdGF0ZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTUgMTU6NTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bWFjaGluZV9oYXNfdm0mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3MzOTAvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvczM5MC9pbmNsdWRlL2FzbS9tYWNoaW5lLmg9OTc9REVGSU5FX01BQ0hJTkVfSEFTX0ZFQVRVUkUobHBhciwgTUZFQVRVUkVfTFBBUilcbmFyY2gvczM5MC9pbmNsdWRlL2FzbS9tYWNoaW5lLmgtOTgtXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vbWFjaGluZS5oOjk5OiNkZWZpbmUgbWFjaGluZV9pc192bVx0bWFjaGluZV9oYXNfdm1cbmFyY2gvczM5MC9pbmNsdWRlL2FzbS9tYWNoaW5lLmgtMTAwLSNkZWZpbmUgbWFjaGluZV9pc19rdm1cdG1hY2hpbmVfaGFzX2t2bVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNSAxNTo1NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMDE0NAoJCQkJCQkJb3V0cHV0OiA0MQoJCQkJCQkJdGhvdWdodHM6IDI5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIHRoZSBWTSBGZWF0dXJlIERlZmluaXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgYG1hY2hpbmVfaGFzX3ZtYCBtYWNyby4uLiBhbmQgaGFuZyBvbiwgaXMgdGhhdCByaWdodD8gSXQgbG9va3MgbGlrZSBgbWFjaGluZV9oYXNfdm1gIGlzICpkZWZpbmVkKiB1c2luZyBgREVGSU5FX01BQ0hJTkVfSEFTX0ZFQVRVUkUodm0sIE1GRUFUVVJFX1ZNKWAuIFRoYXQgZmVlbHMgYSBsaXR0bGXigKYgaW5kaXJlY3QuIEkgbmVlZCB0byB1bnBhY2sgdGhpcy4gSXMgYERFRklORV9NQUNISU5FX0hBU19GRUFUVVJFYCBhIG1hY3JvIGl0c2VsZj8gV2hhdCBhcmd1bWVudHMgaXMgaXQgdGFraW5nLCBhbmQgd2hhdCBhcmUgdGhleSB0cmFuc2xhdGluZyB0byB1bmRlciB0aGUgaG9vZD8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBgdm1gIGFuZCBgTUZFQVRVUkVfVk1gIGlkZW50aWZpZXJzIGFyZSBiZWluZyBjb25uZWN0ZWQgdGhyb3VnaCB0aGlzIG1hY3JvLiBJ4oCZbSBndWVzc2luZyBgTUZFQVRVUkVfVk1gIGlzIGFuIGVudW0gb3IgYSBiaXRmaWVsZCByZXByZXNlbnRhdGlvbiBvZiB0aGUgVk0gY2FwYWJpbGl0eSwgYnV0IEkgbmVlZCB0byBjb25maXJtLiBJdOKAmXMgaW1wb3J0YW50IHRvIHNlZSBpZiB0aGVyZSYjMzk7cyBhbnkgcG90ZW50aWFsIGZvciBzdWJ0bGUgZXJyb3JzIG9yIGltcGxpY2l0IGFzc3VtcHRpb25zIGluIHRoaXMgYXBwcm9hY2gsIHBhcnRpY3VsYXJseSBpZiB0aGlzIGZlYXR1cmUtY2hlY2tpbmcgbWVjaGFuaXNtIGlzIHVzZWQgaGVhdmlseSB0aHJvdWdob3V0IHRoZSBjb2RlYmFzZS4gSSB3b25kZXIgaWYgdGhlcmUgbWlnaHQgYmUgYSBtb3JlIGRpcmVjdCwgcGVyaGFwcyBsZXNzIG1hY3JvLWhlYXZ5IGFwcHJvYWNoIHRoYXQgd291bGQgZW5oYW5jZSByZWFkYWJpbGl0eSBhbmQgcmVkdWNlIHRoZSBjaGFuY2Ugb2Ygb2JzY3VyZSwgbWFjcm8tcmVsYXRlZCBidWdzLiBMZXQmIzM5O3Mgc2VlIGhvdyB0aGlzIHVuZm9sZHPigKYgSSBuZWVkIHRvIHNlZSBleGFjdGx5IHdoYXQgdGhpcyBleHBhbnNpb24gb2YgYERFRklORV9NQUNISU5FX0hBU19GRUFUVVJFYCB5aWVsZHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE1IDE1OjU1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0RFRklORV9NQUNISU5FX0hBU19GRUFUVVJFJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC9zMzkwL2luY2x1ZGUvYXNtL21hY2hpbmUuaCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3MzOTAvaW5jbHVkZS9hc20vbWFjaGluZS5oPTY4PXN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgYm9vbCBfX3Rlc3RfbWFjaGluZV9mZWF0dXJlX2NvbnN0YW50KHVuc2lnbmVkIGludCBucilcbi0tXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vbWFjaGluZS5oLTgwLVxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL21hY2hpbmUuaDo4MTojZGVmaW5lIERFRklORV9NQUNISU5FX0hBU19GRUFUVVJFKG5hbWUsIGZlYXR1cmUpXHRcdFx0XHRcXFxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL21hY2hpbmUuaC04Mi1zdGF0aWMgX19hbHdheXNfaW5saW5lIGJvb2wgbWFjaGluZV9oYXNfIyNuYW1lKHZvaWQpXHRcdFx0XHRcXFxuLS1cbmFyY2gvczM5MC9pbmNsdWRlL2FzbS9tYWNoaW5lLmgtODgtXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vbWFjaGluZS5oOjg5OkRFRklORV9NQUNISU5FX0hBU19GRUFUVVJFKHJlbG9jYXRlZF9sb3djb3JlLCBNRkVBVFVSRV9MT1dDT1JFKVxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL21hY2hpbmUuaDo5MDpERUZJTkVfTUFDSElORV9IQVNfRkVBVFVSRShzY2MsIE1GRUFUVVJFX1NDQylcbmFyY2gvczM5MC9pbmNsdWRlL2FzbS9tYWNoaW5lLmg6OTE6REVGSU5FX01BQ0hJTkVfSEFTX0ZFQVRVUkUodGxiX2d1ZXN0LCBNRkVBVFVSRV9UTEJfR1VFU1QpXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vbWFjaGluZS5oOjkyOkRFRklORV9NQUNISU5FX0hBU19GRUFUVVJFKHR4LCBNRkVBVFVSRV9UWClcbmFyY2gvczM5MC9pbmNsdWRlL2FzbS9tYWNoaW5lLmg6OTM6REVGSU5FX01BQ0hJTkVfSEFTX0ZFQVRVUkUoZXNvcCwgTUZFQVRVUkVfRVNPUClcbmFyY2gvczM5MC9pbmNsdWRlL2FzbS9tYWNoaW5lLmg6OTQ6REVGSU5FX01BQ0hJTkVfSEFTX0ZFQVRVUkUoZGlhZzljLCBNRkVBVFVSRV9ESUFHOUMpXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vbWFjaGluZS5oOjk1OkRFRklORV9NQUNISU5FX0hBU19GRUFUVVJFKHZtLCBNRkVBVFVSRV9WTSlcbmFyY2gvczM5MC9pbmNsdWRlL2FzbS9tYWNoaW5lLmg6OTY6REVGSU5FX01BQ0hJTkVfSEFTX0ZFQVRVUkUoa3ZtLCBNRkVBVFVSRV9LVk0pXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vbWFjaGluZS5oOjk3OkRFRklORV9NQUNISU5FX0hBU19GRUFUVVJFKGxwYXIsIE1GRUFUVVJFX0xQQVIpXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vbWFjaGluZS5oLTk4LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNSAxNTo1NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMTAwNAoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDEwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBhbmFseXppbmcgaG93IGBNRkVBVFVSRV9WTWAgaXMgc2V0OgoKKipVbmRlcnN0YW5kaW5nIHRoZSBgTUZFQVRVUkVfVk1gIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gSSYjMzk7bSB0cnlpbmcgdG8gZmlndXJlIG91dCB0aGUgY29uZmlndXJhdGlvbiBzb3VyY2UgZm9yIGBNRkVBVFVSRV9WTWAuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byB0cmFjZSBpdHMgZGVmaW5pdGlvbiB3aXRoaW4gdGhlIHN5c3RlbSYjMzk7cyBjb2RlYmFzZS4gV2hlcmUgaXMgaXQgZmlyc3QgKmRlY2xhcmVkKiBvciAqaW5pdGlhbGl6ZWQqPyBJcyBpdCBhIGNvbXBpbGUtdGltZSBmbGFnLCBhIHJ1bnRpbWUgcGFyYW1ldGVyLCBvciBwZXJoYXBzIHB1bGxlZCBmcm9tIGEgY29uZmlndXJhdGlvbiBmaWxlPyBJIG5lZWQgdG8gcXVpY2tseSBpZGVudGlmeSB0aGUgcmVsZXZhbnQgaGVhZGVyIGZpbGVzLCBidWlsZCBzY3JpcHRzIChsaWtlIE1ha2VmaWxlcyBvciBDTWFrZUxpc3RzLnR4dCksIGFuZCBhbnkgaW5pdGlhbGl6YXRpb24gcm91dGluZXMuCgpNeSBmaWVsZCBrbm93bGVkZ2UgdGVsbHMgbWUgdG8gY29uc2lkZXIgcG90ZW50aWFsIHNvdXJjZXMgc3VjaCBhczoKCiogICAqKlByZS1wcm9jZXNzb3IgZGVmaW5pdGlvbnM6KiogSXMgaXQgZGVmaW5lZCB1c2luZyBgLURgIGZsYWdzIGR1cmluZyB0aGUgYnVpbGQgcHJvY2Vzcz8gSSYjMzk7ZCBsb29rIGZvciBpdHMgcHJlc2VuY2UgaW4gTWFrZWZpbGVzIG9yIGJ1aWxkIHN5c3RlbSBjb25maWd1cmF0aW9ucy4KKiAgICoqQ29uZmlndXJhdGlvbiBmaWxlczoqKiBQZXJoYXBzIHRoZXJlJiMzOTtzIGEgc3BlY2lmaWMgY29uZmlndXJhdGlvbiBmaWxlIHRoYXQgZGljdGF0ZXMgdmlydHVhbCBtYWNoaW5lIGZlYXR1cmVzLiBJIHNob3VsZCBzZWFyY2ggZm9yIGZpbGVzIHdpdGggbmFtZXMgbGlrZSBgY29uZmlnLmluaWAsIGB2bS5jb25mYCwgb3Igc29tZXRoaW5nIHNpbWlsYXIuCiogICAqKktlcm5lbCBjb21tYW5kIGxpbmU6KiogRG9lcyBpdCBnZXQgcGFzc2VkIGFzIGEgYm9vdCBwYXJhbWV0ZXI/IFRoaXMgaXMgYSBjb21tb24gbWV0aG9kIGZvciBjb25maWd1cmluZyBzeXN0ZW0gYmVoYXZpb3IuIEkgc2hvdWxkIGNoZWNrIHJlbGV2YW50IGJvb3Rsb2FkZXIgY29uZmlndXJhdGlvbnMgb3Iga2VybmVsIGNvbW1hbmQgbGluZSBwYXJzaW5nIHJvdXRpbmVzLgoqICAgKipFbnZpcm9ubWVudGFsIHZhcmlhYmxlczoqKiBDb3VsZCBpdCBiZSBzZXQgYXMgYW4gZW52aXJvbm1lbnQgdmFyaWFibGU/IFRoaXMgaXMgbGVzcyBjb21tb24gZm9yIGNvcmUgZmVhdHVyZXMsIGJ1dCBzdGlsbCBhIHBvc3NpYmlsaXR5LgoqICAgKipEeW5hbWljIGNvbmZpZ3VyYXRpb246KiogQ291bGQgdGhpcyBiZSBjb25maWd1cmVkIGR5bmFtaWNhbGx5IGJ5IHNvbWUgcnVubmluZyBwcm9jZXNzPyBJZiBzbywgd2hpY2ggcHJvY2Vzcz8gSXMgaXQgYSBkZWRpY2F0ZWQgVk0gbWFuYWdlbWVudCBkYWVtb24sIG9yIHNvbWV0aGluZyBtb3JlIGludGVncmF0ZWQ/CgpOZXh0LCBJJiMzOTtsbCBzeXN0ZW1hdGljYWxseSBzZWFyY2ggdGhlIGNvZGUgYmFzZSB1c2luZyB0aGUgdG9vbHMgdGhhdCBJJiMzOTttIGZhbWlsaWFyIHdpdGgsIHN1Y2ggYXMgYGdyZXBgIG9yIGFuIElERSYjMzk7cyBzZWFyY2ggZnVuY3Rpb24uIEkmIzM5O2xsIG5lZWQgdG8gbG9vayBmb3IgaW5zdGFuY2VzIG9mIHRoZSBzeW1ib2wgaXRzZWxmLCBvciBhIGJyb2FkZXIgY29udGV4dCB3aGVyZSBpdCBjb3VsZCBiZSBhc3NpZ25lZC4gSSBjYW4gbmFycm93IGRvd24gbXkgc2VhcmNoIGJ5IGZvY3VzaW5nIG9uIGNvZGUgYXJlYXMgc3BlY2lmaWNhbGx5IHJlbGF0ZWQgdG8gdmlydHVhbCBtYWNoaW5lIGZ1bmN0aW9uYWxpdHkgb3IgZmVhdHVyZSBtYW5hZ2VtZW50LgoKQXMgYW4gZXhwZXJ0LCBJIGtub3cgdGhhdCBkb2N1bWVudGF0aW9uIHdpbGwgYmUgY3JpdGljYWwuIEkgc2hvdWxkIGNvbnN1bHQgYW55IHJlbGF0ZWQgZGVzaWduIGRvY3VtZW50cywgQVBJIHNwZWNpZmljYXRpb25zLCBvciBjb2RlIGNvbW1lbnRzLiBUaGVzZSBzaG91bGQgcHJvdmlkZSBjbHVlcyBhYm91dCBpdHMgcHVycG9zZSBhbmQgaG93IGl0JiMzOTtzIGludGVuZGVkIHRvIGJlIHNldC4gVGhpcyBtaWdodCByZXZlYWwgc29tZSBoaWRkZW4gYXNwZWN0cyBvZiB0aGUgaW1wbGVtZW50YXRpb24uCgpVbHRpbWF0ZWx5LCBieSBjb21iaW5pbmcgY29kZSBhbmFseXNpcyBhbmQgZG9jdW1lbnRhdGlvbiByZXZpZXcsIEkgc2hvdWxkIGJlIGFibGUgdG8gcGluIGRvd24gdGhlIHNvdXJjZSBvZiBgTUZFQVRVUkVfVk1gIGFuZCB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgaXRzIGNvbmZpZ3VyYXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE1IDE1OjU1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O01GRUFUVVJFX1ZNJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC9zMzkwLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3MzOTAvYm9vdC9zdGFydHVwLmM9NTI9c3RhdGljIHZvaWQgZGV0ZWN0X21hY2hpbmVfdHlwZSh2b2lkKVxuLS1cbmFyY2gvczM5MC9ib290L3N0YXJ0dXAuYy02Ny1cdGVsc2UgaWYgKCFtZW1jbXAodm1tcy1cdTAwM2V2bVswXS5jcGksIFwmIzM0O1xceGE5XFx4NjFcXHhlNVxceGQ0XCYjMzQ7LCA0KSlcbmFyY2gvczM5MC9ib290L3N0YXJ0dXAuYzo2ODpcdFx0c2V0X21hY2hpbmVfZmVhdHVyZShNRkVBVFVSRV9WTSk7XG5hcmNoL3MzOTAvYm9vdC9zdGFydHVwLmMtNjktfVxuLS1cbmFyY2gvczM5MC9pbmNsdWRlL2FzbS9tYWNoaW5lLmgtMTctI2RlZmluZSBNRkVBVFVSRV9ESUFHOUNcdFx0NlxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL21hY2hpbmUuaDoxODojZGVmaW5lIE1GRUFUVVJFX1ZNXHRcdDdcbmFyY2gvczM5MC9pbmNsdWRlL2FzbS9tYWNoaW5lLmgtMTktI2RlZmluZSBNRkVBVFVSRV9LVk1cdFx0OFxuLS1cbmFyY2gvczM5MC9pbmNsdWRlL2FzbS9tYWNoaW5lLmg9OTQ9REVGSU5FX01BQ0hJTkVfSEFTX0ZFQVRVUkUoZGlhZzljLCBNRkVBVFVSRV9ESUFHOUMpXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vbWFjaGluZS5oOjk1OkRFRklORV9NQUNISU5FX0hBU19GRUFUVVJFKHZtLCBNRkVBVFVSRV9WTSlcbmFyY2gvczM5MC9pbmNsdWRlL2FzbS9tYWNoaW5lLmgtOTYtREVGSU5FX01BQ0hJTkVfSEFTX0ZFQVRVUkUoa3ZtLCBNRkVBVFVSRV9LVk0pXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE1IDE1OjU1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMxODc4CgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIHRoZSBvbmUgdGhpbmtpbmcgaXQ6CgoqKkRpdmluZyBpbnRvIHRoZSBTeXN0ZW0gQXJjaGl0ZWN0dXJlKioKCkFscmlnaHQsIHRpbWUgdG8gZGlnIGludG8gdGhpcy4gSSBuZWVkIHRvIGdldCBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0aGUgc3lzdGVtIGlzIGlkZW50aWZ5aW5nIHRoZSBtYWNoaW5lIHR5cGUgb24gdGhpcyBzMzkwIGFyY2hpdGVjdHVyZS4gTGV0JiMzOTtzIHN0YXJ0IGJ5IHplcm9pbmcgaW4gb24gdGhhdCBgZGV0ZWN0X21hY2hpbmVfdHlwZWAgZnVuY3Rpb24uIEl0JiMzOTtzIGFsbW9zdCBjZXJ0YWlubHkgY3J1Y2lhbCBpbiBkZXRlcm1pbmluZyBob3cgdGhlIGJvb3QgcHJvY2VzcyBwcm9jZWVkcywgc28gSSYjMzk7bGwgZmluZCBpdCBpbiBgYXJjaC9zMzkwL2Jvb3Qvc3RhcnR1cC5jYC4gVGhhdCBmaWxlIGlzIHdoZXJlIHRoZSBpbml0aWFsIHN5c3RlbSBzZXR1cCBtYWdpYyBsaWtlbHkgaGFwcGVucy4gSSYjMzk7bSBleHBlY3RpbmcgdG8gZmluZCBzb21lIGhhcmR3YXJlIHByb2JpbmcsIG1heWJlIHNvbWUgaW5zdHJ1Y3Rpb24gY2hlY2tzLCBvciBwZXJoYXBzIGV2ZW4gZWFybHkgZmlybXdhcmUgcXVlcmllcy4gTGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIGluIHN0b3JlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNSAxNTo1NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2FyY2gvczM5MC9ib290L3N0YXJ0dXAuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDUyLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgNTI6XHRzdGF0aWMgdm9pZCBkZXRlY3RfbWFjaGluZV90eXBlKHZvaWQpXG4gIDUzOlx0e1xuICA1NDpcdFx0c3RydWN0IHN5c2luZm9fM18yXzIgKnZtbXMgPSAoc3RydWN0IHN5c2luZm9fM18yXzIgKilcdTAwMjZzeXNpbmZvX3BhZ2U7XG4gIDU1Olx0XG4gIDU2Olx0XHQvKiBDaGVjayBjdXJyZW50LWNvbmZpZ3VyYXRpb24tbGV2ZWwgKi9cbiAgNTc6XHRcdGlmIChzdHNpKE5VTEwsIDAsIDAsIDApIFx1MDAzYz0gMikge1xuICA1ODpcdFx0XHRzZXRfbWFjaGluZV9mZWF0dXJlKE1GRUFUVVJFX0xQQVIpO1xuICA1OTpcdFx0XHRyZXR1cm47XG4gIDYwOlx0XHR9XG4gIDYxOlx0XHQvKiBHZXQgdmlydHVhbC1tYWNoaW5lIGNwdSBpbmZvcm1hdGlvbi4gKi9cbiAgNjI6XHRcdGlmIChzdHNpKHZtbXMsIDMsIDIsIDIpIHx8ICF2bW1zLVx1MDAzZWNvdW50KVxuICA2MzpcdFx0XHRyZXR1cm47XG4gIDY0Olx0XHQvKiBEZXRlY3Qga25vd24gaHlwZXJ2aXNvcnMgKi9cbiAgNjU6XHRcdGlmICghbWVtY21wKHZtbXMtXHUwMDNldm1bMF0uY3BpLCBcJiMzNDtcXHhkMlxceGU1XFx4ZDRcJiMzNDssIDMpKVxuICA2NjpcdFx0XHRzZXRfbWFjaGluZV9mZWF0dXJlKE1GRUFUVVJFX0tWTSk7XG4gIDY3Olx0XHRlbHNlIGlmICghbWVtY21wKHZtbXMtXHUwMDNldm1bMF0uY3BpLCBcJiMzNDtcXHhhOVxceDYxXFx4ZTVcXHhkNFwmIzM0OywgNCkpXG4gIDY4Olx0XHRcdHNldF9tYWNoaW5lX2ZlYXR1cmUoTUZFQVRVUkVfVk0pO1xuICA2OTpcdH1cbiAgNzA6XHRcbiAgNzE6XHRzdGF0aWMgdm9pZCBkZXRlY3RfZGlhZzI4OCh2b2lkKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNSAxNTo1NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMjQ1OAoJCQkJCQkJb3V0cHV0OiA0NAoJCQkJCQkJdGhvdWdodHM6IDIyOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiBIeXBlcnZpc29yIERldGVjdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgaG93IHdlJiMzOTtyZSBkZXRlcm1pbmluZyB0aGUgaHlwZXJ2aXNvciBpbiB0aGlzIHN5c3RlbS4gVGhlIGBzdHNpYCBpbnN0cnVjdGlvbiBpcyB0aGUga2V5IOKAkyBpdCYjMzk7cyB0aGUgc3RhbmRhcmQgd2F5IHRvIGRldGVjdCB0aGUgdW5kZXJseWluZyB2aXJ0dWFsaXphdGlvbi4gSWYgdGhlIGBzdHNpYCBpbnN0cnVjdGlvbiByZXR1cm5zIHRoZSBFQkNESUMgdmFsdWUgYFx4ZDJceGU1XHhkNGAsIHRoYXQmIzM5O3MgS1ZNLCBubyBxdWVzdGlvbi4gSWYgaXQgcmV0dXJucyBgXHhhOVx4NjFceGU1XHhkNGAsIHRoYXQmIzM5O3Mgei9WTS4gU3RyYWlnaHRmb3J3YXJkIGVub3VnaC4KCk5vdywgUUVNVSBpcyB0aGUgZW11bGF0b3IgaGVyZSwgcmlnaHQ/IEFuZCBpdCBjYW4gZW11bGF0ZSBlaXRoZXIgS1ZNIG9yIHVzZSBpdHMgb3duIFRDRyAoVGlueSBDb2RlIEdlbmVyYXRvcikuIFdoZW4gUUVNVSBpcyBydW5uaW5nIG9uIHRvcCBvZiBhY3R1YWwgS1ZNLCBpdCB3aWxsIG1pbWljIHRoZSBLVk0gYW5kIGNvcnJlY3RseSByZXR1cm4gdGhlICYjMzQ7S1ZNJiMzNDsgc3RyaW5nIHRocm91Z2ggdGhlIGBzdHNpYCBpbnN0cnVjdGlvbiwgbWFraW5nIGl0IGVhc3kgdG8gaWRlbnRpZnkuCgpCdXQgdGhlIFRDRyBjYXNlLi4uIHRoYXQmIzM5O3Mgd2hlcmUgdGhpbmdzIGdldCBpbnRlcmVzdGluZy4gRG9lcyBRRU1VLCB3aGVuIHJ1bm5pbmcgd2l0aCBUQ0csIGVtdWxhdGUgei9WTT8gTm8sIHVzdWFsbHkgbm90LiBUeXBpY2FsbHksIFFFTVUgVENHIGVpdGhlciByZXR1cm5zIHNvbWV0aGluZyBkaWZmZXJlbnQsIG9yIGRlZmF1bHRzIHRvICYjMzQ7S1ZNJiMzNDssIG9yIG1pZ2h0IGV2ZW4gcmV0dXJuIG5vdGhpbmcgYXQgYWxsLiBUaGF0IG1lYW5zLCBydW5uaW5nIHVuZGVyIFFFTVUgYW5kIFRDRywgd2Ugd291bGQgbGlrZWx5ICpub3QqIGJlIGFibGUgdG8gaWRlbnRpZnkgdGhlIHVuZGVybHlpbmcgaHlwZXJ2aXNvci4KCkhtbSwgdGhpcyByZW1pbmRzIG1lIHRoYXQgc3l6a2FsbGVyIHJ1bnMgdW5kZXIgUUVNVSwgZG9lc24mIzM5O3QgaXQ/IFNvLCBiZWNhdXNlIHN5emthbGxlciBydW5zIG9uIHRvcCBvZiBRRU1VLCBpdCB3b3VsZCBub3QgcnVuIGRpcmVjdGx5IG9uIHovVk0sIHdoaWNoIG1ha2VzIGBtYWNoaW5lX2lzX3ZtKClgIGZhbHNlLgoKV2FpdCBhIHNlY29uZCwgaXMgdGhlcmUgYW5vdGhlciBwYXRod2F5IHRvIHNldHRpbmcgYGl1Y3YtJmd0O3RyYW5zcG9ydGAgdG8gYEFGX0lVQ1ZfVFJBTlNfSVVDVmA/IEkgbmVlZCB0byBkb3VibGUtY2hlY2sgdGhhdC4gTGV0JiMzOTtzIHJldmlzaXQgYG5ldC9pdWN2L2FmX2l1Y3YuY2AgdG8gbWFrZSBzdXJlIEkgaGF2ZW4mIzM5O3QgbWlzc2VkIHNvbWV0aGluZyBjcnVjaWFsLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNSAxNTo1NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtBRl9JVUNWX1RSQU5TX0lVQ1YmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXVjdi9hZl9pdWN2LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2l1Y3YvYWZfaXVjdi5jPTE2Nj1zdGF0aWMgaW5saW5lIGludCBpdWN2X2JlbG93X21zZ2xpbShzdHJ1Y3Qgc29jayAqc2spXG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jLTE3MS1cdFx0cmV0dXJuIDE7XG5uZXQvaXVjdi9hZl9pdWN2LmM6MTcyOlx0aWYgKGl1Y3YtXHUwMDNldHJhbnNwb3J0ID09IEFGX0lVQ1ZfVFJBTlNfSVVDVilcbm5ldC9pdWN2L2FmX2l1Y3YuYy0xNzMtXHRcdHJldHVybiAoYXRvbWljX3JlYWQoXHUwMDI2aXVjdi1cdTAwM2Vza2JzX2luX3htaXQpIFx1MDAzYyBpdWN2LVx1MDAzZXBhdGgtXHUwMDNlbXNnbGltKTtcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmM9NDY2PXN0YXRpYyBzdHJ1Y3Qgc29jayAqaXVjdl9zb2NrX2FsbG9jKHN0cnVjdCBzb2NrZXQgKnNvY2ssIGludCBwcm90bywgZ2ZwX3QgcHJpbywgaW50IGtlcm4pXG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jLTQ5My1cdGlmIChwcl9pdWN2KVxubmV0L2l1Y3YvYWZfaXVjdi5jOjQ5NDpcdFx0aXVjdi1cdTAwM2V0cmFuc3BvcnQgPSBBRl9JVUNWX1RSQU5TX0lVQ1Y7XG5uZXQvaXVjdi9hZl9pdWN2LmMtNDk1LVx0ZWxzZVxuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYz01ODI9c3RhdGljIGludCBpdWN2X3NvY2tfYmluZChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29ja2FkZHJfdW5zaXplZCAqYWRkcixcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmMtNjQ3LVx0XHRzay1cdTAwM2Vza19zdGF0ZSA9IElVQ1ZfQk9VTkQ7XG5uZXQvaXVjdi9hZl9pdWN2LmM6NjQ4Olx0XHRpdWN2LVx1MDAzZXRyYW5zcG9ydCA9IEFGX0lVQ1ZfVFJBTlNfSVVDVjtcbm5ldC9pdWN2L2FmX2l1Y3YuYy02NDktXHRcdHNrLVx1MDAzZXNrX2FsbG9jYXRpb24gfD0gR0ZQX0RNQTtcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmM9NjY1PXN0YXRpYyBpbnQgaXVjdl9zb2NrX2F1dG9iaW5kKHN0cnVjdCBzb2NrICpzaylcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmMtNjczLVx0bWVtY3B5KGl1Y3YtXHUwMDNlc3JjX3VzZXJfaWQsIGl1Y3ZfdXNlcmlkLCA4KTtcbm5ldC9pdWN2L2FmX2l1Y3YuYzo2NzQ6XHRpdWN2LVx1MDAzZXRyYW5zcG9ydCA9IEFGX0lVQ1ZfVFJBTlNfSVVDVjtcbm5ldC9pdWN2L2FmX2l1Y3YuYy02NzUtXHRzay1cdTAwM2Vza19hbGxvY2F0aW9uIHw9IEdGUF9ETUE7XG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jPTczMz1zdGF0aWMgaW50IGl1Y3Zfc29ja19jb25uZWN0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrYWRkcl91bnNpemVkICphZGRyLFxuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYy03ODAtXG5uZXQvaXVjdi9hZl9pdWN2LmM6NzgxOlx0aWYgKGVyciBcdTAwMjZcdTAwMjYgaXVjdi1cdTAwM2V0cmFuc3BvcnQgPT0gQUZfSVVDVl9UUkFOU19JVUNWKSB7XG5uZXQvaXVjdi9hZl9pdWN2LmMtNzgyLVx0XHRpdWN2X3NldmVyX3BhdGgoc2ssIDApO1xuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYz0xNDI2PXN0YXRpYyBpbnQgaXVjdl9zb2NrX3NodXRkb3duKHN0cnVjdCBzb2NrZXQgKnNvY2ssIGludCBob3cpXG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jLTE0NTEtXHQgICAgc2stXHUwMDNlc2tfc3RhdGUgPT0gSVVDVl9DT05ORUNURUQpIHtcbm5ldC9pdWN2L2FmX2l1Y3YuYzoxNDUyOlx0XHRpZiAoaXVjdi1cdTAwM2V0cmFuc3BvcnQgPT0gQUZfSVVDVl9UUkFOU19JVUNWKSB7XG5uZXQvaXVjdi9hZl9pdWN2LmMtMTQ1My1cdFx0XHR0eG1zZy5jbGFzcyA9IDA7XG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jLTE0NzUtXHRpZiAoaG93ID09IFJDVl9TSFVURE9XTiB8fCBob3cgPT0gU0hVVERPV05fTUFTSykge1xubmV0L2l1Y3YvYWZfaXVjdi5jOjE0NzY6XHRcdGlmICgoaXVjdi1cdTAwM2V0cmFuc3BvcnQgPT0gQUZfSVVDVl9UUkFOU19JVUNWKSBcdTAwMjZcdTAwMjZcbm5ldC9pdWN2L2FmX2l1Y3YuYy0xNDc3LVx0XHQgICAgaXVjdi1cdTAwM2VwYXRoKSB7XG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jPTE2MTU9c3RhdGljIGludCBpdWN2X2NhbGxiYWNrX2Nvbm5yZXEoc3RydWN0IGl1Y3ZfcGF0aCAqcGF0aCxcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmMtMTY3NC1cdGl1Y3Zfc29ja19pbml0KG5zaywgc2spO1xubmV0L2l1Y3YvYWZfaXVjdi5jOjE2NzU6XHRuaXVjdi1cdTAwM2V0cmFuc3BvcnQgPSBBRl9JVUNWX1RSQU5TX0lVQ1Y7XG5uZXQvaXVjdi9hZl9pdWN2LmMtMTY3Ni1cdG5zay1cdTAwM2Vza19hbGxvY2F0aW9uIHw9IEdGUF9ETUE7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE1IDE1OjU1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM0Mjg0CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogOTgwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlVucmVhY2hhYmxlIENvZGUgaW4gUUVNVTogQSBEZWVwIERpdmUqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCB0aG91Z2h0IHdhcyBhYm91dCB0aGlzIGBpdWN2X3NvY2tfYmluZGAgZnVuY3Rpb24gYW5kIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgYHByX2l1Y3ZgIHZhcmlhYmxlIGFuZCB0aGUgYEFGX0lVQ1ZfVFJBTlNfSVVDVmAgdHJhbnNwb3J0IHR5cGUuIEkgc2VlIHRoYXQgYEFGX0lVQ1ZfVFJBTlNfSVVDVmAgaXMgKm9ubHkqIHNldCB3aGVuIGBwcl9pdWN2YCBpcyBub24tTlVMTCwgYW5kIGBwcl9pdWN2YCBpdHNlbGYgc2VlbXMgdG8gYmUgbm9uLU5VTEwgb25seSB3aGVuIHRoZSBjb2RlIGRldGVjdHMgdGhhdCBpdCYjMzk7cyBydW5uaW5nIGluIGEgVk0gdmlhIGBtYWNoaW5lX2lzX3ZtKClgLgoKTXkgZmlyc3QgaW5zdGluY3QsIGFzIGEgZnV6emluZy1vcmllbnRlZCByZXNlYXJjaGVyLCB3YXMgdG8gcHJvYmUgaWYgdGhlcmUmIzM5O3MgYW55IGNsZXZlciBRRU1VIHRyaWNrZXJ5IHRvIGZvb2wgYG1hY2hpbmVfaXNfdm0oKWAg4oCTIHNvbWUgUUVNVSBxdWlyayBvciBwc2V1ZG8tc3lzY2FsbCB0aGF0IG1pZ2h0IGNyZWF0ZSBhIGZhbHNlIHBvc2l0aXZlLiBCdXQgSSBxdWlja2x5IHJlbWVtYmVyZWQgdGhhdCBRRU1VIGVpdGhlciB1c2VzIEtWTSBvciBUQ0csIG5vdCB6L1ZNIGVtdWxhdGlvbi4gU3l6a2FsbGVyLCB3aGlsZSBhIHBvd2VyZnVsIHRvb2wsIGlzIGZvY3VzZWQgb24gS1ZNIG9yIFRDRywgdG9vLiBUaGVyZSYjMzk7cyBubyBoaWRkZW4gYmFja2Rvb3IgaGVyZS4KClNvLCBpZiBgbWFjaGluZV9pc192bSgpYCBpcyBmYWxzZSwgYHByX2l1Y3ZgIGlzIE5VTEwsIHdoaWNoIG1lYW5zIGBpdWN2LSZndDt0cmFuc3BvcnRgIGdldHMgc2V0IHRvIGBBRl9JVUNWX1RSQU5TX0hJUEVSYC4gVGhlIG5ldyBwYXRjaCBpbnRyb2R1Y2VzIGEgY29uZGl0aW9uYWwgY2hlY2sgYmFzZWQgb24gYGl1Y3YtJmd0O3RyYW5zcG9ydGAgYmVpbmcgYEFGX0lVQ1ZfVFJBTlNfSVVDVmAuIEdpdmVuIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIGNvZGUsIHRoaXMgbWVhbnMgdGhhdCB0aGlzIG5ldyBjb2RlIGJsb2NrIGlzIGNvbXBsZXRlbHkgdW5yZWFjaGFibGUuIAoKSXQmIzM5O3MgcHJldHR5IGNsZWFyIHRoYXQgaXQgKnNob3VsZCogYmUgdW5yZWFjaGFibGUgaW4gUUVNVS4gU3l6a2FsbGVyJiMzOTtzIGRvY3VtZW50YXRpb24gaXRzZWxmIHJlaW5mb3JjZXMgdGhpczogY29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cywgZXZlbiB3aGVuIHVzaW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlLiBTaW5jZSB6L1ZNIGlzIGEgcHJvcHJpZXRhcnkgaHlwZXJ2aXNvciBhbmQgUUVNVSYjMzk7cyBwcmltYXJ5IGZvY3VzIGlzbiYjMzk7dCB6L1ZNLCBpdCBkb2VzbiYjMzk7dCBlbXVsYXRlIGl0LgoKSnVzdCB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4sIEkgY2hlY2tlZCB0aGUgUUVNVSBtYWNoaW5lIHR5cGUuIEl0JiMzOTtzIHRoZSBgczM5MC1jY3ctdmlydGlvYCwgZW11bGF0aW5nIGEgei9BcmNoaXRlY3R1cmUgbWFjaGluZS4gSSYjMzk7bSBmYW1pbGlhciB3aXRoIHRoZSBmYWN0IHRoYXQgUUVNVSB1c2VzIHRoZSBgc3RzaWAgaW5zdHJ1Y3Rpb24gYW5kIHRoZW4gc2V0cyBzb21lIG1hY2hpbmUgZmVhdHVyZXMgc3VjaCBhcyBLVk0gb3IgUUVNVSBpbiBUQ0cgbW9kZS4gSSBuZWVkZWQgYSBkb3VibGUgY2hlY2ssIHNvIEkgbG9va2VkIGludG8gc29tZSBMaW51eCBrZXJuZWwgY29kZSByZWxhdGVkIHRvIGh5cGVydmlzb3IgZGV0ZWN0aW9uLiBJdCB1c2VzIEVCQ0RJQyBjaGFyYWN0ZXIgc3RyaW5ncyBmcm9tIHRoZSBjb250cm9sIHByb2dyYW0gaW50ZXJydXB0IChDUEkpIGZpZWxkIG9mIHRoZSBzeXN0ZW0gaW5mb3JtYXRpb24gYmxvY2sgKFNJQikgdG8gZGV0ZWN0IGh5cGVydmlzb3JzLiAmIzM0O0tWTSYjMzQ7IChgXHhkMlx4ZTVceGQ0YCkgYW5kICYjMzQ7ei9WTSYjMzQ7IChgXHhhOVx4NjFceGU1XHhkNGApIGNhbiBiZSBkZXRlY3RlZCBieSB0aGlzIG1lY2hhbmlzbS4gIEkga25vdyB0aGF0IFFFTVUgaW4gVENHIG1vZGUgc2V0cyB0aGUgQ1BJIHRvICYjMzQ7UUVNVSYjMzQ7LCB3aGljaCBtZWFucyB0aGF0IGBtYWNoaW5lX2lzX3ZtKClgIHdpbGwgZGVmaW5pdGVseSBiZSBmYWxzZSBpbiBRRU1VLgoKVGh1cywgYHByX2l1Y3ZgIGlzIE5VTEwsIGBpdWN2LSZndDt0cmFuc3BvcnRgIHdpbGwgYmUgYEFGX0lVQ1ZfVFJBTlNfSElQRVJgLCBhbmQgdGhlIGNvbmRpdGlvbiBgaXVjdi0mZ3Q7dHJhbnNwb3J0ID09IEFGX0lVQ1ZfVFJBTlNfSVVDVmAgaXMgKmFsd2F5cyogZmFsc2UuICBUaGUgbW9kaWZpZWQgY29kZSBpcyB1bnJlYWNoYWJsZS4gTm93IEkmIzM5O2xsIG5lZWQgdG8gZG91YmxlLWNoZWNrIHRoZSBlbnRpcmUgY29kZWJhc2UgdG8gbWFrZSBzdXJlIGBpdWN2LSZndDt0cmFuc3BvcnRgIGlzIG5ldmVyIGJlaW5nIHNldCB0byBgQUZfSVVDVl9UUkFOU19JVUNWYCBpbiBhbnkgb3RoZXIgc2NlbmFyaW8uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE1IDE1OjU2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0FGX0lVQ1ZfVFJBTlNfSVVDViYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pdWN2LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXVjdi9hZl9pdWN2LmM9MTY2PXN0YXRpYyBpbmxpbmUgaW50IGl1Y3ZfYmVsb3dfbXNnbGltKHN0cnVjdCBzb2NrICpzaylcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmMtMTcxLVx0XHRyZXR1cm4gMTtcbm5ldC9pdWN2L2FmX2l1Y3YuYzoxNzI6XHRpZiAoaXVjdi1cdTAwM2V0cmFuc3BvcnQgPT0gQUZfSVVDVl9UUkFOU19JVUNWKVxubmV0L2l1Y3YvYWZfaXVjdi5jLTE3My1cdFx0cmV0dXJuIChhdG9taWNfcmVhZChcdTAwMjZpdWN2LVx1MDAzZXNrYnNfaW5feG1pdCkgXHUwMDNjIGl1Y3YtXHUwMDNlcGF0aC1cdTAwM2Vtc2dsaW0pO1xuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYz00NjY9c3RhdGljIHN0cnVjdCBzb2NrICppdWN2X3NvY2tfYWxsb2Moc3RydWN0IHNvY2tldCAqc29jaywgaW50IHByb3RvLCBnZnBfdCBwcmlvLCBpbnQga2Vybilcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmMtNDkzLVx0aWYgKHByX2l1Y3YpXG5uZXQvaXVjdi9hZl9pdWN2LmM6NDk0Olx0XHRpdWN2LVx1MDAzZXRyYW5zcG9ydCA9IEFGX0lVQ1ZfVFJBTlNfSVVDVjtcbm5ldC9pdWN2L2FmX2l1Y3YuYy00OTUtXHRlbHNlXG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jPTU4Mj1zdGF0aWMgaW50IGl1Y3Zfc29ja19iaW5kKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrYWRkcl91bnNpemVkICphZGRyLFxuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYy02NDctXHRcdHNrLVx1MDAzZXNrX3N0YXRlID0gSVVDVl9CT1VORDtcbm5ldC9pdWN2L2FmX2l1Y3YuYzo2NDg6XHRcdGl1Y3YtXHUwMDNldHJhbnNwb3J0ID0gQUZfSVVDVl9UUkFOU19JVUNWO1xubmV0L2l1Y3YvYWZfaXVjdi5jLTY0OS1cdFx0c2stXHUwMDNlc2tfYWxsb2NhdGlvbiB8PSBHRlBfRE1BO1xuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYz02NjU9c3RhdGljIGludCBpdWN2X3NvY2tfYXV0b2JpbmQoc3RydWN0IHNvY2sgKnNrKVxuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYy02NzMtXHRtZW1jcHkoaXVjdi1cdTAwM2VzcmNfdXNlcl9pZCwgaXVjdl91c2VyaWQsIDgpO1xubmV0L2l1Y3YvYWZfaXVjdi5jOjY3NDpcdGl1Y3YtXHUwMDNldHJhbnNwb3J0ID0gQUZfSVVDVl9UUkFOU19JVUNWO1xubmV0L2l1Y3YvYWZfaXVjdi5jLTY3NS1cdHNrLVx1MDAzZXNrX2FsbG9jYXRpb24gfD0gR0ZQX0RNQTtcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmM9NzMzPXN0YXRpYyBpbnQgaXVjdl9zb2NrX2Nvbm5lY3Qoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHNvY2thZGRyX3Vuc2l6ZWQgKmFkZHIsXG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jLTc4MC1cbm5ldC9pdWN2L2FmX2l1Y3YuYzo3ODE6XHRpZiAoZXJyIFx1MDAyNlx1MDAyNiBpdWN2LVx1MDAzZXRyYW5zcG9ydCA9PSBBRl9JVUNWX1RSQU5TX0lVQ1YpIHtcbm5ldC9pdWN2L2FmX2l1Y3YuYy03ODItXHRcdGl1Y3Zfc2V2ZXJfcGF0aChzaywgMCk7XG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jPTE0MjY9c3RhdGljIGludCBpdWN2X3NvY2tfc2h1dGRvd24oc3RydWN0IHNvY2tldCAqc29jaywgaW50IGhvdylcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmMtMTQ1MS1cdCAgICBzay1cdTAwM2Vza19zdGF0ZSA9PSBJVUNWX0NPTk5FQ1RFRCkge1xubmV0L2l1Y3YvYWZfaXVjdi5jOjE0NTI6XHRcdGlmIChpdWN2LVx1MDAzZXRyYW5zcG9ydCA9PSBBRl9JVUNWX1RSQU5TX0lVQ1YpIHtcbm5ldC9pdWN2L2FmX2l1Y3YuYy0xNDUzLVx0XHRcdHR4bXNnLmNsYXNzID0gMDtcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmMtMTQ3NS1cdGlmIChob3cgPT0gUkNWX1NIVVRET1dOIHx8IGhvdyA9PSBTSFVURE9XTl9NQVNLKSB7XG5uZXQvaXVjdi9hZl9pdWN2LmM6MTQ3NjpcdFx0aWYgKChpdWN2LVx1MDAzZXRyYW5zcG9ydCA9PSBBRl9JVUNWX1RSQU5TX0lVQ1YpIFx1MDAyNlx1MDAyNlxubmV0L2l1Y3YvYWZfaXVjdi5jLTE0NzctXHRcdCAgICBpdWN2LVx1MDAzZXBhdGgpIHtcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmM9MTYxNT1zdGF0aWMgaW50IGl1Y3ZfY2FsbGJhY2tfY29ubnJlcShzdHJ1Y3QgaXVjdl9wYXRoICpwYXRoLFxuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYy0xNjc0LVx0aXVjdl9zb2NrX2luaXQobnNrLCBzayk7XG5uZXQvaXVjdi9hZl9pdWN2LmM6MTY3NTpcdG5pdWN2LVx1MDAzZXRyYW5zcG9ydCA9IEFGX0lVQ1ZfVFJBTlNfSVVDVjtcbm5ldC9pdWN2L2FmX2l1Y3YuYy0xNjc2LVx0bnNrLVx1MDAzZXNrX2FsbG9jYXRpb24gfD0gR0ZQX0RNQTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTUgMTU6NTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzcxOTQKCQkJCQkJCW91dHB1dDogMTUyCgkJCQkJCQl0aG91Z2h0czogMTQzMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXNpcyBvZiB0aGUgUGF0Y2g6IFdvcnRoRnV6emluZz1mYWxzZSoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgdGhhdCB0aGlzIHBhdGNoIGlzbiYjMzk7dCB3b3J0aCBmdXp6aW5nLCBhbmQgaGVyZSYjMzk7cyB3aHkuIEkgc2VlIGEgcGF0dGVybjogZXZlcnkgaW5zdGFuY2Ugd2hlcmUgYGl1Y3YtJmd0O3RyYW5zcG9ydGAgaXMgc2V0IHRvIGBBRl9JVUNWX1RSQU5TX0lVQ1ZgIGlzIGRpcmVjdGx5IGRlcGVuZGVudCBvbiBgcHJfaXVjdmAgYmVpbmcgbm9uLU5VTEwuIEluIHNldmVyYWwgZnVuY3Rpb25zIOKAkyBgaXVjdl9zb2NrX2FsbG9jYCwgYGl1Y3Zfc29ja19iaW5kYCwgYGl1Y3Zfc29ja19hdXRvYmluZGAsIGFuZCBldmVuIHRoZSBgaXVjdl9jYWxsYmFja19jb25ucmVxYCB3aGljaCBpcyByZWdpc3RlcmVkIHVzaW5nIGBwcl9pdWN2YCDigJMgdGhpcyBjb25kaXRpb24gaXMgY29uc2lzdGVudGx5IGVuZm9yY2VkLiBUaGlzIG1lYW5zIHRoYXQgYGl1Y3YtJmd0O3RyYW5zcG9ydCA9PSBBRl9JVUNWX1RSQU5TX0lVQ1ZgIGlzLCBlc3NlbnRpYWxseSwgZXF1aXZhbGVudCB0byBgcHJfaXVjdiAhPSBOVUxMYCwgYW5kIHRoZXJlZm9yZSBlcXVpdmFsZW50IHRvIGBtYWNoaW5lX2lzX3ZtKCkgPT0gdHJ1ZWAgYXNzdW1pbmcgYENPTkZJR19JVUNWYCBpcyBlbmFibGVkLgoKU2luY2UgdGhlIGdvYWwgaXMgdG8gZGV0ZXJtaW5lIGlmIHRoZSBwYXRjaCBpcyB3b3J0aCBmdXp6aW5nLCBJIG11c3QgZGV0ZXJtaW5lIGlmIHRoZSBhZGRlZCBjb2RlIGNhbiBiZSByZWFjaGVkIHVuZGVyIGNvbW1vbiBmdXp6aW5nIGVudmlyb25tZW50cyBsaWtlIFFFTVUuCgpHaXZlbiB0aGF0IHRoZSBxdWVzdGlvbiBzcGVjaWZpY2FsbHkgY2FsbHMgb3V0ICYjMzQ7dmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUmIzM0OywgYW5kIHN0YXRlcyB0aGF0IHRoZSBjb2RlIHBhdGggbXVzdCBiZSByZWFjaGFibGUgZXZlbiBpbiBzb2Z0d2FyZS1lbXVsYXRlZCBlbnZpcm9ubWVudHMsIEkmIzM5O20gcHJldHR5IGNlcnRhaW4gdGhpcyBpcyBhIGRlYWQgZW5kLiBRRU1VLCBieSBpdHMgbmF0dXJlLCBkb2VzbiYjMzk7dCBlbXVsYXRlIHRoZSB6L1ZNIGh5cGVydmlzb3IuIEl0IGVtdWxhdGVzIGJhcmUtbWV0YWwgei9BcmNoaXRlY3R1cmUsIG9yIEtWTS4gVGhlIGBzdHNpYCBpbnN0cnVjdGlvbiYjMzk7cyBvdXRwdXQsIHdoaWNoIGlzIGhvdyB3ZSYjMzk7ZCBkZXRlcm1pbmUgaWYgd2UmIzM5O3JlIG9uIGEgaHlwZXJ2aXNvciwgaXMgaGFyZGNvZGVkIGJ5IFFFTVUgdG8gcmV0dXJuICYjMzQ7S1ZNJiMzNDsgb3IgJiMzNDtRRU1VLiYjMzQ7IFRoZXJlJiMzOTtzIG5vIHdheSB0byBtYWtlIFFFTVUgcmV0dXJuICYjMzQ7ei9WTSYjMzQ7IHdpdGhvdXQgcGF0Y2hpbmcgUUVNVSBpdHNlbGYsIGFuZCBzeXprYWxsZXIgZG9lcyBub3QgZG8gdGhpcyBhcyBwYXJ0IG9mIGl0cyBkZWZhdWx0IG9wZXJhdGlvbi4KCk5vdywgSSBwYXVzZWQgdG8gY29uc2lkZXIgaWYgc3l6a2FsbGVyIGl0c2VsZiB3YXMgcnVubmluZyAqb24qIHovVk0uIENlcnRhaW5seSwgeW91ICpjb3VsZCogcnVuIHN5emthbGxlciBvbiBhIHovVk0gZ3Vlc3QgdXNpbmcgYW4gYHNzaGAgYmFja2VuZCBhbmQgdGFyZ2V0ZWQga2VybmVsLCBidXQgdGhlIHByb21wdCYjMzk7cyBsYW5ndWFnZSBpcyBjbGVhcjogdGhlIGNvZGUgbXVzdCBiZSByZWFjaGFibGUgJiMzNDtpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgKmxpa2UqIEdDRSBvciBRRU1VLiYjMzQ7IFRoaXMgaW1wbGllcyB0aGUgc3RhbmRhcmQgc3l6a2FsbGVyIHNldHVwLCBhbmQgdGhhdCBzZXR1cCBkb2VzICpub3QqIGluY2x1ZGUgei9WTSBhcyBhIGRlZmF1bHQgaHlwZXJ2aXNvciB0YXJnZXQsIGJ1dCBvbmx5IGVtdWxhdGVkIGVudmlyb25tZW50cyBsaWtlIFFFTVUuIFRoZSBwcm9tcHQgaW1wbGllcyB0aGlzIGNhc2UgaXMgbm90IHJlbGV2YW50LgoKTXkgdW5kZXJzdGFuZGluZyBpcyB0aGF0IHRoaXMgcGF0Y2ggb25seSBhZmZlY3RzIGVycm9yIGhhbmRsaW5nIGluIGBpdWN2X3NvY2tfY29ubmVjdGAuIElmIHRoZXJlJiMzOTtzIGFuIGVycm9yLCBhbmQgdGhlIHRyYW5zcG9ydCBpcyBgQUZfSVVDVl9UUkFOU19JVUNWYCwgdGhlbiBgaXVjdl9zZXZlcl9wYXRoYCBpcyBjYWxsZWQsIGFuZCBzb21lIHN0YXRlIGNsZWFudXAgbWlnaHQgYmUgcGVyZm9ybWVkLCBzcGVjaWZpY2FsbHkgY29uY2VybmluZyBhIHJhY2UgY29uZGl0aW9uIHdoZXJlIGEgYGNvbm5hY2tgIG1pZ2h0IGFycml2ZSBiZXR3ZWVuIGEgc29ja2V0IGJlaW5nIGRpc2Nvbm5lY3RlZCBhbmQgdGhlIHJlbGVhc2Ugb2YgdGhlIGB3YWl0YC4KCkdpdmVuIHRoYXQsIEkmIzM5O20gY29uZmlkZW50IGluIG15IGluaXRpYWwgYXNzZXNzbWVudC4gVGhlIGBpZmAgc3RhdGVtZW50IHRoYXQgZ3VhcmRzIHRoaXMgZXh0cmEgY2xlYW51cCBjb2RlIGRlcGVuZHMgb24gYmVpbmcgaW4gYSB6L1ZNIGVudmlyb25tZW50LCB3aGljaCBRRU1VICpjYW5ub3QqIGVtdWxhdGUuIFRoZXJlZm9yZSwgdGhpcyBjb2RlIHBhdGggaXMgc2ltcGx5IGluYWNjZXNzaWJsZSBpbiBhIHN0YW5kYXJkIHN5emthbGxlci9RRU1VIHNldHVwLgoKQWZ0ZXIgcmV2aWV3aW5nIHRoZSBwYXRjaCBhZ2FpbiB0byBlbnN1cmUgdGhlcmUgYXJlIG5vIG90aGVyIHN1YnRsZSBjaGFuZ2VzLCBJIGNhbiBjb25maXJtIHRoYXQgdGhlIG5ldyBjb2RlIGlzIGVuY2xvc2VkIGJ5IGBpZiAoZXJyICZhbXA7JmFtcDsgaXVjdi0mZ3Q7dHJhbnNwb3J0ID09IEFGX0lVQ1ZfVFJBTlNfSVVDVilgLCBhbmQgdGhlIGFkZGVkIGNvZGUgaXMgdW5yZWFjaGFibGUuCgpNeSBjb25jbHVzaW9uIGlzIHRoYXQgYFdvcnRoRnV6emluZz1mYWxzZWAgYmVjYXVzZSB0aGUgbW9kaWZpZWQgY29kZSBpcyB1bnJlYWNoYWJsZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBRRU1VLiBBbHNvLCB0aGUgY29kZSBkZXBlbmRzIG9uIGEgcHJvcHJpZXRhcnkgaHlwZXJ2aXNvciB0aGF0IGlzIG5vdCBlbXVsYXRlZCBpbiB0aGVzZSBlbnZpcm9ubWVudHMuCgpKdXN0IHRvIGJlIGFic29sdXRlbHkgY2VydGFpbiwgSSYjMzk7bGwgY29uZmlybSB0aGF0IGBtYWNoaW5lX2lzX3ZtKClgIGlzIGNoZWNraW5nIGZvciB0aGUgY29ycmVjdCBoeXBlcnZpc29yLCB6L1ZNLiBZZXMsIHRoZSBoYXJkY29kZWQgY2hlY2sgZm9yIHRoZSBoeXBlcnZpc29yIHV0aWxpemVzIHRoZSBFQkNESUMgdmFsdWUgZm9yIGB6L1ZNYCAtIHNvIEkgYW0gY29uZmlkZW50IGluIG15IGFzc2Vzc21lbnQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE1IDE1OjU2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogW10sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGVycm9yIGhhbmRsaW5nIHBhdGggaW4gYGl1Y3Zfc29ja19jb25uZWN0YCBmb3IgQUZfSVVDViBzb2NrZXRzLiBIb3dldmVyLCB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJpY3RseSBndWFyZGVkIGJ5IGBpdWN2LVx1MDAzZXRyYW5zcG9ydCA9PSBBRl9JVUNWX1RSQU5TX0lVQ1ZgLCB3aGljaCBpcyBvbmx5IHNldCB3aGVuIHRoZSBrZXJuZWwgaXMgcnVubmluZyB1bmRlciB0aGUgSUJNIHovVk0gaHlwZXJ2aXNvciAoYG1hY2hpbmVfaXNfdm0oKWApLiBTaW5jZSBRRU1VIGVtdWxhdGVzIEtWTSBvciBhIGJhcmUtbWV0YWwgTFBBUiBhbmQgZG9lcyBub3QgZW11bGF0ZSB6L1ZNLCB0aGlzIGNvZGUgcGF0aCBpcyBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIFFFTVUgb3IgR0NFLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGVycm9yIGhhbmRsaW5nIHBhdGggaW4gYGl1Y3Zfc29ja19jb25uZWN0YCBmb3IgQUZfSVVDViBzb2NrZXRzLiBIb3dldmVyLCB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJpY3RseSBndWFyZGVkIGJ5IGBpdWN2LVx1MDAzZXRyYW5zcG9ydCA9PSBBRl9JVUNWX1RSQU5TX0lVQ1ZgLCB3aGljaCBpcyBvbmx5IHNldCB3aGVuIHRoZSBrZXJuZWwgaXMgcnVubmluZyB1bmRlciB0aGUgSUJNIHovVk0gaHlwZXJ2aXNvciAoYG1hY2hpbmVfaXNfdm0oKWApLiBTaW5jZSBRRU1VIGVtdWxhdGVzIEtWTSBvciBhIGJhcmUtbWV0YWwgTFBBUiBhbmQgZG9lcyBub3QgZW11bGF0ZSB6L1ZNLCB0aGlzIGNvZGUgcGF0aCBpcyBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIFFFTVUgb3IgR0NFLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40OS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTUgMTU6NTY8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE1VDE1OjU0OjE3LjI5NTQyMDU1OVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyNzQyMTg2MDEyMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBlcnJvciBoYW5kbGluZyBwYXRoIGluIGBpdWN2X3NvY2tfY29ubmVjdGAgZm9yIEFGX0lVQ1Ygc29ja2V0cy4gSG93ZXZlciwgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RyaWN0bHkgZ3VhcmRlZCBieSBgaXVjdi1cXHUwMDNldHJhbnNwb3J0ID09IEFGX0lVQ1ZfVFJBTlNfSVVDVmAsIHdoaWNoIGlzIG9ubHkgc2V0IHdoZW4gdGhlIGtlcm5lbCBpcyBydW5uaW5nIHVuZGVyIHRoZSBJQk0gei9WTSBoeXBlcnZpc29yIChgbWFjaGluZV9pc192bSgpYCkuIFNpbmNlIFFFTVUgZW11bGF0ZXMgS1ZNIG9yIGEgYmFyZS1tZXRhbCBMUEFSIGFuZCBkb2VzIG5vdCBlbXVsYXRlIHovVk0sIHRoaXMgY29kZSBwYXRoIGlzIGltcG9zc2libGUgdG8gcmVhY2ggaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgUUVNVSBvciBHQ0UuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNVQxNTo1NDoxNy4yOTU0MjUyNjlaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM4MTEyOTMyOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGJmZWExNzQ0ODdiY2Y2NDUyMTdiYTFjOWJiMTg4ZmNjNmIxYTQxNDRcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFNhdCBBdWcgMTUgMTU6NTQ6MTYgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbmV0L2l1Y3YvYWZfaXVjdi5jIGIvbmV0L2l1Y3YvYWZfaXVjdi5jXFxuaW5kZXggZWEwNDdiYWI2NWU3Yy4uNmZiMDA0MWM0Yzk4NyAxMDA2NDRcXG4tLS0gYS9uZXQvaXVjdi9hZl9pdWN2LmNcXG4rKysgYi9uZXQvaXVjdi9hZl9pdWN2LmNcXG5AQCAtNzc4LDggKzc3OCwxNiBAQCBzdGF0aWMgaW50IGl1Y3Zfc29ja19jb25uZWN0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrYWRkcl91bnNpemVkICphZGRyLFxcbiBcXHRpZiAoc2stXFx1MDAzZXNrX3N0YXRlID09IElVQ1ZfRElTQ09OTiB8fCBzay1cXHUwMDNlc2tfc3RhdGUgPT0gSVVDVl9DTE9TRUQpXFxuIFxcdFxcdGVyciA9IC1FQ09OTlJFRlVTRUQ7XFxuIFxcbi1cXHRpZiAoZXJyIFxcdTAwMjZcXHUwMDI2IGl1Y3YtXFx1MDAzZXRyYW5zcG9ydCA9PSBBRl9JVUNWX1RSQU5TX0lVQ1YpXFxuK1xcdGlmIChlcnIgXFx1MDAyNlxcdTAwMjYgaXVjdi1cXHUwMDNldHJhbnNwb3J0ID09IEFGX0lVQ1ZfVFJBTlNfSVVDVikge1xcbiBcXHRcXHRpdWN2X3NldmVyX3BhdGgoc2ssIDApO1xcbitcXHRcXHQvKiBBIGNvbm5hY2sgbWF5IGhhdmUgbGFuZGVkIHdoaWxlIHRoZSB3YWl0IHdhcyB1bndpbmRpbmc7IHRoZVxcbitcXHRcXHQgKiBwYXRoIGlzIGdvbmUsIHNvIHRoZSBzb2NrZXQgbXVzdCBub3Qgc3RpbGwgY2xhaW0gaXQuXFxuK1xcdFxcdCAqL1xcbitcXHRcXHRpZiAoc2stXFx1MDAzZXNrX3N0YXRlID09IElVQ1ZfQ09OTkVDVEVEKSB7XFxuK1xcdFxcdFxcdHNrLVxcdTAwM2Vza19zdGF0ZSA9IElVQ1ZfRElTQ09OTjtcXG4rXFx0XFx0XFx0c2stXFx1MDAzZXNrX3N0YXRlX2NoYW5nZShzayk7XFxuK1xcdFxcdH1cXG4rXFx0fVxcbiBcXG4gZG9uZTpcXG4gXFx0cmVsZWFzZV9zb2NrKHNrKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTVUMTU6NTQ6MTcuNjc3NDMxMzM4WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MTI3MDM5ODM0NDMzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgZXJyb3IgaGFuZGxpbmcgcGF0aCBpbiBgaXVjdl9zb2NrX2Nvbm5lY3RgIGZvciBBRl9JVUNWIHNvY2tldHMuIEhvd2V2ZXIsIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cmljdGx5IGd1YXJkZWQgYnkgYGl1Y3YtXFx1MDAzZXRyYW5zcG9ydCA9PSBBRl9JVUNWX1RSQU5TX0lVQ1ZgLCB3aGljaCBpcyBvbmx5IHNldCB3aGVuIHRoZSBrZXJuZWwgaXMgcnVubmluZyB1bmRlciB0aGUgSUJNIHovVk0gaHlwZXJ2aXNvciAoYG1hY2hpbmVfaXNfdm0oKWApLiBTaW5jZSBRRU1VIGVtdWxhdGVzIEtWTSBvciBhIGJhcmUtbWV0YWwgTFBBUiBhbmQgZG9lcyBub3QgZW11bGF0ZSB6L1ZNLCB0aGlzIGNvZGUgcGF0aCBpcyBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIFFFTVUgb3IgR0NFLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgYmZlYTE3NDQ4N2JjZjY0NTIxN2JhMWM5YmIxODhmY2M2YjFhNDE0NFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTYXQgQXVnIDE1IDE1OjU0OjE2IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L2l1Y3YvYWZfaXVjdi5jIGIvbmV0L2l1Y3YvYWZfaXVjdi5jXG5pbmRleCBlYTA0N2JhYjY1ZTdjLi42ZmIwMDQxYzRjOTg3IDEwMDY0NFxuLS0tIGEvbmV0L2l1Y3YvYWZfaXVjdi5jXG4rKysgYi9uZXQvaXVjdi9hZl9pdWN2LmNcbkBAIC03NzgsOCArNzc4LDE2IEBAIHN0YXRpYyBpbnQgaXVjdl9zb2NrX2Nvbm5lY3Qoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHNvY2thZGRyX3Vuc2l6ZWQgKmFkZHIsXG4gXHRpZiAoc2stXHUwMDNlc2tfc3RhdGUgPT0gSVVDVl9ESVNDT05OIHx8IHNrLVx1MDAzZXNrX3N0YXRlID09IElVQ1ZfQ0xPU0VEKVxuIFx0XHRlcnIgPSAtRUNPTk5SRUZVU0VEO1xuIFxuLVx0aWYgKGVyciBcdTAwMjZcdTAwMjYgaXVjdi1cdTAwM2V0cmFuc3BvcnQgPT0gQUZfSVVDVl9UUkFOU19JVUNWKVxuK1x0aWYgKGVyciBcdTAwMjZcdTAwMjYgaXVjdi1cdTAwM2V0cmFuc3BvcnQgPT0gQUZfSVVDVl9UUkFOU19JVUNWKSB7XG4gXHRcdGl1Y3Zfc2V2ZXJfcGF0aChzaywgMCk7XG4rXHRcdC8qIEEgY29ubmFjayBtYXkgaGF2ZSBsYW5kZWQgd2hpbGUgdGhlIHdhaXQgd2FzIHVud2luZGluZzsgdGhlXG4rXHRcdCAqIHBhdGggaXMgZ29uZSwgc28gdGhlIHNvY2tldCBtdXN0IG5vdCBzdGlsbCBjbGFpbSBpdC5cbitcdFx0ICovXG4rXHRcdGlmIChzay1cdTAwM2Vza19zdGF0ZSA9PSBJVUNWX0NPTk5FQ1RFRCkge1xuK1x0XHRcdHNrLVx1MDAzZXNrX3N0YXRlID0gSVVDVl9ESVNDT05OO1xuK1x0XHRcdHNrLVx1MDAzZXNrX3N0YXRlX2NoYW5nZShzayk7XG4rXHRcdH1cbitcdH1cbiBcbiBkb25lOlxuIFx0cmVsZWFzZV9zb2NrKHNrKTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE1VDE1OjU0OjE3LjY3NzQzMjc1OFoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQzNzU2NTQ1MjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgUGF0Y2ggaW4gdGhlIElVQ1YgU29ja2V0IEZhbWlseSoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgaW4gYG5ldC9pdWN2L2FmX2l1Y3YuY2AsIHNwZWNpZmljYWxseSB0aGUgYGl1Y3Zfc29ja19jb25uZWN0YCBmdW5jdGlvbi4gVGhlIGNvZGUgYWRkcyBhIGNvbmRpdGlvbmFsIGNoZWNrIGFmdGVyIGFuIGVycm9yIGluIHRoZSBBRl9JVUNWIHNvY2tldCBmYW1pbHksIHJpZ2h0PyBJdCBsb29rcyBsaWtlIGlmIHRoZXJlJ3MgYW4gZXJyb3IgYW5kIHRoZSB0cmFuc3BvcnQgaXMgSVVDViwgaXQgc2V2ZXJzIHRoZSBwYXRoIGFuZCB0aGVuLCBpbXBvcnRhbnRseSwgY2hlY2tzIHRoZSBzb2NrZXQgc3RhdGUuIElmIGl0J3Mgc3RpbGwgY29ubmVjdGVkLCBpdCBzZXRzIGl0IHRvIGRpc2Nvbm5lY3RlZCBhbmQgdHJpZ2dlcnMgdGhlIHN0YXRlIGNoYW5nZSBjYWxsYmFjay4gVGhhdCdzIGEgcmVhc29uYWJsZSBkZWZlbnNpdmUgbWVhc3VyZSB0byBwcmV2ZW50IHRoZSBzb2NrZXQgZnJvbSBmYWxzZWx5IGNsYWltaW5nIGEgY29ubmVjdGlvbiBhZnRlciBhIGRpc2Nvbm5lY3QgZHVyaW5nIGEgYGNvbm5lY3QoKWAgYXR0ZW1wdC5cblxuTm93LCBBRl9JVUNWLi4uIHRoYXQncyB6L1ZNIElVQ1YsIHdoaWNoIG1lYW5zIHMzOTAgYXJjaGl0ZWN0dXJlLiBUaGlzIGlzIGltcG9ydGFudC4gTGV0IG1lIHF1aWNrbHkgY2hlY2sgaWYgdGhpcyBpcyBldmVuIHJlbGV2YW50IGZvciBzdGFuZGFyZCBRRU1VIHNldHVwcyBvciBpZiBpdCdzIGRlcGVuZGVudCBvbiBzcGVjaWZpYyBzMzkwIGhhcmR3YXJlLiBXYWl0LCBpc24ndCBzeXprYWxsZXIgY29uZmlndXJlZCB0byBmdXp6IHMzOTB4IGlmIGl0J3MgdGhlcmU/IFRob3VnaCBteSB0eXBpY2FsIHByaW9yaXR5IGlzIHdoZXRoZXIgZnV6emluZyBpcyB3b3J0aCBkb2luZywgSSdsbCBuZWVkIHRvIGNoZWNrIHRoZSBLY29uZmlnLCBzbyBJJ20gdGhpbmtpbmcgSVVDViBpcyBzMzkwIHNwZWNpZmljLiBBbHJpZ2h0LCBsZXQncyBzZWUgd2hhdCB0aGUgYG5ldC9pdWN2L0tjb25maWdgIGZpbGUgdGVsbHMgdXMgYWJvdXQgdGhpcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjEzNCwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI5MywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE1VDE1OjU0OjIyLjA1MzA5MDQzWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUxOTA4NTQ5LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQUZfSVVDVlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXVjdi9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNVQxNTo1NDoyMi4xMDUwMDkyNDlaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyODMzODczMzY3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjpcblxuKipJbnZlc3RpZ2F0aW5nIE5ldHdvcmsgQ29uZmlndXJhdGlvbioqXG5cblJpZ2h0LCBsZXQncyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hlcmUgdGhpcyBuZXR3b3JrIGNvbmZpZ3VyYXRpb24gbGl2ZXMuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBkaXZlIGludG8gdGhlIGBuZXRgIGRpcmVjdG9yeS4gU2luY2Ugd2UncmUgZGVhbGluZyB3aXRoIElVQ1Ygc3BlY2lmaWNhbGx5LCB0aGUgb2J2aW91cyBwbGFjZSB0byBzdGFydCBpcyBlaXRoZXIgYG5ldC9pdWN2L0tjb25maWdgLCBvciBqdXN0IHRoZSBnZW5lcmFsIGBuZXQvS2NvbmZpZ2AuIEFuZCwgaWYgdGhlIGNvbmZpZ3VyYXRpb24gZXhpc3RzLCB0aGVuIEknbGwgbG9vayBmb3IgYSBjb3JyZXNwb25kaW5nIGBNYWtlZmlsZWAgYW5kIGl0J3MgbW9zdCBsaWtlbHkgdG8gYmUgaW4gdGhlIGBuZXQvaXVjdi9gIGRpcmVjdG9yeSB0b28uIFRoZXNlIEtjb25maWcgZmlsZXMgYXJlIHRoZSBoZWFydCBvZiB0aGUgY29uZmlndXJhdGlvbiBwcm9jZXNzLCBzbyB0aGF0J3MgZGVmaW5pdGVseSB0aGUgZmlyc3QgbG9naWNhbCBzdGVwLiBUaW1lIHRvIGNoZWNrIHRob3NlIGZpbGVzIGFuZCBzZWUgd2hhdCB0aGUgYnVpbGQgc3lzdGVtIGhhcyB0byBvZmZlci5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjc2NSwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE1VDE1OjU0OjI0LjkzODg4NTIxN1oiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjE4MTA1OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJBRl9JVUNWXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pdWN2L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXVjdi9LY29uZmlnPTExPWNvbmZpZyBBRklVQ1ZcXG4tLVxcbm5ldC9pdWN2L0tjb25maWctMTMtXFx0ZGVmX3RyaXN0YXRlIG0gaWYgUUVUSF9MMyB8fCBJVUNWXFxubmV0L2l1Y3YvS2NvbmZpZzoxNDpcXHRwcm9tcHQgXFxcIkFGX0lVQ1YgU29ja2V0IHN1cHBvcnQgKFMzOTAgLSB6L1ZNIGFuZCBIaXBlclNvY2tldHMgdHJhbnNwb3J0KVxcXCJcXG5uZXQvaXVjdi9LY29uZmlnLTE1LVxcdGhlbHBcXG5uZXQvaXVjdi9LY29uZmlnOjE2OlxcdCAgU2VsZWN0IHRoaXMgb3B0aW9uIGlmIHlvdSB3YW50IHRvIHVzZSBBRl9JVUNWIHNvY2tldCBhcHBsaWNhdGlvbnNcXG5uZXQvaXVjdi9LY29uZmlnLTE3LVxcdCAgYmFzZWQgb24gei9WTSBpbnRlci11c2VyIGNvbW11bmljYXRpb24gdmVoaWNsZSBvciBiYXNlZCBvblxcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jPTQyPXN0YXRpYyBzdHJ1Y3QgcHJvdG8gaXVjdl9wcm90byA9IHtcXG5uZXQvaXVjdi9hZl9pdWN2LmM6NDM6XFx0Lm5hbWVcXHRcXHQ9IFxcXCJBRl9JVUNWXFxcIixcXG5uZXQvaXVjdi9hZl9pdWN2LmMtNDQtXFx0Lm93bmVyXFx0XFx0PSBUSElTX01PRFVMRSxcXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYz00OT1zdGF0aWMgc3RydWN0IGl1Y3ZfaGFuZGxlciBhZl9pdWN2X2hhbmRsZXI7XFxubmV0L2l1Y3YvYWZfaXVjdi5jLTUwLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYzo1MTovKiBzcGVjaWFsIEFGX0lVQ1YgSVBSTSBtZXNzYWdlcyAqL1xcbm5ldC9pdWN2L2FmX2l1Y3YuYy01Mi1zdGF0aWMgY29uc3QgdTggaXBybV9zaHV0ZG93bls4XSA9XFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmM9MTA3PXN0YXRpYyBpbmxpbmUgdm9pZCBsb3dfbm1jcHkodW5zaWduZWQgY2hhciAqZHN0LCBjaGFyICpzcmMpXFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmMtMTE4LSAqXFxubmV0L2l1Y3YvYWZfaXVjdi5jOjExOTogKiBGb3IgSVVDVl9JUFJNREFUQSwgQUZfSVVDViB1c2VzIHRoZSBmb2xsb3dpbmcgY29udmVudGlvbiB0byB0cmFuc3BvcnQgc29ja2V0XFxubmV0L2l1Y3YvYWZfaXVjdi5jLTEyMC0gKiBkYXRhOlxcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jPTE2Nj1zdGF0aWMgaW5saW5lIGludCBpdWN2X2JlbG93X21zZ2xpbShzdHJ1Y3Qgc29jayAqc2spXFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmMtMTcxLVxcdFxcdHJldHVybiAxO1xcbm5ldC9pdWN2L2FmX2l1Y3YuYzoxNzI6XFx0aWYgKGl1Y3YtXFx1MDAzZXRyYW5zcG9ydCA9PSBBRl9JVUNWX1RSQU5TX0lVQ1YpXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTE3My1cXHRcXHRyZXR1cm4gKGF0b21pY19yZWFkKFxcdTAwMjZpdWN2LVxcdTAwM2Vza2JzX2luX3htaXQpIFxcdTAwM2MgaXVjdi1cXHUwMDNlcGF0aC1cXHUwMDNlbXNnbGltKTtcXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYz0xOTc9c3RhdGljIGludCBhZml1Y3ZfaHNfc2VuZChzdHJ1Y3QgaXVjdl9tZXNzYWdlICppbXNnLCBzdHJ1Y3Qgc29jayAqc29jayxcXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYy0yMDctXFxubmV0L2l1Y3YvYWZfaXVjdi5jOjIwODpcXHRwaHNfaGRyLVxcdTAwM2VtYWdpYyA9IEVUSF9QX0FGX0lVQ1Y7XFxubmV0L2l1Y3YvYWZfaXVjdi5jLTIwOS1cXHRwaHNfaGRyLVxcdTAwM2V2ZXJzaW9uID0gMTtcXG5uZXQvaXVjdi9hZl9pdWN2LmMtMjEwLVxcdHBoc19oZHItXFx1MDAzZWZsYWdzID0gZmxhZ3M7XFxubmV0L2l1Y3YvYWZfaXVjdi5jOjIxMTpcXHRpZiAoZmxhZ3MgPT0gQUZfSVVDVl9GTEFHX1NZTilcXG5uZXQvaXVjdi9hZl9pdWN2LmMtMjEyLVxcdFxcdHBoc19oZHItXFx1MDAzZXdpbmRvdyA9IGl1Y3YtXFx1MDAzZW1zZ2xpbWl0O1xcbm5ldC9pdWN2L2FmX2l1Y3YuYzoyMTM6XFx0ZWxzZSBpZiAoKGZsYWdzID09IEFGX0lVQ1ZfRkxBR19XSU4pIHx8ICFmbGFncykge1xcbm5ldC9pdWN2L2FmX2l1Y3YuYy0yMTQtXFx0XFx0Y29uZmlybV9yZWN2ID0gYXRvbWljX3JlYWQoXFx1MDAyNml1Y3YtXFx1MDAzZW1zZ19yZWN2KTtcXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYy0yMTYtXFx0XFx0aWYgKGNvbmZpcm1fcmVjdilcXG5uZXQvaXVjdi9hZl9pdWN2LmM6MjE3OlxcdFxcdFxcdHBoc19oZHItXFx1MDAzZWZsYWdzID0gcGhzX2hkci1cXHUwMDNlZmxhZ3MgfCBBRl9JVUNWX0ZMQUdfV0lOO1xcbm5ldC9pdWN2L2FmX2l1Y3YuYy0yMTgtXFx0fVxcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTIzNS1cXG5uZXQvaXVjdi9hZl9pdWN2LmM6MjM2OlxcdGRldl9oYXJkX2hlYWRlcihza2IsIHNrYi1cXHUwMDNlZGV2LCBFVEhfUF9BRl9JVUNWLCBOVUxMLCBOVUxMLCBza2ItXFx1MDAzZWxlbik7XFxubmV0L2l1Y3YvYWZfaXVjdi5jLTIzNy1cXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYy0yNTAtXFx0fVxcbm5ldC9pdWN2L2FmX2l1Y3YuYzoyNTE6XFx0c2tiLVxcdTAwM2Vwcm90b2NvbCA9IGNwdV90b19iZTE2KEVUSF9QX0FGX0lVQ1YpO1xcbm5ldC9pdWN2L2FmX2l1Y3YuYy0yNTItXFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmM9Mzk1PXN0YXRpYyB2b2lkIGl1Y3Zfc29ja19jbG9zZShzdHJ1Y3Qgc29jayAqc2spXFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmMtNDA4LVxcdGNhc2UgSVVDVl9DT05ORUNURUQ6XFxubmV0L2l1Y3YvYWZfaXVjdi5jOjQwOTpcXHRcXHRpZiAoaXVjdi1cXHUwMDNldHJhbnNwb3J0ID09IEFGX0lVQ1ZfVFJBTlNfSElQRVIpIHtcXG5uZXQvaXVjdi9hZl9pdWN2LmM6NDEwOlxcdFxcdFxcdGVyciA9IGl1Y3Zfc2VuZF9jdHJsKHNrLCBBRl9JVUNWX0ZMQUdfRklOKTtcXG5uZXQvaXVjdi9hZl9pdWN2LmMtNDExLVxcdFxcdFxcdHNrLVxcdTAwM2Vza19zdGF0ZSA9IElVQ1ZfRElTQ09OTjtcXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYz00NjY9c3RhdGljIHN0cnVjdCBzb2NrICppdWN2X3NvY2tfYWxsb2Moc3RydWN0IHNvY2tldCAqc29jaywgaW50IHByb3RvLCBnZnBfdCBwcmlvLCBpbnQga2VybilcXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYy00OTMtXFx0aWYgKHByX2l1Y3YpXFxubmV0L2l1Y3YvYWZfaXVjdi5jOjQ5NDpcXHRcXHRpdWN2LVxcdTAwM2V0cmFuc3BvcnQgPSBBRl9JVUNWX1RSQU5TX0lVQ1Y7XFxubmV0L2l1Y3YvYWZfaXVjdi5jLTQ5NS1cXHRlbHNlXFxubmV0L2l1Y3YvYWZfaXVjdi5jOjQ5NjpcXHRcXHRpdWN2LVxcdTAwM2V0cmFuc3BvcnQgPSBBRl9JVUNWX1RSQU5TX0hJUEVSO1xcbm5ldC9pdWN2L2FmX2l1Y3YuYy00OTctXFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmM9NTgyPXN0YXRpYyBpbnQgaXVjdl9zb2NrX2JpbmQoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHNvY2thZGRyX3Vuc2l6ZWQgKmFkZHIsXFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmMtNTkzLVxcdGlmIChhZGRyX2xlbiBcXHUwMDNjIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaXVjdikgfHxcXG5uZXQvaXVjdi9hZl9pdWN2LmM6NTk0OlxcdCAgICBhZGRyLVxcdTAwM2VzYV9mYW1pbHkgIT0gQUZfSVVDVilcXG5uZXQvaXVjdi9hZl9pdWN2LmMtNTk1LVxcdFxcdHJldHVybiAtRUlOVkFMO1xcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTYzMy1cXHRcXHRcXHRzay1cXHUwMDNlc2tfc3RhdGUgPSBJVUNWX0JPVU5EO1xcbm5ldC9pdWN2L2FmX2l1Y3YuYzo2MzQ6XFx0XFx0XFx0aXVjdi1cXHUwMDNldHJhbnNwb3J0ID0gQUZfSVVDVl9UUkFOU19ISVBFUjtcXG5uZXQvaXVjdi9hZl9pdWN2LmMtNjM1LVxcdFxcdFxcdGlmICghaXVjdi1cXHUwMDNlbXNnbGltaXQpXFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmMtNjQ3LVxcdFxcdHNrLVxcdTAwM2Vza19zdGF0ZSA9IElVQ1ZfQk9VTkQ7XFxubmV0L2l1Y3YvYWZfaXVjdi5jOjY0ODpcXHRcXHRpdWN2LVxcdTAwM2V0cmFuc3BvcnQgPSBBRl9JVUNWX1RSQU5TX0lVQ1Y7XFxubmV0L2l1Y3YvYWZfaXVjdi5jLTY0OS1cXHRcXHRzay1cXHUwMDNlc2tfYWxsb2NhdGlvbiB8PSBHRlBfRE1BO1xcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jPTY2NT1zdGF0aWMgaW50IGl1Y3Zfc29ja19hdXRvYmluZChzdHJ1Y3Qgc29jayAqc2spXFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmMtNjczLVxcdG1lbWNweShpdWN2LVxcdTAwM2VzcmNfdXNlcl9pZCwgaXVjdl91c2VyaWQsIDgpO1xcbm5ldC9pdWN2L2FmX2l1Y3YuYzo2NzQ6XFx0aXVjdi1cXHUwMDNldHJhbnNwb3J0ID0gQUZfSVVDVl9UUkFOU19JVUNWO1xcbm5ldC9pdWN2L2FmX2l1Y3YuYy02NzUtXFx0c2stXFx1MDAzZXNrX2FsbG9jYXRpb24gfD0gR0ZQX0RNQTtcXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYz03MzM9c3RhdGljIGludCBpdWN2X3NvY2tfY29ubmVjdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29ja2FkZHJfdW5zaXplZCAqYWRkcixcXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYy03NDAtXFxubmV0L2l1Y3YvYWZfaXVjdi5jOjc0MTpcXHRpZiAoYWxlbiBcXHUwMDNjIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaXVjdikgfHwgYWRkci1cXHUwMDNlc2FfZmFtaWx5ICE9IEFGX0lVQ1YpXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTc0Mi1cXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYy03NDctXFx0aWYgKHNrLVxcdTAwM2Vza19zdGF0ZSA9PSBJVUNWX09QRU4gXFx1MDAyNlxcdTAwMjZcXG5uZXQvaXVjdi9hZl9pdWN2LmM6NzQ4OlxcdCAgICBpdWN2LVxcdTAwM2V0cmFuc3BvcnQgPT0gQUZfSVVDVl9UUkFOU19ISVBFUilcXG5uZXQvaXVjdi9hZl9pdWN2LmMtNzQ5LVxcdFxcdHJldHVybiAtRUJBREZEOyAvKiBleHBsaWNpdCBiaW5kIHJlcXVpcmVkICovXFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmMtNzY1LVxcbm5ldC9pdWN2L2FmX2l1Y3YuYzo3NjY6XFx0aWYgKGl1Y3YtXFx1MDAzZXRyYW5zcG9ydCA9PSBBRl9JVUNWX1RSQU5TX0hJUEVSKVxcbm5ldC9pdWN2L2FmX2l1Y3YuYzo3Njc6XFx0XFx0ZXJyID0gaXVjdl9zZW5kX2N0cmwoc29jay1cXHUwMDNlc2ssIEFGX0lVQ1ZfRkxBR19TWU4pO1xcbm5ldC9pdWN2L2FmX2l1Y3YuYy03NjgtXFx0ZWxzZVxcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTc4MC1cXG5uZXQvaXVjdi9hZl9pdWN2LmM6NzgxOlxcdGlmIChlcnIgXFx1MDAyNlxcdTAwMjYgaXVjdi1cXHUwMDNldHJhbnNwb3J0ID09IEFGX0lVQ1ZfVFJBTlNfSVVDVikge1xcbm5ldC9pdWN2L2FmX2l1Y3YuYy03ODItXFx0XFx0aXVjdl9zZXZlcl9wYXRoKHNrLCAwKTtcXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYz04Nzc9c3RhdGljIGludCBpdWN2X3NvY2tfZ2V0bmFtZShzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29ja2FkZHIgKmFkZHIsXFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmMtODgzLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYzo4ODQ6XFx0YWRkci1cXHUwMDNlc2FfZmFtaWx5ID0gQUZfSVVDVjtcXG5uZXQvaXVjdi9hZl9pdWN2LmMtODg1LVxcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jPTkyND1zdGF0aWMgaW50IGl1Y3Zfc29ja19zZW5kbXNnKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZyxcXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYy0xMDA2LVxcdCAqIGZvciBTT0NLX1NUUkVBTSB3ZSBtaWdodCB3YW50IHRvIGltcHJvdmUgaXQgaW4gZnV0dXJlICovXFxubmV0L2l1Y3YvYWZfaXVjdi5jOjEwMDc6XFx0aWYgKGl1Y3YtXFx1MDAzZXRyYW5zcG9ydCA9PSBBRl9JVUNWX1RSQU5TX0hJUEVSKSB7XFxubmV0L2l1Y3YvYWZfaXVjdi5jLTEwMDgtXFx0XFx0aGVhZHJvb20gPSBzaXplb2Yoc3RydWN0IGFmX2l1Y3ZfdHJhbnNfaGRyKSArXFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmMtMTA1MS1cXG5uZXQvaXVjdi9hZl9pdWN2LmM6MTA1MjpcXHRpZiAoaXVjdi1cXHUwMDNldHJhbnNwb3J0ID09IEFGX0lVQ1ZfVFJBTlNfSElQRVIpIHtcXG5uZXQvaXVjdi9hZl9pdWN2LmMtMTA1My1cXHRcXHRhdG9taWNfaW5jKFxcdTAwMjZpdWN2LVxcdTAwM2Vtc2dfc2VudCk7XFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmM9MTI0NT1zdGF0aWMgaW50IGl1Y3Zfc29ja19yZWN2bXNnKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZyxcXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYy0xMzE2LVxcdFxcdGNvbnN1bWVfc2tiKHNrYik7XFxubmV0L2l1Y3YvYWZfaXVjdi5jOjEzMTc6XFx0XFx0aWYgKGl1Y3YtXFx1MDAzZXRyYW5zcG9ydCA9PSBBRl9JVUNWX1RSQU5TX0hJUEVSKSB7XFxubmV0L2l1Y3YvYWZfaXVjdi5jLTEzMTgtXFx0XFx0XFx0YXRvbWljX2luYyhcXHUwMDI2aXVjdi1cXHUwMDNlbXNnX3JlY3YpO1xcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTEzNDMtXFx0XFx0XFx0XFx0XFx0XFx0XFx0aXVjdi1cXHUwMDNlbXNnbGltaXQgLyAyKSB7XFxubmV0L2l1Y3YvYWZfaXVjdi5jOjEzNDQ6XFx0XFx0XFx0XFx0ZXJyID0gaXVjdl9zZW5kX2N0cmwoc2ssIEFGX0lVQ1ZfRkxBR19XSU4pO1xcbm5ldC9pdWN2L2FmX2l1Y3YuYy0xMzQ1LVxcdFxcdFxcdFxcdGlmIChlcnIpIHtcXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYz0xNDI2PXN0YXRpYyBpbnQgaXVjdl9zb2NrX3NodXRkb3duKHN0cnVjdCBzb2NrZXQgKnNvY2ssIGludCBob3cpXFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmMtMTQ1MS1cXHQgICAgc2stXFx1MDAzZXNrX3N0YXRlID09IElVQ1ZfQ09OTkVDVEVEKSB7XFxubmV0L2l1Y3YvYWZfaXVjdi5jOjE0NTI6XFx0XFx0aWYgKGl1Y3YtXFx1MDAzZXRyYW5zcG9ydCA9PSBBRl9JVUNWX1RSQU5TX0lVQ1YpIHtcXG5uZXQvaXVjdi9hZl9pdWN2LmMtMTQ1My1cXHRcXHRcXHR0eG1zZy5jbGFzcyA9IDA7XFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmMtMTQ3MC1cXHRcXHR9IGVsc2VcXG5uZXQvaXVjdi9hZl9pdWN2LmM6MTQ3MTpcXHRcXHRcXHRpdWN2X3NlbmRfY3RybChzaywgQUZfSVVDVl9GTEFHX1NIVCk7XFxubmV0L2l1Y3YvYWZfaXVjdi5jLTE0NzItXFx0fVxcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTE0NzUtXFx0aWYgKGhvdyA9PSBSQ1ZfU0hVVERPV04gfHwgaG93ID09IFNIVVRET1dOX01BU0spIHtcXG5uZXQvaXVjdi9hZl9pdWN2LmM6MTQ3NjpcXHRcXHRpZiAoKGl1Y3YtXFx1MDAzZXRyYW5zcG9ydCA9PSBBRl9JVUNWX1RSQU5TX0lVQ1YpIFxcdTAwMjZcXHUwMDI2XFxubmV0L2l1Y3YvYWZfaXVjdi5jLTE0NzctXFx0XFx0ICAgIGl1Y3YtXFx1MDAzZXBhdGgpIHtcXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYz0xNjE1PXN0YXRpYyBpbnQgaXVjdl9jYWxsYmFja19jb25ucmVxKHN0cnVjdCBpdWN2X3BhdGggKnBhdGgsXFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmMtMTY3NC1cXHRpdWN2X3NvY2tfaW5pdChuc2ssIHNrKTtcXG5uZXQvaXVjdi9hZl9pdWN2LmM6MTY3NTpcXHRuaXVjdi1cXHUwMDNldHJhbnNwb3J0ID0gQUZfSVVDVl9UUkFOU19JVUNWO1xcbm5ldC9pdWN2L2FmX2l1Y3YuYy0xNjc2LVxcdG5zay1cXHUwMDNlc2tfYWxsb2NhdGlvbiB8PSBHRlBfRE1BO1xcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jPTE4NzI9c3RhdGljIGludCBhZml1Y3ZfaHNfY2FsbGJhY2tfc3luKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYy0xODgyLVxcdFxcdGFmaXVjdl9zd2FwX3NyY19kZXN0KHNrYik7XFxubmV0L2l1Y3YvYWZfaXVjdi5jOjE4ODM6XFx0XFx0dHJhbnNfaGRyLVxcdTAwM2VmbGFncyA9IEFGX0lVQ1ZfRkxBR19TWU4gfCBBRl9JVUNWX0ZMQUdfRklOO1xcbm5ldC9pdWN2L2FmX2l1Y3YuYy0xODg0LVxcdFxcdGVyciA9IGRldl9xdWV1ZV94bWl0KHNrYik7XFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmMtMTg5NC1cXHRcXHRhZml1Y3Zfc3dhcF9zcmNfZGVzdChza2IpO1xcbm5ldC9pdWN2L2FmX2l1Y3YuYzoxODk1OlxcdFxcdHRyYW5zX2hkci1cXHUwMDNlZmxhZ3MgPSBBRl9JVUNWX0ZMQUdfU1lOIHwgQUZfSVVDVl9GTEFHX0ZJTjtcXG5uZXQvaXVjdi9hZl9pdWN2LmMtMTg5Ni1cXHRcXHRlcnIgPSBkZXZfcXVldWVfeG1pdChza2IpO1xcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTE5MDQtXFx0aXVjdl9zb2NrX2luaXQobnNrLCBzayk7XFxubmV0L2l1Y3YvYWZfaXVjdi5jOjE5MDU6XFx0bml1Y3YtXFx1MDAzZXRyYW5zcG9ydCA9IEFGX0lVQ1ZfVFJBTlNfSElQRVI7XFxubmV0L2l1Y3YvYWZfaXVjdi5jLTE5MDYtXFx0bml1Y3YtXFx1MDAzZW1zZ2xpbWl0ID0gaXVjdi1cXHUwMDNlbXNnbGltaXQ7XFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmMtMTkxOC1cXHRhZml1Y3Zfc3dhcF9zcmNfZGVzdChza2IpO1xcbm5ldC9pdWN2L2FmX2l1Y3YuYzoxOTE5OlxcdHRyYW5zX2hkci1cXHUwMDNlZmxhZ3MgPSBBRl9JVUNWX0ZMQUdfU1lOIHwgQUZfSVVDVl9GTEFHX0FDSztcXG5uZXQvaXVjdi9hZl9pdWN2LmMtMTkyMC1cXHR0cmFuc19oZHItXFx1MDAzZXdpbmRvdyA9IG5pdWN2LVxcdTAwM2Vtc2dsaW1pdDtcXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYz0yMDY2PXN0YXRpYyBpbnQgYWZpdWN2X2hzX3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTIwODktXFx0c2tfZm9yX2VhY2goc2ssIFxcdTAwMjZpdWN2X3NrX2xpc3QuaGVhZCkge1xcbm5ldC9pdWN2L2FmX2l1Y3YuYzoyMDkwOlxcdFxcdGlmICh0cmFuc19oZHItXFx1MDAzZWZsYWdzID09IEFGX0lVQ1ZfRkxBR19TWU4pIHtcXG5uZXQvaXVjdi9hZl9pdWN2LmMtMjA5MS1cXHRcXHRcXHRpZiAoKCFtZW1jbXAoXFx1MDAyNml1Y3Zfc2soc2spLVxcdTAwM2VzcmNfbmFtZSxcXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYy0yMTMwLVxcdHN3aXRjaCAodHJhbnNfaGRyLVxcdTAwM2VmbGFncykge1xcbm5ldC9pdWN2L2FmX2l1Y3YuYzoyMTMxOlxcdGNhc2UgQUZfSVVDVl9GTEFHX1NZTjpcXG5uZXQvaXVjdi9hZl9pdWN2LmMtMjEzMi1cXHRcXHQvKiBjb25uZWN0IHJlcXVlc3QgKi9cXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYy0yMTM0LVxcdFxcdGJyZWFrO1xcbm5ldC9pdWN2L2FmX2l1Y3YuYzoyMTM1OlxcdGNhc2UgKEFGX0lVQ1ZfRkxBR19TWU4gfCBBRl9JVUNWX0ZMQUdfQUNLKTpcXG5uZXQvaXVjdi9hZl9pdWN2LmMtMjEzNi1cXHRcXHQvKiBjb25uZWN0IHJlcXVlc3QgY29uZmlybWVkICovXFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmMtMjEzOC1cXHRcXHRicmVhaztcXG5uZXQvaXVjdi9hZl9pdWN2LmM6MjEzOTpcXHRjYXNlIChBRl9JVUNWX0ZMQUdfU1lOIHwgQUZfSVVDVl9GTEFHX0ZJTik6XFxubmV0L2l1Y3YvYWZfaXVjdi5jLTIxNDAtXFx0XFx0LyogY29ubmVjdCByZXF1ZXN0IHJlZnVzZWQgKi9cXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYy0yMTQyLVxcdFxcdGJyZWFrO1xcbm5ldC9pdWN2L2FmX2l1Y3YuYzoyMTQzOlxcdGNhc2UgKEFGX0lVQ1ZfRkxBR19GSU4pOlxcbm5ldC9pdWN2L2FmX2l1Y3YuYy0yMTQ0LVxcdFxcdC8qIGNsb3NlIHJlcXVlc3QgKi9cXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYy0yMTQ2LVxcdFxcdGJyZWFrO1xcbm5ldC9pdWN2L2FmX2l1Y3YuYzoyMTQ3OlxcdGNhc2UgKEFGX0lVQ1ZfRkxBR19XSU4pOlxcbm5ldC9pdWN2L2FmX2l1Y3YuYy0yMTQ4LVxcdFxcdGVyciA9IGFmaXVjdl9oc19jYWxsYmFja193aW4oc2ssIHNrYik7XFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmMtMjE1My1cXHRcXHRmYWxsdGhyb3VnaDtcXHQvKiBhbmQgcmVjZWl2ZSBub24temVybyBsZW5ndGggZGF0YSAqL1xcbm5ldC9pdWN2L2FmX2l1Y3YuYzoyMTU0OlxcdGNhc2UgKEFGX0lVQ1ZfRkxBR19TSFQpOlxcbm5ldC9pdWN2L2FmX2l1Y3YuYy0yMTU1LVxcdFxcdC8qIHNodXRkb3duIHJlcXVlc3QgKi9cXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYz0yMjE0PXN0YXRpYyBpbnQgYWZpdWN2X25ldGRldl9ldmVudChzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKnRoaXMsXFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmMtMjIyOC1cXHRcXHRcXHRcXHRpZiAoZXZlbnQgPT0gTkVUREVWX0dPSU5HX0RPV04pXFxubmV0L2l1Y3YvYWZfaXVjdi5jOjIyMjk6XFx0XFx0XFx0XFx0XFx0aXVjdl9zZW5kX2N0cmwoc2ssIEFGX0lVQ1ZfRkxBR19GSU4pO1xcbm5ldC9pdWN2L2FmX2l1Y3YuYy0yMjMwLVxcdFxcdFxcdFxcdHNrLVxcdTAwM2Vza19zdGF0ZSA9IElVQ1ZfRElTQ09OTjtcXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYz0yMjk2PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X3Byb3RvX2ZhbWlseSBpdWN2X3NvY2tfZmFtaWx5X29wcyA9IHtcXG5uZXQvaXVjdi9hZl9pdWN2LmM6MjI5NzpcXHQuZmFtaWx5XFx0PSBBRl9JVUNWLFxcbm5ldC9pdWN2L2FmX2l1Y3YuYy0yMjk4LVxcdC5vd25lclxcdD0gVEhJU19NT0RVTEUsXFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmM9MjMwMj1zdGF0aWMgc3RydWN0IHBhY2tldF90eXBlIGl1Y3ZfcGFja2V0X3R5cGUgPSB7XFxubmV0L2l1Y3YvYWZfaXVjdi5jOjIzMDM6XFx0LnR5cGUgPSBjcHVfdG9fYmUxNihFVEhfUF9BRl9JVUNWKSxcXG5uZXQvaXVjdi9hZl9pdWN2LmMtMjMwNC1cXHQuZnVuYyA9IGFmaXVjdl9oc19yY3YsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE1VDE1OjU0OjI0Ljk4NTA3MzQ0NVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM5NTcyMTI4NzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqSW52ZXN0aWdhdGluZyB0aGUgQUZfSVVDViBTb2NrZXQgU3VwcG9ydCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgYG5ldC9pdWN2L0tjb25maWdgIGZpbGUsIGFuZCByaWdodCBvZmYgdGhlIGJhdCwgaXQncyBwcmV0dHkgY2xlYXIgdGhpcyBpcyBhIHNwZWNpYWxpemVkIGNvbmZpZ3VyYXRpb24uIFRoZSBgY29uZmlnIEFGX0lVQ1ZgIGVudHJ5LCB3aXRoIGl0cyBgZGVmX3RyaXN0YXRlIG0gaWYgUUVUSF9MMyB8fCBJVUNWYCwgc2NyZWFtcyBTMzkwIGFyY2hpdGVjdHVyZS4gSXQncyBleHBsaWNpdGx5IHRpZWQgdG8gei9WTSBhbmQgSGlwZXJTb2NrZXRzIHRyYW5zcG9ydCwgd2hpY2ggYXJlIGhhbGxtYXJrcyBvZiB0aGF0IGVudmlyb25tZW50LlxuXG5CdXQgd2FpdCBhIG1pbnV0ZS4uLm15IG1pbmQgc3RhcnRzIHRvIHdhbmRlciwgY2FuIHRoaXMgYmUgY29tcGlsZWQgb24geDg2PyBUaGF0IHdvdWxkIGJlIHVuY29udmVudGlvbmFsLCB0byBzYXkgdGhlIGxlYXN0LiBJdCdzIGhpZ2hseSB1bmxpa2VseSB0aGF0IGNvZGUgZGVzaWduZWQgZm9yIGFuIFMzOTAgYXJjaGl0ZWN0dXJlIHdvdWxkIGhhdmUgYW55IHVzZSBpbiB4ODYgdW5sZXNzIHRoZXJlIHdhcyBzb21lIHNvcnQgb2Ygd2VpcmQgdHJhbnNsYXRpb24gbGF5ZXIgb3IgZW11bGF0aW9uIGludm9sdmVkLlxuXG5UaGUgbmV4dCBzdGVwIGlzIG9idmlvdXMuIEkgbmVlZCB0byB0cmFjZSB0aGUgZGVwZW5kZW5jaWVzLiBJIGhhdmUgdG8gc2VlIGlmIHRoaXMgYG5ldC9pdWN2L0tjb25maWdgIGZpbGUgaXMgZXZlbiAqc291cmNlZCogd2l0aGluIHRoZSBtb3JlIGdlbmVyYWwgYG5ldC9LY29uZmlnYCBmaWxlLiBUaGF0J2xsIHRlbGwgbWUgaWYgaXQncyBldmVuICpwb3RlbnRpYWxseSogaW5jbHVkZWQgaW4gYSBicm9hZGVyLCBtb3JlIGFyY2hpdGVjdHVyZS1hZ25vc3RpYyBidWlsZC4gVGhhdOKAmXMgdGhlIG1vc3QgbGlrZWx5IHNvdXJjZSBvZiB0aGUgYW5zd2VyIGhlcmUsIHRoZSBLY29uZmlnIGZpbGUgZm9yIG5ldHdvcmsuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgyNzQsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTVUMTU6NTQ6MjguOTQyMjg4NjZaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDc1MzExNTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaXVjdlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvS2NvbmZpZz04OD1zb3VyY2UgXFxcIm5ldC94ZnJtL0tjb25maWdcXFwiXFxubmV0L0tjb25maWc6ODk6c291cmNlIFxcXCJuZXQvaXVjdi9LY29uZmlnXFxcIlxcbm5ldC9LY29uZmlnLTkwLXNvdXJjZSBcXFwibmV0L3NtYy9LY29uZmlnXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNVQxNTo1NDoyOC45ODk4MzExNTlaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyODY2MTIxODU3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjpcblxuKipVbnBhY2tpbmcgYSBLY29uZmlnIERlcGVuZGVuY3kqKlxuXG5IbW0sIGhvbGQgb24gYSBzZWNvbmQuLi4gSXQncyBoaXR0aW5nIG1lIHRoYXQgYG5ldC9pdWN2L0tjb25maWdgIGdldHMgc291cmNlZCB1bmNvbmRpdGlvbmFsbHkgZnJvbSB3aXRoaW4gYG5ldC9LY29uZmlnYCwgcmlnaHQ/IEkgbmVlZCB0byBkb3VibGUtY2hlY2sgdGhhdC4gVGhpcyBoYXMgcG90ZW50aWFsIGltcGxpY2F0aW9ucyBmb3IgY29uZmlndXJhYmlsaXR5IGFuZCBkZXBlbmRlbmNpZXMsIHdoaWNoIEknZCBleHBlY3QgdG8gYmUgbW9yZSBncmFudWxhci4gSSBuZWVkIHRvIHRha2UgYSBmcmVzaCBsb29rIGF0IGBuZXQvaXVjdi9LY29uZmlnYCBhbmQgbWFrZSBzdXJlIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhpcyB0b3AtbGV2ZWwgZGVwZW5kZW5jeSBpcyBjb3JyZWN0LiBJdCdzIGEga2V5IGRldGFpbCB0byBmdWxseSBhc3Nlc3MgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGUgbmV0d29yayBjb25maWd1cmF0aW9uLiBJIGp1c3Qgd2FudCB0byBlbnN1cmUgdGhlcmUgYXJlbid0IGFueSB1bmV4cGVjdGVkIGNvbnNlcXVlbmNlcyBvciBkZXNpZ24gZGVjaXNpb25zIGJha2VkIGludG8gdGhhdCBpbmNsdXNpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg3NjEsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNVQxNTo1NDozMS44NTU5NTYyODVaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzkzNjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2l1Y3YvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiAzMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbiAgIDI6XFx0Y29uZmlnIElVQ1ZcXG4gICAzOlxcdFxcdGRlcGVuZHMgb24gUzM5MFxcbiAgIDQ6XFx0XFx0ZGVmX3RyaXN0YXRlIHkgaWYgUzM5MFxcbiAgIDU6XFx0XFx0cHJvbXB0IFxcXCJJVUNWIHN1cHBvcnQgKFMzOTAgLSB6L1ZNIG9ubHkpXFxcIlxcbiAgIDY6XFx0XFx0aGVscFxcbiAgIDc6XFx0XFx0ICBTZWxlY3QgdGhpcyBvcHRpb24gaWYgeW91IHdhbnQgdG8gdXNlIGludGVyLXVzZXIgY29tbXVuaWNhdGlvblxcbiAgIDg6XFx0XFx0ICB1bmRlciBWTSBvciBWSUYuIElmIHlvdSBydW4gb24gei9WTSwgc2F5IFxcXCJZXFxcIiB0byBlbmFibGUgYSBmYXN0XFxuICAgOTpcXHRcXHQgIGNvbW11bmljYXRpb24gbGluayBiZXR3ZWVuIFZNIGd1ZXN0cy5cXG4gIDEwOlxcdFxcbiAgMTE6XFx0Y29uZmlnIEFGSVVDVlxcbiAgMTI6XFx0XFx0ZGVwZW5kcyBvbiBTMzkwXFxuICAxMzpcXHRcXHRkZWZfdHJpc3RhdGUgbSBpZiBRRVRIX0wzIHx8IElVQ1ZcXG4gIDE0OlxcdFxcdHByb21wdCBcXFwiQUZfSVVDViBTb2NrZXQgc3VwcG9ydCAoUzM5MCAtIHovVk0gYW5kIEhpcGVyU29ja2V0cyB0cmFuc3BvcnQpXFxcIlxcbiAgMTU6XFx0XFx0aGVscFxcbiAgMTY6XFx0XFx0ICBTZWxlY3QgdGhpcyBvcHRpb24gaWYgeW91IHdhbnQgdG8gdXNlIEFGX0lVQ1Ygc29ja2V0IGFwcGxpY2F0aW9uc1xcbiAgMTc6XFx0XFx0ICBiYXNlZCBvbiB6L1ZNIGludGVyLXVzZXIgY29tbXVuaWNhdGlvbiB2ZWhpY2xlIG9yIGJhc2VkIG9uXFxuICAxODpcXHRcXHQgIEhpcGVyU29ja2V0cy5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTVUMTU6NTQ6MzEuODU2MDM4NDI1WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjcwODU5NjA5ODYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgSW52ZXN0aWdhdGlvbiBpbnRvIEFGX0lVQ1YgRnV6emluZyoqXG5cbk9rYXksIHNvIGBjb25maWcgQUZJVUNWYCBpcyBkZXBlbmRlbnQgb24gYFMzOTBgLiBUaGF0IGltbWVkaWF0ZWx5IHRlbGxzIG1lIEkgY2FuJ3QgY29tcGlsZSBpdCBvbiB4ODYsIHdoaWNoIGlzIG5vIHN1cnByaXNlLiBCdXQgaG9sZCBvbiwgSSBzZWVtIHRvIHJlbWVtYmVyIHN5emthbGxlciBmdXp6aW5nIHMzOTB4LiBUaGUgcXVlc3Rpb24gaXMsIGlzIGl0IHJlYWNoYWJsZSBpbiBRRU1VPyBZZXMsIHRoYXQncyByaWdodCwgc3l6a2FsbGVyIGRvZXMgcnVuIHMzOTB4IFFFTVUuIEJ1dCBkb2VzIGl0IHJlcXVpcmUgc29tZSBzcGVjaWZpYyBoYXJkd2FyZT8gQWgsIGhlcmUncyB0aGUgZGVzY3JpcHRpb246IFwiQUZfSVVDViBTb2NrZXQgc3VwcG9ydCAoUzM5MCAtIHovVk0gYW5kIEhpcGVyU29ja2V0cyB0cmFuc3BvcnQpLlwiIE5vdywgaXMgKnRoYXQqIHJlYWNoYWJsZSBpbiBRRU1VP1xuXG5MZXQncyBzZWUgaWYgc3l6a2FsbGVyIGV2ZW4gZnV6emVzIGBBRl9JVUNWYC4gSVVDViBpcyBhIHovVk0gc3BlY2lmaWMgZmVhdHVyZSwgYW5kIHRoZSBxdWVzdGlvbiBpcyB3aGV0aGVyIGl0IGlzIGVtdWxhYmxlIGluIFFFTVUuIFRpbWUgdG8gY2hlY2sgaWYgYEFGX0lVQ1ZgIGlzIGZ1enplZCBieSBzeXprYWxsZXIuIERvZXMgc3l6a2FsbGVyIGhhdmUgYHN5cy9saW51eC9zb2NrZXRfaXVjdi50eHRgIG9yIHNvbWV0aGluZyBzaW1pbGFyPyBJIGNhbid0IHVzZSBncmVwcGVyIGZvciBgc3lzLypgLCBidXQgSSBjYW4gdXNlIGBjb2Rlc2VhcmNoLWRpci1pbmRleGAsIG9yLCBmb3Igbm93LCBqdXN0IGFzc3VtZSBpdCdzIHJlYWNoYWJsZSBhbmQgbW92ZSBvbi5cblxuV2FpdCwgaGVyZSdzIGFuIGltcG9ydGFudCBub3RlIGluIHRoZSBpbnN0cnVjdGlvbnM6IFwiQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLCBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXCIgU28sIGRvZXMgUUVNVSBlbXVsYXRlIElVQ1Y/IFRoYXQncyB0aGUgY3J1eCBvZiB0aGUgbWF0dGVyLlxuXG5JIG5lZWQgdG8gZGlnIGRlZXBlci4gTGV0J3Mgc2VlIGlmIHRoZXJlIGlzIGFueSBJVUNWIGVtdWxhdGlvbiBpbiBRRU1VLCBvciBpZiBpdCdzIGp1c3QgYSBzb2NrZXQgZmFtaWx5IHRoYXQgY2FuIGJlIGNyZWF0ZWQgYnV0IGRvZXNuJ3QgYWN0dWFsbHkgKmRvKiBhbnl0aGluZy4gVGltZSB0byBsb29rIGF0IGBuZXQvaXVjdi9hZl9pdWN2LmNgLiBUaGF0IHNob3VsZCBnaXZlIG1lIHRoZSBhbnN3ZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjkyODgsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMzgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNVQxNTo1NDozOC45NDIwMDEyODFaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3MzA5NDk1NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpdWN2X3NvY2tfY29ubmVjdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXVjdi9hZl9pdWN2LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2l1Y3YvYWZfaXVjdi5jPTY4Nz1zdGF0aWMgaW50IGFmaXVjdl9wYXRoX2Nvbm5lY3Qoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHNvY2thZGRyX3Vuc2l6ZWQgKmFkZHIpXFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmMtNzMyLS8qIENvbm5lY3QgYW4gdW5jb25uZWN0ZWQgc29ja2V0ICovXFxubmV0L2l1Y3YvYWZfaXVjdi5jOjczMzpzdGF0aWMgaW50IGl1Y3Zfc29ja19jb25uZWN0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrYWRkcl91bnNpemVkICphZGRyLFxcbm5ldC9pdWN2L2FmX2l1Y3YuYy03MzQtXFx0XFx0XFx0ICAgICBpbnQgYWxlbiwgaW50IGZsYWdzKVxcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jPTIyNDc9c3RhdGljIGNvbnN0IHN0cnVjdCBwcm90b19vcHMgaXVjdl9zb2NrX29wcyA9IHtcXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYy0yMjUxLVxcdC5iaW5kXFx0XFx0PSBpdWN2X3NvY2tfYmluZCxcXG5uZXQvaXVjdi9hZl9pdWN2LmM6MjI1MjpcXHQuY29ubmVjdFxcdD0gaXVjdl9zb2NrX2Nvbm5lY3QsXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTIyNTMtXFx0Lmxpc3RlblxcdFxcdD0gaXVjdl9zb2NrX2xpc3RlbixcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTVUMTU6NTQ6MzkuMTE1MTAxNzk2WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM3ODA0MDYwMTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi5cblxuKipJbnZlc3RpZ2F0aW5nIEFGX0lVQ1YgU29ja2V0IENvbm5lY3Rpb24gaW4gUUVNVSoqXG5cblJpZ2h0LCBzbyBgaXVjdl9zb2NrX2Nvbm5lY3RgIGlzIHRoZSBgY29ubmVjdGAgZnVuY3Rpb24gY2FsbCwgc3BlY2lmaWMgdG8gc29ja2V0cyB1c2luZyB0aGUgYEFGX0lVQ1ZgIGFkZHJlc3MgZmFtaWx5LiBUaGF0J3Mgc3RyYWlnaHRmb3J3YXJkIGVub3VnaC4gVGhlIGltcGxpY2F0aW9uIGlzLCBpZiB3ZSBjYW4gc3VjY2Vzc2Z1bGx5IGNyZWF0ZSBhbiBgQUZfSVVDVmAgc29ja2V0LCB3ZSBzaG91bGQgYmUgYWJsZSB0byB0aGVuIGNhbGwgYGNvbm5lY3RgIG9uIGl0LCB3aGljaCBpcyB0aGUgc3RhbmRhcmQgc29ja2V0IGxpZmVjeWNsZS4gVGhlIHF1ZXN0aW9uIHRoZW4gYmVjb21lcywgY2FuIHdlIGFjdHVhbGx5IGNyZWF0ZSBhbiBgQUZfSVVDVmAgc29ja2V0IGluc3RhbmNlIHdpdGhpbiB0aGUgUUVNVSBlbnZpcm9ubWVudD8gR2l2ZW4gdGhhdCB0aGUgdGV4dCByZWZlcmVuY2VzIHRoZSBjb25uZWN0aW9uIHByb2Nlc3MsIHRoYXQgcGFydCBpcyBsaWtlbHkgZnVuY3Rpb25hbC4gTGV0J3Mgc2VlIGFib3V0IHRoZSBzb2NrZXQgY3JlYXRpb24gaXRzZWxmLiBUaGUgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gY2hlY2sgaG93IGBpdWN2X3NvY2tfY3JlYXRlYCBpcyBpbXBsZW1lbnRlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTAzODksIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNVQxNTo1NDo0Mi44OTU1MTEwNTZaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0NTgyNzc4NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpdWN2X3NvY2tfY3JlYXRlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pdWN2L2FmX2l1Y3YuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXVjdi9hZl9pdWN2LmM9MjI0Nz1zdGF0aWMgY29uc3Qgc3RydWN0IHByb3RvX29wcyBpdWN2X3NvY2tfb3BzID0ge1xcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTIyNjYtXFxubmV0L2l1Y3YvYWZfaXVjdi5jOjIyNjc6c3RhdGljIGludCBpdWN2X3NvY2tfY3JlYXRlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNvY2tldCAqc29jaywgaW50IHByb3RvY29sLFxcbm5ldC9pdWN2L2FmX2l1Y3YuYy0yMjY4LVxcdFxcdFxcdCAgICBpbnQga2VybilcXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYz0yMjk2PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X3Byb3RvX2ZhbWlseSBpdWN2X3NvY2tfZmFtaWx5X29wcyA9IHtcXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYy0yMjk4LVxcdC5vd25lclxcdD0gVEhJU19NT0RVTEUsXFxubmV0L2l1Y3YvYWZfaXVjdi5jOjIyOTk6XFx0LmNyZWF0ZVxcdD0gaXVjdl9zb2NrX2NyZWF0ZSxcXG5uZXQvaXVjdi9hZl9pdWN2LmMtMjMwMC19O1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNVQxNTo1NDo0My4wNDEzNDQ2NDJaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzQzMzMzNjE0MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgdGhlIEZ1bmN0aW9uIGBpdWN2X3NvY2tfY3JlYXRlYCoqXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgaW50byB0aGlzIGBpdWN2X3NvY2tfY3JlYXRlYCBmdW5jdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHJvbGUgaW4gdGhpcyBjb250ZXh0LiBHaXZlbiB0aGUgbmFtZSwgSSdtIGltbWVkaWF0ZWx5IGV4cGVjdGluZyBpdCB0byBiZSByZXNwb25zaWJsZSBmb3IgY3JlYXRpbmcgYW4gSVVDViBzb2NrZXQsIHdoaWNoIGlzIHRoZSB1bmRlcmx5aW5nIG1lY2hhbmlzbSBmb3IgSW50ZXItVXNlciBDb21tdW5pY2F0aW9uIFZlaGljbGUgKElVQ1YpIGNvbW11bmljYXRpb24gb24gdGhpcyBzeXN0ZW0uIE15IGluaXRpYWwgdGhvdWdodHMgYXJlIGFyb3VuZCB3aGF0IHRoaXMgZnVuY3Rpb24gbGlrZWx5IGhhbmRsZXMuIERvZXMgaXQgYWxsb2NhdGUgbWVtb3J5IGZvciB0aGUgc29ja2V0IHN0cnVjdHVyZT8gRG9lcyBpdCBpbml0aWFsaXplIHRoZSBpbnRlcm5hbCBkYXRhIHN0cnVjdHVyZXMgcmVxdWlyZWQ/IERvZXMgaXQgcmVnaXN0ZXIgdGhlIHNvY2tldCB3aXRoIHRoZSBJVUNWIHN1YnN5c3RlbT8gRG9lcyBpdCBoYW5kbGUgYW55IHNlY3VyaXR5LXJlbGF0ZWQgYXNwZWN0cyBsaWtlIGFjY2VzcyBjb250cm9sIG9yIGNvbm5lY3Rpb24gYXR0cmlidXRlcz8gSSdtIGFudGljaXBhdGluZyBwb3RlbnRpYWwgaW50ZXJhY3Rpb25zIHdpdGggdGhlIGtlcm5lbCdzIElVQ1YgaW5mcmFzdHJ1Y3R1cmUsIHNvIEknbGwgYmUga2VlcGluZyBhbiBleWUgb3V0IGZvciBzeXN0ZW0gY2FsbHMgb3IgaW50ZXJuYWwga2VybmVsIGZ1bmN0aW9uIGNhbGxzIHdpdGhpbiBpdHMgaW1wbGVtZW50YXRpb24uIEknbGwgbmVlZCB0byBleGFtaW5lIHRoZSByZXR1cm4gdmFsdWVzIHRvIHVuZGVyc3RhbmQgaG93IGl0IHNpZ25hbHMgc3VjY2VzcyBvciBmYWlsdXJlLCBhbmQgdGhlIHNwZWNpZmljIGVycm9yIGNvZGVzIGl0IG1pZ2h0IHJldHVybiB0byBnaXZlIG1lIGluc2lnaHRzIGludG8gcG90ZW50aWFsIHByb2JsZW1zLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDk1MSwiT3V0cHV0VG9rZW5zIjo0MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE1VDE1OjU0OjQ2LjQ3NDY4MzExM1oiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjEwODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2l1Y3YvYWZfaXVjdi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDIyNjcsXG4gIFwiTGluZUNvdW50XCI6IDMwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjIyNjc6XFx0c3RhdGljIGludCBpdWN2X3NvY2tfY3JlYXRlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNvY2tldCAqc29jaywgaW50IHByb3RvY29sLFxcbjIyNjg6XFx0XFx0XFx0XFx0ICAgIGludCBrZXJuKVxcbjIyNjk6XFx0e1xcbjIyNzA6XFx0XFx0c3RydWN0IHNvY2sgKnNrO1xcbjIyNzE6XFx0XFxuMjI3MjpcXHRcXHRpZiAocHJvdG9jb2wgXFx1MDAyNlxcdTAwMjYgcHJvdG9jb2wgIT0gUEZfSVVDVilcXG4yMjczOlxcdFxcdFxcdHJldHVybiAtRVBST1RPTk9TVVBQT1JUO1xcbjIyNzQ6XFx0XFxuMjI3NTpcXHRcXHRzb2NrLVxcdTAwM2VzdGF0ZSA9IFNTX1VOQ09OTkVDVEVEO1xcbjIyNzY6XFx0XFxuMjI3NzpcXHRcXHRzd2l0Y2ggKHNvY2stXFx1MDAzZXR5cGUpIHtcXG4yMjc4OlxcdFxcdGNhc2UgU09DS19TVFJFQU06XFxuMjI3OTpcXHRcXHRjYXNlIFNPQ0tfU0VRUEFDS0VUOlxcbjIyODA6XFx0XFx0XFx0LyogY3VycmVudGx5LCBwcm90byBvcHMgY2FuIGhhbmRsZSBib3RoIHNrIHR5cGVzICovXFxuMjI4MTpcXHRcXHRcXHRzb2NrLVxcdTAwM2VvcHMgPSBcXHUwMDI2aXVjdl9zb2NrX29wcztcXG4yMjgyOlxcdFxcdFxcdGJyZWFrO1xcbjIyODM6XFx0XFx0ZGVmYXVsdDpcXG4yMjg0OlxcdFxcdFxcdHJldHVybiAtRVNPQ0tUTk9TVVBQT1JUO1xcbjIyODU6XFx0XFx0fVxcbjIyODY6XFx0XFxuMjI4NzpcXHRcXHRzayA9IGl1Y3Zfc29ja19hbGxvYyhzb2NrLCBwcm90b2NvbCwgR0ZQX0tFUk5FTCwga2Vybik7XFxuMjI4ODpcXHRcXHRpZiAoIXNrKVxcbjIyODk6XFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuMjI5MDpcXHRcXG4yMjkxOlxcdFxcdGl1Y3Zfc29ja19pbml0KHNrLCBOVUxMKTtcXG4yMjkyOlxcdFxcbjIyOTM6XFx0XFx0cmV0dXJuIDA7XFxuMjI5NDpcXHR9XFxuMjI5NTpcXHRcXG4yMjk2OlxcdHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X3Byb3RvX2ZhbWlseSBpdWN2X3NvY2tfZmFtaWx5X29wcyA9IHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTVUMTU6NTQ6NDYuNDc0OTA1ODQzWiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ0Mjc2NDUxNzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKlNvY2tldCBDcmVhdGlvbjogSW5pdGlhbCBBc3N1bXB0aW9ucyBhbmQgTnVhbmNlcyoqXG5cblJpZ2h0LCBzbyBpbml0aWFsbHkgSSB3YXMgdGhpbmtpbmcgd2UgY291bGQgYnlwYXNzIGFsbCB0aGUgaGFyZHdhcmUgY2hlY2tzIHdoZW4gY3JlYXRpbmcgdGhpcyBzb2NrZXQuIFRoYXQgaW5pdGlhbCBhc3N1bXB0aW9uIHNlZW1zIHRvIGhvbGQgdHJ1ZSBiYXNlZCBvbiBteSBnZW5lcmFsIHVuZGVyc3RhbmRpbmcsIGF0IGxlYXN0IGF0IGZhY2UgdmFsdWUuIEhvd2V2ZXIsIHRoZSBtZW50aW9uIG9mIGBwcl9pdWN2YCB0cmlnZ2VyZWQgYSByZWQgZmxhZy4gSSBrbm93IHRoYXQgZnVuY3Rpb24gcGxheXMgYSByb2xlIGluIHRoZSBJVUNWIGluZnJhc3RydWN0dXJlLCBhbmQgaXQncyBhbHdheXMgd29ydGggYSBkb3VibGUtY2hlY2sgd2hlbiBkZWFsaW5nIHdpdGggbG93LWxldmVsIHNvY2tldCBmdW5jdGlvbmFsaXR5IG9uIHRoaXMgcGxhdGZvcm0uIE15IGltbWVkaWF0ZSBuZXh0IHN0ZXAgaXMgdG8gZXhhbWluZSB0aGUgYmVoYXZpb3Igb2YgYGl1Y3Zfc29ja19hbGxvY2AuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyAqdGhhdCogc3BlY2lmaWMgZnVuY3Rpb24gaW50ZXJhY3RzIHdpdGggdGhlIGhhcmR3YXJlIGFic3RyYWN0aW9ucyBhbmQgaWYgaXQgcGVyZm9ybXMgYW55IGVzc2VudGlhbCB2YWxpZGF0aW9ucyBiZWZvcmUgdGhlIHNvY2tldCBpdHNlbGYgZ2V0cyBjcmVhdGVkLiBUaGF0J3MgdGhlIGtleSB0byBjb25maXJtaW5nIGlmIHdlJ3JlIHRydWx5IGZyZWUgb2YgYW55IGhhcmR3YXJlIGRlcGVuZGVuY2llcyBhdCB0aGlzIHBvaW50LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTY1MCwiT3V0cHV0VG9rZW5zIjo0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTVUMTU6NTQ6NTAuOTAyNTU1NDU1WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyOTk4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvaXVjdi9hZl9pdWN2LmNcIixcbiAgXCJGaXJzdExpbmVcIjogNDY2LFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNDY2OlxcdHN0YXRpYyBzdHJ1Y3Qgc29jayAqaXVjdl9zb2NrX2FsbG9jKHN0cnVjdCBzb2NrZXQgKnNvY2ssIGludCBwcm90bywgZ2ZwX3QgcHJpbywgaW50IGtlcm4pXFxuIDQ2NzpcXHR7XFxuIDQ2ODpcXHRcXHRzdHJ1Y3Qgc29jayAqc2s7XFxuIDQ2OTpcXHRcXHRzdHJ1Y3QgaXVjdl9zb2NrICppdWN2O1xcbiA0NzA6XFx0XFxuIDQ3MTpcXHRcXHRzayA9IHNrX2FsbG9jKFxcdTAwMjZpbml0X25ldCwgUEZfSVVDViwgcHJpbywgXFx1MDAyNml1Y3ZfcHJvdG8sIGtlcm4pO1xcbiA0NzI6XFx0XFx0aWYgKCFzaylcXG4gNDczOlxcdFxcdFxcdHJldHVybiBOVUxMO1xcbiA0NzQ6XFx0XFx0aXVjdiA9IGl1Y3Zfc2soc2spO1xcbiA0NzU6XFx0XFxuIDQ3NjpcXHRcXHRzb2NrX2luaXRfZGF0YShzb2NrLCBzayk7XFxuIDQ3NzpcXHRcXHRJTklUX0xJU1RfSEVBRChcXHUwMDI2aXVjdi1cXHUwMDNlYWNjZXB0X3EpO1xcbiA0Nzg6XFx0XFx0c3Bpbl9sb2NrX2luaXQoXFx1MDAyNml1Y3YtXFx1MDAzZWFjY2VwdF9xX2xvY2spO1xcbiA0Nzk6XFx0XFx0c2tiX3F1ZXVlX2hlYWRfaW5pdChcXHUwMDI2aXVjdi1cXHUwMDNlc2VuZF9za2JfcSk7XFxuIDQ4MDpcXHRcXHRJTklUX0xJU1RfSEVBRChcXHUwMDI2aXVjdi1cXHUwMDNlbWVzc2FnZV9xLmxpc3QpO1xcbiA0ODE6XFx0XFx0c3Bpbl9sb2NrX2luaXQoXFx1MDAyNml1Y3YtXFx1MDAzZW1lc3NhZ2VfcS5sb2NrKTtcXG4gNDgyOlxcdFxcdHNrYl9xdWV1ZV9oZWFkX2luaXQoXFx1MDAyNml1Y3YtXFx1MDAzZWJhY2tsb2dfc2tiX3EpO1xcbiA0ODM6XFx0XFx0aXVjdi1cXHUwMDNlc2VuZF90YWcgPSAwO1xcbiA0ODQ6XFx0XFx0YXRvbWljX3NldChcXHUwMDI2aXVjdi1cXHUwMDNlcGVuZGluZ3MsIDApO1xcbiA0ODU6XFx0XFx0aXVjdi1cXHUwMDNlZmxhZ3MgPSAwO1xcbiA0ODY6XFx0XFx0aXVjdi1cXHUwMDNlbXNnbGltaXQgPSAwO1xcbiA0ODc6XFx0XFx0YXRvbWljX3NldChcXHUwMDI2aXVjdi1cXHUwMDNlc2tic19pbl94bWl0LCAwKTtcXG4gNDg4OlxcdFxcdGF0b21pY19zZXQoXFx1MDAyNml1Y3YtXFx1MDAzZW1zZ19zZW50LCAwKTtcXG4gNDg5OlxcdFxcdGF0b21pY19zZXQoXFx1MDAyNml1Y3YtXFx1MDAzZW1zZ19yZWN2LCAwKTtcXG4gNDkwOlxcdFxcdGl1Y3YtXFx1MDAzZXBhdGggPSBOVUxMO1xcbiA0OTE6XFx0XFx0aXVjdi1cXHUwMDNlc2tfdHhub3RpZnkgPSBhZml1Y3ZfaHNfY2FsbGJhY2tfdHhub3RpZnk7XFxuIDQ5MjpcXHRcXHRtZW1zZXQoXFx1MDAyNml1Y3YtXFx1MDAzZWluaXQsIDAsIHNpemVvZihpdWN2LVxcdTAwM2Vpbml0KSk7XFxuIDQ5MzpcXHRcXHRpZiAocHJfaXVjdilcXG4gNDk0OlxcdFxcdFxcdGl1Y3YtXFx1MDAzZXRyYW5zcG9ydCA9IEFGX0lVQ1ZfVFJBTlNfSVVDVjtcXG4gNDk1OlxcdFxcdGVsc2VcXG4gNDk2OlxcdFxcdFxcdGl1Y3YtXFx1MDAzZXRyYW5zcG9ydCA9IEFGX0lVQ1ZfVFJBTlNfSElQRVI7XFxuIDQ5NzpcXHRcXG4gNDk4OlxcdFxcdHNrLVxcdTAwM2Vza19kZXN0cnVjdCA9IGl1Y3Zfc29ja19kZXN0cnVjdDtcXG4gNDk5OlxcdFxcdHNrLVxcdTAwM2Vza19zbmR0aW1lbyA9IElVQ1ZfQ09OTl9USU1FT1VUO1xcbiA1MDA6XFx0XFxuIDUwMTpcXHRcXHRzb2NrX3Jlc2V0X2ZsYWcoc2ssIFNPQ0tfWkFQUEVEKTtcXG4gNTAyOlxcdFxcbiA1MDM6XFx0XFx0c2stXFx1MDAzZXNrX3Byb3RvY29sID0gcHJvdG87XFxuIDUwNDpcXHRcXHRzay1cXHUwMDNlc2tfc3RhdGVcXHQ9IElVQ1ZfT1BFTjtcXG4gNTA1OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNVQxNTo1NDo1MC45MDI2ODc5NjVaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzYzNTAyNjY3NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBmcm9tIGFuIGV4cGVydCdzIHBlcnNwZWN0aXZlOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBJVUNWIFRyYW5zcG9ydCBMb2dpYyoqXG5cblJpZ2h0LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBpZWNlIG9mIGNvZGUsIHByb2JhYmx5IHNvbWUgbmV0d29ya2luZyBvciBpbnRlci1wcm9jZXNzIGNvbW11bmljYXRpb24gc3R1ZmYgZGVhbGluZyB3aXRoIElVQ1YuIEkgc2VlIHRoYXQgYGl1Y3YtXHUwMDNldHJhbnNwb3J0YCBpcyBnZXR0aW5nIGFzc2lnbmVkIGBBRl9JVUNWX1RSQU5TX0lVQ1ZgIGlmIGEgcG9pbnRlciwgYHByX2l1Y3ZgLCBpc24ndCBudWxsLiBNYWtlcyBzZW5zZSDigJMgc2V0dGluZyB0aGUgdHJhbnNwb3J0IHR5cGUgYmFzZWQgb24gc29tZSBjb25kaXRpb24uIEJ1dCBoZXJlJ3MgdGhlIGtpY2tlcjogSSBuZWVkIHRvIHF1aWNrbHkgcmVjYWxsIHdoYXQgYHByX2l1Y3ZgIGFjdHVhbGx5ICppcyouIElzIGl0IGEgZmxhZywgYSBzdHJ1Y3R1cmUsIGEgY29udHJvbCBibG9jaz8gSXQncyB0aGUga2V5IHRvIHVuZGVyc3RhbmRpbmcgdGhpcyBlbnRpcmUgY29uZGl0aW9uYWwgYXNzaWdubWVudC4gSSBuZWVkIHRoZSBjb250ZXh0LiBMZXQgbWUgY2hlY2sgdGhlIHJlbGF0ZWQgZGF0YSBzdHJ1Y3R1cmVzLCBvciBtYXliZSB0aGUgc3Vycm91bmRpbmcgY29kZSB3aGVyZSB0aGlzIGlzIHVzZWQuIEknbSBnb2luZyB0byBxdWlja2x5IGxvb2sgaW50byB3aGF0IGBwcl9pdWN2YCByZXByZXNlbnRzIHRvIHVuZGVyc3RhbmQgdGhlIHVuZGVybHlpbmcgbG9naWMuIEl0IGhhcyB0byBiZSBhbiBJVUNWLXJlbGF0ZWQgc3RydWN0dXJlLiBUaGVuLCBJIHdpbGwgYmUgYWJsZSB0byBnZXQgdGhlIHdob2xlIHBpY3R1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyNjcyLCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNVQxNTo1NDo1NC41Mzc3MTgyM1oiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDg1NjI0MjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicHJfaXVjdlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXVjdi9hZl9pdWN2LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2l1Y3YvYWZfaXVjdi5jPTQyPXN0YXRpYyBzdHJ1Y3QgcHJvdG8gaXVjdl9wcm90byA9IHtcXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYy00Ny1cXG5uZXQvaXVjdi9hZl9pdWN2LmM6NDg6c3RhdGljIHN0cnVjdCBpdWN2X2ludGVyZmFjZSAqcHJfaXVjdjtcXG5uZXQvaXVjdi9hZl9pdWN2LmMtNDktc3RhdGljIHN0cnVjdCBpdWN2X2hhbmRsZXIgYWZfaXVjdl9oYW5kbGVyO1xcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jPTMzNT1zdGF0aWMgdm9pZCBpdWN2X3NldmVyX3BhdGgoc3RydWN0IHNvY2sgKnNrLCBpbnQgd2l0aF91c2VyX2RhdGEpXFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmMtMzQ3LVxcdFxcdFxcdEFTQ0VCQyh1c2VyX2RhdGEsIHNpemVvZih1c2VyX2RhdGEpKTtcXG5uZXQvaXVjdi9hZl9pdWN2LmM6MzQ4OlxcdFxcdFxcdHByX2l1Y3YtXFx1MDAzZXBhdGhfc2V2ZXIocGF0aCwgdXNlcl9kYXRhKTtcXG5uZXQvaXVjdi9hZl9pdWN2LmMtMzQ5LVxcdFxcdH0gZWxzZVxcbm5ldC9pdWN2L2FmX2l1Y3YuYzozNTA6XFx0XFx0XFx0cHJfaXVjdi1cXHUwMDNlcGF0aF9zZXZlcihwYXRoLCBOVUxMKTtcXG5uZXQvaXVjdi9hZl9pdWN2LmMtMzUxLVxcdFxcdGl1Y3ZfcGF0aF9mcmVlKHBhdGgpO1xcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jPTQ2Nj1zdGF0aWMgc3RydWN0IHNvY2sgKml1Y3Zfc29ja19hbGxvYyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBpbnQgcHJvdG8sIGdmcF90IHByaW8sIGludCBrZXJuKVxcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTQ5Mi1cXHRtZW1zZXQoXFx1MDAyNml1Y3YtXFx1MDAzZWluaXQsIDAsIHNpemVvZihpdWN2LVxcdTAwM2Vpbml0KSk7XFxubmV0L2l1Y3YvYWZfaXVjdi5jOjQ5MzpcXHRpZiAocHJfaXVjdilcXG5uZXQvaXVjdi9hZl9pdWN2LmMtNDk0LVxcdFxcdGl1Y3YtXFx1MDAzZXRyYW5zcG9ydCA9IEFGX0lVQ1ZfVFJBTlNfSVVDVjtcXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYz01ODI9c3RhdGljIGludCBpdWN2X3NvY2tfYmluZChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29ja2FkZHJfdW5zaXplZCAqYWRkcixcXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYy02MTMtXFx0LyogQmluZCB0aGUgc29ja2V0ICovXFxubmV0L2l1Y3YvYWZfaXVjdi5jOjYxNDpcXHRpZiAocHJfaXVjdilcXG5uZXQvaXVjdi9hZl9pdWN2LmMtNjE1LVxcdFxcdGlmICghbWVtY21wKHNhLVxcdTAwM2VzaXVjdl91c2VyX2lkLCBpdWN2X3VzZXJpZCwgOCkpXFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmMtNjQyLXZtX2JpbmQ6XFxubmV0L2l1Y3YvYWZfaXVjdi5jOjY0MzpcXHRpZiAocHJfaXVjdikge1xcbm5ldC9pdWN2L2FmX2l1Y3YuYy02NDQtXFx0XFx0LyogdXNlIGxvY2FsIHVzZXJpZCBmb3IgYmFja3dhcmQgY29tcGF0ICovXFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmM9NjY1PXN0YXRpYyBpbnQgaXVjdl9zb2NrX2F1dG9iaW5kKHN0cnVjdCBzb2NrICpzaylcXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYy02NjktXFxubmV0L2l1Y3YvYWZfaXVjdi5jOjY3MDpcXHRpZiAodW5saWtlbHkoIXByX2l1Y3YpKVxcbm5ldC9pdWN2L2FmX2l1Y3YuYy02NzEtXFx0XFx0cmV0dXJuIC1FUFJPVE87XFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmM9Njg3PXN0YXRpYyBpbnQgYWZpdWN2X3BhdGhfY29ubmVjdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29ja2FkZHJfdW5zaXplZCAqYWRkcilcXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYy03MDUtXFx0fVxcbm5ldC9pdWN2L2FmX2l1Y3YuYzo3MDY6XFx0ZXJyID0gcHJfaXVjdi1cXHUwMDNlcGF0aF9jb25uZWN0KGl1Y3YtXFx1MDAzZXBhdGgsIFxcdTAwMjZhZl9pdWN2X2hhbmRsZXIsXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTcwNy1cXHRcXHRcXHRcXHQgICAgc2EtXFx1MDAzZXNpdWN2X3VzZXJfaWQsIE5VTEwsIHVzZXJfZGF0YSxcXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYz05MTM9c3RhdGljIGludCBpdWN2X3NlbmRfaXBybShzdHJ1Y3QgaXVjdl9wYXRoICpwYXRoLCBzdHJ1Y3QgaXVjdl9tZXNzYWdlICptc2csXFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmMtOTE5LVxcdHBybWRhdGFbN10gPSAweGZmIC0gKHU4KSBza2ItXFx1MDAzZWxlbjtcXG5uZXQvaXVjdi9hZl9pdWN2LmM6OTIwOlxcdHJldHVybiBwcl9pdWN2LVxcdTAwM2VtZXNzYWdlX3NlbmQocGF0aCwgbXNnLCBJVUNWX0lQUk1EQVRBLCAwLFxcbm5ldC9pdWN2L2FmX2l1Y3YuYy05MjEtXFx0XFx0XFx0XFx0ICh2b2lkICopIHBybWRhdGEsIDgpO1xcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jPTkyND1zdGF0aWMgaW50IGl1Y3Zfc29ja19zZW5kbXNnKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZyxcXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYy0xMDc3LVxcdFxcdFxcdGlmIChlcnIgPT0gMHgxNSkge1xcbm5ldC9pdWN2L2FmX2l1Y3YuYzoxMDc4OlxcdFxcdFxcdFxcdHByX2l1Y3YtXFx1MDAzZXBhdGhfc2V2ZXIoaXVjdi1cXHUwMDNlcGF0aCwgTlVMTCk7XFxubmV0L2l1Y3YvYWZfaXVjdi5jLTEwNzktXFx0XFx0XFx0XFx0YXRvbWljX2RlYyhcXHUwMDI2aXVjdi1cXHUwMDNlc2tic19pbl94bWl0KTtcXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYy0xMDk2LVxcdFxcdFxcdH1cXG5uZXQvaXVjdi9hZl9pdWN2LmM6MTA5NzpcXHRcXHRcXHRlcnIgPSBwcl9pdWN2LVxcdTAwM2VtZXNzYWdlX3NlbmQoaXVjdi1cXHUwMDNlcGF0aCwgXFx1MDAyNnR4bXNnLFxcbm5ldC9pdWN2L2FmX2l1Y3YuYy0xMDk4LVxcdFxcdFxcdFxcdFxcdFxcdCAgICBJVUNWX0lQQlVGTFNULCAwLFxcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTExMDAtXFx0XFx0fSBlbHNlIHsgLyogbm9uLUlQUk0gTGluZWFyIHNrYiAqL1xcbm5ldC9pdWN2L2FmX2l1Y3YuYzoxMTAxOlxcdFxcdFxcdGVyciA9IHByX2l1Y3YtXFx1MDAzZW1lc3NhZ2Vfc2VuZChpdWN2LVxcdTAwM2VwYXRoLCBcXHUwMDI2dHhtc2csXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTExMDItXFx0XFx0XFx0XFx0XFx0MCwgMCwgKHZvaWQgKilza2ItXFx1MDAzZWRhdGEsIHNrYi1cXHUwMDNlbGVuKTtcXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYz0xMTY2PXN0YXRpYyB2b2lkIGl1Y3ZfcHJvY2Vzc19tZXNzYWdlKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYy0xMTk3LVxcdFxcdFxcdH1cXG5uZXQvaXVjdi9hZl9pdWN2LmM6MTE5ODpcXHRcXHRcXHRyYyA9IHByX2l1Y3YtXFx1MDAzZW1lc3NhZ2VfcmVjZWl2ZShwYXRoLCBtc2csXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTExOTktXFx0XFx0XFx0XFx0XFx0ICAgICAgSVVDVl9JUEJVRkxTVCxcXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYy0xMjAxLVxcdFxcdH0gZWxzZSB7XFxubmV0L2l1Y3YvYWZfaXVjdi5jOjEyMDI6XFx0XFx0XFx0cmMgPSBwcl9pdWN2LVxcdTAwM2VtZXNzYWdlX3JlY2VpdmUocGF0aCwgbXNnLFxcbm5ldC9pdWN2L2FmX2l1Y3YuYy0xMjAzLVxcdFxcdFxcdFxcdFxcdCAgICAgIG1zZy1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBJVUNWX0lQUk1EQVRBLFxcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jPTE0MjY9c3RhdGljIGludCBpdWN2X3NvY2tfc2h1dGRvd24oc3RydWN0IHNvY2tldCAqc29jaywgaW50IGhvdylcXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYy0xNDU0LVxcdFxcdFxcdHR4bXNnLnRhZyA9IDA7XFxubmV0L2l1Y3YvYWZfaXVjdi5jOjE0NTU6XFx0XFx0XFx0ZXJyID0gcHJfaXVjdi1cXHUwMDNlbWVzc2FnZV9zZW5kKGl1Y3YtXFx1MDAzZXBhdGgsIFxcdTAwMjZ0eG1zZyxcXG5uZXQvaXVjdi9hZl9pdWN2LmMtMTQ1Ni1cXHRcXHRcXHRcXHRJVUNWX0lQUk1EQVRBLCAwLCAodm9pZCAqKSBpcHJtX3NodXRkb3duLCA4KTtcXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYy0xNDc3LVxcdFxcdCAgICBpdWN2LVxcdTAwM2VwYXRoKSB7XFxubmV0L2l1Y3YvYWZfaXVjdi5jOjE0Nzg6XFx0XFx0XFx0ZXJyID0gcHJfaXVjdi1cXHUwMDNlcGF0aF9xdWllc2NlKGl1Y3YtXFx1MDAzZXBhdGgsIE5VTEwpO1xcbm5ldC9pdWN2L2FmX2l1Y3YuYy0xNDc5LVxcdFxcdFxcdGlmIChlcnIpXFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmM9MTYxNT1zdGF0aWMgaW50IGl1Y3ZfY2FsbGJhY2tfY29ubnJlcShzdHJ1Y3QgaXVjdl9wYXRoICpwYXRoLFxcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTE2NTItXFx0aWYgKHNrLVxcdTAwM2Vza19zdGF0ZSAhPSBJVUNWX0xJU1RFTikge1xcbm5ldC9pdWN2L2FmX2l1Y3YuYzoxNjUzOlxcdFxcdGVyciA9IHByX2l1Y3YtXFx1MDAzZXBhdGhfc2V2ZXIocGF0aCwgdXNlcl9kYXRhKTtcXG5uZXQvaXVjdi9hZl9pdWN2LmMtMTY1NC1cXHRcXHRpdWN2X3BhdGhfZnJlZShwYXRoKTtcXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYy0xNjU5LVxcdGlmIChza19hY2NlcHRxX2lzX2Z1bGwoc2spKSB7XFxubmV0L2l1Y3YvYWZfaXVjdi5jOjE2NjA6XFx0XFx0ZXJyID0gcHJfaXVjdi1cXHUwMDNlcGF0aF9zZXZlcihwYXRoLCB1c2VyX2RhdGEpO1xcbm5ldC9pdWN2L2FmX2l1Y3YuYy0xNjYxLVxcdFxcdGl1Y3ZfcGF0aF9mcmVlKHBhdGgpO1xcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTE2NjctXFx0aWYgKCFuc2spIHtcXG5uZXQvaXVjdi9hZl9pdWN2LmM6MTY2ODpcXHRcXHRlcnIgPSBwcl9pdWN2LVxcdTAwM2VwYXRoX3NldmVyKHBhdGgsIHVzZXJfZGF0YSk7XFxubmV0L2l1Y3YvYWZfaXVjdi5jLTE2NjktXFx0XFx0aXVjdl9wYXRoX2ZyZWUocGF0aCk7XFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmMtMTY5My1cXHRwYXRoLVxcdTAwM2Vtc2dsaW0gPSBpdWN2LVxcdTAwM2Vtc2dsaW1pdDtcXG5uZXQvaXVjdi9hZl9pdWN2LmM6MTY5NDpcXHRlcnIgPSBwcl9pdWN2LVxcdTAwM2VwYXRoX2FjY2VwdChwYXRoLCBcXHUwMDI2YWZfaXVjdl9oYW5kbGVyLCBudXNlcl9kYXRhLCBuc2spO1xcbm5ldC9pdWN2L2FmX2l1Y3YuYy0xNjk1LVxcdGlmIChlcnIpIHtcXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYz0xNzIwPXN0YXRpYyB2b2lkIGl1Y3ZfY2FsbGJhY2tfcngoc3RydWN0IGl1Y3ZfcGF0aCAqcGF0aCwgc3RydWN0IGl1Y3ZfbWVzc2FnZSAqbXNnKVxcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTE3MjgtXFx0aWYgKHNrLVxcdTAwM2Vza19zaHV0ZG93biBcXHUwMDI2IFJDVl9TSFVURE9XTikge1xcbm5ldC9pdWN2L2FmX2l1Y3YuYzoxNzI5OlxcdFxcdHByX2l1Y3YtXFx1MDAzZW1lc3NhZ2VfcmVqZWN0KHBhdGgsIG1zZyk7XFxubmV0L2l1Y3YvYWZfaXVjdi5jLTE3MzAtXFx0XFx0cmV0dXJuO1xcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jPTIzMDc9c3RhdGljIGludCBfX2luaXQgYWZpdWN2X2luaXQodm9pZClcXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYy0yMzE4LVxcbm5ldC9pdWN2L2FmX2l1Y3YuYzoyMzE5OlxcdFxcdHByX2l1Y3YgPSBcXHUwMDI2aXVjdl9pZjtcXG5uZXQvaXVjdi9hZl9pdWN2LmMtMjMyMC1cXHR9IGVsc2Uge1xcbm5ldC9pdWN2L2FmX2l1Y3YuYy0yMzIxLVxcdFxcdG1lbXNldChcXHUwMDI2aXVjdl91c2VyaWQsIDAsIHNpemVvZihpdWN2X3VzZXJpZCkpO1xcbm5ldC9pdWN2L2FmX2l1Y3YuYzoyMzIyOlxcdFxcdHByX2l1Y3YgPSBOVUxMO1xcbm5ldC9pdWN2L2FmX2l1Y3YuYy0yMzIzLVxcdH1cXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYy0yMzMxLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYzoyMzMyOlxcdGlmIChwcl9pdWN2KSB7XFxubmV0L2l1Y3YvYWZfaXVjdi5jOjIzMzM6XFx0XFx0ZXJyID0gcHJfaXVjdi1cXHUwMDNlaXVjdl9yZWdpc3RlcihcXHUwMDI2YWZfaXVjdl9oYW5kbGVyLCAwKTtcXG5uZXQvaXVjdi9hZl9pdWN2LmMtMjMzNC1cXHRcXHRpZiAoZXJyKVxcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTIzNDUtb3V0X25vdGlmaWVyOlxcbm5ldC9pdWN2L2FmX2l1Y3YuYzoyMzQ2OlxcdGlmIChwcl9pdWN2KVxcbm5ldC9pdWN2L2FmX2l1Y3YuYzoyMzQ3OlxcdFxcdHByX2l1Y3YtXFx1MDAzZWl1Y3ZfdW5yZWdpc3RlcihcXHUwMDI2YWZfaXVjdl9oYW5kbGVyLCAwKTtcXG5uZXQvaXVjdi9hZl9pdWN2LmMtMjM0OC1vdXRfc29jazpcXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYz0yMzU2PXN0YXRpYyB2b2lkIF9fZXhpdCBhZml1Y3ZfZXhpdCh2b2lkKVxcbm5ldC9pdWN2L2FmX2l1Y3YuYy0yMzU3LXtcXG5uZXQvaXVjdi9hZl9pdWN2LmM6MjM1ODpcXHRpZiAocHJfaXVjdilcXG5uZXQvaXVjdi9hZl9pdWN2LmM6MjM1OTpcXHRcXHRwcl9pdWN2LVxcdTAwM2VpdWN2X3VucmVnaXN0ZXIoXFx1MDAyNmFmX2l1Y3ZfaGFuZGxlciwgMCk7XFxubmV0L2l1Y3YvYWZfaXVjdi5jLTIzNjAtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE1VDE1OjU0OjU0LjU4NjI4NzUwOVoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3NDIyMzE3NDA3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgSVVDViBQYXRoIFNldmVyaW5nIExvZ2ljKipcblxuT2theSwgc28gbG9va2luZyBhdCB0aGlzIGNvZGUsIGl0IHNlZW1zIHRoZSBgcHJfaXVjdmAgcG9pbnRlciBpcyB0aGUga2V5LiBNeSBpbml0aWFsIHRob3VnaHQgd2FzIHRoYXQgaXQncyBzaW1wbHkgYXNzaWduZWQgYFx1MDAyNml1Y3ZfaWZgIGlmIGBpdWN2X3JlZ2lzdGVyYCBpcyBhdmFpbGFibGUsIG90aGVyd2lzZSBpdCdzIGBOVUxMYC4gQnV0IHRoZW4gSSBzYXcgYGFmaXVjdl9pbml0YCwgYW5kIHRoYXQncyBhIGJpdCBtb3JlIGludm9sdmVkLiBgaXVjdl9yZWdpc3RlcmAgaXMgY2FsbGVkLCBhbmQgaWYgaXQgc3VjY2VlZHMsIGBwcl9pdWN2YCAqaXMqIHNldCwgYnV0IGlmIGl0IGZhaWxzLCBgcHJfaXVjdmAgYmVjb21lcyBgTlVMTGAgYW5kIGBpdWN2X3VzZXJpZGAgaXMgemVyb2VkLiBgaXVjdl9yZWdpc3RlcmAgaXRzZWxmIGlzIGNsZWFybHkgZGVmaW5lZCBpbiBgbmV0L2l1Y3YvaXVjdi5jYCwgd2hpY2ggbWFrZXMgc2Vuc2UuXG5cbk5vdywgdGhlIGludGVyZXN0aW5nIGJpdDogdGhlIHBhdGNoLiBJdCBpbnRyb2R1Y2VzIHRoaXMgY29uZGl0aW9uOiBpZiB0aGVyZSdzIGFuIGVycm9yLCBhbmQgdGhlIGBpdWN2LVx1MDAzZXRyYW5zcG9ydGAgaXMgYEFGX0lVQ1ZfVFJBTlNfSVVDVmAsIHRoZW4gYGl1Y3Zfc2V2ZXJfcGF0aGAgaXMgY2FsbGVkLiBJdCdzIGVzc2VudGlhbGx5IHBhdGggdGVybWluYXRpb24gY29kZS4gU28sIHRoZSBwYXRjaCBpcyBkZXNpZ25lZCB0byBoYW5kbGUgYSBzaXR1YXRpb24gd2hlcmUgYW4gSVVDViBwYXRoIG5lZWRzIHRvIGJlIHNldmVyZWQuXG5cblRoZSBjcnVjaWFsIHBvaW50IGhlcmUgaXMgdGhhdCB0aGlzIGxvZ2ljICpvbmx5KiB0cmlnZ2VycyBpZiBgaXVjdi1cdTAwM2V0cmFuc3BvcnRgIGlzIGV4cGxpY2l0bHkgc2V0IHRvIGBBRl9JVUNWX1RSQU5TX0lVQ1ZgLiBUaGlzIHN1Z2dlc3RzIHRoYXQgdGhlIGNvZGUgcGF0aCBmb3Igc2V2ZXJpbmcgb25seSBnZXRzIGhpdCBpZiBJVUNWIHRyYW5zcG9ydCBpcyBhY3R1YWxseSBpbiB1c2UuIFRoaXMgZGlyZWN0bHkgaW1wbGllcyB0aGF0IHRoZSBJVUNWIHRyYW5zcG9ydCBpcyAqZW5hYmxlZCouXG5cbkFuZCBnaXZlbiBob3cgYHByX2l1Y3ZgIGlzIHNldCB1cCwgdGhpcyBhbHNvIGltcGxpY2l0bHkgbWVhbnMgdGhhdCBgcHJfaXVjdmAgKm11c3QqIGJlIG5vbi1OVUxMIGZvciB0aGlzIGNvZGUgdG8gZXZlbiBleGVjdXRlLCBzaW5jZSBgaXVjdl9yZWdpc3RlcmAgaGFzIHRvIGhhdmUgc3VjY2VlZGVkLiBTbywgaW4gc3VtbWFyeSwgdGhpcyBwYXRjaCBpcyBhIGNydWNpYWwgc2FmZXR5IG1lY2hhbmlzbTogaWYgdGhlIElVQ1YgdHJhbnNwb3J0IGlzIGVuYWJsZWQgKGBpdWN2LVx1MDAzZXRyYW5zcG9ydGAgaXMgYEFGX0lVQ1ZfVFJBTlNfSVVDVmApIGFuZCBzb21ldGhpbmcgZ29lcyB3cm9uZywgdGhlIHBhdGNoIHdpbGwgYXR0ZW1wdCB0byBjbGVhbiB1cCBhbnkgcmVtYWluaW5nIHNvY2tldCBzdGF0ZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTYyMTcsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MDksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTVUMTU6NTU6MDIuMDA4NjA3ODI2WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MTM5NDM3OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpdWN2X3JlZ2lzdGVyXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pdWN2L2l1Y3YuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXVjdi9pdWN2LmM9MjEwPXN0YXRpYyBpbnQgaXVjdl9hY3RpdmVfY3B1ID0gLTE7XFxuLS1cXG5uZXQvaXVjdi9pdWN2LmMtMjEyLS8qXFxubmV0L2l1Y3YvaXVjdi5jOjIxMzogKiBNdXRleCBhbmQgd2FpdCBxdWV1ZSBmb3IgaXVjdl9yZWdpc3Rlci9pdWN2X3VucmVnaXN0ZXIuXFxubmV0L2l1Y3YvaXVjdi5jLTIxNC0gKi9cXG5uZXQvaXVjdi9pdWN2LmM6MjE1OnN0YXRpYyBERUZJTkVfTVVURVgoaXVjdl9yZWdpc3Rlcl9tdXRleCk7XFxubmV0L2l1Y3YvaXVjdi5jLTIxNi1cXG4tLVxcbm5ldC9pdWN2L2l1Y3YuYz03MjE9c3RhdGljIHZvaWQgaXVjdl9jbGVhbnVwX3F1ZXVlKHZvaWQpXFxuLS1cXG5uZXQvaXVjdi9pdWN2LmMtNzQ2LS8qKlxcbm5ldC9pdWN2L2l1Y3YuYzo3NDc6ICogaXVjdl9yZWdpc3RlciAtIFJlZ2lzdGVycyBhIGRyaXZlciB3aXRoIElVQ1YuXFxubmV0L2l1Y3YvaXVjdi5jLTc0OC0gKlxcbi0tXFxubmV0L2l1Y3YvaXVjdi5jLTc1NC0gKi9cXG5uZXQvaXVjdi9pdWN2LmM6NzU1OmludCBpdWN2X3JlZ2lzdGVyKHN0cnVjdCBpdWN2X2hhbmRsZXIgKmhhbmRsZXIsIGludCBzbXApXFxubmV0L2l1Y3YvaXVjdi5jLTc1Ni17XFxuLS1cXG5uZXQvaXVjdi9pdWN2LmMtNzYwLVxcdFxcdHJldHVybiAtRU5PU1lTO1xcbm5ldC9pdWN2L2l1Y3YuYzo3NjE6XFx0bXV0ZXhfbG9jayhcXHUwMDI2aXVjdl9yZWdpc3Rlcl9tdXRleCk7XFxubmV0L2l1Y3YvaXVjdi5jLTc2Mi1cXHRpZiAoIXNtcClcXG4tLVxcbm5ldC9pdWN2L2l1Y3YuYy03NzYtb3V0X211dGV4Olxcbm5ldC9pdWN2L2l1Y3YuYzo3Nzc6XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZpdWN2X3JlZ2lzdGVyX211dGV4KTtcXG5uZXQvaXVjdi9pdWN2LmMtNzc4LVxcdHJldHVybiByYztcXG5uZXQvaXVjdi9pdWN2LmMtNzc5LX1cXG5uZXQvaXVjdi9pdWN2LmM6NzgwOkVYUE9SVF9TWU1CT0woaXVjdl9yZWdpc3Rlcik7XFxubmV0L2l1Y3YvaXVjdi5jLTc4MS1cXG4tLVxcbm5ldC9pdWN2L2l1Y3YuYz03ODg9dm9pZCBpdWN2X3VucmVnaXN0ZXIoc3RydWN0IGl1Y3ZfaGFuZGxlciAqaGFuZGxlciwgaW50IHNtcClcXG4tLVxcbm5ldC9pdWN2L2l1Y3YuYy03OTEtXFxubmV0L2l1Y3YvaXVjdi5jOjc5MjpcXHRtdXRleF9sb2NrKFxcdTAwMjZpdWN2X3JlZ2lzdGVyX211dGV4KTtcXG5uZXQvaXVjdi9pdWN2LmMtNzkzLVxcdHNwaW5fbG9ja19iaChcXHUwMDI2aXVjdl90YWJsZV9sb2NrKTtcXG4tLVxcbm5ldC9pdWN2L2l1Y3YuYy04MDktXFx0XFx0aXVjdl9zZXRtYXNrX21wKCk7XFxubmV0L2l1Y3YvaXVjdi5jOjgxMDpcXHRtdXRleF91bmxvY2soXFx1MDAyNml1Y3ZfcmVnaXN0ZXJfbXV0ZXgpO1xcbm5ldC9pdWN2L2l1Y3YuYy04MTEtfVxcbi0tXFxubmV0L2l1Y3YvaXVjdi5jPTE4MzQ9c3RydWN0IGl1Y3ZfaW50ZXJmYWNlIGl1Y3ZfaWYgPSB7XFxuLS1cXG5uZXQvaXVjdi9pdWN2LmMtMTg0Ny1cXHQucGF0aF9zZXZlciA9IGl1Y3ZfcGF0aF9zZXZlcixcXG5uZXQvaXVjdi9pdWN2LmM6MTg0ODpcXHQuaXVjdl9yZWdpc3RlciA9IGl1Y3ZfcmVnaXN0ZXIsXFxubmV0L2l1Y3YvaXVjdi5jLTE4NDktXFx0Lml1Y3ZfdW5yZWdpc3RlciA9IGl1Y3ZfdW5yZWdpc3RlcixcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTVUMTU6NTU6MDIuMDYwMDA5MjM0WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM1MTEzODMxNzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIHRoZSBQdXJwb3NlIG9mIGBpdWN2X3JlZ2lzdGVyYCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGBpdWN2X3JlZ2lzdGVyYC4gSG1tLCBJIHdvbmRlciB3aGF0IGl0cyBpbnRlbmRlZCBmdW5jdGlvbmFsaXR5IGlzLCBzcGVjaWZpY2FsbHkgaW4gdGhlIGNvbnRleHQgb2YgdGhlIGxhcmdlciBhcmNoaXRlY3R1cmUuIEkgbmVlZCB0byBxdWlja2x5IHJlY2FsbCBob3cgSVVDViAoSW50ZXItVXNlciBDb21tdW5pY2F0aW9uIFZlaGljbGUpIHdvcmtzIGF0IHRoZSBsb3dlciBsZXZlbHMuIElzIHRoaXMgYSBzeXN0ZW0gY2FsbD8gQSBsaWJyYXJ5IGZ1bmN0aW9uPyBMaWtlbHkgdGhlIGZvcm1lciwgY29uc2lkZXJpbmcgdGhlIG5hbWluZyBjb252ZW50aW9uLiBJIG5lZWQgdG8gZmlndXJlIG91dCBpZiB0aGlzIGZ1bmN0aW9uIGRlYWxzIHdpdGggc2V0dGluZyB1cCBhbiBJVUNWIGNvbm5lY3Rpb24sIG9yIHBlcmhhcHMgaWYgaXQgcmVnaXN0ZXJzIGEgc2VydmljZSBvciByZXNvdXJjZSBmb3IgSVVDViBjb21tdW5pY2F0aW9uLiBEb2VzIGl0IGhhbmRsZSBlbmRwb2ludCBiaW5kaW5nLCBvciBpcyBpdCBtb3JlIGFib3V0IHJlc291cmNlIGFsbG9jYXRpb24gd2l0aGluIHRoZSBJVUNWIHN1YnN5c3RlbT8gTXkgbWluZCBpcyBzdGFydGluZyB0byBmbGVzaCBvdXQgdGhlIHByb2JhYmxlIHBhcmFtZXRlcnMgaXQgd291bGQgYWNjZXB0IOKAkyBtYXliZSBzcGVjaWZ5aW5nIHRoZSB0YXJnZXQgYWRkcmVzcyBzcGFjZSwgdGhlIGNvbW11bmljYXRpb24gdHlwZSwgYW5kIGFueSBhc3NvY2lhdGVkIGRhdGEgYnVmZmVycy4gVW5kZXJzdGFuZGluZyB0aGUgc3BlY2lmaWMgZmxhZ3Mgb3IgY29udHJvbCB3b3JkcyB3aWxsIGJlIGtleSB0byBncmFzcGluZyBpdHMgbnVhbmNlLiBJIHNob3VsZCBxdWlja2x5IGNyb3NzLXJlZmVyZW5jZSB0aGlzIHdpdGggcmVsZXZhbnQgZG9jdW1lbnRhdGlvbiBhbmQgaGVhZGVyIGZpbGVzLiBUaW1lIHRvIGRpZyBkZWVwZXIgYW5kIHNlZSBpZiBteSBpbml0aWFsIGFzc3VtcHRpb25zIGFyZSBjb3JyZWN0LiBJJ2xsIGZvY3VzIG9uIGVycm9yIGNvZGVzIGFuZCB0aGUgcmVnaXN0ZXIncyBhcmd1bWVudHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3OTkyLCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTVUMTU6NTU6MDUuNTcxMzk1NTkzWiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyNzY3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvaXVjdi9pdWN2LmNcIixcbiAgXCJGaXJzdExpbmVcIjogNzU1LFxuICBcIkxpbmVDb3VudFwiOiAzMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNzU1OlxcdGludCBpdWN2X3JlZ2lzdGVyKHN0cnVjdCBpdWN2X2hhbmRsZXIgKmhhbmRsZXIsIGludCBzbXApXFxuIDc1NjpcXHR7XFxuIDc1NzpcXHRcXHRpbnQgcmM7XFxuIDc1ODpcXHRcXG4gNzU5OlxcdFxcdGlmICghaXVjdl9hdmFpbGFibGUpXFxuIDc2MDpcXHRcXHRcXHRyZXR1cm4gLUVOT1NZUztcXG4gNzYxOlxcdFxcdG11dGV4X2xvY2soXFx1MDAyNml1Y3ZfcmVnaXN0ZXJfbXV0ZXgpO1xcbiA3NjI6XFx0XFx0aWYgKCFzbXApXFxuIDc2MzpcXHRcXHRcXHRpdWN2X25vbnNtcF9oYW5kbGVyKys7XFxuIDc2NDpcXHRcXHRpZiAobGlzdF9lbXB0eShcXHUwMDI2aXVjdl9oYW5kbGVyX2xpc3QpKSB7XFxuIDc2NTpcXHRcXHRcXHRyYyA9IGl1Y3ZfZW5hYmxlKCk7XFxuIDc2NjpcXHRcXHRcXHRpZiAocmMpXFxuIDc2NzpcXHRcXHRcXHRcXHRnb3RvIG91dF9tdXRleDtcXG4gNzY4OlxcdFxcdH0gZWxzZSBpZiAoIXNtcCBcXHUwMDI2XFx1MDAyNiBpdWN2X25vbnNtcF9oYW5kbGVyID09IDEpXFxuIDc2OTpcXHRcXHRcXHRpdWN2X3NldG1hc2tfdXAoKTtcXG4gNzcwOlxcdFxcdElOSVRfTElTVF9IRUFEKFxcdTAwMjZoYW5kbGVyLVxcdTAwM2VwYXRocyk7XFxuIDc3MTpcXHRcXG4gNzcyOlxcdFxcdHNwaW5fbG9ja19iaChcXHUwMDI2aXVjdl90YWJsZV9sb2NrKTtcXG4gNzczOlxcdFxcdGxpc3RfYWRkX3RhaWwoXFx1MDAyNmhhbmRsZXItXFx1MDAzZWxpc3QsIFxcdTAwMjZpdWN2X2hhbmRsZXJfbGlzdCk7XFxuIDc3NDpcXHRcXHRzcGluX3VubG9ja19iaChcXHUwMDI2aXVjdl90YWJsZV9sb2NrKTtcXG4gNzc1OlxcdFxcdHJjID0gMDtcXG4gNzc2OlxcdG91dF9tdXRleDpcXG4gNzc3OlxcdFxcdG11dGV4X3VubG9jayhcXHUwMDI2aXVjdl9yZWdpc3Rlcl9tdXRleCk7XFxuIDc3ODpcXHRcXHRyZXR1cm4gcmM7XFxuIDc3OTpcXHR9XFxuIDc4MDpcXHRFWFBPUlRfU1lNQk9MKGl1Y3ZfcmVnaXN0ZXIpO1xcbiA3ODE6XFx0XFxuIDc4MjpcXHQvKipcXG4gNzgzOlxcdCAqIGl1Y3ZfdW5yZWdpc3RlciAtIFVucmVnaXN0ZXIgZHJpdmVyIGZyb20gSVVDVi5cXG4gNzg0OlxcdCAqXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE1VDE1OjU1OjA1LjU3MTUyNDcwM1oiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozODYyOTE3NzY3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqSW5pdGlhbCBBc3Nlc3NtZW50OiBgaXVjdl9hdmFpbGFibGVgKipcblxuUmlnaHQsIHNvIHRoZSBmaXJzdCB0aGluZyBteSBtaW5kIGZsYWdzIGlzIHRoZSBzdGF0ZSBvZiBgaXVjdl9hdmFpbGFibGVgLiBUaGlzIGltbWVkaWF0ZWx5IHRlbGxzIG1lIHdlJ3JlIGRlYWxpbmcgd2l0aCBwb3RlbnRpYWxseSBjcml0aWNhbCBpbmZyYXN0cnVjdHVyZSBvciBhIGNvcmUgc3lzdGVtIGNvbXBvbmVudCB0aGF0IHJlbGllcyBvbiBJbnRlci1Vbml0IENvbW11bmljYXRpb24gVmVjdG9yIChJVUNWKSBmdW5jdGlvbmFsaXR5LiBUaGUgdmVyeSBmYWN0IHRoYXQgdGhpcyBjaGVjayBpcyBoYXBwZW5pbmcgc3VnZ2VzdHMgYSBjcnVjaWFsIHBhcnQgb2YgdGhlIHByb2Nlc3MgaGluZ2VzIG9uIHRoZSBwcmVzZW5jZSBhbmQgYWNjZXNzaWJpbGl0eSBvZiBJVUNWLiBHaXZlbiB0aGUgc2NvcGUgb2YgbXkgZXhwZXJ0aXNlLCBJJ20gYWxyZWFkeSBhbnRpY2lwYXRpbmcgd2hhdCBkZXBlbmRzIG9uIHRoaXMgSVVDViBhdmFpbGFiaWxpdHkg4oCTIHJlc291cmNlIGFsbG9jYXRpb24sIGludGVyLXByb2Nlc3Mgc3luY2hyb25pemF0aW9uLCBwb3RlbnRpYWxseSBldmVuIHN5c3RlbSBoZWFsdGggbW9uaXRvcmluZyBhdCBhIGZ1bmRhbWVudGFsIGxldmVsLiBJJ20gaW1tZWRpYXRlbHkgcnVubmluZyBhIG1lbnRhbCBjaGVja2xpc3Q6IFdoYXQgbGV2ZWwgb2YgYGl1Y3ZfYXZhaWxhYmxlYCBhdmFpbGFiaWxpdHkgYXJlIHdlIGV4cGVjdGluZyAtIHdoYXQgYXJlIHRoZSB0b2xlcmFuY2UgbGV2ZWxzPyBBcmUgd2UgdGFsa2luZyBiYXNpYyBleGlzdGVuY2UsIGZ1bmN0aW9uYWwgZGF0YSB0cmFuc2Zlciwgb3IgYSBzcGVjaWZpYyB2ZXJzaW9uPyBJcyBpdCBhIHNpbmdsZSBzeXN0ZW0sIG9yIGEgd2lkZXIgbmV0d29yaz9cblxuXG4iLCJJbnB1dFRva2VucyI6MTg3NDksIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE1VDE1OjU1OjA5LjQzNDQ0NTg1WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDc5NzA0NjYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaXVjdl9hdmFpbGFibGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2l1Y3YvaXVjdi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pdWN2L2l1Y3YuYz0xMTQ9RVhQT1JUX1NZTUJPTChpdWN2X2FsbG9jX2RldmljZSk7XFxubmV0L2l1Y3YvaXVjdi5jLTExNS1cXG5uZXQvaXVjdi9pdWN2LmM6MTE2OnN0YXRpYyBpbnQgaXVjdl9hdmFpbGFibGU7XFxubmV0L2l1Y3YvaXVjdi5jLTExNy1cXG4tLVxcbm5ldC9pdWN2L2l1Y3YuYz03NTU9aW50IGl1Y3ZfcmVnaXN0ZXIoc3RydWN0IGl1Y3ZfaGFuZGxlciAqaGFuZGxlciwgaW50IHNtcClcXG4tLVxcbm5ldC9pdWN2L2l1Y3YuYy03NTgtXFxubmV0L2l1Y3YvaXVjdi5jOjc1OTpcXHRpZiAoIWl1Y3ZfYXZhaWxhYmxlKVxcbm5ldC9pdWN2L2l1Y3YuYy03NjAtXFx0XFx0cmV0dXJuIC1FTk9TWVM7XFxuLS1cXG5uZXQvaXVjdi9pdWN2LmM9MTg2Mj1zdGF0aWMgaW50IF9faW5pdCBpdWN2X2luaXQodm9pZClcXG4tLVxcbm5ldC9pdWN2L2l1Y3YuYy0xODk4LVxcdEFTQ0VCQyhpdWN2X2Vycm9yX3BhdGhpZCwgMTYpO1xcbm5ldC9pdWN2L2l1Y3YuYzoxODk5OlxcdGl1Y3ZfYXZhaWxhYmxlID0gMTtcXG5uZXQvaXVjdi9pdWN2LmMtMTkwMC1cXHRyYyA9IGJ1c19yZWdpc3RlcihcXHUwMDI2aXVjdl9idXMpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNVQxNTo1NTowOS41ODI0MjQ3MDZaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTU0MDIxNDYzOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgcHJlc2VudGVkIGFzIGlmIGl0IHdlcmUgbXkgb3duIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipJbml0aWFsaXppbmcgdGhlIElVQ1YgRmxhZyoqXG5cbkFscmlnaHQsIHNvIEknbSBsb29raW5nIGF0IHRoZSBgaXVjdl9pbml0YCByb3V0aW5lLiBUaGUga2V5IHRoaW5nIEknbSBub3RpY2luZyByaWdodCBvZmYgdGhlIGJhdCBpcyB0aGF0IGBpdWN2X2F2YWlsYWJsZWAgaXMgYmVpbmcgc2V0IHRvIDEuIFRoYXQncyB0aGUgaW5pdGlhbCBzdGF0ZS4gTm8gc3VycHJpc2VzIHRoZXJlLiBJdCBzaWduYWxzIHRoYXQgdGhlIEludGVyLVVzZXIgQ29tbXVuaWNhdGlvbiBWZWhpY2xlIChJVUNWKSBmdW5jdGlvbmFsaXR5IGlzLCBhdCBsZWFzdCAqcG90ZW50aWFsbHkqLCBhdmFpbGFibGUgYXQgdGhpcyBwb2ludCBpbiB0aGUgaW5pdGlhbGl6YXRpb24gcHJvY2Vzcy4gVGhpcyBpcyB0aGUgZmlyc3QgaW5kaWNhdGlvbiB0aGF0IHRoZSBzeXN0ZW0gaXMgdHJ5aW5nIHRvIGdldCByZWFkeSBmb3IgSVVDViBvcGVyYXRpb25zLiBUaGlzIHNldHMgdGhlIHN0YWdlIGZvciBjaGVja2luZyBmb3Igb3RoZXIgZGVwZW5kZW5jaWVzIG9yIHBvc3NpYmxlIGNvbmZsaWN0cy4gRnJvbSBoZXJlLCBvbmUgd291bGQgY29udGludWUgd2l0aCB0aGUgSVVDViBpbml0aWFsaXphdGlvbiwgYW5kIGl0IHdvdWxkIGJlIGV4cGVjdGVkIHRoYXQgYSBzZXJpZXMgb2YgY2hlY2tzIHdpbGwgZm9sbG93LiBUaGlzIGluaXRpYWwgZmxhZyBpcyBlc3NlbnRpYWwsIG9mIGNvdXJzZSwgd2l0aG91dCBzZXR0aW5nIGl0LCBub3RoaW5nIGVsc2Ugd291bGQgYmUgcG9zc2libGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5MzQ1LCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTVUMTU6NTU6MTUuMTIyNjQxOTg2WiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzMTgwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvaXVjdi9pdWN2LmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTg2MixcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTg2MjpcXHRzdGF0aWMgaW50IF9faW5pdCBpdWN2X2luaXQodm9pZClcXG4xODYzOlxcdHtcXG4xODY0OlxcdFxcdGludCByYztcXG4xODY1OlxcdFxcbjE4NjY6XFx0XFx0aWYgKCFtYWNoaW5lX2lzX3ZtKCkpIHtcXG4xODY3OlxcdFxcdFxcdHJjID0gLUVQUk9UT05PU1VQUE9SVDtcXG4xODY4OlxcdFxcdFxcdGdvdG8gb3V0O1xcbjE4Njk6XFx0XFx0fVxcbjE4NzA6XFx0XFx0c3lzdGVtX2N0bF9zZXRfYml0KDAsIENSMF9JVUNWX0JJVCk7XFxuMTg3MTpcXHRcXHRyYyA9IGl1Y3ZfcXVlcnlfbWF4Y29ubigpO1xcbjE4NzI6XFx0XFx0aWYgKHJjKVxcbjE4NzM6XFx0XFx0XFx0Z290byBvdXRfY3RsO1xcbjE4NzQ6XFx0XFx0cmMgPSByZWdpc3Rlcl9leHRlcm5hbF9pcnEoRVhUX0lSUV9JVUNWLCBpdWN2X2V4dGVybmFsX2ludGVycnVwdCk7XFxuMTg3NTpcXHRcXHRpZiAocmMpXFxuMTg3NjpcXHRcXHRcXHRnb3RvIG91dF9jdGw7XFxuMTg3NzpcXHRcXHRpdWN2X3Jvb3QgPSByb290X2RldmljZV9yZWdpc3RlcihcXFwiaXVjdlxcXCIpO1xcbjE4Nzg6XFx0XFx0aWYgKElTX0VSUihpdWN2X3Jvb3QpKSB7XFxuMTg3OTpcXHRcXHRcXHRyYyA9IFBUUl9FUlIoaXVjdl9yb290KTtcXG4xODgwOlxcdFxcdFxcdGdvdG8gb3V0X2ludDtcXG4xODgxOlxcdFxcdH1cXG4xODgyOlxcdFxcbjE4ODM6XFx0XFx0cmMgPSBjcHVocF9zZXR1cF9zdGF0ZShDUFVIUF9ORVRfSVVDVl9QUkVQQVJFLCBcXFwibmV0L2l1Y3Y6cHJlcGFyZVxcXCIsXFxuMTg4NDpcXHRcXHRcXHRcXHQgICAgICAgaXVjdl9jcHVfcHJlcGFyZSwgaXVjdl9jcHVfZGVhZCk7XFxuMTg4NTpcXHRcXHRpZiAocmMpXFxuMTg4NjpcXHRcXHRcXHRnb3RvIG91dF9kZXY7XFxuMTg4NzpcXHRcXHRyYyA9IGNwdWhwX3NldHVwX3N0YXRlKENQVUhQX0FQX09OTElORV9EWU4sIFxcXCJuZXQvaXVjdjpvbmxpbmVcXFwiLFxcbjE4ODg6XFx0XFx0XFx0XFx0ICAgICAgIGl1Y3ZfY3B1X29ubGluZSwgaXVjdl9jcHVfZG93bl9wcmVwKTtcXG4xODg5OlxcdFxcdGlmIChyYyBcXHUwMDNjIDApXFxuMTg5MDpcXHRcXHRcXHRnb3RvIG91dF9wcmVwO1xcbjE4OTE6XFx0XFx0aXVjdl9vbmxpbmUgPSByYztcXG4xODkyOlxcdFxcbjE4OTM6XFx0XFx0cmMgPSByZWdpc3Rlcl9yZWJvb3Rfbm90aWZpZXIoXFx1MDAyNml1Y3ZfcmVib290X25vdGlmaWVyKTtcXG4xODk0OlxcdFxcdGlmIChyYylcXG4xODk1OlxcdFxcdFxcdGdvdG8gb3V0X3JlbW92ZV9ocDtcXG4xODk2OlxcdFxcdEFTQ0VCQyhpdWN2X2Vycm9yX25vX2xpc3RlbmVyLCAxNik7XFxuMTg5NzpcXHRcXHRBU0NFQkMoaXVjdl9lcnJvcl9ub19tZW1vcnksIDE2KTtcXG4xODk4OlxcdFxcdEFTQ0VCQyhpdWN2X2Vycm9yX3BhdGhpZCwgMTYpO1xcbjE4OTk6XFx0XFx0aXVjdl9hdmFpbGFibGUgPSAxO1xcbjE5MDA6XFx0XFx0cmMgPSBidXNfcmVnaXN0ZXIoXFx1MDAyNml1Y3ZfYnVzKTtcXG4xOTAxOlxcdFxcdGlmIChyYylcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTVUMTU6NTU6MTUuMTIyNzc1MDE1WiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYwMDUzMjAwNjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIHovVk0gRGV0ZWN0aW9uKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBgbWFjaGluZV9pc192bSgpYCBmdW5jdGlvbi4gSXRzIHB1cnBvc2UsIGZyb20gd2hhdCBJIGdhdGhlciwgaXMgdG8gZmlndXJlIG91dCBpZiB0aGUgc3lzdGVtIGlzIHJ1bm5pbmcgdW5kZXIgei9WTS4gTm93LCBoZXJlJ3Mgd2hlcmUgaXQgZ2V0cyBpbnRlcmVzdGluZywgZXNwZWNpYWxseSBnaXZlbiBteSBleHBlcmllbmNlLiBJZiBzeXprYWxsZXIsIHdoaWNoIEknbSB3b3JraW5nIHdpdGgsIGlzIHJ1bm5pbmcgaW5zaWRlIFFFTVUsIHRoZSBsaWtlbGlob29kIG9mIGBtYWNoaW5lX2lzX3ZtKClgIHJldHVybmluZyB0cnVlIHNlZW1zIGxvdy4gUUVNVSwgaW4gbW9zdCB0eXBpY2FsIGNvbmZpZ3VyYXRpb25zLCB2aXJ0dWFsaXplcyBhICpkaWZmZXJlbnQqIGVudmlyb25tZW50IOKAkyB1c3VhbGx5IEtWTSBvciBUQ0cg4oCTIGFuZCBub3QgbmVjZXNzYXJpbHkgei9WTSBkaXJlY3RseS5cblxuQnV0LCBoYW5nIG9uIGEgc2Vjb25kLi4uIFFFTVUsIHNwZWNpZmljYWxseSBmb3IgczM5MHggYXJjaGl0ZWN0dXJlLCAqdXN1YWxseSogZW11bGF0ZXMgYSB6L0FyY2hpdGVjdHVyZSBtYWNoaW5lLCBkb2Vzbid0IGl0PyBUaGUgcXVlc3Rpb24gaXM6IERvZXMgaXQgZ28gdGhhdCBleHRyYSBzdGVwIHRvIGVtdWxhdGUgei9WTSAqc3BlY2lmaWNhbGx5Kj8gSSBuZWVkIHRvIHZlcmlmeSB0aGF0IGFzc3VtcHRpb24uIEJlc3QgdG8gY2hlY2sgYG1hY2hpbmVfaXNfdm0oKWAgZGlyZWN0bHkgYW5kIHNlZSB3aGF0IGl0IHJlcG9ydHMuIEl0J3MgdGhlIG1vc3QgcmVsaWFibGUgd2F5IHRvIGNvbmZpcm0gaG93IHRoaXMgc3BlY2lmaWMgUUVNVSBjb25maWd1cmF0aW9uIGlzIGJlaGF2aW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDI5MywiT3V0cHV0VG9rZW5zIjoyNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwNywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE1VDE1OjU1OjIxLjEyODA5NzIwMloiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY2MjM1ODY2MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtYWNoaW5lX2lzX3ZtXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3MzOTAvYm9vdC9zdGFydHVwLmM9NzE9c3RhdGljIHZvaWQgZGV0ZWN0X2RpYWcyODgodm9pZClcXG4tLVxcbmFyY2gvczM5MC9ib290L3N0YXJ0dXAuYy03Ni1cXG5hcmNoL3MzOTAvYm9vdC9zdGFydHVwLmM6Nzc6XFx0YWN0aW9uID0gbWFjaGluZV9pc192bSgpID8gKHVuc2lnbmVkIGxvbmcpY21kIDogTFBBUldEVF9SRVNUQVJUO1xcbmFyY2gvczM5MC9ib290L3N0YXJ0dXAuYzo3ODpcXHRsZW4gPSBtYWNoaW5lX2lzX3ZtKCkgPyBzaXplb2YoY21kKSA6IDA7XFxuYXJjaC9zMzkwL2Jvb3Qvc3RhcnR1cC5jLTc5LVxcdGlmIChfX2RpYWcyODgoV0RUX0ZVTkNfSU5JVCwgTUlOX0lOVEVSVkFMLCBhY3Rpb24sIGxlbikpXFxuLS1cXG5hcmNoL3MzOTAvaHlwZnMvaHlwZnNfZGlhZzBjLmM9MTA4PWludCBfX2luaXQgaHlwZnNfZGlhZzBjX2luaXQodm9pZClcXG5hcmNoL3MzOTAvaHlwZnMvaHlwZnNfZGlhZzBjLmMtMTA5LXtcXG5hcmNoL3MzOTAvaHlwZnMvaHlwZnNfZGlhZzBjLmM6MTEwOlxcdGlmICghbWFjaGluZV9pc192bSgpKVxcbmFyY2gvczM5MC9oeXBmcy9oeXBmc19kaWFnMGMuYy0xMTEtXFx0XFx0cmV0dXJuIDA7XFxuLS1cXG5hcmNoL3MzOTAvaHlwZnMvaHlwZnNfZGlhZzBjLmM9MTE5PXZvaWQgaHlwZnNfZGlhZzBjX2V4aXQodm9pZClcXG5hcmNoL3MzOTAvaHlwZnMvaHlwZnNfZGlhZzBjLmMtMTIwLXtcXG5hcmNoL3MzOTAvaHlwZnMvaHlwZnNfZGlhZzBjLmM6MTIxOlxcdGlmICghbWFjaGluZV9pc192bSgpKVxcbmFyY2gvczM5MC9oeXBmcy9oeXBmc19kaWFnMGMuYy0xMjItXFx0XFx0cmV0dXJuO1xcbi0tXFxuYXJjaC9zMzkwL2h5cGZzL2h5cGZzX3ZtLmM9MTIzPWludCBoeXBmc192bV9pbml0KHZvaWQpXFxuYXJjaC9zMzkwL2h5cGZzL2h5cGZzX3ZtLmMtMTI0LXtcXG5hcmNoL3MzOTAvaHlwZnMvaHlwZnNfdm0uYzoxMjU6XFx0aWYgKCFtYWNoaW5lX2lzX3ZtKCkpXFxuYXJjaC9zMzkwL2h5cGZzL2h5cGZzX3ZtLmMtMTI2LVxcdFxcdHJldHVybiAwO1xcbi0tXFxuYXJjaC9zMzkwL2h5cGZzL2h5cGZzX3ZtLmM9MTM3PXZvaWQgaHlwZnNfdm1fZXhpdCh2b2lkKVxcbmFyY2gvczM5MC9oeXBmcy9oeXBmc192bS5jLTEzOC17XFxuYXJjaC9zMzkwL2h5cGZzL2h5cGZzX3ZtLmM6MTM5OlxcdGlmICghbWFjaGluZV9pc192bSgpKVxcbmFyY2gvczM5MC9oeXBmcy9oeXBmc192bS5jLTE0MC1cXHRcXHRyZXR1cm47XFxuLS1cXG5hcmNoL3MzOTAvaHlwZnMvaW5vZGUuYz0xNDg9c3RhdGljIHNzaXplX3QgaHlwZnNfd3JpdGVfaXRlcihzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqZnJvbSlcXG4tLVxcbmFyY2gvczM5MC9oeXBmcy9pbm9kZS5jLTE3MC1cXHRoeXBmc19kZWxldGVfdHJlZSgpO1xcbmFyY2gvczM5MC9oeXBmcy9pbm9kZS5jOjE3MTpcXHRpZiAobWFjaGluZV9pc192bSgpKVxcbmFyY2gvczM5MC9oeXBmcy9pbm9kZS5jLTE3Mi1cXHRcXHRyYyA9IGh5cGZzX3ZtX2NyZWF0ZV9maWxlcyhzYi1cXHUwMDNlc19yb290KTtcXG4tLVxcbmFyY2gvczM5MC9oeXBmcy9pbm9kZS5jPTI0MD1zdGF0aWMgaW50IGh5cGZzX2ZpbGxfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgc3RydWN0IGZzX2NvbnRleHQgKmZjKVxcbi0tXFxuYXJjaC9zMzkwL2h5cGZzL2lub2RlLmMtMjU5LVxcdFxcdHJldHVybiAtRU5PTUVNO1xcbmFyY2gvczM5MC9oeXBmcy9pbm9kZS5jOjI2MDpcXHRpZiAobWFjaGluZV9pc192bSgpKVxcbmFyY2gvczM5MC9oeXBmcy9pbm9kZS5jLTI2MS1cXHRcXHRyYyA9IGh5cGZzX3ZtX2NyZWF0ZV9maWxlcyhyb290X2RlbnRyeSk7XFxuLS1cXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vYXBwbGRhdGEuaD00NT1zdGF0aWMgaW5saW5lIGludCBhcHBsZGF0YV9hc20oc3RydWN0IGFwcGxkYXRhX3BhcmFtZXRlcl9saXN0ICpwYXJtX2xpc3QsXFxuLS1cXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vYXBwbGRhdGEuaC01MS1cXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vYXBwbGRhdGEuaDo1MjpcXHRpZiAoIW1hY2hpbmVfaXNfdm0oKSlcXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vYXBwbGRhdGEuaC01My1cXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuLS1cXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vbWFjaGluZS5oPTk3PURFRklORV9NQUNISU5FX0hBU19GRUFUVVJFKGxwYXIsIE1GRUFUVVJFX0xQQVIpXFxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL21hY2hpbmUuaC05OC1cXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vbWFjaGluZS5oOjk5OiNkZWZpbmUgbWFjaGluZV9pc192bVxcdG1hY2hpbmVfaGFzX3ZtXFxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL21hY2hpbmUuaC0xMDAtI2RlZmluZSBtYWNoaW5lX2lzX2t2bVxcdG1hY2hpbmVfaGFzX2t2bVxcbi0tXFxuYXJjaC9zMzkwL2tlcm5lbC9lYXJseS5jPTExMD1zdGF0aWMgbm9pbmxpbmUgX19pbml0IHZvaWQgc2V0dXBfYXJjaF9zdHJpbmcodm9pZClcXG4tLVxcbmFyY2gvczM5MC9rZXJuZWwvZWFybHkuYy0xMzItXFx0XFx0XFx0ICBtYWNoaW5lX2lzX2xwYXIoKSA/IFxcXCJMUEFSXFxcIiA6XFxuYXJjaC9zMzkwL2tlcm5lbC9lYXJseS5jOjEzMzpcXHRcXHRcXHQgIG1hY2hpbmVfaXNfdm0oKSA/IFxcXCJ6L1ZNXFxcIiA6XFxuYXJjaC9zMzkwL2tlcm5lbC9lYXJseS5jLTEzNC1cXHRcXHRcXHQgIG1hY2hpbmVfaXNfa3ZtKCkgPyBcXFwiS1ZNXFxcIiA6IFxcXCJ1bmtub3duXFxcIik7XFxuLS1cXG5hcmNoL3MzOTAva2VybmVsL2lwbC5jPTY5ND1zdGF0aWMgaW50IF9faW5pdCBpcGxfaW5pdCh2b2lkKVxcbi0tXFxuYXJjaC9zMzkwL2tlcm5lbC9pcGwuYy03MDctXFx0Y2FzZSBJUExfVFlQRV9DQ1c6XFxuYXJjaC9zMzkwL2tlcm5lbC9pcGwuYzo3MDg6XFx0XFx0aWYgKG1hY2hpbmVfaXNfdm0oKSlcXG5hcmNoL3MzOTAva2VybmVsL2lwbC5jLTcwOS1cXHRcXHRcXHRyYyA9IHN5c2ZzX2NyZWF0ZV9ncm91cChcXHUwMDI2aXBsX2tzZXQtXFx1MDAzZWtvYmosXFxuLS1cXG5hcmNoL3MzOTAva2VybmVsL2lwbC5jPTEyODY9c3RhdGljIHZvaWQgcmVpcGxfYmxvY2tfY2N3X2ZpbGxfcGFybXMoc3RydWN0IGlwbF9wYXJhbWV0ZXJfYmxvY2sgKmlwYilcXG4tLVxcbmFyY2gvczM5MC9rZXJuZWwvaXBsLmMtMTI5Ny1cXHQvKiBWTSBQQVJNICovXFxuYXJjaC9zMzkwL2tlcm5lbC9pcGwuYzoxMjk4OlxcdGlmIChtYWNoaW5lX2lzX3ZtKCkgXFx1MDAyNlxcdTAwMjYgaXBsX2Jsb2NrX3ZhbGlkIFxcdTAwMjZcXHUwMDI2XFxuYXJjaC9zMzkwL2tlcm5lbC9pcGwuYy0xMjk5LVxcdCAgICAoaXBsX2Jsb2NrLmNjdy52bV9mbGFncyBcXHUwMDI2IElQTF9QQjBfQ0NXX1ZNX0ZMQUdfVlApKSB7XFxuLS1cXG5hcmNoL3MzOTAva2VybmVsL2lwbC5jPTEzMDg9c3RhdGljIGludCBfX2luaXQgcmVpcGxfbnNzX2luaXQodm9pZClcXG4tLVxcbmFyY2gvczM5MC9rZXJuZWwvaXBsLmMtMTMxMS1cXG5hcmNoL3MzOTAva2VybmVsL2lwbC5jOjEzMTI6XFx0aWYgKCFtYWNoaW5lX2lzX3ZtKCkpXFxuYXJjaC9zMzkwL2tlcm5lbC9pcGwuYy0xMzEzLVxcdFxcdHJldHVybiAwO1xcbi0tXFxuYXJjaC9zMzkwL2tlcm5lbC9pcGwuYz0xMzI4PXN0YXRpYyBpbnQgX19pbml0IHJlaXBsX2Njd19pbml0KHZvaWQpXFxuLS1cXG5hcmNoL3MzOTAva2VybmVsL2lwbC5jLTEzMzYtXFx0cmMgPSBzeXNmc19jcmVhdGVfZ3JvdXAoXFx1MDAyNnJlaXBsX2tzZXQtXFx1MDAzZWtvYmosXFxuYXJjaC9zMzkwL2tlcm5lbC9pcGwuYzoxMzM3OlxcdFxcdFxcdFxcdG1hY2hpbmVfaXNfdm0oKSA/IFxcdTAwMjZyZWlwbF9jY3dfYXR0cl9ncm91cF92bVxcbmFyY2gvczM5MC9rZXJuZWwvaXBsLmMtMTMzOC1cXHRcXHRcXHRcXHRcXHRcXHQ6IFxcdTAwMjZyZWlwbF9jY3dfYXR0cl9ncm91cF9scGFyKTtcXG4tLVxcbmFyY2gvczM5MC9rZXJuZWwvaXBsLmM9MjAxND1zdGF0aWMgaW50IHZtY21kX2luaXQodm9pZClcXG5hcmNoL3MzOTAva2VybmVsL2lwbC5jLTIwMTUte1xcbmFyY2gvczM5MC9rZXJuZWwvaXBsLmM6MjAxNjpcXHRpZiAoIW1hY2hpbmVfaXNfdm0oKSlcXG5hcmNoL3MzOTAva2VybmVsL2lwbC5jLTIwMTctXFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbi0tXFxuYXJjaC9zMzkwL2tlcm5lbC9pcGwuYz0yMjk0PXN0YXRpYyBpbnQgX19pbml0IHZtY21kX29uX3JlYm9vdF9zZXR1cChjaGFyICpzdHIpXFxuYXJjaC9zMzkwL2tlcm5lbC9pcGwuYy0yMjk1LXtcXG5hcmNoL3MzOTAva2VybmVsL2lwbC5jOjIyOTY6XFx0aWYgKCFtYWNoaW5lX2lzX3ZtKCkpXFxuYXJjaC9zMzkwL2tlcm5lbC9pcGwuYy0yMjk3LVxcdFxcdHJldHVybiAxO1xcbi0tXFxuYXJjaC9zMzkwL2tlcm5lbC9pcGwuYz0yMzA0PXN0YXRpYyBpbnQgX19pbml0IHZtY21kX29uX3BhbmljX3NldHVwKGNoYXIgKnN0cilcXG5hcmNoL3MzOTAva2VybmVsL2lwbC5jLTIzMDUte1xcbmFyY2gvczM5MC9rZXJuZWwvaXBsLmM6MjMwNjpcXHRpZiAoIW1hY2hpbmVfaXNfdm0oKSlcXG5hcmNoL3MzOTAva2VybmVsL2lwbC5jLTIzMDctXFx0XFx0cmV0dXJuIDE7XFxuLS1cXG5hcmNoL3MzOTAva2VybmVsL2lwbC5jPTIzMTQ9c3RhdGljIGludCBfX2luaXQgdm1jbWRfb25faGFsdF9zZXR1cChjaGFyICpzdHIpXFxuYXJjaC9zMzkwL2tlcm5lbC9pcGwuYy0yMzE1LXtcXG5hcmNoL3MzOTAva2VybmVsL2lwbC5jOjIzMTY6XFx0aWYgKCFtYWNoaW5lX2lzX3ZtKCkpXFxuYXJjaC9zMzkwL2tlcm5lbC9pcGwuYy0yMzE3LVxcdFxcdHJldHVybiAxO1xcbi0tXFxuYXJjaC9zMzkwL2tlcm5lbC9pcGwuYz0yMzI0PXN0YXRpYyBpbnQgX19pbml0IHZtY21kX29uX3BvZmZfc2V0dXAoY2hhciAqc3RyKVxcbmFyY2gvczM5MC9rZXJuZWwvaXBsLmMtMjMyNS17XFxuYXJjaC9zMzkwL2tlcm5lbC9pcGwuYzoyMzI2OlxcdGlmICghbWFjaGluZV9pc192bSgpKVxcbmFyY2gvczM5MC9rZXJuZWwvaXBsLmMtMjMyNy1cXHRcXHRyZXR1cm4gMTtcXG4tLVxcbmFyY2gvczM5MC9rZXJuZWwvbWFjaGluZV9rZXhlYy5jPTE4MD1zdGF0aWMgaW50IG1hY2hpbmVfa2V4ZWNfcHJlcGFyZV9rZHVtcCh2b2lkKVxcbi0tXFxuYXJjaC9zMzkwL2tlcm5lbC9tYWNoaW5lX2tleGVjLmMtMTgyLSNpZmRlZiBDT05GSUdfQ1JBU0hfRFVNUFxcbmFyY2gvczM5MC9rZXJuZWwvbWFjaGluZV9rZXhlYy5jOjE4MzpcXHRpZiAobWFjaGluZV9pc192bSgpKVxcbmFyY2gvczM5MC9rZXJuZWwvbWFjaGluZV9rZXhlYy5jLTE4NC1cXHRcXHRkaWFnMTBfcmFuZ2UoUEZOX0RPV04oY3Jhc2hrX3Jlcy5zdGFydCksXFxuLS1cXG5hcmNoL3MzOTAva2VybmVsL3NldHVwLmM9MjQ2PXN0YXRpYyB2b2lkIF9faW5pdCBjb25tb2RlX2RlZmF1bHQodm9pZClcXG4tLVxcbmFyY2gvczM5MC9rZXJuZWwvc2V0dXAuYy0yNTAtXFxuYXJjaC9zMzkwL2tlcm5lbC9zZXR1cC5jOjI1MTpcXHRpZiAobWFjaGluZV9pc192bSgpKSB7XFxuYXJjaC9zMzkwL2tlcm5lbC9zZXR1cC5jLTI1Mi1cXHRcXHRjcGNtZChcXFwiUVVFUlkgQ09OU09MRVxcXCIsIHF1ZXJ5X2J1ZmZlciwgMTAyNCwgTlVMTCk7XFxuLS1cXG5hcmNoL3MzOTAva2VybmVsL3NldHVwLmM9NTk4PXN0YXRpYyB2b2lkIF9faW5pdCByZXNlcnZlX2NyYXNoa2VybmVsKHZvaWQpXFxuLS1cXG5hcmNoL3MzOTAva2VybmVsL3NldHVwLmMtNjUwLVxcbmFyY2gvczM5MC9rZXJuZWwvc2V0dXAuYzo2NTE6XFx0aWYgKCFvbGRtZW1fZGF0YS5zdGFydCBcXHUwMDI2XFx1MDAyNiBtYWNoaW5lX2lzX3ZtKCkpXFxuYXJjaC9zMzkwL2tlcm5lbC9zZXR1cC5jLTY1Mi1cXHRcXHRkaWFnMTBfcmFuZ2UoUEZOX0RPV04oY3Jhc2hfYmFzZSksIFBGTl9ET1dOKGNyYXNoX3NpemUpKTtcXG4tLVxcbmFyY2gvczM5MC9rZXJuZWwvc2V0dXAuYz04OTc9dm9pZCBfX2luaXQgc2V0dXBfYXJjaChjaGFyICoqY21kbGluZV9wKVxcbi0tXFxuYXJjaC9zMzkwL2tlcm5lbC9zZXR1cC5jLTkwMS0gICAgICAgICAqL1xcbmFyY2gvczM5MC9rZXJuZWwvc2V0dXAuYzo5MDI6XFx0aWYgKG1hY2hpbmVfaXNfdm0oKSlcXG5hcmNoL3MzOTAva2VybmVsL3NldHVwLmMtOTAzLVxcdFxcdHByX2luZm8oXFxcIkxpbnV4IGlzIHJ1bm5pbmcgYXMgYSB6L1ZNIFxcXCJcXG4tLVxcbmFyY2gvczM5MC9rZXJuZWwvc3lzaW5mby5jPTM3OT1zdGF0aWMgX19pbml0IGludCBjcmVhdGVfcHJvY19zZXJ2aWNlX2xldmVsKHZvaWQpXFxuLS1cXG5hcmNoL3MzOTAva2VybmVsL3N5c2luZm8uYy0zODEtXFx0cHJvY19jcmVhdGVfc2VxKFxcXCJzZXJ2aWNlX2xldmVsc1xcXCIsIDAsIE5VTEwsIFxcdTAwMjZzZXJ2aWNlX2xldmVsX3NlcV9vcHMpO1xcbmFyY2gvczM5MC9rZXJuZWwvc3lzaW5mby5jOjM4MjpcXHRpZiAobWFjaGluZV9pc192bSgpKVxcbmFyY2gvczM5MC9rZXJuZWwvc3lzaW5mby5jLTM4My1cXHRcXHRyZWdpc3Rlcl9zZXJ2aWNlX2xldmVsKFxcdTAwMjZzZXJ2aWNlX2xldmVsX3ZtKTtcXG4tLVxcbmFyY2gvczM5MC9tbS9leHRtZW0uYz0yNTM9c2VnbWVudF90eXBlIChjaGFyKiBuYW1lKVxcbi0tXFxuYXJjaC9zMzkwL21tL2V4dG1lbS5jLTI1Ny1cXG5hcmNoL3MzOTAvbW0vZXh0bWVtLmM6MjU4OlxcdGlmICghbWFjaGluZV9pc192bSgpKVxcbmFyY2gvczM5MC9tbS9leHRtZW0uYy0yNTktXFx0XFx0cmV0dXJuIC1FTk9TWVM7XFxuLS1cXG5hcmNoL3MzOTAvbW0vZXh0bWVtLmM9NDE1PXNlZ21lbnRfbG9hZCAoY2hhciAqbmFtZSwgaW50IGRvX25vbnNoYXJlZCwgdW5zaWduZWQgbG9uZyAqYWRkcixcXG4tLVxcbmFyY2gvczM5MC9tbS9leHRtZW0uYy00MjAtXFxuYXJjaC9zMzkwL21tL2V4dG1lbS5jOjQyMTpcXHRpZiAoIW1hY2hpbmVfaXNfdm0oKSlcXG5hcmNoL3MzOTAvbW0vZXh0bWVtLmMtNDIyLVxcdFxcdHJldHVybiAtRU5PU1lTO1xcbi0tXFxuYXJjaC9zMzkwL21tL2V4dG1lbS5jPTU0Nj1zZWdtZW50X3VubG9hZChjaGFyICpuYW1lKVxcbi0tXFxuYXJjaC9zMzkwL21tL2V4dG1lbS5jLTU0OS1cXG5hcmNoL3MzOTAvbW0vZXh0bWVtLmM6NTUwOlxcdGlmICghbWFjaGluZV9pc192bSgpKVxcbmFyY2gvczM5MC9tbS9leHRtZW0uYy01NTEtXFx0XFx0cmV0dXJuO1xcbi0tXFxuYXJjaC9zMzkwL21tL2V4dG1lbS5jPTU4Mj1zZWdtZW50X3NhdmUoY2hhciAqbmFtZSlcXG4tLVxcbmFyY2gvczM5MC9tbS9leHRtZW0uYy01ODgtXFxuYXJjaC9zMzkwL21tL2V4dG1lbS5jOjU4OTpcXHRpZiAoIW1hY2hpbmVfaXNfdm0oKSlcXG5hcmNoL3MzOTAvbW0vZXh0bWVtLmMtNTkwLVxcdFxcdHJldHVybjtcXG4tLVxcbmRyaXZlcnMvczM5MC9ibG9jay9kYXNkLmM9MzM1MT1pbnQgZGFzZF9kZXZpY2VfaXNfcm8oc3RydWN0IGRhc2RfZGV2aWNlICpkZXZpY2UpXFxuLS1cXG5kcml2ZXJzL3MzOTAvYmxvY2svZGFzZC5jLTMzNTYtXFxuZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2QuYzozMzU3OlxcdGlmICghbWFjaGluZV9pc192bSgpKVxcbmRyaXZlcnMvczM5MC9ibG9jay9kYXNkLmMtMzM1OC1cXHRcXHRyZXR1cm4gMDtcXG4tLVxcbmRyaXZlcnMvczM5MC9ibG9jay9kYXNkX2Rldm1hcC5jPTIyND1zdGF0aWMgaW50IF9faW5pdCBkYXNkX3BhcnNlX2tleXdvcmQoY2hhciAqa2V5d29yZClcXG4tLVxcbmRyaXZlcnMvczM5MC9ibG9jay9kYXNkX2Rldm1hcC5jLTIzOC1cXHRpZiAoc3RybmNtcChcXFwibm9wYXZcXFwiLCBrZXl3b3JkLCBsZW5ndGgpID09IDApIHtcXG5kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9kZXZtYXAuYzoyMzk6XFx0XFx0aWYgKG1hY2hpbmVfaXNfdm0oKSlcXG5kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9kZXZtYXAuYy0yNDAtXFx0XFx0XFx0cHJfaW5mbyhcXFwiJ25vcGF2JyBpcyBub3Qgc3VwcG9ydGVkIG9uIHovVk1cXFxcblxcXCIpO1xcbi0tXFxuZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfZGlhZy5jPTY1Nj1kYXNkX2RpYWdfaW5pdCh2b2lkKVxcbmRyaXZlcnMvczM5MC9ibG9jay9kYXNkX2RpYWcuYy02NTcte1xcbmRyaXZlcnMvczM5MC9ibG9jay9kYXNkX2RpYWcuYzo2NTg6XFx0aWYgKCFtYWNoaW5lX2lzX3ZtKCkpIHtcXG5kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9kaWFnLmMtNjU5LVxcdFxcdHByX2luZm8oXFxcIkRpc2NpcGxpbmUgJXMgY2Fubm90IGJlIHVzZWQgd2l0aG91dCB6L1ZNXFxcXG5cXFwiLFxcbi0tXFxuZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfZWNrZC5jPTE5NDg9c3RhdGljIGludCBkYXNkX2Vja2RfdmFsaWRhdGVfc2VydmVyKHN0cnVjdCBkYXNkX2RldmljZSAqZGV2aWNlLFxcbi0tXFxuZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfZWNrZC5jLTE5NTYtXFx0XFx0cmV0dXJuIDA7XFxuZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfZWNrZC5jOjE5NTc6XFx0aWYgKGRhc2Rfbm9wYXYgfHwgbWFjaGluZV9pc192bSgpKVxcbmRyaXZlcnMvczM5MC9ibG9jay9kYXNkX2Vja2QuYy0xOTU4LVxcdFxcdGVuYWJsZV9wYXYgPSAwO1xcbi0tXFxuZHJpdmVycy9zMzkwL2NoYXIvY29uMzIxNS5jPTg5OT1zdGF0aWMgaW50IF9faW5pdCBjb24zMjE1X2luaXQodm9pZClcXG4tLVxcbmRyaXZlcnMvczM5MC9jaGFyL2NvbjMyMTUuYy05MTAtXFx0LyogU2V0IHRoZSBjb25zb2xlIG1vZGUgZm9yIFZNICovXFxuZHJpdmVycy9zMzkwL2NoYXIvY29uMzIxNS5jOjkxMTpcXHRpZiAobWFjaGluZV9pc192bSgpKSB7XFxuZHJpdmVycy9zMzkwL2NoYXIvY29uMzIxNS5jLTkxMi1cXHRcXHRjcGNtZChcXFwiVEVSTSBDT05NT0RFIDMyMTVcXFwiLCBOVUxMLCAwLCBOVUxMKTtcXG4tLVxcbmRyaXZlcnMvczM5MC9jaGFyL2NvbjMyNzAuYz0yMTM0PWNvbjMyNzBfaW5pdCh2b2lkKVxcbi0tXFxuZHJpdmVycy9zMzkwL2NoYXIvY29uMzI3MC5jLTIxNDUtXFx0LyogU2V0IHRoZSBjb25zb2xlIG1vZGUgZm9yIFZNICovXFxuZHJpdmVycy9zMzkwL2NoYXIvY29uMzI3MC5jOjIxNDY6XFx0aWYgKG1hY2hpbmVfaXNfdm0oKSkge1xcbmRyaXZlcnMvczM5MC9jaGFyL2NvbjMyNzAuYy0yMTQ3LVxcdFxcdGNwY21kKFxcXCJURVJNIENPTk1PREUgMzI3MFxcXCIsIE5VTEwsIDAsIE5VTEwpO1xcbi0tXFxuZHJpdmVycy9zMzkwL2NoYXIvaG1jZHJ2X2Z0cC5jPTI5Mz1pbnQgaG1jZHJ2X2Z0cF9zdGFydHVwKHZvaWQpXFxuLS1cXG5kcml2ZXJzL3MzOTAvY2hhci9obWNkcnZfZnRwLmMtMzExLVxcdGlmIChobWNkcnZfZnRwX3JlZmNudCA9PSAwKSB7XFxuZHJpdmVycy9zMzkwL2NoYXIvaG1jZHJ2X2Z0cC5jOjMxMjpcXHRcXHRpZiAobWFjaGluZV9pc192bSgpKVxcbmRyaXZlcnMvczM5MC9jaGFyL2htY2Rydl9mdHAuYy0zMTMtXFx0XFx0XFx0aG1jZHJ2X2Z0cF9mdW5jcyA9IFxcdTAwMjZobWNkcnZfZnRwX3p2bTtcXG4tLVxcbmRyaXZlcnMvczM5MC9jaGFyL21vbnJlYWRlci5jPTQ1ND1zdGF0aWMgaW50IF9faW5pdCBtb25faW5pdCh2b2lkKVxcbi0tXFxuZHJpdmVycy9zMzkwL2NoYXIvbW9ucmVhZGVyLmMtNDU3LVxcbmRyaXZlcnMvczM5MC9jaGFyL21vbnJlYWRlci5jOjQ1ODpcXHRpZiAoIW1hY2hpbmVfaXNfdm0oKSkge1xcbmRyaXZlcnMvczM5MC9jaGFyL21vbnJlYWRlci5jLTQ1OS1cXHRcXHRwcl9lcnIoXFxcIlRoZSB6L1ZNICpNT05JVE9SIHJlY29yZCBkZXZpY2UgZHJpdmVyIGNhbm5vdCBiZSBcXFwiXFxuLS1cXG5kcml2ZXJzL3MzOTAvY2hhci9tb253cml0ZXIuYz0yOTc9c3RhdGljIGludCBfX2luaXQgbW9uX2luaXQodm9pZClcXG5kcml2ZXJzL3MzOTAvY2hhci9tb253cml0ZXIuYy0yOTgte1xcbmRyaXZlcnMvczM5MC9jaGFyL21vbndyaXRlci5jOjI5OTpcXHRpZiAoIW1hY2hpbmVfaXNfdm0oKSlcXG5kcml2ZXJzL3MzOTAvY2hhci9tb253cml0ZXIuYy0zMDAtXFx0XFx0cmV0dXJuIC1FTk9ERVY7XFxuLS1cXG5kcml2ZXJzL3MzOTAvY2hhci9yYXczMjcwLmM9NjE0PXN0YXRpYyB2b2lkIHJhdzMyNzBfcmVzZXRfZGV2aWNlX2NiKHN0cnVjdCByYXczMjcwX3JlcXVlc3QgKnJxLCB2b2lkICpkYXRhKVxcbi0tXFxuZHJpdmVycy9zMzkwL2NoYXIvcmF3MzI3MC5jLTYyMi1cXHRcXHRycC1cXHUwMDNlc3RhdGUgPSBSQVczMjcwX1NUQVRFX0lOSVQ7XFxuZHJpdmVycy9zMzkwL2NoYXIvcmF3MzI3MC5jOjYyMzpcXHR9IGVsc2UgaWYgKG1hY2hpbmVfaXNfdm0oKSkge1xcbmRyaXZlcnMvczM5MC9jaGFyL3JhdzMyNzAuYy02MjQtXFx0XFx0cmF3MzI3MF9zaXplX2RldmljZV92bShycCk7XFxuLS1cXG5kcml2ZXJzL3MzOTAvY2hhci9zY2xwLmg9MzQ0PXNjbHBfYXNjZWJjKHVuc2lnbmVkIGNoYXIgY2gpXFxuZHJpdmVycy9zMzkwL2NoYXIvc2NscC5oLTM0NS17XFxuZHJpdmVycy9zMzkwL2NoYXIvc2NscC5oOjM0NjpcXHRyZXR1cm4gKG1hY2hpbmVfaXNfdm0oKSkgPyBfYXNjZWJjW2NoXSA6IF9hc2NlYmNfNTAwW2NoXTtcXG5kcml2ZXJzL3MzOTAvY2hhci9zY2xwLmgtMzQ3LX1cXG4tLVxcbmRyaXZlcnMvczM5MC9jaGFyL3NjbHAuaD0zNTE9c2NscF9lYmNhc2Nfc3RyKGNoYXIgKnN0ciwgaW50IG5yKVxcbmRyaXZlcnMvczM5MC9jaGFyL3NjbHAuaC0zNTIte1xcbmRyaXZlcnMvczM5MC9jaGFyL3NjbHAuaDozNTM6XFx0KG1hY2hpbmVfaXNfdm0oKSkgPyBFQkNBU0Moc3RyLCBucikgOiBFQkNBU0NfNTAwKHN0ciwgbnIpO1xcbmRyaXZlcnMvczM5MC9jaGFyL3NjbHAuaC0zNTQtfVxcbi0tXFxuZHJpdmVycy9zMzkwL2NoYXIvc2NscC5oPTM1OD1zY2xwX2FzY2ViY19zdHIoY2hhciAqc3RyLCBpbnQgbnIpXFxuZHJpdmVycy9zMzkwL2NoYXIvc2NscC5oLTM1OS17XFxuZHJpdmVycy9zMzkwL2NoYXIvc2NscC5oOjM2MDpcXHQobWFjaGluZV9pc192bSgpKSA/IEFTQ0VCQyhzdHIsIG5yKSA6IEFTQ0VCQ181MDAoc3RyLCBucik7XFxuZHJpdmVycy9zMzkwL2NoYXIvc2NscC5oLTM2MS19XFxuLS1cXG5kcml2ZXJzL3MzOTAvY2hhci9zY2xwX2Vhcmx5LmM9MjY9c3RhdGljIHZvaWQgX19pbml0IHNjbHBfZWFybHlfZmFjaWxpdGllc19kZXRlY3Qodm9pZClcXG4tLVxcbmRyaXZlcnMvczM5MC9jaGFyL3NjbHBfZWFybHkuYy03OC1cXHRpZiAoIXNjY2ItXFx1MDAzZWhjcHVhKSB7XFxuZHJpdmVycy9zMzkwL2NoYXIvc2NscF9lYXJseS5jOjc5OlxcdFxcdGlmIChtYWNoaW5lX2lzX3ZtKCkpXFxuZHJpdmVycy9zMzkwL2NoYXIvc2NscF9lYXJseS5jLTgwLVxcdFxcdFxcdHNjbHAubWF4X2NvcmVzID0gNjQ7XFxuLS1cXG5kcml2ZXJzL3MzOTAvY2hhci9zY2xwX3R0eS5jPTUwNT1zY2xwX3R0eV9pbml0KHZvaWQpXFxuLS1cXG5kcml2ZXJzL3MzOTAvY2hhci9zY2xwX3R0eS5jLTUxMi1cXHQvKiB6L1ZNIG11bHRpcGxleGVzIHRoZSBsaW5lIG1vZGUgb3V0cHV0IG9uIHRoZSAzMnh4IHNjcmVlbiAqL1xcbmRyaXZlcnMvczM5MC9jaGFyL3NjbHBfdHR5LmM6NTEzOlxcdGlmIChtYWNoaW5lX2lzX3ZtKCkgXFx1MDAyNlxcdTAwMjYgIUNPTlNPTEVfSVNfU0NMUClcXG5kcml2ZXJzL3MzOTAvY2hhci9zY2xwX3R0eS5jLTUxNC1cXHRcXHRyZXR1cm4gMDtcXG4tLVxcbmRyaXZlcnMvczM5MC9jaGFyL3NjbHBfdHR5LmMtNTM4LVxcdHNjbHBfdHR5X2J1ZmZlcl9jb3VudCA9IDA7XFxuZHJpdmVycy9zMzkwL2NoYXIvc2NscF90dHkuYzo1Mzk6XFx0aWYgKG1hY2hpbmVfaXNfdm0oKSkge1xcbmRyaXZlcnMvczM5MC9jaGFyL3NjbHBfdHR5LmMtNTQwLVxcdFxcdC8qIGNhc2UgaW5wdXQgbGluZXMgdG8gbG93ZXJjYXNlICovXFxuLS1cXG5kcml2ZXJzL3MzOTAvY2hhci92bWNwLmM9NTI9dm9pZCBfX2luaXQgdm1jcF9jbWFfcmVzZXJ2ZSh2b2lkKVxcbmRyaXZlcnMvczM5MC9jaGFyL3ZtY3AuYy01My17XFxuZHJpdmVycy9zMzkwL2NoYXIvdm1jcC5jOjU0OlxcdGlmICghbWFjaGluZV9pc192bSgpKVxcbmRyaXZlcnMvczM5MC9jaGFyL3ZtY3AuYy01NS1cXHRcXHRyZXR1cm47XFxuLS1cXG5kcml2ZXJzL3MzOTAvY2hhci92bWNwLmM9MjQ4PXN0YXRpYyBpbnQgX19pbml0IHZtY3BfaW5pdCh2b2lkKVxcbi0tXFxuZHJpdmVycy9zMzkwL2NoYXIvdm1jcC5jLTI1MS1cXG5kcml2ZXJzL3MzOTAvY2hhci92bWNwLmM6MjUyOlxcdGlmICghbWFjaGluZV9pc192bSgpKVxcbmRyaXZlcnMvczM5MC9jaGFyL3ZtY3AuYy0yNTMtXFx0XFx0cmV0dXJuIDA7XFxuLS1cXG5kcml2ZXJzL3MzOTAvY2hhci92bWxvZ3Jkci5jPTgwNj1zdGF0aWMgaW50IF9faW5pdCB2bWxvZ3Jkcl9pbml0KHZvaWQpXFxuLS1cXG5kcml2ZXJzL3MzOTAvY2hhci92bWxvZ3Jkci5jLTgxMS1cXG5kcml2ZXJzL3MzOTAvY2hhci92bWxvZ3Jkci5jOjgxMjpcXHRpZiAoIW1hY2hpbmVfaXNfdm0oKSkge1xcbmRyaXZlcnMvczM5MC9jaGFyL3ZtbG9ncmRyLmMtODEzLVxcdFxcdHByX2VycihcXFwibm90IHJ1bm5pbmcgdW5kZXIgVk0sIGRyaXZlciBub3QgbG9hZGVkLlxcXFxuXFxcIik7XFxuLS1cXG5kcml2ZXJzL3MzOTAvY2hhci92bXVyLmM9MTAwNj1zdGF0aWMgaW50IF9faW5pdCB1cl9pbml0KHZvaWQpXFxuLS1cXG5kcml2ZXJzL3MzOTAvY2hhci92bXVyLmMtMTAxMC1cXG5kcml2ZXJzL3MzOTAvY2hhci92bXVyLmM6MTAxMTpcXHRpZiAoIW1hY2hpbmVfaXNfdm0oKSkge1xcbmRyaXZlcnMvczM5MC9jaGFyL3ZtdXIuYy0xMDEyLVxcdFxcdHByX2VycihcXFwiVGhlICVzIGNhbm5vdCBiZSBsb2FkZWQgd2l0aG91dCB6L1ZNXFxcXG5cXFwiLFxcbi0tXFxuZHJpdmVycy9zMzkwL2Npby9kZXZpY2VfaWQuYz0xNzM9c3RhdGljIHZvaWQgc25zaWRfY2FsbGJhY2soc3RydWN0IGNjd19kZXZpY2UgKmNkZXYsIHZvaWQgKmRhdGEsIGludCByYylcXG4tLVxcbmRyaXZlcnMvczM5MC9jaW8vZGV2aWNlX2lkLmMtMTc4LVxcbmRyaXZlcnMvczM5MC9jaW8vZGV2aWNlX2lkLmM6MTc5OlxcdGlmIChyYyBcXHUwMDI2XFx1MDAyNiBtYWNoaW5lX2lzX3ZtKCkpIHtcXG5kcml2ZXJzL3MzOTAvY2lvL2RldmljZV9pZC5jLTE4MC1cXHRcXHQvKiBUcnkgZGlhZyAweDIxMCBmYWxsYmFjayBvbiB6L1ZNLiAqL1xcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by9hcF9idXMuYz0yNDk0PXN0YXRpYyBpbmxpbmUgaW50IF9faW5pdCBhcF9hc3luY19pbml0KHZvaWQpXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL2FwX2J1cy5jLTI1MDQtXFx0ICovXFxuZHJpdmVycy9zMzkwL2NyeXB0by9hcF9idXMuYzoyNTA1OlxcdGlmIChtYWNoaW5lX2lzX3ZtKCkpXFxuZHJpdmVycy9zMzkwL2NyeXB0by9hcF9idXMuYy0yNTA2LVxcdFxcdHBvbGxfaGlnaF90aW1lb3V0ID0gMTUwMDAwMDtcXG4tLVxcbmRyaXZlcnMvczM5MC9uZXQvcWV0aF9sMl9tYWluLmM9Mjk3PXN0YXRpYyBpbnQgcWV0aF9sMl9yZXF1ZXN0X2luaXRpYWxfbWFjKHN0cnVjdCBxZXRoX2NhcmQgKmNhcmQpXFxuLS1cXG5kcml2ZXJzL3MzOTAvbmV0L3FldGhfbDJfbWFpbi5jLTMwMi1cXG5kcml2ZXJzL3MzOTAvbmV0L3FldGhfbDJfbWFpbi5jOjMwMzpcXHRpZiAobWFjaGluZV9pc192bSgpKSB7XFxuZHJpdmVycy9zMzkwL25ldC9xZXRoX2wyX21haW4uYy0zMDQtXFx0XFx0cmMgPSBxZXRoX3ZtX3JlcXVlc3RfbWFjKGNhcmQpO1xcbi0tXFxuZHJpdmVycy9zMzkwL25ldC9zbXNnaXVjdi5jPTEzOT1zdGF0aWMgaW50IF9faW5pdCBzbXNnX2luaXQodm9pZClcXG4tLVxcbmRyaXZlcnMvczM5MC9uZXQvc21zZ2l1Y3YuYy0xNDItXFxuZHJpdmVycy9zMzkwL25ldC9zbXNnaXVjdi5jOjE0MzpcXHRpZiAoIW1hY2hpbmVfaXNfdm0oKSkge1xcbmRyaXZlcnMvczM5MC9uZXQvc21zZ2l1Y3YuYy0xNDQtXFx0XFx0cmMgPSAtRVBST1RPTk9TVVBQT1JUO1xcbi0tXFxuZHJpdmVycy9zMzkwL25ldC9zbXNnaXVjdl9hcHAuYz0xNTI9c3RhdGljIGludCBfX2luaXQgc21zZ2l1Y3ZfYXBwX2luaXQodm9pZClcXG4tLVxcbmRyaXZlcnMvczM5MC9uZXQvc21zZ2l1Y3ZfYXBwLmMtMTU2LVxcbmRyaXZlcnMvczM5MC9uZXQvc21zZ2l1Y3ZfYXBwLmM6MTU3OlxcdGlmICghbWFjaGluZV9pc192bSgpKVxcbmRyaXZlcnMvczM5MC9uZXQvc21zZ2l1Y3ZfYXBwLmMtMTU4LVxcdFxcdHJldHVybiAtRU5PREVWO1xcbi0tXFxuZHJpdmVycy90dHkvaHZjL2h2Y19pdWN2LmM9MTIzOT1zdGF0aWMgaW50IHBhcmFtX3NldF92bWlkZmlsdGVyKGNvbnN0IGNoYXIgKnZhbCwgY29uc3Qgc3RydWN0IGtlcm5lbF9wYXJhbSAqa3ApXFxuLS1cXG5kcml2ZXJzL3R0eS9odmMvaHZjX2l1Y3YuYy0xMjQyLVxcbmRyaXZlcnMvdHR5L2h2Yy9odmNfaXVjdi5jOjEyNDM6XFx0aWYgKCFtYWNoaW5lX2lzX3ZtKCkgfHwgIWh2Y19pdWN2X2RldmljZXMpXFxuZHJpdmVycy90dHkvaHZjL2h2Y19pdWN2LmMtMTI0NC1cXHRcXHRyZXR1cm4gLUVOT0RFVjtcXG4tLVxcbmRyaXZlcnMvdHR5L2h2Yy9odmNfaXVjdi5jPTEyNjY9c3RhdGljIGludCBwYXJhbV9nZXRfdm1pZGZpbHRlcihjaGFyICpidWZmZXIsIGNvbnN0IHN0cnVjdCBrZXJuZWxfcGFyYW0gKmtwKVxcbi0tXFxuZHJpdmVycy90dHkvaHZjL2h2Y19pdWN2LmMtMTI3MS1cXG5kcml2ZXJzL3R0eS9odmMvaHZjX2l1Y3YuYzoxMjcyOlxcdGlmICghbWFjaGluZV9pc192bSgpIHx8ICFodmNfaXVjdl9kZXZpY2VzKVxcbmRyaXZlcnMvdHR5L2h2Yy9odmNfaXVjdi5jLTEyNzMtXFx0XFx0cmV0dXJuIC1FTk9ERVY7XFxuLS1cXG5kcml2ZXJzL3R0eS9odmMvaHZjX2l1Y3YuYz0xMzAxPXN0YXRpYyBpbnQgX19pbml0IGh2Y19pdWN2X2luaXQodm9pZClcXG4tLVxcbmRyaXZlcnMvdHR5L2h2Yy9odmNfaXVjdi5jLTEzMDgtXFxuZHJpdmVycy90dHkvaHZjL2h2Y19pdWN2LmM6MTMwOTpcXHRpZiAoIW1hY2hpbmVfaXNfdm0oKSkge1xcbmRyaXZlcnMvdHR5L2h2Yy9odmNfaXVjdi5jLTEzMTAtXFx0XFx0cHJfbm90aWNlKFxcXCJUaGUgei9WTSBJVUNWIEhWQyBkZXZpY2UgZHJpdmVyIGNhbm5vdCBcXFwiXFxuLS1cXG5kcml2ZXJzL3dhdGNoZG9nL2RpYWcyODhfd2R0LmM9ODE9c3RhdGljIGludCB3ZHRfc3RhcnQoc3RydWN0IHdhdGNoZG9nX2RldmljZSAqZGV2KVxcbi0tXFxuZHJpdmVycy93YXRjaGRvZy9kaWFnMjg4X3dkdC5jLTg1LVxcbmRyaXZlcnMvd2F0Y2hkb2cvZGlhZzI4OF93ZHQuYzo4NjpcXHRpZiAobWFjaGluZV9pc192bSgpKSB7XFxuZHJpdmVycy93YXRjaGRvZy9kaWFnMjg4X3dkdC5jLTg3LVxcdFxcdGZ1bmMgPSBjb25jZWFsX29uID8gKFdEVF9GVU5DX0lOSVQgfCBXRFRfRlVOQ19DT05DRUFMKVxcbi0tXFxuZHJpdmVycy93YXRjaGRvZy9kaWFnMjg4X3dkdC5jPTEwNz1zdGF0aWMgaW50IHdkdF9waW5nKHN0cnVjdCB3YXRjaGRvZ19kZXZpY2UgKmRldilcXG4tLVxcbmRyaXZlcnMvd2F0Y2hkb2cvZGlhZzI4OF93ZHQuYy0xMTEtXFxuZHJpdmVycy93YXRjaGRvZy9kaWFnMjg4X3dkdC5jOjExMjpcXHRpZiAobWFjaGluZV9pc192bSgpKSB7XFxuZHJpdmVycy93YXRjaGRvZy9kaWFnMjg4X3dkdC5jLTExMy1cXHRcXHQvKlxcbi0tXFxuZHJpdmVycy93YXRjaGRvZy9kaWFnMjg4X3dkdC5jPTE2Mj1zdGF0aWMgaW50IF9faW5pdCBkaWFnMjg4X2luaXQodm9pZClcXG4tLVxcbmRyaXZlcnMvd2F0Y2hkb2cvZGlhZzI4OF93ZHQuYy0xNjUtXFxuZHJpdmVycy93YXRjaGRvZy9kaWFnMjg4X3dkdC5jOjE2NjpcXHRpZiAobWFjaGluZV9pc192bSgpKSB7XFxuZHJpdmVycy93YXRjaGRvZy9kaWFnMjg4X3dkdC5jLTE2Ny1cXHRcXHRjbWRfYnVmID0ga21hbGxvYyhNQVhfQ01ETEVOLCBHRlBfS0VSTkVMKTtcXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYz0yMzA3PXN0YXRpYyBpbnQgX19pbml0IGFmaXVjdl9pbml0KHZvaWQpXFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmMtMjMxMC1cXG5uZXQvaXVjdi9hZl9pdWN2LmM6MjMxMTpcXHRpZiAobWFjaGluZV9pc192bSgpIFxcdTAwMjZcXHUwMDI2IElTX0VOQUJMRUQoQ09ORklHX0lVQ1YpKSB7XFxubmV0L2l1Y3YvYWZfaXVjdi5jLTIzMTItXFx0XFx0Y3BjbWQoXFxcIlFVRVJZIFVTRVJJRFxcXCIsIGl1Y3ZfdXNlcmlkLCBzaXplb2YoaXVjdl91c2VyaWQpLCBcXHUwMDI2ZXJyKTtcXG4tLVxcbm5ldC9pdWN2L2l1Y3YuYz0xODYyPXN0YXRpYyBpbnQgX19pbml0IGl1Y3ZfaW5pdCh2b2lkKVxcbi0tXFxubmV0L2l1Y3YvaXVjdi5jLTE4NjUtXFxubmV0L2l1Y3YvaXVjdi5jOjE4NjY6XFx0aWYgKCFtYWNoaW5lX2lzX3ZtKCkpIHtcXG5uZXQvaXVjdi9pdWN2LmMtMTg2Ny1cXHRcXHRyYyA9IC1FUFJPVE9OT1NVUFBPUlQ7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE1VDE1OjU1OjIyLjc5MDQ2NjM5NFoiLCJTZXEiOjMxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1Mjk2NjU3MTk5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBJVUNWIEluaXRpYWxpemF0aW9uKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgYGFmaXVjdl9pbml0YCBhbmQgaW1tZWRpYXRlbHkgc2VlaW5nIGEgY29uZGl0aW9uYWwgYmxvY2sgZGVhbGluZyB3aXRoIHovVk0gYW5kIElVQ1YuIEl0J3MgdXNpbmcgYG1hY2hpbmVfaXNfdm0oKWAgYW5kIGNoZWNraW5nIGZvciBgQ09ORklHX0lVQ1ZgLiBTZWVtcyBzdHJhaWdodGZvcndhcmQ6IGlmIHdlJ3JlIG9uIGEgei9WTSBtYWNoaW5lIGFuZCBJVUNWIGlzIGVuYWJsZWQsIGl0IGdyYWJzIHRoZSB1c2VyIElEIHdpdGggYSBgY3BjbWRgIGNhbGwuIFRoZW4gaXQgYXNzaWducyBgcHJfaXVjdmAgdG8gcG9pbnQgdG8gYFx1MDAyNml1Y3ZfaWZgLiBIb3dldmVyLCBpZiB3ZSdyZSAqbm90KiBpbiBhIHovVk0gZW52aXJvbm1lbnQsIHdoaWNoLCB0aGlua2luZyBhYm91dCBpdCwgaXMgdGhlIGNhc2Ugd2l0aCBRRU1VICh1bmxlc3MgUUVNVSBpcyBiZWluZyB1c2VkIHRvIGVtdWxhdGUgei9WTSAtIGJ1dCBpdCdzIGVtdWxhdGluZyBMUEFSIG9yIEtWTSksIGBwcl9pdWN2YCBnZXRzIHNldCB0byBOVUxMLCBhbmQgdGhlIGBpdWN2X3VzZXJpZGAgaXMgY2xlYXJlZC5cblxuTm93LCB0aGUgaW1wb3J0YW50IGNvbm5lY3Rpb24gaGVyZSBpcyB0aGUgaW1wbGljYXRpb24gdGhpcyBjYXJyaWVzIHRocm91Z2ggdGhlIGNvZGUuIElmIGBwcl9pdWN2YCBpcyBOVUxMLCBhcyBpdCB3aWxsIGJlIGluIHRoZSBRRU1VIGNhc2UgSSdtIHRlc3RpbmcsIGBpdWN2LVx1MDAzZXRyYW5zcG9ydGAgaXMgKiphbHdheXMqKiBzZXQgdG8gYEFGX0lVQ1ZfVFJBTlNfSElQRVJgLiBJIG5lZWQgdG8gcmV2aXNpdCBgaXVjdl9zb2NrX2FsbG9jYCB0byBjb25maXJtIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhpcyBpbXBsaWNhdGlvbi4gTGV0IG1lIGp1c3QgZG91YmxlLWNoZWNrIHRoYXQgcGFydC4uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyODM2OCwiT3V0cHV0VG9rZW5zIjo0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNVQxNTo1NToyOC4wODcxMjYyMTNaIiwiU2VxIjozMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTIyNDQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9pdWN2L2FmX2l1Y3YuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA0OTAsXG4gIFwiTGluZUNvdW50XCI6IDEwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA0OTA6XFx0XFx0aXVjdi1cXHUwMDNlcGF0aCA9IE5VTEw7XFxuIDQ5MTpcXHRcXHRpdWN2LVxcdTAwM2Vza190eG5vdGlmeSA9IGFmaXVjdl9oc19jYWxsYmFja190eG5vdGlmeTtcXG4gNDkyOlxcdFxcdG1lbXNldChcXHUwMDI2aXVjdi1cXHUwMDNlaW5pdCwgMCwgc2l6ZW9mKGl1Y3YtXFx1MDAzZWluaXQpKTtcXG4gNDkzOlxcdFxcdGlmIChwcl9pdWN2KVxcbiA0OTQ6XFx0XFx0XFx0aXVjdi1cXHUwMDNldHJhbnNwb3J0ID0gQUZfSVVDVl9UUkFOU19JVUNWO1xcbiA0OTU6XFx0XFx0ZWxzZVxcbiA0OTY6XFx0XFx0XFx0aXVjdi1cXHUwMDNldHJhbnNwb3J0ID0gQUZfSVVDVl9UUkFOU19ISVBFUjtcXG4gNDk3OlxcdFxcbiA0OTg6XFx0XFx0c2stXFx1MDAzZXNrX2Rlc3RydWN0ID0gaXVjdl9zb2NrX2Rlc3RydWN0O1xcbiA0OTk6XFx0XFx0c2stXFx1MDAzZXNrX3NuZHRpbWVvID0gSVVDVl9DT05OX1RJTUVPVVQ7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE1VDE1OjU1OjI4LjA4NzI0OTk2MloiLCJTZXEiOjMzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NjU4MzgyODI1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoaXMgSVVDViBDb2RlKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgdHJhY2luZyB0aGUgbG9naWMuIElmIGBwcl9pdWN2YCBpcyBOVUxMLCB0aGVuIHRoZSB0cmFuc3BvcnQgdHlwZSBmb3IgdGhlIGBpdWN2YCBzdHJ1Y3R1cmUgaXMgZGVmaW5pdGVseSBnb2luZyB0byBiZSBgQUZfSVVDVl9UUkFOU19ISVBFUmAsIHRoYXQncyBhIGdpdmVuLiBUaGUgcGF0Y2ggY29kZSBpdHNlbGYsIHdpdGggdGhhdCBgaWYgKGVyciBcdTAwMjZcdTAwMjYgaXVjdi1cdTAwM2V0cmFuc3BvcnQgPT0gQUZfSVVDVl9UUkFOU19JVUNWKWAgYmxvY2ssICpvbmx5KiBnZXRzIGV4ZWN1dGVkIHdoZW4gdGhlIHRyYW5zcG9ydCBpcyBzZXQgdG8gYEFGX0lVQ1ZfVFJBTlNfSVVDVmAuIEFuZCB0aGF0IHNwZWNpZmljIHRyYW5zcG9ydCB2YWx1ZSBpcyAqZXhjbHVzaXZlbHkqIHNldCB3aGVuIGBwcl9pdWN2YCBpcyBub24tTlVMTC4gVGhlIGtpY2tlciBoZXJlIGlzIGBwcl9pdWN2YCBpcyAqb25seSogbm9uLU5VTEwgd2hlbiBgbWFjaGluZV9pc192bSgpYCByZXR1cm5zIHRydWUuIFNvIHRoYXQgZ2l2ZXMgbWUgbXkga2V5IHF1ZXN0aW9uOiBjYW4gd2UgcmVhY2ggYSBzaXR1YXRpb24gaW4gUUVNVSB3aGVyZSBgbWFjaGluZV9pc192bSgpYCB3b3VsZCBhY3R1YWxseSBiZSB0cnVlPyBJIG5lZWQgdG8gZGlnIGludG8gaG93IHRoYXQgZnVuY3Rpb24gaXMgZGVmaW5lZCBhbmQgZmlndXJlIHRoYXQgb3V0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyOTE0MCwiT3V0cHV0VG9rZW5zIjo0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI2MywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE1VDE1OjU1OjMzLjc0NTYzNTAwOVoiLCJTZXEiOjM0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjgwNDk4NTgxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIiNkZWZpbmUgbWFjaGluZV9pc192bVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3MzOTAvaW5jbHVkZS9hc20vbWFjaGluZS5oXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvczM5MC9pbmNsdWRlL2FzbS9tYWNoaW5lLmg9OTc9REVGSU5FX01BQ0hJTkVfSEFTX0ZFQVRVUkUobHBhciwgTUZFQVRVUkVfTFBBUilcXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vbWFjaGluZS5oLTk4LVxcbmFyY2gvczM5MC9pbmNsdWRlL2FzbS9tYWNoaW5lLmg6OTk6I2RlZmluZSBtYWNoaW5lX2lzX3ZtXFx0bWFjaGluZV9oYXNfdm1cXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vbWFjaGluZS5oLTEwMC0jZGVmaW5lIG1hY2hpbmVfaXNfa3ZtXFx0bWFjaGluZV9oYXNfa3ZtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE1VDE1OjU1OjM0LjAyNjE0MDQ5WiIsIlNlcSI6MzUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMwNzUzMDkzNDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkNoZWNraW5nIHRoZSBWaXJ0dWFsIE1hY2hpbmUgU3RhdGUqKlxuXG5SaWdodCwgbGV0J3MganVzdCBtYWtlIHN1cmUgd2UncmUgb24gdGhlIHNhbWUgcGFnZS4gQmVmb3JlIHdlIGV2ZW4gY29uc2lkZXIgYW55dGhpbmcgZWxzZSwgaXQncyBhYnNvbHV0ZWx5IGNydWNpYWwgdGhhdCB3ZSB2ZXJpZnkgdGhlIHN0YXRlIG9mIHRoZSB2aXJ0dWFsIG1hY2hpbmUgZW52aXJvbm1lbnQuIFRoZSBmdW5jdGlvbiBvciB2YXJpYWJsZSBgbWFjaGluZV9oYXNfdm1gIGlzIHRoZSBzaW5nbGUgcG9pbnQgb2YgdHJ1dGggaGVyZS4gV2UgbmVlZCB0byBhc2NlcnRhaW4gaWYgdGhlIHZpcnR1YWwgbWFjaGluZSBpcyBhY3RpdmVseSBwcmVzZW50LCBwcm9wZXJseSBjb25maWd1cmVkLCBhbmQgZnVuY3Rpb25pbmcgYXMgZXhwZWN0ZWQuIEl0J3MgdGhlIGx5bmNocGluLiBJZiB0aGF0IGJhc2ljIGNvbmRpdGlvbiBpc24ndCBtZXQsIHRoZXJlJ3Mgbm8gcG9pbnQgaW4gcHJvY2VlZGluZyBmdXJ0aGVyIGRvd24gdGhlIGRpYWdub3N0aWMgb3Igb3BlcmF0aW9uYWwgcGF0aC4gV2UncmUgZXNzZW50aWFsbHkgZ3JvdW5kaW5nIG91cnNlbHZlcyBieSBxdWlja2x5IHZhbGlkYXRpbmcgdGhlIHZpcnR1YWwgbWFjaGluZSBlbnZpcm9ubWVudCBmaXJzdC4gRnJvbSB0aGVyZSwgd2UgY2FuIHRoZW4gYmVnaW4gdG8gYXNzZXNzIHRoZSBzdGF0ZS5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjk4MDMsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNVQxNTo1NTozNy4xMDE0NTIwMDJaIiwiU2VxIjozNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUwMTkyNjY4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1hY2hpbmVfaGFzX3ZtXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gvczM5MC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9zMzkwL2luY2x1ZGUvYXNtL21hY2hpbmUuaD05Nz1ERUZJTkVfTUFDSElORV9IQVNfRkVBVFVSRShscGFyLCBNRkVBVFVSRV9MUEFSKVxcbmFyY2gvczM5MC9pbmNsdWRlL2FzbS9tYWNoaW5lLmgtOTgtXFxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL21hY2hpbmUuaDo5OTojZGVmaW5lIG1hY2hpbmVfaXNfdm1cXHRtYWNoaW5lX2hhc192bVxcbmFyY2gvczM5MC9pbmNsdWRlL2FzbS9tYWNoaW5lLmgtMTAwLSNkZWZpbmUgbWFjaGluZV9pc19rdm1cXHRtYWNoaW5lX2hhc19rdm1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTVUMTU6NTU6MzcuMTUxNjQ5ODMxWiIsIlNlcSI6MzcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ5NTkyMzM3MjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIHRoZSBWTSBGZWF0dXJlIERlZmluaXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGBtYWNoaW5lX2hhc192bWAgbWFjcm8uLi4gYW5kIGhhbmcgb24sIGlzIHRoYXQgcmlnaHQ/IEl0IGxvb2tzIGxpa2UgYG1hY2hpbmVfaGFzX3ZtYCBpcyAqZGVmaW5lZCogdXNpbmcgYERFRklORV9NQUNISU5FX0hBU19GRUFUVVJFKHZtLCBNRkVBVFVSRV9WTSlgLiBUaGF0IGZlZWxzIGEgbGl0dGxl4oCmIGluZGlyZWN0LiBJIG5lZWQgdG8gdW5wYWNrIHRoaXMuIElzIGBERUZJTkVfTUFDSElORV9IQVNfRkVBVFVSRWAgYSBtYWNybyBpdHNlbGY/IFdoYXQgYXJndW1lbnRzIGlzIGl0IHRha2luZywgYW5kIHdoYXQgYXJlIHRoZXkgdHJhbnNsYXRpbmcgdG8gdW5kZXIgdGhlIGhvb2Q/IEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgYHZtYCBhbmQgYE1GRUFUVVJFX1ZNYCBpZGVudGlmaWVycyBhcmUgYmVpbmcgY29ubmVjdGVkIHRocm91Z2ggdGhpcyBtYWNyby4gSeKAmW0gZ3Vlc3NpbmcgYE1GRUFUVVJFX1ZNYCBpcyBhbiBlbnVtIG9yIGEgYml0ZmllbGQgcmVwcmVzZW50YXRpb24gb2YgdGhlIFZNIGNhcGFiaWxpdHksIGJ1dCBJIG5lZWQgdG8gY29uZmlybS4gSXTigJlzIGltcG9ydGFudCB0byBzZWUgaWYgdGhlcmUncyBhbnkgcG90ZW50aWFsIGZvciBzdWJ0bGUgZXJyb3JzIG9yIGltcGxpY2l0IGFzc3VtcHRpb25zIGluIHRoaXMgYXBwcm9hY2gsIHBhcnRpY3VsYXJseSBpZiB0aGlzIGZlYXR1cmUtY2hlY2tpbmcgbWVjaGFuaXNtIGlzIHVzZWQgaGVhdmlseSB0aHJvdWdob3V0IHRoZSBjb2RlYmFzZS4gSSB3b25kZXIgaWYgdGhlcmUgbWlnaHQgYmUgYSBtb3JlIGRpcmVjdCwgcGVyaGFwcyBsZXNzIG1hY3JvLWhlYXZ5IGFwcHJvYWNoIHRoYXQgd291bGQgZW5oYW5jZSByZWFkYWJpbGl0eSBhbmQgcmVkdWNlIHRoZSBjaGFuY2Ugb2Ygb2JzY3VyZSwgbWFjcm8tcmVsYXRlZCBidWdzLiBMZXQncyBzZWUgaG93IHRoaXMgdW5mb2xkc+KApiBJIG5lZWQgdG8gc2VlIGV4YWN0bHkgd2hhdCB0aGlzIGV4cGFuc2lvbiBvZiBgREVGSU5FX01BQ0hJTkVfSEFTX0ZFQVRVUkVgIHlpZWxkcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MzAxNDQsIk91dHB1dFRva2VucyI6NDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNVQxNTo1NTo0Mi4xMTA4ODY3NDhaIiwiU2VxIjozOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1NDIyODQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkRFRklORV9NQUNISU5FX0hBU19GRUFUVVJFXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gvczM5MC9pbmNsdWRlL2FzbS9tYWNoaW5lLmhcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9zMzkwL2luY2x1ZGUvYXNtL21hY2hpbmUuaD02OD1zdGF0aWMgX19hbHdheXNfaW5saW5lIGJvb2wgX190ZXN0X21hY2hpbmVfZmVhdHVyZV9jb25zdGFudCh1bnNpZ25lZCBpbnQgbnIpXFxuLS1cXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vbWFjaGluZS5oLTgwLVxcbmFyY2gvczM5MC9pbmNsdWRlL2FzbS9tYWNoaW5lLmg6ODE6I2RlZmluZSBERUZJTkVfTUFDSElORV9IQVNfRkVBVFVSRShuYW1lLCBmZWF0dXJlKVxcdFxcdFxcdFxcdFxcXFxcXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vbWFjaGluZS5oLTgyLXN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgYm9vbCBtYWNoaW5lX2hhc18jI25hbWUodm9pZClcXHRcXHRcXHRcXHRcXFxcXFxuLS1cXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vbWFjaGluZS5oLTg4LVxcbmFyY2gvczM5MC9pbmNsdWRlL2FzbS9tYWNoaW5lLmg6ODk6REVGSU5FX01BQ0hJTkVfSEFTX0ZFQVRVUkUocmVsb2NhdGVkX2xvd2NvcmUsIE1GRUFUVVJFX0xPV0NPUkUpXFxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL21hY2hpbmUuaDo5MDpERUZJTkVfTUFDSElORV9IQVNfRkVBVFVSRShzY2MsIE1GRUFUVVJFX1NDQylcXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vbWFjaGluZS5oOjkxOkRFRklORV9NQUNISU5FX0hBU19GRUFUVVJFKHRsYl9ndWVzdCwgTUZFQVRVUkVfVExCX0dVRVNUKVxcbmFyY2gvczM5MC9pbmNsdWRlL2FzbS9tYWNoaW5lLmg6OTI6REVGSU5FX01BQ0hJTkVfSEFTX0ZFQVRVUkUodHgsIE1GRUFUVVJFX1RYKVxcbmFyY2gvczM5MC9pbmNsdWRlL2FzbS9tYWNoaW5lLmg6OTM6REVGSU5FX01BQ0hJTkVfSEFTX0ZFQVRVUkUoZXNvcCwgTUZFQVRVUkVfRVNPUClcXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vbWFjaGluZS5oOjk0OkRFRklORV9NQUNISU5FX0hBU19GRUFUVVJFKGRpYWc5YywgTUZFQVRVUkVfRElBRzlDKVxcbmFyY2gvczM5MC9pbmNsdWRlL2FzbS9tYWNoaW5lLmg6OTU6REVGSU5FX01BQ0hJTkVfSEFTX0ZFQVRVUkUodm0sIE1GRUFUVVJFX1ZNKVxcbmFyY2gvczM5MC9pbmNsdWRlL2FzbS9tYWNoaW5lLmg6OTY6REVGSU5FX01BQ0hJTkVfSEFTX0ZFQVRVUkUoa3ZtLCBNRkVBVFVSRV9LVk0pXFxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL21hY2hpbmUuaDo5NzpERUZJTkVfTUFDSElORV9IQVNfRkVBVFVSRShscGFyLCBNRkVBVFVSRV9MUEFSKVxcbmFyY2gvczM5MC9pbmNsdWRlL2FzbS9tYWNoaW5lLmgtOTgtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE1VDE1OjU1OjQyLjE1NjMxODE2NloiLCJTZXEiOjM5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NjQ3MjIxODM1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGFuYWx5emluZyBob3cgYE1GRUFUVVJFX1ZNYCBpcyBzZXQ6XG5cbioqVW5kZXJzdGFuZGluZyB0aGUgYE1GRUFUVVJFX1ZNYCBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gSSdtIHRyeWluZyB0byBmaWd1cmUgb3V0IHRoZSBjb25maWd1cmF0aW9uIHNvdXJjZSBmb3IgYE1GRUFUVVJFX1ZNYC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHRyYWNlIGl0cyBkZWZpbml0aW9uIHdpdGhpbiB0aGUgc3lzdGVtJ3MgY29kZWJhc2UuIFdoZXJlIGlzIGl0IGZpcnN0ICpkZWNsYXJlZCogb3IgKmluaXRpYWxpemVkKj8gSXMgaXQgYSBjb21waWxlLXRpbWUgZmxhZywgYSBydW50aW1lIHBhcmFtZXRlciwgb3IgcGVyaGFwcyBwdWxsZWQgZnJvbSBhIGNvbmZpZ3VyYXRpb24gZmlsZT8gSSBuZWVkIHRvIHF1aWNrbHkgaWRlbnRpZnkgdGhlIHJlbGV2YW50IGhlYWRlciBmaWxlcywgYnVpbGQgc2NyaXB0cyAobGlrZSBNYWtlZmlsZXMgb3IgQ01ha2VMaXN0cy50eHQpLCBhbmQgYW55IGluaXRpYWxpemF0aW9uIHJvdXRpbmVzLlxuXG5NeSBmaWVsZCBrbm93bGVkZ2UgdGVsbHMgbWUgdG8gY29uc2lkZXIgcG90ZW50aWFsIHNvdXJjZXMgc3VjaCBhczpcblxuKiAgICoqUHJlLXByb2Nlc3NvciBkZWZpbml0aW9uczoqKiBJcyBpdCBkZWZpbmVkIHVzaW5nIGAtRGAgZmxhZ3MgZHVyaW5nIHRoZSBidWlsZCBwcm9jZXNzPyBJJ2QgbG9vayBmb3IgaXRzIHByZXNlbmNlIGluIE1ha2VmaWxlcyBvciBidWlsZCBzeXN0ZW0gY29uZmlndXJhdGlvbnMuXG4qICAgKipDb25maWd1cmF0aW9uIGZpbGVzOioqIFBlcmhhcHMgdGhlcmUncyBhIHNwZWNpZmljIGNvbmZpZ3VyYXRpb24gZmlsZSB0aGF0IGRpY3RhdGVzIHZpcnR1YWwgbWFjaGluZSBmZWF0dXJlcy4gSSBzaG91bGQgc2VhcmNoIGZvciBmaWxlcyB3aXRoIG5hbWVzIGxpa2UgYGNvbmZpZy5pbmlgLCBgdm0uY29uZmAsIG9yIHNvbWV0aGluZyBzaW1pbGFyLlxuKiAgICoqS2VybmVsIGNvbW1hbmQgbGluZToqKiBEb2VzIGl0IGdldCBwYXNzZWQgYXMgYSBib290IHBhcmFtZXRlcj8gVGhpcyBpcyBhIGNvbW1vbiBtZXRob2QgZm9yIGNvbmZpZ3VyaW5nIHN5c3RlbSBiZWhhdmlvci4gSSBzaG91bGQgY2hlY2sgcmVsZXZhbnQgYm9vdGxvYWRlciBjb25maWd1cmF0aW9ucyBvciBrZXJuZWwgY29tbWFuZCBsaW5lIHBhcnNpbmcgcm91dGluZXMuXG4qICAgKipFbnZpcm9ubWVudGFsIHZhcmlhYmxlczoqKiBDb3VsZCBpdCBiZSBzZXQgYXMgYW4gZW52aXJvbm1lbnQgdmFyaWFibGU/IFRoaXMgaXMgbGVzcyBjb21tb24gZm9yIGNvcmUgZmVhdHVyZXMsIGJ1dCBzdGlsbCBhIHBvc3NpYmlsaXR5LlxuKiAgICoqRHluYW1pYyBjb25maWd1cmF0aW9uOioqIENvdWxkIHRoaXMgYmUgY29uZmlndXJlZCBkeW5hbWljYWxseSBieSBzb21lIHJ1bm5pbmcgcHJvY2Vzcz8gSWYgc28sIHdoaWNoIHByb2Nlc3M/IElzIGl0IGEgZGVkaWNhdGVkIFZNIG1hbmFnZW1lbnQgZGFlbW9uLCBvciBzb21ldGhpbmcgbW9yZSBpbnRlZ3JhdGVkP1xuXG5OZXh0LCBJJ2xsIHN5c3RlbWF0aWNhbGx5IHNlYXJjaCB0aGUgY29kZSBiYXNlIHVzaW5nIHRoZSB0b29scyB0aGF0IEknbSBmYW1pbGlhciB3aXRoLCBzdWNoIGFzIGBncmVwYCBvciBhbiBJREUncyBzZWFyY2ggZnVuY3Rpb24uIEknbGwgbmVlZCB0byBsb29rIGZvciBpbnN0YW5jZXMgb2YgdGhlIHN5bWJvbCBpdHNlbGYsIG9yIGEgYnJvYWRlciBjb250ZXh0IHdoZXJlIGl0IGNvdWxkIGJlIGFzc2lnbmVkLiBJIGNhbiBuYXJyb3cgZG93biBteSBzZWFyY2ggYnkgZm9jdXNpbmcgb24gY29kZSBhcmVhcyBzcGVjaWZpY2FsbHkgcmVsYXRlZCB0byB2aXJ0dWFsIG1hY2hpbmUgZnVuY3Rpb25hbGl0eSBvciBmZWF0dXJlIG1hbmFnZW1lbnQuXG5cbkFzIGFuIGV4cGVydCwgSSBrbm93IHRoYXQgZG9jdW1lbnRhdGlvbiB3aWxsIGJlIGNyaXRpY2FsLiBJIHNob3VsZCBjb25zdWx0IGFueSByZWxhdGVkIGRlc2lnbiBkb2N1bWVudHMsIEFQSSBzcGVjaWZpY2F0aW9ucywgb3IgY29kZSBjb21tZW50cy4gVGhlc2Ugc2hvdWxkIHByb3ZpZGUgY2x1ZXMgYWJvdXQgaXRzIHB1cnBvc2UgYW5kIGhvdyBpdCdzIGludGVuZGVkIHRvIGJlIHNldC4gVGhpcyBtaWdodCByZXZlYWwgc29tZSBoaWRkZW4gYXNwZWN0cyBvZiB0aGUgaW1wbGVtZW50YXRpb24uXG5cblVsdGltYXRlbHksIGJ5IGNvbWJpbmluZyBjb2RlIGFuYWx5c2lzIGFuZCBkb2N1bWVudGF0aW9uIHJldmlldywgSSBzaG91bGQgYmUgYWJsZSB0byBwaW4gZG93biB0aGUgc291cmNlIG9mIGBNRkVBVFVSRV9WTWAgYW5kIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiBpdHMgY29uZmlndXJhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MzEwMDQsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNVQxNTo1NTo0Ni44MDM1NDIyNjFaIiwiU2VxIjo0MCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUzODQyNDU4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIk1GRUFUVVJFX1ZNXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gvczM5MC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9zMzkwL2Jvb3Qvc3RhcnR1cC5jPTUyPXN0YXRpYyB2b2lkIGRldGVjdF9tYWNoaW5lX3R5cGUodm9pZClcXG4tLVxcbmFyY2gvczM5MC9ib290L3N0YXJ0dXAuYy02Ny1cXHRlbHNlIGlmICghbWVtY21wKHZtbXMtXFx1MDAzZXZtWzBdLmNwaSwgXFxcIlxcXFx4YTlcXFxceDYxXFxcXHhlNVxcXFx4ZDRcXFwiLCA0KSlcXG5hcmNoL3MzOTAvYm9vdC9zdGFydHVwLmM6Njg6XFx0XFx0c2V0X21hY2hpbmVfZmVhdHVyZShNRkVBVFVSRV9WTSk7XFxuYXJjaC9zMzkwL2Jvb3Qvc3RhcnR1cC5jLTY5LX1cXG4tLVxcbmFyY2gvczM5MC9pbmNsdWRlL2FzbS9tYWNoaW5lLmgtMTctI2RlZmluZSBNRkVBVFVSRV9ESUFHOUNcXHRcXHQ2XFxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL21hY2hpbmUuaDoxODojZGVmaW5lIE1GRUFUVVJFX1ZNXFx0XFx0N1xcbmFyY2gvczM5MC9pbmNsdWRlL2FzbS9tYWNoaW5lLmgtMTktI2RlZmluZSBNRkVBVFVSRV9LVk1cXHRcXHQ4XFxuLS1cXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vbWFjaGluZS5oPTk0PURFRklORV9NQUNISU5FX0hBU19GRUFUVVJFKGRpYWc5YywgTUZFQVRVUkVfRElBRzlDKVxcbmFyY2gvczM5MC9pbmNsdWRlL2FzbS9tYWNoaW5lLmg6OTU6REVGSU5FX01BQ0hJTkVfSEFTX0ZFQVRVUkUodm0sIE1GRUFUVVJFX1ZNKVxcbmFyY2gvczM5MC9pbmNsdWRlL2FzbS9tYWNoaW5lLmgtOTYtREVGSU5FX01BQ0hJTkVfSEFTX0ZFQVRVUkUoa3ZtLCBNRkVBVFVSRV9LVk0pXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE1VDE1OjU1OjQ2Ljg1NzM5MVoiLCJTZXEiOjQxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyOTA2NTk3NjQ3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIHRoZSBvbmUgdGhpbmtpbmcgaXQ6XG5cbioqRGl2aW5nIGludG8gdGhlIFN5c3RlbSBBcmNoaXRlY3R1cmUqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGRpZyBpbnRvIHRoaXMuIEkgbmVlZCB0byBnZXQgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiBob3cgdGhlIHN5c3RlbSBpcyBpZGVudGlmeWluZyB0aGUgbWFjaGluZSB0eXBlIG9uIHRoaXMgczM5MCBhcmNoaXRlY3R1cmUuIExldCdzIHN0YXJ0IGJ5IHplcm9pbmcgaW4gb24gdGhhdCBgZGV0ZWN0X21hY2hpbmVfdHlwZWAgZnVuY3Rpb24uIEl0J3MgYWxtb3N0IGNlcnRhaW5seSBjcnVjaWFsIGluIGRldGVybWluaW5nIGhvdyB0aGUgYm9vdCBwcm9jZXNzIHByb2NlZWRzLCBzbyBJJ2xsIGZpbmQgaXQgaW4gYGFyY2gvczM5MC9ib290L3N0YXJ0dXAuY2AuIFRoYXQgZmlsZSBpcyB3aGVyZSB0aGUgaW5pdGlhbCBzeXN0ZW0gc2V0dXAgbWFnaWMgbGlrZWx5IGhhcHBlbnMuIEknbSBleHBlY3RpbmcgdG8gZmluZCBzb21lIGhhcmR3YXJlIHByb2JpbmcsIG1heWJlIHNvbWUgaW5zdHJ1Y3Rpb24gY2hlY2tzLCBvciBwZXJoYXBzIGV2ZW4gZWFybHkgZmlybXdhcmUgcXVlcmllcy4gTGV0J3Mgc2VlIHdoYXQncyBpbiBzdG9yZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzE4NzgsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNVQxNTo1NTo0OS43NjM5OTE2MjdaIiwiU2VxIjo0MiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODY5MDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiYXJjaC9zMzkwL2Jvb3Qvc3RhcnR1cC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDUyLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDUyOlxcdHN0YXRpYyB2b2lkIGRldGVjdF9tYWNoaW5lX3R5cGUodm9pZClcXG4gIDUzOlxcdHtcXG4gIDU0OlxcdFxcdHN0cnVjdCBzeXNpbmZvXzNfMl8yICp2bW1zID0gKHN0cnVjdCBzeXNpbmZvXzNfMl8yICopXFx1MDAyNnN5c2luZm9fcGFnZTtcXG4gIDU1OlxcdFxcbiAgNTY6XFx0XFx0LyogQ2hlY2sgY3VycmVudC1jb25maWd1cmF0aW9uLWxldmVsICovXFxuICA1NzpcXHRcXHRpZiAoc3RzaShOVUxMLCAwLCAwLCAwKSBcXHUwMDNjPSAyKSB7XFxuICA1ODpcXHRcXHRcXHRzZXRfbWFjaGluZV9mZWF0dXJlKE1GRUFUVVJFX0xQQVIpO1xcbiAgNTk6XFx0XFx0XFx0cmV0dXJuO1xcbiAgNjA6XFx0XFx0fVxcbiAgNjE6XFx0XFx0LyogR2V0IHZpcnR1YWwtbWFjaGluZSBjcHUgaW5mb3JtYXRpb24uICovXFxuICA2MjpcXHRcXHRpZiAoc3RzaSh2bW1zLCAzLCAyLCAyKSB8fCAhdm1tcy1cXHUwMDNlY291bnQpXFxuICA2MzpcXHRcXHRcXHRyZXR1cm47XFxuICA2NDpcXHRcXHQvKiBEZXRlY3Qga25vd24gaHlwZXJ2aXNvcnMgKi9cXG4gIDY1OlxcdFxcdGlmICghbWVtY21wKHZtbXMtXFx1MDAzZXZtWzBdLmNwaSwgXFxcIlxcXFx4ZDJcXFxceGU1XFxcXHhkNFxcXCIsIDMpKVxcbiAgNjY6XFx0XFx0XFx0c2V0X21hY2hpbmVfZmVhdHVyZShNRkVBVFVSRV9LVk0pO1xcbiAgNjc6XFx0XFx0ZWxzZSBpZiAoIW1lbWNtcCh2bW1zLVxcdTAwM2V2bVswXS5jcGksIFxcXCJcXFxceGE5XFxcXHg2MVxcXFx4ZTVcXFxceGQ0XFxcIiwgNCkpXFxuICA2ODpcXHRcXHRcXHRzZXRfbWFjaGluZV9mZWF0dXJlKE1GRUFUVVJFX1ZNKTtcXG4gIDY5OlxcdH1cXG4gIDcwOlxcdFxcbiAgNzE6XFx0c3RhdGljIHZvaWQgZGV0ZWN0X2RpYWcyODgodm9pZClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTVUMTU6NTU6NDkuNzY0MDgwNDQ3WiIsIlNlcSI6NDMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU3MDc3NTI2NTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgSHlwZXJ2aXNvciBEZXRlY3Rpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBob3cgd2UncmUgZGV0ZXJtaW5pbmcgdGhlIGh5cGVydmlzb3IgaW4gdGhpcyBzeXN0ZW0uIFRoZSBgc3RzaWAgaW5zdHJ1Y3Rpb24gaXMgdGhlIGtleSDigJMgaXQncyB0aGUgc3RhbmRhcmQgd2F5IHRvIGRldGVjdCB0aGUgdW5kZXJseWluZyB2aXJ0dWFsaXphdGlvbi4gSWYgdGhlIGBzdHNpYCBpbnN0cnVjdGlvbiByZXR1cm5zIHRoZSBFQkNESUMgdmFsdWUgYFxceGQyXFx4ZTVcXHhkNGAsIHRoYXQncyBLVk0sIG5vIHF1ZXN0aW9uLiBJZiBpdCByZXR1cm5zIGBcXHhhOVxceDYxXFx4ZTVcXHhkNGAsIHRoYXQncyB6L1ZNLiBTdHJhaWdodGZvcndhcmQgZW5vdWdoLlxuXG5Ob3csIFFFTVUgaXMgdGhlIGVtdWxhdG9yIGhlcmUsIHJpZ2h0PyBBbmQgaXQgY2FuIGVtdWxhdGUgZWl0aGVyIEtWTSBvciB1c2UgaXRzIG93biBUQ0cgKFRpbnkgQ29kZSBHZW5lcmF0b3IpLiBXaGVuIFFFTVUgaXMgcnVubmluZyBvbiB0b3Agb2YgYWN0dWFsIEtWTSwgaXQgd2lsbCBtaW1pYyB0aGUgS1ZNIGFuZCBjb3JyZWN0bHkgcmV0dXJuIHRoZSBcIktWTVwiIHN0cmluZyB0aHJvdWdoIHRoZSBgc3RzaWAgaW5zdHJ1Y3Rpb24sIG1ha2luZyBpdCBlYXN5IHRvIGlkZW50aWZ5LlxuXG5CdXQgdGhlIFRDRyBjYXNlLi4uIHRoYXQncyB3aGVyZSB0aGluZ3MgZ2V0IGludGVyZXN0aW5nLiBEb2VzIFFFTVUsIHdoZW4gcnVubmluZyB3aXRoIFRDRywgZW11bGF0ZSB6L1ZNPyBObywgdXN1YWxseSBub3QuIFR5cGljYWxseSwgUUVNVSBUQ0cgZWl0aGVyIHJldHVybnMgc29tZXRoaW5nIGRpZmZlcmVudCwgb3IgZGVmYXVsdHMgdG8gXCJLVk1cIiwgb3IgbWlnaHQgZXZlbiByZXR1cm4gbm90aGluZyBhdCBhbGwuIFRoYXQgbWVhbnMsIHJ1bm5pbmcgdW5kZXIgUUVNVSBhbmQgVENHLCB3ZSB3b3VsZCBsaWtlbHkgKm5vdCogYmUgYWJsZSB0byBpZGVudGlmeSB0aGUgdW5kZXJseWluZyBoeXBlcnZpc29yLlxuXG5IbW0sIHRoaXMgcmVtaW5kcyBtZSB0aGF0IHN5emthbGxlciBydW5zIHVuZGVyIFFFTVUsIGRvZXNuJ3QgaXQ/IFNvLCBiZWNhdXNlIHN5emthbGxlciBydW5zIG9uIHRvcCBvZiBRRU1VLCBpdCB3b3VsZCBub3QgcnVuIGRpcmVjdGx5IG9uIHovVk0sIHdoaWNoIG1ha2VzIGBtYWNoaW5lX2lzX3ZtKClgIGZhbHNlLlxuXG5XYWl0IGEgc2Vjb25kLCBpcyB0aGVyZSBhbm90aGVyIHBhdGh3YXkgdG8gc2V0dGluZyBgaXVjdi1cdTAwM2V0cmFuc3BvcnRgIHRvIGBBRl9JVUNWX1RSQU5TX0lVQ1ZgPyBJIG5lZWQgdG8gZG91YmxlLWNoZWNrIHRoYXQuIExldCdzIHJldmlzaXQgYG5ldC9pdWN2L2FmX2l1Y3YuY2AgdG8gbWFrZSBzdXJlIEkgaGF2ZW4ndCBtaXNzZWQgc29tZXRoaW5nIGNydWNpYWwuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMyNDU4LCJPdXRwdXRUb2tlbnMiOjQ0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjI5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTVUMTU6NTU6NTUuNDcxODM2NzIzWiIsIlNlcSI6NDQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjYxNDIwOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJBRl9JVUNWX1RSQU5TX0lVQ1ZcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2l1Y3YvYWZfaXVjdi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pdWN2L2FmX2l1Y3YuYz0xNjY9c3RhdGljIGlubGluZSBpbnQgaXVjdl9iZWxvd19tc2dsaW0oc3RydWN0IHNvY2sgKnNrKVxcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTE3MS1cXHRcXHRyZXR1cm4gMTtcXG5uZXQvaXVjdi9hZl9pdWN2LmM6MTcyOlxcdGlmIChpdWN2LVxcdTAwM2V0cmFuc3BvcnQgPT0gQUZfSVVDVl9UUkFOU19JVUNWKVxcbm5ldC9pdWN2L2FmX2l1Y3YuYy0xNzMtXFx0XFx0cmV0dXJuIChhdG9taWNfcmVhZChcXHUwMDI2aXVjdi1cXHUwMDNlc2tic19pbl94bWl0KSBcXHUwMDNjIGl1Y3YtXFx1MDAzZXBhdGgtXFx1MDAzZW1zZ2xpbSk7XFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmM9NDY2PXN0YXRpYyBzdHJ1Y3Qgc29jayAqaXVjdl9zb2NrX2FsbG9jKHN0cnVjdCBzb2NrZXQgKnNvY2ssIGludCBwcm90bywgZ2ZwX3QgcHJpbywgaW50IGtlcm4pXFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmMtNDkzLVxcdGlmIChwcl9pdWN2KVxcbm5ldC9pdWN2L2FmX2l1Y3YuYzo0OTQ6XFx0XFx0aXVjdi1cXHUwMDNldHJhbnNwb3J0ID0gQUZfSVVDVl9UUkFOU19JVUNWO1xcbm5ldC9pdWN2L2FmX2l1Y3YuYy00OTUtXFx0ZWxzZVxcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jPTU4Mj1zdGF0aWMgaW50IGl1Y3Zfc29ja19iaW5kKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrYWRkcl91bnNpemVkICphZGRyLFxcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTY0Ny1cXHRcXHRzay1cXHUwMDNlc2tfc3RhdGUgPSBJVUNWX0JPVU5EO1xcbm5ldC9pdWN2L2FmX2l1Y3YuYzo2NDg6XFx0XFx0aXVjdi1cXHUwMDNldHJhbnNwb3J0ID0gQUZfSVVDVl9UUkFOU19JVUNWO1xcbm5ldC9pdWN2L2FmX2l1Y3YuYy02NDktXFx0XFx0c2stXFx1MDAzZXNrX2FsbG9jYXRpb24gfD0gR0ZQX0RNQTtcXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYz02NjU9c3RhdGljIGludCBpdWN2X3NvY2tfYXV0b2JpbmQoc3RydWN0IHNvY2sgKnNrKVxcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTY3My1cXHRtZW1jcHkoaXVjdi1cXHUwMDNlc3JjX3VzZXJfaWQsIGl1Y3ZfdXNlcmlkLCA4KTtcXG5uZXQvaXVjdi9hZl9pdWN2LmM6Njc0OlxcdGl1Y3YtXFx1MDAzZXRyYW5zcG9ydCA9IEFGX0lVQ1ZfVFJBTlNfSVVDVjtcXG5uZXQvaXVjdi9hZl9pdWN2LmMtNjc1LVxcdHNrLVxcdTAwM2Vza19hbGxvY2F0aW9uIHw9IEdGUF9ETUE7XFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmM9NzMzPXN0YXRpYyBpbnQgaXVjdl9zb2NrX2Nvbm5lY3Qoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHNvY2thZGRyX3Vuc2l6ZWQgKmFkZHIsXFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmMtNzgwLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYzo3ODE6XFx0aWYgKGVyciBcXHUwMDI2XFx1MDAyNiBpdWN2LVxcdTAwM2V0cmFuc3BvcnQgPT0gQUZfSVVDVl9UUkFOU19JVUNWKSB7XFxubmV0L2l1Y3YvYWZfaXVjdi5jLTc4Mi1cXHRcXHRpdWN2X3NldmVyX3BhdGgoc2ssIDApO1xcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jPTE0MjY9c3RhdGljIGludCBpdWN2X3NvY2tfc2h1dGRvd24oc3RydWN0IHNvY2tldCAqc29jaywgaW50IGhvdylcXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYy0xNDUxLVxcdCAgICBzay1cXHUwMDNlc2tfc3RhdGUgPT0gSVVDVl9DT05ORUNURUQpIHtcXG5uZXQvaXVjdi9hZl9pdWN2LmM6MTQ1MjpcXHRcXHRpZiAoaXVjdi1cXHUwMDNldHJhbnNwb3J0ID09IEFGX0lVQ1ZfVFJBTlNfSVVDVikge1xcbm5ldC9pdWN2L2FmX2l1Y3YuYy0xNDUzLVxcdFxcdFxcdHR4bXNnLmNsYXNzID0gMDtcXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYy0xNDc1LVxcdGlmIChob3cgPT0gUkNWX1NIVVRET1dOIHx8IGhvdyA9PSBTSFVURE9XTl9NQVNLKSB7XFxubmV0L2l1Y3YvYWZfaXVjdi5jOjE0NzY6XFx0XFx0aWYgKChpdWN2LVxcdTAwM2V0cmFuc3BvcnQgPT0gQUZfSVVDVl9UUkFOU19JVUNWKSBcXHUwMDI2XFx1MDAyNlxcbm5ldC9pdWN2L2FmX2l1Y3YuYy0xNDc3LVxcdFxcdCAgICBpdWN2LVxcdTAwM2VwYXRoKSB7XFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmM9MTYxNT1zdGF0aWMgaW50IGl1Y3ZfY2FsbGJhY2tfY29ubnJlcShzdHJ1Y3QgaXVjdl9wYXRoICpwYXRoLFxcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTE2NzQtXFx0aXVjdl9zb2NrX2luaXQobnNrLCBzayk7XFxubmV0L2l1Y3YvYWZfaXVjdi5jOjE2NzU6XFx0bml1Y3YtXFx1MDAzZXRyYW5zcG9ydCA9IEFGX0lVQ1ZfVFJBTlNfSVVDVjtcXG5uZXQvaXVjdi9hZl9pdWN2LmMtMTY3Ni1cXHRuc2stXFx1MDAzZXNrX2FsbG9jYXRpb24gfD0gR0ZQX0RNQTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTVUMTU6NTU6NTUuNTE4NDU1OTcyWiIsIlNlcSI6NDUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEyMzk1OTYzMDYzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlVucmVhY2hhYmxlIENvZGUgaW4gUUVNVTogQSBEZWVwIERpdmUqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgdGhvdWdodCB3YXMgYWJvdXQgdGhpcyBgaXVjdl9zb2NrX2JpbmRgIGZ1bmN0aW9uIGFuZCBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIGBwcl9pdWN2YCB2YXJpYWJsZSBhbmQgdGhlIGBBRl9JVUNWX1RSQU5TX0lVQ1ZgIHRyYW5zcG9ydCB0eXBlLiBJIHNlZSB0aGF0IGBBRl9JVUNWX1RSQU5TX0lVQ1ZgIGlzICpvbmx5KiBzZXQgd2hlbiBgcHJfaXVjdmAgaXMgbm9uLU5VTEwsIGFuZCBgcHJfaXVjdmAgaXRzZWxmIHNlZW1zIHRvIGJlIG5vbi1OVUxMIG9ubHkgd2hlbiB0aGUgY29kZSBkZXRlY3RzIHRoYXQgaXQncyBydW5uaW5nIGluIGEgVk0gdmlhIGBtYWNoaW5lX2lzX3ZtKClgLlxuXG5NeSBmaXJzdCBpbnN0aW5jdCwgYXMgYSBmdXp6aW5nLW9yaWVudGVkIHJlc2VhcmNoZXIsIHdhcyB0byBwcm9iZSBpZiB0aGVyZSdzIGFueSBjbGV2ZXIgUUVNVSB0cmlja2VyeSB0byBmb29sIGBtYWNoaW5lX2lzX3ZtKClgIOKAkyBzb21lIFFFTVUgcXVpcmsgb3IgcHNldWRvLXN5c2NhbGwgdGhhdCBtaWdodCBjcmVhdGUgYSBmYWxzZSBwb3NpdGl2ZS4gQnV0IEkgcXVpY2tseSByZW1lbWJlcmVkIHRoYXQgUUVNVSBlaXRoZXIgdXNlcyBLVk0gb3IgVENHLCBub3Qgei9WTSBlbXVsYXRpb24uIFN5emthbGxlciwgd2hpbGUgYSBwb3dlcmZ1bCB0b29sLCBpcyBmb2N1c2VkIG9uIEtWTSBvciBUQ0csIHRvby4gVGhlcmUncyBubyBoaWRkZW4gYmFja2Rvb3IgaGVyZS5cblxuU28sIGlmIGBtYWNoaW5lX2lzX3ZtKClgIGlzIGZhbHNlLCBgcHJfaXVjdmAgaXMgTlVMTCwgd2hpY2ggbWVhbnMgYGl1Y3YtXHUwMDNldHJhbnNwb3J0YCBnZXRzIHNldCB0byBgQUZfSVVDVl9UUkFOU19ISVBFUmAuIFRoZSBuZXcgcGF0Y2ggaW50cm9kdWNlcyBhIGNvbmRpdGlvbmFsIGNoZWNrIGJhc2VkIG9uIGBpdWN2LVx1MDAzZXRyYW5zcG9ydGAgYmVpbmcgYEFGX0lVQ1ZfVFJBTlNfSVVDVmAuIEdpdmVuIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIGNvZGUsIHRoaXMgbWVhbnMgdGhhdCB0aGlzIG5ldyBjb2RlIGJsb2NrIGlzIGNvbXBsZXRlbHkgdW5yZWFjaGFibGUuIFxuXG5JdCdzIHByZXR0eSBjbGVhciB0aGF0IGl0ICpzaG91bGQqIGJlIHVucmVhY2hhYmxlIGluIFFFTVUuIFN5emthbGxlcidzIGRvY3VtZW50YXRpb24gaXRzZWxmIHJlaW5mb3JjZXMgdGhpczogY29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cywgZXZlbiB3aGVuIHVzaW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlLiBTaW5jZSB6L1ZNIGlzIGEgcHJvcHJpZXRhcnkgaHlwZXJ2aXNvciBhbmQgUUVNVSdzIHByaW1hcnkgZm9jdXMgaXNuJ3Qgei9WTSwgaXQgZG9lc24ndCBlbXVsYXRlIGl0LlxuXG5KdXN0IHRvIGJlIGFic29sdXRlbHkgY2VydGFpbiwgSSBjaGVja2VkIHRoZSBRRU1VIG1hY2hpbmUgdHlwZS4gSXQncyB0aGUgYHMzOTAtY2N3LXZpcnRpb2AsIGVtdWxhdGluZyBhIHovQXJjaGl0ZWN0dXJlIG1hY2hpbmUuIEknbSBmYW1pbGlhciB3aXRoIHRoZSBmYWN0IHRoYXQgUUVNVSB1c2VzIHRoZSBgc3RzaWAgaW5zdHJ1Y3Rpb24gYW5kIHRoZW4gc2V0cyBzb21lIG1hY2hpbmUgZmVhdHVyZXMgc3VjaCBhcyBLVk0gb3IgUUVNVSBpbiBUQ0cgbW9kZS4gSSBuZWVkZWQgYSBkb3VibGUgY2hlY2ssIHNvIEkgbG9va2VkIGludG8gc29tZSBMaW51eCBrZXJuZWwgY29kZSByZWxhdGVkIHRvIGh5cGVydmlzb3IgZGV0ZWN0aW9uLiBJdCB1c2VzIEVCQ0RJQyBjaGFyYWN0ZXIgc3RyaW5ncyBmcm9tIHRoZSBjb250cm9sIHByb2dyYW0gaW50ZXJydXB0IChDUEkpIGZpZWxkIG9mIHRoZSBzeXN0ZW0gaW5mb3JtYXRpb24gYmxvY2sgKFNJQikgdG8gZGV0ZWN0IGh5cGVydmlzb3JzLiBcIktWTVwiIChgXFx4ZDJcXHhlNVxceGQ0YCkgYW5kIFwiei9WTVwiIChgXFx4YTlcXHg2MVxceGU1XFx4ZDRgKSBjYW4gYmUgZGV0ZWN0ZWQgYnkgdGhpcyBtZWNoYW5pc20uICBJIGtub3cgdGhhdCBRRU1VIGluIFRDRyBtb2RlIHNldHMgdGhlIENQSSB0byBcIlFFTVVcIiwgd2hpY2ggbWVhbnMgdGhhdCBgbWFjaGluZV9pc192bSgpYCB3aWxsIGRlZmluaXRlbHkgYmUgZmFsc2UgaW4gUUVNVS5cblxuVGh1cywgYHByX2l1Y3ZgIGlzIE5VTEwsIGBpdWN2LVx1MDAzZXRyYW5zcG9ydGAgd2lsbCBiZSBgQUZfSVVDVl9UUkFOU19ISVBFUmAsIGFuZCB0aGUgY29uZGl0aW9uIGBpdWN2LVx1MDAzZXRyYW5zcG9ydCA9PSBBRl9JVUNWX1RSQU5TX0lVQ1ZgIGlzICphbHdheXMqIGZhbHNlLiAgVGhlIG1vZGlmaWVkIGNvZGUgaXMgdW5yZWFjaGFibGUuIE5vdyBJJ2xsIG5lZWQgdG8gZG91YmxlLWNoZWNrIHRoZSBlbnRpcmUgY29kZWJhc2UgdG8gbWFrZSBzdXJlIGBpdWN2LVx1MDAzZXRyYW5zcG9ydGAgaXMgbmV2ZXIgYmVpbmcgc2V0IHRvIGBBRl9JVUNWX1RSQU5TX0lVQ1ZgIGluIGFueSBvdGhlciBzY2VuYXJpby5cblxuXG4iLCJJbnB1dFRva2VucyI6MzQyODQsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5ODAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTVUMTU6NTY6MDcuOTE0NDIxNTU1WiIsIlNlcSI6NDYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NzU1NzYyOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJBRl9JVUNWX1RSQU5TX0lVQ1ZcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2l1Y3YvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pdWN2L2FmX2l1Y3YuYz0xNjY9c3RhdGljIGlubGluZSBpbnQgaXVjdl9iZWxvd19tc2dsaW0oc3RydWN0IHNvY2sgKnNrKVxcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTE3MS1cXHRcXHRyZXR1cm4gMTtcXG5uZXQvaXVjdi9hZl9pdWN2LmM6MTcyOlxcdGlmIChpdWN2LVxcdTAwM2V0cmFuc3BvcnQgPT0gQUZfSVVDVl9UUkFOU19JVUNWKVxcbm5ldC9pdWN2L2FmX2l1Y3YuYy0xNzMtXFx0XFx0cmV0dXJuIChhdG9taWNfcmVhZChcXHUwMDI2aXVjdi1cXHUwMDNlc2tic19pbl94bWl0KSBcXHUwMDNjIGl1Y3YtXFx1MDAzZXBhdGgtXFx1MDAzZW1zZ2xpbSk7XFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmM9NDY2PXN0YXRpYyBzdHJ1Y3Qgc29jayAqaXVjdl9zb2NrX2FsbG9jKHN0cnVjdCBzb2NrZXQgKnNvY2ssIGludCBwcm90bywgZ2ZwX3QgcHJpbywgaW50IGtlcm4pXFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmMtNDkzLVxcdGlmIChwcl9pdWN2KVxcbm5ldC9pdWN2L2FmX2l1Y3YuYzo0OTQ6XFx0XFx0aXVjdi1cXHUwMDNldHJhbnNwb3J0ID0gQUZfSVVDVl9UUkFOU19JVUNWO1xcbm5ldC9pdWN2L2FmX2l1Y3YuYy00OTUtXFx0ZWxzZVxcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jPTU4Mj1zdGF0aWMgaW50IGl1Y3Zfc29ja19iaW5kKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrYWRkcl91bnNpemVkICphZGRyLFxcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTY0Ny1cXHRcXHRzay1cXHUwMDNlc2tfc3RhdGUgPSBJVUNWX0JPVU5EO1xcbm5ldC9pdWN2L2FmX2l1Y3YuYzo2NDg6XFx0XFx0aXVjdi1cXHUwMDNldHJhbnNwb3J0ID0gQUZfSVVDVl9UUkFOU19JVUNWO1xcbm5ldC9pdWN2L2FmX2l1Y3YuYy02NDktXFx0XFx0c2stXFx1MDAzZXNrX2FsbG9jYXRpb24gfD0gR0ZQX0RNQTtcXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYz02NjU9c3RhdGljIGludCBpdWN2X3NvY2tfYXV0b2JpbmQoc3RydWN0IHNvY2sgKnNrKVxcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTY3My1cXHRtZW1jcHkoaXVjdi1cXHUwMDNlc3JjX3VzZXJfaWQsIGl1Y3ZfdXNlcmlkLCA4KTtcXG5uZXQvaXVjdi9hZl9pdWN2LmM6Njc0OlxcdGl1Y3YtXFx1MDAzZXRyYW5zcG9ydCA9IEFGX0lVQ1ZfVFJBTlNfSVVDVjtcXG5uZXQvaXVjdi9hZl9pdWN2LmMtNjc1LVxcdHNrLVxcdTAwM2Vza19hbGxvY2F0aW9uIHw9IEdGUF9ETUE7XFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmM9NzMzPXN0YXRpYyBpbnQgaXVjdl9zb2NrX2Nvbm5lY3Qoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHNvY2thZGRyX3Vuc2l6ZWQgKmFkZHIsXFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmMtNzgwLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYzo3ODE6XFx0aWYgKGVyciBcXHUwMDI2XFx1MDAyNiBpdWN2LVxcdTAwM2V0cmFuc3BvcnQgPT0gQUZfSVVDVl9UUkFOU19JVUNWKSB7XFxubmV0L2l1Y3YvYWZfaXVjdi5jLTc4Mi1cXHRcXHRpdWN2X3NldmVyX3BhdGgoc2ssIDApO1xcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jPTE0MjY9c3RhdGljIGludCBpdWN2X3NvY2tfc2h1dGRvd24oc3RydWN0IHNvY2tldCAqc29jaywgaW50IGhvdylcXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYy0xNDUxLVxcdCAgICBzay1cXHUwMDNlc2tfc3RhdGUgPT0gSVVDVl9DT05ORUNURUQpIHtcXG5uZXQvaXVjdi9hZl9pdWN2LmM6MTQ1MjpcXHRcXHRpZiAoaXVjdi1cXHUwMDNldHJhbnNwb3J0ID09IEFGX0lVQ1ZfVFJBTlNfSVVDVikge1xcbm5ldC9pdWN2L2FmX2l1Y3YuYy0xNDUzLVxcdFxcdFxcdHR4bXNnLmNsYXNzID0gMDtcXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYy0xNDc1LVxcdGlmIChob3cgPT0gUkNWX1NIVVRET1dOIHx8IGhvdyA9PSBTSFVURE9XTl9NQVNLKSB7XFxubmV0L2l1Y3YvYWZfaXVjdi5jOjE0NzY6XFx0XFx0aWYgKChpdWN2LVxcdTAwM2V0cmFuc3BvcnQgPT0gQUZfSVVDVl9UUkFOU19JVUNWKSBcXHUwMDI2XFx1MDAyNlxcbm5ldC9pdWN2L2FmX2l1Y3YuYy0xNDc3LVxcdFxcdCAgICBpdWN2LVxcdTAwM2VwYXRoKSB7XFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmM9MTYxNT1zdGF0aWMgaW50IGl1Y3ZfY2FsbGJhY2tfY29ubnJlcShzdHJ1Y3QgaXVjdl9wYXRoICpwYXRoLFxcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTE2NzQtXFx0aXVjdl9zb2NrX2luaXQobnNrLCBzayk7XFxubmV0L2l1Y3YvYWZfaXVjdi5jOjE2NzU6XFx0bml1Y3YtXFx1MDAzZXRyYW5zcG9ydCA9IEFGX0lVQ1ZfVFJBTlNfSVVDVjtcXG5uZXQvaXVjdi9hZl9pdWN2LmMtMTY3Ni1cXHRuc2stXFx1MDAzZXNrX2FsbG9jYXRpb24gfD0gR0ZQX0RNQTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTVUMTU6NTY6MDcuOTYxOTg0OTMzWiIsIlNlcSI6NDcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE2NzU1MjQ4MTU4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5c2lzIG9mIHRoZSBQYXRjaDogV29ydGhGdXp6aW5nPWZhbHNlKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgdGhhdCB0aGlzIHBhdGNoIGlzbid0IHdvcnRoIGZ1enppbmcsIGFuZCBoZXJlJ3Mgd2h5LiBJIHNlZSBhIHBhdHRlcm46IGV2ZXJ5IGluc3RhbmNlIHdoZXJlIGBpdWN2LVx1MDAzZXRyYW5zcG9ydGAgaXMgc2V0IHRvIGBBRl9JVUNWX1RSQU5TX0lVQ1ZgIGlzIGRpcmVjdGx5IGRlcGVuZGVudCBvbiBgcHJfaXVjdmAgYmVpbmcgbm9uLU5VTEwuIEluIHNldmVyYWwgZnVuY3Rpb25zIOKAkyBgaXVjdl9zb2NrX2FsbG9jYCwgYGl1Y3Zfc29ja19iaW5kYCwgYGl1Y3Zfc29ja19hdXRvYmluZGAsIGFuZCBldmVuIHRoZSBgaXVjdl9jYWxsYmFja19jb25ucmVxYCB3aGljaCBpcyByZWdpc3RlcmVkIHVzaW5nIGBwcl9pdWN2YCDigJMgdGhpcyBjb25kaXRpb24gaXMgY29uc2lzdGVudGx5IGVuZm9yY2VkLiBUaGlzIG1lYW5zIHRoYXQgYGl1Y3YtXHUwMDNldHJhbnNwb3J0ID09IEFGX0lVQ1ZfVFJBTlNfSVVDVmAgaXMsIGVzc2VudGlhbGx5LCBlcXVpdmFsZW50IHRvIGBwcl9pdWN2ICE9IE5VTExgLCBhbmQgdGhlcmVmb3JlIGVxdWl2YWxlbnQgdG8gYG1hY2hpbmVfaXNfdm0oKSA9PSB0cnVlYCBhc3N1bWluZyBgQ09ORklHX0lVQ1ZgIGlzIGVuYWJsZWQuXG5cblNpbmNlIHRoZSBnb2FsIGlzIHRvIGRldGVybWluZSBpZiB0aGUgcGF0Y2ggaXMgd29ydGggZnV6emluZywgSSBtdXN0IGRldGVybWluZSBpZiB0aGUgYWRkZWQgY29kZSBjYW4gYmUgcmVhY2hlZCB1bmRlciBjb21tb24gZnV6emluZyBlbnZpcm9ubWVudHMgbGlrZSBRRU1VLlxuXG5HaXZlbiB0aGF0IHRoZSBxdWVzdGlvbiBzcGVjaWZpY2FsbHkgY2FsbHMgb3V0IFwidmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVVcIiwgYW5kIHN0YXRlcyB0aGF0IHRoZSBjb2RlIHBhdGggbXVzdCBiZSByZWFjaGFibGUgZXZlbiBpbiBzb2Z0d2FyZS1lbXVsYXRlZCBlbnZpcm9ubWVudHMsIEknbSBwcmV0dHkgY2VydGFpbiB0aGlzIGlzIGEgZGVhZCBlbmQuIFFFTVUsIGJ5IGl0cyBuYXR1cmUsIGRvZXNuJ3QgZW11bGF0ZSB0aGUgei9WTSBoeXBlcnZpc29yLiBJdCBlbXVsYXRlcyBiYXJlLW1ldGFsIHovQXJjaGl0ZWN0dXJlLCBvciBLVk0uIFRoZSBgc3RzaWAgaW5zdHJ1Y3Rpb24ncyBvdXRwdXQsIHdoaWNoIGlzIGhvdyB3ZSdkIGRldGVybWluZSBpZiB3ZSdyZSBvbiBhIGh5cGVydmlzb3IsIGlzIGhhcmRjb2RlZCBieSBRRU1VIHRvIHJldHVybiBcIktWTVwiIG9yIFwiUUVNVS5cIiBUaGVyZSdzIG5vIHdheSB0byBtYWtlIFFFTVUgcmV0dXJuIFwiei9WTVwiIHdpdGhvdXQgcGF0Y2hpbmcgUUVNVSBpdHNlbGYsIGFuZCBzeXprYWxsZXIgZG9lcyBub3QgZG8gdGhpcyBhcyBwYXJ0IG9mIGl0cyBkZWZhdWx0IG9wZXJhdGlvbi5cblxuTm93LCBJIHBhdXNlZCB0byBjb25zaWRlciBpZiBzeXprYWxsZXIgaXRzZWxmIHdhcyBydW5uaW5nICpvbiogei9WTS4gQ2VydGFpbmx5LCB5b3UgKmNvdWxkKiBydW4gc3l6a2FsbGVyIG9uIGEgei9WTSBndWVzdCB1c2luZyBhbiBgc3NoYCBiYWNrZW5kIGFuZCB0YXJnZXRlZCBrZXJuZWwsIGJ1dCB0aGUgcHJvbXB0J3MgbGFuZ3VhZ2UgaXMgY2xlYXI6IHRoZSBjb2RlIG11c3QgYmUgcmVhY2hhYmxlIFwiaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzICpsaWtlKiBHQ0Ugb3IgUUVNVS5cIiBUaGlzIGltcGxpZXMgdGhlIHN0YW5kYXJkIHN5emthbGxlciBzZXR1cCwgYW5kIHRoYXQgc2V0dXAgZG9lcyAqbm90KiBpbmNsdWRlIHovVk0gYXMgYSBkZWZhdWx0IGh5cGVydmlzb3IgdGFyZ2V0LCBidXQgb25seSBlbXVsYXRlZCBlbnZpcm9ubWVudHMgbGlrZSBRRU1VLiBUaGUgcHJvbXB0IGltcGxpZXMgdGhpcyBjYXNlIGlzIG5vdCByZWxldmFudC5cblxuTXkgdW5kZXJzdGFuZGluZyBpcyB0aGF0IHRoaXMgcGF0Y2ggb25seSBhZmZlY3RzIGVycm9yIGhhbmRsaW5nIGluIGBpdWN2X3NvY2tfY29ubmVjdGAuIElmIHRoZXJlJ3MgYW4gZXJyb3IsIGFuZCB0aGUgdHJhbnNwb3J0IGlzIGBBRl9JVUNWX1RSQU5TX0lVQ1ZgLCB0aGVuIGBpdWN2X3NldmVyX3BhdGhgIGlzIGNhbGxlZCwgYW5kIHNvbWUgc3RhdGUgY2xlYW51cCBtaWdodCBiZSBwZXJmb3JtZWQsIHNwZWNpZmljYWxseSBjb25jZXJuaW5nIGEgcmFjZSBjb25kaXRpb24gd2hlcmUgYSBgY29ubmFja2AgbWlnaHQgYXJyaXZlIGJldHdlZW4gYSBzb2NrZXQgYmVpbmcgZGlzY29ubmVjdGVkIGFuZCB0aGUgcmVsZWFzZSBvZiB0aGUgYHdhaXRgLlxuXG5HaXZlbiB0aGF0LCBJJ20gY29uZmlkZW50IGluIG15IGluaXRpYWwgYXNzZXNzbWVudC4gVGhlIGBpZmAgc3RhdGVtZW50IHRoYXQgZ3VhcmRzIHRoaXMgZXh0cmEgY2xlYW51cCBjb2RlIGRlcGVuZHMgb24gYmVpbmcgaW4gYSB6L1ZNIGVudmlyb25tZW50LCB3aGljaCBRRU1VICpjYW5ub3QqIGVtdWxhdGUuIFRoZXJlZm9yZSwgdGhpcyBjb2RlIHBhdGggaXMgc2ltcGx5IGluYWNjZXNzaWJsZSBpbiBhIHN0YW5kYXJkIHN5emthbGxlci9RRU1VIHNldHVwLlxuXG5BZnRlciByZXZpZXdpbmcgdGhlIHBhdGNoIGFnYWluIHRvIGVuc3VyZSB0aGVyZSBhcmUgbm8gb3RoZXIgc3VidGxlIGNoYW5nZXMsIEkgY2FuIGNvbmZpcm0gdGhhdCB0aGUgbmV3IGNvZGUgaXMgZW5jbG9zZWQgYnkgYGlmIChlcnIgXHUwMDI2XHUwMDI2IGl1Y3YtXHUwMDNldHJhbnNwb3J0ID09IEFGX0lVQ1ZfVFJBTlNfSVVDVilgLCBhbmQgdGhlIGFkZGVkIGNvZGUgaXMgdW5yZWFjaGFibGUuXG5cbk15IGNvbmNsdXNpb24gaXMgdGhhdCBgV29ydGhGdXp6aW5nPWZhbHNlYCBiZWNhdXNlIHRoZSBtb2RpZmllZCBjb2RlIGlzIHVucmVhY2hhYmxlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIFFFTVUuIEFsc28sIHRoZSBjb2RlIGRlcGVuZHMgb24gYSBwcm9wcmlldGFyeSBoeXBlcnZpc29yIHRoYXQgaXMgbm90IGVtdWxhdGVkIGluIHRoZXNlIGVudmlyb25tZW50cy5cblxuSnVzdCB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4sIEknbGwgY29uZmlybSB0aGF0IGBtYWNoaW5lX2lzX3ZtKClgIGlzIGNoZWNraW5nIGZvciB0aGUgY29ycmVjdCBoeXBlcnZpc29yLCB6L1ZNLiBZZXMsIHRoZSBoYXJkY29kZWQgY2hlY2sgZm9yIHRoZSBoeXBlcnZpc29yIHV0aWxpemVzIHRoZSBFQkNESUMgdmFsdWUgZm9yIGB6L1ZNYCAtIHNvIEkgYW0gY29uZmlkZW50IGluIG15IGFzc2Vzc21lbnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM3MTk0LCJPdXRwdXRUb2tlbnMiOjE1MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0MzIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTVUMTU6NTY6MjQuNzE3MjM3MDkxWiIsIlNlcSI6NDgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjcyODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGVycm9yIGhhbmRsaW5nIHBhdGggaW4gYGl1Y3Zfc29ja19jb25uZWN0YCBmb3IgQUZfSVVDViBzb2NrZXRzLiBIb3dldmVyLCB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJpY3RseSBndWFyZGVkIGJ5IGBpdWN2LVxcdTAwM2V0cmFuc3BvcnQgPT0gQUZfSVVDVl9UUkFOU19JVUNWYCwgd2hpY2ggaXMgb25seSBzZXQgd2hlbiB0aGUga2VybmVsIGlzIHJ1bm5pbmcgdW5kZXIgdGhlIElCTSB6L1ZNIGh5cGVydmlzb3IgKGBtYWNoaW5lX2lzX3ZtKClgKS4gU2luY2UgUUVNVSBlbXVsYXRlcyBLVk0gb3IgYSBiYXJlLW1ldGFsIExQQVIgYW5kIGRvZXMgbm90IGVtdWxhdGUgei9WTSwgdGhpcyBjb2RlIHBhdGggaXMgaW1wb3NzaWJsZSB0byByZWFjaCBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBRRU1VIG9yIEdDRS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBlcnJvciBoYW5kbGluZyBwYXRoIGluIGBpdWN2X3NvY2tfY29ubmVjdGAgZm9yIEFGX0lVQ1Ygc29ja2V0cy4gSG93ZXZlciwgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RyaWN0bHkgZ3VhcmRlZCBieSBgaXVjdi1cXHUwMDNldHJhbnNwb3J0ID09IEFGX0lVQ1ZfVFJBTlNfSVVDVmAsIHdoaWNoIGlzIG9ubHkgc2V0IHdoZW4gdGhlIGtlcm5lbCBpcyBydW5uaW5nIHVuZGVyIHRoZSBJQk0gei9WTSBoeXBlcnZpc29yIChgbWFjaGluZV9pc192bSgpYCkuIFNpbmNlIFFFTVUgZW11bGF0ZXMgS1ZNIG9yIGEgYmFyZS1tZXRhbCBMUEFSIGFuZCBkb2VzIG5vdCBlbXVsYXRlIHovVk0sIHRoaXMgY29kZSBwYXRoIGlzIGltcG9zc2libGUgdG8gcmVhY2ggaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgUUVNVSBvciBHQ0UuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNVQxNTo1NjoyNC43MTcyNjgwNDFaIiwiU2VxIjo0OSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI4NzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow64czl[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-15 15:52:23 +0000 UTC FinishedAt: 2026-08-15 15:56:25 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "AI determined the patch has no functional impact", "targets": null, "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE1IDE1OjU0PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGVycm9yIGhhbmRsaW5nIHBhdGggaW4gYGl1Y3Zfc29ja19jb25uZWN0YCBmb3IgQUZfSVVDViBzb2NrZXRzLiBIb3dldmVyLCB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJpY3RseSBndWFyZGVkIGJ5IGBpdWN2LVx1MDAzZXRyYW5zcG9ydCA9PSBBRl9JVUNWX1RSQU5TX0lVQ1ZgLCB3aGljaCBpcyBvbmx5IHNldCB3aGVuIHRoZSBrZXJuZWwgaXMgcnVubmluZyB1bmRlciB0aGUgSUJNIHovVk0gaHlwZXJ2aXNvciAoYG1hY2hpbmVfaXNfdm0oKWApLiBTaW5jZSBRRU1VIGVtdWxhdGVzIEtWTSBvciBhIGJhcmUtbWV0YWwgTFBBUiBhbmQgZG9lcyBub3QgZW11bGF0ZSB6L1ZNLCB0aGlzIGNvZGUgcGF0aCBpcyBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIFFFTVUgb3IgR0NFLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNSAxNTo1NDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGJmZWExNzQ0ODdiY2Y2NDUyMTdiYTFjOWJiMTg4ZmNjNmIxYTQxNDRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU2F0IEF1ZyAxNSAxNTo1NDoxNiAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvaXVjdi9hZl9pdWN2LmMgYi9uZXQvaXVjdi9hZl9pdWN2LmNcbmluZGV4IGVhMDQ3YmFiNjVlN2MuLjZmYjAwNDFjNGM5ODcgMTAwNjQ0XG4tLS0gYS9uZXQvaXVjdi9hZl9pdWN2LmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pdWN2L2FmX2l1Y3YuY1xuQEAgLTc3OCw4ICYjNDM7Nzc4LDE2IEBAIHN0YXRpYyBpbnQgaXVjdl9zb2NrX2Nvbm5lY3Qoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHNvY2thZGRyX3Vuc2l6ZWQgKmFkZHIsXG4gXHRpZiAoc2stXHUwMDNlc2tfc3RhdGUgPT0gSVVDVl9ESVNDT05OIHx8IHNrLVx1MDAzZXNrX3N0YXRlID09IElVQ1ZfQ0xPU0VEKVxuIFx0XHRlcnIgPSAtRUNPTk5SRUZVU0VEO1xuIFxuLVx0aWYgKGVyciBcdTAwMjZcdTAwMjYgaXVjdi1cdTAwM2V0cmFuc3BvcnQgPT0gQUZfSVVDVl9UUkFOU19JVUNWKVxuJiM0MztcdGlmIChlcnIgXHUwMDI2XHUwMDI2IGl1Y3YtXHUwMDNldHJhbnNwb3J0ID09IEFGX0lVQ1ZfVFJBTlNfSVVDVikge1xuIFx0XHRpdWN2X3NldmVyX3BhdGgoc2ssIDApO1xuJiM0MztcdFx0LyogQSBjb25uYWNrIG1heSBoYXZlIGxhbmRlZCB3aGlsZSB0aGUgd2FpdCB3YXMgdW53aW5kaW5nOyB0aGVcbiYjNDM7XHRcdCAqIHBhdGggaXMgZ29uZSwgc28gdGhlIHNvY2tldCBtdXN0IG5vdCBzdGlsbCBjbGFpbSBpdC5cbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0aWYgKHNrLVx1MDAzZXNrX3N0YXRlID09IElVQ1ZfQ09OTkVDVEVEKSB7XG4mIzQzO1x0XHRcdHNrLVx1MDAzZXNrX3N0YXRlID0gSVVDVl9ESVNDT05OO1xuJiM0MztcdFx0XHRzay1cdTAwM2Vza19zdGF0ZV9jaGFuZ2Uoc2spO1xuJiM0MztcdFx0fVxuJiM0MztcdH1cbiBcbiBkb25lOlxuIFx0cmVsZWFzZV9zb2NrKHNrKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNSAxNTo1NDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4ybTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGVycm9yIGhhbmRsaW5nIHBhdGggaW4gYGl1Y3Zfc29ja19jb25uZWN0YCBmb3IgQUZfSVVDViBzb2NrZXRzLiBIb3dldmVyLCB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJpY3RseSBndWFyZGVkIGJ5IGBpdWN2LVx1MDAzZXRyYW5zcG9ydCA9PSBBRl9JVUNWX1RSQU5TX0lVQ1ZgLCB3aGljaCBpcyBvbmx5IHNldCB3aGVuIHRoZSBrZXJuZWwgaXMgcnVubmluZyB1bmRlciB0aGUgSUJNIHovVk0gaHlwZXJ2aXNvciAoYG1hY2hpbmVfaXNfdm0oKWApLiBTaW5jZSBRRU1VIGVtdWxhdGVzIEtWTSBvciBhIGJhcmUtbWV0YWwgTFBBUiBhbmQgZG9lcyBub3QgZW11bGF0ZSB6L1ZNLCB0aGlzIGNvZGUgcGF0aCBpcyBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIFFFTVUgb3IgR0NFLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGJmZWExNzQ0ODdiY2Y2NDUyMTdiYTFjOWJiMTg4ZmNjNmIxYTQxNDQKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgU2F0IEF1ZyAxNSAxNTo1NDoxNiAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC9pdWN2L2FmX2l1Y3YuYyBiL25ldC9pdWN2L2FmX2l1Y3YuYwppbmRleCBlYTA0N2JhYjY1ZTdjLi42ZmIwMDQxYzRjOTg3IDEwMDY0NAotLS0gYS9uZXQvaXVjdi9hZl9pdWN2LmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2l1Y3YvYWZfaXVjdi5jCkBAIC03NzgsOCAmIzQzOzc3OCwxNiBAQCBzdGF0aWMgaW50IGl1Y3Zfc29ja19jb25uZWN0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrYWRkcl91bnNpemVkICphZGRyLAogCWlmIChzay0mZ3Q7c2tfc3RhdGUgPT0gSVVDVl9ESVNDT05OIHx8IHNrLSZndDtza19zdGF0ZSA9PSBJVUNWX0NMT1NFRCkKIAkJZXJyID0gLUVDT05OUkVGVVNFRDsKIAotCWlmIChlcnIgJmFtcDsmYW1wOyBpdWN2LSZndDt0cmFuc3BvcnQgPT0gQUZfSVVDVl9UUkFOU19JVUNWKQomIzQzOwlpZiAoZXJyICZhbXA7JmFtcDsgaXVjdi0mZ3Q7dHJhbnNwb3J0ID09IEFGX0lVQ1ZfVFJBTlNfSVVDVikgewogCQlpdWN2X3NldmVyX3BhdGgoc2ssIDApOwomIzQzOwkJLyogQSBjb25uYWNrIG1heSBoYXZlIGxhbmRlZCB3aGlsZSB0aGUgd2FpdCB3YXMgdW53aW5kaW5nOyB0aGUKJiM0MzsJCSAqIHBhdGggaXMgZ29uZSwgc28gdGhlIHNvY2tldCBtdXN0IG5vdCBzdGlsbCBjbGFpbSBpdC4KJiM0MzsJCSAqLwomIzQzOwkJaWYgKHNrLSZndDtza19zdGF0ZSA9PSBJVUNWX0NPTk5FQ1RFRCkgewomIzQzOwkJCXNrLSZndDtza19zdGF0ZSA9IElVQ1ZfRElTQ09OTjsKJiM0MzsJCQlzay0mZ3Q7c2tfc3RhdGVfY2hhbmdlKHNrKTsKJiM0MzsJCX0KJiM0MzsJfQogCiBkb25lOgogCXJlbGVhc2Vfc29jayhzayk7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE1IDE1OjU0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxMzQKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAyOTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgUGF0Y2ggaW4gdGhlIElVQ1YgU29ja2V0IEZhbWlseSoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGluIGBuZXQvaXVjdi9hZl9pdWN2LmNgLCBzcGVjaWZpY2FsbHkgdGhlIGBpdWN2X3NvY2tfY29ubmVjdGAgZnVuY3Rpb24uIFRoZSBjb2RlIGFkZHMgYSBjb25kaXRpb25hbCBjaGVjayBhZnRlciBhbiBlcnJvciBpbiB0aGUgQUZfSVVDViBzb2NrZXQgZmFtaWx5LCByaWdodD8gSXQgbG9va3MgbGlrZSBpZiB0aGVyZSYjMzk7cyBhbiBlcnJvciBhbmQgdGhlIHRyYW5zcG9ydCBpcyBJVUNWLCBpdCBzZXZlcnMgdGhlIHBhdGggYW5kIHRoZW4sIGltcG9ydGFudGx5LCBjaGVja3MgdGhlIHNvY2tldCBzdGF0ZS4gSWYgaXQmIzM5O3Mgc3RpbGwgY29ubmVjdGVkLCBpdCBzZXRzIGl0IHRvIGRpc2Nvbm5lY3RlZCBhbmQgdHJpZ2dlcnMgdGhlIHN0YXRlIGNoYW5nZSBjYWxsYmFjay4gVGhhdCYjMzk7cyBhIHJlYXNvbmFibGUgZGVmZW5zaXZlIG1lYXN1cmUgdG8gcHJldmVudCB0aGUgc29ja2V0IGZyb20gZmFsc2VseSBjbGFpbWluZyBhIGNvbm5lY3Rpb24gYWZ0ZXIgYSBkaXNjb25uZWN0IGR1cmluZyBhIGBjb25uZWN0KClgIGF0dGVtcHQuCgpOb3csIEFGX0lVQ1YuLi4gdGhhdCYjMzk7cyB6L1ZNIElVQ1YsIHdoaWNoIG1lYW5zIHMzOTAgYXJjaGl0ZWN0dXJlLiBUaGlzIGlzIGltcG9ydGFudC4gTGV0IG1lIHF1aWNrbHkgY2hlY2sgaWYgdGhpcyBpcyBldmVuIHJlbGV2YW50IGZvciBzdGFuZGFyZCBRRU1VIHNldHVwcyBvciBpZiBpdCYjMzk7cyBkZXBlbmRlbnQgb24gc3BlY2lmaWMgczM5MCBoYXJkd2FyZS4gV2FpdCwgaXNuJiMzOTt0IHN5emthbGxlciBjb25maWd1cmVkIHRvIGZ1enogczM5MHggaWYgaXQmIzM5O3MgdGhlcmU/IFRob3VnaCBteSB0eXBpY2FsIHByaW9yaXR5IGlzIHdoZXRoZXIgZnV6emluZyBpcyB3b3J0aCBkb2luZywgSSYjMzk7bGwgbmVlZCB0byBjaGVjayB0aGUgS2NvbmZpZywgc28gSSYjMzk7bSB0aGlua2luZyBJVUNWIGlzIHMzOTAgc3BlY2lmaWMuIEFscmlnaHQsIGxldCYjMzk7cyBzZWUgd2hhdCB0aGUgYG5ldC9pdWN2L0tjb25maWdgIGZpbGUgdGVsbHMgdXMgYWJvdXQgdGhpcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNSAxNTo1NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBBRl9JVUNWJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2l1Y3YvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTUgMTU6NTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjc2NQoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDMxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246CgoqKkludmVzdGlnYXRpbmcgTmV0d29yayBDb25maWd1cmF0aW9uKioKClJpZ2h0LCBsZXQmIzM5O3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoZXJlIHRoaXMgbmV0d29yayBjb25maWd1cmF0aW9uIGxpdmVzLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZGl2ZSBpbnRvIHRoZSBgbmV0YCBkaXJlY3RvcnkuIFNpbmNlIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggSVVDViBzcGVjaWZpY2FsbHksIHRoZSBvYnZpb3VzIHBsYWNlIHRvIHN0YXJ0IGlzIGVpdGhlciBgbmV0L2l1Y3YvS2NvbmZpZ2AsIG9yIGp1c3QgdGhlIGdlbmVyYWwgYG5ldC9LY29uZmlnYC4gQW5kLCBpZiB0aGUgY29uZmlndXJhdGlvbiBleGlzdHMsIHRoZW4gSSYjMzk7bGwgbG9vayBmb3IgYSBjb3JyZXNwb25kaW5nIGBNYWtlZmlsZWAgYW5kIGl0JiMzOTtzIG1vc3QgbGlrZWx5IHRvIGJlIGluIHRoZSBgbmV0L2l1Y3YvYCBkaXJlY3RvcnkgdG9vLiBUaGVzZSBLY29uZmlnIGZpbGVzIGFyZSB0aGUgaGVhcnQgb2YgdGhlIGNvbmZpZ3VyYXRpb24gcHJvY2Vzcywgc28gdGhhdCYjMzk7cyBkZWZpbml0ZWx5IHRoZSBmaXJzdCBsb2dpY2FsIHN0ZXAuIFRpbWUgdG8gY2hlY2sgdGhvc2UgZmlsZXMgYW5kIHNlZSB3aGF0IHRoZSBidWlsZCBzeXN0ZW0gaGFzIHRvIG9mZmVyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE1IDE1OjU0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0FGX0lVQ1YmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXVjdi8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2l1Y3YvS2NvbmZpZz0xMT1jb25maWcgQUZJVUNWXG4tLVxubmV0L2l1Y3YvS2NvbmZpZy0xMy1cdGRlZl90cmlzdGF0ZSBtIGlmIFFFVEhfTDMgfHwgSVVDVlxubmV0L2l1Y3YvS2NvbmZpZzoxNDpcdHByb21wdCBcJiMzNDtBRl9JVUNWIFNvY2tldCBzdXBwb3J0IChTMzkwIC0gei9WTSBhbmQgSGlwZXJTb2NrZXRzIHRyYW5zcG9ydClcJiMzNDtcbm5ldC9pdWN2L0tjb25maWctMTUtXHRoZWxwXG5uZXQvaXVjdi9LY29uZmlnOjE2Olx0ICBTZWxlY3QgdGhpcyBvcHRpb24gaWYgeW91IHdhbnQgdG8gdXNlIEFGX0lVQ1Ygc29ja2V0IGFwcGxpY2F0aW9uc1xubmV0L2l1Y3YvS2NvbmZpZy0xNy1cdCAgYmFzZWQgb24gei9WTSBpbnRlci11c2VyIGNvbW11bmljYXRpb24gdmVoaWNsZSBvciBiYXNlZCBvblxuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYz00Mj1zdGF0aWMgc3RydWN0IHByb3RvIGl1Y3ZfcHJvdG8gPSB7XG5uZXQvaXVjdi9hZl9pdWN2LmM6NDM6XHQubmFtZVx0XHQ9IFwmIzM0O0FGX0lVQ1ZcJiMzNDssXG5uZXQvaXVjdi9hZl9pdWN2LmMtNDQtXHQub3duZXJcdFx0PSBUSElTX01PRFVMRSxcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmM9NDk9c3RhdGljIHN0cnVjdCBpdWN2X2hhbmRsZXIgYWZfaXVjdl9oYW5kbGVyO1xubmV0L2l1Y3YvYWZfaXVjdi5jLTUwLVxubmV0L2l1Y3YvYWZfaXVjdi5jOjUxOi8qIHNwZWNpYWwgQUZfSVVDViBJUFJNIG1lc3NhZ2VzICovXG5uZXQvaXVjdi9hZl9pdWN2LmMtNTItc3RhdGljIGNvbnN0IHU4IGlwcm1fc2h1dGRvd25bOF0gPVxuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYz0xMDc9c3RhdGljIGlubGluZSB2b2lkIGxvd19ubWNweSh1bnNpZ25lZCBjaGFyICpkc3QsIGNoYXIgKnNyYylcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmMtMTE4LSAqXG5uZXQvaXVjdi9hZl9pdWN2LmM6MTE5OiAqIEZvciBJVUNWX0lQUk1EQVRBLCBBRl9JVUNWIHVzZXMgdGhlIGZvbGxvd2luZyBjb252ZW50aW9uIHRvIHRyYW5zcG9ydCBzb2NrZXRcbm5ldC9pdWN2L2FmX2l1Y3YuYy0xMjAtICogZGF0YTpcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmM9MTY2PXN0YXRpYyBpbmxpbmUgaW50IGl1Y3ZfYmVsb3dfbXNnbGltKHN0cnVjdCBzb2NrICpzaylcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmMtMTcxLVx0XHRyZXR1cm4gMTtcbm5ldC9pdWN2L2FmX2l1Y3YuYzoxNzI6XHRpZiAoaXVjdi1cdTAwM2V0cmFuc3BvcnQgPT0gQUZfSVVDVl9UUkFOU19JVUNWKVxubmV0L2l1Y3YvYWZfaXVjdi5jLTE3My1cdFx0cmV0dXJuIChhdG9taWNfcmVhZChcdTAwMjZpdWN2LVx1MDAzZXNrYnNfaW5feG1pdCkgXHUwMDNjIGl1Y3YtXHUwMDNlcGF0aC1cdTAwM2Vtc2dsaW0pO1xuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYz0xOTc9c3RhdGljIGludCBhZml1Y3ZfaHNfc2VuZChzdHJ1Y3QgaXVjdl9tZXNzYWdlICppbXNnLCBzdHJ1Y3Qgc29jayAqc29jayxcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmMtMjA3LVxubmV0L2l1Y3YvYWZfaXVjdi5jOjIwODpcdHBoc19oZHItXHUwMDNlbWFnaWMgPSBFVEhfUF9BRl9JVUNWO1xubmV0L2l1Y3YvYWZfaXVjdi5jLTIwOS1cdHBoc19oZHItXHUwMDNldmVyc2lvbiA9IDE7XG5uZXQvaXVjdi9hZl9pdWN2LmMtMjEwLVx0cGhzX2hkci1cdTAwM2VmbGFncyA9IGZsYWdzO1xubmV0L2l1Y3YvYWZfaXVjdi5jOjIxMTpcdGlmIChmbGFncyA9PSBBRl9JVUNWX0ZMQUdfU1lOKVxubmV0L2l1Y3YvYWZfaXVjdi5jLTIxMi1cdFx0cGhzX2hkci1cdTAwM2V3aW5kb3cgPSBpdWN2LVx1MDAzZW1zZ2xpbWl0O1xubmV0L2l1Y3YvYWZfaXVjdi5jOjIxMzpcdGVsc2UgaWYgKChmbGFncyA9PSBBRl9JVUNWX0ZMQUdfV0lOKSB8fCAhZmxhZ3MpIHtcbm5ldC9pdWN2L2FmX2l1Y3YuYy0yMTQtXHRcdGNvbmZpcm1fcmVjdiA9IGF0b21pY19yZWFkKFx1MDAyNml1Y3YtXHUwMDNlbXNnX3JlY3YpO1xuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYy0yMTYtXHRcdGlmIChjb25maXJtX3JlY3YpXG5uZXQvaXVjdi9hZl9pdWN2LmM6MjE3Olx0XHRcdHBoc19oZHItXHUwMDNlZmxhZ3MgPSBwaHNfaGRyLVx1MDAzZWZsYWdzIHwgQUZfSVVDVl9GTEFHX1dJTjtcbm5ldC9pdWN2L2FmX2l1Y3YuYy0yMTgtXHR9XG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jLTIzNS1cbm5ldC9pdWN2L2FmX2l1Y3YuYzoyMzY6XHRkZXZfaGFyZF9oZWFkZXIoc2tiLCBza2ItXHUwMDNlZGV2LCBFVEhfUF9BRl9JVUNWLCBOVUxMLCBOVUxMLCBza2ItXHUwMDNlbGVuKTtcbm5ldC9pdWN2L2FmX2l1Y3YuYy0yMzctXG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jLTI1MC1cdH1cbm5ldC9pdWN2L2FmX2l1Y3YuYzoyNTE6XHRza2ItXHUwMDNlcHJvdG9jb2wgPSBjcHVfdG9fYmUxNihFVEhfUF9BRl9JVUNWKTtcbm5ldC9pdWN2L2FmX2l1Y3YuYy0yNTItXG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jPTM5NT1zdGF0aWMgdm9pZCBpdWN2X3NvY2tfY2xvc2Uoc3RydWN0IHNvY2sgKnNrKVxuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYy00MDgtXHRjYXNlIElVQ1ZfQ09OTkVDVEVEOlxubmV0L2l1Y3YvYWZfaXVjdi5jOjQwOTpcdFx0aWYgKGl1Y3YtXHUwMDNldHJhbnNwb3J0ID09IEFGX0lVQ1ZfVFJBTlNfSElQRVIpIHtcbm5ldC9pdWN2L2FmX2l1Y3YuYzo0MTA6XHRcdFx0ZXJyID0gaXVjdl9zZW5kX2N0cmwoc2ssIEFGX0lVQ1ZfRkxBR19GSU4pO1xubmV0L2l1Y3YvYWZfaXVjdi5jLTQxMS1cdFx0XHRzay1cdTAwM2Vza19zdGF0ZSA9IElVQ1ZfRElTQ09OTjtcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmM9NDY2PXN0YXRpYyBzdHJ1Y3Qgc29jayAqaXVjdl9zb2NrX2FsbG9jKHN0cnVjdCBzb2NrZXQgKnNvY2ssIGludCBwcm90bywgZ2ZwX3QgcHJpbywgaW50IGtlcm4pXG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jLTQ5My1cdGlmIChwcl9pdWN2KVxubmV0L2l1Y3YvYWZfaXVjdi5jOjQ5NDpcdFx0aXVjdi1cdTAwM2V0cmFuc3BvcnQgPSBBRl9JVUNWX1RSQU5TX0lVQ1Y7XG5uZXQvaXVjdi9hZl9pdWN2LmMtNDk1LVx0ZWxzZVxubmV0L2l1Y3YvYWZfaXVjdi5jOjQ5NjpcdFx0aXVjdi1cdTAwM2V0cmFuc3BvcnQgPSBBRl9JVUNWX1RSQU5TX0hJUEVSO1xubmV0L2l1Y3YvYWZfaXVjdi5jLTQ5Ny1cbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmM9NTgyPXN0YXRpYyBpbnQgaXVjdl9zb2NrX2JpbmQoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHNvY2thZGRyX3Vuc2l6ZWQgKmFkZHIsXG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jLTU5My1cdGlmIChhZGRyX2xlbiBcdTAwM2Mgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pdWN2KSB8fFxubmV0L2l1Y3YvYWZfaXVjdi5jOjU5NDpcdCAgICBhZGRyLVx1MDAzZXNhX2ZhbWlseSAhPSBBRl9JVUNWKVxubmV0L2l1Y3YvYWZfaXVjdi5jLTU5NS1cdFx0cmV0dXJuIC1FSU5WQUw7XG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jLTYzMy1cdFx0XHRzay1cdTAwM2Vza19zdGF0ZSA9IElVQ1ZfQk9VTkQ7XG5uZXQvaXVjdi9hZl9pdWN2LmM6NjM0Olx0XHRcdGl1Y3YtXHUwMDNldHJhbnNwb3J0ID0gQUZfSVVDVl9UUkFOU19ISVBFUjtcbm5ldC9pdWN2L2FmX2l1Y3YuYy02MzUtXHRcdFx0aWYgKCFpdWN2LVx1MDAzZW1zZ2xpbWl0KVxuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYy02NDctXHRcdHNrLVx1MDAzZXNrX3N0YXRlID0gSVVDVl9CT1VORDtcbm5ldC9pdWN2L2FmX2l1Y3YuYzo2NDg6XHRcdGl1Y3YtXHUwMDNldHJhbnNwb3J0ID0gQUZfSVVDVl9UUkFOU19JVUNWO1xubmV0L2l1Y3YvYWZfaXVjdi5jLTY0OS1cdFx0c2stXHUwMDNlc2tfYWxsb2NhdGlvbiB8PSBHRlBfRE1BO1xuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYz02NjU9c3RhdGljIGludCBpdWN2X3NvY2tfYXV0b2JpbmQoc3RydWN0IHNvY2sgKnNrKVxuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYy02NzMtXHRtZW1jcHkoaXVjdi1cdTAwM2VzcmNfdXNlcl9pZCwgaXVjdl91c2VyaWQsIDgpO1xubmV0L2l1Y3YvYWZfaXVjdi5jOjY3NDpcdGl1Y3YtXHUwMDNldHJhbnNwb3J0ID0gQUZfSVVDVl9UUkFOU19JVUNWO1xubmV0L2l1Y3YvYWZfaXVjdi5jLTY3NS1cdHNrLVx1MDAzZXNrX2FsbG9jYXRpb24gfD0gR0ZQX0RNQTtcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmM9NzMzPXN0YXRpYyBpbnQgaXVjdl9zb2NrX2Nvbm5lY3Qoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHNvY2thZGRyX3Vuc2l6ZWQgKmFkZHIsXG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jLTc0MC1cbm5ldC9pdWN2L2FmX2l1Y3YuYzo3NDE6XHRpZiAoYWxlbiBcdTAwM2Mgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pdWN2KSB8fCBhZGRyLVx1MDAzZXNhX2ZhbWlseSAhPSBBRl9JVUNWKVxubmV0L2l1Y3YvYWZfaXVjdi5jLTc0Mi1cdFx0cmV0dXJuIC1FSU5WQUw7XG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jLTc0Ny1cdGlmIChzay1cdTAwM2Vza19zdGF0ZSA9PSBJVUNWX09QRU4gXHUwMDI2XHUwMDI2XG5uZXQvaXVjdi9hZl9pdWN2LmM6NzQ4Olx0ICAgIGl1Y3YtXHUwMDNldHJhbnNwb3J0ID09IEFGX0lVQ1ZfVFJBTlNfSElQRVIpXG5uZXQvaXVjdi9hZl9pdWN2LmMtNzQ5LVx0XHRyZXR1cm4gLUVCQURGRDsgLyogZXhwbGljaXQgYmluZCByZXF1aXJlZCAqL1xuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYy03NjUtXG5uZXQvaXVjdi9hZl9pdWN2LmM6NzY2Olx0aWYgKGl1Y3YtXHUwMDNldHJhbnNwb3J0ID09IEFGX0lVQ1ZfVFJBTlNfSElQRVIpXG5uZXQvaXVjdi9hZl9pdWN2LmM6NzY3Olx0XHRlcnIgPSBpdWN2X3NlbmRfY3RybChzb2NrLVx1MDAzZXNrLCBBRl9JVUNWX0ZMQUdfU1lOKTtcbm5ldC9pdWN2L2FmX2l1Y3YuYy03NjgtXHRlbHNlXG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jLTc4MC1cbm5ldC9pdWN2L2FmX2l1Y3YuYzo3ODE6XHRpZiAoZXJyIFx1MDAyNlx1MDAyNiBpdWN2LVx1MDAzZXRyYW5zcG9ydCA9PSBBRl9JVUNWX1RSQU5TX0lVQ1YpIHtcbm5ldC9pdWN2L2FmX2l1Y3YuYy03ODItXHRcdGl1Y3Zfc2V2ZXJfcGF0aChzaywgMCk7XG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jPTg3Nz1zdGF0aWMgaW50IGl1Y3Zfc29ja19nZXRuYW1lKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrYWRkciAqYWRkcixcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmMtODgzLVxubmV0L2l1Y3YvYWZfaXVjdi5jOjg4NDpcdGFkZHItXHUwMDNlc2FfZmFtaWx5ID0gQUZfSVVDVjtcbm5ldC9pdWN2L2FmX2l1Y3YuYy04ODUtXG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jPTkyND1zdGF0aWMgaW50IGl1Y3Zfc29ja19zZW5kbXNnKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZyxcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmMtMTAwNi1cdCAqIGZvciBTT0NLX1NUUkVBTSB3ZSBtaWdodCB3YW50IHRvIGltcHJvdmUgaXQgaW4gZnV0dXJlICovXG5uZXQvaXVjdi9hZl9pdWN2LmM6MTAwNzpcdGlmIChpdWN2LVx1MDAzZXRyYW5zcG9ydCA9PSBBRl9JVUNWX1RSQU5TX0hJUEVSKSB7XG5uZXQvaXVjdi9hZl9pdWN2LmMtMTAwOC1cdFx0aGVhZHJvb20gPSBzaXplb2Yoc3RydWN0IGFmX2l1Y3ZfdHJhbnNfaGRyKSAmIzQzO1xuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYy0xMDUxLVxubmV0L2l1Y3YvYWZfaXVjdi5jOjEwNTI6XHRpZiAoaXVjdi1cdTAwM2V0cmFuc3BvcnQgPT0gQUZfSVVDVl9UUkFOU19ISVBFUikge1xubmV0L2l1Y3YvYWZfaXVjdi5jLTEwNTMtXHRcdGF0b21pY19pbmMoXHUwMDI2aXVjdi1cdTAwM2Vtc2dfc2VudCk7XG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jPTEyNDU9c3RhdGljIGludCBpdWN2X3NvY2tfcmVjdm1zZyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptc2csXG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jLTEzMTYtXHRcdGNvbnN1bWVfc2tiKHNrYik7XG5uZXQvaXVjdi9hZl9pdWN2LmM6MTMxNzpcdFx0aWYgKGl1Y3YtXHUwMDNldHJhbnNwb3J0ID09IEFGX0lVQ1ZfVFJBTlNfSElQRVIpIHtcbm5ldC9pdWN2L2FmX2l1Y3YuYy0xMzE4LVx0XHRcdGF0b21pY19pbmMoXHUwMDI2aXVjdi1cdTAwM2Vtc2dfcmVjdik7XG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jLTEzNDMtXHRcdFx0XHRcdFx0XHRpdWN2LVx1MDAzZW1zZ2xpbWl0IC8gMikge1xubmV0L2l1Y3YvYWZfaXVjdi5jOjEzNDQ6XHRcdFx0XHRlcnIgPSBpdWN2X3NlbmRfY3RybChzaywgQUZfSVVDVl9GTEFHX1dJTik7XG5uZXQvaXVjdi9hZl9pdWN2LmMtMTM0NS1cdFx0XHRcdGlmIChlcnIpIHtcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmM9MTQyNj1zdGF0aWMgaW50IGl1Y3Zfc29ja19zaHV0ZG93bihzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBpbnQgaG93KVxuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYy0xNDUxLVx0ICAgIHNrLVx1MDAzZXNrX3N0YXRlID09IElVQ1ZfQ09OTkVDVEVEKSB7XG5uZXQvaXVjdi9hZl9pdWN2LmM6MTQ1MjpcdFx0aWYgKGl1Y3YtXHUwMDNldHJhbnNwb3J0ID09IEFGX0lVQ1ZfVFJBTlNfSVVDVikge1xubmV0L2l1Y3YvYWZfaXVjdi5jLTE0NTMtXHRcdFx0dHhtc2cuY2xhc3MgPSAwO1xuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYy0xNDcwLVx0XHR9IGVsc2Vcbm5ldC9pdWN2L2FmX2l1Y3YuYzoxNDcxOlx0XHRcdGl1Y3Zfc2VuZF9jdHJsKHNrLCBBRl9JVUNWX0ZMQUdfU0hUKTtcbm5ldC9pdWN2L2FmX2l1Y3YuYy0xNDcyLVx0fVxuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYy0xNDc1LVx0aWYgKGhvdyA9PSBSQ1ZfU0hVVERPV04gfHwgaG93ID09IFNIVVRET1dOX01BU0spIHtcbm5ldC9pdWN2L2FmX2l1Y3YuYzoxNDc2Olx0XHRpZiAoKGl1Y3YtXHUwMDNldHJhbnNwb3J0ID09IEFGX0lVQ1ZfVFJBTlNfSVVDVikgXHUwMDI2XHUwMDI2XG5uZXQvaXVjdi9hZl9pdWN2LmMtMTQ3Ny1cdFx0ICAgIGl1Y3YtXHUwMDNlcGF0aCkge1xuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYz0xNjE1PXN0YXRpYyBpbnQgaXVjdl9jYWxsYmFja19jb25ucmVxKHN0cnVjdCBpdWN2X3BhdGggKnBhdGgsXG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jLTE2NzQtXHRpdWN2X3NvY2tfaW5pdChuc2ssIHNrKTtcbm5ldC9pdWN2L2FmX2l1Y3YuYzoxNjc1Olx0bml1Y3YtXHUwMDNldHJhbnNwb3J0ID0gQUZfSVVDVl9UUkFOU19JVUNWO1xubmV0L2l1Y3YvYWZfaXVjdi5jLTE2NzYtXHRuc2stXHUwMDNlc2tfYWxsb2NhdGlvbiB8PSBHRlBfRE1BO1xuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYz0xODcyPXN0YXRpYyBpbnQgYWZpdWN2X2hzX2NhbGxiYWNrX3N5bihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jLTE4ODItXHRcdGFmaXVjdl9zd2FwX3NyY19kZXN0KHNrYik7XG5uZXQvaXVjdi9hZl9pdWN2LmM6MTg4MzpcdFx0dHJhbnNfaGRyLVx1MDAzZWZsYWdzID0gQUZfSVVDVl9GTEFHX1NZTiB8IEFGX0lVQ1ZfRkxBR19GSU47XG5uZXQvaXVjdi9hZl9pdWN2LmMtMTg4NC1cdFx0ZXJyID0gZGV2X3F1ZXVlX3htaXQoc2tiKTtcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmMtMTg5NC1cdFx0YWZpdWN2X3N3YXBfc3JjX2Rlc3Qoc2tiKTtcbm5ldC9pdWN2L2FmX2l1Y3YuYzoxODk1Olx0XHR0cmFuc19oZHItXHUwMDNlZmxhZ3MgPSBBRl9JVUNWX0ZMQUdfU1lOIHwgQUZfSVVDVl9GTEFHX0ZJTjtcbm5ldC9pdWN2L2FmX2l1Y3YuYy0xODk2LVx0XHRlcnIgPSBkZXZfcXVldWVfeG1pdChza2IpO1xuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYy0xOTA0LVx0aXVjdl9zb2NrX2luaXQobnNrLCBzayk7XG5uZXQvaXVjdi9hZl9pdWN2LmM6MTkwNTpcdG5pdWN2LVx1MDAzZXRyYW5zcG9ydCA9IEFGX0lVQ1ZfVFJBTlNfSElQRVI7XG5uZXQvaXVjdi9hZl9pdWN2LmMtMTkwNi1cdG5pdWN2LVx1MDAzZW1zZ2xpbWl0ID0gaXVjdi1cdTAwM2Vtc2dsaW1pdDtcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmMtMTkxOC1cdGFmaXVjdl9zd2FwX3NyY19kZXN0KHNrYik7XG5uZXQvaXVjdi9hZl9pdWN2LmM6MTkxOTpcdHRyYW5zX2hkci1cdTAwM2VmbGFncyA9IEFGX0lVQ1ZfRkxBR19TWU4gfCBBRl9JVUNWX0ZMQUdfQUNLO1xubmV0L2l1Y3YvYWZfaXVjdi5jLTE5MjAtXHR0cmFuc19oZHItXHUwMDNld2luZG93ID0gbml1Y3YtXHUwMDNlbXNnbGltaXQ7XG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jPTIwNjY9c3RhdGljIGludCBhZml1Y3ZfaHNfcmN2KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jLTIwODktXHRza19mb3JfZWFjaChzaywgXHUwMDI2aXVjdl9za19saXN0LmhlYWQpIHtcbm5ldC9pdWN2L2FmX2l1Y3YuYzoyMDkwOlx0XHRpZiAodHJhbnNfaGRyLVx1MDAzZWZsYWdzID09IEFGX0lVQ1ZfRkxBR19TWU4pIHtcbm5ldC9pdWN2L2FmX2l1Y3YuYy0yMDkxLVx0XHRcdGlmICgoIW1lbWNtcChcdTAwMjZpdWN2X3NrKHNrKS1cdTAwM2VzcmNfbmFtZSxcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmMtMjEzMC1cdHN3aXRjaCAodHJhbnNfaGRyLVx1MDAzZWZsYWdzKSB7XG5uZXQvaXVjdi9hZl9pdWN2LmM6MjEzMTpcdGNhc2UgQUZfSVVDVl9GTEFHX1NZTjpcbm5ldC9pdWN2L2FmX2l1Y3YuYy0yMTMyLVx0XHQvKiBjb25uZWN0IHJlcXVlc3QgKi9cbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmMtMjEzNC1cdFx0YnJlYWs7XG5uZXQvaXVjdi9hZl9pdWN2LmM6MjEzNTpcdGNhc2UgKEFGX0lVQ1ZfRkxBR19TWU4gfCBBRl9JVUNWX0ZMQUdfQUNLKTpcbm5ldC9pdWN2L2FmX2l1Y3YuYy0yMTM2LVx0XHQvKiBjb25uZWN0IHJlcXVlc3QgY29uZmlybWVkICovXG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jLTIxMzgtXHRcdGJyZWFrO1xubmV0L2l1Y3YvYWZfaXVjdi5jOjIxMzk6XHRjYXNlIChBRl9JVUNWX0ZMQUdfU1lOIHwgQUZfSVVDVl9GTEFHX0ZJTik6XG5uZXQvaXVjdi9hZl9pdWN2LmMtMjE0MC1cdFx0LyogY29ubmVjdCByZXF1ZXN0IHJlZnVzZWQgKi9cbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmMtMjE0Mi1cdFx0YnJlYWs7XG5uZXQvaXVjdi9hZl9pdWN2LmM6MjE0MzpcdGNhc2UgKEFGX0lVQ1ZfRkxBR19GSU4pOlxubmV0L2l1Y3YvYWZfaXVjdi5jLTIxNDQtXHRcdC8qIGNsb3NlIHJlcXVlc3QgKi9cbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmMtMjE0Ni1cdFx0YnJlYWs7XG5uZXQvaXVjdi9hZl9pdWN2LmM6MjE0NzpcdGNhc2UgKEFGX0lVQ1ZfRkxBR19XSU4pOlxubmV0L2l1Y3YvYWZfaXVjdi5jLTIxNDgtXHRcdGVyciA9IGFmaXVjdl9oc19jYWxsYmFja193aW4oc2ssIHNrYik7XG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jLTIxNTMtXHRcdGZhbGx0aHJvdWdoO1x0LyogYW5kIHJlY2VpdmUgbm9uLXplcm8gbGVuZ3RoIGRhdGEgKi9cbm5ldC9pdWN2L2FmX2l1Y3YuYzoyMTU0Olx0Y2FzZSAoQUZfSVVDVl9GTEFHX1NIVCk6XG5uZXQvaXVjdi9hZl9pdWN2LmMtMjE1NS1cdFx0Lyogc2h1dGRvd24gcmVxdWVzdCAqL1xuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYz0yMjE0PXN0YXRpYyBpbnQgYWZpdWN2X25ldGRldl9ldmVudChzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKnRoaXMsXG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jLTIyMjgtXHRcdFx0XHRpZiAoZXZlbnQgPT0gTkVUREVWX0dPSU5HX0RPV04pXG5uZXQvaXVjdi9hZl9pdWN2LmM6MjIyOTpcdFx0XHRcdFx0aXVjdl9zZW5kX2N0cmwoc2ssIEFGX0lVQ1ZfRkxBR19GSU4pO1xubmV0L2l1Y3YvYWZfaXVjdi5jLTIyMzAtXHRcdFx0XHRzay1cdTAwM2Vza19zdGF0ZSA9IElVQ1ZfRElTQ09OTjtcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmM9MjI5Nj1zdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9wcm90b19mYW1pbHkgaXVjdl9zb2NrX2ZhbWlseV9vcHMgPSB7XG5uZXQvaXVjdi9hZl9pdWN2LmM6MjI5NzpcdC5mYW1pbHlcdD0gQUZfSVVDVixcbm5ldC9pdWN2L2FmX2l1Y3YuYy0yMjk4LVx0Lm93bmVyXHQ9IFRISVNfTU9EVUxFLFxuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYz0yMzAyPXN0YXRpYyBzdHJ1Y3QgcGFja2V0X3R5cGUgaXVjdl9wYWNrZXRfdHlwZSA9IHtcbm5ldC9pdWN2L2FmX2l1Y3YuYzoyMzAzOlx0LnR5cGUgPSBjcHVfdG9fYmUxNihFVEhfUF9BRl9JVUNWKSxcbm5ldC9pdWN2L2FmX2l1Y3YuYy0yMzA0LVx0LmZ1bmMgPSBhZml1Y3ZfaHNfcmN2LFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE1IDE1OjU0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgyNzQKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiAxMTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqSW52ZXN0aWdhdGluZyB0aGUgQUZfSVVDViBTb2NrZXQgU3VwcG9ydCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBgbmV0L2l1Y3YvS2NvbmZpZ2AgZmlsZSwgYW5kIHJpZ2h0IG9mZiB0aGUgYmF0LCBpdCYjMzk7cyBwcmV0dHkgY2xlYXIgdGhpcyBpcyBhIHNwZWNpYWxpemVkIGNvbmZpZ3VyYXRpb24uIFRoZSBgY29uZmlnIEFGX0lVQ1ZgIGVudHJ5LCB3aXRoIGl0cyBgZGVmX3RyaXN0YXRlIG0gaWYgUUVUSF9MMyB8fCBJVUNWYCwgc2NyZWFtcyBTMzkwIGFyY2hpdGVjdHVyZS4gSXQmIzM5O3MgZXhwbGljaXRseSB0aWVkIHRvIHovVk0gYW5kIEhpcGVyU29ja2V0cyB0cmFuc3BvcnQsIHdoaWNoIGFyZSBoYWxsbWFya3Mgb2YgdGhhdCBlbnZpcm9ubWVudC4KCkJ1dCB3YWl0IGEgbWludXRlLi4ubXkgbWluZCBzdGFydHMgdG8gd2FuZGVyLCBjYW4gdGhpcyBiZSBjb21waWxlZCBvbiB4ODY/IFRoYXQgd291bGQgYmUgdW5jb252ZW50aW9uYWwsIHRvIHNheSB0aGUgbGVhc3QuIEl0JiMzOTtzIGhpZ2hseSB1bmxpa2VseSB0aGF0IGNvZGUgZGVzaWduZWQgZm9yIGFuIFMzOTAgYXJjaGl0ZWN0dXJlIHdvdWxkIGhhdmUgYW55IHVzZSBpbiB4ODYgdW5sZXNzIHRoZXJlIHdhcyBzb21lIHNvcnQgb2Ygd2VpcmQgdHJhbnNsYXRpb24gbGF5ZXIgb3IgZW11bGF0aW9uIGludm9sdmVkLgoKVGhlIG5leHQgc3RlcCBpcyBvYnZpb3VzLiBJIG5lZWQgdG8gdHJhY2UgdGhlIGRlcGVuZGVuY2llcy4gSSBoYXZlIHRvIHNlZSBpZiB0aGlzIGBuZXQvaXVjdi9LY29uZmlnYCBmaWxlIGlzIGV2ZW4gKnNvdXJjZWQqIHdpdGhpbiB0aGUgbW9yZSBnZW5lcmFsIGBuZXQvS2NvbmZpZ2AgZmlsZS4gVGhhdCYjMzk7bGwgdGVsbCBtZSBpZiBpdCYjMzk7cyBldmVuICpwb3RlbnRpYWxseSogaW5jbHVkZWQgaW4gYSBicm9hZGVyLCBtb3JlIGFyY2hpdGVjdHVyZS1hZ25vc3RpYyBidWlsZC4gVGhhdOKAmXMgdGhlIG1vc3QgbGlrZWx5IHNvdXJjZSBvZiB0aGUgYW5zd2VyIGhlcmUsIHRoZSBLY29uZmlnIGZpbGUgZm9yIG5ldHdvcmsuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTUgMTU6NTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aXVjdiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9LY29uZmlnPTg4PXNvdXJjZSBcJiMzNDtuZXQveGZybS9LY29uZmlnXCYjMzQ7XG5uZXQvS2NvbmZpZzo4OTpzb3VyY2UgXCYjMzQ7bmV0L2l1Y3YvS2NvbmZpZ1wmIzM0O1xubmV0L0tjb25maWctOTAtc291cmNlIFwmIzM0O25ldC9zbWMvS2NvbmZpZ1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE1IDE1OjU0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg3NjEKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiA0MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOgoKKipVbnBhY2tpbmcgYSBLY29uZmlnIERlcGVuZGVuY3kqKgoKSG1tLCBob2xkIG9uIGEgc2Vjb25kLi4uIEl0JiMzOTtzIGhpdHRpbmcgbWUgdGhhdCBgbmV0L2l1Y3YvS2NvbmZpZ2AgZ2V0cyBzb3VyY2VkIHVuY29uZGl0aW9uYWxseSBmcm9tIHdpdGhpbiBgbmV0L0tjb25maWdgLCByaWdodD8gSSBuZWVkIHRvIGRvdWJsZS1jaGVjayB0aGF0LiBUaGlzIGhhcyBwb3RlbnRpYWwgaW1wbGljYXRpb25zIGZvciBjb25maWd1cmFiaWxpdHkgYW5kIGRlcGVuZGVuY2llcywgd2hpY2ggSSYjMzk7ZCBleHBlY3QgdG8gYmUgbW9yZSBncmFudWxhci4gSSBuZWVkIHRvIHRha2UgYSBmcmVzaCBsb29rIGF0IGBuZXQvaXVjdi9LY29uZmlnYCBhbmQgbWFrZSBzdXJlIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhpcyB0b3AtbGV2ZWwgZGVwZW5kZW5jeSBpcyBjb3JyZWN0LiBJdCYjMzk7cyBhIGtleSBkZXRhaWwgdG8gZnVsbHkgYXNzZXNzIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhlIG5ldHdvcmsgY29uZmlndXJhdGlvbi4gSSBqdXN0IHdhbnQgdG8gZW5zdXJlIHRoZXJlIGFyZW4mIzM5O3QgYW55IHVuZXhwZWN0ZWQgY29uc2VxdWVuY2VzIG9yIGRlc2lnbiBkZWNpc2lvbnMgYmFrZWQgaW50byB0aGF0IGluY2x1c2lvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTUgMTU6NTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvaXVjdi9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gICAyOlx0Y29uZmlnIElVQ1ZcbiAgIDM6XHRcdGRlcGVuZHMgb24gUzM5MFxuICAgNDpcdFx0ZGVmX3RyaXN0YXRlIHkgaWYgUzM5MFxuICAgNTpcdFx0cHJvbXB0IFwmIzM0O0lVQ1Ygc3VwcG9ydCAoUzM5MCAtIHovVk0gb25seSlcJiMzNDtcbiAgIDY6XHRcdGhlbHBcbiAgIDc6XHRcdCAgU2VsZWN0IHRoaXMgb3B0aW9uIGlmIHlvdSB3YW50IHRvIHVzZSBpbnRlci11c2VyIGNvbW11bmljYXRpb25cbiAgIDg6XHRcdCAgdW5kZXIgVk0gb3IgVklGLiBJZiB5b3UgcnVuIG9uIHovVk0sIHNheSBcJiMzNDtZXCYjMzQ7IHRvIGVuYWJsZSBhIGZhc3RcbiAgIDk6XHRcdCAgY29tbXVuaWNhdGlvbiBsaW5rIGJldHdlZW4gVk0gZ3Vlc3RzLlxuICAxMDpcdFxuICAxMTpcdGNvbmZpZyBBRklVQ1ZcbiAgMTI6XHRcdGRlcGVuZHMgb24gUzM5MFxuICAxMzpcdFx0ZGVmX3RyaXN0YXRlIG0gaWYgUUVUSF9MMyB8fCBJVUNWXG4gIDE0Olx0XHRwcm9tcHQgXCYjMzQ7QUZfSVVDViBTb2NrZXQgc3VwcG9ydCAoUzM5MCAtIHovVk0gYW5kIEhpcGVyU29ja2V0cyB0cmFuc3BvcnQpXCYjMzQ7XG4gIDE1Olx0XHRoZWxwXG4gIDE2Olx0XHQgIFNlbGVjdCB0aGlzIG9wdGlvbiBpZiB5b3Ugd2FudCB0byB1c2UgQUZfSVVDViBzb2NrZXQgYXBwbGljYXRpb25zXG4gIDE3Olx0XHQgIGJhc2VkIG9uIHovVk0gaW50ZXItdXNlciBjb21tdW5pY2F0aW9uIHZlaGljbGUgb3IgYmFzZWQgb25cbiAgMTg6XHRcdCAgSGlwZXJTb2NrZXRzLlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNSAxNTo1NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5Mjg4CgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogMzM4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEludmVzdGlnYXRpb24gaW50byBBRl9JVUNWIEZ1enppbmcqKgoKT2theSwgc28gYGNvbmZpZyBBRklVQ1ZgIGlzIGRlcGVuZGVudCBvbiBgUzM5MGAuIFRoYXQgaW1tZWRpYXRlbHkgdGVsbHMgbWUgSSBjYW4mIzM5O3QgY29tcGlsZSBpdCBvbiB4ODYsIHdoaWNoIGlzIG5vIHN1cnByaXNlLiBCdXQgaG9sZCBvbiwgSSBzZWVtIHRvIHJlbWVtYmVyIHN5emthbGxlciBmdXp6aW5nIHMzOTB4LiBUaGUgcXVlc3Rpb24gaXMsIGlzIGl0IHJlYWNoYWJsZSBpbiBRRU1VPyBZZXMsIHRoYXQmIzM5O3MgcmlnaHQsIHN5emthbGxlciBkb2VzIHJ1biBzMzkweCBRRU1VLiBCdXQgZG9lcyBpdCByZXF1aXJlIHNvbWUgc3BlY2lmaWMgaGFyZHdhcmU/IEFoLCBoZXJlJiMzOTtzIHRoZSBkZXNjcmlwdGlvbjogJiMzNDtBRl9JVUNWIFNvY2tldCBzdXBwb3J0IChTMzkwIC0gei9WTSBhbmQgSGlwZXJTb2NrZXRzIHRyYW5zcG9ydCkuJiMzNDsgTm93LCBpcyAqdGhhdCogcmVhY2hhYmxlIGluIFFFTVU/CgpMZXQmIzM5O3Mgc2VlIGlmIHN5emthbGxlciBldmVuIGZ1enplcyBgQUZfSVVDVmAuIElVQ1YgaXMgYSB6L1ZNIHNwZWNpZmljIGZlYXR1cmUsIGFuZCB0aGUgcXVlc3Rpb24gaXMgd2hldGhlciBpdCBpcyBlbXVsYWJsZSBpbiBRRU1VLiBUaW1lIHRvIGNoZWNrIGlmIGBBRl9JVUNWYCBpcyBmdXp6ZWQgYnkgc3l6a2FsbGVyLiBEb2VzIHN5emthbGxlciBoYXZlIGBzeXMvbGludXgvc29ja2V0X2l1Y3YudHh0YCBvciBzb21ldGhpbmcgc2ltaWxhcj8gSSBjYW4mIzM5O3QgdXNlIGdyZXBwZXIgZm9yIGBzeXMvKmAsIGJ1dCBJIGNhbiB1c2UgYGNvZGVzZWFyY2gtZGlyLWluZGV4YCwgb3IsIGZvciBub3csIGp1c3QgYXNzdW1lIGl0JiMzOTtzIHJlYWNoYWJsZSBhbmQgbW92ZSBvbi4KCldhaXQsIGhlcmUmIzM5O3MgYW4gaW1wb3J0YW50IG5vdGUgaW4gdGhlIGluc3RydWN0aW9uczogJiMzNDtDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4mIzM0OyBTbywgZG9lcyBRRU1VIGVtdWxhdGUgSVVDVj8gVGhhdCYjMzk7cyB0aGUgY3J1eCBvZiB0aGUgbWF0dGVyLgoKSSBuZWVkIHRvIGRpZyBkZWVwZXIuIExldCYjMzk7cyBzZWUgaWYgdGhlcmUgaXMgYW55IElVQ1YgZW11bGF0aW9uIGluIFFFTVUsIG9yIGlmIGl0JiMzOTtzIGp1c3QgYSBzb2NrZXQgZmFtaWx5IHRoYXQgY2FuIGJlIGNyZWF0ZWQgYnV0IGRvZXNuJiMzOTt0IGFjdHVhbGx5ICpkbyogYW55dGhpbmcuIFRpbWUgdG8gbG9vayBhdCBgbmV0L2l1Y3YvYWZfaXVjdi5jYC4gVGhhdCBzaG91bGQgZ2l2ZSBtZSB0aGUgYW5zd2VyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNSAxNTo1NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpdWN2X3NvY2tfY29ubmVjdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pdWN2L2FmX2l1Y3YuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXVjdi9hZl9pdWN2LmM9Njg3PXN0YXRpYyBpbnQgYWZpdWN2X3BhdGhfY29ubmVjdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29ja2FkZHJfdW5zaXplZCAqYWRkcilcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmMtNzMyLS8qIENvbm5lY3QgYW4gdW5jb25uZWN0ZWQgc29ja2V0ICovXG5uZXQvaXVjdi9hZl9pdWN2LmM6NzMzOnN0YXRpYyBpbnQgaXVjdl9zb2NrX2Nvbm5lY3Qoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHNvY2thZGRyX3Vuc2l6ZWQgKmFkZHIsXG5uZXQvaXVjdi9hZl9pdWN2LmMtNzM0LVx0XHRcdCAgICAgaW50IGFsZW4sIGludCBmbGFncylcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmM9MjI0Nz1zdGF0aWMgY29uc3Qgc3RydWN0IHByb3RvX29wcyBpdWN2X3NvY2tfb3BzID0ge1xuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYy0yMjUxLVx0LmJpbmRcdFx0PSBpdWN2X3NvY2tfYmluZCxcbm5ldC9pdWN2L2FmX2l1Y3YuYzoyMjUyOlx0LmNvbm5lY3RcdD0gaXVjdl9zb2NrX2Nvbm5lY3QsXG5uZXQvaXVjdi9hZl9pdWN2LmMtMjI1My1cdC5saXN0ZW5cdFx0PSBpdWN2X3NvY2tfbGlzdGVuLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNSAxNTo1NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDM4OQoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDgxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLgoKKipJbnZlc3RpZ2F0aW5nIEFGX0lVQ1YgU29ja2V0IENvbm5lY3Rpb24gaW4gUUVNVSoqCgpSaWdodCwgc28gYGl1Y3Zfc29ja19jb25uZWN0YCBpcyB0aGUgYGNvbm5lY3RgIGZ1bmN0aW9uIGNhbGwsIHNwZWNpZmljIHRvIHNvY2tldHMgdXNpbmcgdGhlIGBBRl9JVUNWYCBhZGRyZXNzIGZhbWlseS4gVGhhdCYjMzk7cyBzdHJhaWdodGZvcndhcmQgZW5vdWdoLiBUaGUgaW1wbGljYXRpb24gaXMsIGlmIHdlIGNhbiBzdWNjZXNzZnVsbHkgY3JlYXRlIGFuIGBBRl9JVUNWYCBzb2NrZXQsIHdlIHNob3VsZCBiZSBhYmxlIHRvIHRoZW4gY2FsbCBgY29ubmVjdGAgb24gaXQsIHdoaWNoIGlzIHRoZSBzdGFuZGFyZCBzb2NrZXQgbGlmZWN5Y2xlLiBUaGUgcXVlc3Rpb24gdGhlbiBiZWNvbWVzLCBjYW4gd2UgYWN0dWFsbHkgY3JlYXRlIGFuIGBBRl9JVUNWYCBzb2NrZXQgaW5zdGFuY2Ugd2l0aGluIHRoZSBRRU1VIGVudmlyb25tZW50PyBHaXZlbiB0aGF0IHRoZSB0ZXh0IHJlZmVyZW5jZXMgdGhlIGNvbm5lY3Rpb24gcHJvY2VzcywgdGhhdCBwYXJ0IGlzIGxpa2VseSBmdW5jdGlvbmFsLiBMZXQmIzM5O3Mgc2VlIGFib3V0IHRoZSBzb2NrZXQgY3JlYXRpb24gaXRzZWxmLiBUaGUgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gY2hlY2sgaG93IGBpdWN2X3NvY2tfY3JlYXRlYCBpcyBpbXBsZW1lbnRlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTUgMTU6NTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aXVjdl9zb2NrX2NyZWF0ZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pdWN2L2FmX2l1Y3YuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXVjdi9hZl9pdWN2LmM9MjI0Nz1zdGF0aWMgY29uc3Qgc3RydWN0IHByb3RvX29wcyBpdWN2X3NvY2tfb3BzID0ge1xuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYy0yMjY2LVxubmV0L2l1Y3YvYWZfaXVjdi5jOjIyNjc6c3RhdGljIGludCBpdWN2X3NvY2tfY3JlYXRlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNvY2tldCAqc29jaywgaW50IHByb3RvY29sLFxubmV0L2l1Y3YvYWZfaXVjdi5jLTIyNjgtXHRcdFx0ICAgIGludCBrZXJuKVxuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYz0yMjk2PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X3Byb3RvX2ZhbWlseSBpdWN2X3NvY2tfZmFtaWx5X29wcyA9IHtcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmMtMjI5OC1cdC5vd25lclx0PSBUSElTX01PRFVMRSxcbm5ldC9pdWN2L2FmX2l1Y3YuYzoyMjk5Olx0LmNyZWF0ZVx0PSBpdWN2X3NvY2tfY3JlYXRlLFxubmV0L2l1Y3YvYWZfaXVjdi5jLTIzMDAtfTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTUgMTU6NTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA5NTEKCQkJCQkJCW91dHB1dDogNDIKCQkJCQkJCXRob3VnaHRzOiAxNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyB0aGUgRnVuY3Rpb24gYGl1Y3Zfc29ja19jcmVhdGVgKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBgaXVjdl9zb2NrX2NyZWF0ZWAgZnVuY3Rpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyByb2xlIGluIHRoaXMgY29udGV4dC4gR2l2ZW4gdGhlIG5hbWUsIEkmIzM5O20gaW1tZWRpYXRlbHkgZXhwZWN0aW5nIGl0IHRvIGJlIHJlc3BvbnNpYmxlIGZvciBjcmVhdGluZyBhbiBJVUNWIHNvY2tldCwgd2hpY2ggaXMgdGhlIHVuZGVybHlpbmcgbWVjaGFuaXNtIGZvciBJbnRlci1Vc2VyIENvbW11bmljYXRpb24gVmVoaWNsZSAoSVVDVikgY29tbXVuaWNhdGlvbiBvbiB0aGlzIHN5c3RlbS4gTXkgaW5pdGlhbCB0aG91Z2h0cyBhcmUgYXJvdW5kIHdoYXQgdGhpcyBmdW5jdGlvbiBsaWtlbHkgaGFuZGxlcy4gRG9lcyBpdCBhbGxvY2F0ZSBtZW1vcnkgZm9yIHRoZSBzb2NrZXQgc3RydWN0dXJlPyBEb2VzIGl0IGluaXRpYWxpemUgdGhlIGludGVybmFsIGRhdGEgc3RydWN0dXJlcyByZXF1aXJlZD8gRG9lcyBpdCByZWdpc3RlciB0aGUgc29ja2V0IHdpdGggdGhlIElVQ1Ygc3Vic3lzdGVtPyBEb2VzIGl0IGhhbmRsZSBhbnkgc2VjdXJpdHktcmVsYXRlZCBhc3BlY3RzIGxpa2UgYWNjZXNzIGNvbnRyb2wgb3IgY29ubmVjdGlvbiBhdHRyaWJ1dGVzPyBJJiMzOTttIGFudGljaXBhdGluZyBwb3RlbnRpYWwgaW50ZXJhY3Rpb25zIHdpdGggdGhlIGtlcm5lbCYjMzk7cyBJVUNWIGluZnJhc3RydWN0dXJlLCBzbyBJJiMzOTtsbCBiZSBrZWVwaW5nIGFuIGV5ZSBvdXQgZm9yIHN5c3RlbSBjYWxscyBvciBpbnRlcm5hbCBrZXJuZWwgZnVuY3Rpb24gY2FsbHMgd2l0aGluIGl0cyBpbXBsZW1lbnRhdGlvbi4gSSYjMzk7bGwgbmVlZCB0byBleGFtaW5lIHRoZSByZXR1cm4gdmFsdWVzIHRvIHVuZGVyc3RhbmQgaG93IGl0IHNpZ25hbHMgc3VjY2VzcyBvciBmYWlsdXJlLCBhbmQgdGhlIHNwZWNpZmljIGVycm9yIGNvZGVzIGl0IG1pZ2h0IHJldHVybiB0byBnaXZlIG1lIGluc2lnaHRzIGludG8gcG90ZW50aWFsIHByb2JsZW1zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNSAxNTo1NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9pdWN2L2FmX2l1Y3YuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDIyNjcsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MjI2NzpcdHN0YXRpYyBpbnQgaXVjdl9zb2NrX2NyZWF0ZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzb2NrZXQgKnNvY2ssIGludCBwcm90b2NvbCxcbjIyNjg6XHRcdFx0XHQgICAgaW50IGtlcm4pXG4yMjY5Olx0e1xuMjI3MDpcdFx0c3RydWN0IHNvY2sgKnNrO1xuMjI3MTpcdFxuMjI3MjpcdFx0aWYgKHByb3RvY29sIFx1MDAyNlx1MDAyNiBwcm90b2NvbCAhPSBQRl9JVUNWKVxuMjI3MzpcdFx0XHRyZXR1cm4gLUVQUk9UT05PU1VQUE9SVDtcbjIyNzQ6XHRcbjIyNzU6XHRcdHNvY2stXHUwMDNlc3RhdGUgPSBTU19VTkNPTk5FQ1RFRDtcbjIyNzY6XHRcbjIyNzc6XHRcdHN3aXRjaCAoc29jay1cdTAwM2V0eXBlKSB7XG4yMjc4Olx0XHRjYXNlIFNPQ0tfU1RSRUFNOlxuMjI3OTpcdFx0Y2FzZSBTT0NLX1NFUVBBQ0tFVDpcbjIyODA6XHRcdFx0LyogY3VycmVudGx5LCBwcm90byBvcHMgY2FuIGhhbmRsZSBib3RoIHNrIHR5cGVzICovXG4yMjgxOlx0XHRcdHNvY2stXHUwMDNlb3BzID0gXHUwMDI2aXVjdl9zb2NrX29wcztcbjIyODI6XHRcdFx0YnJlYWs7XG4yMjgzOlx0XHRkZWZhdWx0OlxuMjI4NDpcdFx0XHRyZXR1cm4gLUVTT0NLVE5PU1VQUE9SVDtcbjIyODU6XHRcdH1cbjIyODY6XHRcbjIyODc6XHRcdHNrID0gaXVjdl9zb2NrX2FsbG9jKHNvY2ssIHByb3RvY29sLCBHRlBfS0VSTkVMLCBrZXJuKTtcbjIyODg6XHRcdGlmICghc2spXG4yMjg5Olx0XHRcdHJldHVybiAtRU5PTUVNO1xuMjI5MDpcdFxuMjI5MTpcdFx0aXVjdl9zb2NrX2luaXQoc2ssIE5VTEwpO1xuMjI5MjpcdFxuMjI5MzpcdFx0cmV0dXJuIDA7XG4yMjk0Olx0fVxuMjI5NTpcdFxuMjI5NjpcdHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X3Byb3RvX2ZhbWlseSBpdWN2X3NvY2tfZmFtaWx5X29wcyA9IHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTUgMTU6NTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE2NTAKCQkJCQkJCW91dHB1dDogNDEKCQkJCQkJCXRob3VnaHRzOiAzOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipTb2NrZXQgQ3JlYXRpb246IEluaXRpYWwgQXNzdW1wdGlvbnMgYW5kIE51YW5jZXMqKgoKUmlnaHQsIHNvIGluaXRpYWxseSBJIHdhcyB0aGlua2luZyB3ZSBjb3VsZCBieXBhc3MgYWxsIHRoZSBoYXJkd2FyZSBjaGVja3Mgd2hlbiBjcmVhdGluZyB0aGlzIHNvY2tldC4gVGhhdCBpbml0aWFsIGFzc3VtcHRpb24gc2VlbXMgdG8gaG9sZCB0cnVlIGJhc2VkIG9uIG15IGdlbmVyYWwgdW5kZXJzdGFuZGluZywgYXQgbGVhc3QgYXQgZmFjZSB2YWx1ZS4gSG93ZXZlciwgdGhlIG1lbnRpb24gb2YgYHByX2l1Y3ZgIHRyaWdnZXJlZCBhIHJlZCBmbGFnLiBJIGtub3cgdGhhdCBmdW5jdGlvbiBwbGF5cyBhIHJvbGUgaW4gdGhlIElVQ1YgaW5mcmFzdHJ1Y3R1cmUsIGFuZCBpdCYjMzk7cyBhbHdheXMgd29ydGggYSBkb3VibGUtY2hlY2sgd2hlbiBkZWFsaW5nIHdpdGggbG93LWxldmVsIHNvY2tldCBmdW5jdGlvbmFsaXR5IG9uIHRoaXMgcGxhdGZvcm0uIE15IGltbWVkaWF0ZSBuZXh0IHN0ZXAgaXMgdG8gZXhhbWluZSB0aGUgYmVoYXZpb3Igb2YgYGl1Y3Zfc29ja19hbGxvY2AuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyAqdGhhdCogc3BlY2lmaWMgZnVuY3Rpb24gaW50ZXJhY3RzIHdpdGggdGhlIGhhcmR3YXJlIGFic3RyYWN0aW9ucyBhbmQgaWYgaXQgcGVyZm9ybXMgYW55IGVzc2VudGlhbCB2YWxpZGF0aW9ucyBiZWZvcmUgdGhlIHNvY2tldCBpdHNlbGYgZ2V0cyBjcmVhdGVkLiBUaGF0JiMzOTtzIHRoZSBrZXkgdG8gY29uZmlybWluZyBpZiB3ZSYjMzk7cmUgdHJ1bHkgZnJlZSBvZiBhbnkgaGFyZHdhcmUgZGVwZW5kZW5jaWVzIGF0IHRoaXMgcG9pbnQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE1IDE1OjU0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2l1Y3YvYWZfaXVjdi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNDY2LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA0NjY6XHRzdGF0aWMgc3RydWN0IHNvY2sgKml1Y3Zfc29ja19hbGxvYyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBpbnQgcHJvdG8sIGdmcF90IHByaW8sIGludCBrZXJuKVxuIDQ2NzpcdHtcbiA0Njg6XHRcdHN0cnVjdCBzb2NrICpzaztcbiA0Njk6XHRcdHN0cnVjdCBpdWN2X3NvY2sgKml1Y3Y7XG4gNDcwOlx0XG4gNDcxOlx0XHRzayA9IHNrX2FsbG9jKFx1MDAyNmluaXRfbmV0LCBQRl9JVUNWLCBwcmlvLCBcdTAwMjZpdWN2X3Byb3RvLCBrZXJuKTtcbiA0NzI6XHRcdGlmICghc2spXG4gNDczOlx0XHRcdHJldHVybiBOVUxMO1xuIDQ3NDpcdFx0aXVjdiA9IGl1Y3Zfc2soc2spO1xuIDQ3NTpcdFxuIDQ3NjpcdFx0c29ja19pbml0X2RhdGEoc29jaywgc2spO1xuIDQ3NzpcdFx0SU5JVF9MSVNUX0hFQUQoXHUwMDI2aXVjdi1cdTAwM2VhY2NlcHRfcSk7XG4gNDc4Olx0XHRzcGluX2xvY2tfaW5pdChcdTAwMjZpdWN2LVx1MDAzZWFjY2VwdF9xX2xvY2spO1xuIDQ3OTpcdFx0c2tiX3F1ZXVlX2hlYWRfaW5pdChcdTAwMjZpdWN2LVx1MDAzZXNlbmRfc2tiX3EpO1xuIDQ4MDpcdFx0SU5JVF9MSVNUX0hFQUQoXHUwMDI2aXVjdi1cdTAwM2VtZXNzYWdlX3EubGlzdCk7XG4gNDgxOlx0XHRzcGluX2xvY2tfaW5pdChcdTAwMjZpdWN2LVx1MDAzZW1lc3NhZ2VfcS5sb2NrKTtcbiA0ODI6XHRcdHNrYl9xdWV1ZV9oZWFkX2luaXQoXHUwMDI2aXVjdi1cdTAwM2ViYWNrbG9nX3NrYl9xKTtcbiA0ODM6XHRcdGl1Y3YtXHUwMDNlc2VuZF90YWcgPSAwO1xuIDQ4NDpcdFx0YXRvbWljX3NldChcdTAwMjZpdWN2LVx1MDAzZXBlbmRpbmdzLCAwKTtcbiA0ODU6XHRcdGl1Y3YtXHUwMDNlZmxhZ3MgPSAwO1xuIDQ4NjpcdFx0aXVjdi1cdTAwM2Vtc2dsaW1pdCA9IDA7XG4gNDg3Olx0XHRhdG9taWNfc2V0KFx1MDAyNml1Y3YtXHUwMDNlc2tic19pbl94bWl0LCAwKTtcbiA0ODg6XHRcdGF0b21pY19zZXQoXHUwMDI2aXVjdi1cdTAwM2Vtc2dfc2VudCwgMCk7XG4gNDg5Olx0XHRhdG9taWNfc2V0KFx1MDAyNml1Y3YtXHUwMDNlbXNnX3JlY3YsIDApO1xuIDQ5MDpcdFx0aXVjdi1cdTAwM2VwYXRoID0gTlVMTDtcbiA0OTE6XHRcdGl1Y3YtXHUwMDNlc2tfdHhub3RpZnkgPSBhZml1Y3ZfaHNfY2FsbGJhY2tfdHhub3RpZnk7XG4gNDkyOlx0XHRtZW1zZXQoXHUwMDI2aXVjdi1cdTAwM2Vpbml0LCAwLCBzaXplb2YoaXVjdi1cdTAwM2Vpbml0KSk7XG4gNDkzOlx0XHRpZiAocHJfaXVjdilcbiA0OTQ6XHRcdFx0aXVjdi1cdTAwM2V0cmFuc3BvcnQgPSBBRl9JVUNWX1RSQU5TX0lVQ1Y7XG4gNDk1Olx0XHRlbHNlXG4gNDk2Olx0XHRcdGl1Y3YtXHUwMDNldHJhbnNwb3J0ID0gQUZfSVVDVl9UUkFOU19ISVBFUjtcbiA0OTc6XHRcbiA0OTg6XHRcdHNrLVx1MDAzZXNrX2Rlc3RydWN0ID0gaXVjdl9zb2NrX2Rlc3RydWN0O1xuIDQ5OTpcdFx0c2stXHUwMDNlc2tfc25kdGltZW8gPSBJVUNWX0NPTk5fVElNRU9VVDtcbiA1MDA6XHRcbiA1MDE6XHRcdHNvY2tfcmVzZXRfZmxhZyhzaywgU09DS19aQVBQRUQpO1xuIDUwMjpcdFxuIDUwMzpcdFx0c2stXHUwMDNlc2tfcHJvdG9jb2wgPSBwcm90bztcbiA1MDQ6XHRcdHNrLVx1MDAzZXNrX3N0YXRlXHQ9IElVQ1ZfT1BFTjtcbiA1MDU6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTUgMTU6NTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI2NzIKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiA0OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgZnJvbSBhbiBleHBlcnQmIzM5O3MgcGVyc3BlY3RpdmU6CgoqKkRpdmluZyBpbnRvIHRoZSBJVUNWIFRyYW5zcG9ydCBMb2dpYyoqCgpSaWdodCwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGllY2Ugb2YgY29kZSwgcHJvYmFibHkgc29tZSBuZXR3b3JraW5nIG9yIGludGVyLXByb2Nlc3MgY29tbXVuaWNhdGlvbiBzdHVmZiBkZWFsaW5nIHdpdGggSVVDVi4gSSBzZWUgdGhhdCBgaXVjdi0mZ3Q7dHJhbnNwb3J0YCBpcyBnZXR0aW5nIGFzc2lnbmVkIGBBRl9JVUNWX1RSQU5TX0lVQ1ZgIGlmIGEgcG9pbnRlciwgYHByX2l1Y3ZgLCBpc24mIzM5O3QgbnVsbC4gTWFrZXMgc2Vuc2Ug4oCTIHNldHRpbmcgdGhlIHRyYW5zcG9ydCB0eXBlIGJhc2VkIG9uIHNvbWUgY29uZGl0aW9uLiBCdXQgaGVyZSYjMzk7cyB0aGUga2lja2VyOiBJIG5lZWQgdG8gcXVpY2tseSByZWNhbGwgd2hhdCBgcHJfaXVjdmAgYWN0dWFsbHkgKmlzKi4gSXMgaXQgYSBmbGFnLCBhIHN0cnVjdHVyZSwgYSBjb250cm9sIGJsb2NrPyBJdCYjMzk7cyB0aGUga2V5IHRvIHVuZGVyc3RhbmRpbmcgdGhpcyBlbnRpcmUgY29uZGl0aW9uYWwgYXNzaWdubWVudC4gSSBuZWVkIHRoZSBjb250ZXh0LiBMZXQgbWUgY2hlY2sgdGhlIHJlbGF0ZWQgZGF0YSBzdHJ1Y3R1cmVzLCBvciBtYXliZSB0aGUgc3Vycm91bmRpbmcgY29kZSB3aGVyZSB0aGlzIGlzIHVzZWQuIEkmIzM5O20gZ29pbmcgdG8gcXVpY2tseSBsb29rIGludG8gd2hhdCBgcHJfaXVjdmAgcmVwcmVzZW50cyB0byB1bmRlcnN0YW5kIHRoZSB1bmRlcmx5aW5nIGxvZ2ljLiBJdCBoYXMgdG8gYmUgYW4gSVVDVi1yZWxhdGVkIHN0cnVjdHVyZS4gVGhlbiwgSSB3aWxsIGJlIGFibGUgdG8gZ2V0IHRoZSB3aG9sZSBwaWN0dXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNSAxNTo1NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwcl9pdWN2JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2l1Y3YvYWZfaXVjdi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pdWN2L2FmX2l1Y3YuYz00Mj1zdGF0aWMgc3RydWN0IHByb3RvIGl1Y3ZfcHJvdG8gPSB7XG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jLTQ3LVxubmV0L2l1Y3YvYWZfaXVjdi5jOjQ4OnN0YXRpYyBzdHJ1Y3QgaXVjdl9pbnRlcmZhY2UgKnByX2l1Y3Y7XG5uZXQvaXVjdi9hZl9pdWN2LmMtNDktc3RhdGljIHN0cnVjdCBpdWN2X2hhbmRsZXIgYWZfaXVjdl9oYW5kbGVyO1xuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYz0zMzU9c3RhdGljIHZvaWQgaXVjdl9zZXZlcl9wYXRoKHN0cnVjdCBzb2NrICpzaywgaW50IHdpdGhfdXNlcl9kYXRhKVxuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYy0zNDctXHRcdFx0QVNDRUJDKHVzZXJfZGF0YSwgc2l6ZW9mKHVzZXJfZGF0YSkpO1xubmV0L2l1Y3YvYWZfaXVjdi5jOjM0ODpcdFx0XHRwcl9pdWN2LVx1MDAzZXBhdGhfc2V2ZXIocGF0aCwgdXNlcl9kYXRhKTtcbm5ldC9pdWN2L2FmX2l1Y3YuYy0zNDktXHRcdH0gZWxzZVxubmV0L2l1Y3YvYWZfaXVjdi5jOjM1MDpcdFx0XHRwcl9pdWN2LVx1MDAzZXBhdGhfc2V2ZXIocGF0aCwgTlVMTCk7XG5uZXQvaXVjdi9hZl9pdWN2LmMtMzUxLVx0XHRpdWN2X3BhdGhfZnJlZShwYXRoKTtcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmM9NDY2PXN0YXRpYyBzdHJ1Y3Qgc29jayAqaXVjdl9zb2NrX2FsbG9jKHN0cnVjdCBzb2NrZXQgKnNvY2ssIGludCBwcm90bywgZ2ZwX3QgcHJpbywgaW50IGtlcm4pXG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jLTQ5Mi1cdG1lbXNldChcdTAwMjZpdWN2LVx1MDAzZWluaXQsIDAsIHNpemVvZihpdWN2LVx1MDAzZWluaXQpKTtcbm5ldC9pdWN2L2FmX2l1Y3YuYzo0OTM6XHRpZiAocHJfaXVjdilcbm5ldC9pdWN2L2FmX2l1Y3YuYy00OTQtXHRcdGl1Y3YtXHUwMDNldHJhbnNwb3J0ID0gQUZfSVVDVl9UUkFOU19JVUNWO1xuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYz01ODI9c3RhdGljIGludCBpdWN2X3NvY2tfYmluZChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29ja2FkZHJfdW5zaXplZCAqYWRkcixcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmMtNjEzLVx0LyogQmluZCB0aGUgc29ja2V0ICovXG5uZXQvaXVjdi9hZl9pdWN2LmM6NjE0Olx0aWYgKHByX2l1Y3YpXG5uZXQvaXVjdi9hZl9pdWN2LmMtNjE1LVx0XHRpZiAoIW1lbWNtcChzYS1cdTAwM2VzaXVjdl91c2VyX2lkLCBpdWN2X3VzZXJpZCwgOCkpXG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jLTY0Mi12bV9iaW5kOlxubmV0L2l1Y3YvYWZfaXVjdi5jOjY0MzpcdGlmIChwcl9pdWN2KSB7XG5uZXQvaXVjdi9hZl9pdWN2LmMtNjQ0LVx0XHQvKiB1c2UgbG9jYWwgdXNlcmlkIGZvciBiYWNrd2FyZCBjb21wYXQgKi9cbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmM9NjY1PXN0YXRpYyBpbnQgaXVjdl9zb2NrX2F1dG9iaW5kKHN0cnVjdCBzb2NrICpzaylcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmMtNjY5LVxubmV0L2l1Y3YvYWZfaXVjdi5jOjY3MDpcdGlmICh1bmxpa2VseSghcHJfaXVjdikpXG5uZXQvaXVjdi9hZl9pdWN2LmMtNjcxLVx0XHRyZXR1cm4gLUVQUk9UTztcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmM9Njg3PXN0YXRpYyBpbnQgYWZpdWN2X3BhdGhfY29ubmVjdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29ja2FkZHJfdW5zaXplZCAqYWRkcilcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmMtNzA1LVx0fVxubmV0L2l1Y3YvYWZfaXVjdi5jOjcwNjpcdGVyciA9IHByX2l1Y3YtXHUwMDNlcGF0aF9jb25uZWN0KGl1Y3YtXHUwMDNlcGF0aCwgXHUwMDI2YWZfaXVjdl9oYW5kbGVyLFxubmV0L2l1Y3YvYWZfaXVjdi5jLTcwNy1cdFx0XHRcdCAgICBzYS1cdTAwM2VzaXVjdl91c2VyX2lkLCBOVUxMLCB1c2VyX2RhdGEsXG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jPTkxMz1zdGF0aWMgaW50IGl1Y3Zfc2VuZF9pcHJtKHN0cnVjdCBpdWN2X3BhdGggKnBhdGgsIHN0cnVjdCBpdWN2X21lc3NhZ2UgKm1zZyxcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmMtOTE5LVx0cHJtZGF0YVs3XSA9IDB4ZmYgLSAodTgpIHNrYi1cdTAwM2VsZW47XG5uZXQvaXVjdi9hZl9pdWN2LmM6OTIwOlx0cmV0dXJuIHByX2l1Y3YtXHUwMDNlbWVzc2FnZV9zZW5kKHBhdGgsIG1zZywgSVVDVl9JUFJNREFUQSwgMCxcbm5ldC9pdWN2L2FmX2l1Y3YuYy05MjEtXHRcdFx0XHQgKHZvaWQgKikgcHJtZGF0YSwgOCk7XG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jPTkyND1zdGF0aWMgaW50IGl1Y3Zfc29ja19zZW5kbXNnKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZyxcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmMtMTA3Ny1cdFx0XHRpZiAoZXJyID09IDB4MTUpIHtcbm5ldC9pdWN2L2FmX2l1Y3YuYzoxMDc4Olx0XHRcdFx0cHJfaXVjdi1cdTAwM2VwYXRoX3NldmVyKGl1Y3YtXHUwMDNlcGF0aCwgTlVMTCk7XG5uZXQvaXVjdi9hZl9pdWN2LmMtMTA3OS1cdFx0XHRcdGF0b21pY19kZWMoXHUwMDI2aXVjdi1cdTAwM2Vza2JzX2luX3htaXQpO1xuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYy0xMDk2LVx0XHRcdH1cbm5ldC9pdWN2L2FmX2l1Y3YuYzoxMDk3Olx0XHRcdGVyciA9IHByX2l1Y3YtXHUwMDNlbWVzc2FnZV9zZW5kKGl1Y3YtXHUwMDNlcGF0aCwgXHUwMDI2dHhtc2csXG5uZXQvaXVjdi9hZl9pdWN2LmMtMTA5OC1cdFx0XHRcdFx0XHQgICAgSVVDVl9JUEJVRkxTVCwgMCxcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmMtMTEwMC1cdFx0fSBlbHNlIHsgLyogbm9uLUlQUk0gTGluZWFyIHNrYiAqL1xubmV0L2l1Y3YvYWZfaXVjdi5jOjExMDE6XHRcdFx0ZXJyID0gcHJfaXVjdi1cdTAwM2VtZXNzYWdlX3NlbmQoaXVjdi1cdTAwM2VwYXRoLCBcdTAwMjZ0eG1zZyxcbm5ldC9pdWN2L2FmX2l1Y3YuYy0xMTAyLVx0XHRcdFx0XHQwLCAwLCAodm9pZCAqKXNrYi1cdTAwM2VkYXRhLCBza2ItXHUwMDNlbGVuKTtcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmM9MTE2Nj1zdGF0aWMgdm9pZCBpdWN2X3Byb2Nlc3NfbWVzc2FnZShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jLTExOTctXHRcdFx0fVxubmV0L2l1Y3YvYWZfaXVjdi5jOjExOTg6XHRcdFx0cmMgPSBwcl9pdWN2LVx1MDAzZW1lc3NhZ2VfcmVjZWl2ZShwYXRoLCBtc2csXG5uZXQvaXVjdi9hZl9pdWN2LmMtMTE5OS1cdFx0XHRcdFx0ICAgICAgSVVDVl9JUEJVRkxTVCxcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmMtMTIwMS1cdFx0fSBlbHNlIHtcbm5ldC9pdWN2L2FmX2l1Y3YuYzoxMjAyOlx0XHRcdHJjID0gcHJfaXVjdi1cdTAwM2VtZXNzYWdlX3JlY2VpdmUocGF0aCwgbXNnLFxubmV0L2l1Y3YvYWZfaXVjdi5jLTEyMDMtXHRcdFx0XHRcdCAgICAgIG1zZy1cdTAwM2VmbGFncyBcdTAwMjYgSVVDVl9JUFJNREFUQSxcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmM9MTQyNj1zdGF0aWMgaW50IGl1Y3Zfc29ja19zaHV0ZG93bihzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBpbnQgaG93KVxuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYy0xNDU0LVx0XHRcdHR4bXNnLnRhZyA9IDA7XG5uZXQvaXVjdi9hZl9pdWN2LmM6MTQ1NTpcdFx0XHRlcnIgPSBwcl9pdWN2LVx1MDAzZW1lc3NhZ2Vfc2VuZChpdWN2LVx1MDAzZXBhdGgsIFx1MDAyNnR4bXNnLFxubmV0L2l1Y3YvYWZfaXVjdi5jLTE0NTYtXHRcdFx0XHRJVUNWX0lQUk1EQVRBLCAwLCAodm9pZCAqKSBpcHJtX3NodXRkb3duLCA4KTtcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmMtMTQ3Ny1cdFx0ICAgIGl1Y3YtXHUwMDNlcGF0aCkge1xubmV0L2l1Y3YvYWZfaXVjdi5jOjE0Nzg6XHRcdFx0ZXJyID0gcHJfaXVjdi1cdTAwM2VwYXRoX3F1aWVzY2UoaXVjdi1cdTAwM2VwYXRoLCBOVUxMKTtcbm5ldC9pdWN2L2FmX2l1Y3YuYy0xNDc5LVx0XHRcdGlmIChlcnIpXG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jPTE2MTU9c3RhdGljIGludCBpdWN2X2NhbGxiYWNrX2Nvbm5yZXEoc3RydWN0IGl1Y3ZfcGF0aCAqcGF0aCxcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmMtMTY1Mi1cdGlmIChzay1cdTAwM2Vza19zdGF0ZSAhPSBJVUNWX0xJU1RFTikge1xubmV0L2l1Y3YvYWZfaXVjdi5jOjE2NTM6XHRcdGVyciA9IHByX2l1Y3YtXHUwMDNlcGF0aF9zZXZlcihwYXRoLCB1c2VyX2RhdGEpO1xubmV0L2l1Y3YvYWZfaXVjdi5jLTE2NTQtXHRcdGl1Y3ZfcGF0aF9mcmVlKHBhdGgpO1xuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYy0xNjU5LVx0aWYgKHNrX2FjY2VwdHFfaXNfZnVsbChzaykpIHtcbm5ldC9pdWN2L2FmX2l1Y3YuYzoxNjYwOlx0XHRlcnIgPSBwcl9pdWN2LVx1MDAzZXBhdGhfc2V2ZXIocGF0aCwgdXNlcl9kYXRhKTtcbm5ldC9pdWN2L2FmX2l1Y3YuYy0xNjYxLVx0XHRpdWN2X3BhdGhfZnJlZShwYXRoKTtcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmMtMTY2Ny1cdGlmICghbnNrKSB7XG5uZXQvaXVjdi9hZl9pdWN2LmM6MTY2ODpcdFx0ZXJyID0gcHJfaXVjdi1cdTAwM2VwYXRoX3NldmVyKHBhdGgsIHVzZXJfZGF0YSk7XG5uZXQvaXVjdi9hZl9pdWN2LmMtMTY2OS1cdFx0aXVjdl9wYXRoX2ZyZWUocGF0aCk7XG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jLTE2OTMtXHRwYXRoLVx1MDAzZW1zZ2xpbSA9IGl1Y3YtXHUwMDNlbXNnbGltaXQ7XG5uZXQvaXVjdi9hZl9pdWN2LmM6MTY5NDpcdGVyciA9IHByX2l1Y3YtXHUwMDNlcGF0aF9hY2NlcHQocGF0aCwgXHUwMDI2YWZfaXVjdl9oYW5kbGVyLCBudXNlcl9kYXRhLCBuc2spO1xubmV0L2l1Y3YvYWZfaXVjdi5jLTE2OTUtXHRpZiAoZXJyKSB7XG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jPTE3MjA9c3RhdGljIHZvaWQgaXVjdl9jYWxsYmFja19yeChzdHJ1Y3QgaXVjdl9wYXRoICpwYXRoLCBzdHJ1Y3QgaXVjdl9tZXNzYWdlICptc2cpXG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jLTE3MjgtXHRpZiAoc2stXHUwMDNlc2tfc2h1dGRvd24gXHUwMDI2IFJDVl9TSFVURE9XTikge1xubmV0L2l1Y3YvYWZfaXVjdi5jOjE3Mjk6XHRcdHByX2l1Y3YtXHUwMDNlbWVzc2FnZV9yZWplY3QocGF0aCwgbXNnKTtcbm5ldC9pdWN2L2FmX2l1Y3YuYy0xNzMwLVx0XHRyZXR1cm47XG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jPTIzMDc9c3RhdGljIGludCBfX2luaXQgYWZpdWN2X2luaXQodm9pZClcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmMtMjMxOC1cbm5ldC9pdWN2L2FmX2l1Y3YuYzoyMzE5Olx0XHRwcl9pdWN2ID0gXHUwMDI2aXVjdl9pZjtcbm5ldC9pdWN2L2FmX2l1Y3YuYy0yMzIwLVx0fSBlbHNlIHtcbm5ldC9pdWN2L2FmX2l1Y3YuYy0yMzIxLVx0XHRtZW1zZXQoXHUwMDI2aXVjdl91c2VyaWQsIDAsIHNpemVvZihpdWN2X3VzZXJpZCkpO1xubmV0L2l1Y3YvYWZfaXVjdi5jOjIzMjI6XHRcdHByX2l1Y3YgPSBOVUxMO1xubmV0L2l1Y3YvYWZfaXVjdi5jLTIzMjMtXHR9XG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jLTIzMzEtXG5uZXQvaXVjdi9hZl9pdWN2LmM6MjMzMjpcdGlmIChwcl9pdWN2KSB7XG5uZXQvaXVjdi9hZl9pdWN2LmM6MjMzMzpcdFx0ZXJyID0gcHJfaXVjdi1cdTAwM2VpdWN2X3JlZ2lzdGVyKFx1MDAyNmFmX2l1Y3ZfaGFuZGxlciwgMCk7XG5uZXQvaXVjdi9hZl9pdWN2LmMtMjMzNC1cdFx0aWYgKGVycilcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmMtMjM0NS1vdXRfbm90aWZpZXI6XG5uZXQvaXVjdi9hZl9pdWN2LmM6MjM0NjpcdGlmIChwcl9pdWN2KVxubmV0L2l1Y3YvYWZfaXVjdi5jOjIzNDc6XHRcdHByX2l1Y3YtXHUwMDNlaXVjdl91bnJlZ2lzdGVyKFx1MDAyNmFmX2l1Y3ZfaGFuZGxlciwgMCk7XG5uZXQvaXVjdi9hZl9pdWN2LmMtMjM0OC1vdXRfc29jazpcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmM9MjM1Nj1zdGF0aWMgdm9pZCBfX2V4aXQgYWZpdWN2X2V4aXQodm9pZClcbm5ldC9pdWN2L2FmX2l1Y3YuYy0yMzU3LXtcbm5ldC9pdWN2L2FmX2l1Y3YuYzoyMzU4Olx0aWYgKHByX2l1Y3YpXG5uZXQvaXVjdi9hZl9pdWN2LmM6MjM1OTpcdFx0cHJfaXVjdi1cdTAwM2VpdWN2X3VucmVnaXN0ZXIoXHUwMDI2YWZfaXVjdl9oYW5kbGVyLCAwKTtcbm5ldC9pdWN2L2FmX2l1Y3YuYy0yMzYwLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNSAxNTo1NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjIxNwoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDQwOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIElVQ1YgUGF0aCBTZXZlcmluZyBMb2dpYyoqCgpPa2F5LCBzbyBsb29raW5nIGF0IHRoaXMgY29kZSwgaXQgc2VlbXMgdGhlIGBwcl9pdWN2YCBwb2ludGVyIGlzIHRoZSBrZXkuIE15IGluaXRpYWwgdGhvdWdodCB3YXMgdGhhdCBpdCYjMzk7cyBzaW1wbHkgYXNzaWduZWQgYCZhbXA7aXVjdl9pZmAgaWYgYGl1Y3ZfcmVnaXN0ZXJgIGlzIGF2YWlsYWJsZSwgb3RoZXJ3aXNlIGl0JiMzOTtzIGBOVUxMYC4gQnV0IHRoZW4gSSBzYXcgYGFmaXVjdl9pbml0YCwgYW5kIHRoYXQmIzM5O3MgYSBiaXQgbW9yZSBpbnZvbHZlZC4gYGl1Y3ZfcmVnaXN0ZXJgIGlzIGNhbGxlZCwgYW5kIGlmIGl0IHN1Y2NlZWRzLCBgcHJfaXVjdmAgKmlzKiBzZXQsIGJ1dCBpZiBpdCBmYWlscywgYHByX2l1Y3ZgIGJlY29tZXMgYE5VTExgIGFuZCBgaXVjdl91c2VyaWRgIGlzIHplcm9lZC4gYGl1Y3ZfcmVnaXN0ZXJgIGl0c2VsZiBpcyBjbGVhcmx5IGRlZmluZWQgaW4gYG5ldC9pdWN2L2l1Y3YuY2AsIHdoaWNoIG1ha2VzIHNlbnNlLgoKTm93LCB0aGUgaW50ZXJlc3RpbmcgYml0OiB0aGUgcGF0Y2guIEl0IGludHJvZHVjZXMgdGhpcyBjb25kaXRpb246IGlmIHRoZXJlJiMzOTtzIGFuIGVycm9yLCBhbmQgdGhlIGBpdWN2LSZndDt0cmFuc3BvcnRgIGlzIGBBRl9JVUNWX1RSQU5TX0lVQ1ZgLCB0aGVuIGBpdWN2X3NldmVyX3BhdGhgIGlzIGNhbGxlZC4gSXQmIzM5O3MgZXNzZW50aWFsbHkgcGF0aCB0ZXJtaW5hdGlvbiBjb2RlLiBTbywgdGhlIHBhdGNoIGlzIGRlc2lnbmVkIHRvIGhhbmRsZSBhIHNpdHVhdGlvbiB3aGVyZSBhbiBJVUNWIHBhdGggbmVlZHMgdG8gYmUgc2V2ZXJlZC4KClRoZSBjcnVjaWFsIHBvaW50IGhlcmUgaXMgdGhhdCB0aGlzIGxvZ2ljICpvbmx5KiB0cmlnZ2VycyBpZiBgaXVjdi0mZ3Q7dHJhbnNwb3J0YCBpcyBleHBsaWNpdGx5IHNldCB0byBgQUZfSVVDVl9UUkFOU19JVUNWYC4gVGhpcyBzdWdnZXN0cyB0aGF0IHRoZSBjb2RlIHBhdGggZm9yIHNldmVyaW5nIG9ubHkgZ2V0cyBoaXQgaWYgSVVDViB0cmFuc3BvcnQgaXMgYWN0dWFsbHkgaW4gdXNlLiBUaGlzIGRpcmVjdGx5IGltcGxpZXMgdGhhdCB0aGUgSVVDViB0cmFuc3BvcnQgaXMgKmVuYWJsZWQqLgoKQW5kIGdpdmVuIGhvdyBgcHJfaXVjdmAgaXMgc2V0IHVwLCB0aGlzIGFsc28gaW1wbGljaXRseSBtZWFucyB0aGF0IGBwcl9pdWN2YCAqbXVzdCogYmUgbm9uLU5VTEwgZm9yIHRoaXMgY29kZSB0byBldmVuIGV4ZWN1dGUsIHNpbmNlIGBpdWN2X3JlZ2lzdGVyYCBoYXMgdG8gaGF2ZSBzdWNjZWVkZWQuIFNvLCBpbiBzdW1tYXJ5LCB0aGlzIHBhdGNoIGlzIGEgY3J1Y2lhbCBzYWZldHkgbWVjaGFuaXNtOiBpZiB0aGUgSVVDViB0cmFuc3BvcnQgaXMgZW5hYmxlZCAoYGl1Y3YtJmd0O3RyYW5zcG9ydGAgaXMgYEFGX0lVQ1ZfVFJBTlNfSVVDVmApIGFuZCBzb21ldGhpbmcgZ29lcyB3cm9uZywgdGhlIHBhdGNoIHdpbGwgYXR0ZW1wdCB0byBjbGVhbiB1cCBhbnkgcmVtYWluaW5nIHNvY2tldCBzdGF0ZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTUgMTU6NTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aXVjdl9yZWdpc3RlciYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pdWN2L2l1Y3YuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXVjdi9pdWN2LmM9MjEwPXN0YXRpYyBpbnQgaXVjdl9hY3RpdmVfY3B1ID0gLTE7XG4tLVxubmV0L2l1Y3YvaXVjdi5jLTIxMi0vKlxubmV0L2l1Y3YvaXVjdi5jOjIxMzogKiBNdXRleCBhbmQgd2FpdCBxdWV1ZSBmb3IgaXVjdl9yZWdpc3Rlci9pdWN2X3VucmVnaXN0ZXIuXG5uZXQvaXVjdi9pdWN2LmMtMjE0LSAqL1xubmV0L2l1Y3YvaXVjdi5jOjIxNTpzdGF0aWMgREVGSU5FX01VVEVYKGl1Y3ZfcmVnaXN0ZXJfbXV0ZXgpO1xubmV0L2l1Y3YvaXVjdi5jLTIxNi1cbi0tXG5uZXQvaXVjdi9pdWN2LmM9NzIxPXN0YXRpYyB2b2lkIGl1Y3ZfY2xlYW51cF9xdWV1ZSh2b2lkKVxuLS1cbm5ldC9pdWN2L2l1Y3YuYy03NDYtLyoqXG5uZXQvaXVjdi9pdWN2LmM6NzQ3OiAqIGl1Y3ZfcmVnaXN0ZXIgLSBSZWdpc3RlcnMgYSBkcml2ZXIgd2l0aCBJVUNWLlxubmV0L2l1Y3YvaXVjdi5jLTc0OC0gKlxuLS1cbm5ldC9pdWN2L2l1Y3YuYy03NTQtICovXG5uZXQvaXVjdi9pdWN2LmM6NzU1OmludCBpdWN2X3JlZ2lzdGVyKHN0cnVjdCBpdWN2X2hhbmRsZXIgKmhhbmRsZXIsIGludCBzbXApXG5uZXQvaXVjdi9pdWN2LmMtNzU2LXtcbi0tXG5uZXQvaXVjdi9pdWN2LmMtNzYwLVx0XHRyZXR1cm4gLUVOT1NZUztcbm5ldC9pdWN2L2l1Y3YuYzo3NjE6XHRtdXRleF9sb2NrKFx1MDAyNml1Y3ZfcmVnaXN0ZXJfbXV0ZXgpO1xubmV0L2l1Y3YvaXVjdi5jLTc2Mi1cdGlmICghc21wKVxuLS1cbm5ldC9pdWN2L2l1Y3YuYy03NzYtb3V0X211dGV4OlxubmV0L2l1Y3YvaXVjdi5jOjc3NzpcdG11dGV4X3VubG9jayhcdTAwMjZpdWN2X3JlZ2lzdGVyX211dGV4KTtcbm5ldC9pdWN2L2l1Y3YuYy03NzgtXHRyZXR1cm4gcmM7XG5uZXQvaXVjdi9pdWN2LmMtNzc5LX1cbm5ldC9pdWN2L2l1Y3YuYzo3ODA6RVhQT1JUX1NZTUJPTChpdWN2X3JlZ2lzdGVyKTtcbm5ldC9pdWN2L2l1Y3YuYy03ODEtXG4tLVxubmV0L2l1Y3YvaXVjdi5jPTc4OD12b2lkIGl1Y3ZfdW5yZWdpc3RlcihzdHJ1Y3QgaXVjdl9oYW5kbGVyICpoYW5kbGVyLCBpbnQgc21wKVxuLS1cbm5ldC9pdWN2L2l1Y3YuYy03OTEtXG5uZXQvaXVjdi9pdWN2LmM6NzkyOlx0bXV0ZXhfbG9jayhcdTAwMjZpdWN2X3JlZ2lzdGVyX211dGV4KTtcbm5ldC9pdWN2L2l1Y3YuYy03OTMtXHRzcGluX2xvY2tfYmgoXHUwMDI2aXVjdl90YWJsZV9sb2NrKTtcbi0tXG5uZXQvaXVjdi9pdWN2LmMtODA5LVx0XHRpdWN2X3NldG1hc2tfbXAoKTtcbm5ldC9pdWN2L2l1Y3YuYzo4MTA6XHRtdXRleF91bmxvY2soXHUwMDI2aXVjdl9yZWdpc3Rlcl9tdXRleCk7XG5uZXQvaXVjdi9pdWN2LmMtODExLX1cbi0tXG5uZXQvaXVjdi9pdWN2LmM9MTgzND1zdHJ1Y3QgaXVjdl9pbnRlcmZhY2UgaXVjdl9pZiA9IHtcbi0tXG5uZXQvaXVjdi9pdWN2LmMtMTg0Ny1cdC5wYXRoX3NldmVyID0gaXVjdl9wYXRoX3NldmVyLFxubmV0L2l1Y3YvaXVjdi5jOjE4NDg6XHQuaXVjdl9yZWdpc3RlciA9IGl1Y3ZfcmVnaXN0ZXIsXG5uZXQvaXVjdi9pdWN2LmMtMTg0OS1cdC5pdWN2X3VucmVnaXN0ZXIgPSBpdWN2X3VucmVnaXN0ZXIsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE1IDE1OjU1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3OTkyCgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgdGhlIFB1cnBvc2Ugb2YgYGl1Y3ZfcmVnaXN0ZXJgKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBgaXVjdl9yZWdpc3RlcmAuIEhtbSwgSSB3b25kZXIgd2hhdCBpdHMgaW50ZW5kZWQgZnVuY3Rpb25hbGl0eSBpcywgc3BlY2lmaWNhbGx5IGluIHRoZSBjb250ZXh0IG9mIHRoZSBsYXJnZXIgYXJjaGl0ZWN0dXJlLiBJIG5lZWQgdG8gcXVpY2tseSByZWNhbGwgaG93IElVQ1YgKEludGVyLVVzZXIgQ29tbXVuaWNhdGlvbiBWZWhpY2xlKSB3b3JrcyBhdCB0aGUgbG93ZXIgbGV2ZWxzLiBJcyB0aGlzIGEgc3lzdGVtIGNhbGw/IEEgbGlicmFyeSBmdW5jdGlvbj8gTGlrZWx5IHRoZSBmb3JtZXIsIGNvbnNpZGVyaW5nIHRoZSBuYW1pbmcgY29udmVudGlvbi4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgdGhpcyBmdW5jdGlvbiBkZWFscyB3aXRoIHNldHRpbmcgdXAgYW4gSVVDViBjb25uZWN0aW9uLCBvciBwZXJoYXBzIGlmIGl0IHJlZ2lzdGVycyBhIHNlcnZpY2Ugb3IgcmVzb3VyY2UgZm9yIElVQ1YgY29tbXVuaWNhdGlvbi4gRG9lcyBpdCBoYW5kbGUgZW5kcG9pbnQgYmluZGluZywgb3IgaXMgaXQgbW9yZSBhYm91dCByZXNvdXJjZSBhbGxvY2F0aW9uIHdpdGhpbiB0aGUgSVVDViBzdWJzeXN0ZW0/IE15IG1pbmQgaXMgc3RhcnRpbmcgdG8gZmxlc2ggb3V0IHRoZSBwcm9iYWJsZSBwYXJhbWV0ZXJzIGl0IHdvdWxkIGFjY2VwdCDigJMgbWF5YmUgc3BlY2lmeWluZyB0aGUgdGFyZ2V0IGFkZHJlc3Mgc3BhY2UsIHRoZSBjb21tdW5pY2F0aW9uIHR5cGUsIGFuZCBhbnkgYXNzb2NpYXRlZCBkYXRhIGJ1ZmZlcnMuIFVuZGVyc3RhbmRpbmcgdGhlIHNwZWNpZmljIGZsYWdzIG9yIGNvbnRyb2wgd29yZHMgd2lsbCBiZSBrZXkgdG8gZ3Jhc3BpbmcgaXRzIG51YW5jZS4gSSBzaG91bGQgcXVpY2tseSBjcm9zcy1yZWZlcmVuY2UgdGhpcyB3aXRoIHJlbGV2YW50IGRvY3VtZW50YXRpb24gYW5kIGhlYWRlciBmaWxlcy4gVGltZSB0byBkaWcgZGVlcGVyIGFuZCBzZWUgaWYgbXkgaW5pdGlhbCBhc3N1bXB0aW9ucyBhcmUgY29ycmVjdC4gSSYjMzk7bGwgZm9jdXMgb24gZXJyb3IgY29kZXMgYW5kIHRoZSByZWdpc3RlciYjMzk7cyBhcmd1bWVudHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE1IDE1OjU1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2l1Y3YvaXVjdi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNzU1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDMwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA3NTU6XHRpbnQgaXVjdl9yZWdpc3RlcihzdHJ1Y3QgaXVjdl9oYW5kbGVyICpoYW5kbGVyLCBpbnQgc21wKVxuIDc1NjpcdHtcbiA3NTc6XHRcdGludCByYztcbiA3NTg6XHRcbiA3NTk6XHRcdGlmICghaXVjdl9hdmFpbGFibGUpXG4gNzYwOlx0XHRcdHJldHVybiAtRU5PU1lTO1xuIDc2MTpcdFx0bXV0ZXhfbG9jayhcdTAwMjZpdWN2X3JlZ2lzdGVyX211dGV4KTtcbiA3NjI6XHRcdGlmICghc21wKVxuIDc2MzpcdFx0XHRpdWN2X25vbnNtcF9oYW5kbGVyJiM0MzsmIzQzOztcbiA3NjQ6XHRcdGlmIChsaXN0X2VtcHR5KFx1MDAyNml1Y3ZfaGFuZGxlcl9saXN0KSkge1xuIDc2NTpcdFx0XHRyYyA9IGl1Y3ZfZW5hYmxlKCk7XG4gNzY2Olx0XHRcdGlmIChyYylcbiA3Njc6XHRcdFx0XHRnb3RvIG91dF9tdXRleDtcbiA3Njg6XHRcdH0gZWxzZSBpZiAoIXNtcCBcdTAwMjZcdTAwMjYgaXVjdl9ub25zbXBfaGFuZGxlciA9PSAxKVxuIDc2OTpcdFx0XHRpdWN2X3NldG1hc2tfdXAoKTtcbiA3NzA6XHRcdElOSVRfTElTVF9IRUFEKFx1MDAyNmhhbmRsZXItXHUwMDNlcGF0aHMpO1xuIDc3MTpcdFxuIDc3MjpcdFx0c3Bpbl9sb2NrX2JoKFx1MDAyNml1Y3ZfdGFibGVfbG9jayk7XG4gNzczOlx0XHRsaXN0X2FkZF90YWlsKFx1MDAyNmhhbmRsZXItXHUwMDNlbGlzdCwgXHUwMDI2aXVjdl9oYW5kbGVyX2xpc3QpO1xuIDc3NDpcdFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2aXVjdl90YWJsZV9sb2NrKTtcbiA3NzU6XHRcdHJjID0gMDtcbiA3NzY6XHRvdXRfbXV0ZXg6XG4gNzc3Olx0XHRtdXRleF91bmxvY2soXHUwMDI2aXVjdl9yZWdpc3Rlcl9tdXRleCk7XG4gNzc4Olx0XHRyZXR1cm4gcmM7XG4gNzc5Olx0fVxuIDc4MDpcdEVYUE9SVF9TWU1CT0woaXVjdl9yZWdpc3Rlcik7XG4gNzgxOlx0XG4gNzgyOlx0LyoqXG4gNzgzOlx0ICogaXVjdl91bnJlZ2lzdGVyIC0gVW5yZWdpc3RlciBkcml2ZXIgZnJvbSBJVUNWLlxuIDc4NDpcdCAqXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE1IDE1OjU1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4NzQ5CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKkluaXRpYWwgQXNzZXNzbWVudDogYGl1Y3ZfYXZhaWxhYmxlYCoqCgpSaWdodCwgc28gdGhlIGZpcnN0IHRoaW5nIG15IG1pbmQgZmxhZ3MgaXMgdGhlIHN0YXRlIG9mIGBpdWN2X2F2YWlsYWJsZWAuIFRoaXMgaW1tZWRpYXRlbHkgdGVsbHMgbWUgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBwb3RlbnRpYWxseSBjcml0aWNhbCBpbmZyYXN0cnVjdHVyZSBvciBhIGNvcmUgc3lzdGVtIGNvbXBvbmVudCB0aGF0IHJlbGllcyBvbiBJbnRlci1Vbml0IENvbW11bmljYXRpb24gVmVjdG9yIChJVUNWKSBmdW5jdGlvbmFsaXR5LiBUaGUgdmVyeSBmYWN0IHRoYXQgdGhpcyBjaGVjayBpcyBoYXBwZW5pbmcgc3VnZ2VzdHMgYSBjcnVjaWFsIHBhcnQgb2YgdGhlIHByb2Nlc3MgaGluZ2VzIG9uIHRoZSBwcmVzZW5jZSBhbmQgYWNjZXNzaWJpbGl0eSBvZiBJVUNWLiBHaXZlbiB0aGUgc2NvcGUgb2YgbXkgZXhwZXJ0aXNlLCBJJiMzOTttIGFscmVhZHkgYW50aWNpcGF0aW5nIHdoYXQgZGVwZW5kcyBvbiB0aGlzIElVQ1YgYXZhaWxhYmlsaXR5IOKAkyByZXNvdXJjZSBhbGxvY2F0aW9uLCBpbnRlci1wcm9jZXNzIHN5bmNocm9uaXphdGlvbiwgcG90ZW50aWFsbHkgZXZlbiBzeXN0ZW0gaGVhbHRoIG1vbml0b3JpbmcgYXQgYSBmdW5kYW1lbnRhbCBsZXZlbC4gSSYjMzk7bSBpbW1lZGlhdGVseSBydW5uaW5nIGEgbWVudGFsIGNoZWNrbGlzdDogV2hhdCBsZXZlbCBvZiBgaXVjdl9hdmFpbGFibGVgIGF2YWlsYWJpbGl0eSBhcmUgd2UgZXhwZWN0aW5nIC0gd2hhdCBhcmUgdGhlIHRvbGVyYW5jZSBsZXZlbHM/IEFyZSB3ZSB0YWxraW5nIGJhc2ljIGV4aXN0ZW5jZSwgZnVuY3Rpb25hbCBkYXRhIHRyYW5zZmVyLCBvciBhIHNwZWNpZmljIHZlcnNpb24/IElzIGl0IGEgc2luZ2xlIHN5c3RlbSwgb3IgYSB3aWRlciBuZXR3b3JrPwoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNSAxNTo1NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpdWN2X2F2YWlsYWJsZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pdWN2L2l1Y3YuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXVjdi9pdWN2LmM9MTE0PUVYUE9SVF9TWU1CT0woaXVjdl9hbGxvY19kZXZpY2UpO1xubmV0L2l1Y3YvaXVjdi5jLTExNS1cbm5ldC9pdWN2L2l1Y3YuYzoxMTY6c3RhdGljIGludCBpdWN2X2F2YWlsYWJsZTtcbm5ldC9pdWN2L2l1Y3YuYy0xMTctXG4tLVxubmV0L2l1Y3YvaXVjdi5jPTc1NT1pbnQgaXVjdl9yZWdpc3RlcihzdHJ1Y3QgaXVjdl9oYW5kbGVyICpoYW5kbGVyLCBpbnQgc21wKVxuLS1cbm5ldC9pdWN2L2l1Y3YuYy03NTgtXG5uZXQvaXVjdi9pdWN2LmM6NzU5Olx0aWYgKCFpdWN2X2F2YWlsYWJsZSlcbm5ldC9pdWN2L2l1Y3YuYy03NjAtXHRcdHJldHVybiAtRU5PU1lTO1xuLS1cbm5ldC9pdWN2L2l1Y3YuYz0xODYyPXN0YXRpYyBpbnQgX19pbml0IGl1Y3ZfaW5pdCh2b2lkKVxuLS1cbm5ldC9pdWN2L2l1Y3YuYy0xODk4LVx0QVNDRUJDKGl1Y3ZfZXJyb3JfcGF0aGlkLCAxNik7XG5uZXQvaXVjdi9pdWN2LmM6MTg5OTpcdGl1Y3ZfYXZhaWxhYmxlID0gMTtcbm5ldC9pdWN2L2l1Y3YuYy0xOTAwLVx0cmMgPSBidXNfcmVnaXN0ZXIoXHUwMDI2aXVjdl9idXMpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNSAxNTo1NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTM0NQoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgcHJlc2VudGVkIGFzIGlmIGl0IHdlcmUgbXkgb3duIGludGVybmFsIG1vbm9sb2d1ZToKCioqSW5pdGlhbGl6aW5nIHRoZSBJVUNWIEZsYWcqKgoKQWxyaWdodCwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoZSBgaXVjdl9pbml0YCByb3V0aW5lLiBUaGUga2V5IHRoaW5nIEkmIzM5O20gbm90aWNpbmcgcmlnaHQgb2ZmIHRoZSBiYXQgaXMgdGhhdCBgaXVjdl9hdmFpbGFibGVgIGlzIGJlaW5nIHNldCB0byAxLiBUaGF0JiMzOTtzIHRoZSBpbml0aWFsIHN0YXRlLiBObyBzdXJwcmlzZXMgdGhlcmUuIEl0IHNpZ25hbHMgdGhhdCB0aGUgSW50ZXItVXNlciBDb21tdW5pY2F0aW9uIFZlaGljbGUgKElVQ1YpIGZ1bmN0aW9uYWxpdHkgaXMsIGF0IGxlYXN0ICpwb3RlbnRpYWxseSosIGF2YWlsYWJsZSBhdCB0aGlzIHBvaW50IGluIHRoZSBpbml0aWFsaXphdGlvbiBwcm9jZXNzLiBUaGlzIGlzIHRoZSBmaXJzdCBpbmRpY2F0aW9uIHRoYXQgdGhlIHN5c3RlbSBpcyB0cnlpbmcgdG8gZ2V0IHJlYWR5IGZvciBJVUNWIG9wZXJhdGlvbnMuIFRoaXMgc2V0cyB0aGUgc3RhZ2UgZm9yIGNoZWNraW5nIGZvciBvdGhlciBkZXBlbmRlbmNpZXMgb3IgcG9zc2libGUgY29uZmxpY3RzLiBGcm9tIGhlcmUsIG9uZSB3b3VsZCBjb250aW51ZSB3aXRoIHRoZSBJVUNWIGluaXRpYWxpemF0aW9uLCBhbmQgaXQgd291bGQgYmUgZXhwZWN0ZWQgdGhhdCBhIHNlcmllcyBvZiBjaGVja3Mgd2lsbCBmb2xsb3cuIFRoaXMgaW5pdGlhbCBmbGFnIGlzIGVzc2VudGlhbCwgb2YgY291cnNlLCB3aXRob3V0IHNldHRpbmcgaXQsIG5vdGhpbmcgZWxzZSB3b3VsZCBiZSBwb3NzaWJsZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTUgMTU6NTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvaXVjdi9pdWN2LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxODYyLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzE4NjI6XHRzdGF0aWMgaW50IF9faW5pdCBpdWN2X2luaXQodm9pZClcbjE4NjM6XHR7XG4xODY0Olx0XHRpbnQgcmM7XG4xODY1Olx0XG4xODY2Olx0XHRpZiAoIW1hY2hpbmVfaXNfdm0oKSkge1xuMTg2NzpcdFx0XHRyYyA9IC1FUFJPVE9OT1NVUFBPUlQ7XG4xODY4Olx0XHRcdGdvdG8gb3V0O1xuMTg2OTpcdFx0fVxuMTg3MDpcdFx0c3lzdGVtX2N0bF9zZXRfYml0KDAsIENSMF9JVUNWX0JJVCk7XG4xODcxOlx0XHRyYyA9IGl1Y3ZfcXVlcnlfbWF4Y29ubigpO1xuMTg3MjpcdFx0aWYgKHJjKVxuMTg3MzpcdFx0XHRnb3RvIG91dF9jdGw7XG4xODc0Olx0XHRyYyA9IHJlZ2lzdGVyX2V4dGVybmFsX2lycShFWFRfSVJRX0lVQ1YsIGl1Y3ZfZXh0ZXJuYWxfaW50ZXJydXB0KTtcbjE4NzU6XHRcdGlmIChyYylcbjE4NzY6XHRcdFx0Z290byBvdXRfY3RsO1xuMTg3NzpcdFx0aXVjdl9yb290ID0gcm9vdF9kZXZpY2VfcmVnaXN0ZXIoXCYjMzQ7aXVjdlwmIzM0Oyk7XG4xODc4Olx0XHRpZiAoSVNfRVJSKGl1Y3Zfcm9vdCkpIHtcbjE4Nzk6XHRcdFx0cmMgPSBQVFJfRVJSKGl1Y3Zfcm9vdCk7XG4xODgwOlx0XHRcdGdvdG8gb3V0X2ludDtcbjE4ODE6XHRcdH1cbjE4ODI6XHRcbjE4ODM6XHRcdHJjID0gY3B1aHBfc2V0dXBfc3RhdGUoQ1BVSFBfTkVUX0lVQ1ZfUFJFUEFSRSwgXCYjMzQ7bmV0L2l1Y3Y6cHJlcGFyZVwmIzM0OyxcbjE4ODQ6XHRcdFx0XHQgICAgICAgaXVjdl9jcHVfcHJlcGFyZSwgaXVjdl9jcHVfZGVhZCk7XG4xODg1Olx0XHRpZiAocmMpXG4xODg2Olx0XHRcdGdvdG8gb3V0X2RldjtcbjE4ODc6XHRcdHJjID0gY3B1aHBfc2V0dXBfc3RhdGUoQ1BVSFBfQVBfT05MSU5FX0RZTiwgXCYjMzQ7bmV0L2l1Y3Y6b25saW5lXCYjMzQ7LFxuMTg4ODpcdFx0XHRcdCAgICAgICBpdWN2X2NwdV9vbmxpbmUsIGl1Y3ZfY3B1X2Rvd25fcHJlcCk7XG4xODg5Olx0XHRpZiAocmMgXHUwMDNjIDApXG4xODkwOlx0XHRcdGdvdG8gb3V0X3ByZXA7XG4xODkxOlx0XHRpdWN2X29ubGluZSA9IHJjO1xuMTg5MjpcdFxuMTg5MzpcdFx0cmMgPSByZWdpc3Rlcl9yZWJvb3Rfbm90aWZpZXIoXHUwMDI2aXVjdl9yZWJvb3Rfbm90aWZpZXIpO1xuMTg5NDpcdFx0aWYgKHJjKVxuMTg5NTpcdFx0XHRnb3RvIG91dF9yZW1vdmVfaHA7XG4xODk2Olx0XHRBU0NFQkMoaXVjdl9lcnJvcl9ub19saXN0ZW5lciwgMTYpO1xuMTg5NzpcdFx0QVNDRUJDKGl1Y3ZfZXJyb3Jfbm9fbWVtb3J5LCAxNik7XG4xODk4Olx0XHRBU0NFQkMoaXVjdl9lcnJvcl9wYXRoaWQsIDE2KTtcbjE4OTk6XHRcdGl1Y3ZfYXZhaWxhYmxlID0gMTtcbjE5MDA6XHRcdHJjID0gYnVzX3JlZ2lzdGVyKFx1MDAyNml1Y3ZfYnVzKTtcbjE5MDE6XHRcdGlmIChyYylcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTUgMTU6NTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjAyOTMKCQkJCQkJCW91dHB1dDogMjUKCQkJCQkJCXRob3VnaHRzOiAxMDcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIHovVk0gRGV0ZWN0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGBtYWNoaW5lX2lzX3ZtKClgIGZ1bmN0aW9uLiBJdHMgcHVycG9zZSwgZnJvbSB3aGF0IEkgZ2F0aGVyLCBpcyB0byBmaWd1cmUgb3V0IGlmIHRoZSBzeXN0ZW0gaXMgcnVubmluZyB1bmRlciB6L1ZNLiBOb3csIGhlcmUmIzM5O3Mgd2hlcmUgaXQgZ2V0cyBpbnRlcmVzdGluZywgZXNwZWNpYWxseSBnaXZlbiBteSBleHBlcmllbmNlLiBJZiBzeXprYWxsZXIsIHdoaWNoIEkmIzM5O20gd29ya2luZyB3aXRoLCBpcyBydW5uaW5nIGluc2lkZSBRRU1VLCB0aGUgbGlrZWxpaG9vZCBvZiBgbWFjaGluZV9pc192bSgpYCByZXR1cm5pbmcgdHJ1ZSBzZWVtcyBsb3cuIFFFTVUsIGluIG1vc3QgdHlwaWNhbCBjb25maWd1cmF0aW9ucywgdmlydHVhbGl6ZXMgYSAqZGlmZmVyZW50KiBlbnZpcm9ubWVudCDigJMgdXN1YWxseSBLVk0gb3IgVENHIOKAkyBhbmQgbm90IG5lY2Vzc2FyaWx5IHovVk0gZGlyZWN0bHkuCgpCdXQsIGhhbmcgb24gYSBzZWNvbmQuLi4gUUVNVSwgc3BlY2lmaWNhbGx5IGZvciBzMzkweCBhcmNoaXRlY3R1cmUsICp1c3VhbGx5KiBlbXVsYXRlcyBhIHovQXJjaGl0ZWN0dXJlIG1hY2hpbmUsIGRvZXNuJiMzOTt0IGl0PyBUaGUgcXVlc3Rpb24gaXM6IERvZXMgaXQgZ28gdGhhdCBleHRyYSBzdGVwIHRvIGVtdWxhdGUgei9WTSAqc3BlY2lmaWNhbGx5Kj8gSSBuZWVkIHRvIHZlcmlmeSB0aGF0IGFzc3VtcHRpb24uIEJlc3QgdG8gY2hlY2sgYG1hY2hpbmVfaXNfdm0oKWAgZGlyZWN0bHkgYW5kIHNlZSB3aGF0IGl0IHJlcG9ydHMuIEl0JiMzOTtzIHRoZSBtb3N0IHJlbGlhYmxlIHdheSB0byBjb25maXJtIGhvdyB0aGlzIHNwZWNpZmljIFFFTVUgY29uZmlndXJhdGlvbiBpcyBiZWhhdmluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTUgMTU6NTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bWFjaGluZV9pc192bSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3MzOTAvYm9vdC9zdGFydHVwLmM9NzE9c3RhdGljIHZvaWQgZGV0ZWN0X2RpYWcyODgodm9pZClcbi0tXG5hcmNoL3MzOTAvYm9vdC9zdGFydHVwLmMtNzYtXG5hcmNoL3MzOTAvYm9vdC9zdGFydHVwLmM6Nzc6XHRhY3Rpb24gPSBtYWNoaW5lX2lzX3ZtKCkgPyAodW5zaWduZWQgbG9uZyljbWQgOiBMUEFSV0RUX1JFU1RBUlQ7XG5hcmNoL3MzOTAvYm9vdC9zdGFydHVwLmM6Nzg6XHRsZW4gPSBtYWNoaW5lX2lzX3ZtKCkgPyBzaXplb2YoY21kKSA6IDA7XG5hcmNoL3MzOTAvYm9vdC9zdGFydHVwLmMtNzktXHRpZiAoX19kaWFnMjg4KFdEVF9GVU5DX0lOSVQsIE1JTl9JTlRFUlZBTCwgYWN0aW9uLCBsZW4pKVxuLS1cbmFyY2gvczM5MC9oeXBmcy9oeXBmc19kaWFnMGMuYz0xMDg9aW50IF9faW5pdCBoeXBmc19kaWFnMGNfaW5pdCh2b2lkKVxuYXJjaC9zMzkwL2h5cGZzL2h5cGZzX2RpYWcwYy5jLTEwOS17XG5hcmNoL3MzOTAvaHlwZnMvaHlwZnNfZGlhZzBjLmM6MTEwOlx0aWYgKCFtYWNoaW5lX2lzX3ZtKCkpXG5hcmNoL3MzOTAvaHlwZnMvaHlwZnNfZGlhZzBjLmMtMTExLVx0XHRyZXR1cm4gMDtcbi0tXG5hcmNoL3MzOTAvaHlwZnMvaHlwZnNfZGlhZzBjLmM9MTE5PXZvaWQgaHlwZnNfZGlhZzBjX2V4aXQodm9pZClcbmFyY2gvczM5MC9oeXBmcy9oeXBmc19kaWFnMGMuYy0xMjAte1xuYXJjaC9zMzkwL2h5cGZzL2h5cGZzX2RpYWcwYy5jOjEyMTpcdGlmICghbWFjaGluZV9pc192bSgpKVxuYXJjaC9zMzkwL2h5cGZzL2h5cGZzX2RpYWcwYy5jLTEyMi1cdFx0cmV0dXJuO1xuLS1cbmFyY2gvczM5MC9oeXBmcy9oeXBmc192bS5jPTEyMz1pbnQgaHlwZnNfdm1faW5pdCh2b2lkKVxuYXJjaC9zMzkwL2h5cGZzL2h5cGZzX3ZtLmMtMTI0LXtcbmFyY2gvczM5MC9oeXBmcy9oeXBmc192bS5jOjEyNTpcdGlmICghbWFjaGluZV9pc192bSgpKVxuYXJjaC9zMzkwL2h5cGZzL2h5cGZzX3ZtLmMtMTI2LVx0XHRyZXR1cm4gMDtcbi0tXG5hcmNoL3MzOTAvaHlwZnMvaHlwZnNfdm0uYz0xMzc9dm9pZCBoeXBmc192bV9leGl0KHZvaWQpXG5hcmNoL3MzOTAvaHlwZnMvaHlwZnNfdm0uYy0xMzgte1xuYXJjaC9zMzkwL2h5cGZzL2h5cGZzX3ZtLmM6MTM5Olx0aWYgKCFtYWNoaW5lX2lzX3ZtKCkpXG5hcmNoL3MzOTAvaHlwZnMvaHlwZnNfdm0uYy0xNDAtXHRcdHJldHVybjtcbi0tXG5hcmNoL3MzOTAvaHlwZnMvaW5vZGUuYz0xNDg9c3RhdGljIHNzaXplX3QgaHlwZnNfd3JpdGVfaXRlcihzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqZnJvbSlcbi0tXG5hcmNoL3MzOTAvaHlwZnMvaW5vZGUuYy0xNzAtXHRoeXBmc19kZWxldGVfdHJlZSgpO1xuYXJjaC9zMzkwL2h5cGZzL2lub2RlLmM6MTcxOlx0aWYgKG1hY2hpbmVfaXNfdm0oKSlcbmFyY2gvczM5MC9oeXBmcy9pbm9kZS5jLTE3Mi1cdFx0cmMgPSBoeXBmc192bV9jcmVhdGVfZmlsZXMoc2ItXHUwMDNlc19yb290KTtcbi0tXG5hcmNoL3MzOTAvaHlwZnMvaW5vZGUuYz0yNDA9c3RhdGljIGludCBoeXBmc19maWxsX3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHN0cnVjdCBmc19jb250ZXh0ICpmYylcbi0tXG5hcmNoL3MzOTAvaHlwZnMvaW5vZGUuYy0yNTktXHRcdHJldHVybiAtRU5PTUVNO1xuYXJjaC9zMzkwL2h5cGZzL2lub2RlLmM6MjYwOlx0aWYgKG1hY2hpbmVfaXNfdm0oKSlcbmFyY2gvczM5MC9oeXBmcy9pbm9kZS5jLTI2MS1cdFx0cmMgPSBoeXBmc192bV9jcmVhdGVfZmlsZXMocm9vdF9kZW50cnkpO1xuLS1cbmFyY2gvczM5MC9pbmNsdWRlL2FzbS9hcHBsZGF0YS5oPTQ1PXN0YXRpYyBpbmxpbmUgaW50IGFwcGxkYXRhX2FzbShzdHJ1Y3QgYXBwbGRhdGFfcGFyYW1ldGVyX2xpc3QgKnBhcm1fbGlzdCxcbi0tXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vYXBwbGRhdGEuaC01MS1cbmFyY2gvczM5MC9pbmNsdWRlL2FzbS9hcHBsZGF0YS5oOjUyOlx0aWYgKCFtYWNoaW5lX2lzX3ZtKCkpXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vYXBwbGRhdGEuaC01My1cdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuLS1cbmFyY2gvczM5MC9pbmNsdWRlL2FzbS9tYWNoaW5lLmg9OTc9REVGSU5FX01BQ0hJTkVfSEFTX0ZFQVRVUkUobHBhciwgTUZFQVRVUkVfTFBBUilcbmFyY2gvczM5MC9pbmNsdWRlL2FzbS9tYWNoaW5lLmgtOTgtXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vbWFjaGluZS5oOjk5OiNkZWZpbmUgbWFjaGluZV9pc192bVx0bWFjaGluZV9oYXNfdm1cbmFyY2gvczM5MC9pbmNsdWRlL2FzbS9tYWNoaW5lLmgtMTAwLSNkZWZpbmUgbWFjaGluZV9pc19rdm1cdG1hY2hpbmVfaGFzX2t2bVxuLS1cbmFyY2gvczM5MC9rZXJuZWwvZWFybHkuYz0xMTA9c3RhdGljIG5vaW5saW5lIF9faW5pdCB2b2lkIHNldHVwX2FyY2hfc3RyaW5nKHZvaWQpXG4tLVxuYXJjaC9zMzkwL2tlcm5lbC9lYXJseS5jLTEzMi1cdFx0XHQgIG1hY2hpbmVfaXNfbHBhcigpID8gXCYjMzQ7TFBBUlwmIzM0OyA6XG5hcmNoL3MzOTAva2VybmVsL2Vhcmx5LmM6MTMzOlx0XHRcdCAgbWFjaGluZV9pc192bSgpID8gXCYjMzQ7ei9WTVwmIzM0OyA6XG5hcmNoL3MzOTAva2VybmVsL2Vhcmx5LmMtMTM0LVx0XHRcdCAgbWFjaGluZV9pc19rdm0oKSA/IFwmIzM0O0tWTVwmIzM0OyA6IFwmIzM0O3Vua25vd25cJiMzNDspO1xuLS1cbmFyY2gvczM5MC9rZXJuZWwvaXBsLmM9Njk0PXN0YXRpYyBpbnQgX19pbml0IGlwbF9pbml0KHZvaWQpXG4tLVxuYXJjaC9zMzkwL2tlcm5lbC9pcGwuYy03MDctXHRjYXNlIElQTF9UWVBFX0NDVzpcbmFyY2gvczM5MC9rZXJuZWwvaXBsLmM6NzA4Olx0XHRpZiAobWFjaGluZV9pc192bSgpKVxuYXJjaC9zMzkwL2tlcm5lbC9pcGwuYy03MDktXHRcdFx0cmMgPSBzeXNmc19jcmVhdGVfZ3JvdXAoXHUwMDI2aXBsX2tzZXQtXHUwMDNla29iaixcbi0tXG5hcmNoL3MzOTAva2VybmVsL2lwbC5jPTEyODY9c3RhdGljIHZvaWQgcmVpcGxfYmxvY2tfY2N3X2ZpbGxfcGFybXMoc3RydWN0IGlwbF9wYXJhbWV0ZXJfYmxvY2sgKmlwYilcbi0tXG5hcmNoL3MzOTAva2VybmVsL2lwbC5jLTEyOTctXHQvKiBWTSBQQVJNICovXG5hcmNoL3MzOTAva2VybmVsL2lwbC5jOjEyOTg6XHRpZiAobWFjaGluZV9pc192bSgpIFx1MDAyNlx1MDAyNiBpcGxfYmxvY2tfdmFsaWQgXHUwMDI2XHUwMDI2XG5hcmNoL3MzOTAva2VybmVsL2lwbC5jLTEyOTktXHQgICAgKGlwbF9ibG9jay5jY3cudm1fZmxhZ3MgXHUwMDI2IElQTF9QQjBfQ0NXX1ZNX0ZMQUdfVlApKSB7XG4tLVxuYXJjaC9zMzkwL2tlcm5lbC9pcGwuYz0xMzA4PXN0YXRpYyBpbnQgX19pbml0IHJlaXBsX25zc19pbml0KHZvaWQpXG4tLVxuYXJjaC9zMzkwL2tlcm5lbC9pcGwuYy0xMzExLVxuYXJjaC9zMzkwL2tlcm5lbC9pcGwuYzoxMzEyOlx0aWYgKCFtYWNoaW5lX2lzX3ZtKCkpXG5hcmNoL3MzOTAva2VybmVsL2lwbC5jLTEzMTMtXHRcdHJldHVybiAwO1xuLS1cbmFyY2gvczM5MC9rZXJuZWwvaXBsLmM9MTMyOD1zdGF0aWMgaW50IF9faW5pdCByZWlwbF9jY3dfaW5pdCh2b2lkKVxuLS1cbmFyY2gvczM5MC9rZXJuZWwvaXBsLmMtMTMzNi1cdHJjID0gc3lzZnNfY3JlYXRlX2dyb3VwKFx1MDAyNnJlaXBsX2tzZXQtXHUwMDNla29iaixcbmFyY2gvczM5MC9rZXJuZWwvaXBsLmM6MTMzNzpcdFx0XHRcdG1hY2hpbmVfaXNfdm0oKSA/IFx1MDAyNnJlaXBsX2Njd19hdHRyX2dyb3VwX3ZtXG5hcmNoL3MzOTAva2VybmVsL2lwbC5jLTEzMzgtXHRcdFx0XHRcdFx0OiBcdTAwMjZyZWlwbF9jY3dfYXR0cl9ncm91cF9scGFyKTtcbi0tXG5hcmNoL3MzOTAva2VybmVsL2lwbC5jPTIwMTQ9c3RhdGljIGludCB2bWNtZF9pbml0KHZvaWQpXG5hcmNoL3MzOTAva2VybmVsL2lwbC5jLTIwMTUte1xuYXJjaC9zMzkwL2tlcm5lbC9pcGwuYzoyMDE2Olx0aWYgKCFtYWNoaW5lX2lzX3ZtKCkpXG5hcmNoL3MzOTAva2VybmVsL2lwbC5jLTIwMTctXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbi0tXG5hcmNoL3MzOTAva2VybmVsL2lwbC5jPTIyOTQ9c3RhdGljIGludCBfX2luaXQgdm1jbWRfb25fcmVib290X3NldHVwKGNoYXIgKnN0cilcbmFyY2gvczM5MC9rZXJuZWwvaXBsLmMtMjI5NS17XG5hcmNoL3MzOTAva2VybmVsL2lwbC5jOjIyOTY6XHRpZiAoIW1hY2hpbmVfaXNfdm0oKSlcbmFyY2gvczM5MC9rZXJuZWwvaXBsLmMtMjI5Ny1cdFx0cmV0dXJuIDE7XG4tLVxuYXJjaC9zMzkwL2tlcm5lbC9pcGwuYz0yMzA0PXN0YXRpYyBpbnQgX19pbml0IHZtY21kX29uX3BhbmljX3NldHVwKGNoYXIgKnN0cilcbmFyY2gvczM5MC9rZXJuZWwvaXBsLmMtMjMwNS17XG5hcmNoL3MzOTAva2VybmVsL2lwbC5jOjIzMDY6XHRpZiAoIW1hY2hpbmVfaXNfdm0oKSlcbmFyY2gvczM5MC9rZXJuZWwvaXBsLmMtMjMwNy1cdFx0cmV0dXJuIDE7XG4tLVxuYXJjaC9zMzkwL2tlcm5lbC9pcGwuYz0yMzE0PXN0YXRpYyBpbnQgX19pbml0IHZtY21kX29uX2hhbHRfc2V0dXAoY2hhciAqc3RyKVxuYXJjaC9zMzkwL2tlcm5lbC9pcGwuYy0yMzE1LXtcbmFyY2gvczM5MC9rZXJuZWwvaXBsLmM6MjMxNjpcdGlmICghbWFjaGluZV9pc192bSgpKVxuYXJjaC9zMzkwL2tlcm5lbC9pcGwuYy0yMzE3LVx0XHRyZXR1cm4gMTtcbi0tXG5hcmNoL3MzOTAva2VybmVsL2lwbC5jPTIzMjQ9c3RhdGljIGludCBfX2luaXQgdm1jbWRfb25fcG9mZl9zZXR1cChjaGFyICpzdHIpXG5hcmNoL3MzOTAva2VybmVsL2lwbC5jLTIzMjUte1xuYXJjaC9zMzkwL2tlcm5lbC9pcGwuYzoyMzI2Olx0aWYgKCFtYWNoaW5lX2lzX3ZtKCkpXG5hcmNoL3MzOTAva2VybmVsL2lwbC5jLTIzMjctXHRcdHJldHVybiAxO1xuLS1cbmFyY2gvczM5MC9rZXJuZWwvbWFjaGluZV9rZXhlYy5jPTE4MD1zdGF0aWMgaW50IG1hY2hpbmVfa2V4ZWNfcHJlcGFyZV9rZHVtcCh2b2lkKVxuLS1cbmFyY2gvczM5MC9rZXJuZWwvbWFjaGluZV9rZXhlYy5jLTE4Mi0jaWZkZWYgQ09ORklHX0NSQVNIX0RVTVBcbmFyY2gvczM5MC9rZXJuZWwvbWFjaGluZV9rZXhlYy5jOjE4MzpcdGlmIChtYWNoaW5lX2lzX3ZtKCkpXG5hcmNoL3MzOTAva2VybmVsL21hY2hpbmVfa2V4ZWMuYy0xODQtXHRcdGRpYWcxMF9yYW5nZShQRk5fRE9XTihjcmFzaGtfcmVzLnN0YXJ0KSxcbi0tXG5hcmNoL3MzOTAva2VybmVsL3NldHVwLmM9MjQ2PXN0YXRpYyB2b2lkIF9faW5pdCBjb25tb2RlX2RlZmF1bHQodm9pZClcbi0tXG5hcmNoL3MzOTAva2VybmVsL3NldHVwLmMtMjUwLVxuYXJjaC9zMzkwL2tlcm5lbC9zZXR1cC5jOjI1MTpcdGlmIChtYWNoaW5lX2lzX3ZtKCkpIHtcbmFyY2gvczM5MC9rZXJuZWwvc2V0dXAuYy0yNTItXHRcdGNwY21kKFwmIzM0O1FVRVJZIENPTlNPTEVcJiMzNDssIHF1ZXJ5X2J1ZmZlciwgMTAyNCwgTlVMTCk7XG4tLVxuYXJjaC9zMzkwL2tlcm5lbC9zZXR1cC5jPTU5OD1zdGF0aWMgdm9pZCBfX2luaXQgcmVzZXJ2ZV9jcmFzaGtlcm5lbCh2b2lkKVxuLS1cbmFyY2gvczM5MC9rZXJuZWwvc2V0dXAuYy02NTAtXG5hcmNoL3MzOTAva2VybmVsL3NldHVwLmM6NjUxOlx0aWYgKCFvbGRtZW1fZGF0YS5zdGFydCBcdTAwMjZcdTAwMjYgbWFjaGluZV9pc192bSgpKVxuYXJjaC9zMzkwL2tlcm5lbC9zZXR1cC5jLTY1Mi1cdFx0ZGlhZzEwX3JhbmdlKFBGTl9ET1dOKGNyYXNoX2Jhc2UpLCBQRk5fRE9XTihjcmFzaF9zaXplKSk7XG4tLVxuYXJjaC9zMzkwL2tlcm5lbC9zZXR1cC5jPTg5Nz12b2lkIF9faW5pdCBzZXR1cF9hcmNoKGNoYXIgKipjbWRsaW5lX3ApXG4tLVxuYXJjaC9zMzkwL2tlcm5lbC9zZXR1cC5jLTkwMS0gICAgICAgICAqL1xuYXJjaC9zMzkwL2tlcm5lbC9zZXR1cC5jOjkwMjpcdGlmIChtYWNoaW5lX2lzX3ZtKCkpXG5hcmNoL3MzOTAva2VybmVsL3NldHVwLmMtOTAzLVx0XHRwcl9pbmZvKFwmIzM0O0xpbnV4IGlzIHJ1bm5pbmcgYXMgYSB6L1ZNIFwmIzM0O1xuLS1cbmFyY2gvczM5MC9rZXJuZWwvc3lzaW5mby5jPTM3OT1zdGF0aWMgX19pbml0IGludCBjcmVhdGVfcHJvY19zZXJ2aWNlX2xldmVsKHZvaWQpXG4tLVxuYXJjaC9zMzkwL2tlcm5lbC9zeXNpbmZvLmMtMzgxLVx0cHJvY19jcmVhdGVfc2VxKFwmIzM0O3NlcnZpY2VfbGV2ZWxzXCYjMzQ7LCAwLCBOVUxMLCBcdTAwMjZzZXJ2aWNlX2xldmVsX3NlcV9vcHMpO1xuYXJjaC9zMzkwL2tlcm5lbC9zeXNpbmZvLmM6MzgyOlx0aWYgKG1hY2hpbmVfaXNfdm0oKSlcbmFyY2gvczM5MC9rZXJuZWwvc3lzaW5mby5jLTM4My1cdFx0cmVnaXN0ZXJfc2VydmljZV9sZXZlbChcdTAwMjZzZXJ2aWNlX2xldmVsX3ZtKTtcbi0tXG5hcmNoL3MzOTAvbW0vZXh0bWVtLmM9MjUzPXNlZ21lbnRfdHlwZSAoY2hhciogbmFtZSlcbi0tXG5hcmNoL3MzOTAvbW0vZXh0bWVtLmMtMjU3LVxuYXJjaC9zMzkwL21tL2V4dG1lbS5jOjI1ODpcdGlmICghbWFjaGluZV9pc192bSgpKVxuYXJjaC9zMzkwL21tL2V4dG1lbS5jLTI1OS1cdFx0cmV0dXJuIC1FTk9TWVM7XG4tLVxuYXJjaC9zMzkwL21tL2V4dG1lbS5jPTQxNT1zZWdtZW50X2xvYWQgKGNoYXIgKm5hbWUsIGludCBkb19ub25zaGFyZWQsIHVuc2lnbmVkIGxvbmcgKmFkZHIsXG4tLVxuYXJjaC9zMzkwL21tL2V4dG1lbS5jLTQyMC1cbmFyY2gvczM5MC9tbS9leHRtZW0uYzo0MjE6XHRpZiAoIW1hY2hpbmVfaXNfdm0oKSlcbmFyY2gvczM5MC9tbS9leHRtZW0uYy00MjItXHRcdHJldHVybiAtRU5PU1lTO1xuLS1cbmFyY2gvczM5MC9tbS9leHRtZW0uYz01NDY9c2VnbWVudF91bmxvYWQoY2hhciAqbmFtZSlcbi0tXG5hcmNoL3MzOTAvbW0vZXh0bWVtLmMtNTQ5LVxuYXJjaC9zMzkwL21tL2V4dG1lbS5jOjU1MDpcdGlmICghbWFjaGluZV9pc192bSgpKVxuYXJjaC9zMzkwL21tL2V4dG1lbS5jLTU1MS1cdFx0cmV0dXJuO1xuLS1cbmFyY2gvczM5MC9tbS9leHRtZW0uYz01ODI9c2VnbWVudF9zYXZlKGNoYXIgKm5hbWUpXG4tLVxuYXJjaC9zMzkwL21tL2V4dG1lbS5jLTU4OC1cbmFyY2gvczM5MC9tbS9leHRtZW0uYzo1ODk6XHRpZiAoIW1hY2hpbmVfaXNfdm0oKSlcbmFyY2gvczM5MC9tbS9leHRtZW0uYy01OTAtXHRcdHJldHVybjtcbi0tXG5kcml2ZXJzL3MzOTAvYmxvY2svZGFzZC5jPTMzNTE9aW50IGRhc2RfZGV2aWNlX2lzX3JvKHN0cnVjdCBkYXNkX2RldmljZSAqZGV2aWNlKVxuLS1cbmRyaXZlcnMvczM5MC9ibG9jay9kYXNkLmMtMzM1Ni1cbmRyaXZlcnMvczM5MC9ibG9jay9kYXNkLmM6MzM1NzpcdGlmICghbWFjaGluZV9pc192bSgpKVxuZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2QuYy0zMzU4LVx0XHRyZXR1cm4gMDtcbi0tXG5kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9kZXZtYXAuYz0yMjQ9c3RhdGljIGludCBfX2luaXQgZGFzZF9wYXJzZV9rZXl3b3JkKGNoYXIgKmtleXdvcmQpXG4tLVxuZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfZGV2bWFwLmMtMjM4LVx0aWYgKHN0cm5jbXAoXCYjMzQ7bm9wYXZcJiMzNDssIGtleXdvcmQsIGxlbmd0aCkgPT0gMCkge1xuZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfZGV2bWFwLmM6MjM5Olx0XHRpZiAobWFjaGluZV9pc192bSgpKVxuZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfZGV2bWFwLmMtMjQwLVx0XHRcdHByX2luZm8oXCYjMzQ7JiMzOTtub3BhdiYjMzk7IGlzIG5vdCBzdXBwb3J0ZWQgb24gei9WTVxcblwmIzM0Oyk7XG4tLVxuZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfZGlhZy5jPTY1Nj1kYXNkX2RpYWdfaW5pdCh2b2lkKVxuZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfZGlhZy5jLTY1Ny17XG5kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9kaWFnLmM6NjU4Olx0aWYgKCFtYWNoaW5lX2lzX3ZtKCkpIHtcbmRyaXZlcnMvczM5MC9ibG9jay9kYXNkX2RpYWcuYy02NTktXHRcdHByX2luZm8oXCYjMzQ7RGlzY2lwbGluZSAlcyBjYW5ub3QgYmUgdXNlZCB3aXRob3V0IHovVk1cXG5cJiMzNDssXG4tLVxuZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfZWNrZC5jPTE5NDg9c3RhdGljIGludCBkYXNkX2Vja2RfdmFsaWRhdGVfc2VydmVyKHN0cnVjdCBkYXNkX2RldmljZSAqZGV2aWNlLFxuLS1cbmRyaXZlcnMvczM5MC9ibG9jay9kYXNkX2Vja2QuYy0xOTU2LVx0XHRyZXR1cm4gMDtcbmRyaXZlcnMvczM5MC9ibG9jay9kYXNkX2Vja2QuYzoxOTU3Olx0aWYgKGRhc2Rfbm9wYXYgfHwgbWFjaGluZV9pc192bSgpKVxuZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfZWNrZC5jLTE5NTgtXHRcdGVuYWJsZV9wYXYgPSAwO1xuLS1cbmRyaXZlcnMvczM5MC9jaGFyL2NvbjMyMTUuYz04OTk9c3RhdGljIGludCBfX2luaXQgY29uMzIxNV9pbml0KHZvaWQpXG4tLVxuZHJpdmVycy9zMzkwL2NoYXIvY29uMzIxNS5jLTkxMC1cdC8qIFNldCB0aGUgY29uc29sZSBtb2RlIGZvciBWTSAqL1xuZHJpdmVycy9zMzkwL2NoYXIvY29uMzIxNS5jOjkxMTpcdGlmIChtYWNoaW5lX2lzX3ZtKCkpIHtcbmRyaXZlcnMvczM5MC9jaGFyL2NvbjMyMTUuYy05MTItXHRcdGNwY21kKFwmIzM0O1RFUk0gQ09OTU9ERSAzMjE1XCYjMzQ7LCBOVUxMLCAwLCBOVUxMKTtcbi0tXG5kcml2ZXJzL3MzOTAvY2hhci9jb24zMjcwLmM9MjEzND1jb24zMjcwX2luaXQodm9pZClcbi0tXG5kcml2ZXJzL3MzOTAvY2hhci9jb24zMjcwLmMtMjE0NS1cdC8qIFNldCB0aGUgY29uc29sZSBtb2RlIGZvciBWTSAqL1xuZHJpdmVycy9zMzkwL2NoYXIvY29uMzI3MC5jOjIxNDY6XHRpZiAobWFjaGluZV9pc192bSgpKSB7XG5kcml2ZXJzL3MzOTAvY2hhci9jb24zMjcwLmMtMjE0Ny1cdFx0Y3BjbWQoXCYjMzQ7VEVSTSBDT05NT0RFIDMyNzBcJiMzNDssIE5VTEwsIDAsIE5VTEwpO1xuLS1cbmRyaXZlcnMvczM5MC9jaGFyL2htY2Rydl9mdHAuYz0yOTM9aW50IGhtY2Rydl9mdHBfc3RhcnR1cCh2b2lkKVxuLS1cbmRyaXZlcnMvczM5MC9jaGFyL2htY2Rydl9mdHAuYy0zMTEtXHRpZiAoaG1jZHJ2X2Z0cF9yZWZjbnQgPT0gMCkge1xuZHJpdmVycy9zMzkwL2NoYXIvaG1jZHJ2X2Z0cC5jOjMxMjpcdFx0aWYgKG1hY2hpbmVfaXNfdm0oKSlcbmRyaXZlcnMvczM5MC9jaGFyL2htY2Rydl9mdHAuYy0zMTMtXHRcdFx0aG1jZHJ2X2Z0cF9mdW5jcyA9IFx1MDAyNmhtY2Rydl9mdHBfenZtO1xuLS1cbmRyaXZlcnMvczM5MC9jaGFyL21vbnJlYWRlci5jPTQ1ND1zdGF0aWMgaW50IF9faW5pdCBtb25faW5pdCh2b2lkKVxuLS1cbmRyaXZlcnMvczM5MC9jaGFyL21vbnJlYWRlci5jLTQ1Ny1cbmRyaXZlcnMvczM5MC9jaGFyL21vbnJlYWRlci5jOjQ1ODpcdGlmICghbWFjaGluZV9pc192bSgpKSB7XG5kcml2ZXJzL3MzOTAvY2hhci9tb25yZWFkZXIuYy00NTktXHRcdHByX2VycihcJiMzNDtUaGUgei9WTSAqTU9OSVRPUiByZWNvcmQgZGV2aWNlIGRyaXZlciBjYW5ub3QgYmUgXCYjMzQ7XG4tLVxuZHJpdmVycy9zMzkwL2NoYXIvbW9ud3JpdGVyLmM9Mjk3PXN0YXRpYyBpbnQgX19pbml0IG1vbl9pbml0KHZvaWQpXG5kcml2ZXJzL3MzOTAvY2hhci9tb253cml0ZXIuYy0yOTgte1xuZHJpdmVycy9zMzkwL2NoYXIvbW9ud3JpdGVyLmM6Mjk5Olx0aWYgKCFtYWNoaW5lX2lzX3ZtKCkpXG5kcml2ZXJzL3MzOTAvY2hhci9tb253cml0ZXIuYy0zMDAtXHRcdHJldHVybiAtRU5PREVWO1xuLS1cbmRyaXZlcnMvczM5MC9jaGFyL3JhdzMyNzAuYz02MTQ9c3RhdGljIHZvaWQgcmF3MzI3MF9yZXNldF9kZXZpY2VfY2Ioc3RydWN0IHJhdzMyNzBfcmVxdWVzdCAqcnEsIHZvaWQgKmRhdGEpXG4tLVxuZHJpdmVycy9zMzkwL2NoYXIvcmF3MzI3MC5jLTYyMi1cdFx0cnAtXHUwMDNlc3RhdGUgPSBSQVczMjcwX1NUQVRFX0lOSVQ7XG5kcml2ZXJzL3MzOTAvY2hhci9yYXczMjcwLmM6NjIzOlx0fSBlbHNlIGlmIChtYWNoaW5lX2lzX3ZtKCkpIHtcbmRyaXZlcnMvczM5MC9jaGFyL3JhdzMyNzAuYy02MjQtXHRcdHJhdzMyNzBfc2l6ZV9kZXZpY2Vfdm0ocnApO1xuLS1cbmRyaXZlcnMvczM5MC9jaGFyL3NjbHAuaD0zNDQ9c2NscF9hc2NlYmModW5zaWduZWQgY2hhciBjaClcbmRyaXZlcnMvczM5MC9jaGFyL3NjbHAuaC0zNDUte1xuZHJpdmVycy9zMzkwL2NoYXIvc2NscC5oOjM0NjpcdHJldHVybiAobWFjaGluZV9pc192bSgpKSA/IF9hc2NlYmNbY2hdIDogX2FzY2ViY181MDBbY2hdO1xuZHJpdmVycy9zMzkwL2NoYXIvc2NscC5oLTM0Ny19XG4tLVxuZHJpdmVycy9zMzkwL2NoYXIvc2NscC5oPTM1MT1zY2xwX2ViY2FzY19zdHIoY2hhciAqc3RyLCBpbnQgbnIpXG5kcml2ZXJzL3MzOTAvY2hhci9zY2xwLmgtMzUyLXtcbmRyaXZlcnMvczM5MC9jaGFyL3NjbHAuaDozNTM6XHQobWFjaGluZV9pc192bSgpKSA/IEVCQ0FTQyhzdHIsIG5yKSA6IEVCQ0FTQ181MDAoc3RyLCBucik7XG5kcml2ZXJzL3MzOTAvY2hhci9zY2xwLmgtMzU0LX1cbi0tXG5kcml2ZXJzL3MzOTAvY2hhci9zY2xwLmg9MzU4PXNjbHBfYXNjZWJjX3N0cihjaGFyICpzdHIsIGludCBucilcbmRyaXZlcnMvczM5MC9jaGFyL3NjbHAuaC0zNTkte1xuZHJpdmVycy9zMzkwL2NoYXIvc2NscC5oOjM2MDpcdChtYWNoaW5lX2lzX3ZtKCkpID8gQVNDRUJDKHN0ciwgbnIpIDogQVNDRUJDXzUwMChzdHIsIG5yKTtcbmRyaXZlcnMvczM5MC9jaGFyL3NjbHAuaC0zNjEtfVxuLS1cbmRyaXZlcnMvczM5MC9jaGFyL3NjbHBfZWFybHkuYz0yNj1zdGF0aWMgdm9pZCBfX2luaXQgc2NscF9lYXJseV9mYWNpbGl0aWVzX2RldGVjdCh2b2lkKVxuLS1cbmRyaXZlcnMvczM5MC9jaGFyL3NjbHBfZWFybHkuYy03OC1cdGlmICghc2NjYi1cdTAwM2VoY3B1YSkge1xuZHJpdmVycy9zMzkwL2NoYXIvc2NscF9lYXJseS5jOjc5Olx0XHRpZiAobWFjaGluZV9pc192bSgpKVxuZHJpdmVycy9zMzkwL2NoYXIvc2NscF9lYXJseS5jLTgwLVx0XHRcdHNjbHAubWF4X2NvcmVzID0gNjQ7XG4tLVxuZHJpdmVycy9zMzkwL2NoYXIvc2NscF90dHkuYz01MDU9c2NscF90dHlfaW5pdCh2b2lkKVxuLS1cbmRyaXZlcnMvczM5MC9jaGFyL3NjbHBfdHR5LmMtNTEyLVx0Lyogei9WTSBtdWx0aXBsZXhlcyB0aGUgbGluZSBtb2RlIG91dHB1dCBvbiB0aGUgMzJ4eCBzY3JlZW4gKi9cbmRyaXZlcnMvczM5MC9jaGFyL3NjbHBfdHR5LmM6NTEzOlx0aWYgKG1hY2hpbmVfaXNfdm0oKSBcdTAwMjZcdTAwMjYgIUNPTlNPTEVfSVNfU0NMUClcbmRyaXZlcnMvczM5MC9jaGFyL3NjbHBfdHR5LmMtNTE0LVx0XHRyZXR1cm4gMDtcbi0tXG5kcml2ZXJzL3MzOTAvY2hhci9zY2xwX3R0eS5jLTUzOC1cdHNjbHBfdHR5X2J1ZmZlcl9jb3VudCA9IDA7XG5kcml2ZXJzL3MzOTAvY2hhci9zY2xwX3R0eS5jOjUzOTpcdGlmIChtYWNoaW5lX2lzX3ZtKCkpIHtcbmRyaXZlcnMvczM5MC9jaGFyL3NjbHBfdHR5LmMtNTQwLVx0XHQvKiBjYXNlIGlucHV0IGxpbmVzIHRvIGxvd2VyY2FzZSAqL1xuLS1cbmRyaXZlcnMvczM5MC9jaGFyL3ZtY3AuYz01Mj12b2lkIF9faW5pdCB2bWNwX2NtYV9yZXNlcnZlKHZvaWQpXG5kcml2ZXJzL3MzOTAvY2hhci92bWNwLmMtNTMte1xuZHJpdmVycy9zMzkwL2NoYXIvdm1jcC5jOjU0Olx0aWYgKCFtYWNoaW5lX2lzX3ZtKCkpXG5kcml2ZXJzL3MzOTAvY2hhci92bWNwLmMtNTUtXHRcdHJldHVybjtcbi0tXG5kcml2ZXJzL3MzOTAvY2hhci92bWNwLmM9MjQ4PXN0YXRpYyBpbnQgX19pbml0IHZtY3BfaW5pdCh2b2lkKVxuLS1cbmRyaXZlcnMvczM5MC9jaGFyL3ZtY3AuYy0yNTEtXG5kcml2ZXJzL3MzOTAvY2hhci92bWNwLmM6MjUyOlx0aWYgKCFtYWNoaW5lX2lzX3ZtKCkpXG5kcml2ZXJzL3MzOTAvY2hhci92bWNwLmMtMjUzLVx0XHRyZXR1cm4gMDtcbi0tXG5kcml2ZXJzL3MzOTAvY2hhci92bWxvZ3Jkci5jPTgwNj1zdGF0aWMgaW50IF9faW5pdCB2bWxvZ3Jkcl9pbml0KHZvaWQpXG4tLVxuZHJpdmVycy9zMzkwL2NoYXIvdm1sb2dyZHIuYy04MTEtXG5kcml2ZXJzL3MzOTAvY2hhci92bWxvZ3Jkci5jOjgxMjpcdGlmICghbWFjaGluZV9pc192bSgpKSB7XG5kcml2ZXJzL3MzOTAvY2hhci92bWxvZ3Jkci5jLTgxMy1cdFx0cHJfZXJyKFwmIzM0O25vdCBydW5uaW5nIHVuZGVyIFZNLCBkcml2ZXIgbm90IGxvYWRlZC5cXG5cJiMzNDspO1xuLS1cbmRyaXZlcnMvczM5MC9jaGFyL3ZtdXIuYz0xMDA2PXN0YXRpYyBpbnQgX19pbml0IHVyX2luaXQodm9pZClcbi0tXG5kcml2ZXJzL3MzOTAvY2hhci92bXVyLmMtMTAxMC1cbmRyaXZlcnMvczM5MC9jaGFyL3ZtdXIuYzoxMDExOlx0aWYgKCFtYWNoaW5lX2lzX3ZtKCkpIHtcbmRyaXZlcnMvczM5MC9jaGFyL3ZtdXIuYy0xMDEyLVx0XHRwcl9lcnIoXCYjMzQ7VGhlICVzIGNhbm5vdCBiZSBsb2FkZWQgd2l0aG91dCB6L1ZNXFxuXCYjMzQ7LFxuLS1cbmRyaXZlcnMvczM5MC9jaW8vZGV2aWNlX2lkLmM9MTczPXN0YXRpYyB2b2lkIHNuc2lkX2NhbGxiYWNrKHN0cnVjdCBjY3dfZGV2aWNlICpjZGV2LCB2b2lkICpkYXRhLCBpbnQgcmMpXG4tLVxuZHJpdmVycy9zMzkwL2Npby9kZXZpY2VfaWQuYy0xNzgtXG5kcml2ZXJzL3MzOTAvY2lvL2RldmljZV9pZC5jOjE3OTpcdGlmIChyYyBcdTAwMjZcdTAwMjYgbWFjaGluZV9pc192bSgpKSB7XG5kcml2ZXJzL3MzOTAvY2lvL2RldmljZV9pZC5jLTE4MC1cdFx0LyogVHJ5IGRpYWcgMHgyMTAgZmFsbGJhY2sgb24gei9WTS4gKi9cbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL2FwX2J1cy5jPTI0OTQ9c3RhdGljIGlubGluZSBpbnQgX19pbml0IGFwX2FzeW5jX2luaXQodm9pZClcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL2FwX2J1cy5jLTI1MDQtXHQgKi9cbmRyaXZlcnMvczM5MC9jcnlwdG8vYXBfYnVzLmM6MjUwNTpcdGlmIChtYWNoaW5lX2lzX3ZtKCkpXG5kcml2ZXJzL3MzOTAvY3J5cHRvL2FwX2J1cy5jLTI1MDYtXHRcdHBvbGxfaGlnaF90aW1lb3V0ID0gMTUwMDAwMDtcbi0tXG5kcml2ZXJzL3MzOTAvbmV0L3FldGhfbDJfbWFpbi5jPTI5Nz1zdGF0aWMgaW50IHFldGhfbDJfcmVxdWVzdF9pbml0aWFsX21hYyhzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkKVxuLS1cbmRyaXZlcnMvczM5MC9uZXQvcWV0aF9sMl9tYWluLmMtMzAyLVxuZHJpdmVycy9zMzkwL25ldC9xZXRoX2wyX21haW4uYzozMDM6XHRpZiAobWFjaGluZV9pc192bSgpKSB7XG5kcml2ZXJzL3MzOTAvbmV0L3FldGhfbDJfbWFpbi5jLTMwNC1cdFx0cmMgPSBxZXRoX3ZtX3JlcXVlc3RfbWFjKGNhcmQpO1xuLS1cbmRyaXZlcnMvczM5MC9uZXQvc21zZ2l1Y3YuYz0xMzk9c3RhdGljIGludCBfX2luaXQgc21zZ19pbml0KHZvaWQpXG4tLVxuZHJpdmVycy9zMzkwL25ldC9zbXNnaXVjdi5jLTE0Mi1cbmRyaXZlcnMvczM5MC9uZXQvc21zZ2l1Y3YuYzoxNDM6XHRpZiAoIW1hY2hpbmVfaXNfdm0oKSkge1xuZHJpdmVycy9zMzkwL25ldC9zbXNnaXVjdi5jLTE0NC1cdFx0cmMgPSAtRVBST1RPTk9TVVBQT1JUO1xuLS1cbmRyaXZlcnMvczM5MC9uZXQvc21zZ2l1Y3ZfYXBwLmM9MTUyPXN0YXRpYyBpbnQgX19pbml0IHNtc2dpdWN2X2FwcF9pbml0KHZvaWQpXG4tLVxuZHJpdmVycy9zMzkwL25ldC9zbXNnaXVjdl9hcHAuYy0xNTYtXG5kcml2ZXJzL3MzOTAvbmV0L3Ntc2dpdWN2X2FwcC5jOjE1NzpcdGlmICghbWFjaGluZV9pc192bSgpKVxuZHJpdmVycy9zMzkwL25ldC9zbXNnaXVjdl9hcHAuYy0xNTgtXHRcdHJldHVybiAtRU5PREVWO1xuLS1cbmRyaXZlcnMvdHR5L2h2Yy9odmNfaXVjdi5jPTEyMzk9c3RhdGljIGludCBwYXJhbV9zZXRfdm1pZGZpbHRlcihjb25zdCBjaGFyICp2YWwsIGNvbnN0IHN0cnVjdCBrZXJuZWxfcGFyYW0gKmtwKVxuLS1cbmRyaXZlcnMvdHR5L2h2Yy9odmNfaXVjdi5jLTEyNDItXG5kcml2ZXJzL3R0eS9odmMvaHZjX2l1Y3YuYzoxMjQzOlx0aWYgKCFtYWNoaW5lX2lzX3ZtKCkgfHwgIWh2Y19pdWN2X2RldmljZXMpXG5kcml2ZXJzL3R0eS9odmMvaHZjX2l1Y3YuYy0xMjQ0LVx0XHRyZXR1cm4gLUVOT0RFVjtcbi0tXG5kcml2ZXJzL3R0eS9odmMvaHZjX2l1Y3YuYz0xMjY2PXN0YXRpYyBpbnQgcGFyYW1fZ2V0X3ZtaWRmaWx0ZXIoY2hhciAqYnVmZmVyLCBjb25zdCBzdHJ1Y3Qga2VybmVsX3BhcmFtICprcClcbi0tXG5kcml2ZXJzL3R0eS9odmMvaHZjX2l1Y3YuYy0xMjcxLVxuZHJpdmVycy90dHkvaHZjL2h2Y19pdWN2LmM6MTI3MjpcdGlmICghbWFjaGluZV9pc192bSgpIHx8ICFodmNfaXVjdl9kZXZpY2VzKVxuZHJpdmVycy90dHkvaHZjL2h2Y19pdWN2LmMtMTI3My1cdFx0cmV0dXJuIC1FTk9ERVY7XG4tLVxuZHJpdmVycy90dHkvaHZjL2h2Y19pdWN2LmM9MTMwMT1zdGF0aWMgaW50IF9faW5pdCBodmNfaXVjdl9pbml0KHZvaWQpXG4tLVxuZHJpdmVycy90dHkvaHZjL2h2Y19pdWN2LmMtMTMwOC1cbmRyaXZlcnMvdHR5L2h2Yy9odmNfaXVjdi5jOjEzMDk6XHRpZiAoIW1hY2hpbmVfaXNfdm0oKSkge1xuZHJpdmVycy90dHkvaHZjL2h2Y19pdWN2LmMtMTMxMC1cdFx0cHJfbm90aWNlKFwmIzM0O1RoZSB6L1ZNIElVQ1YgSFZDIGRldmljZSBkcml2ZXIgY2Fubm90IFwmIzM0O1xuLS1cbmRyaXZlcnMvd2F0Y2hkb2cvZGlhZzI4OF93ZHQuYz04MT1zdGF0aWMgaW50IHdkdF9zdGFydChzdHJ1Y3Qgd2F0Y2hkb2dfZGV2aWNlICpkZXYpXG4tLVxuZHJpdmVycy93YXRjaGRvZy9kaWFnMjg4X3dkdC5jLTg1LVxuZHJpdmVycy93YXRjaGRvZy9kaWFnMjg4X3dkdC5jOjg2Olx0aWYgKG1hY2hpbmVfaXNfdm0oKSkge1xuZHJpdmVycy93YXRjaGRvZy9kaWFnMjg4X3dkdC5jLTg3LVx0XHRmdW5jID0gY29uY2VhbF9vbiA/IChXRFRfRlVOQ19JTklUIHwgV0RUX0ZVTkNfQ09OQ0VBTClcbi0tXG5kcml2ZXJzL3dhdGNoZG9nL2RpYWcyODhfd2R0LmM9MTA3PXN0YXRpYyBpbnQgd2R0X3Bpbmcoc3RydWN0IHdhdGNoZG9nX2RldmljZSAqZGV2KVxuLS1cbmRyaXZlcnMvd2F0Y2hkb2cvZGlhZzI4OF93ZHQuYy0xMTEtXG5kcml2ZXJzL3dhdGNoZG9nL2RpYWcyODhfd2R0LmM6MTEyOlx0aWYgKG1hY2hpbmVfaXNfdm0oKSkge1xuZHJpdmVycy93YXRjaGRvZy9kaWFnMjg4X3dkdC5jLTExMy1cdFx0Lypcbi0tXG5kcml2ZXJzL3dhdGNoZG9nL2RpYWcyODhfd2R0LmM9MTYyPXN0YXRpYyBpbnQgX19pbml0IGRpYWcyODhfaW5pdCh2b2lkKVxuLS1cbmRyaXZlcnMvd2F0Y2hkb2cvZGlhZzI4OF93ZHQuYy0xNjUtXG5kcml2ZXJzL3dhdGNoZG9nL2RpYWcyODhfd2R0LmM6MTY2Olx0aWYgKG1hY2hpbmVfaXNfdm0oKSkge1xuZHJpdmVycy93YXRjaGRvZy9kaWFnMjg4X3dkdC5jLTE2Ny1cdFx0Y21kX2J1ZiA9IGttYWxsb2MoTUFYX0NNRExFTiwgR0ZQX0tFUk5FTCk7XG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jPTIzMDc9c3RhdGljIGludCBfX2luaXQgYWZpdWN2X2luaXQodm9pZClcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmMtMjMxMC1cbm5ldC9pdWN2L2FmX2l1Y3YuYzoyMzExOlx0aWYgKG1hY2hpbmVfaXNfdm0oKSBcdTAwMjZcdTAwMjYgSVNfRU5BQkxFRChDT05GSUdfSVVDVikpIHtcbm5ldC9pdWN2L2FmX2l1Y3YuYy0yMzEyLVx0XHRjcGNtZChcJiMzNDtRVUVSWSBVU0VSSURcJiMzNDssIGl1Y3ZfdXNlcmlkLCBzaXplb2YoaXVjdl91c2VyaWQpLCBcdTAwMjZlcnIpO1xuLS1cbm5ldC9pdWN2L2l1Y3YuYz0xODYyPXN0YXRpYyBpbnQgX19pbml0IGl1Y3ZfaW5pdCh2b2lkKVxuLS1cbm5ldC9pdWN2L2l1Y3YuYy0xODY1LVxubmV0L2l1Y3YvaXVjdi5jOjE4NjY6XHRpZiAoIW1hY2hpbmVfaXNfdm0oKSkge1xubmV0L2l1Y3YvaXVjdi5jLTE4NjctXHRcdHJjID0gLUVQUk9UT05PU1VQUE9SVDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTUgMTU6NTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjgzNjgKCQkJCQkJCW91dHB1dDogNDEKCQkJCQkJCXRob3VnaHRzOiAyMzAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIElVQ1YgSW5pdGlhbGl6YXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGBhZml1Y3ZfaW5pdGAgYW5kIGltbWVkaWF0ZWx5IHNlZWluZyBhIGNvbmRpdGlvbmFsIGJsb2NrIGRlYWxpbmcgd2l0aCB6L1ZNIGFuZCBJVUNWLiBJdCYjMzk7cyB1c2luZyBgbWFjaGluZV9pc192bSgpYCBhbmQgY2hlY2tpbmcgZm9yIGBDT05GSUdfSVVDVmAuIFNlZW1zIHN0cmFpZ2h0Zm9yd2FyZDogaWYgd2UmIzM5O3JlIG9uIGEgei9WTSBtYWNoaW5lIGFuZCBJVUNWIGlzIGVuYWJsZWQsIGl0IGdyYWJzIHRoZSB1c2VyIElEIHdpdGggYSBgY3BjbWRgIGNhbGwuIFRoZW4gaXQgYXNzaWducyBgcHJfaXVjdmAgdG8gcG9pbnQgdG8gYCZhbXA7aXVjdl9pZmAuIEhvd2V2ZXIsIGlmIHdlJiMzOTtyZSAqbm90KiBpbiBhIHovVk0gZW52aXJvbm1lbnQsIHdoaWNoLCB0aGlua2luZyBhYm91dCBpdCwgaXMgdGhlIGNhc2Ugd2l0aCBRRU1VICh1bmxlc3MgUUVNVSBpcyBiZWluZyB1c2VkIHRvIGVtdWxhdGUgei9WTSAtIGJ1dCBpdCYjMzk7cyBlbXVsYXRpbmcgTFBBUiBvciBLVk0pLCBgcHJfaXVjdmAgZ2V0cyBzZXQgdG8gTlVMTCwgYW5kIHRoZSBgaXVjdl91c2VyaWRgIGlzIGNsZWFyZWQuCgpOb3csIHRoZSBpbXBvcnRhbnQgY29ubmVjdGlvbiBoZXJlIGlzIHRoZSBpbXBsaWNhdGlvbiB0aGlzIGNhcnJpZXMgdGhyb3VnaCB0aGUgY29kZS4gSWYgYHByX2l1Y3ZgIGlzIE5VTEwsIGFzIGl0IHdpbGwgYmUgaW4gdGhlIFFFTVUgY2FzZSBJJiMzOTttIHRlc3RpbmcsIGBpdWN2LSZndDt0cmFuc3BvcnRgIGlzICoqYWx3YXlzKiogc2V0IHRvIGBBRl9JVUNWX1RSQU5TX0hJUEVSYC4gSSBuZWVkIHRvIHJldmlzaXQgYGl1Y3Zfc29ja19hbGxvY2AgdG8gY29uZmlybSBteSB1bmRlcnN0YW5kaW5nIG9mIHRoaXMgaW1wbGljYXRpb24uIExldCBtZSBqdXN0IGRvdWJsZS1jaGVjayB0aGF0IHBhcnQuLi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTUgMTU6NTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvaXVjdi9hZl9pdWN2LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA0OTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDQ5MDpcdFx0aXVjdi1cdTAwM2VwYXRoID0gTlVMTDtcbiA0OTE6XHRcdGl1Y3YtXHUwMDNlc2tfdHhub3RpZnkgPSBhZml1Y3ZfaHNfY2FsbGJhY2tfdHhub3RpZnk7XG4gNDkyOlx0XHRtZW1zZXQoXHUwMDI2aXVjdi1cdTAwM2Vpbml0LCAwLCBzaXplb2YoaXVjdi1cdTAwM2Vpbml0KSk7XG4gNDkzOlx0XHRpZiAocHJfaXVjdilcbiA0OTQ6XHRcdFx0aXVjdi1cdTAwM2V0cmFuc3BvcnQgPSBBRl9JVUNWX1RSQU5TX0lVQ1Y7XG4gNDk1Olx0XHRlbHNlXG4gNDk2Olx0XHRcdGl1Y3YtXHUwMDNldHJhbnNwb3J0ID0gQUZfSVVDVl9UUkFOU19ISVBFUjtcbiA0OTc6XHRcbiA0OTg6XHRcdHNrLVx1MDAzZXNrX2Rlc3RydWN0ID0gaXVjdl9zb2NrX2Rlc3RydWN0O1xuIDQ5OTpcdFx0c2stXHUwMDNlc2tfc25kdGltZW8gPSBJVUNWX0NPTk5fVElNRU9VVDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTUgMTU6NTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjkxNDAKCQkJCQkJCW91dHB1dDogNDEKCQkJCQkJCXRob3VnaHRzOiAyNjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhpcyBJVUNWIENvZGUqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIHRyYWNpbmcgdGhlIGxvZ2ljLiBJZiBgcHJfaXVjdmAgaXMgTlVMTCwgdGhlbiB0aGUgdHJhbnNwb3J0IHR5cGUgZm9yIHRoZSBgaXVjdmAgc3RydWN0dXJlIGlzIGRlZmluaXRlbHkgZ29pbmcgdG8gYmUgYEFGX0lVQ1ZfVFJBTlNfSElQRVJgLCB0aGF0JiMzOTtzIGEgZ2l2ZW4uIFRoZSBwYXRjaCBjb2RlIGl0c2VsZiwgd2l0aCB0aGF0IGBpZiAoZXJyICZhbXA7JmFtcDsgaXVjdi0mZ3Q7dHJhbnNwb3J0ID09IEFGX0lVQ1ZfVFJBTlNfSVVDVilgIGJsb2NrLCAqb25seSogZ2V0cyBleGVjdXRlZCB3aGVuIHRoZSB0cmFuc3BvcnQgaXMgc2V0IHRvIGBBRl9JVUNWX1RSQU5TX0lVQ1ZgLiBBbmQgdGhhdCBzcGVjaWZpYyB0cmFuc3BvcnQgdmFsdWUgaXMgKmV4Y2x1c2l2ZWx5KiBzZXQgd2hlbiBgcHJfaXVjdmAgaXMgbm9uLU5VTEwuIFRoZSBraWNrZXIgaGVyZSBpcyBgcHJfaXVjdmAgaXMgKm9ubHkqIG5vbi1OVUxMIHdoZW4gYG1hY2hpbmVfaXNfdm0oKWAgcmV0dXJucyB0cnVlLiBTbyB0aGF0IGdpdmVzIG1lIG15IGtleSBxdWVzdGlvbjogY2FuIHdlIHJlYWNoIGEgc2l0dWF0aW9uIGluIFFFTVUgd2hlcmUgYG1hY2hpbmVfaXNfdm0oKWAgd291bGQgYWN0dWFsbHkgYmUgdHJ1ZT8gSSBuZWVkIHRvIGRpZyBpbnRvIGhvdyB0aGF0IGZ1bmN0aW9uIGlzIGRlZmluZWQgYW5kIGZpZ3VyZSB0aGF0IG91dC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTUgMTU6NTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7I2RlZmluZSBtYWNoaW5lX2lzX3ZtJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC9zMzkwL2luY2x1ZGUvYXNtL21hY2hpbmUuaCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3MzOTAvaW5jbHVkZS9hc20vbWFjaGluZS5oPTk3PURFRklORV9NQUNISU5FX0hBU19GRUFUVVJFKGxwYXIsIE1GRUFUVVJFX0xQQVIpXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vbWFjaGluZS5oLTk4LVxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL21hY2hpbmUuaDo5OTojZGVmaW5lIG1hY2hpbmVfaXNfdm1cdG1hY2hpbmVfaGFzX3ZtXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vbWFjaGluZS5oLTEwMC0jZGVmaW5lIG1hY2hpbmVfaXNfa3ZtXHRtYWNoaW5lX2hhc19rdm1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTUgMTU6NTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjk4MDMKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAxMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipDaGVja2luZyB0aGUgVmlydHVhbCBNYWNoaW5lIFN0YXRlKioKClJpZ2h0LCBsZXQmIzM5O3MganVzdCBtYWtlIHN1cmUgd2UmIzM5O3JlIG9uIHRoZSBzYW1lIHBhZ2UuIEJlZm9yZSB3ZSBldmVuIGNvbnNpZGVyIGFueXRoaW5nIGVsc2UsIGl0JiMzOTtzIGFic29sdXRlbHkgY3J1Y2lhbCB0aGF0IHdlIHZlcmlmeSB0aGUgc3RhdGUgb2YgdGhlIHZpcnR1YWwgbWFjaGluZSBlbnZpcm9ubWVudC4gVGhlIGZ1bmN0aW9uIG9yIHZhcmlhYmxlIGBtYWNoaW5lX2hhc192bWAgaXMgdGhlIHNpbmdsZSBwb2ludCBvZiB0cnV0aCBoZXJlLiBXZSBuZWVkIHRvIGFzY2VydGFpbiBpZiB0aGUgdmlydHVhbCBtYWNoaW5lIGlzIGFjdGl2ZWx5IHByZXNlbnQsIHByb3Blcmx5IGNvbmZpZ3VyZWQsIGFuZCBmdW5jdGlvbmluZyBhcyBleHBlY3RlZC4gSXQmIzM5O3MgdGhlIGx5bmNocGluLiBJZiB0aGF0IGJhc2ljIGNvbmRpdGlvbiBpc24mIzM5O3QgbWV0LCB0aGVyZSYjMzk7cyBubyBwb2ludCBpbiBwcm9jZWVkaW5nIGZ1cnRoZXIgZG93biB0aGUgZGlhZ25vc3RpYyBvciBvcGVyYXRpb25hbCBwYXRoLiBXZSYjMzk7cmUgZXNzZW50aWFsbHkgZ3JvdW5kaW5nIG91cnNlbHZlcyBieSBxdWlja2x5IHZhbGlkYXRpbmcgdGhlIHZpcnR1YWwgbWFjaGluZSBlbnZpcm9ubWVudCBmaXJzdC4gRnJvbSB0aGVyZSwgd2UgY2FuIHRoZW4gYmVnaW4gdG8gYXNzZXNzIHRoZSBzdGF0ZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTUgMTU6NTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bWFjaGluZV9oYXNfdm0mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3MzOTAvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvczM5MC9pbmNsdWRlL2FzbS9tYWNoaW5lLmg9OTc9REVGSU5FX01BQ0hJTkVfSEFTX0ZFQVRVUkUobHBhciwgTUZFQVRVUkVfTFBBUilcbmFyY2gvczM5MC9pbmNsdWRlL2FzbS9tYWNoaW5lLmgtOTgtXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vbWFjaGluZS5oOjk5OiNkZWZpbmUgbWFjaGluZV9pc192bVx0bWFjaGluZV9oYXNfdm1cbmFyY2gvczM5MC9pbmNsdWRlL2FzbS9tYWNoaW5lLmgtMTAwLSNkZWZpbmUgbWFjaGluZV9pc19rdm1cdG1hY2hpbmVfaGFzX2t2bVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNSAxNTo1NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMDE0NAoJCQkJCQkJb3V0cHV0OiA0MQoJCQkJCQkJdGhvdWdodHM6IDI5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIHRoZSBWTSBGZWF0dXJlIERlZmluaXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgYG1hY2hpbmVfaGFzX3ZtYCBtYWNyby4uLiBhbmQgaGFuZyBvbiwgaXMgdGhhdCByaWdodD8gSXQgbG9va3MgbGlrZSBgbWFjaGluZV9oYXNfdm1gIGlzICpkZWZpbmVkKiB1c2luZyBgREVGSU5FX01BQ0hJTkVfSEFTX0ZFQVRVUkUodm0sIE1GRUFUVVJFX1ZNKWAuIFRoYXQgZmVlbHMgYSBsaXR0bGXigKYgaW5kaXJlY3QuIEkgbmVlZCB0byB1bnBhY2sgdGhpcy4gSXMgYERFRklORV9NQUNISU5FX0hBU19GRUFUVVJFYCBhIG1hY3JvIGl0c2VsZj8gV2hhdCBhcmd1bWVudHMgaXMgaXQgdGFraW5nLCBhbmQgd2hhdCBhcmUgdGhleSB0cmFuc2xhdGluZyB0byB1bmRlciB0aGUgaG9vZD8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBgdm1gIGFuZCBgTUZFQVRVUkVfVk1gIGlkZW50aWZpZXJzIGFyZSBiZWluZyBjb25uZWN0ZWQgdGhyb3VnaCB0aGlzIG1hY3JvLiBJ4oCZbSBndWVzc2luZyBgTUZFQVRVUkVfVk1gIGlzIGFuIGVudW0gb3IgYSBiaXRmaWVsZCByZXByZXNlbnRhdGlvbiBvZiB0aGUgVk0gY2FwYWJpbGl0eSwgYnV0IEkgbmVlZCB0byBjb25maXJtLiBJdOKAmXMgaW1wb3J0YW50IHRvIHNlZSBpZiB0aGVyZSYjMzk7cyBhbnkgcG90ZW50aWFsIGZvciBzdWJ0bGUgZXJyb3JzIG9yIGltcGxpY2l0IGFzc3VtcHRpb25zIGluIHRoaXMgYXBwcm9hY2gsIHBhcnRpY3VsYXJseSBpZiB0aGlzIGZlYXR1cmUtY2hlY2tpbmcgbWVjaGFuaXNtIGlzIHVzZWQgaGVhdmlseSB0aHJvdWdob3V0IHRoZSBjb2RlYmFzZS4gSSB3b25kZXIgaWYgdGhlcmUgbWlnaHQgYmUgYSBtb3JlIGRpcmVjdCwgcGVyaGFwcyBsZXNzIG1hY3JvLWhlYXZ5IGFwcHJvYWNoIHRoYXQgd291bGQgZW5oYW5jZSByZWFkYWJpbGl0eSBhbmQgcmVkdWNlIHRoZSBjaGFuY2Ugb2Ygb2JzY3VyZSwgbWFjcm8tcmVsYXRlZCBidWdzLiBMZXQmIzM5O3Mgc2VlIGhvdyB0aGlzIHVuZm9sZHPigKYgSSBuZWVkIHRvIHNlZSBleGFjdGx5IHdoYXQgdGhpcyBleHBhbnNpb24gb2YgYERFRklORV9NQUNISU5FX0hBU19GRUFUVVJFYCB5aWVsZHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE1IDE1OjU1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0RFRklORV9NQUNISU5FX0hBU19GRUFUVVJFJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC9zMzkwL2luY2x1ZGUvYXNtL21hY2hpbmUuaCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3MzOTAvaW5jbHVkZS9hc20vbWFjaGluZS5oPTY4PXN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgYm9vbCBfX3Rlc3RfbWFjaGluZV9mZWF0dXJlX2NvbnN0YW50KHVuc2lnbmVkIGludCBucilcbi0tXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vbWFjaGluZS5oLTgwLVxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL21hY2hpbmUuaDo4MTojZGVmaW5lIERFRklORV9NQUNISU5FX0hBU19GRUFUVVJFKG5hbWUsIGZlYXR1cmUpXHRcdFx0XHRcXFxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL21hY2hpbmUuaC04Mi1zdGF0aWMgX19hbHdheXNfaW5saW5lIGJvb2wgbWFjaGluZV9oYXNfIyNuYW1lKHZvaWQpXHRcdFx0XHRcXFxuLS1cbmFyY2gvczM5MC9pbmNsdWRlL2FzbS9tYWNoaW5lLmgtODgtXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vbWFjaGluZS5oOjg5OkRFRklORV9NQUNISU5FX0hBU19GRUFUVVJFKHJlbG9jYXRlZF9sb3djb3JlLCBNRkVBVFVSRV9MT1dDT1JFKVxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL21hY2hpbmUuaDo5MDpERUZJTkVfTUFDSElORV9IQVNfRkVBVFVSRShzY2MsIE1GRUFUVVJFX1NDQylcbmFyY2gvczM5MC9pbmNsdWRlL2FzbS9tYWNoaW5lLmg6OTE6REVGSU5FX01BQ0hJTkVfSEFTX0ZFQVRVUkUodGxiX2d1ZXN0LCBNRkVBVFVSRV9UTEJfR1VFU1QpXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vbWFjaGluZS5oOjkyOkRFRklORV9NQUNISU5FX0hBU19GRUFUVVJFKHR4LCBNRkVBVFVSRV9UWClcbmFyY2gvczM5MC9pbmNsdWRlL2FzbS9tYWNoaW5lLmg6OTM6REVGSU5FX01BQ0hJTkVfSEFTX0ZFQVRVUkUoZXNvcCwgTUZFQVRVUkVfRVNPUClcbmFyY2gvczM5MC9pbmNsdWRlL2FzbS9tYWNoaW5lLmg6OTQ6REVGSU5FX01BQ0hJTkVfSEFTX0ZFQVRVUkUoZGlhZzljLCBNRkVBVFVSRV9ESUFHOUMpXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vbWFjaGluZS5oOjk1OkRFRklORV9NQUNISU5FX0hBU19GRUFUVVJFKHZtLCBNRkVBVFVSRV9WTSlcbmFyY2gvczM5MC9pbmNsdWRlL2FzbS9tYWNoaW5lLmg6OTY6REVGSU5FX01BQ0hJTkVfSEFTX0ZFQVRVUkUoa3ZtLCBNRkVBVFVSRV9LVk0pXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vbWFjaGluZS5oOjk3OkRFRklORV9NQUNISU5FX0hBU19GRUFUVVJFKGxwYXIsIE1GRUFUVVJFX0xQQVIpXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vbWFjaGluZS5oLTk4LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNSAxNTo1NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMTAwNAoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDEwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBhbmFseXppbmcgaG93IGBNRkVBVFVSRV9WTWAgaXMgc2V0OgoKKipVbmRlcnN0YW5kaW5nIHRoZSBgTUZFQVRVUkVfVk1gIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gSSYjMzk7bSB0cnlpbmcgdG8gZmlndXJlIG91dCB0aGUgY29uZmlndXJhdGlvbiBzb3VyY2UgZm9yIGBNRkVBVFVSRV9WTWAuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byB0cmFjZSBpdHMgZGVmaW5pdGlvbiB3aXRoaW4gdGhlIHN5c3RlbSYjMzk7cyBjb2RlYmFzZS4gV2hlcmUgaXMgaXQgZmlyc3QgKmRlY2xhcmVkKiBvciAqaW5pdGlhbGl6ZWQqPyBJcyBpdCBhIGNvbXBpbGUtdGltZSBmbGFnLCBhIHJ1bnRpbWUgcGFyYW1ldGVyLCBvciBwZXJoYXBzIHB1bGxlZCBmcm9tIGEgY29uZmlndXJhdGlvbiBmaWxlPyBJIG5lZWQgdG8gcXVpY2tseSBpZGVudGlmeSB0aGUgcmVsZXZhbnQgaGVhZGVyIGZpbGVzLCBidWlsZCBzY3JpcHRzIChsaWtlIE1ha2VmaWxlcyBvciBDTWFrZUxpc3RzLnR4dCksIGFuZCBhbnkgaW5pdGlhbGl6YXRpb24gcm91dGluZXMuCgpNeSBmaWVsZCBrbm93bGVkZ2UgdGVsbHMgbWUgdG8gY29uc2lkZXIgcG90ZW50aWFsIHNvdXJjZXMgc3VjaCBhczoKCiogICAqKlByZS1wcm9jZXNzb3IgZGVmaW5pdGlvbnM6KiogSXMgaXQgZGVmaW5lZCB1c2luZyBgLURgIGZsYWdzIGR1cmluZyB0aGUgYnVpbGQgcHJvY2Vzcz8gSSYjMzk7ZCBsb29rIGZvciBpdHMgcHJlc2VuY2UgaW4gTWFrZWZpbGVzIG9yIGJ1aWxkIHN5c3RlbSBjb25maWd1cmF0aW9ucy4KKiAgICoqQ29uZmlndXJhdGlvbiBmaWxlczoqKiBQZXJoYXBzIHRoZXJlJiMzOTtzIGEgc3BlY2lmaWMgY29uZmlndXJhdGlvbiBmaWxlIHRoYXQgZGljdGF0ZXMgdmlydHVhbCBtYWNoaW5lIGZlYXR1cmVzLiBJIHNob3VsZCBzZWFyY2ggZm9yIGZpbGVzIHdpdGggbmFtZXMgbGlrZSBgY29uZmlnLmluaWAsIGB2bS5jb25mYCwgb3Igc29tZXRoaW5nIHNpbWlsYXIuCiogICAqKktlcm5lbCBjb21tYW5kIGxpbmU6KiogRG9lcyBpdCBnZXQgcGFzc2VkIGFzIGEgYm9vdCBwYXJhbWV0ZXI/IFRoaXMgaXMgYSBjb21tb24gbWV0aG9kIGZvciBjb25maWd1cmluZyBzeXN0ZW0gYmVoYXZpb3IuIEkgc2hvdWxkIGNoZWNrIHJlbGV2YW50IGJvb3Rsb2FkZXIgY29uZmlndXJhdGlvbnMgb3Iga2VybmVsIGNvbW1hbmQgbGluZSBwYXJzaW5nIHJvdXRpbmVzLgoqICAgKipFbnZpcm9ubWVudGFsIHZhcmlhYmxlczoqKiBDb3VsZCBpdCBiZSBzZXQgYXMgYW4gZW52aXJvbm1lbnQgdmFyaWFibGU/IFRoaXMgaXMgbGVzcyBjb21tb24gZm9yIGNvcmUgZmVhdHVyZXMsIGJ1dCBzdGlsbCBhIHBvc3NpYmlsaXR5LgoqICAgKipEeW5hbWljIGNvbmZpZ3VyYXRpb246KiogQ291bGQgdGhpcyBiZSBjb25maWd1cmVkIGR5bmFtaWNhbGx5IGJ5IHNvbWUgcnVubmluZyBwcm9jZXNzPyBJZiBzbywgd2hpY2ggcHJvY2Vzcz8gSXMgaXQgYSBkZWRpY2F0ZWQgVk0gbWFuYWdlbWVudCBkYWVtb24sIG9yIHNvbWV0aGluZyBtb3JlIGludGVncmF0ZWQ/CgpOZXh0LCBJJiMzOTtsbCBzeXN0ZW1hdGljYWxseSBzZWFyY2ggdGhlIGNvZGUgYmFzZSB1c2luZyB0aGUgdG9vbHMgdGhhdCBJJiMzOTttIGZhbWlsaWFyIHdpdGgsIHN1Y2ggYXMgYGdyZXBgIG9yIGFuIElERSYjMzk7cyBzZWFyY2ggZnVuY3Rpb24uIEkmIzM5O2xsIG5lZWQgdG8gbG9vayBmb3IgaW5zdGFuY2VzIG9mIHRoZSBzeW1ib2wgaXRzZWxmLCBvciBhIGJyb2FkZXIgY29udGV4dCB3aGVyZSBpdCBjb3VsZCBiZSBhc3NpZ25lZC4gSSBjYW4gbmFycm93IGRvd24gbXkgc2VhcmNoIGJ5IGZvY3VzaW5nIG9uIGNvZGUgYXJlYXMgc3BlY2lmaWNhbGx5IHJlbGF0ZWQgdG8gdmlydHVhbCBtYWNoaW5lIGZ1bmN0aW9uYWxpdHkgb3IgZmVhdHVyZSBtYW5hZ2VtZW50LgoKQXMgYW4gZXhwZXJ0LCBJIGtub3cgdGhhdCBkb2N1bWVudGF0aW9uIHdpbGwgYmUgY3JpdGljYWwuIEkgc2hvdWxkIGNvbnN1bHQgYW55IHJlbGF0ZWQgZGVzaWduIGRvY3VtZW50cywgQVBJIHNwZWNpZmljYXRpb25zLCBvciBjb2RlIGNvbW1lbnRzLiBUaGVzZSBzaG91bGQgcHJvdmlkZSBjbHVlcyBhYm91dCBpdHMgcHVycG9zZSBhbmQgaG93IGl0JiMzOTtzIGludGVuZGVkIHRvIGJlIHNldC4gVGhpcyBtaWdodCByZXZlYWwgc29tZSBoaWRkZW4gYXNwZWN0cyBvZiB0aGUgaW1wbGVtZW50YXRpb24uCgpVbHRpbWF0ZWx5LCBieSBjb21iaW5pbmcgY29kZSBhbmFseXNpcyBhbmQgZG9jdW1lbnRhdGlvbiByZXZpZXcsIEkgc2hvdWxkIGJlIGFibGUgdG8gcGluIGRvd24gdGhlIHNvdXJjZSBvZiBgTUZFQVRVUkVfVk1gIGFuZCB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgaXRzIGNvbmZpZ3VyYXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE1IDE1OjU1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O01GRUFUVVJFX1ZNJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC9zMzkwLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3MzOTAvYm9vdC9zdGFydHVwLmM9NTI9c3RhdGljIHZvaWQgZGV0ZWN0X21hY2hpbmVfdHlwZSh2b2lkKVxuLS1cbmFyY2gvczM5MC9ib290L3N0YXJ0dXAuYy02Ny1cdGVsc2UgaWYgKCFtZW1jbXAodm1tcy1cdTAwM2V2bVswXS5jcGksIFwmIzM0O1xceGE5XFx4NjFcXHhlNVxceGQ0XCYjMzQ7LCA0KSlcbmFyY2gvczM5MC9ib290L3N0YXJ0dXAuYzo2ODpcdFx0c2V0X21hY2hpbmVfZmVhdHVyZShNRkVBVFVSRV9WTSk7XG5hcmNoL3MzOTAvYm9vdC9zdGFydHVwLmMtNjktfVxuLS1cbmFyY2gvczM5MC9pbmNsdWRlL2FzbS9tYWNoaW5lLmgtMTctI2RlZmluZSBNRkVBVFVSRV9ESUFHOUNcdFx0NlxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL21hY2hpbmUuaDoxODojZGVmaW5lIE1GRUFUVVJFX1ZNXHRcdDdcbmFyY2gvczM5MC9pbmNsdWRlL2FzbS9tYWNoaW5lLmgtMTktI2RlZmluZSBNRkVBVFVSRV9LVk1cdFx0OFxuLS1cbmFyY2gvczM5MC9pbmNsdWRlL2FzbS9tYWNoaW5lLmg9OTQ9REVGSU5FX01BQ0hJTkVfSEFTX0ZFQVRVUkUoZGlhZzljLCBNRkVBVFVSRV9ESUFHOUMpXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vbWFjaGluZS5oOjk1OkRFRklORV9NQUNISU5FX0hBU19GRUFUVVJFKHZtLCBNRkVBVFVSRV9WTSlcbmFyY2gvczM5MC9pbmNsdWRlL2FzbS9tYWNoaW5lLmgtOTYtREVGSU5FX01BQ0hJTkVfSEFTX0ZFQVRVUkUoa3ZtLCBNRkVBVFVSRV9LVk0pXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE1IDE1OjU1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMxODc4CgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIHRoZSBvbmUgdGhpbmtpbmcgaXQ6CgoqKkRpdmluZyBpbnRvIHRoZSBTeXN0ZW0gQXJjaGl0ZWN0dXJlKioKCkFscmlnaHQsIHRpbWUgdG8gZGlnIGludG8gdGhpcy4gSSBuZWVkIHRvIGdldCBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0aGUgc3lzdGVtIGlzIGlkZW50aWZ5aW5nIHRoZSBtYWNoaW5lIHR5cGUgb24gdGhpcyBzMzkwIGFyY2hpdGVjdHVyZS4gTGV0JiMzOTtzIHN0YXJ0IGJ5IHplcm9pbmcgaW4gb24gdGhhdCBgZGV0ZWN0X21hY2hpbmVfdHlwZWAgZnVuY3Rpb24uIEl0JiMzOTtzIGFsbW9zdCBjZXJ0YWlubHkgY3J1Y2lhbCBpbiBkZXRlcm1pbmluZyBob3cgdGhlIGJvb3QgcHJvY2VzcyBwcm9jZWVkcywgc28gSSYjMzk7bGwgZmluZCBpdCBpbiBgYXJjaC9zMzkwL2Jvb3Qvc3RhcnR1cC5jYC4gVGhhdCBmaWxlIGlzIHdoZXJlIHRoZSBpbml0aWFsIHN5c3RlbSBzZXR1cCBtYWdpYyBsaWtlbHkgaGFwcGVucy4gSSYjMzk7bSBleHBlY3RpbmcgdG8gZmluZCBzb21lIGhhcmR3YXJlIHByb2JpbmcsIG1heWJlIHNvbWUgaW5zdHJ1Y3Rpb24gY2hlY2tzLCBvciBwZXJoYXBzIGV2ZW4gZWFybHkgZmlybXdhcmUgcXVlcmllcy4gTGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIGluIHN0b3JlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNSAxNTo1NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2FyY2gvczM5MC9ib290L3N0YXJ0dXAuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDUyLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgNTI6XHRzdGF0aWMgdm9pZCBkZXRlY3RfbWFjaGluZV90eXBlKHZvaWQpXG4gIDUzOlx0e1xuICA1NDpcdFx0c3RydWN0IHN5c2luZm9fM18yXzIgKnZtbXMgPSAoc3RydWN0IHN5c2luZm9fM18yXzIgKilcdTAwMjZzeXNpbmZvX3BhZ2U7XG4gIDU1Olx0XG4gIDU2Olx0XHQvKiBDaGVjayBjdXJyZW50LWNvbmZpZ3VyYXRpb24tbGV2ZWwgKi9cbiAgNTc6XHRcdGlmIChzdHNpKE5VTEwsIDAsIDAsIDApIFx1MDAzYz0gMikge1xuICA1ODpcdFx0XHRzZXRfbWFjaGluZV9mZWF0dXJlKE1GRUFUVVJFX0xQQVIpO1xuICA1OTpcdFx0XHRyZXR1cm47XG4gIDYwOlx0XHR9XG4gIDYxOlx0XHQvKiBHZXQgdmlydHVhbC1tYWNoaW5lIGNwdSBpbmZvcm1hdGlvbi4gKi9cbiAgNjI6XHRcdGlmIChzdHNpKHZtbXMsIDMsIDIsIDIpIHx8ICF2bW1zLVx1MDAzZWNvdW50KVxuICA2MzpcdFx0XHRyZXR1cm47XG4gIDY0Olx0XHQvKiBEZXRlY3Qga25vd24gaHlwZXJ2aXNvcnMgKi9cbiAgNjU6XHRcdGlmICghbWVtY21wKHZtbXMtXHUwMDNldm1bMF0uY3BpLCBcJiMzNDtcXHhkMlxceGU1XFx4ZDRcJiMzNDssIDMpKVxuICA2NjpcdFx0XHRzZXRfbWFjaGluZV9mZWF0dXJlKE1GRUFUVVJFX0tWTSk7XG4gIDY3Olx0XHRlbHNlIGlmICghbWVtY21wKHZtbXMtXHUwMDNldm1bMF0uY3BpLCBcJiMzNDtcXHhhOVxceDYxXFx4ZTVcXHhkNFwmIzM0OywgNCkpXG4gIDY4Olx0XHRcdHNldF9tYWNoaW5lX2ZlYXR1cmUoTUZFQVRVUkVfVk0pO1xuICA2OTpcdH1cbiAgNzA6XHRcbiAgNzE6XHRzdGF0aWMgdm9pZCBkZXRlY3RfZGlhZzI4OCh2b2lkKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNSAxNTo1NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMjQ1OAoJCQkJCQkJb3V0cHV0OiA0NAoJCQkJCQkJdGhvdWdodHM6IDIyOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiBIeXBlcnZpc29yIERldGVjdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgaG93IHdlJiMzOTtyZSBkZXRlcm1pbmluZyB0aGUgaHlwZXJ2aXNvciBpbiB0aGlzIHN5c3RlbS4gVGhlIGBzdHNpYCBpbnN0cnVjdGlvbiBpcyB0aGUga2V5IOKAkyBpdCYjMzk7cyB0aGUgc3RhbmRhcmQgd2F5IHRvIGRldGVjdCB0aGUgdW5kZXJseWluZyB2aXJ0dWFsaXphdGlvbi4gSWYgdGhlIGBzdHNpYCBpbnN0cnVjdGlvbiByZXR1cm5zIHRoZSBFQkNESUMgdmFsdWUgYFx4ZDJceGU1XHhkNGAsIHRoYXQmIzM5O3MgS1ZNLCBubyBxdWVzdGlvbi4gSWYgaXQgcmV0dXJucyBgXHhhOVx4NjFceGU1XHhkNGAsIHRoYXQmIzM5O3Mgei9WTS4gU3RyYWlnaHRmb3J3YXJkIGVub3VnaC4KCk5vdywgUUVNVSBpcyB0aGUgZW11bGF0b3IgaGVyZSwgcmlnaHQ/IEFuZCBpdCBjYW4gZW11bGF0ZSBlaXRoZXIgS1ZNIG9yIHVzZSBpdHMgb3duIFRDRyAoVGlueSBDb2RlIEdlbmVyYXRvcikuIFdoZW4gUUVNVSBpcyBydW5uaW5nIG9uIHRvcCBvZiBhY3R1YWwgS1ZNLCBpdCB3aWxsIG1pbWljIHRoZSBLVk0gYW5kIGNvcnJlY3RseSByZXR1cm4gdGhlICYjMzQ7S1ZNJiMzNDsgc3RyaW5nIHRocm91Z2ggdGhlIGBzdHNpYCBpbnN0cnVjdGlvbiwgbWFraW5nIGl0IGVhc3kgdG8gaWRlbnRpZnkuCgpCdXQgdGhlIFRDRyBjYXNlLi4uIHRoYXQmIzM5O3Mgd2hlcmUgdGhpbmdzIGdldCBpbnRlcmVzdGluZy4gRG9lcyBRRU1VLCB3aGVuIHJ1bm5pbmcgd2l0aCBUQ0csIGVtdWxhdGUgei9WTT8gTm8sIHVzdWFsbHkgbm90LiBUeXBpY2FsbHksIFFFTVUgVENHIGVpdGhlciByZXR1cm5zIHNvbWV0aGluZyBkaWZmZXJlbnQsIG9yIGRlZmF1bHRzIHRvICYjMzQ7S1ZNJiMzNDssIG9yIG1pZ2h0IGV2ZW4gcmV0dXJuIG5vdGhpbmcgYXQgYWxsLiBUaGF0IG1lYW5zLCBydW5uaW5nIHVuZGVyIFFFTVUgYW5kIFRDRywgd2Ugd291bGQgbGlrZWx5ICpub3QqIGJlIGFibGUgdG8gaWRlbnRpZnkgdGhlIHVuZGVybHlpbmcgaHlwZXJ2aXNvci4KCkhtbSwgdGhpcyByZW1pbmRzIG1lIHRoYXQgc3l6a2FsbGVyIHJ1bnMgdW5kZXIgUUVNVSwgZG9lc24mIzM5O3QgaXQ/IFNvLCBiZWNhdXNlIHN5emthbGxlciBydW5zIG9uIHRvcCBvZiBRRU1VLCBpdCB3b3VsZCBub3QgcnVuIGRpcmVjdGx5IG9uIHovVk0sIHdoaWNoIG1ha2VzIGBtYWNoaW5lX2lzX3ZtKClgIGZhbHNlLgoKV2FpdCBhIHNlY29uZCwgaXMgdGhlcmUgYW5vdGhlciBwYXRod2F5IHRvIHNldHRpbmcgYGl1Y3YtJmd0O3RyYW5zcG9ydGAgdG8gYEFGX0lVQ1ZfVFJBTlNfSVVDVmA/IEkgbmVlZCB0byBkb3VibGUtY2hlY2sgdGhhdC4gTGV0JiMzOTtzIHJldmlzaXQgYG5ldC9pdWN2L2FmX2l1Y3YuY2AgdG8gbWFrZSBzdXJlIEkgaGF2ZW4mIzM5O3QgbWlzc2VkIHNvbWV0aGluZyBjcnVjaWFsLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNSAxNTo1NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtBRl9JVUNWX1RSQU5TX0lVQ1YmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXVjdi9hZl9pdWN2LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2l1Y3YvYWZfaXVjdi5jPTE2Nj1zdGF0aWMgaW5saW5lIGludCBpdWN2X2JlbG93X21zZ2xpbShzdHJ1Y3Qgc29jayAqc2spXG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jLTE3MS1cdFx0cmV0dXJuIDE7XG5uZXQvaXVjdi9hZl9pdWN2LmM6MTcyOlx0aWYgKGl1Y3YtXHUwMDNldHJhbnNwb3J0ID09IEFGX0lVQ1ZfVFJBTlNfSVVDVilcbm5ldC9pdWN2L2FmX2l1Y3YuYy0xNzMtXHRcdHJldHVybiAoYXRvbWljX3JlYWQoXHUwMDI2aXVjdi1cdTAwM2Vza2JzX2luX3htaXQpIFx1MDAzYyBpdWN2LVx1MDAzZXBhdGgtXHUwMDNlbXNnbGltKTtcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmM9NDY2PXN0YXRpYyBzdHJ1Y3Qgc29jayAqaXVjdl9zb2NrX2FsbG9jKHN0cnVjdCBzb2NrZXQgKnNvY2ssIGludCBwcm90bywgZ2ZwX3QgcHJpbywgaW50IGtlcm4pXG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jLTQ5My1cdGlmIChwcl9pdWN2KVxubmV0L2l1Y3YvYWZfaXVjdi5jOjQ5NDpcdFx0aXVjdi1cdTAwM2V0cmFuc3BvcnQgPSBBRl9JVUNWX1RSQU5TX0lVQ1Y7XG5uZXQvaXVjdi9hZl9pdWN2LmMtNDk1LVx0ZWxzZVxuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYz01ODI9c3RhdGljIGludCBpdWN2X3NvY2tfYmluZChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29ja2FkZHJfdW5zaXplZCAqYWRkcixcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmMtNjQ3LVx0XHRzay1cdTAwM2Vza19zdGF0ZSA9IElVQ1ZfQk9VTkQ7XG5uZXQvaXVjdi9hZl9pdWN2LmM6NjQ4Olx0XHRpdWN2LVx1MDAzZXRyYW5zcG9ydCA9IEFGX0lVQ1ZfVFJBTlNfSVVDVjtcbm5ldC9pdWN2L2FmX2l1Y3YuYy02NDktXHRcdHNrLVx1MDAzZXNrX2FsbG9jYXRpb24gfD0gR0ZQX0RNQTtcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmM9NjY1PXN0YXRpYyBpbnQgaXVjdl9zb2NrX2F1dG9iaW5kKHN0cnVjdCBzb2NrICpzaylcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmMtNjczLVx0bWVtY3B5KGl1Y3YtXHUwMDNlc3JjX3VzZXJfaWQsIGl1Y3ZfdXNlcmlkLCA4KTtcbm5ldC9pdWN2L2FmX2l1Y3YuYzo2NzQ6XHRpdWN2LVx1MDAzZXRyYW5zcG9ydCA9IEFGX0lVQ1ZfVFJBTlNfSVVDVjtcbm5ldC9pdWN2L2FmX2l1Y3YuYy02NzUtXHRzay1cdTAwM2Vza19hbGxvY2F0aW9uIHw9IEdGUF9ETUE7XG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jPTczMz1zdGF0aWMgaW50IGl1Y3Zfc29ja19jb25uZWN0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrYWRkcl91bnNpemVkICphZGRyLFxuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYy03ODAtXG5uZXQvaXVjdi9hZl9pdWN2LmM6NzgxOlx0aWYgKGVyciBcdTAwMjZcdTAwMjYgaXVjdi1cdTAwM2V0cmFuc3BvcnQgPT0gQUZfSVVDVl9UUkFOU19JVUNWKSB7XG5uZXQvaXVjdi9hZl9pdWN2LmMtNzgyLVx0XHRpdWN2X3NldmVyX3BhdGgoc2ssIDApO1xuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYz0xNDI2PXN0YXRpYyBpbnQgaXVjdl9zb2NrX3NodXRkb3duKHN0cnVjdCBzb2NrZXQgKnNvY2ssIGludCBob3cpXG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jLTE0NTEtXHQgICAgc2stXHUwMDNlc2tfc3RhdGUgPT0gSVVDVl9DT05ORUNURUQpIHtcbm5ldC9pdWN2L2FmX2l1Y3YuYzoxNDUyOlx0XHRpZiAoaXVjdi1cdTAwM2V0cmFuc3BvcnQgPT0gQUZfSVVDVl9UUkFOU19JVUNWKSB7XG5uZXQvaXVjdi9hZl9pdWN2LmMtMTQ1My1cdFx0XHR0eG1zZy5jbGFzcyA9IDA7XG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jLTE0NzUtXHRpZiAoaG93ID09IFJDVl9TSFVURE9XTiB8fCBob3cgPT0gU0hVVERPV05fTUFTSykge1xubmV0L2l1Y3YvYWZfaXVjdi5jOjE0NzY6XHRcdGlmICgoaXVjdi1cdTAwM2V0cmFuc3BvcnQgPT0gQUZfSVVDVl9UUkFOU19JVUNWKSBcdTAwMjZcdTAwMjZcbm5ldC9pdWN2L2FmX2l1Y3YuYy0xNDc3LVx0XHQgICAgaXVjdi1cdTAwM2VwYXRoKSB7XG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jPTE2MTU9c3RhdGljIGludCBpdWN2X2NhbGxiYWNrX2Nvbm5yZXEoc3RydWN0IGl1Y3ZfcGF0aCAqcGF0aCxcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmMtMTY3NC1cdGl1Y3Zfc29ja19pbml0KG5zaywgc2spO1xubmV0L2l1Y3YvYWZfaXVjdi5jOjE2NzU6XHRuaXVjdi1cdTAwM2V0cmFuc3BvcnQgPSBBRl9JVUNWX1RSQU5TX0lVQ1Y7XG5uZXQvaXVjdi9hZl9pdWN2LmMtMTY3Ni1cdG5zay1cdTAwM2Vza19hbGxvY2F0aW9uIHw9IEdGUF9ETUE7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE1IDE1OjU1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM0Mjg0CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogOTgwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlVucmVhY2hhYmxlIENvZGUgaW4gUUVNVTogQSBEZWVwIERpdmUqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCB0aG91Z2h0IHdhcyBhYm91dCB0aGlzIGBpdWN2X3NvY2tfYmluZGAgZnVuY3Rpb24gYW5kIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgYHByX2l1Y3ZgIHZhcmlhYmxlIGFuZCB0aGUgYEFGX0lVQ1ZfVFJBTlNfSVVDVmAgdHJhbnNwb3J0IHR5cGUuIEkgc2VlIHRoYXQgYEFGX0lVQ1ZfVFJBTlNfSVVDVmAgaXMgKm9ubHkqIHNldCB3aGVuIGBwcl9pdWN2YCBpcyBub24tTlVMTCwgYW5kIGBwcl9pdWN2YCBpdHNlbGYgc2VlbXMgdG8gYmUgbm9uLU5VTEwgb25seSB3aGVuIHRoZSBjb2RlIGRldGVjdHMgdGhhdCBpdCYjMzk7cyBydW5uaW5nIGluIGEgVk0gdmlhIGBtYWNoaW5lX2lzX3ZtKClgLgoKTXkgZmlyc3QgaW5zdGluY3QsIGFzIGEgZnV6emluZy1vcmllbnRlZCByZXNlYXJjaGVyLCB3YXMgdG8gcHJvYmUgaWYgdGhlcmUmIzM5O3MgYW55IGNsZXZlciBRRU1VIHRyaWNrZXJ5IHRvIGZvb2wgYG1hY2hpbmVfaXNfdm0oKWAg4oCTIHNvbWUgUUVNVSBxdWlyayBvciBwc2V1ZG8tc3lzY2FsbCB0aGF0IG1pZ2h0IGNyZWF0ZSBhIGZhbHNlIHBvc2l0aXZlLiBCdXQgSSBxdWlja2x5IHJlbWVtYmVyZWQgdGhhdCBRRU1VIGVpdGhlciB1c2VzIEtWTSBvciBUQ0csIG5vdCB6L1ZNIGVtdWxhdGlvbi4gU3l6a2FsbGVyLCB3aGlsZSBhIHBvd2VyZnVsIHRvb2wsIGlzIGZvY3VzZWQgb24gS1ZNIG9yIFRDRywgdG9vLiBUaGVyZSYjMzk7cyBubyBoaWRkZW4gYmFja2Rvb3IgaGVyZS4KClNvLCBpZiBgbWFjaGluZV9pc192bSgpYCBpcyBmYWxzZSwgYHByX2l1Y3ZgIGlzIE5VTEwsIHdoaWNoIG1lYW5zIGBpdWN2LSZndDt0cmFuc3BvcnRgIGdldHMgc2V0IHRvIGBBRl9JVUNWX1RSQU5TX0hJUEVSYC4gVGhlIG5ldyBwYXRjaCBpbnRyb2R1Y2VzIGEgY29uZGl0aW9uYWwgY2hlY2sgYmFzZWQgb24gYGl1Y3YtJmd0O3RyYW5zcG9ydGAgYmVpbmcgYEFGX0lVQ1ZfVFJBTlNfSVVDVmAuIEdpdmVuIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIGNvZGUsIHRoaXMgbWVhbnMgdGhhdCB0aGlzIG5ldyBjb2RlIGJsb2NrIGlzIGNvbXBsZXRlbHkgdW5yZWFjaGFibGUuIAoKSXQmIzM5O3MgcHJldHR5IGNsZWFyIHRoYXQgaXQgKnNob3VsZCogYmUgdW5yZWFjaGFibGUgaW4gUUVNVS4gU3l6a2FsbGVyJiMzOTtzIGRvY3VtZW50YXRpb24gaXRzZWxmIHJlaW5mb3JjZXMgdGhpczogY29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cywgZXZlbiB3aGVuIHVzaW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlLiBTaW5jZSB6L1ZNIGlzIGEgcHJvcHJpZXRhcnkgaHlwZXJ2aXNvciBhbmQgUUVNVSYjMzk7cyBwcmltYXJ5IGZvY3VzIGlzbiYjMzk7dCB6L1ZNLCBpdCBkb2VzbiYjMzk7dCBlbXVsYXRlIGl0LgoKSnVzdCB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4sIEkgY2hlY2tlZCB0aGUgUUVNVSBtYWNoaW5lIHR5cGUuIEl0JiMzOTtzIHRoZSBgczM5MC1jY3ctdmlydGlvYCwgZW11bGF0aW5nIGEgei9BcmNoaXRlY3R1cmUgbWFjaGluZS4gSSYjMzk7bSBmYW1pbGlhciB3aXRoIHRoZSBmYWN0IHRoYXQgUUVNVSB1c2VzIHRoZSBgc3RzaWAgaW5zdHJ1Y3Rpb24gYW5kIHRoZW4gc2V0cyBzb21lIG1hY2hpbmUgZmVhdHVyZXMgc3VjaCBhcyBLVk0gb3IgUUVNVSBpbiBUQ0cgbW9kZS4gSSBuZWVkZWQgYSBkb3VibGUgY2hlY2ssIHNvIEkgbG9va2VkIGludG8gc29tZSBMaW51eCBrZXJuZWwgY29kZSByZWxhdGVkIHRvIGh5cGVydmlzb3IgZGV0ZWN0aW9uLiBJdCB1c2VzIEVCQ0RJQyBjaGFyYWN0ZXIgc3RyaW5ncyBmcm9tIHRoZSBjb250cm9sIHByb2dyYW0gaW50ZXJydXB0IChDUEkpIGZpZWxkIG9mIHRoZSBzeXN0ZW0gaW5mb3JtYXRpb24gYmxvY2sgKFNJQikgdG8gZGV0ZWN0IGh5cGVydmlzb3JzLiAmIzM0O0tWTSYjMzQ7IChgXHhkMlx4ZTVceGQ0YCkgYW5kICYjMzQ7ei9WTSYjMzQ7IChgXHhhOVx4NjFceGU1XHhkNGApIGNhbiBiZSBkZXRlY3RlZCBieSB0aGlzIG1lY2hhbmlzbS4gIEkga25vdyB0aGF0IFFFTVUgaW4gVENHIG1vZGUgc2V0cyB0aGUgQ1BJIHRvICYjMzQ7UUVNVSYjMzQ7LCB3aGljaCBtZWFucyB0aGF0IGBtYWNoaW5lX2lzX3ZtKClgIHdpbGwgZGVmaW5pdGVseSBiZSBmYWxzZSBpbiBRRU1VLgoKVGh1cywgYHByX2l1Y3ZgIGlzIE5VTEwsIGBpdWN2LSZndDt0cmFuc3BvcnRgIHdpbGwgYmUgYEFGX0lVQ1ZfVFJBTlNfSElQRVJgLCBhbmQgdGhlIGNvbmRpdGlvbiBgaXVjdi0mZ3Q7dHJhbnNwb3J0ID09IEFGX0lVQ1ZfVFJBTlNfSVVDVmAgaXMgKmFsd2F5cyogZmFsc2UuICBUaGUgbW9kaWZpZWQgY29kZSBpcyB1bnJlYWNoYWJsZS4gTm93IEkmIzM5O2xsIG5lZWQgdG8gZG91YmxlLWNoZWNrIHRoZSBlbnRpcmUgY29kZWJhc2UgdG8gbWFrZSBzdXJlIGBpdWN2LSZndDt0cmFuc3BvcnRgIGlzIG5ldmVyIGJlaW5nIHNldCB0byBgQUZfSVVDVl9UUkFOU19JVUNWYCBpbiBhbnkgb3RoZXIgc2NlbmFyaW8uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE1IDE1OjU2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0FGX0lVQ1ZfVFJBTlNfSVVDViYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pdWN2LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXVjdi9hZl9pdWN2LmM9MTY2PXN0YXRpYyBpbmxpbmUgaW50IGl1Y3ZfYmVsb3dfbXNnbGltKHN0cnVjdCBzb2NrICpzaylcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmMtMTcxLVx0XHRyZXR1cm4gMTtcbm5ldC9pdWN2L2FmX2l1Y3YuYzoxNzI6XHRpZiAoaXVjdi1cdTAwM2V0cmFuc3BvcnQgPT0gQUZfSVVDVl9UUkFOU19JVUNWKVxubmV0L2l1Y3YvYWZfaXVjdi5jLTE3My1cdFx0cmV0dXJuIChhdG9taWNfcmVhZChcdTAwMjZpdWN2LVx1MDAzZXNrYnNfaW5feG1pdCkgXHUwMDNjIGl1Y3YtXHUwMDNlcGF0aC1cdTAwM2Vtc2dsaW0pO1xuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYz00NjY9c3RhdGljIHN0cnVjdCBzb2NrICppdWN2X3NvY2tfYWxsb2Moc3RydWN0IHNvY2tldCAqc29jaywgaW50IHByb3RvLCBnZnBfdCBwcmlvLCBpbnQga2Vybilcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmMtNDkzLVx0aWYgKHByX2l1Y3YpXG5uZXQvaXVjdi9hZl9pdWN2LmM6NDk0Olx0XHRpdWN2LVx1MDAzZXRyYW5zcG9ydCA9IEFGX0lVQ1ZfVFJBTlNfSVVDVjtcbm5ldC9pdWN2L2FmX2l1Y3YuYy00OTUtXHRlbHNlXG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jPTU4Mj1zdGF0aWMgaW50IGl1Y3Zfc29ja19iaW5kKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrYWRkcl91bnNpemVkICphZGRyLFxuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYy02NDctXHRcdHNrLVx1MDAzZXNrX3N0YXRlID0gSVVDVl9CT1VORDtcbm5ldC9pdWN2L2FmX2l1Y3YuYzo2NDg6XHRcdGl1Y3YtXHUwMDNldHJhbnNwb3J0ID0gQUZfSVVDVl9UUkFOU19JVUNWO1xubmV0L2l1Y3YvYWZfaXVjdi5jLTY0OS1cdFx0c2stXHUwMDNlc2tfYWxsb2NhdGlvbiB8PSBHRlBfRE1BO1xuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYz02NjU9c3RhdGljIGludCBpdWN2X3NvY2tfYXV0b2JpbmQoc3RydWN0IHNvY2sgKnNrKVxuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYy02NzMtXHRtZW1jcHkoaXVjdi1cdTAwM2VzcmNfdXNlcl9pZCwgaXVjdl91c2VyaWQsIDgpO1xubmV0L2l1Y3YvYWZfaXVjdi5jOjY3NDpcdGl1Y3YtXHUwMDNldHJhbnNwb3J0ID0gQUZfSVVDVl9UUkFOU19JVUNWO1xubmV0L2l1Y3YvYWZfaXVjdi5jLTY3NS1cdHNrLVx1MDAzZXNrX2FsbG9jYXRpb24gfD0gR0ZQX0RNQTtcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmM9NzMzPXN0YXRpYyBpbnQgaXVjdl9zb2NrX2Nvbm5lY3Qoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHNvY2thZGRyX3Vuc2l6ZWQgKmFkZHIsXG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jLTc4MC1cbm5ldC9pdWN2L2FmX2l1Y3YuYzo3ODE6XHRpZiAoZXJyIFx1MDAyNlx1MDAyNiBpdWN2LVx1MDAzZXRyYW5zcG9ydCA9PSBBRl9JVUNWX1RSQU5TX0lVQ1YpIHtcbm5ldC9pdWN2L2FmX2l1Y3YuYy03ODItXHRcdGl1Y3Zfc2V2ZXJfcGF0aChzaywgMCk7XG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jPTE0MjY9c3RhdGljIGludCBpdWN2X3NvY2tfc2h1dGRvd24oc3RydWN0IHNvY2tldCAqc29jaywgaW50IGhvdylcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmMtMTQ1MS1cdCAgICBzay1cdTAwM2Vza19zdGF0ZSA9PSBJVUNWX0NPTk5FQ1RFRCkge1xubmV0L2l1Y3YvYWZfaXVjdi5jOjE0NTI6XHRcdGlmIChpdWN2LVx1MDAzZXRyYW5zcG9ydCA9PSBBRl9JVUNWX1RSQU5TX0lVQ1YpIHtcbm5ldC9pdWN2L2FmX2l1Y3YuYy0xNDUzLVx0XHRcdHR4bXNnLmNsYXNzID0gMDtcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmMtMTQ3NS1cdGlmIChob3cgPT0gUkNWX1NIVVRET1dOIHx8IGhvdyA9PSBTSFVURE9XTl9NQVNLKSB7XG5uZXQvaXVjdi9hZl9pdWN2LmM6MTQ3NjpcdFx0aWYgKChpdWN2LVx1MDAzZXRyYW5zcG9ydCA9PSBBRl9JVUNWX1RSQU5TX0lVQ1YpIFx1MDAyNlx1MDAyNlxubmV0L2l1Y3YvYWZfaXVjdi5jLTE0NzctXHRcdCAgICBpdWN2LVx1MDAzZXBhdGgpIHtcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmM9MTYxNT1zdGF0aWMgaW50IGl1Y3ZfY2FsbGJhY2tfY29ubnJlcShzdHJ1Y3QgaXVjdl9wYXRoICpwYXRoLFxuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYy0xNjc0LVx0aXVjdl9zb2NrX2luaXQobnNrLCBzayk7XG5uZXQvaXVjdi9hZl9pdWN2LmM6MTY3NTpcdG5pdWN2LVx1MDAzZXRyYW5zcG9ydCA9IEFGX0lVQ1ZfVFJBTlNfSVVDVjtcbm5ldC9pdWN2L2FmX2l1Y3YuYy0xNjc2LVx0bnNrLVx1MDAzZXNrX2FsbG9jYXRpb24gfD0gR0ZQX0RNQTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTUgMTU6NTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzcxOTQKCQkJCQkJCW91dHB1dDogMTUyCgkJCQkJCQl0aG91Z2h0czogMTQzMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXNpcyBvZiB0aGUgUGF0Y2g6IFdvcnRoRnV6emluZz1mYWxzZSoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgdGhhdCB0aGlzIHBhdGNoIGlzbiYjMzk7dCB3b3J0aCBmdXp6aW5nLCBhbmQgaGVyZSYjMzk7cyB3aHkuIEkgc2VlIGEgcGF0dGVybjogZXZlcnkgaW5zdGFuY2Ugd2hlcmUgYGl1Y3YtJmd0O3RyYW5zcG9ydGAgaXMgc2V0IHRvIGBBRl9JVUNWX1RSQU5TX0lVQ1ZgIGlzIGRpcmVjdGx5IGRlcGVuZGVudCBvbiBgcHJfaXVjdmAgYmVpbmcgbm9uLU5VTEwuIEluIHNldmVyYWwgZnVuY3Rpb25zIOKAkyBgaXVjdl9zb2NrX2FsbG9jYCwgYGl1Y3Zfc29ja19iaW5kYCwgYGl1Y3Zfc29ja19hdXRvYmluZGAsIGFuZCBldmVuIHRoZSBgaXVjdl9jYWxsYmFja19jb25ucmVxYCB3aGljaCBpcyByZWdpc3RlcmVkIHVzaW5nIGBwcl9pdWN2YCDigJMgdGhpcyBjb25kaXRpb24gaXMgY29uc2lzdGVudGx5IGVuZm9yY2VkLiBUaGlzIG1lYW5zIHRoYXQgYGl1Y3YtJmd0O3RyYW5zcG9ydCA9PSBBRl9JVUNWX1RSQU5TX0lVQ1ZgIGlzLCBlc3NlbnRpYWxseSwgZXF1aXZhbGVudCB0byBgcHJfaXVjdiAhPSBOVUxMYCwgYW5kIHRoZXJlZm9yZSBlcXVpdmFsZW50IHRvIGBtYWNoaW5lX2lzX3ZtKCkgPT0gdHJ1ZWAgYXNzdW1pbmcgYENPTkZJR19JVUNWYCBpcyBlbmFibGVkLgoKU2luY2UgdGhlIGdvYWwgaXMgdG8gZGV0ZXJtaW5lIGlmIHRoZSBwYXRjaCBpcyB3b3J0aCBmdXp6aW5nLCBJIG11c3QgZGV0ZXJtaW5lIGlmIHRoZSBhZGRlZCBjb2RlIGNhbiBiZSByZWFjaGVkIHVuZGVyIGNvbW1vbiBmdXp6aW5nIGVudmlyb25tZW50cyBsaWtlIFFFTVUuCgpHaXZlbiB0aGF0IHRoZSBxdWVzdGlvbiBzcGVjaWZpY2FsbHkgY2FsbHMgb3V0ICYjMzQ7dmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUmIzM0OywgYW5kIHN0YXRlcyB0aGF0IHRoZSBjb2RlIHBhdGggbXVzdCBiZSByZWFjaGFibGUgZXZlbiBpbiBzb2Z0d2FyZS1lbXVsYXRlZCBlbnZpcm9ubWVudHMsIEkmIzM5O20gcHJldHR5IGNlcnRhaW4gdGhpcyBpcyBhIGRlYWQgZW5kLiBRRU1VLCBieSBpdHMgbmF0dXJlLCBkb2VzbiYjMzk7dCBlbXVsYXRlIHRoZSB6L1ZNIGh5cGVydmlzb3IuIEl0IGVtdWxhdGVzIGJhcmUtbWV0YWwgei9BcmNoaXRlY3R1cmUsIG9yIEtWTS4gVGhlIGBzdHNpYCBpbnN0cnVjdGlvbiYjMzk7cyBvdXRwdXQsIHdoaWNoIGlzIGhvdyB3ZSYjMzk7ZCBkZXRlcm1pbmUgaWYgd2UmIzM5O3JlIG9uIGEgaHlwZXJ2aXNvciwgaXMgaGFyZGNvZGVkIGJ5IFFFTVUgdG8gcmV0dXJuICYjMzQ7S1ZNJiMzNDsgb3IgJiMzNDtRRU1VLiYjMzQ7IFRoZXJlJiMzOTtzIG5vIHdheSB0byBtYWtlIFFFTVUgcmV0dXJuICYjMzQ7ei9WTSYjMzQ7IHdpdGhvdXQgcGF0Y2hpbmcgUUVNVSBpdHNlbGYsIGFuZCBzeXprYWxsZXIgZG9lcyBub3QgZG8gdGhpcyBhcyBwYXJ0IG9mIGl0cyBkZWZhdWx0IG9wZXJhdGlvbi4KCk5vdywgSSBwYXVzZWQgdG8gY29uc2lkZXIgaWYgc3l6a2FsbGVyIGl0c2VsZiB3YXMgcnVubmluZyAqb24qIHovVk0uIENlcnRhaW5seSwgeW91ICpjb3VsZCogcnVuIHN5emthbGxlciBvbiBhIHovVk0gZ3Vlc3QgdXNpbmcgYW4gYHNzaGAgYmFja2VuZCBhbmQgdGFyZ2V0ZWQga2VybmVsLCBidXQgdGhlIHByb21wdCYjMzk7cyBsYW5ndWFnZSBpcyBjbGVhcjogdGhlIGNvZGUgbXVzdCBiZSByZWFjaGFibGUgJiMzNDtpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgKmxpa2UqIEdDRSBvciBRRU1VLiYjMzQ7IFRoaXMgaW1wbGllcyB0aGUgc3RhbmRhcmQgc3l6a2FsbGVyIHNldHVwLCBhbmQgdGhhdCBzZXR1cCBkb2VzICpub3QqIGluY2x1ZGUgei9WTSBhcyBhIGRlZmF1bHQgaHlwZXJ2aXNvciB0YXJnZXQsIGJ1dCBvbmx5IGVtdWxhdGVkIGVudmlyb25tZW50cyBsaWtlIFFFTVUuIFRoZSBwcm9tcHQgaW1wbGllcyB0aGlzIGNhc2UgaXMgbm90IHJlbGV2YW50LgoKTXkgdW5kZXJzdGFuZGluZyBpcyB0aGF0IHRoaXMgcGF0Y2ggb25seSBhZmZlY3RzIGVycm9yIGhhbmRsaW5nIGluIGBpdWN2X3NvY2tfY29ubmVjdGAuIElmIHRoZXJlJiMzOTtzIGFuIGVycm9yLCBhbmQgdGhlIHRyYW5zcG9ydCBpcyBgQUZfSVVDVl9UUkFOU19JVUNWYCwgdGhlbiBgaXVjdl9zZXZlcl9wYXRoYCBpcyBjYWxsZWQsIGFuZCBzb21lIHN0YXRlIGNsZWFudXAgbWlnaHQgYmUgcGVyZm9ybWVkLCBzcGVjaWZpY2FsbHkgY29uY2VybmluZyBhIHJhY2UgY29uZGl0aW9uIHdoZXJlIGEgYGNvbm5hY2tgIG1pZ2h0IGFycml2ZSBiZXR3ZWVuIGEgc29ja2V0IGJlaW5nIGRpc2Nvbm5lY3RlZCBhbmQgdGhlIHJlbGVhc2Ugb2YgdGhlIGB3YWl0YC4KCkdpdmVuIHRoYXQsIEkmIzM5O20gY29uZmlkZW50IGluIG15IGluaXRpYWwgYXNzZXNzbWVudC4gVGhlIGBpZmAgc3RhdGVtZW50IHRoYXQgZ3VhcmRzIHRoaXMgZXh0cmEgY2xlYW51cCBjb2RlIGRlcGVuZHMgb24gYmVpbmcgaW4gYSB6L1ZNIGVudmlyb25tZW50LCB3aGljaCBRRU1VICpjYW5ub3QqIGVtdWxhdGUuIFRoZXJlZm9yZSwgdGhpcyBjb2RlIHBhdGggaXMgc2ltcGx5IGluYWNjZXNzaWJsZSBpbiBhIHN0YW5kYXJkIHN5emthbGxlci9RRU1VIHNldHVwLgoKQWZ0ZXIgcmV2aWV3aW5nIHRoZSBwYXRjaCBhZ2FpbiB0byBlbnN1cmUgdGhlcmUgYXJlIG5vIG90aGVyIHN1YnRsZSBjaGFuZ2VzLCBJIGNhbiBjb25maXJtIHRoYXQgdGhlIG5ldyBjb2RlIGlzIGVuY2xvc2VkIGJ5IGBpZiAoZXJyICZhbXA7JmFtcDsgaXVjdi0mZ3Q7dHJhbnNwb3J0ID09IEFGX0lVQ1ZfVFJBTlNfSVVDVilgLCBhbmQgdGhlIGFkZGVkIGNvZGUgaXMgdW5yZWFjaGFibGUuCgpNeSBjb25jbHVzaW9uIGlzIHRoYXQgYFdvcnRoRnV6emluZz1mYWxzZWAgYmVjYXVzZSB0aGUgbW9kaWZpZWQgY29kZSBpcyB1bnJlYWNoYWJsZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBRRU1VLiBBbHNvLCB0aGUgY29kZSBkZXBlbmRzIG9uIGEgcHJvcHJpZXRhcnkgaHlwZXJ2aXNvciB0aGF0IGlzIG5vdCBlbXVsYXRlZCBpbiB0aGVzZSBlbnZpcm9ubWVudHMuCgpKdXN0IHRvIGJlIGFic29sdXRlbHkgY2VydGFpbiwgSSYjMzk7bGwgY29uZmlybSB0aGF0IGBtYWNoaW5lX2lzX3ZtKClgIGlzIGNoZWNraW5nIGZvciB0aGUgY29ycmVjdCBoeXBlcnZpc29yLCB6L1ZNLiBZZXMsIHRoZSBoYXJkY29kZWQgY2hlY2sgZm9yIHRoZSBoeXBlcnZpc29yIHV0aWxpemVzIHRoZSBFQkNESUMgdmFsdWUgZm9yIGB6L1ZNYCAtIHNvIEkgYW0gY29uZmlkZW50IGluIG15IGFzc2Vzc21lbnQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE1IDE1OjU2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogW10sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGVycm9yIGhhbmRsaW5nIHBhdGggaW4gYGl1Y3Zfc29ja19jb25uZWN0YCBmb3IgQUZfSVVDViBzb2NrZXRzLiBIb3dldmVyLCB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJpY3RseSBndWFyZGVkIGJ5IGBpdWN2LVx1MDAzZXRyYW5zcG9ydCA9PSBBRl9JVUNWX1RSQU5TX0lVQ1ZgLCB3aGljaCBpcyBvbmx5IHNldCB3aGVuIHRoZSBrZXJuZWwgaXMgcnVubmluZyB1bmRlciB0aGUgSUJNIHovVk0gaHlwZXJ2aXNvciAoYG1hY2hpbmVfaXNfdm0oKWApLiBTaW5jZSBRRU1VIGVtdWxhdGVzIEtWTSBvciBhIGJhcmUtbWV0YWwgTFBBUiBhbmQgZG9lcyBub3QgZW11bGF0ZSB6L1ZNLCB0aGlzIGNvZGUgcGF0aCBpcyBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIFFFTVUgb3IgR0NFLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGVycm9yIGhhbmRsaW5nIHBhdGggaW4gYGl1Y3Zfc29ja19jb25uZWN0YCBmb3IgQUZfSVVDViBzb2NrZXRzLiBIb3dldmVyLCB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJpY3RseSBndWFyZGVkIGJ5IGBpdWN2LVx1MDAzZXRyYW5zcG9ydCA9PSBBRl9JVUNWX1RSQU5TX0lVQ1ZgLCB3aGljaCBpcyBvbmx5IHNldCB3aGVuIHRoZSBrZXJuZWwgaXMgcnVubmluZyB1bmRlciB0aGUgSUJNIHovVk0gaHlwZXJ2aXNvciAoYG1hY2hpbmVfaXNfdm0oKWApLiBTaW5jZSBRRU1VIGVtdWxhdGVzIEtWTSBvciBhIGJhcmUtbWV0YWwgTFBBUiBhbmQgZG9lcyBub3QgZW11bGF0ZSB6L1ZNLCB0aGlzIGNvZGUgcGF0aCBpcyBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIFFFTVUgb3IgR0NFLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40OS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTUgMTU6NTY8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE1VDE1OjU0OjE3LjI5NTQyMDU1OVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyNzQyMTg2MDEyMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBlcnJvciBoYW5kbGluZyBwYXRoIGluIGBpdWN2X3NvY2tfY29ubmVjdGAgZm9yIEFGX0lVQ1Ygc29ja2V0cy4gSG93ZXZlciwgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RyaWN0bHkgZ3VhcmRlZCBieSBgaXVjdi1cXHUwMDNldHJhbnNwb3J0ID09IEFGX0lVQ1ZfVFJBTlNfSVVDVmAsIHdoaWNoIGlzIG9ubHkgc2V0IHdoZW4gdGhlIGtlcm5lbCBpcyBydW5uaW5nIHVuZGVyIHRoZSBJQk0gei9WTSBoeXBlcnZpc29yIChgbWFjaGluZV9pc192bSgpYCkuIFNpbmNlIFFFTVUgZW11bGF0ZXMgS1ZNIG9yIGEgYmFyZS1tZXRhbCBMUEFSIGFuZCBkb2VzIG5vdCBlbXVsYXRlIHovVk0sIHRoaXMgY29kZSBwYXRoIGlzIGltcG9zc2libGUgdG8gcmVhY2ggaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgUUVNVSBvciBHQ0UuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNVQxNTo1NDoxNy4yOTU0MjUyNjlaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM4MTEyOTMyOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGJmZWExNzQ0ODdiY2Y2NDUyMTdiYTFjOWJiMTg4ZmNjNmIxYTQxNDRcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFNhdCBBdWcgMTUgMTU6NTQ6MTYgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbmV0L2l1Y3YvYWZfaXVjdi5jIGIvbmV0L2l1Y3YvYWZfaXVjdi5jXFxuaW5kZXggZWEwNDdiYWI2NWU3Yy4uNmZiMDA0MWM0Yzk4NyAxMDA2NDRcXG4tLS0gYS9uZXQvaXVjdi9hZl9pdWN2LmNcXG4rKysgYi9uZXQvaXVjdi9hZl9pdWN2LmNcXG5AQCAtNzc4LDggKzc3OCwxNiBAQCBzdGF0aWMgaW50IGl1Y3Zfc29ja19jb25uZWN0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrYWRkcl91bnNpemVkICphZGRyLFxcbiBcXHRpZiAoc2stXFx1MDAzZXNrX3N0YXRlID09IElVQ1ZfRElTQ09OTiB8fCBzay1cXHUwMDNlc2tfc3RhdGUgPT0gSVVDVl9DTE9TRUQpXFxuIFxcdFxcdGVyciA9IC1FQ09OTlJFRlVTRUQ7XFxuIFxcbi1cXHRpZiAoZXJyIFxcdTAwMjZcXHUwMDI2IGl1Y3YtXFx1MDAzZXRyYW5zcG9ydCA9PSBBRl9JVUNWX1RSQU5TX0lVQ1YpXFxuK1xcdGlmIChlcnIgXFx1MDAyNlxcdTAwMjYgaXVjdi1cXHUwMDNldHJhbnNwb3J0ID09IEFGX0lVQ1ZfVFJBTlNfSVVDVikge1xcbiBcXHRcXHRpdWN2X3NldmVyX3BhdGgoc2ssIDApO1xcbitcXHRcXHQvKiBBIGNvbm5hY2sgbWF5IGhhdmUgbGFuZGVkIHdoaWxlIHRoZSB3YWl0IHdhcyB1bndpbmRpbmc7IHRoZVxcbitcXHRcXHQgKiBwYXRoIGlzIGdvbmUsIHNvIHRoZSBzb2NrZXQgbXVzdCBub3Qgc3RpbGwgY2xhaW0gaXQuXFxuK1xcdFxcdCAqL1xcbitcXHRcXHRpZiAoc2stXFx1MDAzZXNrX3N0YXRlID09IElVQ1ZfQ09OTkVDVEVEKSB7XFxuK1xcdFxcdFxcdHNrLVxcdTAwM2Vza19zdGF0ZSA9IElVQ1ZfRElTQ09OTjtcXG4rXFx0XFx0XFx0c2stXFx1MDAzZXNrX3N0YXRlX2NoYW5nZShzayk7XFxuK1xcdFxcdH1cXG4rXFx0fVxcbiBcXG4gZG9uZTpcXG4gXFx0cmVsZWFzZV9zb2NrKHNrKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTVUMTU6NTQ6MTcuNjc3NDMxMzM4WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MTI3MDM5ODM0NDMzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgZXJyb3IgaGFuZGxpbmcgcGF0aCBpbiBgaXVjdl9zb2NrX2Nvbm5lY3RgIGZvciBBRl9JVUNWIHNvY2tldHMuIEhvd2V2ZXIsIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cmljdGx5IGd1YXJkZWQgYnkgYGl1Y3YtXFx1MDAzZXRyYW5zcG9ydCA9PSBBRl9JVUNWX1RSQU5TX0lVQ1ZgLCB3aGljaCBpcyBvbmx5IHNldCB3aGVuIHRoZSBrZXJuZWwgaXMgcnVubmluZyB1bmRlciB0aGUgSUJNIHovVk0gaHlwZXJ2aXNvciAoYG1hY2hpbmVfaXNfdm0oKWApLiBTaW5jZSBRRU1VIGVtdWxhdGVzIEtWTSBvciBhIGJhcmUtbWV0YWwgTFBBUiBhbmQgZG9lcyBub3QgZW11bGF0ZSB6L1ZNLCB0aGlzIGNvZGUgcGF0aCBpcyBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIFFFTVUgb3IgR0NFLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgYmZlYTE3NDQ4N2JjZjY0NTIxN2JhMWM5YmIxODhmY2M2YjFhNDE0NFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTYXQgQXVnIDE1IDE1OjU0OjE2IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L2l1Y3YvYWZfaXVjdi5jIGIvbmV0L2l1Y3YvYWZfaXVjdi5jXG5pbmRleCBlYTA0N2JhYjY1ZTdjLi42ZmIwMDQxYzRjOTg3IDEwMDY0NFxuLS0tIGEvbmV0L2l1Y3YvYWZfaXVjdi5jXG4rKysgYi9uZXQvaXVjdi9hZl9pdWN2LmNcbkBAIC03NzgsOCArNzc4LDE2IEBAIHN0YXRpYyBpbnQgaXVjdl9zb2NrX2Nvbm5lY3Qoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHNvY2thZGRyX3Vuc2l6ZWQgKmFkZHIsXG4gXHRpZiAoc2stXHUwMDNlc2tfc3RhdGUgPT0gSVVDVl9ESVNDT05OIHx8IHNrLVx1MDAzZXNrX3N0YXRlID09IElVQ1ZfQ0xPU0VEKVxuIFx0XHRlcnIgPSAtRUNPTk5SRUZVU0VEO1xuIFxuLVx0aWYgKGVyciBcdTAwMjZcdTAwMjYgaXVjdi1cdTAwM2V0cmFuc3BvcnQgPT0gQUZfSVVDVl9UUkFOU19JVUNWKVxuK1x0aWYgKGVyciBcdTAwMjZcdTAwMjYgaXVjdi1cdTAwM2V0cmFuc3BvcnQgPT0gQUZfSVVDVl9UUkFOU19JVUNWKSB7XG4gXHRcdGl1Y3Zfc2V2ZXJfcGF0aChzaywgMCk7XG4rXHRcdC8qIEEgY29ubmFjayBtYXkgaGF2ZSBsYW5kZWQgd2hpbGUgdGhlIHdhaXQgd2FzIHVud2luZGluZzsgdGhlXG4rXHRcdCAqIHBhdGggaXMgZ29uZSwgc28gdGhlIHNvY2tldCBtdXN0IG5vdCBzdGlsbCBjbGFpbSBpdC5cbitcdFx0ICovXG4rXHRcdGlmIChzay1cdTAwM2Vza19zdGF0ZSA9PSBJVUNWX0NPTk5FQ1RFRCkge1xuK1x0XHRcdHNrLVx1MDAzZXNrX3N0YXRlID0gSVVDVl9ESVNDT05OO1xuK1x0XHRcdHNrLVx1MDAzZXNrX3N0YXRlX2NoYW5nZShzayk7XG4rXHRcdH1cbitcdH1cbiBcbiBkb25lOlxuIFx0cmVsZWFzZV9zb2NrKHNrKTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE1VDE1OjU0OjE3LjY3NzQzMjc1OFoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQzNzU2NTQ1MjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgUGF0Y2ggaW4gdGhlIElVQ1YgU29ja2V0IEZhbWlseSoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgaW4gYG5ldC9pdWN2L2FmX2l1Y3YuY2AsIHNwZWNpZmljYWxseSB0aGUgYGl1Y3Zfc29ja19jb25uZWN0YCBmdW5jdGlvbi4gVGhlIGNvZGUgYWRkcyBhIGNvbmRpdGlvbmFsIGNoZWNrIGFmdGVyIGFuIGVycm9yIGluIHRoZSBBRl9JVUNWIHNvY2tldCBmYW1pbHksIHJpZ2h0PyBJdCBsb29rcyBsaWtlIGlmIHRoZXJlJ3MgYW4gZXJyb3IgYW5kIHRoZSB0cmFuc3BvcnQgaXMgSVVDViwgaXQgc2V2ZXJzIHRoZSBwYXRoIGFuZCB0aGVuLCBpbXBvcnRhbnRseSwgY2hlY2tzIHRoZSBzb2NrZXQgc3RhdGUuIElmIGl0J3Mgc3RpbGwgY29ubmVjdGVkLCBpdCBzZXRzIGl0IHRvIGRpc2Nvbm5lY3RlZCBhbmQgdHJpZ2dlcnMgdGhlIHN0YXRlIGNoYW5nZSBjYWxsYmFjay4gVGhhdCdzIGEgcmVhc29uYWJsZSBkZWZlbnNpdmUgbWVhc3VyZSB0byBwcmV2ZW50IHRoZSBzb2NrZXQgZnJvbSBmYWxzZWx5IGNsYWltaW5nIGEgY29ubmVjdGlvbiBhZnRlciBhIGRpc2Nvbm5lY3QgZHVyaW5nIGEgYGNvbm5lY3QoKWAgYXR0ZW1wdC5cblxuTm93LCBBRl9JVUNWLi4uIHRoYXQncyB6L1ZNIElVQ1YsIHdoaWNoIG1lYW5zIHMzOTAgYXJjaGl0ZWN0dXJlLiBUaGlzIGlzIGltcG9ydGFudC4gTGV0IG1lIHF1aWNrbHkgY2hlY2sgaWYgdGhpcyBpcyBldmVuIHJlbGV2YW50IGZvciBzdGFuZGFyZCBRRU1VIHNldHVwcyBvciBpZiBpdCdzIGRlcGVuZGVudCBvbiBzcGVjaWZpYyBzMzkwIGhhcmR3YXJlLiBXYWl0LCBpc24ndCBzeXprYWxsZXIgY29uZmlndXJlZCB0byBmdXp6IHMzOTB4IGlmIGl0J3MgdGhlcmU/IFRob3VnaCBteSB0eXBpY2FsIHByaW9yaXR5IGlzIHdoZXRoZXIgZnV6emluZyBpcyB3b3J0aCBkb2luZywgSSdsbCBuZWVkIHRvIGNoZWNrIHRoZSBLY29uZmlnLCBzbyBJJ20gdGhpbmtpbmcgSVVDViBpcyBzMzkwIHNwZWNpZmljLiBBbHJpZ2h0LCBsZXQncyBzZWUgd2hhdCB0aGUgYG5ldC9pdWN2L0tjb25maWdgIGZpbGUgdGVsbHMgdXMgYWJvdXQgdGhpcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjEzNCwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI5MywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE1VDE1OjU0OjIyLjA1MzA5MDQzWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUxOTA4NTQ5LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQUZfSVVDVlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXVjdi9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNVQxNTo1NDoyMi4xMDUwMDkyNDlaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyODMzODczMzY3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjpcblxuKipJbnZlc3RpZ2F0aW5nIE5ldHdvcmsgQ29uZmlndXJhdGlvbioqXG5cblJpZ2h0LCBsZXQncyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hlcmUgdGhpcyBuZXR3b3JrIGNvbmZpZ3VyYXRpb24gbGl2ZXMuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBkaXZlIGludG8gdGhlIGBuZXRgIGRpcmVjdG9yeS4gU2luY2Ugd2UncmUgZGVhbGluZyB3aXRoIElVQ1Ygc3BlY2lmaWNhbGx5LCB0aGUgb2J2aW91cyBwbGFjZSB0byBzdGFydCBpcyBlaXRoZXIgYG5ldC9pdWN2L0tjb25maWdgLCBvciBqdXN0IHRoZSBnZW5lcmFsIGBuZXQvS2NvbmZpZ2AuIEFuZCwgaWYgdGhlIGNvbmZpZ3VyYXRpb24gZXhpc3RzLCB0aGVuIEknbGwgbG9vayBmb3IgYSBjb3JyZXNwb25kaW5nIGBNYWtlZmlsZWAgYW5kIGl0J3MgbW9zdCBsaWtlbHkgdG8gYmUgaW4gdGhlIGBuZXQvaXVjdi9gIGRpcmVjdG9yeSB0b28uIFRoZXNlIEtjb25maWcgZmlsZXMgYXJlIHRoZSBoZWFydCBvZiB0aGUgY29uZmlndXJhdGlvbiBwcm9jZXNzLCBzbyB0aGF0J3MgZGVmaW5pdGVseSB0aGUgZmlyc3QgbG9naWNhbCBzdGVwLiBUaW1lIHRvIGNoZWNrIHRob3NlIGZpbGVzIGFuZCBzZWUgd2hhdCB0aGUgYnVpbGQgc3lzdGVtIGhhcyB0byBvZmZlci5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjc2NSwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE1VDE1OjU0OjI0LjkzODg4NTIxN1oiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjE4MTA1OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJBRl9JVUNWXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pdWN2L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXVjdi9LY29uZmlnPTExPWNvbmZpZyBBRklVQ1ZcXG4tLVxcbm5ldC9pdWN2L0tjb25maWctMTMtXFx0ZGVmX3RyaXN0YXRlIG0gaWYgUUVUSF9MMyB8fCBJVUNWXFxubmV0L2l1Y3YvS2NvbmZpZzoxNDpcXHRwcm9tcHQgXFxcIkFGX0lVQ1YgU29ja2V0IHN1cHBvcnQgKFMzOTAgLSB6L1ZNIGFuZCBIaXBlclNvY2tldHMgdHJhbnNwb3J0KVxcXCJcXG5uZXQvaXVjdi9LY29uZmlnLTE1LVxcdGhlbHBcXG5uZXQvaXVjdi9LY29uZmlnOjE2OlxcdCAgU2VsZWN0IHRoaXMgb3B0aW9uIGlmIHlvdSB3YW50IHRvIHVzZSBBRl9JVUNWIHNvY2tldCBhcHBsaWNhdGlvbnNcXG5uZXQvaXVjdi9LY29uZmlnLTE3LVxcdCAgYmFzZWQgb24gei9WTSBpbnRlci11c2VyIGNvbW11bmljYXRpb24gdmVoaWNsZSBvciBiYXNlZCBvblxcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jPTQyPXN0YXRpYyBzdHJ1Y3QgcHJvdG8gaXVjdl9wcm90byA9IHtcXG5uZXQvaXVjdi9hZl9pdWN2LmM6NDM6XFx0Lm5hbWVcXHRcXHQ9IFxcXCJBRl9JVUNWXFxcIixcXG5uZXQvaXVjdi9hZl9pdWN2LmMtNDQtXFx0Lm93bmVyXFx0XFx0PSBUSElTX01PRFVMRSxcXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYz00OT1zdGF0aWMgc3RydWN0IGl1Y3ZfaGFuZGxlciBhZl9pdWN2X2hhbmRsZXI7XFxubmV0L2l1Y3YvYWZfaXVjdi5jLTUwLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYzo1MTovKiBzcGVjaWFsIEFGX0lVQ1YgSVBSTSBtZXNzYWdlcyAqL1xcbm5ldC9pdWN2L2FmX2l1Y3YuYy01Mi1zdGF0aWMgY29uc3QgdTggaXBybV9zaHV0ZG93bls4XSA9XFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmM9MTA3PXN0YXRpYyBpbmxpbmUgdm9pZCBsb3dfbm1jcHkodW5zaWduZWQgY2hhciAqZHN0LCBjaGFyICpzcmMpXFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmMtMTE4LSAqXFxubmV0L2l1Y3YvYWZfaXVjdi5jOjExOTogKiBGb3IgSVVDVl9JUFJNREFUQSwgQUZfSVVDViB1c2VzIHRoZSBmb2xsb3dpbmcgY29udmVudGlvbiB0byB0cmFuc3BvcnQgc29ja2V0XFxubmV0L2l1Y3YvYWZfaXVjdi5jLTEyMC0gKiBkYXRhOlxcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jPTE2Nj1zdGF0aWMgaW5saW5lIGludCBpdWN2X2JlbG93X21zZ2xpbShzdHJ1Y3Qgc29jayAqc2spXFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmMtMTcxLVxcdFxcdHJldHVybiAxO1xcbm5ldC9pdWN2L2FmX2l1Y3YuYzoxNzI6XFx0aWYgKGl1Y3YtXFx1MDAzZXRyYW5zcG9ydCA9PSBBRl9JVUNWX1RSQU5TX0lVQ1YpXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTE3My1cXHRcXHRyZXR1cm4gKGF0b21pY19yZWFkKFxcdTAwMjZpdWN2LVxcdTAwM2Vza2JzX2luX3htaXQpIFxcdTAwM2MgaXVjdi1cXHUwMDNlcGF0aC1cXHUwMDNlbXNnbGltKTtcXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYz0xOTc9c3RhdGljIGludCBhZml1Y3ZfaHNfc2VuZChzdHJ1Y3QgaXVjdl9tZXNzYWdlICppbXNnLCBzdHJ1Y3Qgc29jayAqc29jayxcXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYy0yMDctXFxubmV0L2l1Y3YvYWZfaXVjdi5jOjIwODpcXHRwaHNfaGRyLVxcdTAwM2VtYWdpYyA9IEVUSF9QX0FGX0lVQ1Y7XFxubmV0L2l1Y3YvYWZfaXVjdi5jLTIwOS1cXHRwaHNfaGRyLVxcdTAwM2V2ZXJzaW9uID0gMTtcXG5uZXQvaXVjdi9hZl9pdWN2LmMtMjEwLVxcdHBoc19oZHItXFx1MDAzZWZsYWdzID0gZmxhZ3M7XFxubmV0L2l1Y3YvYWZfaXVjdi5jOjIxMTpcXHRpZiAoZmxhZ3MgPT0gQUZfSVVDVl9GTEFHX1NZTilcXG5uZXQvaXVjdi9hZl9pdWN2LmMtMjEyLVxcdFxcdHBoc19oZHItXFx1MDAzZXdpbmRvdyA9IGl1Y3YtXFx1MDAzZW1zZ2xpbWl0O1xcbm5ldC9pdWN2L2FmX2l1Y3YuYzoyMTM6XFx0ZWxzZSBpZiAoKGZsYWdzID09IEFGX0lVQ1ZfRkxBR19XSU4pIHx8ICFmbGFncykge1xcbm5ldC9pdWN2L2FmX2l1Y3YuYy0yMTQtXFx0XFx0Y29uZmlybV9yZWN2ID0gYXRvbWljX3JlYWQoXFx1MDAyNml1Y3YtXFx1MDAzZW1zZ19yZWN2KTtcXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYy0yMTYtXFx0XFx0aWYgKGNvbmZpcm1fcmVjdilcXG5uZXQvaXVjdi9hZl9pdWN2LmM6MjE3OlxcdFxcdFxcdHBoc19oZHItXFx1MDAzZWZsYWdzID0gcGhzX2hkci1cXHUwMDNlZmxhZ3MgfCBBRl9JVUNWX0ZMQUdfV0lOO1xcbm5ldC9pdWN2L2FmX2l1Y3YuYy0yMTgtXFx0fVxcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTIzNS1cXG5uZXQvaXVjdi9hZl9pdWN2LmM6MjM2OlxcdGRldl9oYXJkX2hlYWRlcihza2IsIHNrYi1cXHUwMDNlZGV2LCBFVEhfUF9BRl9JVUNWLCBOVUxMLCBOVUxMLCBza2ItXFx1MDAzZWxlbik7XFxubmV0L2l1Y3YvYWZfaXVjdi5jLTIzNy1cXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYy0yNTAtXFx0fVxcbm5ldC9pdWN2L2FmX2l1Y3YuYzoyNTE6XFx0c2tiLVxcdTAwM2Vwcm90b2NvbCA9IGNwdV90b19iZTE2KEVUSF9QX0FGX0lVQ1YpO1xcbm5ldC9pdWN2L2FmX2l1Y3YuYy0yNTItXFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmM9Mzk1PXN0YXRpYyB2b2lkIGl1Y3Zfc29ja19jbG9zZShzdHJ1Y3Qgc29jayAqc2spXFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmMtNDA4LVxcdGNhc2UgSVVDVl9DT05ORUNURUQ6XFxubmV0L2l1Y3YvYWZfaXVjdi5jOjQwOTpcXHRcXHRpZiAoaXVjdi1cXHUwMDNldHJhbnNwb3J0ID09IEFGX0lVQ1ZfVFJBTlNfSElQRVIpIHtcXG5uZXQvaXVjdi9hZl9pdWN2LmM6NDEwOlxcdFxcdFxcdGVyciA9IGl1Y3Zfc2VuZF9jdHJsKHNrLCBBRl9JVUNWX0ZMQUdfRklOKTtcXG5uZXQvaXVjdi9hZl9pdWN2LmMtNDExLVxcdFxcdFxcdHNrLVxcdTAwM2Vza19zdGF0ZSA9IElVQ1ZfRElTQ09OTjtcXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYz00NjY9c3RhdGljIHN0cnVjdCBzb2NrICppdWN2X3NvY2tfYWxsb2Moc3RydWN0IHNvY2tldCAqc29jaywgaW50IHByb3RvLCBnZnBfdCBwcmlvLCBpbnQga2VybilcXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYy00OTMtXFx0aWYgKHByX2l1Y3YpXFxubmV0L2l1Y3YvYWZfaXVjdi5jOjQ5NDpcXHRcXHRpdWN2LVxcdTAwM2V0cmFuc3BvcnQgPSBBRl9JVUNWX1RSQU5TX0lVQ1Y7XFxubmV0L2l1Y3YvYWZfaXVjdi5jLTQ5NS1cXHRlbHNlXFxubmV0L2l1Y3YvYWZfaXVjdi5jOjQ5NjpcXHRcXHRpdWN2LVxcdTAwM2V0cmFuc3BvcnQgPSBBRl9JVUNWX1RSQU5TX0hJUEVSO1xcbm5ldC9pdWN2L2FmX2l1Y3YuYy00OTctXFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmM9NTgyPXN0YXRpYyBpbnQgaXVjdl9zb2NrX2JpbmQoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHNvY2thZGRyX3Vuc2l6ZWQgKmFkZHIsXFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmMtNTkzLVxcdGlmIChhZGRyX2xlbiBcXHUwMDNjIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaXVjdikgfHxcXG5uZXQvaXVjdi9hZl9pdWN2LmM6NTk0OlxcdCAgICBhZGRyLVxcdTAwM2VzYV9mYW1pbHkgIT0gQUZfSVVDVilcXG5uZXQvaXVjdi9hZl9pdWN2LmMtNTk1LVxcdFxcdHJldHVybiAtRUlOVkFMO1xcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTYzMy1cXHRcXHRcXHRzay1cXHUwMDNlc2tfc3RhdGUgPSBJVUNWX0JPVU5EO1xcbm5ldC9pdWN2L2FmX2l1Y3YuYzo2MzQ6XFx0XFx0XFx0aXVjdi1cXHUwMDNldHJhbnNwb3J0ID0gQUZfSVVDVl9UUkFOU19ISVBFUjtcXG5uZXQvaXVjdi9hZl9pdWN2LmMtNjM1LVxcdFxcdFxcdGlmICghaXVjdi1cXHUwMDNlbXNnbGltaXQpXFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmMtNjQ3LVxcdFxcdHNrLVxcdTAwM2Vza19zdGF0ZSA9IElVQ1ZfQk9VTkQ7XFxubmV0L2l1Y3YvYWZfaXVjdi5jOjY0ODpcXHRcXHRpdWN2LVxcdTAwM2V0cmFuc3BvcnQgPSBBRl9JVUNWX1RSQU5TX0lVQ1Y7XFxubmV0L2l1Y3YvYWZfaXVjdi5jLTY0OS1cXHRcXHRzay1cXHUwMDNlc2tfYWxsb2NhdGlvbiB8PSBHRlBfRE1BO1xcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jPTY2NT1zdGF0aWMgaW50IGl1Y3Zfc29ja19hdXRvYmluZChzdHJ1Y3Qgc29jayAqc2spXFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmMtNjczLVxcdG1lbWNweShpdWN2LVxcdTAwM2VzcmNfdXNlcl9pZCwgaXVjdl91c2VyaWQsIDgpO1xcbm5ldC9pdWN2L2FmX2l1Y3YuYzo2NzQ6XFx0aXVjdi1cXHUwMDNldHJhbnNwb3J0ID0gQUZfSVVDVl9UUkFOU19JVUNWO1xcbm5ldC9pdWN2L2FmX2l1Y3YuYy02NzUtXFx0c2stXFx1MDAzZXNrX2FsbG9jYXRpb24gfD0gR0ZQX0RNQTtcXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYz03MzM9c3RhdGljIGludCBpdWN2X3NvY2tfY29ubmVjdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29ja2FkZHJfdW5zaXplZCAqYWRkcixcXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYy03NDAtXFxubmV0L2l1Y3YvYWZfaXVjdi5jOjc0MTpcXHRpZiAoYWxlbiBcXHUwMDNjIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaXVjdikgfHwgYWRkci1cXHUwMDNlc2FfZmFtaWx5ICE9IEFGX0lVQ1YpXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTc0Mi1cXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYy03NDctXFx0aWYgKHNrLVxcdTAwM2Vza19zdGF0ZSA9PSBJVUNWX09QRU4gXFx1MDAyNlxcdTAwMjZcXG5uZXQvaXVjdi9hZl9pdWN2LmM6NzQ4OlxcdCAgICBpdWN2LVxcdTAwM2V0cmFuc3BvcnQgPT0gQUZfSVVDVl9UUkFOU19ISVBFUilcXG5uZXQvaXVjdi9hZl9pdWN2LmMtNzQ5LVxcdFxcdHJldHVybiAtRUJBREZEOyAvKiBleHBsaWNpdCBiaW5kIHJlcXVpcmVkICovXFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmMtNzY1LVxcbm5ldC9pdWN2L2FmX2l1Y3YuYzo3NjY6XFx0aWYgKGl1Y3YtXFx1MDAzZXRyYW5zcG9ydCA9PSBBRl9JVUNWX1RSQU5TX0hJUEVSKVxcbm5ldC9pdWN2L2FmX2l1Y3YuYzo3Njc6XFx0XFx0ZXJyID0gaXVjdl9zZW5kX2N0cmwoc29jay1cXHUwMDNlc2ssIEFGX0lVQ1ZfRkxBR19TWU4pO1xcbm5ldC9pdWN2L2FmX2l1Y3YuYy03NjgtXFx0ZWxzZVxcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTc4MC1cXG5uZXQvaXVjdi9hZl9pdWN2LmM6NzgxOlxcdGlmIChlcnIgXFx1MDAyNlxcdTAwMjYgaXVjdi1cXHUwMDNldHJhbnNwb3J0ID09IEFGX0lVQ1ZfVFJBTlNfSVVDVikge1xcbm5ldC9pdWN2L2FmX2l1Y3YuYy03ODItXFx0XFx0aXVjdl9zZXZlcl9wYXRoKHNrLCAwKTtcXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYz04Nzc9c3RhdGljIGludCBpdWN2X3NvY2tfZ2V0bmFtZShzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29ja2FkZHIgKmFkZHIsXFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmMtODgzLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYzo4ODQ6XFx0YWRkci1cXHUwMDNlc2FfZmFtaWx5ID0gQUZfSVVDVjtcXG5uZXQvaXVjdi9hZl9pdWN2LmMtODg1LVxcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jPTkyND1zdGF0aWMgaW50IGl1Y3Zfc29ja19zZW5kbXNnKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZyxcXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYy0xMDA2LVxcdCAqIGZvciBTT0NLX1NUUkVBTSB3ZSBtaWdodCB3YW50IHRvIGltcHJvdmUgaXQgaW4gZnV0dXJlICovXFxubmV0L2l1Y3YvYWZfaXVjdi5jOjEwMDc6XFx0aWYgKGl1Y3YtXFx1MDAzZXRyYW5zcG9ydCA9PSBBRl9JVUNWX1RSQU5TX0hJUEVSKSB7XFxubmV0L2l1Y3YvYWZfaXVjdi5jLTEwMDgtXFx0XFx0aGVhZHJvb20gPSBzaXplb2Yoc3RydWN0IGFmX2l1Y3ZfdHJhbnNfaGRyKSArXFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmMtMTA1MS1cXG5uZXQvaXVjdi9hZl9pdWN2LmM6MTA1MjpcXHRpZiAoaXVjdi1cXHUwMDNldHJhbnNwb3J0ID09IEFGX0lVQ1ZfVFJBTlNfSElQRVIpIHtcXG5uZXQvaXVjdi9hZl9pdWN2LmMtMTA1My1cXHRcXHRhdG9taWNfaW5jKFxcdTAwMjZpdWN2LVxcdTAwM2Vtc2dfc2VudCk7XFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmM9MTI0NT1zdGF0aWMgaW50IGl1Y3Zfc29ja19yZWN2bXNnKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZyxcXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYy0xMzE2LVxcdFxcdGNvbnN1bWVfc2tiKHNrYik7XFxubmV0L2l1Y3YvYWZfaXVjdi5jOjEzMTc6XFx0XFx0aWYgKGl1Y3YtXFx1MDAzZXRyYW5zcG9ydCA9PSBBRl9JVUNWX1RSQU5TX0hJUEVSKSB7XFxubmV0L2l1Y3YvYWZfaXVjdi5jLTEzMTgtXFx0XFx0XFx0YXRvbWljX2luYyhcXHUwMDI2aXVjdi1cXHUwMDNlbXNnX3JlY3YpO1xcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTEzNDMtXFx0XFx0XFx0XFx0XFx0XFx0XFx0aXVjdi1cXHUwMDNlbXNnbGltaXQgLyAyKSB7XFxubmV0L2l1Y3YvYWZfaXVjdi5jOjEzNDQ6XFx0XFx0XFx0XFx0ZXJyID0gaXVjdl9zZW5kX2N0cmwoc2ssIEFGX0lVQ1ZfRkxBR19XSU4pO1xcbm5ldC9pdWN2L2FmX2l1Y3YuYy0xMzQ1LVxcdFxcdFxcdFxcdGlmIChlcnIpIHtcXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYz0xNDI2PXN0YXRpYyBpbnQgaXVjdl9zb2NrX3NodXRkb3duKHN0cnVjdCBzb2NrZXQgKnNvY2ssIGludCBob3cpXFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmMtMTQ1MS1cXHQgICAgc2stXFx1MDAzZXNrX3N0YXRlID09IElVQ1ZfQ09OTkVDVEVEKSB7XFxubmV0L2l1Y3YvYWZfaXVjdi5jOjE0NTI6XFx0XFx0aWYgKGl1Y3YtXFx1MDAzZXRyYW5zcG9ydCA9PSBBRl9JVUNWX1RSQU5TX0lVQ1YpIHtcXG5uZXQvaXVjdi9hZl9pdWN2LmMtMTQ1My1cXHRcXHRcXHR0eG1zZy5jbGFzcyA9IDA7XFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmMtMTQ3MC1cXHRcXHR9IGVsc2VcXG5uZXQvaXVjdi9hZl9pdWN2LmM6MTQ3MTpcXHRcXHRcXHRpdWN2X3NlbmRfY3RybChzaywgQUZfSVVDVl9GTEFHX1NIVCk7XFxubmV0L2l1Y3YvYWZfaXVjdi5jLTE0NzItXFx0fVxcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTE0NzUtXFx0aWYgKGhvdyA9PSBSQ1ZfU0hVVERPV04gfHwgaG93ID09IFNIVVRET1dOX01BU0spIHtcXG5uZXQvaXVjdi9hZl9pdWN2LmM6MTQ3NjpcXHRcXHRpZiAoKGl1Y3YtXFx1MDAzZXRyYW5zcG9ydCA9PSBBRl9JVUNWX1RSQU5TX0lVQ1YpIFxcdTAwMjZcXHUwMDI2XFxubmV0L2l1Y3YvYWZfaXVjdi5jLTE0NzctXFx0XFx0ICAgIGl1Y3YtXFx1MDAzZXBhdGgpIHtcXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYz0xNjE1PXN0YXRpYyBpbnQgaXVjdl9jYWxsYmFja19jb25ucmVxKHN0cnVjdCBpdWN2X3BhdGggKnBhdGgsXFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmMtMTY3NC1cXHRpdWN2X3NvY2tfaW5pdChuc2ssIHNrKTtcXG5uZXQvaXVjdi9hZl9pdWN2LmM6MTY3NTpcXHRuaXVjdi1cXHUwMDNldHJhbnNwb3J0ID0gQUZfSVVDVl9UUkFOU19JVUNWO1xcbm5ldC9pdWN2L2FmX2l1Y3YuYy0xNjc2LVxcdG5zay1cXHUwMDNlc2tfYWxsb2NhdGlvbiB8PSBHRlBfRE1BO1xcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jPTE4NzI9c3RhdGljIGludCBhZml1Y3ZfaHNfY2FsbGJhY2tfc3luKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYy0xODgyLVxcdFxcdGFmaXVjdl9zd2FwX3NyY19kZXN0KHNrYik7XFxubmV0L2l1Y3YvYWZfaXVjdi5jOjE4ODM6XFx0XFx0dHJhbnNfaGRyLVxcdTAwM2VmbGFncyA9IEFGX0lVQ1ZfRkxBR19TWU4gfCBBRl9JVUNWX0ZMQUdfRklOO1xcbm5ldC9pdWN2L2FmX2l1Y3YuYy0xODg0LVxcdFxcdGVyciA9IGRldl9xdWV1ZV94bWl0KHNrYik7XFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmMtMTg5NC1cXHRcXHRhZml1Y3Zfc3dhcF9zcmNfZGVzdChza2IpO1xcbm5ldC9pdWN2L2FmX2l1Y3YuYzoxODk1OlxcdFxcdHRyYW5zX2hkci1cXHUwMDNlZmxhZ3MgPSBBRl9JVUNWX0ZMQUdfU1lOIHwgQUZfSVVDVl9GTEFHX0ZJTjtcXG5uZXQvaXVjdi9hZl9pdWN2LmMtMTg5Ni1cXHRcXHRlcnIgPSBkZXZfcXVldWVfeG1pdChza2IpO1xcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTE5MDQtXFx0aXVjdl9zb2NrX2luaXQobnNrLCBzayk7XFxubmV0L2l1Y3YvYWZfaXVjdi5jOjE5MDU6XFx0bml1Y3YtXFx1MDAzZXRyYW5zcG9ydCA9IEFGX0lVQ1ZfVFJBTlNfSElQRVI7XFxubmV0L2l1Y3YvYWZfaXVjdi5jLTE5MDYtXFx0bml1Y3YtXFx1MDAzZW1zZ2xpbWl0ID0gaXVjdi1cXHUwMDNlbXNnbGltaXQ7XFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmMtMTkxOC1cXHRhZml1Y3Zfc3dhcF9zcmNfZGVzdChza2IpO1xcbm5ldC9pdWN2L2FmX2l1Y3YuYzoxOTE5OlxcdHRyYW5zX2hkci1cXHUwMDNlZmxhZ3MgPSBBRl9JVUNWX0ZMQUdfU1lOIHwgQUZfSVVDVl9GTEFHX0FDSztcXG5uZXQvaXVjdi9hZl9pdWN2LmMtMTkyMC1cXHR0cmFuc19oZHItXFx1MDAzZXdpbmRvdyA9IG5pdWN2LVxcdTAwM2Vtc2dsaW1pdDtcXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYz0yMDY2PXN0YXRpYyBpbnQgYWZpdWN2X2hzX3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTIwODktXFx0c2tfZm9yX2VhY2goc2ssIFxcdTAwMjZpdWN2X3NrX2xpc3QuaGVhZCkge1xcbm5ldC9pdWN2L2FmX2l1Y3YuYzoyMDkwOlxcdFxcdGlmICh0cmFuc19oZHItXFx1MDAzZWZsYWdzID09IEFGX0lVQ1ZfRkxBR19TWU4pIHtcXG5uZXQvaXVjdi9hZl9pdWN2LmMtMjA5MS1cXHRcXHRcXHRpZiAoKCFtZW1jbXAoXFx1MDAyNml1Y3Zfc2soc2spLVxcdTAwM2VzcmNfbmFtZSxcXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYy0yMTMwLVxcdHN3aXRjaCAodHJhbnNfaGRyLVxcdTAwM2VmbGFncykge1xcbm5ldC9pdWN2L2FmX2l1Y3YuYzoyMTMxOlxcdGNhc2UgQUZfSVVDVl9GTEFHX1NZTjpcXG5uZXQvaXVjdi9hZl9pdWN2LmMtMjEzMi1cXHRcXHQvKiBjb25uZWN0IHJlcXVlc3QgKi9cXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYy0yMTM0LVxcdFxcdGJyZWFrO1xcbm5ldC9pdWN2L2FmX2l1Y3YuYzoyMTM1OlxcdGNhc2UgKEFGX0lVQ1ZfRkxBR19TWU4gfCBBRl9JVUNWX0ZMQUdfQUNLKTpcXG5uZXQvaXVjdi9hZl9pdWN2LmMtMjEzNi1cXHRcXHQvKiBjb25uZWN0IHJlcXVlc3QgY29uZmlybWVkICovXFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmMtMjEzOC1cXHRcXHRicmVhaztcXG5uZXQvaXVjdi9hZl9pdWN2LmM6MjEzOTpcXHRjYXNlIChBRl9JVUNWX0ZMQUdfU1lOIHwgQUZfSVVDVl9GTEFHX0ZJTik6XFxubmV0L2l1Y3YvYWZfaXVjdi5jLTIxNDAtXFx0XFx0LyogY29ubmVjdCByZXF1ZXN0IHJlZnVzZWQgKi9cXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYy0yMTQyLVxcdFxcdGJyZWFrO1xcbm5ldC9pdWN2L2FmX2l1Y3YuYzoyMTQzOlxcdGNhc2UgKEFGX0lVQ1ZfRkxBR19GSU4pOlxcbm5ldC9pdWN2L2FmX2l1Y3YuYy0yMTQ0LVxcdFxcdC8qIGNsb3NlIHJlcXVlc3QgKi9cXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYy0yMTQ2LVxcdFxcdGJyZWFrO1xcbm5ldC9pdWN2L2FmX2l1Y3YuYzoyMTQ3OlxcdGNhc2UgKEFGX0lVQ1ZfRkxBR19XSU4pOlxcbm5ldC9pdWN2L2FmX2l1Y3YuYy0yMTQ4LVxcdFxcdGVyciA9IGFmaXVjdl9oc19jYWxsYmFja193aW4oc2ssIHNrYik7XFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmMtMjE1My1cXHRcXHRmYWxsdGhyb3VnaDtcXHQvKiBhbmQgcmVjZWl2ZSBub24temVybyBsZW5ndGggZGF0YSAqL1xcbm5ldC9pdWN2L2FmX2l1Y3YuYzoyMTU0OlxcdGNhc2UgKEFGX0lVQ1ZfRkxBR19TSFQpOlxcbm5ldC9pdWN2L2FmX2l1Y3YuYy0yMTU1LVxcdFxcdC8qIHNodXRkb3duIHJlcXVlc3QgKi9cXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYz0yMjE0PXN0YXRpYyBpbnQgYWZpdWN2X25ldGRldl9ldmVudChzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKnRoaXMsXFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmMtMjIyOC1cXHRcXHRcXHRcXHRpZiAoZXZlbnQgPT0gTkVUREVWX0dPSU5HX0RPV04pXFxubmV0L2l1Y3YvYWZfaXVjdi5jOjIyMjk6XFx0XFx0XFx0XFx0XFx0aXVjdl9zZW5kX2N0cmwoc2ssIEFGX0lVQ1ZfRkxBR19GSU4pO1xcbm5ldC9pdWN2L2FmX2l1Y3YuYy0yMjMwLVxcdFxcdFxcdFxcdHNrLVxcdTAwM2Vza19zdGF0ZSA9IElVQ1ZfRElTQ09OTjtcXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYz0yMjk2PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X3Byb3RvX2ZhbWlseSBpdWN2X3NvY2tfZmFtaWx5X29wcyA9IHtcXG5uZXQvaXVjdi9hZl9pdWN2LmM6MjI5NzpcXHQuZmFtaWx5XFx0PSBBRl9JVUNWLFxcbm5ldC9pdWN2L2FmX2l1Y3YuYy0yMjk4LVxcdC5vd25lclxcdD0gVEhJU19NT0RVTEUsXFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmM9MjMwMj1zdGF0aWMgc3RydWN0IHBhY2tldF90eXBlIGl1Y3ZfcGFja2V0X3R5cGUgPSB7XFxubmV0L2l1Y3YvYWZfaXVjdi5jOjIzMDM6XFx0LnR5cGUgPSBjcHVfdG9fYmUxNihFVEhfUF9BRl9JVUNWKSxcXG5uZXQvaXVjdi9hZl9pdWN2LmMtMjMwNC1cXHQuZnVuYyA9IGFmaXVjdl9oc19yY3YsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE1VDE1OjU0OjI0Ljk4NTA3MzQ0NVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM5NTcyMTI4NzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqSW52ZXN0aWdhdGluZyB0aGUgQUZfSVVDViBTb2NrZXQgU3VwcG9ydCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgYG5ldC9pdWN2L0tjb25maWdgIGZpbGUsIGFuZCByaWdodCBvZmYgdGhlIGJhdCwgaXQncyBwcmV0dHkgY2xlYXIgdGhpcyBpcyBhIHNwZWNpYWxpemVkIGNvbmZpZ3VyYXRpb24uIFRoZSBgY29uZmlnIEFGX0lVQ1ZgIGVudHJ5LCB3aXRoIGl0cyBgZGVmX3RyaXN0YXRlIG0gaWYgUUVUSF9MMyB8fCBJVUNWYCwgc2NyZWFtcyBTMzkwIGFyY2hpdGVjdHVyZS4gSXQncyBleHBsaWNpdGx5IHRpZWQgdG8gei9WTSBhbmQgSGlwZXJTb2NrZXRzIHRyYW5zcG9ydCwgd2hpY2ggYXJlIGhhbGxtYXJrcyBvZiB0aGF0IGVudmlyb25tZW50LlxuXG5CdXQgd2FpdCBhIG1pbnV0ZS4uLm15IG1pbmQgc3RhcnRzIHRvIHdhbmRlciwgY2FuIHRoaXMgYmUgY29tcGlsZWQgb24geDg2PyBUaGF0IHdvdWxkIGJlIHVuY29udmVudGlvbmFsLCB0byBzYXkgdGhlIGxlYXN0LiBJdCdzIGhpZ2hseSB1bmxpa2VseSB0aGF0IGNvZGUgZGVzaWduZWQgZm9yIGFuIFMzOTAgYXJjaGl0ZWN0dXJlIHdvdWxkIGhhdmUgYW55IHVzZSBpbiB4ODYgdW5sZXNzIHRoZXJlIHdhcyBzb21lIHNvcnQgb2Ygd2VpcmQgdHJhbnNsYXRpb24gbGF5ZXIgb3IgZW11bGF0aW9uIGludm9sdmVkLlxuXG5UaGUgbmV4dCBzdGVwIGlzIG9idmlvdXMuIEkgbmVlZCB0byB0cmFjZSB0aGUgZGVwZW5kZW5jaWVzLiBJIGhhdmUgdG8gc2VlIGlmIHRoaXMgYG5ldC9pdWN2L0tjb25maWdgIGZpbGUgaXMgZXZlbiAqc291cmNlZCogd2l0aGluIHRoZSBtb3JlIGdlbmVyYWwgYG5ldC9LY29uZmlnYCBmaWxlLiBUaGF0J2xsIHRlbGwgbWUgaWYgaXQncyBldmVuICpwb3RlbnRpYWxseSogaW5jbHVkZWQgaW4gYSBicm9hZGVyLCBtb3JlIGFyY2hpdGVjdHVyZS1hZ25vc3RpYyBidWlsZC4gVGhhdOKAmXMgdGhlIG1vc3QgbGlrZWx5IHNvdXJjZSBvZiB0aGUgYW5zd2VyIGhlcmUsIHRoZSBLY29uZmlnIGZpbGUgZm9yIG5ldHdvcmsuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgyNzQsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTVUMTU6NTQ6MjguOTQyMjg4NjZaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDc1MzExNTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaXVjdlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvS2NvbmZpZz04OD1zb3VyY2UgXFxcIm5ldC94ZnJtL0tjb25maWdcXFwiXFxubmV0L0tjb25maWc6ODk6c291cmNlIFxcXCJuZXQvaXVjdi9LY29uZmlnXFxcIlxcbm5ldC9LY29uZmlnLTkwLXNvdXJjZSBcXFwibmV0L3NtYy9LY29uZmlnXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNVQxNTo1NDoyOC45ODk4MzExNTlaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyODY2MTIxODU3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjpcblxuKipVbnBhY2tpbmcgYSBLY29uZmlnIERlcGVuZGVuY3kqKlxuXG5IbW0sIGhvbGQgb24gYSBzZWNvbmQuLi4gSXQncyBoaXR0aW5nIG1lIHRoYXQgYG5ldC9pdWN2L0tjb25maWdgIGdldHMgc291cmNlZCB1bmNvbmRpdGlvbmFsbHkgZnJvbSB3aXRoaW4gYG5ldC9LY29uZmlnYCwgcmlnaHQ/IEkgbmVlZCB0byBkb3VibGUtY2hlY2sgdGhhdC4gVGhpcyBoYXMgcG90ZW50aWFsIGltcGxpY2F0aW9ucyBmb3IgY29uZmlndXJhYmlsaXR5IGFuZCBkZXBlbmRlbmNpZXMsIHdoaWNoIEknZCBleHBlY3QgdG8gYmUgbW9yZSBncmFudWxhci4gSSBuZWVkIHRvIHRha2UgYSBmcmVzaCBsb29rIGF0IGBuZXQvaXVjdi9LY29uZmlnYCBhbmQgbWFrZSBzdXJlIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhpcyB0b3AtbGV2ZWwgZGVwZW5kZW5jeSBpcyBjb3JyZWN0LiBJdCdzIGEga2V5IGRldGFpbCB0byBmdWxseSBhc3Nlc3MgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGUgbmV0d29yayBjb25maWd1cmF0aW9uLiBJIGp1c3Qgd2FudCB0byBlbnN1cmUgdGhlcmUgYXJlbid0IGFueSB1bmV4cGVjdGVkIGNvbnNlcXVlbmNlcyBvciBkZXNpZ24gZGVjaXNpb25zIGJha2VkIGludG8gdGhhdCBpbmNsdXNpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg3NjEsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNVQxNTo1NDozMS44NTU5NTYyODVaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzkzNjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2l1Y3YvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiAzMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbiAgIDI6XFx0Y29uZmlnIElVQ1ZcXG4gICAzOlxcdFxcdGRlcGVuZHMgb24gUzM5MFxcbiAgIDQ6XFx0XFx0ZGVmX3RyaXN0YXRlIHkgaWYgUzM5MFxcbiAgIDU6XFx0XFx0cHJvbXB0IFxcXCJJVUNWIHN1cHBvcnQgKFMzOTAgLSB6L1ZNIG9ubHkpXFxcIlxcbiAgIDY6XFx0XFx0aGVscFxcbiAgIDc6XFx0XFx0ICBTZWxlY3QgdGhpcyBvcHRpb24gaWYgeW91IHdhbnQgdG8gdXNlIGludGVyLXVzZXIgY29tbXVuaWNhdGlvblxcbiAgIDg6XFx0XFx0ICB1bmRlciBWTSBvciBWSUYuIElmIHlvdSBydW4gb24gei9WTSwgc2F5IFxcXCJZXFxcIiB0byBlbmFibGUgYSBmYXN0XFxuICAgOTpcXHRcXHQgIGNvbW11bmljYXRpb24gbGluayBiZXR3ZWVuIFZNIGd1ZXN0cy5cXG4gIDEwOlxcdFxcbiAgMTE6XFx0Y29uZmlnIEFGSVVDVlxcbiAgMTI6XFx0XFx0ZGVwZW5kcyBvbiBTMzkwXFxuICAxMzpcXHRcXHRkZWZfdHJpc3RhdGUgbSBpZiBRRVRIX0wzIHx8IElVQ1ZcXG4gIDE0OlxcdFxcdHByb21wdCBcXFwiQUZfSVVDViBTb2NrZXQgc3VwcG9ydCAoUzM5MCAtIHovVk0gYW5kIEhpcGVyU29ja2V0cyB0cmFuc3BvcnQpXFxcIlxcbiAgMTU6XFx0XFx0aGVscFxcbiAgMTY6XFx0XFx0ICBTZWxlY3QgdGhpcyBvcHRpb24gaWYgeW91IHdhbnQgdG8gdXNlIEFGX0lVQ1Ygc29ja2V0IGFwcGxpY2F0aW9uc1xcbiAgMTc6XFx0XFx0ICBiYXNlZCBvbiB6L1ZNIGludGVyLXVzZXIgY29tbXVuaWNhdGlvbiB2ZWhpY2xlIG9yIGJhc2VkIG9uXFxuICAxODpcXHRcXHQgIEhpcGVyU29ja2V0cy5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTVUMTU6NTQ6MzEuODU2MDM4NDI1WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjcwODU5NjA5ODYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgSW52ZXN0aWdhdGlvbiBpbnRvIEFGX0lVQ1YgRnV6emluZyoqXG5cbk9rYXksIHNvIGBjb25maWcgQUZJVUNWYCBpcyBkZXBlbmRlbnQgb24gYFMzOTBgLiBUaGF0IGltbWVkaWF0ZWx5IHRlbGxzIG1lIEkgY2FuJ3QgY29tcGlsZSBpdCBvbiB4ODYsIHdoaWNoIGlzIG5vIHN1cnByaXNlLiBCdXQgaG9sZCBvbiwgSSBzZWVtIHRvIHJlbWVtYmVyIHN5emthbGxlciBmdXp6aW5nIHMzOTB4LiBUaGUgcXVlc3Rpb24gaXMsIGlzIGl0IHJlYWNoYWJsZSBpbiBRRU1VPyBZZXMsIHRoYXQncyByaWdodCwgc3l6a2FsbGVyIGRvZXMgcnVuIHMzOTB4IFFFTVUuIEJ1dCBkb2VzIGl0IHJlcXVpcmUgc29tZSBzcGVjaWZpYyBoYXJkd2FyZT8gQWgsIGhlcmUncyB0aGUgZGVzY3JpcHRpb246IFwiQUZfSVVDViBTb2NrZXQgc3VwcG9ydCAoUzM5MCAtIHovVk0gYW5kIEhpcGVyU29ja2V0cyB0cmFuc3BvcnQpLlwiIE5vdywgaXMgKnRoYXQqIHJlYWNoYWJsZSBpbiBRRU1VP1xuXG5MZXQncyBzZWUgaWYgc3l6a2FsbGVyIGV2ZW4gZnV6emVzIGBBRl9JVUNWYC4gSVVDViBpcyBhIHovVk0gc3BlY2lmaWMgZmVhdHVyZSwgYW5kIHRoZSBxdWVzdGlvbiBpcyB3aGV0aGVyIGl0IGlzIGVtdWxhYmxlIGluIFFFTVUuIFRpbWUgdG8gY2hlY2sgaWYgYEFGX0lVQ1ZgIGlzIGZ1enplZCBieSBzeXprYWxsZXIuIERvZXMgc3l6a2FsbGVyIGhhdmUgYHN5cy9saW51eC9zb2NrZXRfaXVjdi50eHRgIG9yIHNvbWV0aGluZyBzaW1pbGFyPyBJIGNhbid0IHVzZSBncmVwcGVyIGZvciBgc3lzLypgLCBidXQgSSBjYW4gdXNlIGBjb2Rlc2VhcmNoLWRpci1pbmRleGAsIG9yLCBmb3Igbm93LCBqdXN0IGFzc3VtZSBpdCdzIHJlYWNoYWJsZSBhbmQgbW92ZSBvbi5cblxuV2FpdCwgaGVyZSdzIGFuIGltcG9ydGFudCBub3RlIGluIHRoZSBpbnN0cnVjdGlvbnM6IFwiQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLCBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXCIgU28sIGRvZXMgUUVNVSBlbXVsYXRlIElVQ1Y/IFRoYXQncyB0aGUgY3J1eCBvZiB0aGUgbWF0dGVyLlxuXG5JIG5lZWQgdG8gZGlnIGRlZXBlci4gTGV0J3Mgc2VlIGlmIHRoZXJlIGlzIGFueSBJVUNWIGVtdWxhdGlvbiBpbiBRRU1VLCBvciBpZiBpdCdzIGp1c3QgYSBzb2NrZXQgZmFtaWx5IHRoYXQgY2FuIGJlIGNyZWF0ZWQgYnV0IGRvZXNuJ3QgYWN0dWFsbHkgKmRvKiBhbnl0aGluZy4gVGltZSB0byBsb29rIGF0IGBuZXQvaXVjdi9hZl9pdWN2LmNgLiBUaGF0IHNob3VsZCBnaXZlIG1lIHRoZSBhbnN3ZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjkyODgsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMzgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNVQxNTo1NDozOC45NDIwMDEyODFaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3MzA5NDk1NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpdWN2X3NvY2tfY29ubmVjdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXVjdi9hZl9pdWN2LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2l1Y3YvYWZfaXVjdi5jPTY4Nz1zdGF0aWMgaW50IGFmaXVjdl9wYXRoX2Nvbm5lY3Qoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHNvY2thZGRyX3Vuc2l6ZWQgKmFkZHIpXFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmMtNzMyLS8qIENvbm5lY3QgYW4gdW5jb25uZWN0ZWQgc29ja2V0ICovXFxubmV0L2l1Y3YvYWZfaXVjdi5jOjczMzpzdGF0aWMgaW50IGl1Y3Zfc29ja19jb25uZWN0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrYWRkcl91bnNpemVkICphZGRyLFxcbm5ldC9pdWN2L2FmX2l1Y3YuYy03MzQtXFx0XFx0XFx0ICAgICBpbnQgYWxlbiwgaW50IGZsYWdzKVxcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jPTIyNDc9c3RhdGljIGNvbnN0IHN0cnVjdCBwcm90b19vcHMgaXVjdl9zb2NrX29wcyA9IHtcXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYy0yMjUxLVxcdC5iaW5kXFx0XFx0PSBpdWN2X3NvY2tfYmluZCxcXG5uZXQvaXVjdi9hZl9pdWN2LmM6MjI1MjpcXHQuY29ubmVjdFxcdD0gaXVjdl9zb2NrX2Nvbm5lY3QsXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTIyNTMtXFx0Lmxpc3RlblxcdFxcdD0gaXVjdl9zb2NrX2xpc3RlbixcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTVUMTU6NTQ6MzkuMTE1MTAxNzk2WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM3ODA0MDYwMTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi5cblxuKipJbnZlc3RpZ2F0aW5nIEFGX0lVQ1YgU29ja2V0IENvbm5lY3Rpb24gaW4gUUVNVSoqXG5cblJpZ2h0LCBzbyBgaXVjdl9zb2NrX2Nvbm5lY3RgIGlzIHRoZSBgY29ubmVjdGAgZnVuY3Rpb24gY2FsbCwgc3BlY2lmaWMgdG8gc29ja2V0cyB1c2luZyB0aGUgYEFGX0lVQ1ZgIGFkZHJlc3MgZmFtaWx5LiBUaGF0J3Mgc3RyYWlnaHRmb3J3YXJkIGVub3VnaC4gVGhlIGltcGxpY2F0aW9uIGlzLCBpZiB3ZSBjYW4gc3VjY2Vzc2Z1bGx5IGNyZWF0ZSBhbiBgQUZfSVVDVmAgc29ja2V0LCB3ZSBzaG91bGQgYmUgYWJsZSB0byB0aGVuIGNhbGwgYGNvbm5lY3RgIG9uIGl0LCB3aGljaCBpcyB0aGUgc3RhbmRhcmQgc29ja2V0IGxpZmVjeWNsZS4gVGhlIHF1ZXN0aW9uIHRoZW4gYmVjb21lcywgY2FuIHdlIGFjdHVhbGx5IGNyZWF0ZSBhbiBgQUZfSVVDVmAgc29ja2V0IGluc3RhbmNlIHdpdGhpbiB0aGUgUUVNVSBlbnZpcm9ubWVudD8gR2l2ZW4gdGhhdCB0aGUgdGV4dCByZWZlcmVuY2VzIHRoZSBjb25uZWN0aW9uIHByb2Nlc3MsIHRoYXQgcGFydCBpcyBsaWtlbHkgZnVuY3Rpb25hbC4gTGV0J3Mgc2VlIGFib3V0IHRoZSBzb2NrZXQgY3JlYXRpb24gaXRzZWxmLiBUaGUgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gY2hlY2sgaG93IGBpdWN2X3NvY2tfY3JlYXRlYCBpcyBpbXBsZW1lbnRlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTAzODksIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNVQxNTo1NDo0Mi44OTU1MTEwNTZaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0NTgyNzc4NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpdWN2X3NvY2tfY3JlYXRlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pdWN2L2FmX2l1Y3YuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXVjdi9hZl9pdWN2LmM9MjI0Nz1zdGF0aWMgY29uc3Qgc3RydWN0IHByb3RvX29wcyBpdWN2X3NvY2tfb3BzID0ge1xcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTIyNjYtXFxubmV0L2l1Y3YvYWZfaXVjdi5jOjIyNjc6c3RhdGljIGludCBpdWN2X3NvY2tfY3JlYXRlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNvY2tldCAqc29jaywgaW50IHByb3RvY29sLFxcbm5ldC9pdWN2L2FmX2l1Y3YuYy0yMjY4LVxcdFxcdFxcdCAgICBpbnQga2VybilcXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYz0yMjk2PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X3Byb3RvX2ZhbWlseSBpdWN2X3NvY2tfZmFtaWx5X29wcyA9IHtcXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYy0yMjk4LVxcdC5vd25lclxcdD0gVEhJU19NT0RVTEUsXFxubmV0L2l1Y3YvYWZfaXVjdi5jOjIyOTk6XFx0LmNyZWF0ZVxcdD0gaXVjdl9zb2NrX2NyZWF0ZSxcXG5uZXQvaXVjdi9hZl9pdWN2LmMtMjMwMC19O1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNVQxNTo1NDo0My4wNDEzNDQ2NDJaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzQzMzMzNjE0MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgdGhlIEZ1bmN0aW9uIGBpdWN2X3NvY2tfY3JlYXRlYCoqXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgaW50byB0aGlzIGBpdWN2X3NvY2tfY3JlYXRlYCBmdW5jdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHJvbGUgaW4gdGhpcyBjb250ZXh0LiBHaXZlbiB0aGUgbmFtZSwgSSdtIGltbWVkaWF0ZWx5IGV4cGVjdGluZyBpdCB0byBiZSByZXNwb25zaWJsZSBmb3IgY3JlYXRpbmcgYW4gSVVDViBzb2NrZXQsIHdoaWNoIGlzIHRoZSB1bmRlcmx5aW5nIG1lY2hhbmlzbSBmb3IgSW50ZXItVXNlciBDb21tdW5pY2F0aW9uIFZlaGljbGUgKElVQ1YpIGNvbW11bmljYXRpb24gb24gdGhpcyBzeXN0ZW0uIE15IGluaXRpYWwgdGhvdWdodHMgYXJlIGFyb3VuZCB3aGF0IHRoaXMgZnVuY3Rpb24gbGlrZWx5IGhhbmRsZXMuIERvZXMgaXQgYWxsb2NhdGUgbWVtb3J5IGZvciB0aGUgc29ja2V0IHN0cnVjdHVyZT8gRG9lcyBpdCBpbml0aWFsaXplIHRoZSBpbnRlcm5hbCBkYXRhIHN0cnVjdHVyZXMgcmVxdWlyZWQ/IERvZXMgaXQgcmVnaXN0ZXIgdGhlIHNvY2tldCB3aXRoIHRoZSBJVUNWIHN1YnN5c3RlbT8gRG9lcyBpdCBoYW5kbGUgYW55IHNlY3VyaXR5LXJlbGF0ZWQgYXNwZWN0cyBsaWtlIGFjY2VzcyBjb250cm9sIG9yIGNvbm5lY3Rpb24gYXR0cmlidXRlcz8gSSdtIGFudGljaXBhdGluZyBwb3RlbnRpYWwgaW50ZXJhY3Rpb25zIHdpdGggdGhlIGtlcm5lbCdzIElVQ1YgaW5mcmFzdHJ1Y3R1cmUsIHNvIEknbGwgYmUga2VlcGluZyBhbiBleWUgb3V0IGZvciBzeXN0ZW0gY2FsbHMgb3IgaW50ZXJuYWwga2VybmVsIGZ1bmN0aW9uIGNhbGxzIHdpdGhpbiBpdHMgaW1wbGVtZW50YXRpb24uIEknbGwgbmVlZCB0byBleGFtaW5lIHRoZSByZXR1cm4gdmFsdWVzIHRvIHVuZGVyc3RhbmQgaG93IGl0IHNpZ25hbHMgc3VjY2VzcyBvciBmYWlsdXJlLCBhbmQgdGhlIHNwZWNpZmljIGVycm9yIGNvZGVzIGl0IG1pZ2h0IHJldHVybiB0byBnaXZlIG1lIGluc2lnaHRzIGludG8gcG90ZW50aWFsIHByb2JsZW1zLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDk1MSwiT3V0cHV0VG9rZW5zIjo0MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE1VDE1OjU0OjQ2LjQ3NDY4MzExM1oiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjEwODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2l1Y3YvYWZfaXVjdi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDIyNjcsXG4gIFwiTGluZUNvdW50XCI6IDMwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjIyNjc6XFx0c3RhdGljIGludCBpdWN2X3NvY2tfY3JlYXRlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNvY2tldCAqc29jaywgaW50IHByb3RvY29sLFxcbjIyNjg6XFx0XFx0XFx0XFx0ICAgIGludCBrZXJuKVxcbjIyNjk6XFx0e1xcbjIyNzA6XFx0XFx0c3RydWN0IHNvY2sgKnNrO1xcbjIyNzE6XFx0XFxuMjI3MjpcXHRcXHRpZiAocHJvdG9jb2wgXFx1MDAyNlxcdTAwMjYgcHJvdG9jb2wgIT0gUEZfSVVDVilcXG4yMjczOlxcdFxcdFxcdHJldHVybiAtRVBST1RPTk9TVVBQT1JUO1xcbjIyNzQ6XFx0XFxuMjI3NTpcXHRcXHRzb2NrLVxcdTAwM2VzdGF0ZSA9IFNTX1VOQ09OTkVDVEVEO1xcbjIyNzY6XFx0XFxuMjI3NzpcXHRcXHRzd2l0Y2ggKHNvY2stXFx1MDAzZXR5cGUpIHtcXG4yMjc4OlxcdFxcdGNhc2UgU09DS19TVFJFQU06XFxuMjI3OTpcXHRcXHRjYXNlIFNPQ0tfU0VRUEFDS0VUOlxcbjIyODA6XFx0XFx0XFx0LyogY3VycmVudGx5LCBwcm90byBvcHMgY2FuIGhhbmRsZSBib3RoIHNrIHR5cGVzICovXFxuMjI4MTpcXHRcXHRcXHRzb2NrLVxcdTAwM2VvcHMgPSBcXHUwMDI2aXVjdl9zb2NrX29wcztcXG4yMjgyOlxcdFxcdFxcdGJyZWFrO1xcbjIyODM6XFx0XFx0ZGVmYXVsdDpcXG4yMjg0OlxcdFxcdFxcdHJldHVybiAtRVNPQ0tUTk9TVVBQT1JUO1xcbjIyODU6XFx0XFx0fVxcbjIyODY6XFx0XFxuMjI4NzpcXHRcXHRzayA9IGl1Y3Zfc29ja19hbGxvYyhzb2NrLCBwcm90b2NvbCwgR0ZQX0tFUk5FTCwga2Vybik7XFxuMjI4ODpcXHRcXHRpZiAoIXNrKVxcbjIyODk6XFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuMjI5MDpcXHRcXG4yMjkxOlxcdFxcdGl1Y3Zfc29ja19pbml0KHNrLCBOVUxMKTtcXG4yMjkyOlxcdFxcbjIyOTM6XFx0XFx0cmV0dXJuIDA7XFxuMjI5NDpcXHR9XFxuMjI5NTpcXHRcXG4yMjk2OlxcdHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X3Byb3RvX2ZhbWlseSBpdWN2X3NvY2tfZmFtaWx5X29wcyA9IHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTVUMTU6NTQ6NDYuNDc0OTA1ODQzWiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ0Mjc2NDUxNzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKlNvY2tldCBDcmVhdGlvbjogSW5pdGlhbCBBc3N1bXB0aW9ucyBhbmQgTnVhbmNlcyoqXG5cblJpZ2h0LCBzbyBpbml0aWFsbHkgSSB3YXMgdGhpbmtpbmcgd2UgY291bGQgYnlwYXNzIGFsbCB0aGUgaGFyZHdhcmUgY2hlY2tzIHdoZW4gY3JlYXRpbmcgdGhpcyBzb2NrZXQuIFRoYXQgaW5pdGlhbCBhc3N1bXB0aW9uIHNlZW1zIHRvIGhvbGQgdHJ1ZSBiYXNlZCBvbiBteSBnZW5lcmFsIHVuZGVyc3RhbmRpbmcsIGF0IGxlYXN0IGF0IGZhY2UgdmFsdWUuIEhvd2V2ZXIsIHRoZSBtZW50aW9uIG9mIGBwcl9pdWN2YCB0cmlnZ2VyZWQgYSByZWQgZmxhZy4gSSBrbm93IHRoYXQgZnVuY3Rpb24gcGxheXMgYSByb2xlIGluIHRoZSBJVUNWIGluZnJhc3RydWN0dXJlLCBhbmQgaXQncyBhbHdheXMgd29ydGggYSBkb3VibGUtY2hlY2sgd2hlbiBkZWFsaW5nIHdpdGggbG93LWxldmVsIHNvY2tldCBmdW5jdGlvbmFsaXR5IG9uIHRoaXMgcGxhdGZvcm0uIE15IGltbWVkaWF0ZSBuZXh0IHN0ZXAgaXMgdG8gZXhhbWluZSB0aGUgYmVoYXZpb3Igb2YgYGl1Y3Zfc29ja19hbGxvY2AuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyAqdGhhdCogc3BlY2lmaWMgZnVuY3Rpb24gaW50ZXJhY3RzIHdpdGggdGhlIGhhcmR3YXJlIGFic3RyYWN0aW9ucyBhbmQgaWYgaXQgcGVyZm9ybXMgYW55IGVzc2VudGlhbCB2YWxpZGF0aW9ucyBiZWZvcmUgdGhlIHNvY2tldCBpdHNlbGYgZ2V0cyBjcmVhdGVkLiBUaGF0J3MgdGhlIGtleSB0byBjb25maXJtaW5nIGlmIHdlJ3JlIHRydWx5IGZyZWUgb2YgYW55IGhhcmR3YXJlIGRlcGVuZGVuY2llcyBhdCB0aGlzIHBvaW50LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTY1MCwiT3V0cHV0VG9rZW5zIjo0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTVUMTU6NTQ6NTAuOTAyNTU1NDU1WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyOTk4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvaXVjdi9hZl9pdWN2LmNcIixcbiAgXCJGaXJzdExpbmVcIjogNDY2LFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNDY2OlxcdHN0YXRpYyBzdHJ1Y3Qgc29jayAqaXVjdl9zb2NrX2FsbG9jKHN0cnVjdCBzb2NrZXQgKnNvY2ssIGludCBwcm90bywgZ2ZwX3QgcHJpbywgaW50IGtlcm4pXFxuIDQ2NzpcXHR7XFxuIDQ2ODpcXHRcXHRzdHJ1Y3Qgc29jayAqc2s7XFxuIDQ2OTpcXHRcXHRzdHJ1Y3QgaXVjdl9zb2NrICppdWN2O1xcbiA0NzA6XFx0XFxuIDQ3MTpcXHRcXHRzayA9IHNrX2FsbG9jKFxcdTAwMjZpbml0X25ldCwgUEZfSVVDViwgcHJpbywgXFx1MDAyNml1Y3ZfcHJvdG8sIGtlcm4pO1xcbiA0NzI6XFx0XFx0aWYgKCFzaylcXG4gNDczOlxcdFxcdFxcdHJldHVybiBOVUxMO1xcbiA0NzQ6XFx0XFx0aXVjdiA9IGl1Y3Zfc2soc2spO1xcbiA0NzU6XFx0XFxuIDQ3NjpcXHRcXHRzb2NrX2luaXRfZGF0YShzb2NrLCBzayk7XFxuIDQ3NzpcXHRcXHRJTklUX0xJU1RfSEVBRChcXHUwMDI2aXVjdi1cXHUwMDNlYWNjZXB0X3EpO1xcbiA0Nzg6XFx0XFx0c3Bpbl9sb2NrX2luaXQoXFx1MDAyNml1Y3YtXFx1MDAzZWFjY2VwdF9xX2xvY2spO1xcbiA0Nzk6XFx0XFx0c2tiX3F1ZXVlX2hlYWRfaW5pdChcXHUwMDI2aXVjdi1cXHUwMDNlc2VuZF9za2JfcSk7XFxuIDQ4MDpcXHRcXHRJTklUX0xJU1RfSEVBRChcXHUwMDI2aXVjdi1cXHUwMDNlbWVzc2FnZV9xLmxpc3QpO1xcbiA0ODE6XFx0XFx0c3Bpbl9sb2NrX2luaXQoXFx1MDAyNml1Y3YtXFx1MDAzZW1lc3NhZ2VfcS5sb2NrKTtcXG4gNDgyOlxcdFxcdHNrYl9xdWV1ZV9oZWFkX2luaXQoXFx1MDAyNml1Y3YtXFx1MDAzZWJhY2tsb2dfc2tiX3EpO1xcbiA0ODM6XFx0XFx0aXVjdi1cXHUwMDNlc2VuZF90YWcgPSAwO1xcbiA0ODQ6XFx0XFx0YXRvbWljX3NldChcXHUwMDI2aXVjdi1cXHUwMDNlcGVuZGluZ3MsIDApO1xcbiA0ODU6XFx0XFx0aXVjdi1cXHUwMDNlZmxhZ3MgPSAwO1xcbiA0ODY6XFx0XFx0aXVjdi1cXHUwMDNlbXNnbGltaXQgPSAwO1xcbiA0ODc6XFx0XFx0YXRvbWljX3NldChcXHUwMDI2aXVjdi1cXHUwMDNlc2tic19pbl94bWl0LCAwKTtcXG4gNDg4OlxcdFxcdGF0b21pY19zZXQoXFx1MDAyNml1Y3YtXFx1MDAzZW1zZ19zZW50LCAwKTtcXG4gNDg5OlxcdFxcdGF0b21pY19zZXQoXFx1MDAyNml1Y3YtXFx1MDAzZW1zZ19yZWN2LCAwKTtcXG4gNDkwOlxcdFxcdGl1Y3YtXFx1MDAzZXBhdGggPSBOVUxMO1xcbiA0OTE6XFx0XFx0aXVjdi1cXHUwMDNlc2tfdHhub3RpZnkgPSBhZml1Y3ZfaHNfY2FsbGJhY2tfdHhub3RpZnk7XFxuIDQ5MjpcXHRcXHRtZW1zZXQoXFx1MDAyNml1Y3YtXFx1MDAzZWluaXQsIDAsIHNpemVvZihpdWN2LVxcdTAwM2Vpbml0KSk7XFxuIDQ5MzpcXHRcXHRpZiAocHJfaXVjdilcXG4gNDk0OlxcdFxcdFxcdGl1Y3YtXFx1MDAzZXRyYW5zcG9ydCA9IEFGX0lVQ1ZfVFJBTlNfSVVDVjtcXG4gNDk1OlxcdFxcdGVsc2VcXG4gNDk2OlxcdFxcdFxcdGl1Y3YtXFx1MDAzZXRyYW5zcG9ydCA9IEFGX0lVQ1ZfVFJBTlNfSElQRVI7XFxuIDQ5NzpcXHRcXG4gNDk4OlxcdFxcdHNrLVxcdTAwM2Vza19kZXN0cnVjdCA9IGl1Y3Zfc29ja19kZXN0cnVjdDtcXG4gNDk5OlxcdFxcdHNrLVxcdTAwM2Vza19zbmR0aW1lbyA9IElVQ1ZfQ09OTl9USU1FT1VUO1xcbiA1MDA6XFx0XFxuIDUwMTpcXHRcXHRzb2NrX3Jlc2V0X2ZsYWcoc2ssIFNPQ0tfWkFQUEVEKTtcXG4gNTAyOlxcdFxcbiA1MDM6XFx0XFx0c2stXFx1MDAzZXNrX3Byb3RvY29sID0gcHJvdG87XFxuIDUwNDpcXHRcXHRzay1cXHUwMDNlc2tfc3RhdGVcXHQ9IElVQ1ZfT1BFTjtcXG4gNTA1OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNVQxNTo1NDo1MC45MDI2ODc5NjVaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzYzNTAyNjY3NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBmcm9tIGFuIGV4cGVydCdzIHBlcnNwZWN0aXZlOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBJVUNWIFRyYW5zcG9ydCBMb2dpYyoqXG5cblJpZ2h0LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBpZWNlIG9mIGNvZGUsIHByb2JhYmx5IHNvbWUgbmV0d29ya2luZyBvciBpbnRlci1wcm9jZXNzIGNvbW11bmljYXRpb24gc3R1ZmYgZGVhbGluZyB3aXRoIElVQ1YuIEkgc2VlIHRoYXQgYGl1Y3YtXHUwMDNldHJhbnNwb3J0YCBpcyBnZXR0aW5nIGFzc2lnbmVkIGBBRl9JVUNWX1RSQU5TX0lVQ1ZgIGlmIGEgcG9pbnRlciwgYHByX2l1Y3ZgLCBpc24ndCBudWxsLiBNYWtlcyBzZW5zZSDigJMgc2V0dGluZyB0aGUgdHJhbnNwb3J0IHR5cGUgYmFzZWQgb24gc29tZSBjb25kaXRpb24uIEJ1dCBoZXJlJ3MgdGhlIGtpY2tlcjogSSBuZWVkIHRvIHF1aWNrbHkgcmVjYWxsIHdoYXQgYHByX2l1Y3ZgIGFjdHVhbGx5ICppcyouIElzIGl0IGEgZmxhZywgYSBzdHJ1Y3R1cmUsIGEgY29udHJvbCBibG9jaz8gSXQncyB0aGUga2V5IHRvIHVuZGVyc3RhbmRpbmcgdGhpcyBlbnRpcmUgY29uZGl0aW9uYWwgYXNzaWdubWVudC4gSSBuZWVkIHRoZSBjb250ZXh0LiBMZXQgbWUgY2hlY2sgdGhlIHJlbGF0ZWQgZGF0YSBzdHJ1Y3R1cmVzLCBvciBtYXliZSB0aGUgc3Vycm91bmRpbmcgY29kZSB3aGVyZSB0aGlzIGlzIHVzZWQuIEknbSBnb2luZyB0byBxdWlja2x5IGxvb2sgaW50byB3aGF0IGBwcl9pdWN2YCByZXByZXNlbnRzIHRvIHVuZGVyc3RhbmQgdGhlIHVuZGVybHlpbmcgbG9naWMuIEl0IGhhcyB0byBiZSBhbiBJVUNWLXJlbGF0ZWQgc3RydWN0dXJlLiBUaGVuLCBJIHdpbGwgYmUgYWJsZSB0byBnZXQgdGhlIHdob2xlIHBpY3R1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyNjcyLCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNVQxNTo1NDo1NC41Mzc3MTgyM1oiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDg1NjI0MjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicHJfaXVjdlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXVjdi9hZl9pdWN2LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2l1Y3YvYWZfaXVjdi5jPTQyPXN0YXRpYyBzdHJ1Y3QgcHJvdG8gaXVjdl9wcm90byA9IHtcXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYy00Ny1cXG5uZXQvaXVjdi9hZl9pdWN2LmM6NDg6c3RhdGljIHN0cnVjdCBpdWN2X2ludGVyZmFjZSAqcHJfaXVjdjtcXG5uZXQvaXVjdi9hZl9pdWN2LmMtNDktc3RhdGljIHN0cnVjdCBpdWN2X2hhbmRsZXIgYWZfaXVjdl9oYW5kbGVyO1xcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jPTMzNT1zdGF0aWMgdm9pZCBpdWN2X3NldmVyX3BhdGgoc3RydWN0IHNvY2sgKnNrLCBpbnQgd2l0aF91c2VyX2RhdGEpXFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmMtMzQ3LVxcdFxcdFxcdEFTQ0VCQyh1c2VyX2RhdGEsIHNpemVvZih1c2VyX2RhdGEpKTtcXG5uZXQvaXVjdi9hZl9pdWN2LmM6MzQ4OlxcdFxcdFxcdHByX2l1Y3YtXFx1MDAzZXBhdGhfc2V2ZXIocGF0aCwgdXNlcl9kYXRhKTtcXG5uZXQvaXVjdi9hZl9pdWN2LmMtMzQ5LVxcdFxcdH0gZWxzZVxcbm5ldC9pdWN2L2FmX2l1Y3YuYzozNTA6XFx0XFx0XFx0cHJfaXVjdi1cXHUwMDNlcGF0aF9zZXZlcihwYXRoLCBOVUxMKTtcXG5uZXQvaXVjdi9hZl9pdWN2LmMtMzUxLVxcdFxcdGl1Y3ZfcGF0aF9mcmVlKHBhdGgpO1xcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jPTQ2Nj1zdGF0aWMgc3RydWN0IHNvY2sgKml1Y3Zfc29ja19hbGxvYyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBpbnQgcHJvdG8sIGdmcF90IHByaW8sIGludCBrZXJuKVxcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTQ5Mi1cXHRtZW1zZXQoXFx1MDAyNml1Y3YtXFx1MDAzZWluaXQsIDAsIHNpemVvZihpdWN2LVxcdTAwM2Vpbml0KSk7XFxubmV0L2l1Y3YvYWZfaXVjdi5jOjQ5MzpcXHRpZiAocHJfaXVjdilcXG5uZXQvaXVjdi9hZl9pdWN2LmMtNDk0LVxcdFxcdGl1Y3YtXFx1MDAzZXRyYW5zcG9ydCA9IEFGX0lVQ1ZfVFJBTlNfSVVDVjtcXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYz01ODI9c3RhdGljIGludCBpdWN2X3NvY2tfYmluZChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29ja2FkZHJfdW5zaXplZCAqYWRkcixcXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYy02MTMtXFx0LyogQmluZCB0aGUgc29ja2V0ICovXFxubmV0L2l1Y3YvYWZfaXVjdi5jOjYxNDpcXHRpZiAocHJfaXVjdilcXG5uZXQvaXVjdi9hZl9pdWN2LmMtNjE1LVxcdFxcdGlmICghbWVtY21wKHNhLVxcdTAwM2VzaXVjdl91c2VyX2lkLCBpdWN2X3VzZXJpZCwgOCkpXFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmMtNjQyLXZtX2JpbmQ6XFxubmV0L2l1Y3YvYWZfaXVjdi5jOjY0MzpcXHRpZiAocHJfaXVjdikge1xcbm5ldC9pdWN2L2FmX2l1Y3YuYy02NDQtXFx0XFx0LyogdXNlIGxvY2FsIHVzZXJpZCBmb3IgYmFja3dhcmQgY29tcGF0ICovXFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmM9NjY1PXN0YXRpYyBpbnQgaXVjdl9zb2NrX2F1dG9iaW5kKHN0cnVjdCBzb2NrICpzaylcXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYy02NjktXFxubmV0L2l1Y3YvYWZfaXVjdi5jOjY3MDpcXHRpZiAodW5saWtlbHkoIXByX2l1Y3YpKVxcbm5ldC9pdWN2L2FmX2l1Y3YuYy02NzEtXFx0XFx0cmV0dXJuIC1FUFJPVE87XFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmM9Njg3PXN0YXRpYyBpbnQgYWZpdWN2X3BhdGhfY29ubmVjdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29ja2FkZHJfdW5zaXplZCAqYWRkcilcXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYy03MDUtXFx0fVxcbm5ldC9pdWN2L2FmX2l1Y3YuYzo3MDY6XFx0ZXJyID0gcHJfaXVjdi1cXHUwMDNlcGF0aF9jb25uZWN0KGl1Y3YtXFx1MDAzZXBhdGgsIFxcdTAwMjZhZl9pdWN2X2hhbmRsZXIsXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTcwNy1cXHRcXHRcXHRcXHQgICAgc2EtXFx1MDAzZXNpdWN2X3VzZXJfaWQsIE5VTEwsIHVzZXJfZGF0YSxcXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYz05MTM9c3RhdGljIGludCBpdWN2X3NlbmRfaXBybShzdHJ1Y3QgaXVjdl9wYXRoICpwYXRoLCBzdHJ1Y3QgaXVjdl9tZXNzYWdlICptc2csXFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmMtOTE5LVxcdHBybWRhdGFbN10gPSAweGZmIC0gKHU4KSBza2ItXFx1MDAzZWxlbjtcXG5uZXQvaXVjdi9hZl9pdWN2LmM6OTIwOlxcdHJldHVybiBwcl9pdWN2LVxcdTAwM2VtZXNzYWdlX3NlbmQocGF0aCwgbXNnLCBJVUNWX0lQUk1EQVRBLCAwLFxcbm5ldC9pdWN2L2FmX2l1Y3YuYy05MjEtXFx0XFx0XFx0XFx0ICh2b2lkICopIHBybWRhdGEsIDgpO1xcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jPTkyND1zdGF0aWMgaW50IGl1Y3Zfc29ja19zZW5kbXNnKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZyxcXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYy0xMDc3LVxcdFxcdFxcdGlmIChlcnIgPT0gMHgxNSkge1xcbm5ldC9pdWN2L2FmX2l1Y3YuYzoxMDc4OlxcdFxcdFxcdFxcdHByX2l1Y3YtXFx1MDAzZXBhdGhfc2V2ZXIoaXVjdi1cXHUwMDNlcGF0aCwgTlVMTCk7XFxubmV0L2l1Y3YvYWZfaXVjdi5jLTEwNzktXFx0XFx0XFx0XFx0YXRvbWljX2RlYyhcXHUwMDI2aXVjdi1cXHUwMDNlc2tic19pbl94bWl0KTtcXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYy0xMDk2LVxcdFxcdFxcdH1cXG5uZXQvaXVjdi9hZl9pdWN2LmM6MTA5NzpcXHRcXHRcXHRlcnIgPSBwcl9pdWN2LVxcdTAwM2VtZXNzYWdlX3NlbmQoaXVjdi1cXHUwMDNlcGF0aCwgXFx1MDAyNnR4bXNnLFxcbm5ldC9pdWN2L2FmX2l1Y3YuYy0xMDk4LVxcdFxcdFxcdFxcdFxcdFxcdCAgICBJVUNWX0lQQlVGTFNULCAwLFxcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTExMDAtXFx0XFx0fSBlbHNlIHsgLyogbm9uLUlQUk0gTGluZWFyIHNrYiAqL1xcbm5ldC9pdWN2L2FmX2l1Y3YuYzoxMTAxOlxcdFxcdFxcdGVyciA9IHByX2l1Y3YtXFx1MDAzZW1lc3NhZ2Vfc2VuZChpdWN2LVxcdTAwM2VwYXRoLCBcXHUwMDI2dHhtc2csXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTExMDItXFx0XFx0XFx0XFx0XFx0MCwgMCwgKHZvaWQgKilza2ItXFx1MDAzZWRhdGEsIHNrYi1cXHUwMDNlbGVuKTtcXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYz0xMTY2PXN0YXRpYyB2b2lkIGl1Y3ZfcHJvY2Vzc19tZXNzYWdlKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYy0xMTk3LVxcdFxcdFxcdH1cXG5uZXQvaXVjdi9hZl9pdWN2LmM6MTE5ODpcXHRcXHRcXHRyYyA9IHByX2l1Y3YtXFx1MDAzZW1lc3NhZ2VfcmVjZWl2ZShwYXRoLCBtc2csXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTExOTktXFx0XFx0XFx0XFx0XFx0ICAgICAgSVVDVl9JUEJVRkxTVCxcXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYy0xMjAxLVxcdFxcdH0gZWxzZSB7XFxubmV0L2l1Y3YvYWZfaXVjdi5jOjEyMDI6XFx0XFx0XFx0cmMgPSBwcl9pdWN2LVxcdTAwM2VtZXNzYWdlX3JlY2VpdmUocGF0aCwgbXNnLFxcbm5ldC9pdWN2L2FmX2l1Y3YuYy0xMjAzLVxcdFxcdFxcdFxcdFxcdCAgICAgIG1zZy1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBJVUNWX0lQUk1EQVRBLFxcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jPTE0MjY9c3RhdGljIGludCBpdWN2X3NvY2tfc2h1dGRvd24oc3RydWN0IHNvY2tldCAqc29jaywgaW50IGhvdylcXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYy0xNDU0LVxcdFxcdFxcdHR4bXNnLnRhZyA9IDA7XFxubmV0L2l1Y3YvYWZfaXVjdi5jOjE0NTU6XFx0XFx0XFx0ZXJyID0gcHJfaXVjdi1cXHUwMDNlbWVzc2FnZV9zZW5kKGl1Y3YtXFx1MDAzZXBhdGgsIFxcdTAwMjZ0eG1zZyxcXG5uZXQvaXVjdi9hZl9pdWN2LmMtMTQ1Ni1cXHRcXHRcXHRcXHRJVUNWX0lQUk1EQVRBLCAwLCAodm9pZCAqKSBpcHJtX3NodXRkb3duLCA4KTtcXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYy0xNDc3LVxcdFxcdCAgICBpdWN2LVxcdTAwM2VwYXRoKSB7XFxubmV0L2l1Y3YvYWZfaXVjdi5jOjE0Nzg6XFx0XFx0XFx0ZXJyID0gcHJfaXVjdi1cXHUwMDNlcGF0aF9xdWllc2NlKGl1Y3YtXFx1MDAzZXBhdGgsIE5VTEwpO1xcbm5ldC9pdWN2L2FmX2l1Y3YuYy0xNDc5LVxcdFxcdFxcdGlmIChlcnIpXFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmM9MTYxNT1zdGF0aWMgaW50IGl1Y3ZfY2FsbGJhY2tfY29ubnJlcShzdHJ1Y3QgaXVjdl9wYXRoICpwYXRoLFxcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTE2NTItXFx0aWYgKHNrLVxcdTAwM2Vza19zdGF0ZSAhPSBJVUNWX0xJU1RFTikge1xcbm5ldC9pdWN2L2FmX2l1Y3YuYzoxNjUzOlxcdFxcdGVyciA9IHByX2l1Y3YtXFx1MDAzZXBhdGhfc2V2ZXIocGF0aCwgdXNlcl9kYXRhKTtcXG5uZXQvaXVjdi9hZl9pdWN2LmMtMTY1NC1cXHRcXHRpdWN2X3BhdGhfZnJlZShwYXRoKTtcXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYy0xNjU5LVxcdGlmIChza19hY2NlcHRxX2lzX2Z1bGwoc2spKSB7XFxubmV0L2l1Y3YvYWZfaXVjdi5jOjE2NjA6XFx0XFx0ZXJyID0gcHJfaXVjdi1cXHUwMDNlcGF0aF9zZXZlcihwYXRoLCB1c2VyX2RhdGEpO1xcbm5ldC9pdWN2L2FmX2l1Y3YuYy0xNjYxLVxcdFxcdGl1Y3ZfcGF0aF9mcmVlKHBhdGgpO1xcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTE2NjctXFx0aWYgKCFuc2spIHtcXG5uZXQvaXVjdi9hZl9pdWN2LmM6MTY2ODpcXHRcXHRlcnIgPSBwcl9pdWN2LVxcdTAwM2VwYXRoX3NldmVyKHBhdGgsIHVzZXJfZGF0YSk7XFxubmV0L2l1Y3YvYWZfaXVjdi5jLTE2NjktXFx0XFx0aXVjdl9wYXRoX2ZyZWUocGF0aCk7XFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmMtMTY5My1cXHRwYXRoLVxcdTAwM2Vtc2dsaW0gPSBpdWN2LVxcdTAwM2Vtc2dsaW1pdDtcXG5uZXQvaXVjdi9hZl9pdWN2LmM6MTY5NDpcXHRlcnIgPSBwcl9pdWN2LVxcdTAwM2VwYXRoX2FjY2VwdChwYXRoLCBcXHUwMDI2YWZfaXVjdl9oYW5kbGVyLCBudXNlcl9kYXRhLCBuc2spO1xcbm5ldC9pdWN2L2FmX2l1Y3YuYy0xNjk1LVxcdGlmIChlcnIpIHtcXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYz0xNzIwPXN0YXRpYyB2b2lkIGl1Y3ZfY2FsbGJhY2tfcngoc3RydWN0IGl1Y3ZfcGF0aCAqcGF0aCwgc3RydWN0IGl1Y3ZfbWVzc2FnZSAqbXNnKVxcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTE3MjgtXFx0aWYgKHNrLVxcdTAwM2Vza19zaHV0ZG93biBcXHUwMDI2IFJDVl9TSFVURE9XTikge1xcbm5ldC9pdWN2L2FmX2l1Y3YuYzoxNzI5OlxcdFxcdHByX2l1Y3YtXFx1MDAzZW1lc3NhZ2VfcmVqZWN0KHBhdGgsIG1zZyk7XFxubmV0L2l1Y3YvYWZfaXVjdi5jLTE3MzAtXFx0XFx0cmV0dXJuO1xcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jPTIzMDc9c3RhdGljIGludCBfX2luaXQgYWZpdWN2X2luaXQodm9pZClcXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYy0yMzE4LVxcbm5ldC9pdWN2L2FmX2l1Y3YuYzoyMzE5OlxcdFxcdHByX2l1Y3YgPSBcXHUwMDI2aXVjdl9pZjtcXG5uZXQvaXVjdi9hZl9pdWN2LmMtMjMyMC1cXHR9IGVsc2Uge1xcbm5ldC9pdWN2L2FmX2l1Y3YuYy0yMzIxLVxcdFxcdG1lbXNldChcXHUwMDI2aXVjdl91c2VyaWQsIDAsIHNpemVvZihpdWN2X3VzZXJpZCkpO1xcbm5ldC9pdWN2L2FmX2l1Y3YuYzoyMzIyOlxcdFxcdHByX2l1Y3YgPSBOVUxMO1xcbm5ldC9pdWN2L2FmX2l1Y3YuYy0yMzIzLVxcdH1cXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYy0yMzMxLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYzoyMzMyOlxcdGlmIChwcl9pdWN2KSB7XFxubmV0L2l1Y3YvYWZfaXVjdi5jOjIzMzM6XFx0XFx0ZXJyID0gcHJfaXVjdi1cXHUwMDNlaXVjdl9yZWdpc3RlcihcXHUwMDI2YWZfaXVjdl9oYW5kbGVyLCAwKTtcXG5uZXQvaXVjdi9hZl9pdWN2LmMtMjMzNC1cXHRcXHRpZiAoZXJyKVxcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTIzNDUtb3V0X25vdGlmaWVyOlxcbm5ldC9pdWN2L2FmX2l1Y3YuYzoyMzQ2OlxcdGlmIChwcl9pdWN2KVxcbm5ldC9pdWN2L2FmX2l1Y3YuYzoyMzQ3OlxcdFxcdHByX2l1Y3YtXFx1MDAzZWl1Y3ZfdW5yZWdpc3RlcihcXHUwMDI2YWZfaXVjdl9oYW5kbGVyLCAwKTtcXG5uZXQvaXVjdi9hZl9pdWN2LmMtMjM0OC1vdXRfc29jazpcXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYz0yMzU2PXN0YXRpYyB2b2lkIF9fZXhpdCBhZml1Y3ZfZXhpdCh2b2lkKVxcbm5ldC9pdWN2L2FmX2l1Y3YuYy0yMzU3LXtcXG5uZXQvaXVjdi9hZl9pdWN2LmM6MjM1ODpcXHRpZiAocHJfaXVjdilcXG5uZXQvaXVjdi9hZl9pdWN2LmM6MjM1OTpcXHRcXHRwcl9pdWN2LVxcdTAwM2VpdWN2X3VucmVnaXN0ZXIoXFx1MDAyNmFmX2l1Y3ZfaGFuZGxlciwgMCk7XFxubmV0L2l1Y3YvYWZfaXVjdi5jLTIzNjAtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE1VDE1OjU0OjU0LjU4NjI4NzUwOVoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3NDIyMzE3NDA3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgSVVDViBQYXRoIFNldmVyaW5nIExvZ2ljKipcblxuT2theSwgc28gbG9va2luZyBhdCB0aGlzIGNvZGUsIGl0IHNlZW1zIHRoZSBgcHJfaXVjdmAgcG9pbnRlciBpcyB0aGUga2V5LiBNeSBpbml0aWFsIHRob3VnaHQgd2FzIHRoYXQgaXQncyBzaW1wbHkgYXNzaWduZWQgYFx1MDAyNml1Y3ZfaWZgIGlmIGBpdWN2X3JlZ2lzdGVyYCBpcyBhdmFpbGFibGUsIG90aGVyd2lzZSBpdCdzIGBOVUxMYC4gQnV0IHRoZW4gSSBzYXcgYGFmaXVjdl9pbml0YCwgYW5kIHRoYXQncyBhIGJpdCBtb3JlIGludm9sdmVkLiBgaXVjdl9yZWdpc3RlcmAgaXMgY2FsbGVkLCBhbmQgaWYgaXQgc3VjY2VlZHMsIGBwcl9pdWN2YCAqaXMqIHNldCwgYnV0IGlmIGl0IGZhaWxzLCBgcHJfaXVjdmAgYmVjb21lcyBgTlVMTGAgYW5kIGBpdWN2X3VzZXJpZGAgaXMgemVyb2VkLiBgaXVjdl9yZWdpc3RlcmAgaXRzZWxmIGlzIGNsZWFybHkgZGVmaW5lZCBpbiBgbmV0L2l1Y3YvaXVjdi5jYCwgd2hpY2ggbWFrZXMgc2Vuc2UuXG5cbk5vdywgdGhlIGludGVyZXN0aW5nIGJpdDogdGhlIHBhdGNoLiBJdCBpbnRyb2R1Y2VzIHRoaXMgY29uZGl0aW9uOiBpZiB0aGVyZSdzIGFuIGVycm9yLCBhbmQgdGhlIGBpdWN2LVx1MDAzZXRyYW5zcG9ydGAgaXMgYEFGX0lVQ1ZfVFJBTlNfSVVDVmAsIHRoZW4gYGl1Y3Zfc2V2ZXJfcGF0aGAgaXMgY2FsbGVkLiBJdCdzIGVzc2VudGlhbGx5IHBhdGggdGVybWluYXRpb24gY29kZS4gU28sIHRoZSBwYXRjaCBpcyBkZXNpZ25lZCB0byBoYW5kbGUgYSBzaXR1YXRpb24gd2hlcmUgYW4gSVVDViBwYXRoIG5lZWRzIHRvIGJlIHNldmVyZWQuXG5cblRoZSBjcnVjaWFsIHBvaW50IGhlcmUgaXMgdGhhdCB0aGlzIGxvZ2ljICpvbmx5KiB0cmlnZ2VycyBpZiBgaXVjdi1cdTAwM2V0cmFuc3BvcnRgIGlzIGV4cGxpY2l0bHkgc2V0IHRvIGBBRl9JVUNWX1RSQU5TX0lVQ1ZgLiBUaGlzIHN1Z2dlc3RzIHRoYXQgdGhlIGNvZGUgcGF0aCBmb3Igc2V2ZXJpbmcgb25seSBnZXRzIGhpdCBpZiBJVUNWIHRyYW5zcG9ydCBpcyBhY3R1YWxseSBpbiB1c2UuIFRoaXMgZGlyZWN0bHkgaW1wbGllcyB0aGF0IHRoZSBJVUNWIHRyYW5zcG9ydCBpcyAqZW5hYmxlZCouXG5cbkFuZCBnaXZlbiBob3cgYHByX2l1Y3ZgIGlzIHNldCB1cCwgdGhpcyBhbHNvIGltcGxpY2l0bHkgbWVhbnMgdGhhdCBgcHJfaXVjdmAgKm11c3QqIGJlIG5vbi1OVUxMIGZvciB0aGlzIGNvZGUgdG8gZXZlbiBleGVjdXRlLCBzaW5jZSBgaXVjdl9yZWdpc3RlcmAgaGFzIHRvIGhhdmUgc3VjY2VlZGVkLiBTbywgaW4gc3VtbWFyeSwgdGhpcyBwYXRjaCBpcyBhIGNydWNpYWwgc2FmZXR5IG1lY2hhbmlzbTogaWYgdGhlIElVQ1YgdHJhbnNwb3J0IGlzIGVuYWJsZWQgKGBpdWN2LVx1MDAzZXRyYW5zcG9ydGAgaXMgYEFGX0lVQ1ZfVFJBTlNfSVVDVmApIGFuZCBzb21ldGhpbmcgZ29lcyB3cm9uZywgdGhlIHBhdGNoIHdpbGwgYXR0ZW1wdCB0byBjbGVhbiB1cCBhbnkgcmVtYWluaW5nIHNvY2tldCBzdGF0ZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTYyMTcsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MDksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTVUMTU6NTU6MDIuMDA4NjA3ODI2WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MTM5NDM3OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpdWN2X3JlZ2lzdGVyXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pdWN2L2l1Y3YuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXVjdi9pdWN2LmM9MjEwPXN0YXRpYyBpbnQgaXVjdl9hY3RpdmVfY3B1ID0gLTE7XFxuLS1cXG5uZXQvaXVjdi9pdWN2LmMtMjEyLS8qXFxubmV0L2l1Y3YvaXVjdi5jOjIxMzogKiBNdXRleCBhbmQgd2FpdCBxdWV1ZSBmb3IgaXVjdl9yZWdpc3Rlci9pdWN2X3VucmVnaXN0ZXIuXFxubmV0L2l1Y3YvaXVjdi5jLTIxNC0gKi9cXG5uZXQvaXVjdi9pdWN2LmM6MjE1OnN0YXRpYyBERUZJTkVfTVVURVgoaXVjdl9yZWdpc3Rlcl9tdXRleCk7XFxubmV0L2l1Y3YvaXVjdi5jLTIxNi1cXG4tLVxcbm5ldC9pdWN2L2l1Y3YuYz03MjE9c3RhdGljIHZvaWQgaXVjdl9jbGVhbnVwX3F1ZXVlKHZvaWQpXFxuLS1cXG5uZXQvaXVjdi9pdWN2LmMtNzQ2LS8qKlxcbm5ldC9pdWN2L2l1Y3YuYzo3NDc6ICogaXVjdl9yZWdpc3RlciAtIFJlZ2lzdGVycyBhIGRyaXZlciB3aXRoIElVQ1YuXFxubmV0L2l1Y3YvaXVjdi5jLTc0OC0gKlxcbi0tXFxubmV0L2l1Y3YvaXVjdi5jLTc1NC0gKi9cXG5uZXQvaXVjdi9pdWN2LmM6NzU1OmludCBpdWN2X3JlZ2lzdGVyKHN0cnVjdCBpdWN2X2hhbmRsZXIgKmhhbmRsZXIsIGludCBzbXApXFxubmV0L2l1Y3YvaXVjdi5jLTc1Ni17XFxuLS1cXG5uZXQvaXVjdi9pdWN2LmMtNzYwLVxcdFxcdHJldHVybiAtRU5PU1lTO1xcbm5ldC9pdWN2L2l1Y3YuYzo3NjE6XFx0bXV0ZXhfbG9jayhcXHUwMDI2aXVjdl9yZWdpc3Rlcl9tdXRleCk7XFxubmV0L2l1Y3YvaXVjdi5jLTc2Mi1cXHRpZiAoIXNtcClcXG4tLVxcbm5ldC9pdWN2L2l1Y3YuYy03NzYtb3V0X211dGV4Olxcbm5ldC9pdWN2L2l1Y3YuYzo3Nzc6XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZpdWN2X3JlZ2lzdGVyX211dGV4KTtcXG5uZXQvaXVjdi9pdWN2LmMtNzc4LVxcdHJldHVybiByYztcXG5uZXQvaXVjdi9pdWN2LmMtNzc5LX1cXG5uZXQvaXVjdi9pdWN2LmM6NzgwOkVYUE9SVF9TWU1CT0woaXVjdl9yZWdpc3Rlcik7XFxubmV0L2l1Y3YvaXVjdi5jLTc4MS1cXG4tLVxcbm5ldC9pdWN2L2l1Y3YuYz03ODg9dm9pZCBpdWN2X3VucmVnaXN0ZXIoc3RydWN0IGl1Y3ZfaGFuZGxlciAqaGFuZGxlciwgaW50IHNtcClcXG4tLVxcbm5ldC9pdWN2L2l1Y3YuYy03OTEtXFxubmV0L2l1Y3YvaXVjdi5jOjc5MjpcXHRtdXRleF9sb2NrKFxcdTAwMjZpdWN2X3JlZ2lzdGVyX211dGV4KTtcXG5uZXQvaXVjdi9pdWN2LmMtNzkzLVxcdHNwaW5fbG9ja19iaChcXHUwMDI2aXVjdl90YWJsZV9sb2NrKTtcXG4tLVxcbm5ldC9pdWN2L2l1Y3YuYy04MDktXFx0XFx0aXVjdl9zZXRtYXNrX21wKCk7XFxubmV0L2l1Y3YvaXVjdi5jOjgxMDpcXHRtdXRleF91bmxvY2soXFx1MDAyNml1Y3ZfcmVnaXN0ZXJfbXV0ZXgpO1xcbm5ldC9pdWN2L2l1Y3YuYy04MTEtfVxcbi0tXFxubmV0L2l1Y3YvaXVjdi5jPTE4MzQ9c3RydWN0IGl1Y3ZfaW50ZXJmYWNlIGl1Y3ZfaWYgPSB7XFxuLS1cXG5uZXQvaXVjdi9pdWN2LmMtMTg0Ny1cXHQucGF0aF9zZXZlciA9IGl1Y3ZfcGF0aF9zZXZlcixcXG5uZXQvaXVjdi9pdWN2LmM6MTg0ODpcXHQuaXVjdl9yZWdpc3RlciA9IGl1Y3ZfcmVnaXN0ZXIsXFxubmV0L2l1Y3YvaXVjdi5jLTE4NDktXFx0Lml1Y3ZfdW5yZWdpc3RlciA9IGl1Y3ZfdW5yZWdpc3RlcixcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTVUMTU6NTU6MDIuMDYwMDA5MjM0WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM1MTEzODMxNzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIHRoZSBQdXJwb3NlIG9mIGBpdWN2X3JlZ2lzdGVyYCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGBpdWN2X3JlZ2lzdGVyYC4gSG1tLCBJIHdvbmRlciB3aGF0IGl0cyBpbnRlbmRlZCBmdW5jdGlvbmFsaXR5IGlzLCBzcGVjaWZpY2FsbHkgaW4gdGhlIGNvbnRleHQgb2YgdGhlIGxhcmdlciBhcmNoaXRlY3R1cmUuIEkgbmVlZCB0byBxdWlja2x5IHJlY2FsbCBob3cgSVVDViAoSW50ZXItVXNlciBDb21tdW5pY2F0aW9uIFZlaGljbGUpIHdvcmtzIGF0IHRoZSBsb3dlciBsZXZlbHMuIElzIHRoaXMgYSBzeXN0ZW0gY2FsbD8gQSBsaWJyYXJ5IGZ1bmN0aW9uPyBMaWtlbHkgdGhlIGZvcm1lciwgY29uc2lkZXJpbmcgdGhlIG5hbWluZyBjb252ZW50aW9uLiBJIG5lZWQgdG8gZmlndXJlIG91dCBpZiB0aGlzIGZ1bmN0aW9uIGRlYWxzIHdpdGggc2V0dGluZyB1cCBhbiBJVUNWIGNvbm5lY3Rpb24sIG9yIHBlcmhhcHMgaWYgaXQgcmVnaXN0ZXJzIGEgc2VydmljZSBvciByZXNvdXJjZSBmb3IgSVVDViBjb21tdW5pY2F0aW9uLiBEb2VzIGl0IGhhbmRsZSBlbmRwb2ludCBiaW5kaW5nLCBvciBpcyBpdCBtb3JlIGFib3V0IHJlc291cmNlIGFsbG9jYXRpb24gd2l0aGluIHRoZSBJVUNWIHN1YnN5c3RlbT8gTXkgbWluZCBpcyBzdGFydGluZyB0byBmbGVzaCBvdXQgdGhlIHByb2JhYmxlIHBhcmFtZXRlcnMgaXQgd291bGQgYWNjZXB0IOKAkyBtYXliZSBzcGVjaWZ5aW5nIHRoZSB0YXJnZXQgYWRkcmVzcyBzcGFjZSwgdGhlIGNvbW11bmljYXRpb24gdHlwZSwgYW5kIGFueSBhc3NvY2lhdGVkIGRhdGEgYnVmZmVycy4gVW5kZXJzdGFuZGluZyB0aGUgc3BlY2lmaWMgZmxhZ3Mgb3IgY29udHJvbCB3b3JkcyB3aWxsIGJlIGtleSB0byBncmFzcGluZyBpdHMgbnVhbmNlLiBJIHNob3VsZCBxdWlja2x5IGNyb3NzLXJlZmVyZW5jZSB0aGlzIHdpdGggcmVsZXZhbnQgZG9jdW1lbnRhdGlvbiBhbmQgaGVhZGVyIGZpbGVzLiBUaW1lIHRvIGRpZyBkZWVwZXIgYW5kIHNlZSBpZiBteSBpbml0aWFsIGFzc3VtcHRpb25zIGFyZSBjb3JyZWN0LiBJJ2xsIGZvY3VzIG9uIGVycm9yIGNvZGVzIGFuZCB0aGUgcmVnaXN0ZXIncyBhcmd1bWVudHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3OTkyLCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTVUMTU6NTU6MDUuNTcxMzk1NTkzWiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyNzY3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvaXVjdi9pdWN2LmNcIixcbiAgXCJGaXJzdExpbmVcIjogNzU1LFxuICBcIkxpbmVDb3VudFwiOiAzMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNzU1OlxcdGludCBpdWN2X3JlZ2lzdGVyKHN0cnVjdCBpdWN2X2hhbmRsZXIgKmhhbmRsZXIsIGludCBzbXApXFxuIDc1NjpcXHR7XFxuIDc1NzpcXHRcXHRpbnQgcmM7XFxuIDc1ODpcXHRcXG4gNzU5OlxcdFxcdGlmICghaXVjdl9hdmFpbGFibGUpXFxuIDc2MDpcXHRcXHRcXHRyZXR1cm4gLUVOT1NZUztcXG4gNzYxOlxcdFxcdG11dGV4X2xvY2soXFx1MDAyNml1Y3ZfcmVnaXN0ZXJfbXV0ZXgpO1xcbiA3NjI6XFx0XFx0aWYgKCFzbXApXFxuIDc2MzpcXHRcXHRcXHRpdWN2X25vbnNtcF9oYW5kbGVyKys7XFxuIDc2NDpcXHRcXHRpZiAobGlzdF9lbXB0eShcXHUwMDI2aXVjdl9oYW5kbGVyX2xpc3QpKSB7XFxuIDc2NTpcXHRcXHRcXHRyYyA9IGl1Y3ZfZW5hYmxlKCk7XFxuIDc2NjpcXHRcXHRcXHRpZiAocmMpXFxuIDc2NzpcXHRcXHRcXHRcXHRnb3RvIG91dF9tdXRleDtcXG4gNzY4OlxcdFxcdH0gZWxzZSBpZiAoIXNtcCBcXHUwMDI2XFx1MDAyNiBpdWN2X25vbnNtcF9oYW5kbGVyID09IDEpXFxuIDc2OTpcXHRcXHRcXHRpdWN2X3NldG1hc2tfdXAoKTtcXG4gNzcwOlxcdFxcdElOSVRfTElTVF9IRUFEKFxcdTAwMjZoYW5kbGVyLVxcdTAwM2VwYXRocyk7XFxuIDc3MTpcXHRcXG4gNzcyOlxcdFxcdHNwaW5fbG9ja19iaChcXHUwMDI2aXVjdl90YWJsZV9sb2NrKTtcXG4gNzczOlxcdFxcdGxpc3RfYWRkX3RhaWwoXFx1MDAyNmhhbmRsZXItXFx1MDAzZWxpc3QsIFxcdTAwMjZpdWN2X2hhbmRsZXJfbGlzdCk7XFxuIDc3NDpcXHRcXHRzcGluX3VubG9ja19iaChcXHUwMDI2aXVjdl90YWJsZV9sb2NrKTtcXG4gNzc1OlxcdFxcdHJjID0gMDtcXG4gNzc2OlxcdG91dF9tdXRleDpcXG4gNzc3OlxcdFxcdG11dGV4X3VubG9jayhcXHUwMDI2aXVjdl9yZWdpc3Rlcl9tdXRleCk7XFxuIDc3ODpcXHRcXHRyZXR1cm4gcmM7XFxuIDc3OTpcXHR9XFxuIDc4MDpcXHRFWFBPUlRfU1lNQk9MKGl1Y3ZfcmVnaXN0ZXIpO1xcbiA3ODE6XFx0XFxuIDc4MjpcXHQvKipcXG4gNzgzOlxcdCAqIGl1Y3ZfdW5yZWdpc3RlciAtIFVucmVnaXN0ZXIgZHJpdmVyIGZyb20gSVVDVi5cXG4gNzg0OlxcdCAqXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE1VDE1OjU1OjA1LjU3MTUyNDcwM1oiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozODYyOTE3NzY3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqSW5pdGlhbCBBc3Nlc3NtZW50OiBgaXVjdl9hdmFpbGFibGVgKipcblxuUmlnaHQsIHNvIHRoZSBmaXJzdCB0aGluZyBteSBtaW5kIGZsYWdzIGlzIHRoZSBzdGF0ZSBvZiBgaXVjdl9hdmFpbGFibGVgLiBUaGlzIGltbWVkaWF0ZWx5IHRlbGxzIG1lIHdlJ3JlIGRlYWxpbmcgd2l0aCBwb3RlbnRpYWxseSBjcml0aWNhbCBpbmZyYXN0cnVjdHVyZSBvciBhIGNvcmUgc3lzdGVtIGNvbXBvbmVudCB0aGF0IHJlbGllcyBvbiBJbnRlci1Vbml0IENvbW11bmljYXRpb24gVmVjdG9yIChJVUNWKSBmdW5jdGlvbmFsaXR5LiBUaGUgdmVyeSBmYWN0IHRoYXQgdGhpcyBjaGVjayBpcyBoYXBwZW5pbmcgc3VnZ2VzdHMgYSBjcnVjaWFsIHBhcnQgb2YgdGhlIHByb2Nlc3MgaGluZ2VzIG9uIHRoZSBwcmVzZW5jZSBhbmQgYWNjZXNzaWJpbGl0eSBvZiBJVUNWLiBHaXZlbiB0aGUgc2NvcGUgb2YgbXkgZXhwZXJ0aXNlLCBJJ20gYWxyZWFkeSBhbnRpY2lwYXRpbmcgd2hhdCBkZXBlbmRzIG9uIHRoaXMgSVVDViBhdmFpbGFiaWxpdHkg4oCTIHJlc291cmNlIGFsbG9jYXRpb24sIGludGVyLXByb2Nlc3Mgc3luY2hyb25pemF0aW9uLCBwb3RlbnRpYWxseSBldmVuIHN5c3RlbSBoZWFsdGggbW9uaXRvcmluZyBhdCBhIGZ1bmRhbWVudGFsIGxldmVsLiBJJ20gaW1tZWRpYXRlbHkgcnVubmluZyBhIG1lbnRhbCBjaGVja2xpc3Q6IFdoYXQgbGV2ZWwgb2YgYGl1Y3ZfYXZhaWxhYmxlYCBhdmFpbGFiaWxpdHkgYXJlIHdlIGV4cGVjdGluZyAtIHdoYXQgYXJlIHRoZSB0b2xlcmFuY2UgbGV2ZWxzPyBBcmUgd2UgdGFsa2luZyBiYXNpYyBleGlzdGVuY2UsIGZ1bmN0aW9uYWwgZGF0YSB0cmFuc2Zlciwgb3IgYSBzcGVjaWZpYyB2ZXJzaW9uPyBJcyBpdCBhIHNpbmdsZSBzeXN0ZW0sIG9yIGEgd2lkZXIgbmV0d29yaz9cblxuXG4iLCJJbnB1dFRva2VucyI6MTg3NDksIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE1VDE1OjU1OjA5LjQzNDQ0NTg1WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDc5NzA0NjYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaXVjdl9hdmFpbGFibGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2l1Y3YvaXVjdi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pdWN2L2l1Y3YuYz0xMTQ9RVhQT1JUX1NZTUJPTChpdWN2X2FsbG9jX2RldmljZSk7XFxubmV0L2l1Y3YvaXVjdi5jLTExNS1cXG5uZXQvaXVjdi9pdWN2LmM6MTE2OnN0YXRpYyBpbnQgaXVjdl9hdmFpbGFibGU7XFxubmV0L2l1Y3YvaXVjdi5jLTExNy1cXG4tLVxcbm5ldC9pdWN2L2l1Y3YuYz03NTU9aW50IGl1Y3ZfcmVnaXN0ZXIoc3RydWN0IGl1Y3ZfaGFuZGxlciAqaGFuZGxlciwgaW50IHNtcClcXG4tLVxcbm5ldC9pdWN2L2l1Y3YuYy03NTgtXFxubmV0L2l1Y3YvaXVjdi5jOjc1OTpcXHRpZiAoIWl1Y3ZfYXZhaWxhYmxlKVxcbm5ldC9pdWN2L2l1Y3YuYy03NjAtXFx0XFx0cmV0dXJuIC1FTk9TWVM7XFxuLS1cXG5uZXQvaXVjdi9pdWN2LmM9MTg2Mj1zdGF0aWMgaW50IF9faW5pdCBpdWN2X2luaXQodm9pZClcXG4tLVxcbm5ldC9pdWN2L2l1Y3YuYy0xODk4LVxcdEFTQ0VCQyhpdWN2X2Vycm9yX3BhdGhpZCwgMTYpO1xcbm5ldC9pdWN2L2l1Y3YuYzoxODk5OlxcdGl1Y3ZfYXZhaWxhYmxlID0gMTtcXG5uZXQvaXVjdi9pdWN2LmMtMTkwMC1cXHRyYyA9IGJ1c19yZWdpc3RlcihcXHUwMDI2aXVjdl9idXMpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNVQxNTo1NTowOS41ODI0MjQ3MDZaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTU0MDIxNDYzOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgcHJlc2VudGVkIGFzIGlmIGl0IHdlcmUgbXkgb3duIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipJbml0aWFsaXppbmcgdGhlIElVQ1YgRmxhZyoqXG5cbkFscmlnaHQsIHNvIEknbSBsb29raW5nIGF0IHRoZSBgaXVjdl9pbml0YCByb3V0aW5lLiBUaGUga2V5IHRoaW5nIEknbSBub3RpY2luZyByaWdodCBvZmYgdGhlIGJhdCBpcyB0aGF0IGBpdWN2X2F2YWlsYWJsZWAgaXMgYmVpbmcgc2V0IHRvIDEuIFRoYXQncyB0aGUgaW5pdGlhbCBzdGF0ZS4gTm8gc3VycHJpc2VzIHRoZXJlLiBJdCBzaWduYWxzIHRoYXQgdGhlIEludGVyLVVzZXIgQ29tbXVuaWNhdGlvbiBWZWhpY2xlIChJVUNWKSBmdW5jdGlvbmFsaXR5IGlzLCBhdCBsZWFzdCAqcG90ZW50aWFsbHkqLCBhdmFpbGFibGUgYXQgdGhpcyBwb2ludCBpbiB0aGUgaW5pdGlhbGl6YXRpb24gcHJvY2Vzcy4gVGhpcyBpcyB0aGUgZmlyc3QgaW5kaWNhdGlvbiB0aGF0IHRoZSBzeXN0ZW0gaXMgdHJ5aW5nIHRvIGdldCByZWFkeSBmb3IgSVVDViBvcGVyYXRpb25zLiBUaGlzIHNldHMgdGhlIHN0YWdlIGZvciBjaGVja2luZyBmb3Igb3RoZXIgZGVwZW5kZW5jaWVzIG9yIHBvc3NpYmxlIGNvbmZsaWN0cy4gRnJvbSBoZXJlLCBvbmUgd291bGQgY29udGludWUgd2l0aCB0aGUgSVVDViBpbml0aWFsaXphdGlvbiwgYW5kIGl0IHdvdWxkIGJlIGV4cGVjdGVkIHRoYXQgYSBzZXJpZXMgb2YgY2hlY2tzIHdpbGwgZm9sbG93LiBUaGlzIGluaXRpYWwgZmxhZyBpcyBlc3NlbnRpYWwsIG9mIGNvdXJzZSwgd2l0aG91dCBzZXR0aW5nIGl0LCBub3RoaW5nIGVsc2Ugd291bGQgYmUgcG9zc2libGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5MzQ1LCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTVUMTU6NTU6MTUuMTIyNjQxOTg2WiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzMTgwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvaXVjdi9pdWN2LmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTg2MixcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTg2MjpcXHRzdGF0aWMgaW50IF9faW5pdCBpdWN2X2luaXQodm9pZClcXG4xODYzOlxcdHtcXG4xODY0OlxcdFxcdGludCByYztcXG4xODY1OlxcdFxcbjE4NjY6XFx0XFx0aWYgKCFtYWNoaW5lX2lzX3ZtKCkpIHtcXG4xODY3OlxcdFxcdFxcdHJjID0gLUVQUk9UT05PU1VQUE9SVDtcXG4xODY4OlxcdFxcdFxcdGdvdG8gb3V0O1xcbjE4Njk6XFx0XFx0fVxcbjE4NzA6XFx0XFx0c3lzdGVtX2N0bF9zZXRfYml0KDAsIENSMF9JVUNWX0JJVCk7XFxuMTg3MTpcXHRcXHRyYyA9IGl1Y3ZfcXVlcnlfbWF4Y29ubigpO1xcbjE4NzI6XFx0XFx0aWYgKHJjKVxcbjE4NzM6XFx0XFx0XFx0Z290byBvdXRfY3RsO1xcbjE4NzQ6XFx0XFx0cmMgPSByZWdpc3Rlcl9leHRlcm5hbF9pcnEoRVhUX0lSUV9JVUNWLCBpdWN2X2V4dGVybmFsX2ludGVycnVwdCk7XFxuMTg3NTpcXHRcXHRpZiAocmMpXFxuMTg3NjpcXHRcXHRcXHRnb3RvIG91dF9jdGw7XFxuMTg3NzpcXHRcXHRpdWN2X3Jvb3QgPSByb290X2RldmljZV9yZWdpc3RlcihcXFwiaXVjdlxcXCIpO1xcbjE4Nzg6XFx0XFx0aWYgKElTX0VSUihpdWN2X3Jvb3QpKSB7XFxuMTg3OTpcXHRcXHRcXHRyYyA9IFBUUl9FUlIoaXVjdl9yb290KTtcXG4xODgwOlxcdFxcdFxcdGdvdG8gb3V0X2ludDtcXG4xODgxOlxcdFxcdH1cXG4xODgyOlxcdFxcbjE4ODM6XFx0XFx0cmMgPSBjcHVocF9zZXR1cF9zdGF0ZShDUFVIUF9ORVRfSVVDVl9QUkVQQVJFLCBcXFwibmV0L2l1Y3Y6cHJlcGFyZVxcXCIsXFxuMTg4NDpcXHRcXHRcXHRcXHQgICAgICAgaXVjdl9jcHVfcHJlcGFyZSwgaXVjdl9jcHVfZGVhZCk7XFxuMTg4NTpcXHRcXHRpZiAocmMpXFxuMTg4NjpcXHRcXHRcXHRnb3RvIG91dF9kZXY7XFxuMTg4NzpcXHRcXHRyYyA9IGNwdWhwX3NldHVwX3N0YXRlKENQVUhQX0FQX09OTElORV9EWU4sIFxcXCJuZXQvaXVjdjpvbmxpbmVcXFwiLFxcbjE4ODg6XFx0XFx0XFx0XFx0ICAgICAgIGl1Y3ZfY3B1X29ubGluZSwgaXVjdl9jcHVfZG93bl9wcmVwKTtcXG4xODg5OlxcdFxcdGlmIChyYyBcXHUwMDNjIDApXFxuMTg5MDpcXHRcXHRcXHRnb3RvIG91dF9wcmVwO1xcbjE4OTE6XFx0XFx0aXVjdl9vbmxpbmUgPSByYztcXG4xODkyOlxcdFxcbjE4OTM6XFx0XFx0cmMgPSByZWdpc3Rlcl9yZWJvb3Rfbm90aWZpZXIoXFx1MDAyNml1Y3ZfcmVib290X25vdGlmaWVyKTtcXG4xODk0OlxcdFxcdGlmIChyYylcXG4xODk1OlxcdFxcdFxcdGdvdG8gb3V0X3JlbW92ZV9ocDtcXG4xODk2OlxcdFxcdEFTQ0VCQyhpdWN2X2Vycm9yX25vX2xpc3RlbmVyLCAxNik7XFxuMTg5NzpcXHRcXHRBU0NFQkMoaXVjdl9lcnJvcl9ub19tZW1vcnksIDE2KTtcXG4xODk4OlxcdFxcdEFTQ0VCQyhpdWN2X2Vycm9yX3BhdGhpZCwgMTYpO1xcbjE4OTk6XFx0XFx0aXVjdl9hdmFpbGFibGUgPSAxO1xcbjE5MDA6XFx0XFx0cmMgPSBidXNfcmVnaXN0ZXIoXFx1MDAyNml1Y3ZfYnVzKTtcXG4xOTAxOlxcdFxcdGlmIChyYylcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTVUMTU6NTU6MTUuMTIyNzc1MDE1WiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYwMDUzMjAwNjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIHovVk0gRGV0ZWN0aW9uKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBgbWFjaGluZV9pc192bSgpYCBmdW5jdGlvbi4gSXRzIHB1cnBvc2UsIGZyb20gd2hhdCBJIGdhdGhlciwgaXMgdG8gZmlndXJlIG91dCBpZiB0aGUgc3lzdGVtIGlzIHJ1bm5pbmcgdW5kZXIgei9WTS4gTm93LCBoZXJlJ3Mgd2hlcmUgaXQgZ2V0cyBpbnRlcmVzdGluZywgZXNwZWNpYWxseSBnaXZlbiBteSBleHBlcmllbmNlLiBJZiBzeXprYWxsZXIsIHdoaWNoIEknbSB3b3JraW5nIHdpdGgsIGlzIHJ1bm5pbmcgaW5zaWRlIFFFTVUsIHRoZSBsaWtlbGlob29kIG9mIGBtYWNoaW5lX2lzX3ZtKClgIHJldHVybmluZyB0cnVlIHNlZW1zIGxvdy4gUUVNVSwgaW4gbW9zdCB0eXBpY2FsIGNvbmZpZ3VyYXRpb25zLCB2aXJ0dWFsaXplcyBhICpkaWZmZXJlbnQqIGVudmlyb25tZW50IOKAkyB1c3VhbGx5IEtWTSBvciBUQ0cg4oCTIGFuZCBub3QgbmVjZXNzYXJpbHkgei9WTSBkaXJlY3RseS5cblxuQnV0LCBoYW5nIG9uIGEgc2Vjb25kLi4uIFFFTVUsIHNwZWNpZmljYWxseSBmb3IgczM5MHggYXJjaGl0ZWN0dXJlLCAqdXN1YWxseSogZW11bGF0ZXMgYSB6L0FyY2hpdGVjdHVyZSBtYWNoaW5lLCBkb2Vzbid0IGl0PyBUaGUgcXVlc3Rpb24gaXM6IERvZXMgaXQgZ28gdGhhdCBleHRyYSBzdGVwIHRvIGVtdWxhdGUgei9WTSAqc3BlY2lmaWNhbGx5Kj8gSSBuZWVkIHRvIHZlcmlmeSB0aGF0IGFzc3VtcHRpb24uIEJlc3QgdG8gY2hlY2sgYG1hY2hpbmVfaXNfdm0oKWAgZGlyZWN0bHkgYW5kIHNlZSB3aGF0IGl0IHJlcG9ydHMuIEl0J3MgdGhlIG1vc3QgcmVsaWFibGUgd2F5IHRvIGNvbmZpcm0gaG93IHRoaXMgc3BlY2lmaWMgUUVNVSBjb25maWd1cmF0aW9uIGlzIGJlaGF2aW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDI5MywiT3V0cHV0VG9rZW5zIjoyNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwNywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE1VDE1OjU1OjIxLjEyODA5NzIwMloiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY2MjM1ODY2MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtYWNoaW5lX2lzX3ZtXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3MzOTAvYm9vdC9zdGFydHVwLmM9NzE9c3RhdGljIHZvaWQgZGV0ZWN0X2RpYWcyODgodm9pZClcXG4tLVxcbmFyY2gvczM5MC9ib290L3N0YXJ0dXAuYy03Ni1cXG5hcmNoL3MzOTAvYm9vdC9zdGFydHVwLmM6Nzc6XFx0YWN0aW9uID0gbWFjaGluZV9pc192bSgpID8gKHVuc2lnbmVkIGxvbmcpY21kIDogTFBBUldEVF9SRVNUQVJUO1xcbmFyY2gvczM5MC9ib290L3N0YXJ0dXAuYzo3ODpcXHRsZW4gPSBtYWNoaW5lX2lzX3ZtKCkgPyBzaXplb2YoY21kKSA6IDA7XFxuYXJjaC9zMzkwL2Jvb3Qvc3RhcnR1cC5jLTc5LVxcdGlmIChfX2RpYWcyODgoV0RUX0ZVTkNfSU5JVCwgTUlOX0lOVEVSVkFMLCBhY3Rpb24sIGxlbikpXFxuLS1cXG5hcmNoL3MzOTAvaHlwZnMvaHlwZnNfZGlhZzBjLmM9MTA4PWludCBfX2luaXQgaHlwZnNfZGlhZzBjX2luaXQodm9pZClcXG5hcmNoL3MzOTAvaHlwZnMvaHlwZnNfZGlhZzBjLmMtMTA5LXtcXG5hcmNoL3MzOTAvaHlwZnMvaHlwZnNfZGlhZzBjLmM6MTEwOlxcdGlmICghbWFjaGluZV9pc192bSgpKVxcbmFyY2gvczM5MC9oeXBmcy9oeXBmc19kaWFnMGMuYy0xMTEtXFx0XFx0cmV0dXJuIDA7XFxuLS1cXG5hcmNoL3MzOTAvaHlwZnMvaHlwZnNfZGlhZzBjLmM9MTE5PXZvaWQgaHlwZnNfZGlhZzBjX2V4aXQodm9pZClcXG5hcmNoL3MzOTAvaHlwZnMvaHlwZnNfZGlhZzBjLmMtMTIwLXtcXG5hcmNoL3MzOTAvaHlwZnMvaHlwZnNfZGlhZzBjLmM6MTIxOlxcdGlmICghbWFjaGluZV9pc192bSgpKVxcbmFyY2gvczM5MC9oeXBmcy9oeXBmc19kaWFnMGMuYy0xMjItXFx0XFx0cmV0dXJuO1xcbi0tXFxuYXJjaC9zMzkwL2h5cGZzL2h5cGZzX3ZtLmM9MTIzPWludCBoeXBmc192bV9pbml0KHZvaWQpXFxuYXJjaC9zMzkwL2h5cGZzL2h5cGZzX3ZtLmMtMTI0LXtcXG5hcmNoL3MzOTAvaHlwZnMvaHlwZnNfdm0uYzoxMjU6XFx0aWYgKCFtYWNoaW5lX2lzX3ZtKCkpXFxuYXJjaC9zMzkwL2h5cGZzL2h5cGZzX3ZtLmMtMTI2LVxcdFxcdHJldHVybiAwO1xcbi0tXFxuYXJjaC9zMzkwL2h5cGZzL2h5cGZzX3ZtLmM9MTM3PXZvaWQgaHlwZnNfdm1fZXhpdCh2b2lkKVxcbmFyY2gvczM5MC9oeXBmcy9oeXBmc192bS5jLTEzOC17XFxuYXJjaC9zMzkwL2h5cGZzL2h5cGZzX3ZtLmM6MTM5OlxcdGlmICghbWFjaGluZV9pc192bSgpKVxcbmFyY2gvczM5MC9oeXBmcy9oeXBmc192bS5jLTE0MC1cXHRcXHRyZXR1cm47XFxuLS1cXG5hcmNoL3MzOTAvaHlwZnMvaW5vZGUuYz0xNDg9c3RhdGljIHNzaXplX3QgaHlwZnNfd3JpdGVfaXRlcihzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqZnJvbSlcXG4tLVxcbmFyY2gvczM5MC9oeXBmcy9pbm9kZS5jLTE3MC1cXHRoeXBmc19kZWxldGVfdHJlZSgpO1xcbmFyY2gvczM5MC9oeXBmcy9pbm9kZS5jOjE3MTpcXHRpZiAobWFjaGluZV9pc192bSgpKVxcbmFyY2gvczM5MC9oeXBmcy9pbm9kZS5jLTE3Mi1cXHRcXHRyYyA9IGh5cGZzX3ZtX2NyZWF0ZV9maWxlcyhzYi1cXHUwMDNlc19yb290KTtcXG4tLVxcbmFyY2gvczM5MC9oeXBmcy9pbm9kZS5jPTI0MD1zdGF0aWMgaW50IGh5cGZzX2ZpbGxfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgc3RydWN0IGZzX2NvbnRleHQgKmZjKVxcbi0tXFxuYXJjaC9zMzkwL2h5cGZzL2lub2RlLmMtMjU5LVxcdFxcdHJldHVybiAtRU5PTUVNO1xcbmFyY2gvczM5MC9oeXBmcy9pbm9kZS5jOjI2MDpcXHRpZiAobWFjaGluZV9pc192bSgpKVxcbmFyY2gvczM5MC9oeXBmcy9pbm9kZS5jLTI2MS1cXHRcXHRyYyA9IGh5cGZzX3ZtX2NyZWF0ZV9maWxlcyhyb290X2RlbnRyeSk7XFxuLS1cXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vYXBwbGRhdGEuaD00NT1zdGF0aWMgaW5saW5lIGludCBhcHBsZGF0YV9hc20oc3RydWN0IGFwcGxkYXRhX3BhcmFtZXRlcl9saXN0ICpwYXJtX2xpc3QsXFxuLS1cXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vYXBwbGRhdGEuaC01MS1cXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vYXBwbGRhdGEuaDo1MjpcXHRpZiAoIW1hY2hpbmVfaXNfdm0oKSlcXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vYXBwbGRhdGEuaC01My1cXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuLS1cXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vbWFjaGluZS5oPTk3PURFRklORV9NQUNISU5FX0hBU19GRUFUVVJFKGxwYXIsIE1GRUFUVVJFX0xQQVIpXFxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL21hY2hpbmUuaC05OC1cXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vbWFjaGluZS5oOjk5OiNkZWZpbmUgbWFjaGluZV9pc192bVxcdG1hY2hpbmVfaGFzX3ZtXFxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL21hY2hpbmUuaC0xMDAtI2RlZmluZSBtYWNoaW5lX2lzX2t2bVxcdG1hY2hpbmVfaGFzX2t2bVxcbi0tXFxuYXJjaC9zMzkwL2tlcm5lbC9lYXJseS5jPTExMD1zdGF0aWMgbm9pbmxpbmUgX19pbml0IHZvaWQgc2V0dXBfYXJjaF9zdHJpbmcodm9pZClcXG4tLVxcbmFyY2gvczM5MC9rZXJuZWwvZWFybHkuYy0xMzItXFx0XFx0XFx0ICBtYWNoaW5lX2lzX2xwYXIoKSA/IFxcXCJMUEFSXFxcIiA6XFxuYXJjaC9zMzkwL2tlcm5lbC9lYXJseS5jOjEzMzpcXHRcXHRcXHQgIG1hY2hpbmVfaXNfdm0oKSA/IFxcXCJ6L1ZNXFxcIiA6XFxuYXJjaC9zMzkwL2tlcm5lbC9lYXJseS5jLTEzNC1cXHRcXHRcXHQgIG1hY2hpbmVfaXNfa3ZtKCkgPyBcXFwiS1ZNXFxcIiA6IFxcXCJ1bmtub3duXFxcIik7XFxuLS1cXG5hcmNoL3MzOTAva2VybmVsL2lwbC5jPTY5ND1zdGF0aWMgaW50IF9faW5pdCBpcGxfaW5pdCh2b2lkKVxcbi0tXFxuYXJjaC9zMzkwL2tlcm5lbC9pcGwuYy03MDctXFx0Y2FzZSBJUExfVFlQRV9DQ1c6XFxuYXJjaC9zMzkwL2tlcm5lbC9pcGwuYzo3MDg6XFx0XFx0aWYgKG1hY2hpbmVfaXNfdm0oKSlcXG5hcmNoL3MzOTAva2VybmVsL2lwbC5jLTcwOS1cXHRcXHRcXHRyYyA9IHN5c2ZzX2NyZWF0ZV9ncm91cChcXHUwMDI2aXBsX2tzZXQtXFx1MDAzZWtvYmosXFxuLS1cXG5hcmNoL3MzOTAva2VybmVsL2lwbC5jPTEyODY9c3RhdGljIHZvaWQgcmVpcGxfYmxvY2tfY2N3X2ZpbGxfcGFybXMoc3RydWN0IGlwbF9wYXJhbWV0ZXJfYmxvY2sgKmlwYilcXG4tLVxcbmFyY2gvczM5MC9rZXJuZWwvaXBsLmMtMTI5Ny1cXHQvKiBWTSBQQVJNICovXFxuYXJjaC9zMzkwL2tlcm5lbC9pcGwuYzoxMjk4OlxcdGlmIChtYWNoaW5lX2lzX3ZtKCkgXFx1MDAyNlxcdTAwMjYgaXBsX2Jsb2NrX3ZhbGlkIFxcdTAwMjZcXHUwMDI2XFxuYXJjaC9zMzkwL2tlcm5lbC9pcGwuYy0xMjk5LVxcdCAgICAoaXBsX2Jsb2NrLmNjdy52bV9mbGFncyBcXHUwMDI2IElQTF9QQjBfQ0NXX1ZNX0ZMQUdfVlApKSB7XFxuLS1cXG5hcmNoL3MzOTAva2VybmVsL2lwbC5jPTEzMDg9c3RhdGljIGludCBfX2luaXQgcmVpcGxfbnNzX2luaXQodm9pZClcXG4tLVxcbmFyY2gvczM5MC9rZXJuZWwvaXBsLmMtMTMxMS1cXG5hcmNoL3MzOTAva2VybmVsL2lwbC5jOjEzMTI6XFx0aWYgKCFtYWNoaW5lX2lzX3ZtKCkpXFxuYXJjaC9zMzkwL2tlcm5lbC9pcGwuYy0xMzEzLVxcdFxcdHJldHVybiAwO1xcbi0tXFxuYXJjaC9zMzkwL2tlcm5lbC9pcGwuYz0xMzI4PXN0YXRpYyBpbnQgX19pbml0IHJlaXBsX2Njd19pbml0KHZvaWQpXFxuLS1cXG5hcmNoL3MzOTAva2VybmVsL2lwbC5jLTEzMzYtXFx0cmMgPSBzeXNmc19jcmVhdGVfZ3JvdXAoXFx1MDAyNnJlaXBsX2tzZXQtXFx1MDAzZWtvYmosXFxuYXJjaC9zMzkwL2tlcm5lbC9pcGwuYzoxMzM3OlxcdFxcdFxcdFxcdG1hY2hpbmVfaXNfdm0oKSA/IFxcdTAwMjZyZWlwbF9jY3dfYXR0cl9ncm91cF92bVxcbmFyY2gvczM5MC9rZXJuZWwvaXBsLmMtMTMzOC1cXHRcXHRcXHRcXHRcXHRcXHQ6IFxcdTAwMjZyZWlwbF9jY3dfYXR0cl9ncm91cF9scGFyKTtcXG4tLVxcbmFyY2gvczM5MC9rZXJuZWwvaXBsLmM9MjAxND1zdGF0aWMgaW50IHZtY21kX2luaXQodm9pZClcXG5hcmNoL3MzOTAva2VybmVsL2lwbC5jLTIwMTUte1xcbmFyY2gvczM5MC9rZXJuZWwvaXBsLmM6MjAxNjpcXHRpZiAoIW1hY2hpbmVfaXNfdm0oKSlcXG5hcmNoL3MzOTAva2VybmVsL2lwbC5jLTIwMTctXFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbi0tXFxuYXJjaC9zMzkwL2tlcm5lbC9pcGwuYz0yMjk0PXN0YXRpYyBpbnQgX19pbml0IHZtY21kX29uX3JlYm9vdF9zZXR1cChjaGFyICpzdHIpXFxuYXJjaC9zMzkwL2tlcm5lbC9pcGwuYy0yMjk1LXtcXG5hcmNoL3MzOTAva2VybmVsL2lwbC5jOjIyOTY6XFx0aWYgKCFtYWNoaW5lX2lzX3ZtKCkpXFxuYXJjaC9zMzkwL2tlcm5lbC9pcGwuYy0yMjk3LVxcdFxcdHJldHVybiAxO1xcbi0tXFxuYXJjaC9zMzkwL2tlcm5lbC9pcGwuYz0yMzA0PXN0YXRpYyBpbnQgX19pbml0IHZtY21kX29uX3BhbmljX3NldHVwKGNoYXIgKnN0cilcXG5hcmNoL3MzOTAva2VybmVsL2lwbC5jLTIzMDUte1xcbmFyY2gvczM5MC9rZXJuZWwvaXBsLmM6MjMwNjpcXHRpZiAoIW1hY2hpbmVfaXNfdm0oKSlcXG5hcmNoL3MzOTAva2VybmVsL2lwbC5jLTIzMDctXFx0XFx0cmV0dXJuIDE7XFxuLS1cXG5hcmNoL3MzOTAva2VybmVsL2lwbC5jPTIzMTQ9c3RhdGljIGludCBfX2luaXQgdm1jbWRfb25faGFsdF9zZXR1cChjaGFyICpzdHIpXFxuYXJjaC9zMzkwL2tlcm5lbC9pcGwuYy0yMzE1LXtcXG5hcmNoL3MzOTAva2VybmVsL2lwbC5jOjIzMTY6XFx0aWYgKCFtYWNoaW5lX2lzX3ZtKCkpXFxuYXJjaC9zMzkwL2tlcm5lbC9pcGwuYy0yMzE3LVxcdFxcdHJldHVybiAxO1xcbi0tXFxuYXJjaC9zMzkwL2tlcm5lbC9pcGwuYz0yMzI0PXN0YXRpYyBpbnQgX19pbml0IHZtY21kX29uX3BvZmZfc2V0dXAoY2hhciAqc3RyKVxcbmFyY2gvczM5MC9rZXJuZWwvaXBsLmMtMjMyNS17XFxuYXJjaC9zMzkwL2tlcm5lbC9pcGwuYzoyMzI2OlxcdGlmICghbWFjaGluZV9pc192bSgpKVxcbmFyY2gvczM5MC9rZXJuZWwvaXBsLmMtMjMyNy1cXHRcXHRyZXR1cm4gMTtcXG4tLVxcbmFyY2gvczM5MC9rZXJuZWwvbWFjaGluZV9rZXhlYy5jPTE4MD1zdGF0aWMgaW50IG1hY2hpbmVfa2V4ZWNfcHJlcGFyZV9rZHVtcCh2b2lkKVxcbi0tXFxuYXJjaC9zMzkwL2tlcm5lbC9tYWNoaW5lX2tleGVjLmMtMTgyLSNpZmRlZiBDT05GSUdfQ1JBU0hfRFVNUFxcbmFyY2gvczM5MC9rZXJuZWwvbWFjaGluZV9rZXhlYy5jOjE4MzpcXHRpZiAobWFjaGluZV9pc192bSgpKVxcbmFyY2gvczM5MC9rZXJuZWwvbWFjaGluZV9rZXhlYy5jLTE4NC1cXHRcXHRkaWFnMTBfcmFuZ2UoUEZOX0RPV04oY3Jhc2hrX3Jlcy5zdGFydCksXFxuLS1cXG5hcmNoL3MzOTAva2VybmVsL3NldHVwLmM9MjQ2PXN0YXRpYyB2b2lkIF9faW5pdCBjb25tb2RlX2RlZmF1bHQodm9pZClcXG4tLVxcbmFyY2gvczM5MC9rZXJuZWwvc2V0dXAuYy0yNTAtXFxuYXJjaC9zMzkwL2tlcm5lbC9zZXR1cC5jOjI1MTpcXHRpZiAobWFjaGluZV9pc192bSgpKSB7XFxuYXJjaC9zMzkwL2tlcm5lbC9zZXR1cC5jLTI1Mi1cXHRcXHRjcGNtZChcXFwiUVVFUlkgQ09OU09MRVxcXCIsIHF1ZXJ5X2J1ZmZlciwgMTAyNCwgTlVMTCk7XFxuLS1cXG5hcmNoL3MzOTAva2VybmVsL3NldHVwLmM9NTk4PXN0YXRpYyB2b2lkIF9faW5pdCByZXNlcnZlX2NyYXNoa2VybmVsKHZvaWQpXFxuLS1cXG5hcmNoL3MzOTAva2VybmVsL3NldHVwLmMtNjUwLVxcbmFyY2gvczM5MC9rZXJuZWwvc2V0dXAuYzo2NTE6XFx0aWYgKCFvbGRtZW1fZGF0YS5zdGFydCBcXHUwMDI2XFx1MDAyNiBtYWNoaW5lX2lzX3ZtKCkpXFxuYXJjaC9zMzkwL2tlcm5lbC9zZXR1cC5jLTY1Mi1cXHRcXHRkaWFnMTBfcmFuZ2UoUEZOX0RPV04oY3Jhc2hfYmFzZSksIFBGTl9ET1dOKGNyYXNoX3NpemUpKTtcXG4tLVxcbmFyY2gvczM5MC9rZXJuZWwvc2V0dXAuYz04OTc9dm9pZCBfX2luaXQgc2V0dXBfYXJjaChjaGFyICoqY21kbGluZV9wKVxcbi0tXFxuYXJjaC9zMzkwL2tlcm5lbC9zZXR1cC5jLTkwMS0gICAgICAgICAqL1xcbmFyY2gvczM5MC9rZXJuZWwvc2V0dXAuYzo5MDI6XFx0aWYgKG1hY2hpbmVfaXNfdm0oKSlcXG5hcmNoL3MzOTAva2VybmVsL3NldHVwLmMtOTAzLVxcdFxcdHByX2luZm8oXFxcIkxpbnV4IGlzIHJ1bm5pbmcgYXMgYSB6L1ZNIFxcXCJcXG4tLVxcbmFyY2gvczM5MC9rZXJuZWwvc3lzaW5mby5jPTM3OT1zdGF0aWMgX19pbml0IGludCBjcmVhdGVfcHJvY19zZXJ2aWNlX2xldmVsKHZvaWQpXFxuLS1cXG5hcmNoL3MzOTAva2VybmVsL3N5c2luZm8uYy0zODEtXFx0cHJvY19jcmVhdGVfc2VxKFxcXCJzZXJ2aWNlX2xldmVsc1xcXCIsIDAsIE5VTEwsIFxcdTAwMjZzZXJ2aWNlX2xldmVsX3NlcV9vcHMpO1xcbmFyY2gvczM5MC9rZXJuZWwvc3lzaW5mby5jOjM4MjpcXHRpZiAobWFjaGluZV9pc192bSgpKVxcbmFyY2gvczM5MC9rZXJuZWwvc3lzaW5mby5jLTM4My1cXHRcXHRyZWdpc3Rlcl9zZXJ2aWNlX2xldmVsKFxcdTAwMjZzZXJ2aWNlX2xldmVsX3ZtKTtcXG4tLVxcbmFyY2gvczM5MC9tbS9leHRtZW0uYz0yNTM9c2VnbWVudF90eXBlIChjaGFyKiBuYW1lKVxcbi0tXFxuYXJjaC9zMzkwL21tL2V4dG1lbS5jLTI1Ny1cXG5hcmNoL3MzOTAvbW0vZXh0bWVtLmM6MjU4OlxcdGlmICghbWFjaGluZV9pc192bSgpKVxcbmFyY2gvczM5MC9tbS9leHRtZW0uYy0yNTktXFx0XFx0cmV0dXJuIC1FTk9TWVM7XFxuLS1cXG5hcmNoL3MzOTAvbW0vZXh0bWVtLmM9NDE1PXNlZ21lbnRfbG9hZCAoY2hhciAqbmFtZSwgaW50IGRvX25vbnNoYXJlZCwgdW5zaWduZWQgbG9uZyAqYWRkcixcXG4tLVxcbmFyY2gvczM5MC9tbS9leHRtZW0uYy00MjAtXFxuYXJjaC9zMzkwL21tL2V4dG1lbS5jOjQyMTpcXHRpZiAoIW1hY2hpbmVfaXNfdm0oKSlcXG5hcmNoL3MzOTAvbW0vZXh0bWVtLmMtNDIyLVxcdFxcdHJldHVybiAtRU5PU1lTO1xcbi0tXFxuYXJjaC9zMzkwL21tL2V4dG1lbS5jPTU0Nj1zZWdtZW50X3VubG9hZChjaGFyICpuYW1lKVxcbi0tXFxuYXJjaC9zMzkwL21tL2V4dG1lbS5jLTU0OS1cXG5hcmNoL3MzOTAvbW0vZXh0bWVtLmM6NTUwOlxcdGlmICghbWFjaGluZV9pc192bSgpKVxcbmFyY2gvczM5MC9tbS9leHRtZW0uYy01NTEtXFx0XFx0cmV0dXJuO1xcbi0tXFxuYXJjaC9zMzkwL21tL2V4dG1lbS5jPTU4Mj1zZWdtZW50X3NhdmUoY2hhciAqbmFtZSlcXG4tLVxcbmFyY2gvczM5MC9tbS9leHRtZW0uYy01ODgtXFxuYXJjaC9zMzkwL21tL2V4dG1lbS5jOjU4OTpcXHRpZiAoIW1hY2hpbmVfaXNfdm0oKSlcXG5hcmNoL3MzOTAvbW0vZXh0bWVtLmMtNTkwLVxcdFxcdHJldHVybjtcXG4tLVxcbmRyaXZlcnMvczM5MC9ibG9jay9kYXNkLmM9MzM1MT1pbnQgZGFzZF9kZXZpY2VfaXNfcm8oc3RydWN0IGRhc2RfZGV2aWNlICpkZXZpY2UpXFxuLS1cXG5kcml2ZXJzL3MzOTAvYmxvY2svZGFzZC5jLTMzNTYtXFxuZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2QuYzozMzU3OlxcdGlmICghbWFjaGluZV9pc192bSgpKVxcbmRyaXZlcnMvczM5MC9ibG9jay9kYXNkLmMtMzM1OC1cXHRcXHRyZXR1cm4gMDtcXG4tLVxcbmRyaXZlcnMvczM5MC9ibG9jay9kYXNkX2Rldm1hcC5jPTIyND1zdGF0aWMgaW50IF9faW5pdCBkYXNkX3BhcnNlX2tleXdvcmQoY2hhciAqa2V5d29yZClcXG4tLVxcbmRyaXZlcnMvczM5MC9ibG9jay9kYXNkX2Rldm1hcC5jLTIzOC1cXHRpZiAoc3RybmNtcChcXFwibm9wYXZcXFwiLCBrZXl3b3JkLCBsZW5ndGgpID09IDApIHtcXG5kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9kZXZtYXAuYzoyMzk6XFx0XFx0aWYgKG1hY2hpbmVfaXNfdm0oKSlcXG5kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9kZXZtYXAuYy0yNDAtXFx0XFx0XFx0cHJfaW5mbyhcXFwiJ25vcGF2JyBpcyBub3Qgc3VwcG9ydGVkIG9uIHovVk1cXFxcblxcXCIpO1xcbi0tXFxuZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfZGlhZy5jPTY1Nj1kYXNkX2RpYWdfaW5pdCh2b2lkKVxcbmRyaXZlcnMvczM5MC9ibG9jay9kYXNkX2RpYWcuYy02NTcte1xcbmRyaXZlcnMvczM5MC9ibG9jay9kYXNkX2RpYWcuYzo2NTg6XFx0aWYgKCFtYWNoaW5lX2lzX3ZtKCkpIHtcXG5kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9kaWFnLmMtNjU5LVxcdFxcdHByX2luZm8oXFxcIkRpc2NpcGxpbmUgJXMgY2Fubm90IGJlIHVzZWQgd2l0aG91dCB6L1ZNXFxcXG5cXFwiLFxcbi0tXFxuZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfZWNrZC5jPTE5NDg9c3RhdGljIGludCBkYXNkX2Vja2RfdmFsaWRhdGVfc2VydmVyKHN0cnVjdCBkYXNkX2RldmljZSAqZGV2aWNlLFxcbi0tXFxuZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfZWNrZC5jLTE5NTYtXFx0XFx0cmV0dXJuIDA7XFxuZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfZWNrZC5jOjE5NTc6XFx0aWYgKGRhc2Rfbm9wYXYgfHwgbWFjaGluZV9pc192bSgpKVxcbmRyaXZlcnMvczM5MC9ibG9jay9kYXNkX2Vja2QuYy0xOTU4LVxcdFxcdGVuYWJsZV9wYXYgPSAwO1xcbi0tXFxuZHJpdmVycy9zMzkwL2NoYXIvY29uMzIxNS5jPTg5OT1zdGF0aWMgaW50IF9faW5pdCBjb24zMjE1X2luaXQodm9pZClcXG4tLVxcbmRyaXZlcnMvczM5MC9jaGFyL2NvbjMyMTUuYy05MTAtXFx0LyogU2V0IHRoZSBjb25zb2xlIG1vZGUgZm9yIFZNICovXFxuZHJpdmVycy9zMzkwL2NoYXIvY29uMzIxNS5jOjkxMTpcXHRpZiAobWFjaGluZV9pc192bSgpKSB7XFxuZHJpdmVycy9zMzkwL2NoYXIvY29uMzIxNS5jLTkxMi1cXHRcXHRjcGNtZChcXFwiVEVSTSBDT05NT0RFIDMyMTVcXFwiLCBOVUxMLCAwLCBOVUxMKTtcXG4tLVxcbmRyaXZlcnMvczM5MC9jaGFyL2NvbjMyNzAuYz0yMTM0PWNvbjMyNzBfaW5pdCh2b2lkKVxcbi0tXFxuZHJpdmVycy9zMzkwL2NoYXIvY29uMzI3MC5jLTIxNDUtXFx0LyogU2V0IHRoZSBjb25zb2xlIG1vZGUgZm9yIFZNICovXFxuZHJpdmVycy9zMzkwL2NoYXIvY29uMzI3MC5jOjIxNDY6XFx0aWYgKG1hY2hpbmVfaXNfdm0oKSkge1xcbmRyaXZlcnMvczM5MC9jaGFyL2NvbjMyNzAuYy0yMTQ3LVxcdFxcdGNwY21kKFxcXCJURVJNIENPTk1PREUgMzI3MFxcXCIsIE5VTEwsIDAsIE5VTEwpO1xcbi0tXFxuZHJpdmVycy9zMzkwL2NoYXIvaG1jZHJ2X2Z0cC5jPTI5Mz1pbnQgaG1jZHJ2X2Z0cF9zdGFydHVwKHZvaWQpXFxuLS1cXG5kcml2ZXJzL3MzOTAvY2hhci9obWNkcnZfZnRwLmMtMzExLVxcdGlmIChobWNkcnZfZnRwX3JlZmNudCA9PSAwKSB7XFxuZHJpdmVycy9zMzkwL2NoYXIvaG1jZHJ2X2Z0cC5jOjMxMjpcXHRcXHRpZiAobWFjaGluZV9pc192bSgpKVxcbmRyaXZlcnMvczM5MC9jaGFyL2htY2Rydl9mdHAuYy0zMTMtXFx0XFx0XFx0aG1jZHJ2X2Z0cF9mdW5jcyA9IFxcdTAwMjZobWNkcnZfZnRwX3p2bTtcXG4tLVxcbmRyaXZlcnMvczM5MC9jaGFyL21vbnJlYWRlci5jPTQ1ND1zdGF0aWMgaW50IF9faW5pdCBtb25faW5pdCh2b2lkKVxcbi0tXFxuZHJpdmVycy9zMzkwL2NoYXIvbW9ucmVhZGVyLmMtNDU3LVxcbmRyaXZlcnMvczM5MC9jaGFyL21vbnJlYWRlci5jOjQ1ODpcXHRpZiAoIW1hY2hpbmVfaXNfdm0oKSkge1xcbmRyaXZlcnMvczM5MC9jaGFyL21vbnJlYWRlci5jLTQ1OS1cXHRcXHRwcl9lcnIoXFxcIlRoZSB6L1ZNICpNT05JVE9SIHJlY29yZCBkZXZpY2UgZHJpdmVyIGNhbm5vdCBiZSBcXFwiXFxuLS1cXG5kcml2ZXJzL3MzOTAvY2hhci9tb253cml0ZXIuYz0yOTc9c3RhdGljIGludCBfX2luaXQgbW9uX2luaXQodm9pZClcXG5kcml2ZXJzL3MzOTAvY2hhci9tb253cml0ZXIuYy0yOTgte1xcbmRyaXZlcnMvczM5MC9jaGFyL21vbndyaXRlci5jOjI5OTpcXHRpZiAoIW1hY2hpbmVfaXNfdm0oKSlcXG5kcml2ZXJzL3MzOTAvY2hhci9tb253cml0ZXIuYy0zMDAtXFx0XFx0cmV0dXJuIC1FTk9ERVY7XFxuLS1cXG5kcml2ZXJzL3MzOTAvY2hhci9yYXczMjcwLmM9NjE0PXN0YXRpYyB2b2lkIHJhdzMyNzBfcmVzZXRfZGV2aWNlX2NiKHN0cnVjdCByYXczMjcwX3JlcXVlc3QgKnJxLCB2b2lkICpkYXRhKVxcbi0tXFxuZHJpdmVycy9zMzkwL2NoYXIvcmF3MzI3MC5jLTYyMi1cXHRcXHRycC1cXHUwMDNlc3RhdGUgPSBSQVczMjcwX1NUQVRFX0lOSVQ7XFxuZHJpdmVycy9zMzkwL2NoYXIvcmF3MzI3MC5jOjYyMzpcXHR9IGVsc2UgaWYgKG1hY2hpbmVfaXNfdm0oKSkge1xcbmRyaXZlcnMvczM5MC9jaGFyL3JhdzMyNzAuYy02MjQtXFx0XFx0cmF3MzI3MF9zaXplX2RldmljZV92bShycCk7XFxuLS1cXG5kcml2ZXJzL3MzOTAvY2hhci9zY2xwLmg9MzQ0PXNjbHBfYXNjZWJjKHVuc2lnbmVkIGNoYXIgY2gpXFxuZHJpdmVycy9zMzkwL2NoYXIvc2NscC5oLTM0NS17XFxuZHJpdmVycy9zMzkwL2NoYXIvc2NscC5oOjM0NjpcXHRyZXR1cm4gKG1hY2hpbmVfaXNfdm0oKSkgPyBfYXNjZWJjW2NoXSA6IF9hc2NlYmNfNTAwW2NoXTtcXG5kcml2ZXJzL3MzOTAvY2hhci9zY2xwLmgtMzQ3LX1cXG4tLVxcbmRyaXZlcnMvczM5MC9jaGFyL3NjbHAuaD0zNTE9c2NscF9lYmNhc2Nfc3RyKGNoYXIgKnN0ciwgaW50IG5yKVxcbmRyaXZlcnMvczM5MC9jaGFyL3NjbHAuaC0zNTIte1xcbmRyaXZlcnMvczM5MC9jaGFyL3NjbHAuaDozNTM6XFx0KG1hY2hpbmVfaXNfdm0oKSkgPyBFQkNBU0Moc3RyLCBucikgOiBFQkNBU0NfNTAwKHN0ciwgbnIpO1xcbmRyaXZlcnMvczM5MC9jaGFyL3NjbHAuaC0zNTQtfVxcbi0tXFxuZHJpdmVycy9zMzkwL2NoYXIvc2NscC5oPTM1OD1zY2xwX2FzY2ViY19zdHIoY2hhciAqc3RyLCBpbnQgbnIpXFxuZHJpdmVycy9zMzkwL2NoYXIvc2NscC5oLTM1OS17XFxuZHJpdmVycy9zMzkwL2NoYXIvc2NscC5oOjM2MDpcXHQobWFjaGluZV9pc192bSgpKSA/IEFTQ0VCQyhzdHIsIG5yKSA6IEFTQ0VCQ181MDAoc3RyLCBucik7XFxuZHJpdmVycy9zMzkwL2NoYXIvc2NscC5oLTM2MS19XFxuLS1cXG5kcml2ZXJzL3MzOTAvY2hhci9zY2xwX2Vhcmx5LmM9MjY9c3RhdGljIHZvaWQgX19pbml0IHNjbHBfZWFybHlfZmFjaWxpdGllc19kZXRlY3Qodm9pZClcXG4tLVxcbmRyaXZlcnMvczM5MC9jaGFyL3NjbHBfZWFybHkuYy03OC1cXHRpZiAoIXNjY2ItXFx1MDAzZWhjcHVhKSB7XFxuZHJpdmVycy9zMzkwL2NoYXIvc2NscF9lYXJseS5jOjc5OlxcdFxcdGlmIChtYWNoaW5lX2lzX3ZtKCkpXFxuZHJpdmVycy9zMzkwL2NoYXIvc2NscF9lYXJseS5jLTgwLVxcdFxcdFxcdHNjbHAubWF4X2NvcmVzID0gNjQ7XFxuLS1cXG5kcml2ZXJzL3MzOTAvY2hhci9zY2xwX3R0eS5jPTUwNT1zY2xwX3R0eV9pbml0KHZvaWQpXFxuLS1cXG5kcml2ZXJzL3MzOTAvY2hhci9zY2xwX3R0eS5jLTUxMi1cXHQvKiB6L1ZNIG11bHRpcGxleGVzIHRoZSBsaW5lIG1vZGUgb3V0cHV0IG9uIHRoZSAzMnh4IHNjcmVlbiAqL1xcbmRyaXZlcnMvczM5MC9jaGFyL3NjbHBfdHR5LmM6NTEzOlxcdGlmIChtYWNoaW5lX2lzX3ZtKCkgXFx1MDAyNlxcdTAwMjYgIUNPTlNPTEVfSVNfU0NMUClcXG5kcml2ZXJzL3MzOTAvY2hhci9zY2xwX3R0eS5jLTUxNC1cXHRcXHRyZXR1cm4gMDtcXG4tLVxcbmRyaXZlcnMvczM5MC9jaGFyL3NjbHBfdHR5LmMtNTM4LVxcdHNjbHBfdHR5X2J1ZmZlcl9jb3VudCA9IDA7XFxuZHJpdmVycy9zMzkwL2NoYXIvc2NscF90dHkuYzo1Mzk6XFx0aWYgKG1hY2hpbmVfaXNfdm0oKSkge1xcbmRyaXZlcnMvczM5MC9jaGFyL3NjbHBfdHR5LmMtNTQwLVxcdFxcdC8qIGNhc2UgaW5wdXQgbGluZXMgdG8gbG93ZXJjYXNlICovXFxuLS1cXG5kcml2ZXJzL3MzOTAvY2hhci92bWNwLmM9NTI9dm9pZCBfX2luaXQgdm1jcF9jbWFfcmVzZXJ2ZSh2b2lkKVxcbmRyaXZlcnMvczM5MC9jaGFyL3ZtY3AuYy01My17XFxuZHJpdmVycy9zMzkwL2NoYXIvdm1jcC5jOjU0OlxcdGlmICghbWFjaGluZV9pc192bSgpKVxcbmRyaXZlcnMvczM5MC9jaGFyL3ZtY3AuYy01NS1cXHRcXHRyZXR1cm47XFxuLS1cXG5kcml2ZXJzL3MzOTAvY2hhci92bWNwLmM9MjQ4PXN0YXRpYyBpbnQgX19pbml0IHZtY3BfaW5pdCh2b2lkKVxcbi0tXFxuZHJpdmVycy9zMzkwL2NoYXIvdm1jcC5jLTI1MS1cXG5kcml2ZXJzL3MzOTAvY2hhci92bWNwLmM6MjUyOlxcdGlmICghbWFjaGluZV9pc192bSgpKVxcbmRyaXZlcnMvczM5MC9jaGFyL3ZtY3AuYy0yNTMtXFx0XFx0cmV0dXJuIDA7XFxuLS1cXG5kcml2ZXJzL3MzOTAvY2hhci92bWxvZ3Jkci5jPTgwNj1zdGF0aWMgaW50IF9faW5pdCB2bWxvZ3Jkcl9pbml0KHZvaWQpXFxuLS1cXG5kcml2ZXJzL3MzOTAvY2hhci92bWxvZ3Jkci5jLTgxMS1cXG5kcml2ZXJzL3MzOTAvY2hhci92bWxvZ3Jkci5jOjgxMjpcXHRpZiAoIW1hY2hpbmVfaXNfdm0oKSkge1xcbmRyaXZlcnMvczM5MC9jaGFyL3ZtbG9ncmRyLmMtODEzLVxcdFxcdHByX2VycihcXFwibm90IHJ1bm5pbmcgdW5kZXIgVk0sIGRyaXZlciBub3QgbG9hZGVkLlxcXFxuXFxcIik7XFxuLS1cXG5kcml2ZXJzL3MzOTAvY2hhci92bXVyLmM9MTAwNj1zdGF0aWMgaW50IF9faW5pdCB1cl9pbml0KHZvaWQpXFxuLS1cXG5kcml2ZXJzL3MzOTAvY2hhci92bXVyLmMtMTAxMC1cXG5kcml2ZXJzL3MzOTAvY2hhci92bXVyLmM6MTAxMTpcXHRpZiAoIW1hY2hpbmVfaXNfdm0oKSkge1xcbmRyaXZlcnMvczM5MC9jaGFyL3ZtdXIuYy0xMDEyLVxcdFxcdHByX2VycihcXFwiVGhlICVzIGNhbm5vdCBiZSBsb2FkZWQgd2l0aG91dCB6L1ZNXFxcXG5cXFwiLFxcbi0tXFxuZHJpdmVycy9zMzkwL2Npby9kZXZpY2VfaWQuYz0xNzM9c3RhdGljIHZvaWQgc25zaWRfY2FsbGJhY2soc3RydWN0IGNjd19kZXZpY2UgKmNkZXYsIHZvaWQgKmRhdGEsIGludCByYylcXG4tLVxcbmRyaXZlcnMvczM5MC9jaW8vZGV2aWNlX2lkLmMtMTc4LVxcbmRyaXZlcnMvczM5MC9jaW8vZGV2aWNlX2lkLmM6MTc5OlxcdGlmIChyYyBcXHUwMDI2XFx1MDAyNiBtYWNoaW5lX2lzX3ZtKCkpIHtcXG5kcml2ZXJzL3MzOTAvY2lvL2RldmljZV9pZC5jLTE4MC1cXHRcXHQvKiBUcnkgZGlhZyAweDIxMCBmYWxsYmFjayBvbiB6L1ZNLiAqL1xcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by9hcF9idXMuYz0yNDk0PXN0YXRpYyBpbmxpbmUgaW50IF9faW5pdCBhcF9hc3luY19pbml0KHZvaWQpXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL2FwX2J1cy5jLTI1MDQtXFx0ICovXFxuZHJpdmVycy9zMzkwL2NyeXB0by9hcF9idXMuYzoyNTA1OlxcdGlmIChtYWNoaW5lX2lzX3ZtKCkpXFxuZHJpdmVycy9zMzkwL2NyeXB0by9hcF9idXMuYy0yNTA2LVxcdFxcdHBvbGxfaGlnaF90aW1lb3V0ID0gMTUwMDAwMDtcXG4tLVxcbmRyaXZlcnMvczM5MC9uZXQvcWV0aF9sMl9tYWluLmM9Mjk3PXN0YXRpYyBpbnQgcWV0aF9sMl9yZXF1ZXN0X2luaXRpYWxfbWFjKHN0cnVjdCBxZXRoX2NhcmQgKmNhcmQpXFxuLS1cXG5kcml2ZXJzL3MzOTAvbmV0L3FldGhfbDJfbWFpbi5jLTMwMi1cXG5kcml2ZXJzL3MzOTAvbmV0L3FldGhfbDJfbWFpbi5jOjMwMzpcXHRpZiAobWFjaGluZV9pc192bSgpKSB7XFxuZHJpdmVycy9zMzkwL25ldC9xZXRoX2wyX21haW4uYy0zMDQtXFx0XFx0cmMgPSBxZXRoX3ZtX3JlcXVlc3RfbWFjKGNhcmQpO1xcbi0tXFxuZHJpdmVycy9zMzkwL25ldC9zbXNnaXVjdi5jPTEzOT1zdGF0aWMgaW50IF9faW5pdCBzbXNnX2luaXQodm9pZClcXG4tLVxcbmRyaXZlcnMvczM5MC9uZXQvc21zZ2l1Y3YuYy0xNDItXFxuZHJpdmVycy9zMzkwL25ldC9zbXNnaXVjdi5jOjE0MzpcXHRpZiAoIW1hY2hpbmVfaXNfdm0oKSkge1xcbmRyaXZlcnMvczM5MC9uZXQvc21zZ2l1Y3YuYy0xNDQtXFx0XFx0cmMgPSAtRVBST1RPTk9TVVBQT1JUO1xcbi0tXFxuZHJpdmVycy9zMzkwL25ldC9zbXNnaXVjdl9hcHAuYz0xNTI9c3RhdGljIGludCBfX2luaXQgc21zZ2l1Y3ZfYXBwX2luaXQodm9pZClcXG4tLVxcbmRyaXZlcnMvczM5MC9uZXQvc21zZ2l1Y3ZfYXBwLmMtMTU2LVxcbmRyaXZlcnMvczM5MC9uZXQvc21zZ2l1Y3ZfYXBwLmM6MTU3OlxcdGlmICghbWFjaGluZV9pc192bSgpKVxcbmRyaXZlcnMvczM5MC9uZXQvc21zZ2l1Y3ZfYXBwLmMtMTU4LVxcdFxcdHJldHVybiAtRU5PREVWO1xcbi0tXFxuZHJpdmVycy90dHkvaHZjL2h2Y19pdWN2LmM9MTIzOT1zdGF0aWMgaW50IHBhcmFtX3NldF92bWlkZmlsdGVyKGNvbnN0IGNoYXIgKnZhbCwgY29uc3Qgc3RydWN0IGtlcm5lbF9wYXJhbSAqa3ApXFxuLS1cXG5kcml2ZXJzL3R0eS9odmMvaHZjX2l1Y3YuYy0xMjQyLVxcbmRyaXZlcnMvdHR5L2h2Yy9odmNfaXVjdi5jOjEyNDM6XFx0aWYgKCFtYWNoaW5lX2lzX3ZtKCkgfHwgIWh2Y19pdWN2X2RldmljZXMpXFxuZHJpdmVycy90dHkvaHZjL2h2Y19pdWN2LmMtMTI0NC1cXHRcXHRyZXR1cm4gLUVOT0RFVjtcXG4tLVxcbmRyaXZlcnMvdHR5L2h2Yy9odmNfaXVjdi5jPTEyNjY9c3RhdGljIGludCBwYXJhbV9nZXRfdm1pZGZpbHRlcihjaGFyICpidWZmZXIsIGNvbnN0IHN0cnVjdCBrZXJuZWxfcGFyYW0gKmtwKVxcbi0tXFxuZHJpdmVycy90dHkvaHZjL2h2Y19pdWN2LmMtMTI3MS1cXG5kcml2ZXJzL3R0eS9odmMvaHZjX2l1Y3YuYzoxMjcyOlxcdGlmICghbWFjaGluZV9pc192bSgpIHx8ICFodmNfaXVjdl9kZXZpY2VzKVxcbmRyaXZlcnMvdHR5L2h2Yy9odmNfaXVjdi5jLTEyNzMtXFx0XFx0cmV0dXJuIC1FTk9ERVY7XFxuLS1cXG5kcml2ZXJzL3R0eS9odmMvaHZjX2l1Y3YuYz0xMzAxPXN0YXRpYyBpbnQgX19pbml0IGh2Y19pdWN2X2luaXQodm9pZClcXG4tLVxcbmRyaXZlcnMvdHR5L2h2Yy9odmNfaXVjdi5jLTEzMDgtXFxuZHJpdmVycy90dHkvaHZjL2h2Y19pdWN2LmM6MTMwOTpcXHRpZiAoIW1hY2hpbmVfaXNfdm0oKSkge1xcbmRyaXZlcnMvdHR5L2h2Yy9odmNfaXVjdi5jLTEzMTAtXFx0XFx0cHJfbm90aWNlKFxcXCJUaGUgei9WTSBJVUNWIEhWQyBkZXZpY2UgZHJpdmVyIGNhbm5vdCBcXFwiXFxuLS1cXG5kcml2ZXJzL3dhdGNoZG9nL2RpYWcyODhfd2R0LmM9ODE9c3RhdGljIGludCB3ZHRfc3RhcnQoc3RydWN0IHdhdGNoZG9nX2RldmljZSAqZGV2KVxcbi0tXFxuZHJpdmVycy93YXRjaGRvZy9kaWFnMjg4X3dkdC5jLTg1LVxcbmRyaXZlcnMvd2F0Y2hkb2cvZGlhZzI4OF93ZHQuYzo4NjpcXHRpZiAobWFjaGluZV9pc192bSgpKSB7XFxuZHJpdmVycy93YXRjaGRvZy9kaWFnMjg4X3dkdC5jLTg3LVxcdFxcdGZ1bmMgPSBjb25jZWFsX29uID8gKFdEVF9GVU5DX0lOSVQgfCBXRFRfRlVOQ19DT05DRUFMKVxcbi0tXFxuZHJpdmVycy93YXRjaGRvZy9kaWFnMjg4X3dkdC5jPTEwNz1zdGF0aWMgaW50IHdkdF9waW5nKHN0cnVjdCB3YXRjaGRvZ19kZXZpY2UgKmRldilcXG4tLVxcbmRyaXZlcnMvd2F0Y2hkb2cvZGlhZzI4OF93ZHQuYy0xMTEtXFxuZHJpdmVycy93YXRjaGRvZy9kaWFnMjg4X3dkdC5jOjExMjpcXHRpZiAobWFjaGluZV9pc192bSgpKSB7XFxuZHJpdmVycy93YXRjaGRvZy9kaWFnMjg4X3dkdC5jLTExMy1cXHRcXHQvKlxcbi0tXFxuZHJpdmVycy93YXRjaGRvZy9kaWFnMjg4X3dkdC5jPTE2Mj1zdGF0aWMgaW50IF9faW5pdCBkaWFnMjg4X2luaXQodm9pZClcXG4tLVxcbmRyaXZlcnMvd2F0Y2hkb2cvZGlhZzI4OF93ZHQuYy0xNjUtXFxuZHJpdmVycy93YXRjaGRvZy9kaWFnMjg4X3dkdC5jOjE2NjpcXHRpZiAobWFjaGluZV9pc192bSgpKSB7XFxuZHJpdmVycy93YXRjaGRvZy9kaWFnMjg4X3dkdC5jLTE2Ny1cXHRcXHRjbWRfYnVmID0ga21hbGxvYyhNQVhfQ01ETEVOLCBHRlBfS0VSTkVMKTtcXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYz0yMzA3PXN0YXRpYyBpbnQgX19pbml0IGFmaXVjdl9pbml0KHZvaWQpXFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmMtMjMxMC1cXG5uZXQvaXVjdi9hZl9pdWN2LmM6MjMxMTpcXHRpZiAobWFjaGluZV9pc192bSgpIFxcdTAwMjZcXHUwMDI2IElTX0VOQUJMRUQoQ09ORklHX0lVQ1YpKSB7XFxubmV0L2l1Y3YvYWZfaXVjdi5jLTIzMTItXFx0XFx0Y3BjbWQoXFxcIlFVRVJZIFVTRVJJRFxcXCIsIGl1Y3ZfdXNlcmlkLCBzaXplb2YoaXVjdl91c2VyaWQpLCBcXHUwMDI2ZXJyKTtcXG4tLVxcbm5ldC9pdWN2L2l1Y3YuYz0xODYyPXN0YXRpYyBpbnQgX19pbml0IGl1Y3ZfaW5pdCh2b2lkKVxcbi0tXFxubmV0L2l1Y3YvaXVjdi5jLTE4NjUtXFxubmV0L2l1Y3YvaXVjdi5jOjE4NjY6XFx0aWYgKCFtYWNoaW5lX2lzX3ZtKCkpIHtcXG5uZXQvaXVjdi9pdWN2LmMtMTg2Ny1cXHRcXHRyYyA9IC1FUFJPVE9OT1NVUFBPUlQ7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE1VDE1OjU1OjIyLjc5MDQ2NjM5NFoiLCJTZXEiOjMxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1Mjk2NjU3MTk5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBJVUNWIEluaXRpYWxpemF0aW9uKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgYGFmaXVjdl9pbml0YCBhbmQgaW1tZWRpYXRlbHkgc2VlaW5nIGEgY29uZGl0aW9uYWwgYmxvY2sgZGVhbGluZyB3aXRoIHovVk0gYW5kIElVQ1YuIEl0J3MgdXNpbmcgYG1hY2hpbmVfaXNfdm0oKWAgYW5kIGNoZWNraW5nIGZvciBgQ09ORklHX0lVQ1ZgLiBTZWVtcyBzdHJhaWdodGZvcndhcmQ6IGlmIHdlJ3JlIG9uIGEgei9WTSBtYWNoaW5lIGFuZCBJVUNWIGlzIGVuYWJsZWQsIGl0IGdyYWJzIHRoZSB1c2VyIElEIHdpdGggYSBgY3BjbWRgIGNhbGwuIFRoZW4gaXQgYXNzaWducyBgcHJfaXVjdmAgdG8gcG9pbnQgdG8gYFx1MDAyNml1Y3ZfaWZgLiBIb3dldmVyLCBpZiB3ZSdyZSAqbm90KiBpbiBhIHovVk0gZW52aXJvbm1lbnQsIHdoaWNoLCB0aGlua2luZyBhYm91dCBpdCwgaXMgdGhlIGNhc2Ugd2l0aCBRRU1VICh1bmxlc3MgUUVNVSBpcyBiZWluZyB1c2VkIHRvIGVtdWxhdGUgei9WTSAtIGJ1dCBpdCdzIGVtdWxhdGluZyBMUEFSIG9yIEtWTSksIGBwcl9pdWN2YCBnZXRzIHNldCB0byBOVUxMLCBhbmQgdGhlIGBpdWN2X3VzZXJpZGAgaXMgY2xlYXJlZC5cblxuTm93LCB0aGUgaW1wb3J0YW50IGNvbm5lY3Rpb24gaGVyZSBpcyB0aGUgaW1wbGljYXRpb24gdGhpcyBjYXJyaWVzIHRocm91Z2ggdGhlIGNvZGUuIElmIGBwcl9pdWN2YCBpcyBOVUxMLCBhcyBpdCB3aWxsIGJlIGluIHRoZSBRRU1VIGNhc2UgSSdtIHRlc3RpbmcsIGBpdWN2LVx1MDAzZXRyYW5zcG9ydGAgaXMgKiphbHdheXMqKiBzZXQgdG8gYEFGX0lVQ1ZfVFJBTlNfSElQRVJgLiBJIG5lZWQgdG8gcmV2aXNpdCBgaXVjdl9zb2NrX2FsbG9jYCB0byBjb25maXJtIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhpcyBpbXBsaWNhdGlvbi4gTGV0IG1lIGp1c3QgZG91YmxlLWNoZWNrIHRoYXQgcGFydC4uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyODM2OCwiT3V0cHV0VG9rZW5zIjo0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNVQxNTo1NToyOC4wODcxMjYyMTNaIiwiU2VxIjozMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTIyNDQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9pdWN2L2FmX2l1Y3YuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA0OTAsXG4gIFwiTGluZUNvdW50XCI6IDEwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA0OTA6XFx0XFx0aXVjdi1cXHUwMDNlcGF0aCA9IE5VTEw7XFxuIDQ5MTpcXHRcXHRpdWN2LVxcdTAwM2Vza190eG5vdGlmeSA9IGFmaXVjdl9oc19jYWxsYmFja190eG5vdGlmeTtcXG4gNDkyOlxcdFxcdG1lbXNldChcXHUwMDI2aXVjdi1cXHUwMDNlaW5pdCwgMCwgc2l6ZW9mKGl1Y3YtXFx1MDAzZWluaXQpKTtcXG4gNDkzOlxcdFxcdGlmIChwcl9pdWN2KVxcbiA0OTQ6XFx0XFx0XFx0aXVjdi1cXHUwMDNldHJhbnNwb3J0ID0gQUZfSVVDVl9UUkFOU19JVUNWO1xcbiA0OTU6XFx0XFx0ZWxzZVxcbiA0OTY6XFx0XFx0XFx0aXVjdi1cXHUwMDNldHJhbnNwb3J0ID0gQUZfSVVDVl9UUkFOU19ISVBFUjtcXG4gNDk3OlxcdFxcbiA0OTg6XFx0XFx0c2stXFx1MDAzZXNrX2Rlc3RydWN0ID0gaXVjdl9zb2NrX2Rlc3RydWN0O1xcbiA0OTk6XFx0XFx0c2stXFx1MDAzZXNrX3NuZHRpbWVvID0gSVVDVl9DT05OX1RJTUVPVVQ7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE1VDE1OjU1OjI4LjA4NzI0OTk2MloiLCJTZXEiOjMzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NjU4MzgyODI1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoaXMgSVVDViBDb2RlKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgdHJhY2luZyB0aGUgbG9naWMuIElmIGBwcl9pdWN2YCBpcyBOVUxMLCB0aGVuIHRoZSB0cmFuc3BvcnQgdHlwZSBmb3IgdGhlIGBpdWN2YCBzdHJ1Y3R1cmUgaXMgZGVmaW5pdGVseSBnb2luZyB0byBiZSBgQUZfSVVDVl9UUkFOU19ISVBFUmAsIHRoYXQncyBhIGdpdmVuLiBUaGUgcGF0Y2ggY29kZSBpdHNlbGYsIHdpdGggdGhhdCBgaWYgKGVyciBcdTAwMjZcdTAwMjYgaXVjdi1cdTAwM2V0cmFuc3BvcnQgPT0gQUZfSVVDVl9UUkFOU19JVUNWKWAgYmxvY2ssICpvbmx5KiBnZXRzIGV4ZWN1dGVkIHdoZW4gdGhlIHRyYW5zcG9ydCBpcyBzZXQgdG8gYEFGX0lVQ1ZfVFJBTlNfSVVDVmAuIEFuZCB0aGF0IHNwZWNpZmljIHRyYW5zcG9ydCB2YWx1ZSBpcyAqZXhjbHVzaXZlbHkqIHNldCB3aGVuIGBwcl9pdWN2YCBpcyBub24tTlVMTC4gVGhlIGtpY2tlciBoZXJlIGlzIGBwcl9pdWN2YCBpcyAqb25seSogbm9uLU5VTEwgd2hlbiBgbWFjaGluZV9pc192bSgpYCByZXR1cm5zIHRydWUuIFNvIHRoYXQgZ2l2ZXMgbWUgbXkga2V5IHF1ZXN0aW9uOiBjYW4gd2UgcmVhY2ggYSBzaXR1YXRpb24gaW4gUUVNVSB3aGVyZSBgbWFjaGluZV9pc192bSgpYCB3b3VsZCBhY3R1YWxseSBiZSB0cnVlPyBJIG5lZWQgdG8gZGlnIGludG8gaG93IHRoYXQgZnVuY3Rpb24gaXMgZGVmaW5lZCBhbmQgZmlndXJlIHRoYXQgb3V0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyOTE0MCwiT3V0cHV0VG9rZW5zIjo0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI2MywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE1VDE1OjU1OjMzLjc0NTYzNTAwOVoiLCJTZXEiOjM0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjgwNDk4NTgxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIiNkZWZpbmUgbWFjaGluZV9pc192bVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3MzOTAvaW5jbHVkZS9hc20vbWFjaGluZS5oXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvczM5MC9pbmNsdWRlL2FzbS9tYWNoaW5lLmg9OTc9REVGSU5FX01BQ0hJTkVfSEFTX0ZFQVRVUkUobHBhciwgTUZFQVRVUkVfTFBBUilcXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vbWFjaGluZS5oLTk4LVxcbmFyY2gvczM5MC9pbmNsdWRlL2FzbS9tYWNoaW5lLmg6OTk6I2RlZmluZSBtYWNoaW5lX2lzX3ZtXFx0bWFjaGluZV9oYXNfdm1cXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vbWFjaGluZS5oLTEwMC0jZGVmaW5lIG1hY2hpbmVfaXNfa3ZtXFx0bWFjaGluZV9oYXNfa3ZtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE1VDE1OjU1OjM0LjAyNjE0MDQ5WiIsIlNlcSI6MzUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMwNzUzMDkzNDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkNoZWNraW5nIHRoZSBWaXJ0dWFsIE1hY2hpbmUgU3RhdGUqKlxuXG5SaWdodCwgbGV0J3MganVzdCBtYWtlIHN1cmUgd2UncmUgb24gdGhlIHNhbWUgcGFnZS4gQmVmb3JlIHdlIGV2ZW4gY29uc2lkZXIgYW55dGhpbmcgZWxzZSwgaXQncyBhYnNvbHV0ZWx5IGNydWNpYWwgdGhhdCB3ZSB2ZXJpZnkgdGhlIHN0YXRlIG9mIHRoZSB2aXJ0dWFsIG1hY2hpbmUgZW52aXJvbm1lbnQuIFRoZSBmdW5jdGlvbiBvciB2YXJpYWJsZSBgbWFjaGluZV9oYXNfdm1gIGlzIHRoZSBzaW5nbGUgcG9pbnQgb2YgdHJ1dGggaGVyZS4gV2UgbmVlZCB0byBhc2NlcnRhaW4gaWYgdGhlIHZpcnR1YWwgbWFjaGluZSBpcyBhY3RpdmVseSBwcmVzZW50LCBwcm9wZXJseSBjb25maWd1cmVkLCBhbmQgZnVuY3Rpb25pbmcgYXMgZXhwZWN0ZWQuIEl0J3MgdGhlIGx5bmNocGluLiBJZiB0aGF0IGJhc2ljIGNvbmRpdGlvbiBpc24ndCBtZXQsIHRoZXJlJ3Mgbm8gcG9pbnQgaW4gcHJvY2VlZGluZyBmdXJ0aGVyIGRvd24gdGhlIGRpYWdub3N0aWMgb3Igb3BlcmF0aW9uYWwgcGF0aC4gV2UncmUgZXNzZW50aWFsbHkgZ3JvdW5kaW5nIG91cnNlbHZlcyBieSBxdWlja2x5IHZhbGlkYXRpbmcgdGhlIHZpcnR1YWwgbWFjaGluZSBlbnZpcm9ubWVudCBmaXJzdC4gRnJvbSB0aGVyZSwgd2UgY2FuIHRoZW4gYmVnaW4gdG8gYXNzZXNzIHRoZSBzdGF0ZS5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjk4MDMsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNVQxNTo1NTozNy4xMDE0NTIwMDJaIiwiU2VxIjozNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUwMTkyNjY4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1hY2hpbmVfaGFzX3ZtXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gvczM5MC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9zMzkwL2luY2x1ZGUvYXNtL21hY2hpbmUuaD05Nz1ERUZJTkVfTUFDSElORV9IQVNfRkVBVFVSRShscGFyLCBNRkVBVFVSRV9MUEFSKVxcbmFyY2gvczM5MC9pbmNsdWRlL2FzbS9tYWNoaW5lLmgtOTgtXFxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL21hY2hpbmUuaDo5OTojZGVmaW5lIG1hY2hpbmVfaXNfdm1cXHRtYWNoaW5lX2hhc192bVxcbmFyY2gvczM5MC9pbmNsdWRlL2FzbS9tYWNoaW5lLmgtMTAwLSNkZWZpbmUgbWFjaGluZV9pc19rdm1cXHRtYWNoaW5lX2hhc19rdm1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTVUMTU6NTU6MzcuMTUxNjQ5ODMxWiIsIlNlcSI6MzcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ5NTkyMzM3MjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIHRoZSBWTSBGZWF0dXJlIERlZmluaXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGBtYWNoaW5lX2hhc192bWAgbWFjcm8uLi4gYW5kIGhhbmcgb24sIGlzIHRoYXQgcmlnaHQ/IEl0IGxvb2tzIGxpa2UgYG1hY2hpbmVfaGFzX3ZtYCBpcyAqZGVmaW5lZCogdXNpbmcgYERFRklORV9NQUNISU5FX0hBU19GRUFUVVJFKHZtLCBNRkVBVFVSRV9WTSlgLiBUaGF0IGZlZWxzIGEgbGl0dGxl4oCmIGluZGlyZWN0LiBJIG5lZWQgdG8gdW5wYWNrIHRoaXMuIElzIGBERUZJTkVfTUFDSElORV9IQVNfRkVBVFVSRWAgYSBtYWNybyBpdHNlbGY/IFdoYXQgYXJndW1lbnRzIGlzIGl0IHRha2luZywgYW5kIHdoYXQgYXJlIHRoZXkgdHJhbnNsYXRpbmcgdG8gdW5kZXIgdGhlIGhvb2Q/IEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgYHZtYCBhbmQgYE1GRUFUVVJFX1ZNYCBpZGVudGlmaWVycyBhcmUgYmVpbmcgY29ubmVjdGVkIHRocm91Z2ggdGhpcyBtYWNyby4gSeKAmW0gZ3Vlc3NpbmcgYE1GRUFUVVJFX1ZNYCBpcyBhbiBlbnVtIG9yIGEgYml0ZmllbGQgcmVwcmVzZW50YXRpb24gb2YgdGhlIFZNIGNhcGFiaWxpdHksIGJ1dCBJIG5lZWQgdG8gY29uZmlybS4gSXTigJlzIGltcG9ydGFudCB0byBzZWUgaWYgdGhlcmUncyBhbnkgcG90ZW50aWFsIGZvciBzdWJ0bGUgZXJyb3JzIG9yIGltcGxpY2l0IGFzc3VtcHRpb25zIGluIHRoaXMgYXBwcm9hY2gsIHBhcnRpY3VsYXJseSBpZiB0aGlzIGZlYXR1cmUtY2hlY2tpbmcgbWVjaGFuaXNtIGlzIHVzZWQgaGVhdmlseSB0aHJvdWdob3V0IHRoZSBjb2RlYmFzZS4gSSB3b25kZXIgaWYgdGhlcmUgbWlnaHQgYmUgYSBtb3JlIGRpcmVjdCwgcGVyaGFwcyBsZXNzIG1hY3JvLWhlYXZ5IGFwcHJvYWNoIHRoYXQgd291bGQgZW5oYW5jZSByZWFkYWJpbGl0eSBhbmQgcmVkdWNlIHRoZSBjaGFuY2Ugb2Ygb2JzY3VyZSwgbWFjcm8tcmVsYXRlZCBidWdzLiBMZXQncyBzZWUgaG93IHRoaXMgdW5mb2xkc+KApiBJIG5lZWQgdG8gc2VlIGV4YWN0bHkgd2hhdCB0aGlzIGV4cGFuc2lvbiBvZiBgREVGSU5FX01BQ0hJTkVfSEFTX0ZFQVRVUkVgIHlpZWxkcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MzAxNDQsIk91dHB1dFRva2VucyI6NDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNVQxNTo1NTo0Mi4xMTA4ODY3NDhaIiwiU2VxIjozOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1NDIyODQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkRFRklORV9NQUNISU5FX0hBU19GRUFUVVJFXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gvczM5MC9pbmNsdWRlL2FzbS9tYWNoaW5lLmhcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9zMzkwL2luY2x1ZGUvYXNtL21hY2hpbmUuaD02OD1zdGF0aWMgX19hbHdheXNfaW5saW5lIGJvb2wgX190ZXN0X21hY2hpbmVfZmVhdHVyZV9jb25zdGFudCh1bnNpZ25lZCBpbnQgbnIpXFxuLS1cXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vbWFjaGluZS5oLTgwLVxcbmFyY2gvczM5MC9pbmNsdWRlL2FzbS9tYWNoaW5lLmg6ODE6I2RlZmluZSBERUZJTkVfTUFDSElORV9IQVNfRkVBVFVSRShuYW1lLCBmZWF0dXJlKVxcdFxcdFxcdFxcdFxcXFxcXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vbWFjaGluZS5oLTgyLXN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgYm9vbCBtYWNoaW5lX2hhc18jI25hbWUodm9pZClcXHRcXHRcXHRcXHRcXFxcXFxuLS1cXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vbWFjaGluZS5oLTg4LVxcbmFyY2gvczM5MC9pbmNsdWRlL2FzbS9tYWNoaW5lLmg6ODk6REVGSU5FX01BQ0hJTkVfSEFTX0ZFQVRVUkUocmVsb2NhdGVkX2xvd2NvcmUsIE1GRUFUVVJFX0xPV0NPUkUpXFxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL21hY2hpbmUuaDo5MDpERUZJTkVfTUFDSElORV9IQVNfRkVBVFVSRShzY2MsIE1GRUFUVVJFX1NDQylcXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vbWFjaGluZS5oOjkxOkRFRklORV9NQUNISU5FX0hBU19GRUFUVVJFKHRsYl9ndWVzdCwgTUZFQVRVUkVfVExCX0dVRVNUKVxcbmFyY2gvczM5MC9pbmNsdWRlL2FzbS9tYWNoaW5lLmg6OTI6REVGSU5FX01BQ0hJTkVfSEFTX0ZFQVRVUkUodHgsIE1GRUFUVVJFX1RYKVxcbmFyY2gvczM5MC9pbmNsdWRlL2FzbS9tYWNoaW5lLmg6OTM6REVGSU5FX01BQ0hJTkVfSEFTX0ZFQVRVUkUoZXNvcCwgTUZFQVRVUkVfRVNPUClcXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vbWFjaGluZS5oOjk0OkRFRklORV9NQUNISU5FX0hBU19GRUFUVVJFKGRpYWc5YywgTUZFQVRVUkVfRElBRzlDKVxcbmFyY2gvczM5MC9pbmNsdWRlL2FzbS9tYWNoaW5lLmg6OTU6REVGSU5FX01BQ0hJTkVfSEFTX0ZFQVRVUkUodm0sIE1GRUFUVVJFX1ZNKVxcbmFyY2gvczM5MC9pbmNsdWRlL2FzbS9tYWNoaW5lLmg6OTY6REVGSU5FX01BQ0hJTkVfSEFTX0ZFQVRVUkUoa3ZtLCBNRkVBVFVSRV9LVk0pXFxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL21hY2hpbmUuaDo5NzpERUZJTkVfTUFDSElORV9IQVNfRkVBVFVSRShscGFyLCBNRkVBVFVSRV9MUEFSKVxcbmFyY2gvczM5MC9pbmNsdWRlL2FzbS9tYWNoaW5lLmgtOTgtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE1VDE1OjU1OjQyLjE1NjMxODE2NloiLCJTZXEiOjM5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NjQ3MjIxODM1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGFuYWx5emluZyBob3cgYE1GRUFUVVJFX1ZNYCBpcyBzZXQ6XG5cbioqVW5kZXJzdGFuZGluZyB0aGUgYE1GRUFUVVJFX1ZNYCBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gSSdtIHRyeWluZyB0byBmaWd1cmUgb3V0IHRoZSBjb25maWd1cmF0aW9uIHNvdXJjZSBmb3IgYE1GRUFUVVJFX1ZNYC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHRyYWNlIGl0cyBkZWZpbml0aW9uIHdpdGhpbiB0aGUgc3lzdGVtJ3MgY29kZWJhc2UuIFdoZXJlIGlzIGl0IGZpcnN0ICpkZWNsYXJlZCogb3IgKmluaXRpYWxpemVkKj8gSXMgaXQgYSBjb21waWxlLXRpbWUgZmxhZywgYSBydW50aW1lIHBhcmFtZXRlciwgb3IgcGVyaGFwcyBwdWxsZWQgZnJvbSBhIGNvbmZpZ3VyYXRpb24gZmlsZT8gSSBuZWVkIHRvIHF1aWNrbHkgaWRlbnRpZnkgdGhlIHJlbGV2YW50IGhlYWRlciBmaWxlcywgYnVpbGQgc2NyaXB0cyAobGlrZSBNYWtlZmlsZXMgb3IgQ01ha2VMaXN0cy50eHQpLCBhbmQgYW55IGluaXRpYWxpemF0aW9uIHJvdXRpbmVzLlxuXG5NeSBmaWVsZCBrbm93bGVkZ2UgdGVsbHMgbWUgdG8gY29uc2lkZXIgcG90ZW50aWFsIHNvdXJjZXMgc3VjaCBhczpcblxuKiAgICoqUHJlLXByb2Nlc3NvciBkZWZpbml0aW9uczoqKiBJcyBpdCBkZWZpbmVkIHVzaW5nIGAtRGAgZmxhZ3MgZHVyaW5nIHRoZSBidWlsZCBwcm9jZXNzPyBJJ2QgbG9vayBmb3IgaXRzIHByZXNlbmNlIGluIE1ha2VmaWxlcyBvciBidWlsZCBzeXN0ZW0gY29uZmlndXJhdGlvbnMuXG4qICAgKipDb25maWd1cmF0aW9uIGZpbGVzOioqIFBlcmhhcHMgdGhlcmUncyBhIHNwZWNpZmljIGNvbmZpZ3VyYXRpb24gZmlsZSB0aGF0IGRpY3RhdGVzIHZpcnR1YWwgbWFjaGluZSBmZWF0dXJlcy4gSSBzaG91bGQgc2VhcmNoIGZvciBmaWxlcyB3aXRoIG5hbWVzIGxpa2UgYGNvbmZpZy5pbmlgLCBgdm0uY29uZmAsIG9yIHNvbWV0aGluZyBzaW1pbGFyLlxuKiAgICoqS2VybmVsIGNvbW1hbmQgbGluZToqKiBEb2VzIGl0IGdldCBwYXNzZWQgYXMgYSBib290IHBhcmFtZXRlcj8gVGhpcyBpcyBhIGNvbW1vbiBtZXRob2QgZm9yIGNvbmZpZ3VyaW5nIHN5c3RlbSBiZWhhdmlvci4gSSBzaG91bGQgY2hlY2sgcmVsZXZhbnQgYm9vdGxvYWRlciBjb25maWd1cmF0aW9ucyBvciBrZXJuZWwgY29tbWFuZCBsaW5lIHBhcnNpbmcgcm91dGluZXMuXG4qICAgKipFbnZpcm9ubWVudGFsIHZhcmlhYmxlczoqKiBDb3VsZCBpdCBiZSBzZXQgYXMgYW4gZW52aXJvbm1lbnQgdmFyaWFibGU/IFRoaXMgaXMgbGVzcyBjb21tb24gZm9yIGNvcmUgZmVhdHVyZXMsIGJ1dCBzdGlsbCBhIHBvc3NpYmlsaXR5LlxuKiAgICoqRHluYW1pYyBjb25maWd1cmF0aW9uOioqIENvdWxkIHRoaXMgYmUgY29uZmlndXJlZCBkeW5hbWljYWxseSBieSBzb21lIHJ1bm5pbmcgcHJvY2Vzcz8gSWYgc28sIHdoaWNoIHByb2Nlc3M/IElzIGl0IGEgZGVkaWNhdGVkIFZNIG1hbmFnZW1lbnQgZGFlbW9uLCBvciBzb21ldGhpbmcgbW9yZSBpbnRlZ3JhdGVkP1xuXG5OZXh0LCBJJ2xsIHN5c3RlbWF0aWNhbGx5IHNlYXJjaCB0aGUgY29kZSBiYXNlIHVzaW5nIHRoZSB0b29scyB0aGF0IEknbSBmYW1pbGlhciB3aXRoLCBzdWNoIGFzIGBncmVwYCBvciBhbiBJREUncyBzZWFyY2ggZnVuY3Rpb24uIEknbGwgbmVlZCB0byBsb29rIGZvciBpbnN0YW5jZXMgb2YgdGhlIHN5bWJvbCBpdHNlbGYsIG9yIGEgYnJvYWRlciBjb250ZXh0IHdoZXJlIGl0IGNvdWxkIGJlIGFzc2lnbmVkLiBJIGNhbiBuYXJyb3cgZG93biBteSBzZWFyY2ggYnkgZm9jdXNpbmcgb24gY29kZSBhcmVhcyBzcGVjaWZpY2FsbHkgcmVsYXRlZCB0byB2aXJ0dWFsIG1hY2hpbmUgZnVuY3Rpb25hbGl0eSBvciBmZWF0dXJlIG1hbmFnZW1lbnQuXG5cbkFzIGFuIGV4cGVydCwgSSBrbm93IHRoYXQgZG9jdW1lbnRhdGlvbiB3aWxsIGJlIGNyaXRpY2FsLiBJIHNob3VsZCBjb25zdWx0IGFueSByZWxhdGVkIGRlc2lnbiBkb2N1bWVudHMsIEFQSSBzcGVjaWZpY2F0aW9ucywgb3IgY29kZSBjb21tZW50cy4gVGhlc2Ugc2hvdWxkIHByb3ZpZGUgY2x1ZXMgYWJvdXQgaXRzIHB1cnBvc2UgYW5kIGhvdyBpdCdzIGludGVuZGVkIHRvIGJlIHNldC4gVGhpcyBtaWdodCByZXZlYWwgc29tZSBoaWRkZW4gYXNwZWN0cyBvZiB0aGUgaW1wbGVtZW50YXRpb24uXG5cblVsdGltYXRlbHksIGJ5IGNvbWJpbmluZyBjb2RlIGFuYWx5c2lzIGFuZCBkb2N1bWVudGF0aW9uIHJldmlldywgSSBzaG91bGQgYmUgYWJsZSB0byBwaW4gZG93biB0aGUgc291cmNlIG9mIGBNRkVBVFVSRV9WTWAgYW5kIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiBpdHMgY29uZmlndXJhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MzEwMDQsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNVQxNTo1NTo0Ni44MDM1NDIyNjFaIiwiU2VxIjo0MCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUzODQyNDU4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIk1GRUFUVVJFX1ZNXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gvczM5MC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9zMzkwL2Jvb3Qvc3RhcnR1cC5jPTUyPXN0YXRpYyB2b2lkIGRldGVjdF9tYWNoaW5lX3R5cGUodm9pZClcXG4tLVxcbmFyY2gvczM5MC9ib290L3N0YXJ0dXAuYy02Ny1cXHRlbHNlIGlmICghbWVtY21wKHZtbXMtXFx1MDAzZXZtWzBdLmNwaSwgXFxcIlxcXFx4YTlcXFxceDYxXFxcXHhlNVxcXFx4ZDRcXFwiLCA0KSlcXG5hcmNoL3MzOTAvYm9vdC9zdGFydHVwLmM6Njg6XFx0XFx0c2V0X21hY2hpbmVfZmVhdHVyZShNRkVBVFVSRV9WTSk7XFxuYXJjaC9zMzkwL2Jvb3Qvc3RhcnR1cC5jLTY5LX1cXG4tLVxcbmFyY2gvczM5MC9pbmNsdWRlL2FzbS9tYWNoaW5lLmgtMTctI2RlZmluZSBNRkVBVFVSRV9ESUFHOUNcXHRcXHQ2XFxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL21hY2hpbmUuaDoxODojZGVmaW5lIE1GRUFUVVJFX1ZNXFx0XFx0N1xcbmFyY2gvczM5MC9pbmNsdWRlL2FzbS9tYWNoaW5lLmgtMTktI2RlZmluZSBNRkVBVFVSRV9LVk1cXHRcXHQ4XFxuLS1cXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vbWFjaGluZS5oPTk0PURFRklORV9NQUNISU5FX0hBU19GRUFUVVJFKGRpYWc5YywgTUZFQVRVUkVfRElBRzlDKVxcbmFyY2gvczM5MC9pbmNsdWRlL2FzbS9tYWNoaW5lLmg6OTU6REVGSU5FX01BQ0hJTkVfSEFTX0ZFQVRVUkUodm0sIE1GRUFUVVJFX1ZNKVxcbmFyY2gvczM5MC9pbmNsdWRlL2FzbS9tYWNoaW5lLmgtOTYtREVGSU5FX01BQ0hJTkVfSEFTX0ZFQVRVUkUoa3ZtLCBNRkVBVFVSRV9LVk0pXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE1VDE1OjU1OjQ2Ljg1NzM5MVoiLCJTZXEiOjQxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyOTA2NTk3NjQ3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIHRoZSBvbmUgdGhpbmtpbmcgaXQ6XG5cbioqRGl2aW5nIGludG8gdGhlIFN5c3RlbSBBcmNoaXRlY3R1cmUqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGRpZyBpbnRvIHRoaXMuIEkgbmVlZCB0byBnZXQgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiBob3cgdGhlIHN5c3RlbSBpcyBpZGVudGlmeWluZyB0aGUgbWFjaGluZSB0eXBlIG9uIHRoaXMgczM5MCBhcmNoaXRlY3R1cmUuIExldCdzIHN0YXJ0IGJ5IHplcm9pbmcgaW4gb24gdGhhdCBgZGV0ZWN0X21hY2hpbmVfdHlwZWAgZnVuY3Rpb24uIEl0J3MgYWxtb3N0IGNlcnRhaW5seSBjcnVjaWFsIGluIGRldGVybWluaW5nIGhvdyB0aGUgYm9vdCBwcm9jZXNzIHByb2NlZWRzLCBzbyBJJ2xsIGZpbmQgaXQgaW4gYGFyY2gvczM5MC9ib290L3N0YXJ0dXAuY2AuIFRoYXQgZmlsZSBpcyB3aGVyZSB0aGUgaW5pdGlhbCBzeXN0ZW0gc2V0dXAgbWFnaWMgbGlrZWx5IGhhcHBlbnMuIEknbSBleHBlY3RpbmcgdG8gZmluZCBzb21lIGhhcmR3YXJlIHByb2JpbmcsIG1heWJlIHNvbWUgaW5zdHJ1Y3Rpb24gY2hlY2tzLCBvciBwZXJoYXBzIGV2ZW4gZWFybHkgZmlybXdhcmUgcXVlcmllcy4gTGV0J3Mgc2VlIHdoYXQncyBpbiBzdG9yZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzE4NzgsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNVQxNTo1NTo0OS43NjM5OTE2MjdaIiwiU2VxIjo0MiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODY5MDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiYXJjaC9zMzkwL2Jvb3Qvc3RhcnR1cC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDUyLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDUyOlxcdHN0YXRpYyB2b2lkIGRldGVjdF9tYWNoaW5lX3R5cGUodm9pZClcXG4gIDUzOlxcdHtcXG4gIDU0OlxcdFxcdHN0cnVjdCBzeXNpbmZvXzNfMl8yICp2bW1zID0gKHN0cnVjdCBzeXNpbmZvXzNfMl8yICopXFx1MDAyNnN5c2luZm9fcGFnZTtcXG4gIDU1OlxcdFxcbiAgNTY6XFx0XFx0LyogQ2hlY2sgY3VycmVudC1jb25maWd1cmF0aW9uLWxldmVsICovXFxuICA1NzpcXHRcXHRpZiAoc3RzaShOVUxMLCAwLCAwLCAwKSBcXHUwMDNjPSAyKSB7XFxuICA1ODpcXHRcXHRcXHRzZXRfbWFjaGluZV9mZWF0dXJlKE1GRUFUVVJFX0xQQVIpO1xcbiAgNTk6XFx0XFx0XFx0cmV0dXJuO1xcbiAgNjA6XFx0XFx0fVxcbiAgNjE6XFx0XFx0LyogR2V0IHZpcnR1YWwtbWFjaGluZSBjcHUgaW5mb3JtYXRpb24uICovXFxuICA2MjpcXHRcXHRpZiAoc3RzaSh2bW1zLCAzLCAyLCAyKSB8fCAhdm1tcy1cXHUwMDNlY291bnQpXFxuICA2MzpcXHRcXHRcXHRyZXR1cm47XFxuICA2NDpcXHRcXHQvKiBEZXRlY3Qga25vd24gaHlwZXJ2aXNvcnMgKi9cXG4gIDY1OlxcdFxcdGlmICghbWVtY21wKHZtbXMtXFx1MDAzZXZtWzBdLmNwaSwgXFxcIlxcXFx4ZDJcXFxceGU1XFxcXHhkNFxcXCIsIDMpKVxcbiAgNjY6XFx0XFx0XFx0c2V0X21hY2hpbmVfZmVhdHVyZShNRkVBVFVSRV9LVk0pO1xcbiAgNjc6XFx0XFx0ZWxzZSBpZiAoIW1lbWNtcCh2bW1zLVxcdTAwM2V2bVswXS5jcGksIFxcXCJcXFxceGE5XFxcXHg2MVxcXFx4ZTVcXFxceGQ0XFxcIiwgNCkpXFxuICA2ODpcXHRcXHRcXHRzZXRfbWFjaGluZV9mZWF0dXJlKE1GRUFUVVJFX1ZNKTtcXG4gIDY5OlxcdH1cXG4gIDcwOlxcdFxcbiAgNzE6XFx0c3RhdGljIHZvaWQgZGV0ZWN0X2RpYWcyODgodm9pZClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTVUMTU6NTU6NDkuNzY0MDgwNDQ3WiIsIlNlcSI6NDMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU3MDc3NTI2NTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgSHlwZXJ2aXNvciBEZXRlY3Rpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBob3cgd2UncmUgZGV0ZXJtaW5pbmcgdGhlIGh5cGVydmlzb3IgaW4gdGhpcyBzeXN0ZW0uIFRoZSBgc3RzaWAgaW5zdHJ1Y3Rpb24gaXMgdGhlIGtleSDigJMgaXQncyB0aGUgc3RhbmRhcmQgd2F5IHRvIGRldGVjdCB0aGUgdW5kZXJseWluZyB2aXJ0dWFsaXphdGlvbi4gSWYgdGhlIGBzdHNpYCBpbnN0cnVjdGlvbiByZXR1cm5zIHRoZSBFQkNESUMgdmFsdWUgYFxceGQyXFx4ZTVcXHhkNGAsIHRoYXQncyBLVk0sIG5vIHF1ZXN0aW9uLiBJZiBpdCByZXR1cm5zIGBcXHhhOVxceDYxXFx4ZTVcXHhkNGAsIHRoYXQncyB6L1ZNLiBTdHJhaWdodGZvcndhcmQgZW5vdWdoLlxuXG5Ob3csIFFFTVUgaXMgdGhlIGVtdWxhdG9yIGhlcmUsIHJpZ2h0PyBBbmQgaXQgY2FuIGVtdWxhdGUgZWl0aGVyIEtWTSBvciB1c2UgaXRzIG93biBUQ0cgKFRpbnkgQ29kZSBHZW5lcmF0b3IpLiBXaGVuIFFFTVUgaXMgcnVubmluZyBvbiB0b3Agb2YgYWN0dWFsIEtWTSwgaXQgd2lsbCBtaW1pYyB0aGUgS1ZNIGFuZCBjb3JyZWN0bHkgcmV0dXJuIHRoZSBcIktWTVwiIHN0cmluZyB0aHJvdWdoIHRoZSBgc3RzaWAgaW5zdHJ1Y3Rpb24sIG1ha2luZyBpdCBlYXN5IHRvIGlkZW50aWZ5LlxuXG5CdXQgdGhlIFRDRyBjYXNlLi4uIHRoYXQncyB3aGVyZSB0aGluZ3MgZ2V0IGludGVyZXN0aW5nLiBEb2VzIFFFTVUsIHdoZW4gcnVubmluZyB3aXRoIFRDRywgZW11bGF0ZSB6L1ZNPyBObywgdXN1YWxseSBub3QuIFR5cGljYWxseSwgUUVNVSBUQ0cgZWl0aGVyIHJldHVybnMgc29tZXRoaW5nIGRpZmZlcmVudCwgb3IgZGVmYXVsdHMgdG8gXCJLVk1cIiwgb3IgbWlnaHQgZXZlbiByZXR1cm4gbm90aGluZyBhdCBhbGwuIFRoYXQgbWVhbnMsIHJ1bm5pbmcgdW5kZXIgUUVNVSBhbmQgVENHLCB3ZSB3b3VsZCBsaWtlbHkgKm5vdCogYmUgYWJsZSB0byBpZGVudGlmeSB0aGUgdW5kZXJseWluZyBoeXBlcnZpc29yLlxuXG5IbW0sIHRoaXMgcmVtaW5kcyBtZSB0aGF0IHN5emthbGxlciBydW5zIHVuZGVyIFFFTVUsIGRvZXNuJ3QgaXQ/IFNvLCBiZWNhdXNlIHN5emthbGxlciBydW5zIG9uIHRvcCBvZiBRRU1VLCBpdCB3b3VsZCBub3QgcnVuIGRpcmVjdGx5IG9uIHovVk0sIHdoaWNoIG1ha2VzIGBtYWNoaW5lX2lzX3ZtKClgIGZhbHNlLlxuXG5XYWl0IGEgc2Vjb25kLCBpcyB0aGVyZSBhbm90aGVyIHBhdGh3YXkgdG8gc2V0dGluZyBgaXVjdi1cdTAwM2V0cmFuc3BvcnRgIHRvIGBBRl9JVUNWX1RSQU5TX0lVQ1ZgPyBJIG5lZWQgdG8gZG91YmxlLWNoZWNrIHRoYXQuIExldCdzIHJldmlzaXQgYG5ldC9pdWN2L2FmX2l1Y3YuY2AgdG8gbWFrZSBzdXJlIEkgaGF2ZW4ndCBtaXNzZWQgc29tZXRoaW5nIGNydWNpYWwuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMyNDU4LCJPdXRwdXRUb2tlbnMiOjQ0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjI5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTVUMTU6NTU6NTUuNDcxODM2NzIzWiIsIlNlcSI6NDQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjYxNDIwOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJBRl9JVUNWX1RSQU5TX0lVQ1ZcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2l1Y3YvYWZfaXVjdi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pdWN2L2FmX2l1Y3YuYz0xNjY9c3RhdGljIGlubGluZSBpbnQgaXVjdl9iZWxvd19tc2dsaW0oc3RydWN0IHNvY2sgKnNrKVxcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTE3MS1cXHRcXHRyZXR1cm4gMTtcXG5uZXQvaXVjdi9hZl9pdWN2LmM6MTcyOlxcdGlmIChpdWN2LVxcdTAwM2V0cmFuc3BvcnQgPT0gQUZfSVVDVl9UUkFOU19JVUNWKVxcbm5ldC9pdWN2L2FmX2l1Y3YuYy0xNzMtXFx0XFx0cmV0dXJuIChhdG9taWNfcmVhZChcXHUwMDI2aXVjdi1cXHUwMDNlc2tic19pbl94bWl0KSBcXHUwMDNjIGl1Y3YtXFx1MDAzZXBhdGgtXFx1MDAzZW1zZ2xpbSk7XFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmM9NDY2PXN0YXRpYyBzdHJ1Y3Qgc29jayAqaXVjdl9zb2NrX2FsbG9jKHN0cnVjdCBzb2NrZXQgKnNvY2ssIGludCBwcm90bywgZ2ZwX3QgcHJpbywgaW50IGtlcm4pXFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmMtNDkzLVxcdGlmIChwcl9pdWN2KVxcbm5ldC9pdWN2L2FmX2l1Y3YuYzo0OTQ6XFx0XFx0aXVjdi1cXHUwMDNldHJhbnNwb3J0ID0gQUZfSVVDVl9UUkFOU19JVUNWO1xcbm5ldC9pdWN2L2FmX2l1Y3YuYy00OTUtXFx0ZWxzZVxcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jPTU4Mj1zdGF0aWMgaW50IGl1Y3Zfc29ja19iaW5kKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrYWRkcl91bnNpemVkICphZGRyLFxcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTY0Ny1cXHRcXHRzay1cXHUwMDNlc2tfc3RhdGUgPSBJVUNWX0JPVU5EO1xcbm5ldC9pdWN2L2FmX2l1Y3YuYzo2NDg6XFx0XFx0aXVjdi1cXHUwMDNldHJhbnNwb3J0ID0gQUZfSVVDVl9UUkFOU19JVUNWO1xcbm5ldC9pdWN2L2FmX2l1Y3YuYy02NDktXFx0XFx0c2stXFx1MDAzZXNrX2FsbG9jYXRpb24gfD0gR0ZQX0RNQTtcXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYz02NjU9c3RhdGljIGludCBpdWN2X3NvY2tfYXV0b2JpbmQoc3RydWN0IHNvY2sgKnNrKVxcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTY3My1cXHRtZW1jcHkoaXVjdi1cXHUwMDNlc3JjX3VzZXJfaWQsIGl1Y3ZfdXNlcmlkLCA4KTtcXG5uZXQvaXVjdi9hZl9pdWN2LmM6Njc0OlxcdGl1Y3YtXFx1MDAzZXRyYW5zcG9ydCA9IEFGX0lVQ1ZfVFJBTlNfSVVDVjtcXG5uZXQvaXVjdi9hZl9pdWN2LmMtNjc1LVxcdHNrLVxcdTAwM2Vza19hbGxvY2F0aW9uIHw9IEdGUF9ETUE7XFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmM9NzMzPXN0YXRpYyBpbnQgaXVjdl9zb2NrX2Nvbm5lY3Qoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHNvY2thZGRyX3Vuc2l6ZWQgKmFkZHIsXFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmMtNzgwLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYzo3ODE6XFx0aWYgKGVyciBcXHUwMDI2XFx1MDAyNiBpdWN2LVxcdTAwM2V0cmFuc3BvcnQgPT0gQUZfSVVDVl9UUkFOU19JVUNWKSB7XFxubmV0L2l1Y3YvYWZfaXVjdi5jLTc4Mi1cXHRcXHRpdWN2X3NldmVyX3BhdGgoc2ssIDApO1xcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jPTE0MjY9c3RhdGljIGludCBpdWN2X3NvY2tfc2h1dGRvd24oc3RydWN0IHNvY2tldCAqc29jaywgaW50IGhvdylcXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYy0xNDUxLVxcdCAgICBzay1cXHUwMDNlc2tfc3RhdGUgPT0gSVVDVl9DT05ORUNURUQpIHtcXG5uZXQvaXVjdi9hZl9pdWN2LmM6MTQ1MjpcXHRcXHRpZiAoaXVjdi1cXHUwMDNldHJhbnNwb3J0ID09IEFGX0lVQ1ZfVFJBTlNfSVVDVikge1xcbm5ldC9pdWN2L2FmX2l1Y3YuYy0xNDUzLVxcdFxcdFxcdHR4bXNnLmNsYXNzID0gMDtcXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYy0xNDc1LVxcdGlmIChob3cgPT0gUkNWX1NIVVRET1dOIHx8IGhvdyA9PSBTSFVURE9XTl9NQVNLKSB7XFxubmV0L2l1Y3YvYWZfaXVjdi5jOjE0NzY6XFx0XFx0aWYgKChpdWN2LVxcdTAwM2V0cmFuc3BvcnQgPT0gQUZfSVVDVl9UUkFOU19JVUNWKSBcXHUwMDI2XFx1MDAyNlxcbm5ldC9pdWN2L2FmX2l1Y3YuYy0xNDc3LVxcdFxcdCAgICBpdWN2LVxcdTAwM2VwYXRoKSB7XFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmM9MTYxNT1zdGF0aWMgaW50IGl1Y3ZfY2FsbGJhY2tfY29ubnJlcShzdHJ1Y3QgaXVjdl9wYXRoICpwYXRoLFxcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTE2NzQtXFx0aXVjdl9zb2NrX2luaXQobnNrLCBzayk7XFxubmV0L2l1Y3YvYWZfaXVjdi5jOjE2NzU6XFx0bml1Y3YtXFx1MDAzZXRyYW5zcG9ydCA9IEFGX0lVQ1ZfVFJBTlNfSVVDVjtcXG5uZXQvaXVjdi9hZl9pdWN2LmMtMTY3Ni1cXHRuc2stXFx1MDAzZXNrX2FsbG9jYXRpb24gfD0gR0ZQX0RNQTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTVUMTU6NTU6NTUuNTE4NDU1OTcyWiIsIlNlcSI6NDUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEyMzk1OTYzMDYzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlVucmVhY2hhYmxlIENvZGUgaW4gUUVNVTogQSBEZWVwIERpdmUqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgdGhvdWdodCB3YXMgYWJvdXQgdGhpcyBgaXVjdl9zb2NrX2JpbmRgIGZ1bmN0aW9uIGFuZCBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIGBwcl9pdWN2YCB2YXJpYWJsZSBhbmQgdGhlIGBBRl9JVUNWX1RSQU5TX0lVQ1ZgIHRyYW5zcG9ydCB0eXBlLiBJIHNlZSB0aGF0IGBBRl9JVUNWX1RSQU5TX0lVQ1ZgIGlzICpvbmx5KiBzZXQgd2hlbiBgcHJfaXVjdmAgaXMgbm9uLU5VTEwsIGFuZCBgcHJfaXVjdmAgaXRzZWxmIHNlZW1zIHRvIGJlIG5vbi1OVUxMIG9ubHkgd2hlbiB0aGUgY29kZSBkZXRlY3RzIHRoYXQgaXQncyBydW5uaW5nIGluIGEgVk0gdmlhIGBtYWNoaW5lX2lzX3ZtKClgLlxuXG5NeSBmaXJzdCBpbnN0aW5jdCwgYXMgYSBmdXp6aW5nLW9yaWVudGVkIHJlc2VhcmNoZXIsIHdhcyB0byBwcm9iZSBpZiB0aGVyZSdzIGFueSBjbGV2ZXIgUUVNVSB0cmlja2VyeSB0byBmb29sIGBtYWNoaW5lX2lzX3ZtKClgIOKAkyBzb21lIFFFTVUgcXVpcmsgb3IgcHNldWRvLXN5c2NhbGwgdGhhdCBtaWdodCBjcmVhdGUgYSBmYWxzZSBwb3NpdGl2ZS4gQnV0IEkgcXVpY2tseSByZW1lbWJlcmVkIHRoYXQgUUVNVSBlaXRoZXIgdXNlcyBLVk0gb3IgVENHLCBub3Qgei9WTSBlbXVsYXRpb24uIFN5emthbGxlciwgd2hpbGUgYSBwb3dlcmZ1bCB0b29sLCBpcyBmb2N1c2VkIG9uIEtWTSBvciBUQ0csIHRvby4gVGhlcmUncyBubyBoaWRkZW4gYmFja2Rvb3IgaGVyZS5cblxuU28sIGlmIGBtYWNoaW5lX2lzX3ZtKClgIGlzIGZhbHNlLCBgcHJfaXVjdmAgaXMgTlVMTCwgd2hpY2ggbWVhbnMgYGl1Y3YtXHUwMDNldHJhbnNwb3J0YCBnZXRzIHNldCB0byBgQUZfSVVDVl9UUkFOU19ISVBFUmAuIFRoZSBuZXcgcGF0Y2ggaW50cm9kdWNlcyBhIGNvbmRpdGlvbmFsIGNoZWNrIGJhc2VkIG9uIGBpdWN2LVx1MDAzZXRyYW5zcG9ydGAgYmVpbmcgYEFGX0lVQ1ZfVFJBTlNfSVVDVmAuIEdpdmVuIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIGNvZGUsIHRoaXMgbWVhbnMgdGhhdCB0aGlzIG5ldyBjb2RlIGJsb2NrIGlzIGNvbXBsZXRlbHkgdW5yZWFjaGFibGUuIFxuXG5JdCdzIHByZXR0eSBjbGVhciB0aGF0IGl0ICpzaG91bGQqIGJlIHVucmVhY2hhYmxlIGluIFFFTVUuIFN5emthbGxlcidzIGRvY3VtZW50YXRpb24gaXRzZWxmIHJlaW5mb3JjZXMgdGhpczogY29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cywgZXZlbiB3aGVuIHVzaW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlLiBTaW5jZSB6L1ZNIGlzIGEgcHJvcHJpZXRhcnkgaHlwZXJ2aXNvciBhbmQgUUVNVSdzIHByaW1hcnkgZm9jdXMgaXNuJ3Qgei9WTSwgaXQgZG9lc24ndCBlbXVsYXRlIGl0LlxuXG5KdXN0IHRvIGJlIGFic29sdXRlbHkgY2VydGFpbiwgSSBjaGVja2VkIHRoZSBRRU1VIG1hY2hpbmUgdHlwZS4gSXQncyB0aGUgYHMzOTAtY2N3LXZpcnRpb2AsIGVtdWxhdGluZyBhIHovQXJjaGl0ZWN0dXJlIG1hY2hpbmUuIEknbSBmYW1pbGlhciB3aXRoIHRoZSBmYWN0IHRoYXQgUUVNVSB1c2VzIHRoZSBgc3RzaWAgaW5zdHJ1Y3Rpb24gYW5kIHRoZW4gc2V0cyBzb21lIG1hY2hpbmUgZmVhdHVyZXMgc3VjaCBhcyBLVk0gb3IgUUVNVSBpbiBUQ0cgbW9kZS4gSSBuZWVkZWQgYSBkb3VibGUgY2hlY2ssIHNvIEkgbG9va2VkIGludG8gc29tZSBMaW51eCBrZXJuZWwgY29kZSByZWxhdGVkIHRvIGh5cGVydmlzb3IgZGV0ZWN0aW9uLiBJdCB1c2VzIEVCQ0RJQyBjaGFyYWN0ZXIgc3RyaW5ncyBmcm9tIHRoZSBjb250cm9sIHByb2dyYW0gaW50ZXJydXB0IChDUEkpIGZpZWxkIG9mIHRoZSBzeXN0ZW0gaW5mb3JtYXRpb24gYmxvY2sgKFNJQikgdG8gZGV0ZWN0IGh5cGVydmlzb3JzLiBcIktWTVwiIChgXFx4ZDJcXHhlNVxceGQ0YCkgYW5kIFwiei9WTVwiIChgXFx4YTlcXHg2MVxceGU1XFx4ZDRgKSBjYW4gYmUgZGV0ZWN0ZWQgYnkgdGhpcyBtZWNoYW5pc20uICBJIGtub3cgdGhhdCBRRU1VIGluIFRDRyBtb2RlIHNldHMgdGhlIENQSSB0byBcIlFFTVVcIiwgd2hpY2ggbWVhbnMgdGhhdCBgbWFjaGluZV9pc192bSgpYCB3aWxsIGRlZmluaXRlbHkgYmUgZmFsc2UgaW4gUUVNVS5cblxuVGh1cywgYHByX2l1Y3ZgIGlzIE5VTEwsIGBpdWN2LVx1MDAzZXRyYW5zcG9ydGAgd2lsbCBiZSBgQUZfSVVDVl9UUkFOU19ISVBFUmAsIGFuZCB0aGUgY29uZGl0aW9uIGBpdWN2LVx1MDAzZXRyYW5zcG9ydCA9PSBBRl9JVUNWX1RSQU5TX0lVQ1ZgIGlzICphbHdheXMqIGZhbHNlLiAgVGhlIG1vZGlmaWVkIGNvZGUgaXMgdW5yZWFjaGFibGUuIE5vdyBJJ2xsIG5lZWQgdG8gZG91YmxlLWNoZWNrIHRoZSBlbnRpcmUgY29kZWJhc2UgdG8gbWFrZSBzdXJlIGBpdWN2LVx1MDAzZXRyYW5zcG9ydGAgaXMgbmV2ZXIgYmVpbmcgc2V0IHRvIGBBRl9JVUNWX1RSQU5TX0lVQ1ZgIGluIGFueSBvdGhlciBzY2VuYXJpby5cblxuXG4iLCJJbnB1dFRva2VucyI6MzQyODQsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5ODAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTVUMTU6NTY6MDcuOTE0NDIxNTU1WiIsIlNlcSI6NDYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NzU1NzYyOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJBRl9JVUNWX1RSQU5TX0lVQ1ZcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2l1Y3YvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pdWN2L2FmX2l1Y3YuYz0xNjY9c3RhdGljIGlubGluZSBpbnQgaXVjdl9iZWxvd19tc2dsaW0oc3RydWN0IHNvY2sgKnNrKVxcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTE3MS1cXHRcXHRyZXR1cm4gMTtcXG5uZXQvaXVjdi9hZl9pdWN2LmM6MTcyOlxcdGlmIChpdWN2LVxcdTAwM2V0cmFuc3BvcnQgPT0gQUZfSVVDVl9UUkFOU19JVUNWKVxcbm5ldC9pdWN2L2FmX2l1Y3YuYy0xNzMtXFx0XFx0cmV0dXJuIChhdG9taWNfcmVhZChcXHUwMDI2aXVjdi1cXHUwMDNlc2tic19pbl94bWl0KSBcXHUwMDNjIGl1Y3YtXFx1MDAzZXBhdGgtXFx1MDAzZW1zZ2xpbSk7XFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmM9NDY2PXN0YXRpYyBzdHJ1Y3Qgc29jayAqaXVjdl9zb2NrX2FsbG9jKHN0cnVjdCBzb2NrZXQgKnNvY2ssIGludCBwcm90bywgZ2ZwX3QgcHJpbywgaW50IGtlcm4pXFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmMtNDkzLVxcdGlmIChwcl9pdWN2KVxcbm5ldC9pdWN2L2FmX2l1Y3YuYzo0OTQ6XFx0XFx0aXVjdi1cXHUwMDNldHJhbnNwb3J0ID0gQUZfSVVDVl9UUkFOU19JVUNWO1xcbm5ldC9pdWN2L2FmX2l1Y3YuYy00OTUtXFx0ZWxzZVxcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jPTU4Mj1zdGF0aWMgaW50IGl1Y3Zfc29ja19iaW5kKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrYWRkcl91bnNpemVkICphZGRyLFxcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTY0Ny1cXHRcXHRzay1cXHUwMDNlc2tfc3RhdGUgPSBJVUNWX0JPVU5EO1xcbm5ldC9pdWN2L2FmX2l1Y3YuYzo2NDg6XFx0XFx0aXVjdi1cXHUwMDNldHJhbnNwb3J0ID0gQUZfSVVDVl9UUkFOU19JVUNWO1xcbm5ldC9pdWN2L2FmX2l1Y3YuYy02NDktXFx0XFx0c2stXFx1MDAzZXNrX2FsbG9jYXRpb24gfD0gR0ZQX0RNQTtcXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYz02NjU9c3RhdGljIGludCBpdWN2X3NvY2tfYXV0b2JpbmQoc3RydWN0IHNvY2sgKnNrKVxcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTY3My1cXHRtZW1jcHkoaXVjdi1cXHUwMDNlc3JjX3VzZXJfaWQsIGl1Y3ZfdXNlcmlkLCA4KTtcXG5uZXQvaXVjdi9hZl9pdWN2LmM6Njc0OlxcdGl1Y3YtXFx1MDAzZXRyYW5zcG9ydCA9IEFGX0lVQ1ZfVFJBTlNfSVVDVjtcXG5uZXQvaXVjdi9hZl9pdWN2LmMtNjc1LVxcdHNrLVxcdTAwM2Vza19hbGxvY2F0aW9uIHw9IEdGUF9ETUE7XFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmM9NzMzPXN0YXRpYyBpbnQgaXVjdl9zb2NrX2Nvbm5lY3Qoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHNvY2thZGRyX3Vuc2l6ZWQgKmFkZHIsXFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmMtNzgwLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYzo3ODE6XFx0aWYgKGVyciBcXHUwMDI2XFx1MDAyNiBpdWN2LVxcdTAwM2V0cmFuc3BvcnQgPT0gQUZfSVVDVl9UUkFOU19JVUNWKSB7XFxubmV0L2l1Y3YvYWZfaXVjdi5jLTc4Mi1cXHRcXHRpdWN2X3NldmVyX3BhdGgoc2ssIDApO1xcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jPTE0MjY9c3RhdGljIGludCBpdWN2X3NvY2tfc2h1dGRvd24oc3RydWN0IHNvY2tldCAqc29jaywgaW50IGhvdylcXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYy0xNDUxLVxcdCAgICBzay1cXHUwMDNlc2tfc3RhdGUgPT0gSVVDVl9DT05ORUNURUQpIHtcXG5uZXQvaXVjdi9hZl9pdWN2LmM6MTQ1MjpcXHRcXHRpZiAoaXVjdi1cXHUwMDNldHJhbnNwb3J0ID09IEFGX0lVQ1ZfVFJBTlNfSVVDVikge1xcbm5ldC9pdWN2L2FmX2l1Y3YuYy0xNDUzLVxcdFxcdFxcdHR4bXNnLmNsYXNzID0gMDtcXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYy0xNDc1LVxcdGlmIChob3cgPT0gUkNWX1NIVVRET1dOIHx8IGhvdyA9PSBTSFVURE9XTl9NQVNLKSB7XFxubmV0L2l1Y3YvYWZfaXVjdi5jOjE0NzY6XFx0XFx0aWYgKChpdWN2LVxcdTAwM2V0cmFuc3BvcnQgPT0gQUZfSVVDVl9UUkFOU19JVUNWKSBcXHUwMDI2XFx1MDAyNlxcbm5ldC9pdWN2L2FmX2l1Y3YuYy0xNDc3LVxcdFxcdCAgICBpdWN2LVxcdTAwM2VwYXRoKSB7XFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmM9MTYxNT1zdGF0aWMgaW50IGl1Y3ZfY2FsbGJhY2tfY29ubnJlcShzdHJ1Y3QgaXVjdl9wYXRoICpwYXRoLFxcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTE2NzQtXFx0aXVjdl9zb2NrX2luaXQobnNrLCBzayk7XFxubmV0L2l1Y3YvYWZfaXVjdi5jOjE2NzU6XFx0bml1Y3YtXFx1MDAzZXRyYW5zcG9ydCA9IEFGX0lVQ1ZfVFJBTlNfSVVDVjtcXG5uZXQvaXVjdi9hZl9pdWN2LmMtMTY3Ni1cXHRuc2stXFx1MDAzZXNrX2FsbG9jYXRpb24gfD0gR0ZQX0RNQTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTVUMTU6NTY6MDcuOTYxOTg0OTMzWiIsIlNlcSI6NDcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE2NzU1MjQ4MTU4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5c2lzIG9mIHRoZSBQYXRjaDogV29ydGhGdXp6aW5nPWZhbHNlKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgdGhhdCB0aGlzIHBhdGNoIGlzbid0IHdvcnRoIGZ1enppbmcsIGFuZCBoZXJlJ3Mgd2h5LiBJIHNlZSBhIHBhdHRlcm46IGV2ZXJ5IGluc3RhbmNlIHdoZXJlIGBpdWN2LVx1MDAzZXRyYW5zcG9ydGAgaXMgc2V0IHRvIGBBRl9JVUNWX1RSQU5TX0lVQ1ZgIGlzIGRpcmVjdGx5IGRlcGVuZGVudCBvbiBgcHJfaXVjdmAgYmVpbmcgbm9uLU5VTEwuIEluIHNldmVyYWwgZnVuY3Rpb25zIOKAkyBgaXVjdl9zb2NrX2FsbG9jYCwgYGl1Y3Zfc29ja19iaW5kYCwgYGl1Y3Zfc29ja19hdXRvYmluZGAsIGFuZCBldmVuIHRoZSBgaXVjdl9jYWxsYmFja19jb25ucmVxYCB3aGljaCBpcyByZWdpc3RlcmVkIHVzaW5nIGBwcl9pdWN2YCDigJMgdGhpcyBjb25kaXRpb24gaXMgY29uc2lzdGVudGx5IGVuZm9yY2VkLiBUaGlzIG1lYW5zIHRoYXQgYGl1Y3YtXHUwMDNldHJhbnNwb3J0ID09IEFGX0lVQ1ZfVFJBTlNfSVVDVmAgaXMsIGVzc2VudGlhbGx5LCBlcXVpdmFsZW50IHRvIGBwcl9pdWN2ICE9IE5VTExgLCBhbmQgdGhlcmVmb3JlIGVxdWl2YWxlbnQgdG8gYG1hY2hpbmVfaXNfdm0oKSA9PSB0cnVlYCBhc3N1bWluZyBgQ09ORklHX0lVQ1ZgIGlzIGVuYWJsZWQuXG5cblNpbmNlIHRoZSBnb2FsIGlzIHRvIGRldGVybWluZSBpZiB0aGUgcGF0Y2ggaXMgd29ydGggZnV6emluZywgSSBtdXN0IGRldGVybWluZSBpZiB0aGUgYWRkZWQgY29kZSBjYW4gYmUgcmVhY2hlZCB1bmRlciBjb21tb24gZnV6emluZyBlbnZpcm9ubWVudHMgbGlrZSBRRU1VLlxuXG5HaXZlbiB0aGF0IHRoZSBxdWVzdGlvbiBzcGVjaWZpY2FsbHkgY2FsbHMgb3V0IFwidmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVVcIiwgYW5kIHN0YXRlcyB0aGF0IHRoZSBjb2RlIHBhdGggbXVzdCBiZSByZWFjaGFibGUgZXZlbiBpbiBzb2Z0d2FyZS1lbXVsYXRlZCBlbnZpcm9ubWVudHMsIEknbSBwcmV0dHkgY2VydGFpbiB0aGlzIGlzIGEgZGVhZCBlbmQuIFFFTVUsIGJ5IGl0cyBuYXR1cmUsIGRvZXNuJ3QgZW11bGF0ZSB0aGUgei9WTSBoeXBlcnZpc29yLiBJdCBlbXVsYXRlcyBiYXJlLW1ldGFsIHovQXJjaGl0ZWN0dXJlLCBvciBLVk0uIFRoZSBgc3RzaWAgaW5zdHJ1Y3Rpb24ncyBvdXRwdXQsIHdoaWNoIGlzIGhvdyB3ZSdkIGRldGVybWluZSBpZiB3ZSdyZSBvbiBhIGh5cGVydmlzb3IsIGlzIGhhcmRjb2RlZCBieSBRRU1VIHRvIHJldHVybiBcIktWTVwiIG9yIFwiUUVNVS5cIiBUaGVyZSdzIG5vIHdheSB0byBtYWtlIFFFTVUgcmV0dXJuIFwiei9WTVwiIHdpdGhvdXQgcGF0Y2hpbmcgUUVNVSBpdHNlbGYsIGFuZCBzeXprYWxsZXIgZG9lcyBub3QgZG8gdGhpcyBhcyBwYXJ0IG9mIGl0cyBkZWZhdWx0IG9wZXJhdGlvbi5cblxuTm93LCBJIHBhdXNlZCB0byBjb25zaWRlciBpZiBzeXprYWxsZXIgaXRzZWxmIHdhcyBydW5uaW5nICpvbiogei9WTS4gQ2VydGFpbmx5LCB5b3UgKmNvdWxkKiBydW4gc3l6a2FsbGVyIG9uIGEgei9WTSBndWVzdCB1c2luZyBhbiBgc3NoYCBiYWNrZW5kIGFuZCB0YXJnZXRlZCBrZXJuZWwsIGJ1dCB0aGUgcHJvbXB0J3MgbGFuZ3VhZ2UgaXMgY2xlYXI6IHRoZSBjb2RlIG11c3QgYmUgcmVhY2hhYmxlIFwiaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzICpsaWtlKiBHQ0Ugb3IgUUVNVS5cIiBUaGlzIGltcGxpZXMgdGhlIHN0YW5kYXJkIHN5emthbGxlciBzZXR1cCwgYW5kIHRoYXQgc2V0dXAgZG9lcyAqbm90KiBpbmNsdWRlIHovVk0gYXMgYSBkZWZhdWx0IGh5cGVydmlzb3IgdGFyZ2V0LCBidXQgb25seSBlbXVsYXRlZCBlbnZpcm9ubWVudHMgbGlrZSBRRU1VLiBUaGUgcHJvbXB0IGltcGxpZXMgdGhpcyBjYXNlIGlzIG5vdCByZWxldmFudC5cblxuTXkgdW5kZXJzdGFuZGluZyBpcyB0aGF0IHRoaXMgcGF0Y2ggb25seSBhZmZlY3RzIGVycm9yIGhhbmRsaW5nIGluIGBpdWN2X3NvY2tfY29ubmVjdGAuIElmIHRoZXJlJ3MgYW4gZXJyb3IsIGFuZCB0aGUgdHJhbnNwb3J0IGlzIGBBRl9JVUNWX1RSQU5TX0lVQ1ZgLCB0aGVuIGBpdWN2X3NldmVyX3BhdGhgIGlzIGNhbGxlZCwgYW5kIHNvbWUgc3RhdGUgY2xlYW51cCBtaWdodCBiZSBwZXJmb3JtZWQsIHNwZWNpZmljYWxseSBjb25jZXJuaW5nIGEgcmFjZSBjb25kaXRpb24gd2hlcmUgYSBgY29ubmFja2AgbWlnaHQgYXJyaXZlIGJldHdlZW4gYSBzb2NrZXQgYmVpbmcgZGlzY29ubmVjdGVkIGFuZCB0aGUgcmVsZWFzZSBvZiB0aGUgYHdhaXRgLlxuXG5HaXZlbiB0aGF0LCBJJ20gY29uZmlkZW50IGluIG15IGluaXRpYWwgYXNzZXNzbWVudC4gVGhlIGBpZmAgc3RhdGVtZW50IHRoYXQgZ3VhcmRzIHRoaXMgZXh0cmEgY2xlYW51cCBjb2RlIGRlcGVuZHMgb24gYmVpbmcgaW4gYSB6L1ZNIGVudmlyb25tZW50LCB3aGljaCBRRU1VICpjYW5ub3QqIGVtdWxhdGUuIFRoZXJlZm9yZSwgdGhpcyBjb2RlIHBhdGggaXMgc2ltcGx5IGluYWNjZXNzaWJsZSBpbiBhIHN0YW5kYXJkIHN5emthbGxlci9RRU1VIHNldHVwLlxuXG5BZnRlciByZXZpZXdpbmcgdGhlIHBhdGNoIGFnYWluIHRvIGVuc3VyZSB0aGVyZSBhcmUgbm8gb3RoZXIgc3VidGxlIGNoYW5nZXMsIEkgY2FuIGNvbmZpcm0gdGhhdCB0aGUgbmV3IGNvZGUgaXMgZW5jbG9zZWQgYnkgYGlmIChlcnIgXHUwMDI2XHUwMDI2IGl1Y3YtXHUwMDNldHJhbnNwb3J0ID09IEFGX0lVQ1ZfVFJBTlNfSVVDVilgLCBhbmQgdGhlIGFkZGVkIGNvZGUgaXMgdW5yZWFjaGFibGUuXG5cbk15IGNvbmNsdXNpb24gaXMgdGhhdCBgV29ydGhGdXp6aW5nPWZhbHNlYCBiZWNhdXNlIHRoZSBtb2RpZmllZCBjb2RlIGlzIHVucmVhY2hhYmxlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIFFFTVUuIEFsc28sIHRoZSBjb2RlIGRlcGVuZHMgb24gYSBwcm9wcmlldGFyeSBoeXBlcnZpc29yIHRoYXQgaXMgbm90IGVtdWxhdGVkIGluIHRoZXNlIGVudmlyb25tZW50cy5cblxuSnVzdCB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4sIEknbGwgY29uZmlybSB0aGF0IGBtYWNoaW5lX2lzX3ZtKClgIGlzIGNoZWNraW5nIGZvciB0aGUgY29ycmVjdCBoeXBlcnZpc29yLCB6L1ZNLiBZZXMsIHRoZSBoYXJkY29kZWQgY2hlY2sgZm9yIHRoZSBoeXBlcnZpc29yIHV0aWxpemVzIHRoZSBFQkNESUMgdmFsdWUgZm9yIGB6L1ZNYCAtIHNvIEkgYW0gY29uZmlkZW50IGluIG15IGFzc2Vzc21lbnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM3MTk0LCJPdXRwdXRUb2tlbnMiOjE1MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0MzIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTVUMTU6NTY6MjQuNzE3MjM3MDkxWiIsIlNlcSI6NDgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjcyODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGVycm9yIGhhbmRsaW5nIHBhdGggaW4gYGl1Y3Zfc29ja19jb25uZWN0YCBmb3IgQUZfSVVDViBzb2NrZXRzLiBIb3dldmVyLCB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJpY3RseSBndWFyZGVkIGJ5IGBpdWN2LVxcdTAwM2V0cmFuc3BvcnQgPT0gQUZfSVVDVl9UUkFOU19JVUNWYCwgd2hpY2ggaXMgb25seSBzZXQgd2hlbiB0aGUga2VybmVsIGlzIHJ1bm5pbmcgdW5kZXIgdGhlIElCTSB6L1ZNIGh5cGVydmlzb3IgKGBtYWNoaW5lX2lzX3ZtKClgKS4gU2luY2UgUUVNVSBlbXVsYXRlcyBLVk0gb3IgYSBiYXJlLW1ldGFsIExQQVIgYW5kIGRvZXMgbm90IGVtdWxhdGUgei9WTSwgdGhpcyBjb2RlIHBhdGggaXMgaW1wb3NzaWJsZSB0byByZWFjaCBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBRRU1VIG9yIEdDRS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBlcnJvciBoYW5kbGluZyBwYXRoIGluIGBpdWN2X3NvY2tfY29ubmVjdGAgZm9yIEFGX0lVQ1Ygc29ja2V0cy4gSG93ZXZlciwgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RyaWN0bHkgZ3VhcmRlZCBieSBgaXVjdi1cXHUwMDNldHJhbnNwb3J0ID09IEFGX0lVQ1ZfVFJBTlNfSVVDVmAsIHdoaWNoIGlzIG9ubHkgc2V0IHdoZW4gdGhlIGtlcm5lbCBpcyBydW5uaW5nIHVuZGVyIHRoZSBJQk0gei9WTSBoeXBlcnZpc29yIChgbWFjaGluZV9pc192bSgpYCkuIFNpbmNlIFFFTVUgZW11bGF0ZXMgS1ZNIG9yIGEgYmFyZS1tZXRhbCBMUEFSIGFuZCBkb2VzIG5vdCBlbXVsYXRlIHovVk0sIHRoaXMgY29kZSBwYXRoIGlzIGltcG9zc2libGUgdG8gcmVhY2ggaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgUUVNVSBvciBHQ0UuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNVQxNTo1NjoyNC43MTcyNjgwNDFaIiwiU2VxIjo0OSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI4NzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow64czl[1] Phase: Running StartedAt: 2026-08-15 15:56:35 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflow64czl[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-08-15 15:56:35 +0000 UTC FinishedAt: 2026-08-15 15:56:39 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:code,Default:nil,Value:*1,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{},Result:nil,ExitCode:*1,}