Name: series-workflowrhffv Phase: Failed StartedAt: 2026-07-24 04:38:36 +0000 UTC FinishedAt: 2026-07-24 05:15:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrhffv[0] Phase: Succeeded StartedAt: 2026-07-24 04:38:36 +0000 UTC FinishedAt: 2026-07-24 05:15:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrhffv[0].run-triage Phase: Succeeded StartedAt: 2026-07-24 04:38:36 +0000 UTC FinishedAt: 2026-07-24 05:15:40 +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+CgkJCTx0ZD4yMDI2LzA3LzI0IDA1OjE0PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGVycm9yIGhhbmRsaW5nIGluIHRoZSBwcm9iZSBwYXRoIG9mIHRoZSBhdGgxMWsgQUhCIHBsYXRmb3JtIGRyaXZlciAoYXRoMTFrX2FoYikuIFRoaXMgZHJpdmVyIHJlcXVpcmVzIHNwZWNpZmljIFF1YWxjb21tIFNvQyBoYXJkd2FyZSAoZS5nLiwgSVBRODA3NCwgSVBRNjAxOCkgYW5kIGJpbmRzIHZpYSBkZXZpY2UgdHJlZSBjb21wYXRpYmxlIHN0cmluZ3MuIFNpbmNlIHN5emthbGxlciBvcGVyYXRlcyBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgKFFFTVUvR0NFKSB3aXRob3V0IHRoZXNlIHNwZWNpZmljIGhhcmR3YXJlIG5vZGVzIGluIHRoZSBkZXZpY2UgdHJlZSwgYW5kIHRoZXJlIGlzIG5vIG1lY2hhbmlzbSB0byBpbmplY3QgYXJiaXRyYXJ5IHBsYXRmb3JtIGRldmljZXMgd2l0aCBzcGVjaWZpYyBtZW1vcnkvSVJRIHJlc291cmNlcywgdGhpcyBjb2RlIHBhdGggaXMgdW5yZWFjaGFibGUgYW5kIGNhbm5vdCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI0IDA1OjE0PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgMWU4MjVjNjNkMGMxMzYyZjM2MjViMGUzMDUwZTQwZGUwM2FmMWZjNFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgSnVsIDI0IDA1OjE0OjA0IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvYWhiLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2FoYi5jXG5pbmRleCBmNTY2ZDY5OWQwNzRhOC4uYmRmNTNhYTdkZGYxZjUgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2FoYi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2FoYi5jXG5AQCAtNDMxLDM2ICYjNDM7NDMxLDQ0IEBAIHN0YXRpYyB2b2lkIGF0aDExa19haGJfaW5pdF9xbWlfY2VfY29uZmlnKHN0cnVjdCBhdGgxMWtfYmFzZSAqYWIpXG4gXHRhYi1cdTAwM2VxbWkuc2VydmljZV9pbnNfaWQgPSBhYi1cdTAwM2Vod19wYXJhbXMucW1pX3NlcnZpY2VfaW5zX2lkO1xuIH1cbiBcbi1zdGF0aWMgdm9pZCBhdGgxMWtfYWhiX2ZyZWVfZXh0X2lycShzdHJ1Y3QgYXRoMTFrX2Jhc2UgKmFiKVxuJiM0MztzdGF0aWMgdm9pZCBhdGgxMWtfYWhiX2ZyZWVfZXh0X2lycV9ncnAoc3RydWN0IGF0aDExa19iYXNlICphYixcbiYjNDM7XHRcdFx0XHQgICAgICBzdHJ1Y3QgYXRoMTFrX2V4dF9pcnFfZ3JwICppcnFfZ3JwKVxuIHtcbi1cdGludCBpLCBqO1xuLVxuLVx0Zm9yIChpID0gMDsgaSBcdTAwM2MgQVRIMTFLX0VYVF9JUlFfR1JQX05VTV9NQVg7IGkmIzQzOyYjNDM7KSB7XG4tXHRcdHN0cnVjdCBhdGgxMWtfZXh0X2lycV9ncnAgKmlycV9ncnAgPSBcdTAwMjZhYi1cdTAwM2VleHRfaXJxX2dycFtpXTtcbiYjNDM7XHRpbnQgajtcbiBcbi1cdFx0Zm9yIChqID0gMDsgaiBcdTAwM2MgaXJxX2dycC1cdTAwM2VudW1faXJxOyBqJiM0MzsmIzQzOylcbi1cdFx0XHRmcmVlX2lycShhYi1cdTAwM2VpcnFfbnVtW2lycV9ncnAtXHUwMDNlaXJxc1tqXV0sIGlycV9ncnApO1xuJiM0MztcdGZvciAoaiA9IDA7IGogXHUwMDNjIGlycV9ncnAtXHUwMDNlbnVtX2lycTsgaiYjNDM7JiM0MzspXG4mIzQzO1x0XHRmcmVlX2lycShhYi1cdTAwM2VpcnFfbnVtW2lycV9ncnAtXHUwMDNlaXJxc1tqXV0sIGlycV9ncnApO1xuIFxuLVx0XHRuZXRpZl9uYXBpX2RlbChcdTAwMjZpcnFfZ3JwLVx1MDAzZW5hcGkpO1xuLVx0XHRmcmVlX25ldGRldihpcnFfZ3JwLVx1MDAzZW5hcGlfbmRldik7XG4tXHR9XG4mIzQzO1x0bmV0aWZfbmFwaV9kZWwoXHUwMDI2aXJxX2dycC1cdTAwM2VuYXBpKTtcbiYjNDM7XHRmcmVlX25ldGRldihpcnFfZ3JwLVx1MDAzZW5hcGlfbmRldik7XG4gfVxuIFxuLXN0YXRpYyB2b2lkIGF0aDExa19haGJfZnJlZV9pcnEoc3RydWN0IGF0aDExa19iYXNlICphYilcbiYjNDM7c3RhdGljIHZvaWQgYXRoMTFrX2FoYl9mcmVlX2V4dF9pcnEoc3RydWN0IGF0aDExa19iYXNlICphYilcbiB7XG4tXHRpbnQgaXJxX2lkeDtcbiBcdGludCBpO1xuIFxuLVx0aWYgKGFiLVx1MDAzZWh3X3BhcmFtcy5oeWJyaWRfYnVzX3R5cGUpXG4tXHRcdHJldHVybiBhdGgxMWtfcGNpY19mcmVlX2lycShhYik7XG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgQVRIMTFLX0VYVF9JUlFfR1JQX05VTV9NQVg7IGkmIzQzOyYjNDM7KVxuJiM0MztcdFx0YXRoMTFrX2FoYl9mcmVlX2V4dF9pcnFfZ3JwKGFiLCBcdTAwMjZhYi1cdTAwM2VleHRfaXJxX2dycFtpXSk7XG4mIzQzO31cbiBcbi1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIGFiLVx1MDAzZWh3X3BhcmFtcy5jZV9jb3VudDsgaSYjNDM7JiM0MzspIHtcbiYjNDM7c3RhdGljIHZvaWQgYXRoMTFrX2FoYl9mcmVlX2NlX2lycXMoc3RydWN0IGF0aDExa19iYXNlICphYiwgaW50IG1heF9pZHgpXG4mIzQzO3tcbiYjNDM7XHRpbnQgaXJxX2lkeCwgaTtcbiYjNDM7XG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgbWF4X2lkeDsgaSYjNDM7JiM0MzspIHtcbiBcdFx0aWYgKGF0aDExa19jZV9nZXRfYXR0cl9mbGFncyhhYiwgaSkgXHUwMDI2IENFX0FUVFJfRElTX0lOVFIpXG4gXHRcdFx0Y29udGludWU7XG4gXHRcdGlycV9pZHggPSBBVEgxMUtfSVJRX0NFMF9PRkZTRVQgJiM0MzsgaTtcbiBcdFx0ZnJlZV9pcnEoYWItXHUwMDNlaXJxX251bVtpcnFfaWR4XSwgXHUwMDI2YWItXHUwMDNlY2UuY2VfcGlwZVtpXSk7XG4gXHR9XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIGF0aDExa19haGJfZnJlZV9pcnEoc3RydWN0IGF0aDExa19iYXNlICphYilcbiYjNDM7e1xuJiM0MztcdGlmIChhYi1cdTAwM2Vod19wYXJhbXMuaHlicmlkX2J1c190eXBlKVxuJiM0MztcdFx0cmV0dXJuIGF0aDExa19wY2ljX2ZyZWVfaXJxKGFiKTtcbiBcbiYjNDM7XHRhdGgxMWtfYWhiX2ZyZWVfY2VfaXJxcyhhYiwgYWItXHUwMDNlaHdfcGFyYW1zLmNlX2NvdW50KTtcbiBcdGF0aDExa19haGJfZnJlZV9leHRfaXJxKGFiKTtcbiB9XG4gXG5AQCAtNTI0LDIwICYjNDM7NTMyLDI1IEBAIHN0YXRpYyBpcnFyZXR1cm5fdCBhdGgxMWtfYWhiX2V4dF9pbnRlcnJ1cHRfaGFuZGxlcihpbnQgaXJxLCB2b2lkICphcmcpXG4gc3RhdGljIGludCBhdGgxMWtfYWhiX2NvbmZpZ19leHRfaXJxKHN0cnVjdCBhdGgxMWtfYmFzZSAqYWIpXG4ge1xuIFx0c3RydWN0IGF0aDExa19od19wYXJhbXMgKmh3ID0gXHUwMDI2YWItXHUwMDNlaHdfcGFyYW1zO1xuJiM0MztcdHN0cnVjdCBhdGgxMWtfZXh0X2lycV9ncnAgKmlycV9ncnA7XG4gXHRpbnQgaSwgajtcbiBcdGludCBpcnE7XG4gXHRpbnQgcmV0O1xuIFxuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgQVRIMTFLX0VYVF9JUlFfR1JQX05VTV9NQVg7IGkmIzQzOyYjNDM7KSB7XG4tXHRcdHN0cnVjdCBhdGgxMWtfZXh0X2lycV9ncnAgKmlycV9ncnAgPSBcdTAwMjZhYi1cdTAwM2VleHRfaXJxX2dycFtpXTtcbiBcdFx0dTMyIG51bV9pcnEgPSAwO1xuIFxuJiM0MztcdFx0aXJxX2dycCA9IFx1MDAyNmFiLVx1MDAzZWV4dF9pcnFfZ3JwW2ldO1xuJiM0MztcbiBcdFx0aXJxX2dycC1cdTAwM2VhYiA9IGFiO1xuIFx0XHRpcnFfZ3JwLVx1MDAzZWdycF9pZCA9IGk7XG4gXG4gXHRcdGlycV9ncnAtXHUwMDNlbmFwaV9uZGV2ID0gYWxsb2NfbmV0ZGV2X2R1bW15KDApO1xuLVx0XHRpZiAoIWlycV9ncnAtXHUwMDNlbmFwaV9uZGV2KVxuLVx0XHRcdHJldHVybiAtRU5PTUVNO1xuJiM0MztcdFx0aWYgKCFpcnFfZ3JwLVx1MDAzZW5hcGlfbmRldikge1xuJiM0MztcdFx0XHRyZXQgPSAtRU5PTUVNO1xuJiM0MztcdFx0XHRpcnFfZ3JwLVx1MDAzZW51bV9pcnEgPSAwO1xuJiM0MztcdFx0XHRnb3RvIGVycl9yZXF1ZXN0X2lycTtcbiYjNDM7XHRcdH1cbiBcbiBcdFx0bmV0aWZfbmFwaV9hZGQoaXJxX2dycC1cdTAwM2VuYXBpX25kZXYsIFx1MDAyNmlycV9ncnAtXHUwMDNlbmFwaSxcbiBcdFx0XHQgICAgICAgYXRoMTFrX2FoYl9leHRfZ3JwX25hcGlfcG9sbCk7XG5AQCAtNTg1LDkgJiM0Mzs1OTgsNyBAQCBzdGF0aWMgaW50IGF0aDExa19haGJfY29uZmlnX2V4dF9pcnEoc3RydWN0IGF0aDExa19iYXNlICphYilcbiBcdFx0XHRcdH1cbiBcdFx0XHR9XG4gXHRcdH1cbi1cdFx0aXJxX2dycC1cdTAwM2VudW1faXJxID0gbnVtX2lycTtcbi1cbi1cdFx0Zm9yIChqID0gMDsgaiBcdTAwM2MgaXJxX2dycC1cdTAwM2VudW1faXJxOyBqJiM0MzsmIzQzOykge1xuJiM0MztcdFx0Zm9yIChqID0gMDsgaiBcdTAwM2MgbnVtX2lycTsgaiYjNDM7JiM0MzspIHtcbiBcdFx0XHRpbnQgaXJxX2lkeCA9IGlycV9ncnAtXHUwMDNlaXJxc1tqXTtcbiBcbiBcdFx0XHRpcnEgPSBwbGF0Zm9ybV9nZXRfaXJxX2J5bmFtZShhYi1cdTAwM2VwZGV2LFxuQEAgLTYwMCwxMSAmIzQzOzYxMSwyMyBAQCBzdGF0aWMgaW50IGF0aDExa19haGJfY29uZmlnX2V4dF9pcnEoc3RydWN0IGF0aDExa19iYXNlICphYilcbiBcdFx0XHRpZiAocmV0KSB7XG4gXHRcdFx0XHRhdGgxMWtfZXJyKGFiLCBcJiMzNDtmYWlsZWQgcmVxdWVzdF9pcnEgZm9yICVkXFxuXCYjMzQ7LFxuIFx0XHRcdFx0XHQgICBpcnEpO1xuJiM0MztcdFx0XHRcdGlycV9ncnAtXHUwMDNlbnVtX2lycSA9IGo7XG4mIzQzO1x0XHRcdFx0YXRoMTFrX2FoYl9mcmVlX2V4dF9pcnFfZ3JwKGFiLCBpcnFfZ3JwKTtcbiYjNDM7XHRcdFx0XHRnb3RvIGVycl9yZXF1ZXN0X2lycTtcbiBcdFx0XHR9XG4gXHRcdH1cbiYjNDM7XG4mIzQzO1x0XHRpcnFfZ3JwLVx1MDAzZW51bV9pcnEgPSBudW1faXJxO1xuIFx0fVxuIFxuIFx0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztlcnJfcmVxdWVzdF9pcnE6XG4mIzQzO1x0Zm9yIChpLS07IGkgXHUwMDNlPSAwOyBpLS0pIHtcbiYjNDM7XHRcdGlycV9ncnAgPSBcdTAwMjZhYi1cdTAwM2VleHRfaXJxX2dycFtpXTtcbiYjNDM7XHRcdGF0aDExa19haGJfZnJlZV9leHRfaXJxX2dycChhYiwgaXJxX2dycCk7XG4mIzQzO1x0fVxuJiM0MztcdHJldHVybiByZXQ7XG4gfVxuIFxuIHN0YXRpYyBpbnQgYXRoMTFrX2FoYl9jb25maWdfaXJxKHN0cnVjdCBhdGgxMWtfYmFzZSAqYWIpXG5AQCAtNjI5LDE2ICYjNDM7NjUyLDI0IEBAIHN0YXRpYyBpbnQgYXRoMTFrX2FoYl9jb25maWdfaXJxKHN0cnVjdCBhdGgxMWtfYmFzZSAqYWIpXG4gXHRcdHJldCA9IHJlcXVlc3RfaXJxKGlycSwgYXRoMTFrX2FoYl9jZV9pbnRlcnJ1cHRfaGFuZGxlcixcbiBcdFx0XHRcdCAgSVJRRl9UUklHR0VSX1JJU0lORywgaXJxX25hbWVbaXJxX2lkeF0sXG4gXHRcdFx0XHQgIGNlX3BpcGUpO1xuLVx0XHRpZiAocmV0KVxuJiM0MztcdFx0aWYgKHJldCkge1xuJiM0MztcdFx0XHRhdGgxMWtfZXJyKGFiLCBcJiMzNDtmYWlsZWQgcmVxdWVzdF9pcnEgZm9yICVkXFxuXCYjMzQ7LCBpcnEpO1xuJiM0MztcdFx0XHRhdGgxMWtfYWhiX2ZyZWVfY2VfaXJxcyhhYiwgaSk7XG4gXHRcdFx0cmV0dXJuIHJldDtcbiYjNDM7XHRcdH1cbiBcbiBcdFx0YWItXHUwMDNlaXJxX251bVtpcnFfaWR4XSA9IGlycTtcbiBcdH1cbiBcbiBcdC8qIENvbmZpZ3VyZSBleHRlcm5hbCBpbnRlcnJ1cHRzICovXG4gXHRyZXQgPSBhdGgxMWtfYWhiX2NvbmZpZ19leHRfaXJxKGFiKTtcbiYjNDM7XHRpZiAocmV0KSB7XG4mIzQzO1x0XHRhdGgxMWtfZXJyKGFiLCBcJiMzNDtmYWlsZWQgdG8gY29uZmlndXJlIGV4dCBpcnE6ICVkXFxuXCYjMzQ7LCByZXQpO1xuJiM0MztcdFx0YXRoMTFrX2FoYl9mcmVlX2NlX2lycXMoYWIsIGFiLVx1MDAzZWh3X3BhcmFtcy5jZV9jb3VudCk7XG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcdH1cbiBcbi1cdHJldHVybiByZXQ7XG4mIzQzO1x0cmV0dXJuIDA7XG4gfVxuIFxuIHN0YXRpYyBpbnQgYXRoMTFrX2FoYl9tYXBfc2VydmljZV90b19waXBlKHN0cnVjdCBhdGgxMWtfYmFzZSAqYWIsIHUxNiBzZXJ2aWNlX2lkLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI0IDA1OjE0PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBlcnJvciBoYW5kbGluZyBpbiB0aGUgcHJvYmUgcGF0aCBvZiB0aGUgYXRoMTFrIEFIQiBwbGF0Zm9ybSBkcml2ZXIgKGF0aDExa19haGIpLiBUaGlzIGRyaXZlciByZXF1aXJlcyBzcGVjaWZpYyBRdWFsY29tbSBTb0MgaGFyZHdhcmUgKGUuZy4sIElQUTgwNzQsIElQUTYwMTgpIGFuZCBiaW5kcyB2aWEgZGV2aWNlIHRyZWUgY29tcGF0aWJsZSBzdHJpbmdzLiBTaW5jZSBzeXprYWxsZXIgb3BlcmF0ZXMgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIChRRU1VL0dDRSkgd2l0aG91dCB0aGVzZSBzcGVjaWZpYyBoYXJkd2FyZSBub2RlcyBpbiB0aGUgZGV2aWNlIHRyZWUsIGFuZCB0aGVyZSBpcyBubyBtZWNoYW5pc20gdG8gaW5qZWN0IGFyYml0cmFyeSBwbGF0Zm9ybSBkZXZpY2VzIHdpdGggc3BlY2lmaWMgbWVtb3J5L0lSUSByZXNvdXJjZXMsIHRoaXMgY29kZSBwYXRoIGlzIHVucmVhY2hhYmxlIGFuZCBjYW5ub3QgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLApldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXQKICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LAogICBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMWU4MjVjNjNkMGMxMzYyZjM2MjViMGUzMDUwZTQwZGUwM2FmMWZjNApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBGcmkgSnVsIDI0IDA1OjE0OjA0IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9haGIuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvYWhiLmMKaW5kZXggZjU2NmQ2OTlkMDc0YTguLmJkZjUzYWE3ZGRmMWY1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2FoYi5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvYWhiLmMKQEAgLTQzMSwzNiAmIzQzOzQzMSw0NCBAQCBzdGF0aWMgdm9pZCBhdGgxMWtfYWhiX2luaXRfcW1pX2NlX2NvbmZpZyhzdHJ1Y3QgYXRoMTFrX2Jhc2UgKmFiKQogCWFiLSZndDtxbWkuc2VydmljZV9pbnNfaWQgPSBhYi0mZ3Q7aHdfcGFyYW1zLnFtaV9zZXJ2aWNlX2luc19pZDsKIH0KIAotc3RhdGljIHZvaWQgYXRoMTFrX2FoYl9mcmVlX2V4dF9pcnEoc3RydWN0IGF0aDExa19iYXNlICphYikKJiM0MztzdGF0aWMgdm9pZCBhdGgxMWtfYWhiX2ZyZWVfZXh0X2lycV9ncnAoc3RydWN0IGF0aDExa19iYXNlICphYiwKJiM0MzsJCQkJICAgICAgc3RydWN0IGF0aDExa19leHRfaXJxX2dycCAqaXJxX2dycCkKIHsKLQlpbnQgaSwgajsKLQotCWZvciAoaSA9IDA7IGkgJmx0OyBBVEgxMUtfRVhUX0lSUV9HUlBfTlVNX01BWDsgaSYjNDM7JiM0MzspIHsKLQkJc3RydWN0IGF0aDExa19leHRfaXJxX2dycCAqaXJxX2dycCA9ICZhbXA7YWItJmd0O2V4dF9pcnFfZ3JwW2ldOwomIzQzOwlpbnQgajsKIAotCQlmb3IgKGogPSAwOyBqICZsdDsgaXJxX2dycC0mZ3Q7bnVtX2lycTsgaiYjNDM7JiM0MzspCi0JCQlmcmVlX2lycShhYi0mZ3Q7aXJxX251bVtpcnFfZ3JwLSZndDtpcnFzW2pdXSwgaXJxX2dycCk7CiYjNDM7CWZvciAoaiA9IDA7IGogJmx0OyBpcnFfZ3JwLSZndDtudW1faXJxOyBqJiM0MzsmIzQzOykKJiM0MzsJCWZyZWVfaXJxKGFiLSZndDtpcnFfbnVtW2lycV9ncnAtJmd0O2lycXNbal1dLCBpcnFfZ3JwKTsKIAotCQluZXRpZl9uYXBpX2RlbCgmYW1wO2lycV9ncnAtJmd0O25hcGkpOwotCQlmcmVlX25ldGRldihpcnFfZ3JwLSZndDtuYXBpX25kZXYpOwotCX0KJiM0MzsJbmV0aWZfbmFwaV9kZWwoJmFtcDtpcnFfZ3JwLSZndDtuYXBpKTsKJiM0MzsJZnJlZV9uZXRkZXYoaXJxX2dycC0mZ3Q7bmFwaV9uZGV2KTsKIH0KIAotc3RhdGljIHZvaWQgYXRoMTFrX2FoYl9mcmVlX2lycShzdHJ1Y3QgYXRoMTFrX2Jhc2UgKmFiKQomIzQzO3N0YXRpYyB2b2lkIGF0aDExa19haGJfZnJlZV9leHRfaXJxKHN0cnVjdCBhdGgxMWtfYmFzZSAqYWIpCiB7Ci0JaW50IGlycV9pZHg7CiAJaW50IGk7CiAKLQlpZiAoYWItJmd0O2h3X3BhcmFtcy5oeWJyaWRfYnVzX3R5cGUpCi0JCXJldHVybiBhdGgxMWtfcGNpY19mcmVlX2lycShhYik7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBBVEgxMUtfRVhUX0lSUV9HUlBfTlVNX01BWDsgaSYjNDM7JiM0MzspCiYjNDM7CQlhdGgxMWtfYWhiX2ZyZWVfZXh0X2lycV9ncnAoYWIsICZhbXA7YWItJmd0O2V4dF9pcnFfZ3JwW2ldKTsKJiM0Mzt9CiAKLQlmb3IgKGkgPSAwOyBpICZsdDsgYWItJmd0O2h3X3BhcmFtcy5jZV9jb3VudDsgaSYjNDM7JiM0MzspIHsKJiM0MztzdGF0aWMgdm9pZCBhdGgxMWtfYWhiX2ZyZWVfY2VfaXJxcyhzdHJ1Y3QgYXRoMTFrX2Jhc2UgKmFiLCBpbnQgbWF4X2lkeCkKJiM0Mzt7CiYjNDM7CWludCBpcnFfaWR4LCBpOwomIzQzOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgbWF4X2lkeDsgaSYjNDM7JiM0MzspIHsKIAkJaWYgKGF0aDExa19jZV9nZXRfYXR0cl9mbGFncyhhYiwgaSkgJmFtcDsgQ0VfQVRUUl9ESVNfSU5UUikKIAkJCWNvbnRpbnVlOwogCQlpcnFfaWR4ID0gQVRIMTFLX0lSUV9DRTBfT0ZGU0VUICYjNDM7IGk7CiAJCWZyZWVfaXJxKGFiLSZndDtpcnFfbnVtW2lycV9pZHhdLCAmYW1wO2FiLSZndDtjZS5jZV9waXBlW2ldKTsKIAl9CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIGF0aDExa19haGJfZnJlZV9pcnEoc3RydWN0IGF0aDExa19iYXNlICphYikKJiM0Mzt7CiYjNDM7CWlmIChhYi0mZ3Q7aHdfcGFyYW1zLmh5YnJpZF9idXNfdHlwZSkKJiM0MzsJCXJldHVybiBhdGgxMWtfcGNpY19mcmVlX2lycShhYik7CiAKJiM0MzsJYXRoMTFrX2FoYl9mcmVlX2NlX2lycXMoYWIsIGFiLSZndDtod19wYXJhbXMuY2VfY291bnQpOwogCWF0aDExa19haGJfZnJlZV9leHRfaXJxKGFiKTsKIH0KIApAQCAtNTI0LDIwICYjNDM7NTMyLDI1IEBAIHN0YXRpYyBpcnFyZXR1cm5fdCBhdGgxMWtfYWhiX2V4dF9pbnRlcnJ1cHRfaGFuZGxlcihpbnQgaXJxLCB2b2lkICphcmcpCiBzdGF0aWMgaW50IGF0aDExa19haGJfY29uZmlnX2V4dF9pcnEoc3RydWN0IGF0aDExa19iYXNlICphYikKIHsKIAlzdHJ1Y3QgYXRoMTFrX2h3X3BhcmFtcyAqaHcgPSAmYW1wO2FiLSZndDtod19wYXJhbXM7CiYjNDM7CXN0cnVjdCBhdGgxMWtfZXh0X2lycV9ncnAgKmlycV9ncnA7CiAJaW50IGksIGo7CiAJaW50IGlycTsKIAlpbnQgcmV0OwogCiAJZm9yIChpID0gMDsgaSAmbHQ7IEFUSDExS19FWFRfSVJRX0dSUF9OVU1fTUFYOyBpJiM0MzsmIzQzOykgewotCQlzdHJ1Y3QgYXRoMTFrX2V4dF9pcnFfZ3JwICppcnFfZ3JwID0gJmFtcDthYi0mZ3Q7ZXh0X2lycV9ncnBbaV07CiAJCXUzMiBudW1faXJxID0gMDsKIAomIzQzOwkJaXJxX2dycCA9ICZhbXA7YWItJmd0O2V4dF9pcnFfZ3JwW2ldOwomIzQzOwogCQlpcnFfZ3JwLSZndDthYiA9IGFiOwogCQlpcnFfZ3JwLSZndDtncnBfaWQgPSBpOwogCiAJCWlycV9ncnAtJmd0O25hcGlfbmRldiA9IGFsbG9jX25ldGRldl9kdW1teSgwKTsKLQkJaWYgKCFpcnFfZ3JwLSZndDtuYXBpX25kZXYpCi0JCQlyZXR1cm4gLUVOT01FTTsKJiM0MzsJCWlmICghaXJxX2dycC0mZ3Q7bmFwaV9uZGV2KSB7CiYjNDM7CQkJcmV0ID0gLUVOT01FTTsKJiM0MzsJCQlpcnFfZ3JwLSZndDtudW1faXJxID0gMDsKJiM0MzsJCQlnb3RvIGVycl9yZXF1ZXN0X2lycTsKJiM0MzsJCX0KIAogCQluZXRpZl9uYXBpX2FkZChpcnFfZ3JwLSZndDtuYXBpX25kZXYsICZhbXA7aXJxX2dycC0mZ3Q7bmFwaSwKIAkJCSAgICAgICBhdGgxMWtfYWhiX2V4dF9ncnBfbmFwaV9wb2xsKTsKQEAgLTU4NSw5ICYjNDM7NTk4LDcgQEAgc3RhdGljIGludCBhdGgxMWtfYWhiX2NvbmZpZ19leHRfaXJxKHN0cnVjdCBhdGgxMWtfYmFzZSAqYWIpCiAJCQkJfQogCQkJfQogCQl9Ci0JCWlycV9ncnAtJmd0O251bV9pcnEgPSBudW1faXJxOwotCi0JCWZvciAoaiA9IDA7IGogJmx0OyBpcnFfZ3JwLSZndDtudW1faXJxOyBqJiM0MzsmIzQzOykgewomIzQzOwkJZm9yIChqID0gMDsgaiAmbHQ7IG51bV9pcnE7IGomIzQzOyYjNDM7KSB7CiAJCQlpbnQgaXJxX2lkeCA9IGlycV9ncnAtJmd0O2lycXNbal07CiAKIAkJCWlycSA9IHBsYXRmb3JtX2dldF9pcnFfYnluYW1lKGFiLSZndDtwZGV2LApAQCAtNjAwLDExICYjNDM7NjExLDIzIEBAIHN0YXRpYyBpbnQgYXRoMTFrX2FoYl9jb25maWdfZXh0X2lycShzdHJ1Y3QgYXRoMTFrX2Jhc2UgKmFiKQogCQkJaWYgKHJldCkgewogCQkJCWF0aDExa19lcnIoYWIsICYjMzQ7ZmFpbGVkIHJlcXVlc3RfaXJxIGZvciAlZFxuJiMzNDssCiAJCQkJCSAgIGlycSk7CiYjNDM7CQkJCWlycV9ncnAtJmd0O251bV9pcnEgPSBqOwomIzQzOwkJCQlhdGgxMWtfYWhiX2ZyZWVfZXh0X2lycV9ncnAoYWIsIGlycV9ncnApOwomIzQzOwkJCQlnb3RvIGVycl9yZXF1ZXN0X2lycTsKIAkJCX0KIAkJfQomIzQzOwomIzQzOwkJaXJxX2dycC0mZ3Q7bnVtX2lycSA9IG51bV9pcnE7CiAJfQogCiAJcmV0dXJuIDA7CiYjNDM7CiYjNDM7ZXJyX3JlcXVlc3RfaXJxOgomIzQzOwlmb3IgKGktLTsgaSAmZ3Q7PSAwOyBpLS0pIHsKJiM0MzsJCWlycV9ncnAgPSAmYW1wO2FiLSZndDtleHRfaXJxX2dycFtpXTsKJiM0MzsJCWF0aDExa19haGJfZnJlZV9leHRfaXJxX2dycChhYiwgaXJxX2dycCk7CiYjNDM7CX0KJiM0MzsJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIGludCBhdGgxMWtfYWhiX2NvbmZpZ19pcnEoc3RydWN0IGF0aDExa19iYXNlICphYikKQEAgLTYyOSwxNiAmIzQzOzY1MiwyNCBAQCBzdGF0aWMgaW50IGF0aDExa19haGJfY29uZmlnX2lycShzdHJ1Y3QgYXRoMTFrX2Jhc2UgKmFiKQogCQlyZXQgPSByZXF1ZXN0X2lycShpcnEsIGF0aDExa19haGJfY2VfaW50ZXJydXB0X2hhbmRsZXIsCiAJCQkJICBJUlFGX1RSSUdHRVJfUklTSU5HLCBpcnFfbmFtZVtpcnFfaWR4XSwKIAkJCQkgIGNlX3BpcGUpOwotCQlpZiAocmV0KQomIzQzOwkJaWYgKHJldCkgewomIzQzOwkJCWF0aDExa19lcnIoYWIsICYjMzQ7ZmFpbGVkIHJlcXVlc3RfaXJxIGZvciAlZFxuJiMzNDssIGlycSk7CiYjNDM7CQkJYXRoMTFrX2FoYl9mcmVlX2NlX2lycXMoYWIsIGkpOwogCQkJcmV0dXJuIHJldDsKJiM0MzsJCX0KIAogCQlhYi0mZ3Q7aXJxX251bVtpcnFfaWR4XSA9IGlycTsKIAl9CiAKIAkvKiBDb25maWd1cmUgZXh0ZXJuYWwgaW50ZXJydXB0cyAqLwogCXJldCA9IGF0aDExa19haGJfY29uZmlnX2V4dF9pcnEoYWIpOwomIzQzOwlpZiAocmV0KSB7CiYjNDM7CQlhdGgxMWtfZXJyKGFiLCAmIzM0O2ZhaWxlZCB0byBjb25maWd1cmUgZXh0IGlycTogJWRcbiYjMzQ7LCByZXQpOwomIzQzOwkJYXRoMTFrX2FoYl9mcmVlX2NlX2lycXMoYWIsIGFiLSZndDtod19wYXJhbXMuY2VfY291bnQpOwomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsJfQogCi0JcmV0dXJuIHJldDsKJiM0MzsJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgYXRoMTFrX2FoYl9tYXBfc2VydmljZV90b19waXBlKHN0cnVjdCBhdGgxMWtfYmFzZSAqYWIsIHUxNiBzZXJ2aWNlX2lkLAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNCAwNToxNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzOTc2CgkJCQkJCQlvdXRwdXQ6IDIzCgkJCQkJCQl0aG91Z2h0czogMzYwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUmVhY2hhYmlsaXR5IG9mIGFuIElSUSBDb25maWd1cmF0aW9uIEZpeCoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBnb3QgdGhpcyBwYXRjaCB0aGF0IGFkZHJlc3NlcyBzb21lIGVycm9yIGhhbmRsaW5nIGluIHRoZSBgYXRoMTFrYCBkcml2ZXIsIHNwZWNpZmljYWxseSBjb25jZXJuaW5nIElSUSBjb25maWd1cmF0aW9uIG9uIHRoZSBBSEIgYnVzIChgZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9haGIuY2ApLiBJdCBsb29rcyBsaWtlIHRoZXkmIzM5O3JlIGNsZWFuaW5nIHVwIHJlcXVlc3RlZCBJUlFzIGFuZCBOQVBJIHN0cnVjdHVyZXMgd2hlbiBgcmVxdWVzdF9pcnFgIG9yIGBhbGxvY19uZXRkZXZfZHVtbXlgIGZhaWxzIGluIHRoZSBgYXRoMTFrX2FoYl9jb25maWdfZXh0X2lycWAgYW5kIGBhdGgxMWtfYWhiX2NvbmZpZ19pcnFgIGZ1bmN0aW9ucy4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIGNhbiBJIGV2ZW4gKnRyaWdnZXIqIHRoaXM/IEkgbmVlZCB0byBmaWd1cmUgb3V0IGlmIHRoaXMgY29kZSBpcyByZWFjaGFibGUgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCDigJMgc3BlY2lmaWNhbGx5LCBRRU1VIG9yIEdvb2dsZSBDb21wdXRlIEVuZ2luZS4KClRoaXMgYGF0aDExa2AgZHJpdmVyLCBhcyBJIHJlY2FsbCwgaXMgZm9yIFF1YWxjb21tIFdpLUZpIDYgKDgwMi4xMWF4KSBkZXZpY2VzLiBVc3VhbGx5LCB0aGF0IG1lYW5zIHNwZWNpYWxpemVkIFBDSSBvciBBSEIgaGFyZHdhcmUuIEdpdmVuIHRoaXMgaXMgc3BlY2lmaWNhbGx5IHRoZSBBSEIgYnVzLCBpdCYjMzk7cyB2ZXJ5IGxpa2VseSB0YXJnZXRpbmcgU29DcyBsaWtlIElQUTgwNzQgb3IgSVBRNjAxOCwgd2hpY2ggaXMgd2hlcmUgdGhpbmdzIGdldCBpbnRlcmVzdGluZy4gQ2FuIEkgZnV6eiB0aGlzPyBTeXprYWxsZXImIzM5O3MgZ3JlYXQgZm9yIFBDSSBkZXZpY2VzIHVzaW5nIHZQQ0ksIGJ1dCBBSEIgaXMgdXN1YWxseSBhIHBsYXRmb3JtIGRldmljZSB0eXBlLiBTbywgaXMgdGhlcmUgYSB3YXkgdG8gZGVzY3JpYmUgaXQgdG8gU3l6a2FsbGVyPwoKTXkgbmV4dCBzdGVwIGlzIHRvIHNlZSBpZiB0aGVyZSBhcmUgYW55IFN5emthbGxlciBkZXNjcmlwdGlvbnMgZm9yIGBhdGgxMWtgIHBsYXRmb3JtIGRldmljZXMsIG9yIGlmIHRoaXMgZHJpdmVyIGlzIHB1cmVseSBkcml2ZW4gYnkgdGhlIGRldmljZSB0cmVlLiBJZiBpdOKAmXMgYSBwbGF0Zm9ybSBkcml2ZXIsIFN5emthbGxlciAqbWlnaHQqIGJlIGFibGUgdG8gY3JlYXRlIHRoZSBwbGF0Zm9ybSBkZXZpY2VzIGlmIHRoZXJlIGFyZSBkZXNjcmlwdGlvbnMuIE90aGVyd2lzZSwgaXTigJlzIHByb2JhYmx5IGdvaW5nIHRvIGJlIHVucmVhY2hhYmxlIHVubGVzcyBJJiMzOTttIG9uIGEgc3BlY2lmaWMgQVJNIGJvYXJkIHRoYXQgaGFzIHRoZSBoYXJkd2FyZSBkZWZpbmVkLiBJIHNob3VsZCBwcm9iYWJseSBncmVwIGZvciBzb21ldGhpbmcgbGlrZSBgYXRoMTFrX2FoYl9wcm9iZWAgb3IgYSBzaW1pbGFyIHByb2JlIGZ1bmN0aW9uIHRvIGNvbmZpcm0gdGhlIGRyaXZlciYjMzk7cyBwbGF0Zm9ybSBuYXR1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjQgMDU6MTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YXRoMTFrX2FoYl9wcm9iZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2FoYi5jPTExMDM9c3RhdGljIGludCBhdGgxMWtfYWhiX2Z3X3Jlc291cmNlX2RlaW5pdChzdHJ1Y3QgYXRoMTFrX2Jhc2UgKmFiKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvYWhiLmMtMTEzNy1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvYWhiLmM6MTEzODpzdGF0aWMgaW50IGF0aDExa19haGJfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvYWhiLmMtMTEzOS17XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9haGIuYz0xMzMzPXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGF0aDExa19haGJfZHJpdmVyID0ge1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvYWhiLmMtMTMzNy1cdH0sXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2FoYi5jOjEzMzg6XHQucHJvYmUgPSBhdGgxMWtfYWhiX3Byb2JlLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9haGIuYy0xMzM5LVx0LnJlbW92ZSA9IGF0aDExa19haGJfcmVtb3ZlLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI0IDA1OjE0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUwODAKCQkJCQkJCW91dHB1dDogMjYKCQkJCQkJCXRob3VnaHRzOiAyMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0JiMzOTtzIGludGVybmFsIG1vbm9sb2d1ZToKCioqUGxhdGZvcm0gRHJpdmVyIEFuYWx5c2lzKioKClJpZ2h0LCB0aGlzIGxvb2tzIGxpa2Ugd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBhIHBsYXRmb3JtIGRyaXZlci4gVGhlIGZpcnN0IHRoaW5nIEkgd2FudCB0byBkbyBpcyBzZWUgaWYgU3l6a2FsbGVyIGhhcyBhbnkgcHJlZGVmaW5lZCBkZXNjcmlwdGlvbnMgZm9yIGl0LiBUaGF0JiMzOTtzIGFsd2F5cyBteSBzdGFydGluZyBwb2ludC4gU2F2ZXMgYSB0b24gb2YgdGltZSBpZiBzb21lb25lJiMzOTtzIGFscmVhZHkgZG9uZSB0aGUgaGVhdnkgbGlmdGluZyBhbmQgaWRlbnRpZmllZCByZWxldmFudCBzeXNjYWxscyBhbmQgZnV6emluZyB0YXJnZXRzLiBObyBuZWVkIHRvIHJlaW52ZW50IHRoZSB3aGVlbCwgZXNwZWNpYWxseSB3aGVuIFN5emthbGxlciYjMzk7cyBjb3ZlcmFnZSBpcyB1c3VhbGx5IHByZXR0eSBnb29kIGZvciBjb21tb24gcGxhdGZvcm0gZHJpdmVycy4gTGV0JiMzOTtzIGRpZyBpbiBhbmQgc2VlIHdoYXQmIzM5O3MgYXZhaWxhYmxlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI0IDA1OjE0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YXRoMTFrJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7c3lzLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjQgMDU6MTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTI3MQoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDI4OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipOYXZpZ2F0aW5nIHRoZSBTeXprYWxsZXIgTGFuZHNjYXBlKioKCk9rYXksIGhlcmUmIzM5O3MgdGhlIHNpdHVhdGlvbi4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IHRvIGFwcHJvYWNoIHRoaXMsIGJ1dCBmaXJzdCwgYSBjcml0aWNhbCBjb25zdHJhaW50IGp1bXBzIG91dC4gSSBjYW4mIzM5O3QgdXNlIGdyZXBwZXIgb24gYW55dGhpbmcgaW4gdGhlIGBzeXMvYCBkaXJlY3RvcnkuIFRoYXQmIzM5O3MgYSByZWQgZmxhZyDigJMgYSBoYXJkIHN0b3AuIFRoZSBwcm9tcHQgc3BlY2lmaWNhbGx5IGRpcmVjdHMgbWUgYXdheSBmcm9tIGBncmVwcGVyYCBhbmQgdG93YXJkcyBgcmVhZC1maWxlYCBvciBgY29kZXNlYXJjaC1kaXItaW5kZXhgIGluc3RlYWQuIEJ1dCB3YWl04oCmIHRoZSBpbnN0cnVjdGlvbnMgYWxzbyBtZW50aW9uIGEgYHt7LnRvb2xSZWFkRGVzY3JpcHRpb259fWAgdG9vbCwgd2hpY2ggaXMgc3VwcG9zZWQgdG8gaGFuZGxlIHRob3NlIGRlc2NyaXB0aW9ucy4gVGhhdCBzb3VuZHMgaWRlYWwsIGJ1dCB0aGVyZSYjMzk7cyBubyBzdWNoIHRvb2whIEl0JiMzOTtzIG5vdCBpbiB0aGUgbGlzdGVkIHRvb2xzLiBUaGF0JiMzOTtzIGNvbmZ1c2luZy4gVGhlIGF2YWlsYWJsZSB0b29scyBhcmUgYGdyZXBwZXJgLCBgY29kZXNlYXJjaC1kaXItaW5kZXhgLCBgcmVhZC1maWxlYCwgYW5kIGBzZXQtcmVzdWx0c2AsIHdoaWNoIGRvZXNuJiMzOTt0IHNlZW0gdG8gaGF2ZSB0aGUgcmVxdWlyZWQgZnVuY3Rpb25hbGl0eS4KCkFscmlnaHQsIG1vdmluZyBvbiwgcGxhdGZvcm0gZGV2aWNlcyBhcmUgYW5vdGhlciBjb25zaWRlcmF0aW9uLiBUeXBpY2FsbHksIHRoZXkgYXJlbiYjMzk7dCBkaXJlY3RseSBmdXp6ZWQgdW5sZXNzIGEgcHNldWRvLXN5c2NhbGwgb3IgYW4gaW5qZWN0aW9uIG1lY2hhbmlzbSBleGlzdHMuIE5vdywgZG9lcyBzeXprYWxsZXIgaGF2ZSBhIHdheSB0byBpbmplY3QgcGxhdGZvcm0gZGV2aWNlcyB2aWEgYC9zeXMvZGV2aWNlcy9wbGF0Zm9ybWAgb3Igc29tZXRoaW5nIHNpbWlsYXI/IEkgZG9uJiMzOTt0IHRoaW5rIHNvLiBJJiMzOTttIHVzdWFsbHkgZGVhbGluZyB3aXRoIHRoaW5ncyBsaWtlIGBzeXpfZGV2bGlua2Agb3Igc3BlY2lhbGl6ZWQgcHNldWRvLXN5c2NhbGxzIHRvIGhhbmRsZSB0aGlzLgoKU28sIGhlcmUmIzM5O3MgYSBzZXBhcmF0ZSBxdWVzdGlvbiB0aGF0IGp1c3QgcG9wcGVkIHVwLCBpcyBgYXRoMTFrYCBhY3R1YWxseSByZWFjaGFibGUgaW4gc3RhbmRhcmQgeDg2XzY0IHZpcnR1YWwgbWFjaGluZXM/IFRoYXQmIzM5O3MgYSBrZXkgZGV0YWlsIHRvIGNvbmZpcm0uIFNpbmNlIEFIQiBpcyBhIHByZXR0eSBzdGFuZGFyZCBBUk0tc3BlY2lmaWMgYnVzLCB0aGlzIG5lZWRzIHZlcmlmaWNhdGlvbi4gVGltZSB0byBkaXZlIGludG8gdGhlIGBkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL0tjb25maWdgIGZpbGUgdG8gY2hlY2sgb24gdGhpcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNCAwNToxNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgQVRIMTFLJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEJTRC0zLUNsYXVzZS1DbGVhclxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9LY29uZmlnOjI6Y29uZmlnIEFUSDExS1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9LY29uZmlnLTMtXHR0cmlzdGF0ZSBcJiMzNDtRdWFsY29tbSA4MDIuMTFheCBjaGlwc2V0IHN1cHBvcnRcJiMzNDtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL0tjb25maWctMTItXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL0tjb25maWc6MTM6Y29uZmlnIEFUSDExS19BSEJcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvS2NvbmZpZy0xNC1cdHRyaXN0YXRlIFwmIzM0O0F0aGVyb3MgYXRoMTFrIEFIQiBzdXBwb3J0XCYjMzQ7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9LY29uZmlnLTE5LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9LY29uZmlnOjIwOmNvbmZpZyBBVEgxMUtfUENJXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL0tjb25maWctMjEtXHR0cmlzdGF0ZSBcJiMzNDtBdGhlcm9zIGF0aDExayBQQ0kgc3VwcG9ydFwmIzM0O1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvS2NvbmZpZy0yOS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvS2NvbmZpZzozMDpjb25maWcgQVRIMTFLX0RFQlVHXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL0tjb25maWctMzEtXHRib29sIFwmIzM0O1FDQSBhdGgxMWsgZGVidWdnaW5nXCYjMzQ7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9LY29uZmlnLTM3LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9LY29uZmlnOjM4OmNvbmZpZyBBVEgxMUtfREVCVUdGU1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9LY29uZmlnLTM5LVx0Ym9vbCBcJiMzNDtRQ0EgYXRoMTFrIGRlYnVnZnMgc3VwcG9ydFwmIzM0O1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvS2NvbmZpZy00NS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvS2NvbmZpZzo0Njpjb25maWcgQVRIMTFLX1RSQUNJTkdcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvS2NvbmZpZy00Ny1cdGJvb2wgXCYjMzQ7YXRoMTFrIHRyYWNpbmcgc3VwcG9ydFwmIzM0O1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvS2NvbmZpZy01MS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvS2NvbmZpZzo1Mjpjb25maWcgQVRIMTFLX1NQRUNUUkFMXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL0tjb25maWctNTMtXHRib29sIFwmIzM0O1FDQSBhdGgxMWsgc3BlY3RyYWwgc2NhbiBzdXBwb3J0XCYjMzQ7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9LY29uZmlnLTYwLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9LY29uZmlnOjYxOmNvbmZpZyBBVEgxMUtfQ0ZSXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL0tjb25maWctNjItXHRib29sIFwmIzM0O2F0aDExayBjaGFubmVsIGZyZXF1ZW5jeSByZXNwb25zZSBzdXBwb3J0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjQgMDU6MTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjY0MwoJCQkJCQkJb3V0cHV0OiA0MQoJCQkJCQkJdGhvdWdodHM6IDE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqSW52ZXN0aWdhdGluZyBEZXBlbmRlbmNpZXMgb2YgQVRIMTFLX0FIQioqCgpPa2F5LCBzbyBJJiMzOTttIGRpdmluZyBpbnRvIHRoZSBgQVRIMTFLX0FIQmAgbW9kdWxlLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgJiMzNDtXaGF0JiMzOTtzIHRoaXMgdGhpbmcgYnVpbHQgb24/IFdoYXQgb3RoZXIgY29tcG9uZW50cyBpcyBpdCByZWxpYW50IHVwb24/JiMzNDsgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGZvdW5kYXRpb25hbCBkZXBlbmRlbmNpZXMuIEkgd2FudCB0byBidWlsZCBhIG1lbnRhbCBtYXAgb2YgaXRzIHJlbGF0aW9uc2hpcHMgd2l0aGluIHRoZSBicm9hZGVyIGtlcm5lbCBhcmNoaXRlY3R1cmUsIHlvdSBrbm93LCB0aGUgdXN1YWwgZmlyc3Qgc3RlcCB3aGVuIEkmIzM5O20gYXNzZXNzaW5nIGEgbmV3IHBpZWNlIG9mIGRyaXZlciBjb2RlIG9yIHRyb3VibGVzaG9vdGluZyBhIHJlbGF0ZWQgaXNzdWUuIExldCYjMzk7cyBzZWUgd2hhdCB0aGF0IGxvb2tzIGxpa2UuIEkmIzM5O20gZ29pbmcgdG8gc3RhcnQgZGlnZ2luZyBpbnRvIHRoZSBtYWtlZmlsZXMgYW5kIGluY2x1ZGUgc3RhdGVtZW50czsgbm90aGluZyBsaWtlIGEgYml0IG9mIGdyZXAgdG8gZ2V0IHRoZSBsYXkgb2YgdGhlIGxhbmQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI0IDA1OjE0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTMtQ2xhdXNlLUNsZWFyXG4gICAyOlx0Y29uZmlnIEFUSDExS1xuICAgMzpcdFx0dHJpc3RhdGUgXCYjMzQ7UXVhbGNvbW0gODAyLjExYXggY2hpcHNldCBzdXBwb3J0XCYjMzQ7XG4gICA0Olx0XHRkZXBlbmRzIG9uIE1BQzgwMjExIFx1MDAyNlx1MDAyNiBIQVNfRE1BXG4gICA1Olx0XHRzZWxlY3QgQVRIX0NPTU1PTlxuICAgNjpcdFx0c2VsZWN0IFFDT01fUU1JX0hFTFBFUlNcbiAgIDc6XHRcdGhlbHBcbiAgIDg6XHRcdCAgVGhpcyBtb2R1bGUgYWRkcyBzdXBwb3J0IGZvciBRdWFsY29tbSBUZWNobm9sb2dpZXMgODAyLjExYXggZmFtaWx5IG9mXG4gICA5Olx0XHQgIGNoaXBzZXRzLlxuICAxMDpcdFxuICAxMTpcdFx0ICBJZiB5b3UgY2hvb3NlIHRvIGJ1aWxkIGEgbW9kdWxlLCBpdCYjMzk7bGwgYmUgY2FsbGVkIGF0aDExay5cbiAgMTI6XHRcbiAgMTM6XHRjb25maWcgQVRIMTFLX0FIQlxuICAxNDpcdFx0dHJpc3RhdGUgXCYjMzQ7QXRoZXJvcyBhdGgxMWsgQUhCIHN1cHBvcnRcJiMzNDtcbiAgMTU6XHRcdGRlcGVuZHMgb24gQVRIMTFLXG4gIDE2Olx0XHRkZXBlbmRzIG9uIFJFTU9URVBST0NcbiAgMTc6XHRcdGhlbHBcbiAgMTg6XHRcdCAgVGhpcyBtb2R1bGUgYWRkcyBzdXBwb3J0IGZvciBBSEIgYnVzXG4gIDE5Olx0XG4gIDIwOlx0Y29uZmlnIEFUSDExS19QQ0lcbiAgMjE6XHRcdHRyaXN0YXRlIFwmIzM0O0F0aGVyb3MgYXRoMTFrIFBDSSBzdXBwb3J0XCYjMzQ7XG4gIDIyOlx0XHRkZXBlbmRzIG9uIEFUSDExSyBcdTAwMjZcdTAwMjYgUENJXG4gIDIzOlx0XHRzZWxlY3QgTUhJX0JVU1xuICAyNDpcdFx0c2VsZWN0IFFSVFJcbiAgMjU6XHRcdHNlbGVjdCBRUlRSX01ISVxuICAyNjpcdFx0c2VsZWN0IFBDSV9QV1JDVFJMX1BXUlNFUSBpZiBIQVZFX1BXUkNUUkxcbiAgMjc6XHRcdGhlbHBcbiAgMjg6XHRcdCAgVGhpcyBtb2R1bGUgYWRkcyBzdXBwb3J0IGZvciBQQ0lFIGJ1c1xuICAyOTpcdFxuICAzMDpcdGNvbmZpZyBBVEgxMUtfREVCVUdcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjQgMDU6MTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzI2NQoJCQkJCQkJb3V0cHV0OiA0NgoJCQkJCQkJdGhvdWdodHM6IDcxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgQVRIMTFLX0FIQiBEcml2ZXIqKgoKT2theSwgc28gYEFUSDExS19BSEJgIGlzIHBhcnQgb2YgdGhlIGBBVEgxMUtgIGZhbWlseSwgYW5kIGl0IHNlZW1zIHRvIHJlbHkgb24gYFJFTU9URVBST0NgIGFzIHdlbGwuIFRoYXQmIzM5O3MgZ29vZCB0byBrbm93LCBzZXRzIGEgZm91bmRhdGlvbiBmb3IgaG93IGl0IG9wZXJhdGVzLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZmlndXJlIG91dCB3aGV0aGVyIHRoaXMgcGFydGljdWxhciBBSEIgaW1wbGVtZW50YXRpb24gaGFzIGFueSBhcmNoaXRlY3R1cmFsIGNvbnN0cmFpbnRzLiBJIG5lZWQgdG8gZGV0ZXJtaW5lIGlmIGl0IGlzIHRpZWQgdG8gQVJNIHNwZWNpZmljYWxseSwgb3IgYW55IG90aGVyIENQVSBhcmNoaXRlY3R1cmUsIGZvciB0aGF0IG1hdHRlci4gTm93LCB3YWl0IGEgbWludXRlLCBBSELigKYgdGhhdCBzY3JlYW1zICYjMzQ7ZGV2aWNlIHRyZWUmIzM0OyB0byBtZSEgQUhCIGRldmljZXMgYXJlIHR5cGljYWxseSBkaXNjb3ZlcmVkIHRocm91Z2ggdGhlIGRldmljZSB0cmVlLCBzbyB0aGF0JiMzOTtzIHByb2JhYmx5IHRoZSBjcnVjaWFsIGVudHJ5IHBvaW50IGhlcmUuIEkgc2hvdWxkIGdvIHN0cmFpZ2h0IHRvIGBhdGgxMWtfYWhiX3Byb2JlYCBhbmQgc2VlIHdoYXQgaXQmIzM5O3MgZG9pbmcuIFRoYXQmIzM5O2xsIGJlIG15IHN0YXJ0aW5nIHBvaW50IGZvciB1bmRlcnN0YW5kaW5nIGl0cyBpbml0aWFsaXphdGlvbiBhbmQgc2V0dXAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI0IDA1OjE0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9haGIuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDExMzAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTEzMDpcdFx0aW9tbXVfZGV0YWNoX2RldmljZShpb21tdSwgYWJfYWhiLVx1MDAzZWZ3LmRldik7XG4xMTMxOlx0XHRpb21tdV9kb21haW5fZnJlZShpb21tdSk7XG4xMTMyOlx0XG4xMTMzOlx0XHRwbGF0Zm9ybV9kZXZpY2VfdW5yZWdpc3Rlcih0b19wbGF0Zm9ybV9kZXZpY2UoYWJfYWhiLVx1MDAzZWZ3LmRldikpO1xuMTEzNDpcdFxuMTEzNTpcdFx0cmV0dXJuIDA7XG4xMTM2Olx0fVxuMTEzNzpcdFxuMTEzODpcdHN0YXRpYyBpbnQgYXRoMTFrX2FoYl9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxuMTEzOTpcdHtcbjExNDA6XHRcdHN0cnVjdCBhdGgxMWtfYmFzZSAqYWI7XG4xMTQxOlx0XHRjb25zdCBzdHJ1Y3QgYXRoMTFrX2hpZl9vcHMgKmhpZl9vcHM7XG4xMTQyOlx0XHRjb25zdCBzdHJ1Y3QgYXRoMTFrX3BjaV9vcHMgKnBjaV9vcHM7XG4xMTQzOlx0XHRlbnVtIGF0aDExa19od19yZXYgaHdfcmV2O1xuMTE0NDpcdFx0aW50IHJldDtcbjExNDU6XHRcbjExNDY6XHRcdGh3X3JldiA9ICh1aW50cHRyX3QpZGV2aWNlX2dldF9tYXRjaF9kYXRhKFx1MDAyNnBkZXYtXHUwMDNlZGV2KTtcbjExNDc6XHRcbjExNDg6XHRcdHN3aXRjaCAoaHdfcmV2KSB7XG4xMTQ5Olx0XHRjYXNlIEFUSDExS19IV19JUFE4MDc0OlxuMTE1MDpcdFx0Y2FzZSBBVEgxMUtfSFdfSVBRNjAxOF9IVzEwOlxuMTE1MTpcdFx0Y2FzZSBBVEgxMUtfSFdfSVBRNTAxOF9IVzEwOlxuMTE1MjpcdFx0XHRoaWZfb3BzID0gXHUwMDI2YXRoMTFrX2FoYl9oaWZfb3BzX2lwcTgwNzQ7XG4xMTUzOlx0XHRcdHBjaV9vcHMgPSBOVUxMO1xuMTE1NDpcdFx0XHRicmVhaztcbjExNTU6XHRcdGNhc2UgQVRIMTFLX0hXX1dDTjY3NTBfSFcxMDpcbjExNTY6XHRcdFx0aGlmX29wcyA9IFx1MDAyNmF0aDExa19haGJfaGlmX29wc193Y242NzUwO1xuMTE1NzpcdFx0XHRwY2lfb3BzID0gXHUwMDI2YXRoMTFrX2FoYl9wY2lfb3BzX3djbjY3NTA7XG4xMTU4Olx0XHRcdGJyZWFrO1xuMTE1OTpcdFx0ZGVmYXVsdDpcbjExNjA6XHRcdFx0ZGV2X2VycihcdTAwMjZwZGV2LVx1MDAzZWRldiwgXCYjMzQ7dW5zdXBwb3J0ZWQgZGV2aWNlIHR5cGUgJWRcXG5cJiMzNDssIGh3X3Jldik7XG4xMTYxOlx0XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbjExNjI6XHRcdH1cbjExNjM6XHRcbjExNjQ6XHRcdHJldCA9IGRtYV9zZXRfbWFza19hbmRfY29oZXJlbnQoXHUwMDI2cGRldi1cdTAwM2VkZXYsIERNQV9CSVRfTUFTSygzMikpO1xuMTE2NTpcdFx0aWYgKHJldCkge1xuMTE2NjpcdFx0XHRkZXZfZXJyKFx1MDAyNnBkZXYtXHUwMDNlZGV2LCBcJiMzNDtmYWlsZWQgdG8gc2V0IDMyLWJpdCBjb25zaXN0ZW50IGRtYVxcblwmIzM0Oyk7XG4xMTY3Olx0XHRcdHJldHVybiByZXQ7XG4xMTY4Olx0XHR9XG4xMTY5Olx0XG4xMTcwOlx0XHRhYiA9IGF0aDExa19jb3JlX2FsbG9jKFx1MDAyNnBkZXYtXHUwMDNlZGV2LCBzaXplb2Yoc3RydWN0IGF0aDExa19haGIpLFxuMTE3MTpcdFx0XHRcdCAgICAgICBBVEgxMUtfQlVTX0FIQik7XG4xMTcyOlx0XHRpZiAoIWFiKSB7XG4xMTczOlx0XHRcdGRldl9lcnIoXHUwMDI2cGRldi1cdTAwM2VkZXYsIFwmIzM0O2ZhaWxlZCB0byBhbGxvY2F0ZSBhdGgxMWsgYmFzZVxcblwmIzM0Oyk7XG4xMTc0Olx0XHRcdHJldHVybiAtRU5PTUVNO1xuMTE3NTpcdFx0fVxuMTE3NjpcdFxuMTE3NzpcdFx0YWItXHUwMDNlaGlmLm9wcyA9IGhpZl9vcHM7XG4xMTc4Olx0XHRhYi1cdTAwM2VwZGV2ID0gcGRldjtcbjExNzk6XHRcdGFiLVx1MDAzZWh3X3JldiA9IGh3X3JldjtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjQgMDU6MTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODQ1NgoJCQkJCQkJb3V0cHV0OiA0NgoJCQkJCQkJdGhvdWdodHM6IDI4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyB0aGUgRGV2aWNlIFByb2JlIEZ1bmN0aW9uKioKCkFscmlnaHQsIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIHRoaXMgcHJvYmUgZnVuY3Rpb24sIGFuZCB0aGUgZmlyc3QgdGhpbmcgdGhhdCBjYXRjaGVzIG15IGV5ZSBpcyB0aGlzIGNhbGwgdG8gYGRldmljZV9nZXRfbWF0Y2hfZGF0YSgmYW1wO3BkZXYtJmd0O2RldilgLiBOYXR1cmFsbHksIEkmIzM5O20gaW1tZWRpYXRlbHkgdGhpbmtpbmcsICYjMzQ7T2theSwgbGV0JiMzOTtzIHNlZSBob3cgdGhlIGRyaXZlciBpbnRlcmFjdHMgd2l0aCB0aGUgZGV2aWNlIG1hdGNoaW5nIHRhYmxlLiYjMzQ7IEkgd2FudCB0byB1bmRlcnN0YW5kIGhvdyBpdCYjMzk7cyBpZGVudGlmeWluZyB0aGUgY29ycmVjdCBoYXJkd2FyZS4gV2hhdCBraW5kIG9mIG1hdGNoIGRhdGEgYXJlIHdlIGdldHRpbmc/IElzIGl0IHVzaW5nIHBsYXRmb3JtIGRldmljZSBJRHMsIGRldmljZSB0cmVlIGJpbmRpbmdzLCBBQ1BJIGRhdGEsIG9yIHNvbWUgY3VzdG9tIG1ldGhvZD8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHNwZWNpZmljcy4gTGV0JiMzOTtzIHRyYWNlIHRoaXMgYmFjayB0byB0aGUgbWF0Y2ggdGFibGUgYW5kIHNlZSB3aGF0JiMzOTtzIGJlaW5nIGxvb2tlZCBmb3IgYW5kIGhvdyB0aGUgaGFyZHdhcmUgaXMgYmVpbmcgaWRlbnRpZmllZCBhbmQgYXNzb2NpYXRlZCB3aXRoIHRoZSBkcml2ZXIuIEkgbmVlZCB0aGUgZnVsbCBwaWN0dXJlIHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgZHJpdmVyIGJpbmRzIHRvIHRoZSBoYXJkd2FyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjQgMDU6MTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2FoYi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTMyMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMzIwOlx0XHQgKi9cbjEzMjE6XHRcdGF0aDExa19haGJfcmVtb3ZlX3ByZXBhcmUoYWIpO1xuMTMyMjpcdFxuMTMyMzpcdFx0aWYgKCEodGVzdF9iaXQoQVRIMTFLX0ZMQUdfUkVHSVNURVJFRCwgXHUwMDI2YWItXHUwMDNlZGV2X2ZsYWdzKSkpXG4xMzI0Olx0XHRcdGdvdG8gZnJlZV9yZXNvdXJjZXM7XG4xMzI1Olx0XG4xMzI2Olx0XHRhdGgxMWtfY29yZV9kZWluaXQoYWIpO1xuMTMyNzpcdFxuMTMyODpcdGZyZWVfcmVzb3VyY2VzOlxuMTMyOTpcdFx0YXRoMTFrX2Z3X2Rlc3Ryb3koYWIpO1xuMTMzMDpcdFx0YXRoMTFrX2FoYl9mcmVlX3Jlc291cmNlcyhhYik7XG4xMzMxOlx0fVxuMTMzMjpcdFxuMTMzMzpcdHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGF0aDExa19haGJfZHJpdmVyID0ge1xuMTMzNDpcdFx0LmRyaXZlciA9IHtcbjEzMzU6XHRcdFx0Lm5hbWUgPSBcJiMzNDthdGgxMWtcJiMzNDssXG4xMzM2Olx0XHRcdC5vZl9tYXRjaF90YWJsZSA9IGF0aDExa19haGJfb2ZfbWF0Y2gsXG4xMzM3Olx0XHR9LFxuMTMzODpcdFx0LnByb2JlID0gYXRoMTFrX2FoYl9wcm9iZSxcbjEzMzk6XHRcdC5yZW1vdmUgPSBhdGgxMWtfYWhiX3JlbW92ZSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjQgMDU6MTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTAyOQoJCQkJCQkJb3V0cHV0OiAyNQoJCQkJCQkJdGhvdWdodHM6IDM5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoaXMgdGhvdWdodCBwcm9jZXNzLCBmcmFtZWQgaW4gdGhlIGZpcnN0IHBlcnNvbiwgYXMgaWYgdGhlc2Ugd2VyZSBteSBpbnRlcm5hbCBjb25zaWRlcmF0aW9ucywgYXNzdW1pbmcgSSYjMzk7bSBhbiBleHBlcnQ6CgoqKkludmVzdGlnYXRpbmcgdGhlIERhdGEgU3RydWN0dXJlIGBvZl9tYXRjaF90YWJsZWAqKgoKUmlnaHQsIHNvIHRoZSBjb2RlIGlzIHVzaW5nIGBvZl9tYXRjaF90YWJsZSA9IGF0aDExa19haGJfb2ZfbWF0Y2hgLiBPa2F5LCB0aGF0JiMzOTtzIGludGVyZXN0aW5nLiBJIGltbWVkaWF0ZWx5IHdhbnQgdG8gdW5kZXJzdGFuZCB3aGF0JiMzOTtzIGluIGBhdGgxMWtfYWhiX29mX21hdGNoYC4gSXQmIzM5O3MgbGlrZWx5IGEgdGFibGUsIGEgZGF0YSBzdHJ1Y3R1cmUgdGhhdCBkZWZpbmVzIGhvdyB0aGUgc3lzdGVtIHJlY29nbml6ZXMgYW5kIGhhbmRsZXMgZGV2aWNlcyB2aWEgdGhlIE9wZW4gRmlybXdhcmUgbWVjaGFuaXNtLiBQcm9iYWJseSBpdCBjb250YWlucyBpbmZvcm1hdGlvbiB0aGF0IG1hcHMgc3BlY2lmaWMgaGFyZHdhcmUgaWRlbnRpZmllcnMsIGxpa2UgdGhlIGRldmljZSBJRCBvciB2ZW5kb3IgSUQsIHRvIHRoZSBjb3JyZXNwb25kaW5nIGRyaXZlciBvciBtb2R1bGUgcmVzcG9uc2libGUgZm9yIG1hbmFnaW5nIHRoYXQgaGFyZHdhcmUuIEdpdmVuIHRoZSBjb250ZXh0LCBpdCYjMzk7cyBhbG1vc3QgY2VydGFpbmx5IHJlbGF0ZWQgdG8gdGhlIEFIQiBidXMgYW5kIGxpa2VseSBzcGVjaWZpY2FsbHkgZGVzaWduZWQgZm9yIGEgUXVhbGNvbW0gQXRoZXJvcyAxMWsgY2hpcC4gSSBuZWVkIHRvIGRpdmUgaW50byB0aGUgZGVmaW5pdGlvbiBvZiBgYXRoMTFrX2FoYl9vZl9tYXRjaGAgdG8gc2VlIHdoYXQgZmllbGRzIGl0IGNvbnRhaW5zOiBpcyBpdCB1c2luZyBjb21wYXRpYmxlIHN0cmluZ3MsIGRldmljZSBJRHMsIG9yIHNvbWUgb3RoZXIgaWRlbnRpZmllciB0byBtYXRjaCBhZ2FpbnN0PyBXaGF0IHByb3BlcnRpZXMgYXJlIHRoZXNlIG1hdGNoZXMgZXhwZWN0ZWQgdG8gY29udGFpbiwgYW5kIGhvdyBhcmUgdGhvc2UgcHJvcGVydGllcyBnb2luZyB0byBiZSB1c2VkPyBUaGlzIGlzIGtleSB0byB1bmRlcnN0YW5kaW5nIGhvdyB0aGUgZHJpdmVyIGtub3dzIGl0IG5lZWRzIHRvIGF0dGFjaCB0byB0aGlzIHNwZWNpZmljIGhhcmR3YXJlLiBMZXQmIzM5O3MgZGlnIGluIGFuZCBmaWd1cmUgb3V0IGV4YWN0bHkgd2hhdCBpdCYjMzk7cyB0cnlpbmcgdG8gbWF0Y2guCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI0IDA1OjE0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2F0aDExa19haGJfb2ZfbWF0Y2gmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9haGIuYy0yMy1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvYWhiLmM6MjQ6c3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgYXRoMTFrX2FoYl9vZl9tYXRjaFtdID0ge1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9haGIuYy0yNS1cdC8qIFRPRE86IFNob3VsZCB3ZSBjaGFuZ2UgdGhlIGNvbXBhdGlibGUgc3RyaW5nIHRvIHNvbWV0aGluZyBzaW1pbGFyXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9haGIuYy00Mi1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvYWhiLmM6NDM6TU9EVUxFX0RFVklDRV9UQUJMRShvZiwgYXRoMTFrX2FoYl9vZl9tYXRjaCk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2FoYi5jLTQ0LVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvYWhiLmM9MTMzMz1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBhdGgxMWtfYWhiX2RyaXZlciA9IHtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2FoYi5jLTEzMzUtXHRcdC5uYW1lID0gXCYjMzQ7YXRoMTFrXCYjMzQ7LFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9haGIuYzoxMzM2Olx0XHQub2ZfbWF0Y2hfdGFibGUgPSBhdGgxMWtfYWhiX29mX21hdGNoLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9haGIuYy0xMzM3LVx0fSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjQgMDU6MTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTczMQoJCQkJCQkJb3V0cHV0OiA0NAoJCQkJCQkJdGhvdWdodHM6IDE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHdoYXQmIzM5O3MgZ29pbmcgdGhyb3VnaCBteSBtaW5kIGFzIEkgYXBwcm9hY2ggdGhpcyB0YXNrLCBrZWVwaW5nIGluIG1pbmQgbXkgZXhwZXJ0aXNlOgoKKipEaXZpbmcgaW50byBgYXRoMTFrX2FoYl9vZl9tYXRjaGAqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGdldCBkb3duIHRvIGl0LiBgYXRoMTFrX2FoYl9vZl9tYXRjaGDigKYgU291bmRzIGxpa2Ugd2UmIzM5O3JlIGxvb2tpbmcgYXQgYSBwaWVjZSBvZiB0aGUgQXRoZXJvcyB3aXJlbGVzcyBkcml2ZXIgZm9yIEFIQiBidXMgaW50ZXJmYWNlcywgbGlrZWx5IGludm9sdmluZyBkZXZpY2UgdHJlZSBtYXRjaGluZy4gUmlnaHQgYXdheSwgbXkgbWluZCBzdGFydHMgZHJhd2luZyBjb25uZWN0aW9ucy4gSSYjMzk7bSB0aGlua2luZyBhYm91dCB0aGUgZGV2aWNlIHRyZWUgYmluZGluZ3MgZm9yIHRoaXMgaGFyZHdhcmUsIGFuZCBob3cgdGhpcyBmdW5jdGlvbiBsaWtlbHkgcGxheXMgYSBjcnVjaWFsIHJvbGUgaW4gcHJvYmluZyBhbmQgaW5pdGlhbGl6YXRpb24uIFRoaXMgaGludHMgYXQgdGhlIGxvdy1sZXZlbCBkZXZpY2UgZW51bWVyYXRpb24gcHJvY2VzcyBhbmQgaG93IHRoZSBkcml2ZXIgaWRlbnRpZmllcyBhbmQgYmluZHMgdG8gdGhlIHNwZWNpZmljIGhhcmR3YXJlIG9uIHRoZSBBSEIuIEkmIzM5O20gaW1hZ2luaW5nIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgcGxhdGZvcm0mIzM5O3MgZGV2aWNlIHRyZWUgc3RydWN0dXJlIHRvIG1ha2Ugc3VyZSBpdCYjMzk7cyB0aGUgcmlnaHQgZHJpdmVyIGZvciB0aGUgaWRlbnRpZmllZCBoYXJkd2FyZS4gV2hhdCYjMzk7cyBpdCBkb2luZyB3aXRoIHRoZSBkZXZpY2UgSUQsIGNvbXBhdGlibGUgc3RyaW5ncywgYW5kIGFueSBzcGVjaWZpYyBwcm9wZXJ0aWVzPyBJcyBpdCBoYW5kbGluZyByZXZpc2lvbnMsIG9yIGp1c3QgdGhlIGJhc2ljIG1hdGNoaW5nPyBUaW1lIHRvIGRpZyBpbiBhbmQgZmluZCBvdXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI0IDA1OjE0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9haGIuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDI0LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgMjQ6XHRzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBhdGgxMWtfYWhiX29mX21hdGNoW10gPSB7XG4gIDI1Olx0XHQvKiBUT0RPOiBTaG91bGQgd2UgY2hhbmdlIHRoZSBjb21wYXRpYmxlIHN0cmluZyB0byBzb21ldGhpbmcgc2ltaWxhclxuICAyNjpcdFx0ICogdG8gb25lIHRoYXQgYXRoMTBrIHVzZXM/XG4gIDI3Olx0XHQgKi9cbiAgMjg6XHRcdHsgLmNvbXBhdGlibGUgPSBcJiMzNDtxY29tLGlwcTgwNzQtd2lmaVwmIzM0OyxcbiAgMjk6XHRcdCAgLmRhdGEgPSAodm9pZCAqKUFUSDExS19IV19JUFE4MDc0LFxuICAzMDpcdFx0fSxcbiAgMzE6XHRcdHsgLmNvbXBhdGlibGUgPSBcJiMzNDtxY29tLGlwcTYwMTgtd2lmaVwmIzM0OyxcbiAgMzI6XHRcdCAgLmRhdGEgPSAodm9pZCAqKUFUSDExS19IV19JUFE2MDE4X0hXMTAsXG4gIDMzOlx0XHR9LFxuICAzNDpcdFx0eyAuY29tcGF0aWJsZSA9IFwmIzM0O3Fjb20sd2NuNjc1MC13aWZpXCYjMzQ7LFxuICAzNTpcdFx0ICAuZGF0YSA9ICh2b2lkICopQVRIMTFLX0hXX1dDTjY3NTBfSFcxMCxcbiAgMzY6XHRcdH0sXG4gIDM3Olx0XHR7IC5jb21wYXRpYmxlID0gXCYjMzQ7cWNvbSxpcHE1MDE4LXdpZmlcJiMzNDssXG4gIDM4Olx0XHQgIC5kYXRhID0gKHZvaWQgKilBVEgxMUtfSFdfSVBRNTAxOF9IVzEwLFxuICAzOTpcdFx0fSxcbiAgNDA6XHRcdHsgfVxuICA0MTpcdH07XG4gIDQyOlx0XG4gIDQzOlx0TU9EVUxFX0RFVklDRV9UQUJMRShvZiwgYXRoMTFrX2FoYl9vZl9tYXRjaCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI0IDA1OjE0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwMzg4CgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogNDMwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUmVhY2hhYmlsaXR5IG9mIFRoaXMgUGxhdGZvcm0gRHJpdmVyKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBsYXRmb3JtIGRyaXZlciwgYW5kIGl0JiMzOTtzIGNsZWFybHkgdGllZCB0byBzcGVjaWZpYyBkZXZpY2UgdHJlZSBub2RlcyDigJMgYHFjb20saXBxODA3NC13aWZpYCwgdGhhdCBraW5kIG9mIHRoaW5nLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgJiMzNDtJbiBhIHR5cGljYWwgc3l6a2FsbGVyIHNldHVwIOKAkyB4ODZfNjQsIEdDRS9RRU1VLCB0aGUgdXN1YWwg4oCTIHRoZXJlICphcmVuJiMzOTt0KiB0aGVzZSBkZXZpY2UgdHJlZSBub2Rlcy4mIzM0OyBTeXprYWxsZXIsIGFzIGZhciBhcyBJIHVuZGVyc3RhbmQgaXQsIGRvZXNuJiMzOTt0IGhhdmUgYSBidWlsdC1pbiBnZW5lcmljIG1lY2hhbmlzbSB0byBqdXN0ICppbmplY3QqIGFyYml0cmFyeSBwbGF0Zm9ybSBkZXZpY2VzIHdpdGggYW55IG9sZCBPRiBjb21wYXRpYmxlIHN0cmluZyB1bmxlc3MgdGhlcmUmIzM5O3MgYSByZWFsbHkgc3BlY2lmaWMgcHNldWRvLXN5c2NhbGwgZGVzaWduZWQgZm9yIGl0LCBsaWtlIGEgYHN5el9kZXZsaW5rYCB0eXBlIG9mIHRoaW5nLCBvciBtYXliZSBzb21ldGhpbmcgdXNpbmcgYHN5el9wbGF0Zm9ybV9kZXZpY2VfYWRkYC4gV2FpdCBhIG1pbnV0ZSwgZG9lc24mIzM5O3Qgc3l6a2FsbGVyICp1c3VhbGx5KiB1c2Ugc29tZXRoaW5nIGxpa2UgYHN5el9wbGF0Zm9ybV9kZXZpY2VfYWRkYCBvciBzaW1pbGFyPyBIbW1tLCBoYW5nIG9uLCBkb2VzIHN5emthbGxlciBldmVuIGhhdmUgYSBjb21wbGV0ZWx5IGdlbmVyaWMgYHN5el9wbGF0Zm9ybV9kZXZpY2VfYWRkYCB0aGF0IHdvcmtzIGZvciAqYW55KiBkcml2ZXI/IEkgbmVlZCB0byBjbGFyaWZ5IHRoYXQuCgpXYWl0LCBhcmUgdGhlcmUgKnNvbWUqIGRlc2NyaXB0aW9ucyBmb3IgcGxhdGZvcm0gZGV2aWNlcyBhbHJlYWR5IGRlZmluZWQgaW4gc3l6a2FsbGVyPyBMZXQmIzM5O3MgY2hlY2sgZm9yIGFueSBleGlzdGluZyByZWZlcmVuY2VzIHRvIGBxY29tLGlwcTgwNzQtd2lmaWAgaW4gdGhlIGtlcm5lbCBvciBzeXprYWxsZXIgaXRzZWxmLiBJIGNhbiYjMzk7dCBkaXJlY3RseSBgZ3JlcGAgdGhlIGBzeXMvYCBkaXJlY3RvcnksIHNvIEkgaGF2ZSB0byB0aGluayBhYm91dCBhbHRlcm5hdGUgd2F5cyB0byBzZWUgd2hlcmUgdGhpcyBjb2RlIG1pZ2h0IGJlIHJlYWNoYWJsZS4gSXMgdGhpcyBldmVuIHJlbW90ZWx5IHJlYWNoYWJsZSBpbiBhbnkgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQ/CgpJZiB0aGlzIGlzIHNvbWUgQVJNLXNwZWNpZmljIFNvQyBXaS1GaSBkcml2ZXIsIHRoZSBvZGRzIG9mIGl0IGJlaW5nIGhpdCBpbiBzdGFuZGFyZCB4ODZfNjQgZnV6emluZyBhcmUgdmFuaXNoaW5nbHkgc21hbGwuIFdhaXQsIGJ1dCBzeXprYWxsZXIgKmRvZXMqIGZ1enogQVJNNjQsIHJpZ2h0PyBFdmVuIHNvLCBpdCB1c2VzIGEgZ2VuZXJpYyB2aXJ0dWFsIG1hY2hpbmUgKFFFTVUgdmlydCBtYWNoaW5lKSwgd2hpY2ggYWxtb3N0IGNlcnRhaW5seSAqZG9lc24mIzM5O3QqIGhhdmUgdGhlc2Ugc3BlY2lmaWMgUXVhbGNvbW0gV2ktRmkgaGFyZHdhcmUgbm9kZXMgaW4gaXRzIGRldmljZSB0cmVlLgoKQ2FuIHN5emthbGxlciBpbmplY3QgZGV2aWNlIHRyZWUgbm9kZXM/IEkmIzM5O20gcHJldHR5IHN1cmUgbm90LCB0aGUgZGV2aWNlIHRyZWUgaXMgcGFzc2VkIGF0IGJvb3QgdGltZS4gV2FpdCwgdGhlcmUmIzM5O3MgYENPTkZJR19PRl9EWU5BTUlDYCBhbmQgYENPTkZJR19PRl9PVkVSTEFZYCwgcmlnaHQ/IEJ1dCwgYXMgZmFyIGFzIEkmIzM5O20gYXdhcmUsIHN5emthbGxlciBkb2VzbiYjMzk7dCBsZXZlcmFnZSB0aG9zZSBjdXJyZW50bHkgdG8gaW5qZWN0IHJhbmRvbSBkZXZpY2VzIGZvciBmdXp6aW5nIHVubGVzcyBzb21lb25lJiMzOTtzIGV4cGxpY2l0bHkgY29kZWQgaXQgdGhhdCB3YXkuCgpPa2F5LCBsZXQmIzM5O3Mgc2VlLCBsZXQmIzM5O3MgbG9vayBmb3IgYGF0aDExa2AgYW5kIGl0cyBjb3JyZXNwb25kaW5nIHN5emthbGxlciBkZXNjcmlwdGlvbi4gSSBjYW4gdXNlIGBjb2Rlc2VhcmNoLWRpci1pbmRleGAgb3IgYHJlYWQtZmlsZWAgdG8gY2hlY2sgYHN5cy9saW51eC9gIGZvciBhbnkgc2lnbiBvZiBgYXRoMTFrYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjQgMDU6MTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDthdGgxMWsmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtzeXMvbGludXgvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjQgMDU6MTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE0MjkKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiA1NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipOYXZpZ2F0aW5nIHRoZSBMYWJ5cmludGggb2YgQ29kZSoqCgpPa2F5LCBzbyB0aGUgcHJvbXB0IGlzIHZlcnkgY2xlYXI6IEkmIzM5O20gKm5vdCogdG8gdXNlIHRoZSB1c3VhbCBTeXprYWxsZXIgc2VhcmNoIG1ldGhvZHMgb24gYHN5emxhbmdgIGRlc2NyaXB0aW9ucy4gVGhhdCYjMzk7cyBmaW5lOyBjaGFsbGVuZ2VzIGFyZSB3aGF0IGtlZXAgdGhpbmdzIGludGVyZXN0aW5nISBJIG5lZWQgYSBtb3JlIHRhcmdldGVkIGFwcHJvYWNoLiBMZXQmIzM5O3Mgc2VlLi4uIHRoZSB0ZXh0IGluZGljYXRlcyBJIHNob3VsZCB1c2UgYGNvZGVzZWFyY2gtZGlyLWluZGV4YCBhbmQgYHJlYWQtZmlsZWAuIFRoYXQgc291bmRzIHByb21pc2luZy4gSXQgc2VlbXMgbGlrZSBJJiMzOTttIGV4cGVjdGVkIHRvIGRlbHZlIGludG8gdGhlIGBzeXMvbGludXgvYCBkaXJlY3RvcnkuIFJpZ2h0LCBJIHVuZGVyc3RhbmQuIEkmIzM5O2xsIG1ha2Ugc3VyZSB0byB1c2UgdGhvc2UgdG9vbHMgb24gdGhhdCBzcGVjaWZpYyBkaXJlY3RvcnkgdG8gZ2V0IHRoZSBpbmZvcm1hdGlvbiB0aGF0IEkgbmVlZC4gVGhpcyBzaG91bGQgYmUgc3RyYWlnaHRmb3J3YXJkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNCAwNToxNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmNvZGVzZWFyY2gtZGlyLWluZGV4PC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+dGhlIGRpcmVjdG9yeSBkb2VzIG5vdCBleGlzdDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0RpciYjMzQ7OiAmIzM0O3N5cy9saW51eCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O3RoZSBkaXJlY3RvcnkgZG9lcyBub3QgZXhpc3QmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI0IDA1OjE0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExNjY2CgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogMzQ0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgQXRoMTFrIERyaXZlciBmb3IgRnV6emFiaWxpdHkqKgoKT2theSwgZmlyc3QgdGhpbmdzIGZpcnN0LCBJIG5lZWQgdG8gYWRqdXN0IG15IGFwcHJvYWNoLiBUaGUgdG9vbCBsaW1pdGF0aW9uIGlzIGNsZWFyOiBJIGNhbiYjMzk7dCBkaXJlY3RseSBzZWFyY2ggc3l6a2FsbGVyIGRlc2NyaXB0aW9ucyB3aXRoaW4gdGhlIGtlcm5lbCB0cmVlLCBhbmQgdGhlIGB0b29sUmVhZERlc2NyaXB0aW9uYCB0b29sIGlzbiYjMzk7dCBhdmFpbGFibGUuIFNvLCBubyBkaXJlY3Qgc3l6a2FsbGVyIHNlYXJjaCBmb3IgbWUuIEkgbmVlZCB0byBkZWR1Y2UgZnV6emFiaWxpdHkgaW5kaXJlY3RseS4KClRoZSBkcml2ZXIgaW4gcXVlc3Rpb24gaXMgYGF0aDExa2AsIHNwZWNpZmljYWxseSB0aGUgQUhCIGJ1cyBhdHRhY2htZW50IChgYWhiLmNgKS4gQUhCIGlzIGEgYnVzIGFyY2hpdGVjdHVyZSBjb21tb25seSBmb3VuZCBpbiBTeXN0ZW0tb24tQ2hpcHMsIGFuZCB0aGlzIHBhcnRpY3VsYXIgY29kZSByZXF1aXJlcyBhIHBsYXRmb3JtIGRldmljZSB3aXRoIHNwZWNpZmljIGNvbXBhdGlibGUgc3RyaW5ncy4gVW5sZXNzIHN5emthbGxlciBoYXMgYSBoaWdobHkgc3BlY2lmaWMgcHNldWRvLXN5c2NhbGwgdG8gaW5zdGFudGlhdGUgc3VjaCBhIHBsYXRmb3JtIGRldmljZSwgd2hpY2ggd291bGQgYmUgdW51c3VhbCBmb3IgYSByYW5kb20gV2ktRmkgU29DIGRyaXZlciwgdGhpcyBwYXRoIGlzIGxpa2VseSB1bnJlYWNoYWJsZSBpbiBhIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50LiBUaGF0JiMzOTtzIGEgZ29vZCBpbml0aWFsIGluZGljYXRvci4KCk5vdywgbGV0JiMzOTtzIGV4cGxvcmUgcG9zc2libGUgYWx0ZXJuYXRpdmVzLiBJcyB0aGVyZSBhIFBDSSBlcXVpdmFsZW50PyBUaGUgY2hhbmdlIGlzIHdpdGhpbiBgYWhiLmNgLCBzdWdnZXN0aW5nIGl0JiMzOTtzIHRpZ2h0bHkgY291cGxlZCB0byB0aGUgQUhCIGJ1cy4gV2FpdCwgSSBzZWUgYW4gaW50ZXJlc3RpbmcgY2FsbDogYGF0aDExa19haGJfZnJlZV9pcnFgLiBUaGUgcHJlc2VuY2Ugb2YKCmBgYGMKCWlmIChhYi0mZ3Q7aHdfcGFyYW1zLmh5YnJpZF9idXNfdHlwZSkKCQlyZXR1cm4gYXRoMTFrX3BjaWNfZnJlZV9pcnEoYWIpOwpgYGAKCmlzIGludHJpZ3VpbmcsIGJ1dCBpdCYjMzk7cyAqc3RpbGwqIHdpdGhpbiBgYWhiLmNgLCB3aGljaCBtYWtlcyBtZSBxdWVzdGlvbiB0aGUgbGFyZ2VyIGJ1aWxkIGNvbmZpZ3VyYXRpb24uIE15IHByaW1hcnkgY29uY2VybiByZW1haW5zIHdoZXRoZXIgYGFoYi5jYCBpcyBldmVuIGNvbXBpbGVkIGZvciBQQ0ktb25seSBjb25maWd1cmF0aW9ucy4gVG8gY2xhcmlmeSB0aGF0LCBJIHNob3VsZCBjaGVjayB0aGUgbWFrZWZpbGUgd2l0aGluIGBkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI0IDA1OjE1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9NYWtlZmlsZSYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEJTRC0zLUNsYXVzZS1DbGVhclxuICAgMjpcdG9iai0kKENPTkZJR19BVEgxMUspICYjNDM7PSBhdGgxMWsub1xuICAgMzpcdGF0aDExay15ICYjNDM7PSBjb3JlLm8gXFxcbiAgIDQ6XHRcdCAgICBoYWwubyBcXFxuICAgNTpcdFx0ICAgIGhhbF90eC5vIFxcXG4gICA2Olx0XHQgICAgaGFsX3J4Lm8gXFxcbiAgIDc6XHRcdCAgICB3bWkubyBcXFxuICAgODpcdFx0ICAgIG1hYy5vIFxcXG4gICA5Olx0XHQgICAgcmVnLm8gXFxcbiAgMTA6XHRcdCAgICBodGMubyBcXFxuICAxMTpcdFx0ICAgIHFtaS5vIFxcXG4gIDEyOlx0XHQgICAgZHAubyAgXFxcbiAgMTM6XHRcdCAgICBkcF90eC5vIFxcXG4gIDE0Olx0XHQgICAgZHBfcngubyBcXFxuICAxNTpcdFx0ICAgIGRlYnVnLm8gXFxcbiAgMTY6XHRcdCAgICBjZS5vIFxcXG4gIDE3Olx0XHQgICAgcGVlci5vIFxcXG4gIDE4Olx0XHQgICAgZGJyaW5nLm8gXFxcbiAgMTk6XHRcdCAgICBody5vIFxcXG4gIDIwOlx0XHQgICAgcGNpYy5vIFxcXG4gIDIxOlx0XHQgICAgZncubyBcXFxuICAyMjpcdFx0ICAgIHAycC5vXG4gIDIzOlx0XG4gIDI0Olx0YXRoMTFrLSQoQ09ORklHX0FUSDExS19ERUJVR0ZTKSAmIzQzOz0gZGVidWdmcy5vIGRlYnVnZnNfaHR0X3N0YXRzLm8gZGVidWdmc19zdGEub1xuICAyNTpcdGF0aDExay0kKENPTkZJR19OTDgwMjExX1RFU1RNT0RFKSAmIzQzOz0gdGVzdG1vZGUub1xuICAyNjpcdGF0aDExay0kKENPTkZJR19BVEgxMUtfVFJBQ0lORykgJiM0Mzs9IHRyYWNlLm9cbiAgMjc6XHRhdGgxMWstJChDT05GSUdfVEhFUk1BTCkgJiM0Mzs9IHRoZXJtYWwub1xuICAyODpcdGF0aDExay0kKENPTkZJR19BVEgxMUtfU1BFQ1RSQUwpICYjNDM7PSBzcGVjdHJhbC5vXG4gIDI5Olx0YXRoMTFrLSQoQ09ORklHX1BNKSAmIzQzOz0gd293Lm9cbiAgMzA6XHRhdGgxMWstJChDT05GSUdfREVWX0NPUkVEVU1QKSAmIzQzOz0gY29yZWR1bXAub1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNCAwNToxNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjg5MQoJCQkJCQkJb3V0cHV0OiA0MQoJCQkJCQkJdGhvdWdodHM6IDEwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCB1c2VyIGFuZCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqQW5hbHl6aW5nIHRoZSBNYWtlZmlsZSoqCgpBbHJpZ2h0LCB0aW1lIHRvIGRpZyBpbnRvIHRoZSByZXN0IG9mIHRoaXMgTWFrZWZpbGUuIEkmIzM5O3ZlIHNlZW4gdGhlIGJhc2ljcywgdGhlIHN0cnVjdHVyZSwgdGhlIGRlcGVuZGVuY2llcy4uLiBub3csIGxldCYjMzk7cyBzZWUgd2hhdCBpbnRlcmVzdGluZyB0ZWNobmlxdWVzIG9yIG9wdGltaXphdGlvbnMgYXJlIGVtcGxveWVkLiBJJiMzOTttIGxvb2tpbmcgZm9yIHRoaW5ncyB0aGF0IG1pZ2h0IGJlIG5vdmVsLCBvciBwZXJoYXBzIHBhdHRlcm5zIHRoYXQgSSYjMzk7dmUgc2VlbiBiZWZvcmUgYnV0IGFyZSBpbXBsZW1lbnRlZCBpbiBhIHVuaXF1ZSB3YXkgaGVyZS4gQXJlIHRoZXJlIGFueSBjbGV2ZXIgdXNlcyBvZiBzaGVsbCBleHBhbnNpb25zLCB2YXJpYWJsZSBzdWJzdGl0dXRpb24sIG9yIHBlcmhhcHMgc29tZSBwYXJ0aWN1bGFybHkgZWxlZ2FudCB1c2Ugb2YgR05VIE1ha2UmIzM5O3MgZmVhdHVyZXM/IEkmIzM5O20gaG9waW5nIHRvIHNwb3Qgc29tZSB0cmlja3MgdGhhdCBJIGNhbiBmaWxlIGF3YXkgZm9yIGZ1dHVyZSBwcm9qZWN0cy4gSSB3YW50IHRvIHNlZSBpZiB0aGUgYXV0aG9yJiMzOTtzIGZvbGxvd2luZyBhbnkgZXN0YWJsaXNoZWQgYmVzdCBwcmFjdGljZXMgb3IgaWYgdGhleSYjMzk7cmUgdGFraW5nIGEgbW9yZSB1bmNvbnZlbnRpb25hbCByb3V0ZS4gTGV0JiMzOTtzIHNlZSBpZiB0aGlzIE1ha2VmaWxlIGlzIGp1c3QgZnVuY3Rpb25hbCBvciBpZiBpdCYjMzk7cyBhbHNvIHdlbGwtY3JhZnRlZCBhbmQgcmVhZGFibGUuIEkmIzM5O2xsIGJlIHNjcnV0aW5pemluZyB0aGUgZGVwZW5kZW5jeSBncmFwaHMsIHRhcmdldCBkZWZpbml0aW9ucywgYW5kIGFueSBjdXN0b20gZnVuY3Rpb25zIG9yIG1hY3JvcyB0aGF0IGhhdmUgYmVlbiBkZWZpbmVkLiBJdCYjMzk7cyB0aW1lIHRvIHNlZSBob3cgdGhpcyB0aGluZyAqcmVhbGx5KiB3b3Jrcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjQgMDU6MTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL01ha2VmaWxlJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAzMTpcdGF0aDExay0kKENPTkZJR19BVEgxMUtfQ0ZSKSAmIzQzOz0gY2ZyLm9cbiAgMzI6XHRcbiAgMzM6XHRvYmotJChDT05GSUdfQVRIMTFLX0FIQikgJiM0Mzs9IGF0aDExa19haGIub1xuICAzNDpcdGF0aDExa19haGIteSAmIzQzOz0gYWhiLm9cbiAgMzU6XHRcbiAgMzY6XHRvYmotJChDT05GSUdfQVRIMTFLX1BDSSkgJiM0Mzs9IGF0aDExa19wY2kub1xuICAzNzpcdGF0aDExa19wY2kteSAmIzQzOz0gbWhpLm8gcGNpLm9cbiAgMzg6XHRcbiAgMzk6XHQjIGZvciB0cmFjaW5nIGZyYW1ld29yayB0byBmaW5kIHRyYWNlLmhcbiAgNDA6XHRDRkxBR1NfdHJhY2UubyA6PSAtSSQoc3JjKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNCAwNToxNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzM2MAoJCQkJCQkJb3V0cHV0OiAyNgoJCQkJCQkJdGhvdWdodHM6IDQzNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIGBhdGgxMWtfYWhiYCBEcml2ZXImIzM5O3MgUmVhY2hhYmlsaXR5KioKCk9rYXksIHNvIGBhaGIuY2Agb25seSBnZXRzIGNvbXBpbGVkIHdoZW4gYENPTkZJR19BVEgxMUtfQUhCYCBpcyBlbmFibGVkLiBBbmQgdGhhdCBjb25maWcgb3B0aW9uIGlzIHNwZWNpZmljYWxseSBmb3IgQXRoZXJvcyYjMzk7IEFIQiBzdXBwb3J0IHdpdGhpbiBgYXRoMTFrYC4gUmlnaHQsIHdlIGtub3cgYGF0aDExa19haGJfcHJvYmVgIGlzIGEgcGxhdGZvcm0gZHJpdmVyJiMzOTtzIHByb2JlIGZ1bmN0aW9uLCBhbmQgaXQmIzM5O3Mga2V5ZWQgdG8gc3BlY2lmaWMgZGV2aWNlIHRyZWUgY29tcGF0aWJsZSBzdHJpbmdzIOKAkyB0aGUgUXVhbGNvbW0gV2ktRmkgZGV2aWNlcy4gVGhvc2UgcGxhdGZvcm0gZGV2aWNlcyBhcmUgKmluc3RhbnRpYXRlZCogZHVyaW5nIGJvb3QsIGFsbCB0aGFua3MgdG8gdGhlIGRldmljZSB0cmVlLCBvciBzcGVjaWZpY2FsbHkgaGVyZSwgdGhlIE9wZW4gRmlybXdhcmUgKE9GKS4KCkluIGFueSB2aXJ0dWFsaXplZCBzZXR1cCBsaWtlIFFFTVUgb3IgR0NFLCB0aGUgZ3Vlc3QmIzM5O3MgZGV2aWNlIHRyZWUgKndvbiYjMzk7dCogaGF2ZSB0aGVzZSBRdWFsY29tbSBXaS1GaSBub2Rlcy4gU28gdGhlIGBhdGgxMWtfYWhiYCBkcml2ZXIgd2lsbCBzaW1wbHkgbmV2ZXIgYmluZCB0byBhbnkgZGV2aWNlLiBUaGF0IG1lYW5zIHRoZSBwcm9iZSBmdW5jdGlvbiwgYWxvbmcgd2l0aCBgYXRoMTFrX2FoYl9jb25maWdfaXJxYCBhbmQgYGF0aDExa19haGJfY29uZmlnX2V4dF9pcnFgLCB3aWxsIG5ldmVyIGJlIGV4ZWN1dGVkIGluIHRoZXNlIGVudmlyb25tZW50cy4KCkhvbGQgb24sIGlzIHRoZXJlICphbnkqIHdheSB0byB0cmlnZ2VyIHBsYXRmb3JtIGRldmljZSBjcmVhdGlvbiBmcm9tIHVzZXJzcGFjZT8gVGhlcmUmIzM5O3MgYSBzeXNmcyBpbnRlcmZhY2UgZm9yIHNvbWUgYnVzZXMsIGJ1dCB3aXRoIHBsYXRmb3JtIGJ1c2VzLCB5b3UgY2FuJiMzOTt0IGp1c3QgY29uanVyZSB1cCBhcmJpdHJhcnkgZGV2aWNlcyBmcm9tIHVzZXJzcGFjZSB1bmxlc3MgdGhlcmUmIzM5O3MgYSBzcGVjaWZpYyBkcml2ZXIgb3IgYSBkZWJ1Z2ZzIGludGVyZmFjZSB0aGF0IGV4cG9zZXMgc29tZXRoaW5nIGxpa2UgYHBsYXRmb3JtX2RldmljZV9yZWdpc3RlcmAuIEFuZCwgYXMgZmFyIGFzIEkga25vdywgU3l6a2FsbGVyIGRvZXNuJiMzOTt0IGhhdmUgYSBidWlsdC1pbiB3YXkgdG8gZG8gdGhpcy4gSSYjMzk7dmUgdXNlZCBpdCB3aXRoIFBDSSBkZXZpY2VzICh0aHJvdWdoIGBzeXpfcGNpX2RldmljZV9hZGRgIC8gdlBDSSkgYW5kIFVTQiBkZXZpY2VzICh2aWEgYHN5el91c2JfY29ubmVjdGAgLyBkdW1teV9oY2QpLCBidXQgbm90IHdpdGggYXJiaXRyYXJ5IHBsYXRmb3JtIGRldmljZXMgd2l0aCB2ZXJ5IHNwZWNpZmljIE9GIGNvbXBhdGlibGUgc3RyaW5ncy4KCldhaXQuLi4gSSYjMzk7dmUgZ290IGl0LCB0aGVyZSBpcyBgbWFjODAyMTFfaHdzaW1gLCBidXQgdGhhdCBzaW11bGF0ZXMgYSAqZ2VuZXJpYyogV2ktRmkgcmFkaW8sIGFuZCB0aGF0IGRvZXMgbm90IGluc3RhbnRpYXRlIHRoZSBgYXRoMTFrYCBoYXJkd2FyZS4KClNvLCByZWFsaXN0aWNhbGx5LCB0aGlzIGNvZGUgcGF0aCBpcyBzaW1wbHkgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB0aGVzZSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuIEkmIzM5O20gZ29pbmcgdG8gZG91YmxlIGNoZWNrIHJlYWwgcXVpY2sgdGhhdCBgYXRoMTFrX2FoYl9jb25maWdfaXJxYCBjYW4mIzM5O3QgYmUgY2FsbGVkIGZyb20gc29tZSBvdGhlciBwbGFjZSBpbiB0aGUgY29kZSBiYXNlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNCAwNToxNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDthdGgxMWtfYWhiX2NvbmZpZ19pcnEmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9haGIuYz01MzI9c3RhdGljIGludCBhdGgxMWtfYWhiX2NvbmZpZ19leHRfaXJxKHN0cnVjdCBhdGgxMWtfYmFzZSAqYWIpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9haGIuYy02MzItXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2FoYi5jOjYzMzpzdGF0aWMgaW50IGF0aDExa19haGJfY29uZmlnX2lycShzdHJ1Y3QgYXRoMTFrX2Jhc2UgKmFiKVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9haGIuYy02MzQte1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvYWhiLmM9MTEzOD1zdGF0aWMgaW50IGF0aDExa19haGJfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2FoYi5jLTEyMzAtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2FoYi5jOjEyMzE6XHRyZXQgPSBhdGgxMWtfYWhiX2NvbmZpZ19pcnEoYWIpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9haGIuYy0xMjMyLVx0aWYgKHJldCkge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNCAwNToxNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDYxOQoJCQkJCQkJb3V0cHV0OiAxNDkKCQkJCQkJCXRob3VnaHRzOiAzNTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqVW5yZWFjaGFibGUgQ29kZSBpbiB0aGUgQUhCIFdpLUZpIERyaXZlcioqCgpPa2F5LCBzbyBJJiMzOTt2ZSBiZWVuIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCBpdCYjMzk7cyBwcmV0dHkgY2xlYXI6IHRoaXMgYmxvY2sgaXMgb25seSBlbnRlcmVkIHRocm91Z2ggYGF0aDExa19haGJfcHJvYmVgLiBUaGF0IGZ1bmN0aW9uIGl0c2VsZiBpcyBleGNsdXNpdmVseSBjYWxsZWQgYnkgdGhlIHBsYXRmb3JtIGJ1cyB3aGVuIGl0IGRldGVjdHMgYSBtYXRjaGluZyBkZXZpY2UuIFRoZSBwcm9ibGVtIGlzLCBhbmQgdGhpcyBpcyBjcnVjaWFsIGZvciBmdXp6aW5nIGNvbnNpZGVyYXRpb25zLCB0aGF0IFN5emthbGxlciwgd2hpY2ggaXMgb3VyIHByaW1hcnkgZnV6emluZyB0b29sLCBkb2VzbiYjMzk7dCBoYXZlIGEgd2F5IHRvIGluamVjdCBhcmJpdHJhcnkgcGxhdGZvcm0gZGV2aWNlcy4gSSB0aG91Z2h0IG1heWJlIEkgd2FzIG1pc3Npbmcgc29tZXRoaW5nIOKAkyBkb2VzIGl0IGhhdmUgYSBwc2V1ZG8tc3lzY2FsbCBmb3IgcGxhdGZvcm0gZGV2aWNlcz8gSSBrbm93IGl0IGhhcyBgc3l6X3BsYXRmb3JtX2RldmljZV9hZGRgLi4uIHdhaXQsIGl0IGRvZXNuJiMzOTt0LgoKSSBzdGFydGVkIGxpc3RpbmcgdGhlIGtub3duIGBzeXpfYCBwcmVmaXhlcy4gTGV0JiMzOTtzIHNlZSwgaXQgc3VwcG9ydHMgZGV2bGluayAoYHN5el9kZXZsaW5rYCksIG1hYzgwMjExIChgc3l6XzgwMjExXy4uLmApLCBnZW5lcmljIG5ldGxpbmsgKGBzeXpfZ2VuZXRsaW5rXy4uLmApLCBVU0IgKGBzeXpfdXNiX2Nvbm5lY3RgKSwgUENJIChgc3l6X3BjaV9kZXZpY2VfYWRkYCksIEJsdWV0b290aCAoYHN5el92aGNpXy4uLmApLCBhbmQgZXh0NCAoYHN5el9leHQ0Xy4uLmApLiBCdXQgbm90aGluZyBmb3IgYSBnZW5lcmljIHBsYXRmb3JtIGRldmljZSBpbmplY3Rvci4gRXZlbiBpZiB0aGVyZSAqd2VyZSogc3VjaCBhIHRoaW5nLCBpdCB3b3VsZCBuZWVkIHRvIGtub3cgdGhlICpleGFjdCogY29tcGF0aWJsZSBzdHJpbmcsIG1lbW9yeSByZXNvdXJjZXMsIGludGVycnVwdCByZXNvdXJjZXMsIGFuZCBhbGwgdGhhdCDigJMgd2hpY2ggaXMgaGlnaGx5IGRlcGVuZGVudCBvbiB0aGUgc3lzdGVtLW9uLWEtY2hpcCAoU29DKSBhbmQgdHlwaWNhbGx5IG5lZWRzIGEgZGV2aWNlIHRyZWUgb3ZlcmxheS4gVGhhdCBsZXZlbCBvZiBzcGVjaWZpY2l0eSBpcyBqdXN0IG5vdCBzb21ldGhpbmcgd2UgY2FuIHJlYWxpc3RpY2FsbHkgcmVwbGljYXRlIGluIGEgZnV6emVkIGVudmlyb25tZW50LgoKVGhlcmVmb3JlLCBzaW5jZSB0aGlzIHNwZWNpZmljIHBhdGNoIHRvdWNoZXMgYSBwbGF0Zm9ybS1zcGVjaWZpYyBBSEIgV2ktRmkgZHJpdmVyLCBhbmQgdGhhdCBkcml2ZXImIzM5O3MgY29kZSBpcyB1bnJlYWNoYWJsZSBpbiBvdXIgY3VycmVudCB2aXJ0dWFsaXplZCBmdXp6aW5nIHNldHVwcyBsaWtlIEdDRSBvciBRRU1VLCBJJiMzOTttIGdvaW5nIHRvIG1hcmsgdGhpcyBhcyBub3Qgd29ydGggZnV6emluZy4gSSYjMzk7bGwgcmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSwgd2l0aCB0aGUgZG9jdW1lbnRlZCByZWFzb25pbmcgdGhhdCB0aGlzIGNvZGUgcGF0aCBpcyBzaW1wbHkgaW5hY2Nlc3NpYmxlIHVuZGVyIG91ciBleGlzdGluZyBmdXp6aW5nIGVudmlyb25tZW50LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNCAwNToxNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFtdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGVycm9yIGhhbmRsaW5nIGluIHRoZSBwcm9iZSBwYXRoIG9mIHRoZSBhdGgxMWsgQUhCIHBsYXRmb3JtIGRyaXZlciAoYXRoMTFrX2FoYikuIFRoaXMgZHJpdmVyIHJlcXVpcmVzIHNwZWNpZmljIFF1YWxjb21tIFNvQyBoYXJkd2FyZSAoZS5nLiwgSVBRODA3NCwgSVBRNjAxOCkgYW5kIGJpbmRzIHZpYSBkZXZpY2UgdHJlZSBjb21wYXRpYmxlIHN0cmluZ3MuIFNpbmNlIHN5emthbGxlciBvcGVyYXRlcyBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgKFFFTVUvR0NFKSB3aXRob3V0IHRoZXNlIHNwZWNpZmljIGhhcmR3YXJlIG5vZGVzIGluIHRoZSBkZXZpY2UgdHJlZSwgYW5kIHRoZXJlIGlzIG5vIG1lY2hhbmlzbSB0byBpbmplY3QgYXJiaXRyYXJ5IHBsYXRmb3JtIGRldmljZXMgd2l0aCBzcGVjaWZpYyBtZW1vcnkvSVJRIHJlc291cmNlcywgdGhpcyBjb2RlIHBhdGggaXMgdW5yZWFjaGFibGUgYW5kIGNhbm5vdCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBlcnJvciBoYW5kbGluZyBpbiB0aGUgcHJvYmUgcGF0aCBvZiB0aGUgYXRoMTFrIEFIQiBwbGF0Zm9ybSBkcml2ZXIgKGF0aDExa19haGIpLiBUaGlzIGRyaXZlciByZXF1aXJlcyBzcGVjaWZpYyBRdWFsY29tbSBTb0MgaGFyZHdhcmUgKGUuZy4sIElQUTgwNzQsIElQUTYwMTgpIGFuZCBiaW5kcyB2aWEgZGV2aWNlIHRyZWUgY29tcGF0aWJsZSBzdHJpbmdzLiBTaW5jZSBzeXprYWxsZXIgb3BlcmF0ZXMgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIChRRU1VL0dDRSkgd2l0aG91dCB0aGVzZSBzcGVjaWZpYyBoYXJkd2FyZSBub2RlcyBpbiB0aGUgZGV2aWNlIHRyZWUsIGFuZCB0aGVyZSBpcyBubyBtZWNoYW5pc20gdG8gaW5qZWN0IGFyYml0cmFyeSBwbGF0Zm9ybSBkZXZpY2VzIHdpdGggc3BlY2lmaWMgbWVtb3J5L0lSUSByZXNvdXJjZXMsIHRoaXMgY29kZSBwYXRoIGlzIHVucmVhY2hhYmxlIGFuZCBjYW5ub3QgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI0VDA1OjE0OjA1LjIyOTQ0NjQ2NloiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgzNjUyNzU1NzAxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBlcnJvciBoYW5kbGluZyBpbiB0aGUgcHJvYmUgcGF0aCBvZiB0aGUgYXRoMTFrIEFIQiBwbGF0Zm9ybSBkcml2ZXIgKGF0aDExa19haGIpLiBUaGlzIGRyaXZlciByZXF1aXJlcyBzcGVjaWZpYyBRdWFsY29tbSBTb0MgaGFyZHdhcmUgKGUuZy4sIElQUTgwNzQsIElQUTYwMTgpIGFuZCBiaW5kcyB2aWEgZGV2aWNlIHRyZWUgY29tcGF0aWJsZSBzdHJpbmdzLiBTaW5jZSBzeXprYWxsZXIgb3BlcmF0ZXMgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIChRRU1VL0dDRSkgd2l0aG91dCB0aGVzZSBzcGVjaWZpYyBoYXJkd2FyZSBub2RlcyBpbiB0aGUgZGV2aWNlIHRyZWUsIGFuZCB0aGVyZSBpcyBubyBtZWNoYW5pc20gdG8gaW5qZWN0IGFyYml0cmFyeSBwbGF0Zm9ybSBkZXZpY2VzIHdpdGggc3BlY2lmaWMgbWVtb3J5L0lSUSByZXNvdXJjZXMsIHRoaXMgY29kZSBwYXRoIGlzIHVucmVhY2hhYmxlIGFuZCBjYW5ub3QgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjRUMDU6MTQ6MDUuMjI5NDUxODc1WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNDAwNzc3NDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCAxZTgyNWM2M2QwYzEzNjJmMzYyNWIwZTMwNTBlNDBkZTAzYWYxZmM0XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBGcmkgSnVsIDI0IDA1OjE0OjA0IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvYWhiLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2FoYi5jXFxuaW5kZXggZjU2NmQ2OTlkMDc0YTguLmJkZjUzYWE3ZGRmMWY1IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvYWhiLmNcXG4rKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2FoYi5jXFxuQEAgLTQzMSwzNiArNDMxLDQ0IEBAIHN0YXRpYyB2b2lkIGF0aDExa19haGJfaW5pdF9xbWlfY2VfY29uZmlnKHN0cnVjdCBhdGgxMWtfYmFzZSAqYWIpXFxuIFxcdGFiLVxcdTAwM2VxbWkuc2VydmljZV9pbnNfaWQgPSBhYi1cXHUwMDNlaHdfcGFyYW1zLnFtaV9zZXJ2aWNlX2luc19pZDtcXG4gfVxcbiBcXG4tc3RhdGljIHZvaWQgYXRoMTFrX2FoYl9mcmVlX2V4dF9pcnEoc3RydWN0IGF0aDExa19iYXNlICphYilcXG4rc3RhdGljIHZvaWQgYXRoMTFrX2FoYl9mcmVlX2V4dF9pcnFfZ3JwKHN0cnVjdCBhdGgxMWtfYmFzZSAqYWIsXFxuK1xcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCBhdGgxMWtfZXh0X2lycV9ncnAgKmlycV9ncnApXFxuIHtcXG4tXFx0aW50IGksIGo7XFxuLVxcbi1cXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgQVRIMTFLX0VYVF9JUlFfR1JQX05VTV9NQVg7IGkrKykge1xcbi1cXHRcXHRzdHJ1Y3QgYXRoMTFrX2V4dF9pcnFfZ3JwICppcnFfZ3JwID0gXFx1MDAyNmFiLVxcdTAwM2VleHRfaXJxX2dycFtpXTtcXG4rXFx0aW50IGo7XFxuIFxcbi1cXHRcXHRmb3IgKGogPSAwOyBqIFxcdTAwM2MgaXJxX2dycC1cXHUwMDNlbnVtX2lycTsgaisrKVxcbi1cXHRcXHRcXHRmcmVlX2lycShhYi1cXHUwMDNlaXJxX251bVtpcnFfZ3JwLVxcdTAwM2VpcnFzW2pdXSwgaXJxX2dycCk7XFxuK1xcdGZvciAoaiA9IDA7IGogXFx1MDAzYyBpcnFfZ3JwLVxcdTAwM2VudW1faXJxOyBqKyspXFxuK1xcdFxcdGZyZWVfaXJxKGFiLVxcdTAwM2VpcnFfbnVtW2lycV9ncnAtXFx1MDAzZWlycXNbal1dLCBpcnFfZ3JwKTtcXG4gXFxuLVxcdFxcdG5ldGlmX25hcGlfZGVsKFxcdTAwMjZpcnFfZ3JwLVxcdTAwM2VuYXBpKTtcXG4tXFx0XFx0ZnJlZV9uZXRkZXYoaXJxX2dycC1cXHUwMDNlbmFwaV9uZGV2KTtcXG4tXFx0fVxcbitcXHRuZXRpZl9uYXBpX2RlbChcXHUwMDI2aXJxX2dycC1cXHUwMDNlbmFwaSk7XFxuK1xcdGZyZWVfbmV0ZGV2KGlycV9ncnAtXFx1MDAzZW5hcGlfbmRldik7XFxuIH1cXG4gXFxuLXN0YXRpYyB2b2lkIGF0aDExa19haGJfZnJlZV9pcnEoc3RydWN0IGF0aDExa19iYXNlICphYilcXG4rc3RhdGljIHZvaWQgYXRoMTFrX2FoYl9mcmVlX2V4dF9pcnEoc3RydWN0IGF0aDExa19iYXNlICphYilcXG4ge1xcbi1cXHRpbnQgaXJxX2lkeDtcXG4gXFx0aW50IGk7XFxuIFxcbi1cXHRpZiAoYWItXFx1MDAzZWh3X3BhcmFtcy5oeWJyaWRfYnVzX3R5cGUpXFxuLVxcdFxcdHJldHVybiBhdGgxMWtfcGNpY19mcmVlX2lycShhYik7XFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBBVEgxMUtfRVhUX0lSUV9HUlBfTlVNX01BWDsgaSsrKVxcbitcXHRcXHRhdGgxMWtfYWhiX2ZyZWVfZXh0X2lycV9ncnAoYWIsIFxcdTAwMjZhYi1cXHUwMDNlZXh0X2lycV9ncnBbaV0pO1xcbit9XFxuIFxcbi1cXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgYWItXFx1MDAzZWh3X3BhcmFtcy5jZV9jb3VudDsgaSsrKSB7XFxuK3N0YXRpYyB2b2lkIGF0aDExa19haGJfZnJlZV9jZV9pcnFzKHN0cnVjdCBhdGgxMWtfYmFzZSAqYWIsIGludCBtYXhfaWR4KVxcbit7XFxuK1xcdGludCBpcnFfaWR4LCBpO1xcbitcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIG1heF9pZHg7IGkrKykge1xcbiBcXHRcXHRpZiAoYXRoMTFrX2NlX2dldF9hdHRyX2ZsYWdzKGFiLCBpKSBcXHUwMDI2IENFX0FUVFJfRElTX0lOVFIpXFxuIFxcdFxcdFxcdGNvbnRpbnVlO1xcbiBcXHRcXHRpcnFfaWR4ID0gQVRIMTFLX0lSUV9DRTBfT0ZGU0VUICsgaTtcXG4gXFx0XFx0ZnJlZV9pcnEoYWItXFx1MDAzZWlycV9udW1baXJxX2lkeF0sIFxcdTAwMjZhYi1cXHUwMDNlY2UuY2VfcGlwZVtpXSk7XFxuIFxcdH1cXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgYXRoMTFrX2FoYl9mcmVlX2lycShzdHJ1Y3QgYXRoMTFrX2Jhc2UgKmFiKVxcbit7XFxuK1xcdGlmIChhYi1cXHUwMDNlaHdfcGFyYW1zLmh5YnJpZF9idXNfdHlwZSlcXG4rXFx0XFx0cmV0dXJuIGF0aDExa19wY2ljX2ZyZWVfaXJxKGFiKTtcXG4gXFxuK1xcdGF0aDExa19haGJfZnJlZV9jZV9pcnFzKGFiLCBhYi1cXHUwMDNlaHdfcGFyYW1zLmNlX2NvdW50KTtcXG4gXFx0YXRoMTFrX2FoYl9mcmVlX2V4dF9pcnEoYWIpO1xcbiB9XFxuIFxcbkBAIC01MjQsMjAgKzUzMiwyNSBAQCBzdGF0aWMgaXJxcmV0dXJuX3QgYXRoMTFrX2FoYl9leHRfaW50ZXJydXB0X2hhbmRsZXIoaW50IGlycSwgdm9pZCAqYXJnKVxcbiBzdGF0aWMgaW50IGF0aDExa19haGJfY29uZmlnX2V4dF9pcnEoc3RydWN0IGF0aDExa19iYXNlICphYilcXG4ge1xcbiBcXHRzdHJ1Y3QgYXRoMTFrX2h3X3BhcmFtcyAqaHcgPSBcXHUwMDI2YWItXFx1MDAzZWh3X3BhcmFtcztcXG4rXFx0c3RydWN0IGF0aDExa19leHRfaXJxX2dycCAqaXJxX2dycDtcXG4gXFx0aW50IGksIGo7XFxuIFxcdGludCBpcnE7XFxuIFxcdGludCByZXQ7XFxuIFxcbiBcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgQVRIMTFLX0VYVF9JUlFfR1JQX05VTV9NQVg7IGkrKykge1xcbi1cXHRcXHRzdHJ1Y3QgYXRoMTFrX2V4dF9pcnFfZ3JwICppcnFfZ3JwID0gXFx1MDAyNmFiLVxcdTAwM2VleHRfaXJxX2dycFtpXTtcXG4gXFx0XFx0dTMyIG51bV9pcnEgPSAwO1xcbiBcXG4rXFx0XFx0aXJxX2dycCA9IFxcdTAwMjZhYi1cXHUwMDNlZXh0X2lycV9ncnBbaV07XFxuK1xcbiBcXHRcXHRpcnFfZ3JwLVxcdTAwM2VhYiA9IGFiO1xcbiBcXHRcXHRpcnFfZ3JwLVxcdTAwM2VncnBfaWQgPSBpO1xcbiBcXG4gXFx0XFx0aXJxX2dycC1cXHUwMDNlbmFwaV9uZGV2ID0gYWxsb2NfbmV0ZGV2X2R1bW15KDApO1xcbi1cXHRcXHRpZiAoIWlycV9ncnAtXFx1MDAzZW5hcGlfbmRldilcXG4tXFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuK1xcdFxcdGlmICghaXJxX2dycC1cXHUwMDNlbmFwaV9uZGV2KSB7XFxuK1xcdFxcdFxcdHJldCA9IC1FTk9NRU07XFxuK1xcdFxcdFxcdGlycV9ncnAtXFx1MDAzZW51bV9pcnEgPSAwO1xcbitcXHRcXHRcXHRnb3RvIGVycl9yZXF1ZXN0X2lycTtcXG4rXFx0XFx0fVxcbiBcXG4gXFx0XFx0bmV0aWZfbmFwaV9hZGQoaXJxX2dycC1cXHUwMDNlbmFwaV9uZGV2LCBcXHUwMDI2aXJxX2dycC1cXHUwMDNlbmFwaSxcXG4gXFx0XFx0XFx0ICAgICAgIGF0aDExa19haGJfZXh0X2dycF9uYXBpX3BvbGwpO1xcbkBAIC01ODUsOSArNTk4LDcgQEAgc3RhdGljIGludCBhdGgxMWtfYWhiX2NvbmZpZ19leHRfaXJxKHN0cnVjdCBhdGgxMWtfYmFzZSAqYWIpXFxuIFxcdFxcdFxcdFxcdH1cXG4gXFx0XFx0XFx0fVxcbiBcXHRcXHR9XFxuLVxcdFxcdGlycV9ncnAtXFx1MDAzZW51bV9pcnEgPSBudW1faXJxO1xcbi1cXG4tXFx0XFx0Zm9yIChqID0gMDsgaiBcXHUwMDNjIGlycV9ncnAtXFx1MDAzZW51bV9pcnE7IGorKykge1xcbitcXHRcXHRmb3IgKGogPSAwOyBqIFxcdTAwM2MgbnVtX2lycTsgaisrKSB7XFxuIFxcdFxcdFxcdGludCBpcnFfaWR4ID0gaXJxX2dycC1cXHUwMDNlaXJxc1tqXTtcXG4gXFxuIFxcdFxcdFxcdGlycSA9IHBsYXRmb3JtX2dldF9pcnFfYnluYW1lKGFiLVxcdTAwM2VwZGV2LFxcbkBAIC02MDAsMTEgKzYxMSwyMyBAQCBzdGF0aWMgaW50IGF0aDExa19haGJfY29uZmlnX2V4dF9pcnEoc3RydWN0IGF0aDExa19iYXNlICphYilcXG4gXFx0XFx0XFx0aWYgKHJldCkge1xcbiBcXHRcXHRcXHRcXHRhdGgxMWtfZXJyKGFiLCBcXFwiZmFpbGVkIHJlcXVlc3RfaXJxIGZvciAlZFxcXFxuXFxcIixcXG4gXFx0XFx0XFx0XFx0XFx0ICAgaXJxKTtcXG4rXFx0XFx0XFx0XFx0aXJxX2dycC1cXHUwMDNlbnVtX2lycSA9IGo7XFxuK1xcdFxcdFxcdFxcdGF0aDExa19haGJfZnJlZV9leHRfaXJxX2dycChhYiwgaXJxX2dycCk7XFxuK1xcdFxcdFxcdFxcdGdvdG8gZXJyX3JlcXVlc3RfaXJxO1xcbiBcXHRcXHRcXHR9XFxuIFxcdFxcdH1cXG4rXFxuK1xcdFxcdGlycV9ncnAtXFx1MDAzZW51bV9pcnEgPSBudW1faXJxO1xcbiBcXHR9XFxuIFxcbiBcXHRyZXR1cm4gMDtcXG4rXFxuK2Vycl9yZXF1ZXN0X2lycTpcXG4rXFx0Zm9yIChpLS07IGkgXFx1MDAzZT0gMDsgaS0tKSB7XFxuK1xcdFxcdGlycV9ncnAgPSBcXHUwMDI2YWItXFx1MDAzZWV4dF9pcnFfZ3JwW2ldO1xcbitcXHRcXHRhdGgxMWtfYWhiX2ZyZWVfZXh0X2lycV9ncnAoYWIsIGlycV9ncnApO1xcbitcXHR9XFxuK1xcdHJldHVybiByZXQ7XFxuIH1cXG4gXFxuIHN0YXRpYyBpbnQgYXRoMTFrX2FoYl9jb25maWdfaXJxKHN0cnVjdCBhdGgxMWtfYmFzZSAqYWIpXFxuQEAgLTYyOSwxNiArNjUyLDI0IEBAIHN0YXRpYyBpbnQgYXRoMTFrX2FoYl9jb25maWdfaXJxKHN0cnVjdCBhdGgxMWtfYmFzZSAqYWIpXFxuIFxcdFxcdHJldCA9IHJlcXVlc3RfaXJxKGlycSwgYXRoMTFrX2FoYl9jZV9pbnRlcnJ1cHRfaGFuZGxlcixcXG4gXFx0XFx0XFx0XFx0ICBJUlFGX1RSSUdHRVJfUklTSU5HLCBpcnFfbmFtZVtpcnFfaWR4XSxcXG4gXFx0XFx0XFx0XFx0ICBjZV9waXBlKTtcXG4tXFx0XFx0aWYgKHJldClcXG4rXFx0XFx0aWYgKHJldCkge1xcbitcXHRcXHRcXHRhdGgxMWtfZXJyKGFiLCBcXFwiZmFpbGVkIHJlcXVlc3RfaXJxIGZvciAlZFxcXFxuXFxcIiwgaXJxKTtcXG4rXFx0XFx0XFx0YXRoMTFrX2FoYl9mcmVlX2NlX2lycXMoYWIsIGkpO1xcbiBcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbitcXHRcXHR9XFxuIFxcbiBcXHRcXHRhYi1cXHUwMDNlaXJxX251bVtpcnFfaWR4XSA9IGlycTtcXG4gXFx0fVxcbiBcXG4gXFx0LyogQ29uZmlndXJlIGV4dGVybmFsIGludGVycnVwdHMgKi9cXG4gXFx0cmV0ID0gYXRoMTFrX2FoYl9jb25maWdfZXh0X2lycShhYik7XFxuK1xcdGlmIChyZXQpIHtcXG4rXFx0XFx0YXRoMTFrX2VycihhYiwgXFxcImZhaWxlZCB0byBjb25maWd1cmUgZXh0IGlycTogJWRcXFxcblxcXCIsIHJldCk7XFxuK1xcdFxcdGF0aDExa19haGJfZnJlZV9jZV9pcnFzKGFiLCBhYi1cXHUwMDNlaHdfcGFyYW1zLmNlX2NvdW50KTtcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0fVxcbiBcXG4tXFx0cmV0dXJuIHJldDtcXG4rXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuIHN0YXRpYyBpbnQgYXRoMTFrX2FoYl9tYXBfc2VydmljZV90b19waXBlKHN0cnVjdCBhdGgxMWtfYmFzZSAqYWIsIHUxNiBzZXJ2aWNlX2lkLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNFQwNToxNDowNS41NzA1MDAyMzVaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo4MzMxMTY5NjUwMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgZXJyb3IgaGFuZGxpbmcgaW4gdGhlIHByb2JlIHBhdGggb2YgdGhlIGF0aDExayBBSEIgcGxhdGZvcm0gZHJpdmVyIChhdGgxMWtfYWhiKS4gVGhpcyBkcml2ZXIgcmVxdWlyZXMgc3BlY2lmaWMgUXVhbGNvbW0gU29DIGhhcmR3YXJlIChlLmcuLCBJUFE4MDc0LCBJUFE2MDE4KSBhbmQgYmluZHMgdmlhIGRldmljZSB0cmVlIGNvbXBhdGlibGUgc3RyaW5ncy4gU2luY2Ugc3l6a2FsbGVyIG9wZXJhdGVzIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyAoUUVNVS9HQ0UpIHdpdGhvdXQgdGhlc2Ugc3BlY2lmaWMgaGFyZHdhcmUgbm9kZXMgaW4gdGhlIGRldmljZSB0cmVlLCBhbmQgdGhlcmUgaXMgbm8gbWVjaGFuaXNtIHRvIGluamVjdCBhcmJpdHJhcnkgcGxhdGZvcm0gZGV2aWNlcyB3aXRoIHNwZWNpZmljIG1lbW9yeS9JUlEgcmVzb3VyY2VzLCB0aGlzIGNvZGUgcGF0aCBpcyB1bnJlYWNoYWJsZSBhbmQgY2Fubm90IGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXRcbiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSxcbiAgIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgMWU4MjVjNjNkMGMxMzYyZjM2MjViMGUzMDUwZTQwZGUwM2FmMWZjNFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgSnVsIDI0IDA1OjE0OjA0IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9haGIuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvYWhiLmNcbmluZGV4IGY1NjZkNjk5ZDA3NGE4Li5iZGY1M2FhN2RkZjFmNSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvYWhiLmNcbisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvYWhiLmNcbkBAIC00MzEsMzYgKzQzMSw0NCBAQCBzdGF0aWMgdm9pZCBhdGgxMWtfYWhiX2luaXRfcW1pX2NlX2NvbmZpZyhzdHJ1Y3QgYXRoMTFrX2Jhc2UgKmFiKVxuIFx0YWItXHUwMDNlcW1pLnNlcnZpY2VfaW5zX2lkID0gYWItXHUwMDNlaHdfcGFyYW1zLnFtaV9zZXJ2aWNlX2luc19pZDtcbiB9XG4gXG4tc3RhdGljIHZvaWQgYXRoMTFrX2FoYl9mcmVlX2V4dF9pcnEoc3RydWN0IGF0aDExa19iYXNlICphYilcbitzdGF0aWMgdm9pZCBhdGgxMWtfYWhiX2ZyZWVfZXh0X2lycV9ncnAoc3RydWN0IGF0aDExa19iYXNlICphYixcbitcdFx0XHRcdCAgICAgIHN0cnVjdCBhdGgxMWtfZXh0X2lycV9ncnAgKmlycV9ncnApXG4ge1xuLVx0aW50IGksIGo7XG4tXG4tXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBBVEgxMUtfRVhUX0lSUV9HUlBfTlVNX01BWDsgaSsrKSB7XG4tXHRcdHN0cnVjdCBhdGgxMWtfZXh0X2lycV9ncnAgKmlycV9ncnAgPSBcdTAwMjZhYi1cdTAwM2VleHRfaXJxX2dycFtpXTtcbitcdGludCBqO1xuIFxuLVx0XHRmb3IgKGogPSAwOyBqIFx1MDAzYyBpcnFfZ3JwLVx1MDAzZW51bV9pcnE7IGorKylcbi1cdFx0XHRmcmVlX2lycShhYi1cdTAwM2VpcnFfbnVtW2lycV9ncnAtXHUwMDNlaXJxc1tqXV0sIGlycV9ncnApO1xuK1x0Zm9yIChqID0gMDsgaiBcdTAwM2MgaXJxX2dycC1cdTAwM2VudW1faXJxOyBqKyspXG4rXHRcdGZyZWVfaXJxKGFiLVx1MDAzZWlycV9udW1baXJxX2dycC1cdTAwM2VpcnFzW2pdXSwgaXJxX2dycCk7XG4gXG4tXHRcdG5ldGlmX25hcGlfZGVsKFx1MDAyNmlycV9ncnAtXHUwMDNlbmFwaSk7XG4tXHRcdGZyZWVfbmV0ZGV2KGlycV9ncnAtXHUwMDNlbmFwaV9uZGV2KTtcbi1cdH1cbitcdG5ldGlmX25hcGlfZGVsKFx1MDAyNmlycV9ncnAtXHUwMDNlbmFwaSk7XG4rXHRmcmVlX25ldGRldihpcnFfZ3JwLVx1MDAzZW5hcGlfbmRldik7XG4gfVxuIFxuLXN0YXRpYyB2b2lkIGF0aDExa19haGJfZnJlZV9pcnEoc3RydWN0IGF0aDExa19iYXNlICphYilcbitzdGF0aWMgdm9pZCBhdGgxMWtfYWhiX2ZyZWVfZXh0X2lycShzdHJ1Y3QgYXRoMTFrX2Jhc2UgKmFiKVxuIHtcbi1cdGludCBpcnFfaWR4O1xuIFx0aW50IGk7XG4gXG4tXHRpZiAoYWItXHUwMDNlaHdfcGFyYW1zLmh5YnJpZF9idXNfdHlwZSlcbi1cdFx0cmV0dXJuIGF0aDExa19wY2ljX2ZyZWVfaXJxKGFiKTtcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIEFUSDExS19FWFRfSVJRX0dSUF9OVU1fTUFYOyBpKyspXG4rXHRcdGF0aDExa19haGJfZnJlZV9leHRfaXJxX2dycChhYiwgXHUwMDI2YWItXHUwMDNlZXh0X2lycV9ncnBbaV0pO1xuK31cbiBcbi1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIGFiLVx1MDAzZWh3X3BhcmFtcy5jZV9jb3VudDsgaSsrKSB7XG4rc3RhdGljIHZvaWQgYXRoMTFrX2FoYl9mcmVlX2NlX2lycXMoc3RydWN0IGF0aDExa19iYXNlICphYiwgaW50IG1heF9pZHgpXG4re1xuK1x0aW50IGlycV9pZHgsIGk7XG4rXG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBtYXhfaWR4OyBpKyspIHtcbiBcdFx0aWYgKGF0aDExa19jZV9nZXRfYXR0cl9mbGFncyhhYiwgaSkgXHUwMDI2IENFX0FUVFJfRElTX0lOVFIpXG4gXHRcdFx0Y29udGludWU7XG4gXHRcdGlycV9pZHggPSBBVEgxMUtfSVJRX0NFMF9PRkZTRVQgKyBpO1xuIFx0XHRmcmVlX2lycShhYi1cdTAwM2VpcnFfbnVtW2lycV9pZHhdLCBcdTAwMjZhYi1cdTAwM2VjZS5jZV9waXBlW2ldKTtcbiBcdH1cbit9XG4rXG4rc3RhdGljIHZvaWQgYXRoMTFrX2FoYl9mcmVlX2lycShzdHJ1Y3QgYXRoMTFrX2Jhc2UgKmFiKVxuK3tcbitcdGlmIChhYi1cdTAwM2Vod19wYXJhbXMuaHlicmlkX2J1c190eXBlKVxuK1x0XHRyZXR1cm4gYXRoMTFrX3BjaWNfZnJlZV9pcnEoYWIpO1xuIFxuK1x0YXRoMTFrX2FoYl9mcmVlX2NlX2lycXMoYWIsIGFiLVx1MDAzZWh3X3BhcmFtcy5jZV9jb3VudCk7XG4gXHRhdGgxMWtfYWhiX2ZyZWVfZXh0X2lycShhYik7XG4gfVxuIFxuQEAgLTUyNCwyMCArNTMyLDI1IEBAIHN0YXRpYyBpcnFyZXR1cm5fdCBhdGgxMWtfYWhiX2V4dF9pbnRlcnJ1cHRfaGFuZGxlcihpbnQgaXJxLCB2b2lkICphcmcpXG4gc3RhdGljIGludCBhdGgxMWtfYWhiX2NvbmZpZ19leHRfaXJxKHN0cnVjdCBhdGgxMWtfYmFzZSAqYWIpXG4ge1xuIFx0c3RydWN0IGF0aDExa19od19wYXJhbXMgKmh3ID0gXHUwMDI2YWItXHUwMDNlaHdfcGFyYW1zO1xuK1x0c3RydWN0IGF0aDExa19leHRfaXJxX2dycCAqaXJxX2dycDtcbiBcdGludCBpLCBqO1xuIFx0aW50IGlycTtcbiBcdGludCByZXQ7XG4gXG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBBVEgxMUtfRVhUX0lSUV9HUlBfTlVNX01BWDsgaSsrKSB7XG4tXHRcdHN0cnVjdCBhdGgxMWtfZXh0X2lycV9ncnAgKmlycV9ncnAgPSBcdTAwMjZhYi1cdTAwM2VleHRfaXJxX2dycFtpXTtcbiBcdFx0dTMyIG51bV9pcnEgPSAwO1xuIFxuK1x0XHRpcnFfZ3JwID0gXHUwMDI2YWItXHUwMDNlZXh0X2lycV9ncnBbaV07XG4rXG4gXHRcdGlycV9ncnAtXHUwMDNlYWIgPSBhYjtcbiBcdFx0aXJxX2dycC1cdTAwM2VncnBfaWQgPSBpO1xuIFxuIFx0XHRpcnFfZ3JwLVx1MDAzZW5hcGlfbmRldiA9IGFsbG9jX25ldGRldl9kdW1teSgwKTtcbi1cdFx0aWYgKCFpcnFfZ3JwLVx1MDAzZW5hcGlfbmRldilcbi1cdFx0XHRyZXR1cm4gLUVOT01FTTtcbitcdFx0aWYgKCFpcnFfZ3JwLVx1MDAzZW5hcGlfbmRldikge1xuK1x0XHRcdHJldCA9IC1FTk9NRU07XG4rXHRcdFx0aXJxX2dycC1cdTAwM2VudW1faXJxID0gMDtcbitcdFx0XHRnb3RvIGVycl9yZXF1ZXN0X2lycTtcbitcdFx0fVxuIFxuIFx0XHRuZXRpZl9uYXBpX2FkZChpcnFfZ3JwLVx1MDAzZW5hcGlfbmRldiwgXHUwMDI2aXJxX2dycC1cdTAwM2VuYXBpLFxuIFx0XHRcdCAgICAgICBhdGgxMWtfYWhiX2V4dF9ncnBfbmFwaV9wb2xsKTtcbkBAIC01ODUsOSArNTk4LDcgQEAgc3RhdGljIGludCBhdGgxMWtfYWhiX2NvbmZpZ19leHRfaXJxKHN0cnVjdCBhdGgxMWtfYmFzZSAqYWIpXG4gXHRcdFx0XHR9XG4gXHRcdFx0fVxuIFx0XHR9XG4tXHRcdGlycV9ncnAtXHUwMDNlbnVtX2lycSA9IG51bV9pcnE7XG4tXG4tXHRcdGZvciAoaiA9IDA7IGogXHUwMDNjIGlycV9ncnAtXHUwMDNlbnVtX2lycTsgaisrKSB7XG4rXHRcdGZvciAoaiA9IDA7IGogXHUwMDNjIG51bV9pcnE7IGorKykge1xuIFx0XHRcdGludCBpcnFfaWR4ID0gaXJxX2dycC1cdTAwM2VpcnFzW2pdO1xuIFxuIFx0XHRcdGlycSA9IHBsYXRmb3JtX2dldF9pcnFfYnluYW1lKGFiLVx1MDAzZXBkZXYsXG5AQCAtNjAwLDExICs2MTEsMjMgQEAgc3RhdGljIGludCBhdGgxMWtfYWhiX2NvbmZpZ19leHRfaXJxKHN0cnVjdCBhdGgxMWtfYmFzZSAqYWIpXG4gXHRcdFx0aWYgKHJldCkge1xuIFx0XHRcdFx0YXRoMTFrX2VycihhYiwgXCJmYWlsZWQgcmVxdWVzdF9pcnEgZm9yICVkXFxuXCIsXG4gXHRcdFx0XHRcdCAgIGlycSk7XG4rXHRcdFx0XHRpcnFfZ3JwLVx1MDAzZW51bV9pcnEgPSBqO1xuK1x0XHRcdFx0YXRoMTFrX2FoYl9mcmVlX2V4dF9pcnFfZ3JwKGFiLCBpcnFfZ3JwKTtcbitcdFx0XHRcdGdvdG8gZXJyX3JlcXVlc3RfaXJxO1xuIFx0XHRcdH1cbiBcdFx0fVxuK1xuK1x0XHRpcnFfZ3JwLVx1MDAzZW51bV9pcnEgPSBudW1faXJxO1xuIFx0fVxuIFxuIFx0cmV0dXJuIDA7XG4rXG4rZXJyX3JlcXVlc3RfaXJxOlxuK1x0Zm9yIChpLS07IGkgXHUwMDNlPSAwOyBpLS0pIHtcbitcdFx0aXJxX2dycCA9IFx1MDAyNmFiLVx1MDAzZWV4dF9pcnFfZ3JwW2ldO1xuK1x0XHRhdGgxMWtfYWhiX2ZyZWVfZXh0X2lycV9ncnAoYWIsIGlycV9ncnApO1xuK1x0fVxuK1x0cmV0dXJuIHJldDtcbiB9XG4gXG4gc3RhdGljIGludCBhdGgxMWtfYWhiX2NvbmZpZ19pcnEoc3RydWN0IGF0aDExa19iYXNlICphYilcbkBAIC02MjksMTYgKzY1MiwyNCBAQCBzdGF0aWMgaW50IGF0aDExa19haGJfY29uZmlnX2lycShzdHJ1Y3QgYXRoMTFrX2Jhc2UgKmFiKVxuIFx0XHRyZXQgPSByZXF1ZXN0X2lycShpcnEsIGF0aDExa19haGJfY2VfaW50ZXJydXB0X2hhbmRsZXIsXG4gXHRcdFx0XHQgIElSUUZfVFJJR0dFUl9SSVNJTkcsIGlycV9uYW1lW2lycV9pZHhdLFxuIFx0XHRcdFx0ICBjZV9waXBlKTtcbi1cdFx0aWYgKHJldClcbitcdFx0aWYgKHJldCkge1xuK1x0XHRcdGF0aDExa19lcnIoYWIsIFwiZmFpbGVkIHJlcXVlc3RfaXJxIGZvciAlZFxcblwiLCBpcnEpO1xuK1x0XHRcdGF0aDExa19haGJfZnJlZV9jZV9pcnFzKGFiLCBpKTtcbiBcdFx0XHRyZXR1cm4gcmV0O1xuK1x0XHR9XG4gXG4gXHRcdGFiLVx1MDAzZWlycV9udW1baXJxX2lkeF0gPSBpcnE7XG4gXHR9XG4gXG4gXHQvKiBDb25maWd1cmUgZXh0ZXJuYWwgaW50ZXJydXB0cyAqL1xuIFx0cmV0ID0gYXRoMTFrX2FoYl9jb25maWdfZXh0X2lycShhYik7XG4rXHRpZiAocmV0KSB7XG4rXHRcdGF0aDExa19lcnIoYWIsIFwiZmFpbGVkIHRvIGNvbmZpZ3VyZSBleHQgaXJxOiAlZFxcblwiLCByZXQpO1xuK1x0XHRhdGgxMWtfYWhiX2ZyZWVfY2VfaXJxcyhhYiwgYWItXHUwMDNlaHdfcGFyYW1zLmNlX2NvdW50KTtcbitcdFx0cmV0dXJuIHJldDtcbitcdH1cbiBcbi1cdHJldHVybiByZXQ7XG4rXHRyZXR1cm4gMDtcbiB9XG4gXG4gc3RhdGljIGludCBhdGgxMWtfYWhiX21hcF9zZXJ2aWNlX3RvX3BpcGUoc3RydWN0IGF0aDExa19iYXNlICphYiwgdTE2IHNlcnZpY2VfaWQsXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNFQwNToxNDowNS41NzA1MjY1NjVaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2MTM4NDQ1OTI3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUmVhY2hhYmlsaXR5IG9mIGFuIElSUSBDb25maWd1cmF0aW9uIEZpeCoqXG5cbk9rYXksIHNvIEkndmUgZ290IHRoaXMgcGF0Y2ggdGhhdCBhZGRyZXNzZXMgc29tZSBlcnJvciBoYW5kbGluZyBpbiB0aGUgYGF0aDExa2AgZHJpdmVyLCBzcGVjaWZpY2FsbHkgY29uY2VybmluZyBJUlEgY29uZmlndXJhdGlvbiBvbiB0aGUgQUhCIGJ1cyAoYGRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvYWhiLmNgKS4gSXQgbG9va3MgbGlrZSB0aGV5J3JlIGNsZWFuaW5nIHVwIHJlcXVlc3RlZCBJUlFzIGFuZCBOQVBJIHN0cnVjdHVyZXMgd2hlbiBgcmVxdWVzdF9pcnFgIG9yIGBhbGxvY19uZXRkZXZfZHVtbXlgIGZhaWxzIGluIHRoZSBgYXRoMTFrX2FoYl9jb25maWdfZXh0X2lycWAgYW5kIGBhdGgxMWtfYWhiX2NvbmZpZ19pcnFgIGZ1bmN0aW9ucy4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIGNhbiBJIGV2ZW4gKnRyaWdnZXIqIHRoaXM/IEkgbmVlZCB0byBmaWd1cmUgb3V0IGlmIHRoaXMgY29kZSBpcyByZWFjaGFibGUgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCDigJMgc3BlY2lmaWNhbGx5LCBRRU1VIG9yIEdvb2dsZSBDb21wdXRlIEVuZ2luZS5cblxuVGhpcyBgYXRoMTFrYCBkcml2ZXIsIGFzIEkgcmVjYWxsLCBpcyBmb3IgUXVhbGNvbW0gV2ktRmkgNiAoODAyLjExYXgpIGRldmljZXMuIFVzdWFsbHksIHRoYXQgbWVhbnMgc3BlY2lhbGl6ZWQgUENJIG9yIEFIQiBoYXJkd2FyZS4gR2l2ZW4gdGhpcyBpcyBzcGVjaWZpY2FsbHkgdGhlIEFIQiBidXMsIGl0J3MgdmVyeSBsaWtlbHkgdGFyZ2V0aW5nIFNvQ3MgbGlrZSBJUFE4MDc0IG9yIElQUTYwMTgsIHdoaWNoIGlzIHdoZXJlIHRoaW5ncyBnZXQgaW50ZXJlc3RpbmcuIENhbiBJIGZ1enogdGhpcz8gU3l6a2FsbGVyJ3MgZ3JlYXQgZm9yIFBDSSBkZXZpY2VzIHVzaW5nIHZQQ0ksIGJ1dCBBSEIgaXMgdXN1YWxseSBhIHBsYXRmb3JtIGRldmljZSB0eXBlLiBTbywgaXMgdGhlcmUgYSB3YXkgdG8gZGVzY3JpYmUgaXQgdG8gU3l6a2FsbGVyP1xuXG5NeSBuZXh0IHN0ZXAgaXMgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgU3l6a2FsbGVyIGRlc2NyaXB0aW9ucyBmb3IgYGF0aDExa2AgcGxhdGZvcm0gZGV2aWNlcywgb3IgaWYgdGhpcyBkcml2ZXIgaXMgcHVyZWx5IGRyaXZlbiBieSB0aGUgZGV2aWNlIHRyZWUuIElmIGl04oCZcyBhIHBsYXRmb3JtIGRyaXZlciwgU3l6a2FsbGVyICptaWdodCogYmUgYWJsZSB0byBjcmVhdGUgdGhlIHBsYXRmb3JtIGRldmljZXMgaWYgdGhlcmUgYXJlIGRlc2NyaXB0aW9ucy4gT3RoZXJ3aXNlLCBpdOKAmXMgcHJvYmFibHkgZ29pbmcgdG8gYmUgdW5yZWFjaGFibGUgdW5sZXNzIEknbSBvbiBhIHNwZWNpZmljIEFSTSBib2FyZCB0aGF0IGhhcyB0aGUgaGFyZHdhcmUgZGVmaW5lZC4gSSBzaG91bGQgcHJvYmFibHkgZ3JlcCBmb3Igc29tZXRoaW5nIGxpa2UgYGF0aDExa19haGJfcHJvYmVgIG9yIGEgc2ltaWxhciBwcm9iZSBmdW5jdGlvbiB0byBjb25maXJtIHRoZSBkcml2ZXIncyBwbGF0Zm9ybSBuYXR1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM5NzYsIk91dHB1dFRva2VucyI6MjMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNFQwNToxNDoxMS43MDg5NzU0MDJaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjE5NTkzMjExNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJhdGgxMWtfYWhiX3Byb2JlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvYWhiLmM9MTEwMz1zdGF0aWMgaW50IGF0aDExa19haGJfZndfcmVzb3VyY2VfZGVpbml0KHN0cnVjdCBhdGgxMWtfYmFzZSAqYWIpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2FoYi5jLTExMzctXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9haGIuYzoxMTM4OnN0YXRpYyBpbnQgYXRoMTFrX2FoYl9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvYWhiLmMtMTEzOS17XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2FoYi5jPTEzMzM9c3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgYXRoMTFrX2FoYl9kcml2ZXIgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2FoYi5jLTEzMzctXFx0fSxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2FoYi5jOjEzMzg6XFx0LnByb2JlID0gYXRoMTFrX2FoYl9wcm9iZSxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2FoYi5jLTEzMzktXFx0LnJlbW92ZSA9IGF0aDExa19haGJfcmVtb3ZlLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNFQwNToxNDoxMy45MDQ5MTQxNjZaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyODYwOTUyNjU1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCdzIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipQbGF0Zm9ybSBEcml2ZXIgQW5hbHlzaXMqKlxuXG5SaWdodCwgdGhpcyBsb29rcyBsaWtlIHdlJ3JlIGRlYWxpbmcgd2l0aCBhIHBsYXRmb3JtIGRyaXZlci4gVGhlIGZpcnN0IHRoaW5nIEkgd2FudCB0byBkbyBpcyBzZWUgaWYgU3l6a2FsbGVyIGhhcyBhbnkgcHJlZGVmaW5lZCBkZXNjcmlwdGlvbnMgZm9yIGl0LiBUaGF0J3MgYWx3YXlzIG15IHN0YXJ0aW5nIHBvaW50LiBTYXZlcyBhIHRvbiBvZiB0aW1lIGlmIHNvbWVvbmUncyBhbHJlYWR5IGRvbmUgdGhlIGhlYXZ5IGxpZnRpbmcgYW5kIGlkZW50aWZpZWQgcmVsZXZhbnQgc3lzY2FsbHMgYW5kIGZ1enppbmcgdGFyZ2V0cy4gTm8gbmVlZCB0byByZWludmVudCB0aGUgd2hlZWwsIGVzcGVjaWFsbHkgd2hlbiBTeXprYWxsZXIncyBjb3ZlcmFnZSBpcyB1c3VhbGx5IHByZXR0eSBnb29kIGZvciBjb21tb24gcGxhdGZvcm0gZHJpdmVycy4gTGV0J3MgZGlnIGluIGFuZCBzZWUgd2hhdCdzIGF2YWlsYWJsZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NTA4MCwiT3V0cHV0VG9rZW5zIjoyNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI0VDA1OjE0OjE2Ljc2NTg2ODQ3MVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MDc0MjgyOCwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYXRoMTFrXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcInN5cy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI0VDA1OjE0OjE2LjgyNjYxOTc5OVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUzNDMzMTc5ODAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTmF2aWdhdGluZyB0aGUgU3l6a2FsbGVyIExhbmRzY2FwZSoqXG5cbk9rYXksIGhlcmUncyB0aGUgc2l0dWF0aW9uLiBJIG5lZWQgdG8gZmlndXJlIG91dCBob3cgdG8gYXBwcm9hY2ggdGhpcywgYnV0IGZpcnN0LCBhIGNyaXRpY2FsIGNvbnN0cmFpbnQganVtcHMgb3V0LiBJIGNhbid0IHVzZSBncmVwcGVyIG9uIGFueXRoaW5nIGluIHRoZSBgc3lzL2AgZGlyZWN0b3J5LiBUaGF0J3MgYSByZWQgZmxhZyDigJMgYSBoYXJkIHN0b3AuIFRoZSBwcm9tcHQgc3BlY2lmaWNhbGx5IGRpcmVjdHMgbWUgYXdheSBmcm9tIGBncmVwcGVyYCBhbmQgdG93YXJkcyBgcmVhZC1maWxlYCBvciBgY29kZXNlYXJjaC1kaXItaW5kZXhgIGluc3RlYWQuIEJ1dCB3YWl04oCmIHRoZSBpbnN0cnVjdGlvbnMgYWxzbyBtZW50aW9uIGEgYHt7LnRvb2xSZWFkRGVzY3JpcHRpb259fWAgdG9vbCwgd2hpY2ggaXMgc3VwcG9zZWQgdG8gaGFuZGxlIHRob3NlIGRlc2NyaXB0aW9ucy4gVGhhdCBzb3VuZHMgaWRlYWwsIGJ1dCB0aGVyZSdzIG5vIHN1Y2ggdG9vbCEgSXQncyBub3QgaW4gdGhlIGxpc3RlZCB0b29scy4gVGhhdCdzIGNvbmZ1c2luZy4gVGhlIGF2YWlsYWJsZSB0b29scyBhcmUgYGdyZXBwZXJgLCBgY29kZXNlYXJjaC1kaXItaW5kZXhgLCBgcmVhZC1maWxlYCwgYW5kIGBzZXQtcmVzdWx0c2AsIHdoaWNoIGRvZXNuJ3Qgc2VlbSB0byBoYXZlIHRoZSByZXF1aXJlZCBmdW5jdGlvbmFsaXR5LlxuXG5BbHJpZ2h0LCBtb3Zpbmcgb24sIHBsYXRmb3JtIGRldmljZXMgYXJlIGFub3RoZXIgY29uc2lkZXJhdGlvbi4gVHlwaWNhbGx5LCB0aGV5IGFyZW4ndCBkaXJlY3RseSBmdXp6ZWQgdW5sZXNzIGEgcHNldWRvLXN5c2NhbGwgb3IgYW4gaW5qZWN0aW9uIG1lY2hhbmlzbSBleGlzdHMuIE5vdywgZG9lcyBzeXprYWxsZXIgaGF2ZSBhIHdheSB0byBpbmplY3QgcGxhdGZvcm0gZGV2aWNlcyB2aWEgYC9zeXMvZGV2aWNlcy9wbGF0Zm9ybWAgb3Igc29tZXRoaW5nIHNpbWlsYXI/IEkgZG9uJ3QgdGhpbmsgc28uIEknbSB1c3VhbGx5IGRlYWxpbmcgd2l0aCB0aGluZ3MgbGlrZSBgc3l6X2RldmxpbmtgIG9yIHNwZWNpYWxpemVkIHBzZXVkby1zeXNjYWxscyB0byBoYW5kbGUgdGhpcy5cblxuU28sIGhlcmUncyBhIHNlcGFyYXRlIHF1ZXN0aW9uIHRoYXQganVzdCBwb3BwZWQgdXAsIGlzIGBhdGgxMWtgIGFjdHVhbGx5IHJlYWNoYWJsZSBpbiBzdGFuZGFyZCB4ODZfNjQgdmlydHVhbCBtYWNoaW5lcz8gVGhhdCdzIGEga2V5IGRldGFpbCB0byBjb25maXJtLiBTaW5jZSBBSEIgaXMgYSBwcmV0dHkgc3RhbmRhcmQgQVJNLXNwZWNpZmljIGJ1cywgdGhpcyBuZWVkcyB2ZXJpZmljYXRpb24uIFRpbWUgdG8gZGl2ZSBpbnRvIHRoZSBgZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9LY29uZmlnYCBmaWxlIHRvIGNoZWNrIG9uIHRoaXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUyNzEsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyODgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjRUMDU6MTQ6MjIuMTY5OTM5NDQ5WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU1OTk5NTA5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBBVEgxMUtcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEJTRC0zLUNsYXVzZS1DbGVhclxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvS2NvbmZpZzoyOmNvbmZpZyBBVEgxMUtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL0tjb25maWctMy1cXHR0cmlzdGF0ZSBcXFwiUXVhbGNvbW0gODAyLjExYXggY2hpcHNldCBzdXBwb3J0XFxcIlxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9LY29uZmlnLTEyLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvS2NvbmZpZzoxMzpjb25maWcgQVRIMTFLX0FIQlxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvS2NvbmZpZy0xNC1cXHR0cmlzdGF0ZSBcXFwiQXRoZXJvcyBhdGgxMWsgQUhCIHN1cHBvcnRcXFwiXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL0tjb25maWctMTktXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9LY29uZmlnOjIwOmNvbmZpZyBBVEgxMUtfUENJXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9LY29uZmlnLTIxLVxcdHRyaXN0YXRlIFxcXCJBdGhlcm9zIGF0aDExayBQQ0kgc3VwcG9ydFxcXCJcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvS2NvbmZpZy0yOS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL0tjb25maWc6MzA6Y29uZmlnIEFUSDExS19ERUJVR1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvS2NvbmZpZy0zMS1cXHRib29sIFxcXCJRQ0EgYXRoMTFrIGRlYnVnZ2luZ1xcXCJcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvS2NvbmZpZy0zNy1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL0tjb25maWc6Mzg6Y29uZmlnIEFUSDExS19ERUJVR0ZTXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9LY29uZmlnLTM5LVxcdGJvb2wgXFxcIlFDQSBhdGgxMWsgZGVidWdmcyBzdXBwb3J0XFxcIlxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9LY29uZmlnLTQ1LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvS2NvbmZpZzo0Njpjb25maWcgQVRIMTFLX1RSQUNJTkdcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL0tjb25maWctNDctXFx0Ym9vbCBcXFwiYXRoMTFrIHRyYWNpbmcgc3VwcG9ydFxcXCJcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvS2NvbmZpZy01MS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL0tjb25maWc6NTI6Y29uZmlnIEFUSDExS19TUEVDVFJBTFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvS2NvbmZpZy01My1cXHRib29sIFxcXCJRQ0EgYXRoMTFrIHNwZWN0cmFsIHNjYW4gc3VwcG9ydFxcXCJcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvS2NvbmZpZy02MC1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL0tjb25maWc6NjE6Y29uZmlnIEFUSDExS19DRlJcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL0tjb25maWctNjItXFx0Ym9vbCBcXFwiYXRoMTFrIGNoYW5uZWwgZnJlcXVlbmN5IHJlc3BvbnNlIHN1cHBvcnRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI0VDA1OjE0OjIyLjIyNTk0MjQwOFoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY5NDQ0MzMyNjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqSW52ZXN0aWdhdGluZyBEZXBlbmRlbmNpZXMgb2YgQVRIMTFLX0FIQioqXG5cbk9rYXksIHNvIEknbSBkaXZpbmcgaW50byB0aGUgYEFUSDExS19BSEJgIG1vZHVsZS4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIFwiV2hhdCdzIHRoaXMgdGhpbmcgYnVpbHQgb24/IFdoYXQgb3RoZXIgY29tcG9uZW50cyBpcyBpdCByZWxpYW50IHVwb24/XCIgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGZvdW5kYXRpb25hbCBkZXBlbmRlbmNpZXMuIEkgd2FudCB0byBidWlsZCBhIG1lbnRhbCBtYXAgb2YgaXRzIHJlbGF0aW9uc2hpcHMgd2l0aGluIHRoZSBicm9hZGVyIGtlcm5lbCBhcmNoaXRlY3R1cmUsIHlvdSBrbm93LCB0aGUgdXN1YWwgZmlyc3Qgc3RlcCB3aGVuIEknbSBhc3Nlc3NpbmcgYSBuZXcgcGllY2Ugb2YgZHJpdmVyIGNvZGUgb3IgdHJvdWJsZXNob290aW5nIGEgcmVsYXRlZCBpc3N1ZS4gTGV0J3Mgc2VlIHdoYXQgdGhhdCBsb29rcyBsaWtlLiBJJ20gZ29pbmcgdG8gc3RhcnQgZGlnZ2luZyBpbnRvIHRoZSBtYWtlZmlsZXMgYW5kIGluY2x1ZGUgc3RhdGVtZW50czsgbm90aGluZyBsaWtlIGEgYml0IG9mIGdyZXAgdG8gZ2V0IHRoZSBsYXkgb2YgdGhlIGxhbmQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY2NDMsIk91dHB1dFRva2VucyI6NDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNFQwNToxNDoyOS4xNzAzNzc0N1oiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2ODU3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogMzBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBCU0QtMy1DbGF1c2UtQ2xlYXJcXG4gICAyOlxcdGNvbmZpZyBBVEgxMUtcXG4gICAzOlxcdFxcdHRyaXN0YXRlIFxcXCJRdWFsY29tbSA4MDIuMTFheCBjaGlwc2V0IHN1cHBvcnRcXFwiXFxuICAgNDpcXHRcXHRkZXBlbmRzIG9uIE1BQzgwMjExIFxcdTAwMjZcXHUwMDI2IEhBU19ETUFcXG4gICA1OlxcdFxcdHNlbGVjdCBBVEhfQ09NTU9OXFxuICAgNjpcXHRcXHRzZWxlY3QgUUNPTV9RTUlfSEVMUEVSU1xcbiAgIDc6XFx0XFx0aGVscFxcbiAgIDg6XFx0XFx0ICBUaGlzIG1vZHVsZSBhZGRzIHN1cHBvcnQgZm9yIFF1YWxjb21tIFRlY2hub2xvZ2llcyA4MDIuMTFheCBmYW1pbHkgb2ZcXG4gICA5OlxcdFxcdCAgY2hpcHNldHMuXFxuICAxMDpcXHRcXG4gIDExOlxcdFxcdCAgSWYgeW91IGNob29zZSB0byBidWlsZCBhIG1vZHVsZSwgaXQnbGwgYmUgY2FsbGVkIGF0aDExay5cXG4gIDEyOlxcdFxcbiAgMTM6XFx0Y29uZmlnIEFUSDExS19BSEJcXG4gIDE0OlxcdFxcdHRyaXN0YXRlIFxcXCJBdGhlcm9zIGF0aDExayBBSEIgc3VwcG9ydFxcXCJcXG4gIDE1OlxcdFxcdGRlcGVuZHMgb24gQVRIMTFLXFxuICAxNjpcXHRcXHRkZXBlbmRzIG9uIFJFTU9URVBST0NcXG4gIDE3OlxcdFxcdGhlbHBcXG4gIDE4OlxcdFxcdCAgVGhpcyBtb2R1bGUgYWRkcyBzdXBwb3J0IGZvciBBSEIgYnVzXFxuICAxOTpcXHRcXG4gIDIwOlxcdGNvbmZpZyBBVEgxMUtfUENJXFxuICAyMTpcXHRcXHR0cmlzdGF0ZSBcXFwiQXRoZXJvcyBhdGgxMWsgUENJIHN1cHBvcnRcXFwiXFxuICAyMjpcXHRcXHRkZXBlbmRzIG9uIEFUSDExSyBcXHUwMDI2XFx1MDAyNiBQQ0lcXG4gIDIzOlxcdFxcdHNlbGVjdCBNSElfQlVTXFxuICAyNDpcXHRcXHRzZWxlY3QgUVJUUlxcbiAgMjU6XFx0XFx0c2VsZWN0IFFSVFJfTUhJXFxuICAyNjpcXHRcXHRzZWxlY3QgUENJX1BXUkNUUkxfUFdSU0VRIGlmIEhBVkVfUFdSQ1RSTFxcbiAgMjc6XFx0XFx0aGVscFxcbiAgMjg6XFx0XFx0ICBUaGlzIG1vZHVsZSBhZGRzIHN1cHBvcnQgZm9yIFBDSUUgYnVzXFxuICAyOTpcXHRcXG4gIDMwOlxcdGNvbmZpZyBBVEgxMUtfREVCVUdcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjRUMDU6MTQ6MjkuMTcwNDQ3NjJaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzA4ODAxNzgyOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEFUSDExS19BSEIgRHJpdmVyKipcblxuT2theSwgc28gYEFUSDExS19BSEJgIGlzIHBhcnQgb2YgdGhlIGBBVEgxMUtgIGZhbWlseSwgYW5kIGl0IHNlZW1zIHRvIHJlbHkgb24gYFJFTU9URVBST0NgIGFzIHdlbGwuIFRoYXQncyBnb29kIHRvIGtub3csIHNldHMgYSBmb3VuZGF0aW9uIGZvciBob3cgaXQgb3BlcmF0ZXMuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBmaWd1cmUgb3V0IHdoZXRoZXIgdGhpcyBwYXJ0aWN1bGFyIEFIQiBpbXBsZW1lbnRhdGlvbiBoYXMgYW55IGFyY2hpdGVjdHVyYWwgY29uc3RyYWludHMuIEkgbmVlZCB0byBkZXRlcm1pbmUgaWYgaXQgaXMgdGllZCB0byBBUk0gc3BlY2lmaWNhbGx5LCBvciBhbnkgb3RoZXIgQ1BVIGFyY2hpdGVjdHVyZSwgZm9yIHRoYXQgbWF0dGVyLiBOb3csIHdhaXQgYSBtaW51dGUsIEFIQuKApiB0aGF0IHNjcmVhbXMgXCJkZXZpY2UgdHJlZVwiIHRvIG1lISBBSEIgZGV2aWNlcyBhcmUgdHlwaWNhbGx5IGRpc2NvdmVyZWQgdGhyb3VnaCB0aGUgZGV2aWNlIHRyZWUsIHNvIHRoYXQncyBwcm9iYWJseSB0aGUgY3J1Y2lhbCBlbnRyeSBwb2ludCBoZXJlLiBJIHNob3VsZCBnbyBzdHJhaWdodCB0byBgYXRoMTFrX2FoYl9wcm9iZWAgYW5kIHNlZSB3aGF0IGl0J3MgZG9pbmcuIFRoYXQnbGwgYmUgbXkgc3RhcnRpbmcgcG9pbnQgZm9yIHVuZGVyc3RhbmRpbmcgaXRzIGluaXRpYWxpemF0aW9uIGFuZCBzZXR1cC5cblxuXG4iLCJJbnB1dFRva2VucyI6NzI2NSwiT3V0cHV0VG9rZW5zIjo0NiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjcxLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjRUMDU6MTQ6MzIuMjU4NDY3MTE4WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExNDY4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2FoYi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDExMzAsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjExMzA6XFx0XFx0aW9tbXVfZGV0YWNoX2RldmljZShpb21tdSwgYWJfYWhiLVxcdTAwM2Vmdy5kZXYpO1xcbjExMzE6XFx0XFx0aW9tbXVfZG9tYWluX2ZyZWUoaW9tbXUpO1xcbjExMzI6XFx0XFxuMTEzMzpcXHRcXHRwbGF0Zm9ybV9kZXZpY2VfdW5yZWdpc3Rlcih0b19wbGF0Zm9ybV9kZXZpY2UoYWJfYWhiLVxcdTAwM2Vmdy5kZXYpKTtcXG4xMTM0OlxcdFxcbjExMzU6XFx0XFx0cmV0dXJuIDA7XFxuMTEzNjpcXHR9XFxuMTEzNzpcXHRcXG4xMTM4OlxcdHN0YXRpYyBpbnQgYXRoMTFrX2FoYl9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxcbjExMzk6XFx0e1xcbjExNDA6XFx0XFx0c3RydWN0IGF0aDExa19iYXNlICphYjtcXG4xMTQxOlxcdFxcdGNvbnN0IHN0cnVjdCBhdGgxMWtfaGlmX29wcyAqaGlmX29wcztcXG4xMTQyOlxcdFxcdGNvbnN0IHN0cnVjdCBhdGgxMWtfcGNpX29wcyAqcGNpX29wcztcXG4xMTQzOlxcdFxcdGVudW0gYXRoMTFrX2h3X3JldiBod19yZXY7XFxuMTE0NDpcXHRcXHRpbnQgcmV0O1xcbjExNDU6XFx0XFxuMTE0NjpcXHRcXHRod19yZXYgPSAodWludHB0cl90KWRldmljZV9nZXRfbWF0Y2hfZGF0YShcXHUwMDI2cGRldi1cXHUwMDNlZGV2KTtcXG4xMTQ3OlxcdFxcbjExNDg6XFx0XFx0c3dpdGNoIChod19yZXYpIHtcXG4xMTQ5OlxcdFxcdGNhc2UgQVRIMTFLX0hXX0lQUTgwNzQ6XFxuMTE1MDpcXHRcXHRjYXNlIEFUSDExS19IV19JUFE2MDE4X0hXMTA6XFxuMTE1MTpcXHRcXHRjYXNlIEFUSDExS19IV19JUFE1MDE4X0hXMTA6XFxuMTE1MjpcXHRcXHRcXHRoaWZfb3BzID0gXFx1MDAyNmF0aDExa19haGJfaGlmX29wc19pcHE4MDc0O1xcbjExNTM6XFx0XFx0XFx0cGNpX29wcyA9IE5VTEw7XFxuMTE1NDpcXHRcXHRcXHRicmVhaztcXG4xMTU1OlxcdFxcdGNhc2UgQVRIMTFLX0hXX1dDTjY3NTBfSFcxMDpcXG4xMTU2OlxcdFxcdFxcdGhpZl9vcHMgPSBcXHUwMDI2YXRoMTFrX2FoYl9oaWZfb3BzX3djbjY3NTA7XFxuMTE1NzpcXHRcXHRcXHRwY2lfb3BzID0gXFx1MDAyNmF0aDExa19haGJfcGNpX29wc193Y242NzUwO1xcbjExNTg6XFx0XFx0XFx0YnJlYWs7XFxuMTE1OTpcXHRcXHRkZWZhdWx0OlxcbjExNjA6XFx0XFx0XFx0ZGV2X2VycihcXHUwMDI2cGRldi1cXHUwMDNlZGV2LCBcXFwidW5zdXBwb3J0ZWQgZGV2aWNlIHR5cGUgJWRcXFxcblxcXCIsIGh3X3Jldik7XFxuMTE2MTpcXHRcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuMTE2MjpcXHRcXHR9XFxuMTE2MzpcXHRcXG4xMTY0OlxcdFxcdHJldCA9IGRtYV9zZXRfbWFza19hbmRfY29oZXJlbnQoXFx1MDAyNnBkZXYtXFx1MDAzZWRldiwgRE1BX0JJVF9NQVNLKDMyKSk7XFxuMTE2NTpcXHRcXHRpZiAocmV0KSB7XFxuMTE2NjpcXHRcXHRcXHRkZXZfZXJyKFxcdTAwMjZwZGV2LVxcdTAwM2VkZXYsIFxcXCJmYWlsZWQgdG8gc2V0IDMyLWJpdCBjb25zaXN0ZW50IGRtYVxcXFxuXFxcIik7XFxuMTE2NzpcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbjExNjg6XFx0XFx0fVxcbjExNjk6XFx0XFxuMTE3MDpcXHRcXHRhYiA9IGF0aDExa19jb3JlX2FsbG9jKFxcdTAwMjZwZGV2LVxcdTAwM2VkZXYsIHNpemVvZihzdHJ1Y3QgYXRoMTFrX2FoYiksXFxuMTE3MTpcXHRcXHRcXHRcXHQgICAgICAgQVRIMTFLX0JVU19BSEIpO1xcbjExNzI6XFx0XFx0aWYgKCFhYikge1xcbjExNzM6XFx0XFx0XFx0ZGV2X2VycihcXHUwMDI2cGRldi1cXHUwMDNlZGV2LCBcXFwiZmFpbGVkIHRvIGFsbG9jYXRlIGF0aDExayBiYXNlXFxcXG5cXFwiKTtcXG4xMTc0OlxcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbjExNzU6XFx0XFx0fVxcbjExNzY6XFx0XFxuMTE3NzpcXHRcXHRhYi1cXHUwMDNlaGlmLm9wcyA9IGhpZl9vcHM7XFxuMTE3ODpcXHRcXHRhYi1cXHUwMDNlcGRldiA9IHBkZXY7XFxuMTE3OTpcXHRcXHRhYi1cXHUwMDNlaHdfcmV2ID0gaHdfcmV2O1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNFQwNToxNDozMi4yNTg1ODMxNzhaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzQyNTM0OTQxOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIHRoZSBEZXZpY2UgUHJvYmUgRnVuY3Rpb24qKlxuXG5BbHJpZ2h0LCBzbyBJJ20gZGlnZ2luZyBpbnRvIHRoaXMgcHJvYmUgZnVuY3Rpb24sIGFuZCB0aGUgZmlyc3QgdGhpbmcgdGhhdCBjYXRjaGVzIG15IGV5ZSBpcyB0aGlzIGNhbGwgdG8gYGRldmljZV9nZXRfbWF0Y2hfZGF0YShcdTAwMjZwZGV2LVx1MDAzZWRldilgLiBOYXR1cmFsbHksIEknbSBpbW1lZGlhdGVseSB0aGlua2luZywgXCJPa2F5LCBsZXQncyBzZWUgaG93IHRoZSBkcml2ZXIgaW50ZXJhY3RzIHdpdGggdGhlIGRldmljZSBtYXRjaGluZyB0YWJsZS5cIiBJIHdhbnQgdG8gdW5kZXJzdGFuZCBob3cgaXQncyBpZGVudGlmeWluZyB0aGUgY29ycmVjdCBoYXJkd2FyZS4gV2hhdCBraW5kIG9mIG1hdGNoIGRhdGEgYXJlIHdlIGdldHRpbmc/IElzIGl0IHVzaW5nIHBsYXRmb3JtIGRldmljZSBJRHMsIGRldmljZSB0cmVlIGJpbmRpbmdzLCBBQ1BJIGRhdGEsIG9yIHNvbWUgY3VzdG9tIG1ldGhvZD8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHNwZWNpZmljcy4gTGV0J3MgdHJhY2UgdGhpcyBiYWNrIHRvIHRoZSBtYXRjaCB0YWJsZSBhbmQgc2VlIHdoYXQncyBiZWluZyBsb29rZWQgZm9yIGFuZCBob3cgdGhlIGhhcmR3YXJlIGlzIGJlaW5nIGlkZW50aWZpZWQgYW5kIGFzc29jaWF0ZWQgd2l0aCB0aGUgZHJpdmVyLiBJIG5lZWQgdGhlIGZ1bGwgcGljdHVyZSB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIGRyaXZlciBiaW5kcyB0byB0aGUgaGFyZHdhcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg0NTYsIk91dHB1dFRva2VucyI6NDYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI0VDA1OjE0OjM1LjY4MzkzNDQ3NloiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDA3NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9haGIuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMzIwLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMzIwOlxcdFxcdCAqL1xcbjEzMjE6XFx0XFx0YXRoMTFrX2FoYl9yZW1vdmVfcHJlcGFyZShhYik7XFxuMTMyMjpcXHRcXG4xMzIzOlxcdFxcdGlmICghKHRlc3RfYml0KEFUSDExS19GTEFHX1JFR0lTVEVSRUQsIFxcdTAwMjZhYi1cXHUwMDNlZGV2X2ZsYWdzKSkpXFxuMTMyNDpcXHRcXHRcXHRnb3RvIGZyZWVfcmVzb3VyY2VzO1xcbjEzMjU6XFx0XFxuMTMyNjpcXHRcXHRhdGgxMWtfY29yZV9kZWluaXQoYWIpO1xcbjEzMjc6XFx0XFxuMTMyODpcXHRmcmVlX3Jlc291cmNlczpcXG4xMzI5OlxcdFxcdGF0aDExa19md19kZXN0cm95KGFiKTtcXG4xMzMwOlxcdFxcdGF0aDExa19haGJfZnJlZV9yZXNvdXJjZXMoYWIpO1xcbjEzMzE6XFx0fVxcbjEzMzI6XFx0XFxuMTMzMzpcXHRzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBhdGgxMWtfYWhiX2RyaXZlciA9IHtcXG4xMzM0OlxcdFxcdC5kcml2ZXIgPSB7XFxuMTMzNTpcXHRcXHRcXHQubmFtZSA9IFxcXCJhdGgxMWtcXFwiLFxcbjEzMzY6XFx0XFx0XFx0Lm9mX21hdGNoX3RhYmxlID0gYXRoMTFrX2FoYl9vZl9tYXRjaCxcXG4xMzM3OlxcdFxcdH0sXFxuMTMzODpcXHRcXHQucHJvYmUgPSBhdGgxMWtfYWhiX3Byb2JlLFxcbjEzMzk6XFx0XFx0LnJlbW92ZSA9IGF0aDExa19haGJfcmVtb3ZlLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNFQwNToxNDozNS42ODQwMzY3NzZaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzk2NDY3ODU4MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoaXMgdGhvdWdodCBwcm9jZXNzLCBmcmFtZWQgaW4gdGhlIGZpcnN0IHBlcnNvbiwgYXMgaWYgdGhlc2Ugd2VyZSBteSBpbnRlcm5hbCBjb25zaWRlcmF0aW9ucywgYXNzdW1pbmcgSSdtIGFuIGV4cGVydDpcblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBEYXRhIFN0cnVjdHVyZSBgb2ZfbWF0Y2hfdGFibGVgKipcblxuUmlnaHQsIHNvIHRoZSBjb2RlIGlzIHVzaW5nIGBvZl9tYXRjaF90YWJsZSA9IGF0aDExa19haGJfb2ZfbWF0Y2hgLiBPa2F5LCB0aGF0J3MgaW50ZXJlc3RpbmcuIEkgaW1tZWRpYXRlbHkgd2FudCB0byB1bmRlcnN0YW5kIHdoYXQncyBpbiBgYXRoMTFrX2FoYl9vZl9tYXRjaGAuIEl0J3MgbGlrZWx5IGEgdGFibGUsIGEgZGF0YSBzdHJ1Y3R1cmUgdGhhdCBkZWZpbmVzIGhvdyB0aGUgc3lzdGVtIHJlY29nbml6ZXMgYW5kIGhhbmRsZXMgZGV2aWNlcyB2aWEgdGhlIE9wZW4gRmlybXdhcmUgbWVjaGFuaXNtLiBQcm9iYWJseSBpdCBjb250YWlucyBpbmZvcm1hdGlvbiB0aGF0IG1hcHMgc3BlY2lmaWMgaGFyZHdhcmUgaWRlbnRpZmllcnMsIGxpa2UgdGhlIGRldmljZSBJRCBvciB2ZW5kb3IgSUQsIHRvIHRoZSBjb3JyZXNwb25kaW5nIGRyaXZlciBvciBtb2R1bGUgcmVzcG9uc2libGUgZm9yIG1hbmFnaW5nIHRoYXQgaGFyZHdhcmUuIEdpdmVuIHRoZSBjb250ZXh0LCBpdCdzIGFsbW9zdCBjZXJ0YWlubHkgcmVsYXRlZCB0byB0aGUgQUhCIGJ1cyBhbmQgbGlrZWx5IHNwZWNpZmljYWxseSBkZXNpZ25lZCBmb3IgYSBRdWFsY29tbSBBdGhlcm9zIDExayBjaGlwLiBJIG5lZWQgdG8gZGl2ZSBpbnRvIHRoZSBkZWZpbml0aW9uIG9mIGBhdGgxMWtfYWhiX29mX21hdGNoYCB0byBzZWUgd2hhdCBmaWVsZHMgaXQgY29udGFpbnM6IGlzIGl0IHVzaW5nIGNvbXBhdGlibGUgc3RyaW5ncywgZGV2aWNlIElEcywgb3Igc29tZSBvdGhlciBpZGVudGlmaWVyIHRvIG1hdGNoIGFnYWluc3Q/IFdoYXQgcHJvcGVydGllcyBhcmUgdGhlc2UgbWF0Y2hlcyBleHBlY3RlZCB0byBjb250YWluLCBhbmQgaG93IGFyZSB0aG9zZSBwcm9wZXJ0aWVzIGdvaW5nIHRvIGJlIHVzZWQ/IFRoaXMgaXMga2V5IHRvIHVuZGVyc3RhbmRpbmcgaG93IHRoZSBkcml2ZXIga25vd3MgaXQgbmVlZHMgdG8gYXR0YWNoIHRvIHRoaXMgc3BlY2lmaWMgaGFyZHdhcmUuIExldCdzIGRpZyBpbiBhbmQgZmlndXJlIG91dCBleGFjdGx5IHdoYXQgaXQncyB0cnlpbmcgdG8gbWF0Y2guXG5cblxuIiwiSW5wdXRUb2tlbnMiOjkwMjksIk91dHB1dFRva2VucyI6MjUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozOSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI0VDA1OjE0OjM5LjY0ODcxNzE3N1oiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTc3MDQ3NzM0OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJhdGgxMWtfYWhiX29mX21hdGNoXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvYWhiLmMtMjMtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9haGIuYzoyNDpzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBhdGgxMWtfYWhiX29mX21hdGNoW10gPSB7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9haGIuYy0yNS1cXHQvKiBUT0RPOiBTaG91bGQgd2UgY2hhbmdlIHRoZSBjb21wYXRpYmxlIHN0cmluZyB0byBzb21ldGhpbmcgc2ltaWxhclxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9haGIuYy00Mi1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2FoYi5jOjQzOk1PRFVMRV9ERVZJQ0VfVEFCTEUob2YsIGF0aDExa19haGJfb2ZfbWF0Y2gpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvYWhiLmMtNDQtXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2FoYi5jPTEzMzM9c3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgYXRoMTFrX2FoYl9kcml2ZXIgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2FoYi5jLTEzMzUtXFx0XFx0Lm5hbWUgPSBcXFwiYXRoMTFrXFxcIixcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2FoYi5jOjEzMzY6XFx0XFx0Lm9mX21hdGNoX3RhYmxlID0gYXRoMTFrX2FoYl9vZl9tYXRjaCxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2FoYi5jLTEzMzctXFx0fSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjRUMDU6MTQ6NDEuNDE5MTk5MTQ1WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM4MDMzMTcxOTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB3aGF0J3MgZ29pbmcgdGhyb3VnaCBteSBtaW5kIGFzIEkgYXBwcm9hY2ggdGhpcyB0YXNrLCBrZWVwaW5nIGluIG1pbmQgbXkgZXhwZXJ0aXNlOlxuXG4qKkRpdmluZyBpbnRvIGBhdGgxMWtfYWhiX29mX21hdGNoYCoqXG5cbkFscmlnaHQsIGxldCdzIGdldCBkb3duIHRvIGl0LiBgYXRoMTFrX2FoYl9vZl9tYXRjaGDigKYgU291bmRzIGxpa2Ugd2UncmUgbG9va2luZyBhdCBhIHBpZWNlIG9mIHRoZSBBdGhlcm9zIHdpcmVsZXNzIGRyaXZlciBmb3IgQUhCIGJ1cyBpbnRlcmZhY2VzLCBsaWtlbHkgaW52b2x2aW5nIGRldmljZSB0cmVlIG1hdGNoaW5nLiBSaWdodCBhd2F5LCBteSBtaW5kIHN0YXJ0cyBkcmF3aW5nIGNvbm5lY3Rpb25zLiBJJ20gdGhpbmtpbmcgYWJvdXQgdGhlIGRldmljZSB0cmVlIGJpbmRpbmdzIGZvciB0aGlzIGhhcmR3YXJlLCBhbmQgaG93IHRoaXMgZnVuY3Rpb24gbGlrZWx5IHBsYXlzIGEgY3J1Y2lhbCByb2xlIGluIHByb2JpbmcgYW5kIGluaXRpYWxpemF0aW9uLiBUaGlzIGhpbnRzIGF0IHRoZSBsb3ctbGV2ZWwgZGV2aWNlIGVudW1lcmF0aW9uIHByb2Nlc3MgYW5kIGhvdyB0aGUgZHJpdmVyIGlkZW50aWZpZXMgYW5kIGJpbmRzIHRvIHRoZSBzcGVjaWZpYyBoYXJkd2FyZSBvbiB0aGUgQUhCLiBJJ20gaW1hZ2luaW5nIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgcGxhdGZvcm0ncyBkZXZpY2UgdHJlZSBzdHJ1Y3R1cmUgdG8gbWFrZSBzdXJlIGl0J3MgdGhlIHJpZ2h0IGRyaXZlciBmb3IgdGhlIGlkZW50aWZpZWQgaGFyZHdhcmUuIFdoYXQncyBpdCBkb2luZyB3aXRoIHRoZSBkZXZpY2UgSUQsIGNvbXBhdGlibGUgc3RyaW5ncywgYW5kIGFueSBzcGVjaWZpYyBwcm9wZXJ0aWVzPyBJcyBpdCBoYW5kbGluZyByZXZpc2lvbnMsIG9yIGp1c3QgdGhlIGJhc2ljIG1hdGNoaW5nPyBUaW1lIHRvIGRpZyBpbiBhbmQgZmluZCBvdXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk3MzEsIk91dHB1dFRva2VucyI6NDQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNFQwNToxNDo0NS4yMjI1MTk0NjFaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTIyMDQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvYWhiLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjQsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgMjQ6XFx0c3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgYXRoMTFrX2FoYl9vZl9tYXRjaFtdID0ge1xcbiAgMjU6XFx0XFx0LyogVE9ETzogU2hvdWxkIHdlIGNoYW5nZSB0aGUgY29tcGF0aWJsZSBzdHJpbmcgdG8gc29tZXRoaW5nIHNpbWlsYXJcXG4gIDI2OlxcdFxcdCAqIHRvIG9uZSB0aGF0IGF0aDEwayB1c2VzP1xcbiAgMjc6XFx0XFx0ICovXFxuICAyODpcXHRcXHR7IC5jb21wYXRpYmxlID0gXFxcInFjb20saXBxODA3NC13aWZpXFxcIixcXG4gIDI5OlxcdFxcdCAgLmRhdGEgPSAodm9pZCAqKUFUSDExS19IV19JUFE4MDc0LFxcbiAgMzA6XFx0XFx0fSxcXG4gIDMxOlxcdFxcdHsgLmNvbXBhdGlibGUgPSBcXFwicWNvbSxpcHE2MDE4LXdpZmlcXFwiLFxcbiAgMzI6XFx0XFx0ICAuZGF0YSA9ICh2b2lkICopQVRIMTFLX0hXX0lQUTYwMThfSFcxMCxcXG4gIDMzOlxcdFxcdH0sXFxuICAzNDpcXHRcXHR7IC5jb21wYXRpYmxlID0gXFxcInFjb20sd2NuNjc1MC13aWZpXFxcIixcXG4gIDM1OlxcdFxcdCAgLmRhdGEgPSAodm9pZCAqKUFUSDExS19IV19XQ042NzUwX0hXMTAsXFxuICAzNjpcXHRcXHR9LFxcbiAgMzc6XFx0XFx0eyAuY29tcGF0aWJsZSA9IFxcXCJxY29tLGlwcTUwMTgtd2lmaVxcXCIsXFxuICAzODpcXHRcXHQgIC5kYXRhID0gKHZvaWQgKilBVEgxMUtfSFdfSVBRNTAxOF9IVzEwLFxcbiAgMzk6XFx0XFx0fSxcXG4gIDQwOlxcdFxcdHsgfVxcbiAgNDE6XFx0fTtcXG4gIDQyOlxcdFxcbiAgNDM6XFx0TU9EVUxFX0RFVklDRV9UQUJMRShvZiwgYXRoMTFrX2FoYl9vZl9tYXRjaCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI0VDA1OjE0OjQ1LjIyMjY0NDc4MVoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4MzM3OTAwMDMxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUmVhY2hhYmlsaXR5IG9mIFRoaXMgUGxhdGZvcm0gRHJpdmVyKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwbGF0Zm9ybSBkcml2ZXIsIGFuZCBpdCdzIGNsZWFybHkgdGllZCB0byBzcGVjaWZpYyBkZXZpY2UgdHJlZSBub2RlcyDigJMgYHFjb20saXBxODA3NC13aWZpYCwgdGhhdCBraW5kIG9mIHRoaW5nLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgXCJJbiBhIHR5cGljYWwgc3l6a2FsbGVyIHNldHVwIOKAkyB4ODZfNjQsIEdDRS9RRU1VLCB0aGUgdXN1YWwg4oCTIHRoZXJlICphcmVuJ3QqIHRoZXNlIGRldmljZSB0cmVlIG5vZGVzLlwiIFN5emthbGxlciwgYXMgZmFyIGFzIEkgdW5kZXJzdGFuZCBpdCwgZG9lc24ndCBoYXZlIGEgYnVpbHQtaW4gZ2VuZXJpYyBtZWNoYW5pc20gdG8ganVzdCAqaW5qZWN0KiBhcmJpdHJhcnkgcGxhdGZvcm0gZGV2aWNlcyB3aXRoIGFueSBvbGQgT0YgY29tcGF0aWJsZSBzdHJpbmcgdW5sZXNzIHRoZXJlJ3MgYSByZWFsbHkgc3BlY2lmaWMgcHNldWRvLXN5c2NhbGwgZGVzaWduZWQgZm9yIGl0LCBsaWtlIGEgYHN5el9kZXZsaW5rYCB0eXBlIG9mIHRoaW5nLCBvciBtYXliZSBzb21ldGhpbmcgdXNpbmcgYHN5el9wbGF0Zm9ybV9kZXZpY2VfYWRkYC4gV2FpdCBhIG1pbnV0ZSwgZG9lc24ndCBzeXprYWxsZXIgKnVzdWFsbHkqIHVzZSBzb21ldGhpbmcgbGlrZSBgc3l6X3BsYXRmb3JtX2RldmljZV9hZGRgIG9yIHNpbWlsYXI/IEhtbW0sIGhhbmcgb24sIGRvZXMgc3l6a2FsbGVyIGV2ZW4gaGF2ZSBhIGNvbXBsZXRlbHkgZ2VuZXJpYyBgc3l6X3BsYXRmb3JtX2RldmljZV9hZGRgIHRoYXQgd29ya3MgZm9yICphbnkqIGRyaXZlcj8gSSBuZWVkIHRvIGNsYXJpZnkgdGhhdC5cblxuV2FpdCwgYXJlIHRoZXJlICpzb21lKiBkZXNjcmlwdGlvbnMgZm9yIHBsYXRmb3JtIGRldmljZXMgYWxyZWFkeSBkZWZpbmVkIGluIHN5emthbGxlcj8gTGV0J3MgY2hlY2sgZm9yIGFueSBleGlzdGluZyByZWZlcmVuY2VzIHRvIGBxY29tLGlwcTgwNzQtd2lmaWAgaW4gdGhlIGtlcm5lbCBvciBzeXprYWxsZXIgaXRzZWxmLiBJIGNhbid0IGRpcmVjdGx5IGBncmVwYCB0aGUgYHN5cy9gIGRpcmVjdG9yeSwgc28gSSBoYXZlIHRvIHRoaW5rIGFib3V0IGFsdGVybmF0ZSB3YXlzIHRvIHNlZSB3aGVyZSB0aGlzIGNvZGUgbWlnaHQgYmUgcmVhY2hhYmxlLiBJcyB0aGlzIGV2ZW4gcmVtb3RlbHkgcmVhY2hhYmxlIGluIGFueSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudD9cblxuSWYgdGhpcyBpcyBzb21lIEFSTS1zcGVjaWZpYyBTb0MgV2ktRmkgZHJpdmVyLCB0aGUgb2RkcyBvZiBpdCBiZWluZyBoaXQgaW4gc3RhbmRhcmQgeDg2XzY0IGZ1enppbmcgYXJlIHZhbmlzaGluZ2x5IHNtYWxsLiBXYWl0LCBidXQgc3l6a2FsbGVyICpkb2VzKiBmdXp6IEFSTTY0LCByaWdodD8gRXZlbiBzbywgaXQgdXNlcyBhIGdlbmVyaWMgdmlydHVhbCBtYWNoaW5lIChRRU1VIHZpcnQgbWFjaGluZSksIHdoaWNoIGFsbW9zdCBjZXJ0YWlubHkgKmRvZXNuJ3QqIGhhdmUgdGhlc2Ugc3BlY2lmaWMgUXVhbGNvbW0gV2ktRmkgaGFyZHdhcmUgbm9kZXMgaW4gaXRzIGRldmljZSB0cmVlLlxuXG5DYW4gc3l6a2FsbGVyIGluamVjdCBkZXZpY2UgdHJlZSBub2Rlcz8gSSdtIHByZXR0eSBzdXJlIG5vdCwgdGhlIGRldmljZSB0cmVlIGlzIHBhc3NlZCBhdCBib290IHRpbWUuIFdhaXQsIHRoZXJlJ3MgYENPTkZJR19PRl9EWU5BTUlDYCBhbmQgYENPTkZJR19PRl9PVkVSTEFZYCwgcmlnaHQ/IEJ1dCwgYXMgZmFyIGFzIEknbSBhd2FyZSwgc3l6a2FsbGVyIGRvZXNuJ3QgbGV2ZXJhZ2UgdGhvc2UgY3VycmVudGx5IHRvIGluamVjdCByYW5kb20gZGV2aWNlcyBmb3IgZnV6emluZyB1bmxlc3Mgc29tZW9uZSdzIGV4cGxpY2l0bHkgY29kZWQgaXQgdGhhdCB3YXkuXG5cbk9rYXksIGxldCdzIHNlZSwgbGV0J3MgbG9vayBmb3IgYGF0aDExa2AgYW5kIGl0cyBjb3JyZXNwb25kaW5nIHN5emthbGxlciBkZXNjcmlwdGlvbi4gSSBjYW4gdXNlIGBjb2Rlc2VhcmNoLWRpci1pbmRleGAgb3IgYHJlYWQtZmlsZWAgdG8gY2hlY2sgYHN5cy9saW51eC9gIGZvciBhbnkgc2lnbiBvZiBgYXRoMTFrYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTAzODgsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MzAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNFQwNToxNDo1My41NjA1NDcxNjJaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYwNTc5MTU4LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJhdGgxMWtcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwic3lzL2xpbnV4L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjRUMDU6MTQ6NTMuNjIxMTMzNTZaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzQ3ODQ0NjQxNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipOYXZpZ2F0aW5nIHRoZSBMYWJ5cmludGggb2YgQ29kZSoqXG5cbk9rYXksIHNvIHRoZSBwcm9tcHQgaXMgdmVyeSBjbGVhcjogSSdtICpub3QqIHRvIHVzZSB0aGUgdXN1YWwgU3l6a2FsbGVyIHNlYXJjaCBtZXRob2RzIG9uIGBzeXpsYW5nYCBkZXNjcmlwdGlvbnMuIFRoYXQncyBmaW5lOyBjaGFsbGVuZ2VzIGFyZSB3aGF0IGtlZXAgdGhpbmdzIGludGVyZXN0aW5nISBJIG5lZWQgYSBtb3JlIHRhcmdldGVkIGFwcHJvYWNoLiBMZXQncyBzZWUuLi4gdGhlIHRleHQgaW5kaWNhdGVzIEkgc2hvdWxkIHVzZSBgY29kZXNlYXJjaC1kaXItaW5kZXhgIGFuZCBgcmVhZC1maWxlYC4gVGhhdCBzb3VuZHMgcHJvbWlzaW5nLiBJdCBzZWVtcyBsaWtlIEknbSBleHBlY3RlZCB0byBkZWx2ZSBpbnRvIHRoZSBgc3lzL2xpbnV4L2AgZGlyZWN0b3J5LiBSaWdodCwgSSB1bmRlcnN0YW5kLiBJJ2xsIG1ha2Ugc3VyZSB0byB1c2UgdGhvc2UgdG9vbHMgb24gdGhhdCBzcGVjaWZpYyBkaXJlY3RvcnkgdG8gZ2V0IHRoZSBpbmZvcm1hdGlvbiB0aGF0IEkgbmVlZC4gVGhpcyBzaG91bGQgYmUgc3RyYWlnaHRmb3J3YXJkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTQyOSwiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI0VDA1OjE0OjU3LjA5OTU4MTg2NloiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJjb2Rlc2VhcmNoLWRpci1pbmRleCIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ5ODgwLCJFcnJvciI6InRoZSBkaXJlY3RvcnkgZG9lcyBub3QgZXhpc3QiLCJBcmdzIjoie1xuICBcIkRpclwiOiBcInN5cy9saW51eFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcInRoZSBkaXJlY3RvcnkgZG9lcyBub3QgZXhpc3RcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjRUMDU6MTQ6NTcuMDk5NjM3Njc2WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc3MTAzNzg3NDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBBdGgxMWsgRHJpdmVyIGZvciBGdXp6YWJpbGl0eSoqXG5cbk9rYXksIGZpcnN0IHRoaW5ncyBmaXJzdCwgSSBuZWVkIHRvIGFkanVzdCBteSBhcHByb2FjaC4gVGhlIHRvb2wgbGltaXRhdGlvbiBpcyBjbGVhcjogSSBjYW4ndCBkaXJlY3RseSBzZWFyY2ggc3l6a2FsbGVyIGRlc2NyaXB0aW9ucyB3aXRoaW4gdGhlIGtlcm5lbCB0cmVlLCBhbmQgdGhlIGB0b29sUmVhZERlc2NyaXB0aW9uYCB0b29sIGlzbid0IGF2YWlsYWJsZS4gU28sIG5vIGRpcmVjdCBzeXprYWxsZXIgc2VhcmNoIGZvciBtZS4gSSBuZWVkIHRvIGRlZHVjZSBmdXp6YWJpbGl0eSBpbmRpcmVjdGx5LlxuXG5UaGUgZHJpdmVyIGluIHF1ZXN0aW9uIGlzIGBhdGgxMWtgLCBzcGVjaWZpY2FsbHkgdGhlIEFIQiBidXMgYXR0YWNobWVudCAoYGFoYi5jYCkuIEFIQiBpcyBhIGJ1cyBhcmNoaXRlY3R1cmUgY29tbW9ubHkgZm91bmQgaW4gU3lzdGVtLW9uLUNoaXBzLCBhbmQgdGhpcyBwYXJ0aWN1bGFyIGNvZGUgcmVxdWlyZXMgYSBwbGF0Zm9ybSBkZXZpY2Ugd2l0aCBzcGVjaWZpYyBjb21wYXRpYmxlIHN0cmluZ3MuIFVubGVzcyBzeXprYWxsZXIgaGFzIGEgaGlnaGx5IHNwZWNpZmljIHBzZXVkby1zeXNjYWxsIHRvIGluc3RhbnRpYXRlIHN1Y2ggYSBwbGF0Zm9ybSBkZXZpY2UsIHdoaWNoIHdvdWxkIGJlIHVudXN1YWwgZm9yIGEgcmFuZG9tIFdpLUZpIFNvQyBkcml2ZXIsIHRoaXMgcGF0aCBpcyBsaWtlbHkgdW5yZWFjaGFibGUgaW4gYSBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudC4gVGhhdCdzIGEgZ29vZCBpbml0aWFsIGluZGljYXRvci5cblxuTm93LCBsZXQncyBleHBsb3JlIHBvc3NpYmxlIGFsdGVybmF0aXZlcy4gSXMgdGhlcmUgYSBQQ0kgZXF1aXZhbGVudD8gVGhlIGNoYW5nZSBpcyB3aXRoaW4gYGFoYi5jYCwgc3VnZ2VzdGluZyBpdCdzIHRpZ2h0bHkgY291cGxlZCB0byB0aGUgQUhCIGJ1cy4gV2FpdCwgSSBzZWUgYW4gaW50ZXJlc3RpbmcgY2FsbDogYGF0aDExa19haGJfZnJlZV9pcnFgLiBUaGUgcHJlc2VuY2Ugb2ZcblxuYGBgY1xuXHRpZiAoYWItXHUwMDNlaHdfcGFyYW1zLmh5YnJpZF9idXNfdHlwZSlcblx0XHRyZXR1cm4gYXRoMTFrX3BjaWNfZnJlZV9pcnEoYWIpO1xuYGBgXG5cbmlzIGludHJpZ3VpbmcsIGJ1dCBpdCdzICpzdGlsbCogd2l0aGluIGBhaGIuY2AsIHdoaWNoIG1ha2VzIG1lIHF1ZXN0aW9uIHRoZSBsYXJnZXIgYnVpbGQgY29uZmlndXJhdGlvbi4gTXkgcHJpbWFyeSBjb25jZXJuIHJlbWFpbnMgd2hldGhlciBgYWhiLmNgIGlzIGV2ZW4gY29tcGlsZWQgZm9yIFBDSS1vbmx5IGNvbmZpZ3VyYXRpb25zLiBUbyBjbGFyaWZ5IHRoYXQsIEkgc2hvdWxkIGNoZWNrIHRoZSBtYWtlZmlsZSB3aXRoaW4gYGRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE2NjYsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNDQsIlRvb2xDYWxscyI6WyJjb2Rlc2VhcmNoLWRpci1pbmRleCJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI0VDA1OjE1OjA0LjgxMDAxOTQwNloiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1ODg2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL01ha2VmaWxlXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDMwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTMtQ2xhdXNlLUNsZWFyXFxuICAgMjpcXHRvYmotJChDT05GSUdfQVRIMTFLKSArPSBhdGgxMWsub1xcbiAgIDM6XFx0YXRoMTFrLXkgKz0gY29yZS5vIFxcXFxcXG4gICA0OlxcdFxcdCAgICBoYWwubyBcXFxcXFxuICAgNTpcXHRcXHQgICAgaGFsX3R4Lm8gXFxcXFxcbiAgIDY6XFx0XFx0ICAgIGhhbF9yeC5vIFxcXFxcXG4gICA3OlxcdFxcdCAgICB3bWkubyBcXFxcXFxuICAgODpcXHRcXHQgICAgbWFjLm8gXFxcXFxcbiAgIDk6XFx0XFx0ICAgIHJlZy5vIFxcXFxcXG4gIDEwOlxcdFxcdCAgICBodGMubyBcXFxcXFxuICAxMTpcXHRcXHQgICAgcW1pLm8gXFxcXFxcbiAgMTI6XFx0XFx0ICAgIGRwLm8gIFxcXFxcXG4gIDEzOlxcdFxcdCAgICBkcF90eC5vIFxcXFxcXG4gIDE0OlxcdFxcdCAgICBkcF9yeC5vIFxcXFxcXG4gIDE1OlxcdFxcdCAgICBkZWJ1Zy5vIFxcXFxcXG4gIDE2OlxcdFxcdCAgICBjZS5vIFxcXFxcXG4gIDE3OlxcdFxcdCAgICBwZWVyLm8gXFxcXFxcbiAgMTg6XFx0XFx0ICAgIGRicmluZy5vIFxcXFxcXG4gIDE5OlxcdFxcdCAgICBody5vIFxcXFxcXG4gIDIwOlxcdFxcdCAgICBwY2ljLm8gXFxcXFxcbiAgMjE6XFx0XFx0ICAgIGZ3Lm8gXFxcXFxcbiAgMjI6XFx0XFx0ICAgIHAycC5vXFxuICAyMzpcXHRcXG4gIDI0OlxcdGF0aDExay0kKENPTkZJR19BVEgxMUtfREVCVUdGUykgKz0gZGVidWdmcy5vIGRlYnVnZnNfaHR0X3N0YXRzLm8gZGVidWdmc19zdGEub1xcbiAgMjU6XFx0YXRoMTFrLSQoQ09ORklHX05MODAyMTFfVEVTVE1PREUpICs9IHRlc3Rtb2RlLm9cXG4gIDI2OlxcdGF0aDExay0kKENPTkZJR19BVEgxMUtfVFJBQ0lORykgKz0gdHJhY2Uub1xcbiAgMjc6XFx0YXRoMTFrLSQoQ09ORklHX1RIRVJNQUwpICs9IHRoZXJtYWwub1xcbiAgMjg6XFx0YXRoMTFrLSQoQ09ORklHX0FUSDExS19TUEVDVFJBTCkgKz0gc3BlY3RyYWwub1xcbiAgMjk6XFx0YXRoMTFrLSQoQ09ORklHX1BNKSArPSB3b3cub1xcbiAgMzA6XFx0YXRoMTFrLSQoQ09ORklHX0RFVl9DT1JFRFVNUCkgKz0gY29yZWR1bXAub1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNFQwNToxNTowNC44MTAwNzk0ODZaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTAyNjYyMjk5OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCB1c2VyIGFuZCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipBbmFseXppbmcgdGhlIE1ha2VmaWxlKipcblxuQWxyaWdodCwgdGltZSB0byBkaWcgaW50byB0aGUgcmVzdCBvZiB0aGlzIE1ha2VmaWxlLiBJJ3ZlIHNlZW4gdGhlIGJhc2ljcywgdGhlIHN0cnVjdHVyZSwgdGhlIGRlcGVuZGVuY2llcy4uLiBub3csIGxldCdzIHNlZSB3aGF0IGludGVyZXN0aW5nIHRlY2huaXF1ZXMgb3Igb3B0aW1pemF0aW9ucyBhcmUgZW1wbG95ZWQuIEknbSBsb29raW5nIGZvciB0aGluZ3MgdGhhdCBtaWdodCBiZSBub3ZlbCwgb3IgcGVyaGFwcyBwYXR0ZXJucyB0aGF0IEkndmUgc2VlbiBiZWZvcmUgYnV0IGFyZSBpbXBsZW1lbnRlZCBpbiBhIHVuaXF1ZSB3YXkgaGVyZS4gQXJlIHRoZXJlIGFueSBjbGV2ZXIgdXNlcyBvZiBzaGVsbCBleHBhbnNpb25zLCB2YXJpYWJsZSBzdWJzdGl0dXRpb24sIG9yIHBlcmhhcHMgc29tZSBwYXJ0aWN1bGFybHkgZWxlZ2FudCB1c2Ugb2YgR05VIE1ha2UncyBmZWF0dXJlcz8gSSdtIGhvcGluZyB0byBzcG90IHNvbWUgdHJpY2tzIHRoYXQgSSBjYW4gZmlsZSBhd2F5IGZvciBmdXR1cmUgcHJvamVjdHMuIEkgd2FudCB0byBzZWUgaWYgdGhlIGF1dGhvcidzIGZvbGxvd2luZyBhbnkgZXN0YWJsaXNoZWQgYmVzdCBwcmFjdGljZXMgb3IgaWYgdGhleSdyZSB0YWtpbmcgYSBtb3JlIHVuY29udmVudGlvbmFsIHJvdXRlLiBMZXQncyBzZWUgaWYgdGhpcyBNYWtlZmlsZSBpcyBqdXN0IGZ1bmN0aW9uYWwgb3IgaWYgaXQncyBhbHNvIHdlbGwtY3JhZnRlZCBhbmQgcmVhZGFibGUuIEknbGwgYmUgc2NydXRpbml6aW5nIHRoZSBkZXBlbmRlbmN5IGdyYXBocywgdGFyZ2V0IGRlZmluaXRpb25zLCBhbmQgYW55IGN1c3RvbSBmdW5jdGlvbnMgb3IgbWFjcm9zIHRoYXQgaGF2ZSBiZWVuIGRlZmluZWQuIEl0J3MgdGltZSB0byBzZWUgaG93IHRoaXMgdGhpbmcgKnJlYWxseSogd29ya3MuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyODkxLCJPdXRwdXRUb2tlbnMiOjQxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNFQwNToxNTowOS44MzY3MDU1NTZaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjA2MjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9NYWtlZmlsZVwiLFxuICBcIkZpcnN0TGluZVwiOiAzMSxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAzMTpcXHRhdGgxMWstJChDT05GSUdfQVRIMTFLX0NGUikgKz0gY2ZyLm9cXG4gIDMyOlxcdFxcbiAgMzM6XFx0b2JqLSQoQ09ORklHX0FUSDExS19BSEIpICs9IGF0aDExa19haGIub1xcbiAgMzQ6XFx0YXRoMTFrX2FoYi15ICs9IGFoYi5vXFxuICAzNTpcXHRcXG4gIDM2OlxcdG9iai0kKENPTkZJR19BVEgxMUtfUENJKSArPSBhdGgxMWtfcGNpLm9cXG4gIDM3OlxcdGF0aDExa19wY2kteSArPSBtaGkubyBwY2kub1xcbiAgMzg6XFx0XFxuICAzOTpcXHQjIGZvciB0cmFjaW5nIGZyYW1ld29yayB0byBmaW5kIHRyYWNlLmhcXG4gIDQwOlxcdENGTEFHU190cmFjZS5vIDo9IC1JJChzcmMpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI0VDA1OjE1OjA5LjgzNjc2NzY4NVoiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3OTcyOTcxMDgyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgYGF0aDExa19haGJgIERyaXZlcidzIFJlYWNoYWJpbGl0eSoqXG5cbk9rYXksIHNvIGBhaGIuY2Agb25seSBnZXRzIGNvbXBpbGVkIHdoZW4gYENPTkZJR19BVEgxMUtfQUhCYCBpcyBlbmFibGVkLiBBbmQgdGhhdCBjb25maWcgb3B0aW9uIGlzIHNwZWNpZmljYWxseSBmb3IgQXRoZXJvcycgQUhCIHN1cHBvcnQgd2l0aGluIGBhdGgxMWtgLiBSaWdodCwgd2Uga25vdyBgYXRoMTFrX2FoYl9wcm9iZWAgaXMgYSBwbGF0Zm9ybSBkcml2ZXIncyBwcm9iZSBmdW5jdGlvbiwgYW5kIGl0J3Mga2V5ZWQgdG8gc3BlY2lmaWMgZGV2aWNlIHRyZWUgY29tcGF0aWJsZSBzdHJpbmdzIOKAkyB0aGUgUXVhbGNvbW0gV2ktRmkgZGV2aWNlcy4gVGhvc2UgcGxhdGZvcm0gZGV2aWNlcyBhcmUgKmluc3RhbnRpYXRlZCogZHVyaW5nIGJvb3QsIGFsbCB0aGFua3MgdG8gdGhlIGRldmljZSB0cmVlLCBvciBzcGVjaWZpY2FsbHkgaGVyZSwgdGhlIE9wZW4gRmlybXdhcmUgKE9GKS5cblxuSW4gYW55IHZpcnR1YWxpemVkIHNldHVwIGxpa2UgUUVNVSBvciBHQ0UsIHRoZSBndWVzdCdzIGRldmljZSB0cmVlICp3b24ndCogaGF2ZSB0aGVzZSBRdWFsY29tbSBXaS1GaSBub2Rlcy4gU28gdGhlIGBhdGgxMWtfYWhiYCBkcml2ZXIgd2lsbCBzaW1wbHkgbmV2ZXIgYmluZCB0byBhbnkgZGV2aWNlLiBUaGF0IG1lYW5zIHRoZSBwcm9iZSBmdW5jdGlvbiwgYWxvbmcgd2l0aCBgYXRoMTFrX2FoYl9jb25maWdfaXJxYCBhbmQgYGF0aDExa19haGJfY29uZmlnX2V4dF9pcnFgLCB3aWxsIG5ldmVyIGJlIGV4ZWN1dGVkIGluIHRoZXNlIGVudmlyb25tZW50cy5cblxuSG9sZCBvbiwgaXMgdGhlcmUgKmFueSogd2F5IHRvIHRyaWdnZXIgcGxhdGZvcm0gZGV2aWNlIGNyZWF0aW9uIGZyb20gdXNlcnNwYWNlPyBUaGVyZSdzIGEgc3lzZnMgaW50ZXJmYWNlIGZvciBzb21lIGJ1c2VzLCBidXQgd2l0aCBwbGF0Zm9ybSBidXNlcywgeW91IGNhbid0IGp1c3QgY29uanVyZSB1cCBhcmJpdHJhcnkgZGV2aWNlcyBmcm9tIHVzZXJzcGFjZSB1bmxlc3MgdGhlcmUncyBhIHNwZWNpZmljIGRyaXZlciBvciBhIGRlYnVnZnMgaW50ZXJmYWNlIHRoYXQgZXhwb3NlcyBzb21ldGhpbmcgbGlrZSBgcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyYC4gQW5kLCBhcyBmYXIgYXMgSSBrbm93LCBTeXprYWxsZXIgZG9lc24ndCBoYXZlIGEgYnVpbHQtaW4gd2F5IHRvIGRvIHRoaXMuIEkndmUgdXNlZCBpdCB3aXRoIFBDSSBkZXZpY2VzICh0aHJvdWdoIGBzeXpfcGNpX2RldmljZV9hZGRgIC8gdlBDSSkgYW5kIFVTQiBkZXZpY2VzICh2aWEgYHN5el91c2JfY29ubmVjdGAgLyBkdW1teV9oY2QpLCBidXQgbm90IHdpdGggYXJiaXRyYXJ5IHBsYXRmb3JtIGRldmljZXMgd2l0aCB2ZXJ5IHNwZWNpZmljIE9GIGNvbXBhdGlibGUgc3RyaW5ncy5cblxuV2FpdC4uLiBJJ3ZlIGdvdCBpdCwgdGhlcmUgaXMgYG1hYzgwMjExX2h3c2ltYCwgYnV0IHRoYXQgc2ltdWxhdGVzIGEgKmdlbmVyaWMqIFdpLUZpIHJhZGlvLCBhbmQgdGhhdCBkb2VzIG5vdCBpbnN0YW50aWF0ZSB0aGUgYGF0aDExa2AgaGFyZHdhcmUuXG5cblNvLCByZWFsaXN0aWNhbGx5LCB0aGlzIGNvZGUgcGF0aCBpcyBzaW1wbHkgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB0aGVzZSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuIEknbSBnb2luZyB0byBkb3VibGUgY2hlY2sgcmVhbCBxdWljayB0aGF0IGBhdGgxMWtfYWhiX2NvbmZpZ19pcnFgIGNhbid0IGJlIGNhbGxlZCBmcm9tIHNvbWUgb3RoZXIgcGxhY2UgaW4gdGhlIGNvZGUgYmFzZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTMzNjAsIk91dHB1dFRva2VucyI6MjYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MzcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNFQwNToxNToxNy44MDk3NDEwMzhaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4NjUwMzQyMDQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYXRoMTFrX2FoYl9jb25maWdfaXJxXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvYWhiLmM9NTMyPXN0YXRpYyBpbnQgYXRoMTFrX2FoYl9jb25maWdfZXh0X2lycShzdHJ1Y3QgYXRoMTFrX2Jhc2UgKmFiKVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9haGIuYy02MzItXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9haGIuYzo2MzM6c3RhdGljIGludCBhdGgxMWtfYWhiX2NvbmZpZ19pcnEoc3RydWN0IGF0aDExa19iYXNlICphYilcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2FoYi5jLTYzNC17XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2FoYi5jPTExMzg9c3RhdGljIGludCBhdGgxMWtfYWhiX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2FoYi5jLTEyMzAtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9haGIuYzoxMjMxOlxcdHJldCA9IGF0aDExa19haGJfY29uZmlnX2lycShhYik7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9haGIuYy0xMjMyLVxcdGlmIChyZXQpIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjRUMDU6MTU6MTkuNjc0NzgxNTgyWiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjkyMDczODkxODUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqVW5yZWFjaGFibGUgQ29kZSBpbiB0aGUgQUhCIFdpLUZpIERyaXZlcioqXG5cbk9rYXksIHNvIEkndmUgYmVlbiBsb29raW5nIGF0IHRoaXMgY29kZSBhbmQgaXQncyBwcmV0dHkgY2xlYXI6IHRoaXMgYmxvY2sgaXMgb25seSBlbnRlcmVkIHRocm91Z2ggYGF0aDExa19haGJfcHJvYmVgLiBUaGF0IGZ1bmN0aW9uIGl0c2VsZiBpcyBleGNsdXNpdmVseSBjYWxsZWQgYnkgdGhlIHBsYXRmb3JtIGJ1cyB3aGVuIGl0IGRldGVjdHMgYSBtYXRjaGluZyBkZXZpY2UuIFRoZSBwcm9ibGVtIGlzLCBhbmQgdGhpcyBpcyBjcnVjaWFsIGZvciBmdXp6aW5nIGNvbnNpZGVyYXRpb25zLCB0aGF0IFN5emthbGxlciwgd2hpY2ggaXMgb3VyIHByaW1hcnkgZnV6emluZyB0b29sLCBkb2Vzbid0IGhhdmUgYSB3YXkgdG8gaW5qZWN0IGFyYml0cmFyeSBwbGF0Zm9ybSBkZXZpY2VzLiBJIHRob3VnaHQgbWF5YmUgSSB3YXMgbWlzc2luZyBzb21ldGhpbmcg4oCTIGRvZXMgaXQgaGF2ZSBhIHBzZXVkby1zeXNjYWxsIGZvciBwbGF0Zm9ybSBkZXZpY2VzPyBJIGtub3cgaXQgaGFzIGBzeXpfcGxhdGZvcm1fZGV2aWNlX2FkZGAuLi4gd2FpdCwgaXQgZG9lc24ndC5cblxuSSBzdGFydGVkIGxpc3RpbmcgdGhlIGtub3duIGBzeXpfYCBwcmVmaXhlcy4gTGV0J3Mgc2VlLCBpdCBzdXBwb3J0cyBkZXZsaW5rIChgc3l6X2RldmxpbmtgKSwgbWFjODAyMTEgKGBzeXpfODAyMTFfLi4uYCksIGdlbmVyaWMgbmV0bGluayAoYHN5el9nZW5ldGxpbmtfLi4uYCksIFVTQiAoYHN5el91c2JfY29ubmVjdGApLCBQQ0kgKGBzeXpfcGNpX2RldmljZV9hZGRgKSwgQmx1ZXRvb3RoIChgc3l6X3ZoY2lfLi4uYCksIGFuZCBleHQ0IChgc3l6X2V4dDRfLi4uYCkuIEJ1dCBub3RoaW5nIGZvciBhIGdlbmVyaWMgcGxhdGZvcm0gZGV2aWNlIGluamVjdG9yLiBFdmVuIGlmIHRoZXJlICp3ZXJlKiBzdWNoIGEgdGhpbmcsIGl0IHdvdWxkIG5lZWQgdG8ga25vdyB0aGUgKmV4YWN0KiBjb21wYXRpYmxlIHN0cmluZywgbWVtb3J5IHJlc291cmNlcywgaW50ZXJydXB0IHJlc291cmNlcywgYW5kIGFsbCB0aGF0IOKAkyB3aGljaCBpcyBoaWdobHkgZGVwZW5kZW50IG9uIHRoZSBzeXN0ZW0tb24tYS1jaGlwIChTb0MpIGFuZCB0eXBpY2FsbHkgbmVlZHMgYSBkZXZpY2UgdHJlZSBvdmVybGF5LiBUaGF0IGxldmVsIG9mIHNwZWNpZmljaXR5IGlzIGp1c3Qgbm90IHNvbWV0aGluZyB3ZSBjYW4gcmVhbGlzdGljYWxseSByZXBsaWNhdGUgaW4gYSBmdXp6ZWQgZW52aXJvbm1lbnQuXG5cblRoZXJlZm9yZSwgc2luY2UgdGhpcyBzcGVjaWZpYyBwYXRjaCB0b3VjaGVzIGEgcGxhdGZvcm0tc3BlY2lmaWMgQUhCIFdpLUZpIGRyaXZlciwgYW5kIHRoYXQgZHJpdmVyJ3MgY29kZSBpcyB1bnJlYWNoYWJsZSBpbiBvdXIgY3VycmVudCB2aXJ0dWFsaXplZCBmdXp6aW5nIHNldHVwcyBsaWtlIEdDRSBvciBRRU1VLCBJJ20gZ29pbmcgdG8gbWFyayB0aGlzIGFzIG5vdCB3b3J0aCBmdXp6aW5nLiBJJ2xsIHJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UsIHdpdGggdGhlIGRvY3VtZW50ZWQgcmVhc29uaW5nIHRoYXQgdGhpcyBjb2RlIHBhdGggaXMgc2ltcGx5IGluYWNjZXNzaWJsZSB1bmRlciBvdXIgZXhpc3RpbmcgZnV6emluZyBlbnZpcm9ubWVudC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQ2MTksIk91dHB1dFRva2VucyI6MTQ5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzU5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI0VDA1OjE1OjI4Ljg4MjE3MzY0N1oiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxNzgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGVycm9yIGhhbmRsaW5nIGluIHRoZSBwcm9iZSBwYXRoIG9mIHRoZSBhdGgxMWsgQUhCIHBsYXRmb3JtIGRyaXZlciAoYXRoMTFrX2FoYikuIFRoaXMgZHJpdmVyIHJlcXVpcmVzIHNwZWNpZmljIFF1YWxjb21tIFNvQyBoYXJkd2FyZSAoZS5nLiwgSVBRODA3NCwgSVBRNjAxOCkgYW5kIGJpbmRzIHZpYSBkZXZpY2UgdHJlZSBjb21wYXRpYmxlIHN0cmluZ3MuIFNpbmNlIHN5emthbGxlciBvcGVyYXRlcyBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgKFFFTVUvR0NFKSB3aXRob3V0IHRoZXNlIHNwZWNpZmljIGhhcmR3YXJlIG5vZGVzIGluIHRoZSBkZXZpY2UgdHJlZSwgYW5kIHRoZXJlIGlzIG5vIG1lY2hhbmlzbSB0byBpbmplY3QgYXJiaXRyYXJ5IHBsYXRmb3JtIGRldmljZXMgd2l0aCBzcGVjaWZpYyBtZW1vcnkvSVJRIHJlc291cmNlcywgdGhpcyBjb2RlIHBhdGggaXMgdW5yZWFjaGFibGUgYW5kIGNhbm5vdCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBlcnJvciBoYW5kbGluZyBpbiB0aGUgcHJvYmUgcGF0aCBvZiB0aGUgYXRoMTFrIEFIQiBwbGF0Zm9ybSBkcml2ZXIgKGF0aDExa19haGIpLiBUaGlzIGRyaXZlciByZXF1aXJlcyBzcGVjaWZpYyBRdWFsY29tbSBTb0MgaGFyZHdhcmUgKGUuZy4sIElQUTgwNzQsIElQUTYwMTgpIGFuZCBiaW5kcyB2aWEgZGV2aWNlIHRyZWUgY29tcGF0aWJsZSBzdHJpbmdzLiBTaW5jZSBzeXprYWxsZXIgb3BlcmF0ZXMgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIChRRU1VL0dDRSkgd2l0aG91dCB0aGVzZSBzcGVjaWZpYyBoYXJkd2FyZSBub2RlcyBpbiB0aGUgZGV2aWNlIHRyZWUsIGFuZCB0aGVyZSBpcyBubyBtZWNoYW5pc20gdG8gaW5qZWN0IGFyYml0cmFyeSBwbGF0Zm9ybSBkZXZpY2VzIHdpdGggc3BlY2lmaWMgbWVtb3J5L0lSUSByZXNvdXJjZXMsIHRoaXMgY29kZSBwYXRoIGlzIHVucmVhY2hhYmxlIGFuZCBjYW5ub3QgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflowrhffv[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-24 04:38:36 +0000 UTC FinishedAt: 2026-07-24 05:15:30 +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+CgkJCTx0ZD4yMDI2LzA3LzI0IDA1OjE0PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGVycm9yIGhhbmRsaW5nIGluIHRoZSBwcm9iZSBwYXRoIG9mIHRoZSBhdGgxMWsgQUhCIHBsYXRmb3JtIGRyaXZlciAoYXRoMTFrX2FoYikuIFRoaXMgZHJpdmVyIHJlcXVpcmVzIHNwZWNpZmljIFF1YWxjb21tIFNvQyBoYXJkd2FyZSAoZS5nLiwgSVBRODA3NCwgSVBRNjAxOCkgYW5kIGJpbmRzIHZpYSBkZXZpY2UgdHJlZSBjb21wYXRpYmxlIHN0cmluZ3MuIFNpbmNlIHN5emthbGxlciBvcGVyYXRlcyBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgKFFFTVUvR0NFKSB3aXRob3V0IHRoZXNlIHNwZWNpZmljIGhhcmR3YXJlIG5vZGVzIGluIHRoZSBkZXZpY2UgdHJlZSwgYW5kIHRoZXJlIGlzIG5vIG1lY2hhbmlzbSB0byBpbmplY3QgYXJiaXRyYXJ5IHBsYXRmb3JtIGRldmljZXMgd2l0aCBzcGVjaWZpYyBtZW1vcnkvSVJRIHJlc291cmNlcywgdGhpcyBjb2RlIHBhdGggaXMgdW5yZWFjaGFibGUgYW5kIGNhbm5vdCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI0IDA1OjE0PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgMWU4MjVjNjNkMGMxMzYyZjM2MjViMGUzMDUwZTQwZGUwM2FmMWZjNFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgSnVsIDI0IDA1OjE0OjA0IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvYWhiLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2FoYi5jXG5pbmRleCBmNTY2ZDY5OWQwNzRhOC4uYmRmNTNhYTdkZGYxZjUgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2FoYi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2FoYi5jXG5AQCAtNDMxLDM2ICYjNDM7NDMxLDQ0IEBAIHN0YXRpYyB2b2lkIGF0aDExa19haGJfaW5pdF9xbWlfY2VfY29uZmlnKHN0cnVjdCBhdGgxMWtfYmFzZSAqYWIpXG4gXHRhYi1cdTAwM2VxbWkuc2VydmljZV9pbnNfaWQgPSBhYi1cdTAwM2Vod19wYXJhbXMucW1pX3NlcnZpY2VfaW5zX2lkO1xuIH1cbiBcbi1zdGF0aWMgdm9pZCBhdGgxMWtfYWhiX2ZyZWVfZXh0X2lycShzdHJ1Y3QgYXRoMTFrX2Jhc2UgKmFiKVxuJiM0MztzdGF0aWMgdm9pZCBhdGgxMWtfYWhiX2ZyZWVfZXh0X2lycV9ncnAoc3RydWN0IGF0aDExa19iYXNlICphYixcbiYjNDM7XHRcdFx0XHQgICAgICBzdHJ1Y3QgYXRoMTFrX2V4dF9pcnFfZ3JwICppcnFfZ3JwKVxuIHtcbi1cdGludCBpLCBqO1xuLVxuLVx0Zm9yIChpID0gMDsgaSBcdTAwM2MgQVRIMTFLX0VYVF9JUlFfR1JQX05VTV9NQVg7IGkmIzQzOyYjNDM7KSB7XG4tXHRcdHN0cnVjdCBhdGgxMWtfZXh0X2lycV9ncnAgKmlycV9ncnAgPSBcdTAwMjZhYi1cdTAwM2VleHRfaXJxX2dycFtpXTtcbiYjNDM7XHRpbnQgajtcbiBcbi1cdFx0Zm9yIChqID0gMDsgaiBcdTAwM2MgaXJxX2dycC1cdTAwM2VudW1faXJxOyBqJiM0MzsmIzQzOylcbi1cdFx0XHRmcmVlX2lycShhYi1cdTAwM2VpcnFfbnVtW2lycV9ncnAtXHUwMDNlaXJxc1tqXV0sIGlycV9ncnApO1xuJiM0MztcdGZvciAoaiA9IDA7IGogXHUwMDNjIGlycV9ncnAtXHUwMDNlbnVtX2lycTsgaiYjNDM7JiM0MzspXG4mIzQzO1x0XHRmcmVlX2lycShhYi1cdTAwM2VpcnFfbnVtW2lycV9ncnAtXHUwMDNlaXJxc1tqXV0sIGlycV9ncnApO1xuIFxuLVx0XHRuZXRpZl9uYXBpX2RlbChcdTAwMjZpcnFfZ3JwLVx1MDAzZW5hcGkpO1xuLVx0XHRmcmVlX25ldGRldihpcnFfZ3JwLVx1MDAzZW5hcGlfbmRldik7XG4tXHR9XG4mIzQzO1x0bmV0aWZfbmFwaV9kZWwoXHUwMDI2aXJxX2dycC1cdTAwM2VuYXBpKTtcbiYjNDM7XHRmcmVlX25ldGRldihpcnFfZ3JwLVx1MDAzZW5hcGlfbmRldik7XG4gfVxuIFxuLXN0YXRpYyB2b2lkIGF0aDExa19haGJfZnJlZV9pcnEoc3RydWN0IGF0aDExa19iYXNlICphYilcbiYjNDM7c3RhdGljIHZvaWQgYXRoMTFrX2FoYl9mcmVlX2V4dF9pcnEoc3RydWN0IGF0aDExa19iYXNlICphYilcbiB7XG4tXHRpbnQgaXJxX2lkeDtcbiBcdGludCBpO1xuIFxuLVx0aWYgKGFiLVx1MDAzZWh3X3BhcmFtcy5oeWJyaWRfYnVzX3R5cGUpXG4tXHRcdHJldHVybiBhdGgxMWtfcGNpY19mcmVlX2lycShhYik7XG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgQVRIMTFLX0VYVF9JUlFfR1JQX05VTV9NQVg7IGkmIzQzOyYjNDM7KVxuJiM0MztcdFx0YXRoMTFrX2FoYl9mcmVlX2V4dF9pcnFfZ3JwKGFiLCBcdTAwMjZhYi1cdTAwM2VleHRfaXJxX2dycFtpXSk7XG4mIzQzO31cbiBcbi1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIGFiLVx1MDAzZWh3X3BhcmFtcy5jZV9jb3VudDsgaSYjNDM7JiM0MzspIHtcbiYjNDM7c3RhdGljIHZvaWQgYXRoMTFrX2FoYl9mcmVlX2NlX2lycXMoc3RydWN0IGF0aDExa19iYXNlICphYiwgaW50IG1heF9pZHgpXG4mIzQzO3tcbiYjNDM7XHRpbnQgaXJxX2lkeCwgaTtcbiYjNDM7XG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgbWF4X2lkeDsgaSYjNDM7JiM0MzspIHtcbiBcdFx0aWYgKGF0aDExa19jZV9nZXRfYXR0cl9mbGFncyhhYiwgaSkgXHUwMDI2IENFX0FUVFJfRElTX0lOVFIpXG4gXHRcdFx0Y29udGludWU7XG4gXHRcdGlycV9pZHggPSBBVEgxMUtfSVJRX0NFMF9PRkZTRVQgJiM0MzsgaTtcbiBcdFx0ZnJlZV9pcnEoYWItXHUwMDNlaXJxX251bVtpcnFfaWR4XSwgXHUwMDI2YWItXHUwMDNlY2UuY2VfcGlwZVtpXSk7XG4gXHR9XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIGF0aDExa19haGJfZnJlZV9pcnEoc3RydWN0IGF0aDExa19iYXNlICphYilcbiYjNDM7e1xuJiM0MztcdGlmIChhYi1cdTAwM2Vod19wYXJhbXMuaHlicmlkX2J1c190eXBlKVxuJiM0MztcdFx0cmV0dXJuIGF0aDExa19wY2ljX2ZyZWVfaXJxKGFiKTtcbiBcbiYjNDM7XHRhdGgxMWtfYWhiX2ZyZWVfY2VfaXJxcyhhYiwgYWItXHUwMDNlaHdfcGFyYW1zLmNlX2NvdW50KTtcbiBcdGF0aDExa19haGJfZnJlZV9leHRfaXJxKGFiKTtcbiB9XG4gXG5AQCAtNTI0LDIwICYjNDM7NTMyLDI1IEBAIHN0YXRpYyBpcnFyZXR1cm5fdCBhdGgxMWtfYWhiX2V4dF9pbnRlcnJ1cHRfaGFuZGxlcihpbnQgaXJxLCB2b2lkICphcmcpXG4gc3RhdGljIGludCBhdGgxMWtfYWhiX2NvbmZpZ19leHRfaXJxKHN0cnVjdCBhdGgxMWtfYmFzZSAqYWIpXG4ge1xuIFx0c3RydWN0IGF0aDExa19od19wYXJhbXMgKmh3ID0gXHUwMDI2YWItXHUwMDNlaHdfcGFyYW1zO1xuJiM0MztcdHN0cnVjdCBhdGgxMWtfZXh0X2lycV9ncnAgKmlycV9ncnA7XG4gXHRpbnQgaSwgajtcbiBcdGludCBpcnE7XG4gXHRpbnQgcmV0O1xuIFxuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgQVRIMTFLX0VYVF9JUlFfR1JQX05VTV9NQVg7IGkmIzQzOyYjNDM7KSB7XG4tXHRcdHN0cnVjdCBhdGgxMWtfZXh0X2lycV9ncnAgKmlycV9ncnAgPSBcdTAwMjZhYi1cdTAwM2VleHRfaXJxX2dycFtpXTtcbiBcdFx0dTMyIG51bV9pcnEgPSAwO1xuIFxuJiM0MztcdFx0aXJxX2dycCA9IFx1MDAyNmFiLVx1MDAzZWV4dF9pcnFfZ3JwW2ldO1xuJiM0MztcbiBcdFx0aXJxX2dycC1cdTAwM2VhYiA9IGFiO1xuIFx0XHRpcnFfZ3JwLVx1MDAzZWdycF9pZCA9IGk7XG4gXG4gXHRcdGlycV9ncnAtXHUwMDNlbmFwaV9uZGV2ID0gYWxsb2NfbmV0ZGV2X2R1bW15KDApO1xuLVx0XHRpZiAoIWlycV9ncnAtXHUwMDNlbmFwaV9uZGV2KVxuLVx0XHRcdHJldHVybiAtRU5PTUVNO1xuJiM0MztcdFx0aWYgKCFpcnFfZ3JwLVx1MDAzZW5hcGlfbmRldikge1xuJiM0MztcdFx0XHRyZXQgPSAtRU5PTUVNO1xuJiM0MztcdFx0XHRpcnFfZ3JwLVx1MDAzZW51bV9pcnEgPSAwO1xuJiM0MztcdFx0XHRnb3RvIGVycl9yZXF1ZXN0X2lycTtcbiYjNDM7XHRcdH1cbiBcbiBcdFx0bmV0aWZfbmFwaV9hZGQoaXJxX2dycC1cdTAwM2VuYXBpX25kZXYsIFx1MDAyNmlycV9ncnAtXHUwMDNlbmFwaSxcbiBcdFx0XHQgICAgICAgYXRoMTFrX2FoYl9leHRfZ3JwX25hcGlfcG9sbCk7XG5AQCAtNTg1LDkgJiM0Mzs1OTgsNyBAQCBzdGF0aWMgaW50IGF0aDExa19haGJfY29uZmlnX2V4dF9pcnEoc3RydWN0IGF0aDExa19iYXNlICphYilcbiBcdFx0XHRcdH1cbiBcdFx0XHR9XG4gXHRcdH1cbi1cdFx0aXJxX2dycC1cdTAwM2VudW1faXJxID0gbnVtX2lycTtcbi1cbi1cdFx0Zm9yIChqID0gMDsgaiBcdTAwM2MgaXJxX2dycC1cdTAwM2VudW1faXJxOyBqJiM0MzsmIzQzOykge1xuJiM0MztcdFx0Zm9yIChqID0gMDsgaiBcdTAwM2MgbnVtX2lycTsgaiYjNDM7JiM0MzspIHtcbiBcdFx0XHRpbnQgaXJxX2lkeCA9IGlycV9ncnAtXHUwMDNlaXJxc1tqXTtcbiBcbiBcdFx0XHRpcnEgPSBwbGF0Zm9ybV9nZXRfaXJxX2J5bmFtZShhYi1cdTAwM2VwZGV2LFxuQEAgLTYwMCwxMSAmIzQzOzYxMSwyMyBAQCBzdGF0aWMgaW50IGF0aDExa19haGJfY29uZmlnX2V4dF9pcnEoc3RydWN0IGF0aDExa19iYXNlICphYilcbiBcdFx0XHRpZiAocmV0KSB7XG4gXHRcdFx0XHRhdGgxMWtfZXJyKGFiLCBcJiMzNDtmYWlsZWQgcmVxdWVzdF9pcnEgZm9yICVkXFxuXCYjMzQ7LFxuIFx0XHRcdFx0XHQgICBpcnEpO1xuJiM0MztcdFx0XHRcdGlycV9ncnAtXHUwMDNlbnVtX2lycSA9IGo7XG4mIzQzO1x0XHRcdFx0YXRoMTFrX2FoYl9mcmVlX2V4dF9pcnFfZ3JwKGFiLCBpcnFfZ3JwKTtcbiYjNDM7XHRcdFx0XHRnb3RvIGVycl9yZXF1ZXN0X2lycTtcbiBcdFx0XHR9XG4gXHRcdH1cbiYjNDM7XG4mIzQzO1x0XHRpcnFfZ3JwLVx1MDAzZW51bV9pcnEgPSBudW1faXJxO1xuIFx0fVxuIFxuIFx0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztlcnJfcmVxdWVzdF9pcnE6XG4mIzQzO1x0Zm9yIChpLS07IGkgXHUwMDNlPSAwOyBpLS0pIHtcbiYjNDM7XHRcdGlycV9ncnAgPSBcdTAwMjZhYi1cdTAwM2VleHRfaXJxX2dycFtpXTtcbiYjNDM7XHRcdGF0aDExa19haGJfZnJlZV9leHRfaXJxX2dycChhYiwgaXJxX2dycCk7XG4mIzQzO1x0fVxuJiM0MztcdHJldHVybiByZXQ7XG4gfVxuIFxuIHN0YXRpYyBpbnQgYXRoMTFrX2FoYl9jb25maWdfaXJxKHN0cnVjdCBhdGgxMWtfYmFzZSAqYWIpXG5AQCAtNjI5LDE2ICYjNDM7NjUyLDI0IEBAIHN0YXRpYyBpbnQgYXRoMTFrX2FoYl9jb25maWdfaXJxKHN0cnVjdCBhdGgxMWtfYmFzZSAqYWIpXG4gXHRcdHJldCA9IHJlcXVlc3RfaXJxKGlycSwgYXRoMTFrX2FoYl9jZV9pbnRlcnJ1cHRfaGFuZGxlcixcbiBcdFx0XHRcdCAgSVJRRl9UUklHR0VSX1JJU0lORywgaXJxX25hbWVbaXJxX2lkeF0sXG4gXHRcdFx0XHQgIGNlX3BpcGUpO1xuLVx0XHRpZiAocmV0KVxuJiM0MztcdFx0aWYgKHJldCkge1xuJiM0MztcdFx0XHRhdGgxMWtfZXJyKGFiLCBcJiMzNDtmYWlsZWQgcmVxdWVzdF9pcnEgZm9yICVkXFxuXCYjMzQ7LCBpcnEpO1xuJiM0MztcdFx0XHRhdGgxMWtfYWhiX2ZyZWVfY2VfaXJxcyhhYiwgaSk7XG4gXHRcdFx0cmV0dXJuIHJldDtcbiYjNDM7XHRcdH1cbiBcbiBcdFx0YWItXHUwMDNlaXJxX251bVtpcnFfaWR4XSA9IGlycTtcbiBcdH1cbiBcbiBcdC8qIENvbmZpZ3VyZSBleHRlcm5hbCBpbnRlcnJ1cHRzICovXG4gXHRyZXQgPSBhdGgxMWtfYWhiX2NvbmZpZ19leHRfaXJxKGFiKTtcbiYjNDM7XHRpZiAocmV0KSB7XG4mIzQzO1x0XHRhdGgxMWtfZXJyKGFiLCBcJiMzNDtmYWlsZWQgdG8gY29uZmlndXJlIGV4dCBpcnE6ICVkXFxuXCYjMzQ7LCByZXQpO1xuJiM0MztcdFx0YXRoMTFrX2FoYl9mcmVlX2NlX2lycXMoYWIsIGFiLVx1MDAzZWh3X3BhcmFtcy5jZV9jb3VudCk7XG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcdH1cbiBcbi1cdHJldHVybiByZXQ7XG4mIzQzO1x0cmV0dXJuIDA7XG4gfVxuIFxuIHN0YXRpYyBpbnQgYXRoMTFrX2FoYl9tYXBfc2VydmljZV90b19waXBlKHN0cnVjdCBhdGgxMWtfYmFzZSAqYWIsIHUxNiBzZXJ2aWNlX2lkLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI0IDA1OjE0PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBlcnJvciBoYW5kbGluZyBpbiB0aGUgcHJvYmUgcGF0aCBvZiB0aGUgYXRoMTFrIEFIQiBwbGF0Zm9ybSBkcml2ZXIgKGF0aDExa19haGIpLiBUaGlzIGRyaXZlciByZXF1aXJlcyBzcGVjaWZpYyBRdWFsY29tbSBTb0MgaGFyZHdhcmUgKGUuZy4sIElQUTgwNzQsIElQUTYwMTgpIGFuZCBiaW5kcyB2aWEgZGV2aWNlIHRyZWUgY29tcGF0aWJsZSBzdHJpbmdzLiBTaW5jZSBzeXprYWxsZXIgb3BlcmF0ZXMgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIChRRU1VL0dDRSkgd2l0aG91dCB0aGVzZSBzcGVjaWZpYyBoYXJkd2FyZSBub2RlcyBpbiB0aGUgZGV2aWNlIHRyZWUsIGFuZCB0aGVyZSBpcyBubyBtZWNoYW5pc20gdG8gaW5qZWN0IGFyYml0cmFyeSBwbGF0Zm9ybSBkZXZpY2VzIHdpdGggc3BlY2lmaWMgbWVtb3J5L0lSUSByZXNvdXJjZXMsIHRoaXMgY29kZSBwYXRoIGlzIHVucmVhY2hhYmxlIGFuZCBjYW5ub3QgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLApldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXQKICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LAogICBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMWU4MjVjNjNkMGMxMzYyZjM2MjViMGUzMDUwZTQwZGUwM2FmMWZjNApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBGcmkgSnVsIDI0IDA1OjE0OjA0IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9haGIuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvYWhiLmMKaW5kZXggZjU2NmQ2OTlkMDc0YTguLmJkZjUzYWE3ZGRmMWY1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2FoYi5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvYWhiLmMKQEAgLTQzMSwzNiAmIzQzOzQzMSw0NCBAQCBzdGF0aWMgdm9pZCBhdGgxMWtfYWhiX2luaXRfcW1pX2NlX2NvbmZpZyhzdHJ1Y3QgYXRoMTFrX2Jhc2UgKmFiKQogCWFiLSZndDtxbWkuc2VydmljZV9pbnNfaWQgPSBhYi0mZ3Q7aHdfcGFyYW1zLnFtaV9zZXJ2aWNlX2luc19pZDsKIH0KIAotc3RhdGljIHZvaWQgYXRoMTFrX2FoYl9mcmVlX2V4dF9pcnEoc3RydWN0IGF0aDExa19iYXNlICphYikKJiM0MztzdGF0aWMgdm9pZCBhdGgxMWtfYWhiX2ZyZWVfZXh0X2lycV9ncnAoc3RydWN0IGF0aDExa19iYXNlICphYiwKJiM0MzsJCQkJICAgICAgc3RydWN0IGF0aDExa19leHRfaXJxX2dycCAqaXJxX2dycCkKIHsKLQlpbnQgaSwgajsKLQotCWZvciAoaSA9IDA7IGkgJmx0OyBBVEgxMUtfRVhUX0lSUV9HUlBfTlVNX01BWDsgaSYjNDM7JiM0MzspIHsKLQkJc3RydWN0IGF0aDExa19leHRfaXJxX2dycCAqaXJxX2dycCA9ICZhbXA7YWItJmd0O2V4dF9pcnFfZ3JwW2ldOwomIzQzOwlpbnQgajsKIAotCQlmb3IgKGogPSAwOyBqICZsdDsgaXJxX2dycC0mZ3Q7bnVtX2lycTsgaiYjNDM7JiM0MzspCi0JCQlmcmVlX2lycShhYi0mZ3Q7aXJxX251bVtpcnFfZ3JwLSZndDtpcnFzW2pdXSwgaXJxX2dycCk7CiYjNDM7CWZvciAoaiA9IDA7IGogJmx0OyBpcnFfZ3JwLSZndDtudW1faXJxOyBqJiM0MzsmIzQzOykKJiM0MzsJCWZyZWVfaXJxKGFiLSZndDtpcnFfbnVtW2lycV9ncnAtJmd0O2lycXNbal1dLCBpcnFfZ3JwKTsKIAotCQluZXRpZl9uYXBpX2RlbCgmYW1wO2lycV9ncnAtJmd0O25hcGkpOwotCQlmcmVlX25ldGRldihpcnFfZ3JwLSZndDtuYXBpX25kZXYpOwotCX0KJiM0MzsJbmV0aWZfbmFwaV9kZWwoJmFtcDtpcnFfZ3JwLSZndDtuYXBpKTsKJiM0MzsJZnJlZV9uZXRkZXYoaXJxX2dycC0mZ3Q7bmFwaV9uZGV2KTsKIH0KIAotc3RhdGljIHZvaWQgYXRoMTFrX2FoYl9mcmVlX2lycShzdHJ1Y3QgYXRoMTFrX2Jhc2UgKmFiKQomIzQzO3N0YXRpYyB2b2lkIGF0aDExa19haGJfZnJlZV9leHRfaXJxKHN0cnVjdCBhdGgxMWtfYmFzZSAqYWIpCiB7Ci0JaW50IGlycV9pZHg7CiAJaW50IGk7CiAKLQlpZiAoYWItJmd0O2h3X3BhcmFtcy5oeWJyaWRfYnVzX3R5cGUpCi0JCXJldHVybiBhdGgxMWtfcGNpY19mcmVlX2lycShhYik7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBBVEgxMUtfRVhUX0lSUV9HUlBfTlVNX01BWDsgaSYjNDM7JiM0MzspCiYjNDM7CQlhdGgxMWtfYWhiX2ZyZWVfZXh0X2lycV9ncnAoYWIsICZhbXA7YWItJmd0O2V4dF9pcnFfZ3JwW2ldKTsKJiM0Mzt9CiAKLQlmb3IgKGkgPSAwOyBpICZsdDsgYWItJmd0O2h3X3BhcmFtcy5jZV9jb3VudDsgaSYjNDM7JiM0MzspIHsKJiM0MztzdGF0aWMgdm9pZCBhdGgxMWtfYWhiX2ZyZWVfY2VfaXJxcyhzdHJ1Y3QgYXRoMTFrX2Jhc2UgKmFiLCBpbnQgbWF4X2lkeCkKJiM0Mzt7CiYjNDM7CWludCBpcnFfaWR4LCBpOwomIzQzOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgbWF4X2lkeDsgaSYjNDM7JiM0MzspIHsKIAkJaWYgKGF0aDExa19jZV9nZXRfYXR0cl9mbGFncyhhYiwgaSkgJmFtcDsgQ0VfQVRUUl9ESVNfSU5UUikKIAkJCWNvbnRpbnVlOwogCQlpcnFfaWR4ID0gQVRIMTFLX0lSUV9DRTBfT0ZGU0VUICYjNDM7IGk7CiAJCWZyZWVfaXJxKGFiLSZndDtpcnFfbnVtW2lycV9pZHhdLCAmYW1wO2FiLSZndDtjZS5jZV9waXBlW2ldKTsKIAl9CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIGF0aDExa19haGJfZnJlZV9pcnEoc3RydWN0IGF0aDExa19iYXNlICphYikKJiM0Mzt7CiYjNDM7CWlmIChhYi0mZ3Q7aHdfcGFyYW1zLmh5YnJpZF9idXNfdHlwZSkKJiM0MzsJCXJldHVybiBhdGgxMWtfcGNpY19mcmVlX2lycShhYik7CiAKJiM0MzsJYXRoMTFrX2FoYl9mcmVlX2NlX2lycXMoYWIsIGFiLSZndDtod19wYXJhbXMuY2VfY291bnQpOwogCWF0aDExa19haGJfZnJlZV9leHRfaXJxKGFiKTsKIH0KIApAQCAtNTI0LDIwICYjNDM7NTMyLDI1IEBAIHN0YXRpYyBpcnFyZXR1cm5fdCBhdGgxMWtfYWhiX2V4dF9pbnRlcnJ1cHRfaGFuZGxlcihpbnQgaXJxLCB2b2lkICphcmcpCiBzdGF0aWMgaW50IGF0aDExa19haGJfY29uZmlnX2V4dF9pcnEoc3RydWN0IGF0aDExa19iYXNlICphYikKIHsKIAlzdHJ1Y3QgYXRoMTFrX2h3X3BhcmFtcyAqaHcgPSAmYW1wO2FiLSZndDtod19wYXJhbXM7CiYjNDM7CXN0cnVjdCBhdGgxMWtfZXh0X2lycV9ncnAgKmlycV9ncnA7CiAJaW50IGksIGo7CiAJaW50IGlycTsKIAlpbnQgcmV0OwogCiAJZm9yIChpID0gMDsgaSAmbHQ7IEFUSDExS19FWFRfSVJRX0dSUF9OVU1fTUFYOyBpJiM0MzsmIzQzOykgewotCQlzdHJ1Y3QgYXRoMTFrX2V4dF9pcnFfZ3JwICppcnFfZ3JwID0gJmFtcDthYi0mZ3Q7ZXh0X2lycV9ncnBbaV07CiAJCXUzMiBudW1faXJxID0gMDsKIAomIzQzOwkJaXJxX2dycCA9ICZhbXA7YWItJmd0O2V4dF9pcnFfZ3JwW2ldOwomIzQzOwogCQlpcnFfZ3JwLSZndDthYiA9IGFiOwogCQlpcnFfZ3JwLSZndDtncnBfaWQgPSBpOwogCiAJCWlycV9ncnAtJmd0O25hcGlfbmRldiA9IGFsbG9jX25ldGRldl9kdW1teSgwKTsKLQkJaWYgKCFpcnFfZ3JwLSZndDtuYXBpX25kZXYpCi0JCQlyZXR1cm4gLUVOT01FTTsKJiM0MzsJCWlmICghaXJxX2dycC0mZ3Q7bmFwaV9uZGV2KSB7CiYjNDM7CQkJcmV0ID0gLUVOT01FTTsKJiM0MzsJCQlpcnFfZ3JwLSZndDtudW1faXJxID0gMDsKJiM0MzsJCQlnb3RvIGVycl9yZXF1ZXN0X2lycTsKJiM0MzsJCX0KIAogCQluZXRpZl9uYXBpX2FkZChpcnFfZ3JwLSZndDtuYXBpX25kZXYsICZhbXA7aXJxX2dycC0mZ3Q7bmFwaSwKIAkJCSAgICAgICBhdGgxMWtfYWhiX2V4dF9ncnBfbmFwaV9wb2xsKTsKQEAgLTU4NSw5ICYjNDM7NTk4LDcgQEAgc3RhdGljIGludCBhdGgxMWtfYWhiX2NvbmZpZ19leHRfaXJxKHN0cnVjdCBhdGgxMWtfYmFzZSAqYWIpCiAJCQkJfQogCQkJfQogCQl9Ci0JCWlycV9ncnAtJmd0O251bV9pcnEgPSBudW1faXJxOwotCi0JCWZvciAoaiA9IDA7IGogJmx0OyBpcnFfZ3JwLSZndDtudW1faXJxOyBqJiM0MzsmIzQzOykgewomIzQzOwkJZm9yIChqID0gMDsgaiAmbHQ7IG51bV9pcnE7IGomIzQzOyYjNDM7KSB7CiAJCQlpbnQgaXJxX2lkeCA9IGlycV9ncnAtJmd0O2lycXNbal07CiAKIAkJCWlycSA9IHBsYXRmb3JtX2dldF9pcnFfYnluYW1lKGFiLSZndDtwZGV2LApAQCAtNjAwLDExICYjNDM7NjExLDIzIEBAIHN0YXRpYyBpbnQgYXRoMTFrX2FoYl9jb25maWdfZXh0X2lycShzdHJ1Y3QgYXRoMTFrX2Jhc2UgKmFiKQogCQkJaWYgKHJldCkgewogCQkJCWF0aDExa19lcnIoYWIsICYjMzQ7ZmFpbGVkIHJlcXVlc3RfaXJxIGZvciAlZFxuJiMzNDssCiAJCQkJCSAgIGlycSk7CiYjNDM7CQkJCWlycV9ncnAtJmd0O251bV9pcnEgPSBqOwomIzQzOwkJCQlhdGgxMWtfYWhiX2ZyZWVfZXh0X2lycV9ncnAoYWIsIGlycV9ncnApOwomIzQzOwkJCQlnb3RvIGVycl9yZXF1ZXN0X2lycTsKIAkJCX0KIAkJfQomIzQzOwomIzQzOwkJaXJxX2dycC0mZ3Q7bnVtX2lycSA9IG51bV9pcnE7CiAJfQogCiAJcmV0dXJuIDA7CiYjNDM7CiYjNDM7ZXJyX3JlcXVlc3RfaXJxOgomIzQzOwlmb3IgKGktLTsgaSAmZ3Q7PSAwOyBpLS0pIHsKJiM0MzsJCWlycV9ncnAgPSAmYW1wO2FiLSZndDtleHRfaXJxX2dycFtpXTsKJiM0MzsJCWF0aDExa19haGJfZnJlZV9leHRfaXJxX2dycChhYiwgaXJxX2dycCk7CiYjNDM7CX0KJiM0MzsJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIGludCBhdGgxMWtfYWhiX2NvbmZpZ19pcnEoc3RydWN0IGF0aDExa19iYXNlICphYikKQEAgLTYyOSwxNiAmIzQzOzY1MiwyNCBAQCBzdGF0aWMgaW50IGF0aDExa19haGJfY29uZmlnX2lycShzdHJ1Y3QgYXRoMTFrX2Jhc2UgKmFiKQogCQlyZXQgPSByZXF1ZXN0X2lycShpcnEsIGF0aDExa19haGJfY2VfaW50ZXJydXB0X2hhbmRsZXIsCiAJCQkJICBJUlFGX1RSSUdHRVJfUklTSU5HLCBpcnFfbmFtZVtpcnFfaWR4XSwKIAkJCQkgIGNlX3BpcGUpOwotCQlpZiAocmV0KQomIzQzOwkJaWYgKHJldCkgewomIzQzOwkJCWF0aDExa19lcnIoYWIsICYjMzQ7ZmFpbGVkIHJlcXVlc3RfaXJxIGZvciAlZFxuJiMzNDssIGlycSk7CiYjNDM7CQkJYXRoMTFrX2FoYl9mcmVlX2NlX2lycXMoYWIsIGkpOwogCQkJcmV0dXJuIHJldDsKJiM0MzsJCX0KIAogCQlhYi0mZ3Q7aXJxX251bVtpcnFfaWR4XSA9IGlycTsKIAl9CiAKIAkvKiBDb25maWd1cmUgZXh0ZXJuYWwgaW50ZXJydXB0cyAqLwogCXJldCA9IGF0aDExa19haGJfY29uZmlnX2V4dF9pcnEoYWIpOwomIzQzOwlpZiAocmV0KSB7CiYjNDM7CQlhdGgxMWtfZXJyKGFiLCAmIzM0O2ZhaWxlZCB0byBjb25maWd1cmUgZXh0IGlycTogJWRcbiYjMzQ7LCByZXQpOwomIzQzOwkJYXRoMTFrX2FoYl9mcmVlX2NlX2lycXMoYWIsIGFiLSZndDtod19wYXJhbXMuY2VfY291bnQpOwomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsJfQogCi0JcmV0dXJuIHJldDsKJiM0MzsJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgYXRoMTFrX2FoYl9tYXBfc2VydmljZV90b19waXBlKHN0cnVjdCBhdGgxMWtfYmFzZSAqYWIsIHUxNiBzZXJ2aWNlX2lkLAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNCAwNToxNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzOTc2CgkJCQkJCQlvdXRwdXQ6IDIzCgkJCQkJCQl0aG91Z2h0czogMzYwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUmVhY2hhYmlsaXR5IG9mIGFuIElSUSBDb25maWd1cmF0aW9uIEZpeCoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBnb3QgdGhpcyBwYXRjaCB0aGF0IGFkZHJlc3NlcyBzb21lIGVycm9yIGhhbmRsaW5nIGluIHRoZSBgYXRoMTFrYCBkcml2ZXIsIHNwZWNpZmljYWxseSBjb25jZXJuaW5nIElSUSBjb25maWd1cmF0aW9uIG9uIHRoZSBBSEIgYnVzIChgZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9haGIuY2ApLiBJdCBsb29rcyBsaWtlIHRoZXkmIzM5O3JlIGNsZWFuaW5nIHVwIHJlcXVlc3RlZCBJUlFzIGFuZCBOQVBJIHN0cnVjdHVyZXMgd2hlbiBgcmVxdWVzdF9pcnFgIG9yIGBhbGxvY19uZXRkZXZfZHVtbXlgIGZhaWxzIGluIHRoZSBgYXRoMTFrX2FoYl9jb25maWdfZXh0X2lycWAgYW5kIGBhdGgxMWtfYWhiX2NvbmZpZ19pcnFgIGZ1bmN0aW9ucy4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIGNhbiBJIGV2ZW4gKnRyaWdnZXIqIHRoaXM/IEkgbmVlZCB0byBmaWd1cmUgb3V0IGlmIHRoaXMgY29kZSBpcyByZWFjaGFibGUgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCDigJMgc3BlY2lmaWNhbGx5LCBRRU1VIG9yIEdvb2dsZSBDb21wdXRlIEVuZ2luZS4KClRoaXMgYGF0aDExa2AgZHJpdmVyLCBhcyBJIHJlY2FsbCwgaXMgZm9yIFF1YWxjb21tIFdpLUZpIDYgKDgwMi4xMWF4KSBkZXZpY2VzLiBVc3VhbGx5LCB0aGF0IG1lYW5zIHNwZWNpYWxpemVkIFBDSSBvciBBSEIgaGFyZHdhcmUuIEdpdmVuIHRoaXMgaXMgc3BlY2lmaWNhbGx5IHRoZSBBSEIgYnVzLCBpdCYjMzk7cyB2ZXJ5IGxpa2VseSB0YXJnZXRpbmcgU29DcyBsaWtlIElQUTgwNzQgb3IgSVBRNjAxOCwgd2hpY2ggaXMgd2hlcmUgdGhpbmdzIGdldCBpbnRlcmVzdGluZy4gQ2FuIEkgZnV6eiB0aGlzPyBTeXprYWxsZXImIzM5O3MgZ3JlYXQgZm9yIFBDSSBkZXZpY2VzIHVzaW5nIHZQQ0ksIGJ1dCBBSEIgaXMgdXN1YWxseSBhIHBsYXRmb3JtIGRldmljZSB0eXBlLiBTbywgaXMgdGhlcmUgYSB3YXkgdG8gZGVzY3JpYmUgaXQgdG8gU3l6a2FsbGVyPwoKTXkgbmV4dCBzdGVwIGlzIHRvIHNlZSBpZiB0aGVyZSBhcmUgYW55IFN5emthbGxlciBkZXNjcmlwdGlvbnMgZm9yIGBhdGgxMWtgIHBsYXRmb3JtIGRldmljZXMsIG9yIGlmIHRoaXMgZHJpdmVyIGlzIHB1cmVseSBkcml2ZW4gYnkgdGhlIGRldmljZSB0cmVlLiBJZiBpdOKAmXMgYSBwbGF0Zm9ybSBkcml2ZXIsIFN5emthbGxlciAqbWlnaHQqIGJlIGFibGUgdG8gY3JlYXRlIHRoZSBwbGF0Zm9ybSBkZXZpY2VzIGlmIHRoZXJlIGFyZSBkZXNjcmlwdGlvbnMuIE90aGVyd2lzZSwgaXTigJlzIHByb2JhYmx5IGdvaW5nIHRvIGJlIHVucmVhY2hhYmxlIHVubGVzcyBJJiMzOTttIG9uIGEgc3BlY2lmaWMgQVJNIGJvYXJkIHRoYXQgaGFzIHRoZSBoYXJkd2FyZSBkZWZpbmVkLiBJIHNob3VsZCBwcm9iYWJseSBncmVwIGZvciBzb21ldGhpbmcgbGlrZSBgYXRoMTFrX2FoYl9wcm9iZWAgb3IgYSBzaW1pbGFyIHByb2JlIGZ1bmN0aW9uIHRvIGNvbmZpcm0gdGhlIGRyaXZlciYjMzk7cyBwbGF0Zm9ybSBuYXR1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjQgMDU6MTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YXRoMTFrX2FoYl9wcm9iZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2FoYi5jPTExMDM9c3RhdGljIGludCBhdGgxMWtfYWhiX2Z3X3Jlc291cmNlX2RlaW5pdChzdHJ1Y3QgYXRoMTFrX2Jhc2UgKmFiKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvYWhiLmMtMTEzNy1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvYWhiLmM6MTEzODpzdGF0aWMgaW50IGF0aDExa19haGJfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvYWhiLmMtMTEzOS17XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9haGIuYz0xMzMzPXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGF0aDExa19haGJfZHJpdmVyID0ge1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvYWhiLmMtMTMzNy1cdH0sXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2FoYi5jOjEzMzg6XHQucHJvYmUgPSBhdGgxMWtfYWhiX3Byb2JlLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9haGIuYy0xMzM5LVx0LnJlbW92ZSA9IGF0aDExa19haGJfcmVtb3ZlLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI0IDA1OjE0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUwODAKCQkJCQkJCW91dHB1dDogMjYKCQkJCQkJCXRob3VnaHRzOiAyMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0JiMzOTtzIGludGVybmFsIG1vbm9sb2d1ZToKCioqUGxhdGZvcm0gRHJpdmVyIEFuYWx5c2lzKioKClJpZ2h0LCB0aGlzIGxvb2tzIGxpa2Ugd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBhIHBsYXRmb3JtIGRyaXZlci4gVGhlIGZpcnN0IHRoaW5nIEkgd2FudCB0byBkbyBpcyBzZWUgaWYgU3l6a2FsbGVyIGhhcyBhbnkgcHJlZGVmaW5lZCBkZXNjcmlwdGlvbnMgZm9yIGl0LiBUaGF0JiMzOTtzIGFsd2F5cyBteSBzdGFydGluZyBwb2ludC4gU2F2ZXMgYSB0b24gb2YgdGltZSBpZiBzb21lb25lJiMzOTtzIGFscmVhZHkgZG9uZSB0aGUgaGVhdnkgbGlmdGluZyBhbmQgaWRlbnRpZmllZCByZWxldmFudCBzeXNjYWxscyBhbmQgZnV6emluZyB0YXJnZXRzLiBObyBuZWVkIHRvIHJlaW52ZW50IHRoZSB3aGVlbCwgZXNwZWNpYWxseSB3aGVuIFN5emthbGxlciYjMzk7cyBjb3ZlcmFnZSBpcyB1c3VhbGx5IHByZXR0eSBnb29kIGZvciBjb21tb24gcGxhdGZvcm0gZHJpdmVycy4gTGV0JiMzOTtzIGRpZyBpbiBhbmQgc2VlIHdoYXQmIzM5O3MgYXZhaWxhYmxlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI0IDA1OjE0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YXRoMTFrJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7c3lzLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjQgMDU6MTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTI3MQoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDI4OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipOYXZpZ2F0aW5nIHRoZSBTeXprYWxsZXIgTGFuZHNjYXBlKioKCk9rYXksIGhlcmUmIzM5O3MgdGhlIHNpdHVhdGlvbi4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IHRvIGFwcHJvYWNoIHRoaXMsIGJ1dCBmaXJzdCwgYSBjcml0aWNhbCBjb25zdHJhaW50IGp1bXBzIG91dC4gSSBjYW4mIzM5O3QgdXNlIGdyZXBwZXIgb24gYW55dGhpbmcgaW4gdGhlIGBzeXMvYCBkaXJlY3RvcnkuIFRoYXQmIzM5O3MgYSByZWQgZmxhZyDigJMgYSBoYXJkIHN0b3AuIFRoZSBwcm9tcHQgc3BlY2lmaWNhbGx5IGRpcmVjdHMgbWUgYXdheSBmcm9tIGBncmVwcGVyYCBhbmQgdG93YXJkcyBgcmVhZC1maWxlYCBvciBgY29kZXNlYXJjaC1kaXItaW5kZXhgIGluc3RlYWQuIEJ1dCB3YWl04oCmIHRoZSBpbnN0cnVjdGlvbnMgYWxzbyBtZW50aW9uIGEgYHt7LnRvb2xSZWFkRGVzY3JpcHRpb259fWAgdG9vbCwgd2hpY2ggaXMgc3VwcG9zZWQgdG8gaGFuZGxlIHRob3NlIGRlc2NyaXB0aW9ucy4gVGhhdCBzb3VuZHMgaWRlYWwsIGJ1dCB0aGVyZSYjMzk7cyBubyBzdWNoIHRvb2whIEl0JiMzOTtzIG5vdCBpbiB0aGUgbGlzdGVkIHRvb2xzLiBUaGF0JiMzOTtzIGNvbmZ1c2luZy4gVGhlIGF2YWlsYWJsZSB0b29scyBhcmUgYGdyZXBwZXJgLCBgY29kZXNlYXJjaC1kaXItaW5kZXhgLCBgcmVhZC1maWxlYCwgYW5kIGBzZXQtcmVzdWx0c2AsIHdoaWNoIGRvZXNuJiMzOTt0IHNlZW0gdG8gaGF2ZSB0aGUgcmVxdWlyZWQgZnVuY3Rpb25hbGl0eS4KCkFscmlnaHQsIG1vdmluZyBvbiwgcGxhdGZvcm0gZGV2aWNlcyBhcmUgYW5vdGhlciBjb25zaWRlcmF0aW9uLiBUeXBpY2FsbHksIHRoZXkgYXJlbiYjMzk7dCBkaXJlY3RseSBmdXp6ZWQgdW5sZXNzIGEgcHNldWRvLXN5c2NhbGwgb3IgYW4gaW5qZWN0aW9uIG1lY2hhbmlzbSBleGlzdHMuIE5vdywgZG9lcyBzeXprYWxsZXIgaGF2ZSBhIHdheSB0byBpbmplY3QgcGxhdGZvcm0gZGV2aWNlcyB2aWEgYC9zeXMvZGV2aWNlcy9wbGF0Zm9ybWAgb3Igc29tZXRoaW5nIHNpbWlsYXI/IEkgZG9uJiMzOTt0IHRoaW5rIHNvLiBJJiMzOTttIHVzdWFsbHkgZGVhbGluZyB3aXRoIHRoaW5ncyBsaWtlIGBzeXpfZGV2bGlua2Agb3Igc3BlY2lhbGl6ZWQgcHNldWRvLXN5c2NhbGxzIHRvIGhhbmRsZSB0aGlzLgoKU28sIGhlcmUmIzM5O3MgYSBzZXBhcmF0ZSBxdWVzdGlvbiB0aGF0IGp1c3QgcG9wcGVkIHVwLCBpcyBgYXRoMTFrYCBhY3R1YWxseSByZWFjaGFibGUgaW4gc3RhbmRhcmQgeDg2XzY0IHZpcnR1YWwgbWFjaGluZXM/IFRoYXQmIzM5O3MgYSBrZXkgZGV0YWlsIHRvIGNvbmZpcm0uIFNpbmNlIEFIQiBpcyBhIHByZXR0eSBzdGFuZGFyZCBBUk0tc3BlY2lmaWMgYnVzLCB0aGlzIG5lZWRzIHZlcmlmaWNhdGlvbi4gVGltZSB0byBkaXZlIGludG8gdGhlIGBkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL0tjb25maWdgIGZpbGUgdG8gY2hlY2sgb24gdGhpcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNCAwNToxNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgQVRIMTFLJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEJTRC0zLUNsYXVzZS1DbGVhclxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9LY29uZmlnOjI6Y29uZmlnIEFUSDExS1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9LY29uZmlnLTMtXHR0cmlzdGF0ZSBcJiMzNDtRdWFsY29tbSA4MDIuMTFheCBjaGlwc2V0IHN1cHBvcnRcJiMzNDtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL0tjb25maWctMTItXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL0tjb25maWc6MTM6Y29uZmlnIEFUSDExS19BSEJcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvS2NvbmZpZy0xNC1cdHRyaXN0YXRlIFwmIzM0O0F0aGVyb3MgYXRoMTFrIEFIQiBzdXBwb3J0XCYjMzQ7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9LY29uZmlnLTE5LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9LY29uZmlnOjIwOmNvbmZpZyBBVEgxMUtfUENJXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL0tjb25maWctMjEtXHR0cmlzdGF0ZSBcJiMzNDtBdGhlcm9zIGF0aDExayBQQ0kgc3VwcG9ydFwmIzM0O1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvS2NvbmZpZy0yOS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvS2NvbmZpZzozMDpjb25maWcgQVRIMTFLX0RFQlVHXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL0tjb25maWctMzEtXHRib29sIFwmIzM0O1FDQSBhdGgxMWsgZGVidWdnaW5nXCYjMzQ7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9LY29uZmlnLTM3LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9LY29uZmlnOjM4OmNvbmZpZyBBVEgxMUtfREVCVUdGU1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9LY29uZmlnLTM5LVx0Ym9vbCBcJiMzNDtRQ0EgYXRoMTFrIGRlYnVnZnMgc3VwcG9ydFwmIzM0O1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvS2NvbmZpZy00NS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvS2NvbmZpZzo0Njpjb25maWcgQVRIMTFLX1RSQUNJTkdcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvS2NvbmZpZy00Ny1cdGJvb2wgXCYjMzQ7YXRoMTFrIHRyYWNpbmcgc3VwcG9ydFwmIzM0O1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvS2NvbmZpZy01MS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvS2NvbmZpZzo1Mjpjb25maWcgQVRIMTFLX1NQRUNUUkFMXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL0tjb25maWctNTMtXHRib29sIFwmIzM0O1FDQSBhdGgxMWsgc3BlY3RyYWwgc2NhbiBzdXBwb3J0XCYjMzQ7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9LY29uZmlnLTYwLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9LY29uZmlnOjYxOmNvbmZpZyBBVEgxMUtfQ0ZSXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL0tjb25maWctNjItXHRib29sIFwmIzM0O2F0aDExayBjaGFubmVsIGZyZXF1ZW5jeSByZXNwb25zZSBzdXBwb3J0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjQgMDU6MTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjY0MwoJCQkJCQkJb3V0cHV0OiA0MQoJCQkJCQkJdGhvdWdodHM6IDE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqSW52ZXN0aWdhdGluZyBEZXBlbmRlbmNpZXMgb2YgQVRIMTFLX0FIQioqCgpPa2F5LCBzbyBJJiMzOTttIGRpdmluZyBpbnRvIHRoZSBgQVRIMTFLX0FIQmAgbW9kdWxlLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgJiMzNDtXaGF0JiMzOTtzIHRoaXMgdGhpbmcgYnVpbHQgb24/IFdoYXQgb3RoZXIgY29tcG9uZW50cyBpcyBpdCByZWxpYW50IHVwb24/JiMzNDsgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGZvdW5kYXRpb25hbCBkZXBlbmRlbmNpZXMuIEkgd2FudCB0byBidWlsZCBhIG1lbnRhbCBtYXAgb2YgaXRzIHJlbGF0aW9uc2hpcHMgd2l0aGluIHRoZSBicm9hZGVyIGtlcm5lbCBhcmNoaXRlY3R1cmUsIHlvdSBrbm93LCB0aGUgdXN1YWwgZmlyc3Qgc3RlcCB3aGVuIEkmIzM5O20gYXNzZXNzaW5nIGEgbmV3IHBpZWNlIG9mIGRyaXZlciBjb2RlIG9yIHRyb3VibGVzaG9vdGluZyBhIHJlbGF0ZWQgaXNzdWUuIExldCYjMzk7cyBzZWUgd2hhdCB0aGF0IGxvb2tzIGxpa2UuIEkmIzM5O20gZ29pbmcgdG8gc3RhcnQgZGlnZ2luZyBpbnRvIHRoZSBtYWtlZmlsZXMgYW5kIGluY2x1ZGUgc3RhdGVtZW50czsgbm90aGluZyBsaWtlIGEgYml0IG9mIGdyZXAgdG8gZ2V0IHRoZSBsYXkgb2YgdGhlIGxhbmQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI0IDA1OjE0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTMtQ2xhdXNlLUNsZWFyXG4gICAyOlx0Y29uZmlnIEFUSDExS1xuICAgMzpcdFx0dHJpc3RhdGUgXCYjMzQ7UXVhbGNvbW0gODAyLjExYXggY2hpcHNldCBzdXBwb3J0XCYjMzQ7XG4gICA0Olx0XHRkZXBlbmRzIG9uIE1BQzgwMjExIFx1MDAyNlx1MDAyNiBIQVNfRE1BXG4gICA1Olx0XHRzZWxlY3QgQVRIX0NPTU1PTlxuICAgNjpcdFx0c2VsZWN0IFFDT01fUU1JX0hFTFBFUlNcbiAgIDc6XHRcdGhlbHBcbiAgIDg6XHRcdCAgVGhpcyBtb2R1bGUgYWRkcyBzdXBwb3J0IGZvciBRdWFsY29tbSBUZWNobm9sb2dpZXMgODAyLjExYXggZmFtaWx5IG9mXG4gICA5Olx0XHQgIGNoaXBzZXRzLlxuICAxMDpcdFxuICAxMTpcdFx0ICBJZiB5b3UgY2hvb3NlIHRvIGJ1aWxkIGEgbW9kdWxlLCBpdCYjMzk7bGwgYmUgY2FsbGVkIGF0aDExay5cbiAgMTI6XHRcbiAgMTM6XHRjb25maWcgQVRIMTFLX0FIQlxuICAxNDpcdFx0dHJpc3RhdGUgXCYjMzQ7QXRoZXJvcyBhdGgxMWsgQUhCIHN1cHBvcnRcJiMzNDtcbiAgMTU6XHRcdGRlcGVuZHMgb24gQVRIMTFLXG4gIDE2Olx0XHRkZXBlbmRzIG9uIFJFTU9URVBST0NcbiAgMTc6XHRcdGhlbHBcbiAgMTg6XHRcdCAgVGhpcyBtb2R1bGUgYWRkcyBzdXBwb3J0IGZvciBBSEIgYnVzXG4gIDE5Olx0XG4gIDIwOlx0Y29uZmlnIEFUSDExS19QQ0lcbiAgMjE6XHRcdHRyaXN0YXRlIFwmIzM0O0F0aGVyb3MgYXRoMTFrIFBDSSBzdXBwb3J0XCYjMzQ7XG4gIDIyOlx0XHRkZXBlbmRzIG9uIEFUSDExSyBcdTAwMjZcdTAwMjYgUENJXG4gIDIzOlx0XHRzZWxlY3QgTUhJX0JVU1xuICAyNDpcdFx0c2VsZWN0IFFSVFJcbiAgMjU6XHRcdHNlbGVjdCBRUlRSX01ISVxuICAyNjpcdFx0c2VsZWN0IFBDSV9QV1JDVFJMX1BXUlNFUSBpZiBIQVZFX1BXUkNUUkxcbiAgMjc6XHRcdGhlbHBcbiAgMjg6XHRcdCAgVGhpcyBtb2R1bGUgYWRkcyBzdXBwb3J0IGZvciBQQ0lFIGJ1c1xuICAyOTpcdFxuICAzMDpcdGNvbmZpZyBBVEgxMUtfREVCVUdcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjQgMDU6MTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzI2NQoJCQkJCQkJb3V0cHV0OiA0NgoJCQkJCQkJdGhvdWdodHM6IDcxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgQVRIMTFLX0FIQiBEcml2ZXIqKgoKT2theSwgc28gYEFUSDExS19BSEJgIGlzIHBhcnQgb2YgdGhlIGBBVEgxMUtgIGZhbWlseSwgYW5kIGl0IHNlZW1zIHRvIHJlbHkgb24gYFJFTU9URVBST0NgIGFzIHdlbGwuIFRoYXQmIzM5O3MgZ29vZCB0byBrbm93LCBzZXRzIGEgZm91bmRhdGlvbiBmb3IgaG93IGl0IG9wZXJhdGVzLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZmlndXJlIG91dCB3aGV0aGVyIHRoaXMgcGFydGljdWxhciBBSEIgaW1wbGVtZW50YXRpb24gaGFzIGFueSBhcmNoaXRlY3R1cmFsIGNvbnN0cmFpbnRzLiBJIG5lZWQgdG8gZGV0ZXJtaW5lIGlmIGl0IGlzIHRpZWQgdG8gQVJNIHNwZWNpZmljYWxseSwgb3IgYW55IG90aGVyIENQVSBhcmNoaXRlY3R1cmUsIGZvciB0aGF0IG1hdHRlci4gTm93LCB3YWl0IGEgbWludXRlLCBBSELigKYgdGhhdCBzY3JlYW1zICYjMzQ7ZGV2aWNlIHRyZWUmIzM0OyB0byBtZSEgQUhCIGRldmljZXMgYXJlIHR5cGljYWxseSBkaXNjb3ZlcmVkIHRocm91Z2ggdGhlIGRldmljZSB0cmVlLCBzbyB0aGF0JiMzOTtzIHByb2JhYmx5IHRoZSBjcnVjaWFsIGVudHJ5IHBvaW50IGhlcmUuIEkgc2hvdWxkIGdvIHN0cmFpZ2h0IHRvIGBhdGgxMWtfYWhiX3Byb2JlYCBhbmQgc2VlIHdoYXQgaXQmIzM5O3MgZG9pbmcuIFRoYXQmIzM5O2xsIGJlIG15IHN0YXJ0aW5nIHBvaW50IGZvciB1bmRlcnN0YW5kaW5nIGl0cyBpbml0aWFsaXphdGlvbiBhbmQgc2V0dXAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI0IDA1OjE0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9haGIuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDExMzAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTEzMDpcdFx0aW9tbXVfZGV0YWNoX2RldmljZShpb21tdSwgYWJfYWhiLVx1MDAzZWZ3LmRldik7XG4xMTMxOlx0XHRpb21tdV9kb21haW5fZnJlZShpb21tdSk7XG4xMTMyOlx0XG4xMTMzOlx0XHRwbGF0Zm9ybV9kZXZpY2VfdW5yZWdpc3Rlcih0b19wbGF0Zm9ybV9kZXZpY2UoYWJfYWhiLVx1MDAzZWZ3LmRldikpO1xuMTEzNDpcdFxuMTEzNTpcdFx0cmV0dXJuIDA7XG4xMTM2Olx0fVxuMTEzNzpcdFxuMTEzODpcdHN0YXRpYyBpbnQgYXRoMTFrX2FoYl9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxuMTEzOTpcdHtcbjExNDA6XHRcdHN0cnVjdCBhdGgxMWtfYmFzZSAqYWI7XG4xMTQxOlx0XHRjb25zdCBzdHJ1Y3QgYXRoMTFrX2hpZl9vcHMgKmhpZl9vcHM7XG4xMTQyOlx0XHRjb25zdCBzdHJ1Y3QgYXRoMTFrX3BjaV9vcHMgKnBjaV9vcHM7XG4xMTQzOlx0XHRlbnVtIGF0aDExa19od19yZXYgaHdfcmV2O1xuMTE0NDpcdFx0aW50IHJldDtcbjExNDU6XHRcbjExNDY6XHRcdGh3X3JldiA9ICh1aW50cHRyX3QpZGV2aWNlX2dldF9tYXRjaF9kYXRhKFx1MDAyNnBkZXYtXHUwMDNlZGV2KTtcbjExNDc6XHRcbjExNDg6XHRcdHN3aXRjaCAoaHdfcmV2KSB7XG4xMTQ5Olx0XHRjYXNlIEFUSDExS19IV19JUFE4MDc0OlxuMTE1MDpcdFx0Y2FzZSBBVEgxMUtfSFdfSVBRNjAxOF9IVzEwOlxuMTE1MTpcdFx0Y2FzZSBBVEgxMUtfSFdfSVBRNTAxOF9IVzEwOlxuMTE1MjpcdFx0XHRoaWZfb3BzID0gXHUwMDI2YXRoMTFrX2FoYl9oaWZfb3BzX2lwcTgwNzQ7XG4xMTUzOlx0XHRcdHBjaV9vcHMgPSBOVUxMO1xuMTE1NDpcdFx0XHRicmVhaztcbjExNTU6XHRcdGNhc2UgQVRIMTFLX0hXX1dDTjY3NTBfSFcxMDpcbjExNTY6XHRcdFx0aGlmX29wcyA9IFx1MDAyNmF0aDExa19haGJfaGlmX29wc193Y242NzUwO1xuMTE1NzpcdFx0XHRwY2lfb3BzID0gXHUwMDI2YXRoMTFrX2FoYl9wY2lfb3BzX3djbjY3NTA7XG4xMTU4Olx0XHRcdGJyZWFrO1xuMTE1OTpcdFx0ZGVmYXVsdDpcbjExNjA6XHRcdFx0ZGV2X2VycihcdTAwMjZwZGV2LVx1MDAzZWRldiwgXCYjMzQ7dW5zdXBwb3J0ZWQgZGV2aWNlIHR5cGUgJWRcXG5cJiMzNDssIGh3X3Jldik7XG4xMTYxOlx0XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbjExNjI6XHRcdH1cbjExNjM6XHRcbjExNjQ6XHRcdHJldCA9IGRtYV9zZXRfbWFza19hbmRfY29oZXJlbnQoXHUwMDI2cGRldi1cdTAwM2VkZXYsIERNQV9CSVRfTUFTSygzMikpO1xuMTE2NTpcdFx0aWYgKHJldCkge1xuMTE2NjpcdFx0XHRkZXZfZXJyKFx1MDAyNnBkZXYtXHUwMDNlZGV2LCBcJiMzNDtmYWlsZWQgdG8gc2V0IDMyLWJpdCBjb25zaXN0ZW50IGRtYVxcblwmIzM0Oyk7XG4xMTY3Olx0XHRcdHJldHVybiByZXQ7XG4xMTY4Olx0XHR9XG4xMTY5Olx0XG4xMTcwOlx0XHRhYiA9IGF0aDExa19jb3JlX2FsbG9jKFx1MDAyNnBkZXYtXHUwMDNlZGV2LCBzaXplb2Yoc3RydWN0IGF0aDExa19haGIpLFxuMTE3MTpcdFx0XHRcdCAgICAgICBBVEgxMUtfQlVTX0FIQik7XG4xMTcyOlx0XHRpZiAoIWFiKSB7XG4xMTczOlx0XHRcdGRldl9lcnIoXHUwMDI2cGRldi1cdTAwM2VkZXYsIFwmIzM0O2ZhaWxlZCB0byBhbGxvY2F0ZSBhdGgxMWsgYmFzZVxcblwmIzM0Oyk7XG4xMTc0Olx0XHRcdHJldHVybiAtRU5PTUVNO1xuMTE3NTpcdFx0fVxuMTE3NjpcdFxuMTE3NzpcdFx0YWItXHUwMDNlaGlmLm9wcyA9IGhpZl9vcHM7XG4xMTc4Olx0XHRhYi1cdTAwM2VwZGV2ID0gcGRldjtcbjExNzk6XHRcdGFiLVx1MDAzZWh3X3JldiA9IGh3X3JldjtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjQgMDU6MTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODQ1NgoJCQkJCQkJb3V0cHV0OiA0NgoJCQkJCQkJdGhvdWdodHM6IDI4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyB0aGUgRGV2aWNlIFByb2JlIEZ1bmN0aW9uKioKCkFscmlnaHQsIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIHRoaXMgcHJvYmUgZnVuY3Rpb24sIGFuZCB0aGUgZmlyc3QgdGhpbmcgdGhhdCBjYXRjaGVzIG15IGV5ZSBpcyB0aGlzIGNhbGwgdG8gYGRldmljZV9nZXRfbWF0Y2hfZGF0YSgmYW1wO3BkZXYtJmd0O2RldilgLiBOYXR1cmFsbHksIEkmIzM5O20gaW1tZWRpYXRlbHkgdGhpbmtpbmcsICYjMzQ7T2theSwgbGV0JiMzOTtzIHNlZSBob3cgdGhlIGRyaXZlciBpbnRlcmFjdHMgd2l0aCB0aGUgZGV2aWNlIG1hdGNoaW5nIHRhYmxlLiYjMzQ7IEkgd2FudCB0byB1bmRlcnN0YW5kIGhvdyBpdCYjMzk7cyBpZGVudGlmeWluZyB0aGUgY29ycmVjdCBoYXJkd2FyZS4gV2hhdCBraW5kIG9mIG1hdGNoIGRhdGEgYXJlIHdlIGdldHRpbmc/IElzIGl0IHVzaW5nIHBsYXRmb3JtIGRldmljZSBJRHMsIGRldmljZSB0cmVlIGJpbmRpbmdzLCBBQ1BJIGRhdGEsIG9yIHNvbWUgY3VzdG9tIG1ldGhvZD8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHNwZWNpZmljcy4gTGV0JiMzOTtzIHRyYWNlIHRoaXMgYmFjayB0byB0aGUgbWF0Y2ggdGFibGUgYW5kIHNlZSB3aGF0JiMzOTtzIGJlaW5nIGxvb2tlZCBmb3IgYW5kIGhvdyB0aGUgaGFyZHdhcmUgaXMgYmVpbmcgaWRlbnRpZmllZCBhbmQgYXNzb2NpYXRlZCB3aXRoIHRoZSBkcml2ZXIuIEkgbmVlZCB0aGUgZnVsbCBwaWN0dXJlIHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgZHJpdmVyIGJpbmRzIHRvIHRoZSBoYXJkd2FyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjQgMDU6MTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2FoYi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTMyMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMzIwOlx0XHQgKi9cbjEzMjE6XHRcdGF0aDExa19haGJfcmVtb3ZlX3ByZXBhcmUoYWIpO1xuMTMyMjpcdFxuMTMyMzpcdFx0aWYgKCEodGVzdF9iaXQoQVRIMTFLX0ZMQUdfUkVHSVNURVJFRCwgXHUwMDI2YWItXHUwMDNlZGV2X2ZsYWdzKSkpXG4xMzI0Olx0XHRcdGdvdG8gZnJlZV9yZXNvdXJjZXM7XG4xMzI1Olx0XG4xMzI2Olx0XHRhdGgxMWtfY29yZV9kZWluaXQoYWIpO1xuMTMyNzpcdFxuMTMyODpcdGZyZWVfcmVzb3VyY2VzOlxuMTMyOTpcdFx0YXRoMTFrX2Z3X2Rlc3Ryb3koYWIpO1xuMTMzMDpcdFx0YXRoMTFrX2FoYl9mcmVlX3Jlc291cmNlcyhhYik7XG4xMzMxOlx0fVxuMTMzMjpcdFxuMTMzMzpcdHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGF0aDExa19haGJfZHJpdmVyID0ge1xuMTMzNDpcdFx0LmRyaXZlciA9IHtcbjEzMzU6XHRcdFx0Lm5hbWUgPSBcJiMzNDthdGgxMWtcJiMzNDssXG4xMzM2Olx0XHRcdC5vZl9tYXRjaF90YWJsZSA9IGF0aDExa19haGJfb2ZfbWF0Y2gsXG4xMzM3Olx0XHR9LFxuMTMzODpcdFx0LnByb2JlID0gYXRoMTFrX2FoYl9wcm9iZSxcbjEzMzk6XHRcdC5yZW1vdmUgPSBhdGgxMWtfYWhiX3JlbW92ZSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjQgMDU6MTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTAyOQoJCQkJCQkJb3V0cHV0OiAyNQoJCQkJCQkJdGhvdWdodHM6IDM5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoaXMgdGhvdWdodCBwcm9jZXNzLCBmcmFtZWQgaW4gdGhlIGZpcnN0IHBlcnNvbiwgYXMgaWYgdGhlc2Ugd2VyZSBteSBpbnRlcm5hbCBjb25zaWRlcmF0aW9ucywgYXNzdW1pbmcgSSYjMzk7bSBhbiBleHBlcnQ6CgoqKkludmVzdGlnYXRpbmcgdGhlIERhdGEgU3RydWN0dXJlIGBvZl9tYXRjaF90YWJsZWAqKgoKUmlnaHQsIHNvIHRoZSBjb2RlIGlzIHVzaW5nIGBvZl9tYXRjaF90YWJsZSA9IGF0aDExa19haGJfb2ZfbWF0Y2hgLiBPa2F5LCB0aGF0JiMzOTtzIGludGVyZXN0aW5nLiBJIGltbWVkaWF0ZWx5IHdhbnQgdG8gdW5kZXJzdGFuZCB3aGF0JiMzOTtzIGluIGBhdGgxMWtfYWhiX29mX21hdGNoYC4gSXQmIzM5O3MgbGlrZWx5IGEgdGFibGUsIGEgZGF0YSBzdHJ1Y3R1cmUgdGhhdCBkZWZpbmVzIGhvdyB0aGUgc3lzdGVtIHJlY29nbml6ZXMgYW5kIGhhbmRsZXMgZGV2aWNlcyB2aWEgdGhlIE9wZW4gRmlybXdhcmUgbWVjaGFuaXNtLiBQcm9iYWJseSBpdCBjb250YWlucyBpbmZvcm1hdGlvbiB0aGF0IG1hcHMgc3BlY2lmaWMgaGFyZHdhcmUgaWRlbnRpZmllcnMsIGxpa2UgdGhlIGRldmljZSBJRCBvciB2ZW5kb3IgSUQsIHRvIHRoZSBjb3JyZXNwb25kaW5nIGRyaXZlciBvciBtb2R1bGUgcmVzcG9uc2libGUgZm9yIG1hbmFnaW5nIHRoYXQgaGFyZHdhcmUuIEdpdmVuIHRoZSBjb250ZXh0LCBpdCYjMzk7cyBhbG1vc3QgY2VydGFpbmx5IHJlbGF0ZWQgdG8gdGhlIEFIQiBidXMgYW5kIGxpa2VseSBzcGVjaWZpY2FsbHkgZGVzaWduZWQgZm9yIGEgUXVhbGNvbW0gQXRoZXJvcyAxMWsgY2hpcC4gSSBuZWVkIHRvIGRpdmUgaW50byB0aGUgZGVmaW5pdGlvbiBvZiBgYXRoMTFrX2FoYl9vZl9tYXRjaGAgdG8gc2VlIHdoYXQgZmllbGRzIGl0IGNvbnRhaW5zOiBpcyBpdCB1c2luZyBjb21wYXRpYmxlIHN0cmluZ3MsIGRldmljZSBJRHMsIG9yIHNvbWUgb3RoZXIgaWRlbnRpZmllciB0byBtYXRjaCBhZ2FpbnN0PyBXaGF0IHByb3BlcnRpZXMgYXJlIHRoZXNlIG1hdGNoZXMgZXhwZWN0ZWQgdG8gY29udGFpbiwgYW5kIGhvdyBhcmUgdGhvc2UgcHJvcGVydGllcyBnb2luZyB0byBiZSB1c2VkPyBUaGlzIGlzIGtleSB0byB1bmRlcnN0YW5kaW5nIGhvdyB0aGUgZHJpdmVyIGtub3dzIGl0IG5lZWRzIHRvIGF0dGFjaCB0byB0aGlzIHNwZWNpZmljIGhhcmR3YXJlLiBMZXQmIzM5O3MgZGlnIGluIGFuZCBmaWd1cmUgb3V0IGV4YWN0bHkgd2hhdCBpdCYjMzk7cyB0cnlpbmcgdG8gbWF0Y2guCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI0IDA1OjE0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2F0aDExa19haGJfb2ZfbWF0Y2gmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9haGIuYy0yMy1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvYWhiLmM6MjQ6c3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgYXRoMTFrX2FoYl9vZl9tYXRjaFtdID0ge1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9haGIuYy0yNS1cdC8qIFRPRE86IFNob3VsZCB3ZSBjaGFuZ2UgdGhlIGNvbXBhdGlibGUgc3RyaW5nIHRvIHNvbWV0aGluZyBzaW1pbGFyXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9haGIuYy00Mi1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvYWhiLmM6NDM6TU9EVUxFX0RFVklDRV9UQUJMRShvZiwgYXRoMTFrX2FoYl9vZl9tYXRjaCk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2FoYi5jLTQ0LVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvYWhiLmM9MTMzMz1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBhdGgxMWtfYWhiX2RyaXZlciA9IHtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2FoYi5jLTEzMzUtXHRcdC5uYW1lID0gXCYjMzQ7YXRoMTFrXCYjMzQ7LFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9haGIuYzoxMzM2Olx0XHQub2ZfbWF0Y2hfdGFibGUgPSBhdGgxMWtfYWhiX29mX21hdGNoLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9haGIuYy0xMzM3LVx0fSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjQgMDU6MTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTczMQoJCQkJCQkJb3V0cHV0OiA0NAoJCQkJCQkJdGhvdWdodHM6IDE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHdoYXQmIzM5O3MgZ29pbmcgdGhyb3VnaCBteSBtaW5kIGFzIEkgYXBwcm9hY2ggdGhpcyB0YXNrLCBrZWVwaW5nIGluIG1pbmQgbXkgZXhwZXJ0aXNlOgoKKipEaXZpbmcgaW50byBgYXRoMTFrX2FoYl9vZl9tYXRjaGAqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGdldCBkb3duIHRvIGl0LiBgYXRoMTFrX2FoYl9vZl9tYXRjaGDigKYgU291bmRzIGxpa2Ugd2UmIzM5O3JlIGxvb2tpbmcgYXQgYSBwaWVjZSBvZiB0aGUgQXRoZXJvcyB3aXJlbGVzcyBkcml2ZXIgZm9yIEFIQiBidXMgaW50ZXJmYWNlcywgbGlrZWx5IGludm9sdmluZyBkZXZpY2UgdHJlZSBtYXRjaGluZy4gUmlnaHQgYXdheSwgbXkgbWluZCBzdGFydHMgZHJhd2luZyBjb25uZWN0aW9ucy4gSSYjMzk7bSB0aGlua2luZyBhYm91dCB0aGUgZGV2aWNlIHRyZWUgYmluZGluZ3MgZm9yIHRoaXMgaGFyZHdhcmUsIGFuZCBob3cgdGhpcyBmdW5jdGlvbiBsaWtlbHkgcGxheXMgYSBjcnVjaWFsIHJvbGUgaW4gcHJvYmluZyBhbmQgaW5pdGlhbGl6YXRpb24uIFRoaXMgaGludHMgYXQgdGhlIGxvdy1sZXZlbCBkZXZpY2UgZW51bWVyYXRpb24gcHJvY2VzcyBhbmQgaG93IHRoZSBkcml2ZXIgaWRlbnRpZmllcyBhbmQgYmluZHMgdG8gdGhlIHNwZWNpZmljIGhhcmR3YXJlIG9uIHRoZSBBSEIuIEkmIzM5O20gaW1hZ2luaW5nIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgcGxhdGZvcm0mIzM5O3MgZGV2aWNlIHRyZWUgc3RydWN0dXJlIHRvIG1ha2Ugc3VyZSBpdCYjMzk7cyB0aGUgcmlnaHQgZHJpdmVyIGZvciB0aGUgaWRlbnRpZmllZCBoYXJkd2FyZS4gV2hhdCYjMzk7cyBpdCBkb2luZyB3aXRoIHRoZSBkZXZpY2UgSUQsIGNvbXBhdGlibGUgc3RyaW5ncywgYW5kIGFueSBzcGVjaWZpYyBwcm9wZXJ0aWVzPyBJcyBpdCBoYW5kbGluZyByZXZpc2lvbnMsIG9yIGp1c3QgdGhlIGJhc2ljIG1hdGNoaW5nPyBUaW1lIHRvIGRpZyBpbiBhbmQgZmluZCBvdXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI0IDA1OjE0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9haGIuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDI0LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgMjQ6XHRzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBhdGgxMWtfYWhiX29mX21hdGNoW10gPSB7XG4gIDI1Olx0XHQvKiBUT0RPOiBTaG91bGQgd2UgY2hhbmdlIHRoZSBjb21wYXRpYmxlIHN0cmluZyB0byBzb21ldGhpbmcgc2ltaWxhclxuICAyNjpcdFx0ICogdG8gb25lIHRoYXQgYXRoMTBrIHVzZXM/XG4gIDI3Olx0XHQgKi9cbiAgMjg6XHRcdHsgLmNvbXBhdGlibGUgPSBcJiMzNDtxY29tLGlwcTgwNzQtd2lmaVwmIzM0OyxcbiAgMjk6XHRcdCAgLmRhdGEgPSAodm9pZCAqKUFUSDExS19IV19JUFE4MDc0LFxuICAzMDpcdFx0fSxcbiAgMzE6XHRcdHsgLmNvbXBhdGlibGUgPSBcJiMzNDtxY29tLGlwcTYwMTgtd2lmaVwmIzM0OyxcbiAgMzI6XHRcdCAgLmRhdGEgPSAodm9pZCAqKUFUSDExS19IV19JUFE2MDE4X0hXMTAsXG4gIDMzOlx0XHR9LFxuICAzNDpcdFx0eyAuY29tcGF0aWJsZSA9IFwmIzM0O3Fjb20sd2NuNjc1MC13aWZpXCYjMzQ7LFxuICAzNTpcdFx0ICAuZGF0YSA9ICh2b2lkICopQVRIMTFLX0hXX1dDTjY3NTBfSFcxMCxcbiAgMzY6XHRcdH0sXG4gIDM3Olx0XHR7IC5jb21wYXRpYmxlID0gXCYjMzQ7cWNvbSxpcHE1MDE4LXdpZmlcJiMzNDssXG4gIDM4Olx0XHQgIC5kYXRhID0gKHZvaWQgKilBVEgxMUtfSFdfSVBRNTAxOF9IVzEwLFxuICAzOTpcdFx0fSxcbiAgNDA6XHRcdHsgfVxuICA0MTpcdH07XG4gIDQyOlx0XG4gIDQzOlx0TU9EVUxFX0RFVklDRV9UQUJMRShvZiwgYXRoMTFrX2FoYl9vZl9tYXRjaCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI0IDA1OjE0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwMzg4CgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogNDMwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUmVhY2hhYmlsaXR5IG9mIFRoaXMgUGxhdGZvcm0gRHJpdmVyKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBsYXRmb3JtIGRyaXZlciwgYW5kIGl0JiMzOTtzIGNsZWFybHkgdGllZCB0byBzcGVjaWZpYyBkZXZpY2UgdHJlZSBub2RlcyDigJMgYHFjb20saXBxODA3NC13aWZpYCwgdGhhdCBraW5kIG9mIHRoaW5nLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgJiMzNDtJbiBhIHR5cGljYWwgc3l6a2FsbGVyIHNldHVwIOKAkyB4ODZfNjQsIEdDRS9RRU1VLCB0aGUgdXN1YWwg4oCTIHRoZXJlICphcmVuJiMzOTt0KiB0aGVzZSBkZXZpY2UgdHJlZSBub2Rlcy4mIzM0OyBTeXprYWxsZXIsIGFzIGZhciBhcyBJIHVuZGVyc3RhbmQgaXQsIGRvZXNuJiMzOTt0IGhhdmUgYSBidWlsdC1pbiBnZW5lcmljIG1lY2hhbmlzbSB0byBqdXN0ICppbmplY3QqIGFyYml0cmFyeSBwbGF0Zm9ybSBkZXZpY2VzIHdpdGggYW55IG9sZCBPRiBjb21wYXRpYmxlIHN0cmluZyB1bmxlc3MgdGhlcmUmIzM5O3MgYSByZWFsbHkgc3BlY2lmaWMgcHNldWRvLXN5c2NhbGwgZGVzaWduZWQgZm9yIGl0LCBsaWtlIGEgYHN5el9kZXZsaW5rYCB0eXBlIG9mIHRoaW5nLCBvciBtYXliZSBzb21ldGhpbmcgdXNpbmcgYHN5el9wbGF0Zm9ybV9kZXZpY2VfYWRkYC4gV2FpdCBhIG1pbnV0ZSwgZG9lc24mIzM5O3Qgc3l6a2FsbGVyICp1c3VhbGx5KiB1c2Ugc29tZXRoaW5nIGxpa2UgYHN5el9wbGF0Zm9ybV9kZXZpY2VfYWRkYCBvciBzaW1pbGFyPyBIbW1tLCBoYW5nIG9uLCBkb2VzIHN5emthbGxlciBldmVuIGhhdmUgYSBjb21wbGV0ZWx5IGdlbmVyaWMgYHN5el9wbGF0Zm9ybV9kZXZpY2VfYWRkYCB0aGF0IHdvcmtzIGZvciAqYW55KiBkcml2ZXI/IEkgbmVlZCB0byBjbGFyaWZ5IHRoYXQuCgpXYWl0LCBhcmUgdGhlcmUgKnNvbWUqIGRlc2NyaXB0aW9ucyBmb3IgcGxhdGZvcm0gZGV2aWNlcyBhbHJlYWR5IGRlZmluZWQgaW4gc3l6a2FsbGVyPyBMZXQmIzM5O3MgY2hlY2sgZm9yIGFueSBleGlzdGluZyByZWZlcmVuY2VzIHRvIGBxY29tLGlwcTgwNzQtd2lmaWAgaW4gdGhlIGtlcm5lbCBvciBzeXprYWxsZXIgaXRzZWxmLiBJIGNhbiYjMzk7dCBkaXJlY3RseSBgZ3JlcGAgdGhlIGBzeXMvYCBkaXJlY3RvcnksIHNvIEkgaGF2ZSB0byB0aGluayBhYm91dCBhbHRlcm5hdGUgd2F5cyB0byBzZWUgd2hlcmUgdGhpcyBjb2RlIG1pZ2h0IGJlIHJlYWNoYWJsZS4gSXMgdGhpcyBldmVuIHJlbW90ZWx5IHJlYWNoYWJsZSBpbiBhbnkgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQ/CgpJZiB0aGlzIGlzIHNvbWUgQVJNLXNwZWNpZmljIFNvQyBXaS1GaSBkcml2ZXIsIHRoZSBvZGRzIG9mIGl0IGJlaW5nIGhpdCBpbiBzdGFuZGFyZCB4ODZfNjQgZnV6emluZyBhcmUgdmFuaXNoaW5nbHkgc21hbGwuIFdhaXQsIGJ1dCBzeXprYWxsZXIgKmRvZXMqIGZ1enogQVJNNjQsIHJpZ2h0PyBFdmVuIHNvLCBpdCB1c2VzIGEgZ2VuZXJpYyB2aXJ0dWFsIG1hY2hpbmUgKFFFTVUgdmlydCBtYWNoaW5lKSwgd2hpY2ggYWxtb3N0IGNlcnRhaW5seSAqZG9lc24mIzM5O3QqIGhhdmUgdGhlc2Ugc3BlY2lmaWMgUXVhbGNvbW0gV2ktRmkgaGFyZHdhcmUgbm9kZXMgaW4gaXRzIGRldmljZSB0cmVlLgoKQ2FuIHN5emthbGxlciBpbmplY3QgZGV2aWNlIHRyZWUgbm9kZXM/IEkmIzM5O20gcHJldHR5IHN1cmUgbm90LCB0aGUgZGV2aWNlIHRyZWUgaXMgcGFzc2VkIGF0IGJvb3QgdGltZS4gV2FpdCwgdGhlcmUmIzM5O3MgYENPTkZJR19PRl9EWU5BTUlDYCBhbmQgYENPTkZJR19PRl9PVkVSTEFZYCwgcmlnaHQ/IEJ1dCwgYXMgZmFyIGFzIEkmIzM5O20gYXdhcmUsIHN5emthbGxlciBkb2VzbiYjMzk7dCBsZXZlcmFnZSB0aG9zZSBjdXJyZW50bHkgdG8gaW5qZWN0IHJhbmRvbSBkZXZpY2VzIGZvciBmdXp6aW5nIHVubGVzcyBzb21lb25lJiMzOTtzIGV4cGxpY2l0bHkgY29kZWQgaXQgdGhhdCB3YXkuCgpPa2F5LCBsZXQmIzM5O3Mgc2VlLCBsZXQmIzM5O3MgbG9vayBmb3IgYGF0aDExa2AgYW5kIGl0cyBjb3JyZXNwb25kaW5nIHN5emthbGxlciBkZXNjcmlwdGlvbi4gSSBjYW4gdXNlIGBjb2Rlc2VhcmNoLWRpci1pbmRleGAgb3IgYHJlYWQtZmlsZWAgdG8gY2hlY2sgYHN5cy9saW51eC9gIGZvciBhbnkgc2lnbiBvZiBgYXRoMTFrYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjQgMDU6MTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDthdGgxMWsmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtzeXMvbGludXgvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjQgMDU6MTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE0MjkKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiA1NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipOYXZpZ2F0aW5nIHRoZSBMYWJ5cmludGggb2YgQ29kZSoqCgpPa2F5LCBzbyB0aGUgcHJvbXB0IGlzIHZlcnkgY2xlYXI6IEkmIzM5O20gKm5vdCogdG8gdXNlIHRoZSB1c3VhbCBTeXprYWxsZXIgc2VhcmNoIG1ldGhvZHMgb24gYHN5emxhbmdgIGRlc2NyaXB0aW9ucy4gVGhhdCYjMzk7cyBmaW5lOyBjaGFsbGVuZ2VzIGFyZSB3aGF0IGtlZXAgdGhpbmdzIGludGVyZXN0aW5nISBJIG5lZWQgYSBtb3JlIHRhcmdldGVkIGFwcHJvYWNoLiBMZXQmIzM5O3Mgc2VlLi4uIHRoZSB0ZXh0IGluZGljYXRlcyBJIHNob3VsZCB1c2UgYGNvZGVzZWFyY2gtZGlyLWluZGV4YCBhbmQgYHJlYWQtZmlsZWAuIFRoYXQgc291bmRzIHByb21pc2luZy4gSXQgc2VlbXMgbGlrZSBJJiMzOTttIGV4cGVjdGVkIHRvIGRlbHZlIGludG8gdGhlIGBzeXMvbGludXgvYCBkaXJlY3RvcnkuIFJpZ2h0LCBJIHVuZGVyc3RhbmQuIEkmIzM5O2xsIG1ha2Ugc3VyZSB0byB1c2UgdGhvc2UgdG9vbHMgb24gdGhhdCBzcGVjaWZpYyBkaXJlY3RvcnkgdG8gZ2V0IHRoZSBpbmZvcm1hdGlvbiB0aGF0IEkgbmVlZC4gVGhpcyBzaG91bGQgYmUgc3RyYWlnaHRmb3J3YXJkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNCAwNToxNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmNvZGVzZWFyY2gtZGlyLWluZGV4PC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+dGhlIGRpcmVjdG9yeSBkb2VzIG5vdCBleGlzdDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0RpciYjMzQ7OiAmIzM0O3N5cy9saW51eCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O3RoZSBkaXJlY3RvcnkgZG9lcyBub3QgZXhpc3QmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI0IDA1OjE0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExNjY2CgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogMzQ0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgQXRoMTFrIERyaXZlciBmb3IgRnV6emFiaWxpdHkqKgoKT2theSwgZmlyc3QgdGhpbmdzIGZpcnN0LCBJIG5lZWQgdG8gYWRqdXN0IG15IGFwcHJvYWNoLiBUaGUgdG9vbCBsaW1pdGF0aW9uIGlzIGNsZWFyOiBJIGNhbiYjMzk7dCBkaXJlY3RseSBzZWFyY2ggc3l6a2FsbGVyIGRlc2NyaXB0aW9ucyB3aXRoaW4gdGhlIGtlcm5lbCB0cmVlLCBhbmQgdGhlIGB0b29sUmVhZERlc2NyaXB0aW9uYCB0b29sIGlzbiYjMzk7dCBhdmFpbGFibGUuIFNvLCBubyBkaXJlY3Qgc3l6a2FsbGVyIHNlYXJjaCBmb3IgbWUuIEkgbmVlZCB0byBkZWR1Y2UgZnV6emFiaWxpdHkgaW5kaXJlY3RseS4KClRoZSBkcml2ZXIgaW4gcXVlc3Rpb24gaXMgYGF0aDExa2AsIHNwZWNpZmljYWxseSB0aGUgQUhCIGJ1cyBhdHRhY2htZW50IChgYWhiLmNgKS4gQUhCIGlzIGEgYnVzIGFyY2hpdGVjdHVyZSBjb21tb25seSBmb3VuZCBpbiBTeXN0ZW0tb24tQ2hpcHMsIGFuZCB0aGlzIHBhcnRpY3VsYXIgY29kZSByZXF1aXJlcyBhIHBsYXRmb3JtIGRldmljZSB3aXRoIHNwZWNpZmljIGNvbXBhdGlibGUgc3RyaW5ncy4gVW5sZXNzIHN5emthbGxlciBoYXMgYSBoaWdobHkgc3BlY2lmaWMgcHNldWRvLXN5c2NhbGwgdG8gaW5zdGFudGlhdGUgc3VjaCBhIHBsYXRmb3JtIGRldmljZSwgd2hpY2ggd291bGQgYmUgdW51c3VhbCBmb3IgYSByYW5kb20gV2ktRmkgU29DIGRyaXZlciwgdGhpcyBwYXRoIGlzIGxpa2VseSB1bnJlYWNoYWJsZSBpbiBhIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50LiBUaGF0JiMzOTtzIGEgZ29vZCBpbml0aWFsIGluZGljYXRvci4KCk5vdywgbGV0JiMzOTtzIGV4cGxvcmUgcG9zc2libGUgYWx0ZXJuYXRpdmVzLiBJcyB0aGVyZSBhIFBDSSBlcXVpdmFsZW50PyBUaGUgY2hhbmdlIGlzIHdpdGhpbiBgYWhiLmNgLCBzdWdnZXN0aW5nIGl0JiMzOTtzIHRpZ2h0bHkgY291cGxlZCB0byB0aGUgQUhCIGJ1cy4gV2FpdCwgSSBzZWUgYW4gaW50ZXJlc3RpbmcgY2FsbDogYGF0aDExa19haGJfZnJlZV9pcnFgLiBUaGUgcHJlc2VuY2Ugb2YKCmBgYGMKCWlmIChhYi0mZ3Q7aHdfcGFyYW1zLmh5YnJpZF9idXNfdHlwZSkKCQlyZXR1cm4gYXRoMTFrX3BjaWNfZnJlZV9pcnEoYWIpOwpgYGAKCmlzIGludHJpZ3VpbmcsIGJ1dCBpdCYjMzk7cyAqc3RpbGwqIHdpdGhpbiBgYWhiLmNgLCB3aGljaCBtYWtlcyBtZSBxdWVzdGlvbiB0aGUgbGFyZ2VyIGJ1aWxkIGNvbmZpZ3VyYXRpb24uIE15IHByaW1hcnkgY29uY2VybiByZW1haW5zIHdoZXRoZXIgYGFoYi5jYCBpcyBldmVuIGNvbXBpbGVkIGZvciBQQ0ktb25seSBjb25maWd1cmF0aW9ucy4gVG8gY2xhcmlmeSB0aGF0LCBJIHNob3VsZCBjaGVjayB0aGUgbWFrZWZpbGUgd2l0aGluIGBkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI0IDA1OjE1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9NYWtlZmlsZSYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEJTRC0zLUNsYXVzZS1DbGVhclxuICAgMjpcdG9iai0kKENPTkZJR19BVEgxMUspICYjNDM7PSBhdGgxMWsub1xuICAgMzpcdGF0aDExay15ICYjNDM7PSBjb3JlLm8gXFxcbiAgIDQ6XHRcdCAgICBoYWwubyBcXFxuICAgNTpcdFx0ICAgIGhhbF90eC5vIFxcXG4gICA2Olx0XHQgICAgaGFsX3J4Lm8gXFxcbiAgIDc6XHRcdCAgICB3bWkubyBcXFxuICAgODpcdFx0ICAgIG1hYy5vIFxcXG4gICA5Olx0XHQgICAgcmVnLm8gXFxcbiAgMTA6XHRcdCAgICBodGMubyBcXFxuICAxMTpcdFx0ICAgIHFtaS5vIFxcXG4gIDEyOlx0XHQgICAgZHAubyAgXFxcbiAgMTM6XHRcdCAgICBkcF90eC5vIFxcXG4gIDE0Olx0XHQgICAgZHBfcngubyBcXFxuICAxNTpcdFx0ICAgIGRlYnVnLm8gXFxcbiAgMTY6XHRcdCAgICBjZS5vIFxcXG4gIDE3Olx0XHQgICAgcGVlci5vIFxcXG4gIDE4Olx0XHQgICAgZGJyaW5nLm8gXFxcbiAgMTk6XHRcdCAgICBody5vIFxcXG4gIDIwOlx0XHQgICAgcGNpYy5vIFxcXG4gIDIxOlx0XHQgICAgZncubyBcXFxuICAyMjpcdFx0ICAgIHAycC5vXG4gIDIzOlx0XG4gIDI0Olx0YXRoMTFrLSQoQ09ORklHX0FUSDExS19ERUJVR0ZTKSAmIzQzOz0gZGVidWdmcy5vIGRlYnVnZnNfaHR0X3N0YXRzLm8gZGVidWdmc19zdGEub1xuICAyNTpcdGF0aDExay0kKENPTkZJR19OTDgwMjExX1RFU1RNT0RFKSAmIzQzOz0gdGVzdG1vZGUub1xuICAyNjpcdGF0aDExay0kKENPTkZJR19BVEgxMUtfVFJBQ0lORykgJiM0Mzs9IHRyYWNlLm9cbiAgMjc6XHRhdGgxMWstJChDT05GSUdfVEhFUk1BTCkgJiM0Mzs9IHRoZXJtYWwub1xuICAyODpcdGF0aDExay0kKENPTkZJR19BVEgxMUtfU1BFQ1RSQUwpICYjNDM7PSBzcGVjdHJhbC5vXG4gIDI5Olx0YXRoMTFrLSQoQ09ORklHX1BNKSAmIzQzOz0gd293Lm9cbiAgMzA6XHRhdGgxMWstJChDT05GSUdfREVWX0NPUkVEVU1QKSAmIzQzOz0gY29yZWR1bXAub1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNCAwNToxNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjg5MQoJCQkJCQkJb3V0cHV0OiA0MQoJCQkJCQkJdGhvdWdodHM6IDEwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCB1c2VyIGFuZCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqQW5hbHl6aW5nIHRoZSBNYWtlZmlsZSoqCgpBbHJpZ2h0LCB0aW1lIHRvIGRpZyBpbnRvIHRoZSByZXN0IG9mIHRoaXMgTWFrZWZpbGUuIEkmIzM5O3ZlIHNlZW4gdGhlIGJhc2ljcywgdGhlIHN0cnVjdHVyZSwgdGhlIGRlcGVuZGVuY2llcy4uLiBub3csIGxldCYjMzk7cyBzZWUgd2hhdCBpbnRlcmVzdGluZyB0ZWNobmlxdWVzIG9yIG9wdGltaXphdGlvbnMgYXJlIGVtcGxveWVkLiBJJiMzOTttIGxvb2tpbmcgZm9yIHRoaW5ncyB0aGF0IG1pZ2h0IGJlIG5vdmVsLCBvciBwZXJoYXBzIHBhdHRlcm5zIHRoYXQgSSYjMzk7dmUgc2VlbiBiZWZvcmUgYnV0IGFyZSBpbXBsZW1lbnRlZCBpbiBhIHVuaXF1ZSB3YXkgaGVyZS4gQXJlIHRoZXJlIGFueSBjbGV2ZXIgdXNlcyBvZiBzaGVsbCBleHBhbnNpb25zLCB2YXJpYWJsZSBzdWJzdGl0dXRpb24sIG9yIHBlcmhhcHMgc29tZSBwYXJ0aWN1bGFybHkgZWxlZ2FudCB1c2Ugb2YgR05VIE1ha2UmIzM5O3MgZmVhdHVyZXM/IEkmIzM5O20gaG9waW5nIHRvIHNwb3Qgc29tZSB0cmlja3MgdGhhdCBJIGNhbiBmaWxlIGF3YXkgZm9yIGZ1dHVyZSBwcm9qZWN0cy4gSSB3YW50IHRvIHNlZSBpZiB0aGUgYXV0aG9yJiMzOTtzIGZvbGxvd2luZyBhbnkgZXN0YWJsaXNoZWQgYmVzdCBwcmFjdGljZXMgb3IgaWYgdGhleSYjMzk7cmUgdGFraW5nIGEgbW9yZSB1bmNvbnZlbnRpb25hbCByb3V0ZS4gTGV0JiMzOTtzIHNlZSBpZiB0aGlzIE1ha2VmaWxlIGlzIGp1c3QgZnVuY3Rpb25hbCBvciBpZiBpdCYjMzk7cyBhbHNvIHdlbGwtY3JhZnRlZCBhbmQgcmVhZGFibGUuIEkmIzM5O2xsIGJlIHNjcnV0aW5pemluZyB0aGUgZGVwZW5kZW5jeSBncmFwaHMsIHRhcmdldCBkZWZpbml0aW9ucywgYW5kIGFueSBjdXN0b20gZnVuY3Rpb25zIG9yIG1hY3JvcyB0aGF0IGhhdmUgYmVlbiBkZWZpbmVkLiBJdCYjMzk7cyB0aW1lIHRvIHNlZSBob3cgdGhpcyB0aGluZyAqcmVhbGx5KiB3b3Jrcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjQgMDU6MTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL01ha2VmaWxlJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAzMTpcdGF0aDExay0kKENPTkZJR19BVEgxMUtfQ0ZSKSAmIzQzOz0gY2ZyLm9cbiAgMzI6XHRcbiAgMzM6XHRvYmotJChDT05GSUdfQVRIMTFLX0FIQikgJiM0Mzs9IGF0aDExa19haGIub1xuICAzNDpcdGF0aDExa19haGIteSAmIzQzOz0gYWhiLm9cbiAgMzU6XHRcbiAgMzY6XHRvYmotJChDT05GSUdfQVRIMTFLX1BDSSkgJiM0Mzs9IGF0aDExa19wY2kub1xuICAzNzpcdGF0aDExa19wY2kteSAmIzQzOz0gbWhpLm8gcGNpLm9cbiAgMzg6XHRcbiAgMzk6XHQjIGZvciB0cmFjaW5nIGZyYW1ld29yayB0byBmaW5kIHRyYWNlLmhcbiAgNDA6XHRDRkxBR1NfdHJhY2UubyA6PSAtSSQoc3JjKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNCAwNToxNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzM2MAoJCQkJCQkJb3V0cHV0OiAyNgoJCQkJCQkJdGhvdWdodHM6IDQzNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIGBhdGgxMWtfYWhiYCBEcml2ZXImIzM5O3MgUmVhY2hhYmlsaXR5KioKCk9rYXksIHNvIGBhaGIuY2Agb25seSBnZXRzIGNvbXBpbGVkIHdoZW4gYENPTkZJR19BVEgxMUtfQUhCYCBpcyBlbmFibGVkLiBBbmQgdGhhdCBjb25maWcgb3B0aW9uIGlzIHNwZWNpZmljYWxseSBmb3IgQXRoZXJvcyYjMzk7IEFIQiBzdXBwb3J0IHdpdGhpbiBgYXRoMTFrYC4gUmlnaHQsIHdlIGtub3cgYGF0aDExa19haGJfcHJvYmVgIGlzIGEgcGxhdGZvcm0gZHJpdmVyJiMzOTtzIHByb2JlIGZ1bmN0aW9uLCBhbmQgaXQmIzM5O3Mga2V5ZWQgdG8gc3BlY2lmaWMgZGV2aWNlIHRyZWUgY29tcGF0aWJsZSBzdHJpbmdzIOKAkyB0aGUgUXVhbGNvbW0gV2ktRmkgZGV2aWNlcy4gVGhvc2UgcGxhdGZvcm0gZGV2aWNlcyBhcmUgKmluc3RhbnRpYXRlZCogZHVyaW5nIGJvb3QsIGFsbCB0aGFua3MgdG8gdGhlIGRldmljZSB0cmVlLCBvciBzcGVjaWZpY2FsbHkgaGVyZSwgdGhlIE9wZW4gRmlybXdhcmUgKE9GKS4KCkluIGFueSB2aXJ0dWFsaXplZCBzZXR1cCBsaWtlIFFFTVUgb3IgR0NFLCB0aGUgZ3Vlc3QmIzM5O3MgZGV2aWNlIHRyZWUgKndvbiYjMzk7dCogaGF2ZSB0aGVzZSBRdWFsY29tbSBXaS1GaSBub2Rlcy4gU28gdGhlIGBhdGgxMWtfYWhiYCBkcml2ZXIgd2lsbCBzaW1wbHkgbmV2ZXIgYmluZCB0byBhbnkgZGV2aWNlLiBUaGF0IG1lYW5zIHRoZSBwcm9iZSBmdW5jdGlvbiwgYWxvbmcgd2l0aCBgYXRoMTFrX2FoYl9jb25maWdfaXJxYCBhbmQgYGF0aDExa19haGJfY29uZmlnX2V4dF9pcnFgLCB3aWxsIG5ldmVyIGJlIGV4ZWN1dGVkIGluIHRoZXNlIGVudmlyb25tZW50cy4KCkhvbGQgb24sIGlzIHRoZXJlICphbnkqIHdheSB0byB0cmlnZ2VyIHBsYXRmb3JtIGRldmljZSBjcmVhdGlvbiBmcm9tIHVzZXJzcGFjZT8gVGhlcmUmIzM5O3MgYSBzeXNmcyBpbnRlcmZhY2UgZm9yIHNvbWUgYnVzZXMsIGJ1dCB3aXRoIHBsYXRmb3JtIGJ1c2VzLCB5b3UgY2FuJiMzOTt0IGp1c3QgY29uanVyZSB1cCBhcmJpdHJhcnkgZGV2aWNlcyBmcm9tIHVzZXJzcGFjZSB1bmxlc3MgdGhlcmUmIzM5O3MgYSBzcGVjaWZpYyBkcml2ZXIgb3IgYSBkZWJ1Z2ZzIGludGVyZmFjZSB0aGF0IGV4cG9zZXMgc29tZXRoaW5nIGxpa2UgYHBsYXRmb3JtX2RldmljZV9yZWdpc3RlcmAuIEFuZCwgYXMgZmFyIGFzIEkga25vdywgU3l6a2FsbGVyIGRvZXNuJiMzOTt0IGhhdmUgYSBidWlsdC1pbiB3YXkgdG8gZG8gdGhpcy4gSSYjMzk7dmUgdXNlZCBpdCB3aXRoIFBDSSBkZXZpY2VzICh0aHJvdWdoIGBzeXpfcGNpX2RldmljZV9hZGRgIC8gdlBDSSkgYW5kIFVTQiBkZXZpY2VzICh2aWEgYHN5el91c2JfY29ubmVjdGAgLyBkdW1teV9oY2QpLCBidXQgbm90IHdpdGggYXJiaXRyYXJ5IHBsYXRmb3JtIGRldmljZXMgd2l0aCB2ZXJ5IHNwZWNpZmljIE9GIGNvbXBhdGlibGUgc3RyaW5ncy4KCldhaXQuLi4gSSYjMzk7dmUgZ290IGl0LCB0aGVyZSBpcyBgbWFjODAyMTFfaHdzaW1gLCBidXQgdGhhdCBzaW11bGF0ZXMgYSAqZ2VuZXJpYyogV2ktRmkgcmFkaW8sIGFuZCB0aGF0IGRvZXMgbm90IGluc3RhbnRpYXRlIHRoZSBgYXRoMTFrYCBoYXJkd2FyZS4KClNvLCByZWFsaXN0aWNhbGx5LCB0aGlzIGNvZGUgcGF0aCBpcyBzaW1wbHkgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB0aGVzZSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuIEkmIzM5O20gZ29pbmcgdG8gZG91YmxlIGNoZWNrIHJlYWwgcXVpY2sgdGhhdCBgYXRoMTFrX2FoYl9jb25maWdfaXJxYCBjYW4mIzM5O3QgYmUgY2FsbGVkIGZyb20gc29tZSBvdGhlciBwbGFjZSBpbiB0aGUgY29kZSBiYXNlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNCAwNToxNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDthdGgxMWtfYWhiX2NvbmZpZ19pcnEmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9haGIuYz01MzI9c3RhdGljIGludCBhdGgxMWtfYWhiX2NvbmZpZ19leHRfaXJxKHN0cnVjdCBhdGgxMWtfYmFzZSAqYWIpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9haGIuYy02MzItXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2FoYi5jOjYzMzpzdGF0aWMgaW50IGF0aDExa19haGJfY29uZmlnX2lycShzdHJ1Y3QgYXRoMTFrX2Jhc2UgKmFiKVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9haGIuYy02MzQte1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvYWhiLmM9MTEzOD1zdGF0aWMgaW50IGF0aDExa19haGJfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2FoYi5jLTEyMzAtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2FoYi5jOjEyMzE6XHRyZXQgPSBhdGgxMWtfYWhiX2NvbmZpZ19pcnEoYWIpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9haGIuYy0xMjMyLVx0aWYgKHJldCkge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNCAwNToxNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDYxOQoJCQkJCQkJb3V0cHV0OiAxNDkKCQkJCQkJCXRob3VnaHRzOiAzNTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqVW5yZWFjaGFibGUgQ29kZSBpbiB0aGUgQUhCIFdpLUZpIERyaXZlcioqCgpPa2F5LCBzbyBJJiMzOTt2ZSBiZWVuIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCBpdCYjMzk7cyBwcmV0dHkgY2xlYXI6IHRoaXMgYmxvY2sgaXMgb25seSBlbnRlcmVkIHRocm91Z2ggYGF0aDExa19haGJfcHJvYmVgLiBUaGF0IGZ1bmN0aW9uIGl0c2VsZiBpcyBleGNsdXNpdmVseSBjYWxsZWQgYnkgdGhlIHBsYXRmb3JtIGJ1cyB3aGVuIGl0IGRldGVjdHMgYSBtYXRjaGluZyBkZXZpY2UuIFRoZSBwcm9ibGVtIGlzLCBhbmQgdGhpcyBpcyBjcnVjaWFsIGZvciBmdXp6aW5nIGNvbnNpZGVyYXRpb25zLCB0aGF0IFN5emthbGxlciwgd2hpY2ggaXMgb3VyIHByaW1hcnkgZnV6emluZyB0b29sLCBkb2VzbiYjMzk7dCBoYXZlIGEgd2F5IHRvIGluamVjdCBhcmJpdHJhcnkgcGxhdGZvcm0gZGV2aWNlcy4gSSB0aG91Z2h0IG1heWJlIEkgd2FzIG1pc3Npbmcgc29tZXRoaW5nIOKAkyBkb2VzIGl0IGhhdmUgYSBwc2V1ZG8tc3lzY2FsbCBmb3IgcGxhdGZvcm0gZGV2aWNlcz8gSSBrbm93IGl0IGhhcyBgc3l6X3BsYXRmb3JtX2RldmljZV9hZGRgLi4uIHdhaXQsIGl0IGRvZXNuJiMzOTt0LgoKSSBzdGFydGVkIGxpc3RpbmcgdGhlIGtub3duIGBzeXpfYCBwcmVmaXhlcy4gTGV0JiMzOTtzIHNlZSwgaXQgc3VwcG9ydHMgZGV2bGluayAoYHN5el9kZXZsaW5rYCksIG1hYzgwMjExIChgc3l6XzgwMjExXy4uLmApLCBnZW5lcmljIG5ldGxpbmsgKGBzeXpfZ2VuZXRsaW5rXy4uLmApLCBVU0IgKGBzeXpfdXNiX2Nvbm5lY3RgKSwgUENJIChgc3l6X3BjaV9kZXZpY2VfYWRkYCksIEJsdWV0b290aCAoYHN5el92aGNpXy4uLmApLCBhbmQgZXh0NCAoYHN5el9leHQ0Xy4uLmApLiBCdXQgbm90aGluZyBmb3IgYSBnZW5lcmljIHBsYXRmb3JtIGRldmljZSBpbmplY3Rvci4gRXZlbiBpZiB0aGVyZSAqd2VyZSogc3VjaCBhIHRoaW5nLCBpdCB3b3VsZCBuZWVkIHRvIGtub3cgdGhlICpleGFjdCogY29tcGF0aWJsZSBzdHJpbmcsIG1lbW9yeSByZXNvdXJjZXMsIGludGVycnVwdCByZXNvdXJjZXMsIGFuZCBhbGwgdGhhdCDigJMgd2hpY2ggaXMgaGlnaGx5IGRlcGVuZGVudCBvbiB0aGUgc3lzdGVtLW9uLWEtY2hpcCAoU29DKSBhbmQgdHlwaWNhbGx5IG5lZWRzIGEgZGV2aWNlIHRyZWUgb3ZlcmxheS4gVGhhdCBsZXZlbCBvZiBzcGVjaWZpY2l0eSBpcyBqdXN0IG5vdCBzb21ldGhpbmcgd2UgY2FuIHJlYWxpc3RpY2FsbHkgcmVwbGljYXRlIGluIGEgZnV6emVkIGVudmlyb25tZW50LgoKVGhlcmVmb3JlLCBzaW5jZSB0aGlzIHNwZWNpZmljIHBhdGNoIHRvdWNoZXMgYSBwbGF0Zm9ybS1zcGVjaWZpYyBBSEIgV2ktRmkgZHJpdmVyLCBhbmQgdGhhdCBkcml2ZXImIzM5O3MgY29kZSBpcyB1bnJlYWNoYWJsZSBpbiBvdXIgY3VycmVudCB2aXJ0dWFsaXplZCBmdXp6aW5nIHNldHVwcyBsaWtlIEdDRSBvciBRRU1VLCBJJiMzOTttIGdvaW5nIHRvIG1hcmsgdGhpcyBhcyBub3Qgd29ydGggZnV6emluZy4gSSYjMzk7bGwgcmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSwgd2l0aCB0aGUgZG9jdW1lbnRlZCByZWFzb25pbmcgdGhhdCB0aGlzIGNvZGUgcGF0aCBpcyBzaW1wbHkgaW5hY2Nlc3NpYmxlIHVuZGVyIG91ciBleGlzdGluZyBmdXp6aW5nIGVudmlyb25tZW50LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNCAwNToxNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFtdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGVycm9yIGhhbmRsaW5nIGluIHRoZSBwcm9iZSBwYXRoIG9mIHRoZSBhdGgxMWsgQUhCIHBsYXRmb3JtIGRyaXZlciAoYXRoMTFrX2FoYikuIFRoaXMgZHJpdmVyIHJlcXVpcmVzIHNwZWNpZmljIFF1YWxjb21tIFNvQyBoYXJkd2FyZSAoZS5nLiwgSVBRODA3NCwgSVBRNjAxOCkgYW5kIGJpbmRzIHZpYSBkZXZpY2UgdHJlZSBjb21wYXRpYmxlIHN0cmluZ3MuIFNpbmNlIHN5emthbGxlciBvcGVyYXRlcyBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgKFFFTVUvR0NFKSB3aXRob3V0IHRoZXNlIHNwZWNpZmljIGhhcmR3YXJlIG5vZGVzIGluIHRoZSBkZXZpY2UgdHJlZSwgYW5kIHRoZXJlIGlzIG5vIG1lY2hhbmlzbSB0byBpbmplY3QgYXJiaXRyYXJ5IHBsYXRmb3JtIGRldmljZXMgd2l0aCBzcGVjaWZpYyBtZW1vcnkvSVJRIHJlc291cmNlcywgdGhpcyBjb2RlIHBhdGggaXMgdW5yZWFjaGFibGUgYW5kIGNhbm5vdCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBlcnJvciBoYW5kbGluZyBpbiB0aGUgcHJvYmUgcGF0aCBvZiB0aGUgYXRoMTFrIEFIQiBwbGF0Zm9ybSBkcml2ZXIgKGF0aDExa19haGIpLiBUaGlzIGRyaXZlciByZXF1aXJlcyBzcGVjaWZpYyBRdWFsY29tbSBTb0MgaGFyZHdhcmUgKGUuZy4sIElQUTgwNzQsIElQUTYwMTgpIGFuZCBiaW5kcyB2aWEgZGV2aWNlIHRyZWUgY29tcGF0aWJsZSBzdHJpbmdzLiBTaW5jZSBzeXprYWxsZXIgb3BlcmF0ZXMgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIChRRU1VL0dDRSkgd2l0aG91dCB0aGVzZSBzcGVjaWZpYyBoYXJkd2FyZSBub2RlcyBpbiB0aGUgZGV2aWNlIHRyZWUsIGFuZCB0aGVyZSBpcyBubyBtZWNoYW5pc20gdG8gaW5qZWN0IGFyYml0cmFyeSBwbGF0Zm9ybSBkZXZpY2VzIHdpdGggc3BlY2lmaWMgbWVtb3J5L0lSUSByZXNvdXJjZXMsIHRoaXMgY29kZSBwYXRoIGlzIHVucmVhY2hhYmxlIGFuZCBjYW5ub3QgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI0VDA1OjE0OjA1LjIyOTQ0NjQ2NloiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgzNjUyNzU1NzAxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBlcnJvciBoYW5kbGluZyBpbiB0aGUgcHJvYmUgcGF0aCBvZiB0aGUgYXRoMTFrIEFIQiBwbGF0Zm9ybSBkcml2ZXIgKGF0aDExa19haGIpLiBUaGlzIGRyaXZlciByZXF1aXJlcyBzcGVjaWZpYyBRdWFsY29tbSBTb0MgaGFyZHdhcmUgKGUuZy4sIElQUTgwNzQsIElQUTYwMTgpIGFuZCBiaW5kcyB2aWEgZGV2aWNlIHRyZWUgY29tcGF0aWJsZSBzdHJpbmdzLiBTaW5jZSBzeXprYWxsZXIgb3BlcmF0ZXMgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIChRRU1VL0dDRSkgd2l0aG91dCB0aGVzZSBzcGVjaWZpYyBoYXJkd2FyZSBub2RlcyBpbiB0aGUgZGV2aWNlIHRyZWUsIGFuZCB0aGVyZSBpcyBubyBtZWNoYW5pc20gdG8gaW5qZWN0IGFyYml0cmFyeSBwbGF0Zm9ybSBkZXZpY2VzIHdpdGggc3BlY2lmaWMgbWVtb3J5L0lSUSByZXNvdXJjZXMsIHRoaXMgY29kZSBwYXRoIGlzIHVucmVhY2hhYmxlIGFuZCBjYW5ub3QgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjRUMDU6MTQ6MDUuMjI5NDUxODc1WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNDAwNzc3NDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCAxZTgyNWM2M2QwYzEzNjJmMzYyNWIwZTMwNTBlNDBkZTAzYWYxZmM0XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBGcmkgSnVsIDI0IDA1OjE0OjA0IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvYWhiLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2FoYi5jXFxuaW5kZXggZjU2NmQ2OTlkMDc0YTguLmJkZjUzYWE3ZGRmMWY1IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvYWhiLmNcXG4rKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2FoYi5jXFxuQEAgLTQzMSwzNiArNDMxLDQ0IEBAIHN0YXRpYyB2b2lkIGF0aDExa19haGJfaW5pdF9xbWlfY2VfY29uZmlnKHN0cnVjdCBhdGgxMWtfYmFzZSAqYWIpXFxuIFxcdGFiLVxcdTAwM2VxbWkuc2VydmljZV9pbnNfaWQgPSBhYi1cXHUwMDNlaHdfcGFyYW1zLnFtaV9zZXJ2aWNlX2luc19pZDtcXG4gfVxcbiBcXG4tc3RhdGljIHZvaWQgYXRoMTFrX2FoYl9mcmVlX2V4dF9pcnEoc3RydWN0IGF0aDExa19iYXNlICphYilcXG4rc3RhdGljIHZvaWQgYXRoMTFrX2FoYl9mcmVlX2V4dF9pcnFfZ3JwKHN0cnVjdCBhdGgxMWtfYmFzZSAqYWIsXFxuK1xcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCBhdGgxMWtfZXh0X2lycV9ncnAgKmlycV9ncnApXFxuIHtcXG4tXFx0aW50IGksIGo7XFxuLVxcbi1cXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgQVRIMTFLX0VYVF9JUlFfR1JQX05VTV9NQVg7IGkrKykge1xcbi1cXHRcXHRzdHJ1Y3QgYXRoMTFrX2V4dF9pcnFfZ3JwICppcnFfZ3JwID0gXFx1MDAyNmFiLVxcdTAwM2VleHRfaXJxX2dycFtpXTtcXG4rXFx0aW50IGo7XFxuIFxcbi1cXHRcXHRmb3IgKGogPSAwOyBqIFxcdTAwM2MgaXJxX2dycC1cXHUwMDNlbnVtX2lycTsgaisrKVxcbi1cXHRcXHRcXHRmcmVlX2lycShhYi1cXHUwMDNlaXJxX251bVtpcnFfZ3JwLVxcdTAwM2VpcnFzW2pdXSwgaXJxX2dycCk7XFxuK1xcdGZvciAoaiA9IDA7IGogXFx1MDAzYyBpcnFfZ3JwLVxcdTAwM2VudW1faXJxOyBqKyspXFxuK1xcdFxcdGZyZWVfaXJxKGFiLVxcdTAwM2VpcnFfbnVtW2lycV9ncnAtXFx1MDAzZWlycXNbal1dLCBpcnFfZ3JwKTtcXG4gXFxuLVxcdFxcdG5ldGlmX25hcGlfZGVsKFxcdTAwMjZpcnFfZ3JwLVxcdTAwM2VuYXBpKTtcXG4tXFx0XFx0ZnJlZV9uZXRkZXYoaXJxX2dycC1cXHUwMDNlbmFwaV9uZGV2KTtcXG4tXFx0fVxcbitcXHRuZXRpZl9uYXBpX2RlbChcXHUwMDI2aXJxX2dycC1cXHUwMDNlbmFwaSk7XFxuK1xcdGZyZWVfbmV0ZGV2KGlycV9ncnAtXFx1MDAzZW5hcGlfbmRldik7XFxuIH1cXG4gXFxuLXN0YXRpYyB2b2lkIGF0aDExa19haGJfZnJlZV9pcnEoc3RydWN0IGF0aDExa19iYXNlICphYilcXG4rc3RhdGljIHZvaWQgYXRoMTFrX2FoYl9mcmVlX2V4dF9pcnEoc3RydWN0IGF0aDExa19iYXNlICphYilcXG4ge1xcbi1cXHRpbnQgaXJxX2lkeDtcXG4gXFx0aW50IGk7XFxuIFxcbi1cXHRpZiAoYWItXFx1MDAzZWh3X3BhcmFtcy5oeWJyaWRfYnVzX3R5cGUpXFxuLVxcdFxcdHJldHVybiBhdGgxMWtfcGNpY19mcmVlX2lycShhYik7XFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBBVEgxMUtfRVhUX0lSUV9HUlBfTlVNX01BWDsgaSsrKVxcbitcXHRcXHRhdGgxMWtfYWhiX2ZyZWVfZXh0X2lycV9ncnAoYWIsIFxcdTAwMjZhYi1cXHUwMDNlZXh0X2lycV9ncnBbaV0pO1xcbit9XFxuIFxcbi1cXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgYWItXFx1MDAzZWh3X3BhcmFtcy5jZV9jb3VudDsgaSsrKSB7XFxuK3N0YXRpYyB2b2lkIGF0aDExa19haGJfZnJlZV9jZV9pcnFzKHN0cnVjdCBhdGgxMWtfYmFzZSAqYWIsIGludCBtYXhfaWR4KVxcbit7XFxuK1xcdGludCBpcnFfaWR4LCBpO1xcbitcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIG1heF9pZHg7IGkrKykge1xcbiBcXHRcXHRpZiAoYXRoMTFrX2NlX2dldF9hdHRyX2ZsYWdzKGFiLCBpKSBcXHUwMDI2IENFX0FUVFJfRElTX0lOVFIpXFxuIFxcdFxcdFxcdGNvbnRpbnVlO1xcbiBcXHRcXHRpcnFfaWR4ID0gQVRIMTFLX0lSUV9DRTBfT0ZGU0VUICsgaTtcXG4gXFx0XFx0ZnJlZV9pcnEoYWItXFx1MDAzZWlycV9udW1baXJxX2lkeF0sIFxcdTAwMjZhYi1cXHUwMDNlY2UuY2VfcGlwZVtpXSk7XFxuIFxcdH1cXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgYXRoMTFrX2FoYl9mcmVlX2lycShzdHJ1Y3QgYXRoMTFrX2Jhc2UgKmFiKVxcbit7XFxuK1xcdGlmIChhYi1cXHUwMDNlaHdfcGFyYW1zLmh5YnJpZF9idXNfdHlwZSlcXG4rXFx0XFx0cmV0dXJuIGF0aDExa19wY2ljX2ZyZWVfaXJxKGFiKTtcXG4gXFxuK1xcdGF0aDExa19haGJfZnJlZV9jZV9pcnFzKGFiLCBhYi1cXHUwMDNlaHdfcGFyYW1zLmNlX2NvdW50KTtcXG4gXFx0YXRoMTFrX2FoYl9mcmVlX2V4dF9pcnEoYWIpO1xcbiB9XFxuIFxcbkBAIC01MjQsMjAgKzUzMiwyNSBAQCBzdGF0aWMgaXJxcmV0dXJuX3QgYXRoMTFrX2FoYl9leHRfaW50ZXJydXB0X2hhbmRsZXIoaW50IGlycSwgdm9pZCAqYXJnKVxcbiBzdGF0aWMgaW50IGF0aDExa19haGJfY29uZmlnX2V4dF9pcnEoc3RydWN0IGF0aDExa19iYXNlICphYilcXG4ge1xcbiBcXHRzdHJ1Y3QgYXRoMTFrX2h3X3BhcmFtcyAqaHcgPSBcXHUwMDI2YWItXFx1MDAzZWh3X3BhcmFtcztcXG4rXFx0c3RydWN0IGF0aDExa19leHRfaXJxX2dycCAqaXJxX2dycDtcXG4gXFx0aW50IGksIGo7XFxuIFxcdGludCBpcnE7XFxuIFxcdGludCByZXQ7XFxuIFxcbiBcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgQVRIMTFLX0VYVF9JUlFfR1JQX05VTV9NQVg7IGkrKykge1xcbi1cXHRcXHRzdHJ1Y3QgYXRoMTFrX2V4dF9pcnFfZ3JwICppcnFfZ3JwID0gXFx1MDAyNmFiLVxcdTAwM2VleHRfaXJxX2dycFtpXTtcXG4gXFx0XFx0dTMyIG51bV9pcnEgPSAwO1xcbiBcXG4rXFx0XFx0aXJxX2dycCA9IFxcdTAwMjZhYi1cXHUwMDNlZXh0X2lycV9ncnBbaV07XFxuK1xcbiBcXHRcXHRpcnFfZ3JwLVxcdTAwM2VhYiA9IGFiO1xcbiBcXHRcXHRpcnFfZ3JwLVxcdTAwM2VncnBfaWQgPSBpO1xcbiBcXG4gXFx0XFx0aXJxX2dycC1cXHUwMDNlbmFwaV9uZGV2ID0gYWxsb2NfbmV0ZGV2X2R1bW15KDApO1xcbi1cXHRcXHRpZiAoIWlycV9ncnAtXFx1MDAzZW5hcGlfbmRldilcXG4tXFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuK1xcdFxcdGlmICghaXJxX2dycC1cXHUwMDNlbmFwaV9uZGV2KSB7XFxuK1xcdFxcdFxcdHJldCA9IC1FTk9NRU07XFxuK1xcdFxcdFxcdGlycV9ncnAtXFx1MDAzZW51bV9pcnEgPSAwO1xcbitcXHRcXHRcXHRnb3RvIGVycl9yZXF1ZXN0X2lycTtcXG4rXFx0XFx0fVxcbiBcXG4gXFx0XFx0bmV0aWZfbmFwaV9hZGQoaXJxX2dycC1cXHUwMDNlbmFwaV9uZGV2LCBcXHUwMDI2aXJxX2dycC1cXHUwMDNlbmFwaSxcXG4gXFx0XFx0XFx0ICAgICAgIGF0aDExa19haGJfZXh0X2dycF9uYXBpX3BvbGwpO1xcbkBAIC01ODUsOSArNTk4LDcgQEAgc3RhdGljIGludCBhdGgxMWtfYWhiX2NvbmZpZ19leHRfaXJxKHN0cnVjdCBhdGgxMWtfYmFzZSAqYWIpXFxuIFxcdFxcdFxcdFxcdH1cXG4gXFx0XFx0XFx0fVxcbiBcXHRcXHR9XFxuLVxcdFxcdGlycV9ncnAtXFx1MDAzZW51bV9pcnEgPSBudW1faXJxO1xcbi1cXG4tXFx0XFx0Zm9yIChqID0gMDsgaiBcXHUwMDNjIGlycV9ncnAtXFx1MDAzZW51bV9pcnE7IGorKykge1xcbitcXHRcXHRmb3IgKGogPSAwOyBqIFxcdTAwM2MgbnVtX2lycTsgaisrKSB7XFxuIFxcdFxcdFxcdGludCBpcnFfaWR4ID0gaXJxX2dycC1cXHUwMDNlaXJxc1tqXTtcXG4gXFxuIFxcdFxcdFxcdGlycSA9IHBsYXRmb3JtX2dldF9pcnFfYnluYW1lKGFiLVxcdTAwM2VwZGV2LFxcbkBAIC02MDAsMTEgKzYxMSwyMyBAQCBzdGF0aWMgaW50IGF0aDExa19haGJfY29uZmlnX2V4dF9pcnEoc3RydWN0IGF0aDExa19iYXNlICphYilcXG4gXFx0XFx0XFx0aWYgKHJldCkge1xcbiBcXHRcXHRcXHRcXHRhdGgxMWtfZXJyKGFiLCBcXFwiZmFpbGVkIHJlcXVlc3RfaXJxIGZvciAlZFxcXFxuXFxcIixcXG4gXFx0XFx0XFx0XFx0XFx0ICAgaXJxKTtcXG4rXFx0XFx0XFx0XFx0aXJxX2dycC1cXHUwMDNlbnVtX2lycSA9IGo7XFxuK1xcdFxcdFxcdFxcdGF0aDExa19haGJfZnJlZV9leHRfaXJxX2dycChhYiwgaXJxX2dycCk7XFxuK1xcdFxcdFxcdFxcdGdvdG8gZXJyX3JlcXVlc3RfaXJxO1xcbiBcXHRcXHRcXHR9XFxuIFxcdFxcdH1cXG4rXFxuK1xcdFxcdGlycV9ncnAtXFx1MDAzZW51bV9pcnEgPSBudW1faXJxO1xcbiBcXHR9XFxuIFxcbiBcXHRyZXR1cm4gMDtcXG4rXFxuK2Vycl9yZXF1ZXN0X2lycTpcXG4rXFx0Zm9yIChpLS07IGkgXFx1MDAzZT0gMDsgaS0tKSB7XFxuK1xcdFxcdGlycV9ncnAgPSBcXHUwMDI2YWItXFx1MDAzZWV4dF9pcnFfZ3JwW2ldO1xcbitcXHRcXHRhdGgxMWtfYWhiX2ZyZWVfZXh0X2lycV9ncnAoYWIsIGlycV9ncnApO1xcbitcXHR9XFxuK1xcdHJldHVybiByZXQ7XFxuIH1cXG4gXFxuIHN0YXRpYyBpbnQgYXRoMTFrX2FoYl9jb25maWdfaXJxKHN0cnVjdCBhdGgxMWtfYmFzZSAqYWIpXFxuQEAgLTYyOSwxNiArNjUyLDI0IEBAIHN0YXRpYyBpbnQgYXRoMTFrX2FoYl9jb25maWdfaXJxKHN0cnVjdCBhdGgxMWtfYmFzZSAqYWIpXFxuIFxcdFxcdHJldCA9IHJlcXVlc3RfaXJxKGlycSwgYXRoMTFrX2FoYl9jZV9pbnRlcnJ1cHRfaGFuZGxlcixcXG4gXFx0XFx0XFx0XFx0ICBJUlFGX1RSSUdHRVJfUklTSU5HLCBpcnFfbmFtZVtpcnFfaWR4XSxcXG4gXFx0XFx0XFx0XFx0ICBjZV9waXBlKTtcXG4tXFx0XFx0aWYgKHJldClcXG4rXFx0XFx0aWYgKHJldCkge1xcbitcXHRcXHRcXHRhdGgxMWtfZXJyKGFiLCBcXFwiZmFpbGVkIHJlcXVlc3RfaXJxIGZvciAlZFxcXFxuXFxcIiwgaXJxKTtcXG4rXFx0XFx0XFx0YXRoMTFrX2FoYl9mcmVlX2NlX2lycXMoYWIsIGkpO1xcbiBcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbitcXHRcXHR9XFxuIFxcbiBcXHRcXHRhYi1cXHUwMDNlaXJxX251bVtpcnFfaWR4XSA9IGlycTtcXG4gXFx0fVxcbiBcXG4gXFx0LyogQ29uZmlndXJlIGV4dGVybmFsIGludGVycnVwdHMgKi9cXG4gXFx0cmV0ID0gYXRoMTFrX2FoYl9jb25maWdfZXh0X2lycShhYik7XFxuK1xcdGlmIChyZXQpIHtcXG4rXFx0XFx0YXRoMTFrX2VycihhYiwgXFxcImZhaWxlZCB0byBjb25maWd1cmUgZXh0IGlycTogJWRcXFxcblxcXCIsIHJldCk7XFxuK1xcdFxcdGF0aDExa19haGJfZnJlZV9jZV9pcnFzKGFiLCBhYi1cXHUwMDNlaHdfcGFyYW1zLmNlX2NvdW50KTtcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0fVxcbiBcXG4tXFx0cmV0dXJuIHJldDtcXG4rXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuIHN0YXRpYyBpbnQgYXRoMTFrX2FoYl9tYXBfc2VydmljZV90b19waXBlKHN0cnVjdCBhdGgxMWtfYmFzZSAqYWIsIHUxNiBzZXJ2aWNlX2lkLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNFQwNToxNDowNS41NzA1MDAyMzVaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo4MzMxMTY5NjUwMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgZXJyb3IgaGFuZGxpbmcgaW4gdGhlIHByb2JlIHBhdGggb2YgdGhlIGF0aDExayBBSEIgcGxhdGZvcm0gZHJpdmVyIChhdGgxMWtfYWhiKS4gVGhpcyBkcml2ZXIgcmVxdWlyZXMgc3BlY2lmaWMgUXVhbGNvbW0gU29DIGhhcmR3YXJlIChlLmcuLCBJUFE4MDc0LCBJUFE2MDE4KSBhbmQgYmluZHMgdmlhIGRldmljZSB0cmVlIGNvbXBhdGlibGUgc3RyaW5ncy4gU2luY2Ugc3l6a2FsbGVyIG9wZXJhdGVzIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyAoUUVNVS9HQ0UpIHdpdGhvdXQgdGhlc2Ugc3BlY2lmaWMgaGFyZHdhcmUgbm9kZXMgaW4gdGhlIGRldmljZSB0cmVlLCBhbmQgdGhlcmUgaXMgbm8gbWVjaGFuaXNtIHRvIGluamVjdCBhcmJpdHJhcnkgcGxhdGZvcm0gZGV2aWNlcyB3aXRoIHNwZWNpZmljIG1lbW9yeS9JUlEgcmVzb3VyY2VzLCB0aGlzIGNvZGUgcGF0aCBpcyB1bnJlYWNoYWJsZSBhbmQgY2Fubm90IGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXRcbiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSxcbiAgIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgMWU4MjVjNjNkMGMxMzYyZjM2MjViMGUzMDUwZTQwZGUwM2FmMWZjNFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgSnVsIDI0IDA1OjE0OjA0IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9haGIuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvYWhiLmNcbmluZGV4IGY1NjZkNjk5ZDA3NGE4Li5iZGY1M2FhN2RkZjFmNSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvYWhiLmNcbisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvYWhiLmNcbkBAIC00MzEsMzYgKzQzMSw0NCBAQCBzdGF0aWMgdm9pZCBhdGgxMWtfYWhiX2luaXRfcW1pX2NlX2NvbmZpZyhzdHJ1Y3QgYXRoMTFrX2Jhc2UgKmFiKVxuIFx0YWItXHUwMDNlcW1pLnNlcnZpY2VfaW5zX2lkID0gYWItXHUwMDNlaHdfcGFyYW1zLnFtaV9zZXJ2aWNlX2luc19pZDtcbiB9XG4gXG4tc3RhdGljIHZvaWQgYXRoMTFrX2FoYl9mcmVlX2V4dF9pcnEoc3RydWN0IGF0aDExa19iYXNlICphYilcbitzdGF0aWMgdm9pZCBhdGgxMWtfYWhiX2ZyZWVfZXh0X2lycV9ncnAoc3RydWN0IGF0aDExa19iYXNlICphYixcbitcdFx0XHRcdCAgICAgIHN0cnVjdCBhdGgxMWtfZXh0X2lycV9ncnAgKmlycV9ncnApXG4ge1xuLVx0aW50IGksIGo7XG4tXG4tXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBBVEgxMUtfRVhUX0lSUV9HUlBfTlVNX01BWDsgaSsrKSB7XG4tXHRcdHN0cnVjdCBhdGgxMWtfZXh0X2lycV9ncnAgKmlycV9ncnAgPSBcdTAwMjZhYi1cdTAwM2VleHRfaXJxX2dycFtpXTtcbitcdGludCBqO1xuIFxuLVx0XHRmb3IgKGogPSAwOyBqIFx1MDAzYyBpcnFfZ3JwLVx1MDAzZW51bV9pcnE7IGorKylcbi1cdFx0XHRmcmVlX2lycShhYi1cdTAwM2VpcnFfbnVtW2lycV9ncnAtXHUwMDNlaXJxc1tqXV0sIGlycV9ncnApO1xuK1x0Zm9yIChqID0gMDsgaiBcdTAwM2MgaXJxX2dycC1cdTAwM2VudW1faXJxOyBqKyspXG4rXHRcdGZyZWVfaXJxKGFiLVx1MDAzZWlycV9udW1baXJxX2dycC1cdTAwM2VpcnFzW2pdXSwgaXJxX2dycCk7XG4gXG4tXHRcdG5ldGlmX25hcGlfZGVsKFx1MDAyNmlycV9ncnAtXHUwMDNlbmFwaSk7XG4tXHRcdGZyZWVfbmV0ZGV2KGlycV9ncnAtXHUwMDNlbmFwaV9uZGV2KTtcbi1cdH1cbitcdG5ldGlmX25hcGlfZGVsKFx1MDAyNmlycV9ncnAtXHUwMDNlbmFwaSk7XG4rXHRmcmVlX25ldGRldihpcnFfZ3JwLVx1MDAzZW5hcGlfbmRldik7XG4gfVxuIFxuLXN0YXRpYyB2b2lkIGF0aDExa19haGJfZnJlZV9pcnEoc3RydWN0IGF0aDExa19iYXNlICphYilcbitzdGF0aWMgdm9pZCBhdGgxMWtfYWhiX2ZyZWVfZXh0X2lycShzdHJ1Y3QgYXRoMTFrX2Jhc2UgKmFiKVxuIHtcbi1cdGludCBpcnFfaWR4O1xuIFx0aW50IGk7XG4gXG4tXHRpZiAoYWItXHUwMDNlaHdfcGFyYW1zLmh5YnJpZF9idXNfdHlwZSlcbi1cdFx0cmV0dXJuIGF0aDExa19wY2ljX2ZyZWVfaXJxKGFiKTtcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIEFUSDExS19FWFRfSVJRX0dSUF9OVU1fTUFYOyBpKyspXG4rXHRcdGF0aDExa19haGJfZnJlZV9leHRfaXJxX2dycChhYiwgXHUwMDI2YWItXHUwMDNlZXh0X2lycV9ncnBbaV0pO1xuK31cbiBcbi1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIGFiLVx1MDAzZWh3X3BhcmFtcy5jZV9jb3VudDsgaSsrKSB7XG4rc3RhdGljIHZvaWQgYXRoMTFrX2FoYl9mcmVlX2NlX2lycXMoc3RydWN0IGF0aDExa19iYXNlICphYiwgaW50IG1heF9pZHgpXG4re1xuK1x0aW50IGlycV9pZHgsIGk7XG4rXG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBtYXhfaWR4OyBpKyspIHtcbiBcdFx0aWYgKGF0aDExa19jZV9nZXRfYXR0cl9mbGFncyhhYiwgaSkgXHUwMDI2IENFX0FUVFJfRElTX0lOVFIpXG4gXHRcdFx0Y29udGludWU7XG4gXHRcdGlycV9pZHggPSBBVEgxMUtfSVJRX0NFMF9PRkZTRVQgKyBpO1xuIFx0XHRmcmVlX2lycShhYi1cdTAwM2VpcnFfbnVtW2lycV9pZHhdLCBcdTAwMjZhYi1cdTAwM2VjZS5jZV9waXBlW2ldKTtcbiBcdH1cbit9XG4rXG4rc3RhdGljIHZvaWQgYXRoMTFrX2FoYl9mcmVlX2lycShzdHJ1Y3QgYXRoMTFrX2Jhc2UgKmFiKVxuK3tcbitcdGlmIChhYi1cdTAwM2Vod19wYXJhbXMuaHlicmlkX2J1c190eXBlKVxuK1x0XHRyZXR1cm4gYXRoMTFrX3BjaWNfZnJlZV9pcnEoYWIpO1xuIFxuK1x0YXRoMTFrX2FoYl9mcmVlX2NlX2lycXMoYWIsIGFiLVx1MDAzZWh3X3BhcmFtcy5jZV9jb3VudCk7XG4gXHRhdGgxMWtfYWhiX2ZyZWVfZXh0X2lycShhYik7XG4gfVxuIFxuQEAgLTUyNCwyMCArNTMyLDI1IEBAIHN0YXRpYyBpcnFyZXR1cm5fdCBhdGgxMWtfYWhiX2V4dF9pbnRlcnJ1cHRfaGFuZGxlcihpbnQgaXJxLCB2b2lkICphcmcpXG4gc3RhdGljIGludCBhdGgxMWtfYWhiX2NvbmZpZ19leHRfaXJxKHN0cnVjdCBhdGgxMWtfYmFzZSAqYWIpXG4ge1xuIFx0c3RydWN0IGF0aDExa19od19wYXJhbXMgKmh3ID0gXHUwMDI2YWItXHUwMDNlaHdfcGFyYW1zO1xuK1x0c3RydWN0IGF0aDExa19leHRfaXJxX2dycCAqaXJxX2dycDtcbiBcdGludCBpLCBqO1xuIFx0aW50IGlycTtcbiBcdGludCByZXQ7XG4gXG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBBVEgxMUtfRVhUX0lSUV9HUlBfTlVNX01BWDsgaSsrKSB7XG4tXHRcdHN0cnVjdCBhdGgxMWtfZXh0X2lycV9ncnAgKmlycV9ncnAgPSBcdTAwMjZhYi1cdTAwM2VleHRfaXJxX2dycFtpXTtcbiBcdFx0dTMyIG51bV9pcnEgPSAwO1xuIFxuK1x0XHRpcnFfZ3JwID0gXHUwMDI2YWItXHUwMDNlZXh0X2lycV9ncnBbaV07XG4rXG4gXHRcdGlycV9ncnAtXHUwMDNlYWIgPSBhYjtcbiBcdFx0aXJxX2dycC1cdTAwM2VncnBfaWQgPSBpO1xuIFxuIFx0XHRpcnFfZ3JwLVx1MDAzZW5hcGlfbmRldiA9IGFsbG9jX25ldGRldl9kdW1teSgwKTtcbi1cdFx0aWYgKCFpcnFfZ3JwLVx1MDAzZW5hcGlfbmRldilcbi1cdFx0XHRyZXR1cm4gLUVOT01FTTtcbitcdFx0aWYgKCFpcnFfZ3JwLVx1MDAzZW5hcGlfbmRldikge1xuK1x0XHRcdHJldCA9IC1FTk9NRU07XG4rXHRcdFx0aXJxX2dycC1cdTAwM2VudW1faXJxID0gMDtcbitcdFx0XHRnb3RvIGVycl9yZXF1ZXN0X2lycTtcbitcdFx0fVxuIFxuIFx0XHRuZXRpZl9uYXBpX2FkZChpcnFfZ3JwLVx1MDAzZW5hcGlfbmRldiwgXHUwMDI2aXJxX2dycC1cdTAwM2VuYXBpLFxuIFx0XHRcdCAgICAgICBhdGgxMWtfYWhiX2V4dF9ncnBfbmFwaV9wb2xsKTtcbkBAIC01ODUsOSArNTk4LDcgQEAgc3RhdGljIGludCBhdGgxMWtfYWhiX2NvbmZpZ19leHRfaXJxKHN0cnVjdCBhdGgxMWtfYmFzZSAqYWIpXG4gXHRcdFx0XHR9XG4gXHRcdFx0fVxuIFx0XHR9XG4tXHRcdGlycV9ncnAtXHUwMDNlbnVtX2lycSA9IG51bV9pcnE7XG4tXG4tXHRcdGZvciAoaiA9IDA7IGogXHUwMDNjIGlycV9ncnAtXHUwMDNlbnVtX2lycTsgaisrKSB7XG4rXHRcdGZvciAoaiA9IDA7IGogXHUwMDNjIG51bV9pcnE7IGorKykge1xuIFx0XHRcdGludCBpcnFfaWR4ID0gaXJxX2dycC1cdTAwM2VpcnFzW2pdO1xuIFxuIFx0XHRcdGlycSA9IHBsYXRmb3JtX2dldF9pcnFfYnluYW1lKGFiLVx1MDAzZXBkZXYsXG5AQCAtNjAwLDExICs2MTEsMjMgQEAgc3RhdGljIGludCBhdGgxMWtfYWhiX2NvbmZpZ19leHRfaXJxKHN0cnVjdCBhdGgxMWtfYmFzZSAqYWIpXG4gXHRcdFx0aWYgKHJldCkge1xuIFx0XHRcdFx0YXRoMTFrX2VycihhYiwgXCJmYWlsZWQgcmVxdWVzdF9pcnEgZm9yICVkXFxuXCIsXG4gXHRcdFx0XHRcdCAgIGlycSk7XG4rXHRcdFx0XHRpcnFfZ3JwLVx1MDAzZW51bV9pcnEgPSBqO1xuK1x0XHRcdFx0YXRoMTFrX2FoYl9mcmVlX2V4dF9pcnFfZ3JwKGFiLCBpcnFfZ3JwKTtcbitcdFx0XHRcdGdvdG8gZXJyX3JlcXVlc3RfaXJxO1xuIFx0XHRcdH1cbiBcdFx0fVxuK1xuK1x0XHRpcnFfZ3JwLVx1MDAzZW51bV9pcnEgPSBudW1faXJxO1xuIFx0fVxuIFxuIFx0cmV0dXJuIDA7XG4rXG4rZXJyX3JlcXVlc3RfaXJxOlxuK1x0Zm9yIChpLS07IGkgXHUwMDNlPSAwOyBpLS0pIHtcbitcdFx0aXJxX2dycCA9IFx1MDAyNmFiLVx1MDAzZWV4dF9pcnFfZ3JwW2ldO1xuK1x0XHRhdGgxMWtfYWhiX2ZyZWVfZXh0X2lycV9ncnAoYWIsIGlycV9ncnApO1xuK1x0fVxuK1x0cmV0dXJuIHJldDtcbiB9XG4gXG4gc3RhdGljIGludCBhdGgxMWtfYWhiX2NvbmZpZ19pcnEoc3RydWN0IGF0aDExa19iYXNlICphYilcbkBAIC02MjksMTYgKzY1MiwyNCBAQCBzdGF0aWMgaW50IGF0aDExa19haGJfY29uZmlnX2lycShzdHJ1Y3QgYXRoMTFrX2Jhc2UgKmFiKVxuIFx0XHRyZXQgPSByZXF1ZXN0X2lycShpcnEsIGF0aDExa19haGJfY2VfaW50ZXJydXB0X2hhbmRsZXIsXG4gXHRcdFx0XHQgIElSUUZfVFJJR0dFUl9SSVNJTkcsIGlycV9uYW1lW2lycV9pZHhdLFxuIFx0XHRcdFx0ICBjZV9waXBlKTtcbi1cdFx0aWYgKHJldClcbitcdFx0aWYgKHJldCkge1xuK1x0XHRcdGF0aDExa19lcnIoYWIsIFwiZmFpbGVkIHJlcXVlc3RfaXJxIGZvciAlZFxcblwiLCBpcnEpO1xuK1x0XHRcdGF0aDExa19haGJfZnJlZV9jZV9pcnFzKGFiLCBpKTtcbiBcdFx0XHRyZXR1cm4gcmV0O1xuK1x0XHR9XG4gXG4gXHRcdGFiLVx1MDAzZWlycV9udW1baXJxX2lkeF0gPSBpcnE7XG4gXHR9XG4gXG4gXHQvKiBDb25maWd1cmUgZXh0ZXJuYWwgaW50ZXJydXB0cyAqL1xuIFx0cmV0ID0gYXRoMTFrX2FoYl9jb25maWdfZXh0X2lycShhYik7XG4rXHRpZiAocmV0KSB7XG4rXHRcdGF0aDExa19lcnIoYWIsIFwiZmFpbGVkIHRvIGNvbmZpZ3VyZSBleHQgaXJxOiAlZFxcblwiLCByZXQpO1xuK1x0XHRhdGgxMWtfYWhiX2ZyZWVfY2VfaXJxcyhhYiwgYWItXHUwMDNlaHdfcGFyYW1zLmNlX2NvdW50KTtcbitcdFx0cmV0dXJuIHJldDtcbitcdH1cbiBcbi1cdHJldHVybiByZXQ7XG4rXHRyZXR1cm4gMDtcbiB9XG4gXG4gc3RhdGljIGludCBhdGgxMWtfYWhiX21hcF9zZXJ2aWNlX3RvX3BpcGUoc3RydWN0IGF0aDExa19iYXNlICphYiwgdTE2IHNlcnZpY2VfaWQsXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNFQwNToxNDowNS41NzA1MjY1NjVaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2MTM4NDQ1OTI3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUmVhY2hhYmlsaXR5IG9mIGFuIElSUSBDb25maWd1cmF0aW9uIEZpeCoqXG5cbk9rYXksIHNvIEkndmUgZ290IHRoaXMgcGF0Y2ggdGhhdCBhZGRyZXNzZXMgc29tZSBlcnJvciBoYW5kbGluZyBpbiB0aGUgYGF0aDExa2AgZHJpdmVyLCBzcGVjaWZpY2FsbHkgY29uY2VybmluZyBJUlEgY29uZmlndXJhdGlvbiBvbiB0aGUgQUhCIGJ1cyAoYGRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvYWhiLmNgKS4gSXQgbG9va3MgbGlrZSB0aGV5J3JlIGNsZWFuaW5nIHVwIHJlcXVlc3RlZCBJUlFzIGFuZCBOQVBJIHN0cnVjdHVyZXMgd2hlbiBgcmVxdWVzdF9pcnFgIG9yIGBhbGxvY19uZXRkZXZfZHVtbXlgIGZhaWxzIGluIHRoZSBgYXRoMTFrX2FoYl9jb25maWdfZXh0X2lycWAgYW5kIGBhdGgxMWtfYWhiX2NvbmZpZ19pcnFgIGZ1bmN0aW9ucy4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIGNhbiBJIGV2ZW4gKnRyaWdnZXIqIHRoaXM/IEkgbmVlZCB0byBmaWd1cmUgb3V0IGlmIHRoaXMgY29kZSBpcyByZWFjaGFibGUgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCDigJMgc3BlY2lmaWNhbGx5LCBRRU1VIG9yIEdvb2dsZSBDb21wdXRlIEVuZ2luZS5cblxuVGhpcyBgYXRoMTFrYCBkcml2ZXIsIGFzIEkgcmVjYWxsLCBpcyBmb3IgUXVhbGNvbW0gV2ktRmkgNiAoODAyLjExYXgpIGRldmljZXMuIFVzdWFsbHksIHRoYXQgbWVhbnMgc3BlY2lhbGl6ZWQgUENJIG9yIEFIQiBoYXJkd2FyZS4gR2l2ZW4gdGhpcyBpcyBzcGVjaWZpY2FsbHkgdGhlIEFIQiBidXMsIGl0J3MgdmVyeSBsaWtlbHkgdGFyZ2V0aW5nIFNvQ3MgbGlrZSBJUFE4MDc0IG9yIElQUTYwMTgsIHdoaWNoIGlzIHdoZXJlIHRoaW5ncyBnZXQgaW50ZXJlc3RpbmcuIENhbiBJIGZ1enogdGhpcz8gU3l6a2FsbGVyJ3MgZ3JlYXQgZm9yIFBDSSBkZXZpY2VzIHVzaW5nIHZQQ0ksIGJ1dCBBSEIgaXMgdXN1YWxseSBhIHBsYXRmb3JtIGRldmljZSB0eXBlLiBTbywgaXMgdGhlcmUgYSB3YXkgdG8gZGVzY3JpYmUgaXQgdG8gU3l6a2FsbGVyP1xuXG5NeSBuZXh0IHN0ZXAgaXMgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgU3l6a2FsbGVyIGRlc2NyaXB0aW9ucyBmb3IgYGF0aDExa2AgcGxhdGZvcm0gZGV2aWNlcywgb3IgaWYgdGhpcyBkcml2ZXIgaXMgcHVyZWx5IGRyaXZlbiBieSB0aGUgZGV2aWNlIHRyZWUuIElmIGl04oCZcyBhIHBsYXRmb3JtIGRyaXZlciwgU3l6a2FsbGVyICptaWdodCogYmUgYWJsZSB0byBjcmVhdGUgdGhlIHBsYXRmb3JtIGRldmljZXMgaWYgdGhlcmUgYXJlIGRlc2NyaXB0aW9ucy4gT3RoZXJ3aXNlLCBpdOKAmXMgcHJvYmFibHkgZ29pbmcgdG8gYmUgdW5yZWFjaGFibGUgdW5sZXNzIEknbSBvbiBhIHNwZWNpZmljIEFSTSBib2FyZCB0aGF0IGhhcyB0aGUgaGFyZHdhcmUgZGVmaW5lZC4gSSBzaG91bGQgcHJvYmFibHkgZ3JlcCBmb3Igc29tZXRoaW5nIGxpa2UgYGF0aDExa19haGJfcHJvYmVgIG9yIGEgc2ltaWxhciBwcm9iZSBmdW5jdGlvbiB0byBjb25maXJtIHRoZSBkcml2ZXIncyBwbGF0Zm9ybSBuYXR1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM5NzYsIk91dHB1dFRva2VucyI6MjMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNFQwNToxNDoxMS43MDg5NzU0MDJaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjE5NTkzMjExNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJhdGgxMWtfYWhiX3Byb2JlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvYWhiLmM9MTEwMz1zdGF0aWMgaW50IGF0aDExa19haGJfZndfcmVzb3VyY2VfZGVpbml0KHN0cnVjdCBhdGgxMWtfYmFzZSAqYWIpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2FoYi5jLTExMzctXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9haGIuYzoxMTM4OnN0YXRpYyBpbnQgYXRoMTFrX2FoYl9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvYWhiLmMtMTEzOS17XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2FoYi5jPTEzMzM9c3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgYXRoMTFrX2FoYl9kcml2ZXIgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2FoYi5jLTEzMzctXFx0fSxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2FoYi5jOjEzMzg6XFx0LnByb2JlID0gYXRoMTFrX2FoYl9wcm9iZSxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2FoYi5jLTEzMzktXFx0LnJlbW92ZSA9IGF0aDExa19haGJfcmVtb3ZlLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNFQwNToxNDoxMy45MDQ5MTQxNjZaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyODYwOTUyNjU1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCdzIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipQbGF0Zm9ybSBEcml2ZXIgQW5hbHlzaXMqKlxuXG5SaWdodCwgdGhpcyBsb29rcyBsaWtlIHdlJ3JlIGRlYWxpbmcgd2l0aCBhIHBsYXRmb3JtIGRyaXZlci4gVGhlIGZpcnN0IHRoaW5nIEkgd2FudCB0byBkbyBpcyBzZWUgaWYgU3l6a2FsbGVyIGhhcyBhbnkgcHJlZGVmaW5lZCBkZXNjcmlwdGlvbnMgZm9yIGl0LiBUaGF0J3MgYWx3YXlzIG15IHN0YXJ0aW5nIHBvaW50LiBTYXZlcyBhIHRvbiBvZiB0aW1lIGlmIHNvbWVvbmUncyBhbHJlYWR5IGRvbmUgdGhlIGhlYXZ5IGxpZnRpbmcgYW5kIGlkZW50aWZpZWQgcmVsZXZhbnQgc3lzY2FsbHMgYW5kIGZ1enppbmcgdGFyZ2V0cy4gTm8gbmVlZCB0byByZWludmVudCB0aGUgd2hlZWwsIGVzcGVjaWFsbHkgd2hlbiBTeXprYWxsZXIncyBjb3ZlcmFnZSBpcyB1c3VhbGx5IHByZXR0eSBnb29kIGZvciBjb21tb24gcGxhdGZvcm0gZHJpdmVycy4gTGV0J3MgZGlnIGluIGFuZCBzZWUgd2hhdCdzIGF2YWlsYWJsZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NTA4MCwiT3V0cHV0VG9rZW5zIjoyNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI0VDA1OjE0OjE2Ljc2NTg2ODQ3MVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MDc0MjgyOCwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYXRoMTFrXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcInN5cy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI0VDA1OjE0OjE2LjgyNjYxOTc5OVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUzNDMzMTc5ODAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTmF2aWdhdGluZyB0aGUgU3l6a2FsbGVyIExhbmRzY2FwZSoqXG5cbk9rYXksIGhlcmUncyB0aGUgc2l0dWF0aW9uLiBJIG5lZWQgdG8gZmlndXJlIG91dCBob3cgdG8gYXBwcm9hY2ggdGhpcywgYnV0IGZpcnN0LCBhIGNyaXRpY2FsIGNvbnN0cmFpbnQganVtcHMgb3V0LiBJIGNhbid0IHVzZSBncmVwcGVyIG9uIGFueXRoaW5nIGluIHRoZSBgc3lzL2AgZGlyZWN0b3J5LiBUaGF0J3MgYSByZWQgZmxhZyDigJMgYSBoYXJkIHN0b3AuIFRoZSBwcm9tcHQgc3BlY2lmaWNhbGx5IGRpcmVjdHMgbWUgYXdheSBmcm9tIGBncmVwcGVyYCBhbmQgdG93YXJkcyBgcmVhZC1maWxlYCBvciBgY29kZXNlYXJjaC1kaXItaW5kZXhgIGluc3RlYWQuIEJ1dCB3YWl04oCmIHRoZSBpbnN0cnVjdGlvbnMgYWxzbyBtZW50aW9uIGEgYHt7LnRvb2xSZWFkRGVzY3JpcHRpb259fWAgdG9vbCwgd2hpY2ggaXMgc3VwcG9zZWQgdG8gaGFuZGxlIHRob3NlIGRlc2NyaXB0aW9ucy4gVGhhdCBzb3VuZHMgaWRlYWwsIGJ1dCB0aGVyZSdzIG5vIHN1Y2ggdG9vbCEgSXQncyBub3QgaW4gdGhlIGxpc3RlZCB0b29scy4gVGhhdCdzIGNvbmZ1c2luZy4gVGhlIGF2YWlsYWJsZSB0b29scyBhcmUgYGdyZXBwZXJgLCBgY29kZXNlYXJjaC1kaXItaW5kZXhgLCBgcmVhZC1maWxlYCwgYW5kIGBzZXQtcmVzdWx0c2AsIHdoaWNoIGRvZXNuJ3Qgc2VlbSB0byBoYXZlIHRoZSByZXF1aXJlZCBmdW5jdGlvbmFsaXR5LlxuXG5BbHJpZ2h0LCBtb3Zpbmcgb24sIHBsYXRmb3JtIGRldmljZXMgYXJlIGFub3RoZXIgY29uc2lkZXJhdGlvbi4gVHlwaWNhbGx5LCB0aGV5IGFyZW4ndCBkaXJlY3RseSBmdXp6ZWQgdW5sZXNzIGEgcHNldWRvLXN5c2NhbGwgb3IgYW4gaW5qZWN0aW9uIG1lY2hhbmlzbSBleGlzdHMuIE5vdywgZG9lcyBzeXprYWxsZXIgaGF2ZSBhIHdheSB0byBpbmplY3QgcGxhdGZvcm0gZGV2aWNlcyB2aWEgYC9zeXMvZGV2aWNlcy9wbGF0Zm9ybWAgb3Igc29tZXRoaW5nIHNpbWlsYXI/IEkgZG9uJ3QgdGhpbmsgc28uIEknbSB1c3VhbGx5IGRlYWxpbmcgd2l0aCB0aGluZ3MgbGlrZSBgc3l6X2RldmxpbmtgIG9yIHNwZWNpYWxpemVkIHBzZXVkby1zeXNjYWxscyB0byBoYW5kbGUgdGhpcy5cblxuU28sIGhlcmUncyBhIHNlcGFyYXRlIHF1ZXN0aW9uIHRoYXQganVzdCBwb3BwZWQgdXAsIGlzIGBhdGgxMWtgIGFjdHVhbGx5IHJlYWNoYWJsZSBpbiBzdGFuZGFyZCB4ODZfNjQgdmlydHVhbCBtYWNoaW5lcz8gVGhhdCdzIGEga2V5IGRldGFpbCB0byBjb25maXJtLiBTaW5jZSBBSEIgaXMgYSBwcmV0dHkgc3RhbmRhcmQgQVJNLXNwZWNpZmljIGJ1cywgdGhpcyBuZWVkcyB2ZXJpZmljYXRpb24uIFRpbWUgdG8gZGl2ZSBpbnRvIHRoZSBgZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9LY29uZmlnYCBmaWxlIHRvIGNoZWNrIG9uIHRoaXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUyNzEsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyODgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjRUMDU6MTQ6MjIuMTY5OTM5NDQ5WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU1OTk5NTA5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBBVEgxMUtcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEJTRC0zLUNsYXVzZS1DbGVhclxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvS2NvbmZpZzoyOmNvbmZpZyBBVEgxMUtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL0tjb25maWctMy1cXHR0cmlzdGF0ZSBcXFwiUXVhbGNvbW0gODAyLjExYXggY2hpcHNldCBzdXBwb3J0XFxcIlxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9LY29uZmlnLTEyLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvS2NvbmZpZzoxMzpjb25maWcgQVRIMTFLX0FIQlxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvS2NvbmZpZy0xNC1cXHR0cmlzdGF0ZSBcXFwiQXRoZXJvcyBhdGgxMWsgQUhCIHN1cHBvcnRcXFwiXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL0tjb25maWctMTktXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9LY29uZmlnOjIwOmNvbmZpZyBBVEgxMUtfUENJXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9LY29uZmlnLTIxLVxcdHRyaXN0YXRlIFxcXCJBdGhlcm9zIGF0aDExayBQQ0kgc3VwcG9ydFxcXCJcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvS2NvbmZpZy0yOS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL0tjb25maWc6MzA6Y29uZmlnIEFUSDExS19ERUJVR1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvS2NvbmZpZy0zMS1cXHRib29sIFxcXCJRQ0EgYXRoMTFrIGRlYnVnZ2luZ1xcXCJcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvS2NvbmZpZy0zNy1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL0tjb25maWc6Mzg6Y29uZmlnIEFUSDExS19ERUJVR0ZTXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9LY29uZmlnLTM5LVxcdGJvb2wgXFxcIlFDQSBhdGgxMWsgZGVidWdmcyBzdXBwb3J0XFxcIlxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9LY29uZmlnLTQ1LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvS2NvbmZpZzo0Njpjb25maWcgQVRIMTFLX1RSQUNJTkdcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL0tjb25maWctNDctXFx0Ym9vbCBcXFwiYXRoMTFrIHRyYWNpbmcgc3VwcG9ydFxcXCJcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvS2NvbmZpZy01MS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL0tjb25maWc6NTI6Y29uZmlnIEFUSDExS19TUEVDVFJBTFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvS2NvbmZpZy01My1cXHRib29sIFxcXCJRQ0EgYXRoMTFrIHNwZWN0cmFsIHNjYW4gc3VwcG9ydFxcXCJcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvS2NvbmZpZy02MC1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL0tjb25maWc6NjE6Y29uZmlnIEFUSDExS19DRlJcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL0tjb25maWctNjItXFx0Ym9vbCBcXFwiYXRoMTFrIGNoYW5uZWwgZnJlcXVlbmN5IHJlc3BvbnNlIHN1cHBvcnRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI0VDA1OjE0OjIyLjIyNTk0MjQwOFoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY5NDQ0MzMyNjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqSW52ZXN0aWdhdGluZyBEZXBlbmRlbmNpZXMgb2YgQVRIMTFLX0FIQioqXG5cbk9rYXksIHNvIEknbSBkaXZpbmcgaW50byB0aGUgYEFUSDExS19BSEJgIG1vZHVsZS4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIFwiV2hhdCdzIHRoaXMgdGhpbmcgYnVpbHQgb24/IFdoYXQgb3RoZXIgY29tcG9uZW50cyBpcyBpdCByZWxpYW50IHVwb24/XCIgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGZvdW5kYXRpb25hbCBkZXBlbmRlbmNpZXMuIEkgd2FudCB0byBidWlsZCBhIG1lbnRhbCBtYXAgb2YgaXRzIHJlbGF0aW9uc2hpcHMgd2l0aGluIHRoZSBicm9hZGVyIGtlcm5lbCBhcmNoaXRlY3R1cmUsIHlvdSBrbm93LCB0aGUgdXN1YWwgZmlyc3Qgc3RlcCB3aGVuIEknbSBhc3Nlc3NpbmcgYSBuZXcgcGllY2Ugb2YgZHJpdmVyIGNvZGUgb3IgdHJvdWJsZXNob290aW5nIGEgcmVsYXRlZCBpc3N1ZS4gTGV0J3Mgc2VlIHdoYXQgdGhhdCBsb29rcyBsaWtlLiBJJ20gZ29pbmcgdG8gc3RhcnQgZGlnZ2luZyBpbnRvIHRoZSBtYWtlZmlsZXMgYW5kIGluY2x1ZGUgc3RhdGVtZW50czsgbm90aGluZyBsaWtlIGEgYml0IG9mIGdyZXAgdG8gZ2V0IHRoZSBsYXkgb2YgdGhlIGxhbmQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY2NDMsIk91dHB1dFRva2VucyI6NDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNFQwNToxNDoyOS4xNzAzNzc0N1oiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2ODU3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogMzBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBCU0QtMy1DbGF1c2UtQ2xlYXJcXG4gICAyOlxcdGNvbmZpZyBBVEgxMUtcXG4gICAzOlxcdFxcdHRyaXN0YXRlIFxcXCJRdWFsY29tbSA4MDIuMTFheCBjaGlwc2V0IHN1cHBvcnRcXFwiXFxuICAgNDpcXHRcXHRkZXBlbmRzIG9uIE1BQzgwMjExIFxcdTAwMjZcXHUwMDI2IEhBU19ETUFcXG4gICA1OlxcdFxcdHNlbGVjdCBBVEhfQ09NTU9OXFxuICAgNjpcXHRcXHRzZWxlY3QgUUNPTV9RTUlfSEVMUEVSU1xcbiAgIDc6XFx0XFx0aGVscFxcbiAgIDg6XFx0XFx0ICBUaGlzIG1vZHVsZSBhZGRzIHN1cHBvcnQgZm9yIFF1YWxjb21tIFRlY2hub2xvZ2llcyA4MDIuMTFheCBmYW1pbHkgb2ZcXG4gICA5OlxcdFxcdCAgY2hpcHNldHMuXFxuICAxMDpcXHRcXG4gIDExOlxcdFxcdCAgSWYgeW91IGNob29zZSB0byBidWlsZCBhIG1vZHVsZSwgaXQnbGwgYmUgY2FsbGVkIGF0aDExay5cXG4gIDEyOlxcdFxcbiAgMTM6XFx0Y29uZmlnIEFUSDExS19BSEJcXG4gIDE0OlxcdFxcdHRyaXN0YXRlIFxcXCJBdGhlcm9zIGF0aDExayBBSEIgc3VwcG9ydFxcXCJcXG4gIDE1OlxcdFxcdGRlcGVuZHMgb24gQVRIMTFLXFxuICAxNjpcXHRcXHRkZXBlbmRzIG9uIFJFTU9URVBST0NcXG4gIDE3OlxcdFxcdGhlbHBcXG4gIDE4OlxcdFxcdCAgVGhpcyBtb2R1bGUgYWRkcyBzdXBwb3J0IGZvciBBSEIgYnVzXFxuICAxOTpcXHRcXG4gIDIwOlxcdGNvbmZpZyBBVEgxMUtfUENJXFxuICAyMTpcXHRcXHR0cmlzdGF0ZSBcXFwiQXRoZXJvcyBhdGgxMWsgUENJIHN1cHBvcnRcXFwiXFxuICAyMjpcXHRcXHRkZXBlbmRzIG9uIEFUSDExSyBcXHUwMDI2XFx1MDAyNiBQQ0lcXG4gIDIzOlxcdFxcdHNlbGVjdCBNSElfQlVTXFxuICAyNDpcXHRcXHRzZWxlY3QgUVJUUlxcbiAgMjU6XFx0XFx0c2VsZWN0IFFSVFJfTUhJXFxuICAyNjpcXHRcXHRzZWxlY3QgUENJX1BXUkNUUkxfUFdSU0VRIGlmIEhBVkVfUFdSQ1RSTFxcbiAgMjc6XFx0XFx0aGVscFxcbiAgMjg6XFx0XFx0ICBUaGlzIG1vZHVsZSBhZGRzIHN1cHBvcnQgZm9yIFBDSUUgYnVzXFxuICAyOTpcXHRcXG4gIDMwOlxcdGNvbmZpZyBBVEgxMUtfREVCVUdcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjRUMDU6MTQ6MjkuMTcwNDQ3NjJaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzA4ODAxNzgyOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEFUSDExS19BSEIgRHJpdmVyKipcblxuT2theSwgc28gYEFUSDExS19BSEJgIGlzIHBhcnQgb2YgdGhlIGBBVEgxMUtgIGZhbWlseSwgYW5kIGl0IHNlZW1zIHRvIHJlbHkgb24gYFJFTU9URVBST0NgIGFzIHdlbGwuIFRoYXQncyBnb29kIHRvIGtub3csIHNldHMgYSBmb3VuZGF0aW9uIGZvciBob3cgaXQgb3BlcmF0ZXMuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBmaWd1cmUgb3V0IHdoZXRoZXIgdGhpcyBwYXJ0aWN1bGFyIEFIQiBpbXBsZW1lbnRhdGlvbiBoYXMgYW55IGFyY2hpdGVjdHVyYWwgY29uc3RyYWludHMuIEkgbmVlZCB0byBkZXRlcm1pbmUgaWYgaXQgaXMgdGllZCB0byBBUk0gc3BlY2lmaWNhbGx5LCBvciBhbnkgb3RoZXIgQ1BVIGFyY2hpdGVjdHVyZSwgZm9yIHRoYXQgbWF0dGVyLiBOb3csIHdhaXQgYSBtaW51dGUsIEFIQuKApiB0aGF0IHNjcmVhbXMgXCJkZXZpY2UgdHJlZVwiIHRvIG1lISBBSEIgZGV2aWNlcyBhcmUgdHlwaWNhbGx5IGRpc2NvdmVyZWQgdGhyb3VnaCB0aGUgZGV2aWNlIHRyZWUsIHNvIHRoYXQncyBwcm9iYWJseSB0aGUgY3J1Y2lhbCBlbnRyeSBwb2ludCBoZXJlLiBJIHNob3VsZCBnbyBzdHJhaWdodCB0byBgYXRoMTFrX2FoYl9wcm9iZWAgYW5kIHNlZSB3aGF0IGl0J3MgZG9pbmcuIFRoYXQnbGwgYmUgbXkgc3RhcnRpbmcgcG9pbnQgZm9yIHVuZGVyc3RhbmRpbmcgaXRzIGluaXRpYWxpemF0aW9uIGFuZCBzZXR1cC5cblxuXG4iLCJJbnB1dFRva2VucyI6NzI2NSwiT3V0cHV0VG9rZW5zIjo0NiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjcxLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjRUMDU6MTQ6MzIuMjU4NDY3MTE4WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExNDY4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2FoYi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDExMzAsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjExMzA6XFx0XFx0aW9tbXVfZGV0YWNoX2RldmljZShpb21tdSwgYWJfYWhiLVxcdTAwM2Vmdy5kZXYpO1xcbjExMzE6XFx0XFx0aW9tbXVfZG9tYWluX2ZyZWUoaW9tbXUpO1xcbjExMzI6XFx0XFxuMTEzMzpcXHRcXHRwbGF0Zm9ybV9kZXZpY2VfdW5yZWdpc3Rlcih0b19wbGF0Zm9ybV9kZXZpY2UoYWJfYWhiLVxcdTAwM2Vmdy5kZXYpKTtcXG4xMTM0OlxcdFxcbjExMzU6XFx0XFx0cmV0dXJuIDA7XFxuMTEzNjpcXHR9XFxuMTEzNzpcXHRcXG4xMTM4OlxcdHN0YXRpYyBpbnQgYXRoMTFrX2FoYl9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxcbjExMzk6XFx0e1xcbjExNDA6XFx0XFx0c3RydWN0IGF0aDExa19iYXNlICphYjtcXG4xMTQxOlxcdFxcdGNvbnN0IHN0cnVjdCBhdGgxMWtfaGlmX29wcyAqaGlmX29wcztcXG4xMTQyOlxcdFxcdGNvbnN0IHN0cnVjdCBhdGgxMWtfcGNpX29wcyAqcGNpX29wcztcXG4xMTQzOlxcdFxcdGVudW0gYXRoMTFrX2h3X3JldiBod19yZXY7XFxuMTE0NDpcXHRcXHRpbnQgcmV0O1xcbjExNDU6XFx0XFxuMTE0NjpcXHRcXHRod19yZXYgPSAodWludHB0cl90KWRldmljZV9nZXRfbWF0Y2hfZGF0YShcXHUwMDI2cGRldi1cXHUwMDNlZGV2KTtcXG4xMTQ3OlxcdFxcbjExNDg6XFx0XFx0c3dpdGNoIChod19yZXYpIHtcXG4xMTQ5OlxcdFxcdGNhc2UgQVRIMTFLX0hXX0lQUTgwNzQ6XFxuMTE1MDpcXHRcXHRjYXNlIEFUSDExS19IV19JUFE2MDE4X0hXMTA6XFxuMTE1MTpcXHRcXHRjYXNlIEFUSDExS19IV19JUFE1MDE4X0hXMTA6XFxuMTE1MjpcXHRcXHRcXHRoaWZfb3BzID0gXFx1MDAyNmF0aDExa19haGJfaGlmX29wc19pcHE4MDc0O1xcbjExNTM6XFx0XFx0XFx0cGNpX29wcyA9IE5VTEw7XFxuMTE1NDpcXHRcXHRcXHRicmVhaztcXG4xMTU1OlxcdFxcdGNhc2UgQVRIMTFLX0hXX1dDTjY3NTBfSFcxMDpcXG4xMTU2OlxcdFxcdFxcdGhpZl9vcHMgPSBcXHUwMDI2YXRoMTFrX2FoYl9oaWZfb3BzX3djbjY3NTA7XFxuMTE1NzpcXHRcXHRcXHRwY2lfb3BzID0gXFx1MDAyNmF0aDExa19haGJfcGNpX29wc193Y242NzUwO1xcbjExNTg6XFx0XFx0XFx0YnJlYWs7XFxuMTE1OTpcXHRcXHRkZWZhdWx0OlxcbjExNjA6XFx0XFx0XFx0ZGV2X2VycihcXHUwMDI2cGRldi1cXHUwMDNlZGV2LCBcXFwidW5zdXBwb3J0ZWQgZGV2aWNlIHR5cGUgJWRcXFxcblxcXCIsIGh3X3Jldik7XFxuMTE2MTpcXHRcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuMTE2MjpcXHRcXHR9XFxuMTE2MzpcXHRcXG4xMTY0OlxcdFxcdHJldCA9IGRtYV9zZXRfbWFza19hbmRfY29oZXJlbnQoXFx1MDAyNnBkZXYtXFx1MDAzZWRldiwgRE1BX0JJVF9NQVNLKDMyKSk7XFxuMTE2NTpcXHRcXHRpZiAocmV0KSB7XFxuMTE2NjpcXHRcXHRcXHRkZXZfZXJyKFxcdTAwMjZwZGV2LVxcdTAwM2VkZXYsIFxcXCJmYWlsZWQgdG8gc2V0IDMyLWJpdCBjb25zaXN0ZW50IGRtYVxcXFxuXFxcIik7XFxuMTE2NzpcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbjExNjg6XFx0XFx0fVxcbjExNjk6XFx0XFxuMTE3MDpcXHRcXHRhYiA9IGF0aDExa19jb3JlX2FsbG9jKFxcdTAwMjZwZGV2LVxcdTAwM2VkZXYsIHNpemVvZihzdHJ1Y3QgYXRoMTFrX2FoYiksXFxuMTE3MTpcXHRcXHRcXHRcXHQgICAgICAgQVRIMTFLX0JVU19BSEIpO1xcbjExNzI6XFx0XFx0aWYgKCFhYikge1xcbjExNzM6XFx0XFx0XFx0ZGV2X2VycihcXHUwMDI2cGRldi1cXHUwMDNlZGV2LCBcXFwiZmFpbGVkIHRvIGFsbG9jYXRlIGF0aDExayBiYXNlXFxcXG5cXFwiKTtcXG4xMTc0OlxcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbjExNzU6XFx0XFx0fVxcbjExNzY6XFx0XFxuMTE3NzpcXHRcXHRhYi1cXHUwMDNlaGlmLm9wcyA9IGhpZl9vcHM7XFxuMTE3ODpcXHRcXHRhYi1cXHUwMDNlcGRldiA9IHBkZXY7XFxuMTE3OTpcXHRcXHRhYi1cXHUwMDNlaHdfcmV2ID0gaHdfcmV2O1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNFQwNToxNDozMi4yNTg1ODMxNzhaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzQyNTM0OTQxOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIHRoZSBEZXZpY2UgUHJvYmUgRnVuY3Rpb24qKlxuXG5BbHJpZ2h0LCBzbyBJJ20gZGlnZ2luZyBpbnRvIHRoaXMgcHJvYmUgZnVuY3Rpb24sIGFuZCB0aGUgZmlyc3QgdGhpbmcgdGhhdCBjYXRjaGVzIG15IGV5ZSBpcyB0aGlzIGNhbGwgdG8gYGRldmljZV9nZXRfbWF0Y2hfZGF0YShcdTAwMjZwZGV2LVx1MDAzZWRldilgLiBOYXR1cmFsbHksIEknbSBpbW1lZGlhdGVseSB0aGlua2luZywgXCJPa2F5LCBsZXQncyBzZWUgaG93IHRoZSBkcml2ZXIgaW50ZXJhY3RzIHdpdGggdGhlIGRldmljZSBtYXRjaGluZyB0YWJsZS5cIiBJIHdhbnQgdG8gdW5kZXJzdGFuZCBob3cgaXQncyBpZGVudGlmeWluZyB0aGUgY29ycmVjdCBoYXJkd2FyZS4gV2hhdCBraW5kIG9mIG1hdGNoIGRhdGEgYXJlIHdlIGdldHRpbmc/IElzIGl0IHVzaW5nIHBsYXRmb3JtIGRldmljZSBJRHMsIGRldmljZSB0cmVlIGJpbmRpbmdzLCBBQ1BJIGRhdGEsIG9yIHNvbWUgY3VzdG9tIG1ldGhvZD8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHNwZWNpZmljcy4gTGV0J3MgdHJhY2UgdGhpcyBiYWNrIHRvIHRoZSBtYXRjaCB0YWJsZSBhbmQgc2VlIHdoYXQncyBiZWluZyBsb29rZWQgZm9yIGFuZCBob3cgdGhlIGhhcmR3YXJlIGlzIGJlaW5nIGlkZW50aWZpZWQgYW5kIGFzc29jaWF0ZWQgd2l0aCB0aGUgZHJpdmVyLiBJIG5lZWQgdGhlIGZ1bGwgcGljdHVyZSB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIGRyaXZlciBiaW5kcyB0byB0aGUgaGFyZHdhcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg0NTYsIk91dHB1dFRva2VucyI6NDYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI0VDA1OjE0OjM1LjY4MzkzNDQ3NloiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDA3NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9haGIuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMzIwLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMzIwOlxcdFxcdCAqL1xcbjEzMjE6XFx0XFx0YXRoMTFrX2FoYl9yZW1vdmVfcHJlcGFyZShhYik7XFxuMTMyMjpcXHRcXG4xMzIzOlxcdFxcdGlmICghKHRlc3RfYml0KEFUSDExS19GTEFHX1JFR0lTVEVSRUQsIFxcdTAwMjZhYi1cXHUwMDNlZGV2X2ZsYWdzKSkpXFxuMTMyNDpcXHRcXHRcXHRnb3RvIGZyZWVfcmVzb3VyY2VzO1xcbjEzMjU6XFx0XFxuMTMyNjpcXHRcXHRhdGgxMWtfY29yZV9kZWluaXQoYWIpO1xcbjEzMjc6XFx0XFxuMTMyODpcXHRmcmVlX3Jlc291cmNlczpcXG4xMzI5OlxcdFxcdGF0aDExa19md19kZXN0cm95KGFiKTtcXG4xMzMwOlxcdFxcdGF0aDExa19haGJfZnJlZV9yZXNvdXJjZXMoYWIpO1xcbjEzMzE6XFx0fVxcbjEzMzI6XFx0XFxuMTMzMzpcXHRzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBhdGgxMWtfYWhiX2RyaXZlciA9IHtcXG4xMzM0OlxcdFxcdC5kcml2ZXIgPSB7XFxuMTMzNTpcXHRcXHRcXHQubmFtZSA9IFxcXCJhdGgxMWtcXFwiLFxcbjEzMzY6XFx0XFx0XFx0Lm9mX21hdGNoX3RhYmxlID0gYXRoMTFrX2FoYl9vZl9tYXRjaCxcXG4xMzM3OlxcdFxcdH0sXFxuMTMzODpcXHRcXHQucHJvYmUgPSBhdGgxMWtfYWhiX3Byb2JlLFxcbjEzMzk6XFx0XFx0LnJlbW92ZSA9IGF0aDExa19haGJfcmVtb3ZlLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNFQwNToxNDozNS42ODQwMzY3NzZaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzk2NDY3ODU4MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoaXMgdGhvdWdodCBwcm9jZXNzLCBmcmFtZWQgaW4gdGhlIGZpcnN0IHBlcnNvbiwgYXMgaWYgdGhlc2Ugd2VyZSBteSBpbnRlcm5hbCBjb25zaWRlcmF0aW9ucywgYXNzdW1pbmcgSSdtIGFuIGV4cGVydDpcblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBEYXRhIFN0cnVjdHVyZSBgb2ZfbWF0Y2hfdGFibGVgKipcblxuUmlnaHQsIHNvIHRoZSBjb2RlIGlzIHVzaW5nIGBvZl9tYXRjaF90YWJsZSA9IGF0aDExa19haGJfb2ZfbWF0Y2hgLiBPa2F5LCB0aGF0J3MgaW50ZXJlc3RpbmcuIEkgaW1tZWRpYXRlbHkgd2FudCB0byB1bmRlcnN0YW5kIHdoYXQncyBpbiBgYXRoMTFrX2FoYl9vZl9tYXRjaGAuIEl0J3MgbGlrZWx5IGEgdGFibGUsIGEgZGF0YSBzdHJ1Y3R1cmUgdGhhdCBkZWZpbmVzIGhvdyB0aGUgc3lzdGVtIHJlY29nbml6ZXMgYW5kIGhhbmRsZXMgZGV2aWNlcyB2aWEgdGhlIE9wZW4gRmlybXdhcmUgbWVjaGFuaXNtLiBQcm9iYWJseSBpdCBjb250YWlucyBpbmZvcm1hdGlvbiB0aGF0IG1hcHMgc3BlY2lmaWMgaGFyZHdhcmUgaWRlbnRpZmllcnMsIGxpa2UgdGhlIGRldmljZSBJRCBvciB2ZW5kb3IgSUQsIHRvIHRoZSBjb3JyZXNwb25kaW5nIGRyaXZlciBvciBtb2R1bGUgcmVzcG9uc2libGUgZm9yIG1hbmFnaW5nIHRoYXQgaGFyZHdhcmUuIEdpdmVuIHRoZSBjb250ZXh0LCBpdCdzIGFsbW9zdCBjZXJ0YWlubHkgcmVsYXRlZCB0byB0aGUgQUhCIGJ1cyBhbmQgbGlrZWx5IHNwZWNpZmljYWxseSBkZXNpZ25lZCBmb3IgYSBRdWFsY29tbSBBdGhlcm9zIDExayBjaGlwLiBJIG5lZWQgdG8gZGl2ZSBpbnRvIHRoZSBkZWZpbml0aW9uIG9mIGBhdGgxMWtfYWhiX29mX21hdGNoYCB0byBzZWUgd2hhdCBmaWVsZHMgaXQgY29udGFpbnM6IGlzIGl0IHVzaW5nIGNvbXBhdGlibGUgc3RyaW5ncywgZGV2aWNlIElEcywgb3Igc29tZSBvdGhlciBpZGVudGlmaWVyIHRvIG1hdGNoIGFnYWluc3Q/IFdoYXQgcHJvcGVydGllcyBhcmUgdGhlc2UgbWF0Y2hlcyBleHBlY3RlZCB0byBjb250YWluLCBhbmQgaG93IGFyZSB0aG9zZSBwcm9wZXJ0aWVzIGdvaW5nIHRvIGJlIHVzZWQ/IFRoaXMgaXMga2V5IHRvIHVuZGVyc3RhbmRpbmcgaG93IHRoZSBkcml2ZXIga25vd3MgaXQgbmVlZHMgdG8gYXR0YWNoIHRvIHRoaXMgc3BlY2lmaWMgaGFyZHdhcmUuIExldCdzIGRpZyBpbiBhbmQgZmlndXJlIG91dCBleGFjdGx5IHdoYXQgaXQncyB0cnlpbmcgdG8gbWF0Y2guXG5cblxuIiwiSW5wdXRUb2tlbnMiOjkwMjksIk91dHB1dFRva2VucyI6MjUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozOSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI0VDA1OjE0OjM5LjY0ODcxNzE3N1oiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTc3MDQ3NzM0OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJhdGgxMWtfYWhiX29mX21hdGNoXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvYWhiLmMtMjMtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9haGIuYzoyNDpzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBhdGgxMWtfYWhiX29mX21hdGNoW10gPSB7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9haGIuYy0yNS1cXHQvKiBUT0RPOiBTaG91bGQgd2UgY2hhbmdlIHRoZSBjb21wYXRpYmxlIHN0cmluZyB0byBzb21ldGhpbmcgc2ltaWxhclxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9haGIuYy00Mi1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2FoYi5jOjQzOk1PRFVMRV9ERVZJQ0VfVEFCTEUob2YsIGF0aDExa19haGJfb2ZfbWF0Y2gpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvYWhiLmMtNDQtXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2FoYi5jPTEzMzM9c3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgYXRoMTFrX2FoYl9kcml2ZXIgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2FoYi5jLTEzMzUtXFx0XFx0Lm5hbWUgPSBcXFwiYXRoMTFrXFxcIixcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2FoYi5jOjEzMzY6XFx0XFx0Lm9mX21hdGNoX3RhYmxlID0gYXRoMTFrX2FoYl9vZl9tYXRjaCxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2FoYi5jLTEzMzctXFx0fSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjRUMDU6MTQ6NDEuNDE5MTk5MTQ1WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM4MDMzMTcxOTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB3aGF0J3MgZ29pbmcgdGhyb3VnaCBteSBtaW5kIGFzIEkgYXBwcm9hY2ggdGhpcyB0YXNrLCBrZWVwaW5nIGluIG1pbmQgbXkgZXhwZXJ0aXNlOlxuXG4qKkRpdmluZyBpbnRvIGBhdGgxMWtfYWhiX29mX21hdGNoYCoqXG5cbkFscmlnaHQsIGxldCdzIGdldCBkb3duIHRvIGl0LiBgYXRoMTFrX2FoYl9vZl9tYXRjaGDigKYgU291bmRzIGxpa2Ugd2UncmUgbG9va2luZyBhdCBhIHBpZWNlIG9mIHRoZSBBdGhlcm9zIHdpcmVsZXNzIGRyaXZlciBmb3IgQUhCIGJ1cyBpbnRlcmZhY2VzLCBsaWtlbHkgaW52b2x2aW5nIGRldmljZSB0cmVlIG1hdGNoaW5nLiBSaWdodCBhd2F5LCBteSBtaW5kIHN0YXJ0cyBkcmF3aW5nIGNvbm5lY3Rpb25zLiBJJ20gdGhpbmtpbmcgYWJvdXQgdGhlIGRldmljZSB0cmVlIGJpbmRpbmdzIGZvciB0aGlzIGhhcmR3YXJlLCBhbmQgaG93IHRoaXMgZnVuY3Rpb24gbGlrZWx5IHBsYXlzIGEgY3J1Y2lhbCByb2xlIGluIHByb2JpbmcgYW5kIGluaXRpYWxpemF0aW9uLiBUaGlzIGhpbnRzIGF0IHRoZSBsb3ctbGV2ZWwgZGV2aWNlIGVudW1lcmF0aW9uIHByb2Nlc3MgYW5kIGhvdyB0aGUgZHJpdmVyIGlkZW50aWZpZXMgYW5kIGJpbmRzIHRvIHRoZSBzcGVjaWZpYyBoYXJkd2FyZSBvbiB0aGUgQUhCLiBJJ20gaW1hZ2luaW5nIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgcGxhdGZvcm0ncyBkZXZpY2UgdHJlZSBzdHJ1Y3R1cmUgdG8gbWFrZSBzdXJlIGl0J3MgdGhlIHJpZ2h0IGRyaXZlciBmb3IgdGhlIGlkZW50aWZpZWQgaGFyZHdhcmUuIFdoYXQncyBpdCBkb2luZyB3aXRoIHRoZSBkZXZpY2UgSUQsIGNvbXBhdGlibGUgc3RyaW5ncywgYW5kIGFueSBzcGVjaWZpYyBwcm9wZXJ0aWVzPyBJcyBpdCBoYW5kbGluZyByZXZpc2lvbnMsIG9yIGp1c3QgdGhlIGJhc2ljIG1hdGNoaW5nPyBUaW1lIHRvIGRpZyBpbiBhbmQgZmluZCBvdXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk3MzEsIk91dHB1dFRva2VucyI6NDQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNFQwNToxNDo0NS4yMjI1MTk0NjFaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTIyMDQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvYWhiLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjQsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgMjQ6XFx0c3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgYXRoMTFrX2FoYl9vZl9tYXRjaFtdID0ge1xcbiAgMjU6XFx0XFx0LyogVE9ETzogU2hvdWxkIHdlIGNoYW5nZSB0aGUgY29tcGF0aWJsZSBzdHJpbmcgdG8gc29tZXRoaW5nIHNpbWlsYXJcXG4gIDI2OlxcdFxcdCAqIHRvIG9uZSB0aGF0IGF0aDEwayB1c2VzP1xcbiAgMjc6XFx0XFx0ICovXFxuICAyODpcXHRcXHR7IC5jb21wYXRpYmxlID0gXFxcInFjb20saXBxODA3NC13aWZpXFxcIixcXG4gIDI5OlxcdFxcdCAgLmRhdGEgPSAodm9pZCAqKUFUSDExS19IV19JUFE4MDc0LFxcbiAgMzA6XFx0XFx0fSxcXG4gIDMxOlxcdFxcdHsgLmNvbXBhdGlibGUgPSBcXFwicWNvbSxpcHE2MDE4LXdpZmlcXFwiLFxcbiAgMzI6XFx0XFx0ICAuZGF0YSA9ICh2b2lkICopQVRIMTFLX0hXX0lQUTYwMThfSFcxMCxcXG4gIDMzOlxcdFxcdH0sXFxuICAzNDpcXHRcXHR7IC5jb21wYXRpYmxlID0gXFxcInFjb20sd2NuNjc1MC13aWZpXFxcIixcXG4gIDM1OlxcdFxcdCAgLmRhdGEgPSAodm9pZCAqKUFUSDExS19IV19XQ042NzUwX0hXMTAsXFxuICAzNjpcXHRcXHR9LFxcbiAgMzc6XFx0XFx0eyAuY29tcGF0aWJsZSA9IFxcXCJxY29tLGlwcTUwMTgtd2lmaVxcXCIsXFxuICAzODpcXHRcXHQgIC5kYXRhID0gKHZvaWQgKilBVEgxMUtfSFdfSVBRNTAxOF9IVzEwLFxcbiAgMzk6XFx0XFx0fSxcXG4gIDQwOlxcdFxcdHsgfVxcbiAgNDE6XFx0fTtcXG4gIDQyOlxcdFxcbiAgNDM6XFx0TU9EVUxFX0RFVklDRV9UQUJMRShvZiwgYXRoMTFrX2FoYl9vZl9tYXRjaCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI0VDA1OjE0OjQ1LjIyMjY0NDc4MVoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4MzM3OTAwMDMxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUmVhY2hhYmlsaXR5IG9mIFRoaXMgUGxhdGZvcm0gRHJpdmVyKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwbGF0Zm9ybSBkcml2ZXIsIGFuZCBpdCdzIGNsZWFybHkgdGllZCB0byBzcGVjaWZpYyBkZXZpY2UgdHJlZSBub2RlcyDigJMgYHFjb20saXBxODA3NC13aWZpYCwgdGhhdCBraW5kIG9mIHRoaW5nLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgXCJJbiBhIHR5cGljYWwgc3l6a2FsbGVyIHNldHVwIOKAkyB4ODZfNjQsIEdDRS9RRU1VLCB0aGUgdXN1YWwg4oCTIHRoZXJlICphcmVuJ3QqIHRoZXNlIGRldmljZSB0cmVlIG5vZGVzLlwiIFN5emthbGxlciwgYXMgZmFyIGFzIEkgdW5kZXJzdGFuZCBpdCwgZG9lc24ndCBoYXZlIGEgYnVpbHQtaW4gZ2VuZXJpYyBtZWNoYW5pc20gdG8ganVzdCAqaW5qZWN0KiBhcmJpdHJhcnkgcGxhdGZvcm0gZGV2aWNlcyB3aXRoIGFueSBvbGQgT0YgY29tcGF0aWJsZSBzdHJpbmcgdW5sZXNzIHRoZXJlJ3MgYSByZWFsbHkgc3BlY2lmaWMgcHNldWRvLXN5c2NhbGwgZGVzaWduZWQgZm9yIGl0LCBsaWtlIGEgYHN5el9kZXZsaW5rYCB0eXBlIG9mIHRoaW5nLCBvciBtYXliZSBzb21ldGhpbmcgdXNpbmcgYHN5el9wbGF0Zm9ybV9kZXZpY2VfYWRkYC4gV2FpdCBhIG1pbnV0ZSwgZG9lc24ndCBzeXprYWxsZXIgKnVzdWFsbHkqIHVzZSBzb21ldGhpbmcgbGlrZSBgc3l6X3BsYXRmb3JtX2RldmljZV9hZGRgIG9yIHNpbWlsYXI/IEhtbW0sIGhhbmcgb24sIGRvZXMgc3l6a2FsbGVyIGV2ZW4gaGF2ZSBhIGNvbXBsZXRlbHkgZ2VuZXJpYyBgc3l6X3BsYXRmb3JtX2RldmljZV9hZGRgIHRoYXQgd29ya3MgZm9yICphbnkqIGRyaXZlcj8gSSBuZWVkIHRvIGNsYXJpZnkgdGhhdC5cblxuV2FpdCwgYXJlIHRoZXJlICpzb21lKiBkZXNjcmlwdGlvbnMgZm9yIHBsYXRmb3JtIGRldmljZXMgYWxyZWFkeSBkZWZpbmVkIGluIHN5emthbGxlcj8gTGV0J3MgY2hlY2sgZm9yIGFueSBleGlzdGluZyByZWZlcmVuY2VzIHRvIGBxY29tLGlwcTgwNzQtd2lmaWAgaW4gdGhlIGtlcm5lbCBvciBzeXprYWxsZXIgaXRzZWxmLiBJIGNhbid0IGRpcmVjdGx5IGBncmVwYCB0aGUgYHN5cy9gIGRpcmVjdG9yeSwgc28gSSBoYXZlIHRvIHRoaW5rIGFib3V0IGFsdGVybmF0ZSB3YXlzIHRvIHNlZSB3aGVyZSB0aGlzIGNvZGUgbWlnaHQgYmUgcmVhY2hhYmxlLiBJcyB0aGlzIGV2ZW4gcmVtb3RlbHkgcmVhY2hhYmxlIGluIGFueSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudD9cblxuSWYgdGhpcyBpcyBzb21lIEFSTS1zcGVjaWZpYyBTb0MgV2ktRmkgZHJpdmVyLCB0aGUgb2RkcyBvZiBpdCBiZWluZyBoaXQgaW4gc3RhbmRhcmQgeDg2XzY0IGZ1enppbmcgYXJlIHZhbmlzaGluZ2x5IHNtYWxsLiBXYWl0LCBidXQgc3l6a2FsbGVyICpkb2VzKiBmdXp6IEFSTTY0LCByaWdodD8gRXZlbiBzbywgaXQgdXNlcyBhIGdlbmVyaWMgdmlydHVhbCBtYWNoaW5lIChRRU1VIHZpcnQgbWFjaGluZSksIHdoaWNoIGFsbW9zdCBjZXJ0YWlubHkgKmRvZXNuJ3QqIGhhdmUgdGhlc2Ugc3BlY2lmaWMgUXVhbGNvbW0gV2ktRmkgaGFyZHdhcmUgbm9kZXMgaW4gaXRzIGRldmljZSB0cmVlLlxuXG5DYW4gc3l6a2FsbGVyIGluamVjdCBkZXZpY2UgdHJlZSBub2Rlcz8gSSdtIHByZXR0eSBzdXJlIG5vdCwgdGhlIGRldmljZSB0cmVlIGlzIHBhc3NlZCBhdCBib290IHRpbWUuIFdhaXQsIHRoZXJlJ3MgYENPTkZJR19PRl9EWU5BTUlDYCBhbmQgYENPTkZJR19PRl9PVkVSTEFZYCwgcmlnaHQ/IEJ1dCwgYXMgZmFyIGFzIEknbSBhd2FyZSwgc3l6a2FsbGVyIGRvZXNuJ3QgbGV2ZXJhZ2UgdGhvc2UgY3VycmVudGx5IHRvIGluamVjdCByYW5kb20gZGV2aWNlcyBmb3IgZnV6emluZyB1bmxlc3Mgc29tZW9uZSdzIGV4cGxpY2l0bHkgY29kZWQgaXQgdGhhdCB3YXkuXG5cbk9rYXksIGxldCdzIHNlZSwgbGV0J3MgbG9vayBmb3IgYGF0aDExa2AgYW5kIGl0cyBjb3JyZXNwb25kaW5nIHN5emthbGxlciBkZXNjcmlwdGlvbi4gSSBjYW4gdXNlIGBjb2Rlc2VhcmNoLWRpci1pbmRleGAgb3IgYHJlYWQtZmlsZWAgdG8gY2hlY2sgYHN5cy9saW51eC9gIGZvciBhbnkgc2lnbiBvZiBgYXRoMTFrYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTAzODgsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MzAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNFQwNToxNDo1My41NjA1NDcxNjJaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYwNTc5MTU4LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJhdGgxMWtcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwic3lzL2xpbnV4L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjRUMDU6MTQ6NTMuNjIxMTMzNTZaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzQ3ODQ0NjQxNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipOYXZpZ2F0aW5nIHRoZSBMYWJ5cmludGggb2YgQ29kZSoqXG5cbk9rYXksIHNvIHRoZSBwcm9tcHQgaXMgdmVyeSBjbGVhcjogSSdtICpub3QqIHRvIHVzZSB0aGUgdXN1YWwgU3l6a2FsbGVyIHNlYXJjaCBtZXRob2RzIG9uIGBzeXpsYW5nYCBkZXNjcmlwdGlvbnMuIFRoYXQncyBmaW5lOyBjaGFsbGVuZ2VzIGFyZSB3aGF0IGtlZXAgdGhpbmdzIGludGVyZXN0aW5nISBJIG5lZWQgYSBtb3JlIHRhcmdldGVkIGFwcHJvYWNoLiBMZXQncyBzZWUuLi4gdGhlIHRleHQgaW5kaWNhdGVzIEkgc2hvdWxkIHVzZSBgY29kZXNlYXJjaC1kaXItaW5kZXhgIGFuZCBgcmVhZC1maWxlYC4gVGhhdCBzb3VuZHMgcHJvbWlzaW5nLiBJdCBzZWVtcyBsaWtlIEknbSBleHBlY3RlZCB0byBkZWx2ZSBpbnRvIHRoZSBgc3lzL2xpbnV4L2AgZGlyZWN0b3J5LiBSaWdodCwgSSB1bmRlcnN0YW5kLiBJJ2xsIG1ha2Ugc3VyZSB0byB1c2UgdGhvc2UgdG9vbHMgb24gdGhhdCBzcGVjaWZpYyBkaXJlY3RvcnkgdG8gZ2V0IHRoZSBpbmZvcm1hdGlvbiB0aGF0IEkgbmVlZC4gVGhpcyBzaG91bGQgYmUgc3RyYWlnaHRmb3J3YXJkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTQyOSwiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI0VDA1OjE0OjU3LjA5OTU4MTg2NloiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJjb2Rlc2VhcmNoLWRpci1pbmRleCIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ5ODgwLCJFcnJvciI6InRoZSBkaXJlY3RvcnkgZG9lcyBub3QgZXhpc3QiLCJBcmdzIjoie1xuICBcIkRpclwiOiBcInN5cy9saW51eFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcInRoZSBkaXJlY3RvcnkgZG9lcyBub3QgZXhpc3RcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjRUMDU6MTQ6NTcuMDk5NjM3Njc2WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc3MTAzNzg3NDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBBdGgxMWsgRHJpdmVyIGZvciBGdXp6YWJpbGl0eSoqXG5cbk9rYXksIGZpcnN0IHRoaW5ncyBmaXJzdCwgSSBuZWVkIHRvIGFkanVzdCBteSBhcHByb2FjaC4gVGhlIHRvb2wgbGltaXRhdGlvbiBpcyBjbGVhcjogSSBjYW4ndCBkaXJlY3RseSBzZWFyY2ggc3l6a2FsbGVyIGRlc2NyaXB0aW9ucyB3aXRoaW4gdGhlIGtlcm5lbCB0cmVlLCBhbmQgdGhlIGB0b29sUmVhZERlc2NyaXB0aW9uYCB0b29sIGlzbid0IGF2YWlsYWJsZS4gU28sIG5vIGRpcmVjdCBzeXprYWxsZXIgc2VhcmNoIGZvciBtZS4gSSBuZWVkIHRvIGRlZHVjZSBmdXp6YWJpbGl0eSBpbmRpcmVjdGx5LlxuXG5UaGUgZHJpdmVyIGluIHF1ZXN0aW9uIGlzIGBhdGgxMWtgLCBzcGVjaWZpY2FsbHkgdGhlIEFIQiBidXMgYXR0YWNobWVudCAoYGFoYi5jYCkuIEFIQiBpcyBhIGJ1cyBhcmNoaXRlY3R1cmUgY29tbW9ubHkgZm91bmQgaW4gU3lzdGVtLW9uLUNoaXBzLCBhbmQgdGhpcyBwYXJ0aWN1bGFyIGNvZGUgcmVxdWlyZXMgYSBwbGF0Zm9ybSBkZXZpY2Ugd2l0aCBzcGVjaWZpYyBjb21wYXRpYmxlIHN0cmluZ3MuIFVubGVzcyBzeXprYWxsZXIgaGFzIGEgaGlnaGx5IHNwZWNpZmljIHBzZXVkby1zeXNjYWxsIHRvIGluc3RhbnRpYXRlIHN1Y2ggYSBwbGF0Zm9ybSBkZXZpY2UsIHdoaWNoIHdvdWxkIGJlIHVudXN1YWwgZm9yIGEgcmFuZG9tIFdpLUZpIFNvQyBkcml2ZXIsIHRoaXMgcGF0aCBpcyBsaWtlbHkgdW5yZWFjaGFibGUgaW4gYSBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudC4gVGhhdCdzIGEgZ29vZCBpbml0aWFsIGluZGljYXRvci5cblxuTm93LCBsZXQncyBleHBsb3JlIHBvc3NpYmxlIGFsdGVybmF0aXZlcy4gSXMgdGhlcmUgYSBQQ0kgZXF1aXZhbGVudD8gVGhlIGNoYW5nZSBpcyB3aXRoaW4gYGFoYi5jYCwgc3VnZ2VzdGluZyBpdCdzIHRpZ2h0bHkgY291cGxlZCB0byB0aGUgQUhCIGJ1cy4gV2FpdCwgSSBzZWUgYW4gaW50ZXJlc3RpbmcgY2FsbDogYGF0aDExa19haGJfZnJlZV9pcnFgLiBUaGUgcHJlc2VuY2Ugb2ZcblxuYGBgY1xuXHRpZiAoYWItXHUwMDNlaHdfcGFyYW1zLmh5YnJpZF9idXNfdHlwZSlcblx0XHRyZXR1cm4gYXRoMTFrX3BjaWNfZnJlZV9pcnEoYWIpO1xuYGBgXG5cbmlzIGludHJpZ3VpbmcsIGJ1dCBpdCdzICpzdGlsbCogd2l0aGluIGBhaGIuY2AsIHdoaWNoIG1ha2VzIG1lIHF1ZXN0aW9uIHRoZSBsYXJnZXIgYnVpbGQgY29uZmlndXJhdGlvbi4gTXkgcHJpbWFyeSBjb25jZXJuIHJlbWFpbnMgd2hldGhlciBgYWhiLmNgIGlzIGV2ZW4gY29tcGlsZWQgZm9yIFBDSS1vbmx5IGNvbmZpZ3VyYXRpb25zLiBUbyBjbGFyaWZ5IHRoYXQsIEkgc2hvdWxkIGNoZWNrIHRoZSBtYWtlZmlsZSB3aXRoaW4gYGRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE2NjYsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNDQsIlRvb2xDYWxscyI6WyJjb2Rlc2VhcmNoLWRpci1pbmRleCJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI0VDA1OjE1OjA0LjgxMDAxOTQwNloiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1ODg2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL01ha2VmaWxlXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDMwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTMtQ2xhdXNlLUNsZWFyXFxuICAgMjpcXHRvYmotJChDT05GSUdfQVRIMTFLKSArPSBhdGgxMWsub1xcbiAgIDM6XFx0YXRoMTFrLXkgKz0gY29yZS5vIFxcXFxcXG4gICA0OlxcdFxcdCAgICBoYWwubyBcXFxcXFxuICAgNTpcXHRcXHQgICAgaGFsX3R4Lm8gXFxcXFxcbiAgIDY6XFx0XFx0ICAgIGhhbF9yeC5vIFxcXFxcXG4gICA3OlxcdFxcdCAgICB3bWkubyBcXFxcXFxuICAgODpcXHRcXHQgICAgbWFjLm8gXFxcXFxcbiAgIDk6XFx0XFx0ICAgIHJlZy5vIFxcXFxcXG4gIDEwOlxcdFxcdCAgICBodGMubyBcXFxcXFxuICAxMTpcXHRcXHQgICAgcW1pLm8gXFxcXFxcbiAgMTI6XFx0XFx0ICAgIGRwLm8gIFxcXFxcXG4gIDEzOlxcdFxcdCAgICBkcF90eC5vIFxcXFxcXG4gIDE0OlxcdFxcdCAgICBkcF9yeC5vIFxcXFxcXG4gIDE1OlxcdFxcdCAgICBkZWJ1Zy5vIFxcXFxcXG4gIDE2OlxcdFxcdCAgICBjZS5vIFxcXFxcXG4gIDE3OlxcdFxcdCAgICBwZWVyLm8gXFxcXFxcbiAgMTg6XFx0XFx0ICAgIGRicmluZy5vIFxcXFxcXG4gIDE5OlxcdFxcdCAgICBody5vIFxcXFxcXG4gIDIwOlxcdFxcdCAgICBwY2ljLm8gXFxcXFxcbiAgMjE6XFx0XFx0ICAgIGZ3Lm8gXFxcXFxcbiAgMjI6XFx0XFx0ICAgIHAycC5vXFxuICAyMzpcXHRcXG4gIDI0OlxcdGF0aDExay0kKENPTkZJR19BVEgxMUtfREVCVUdGUykgKz0gZGVidWdmcy5vIGRlYnVnZnNfaHR0X3N0YXRzLm8gZGVidWdmc19zdGEub1xcbiAgMjU6XFx0YXRoMTFrLSQoQ09ORklHX05MODAyMTFfVEVTVE1PREUpICs9IHRlc3Rtb2RlLm9cXG4gIDI2OlxcdGF0aDExay0kKENPTkZJR19BVEgxMUtfVFJBQ0lORykgKz0gdHJhY2Uub1xcbiAgMjc6XFx0YXRoMTFrLSQoQ09ORklHX1RIRVJNQUwpICs9IHRoZXJtYWwub1xcbiAgMjg6XFx0YXRoMTFrLSQoQ09ORklHX0FUSDExS19TUEVDVFJBTCkgKz0gc3BlY3RyYWwub1xcbiAgMjk6XFx0YXRoMTFrLSQoQ09ORklHX1BNKSArPSB3b3cub1xcbiAgMzA6XFx0YXRoMTFrLSQoQ09ORklHX0RFVl9DT1JFRFVNUCkgKz0gY29yZWR1bXAub1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNFQwNToxNTowNC44MTAwNzk0ODZaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTAyNjYyMjk5OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCB1c2VyIGFuZCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipBbmFseXppbmcgdGhlIE1ha2VmaWxlKipcblxuQWxyaWdodCwgdGltZSB0byBkaWcgaW50byB0aGUgcmVzdCBvZiB0aGlzIE1ha2VmaWxlLiBJJ3ZlIHNlZW4gdGhlIGJhc2ljcywgdGhlIHN0cnVjdHVyZSwgdGhlIGRlcGVuZGVuY2llcy4uLiBub3csIGxldCdzIHNlZSB3aGF0IGludGVyZXN0aW5nIHRlY2huaXF1ZXMgb3Igb3B0aW1pemF0aW9ucyBhcmUgZW1wbG95ZWQuIEknbSBsb29raW5nIGZvciB0aGluZ3MgdGhhdCBtaWdodCBiZSBub3ZlbCwgb3IgcGVyaGFwcyBwYXR0ZXJucyB0aGF0IEkndmUgc2VlbiBiZWZvcmUgYnV0IGFyZSBpbXBsZW1lbnRlZCBpbiBhIHVuaXF1ZSB3YXkgaGVyZS4gQXJlIHRoZXJlIGFueSBjbGV2ZXIgdXNlcyBvZiBzaGVsbCBleHBhbnNpb25zLCB2YXJpYWJsZSBzdWJzdGl0dXRpb24sIG9yIHBlcmhhcHMgc29tZSBwYXJ0aWN1bGFybHkgZWxlZ2FudCB1c2Ugb2YgR05VIE1ha2UncyBmZWF0dXJlcz8gSSdtIGhvcGluZyB0byBzcG90IHNvbWUgdHJpY2tzIHRoYXQgSSBjYW4gZmlsZSBhd2F5IGZvciBmdXR1cmUgcHJvamVjdHMuIEkgd2FudCB0byBzZWUgaWYgdGhlIGF1dGhvcidzIGZvbGxvd2luZyBhbnkgZXN0YWJsaXNoZWQgYmVzdCBwcmFjdGljZXMgb3IgaWYgdGhleSdyZSB0YWtpbmcgYSBtb3JlIHVuY29udmVudGlvbmFsIHJvdXRlLiBMZXQncyBzZWUgaWYgdGhpcyBNYWtlZmlsZSBpcyBqdXN0IGZ1bmN0aW9uYWwgb3IgaWYgaXQncyBhbHNvIHdlbGwtY3JhZnRlZCBhbmQgcmVhZGFibGUuIEknbGwgYmUgc2NydXRpbml6aW5nIHRoZSBkZXBlbmRlbmN5IGdyYXBocywgdGFyZ2V0IGRlZmluaXRpb25zLCBhbmQgYW55IGN1c3RvbSBmdW5jdGlvbnMgb3IgbWFjcm9zIHRoYXQgaGF2ZSBiZWVuIGRlZmluZWQuIEl0J3MgdGltZSB0byBzZWUgaG93IHRoaXMgdGhpbmcgKnJlYWxseSogd29ya3MuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyODkxLCJPdXRwdXRUb2tlbnMiOjQxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNFQwNToxNTowOS44MzY3MDU1NTZaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjA2MjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9NYWtlZmlsZVwiLFxuICBcIkZpcnN0TGluZVwiOiAzMSxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAzMTpcXHRhdGgxMWstJChDT05GSUdfQVRIMTFLX0NGUikgKz0gY2ZyLm9cXG4gIDMyOlxcdFxcbiAgMzM6XFx0b2JqLSQoQ09ORklHX0FUSDExS19BSEIpICs9IGF0aDExa19haGIub1xcbiAgMzQ6XFx0YXRoMTFrX2FoYi15ICs9IGFoYi5vXFxuICAzNTpcXHRcXG4gIDM2OlxcdG9iai0kKENPTkZJR19BVEgxMUtfUENJKSArPSBhdGgxMWtfcGNpLm9cXG4gIDM3OlxcdGF0aDExa19wY2kteSArPSBtaGkubyBwY2kub1xcbiAgMzg6XFx0XFxuICAzOTpcXHQjIGZvciB0cmFjaW5nIGZyYW1ld29yayB0byBmaW5kIHRyYWNlLmhcXG4gIDQwOlxcdENGTEFHU190cmFjZS5vIDo9IC1JJChzcmMpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI0VDA1OjE1OjA5LjgzNjc2NzY4NVoiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3OTcyOTcxMDgyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgYGF0aDExa19haGJgIERyaXZlcidzIFJlYWNoYWJpbGl0eSoqXG5cbk9rYXksIHNvIGBhaGIuY2Agb25seSBnZXRzIGNvbXBpbGVkIHdoZW4gYENPTkZJR19BVEgxMUtfQUhCYCBpcyBlbmFibGVkLiBBbmQgdGhhdCBjb25maWcgb3B0aW9uIGlzIHNwZWNpZmljYWxseSBmb3IgQXRoZXJvcycgQUhCIHN1cHBvcnQgd2l0aGluIGBhdGgxMWtgLiBSaWdodCwgd2Uga25vdyBgYXRoMTFrX2FoYl9wcm9iZWAgaXMgYSBwbGF0Zm9ybSBkcml2ZXIncyBwcm9iZSBmdW5jdGlvbiwgYW5kIGl0J3Mga2V5ZWQgdG8gc3BlY2lmaWMgZGV2aWNlIHRyZWUgY29tcGF0aWJsZSBzdHJpbmdzIOKAkyB0aGUgUXVhbGNvbW0gV2ktRmkgZGV2aWNlcy4gVGhvc2UgcGxhdGZvcm0gZGV2aWNlcyBhcmUgKmluc3RhbnRpYXRlZCogZHVyaW5nIGJvb3QsIGFsbCB0aGFua3MgdG8gdGhlIGRldmljZSB0cmVlLCBvciBzcGVjaWZpY2FsbHkgaGVyZSwgdGhlIE9wZW4gRmlybXdhcmUgKE9GKS5cblxuSW4gYW55IHZpcnR1YWxpemVkIHNldHVwIGxpa2UgUUVNVSBvciBHQ0UsIHRoZSBndWVzdCdzIGRldmljZSB0cmVlICp3b24ndCogaGF2ZSB0aGVzZSBRdWFsY29tbSBXaS1GaSBub2Rlcy4gU28gdGhlIGBhdGgxMWtfYWhiYCBkcml2ZXIgd2lsbCBzaW1wbHkgbmV2ZXIgYmluZCB0byBhbnkgZGV2aWNlLiBUaGF0IG1lYW5zIHRoZSBwcm9iZSBmdW5jdGlvbiwgYWxvbmcgd2l0aCBgYXRoMTFrX2FoYl9jb25maWdfaXJxYCBhbmQgYGF0aDExa19haGJfY29uZmlnX2V4dF9pcnFgLCB3aWxsIG5ldmVyIGJlIGV4ZWN1dGVkIGluIHRoZXNlIGVudmlyb25tZW50cy5cblxuSG9sZCBvbiwgaXMgdGhlcmUgKmFueSogd2F5IHRvIHRyaWdnZXIgcGxhdGZvcm0gZGV2aWNlIGNyZWF0aW9uIGZyb20gdXNlcnNwYWNlPyBUaGVyZSdzIGEgc3lzZnMgaW50ZXJmYWNlIGZvciBzb21lIGJ1c2VzLCBidXQgd2l0aCBwbGF0Zm9ybSBidXNlcywgeW91IGNhbid0IGp1c3QgY29uanVyZSB1cCBhcmJpdHJhcnkgZGV2aWNlcyBmcm9tIHVzZXJzcGFjZSB1bmxlc3MgdGhlcmUncyBhIHNwZWNpZmljIGRyaXZlciBvciBhIGRlYnVnZnMgaW50ZXJmYWNlIHRoYXQgZXhwb3NlcyBzb21ldGhpbmcgbGlrZSBgcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyYC4gQW5kLCBhcyBmYXIgYXMgSSBrbm93LCBTeXprYWxsZXIgZG9lc24ndCBoYXZlIGEgYnVpbHQtaW4gd2F5IHRvIGRvIHRoaXMuIEkndmUgdXNlZCBpdCB3aXRoIFBDSSBkZXZpY2VzICh0aHJvdWdoIGBzeXpfcGNpX2RldmljZV9hZGRgIC8gdlBDSSkgYW5kIFVTQiBkZXZpY2VzICh2aWEgYHN5el91c2JfY29ubmVjdGAgLyBkdW1teV9oY2QpLCBidXQgbm90IHdpdGggYXJiaXRyYXJ5IHBsYXRmb3JtIGRldmljZXMgd2l0aCB2ZXJ5IHNwZWNpZmljIE9GIGNvbXBhdGlibGUgc3RyaW5ncy5cblxuV2FpdC4uLiBJJ3ZlIGdvdCBpdCwgdGhlcmUgaXMgYG1hYzgwMjExX2h3c2ltYCwgYnV0IHRoYXQgc2ltdWxhdGVzIGEgKmdlbmVyaWMqIFdpLUZpIHJhZGlvLCBhbmQgdGhhdCBkb2VzIG5vdCBpbnN0YW50aWF0ZSB0aGUgYGF0aDExa2AgaGFyZHdhcmUuXG5cblNvLCByZWFsaXN0aWNhbGx5LCB0aGlzIGNvZGUgcGF0aCBpcyBzaW1wbHkgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB0aGVzZSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuIEknbSBnb2luZyB0byBkb3VibGUgY2hlY2sgcmVhbCBxdWljayB0aGF0IGBhdGgxMWtfYWhiX2NvbmZpZ19pcnFgIGNhbid0IGJlIGNhbGxlZCBmcm9tIHNvbWUgb3RoZXIgcGxhY2UgaW4gdGhlIGNvZGUgYmFzZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTMzNjAsIk91dHB1dFRva2VucyI6MjYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MzcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNFQwNToxNToxNy44MDk3NDEwMzhaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4NjUwMzQyMDQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYXRoMTFrX2FoYl9jb25maWdfaXJxXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvYWhiLmM9NTMyPXN0YXRpYyBpbnQgYXRoMTFrX2FoYl9jb25maWdfZXh0X2lycShzdHJ1Y3QgYXRoMTFrX2Jhc2UgKmFiKVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9haGIuYy02MzItXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9haGIuYzo2MzM6c3RhdGljIGludCBhdGgxMWtfYWhiX2NvbmZpZ19pcnEoc3RydWN0IGF0aDExa19iYXNlICphYilcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2FoYi5jLTYzNC17XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2FoYi5jPTExMzg9c3RhdGljIGludCBhdGgxMWtfYWhiX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2FoYi5jLTEyMzAtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9haGIuYzoxMjMxOlxcdHJldCA9IGF0aDExa19haGJfY29uZmlnX2lycShhYik7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9haGIuYy0xMjMyLVxcdGlmIChyZXQpIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjRUMDU6MTU6MTkuNjc0NzgxNTgyWiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjkyMDczODkxODUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqVW5yZWFjaGFibGUgQ29kZSBpbiB0aGUgQUhCIFdpLUZpIERyaXZlcioqXG5cbk9rYXksIHNvIEkndmUgYmVlbiBsb29raW5nIGF0IHRoaXMgY29kZSBhbmQgaXQncyBwcmV0dHkgY2xlYXI6IHRoaXMgYmxvY2sgaXMgb25seSBlbnRlcmVkIHRocm91Z2ggYGF0aDExa19haGJfcHJvYmVgLiBUaGF0IGZ1bmN0aW9uIGl0c2VsZiBpcyBleGNsdXNpdmVseSBjYWxsZWQgYnkgdGhlIHBsYXRmb3JtIGJ1cyB3aGVuIGl0IGRldGVjdHMgYSBtYXRjaGluZyBkZXZpY2UuIFRoZSBwcm9ibGVtIGlzLCBhbmQgdGhpcyBpcyBjcnVjaWFsIGZvciBmdXp6aW5nIGNvbnNpZGVyYXRpb25zLCB0aGF0IFN5emthbGxlciwgd2hpY2ggaXMgb3VyIHByaW1hcnkgZnV6emluZyB0b29sLCBkb2Vzbid0IGhhdmUgYSB3YXkgdG8gaW5qZWN0IGFyYml0cmFyeSBwbGF0Zm9ybSBkZXZpY2VzLiBJIHRob3VnaHQgbWF5YmUgSSB3YXMgbWlzc2luZyBzb21ldGhpbmcg4oCTIGRvZXMgaXQgaGF2ZSBhIHBzZXVkby1zeXNjYWxsIGZvciBwbGF0Zm9ybSBkZXZpY2VzPyBJIGtub3cgaXQgaGFzIGBzeXpfcGxhdGZvcm1fZGV2aWNlX2FkZGAuLi4gd2FpdCwgaXQgZG9lc24ndC5cblxuSSBzdGFydGVkIGxpc3RpbmcgdGhlIGtub3duIGBzeXpfYCBwcmVmaXhlcy4gTGV0J3Mgc2VlLCBpdCBzdXBwb3J0cyBkZXZsaW5rIChgc3l6X2RldmxpbmtgKSwgbWFjODAyMTEgKGBzeXpfODAyMTFfLi4uYCksIGdlbmVyaWMgbmV0bGluayAoYHN5el9nZW5ldGxpbmtfLi4uYCksIFVTQiAoYHN5el91c2JfY29ubmVjdGApLCBQQ0kgKGBzeXpfcGNpX2RldmljZV9hZGRgKSwgQmx1ZXRvb3RoIChgc3l6X3ZoY2lfLi4uYCksIGFuZCBleHQ0IChgc3l6X2V4dDRfLi4uYCkuIEJ1dCBub3RoaW5nIGZvciBhIGdlbmVyaWMgcGxhdGZvcm0gZGV2aWNlIGluamVjdG9yLiBFdmVuIGlmIHRoZXJlICp3ZXJlKiBzdWNoIGEgdGhpbmcsIGl0IHdvdWxkIG5lZWQgdG8ga25vdyB0aGUgKmV4YWN0KiBjb21wYXRpYmxlIHN0cmluZywgbWVtb3J5IHJlc291cmNlcywgaW50ZXJydXB0IHJlc291cmNlcywgYW5kIGFsbCB0aGF0IOKAkyB3aGljaCBpcyBoaWdobHkgZGVwZW5kZW50IG9uIHRoZSBzeXN0ZW0tb24tYS1jaGlwIChTb0MpIGFuZCB0eXBpY2FsbHkgbmVlZHMgYSBkZXZpY2UgdHJlZSBvdmVybGF5LiBUaGF0IGxldmVsIG9mIHNwZWNpZmljaXR5IGlzIGp1c3Qgbm90IHNvbWV0aGluZyB3ZSBjYW4gcmVhbGlzdGljYWxseSByZXBsaWNhdGUgaW4gYSBmdXp6ZWQgZW52aXJvbm1lbnQuXG5cblRoZXJlZm9yZSwgc2luY2UgdGhpcyBzcGVjaWZpYyBwYXRjaCB0b3VjaGVzIGEgcGxhdGZvcm0tc3BlY2lmaWMgQUhCIFdpLUZpIGRyaXZlciwgYW5kIHRoYXQgZHJpdmVyJ3MgY29kZSBpcyB1bnJlYWNoYWJsZSBpbiBvdXIgY3VycmVudCB2aXJ0dWFsaXplZCBmdXp6aW5nIHNldHVwcyBsaWtlIEdDRSBvciBRRU1VLCBJJ20gZ29pbmcgdG8gbWFyayB0aGlzIGFzIG5vdCB3b3J0aCBmdXp6aW5nLiBJJ2xsIHJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UsIHdpdGggdGhlIGRvY3VtZW50ZWQgcmVhc29uaW5nIHRoYXQgdGhpcyBjb2RlIHBhdGggaXMgc2ltcGx5IGluYWNjZXNzaWJsZSB1bmRlciBvdXIgZXhpc3RpbmcgZnV6emluZyBlbnZpcm9ubWVudC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQ2MTksIk91dHB1dFRva2VucyI6MTQ5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzU5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI0VDA1OjE1OjI4Ljg4MjE3MzY0N1oiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxNzgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGVycm9yIGhhbmRsaW5nIGluIHRoZSBwcm9iZSBwYXRoIG9mIHRoZSBhdGgxMWsgQUhCIHBsYXRmb3JtIGRyaXZlciAoYXRoMTFrX2FoYikuIFRoaXMgZHJpdmVyIHJlcXVpcmVzIHNwZWNpZmljIFF1YWxjb21tIFNvQyBoYXJkd2FyZSAoZS5nLiwgSVBRODA3NCwgSVBRNjAxOCkgYW5kIGJpbmRzIHZpYSBkZXZpY2UgdHJlZSBjb21wYXRpYmxlIHN0cmluZ3MuIFNpbmNlIHN5emthbGxlciBvcGVyYXRlcyBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgKFFFTVUvR0NFKSB3aXRob3V0IHRoZXNlIHNwZWNpZmljIGhhcmR3YXJlIG5vZGVzIGluIHRoZSBkZXZpY2UgdHJlZSwgYW5kIHRoZXJlIGlzIG5vIG1lY2hhbmlzbSB0byBpbmplY3QgYXJiaXRyYXJ5IHBsYXRmb3JtIGRldmljZXMgd2l0aCBzcGVjaWZpYyBtZW1vcnkvSVJRIHJlc291cmNlcywgdGhpcyBjb2RlIHBhdGggaXMgdW5yZWFjaGFibGUgYW5kIGNhbm5vdCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBlcnJvciBoYW5kbGluZyBpbiB0aGUgcHJvYmUgcGF0aCBvZiB0aGUgYXRoMTFrIEFIQiBwbGF0Zm9ybSBkcml2ZXIgKGF0aDExa19haGIpLiBUaGlzIGRyaXZlciByZXF1aXJlcyBzcGVjaWZpYyBRdWFsY29tbSBTb0MgaGFyZHdhcmUgKGUuZy4sIElQUTgwNzQsIElQUTYwMTgpIGFuZCBiaW5kcyB2aWEgZGV2aWNlIHRyZWUgY29tcGF0aWJsZSBzdHJpbmdzLiBTaW5jZSBzeXprYWxsZXIgb3BlcmF0ZXMgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIChRRU1VL0dDRSkgd2l0aG91dCB0aGVzZSBzcGVjaWZpYyBoYXJkd2FyZSBub2RlcyBpbiB0aGUgZGV2aWNlIHRyZWUsIGFuZCB0aGVyZSBpcyBubyBtZWNoYW5pc20gdG8gaW5qZWN0IGFyYml0cmFyeSBwbGF0Zm9ybSBkZXZpY2VzIHdpdGggc3BlY2lmaWMgbWVtb3J5L0lSUSByZXNvdXJjZXMsIHRoaXMgY29kZSBwYXRoIGlzIHVucmVhY2hhYmxlIGFuZCBjYW5ub3QgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflowrhffv[1] Phase: Running StartedAt: 2026-07-24 05:15:40 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrhffv[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-07-24 05:15:40 +0000 UTC FinishedAt: 2026-07-24 05:15:45 +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,}