Name: series-workflowrcdk2 Phase: Succeeded StartedAt: 2026-07-16 16:00:53 +0000 UTC FinishedAt: 2026-07-16 17:48:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrcdk2[0] Phase: Succeeded StartedAt: 2026-07-16 16:00:53 +0000 UTC FinishedAt: 2026-07-16 16:22:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrcdk2[0].run-triage Phase: Succeeded StartedAt: 2026-07-16 16:00:53 +0000 UTC FinishedAt: 2026-07-16 16:22:17 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "37e2f878a7a660a216cc7a60459995fefd150f25", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "ATH11K", "ATH11K_AHB" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "37e2f878a7a660a216cc7a60459995fefd150f25", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "ATH11K", "ATH11K_AHB" ], "series_id": "023a02bc-4e55-4b41-9c96-3a38e6e7ec24" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "ath11k_ahb_free_ext_irq_grp", "ath11k_ahb_free_ext_irq", "ath11k_ahb_free_ce_irqs", "ath11k_ahb_free_irq", "ath11k_ahb_config_ext_irq", "ath11k_ahb_config_irq" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE2IDE2OjE5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0FUSDExSyYjMzQ7LAogICAgJiMzNDtBVEgxMUtfQUhCJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YXRoMTFrX2FoYl9mcmVlX2V4dF9pcnFfZ3JwJiMzNDssCiAgICAmIzM0O2F0aDExa19haGJfZnJlZV9leHRfaXJxJiMzNDssCiAgICAmIzM0O2F0aDExa19haGJfZnJlZV9jZV9pcnFzJiMzNDssCiAgICAmIzM0O2F0aDExa19haGJfZnJlZV9pcnEmIzM0OywKICAgICYjMzQ7YXRoMTFrX2FoYl9jb25maWdfZXh0X2lycSYjMzQ7LAogICAgJiMzNDthdGgxMWtfYWhiX2NvbmZpZ19pcnEmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgcmVzb3VyY2UgbGVha3MgaW4gdGhlIGVycm9yIHBhdGhzIG9mIElSUSBjb25maWd1cmF0aW9uIGZvciB0aGUgYXRoMTFrIEFIQiBkcml2ZXIuIEl0IGludHJvZHVjZXMgbmV3IGhlbHBlciBmdW5jdGlvbnMgZm9yIGZyZWVpbmcgSVJRcyBhbmQgdXBkYXRlcyB0aGUgY29uZmlndXJhdGlvbiBmdW5jdGlvbnMgdG8gdXNlIHRoZW0gb24gZmFpbHVyZS4gVGhpcyBpcyBmdW5jdGlvbmFsIGRyaXZlciBjb2RlIHRoYXQgY2FuIGJlIHJlYWNoZWQgZHVyaW5nIGRldmljZSBwcm9iZS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNiAxNjoxOTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGNlNTJhY2FkZWZlMjhkZTk2ODA3NTc5YzdlMDRkYzQwNWY5ZTQyYmRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IEp1bCAxNiAxNjoxOTo0OSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2FoYi5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9haGIuY1xuaW5kZXggZjU2NmQ2OTlkMDc0YTguLjFhOTQwODEzOGQ4MTVjIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9haGIuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9haGIuY1xuQEAgLTQzMSwzNiAmIzQzOzQzMSw0NyBAQCBzdGF0aWMgdm9pZCBhdGgxMWtfYWhiX2luaXRfcW1pX2NlX2NvbmZpZyhzdHJ1Y3QgYXRoMTFrX2Jhc2UgKmFiKVxuIFx0YWItXHUwMDNlcW1pLnNlcnZpY2VfaW5zX2lkID0gYWItXHUwMDNlaHdfcGFyYW1zLnFtaV9zZXJ2aWNlX2luc19pZDtcbiB9XG4gXG4tc3RhdGljIHZvaWQgYXRoMTFrX2FoYl9mcmVlX2V4dF9pcnEoc3RydWN0IGF0aDExa19iYXNlICphYilcbiYjNDM7c3RhdGljIHZvaWQgYXRoMTFrX2FoYl9mcmVlX2V4dF9pcnFfZ3JwKHN0cnVjdCBhdGgxMWtfYmFzZSAqYWIsXG4mIzQzO1x0XHRcdFx0ICAgICAgc3RydWN0IGF0aDExa19leHRfaXJxX2dycCAqaXJxX2dycClcbiB7XG4tXHRpbnQgaSwgajtcbiYjNDM7XHRpbnQgajtcbiBcbi1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIEFUSDExS19FWFRfSVJRX0dSUF9OVU1fTUFYOyBpJiM0MzsmIzQzOykge1xuLVx0XHRzdHJ1Y3QgYXRoMTFrX2V4dF9pcnFfZ3JwICppcnFfZ3JwID0gXHUwMDI2YWItXHUwMDNlZXh0X2lycV9ncnBbaV07XG4mIzQzO1x0Zm9yIChqID0gMDsgaiBcdTAwM2MgaXJxX2dycC1cdTAwM2VudW1faXJxOyBqJiM0MzsmIzQzOylcbiYjNDM7XHRcdGZyZWVfaXJxKGFiLVx1MDAzZWlycV9udW1baXJxX2dycC1cdTAwM2VpcnFzW2pdXSwgaXJxX2dycCk7XG4gXG4tXHRcdGZvciAoaiA9IDA7IGogXHUwMDNjIGlycV9ncnAtXHUwMDNlbnVtX2lycTsgaiYjNDM7JiM0MzspXG4tXHRcdFx0ZnJlZV9pcnEoYWItXHUwMDNlaXJxX251bVtpcnFfZ3JwLVx1MDAzZWlycXNbal1dLCBpcnFfZ3JwKTtcbiYjNDM7XHRpZiAoIWlycV9ncnAtXHUwMDNlbmFwaV9uZGV2KVxuJiM0MztcdFx0cmV0dXJuO1xuIFxuLVx0XHRuZXRpZl9uYXBpX2RlbChcdTAwMjZpcnFfZ3JwLVx1MDAzZW5hcGkpO1xuLVx0XHRmcmVlX25ldGRldihpcnFfZ3JwLVx1MDAzZW5hcGlfbmRldik7XG4tXHR9XG4mIzQzO1x0bmV0aWZfbmFwaV9kZWwoXHUwMDI2aXJxX2dycC1cdTAwM2VuYXBpKTtcbiYjNDM7XHRmcmVlX25ldGRldihpcnFfZ3JwLVx1MDAzZW5hcGlfbmRldik7XG4gfVxuIFxuLXN0YXRpYyB2b2lkIGF0aDExa19haGJfZnJlZV9pcnEoc3RydWN0IGF0aDExa19iYXNlICphYilcbiYjNDM7c3RhdGljIHZvaWQgYXRoMTFrX2FoYl9mcmVlX2V4dF9pcnEoc3RydWN0IGF0aDExa19iYXNlICphYilcbiB7XG4tXHRpbnQgaXJxX2lkeDtcbiBcdGludCBpO1xuIFxuLVx0aWYgKGFiLVx1MDAzZWh3X3BhcmFtcy5oeWJyaWRfYnVzX3R5cGUpXG4tXHRcdHJldHVybiBhdGgxMWtfcGNpY19mcmVlX2lycShhYik7XG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgQVRIMTFLX0VYVF9JUlFfR1JQX05VTV9NQVg7IGkmIzQzOyYjNDM7KVxuJiM0MztcdFx0YXRoMTFrX2FoYl9mcmVlX2V4dF9pcnFfZ3JwKGFiLCBcdTAwMjZhYi1cdTAwM2VleHRfaXJxX2dycFtpXSk7XG4mIzQzO31cbiBcbi1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIGFiLVx1MDAzZWh3X3BhcmFtcy5jZV9jb3VudDsgaSYjNDM7JiM0MzspIHtcbiYjNDM7c3RhdGljIHZvaWQgYXRoMTFrX2FoYl9mcmVlX2NlX2lycXMoc3RydWN0IGF0aDExa19iYXNlICphYiwgaW50IG1heF9pZHgpXG4mIzQzO3tcbiYjNDM7XHRpbnQgaXJxX2lkeCwgaTtcbiYjNDM7XG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgbWF4X2lkeDsgaSYjNDM7JiM0MzspIHtcbiBcdFx0aWYgKGF0aDExa19jZV9nZXRfYXR0cl9mbGFncyhhYiwgaSkgXHUwMDI2IENFX0FUVFJfRElTX0lOVFIpXG4gXHRcdFx0Y29udGludWU7XG4gXHRcdGlycV9pZHggPSBBVEgxMUtfSVJRX0NFMF9PRkZTRVQgJiM0MzsgaTtcbiBcdFx0ZnJlZV9pcnEoYWItXHUwMDNlaXJxX251bVtpcnFfaWR4XSwgXHUwMDI2YWItXHUwMDNlY2UuY2VfcGlwZVtpXSk7XG4gXHR9XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIGF0aDExa19haGJfZnJlZV9pcnEoc3RydWN0IGF0aDExa19iYXNlICphYilcbiYjNDM7e1xuJiM0MztcdGlmIChhYi1cdTAwM2Vod19wYXJhbXMuaHlicmlkX2J1c190eXBlKVxuJiM0MztcdFx0cmV0dXJuIGF0aDExa19wY2ljX2ZyZWVfaXJxKGFiKTtcbiBcbiYjNDM7XHRhdGgxMWtfYWhiX2ZyZWVfY2VfaXJxcyhhYiwgYWItXHUwMDNlaHdfcGFyYW1zLmNlX2NvdW50KTtcbiBcdGF0aDExa19haGJfZnJlZV9leHRfaXJxKGFiKTtcbiB9XG4gXG5AQCAtNTI0LDIwICYjNDM7NTM1LDI1IEBAIHN0YXRpYyBpcnFyZXR1cm5fdCBhdGgxMWtfYWhiX2V4dF9pbnRlcnJ1cHRfaGFuZGxlcihpbnQgaXJxLCB2b2lkICphcmcpXG4gc3RhdGljIGludCBhdGgxMWtfYWhiX2NvbmZpZ19leHRfaXJxKHN0cnVjdCBhdGgxMWtfYmFzZSAqYWIpXG4ge1xuIFx0c3RydWN0IGF0aDExa19od19wYXJhbXMgKmh3ID0gXHUwMDI2YWItXHUwMDNlaHdfcGFyYW1zO1xuJiM0MztcdHN0cnVjdCBhdGgxMWtfZXh0X2lycV9ncnAgKmlycV9ncnA7XG4gXHRpbnQgaSwgajtcbiBcdGludCBpcnE7XG4gXHRpbnQgcmV0O1xuIFxuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgQVRIMTFLX0VYVF9JUlFfR1JQX05VTV9NQVg7IGkmIzQzOyYjNDM7KSB7XG4tXHRcdHN0cnVjdCBhdGgxMWtfZXh0X2lycV9ncnAgKmlycV9ncnAgPSBcdTAwMjZhYi1cdTAwM2VleHRfaXJxX2dycFtpXTtcbiBcdFx0dTMyIG51bV9pcnEgPSAwO1xuIFxuJiM0MztcdFx0aXJxX2dycCA9IFx1MDAyNmFiLVx1MDAzZWV4dF9pcnFfZ3JwW2ldO1xuJiM0MztcbiBcdFx0aXJxX2dycC1cdTAwM2VhYiA9IGFiO1xuIFx0XHRpcnFfZ3JwLVx1MDAzZWdycF9pZCA9IGk7XG4gXG4gXHRcdGlycV9ncnAtXHUwMDNlbmFwaV9uZGV2ID0gYWxsb2NfbmV0ZGV2X2R1bW15KDApO1xuLVx0XHRpZiAoIWlycV9ncnAtXHUwMDNlbmFwaV9uZGV2KVxuLVx0XHRcdHJldHVybiAtRU5PTUVNO1xuJiM0MztcdFx0aWYgKCFpcnFfZ3JwLVx1MDAzZW5hcGlfbmRldikge1xuJiM0MztcdFx0XHRyZXQgPSAtRU5PTUVNO1xuJiM0MztcdFx0XHRpcnFfZ3JwLVx1MDAzZW51bV9pcnEgPSAwO1xuJiM0MztcdFx0XHRnb3RvIGVycl9yZXF1ZXN0X2lycTtcbiYjNDM7XHRcdH1cbiBcbiBcdFx0bmV0aWZfbmFwaV9hZGQoaXJxX2dycC1cdTAwM2VuYXBpX25kZXYsIFx1MDAyNmlycV9ncnAtXHUwMDNlbmFwaSxcbiBcdFx0XHQgICAgICAgYXRoMTFrX2FoYl9leHRfZ3JwX25hcGlfcG9sbCk7XG5AQCAtNTg1LDkgJiM0Mzs2MDEsNyBAQCBzdGF0aWMgaW50IGF0aDExa19haGJfY29uZmlnX2V4dF9pcnEoc3RydWN0IGF0aDExa19iYXNlICphYilcbiBcdFx0XHRcdH1cbiBcdFx0XHR9XG4gXHRcdH1cbi1cdFx0aXJxX2dycC1cdTAwM2VudW1faXJxID0gbnVtX2lycTtcbi1cbi1cdFx0Zm9yIChqID0gMDsgaiBcdTAwM2MgaXJxX2dycC1cdTAwM2VudW1faXJxOyBqJiM0MzsmIzQzOykge1xuJiM0MztcdFx0Zm9yIChqID0gMDsgaiBcdTAwM2MgbnVtX2lycTsgaiYjNDM7JiM0MzspIHtcbiBcdFx0XHRpbnQgaXJxX2lkeCA9IGlycV9ncnAtXHUwMDNlaXJxc1tqXTtcbiBcbiBcdFx0XHRpcnEgPSBwbGF0Zm9ybV9nZXRfaXJxX2J5bmFtZShhYi1cdTAwM2VwZGV2LFxuQEAgLTYwMCwxMSAmIzQzOzYxNCwyMyBAQCBzdGF0aWMgaW50IGF0aDExa19haGJfY29uZmlnX2V4dF9pcnEoc3RydWN0IGF0aDExa19iYXNlICphYilcbiBcdFx0XHRpZiAocmV0KSB7XG4gXHRcdFx0XHRhdGgxMWtfZXJyKGFiLCBcJiMzNDtmYWlsZWQgcmVxdWVzdF9pcnEgZm9yICVkXFxuXCYjMzQ7LFxuIFx0XHRcdFx0XHQgICBpcnEpO1xuJiM0MztcdFx0XHRcdGlycV9ncnAtXHUwMDNlbnVtX2lycSA9IGo7XG4mIzQzO1x0XHRcdFx0YXRoMTFrX2FoYl9mcmVlX2V4dF9pcnFfZ3JwKGFiLCBpcnFfZ3JwKTtcbiYjNDM7XHRcdFx0XHRnb3RvIGVycl9yZXF1ZXN0X2lycTtcbiBcdFx0XHR9XG4gXHRcdH1cbiYjNDM7XG4mIzQzO1x0XHRpcnFfZ3JwLVx1MDAzZW51bV9pcnEgPSBudW1faXJxO1xuIFx0fVxuIFxuIFx0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztlcnJfcmVxdWVzdF9pcnE6XG4mIzQzO1x0Zm9yIChpLS07IGkgXHUwMDNlPSAwOyBpLS0pIHtcbiYjNDM7XHRcdGlycV9ncnAgPSBcdTAwMjZhYi1cdTAwM2VleHRfaXJxX2dycFtpXTtcbiYjNDM7XHRcdGF0aDExa19haGJfZnJlZV9leHRfaXJxX2dycChhYiwgaXJxX2dycCk7XG4mIzQzO1x0fVxuJiM0MztcdHJldHVybiByZXQ7XG4gfVxuIFxuIHN0YXRpYyBpbnQgYXRoMTFrX2FoYl9jb25maWdfaXJxKHN0cnVjdCBhdGgxMWtfYmFzZSAqYWIpXG5AQCAtNjI5LDE2ICYjNDM7NjU1LDI0IEBAIHN0YXRpYyBpbnQgYXRoMTFrX2FoYl9jb25maWdfaXJxKHN0cnVjdCBhdGgxMWtfYmFzZSAqYWIpXG4gXHRcdHJldCA9IHJlcXVlc3RfaXJxKGlycSwgYXRoMTFrX2FoYl9jZV9pbnRlcnJ1cHRfaGFuZGxlcixcbiBcdFx0XHRcdCAgSVJRRl9UUklHR0VSX1JJU0lORywgaXJxX25hbWVbaXJxX2lkeF0sXG4gXHRcdFx0XHQgIGNlX3BpcGUpO1xuLVx0XHRpZiAocmV0KVxuJiM0MztcdFx0aWYgKHJldCkge1xuJiM0MztcdFx0XHRhdGgxMWtfZXJyKGFiLCBcJiMzNDtmYWlsZWQgcmVxdWVzdF9pcnEgZm9yICVkXFxuXCYjMzQ7LCBpcnEpO1xuJiM0MztcdFx0XHRhdGgxMWtfYWhiX2ZyZWVfY2VfaXJxcyhhYiwgaSk7XG4gXHRcdFx0cmV0dXJuIHJldDtcbiYjNDM7XHRcdH1cbiBcbiBcdFx0YWItXHUwMDNlaXJxX251bVtpcnFfaWR4XSA9IGlycTtcbiBcdH1cbiBcbiBcdC8qIENvbmZpZ3VyZSBleHRlcm5hbCBpbnRlcnJ1cHRzICovXG4gXHRyZXQgPSBhdGgxMWtfYWhiX2NvbmZpZ19leHRfaXJxKGFiKTtcbiYjNDM7XHRpZiAocmV0KSB7XG4mIzQzO1x0XHRhdGgxMWtfZXJyKGFiLCBcJiMzNDtmYWlsZWQgdG8gY29uZmlndXJlIGV4dCBpcnE6ICVkXFxuXCYjMzQ7LCByZXQpO1xuJiM0MztcdFx0YXRoMTFrX2FoYl9mcmVlX2NlX2lycXMoYWIsIGFiLVx1MDAzZWh3X3BhcmFtcy5jZV9jb3VudCk7XG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcdH1cbiBcbi1cdHJldHVybiByZXQ7XG4mIzQzO1x0cmV0dXJuIDA7XG4gfVxuIFxuIHN0YXRpYyBpbnQgYXRoMTFrX2FoYl9tYXBfc2VydmljZV90b19waXBlKHN0cnVjdCBhdGgxMWtfYmFzZSAqYWIsIHUxNiBzZXJ2aWNlX2lkLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE2IDE2OjE5PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjJtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0FUSDExSyYjMzQ7LAogICAgJiMzNDtBVEgxMUtfQUhCJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YXRoMTFrX2FoYl9mcmVlX2V4dF9pcnFfZ3JwJiMzNDssCiAgICAmIzM0O2F0aDExa19haGJfZnJlZV9leHRfaXJxJiMzNDssCiAgICAmIzM0O2F0aDExa19haGJfZnJlZV9jZV9pcnFzJiMzNDssCiAgICAmIzM0O2F0aDExa19haGJfZnJlZV9pcnEmIzM0OywKICAgICYjMzQ7YXRoMTFrX2FoYl9jb25maWdfZXh0X2lycSYjMzQ7LAogICAgJiMzNDthdGgxMWtfYWhiX2NvbmZpZ19pcnEmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgcmVzb3VyY2UgbGVha3MgaW4gdGhlIGVycm9yIHBhdGhzIG9mIElSUSBjb25maWd1cmF0aW9uIGZvciB0aGUgYXRoMTFrIEFIQiBkcml2ZXIuIEl0IGludHJvZHVjZXMgbmV3IGhlbHBlciBmdW5jdGlvbnMgZm9yIGZyZWVpbmcgSVJRcyBhbmQgdXBkYXRlcyB0aGUgY29uZmlndXJhdGlvbiBmdW5jdGlvbnMgdG8gdXNlIHRoZW0gb24gZmFpbHVyZS4gVGhpcyBpcyBmdW5jdGlvbmFsIGRyaXZlciBjb2RlIHRoYXQgY2FuIGJlIHJlYWNoZWQgZHVyaW5nIGRldmljZSBwcm9iZS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLApldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXQKICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LAogICBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgY2U1MmFjYWRlZmUyOGRlOTY4MDc1NzljN2UwNGRjNDA1ZjllNDJiZApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUaHUgSnVsIDE2IDE2OjE5OjQ5IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9haGIuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvYWhiLmMKaW5kZXggZjU2NmQ2OTlkMDc0YTguLjFhOTQwODEzOGQ4MTVjIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2FoYi5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvYWhiLmMKQEAgLTQzMSwzNiAmIzQzOzQzMSw0NyBAQCBzdGF0aWMgdm9pZCBhdGgxMWtfYWhiX2luaXRfcW1pX2NlX2NvbmZpZyhzdHJ1Y3QgYXRoMTFrX2Jhc2UgKmFiKQogCWFiLSZndDtxbWkuc2VydmljZV9pbnNfaWQgPSBhYi0mZ3Q7aHdfcGFyYW1zLnFtaV9zZXJ2aWNlX2luc19pZDsKIH0KIAotc3RhdGljIHZvaWQgYXRoMTFrX2FoYl9mcmVlX2V4dF9pcnEoc3RydWN0IGF0aDExa19iYXNlICphYikKJiM0MztzdGF0aWMgdm9pZCBhdGgxMWtfYWhiX2ZyZWVfZXh0X2lycV9ncnAoc3RydWN0IGF0aDExa19iYXNlICphYiwKJiM0MzsJCQkJICAgICAgc3RydWN0IGF0aDExa19leHRfaXJxX2dycCAqaXJxX2dycCkKIHsKLQlpbnQgaSwgajsKJiM0MzsJaW50IGo7CiAKLQlmb3IgKGkgPSAwOyBpICZsdDsgQVRIMTFLX0VYVF9JUlFfR1JQX05VTV9NQVg7IGkmIzQzOyYjNDM7KSB7Ci0JCXN0cnVjdCBhdGgxMWtfZXh0X2lycV9ncnAgKmlycV9ncnAgPSAmYW1wO2FiLSZndDtleHRfaXJxX2dycFtpXTsKJiM0MzsJZm9yIChqID0gMDsgaiAmbHQ7IGlycV9ncnAtJmd0O251bV9pcnE7IGomIzQzOyYjNDM7KQomIzQzOwkJZnJlZV9pcnEoYWItJmd0O2lycV9udW1baXJxX2dycC0mZ3Q7aXJxc1tqXV0sIGlycV9ncnApOwogCi0JCWZvciAoaiA9IDA7IGogJmx0OyBpcnFfZ3JwLSZndDtudW1faXJxOyBqJiM0MzsmIzQzOykKLQkJCWZyZWVfaXJxKGFiLSZndDtpcnFfbnVtW2lycV9ncnAtJmd0O2lycXNbal1dLCBpcnFfZ3JwKTsKJiM0MzsJaWYgKCFpcnFfZ3JwLSZndDtuYXBpX25kZXYpCiYjNDM7CQlyZXR1cm47CiAKLQkJbmV0aWZfbmFwaV9kZWwoJmFtcDtpcnFfZ3JwLSZndDtuYXBpKTsKLQkJZnJlZV9uZXRkZXYoaXJxX2dycC0mZ3Q7bmFwaV9uZGV2KTsKLQl9CiYjNDM7CW5ldGlmX25hcGlfZGVsKCZhbXA7aXJxX2dycC0mZ3Q7bmFwaSk7CiYjNDM7CWZyZWVfbmV0ZGV2KGlycV9ncnAtJmd0O25hcGlfbmRldik7CiB9CiAKLXN0YXRpYyB2b2lkIGF0aDExa19haGJfZnJlZV9pcnEoc3RydWN0IGF0aDExa19iYXNlICphYikKJiM0MztzdGF0aWMgdm9pZCBhdGgxMWtfYWhiX2ZyZWVfZXh0X2lycShzdHJ1Y3QgYXRoMTFrX2Jhc2UgKmFiKQogewotCWludCBpcnFfaWR4OwogCWludCBpOwogCi0JaWYgKGFiLSZndDtod19wYXJhbXMuaHlicmlkX2J1c190eXBlKQotCQlyZXR1cm4gYXRoMTFrX3BjaWNfZnJlZV9pcnEoYWIpOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgQVRIMTFLX0VYVF9JUlFfR1JQX05VTV9NQVg7IGkmIzQzOyYjNDM7KQomIzQzOwkJYXRoMTFrX2FoYl9mcmVlX2V4dF9pcnFfZ3JwKGFiLCAmYW1wO2FiLSZndDtleHRfaXJxX2dycFtpXSk7CiYjNDM7fQogCi0JZm9yIChpID0gMDsgaSAmbHQ7IGFiLSZndDtod19wYXJhbXMuY2VfY291bnQ7IGkmIzQzOyYjNDM7KSB7CiYjNDM7c3RhdGljIHZvaWQgYXRoMTFrX2FoYl9mcmVlX2NlX2lycXMoc3RydWN0IGF0aDExa19iYXNlICphYiwgaW50IG1heF9pZHgpCiYjNDM7ewomIzQzOwlpbnQgaXJxX2lkeCwgaTsKJiM0MzsKJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IG1heF9pZHg7IGkmIzQzOyYjNDM7KSB7CiAJCWlmIChhdGgxMWtfY2VfZ2V0X2F0dHJfZmxhZ3MoYWIsIGkpICZhbXA7IENFX0FUVFJfRElTX0lOVFIpCiAJCQljb250aW51ZTsKIAkJaXJxX2lkeCA9IEFUSDExS19JUlFfQ0UwX09GRlNFVCAmIzQzOyBpOwogCQlmcmVlX2lycShhYi0mZ3Q7aXJxX251bVtpcnFfaWR4XSwgJmFtcDthYi0mZ3Q7Y2UuY2VfcGlwZVtpXSk7CiAJfQomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBhdGgxMWtfYWhiX2ZyZWVfaXJxKHN0cnVjdCBhdGgxMWtfYmFzZSAqYWIpCiYjNDM7ewomIzQzOwlpZiAoYWItJmd0O2h3X3BhcmFtcy5oeWJyaWRfYnVzX3R5cGUpCiYjNDM7CQlyZXR1cm4gYXRoMTFrX3BjaWNfZnJlZV9pcnEoYWIpOwogCiYjNDM7CWF0aDExa19haGJfZnJlZV9jZV9pcnFzKGFiLCBhYi0mZ3Q7aHdfcGFyYW1zLmNlX2NvdW50KTsKIAlhdGgxMWtfYWhiX2ZyZWVfZXh0X2lycShhYik7CiB9CiAKQEAgLTUyNCwyMCAmIzQzOzUzNSwyNSBAQCBzdGF0aWMgaXJxcmV0dXJuX3QgYXRoMTFrX2FoYl9leHRfaW50ZXJydXB0X2hhbmRsZXIoaW50IGlycSwgdm9pZCAqYXJnKQogc3RhdGljIGludCBhdGgxMWtfYWhiX2NvbmZpZ19leHRfaXJxKHN0cnVjdCBhdGgxMWtfYmFzZSAqYWIpCiB7CiAJc3RydWN0IGF0aDExa19od19wYXJhbXMgKmh3ID0gJmFtcDthYi0mZ3Q7aHdfcGFyYW1zOwomIzQzOwlzdHJ1Y3QgYXRoMTFrX2V4dF9pcnFfZ3JwICppcnFfZ3JwOwogCWludCBpLCBqOwogCWludCBpcnE7CiAJaW50IHJldDsKIAogCWZvciAoaSA9IDA7IGkgJmx0OyBBVEgxMUtfRVhUX0lSUV9HUlBfTlVNX01BWDsgaSYjNDM7JiM0MzspIHsKLQkJc3RydWN0IGF0aDExa19leHRfaXJxX2dycCAqaXJxX2dycCA9ICZhbXA7YWItJmd0O2V4dF9pcnFfZ3JwW2ldOwogCQl1MzIgbnVtX2lycSA9IDA7CiAKJiM0MzsJCWlycV9ncnAgPSAmYW1wO2FiLSZndDtleHRfaXJxX2dycFtpXTsKJiM0MzsKIAkJaXJxX2dycC0mZ3Q7YWIgPSBhYjsKIAkJaXJxX2dycC0mZ3Q7Z3JwX2lkID0gaTsKIAogCQlpcnFfZ3JwLSZndDtuYXBpX25kZXYgPSBhbGxvY19uZXRkZXZfZHVtbXkoMCk7Ci0JCWlmICghaXJxX2dycC0mZ3Q7bmFwaV9uZGV2KQotCQkJcmV0dXJuIC1FTk9NRU07CiYjNDM7CQlpZiAoIWlycV9ncnAtJmd0O25hcGlfbmRldikgewomIzQzOwkJCXJldCA9IC1FTk9NRU07CiYjNDM7CQkJaXJxX2dycC0mZ3Q7bnVtX2lycSA9IDA7CiYjNDM7CQkJZ290byBlcnJfcmVxdWVzdF9pcnE7CiYjNDM7CQl9CiAKIAkJbmV0aWZfbmFwaV9hZGQoaXJxX2dycC0mZ3Q7bmFwaV9uZGV2LCAmYW1wO2lycV9ncnAtJmd0O25hcGksCiAJCQkgICAgICAgYXRoMTFrX2FoYl9leHRfZ3JwX25hcGlfcG9sbCk7CkBAIC01ODUsOSAmIzQzOzYwMSw3IEBAIHN0YXRpYyBpbnQgYXRoMTFrX2FoYl9jb25maWdfZXh0X2lycShzdHJ1Y3QgYXRoMTFrX2Jhc2UgKmFiKQogCQkJCX0KIAkJCX0KIAkJfQotCQlpcnFfZ3JwLSZndDtudW1faXJxID0gbnVtX2lycTsKLQotCQlmb3IgKGogPSAwOyBqICZsdDsgaXJxX2dycC0mZ3Q7bnVtX2lycTsgaiYjNDM7JiM0MzspIHsKJiM0MzsJCWZvciAoaiA9IDA7IGogJmx0OyBudW1faXJxOyBqJiM0MzsmIzQzOykgewogCQkJaW50IGlycV9pZHggPSBpcnFfZ3JwLSZndDtpcnFzW2pdOwogCiAJCQlpcnEgPSBwbGF0Zm9ybV9nZXRfaXJxX2J5bmFtZShhYi0mZ3Q7cGRldiwKQEAgLTYwMCwxMSAmIzQzOzYxNCwyMyBAQCBzdGF0aWMgaW50IGF0aDExa19haGJfY29uZmlnX2V4dF9pcnEoc3RydWN0IGF0aDExa19iYXNlICphYikKIAkJCWlmIChyZXQpIHsKIAkJCQlhdGgxMWtfZXJyKGFiLCAmIzM0O2ZhaWxlZCByZXF1ZXN0X2lycSBmb3IgJWRcbiYjMzQ7LAogCQkJCQkgICBpcnEpOwomIzQzOwkJCQlpcnFfZ3JwLSZndDtudW1faXJxID0gajsKJiM0MzsJCQkJYXRoMTFrX2FoYl9mcmVlX2V4dF9pcnFfZ3JwKGFiLCBpcnFfZ3JwKTsKJiM0MzsJCQkJZ290byBlcnJfcmVxdWVzdF9pcnE7CiAJCQl9CiAJCX0KJiM0MzsKJiM0MzsJCWlycV9ncnAtJmd0O251bV9pcnEgPSBudW1faXJxOwogCX0KIAogCXJldHVybiAwOwomIzQzOwomIzQzO2Vycl9yZXF1ZXN0X2lycToKJiM0MzsJZm9yIChpLS07IGkgJmd0Oz0gMDsgaS0tKSB7CiYjNDM7CQlpcnFfZ3JwID0gJmFtcDthYi0mZ3Q7ZXh0X2lycV9ncnBbaV07CiYjNDM7CQlhdGgxMWtfYWhiX2ZyZWVfZXh0X2lycV9ncnAoYWIsIGlycV9ncnApOwomIzQzOwl9CiYjNDM7CXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyBpbnQgYXRoMTFrX2FoYl9jb25maWdfaXJxKHN0cnVjdCBhdGgxMWtfYmFzZSAqYWIpCkBAIC02MjksMTYgJiM0Mzs2NTUsMjQgQEAgc3RhdGljIGludCBhdGgxMWtfYWhiX2NvbmZpZ19pcnEoc3RydWN0IGF0aDExa19iYXNlICphYikKIAkJcmV0ID0gcmVxdWVzdF9pcnEoaXJxLCBhdGgxMWtfYWhiX2NlX2ludGVycnVwdF9oYW5kbGVyLAogCQkJCSAgSVJRRl9UUklHR0VSX1JJU0lORywgaXJxX25hbWVbaXJxX2lkeF0sCiAJCQkJICBjZV9waXBlKTsKLQkJaWYgKHJldCkKJiM0MzsJCWlmIChyZXQpIHsKJiM0MzsJCQlhdGgxMWtfZXJyKGFiLCAmIzM0O2ZhaWxlZCByZXF1ZXN0X2lycSBmb3IgJWRcbiYjMzQ7LCBpcnEpOwomIzQzOwkJCWF0aDExa19haGJfZnJlZV9jZV9pcnFzKGFiLCBpKTsKIAkJCXJldHVybiByZXQ7CiYjNDM7CQl9CiAKIAkJYWItJmd0O2lycV9udW1baXJxX2lkeF0gPSBpcnE7CiAJfQogCiAJLyogQ29uZmlndXJlIGV4dGVybmFsIGludGVycnVwdHMgKi8KIAlyZXQgPSBhdGgxMWtfYWhiX2NvbmZpZ19leHRfaXJxKGFiKTsKJiM0MzsJaWYgKHJldCkgewomIzQzOwkJYXRoMTFrX2VycihhYiwgJiMzNDtmYWlsZWQgdG8gY29uZmlndXJlIGV4dCBpcnE6ICVkXG4mIzM0OywgcmV0KTsKJiM0MzsJCWF0aDExa19haGJfZnJlZV9jZV9pcnFzKGFiLCBhYi0mZ3Q7aHdfcGFyYW1zLmNlX2NvdW50KTsKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CX0KIAotCXJldHVybiByZXQ7CiYjNDM7CXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IGF0aDExa19haGJfbWFwX3NlcnZpY2VfdG9fcGlwZShzdHJ1Y3QgYXRoMTFrX2Jhc2UgKmFiLCB1MTYgc2VydmljZV9pZCwKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTYgMTY6MTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzkzMQoJCQkJCQkJb3V0cHV0OiA0MgoJCQkJCQkJdGhvdWdodHM6IDI5MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBQb3RlbnRpYWwgRnV6emluZyBUYXJnZXQ6IGF0aDExayBBSEIgSVJRIEhhbmRsaW5nKioKCk9rYXksIHNvIEkmIzM5O3ZlIGdvdCBhIHBhdGNoIGhlcmUgZm9yIGBkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2FoYi5jYC4gSXQmIzM5O3MgdG91Y2hpbmcgZnVuY3Rpb25zIGxpa2UgYGF0aDExa19haGJfZnJlZV9leHRfaXJxYCwgYGF0aDExa19haGJfZnJlZV9pcnFgLCBgYXRoMTFrX2FoYl9jb25maWdfZXh0X2lycWAsIGFuZCBgYXRoMTFrX2FoYl9jb25maWdfaXJxYC4gRnJvbSB0aGUgcGF0Y2ggZGVzY3JpcHRpb24sIGl0IHNvdW5kcyBsaWtlIGl0JiMzOTtzIGFkZHJlc3Npbmcgc29tZSBtZW1vcnkgb3IgcmVzb3VyY2UgbGVha3MgdGhhdCBvY2N1ciBkdXJpbmcgZXJyb3IgaGFuZGxpbmcgcmVsYXRlZCB0byBJUlEgY29uZmlndXJhdGlvbiB3aXRoaW4gdGhlIGF0aDExayBBSEIgZHJpdmVyLiBTb3VuZHMgaW50ZXJlc3RpbmcsIGFuZCBsaWtlIGl0IGNvdWxkIGJlIGEgZ29vZCBmdXp6aW5nIHRhcmdldC4KCkZpcnN0LCBJIG5lZWQgdG8gZmlndXJlIG91dCBpZiBpdCYjMzk7cyByZWFjaGFibGUgYW5kIHdvcnRoIHRoZSBlZmZvcnQuIFRoZSBkcml2ZXIgaXMgYGF0aDExa2AsIHdoaWNoIGlzIFF1YWxjb21tJiMzOTtzIDgwMi4xMWF4IFdMQU4gZHJpdmVyLiBBbmQgaXQmIzM5O3MgdXNpbmcgdGhlIEFIQiBidXMg4oCTIHRoZSBBZHZhbmNlZCBIaWdoLXBlcmZvcm1hbmNlIEJ1cywgdHlwaWNhbCBmb3IgU29DcyBsaWtlIHRoZSBJUFE4MDc0LiBTbywgdGhlIHF1ZXN0aW9uIGlzLCBjYW4gSSBmdXp6IHRoaXMgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudD8gQUhCIGRldmljZXMgYXJlIHVzdWFsbHkgcGxhdGZvcm0gZGV2aWNlcywgcmlnaHQ/IEFuZCB1c3VhbGx5LCB0aGV5IGdldCBwcm9iZWQgaWYgdGhlaXIgc3BlY2lmaWMgZGV2aWNlIHRyZWUgbm9kZSBpcyBwcmVzZW50LiBVbmxlc3MgSSBjYW4gc29tZWhvdyBlbXVsYXRlIHRoaXMgc3BlY2lmaWMgcGxhdGZvcm0gZGV2aWNlIOKAkyBtYXliZSB3aXRoIGEgZmFrZSBvbmUgb3Igc29tZSBvdGhlciBlbXVsYXRpb24g4oCTIEkgbWlnaHQgYmUgZGVhZCBpbiB0aGUgd2F0ZXIuCgpCdXQgd2FpdCBhIG1pbnV0ZS4uLiBJIHRoaW5rIHN5emthbGxlciAqY2FuKiBmdXp6IHBsYXRmb3JtIGRldmljZXMgaWYgdGhleSYjMzk7cmUgcmVnaXN0ZXJlZC4gU28sIHRoZSBrZXkgaXMgd2hldGhlciBJIGNhbiBnZXQgYGF0aDExa19haGJfcHJvYmVgIHRvIGV4ZWN1dGUuIEkgbmVlZCB0byBjaGVjayBob3cgdGhlIHByb2JlIGZ1bmN0aW9uIGlzIGNvbmZpZ3VyZWQgdG8gc2VlIGlmIEkgY2FuIGdldCB0aGF0IHRvIGhhcHBlbiBpbiBhIHZpcnR1YWwgZW52aXJvbm1lbnQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTYgMTY6MTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YXRoMTFrX2FoYl9wcm9iZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvYWhiLmM9MTEwNj1zdGF0aWMgaW50IGF0aDExa19haGJfZndfcmVzb3VyY2VfZGVpbml0KHN0cnVjdCBhdGgxMWtfYmFzZSAqYWIpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9haGIuYy0xMTQwLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9haGIuYzoxMTQxOnN0YXRpYyBpbnQgYXRoMTFrX2FoYl9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9haGIuYy0xMTQyLXtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2FoYi5jPTEzMzY9c3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgYXRoMTFrX2FoYl9kcml2ZXIgPSB7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9haGIuYy0xMzQwLVx0fSxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvYWhiLmM6MTM0MTpcdC5wcm9iZSA9IGF0aDExa19haGJfcHJvYmUsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2FoYi5jLTEzNDItXHQucmVtb3ZlID0gYXRoMTFrX2FoYl9yZW1vdmUsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTYgMTY6MTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDk0OQoJCQkJCQkJb3V0cHV0OiA0NwoJCQkJCQkJdGhvdWdodHM6IDE4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIGBhdGgxMWtfYWhiX3Byb2JlYCBSZXF1aXJlbWVudHMqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGUgYGF0aDExa19haGJfcHJvYmVgIGZ1bmN0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHRoaXMgZXhwZWN0cyBiZWZvcmUgaXQmIzM5O2xsIGV2ZW4gZ2V0IG9mZiB0aGUgZ3JvdW5kLiBXaGF0IGRlcGVuZGVuY2llcyBkb2VzIGl0IGhhdmU/IFdoYXQgc3BlY2lmaWMgaGFyZHdhcmUgaW5pdGlhbGl6YXRpb24gc3RlcHMgYXJlIGxpa2VseSBiYWtlZCBpbnRvIHRoaXMgcHJvYmUgZnVuY3Rpb24/IEkmIzM5O20gYW50aWNpcGF0aW5nIHRoYXQgaXQgd2lsbCBoYW5kbGUgdGhlIGJhc2ljIHBsYXRmb3JtIGluaXRpYWxpemF0aW9uIGZvciBhbiBBSEItY29ubmVjdGVkIEF0aGVyb3MgODAyLjExayBjb250cm9sbGVyLiBJIG5lZWQgdG8gaWRlbnRpZnkgdGhlIGtleSBzdHJ1Y3R1cmVzIHRoYXQgaXQmIzM5O3MgZ29pbmcgdG8gaW50ZXJhY3Qgd2l0aCwgbGlrZWx5IGludm9sdmluZyByZWdpc3RlciBtYXBwaW5nLCBETUEgc2V0dXAsIGFuZCBpbnRlcnJ1cHQgcmVnaXN0cmF0aW9uLiBGcm9tIHdoYXQgSSByZWNhbGwgb2YgcHJldmlvdXMgd29yaywgSSBzaG91bGQgYmUgbG9va2luZyBmb3IgcmVzb3VyY2UgYWxsb2NhdGlvbiBjYWxscywgYW5kIGRyaXZlciBiaW5kaW5nIHdpdGhpbiB0aGUga2VybmVsJiMzOTtzIGRldmljZSBtb2RlbCwgSSBuZWVkIHRvIGtub3cgaG93IHRoZSBkcml2ZXIgaW50ZXJhY3RzIHdpdGggdGhlIGhhcmR3YXJlLCB0aGUgcmVsZXZhbnQgcmVnaXN0ZXIgbWFwLCBpbnRlcnJ1cHRzLCBhbmQgYW55IGRldmljZS1zcGVjaWZpYyBxdWlya3MuIEl0JiMzOTtzIGxpa2VseSB0aGF0IGEgcHJvYmUgZnVuY3Rpb24gbGlrZSB0aGlzIG5lZWRzIHRvIGRlYWwgd2l0aCB0aGUgcG93ZXIgbWFuYWdlbWVudCBzdGF0ZXMgYXMgd2VsbC4gTGV0JiMzOTtzIHNlZSBob3cgbXVjaCBvZiB0aGlzIGlzIGhhbmRsZWQgaW4gYGF0aDExa19haGJfcHJvYmVgIGRpcmVjdGx5LCBhbmQgd2hhdCYjMzk7cyBkZWZlcnJlZCB0byBvdGhlciBmdW5jdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTYgMTY6MjA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2FoYi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTE0MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTE0MDpcdFxuMTE0MTpcdHN0YXRpYyBpbnQgYXRoMTFrX2FoYl9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxuMTE0MjpcdHtcbjExNDM6XHRcdHN0cnVjdCBhdGgxMWtfYmFzZSAqYWI7XG4xMTQ0Olx0XHRjb25zdCBzdHJ1Y3QgYXRoMTFrX2hpZl9vcHMgKmhpZl9vcHM7XG4xMTQ1Olx0XHRjb25zdCBzdHJ1Y3QgYXRoMTFrX3BjaV9vcHMgKnBjaV9vcHM7XG4xMTQ2Olx0XHRlbnVtIGF0aDExa19od19yZXYgaHdfcmV2O1xuMTE0NzpcdFx0aW50IHJldDtcbjExNDg6XHRcbjExNDk6XHRcdGh3X3JldiA9ICh1aW50cHRyX3QpZGV2aWNlX2dldF9tYXRjaF9kYXRhKFx1MDAyNnBkZXYtXHUwMDNlZGV2KTtcbjExNTA6XHRcbjExNTE6XHRcdHN3aXRjaCAoaHdfcmV2KSB7XG4xMTUyOlx0XHRjYXNlIEFUSDExS19IV19JUFE4MDc0OlxuMTE1MzpcdFx0Y2FzZSBBVEgxMUtfSFdfSVBRNjAxOF9IVzEwOlxuMTE1NDpcdFx0Y2FzZSBBVEgxMUtfSFdfSVBRNTAxOF9IVzEwOlxuMTE1NTpcdFx0XHRoaWZfb3BzID0gXHUwMDI2YXRoMTFrX2FoYl9oaWZfb3BzX2lwcTgwNzQ7XG4xMTU2Olx0XHRcdHBjaV9vcHMgPSBOVUxMO1xuMTE1NzpcdFx0XHRicmVhaztcbjExNTg6XHRcdGNhc2UgQVRIMTFLX0hXX1dDTjY3NTBfSFcxMDpcbjExNTk6XHRcdFx0aGlmX29wcyA9IFx1MDAyNmF0aDExa19haGJfaGlmX29wc193Y242NzUwO1xuMTE2MDpcdFx0XHRwY2lfb3BzID0gXHUwMDI2YXRoMTFrX2FoYl9wY2lfb3BzX3djbjY3NTA7XG4xMTYxOlx0XHRcdGJyZWFrO1xuMTE2MjpcdFx0ZGVmYXVsdDpcbjExNjM6XHRcdFx0ZGV2X2VycihcdTAwMjZwZGV2LVx1MDAzZWRldiwgXCYjMzQ7dW5zdXBwb3J0ZWQgZGV2aWNlIHR5cGUgJWRcXG5cJiMzNDssIGh3X3Jldik7XG4xMTY0Olx0XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbjExNjU6XHRcdH1cbjExNjY6XHRcbjExNjc6XHRcdHJldCA9IGRtYV9zZXRfbWFza19hbmRfY29oZXJlbnQoXHUwMDI2cGRldi1cdTAwM2VkZXYsIERNQV9CSVRfTUFTSygzMikpO1xuMTE2ODpcdFx0aWYgKHJldCkge1xuMTE2OTpcdFx0XHRkZXZfZXJyKFx1MDAyNnBkZXYtXHUwMDNlZGV2LCBcJiMzNDtmYWlsZWQgdG8gc2V0IDMyLWJpdCBjb25zaXN0ZW50IGRtYVxcblwmIzM0Oyk7XG4xMTcwOlx0XHRcdHJldHVybiByZXQ7XG4xMTcxOlx0XHR9XG4xMTcyOlx0XG4xMTczOlx0XHRhYiA9IGF0aDExa19jb3JlX2FsbG9jKFx1MDAyNnBkZXYtXHUwMDNlZGV2LCBzaXplb2Yoc3RydWN0IGF0aDExa19haGIpLFxuMTE3NDpcdFx0XHRcdCAgICAgICBBVEgxMUtfQlVTX0FIQik7XG4xMTc1Olx0XHRpZiAoIWFiKSB7XG4xMTc2Olx0XHRcdGRldl9lcnIoXHUwMDI2cGRldi1cdTAwM2VkZXYsIFwmIzM0O2ZhaWxlZCB0byBhbGxvY2F0ZSBhdGgxMWsgYmFzZVxcblwmIzM0Oyk7XG4xMTc3Olx0XHRcdHJldHVybiAtRU5PTUVNO1xuMTE3ODpcdFx0fVxuMTE3OTpcdFxuMTE4MDpcdFx0YWItXHUwMDNlaGlmLm9wcyA9IGhpZl9vcHM7XG4xMTgxOlx0XHRhYi1cdTAwM2VwZGV2ID0gcGRldjtcbjExODI6XHRcdGFiLVx1MDAzZWh3X3JldiA9IGh3X3JldjtcbjExODM6XHRcdGFiLVx1MDAzZWZ3X21vZGUgPSBBVEgxMUtfRklSTVdBUkVfTU9ERV9OT1JNQUw7XG4xMTg0Olx0XHRwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBhYik7XG4xMTg1Olx0XG4xMTg2Olx0XHRyZXQgPSBhdGgxMWtfcGNpY19yZWdpc3Rlcl9wY2lfb3BzKGFiLCBwY2lfb3BzKTtcbjExODc6XHRcdGlmIChyZXQpIHtcbjExODg6XHRcdFx0YXRoMTFrX2VycihhYiwgXCYjMzQ7ZmFpbGVkIHRvIHJlZ2lzdGVyIFBDSSBvcHM6ICVkXFxuXCYjMzQ7LCByZXQpO1xuMTE4OTpcdFx0XHRnb3RvIGVycl9jb3JlX2ZyZWU7XG4xMTkwOlx0XHR9XG4xMTkxOlx0XG4xMTkyOlx0XHRyZXQgPSBhdGgxMWtfY29yZV9wcmVfaW5pdChhYik7XG4xMTkzOlx0XHRpZiAocmV0KVxuMTE5NDpcdFx0XHRnb3RvIGVycl9jb3JlX2ZyZWU7XG4xMTk1Olx0XG4xMTk2Olx0XHRyZXQgPSBhdGgxMWtfYWhiX3NldHVwX3Jlc291cmNlcyhhYik7XG4xMTk3Olx0XHRpZiAocmV0KVxuMTE5ODpcdFx0XHRnb3RvIGVycl9jb3JlX2ZyZWU7XG4xMTk5Olx0XG4xMjAwOlx0XHRyZXQgPSBhdGgxMWtfYWhiX2NlX3JlbWFwKGFiKTtcbjEyMDE6XHRcdGlmIChyZXQpXG4xMjAyOlx0XHRcdGdvdG8gZXJyX2NvcmVfZnJlZTtcbjEyMDM6XHRcbjEyMDQ6XHRcdHJldCA9IGF0aDExa19haGJfZndfcmVzb3VyY2VzX2luaXQoYWIpO1xuMTIwNTpcdFx0aWYgKHJldClcbjEyMDY6XHRcdFx0Z290byBlcnJfY2VfdW5tYXA7XG4xMjA3Olx0XG4xMjA4Olx0XHRyZXQgPSBhdGgxMWtfYWhiX3NldHVwX3NtcDJwX2hhbmRsZShhYik7XG4xMjA5Olx0XHRpZiAocmV0KVxuMTIxMDpcdFx0XHRnb3RvIGVycl9md19kZWluaXQ7XG4xMjExOlx0XG4xMjEyOlx0XHRyZXQgPSBhdGgxMWtfaGFsX3NybmdfaW5pdChhYik7XG4xMjEzOlx0XHRpZiAocmV0KVxuMTIxNDpcdFx0XHRnb3RvIGVycl9yZWxlYXNlX3NtcDJwX2hhbmRsZTtcbjEyMTU6XHRcbjEyMTY6XHRcdHJldCA9IGF0aDExa19jZV9hbGxvY19waXBlcyhhYik7XG4xMjE3Olx0XHRpZiAocmV0KSB7XG4xMjE4Olx0XHRcdGF0aDExa19lcnIoYWIsIFwmIzM0O2ZhaWxlZCB0byBhbGxvY2F0ZSBjZSBwaXBlczogJWRcXG5cJiMzNDssIHJldCk7XG4xMjE5Olx0XHRcdGdvdG8gZXJyX2hhbF9zcm5nX2RlaW5pdDtcbjEyMjA6XHRcdH1cbjEyMjE6XHRcbjEyMjI6XHRcdGF0aDExa19haGJfaW5pdF9xbWlfY2VfY29uZmlnKGFiKTtcbjEyMjM6XHRcbjEyMjQ6XHRcdHJldCA9IGF0aDExa19jb3JlX2dldF9ycHJvYyhhYik7XG4xMjI1Olx0XHRpZiAocmV0KVxuMTIyNjpcdFx0XHRnb3RvIGVycl9jZV9mcmVlO1xuMTIyNzpcdFxuMTIyODpcdFx0cmV0ID0gYXRoMTFrX2NvcmVfaW5pdChhYik7XG4xMjI5Olx0XHRpZiAocmV0KSB7XG4xMjMwOlx0XHRcdGF0aDExa19lcnIoYWIsIFwmIzM0O2ZhaWxlZCB0byBpbml0IGNvcmU6ICVkXFxuXCYjMzQ7LCByZXQpO1xuMTIzMTpcdFx0XHRnb3RvIGVycl9jZV9mcmVlO1xuMTIzMjpcdFx0fVxuMTIzMzpcdFxuMTIzNDpcdFx0cmV0ID0gYXRoMTFrX2FoYl9jb25maWdfaXJxKGFiKTtcbjEyMzU6XHRcdGlmIChyZXQpIHtcbjEyMzY6XHRcdFx0YXRoMTFrX2VycihhYiwgXCYjMzQ7ZmFpbGVkIHRvIGNvbmZpZ3VyZSBpcnE6ICVkXFxuXCYjMzQ7LCByZXQpO1xuMTIzNzpcdFx0XHRnb3RvIGVycl9jZV9mcmVlO1xuMTIzODpcdFx0fVxuMTIzOTpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE2IDE2OjIwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY5MjEKCQkJCQkJCW91dHB1dDogNDcKCQkJCQkJCXRob3VnaHRzOiAxOTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBRdWFsY29tbSBBSEIgRHJpdmVyIGZvciBQb3RlbnRpYWwgRnV6emluZyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhlc2UgcGF0Y2hlcyB0aGF0IGFyZSB0b3VjaGluZyBgYXRoMTFrX2FoYl9jb25maWdfaXJxYCBhbmQgYGF0aDExa19haGJfY29uZmlnX2V4dF9pcnFgLiBUaGVzZSBmdW5jdGlvbnMgYXJlIGNhbGxlZCBmcm9tIGBhdGgxMWtfYWhiX3Byb2JlYCwgd2hpY2ggaW1tZWRpYXRlbHkgZmxhZ3MgbXkgYXR0ZW50aW9uLiBUaGlzIGlzIGFuIEFIQiBkcml2ZXIsIGFuZCBpdCYjMzk7cyBzcGVjaWZpY2FsbHkgZm9yIHRob3NlIFF1YWxjb21tIElQUTgwNzQsIElQUTYwMTgsIElQUTUwMTgsIGFuZCBXQ042NzUwIFNvQ3MuIFJpZ2h0LCB0aGF0IHB1dHMgaXQgaW4gYSB2ZXJ5IHNwZWNpZmljIGhhcmR3YXJlIGNvbnRleHQuIFRoZSBjcml0aWNhbCBxdWVzdGlvbiBoZXJlIGlzIHdoZXRoZXIgc3l6a2FsbGVyIGNhbiByZWFsaXN0aWNhbGx5IGZ1enogdGhpcy4KClN5emthbGxlciAqY2FuKiBjcmVhdGUgcGxhdGZvcm0gZGV2aWNlcywgdXNpbmcgYHN5el9kZXZfY3JlYXRlYCBhbmQgc3VjaCwgaWYgc3VwcG9ydGVkLiBCdXQgdGhlIHJlYWwgcHJvYmxlbSBpcyB0aGUgZGV2aWNlIHRyZWUuIFRoZXNlIGFyZSBjb21wbGV4IFNvQ3MsIGFuZCBzZXR0aW5nIHVwIHRoZSBwcmVjaXNlIGRldmljZSB0cmVlIGNvbmZpZ3VyYXRpb24gdGhhdCBgYXRoMTFrX2FoYl9wcm9iZWAgKmV4cGVjdHMqIGlzIHRoZSBjaGFsbGVuZ2UuIEl0IG5lZWRzIHRob3NlIHNwZWNpZmljIHJlc291cmNlcyAtIG1lbW9yeSByZWdpb25zLCBJUlFzLCBTTVAyUCBoYW5kbGVzLCB0aGUgd29ya3MuIEl0JiMzOTtzIG5vdCBzb21ldGhpbmcgeW91IGNhbiBqdXN0IGNvbmp1cmUgdXAuIFNvLCB0aGUgcXVlc3Rpb24gaXMsIGNhbiBzeXprYWxsZXIgcmVsaWFibHkgZW11bGF0ZSB0aGlzIHdpdGhvdXQgYSBjb21wbGV0ZSwgYWNjdXJhdGUgRFQ/IFByb2JhYmx5IG5vdCBvdXQgb2YgdGhlIGJveC4KCkxldCYjMzk7cyBkaWcgaW50byBgYXRoMTFrX2FoYl9zZXR1cF9yZXNvdXJjZXNgLiBUaGF0JiMzOTtzIHdoZXJlIHRoZSBydWJiZXIgbWVldHMgdGhlIHJvYWQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgcmVzb3VyY2VzIGFyZSBiZWluZyBzZXQgdXAgdGhlcmUsIGFuZCB3aGF0IHRoZSBkZXBlbmRlbmNpZXMgYXJlLiBUaGF0IHdpbGwgZGV0ZXJtaW5lIGlmIGFuZCBob3cgd2UgY2FuIGV2ZW4gYmVnaW4gdG8gdGhpbmsgYWJvdXQgZnV6emluZyB0aGlzIGRyaXZlciBlZmZlY3RpdmVseS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNiAxNjoyMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvYWhiLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMDAwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMDAwOlx0fVxuMTAwMTpcdFxuMTAwMjpcdHN0YXRpYyB2b2lkIGF0aDExa19haGJfY2VfdW5tYXAoc3RydWN0IGF0aDExa19iYXNlICphYilcbjEwMDM6XHR7XG4xMDA0Olx0XHRpZiAoYWItXHUwMDNlaHdfcGFyYW1zLmNlX3JlbWFwKVxuMTAwNTpcdFx0XHRpb3VubWFwKGFiLVx1MDAzZW1lbV9jZSk7XG4xMDA2Olx0fVxuMTAwNzpcdFxuMTAwODpcdHN0YXRpYyBpbnQgYXRoMTFrX2FoYl9md19yZXNvdXJjZXNfaW5pdChzdHJ1Y3QgYXRoMTFrX2Jhc2UgKmFiKVxuMTAwOTpcdHtcbjEwMTA6XHRcdHN0cnVjdCBhdGgxMWtfYWhiICphYl9haGIgPSBhdGgxMWtfYWhiX3ByaXYoYWIpO1xuMTAxMTpcdFx0c3RydWN0IGRldmljZSAqaG9zdF9kZXYgPSBhYi1cdTAwM2VkZXY7XG4xMDEyOlx0XHRzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlX2luZm8gaW5mbyA9IHt9O1xuMTAxMzpcdFx0c3RydWN0IGlvbW11X2RvbWFpbiAqaW9tbXVfZG9tO1xuMTAxNDpcdFx0c3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldjtcbjEwMTU6XHRcdHN0cnVjdCBkZXZpY2Vfbm9kZSAqbm9kZTtcbjEwMTY6XHRcdGludCByZXQ7XG4xMDE3Olx0XG4xMDE4Olx0XHQvKiBDaGlwc2V0cyBub3QgcmVxdWlyaW5nIE1TQSBuZWVkIG5vdCBpbml0aWFsaXplXG4xMDE5Olx0XHQgKiBNU0EgcmVzb3VyY2VzLCByZXR1cm4gc3VjY2VzcyBpbiBzdWNoIGNhc2VzLlxuMTAyMDpcdFx0ICovXG4xMDIxOlx0XHRpZiAoIWFiLVx1MDAzZWh3X3BhcmFtcy5maXhlZF9md19tZW0pXG4xMDIyOlx0XHRcdHJldHVybiAwO1xuMTAyMzpcdFxuMTAyNDpcdFx0bm9kZSA9IG9mX2dldF9jaGlsZF9ieV9uYW1lKGhvc3RfZGV2LVx1MDAzZW9mX25vZGUsIFwmIzM0O3dpZmktZmlybXdhcmVcJiMzNDspO1xuMTAyNTpcdFx0aWYgKCFub2RlKSB7XG4xMDI2Olx0XHRcdGFiX2FoYi1cdTAwM2Vmdy51c2VfdHogPSB0cnVlO1xuMTAyNzpcdFx0XHRyZXR1cm4gMDtcbjEwMjg6XHRcdH1cbjEwMjk6XHRcbjEwMzA6XHRcdHJldCA9IGF0aDExa19haGJfc2V0dXBfbXNhX3Jlc291cmNlcyhhYik7XG4xMDMxOlx0XHRpZiAocmV0KSB7XG4xMDMyOlx0XHRcdGF0aDExa19lcnIoYWIsIFwmIzM0O2ZhaWxlZCB0byBzZXR1cCBtc2EgcmVzb3VyY2VzXFxuXCYjMzQ7KTtcbjEwMzM6XHRcdFx0cmV0dXJuIHJldDtcbjEwMzQ6XHRcdH1cbjEwMzU6XHRcbjEwMzY6XHRcdGluZm8uZndub2RlID0gXHUwMDI2bm9kZS1cdTAwM2Vmd25vZGU7XG4xMDM3Olx0XHRpbmZvLnBhcmVudCA9IGhvc3RfZGV2O1xuMTAzODpcdFx0aW5mby5uYW1lID0gbm9kZS1cdTAwM2VuYW1lO1xuMTAzOTpcdFx0aW5mby5kbWFfbWFzayA9IERNQV9CSVRfTUFTSygzMik7XG4xMDQwOlx0XG4xMDQxOlx0XHRwZGV2ID0gcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyX2Z1bGwoXHUwMDI2aW5mbyk7XG4xMDQyOlx0XHRpZiAoSVNfRVJSKHBkZXYpKSB7XG4xMDQzOlx0XHRcdG9mX25vZGVfcHV0KG5vZGUpO1xuMTA0NDpcdFx0XHRyZXR1cm4gUFRSX0VSUihwZGV2KTtcbjEwNDU6XHRcdH1cbjEwNDY6XHRcbjEwNDc6XHRcdHJldCA9IG9mX2RtYV9jb25maWd1cmUoXHUwMDI2cGRldi1cdTAwM2VkZXYsIG5vZGUsIHRydWUpO1xuMTA0ODpcdFx0aWYgKHJldCkge1xuMTA0OTpcdFx0XHRhdGgxMWtfZXJyKGFiLCBcJiMzNDtkbWEgY29uZmlndXJlIGZhaWw6ICVkXFxuXCYjMzQ7LCByZXQpO1xuMTA1MDpcdFx0XHRnb3RvIGVycl91bnJlZ2lzdGVyO1xuMTA1MTpcdFx0fVxuMTA1MjpcdFxuMTA1MzpcdFx0YWJfYWhiLVx1MDAzZWZ3LmRldiA9IFx1MDAyNnBkZXYtXHUwMDNlZGV2O1xuMTA1NDpcdFxuMTA1NTpcdFx0aW9tbXVfZG9tID0gaW9tbXVfcGFnaW5nX2RvbWFpbl9hbGxvYyhhYl9haGItXHUwMDNlZncuZGV2KTtcbjEwNTY6XHRcdGlmIChJU19FUlIoaW9tbXVfZG9tKSkge1xuMTA1NzpcdFx0XHRhdGgxMWtfZXJyKGFiLCBcJiMzNDtmYWlsZWQgdG8gYWxsb2NhdGUgaW9tbXUgZG9tYWluXFxuXCYjMzQ7KTtcbjEwNTg6XHRcdFx0cmV0ID0gUFRSX0VSUihpb21tdV9kb20pO1xuMTA1OTpcdFx0XHRnb3RvIGVycl91bnJlZ2lzdGVyO1xuMTA2MDpcdFx0fVxuMTA2MTpcdFxuMTA2MjpcdFx0cmV0ID0gaW9tbXVfYXR0YWNoX2RldmljZShpb21tdV9kb20sIGFiX2FoYi1cdTAwM2Vmdy5kZXYpO1xuMTA2MzpcdFx0aWYgKHJldCkge1xuMTA2NDpcdFx0XHRhdGgxMWtfZXJyKGFiLCBcJiMzNDtjb3VsZCBub3QgYXR0YWNoIGRldmljZTogJWRcXG5cJiMzNDssIHJldCk7XG4xMDY1Olx0XHRcdGdvdG8gZXJyX2lvbW11X2ZyZWU7XG4xMDY2Olx0XHR9XG4xMDY3Olx0XG4xMDY4Olx0XHRyZXQgPSBpb21tdV9tYXAoaW9tbXVfZG9tLCBhYl9haGItXHUwMDNlZncubXNhX3BhZGRyLFxuMTA2OTpcdFx0XHRcdGFiX2FoYi1cdTAwM2Vmdy5tc2FfcGFkZHIsIGFiX2FoYi1cdTAwM2Vmdy5tc2Ffc2l6ZSxcbjEwNzA6XHRcdFx0XHRJT01NVV9SRUFEIHwgSU9NTVVfV1JJVEUsIEdGUF9LRVJORUwpO1xuMTA3MTpcdFx0aWYgKHJldCkge1xuMTA3MjpcdFx0XHRhdGgxMWtfZXJyKGFiLCBcJiMzNDtmYWlsZWQgdG8gbWFwIGZpcm13YXJlIHJlZ2lvbjogJWRcXG5cJiMzNDssIHJldCk7XG4xMDczOlx0XHRcdGdvdG8gZXJyX2lvbW11X2RldGFjaDtcbjEwNzQ6XHRcdH1cbjEwNzU6XHRcbjEwNzY6XHRcdHJldCA9IGlvbW11X21hcChpb21tdV9kb20sIGFiX2FoYi1cdTAwM2Vmdy5jZV9wYWRkcixcbjEwNzc6XHRcdFx0XHRhYl9haGItXHUwMDNlZncuY2VfcGFkZHIsIGFiX2FoYi1cdTAwM2Vmdy5jZV9zaXplLFxuMTA3ODpcdFx0XHRcdElPTU1VX1JFQUQgfCBJT01NVV9XUklURSwgR0ZQX0tFUk5FTCk7XG4xMDc5Olx0XHRpZiAocmV0KSB7XG4xMDgwOlx0XHRcdGF0aDExa19lcnIoYWIsIFwmIzM0O2ZhaWxlZCB0byBtYXAgZmlybXdhcmUgQ0UgcmVnaW9uOiAlZFxcblwmIzM0OywgcmV0KTtcbjEwODE6XHRcdFx0Z290byBlcnJfaW9tbXVfdW5tYXA7XG4xMDgyOlx0XHR9XG4xMDgzOlx0XG4xMDg0Olx0XHRhYl9haGItXHUwMDNlZncudXNlX3R6ID0gZmFsc2U7XG4xMDg1Olx0XHRhYl9haGItXHUwMDNlZncuaW9tbXVfZG9tYWluID0gaW9tbXVfZG9tO1xuMTA4NjpcdFx0b2Zfbm9kZV9wdXQobm9kZSk7XG4xMDg3Olx0XG4xMDg4Olx0XHRyZXR1cm4gMDtcbjEwODk6XHRcbjEwOTA6XHRlcnJfaW9tbXVfdW5tYXA6XG4xMDkxOlx0XHRpb21tdV91bm1hcChpb21tdV9kb20sIGFiX2FoYi1cdTAwM2Vmdy5tc2FfcGFkZHIsIGFiX2FoYi1cdTAwM2Vmdy5tc2Ffc2l6ZSk7XG4xMDkyOlx0XG4xMDkzOlx0ZXJyX2lvbW11X2RldGFjaDpcbjEwOTQ6XHRcdGlvbW11X2RldGFjaF9kZXZpY2UoaW9tbXVfZG9tLCBhYl9haGItXHUwMDNlZncuZGV2KTtcbjEwOTU6XHRcbjEwOTY6XHRlcnJfaW9tbXVfZnJlZTpcbjEwOTc6XHRcdGlvbW11X2RvbWFpbl9mcmVlKGlvbW11X2RvbSk7XG4xMDk4Olx0XG4xMDk5Olx0ZXJyX3VucmVnaXN0ZXI6XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTYgMTY6MjA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTE1NwoJCQkJCQkJb3V0cHV0OiA0NAoJCQkJCQkJdGhvdWdodHM6IDc0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgYXRoMTFrX2FoYiBQcm9iZSBGdW5jdGlvbmFsaXR5KioKCk9rYXksIHNvIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgaG93IGBhdGgxMWtfYWhiX3Byb2JlYCB3b3Jrcy4gSXQgbG9va3MgbGlrZSBpdCBjcml0aWNhbGx5IHJlbGllcyBvbiBgZGV2aWNlX2dldF9tYXRjaF9kYXRhKCZhbXA7cGRldi0mZ3Q7ZGV2KWAgcmV0dXJuaW5nIG9uZSBvZiB0aGUgc3BlY2lmaWVkIGBod19yZXZgIHZhbHVlcy4gVGhhdCYjMzk7cyB0aGUga2V5IHJlcXVpcmVtZW50IGZvciB0aGUgZHJpdmVyIHRvIHN1Y2Nlc3NmdWxseSBiaW5kIHRvIHRoZSBkZXZpY2UuCgpOb3csIEkmIzM5O20gY29uc2lkZXJpbmcgdGhlIHBvdGVudGlhbCBpbXBhY3Qgb2YgZnV6emluZywgcGFydGljdWxhcmx5IHN5emthbGxlci4gSWYgc3l6a2FsbGVyIGlzIGNyZWF0aW5nIGEgcGxhdGZvcm0gZGV2aWNlLCB0aGVuIHRoZSBkcml2ZXIgbWF0Y2hpbmcgcHJvY2VzcyBjb3VsZCBiZSBoYXBwZW5pbmcgdGhyb3VnaCBlaXRoZXIgdGhlIGRldmljZSBuYW1lIG9yLCBtb3JlIGludGVyZXN0aW5nbHksIHRoZSBPRiAoT3BlbiBGaXJtd2FyZSkgbWF0Y2ggdGFibGUuIEkgbmVlZCB0byB0YWtlIGEgbG9vayBhdCB0aGF0IE9GIG1hdGNoIHRhYmxlIHRvIHVuZGVyc3RhbmQgZXhhY3RseSB3aGF0IGNyaXRlcmlhIGFyZSBiZWluZyB1c2VkLiBJdCYjMzk7cyBjcnVjaWFsIHRvIHVuZGVyc3RhbmQgdGhpcyB0byBzZWUgaWYgdGhlcmUmIzM5O3MgYW4gYXR0YWNrIHN1cmZhY2UgdGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE2IDE2OjIwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2F0aDExa19haGJfb2ZfbWF0Y2gmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2FoYi5jLTIzLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9haGIuYzoyNDpzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBhdGgxMWtfYWhiX29mX21hdGNoW10gPSB7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2FoYi5jLTI1LVx0LyogVE9ETzogU2hvdWxkIHdlIGNoYW5nZSB0aGUgY29tcGF0aWJsZSBzdHJpbmcgdG8gc29tZXRoaW5nIHNpbWlsYXJcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2FoYi5jLTQyLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9haGIuYzo0MzpNT0RVTEVfREVWSUNFX1RBQkxFKG9mLCBhdGgxMWtfYWhiX29mX21hdGNoKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvYWhiLmMtNDQtXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9haGIuYz0xMzM2PXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGF0aDExa19haGJfZHJpdmVyID0ge1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvYWhiLmMtMTMzOC1cdFx0Lm5hbWUgPSBcJiMzNDthdGgxMWtcJiMzNDssXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2FoYi5jOjEzMzk6XHRcdC5vZl9tYXRjaF90YWJsZSA9IGF0aDExa19haGJfb2ZfbWF0Y2gsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2FoYi5jLTEzNDAtXHR9LFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNiAxNjoyMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5ODA1CgkJCQkJCQlvdXRwdXQ6IDQ0CgkJCQkJCQl0aG91Z2h0czogMTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgU3RyaW5nIENvbXBhdGliaWxpdHkqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGNvbXBhdGliaWxpdHkgaGVyZSwgc3BlY2lmaWNhbGx5IHJlbGF0aW5nIHRvIHN0cmluZ3MuIE15IGZpcnN0IHRob3VnaHQgaXMgdG8gcXVpY2tseSBldmFsdWF0ZSB0aGUgcmFuZ2Ugb2Ygc3VwcG9ydGVkIHN0cmluZyB0eXBlcyBvciBmb3JtYXRzLiBJIG5lZWQgdG8gYmUgZWZmaWNpZW50IGFuZCB6ZXJvIGluIG9uIHRoZSByZWxldmFudCBwYXJhbWV0ZXJzLCByYXRoZXIgdGhhbiBnZXR0aW5nIGJvZ2dlZCBkb3duIGluIHVubmVjZXNzYXJ5IGRldGFpbHMuIFRoZSBnb2FsIGhlcmUgaXMgdG8gZGV0ZXJtaW5lIHdoYXQgc3RyaW5nIHR5cGVzIHdpbGwgc2VhbWxlc3NseSBpbnRlZ3JhdGUgd2l0aCB0aGUgc3lzdGVtIGluIHF1ZXN0aW9uLiBJcyBpdCBVbmljb2RlLCBBU0NJSSwgVVRGLTgsIFVURi0xNj8gV2hhdCBhYm91dCBtb3JlIHNwZWNpYWxpemVkIGZvcm1hdHMsIG9yIGV2ZW4gbGVnYWN5IGVuY29kaW5ncyB0aGF0IHN0aWxsIG1pZ2h0IGJlIGluIHBsYXk/IEEgdGhvcm91Z2ggdW5kZXJzdGFuZGluZyBvZiB3aGF0JiMzOTtzIHN1cHBvcnRlZCBpcyB0aGUgZm91bmRhdGlvbiBvZiBhbnkgY29tcGF0aWJpbGl0eSBhbmFseXNpcy4gSSB3YW50IHRvIGJ1aWxkIGEgbWF0cml4LCBtYXliZTsgYSBtZW50YWwgb25lLCBvciBhIHF1aWNrIG9uZSBvbiBwYXBlciBpZiBuZWVkIGJlLCBiYXNlZCBvbiB3aGF0IHRoZSBzb3VyY2Ugc3VwcG9ydHMsIGFuZCBjb21wYXJlIGl0IHRvIHRoZSBjYXBhYmlsaXRpZXMgb2YgdGhlIGRlc3RpbmF0aW9uIGZvciBzb21lIGtpbmQgb2YgY3Jvc3MtY29tcGF0aWJpbGl0eS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTYgMTY6MjA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2FoYi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjQsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAyNDpcdHN0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIGF0aDExa19haGJfb2ZfbWF0Y2hbXSA9IHtcbiAgMjU6XHRcdC8qIFRPRE86IFNob3VsZCB3ZSBjaGFuZ2UgdGhlIGNvbXBhdGlibGUgc3RyaW5nIHRvIHNvbWV0aGluZyBzaW1pbGFyXG4gIDI2Olx0XHQgKiB0byBvbmUgdGhhdCBhdGgxMGsgdXNlcz9cbiAgMjc6XHRcdCAqL1xuICAyODpcdFx0eyAuY29tcGF0aWJsZSA9IFwmIzM0O3Fjb20saXBxODA3NC13aWZpXCYjMzQ7LFxuICAyOTpcdFx0ICAuZGF0YSA9ICh2b2lkICopQVRIMTFLX0hXX0lQUTgwNzQsXG4gIDMwOlx0XHR9LFxuICAzMTpcdFx0eyAuY29tcGF0aWJsZSA9IFwmIzM0O3Fjb20saXBxNjAxOC13aWZpXCYjMzQ7LFxuICAzMjpcdFx0ICAuZGF0YSA9ICh2b2lkICopQVRIMTFLX0hXX0lQUTYwMThfSFcxMCxcbiAgMzM6XHRcdH0sXG4gIDM0Olx0XHR7IC5jb21wYXRpYmxlID0gXCYjMzQ7cWNvbSx3Y242NzUwLXdpZmlcJiMzNDssXG4gIDM1Olx0XHQgIC5kYXRhID0gKHZvaWQgKilBVEgxMUtfSFdfV0NONjc1MF9IVzEwLFxuICAzNjpcdFx0fSxcbiAgMzc6XHRcdHsgLmNvbXBhdGlibGUgPSBcJiMzNDtxY29tLGlwcTUwMTgtd2lmaVwmIzM0OyxcbiAgMzg6XHRcdCAgLmRhdGEgPSAodm9pZCAqKUFUSDExS19IV19JUFE1MDE4X0hXMTAsXG4gIDM5Olx0XHR9LFxuICA0MDpcdFx0eyB9XG4gIDQxOlx0fTtcbiAgNDI6XHRcbiAgNDM6XHRNT0RVTEVfREVWSUNFX1RBQkxFKG9mLCBhdGgxMWtfYWhiX29mX21hdGNoKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTYgMTY6MjA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA0MjEKCQkJCQkJCW91dHB1dDogNDUKCQkJCQkJCXRob3VnaHRzOiA0OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipSZXNvdXJjZSBWZXJpZmljYXRpb24gZm9yIFBsYXRmb3JtIERldmljZSBJbml0aWFsaXphdGlvbioqCgpPa2F5LCBzbyBTeXprYWxsZXImIzM5O3MgdGVsbGluZyBtZSBpdCBjYW4gc3BpbiB1cCBhIHBsYXRmb3JtIGRldmljZSB1c2luZyB0aGVzZSBjb21wYXRpYmxlIHN0cmluZ3MuIFRoYXQmIzM5O3MgYSBnb29kIHN0YXJ0LCBidXQgSSBuZWVkIHRvIGRpZyBkZWVwZXIuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBkb2VzIHRoaXMgbmV3IGRldmljZSAqYWN0dWFsbHkqIGhhdmUgd2hhdCBpdCBuZWVkcyB0byBmdW5jdGlvbj8gVGhpbmdzIGxpa2UgSW50ZXJydXB0IFJlcXVlc3QgTGluZXMgKElSUXMpIGFuZCBtZW1vcnkgcmVnaW9ucyBhcmUgY3JpdGljYWwuIFRoZXkgYXJlIHRoZSBveHlnZW4gZm9yIHRoaXMgdGhpbmcuCgpMZXQmIzM5O3Mgbm90IGp1bXAgdG8gY29uY2x1c2lvbnMuIEkgbmVlZCB0byB2ZXJpZnkgaXRzIHJlc291cmNlIGFsbG9jYXRpb24uIExldCBtZSBjaGVjayB0aGUgYGF0aDExa19haGJfc2V0dXBfcmVzb3VyY2VzYCBmdW5jdGlvbi4gVGhhdCYjMzk7cyB3aGVyZSBpdCYjMzk7cyBhbGwgaGFuZGxlZC4gVGhhdCYjMzk7cyB3aGVyZSBJIHdpbGwgZmluZCBteSBhbnN3ZXJzLiBUaGF0IGlzIHRoZSBrZXkgZnVuY3Rpb24gdGhhdCBtYWtlcyB0aGlzIHdob2xlIHRoaW5nIHRpY2shCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE2IDE2OjIwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9haGIuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDk1MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgOTUwOlx0c3RhdGljIGludCBhdGgxMWtfYWhiX3NldHVwX21zYV9yZXNvdXJjZXMoc3RydWN0IGF0aDExa19iYXNlICphYilcbiA5NTE6XHR7XG4gOTUyOlx0XHRzdHJ1Y3QgYXRoMTFrX2FoYiAqYWJfYWhiID0gYXRoMTFrX2FoYl9wcml2KGFiKTtcbiA5NTM6XHRcdHN0cnVjdCBkZXZpY2UgKmRldiA9IGFiLVx1MDAzZWRldjtcbiA5NTQ6XHRcdHN0cnVjdCByZXNvdXJjZSByO1xuIDk1NTpcdFx0aW50IHJldDtcbiA5NTY6XHRcbiA5NTc6XHRcdHJldCA9IG9mX3Jlc2VydmVkX21lbV9yZWdpb25fdG9fcmVzb3VyY2UoZGV2LVx1MDAzZW9mX25vZGUsIDAsIFx1MDAyNnIpO1xuIDk1ODpcdFx0aWYgKHJldCkge1xuIDk1OTpcdFx0XHRkZXZfZXJyKGRldiwgXCYjMzQ7ZmFpbGVkIHRvIHJlc29sdmUgbXNhIGZpeGVkIHJlZ2lvblxcblwmIzM0Oyk7XG4gOTYwOlx0XHRcdHJldHVybiByZXQ7XG4gOTYxOlx0XHR9XG4gOTYyOlx0XG4gOTYzOlx0XHRhYl9haGItXHUwMDNlZncubXNhX3BhZGRyID0gci5zdGFydDtcbiA5NjQ6XHRcdGFiX2FoYi1cdTAwM2Vmdy5tc2Ffc2l6ZSA9IHJlc291cmNlX3NpemUoXHUwMDI2cik7XG4gOTY1Olx0XG4gOTY2Olx0XHRyZXQgPSBvZl9yZXNlcnZlZF9tZW1fcmVnaW9uX3RvX3Jlc291cmNlKGRldi1cdTAwM2VvZl9ub2RlLCAxLCBcdTAwMjZyKTtcbiA5Njc6XHRcdGlmIChyZXQpIHtcbiA5Njg6XHRcdFx0ZGV2X2VycihkZXYsIFwmIzM0O2ZhaWxlZCB0byByZXNvbHZlIGNlIGZpeGVkIHJlZ2lvblxcblwmIzM0Oyk7XG4gOTY5Olx0XHRcdHJldHVybiByZXQ7XG4gOTcwOlx0XHR9XG4gOTcxOlx0XG4gOTcyOlx0XHRhYl9haGItXHUwMDNlZncuY2VfcGFkZHIgPSByLnN0YXJ0O1xuIDk3MzpcdFx0YWJfYWhiLVx1MDAzZWZ3LmNlX3NpemUgPSByZXNvdXJjZV9zaXplKFx1MDAyNnIpO1xuIDk3NDpcdFxuIDk3NTpcdFx0cmV0dXJuIDA7XG4gOTc2Olx0fVxuIDk3NzpcdFxuIDk3ODpcdHN0YXRpYyBpbnQgYXRoMTFrX2FoYl9jZV9yZW1hcChzdHJ1Y3QgYXRoMTFrX2Jhc2UgKmFiKVxuIDk3OTpcdHtcbiA5ODA6XHRcdGNvbnN0IHN0cnVjdCBjZV9yZW1hcCAqY2VfcmVtYXAgPSBhYi1cdTAwM2Vod19wYXJhbXMuY2VfcmVtYXA7XG4gOTgxOlx0XHRzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2ID0gYWItXHUwMDNlcGRldjtcbiA5ODI6XHRcbiA5ODM6XHRcdGlmICghY2VfcmVtYXApIHtcbiA5ODQ6XHRcdFx0Lyogbm8gc2VwYXJhdGUgQ0UgcmVnaXN0ZXIgc3BhY2UgKi9cbiA5ODU6XHRcdFx0YWItXHUwMDNlbWVtX2NlID0gYWItXHUwMDNlbWVtO1xuIDk4NjpcdFx0XHRyZXR1cm4gMDtcbiA5ODc6XHRcdH1cbiA5ODg6XHRcbiA5ODk6XHRcdC8qIGNlIHJlZ2lzdGVyIHNwYWNlIGlzIG1vdmVkIG91dCBvZiB3Y3NzIHVubGlrZSBpcHE4MDc0IG9yIGlwcTYwMThcbiA5OTA6XHRcdCAqIGFuZCB0aGUgc3BhY2UgaXMgbm90IGNvbnRpZ3VvdXMsIGhlbmNlIHJlbWFwcGluZyB0aGUgQ0UgcmVnaXN0ZXJzXG4gOTkxOlx0XHQgKiB0byBhIG5ldyBzcGFjZSBmb3IgYWNjZXNzaW5nIHRoZW0uXG4gOTkyOlx0XHQgKi9cbiA5OTM6XHRcdGFiLVx1MDAzZW1lbV9jZSA9IGlvcmVtYXAoY2VfcmVtYXAtXHUwMDNlYmFzZSwgY2VfcmVtYXAtXHUwMDNlc2l6ZSk7XG4gOTk0Olx0XHRpZiAoIWFiLVx1MDAzZW1lbV9jZSkge1xuIDk5NTpcdFx0XHRkZXZfZXJyKFx1MDAyNnBkZXYtXHUwMDNlZGV2LCBcJiMzNDtjZSBpb3JlbWFwIGVycm9yXFxuXCYjMzQ7KTtcbiA5OTY6XHRcdFx0cmV0dXJuIC1FTk9NRU07XG4gOTk3Olx0XHR9XG4gOTk4Olx0XG4gOTk5Olx0XHRyZXR1cm4gMDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTYgMTY6MjA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE0ODIKCQkJCQkJCW91dHB1dDogNDQKCQkJCQkJCXRob3VnaHRzOiAyNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKk1pc3NpbmcgRnVuY3Rpb24gQ2FsbCBpbiBSZXZpZXcqKgoKT2theSwgaG9sZCBvbiBhIHNlY29uZC4gSSYjMzk7bSBsb29raW5nIG92ZXIgdGhpcyBjb2RlLCBzcGVjaWZpY2FsbHkgdGhpcyBzZWN0aW9uLCBhbmQgc29tZXRoaW5nJiMzOTtzIG5vdCBxdWl0ZSByaWdodC4gSSBleHBlY3RlZCB0byBzZWUgYSBjYWxsIHRvIGBhdGgxMWtfYWhiX3NldHVwX3Jlc291cmNlc2AgaW4gdGhpcyBjb250ZXh0LCBidXQgaXQmIzM5O3MgY29uc3BpY3VvdXNseSBhYnNlbnQuIEkmIzM5O20gYW4gZXhwZXJ0IGluIHRoaXMgYXJlYSwgc28gSSBrbm93IHdoZXJlIGl0IHNob3VsZCBiZSwgYW5kIHRoZSBmbG93IGp1c3QgZG9lc24mIzM5O3Qgc2VlbSBsb2dpY2FsIHdpdGhvdXQgaXQuIEkgbmVlZCB0byB0cmFjayBpdCBkb3duLiBXaGVyZSBpcyB0aGlzIGZ1bmN0aW9uIGFjdHVhbGx5IGJlaW5nIGNhbGxlZCBmcm9tPyBJJiMzOTtsbCBuZWVkIHRvIGdvIGh1bnRpbmcgZm9yIGl0IG5vdy4gVGltZSB0byBkaWcgZGVlcGVyIGludG8gdGhlIGNvZGViYXNlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNiAxNjoyMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDthdGgxMWtfYWhiX3NldHVwX3Jlc291cmNlcyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvYWhiLmM9OTE5PXN0YXRpYyB2b2lkIGF0aDExa19haGJfcmVsZWFzZV9zbXAycF9oYW5kbGUoc3RydWN0IGF0aDExa19iYXNlICphYilcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2FoYi5jLTkyOC1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvYWhiLmM6OTI5OnN0YXRpYyBpbnQgYXRoMTFrX2FoYl9zZXR1cF9yZXNvdXJjZXMoc3RydWN0IGF0aDExa19iYXNlICphYilcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvYWhiLmMtOTMwLXtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2FoYi5jPTExNDE9c3RhdGljIGludCBhdGgxMWtfYWhiX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9haGIuYy0xMTk1LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9haGIuYzoxMTk2Olx0cmV0ID0gYXRoMTFrX2FoYl9zZXR1cF9yZXNvdXJjZXMoYWIpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9haGIuYy0xMTk3LVx0aWYgKHJldClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTYgMTY6MjA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE5OTgKCQkJCQkJCW91dHB1dDogNDUKCQkJCQkJCXRob3VnaHRzOiAxNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSB3ZSBnby4uLgoKKipEZWx2aW5nIGludG8gYGF0aDExa19haGJfc2V0dXBfcmVzb3VyY2VzYCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgYGF0aDExa19haGJfc2V0dXBfcmVzb3VyY2VzYCBmdW5jdGlvbi4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHVuZGVyc3RhbmQgaXRzIHB1cnBvc2Ugd2l0aGluIHRoZSBicm9hZGVyIGBhdGgxMWtgIGZyYW1ld29yaywgc3BlY2lmaWNhbGx5IGhvdyBpdCByZWxhdGVzIHRvIHRoZSBBSEIgYnVzIGFuZCByZXNvdXJjZSBhbGxvY2F0aW9uLiBHaXZlbiB0aGUgbmFtZSwgSSYjMzk7bSBleHBlY3RpbmcgaXQgdG8gaGFuZGxlIHRoZSBpbml0aWFsaXphdGlvbiBhbmQgY29uZmlndXJhdGlvbiBvZiBoYXJkd2FyZSByZXNvdXJjZXMgbmVlZGVkIGJ5IHRoZSBkcml2ZXIgb24gYW4gQUhCLWNvbm5lY3RlZCBkZXZpY2UuCgpJIGltbWVkaWF0ZWx5IHdhbnQgdG8gcGlucG9pbnQgd2hhdCBleGFjdGx5ICYjMzQ7cmVzb3VyY2VzJiMzNDsgZW5jb21wYXNzIGhlcmUuIEFyZSB3ZSB0YWxraW5nIGFib3V0IERNQSBjaGFubmVscz8gTWVtb3J5IHJlZ2lvbnM/IEludGVycnVwdCBsaW5lcz8gT3IgcGVyaGFwcyBhIGNvbWJpbmF0aW9uIG9mIHRoZXNlIGFuZCBvdGhlciBIVy1zcGVjaWZpYyBjb25maWd1cmF0aW9ucz8gSSYjMzk7bGwgbmVlZCB0byBjYXJlZnVsbHkgZXhhbWluZSB0aGUgY29kZSB0byBzZWUgaG93IHRoZXNlIHJlc291cmNlcyBhcmUgaWRlbnRpZmllZCwgcmVxdWVzdGVkLCBhbmQsIGNydWNpYWxseSwgcHJvdGVjdGVkIGZyb20gY29uZmxpY3RzLgoKVGhlIEFIQiBidXMgaXRzZWxmIGlzIGEga2V5IHBpZWNlIG9mIHRoaXMgcHV6emxlLiBIb3cgZG9lcyB0aGUgY29kZSBpbnRlcmFjdCB3aXRoIHRoZSBBSEIgYnJpZGdlPyBJcyB0aGVyZSBhbnkgc3BlY2lmaWMgYnVzIGNsb2NrIGNvbmZpZ3VyYXRpb24gaW52b2x2ZWQsIGFuZCBpZiBzbywgaG93IGlzIGl0IGhhbmRsZWQ/IEFyZSB0aGVyZSBhbnkgcG93ZXItbWFuYWdlbWVudCBjb25zaWRlcmF0aW9ucyBpbiB0aGlzIHNldHVwLCBvciBpcyBpdCBhc3N1bWVkIHRoZSBBSEIgaXMgYWxyZWFkeSBwb3dlcmVkIHVwIGFuZCByZWFkeT8KCkkmIzM5O20gcGFydGljdWxhcmx5IGludGVyZXN0ZWQgaW4gaG93IHRoZSBmdW5jdGlvbiBoYW5kbGVzIHBvdGVudGlhbCBlcnJvcnMuIFdoYXQgYXJlIHRoZSBlcnJvciBwYXRocywgYW5kIHdoYXQga2luZCBvZiByZWNvdmVyeSBvciBjbGVhbnVwIG1lY2hhbmlzbXMgYXJlIGluIHBsYWNlPyBHb29kIHJlc291cmNlIG1hbmFnZW1lbnQgaXMgY3JpdGljYWwsIGFuZCBhIHJvYnVzdCBpbXBsZW1lbnRhdGlvbiBzaG91bGQgaGF2ZSBncmFjZWZ1bCBlcnJvciBoYW5kbGluZy4gQWxzbywgd2hhdCBkb2VzIHRoZSByZXR1cm4gdmFsdWUgc2lnbmFsIHRvIHRoZSBjYWxsZXIgYW5kIHdoeT8KCkZpbmFsbHksIEkmIzM5O2xsIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIGRhdGEgc3RydWN0dXJlcyBpbnZvbHZlZCwgZXNwZWNpYWxseSBhbnkgY3VzdG9tIHN0cnVjdHVyZXMgb3IgZW51bXMgdGhhdCBhcmUgc3BlY2lmaWMgdG8gdGhlIEFIQiBpbnRlcmZhY2UuIEkmIzM5O20gbG9va2luZyBmb3IgY2xlYXIsIGNvbmNpc2UgZGVmaW5pdGlvbnMgdGhhdCBoZWxwIG1lIHVuZGVyc3RhbmQgdGhlIGZsb3cgb2YgZGF0YSBhbmQgY29udHJvbC4gTGV0JiMzOTtzIHNlZSBpZiB0aGlzIGZ1bmN0aW9uIGxpdmVzIHVwIHRvIG15IGV4cGVjdGF0aW9ucyEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTYgMTY6MjA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2FoYi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogOTI5LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA5Mjk6XHRzdGF0aWMgaW50IGF0aDExa19haGJfc2V0dXBfcmVzb3VyY2VzKHN0cnVjdCBhdGgxMWtfYmFzZSAqYWIpXG4gOTMwOlx0e1xuIDkzMTpcdFx0c3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiA9IGFiLVx1MDAzZXBkZXY7XG4gOTMyOlx0XHRzdHJ1Y3QgcmVzb3VyY2UgKm1lbV9yZXM7XG4gOTMzOlx0XHR2b2lkIF9faW9tZW0gKm1lbTtcbiA5MzQ6XHRcbiA5MzU6XHRcdGlmIChhYi1cdTAwM2Vod19wYXJhbXMuaHlicmlkX2J1c190eXBlKVxuIDkzNjpcdFx0XHRyZXR1cm4gYXRoMTFrX2FoYl9zZXR1cF9tc2lfcmVzb3VyY2VzKGFiKTtcbiA5Mzc6XHRcbiA5Mzg6XHRcdG1lbSA9IGRldm1fcGxhdGZvcm1fZ2V0X2FuZF9pb3JlbWFwX3Jlc291cmNlKHBkZXYsIDAsIFx1MDAyNm1lbV9yZXMpO1xuIDkzOTpcdFx0aWYgKElTX0VSUihtZW0pKSB7XG4gOTQwOlx0XHRcdGRldl9lcnIoXHUwMDI2cGRldi1cdTAwM2VkZXYsIFwmIzM0O2lvcmVtYXAgZXJyb3JcXG5cJiMzNDspO1xuIDk0MTpcdFx0XHRyZXR1cm4gUFRSX0VSUihtZW0pO1xuIDk0MjpcdFx0fVxuIDk0MzpcdFxuIDk0NDpcdFx0YWItXHUwMDNlbWVtID0gbWVtO1xuIDk0NTpcdFx0YWItXHUwMDNlbWVtX2xlbiA9IHJlc291cmNlX3NpemUobWVtX3Jlcyk7XG4gOTQ2Olx0XG4gOTQ3Olx0XHRyZXR1cm4gMDtcbiA5NDg6XHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE2IDE2OjIwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyNzU2CgkJCQkJCQlvdXRwdXQ6IDQ5CgkJCQkJCQl0aG91Z2h0czogMzcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czoKCioqQW5hbHl6aW5nIHRoZSBSZXNvdXJjZSBEZXBlbmRlbmN5KioKCkFscmlnaHQsIHNvIHRoZSBjb3JlIG9mIHRoaXMgc2VlbXMgdG8gYmUgYSBtZW1vcnkgcmVzb3VyY2UgZGVwZW5kZW5jeS4gTm8gcHJvYmxlbSwgU3l6a2FsbGVyIGNhbiBkZWZpbml0ZWx5IGhlbHAgdGhlcmUg4oCTIGl0JiMzOTtzIGRlc2lnbmVkIHRvIG1hbmFnZSBhbmQgZXhwb3NlIHRob3NlIGtpbmRzIG9mIHJlc291cmNlcyBkdXJpbmcgZnV6emluZy4gQnV0LCB0aGF0IGBhdGgxMWtfYWhiX3NldHVwX3NtcDJwX2hhbmRsZWAgZnVuY3Rpb24uLi4gdGhhdCYjMzk7cyB0aGUgaW50ZXJlc3RpbmcgcG9pbnQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyByb2xlIHdpdGhpbiB0aGlzIGNvbnRleHQsIGl0cyBwdXJwb3NlLCBhbmQgd2hldGhlciBpdCBpbnRyb2R1Y2VzIGFueSBzcGVjaWZpYyBjb21wbGV4aXRpZXMgb3IgdnVsbmVyYWJpbGl0aWVzIEkgbmVlZCB0byBjb25zaWRlciB3aGVuIGRlc2lnbmluZyBhIGZ1enppbmcgY2FtcGFpZ24gb3IgZXhwbG9pdC4gSXQmIzM5O3MgdGhlIGtleSB0byB0aGUgc29sdXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE2IDE2OjIwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2F0aDExa19haGJfc2V0dXBfc21wMnBfaGFuZGxlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9haGIuYz04NTE9c3RhdGljIGludCBhdGgxMWtfYWhiX3NldHVwX21zaV9yZXNvdXJjZXMoc3RydWN0IGF0aDExa19iYXNlICphYilcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2FoYi5jLTkwMC1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvYWhiLmM6OTAxOnN0YXRpYyBpbnQgYXRoMTFrX2FoYl9zZXR1cF9zbXAycF9oYW5kbGUoc3RydWN0IGF0aDExa19iYXNlICphYilcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvYWhiLmMtOTAyLXtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2FoYi5jPTExNDE9c3RhdGljIGludCBhdGgxMWtfYWhiX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9haGIuYy0xMjA3LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9haGIuYzoxMjA4Olx0cmV0ID0gYXRoMTFrX2FoYl9zZXR1cF9zbXAycF9oYW5kbGUoYWIpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9haGIuYy0xMjA5LVx0aWYgKHJldClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTYgMTY6MjA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTMyODcKCQkJCQkJCW91dHB1dDogNDUKCQkJCQkJCXRob3VnaHRzOiAyMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIGBhdGgxMWtfYWhiX3NldHVwX3NtcDJwX2hhbmRsZWAgZnVuY3Rpb24uIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byB1bmRlcnN0YW5kIGl0cyBwdXJwb3NlIHdpdGhpbiB0aGUgYnJvYWRlciBhdGgxMWsgZHJpdmVyIGZyYW1ld29yaywgcGFydGljdWxhcmx5IGNvbmNlcm5pbmcgdGhlIGludGVyYWN0aW9uIG9mIHRoZSBBSEIgYnVzIGFuZCBwb3RlbnRpYWxseSBTaW11bHRhbmVvdXMgTXVsdGktUGF0aCAoU01QKSBvciBQb2ludC10by1Qb2ludCAoUDJQKSBjb21tdW5pY2F0aW9uLCBhcyBzdWdnZXN0ZWQgYnkgdGhlIG5hbWUuIEkgaW1tZWRpYXRlbHkgd2FudCB0byBncmFzcCB0aGUgbGV2ZWwgb2YgdGhpcyBmdW5jdGlvbiB3aXRoaW4gdGhlIGRyaXZlciYjMzk7cyBjYWxsIHN0cnVjdHVyZS4gSXMgaXQgY2FsbGVkIGR1cmluZyBpbml0aWFsaXphdGlvbiwgZHVyaW5nIGRldmljZSBwcm9iaW5nLCBvciBpbiByZXNwb25zZSB0byBzb21lIHNwZWNpZmljIGV2ZW50PwoKSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgY2x1ZXMgYWJvdXQgdGhlIGhhcmR3YXJlIGl04oCZcyB0YXJnZXRpbmcuIElzIHRoaXMgc3BlY2lmaWMgdG8gYSBjZXJ0YWluIFFDQSBjaGlwc2V0IG9yIGEgcGFydGljdWxhciBQSFk/IFVuZGVyc3RhbmRpbmcgdGhlIHRhcmdldCBoYXJkd2FyZSB3aWxsIGluZm9ybSBteSBleHBlY3RhdGlvbnMgYWJvdXQgd2hhdCByZWdpc3RlcnMgYXJlIGJlaW5nIG1hbmlwdWxhdGVkLCB3aGF0IG1lbW9yeSBpcyBiZWluZyBhbGxvY2F0ZWQsIGFuZCB3aGF0IGludGVycnVwdCBzb3VyY2VzIGFyZSBiZWluZyBlbmFibGVkLgoKSSYjMzk7bSBhbHNvIGN1cmlvdXMgYWJvdXQgdGhlIGNvbmN1cnJlbmN5IGFzcGVjdHMuIFRoZSBtZW50aW9uIG9mIFNNUCBtaWdodCBpbXBseSBtdWx0aS10aHJlYWRpbmcgYW5kIGxvY2tpbmcgaXNzdWVzLiBJ4oCZbGwgYmUgb24gdGhlIGxvb2tvdXQgZm9yIGFueSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlcyB1c2VkLCBzdWNoIGFzIG11dGV4ZXMgb3Igc3BpbmxvY2tzLCBhbmQgaG93IHRoZXkgcmVsYXRlIHRvIHRoZSBBSEIgY29tbXVuaWNhdGlvbiBwcm9jZXNzIHRvIGVuc3VyZSBkYXRhIGludGVncml0eS4gV2hhdCBzYWZlZ3VhcmRzIGFyZSBlbXBsb3llZCB0byBlbnN1cmUgdGhlcmUgYXJlIG5vIHJhY2UgY29uZGl0aW9ucyBvciBkZWFkbG9ja3M/CgpUaGVuLCB0aGUgUDJQIHBhcnQ6IEkgd2FudCB0byBkZXRlcm1pbmUgaWYgdGhpcyBmdW5jdGlvbiBpcyByZWxhdGVkIHRvIGRpcmVjdCBsaW5rIGVzdGFibGlzaG1lbnQsIG9yIGlmIGl0IGhhcyB0byBkbyB3aXRoIHNvbWUgaGlnaGVyLWxldmVsIGNvbm5lY3Rpb24gbWFuYWdlbWVudCBwcm90b2NvbHMuIElzIGl0IHNldHRpbmcgdXAgaGFyZHdhcmUgZW5kcG9pbnRzIGZvciBkaXJlY3QgZGF0YSB0cmFuc2ZlciBvciBwcm92aWRpbmcgc29tZSBraW5kIG9mIGhhcmR3YXJlIG9mZmxvYWQ/IEkgZXhwZWN0IGEgY2VydGFpbiBsZXZlbCBvZiByZWdpc3RlciB3cmFuZ2xpbmcsIGNsb2NrIGNvbmZpZ3VyYXRpb24sIGFuZCBwb3NzaWJseSBETUEgc2V0dXAgaW4gdGhlIGZ1bmN0aW9uJiMzOTtzIGJvZHkuIEkgYW0gYWxzbyBzZWFyY2hpbmcgZm9yIHRoZSBlcnJvci1oYW5kbGluZyBtZWNoYW5pc21zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNiAxNjoyMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvYWhiLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA5MDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDkwMTpcdHN0YXRpYyBpbnQgYXRoMTFrX2FoYl9zZXR1cF9zbXAycF9oYW5kbGUoc3RydWN0IGF0aDExa19iYXNlICphYilcbiA5MDI6XHR7XG4gOTAzOlx0XHRzdHJ1Y3QgYXRoMTFrX2FoYiAqYWJfYWhiID0gYXRoMTFrX2FoYl9wcml2KGFiKTtcbiA5MDQ6XHRcbiA5MDU6XHRcdGlmICghYWItXHUwMDNlaHdfcGFyYW1zLnNtcDJwX3dvd19leGl0KVxuIDkwNjpcdFx0XHRyZXR1cm4gMDtcbiA5MDc6XHRcbiA5MDg6XHRcdGFiX2FoYi1cdTAwM2VzbXAycF9pbmZvLnNtZW1fc3RhdGUgPSBxY29tX3NtZW1fc3RhdGVfZ2V0KGFiLVx1MDAzZWRldiwgXCYjMzQ7d2xhbi1zbXAycC1vdXRcJiMzNDssXG4gOTA5Olx0XHRcdFx0XHRcdFx0XHQgICAgXHUwMDI2YWJfYWhiLVx1MDAzZXNtcDJwX2luZm8uc21lbV9iaXQpO1xuIDkxMDpcdFx0aWYgKElTX0VSUihhYl9haGItXHUwMDNlc21wMnBfaW5mby5zbWVtX3N0YXRlKSkge1xuIDkxMTpcdFx0XHRhdGgxMWtfZXJyKGFiLCBcJiMzNDtmYWlsZWQgdG8gZmV0Y2ggc21lbSBzdGF0ZTogJWxkXFxuXCYjMzQ7LFxuIDkxMjpcdFx0XHRcdCAgIFBUUl9FUlIoYWJfYWhiLVx1MDAzZXNtcDJwX2luZm8uc21lbV9zdGF0ZSkpO1xuIDkxMzpcdFx0XHRyZXR1cm4gUFRSX0VSUihhYl9haGItXHUwMDNlc21wMnBfaW5mby5zbWVtX3N0YXRlKTtcbiA5MTQ6XHRcdH1cbiA5MTU6XHRcbiA5MTY6XHRcdHJldHVybiAwO1xuIDkxNzpcdH1cbiA5MTg6XHRcbiA5MTk6XHRzdGF0aWMgdm9pZCBhdGgxMWtfYWhiX3JlbGVhc2Vfc21wMnBfaGFuZGxlKHN0cnVjdCBhdGgxMWtfYmFzZSAqYWIpXG4gOTIwOlx0e1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNiAxNjoyMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDExNwoJCQkJCQkJb3V0cHV0OiA0NgoJCQkJCQkJdGhvdWdodHM6IDQzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoaXMgbG9naWMsIHBocmFzZWQgYXMgaWYgaXQgd2VyZSBteSBvd24gdGhvdWdodCBwcm9jZXNzLCBnaXZlbiBteSBleHBlcnRpc2U6CgoqKkNoZWNraW5nIGEgV293IEV4aXQgQ29uZGl0aW9uIGluIElQUTgwNzQgSGFyZHdhcmUqKgoKQWxyaWdodCwgc28gdGhlIGNvZGUgaXMgY2hlY2tpbmcgYSBjb25kaXRpb24uIFNwZWNpZmljYWxseSwgaXQgc2VlbXMgbGlrZSBhIGZ1bmN0aW9uIG9yIGJsb2NrIG9mIGNvZGUgaXMgZGVzaWduZWQgdG8gZGV0ZXJtaW5lIGlmIHNvbWUgYWN0aW9uLCBsaWtlbHkgcmVsYXRlZCB0byAmIzM0O3dha2Utb24td2lyZWxlc3MmIzM0OyBvciBzaW1pbGFyLCBzaG91bGQgZXhpdCBlYXJseS4gVGhlIGNvcmUgb2YgdGhpcyBkZWNpc2lvbiBoaW5nZXMgb24gdGhlIHN0YXRlIG9mIGBhYi0mZ3Q7aHdfcGFyYW1zLnNtcDJwX3dvd19leGl0YC4gSWYgdGhhdCBmbGFnIGlzIGZhbHNlLCBtZWFuaW5nIHRoZSAmIzM0O3NtcDJwX3dvd19leGl0JiMzNDsgY29uZGl0aW9uIGlzbiYjMzk7dCBtZXQgb3IgZW5hYmxlZCwgdGhlIGNvZGUgaW1tZWRpYXRlbHkgcmV0dXJucyBhIHplcm8gdmFsdWUuIFRoaXMgc3VnZ2VzdHMgYSBwb3RlbnRpYWwgZWFybHkgZXhpdCBwYXRoLCBsaWtlbHkgc2lnbmFsaW5nIHRoYXQgd2hhdGV2ZXIgcHJvY2VzcyBpdCYjMzk7cyBpbnZvbHZlZCBpbiBzaG91bGQgY2Vhc2Ugb3IgcmVwb3J0IGEgc3VjY2Vzc2Z1bCwgYWxiZWl0IHBvdGVudGlhbGx5IGluY29tcGxldGUsIHJlc3VsdC4KClRoZSBuZXh0IGNyaXRpY2FsIHN0ZXAgd291bGQgYmUgdG8gcmV2aWV3IGBod19wYXJhbXNgIHNwZWNpZmljYWxseSBmb3IgSVBRODA3NCwgYXMgdGhpcyBwcm92aWRlcyB0aGUgY3J1Y2lhbCBjb250ZXh0IGFib3V0IHRoZSBoYXJkd2FyZSBwbGF0Zm9ybSBpbiB3aGljaCB0aGlzIGBzbXAycF93b3dfZXhpdGAgaXMgYmVpbmcgZXZhbHVhdGVkLiBJJiMzOTtsbCBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBgaHdfcGFyYW1zYCBzdG9yZXMgZm9yIHRoYXQgcGFydGljdWxhciBjaGlwLCBzaW5jZSBgc21wMnBfd293X2V4aXRgIGlzIGRpcmVjdGx5IGluZmx1ZW5jZWQgYnkgaXQuIEkga25vdyBJIHdpbGwgbmVlZCB0byBsb29rIHNwZWNpZmljYWxseSBmb3IgZGV0YWlscyByZWxhdGVkIHRvIHBvd2VyIG1hbmFnZW1lbnQsIHdha2Utb24td2lyZWxlc3MgY2FwYWJpbGl0aWVzLCBhbmQgYW55IHJlbGV2YW50IGhhcmR3YXJlIGNvbnN0cmFpbnRzIG9uIHRoZSBJUFE4MDc0LiBUaGUgZ29hbCBpcyB0byBmaWd1cmUgb3V0IHRoZSBleGFjdCBtZWFuaW5nIG9mIHRoYXQgZmxhZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTYgMTY6MjA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7QVRIMTFLX0hXX0lQUTgwNzQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2FoYi5jPTI0PXN0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIGF0aDExa19haGJfb2ZfbWF0Y2hbXSA9IHtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2FoYi5jLTI4LVx0eyAuY29tcGF0aWJsZSA9IFwmIzM0O3Fjb20saXBxODA3NC13aWZpXCYjMzQ7LFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9haGIuYzoyOTpcdCAgLmRhdGEgPSAodm9pZCAqKUFUSDExS19IV19JUFE4MDc0LFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9haGIuYy0zMC1cdH0sXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9haGIuYz0xMTQxPXN0YXRpYyBpbnQgYXRoMTFrX2FoYl9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvYWhiLmMtMTE1MS1cdHN3aXRjaCAoaHdfcmV2KSB7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2FoYi5jOjExNTI6XHRjYXNlIEFUSDExS19IV19JUFE4MDc0OlxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9haGIuYy0xMTUzLVx0Y2FzZSBBVEgxMUtfSFdfSVBRNjAxOF9IVzEwOlxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvY29yZS5jPTQxPXN0YXRpYyBjb25zdCBzdHJ1Y3QgYXRoMTFrX2h3X3BhcmFtcyBhdGgxMWtfaHdfcGFyYW1zW10gPSB7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2NvcmUuYy00Mi1cdHtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvY29yZS5jOjQzOlx0XHQuaHdfcmV2ID0gQVRIMTFLX0hXX0lQUTgwNzQsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2NvcmUuYy00NC1cdFx0Lm5hbWUgPSBcJiMzNDtpcHE4MDc0IGh3Mi4wXCYjMzQ7LFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvY29yZS5oPTE0NT1lbnVtIGF0aDExa19od19yZXYge1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9jb3JlLmg6MTQ2Olx0QVRIMTFLX0hXX0lQUTgwNzQsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2NvcmUuaC0xNDctXHRBVEgxMUtfSFdfUUNBNjM5MF9IVzIwLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNiAxNjoyMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTEwOQoJCQkJCQkJb3V0cHV0OiA0NAoJCQkJCQkJdGhvdWdodHM6IDIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgZmlyc3QtcGVyc29uIHN1bW1hcnksIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFzIHJlcXVlc3RlZDoKCioqRGl2aW5nIGludG8gYXRoMTFrX2h3X3BhcmFtcyBpbiBjb3JlLmMqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGhhcmR3YXJlIHBhcmFtZXRlcnMgYXJlIGJlaW5nIHNldCBmb3IgdGhlIGF0aDExayBkcml2ZXIuIFNwZWNpZmljYWxseSwgSSYjMzk7bSBnb2luZyB0byBkaWcgaW50byB0aGUgYGF0aDExa19od19wYXJhbXNgIGZ1bmN0aW9uIGxvY2F0ZWQgaW4gYGNvcmUuY2AuIEkgZXhwZWN0IHRoaXMgZnVuY3Rpb24gaG9sZHMgdGhlIGtleSB0byBjb25maWd1cmluZyB0aGUgaGFyZHdhcmUmIzM5O3MgUkYgYW5kIGJhc2ViYW5kIHNldHRpbmdzLiBJJiMzOTttIGdvaW5nIHRvIGJlIGxvb2tpbmcgZm9yIHdoZXJlIHRoZSByZWd1bGF0b3J5IGRvbWFpbiBpbmZvcm1hdGlvbiBpcyBhcHBsaWVkLCBhbmQgaG93IHRoZSBkcml2ZXIgaW50ZXJhY3RzIHdpdGggdGhlIGZpcm13YXJlIHRvIG9wdGltaXplIHRoZSBQSFkmIzM5O3MgYmVoYXZpb3IuIEkgYW50aWNpcGF0ZSBzZWVpbmcgdGhlIGFsbG9jYXRpb24gb2YgcmVzb3VyY2VzIGZvciBkaWZmZXJlbnQgcmFkaW8gY2hhaW5zIGFuZCB0aGUgc2V0dGluZ3MgZm9yIHRoZSB2YXJpb3VzIG1vZGVzIHdlIHN1cHBvcnQgKDgwMi4xMWF4LCBldGMuKS4gSSBuZWVkIHRvIHNlZSBob3cgdGhleSYjMzk7cmUgaGFuZGxpbmcgY2FsaWJyYXRpb24gYW5kIGR5bmFtaWMgYWRqdXN0bWVudHMgYmFzZWQgb24gY2hhbm5lbCBhbmQgZW52aXJvbm1lbnQuIFRoaXMgaXMgd2hlcmUgdGhlIGNvcmUgb2YgcGVyZm9ybWFuY2UgYW5kIGNvbXBsaWFuY2UgbGl2ZXMsIHNvIHVuZGVyc3RhbmRpbmcgdGhpcyBmdW5jdGlvbiBpcyBnb2luZyB0byBiZSBjcml0aWNhbCB0byB1bmRlcnN0YW5kaW5nIGFueSB0aHJvdWdocHV0IGxpbWl0YXRpb25zIEkmIzM5O20gc2VlaW5nLiBJJiMzOTttIGFsc28gaW50ZXJlc3RlZCBpbiBhbnkgcG90ZW50aWFsIHBvd2VyLXNhdmluZyBmZWF0dXJlcyB0aGF0IGFyZSBiZWluZyBzZXQgaGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTYgMTY6MjE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2NvcmUuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDQxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDQxOlx0c3RhdGljIGNvbnN0IHN0cnVjdCBhdGgxMWtfaHdfcGFyYW1zIGF0aDExa19od19wYXJhbXNbXSA9IHtcbiAgNDI6XHRcdHtcbiAgNDM6XHRcdFx0Lmh3X3JldiA9IEFUSDExS19IV19JUFE4MDc0LFxuICA0NDpcdFx0XHQubmFtZSA9IFwmIzM0O2lwcTgwNzQgaHcyLjBcJiMzNDssXG4gIDQ1Olx0XHRcdC5mdyA9IHtcbiAgNDY6XHRcdFx0XHQuZGlyID0gXCYjMzQ7SVBRODA3NC9odzIuMFwmIzM0OyxcbiAgNDc6XHRcdFx0XHQuYm9hcmRfc2l6ZSA9IDI1NiAqIDEwMjQsXG4gIDQ4Olx0XHRcdFx0LmNhbF9vZmZzZXQgPSAxMjggKiAxMDI0LFxuICA0OTpcdFx0XHR9LFxuICA1MDpcdFx0XHQubWF4X3JhZGlvcyA9IDMsXG4gIDUxOlx0XHRcdC5iZGZfYWRkciA9IDB4NEIwQzAwMDAsXG4gIDUyOlx0XHRcdC5od19vcHMgPSBcdTAwMjZpcHE4MDc0X29wcyxcbiAgNTM6XHRcdFx0LnJpbmdfbWFzayA9IFx1MDAyNmF0aDExa19od19yaW5nX21hc2tfaXBxODA3NCxcbiAgNTQ6XHRcdFx0LmludGVybmFsX3NsZWVwX2Nsb2NrID0gZmFsc2UsXG4gIDU1Olx0XHRcdC5yZWdzID0gXHUwMDI2aXBxODA3NF9yZWdzLFxuICA1NjpcdFx0XHQucW1pX3NlcnZpY2VfaW5zX2lkID0gQVRIMTFLX1FNSV9XTEZXX1NFUlZJQ0VfSU5TX0lEX1YwMV9JUFE4MDc0LFxuICA1NzpcdFx0XHQuaG9zdF9jZV9jb25maWcgPSBhdGgxMWtfaG9zdF9jZV9jb25maWdfaXBxODA3NCxcbiAgNTg6XHRcdFx0LmNlX2NvdW50ID0gMTIsXG4gIDU5Olx0XHRcdC50YXJnZXRfY2VfY29uZmlnID0gYXRoMTFrX3RhcmdldF9jZV9jb25maWdfd2xhbl9pcHE4MDc0LFxuICA2MDpcdFx0XHQudGFyZ2V0X2NlX2NvdW50ID0gMTEsXG4gIDYxOlx0XHRcdC5zdmNfdG9fY2VfbWFwID0gYXRoMTFrX3RhcmdldF9zZXJ2aWNlX3RvX2NlX21hcF93bGFuX2lwcTgwNzQsXG4gIDYyOlx0XHRcdC5zdmNfdG9fY2VfbWFwX2xlbiA9IDIxLFxuICA2MzpcdFx0XHQuY2VfaWVfYWRkciA9IFx1MDAyNmF0aDExa19jZV9pZV9hZGRyX2lwcTgwNzQsXG4gIDY0Olx0XHRcdC5zaW5nbGVfcGRldl9vbmx5ID0gZmFsc2UsXG4gIDY1Olx0XHRcdC5yeGRtYTFfZW5hYmxlID0gdHJ1ZSxcbiAgNjY6XHRcdFx0Lm51bV9yeGRtYV9wZXJfcGRldiA9IDEsXG4gIDY3Olx0XHRcdC5yeF9tYWNfYnVmX3JpbmcgPSBmYWxzZSxcbiAgNjg6XHRcdFx0LnZkZXZfc3RhcnRfZGVsYXkgPSBmYWxzZSxcbiAgNjk6XHRcdFx0Lmh0dF9wZWVyX21hcF92MiA9IHRydWUsXG4gIDcwOlx0XG4gIDcxOlx0XHRcdC5zcGVjdHJhbCA9IHtcbiAgNzI6XHRcdFx0XHQuZmZ0X3N6ID0gMixcbiAgNzM6XHRcdFx0XHQvKiBIVyBidWcsIGV4cGVjdGVkIEJJTiBzaXplIGlzIDIgYnl0ZXMgYnV0IEhXIHJlcG9ydCBhcyA0IGJ5dGVzLlxuICA3NDpcdFx0XHRcdCAqIHNvIGFkZGVkIHBhZCBzaXplIGFzIDIgYnl0ZXMgdG8gY29tcGVuc2F0ZSB0aGUgQklOIHNpemVcbiAgNzU6XHRcdFx0XHQgKi9cbiAgNzY6XHRcdFx0XHQuZmZ0X3BhZF9zeiA9IDIsXG4gIDc3Olx0XHRcdFx0LnN1bW1hcnlfcGFkX3N6ID0gMCxcbiAgNzg6XHRcdFx0XHQuZmZ0X2hkcl9sZW4gPSAxNixcbiAgNzk6XHRcdFx0XHQubWF4X2ZmdF9iaW5zID0gNTEyLFxuICA4MDpcdFx0XHRcdC5mcmFnbWVudF8xNjBtaHogPSB0cnVlLFxuICA4MTpcdFx0XHR9LFxuICA4MjpcdFxuICA4MzpcdFx0XHQuaW50ZXJmYWNlX21vZGVzID0gQklUKE5MODAyMTFfSUZUWVBFX1NUQVRJT04pIHxcbiAgODQ6XHRcdFx0XHRcdFx0QklUKE5MODAyMTFfSUZUWVBFX0FQKSB8XG4gIDg1Olx0XHRcdFx0XHRcdEJJVChOTDgwMjExX0lGVFlQRV9NRVNIX1BPSU5UKSxcbiAgODY6XHRcdFx0LnN1cHBvcnRzX21vbml0b3IgPSB0cnVlLFxuICA4NzpcdFx0XHQuZnVsbF9tb25pdG9yX21vZGUgPSBmYWxzZSxcbiAgODg6XHRcdFx0LnN1cHBvcnRzX3NoYWRvd19yZWdzID0gZmFsc2UsXG4gIDg5Olx0XHRcdC5pZGxlX3BzID0gZmFsc2UsXG4gIDkwOlx0XHRcdC5zdXBwb3J0c19zdGFfcHMgPSBmYWxzZSxcbiAgOTE6XHRcdFx0LmNvbGRib290X2NhbF9tbSA9IHRydWUsXG4gIDkyOlx0XHRcdC5jb2xkYm9vdF9jYWxfZnRtID0gdHJ1ZSxcbiAgOTM6XHRcdFx0LmNiY2FsX3Jlc3RhcnRfZncgPSB0cnVlLFxuICA5NDpcdFx0XHQuZndfbWVtX21vZGUgPSAwLFxuICA5NTpcdFx0XHQubnVtX3ZkZXZzID0gMTYgJiM0MzsgMSxcbiAgOTY6XHRcdFx0Lm51bV9wZWVycyA9IDUxMixcbiAgOTc6XHRcdFx0LnN1cHBvcnRzX3N1c3BlbmQgPSBmYWxzZSxcbiAgOTg6XHRcdFx0LmhhbF9kZXNjX3N6ID0gc2l6ZW9mKHN0cnVjdCBoYWxfcnhfZGVzY19pcHE4MDc0KSxcbiAgOTk6XHRcdFx0LnN1cHBvcnRzX3JlZ2RiID0gZmFsc2UsXG4gMTAwOlx0XHRcdC5maXhfbDFzcyA9IHRydWUsXG4gMTAxOlx0XHRcdC5jcmVkaXRfZmxvdyA9IGZhbHNlLFxuIDEwMjpcdFx0XHQuaGFsX3BhcmFtcyA9IFx1MDAyNmF0aDExa19od19oYWxfcGFyYW1zX2lwcTgwNzQsXG4gMTAzOlx0XHRcdC5zdXBwb3J0c19keW5hbWljX3NtcHNfNmdoeiA9IGZhbHNlLFxuIDEwNDpcdFx0XHQuYWxsb2NfY2FjaGVhYmxlX21lbW9yeSA9IHRydWUsXG4gMTA1Olx0XHRcdC5zdXBwb3J0c19yc3NpX3N0YXRzID0gZmFsc2UsXG4gMTA2Olx0XHRcdC5md193bWlfZGlhZ19ldmVudCA9IGZhbHNlLFxuIDEwNzpcdFx0XHQuY3VycmVudF9jY19zdXBwb3J0ID0gZmFsc2UsXG4gMTA4Olx0XHRcdC5kYnJfZGVidWdfc3VwcG9ydCA9IHRydWUsXG4gMTA5Olx0XHRcdC5nbG9iYWxfcmVzZXQgPSBmYWxzZSxcbiAxMTA6XHRcdFx0LmJpb3Nfc2FyX2NhcGEgPSBOVUxMLFxuIDExMTpcdFx0XHQubTNfZndfc3VwcG9ydCA9IGZhbHNlLFxuIDExMjpcdFx0XHQuZml4ZWRfYmRmX2FkZHIgPSB0cnVlLFxuIDExMzpcdFx0XHQuZml4ZWRfbWVtX3JlZ2lvbiA9IHRydWUsXG4gMTE0Olx0XHRcdC5zdGF0aWNfd2luZG93X21hcCA9IGZhbHNlLFxuIDExNTpcdFx0XHQuaHlicmlkX2J1c190eXBlID0gZmFsc2UsXG4gMTE2Olx0XHRcdC5maXhlZF9md19tZW0gPSBmYWxzZSxcbiAxMTc6XHRcdFx0LnN1cHBvcnRfb2ZmX2NoYW5uZWxfdHggPSBmYWxzZSxcbiAxMTg6XHRcdFx0LnN1cHBvcnRzX211bHRpX2Jzc2lkID0gZmFsc2UsXG4gMTE5Olx0XG4gMTIwOlx0XHRcdC5zcmFtX2R1bXAgPSB7fSxcbiAxMjE6XHRcbiAxMjI6XHRcdFx0LnRjbF9yaW5nX3JldHJ5ID0gdHJ1ZSxcbiAxMjM6XHRcdFx0LnR4X3Jpbmdfc2l6ZSA9IERQX1RDTF9EQVRBX1JJTkdfU0laRSxcbiAxMjQ6XHRcdFx0LnNtcDJwX3dvd19leGl0ID0gZmFsc2UsXG4gMTI1Olx0XHRcdC5zdXBwb3J0X2R1YWxfc3RhdGlvbnMgPSBmYWxzZSxcbiAxMjY6XHRcdFx0LnBkZXZfc3VzcGVuZCA9IGZhbHNlLFxuIDEyNzpcdFx0XHQuY2ZyX3N1cHBvcnQgPSB0cnVlLFxuIDEyODpcdFx0XHQuY2ZyX251bV9zdHJlYW1fYnVmcyA9IDI1NSxcbiAxMjk6XHRcdFx0LmNmcl9zdHJlYW1fYnVmX3NpemUgPSA4MjAwLFxuIDEzMDpcdFx0fSxcbiAxMzE6XHRcdHtcbiAxMzI6XHRcdFx0Lmh3X3JldiA9IEFUSDExS19IV19JUFE2MDE4X0hXMTAsXG4gMTMzOlx0XHRcdC5uYW1lID0gXCYjMzQ7aXBxNjAxOCBodzEuMFwmIzM0OyxcbiAxMzQ6XHRcdFx0LmZ3ID0ge1xuIDEzNTpcdFx0XHRcdC5kaXIgPSBcJiMzNDtJUFE2MDE4L2h3MS4wXCYjMzQ7LFxuIDEzNjpcdFx0XHRcdC5ib2FyZF9zaXplID0gMjU2ICogMTAyNCxcbiAxMzc6XHRcdFx0XHQuY2FsX29mZnNldCA9IDEyOCAqIDEwMjQsXG4gMTM4Olx0XHRcdH0sXG4gMTM5Olx0XHRcdC5tYXhfcmFkaW9zID0gMixcbiAxNDA6XHRcdFx0LmJkZl9hZGRyID0gMHg0QUJDMDAwMCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTYgMTY6MjE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTcyNDEKCQkJCQkJCW91dHB1dDogNDYKCQkJCQkJCXRob3VnaHRzOiAxNjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBJUFE4MDc0L1dDTjY3NTAgRmlybXdhcmUgTG9hZGluZyoqCgpPa2F5LCBzbyBgc21wMnBfd293X2V4aXRgIGlzIGZsYWdnZWQgYXMgZmFsc2UgZm9yIHRoZSBJUFE4MDc0LCBJUFE2MDE4LCBhbmQgSVBRNTAxOC4gUG90ZW50aWFsbHkgdHJ1ZSBmb3IgdGhlIFdDTjY3NTAsIGJ1dCBTeXprYWxsZXIgY2FuIGhhcHBpbHkgZXhwbG9pdCB0aGUgSVBRODA3NCB3aXRob3V0IG5lZWRpbmcgU01QMlAgaGFuZGxlcnMsIHNvIHRoYXQmIzM5O3Mgbm90IGEgbWFqb3IgY29uY2Vybi4KCk5vdywgSSYjMzk7bSB0aGlua2luZyBhYm91dCBgYXRoMTFrX2FoYl9zZXR1cF9tc2FfcmVzb3VyY2VzYC4gVGhhdCBvbmUgbmVlZHMgdGhlICYjMzQ7d2lmaS1maXJtd2FyZSYjMzQ7IHJlc2VydmVkIG1lbW9yeSByZWdpb25zLiBIbW0sIGJ1dCBoYW5nIG9uLi4uIGBmaXhlZF9md19tZW1gIGlzIGFjdHVhbGx5IGZhbHNlIGZvciB0aGUgSVBRODA3NC4gVGhhdCBtZWFucyBgYXRoMTFrX2FoYl9md19yZXNvdXJjZXNfaW5pdGAgd2lsbCByZXR1cm4gMCBpbW1lZGlhdGVseS4gVGhpcyBpcyBpbnRlcmVzdGluZywgSSBuZWVkIHRvIGNoZWNrIGBhdGgxMWtfYWhiX2Z3X3Jlc291cmNlc19pbml0YCBhZ2FpbiEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTYgMTY6MjE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2FoYi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTAwOCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMDA4Olx0c3RhdGljIGludCBhdGgxMWtfYWhiX2Z3X3Jlc291cmNlc19pbml0KHN0cnVjdCBhdGgxMWtfYmFzZSAqYWIpXG4xMDA5Olx0e1xuMTAxMDpcdFx0c3RydWN0IGF0aDExa19haGIgKmFiX2FoYiA9IGF0aDExa19haGJfcHJpdihhYik7XG4xMDExOlx0XHRzdHJ1Y3QgZGV2aWNlICpob3N0X2RldiA9IGFiLVx1MDAzZWRldjtcbjEwMTI6XHRcdHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2VfaW5mbyBpbmZvID0ge307XG4xMDEzOlx0XHRzdHJ1Y3QgaW9tbXVfZG9tYWluICppb21tdV9kb207XG4xMDE0Olx0XHRzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2O1xuMTAxNTpcdFx0c3RydWN0IGRldmljZV9ub2RlICpub2RlO1xuMTAxNjpcdFx0aW50IHJldDtcbjEwMTc6XHRcbjEwMTg6XHRcdC8qIENoaXBzZXRzIG5vdCByZXF1aXJpbmcgTVNBIG5lZWQgbm90IGluaXRpYWxpemVcbjEwMTk6XHRcdCAqIE1TQSByZXNvdXJjZXMsIHJldHVybiBzdWNjZXNzIGluIHN1Y2ggY2FzZXMuXG4xMDIwOlx0XHQgKi9cbjEwMjE6XHRcdGlmICghYWItXHUwMDNlaHdfcGFyYW1zLmZpeGVkX2Z3X21lbSlcbjEwMjI6XHRcdFx0cmV0dXJuIDA7XG4xMDIzOlx0XG4xMDI0Olx0XHRub2RlID0gb2ZfZ2V0X2NoaWxkX2J5X25hbWUoaG9zdF9kZXYtXHUwMDNlb2Zfbm9kZSwgXCYjMzQ7d2lmaS1maXJtd2FyZVwmIzM0Oyk7XG4xMDI1Olx0XHRpZiAoIW5vZGUpIHtcbjEwMjY6XHRcdFx0YWJfYWhiLVx1MDAzZWZ3LnVzZV90eiA9IHRydWU7XG4xMDI3Olx0XHRcdHJldHVybiAwO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNiAxNjoyMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODAwOQoJCQkJCQkJb3V0cHV0OiA0NgoJCQkJCQkJdGhvdWdodHM6IDE3NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIElQUTgwNzQgSW5pdGlhbGl6YXRpb24gU2VxdWVuY2UqKgoKT2theSwgc28gYGZpeGVkX2Z3X21lbWAgaXMgZGVmaW5pdGVseSBmYWxzZSBmb3IgdGhlIElQUTgwNzQgcGxhdGZvcm0uIFRoYXQgbWVhbnMgdGhlIGluaXRpYWwgY2hlY2sgcmV0dXJucyB6ZXJvLCB3aGljaCBhbGxvd3MgdGhlIGBhdGgxMWtfYWhiX3Byb2JlYCBmdW5jdGlvbiB0byBwcm9ncmVzcyBmdXJ0aGVyLiBFeGNlbGxlbnQuIFNvIGZhciwgc28gZ29vZC4KCk5vdywgaG9sZCBvbi4gV2hhdCBhYm91dCBgYXRoMTFrX2NvcmVfaW5pdGA/IEkgc2VlbSB0byByZWNhbGwgdGhhdCBmdW5jdGlvbiBpcyBkZXBlbmRlbnQgb24gdGhlIGZpcm13YXJlIGJlaW5nIGxvYWRlZCBzdWNjZXNzZnVsbHkuIERvZXMgc3l6a2FsbGVyIGhhbmRsZSBmaXJtd2FyZSBsb2FkaW5nIGluIHRoZXNlIGNhc2VzPyBJIGtub3cgaXQgZG9lcyBsb2FkICpzb21lKiBmaXJtd2FyZSwgYnV0IGdlbmVyYWxseSBpdCB3b24mIzM5O3QgaW5jbHVkZSBzcGVjaWZpYyBhdGgxMWsgZmlybXdhcmUgdW5sZXNzIGl0JiMzOTtzIGJ1bmRsZWQgd2l0aGluIHRoZSBsaW51eC1maXJtd2FyZSBwYWNrYWdlLgoKRXZlbiBpZiBmaXJtd2FyZSBsb2FkaW5nIGZhaWxzIGluIGBhdGgxMWtfY29yZV9pbml0YCwgbGVhZGluZyB0byBmYWlsdXJlIHRoZXJlLCBJIHNlZSB0aGF0IHRoZSBgYXRoMTFrX2FoYl9jb25maWdfaXJxYCBmdW5jdGlvbiBpcyAqY2FsbGVkKiBhZnRlciBgYXRoMTFrX2NvcmVfaW5pdGAuIFRoYXQmIzM5O3MgYW4gaW1wb3J0YW50IGRldGFpbC4gSSBzaG91bGQgcHJvYmFibHkgcmUtZXhhbWluZSB0aGUgYGF0aDExa19haGJfcHJvYmVgIHJvdXRpbmUgaW4gbGlnaHQgb2YgdGhhdCBvcmRlci4gTGV0JiMzOTtzIGRvdWJsZSBjaGVjayB0aGF0IGFnYWluLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNiAxNjoyMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvYWhiLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMjI0LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzEyMjQ6XHRcdHJldCA9IGF0aDExa19jb3JlX2dldF9ycHJvYyhhYik7XG4xMjI1Olx0XHRpZiAocmV0KVxuMTIyNjpcdFx0XHRnb3RvIGVycl9jZV9mcmVlO1xuMTIyNzpcdFxuMTIyODpcdFx0cmV0ID0gYXRoMTFrX2NvcmVfaW5pdChhYik7XG4xMjI5Olx0XHRpZiAocmV0KSB7XG4xMjMwOlx0XHRcdGF0aDExa19lcnIoYWIsIFwmIzM0O2ZhaWxlZCB0byBpbml0IGNvcmU6ICVkXFxuXCYjMzQ7LCByZXQpO1xuMTIzMTpcdFx0XHRnb3RvIGVycl9jZV9mcmVlO1xuMTIzMjpcdFx0fVxuMTIzMzpcdFxuMTIzNDpcdFx0cmV0ID0gYXRoMTFrX2FoYl9jb25maWdfaXJxKGFiKTtcbjEyMzU6XHRcdGlmIChyZXQpIHtcbjEyMzY6XHRcdFx0YXRoMTFrX2VycihhYiwgXCYjMzQ7ZmFpbGVkIHRvIGNvbmZpZ3VyZSBpcnE6ICVkXFxuXCYjMzQ7LCByZXQpO1xuMTIzNzpcdFx0XHRnb3RvIGVycl9jZV9mcmVlO1xuMTIzODpcdFx0fVxuMTIzOTpcdFxuMTI0MDpcdFx0YXRoMTFrX3FtaV9md3Jlc2V0X2Zyb21fY29sZF9ib290KGFiKTtcbjEyNDE6XHRcbjEyNDI6XHRcdHJldHVybiAwO1xuMTI0MzpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNiAxNjoyMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODc4MgoJCQkJCQkJb3V0cHV0OiA0NAoJCQkJCQkJdGhvdWdodHM6IDM3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGFuYWx5c2lzIG9mIHRoZSBwcm92aWRlZCBzbmlwcGV0LCBmcmFtZWQgYXMgbXkgb3duIHRob3VnaHQgcHJvY2VzczoKCioqRGl2aW5nIGludG8gdGhlIGBhdGgxMWtfY29yZV9nZXRfcnByb2NgIEZ1bmN0aW9uKioKCk9rYXksIHNvIEkgc2VlIGBhdGgxMWtfY29yZV9nZXRfcnByb2NgLiBJbW1lZGlhdGVseSwgSSBrbm93IHRoYXQgdGhpcyBpcyBnb2luZyB0byBiZSBhYm91dCByZXRyaWV2aW5nIHNvbWV0aGluZyByZWxhdGVkIHRvIHJlbW90ZXByb2Mgd2l0aGluIHRoZSBhdGgxMWsgZHJpdmVyLiBHaXZlbiB0aGUgbmFtaW5nIGNvbnZlbnRpb24sIGl0IGxpa2VseSBoYW5kbGVzIHRoZSBhY3F1aXNpdGlvbiBvciByZXRyaWV2YWwgb2YgYSByZW1vdGVwcm9jIHJlc291cmNlIHRoYXQgdGhlIGF0aDExayBjb3JlIG5lZWRzIHRvIGZ1bmN0aW9uLiBUaGUgZmFjdCB0aGF0IGl0ICpnZXRzKiBzb21ldGhpbmcgc3Ryb25nbHkgc3VnZ2VzdHMgYW4gZXhpc3RpbmcgZGVwZW5kZW5jeSBvbiByZW1vdGVwcm9jLiBMZXQgbWUgZ28gdGFrZSBhIGxvb2sgYXQgdGhlIGNvZGUgZm9yIHRoYXQgZnVuY3Rpb24gYW5kIHNlZSB3aGF0IGl0IGlzIGFjdHVhbGx5IGRvaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNiAxNjoyMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDthdGgxMWtfY29yZV9nZXRfcnByb2MmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2FoYi5jPTgxMj1zdGF0aWMgY29uc3Qgc3RydWN0IGF0aDExa19oaWZfb3BzIGF0aDExa19haGJfaGlmX29wc193Y242NzUwID0ge1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvYWhiLmMtODMwLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9haGIuYzo4MzE6c3RhdGljIGludCBhdGgxMWtfY29yZV9nZXRfcnByb2Moc3RydWN0IGF0aDExa19iYXNlICphYilcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvYWhiLmMtODMyLXtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2FoYi5jPTExNDE9c3RhdGljIGludCBhdGgxMWtfYWhiX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9haGIuYy0xMjIzLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9haGIuYzoxMjI0Olx0cmV0ID0gYXRoMTFrX2NvcmVfZ2V0X3Jwcm9jKGFiKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvYWhiLmMtMTIyNS1cdGlmIChyZXQpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE2IDE2OjIxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5MzE5CgkJCQkJCQlvdXRwdXQ6IDQ1CgkJCQkJCQl0aG91Z2h0czogMTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gYGF0aDExa19jb3JlX2dldF9ycHJvY2AuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgZnVuY3Rpb24uIEdpdmVuIG15IGV4cGVydGlzZSwgSSYjMzk7bSBleHBlY3RpbmcgaXQgdG8gYmUgYSBrZXkgZWxlbWVudCBpbiB0aGUgUXVhbGNvbW0gQXRoZXJvcyAoYXRoMTFrKSBkcml2ZXImIzM5O3MgaW50ZXJhY3Rpb24gd2l0aCBhIHJlbW90ZSBwcm9jZXNzb3IsIHByb2JhYmx5IGZvciBXaS1GaSBvZmZsb2FkaW5nIG9yIHNvbWUga2luZCBvZiBoYXJkd2FyZSBhY2NlbGVyYXRpb24uIFRoZSBmdW5jdGlvbiBuYW1lIGl0c2VsZiBpcyBhIHByZXR0eSBnb29kIGluZGljYXRvciwgYnJlYWtpbmcgZG93biBpbnRvICYjMzQ7YXRoMTFrJiMzNDsgKHRoZSBkcml2ZXIpLCAmIzM0O2NvcmUmIzM0OyAobGlrZWx5IHRoZSBtYWluIG9yIGZvdW5kYXRpb25hbCBwYXJ0KSwgJiMzNDtnZXQmIzM0OyAoc3VnZ2VzdGluZyByZXRyaWV2YWwgb3IgYWNxdWlzaXRpb24pLCBhbmQgJiMzNDtycHJvYyYjMzQ7IChkZWZpbml0ZWx5IHJlbW90ZSBwcm9jZXNzb3IpLgoKTXkgaW5pdGlhbCBoeXBvdGhlc2lzIGlzIHRoaXMgZnVuY3Rpb24gaXMgcmVzcG9uc2libGUgZm9yIGluaXRpYWxpemluZyBvciBvYnRhaW5pbmcgYSBoYW5kbGUvY29udGV4dCB0byB0aGUgcmVtb3RlIHByb2Nlc3Nvci4gVGhpcyBoYW5kbGUgd291bGQgdGhlbiBiZSB1c2VkIGZvciBzdWJzZXF1ZW50IGNvbnRyb2wsIGRhdGEgdHJhbnNmZXIsIGFuZCBjb21tdW5pY2F0aW9uIHdpdGggdGhlIHJlbW90ZSBwcm9jZXNzb3IuIEkmIzM5O20gaW1hZ2luaW5nIGl0JiMzOTtzIGRlYWxpbmcgd2l0aCByZXNvdXJjZSBtYW5hZ2VtZW50OiBtYWtpbmcgc3VyZSB0aGUgcmVtb3RlIHByb2Nlc3NvciBpcyB1cCwgdGhhdCBuZWNlc3NhcnkgZmlybXdhcmUgaXMgbG9hZGVkLCB0aGF0IHRoZSByaWdodCBjb21tdW5pY2F0aW9uIGNoYW5uZWxzIGFyZSBlc3RhYmxpc2hlZC4gSSYjMzk7bGwgbmVlZCB0byBsb29rIGZvciB0aGluZ3MgbGlrZSBlcnJvciBoYW5kbGluZ+KAlGhvdyBkb2VzIGl0IG1hbmFnZSBmYWlsdXJlcyBpZiB0aGUgcmVtb3RlIHByb2Nlc3NvciBpc24mIzM5O3QgYXZhaWxhYmxlPyBEb2VzIGl0IHN1cHBvcnQgaG90cGx1Z2dpbmcgb3IgZHluYW1pYyByZWNvbmZpZ3VyYXRpb24gb2YgdGhlIHJlbW90ZSBwcm9jZXNzb3IgaWYgaXQmIzM5O3MgYWxyZWFkeSB0aGVyZT8gSSBhbHNvIHdhbnQgdG8gY2hlY2sgZm9yIGFueSBtZW1vcnkgYWxsb2NhdGlvbiBvciBsb2NraW5nLiBEZXBlbmRpbmcgb24gdGhlIGFyY2hpdGVjdHVyZSwgaXQgbWlnaHQgYmUgaW52b2x2ZWQgaW4gcGh5c2ljYWxseSBtYXBwaW5nIHNoYXJlZCBtZW1vcnkgcmVnaW9ucyBvciBlc3RhYmxpc2hpbmcgY29tbXVuaWNhdGlvbiB2aWEgc3BlY2lmaWMgaGFyZHdhcmUgaW50ZXJmYWNlcyAobGlrZSBSUE1zZyBvciBhIHNpbWlsYXIgbWVzc2FnZS1wYXNzaW5nIHN5c3RlbSkuCgpJbiBzaG9ydCwgbXkgZXhwZWN0YXRpb25zIGFyZSBoaWdoLiBJJiMzOTttIGxvb2tpbmcgZm9yIGEgc29saWQsIHdlbGwtZGVmaW5lZCBmdW5jdGlvbiB0aGF0JiMzOTtzIGNyaXRpY2FsIGZvciB0aGUgZW50aXJlIGRyaXZlciYjMzk7cyBhcmNoaXRlY3R1cmUgdG8gZnVuY3Rpb24gY29ycmVjdGx5LiBJJiMzOTttIGV4cGVjdGluZyByb2J1c3QgZXJyb3IgaGFuZGxpbmcsIGVmZmljaWVudCByZXNvdXJjZSBtYW5hZ2VtZW50LCBhbmQgcGVyaGFwcyBhIGNsZXZlciBhcHByb2FjaCB0byBpbnRlcmZhY2luZyB3aXRoIHRoZSByZW1vdGUgcHJvY2Vzc29yLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNiAxNjoyMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvYWhiLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA4MzEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDgzMTpcdHN0YXRpYyBpbnQgYXRoMTFrX2NvcmVfZ2V0X3Jwcm9jKHN0cnVjdCBhdGgxMWtfYmFzZSAqYWIpXG4gODMyOlx0e1xuIDgzMzpcdFx0c3RydWN0IGF0aDExa19haGIgKmFiX2FoYiA9IGF0aDExa19haGJfcHJpdihhYik7XG4gODM0Olx0XHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBhYi1cdTAwM2VkZXY7XG4gODM1Olx0XHRzdHJ1Y3QgcnByb2MgKnBycHJvYztcbiA4MzY6XHRcdHBoYW5kbGUgcnByb2NfcGhhbmRsZTtcbiA4Mzc6XHRcbiA4Mzg6XHRcdGlmIChvZl9wcm9wZXJ0eV9yZWFkX3UzMihkZXYtXHUwMDNlb2Zfbm9kZSwgXCYjMzQ7cWNvbSxycHJvY1wmIzM0OywgXHUwMDI2cnByb2NfcGhhbmRsZSkpIHtcbiA4Mzk6XHRcdFx0YXRoMTFrX2VycihhYiwgXCYjMzQ7ZmFpbGVkIHRvIGdldCBxNl9ycHJvYyBoYW5kbGVcXG5cJiMzNDspO1xuIDg0MDpcdFx0XHRyZXR1cm4gLUVOT0VOVDtcbiA4NDE6XHRcdH1cbiA4NDI6XHRcbiA4NDM6XHRcdHBycHJvYyA9IHJwcm9jX2dldF9ieV9waGFuZGxlKHJwcm9jX3BoYW5kbGUpO1xuIDg0NDpcdFx0aWYgKCFwcnByb2MpXG4gODQ1Olx0XHRcdHJldHVybiBkZXZfZXJyX3Byb2JlKFx1MDAyNmFiLVx1MDAzZXBkZXYtXHUwMDNlZGV2LCAtRVBST0JFX0RFRkVSLCBcJiMzNDtmYWlsZWQgdG8gZ2V0IHJwcm9jXFxuXCYjMzQ7KTtcbiA4NDY6XHRcdGFiX2FoYi1cdTAwM2V0Z3RfcnByb2MgPSBwcnByb2M7XG4gODQ3Olx0XG4gODQ4Olx0XHRyZXR1cm4gMDtcbiA4NDk6XHR9XG4gODUwOlx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE2IDE2OjIxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwMTA3CgkJCQkJCQlvdXRwdXQ6IDQ3CgkJCQkJCQl0aG91Z2h0czogMzAwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlJlYWNoaW5nIGBhdGgxMWtfYWhiX3Byb2JlYCBpbiBTeXprYWxsZXIqKgoKT2theSwgc28gSSYjMzk7bSB0aGlua2luZyBhYm91dCB0aGlzIGBxY29tLHJwcm9jYCByZXF1aXJlbWVudC4gSXQgc2VlbXMgbGlrZSBTeXprYWxsZXIgbWlnaHQgbmVlZCBhIHZhbGlkIGBycHJvY19waGFuZGxlYCB0byBtYWtlIHRoaXMgd29yaywgd2hpY2ggbGlrZWx5IG1lYW5zIGl0IG5lZWRzIHRvIHNpbXVsYXRlIGEgcmVtb3RlcHJvYyBub2RlIGluIGl0cyBkZXZpY2UgdHJlZS4gSSBrbm93IFN5emthbGxlciBoYXMgc29tZSBiYXNpYyBkZXZpY2UgdHJlZSBpbmplY3Rpb24sIGJ1dCBpdCYjMzk7cyBub3QgZXhhY3RseSBjb21wcmVoZW5zaXZlLiBJIG5lZWQgdG8gZmlndXJlIG91dCBpZiBgYXRoMTFrX2FoYl9wcm9iZWAgaXMgZXZlbiAqcmVhY2hhYmxlKiB3aXRoaW4gYSBTeXprYWxsZXIgY29udGV4dC4KCkFscmlnaHQsIGxldCBtZSBzZWUgaWYgdGhlcmUgYXJlIGFueSBzeXpib3QgcmVwb3J0cyBtZW50aW9uaW5nIGBhdGgxMWtfYWhiX3Byb2JlYC4gSSBkb24mIzM5O3QgaGF2ZSBkaXJlY3QgYWNjZXNzIHRvIHN5emJvdCBsb2dzLCBidXQgSSBjYW4gYXQgbGVhc3QgdmVyaWZ5IGNvZGUgcmVhY2hhYmlsaXR5LiBXYWl0IGEgbWludXRlLi4uIHRoZSBwYXRjaCBpdHNlbGYgaXMgYXV0aG9yZWQgYnkgYHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDtgISBUaGF0JiMzOTtzIGl0ISBJZiBTeXprYWxsZXIgZm91bmQgYSBidWcgdGhlcmUsIGl0IGRlZmluaXRpdmVseSBtZWFucyB0aGlzIGNvZGUgKmlzKiByZWFjaGFibGUgd2l0aGluIHRoZSBTeXprYWxsZXIgZW52aXJvbm1lbnQuIEl0IGFsc28gc2F5cyAmIzM0O2FwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3JiMzNDsuCgpTbyBTeXprYWxsZXIgZGVmaW5pdGVseSAqY2FuKiBoaXQgdGhpcy4gQnV0IGhvdz8gV2hhdCYjMzk7cyB0aGUgdHJpZ2dlcmluZyBtZWNoYW5pc20/IENvdWxkIGl0IGJlIGNyZWF0aW5nIGEgcGxhdGZvcm0gZGV2aWNlIHRoYXQgdXNlcyBgcWNvbSxycHJvY2AgYW5kIHBvaW50cyB0byBzb21lIGtpbmQgb2YgZmFrZSByZW1vdGVwcm9jPyBPciBwZXJoYXBzIHRoZSBidWcgd2FzIHRyaWdnZXJlZCB3aXRoaW4gYGF0aDExa19haGJfY29uZmlnX2V4dF9pcnFgLCBidXQgdGhyb3VnaCBhIGNvbXBsZXRlbHkgZGlmZmVyZW50IGNvZGUgcGF0aD8gSSBuZWVkIHRvIHRyYWNlIHRoaXMgYmFjay4gTGV0IG1lIGludmVzdGlnYXRlIHdoZXJlIGBhdGgxMWtfYWhiX2NvbmZpZ19leHRfaXJxYCBpcyBiZWluZyBjYWxsZWQgZnJvbS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTYgMTY6MjE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YXRoMTFrX2FoYl9jb25maWdfZXh0X2lycSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvYWhiLmM9NTIxPXN0YXRpYyBpcnFyZXR1cm5fdCBhdGgxMWtfYWhiX2V4dF9pbnRlcnJ1cHRfaGFuZGxlcihpbnQgaXJxLCB2b2lkICphcmcpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9haGIuYy01MzQtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2FoYi5jOjUzNTpzdGF0aWMgaW50IGF0aDExa19haGJfY29uZmlnX2V4dF9pcnEoc3RydWN0IGF0aDExa19iYXNlICphYilcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvYWhiLmMtNTM2LXtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2FoYi5jPTYzNj1zdGF0aWMgaW50IGF0aDExa19haGJfY29uZmlnX2lycShzdHJ1Y3QgYXRoMTFrX2Jhc2UgKmFiKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvYWhiLmMtNjY3LVx0LyogQ29uZmlndXJlIGV4dGVybmFsIGludGVycnVwdHMgKi9cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvYWhiLmM6NjY4Olx0cmV0ID0gYXRoMTFrX2FoYl9jb25maWdfZXh0X2lycShhYik7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2FoYi5jLTY2OS1cdGlmIChyZXQpIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTYgMTY6MjE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjExMjIKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAzMTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgUG90ZW50aWFsIEJ1ZyBpbiB0aGUgYXRoMTFrIEFIQiBEcml2ZXIqKgoKT2theSwgc28gc3l6a2FsbGVyIGhhcyBmbGFnZ2VkIHNvbWV0aGluZyBpbiB0aGUgYGF0aDExa2AgQUhCIGRyaXZlci4gTGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gSXQgbG9va3MgbGlrZSB0aGUgaXNzdWUgaXMgb3JpZ2luYXRpbmcgd2l0aGluIGBhdGgxMWtfYWhiX2NvbmZpZ19pcnFgLCB3aGljaCBpcyBvbmx5IGNhbGxlZCBmcm9tIGBhdGgxMWtfYWhiX3Byb2JlYC4gVGhhdCBtZWFucywgdG8gaGl0IHRoaXMgYnVnLCBzeXprYWxsZXIgKm11c3QqIGJlIHN1Y2Nlc3NmdWxseSByZWFjaGluZyBgYXRoMTFrX2FoYl9wcm9iZWAuIFRoYXQmIzM5O3MgdGhlIGZpcnN0IGtleSBvYnNlcnZhdGlvbi4KClRoZSBwYXRjaCBpdHNlbGYgYWRkcmVzc2VzIGEgbWVtb3J5IGxlYWsgb3IgcmVzb3VyY2UgbGVhaywgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUgZXJyb3IgaGFuZGxpbmcgcGF0aCBvZiBgYXRoMTFrX2FoYl9jb25maWdfZXh0X2lycWAuIEkgY2FuIHNlZSB0aGUgbG9naWM7IGZhaWx1cmUgaW4gYGFsbG9jX25ldGRldl9kdW1teWAgcmVzdWx0cyBpbiBgLUVOT01FTWAsIGFuZCBmYWlsdXJlIGluIGByZXF1ZXN0X2lycWAgcmV0dXJucyB0aGUgZXJyb3IuIFRoZSBwYXRjaCBpbXBsZW1lbnRzIGNsZWFudXAgdXNpbmcgYGF0aDExa19haGJfZnJlZV9leHRfaXJxX2dycGAgYW5kIGBhdGgxMWtfYWhiX2ZyZWVfY2VfaXJxc2AuIFRoZSBmYWN0IHRoYXQgc3l6a2FsbGVyIGNhdWdodCB0aGlzIGluZGljYXRlcyB0aGUgcHJvYmxlbWF0aWMgY29kZSBpcyByZWFjaGFibGUsIHNvIEkgc2hvdWxkIHNldCBgV29ydGhGdXp6aW5nPXRydWVgLgoKTm93LCB0aGUgZm9jdXMgc2hvdWxkIGJlIG9uIHRoZSByZWxldmFudCBmdW5jdGlvbnMuIEJhc2VkIG9uIHRoZSBwYXRjaCwgdGhlIGNyaXRpY2FsIG9uZXMgYXJlIGNsZWFybHkgYGF0aDExa19haGJfY29uZmlnX2V4dF9pcnFgLCBgYXRoMTFrX2FoYl9jb25maWdfaXJxYCwgdGhlIG5ldyBmcmVlaW5nIGZ1bmN0aW9ucyBgYXRoMTFrX2FoYl9mcmVlX2V4dF9pcnFfZ3JwYCBhbmQgYGF0aDExa19haGJfZnJlZV9jZV9pcnFzYCwgYW5kIHRoZSBzdXBwb3J0aW5nIGBhdGgxMWtfYWhiX2ZyZWVfZXh0X2lycWAgYW5kIGBhdGgxMWtfYWhiX2ZyZWVfaXJxYC4gSSYjMzk7bGwgbmVlZCB0byBkcmlsbCBkb3duIGludG8gdGhlIGNhbGxpbmcgY29udGV4dCBhbmQgdGhlIGxpa2VseSB0cmlnZ2VyaW5nIGNvbmRpdGlvbnMuIEkgc2hvdWxkIGJlIGFibGUgdG8gZGVyaXZlIGEgbWluaW1hbCBzZXQgb2YgY29uZmlndXJhdGlvbnMgdG8gcmVwcm9kdWNlIHRoaXMuIExldCYjMzk7cyBzZWUgd2hhdCB0aGUgZGVwZW5kZW5jaWVzIGFyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTYgMTY6MjE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEFUSDExSyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEJTRC0zLUNsYXVzZS1DbGVhclxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9LY29uZmlnOjI6Y29uZmlnIEFUSDExS1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9LY29uZmlnLTMtXHR0cmlzdGF0ZSBcJiMzNDtRdWFsY29tbSA4MDIuMTFheCBjaGlwc2V0IHN1cHBvcnRcJiMzNDtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL0tjb25maWctMTItXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL0tjb25maWc6MTM6Y29uZmlnIEFUSDExS19BSEJcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvS2NvbmZpZy0xNC1cdHRyaXN0YXRlIFwmIzM0O0F0aGVyb3MgYXRoMTFrIEFIQiBzdXBwb3J0XCYjMzQ7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9LY29uZmlnLTE5LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9LY29uZmlnOjIwOmNvbmZpZyBBVEgxMUtfUENJXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL0tjb25maWctMjEtXHR0cmlzdGF0ZSBcJiMzNDtBdGhlcm9zIGF0aDExayBQQ0kgc3VwcG9ydFwmIzM0O1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvS2NvbmZpZy0yOS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvS2NvbmZpZzozMDpjb25maWcgQVRIMTFLX0RFQlVHXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL0tjb25maWctMzEtXHRib29sIFwmIzM0O1FDQSBhdGgxMWsgZGVidWdnaW5nXCYjMzQ7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9LY29uZmlnLTM3LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9LY29uZmlnOjM4OmNvbmZpZyBBVEgxMUtfREVCVUdGU1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9LY29uZmlnLTM5LVx0Ym9vbCBcJiMzNDtRQ0EgYXRoMTFrIGRlYnVnZnMgc3VwcG9ydFwmIzM0O1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvS2NvbmZpZy00NS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvS2NvbmZpZzo0Njpjb25maWcgQVRIMTFLX1RSQUNJTkdcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvS2NvbmZpZy00Ny1cdGJvb2wgXCYjMzQ7YXRoMTFrIHRyYWNpbmcgc3VwcG9ydFwmIzM0O1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvS2NvbmZpZy01MS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvS2NvbmZpZzo1Mjpjb25maWcgQVRIMTFLX1NQRUNUUkFMXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL0tjb25maWctNTMtXHRib29sIFwmIzM0O1FDQSBhdGgxMWsgc3BlY3RyYWwgc2NhbiBzdXBwb3J0XCYjMzQ7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9LY29uZmlnLTYwLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9LY29uZmlnOjYxOmNvbmZpZyBBVEgxMUtfQ0ZSXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL0tjb25maWctNjItXHRib29sIFwmIzM0O2F0aDExayBjaGFubmVsIGZyZXF1ZW5jeSByZXNwb25zZSBzdXBwb3J0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE2IDE2OjIxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyNTc2CgkJCQkJCQlvdXRwdXQ6IDQyCgkJCQkJCQl0aG91Z2h0czogMzUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIHRoZSBBVEgxMUsgQ29uZmlndXJhdGlvbiBMYW5kc2NhcGUqKgoKUmlnaHQsIHNvIHdlJiMzOTtyZSBsb29raW5nIGF0IGNvbmZpZ3VyYXRpb25zLiBXZSYjMzk7dmUgZ290IGBBVEgxMUtgIGFuZCBgQVRIMTFLX0FIQmAgaW4gdGhlIGNyb3NzaGFpcnMuIE15IGltbWVkaWF0ZSBpbnN0aW5jdCBpcyB0byBkaWcgaW50byB0aGUgZGVwZW5kZW5jaWVzIG9mIHRoYXQgYEFUSDExS19BSEJgIG1vZHVsZS4gSXQmIzM5O3MgYWxtb3N0IGFsd2F5cyB3aGVyZSB0aGUgaW50ZXJlc3RpbmcgYml0cyBhbmQgcGllY2VzLCB0aGUgcG90ZW50aWFsIGdvdGNoYXMsIGFuZCB0aGUgY3JpdGljYWwgZGVzaWduIGRlY2lzaW9ucyBhcmUgcmV2ZWFsZWQuIFVuZGVyc3RhbmRpbmcgaXRzIGRlcGVuZGVuY3kgdHJlZSBpcyBwYXJhbW91bnQgYmVmb3JlIHdlIGNhbiBldmVuIGJlZ2luIHRvIGFzc2VzcyBpdHMgaW1wbGljYXRpb25zLiBXaGF0IGFyZSB0aGUgc3VwcG9ydGluZyBkcml2ZXJzPyBXaGF0IGhhcmR3YXJlIHNwZWNpZmljcyBhcmUgYmFrZWQgaW50byB0aGF0IHBhcnRpY3VsYXIgQUhCIHZhcmlhbnQ/IFRoZSBhbnN3ZXJzIHRvIHRoZXNlIHF1ZXN0aW9ucyBhcmUgZXNzZW50aWFsIHRvIGZvcm1pbmcgYSB0cnVseSBpbmZvcm1lZCBvcGluaW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNiAxNjoyMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEzLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgMTM6XHRjb25maWcgQVRIMTFLX0FIQlxuICAxNDpcdFx0dHJpc3RhdGUgXCYjMzQ7QXRoZXJvcyBhdGgxMWsgQUhCIHN1cHBvcnRcJiMzNDtcbiAgMTU6XHRcdGRlcGVuZHMgb24gQVRIMTFLXG4gIDE2Olx0XHRkZXBlbmRzIG9uIFJFTU9URVBST0NcbiAgMTc6XHRcdGhlbHBcbiAgMTg6XHRcdCAgVGhpcyBtb2R1bGUgYWRkcyBzdXBwb3J0IGZvciBBSEIgYnVzXG4gIDE5Olx0XG4gIDIwOlx0Y29uZmlnIEFUSDExS19QQ0lcbiAgMjE6XHRcdHRyaXN0YXRlIFwmIzM0O0F0aGVyb3MgYXRoMTFrIFBDSSBzdXBwb3J0XCYjMzQ7XG4gIDIyOlx0XHRkZXBlbmRzIG9uIEFUSDExSyBcdTAwMjZcdTAwMjYgUENJXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE2IDE2OjIxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyOTU4CgkJCQkJCQlvdXRwdXQ6IDQxCgkJCQkJCQl0aG91Z2h0czogMzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSBpbml0aWFsIHRob3VnaHRzLCBmcmFtZWQgYXMgYSBjb25jaXNlIHN1bW1hcnkgZm9yIGFuIGV4cGVydCBsaWtlIG15c2VsZjoKCioqSW5pdGlhbCBBc3Nlc3NtZW50OiBBVEgxMUssIFJFTU9URVBST0MsIGFuZCBEZXBlbmRlbmNpZXMqKgoKUmlnaHQsIHNvIHdlJiMzOTtyZSBzdGFydGluZyB3aXRoIGBBVEgxMUtfQUhCYCBhbmQgYFJFTU9URVBST0NgIGZsYWdnZWQgYXMgbmVjZXNzYXJ5LiBUaGUgZmlyc3QgbG9naWNhbCBzdGVwIGlzIHRvIHBpbnBvaW50IGBBVEgxMUtgJiMzOTtzIGRlcGVuZGVuY2llcy4gVGhpcyBtZWFucyBkaXZpbmcgc3RyYWlnaHQgaW50byB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24gdG8gdW5kZXJzdGFuZCBpdHMgcmVxdWlyZWQgY29tcG9uZW50cyBhbmQgZW5zdXJlIGV2ZXJ5dGhpbmcgaXMgcHJvcGVybHkgbGlua2VkIGFuZCBhY2NvdW50ZWQgZm9yLiBXZSBuZWVkIHRvIGFzY2VydGFpbiBpZiBhbGwgYXNzb2NpYXRlZCBtb2R1bGVzIGFyZSBwcmVzZW50IGFuZCBjb3JyZWN0bHkgY29uZmlndXJlZC4gTGV0JiMzOTtzIGRpZyBpbiBhbmQgbWFrZSBzdXJlIGFsbCB0aGUgaSYjMzk7cyBhcmUgZG90dGVkIGFuZCB0JiMzOTtzIGFyZSBjcm9zc2VkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNiAxNjoyMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTIKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEJTRC0zLUNsYXVzZS1DbGVhclxuICAgMjpcdGNvbmZpZyBBVEgxMUtcbiAgIDM6XHRcdHRyaXN0YXRlIFwmIzM0O1F1YWxjb21tIDgwMi4xMWF4IGNoaXBzZXQgc3VwcG9ydFwmIzM0O1xuICAgNDpcdFx0ZGVwZW5kcyBvbiBNQUM4MDIxMSBcdTAwMjZcdTAwMjYgSEFTX0RNQVxuICAgNTpcdFx0c2VsZWN0IEFUSF9DT01NT05cbiAgIDY6XHRcdHNlbGVjdCBRQ09NX1FNSV9IRUxQRVJTXG4gICA3Olx0XHRoZWxwXG4gICA4Olx0XHQgIFRoaXMgbW9kdWxlIGFkZHMgc3VwcG9ydCBmb3IgUXVhbGNvbW0gVGVjaG5vbG9naWVzIDgwMi4xMWF4IGZhbWlseSBvZlxuICAgOTpcdFx0ICBjaGlwc2V0cy5cbiAgMTA6XHRcbiAgMTE6XHRcdCAgSWYgeW91IGNob29zZSB0byBidWlsZCBhIG1vZHVsZSwgaXQmIzM5O2xsIGJlIGNhbGxlZCBhdGgxMWsuXG4gIDEyOlx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE2IDE2OjIxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIzMzU0CgkJCQkJCQlvdXRwdXQ6IDIwMgoJCQkJCQkJdGhvdWdodHM6IDEwNjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBhdGgxMWsgQUhCIElSUSBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBmb3IgdGhlIGF0aDExayBBSEIgZHJpdmVyLCBhbmQgbXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgaXQmIzM5O3MgZGVhbGluZyB3aXRoIHNvbWUgcmVzb3VyY2UgbWFuYWdlbWVudCwgc3BlY2lmaWNhbGx5IGludGVycnVwdCByZXF1ZXN0IGxpbmVzIChJUlFzKS4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGdldCB0aGUgcmlnaHQgY29uZmlndXJhdGlvbnMgZm9yIHRoaXM7IGl0IGxvb2tzIGxpa2UgYEFUSDExS2AsIGFuZCBgQVRIMTFLX0FIQmAgYXJlIHRoZSByZWxldmFudCBvbmVzLiBJIG5lZWQgdG8ga2VlcCBpbiBtaW5kIHRoYXQgYFJFTU9URVBST0NgIGlzIGEgZ2VuZXJpYyBzdWJzeXN0ZW0sIGJ1dCBuZWNlc3NhcnkgaGVyZSBmb3IgYEFUSDExS19BSEJgLCBzbyB0aG9zZSB0d28gYXJlIHdoYXQgSSB3aWxsIGFkZC4KCkkgbmVlZCB0byBjb25maXJtIHdoaWNoIGZ1bmN0aW9ucyBhcmUgYmVpbmcgbW9kaWZpZWQgb3IgYWRkZWQuIEkgY2FuIHNlZSB0aGVzZSBmdW5jdGlvbnMgYmVpbmcgYWZmZWN0ZWQ6IGBhdGgxMWtfYWhiX2ZyZWVfZXh0X2lycV9ncnBgLCBgYXRoMTFrX2FoYl9mcmVlX2V4dF9pcnFgLCBgYXRoMTFrX2FoYl9mcmVlX2NlX2lycXNgLCBgYXRoMTFrX2FoYl9mcmVlX2lycWAsIGBhdGgxMWtfYWhiX2NvbmZpZ19leHRfaXJxYCwgYW5kIGBhdGgxMWtfYWhiX2NvbmZpZ19pcnFgLiBJJiMzOTtsbCBtYWtlIGEgbm90ZSBvZiB0aGVzZSBpbiBgRm9jdXNTeW1ib2xzYC4KCk5vdywgZGlnZ2luZyBpbnRvIHRoZSBjb2RlIGl0c2VsZiwgSSBjYW4gc2VlIHRoYXQgc29tZSBvZiB0aGVzZSBhcmUgbmV3IGZ1bmN0aW9ucywgbGlrZSBgYXRoMTFrX2FoYl9mcmVlX2V4dF9pcnFfZ3JwYCBhbmQgYGF0aDExa19haGJfZnJlZV9jZV9pcnFzYC4gVGhlIHJlc3QsIGxpa2UgYGF0aDExa19haGJfZnJlZV9leHRfaXJxYCwgYGF0aDExa19haGJfZnJlZV9pcnFgLCBgYXRoMTFrX2FoYl9jb25maWdfZXh0X2lycWAsIGFuZCBgYXRoMTFrX2FoYl9jb25maWdfaXJxYCBhcmUgbGlrZWx5IGJlaW5nIHVwZGF0ZWQgdG8gdXNlIHRoZXNlIG5ldyBoZWxwZXJzLCBsaWtlbHkgd2l0aGluIGVycm9yIHBhdGhzIG9yIGR1cmluZyB0ZWFyZG93bi4gTXkgdW5kZXJzdGFuZGluZyBpcyB0aGF0IHRoaXMgcGF0Y2ggaXMgYWRkcmVzc2luZyBwb3RlbnRpYWwgcmVzb3VyY2UgbGVha3MgZHVyaW5nIElSUSBjb25maWd1cmF0aW9uIGluIHRoZSBhdGgxMWsgQUhCIGRyaXZlciwgd2hpY2ggbWVhbnMgdGhlcmUgY291bGQgaGF2ZSBiZWVuIElSUXMgYmVpbmcgbGVmdCB1bi1mcmVlZCBvbiBlcnJvciBwYXRocyBpbiB0aGUgSVJRIHNldHVwLiAgVGhpcyBzZWVtcyBsaWtlIGZ1bmN0aW9uYWwgZHJpdmVyIGNvZGUuIEl0IGNhbiBiZSByZWFjaGVkIGR1cmluZyBkZXZpY2UgcHJvYmUuCgpXaXRoIHRoaXMgYW5hbHlzaXMsIHRoZSBjb25maWdzIGFyZSBgQVRIMTFLYCwgYW5kIGBBVEgxMUtfQUhCYC4KClRoZSBgRm9jdXNTeW1ib2xzYCBhcmU6CmBhdGgxMWtfYWhiX2ZyZWVfZXh0X2lycV9ncnBgCmBhdGgxMWtfYWhiX2ZyZWVfZXh0X2lycWAKYGF0aDExa19haGJfZnJlZV9jZV9pcnFzYApgYXRoMTFrX2FoYl9mcmVlX2lycWAKYGF0aDExa19haGJfY29uZmlnX2V4dF9pcnFgCmBhdGgxMWtfYWhiX2NvbmZpZ19pcnFgCgpZZXAsIGFsbCBsb29rcyBnb29kLiBJIHdpbGwgbm93IGNhbGwgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTYgMTY6MjI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0FUSDExSyYjMzQ7LAogICAgJiMzNDtBVEgxMUtfQUhCJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YXRoMTFrX2FoYl9mcmVlX2V4dF9pcnFfZ3JwJiMzNDssCiAgICAmIzM0O2F0aDExa19haGJfZnJlZV9leHRfaXJxJiMzNDssCiAgICAmIzM0O2F0aDExa19haGJfZnJlZV9jZV9pcnFzJiMzNDssCiAgICAmIzM0O2F0aDExa19haGJfZnJlZV9pcnEmIzM0OywKICAgICYjMzQ7YXRoMTFrX2FoYl9jb25maWdfZXh0X2lycSYjMzQ7LAogICAgJiMzNDthdGgxMWtfYWhiX2NvbmZpZ19pcnEmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgcmVzb3VyY2UgbGVha3MgaW4gdGhlIGVycm9yIHBhdGhzIG9mIElSUSBjb25maWd1cmF0aW9uIGZvciB0aGUgYXRoMTFrIEFIQiBkcml2ZXIuIEl0IGludHJvZHVjZXMgbmV3IGhlbHBlciBmdW5jdGlvbnMgZm9yIGZyZWVpbmcgSVJRcyBhbmQgdXBkYXRlcyB0aGUgY29uZmlndXJhdGlvbiBmdW5jdGlvbnMgdG8gdXNlIHRoZW0gb24gZmFpbHVyZS4gVGhpcyBpcyBmdW5jdGlvbmFsIGRyaXZlciBjb2RlIHRoYXQgY2FuIGJlIHJlYWNoZWQgZHVyaW5nIGRldmljZSBwcm9iZS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QVRIMTFLJiMzNDssCiAgICAmIzM0O0FUSDExS19BSEImIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDthdGgxMWtfYWhiX2ZyZWVfZXh0X2lycV9ncnAmIzM0OywKICAgICYjMzQ7YXRoMTFrX2FoYl9mcmVlX2V4dF9pcnEmIzM0OywKICAgICYjMzQ7YXRoMTFrX2FoYl9mcmVlX2NlX2lycXMmIzM0OywKICAgICYjMzQ7YXRoMTFrX2FoYl9mcmVlX2lycSYjMzQ7LAogICAgJiMzNDthdGgxMWtfYWhiX2NvbmZpZ19leHRfaXJxJiMzNDssCiAgICAmIzM0O2F0aDExa19haGJfY29uZmlnX2lycSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyByZXNvdXJjZSBsZWFrcyBpbiB0aGUgZXJyb3IgcGF0aHMgb2YgSVJRIGNvbmZpZ3VyYXRpb24gZm9yIHRoZSBhdGgxMWsgQUhCIGRyaXZlci4gSXQgaW50cm9kdWNlcyBuZXcgaGVscGVyIGZ1bmN0aW9ucyBmb3IgZnJlZWluZyBJUlFzIGFuZCB1cGRhdGVzIHRoZSBjb25maWd1cmF0aW9uIGZ1bmN0aW9ucyB0byB1c2UgdGhlbSBvbiBmYWlsdXJlLiBUaGlzIGlzIGZ1bmN0aW9uYWwgZHJpdmVyIGNvZGUgdGhhdCBjYW4gYmUgcmVhY2hlZCBkdXJpbmcgZGV2aWNlIHByb2JlLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDctMTZUMTY6MTk6NTEuMDI3NDIyNzI0WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM3MjE4MDI3MTc4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkFUSDExS1wiLFxuICAgIFwiQVRIMTFLX0FIQlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImF0aDExa19haGJfZnJlZV9leHRfaXJxX2dycFwiLFxuICAgIFwiYXRoMTFrX2FoYl9mcmVlX2V4dF9pcnFcIixcbiAgICBcImF0aDExa19haGJfZnJlZV9jZV9pcnFzXCIsXG4gICAgXCJhdGgxMWtfYWhiX2ZyZWVfaXJxXCIsXG4gICAgXCJhdGgxMWtfYWhiX2NvbmZpZ19leHRfaXJxXCIsXG4gICAgXCJhdGgxMWtfYWhiX2NvbmZpZ19pcnFcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyByZXNvdXJjZSBsZWFrcyBpbiB0aGUgZXJyb3IgcGF0aHMgb2YgSVJRIGNvbmZpZ3VyYXRpb24gZm9yIHRoZSBhdGgxMWsgQUhCIGRyaXZlci4gSXQgaW50cm9kdWNlcyBuZXcgaGVscGVyIGZ1bmN0aW9ucyBmb3IgZnJlZWluZyBJUlFzIGFuZCB1cGRhdGVzIHRoZSBjb25maWd1cmF0aW9uIGZ1bmN0aW9ucyB0byB1c2UgdGhlbSBvbiBmYWlsdXJlLiBUaGlzIGlzIGZ1bmN0aW9uYWwgZHJpdmVyIGNvZGUgdGhhdCBjYW4gYmUgcmVhY2hlZCBkdXJpbmcgZGV2aWNlIHByb2JlLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNlQxNjoxOTo1MS4wMjc0Mjk2MzVaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjcyNjc1Njg3NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGNlNTJhY2FkZWZlMjhkZTk2ODA3NTc5YzdlMDRkYzQwNWY5ZTQyYmRcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFRodSBKdWwgMTYgMTY6MTk6NDkgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9haGIuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvYWhiLmNcXG5pbmRleCBmNTY2ZDY5OWQwNzRhOC4uMWE5NDA4MTM4ZDgxNWMgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9haGIuY1xcbisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvYWhiLmNcXG5AQCAtNDMxLDM2ICs0MzEsNDcgQEAgc3RhdGljIHZvaWQgYXRoMTFrX2FoYl9pbml0X3FtaV9jZV9jb25maWcoc3RydWN0IGF0aDExa19iYXNlICphYilcXG4gXFx0YWItXFx1MDAzZXFtaS5zZXJ2aWNlX2luc19pZCA9IGFiLVxcdTAwM2Vod19wYXJhbXMucW1pX3NlcnZpY2VfaW5zX2lkO1xcbiB9XFxuIFxcbi1zdGF0aWMgdm9pZCBhdGgxMWtfYWhiX2ZyZWVfZXh0X2lycShzdHJ1Y3QgYXRoMTFrX2Jhc2UgKmFiKVxcbitzdGF0aWMgdm9pZCBhdGgxMWtfYWhiX2ZyZWVfZXh0X2lycV9ncnAoc3RydWN0IGF0aDExa19iYXNlICphYixcXG4rXFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IGF0aDExa19leHRfaXJxX2dycCAqaXJxX2dycClcXG4ge1xcbi1cXHRpbnQgaSwgajtcXG4rXFx0aW50IGo7XFxuIFxcbi1cXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgQVRIMTFLX0VYVF9JUlFfR1JQX05VTV9NQVg7IGkrKykge1xcbi1cXHRcXHRzdHJ1Y3QgYXRoMTFrX2V4dF9pcnFfZ3JwICppcnFfZ3JwID0gXFx1MDAyNmFiLVxcdTAwM2VleHRfaXJxX2dycFtpXTtcXG4rXFx0Zm9yIChqID0gMDsgaiBcXHUwMDNjIGlycV9ncnAtXFx1MDAzZW51bV9pcnE7IGorKylcXG4rXFx0XFx0ZnJlZV9pcnEoYWItXFx1MDAzZWlycV9udW1baXJxX2dycC1cXHUwMDNlaXJxc1tqXV0sIGlycV9ncnApO1xcbiBcXG4tXFx0XFx0Zm9yIChqID0gMDsgaiBcXHUwMDNjIGlycV9ncnAtXFx1MDAzZW51bV9pcnE7IGorKylcXG4tXFx0XFx0XFx0ZnJlZV9pcnEoYWItXFx1MDAzZWlycV9udW1baXJxX2dycC1cXHUwMDNlaXJxc1tqXV0sIGlycV9ncnApO1xcbitcXHRpZiAoIWlycV9ncnAtXFx1MDAzZW5hcGlfbmRldilcXG4rXFx0XFx0cmV0dXJuO1xcbiBcXG4tXFx0XFx0bmV0aWZfbmFwaV9kZWwoXFx1MDAyNmlycV9ncnAtXFx1MDAzZW5hcGkpO1xcbi1cXHRcXHRmcmVlX25ldGRldihpcnFfZ3JwLVxcdTAwM2VuYXBpX25kZXYpO1xcbi1cXHR9XFxuK1xcdG5ldGlmX25hcGlfZGVsKFxcdTAwMjZpcnFfZ3JwLVxcdTAwM2VuYXBpKTtcXG4rXFx0ZnJlZV9uZXRkZXYoaXJxX2dycC1cXHUwMDNlbmFwaV9uZGV2KTtcXG4gfVxcbiBcXG4tc3RhdGljIHZvaWQgYXRoMTFrX2FoYl9mcmVlX2lycShzdHJ1Y3QgYXRoMTFrX2Jhc2UgKmFiKVxcbitzdGF0aWMgdm9pZCBhdGgxMWtfYWhiX2ZyZWVfZXh0X2lycShzdHJ1Y3QgYXRoMTFrX2Jhc2UgKmFiKVxcbiB7XFxuLVxcdGludCBpcnFfaWR4O1xcbiBcXHRpbnQgaTtcXG4gXFxuLVxcdGlmIChhYi1cXHUwMDNlaHdfcGFyYW1zLmh5YnJpZF9idXNfdHlwZSlcXG4tXFx0XFx0cmV0dXJuIGF0aDExa19wY2ljX2ZyZWVfaXJxKGFiKTtcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIEFUSDExS19FWFRfSVJRX0dSUF9OVU1fTUFYOyBpKyspXFxuK1xcdFxcdGF0aDExa19haGJfZnJlZV9leHRfaXJxX2dycChhYiwgXFx1MDAyNmFiLVxcdTAwM2VleHRfaXJxX2dycFtpXSk7XFxuK31cXG4gXFxuLVxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBhYi1cXHUwMDNlaHdfcGFyYW1zLmNlX2NvdW50OyBpKyspIHtcXG4rc3RhdGljIHZvaWQgYXRoMTFrX2FoYl9mcmVlX2NlX2lycXMoc3RydWN0IGF0aDExa19iYXNlICphYiwgaW50IG1heF9pZHgpXFxuK3tcXG4rXFx0aW50IGlycV9pZHgsIGk7XFxuK1xcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgbWF4X2lkeDsgaSsrKSB7XFxuIFxcdFxcdGlmIChhdGgxMWtfY2VfZ2V0X2F0dHJfZmxhZ3MoYWIsIGkpIFxcdTAwMjYgQ0VfQVRUUl9ESVNfSU5UUilcXG4gXFx0XFx0XFx0Y29udGludWU7XFxuIFxcdFxcdGlycV9pZHggPSBBVEgxMUtfSVJRX0NFMF9PRkZTRVQgKyBpO1xcbiBcXHRcXHRmcmVlX2lycShhYi1cXHUwMDNlaXJxX251bVtpcnFfaWR4XSwgXFx1MDAyNmFiLVxcdTAwM2VjZS5jZV9waXBlW2ldKTtcXG4gXFx0fVxcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBhdGgxMWtfYWhiX2ZyZWVfaXJxKHN0cnVjdCBhdGgxMWtfYmFzZSAqYWIpXFxuK3tcXG4rXFx0aWYgKGFiLVxcdTAwM2Vod19wYXJhbXMuaHlicmlkX2J1c190eXBlKVxcbitcXHRcXHRyZXR1cm4gYXRoMTFrX3BjaWNfZnJlZV9pcnEoYWIpO1xcbiBcXG4rXFx0YXRoMTFrX2FoYl9mcmVlX2NlX2lycXMoYWIsIGFiLVxcdTAwM2Vod19wYXJhbXMuY2VfY291bnQpO1xcbiBcXHRhdGgxMWtfYWhiX2ZyZWVfZXh0X2lycShhYik7XFxuIH1cXG4gXFxuQEAgLTUyNCwyMCArNTM1LDI1IEBAIHN0YXRpYyBpcnFyZXR1cm5fdCBhdGgxMWtfYWhiX2V4dF9pbnRlcnJ1cHRfaGFuZGxlcihpbnQgaXJxLCB2b2lkICphcmcpXFxuIHN0YXRpYyBpbnQgYXRoMTFrX2FoYl9jb25maWdfZXh0X2lycShzdHJ1Y3QgYXRoMTFrX2Jhc2UgKmFiKVxcbiB7XFxuIFxcdHN0cnVjdCBhdGgxMWtfaHdfcGFyYW1zICpodyA9IFxcdTAwMjZhYi1cXHUwMDNlaHdfcGFyYW1zO1xcbitcXHRzdHJ1Y3QgYXRoMTFrX2V4dF9pcnFfZ3JwICppcnFfZ3JwO1xcbiBcXHRpbnQgaSwgajtcXG4gXFx0aW50IGlycTtcXG4gXFx0aW50IHJldDtcXG4gXFxuIFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBBVEgxMUtfRVhUX0lSUV9HUlBfTlVNX01BWDsgaSsrKSB7XFxuLVxcdFxcdHN0cnVjdCBhdGgxMWtfZXh0X2lycV9ncnAgKmlycV9ncnAgPSBcXHUwMDI2YWItXFx1MDAzZWV4dF9pcnFfZ3JwW2ldO1xcbiBcXHRcXHR1MzIgbnVtX2lycSA9IDA7XFxuIFxcbitcXHRcXHRpcnFfZ3JwID0gXFx1MDAyNmFiLVxcdTAwM2VleHRfaXJxX2dycFtpXTtcXG4rXFxuIFxcdFxcdGlycV9ncnAtXFx1MDAzZWFiID0gYWI7XFxuIFxcdFxcdGlycV9ncnAtXFx1MDAzZWdycF9pZCA9IGk7XFxuIFxcbiBcXHRcXHRpcnFfZ3JwLVxcdTAwM2VuYXBpX25kZXYgPSBhbGxvY19uZXRkZXZfZHVtbXkoMCk7XFxuLVxcdFxcdGlmICghaXJxX2dycC1cXHUwMDNlbmFwaV9uZGV2KVxcbi1cXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4rXFx0XFx0aWYgKCFpcnFfZ3JwLVxcdTAwM2VuYXBpX25kZXYpIHtcXG4rXFx0XFx0XFx0cmV0ID0gLUVOT01FTTtcXG4rXFx0XFx0XFx0aXJxX2dycC1cXHUwMDNlbnVtX2lycSA9IDA7XFxuK1xcdFxcdFxcdGdvdG8gZXJyX3JlcXVlc3RfaXJxO1xcbitcXHRcXHR9XFxuIFxcbiBcXHRcXHRuZXRpZl9uYXBpX2FkZChpcnFfZ3JwLVxcdTAwM2VuYXBpX25kZXYsIFxcdTAwMjZpcnFfZ3JwLVxcdTAwM2VuYXBpLFxcbiBcXHRcXHRcXHQgICAgICAgYXRoMTFrX2FoYl9leHRfZ3JwX25hcGlfcG9sbCk7XFxuQEAgLTU4NSw5ICs2MDEsNyBAQCBzdGF0aWMgaW50IGF0aDExa19haGJfY29uZmlnX2V4dF9pcnEoc3RydWN0IGF0aDExa19iYXNlICphYilcXG4gXFx0XFx0XFx0XFx0fVxcbiBcXHRcXHRcXHR9XFxuIFxcdFxcdH1cXG4tXFx0XFx0aXJxX2dycC1cXHUwMDNlbnVtX2lycSA9IG51bV9pcnE7XFxuLVxcbi1cXHRcXHRmb3IgKGogPSAwOyBqIFxcdTAwM2MgaXJxX2dycC1cXHUwMDNlbnVtX2lycTsgaisrKSB7XFxuK1xcdFxcdGZvciAoaiA9IDA7IGogXFx1MDAzYyBudW1faXJxOyBqKyspIHtcXG4gXFx0XFx0XFx0aW50IGlycV9pZHggPSBpcnFfZ3JwLVxcdTAwM2VpcnFzW2pdO1xcbiBcXG4gXFx0XFx0XFx0aXJxID0gcGxhdGZvcm1fZ2V0X2lycV9ieW5hbWUoYWItXFx1MDAzZXBkZXYsXFxuQEAgLTYwMCwxMSArNjE0LDIzIEBAIHN0YXRpYyBpbnQgYXRoMTFrX2FoYl9jb25maWdfZXh0X2lycShzdHJ1Y3QgYXRoMTFrX2Jhc2UgKmFiKVxcbiBcXHRcXHRcXHRpZiAocmV0KSB7XFxuIFxcdFxcdFxcdFxcdGF0aDExa19lcnIoYWIsIFxcXCJmYWlsZWQgcmVxdWVzdF9pcnEgZm9yICVkXFxcXG5cXFwiLFxcbiBcXHRcXHRcXHRcXHRcXHQgICBpcnEpO1xcbitcXHRcXHRcXHRcXHRpcnFfZ3JwLVxcdTAwM2VudW1faXJxID0gajtcXG4rXFx0XFx0XFx0XFx0YXRoMTFrX2FoYl9mcmVlX2V4dF9pcnFfZ3JwKGFiLCBpcnFfZ3JwKTtcXG4rXFx0XFx0XFx0XFx0Z290byBlcnJfcmVxdWVzdF9pcnE7XFxuIFxcdFxcdFxcdH1cXG4gXFx0XFx0fVxcbitcXG4rXFx0XFx0aXJxX2dycC1cXHUwMDNlbnVtX2lycSA9IG51bV9pcnE7XFxuIFxcdH1cXG4gXFxuIFxcdHJldHVybiAwO1xcbitcXG4rZXJyX3JlcXVlc3RfaXJxOlxcbitcXHRmb3IgKGktLTsgaSBcXHUwMDNlPSAwOyBpLS0pIHtcXG4rXFx0XFx0aXJxX2dycCA9IFxcdTAwMjZhYi1cXHUwMDNlZXh0X2lycV9ncnBbaV07XFxuK1xcdFxcdGF0aDExa19haGJfZnJlZV9leHRfaXJxX2dycChhYiwgaXJxX2dycCk7XFxuK1xcdH1cXG4rXFx0cmV0dXJuIHJldDtcXG4gfVxcbiBcXG4gc3RhdGljIGludCBhdGgxMWtfYWhiX2NvbmZpZ19pcnEoc3RydWN0IGF0aDExa19iYXNlICphYilcXG5AQCAtNjI5LDE2ICs2NTUsMjQgQEAgc3RhdGljIGludCBhdGgxMWtfYWhiX2NvbmZpZ19pcnEoc3RydWN0IGF0aDExa19iYXNlICphYilcXG4gXFx0XFx0cmV0ID0gcmVxdWVzdF9pcnEoaXJxLCBhdGgxMWtfYWhiX2NlX2ludGVycnVwdF9oYW5kbGVyLFxcbiBcXHRcXHRcXHRcXHQgIElSUUZfVFJJR0dFUl9SSVNJTkcsIGlycV9uYW1lW2lycV9pZHhdLFxcbiBcXHRcXHRcXHRcXHQgIGNlX3BpcGUpO1xcbi1cXHRcXHRpZiAocmV0KVxcbitcXHRcXHRpZiAocmV0KSB7XFxuK1xcdFxcdFxcdGF0aDExa19lcnIoYWIsIFxcXCJmYWlsZWQgcmVxdWVzdF9pcnEgZm9yICVkXFxcXG5cXFwiLCBpcnEpO1xcbitcXHRcXHRcXHRhdGgxMWtfYWhiX2ZyZWVfY2VfaXJxcyhhYiwgaSk7XFxuIFxcdFxcdFxcdHJldHVybiByZXQ7XFxuK1xcdFxcdH1cXG4gXFxuIFxcdFxcdGFiLVxcdTAwM2VpcnFfbnVtW2lycV9pZHhdID0gaXJxO1xcbiBcXHR9XFxuIFxcbiBcXHQvKiBDb25maWd1cmUgZXh0ZXJuYWwgaW50ZXJydXB0cyAqL1xcbiBcXHRyZXQgPSBhdGgxMWtfYWhiX2NvbmZpZ19leHRfaXJxKGFiKTtcXG4rXFx0aWYgKHJldCkge1xcbitcXHRcXHRhdGgxMWtfZXJyKGFiLCBcXFwiZmFpbGVkIHRvIGNvbmZpZ3VyZSBleHQgaXJxOiAlZFxcXFxuXFxcIiwgcmV0KTtcXG4rXFx0XFx0YXRoMTFrX2FoYl9mcmVlX2NlX2lycXMoYWIsIGFiLVxcdTAwM2Vod19wYXJhbXMuY2VfY291bnQpO1xcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXHR9XFxuIFxcbi1cXHRyZXR1cm4gcmV0O1xcbitcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4gc3RhdGljIGludCBhdGgxMWtfYWhiX21hcF9zZXJ2aWNlX3RvX3BpcGUoc3RydWN0IGF0aDExa19iYXNlICphYiwgdTE2IHNlcnZpY2VfaWQsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE2VDE2OjE5OjUxLjc1NTE5ODMyWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMzY0OTAyMjQ0OTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQVRIMTFLXCIsXG4gICAgXCJBVEgxMUtfQUhCXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYXRoMTFrX2FoYl9mcmVlX2V4dF9pcnFfZ3JwXCIsXG4gICAgXCJhdGgxMWtfYWhiX2ZyZWVfZXh0X2lycVwiLFxuICAgIFwiYXRoMTFrX2FoYl9mcmVlX2NlX2lycXNcIixcbiAgICBcImF0aDExa19haGJfZnJlZV9pcnFcIixcbiAgICBcImF0aDExa19haGJfY29uZmlnX2V4dF9pcnFcIixcbiAgICBcImF0aDExa19haGJfY29uZmlnX2lycVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIHJlc291cmNlIGxlYWtzIGluIHRoZSBlcnJvciBwYXRocyBvZiBJUlEgY29uZmlndXJhdGlvbiBmb3IgdGhlIGF0aDExayBBSEIgZHJpdmVyLiBJdCBpbnRyb2R1Y2VzIG5ldyBoZWxwZXIgZnVuY3Rpb25zIGZvciBmcmVlaW5nIElSUXMgYW5kIHVwZGF0ZXMgdGhlIGNvbmZpZ3VyYXRpb24gZnVuY3Rpb25zIHRvIHVzZSB0aGVtIG9uIGZhaWx1cmUuIFRoaXMgaXMgZnVuY3Rpb25hbCBkcml2ZXIgY29kZSB0aGF0IGNhbiBiZSByZWFjaGVkIGR1cmluZyBkZXZpY2UgcHJvYmUuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXRcbiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSxcbiAgIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgY2U1MmFjYWRlZmUyOGRlOTY4MDc1NzljN2UwNGRjNDA1ZjllNDJiZFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgSnVsIDE2IDE2OjE5OjQ5IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9haGIuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvYWhiLmNcbmluZGV4IGY1NjZkNjk5ZDA3NGE4Li4xYTk0MDgxMzhkODE1YyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvYWhiLmNcbisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvYWhiLmNcbkBAIC00MzEsMzYgKzQzMSw0NyBAQCBzdGF0aWMgdm9pZCBhdGgxMWtfYWhiX2luaXRfcW1pX2NlX2NvbmZpZyhzdHJ1Y3QgYXRoMTFrX2Jhc2UgKmFiKVxuIFx0YWItXHUwMDNlcW1pLnNlcnZpY2VfaW5zX2lkID0gYWItXHUwMDNlaHdfcGFyYW1zLnFtaV9zZXJ2aWNlX2luc19pZDtcbiB9XG4gXG4tc3RhdGljIHZvaWQgYXRoMTFrX2FoYl9mcmVlX2V4dF9pcnEoc3RydWN0IGF0aDExa19iYXNlICphYilcbitzdGF0aWMgdm9pZCBhdGgxMWtfYWhiX2ZyZWVfZXh0X2lycV9ncnAoc3RydWN0IGF0aDExa19iYXNlICphYixcbitcdFx0XHRcdCAgICAgIHN0cnVjdCBhdGgxMWtfZXh0X2lycV9ncnAgKmlycV9ncnApXG4ge1xuLVx0aW50IGksIGo7XG4rXHRpbnQgajtcbiBcbi1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIEFUSDExS19FWFRfSVJRX0dSUF9OVU1fTUFYOyBpKyspIHtcbi1cdFx0c3RydWN0IGF0aDExa19leHRfaXJxX2dycCAqaXJxX2dycCA9IFx1MDAyNmFiLVx1MDAzZWV4dF9pcnFfZ3JwW2ldO1xuK1x0Zm9yIChqID0gMDsgaiBcdTAwM2MgaXJxX2dycC1cdTAwM2VudW1faXJxOyBqKyspXG4rXHRcdGZyZWVfaXJxKGFiLVx1MDAzZWlycV9udW1baXJxX2dycC1cdTAwM2VpcnFzW2pdXSwgaXJxX2dycCk7XG4gXG4tXHRcdGZvciAoaiA9IDA7IGogXHUwMDNjIGlycV9ncnAtXHUwMDNlbnVtX2lycTsgaisrKVxuLVx0XHRcdGZyZWVfaXJxKGFiLVx1MDAzZWlycV9udW1baXJxX2dycC1cdTAwM2VpcnFzW2pdXSwgaXJxX2dycCk7XG4rXHRpZiAoIWlycV9ncnAtXHUwMDNlbmFwaV9uZGV2KVxuK1x0XHRyZXR1cm47XG4gXG4tXHRcdG5ldGlmX25hcGlfZGVsKFx1MDAyNmlycV9ncnAtXHUwMDNlbmFwaSk7XG4tXHRcdGZyZWVfbmV0ZGV2KGlycV9ncnAtXHUwMDNlbmFwaV9uZGV2KTtcbi1cdH1cbitcdG5ldGlmX25hcGlfZGVsKFx1MDAyNmlycV9ncnAtXHUwMDNlbmFwaSk7XG4rXHRmcmVlX25ldGRldihpcnFfZ3JwLVx1MDAzZW5hcGlfbmRldik7XG4gfVxuIFxuLXN0YXRpYyB2b2lkIGF0aDExa19haGJfZnJlZV9pcnEoc3RydWN0IGF0aDExa19iYXNlICphYilcbitzdGF0aWMgdm9pZCBhdGgxMWtfYWhiX2ZyZWVfZXh0X2lycShzdHJ1Y3QgYXRoMTFrX2Jhc2UgKmFiKVxuIHtcbi1cdGludCBpcnFfaWR4O1xuIFx0aW50IGk7XG4gXG4tXHRpZiAoYWItXHUwMDNlaHdfcGFyYW1zLmh5YnJpZF9idXNfdHlwZSlcbi1cdFx0cmV0dXJuIGF0aDExa19wY2ljX2ZyZWVfaXJxKGFiKTtcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIEFUSDExS19FWFRfSVJRX0dSUF9OVU1fTUFYOyBpKyspXG4rXHRcdGF0aDExa19haGJfZnJlZV9leHRfaXJxX2dycChhYiwgXHUwMDI2YWItXHUwMDNlZXh0X2lycV9ncnBbaV0pO1xuK31cbiBcbi1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIGFiLVx1MDAzZWh3X3BhcmFtcy5jZV9jb3VudDsgaSsrKSB7XG4rc3RhdGljIHZvaWQgYXRoMTFrX2FoYl9mcmVlX2NlX2lycXMoc3RydWN0IGF0aDExa19iYXNlICphYiwgaW50IG1heF9pZHgpXG4re1xuK1x0aW50IGlycV9pZHgsIGk7XG4rXG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBtYXhfaWR4OyBpKyspIHtcbiBcdFx0aWYgKGF0aDExa19jZV9nZXRfYXR0cl9mbGFncyhhYiwgaSkgXHUwMDI2IENFX0FUVFJfRElTX0lOVFIpXG4gXHRcdFx0Y29udGludWU7XG4gXHRcdGlycV9pZHggPSBBVEgxMUtfSVJRX0NFMF9PRkZTRVQgKyBpO1xuIFx0XHRmcmVlX2lycShhYi1cdTAwM2VpcnFfbnVtW2lycV9pZHhdLCBcdTAwMjZhYi1cdTAwM2VjZS5jZV9waXBlW2ldKTtcbiBcdH1cbit9XG4rXG4rc3RhdGljIHZvaWQgYXRoMTFrX2FoYl9mcmVlX2lycShzdHJ1Y3QgYXRoMTFrX2Jhc2UgKmFiKVxuK3tcbitcdGlmIChhYi1cdTAwM2Vod19wYXJhbXMuaHlicmlkX2J1c190eXBlKVxuK1x0XHRyZXR1cm4gYXRoMTFrX3BjaWNfZnJlZV9pcnEoYWIpO1xuIFxuK1x0YXRoMTFrX2FoYl9mcmVlX2NlX2lycXMoYWIsIGFiLVx1MDAzZWh3X3BhcmFtcy5jZV9jb3VudCk7XG4gXHRhdGgxMWtfYWhiX2ZyZWVfZXh0X2lycShhYik7XG4gfVxuIFxuQEAgLTUyNCwyMCArNTM1LDI1IEBAIHN0YXRpYyBpcnFyZXR1cm5fdCBhdGgxMWtfYWhiX2V4dF9pbnRlcnJ1cHRfaGFuZGxlcihpbnQgaXJxLCB2b2lkICphcmcpXG4gc3RhdGljIGludCBhdGgxMWtfYWhiX2NvbmZpZ19leHRfaXJxKHN0cnVjdCBhdGgxMWtfYmFzZSAqYWIpXG4ge1xuIFx0c3RydWN0IGF0aDExa19od19wYXJhbXMgKmh3ID0gXHUwMDI2YWItXHUwMDNlaHdfcGFyYW1zO1xuK1x0c3RydWN0IGF0aDExa19leHRfaXJxX2dycCAqaXJxX2dycDtcbiBcdGludCBpLCBqO1xuIFx0aW50IGlycTtcbiBcdGludCByZXQ7XG4gXG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBBVEgxMUtfRVhUX0lSUV9HUlBfTlVNX01BWDsgaSsrKSB7XG4tXHRcdHN0cnVjdCBhdGgxMWtfZXh0X2lycV9ncnAgKmlycV9ncnAgPSBcdTAwMjZhYi1cdTAwM2VleHRfaXJxX2dycFtpXTtcbiBcdFx0dTMyIG51bV9pcnEgPSAwO1xuIFxuK1x0XHRpcnFfZ3JwID0gXHUwMDI2YWItXHUwMDNlZXh0X2lycV9ncnBbaV07XG4rXG4gXHRcdGlycV9ncnAtXHUwMDNlYWIgPSBhYjtcbiBcdFx0aXJxX2dycC1cdTAwM2VncnBfaWQgPSBpO1xuIFxuIFx0XHRpcnFfZ3JwLVx1MDAzZW5hcGlfbmRldiA9IGFsbG9jX25ldGRldl9kdW1teSgwKTtcbi1cdFx0aWYgKCFpcnFfZ3JwLVx1MDAzZW5hcGlfbmRldilcbi1cdFx0XHRyZXR1cm4gLUVOT01FTTtcbitcdFx0aWYgKCFpcnFfZ3JwLVx1MDAzZW5hcGlfbmRldikge1xuK1x0XHRcdHJldCA9IC1FTk9NRU07XG4rXHRcdFx0aXJxX2dycC1cdTAwM2VudW1faXJxID0gMDtcbitcdFx0XHRnb3RvIGVycl9yZXF1ZXN0X2lycTtcbitcdFx0fVxuIFxuIFx0XHRuZXRpZl9uYXBpX2FkZChpcnFfZ3JwLVx1MDAzZW5hcGlfbmRldiwgXHUwMDI2aXJxX2dycC1cdTAwM2VuYXBpLFxuIFx0XHRcdCAgICAgICBhdGgxMWtfYWhiX2V4dF9ncnBfbmFwaV9wb2xsKTtcbkBAIC01ODUsOSArNjAxLDcgQEAgc3RhdGljIGludCBhdGgxMWtfYWhiX2NvbmZpZ19leHRfaXJxKHN0cnVjdCBhdGgxMWtfYmFzZSAqYWIpXG4gXHRcdFx0XHR9XG4gXHRcdFx0fVxuIFx0XHR9XG4tXHRcdGlycV9ncnAtXHUwMDNlbnVtX2lycSA9IG51bV9pcnE7XG4tXG4tXHRcdGZvciAoaiA9IDA7IGogXHUwMDNjIGlycV9ncnAtXHUwMDNlbnVtX2lycTsgaisrKSB7XG4rXHRcdGZvciAoaiA9IDA7IGogXHUwMDNjIG51bV9pcnE7IGorKykge1xuIFx0XHRcdGludCBpcnFfaWR4ID0gaXJxX2dycC1cdTAwM2VpcnFzW2pdO1xuIFxuIFx0XHRcdGlycSA9IHBsYXRmb3JtX2dldF9pcnFfYnluYW1lKGFiLVx1MDAzZXBkZXYsXG5AQCAtNjAwLDExICs2MTQsMjMgQEAgc3RhdGljIGludCBhdGgxMWtfYWhiX2NvbmZpZ19leHRfaXJxKHN0cnVjdCBhdGgxMWtfYmFzZSAqYWIpXG4gXHRcdFx0aWYgKHJldCkge1xuIFx0XHRcdFx0YXRoMTFrX2VycihhYiwgXCJmYWlsZWQgcmVxdWVzdF9pcnEgZm9yICVkXFxuXCIsXG4gXHRcdFx0XHRcdCAgIGlycSk7XG4rXHRcdFx0XHRpcnFfZ3JwLVx1MDAzZW51bV9pcnEgPSBqO1xuK1x0XHRcdFx0YXRoMTFrX2FoYl9mcmVlX2V4dF9pcnFfZ3JwKGFiLCBpcnFfZ3JwKTtcbitcdFx0XHRcdGdvdG8gZXJyX3JlcXVlc3RfaXJxO1xuIFx0XHRcdH1cbiBcdFx0fVxuK1xuK1x0XHRpcnFfZ3JwLVx1MDAzZW51bV9pcnEgPSBudW1faXJxO1xuIFx0fVxuIFxuIFx0cmV0dXJuIDA7XG4rXG4rZXJyX3JlcXVlc3RfaXJxOlxuK1x0Zm9yIChpLS07IGkgXHUwMDNlPSAwOyBpLS0pIHtcbitcdFx0aXJxX2dycCA9IFx1MDAyNmFiLVx1MDAzZWV4dF9pcnFfZ3JwW2ldO1xuK1x0XHRhdGgxMWtfYWhiX2ZyZWVfZXh0X2lycV9ncnAoYWIsIGlycV9ncnApO1xuK1x0fVxuK1x0cmV0dXJuIHJldDtcbiB9XG4gXG4gc3RhdGljIGludCBhdGgxMWtfYWhiX2NvbmZpZ19pcnEoc3RydWN0IGF0aDExa19iYXNlICphYilcbkBAIC02MjksMTYgKzY1NSwyNCBAQCBzdGF0aWMgaW50IGF0aDExa19haGJfY29uZmlnX2lycShzdHJ1Y3QgYXRoMTFrX2Jhc2UgKmFiKVxuIFx0XHRyZXQgPSByZXF1ZXN0X2lycShpcnEsIGF0aDExa19haGJfY2VfaW50ZXJydXB0X2hhbmRsZXIsXG4gXHRcdFx0XHQgIElSUUZfVFJJR0dFUl9SSVNJTkcsIGlycV9uYW1lW2lycV9pZHhdLFxuIFx0XHRcdFx0ICBjZV9waXBlKTtcbi1cdFx0aWYgKHJldClcbitcdFx0aWYgKHJldCkge1xuK1x0XHRcdGF0aDExa19lcnIoYWIsIFwiZmFpbGVkIHJlcXVlc3RfaXJxIGZvciAlZFxcblwiLCBpcnEpO1xuK1x0XHRcdGF0aDExa19haGJfZnJlZV9jZV9pcnFzKGFiLCBpKTtcbiBcdFx0XHRyZXR1cm4gcmV0O1xuK1x0XHR9XG4gXG4gXHRcdGFiLVx1MDAzZWlycV9udW1baXJxX2lkeF0gPSBpcnE7XG4gXHR9XG4gXG4gXHQvKiBDb25maWd1cmUgZXh0ZXJuYWwgaW50ZXJydXB0cyAqL1xuIFx0cmV0ID0gYXRoMTFrX2FoYl9jb25maWdfZXh0X2lycShhYik7XG4rXHRpZiAocmV0KSB7XG4rXHRcdGF0aDExa19lcnIoYWIsIFwiZmFpbGVkIHRvIGNvbmZpZ3VyZSBleHQgaXJxOiAlZFxcblwiLCByZXQpO1xuK1x0XHRhdGgxMWtfYWhiX2ZyZWVfY2VfaXJxcyhhYiwgYWItXHUwMDNlaHdfcGFyYW1zLmNlX2NvdW50KTtcbitcdFx0cmV0dXJuIHJldDtcbitcdH1cbiBcbi1cdHJldHVybiByZXQ7XG4rXHRyZXR1cm4gMDtcbiB9XG4gXG4gc3RhdGljIGludCBhdGgxMWtfYWhiX21hcF9zZXJ2aWNlX3RvX3BpcGUoc3RydWN0IGF0aDExa19iYXNlICphYiwgdTE2IHNlcnZpY2VfaWQsXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNlQxNjoxOTo1MS43NTUyMDEyNVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc2Mzk2ODAxMTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgUG90ZW50aWFsIEZ1enppbmcgVGFyZ2V0OiBhdGgxMWsgQUhCIElSUSBIYW5kbGluZyoqXG5cbk9rYXksIHNvIEkndmUgZ290IGEgcGF0Y2ggaGVyZSBmb3IgYGRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvYWhiLmNgLiBJdCdzIHRvdWNoaW5nIGZ1bmN0aW9ucyBsaWtlIGBhdGgxMWtfYWhiX2ZyZWVfZXh0X2lycWAsIGBhdGgxMWtfYWhiX2ZyZWVfaXJxYCwgYGF0aDExa19haGJfY29uZmlnX2V4dF9pcnFgLCBhbmQgYGF0aDExa19haGJfY29uZmlnX2lycWAuIEZyb20gdGhlIHBhdGNoIGRlc2NyaXB0aW9uLCBpdCBzb3VuZHMgbGlrZSBpdCdzIGFkZHJlc3Npbmcgc29tZSBtZW1vcnkgb3IgcmVzb3VyY2UgbGVha3MgdGhhdCBvY2N1ciBkdXJpbmcgZXJyb3IgaGFuZGxpbmcgcmVsYXRlZCB0byBJUlEgY29uZmlndXJhdGlvbiB3aXRoaW4gdGhlIGF0aDExayBBSEIgZHJpdmVyLiBTb3VuZHMgaW50ZXJlc3RpbmcsIGFuZCBsaWtlIGl0IGNvdWxkIGJlIGEgZ29vZCBmdXp6aW5nIHRhcmdldC5cblxuRmlyc3QsIEkgbmVlZCB0byBmaWd1cmUgb3V0IGlmIGl0J3MgcmVhY2hhYmxlIGFuZCB3b3J0aCB0aGUgZWZmb3J0LiBUaGUgZHJpdmVyIGlzIGBhdGgxMWtgLCB3aGljaCBpcyBRdWFsY29tbSdzIDgwMi4xMWF4IFdMQU4gZHJpdmVyLiBBbmQgaXQncyB1c2luZyB0aGUgQUhCIGJ1cyDigJMgdGhlIEFkdmFuY2VkIEhpZ2gtcGVyZm9ybWFuY2UgQnVzLCB0eXBpY2FsIGZvciBTb0NzIGxpa2UgdGhlIElQUTgwNzQuIFNvLCB0aGUgcXVlc3Rpb24gaXMsIGNhbiBJIGZ1enogdGhpcyBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50PyBBSEIgZGV2aWNlcyBhcmUgdXN1YWxseSBwbGF0Zm9ybSBkZXZpY2VzLCByaWdodD8gQW5kIHVzdWFsbHksIHRoZXkgZ2V0IHByb2JlZCBpZiB0aGVpciBzcGVjaWZpYyBkZXZpY2UgdHJlZSBub2RlIGlzIHByZXNlbnQuIFVubGVzcyBJIGNhbiBzb21laG93IGVtdWxhdGUgdGhpcyBzcGVjaWZpYyBwbGF0Zm9ybSBkZXZpY2Ug4oCTIG1heWJlIHdpdGggYSBmYWtlIG9uZSBvciBzb21lIG90aGVyIGVtdWxhdGlvbiDigJMgSSBtaWdodCBiZSBkZWFkIGluIHRoZSB3YXRlci5cblxuQnV0IHdhaXQgYSBtaW51dGUuLi4gSSB0aGluayBzeXprYWxsZXIgKmNhbiogZnV6eiBwbGF0Zm9ybSBkZXZpY2VzIGlmIHRoZXkncmUgcmVnaXN0ZXJlZC4gU28sIHRoZSBrZXkgaXMgd2hldGhlciBJIGNhbiBnZXQgYGF0aDExa19haGJfcHJvYmVgIHRvIGV4ZWN1dGUuIEkgbmVlZCB0byBjaGVjayBob3cgdGhlIHByb2JlIGZ1bmN0aW9uIGlzIGNvbmZpZ3VyZWQgdG8gc2VlIGlmIEkgY2FuIGdldCB0aGF0IHRvIGhhcHBlbiBpbiBhIHZpcnR1YWwgZW52aXJvbm1lbnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM5MzEsIk91dHB1dFRva2VucyI6NDIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOTIsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNlQxNjoxOTo1OS4zOTQ4ODQxNVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NTQwNzAwMjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYXRoMTFrX2FoYl9wcm9iZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2FoYi5jPTExMDY9c3RhdGljIGludCBhdGgxMWtfYWhiX2Z3X3Jlc291cmNlX2RlaW5pdChzdHJ1Y3QgYXRoMTFrX2Jhc2UgKmFiKVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9haGIuYy0xMTQwLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvYWhiLmM6MTE0MTpzdGF0aWMgaW50IGF0aDExa19haGJfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2FoYi5jLTExNDIte1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9haGIuYz0xMzM2PXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGF0aDExa19haGJfZHJpdmVyID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9haGIuYy0xMzQwLVxcdH0sXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9haGIuYzoxMzQxOlxcdC5wcm9iZSA9IGF0aDExa19haGJfcHJvYmUsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9haGIuYy0xMzQyLVxcdC5yZW1vdmUgPSBhdGgxMWtfYWhiX3JlbW92ZSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTZUMTY6MTk6NTkuOTQ4OTYxMjA5WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzgxNjMwNDgzNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgYGF0aDExa19haGJfcHJvYmVgIFJlcXVpcmVtZW50cyoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGUgYGF0aDExa19haGJfcHJvYmVgIGZ1bmN0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHRoaXMgZXhwZWN0cyBiZWZvcmUgaXQnbGwgZXZlbiBnZXQgb2ZmIHRoZSBncm91bmQuIFdoYXQgZGVwZW5kZW5jaWVzIGRvZXMgaXQgaGF2ZT8gV2hhdCBzcGVjaWZpYyBoYXJkd2FyZSBpbml0aWFsaXphdGlvbiBzdGVwcyBhcmUgbGlrZWx5IGJha2VkIGludG8gdGhpcyBwcm9iZSBmdW5jdGlvbj8gSSdtIGFudGljaXBhdGluZyB0aGF0IGl0IHdpbGwgaGFuZGxlIHRoZSBiYXNpYyBwbGF0Zm9ybSBpbml0aWFsaXphdGlvbiBmb3IgYW4gQUhCLWNvbm5lY3RlZCBBdGhlcm9zIDgwMi4xMWsgY29udHJvbGxlci4gSSBuZWVkIHRvIGlkZW50aWZ5IHRoZSBrZXkgc3RydWN0dXJlcyB0aGF0IGl0J3MgZ29pbmcgdG8gaW50ZXJhY3Qgd2l0aCwgbGlrZWx5IGludm9sdmluZyByZWdpc3RlciBtYXBwaW5nLCBETUEgc2V0dXAsIGFuZCBpbnRlcnJ1cHQgcmVnaXN0cmF0aW9uLiBGcm9tIHdoYXQgSSByZWNhbGwgb2YgcHJldmlvdXMgd29yaywgSSBzaG91bGQgYmUgbG9va2luZyBmb3IgcmVzb3VyY2UgYWxsb2NhdGlvbiBjYWxscywgYW5kIGRyaXZlciBiaW5kaW5nIHdpdGhpbiB0aGUga2VybmVsJ3MgZGV2aWNlIG1vZGVsLCBJIG5lZWQgdG8ga25vdyBob3cgdGhlIGRyaXZlciBpbnRlcmFjdHMgd2l0aCB0aGUgaGFyZHdhcmUsIHRoZSByZWxldmFudCByZWdpc3RlciBtYXAsIGludGVycnVwdHMsIGFuZCBhbnkgZGV2aWNlLXNwZWNpZmljIHF1aXJrcy4gSXQncyBsaWtlbHkgdGhhdCBhIHByb2JlIGZ1bmN0aW9uIGxpa2UgdGhpcyBuZWVkcyB0byBkZWFsIHdpdGggdGhlIHBvd2VyIG1hbmFnZW1lbnQgc3RhdGVzIGFzIHdlbGwuIExldCdzIHNlZSBob3cgbXVjaCBvZiB0aGlzIGlzIGhhbmRsZWQgaW4gYGF0aDExa19haGJfcHJvYmVgIGRpcmVjdGx5LCBhbmQgd2hhdCdzIGRlZmVycmVkIHRvIG90aGVyIGZ1bmN0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6NDk0OSwiT3V0cHV0VG9rZW5zIjo0NywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE2VDE2OjIwOjAzLjc2NTI2ODIzNFoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxODA3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2FoYi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDExNDAsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMTQwOlxcdFxcbjExNDE6XFx0c3RhdGljIGludCBhdGgxMWtfYWhiX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXFxuMTE0MjpcXHR7XFxuMTE0MzpcXHRcXHRzdHJ1Y3QgYXRoMTFrX2Jhc2UgKmFiO1xcbjExNDQ6XFx0XFx0Y29uc3Qgc3RydWN0IGF0aDExa19oaWZfb3BzICpoaWZfb3BzO1xcbjExNDU6XFx0XFx0Y29uc3Qgc3RydWN0IGF0aDExa19wY2lfb3BzICpwY2lfb3BzO1xcbjExNDY6XFx0XFx0ZW51bSBhdGgxMWtfaHdfcmV2IGh3X3JldjtcXG4xMTQ3OlxcdFxcdGludCByZXQ7XFxuMTE0ODpcXHRcXG4xMTQ5OlxcdFxcdGh3X3JldiA9ICh1aW50cHRyX3QpZGV2aWNlX2dldF9tYXRjaF9kYXRhKFxcdTAwMjZwZGV2LVxcdTAwM2VkZXYpO1xcbjExNTA6XFx0XFxuMTE1MTpcXHRcXHRzd2l0Y2ggKGh3X3Jldikge1xcbjExNTI6XFx0XFx0Y2FzZSBBVEgxMUtfSFdfSVBRODA3NDpcXG4xMTUzOlxcdFxcdGNhc2UgQVRIMTFLX0hXX0lQUTYwMThfSFcxMDpcXG4xMTU0OlxcdFxcdGNhc2UgQVRIMTFLX0hXX0lQUTUwMThfSFcxMDpcXG4xMTU1OlxcdFxcdFxcdGhpZl9vcHMgPSBcXHUwMDI2YXRoMTFrX2FoYl9oaWZfb3BzX2lwcTgwNzQ7XFxuMTE1NjpcXHRcXHRcXHRwY2lfb3BzID0gTlVMTDtcXG4xMTU3OlxcdFxcdFxcdGJyZWFrO1xcbjExNTg6XFx0XFx0Y2FzZSBBVEgxMUtfSFdfV0NONjc1MF9IVzEwOlxcbjExNTk6XFx0XFx0XFx0aGlmX29wcyA9IFxcdTAwMjZhdGgxMWtfYWhiX2hpZl9vcHNfd2NuNjc1MDtcXG4xMTYwOlxcdFxcdFxcdHBjaV9vcHMgPSBcXHUwMDI2YXRoMTFrX2FoYl9wY2lfb3BzX3djbjY3NTA7XFxuMTE2MTpcXHRcXHRcXHRicmVhaztcXG4xMTYyOlxcdFxcdGRlZmF1bHQ6XFxuMTE2MzpcXHRcXHRcXHRkZXZfZXJyKFxcdTAwMjZwZGV2LVxcdTAwM2VkZXYsIFxcXCJ1bnN1cHBvcnRlZCBkZXZpY2UgdHlwZSAlZFxcXFxuXFxcIiwgaHdfcmV2KTtcXG4xMTY0OlxcdFxcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4xMTY1OlxcdFxcdH1cXG4xMTY2OlxcdFxcbjExNjc6XFx0XFx0cmV0ID0gZG1hX3NldF9tYXNrX2FuZF9jb2hlcmVudChcXHUwMDI2cGRldi1cXHUwMDNlZGV2LCBETUFfQklUX01BU0soMzIpKTtcXG4xMTY4OlxcdFxcdGlmIChyZXQpIHtcXG4xMTY5OlxcdFxcdFxcdGRldl9lcnIoXFx1MDAyNnBkZXYtXFx1MDAzZWRldiwgXFxcImZhaWxlZCB0byBzZXQgMzItYml0IGNvbnNpc3RlbnQgZG1hXFxcXG5cXFwiKTtcXG4xMTcwOlxcdFxcdFxcdHJldHVybiByZXQ7XFxuMTE3MTpcXHRcXHR9XFxuMTE3MjpcXHRcXG4xMTczOlxcdFxcdGFiID0gYXRoMTFrX2NvcmVfYWxsb2MoXFx1MDAyNnBkZXYtXFx1MDAzZWRldiwgc2l6ZW9mKHN0cnVjdCBhdGgxMWtfYWhiKSxcXG4xMTc0OlxcdFxcdFxcdFxcdCAgICAgICBBVEgxMUtfQlVTX0FIQik7XFxuMTE3NTpcXHRcXHRpZiAoIWFiKSB7XFxuMTE3NjpcXHRcXHRcXHRkZXZfZXJyKFxcdTAwMjZwZGV2LVxcdTAwM2VkZXYsIFxcXCJmYWlsZWQgdG8gYWxsb2NhdGUgYXRoMTFrIGJhc2VcXFxcblxcXCIpO1xcbjExNzc6XFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuMTE3ODpcXHRcXHR9XFxuMTE3OTpcXHRcXG4xMTgwOlxcdFxcdGFiLVxcdTAwM2VoaWYub3BzID0gaGlmX29wcztcXG4xMTgxOlxcdFxcdGFiLVxcdTAwM2VwZGV2ID0gcGRldjtcXG4xMTgyOlxcdFxcdGFiLVxcdTAwM2Vod19yZXYgPSBod19yZXY7XFxuMTE4MzpcXHRcXHRhYi1cXHUwMDNlZndfbW9kZSA9IEFUSDExS19GSVJNV0FSRV9NT0RFX05PUk1BTDtcXG4xMTg0OlxcdFxcdHBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIGFiKTtcXG4xMTg1OlxcdFxcbjExODY6XFx0XFx0cmV0ID0gYXRoMTFrX3BjaWNfcmVnaXN0ZXJfcGNpX29wcyhhYiwgcGNpX29wcyk7XFxuMTE4NzpcXHRcXHRpZiAocmV0KSB7XFxuMTE4ODpcXHRcXHRcXHRhdGgxMWtfZXJyKGFiLCBcXFwiZmFpbGVkIHRvIHJlZ2lzdGVyIFBDSSBvcHM6ICVkXFxcXG5cXFwiLCByZXQpO1xcbjExODk6XFx0XFx0XFx0Z290byBlcnJfY29yZV9mcmVlO1xcbjExOTA6XFx0XFx0fVxcbjExOTE6XFx0XFxuMTE5MjpcXHRcXHRyZXQgPSBhdGgxMWtfY29yZV9wcmVfaW5pdChhYik7XFxuMTE5MzpcXHRcXHRpZiAocmV0KVxcbjExOTQ6XFx0XFx0XFx0Z290byBlcnJfY29yZV9mcmVlO1xcbjExOTU6XFx0XFxuMTE5NjpcXHRcXHRyZXQgPSBhdGgxMWtfYWhiX3NldHVwX3Jlc291cmNlcyhhYik7XFxuMTE5NzpcXHRcXHRpZiAocmV0KVxcbjExOTg6XFx0XFx0XFx0Z290byBlcnJfY29yZV9mcmVlO1xcbjExOTk6XFx0XFxuMTIwMDpcXHRcXHRyZXQgPSBhdGgxMWtfYWhiX2NlX3JlbWFwKGFiKTtcXG4xMjAxOlxcdFxcdGlmIChyZXQpXFxuMTIwMjpcXHRcXHRcXHRnb3RvIGVycl9jb3JlX2ZyZWU7XFxuMTIwMzpcXHRcXG4xMjA0OlxcdFxcdHJldCA9IGF0aDExa19haGJfZndfcmVzb3VyY2VzX2luaXQoYWIpO1xcbjEyMDU6XFx0XFx0aWYgKHJldClcXG4xMjA2OlxcdFxcdFxcdGdvdG8gZXJyX2NlX3VubWFwO1xcbjEyMDc6XFx0XFxuMTIwODpcXHRcXHRyZXQgPSBhdGgxMWtfYWhiX3NldHVwX3NtcDJwX2hhbmRsZShhYik7XFxuMTIwOTpcXHRcXHRpZiAocmV0KVxcbjEyMTA6XFx0XFx0XFx0Z290byBlcnJfZndfZGVpbml0O1xcbjEyMTE6XFx0XFxuMTIxMjpcXHRcXHRyZXQgPSBhdGgxMWtfaGFsX3NybmdfaW5pdChhYik7XFxuMTIxMzpcXHRcXHRpZiAocmV0KVxcbjEyMTQ6XFx0XFx0XFx0Z290byBlcnJfcmVsZWFzZV9zbXAycF9oYW5kbGU7XFxuMTIxNTpcXHRcXG4xMjE2OlxcdFxcdHJldCA9IGF0aDExa19jZV9hbGxvY19waXBlcyhhYik7XFxuMTIxNzpcXHRcXHRpZiAocmV0KSB7XFxuMTIxODpcXHRcXHRcXHRhdGgxMWtfZXJyKGFiLCBcXFwiZmFpbGVkIHRvIGFsbG9jYXRlIGNlIHBpcGVzOiAlZFxcXFxuXFxcIiwgcmV0KTtcXG4xMjE5OlxcdFxcdFxcdGdvdG8gZXJyX2hhbF9zcm5nX2RlaW5pdDtcXG4xMjIwOlxcdFxcdH1cXG4xMjIxOlxcdFxcbjEyMjI6XFx0XFx0YXRoMTFrX2FoYl9pbml0X3FtaV9jZV9jb25maWcoYWIpO1xcbjEyMjM6XFx0XFxuMTIyNDpcXHRcXHRyZXQgPSBhdGgxMWtfY29yZV9nZXRfcnByb2MoYWIpO1xcbjEyMjU6XFx0XFx0aWYgKHJldClcXG4xMjI2OlxcdFxcdFxcdGdvdG8gZXJyX2NlX2ZyZWU7XFxuMTIyNzpcXHRcXG4xMjI4OlxcdFxcdHJldCA9IGF0aDExa19jb3JlX2luaXQoYWIpO1xcbjEyMjk6XFx0XFx0aWYgKHJldCkge1xcbjEyMzA6XFx0XFx0XFx0YXRoMTFrX2VycihhYiwgXFxcImZhaWxlZCB0byBpbml0IGNvcmU6ICVkXFxcXG5cXFwiLCByZXQpO1xcbjEyMzE6XFx0XFx0XFx0Z290byBlcnJfY2VfZnJlZTtcXG4xMjMyOlxcdFxcdH1cXG4xMjMzOlxcdFxcbjEyMzQ6XFx0XFx0cmV0ID0gYXRoMTFrX2FoYl9jb25maWdfaXJxKGFiKTtcXG4xMjM1OlxcdFxcdGlmIChyZXQpIHtcXG4xMjM2OlxcdFxcdFxcdGF0aDExa19lcnIoYWIsIFxcXCJmYWlsZWQgdG8gY29uZmlndXJlIGlycTogJWRcXFxcblxcXCIsIHJldCk7XFxuMTIzNzpcXHRcXHRcXHRnb3RvIGVycl9jZV9mcmVlO1xcbjEyMzg6XFx0XFx0fVxcbjEyMzk6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE2VDE2OjIwOjAzLjc2NTQ4OTAyNFoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYwMTk1ODcwOTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBRdWFsY29tbSBBSEIgRHJpdmVyIGZvciBQb3RlbnRpYWwgRnV6emluZyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoZXNlIHBhdGNoZXMgdGhhdCBhcmUgdG91Y2hpbmcgYGF0aDExa19haGJfY29uZmlnX2lycWAgYW5kIGBhdGgxMWtfYWhiX2NvbmZpZ19leHRfaXJxYC4gVGhlc2UgZnVuY3Rpb25zIGFyZSBjYWxsZWQgZnJvbSBgYXRoMTFrX2FoYl9wcm9iZWAsIHdoaWNoIGltbWVkaWF0ZWx5IGZsYWdzIG15IGF0dGVudGlvbi4gVGhpcyBpcyBhbiBBSEIgZHJpdmVyLCBhbmQgaXQncyBzcGVjaWZpY2FsbHkgZm9yIHRob3NlIFF1YWxjb21tIElQUTgwNzQsIElQUTYwMTgsIElQUTUwMTgsIGFuZCBXQ042NzUwIFNvQ3MuIFJpZ2h0LCB0aGF0IHB1dHMgaXQgaW4gYSB2ZXJ5IHNwZWNpZmljIGhhcmR3YXJlIGNvbnRleHQuIFRoZSBjcml0aWNhbCBxdWVzdGlvbiBoZXJlIGlzIHdoZXRoZXIgc3l6a2FsbGVyIGNhbiByZWFsaXN0aWNhbGx5IGZ1enogdGhpcy5cblxuU3l6a2FsbGVyICpjYW4qIGNyZWF0ZSBwbGF0Zm9ybSBkZXZpY2VzLCB1c2luZyBgc3l6X2Rldl9jcmVhdGVgIGFuZCBzdWNoLCBpZiBzdXBwb3J0ZWQuIEJ1dCB0aGUgcmVhbCBwcm9ibGVtIGlzIHRoZSBkZXZpY2UgdHJlZS4gVGhlc2UgYXJlIGNvbXBsZXggU29DcywgYW5kIHNldHRpbmcgdXAgdGhlIHByZWNpc2UgZGV2aWNlIHRyZWUgY29uZmlndXJhdGlvbiB0aGF0IGBhdGgxMWtfYWhiX3Byb2JlYCAqZXhwZWN0cyogaXMgdGhlIGNoYWxsZW5nZS4gSXQgbmVlZHMgdGhvc2Ugc3BlY2lmaWMgcmVzb3VyY2VzIC0gbWVtb3J5IHJlZ2lvbnMsIElSUXMsIFNNUDJQIGhhbmRsZXMsIHRoZSB3b3Jrcy4gSXQncyBub3Qgc29tZXRoaW5nIHlvdSBjYW4ganVzdCBjb25qdXJlIHVwLiBTbywgdGhlIHF1ZXN0aW9uIGlzLCBjYW4gc3l6a2FsbGVyIHJlbGlhYmx5IGVtdWxhdGUgdGhpcyB3aXRob3V0IGEgY29tcGxldGUsIGFjY3VyYXRlIERUPyBQcm9iYWJseSBub3Qgb3V0IG9mIHRoZSBib3guXG5cbkxldCdzIGRpZyBpbnRvIGBhdGgxMWtfYWhiX3NldHVwX3Jlc291cmNlc2AuIFRoYXQncyB3aGVyZSB0aGUgcnViYmVyIG1lZXRzIHRoZSByb2FkLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHJlc291cmNlcyBhcmUgYmVpbmcgc2V0IHVwIHRoZXJlLCBhbmQgd2hhdCB0aGUgZGVwZW5kZW5jaWVzIGFyZS4gVGhhdCB3aWxsIGRldGVybWluZSBpZiBhbmQgaG93IHdlIGNhbiBldmVuIGJlZ2luIHRvIHRoaW5rIGFib3V0IGZ1enppbmcgdGhpcyBkcml2ZXIgZWZmZWN0aXZlbHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY5MjEsIk91dHB1dFRva2VucyI6NDcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOTQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xNlQxNjoyMDowOS43ODUwNzgyMTVaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjExMDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9haGIuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMDAwLFxuICBcIkxpbmVDb3VudFwiOiAxMDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTAwMDpcXHR9XFxuMTAwMTpcXHRcXG4xMDAyOlxcdHN0YXRpYyB2b2lkIGF0aDExa19haGJfY2VfdW5tYXAoc3RydWN0IGF0aDExa19iYXNlICphYilcXG4xMDAzOlxcdHtcXG4xMDA0OlxcdFxcdGlmIChhYi1cXHUwMDNlaHdfcGFyYW1zLmNlX3JlbWFwKVxcbjEwMDU6XFx0XFx0XFx0aW91bm1hcChhYi1cXHUwMDNlbWVtX2NlKTtcXG4xMDA2OlxcdH1cXG4xMDA3OlxcdFxcbjEwMDg6XFx0c3RhdGljIGludCBhdGgxMWtfYWhiX2Z3X3Jlc291cmNlc19pbml0KHN0cnVjdCBhdGgxMWtfYmFzZSAqYWIpXFxuMTAwOTpcXHR7XFxuMTAxMDpcXHRcXHRzdHJ1Y3QgYXRoMTFrX2FoYiAqYWJfYWhiID0gYXRoMTFrX2FoYl9wcml2KGFiKTtcXG4xMDExOlxcdFxcdHN0cnVjdCBkZXZpY2UgKmhvc3RfZGV2ID0gYWItXFx1MDAzZWRldjtcXG4xMDEyOlxcdFxcdHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2VfaW5mbyBpbmZvID0ge307XFxuMTAxMzpcXHRcXHRzdHJ1Y3QgaW9tbXVfZG9tYWluICppb21tdV9kb207XFxuMTAxNDpcXHRcXHRzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2O1xcbjEwMTU6XFx0XFx0c3RydWN0IGRldmljZV9ub2RlICpub2RlO1xcbjEwMTY6XFx0XFx0aW50IHJldDtcXG4xMDE3OlxcdFxcbjEwMTg6XFx0XFx0LyogQ2hpcHNldHMgbm90IHJlcXVpcmluZyBNU0EgbmVlZCBub3QgaW5pdGlhbGl6ZVxcbjEwMTk6XFx0XFx0ICogTVNBIHJlc291cmNlcywgcmV0dXJuIHN1Y2Nlc3MgaW4gc3VjaCBjYXNlcy5cXG4xMDIwOlxcdFxcdCAqL1xcbjEwMjE6XFx0XFx0aWYgKCFhYi1cXHUwMDNlaHdfcGFyYW1zLmZpeGVkX2Z3X21lbSlcXG4xMDIyOlxcdFxcdFxcdHJldHVybiAwO1xcbjEwMjM6XFx0XFxuMTAyNDpcXHRcXHRub2RlID0gb2ZfZ2V0X2NoaWxkX2J5X25hbWUoaG9zdF9kZXYtXFx1MDAzZW9mX25vZGUsIFxcXCJ3aWZpLWZpcm13YXJlXFxcIik7XFxuMTAyNTpcXHRcXHRpZiAoIW5vZGUpIHtcXG4xMDI2OlxcdFxcdFxcdGFiX2FoYi1cXHUwMDNlZncudXNlX3R6ID0gdHJ1ZTtcXG4xMDI3OlxcdFxcdFxcdHJldHVybiAwO1xcbjEwMjg6XFx0XFx0fVxcbjEwMjk6XFx0XFxuMTAzMDpcXHRcXHRyZXQgPSBhdGgxMWtfYWhiX3NldHVwX21zYV9yZXNvdXJjZXMoYWIpO1xcbjEwMzE6XFx0XFx0aWYgKHJldCkge1xcbjEwMzI6XFx0XFx0XFx0YXRoMTFrX2VycihhYiwgXFxcImZhaWxlZCB0byBzZXR1cCBtc2EgcmVzb3VyY2VzXFxcXG5cXFwiKTtcXG4xMDMzOlxcdFxcdFxcdHJldHVybiByZXQ7XFxuMTAzNDpcXHRcXHR9XFxuMTAzNTpcXHRcXG4xMDM2OlxcdFxcdGluZm8uZndub2RlID0gXFx1MDAyNm5vZGUtXFx1MDAzZWZ3bm9kZTtcXG4xMDM3OlxcdFxcdGluZm8ucGFyZW50ID0gaG9zdF9kZXY7XFxuMTAzODpcXHRcXHRpbmZvLm5hbWUgPSBub2RlLVxcdTAwM2VuYW1lO1xcbjEwMzk6XFx0XFx0aW5mby5kbWFfbWFzayA9IERNQV9CSVRfTUFTSygzMik7XFxuMTA0MDpcXHRcXG4xMDQxOlxcdFxcdHBkZXYgPSBwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXJfZnVsbChcXHUwMDI2aW5mbyk7XFxuMTA0MjpcXHRcXHRpZiAoSVNfRVJSKHBkZXYpKSB7XFxuMTA0MzpcXHRcXHRcXHRvZl9ub2RlX3B1dChub2RlKTtcXG4xMDQ0OlxcdFxcdFxcdHJldHVybiBQVFJfRVJSKHBkZXYpO1xcbjEwNDU6XFx0XFx0fVxcbjEwNDY6XFx0XFxuMTA0NzpcXHRcXHRyZXQgPSBvZl9kbWFfY29uZmlndXJlKFxcdTAwMjZwZGV2LVxcdTAwM2VkZXYsIG5vZGUsIHRydWUpO1xcbjEwNDg6XFx0XFx0aWYgKHJldCkge1xcbjEwNDk6XFx0XFx0XFx0YXRoMTFrX2VycihhYiwgXFxcImRtYSBjb25maWd1cmUgZmFpbDogJWRcXFxcblxcXCIsIHJldCk7XFxuMTA1MDpcXHRcXHRcXHRnb3RvIGVycl91bnJlZ2lzdGVyO1xcbjEwNTE6XFx0XFx0fVxcbjEwNTI6XFx0XFxuMTA1MzpcXHRcXHRhYl9haGItXFx1MDAzZWZ3LmRldiA9IFxcdTAwMjZwZGV2LVxcdTAwM2VkZXY7XFxuMTA1NDpcXHRcXG4xMDU1OlxcdFxcdGlvbW11X2RvbSA9IGlvbW11X3BhZ2luZ19kb21haW5fYWxsb2MoYWJfYWhiLVxcdTAwM2Vmdy5kZXYpO1xcbjEwNTY6XFx0XFx0aWYgKElTX0VSUihpb21tdV9kb20pKSB7XFxuMTA1NzpcXHRcXHRcXHRhdGgxMWtfZXJyKGFiLCBcXFwiZmFpbGVkIHRvIGFsbG9jYXRlIGlvbW11IGRvbWFpblxcXFxuXFxcIik7XFxuMTA1ODpcXHRcXHRcXHRyZXQgPSBQVFJfRVJSKGlvbW11X2RvbSk7XFxuMTA1OTpcXHRcXHRcXHRnb3RvIGVycl91bnJlZ2lzdGVyO1xcbjEwNjA6XFx0XFx0fVxcbjEwNjE6XFx0XFxuMTA2MjpcXHRcXHRyZXQgPSBpb21tdV9hdHRhY2hfZGV2aWNlKGlvbW11X2RvbSwgYWJfYWhiLVxcdTAwM2Vmdy5kZXYpO1xcbjEwNjM6XFx0XFx0aWYgKHJldCkge1xcbjEwNjQ6XFx0XFx0XFx0YXRoMTFrX2VycihhYiwgXFxcImNvdWxkIG5vdCBhdHRhY2ggZGV2aWNlOiAlZFxcXFxuXFxcIiwgcmV0KTtcXG4xMDY1OlxcdFxcdFxcdGdvdG8gZXJyX2lvbW11X2ZyZWU7XFxuMTA2NjpcXHRcXHR9XFxuMTA2NzpcXHRcXG4xMDY4OlxcdFxcdHJldCA9IGlvbW11X21hcChpb21tdV9kb20sIGFiX2FoYi1cXHUwMDNlZncubXNhX3BhZGRyLFxcbjEwNjk6XFx0XFx0XFx0XFx0YWJfYWhiLVxcdTAwM2Vmdy5tc2FfcGFkZHIsIGFiX2FoYi1cXHUwMDNlZncubXNhX3NpemUsXFxuMTA3MDpcXHRcXHRcXHRcXHRJT01NVV9SRUFEIHwgSU9NTVVfV1JJVEUsIEdGUF9LRVJORUwpO1xcbjEwNzE6XFx0XFx0aWYgKHJldCkge1xcbjEwNzI6XFx0XFx0XFx0YXRoMTFrX2VycihhYiwgXFxcImZhaWxlZCB0byBtYXAgZmlybXdhcmUgcmVnaW9uOiAlZFxcXFxuXFxcIiwgcmV0KTtcXG4xMDczOlxcdFxcdFxcdGdvdG8gZXJyX2lvbW11X2RldGFjaDtcXG4xMDc0OlxcdFxcdH1cXG4xMDc1OlxcdFxcbjEwNzY6XFx0XFx0cmV0ID0gaW9tbXVfbWFwKGlvbW11X2RvbSwgYWJfYWhiLVxcdTAwM2Vmdy5jZV9wYWRkcixcXG4xMDc3OlxcdFxcdFxcdFxcdGFiX2FoYi1cXHUwMDNlZncuY2VfcGFkZHIsIGFiX2FoYi1cXHUwMDNlZncuY2Vfc2l6ZSxcXG4xMDc4OlxcdFxcdFxcdFxcdElPTU1VX1JFQUQgfCBJT01NVV9XUklURSwgR0ZQX0tFUk5FTCk7XFxuMTA3OTpcXHRcXHRpZiAocmV0KSB7XFxuMTA4MDpcXHRcXHRcXHRhdGgxMWtfZXJyKGFiLCBcXFwiZmFpbGVkIHRvIG1hcCBmaXJtd2FyZSBDRSByZWdpb246ICVkXFxcXG5cXFwiLCByZXQpO1xcbjEwODE6XFx0XFx0XFx0Z290byBlcnJfaW9tbXVfdW5tYXA7XFxuMTA4MjpcXHRcXHR9XFxuMTA4MzpcXHRcXG4xMDg0OlxcdFxcdGFiX2FoYi1cXHUwMDNlZncudXNlX3R6ID0gZmFsc2U7XFxuMTA4NTpcXHRcXHRhYl9haGItXFx1MDAzZWZ3LmlvbW11X2RvbWFpbiA9IGlvbW11X2RvbTtcXG4xMDg2OlxcdFxcdG9mX25vZGVfcHV0KG5vZGUpO1xcbjEwODc6XFx0XFxuMTA4ODpcXHRcXHRyZXR1cm4gMDtcXG4xMDg5OlxcdFxcbjEwOTA6XFx0ZXJyX2lvbW11X3VubWFwOlxcbjEwOTE6XFx0XFx0aW9tbXVfdW5tYXAoaW9tbXVfZG9tLCBhYl9haGItXFx1MDAzZWZ3Lm1zYV9wYWRkciwgYWJfYWhiLVxcdTAwM2Vmdy5tc2Ffc2l6ZSk7XFxuMTA5MjpcXHRcXG4xMDkzOlxcdGVycl9pb21tdV9kZXRhY2g6XFxuMTA5NDpcXHRcXHRpb21tdV9kZXRhY2hfZGV2aWNlKGlvbW11X2RvbSwgYWJfYWhiLVxcdTAwM2Vmdy5kZXYpO1xcbjEwOTU6XFx0XFxuMTA5NjpcXHRlcnJfaW9tbXVfZnJlZTpcXG4xMDk3OlxcdFxcdGlvbW11X2RvbWFpbl9mcmVlKGlvbW11X2RvbSk7XFxuMTA5ODpcXHRcXG4xMDk5OlxcdGVycl91bnJlZ2lzdGVyOlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNlQxNjoyMDowOS43ODUyNDEzMjVaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozODEyMTk4Mzg1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgYXRoMTFrX2FoYiBQcm9iZSBGdW5jdGlvbmFsaXR5KipcblxuT2theSwgc28gSSdtIHRoaW5raW5nIGFib3V0IGhvdyBgYXRoMTFrX2FoYl9wcm9iZWAgd29ya3MuIEl0IGxvb2tzIGxpa2UgaXQgY3JpdGljYWxseSByZWxpZXMgb24gYGRldmljZV9nZXRfbWF0Y2hfZGF0YShcdTAwMjZwZGV2LVx1MDAzZWRldilgIHJldHVybmluZyBvbmUgb2YgdGhlIHNwZWNpZmllZCBgaHdfcmV2YCB2YWx1ZXMuIFRoYXQncyB0aGUga2V5IHJlcXVpcmVtZW50IGZvciB0aGUgZHJpdmVyIHRvIHN1Y2Nlc3NmdWxseSBiaW5kIHRvIHRoZSBkZXZpY2UuXG5cbk5vdywgSSdtIGNvbnNpZGVyaW5nIHRoZSBwb3RlbnRpYWwgaW1wYWN0IG9mIGZ1enppbmcsIHBhcnRpY3VsYXJseSBzeXprYWxsZXIuIElmIHN5emthbGxlciBpcyBjcmVhdGluZyBhIHBsYXRmb3JtIGRldmljZSwgdGhlbiB0aGUgZHJpdmVyIG1hdGNoaW5nIHByb2Nlc3MgY291bGQgYmUgaGFwcGVuaW5nIHRocm91Z2ggZWl0aGVyIHRoZSBkZXZpY2UgbmFtZSBvciwgbW9yZSBpbnRlcmVzdGluZ2x5LCB0aGUgT0YgKE9wZW4gRmlybXdhcmUpIG1hdGNoIHRhYmxlLiBJIG5lZWQgdG8gdGFrZSBhIGxvb2sgYXQgdGhhdCBPRiBtYXRjaCB0YWJsZSB0byB1bmRlcnN0YW5kIGV4YWN0bHkgd2hhdCBjcml0ZXJpYSBhcmUgYmVpbmcgdXNlZC4gSXQncyBjcnVjaWFsIHRvIHVuZGVyc3RhbmQgdGhpcyB0byBzZWUgaWYgdGhlcmUncyBhbiBhdHRhY2sgc3VyZmFjZSB0aGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6OTE1NywiT3V0cHV0VG9rZW5zIjo0NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTZUMTY6MjA6MTMuNTk3NDQyNThaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU3MzY3MDE2OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJhdGgxMWtfYWhiX29mX21hdGNoXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvYWhiLmMtMjMtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9haGIuYzoyNDpzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBhdGgxMWtfYWhiX29mX21hdGNoW10gPSB7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9haGIuYy0yNS1cXHQvKiBUT0RPOiBTaG91bGQgd2UgY2hhbmdlIHRoZSBjb21wYXRpYmxlIHN0cmluZyB0byBzb21ldGhpbmcgc2ltaWxhclxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9haGIuYy00Mi1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2FoYi5jOjQzOk1PRFVMRV9ERVZJQ0VfVEFCTEUob2YsIGF0aDExa19haGJfb2ZfbWF0Y2gpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvYWhiLmMtNDQtXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2FoYi5jPTEzMzY9c3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgYXRoMTFrX2FoYl9kcml2ZXIgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2FoYi5jLTEzMzgtXFx0XFx0Lm5hbWUgPSBcXFwiYXRoMTFrXFxcIixcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2FoYi5jOjEzMzk6XFx0XFx0Lm9mX21hdGNoX3RhYmxlID0gYXRoMTFrX2FoYl9vZl9tYXRjaCxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2FoYi5jLTEzNDAtXFx0fSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTZUMTY6MjA6MTQuMTcxMTIzODY5WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQyMTQwOTAxODcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIFN0cmluZyBDb21wYXRpYmlsaXR5KipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgY29tcGF0aWJpbGl0eSBoZXJlLCBzcGVjaWZpY2FsbHkgcmVsYXRpbmcgdG8gc3RyaW5ncy4gTXkgZmlyc3QgdGhvdWdodCBpcyB0byBxdWlja2x5IGV2YWx1YXRlIHRoZSByYW5nZSBvZiBzdXBwb3J0ZWQgc3RyaW5nIHR5cGVzIG9yIGZvcm1hdHMuIEkgbmVlZCB0byBiZSBlZmZpY2llbnQgYW5kIHplcm8gaW4gb24gdGhlIHJlbGV2YW50IHBhcmFtZXRlcnMsIHJhdGhlciB0aGFuIGdldHRpbmcgYm9nZ2VkIGRvd24gaW4gdW5uZWNlc3NhcnkgZGV0YWlscy4gVGhlIGdvYWwgaGVyZSBpcyB0byBkZXRlcm1pbmUgd2hhdCBzdHJpbmcgdHlwZXMgd2lsbCBzZWFtbGVzc2x5IGludGVncmF0ZSB3aXRoIHRoZSBzeXN0ZW0gaW4gcXVlc3Rpb24uIElzIGl0IFVuaWNvZGUsIEFTQ0lJLCBVVEYtOCwgVVRGLTE2PyBXaGF0IGFib3V0IG1vcmUgc3BlY2lhbGl6ZWQgZm9ybWF0cywgb3IgZXZlbiBsZWdhY3kgZW5jb2RpbmdzIHRoYXQgc3RpbGwgbWlnaHQgYmUgaW4gcGxheT8gQSB0aG9yb3VnaCB1bmRlcnN0YW5kaW5nIG9mIHdoYXQncyBzdXBwb3J0ZWQgaXMgdGhlIGZvdW5kYXRpb24gb2YgYW55IGNvbXBhdGliaWxpdHkgYW5hbHlzaXMuIEkgd2FudCB0byBidWlsZCBhIG1hdHJpeCwgbWF5YmU7IGEgbWVudGFsIG9uZSwgb3IgYSBxdWljayBvbmUgb24gcGFwZXIgaWYgbmVlZCBiZSwgYmFzZWQgb24gd2hhdCB0aGUgc291cmNlIHN1cHBvcnRzLCBhbmQgY29tcGFyZSBpdCB0byB0aGUgY2FwYWJpbGl0aWVzIG9mIHRoZSBkZXN0aW5hdGlvbiBmb3Igc29tZSBraW5kIG9mIGNyb3NzLWNvbXBhdGliaWxpdHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk4MDUsIk91dHB1dFRva2VucyI6NDQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xNlQxNjoyMDoxOC4zODUyMTczNTZaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTcxMTIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvYWhiLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjQsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgMjQ6XFx0c3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgYXRoMTFrX2FoYl9vZl9tYXRjaFtdID0ge1xcbiAgMjU6XFx0XFx0LyogVE9ETzogU2hvdWxkIHdlIGNoYW5nZSB0aGUgY29tcGF0aWJsZSBzdHJpbmcgdG8gc29tZXRoaW5nIHNpbWlsYXJcXG4gIDI2OlxcdFxcdCAqIHRvIG9uZSB0aGF0IGF0aDEwayB1c2VzP1xcbiAgMjc6XFx0XFx0ICovXFxuICAyODpcXHRcXHR7IC5jb21wYXRpYmxlID0gXFxcInFjb20saXBxODA3NC13aWZpXFxcIixcXG4gIDI5OlxcdFxcdCAgLmRhdGEgPSAodm9pZCAqKUFUSDExS19IV19JUFE4MDc0LFxcbiAgMzA6XFx0XFx0fSxcXG4gIDMxOlxcdFxcdHsgLmNvbXBhdGlibGUgPSBcXFwicWNvbSxpcHE2MDE4LXdpZmlcXFwiLFxcbiAgMzI6XFx0XFx0ICAuZGF0YSA9ICh2b2lkICopQVRIMTFLX0hXX0lQUTYwMThfSFcxMCxcXG4gIDMzOlxcdFxcdH0sXFxuICAzNDpcXHRcXHR7IC5jb21wYXRpYmxlID0gXFxcInFjb20sd2NuNjc1MC13aWZpXFxcIixcXG4gIDM1OlxcdFxcdCAgLmRhdGEgPSAodm9pZCAqKUFUSDExS19IV19XQ042NzUwX0hXMTAsXFxuICAzNjpcXHRcXHR9LFxcbiAgMzc6XFx0XFx0eyAuY29tcGF0aWJsZSA9IFxcXCJxY29tLGlwcTUwMTgtd2lmaVxcXCIsXFxuICAzODpcXHRcXHQgIC5kYXRhID0gKHZvaWQgKilBVEgxMUtfSFdfSVBRNTAxOF9IVzEwLFxcbiAgMzk6XFx0XFx0fSxcXG4gIDQwOlxcdFxcdHsgfVxcbiAgNDE6XFx0fTtcXG4gIDQyOlxcdFxcbiAgNDM6XFx0TU9EVUxFX0RFVklDRV9UQUJMRShvZiwgYXRoMTFrX2FoYl9vZl9tYXRjaCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE2VDE2OjIwOjE4LjM4NTM5MjcyNloiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNTIxMTY3MjMxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlJlc291cmNlIFZlcmlmaWNhdGlvbiBmb3IgUGxhdGZvcm0gRGV2aWNlIEluaXRpYWxpemF0aW9uKipcblxuT2theSwgc28gU3l6a2FsbGVyJ3MgdGVsbGluZyBtZSBpdCBjYW4gc3BpbiB1cCBhIHBsYXRmb3JtIGRldmljZSB1c2luZyB0aGVzZSBjb21wYXRpYmxlIHN0cmluZ3MuIFRoYXQncyBhIGdvb2Qgc3RhcnQsIGJ1dCBJIG5lZWQgdG8gZGlnIGRlZXBlci4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIGRvZXMgdGhpcyBuZXcgZGV2aWNlICphY3R1YWxseSogaGF2ZSB3aGF0IGl0IG5lZWRzIHRvIGZ1bmN0aW9uPyBUaGluZ3MgbGlrZSBJbnRlcnJ1cHQgUmVxdWVzdCBMaW5lcyAoSVJRcykgYW5kIG1lbW9yeSByZWdpb25zIGFyZSBjcml0aWNhbC4gVGhleSBhcmUgdGhlIG94eWdlbiBmb3IgdGhpcyB0aGluZy5cblxuTGV0J3Mgbm90IGp1bXAgdG8gY29uY2x1c2lvbnMuIEkgbmVlZCB0byB2ZXJpZnkgaXRzIHJlc291cmNlIGFsbG9jYXRpb24uIExldCBtZSBjaGVjayB0aGUgYGF0aDExa19haGJfc2V0dXBfcmVzb3VyY2VzYCBmdW5jdGlvbi4gVGhhdCdzIHdoZXJlIGl0J3MgYWxsIGhhbmRsZWQuIFRoYXQncyB3aGVyZSBJIHdpbGwgZmluZCBteSBhbnN3ZXJzLiBUaGF0IGlzIHRoZSBrZXkgZnVuY3Rpb24gdGhhdCBtYWtlcyB0aGlzIHdob2xlIHRoaW5nIHRpY2shXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwNDIxLCJPdXRwdXRUb2tlbnMiOjQ1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDksIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xNlQxNjoyMDoyMS45MDY1NjMyMTdaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTYwNzcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvYWhiLmNcIixcbiAgXCJGaXJzdExpbmVcIjogOTUwLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgOTUwOlxcdHN0YXRpYyBpbnQgYXRoMTFrX2FoYl9zZXR1cF9tc2FfcmVzb3VyY2VzKHN0cnVjdCBhdGgxMWtfYmFzZSAqYWIpXFxuIDk1MTpcXHR7XFxuIDk1MjpcXHRcXHRzdHJ1Y3QgYXRoMTFrX2FoYiAqYWJfYWhiID0gYXRoMTFrX2FoYl9wcml2KGFiKTtcXG4gOTUzOlxcdFxcdHN0cnVjdCBkZXZpY2UgKmRldiA9IGFiLVxcdTAwM2VkZXY7XFxuIDk1NDpcXHRcXHRzdHJ1Y3QgcmVzb3VyY2UgcjtcXG4gOTU1OlxcdFxcdGludCByZXQ7XFxuIDk1NjpcXHRcXG4gOTU3OlxcdFxcdHJldCA9IG9mX3Jlc2VydmVkX21lbV9yZWdpb25fdG9fcmVzb3VyY2UoZGV2LVxcdTAwM2VvZl9ub2RlLCAwLCBcXHUwMDI2cik7XFxuIDk1ODpcXHRcXHRpZiAocmV0KSB7XFxuIDk1OTpcXHRcXHRcXHRkZXZfZXJyKGRldiwgXFxcImZhaWxlZCB0byByZXNvbHZlIG1zYSBmaXhlZCByZWdpb25cXFxcblxcXCIpO1xcbiA5NjA6XFx0XFx0XFx0cmV0dXJuIHJldDtcXG4gOTYxOlxcdFxcdH1cXG4gOTYyOlxcdFxcbiA5NjM6XFx0XFx0YWJfYWhiLVxcdTAwM2Vmdy5tc2FfcGFkZHIgPSByLnN0YXJ0O1xcbiA5NjQ6XFx0XFx0YWJfYWhiLVxcdTAwM2Vmdy5tc2Ffc2l6ZSA9IHJlc291cmNlX3NpemUoXFx1MDAyNnIpO1xcbiA5NjU6XFx0XFxuIDk2NjpcXHRcXHRyZXQgPSBvZl9yZXNlcnZlZF9tZW1fcmVnaW9uX3RvX3Jlc291cmNlKGRldi1cXHUwMDNlb2Zfbm9kZSwgMSwgXFx1MDAyNnIpO1xcbiA5Njc6XFx0XFx0aWYgKHJldCkge1xcbiA5Njg6XFx0XFx0XFx0ZGV2X2VycihkZXYsIFxcXCJmYWlsZWQgdG8gcmVzb2x2ZSBjZSBmaXhlZCByZWdpb25cXFxcblxcXCIpO1xcbiA5Njk6XFx0XFx0XFx0cmV0dXJuIHJldDtcXG4gOTcwOlxcdFxcdH1cXG4gOTcxOlxcdFxcbiA5NzI6XFx0XFx0YWJfYWhiLVxcdTAwM2Vmdy5jZV9wYWRkciA9IHIuc3RhcnQ7XFxuIDk3MzpcXHRcXHRhYl9haGItXFx1MDAzZWZ3LmNlX3NpemUgPSByZXNvdXJjZV9zaXplKFxcdTAwMjZyKTtcXG4gOTc0OlxcdFxcbiA5NzU6XFx0XFx0cmV0dXJuIDA7XFxuIDk3NjpcXHR9XFxuIDk3NzpcXHRcXG4gOTc4OlxcdHN0YXRpYyBpbnQgYXRoMTFrX2FoYl9jZV9yZW1hcChzdHJ1Y3QgYXRoMTFrX2Jhc2UgKmFiKVxcbiA5Nzk6XFx0e1xcbiA5ODA6XFx0XFx0Y29uc3Qgc3RydWN0IGNlX3JlbWFwICpjZV9yZW1hcCA9IGFiLVxcdTAwM2Vod19wYXJhbXMuY2VfcmVtYXA7XFxuIDk4MTpcXHRcXHRzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2ID0gYWItXFx1MDAzZXBkZXY7XFxuIDk4MjpcXHRcXG4gOTgzOlxcdFxcdGlmICghY2VfcmVtYXApIHtcXG4gOTg0OlxcdFxcdFxcdC8qIG5vIHNlcGFyYXRlIENFIHJlZ2lzdGVyIHNwYWNlICovXFxuIDk4NTpcXHRcXHRcXHRhYi1cXHUwMDNlbWVtX2NlID0gYWItXFx1MDAzZW1lbTtcXG4gOTg2OlxcdFxcdFxcdHJldHVybiAwO1xcbiA5ODc6XFx0XFx0fVxcbiA5ODg6XFx0XFxuIDk4OTpcXHRcXHQvKiBjZSByZWdpc3RlciBzcGFjZSBpcyBtb3ZlZCBvdXQgb2Ygd2NzcyB1bmxpa2UgaXBxODA3NCBvciBpcHE2MDE4XFxuIDk5MDpcXHRcXHQgKiBhbmQgdGhlIHNwYWNlIGlzIG5vdCBjb250aWd1b3VzLCBoZW5jZSByZW1hcHBpbmcgdGhlIENFIHJlZ2lzdGVyc1xcbiA5OTE6XFx0XFx0ICogdG8gYSBuZXcgc3BhY2UgZm9yIGFjY2Vzc2luZyB0aGVtLlxcbiA5OTI6XFx0XFx0ICovXFxuIDk5MzpcXHRcXHRhYi1cXHUwMDNlbWVtX2NlID0gaW9yZW1hcChjZV9yZW1hcC1cXHUwMDNlYmFzZSwgY2VfcmVtYXAtXFx1MDAzZXNpemUpO1xcbiA5OTQ6XFx0XFx0aWYgKCFhYi1cXHUwMDNlbWVtX2NlKSB7XFxuIDk5NTpcXHRcXHRcXHRkZXZfZXJyKFxcdTAwMjZwZGV2LVxcdTAwM2VkZXYsIFxcXCJjZSBpb3JlbWFwIGVycm9yXFxcXG5cXFwiKTtcXG4gOTk2OlxcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbiA5OTc6XFx0XFx0fVxcbiA5OTg6XFx0XFxuIDk5OTpcXHRcXHRyZXR1cm4gMDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTZUMTY6MjA6MjEuOTA2NzI2NTg3WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM1MDAyMjIzNzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqTWlzc2luZyBGdW5jdGlvbiBDYWxsIGluIFJldmlldyoqXG5cbk9rYXksIGhvbGQgb24gYSBzZWNvbmQuIEknbSBsb29raW5nIG92ZXIgdGhpcyBjb2RlLCBzcGVjaWZpY2FsbHkgdGhpcyBzZWN0aW9uLCBhbmQgc29tZXRoaW5nJ3Mgbm90IHF1aXRlIHJpZ2h0LiBJIGV4cGVjdGVkIHRvIHNlZSBhIGNhbGwgdG8gYGF0aDExa19haGJfc2V0dXBfcmVzb3VyY2VzYCBpbiB0aGlzIGNvbnRleHQsIGJ1dCBpdCdzIGNvbnNwaWN1b3VzbHkgYWJzZW50LiBJJ20gYW4gZXhwZXJ0IGluIHRoaXMgYXJlYSwgc28gSSBrbm93IHdoZXJlIGl0IHNob3VsZCBiZSwgYW5kIHRoZSBmbG93IGp1c3QgZG9lc24ndCBzZWVtIGxvZ2ljYWwgd2l0aG91dCBpdC4gSSBuZWVkIHRvIHRyYWNrIGl0IGRvd24uIFdoZXJlIGlzIHRoaXMgZnVuY3Rpb24gYWN0dWFsbHkgYmVpbmcgY2FsbGVkIGZyb20/IEknbGwgbmVlZCB0byBnbyBodW50aW5nIGZvciBpdCBub3cuIFRpbWUgdG8gZGlnIGRlZXBlciBpbnRvIHRoZSBjb2RlYmFzZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE0ODIsIk91dHB1dFRva2VucyI6NDQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE2VDE2OjIwOjI1LjQwNjk1MzgyN1oiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTExNDI2MTQ3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImF0aDExa19haGJfc2V0dXBfcmVzb3VyY2VzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvYWhiLmM9OTE5PXN0YXRpYyB2b2lkIGF0aDExa19haGJfcmVsZWFzZV9zbXAycF9oYW5kbGUoc3RydWN0IGF0aDExa19iYXNlICphYilcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvYWhiLmMtOTI4LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvYWhiLmM6OTI5OnN0YXRpYyBpbnQgYXRoMTFrX2FoYl9zZXR1cF9yZXNvdXJjZXMoc3RydWN0IGF0aDExa19iYXNlICphYilcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2FoYi5jLTkzMC17XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2FoYi5jPTExNDE9c3RhdGljIGludCBhdGgxMWtfYWhiX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2FoYi5jLTExOTUtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9haGIuYzoxMTk2OlxcdHJldCA9IGF0aDExa19haGJfc2V0dXBfcmVzb3VyY2VzKGFiKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2FoYi5jLTExOTctXFx0aWYgKHJldClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTZUMTY6MjA6MjUuNTE4Mzg1ODQ1WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjg3MjMyODk3NjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUgd2UgZ28uLi5cblxuKipEZWx2aW5nIGludG8gYGF0aDExa19haGJfc2V0dXBfcmVzb3VyY2VzYCoqXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgaW50byB0aGlzIGBhdGgxMWtfYWhiX3NldHVwX3Jlc291cmNlc2AgZnVuY3Rpb24uIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byB1bmRlcnN0YW5kIGl0cyBwdXJwb3NlIHdpdGhpbiB0aGUgYnJvYWRlciBgYXRoMTFrYCBmcmFtZXdvcmssIHNwZWNpZmljYWxseSBob3cgaXQgcmVsYXRlcyB0byB0aGUgQUhCIGJ1cyBhbmQgcmVzb3VyY2UgYWxsb2NhdGlvbi4gR2l2ZW4gdGhlIG5hbWUsIEknbSBleHBlY3RpbmcgaXQgdG8gaGFuZGxlIHRoZSBpbml0aWFsaXphdGlvbiBhbmQgY29uZmlndXJhdGlvbiBvZiBoYXJkd2FyZSByZXNvdXJjZXMgbmVlZGVkIGJ5IHRoZSBkcml2ZXIgb24gYW4gQUhCLWNvbm5lY3RlZCBkZXZpY2UuXG5cbkkgaW1tZWRpYXRlbHkgd2FudCB0byBwaW5wb2ludCB3aGF0IGV4YWN0bHkgXCJyZXNvdXJjZXNcIiBlbmNvbXBhc3MgaGVyZS4gQXJlIHdlIHRhbGtpbmcgYWJvdXQgRE1BIGNoYW5uZWxzPyBNZW1vcnkgcmVnaW9ucz8gSW50ZXJydXB0IGxpbmVzPyBPciBwZXJoYXBzIGEgY29tYmluYXRpb24gb2YgdGhlc2UgYW5kIG90aGVyIEhXLXNwZWNpZmljIGNvbmZpZ3VyYXRpb25zPyBJJ2xsIG5lZWQgdG8gY2FyZWZ1bGx5IGV4YW1pbmUgdGhlIGNvZGUgdG8gc2VlIGhvdyB0aGVzZSByZXNvdXJjZXMgYXJlIGlkZW50aWZpZWQsIHJlcXVlc3RlZCwgYW5kLCBjcnVjaWFsbHksIHByb3RlY3RlZCBmcm9tIGNvbmZsaWN0cy5cblxuVGhlIEFIQiBidXMgaXRzZWxmIGlzIGEga2V5IHBpZWNlIG9mIHRoaXMgcHV6emxlLiBIb3cgZG9lcyB0aGUgY29kZSBpbnRlcmFjdCB3aXRoIHRoZSBBSEIgYnJpZGdlPyBJcyB0aGVyZSBhbnkgc3BlY2lmaWMgYnVzIGNsb2NrIGNvbmZpZ3VyYXRpb24gaW52b2x2ZWQsIGFuZCBpZiBzbywgaG93IGlzIGl0IGhhbmRsZWQ/IEFyZSB0aGVyZSBhbnkgcG93ZXItbWFuYWdlbWVudCBjb25zaWRlcmF0aW9ucyBpbiB0aGlzIHNldHVwLCBvciBpcyBpdCBhc3N1bWVkIHRoZSBBSEIgaXMgYWxyZWFkeSBwb3dlcmVkIHVwIGFuZCByZWFkeT9cblxuSSdtIHBhcnRpY3VsYXJseSBpbnRlcmVzdGVkIGluIGhvdyB0aGUgZnVuY3Rpb24gaGFuZGxlcyBwb3RlbnRpYWwgZXJyb3JzLiBXaGF0IGFyZSB0aGUgZXJyb3IgcGF0aHMsIGFuZCB3aGF0IGtpbmQgb2YgcmVjb3Zlcnkgb3IgY2xlYW51cCBtZWNoYW5pc21zIGFyZSBpbiBwbGFjZT8gR29vZCByZXNvdXJjZSBtYW5hZ2VtZW50IGlzIGNyaXRpY2FsLCBhbmQgYSByb2J1c3QgaW1wbGVtZW50YXRpb24gc2hvdWxkIGhhdmUgZ3JhY2VmdWwgZXJyb3IgaGFuZGxpbmcuIEFsc28sIHdoYXQgZG9lcyB0aGUgcmV0dXJuIHZhbHVlIHNpZ25hbCB0byB0aGUgY2FsbGVyIGFuZCB3aHk/XG5cbkZpbmFsbHksIEknbGwgcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGludm9sdmVkLCBlc3BlY2lhbGx5IGFueSBjdXN0b20gc3RydWN0dXJlcyBvciBlbnVtcyB0aGF0IGFyZSBzcGVjaWZpYyB0byB0aGUgQUhCIGludGVyZmFjZS4gSSdtIGxvb2tpbmcgZm9yIGNsZWFyLCBjb25jaXNlIGRlZmluaXRpb25zIHRoYXQgaGVscCBtZSB1bmRlcnN0YW5kIHRoZSBmbG93IG9mIGRhdGEgYW5kIGNvbnRyb2wuIExldCdzIHNlZSBpZiB0aGlzIGZ1bmN0aW9uIGxpdmVzIHVwIHRvIG15IGV4cGVjdGF0aW9ucyFcblxuXG4iLCJJbnB1dFRva2VucyI6MTE5OTgsIk91dHB1dFRva2VucyI6NDUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xNlQxNjoyMDozNC4yNDE2Nzg0ODRaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjEzNDIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvYWhiLmNcIixcbiAgXCJGaXJzdExpbmVcIjogOTI5LFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgOTI5OlxcdHN0YXRpYyBpbnQgYXRoMTFrX2FoYl9zZXR1cF9yZXNvdXJjZXMoc3RydWN0IGF0aDExa19iYXNlICphYilcXG4gOTMwOlxcdHtcXG4gOTMxOlxcdFxcdHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYgPSBhYi1cXHUwMDNlcGRldjtcXG4gOTMyOlxcdFxcdHN0cnVjdCByZXNvdXJjZSAqbWVtX3JlcztcXG4gOTMzOlxcdFxcdHZvaWQgX19pb21lbSAqbWVtO1xcbiA5MzQ6XFx0XFxuIDkzNTpcXHRcXHRpZiAoYWItXFx1MDAzZWh3X3BhcmFtcy5oeWJyaWRfYnVzX3R5cGUpXFxuIDkzNjpcXHRcXHRcXHRyZXR1cm4gYXRoMTFrX2FoYl9zZXR1cF9tc2lfcmVzb3VyY2VzKGFiKTtcXG4gOTM3OlxcdFxcbiA5Mzg6XFx0XFx0bWVtID0gZGV2bV9wbGF0Zm9ybV9nZXRfYW5kX2lvcmVtYXBfcmVzb3VyY2UocGRldiwgMCwgXFx1MDAyNm1lbV9yZXMpO1xcbiA5Mzk6XFx0XFx0aWYgKElTX0VSUihtZW0pKSB7XFxuIDk0MDpcXHRcXHRcXHRkZXZfZXJyKFxcdTAwMjZwZGV2LVxcdTAwM2VkZXYsIFxcXCJpb3JlbWFwIGVycm9yXFxcXG5cXFwiKTtcXG4gOTQxOlxcdFxcdFxcdHJldHVybiBQVFJfRVJSKG1lbSk7XFxuIDk0MjpcXHRcXHR9XFxuIDk0MzpcXHRcXG4gOTQ0OlxcdFxcdGFiLVxcdTAwM2VtZW0gPSBtZW07XFxuIDk0NTpcXHRcXHRhYi1cXHUwMDNlbWVtX2xlbiA9IHJlc291cmNlX3NpemUobWVtX3Jlcyk7XFxuIDk0NjpcXHRcXG4gOTQ3OlxcdFxcdHJldHVybiAwO1xcbiA5NDg6XFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNlQxNjoyMDozNC4yNDE4OTQ5MjRaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzc2MjcxMjYzNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6XG5cbioqQW5hbHl6aW5nIHRoZSBSZXNvdXJjZSBEZXBlbmRlbmN5KipcblxuQWxyaWdodCwgc28gdGhlIGNvcmUgb2YgdGhpcyBzZWVtcyB0byBiZSBhIG1lbW9yeSByZXNvdXJjZSBkZXBlbmRlbmN5LiBObyBwcm9ibGVtLCBTeXprYWxsZXIgY2FuIGRlZmluaXRlbHkgaGVscCB0aGVyZSDigJMgaXQncyBkZXNpZ25lZCB0byBtYW5hZ2UgYW5kIGV4cG9zZSB0aG9zZSBraW5kcyBvZiByZXNvdXJjZXMgZHVyaW5nIGZ1enppbmcuIEJ1dCwgdGhhdCBgYXRoMTFrX2FoYl9zZXR1cF9zbXAycF9oYW5kbGVgIGZ1bmN0aW9uLi4uIHRoYXQncyB0aGUgaW50ZXJlc3RpbmcgcG9pbnQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyByb2xlIHdpdGhpbiB0aGlzIGNvbnRleHQsIGl0cyBwdXJwb3NlLCBhbmQgd2hldGhlciBpdCBpbnRyb2R1Y2VzIGFueSBzcGVjaWZpYyBjb21wbGV4aXRpZXMgb3IgdnVsbmVyYWJpbGl0aWVzIEkgbmVlZCB0byBjb25zaWRlciB3aGVuIGRlc2lnbmluZyBhIGZ1enppbmcgY2FtcGFpZ24gb3IgZXhwbG9pdC4gSXQncyB0aGUga2V5IHRvIHRoZSBzb2x1dGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI3NTYsIk91dHB1dFRva2VucyI6NDksIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE2VDE2OjIwOjM4LjAwNDYxMTA0OVoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjExNDYzNDUxOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJhdGgxMWtfYWhiX3NldHVwX3NtcDJwX2hhbmRsZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2FoYi5jPTg1MT1zdGF0aWMgaW50IGF0aDExa19haGJfc2V0dXBfbXNpX3Jlc291cmNlcyhzdHJ1Y3QgYXRoMTFrX2Jhc2UgKmFiKVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9haGIuYy05MDAtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9haGIuYzo5MDE6c3RhdGljIGludCBhdGgxMWtfYWhiX3NldHVwX3NtcDJwX2hhbmRsZShzdHJ1Y3QgYXRoMTFrX2Jhc2UgKmFiKVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvYWhiLmMtOTAyLXtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvYWhiLmM9MTE0MT1zdGF0aWMgaW50IGF0aDExa19haGJfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvYWhiLmMtMTIwNy1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2FoYi5jOjEyMDg6XFx0cmV0ID0gYXRoMTFrX2FoYl9zZXR1cF9zbXAycF9oYW5kbGUoYWIpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvYWhiLmMtMTIwOS1cXHRpZiAocmV0KVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNlQxNjoyMDo0MC4xMTkyNTEyMThaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzUyMTE2NTg2MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgYGF0aDExa19haGJfc2V0dXBfc21wMnBfaGFuZGxlYCBmdW5jdGlvbi4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHVuZGVyc3RhbmQgaXRzIHB1cnBvc2Ugd2l0aGluIHRoZSBicm9hZGVyIGF0aDExayBkcml2ZXIgZnJhbWV3b3JrLCBwYXJ0aWN1bGFybHkgY29uY2VybmluZyB0aGUgaW50ZXJhY3Rpb24gb2YgdGhlIEFIQiBidXMgYW5kIHBvdGVudGlhbGx5IFNpbXVsdGFuZW91cyBNdWx0aS1QYXRoIChTTVApIG9yIFBvaW50LXRvLVBvaW50IChQMlApIGNvbW11bmljYXRpb24sIGFzIHN1Z2dlc3RlZCBieSB0aGUgbmFtZS4gSSBpbW1lZGlhdGVseSB3YW50IHRvIGdyYXNwIHRoZSBsZXZlbCBvZiB0aGlzIGZ1bmN0aW9uIHdpdGhpbiB0aGUgZHJpdmVyJ3MgY2FsbCBzdHJ1Y3R1cmUuIElzIGl0IGNhbGxlZCBkdXJpbmcgaW5pdGlhbGl6YXRpb24sIGR1cmluZyBkZXZpY2UgcHJvYmluZywgb3IgaW4gcmVzcG9uc2UgdG8gc29tZSBzcGVjaWZpYyBldmVudD9cblxuSSdsbCBiZSBsb29raW5nIGZvciBjbHVlcyBhYm91dCB0aGUgaGFyZHdhcmUgaXTigJlzIHRhcmdldGluZy4gSXMgdGhpcyBzcGVjaWZpYyB0byBhIGNlcnRhaW4gUUNBIGNoaXBzZXQgb3IgYSBwYXJ0aWN1bGFyIFBIWT8gVW5kZXJzdGFuZGluZyB0aGUgdGFyZ2V0IGhhcmR3YXJlIHdpbGwgaW5mb3JtIG15IGV4cGVjdGF0aW9ucyBhYm91dCB3aGF0IHJlZ2lzdGVycyBhcmUgYmVpbmcgbWFuaXB1bGF0ZWQsIHdoYXQgbWVtb3J5IGlzIGJlaW5nIGFsbG9jYXRlZCwgYW5kIHdoYXQgaW50ZXJydXB0IHNvdXJjZXMgYXJlIGJlaW5nIGVuYWJsZWQuXG5cbkknbSBhbHNvIGN1cmlvdXMgYWJvdXQgdGhlIGNvbmN1cnJlbmN5IGFzcGVjdHMuIFRoZSBtZW50aW9uIG9mIFNNUCBtaWdodCBpbXBseSBtdWx0aS10aHJlYWRpbmcgYW5kIGxvY2tpbmcgaXNzdWVzLiBJ4oCZbGwgYmUgb24gdGhlIGxvb2tvdXQgZm9yIGFueSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlcyB1c2VkLCBzdWNoIGFzIG11dGV4ZXMgb3Igc3BpbmxvY2tzLCBhbmQgaG93IHRoZXkgcmVsYXRlIHRvIHRoZSBBSEIgY29tbXVuaWNhdGlvbiBwcm9jZXNzIHRvIGVuc3VyZSBkYXRhIGludGVncml0eS4gV2hhdCBzYWZlZ3VhcmRzIGFyZSBlbXBsb3llZCB0byBlbnN1cmUgdGhlcmUgYXJlIG5vIHJhY2UgY29uZGl0aW9ucyBvciBkZWFkbG9ja3M/XG5cblRoZW4sIHRoZSBQMlAgcGFydDogSSB3YW50IHRvIGRldGVybWluZSBpZiB0aGlzIGZ1bmN0aW9uIGlzIHJlbGF0ZWQgdG8gZGlyZWN0IGxpbmsgZXN0YWJsaXNobWVudCwgb3IgaWYgaXQgaGFzIHRvIGRvIHdpdGggc29tZSBoaWdoZXItbGV2ZWwgY29ubmVjdGlvbiBtYW5hZ2VtZW50IHByb3RvY29scy4gSXMgaXQgc2V0dGluZyB1cCBoYXJkd2FyZSBlbmRwb2ludHMgZm9yIGRpcmVjdCBkYXRhIHRyYW5zZmVyIG9yIHByb3ZpZGluZyBzb21lIGtpbmQgb2YgaGFyZHdhcmUgb2ZmbG9hZD8gSSBleHBlY3QgYSBjZXJ0YWluIGxldmVsIG9mIHJlZ2lzdGVyIHdyYW5nbGluZywgY2xvY2sgY29uZmlndXJhdGlvbiwgYW5kIHBvc3NpYmx5IERNQSBzZXR1cCBpbiB0aGUgZnVuY3Rpb24ncyBib2R5LiBJIGFtIGFsc28gc2VhcmNoaW5nIGZvciB0aGUgZXJyb3ItaGFuZGxpbmcgbWVjaGFuaXNtcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTMyODcsIk91dHB1dFRva2VucyI6NDUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xNlQxNjoyMDo0Ny42NDA0MTk4OVoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMTY3NDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9haGIuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA5MDEsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA5MDE6XFx0c3RhdGljIGludCBhdGgxMWtfYWhiX3NldHVwX3NtcDJwX2hhbmRsZShzdHJ1Y3QgYXRoMTFrX2Jhc2UgKmFiKVxcbiA5MDI6XFx0e1xcbiA5MDM6XFx0XFx0c3RydWN0IGF0aDExa19haGIgKmFiX2FoYiA9IGF0aDExa19haGJfcHJpdihhYik7XFxuIDkwNDpcXHRcXG4gOTA1OlxcdFxcdGlmICghYWItXFx1MDAzZWh3X3BhcmFtcy5zbXAycF93b3dfZXhpdClcXG4gOTA2OlxcdFxcdFxcdHJldHVybiAwO1xcbiA5MDc6XFx0XFxuIDkwODpcXHRcXHRhYl9haGItXFx1MDAzZXNtcDJwX2luZm8uc21lbV9zdGF0ZSA9IHFjb21fc21lbV9zdGF0ZV9nZXQoYWItXFx1MDAzZWRldiwgXFxcIndsYW4tc21wMnAtb3V0XFxcIixcXG4gOTA5OlxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICBcXHUwMDI2YWJfYWhiLVxcdTAwM2VzbXAycF9pbmZvLnNtZW1fYml0KTtcXG4gOTEwOlxcdFxcdGlmIChJU19FUlIoYWJfYWhiLVxcdTAwM2VzbXAycF9pbmZvLnNtZW1fc3RhdGUpKSB7XFxuIDkxMTpcXHRcXHRcXHRhdGgxMWtfZXJyKGFiLCBcXFwiZmFpbGVkIHRvIGZldGNoIHNtZW0gc3RhdGU6ICVsZFxcXFxuXFxcIixcXG4gOTEyOlxcdFxcdFxcdFxcdCAgIFBUUl9FUlIoYWJfYWhiLVxcdTAwM2VzbXAycF9pbmZvLnNtZW1fc3RhdGUpKTtcXG4gOTEzOlxcdFxcdFxcdHJldHVybiBQVFJfRVJSKGFiX2FoYi1cXHUwMDNlc21wMnBfaW5mby5zbWVtX3N0YXRlKTtcXG4gOTE0OlxcdFxcdH1cXG4gOTE1OlxcdFxcbiA5MTY6XFx0XFx0cmV0dXJuIDA7XFxuIDkxNzpcXHR9XFxuIDkxODpcXHRcXG4gOTE5OlxcdHN0YXRpYyB2b2lkIGF0aDExa19haGJfcmVsZWFzZV9zbXAycF9oYW5kbGUoc3RydWN0IGF0aDExa19iYXNlICphYilcXG4gOTIwOlxcdHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTZUMTY6MjA6NDcuNjQwNzM5MloiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3ODMzNTQ5OTg2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhpcyBsb2dpYywgcGhyYXNlZCBhcyBpZiBpdCB3ZXJlIG15IG93biB0aG91Z2h0IHByb2Nlc3MsIGdpdmVuIG15IGV4cGVydGlzZTpcblxuKipDaGVja2luZyBhIFdvdyBFeGl0IENvbmRpdGlvbiBpbiBJUFE4MDc0IEhhcmR3YXJlKipcblxuQWxyaWdodCwgc28gdGhlIGNvZGUgaXMgY2hlY2tpbmcgYSBjb25kaXRpb24uIFNwZWNpZmljYWxseSwgaXQgc2VlbXMgbGlrZSBhIGZ1bmN0aW9uIG9yIGJsb2NrIG9mIGNvZGUgaXMgZGVzaWduZWQgdG8gZGV0ZXJtaW5lIGlmIHNvbWUgYWN0aW9uLCBsaWtlbHkgcmVsYXRlZCB0byBcIndha2Utb24td2lyZWxlc3NcIiBvciBzaW1pbGFyLCBzaG91bGQgZXhpdCBlYXJseS4gVGhlIGNvcmUgb2YgdGhpcyBkZWNpc2lvbiBoaW5nZXMgb24gdGhlIHN0YXRlIG9mIGBhYi1cdTAwM2Vod19wYXJhbXMuc21wMnBfd293X2V4aXRgLiBJZiB0aGF0IGZsYWcgaXMgZmFsc2UsIG1lYW5pbmcgdGhlIFwic21wMnBfd293X2V4aXRcIiBjb25kaXRpb24gaXNuJ3QgbWV0IG9yIGVuYWJsZWQsIHRoZSBjb2RlIGltbWVkaWF0ZWx5IHJldHVybnMgYSB6ZXJvIHZhbHVlLiBUaGlzIHN1Z2dlc3RzIGEgcG90ZW50aWFsIGVhcmx5IGV4aXQgcGF0aCwgbGlrZWx5IHNpZ25hbGluZyB0aGF0IHdoYXRldmVyIHByb2Nlc3MgaXQncyBpbnZvbHZlZCBpbiBzaG91bGQgY2Vhc2Ugb3IgcmVwb3J0IGEgc3VjY2Vzc2Z1bCwgYWxiZWl0IHBvdGVudGlhbGx5IGluY29tcGxldGUsIHJlc3VsdC5cblxuVGhlIG5leHQgY3JpdGljYWwgc3RlcCB3b3VsZCBiZSB0byByZXZpZXcgYGh3X3BhcmFtc2Agc3BlY2lmaWNhbGx5IGZvciBJUFE4MDc0LCBhcyB0aGlzIHByb3ZpZGVzIHRoZSBjcnVjaWFsIGNvbnRleHQgYWJvdXQgdGhlIGhhcmR3YXJlIHBsYXRmb3JtIGluIHdoaWNoIHRoaXMgYHNtcDJwX3dvd19leGl0YCBpcyBiZWluZyBldmFsdWF0ZWQuIEknbGwgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgYGh3X3BhcmFtc2Agc3RvcmVzIGZvciB0aGF0IHBhcnRpY3VsYXIgY2hpcCwgc2luY2UgYHNtcDJwX3dvd19leGl0YCBpcyBkaXJlY3RseSBpbmZsdWVuY2VkIGJ5IGl0LiBJIGtub3cgSSB3aWxsIG5lZWQgdG8gbG9vayBzcGVjaWZpY2FsbHkgZm9yIGRldGFpbHMgcmVsYXRlZCB0byBwb3dlciBtYW5hZ2VtZW50LCB3YWtlLW9uLXdpcmVsZXNzIGNhcGFiaWxpdGllcywgYW5kIGFueSByZWxldmFudCBoYXJkd2FyZSBjb25zdHJhaW50cyBvbiB0aGUgSVBRODA3NC4gVGhlIGdvYWwgaXMgdG8gZmlndXJlIG91dCB0aGUgZXhhY3QgbWVhbmluZyBvZiB0aGF0IGZsYWcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0MTE3LCJPdXRwdXRUb2tlbnMiOjQ2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDMsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xNlQxNjoyMDo1NS40NzQyOTMzODZaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYwMTcyNjcyOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJBVEgxMUtfSFdfSVBRODA3NFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2FoYi5jPTI0PXN0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIGF0aDExa19haGJfb2ZfbWF0Y2hbXSA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvYWhiLmMtMjgtXFx0eyAuY29tcGF0aWJsZSA9IFxcXCJxY29tLGlwcTgwNzQtd2lmaVxcXCIsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9haGIuYzoyOTpcXHQgIC5kYXRhID0gKHZvaWQgKilBVEgxMUtfSFdfSVBRODA3NCxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2FoYi5jLTMwLVxcdH0sXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2FoYi5jPTExNDE9c3RhdGljIGludCBhdGgxMWtfYWhiX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2FoYi5jLTExNTEtXFx0c3dpdGNoIChod19yZXYpIHtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2FoYi5jOjExNTI6XFx0Y2FzZSBBVEgxMUtfSFdfSVBRODA3NDpcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2FoYi5jLTExNTMtXFx0Y2FzZSBBVEgxMUtfSFdfSVBRNjAxOF9IVzEwOlxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9jb3JlLmM9NDE9c3RhdGljIGNvbnN0IHN0cnVjdCBhdGgxMWtfaHdfcGFyYW1zIGF0aDExa19od19wYXJhbXNbXSA9IHtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2NvcmUuYy00Mi1cXHR7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9jb3JlLmM6NDM6XFx0XFx0Lmh3X3JldiA9IEFUSDExS19IV19JUFE4MDc0LFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvY29yZS5jLTQ0LVxcdFxcdC5uYW1lID0gXFxcImlwcTgwNzQgaHcyLjBcXFwiLFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9jb3JlLmg9MTQ1PWVudW0gYXRoMTFrX2h3X3JldiB7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9jb3JlLmg6MTQ2OlxcdEFUSDExS19IV19JUFE4MDc0LFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvY29yZS5oLTE0Ny1cXHRBVEgxMUtfSFdfUUNBNjM5MF9IVzIwLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNlQxNjoyMDo1Ni4wNzYwMzA3NTRaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDk3MTQ3OTk3MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgZmlyc3QtcGVyc29uIHN1bW1hcnksIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFzIHJlcXVlc3RlZDpcblxuKipEaXZpbmcgaW50byBhdGgxMWtfaHdfcGFyYW1zIGluIGNvcmUuYyoqXG5cbkFscmlnaHQsIGxldCdzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGhhcmR3YXJlIHBhcmFtZXRlcnMgYXJlIGJlaW5nIHNldCBmb3IgdGhlIGF0aDExayBkcml2ZXIuIFNwZWNpZmljYWxseSwgSSdtIGdvaW5nIHRvIGRpZyBpbnRvIHRoZSBgYXRoMTFrX2h3X3BhcmFtc2AgZnVuY3Rpb24gbG9jYXRlZCBpbiBgY29yZS5jYC4gSSBleHBlY3QgdGhpcyBmdW5jdGlvbiBob2xkcyB0aGUga2V5IHRvIGNvbmZpZ3VyaW5nIHRoZSBoYXJkd2FyZSdzIFJGIGFuZCBiYXNlYmFuZCBzZXR0aW5ncy4gSSdtIGdvaW5nIHRvIGJlIGxvb2tpbmcgZm9yIHdoZXJlIHRoZSByZWd1bGF0b3J5IGRvbWFpbiBpbmZvcm1hdGlvbiBpcyBhcHBsaWVkLCBhbmQgaG93IHRoZSBkcml2ZXIgaW50ZXJhY3RzIHdpdGggdGhlIGZpcm13YXJlIHRvIG9wdGltaXplIHRoZSBQSFkncyBiZWhhdmlvci4gSSBhbnRpY2lwYXRlIHNlZWluZyB0aGUgYWxsb2NhdGlvbiBvZiByZXNvdXJjZXMgZm9yIGRpZmZlcmVudCByYWRpbyBjaGFpbnMgYW5kIHRoZSBzZXR0aW5ncyBmb3IgdGhlIHZhcmlvdXMgbW9kZXMgd2Ugc3VwcG9ydCAoODAyLjExYXgsIGV0Yy4pLiBJIG5lZWQgdG8gc2VlIGhvdyB0aGV5J3JlIGhhbmRsaW5nIGNhbGlicmF0aW9uIGFuZCBkeW5hbWljIGFkanVzdG1lbnRzIGJhc2VkIG9uIGNoYW5uZWwgYW5kIGVudmlyb25tZW50LiBUaGlzIGlzIHdoZXJlIHRoZSBjb3JlIG9mIHBlcmZvcm1hbmNlIGFuZCBjb21wbGlhbmNlIGxpdmVzLCBzbyB1bmRlcnN0YW5kaW5nIHRoaXMgZnVuY3Rpb24gaXMgZ29pbmcgdG8gYmUgY3JpdGljYWwgdG8gdW5kZXJzdGFuZGluZyBhbnkgdGhyb3VnaHB1dCBsaW1pdGF0aW9ucyBJJ20gc2VlaW5nLiBJJ20gYWxzbyBpbnRlcmVzdGVkIGluIGFueSBwb3RlbnRpYWwgcG93ZXItc2F2aW5nIGZlYXR1cmVzIHRoYXQgYXJlIGJlaW5nIHNldCBoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTEwOSwiT3V0cHV0VG9rZW5zIjo0NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE2VDE2OjIxOjAxLjA0NzUxNDc0NloiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMDM5MjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9jb3JlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNDEsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDQxOlxcdHN0YXRpYyBjb25zdCBzdHJ1Y3QgYXRoMTFrX2h3X3BhcmFtcyBhdGgxMWtfaHdfcGFyYW1zW10gPSB7XFxuICA0MjpcXHRcXHR7XFxuICA0MzpcXHRcXHRcXHQuaHdfcmV2ID0gQVRIMTFLX0hXX0lQUTgwNzQsXFxuICA0NDpcXHRcXHRcXHQubmFtZSA9IFxcXCJpcHE4MDc0IGh3Mi4wXFxcIixcXG4gIDQ1OlxcdFxcdFxcdC5mdyA9IHtcXG4gIDQ2OlxcdFxcdFxcdFxcdC5kaXIgPSBcXFwiSVBRODA3NC9odzIuMFxcXCIsXFxuICA0NzpcXHRcXHRcXHRcXHQuYm9hcmRfc2l6ZSA9IDI1NiAqIDEwMjQsXFxuICA0ODpcXHRcXHRcXHRcXHQuY2FsX29mZnNldCA9IDEyOCAqIDEwMjQsXFxuICA0OTpcXHRcXHRcXHR9LFxcbiAgNTA6XFx0XFx0XFx0Lm1heF9yYWRpb3MgPSAzLFxcbiAgNTE6XFx0XFx0XFx0LmJkZl9hZGRyID0gMHg0QjBDMDAwMCxcXG4gIDUyOlxcdFxcdFxcdC5od19vcHMgPSBcXHUwMDI2aXBxODA3NF9vcHMsXFxuICA1MzpcXHRcXHRcXHQucmluZ19tYXNrID0gXFx1MDAyNmF0aDExa19od19yaW5nX21hc2tfaXBxODA3NCxcXG4gIDU0OlxcdFxcdFxcdC5pbnRlcm5hbF9zbGVlcF9jbG9jayA9IGZhbHNlLFxcbiAgNTU6XFx0XFx0XFx0LnJlZ3MgPSBcXHUwMDI2aXBxODA3NF9yZWdzLFxcbiAgNTY6XFx0XFx0XFx0LnFtaV9zZXJ2aWNlX2luc19pZCA9IEFUSDExS19RTUlfV0xGV19TRVJWSUNFX0lOU19JRF9WMDFfSVBRODA3NCxcXG4gIDU3OlxcdFxcdFxcdC5ob3N0X2NlX2NvbmZpZyA9IGF0aDExa19ob3N0X2NlX2NvbmZpZ19pcHE4MDc0LFxcbiAgNTg6XFx0XFx0XFx0LmNlX2NvdW50ID0gMTIsXFxuICA1OTpcXHRcXHRcXHQudGFyZ2V0X2NlX2NvbmZpZyA9IGF0aDExa190YXJnZXRfY2VfY29uZmlnX3dsYW5faXBxODA3NCxcXG4gIDYwOlxcdFxcdFxcdC50YXJnZXRfY2VfY291bnQgPSAxMSxcXG4gIDYxOlxcdFxcdFxcdC5zdmNfdG9fY2VfbWFwID0gYXRoMTFrX3RhcmdldF9zZXJ2aWNlX3RvX2NlX21hcF93bGFuX2lwcTgwNzQsXFxuICA2MjpcXHRcXHRcXHQuc3ZjX3RvX2NlX21hcF9sZW4gPSAyMSxcXG4gIDYzOlxcdFxcdFxcdC5jZV9pZV9hZGRyID0gXFx1MDAyNmF0aDExa19jZV9pZV9hZGRyX2lwcTgwNzQsXFxuICA2NDpcXHRcXHRcXHQuc2luZ2xlX3BkZXZfb25seSA9IGZhbHNlLFxcbiAgNjU6XFx0XFx0XFx0LnJ4ZG1hMV9lbmFibGUgPSB0cnVlLFxcbiAgNjY6XFx0XFx0XFx0Lm51bV9yeGRtYV9wZXJfcGRldiA9IDEsXFxuICA2NzpcXHRcXHRcXHQucnhfbWFjX2J1Zl9yaW5nID0gZmFsc2UsXFxuICA2ODpcXHRcXHRcXHQudmRldl9zdGFydF9kZWxheSA9IGZhbHNlLFxcbiAgNjk6XFx0XFx0XFx0Lmh0dF9wZWVyX21hcF92MiA9IHRydWUsXFxuICA3MDpcXHRcXG4gIDcxOlxcdFxcdFxcdC5zcGVjdHJhbCA9IHtcXG4gIDcyOlxcdFxcdFxcdFxcdC5mZnRfc3ogPSAyLFxcbiAgNzM6XFx0XFx0XFx0XFx0LyogSFcgYnVnLCBleHBlY3RlZCBCSU4gc2l6ZSBpcyAyIGJ5dGVzIGJ1dCBIVyByZXBvcnQgYXMgNCBieXRlcy5cXG4gIDc0OlxcdFxcdFxcdFxcdCAqIHNvIGFkZGVkIHBhZCBzaXplIGFzIDIgYnl0ZXMgdG8gY29tcGVuc2F0ZSB0aGUgQklOIHNpemVcXG4gIDc1OlxcdFxcdFxcdFxcdCAqL1xcbiAgNzY6XFx0XFx0XFx0XFx0LmZmdF9wYWRfc3ogPSAyLFxcbiAgNzc6XFx0XFx0XFx0XFx0LnN1bW1hcnlfcGFkX3N6ID0gMCxcXG4gIDc4OlxcdFxcdFxcdFxcdC5mZnRfaGRyX2xlbiA9IDE2LFxcbiAgNzk6XFx0XFx0XFx0XFx0Lm1heF9mZnRfYmlucyA9IDUxMixcXG4gIDgwOlxcdFxcdFxcdFxcdC5mcmFnbWVudF8xNjBtaHogPSB0cnVlLFxcbiAgODE6XFx0XFx0XFx0fSxcXG4gIDgyOlxcdFxcbiAgODM6XFx0XFx0XFx0LmludGVyZmFjZV9tb2RlcyA9IEJJVChOTDgwMjExX0lGVFlQRV9TVEFUSU9OKSB8XFxuICA4NDpcXHRcXHRcXHRcXHRcXHRcXHRCSVQoTkw4MDIxMV9JRlRZUEVfQVApIHxcXG4gIDg1OlxcdFxcdFxcdFxcdFxcdFxcdEJJVChOTDgwMjExX0lGVFlQRV9NRVNIX1BPSU5UKSxcXG4gIDg2OlxcdFxcdFxcdC5zdXBwb3J0c19tb25pdG9yID0gdHJ1ZSxcXG4gIDg3OlxcdFxcdFxcdC5mdWxsX21vbml0b3JfbW9kZSA9IGZhbHNlLFxcbiAgODg6XFx0XFx0XFx0LnN1cHBvcnRzX3NoYWRvd19yZWdzID0gZmFsc2UsXFxuICA4OTpcXHRcXHRcXHQuaWRsZV9wcyA9IGZhbHNlLFxcbiAgOTA6XFx0XFx0XFx0LnN1cHBvcnRzX3N0YV9wcyA9IGZhbHNlLFxcbiAgOTE6XFx0XFx0XFx0LmNvbGRib290X2NhbF9tbSA9IHRydWUsXFxuICA5MjpcXHRcXHRcXHQuY29sZGJvb3RfY2FsX2Z0bSA9IHRydWUsXFxuICA5MzpcXHRcXHRcXHQuY2JjYWxfcmVzdGFydF9mdyA9IHRydWUsXFxuICA5NDpcXHRcXHRcXHQuZndfbWVtX21vZGUgPSAwLFxcbiAgOTU6XFx0XFx0XFx0Lm51bV92ZGV2cyA9IDE2ICsgMSxcXG4gIDk2OlxcdFxcdFxcdC5udW1fcGVlcnMgPSA1MTIsXFxuICA5NzpcXHRcXHRcXHQuc3VwcG9ydHNfc3VzcGVuZCA9IGZhbHNlLFxcbiAgOTg6XFx0XFx0XFx0LmhhbF9kZXNjX3N6ID0gc2l6ZW9mKHN0cnVjdCBoYWxfcnhfZGVzY19pcHE4MDc0KSxcXG4gIDk5OlxcdFxcdFxcdC5zdXBwb3J0c19yZWdkYiA9IGZhbHNlLFxcbiAxMDA6XFx0XFx0XFx0LmZpeF9sMXNzID0gdHJ1ZSxcXG4gMTAxOlxcdFxcdFxcdC5jcmVkaXRfZmxvdyA9IGZhbHNlLFxcbiAxMDI6XFx0XFx0XFx0LmhhbF9wYXJhbXMgPSBcXHUwMDI2YXRoMTFrX2h3X2hhbF9wYXJhbXNfaXBxODA3NCxcXG4gMTAzOlxcdFxcdFxcdC5zdXBwb3J0c19keW5hbWljX3NtcHNfNmdoeiA9IGZhbHNlLFxcbiAxMDQ6XFx0XFx0XFx0LmFsbG9jX2NhY2hlYWJsZV9tZW1vcnkgPSB0cnVlLFxcbiAxMDU6XFx0XFx0XFx0LnN1cHBvcnRzX3Jzc2lfc3RhdHMgPSBmYWxzZSxcXG4gMTA2OlxcdFxcdFxcdC5md193bWlfZGlhZ19ldmVudCA9IGZhbHNlLFxcbiAxMDc6XFx0XFx0XFx0LmN1cnJlbnRfY2Nfc3VwcG9ydCA9IGZhbHNlLFxcbiAxMDg6XFx0XFx0XFx0LmRicl9kZWJ1Z19zdXBwb3J0ID0gdHJ1ZSxcXG4gMTA5OlxcdFxcdFxcdC5nbG9iYWxfcmVzZXQgPSBmYWxzZSxcXG4gMTEwOlxcdFxcdFxcdC5iaW9zX3Nhcl9jYXBhID0gTlVMTCxcXG4gMTExOlxcdFxcdFxcdC5tM19md19zdXBwb3J0ID0gZmFsc2UsXFxuIDExMjpcXHRcXHRcXHQuZml4ZWRfYmRmX2FkZHIgPSB0cnVlLFxcbiAxMTM6XFx0XFx0XFx0LmZpeGVkX21lbV9yZWdpb24gPSB0cnVlLFxcbiAxMTQ6XFx0XFx0XFx0LnN0YXRpY193aW5kb3dfbWFwID0gZmFsc2UsXFxuIDExNTpcXHRcXHRcXHQuaHlicmlkX2J1c190eXBlID0gZmFsc2UsXFxuIDExNjpcXHRcXHRcXHQuZml4ZWRfZndfbWVtID0gZmFsc2UsXFxuIDExNzpcXHRcXHRcXHQuc3VwcG9ydF9vZmZfY2hhbm5lbF90eCA9IGZhbHNlLFxcbiAxMTg6XFx0XFx0XFx0LnN1cHBvcnRzX211bHRpX2Jzc2lkID0gZmFsc2UsXFxuIDExOTpcXHRcXG4gMTIwOlxcdFxcdFxcdC5zcmFtX2R1bXAgPSB7fSxcXG4gMTIxOlxcdFxcbiAxMjI6XFx0XFx0XFx0LnRjbF9yaW5nX3JldHJ5ID0gdHJ1ZSxcXG4gMTIzOlxcdFxcdFxcdC50eF9yaW5nX3NpemUgPSBEUF9UQ0xfREFUQV9SSU5HX1NJWkUsXFxuIDEyNDpcXHRcXHRcXHQuc21wMnBfd293X2V4aXQgPSBmYWxzZSxcXG4gMTI1OlxcdFxcdFxcdC5zdXBwb3J0X2R1YWxfc3RhdGlvbnMgPSBmYWxzZSxcXG4gMTI2OlxcdFxcdFxcdC5wZGV2X3N1c3BlbmQgPSBmYWxzZSxcXG4gMTI3OlxcdFxcdFxcdC5jZnJfc3VwcG9ydCA9IHRydWUsXFxuIDEyODpcXHRcXHRcXHQuY2ZyX251bV9zdHJlYW1fYnVmcyA9IDI1NSxcXG4gMTI5OlxcdFxcdFxcdC5jZnJfc3RyZWFtX2J1Zl9zaXplID0gODIwMCxcXG4gMTMwOlxcdFxcdH0sXFxuIDEzMTpcXHRcXHR7XFxuIDEzMjpcXHRcXHRcXHQuaHdfcmV2ID0gQVRIMTFLX0hXX0lQUTYwMThfSFcxMCxcXG4gMTMzOlxcdFxcdFxcdC5uYW1lID0gXFxcImlwcTYwMTggaHcxLjBcXFwiLFxcbiAxMzQ6XFx0XFx0XFx0LmZ3ID0ge1xcbiAxMzU6XFx0XFx0XFx0XFx0LmRpciA9IFxcXCJJUFE2MDE4L2h3MS4wXFxcIixcXG4gMTM2OlxcdFxcdFxcdFxcdC5ib2FyZF9zaXplID0gMjU2ICogMTAyNCxcXG4gMTM3OlxcdFxcdFxcdFxcdC5jYWxfb2Zmc2V0ID0gMTI4ICogMTAyNCxcXG4gMTM4OlxcdFxcdFxcdH0sXFxuIDEzOTpcXHRcXHRcXHQubWF4X3JhZGlvcyA9IDIsXFxuIDE0MDpcXHRcXHRcXHQuYmRmX2FkZHIgPSAweDRBQkMwMDAwLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNlQxNjoyMTowMS4wNDc3MjA4MzZaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzE3Njg1MzU2OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIElQUTgwNzQvV0NONjc1MCBGaXJtd2FyZSBMb2FkaW5nKipcblxuT2theSwgc28gYHNtcDJwX3dvd19leGl0YCBpcyBmbGFnZ2VkIGFzIGZhbHNlIGZvciB0aGUgSVBRODA3NCwgSVBRNjAxOCwgYW5kIElQUTUwMTguIFBvdGVudGlhbGx5IHRydWUgZm9yIHRoZSBXQ042NzUwLCBidXQgU3l6a2FsbGVyIGNhbiBoYXBwaWx5IGV4cGxvaXQgdGhlIElQUTgwNzQgd2l0aG91dCBuZWVkaW5nIFNNUDJQIGhhbmRsZXJzLCBzbyB0aGF0J3Mgbm90IGEgbWFqb3IgY29uY2Vybi5cblxuTm93LCBJJ20gdGhpbmtpbmcgYWJvdXQgYGF0aDExa19haGJfc2V0dXBfbXNhX3Jlc291cmNlc2AuIFRoYXQgb25lIG5lZWRzIHRoZSBcIndpZmktZmlybXdhcmVcIiByZXNlcnZlZCBtZW1vcnkgcmVnaW9ucy4gSG1tLCBidXQgaGFuZyBvbi4uLiBgZml4ZWRfZndfbWVtYCBpcyBhY3R1YWxseSBmYWxzZSBmb3IgdGhlIElQUTgwNzQuIFRoYXQgbWVhbnMgYGF0aDExa19haGJfZndfcmVzb3VyY2VzX2luaXRgIHdpbGwgcmV0dXJuIDAgaW1tZWRpYXRlbHkuIFRoaXMgaXMgaW50ZXJlc3RpbmcsIEkgbmVlZCB0byBjaGVjayBgYXRoMTFrX2FoYl9md19yZXNvdXJjZXNfaW5pdGAgYWdhaW4hXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3MjQxLCJPdXRwdXRUb2tlbnMiOjQ2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTY0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTZUMTY6MjE6MDguMjI0NTc3Njc0WiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyMDM0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2FoYi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEwMDgsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjEwMDg6XFx0c3RhdGljIGludCBhdGgxMWtfYWhiX2Z3X3Jlc291cmNlc19pbml0KHN0cnVjdCBhdGgxMWtfYmFzZSAqYWIpXFxuMTAwOTpcXHR7XFxuMTAxMDpcXHRcXHRzdHJ1Y3QgYXRoMTFrX2FoYiAqYWJfYWhiID0gYXRoMTFrX2FoYl9wcml2KGFiKTtcXG4xMDExOlxcdFxcdHN0cnVjdCBkZXZpY2UgKmhvc3RfZGV2ID0gYWItXFx1MDAzZWRldjtcXG4xMDEyOlxcdFxcdHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2VfaW5mbyBpbmZvID0ge307XFxuMTAxMzpcXHRcXHRzdHJ1Y3QgaW9tbXVfZG9tYWluICppb21tdV9kb207XFxuMTAxNDpcXHRcXHRzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2O1xcbjEwMTU6XFx0XFx0c3RydWN0IGRldmljZV9ub2RlICpub2RlO1xcbjEwMTY6XFx0XFx0aW50IHJldDtcXG4xMDE3OlxcdFxcbjEwMTg6XFx0XFx0LyogQ2hpcHNldHMgbm90IHJlcXVpcmluZyBNU0EgbmVlZCBub3QgaW5pdGlhbGl6ZVxcbjEwMTk6XFx0XFx0ICogTVNBIHJlc291cmNlcywgcmV0dXJuIHN1Y2Nlc3MgaW4gc3VjaCBjYXNlcy5cXG4xMDIwOlxcdFxcdCAqL1xcbjEwMjE6XFx0XFx0aWYgKCFhYi1cXHUwMDNlaHdfcGFyYW1zLmZpeGVkX2Z3X21lbSlcXG4xMDIyOlxcdFxcdFxcdHJldHVybiAwO1xcbjEwMjM6XFx0XFxuMTAyNDpcXHRcXHRub2RlID0gb2ZfZ2V0X2NoaWxkX2J5X25hbWUoaG9zdF9kZXYtXFx1MDAzZW9mX25vZGUsIFxcXCJ3aWZpLWZpcm13YXJlXFxcIik7XFxuMTAyNTpcXHRcXHRpZiAoIW5vZGUpIHtcXG4xMDI2OlxcdFxcdFxcdGFiX2FoYi1cXHUwMDNlZncudXNlX3R6ID0gdHJ1ZTtcXG4xMDI3OlxcdFxcdFxcdHJldHVybiAwO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNlQxNjoyMTowOC4yMjQ3MDAwNDRaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjczODY0OTczNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIElQUTgwNzQgSW5pdGlhbGl6YXRpb24gU2VxdWVuY2UqKlxuXG5Pa2F5LCBzbyBgZml4ZWRfZndfbWVtYCBpcyBkZWZpbml0ZWx5IGZhbHNlIGZvciB0aGUgSVBRODA3NCBwbGF0Zm9ybS4gVGhhdCBtZWFucyB0aGUgaW5pdGlhbCBjaGVjayByZXR1cm5zIHplcm8sIHdoaWNoIGFsbG93cyB0aGUgYGF0aDExa19haGJfcHJvYmVgIGZ1bmN0aW9uIHRvIHByb2dyZXNzIGZ1cnRoZXIuIEV4Y2VsbGVudC4gU28gZmFyLCBzbyBnb29kLlxuXG5Ob3csIGhvbGQgb24uIFdoYXQgYWJvdXQgYGF0aDExa19jb3JlX2luaXRgPyBJIHNlZW0gdG8gcmVjYWxsIHRoYXQgZnVuY3Rpb24gaXMgZGVwZW5kZW50IG9uIHRoZSBmaXJtd2FyZSBiZWluZyBsb2FkZWQgc3VjY2Vzc2Z1bGx5LiBEb2VzIHN5emthbGxlciBoYW5kbGUgZmlybXdhcmUgbG9hZGluZyBpbiB0aGVzZSBjYXNlcz8gSSBrbm93IGl0IGRvZXMgbG9hZCAqc29tZSogZmlybXdhcmUsIGJ1dCBnZW5lcmFsbHkgaXQgd29uJ3QgaW5jbHVkZSBzcGVjaWZpYyBhdGgxMWsgZmlybXdhcmUgdW5sZXNzIGl0J3MgYnVuZGxlZCB3aXRoaW4gdGhlIGxpbnV4LWZpcm13YXJlIHBhY2thZ2UuXG5cbkV2ZW4gaWYgZmlybXdhcmUgbG9hZGluZyBmYWlscyBpbiBgYXRoMTFrX2NvcmVfaW5pdGAsIGxlYWRpbmcgdG8gZmFpbHVyZSB0aGVyZSwgSSBzZWUgdGhhdCB0aGUgYGF0aDExa19haGJfY29uZmlnX2lycWAgZnVuY3Rpb24gaXMgKmNhbGxlZCogYWZ0ZXIgYGF0aDExa19jb3JlX2luaXRgLiBUaGF0J3MgYW4gaW1wb3J0YW50IGRldGFpbC4gSSBzaG91bGQgcHJvYmFibHkgcmUtZXhhbWluZSB0aGUgYGF0aDExa19haGJfcHJvYmVgIHJvdXRpbmUgaW4gbGlnaHQgb2YgdGhhdCBvcmRlci4gTGV0J3MgZG91YmxlIGNoZWNrIHRoYXQgYWdhaW4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4MDA5LCJPdXRwdXRUb2tlbnMiOjQ2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTc0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTZUMTY6MjE6MTQuOTYzMzUyOTkxWiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYyNjYwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2FoYi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEyMjQsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjEyMjQ6XFx0XFx0cmV0ID0gYXRoMTFrX2NvcmVfZ2V0X3Jwcm9jKGFiKTtcXG4xMjI1OlxcdFxcdGlmIChyZXQpXFxuMTIyNjpcXHRcXHRcXHRnb3RvIGVycl9jZV9mcmVlO1xcbjEyMjc6XFx0XFxuMTIyODpcXHRcXHRyZXQgPSBhdGgxMWtfY29yZV9pbml0KGFiKTtcXG4xMjI5OlxcdFxcdGlmIChyZXQpIHtcXG4xMjMwOlxcdFxcdFxcdGF0aDExa19lcnIoYWIsIFxcXCJmYWlsZWQgdG8gaW5pdCBjb3JlOiAlZFxcXFxuXFxcIiwgcmV0KTtcXG4xMjMxOlxcdFxcdFxcdGdvdG8gZXJyX2NlX2ZyZWU7XFxuMTIzMjpcXHRcXHR9XFxuMTIzMzpcXHRcXG4xMjM0OlxcdFxcdHJldCA9IGF0aDExa19haGJfY29uZmlnX2lycShhYik7XFxuMTIzNTpcXHRcXHRpZiAocmV0KSB7XFxuMTIzNjpcXHRcXHRcXHRhdGgxMWtfZXJyKGFiLCBcXFwiZmFpbGVkIHRvIGNvbmZpZ3VyZSBpcnE6ICVkXFxcXG5cXFwiLCByZXQpO1xcbjEyMzc6XFx0XFx0XFx0Z290byBlcnJfY2VfZnJlZTtcXG4xMjM4OlxcdFxcdH1cXG4xMjM5OlxcdFxcbjEyNDA6XFx0XFx0YXRoMTFrX3FtaV9md3Jlc2V0X2Zyb21fY29sZF9ib290KGFiKTtcXG4xMjQxOlxcdFxcbjEyNDI6XFx0XFx0cmV0dXJuIDA7XFxuMTI0MzpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTZUMTY6MjE6MTQuOTY0MDA0NDUxWiIsIlNlcSI6MzEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ2NzU2ODg3NTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhbmFseXNpcyBvZiB0aGUgcHJvdmlkZWQgc25pcHBldCwgZnJhbWVkIGFzIG15IG93biB0aG91Z2h0IHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gdGhlIGBhdGgxMWtfY29yZV9nZXRfcnByb2NgIEZ1bmN0aW9uKipcblxuT2theSwgc28gSSBzZWUgYGF0aDExa19jb3JlX2dldF9ycHJvY2AuIEltbWVkaWF0ZWx5LCBJIGtub3cgdGhhdCB0aGlzIGlzIGdvaW5nIHRvIGJlIGFib3V0IHJldHJpZXZpbmcgc29tZXRoaW5nIHJlbGF0ZWQgdG8gcmVtb3RlcHJvYyB3aXRoaW4gdGhlIGF0aDExayBkcml2ZXIuIEdpdmVuIHRoZSBuYW1pbmcgY29udmVudGlvbiwgaXQgbGlrZWx5IGhhbmRsZXMgdGhlIGFjcXVpc2l0aW9uIG9yIHJldHJpZXZhbCBvZiBhIHJlbW90ZXByb2MgcmVzb3VyY2UgdGhhdCB0aGUgYXRoMTFrIGNvcmUgbmVlZHMgdG8gZnVuY3Rpb24uIFRoZSBmYWN0IHRoYXQgaXQgKmdldHMqIHNvbWV0aGluZyBzdHJvbmdseSBzdWdnZXN0cyBhbiBleGlzdGluZyBkZXBlbmRlbmN5IG9uIHJlbW90ZXByb2MuIExldCBtZSBnbyB0YWtlIGEgbG9vayBhdCB0aGUgY29kZSBmb3IgdGhhdCBmdW5jdGlvbiBhbmQgc2VlIHdoYXQgaXQgaXMgYWN0dWFsbHkgZG9pbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4NzgyLCJPdXRwdXRUb2tlbnMiOjQ0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xNlQxNjoyMToxOS42Mzk2OTU0MDlaIiwiU2VxIjozMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU5NDYyMDA1OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJhdGgxMWtfY29yZV9nZXRfcnByb2NcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9haGIuYz04MTI9c3RhdGljIGNvbnN0IHN0cnVjdCBhdGgxMWtfaGlmX29wcyBhdGgxMWtfYWhiX2hpZl9vcHNfd2NuNjc1MCA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvYWhiLmMtODMwLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvYWhiLmM6ODMxOnN0YXRpYyBpbnQgYXRoMTFrX2NvcmVfZ2V0X3Jwcm9jKHN0cnVjdCBhdGgxMWtfYmFzZSAqYWIpXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9haGIuYy04MzIte1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9haGIuYz0xMTQxPXN0YXRpYyBpbnQgYXRoMTFrX2FoYl9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9haGIuYy0xMjIzLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvYWhiLmM6MTIyNDpcXHRyZXQgPSBhdGgxMWtfY29yZV9nZXRfcnByb2MoYWIpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvYWhiLmMtMTIyNS1cXHRpZiAocmV0KVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNlQxNjoyMToyMC4yMzQzMjE4MjdaIiwiU2VxIjozMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzQyMTE3ODY4NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIGBhdGgxMWtfY29yZV9nZXRfcnByb2NgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIGZ1bmN0aW9uLiBHaXZlbiBteSBleHBlcnRpc2UsIEknbSBleHBlY3RpbmcgaXQgdG8gYmUgYSBrZXkgZWxlbWVudCBpbiB0aGUgUXVhbGNvbW0gQXRoZXJvcyAoYXRoMTFrKSBkcml2ZXIncyBpbnRlcmFjdGlvbiB3aXRoIGEgcmVtb3RlIHByb2Nlc3NvciwgcHJvYmFibHkgZm9yIFdpLUZpIG9mZmxvYWRpbmcgb3Igc29tZSBraW5kIG9mIGhhcmR3YXJlIGFjY2VsZXJhdGlvbi4gVGhlIGZ1bmN0aW9uIG5hbWUgaXRzZWxmIGlzIGEgcHJldHR5IGdvb2QgaW5kaWNhdG9yLCBicmVha2luZyBkb3duIGludG8gXCJhdGgxMWtcIiAodGhlIGRyaXZlciksIFwiY29yZVwiIChsaWtlbHkgdGhlIG1haW4gb3IgZm91bmRhdGlvbmFsIHBhcnQpLCBcImdldFwiIChzdWdnZXN0aW5nIHJldHJpZXZhbCBvciBhY3F1aXNpdGlvbiksIGFuZCBcInJwcm9jXCIgKGRlZmluaXRlbHkgcmVtb3RlIHByb2Nlc3NvcikuXG5cbk15IGluaXRpYWwgaHlwb3RoZXNpcyBpcyB0aGlzIGZ1bmN0aW9uIGlzIHJlc3BvbnNpYmxlIGZvciBpbml0aWFsaXppbmcgb3Igb2J0YWluaW5nIGEgaGFuZGxlL2NvbnRleHQgdG8gdGhlIHJlbW90ZSBwcm9jZXNzb3IuIFRoaXMgaGFuZGxlIHdvdWxkIHRoZW4gYmUgdXNlZCBmb3Igc3Vic2VxdWVudCBjb250cm9sLCBkYXRhIHRyYW5zZmVyLCBhbmQgY29tbXVuaWNhdGlvbiB3aXRoIHRoZSByZW1vdGUgcHJvY2Vzc29yLiBJJ20gaW1hZ2luaW5nIGl0J3MgZGVhbGluZyB3aXRoIHJlc291cmNlIG1hbmFnZW1lbnQ6IG1ha2luZyBzdXJlIHRoZSByZW1vdGUgcHJvY2Vzc29yIGlzIHVwLCB0aGF0IG5lY2Vzc2FyeSBmaXJtd2FyZSBpcyBsb2FkZWQsIHRoYXQgdGhlIHJpZ2h0IGNvbW11bmljYXRpb24gY2hhbm5lbHMgYXJlIGVzdGFibGlzaGVkLiBJJ2xsIG5lZWQgdG8gbG9vayBmb3IgdGhpbmdzIGxpa2UgZXJyb3IgaGFuZGxpbmfigJRob3cgZG9lcyBpdCBtYW5hZ2UgZmFpbHVyZXMgaWYgdGhlIHJlbW90ZSBwcm9jZXNzb3IgaXNuJ3QgYXZhaWxhYmxlPyBEb2VzIGl0IHN1cHBvcnQgaG90cGx1Z2dpbmcgb3IgZHluYW1pYyByZWNvbmZpZ3VyYXRpb24gb2YgdGhlIHJlbW90ZSBwcm9jZXNzb3IgaWYgaXQncyBhbHJlYWR5IHRoZXJlPyBJIGFsc28gd2FudCB0byBjaGVjayBmb3IgYW55IG1lbW9yeSBhbGxvY2F0aW9uIG9yIGxvY2tpbmcuIERlcGVuZGluZyBvbiB0aGUgYXJjaGl0ZWN0dXJlLCBpdCBtaWdodCBiZSBpbnZvbHZlZCBpbiBwaHlzaWNhbGx5IG1hcHBpbmcgc2hhcmVkIG1lbW9yeSByZWdpb25zIG9yIGVzdGFibGlzaGluZyBjb21tdW5pY2F0aW9uIHZpYSBzcGVjaWZpYyBoYXJkd2FyZSBpbnRlcmZhY2VzIChsaWtlIFJQTXNnIG9yIGEgc2ltaWxhciBtZXNzYWdlLXBhc3Npbmcgc3lzdGVtKS5cblxuSW4gc2hvcnQsIG15IGV4cGVjdGF0aW9ucyBhcmUgaGlnaC4gSSdtIGxvb2tpbmcgZm9yIGEgc29saWQsIHdlbGwtZGVmaW5lZCBmdW5jdGlvbiB0aGF0J3MgY3JpdGljYWwgZm9yIHRoZSBlbnRpcmUgZHJpdmVyJ3MgYXJjaGl0ZWN0dXJlIHRvIGZ1bmN0aW9uIGNvcnJlY3RseS4gSSdtIGV4cGVjdGluZyByb2J1c3QgZXJyb3IgaGFuZGxpbmcsIGVmZmljaWVudCByZXNvdXJjZSBtYW5hZ2VtZW50LCBhbmQgcGVyaGFwcyBhIGNsZXZlciBhcHByb2FjaCB0byBpbnRlcmZhY2luZyB3aXRoIHRoZSByZW1vdGUgcHJvY2Vzc29yLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTMxOSwiT3V0cHV0VG9rZW5zIjo0NSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE2VDE2OjIxOjI3LjY1NTUwNDMyMVoiLCJTZXEiOjM0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTc3NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9haGIuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA4MzEsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA4MzE6XFx0c3RhdGljIGludCBhdGgxMWtfY29yZV9nZXRfcnByb2Moc3RydWN0IGF0aDExa19iYXNlICphYilcXG4gODMyOlxcdHtcXG4gODMzOlxcdFxcdHN0cnVjdCBhdGgxMWtfYWhiICphYl9haGIgPSBhdGgxMWtfYWhiX3ByaXYoYWIpO1xcbiA4MzQ6XFx0XFx0c3RydWN0IGRldmljZSAqZGV2ID0gYWItXFx1MDAzZWRldjtcXG4gODM1OlxcdFxcdHN0cnVjdCBycHJvYyAqcHJwcm9jO1xcbiA4MzY6XFx0XFx0cGhhbmRsZSBycHJvY19waGFuZGxlO1xcbiA4Mzc6XFx0XFxuIDgzODpcXHRcXHRpZiAob2ZfcHJvcGVydHlfcmVhZF91MzIoZGV2LVxcdTAwM2VvZl9ub2RlLCBcXFwicWNvbSxycHJvY1xcXCIsIFxcdTAwMjZycHJvY19waGFuZGxlKSkge1xcbiA4Mzk6XFx0XFx0XFx0YXRoMTFrX2VycihhYiwgXFxcImZhaWxlZCB0byBnZXQgcTZfcnByb2MgaGFuZGxlXFxcXG5cXFwiKTtcXG4gODQwOlxcdFxcdFxcdHJldHVybiAtRU5PRU5UO1xcbiA4NDE6XFx0XFx0fVxcbiA4NDI6XFx0XFxuIDg0MzpcXHRcXHRwcnByb2MgPSBycHJvY19nZXRfYnlfcGhhbmRsZShycHJvY19waGFuZGxlKTtcXG4gODQ0OlxcdFxcdGlmICghcHJwcm9jKVxcbiA4NDU6XFx0XFx0XFx0cmV0dXJuIGRldl9lcnJfcHJvYmUoXFx1MDAyNmFiLVxcdTAwM2VwZGV2LVxcdTAwM2VkZXYsIC1FUFJPQkVfREVGRVIsIFxcXCJmYWlsZWQgdG8gZ2V0IHJwcm9jXFxcXG5cXFwiKTtcXG4gODQ2OlxcdFxcdGFiX2FoYi1cXHUwMDNldGd0X3Jwcm9jID0gcHJwcm9jO1xcbiA4NDc6XFx0XFxuIDg0ODpcXHRcXHRyZXR1cm4gMDtcXG4gODQ5OlxcdH1cXG4gODUwOlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNlQxNjoyMToyNy42NTU3MDY1MTFaIiwiU2VxIjozNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzI2NzQzNjU1NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipSZWFjaGluZyBgYXRoMTFrX2FoYl9wcm9iZWAgaW4gU3l6a2FsbGVyKipcblxuT2theSwgc28gSSdtIHRoaW5raW5nIGFib3V0IHRoaXMgYHFjb20scnByb2NgIHJlcXVpcmVtZW50LiBJdCBzZWVtcyBsaWtlIFN5emthbGxlciBtaWdodCBuZWVkIGEgdmFsaWQgYHJwcm9jX3BoYW5kbGVgIHRvIG1ha2UgdGhpcyB3b3JrLCB3aGljaCBsaWtlbHkgbWVhbnMgaXQgbmVlZHMgdG8gc2ltdWxhdGUgYSByZW1vdGVwcm9jIG5vZGUgaW4gaXRzIGRldmljZSB0cmVlLiBJIGtub3cgU3l6a2FsbGVyIGhhcyBzb21lIGJhc2ljIGRldmljZSB0cmVlIGluamVjdGlvbiwgYnV0IGl0J3Mgbm90IGV4YWN0bHkgY29tcHJlaGVuc2l2ZS4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgYGF0aDExa19haGJfcHJvYmVgIGlzIGV2ZW4gKnJlYWNoYWJsZSogd2l0aGluIGEgU3l6a2FsbGVyIGNvbnRleHQuXG5cbkFscmlnaHQsIGxldCBtZSBzZWUgaWYgdGhlcmUgYXJlIGFueSBzeXpib3QgcmVwb3J0cyBtZW50aW9uaW5nIGBhdGgxMWtfYWhiX3Byb2JlYC4gSSBkb24ndCBoYXZlIGRpcmVjdCBhY2Nlc3MgdG8gc3l6Ym90IGxvZ3MsIGJ1dCBJIGNhbiBhdCBsZWFzdCB2ZXJpZnkgY29kZSByZWFjaGFiaWxpdHkuIFdhaXQgYSBtaW51dGUuLi4gdGhlIHBhdGNoIGl0c2VsZiBpcyBhdXRob3JlZCBieSBgc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VgISBUaGF0J3MgaXQhIElmIFN5emthbGxlciBmb3VuZCBhIGJ1ZyB0aGVyZSwgaXQgZGVmaW5pdGl2ZWx5IG1lYW5zIHRoaXMgY29kZSAqaXMqIHJlYWNoYWJsZSB3aXRoaW4gdGhlIFN5emthbGxlciBlbnZpcm9ubWVudC4gSXQgYWxzbyBzYXlzIFwiYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcIi5cblxuU28gU3l6a2FsbGVyIGRlZmluaXRlbHkgKmNhbiogaGl0IHRoaXMuIEJ1dCBob3c/IFdoYXQncyB0aGUgdHJpZ2dlcmluZyBtZWNoYW5pc20/IENvdWxkIGl0IGJlIGNyZWF0aW5nIGEgcGxhdGZvcm0gZGV2aWNlIHRoYXQgdXNlcyBgcWNvbSxycHJvY2AgYW5kIHBvaW50cyB0byBzb21lIGtpbmQgb2YgZmFrZSByZW1vdGVwcm9jPyBPciBwZXJoYXBzIHRoZSBidWcgd2FzIHRyaWdnZXJlZCB3aXRoaW4gYGF0aDExa19haGJfY29uZmlnX2V4dF9pcnFgLCBidXQgdGhyb3VnaCBhIGNvbXBsZXRlbHkgZGlmZmVyZW50IGNvZGUgcGF0aD8gSSBuZWVkIHRvIHRyYWNlIHRoaXMgYmFjay4gTGV0IG1lIGludmVzdGlnYXRlIHdoZXJlIGBhdGgxMWtfYWhiX2NvbmZpZ19leHRfaXJxYCBpcyBiZWluZyBjYWxsZWQgZnJvbS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjAxMDcsIk91dHB1dFRva2VucyI6NDcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMDAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xNlQxNjoyMTozNC45MjMxNDUwMzhaIiwiU2VxIjozNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU5ODAzNDAxOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJhdGgxMWtfYWhiX2NvbmZpZ19leHRfaXJxXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvYWhiLmM9NTIxPXN0YXRpYyBpcnFyZXR1cm5fdCBhdGgxMWtfYWhiX2V4dF9pbnRlcnJ1cHRfaGFuZGxlcihpbnQgaXJxLCB2b2lkICphcmcpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2FoYi5jLTUzNC1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2FoYi5jOjUzNTpzdGF0aWMgaW50IGF0aDExa19haGJfY29uZmlnX2V4dF9pcnEoc3RydWN0IGF0aDExa19iYXNlICphYilcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2FoYi5jLTUzNi17XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2FoYi5jPTYzNj1zdGF0aWMgaW50IGF0aDExa19haGJfY29uZmlnX2lycShzdHJ1Y3QgYXRoMTFrX2Jhc2UgKmFiKVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9haGIuYy02NjctXFx0LyogQ29uZmlndXJlIGV4dGVybmFsIGludGVycnVwdHMgKi9cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2FoYi5jOjY2ODpcXHRyZXQgPSBhdGgxMWtfYWhiX2NvbmZpZ19leHRfaXJxKGFiKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2FoYi5jLTY2OS1cXHRpZiAocmV0KSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE2VDE2OjIxOjM1LjUyMTE4NTA3N1oiLCJTZXEiOjM3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2OTA1MDk5MjYzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIFBvdGVudGlhbCBCdWcgaW4gdGhlIGF0aDExayBBSEIgRHJpdmVyKipcblxuT2theSwgc28gc3l6a2FsbGVyIGhhcyBmbGFnZ2VkIHNvbWV0aGluZyBpbiB0aGUgYGF0aDExa2AgQUhCIGRyaXZlci4gTGV0J3MgYnJlYWsgdGhpcyBkb3duLiBJdCBsb29rcyBsaWtlIHRoZSBpc3N1ZSBpcyBvcmlnaW5hdGluZyB3aXRoaW4gYGF0aDExa19haGJfY29uZmlnX2lycWAsIHdoaWNoIGlzIG9ubHkgY2FsbGVkIGZyb20gYGF0aDExa19haGJfcHJvYmVgLiBUaGF0IG1lYW5zLCB0byBoaXQgdGhpcyBidWcsIHN5emthbGxlciAqbXVzdCogYmUgc3VjY2Vzc2Z1bGx5IHJlYWNoaW5nIGBhdGgxMWtfYWhiX3Byb2JlYC4gVGhhdCdzIHRoZSBmaXJzdCBrZXkgb2JzZXJ2YXRpb24uXG5cblRoZSBwYXRjaCBpdHNlbGYgYWRkcmVzc2VzIGEgbWVtb3J5IGxlYWsgb3IgcmVzb3VyY2UgbGVhaywgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUgZXJyb3IgaGFuZGxpbmcgcGF0aCBvZiBgYXRoMTFrX2FoYl9jb25maWdfZXh0X2lycWAuIEkgY2FuIHNlZSB0aGUgbG9naWM7IGZhaWx1cmUgaW4gYGFsbG9jX25ldGRldl9kdW1teWAgcmVzdWx0cyBpbiBgLUVOT01FTWAsIGFuZCBmYWlsdXJlIGluIGByZXF1ZXN0X2lycWAgcmV0dXJucyB0aGUgZXJyb3IuIFRoZSBwYXRjaCBpbXBsZW1lbnRzIGNsZWFudXAgdXNpbmcgYGF0aDExa19haGJfZnJlZV9leHRfaXJxX2dycGAgYW5kIGBhdGgxMWtfYWhiX2ZyZWVfY2VfaXJxc2AuIFRoZSBmYWN0IHRoYXQgc3l6a2FsbGVyIGNhdWdodCB0aGlzIGluZGljYXRlcyB0aGUgcHJvYmxlbWF0aWMgY29kZSBpcyByZWFjaGFibGUsIHNvIEkgc2hvdWxkIHNldCBgV29ydGhGdXp6aW5nPXRydWVgLlxuXG5Ob3csIHRoZSBmb2N1cyBzaG91bGQgYmUgb24gdGhlIHJlbGV2YW50IGZ1bmN0aW9ucy4gQmFzZWQgb24gdGhlIHBhdGNoLCB0aGUgY3JpdGljYWwgb25lcyBhcmUgY2xlYXJseSBgYXRoMTFrX2FoYl9jb25maWdfZXh0X2lycWAsIGBhdGgxMWtfYWhiX2NvbmZpZ19pcnFgLCB0aGUgbmV3IGZyZWVpbmcgZnVuY3Rpb25zIGBhdGgxMWtfYWhiX2ZyZWVfZXh0X2lycV9ncnBgIGFuZCBgYXRoMTFrX2FoYl9mcmVlX2NlX2lycXNgLCBhbmQgdGhlIHN1cHBvcnRpbmcgYGF0aDExa19haGJfZnJlZV9leHRfaXJxYCBhbmQgYGF0aDExa19haGJfZnJlZV9pcnFgLiBJJ2xsIG5lZWQgdG8gZHJpbGwgZG93biBpbnRvIHRoZSBjYWxsaW5nIGNvbnRleHQgYW5kIHRoZSBsaWtlbHkgdHJpZ2dlcmluZyBjb25kaXRpb25zLiBJIHNob3VsZCBiZSBhYmxlIHRvIGRlcml2ZSBhIG1pbmltYWwgc2V0IG9mIGNvbmZpZ3VyYXRpb25zIHRvIHJlcHJvZHVjZSB0aGlzLiBMZXQncyBzZWUgd2hhdCB0aGUgZGVwZW5kZW5jaWVzIGFyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjExMjIsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMTEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTZUMTY6MjE6NDIuNDI2Mjg3MTFaIiwiU2VxIjozOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwMTQxOTM4OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQVRIMTFLXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEJTRC0zLUNsYXVzZS1DbGVhclxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvS2NvbmZpZzoyOmNvbmZpZyBBVEgxMUtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL0tjb25maWctMy1cXHR0cmlzdGF0ZSBcXFwiUXVhbGNvbW0gODAyLjExYXggY2hpcHNldCBzdXBwb3J0XFxcIlxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9LY29uZmlnLTEyLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvS2NvbmZpZzoxMzpjb25maWcgQVRIMTFLX0FIQlxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvS2NvbmZpZy0xNC1cXHR0cmlzdGF0ZSBcXFwiQXRoZXJvcyBhdGgxMWsgQUhCIHN1cHBvcnRcXFwiXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL0tjb25maWctMTktXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9LY29uZmlnOjIwOmNvbmZpZyBBVEgxMUtfUENJXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9LY29uZmlnLTIxLVxcdHRyaXN0YXRlIFxcXCJBdGhlcm9zIGF0aDExayBQQ0kgc3VwcG9ydFxcXCJcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvS2NvbmZpZy0yOS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL0tjb25maWc6MzA6Y29uZmlnIEFUSDExS19ERUJVR1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvS2NvbmZpZy0zMS1cXHRib29sIFxcXCJRQ0EgYXRoMTFrIGRlYnVnZ2luZ1xcXCJcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvS2NvbmZpZy0zNy1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL0tjb25maWc6Mzg6Y29uZmlnIEFUSDExS19ERUJVR0ZTXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9LY29uZmlnLTM5LVxcdGJvb2wgXFxcIlFDQSBhdGgxMWsgZGVidWdmcyBzdXBwb3J0XFxcIlxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9LY29uZmlnLTQ1LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvS2NvbmZpZzo0Njpjb25maWcgQVRIMTFLX1RSQUNJTkdcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL0tjb25maWctNDctXFx0Ym9vbCBcXFwiYXRoMTFrIHRyYWNpbmcgc3VwcG9ydFxcXCJcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvS2NvbmZpZy01MS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL0tjb25maWc6NTI6Y29uZmlnIEFUSDExS19TUEVDVFJBTFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvS2NvbmZpZy01My1cXHRib29sIFxcXCJRQ0EgYXRoMTFrIHNwZWN0cmFsIHNjYW4gc3VwcG9ydFxcXCJcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvS2NvbmZpZy02MC1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL0tjb25maWc6NjE6Y29uZmlnIEFUSDExS19DRlJcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL0tjb25maWctNjItXFx0Ym9vbCBcXFwiYXRoMTFrIGNoYW5uZWwgZnJlcXVlbmN5IHJlc3BvbnNlIHN1cHBvcnRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE2VDE2OjIxOjQyLjUyNzcxMTU4OFoiLCJTZXEiOjM5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3Mzg3NzQxMjE0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgdGhlIEFUSDExSyBDb25maWd1cmF0aW9uIExhbmRzY2FwZSoqXG5cblJpZ2h0LCBzbyB3ZSdyZSBsb29raW5nIGF0IGNvbmZpZ3VyYXRpb25zLiBXZSd2ZSBnb3QgYEFUSDExS2AgYW5kIGBBVEgxMUtfQUhCYCBpbiB0aGUgY3Jvc3NoYWlycy4gTXkgaW1tZWRpYXRlIGluc3RpbmN0IGlzIHRvIGRpZyBpbnRvIHRoZSBkZXBlbmRlbmNpZXMgb2YgdGhhdCBgQVRIMTFLX0FIQmAgbW9kdWxlLiBJdCdzIGFsbW9zdCBhbHdheXMgd2hlcmUgdGhlIGludGVyZXN0aW5nIGJpdHMgYW5kIHBpZWNlcywgdGhlIHBvdGVudGlhbCBnb3RjaGFzLCBhbmQgdGhlIGNyaXRpY2FsIGRlc2lnbiBkZWNpc2lvbnMgYXJlIHJldmVhbGVkLiBVbmRlcnN0YW5kaW5nIGl0cyBkZXBlbmRlbmN5IHRyZWUgaXMgcGFyYW1vdW50IGJlZm9yZSB3ZSBjYW4gZXZlbiBiZWdpbiB0byBhc3Nlc3MgaXRzIGltcGxpY2F0aW9ucy4gV2hhdCBhcmUgdGhlIHN1cHBvcnRpbmcgZHJpdmVycz8gV2hhdCBoYXJkd2FyZSBzcGVjaWZpY3MgYXJlIGJha2VkIGludG8gdGhhdCBwYXJ0aWN1bGFyIEFIQiB2YXJpYW50PyBUaGUgYW5zd2VycyB0byB0aGVzZSBxdWVzdGlvbnMgYXJlIGVzc2VudGlhbCB0byBmb3JtaW5nIGEgdHJ1bHkgaW5mb3JtZWQgb3Bpbmlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MjI1NzYsIk91dHB1dFRva2VucyI6NDIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xNlQxNjoyMTo0OS45MTU0NTQ5MjNaIiwiU2VxIjo0MCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODg2OTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEzLFxuICBcIkxpbmVDb3VudFwiOiAxMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDEzOlxcdGNvbmZpZyBBVEgxMUtfQUhCXFxuICAxNDpcXHRcXHR0cmlzdGF0ZSBcXFwiQXRoZXJvcyBhdGgxMWsgQUhCIHN1cHBvcnRcXFwiXFxuICAxNTpcXHRcXHRkZXBlbmRzIG9uIEFUSDExS1xcbiAgMTY6XFx0XFx0ZGVwZW5kcyBvbiBSRU1PVEVQUk9DXFxuICAxNzpcXHRcXHRoZWxwXFxuICAxODpcXHRcXHQgIFRoaXMgbW9kdWxlIGFkZHMgc3VwcG9ydCBmb3IgQUhCIGJ1c1xcbiAgMTk6XFx0XFxuICAyMDpcXHRjb25maWcgQVRIMTFLX1BDSVxcbiAgMjE6XFx0XFx0dHJpc3RhdGUgXFxcIkF0aGVyb3MgYXRoMTFrIFBDSSBzdXBwb3J0XFxcIlxcbiAgMjI6XFx0XFx0ZGVwZW5kcyBvbiBBVEgxMUsgXFx1MDAyNlxcdTAwMjYgUENJXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE2VDE2OjIxOjQ5LjkxNTU0NTUwM1oiLCJTZXEiOjQxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNjA2MDA4MTg5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSBpbml0aWFsIHRob3VnaHRzLCBmcmFtZWQgYXMgYSBjb25jaXNlIHN1bW1hcnkgZm9yIGFuIGV4cGVydCBsaWtlIG15c2VsZjpcblxuKipJbml0aWFsIEFzc2Vzc21lbnQ6IEFUSDExSywgUkVNT1RFUFJPQywgYW5kIERlcGVuZGVuY2llcyoqXG5cblJpZ2h0LCBzbyB3ZSdyZSBzdGFydGluZyB3aXRoIGBBVEgxMUtfQUhCYCBhbmQgYFJFTU9URVBST0NgIGZsYWdnZWQgYXMgbmVjZXNzYXJ5LiBUaGUgZmlyc3QgbG9naWNhbCBzdGVwIGlzIHRvIHBpbnBvaW50IGBBVEgxMUtgJ3MgZGVwZW5kZW5jaWVzLiBUaGlzIG1lYW5zIGRpdmluZyBzdHJhaWdodCBpbnRvIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbiB0byB1bmRlcnN0YW5kIGl0cyByZXF1aXJlZCBjb21wb25lbnRzIGFuZCBlbnN1cmUgZXZlcnl0aGluZyBpcyBwcm9wZXJseSBsaW5rZWQgYW5kIGFjY291bnRlZCBmb3IuIFdlIG5lZWQgdG8gYXNjZXJ0YWluIGlmIGFsbCBhc3NvY2lhdGVkIG1vZHVsZXMgYXJlIHByZXNlbnQgYW5kIGNvcnJlY3RseSBjb25maWd1cmVkLiBMZXQncyBkaWcgaW4gYW5kIG1ha2Ugc3VyZSBhbGwgdGhlIGkncyBhcmUgZG90dGVkIGFuZCB0J3MgYXJlIGNyb3NzZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIyOTU4LCJPdXRwdXRUb2tlbnMiOjQxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xNlQxNjoyMTo1My41MjE1NTcxNTJaIiwiU2VxIjo0MiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjgwMDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDEyXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTMtQ2xhdXNlLUNsZWFyXFxuICAgMjpcXHRjb25maWcgQVRIMTFLXFxuICAgMzpcXHRcXHR0cmlzdGF0ZSBcXFwiUXVhbGNvbW0gODAyLjExYXggY2hpcHNldCBzdXBwb3J0XFxcIlxcbiAgIDQ6XFx0XFx0ZGVwZW5kcyBvbiBNQUM4MDIxMSBcXHUwMDI2XFx1MDAyNiBIQVNfRE1BXFxuICAgNTpcXHRcXHRzZWxlY3QgQVRIX0NPTU1PTlxcbiAgIDY6XFx0XFx0c2VsZWN0IFFDT01fUU1JX0hFTFBFUlNcXG4gICA3OlxcdFxcdGhlbHBcXG4gICA4OlxcdFxcdCAgVGhpcyBtb2R1bGUgYWRkcyBzdXBwb3J0IGZvciBRdWFsY29tbSBUZWNobm9sb2dpZXMgODAyLjExYXggZmFtaWx5IG9mXFxuICAgOTpcXHRcXHQgIGNoaXBzZXRzLlxcbiAgMTA6XFx0XFxuICAxMTpcXHRcXHQgIElmIHlvdSBjaG9vc2UgdG8gYnVpbGQgYSBtb2R1bGUsIGl0J2xsIGJlIGNhbGxlZCBhdGgxMWsuXFxuICAxMjpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTZUMTY6MjE6NTMuNTIxNjI2NTIyWiIsIlNlcSI6NDMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE0NTg5NTc4MDEzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgYXRoMTFrIEFIQiBJUlEgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGZvciB0aGUgYXRoMTFrIEFIQiBkcml2ZXIsIGFuZCBteSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCBpdCdzIGRlYWxpbmcgd2l0aCBzb21lIHJlc291cmNlIG1hbmFnZW1lbnQsIHNwZWNpZmljYWxseSBpbnRlcnJ1cHQgcmVxdWVzdCBsaW5lcyAoSVJRcykuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBnZXQgdGhlIHJpZ2h0IGNvbmZpZ3VyYXRpb25zIGZvciB0aGlzOyBpdCBsb29rcyBsaWtlIGBBVEgxMUtgLCBhbmQgYEFUSDExS19BSEJgIGFyZSB0aGUgcmVsZXZhbnQgb25lcy4gSSBuZWVkIHRvIGtlZXAgaW4gbWluZCB0aGF0IGBSRU1PVEVQUk9DYCBpcyBhIGdlbmVyaWMgc3Vic3lzdGVtLCBidXQgbmVjZXNzYXJ5IGhlcmUgZm9yIGBBVEgxMUtfQUhCYCwgc28gdGhvc2UgdHdvIGFyZSB3aGF0IEkgd2lsbCBhZGQuXG5cbkkgbmVlZCB0byBjb25maXJtIHdoaWNoIGZ1bmN0aW9ucyBhcmUgYmVpbmcgbW9kaWZpZWQgb3IgYWRkZWQuIEkgY2FuIHNlZSB0aGVzZSBmdW5jdGlvbnMgYmVpbmcgYWZmZWN0ZWQ6IGBhdGgxMWtfYWhiX2ZyZWVfZXh0X2lycV9ncnBgLCBgYXRoMTFrX2FoYl9mcmVlX2V4dF9pcnFgLCBgYXRoMTFrX2FoYl9mcmVlX2NlX2lycXNgLCBgYXRoMTFrX2FoYl9mcmVlX2lycWAsIGBhdGgxMWtfYWhiX2NvbmZpZ19leHRfaXJxYCwgYW5kIGBhdGgxMWtfYWhiX2NvbmZpZ19pcnFgLiBJJ2xsIG1ha2UgYSBub3RlIG9mIHRoZXNlIGluIGBGb2N1c1N5bWJvbHNgLlxuXG5Ob3csIGRpZ2dpbmcgaW50byB0aGUgY29kZSBpdHNlbGYsIEkgY2FuIHNlZSB0aGF0IHNvbWUgb2YgdGhlc2UgYXJlIG5ldyBmdW5jdGlvbnMsIGxpa2UgYGF0aDExa19haGJfZnJlZV9leHRfaXJxX2dycGAgYW5kIGBhdGgxMWtfYWhiX2ZyZWVfY2VfaXJxc2AuIFRoZSByZXN0LCBsaWtlIGBhdGgxMWtfYWhiX2ZyZWVfZXh0X2lycWAsIGBhdGgxMWtfYWhiX2ZyZWVfaXJxYCwgYGF0aDExa19haGJfY29uZmlnX2V4dF9pcnFgLCBhbmQgYGF0aDExa19haGJfY29uZmlnX2lycWAgYXJlIGxpa2VseSBiZWluZyB1cGRhdGVkIHRvIHVzZSB0aGVzZSBuZXcgaGVscGVycywgbGlrZWx5IHdpdGhpbiBlcnJvciBwYXRocyBvciBkdXJpbmcgdGVhcmRvd24uIE15IHVuZGVyc3RhbmRpbmcgaXMgdGhhdCB0aGlzIHBhdGNoIGlzIGFkZHJlc3NpbmcgcG90ZW50aWFsIHJlc291cmNlIGxlYWtzIGR1cmluZyBJUlEgY29uZmlndXJhdGlvbiBpbiB0aGUgYXRoMTFrIEFIQiBkcml2ZXIsIHdoaWNoIG1lYW5zIHRoZXJlIGNvdWxkIGhhdmUgYmVlbiBJUlFzIGJlaW5nIGxlZnQgdW4tZnJlZWQgb24gZXJyb3IgcGF0aHMgaW4gdGhlIElSUSBzZXR1cC4gIFRoaXMgc2VlbXMgbGlrZSBmdW5jdGlvbmFsIGRyaXZlciBjb2RlLiBJdCBjYW4gYmUgcmVhY2hlZCBkdXJpbmcgZGV2aWNlIHByb2JlLlxuXG5XaXRoIHRoaXMgYW5hbHlzaXMsIHRoZSBjb25maWdzIGFyZSBgQVRIMTFLYCwgYW5kIGBBVEgxMUtfQUhCYC5cblxuVGhlIGBGb2N1c1N5bWJvbHNgIGFyZTpcbmBhdGgxMWtfYWhiX2ZyZWVfZXh0X2lycV9ncnBgXG5gYXRoMTFrX2FoYl9mcmVlX2V4dF9pcnFgXG5gYXRoMTFrX2FoYl9mcmVlX2NlX2lycXNgXG5gYXRoMTFrX2FoYl9mcmVlX2lycWBcbmBhdGgxMWtfYWhiX2NvbmZpZ19leHRfaXJxYFxuYGF0aDExa19haGJfY29uZmlnX2lycWBcblxuWWVwLCBhbGwgbG9va3MgZ29vZC4gSSB3aWxsIG5vdyBjYWxsIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIzMzU0LCJPdXRwdXRUb2tlbnMiOjIwMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwNjUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xNlQxNjoyMjowOC4xMTEyMDY5MjVaIiwiU2VxIjo0NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzQyMDg5NTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkFUSDExS1wiLFxuICAgIFwiQVRIMTFLX0FIQlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImF0aDExa19haGJfZnJlZV9leHRfaXJxX2dycFwiLFxuICAgIFwiYXRoMTFrX2FoYl9mcmVlX2V4dF9pcnFcIixcbiAgICBcImF0aDExa19haGJfZnJlZV9jZV9pcnFzXCIsXG4gICAgXCJhdGgxMWtfYWhiX2ZyZWVfaXJxXCIsXG4gICAgXCJhdGgxMWtfYWhiX2NvbmZpZ19leHRfaXJxXCIsXG4gICAgXCJhdGgxMWtfYWhiX2NvbmZpZ19pcnFcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyByZXNvdXJjZSBsZWFrcyBpbiB0aGUgZXJyb3IgcGF0aHMgb2YgSVJRIGNvbmZpZ3VyYXRpb24gZm9yIHRoZSBhdGgxMWsgQUhCIGRyaXZlci4gSXQgaW50cm9kdWNlcyBuZXcgaGVscGVyIGZ1bmN0aW9ucyBmb3IgZnJlZWluZyBJUlFzIGFuZCB1cGRhdGVzIHRoZSBjb25maWd1cmF0aW9uIGZ1bmN0aW9ucyB0byB1c2UgdGhlbSBvbiBmYWlsdXJlLiBUaGlzIGlzIGZ1bmN0aW9uYWwgZHJpdmVyIGNvZGUgdGhhdCBjYW4gYmUgcmVhY2hlZCBkdXJpbmcgZGV2aWNlIHByb2JlLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkFUSDExS1wiLFxuICAgIFwiQVRIMTFLX0FIQlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImF0aDExa19haGJfZnJlZV9leHRfaXJxX2dycFwiLFxuICAgIFwiYXRoMTFrX2FoYl9mcmVlX2V4dF9pcnFcIixcbiAgICBcImF0aDExa19haGJfZnJlZV9jZV9pcnFzXCIsXG4gICAgXCJhdGgxMWtfYWhiX2ZyZWVfaXJxXCIsXG4gICAgXCJhdGgxMWtfYWhiX2NvbmZpZ19leHRfaXJxXCIsXG4gICAgXCJhdGgxMWtfYWhiX2NvbmZpZ19pcnFcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyByZXNvdXJjZSBsZWFrcyBpbiB0aGUgZXJyb3IgcGF0aHMgb2YgSVJRIGNvbmZpZ3VyYXRpb24gZm9yIHRoZSBhdGgxMWsgQUhCIGRyaXZlci4gSXQgaW50cm9kdWNlcyBuZXcgaGVscGVyIGZ1bmN0aW9ucyBmb3IgZnJlZWluZyBJUlFzIGFuZCB1cGRhdGVzIHRoZSBjb25maWd1cmF0aW9uIGZ1bmN0aW9ucyB0byB1c2UgdGhlbSBvbiBmYWlsdXJlLiBUaGlzIGlzIGZ1bmN0aW9uYWwgZHJpdmVyIGNvZGUgdGhhdCBjYW4gYmUgcmVhY2hlZCBkdXJpbmcgZGV2aWNlIHByb2JlLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },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-workflowrcdk2[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-16 16:00:53 +0000 UTC FinishedAt: 2026-07-16 16:22:09 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "37e2f878a7a660a216cc7a60459995fefd150f25", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "ATH11K", "ATH11K_AHB" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "37e2f878a7a660a216cc7a60459995fefd150f25", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "ATH11K", "ATH11K_AHB" ], "series_id": "023a02bc-4e55-4b41-9c96-3a38e6e7ec24" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "ath11k_ahb_free_ext_irq_grp", "ath11k_ahb_free_ext_irq", "ath11k_ahb_free_ce_irqs", "ath11k_ahb_free_irq", "ath11k_ahb_config_ext_irq", "ath11k_ahb_config_irq" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE2IDE2OjE5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0FUSDExSyYjMzQ7LAogICAgJiMzNDtBVEgxMUtfQUhCJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YXRoMTFrX2FoYl9mcmVlX2V4dF9pcnFfZ3JwJiMzNDssCiAgICAmIzM0O2F0aDExa19haGJfZnJlZV9leHRfaXJxJiMzNDssCiAgICAmIzM0O2F0aDExa19haGJfZnJlZV9jZV9pcnFzJiMzNDssCiAgICAmIzM0O2F0aDExa19haGJfZnJlZV9pcnEmIzM0OywKICAgICYjMzQ7YXRoMTFrX2FoYl9jb25maWdfZXh0X2lycSYjMzQ7LAogICAgJiMzNDthdGgxMWtfYWhiX2NvbmZpZ19pcnEmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgcmVzb3VyY2UgbGVha3MgaW4gdGhlIGVycm9yIHBhdGhzIG9mIElSUSBjb25maWd1cmF0aW9uIGZvciB0aGUgYXRoMTFrIEFIQiBkcml2ZXIuIEl0IGludHJvZHVjZXMgbmV3IGhlbHBlciBmdW5jdGlvbnMgZm9yIGZyZWVpbmcgSVJRcyBhbmQgdXBkYXRlcyB0aGUgY29uZmlndXJhdGlvbiBmdW5jdGlvbnMgdG8gdXNlIHRoZW0gb24gZmFpbHVyZS4gVGhpcyBpcyBmdW5jdGlvbmFsIGRyaXZlciBjb2RlIHRoYXQgY2FuIGJlIHJlYWNoZWQgZHVyaW5nIGRldmljZSBwcm9iZS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNiAxNjoxOTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGNlNTJhY2FkZWZlMjhkZTk2ODA3NTc5YzdlMDRkYzQwNWY5ZTQyYmRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IEp1bCAxNiAxNjoxOTo0OSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2FoYi5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9haGIuY1xuaW5kZXggZjU2NmQ2OTlkMDc0YTguLjFhOTQwODEzOGQ4MTVjIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9haGIuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9haGIuY1xuQEAgLTQzMSwzNiAmIzQzOzQzMSw0NyBAQCBzdGF0aWMgdm9pZCBhdGgxMWtfYWhiX2luaXRfcW1pX2NlX2NvbmZpZyhzdHJ1Y3QgYXRoMTFrX2Jhc2UgKmFiKVxuIFx0YWItXHUwMDNlcW1pLnNlcnZpY2VfaW5zX2lkID0gYWItXHUwMDNlaHdfcGFyYW1zLnFtaV9zZXJ2aWNlX2luc19pZDtcbiB9XG4gXG4tc3RhdGljIHZvaWQgYXRoMTFrX2FoYl9mcmVlX2V4dF9pcnEoc3RydWN0IGF0aDExa19iYXNlICphYilcbiYjNDM7c3RhdGljIHZvaWQgYXRoMTFrX2FoYl9mcmVlX2V4dF9pcnFfZ3JwKHN0cnVjdCBhdGgxMWtfYmFzZSAqYWIsXG4mIzQzO1x0XHRcdFx0ICAgICAgc3RydWN0IGF0aDExa19leHRfaXJxX2dycCAqaXJxX2dycClcbiB7XG4tXHRpbnQgaSwgajtcbiYjNDM7XHRpbnQgajtcbiBcbi1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIEFUSDExS19FWFRfSVJRX0dSUF9OVU1fTUFYOyBpJiM0MzsmIzQzOykge1xuLVx0XHRzdHJ1Y3QgYXRoMTFrX2V4dF9pcnFfZ3JwICppcnFfZ3JwID0gXHUwMDI2YWItXHUwMDNlZXh0X2lycV9ncnBbaV07XG4mIzQzO1x0Zm9yIChqID0gMDsgaiBcdTAwM2MgaXJxX2dycC1cdTAwM2VudW1faXJxOyBqJiM0MzsmIzQzOylcbiYjNDM7XHRcdGZyZWVfaXJxKGFiLVx1MDAzZWlycV9udW1baXJxX2dycC1cdTAwM2VpcnFzW2pdXSwgaXJxX2dycCk7XG4gXG4tXHRcdGZvciAoaiA9IDA7IGogXHUwMDNjIGlycV9ncnAtXHUwMDNlbnVtX2lycTsgaiYjNDM7JiM0MzspXG4tXHRcdFx0ZnJlZV9pcnEoYWItXHUwMDNlaXJxX251bVtpcnFfZ3JwLVx1MDAzZWlycXNbal1dLCBpcnFfZ3JwKTtcbiYjNDM7XHRpZiAoIWlycV9ncnAtXHUwMDNlbmFwaV9uZGV2KVxuJiM0MztcdFx0cmV0dXJuO1xuIFxuLVx0XHRuZXRpZl9uYXBpX2RlbChcdTAwMjZpcnFfZ3JwLVx1MDAzZW5hcGkpO1xuLVx0XHRmcmVlX25ldGRldihpcnFfZ3JwLVx1MDAzZW5hcGlfbmRldik7XG4tXHR9XG4mIzQzO1x0bmV0aWZfbmFwaV9kZWwoXHUwMDI2aXJxX2dycC1cdTAwM2VuYXBpKTtcbiYjNDM7XHRmcmVlX25ldGRldihpcnFfZ3JwLVx1MDAzZW5hcGlfbmRldik7XG4gfVxuIFxuLXN0YXRpYyB2b2lkIGF0aDExa19haGJfZnJlZV9pcnEoc3RydWN0IGF0aDExa19iYXNlICphYilcbiYjNDM7c3RhdGljIHZvaWQgYXRoMTFrX2FoYl9mcmVlX2V4dF9pcnEoc3RydWN0IGF0aDExa19iYXNlICphYilcbiB7XG4tXHRpbnQgaXJxX2lkeDtcbiBcdGludCBpO1xuIFxuLVx0aWYgKGFiLVx1MDAzZWh3X3BhcmFtcy5oeWJyaWRfYnVzX3R5cGUpXG4tXHRcdHJldHVybiBhdGgxMWtfcGNpY19mcmVlX2lycShhYik7XG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgQVRIMTFLX0VYVF9JUlFfR1JQX05VTV9NQVg7IGkmIzQzOyYjNDM7KVxuJiM0MztcdFx0YXRoMTFrX2FoYl9mcmVlX2V4dF9pcnFfZ3JwKGFiLCBcdTAwMjZhYi1cdTAwM2VleHRfaXJxX2dycFtpXSk7XG4mIzQzO31cbiBcbi1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIGFiLVx1MDAzZWh3X3BhcmFtcy5jZV9jb3VudDsgaSYjNDM7JiM0MzspIHtcbiYjNDM7c3RhdGljIHZvaWQgYXRoMTFrX2FoYl9mcmVlX2NlX2lycXMoc3RydWN0IGF0aDExa19iYXNlICphYiwgaW50IG1heF9pZHgpXG4mIzQzO3tcbiYjNDM7XHRpbnQgaXJxX2lkeCwgaTtcbiYjNDM7XG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgbWF4X2lkeDsgaSYjNDM7JiM0MzspIHtcbiBcdFx0aWYgKGF0aDExa19jZV9nZXRfYXR0cl9mbGFncyhhYiwgaSkgXHUwMDI2IENFX0FUVFJfRElTX0lOVFIpXG4gXHRcdFx0Y29udGludWU7XG4gXHRcdGlycV9pZHggPSBBVEgxMUtfSVJRX0NFMF9PRkZTRVQgJiM0MzsgaTtcbiBcdFx0ZnJlZV9pcnEoYWItXHUwMDNlaXJxX251bVtpcnFfaWR4XSwgXHUwMDI2YWItXHUwMDNlY2UuY2VfcGlwZVtpXSk7XG4gXHR9XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIGF0aDExa19haGJfZnJlZV9pcnEoc3RydWN0IGF0aDExa19iYXNlICphYilcbiYjNDM7e1xuJiM0MztcdGlmIChhYi1cdTAwM2Vod19wYXJhbXMuaHlicmlkX2J1c190eXBlKVxuJiM0MztcdFx0cmV0dXJuIGF0aDExa19wY2ljX2ZyZWVfaXJxKGFiKTtcbiBcbiYjNDM7XHRhdGgxMWtfYWhiX2ZyZWVfY2VfaXJxcyhhYiwgYWItXHUwMDNlaHdfcGFyYW1zLmNlX2NvdW50KTtcbiBcdGF0aDExa19haGJfZnJlZV9leHRfaXJxKGFiKTtcbiB9XG4gXG5AQCAtNTI0LDIwICYjNDM7NTM1LDI1IEBAIHN0YXRpYyBpcnFyZXR1cm5fdCBhdGgxMWtfYWhiX2V4dF9pbnRlcnJ1cHRfaGFuZGxlcihpbnQgaXJxLCB2b2lkICphcmcpXG4gc3RhdGljIGludCBhdGgxMWtfYWhiX2NvbmZpZ19leHRfaXJxKHN0cnVjdCBhdGgxMWtfYmFzZSAqYWIpXG4ge1xuIFx0c3RydWN0IGF0aDExa19od19wYXJhbXMgKmh3ID0gXHUwMDI2YWItXHUwMDNlaHdfcGFyYW1zO1xuJiM0MztcdHN0cnVjdCBhdGgxMWtfZXh0X2lycV9ncnAgKmlycV9ncnA7XG4gXHRpbnQgaSwgajtcbiBcdGludCBpcnE7XG4gXHRpbnQgcmV0O1xuIFxuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgQVRIMTFLX0VYVF9JUlFfR1JQX05VTV9NQVg7IGkmIzQzOyYjNDM7KSB7XG4tXHRcdHN0cnVjdCBhdGgxMWtfZXh0X2lycV9ncnAgKmlycV9ncnAgPSBcdTAwMjZhYi1cdTAwM2VleHRfaXJxX2dycFtpXTtcbiBcdFx0dTMyIG51bV9pcnEgPSAwO1xuIFxuJiM0MztcdFx0aXJxX2dycCA9IFx1MDAyNmFiLVx1MDAzZWV4dF9pcnFfZ3JwW2ldO1xuJiM0MztcbiBcdFx0aXJxX2dycC1cdTAwM2VhYiA9IGFiO1xuIFx0XHRpcnFfZ3JwLVx1MDAzZWdycF9pZCA9IGk7XG4gXG4gXHRcdGlycV9ncnAtXHUwMDNlbmFwaV9uZGV2ID0gYWxsb2NfbmV0ZGV2X2R1bW15KDApO1xuLVx0XHRpZiAoIWlycV9ncnAtXHUwMDNlbmFwaV9uZGV2KVxuLVx0XHRcdHJldHVybiAtRU5PTUVNO1xuJiM0MztcdFx0aWYgKCFpcnFfZ3JwLVx1MDAzZW5hcGlfbmRldikge1xuJiM0MztcdFx0XHRyZXQgPSAtRU5PTUVNO1xuJiM0MztcdFx0XHRpcnFfZ3JwLVx1MDAzZW51bV9pcnEgPSAwO1xuJiM0MztcdFx0XHRnb3RvIGVycl9yZXF1ZXN0X2lycTtcbiYjNDM7XHRcdH1cbiBcbiBcdFx0bmV0aWZfbmFwaV9hZGQoaXJxX2dycC1cdTAwM2VuYXBpX25kZXYsIFx1MDAyNmlycV9ncnAtXHUwMDNlbmFwaSxcbiBcdFx0XHQgICAgICAgYXRoMTFrX2FoYl9leHRfZ3JwX25hcGlfcG9sbCk7XG5AQCAtNTg1LDkgJiM0Mzs2MDEsNyBAQCBzdGF0aWMgaW50IGF0aDExa19haGJfY29uZmlnX2V4dF9pcnEoc3RydWN0IGF0aDExa19iYXNlICphYilcbiBcdFx0XHRcdH1cbiBcdFx0XHR9XG4gXHRcdH1cbi1cdFx0aXJxX2dycC1cdTAwM2VudW1faXJxID0gbnVtX2lycTtcbi1cbi1cdFx0Zm9yIChqID0gMDsgaiBcdTAwM2MgaXJxX2dycC1cdTAwM2VudW1faXJxOyBqJiM0MzsmIzQzOykge1xuJiM0MztcdFx0Zm9yIChqID0gMDsgaiBcdTAwM2MgbnVtX2lycTsgaiYjNDM7JiM0MzspIHtcbiBcdFx0XHRpbnQgaXJxX2lkeCA9IGlycV9ncnAtXHUwMDNlaXJxc1tqXTtcbiBcbiBcdFx0XHRpcnEgPSBwbGF0Zm9ybV9nZXRfaXJxX2J5bmFtZShhYi1cdTAwM2VwZGV2LFxuQEAgLTYwMCwxMSAmIzQzOzYxNCwyMyBAQCBzdGF0aWMgaW50IGF0aDExa19haGJfY29uZmlnX2V4dF9pcnEoc3RydWN0IGF0aDExa19iYXNlICphYilcbiBcdFx0XHRpZiAocmV0KSB7XG4gXHRcdFx0XHRhdGgxMWtfZXJyKGFiLCBcJiMzNDtmYWlsZWQgcmVxdWVzdF9pcnEgZm9yICVkXFxuXCYjMzQ7LFxuIFx0XHRcdFx0XHQgICBpcnEpO1xuJiM0MztcdFx0XHRcdGlycV9ncnAtXHUwMDNlbnVtX2lycSA9IGo7XG4mIzQzO1x0XHRcdFx0YXRoMTFrX2FoYl9mcmVlX2V4dF9pcnFfZ3JwKGFiLCBpcnFfZ3JwKTtcbiYjNDM7XHRcdFx0XHRnb3RvIGVycl9yZXF1ZXN0X2lycTtcbiBcdFx0XHR9XG4gXHRcdH1cbiYjNDM7XG4mIzQzO1x0XHRpcnFfZ3JwLVx1MDAzZW51bV9pcnEgPSBudW1faXJxO1xuIFx0fVxuIFxuIFx0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztlcnJfcmVxdWVzdF9pcnE6XG4mIzQzO1x0Zm9yIChpLS07IGkgXHUwMDNlPSAwOyBpLS0pIHtcbiYjNDM7XHRcdGlycV9ncnAgPSBcdTAwMjZhYi1cdTAwM2VleHRfaXJxX2dycFtpXTtcbiYjNDM7XHRcdGF0aDExa19haGJfZnJlZV9leHRfaXJxX2dycChhYiwgaXJxX2dycCk7XG4mIzQzO1x0fVxuJiM0MztcdHJldHVybiByZXQ7XG4gfVxuIFxuIHN0YXRpYyBpbnQgYXRoMTFrX2FoYl9jb25maWdfaXJxKHN0cnVjdCBhdGgxMWtfYmFzZSAqYWIpXG5AQCAtNjI5LDE2ICYjNDM7NjU1LDI0IEBAIHN0YXRpYyBpbnQgYXRoMTFrX2FoYl9jb25maWdfaXJxKHN0cnVjdCBhdGgxMWtfYmFzZSAqYWIpXG4gXHRcdHJldCA9IHJlcXVlc3RfaXJxKGlycSwgYXRoMTFrX2FoYl9jZV9pbnRlcnJ1cHRfaGFuZGxlcixcbiBcdFx0XHRcdCAgSVJRRl9UUklHR0VSX1JJU0lORywgaXJxX25hbWVbaXJxX2lkeF0sXG4gXHRcdFx0XHQgIGNlX3BpcGUpO1xuLVx0XHRpZiAocmV0KVxuJiM0MztcdFx0aWYgKHJldCkge1xuJiM0MztcdFx0XHRhdGgxMWtfZXJyKGFiLCBcJiMzNDtmYWlsZWQgcmVxdWVzdF9pcnEgZm9yICVkXFxuXCYjMzQ7LCBpcnEpO1xuJiM0MztcdFx0XHRhdGgxMWtfYWhiX2ZyZWVfY2VfaXJxcyhhYiwgaSk7XG4gXHRcdFx0cmV0dXJuIHJldDtcbiYjNDM7XHRcdH1cbiBcbiBcdFx0YWItXHUwMDNlaXJxX251bVtpcnFfaWR4XSA9IGlycTtcbiBcdH1cbiBcbiBcdC8qIENvbmZpZ3VyZSBleHRlcm5hbCBpbnRlcnJ1cHRzICovXG4gXHRyZXQgPSBhdGgxMWtfYWhiX2NvbmZpZ19leHRfaXJxKGFiKTtcbiYjNDM7XHRpZiAocmV0KSB7XG4mIzQzO1x0XHRhdGgxMWtfZXJyKGFiLCBcJiMzNDtmYWlsZWQgdG8gY29uZmlndXJlIGV4dCBpcnE6ICVkXFxuXCYjMzQ7LCByZXQpO1xuJiM0MztcdFx0YXRoMTFrX2FoYl9mcmVlX2NlX2lycXMoYWIsIGFiLVx1MDAzZWh3X3BhcmFtcy5jZV9jb3VudCk7XG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcdH1cbiBcbi1cdHJldHVybiByZXQ7XG4mIzQzO1x0cmV0dXJuIDA7XG4gfVxuIFxuIHN0YXRpYyBpbnQgYXRoMTFrX2FoYl9tYXBfc2VydmljZV90b19waXBlKHN0cnVjdCBhdGgxMWtfYmFzZSAqYWIsIHUxNiBzZXJ2aWNlX2lkLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE2IDE2OjE5PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjJtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0FUSDExSyYjMzQ7LAogICAgJiMzNDtBVEgxMUtfQUhCJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YXRoMTFrX2FoYl9mcmVlX2V4dF9pcnFfZ3JwJiMzNDssCiAgICAmIzM0O2F0aDExa19haGJfZnJlZV9leHRfaXJxJiMzNDssCiAgICAmIzM0O2F0aDExa19haGJfZnJlZV9jZV9pcnFzJiMzNDssCiAgICAmIzM0O2F0aDExa19haGJfZnJlZV9pcnEmIzM0OywKICAgICYjMzQ7YXRoMTFrX2FoYl9jb25maWdfZXh0X2lycSYjMzQ7LAogICAgJiMzNDthdGgxMWtfYWhiX2NvbmZpZ19pcnEmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgcmVzb3VyY2UgbGVha3MgaW4gdGhlIGVycm9yIHBhdGhzIG9mIElSUSBjb25maWd1cmF0aW9uIGZvciB0aGUgYXRoMTFrIEFIQiBkcml2ZXIuIEl0IGludHJvZHVjZXMgbmV3IGhlbHBlciBmdW5jdGlvbnMgZm9yIGZyZWVpbmcgSVJRcyBhbmQgdXBkYXRlcyB0aGUgY29uZmlndXJhdGlvbiBmdW5jdGlvbnMgdG8gdXNlIHRoZW0gb24gZmFpbHVyZS4gVGhpcyBpcyBmdW5jdGlvbmFsIGRyaXZlciBjb2RlIHRoYXQgY2FuIGJlIHJlYWNoZWQgZHVyaW5nIGRldmljZSBwcm9iZS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLApldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXQKICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LAogICBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgY2U1MmFjYWRlZmUyOGRlOTY4MDc1NzljN2UwNGRjNDA1ZjllNDJiZApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUaHUgSnVsIDE2IDE2OjE5OjQ5IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9haGIuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvYWhiLmMKaW5kZXggZjU2NmQ2OTlkMDc0YTguLjFhOTQwODEzOGQ4MTVjIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2FoYi5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvYWhiLmMKQEAgLTQzMSwzNiAmIzQzOzQzMSw0NyBAQCBzdGF0aWMgdm9pZCBhdGgxMWtfYWhiX2luaXRfcW1pX2NlX2NvbmZpZyhzdHJ1Y3QgYXRoMTFrX2Jhc2UgKmFiKQogCWFiLSZndDtxbWkuc2VydmljZV9pbnNfaWQgPSBhYi0mZ3Q7aHdfcGFyYW1zLnFtaV9zZXJ2aWNlX2luc19pZDsKIH0KIAotc3RhdGljIHZvaWQgYXRoMTFrX2FoYl9mcmVlX2V4dF9pcnEoc3RydWN0IGF0aDExa19iYXNlICphYikKJiM0MztzdGF0aWMgdm9pZCBhdGgxMWtfYWhiX2ZyZWVfZXh0X2lycV9ncnAoc3RydWN0IGF0aDExa19iYXNlICphYiwKJiM0MzsJCQkJICAgICAgc3RydWN0IGF0aDExa19leHRfaXJxX2dycCAqaXJxX2dycCkKIHsKLQlpbnQgaSwgajsKJiM0MzsJaW50IGo7CiAKLQlmb3IgKGkgPSAwOyBpICZsdDsgQVRIMTFLX0VYVF9JUlFfR1JQX05VTV9NQVg7IGkmIzQzOyYjNDM7KSB7Ci0JCXN0cnVjdCBhdGgxMWtfZXh0X2lycV9ncnAgKmlycV9ncnAgPSAmYW1wO2FiLSZndDtleHRfaXJxX2dycFtpXTsKJiM0MzsJZm9yIChqID0gMDsgaiAmbHQ7IGlycV9ncnAtJmd0O251bV9pcnE7IGomIzQzOyYjNDM7KQomIzQzOwkJZnJlZV9pcnEoYWItJmd0O2lycV9udW1baXJxX2dycC0mZ3Q7aXJxc1tqXV0sIGlycV9ncnApOwogCi0JCWZvciAoaiA9IDA7IGogJmx0OyBpcnFfZ3JwLSZndDtudW1faXJxOyBqJiM0MzsmIzQzOykKLQkJCWZyZWVfaXJxKGFiLSZndDtpcnFfbnVtW2lycV9ncnAtJmd0O2lycXNbal1dLCBpcnFfZ3JwKTsKJiM0MzsJaWYgKCFpcnFfZ3JwLSZndDtuYXBpX25kZXYpCiYjNDM7CQlyZXR1cm47CiAKLQkJbmV0aWZfbmFwaV9kZWwoJmFtcDtpcnFfZ3JwLSZndDtuYXBpKTsKLQkJZnJlZV9uZXRkZXYoaXJxX2dycC0mZ3Q7bmFwaV9uZGV2KTsKLQl9CiYjNDM7CW5ldGlmX25hcGlfZGVsKCZhbXA7aXJxX2dycC0mZ3Q7bmFwaSk7CiYjNDM7CWZyZWVfbmV0ZGV2KGlycV9ncnAtJmd0O25hcGlfbmRldik7CiB9CiAKLXN0YXRpYyB2b2lkIGF0aDExa19haGJfZnJlZV9pcnEoc3RydWN0IGF0aDExa19iYXNlICphYikKJiM0MztzdGF0aWMgdm9pZCBhdGgxMWtfYWhiX2ZyZWVfZXh0X2lycShzdHJ1Y3QgYXRoMTFrX2Jhc2UgKmFiKQogewotCWludCBpcnFfaWR4OwogCWludCBpOwogCi0JaWYgKGFiLSZndDtod19wYXJhbXMuaHlicmlkX2J1c190eXBlKQotCQlyZXR1cm4gYXRoMTFrX3BjaWNfZnJlZV9pcnEoYWIpOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgQVRIMTFLX0VYVF9JUlFfR1JQX05VTV9NQVg7IGkmIzQzOyYjNDM7KQomIzQzOwkJYXRoMTFrX2FoYl9mcmVlX2V4dF9pcnFfZ3JwKGFiLCAmYW1wO2FiLSZndDtleHRfaXJxX2dycFtpXSk7CiYjNDM7fQogCi0JZm9yIChpID0gMDsgaSAmbHQ7IGFiLSZndDtod19wYXJhbXMuY2VfY291bnQ7IGkmIzQzOyYjNDM7KSB7CiYjNDM7c3RhdGljIHZvaWQgYXRoMTFrX2FoYl9mcmVlX2NlX2lycXMoc3RydWN0IGF0aDExa19iYXNlICphYiwgaW50IG1heF9pZHgpCiYjNDM7ewomIzQzOwlpbnQgaXJxX2lkeCwgaTsKJiM0MzsKJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IG1heF9pZHg7IGkmIzQzOyYjNDM7KSB7CiAJCWlmIChhdGgxMWtfY2VfZ2V0X2F0dHJfZmxhZ3MoYWIsIGkpICZhbXA7IENFX0FUVFJfRElTX0lOVFIpCiAJCQljb250aW51ZTsKIAkJaXJxX2lkeCA9IEFUSDExS19JUlFfQ0UwX09GRlNFVCAmIzQzOyBpOwogCQlmcmVlX2lycShhYi0mZ3Q7aXJxX251bVtpcnFfaWR4XSwgJmFtcDthYi0mZ3Q7Y2UuY2VfcGlwZVtpXSk7CiAJfQomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBhdGgxMWtfYWhiX2ZyZWVfaXJxKHN0cnVjdCBhdGgxMWtfYmFzZSAqYWIpCiYjNDM7ewomIzQzOwlpZiAoYWItJmd0O2h3X3BhcmFtcy5oeWJyaWRfYnVzX3R5cGUpCiYjNDM7CQlyZXR1cm4gYXRoMTFrX3BjaWNfZnJlZV9pcnEoYWIpOwogCiYjNDM7CWF0aDExa19haGJfZnJlZV9jZV9pcnFzKGFiLCBhYi0mZ3Q7aHdfcGFyYW1zLmNlX2NvdW50KTsKIAlhdGgxMWtfYWhiX2ZyZWVfZXh0X2lycShhYik7CiB9CiAKQEAgLTUyNCwyMCAmIzQzOzUzNSwyNSBAQCBzdGF0aWMgaXJxcmV0dXJuX3QgYXRoMTFrX2FoYl9leHRfaW50ZXJydXB0X2hhbmRsZXIoaW50IGlycSwgdm9pZCAqYXJnKQogc3RhdGljIGludCBhdGgxMWtfYWhiX2NvbmZpZ19leHRfaXJxKHN0cnVjdCBhdGgxMWtfYmFzZSAqYWIpCiB7CiAJc3RydWN0IGF0aDExa19od19wYXJhbXMgKmh3ID0gJmFtcDthYi0mZ3Q7aHdfcGFyYW1zOwomIzQzOwlzdHJ1Y3QgYXRoMTFrX2V4dF9pcnFfZ3JwICppcnFfZ3JwOwogCWludCBpLCBqOwogCWludCBpcnE7CiAJaW50IHJldDsKIAogCWZvciAoaSA9IDA7IGkgJmx0OyBBVEgxMUtfRVhUX0lSUV9HUlBfTlVNX01BWDsgaSYjNDM7JiM0MzspIHsKLQkJc3RydWN0IGF0aDExa19leHRfaXJxX2dycCAqaXJxX2dycCA9ICZhbXA7YWItJmd0O2V4dF9pcnFfZ3JwW2ldOwogCQl1MzIgbnVtX2lycSA9IDA7CiAKJiM0MzsJCWlycV9ncnAgPSAmYW1wO2FiLSZndDtleHRfaXJxX2dycFtpXTsKJiM0MzsKIAkJaXJxX2dycC0mZ3Q7YWIgPSBhYjsKIAkJaXJxX2dycC0mZ3Q7Z3JwX2lkID0gaTsKIAogCQlpcnFfZ3JwLSZndDtuYXBpX25kZXYgPSBhbGxvY19uZXRkZXZfZHVtbXkoMCk7Ci0JCWlmICghaXJxX2dycC0mZ3Q7bmFwaV9uZGV2KQotCQkJcmV0dXJuIC1FTk9NRU07CiYjNDM7CQlpZiAoIWlycV9ncnAtJmd0O25hcGlfbmRldikgewomIzQzOwkJCXJldCA9IC1FTk9NRU07CiYjNDM7CQkJaXJxX2dycC0mZ3Q7bnVtX2lycSA9IDA7CiYjNDM7CQkJZ290byBlcnJfcmVxdWVzdF9pcnE7CiYjNDM7CQl9CiAKIAkJbmV0aWZfbmFwaV9hZGQoaXJxX2dycC0mZ3Q7bmFwaV9uZGV2LCAmYW1wO2lycV9ncnAtJmd0O25hcGksCiAJCQkgICAgICAgYXRoMTFrX2FoYl9leHRfZ3JwX25hcGlfcG9sbCk7CkBAIC01ODUsOSAmIzQzOzYwMSw3IEBAIHN0YXRpYyBpbnQgYXRoMTFrX2FoYl9jb25maWdfZXh0X2lycShzdHJ1Y3QgYXRoMTFrX2Jhc2UgKmFiKQogCQkJCX0KIAkJCX0KIAkJfQotCQlpcnFfZ3JwLSZndDtudW1faXJxID0gbnVtX2lycTsKLQotCQlmb3IgKGogPSAwOyBqICZsdDsgaXJxX2dycC0mZ3Q7bnVtX2lycTsgaiYjNDM7JiM0MzspIHsKJiM0MzsJCWZvciAoaiA9IDA7IGogJmx0OyBudW1faXJxOyBqJiM0MzsmIzQzOykgewogCQkJaW50IGlycV9pZHggPSBpcnFfZ3JwLSZndDtpcnFzW2pdOwogCiAJCQlpcnEgPSBwbGF0Zm9ybV9nZXRfaXJxX2J5bmFtZShhYi0mZ3Q7cGRldiwKQEAgLTYwMCwxMSAmIzQzOzYxNCwyMyBAQCBzdGF0aWMgaW50IGF0aDExa19haGJfY29uZmlnX2V4dF9pcnEoc3RydWN0IGF0aDExa19iYXNlICphYikKIAkJCWlmIChyZXQpIHsKIAkJCQlhdGgxMWtfZXJyKGFiLCAmIzM0O2ZhaWxlZCByZXF1ZXN0X2lycSBmb3IgJWRcbiYjMzQ7LAogCQkJCQkgICBpcnEpOwomIzQzOwkJCQlpcnFfZ3JwLSZndDtudW1faXJxID0gajsKJiM0MzsJCQkJYXRoMTFrX2FoYl9mcmVlX2V4dF9pcnFfZ3JwKGFiLCBpcnFfZ3JwKTsKJiM0MzsJCQkJZ290byBlcnJfcmVxdWVzdF9pcnE7CiAJCQl9CiAJCX0KJiM0MzsKJiM0MzsJCWlycV9ncnAtJmd0O251bV9pcnEgPSBudW1faXJxOwogCX0KIAogCXJldHVybiAwOwomIzQzOwomIzQzO2Vycl9yZXF1ZXN0X2lycToKJiM0MzsJZm9yIChpLS07IGkgJmd0Oz0gMDsgaS0tKSB7CiYjNDM7CQlpcnFfZ3JwID0gJmFtcDthYi0mZ3Q7ZXh0X2lycV9ncnBbaV07CiYjNDM7CQlhdGgxMWtfYWhiX2ZyZWVfZXh0X2lycV9ncnAoYWIsIGlycV9ncnApOwomIzQzOwl9CiYjNDM7CXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyBpbnQgYXRoMTFrX2FoYl9jb25maWdfaXJxKHN0cnVjdCBhdGgxMWtfYmFzZSAqYWIpCkBAIC02MjksMTYgJiM0Mzs2NTUsMjQgQEAgc3RhdGljIGludCBhdGgxMWtfYWhiX2NvbmZpZ19pcnEoc3RydWN0IGF0aDExa19iYXNlICphYikKIAkJcmV0ID0gcmVxdWVzdF9pcnEoaXJxLCBhdGgxMWtfYWhiX2NlX2ludGVycnVwdF9oYW5kbGVyLAogCQkJCSAgSVJRRl9UUklHR0VSX1JJU0lORywgaXJxX25hbWVbaXJxX2lkeF0sCiAJCQkJICBjZV9waXBlKTsKLQkJaWYgKHJldCkKJiM0MzsJCWlmIChyZXQpIHsKJiM0MzsJCQlhdGgxMWtfZXJyKGFiLCAmIzM0O2ZhaWxlZCByZXF1ZXN0X2lycSBmb3IgJWRcbiYjMzQ7LCBpcnEpOwomIzQzOwkJCWF0aDExa19haGJfZnJlZV9jZV9pcnFzKGFiLCBpKTsKIAkJCXJldHVybiByZXQ7CiYjNDM7CQl9CiAKIAkJYWItJmd0O2lycV9udW1baXJxX2lkeF0gPSBpcnE7CiAJfQogCiAJLyogQ29uZmlndXJlIGV4dGVybmFsIGludGVycnVwdHMgKi8KIAlyZXQgPSBhdGgxMWtfYWhiX2NvbmZpZ19leHRfaXJxKGFiKTsKJiM0MzsJaWYgKHJldCkgewomIzQzOwkJYXRoMTFrX2VycihhYiwgJiMzNDtmYWlsZWQgdG8gY29uZmlndXJlIGV4dCBpcnE6ICVkXG4mIzM0OywgcmV0KTsKJiM0MzsJCWF0aDExa19haGJfZnJlZV9jZV9pcnFzKGFiLCBhYi0mZ3Q7aHdfcGFyYW1zLmNlX2NvdW50KTsKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CX0KIAotCXJldHVybiByZXQ7CiYjNDM7CXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IGF0aDExa19haGJfbWFwX3NlcnZpY2VfdG9fcGlwZShzdHJ1Y3QgYXRoMTFrX2Jhc2UgKmFiLCB1MTYgc2VydmljZV9pZCwKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTYgMTY6MTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzkzMQoJCQkJCQkJb3V0cHV0OiA0MgoJCQkJCQkJdGhvdWdodHM6IDI5MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBQb3RlbnRpYWwgRnV6emluZyBUYXJnZXQ6IGF0aDExayBBSEIgSVJRIEhhbmRsaW5nKioKCk9rYXksIHNvIEkmIzM5O3ZlIGdvdCBhIHBhdGNoIGhlcmUgZm9yIGBkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2FoYi5jYC4gSXQmIzM5O3MgdG91Y2hpbmcgZnVuY3Rpb25zIGxpa2UgYGF0aDExa19haGJfZnJlZV9leHRfaXJxYCwgYGF0aDExa19haGJfZnJlZV9pcnFgLCBgYXRoMTFrX2FoYl9jb25maWdfZXh0X2lycWAsIGFuZCBgYXRoMTFrX2FoYl9jb25maWdfaXJxYC4gRnJvbSB0aGUgcGF0Y2ggZGVzY3JpcHRpb24sIGl0IHNvdW5kcyBsaWtlIGl0JiMzOTtzIGFkZHJlc3Npbmcgc29tZSBtZW1vcnkgb3IgcmVzb3VyY2UgbGVha3MgdGhhdCBvY2N1ciBkdXJpbmcgZXJyb3IgaGFuZGxpbmcgcmVsYXRlZCB0byBJUlEgY29uZmlndXJhdGlvbiB3aXRoaW4gdGhlIGF0aDExayBBSEIgZHJpdmVyLiBTb3VuZHMgaW50ZXJlc3RpbmcsIGFuZCBsaWtlIGl0IGNvdWxkIGJlIGEgZ29vZCBmdXp6aW5nIHRhcmdldC4KCkZpcnN0LCBJIG5lZWQgdG8gZmlndXJlIG91dCBpZiBpdCYjMzk7cyByZWFjaGFibGUgYW5kIHdvcnRoIHRoZSBlZmZvcnQuIFRoZSBkcml2ZXIgaXMgYGF0aDExa2AsIHdoaWNoIGlzIFF1YWxjb21tJiMzOTtzIDgwMi4xMWF4IFdMQU4gZHJpdmVyLiBBbmQgaXQmIzM5O3MgdXNpbmcgdGhlIEFIQiBidXMg4oCTIHRoZSBBZHZhbmNlZCBIaWdoLXBlcmZvcm1hbmNlIEJ1cywgdHlwaWNhbCBmb3IgU29DcyBsaWtlIHRoZSBJUFE4MDc0LiBTbywgdGhlIHF1ZXN0aW9uIGlzLCBjYW4gSSBmdXp6IHRoaXMgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudD8gQUhCIGRldmljZXMgYXJlIHVzdWFsbHkgcGxhdGZvcm0gZGV2aWNlcywgcmlnaHQ/IEFuZCB1c3VhbGx5LCB0aGV5IGdldCBwcm9iZWQgaWYgdGhlaXIgc3BlY2lmaWMgZGV2aWNlIHRyZWUgbm9kZSBpcyBwcmVzZW50LiBVbmxlc3MgSSBjYW4gc29tZWhvdyBlbXVsYXRlIHRoaXMgc3BlY2lmaWMgcGxhdGZvcm0gZGV2aWNlIOKAkyBtYXliZSB3aXRoIGEgZmFrZSBvbmUgb3Igc29tZSBvdGhlciBlbXVsYXRpb24g4oCTIEkgbWlnaHQgYmUgZGVhZCBpbiB0aGUgd2F0ZXIuCgpCdXQgd2FpdCBhIG1pbnV0ZS4uLiBJIHRoaW5rIHN5emthbGxlciAqY2FuKiBmdXp6IHBsYXRmb3JtIGRldmljZXMgaWYgdGhleSYjMzk7cmUgcmVnaXN0ZXJlZC4gU28sIHRoZSBrZXkgaXMgd2hldGhlciBJIGNhbiBnZXQgYGF0aDExa19haGJfcHJvYmVgIHRvIGV4ZWN1dGUuIEkgbmVlZCB0byBjaGVjayBob3cgdGhlIHByb2JlIGZ1bmN0aW9uIGlzIGNvbmZpZ3VyZWQgdG8gc2VlIGlmIEkgY2FuIGdldCB0aGF0IHRvIGhhcHBlbiBpbiBhIHZpcnR1YWwgZW52aXJvbm1lbnQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTYgMTY6MTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YXRoMTFrX2FoYl9wcm9iZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvYWhiLmM9MTEwNj1zdGF0aWMgaW50IGF0aDExa19haGJfZndfcmVzb3VyY2VfZGVpbml0KHN0cnVjdCBhdGgxMWtfYmFzZSAqYWIpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9haGIuYy0xMTQwLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9haGIuYzoxMTQxOnN0YXRpYyBpbnQgYXRoMTFrX2FoYl9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9haGIuYy0xMTQyLXtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2FoYi5jPTEzMzY9c3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgYXRoMTFrX2FoYl9kcml2ZXIgPSB7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9haGIuYy0xMzQwLVx0fSxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvYWhiLmM6MTM0MTpcdC5wcm9iZSA9IGF0aDExa19haGJfcHJvYmUsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2FoYi5jLTEzNDItXHQucmVtb3ZlID0gYXRoMTFrX2FoYl9yZW1vdmUsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTYgMTY6MTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDk0OQoJCQkJCQkJb3V0cHV0OiA0NwoJCQkJCQkJdGhvdWdodHM6IDE4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIGBhdGgxMWtfYWhiX3Byb2JlYCBSZXF1aXJlbWVudHMqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGUgYGF0aDExa19haGJfcHJvYmVgIGZ1bmN0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHRoaXMgZXhwZWN0cyBiZWZvcmUgaXQmIzM5O2xsIGV2ZW4gZ2V0IG9mZiB0aGUgZ3JvdW5kLiBXaGF0IGRlcGVuZGVuY2llcyBkb2VzIGl0IGhhdmU/IFdoYXQgc3BlY2lmaWMgaGFyZHdhcmUgaW5pdGlhbGl6YXRpb24gc3RlcHMgYXJlIGxpa2VseSBiYWtlZCBpbnRvIHRoaXMgcHJvYmUgZnVuY3Rpb24/IEkmIzM5O20gYW50aWNpcGF0aW5nIHRoYXQgaXQgd2lsbCBoYW5kbGUgdGhlIGJhc2ljIHBsYXRmb3JtIGluaXRpYWxpemF0aW9uIGZvciBhbiBBSEItY29ubmVjdGVkIEF0aGVyb3MgODAyLjExayBjb250cm9sbGVyLiBJIG5lZWQgdG8gaWRlbnRpZnkgdGhlIGtleSBzdHJ1Y3R1cmVzIHRoYXQgaXQmIzM5O3MgZ29pbmcgdG8gaW50ZXJhY3Qgd2l0aCwgbGlrZWx5IGludm9sdmluZyByZWdpc3RlciBtYXBwaW5nLCBETUEgc2V0dXAsIGFuZCBpbnRlcnJ1cHQgcmVnaXN0cmF0aW9uLiBGcm9tIHdoYXQgSSByZWNhbGwgb2YgcHJldmlvdXMgd29yaywgSSBzaG91bGQgYmUgbG9va2luZyBmb3IgcmVzb3VyY2UgYWxsb2NhdGlvbiBjYWxscywgYW5kIGRyaXZlciBiaW5kaW5nIHdpdGhpbiB0aGUga2VybmVsJiMzOTtzIGRldmljZSBtb2RlbCwgSSBuZWVkIHRvIGtub3cgaG93IHRoZSBkcml2ZXIgaW50ZXJhY3RzIHdpdGggdGhlIGhhcmR3YXJlLCB0aGUgcmVsZXZhbnQgcmVnaXN0ZXIgbWFwLCBpbnRlcnJ1cHRzLCBhbmQgYW55IGRldmljZS1zcGVjaWZpYyBxdWlya3MuIEl0JiMzOTtzIGxpa2VseSB0aGF0IGEgcHJvYmUgZnVuY3Rpb24gbGlrZSB0aGlzIG5lZWRzIHRvIGRlYWwgd2l0aCB0aGUgcG93ZXIgbWFuYWdlbWVudCBzdGF0ZXMgYXMgd2VsbC4gTGV0JiMzOTtzIHNlZSBob3cgbXVjaCBvZiB0aGlzIGlzIGhhbmRsZWQgaW4gYGF0aDExa19haGJfcHJvYmVgIGRpcmVjdGx5LCBhbmQgd2hhdCYjMzk7cyBkZWZlcnJlZCB0byBvdGhlciBmdW5jdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTYgMTY6MjA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2FoYi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTE0MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTE0MDpcdFxuMTE0MTpcdHN0YXRpYyBpbnQgYXRoMTFrX2FoYl9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxuMTE0MjpcdHtcbjExNDM6XHRcdHN0cnVjdCBhdGgxMWtfYmFzZSAqYWI7XG4xMTQ0Olx0XHRjb25zdCBzdHJ1Y3QgYXRoMTFrX2hpZl9vcHMgKmhpZl9vcHM7XG4xMTQ1Olx0XHRjb25zdCBzdHJ1Y3QgYXRoMTFrX3BjaV9vcHMgKnBjaV9vcHM7XG4xMTQ2Olx0XHRlbnVtIGF0aDExa19od19yZXYgaHdfcmV2O1xuMTE0NzpcdFx0aW50IHJldDtcbjExNDg6XHRcbjExNDk6XHRcdGh3X3JldiA9ICh1aW50cHRyX3QpZGV2aWNlX2dldF9tYXRjaF9kYXRhKFx1MDAyNnBkZXYtXHUwMDNlZGV2KTtcbjExNTA6XHRcbjExNTE6XHRcdHN3aXRjaCAoaHdfcmV2KSB7XG4xMTUyOlx0XHRjYXNlIEFUSDExS19IV19JUFE4MDc0OlxuMTE1MzpcdFx0Y2FzZSBBVEgxMUtfSFdfSVBRNjAxOF9IVzEwOlxuMTE1NDpcdFx0Y2FzZSBBVEgxMUtfSFdfSVBRNTAxOF9IVzEwOlxuMTE1NTpcdFx0XHRoaWZfb3BzID0gXHUwMDI2YXRoMTFrX2FoYl9oaWZfb3BzX2lwcTgwNzQ7XG4xMTU2Olx0XHRcdHBjaV9vcHMgPSBOVUxMO1xuMTE1NzpcdFx0XHRicmVhaztcbjExNTg6XHRcdGNhc2UgQVRIMTFLX0hXX1dDTjY3NTBfSFcxMDpcbjExNTk6XHRcdFx0aGlmX29wcyA9IFx1MDAyNmF0aDExa19haGJfaGlmX29wc193Y242NzUwO1xuMTE2MDpcdFx0XHRwY2lfb3BzID0gXHUwMDI2YXRoMTFrX2FoYl9wY2lfb3BzX3djbjY3NTA7XG4xMTYxOlx0XHRcdGJyZWFrO1xuMTE2MjpcdFx0ZGVmYXVsdDpcbjExNjM6XHRcdFx0ZGV2X2VycihcdTAwMjZwZGV2LVx1MDAzZWRldiwgXCYjMzQ7dW5zdXBwb3J0ZWQgZGV2aWNlIHR5cGUgJWRcXG5cJiMzNDssIGh3X3Jldik7XG4xMTY0Olx0XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbjExNjU6XHRcdH1cbjExNjY6XHRcbjExNjc6XHRcdHJldCA9IGRtYV9zZXRfbWFza19hbmRfY29oZXJlbnQoXHUwMDI2cGRldi1cdTAwM2VkZXYsIERNQV9CSVRfTUFTSygzMikpO1xuMTE2ODpcdFx0aWYgKHJldCkge1xuMTE2OTpcdFx0XHRkZXZfZXJyKFx1MDAyNnBkZXYtXHUwMDNlZGV2LCBcJiMzNDtmYWlsZWQgdG8gc2V0IDMyLWJpdCBjb25zaXN0ZW50IGRtYVxcblwmIzM0Oyk7XG4xMTcwOlx0XHRcdHJldHVybiByZXQ7XG4xMTcxOlx0XHR9XG4xMTcyOlx0XG4xMTczOlx0XHRhYiA9IGF0aDExa19jb3JlX2FsbG9jKFx1MDAyNnBkZXYtXHUwMDNlZGV2LCBzaXplb2Yoc3RydWN0IGF0aDExa19haGIpLFxuMTE3NDpcdFx0XHRcdCAgICAgICBBVEgxMUtfQlVTX0FIQik7XG4xMTc1Olx0XHRpZiAoIWFiKSB7XG4xMTc2Olx0XHRcdGRldl9lcnIoXHUwMDI2cGRldi1cdTAwM2VkZXYsIFwmIzM0O2ZhaWxlZCB0byBhbGxvY2F0ZSBhdGgxMWsgYmFzZVxcblwmIzM0Oyk7XG4xMTc3Olx0XHRcdHJldHVybiAtRU5PTUVNO1xuMTE3ODpcdFx0fVxuMTE3OTpcdFxuMTE4MDpcdFx0YWItXHUwMDNlaGlmLm9wcyA9IGhpZl9vcHM7XG4xMTgxOlx0XHRhYi1cdTAwM2VwZGV2ID0gcGRldjtcbjExODI6XHRcdGFiLVx1MDAzZWh3X3JldiA9IGh3X3JldjtcbjExODM6XHRcdGFiLVx1MDAzZWZ3X21vZGUgPSBBVEgxMUtfRklSTVdBUkVfTU9ERV9OT1JNQUw7XG4xMTg0Olx0XHRwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBhYik7XG4xMTg1Olx0XG4xMTg2Olx0XHRyZXQgPSBhdGgxMWtfcGNpY19yZWdpc3Rlcl9wY2lfb3BzKGFiLCBwY2lfb3BzKTtcbjExODc6XHRcdGlmIChyZXQpIHtcbjExODg6XHRcdFx0YXRoMTFrX2VycihhYiwgXCYjMzQ7ZmFpbGVkIHRvIHJlZ2lzdGVyIFBDSSBvcHM6ICVkXFxuXCYjMzQ7LCByZXQpO1xuMTE4OTpcdFx0XHRnb3RvIGVycl9jb3JlX2ZyZWU7XG4xMTkwOlx0XHR9XG4xMTkxOlx0XG4xMTkyOlx0XHRyZXQgPSBhdGgxMWtfY29yZV9wcmVfaW5pdChhYik7XG4xMTkzOlx0XHRpZiAocmV0KVxuMTE5NDpcdFx0XHRnb3RvIGVycl9jb3JlX2ZyZWU7XG4xMTk1Olx0XG4xMTk2Olx0XHRyZXQgPSBhdGgxMWtfYWhiX3NldHVwX3Jlc291cmNlcyhhYik7XG4xMTk3Olx0XHRpZiAocmV0KVxuMTE5ODpcdFx0XHRnb3RvIGVycl9jb3JlX2ZyZWU7XG4xMTk5Olx0XG4xMjAwOlx0XHRyZXQgPSBhdGgxMWtfYWhiX2NlX3JlbWFwKGFiKTtcbjEyMDE6XHRcdGlmIChyZXQpXG4xMjAyOlx0XHRcdGdvdG8gZXJyX2NvcmVfZnJlZTtcbjEyMDM6XHRcbjEyMDQ6XHRcdHJldCA9IGF0aDExa19haGJfZndfcmVzb3VyY2VzX2luaXQoYWIpO1xuMTIwNTpcdFx0aWYgKHJldClcbjEyMDY6XHRcdFx0Z290byBlcnJfY2VfdW5tYXA7XG4xMjA3Olx0XG4xMjA4Olx0XHRyZXQgPSBhdGgxMWtfYWhiX3NldHVwX3NtcDJwX2hhbmRsZShhYik7XG4xMjA5Olx0XHRpZiAocmV0KVxuMTIxMDpcdFx0XHRnb3RvIGVycl9md19kZWluaXQ7XG4xMjExOlx0XG4xMjEyOlx0XHRyZXQgPSBhdGgxMWtfaGFsX3NybmdfaW5pdChhYik7XG4xMjEzOlx0XHRpZiAocmV0KVxuMTIxNDpcdFx0XHRnb3RvIGVycl9yZWxlYXNlX3NtcDJwX2hhbmRsZTtcbjEyMTU6XHRcbjEyMTY6XHRcdHJldCA9IGF0aDExa19jZV9hbGxvY19waXBlcyhhYik7XG4xMjE3Olx0XHRpZiAocmV0KSB7XG4xMjE4Olx0XHRcdGF0aDExa19lcnIoYWIsIFwmIzM0O2ZhaWxlZCB0byBhbGxvY2F0ZSBjZSBwaXBlczogJWRcXG5cJiMzNDssIHJldCk7XG4xMjE5Olx0XHRcdGdvdG8gZXJyX2hhbF9zcm5nX2RlaW5pdDtcbjEyMjA6XHRcdH1cbjEyMjE6XHRcbjEyMjI6XHRcdGF0aDExa19haGJfaW5pdF9xbWlfY2VfY29uZmlnKGFiKTtcbjEyMjM6XHRcbjEyMjQ6XHRcdHJldCA9IGF0aDExa19jb3JlX2dldF9ycHJvYyhhYik7XG4xMjI1Olx0XHRpZiAocmV0KVxuMTIyNjpcdFx0XHRnb3RvIGVycl9jZV9mcmVlO1xuMTIyNzpcdFxuMTIyODpcdFx0cmV0ID0gYXRoMTFrX2NvcmVfaW5pdChhYik7XG4xMjI5Olx0XHRpZiAocmV0KSB7XG4xMjMwOlx0XHRcdGF0aDExa19lcnIoYWIsIFwmIzM0O2ZhaWxlZCB0byBpbml0IGNvcmU6ICVkXFxuXCYjMzQ7LCByZXQpO1xuMTIzMTpcdFx0XHRnb3RvIGVycl9jZV9mcmVlO1xuMTIzMjpcdFx0fVxuMTIzMzpcdFxuMTIzNDpcdFx0cmV0ID0gYXRoMTFrX2FoYl9jb25maWdfaXJxKGFiKTtcbjEyMzU6XHRcdGlmIChyZXQpIHtcbjEyMzY6XHRcdFx0YXRoMTFrX2VycihhYiwgXCYjMzQ7ZmFpbGVkIHRvIGNvbmZpZ3VyZSBpcnE6ICVkXFxuXCYjMzQ7LCByZXQpO1xuMTIzNzpcdFx0XHRnb3RvIGVycl9jZV9mcmVlO1xuMTIzODpcdFx0fVxuMTIzOTpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE2IDE2OjIwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY5MjEKCQkJCQkJCW91dHB1dDogNDcKCQkJCQkJCXRob3VnaHRzOiAxOTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBRdWFsY29tbSBBSEIgRHJpdmVyIGZvciBQb3RlbnRpYWwgRnV6emluZyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhlc2UgcGF0Y2hlcyB0aGF0IGFyZSB0b3VjaGluZyBgYXRoMTFrX2FoYl9jb25maWdfaXJxYCBhbmQgYGF0aDExa19haGJfY29uZmlnX2V4dF9pcnFgLiBUaGVzZSBmdW5jdGlvbnMgYXJlIGNhbGxlZCBmcm9tIGBhdGgxMWtfYWhiX3Byb2JlYCwgd2hpY2ggaW1tZWRpYXRlbHkgZmxhZ3MgbXkgYXR0ZW50aW9uLiBUaGlzIGlzIGFuIEFIQiBkcml2ZXIsIGFuZCBpdCYjMzk7cyBzcGVjaWZpY2FsbHkgZm9yIHRob3NlIFF1YWxjb21tIElQUTgwNzQsIElQUTYwMTgsIElQUTUwMTgsIGFuZCBXQ042NzUwIFNvQ3MuIFJpZ2h0LCB0aGF0IHB1dHMgaXQgaW4gYSB2ZXJ5IHNwZWNpZmljIGhhcmR3YXJlIGNvbnRleHQuIFRoZSBjcml0aWNhbCBxdWVzdGlvbiBoZXJlIGlzIHdoZXRoZXIgc3l6a2FsbGVyIGNhbiByZWFsaXN0aWNhbGx5IGZ1enogdGhpcy4KClN5emthbGxlciAqY2FuKiBjcmVhdGUgcGxhdGZvcm0gZGV2aWNlcywgdXNpbmcgYHN5el9kZXZfY3JlYXRlYCBhbmQgc3VjaCwgaWYgc3VwcG9ydGVkLiBCdXQgdGhlIHJlYWwgcHJvYmxlbSBpcyB0aGUgZGV2aWNlIHRyZWUuIFRoZXNlIGFyZSBjb21wbGV4IFNvQ3MsIGFuZCBzZXR0aW5nIHVwIHRoZSBwcmVjaXNlIGRldmljZSB0cmVlIGNvbmZpZ3VyYXRpb24gdGhhdCBgYXRoMTFrX2FoYl9wcm9iZWAgKmV4cGVjdHMqIGlzIHRoZSBjaGFsbGVuZ2UuIEl0IG5lZWRzIHRob3NlIHNwZWNpZmljIHJlc291cmNlcyAtIG1lbW9yeSByZWdpb25zLCBJUlFzLCBTTVAyUCBoYW5kbGVzLCB0aGUgd29ya3MuIEl0JiMzOTtzIG5vdCBzb21ldGhpbmcgeW91IGNhbiBqdXN0IGNvbmp1cmUgdXAuIFNvLCB0aGUgcXVlc3Rpb24gaXMsIGNhbiBzeXprYWxsZXIgcmVsaWFibHkgZW11bGF0ZSB0aGlzIHdpdGhvdXQgYSBjb21wbGV0ZSwgYWNjdXJhdGUgRFQ/IFByb2JhYmx5IG5vdCBvdXQgb2YgdGhlIGJveC4KCkxldCYjMzk7cyBkaWcgaW50byBgYXRoMTFrX2FoYl9zZXR1cF9yZXNvdXJjZXNgLiBUaGF0JiMzOTtzIHdoZXJlIHRoZSBydWJiZXIgbWVldHMgdGhlIHJvYWQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgcmVzb3VyY2VzIGFyZSBiZWluZyBzZXQgdXAgdGhlcmUsIGFuZCB3aGF0IHRoZSBkZXBlbmRlbmNpZXMgYXJlLiBUaGF0IHdpbGwgZGV0ZXJtaW5lIGlmIGFuZCBob3cgd2UgY2FuIGV2ZW4gYmVnaW4gdG8gdGhpbmsgYWJvdXQgZnV6emluZyB0aGlzIGRyaXZlciBlZmZlY3RpdmVseS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNiAxNjoyMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvYWhiLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMDAwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMDAwOlx0fVxuMTAwMTpcdFxuMTAwMjpcdHN0YXRpYyB2b2lkIGF0aDExa19haGJfY2VfdW5tYXAoc3RydWN0IGF0aDExa19iYXNlICphYilcbjEwMDM6XHR7XG4xMDA0Olx0XHRpZiAoYWItXHUwMDNlaHdfcGFyYW1zLmNlX3JlbWFwKVxuMTAwNTpcdFx0XHRpb3VubWFwKGFiLVx1MDAzZW1lbV9jZSk7XG4xMDA2Olx0fVxuMTAwNzpcdFxuMTAwODpcdHN0YXRpYyBpbnQgYXRoMTFrX2FoYl9md19yZXNvdXJjZXNfaW5pdChzdHJ1Y3QgYXRoMTFrX2Jhc2UgKmFiKVxuMTAwOTpcdHtcbjEwMTA6XHRcdHN0cnVjdCBhdGgxMWtfYWhiICphYl9haGIgPSBhdGgxMWtfYWhiX3ByaXYoYWIpO1xuMTAxMTpcdFx0c3RydWN0IGRldmljZSAqaG9zdF9kZXYgPSBhYi1cdTAwM2VkZXY7XG4xMDEyOlx0XHRzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlX2luZm8gaW5mbyA9IHt9O1xuMTAxMzpcdFx0c3RydWN0IGlvbW11X2RvbWFpbiAqaW9tbXVfZG9tO1xuMTAxNDpcdFx0c3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldjtcbjEwMTU6XHRcdHN0cnVjdCBkZXZpY2Vfbm9kZSAqbm9kZTtcbjEwMTY6XHRcdGludCByZXQ7XG4xMDE3Olx0XG4xMDE4Olx0XHQvKiBDaGlwc2V0cyBub3QgcmVxdWlyaW5nIE1TQSBuZWVkIG5vdCBpbml0aWFsaXplXG4xMDE5Olx0XHQgKiBNU0EgcmVzb3VyY2VzLCByZXR1cm4gc3VjY2VzcyBpbiBzdWNoIGNhc2VzLlxuMTAyMDpcdFx0ICovXG4xMDIxOlx0XHRpZiAoIWFiLVx1MDAzZWh3X3BhcmFtcy5maXhlZF9md19tZW0pXG4xMDIyOlx0XHRcdHJldHVybiAwO1xuMTAyMzpcdFxuMTAyNDpcdFx0bm9kZSA9IG9mX2dldF9jaGlsZF9ieV9uYW1lKGhvc3RfZGV2LVx1MDAzZW9mX25vZGUsIFwmIzM0O3dpZmktZmlybXdhcmVcJiMzNDspO1xuMTAyNTpcdFx0aWYgKCFub2RlKSB7XG4xMDI2Olx0XHRcdGFiX2FoYi1cdTAwM2Vmdy51c2VfdHogPSB0cnVlO1xuMTAyNzpcdFx0XHRyZXR1cm4gMDtcbjEwMjg6XHRcdH1cbjEwMjk6XHRcbjEwMzA6XHRcdHJldCA9IGF0aDExa19haGJfc2V0dXBfbXNhX3Jlc291cmNlcyhhYik7XG4xMDMxOlx0XHRpZiAocmV0KSB7XG4xMDMyOlx0XHRcdGF0aDExa19lcnIoYWIsIFwmIzM0O2ZhaWxlZCB0byBzZXR1cCBtc2EgcmVzb3VyY2VzXFxuXCYjMzQ7KTtcbjEwMzM6XHRcdFx0cmV0dXJuIHJldDtcbjEwMzQ6XHRcdH1cbjEwMzU6XHRcbjEwMzY6XHRcdGluZm8uZndub2RlID0gXHUwMDI2bm9kZS1cdTAwM2Vmd25vZGU7XG4xMDM3Olx0XHRpbmZvLnBhcmVudCA9IGhvc3RfZGV2O1xuMTAzODpcdFx0aW5mby5uYW1lID0gbm9kZS1cdTAwM2VuYW1lO1xuMTAzOTpcdFx0aW5mby5kbWFfbWFzayA9IERNQV9CSVRfTUFTSygzMik7XG4xMDQwOlx0XG4xMDQxOlx0XHRwZGV2ID0gcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyX2Z1bGwoXHUwMDI2aW5mbyk7XG4xMDQyOlx0XHRpZiAoSVNfRVJSKHBkZXYpKSB7XG4xMDQzOlx0XHRcdG9mX25vZGVfcHV0KG5vZGUpO1xuMTA0NDpcdFx0XHRyZXR1cm4gUFRSX0VSUihwZGV2KTtcbjEwNDU6XHRcdH1cbjEwNDY6XHRcbjEwNDc6XHRcdHJldCA9IG9mX2RtYV9jb25maWd1cmUoXHUwMDI2cGRldi1cdTAwM2VkZXYsIG5vZGUsIHRydWUpO1xuMTA0ODpcdFx0aWYgKHJldCkge1xuMTA0OTpcdFx0XHRhdGgxMWtfZXJyKGFiLCBcJiMzNDtkbWEgY29uZmlndXJlIGZhaWw6ICVkXFxuXCYjMzQ7LCByZXQpO1xuMTA1MDpcdFx0XHRnb3RvIGVycl91bnJlZ2lzdGVyO1xuMTA1MTpcdFx0fVxuMTA1MjpcdFxuMTA1MzpcdFx0YWJfYWhiLVx1MDAzZWZ3LmRldiA9IFx1MDAyNnBkZXYtXHUwMDNlZGV2O1xuMTA1NDpcdFxuMTA1NTpcdFx0aW9tbXVfZG9tID0gaW9tbXVfcGFnaW5nX2RvbWFpbl9hbGxvYyhhYl9haGItXHUwMDNlZncuZGV2KTtcbjEwNTY6XHRcdGlmIChJU19FUlIoaW9tbXVfZG9tKSkge1xuMTA1NzpcdFx0XHRhdGgxMWtfZXJyKGFiLCBcJiMzNDtmYWlsZWQgdG8gYWxsb2NhdGUgaW9tbXUgZG9tYWluXFxuXCYjMzQ7KTtcbjEwNTg6XHRcdFx0cmV0ID0gUFRSX0VSUihpb21tdV9kb20pO1xuMTA1OTpcdFx0XHRnb3RvIGVycl91bnJlZ2lzdGVyO1xuMTA2MDpcdFx0fVxuMTA2MTpcdFxuMTA2MjpcdFx0cmV0ID0gaW9tbXVfYXR0YWNoX2RldmljZShpb21tdV9kb20sIGFiX2FoYi1cdTAwM2Vmdy5kZXYpO1xuMTA2MzpcdFx0aWYgKHJldCkge1xuMTA2NDpcdFx0XHRhdGgxMWtfZXJyKGFiLCBcJiMzNDtjb3VsZCBub3QgYXR0YWNoIGRldmljZTogJWRcXG5cJiMzNDssIHJldCk7XG4xMDY1Olx0XHRcdGdvdG8gZXJyX2lvbW11X2ZyZWU7XG4xMDY2Olx0XHR9XG4xMDY3Olx0XG4xMDY4Olx0XHRyZXQgPSBpb21tdV9tYXAoaW9tbXVfZG9tLCBhYl9haGItXHUwMDNlZncubXNhX3BhZGRyLFxuMTA2OTpcdFx0XHRcdGFiX2FoYi1cdTAwM2Vmdy5tc2FfcGFkZHIsIGFiX2FoYi1cdTAwM2Vmdy5tc2Ffc2l6ZSxcbjEwNzA6XHRcdFx0XHRJT01NVV9SRUFEIHwgSU9NTVVfV1JJVEUsIEdGUF9LRVJORUwpO1xuMTA3MTpcdFx0aWYgKHJldCkge1xuMTA3MjpcdFx0XHRhdGgxMWtfZXJyKGFiLCBcJiMzNDtmYWlsZWQgdG8gbWFwIGZpcm13YXJlIHJlZ2lvbjogJWRcXG5cJiMzNDssIHJldCk7XG4xMDczOlx0XHRcdGdvdG8gZXJyX2lvbW11X2RldGFjaDtcbjEwNzQ6XHRcdH1cbjEwNzU6XHRcbjEwNzY6XHRcdHJldCA9IGlvbW11X21hcChpb21tdV9kb20sIGFiX2FoYi1cdTAwM2Vmdy5jZV9wYWRkcixcbjEwNzc6XHRcdFx0XHRhYl9haGItXHUwMDNlZncuY2VfcGFkZHIsIGFiX2FoYi1cdTAwM2Vmdy5jZV9zaXplLFxuMTA3ODpcdFx0XHRcdElPTU1VX1JFQUQgfCBJT01NVV9XUklURSwgR0ZQX0tFUk5FTCk7XG4xMDc5Olx0XHRpZiAocmV0KSB7XG4xMDgwOlx0XHRcdGF0aDExa19lcnIoYWIsIFwmIzM0O2ZhaWxlZCB0byBtYXAgZmlybXdhcmUgQ0UgcmVnaW9uOiAlZFxcblwmIzM0OywgcmV0KTtcbjEwODE6XHRcdFx0Z290byBlcnJfaW9tbXVfdW5tYXA7XG4xMDgyOlx0XHR9XG4xMDgzOlx0XG4xMDg0Olx0XHRhYl9haGItXHUwMDNlZncudXNlX3R6ID0gZmFsc2U7XG4xMDg1Olx0XHRhYl9haGItXHUwMDNlZncuaW9tbXVfZG9tYWluID0gaW9tbXVfZG9tO1xuMTA4NjpcdFx0b2Zfbm9kZV9wdXQobm9kZSk7XG4xMDg3Olx0XG4xMDg4Olx0XHRyZXR1cm4gMDtcbjEwODk6XHRcbjEwOTA6XHRlcnJfaW9tbXVfdW5tYXA6XG4xMDkxOlx0XHRpb21tdV91bm1hcChpb21tdV9kb20sIGFiX2FoYi1cdTAwM2Vmdy5tc2FfcGFkZHIsIGFiX2FoYi1cdTAwM2Vmdy5tc2Ffc2l6ZSk7XG4xMDkyOlx0XG4xMDkzOlx0ZXJyX2lvbW11X2RldGFjaDpcbjEwOTQ6XHRcdGlvbW11X2RldGFjaF9kZXZpY2UoaW9tbXVfZG9tLCBhYl9haGItXHUwMDNlZncuZGV2KTtcbjEwOTU6XHRcbjEwOTY6XHRlcnJfaW9tbXVfZnJlZTpcbjEwOTc6XHRcdGlvbW11X2RvbWFpbl9mcmVlKGlvbW11X2RvbSk7XG4xMDk4Olx0XG4xMDk5Olx0ZXJyX3VucmVnaXN0ZXI6XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTYgMTY6MjA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTE1NwoJCQkJCQkJb3V0cHV0OiA0NAoJCQkJCQkJdGhvdWdodHM6IDc0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgYXRoMTFrX2FoYiBQcm9iZSBGdW5jdGlvbmFsaXR5KioKCk9rYXksIHNvIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgaG93IGBhdGgxMWtfYWhiX3Byb2JlYCB3b3Jrcy4gSXQgbG9va3MgbGlrZSBpdCBjcml0aWNhbGx5IHJlbGllcyBvbiBgZGV2aWNlX2dldF9tYXRjaF9kYXRhKCZhbXA7cGRldi0mZ3Q7ZGV2KWAgcmV0dXJuaW5nIG9uZSBvZiB0aGUgc3BlY2lmaWVkIGBod19yZXZgIHZhbHVlcy4gVGhhdCYjMzk7cyB0aGUga2V5IHJlcXVpcmVtZW50IGZvciB0aGUgZHJpdmVyIHRvIHN1Y2Nlc3NmdWxseSBiaW5kIHRvIHRoZSBkZXZpY2UuCgpOb3csIEkmIzM5O20gY29uc2lkZXJpbmcgdGhlIHBvdGVudGlhbCBpbXBhY3Qgb2YgZnV6emluZywgcGFydGljdWxhcmx5IHN5emthbGxlci4gSWYgc3l6a2FsbGVyIGlzIGNyZWF0aW5nIGEgcGxhdGZvcm0gZGV2aWNlLCB0aGVuIHRoZSBkcml2ZXIgbWF0Y2hpbmcgcHJvY2VzcyBjb3VsZCBiZSBoYXBwZW5pbmcgdGhyb3VnaCBlaXRoZXIgdGhlIGRldmljZSBuYW1lIG9yLCBtb3JlIGludGVyZXN0aW5nbHksIHRoZSBPRiAoT3BlbiBGaXJtd2FyZSkgbWF0Y2ggdGFibGUuIEkgbmVlZCB0byB0YWtlIGEgbG9vayBhdCB0aGF0IE9GIG1hdGNoIHRhYmxlIHRvIHVuZGVyc3RhbmQgZXhhY3RseSB3aGF0IGNyaXRlcmlhIGFyZSBiZWluZyB1c2VkLiBJdCYjMzk7cyBjcnVjaWFsIHRvIHVuZGVyc3RhbmQgdGhpcyB0byBzZWUgaWYgdGhlcmUmIzM5O3MgYW4gYXR0YWNrIHN1cmZhY2UgdGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE2IDE2OjIwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2F0aDExa19haGJfb2ZfbWF0Y2gmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2FoYi5jLTIzLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9haGIuYzoyNDpzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBhdGgxMWtfYWhiX29mX21hdGNoW10gPSB7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2FoYi5jLTI1LVx0LyogVE9ETzogU2hvdWxkIHdlIGNoYW5nZSB0aGUgY29tcGF0aWJsZSBzdHJpbmcgdG8gc29tZXRoaW5nIHNpbWlsYXJcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2FoYi5jLTQyLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9haGIuYzo0MzpNT0RVTEVfREVWSUNFX1RBQkxFKG9mLCBhdGgxMWtfYWhiX29mX21hdGNoKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvYWhiLmMtNDQtXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9haGIuYz0xMzM2PXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGF0aDExa19haGJfZHJpdmVyID0ge1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvYWhiLmMtMTMzOC1cdFx0Lm5hbWUgPSBcJiMzNDthdGgxMWtcJiMzNDssXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2FoYi5jOjEzMzk6XHRcdC5vZl9tYXRjaF90YWJsZSA9IGF0aDExa19haGJfb2ZfbWF0Y2gsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2FoYi5jLTEzNDAtXHR9LFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNiAxNjoyMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5ODA1CgkJCQkJCQlvdXRwdXQ6IDQ0CgkJCQkJCQl0aG91Z2h0czogMTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgU3RyaW5nIENvbXBhdGliaWxpdHkqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGNvbXBhdGliaWxpdHkgaGVyZSwgc3BlY2lmaWNhbGx5IHJlbGF0aW5nIHRvIHN0cmluZ3MuIE15IGZpcnN0IHRob3VnaHQgaXMgdG8gcXVpY2tseSBldmFsdWF0ZSB0aGUgcmFuZ2Ugb2Ygc3VwcG9ydGVkIHN0cmluZyB0eXBlcyBvciBmb3JtYXRzLiBJIG5lZWQgdG8gYmUgZWZmaWNpZW50IGFuZCB6ZXJvIGluIG9uIHRoZSByZWxldmFudCBwYXJhbWV0ZXJzLCByYXRoZXIgdGhhbiBnZXR0aW5nIGJvZ2dlZCBkb3duIGluIHVubmVjZXNzYXJ5IGRldGFpbHMuIFRoZSBnb2FsIGhlcmUgaXMgdG8gZGV0ZXJtaW5lIHdoYXQgc3RyaW5nIHR5cGVzIHdpbGwgc2VhbWxlc3NseSBpbnRlZ3JhdGUgd2l0aCB0aGUgc3lzdGVtIGluIHF1ZXN0aW9uLiBJcyBpdCBVbmljb2RlLCBBU0NJSSwgVVRGLTgsIFVURi0xNj8gV2hhdCBhYm91dCBtb3JlIHNwZWNpYWxpemVkIGZvcm1hdHMsIG9yIGV2ZW4gbGVnYWN5IGVuY29kaW5ncyB0aGF0IHN0aWxsIG1pZ2h0IGJlIGluIHBsYXk/IEEgdGhvcm91Z2ggdW5kZXJzdGFuZGluZyBvZiB3aGF0JiMzOTtzIHN1cHBvcnRlZCBpcyB0aGUgZm91bmRhdGlvbiBvZiBhbnkgY29tcGF0aWJpbGl0eSBhbmFseXNpcy4gSSB3YW50IHRvIGJ1aWxkIGEgbWF0cml4LCBtYXliZTsgYSBtZW50YWwgb25lLCBvciBhIHF1aWNrIG9uZSBvbiBwYXBlciBpZiBuZWVkIGJlLCBiYXNlZCBvbiB3aGF0IHRoZSBzb3VyY2Ugc3VwcG9ydHMsIGFuZCBjb21wYXJlIGl0IHRvIHRoZSBjYXBhYmlsaXRpZXMgb2YgdGhlIGRlc3RpbmF0aW9uIGZvciBzb21lIGtpbmQgb2YgY3Jvc3MtY29tcGF0aWJpbGl0eS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTYgMTY6MjA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2FoYi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjQsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAyNDpcdHN0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIGF0aDExa19haGJfb2ZfbWF0Y2hbXSA9IHtcbiAgMjU6XHRcdC8qIFRPRE86IFNob3VsZCB3ZSBjaGFuZ2UgdGhlIGNvbXBhdGlibGUgc3RyaW5nIHRvIHNvbWV0aGluZyBzaW1pbGFyXG4gIDI2Olx0XHQgKiB0byBvbmUgdGhhdCBhdGgxMGsgdXNlcz9cbiAgMjc6XHRcdCAqL1xuICAyODpcdFx0eyAuY29tcGF0aWJsZSA9IFwmIzM0O3Fjb20saXBxODA3NC13aWZpXCYjMzQ7LFxuICAyOTpcdFx0ICAuZGF0YSA9ICh2b2lkICopQVRIMTFLX0hXX0lQUTgwNzQsXG4gIDMwOlx0XHR9LFxuICAzMTpcdFx0eyAuY29tcGF0aWJsZSA9IFwmIzM0O3Fjb20saXBxNjAxOC13aWZpXCYjMzQ7LFxuICAzMjpcdFx0ICAuZGF0YSA9ICh2b2lkICopQVRIMTFLX0hXX0lQUTYwMThfSFcxMCxcbiAgMzM6XHRcdH0sXG4gIDM0Olx0XHR7IC5jb21wYXRpYmxlID0gXCYjMzQ7cWNvbSx3Y242NzUwLXdpZmlcJiMzNDssXG4gIDM1Olx0XHQgIC5kYXRhID0gKHZvaWQgKilBVEgxMUtfSFdfV0NONjc1MF9IVzEwLFxuICAzNjpcdFx0fSxcbiAgMzc6XHRcdHsgLmNvbXBhdGlibGUgPSBcJiMzNDtxY29tLGlwcTUwMTgtd2lmaVwmIzM0OyxcbiAgMzg6XHRcdCAgLmRhdGEgPSAodm9pZCAqKUFUSDExS19IV19JUFE1MDE4X0hXMTAsXG4gIDM5Olx0XHR9LFxuICA0MDpcdFx0eyB9XG4gIDQxOlx0fTtcbiAgNDI6XHRcbiAgNDM6XHRNT0RVTEVfREVWSUNFX1RBQkxFKG9mLCBhdGgxMWtfYWhiX29mX21hdGNoKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTYgMTY6MjA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA0MjEKCQkJCQkJCW91dHB1dDogNDUKCQkJCQkJCXRob3VnaHRzOiA0OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipSZXNvdXJjZSBWZXJpZmljYXRpb24gZm9yIFBsYXRmb3JtIERldmljZSBJbml0aWFsaXphdGlvbioqCgpPa2F5LCBzbyBTeXprYWxsZXImIzM5O3MgdGVsbGluZyBtZSBpdCBjYW4gc3BpbiB1cCBhIHBsYXRmb3JtIGRldmljZSB1c2luZyB0aGVzZSBjb21wYXRpYmxlIHN0cmluZ3MuIFRoYXQmIzM5O3MgYSBnb29kIHN0YXJ0LCBidXQgSSBuZWVkIHRvIGRpZyBkZWVwZXIuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBkb2VzIHRoaXMgbmV3IGRldmljZSAqYWN0dWFsbHkqIGhhdmUgd2hhdCBpdCBuZWVkcyB0byBmdW5jdGlvbj8gVGhpbmdzIGxpa2UgSW50ZXJydXB0IFJlcXVlc3QgTGluZXMgKElSUXMpIGFuZCBtZW1vcnkgcmVnaW9ucyBhcmUgY3JpdGljYWwuIFRoZXkgYXJlIHRoZSBveHlnZW4gZm9yIHRoaXMgdGhpbmcuCgpMZXQmIzM5O3Mgbm90IGp1bXAgdG8gY29uY2x1c2lvbnMuIEkgbmVlZCB0byB2ZXJpZnkgaXRzIHJlc291cmNlIGFsbG9jYXRpb24uIExldCBtZSBjaGVjayB0aGUgYGF0aDExa19haGJfc2V0dXBfcmVzb3VyY2VzYCBmdW5jdGlvbi4gVGhhdCYjMzk7cyB3aGVyZSBpdCYjMzk7cyBhbGwgaGFuZGxlZC4gVGhhdCYjMzk7cyB3aGVyZSBJIHdpbGwgZmluZCBteSBhbnN3ZXJzLiBUaGF0IGlzIHRoZSBrZXkgZnVuY3Rpb24gdGhhdCBtYWtlcyB0aGlzIHdob2xlIHRoaW5nIHRpY2shCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE2IDE2OjIwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9haGIuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDk1MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgOTUwOlx0c3RhdGljIGludCBhdGgxMWtfYWhiX3NldHVwX21zYV9yZXNvdXJjZXMoc3RydWN0IGF0aDExa19iYXNlICphYilcbiA5NTE6XHR7XG4gOTUyOlx0XHRzdHJ1Y3QgYXRoMTFrX2FoYiAqYWJfYWhiID0gYXRoMTFrX2FoYl9wcml2KGFiKTtcbiA5NTM6XHRcdHN0cnVjdCBkZXZpY2UgKmRldiA9IGFiLVx1MDAzZWRldjtcbiA5NTQ6XHRcdHN0cnVjdCByZXNvdXJjZSByO1xuIDk1NTpcdFx0aW50IHJldDtcbiA5NTY6XHRcbiA5NTc6XHRcdHJldCA9IG9mX3Jlc2VydmVkX21lbV9yZWdpb25fdG9fcmVzb3VyY2UoZGV2LVx1MDAzZW9mX25vZGUsIDAsIFx1MDAyNnIpO1xuIDk1ODpcdFx0aWYgKHJldCkge1xuIDk1OTpcdFx0XHRkZXZfZXJyKGRldiwgXCYjMzQ7ZmFpbGVkIHRvIHJlc29sdmUgbXNhIGZpeGVkIHJlZ2lvblxcblwmIzM0Oyk7XG4gOTYwOlx0XHRcdHJldHVybiByZXQ7XG4gOTYxOlx0XHR9XG4gOTYyOlx0XG4gOTYzOlx0XHRhYl9haGItXHUwMDNlZncubXNhX3BhZGRyID0gci5zdGFydDtcbiA5NjQ6XHRcdGFiX2FoYi1cdTAwM2Vmdy5tc2Ffc2l6ZSA9IHJlc291cmNlX3NpemUoXHUwMDI2cik7XG4gOTY1Olx0XG4gOTY2Olx0XHRyZXQgPSBvZl9yZXNlcnZlZF9tZW1fcmVnaW9uX3RvX3Jlc291cmNlKGRldi1cdTAwM2VvZl9ub2RlLCAxLCBcdTAwMjZyKTtcbiA5Njc6XHRcdGlmIChyZXQpIHtcbiA5Njg6XHRcdFx0ZGV2X2VycihkZXYsIFwmIzM0O2ZhaWxlZCB0byByZXNvbHZlIGNlIGZpeGVkIHJlZ2lvblxcblwmIzM0Oyk7XG4gOTY5Olx0XHRcdHJldHVybiByZXQ7XG4gOTcwOlx0XHR9XG4gOTcxOlx0XG4gOTcyOlx0XHRhYl9haGItXHUwMDNlZncuY2VfcGFkZHIgPSByLnN0YXJ0O1xuIDk3MzpcdFx0YWJfYWhiLVx1MDAzZWZ3LmNlX3NpemUgPSByZXNvdXJjZV9zaXplKFx1MDAyNnIpO1xuIDk3NDpcdFxuIDk3NTpcdFx0cmV0dXJuIDA7XG4gOTc2Olx0fVxuIDk3NzpcdFxuIDk3ODpcdHN0YXRpYyBpbnQgYXRoMTFrX2FoYl9jZV9yZW1hcChzdHJ1Y3QgYXRoMTFrX2Jhc2UgKmFiKVxuIDk3OTpcdHtcbiA5ODA6XHRcdGNvbnN0IHN0cnVjdCBjZV9yZW1hcCAqY2VfcmVtYXAgPSBhYi1cdTAwM2Vod19wYXJhbXMuY2VfcmVtYXA7XG4gOTgxOlx0XHRzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2ID0gYWItXHUwMDNlcGRldjtcbiA5ODI6XHRcbiA5ODM6XHRcdGlmICghY2VfcmVtYXApIHtcbiA5ODQ6XHRcdFx0Lyogbm8gc2VwYXJhdGUgQ0UgcmVnaXN0ZXIgc3BhY2UgKi9cbiA5ODU6XHRcdFx0YWItXHUwMDNlbWVtX2NlID0gYWItXHUwMDNlbWVtO1xuIDk4NjpcdFx0XHRyZXR1cm4gMDtcbiA5ODc6XHRcdH1cbiA5ODg6XHRcbiA5ODk6XHRcdC8qIGNlIHJlZ2lzdGVyIHNwYWNlIGlzIG1vdmVkIG91dCBvZiB3Y3NzIHVubGlrZSBpcHE4MDc0IG9yIGlwcTYwMThcbiA5OTA6XHRcdCAqIGFuZCB0aGUgc3BhY2UgaXMgbm90IGNvbnRpZ3VvdXMsIGhlbmNlIHJlbWFwcGluZyB0aGUgQ0UgcmVnaXN0ZXJzXG4gOTkxOlx0XHQgKiB0byBhIG5ldyBzcGFjZSBmb3IgYWNjZXNzaW5nIHRoZW0uXG4gOTkyOlx0XHQgKi9cbiA5OTM6XHRcdGFiLVx1MDAzZW1lbV9jZSA9IGlvcmVtYXAoY2VfcmVtYXAtXHUwMDNlYmFzZSwgY2VfcmVtYXAtXHUwMDNlc2l6ZSk7XG4gOTk0Olx0XHRpZiAoIWFiLVx1MDAzZW1lbV9jZSkge1xuIDk5NTpcdFx0XHRkZXZfZXJyKFx1MDAyNnBkZXYtXHUwMDNlZGV2LCBcJiMzNDtjZSBpb3JlbWFwIGVycm9yXFxuXCYjMzQ7KTtcbiA5OTY6XHRcdFx0cmV0dXJuIC1FTk9NRU07XG4gOTk3Olx0XHR9XG4gOTk4Olx0XG4gOTk5Olx0XHRyZXR1cm4gMDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTYgMTY6MjA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE0ODIKCQkJCQkJCW91dHB1dDogNDQKCQkJCQkJCXRob3VnaHRzOiAyNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKk1pc3NpbmcgRnVuY3Rpb24gQ2FsbCBpbiBSZXZpZXcqKgoKT2theSwgaG9sZCBvbiBhIHNlY29uZC4gSSYjMzk7bSBsb29raW5nIG92ZXIgdGhpcyBjb2RlLCBzcGVjaWZpY2FsbHkgdGhpcyBzZWN0aW9uLCBhbmQgc29tZXRoaW5nJiMzOTtzIG5vdCBxdWl0ZSByaWdodC4gSSBleHBlY3RlZCB0byBzZWUgYSBjYWxsIHRvIGBhdGgxMWtfYWhiX3NldHVwX3Jlc291cmNlc2AgaW4gdGhpcyBjb250ZXh0LCBidXQgaXQmIzM5O3MgY29uc3BpY3VvdXNseSBhYnNlbnQuIEkmIzM5O20gYW4gZXhwZXJ0IGluIHRoaXMgYXJlYSwgc28gSSBrbm93IHdoZXJlIGl0IHNob3VsZCBiZSwgYW5kIHRoZSBmbG93IGp1c3QgZG9lc24mIzM5O3Qgc2VlbSBsb2dpY2FsIHdpdGhvdXQgaXQuIEkgbmVlZCB0byB0cmFjayBpdCBkb3duLiBXaGVyZSBpcyB0aGlzIGZ1bmN0aW9uIGFjdHVhbGx5IGJlaW5nIGNhbGxlZCBmcm9tPyBJJiMzOTtsbCBuZWVkIHRvIGdvIGh1bnRpbmcgZm9yIGl0IG5vdy4gVGltZSB0byBkaWcgZGVlcGVyIGludG8gdGhlIGNvZGViYXNlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNiAxNjoyMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDthdGgxMWtfYWhiX3NldHVwX3Jlc291cmNlcyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvYWhiLmM9OTE5PXN0YXRpYyB2b2lkIGF0aDExa19haGJfcmVsZWFzZV9zbXAycF9oYW5kbGUoc3RydWN0IGF0aDExa19iYXNlICphYilcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2FoYi5jLTkyOC1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvYWhiLmM6OTI5OnN0YXRpYyBpbnQgYXRoMTFrX2FoYl9zZXR1cF9yZXNvdXJjZXMoc3RydWN0IGF0aDExa19iYXNlICphYilcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvYWhiLmMtOTMwLXtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2FoYi5jPTExNDE9c3RhdGljIGludCBhdGgxMWtfYWhiX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9haGIuYy0xMTk1LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9haGIuYzoxMTk2Olx0cmV0ID0gYXRoMTFrX2FoYl9zZXR1cF9yZXNvdXJjZXMoYWIpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9haGIuYy0xMTk3LVx0aWYgKHJldClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTYgMTY6MjA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE5OTgKCQkJCQkJCW91dHB1dDogNDUKCQkJCQkJCXRob3VnaHRzOiAxNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSB3ZSBnby4uLgoKKipEZWx2aW5nIGludG8gYGF0aDExa19haGJfc2V0dXBfcmVzb3VyY2VzYCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgYGF0aDExa19haGJfc2V0dXBfcmVzb3VyY2VzYCBmdW5jdGlvbi4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHVuZGVyc3RhbmQgaXRzIHB1cnBvc2Ugd2l0aGluIHRoZSBicm9hZGVyIGBhdGgxMWtgIGZyYW1ld29yaywgc3BlY2lmaWNhbGx5IGhvdyBpdCByZWxhdGVzIHRvIHRoZSBBSEIgYnVzIGFuZCByZXNvdXJjZSBhbGxvY2F0aW9uLiBHaXZlbiB0aGUgbmFtZSwgSSYjMzk7bSBleHBlY3RpbmcgaXQgdG8gaGFuZGxlIHRoZSBpbml0aWFsaXphdGlvbiBhbmQgY29uZmlndXJhdGlvbiBvZiBoYXJkd2FyZSByZXNvdXJjZXMgbmVlZGVkIGJ5IHRoZSBkcml2ZXIgb24gYW4gQUhCLWNvbm5lY3RlZCBkZXZpY2UuCgpJIGltbWVkaWF0ZWx5IHdhbnQgdG8gcGlucG9pbnQgd2hhdCBleGFjdGx5ICYjMzQ7cmVzb3VyY2VzJiMzNDsgZW5jb21wYXNzIGhlcmUuIEFyZSB3ZSB0YWxraW5nIGFib3V0IERNQSBjaGFubmVscz8gTWVtb3J5IHJlZ2lvbnM/IEludGVycnVwdCBsaW5lcz8gT3IgcGVyaGFwcyBhIGNvbWJpbmF0aW9uIG9mIHRoZXNlIGFuZCBvdGhlciBIVy1zcGVjaWZpYyBjb25maWd1cmF0aW9ucz8gSSYjMzk7bGwgbmVlZCB0byBjYXJlZnVsbHkgZXhhbWluZSB0aGUgY29kZSB0byBzZWUgaG93IHRoZXNlIHJlc291cmNlcyBhcmUgaWRlbnRpZmllZCwgcmVxdWVzdGVkLCBhbmQsIGNydWNpYWxseSwgcHJvdGVjdGVkIGZyb20gY29uZmxpY3RzLgoKVGhlIEFIQiBidXMgaXRzZWxmIGlzIGEga2V5IHBpZWNlIG9mIHRoaXMgcHV6emxlLiBIb3cgZG9lcyB0aGUgY29kZSBpbnRlcmFjdCB3aXRoIHRoZSBBSEIgYnJpZGdlPyBJcyB0aGVyZSBhbnkgc3BlY2lmaWMgYnVzIGNsb2NrIGNvbmZpZ3VyYXRpb24gaW52b2x2ZWQsIGFuZCBpZiBzbywgaG93IGlzIGl0IGhhbmRsZWQ/IEFyZSB0aGVyZSBhbnkgcG93ZXItbWFuYWdlbWVudCBjb25zaWRlcmF0aW9ucyBpbiB0aGlzIHNldHVwLCBvciBpcyBpdCBhc3N1bWVkIHRoZSBBSEIgaXMgYWxyZWFkeSBwb3dlcmVkIHVwIGFuZCByZWFkeT8KCkkmIzM5O20gcGFydGljdWxhcmx5IGludGVyZXN0ZWQgaW4gaG93IHRoZSBmdW5jdGlvbiBoYW5kbGVzIHBvdGVudGlhbCBlcnJvcnMuIFdoYXQgYXJlIHRoZSBlcnJvciBwYXRocywgYW5kIHdoYXQga2luZCBvZiByZWNvdmVyeSBvciBjbGVhbnVwIG1lY2hhbmlzbXMgYXJlIGluIHBsYWNlPyBHb29kIHJlc291cmNlIG1hbmFnZW1lbnQgaXMgY3JpdGljYWwsIGFuZCBhIHJvYnVzdCBpbXBsZW1lbnRhdGlvbiBzaG91bGQgaGF2ZSBncmFjZWZ1bCBlcnJvciBoYW5kbGluZy4gQWxzbywgd2hhdCBkb2VzIHRoZSByZXR1cm4gdmFsdWUgc2lnbmFsIHRvIHRoZSBjYWxsZXIgYW5kIHdoeT8KCkZpbmFsbHksIEkmIzM5O2xsIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIGRhdGEgc3RydWN0dXJlcyBpbnZvbHZlZCwgZXNwZWNpYWxseSBhbnkgY3VzdG9tIHN0cnVjdHVyZXMgb3IgZW51bXMgdGhhdCBhcmUgc3BlY2lmaWMgdG8gdGhlIEFIQiBpbnRlcmZhY2UuIEkmIzM5O20gbG9va2luZyBmb3IgY2xlYXIsIGNvbmNpc2UgZGVmaW5pdGlvbnMgdGhhdCBoZWxwIG1lIHVuZGVyc3RhbmQgdGhlIGZsb3cgb2YgZGF0YSBhbmQgY29udHJvbC4gTGV0JiMzOTtzIHNlZSBpZiB0aGlzIGZ1bmN0aW9uIGxpdmVzIHVwIHRvIG15IGV4cGVjdGF0aW9ucyEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTYgMTY6MjA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2FoYi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogOTI5LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA5Mjk6XHRzdGF0aWMgaW50IGF0aDExa19haGJfc2V0dXBfcmVzb3VyY2VzKHN0cnVjdCBhdGgxMWtfYmFzZSAqYWIpXG4gOTMwOlx0e1xuIDkzMTpcdFx0c3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiA9IGFiLVx1MDAzZXBkZXY7XG4gOTMyOlx0XHRzdHJ1Y3QgcmVzb3VyY2UgKm1lbV9yZXM7XG4gOTMzOlx0XHR2b2lkIF9faW9tZW0gKm1lbTtcbiA5MzQ6XHRcbiA5MzU6XHRcdGlmIChhYi1cdTAwM2Vod19wYXJhbXMuaHlicmlkX2J1c190eXBlKVxuIDkzNjpcdFx0XHRyZXR1cm4gYXRoMTFrX2FoYl9zZXR1cF9tc2lfcmVzb3VyY2VzKGFiKTtcbiA5Mzc6XHRcbiA5Mzg6XHRcdG1lbSA9IGRldm1fcGxhdGZvcm1fZ2V0X2FuZF9pb3JlbWFwX3Jlc291cmNlKHBkZXYsIDAsIFx1MDAyNm1lbV9yZXMpO1xuIDkzOTpcdFx0aWYgKElTX0VSUihtZW0pKSB7XG4gOTQwOlx0XHRcdGRldl9lcnIoXHUwMDI2cGRldi1cdTAwM2VkZXYsIFwmIzM0O2lvcmVtYXAgZXJyb3JcXG5cJiMzNDspO1xuIDk0MTpcdFx0XHRyZXR1cm4gUFRSX0VSUihtZW0pO1xuIDk0MjpcdFx0fVxuIDk0MzpcdFxuIDk0NDpcdFx0YWItXHUwMDNlbWVtID0gbWVtO1xuIDk0NTpcdFx0YWItXHUwMDNlbWVtX2xlbiA9IHJlc291cmNlX3NpemUobWVtX3Jlcyk7XG4gOTQ2Olx0XG4gOTQ3Olx0XHRyZXR1cm4gMDtcbiA5NDg6XHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE2IDE2OjIwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyNzU2CgkJCQkJCQlvdXRwdXQ6IDQ5CgkJCQkJCQl0aG91Z2h0czogMzcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czoKCioqQW5hbHl6aW5nIHRoZSBSZXNvdXJjZSBEZXBlbmRlbmN5KioKCkFscmlnaHQsIHNvIHRoZSBjb3JlIG9mIHRoaXMgc2VlbXMgdG8gYmUgYSBtZW1vcnkgcmVzb3VyY2UgZGVwZW5kZW5jeS4gTm8gcHJvYmxlbSwgU3l6a2FsbGVyIGNhbiBkZWZpbml0ZWx5IGhlbHAgdGhlcmUg4oCTIGl0JiMzOTtzIGRlc2lnbmVkIHRvIG1hbmFnZSBhbmQgZXhwb3NlIHRob3NlIGtpbmRzIG9mIHJlc291cmNlcyBkdXJpbmcgZnV6emluZy4gQnV0LCB0aGF0IGBhdGgxMWtfYWhiX3NldHVwX3NtcDJwX2hhbmRsZWAgZnVuY3Rpb24uLi4gdGhhdCYjMzk7cyB0aGUgaW50ZXJlc3RpbmcgcG9pbnQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyByb2xlIHdpdGhpbiB0aGlzIGNvbnRleHQsIGl0cyBwdXJwb3NlLCBhbmQgd2hldGhlciBpdCBpbnRyb2R1Y2VzIGFueSBzcGVjaWZpYyBjb21wbGV4aXRpZXMgb3IgdnVsbmVyYWJpbGl0aWVzIEkgbmVlZCB0byBjb25zaWRlciB3aGVuIGRlc2lnbmluZyBhIGZ1enppbmcgY2FtcGFpZ24gb3IgZXhwbG9pdC4gSXQmIzM5O3MgdGhlIGtleSB0byB0aGUgc29sdXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE2IDE2OjIwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2F0aDExa19haGJfc2V0dXBfc21wMnBfaGFuZGxlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9haGIuYz04NTE9c3RhdGljIGludCBhdGgxMWtfYWhiX3NldHVwX21zaV9yZXNvdXJjZXMoc3RydWN0IGF0aDExa19iYXNlICphYilcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2FoYi5jLTkwMC1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvYWhiLmM6OTAxOnN0YXRpYyBpbnQgYXRoMTFrX2FoYl9zZXR1cF9zbXAycF9oYW5kbGUoc3RydWN0IGF0aDExa19iYXNlICphYilcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvYWhiLmMtOTAyLXtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2FoYi5jPTExNDE9c3RhdGljIGludCBhdGgxMWtfYWhiX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9haGIuYy0xMjA3LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9haGIuYzoxMjA4Olx0cmV0ID0gYXRoMTFrX2FoYl9zZXR1cF9zbXAycF9oYW5kbGUoYWIpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9haGIuYy0xMjA5LVx0aWYgKHJldClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTYgMTY6MjA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTMyODcKCQkJCQkJCW91dHB1dDogNDUKCQkJCQkJCXRob3VnaHRzOiAyMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIGBhdGgxMWtfYWhiX3NldHVwX3NtcDJwX2hhbmRsZWAgZnVuY3Rpb24uIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byB1bmRlcnN0YW5kIGl0cyBwdXJwb3NlIHdpdGhpbiB0aGUgYnJvYWRlciBhdGgxMWsgZHJpdmVyIGZyYW1ld29yaywgcGFydGljdWxhcmx5IGNvbmNlcm5pbmcgdGhlIGludGVyYWN0aW9uIG9mIHRoZSBBSEIgYnVzIGFuZCBwb3RlbnRpYWxseSBTaW11bHRhbmVvdXMgTXVsdGktUGF0aCAoU01QKSBvciBQb2ludC10by1Qb2ludCAoUDJQKSBjb21tdW5pY2F0aW9uLCBhcyBzdWdnZXN0ZWQgYnkgdGhlIG5hbWUuIEkgaW1tZWRpYXRlbHkgd2FudCB0byBncmFzcCB0aGUgbGV2ZWwgb2YgdGhpcyBmdW5jdGlvbiB3aXRoaW4gdGhlIGRyaXZlciYjMzk7cyBjYWxsIHN0cnVjdHVyZS4gSXMgaXQgY2FsbGVkIGR1cmluZyBpbml0aWFsaXphdGlvbiwgZHVyaW5nIGRldmljZSBwcm9iaW5nLCBvciBpbiByZXNwb25zZSB0byBzb21lIHNwZWNpZmljIGV2ZW50PwoKSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgY2x1ZXMgYWJvdXQgdGhlIGhhcmR3YXJlIGl04oCZcyB0YXJnZXRpbmcuIElzIHRoaXMgc3BlY2lmaWMgdG8gYSBjZXJ0YWluIFFDQSBjaGlwc2V0IG9yIGEgcGFydGljdWxhciBQSFk/IFVuZGVyc3RhbmRpbmcgdGhlIHRhcmdldCBoYXJkd2FyZSB3aWxsIGluZm9ybSBteSBleHBlY3RhdGlvbnMgYWJvdXQgd2hhdCByZWdpc3RlcnMgYXJlIGJlaW5nIG1hbmlwdWxhdGVkLCB3aGF0IG1lbW9yeSBpcyBiZWluZyBhbGxvY2F0ZWQsIGFuZCB3aGF0IGludGVycnVwdCBzb3VyY2VzIGFyZSBiZWluZyBlbmFibGVkLgoKSSYjMzk7bSBhbHNvIGN1cmlvdXMgYWJvdXQgdGhlIGNvbmN1cnJlbmN5IGFzcGVjdHMuIFRoZSBtZW50aW9uIG9mIFNNUCBtaWdodCBpbXBseSBtdWx0aS10aHJlYWRpbmcgYW5kIGxvY2tpbmcgaXNzdWVzLiBJ4oCZbGwgYmUgb24gdGhlIGxvb2tvdXQgZm9yIGFueSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlcyB1c2VkLCBzdWNoIGFzIG11dGV4ZXMgb3Igc3BpbmxvY2tzLCBhbmQgaG93IHRoZXkgcmVsYXRlIHRvIHRoZSBBSEIgY29tbXVuaWNhdGlvbiBwcm9jZXNzIHRvIGVuc3VyZSBkYXRhIGludGVncml0eS4gV2hhdCBzYWZlZ3VhcmRzIGFyZSBlbXBsb3llZCB0byBlbnN1cmUgdGhlcmUgYXJlIG5vIHJhY2UgY29uZGl0aW9ucyBvciBkZWFkbG9ja3M/CgpUaGVuLCB0aGUgUDJQIHBhcnQ6IEkgd2FudCB0byBkZXRlcm1pbmUgaWYgdGhpcyBmdW5jdGlvbiBpcyByZWxhdGVkIHRvIGRpcmVjdCBsaW5rIGVzdGFibGlzaG1lbnQsIG9yIGlmIGl0IGhhcyB0byBkbyB3aXRoIHNvbWUgaGlnaGVyLWxldmVsIGNvbm5lY3Rpb24gbWFuYWdlbWVudCBwcm90b2NvbHMuIElzIGl0IHNldHRpbmcgdXAgaGFyZHdhcmUgZW5kcG9pbnRzIGZvciBkaXJlY3QgZGF0YSB0cmFuc2ZlciBvciBwcm92aWRpbmcgc29tZSBraW5kIG9mIGhhcmR3YXJlIG9mZmxvYWQ/IEkgZXhwZWN0IGEgY2VydGFpbiBsZXZlbCBvZiByZWdpc3RlciB3cmFuZ2xpbmcsIGNsb2NrIGNvbmZpZ3VyYXRpb24sIGFuZCBwb3NzaWJseSBETUEgc2V0dXAgaW4gdGhlIGZ1bmN0aW9uJiMzOTtzIGJvZHkuIEkgYW0gYWxzbyBzZWFyY2hpbmcgZm9yIHRoZSBlcnJvci1oYW5kbGluZyBtZWNoYW5pc21zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNiAxNjoyMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvYWhiLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA5MDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDkwMTpcdHN0YXRpYyBpbnQgYXRoMTFrX2FoYl9zZXR1cF9zbXAycF9oYW5kbGUoc3RydWN0IGF0aDExa19iYXNlICphYilcbiA5MDI6XHR7XG4gOTAzOlx0XHRzdHJ1Y3QgYXRoMTFrX2FoYiAqYWJfYWhiID0gYXRoMTFrX2FoYl9wcml2KGFiKTtcbiA5MDQ6XHRcbiA5MDU6XHRcdGlmICghYWItXHUwMDNlaHdfcGFyYW1zLnNtcDJwX3dvd19leGl0KVxuIDkwNjpcdFx0XHRyZXR1cm4gMDtcbiA5MDc6XHRcbiA5MDg6XHRcdGFiX2FoYi1cdTAwM2VzbXAycF9pbmZvLnNtZW1fc3RhdGUgPSBxY29tX3NtZW1fc3RhdGVfZ2V0KGFiLVx1MDAzZWRldiwgXCYjMzQ7d2xhbi1zbXAycC1vdXRcJiMzNDssXG4gOTA5Olx0XHRcdFx0XHRcdFx0XHQgICAgXHUwMDI2YWJfYWhiLVx1MDAzZXNtcDJwX2luZm8uc21lbV9iaXQpO1xuIDkxMDpcdFx0aWYgKElTX0VSUihhYl9haGItXHUwMDNlc21wMnBfaW5mby5zbWVtX3N0YXRlKSkge1xuIDkxMTpcdFx0XHRhdGgxMWtfZXJyKGFiLCBcJiMzNDtmYWlsZWQgdG8gZmV0Y2ggc21lbSBzdGF0ZTogJWxkXFxuXCYjMzQ7LFxuIDkxMjpcdFx0XHRcdCAgIFBUUl9FUlIoYWJfYWhiLVx1MDAzZXNtcDJwX2luZm8uc21lbV9zdGF0ZSkpO1xuIDkxMzpcdFx0XHRyZXR1cm4gUFRSX0VSUihhYl9haGItXHUwMDNlc21wMnBfaW5mby5zbWVtX3N0YXRlKTtcbiA5MTQ6XHRcdH1cbiA5MTU6XHRcbiA5MTY6XHRcdHJldHVybiAwO1xuIDkxNzpcdH1cbiA5MTg6XHRcbiA5MTk6XHRzdGF0aWMgdm9pZCBhdGgxMWtfYWhiX3JlbGVhc2Vfc21wMnBfaGFuZGxlKHN0cnVjdCBhdGgxMWtfYmFzZSAqYWIpXG4gOTIwOlx0e1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNiAxNjoyMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDExNwoJCQkJCQkJb3V0cHV0OiA0NgoJCQkJCQkJdGhvdWdodHM6IDQzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoaXMgbG9naWMsIHBocmFzZWQgYXMgaWYgaXQgd2VyZSBteSBvd24gdGhvdWdodCBwcm9jZXNzLCBnaXZlbiBteSBleHBlcnRpc2U6CgoqKkNoZWNraW5nIGEgV293IEV4aXQgQ29uZGl0aW9uIGluIElQUTgwNzQgSGFyZHdhcmUqKgoKQWxyaWdodCwgc28gdGhlIGNvZGUgaXMgY2hlY2tpbmcgYSBjb25kaXRpb24uIFNwZWNpZmljYWxseSwgaXQgc2VlbXMgbGlrZSBhIGZ1bmN0aW9uIG9yIGJsb2NrIG9mIGNvZGUgaXMgZGVzaWduZWQgdG8gZGV0ZXJtaW5lIGlmIHNvbWUgYWN0aW9uLCBsaWtlbHkgcmVsYXRlZCB0byAmIzM0O3dha2Utb24td2lyZWxlc3MmIzM0OyBvciBzaW1pbGFyLCBzaG91bGQgZXhpdCBlYXJseS4gVGhlIGNvcmUgb2YgdGhpcyBkZWNpc2lvbiBoaW5nZXMgb24gdGhlIHN0YXRlIG9mIGBhYi0mZ3Q7aHdfcGFyYW1zLnNtcDJwX3dvd19leGl0YC4gSWYgdGhhdCBmbGFnIGlzIGZhbHNlLCBtZWFuaW5nIHRoZSAmIzM0O3NtcDJwX3dvd19leGl0JiMzNDsgY29uZGl0aW9uIGlzbiYjMzk7dCBtZXQgb3IgZW5hYmxlZCwgdGhlIGNvZGUgaW1tZWRpYXRlbHkgcmV0dXJucyBhIHplcm8gdmFsdWUuIFRoaXMgc3VnZ2VzdHMgYSBwb3RlbnRpYWwgZWFybHkgZXhpdCBwYXRoLCBsaWtlbHkgc2lnbmFsaW5nIHRoYXQgd2hhdGV2ZXIgcHJvY2VzcyBpdCYjMzk7cyBpbnZvbHZlZCBpbiBzaG91bGQgY2Vhc2Ugb3IgcmVwb3J0IGEgc3VjY2Vzc2Z1bCwgYWxiZWl0IHBvdGVudGlhbGx5IGluY29tcGxldGUsIHJlc3VsdC4KClRoZSBuZXh0IGNyaXRpY2FsIHN0ZXAgd291bGQgYmUgdG8gcmV2aWV3IGBod19wYXJhbXNgIHNwZWNpZmljYWxseSBmb3IgSVBRODA3NCwgYXMgdGhpcyBwcm92aWRlcyB0aGUgY3J1Y2lhbCBjb250ZXh0IGFib3V0IHRoZSBoYXJkd2FyZSBwbGF0Zm9ybSBpbiB3aGljaCB0aGlzIGBzbXAycF93b3dfZXhpdGAgaXMgYmVpbmcgZXZhbHVhdGVkLiBJJiMzOTtsbCBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBgaHdfcGFyYW1zYCBzdG9yZXMgZm9yIHRoYXQgcGFydGljdWxhciBjaGlwLCBzaW5jZSBgc21wMnBfd293X2V4aXRgIGlzIGRpcmVjdGx5IGluZmx1ZW5jZWQgYnkgaXQuIEkga25vdyBJIHdpbGwgbmVlZCB0byBsb29rIHNwZWNpZmljYWxseSBmb3IgZGV0YWlscyByZWxhdGVkIHRvIHBvd2VyIG1hbmFnZW1lbnQsIHdha2Utb24td2lyZWxlc3MgY2FwYWJpbGl0aWVzLCBhbmQgYW55IHJlbGV2YW50IGhhcmR3YXJlIGNvbnN0cmFpbnRzIG9uIHRoZSBJUFE4MDc0LiBUaGUgZ29hbCBpcyB0byBmaWd1cmUgb3V0IHRoZSBleGFjdCBtZWFuaW5nIG9mIHRoYXQgZmxhZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTYgMTY6MjA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7QVRIMTFLX0hXX0lQUTgwNzQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2FoYi5jPTI0PXN0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIGF0aDExa19haGJfb2ZfbWF0Y2hbXSA9IHtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2FoYi5jLTI4LVx0eyAuY29tcGF0aWJsZSA9IFwmIzM0O3Fjb20saXBxODA3NC13aWZpXCYjMzQ7LFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9haGIuYzoyOTpcdCAgLmRhdGEgPSAodm9pZCAqKUFUSDExS19IV19JUFE4MDc0LFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9haGIuYy0zMC1cdH0sXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9haGIuYz0xMTQxPXN0YXRpYyBpbnQgYXRoMTFrX2FoYl9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvYWhiLmMtMTE1MS1cdHN3aXRjaCAoaHdfcmV2KSB7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2FoYi5jOjExNTI6XHRjYXNlIEFUSDExS19IV19JUFE4MDc0OlxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9haGIuYy0xMTUzLVx0Y2FzZSBBVEgxMUtfSFdfSVBRNjAxOF9IVzEwOlxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvY29yZS5jPTQxPXN0YXRpYyBjb25zdCBzdHJ1Y3QgYXRoMTFrX2h3X3BhcmFtcyBhdGgxMWtfaHdfcGFyYW1zW10gPSB7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2NvcmUuYy00Mi1cdHtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvY29yZS5jOjQzOlx0XHQuaHdfcmV2ID0gQVRIMTFLX0hXX0lQUTgwNzQsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2NvcmUuYy00NC1cdFx0Lm5hbWUgPSBcJiMzNDtpcHE4MDc0IGh3Mi4wXCYjMzQ7LFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvY29yZS5oPTE0NT1lbnVtIGF0aDExa19od19yZXYge1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9jb3JlLmg6MTQ2Olx0QVRIMTFLX0hXX0lQUTgwNzQsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2NvcmUuaC0xNDctXHRBVEgxMUtfSFdfUUNBNjM5MF9IVzIwLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNiAxNjoyMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTEwOQoJCQkJCQkJb3V0cHV0OiA0NAoJCQkJCQkJdGhvdWdodHM6IDIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgZmlyc3QtcGVyc29uIHN1bW1hcnksIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFzIHJlcXVlc3RlZDoKCioqRGl2aW5nIGludG8gYXRoMTFrX2h3X3BhcmFtcyBpbiBjb3JlLmMqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGhhcmR3YXJlIHBhcmFtZXRlcnMgYXJlIGJlaW5nIHNldCBmb3IgdGhlIGF0aDExayBkcml2ZXIuIFNwZWNpZmljYWxseSwgSSYjMzk7bSBnb2luZyB0byBkaWcgaW50byB0aGUgYGF0aDExa19od19wYXJhbXNgIGZ1bmN0aW9uIGxvY2F0ZWQgaW4gYGNvcmUuY2AuIEkgZXhwZWN0IHRoaXMgZnVuY3Rpb24gaG9sZHMgdGhlIGtleSB0byBjb25maWd1cmluZyB0aGUgaGFyZHdhcmUmIzM5O3MgUkYgYW5kIGJhc2ViYW5kIHNldHRpbmdzLiBJJiMzOTttIGdvaW5nIHRvIGJlIGxvb2tpbmcgZm9yIHdoZXJlIHRoZSByZWd1bGF0b3J5IGRvbWFpbiBpbmZvcm1hdGlvbiBpcyBhcHBsaWVkLCBhbmQgaG93IHRoZSBkcml2ZXIgaW50ZXJhY3RzIHdpdGggdGhlIGZpcm13YXJlIHRvIG9wdGltaXplIHRoZSBQSFkmIzM5O3MgYmVoYXZpb3IuIEkgYW50aWNpcGF0ZSBzZWVpbmcgdGhlIGFsbG9jYXRpb24gb2YgcmVzb3VyY2VzIGZvciBkaWZmZXJlbnQgcmFkaW8gY2hhaW5zIGFuZCB0aGUgc2V0dGluZ3MgZm9yIHRoZSB2YXJpb3VzIG1vZGVzIHdlIHN1cHBvcnQgKDgwMi4xMWF4LCBldGMuKS4gSSBuZWVkIHRvIHNlZSBob3cgdGhleSYjMzk7cmUgaGFuZGxpbmcgY2FsaWJyYXRpb24gYW5kIGR5bmFtaWMgYWRqdXN0bWVudHMgYmFzZWQgb24gY2hhbm5lbCBhbmQgZW52aXJvbm1lbnQuIFRoaXMgaXMgd2hlcmUgdGhlIGNvcmUgb2YgcGVyZm9ybWFuY2UgYW5kIGNvbXBsaWFuY2UgbGl2ZXMsIHNvIHVuZGVyc3RhbmRpbmcgdGhpcyBmdW5jdGlvbiBpcyBnb2luZyB0byBiZSBjcml0aWNhbCB0byB1bmRlcnN0YW5kaW5nIGFueSB0aHJvdWdocHV0IGxpbWl0YXRpb25zIEkmIzM5O20gc2VlaW5nLiBJJiMzOTttIGFsc28gaW50ZXJlc3RlZCBpbiBhbnkgcG90ZW50aWFsIHBvd2VyLXNhdmluZyBmZWF0dXJlcyB0aGF0IGFyZSBiZWluZyBzZXQgaGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTYgMTY6MjE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2NvcmUuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDQxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDQxOlx0c3RhdGljIGNvbnN0IHN0cnVjdCBhdGgxMWtfaHdfcGFyYW1zIGF0aDExa19od19wYXJhbXNbXSA9IHtcbiAgNDI6XHRcdHtcbiAgNDM6XHRcdFx0Lmh3X3JldiA9IEFUSDExS19IV19JUFE4MDc0LFxuICA0NDpcdFx0XHQubmFtZSA9IFwmIzM0O2lwcTgwNzQgaHcyLjBcJiMzNDssXG4gIDQ1Olx0XHRcdC5mdyA9IHtcbiAgNDY6XHRcdFx0XHQuZGlyID0gXCYjMzQ7SVBRODA3NC9odzIuMFwmIzM0OyxcbiAgNDc6XHRcdFx0XHQuYm9hcmRfc2l6ZSA9IDI1NiAqIDEwMjQsXG4gIDQ4Olx0XHRcdFx0LmNhbF9vZmZzZXQgPSAxMjggKiAxMDI0LFxuICA0OTpcdFx0XHR9LFxuICA1MDpcdFx0XHQubWF4X3JhZGlvcyA9IDMsXG4gIDUxOlx0XHRcdC5iZGZfYWRkciA9IDB4NEIwQzAwMDAsXG4gIDUyOlx0XHRcdC5od19vcHMgPSBcdTAwMjZpcHE4MDc0X29wcyxcbiAgNTM6XHRcdFx0LnJpbmdfbWFzayA9IFx1MDAyNmF0aDExa19od19yaW5nX21hc2tfaXBxODA3NCxcbiAgNTQ6XHRcdFx0LmludGVybmFsX3NsZWVwX2Nsb2NrID0gZmFsc2UsXG4gIDU1Olx0XHRcdC5yZWdzID0gXHUwMDI2aXBxODA3NF9yZWdzLFxuICA1NjpcdFx0XHQucW1pX3NlcnZpY2VfaW5zX2lkID0gQVRIMTFLX1FNSV9XTEZXX1NFUlZJQ0VfSU5TX0lEX1YwMV9JUFE4MDc0LFxuICA1NzpcdFx0XHQuaG9zdF9jZV9jb25maWcgPSBhdGgxMWtfaG9zdF9jZV9jb25maWdfaXBxODA3NCxcbiAgNTg6XHRcdFx0LmNlX2NvdW50ID0gMTIsXG4gIDU5Olx0XHRcdC50YXJnZXRfY2VfY29uZmlnID0gYXRoMTFrX3RhcmdldF9jZV9jb25maWdfd2xhbl9pcHE4MDc0LFxuICA2MDpcdFx0XHQudGFyZ2V0X2NlX2NvdW50ID0gMTEsXG4gIDYxOlx0XHRcdC5zdmNfdG9fY2VfbWFwID0gYXRoMTFrX3RhcmdldF9zZXJ2aWNlX3RvX2NlX21hcF93bGFuX2lwcTgwNzQsXG4gIDYyOlx0XHRcdC5zdmNfdG9fY2VfbWFwX2xlbiA9IDIxLFxuICA2MzpcdFx0XHQuY2VfaWVfYWRkciA9IFx1MDAyNmF0aDExa19jZV9pZV9hZGRyX2lwcTgwNzQsXG4gIDY0Olx0XHRcdC5zaW5nbGVfcGRldl9vbmx5ID0gZmFsc2UsXG4gIDY1Olx0XHRcdC5yeGRtYTFfZW5hYmxlID0gdHJ1ZSxcbiAgNjY6XHRcdFx0Lm51bV9yeGRtYV9wZXJfcGRldiA9IDEsXG4gIDY3Olx0XHRcdC5yeF9tYWNfYnVmX3JpbmcgPSBmYWxzZSxcbiAgNjg6XHRcdFx0LnZkZXZfc3RhcnRfZGVsYXkgPSBmYWxzZSxcbiAgNjk6XHRcdFx0Lmh0dF9wZWVyX21hcF92MiA9IHRydWUsXG4gIDcwOlx0XG4gIDcxOlx0XHRcdC5zcGVjdHJhbCA9IHtcbiAgNzI6XHRcdFx0XHQuZmZ0X3N6ID0gMixcbiAgNzM6XHRcdFx0XHQvKiBIVyBidWcsIGV4cGVjdGVkIEJJTiBzaXplIGlzIDIgYnl0ZXMgYnV0IEhXIHJlcG9ydCBhcyA0IGJ5dGVzLlxuICA3NDpcdFx0XHRcdCAqIHNvIGFkZGVkIHBhZCBzaXplIGFzIDIgYnl0ZXMgdG8gY29tcGVuc2F0ZSB0aGUgQklOIHNpemVcbiAgNzU6XHRcdFx0XHQgKi9cbiAgNzY6XHRcdFx0XHQuZmZ0X3BhZF9zeiA9IDIsXG4gIDc3Olx0XHRcdFx0LnN1bW1hcnlfcGFkX3N6ID0gMCxcbiAgNzg6XHRcdFx0XHQuZmZ0X2hkcl9sZW4gPSAxNixcbiAgNzk6XHRcdFx0XHQubWF4X2ZmdF9iaW5zID0gNTEyLFxuICA4MDpcdFx0XHRcdC5mcmFnbWVudF8xNjBtaHogPSB0cnVlLFxuICA4MTpcdFx0XHR9LFxuICA4MjpcdFxuICA4MzpcdFx0XHQuaW50ZXJmYWNlX21vZGVzID0gQklUKE5MODAyMTFfSUZUWVBFX1NUQVRJT04pIHxcbiAgODQ6XHRcdFx0XHRcdFx0QklUKE5MODAyMTFfSUZUWVBFX0FQKSB8XG4gIDg1Olx0XHRcdFx0XHRcdEJJVChOTDgwMjExX0lGVFlQRV9NRVNIX1BPSU5UKSxcbiAgODY6XHRcdFx0LnN1cHBvcnRzX21vbml0b3IgPSB0cnVlLFxuICA4NzpcdFx0XHQuZnVsbF9tb25pdG9yX21vZGUgPSBmYWxzZSxcbiAgODg6XHRcdFx0LnN1cHBvcnRzX3NoYWRvd19yZWdzID0gZmFsc2UsXG4gIDg5Olx0XHRcdC5pZGxlX3BzID0gZmFsc2UsXG4gIDkwOlx0XHRcdC5zdXBwb3J0c19zdGFfcHMgPSBmYWxzZSxcbiAgOTE6XHRcdFx0LmNvbGRib290X2NhbF9tbSA9IHRydWUsXG4gIDkyOlx0XHRcdC5jb2xkYm9vdF9jYWxfZnRtID0gdHJ1ZSxcbiAgOTM6XHRcdFx0LmNiY2FsX3Jlc3RhcnRfZncgPSB0cnVlLFxuICA5NDpcdFx0XHQuZndfbWVtX21vZGUgPSAwLFxuICA5NTpcdFx0XHQubnVtX3ZkZXZzID0gMTYgJiM0MzsgMSxcbiAgOTY6XHRcdFx0Lm51bV9wZWVycyA9IDUxMixcbiAgOTc6XHRcdFx0LnN1cHBvcnRzX3N1c3BlbmQgPSBmYWxzZSxcbiAgOTg6XHRcdFx0LmhhbF9kZXNjX3N6ID0gc2l6ZW9mKHN0cnVjdCBoYWxfcnhfZGVzY19pcHE4MDc0KSxcbiAgOTk6XHRcdFx0LnN1cHBvcnRzX3JlZ2RiID0gZmFsc2UsXG4gMTAwOlx0XHRcdC5maXhfbDFzcyA9IHRydWUsXG4gMTAxOlx0XHRcdC5jcmVkaXRfZmxvdyA9IGZhbHNlLFxuIDEwMjpcdFx0XHQuaGFsX3BhcmFtcyA9IFx1MDAyNmF0aDExa19od19oYWxfcGFyYW1zX2lwcTgwNzQsXG4gMTAzOlx0XHRcdC5zdXBwb3J0c19keW5hbWljX3NtcHNfNmdoeiA9IGZhbHNlLFxuIDEwNDpcdFx0XHQuYWxsb2NfY2FjaGVhYmxlX21lbW9yeSA9IHRydWUsXG4gMTA1Olx0XHRcdC5zdXBwb3J0c19yc3NpX3N0YXRzID0gZmFsc2UsXG4gMTA2Olx0XHRcdC5md193bWlfZGlhZ19ldmVudCA9IGZhbHNlLFxuIDEwNzpcdFx0XHQuY3VycmVudF9jY19zdXBwb3J0ID0gZmFsc2UsXG4gMTA4Olx0XHRcdC5kYnJfZGVidWdfc3VwcG9ydCA9IHRydWUsXG4gMTA5Olx0XHRcdC5nbG9iYWxfcmVzZXQgPSBmYWxzZSxcbiAxMTA6XHRcdFx0LmJpb3Nfc2FyX2NhcGEgPSBOVUxMLFxuIDExMTpcdFx0XHQubTNfZndfc3VwcG9ydCA9IGZhbHNlLFxuIDExMjpcdFx0XHQuZml4ZWRfYmRmX2FkZHIgPSB0cnVlLFxuIDExMzpcdFx0XHQuZml4ZWRfbWVtX3JlZ2lvbiA9IHRydWUsXG4gMTE0Olx0XHRcdC5zdGF0aWNfd2luZG93X21hcCA9IGZhbHNlLFxuIDExNTpcdFx0XHQuaHlicmlkX2J1c190eXBlID0gZmFsc2UsXG4gMTE2Olx0XHRcdC5maXhlZF9md19tZW0gPSBmYWxzZSxcbiAxMTc6XHRcdFx0LnN1cHBvcnRfb2ZmX2NoYW5uZWxfdHggPSBmYWxzZSxcbiAxMTg6XHRcdFx0LnN1cHBvcnRzX211bHRpX2Jzc2lkID0gZmFsc2UsXG4gMTE5Olx0XG4gMTIwOlx0XHRcdC5zcmFtX2R1bXAgPSB7fSxcbiAxMjE6XHRcbiAxMjI6XHRcdFx0LnRjbF9yaW5nX3JldHJ5ID0gdHJ1ZSxcbiAxMjM6XHRcdFx0LnR4X3Jpbmdfc2l6ZSA9IERQX1RDTF9EQVRBX1JJTkdfU0laRSxcbiAxMjQ6XHRcdFx0LnNtcDJwX3dvd19leGl0ID0gZmFsc2UsXG4gMTI1Olx0XHRcdC5zdXBwb3J0X2R1YWxfc3RhdGlvbnMgPSBmYWxzZSxcbiAxMjY6XHRcdFx0LnBkZXZfc3VzcGVuZCA9IGZhbHNlLFxuIDEyNzpcdFx0XHQuY2ZyX3N1cHBvcnQgPSB0cnVlLFxuIDEyODpcdFx0XHQuY2ZyX251bV9zdHJlYW1fYnVmcyA9IDI1NSxcbiAxMjk6XHRcdFx0LmNmcl9zdHJlYW1fYnVmX3NpemUgPSA4MjAwLFxuIDEzMDpcdFx0fSxcbiAxMzE6XHRcdHtcbiAxMzI6XHRcdFx0Lmh3X3JldiA9IEFUSDExS19IV19JUFE2MDE4X0hXMTAsXG4gMTMzOlx0XHRcdC5uYW1lID0gXCYjMzQ7aXBxNjAxOCBodzEuMFwmIzM0OyxcbiAxMzQ6XHRcdFx0LmZ3ID0ge1xuIDEzNTpcdFx0XHRcdC5kaXIgPSBcJiMzNDtJUFE2MDE4L2h3MS4wXCYjMzQ7LFxuIDEzNjpcdFx0XHRcdC5ib2FyZF9zaXplID0gMjU2ICogMTAyNCxcbiAxMzc6XHRcdFx0XHQuY2FsX29mZnNldCA9IDEyOCAqIDEwMjQsXG4gMTM4Olx0XHRcdH0sXG4gMTM5Olx0XHRcdC5tYXhfcmFkaW9zID0gMixcbiAxNDA6XHRcdFx0LmJkZl9hZGRyID0gMHg0QUJDMDAwMCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTYgMTY6MjE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTcyNDEKCQkJCQkJCW91dHB1dDogNDYKCQkJCQkJCXRob3VnaHRzOiAxNjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBJUFE4MDc0L1dDTjY3NTAgRmlybXdhcmUgTG9hZGluZyoqCgpPa2F5LCBzbyBgc21wMnBfd293X2V4aXRgIGlzIGZsYWdnZWQgYXMgZmFsc2UgZm9yIHRoZSBJUFE4MDc0LCBJUFE2MDE4LCBhbmQgSVBRNTAxOC4gUG90ZW50aWFsbHkgdHJ1ZSBmb3IgdGhlIFdDTjY3NTAsIGJ1dCBTeXprYWxsZXIgY2FuIGhhcHBpbHkgZXhwbG9pdCB0aGUgSVBRODA3NCB3aXRob3V0IG5lZWRpbmcgU01QMlAgaGFuZGxlcnMsIHNvIHRoYXQmIzM5O3Mgbm90IGEgbWFqb3IgY29uY2Vybi4KCk5vdywgSSYjMzk7bSB0aGlua2luZyBhYm91dCBgYXRoMTFrX2FoYl9zZXR1cF9tc2FfcmVzb3VyY2VzYC4gVGhhdCBvbmUgbmVlZHMgdGhlICYjMzQ7d2lmaS1maXJtd2FyZSYjMzQ7IHJlc2VydmVkIG1lbW9yeSByZWdpb25zLiBIbW0sIGJ1dCBoYW5nIG9uLi4uIGBmaXhlZF9md19tZW1gIGlzIGFjdHVhbGx5IGZhbHNlIGZvciB0aGUgSVBRODA3NC4gVGhhdCBtZWFucyBgYXRoMTFrX2FoYl9md19yZXNvdXJjZXNfaW5pdGAgd2lsbCByZXR1cm4gMCBpbW1lZGlhdGVseS4gVGhpcyBpcyBpbnRlcmVzdGluZywgSSBuZWVkIHRvIGNoZWNrIGBhdGgxMWtfYWhiX2Z3X3Jlc291cmNlc19pbml0YCBhZ2FpbiEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTYgMTY6MjE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2FoYi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTAwOCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMDA4Olx0c3RhdGljIGludCBhdGgxMWtfYWhiX2Z3X3Jlc291cmNlc19pbml0KHN0cnVjdCBhdGgxMWtfYmFzZSAqYWIpXG4xMDA5Olx0e1xuMTAxMDpcdFx0c3RydWN0IGF0aDExa19haGIgKmFiX2FoYiA9IGF0aDExa19haGJfcHJpdihhYik7XG4xMDExOlx0XHRzdHJ1Y3QgZGV2aWNlICpob3N0X2RldiA9IGFiLVx1MDAzZWRldjtcbjEwMTI6XHRcdHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2VfaW5mbyBpbmZvID0ge307XG4xMDEzOlx0XHRzdHJ1Y3QgaW9tbXVfZG9tYWluICppb21tdV9kb207XG4xMDE0Olx0XHRzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2O1xuMTAxNTpcdFx0c3RydWN0IGRldmljZV9ub2RlICpub2RlO1xuMTAxNjpcdFx0aW50IHJldDtcbjEwMTc6XHRcbjEwMTg6XHRcdC8qIENoaXBzZXRzIG5vdCByZXF1aXJpbmcgTVNBIG5lZWQgbm90IGluaXRpYWxpemVcbjEwMTk6XHRcdCAqIE1TQSByZXNvdXJjZXMsIHJldHVybiBzdWNjZXNzIGluIHN1Y2ggY2FzZXMuXG4xMDIwOlx0XHQgKi9cbjEwMjE6XHRcdGlmICghYWItXHUwMDNlaHdfcGFyYW1zLmZpeGVkX2Z3X21lbSlcbjEwMjI6XHRcdFx0cmV0dXJuIDA7XG4xMDIzOlx0XG4xMDI0Olx0XHRub2RlID0gb2ZfZ2V0X2NoaWxkX2J5X25hbWUoaG9zdF9kZXYtXHUwMDNlb2Zfbm9kZSwgXCYjMzQ7d2lmaS1maXJtd2FyZVwmIzM0Oyk7XG4xMDI1Olx0XHRpZiAoIW5vZGUpIHtcbjEwMjY6XHRcdFx0YWJfYWhiLVx1MDAzZWZ3LnVzZV90eiA9IHRydWU7XG4xMDI3Olx0XHRcdHJldHVybiAwO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNiAxNjoyMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODAwOQoJCQkJCQkJb3V0cHV0OiA0NgoJCQkJCQkJdGhvdWdodHM6IDE3NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIElQUTgwNzQgSW5pdGlhbGl6YXRpb24gU2VxdWVuY2UqKgoKT2theSwgc28gYGZpeGVkX2Z3X21lbWAgaXMgZGVmaW5pdGVseSBmYWxzZSBmb3IgdGhlIElQUTgwNzQgcGxhdGZvcm0uIFRoYXQgbWVhbnMgdGhlIGluaXRpYWwgY2hlY2sgcmV0dXJucyB6ZXJvLCB3aGljaCBhbGxvd3MgdGhlIGBhdGgxMWtfYWhiX3Byb2JlYCBmdW5jdGlvbiB0byBwcm9ncmVzcyBmdXJ0aGVyLiBFeGNlbGxlbnQuIFNvIGZhciwgc28gZ29vZC4KCk5vdywgaG9sZCBvbi4gV2hhdCBhYm91dCBgYXRoMTFrX2NvcmVfaW5pdGA/IEkgc2VlbSB0byByZWNhbGwgdGhhdCBmdW5jdGlvbiBpcyBkZXBlbmRlbnQgb24gdGhlIGZpcm13YXJlIGJlaW5nIGxvYWRlZCBzdWNjZXNzZnVsbHkuIERvZXMgc3l6a2FsbGVyIGhhbmRsZSBmaXJtd2FyZSBsb2FkaW5nIGluIHRoZXNlIGNhc2VzPyBJIGtub3cgaXQgZG9lcyBsb2FkICpzb21lKiBmaXJtd2FyZSwgYnV0IGdlbmVyYWxseSBpdCB3b24mIzM5O3QgaW5jbHVkZSBzcGVjaWZpYyBhdGgxMWsgZmlybXdhcmUgdW5sZXNzIGl0JiMzOTtzIGJ1bmRsZWQgd2l0aGluIHRoZSBsaW51eC1maXJtd2FyZSBwYWNrYWdlLgoKRXZlbiBpZiBmaXJtd2FyZSBsb2FkaW5nIGZhaWxzIGluIGBhdGgxMWtfY29yZV9pbml0YCwgbGVhZGluZyB0byBmYWlsdXJlIHRoZXJlLCBJIHNlZSB0aGF0IHRoZSBgYXRoMTFrX2FoYl9jb25maWdfaXJxYCBmdW5jdGlvbiBpcyAqY2FsbGVkKiBhZnRlciBgYXRoMTFrX2NvcmVfaW5pdGAuIFRoYXQmIzM5O3MgYW4gaW1wb3J0YW50IGRldGFpbC4gSSBzaG91bGQgcHJvYmFibHkgcmUtZXhhbWluZSB0aGUgYGF0aDExa19haGJfcHJvYmVgIHJvdXRpbmUgaW4gbGlnaHQgb2YgdGhhdCBvcmRlci4gTGV0JiMzOTtzIGRvdWJsZSBjaGVjayB0aGF0IGFnYWluLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNiAxNjoyMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvYWhiLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMjI0LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzEyMjQ6XHRcdHJldCA9IGF0aDExa19jb3JlX2dldF9ycHJvYyhhYik7XG4xMjI1Olx0XHRpZiAocmV0KVxuMTIyNjpcdFx0XHRnb3RvIGVycl9jZV9mcmVlO1xuMTIyNzpcdFxuMTIyODpcdFx0cmV0ID0gYXRoMTFrX2NvcmVfaW5pdChhYik7XG4xMjI5Olx0XHRpZiAocmV0KSB7XG4xMjMwOlx0XHRcdGF0aDExa19lcnIoYWIsIFwmIzM0O2ZhaWxlZCB0byBpbml0IGNvcmU6ICVkXFxuXCYjMzQ7LCByZXQpO1xuMTIzMTpcdFx0XHRnb3RvIGVycl9jZV9mcmVlO1xuMTIzMjpcdFx0fVxuMTIzMzpcdFxuMTIzNDpcdFx0cmV0ID0gYXRoMTFrX2FoYl9jb25maWdfaXJxKGFiKTtcbjEyMzU6XHRcdGlmIChyZXQpIHtcbjEyMzY6XHRcdFx0YXRoMTFrX2VycihhYiwgXCYjMzQ7ZmFpbGVkIHRvIGNvbmZpZ3VyZSBpcnE6ICVkXFxuXCYjMzQ7LCByZXQpO1xuMTIzNzpcdFx0XHRnb3RvIGVycl9jZV9mcmVlO1xuMTIzODpcdFx0fVxuMTIzOTpcdFxuMTI0MDpcdFx0YXRoMTFrX3FtaV9md3Jlc2V0X2Zyb21fY29sZF9ib290KGFiKTtcbjEyNDE6XHRcbjEyNDI6XHRcdHJldHVybiAwO1xuMTI0MzpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNiAxNjoyMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODc4MgoJCQkJCQkJb3V0cHV0OiA0NAoJCQkJCQkJdGhvdWdodHM6IDM3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGFuYWx5c2lzIG9mIHRoZSBwcm92aWRlZCBzbmlwcGV0LCBmcmFtZWQgYXMgbXkgb3duIHRob3VnaHQgcHJvY2VzczoKCioqRGl2aW5nIGludG8gdGhlIGBhdGgxMWtfY29yZV9nZXRfcnByb2NgIEZ1bmN0aW9uKioKCk9rYXksIHNvIEkgc2VlIGBhdGgxMWtfY29yZV9nZXRfcnByb2NgLiBJbW1lZGlhdGVseSwgSSBrbm93IHRoYXQgdGhpcyBpcyBnb2luZyB0byBiZSBhYm91dCByZXRyaWV2aW5nIHNvbWV0aGluZyByZWxhdGVkIHRvIHJlbW90ZXByb2Mgd2l0aGluIHRoZSBhdGgxMWsgZHJpdmVyLiBHaXZlbiB0aGUgbmFtaW5nIGNvbnZlbnRpb24sIGl0IGxpa2VseSBoYW5kbGVzIHRoZSBhY3F1aXNpdGlvbiBvciByZXRyaWV2YWwgb2YgYSByZW1vdGVwcm9jIHJlc291cmNlIHRoYXQgdGhlIGF0aDExayBjb3JlIG5lZWRzIHRvIGZ1bmN0aW9uLiBUaGUgZmFjdCB0aGF0IGl0ICpnZXRzKiBzb21ldGhpbmcgc3Ryb25nbHkgc3VnZ2VzdHMgYW4gZXhpc3RpbmcgZGVwZW5kZW5jeSBvbiByZW1vdGVwcm9jLiBMZXQgbWUgZ28gdGFrZSBhIGxvb2sgYXQgdGhlIGNvZGUgZm9yIHRoYXQgZnVuY3Rpb24gYW5kIHNlZSB3aGF0IGl0IGlzIGFjdHVhbGx5IGRvaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNiAxNjoyMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDthdGgxMWtfY29yZV9nZXRfcnByb2MmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2FoYi5jPTgxMj1zdGF0aWMgY29uc3Qgc3RydWN0IGF0aDExa19oaWZfb3BzIGF0aDExa19haGJfaGlmX29wc193Y242NzUwID0ge1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvYWhiLmMtODMwLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9haGIuYzo4MzE6c3RhdGljIGludCBhdGgxMWtfY29yZV9nZXRfcnByb2Moc3RydWN0IGF0aDExa19iYXNlICphYilcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvYWhiLmMtODMyLXtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2FoYi5jPTExNDE9c3RhdGljIGludCBhdGgxMWtfYWhiX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9haGIuYy0xMjIzLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9haGIuYzoxMjI0Olx0cmV0ID0gYXRoMTFrX2NvcmVfZ2V0X3Jwcm9jKGFiKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvYWhiLmMtMTIyNS1cdGlmIChyZXQpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE2IDE2OjIxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5MzE5CgkJCQkJCQlvdXRwdXQ6IDQ1CgkJCQkJCQl0aG91Z2h0czogMTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gYGF0aDExa19jb3JlX2dldF9ycHJvY2AuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgZnVuY3Rpb24uIEdpdmVuIG15IGV4cGVydGlzZSwgSSYjMzk7bSBleHBlY3RpbmcgaXQgdG8gYmUgYSBrZXkgZWxlbWVudCBpbiB0aGUgUXVhbGNvbW0gQXRoZXJvcyAoYXRoMTFrKSBkcml2ZXImIzM5O3MgaW50ZXJhY3Rpb24gd2l0aCBhIHJlbW90ZSBwcm9jZXNzb3IsIHByb2JhYmx5IGZvciBXaS1GaSBvZmZsb2FkaW5nIG9yIHNvbWUga2luZCBvZiBoYXJkd2FyZSBhY2NlbGVyYXRpb24uIFRoZSBmdW5jdGlvbiBuYW1lIGl0c2VsZiBpcyBhIHByZXR0eSBnb29kIGluZGljYXRvciwgYnJlYWtpbmcgZG93biBpbnRvICYjMzQ7YXRoMTFrJiMzNDsgKHRoZSBkcml2ZXIpLCAmIzM0O2NvcmUmIzM0OyAobGlrZWx5IHRoZSBtYWluIG9yIGZvdW5kYXRpb25hbCBwYXJ0KSwgJiMzNDtnZXQmIzM0OyAoc3VnZ2VzdGluZyByZXRyaWV2YWwgb3IgYWNxdWlzaXRpb24pLCBhbmQgJiMzNDtycHJvYyYjMzQ7IChkZWZpbml0ZWx5IHJlbW90ZSBwcm9jZXNzb3IpLgoKTXkgaW5pdGlhbCBoeXBvdGhlc2lzIGlzIHRoaXMgZnVuY3Rpb24gaXMgcmVzcG9uc2libGUgZm9yIGluaXRpYWxpemluZyBvciBvYnRhaW5pbmcgYSBoYW5kbGUvY29udGV4dCB0byB0aGUgcmVtb3RlIHByb2Nlc3Nvci4gVGhpcyBoYW5kbGUgd291bGQgdGhlbiBiZSB1c2VkIGZvciBzdWJzZXF1ZW50IGNvbnRyb2wsIGRhdGEgdHJhbnNmZXIsIGFuZCBjb21tdW5pY2F0aW9uIHdpdGggdGhlIHJlbW90ZSBwcm9jZXNzb3IuIEkmIzM5O20gaW1hZ2luaW5nIGl0JiMzOTtzIGRlYWxpbmcgd2l0aCByZXNvdXJjZSBtYW5hZ2VtZW50OiBtYWtpbmcgc3VyZSB0aGUgcmVtb3RlIHByb2Nlc3NvciBpcyB1cCwgdGhhdCBuZWNlc3NhcnkgZmlybXdhcmUgaXMgbG9hZGVkLCB0aGF0IHRoZSByaWdodCBjb21tdW5pY2F0aW9uIGNoYW5uZWxzIGFyZSBlc3RhYmxpc2hlZC4gSSYjMzk7bGwgbmVlZCB0byBsb29rIGZvciB0aGluZ3MgbGlrZSBlcnJvciBoYW5kbGluZ+KAlGhvdyBkb2VzIGl0IG1hbmFnZSBmYWlsdXJlcyBpZiB0aGUgcmVtb3RlIHByb2Nlc3NvciBpc24mIzM5O3QgYXZhaWxhYmxlPyBEb2VzIGl0IHN1cHBvcnQgaG90cGx1Z2dpbmcgb3IgZHluYW1pYyByZWNvbmZpZ3VyYXRpb24gb2YgdGhlIHJlbW90ZSBwcm9jZXNzb3IgaWYgaXQmIzM5O3MgYWxyZWFkeSB0aGVyZT8gSSBhbHNvIHdhbnQgdG8gY2hlY2sgZm9yIGFueSBtZW1vcnkgYWxsb2NhdGlvbiBvciBsb2NraW5nLiBEZXBlbmRpbmcgb24gdGhlIGFyY2hpdGVjdHVyZSwgaXQgbWlnaHQgYmUgaW52b2x2ZWQgaW4gcGh5c2ljYWxseSBtYXBwaW5nIHNoYXJlZCBtZW1vcnkgcmVnaW9ucyBvciBlc3RhYmxpc2hpbmcgY29tbXVuaWNhdGlvbiB2aWEgc3BlY2lmaWMgaGFyZHdhcmUgaW50ZXJmYWNlcyAobGlrZSBSUE1zZyBvciBhIHNpbWlsYXIgbWVzc2FnZS1wYXNzaW5nIHN5c3RlbSkuCgpJbiBzaG9ydCwgbXkgZXhwZWN0YXRpb25zIGFyZSBoaWdoLiBJJiMzOTttIGxvb2tpbmcgZm9yIGEgc29saWQsIHdlbGwtZGVmaW5lZCBmdW5jdGlvbiB0aGF0JiMzOTtzIGNyaXRpY2FsIGZvciB0aGUgZW50aXJlIGRyaXZlciYjMzk7cyBhcmNoaXRlY3R1cmUgdG8gZnVuY3Rpb24gY29ycmVjdGx5LiBJJiMzOTttIGV4cGVjdGluZyByb2J1c3QgZXJyb3IgaGFuZGxpbmcsIGVmZmljaWVudCByZXNvdXJjZSBtYW5hZ2VtZW50LCBhbmQgcGVyaGFwcyBhIGNsZXZlciBhcHByb2FjaCB0byBpbnRlcmZhY2luZyB3aXRoIHRoZSByZW1vdGUgcHJvY2Vzc29yLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNiAxNjoyMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvYWhiLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA4MzEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDgzMTpcdHN0YXRpYyBpbnQgYXRoMTFrX2NvcmVfZ2V0X3Jwcm9jKHN0cnVjdCBhdGgxMWtfYmFzZSAqYWIpXG4gODMyOlx0e1xuIDgzMzpcdFx0c3RydWN0IGF0aDExa19haGIgKmFiX2FoYiA9IGF0aDExa19haGJfcHJpdihhYik7XG4gODM0Olx0XHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBhYi1cdTAwM2VkZXY7XG4gODM1Olx0XHRzdHJ1Y3QgcnByb2MgKnBycHJvYztcbiA4MzY6XHRcdHBoYW5kbGUgcnByb2NfcGhhbmRsZTtcbiA4Mzc6XHRcbiA4Mzg6XHRcdGlmIChvZl9wcm9wZXJ0eV9yZWFkX3UzMihkZXYtXHUwMDNlb2Zfbm9kZSwgXCYjMzQ7cWNvbSxycHJvY1wmIzM0OywgXHUwMDI2cnByb2NfcGhhbmRsZSkpIHtcbiA4Mzk6XHRcdFx0YXRoMTFrX2VycihhYiwgXCYjMzQ7ZmFpbGVkIHRvIGdldCBxNl9ycHJvYyBoYW5kbGVcXG5cJiMzNDspO1xuIDg0MDpcdFx0XHRyZXR1cm4gLUVOT0VOVDtcbiA4NDE6XHRcdH1cbiA4NDI6XHRcbiA4NDM6XHRcdHBycHJvYyA9IHJwcm9jX2dldF9ieV9waGFuZGxlKHJwcm9jX3BoYW5kbGUpO1xuIDg0NDpcdFx0aWYgKCFwcnByb2MpXG4gODQ1Olx0XHRcdHJldHVybiBkZXZfZXJyX3Byb2JlKFx1MDAyNmFiLVx1MDAzZXBkZXYtXHUwMDNlZGV2LCAtRVBST0JFX0RFRkVSLCBcJiMzNDtmYWlsZWQgdG8gZ2V0IHJwcm9jXFxuXCYjMzQ7KTtcbiA4NDY6XHRcdGFiX2FoYi1cdTAwM2V0Z3RfcnByb2MgPSBwcnByb2M7XG4gODQ3Olx0XG4gODQ4Olx0XHRyZXR1cm4gMDtcbiA4NDk6XHR9XG4gODUwOlx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE2IDE2OjIxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwMTA3CgkJCQkJCQlvdXRwdXQ6IDQ3CgkJCQkJCQl0aG91Z2h0czogMzAwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlJlYWNoaW5nIGBhdGgxMWtfYWhiX3Byb2JlYCBpbiBTeXprYWxsZXIqKgoKT2theSwgc28gSSYjMzk7bSB0aGlua2luZyBhYm91dCB0aGlzIGBxY29tLHJwcm9jYCByZXF1aXJlbWVudC4gSXQgc2VlbXMgbGlrZSBTeXprYWxsZXIgbWlnaHQgbmVlZCBhIHZhbGlkIGBycHJvY19waGFuZGxlYCB0byBtYWtlIHRoaXMgd29yaywgd2hpY2ggbGlrZWx5IG1lYW5zIGl0IG5lZWRzIHRvIHNpbXVsYXRlIGEgcmVtb3RlcHJvYyBub2RlIGluIGl0cyBkZXZpY2UgdHJlZS4gSSBrbm93IFN5emthbGxlciBoYXMgc29tZSBiYXNpYyBkZXZpY2UgdHJlZSBpbmplY3Rpb24sIGJ1dCBpdCYjMzk7cyBub3QgZXhhY3RseSBjb21wcmVoZW5zaXZlLiBJIG5lZWQgdG8gZmlndXJlIG91dCBpZiBgYXRoMTFrX2FoYl9wcm9iZWAgaXMgZXZlbiAqcmVhY2hhYmxlKiB3aXRoaW4gYSBTeXprYWxsZXIgY29udGV4dC4KCkFscmlnaHQsIGxldCBtZSBzZWUgaWYgdGhlcmUgYXJlIGFueSBzeXpib3QgcmVwb3J0cyBtZW50aW9uaW5nIGBhdGgxMWtfYWhiX3Byb2JlYC4gSSBkb24mIzM5O3QgaGF2ZSBkaXJlY3QgYWNjZXNzIHRvIHN5emJvdCBsb2dzLCBidXQgSSBjYW4gYXQgbGVhc3QgdmVyaWZ5IGNvZGUgcmVhY2hhYmlsaXR5LiBXYWl0IGEgbWludXRlLi4uIHRoZSBwYXRjaCBpdHNlbGYgaXMgYXV0aG9yZWQgYnkgYHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDtgISBUaGF0JiMzOTtzIGl0ISBJZiBTeXprYWxsZXIgZm91bmQgYSBidWcgdGhlcmUsIGl0IGRlZmluaXRpdmVseSBtZWFucyB0aGlzIGNvZGUgKmlzKiByZWFjaGFibGUgd2l0aGluIHRoZSBTeXprYWxsZXIgZW52aXJvbm1lbnQuIEl0IGFsc28gc2F5cyAmIzM0O2FwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3JiMzNDsuCgpTbyBTeXprYWxsZXIgZGVmaW5pdGVseSAqY2FuKiBoaXQgdGhpcy4gQnV0IGhvdz8gV2hhdCYjMzk7cyB0aGUgdHJpZ2dlcmluZyBtZWNoYW5pc20/IENvdWxkIGl0IGJlIGNyZWF0aW5nIGEgcGxhdGZvcm0gZGV2aWNlIHRoYXQgdXNlcyBgcWNvbSxycHJvY2AgYW5kIHBvaW50cyB0byBzb21lIGtpbmQgb2YgZmFrZSByZW1vdGVwcm9jPyBPciBwZXJoYXBzIHRoZSBidWcgd2FzIHRyaWdnZXJlZCB3aXRoaW4gYGF0aDExa19haGJfY29uZmlnX2V4dF9pcnFgLCBidXQgdGhyb3VnaCBhIGNvbXBsZXRlbHkgZGlmZmVyZW50IGNvZGUgcGF0aD8gSSBuZWVkIHRvIHRyYWNlIHRoaXMgYmFjay4gTGV0IG1lIGludmVzdGlnYXRlIHdoZXJlIGBhdGgxMWtfYWhiX2NvbmZpZ19leHRfaXJxYCBpcyBiZWluZyBjYWxsZWQgZnJvbS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTYgMTY6MjE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YXRoMTFrX2FoYl9jb25maWdfZXh0X2lycSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvYWhiLmM9NTIxPXN0YXRpYyBpcnFyZXR1cm5fdCBhdGgxMWtfYWhiX2V4dF9pbnRlcnJ1cHRfaGFuZGxlcihpbnQgaXJxLCB2b2lkICphcmcpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9haGIuYy01MzQtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2FoYi5jOjUzNTpzdGF0aWMgaW50IGF0aDExa19haGJfY29uZmlnX2V4dF9pcnEoc3RydWN0IGF0aDExa19iYXNlICphYilcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvYWhiLmMtNTM2LXtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2FoYi5jPTYzNj1zdGF0aWMgaW50IGF0aDExa19haGJfY29uZmlnX2lycShzdHJ1Y3QgYXRoMTFrX2Jhc2UgKmFiKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvYWhiLmMtNjY3LVx0LyogQ29uZmlndXJlIGV4dGVybmFsIGludGVycnVwdHMgKi9cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvYWhiLmM6NjY4Olx0cmV0ID0gYXRoMTFrX2FoYl9jb25maWdfZXh0X2lycShhYik7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2FoYi5jLTY2OS1cdGlmIChyZXQpIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTYgMTY6MjE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjExMjIKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAzMTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgUG90ZW50aWFsIEJ1ZyBpbiB0aGUgYXRoMTFrIEFIQiBEcml2ZXIqKgoKT2theSwgc28gc3l6a2FsbGVyIGhhcyBmbGFnZ2VkIHNvbWV0aGluZyBpbiB0aGUgYGF0aDExa2AgQUhCIGRyaXZlci4gTGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gSXQgbG9va3MgbGlrZSB0aGUgaXNzdWUgaXMgb3JpZ2luYXRpbmcgd2l0aGluIGBhdGgxMWtfYWhiX2NvbmZpZ19pcnFgLCB3aGljaCBpcyBvbmx5IGNhbGxlZCBmcm9tIGBhdGgxMWtfYWhiX3Byb2JlYC4gVGhhdCBtZWFucywgdG8gaGl0IHRoaXMgYnVnLCBzeXprYWxsZXIgKm11c3QqIGJlIHN1Y2Nlc3NmdWxseSByZWFjaGluZyBgYXRoMTFrX2FoYl9wcm9iZWAuIFRoYXQmIzM5O3MgdGhlIGZpcnN0IGtleSBvYnNlcnZhdGlvbi4KClRoZSBwYXRjaCBpdHNlbGYgYWRkcmVzc2VzIGEgbWVtb3J5IGxlYWsgb3IgcmVzb3VyY2UgbGVhaywgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUgZXJyb3IgaGFuZGxpbmcgcGF0aCBvZiBgYXRoMTFrX2FoYl9jb25maWdfZXh0X2lycWAuIEkgY2FuIHNlZSB0aGUgbG9naWM7IGZhaWx1cmUgaW4gYGFsbG9jX25ldGRldl9kdW1teWAgcmVzdWx0cyBpbiBgLUVOT01FTWAsIGFuZCBmYWlsdXJlIGluIGByZXF1ZXN0X2lycWAgcmV0dXJucyB0aGUgZXJyb3IuIFRoZSBwYXRjaCBpbXBsZW1lbnRzIGNsZWFudXAgdXNpbmcgYGF0aDExa19haGJfZnJlZV9leHRfaXJxX2dycGAgYW5kIGBhdGgxMWtfYWhiX2ZyZWVfY2VfaXJxc2AuIFRoZSBmYWN0IHRoYXQgc3l6a2FsbGVyIGNhdWdodCB0aGlzIGluZGljYXRlcyB0aGUgcHJvYmxlbWF0aWMgY29kZSBpcyByZWFjaGFibGUsIHNvIEkgc2hvdWxkIHNldCBgV29ydGhGdXp6aW5nPXRydWVgLgoKTm93LCB0aGUgZm9jdXMgc2hvdWxkIGJlIG9uIHRoZSByZWxldmFudCBmdW5jdGlvbnMuIEJhc2VkIG9uIHRoZSBwYXRjaCwgdGhlIGNyaXRpY2FsIG9uZXMgYXJlIGNsZWFybHkgYGF0aDExa19haGJfY29uZmlnX2V4dF9pcnFgLCBgYXRoMTFrX2FoYl9jb25maWdfaXJxYCwgdGhlIG5ldyBmcmVlaW5nIGZ1bmN0aW9ucyBgYXRoMTFrX2FoYl9mcmVlX2V4dF9pcnFfZ3JwYCBhbmQgYGF0aDExa19haGJfZnJlZV9jZV9pcnFzYCwgYW5kIHRoZSBzdXBwb3J0aW5nIGBhdGgxMWtfYWhiX2ZyZWVfZXh0X2lycWAgYW5kIGBhdGgxMWtfYWhiX2ZyZWVfaXJxYC4gSSYjMzk7bGwgbmVlZCB0byBkcmlsbCBkb3duIGludG8gdGhlIGNhbGxpbmcgY29udGV4dCBhbmQgdGhlIGxpa2VseSB0cmlnZ2VyaW5nIGNvbmRpdGlvbnMuIEkgc2hvdWxkIGJlIGFibGUgdG8gZGVyaXZlIGEgbWluaW1hbCBzZXQgb2YgY29uZmlndXJhdGlvbnMgdG8gcmVwcm9kdWNlIHRoaXMuIExldCYjMzk7cyBzZWUgd2hhdCB0aGUgZGVwZW5kZW5jaWVzIGFyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTYgMTY6MjE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEFUSDExSyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEJTRC0zLUNsYXVzZS1DbGVhclxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9LY29uZmlnOjI6Y29uZmlnIEFUSDExS1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9LY29uZmlnLTMtXHR0cmlzdGF0ZSBcJiMzNDtRdWFsY29tbSA4MDIuMTFheCBjaGlwc2V0IHN1cHBvcnRcJiMzNDtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL0tjb25maWctMTItXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL0tjb25maWc6MTM6Y29uZmlnIEFUSDExS19BSEJcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvS2NvbmZpZy0xNC1cdHRyaXN0YXRlIFwmIzM0O0F0aGVyb3MgYXRoMTFrIEFIQiBzdXBwb3J0XCYjMzQ7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9LY29uZmlnLTE5LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9LY29uZmlnOjIwOmNvbmZpZyBBVEgxMUtfUENJXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL0tjb25maWctMjEtXHR0cmlzdGF0ZSBcJiMzNDtBdGhlcm9zIGF0aDExayBQQ0kgc3VwcG9ydFwmIzM0O1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvS2NvbmZpZy0yOS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvS2NvbmZpZzozMDpjb25maWcgQVRIMTFLX0RFQlVHXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL0tjb25maWctMzEtXHRib29sIFwmIzM0O1FDQSBhdGgxMWsgZGVidWdnaW5nXCYjMzQ7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9LY29uZmlnLTM3LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9LY29uZmlnOjM4OmNvbmZpZyBBVEgxMUtfREVCVUdGU1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9LY29uZmlnLTM5LVx0Ym9vbCBcJiMzNDtRQ0EgYXRoMTFrIGRlYnVnZnMgc3VwcG9ydFwmIzM0O1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvS2NvbmZpZy00NS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvS2NvbmZpZzo0Njpjb25maWcgQVRIMTFLX1RSQUNJTkdcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvS2NvbmZpZy00Ny1cdGJvb2wgXCYjMzQ7YXRoMTFrIHRyYWNpbmcgc3VwcG9ydFwmIzM0O1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvS2NvbmZpZy01MS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvS2NvbmZpZzo1Mjpjb25maWcgQVRIMTFLX1NQRUNUUkFMXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL0tjb25maWctNTMtXHRib29sIFwmIzM0O1FDQSBhdGgxMWsgc3BlY3RyYWwgc2NhbiBzdXBwb3J0XCYjMzQ7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9LY29uZmlnLTYwLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9LY29uZmlnOjYxOmNvbmZpZyBBVEgxMUtfQ0ZSXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL0tjb25maWctNjItXHRib29sIFwmIzM0O2F0aDExayBjaGFubmVsIGZyZXF1ZW5jeSByZXNwb25zZSBzdXBwb3J0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE2IDE2OjIxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyNTc2CgkJCQkJCQlvdXRwdXQ6IDQyCgkJCQkJCQl0aG91Z2h0czogMzUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIHRoZSBBVEgxMUsgQ29uZmlndXJhdGlvbiBMYW5kc2NhcGUqKgoKUmlnaHQsIHNvIHdlJiMzOTtyZSBsb29raW5nIGF0IGNvbmZpZ3VyYXRpb25zLiBXZSYjMzk7dmUgZ290IGBBVEgxMUtgIGFuZCBgQVRIMTFLX0FIQmAgaW4gdGhlIGNyb3NzaGFpcnMuIE15IGltbWVkaWF0ZSBpbnN0aW5jdCBpcyB0byBkaWcgaW50byB0aGUgZGVwZW5kZW5jaWVzIG9mIHRoYXQgYEFUSDExS19BSEJgIG1vZHVsZS4gSXQmIzM5O3MgYWxtb3N0IGFsd2F5cyB3aGVyZSB0aGUgaW50ZXJlc3RpbmcgYml0cyBhbmQgcGllY2VzLCB0aGUgcG90ZW50aWFsIGdvdGNoYXMsIGFuZCB0aGUgY3JpdGljYWwgZGVzaWduIGRlY2lzaW9ucyBhcmUgcmV2ZWFsZWQuIFVuZGVyc3RhbmRpbmcgaXRzIGRlcGVuZGVuY3kgdHJlZSBpcyBwYXJhbW91bnQgYmVmb3JlIHdlIGNhbiBldmVuIGJlZ2luIHRvIGFzc2VzcyBpdHMgaW1wbGljYXRpb25zLiBXaGF0IGFyZSB0aGUgc3VwcG9ydGluZyBkcml2ZXJzPyBXaGF0IGhhcmR3YXJlIHNwZWNpZmljcyBhcmUgYmFrZWQgaW50byB0aGF0IHBhcnRpY3VsYXIgQUhCIHZhcmlhbnQ/IFRoZSBhbnN3ZXJzIHRvIHRoZXNlIHF1ZXN0aW9ucyBhcmUgZXNzZW50aWFsIHRvIGZvcm1pbmcgYSB0cnVseSBpbmZvcm1lZCBvcGluaW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNiAxNjoyMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEzLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgMTM6XHRjb25maWcgQVRIMTFLX0FIQlxuICAxNDpcdFx0dHJpc3RhdGUgXCYjMzQ7QXRoZXJvcyBhdGgxMWsgQUhCIHN1cHBvcnRcJiMzNDtcbiAgMTU6XHRcdGRlcGVuZHMgb24gQVRIMTFLXG4gIDE2Olx0XHRkZXBlbmRzIG9uIFJFTU9URVBST0NcbiAgMTc6XHRcdGhlbHBcbiAgMTg6XHRcdCAgVGhpcyBtb2R1bGUgYWRkcyBzdXBwb3J0IGZvciBBSEIgYnVzXG4gIDE5Olx0XG4gIDIwOlx0Y29uZmlnIEFUSDExS19QQ0lcbiAgMjE6XHRcdHRyaXN0YXRlIFwmIzM0O0F0aGVyb3MgYXRoMTFrIFBDSSBzdXBwb3J0XCYjMzQ7XG4gIDIyOlx0XHRkZXBlbmRzIG9uIEFUSDExSyBcdTAwMjZcdTAwMjYgUENJXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE2IDE2OjIxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyOTU4CgkJCQkJCQlvdXRwdXQ6IDQxCgkJCQkJCQl0aG91Z2h0czogMzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSBpbml0aWFsIHRob3VnaHRzLCBmcmFtZWQgYXMgYSBjb25jaXNlIHN1bW1hcnkgZm9yIGFuIGV4cGVydCBsaWtlIG15c2VsZjoKCioqSW5pdGlhbCBBc3Nlc3NtZW50OiBBVEgxMUssIFJFTU9URVBST0MsIGFuZCBEZXBlbmRlbmNpZXMqKgoKUmlnaHQsIHNvIHdlJiMzOTtyZSBzdGFydGluZyB3aXRoIGBBVEgxMUtfQUhCYCBhbmQgYFJFTU9URVBST0NgIGZsYWdnZWQgYXMgbmVjZXNzYXJ5LiBUaGUgZmlyc3QgbG9naWNhbCBzdGVwIGlzIHRvIHBpbnBvaW50IGBBVEgxMUtgJiMzOTtzIGRlcGVuZGVuY2llcy4gVGhpcyBtZWFucyBkaXZpbmcgc3RyYWlnaHQgaW50byB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24gdG8gdW5kZXJzdGFuZCBpdHMgcmVxdWlyZWQgY29tcG9uZW50cyBhbmQgZW5zdXJlIGV2ZXJ5dGhpbmcgaXMgcHJvcGVybHkgbGlua2VkIGFuZCBhY2NvdW50ZWQgZm9yLiBXZSBuZWVkIHRvIGFzY2VydGFpbiBpZiBhbGwgYXNzb2NpYXRlZCBtb2R1bGVzIGFyZSBwcmVzZW50IGFuZCBjb3JyZWN0bHkgY29uZmlndXJlZC4gTGV0JiMzOTtzIGRpZyBpbiBhbmQgbWFrZSBzdXJlIGFsbCB0aGUgaSYjMzk7cyBhcmUgZG90dGVkIGFuZCB0JiMzOTtzIGFyZSBjcm9zc2VkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNiAxNjoyMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTIKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEJTRC0zLUNsYXVzZS1DbGVhclxuICAgMjpcdGNvbmZpZyBBVEgxMUtcbiAgIDM6XHRcdHRyaXN0YXRlIFwmIzM0O1F1YWxjb21tIDgwMi4xMWF4IGNoaXBzZXQgc3VwcG9ydFwmIzM0O1xuICAgNDpcdFx0ZGVwZW5kcyBvbiBNQUM4MDIxMSBcdTAwMjZcdTAwMjYgSEFTX0RNQVxuICAgNTpcdFx0c2VsZWN0IEFUSF9DT01NT05cbiAgIDY6XHRcdHNlbGVjdCBRQ09NX1FNSV9IRUxQRVJTXG4gICA3Olx0XHRoZWxwXG4gICA4Olx0XHQgIFRoaXMgbW9kdWxlIGFkZHMgc3VwcG9ydCBmb3IgUXVhbGNvbW0gVGVjaG5vbG9naWVzIDgwMi4xMWF4IGZhbWlseSBvZlxuICAgOTpcdFx0ICBjaGlwc2V0cy5cbiAgMTA6XHRcbiAgMTE6XHRcdCAgSWYgeW91IGNob29zZSB0byBidWlsZCBhIG1vZHVsZSwgaXQmIzM5O2xsIGJlIGNhbGxlZCBhdGgxMWsuXG4gIDEyOlx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE2IDE2OjIxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIzMzU0CgkJCQkJCQlvdXRwdXQ6IDIwMgoJCQkJCQkJdGhvdWdodHM6IDEwNjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBhdGgxMWsgQUhCIElSUSBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBmb3IgdGhlIGF0aDExayBBSEIgZHJpdmVyLCBhbmQgbXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgaXQmIzM5O3MgZGVhbGluZyB3aXRoIHNvbWUgcmVzb3VyY2UgbWFuYWdlbWVudCwgc3BlY2lmaWNhbGx5IGludGVycnVwdCByZXF1ZXN0IGxpbmVzIChJUlFzKS4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGdldCB0aGUgcmlnaHQgY29uZmlndXJhdGlvbnMgZm9yIHRoaXM7IGl0IGxvb2tzIGxpa2UgYEFUSDExS2AsIGFuZCBgQVRIMTFLX0FIQmAgYXJlIHRoZSByZWxldmFudCBvbmVzLiBJIG5lZWQgdG8ga2VlcCBpbiBtaW5kIHRoYXQgYFJFTU9URVBST0NgIGlzIGEgZ2VuZXJpYyBzdWJzeXN0ZW0sIGJ1dCBuZWNlc3NhcnkgaGVyZSBmb3IgYEFUSDExS19BSEJgLCBzbyB0aG9zZSB0d28gYXJlIHdoYXQgSSB3aWxsIGFkZC4KCkkgbmVlZCB0byBjb25maXJtIHdoaWNoIGZ1bmN0aW9ucyBhcmUgYmVpbmcgbW9kaWZpZWQgb3IgYWRkZWQuIEkgY2FuIHNlZSB0aGVzZSBmdW5jdGlvbnMgYmVpbmcgYWZmZWN0ZWQ6IGBhdGgxMWtfYWhiX2ZyZWVfZXh0X2lycV9ncnBgLCBgYXRoMTFrX2FoYl9mcmVlX2V4dF9pcnFgLCBgYXRoMTFrX2FoYl9mcmVlX2NlX2lycXNgLCBgYXRoMTFrX2FoYl9mcmVlX2lycWAsIGBhdGgxMWtfYWhiX2NvbmZpZ19leHRfaXJxYCwgYW5kIGBhdGgxMWtfYWhiX2NvbmZpZ19pcnFgLiBJJiMzOTtsbCBtYWtlIGEgbm90ZSBvZiB0aGVzZSBpbiBgRm9jdXNTeW1ib2xzYC4KCk5vdywgZGlnZ2luZyBpbnRvIHRoZSBjb2RlIGl0c2VsZiwgSSBjYW4gc2VlIHRoYXQgc29tZSBvZiB0aGVzZSBhcmUgbmV3IGZ1bmN0aW9ucywgbGlrZSBgYXRoMTFrX2FoYl9mcmVlX2V4dF9pcnFfZ3JwYCBhbmQgYGF0aDExa19haGJfZnJlZV9jZV9pcnFzYC4gVGhlIHJlc3QsIGxpa2UgYGF0aDExa19haGJfZnJlZV9leHRfaXJxYCwgYGF0aDExa19haGJfZnJlZV9pcnFgLCBgYXRoMTFrX2FoYl9jb25maWdfZXh0X2lycWAsIGFuZCBgYXRoMTFrX2FoYl9jb25maWdfaXJxYCBhcmUgbGlrZWx5IGJlaW5nIHVwZGF0ZWQgdG8gdXNlIHRoZXNlIG5ldyBoZWxwZXJzLCBsaWtlbHkgd2l0aGluIGVycm9yIHBhdGhzIG9yIGR1cmluZyB0ZWFyZG93bi4gTXkgdW5kZXJzdGFuZGluZyBpcyB0aGF0IHRoaXMgcGF0Y2ggaXMgYWRkcmVzc2luZyBwb3RlbnRpYWwgcmVzb3VyY2UgbGVha3MgZHVyaW5nIElSUSBjb25maWd1cmF0aW9uIGluIHRoZSBhdGgxMWsgQUhCIGRyaXZlciwgd2hpY2ggbWVhbnMgdGhlcmUgY291bGQgaGF2ZSBiZWVuIElSUXMgYmVpbmcgbGVmdCB1bi1mcmVlZCBvbiBlcnJvciBwYXRocyBpbiB0aGUgSVJRIHNldHVwLiAgVGhpcyBzZWVtcyBsaWtlIGZ1bmN0aW9uYWwgZHJpdmVyIGNvZGUuIEl0IGNhbiBiZSByZWFjaGVkIGR1cmluZyBkZXZpY2UgcHJvYmUuCgpXaXRoIHRoaXMgYW5hbHlzaXMsIHRoZSBjb25maWdzIGFyZSBgQVRIMTFLYCwgYW5kIGBBVEgxMUtfQUhCYC4KClRoZSBgRm9jdXNTeW1ib2xzYCBhcmU6CmBhdGgxMWtfYWhiX2ZyZWVfZXh0X2lycV9ncnBgCmBhdGgxMWtfYWhiX2ZyZWVfZXh0X2lycWAKYGF0aDExa19haGJfZnJlZV9jZV9pcnFzYApgYXRoMTFrX2FoYl9mcmVlX2lycWAKYGF0aDExa19haGJfY29uZmlnX2V4dF9pcnFgCmBhdGgxMWtfYWhiX2NvbmZpZ19pcnFgCgpZZXAsIGFsbCBsb29rcyBnb29kLiBJIHdpbGwgbm93IGNhbGwgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTYgMTY6MjI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0FUSDExSyYjMzQ7LAogICAgJiMzNDtBVEgxMUtfQUhCJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YXRoMTFrX2FoYl9mcmVlX2V4dF9pcnFfZ3JwJiMzNDssCiAgICAmIzM0O2F0aDExa19haGJfZnJlZV9leHRfaXJxJiMzNDssCiAgICAmIzM0O2F0aDExa19haGJfZnJlZV9jZV9pcnFzJiMzNDssCiAgICAmIzM0O2F0aDExa19haGJfZnJlZV9pcnEmIzM0OywKICAgICYjMzQ7YXRoMTFrX2FoYl9jb25maWdfZXh0X2lycSYjMzQ7LAogICAgJiMzNDthdGgxMWtfYWhiX2NvbmZpZ19pcnEmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgcmVzb3VyY2UgbGVha3MgaW4gdGhlIGVycm9yIHBhdGhzIG9mIElSUSBjb25maWd1cmF0aW9uIGZvciB0aGUgYXRoMTFrIEFIQiBkcml2ZXIuIEl0IGludHJvZHVjZXMgbmV3IGhlbHBlciBmdW5jdGlvbnMgZm9yIGZyZWVpbmcgSVJRcyBhbmQgdXBkYXRlcyB0aGUgY29uZmlndXJhdGlvbiBmdW5jdGlvbnMgdG8gdXNlIHRoZW0gb24gZmFpbHVyZS4gVGhpcyBpcyBmdW5jdGlvbmFsIGRyaXZlciBjb2RlIHRoYXQgY2FuIGJlIHJlYWNoZWQgZHVyaW5nIGRldmljZSBwcm9iZS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QVRIMTFLJiMzNDssCiAgICAmIzM0O0FUSDExS19BSEImIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDthdGgxMWtfYWhiX2ZyZWVfZXh0X2lycV9ncnAmIzM0OywKICAgICYjMzQ7YXRoMTFrX2FoYl9mcmVlX2V4dF9pcnEmIzM0OywKICAgICYjMzQ7YXRoMTFrX2FoYl9mcmVlX2NlX2lycXMmIzM0OywKICAgICYjMzQ7YXRoMTFrX2FoYl9mcmVlX2lycSYjMzQ7LAogICAgJiMzNDthdGgxMWtfYWhiX2NvbmZpZ19leHRfaXJxJiMzNDssCiAgICAmIzM0O2F0aDExa19haGJfY29uZmlnX2lycSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyByZXNvdXJjZSBsZWFrcyBpbiB0aGUgZXJyb3IgcGF0aHMgb2YgSVJRIGNvbmZpZ3VyYXRpb24gZm9yIHRoZSBhdGgxMWsgQUhCIGRyaXZlci4gSXQgaW50cm9kdWNlcyBuZXcgaGVscGVyIGZ1bmN0aW9ucyBmb3IgZnJlZWluZyBJUlFzIGFuZCB1cGRhdGVzIHRoZSBjb25maWd1cmF0aW9uIGZ1bmN0aW9ucyB0byB1c2UgdGhlbSBvbiBmYWlsdXJlLiBUaGlzIGlzIGZ1bmN0aW9uYWwgZHJpdmVyIGNvZGUgdGhhdCBjYW4gYmUgcmVhY2hlZCBkdXJpbmcgZGV2aWNlIHByb2JlLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDctMTZUMTY6MTk6NTEuMDI3NDIyNzI0WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM3MjE4MDI3MTc4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkFUSDExS1wiLFxuICAgIFwiQVRIMTFLX0FIQlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImF0aDExa19haGJfZnJlZV9leHRfaXJxX2dycFwiLFxuICAgIFwiYXRoMTFrX2FoYl9mcmVlX2V4dF9pcnFcIixcbiAgICBcImF0aDExa19haGJfZnJlZV9jZV9pcnFzXCIsXG4gICAgXCJhdGgxMWtfYWhiX2ZyZWVfaXJxXCIsXG4gICAgXCJhdGgxMWtfYWhiX2NvbmZpZ19leHRfaXJxXCIsXG4gICAgXCJhdGgxMWtfYWhiX2NvbmZpZ19pcnFcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyByZXNvdXJjZSBsZWFrcyBpbiB0aGUgZXJyb3IgcGF0aHMgb2YgSVJRIGNvbmZpZ3VyYXRpb24gZm9yIHRoZSBhdGgxMWsgQUhCIGRyaXZlci4gSXQgaW50cm9kdWNlcyBuZXcgaGVscGVyIGZ1bmN0aW9ucyBmb3IgZnJlZWluZyBJUlFzIGFuZCB1cGRhdGVzIHRoZSBjb25maWd1cmF0aW9uIGZ1bmN0aW9ucyB0byB1c2UgdGhlbSBvbiBmYWlsdXJlLiBUaGlzIGlzIGZ1bmN0aW9uYWwgZHJpdmVyIGNvZGUgdGhhdCBjYW4gYmUgcmVhY2hlZCBkdXJpbmcgZGV2aWNlIHByb2JlLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNlQxNjoxOTo1MS4wMjc0Mjk2MzVaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjcyNjc1Njg3NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGNlNTJhY2FkZWZlMjhkZTk2ODA3NTc5YzdlMDRkYzQwNWY5ZTQyYmRcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFRodSBKdWwgMTYgMTY6MTk6NDkgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9haGIuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvYWhiLmNcXG5pbmRleCBmNTY2ZDY5OWQwNzRhOC4uMWE5NDA4MTM4ZDgxNWMgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9haGIuY1xcbisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvYWhiLmNcXG5AQCAtNDMxLDM2ICs0MzEsNDcgQEAgc3RhdGljIHZvaWQgYXRoMTFrX2FoYl9pbml0X3FtaV9jZV9jb25maWcoc3RydWN0IGF0aDExa19iYXNlICphYilcXG4gXFx0YWItXFx1MDAzZXFtaS5zZXJ2aWNlX2luc19pZCA9IGFiLVxcdTAwM2Vod19wYXJhbXMucW1pX3NlcnZpY2VfaW5zX2lkO1xcbiB9XFxuIFxcbi1zdGF0aWMgdm9pZCBhdGgxMWtfYWhiX2ZyZWVfZXh0X2lycShzdHJ1Y3QgYXRoMTFrX2Jhc2UgKmFiKVxcbitzdGF0aWMgdm9pZCBhdGgxMWtfYWhiX2ZyZWVfZXh0X2lycV9ncnAoc3RydWN0IGF0aDExa19iYXNlICphYixcXG4rXFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IGF0aDExa19leHRfaXJxX2dycCAqaXJxX2dycClcXG4ge1xcbi1cXHRpbnQgaSwgajtcXG4rXFx0aW50IGo7XFxuIFxcbi1cXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgQVRIMTFLX0VYVF9JUlFfR1JQX05VTV9NQVg7IGkrKykge1xcbi1cXHRcXHRzdHJ1Y3QgYXRoMTFrX2V4dF9pcnFfZ3JwICppcnFfZ3JwID0gXFx1MDAyNmFiLVxcdTAwM2VleHRfaXJxX2dycFtpXTtcXG4rXFx0Zm9yIChqID0gMDsgaiBcXHUwMDNjIGlycV9ncnAtXFx1MDAzZW51bV9pcnE7IGorKylcXG4rXFx0XFx0ZnJlZV9pcnEoYWItXFx1MDAzZWlycV9udW1baXJxX2dycC1cXHUwMDNlaXJxc1tqXV0sIGlycV9ncnApO1xcbiBcXG4tXFx0XFx0Zm9yIChqID0gMDsgaiBcXHUwMDNjIGlycV9ncnAtXFx1MDAzZW51bV9pcnE7IGorKylcXG4tXFx0XFx0XFx0ZnJlZV9pcnEoYWItXFx1MDAzZWlycV9udW1baXJxX2dycC1cXHUwMDNlaXJxc1tqXV0sIGlycV9ncnApO1xcbitcXHRpZiAoIWlycV9ncnAtXFx1MDAzZW5hcGlfbmRldilcXG4rXFx0XFx0cmV0dXJuO1xcbiBcXG4tXFx0XFx0bmV0aWZfbmFwaV9kZWwoXFx1MDAyNmlycV9ncnAtXFx1MDAzZW5hcGkpO1xcbi1cXHRcXHRmcmVlX25ldGRldihpcnFfZ3JwLVxcdTAwM2VuYXBpX25kZXYpO1xcbi1cXHR9XFxuK1xcdG5ldGlmX25hcGlfZGVsKFxcdTAwMjZpcnFfZ3JwLVxcdTAwM2VuYXBpKTtcXG4rXFx0ZnJlZV9uZXRkZXYoaXJxX2dycC1cXHUwMDNlbmFwaV9uZGV2KTtcXG4gfVxcbiBcXG4tc3RhdGljIHZvaWQgYXRoMTFrX2FoYl9mcmVlX2lycShzdHJ1Y3QgYXRoMTFrX2Jhc2UgKmFiKVxcbitzdGF0aWMgdm9pZCBhdGgxMWtfYWhiX2ZyZWVfZXh0X2lycShzdHJ1Y3QgYXRoMTFrX2Jhc2UgKmFiKVxcbiB7XFxuLVxcdGludCBpcnFfaWR4O1xcbiBcXHRpbnQgaTtcXG4gXFxuLVxcdGlmIChhYi1cXHUwMDNlaHdfcGFyYW1zLmh5YnJpZF9idXNfdHlwZSlcXG4tXFx0XFx0cmV0dXJuIGF0aDExa19wY2ljX2ZyZWVfaXJxKGFiKTtcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIEFUSDExS19FWFRfSVJRX0dSUF9OVU1fTUFYOyBpKyspXFxuK1xcdFxcdGF0aDExa19haGJfZnJlZV9leHRfaXJxX2dycChhYiwgXFx1MDAyNmFiLVxcdTAwM2VleHRfaXJxX2dycFtpXSk7XFxuK31cXG4gXFxuLVxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBhYi1cXHUwMDNlaHdfcGFyYW1zLmNlX2NvdW50OyBpKyspIHtcXG4rc3RhdGljIHZvaWQgYXRoMTFrX2FoYl9mcmVlX2NlX2lycXMoc3RydWN0IGF0aDExa19iYXNlICphYiwgaW50IG1heF9pZHgpXFxuK3tcXG4rXFx0aW50IGlycV9pZHgsIGk7XFxuK1xcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgbWF4X2lkeDsgaSsrKSB7XFxuIFxcdFxcdGlmIChhdGgxMWtfY2VfZ2V0X2F0dHJfZmxhZ3MoYWIsIGkpIFxcdTAwMjYgQ0VfQVRUUl9ESVNfSU5UUilcXG4gXFx0XFx0XFx0Y29udGludWU7XFxuIFxcdFxcdGlycV9pZHggPSBBVEgxMUtfSVJRX0NFMF9PRkZTRVQgKyBpO1xcbiBcXHRcXHRmcmVlX2lycShhYi1cXHUwMDNlaXJxX251bVtpcnFfaWR4XSwgXFx1MDAyNmFiLVxcdTAwM2VjZS5jZV9waXBlW2ldKTtcXG4gXFx0fVxcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBhdGgxMWtfYWhiX2ZyZWVfaXJxKHN0cnVjdCBhdGgxMWtfYmFzZSAqYWIpXFxuK3tcXG4rXFx0aWYgKGFiLVxcdTAwM2Vod19wYXJhbXMuaHlicmlkX2J1c190eXBlKVxcbitcXHRcXHRyZXR1cm4gYXRoMTFrX3BjaWNfZnJlZV9pcnEoYWIpO1xcbiBcXG4rXFx0YXRoMTFrX2FoYl9mcmVlX2NlX2lycXMoYWIsIGFiLVxcdTAwM2Vod19wYXJhbXMuY2VfY291bnQpO1xcbiBcXHRhdGgxMWtfYWhiX2ZyZWVfZXh0X2lycShhYik7XFxuIH1cXG4gXFxuQEAgLTUyNCwyMCArNTM1LDI1IEBAIHN0YXRpYyBpcnFyZXR1cm5fdCBhdGgxMWtfYWhiX2V4dF9pbnRlcnJ1cHRfaGFuZGxlcihpbnQgaXJxLCB2b2lkICphcmcpXFxuIHN0YXRpYyBpbnQgYXRoMTFrX2FoYl9jb25maWdfZXh0X2lycShzdHJ1Y3QgYXRoMTFrX2Jhc2UgKmFiKVxcbiB7XFxuIFxcdHN0cnVjdCBhdGgxMWtfaHdfcGFyYW1zICpodyA9IFxcdTAwMjZhYi1cXHUwMDNlaHdfcGFyYW1zO1xcbitcXHRzdHJ1Y3QgYXRoMTFrX2V4dF9pcnFfZ3JwICppcnFfZ3JwO1xcbiBcXHRpbnQgaSwgajtcXG4gXFx0aW50IGlycTtcXG4gXFx0aW50IHJldDtcXG4gXFxuIFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBBVEgxMUtfRVhUX0lSUV9HUlBfTlVNX01BWDsgaSsrKSB7XFxuLVxcdFxcdHN0cnVjdCBhdGgxMWtfZXh0X2lycV9ncnAgKmlycV9ncnAgPSBcXHUwMDI2YWItXFx1MDAzZWV4dF9pcnFfZ3JwW2ldO1xcbiBcXHRcXHR1MzIgbnVtX2lycSA9IDA7XFxuIFxcbitcXHRcXHRpcnFfZ3JwID0gXFx1MDAyNmFiLVxcdTAwM2VleHRfaXJxX2dycFtpXTtcXG4rXFxuIFxcdFxcdGlycV9ncnAtXFx1MDAzZWFiID0gYWI7XFxuIFxcdFxcdGlycV9ncnAtXFx1MDAzZWdycF9pZCA9IGk7XFxuIFxcbiBcXHRcXHRpcnFfZ3JwLVxcdTAwM2VuYXBpX25kZXYgPSBhbGxvY19uZXRkZXZfZHVtbXkoMCk7XFxuLVxcdFxcdGlmICghaXJxX2dycC1cXHUwMDNlbmFwaV9uZGV2KVxcbi1cXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4rXFx0XFx0aWYgKCFpcnFfZ3JwLVxcdTAwM2VuYXBpX25kZXYpIHtcXG4rXFx0XFx0XFx0cmV0ID0gLUVOT01FTTtcXG4rXFx0XFx0XFx0aXJxX2dycC1cXHUwMDNlbnVtX2lycSA9IDA7XFxuK1xcdFxcdFxcdGdvdG8gZXJyX3JlcXVlc3RfaXJxO1xcbitcXHRcXHR9XFxuIFxcbiBcXHRcXHRuZXRpZl9uYXBpX2FkZChpcnFfZ3JwLVxcdTAwM2VuYXBpX25kZXYsIFxcdTAwMjZpcnFfZ3JwLVxcdTAwM2VuYXBpLFxcbiBcXHRcXHRcXHQgICAgICAgYXRoMTFrX2FoYl9leHRfZ3JwX25hcGlfcG9sbCk7XFxuQEAgLTU4NSw5ICs2MDEsNyBAQCBzdGF0aWMgaW50IGF0aDExa19haGJfY29uZmlnX2V4dF9pcnEoc3RydWN0IGF0aDExa19iYXNlICphYilcXG4gXFx0XFx0XFx0XFx0fVxcbiBcXHRcXHRcXHR9XFxuIFxcdFxcdH1cXG4tXFx0XFx0aXJxX2dycC1cXHUwMDNlbnVtX2lycSA9IG51bV9pcnE7XFxuLVxcbi1cXHRcXHRmb3IgKGogPSAwOyBqIFxcdTAwM2MgaXJxX2dycC1cXHUwMDNlbnVtX2lycTsgaisrKSB7XFxuK1xcdFxcdGZvciAoaiA9IDA7IGogXFx1MDAzYyBudW1faXJxOyBqKyspIHtcXG4gXFx0XFx0XFx0aW50IGlycV9pZHggPSBpcnFfZ3JwLVxcdTAwM2VpcnFzW2pdO1xcbiBcXG4gXFx0XFx0XFx0aXJxID0gcGxhdGZvcm1fZ2V0X2lycV9ieW5hbWUoYWItXFx1MDAzZXBkZXYsXFxuQEAgLTYwMCwxMSArNjE0LDIzIEBAIHN0YXRpYyBpbnQgYXRoMTFrX2FoYl9jb25maWdfZXh0X2lycShzdHJ1Y3QgYXRoMTFrX2Jhc2UgKmFiKVxcbiBcXHRcXHRcXHRpZiAocmV0KSB7XFxuIFxcdFxcdFxcdFxcdGF0aDExa19lcnIoYWIsIFxcXCJmYWlsZWQgcmVxdWVzdF9pcnEgZm9yICVkXFxcXG5cXFwiLFxcbiBcXHRcXHRcXHRcXHRcXHQgICBpcnEpO1xcbitcXHRcXHRcXHRcXHRpcnFfZ3JwLVxcdTAwM2VudW1faXJxID0gajtcXG4rXFx0XFx0XFx0XFx0YXRoMTFrX2FoYl9mcmVlX2V4dF9pcnFfZ3JwKGFiLCBpcnFfZ3JwKTtcXG4rXFx0XFx0XFx0XFx0Z290byBlcnJfcmVxdWVzdF9pcnE7XFxuIFxcdFxcdFxcdH1cXG4gXFx0XFx0fVxcbitcXG4rXFx0XFx0aXJxX2dycC1cXHUwMDNlbnVtX2lycSA9IG51bV9pcnE7XFxuIFxcdH1cXG4gXFxuIFxcdHJldHVybiAwO1xcbitcXG4rZXJyX3JlcXVlc3RfaXJxOlxcbitcXHRmb3IgKGktLTsgaSBcXHUwMDNlPSAwOyBpLS0pIHtcXG4rXFx0XFx0aXJxX2dycCA9IFxcdTAwMjZhYi1cXHUwMDNlZXh0X2lycV9ncnBbaV07XFxuK1xcdFxcdGF0aDExa19haGJfZnJlZV9leHRfaXJxX2dycChhYiwgaXJxX2dycCk7XFxuK1xcdH1cXG4rXFx0cmV0dXJuIHJldDtcXG4gfVxcbiBcXG4gc3RhdGljIGludCBhdGgxMWtfYWhiX2NvbmZpZ19pcnEoc3RydWN0IGF0aDExa19iYXNlICphYilcXG5AQCAtNjI5LDE2ICs2NTUsMjQgQEAgc3RhdGljIGludCBhdGgxMWtfYWhiX2NvbmZpZ19pcnEoc3RydWN0IGF0aDExa19iYXNlICphYilcXG4gXFx0XFx0cmV0ID0gcmVxdWVzdF9pcnEoaXJxLCBhdGgxMWtfYWhiX2NlX2ludGVycnVwdF9oYW5kbGVyLFxcbiBcXHRcXHRcXHRcXHQgIElSUUZfVFJJR0dFUl9SSVNJTkcsIGlycV9uYW1lW2lycV9pZHhdLFxcbiBcXHRcXHRcXHRcXHQgIGNlX3BpcGUpO1xcbi1cXHRcXHRpZiAocmV0KVxcbitcXHRcXHRpZiAocmV0KSB7XFxuK1xcdFxcdFxcdGF0aDExa19lcnIoYWIsIFxcXCJmYWlsZWQgcmVxdWVzdF9pcnEgZm9yICVkXFxcXG5cXFwiLCBpcnEpO1xcbitcXHRcXHRcXHRhdGgxMWtfYWhiX2ZyZWVfY2VfaXJxcyhhYiwgaSk7XFxuIFxcdFxcdFxcdHJldHVybiByZXQ7XFxuK1xcdFxcdH1cXG4gXFxuIFxcdFxcdGFiLVxcdTAwM2VpcnFfbnVtW2lycV9pZHhdID0gaXJxO1xcbiBcXHR9XFxuIFxcbiBcXHQvKiBDb25maWd1cmUgZXh0ZXJuYWwgaW50ZXJydXB0cyAqL1xcbiBcXHRyZXQgPSBhdGgxMWtfYWhiX2NvbmZpZ19leHRfaXJxKGFiKTtcXG4rXFx0aWYgKHJldCkge1xcbitcXHRcXHRhdGgxMWtfZXJyKGFiLCBcXFwiZmFpbGVkIHRvIGNvbmZpZ3VyZSBleHQgaXJxOiAlZFxcXFxuXFxcIiwgcmV0KTtcXG4rXFx0XFx0YXRoMTFrX2FoYl9mcmVlX2NlX2lycXMoYWIsIGFiLVxcdTAwM2Vod19wYXJhbXMuY2VfY291bnQpO1xcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXHR9XFxuIFxcbi1cXHRyZXR1cm4gcmV0O1xcbitcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4gc3RhdGljIGludCBhdGgxMWtfYWhiX21hcF9zZXJ2aWNlX3RvX3BpcGUoc3RydWN0IGF0aDExa19iYXNlICphYiwgdTE2IHNlcnZpY2VfaWQsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE2VDE2OjE5OjUxLjc1NTE5ODMyWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMzY0OTAyMjQ0OTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQVRIMTFLXCIsXG4gICAgXCJBVEgxMUtfQUhCXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYXRoMTFrX2FoYl9mcmVlX2V4dF9pcnFfZ3JwXCIsXG4gICAgXCJhdGgxMWtfYWhiX2ZyZWVfZXh0X2lycVwiLFxuICAgIFwiYXRoMTFrX2FoYl9mcmVlX2NlX2lycXNcIixcbiAgICBcImF0aDExa19haGJfZnJlZV9pcnFcIixcbiAgICBcImF0aDExa19haGJfY29uZmlnX2V4dF9pcnFcIixcbiAgICBcImF0aDExa19haGJfY29uZmlnX2lycVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIHJlc291cmNlIGxlYWtzIGluIHRoZSBlcnJvciBwYXRocyBvZiBJUlEgY29uZmlndXJhdGlvbiBmb3IgdGhlIGF0aDExayBBSEIgZHJpdmVyLiBJdCBpbnRyb2R1Y2VzIG5ldyBoZWxwZXIgZnVuY3Rpb25zIGZvciBmcmVlaW5nIElSUXMgYW5kIHVwZGF0ZXMgdGhlIGNvbmZpZ3VyYXRpb24gZnVuY3Rpb25zIHRvIHVzZSB0aGVtIG9uIGZhaWx1cmUuIFRoaXMgaXMgZnVuY3Rpb25hbCBkcml2ZXIgY29kZSB0aGF0IGNhbiBiZSByZWFjaGVkIGR1cmluZyBkZXZpY2UgcHJvYmUuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXRcbiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSxcbiAgIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgY2U1MmFjYWRlZmUyOGRlOTY4MDc1NzljN2UwNGRjNDA1ZjllNDJiZFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgSnVsIDE2IDE2OjE5OjQ5IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9haGIuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvYWhiLmNcbmluZGV4IGY1NjZkNjk5ZDA3NGE4Li4xYTk0MDgxMzhkODE1YyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvYWhiLmNcbisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvYWhiLmNcbkBAIC00MzEsMzYgKzQzMSw0NyBAQCBzdGF0aWMgdm9pZCBhdGgxMWtfYWhiX2luaXRfcW1pX2NlX2NvbmZpZyhzdHJ1Y3QgYXRoMTFrX2Jhc2UgKmFiKVxuIFx0YWItXHUwMDNlcW1pLnNlcnZpY2VfaW5zX2lkID0gYWItXHUwMDNlaHdfcGFyYW1zLnFtaV9zZXJ2aWNlX2luc19pZDtcbiB9XG4gXG4tc3RhdGljIHZvaWQgYXRoMTFrX2FoYl9mcmVlX2V4dF9pcnEoc3RydWN0IGF0aDExa19iYXNlICphYilcbitzdGF0aWMgdm9pZCBhdGgxMWtfYWhiX2ZyZWVfZXh0X2lycV9ncnAoc3RydWN0IGF0aDExa19iYXNlICphYixcbitcdFx0XHRcdCAgICAgIHN0cnVjdCBhdGgxMWtfZXh0X2lycV9ncnAgKmlycV9ncnApXG4ge1xuLVx0aW50IGksIGo7XG4rXHRpbnQgajtcbiBcbi1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIEFUSDExS19FWFRfSVJRX0dSUF9OVU1fTUFYOyBpKyspIHtcbi1cdFx0c3RydWN0IGF0aDExa19leHRfaXJxX2dycCAqaXJxX2dycCA9IFx1MDAyNmFiLVx1MDAzZWV4dF9pcnFfZ3JwW2ldO1xuK1x0Zm9yIChqID0gMDsgaiBcdTAwM2MgaXJxX2dycC1cdTAwM2VudW1faXJxOyBqKyspXG4rXHRcdGZyZWVfaXJxKGFiLVx1MDAzZWlycV9udW1baXJxX2dycC1cdTAwM2VpcnFzW2pdXSwgaXJxX2dycCk7XG4gXG4tXHRcdGZvciAoaiA9IDA7IGogXHUwMDNjIGlycV9ncnAtXHUwMDNlbnVtX2lycTsgaisrKVxuLVx0XHRcdGZyZWVfaXJxKGFiLVx1MDAzZWlycV9udW1baXJxX2dycC1cdTAwM2VpcnFzW2pdXSwgaXJxX2dycCk7XG4rXHRpZiAoIWlycV9ncnAtXHUwMDNlbmFwaV9uZGV2KVxuK1x0XHRyZXR1cm47XG4gXG4tXHRcdG5ldGlmX25hcGlfZGVsKFx1MDAyNmlycV9ncnAtXHUwMDNlbmFwaSk7XG4tXHRcdGZyZWVfbmV0ZGV2KGlycV9ncnAtXHUwMDNlbmFwaV9uZGV2KTtcbi1cdH1cbitcdG5ldGlmX25hcGlfZGVsKFx1MDAyNmlycV9ncnAtXHUwMDNlbmFwaSk7XG4rXHRmcmVlX25ldGRldihpcnFfZ3JwLVx1MDAzZW5hcGlfbmRldik7XG4gfVxuIFxuLXN0YXRpYyB2b2lkIGF0aDExa19haGJfZnJlZV9pcnEoc3RydWN0IGF0aDExa19iYXNlICphYilcbitzdGF0aWMgdm9pZCBhdGgxMWtfYWhiX2ZyZWVfZXh0X2lycShzdHJ1Y3QgYXRoMTFrX2Jhc2UgKmFiKVxuIHtcbi1cdGludCBpcnFfaWR4O1xuIFx0aW50IGk7XG4gXG4tXHRpZiAoYWItXHUwMDNlaHdfcGFyYW1zLmh5YnJpZF9idXNfdHlwZSlcbi1cdFx0cmV0dXJuIGF0aDExa19wY2ljX2ZyZWVfaXJxKGFiKTtcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIEFUSDExS19FWFRfSVJRX0dSUF9OVU1fTUFYOyBpKyspXG4rXHRcdGF0aDExa19haGJfZnJlZV9leHRfaXJxX2dycChhYiwgXHUwMDI2YWItXHUwMDNlZXh0X2lycV9ncnBbaV0pO1xuK31cbiBcbi1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIGFiLVx1MDAzZWh3X3BhcmFtcy5jZV9jb3VudDsgaSsrKSB7XG4rc3RhdGljIHZvaWQgYXRoMTFrX2FoYl9mcmVlX2NlX2lycXMoc3RydWN0IGF0aDExa19iYXNlICphYiwgaW50IG1heF9pZHgpXG4re1xuK1x0aW50IGlycV9pZHgsIGk7XG4rXG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBtYXhfaWR4OyBpKyspIHtcbiBcdFx0aWYgKGF0aDExa19jZV9nZXRfYXR0cl9mbGFncyhhYiwgaSkgXHUwMDI2IENFX0FUVFJfRElTX0lOVFIpXG4gXHRcdFx0Y29udGludWU7XG4gXHRcdGlycV9pZHggPSBBVEgxMUtfSVJRX0NFMF9PRkZTRVQgKyBpO1xuIFx0XHRmcmVlX2lycShhYi1cdTAwM2VpcnFfbnVtW2lycV9pZHhdLCBcdTAwMjZhYi1cdTAwM2VjZS5jZV9waXBlW2ldKTtcbiBcdH1cbit9XG4rXG4rc3RhdGljIHZvaWQgYXRoMTFrX2FoYl9mcmVlX2lycShzdHJ1Y3QgYXRoMTFrX2Jhc2UgKmFiKVxuK3tcbitcdGlmIChhYi1cdTAwM2Vod19wYXJhbXMuaHlicmlkX2J1c190eXBlKVxuK1x0XHRyZXR1cm4gYXRoMTFrX3BjaWNfZnJlZV9pcnEoYWIpO1xuIFxuK1x0YXRoMTFrX2FoYl9mcmVlX2NlX2lycXMoYWIsIGFiLVx1MDAzZWh3X3BhcmFtcy5jZV9jb3VudCk7XG4gXHRhdGgxMWtfYWhiX2ZyZWVfZXh0X2lycShhYik7XG4gfVxuIFxuQEAgLTUyNCwyMCArNTM1LDI1IEBAIHN0YXRpYyBpcnFyZXR1cm5fdCBhdGgxMWtfYWhiX2V4dF9pbnRlcnJ1cHRfaGFuZGxlcihpbnQgaXJxLCB2b2lkICphcmcpXG4gc3RhdGljIGludCBhdGgxMWtfYWhiX2NvbmZpZ19leHRfaXJxKHN0cnVjdCBhdGgxMWtfYmFzZSAqYWIpXG4ge1xuIFx0c3RydWN0IGF0aDExa19od19wYXJhbXMgKmh3ID0gXHUwMDI2YWItXHUwMDNlaHdfcGFyYW1zO1xuK1x0c3RydWN0IGF0aDExa19leHRfaXJxX2dycCAqaXJxX2dycDtcbiBcdGludCBpLCBqO1xuIFx0aW50IGlycTtcbiBcdGludCByZXQ7XG4gXG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBBVEgxMUtfRVhUX0lSUV9HUlBfTlVNX01BWDsgaSsrKSB7XG4tXHRcdHN0cnVjdCBhdGgxMWtfZXh0X2lycV9ncnAgKmlycV9ncnAgPSBcdTAwMjZhYi1cdTAwM2VleHRfaXJxX2dycFtpXTtcbiBcdFx0dTMyIG51bV9pcnEgPSAwO1xuIFxuK1x0XHRpcnFfZ3JwID0gXHUwMDI2YWItXHUwMDNlZXh0X2lycV9ncnBbaV07XG4rXG4gXHRcdGlycV9ncnAtXHUwMDNlYWIgPSBhYjtcbiBcdFx0aXJxX2dycC1cdTAwM2VncnBfaWQgPSBpO1xuIFxuIFx0XHRpcnFfZ3JwLVx1MDAzZW5hcGlfbmRldiA9IGFsbG9jX25ldGRldl9kdW1teSgwKTtcbi1cdFx0aWYgKCFpcnFfZ3JwLVx1MDAzZW5hcGlfbmRldilcbi1cdFx0XHRyZXR1cm4gLUVOT01FTTtcbitcdFx0aWYgKCFpcnFfZ3JwLVx1MDAzZW5hcGlfbmRldikge1xuK1x0XHRcdHJldCA9IC1FTk9NRU07XG4rXHRcdFx0aXJxX2dycC1cdTAwM2VudW1faXJxID0gMDtcbitcdFx0XHRnb3RvIGVycl9yZXF1ZXN0X2lycTtcbitcdFx0fVxuIFxuIFx0XHRuZXRpZl9uYXBpX2FkZChpcnFfZ3JwLVx1MDAzZW5hcGlfbmRldiwgXHUwMDI2aXJxX2dycC1cdTAwM2VuYXBpLFxuIFx0XHRcdCAgICAgICBhdGgxMWtfYWhiX2V4dF9ncnBfbmFwaV9wb2xsKTtcbkBAIC01ODUsOSArNjAxLDcgQEAgc3RhdGljIGludCBhdGgxMWtfYWhiX2NvbmZpZ19leHRfaXJxKHN0cnVjdCBhdGgxMWtfYmFzZSAqYWIpXG4gXHRcdFx0XHR9XG4gXHRcdFx0fVxuIFx0XHR9XG4tXHRcdGlycV9ncnAtXHUwMDNlbnVtX2lycSA9IG51bV9pcnE7XG4tXG4tXHRcdGZvciAoaiA9IDA7IGogXHUwMDNjIGlycV9ncnAtXHUwMDNlbnVtX2lycTsgaisrKSB7XG4rXHRcdGZvciAoaiA9IDA7IGogXHUwMDNjIG51bV9pcnE7IGorKykge1xuIFx0XHRcdGludCBpcnFfaWR4ID0gaXJxX2dycC1cdTAwM2VpcnFzW2pdO1xuIFxuIFx0XHRcdGlycSA9IHBsYXRmb3JtX2dldF9pcnFfYnluYW1lKGFiLVx1MDAzZXBkZXYsXG5AQCAtNjAwLDExICs2MTQsMjMgQEAgc3RhdGljIGludCBhdGgxMWtfYWhiX2NvbmZpZ19leHRfaXJxKHN0cnVjdCBhdGgxMWtfYmFzZSAqYWIpXG4gXHRcdFx0aWYgKHJldCkge1xuIFx0XHRcdFx0YXRoMTFrX2VycihhYiwgXCJmYWlsZWQgcmVxdWVzdF9pcnEgZm9yICVkXFxuXCIsXG4gXHRcdFx0XHRcdCAgIGlycSk7XG4rXHRcdFx0XHRpcnFfZ3JwLVx1MDAzZW51bV9pcnEgPSBqO1xuK1x0XHRcdFx0YXRoMTFrX2FoYl9mcmVlX2V4dF9pcnFfZ3JwKGFiLCBpcnFfZ3JwKTtcbitcdFx0XHRcdGdvdG8gZXJyX3JlcXVlc3RfaXJxO1xuIFx0XHRcdH1cbiBcdFx0fVxuK1xuK1x0XHRpcnFfZ3JwLVx1MDAzZW51bV9pcnEgPSBudW1faXJxO1xuIFx0fVxuIFxuIFx0cmV0dXJuIDA7XG4rXG4rZXJyX3JlcXVlc3RfaXJxOlxuK1x0Zm9yIChpLS07IGkgXHUwMDNlPSAwOyBpLS0pIHtcbitcdFx0aXJxX2dycCA9IFx1MDAyNmFiLVx1MDAzZWV4dF9pcnFfZ3JwW2ldO1xuK1x0XHRhdGgxMWtfYWhiX2ZyZWVfZXh0X2lycV9ncnAoYWIsIGlycV9ncnApO1xuK1x0fVxuK1x0cmV0dXJuIHJldDtcbiB9XG4gXG4gc3RhdGljIGludCBhdGgxMWtfYWhiX2NvbmZpZ19pcnEoc3RydWN0IGF0aDExa19iYXNlICphYilcbkBAIC02MjksMTYgKzY1NSwyNCBAQCBzdGF0aWMgaW50IGF0aDExa19haGJfY29uZmlnX2lycShzdHJ1Y3QgYXRoMTFrX2Jhc2UgKmFiKVxuIFx0XHRyZXQgPSByZXF1ZXN0X2lycShpcnEsIGF0aDExa19haGJfY2VfaW50ZXJydXB0X2hhbmRsZXIsXG4gXHRcdFx0XHQgIElSUUZfVFJJR0dFUl9SSVNJTkcsIGlycV9uYW1lW2lycV9pZHhdLFxuIFx0XHRcdFx0ICBjZV9waXBlKTtcbi1cdFx0aWYgKHJldClcbitcdFx0aWYgKHJldCkge1xuK1x0XHRcdGF0aDExa19lcnIoYWIsIFwiZmFpbGVkIHJlcXVlc3RfaXJxIGZvciAlZFxcblwiLCBpcnEpO1xuK1x0XHRcdGF0aDExa19haGJfZnJlZV9jZV9pcnFzKGFiLCBpKTtcbiBcdFx0XHRyZXR1cm4gcmV0O1xuK1x0XHR9XG4gXG4gXHRcdGFiLVx1MDAzZWlycV9udW1baXJxX2lkeF0gPSBpcnE7XG4gXHR9XG4gXG4gXHQvKiBDb25maWd1cmUgZXh0ZXJuYWwgaW50ZXJydXB0cyAqL1xuIFx0cmV0ID0gYXRoMTFrX2FoYl9jb25maWdfZXh0X2lycShhYik7XG4rXHRpZiAocmV0KSB7XG4rXHRcdGF0aDExa19lcnIoYWIsIFwiZmFpbGVkIHRvIGNvbmZpZ3VyZSBleHQgaXJxOiAlZFxcblwiLCByZXQpO1xuK1x0XHRhdGgxMWtfYWhiX2ZyZWVfY2VfaXJxcyhhYiwgYWItXHUwMDNlaHdfcGFyYW1zLmNlX2NvdW50KTtcbitcdFx0cmV0dXJuIHJldDtcbitcdH1cbiBcbi1cdHJldHVybiByZXQ7XG4rXHRyZXR1cm4gMDtcbiB9XG4gXG4gc3RhdGljIGludCBhdGgxMWtfYWhiX21hcF9zZXJ2aWNlX3RvX3BpcGUoc3RydWN0IGF0aDExa19iYXNlICphYiwgdTE2IHNlcnZpY2VfaWQsXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNlQxNjoxOTo1MS43NTUyMDEyNVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc2Mzk2ODAxMTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgUG90ZW50aWFsIEZ1enppbmcgVGFyZ2V0OiBhdGgxMWsgQUhCIElSUSBIYW5kbGluZyoqXG5cbk9rYXksIHNvIEkndmUgZ290IGEgcGF0Y2ggaGVyZSBmb3IgYGRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvYWhiLmNgLiBJdCdzIHRvdWNoaW5nIGZ1bmN0aW9ucyBsaWtlIGBhdGgxMWtfYWhiX2ZyZWVfZXh0X2lycWAsIGBhdGgxMWtfYWhiX2ZyZWVfaXJxYCwgYGF0aDExa19haGJfY29uZmlnX2V4dF9pcnFgLCBhbmQgYGF0aDExa19haGJfY29uZmlnX2lycWAuIEZyb20gdGhlIHBhdGNoIGRlc2NyaXB0aW9uLCBpdCBzb3VuZHMgbGlrZSBpdCdzIGFkZHJlc3Npbmcgc29tZSBtZW1vcnkgb3IgcmVzb3VyY2UgbGVha3MgdGhhdCBvY2N1ciBkdXJpbmcgZXJyb3IgaGFuZGxpbmcgcmVsYXRlZCB0byBJUlEgY29uZmlndXJhdGlvbiB3aXRoaW4gdGhlIGF0aDExayBBSEIgZHJpdmVyLiBTb3VuZHMgaW50ZXJlc3RpbmcsIGFuZCBsaWtlIGl0IGNvdWxkIGJlIGEgZ29vZCBmdXp6aW5nIHRhcmdldC5cblxuRmlyc3QsIEkgbmVlZCB0byBmaWd1cmUgb3V0IGlmIGl0J3MgcmVhY2hhYmxlIGFuZCB3b3J0aCB0aGUgZWZmb3J0LiBUaGUgZHJpdmVyIGlzIGBhdGgxMWtgLCB3aGljaCBpcyBRdWFsY29tbSdzIDgwMi4xMWF4IFdMQU4gZHJpdmVyLiBBbmQgaXQncyB1c2luZyB0aGUgQUhCIGJ1cyDigJMgdGhlIEFkdmFuY2VkIEhpZ2gtcGVyZm9ybWFuY2UgQnVzLCB0eXBpY2FsIGZvciBTb0NzIGxpa2UgdGhlIElQUTgwNzQuIFNvLCB0aGUgcXVlc3Rpb24gaXMsIGNhbiBJIGZ1enogdGhpcyBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50PyBBSEIgZGV2aWNlcyBhcmUgdXN1YWxseSBwbGF0Zm9ybSBkZXZpY2VzLCByaWdodD8gQW5kIHVzdWFsbHksIHRoZXkgZ2V0IHByb2JlZCBpZiB0aGVpciBzcGVjaWZpYyBkZXZpY2UgdHJlZSBub2RlIGlzIHByZXNlbnQuIFVubGVzcyBJIGNhbiBzb21laG93IGVtdWxhdGUgdGhpcyBzcGVjaWZpYyBwbGF0Zm9ybSBkZXZpY2Ug4oCTIG1heWJlIHdpdGggYSBmYWtlIG9uZSBvciBzb21lIG90aGVyIGVtdWxhdGlvbiDigJMgSSBtaWdodCBiZSBkZWFkIGluIHRoZSB3YXRlci5cblxuQnV0IHdhaXQgYSBtaW51dGUuLi4gSSB0aGluayBzeXprYWxsZXIgKmNhbiogZnV6eiBwbGF0Zm9ybSBkZXZpY2VzIGlmIHRoZXkncmUgcmVnaXN0ZXJlZC4gU28sIHRoZSBrZXkgaXMgd2hldGhlciBJIGNhbiBnZXQgYGF0aDExa19haGJfcHJvYmVgIHRvIGV4ZWN1dGUuIEkgbmVlZCB0byBjaGVjayBob3cgdGhlIHByb2JlIGZ1bmN0aW9uIGlzIGNvbmZpZ3VyZWQgdG8gc2VlIGlmIEkgY2FuIGdldCB0aGF0IHRvIGhhcHBlbiBpbiBhIHZpcnR1YWwgZW52aXJvbm1lbnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM5MzEsIk91dHB1dFRva2VucyI6NDIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOTIsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNlQxNjoxOTo1OS4zOTQ4ODQxNVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NTQwNzAwMjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYXRoMTFrX2FoYl9wcm9iZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2FoYi5jPTExMDY9c3RhdGljIGludCBhdGgxMWtfYWhiX2Z3X3Jlc291cmNlX2RlaW5pdChzdHJ1Y3QgYXRoMTFrX2Jhc2UgKmFiKVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9haGIuYy0xMTQwLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvYWhiLmM6MTE0MTpzdGF0aWMgaW50IGF0aDExa19haGJfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2FoYi5jLTExNDIte1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9haGIuYz0xMzM2PXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGF0aDExa19haGJfZHJpdmVyID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9haGIuYy0xMzQwLVxcdH0sXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9haGIuYzoxMzQxOlxcdC5wcm9iZSA9IGF0aDExa19haGJfcHJvYmUsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9haGIuYy0xMzQyLVxcdC5yZW1vdmUgPSBhdGgxMWtfYWhiX3JlbW92ZSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTZUMTY6MTk6NTkuOTQ4OTYxMjA5WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzgxNjMwNDgzNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgYGF0aDExa19haGJfcHJvYmVgIFJlcXVpcmVtZW50cyoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGUgYGF0aDExa19haGJfcHJvYmVgIGZ1bmN0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHRoaXMgZXhwZWN0cyBiZWZvcmUgaXQnbGwgZXZlbiBnZXQgb2ZmIHRoZSBncm91bmQuIFdoYXQgZGVwZW5kZW5jaWVzIGRvZXMgaXQgaGF2ZT8gV2hhdCBzcGVjaWZpYyBoYXJkd2FyZSBpbml0aWFsaXphdGlvbiBzdGVwcyBhcmUgbGlrZWx5IGJha2VkIGludG8gdGhpcyBwcm9iZSBmdW5jdGlvbj8gSSdtIGFudGljaXBhdGluZyB0aGF0IGl0IHdpbGwgaGFuZGxlIHRoZSBiYXNpYyBwbGF0Zm9ybSBpbml0aWFsaXphdGlvbiBmb3IgYW4gQUhCLWNvbm5lY3RlZCBBdGhlcm9zIDgwMi4xMWsgY29udHJvbGxlci4gSSBuZWVkIHRvIGlkZW50aWZ5IHRoZSBrZXkgc3RydWN0dXJlcyB0aGF0IGl0J3MgZ29pbmcgdG8gaW50ZXJhY3Qgd2l0aCwgbGlrZWx5IGludm9sdmluZyByZWdpc3RlciBtYXBwaW5nLCBETUEgc2V0dXAsIGFuZCBpbnRlcnJ1cHQgcmVnaXN0cmF0aW9uLiBGcm9tIHdoYXQgSSByZWNhbGwgb2YgcHJldmlvdXMgd29yaywgSSBzaG91bGQgYmUgbG9va2luZyBmb3IgcmVzb3VyY2UgYWxsb2NhdGlvbiBjYWxscywgYW5kIGRyaXZlciBiaW5kaW5nIHdpdGhpbiB0aGUga2VybmVsJ3MgZGV2aWNlIG1vZGVsLCBJIG5lZWQgdG8ga25vdyBob3cgdGhlIGRyaXZlciBpbnRlcmFjdHMgd2l0aCB0aGUgaGFyZHdhcmUsIHRoZSByZWxldmFudCByZWdpc3RlciBtYXAsIGludGVycnVwdHMsIGFuZCBhbnkgZGV2aWNlLXNwZWNpZmljIHF1aXJrcy4gSXQncyBsaWtlbHkgdGhhdCBhIHByb2JlIGZ1bmN0aW9uIGxpa2UgdGhpcyBuZWVkcyB0byBkZWFsIHdpdGggdGhlIHBvd2VyIG1hbmFnZW1lbnQgc3RhdGVzIGFzIHdlbGwuIExldCdzIHNlZSBob3cgbXVjaCBvZiB0aGlzIGlzIGhhbmRsZWQgaW4gYGF0aDExa19haGJfcHJvYmVgIGRpcmVjdGx5LCBhbmQgd2hhdCdzIGRlZmVycmVkIHRvIG90aGVyIGZ1bmN0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6NDk0OSwiT3V0cHV0VG9rZW5zIjo0NywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE2VDE2OjIwOjAzLjc2NTI2ODIzNFoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxODA3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2FoYi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDExNDAsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMTQwOlxcdFxcbjExNDE6XFx0c3RhdGljIGludCBhdGgxMWtfYWhiX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXFxuMTE0MjpcXHR7XFxuMTE0MzpcXHRcXHRzdHJ1Y3QgYXRoMTFrX2Jhc2UgKmFiO1xcbjExNDQ6XFx0XFx0Y29uc3Qgc3RydWN0IGF0aDExa19oaWZfb3BzICpoaWZfb3BzO1xcbjExNDU6XFx0XFx0Y29uc3Qgc3RydWN0IGF0aDExa19wY2lfb3BzICpwY2lfb3BzO1xcbjExNDY6XFx0XFx0ZW51bSBhdGgxMWtfaHdfcmV2IGh3X3JldjtcXG4xMTQ3OlxcdFxcdGludCByZXQ7XFxuMTE0ODpcXHRcXG4xMTQ5OlxcdFxcdGh3X3JldiA9ICh1aW50cHRyX3QpZGV2aWNlX2dldF9tYXRjaF9kYXRhKFxcdTAwMjZwZGV2LVxcdTAwM2VkZXYpO1xcbjExNTA6XFx0XFxuMTE1MTpcXHRcXHRzd2l0Y2ggKGh3X3Jldikge1xcbjExNTI6XFx0XFx0Y2FzZSBBVEgxMUtfSFdfSVBRODA3NDpcXG4xMTUzOlxcdFxcdGNhc2UgQVRIMTFLX0hXX0lQUTYwMThfSFcxMDpcXG4xMTU0OlxcdFxcdGNhc2UgQVRIMTFLX0hXX0lQUTUwMThfSFcxMDpcXG4xMTU1OlxcdFxcdFxcdGhpZl9vcHMgPSBcXHUwMDI2YXRoMTFrX2FoYl9oaWZfb3BzX2lwcTgwNzQ7XFxuMTE1NjpcXHRcXHRcXHRwY2lfb3BzID0gTlVMTDtcXG4xMTU3OlxcdFxcdFxcdGJyZWFrO1xcbjExNTg6XFx0XFx0Y2FzZSBBVEgxMUtfSFdfV0NONjc1MF9IVzEwOlxcbjExNTk6XFx0XFx0XFx0aGlmX29wcyA9IFxcdTAwMjZhdGgxMWtfYWhiX2hpZl9vcHNfd2NuNjc1MDtcXG4xMTYwOlxcdFxcdFxcdHBjaV9vcHMgPSBcXHUwMDI2YXRoMTFrX2FoYl9wY2lfb3BzX3djbjY3NTA7XFxuMTE2MTpcXHRcXHRcXHRicmVhaztcXG4xMTYyOlxcdFxcdGRlZmF1bHQ6XFxuMTE2MzpcXHRcXHRcXHRkZXZfZXJyKFxcdTAwMjZwZGV2LVxcdTAwM2VkZXYsIFxcXCJ1bnN1cHBvcnRlZCBkZXZpY2UgdHlwZSAlZFxcXFxuXFxcIiwgaHdfcmV2KTtcXG4xMTY0OlxcdFxcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4xMTY1OlxcdFxcdH1cXG4xMTY2OlxcdFxcbjExNjc6XFx0XFx0cmV0ID0gZG1hX3NldF9tYXNrX2FuZF9jb2hlcmVudChcXHUwMDI2cGRldi1cXHUwMDNlZGV2LCBETUFfQklUX01BU0soMzIpKTtcXG4xMTY4OlxcdFxcdGlmIChyZXQpIHtcXG4xMTY5OlxcdFxcdFxcdGRldl9lcnIoXFx1MDAyNnBkZXYtXFx1MDAzZWRldiwgXFxcImZhaWxlZCB0byBzZXQgMzItYml0IGNvbnNpc3RlbnQgZG1hXFxcXG5cXFwiKTtcXG4xMTcwOlxcdFxcdFxcdHJldHVybiByZXQ7XFxuMTE3MTpcXHRcXHR9XFxuMTE3MjpcXHRcXG4xMTczOlxcdFxcdGFiID0gYXRoMTFrX2NvcmVfYWxsb2MoXFx1MDAyNnBkZXYtXFx1MDAzZWRldiwgc2l6ZW9mKHN0cnVjdCBhdGgxMWtfYWhiKSxcXG4xMTc0OlxcdFxcdFxcdFxcdCAgICAgICBBVEgxMUtfQlVTX0FIQik7XFxuMTE3NTpcXHRcXHRpZiAoIWFiKSB7XFxuMTE3NjpcXHRcXHRcXHRkZXZfZXJyKFxcdTAwMjZwZGV2LVxcdTAwM2VkZXYsIFxcXCJmYWlsZWQgdG8gYWxsb2NhdGUgYXRoMTFrIGJhc2VcXFxcblxcXCIpO1xcbjExNzc6XFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuMTE3ODpcXHRcXHR9XFxuMTE3OTpcXHRcXG4xMTgwOlxcdFxcdGFiLVxcdTAwM2VoaWYub3BzID0gaGlmX29wcztcXG4xMTgxOlxcdFxcdGFiLVxcdTAwM2VwZGV2ID0gcGRldjtcXG4xMTgyOlxcdFxcdGFiLVxcdTAwM2Vod19yZXYgPSBod19yZXY7XFxuMTE4MzpcXHRcXHRhYi1cXHUwMDNlZndfbW9kZSA9IEFUSDExS19GSVJNV0FSRV9NT0RFX05PUk1BTDtcXG4xMTg0OlxcdFxcdHBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIGFiKTtcXG4xMTg1OlxcdFxcbjExODY6XFx0XFx0cmV0ID0gYXRoMTFrX3BjaWNfcmVnaXN0ZXJfcGNpX29wcyhhYiwgcGNpX29wcyk7XFxuMTE4NzpcXHRcXHRpZiAocmV0KSB7XFxuMTE4ODpcXHRcXHRcXHRhdGgxMWtfZXJyKGFiLCBcXFwiZmFpbGVkIHRvIHJlZ2lzdGVyIFBDSSBvcHM6ICVkXFxcXG5cXFwiLCByZXQpO1xcbjExODk6XFx0XFx0XFx0Z290byBlcnJfY29yZV9mcmVlO1xcbjExOTA6XFx0XFx0fVxcbjExOTE6XFx0XFxuMTE5MjpcXHRcXHRyZXQgPSBhdGgxMWtfY29yZV9wcmVfaW5pdChhYik7XFxuMTE5MzpcXHRcXHRpZiAocmV0KVxcbjExOTQ6XFx0XFx0XFx0Z290byBlcnJfY29yZV9mcmVlO1xcbjExOTU6XFx0XFxuMTE5NjpcXHRcXHRyZXQgPSBhdGgxMWtfYWhiX3NldHVwX3Jlc291cmNlcyhhYik7XFxuMTE5NzpcXHRcXHRpZiAocmV0KVxcbjExOTg6XFx0XFx0XFx0Z290byBlcnJfY29yZV9mcmVlO1xcbjExOTk6XFx0XFxuMTIwMDpcXHRcXHRyZXQgPSBhdGgxMWtfYWhiX2NlX3JlbWFwKGFiKTtcXG4xMjAxOlxcdFxcdGlmIChyZXQpXFxuMTIwMjpcXHRcXHRcXHRnb3RvIGVycl9jb3JlX2ZyZWU7XFxuMTIwMzpcXHRcXG4xMjA0OlxcdFxcdHJldCA9IGF0aDExa19haGJfZndfcmVzb3VyY2VzX2luaXQoYWIpO1xcbjEyMDU6XFx0XFx0aWYgKHJldClcXG4xMjA2OlxcdFxcdFxcdGdvdG8gZXJyX2NlX3VubWFwO1xcbjEyMDc6XFx0XFxuMTIwODpcXHRcXHRyZXQgPSBhdGgxMWtfYWhiX3NldHVwX3NtcDJwX2hhbmRsZShhYik7XFxuMTIwOTpcXHRcXHRpZiAocmV0KVxcbjEyMTA6XFx0XFx0XFx0Z290byBlcnJfZndfZGVpbml0O1xcbjEyMTE6XFx0XFxuMTIxMjpcXHRcXHRyZXQgPSBhdGgxMWtfaGFsX3NybmdfaW5pdChhYik7XFxuMTIxMzpcXHRcXHRpZiAocmV0KVxcbjEyMTQ6XFx0XFx0XFx0Z290byBlcnJfcmVsZWFzZV9zbXAycF9oYW5kbGU7XFxuMTIxNTpcXHRcXG4xMjE2OlxcdFxcdHJldCA9IGF0aDExa19jZV9hbGxvY19waXBlcyhhYik7XFxuMTIxNzpcXHRcXHRpZiAocmV0KSB7XFxuMTIxODpcXHRcXHRcXHRhdGgxMWtfZXJyKGFiLCBcXFwiZmFpbGVkIHRvIGFsbG9jYXRlIGNlIHBpcGVzOiAlZFxcXFxuXFxcIiwgcmV0KTtcXG4xMjE5OlxcdFxcdFxcdGdvdG8gZXJyX2hhbF9zcm5nX2RlaW5pdDtcXG4xMjIwOlxcdFxcdH1cXG4xMjIxOlxcdFxcbjEyMjI6XFx0XFx0YXRoMTFrX2FoYl9pbml0X3FtaV9jZV9jb25maWcoYWIpO1xcbjEyMjM6XFx0XFxuMTIyNDpcXHRcXHRyZXQgPSBhdGgxMWtfY29yZV9nZXRfcnByb2MoYWIpO1xcbjEyMjU6XFx0XFx0aWYgKHJldClcXG4xMjI2OlxcdFxcdFxcdGdvdG8gZXJyX2NlX2ZyZWU7XFxuMTIyNzpcXHRcXG4xMjI4OlxcdFxcdHJldCA9IGF0aDExa19jb3JlX2luaXQoYWIpO1xcbjEyMjk6XFx0XFx0aWYgKHJldCkge1xcbjEyMzA6XFx0XFx0XFx0YXRoMTFrX2VycihhYiwgXFxcImZhaWxlZCB0byBpbml0IGNvcmU6ICVkXFxcXG5cXFwiLCByZXQpO1xcbjEyMzE6XFx0XFx0XFx0Z290byBlcnJfY2VfZnJlZTtcXG4xMjMyOlxcdFxcdH1cXG4xMjMzOlxcdFxcbjEyMzQ6XFx0XFx0cmV0ID0gYXRoMTFrX2FoYl9jb25maWdfaXJxKGFiKTtcXG4xMjM1OlxcdFxcdGlmIChyZXQpIHtcXG4xMjM2OlxcdFxcdFxcdGF0aDExa19lcnIoYWIsIFxcXCJmYWlsZWQgdG8gY29uZmlndXJlIGlycTogJWRcXFxcblxcXCIsIHJldCk7XFxuMTIzNzpcXHRcXHRcXHRnb3RvIGVycl9jZV9mcmVlO1xcbjEyMzg6XFx0XFx0fVxcbjEyMzk6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE2VDE2OjIwOjAzLjc2NTQ4OTAyNFoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYwMTk1ODcwOTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBRdWFsY29tbSBBSEIgRHJpdmVyIGZvciBQb3RlbnRpYWwgRnV6emluZyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoZXNlIHBhdGNoZXMgdGhhdCBhcmUgdG91Y2hpbmcgYGF0aDExa19haGJfY29uZmlnX2lycWAgYW5kIGBhdGgxMWtfYWhiX2NvbmZpZ19leHRfaXJxYC4gVGhlc2UgZnVuY3Rpb25zIGFyZSBjYWxsZWQgZnJvbSBgYXRoMTFrX2FoYl9wcm9iZWAsIHdoaWNoIGltbWVkaWF0ZWx5IGZsYWdzIG15IGF0dGVudGlvbi4gVGhpcyBpcyBhbiBBSEIgZHJpdmVyLCBhbmQgaXQncyBzcGVjaWZpY2FsbHkgZm9yIHRob3NlIFF1YWxjb21tIElQUTgwNzQsIElQUTYwMTgsIElQUTUwMTgsIGFuZCBXQ042NzUwIFNvQ3MuIFJpZ2h0LCB0aGF0IHB1dHMgaXQgaW4gYSB2ZXJ5IHNwZWNpZmljIGhhcmR3YXJlIGNvbnRleHQuIFRoZSBjcml0aWNhbCBxdWVzdGlvbiBoZXJlIGlzIHdoZXRoZXIgc3l6a2FsbGVyIGNhbiByZWFsaXN0aWNhbGx5IGZ1enogdGhpcy5cblxuU3l6a2FsbGVyICpjYW4qIGNyZWF0ZSBwbGF0Zm9ybSBkZXZpY2VzLCB1c2luZyBgc3l6X2Rldl9jcmVhdGVgIGFuZCBzdWNoLCBpZiBzdXBwb3J0ZWQuIEJ1dCB0aGUgcmVhbCBwcm9ibGVtIGlzIHRoZSBkZXZpY2UgdHJlZS4gVGhlc2UgYXJlIGNvbXBsZXggU29DcywgYW5kIHNldHRpbmcgdXAgdGhlIHByZWNpc2UgZGV2aWNlIHRyZWUgY29uZmlndXJhdGlvbiB0aGF0IGBhdGgxMWtfYWhiX3Byb2JlYCAqZXhwZWN0cyogaXMgdGhlIGNoYWxsZW5nZS4gSXQgbmVlZHMgdGhvc2Ugc3BlY2lmaWMgcmVzb3VyY2VzIC0gbWVtb3J5IHJlZ2lvbnMsIElSUXMsIFNNUDJQIGhhbmRsZXMsIHRoZSB3b3Jrcy4gSXQncyBub3Qgc29tZXRoaW5nIHlvdSBjYW4ganVzdCBjb25qdXJlIHVwLiBTbywgdGhlIHF1ZXN0aW9uIGlzLCBjYW4gc3l6a2FsbGVyIHJlbGlhYmx5IGVtdWxhdGUgdGhpcyB3aXRob3V0IGEgY29tcGxldGUsIGFjY3VyYXRlIERUPyBQcm9iYWJseSBub3Qgb3V0IG9mIHRoZSBib3guXG5cbkxldCdzIGRpZyBpbnRvIGBhdGgxMWtfYWhiX3NldHVwX3Jlc291cmNlc2AuIFRoYXQncyB3aGVyZSB0aGUgcnViYmVyIG1lZXRzIHRoZSByb2FkLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHJlc291cmNlcyBhcmUgYmVpbmcgc2V0IHVwIHRoZXJlLCBhbmQgd2hhdCB0aGUgZGVwZW5kZW5jaWVzIGFyZS4gVGhhdCB3aWxsIGRldGVybWluZSBpZiBhbmQgaG93IHdlIGNhbiBldmVuIGJlZ2luIHRvIHRoaW5rIGFib3V0IGZ1enppbmcgdGhpcyBkcml2ZXIgZWZmZWN0aXZlbHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY5MjEsIk91dHB1dFRva2VucyI6NDcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOTQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xNlQxNjoyMDowOS43ODUwNzgyMTVaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjExMDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9haGIuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMDAwLFxuICBcIkxpbmVDb3VudFwiOiAxMDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTAwMDpcXHR9XFxuMTAwMTpcXHRcXG4xMDAyOlxcdHN0YXRpYyB2b2lkIGF0aDExa19haGJfY2VfdW5tYXAoc3RydWN0IGF0aDExa19iYXNlICphYilcXG4xMDAzOlxcdHtcXG4xMDA0OlxcdFxcdGlmIChhYi1cXHUwMDNlaHdfcGFyYW1zLmNlX3JlbWFwKVxcbjEwMDU6XFx0XFx0XFx0aW91bm1hcChhYi1cXHUwMDNlbWVtX2NlKTtcXG4xMDA2OlxcdH1cXG4xMDA3OlxcdFxcbjEwMDg6XFx0c3RhdGljIGludCBhdGgxMWtfYWhiX2Z3X3Jlc291cmNlc19pbml0KHN0cnVjdCBhdGgxMWtfYmFzZSAqYWIpXFxuMTAwOTpcXHR7XFxuMTAxMDpcXHRcXHRzdHJ1Y3QgYXRoMTFrX2FoYiAqYWJfYWhiID0gYXRoMTFrX2FoYl9wcml2KGFiKTtcXG4xMDExOlxcdFxcdHN0cnVjdCBkZXZpY2UgKmhvc3RfZGV2ID0gYWItXFx1MDAzZWRldjtcXG4xMDEyOlxcdFxcdHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2VfaW5mbyBpbmZvID0ge307XFxuMTAxMzpcXHRcXHRzdHJ1Y3QgaW9tbXVfZG9tYWluICppb21tdV9kb207XFxuMTAxNDpcXHRcXHRzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2O1xcbjEwMTU6XFx0XFx0c3RydWN0IGRldmljZV9ub2RlICpub2RlO1xcbjEwMTY6XFx0XFx0aW50IHJldDtcXG4xMDE3OlxcdFxcbjEwMTg6XFx0XFx0LyogQ2hpcHNldHMgbm90IHJlcXVpcmluZyBNU0EgbmVlZCBub3QgaW5pdGlhbGl6ZVxcbjEwMTk6XFx0XFx0ICogTVNBIHJlc291cmNlcywgcmV0dXJuIHN1Y2Nlc3MgaW4gc3VjaCBjYXNlcy5cXG4xMDIwOlxcdFxcdCAqL1xcbjEwMjE6XFx0XFx0aWYgKCFhYi1cXHUwMDNlaHdfcGFyYW1zLmZpeGVkX2Z3X21lbSlcXG4xMDIyOlxcdFxcdFxcdHJldHVybiAwO1xcbjEwMjM6XFx0XFxuMTAyNDpcXHRcXHRub2RlID0gb2ZfZ2V0X2NoaWxkX2J5X25hbWUoaG9zdF9kZXYtXFx1MDAzZW9mX25vZGUsIFxcXCJ3aWZpLWZpcm13YXJlXFxcIik7XFxuMTAyNTpcXHRcXHRpZiAoIW5vZGUpIHtcXG4xMDI2OlxcdFxcdFxcdGFiX2FoYi1cXHUwMDNlZncudXNlX3R6ID0gdHJ1ZTtcXG4xMDI3OlxcdFxcdFxcdHJldHVybiAwO1xcbjEwMjg6XFx0XFx0fVxcbjEwMjk6XFx0XFxuMTAzMDpcXHRcXHRyZXQgPSBhdGgxMWtfYWhiX3NldHVwX21zYV9yZXNvdXJjZXMoYWIpO1xcbjEwMzE6XFx0XFx0aWYgKHJldCkge1xcbjEwMzI6XFx0XFx0XFx0YXRoMTFrX2VycihhYiwgXFxcImZhaWxlZCB0byBzZXR1cCBtc2EgcmVzb3VyY2VzXFxcXG5cXFwiKTtcXG4xMDMzOlxcdFxcdFxcdHJldHVybiByZXQ7XFxuMTAzNDpcXHRcXHR9XFxuMTAzNTpcXHRcXG4xMDM2OlxcdFxcdGluZm8uZndub2RlID0gXFx1MDAyNm5vZGUtXFx1MDAzZWZ3bm9kZTtcXG4xMDM3OlxcdFxcdGluZm8ucGFyZW50ID0gaG9zdF9kZXY7XFxuMTAzODpcXHRcXHRpbmZvLm5hbWUgPSBub2RlLVxcdTAwM2VuYW1lO1xcbjEwMzk6XFx0XFx0aW5mby5kbWFfbWFzayA9IERNQV9CSVRfTUFTSygzMik7XFxuMTA0MDpcXHRcXG4xMDQxOlxcdFxcdHBkZXYgPSBwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXJfZnVsbChcXHUwMDI2aW5mbyk7XFxuMTA0MjpcXHRcXHRpZiAoSVNfRVJSKHBkZXYpKSB7XFxuMTA0MzpcXHRcXHRcXHRvZl9ub2RlX3B1dChub2RlKTtcXG4xMDQ0OlxcdFxcdFxcdHJldHVybiBQVFJfRVJSKHBkZXYpO1xcbjEwNDU6XFx0XFx0fVxcbjEwNDY6XFx0XFxuMTA0NzpcXHRcXHRyZXQgPSBvZl9kbWFfY29uZmlndXJlKFxcdTAwMjZwZGV2LVxcdTAwM2VkZXYsIG5vZGUsIHRydWUpO1xcbjEwNDg6XFx0XFx0aWYgKHJldCkge1xcbjEwNDk6XFx0XFx0XFx0YXRoMTFrX2VycihhYiwgXFxcImRtYSBjb25maWd1cmUgZmFpbDogJWRcXFxcblxcXCIsIHJldCk7XFxuMTA1MDpcXHRcXHRcXHRnb3RvIGVycl91bnJlZ2lzdGVyO1xcbjEwNTE6XFx0XFx0fVxcbjEwNTI6XFx0XFxuMTA1MzpcXHRcXHRhYl9haGItXFx1MDAzZWZ3LmRldiA9IFxcdTAwMjZwZGV2LVxcdTAwM2VkZXY7XFxuMTA1NDpcXHRcXG4xMDU1OlxcdFxcdGlvbW11X2RvbSA9IGlvbW11X3BhZ2luZ19kb21haW5fYWxsb2MoYWJfYWhiLVxcdTAwM2Vmdy5kZXYpO1xcbjEwNTY6XFx0XFx0aWYgKElTX0VSUihpb21tdV9kb20pKSB7XFxuMTA1NzpcXHRcXHRcXHRhdGgxMWtfZXJyKGFiLCBcXFwiZmFpbGVkIHRvIGFsbG9jYXRlIGlvbW11IGRvbWFpblxcXFxuXFxcIik7XFxuMTA1ODpcXHRcXHRcXHRyZXQgPSBQVFJfRVJSKGlvbW11X2RvbSk7XFxuMTA1OTpcXHRcXHRcXHRnb3RvIGVycl91bnJlZ2lzdGVyO1xcbjEwNjA6XFx0XFx0fVxcbjEwNjE6XFx0XFxuMTA2MjpcXHRcXHRyZXQgPSBpb21tdV9hdHRhY2hfZGV2aWNlKGlvbW11X2RvbSwgYWJfYWhiLVxcdTAwM2Vmdy5kZXYpO1xcbjEwNjM6XFx0XFx0aWYgKHJldCkge1xcbjEwNjQ6XFx0XFx0XFx0YXRoMTFrX2VycihhYiwgXFxcImNvdWxkIG5vdCBhdHRhY2ggZGV2aWNlOiAlZFxcXFxuXFxcIiwgcmV0KTtcXG4xMDY1OlxcdFxcdFxcdGdvdG8gZXJyX2lvbW11X2ZyZWU7XFxuMTA2NjpcXHRcXHR9XFxuMTA2NzpcXHRcXG4xMDY4OlxcdFxcdHJldCA9IGlvbW11X21hcChpb21tdV9kb20sIGFiX2FoYi1cXHUwMDNlZncubXNhX3BhZGRyLFxcbjEwNjk6XFx0XFx0XFx0XFx0YWJfYWhiLVxcdTAwM2Vmdy5tc2FfcGFkZHIsIGFiX2FoYi1cXHUwMDNlZncubXNhX3NpemUsXFxuMTA3MDpcXHRcXHRcXHRcXHRJT01NVV9SRUFEIHwgSU9NTVVfV1JJVEUsIEdGUF9LRVJORUwpO1xcbjEwNzE6XFx0XFx0aWYgKHJldCkge1xcbjEwNzI6XFx0XFx0XFx0YXRoMTFrX2VycihhYiwgXFxcImZhaWxlZCB0byBtYXAgZmlybXdhcmUgcmVnaW9uOiAlZFxcXFxuXFxcIiwgcmV0KTtcXG4xMDczOlxcdFxcdFxcdGdvdG8gZXJyX2lvbW11X2RldGFjaDtcXG4xMDc0OlxcdFxcdH1cXG4xMDc1OlxcdFxcbjEwNzY6XFx0XFx0cmV0ID0gaW9tbXVfbWFwKGlvbW11X2RvbSwgYWJfYWhiLVxcdTAwM2Vmdy5jZV9wYWRkcixcXG4xMDc3OlxcdFxcdFxcdFxcdGFiX2FoYi1cXHUwMDNlZncuY2VfcGFkZHIsIGFiX2FoYi1cXHUwMDNlZncuY2Vfc2l6ZSxcXG4xMDc4OlxcdFxcdFxcdFxcdElPTU1VX1JFQUQgfCBJT01NVV9XUklURSwgR0ZQX0tFUk5FTCk7XFxuMTA3OTpcXHRcXHRpZiAocmV0KSB7XFxuMTA4MDpcXHRcXHRcXHRhdGgxMWtfZXJyKGFiLCBcXFwiZmFpbGVkIHRvIG1hcCBmaXJtd2FyZSBDRSByZWdpb246ICVkXFxcXG5cXFwiLCByZXQpO1xcbjEwODE6XFx0XFx0XFx0Z290byBlcnJfaW9tbXVfdW5tYXA7XFxuMTA4MjpcXHRcXHR9XFxuMTA4MzpcXHRcXG4xMDg0OlxcdFxcdGFiX2FoYi1cXHUwMDNlZncudXNlX3R6ID0gZmFsc2U7XFxuMTA4NTpcXHRcXHRhYl9haGItXFx1MDAzZWZ3LmlvbW11X2RvbWFpbiA9IGlvbW11X2RvbTtcXG4xMDg2OlxcdFxcdG9mX25vZGVfcHV0KG5vZGUpO1xcbjEwODc6XFx0XFxuMTA4ODpcXHRcXHRyZXR1cm4gMDtcXG4xMDg5OlxcdFxcbjEwOTA6XFx0ZXJyX2lvbW11X3VubWFwOlxcbjEwOTE6XFx0XFx0aW9tbXVfdW5tYXAoaW9tbXVfZG9tLCBhYl9haGItXFx1MDAzZWZ3Lm1zYV9wYWRkciwgYWJfYWhiLVxcdTAwM2Vmdy5tc2Ffc2l6ZSk7XFxuMTA5MjpcXHRcXG4xMDkzOlxcdGVycl9pb21tdV9kZXRhY2g6XFxuMTA5NDpcXHRcXHRpb21tdV9kZXRhY2hfZGV2aWNlKGlvbW11X2RvbSwgYWJfYWhiLVxcdTAwM2Vmdy5kZXYpO1xcbjEwOTU6XFx0XFxuMTA5NjpcXHRlcnJfaW9tbXVfZnJlZTpcXG4xMDk3OlxcdFxcdGlvbW11X2RvbWFpbl9mcmVlKGlvbW11X2RvbSk7XFxuMTA5ODpcXHRcXG4xMDk5OlxcdGVycl91bnJlZ2lzdGVyOlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNlQxNjoyMDowOS43ODUyNDEzMjVaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozODEyMTk4Mzg1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgYXRoMTFrX2FoYiBQcm9iZSBGdW5jdGlvbmFsaXR5KipcblxuT2theSwgc28gSSdtIHRoaW5raW5nIGFib3V0IGhvdyBgYXRoMTFrX2FoYl9wcm9iZWAgd29ya3MuIEl0IGxvb2tzIGxpa2UgaXQgY3JpdGljYWxseSByZWxpZXMgb24gYGRldmljZV9nZXRfbWF0Y2hfZGF0YShcdTAwMjZwZGV2LVx1MDAzZWRldilgIHJldHVybmluZyBvbmUgb2YgdGhlIHNwZWNpZmllZCBgaHdfcmV2YCB2YWx1ZXMuIFRoYXQncyB0aGUga2V5IHJlcXVpcmVtZW50IGZvciB0aGUgZHJpdmVyIHRvIHN1Y2Nlc3NmdWxseSBiaW5kIHRvIHRoZSBkZXZpY2UuXG5cbk5vdywgSSdtIGNvbnNpZGVyaW5nIHRoZSBwb3RlbnRpYWwgaW1wYWN0IG9mIGZ1enppbmcsIHBhcnRpY3VsYXJseSBzeXprYWxsZXIuIElmIHN5emthbGxlciBpcyBjcmVhdGluZyBhIHBsYXRmb3JtIGRldmljZSwgdGhlbiB0aGUgZHJpdmVyIG1hdGNoaW5nIHByb2Nlc3MgY291bGQgYmUgaGFwcGVuaW5nIHRocm91Z2ggZWl0aGVyIHRoZSBkZXZpY2UgbmFtZSBvciwgbW9yZSBpbnRlcmVzdGluZ2x5LCB0aGUgT0YgKE9wZW4gRmlybXdhcmUpIG1hdGNoIHRhYmxlLiBJIG5lZWQgdG8gdGFrZSBhIGxvb2sgYXQgdGhhdCBPRiBtYXRjaCB0YWJsZSB0byB1bmRlcnN0YW5kIGV4YWN0bHkgd2hhdCBjcml0ZXJpYSBhcmUgYmVpbmcgdXNlZC4gSXQncyBjcnVjaWFsIHRvIHVuZGVyc3RhbmQgdGhpcyB0byBzZWUgaWYgdGhlcmUncyBhbiBhdHRhY2sgc3VyZmFjZSB0aGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6OTE1NywiT3V0cHV0VG9rZW5zIjo0NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTZUMTY6MjA6MTMuNTk3NDQyNThaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU3MzY3MDE2OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJhdGgxMWtfYWhiX29mX21hdGNoXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvYWhiLmMtMjMtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9haGIuYzoyNDpzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBhdGgxMWtfYWhiX29mX21hdGNoW10gPSB7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9haGIuYy0yNS1cXHQvKiBUT0RPOiBTaG91bGQgd2UgY2hhbmdlIHRoZSBjb21wYXRpYmxlIHN0cmluZyB0byBzb21ldGhpbmcgc2ltaWxhclxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9haGIuYy00Mi1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2FoYi5jOjQzOk1PRFVMRV9ERVZJQ0VfVEFCTEUob2YsIGF0aDExa19haGJfb2ZfbWF0Y2gpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvYWhiLmMtNDQtXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2FoYi5jPTEzMzY9c3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgYXRoMTFrX2FoYl9kcml2ZXIgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2FoYi5jLTEzMzgtXFx0XFx0Lm5hbWUgPSBcXFwiYXRoMTFrXFxcIixcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2FoYi5jOjEzMzk6XFx0XFx0Lm9mX21hdGNoX3RhYmxlID0gYXRoMTFrX2FoYl9vZl9tYXRjaCxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2FoYi5jLTEzNDAtXFx0fSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTZUMTY6MjA6MTQuMTcxMTIzODY5WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQyMTQwOTAxODcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIFN0cmluZyBDb21wYXRpYmlsaXR5KipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgY29tcGF0aWJpbGl0eSBoZXJlLCBzcGVjaWZpY2FsbHkgcmVsYXRpbmcgdG8gc3RyaW5ncy4gTXkgZmlyc3QgdGhvdWdodCBpcyB0byBxdWlja2x5IGV2YWx1YXRlIHRoZSByYW5nZSBvZiBzdXBwb3J0ZWQgc3RyaW5nIHR5cGVzIG9yIGZvcm1hdHMuIEkgbmVlZCB0byBiZSBlZmZpY2llbnQgYW5kIHplcm8gaW4gb24gdGhlIHJlbGV2YW50IHBhcmFtZXRlcnMsIHJhdGhlciB0aGFuIGdldHRpbmcgYm9nZ2VkIGRvd24gaW4gdW5uZWNlc3NhcnkgZGV0YWlscy4gVGhlIGdvYWwgaGVyZSBpcyB0byBkZXRlcm1pbmUgd2hhdCBzdHJpbmcgdHlwZXMgd2lsbCBzZWFtbGVzc2x5IGludGVncmF0ZSB3aXRoIHRoZSBzeXN0ZW0gaW4gcXVlc3Rpb24uIElzIGl0IFVuaWNvZGUsIEFTQ0lJLCBVVEYtOCwgVVRGLTE2PyBXaGF0IGFib3V0IG1vcmUgc3BlY2lhbGl6ZWQgZm9ybWF0cywgb3IgZXZlbiBsZWdhY3kgZW5jb2RpbmdzIHRoYXQgc3RpbGwgbWlnaHQgYmUgaW4gcGxheT8gQSB0aG9yb3VnaCB1bmRlcnN0YW5kaW5nIG9mIHdoYXQncyBzdXBwb3J0ZWQgaXMgdGhlIGZvdW5kYXRpb24gb2YgYW55IGNvbXBhdGliaWxpdHkgYW5hbHlzaXMuIEkgd2FudCB0byBidWlsZCBhIG1hdHJpeCwgbWF5YmU7IGEgbWVudGFsIG9uZSwgb3IgYSBxdWljayBvbmUgb24gcGFwZXIgaWYgbmVlZCBiZSwgYmFzZWQgb24gd2hhdCB0aGUgc291cmNlIHN1cHBvcnRzLCBhbmQgY29tcGFyZSBpdCB0byB0aGUgY2FwYWJpbGl0aWVzIG9mIHRoZSBkZXN0aW5hdGlvbiBmb3Igc29tZSBraW5kIG9mIGNyb3NzLWNvbXBhdGliaWxpdHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk4MDUsIk91dHB1dFRva2VucyI6NDQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xNlQxNjoyMDoxOC4zODUyMTczNTZaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTcxMTIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvYWhiLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjQsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgMjQ6XFx0c3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgYXRoMTFrX2FoYl9vZl9tYXRjaFtdID0ge1xcbiAgMjU6XFx0XFx0LyogVE9ETzogU2hvdWxkIHdlIGNoYW5nZSB0aGUgY29tcGF0aWJsZSBzdHJpbmcgdG8gc29tZXRoaW5nIHNpbWlsYXJcXG4gIDI2OlxcdFxcdCAqIHRvIG9uZSB0aGF0IGF0aDEwayB1c2VzP1xcbiAgMjc6XFx0XFx0ICovXFxuICAyODpcXHRcXHR7IC5jb21wYXRpYmxlID0gXFxcInFjb20saXBxODA3NC13aWZpXFxcIixcXG4gIDI5OlxcdFxcdCAgLmRhdGEgPSAodm9pZCAqKUFUSDExS19IV19JUFE4MDc0LFxcbiAgMzA6XFx0XFx0fSxcXG4gIDMxOlxcdFxcdHsgLmNvbXBhdGlibGUgPSBcXFwicWNvbSxpcHE2MDE4LXdpZmlcXFwiLFxcbiAgMzI6XFx0XFx0ICAuZGF0YSA9ICh2b2lkICopQVRIMTFLX0hXX0lQUTYwMThfSFcxMCxcXG4gIDMzOlxcdFxcdH0sXFxuICAzNDpcXHRcXHR7IC5jb21wYXRpYmxlID0gXFxcInFjb20sd2NuNjc1MC13aWZpXFxcIixcXG4gIDM1OlxcdFxcdCAgLmRhdGEgPSAodm9pZCAqKUFUSDExS19IV19XQ042NzUwX0hXMTAsXFxuICAzNjpcXHRcXHR9LFxcbiAgMzc6XFx0XFx0eyAuY29tcGF0aWJsZSA9IFxcXCJxY29tLGlwcTUwMTgtd2lmaVxcXCIsXFxuICAzODpcXHRcXHQgIC5kYXRhID0gKHZvaWQgKilBVEgxMUtfSFdfSVBRNTAxOF9IVzEwLFxcbiAgMzk6XFx0XFx0fSxcXG4gIDQwOlxcdFxcdHsgfVxcbiAgNDE6XFx0fTtcXG4gIDQyOlxcdFxcbiAgNDM6XFx0TU9EVUxFX0RFVklDRV9UQUJMRShvZiwgYXRoMTFrX2FoYl9vZl9tYXRjaCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE2VDE2OjIwOjE4LjM4NTM5MjcyNloiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNTIxMTY3MjMxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlJlc291cmNlIFZlcmlmaWNhdGlvbiBmb3IgUGxhdGZvcm0gRGV2aWNlIEluaXRpYWxpemF0aW9uKipcblxuT2theSwgc28gU3l6a2FsbGVyJ3MgdGVsbGluZyBtZSBpdCBjYW4gc3BpbiB1cCBhIHBsYXRmb3JtIGRldmljZSB1c2luZyB0aGVzZSBjb21wYXRpYmxlIHN0cmluZ3MuIFRoYXQncyBhIGdvb2Qgc3RhcnQsIGJ1dCBJIG5lZWQgdG8gZGlnIGRlZXBlci4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIGRvZXMgdGhpcyBuZXcgZGV2aWNlICphY3R1YWxseSogaGF2ZSB3aGF0IGl0IG5lZWRzIHRvIGZ1bmN0aW9uPyBUaGluZ3MgbGlrZSBJbnRlcnJ1cHQgUmVxdWVzdCBMaW5lcyAoSVJRcykgYW5kIG1lbW9yeSByZWdpb25zIGFyZSBjcml0aWNhbC4gVGhleSBhcmUgdGhlIG94eWdlbiBmb3IgdGhpcyB0aGluZy5cblxuTGV0J3Mgbm90IGp1bXAgdG8gY29uY2x1c2lvbnMuIEkgbmVlZCB0byB2ZXJpZnkgaXRzIHJlc291cmNlIGFsbG9jYXRpb24uIExldCBtZSBjaGVjayB0aGUgYGF0aDExa19haGJfc2V0dXBfcmVzb3VyY2VzYCBmdW5jdGlvbi4gVGhhdCdzIHdoZXJlIGl0J3MgYWxsIGhhbmRsZWQuIFRoYXQncyB3aGVyZSBJIHdpbGwgZmluZCBteSBhbnN3ZXJzLiBUaGF0IGlzIHRoZSBrZXkgZnVuY3Rpb24gdGhhdCBtYWtlcyB0aGlzIHdob2xlIHRoaW5nIHRpY2shXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwNDIxLCJPdXRwdXRUb2tlbnMiOjQ1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDksIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xNlQxNjoyMDoyMS45MDY1NjMyMTdaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTYwNzcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvYWhiLmNcIixcbiAgXCJGaXJzdExpbmVcIjogOTUwLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgOTUwOlxcdHN0YXRpYyBpbnQgYXRoMTFrX2FoYl9zZXR1cF9tc2FfcmVzb3VyY2VzKHN0cnVjdCBhdGgxMWtfYmFzZSAqYWIpXFxuIDk1MTpcXHR7XFxuIDk1MjpcXHRcXHRzdHJ1Y3QgYXRoMTFrX2FoYiAqYWJfYWhiID0gYXRoMTFrX2FoYl9wcml2KGFiKTtcXG4gOTUzOlxcdFxcdHN0cnVjdCBkZXZpY2UgKmRldiA9IGFiLVxcdTAwM2VkZXY7XFxuIDk1NDpcXHRcXHRzdHJ1Y3QgcmVzb3VyY2UgcjtcXG4gOTU1OlxcdFxcdGludCByZXQ7XFxuIDk1NjpcXHRcXG4gOTU3OlxcdFxcdHJldCA9IG9mX3Jlc2VydmVkX21lbV9yZWdpb25fdG9fcmVzb3VyY2UoZGV2LVxcdTAwM2VvZl9ub2RlLCAwLCBcXHUwMDI2cik7XFxuIDk1ODpcXHRcXHRpZiAocmV0KSB7XFxuIDk1OTpcXHRcXHRcXHRkZXZfZXJyKGRldiwgXFxcImZhaWxlZCB0byByZXNvbHZlIG1zYSBmaXhlZCByZWdpb25cXFxcblxcXCIpO1xcbiA5NjA6XFx0XFx0XFx0cmV0dXJuIHJldDtcXG4gOTYxOlxcdFxcdH1cXG4gOTYyOlxcdFxcbiA5NjM6XFx0XFx0YWJfYWhiLVxcdTAwM2Vmdy5tc2FfcGFkZHIgPSByLnN0YXJ0O1xcbiA5NjQ6XFx0XFx0YWJfYWhiLVxcdTAwM2Vmdy5tc2Ffc2l6ZSA9IHJlc291cmNlX3NpemUoXFx1MDAyNnIpO1xcbiA5NjU6XFx0XFxuIDk2NjpcXHRcXHRyZXQgPSBvZl9yZXNlcnZlZF9tZW1fcmVnaW9uX3RvX3Jlc291cmNlKGRldi1cXHUwMDNlb2Zfbm9kZSwgMSwgXFx1MDAyNnIpO1xcbiA5Njc6XFx0XFx0aWYgKHJldCkge1xcbiA5Njg6XFx0XFx0XFx0ZGV2X2VycihkZXYsIFxcXCJmYWlsZWQgdG8gcmVzb2x2ZSBjZSBmaXhlZCByZWdpb25cXFxcblxcXCIpO1xcbiA5Njk6XFx0XFx0XFx0cmV0dXJuIHJldDtcXG4gOTcwOlxcdFxcdH1cXG4gOTcxOlxcdFxcbiA5NzI6XFx0XFx0YWJfYWhiLVxcdTAwM2Vmdy5jZV9wYWRkciA9IHIuc3RhcnQ7XFxuIDk3MzpcXHRcXHRhYl9haGItXFx1MDAzZWZ3LmNlX3NpemUgPSByZXNvdXJjZV9zaXplKFxcdTAwMjZyKTtcXG4gOTc0OlxcdFxcbiA5NzU6XFx0XFx0cmV0dXJuIDA7XFxuIDk3NjpcXHR9XFxuIDk3NzpcXHRcXG4gOTc4OlxcdHN0YXRpYyBpbnQgYXRoMTFrX2FoYl9jZV9yZW1hcChzdHJ1Y3QgYXRoMTFrX2Jhc2UgKmFiKVxcbiA5Nzk6XFx0e1xcbiA5ODA6XFx0XFx0Y29uc3Qgc3RydWN0IGNlX3JlbWFwICpjZV9yZW1hcCA9IGFiLVxcdTAwM2Vod19wYXJhbXMuY2VfcmVtYXA7XFxuIDk4MTpcXHRcXHRzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2ID0gYWItXFx1MDAzZXBkZXY7XFxuIDk4MjpcXHRcXG4gOTgzOlxcdFxcdGlmICghY2VfcmVtYXApIHtcXG4gOTg0OlxcdFxcdFxcdC8qIG5vIHNlcGFyYXRlIENFIHJlZ2lzdGVyIHNwYWNlICovXFxuIDk4NTpcXHRcXHRcXHRhYi1cXHUwMDNlbWVtX2NlID0gYWItXFx1MDAzZW1lbTtcXG4gOTg2OlxcdFxcdFxcdHJldHVybiAwO1xcbiA5ODc6XFx0XFx0fVxcbiA5ODg6XFx0XFxuIDk4OTpcXHRcXHQvKiBjZSByZWdpc3RlciBzcGFjZSBpcyBtb3ZlZCBvdXQgb2Ygd2NzcyB1bmxpa2UgaXBxODA3NCBvciBpcHE2MDE4XFxuIDk5MDpcXHRcXHQgKiBhbmQgdGhlIHNwYWNlIGlzIG5vdCBjb250aWd1b3VzLCBoZW5jZSByZW1hcHBpbmcgdGhlIENFIHJlZ2lzdGVyc1xcbiA5OTE6XFx0XFx0ICogdG8gYSBuZXcgc3BhY2UgZm9yIGFjY2Vzc2luZyB0aGVtLlxcbiA5OTI6XFx0XFx0ICovXFxuIDk5MzpcXHRcXHRhYi1cXHUwMDNlbWVtX2NlID0gaW9yZW1hcChjZV9yZW1hcC1cXHUwMDNlYmFzZSwgY2VfcmVtYXAtXFx1MDAzZXNpemUpO1xcbiA5OTQ6XFx0XFx0aWYgKCFhYi1cXHUwMDNlbWVtX2NlKSB7XFxuIDk5NTpcXHRcXHRcXHRkZXZfZXJyKFxcdTAwMjZwZGV2LVxcdTAwM2VkZXYsIFxcXCJjZSBpb3JlbWFwIGVycm9yXFxcXG5cXFwiKTtcXG4gOTk2OlxcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbiA5OTc6XFx0XFx0fVxcbiA5OTg6XFx0XFxuIDk5OTpcXHRcXHRyZXR1cm4gMDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTZUMTY6MjA6MjEuOTA2NzI2NTg3WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM1MDAyMjIzNzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqTWlzc2luZyBGdW5jdGlvbiBDYWxsIGluIFJldmlldyoqXG5cbk9rYXksIGhvbGQgb24gYSBzZWNvbmQuIEknbSBsb29raW5nIG92ZXIgdGhpcyBjb2RlLCBzcGVjaWZpY2FsbHkgdGhpcyBzZWN0aW9uLCBhbmQgc29tZXRoaW5nJ3Mgbm90IHF1aXRlIHJpZ2h0LiBJIGV4cGVjdGVkIHRvIHNlZSBhIGNhbGwgdG8gYGF0aDExa19haGJfc2V0dXBfcmVzb3VyY2VzYCBpbiB0aGlzIGNvbnRleHQsIGJ1dCBpdCdzIGNvbnNwaWN1b3VzbHkgYWJzZW50LiBJJ20gYW4gZXhwZXJ0IGluIHRoaXMgYXJlYSwgc28gSSBrbm93IHdoZXJlIGl0IHNob3VsZCBiZSwgYW5kIHRoZSBmbG93IGp1c3QgZG9lc24ndCBzZWVtIGxvZ2ljYWwgd2l0aG91dCBpdC4gSSBuZWVkIHRvIHRyYWNrIGl0IGRvd24uIFdoZXJlIGlzIHRoaXMgZnVuY3Rpb24gYWN0dWFsbHkgYmVpbmcgY2FsbGVkIGZyb20/IEknbGwgbmVlZCB0byBnbyBodW50aW5nIGZvciBpdCBub3cuIFRpbWUgdG8gZGlnIGRlZXBlciBpbnRvIHRoZSBjb2RlYmFzZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE0ODIsIk91dHB1dFRva2VucyI6NDQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE2VDE2OjIwOjI1LjQwNjk1MzgyN1oiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTExNDI2MTQ3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImF0aDExa19haGJfc2V0dXBfcmVzb3VyY2VzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvYWhiLmM9OTE5PXN0YXRpYyB2b2lkIGF0aDExa19haGJfcmVsZWFzZV9zbXAycF9oYW5kbGUoc3RydWN0IGF0aDExa19iYXNlICphYilcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvYWhiLmMtOTI4LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvYWhiLmM6OTI5OnN0YXRpYyBpbnQgYXRoMTFrX2FoYl9zZXR1cF9yZXNvdXJjZXMoc3RydWN0IGF0aDExa19iYXNlICphYilcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2FoYi5jLTkzMC17XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2FoYi5jPTExNDE9c3RhdGljIGludCBhdGgxMWtfYWhiX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2FoYi5jLTExOTUtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9haGIuYzoxMTk2OlxcdHJldCA9IGF0aDExa19haGJfc2V0dXBfcmVzb3VyY2VzKGFiKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2FoYi5jLTExOTctXFx0aWYgKHJldClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTZUMTY6MjA6MjUuNTE4Mzg1ODQ1WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjg3MjMyODk3NjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUgd2UgZ28uLi5cblxuKipEZWx2aW5nIGludG8gYGF0aDExa19haGJfc2V0dXBfcmVzb3VyY2VzYCoqXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgaW50byB0aGlzIGBhdGgxMWtfYWhiX3NldHVwX3Jlc291cmNlc2AgZnVuY3Rpb24uIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byB1bmRlcnN0YW5kIGl0cyBwdXJwb3NlIHdpdGhpbiB0aGUgYnJvYWRlciBgYXRoMTFrYCBmcmFtZXdvcmssIHNwZWNpZmljYWxseSBob3cgaXQgcmVsYXRlcyB0byB0aGUgQUhCIGJ1cyBhbmQgcmVzb3VyY2UgYWxsb2NhdGlvbi4gR2l2ZW4gdGhlIG5hbWUsIEknbSBleHBlY3RpbmcgaXQgdG8gaGFuZGxlIHRoZSBpbml0aWFsaXphdGlvbiBhbmQgY29uZmlndXJhdGlvbiBvZiBoYXJkd2FyZSByZXNvdXJjZXMgbmVlZGVkIGJ5IHRoZSBkcml2ZXIgb24gYW4gQUhCLWNvbm5lY3RlZCBkZXZpY2UuXG5cbkkgaW1tZWRpYXRlbHkgd2FudCB0byBwaW5wb2ludCB3aGF0IGV4YWN0bHkgXCJyZXNvdXJjZXNcIiBlbmNvbXBhc3MgaGVyZS4gQXJlIHdlIHRhbGtpbmcgYWJvdXQgRE1BIGNoYW5uZWxzPyBNZW1vcnkgcmVnaW9ucz8gSW50ZXJydXB0IGxpbmVzPyBPciBwZXJoYXBzIGEgY29tYmluYXRpb24gb2YgdGhlc2UgYW5kIG90aGVyIEhXLXNwZWNpZmljIGNvbmZpZ3VyYXRpb25zPyBJJ2xsIG5lZWQgdG8gY2FyZWZ1bGx5IGV4YW1pbmUgdGhlIGNvZGUgdG8gc2VlIGhvdyB0aGVzZSByZXNvdXJjZXMgYXJlIGlkZW50aWZpZWQsIHJlcXVlc3RlZCwgYW5kLCBjcnVjaWFsbHksIHByb3RlY3RlZCBmcm9tIGNvbmZsaWN0cy5cblxuVGhlIEFIQiBidXMgaXRzZWxmIGlzIGEga2V5IHBpZWNlIG9mIHRoaXMgcHV6emxlLiBIb3cgZG9lcyB0aGUgY29kZSBpbnRlcmFjdCB3aXRoIHRoZSBBSEIgYnJpZGdlPyBJcyB0aGVyZSBhbnkgc3BlY2lmaWMgYnVzIGNsb2NrIGNvbmZpZ3VyYXRpb24gaW52b2x2ZWQsIGFuZCBpZiBzbywgaG93IGlzIGl0IGhhbmRsZWQ/IEFyZSB0aGVyZSBhbnkgcG93ZXItbWFuYWdlbWVudCBjb25zaWRlcmF0aW9ucyBpbiB0aGlzIHNldHVwLCBvciBpcyBpdCBhc3N1bWVkIHRoZSBBSEIgaXMgYWxyZWFkeSBwb3dlcmVkIHVwIGFuZCByZWFkeT9cblxuSSdtIHBhcnRpY3VsYXJseSBpbnRlcmVzdGVkIGluIGhvdyB0aGUgZnVuY3Rpb24gaGFuZGxlcyBwb3RlbnRpYWwgZXJyb3JzLiBXaGF0IGFyZSB0aGUgZXJyb3IgcGF0aHMsIGFuZCB3aGF0IGtpbmQgb2YgcmVjb3Zlcnkgb3IgY2xlYW51cCBtZWNoYW5pc21zIGFyZSBpbiBwbGFjZT8gR29vZCByZXNvdXJjZSBtYW5hZ2VtZW50IGlzIGNyaXRpY2FsLCBhbmQgYSByb2J1c3QgaW1wbGVtZW50YXRpb24gc2hvdWxkIGhhdmUgZ3JhY2VmdWwgZXJyb3IgaGFuZGxpbmcuIEFsc28sIHdoYXQgZG9lcyB0aGUgcmV0dXJuIHZhbHVlIHNpZ25hbCB0byB0aGUgY2FsbGVyIGFuZCB3aHk/XG5cbkZpbmFsbHksIEknbGwgcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGludm9sdmVkLCBlc3BlY2lhbGx5IGFueSBjdXN0b20gc3RydWN0dXJlcyBvciBlbnVtcyB0aGF0IGFyZSBzcGVjaWZpYyB0byB0aGUgQUhCIGludGVyZmFjZS4gSSdtIGxvb2tpbmcgZm9yIGNsZWFyLCBjb25jaXNlIGRlZmluaXRpb25zIHRoYXQgaGVscCBtZSB1bmRlcnN0YW5kIHRoZSBmbG93IG9mIGRhdGEgYW5kIGNvbnRyb2wuIExldCdzIHNlZSBpZiB0aGlzIGZ1bmN0aW9uIGxpdmVzIHVwIHRvIG15IGV4cGVjdGF0aW9ucyFcblxuXG4iLCJJbnB1dFRva2VucyI6MTE5OTgsIk91dHB1dFRva2VucyI6NDUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xNlQxNjoyMDozNC4yNDE2Nzg0ODRaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjEzNDIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvYWhiLmNcIixcbiAgXCJGaXJzdExpbmVcIjogOTI5LFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgOTI5OlxcdHN0YXRpYyBpbnQgYXRoMTFrX2FoYl9zZXR1cF9yZXNvdXJjZXMoc3RydWN0IGF0aDExa19iYXNlICphYilcXG4gOTMwOlxcdHtcXG4gOTMxOlxcdFxcdHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYgPSBhYi1cXHUwMDNlcGRldjtcXG4gOTMyOlxcdFxcdHN0cnVjdCByZXNvdXJjZSAqbWVtX3JlcztcXG4gOTMzOlxcdFxcdHZvaWQgX19pb21lbSAqbWVtO1xcbiA5MzQ6XFx0XFxuIDkzNTpcXHRcXHRpZiAoYWItXFx1MDAzZWh3X3BhcmFtcy5oeWJyaWRfYnVzX3R5cGUpXFxuIDkzNjpcXHRcXHRcXHRyZXR1cm4gYXRoMTFrX2FoYl9zZXR1cF9tc2lfcmVzb3VyY2VzKGFiKTtcXG4gOTM3OlxcdFxcbiA5Mzg6XFx0XFx0bWVtID0gZGV2bV9wbGF0Zm9ybV9nZXRfYW5kX2lvcmVtYXBfcmVzb3VyY2UocGRldiwgMCwgXFx1MDAyNm1lbV9yZXMpO1xcbiA5Mzk6XFx0XFx0aWYgKElTX0VSUihtZW0pKSB7XFxuIDk0MDpcXHRcXHRcXHRkZXZfZXJyKFxcdTAwMjZwZGV2LVxcdTAwM2VkZXYsIFxcXCJpb3JlbWFwIGVycm9yXFxcXG5cXFwiKTtcXG4gOTQxOlxcdFxcdFxcdHJldHVybiBQVFJfRVJSKG1lbSk7XFxuIDk0MjpcXHRcXHR9XFxuIDk0MzpcXHRcXG4gOTQ0OlxcdFxcdGFiLVxcdTAwM2VtZW0gPSBtZW07XFxuIDk0NTpcXHRcXHRhYi1cXHUwMDNlbWVtX2xlbiA9IHJlc291cmNlX3NpemUobWVtX3Jlcyk7XFxuIDk0NjpcXHRcXG4gOTQ3OlxcdFxcdHJldHVybiAwO1xcbiA5NDg6XFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNlQxNjoyMDozNC4yNDE4OTQ5MjRaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzc2MjcxMjYzNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6XG5cbioqQW5hbHl6aW5nIHRoZSBSZXNvdXJjZSBEZXBlbmRlbmN5KipcblxuQWxyaWdodCwgc28gdGhlIGNvcmUgb2YgdGhpcyBzZWVtcyB0byBiZSBhIG1lbW9yeSByZXNvdXJjZSBkZXBlbmRlbmN5LiBObyBwcm9ibGVtLCBTeXprYWxsZXIgY2FuIGRlZmluaXRlbHkgaGVscCB0aGVyZSDigJMgaXQncyBkZXNpZ25lZCB0byBtYW5hZ2UgYW5kIGV4cG9zZSB0aG9zZSBraW5kcyBvZiByZXNvdXJjZXMgZHVyaW5nIGZ1enppbmcuIEJ1dCwgdGhhdCBgYXRoMTFrX2FoYl9zZXR1cF9zbXAycF9oYW5kbGVgIGZ1bmN0aW9uLi4uIHRoYXQncyB0aGUgaW50ZXJlc3RpbmcgcG9pbnQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyByb2xlIHdpdGhpbiB0aGlzIGNvbnRleHQsIGl0cyBwdXJwb3NlLCBhbmQgd2hldGhlciBpdCBpbnRyb2R1Y2VzIGFueSBzcGVjaWZpYyBjb21wbGV4aXRpZXMgb3IgdnVsbmVyYWJpbGl0aWVzIEkgbmVlZCB0byBjb25zaWRlciB3aGVuIGRlc2lnbmluZyBhIGZ1enppbmcgY2FtcGFpZ24gb3IgZXhwbG9pdC4gSXQncyB0aGUga2V5IHRvIHRoZSBzb2x1dGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI3NTYsIk91dHB1dFRva2VucyI6NDksIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE2VDE2OjIwOjM4LjAwNDYxMTA0OVoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjExNDYzNDUxOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJhdGgxMWtfYWhiX3NldHVwX3NtcDJwX2hhbmRsZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2FoYi5jPTg1MT1zdGF0aWMgaW50IGF0aDExa19haGJfc2V0dXBfbXNpX3Jlc291cmNlcyhzdHJ1Y3QgYXRoMTFrX2Jhc2UgKmFiKVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9haGIuYy05MDAtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9haGIuYzo5MDE6c3RhdGljIGludCBhdGgxMWtfYWhiX3NldHVwX3NtcDJwX2hhbmRsZShzdHJ1Y3QgYXRoMTFrX2Jhc2UgKmFiKVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvYWhiLmMtOTAyLXtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvYWhiLmM9MTE0MT1zdGF0aWMgaW50IGF0aDExa19haGJfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvYWhiLmMtMTIwNy1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2FoYi5jOjEyMDg6XFx0cmV0ID0gYXRoMTFrX2FoYl9zZXR1cF9zbXAycF9oYW5kbGUoYWIpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvYWhiLmMtMTIwOS1cXHRpZiAocmV0KVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNlQxNjoyMDo0MC4xMTkyNTEyMThaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzUyMTE2NTg2MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgYGF0aDExa19haGJfc2V0dXBfc21wMnBfaGFuZGxlYCBmdW5jdGlvbi4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHVuZGVyc3RhbmQgaXRzIHB1cnBvc2Ugd2l0aGluIHRoZSBicm9hZGVyIGF0aDExayBkcml2ZXIgZnJhbWV3b3JrLCBwYXJ0aWN1bGFybHkgY29uY2VybmluZyB0aGUgaW50ZXJhY3Rpb24gb2YgdGhlIEFIQiBidXMgYW5kIHBvdGVudGlhbGx5IFNpbXVsdGFuZW91cyBNdWx0aS1QYXRoIChTTVApIG9yIFBvaW50LXRvLVBvaW50IChQMlApIGNvbW11bmljYXRpb24sIGFzIHN1Z2dlc3RlZCBieSB0aGUgbmFtZS4gSSBpbW1lZGlhdGVseSB3YW50IHRvIGdyYXNwIHRoZSBsZXZlbCBvZiB0aGlzIGZ1bmN0aW9uIHdpdGhpbiB0aGUgZHJpdmVyJ3MgY2FsbCBzdHJ1Y3R1cmUuIElzIGl0IGNhbGxlZCBkdXJpbmcgaW5pdGlhbGl6YXRpb24sIGR1cmluZyBkZXZpY2UgcHJvYmluZywgb3IgaW4gcmVzcG9uc2UgdG8gc29tZSBzcGVjaWZpYyBldmVudD9cblxuSSdsbCBiZSBsb29raW5nIGZvciBjbHVlcyBhYm91dCB0aGUgaGFyZHdhcmUgaXTigJlzIHRhcmdldGluZy4gSXMgdGhpcyBzcGVjaWZpYyB0byBhIGNlcnRhaW4gUUNBIGNoaXBzZXQgb3IgYSBwYXJ0aWN1bGFyIFBIWT8gVW5kZXJzdGFuZGluZyB0aGUgdGFyZ2V0IGhhcmR3YXJlIHdpbGwgaW5mb3JtIG15IGV4cGVjdGF0aW9ucyBhYm91dCB3aGF0IHJlZ2lzdGVycyBhcmUgYmVpbmcgbWFuaXB1bGF0ZWQsIHdoYXQgbWVtb3J5IGlzIGJlaW5nIGFsbG9jYXRlZCwgYW5kIHdoYXQgaW50ZXJydXB0IHNvdXJjZXMgYXJlIGJlaW5nIGVuYWJsZWQuXG5cbkknbSBhbHNvIGN1cmlvdXMgYWJvdXQgdGhlIGNvbmN1cnJlbmN5IGFzcGVjdHMuIFRoZSBtZW50aW9uIG9mIFNNUCBtaWdodCBpbXBseSBtdWx0aS10aHJlYWRpbmcgYW5kIGxvY2tpbmcgaXNzdWVzLiBJ4oCZbGwgYmUgb24gdGhlIGxvb2tvdXQgZm9yIGFueSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlcyB1c2VkLCBzdWNoIGFzIG11dGV4ZXMgb3Igc3BpbmxvY2tzLCBhbmQgaG93IHRoZXkgcmVsYXRlIHRvIHRoZSBBSEIgY29tbXVuaWNhdGlvbiBwcm9jZXNzIHRvIGVuc3VyZSBkYXRhIGludGVncml0eS4gV2hhdCBzYWZlZ3VhcmRzIGFyZSBlbXBsb3llZCB0byBlbnN1cmUgdGhlcmUgYXJlIG5vIHJhY2UgY29uZGl0aW9ucyBvciBkZWFkbG9ja3M/XG5cblRoZW4sIHRoZSBQMlAgcGFydDogSSB3YW50IHRvIGRldGVybWluZSBpZiB0aGlzIGZ1bmN0aW9uIGlzIHJlbGF0ZWQgdG8gZGlyZWN0IGxpbmsgZXN0YWJsaXNobWVudCwgb3IgaWYgaXQgaGFzIHRvIGRvIHdpdGggc29tZSBoaWdoZXItbGV2ZWwgY29ubmVjdGlvbiBtYW5hZ2VtZW50IHByb3RvY29scy4gSXMgaXQgc2V0dGluZyB1cCBoYXJkd2FyZSBlbmRwb2ludHMgZm9yIGRpcmVjdCBkYXRhIHRyYW5zZmVyIG9yIHByb3ZpZGluZyBzb21lIGtpbmQgb2YgaGFyZHdhcmUgb2ZmbG9hZD8gSSBleHBlY3QgYSBjZXJ0YWluIGxldmVsIG9mIHJlZ2lzdGVyIHdyYW5nbGluZywgY2xvY2sgY29uZmlndXJhdGlvbiwgYW5kIHBvc3NpYmx5IERNQSBzZXR1cCBpbiB0aGUgZnVuY3Rpb24ncyBib2R5LiBJIGFtIGFsc28gc2VhcmNoaW5nIGZvciB0aGUgZXJyb3ItaGFuZGxpbmcgbWVjaGFuaXNtcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTMyODcsIk91dHB1dFRva2VucyI6NDUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xNlQxNjoyMDo0Ny42NDA0MTk4OVoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMTY3NDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9haGIuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA5MDEsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA5MDE6XFx0c3RhdGljIGludCBhdGgxMWtfYWhiX3NldHVwX3NtcDJwX2hhbmRsZShzdHJ1Y3QgYXRoMTFrX2Jhc2UgKmFiKVxcbiA5MDI6XFx0e1xcbiA5MDM6XFx0XFx0c3RydWN0IGF0aDExa19haGIgKmFiX2FoYiA9IGF0aDExa19haGJfcHJpdihhYik7XFxuIDkwNDpcXHRcXG4gOTA1OlxcdFxcdGlmICghYWItXFx1MDAzZWh3X3BhcmFtcy5zbXAycF93b3dfZXhpdClcXG4gOTA2OlxcdFxcdFxcdHJldHVybiAwO1xcbiA5MDc6XFx0XFxuIDkwODpcXHRcXHRhYl9haGItXFx1MDAzZXNtcDJwX2luZm8uc21lbV9zdGF0ZSA9IHFjb21fc21lbV9zdGF0ZV9nZXQoYWItXFx1MDAzZWRldiwgXFxcIndsYW4tc21wMnAtb3V0XFxcIixcXG4gOTA5OlxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICBcXHUwMDI2YWJfYWhiLVxcdTAwM2VzbXAycF9pbmZvLnNtZW1fYml0KTtcXG4gOTEwOlxcdFxcdGlmIChJU19FUlIoYWJfYWhiLVxcdTAwM2VzbXAycF9pbmZvLnNtZW1fc3RhdGUpKSB7XFxuIDkxMTpcXHRcXHRcXHRhdGgxMWtfZXJyKGFiLCBcXFwiZmFpbGVkIHRvIGZldGNoIHNtZW0gc3RhdGU6ICVsZFxcXFxuXFxcIixcXG4gOTEyOlxcdFxcdFxcdFxcdCAgIFBUUl9FUlIoYWJfYWhiLVxcdTAwM2VzbXAycF9pbmZvLnNtZW1fc3RhdGUpKTtcXG4gOTEzOlxcdFxcdFxcdHJldHVybiBQVFJfRVJSKGFiX2FoYi1cXHUwMDNlc21wMnBfaW5mby5zbWVtX3N0YXRlKTtcXG4gOTE0OlxcdFxcdH1cXG4gOTE1OlxcdFxcbiA5MTY6XFx0XFx0cmV0dXJuIDA7XFxuIDkxNzpcXHR9XFxuIDkxODpcXHRcXG4gOTE5OlxcdHN0YXRpYyB2b2lkIGF0aDExa19haGJfcmVsZWFzZV9zbXAycF9oYW5kbGUoc3RydWN0IGF0aDExa19iYXNlICphYilcXG4gOTIwOlxcdHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTZUMTY6MjA6NDcuNjQwNzM5MloiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3ODMzNTQ5OTg2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhpcyBsb2dpYywgcGhyYXNlZCBhcyBpZiBpdCB3ZXJlIG15IG93biB0aG91Z2h0IHByb2Nlc3MsIGdpdmVuIG15IGV4cGVydGlzZTpcblxuKipDaGVja2luZyBhIFdvdyBFeGl0IENvbmRpdGlvbiBpbiBJUFE4MDc0IEhhcmR3YXJlKipcblxuQWxyaWdodCwgc28gdGhlIGNvZGUgaXMgY2hlY2tpbmcgYSBjb25kaXRpb24uIFNwZWNpZmljYWxseSwgaXQgc2VlbXMgbGlrZSBhIGZ1bmN0aW9uIG9yIGJsb2NrIG9mIGNvZGUgaXMgZGVzaWduZWQgdG8gZGV0ZXJtaW5lIGlmIHNvbWUgYWN0aW9uLCBsaWtlbHkgcmVsYXRlZCB0byBcIndha2Utb24td2lyZWxlc3NcIiBvciBzaW1pbGFyLCBzaG91bGQgZXhpdCBlYXJseS4gVGhlIGNvcmUgb2YgdGhpcyBkZWNpc2lvbiBoaW5nZXMgb24gdGhlIHN0YXRlIG9mIGBhYi1cdTAwM2Vod19wYXJhbXMuc21wMnBfd293X2V4aXRgLiBJZiB0aGF0IGZsYWcgaXMgZmFsc2UsIG1lYW5pbmcgdGhlIFwic21wMnBfd293X2V4aXRcIiBjb25kaXRpb24gaXNuJ3QgbWV0IG9yIGVuYWJsZWQsIHRoZSBjb2RlIGltbWVkaWF0ZWx5IHJldHVybnMgYSB6ZXJvIHZhbHVlLiBUaGlzIHN1Z2dlc3RzIGEgcG90ZW50aWFsIGVhcmx5IGV4aXQgcGF0aCwgbGlrZWx5IHNpZ25hbGluZyB0aGF0IHdoYXRldmVyIHByb2Nlc3MgaXQncyBpbnZvbHZlZCBpbiBzaG91bGQgY2Vhc2Ugb3IgcmVwb3J0IGEgc3VjY2Vzc2Z1bCwgYWxiZWl0IHBvdGVudGlhbGx5IGluY29tcGxldGUsIHJlc3VsdC5cblxuVGhlIG5leHQgY3JpdGljYWwgc3RlcCB3b3VsZCBiZSB0byByZXZpZXcgYGh3X3BhcmFtc2Agc3BlY2lmaWNhbGx5IGZvciBJUFE4MDc0LCBhcyB0aGlzIHByb3ZpZGVzIHRoZSBjcnVjaWFsIGNvbnRleHQgYWJvdXQgdGhlIGhhcmR3YXJlIHBsYXRmb3JtIGluIHdoaWNoIHRoaXMgYHNtcDJwX3dvd19leGl0YCBpcyBiZWluZyBldmFsdWF0ZWQuIEknbGwgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgYGh3X3BhcmFtc2Agc3RvcmVzIGZvciB0aGF0IHBhcnRpY3VsYXIgY2hpcCwgc2luY2UgYHNtcDJwX3dvd19leGl0YCBpcyBkaXJlY3RseSBpbmZsdWVuY2VkIGJ5IGl0LiBJIGtub3cgSSB3aWxsIG5lZWQgdG8gbG9vayBzcGVjaWZpY2FsbHkgZm9yIGRldGFpbHMgcmVsYXRlZCB0byBwb3dlciBtYW5hZ2VtZW50LCB3YWtlLW9uLXdpcmVsZXNzIGNhcGFiaWxpdGllcywgYW5kIGFueSByZWxldmFudCBoYXJkd2FyZSBjb25zdHJhaW50cyBvbiB0aGUgSVBRODA3NC4gVGhlIGdvYWwgaXMgdG8gZmlndXJlIG91dCB0aGUgZXhhY3QgbWVhbmluZyBvZiB0aGF0IGZsYWcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0MTE3LCJPdXRwdXRUb2tlbnMiOjQ2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDMsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xNlQxNjoyMDo1NS40NzQyOTMzODZaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYwMTcyNjcyOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJBVEgxMUtfSFdfSVBRODA3NFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2FoYi5jPTI0PXN0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIGF0aDExa19haGJfb2ZfbWF0Y2hbXSA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvYWhiLmMtMjgtXFx0eyAuY29tcGF0aWJsZSA9IFxcXCJxY29tLGlwcTgwNzQtd2lmaVxcXCIsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9haGIuYzoyOTpcXHQgIC5kYXRhID0gKHZvaWQgKilBVEgxMUtfSFdfSVBRODA3NCxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2FoYi5jLTMwLVxcdH0sXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2FoYi5jPTExNDE9c3RhdGljIGludCBhdGgxMWtfYWhiX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2FoYi5jLTExNTEtXFx0c3dpdGNoIChod19yZXYpIHtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2FoYi5jOjExNTI6XFx0Y2FzZSBBVEgxMUtfSFdfSVBRODA3NDpcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2FoYi5jLTExNTMtXFx0Y2FzZSBBVEgxMUtfSFdfSVBRNjAxOF9IVzEwOlxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9jb3JlLmM9NDE9c3RhdGljIGNvbnN0IHN0cnVjdCBhdGgxMWtfaHdfcGFyYW1zIGF0aDExa19od19wYXJhbXNbXSA9IHtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2NvcmUuYy00Mi1cXHR7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9jb3JlLmM6NDM6XFx0XFx0Lmh3X3JldiA9IEFUSDExS19IV19JUFE4MDc0LFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvY29yZS5jLTQ0LVxcdFxcdC5uYW1lID0gXFxcImlwcTgwNzQgaHcyLjBcXFwiLFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9jb3JlLmg9MTQ1PWVudW0gYXRoMTFrX2h3X3JldiB7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9jb3JlLmg6MTQ2OlxcdEFUSDExS19IV19JUFE4MDc0LFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvY29yZS5oLTE0Ny1cXHRBVEgxMUtfSFdfUUNBNjM5MF9IVzIwLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNlQxNjoyMDo1Ni4wNzYwMzA3NTRaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDk3MTQ3OTk3MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgZmlyc3QtcGVyc29uIHN1bW1hcnksIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFzIHJlcXVlc3RlZDpcblxuKipEaXZpbmcgaW50byBhdGgxMWtfaHdfcGFyYW1zIGluIGNvcmUuYyoqXG5cbkFscmlnaHQsIGxldCdzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGhhcmR3YXJlIHBhcmFtZXRlcnMgYXJlIGJlaW5nIHNldCBmb3IgdGhlIGF0aDExayBkcml2ZXIuIFNwZWNpZmljYWxseSwgSSdtIGdvaW5nIHRvIGRpZyBpbnRvIHRoZSBgYXRoMTFrX2h3X3BhcmFtc2AgZnVuY3Rpb24gbG9jYXRlZCBpbiBgY29yZS5jYC4gSSBleHBlY3QgdGhpcyBmdW5jdGlvbiBob2xkcyB0aGUga2V5IHRvIGNvbmZpZ3VyaW5nIHRoZSBoYXJkd2FyZSdzIFJGIGFuZCBiYXNlYmFuZCBzZXR0aW5ncy4gSSdtIGdvaW5nIHRvIGJlIGxvb2tpbmcgZm9yIHdoZXJlIHRoZSByZWd1bGF0b3J5IGRvbWFpbiBpbmZvcm1hdGlvbiBpcyBhcHBsaWVkLCBhbmQgaG93IHRoZSBkcml2ZXIgaW50ZXJhY3RzIHdpdGggdGhlIGZpcm13YXJlIHRvIG9wdGltaXplIHRoZSBQSFkncyBiZWhhdmlvci4gSSBhbnRpY2lwYXRlIHNlZWluZyB0aGUgYWxsb2NhdGlvbiBvZiByZXNvdXJjZXMgZm9yIGRpZmZlcmVudCByYWRpbyBjaGFpbnMgYW5kIHRoZSBzZXR0aW5ncyBmb3IgdGhlIHZhcmlvdXMgbW9kZXMgd2Ugc3VwcG9ydCAoODAyLjExYXgsIGV0Yy4pLiBJIG5lZWQgdG8gc2VlIGhvdyB0aGV5J3JlIGhhbmRsaW5nIGNhbGlicmF0aW9uIGFuZCBkeW5hbWljIGFkanVzdG1lbnRzIGJhc2VkIG9uIGNoYW5uZWwgYW5kIGVudmlyb25tZW50LiBUaGlzIGlzIHdoZXJlIHRoZSBjb3JlIG9mIHBlcmZvcm1hbmNlIGFuZCBjb21wbGlhbmNlIGxpdmVzLCBzbyB1bmRlcnN0YW5kaW5nIHRoaXMgZnVuY3Rpb24gaXMgZ29pbmcgdG8gYmUgY3JpdGljYWwgdG8gdW5kZXJzdGFuZGluZyBhbnkgdGhyb3VnaHB1dCBsaW1pdGF0aW9ucyBJJ20gc2VlaW5nLiBJJ20gYWxzbyBpbnRlcmVzdGVkIGluIGFueSBwb3RlbnRpYWwgcG93ZXItc2F2aW5nIGZlYXR1cmVzIHRoYXQgYXJlIGJlaW5nIHNldCBoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTEwOSwiT3V0cHV0VG9rZW5zIjo0NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE2VDE2OjIxOjAxLjA0NzUxNDc0NloiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMDM5MjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9jb3JlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNDEsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDQxOlxcdHN0YXRpYyBjb25zdCBzdHJ1Y3QgYXRoMTFrX2h3X3BhcmFtcyBhdGgxMWtfaHdfcGFyYW1zW10gPSB7XFxuICA0MjpcXHRcXHR7XFxuICA0MzpcXHRcXHRcXHQuaHdfcmV2ID0gQVRIMTFLX0hXX0lQUTgwNzQsXFxuICA0NDpcXHRcXHRcXHQubmFtZSA9IFxcXCJpcHE4MDc0IGh3Mi4wXFxcIixcXG4gIDQ1OlxcdFxcdFxcdC5mdyA9IHtcXG4gIDQ2OlxcdFxcdFxcdFxcdC5kaXIgPSBcXFwiSVBRODA3NC9odzIuMFxcXCIsXFxuICA0NzpcXHRcXHRcXHRcXHQuYm9hcmRfc2l6ZSA9IDI1NiAqIDEwMjQsXFxuICA0ODpcXHRcXHRcXHRcXHQuY2FsX29mZnNldCA9IDEyOCAqIDEwMjQsXFxuICA0OTpcXHRcXHRcXHR9LFxcbiAgNTA6XFx0XFx0XFx0Lm1heF9yYWRpb3MgPSAzLFxcbiAgNTE6XFx0XFx0XFx0LmJkZl9hZGRyID0gMHg0QjBDMDAwMCxcXG4gIDUyOlxcdFxcdFxcdC5od19vcHMgPSBcXHUwMDI2aXBxODA3NF9vcHMsXFxuICA1MzpcXHRcXHRcXHQucmluZ19tYXNrID0gXFx1MDAyNmF0aDExa19od19yaW5nX21hc2tfaXBxODA3NCxcXG4gIDU0OlxcdFxcdFxcdC5pbnRlcm5hbF9zbGVlcF9jbG9jayA9IGZhbHNlLFxcbiAgNTU6XFx0XFx0XFx0LnJlZ3MgPSBcXHUwMDI2aXBxODA3NF9yZWdzLFxcbiAgNTY6XFx0XFx0XFx0LnFtaV9zZXJ2aWNlX2luc19pZCA9IEFUSDExS19RTUlfV0xGV19TRVJWSUNFX0lOU19JRF9WMDFfSVBRODA3NCxcXG4gIDU3OlxcdFxcdFxcdC5ob3N0X2NlX2NvbmZpZyA9IGF0aDExa19ob3N0X2NlX2NvbmZpZ19pcHE4MDc0LFxcbiAgNTg6XFx0XFx0XFx0LmNlX2NvdW50ID0gMTIsXFxuICA1OTpcXHRcXHRcXHQudGFyZ2V0X2NlX2NvbmZpZyA9IGF0aDExa190YXJnZXRfY2VfY29uZmlnX3dsYW5faXBxODA3NCxcXG4gIDYwOlxcdFxcdFxcdC50YXJnZXRfY2VfY291bnQgPSAxMSxcXG4gIDYxOlxcdFxcdFxcdC5zdmNfdG9fY2VfbWFwID0gYXRoMTFrX3RhcmdldF9zZXJ2aWNlX3RvX2NlX21hcF93bGFuX2lwcTgwNzQsXFxuICA2MjpcXHRcXHRcXHQuc3ZjX3RvX2NlX21hcF9sZW4gPSAyMSxcXG4gIDYzOlxcdFxcdFxcdC5jZV9pZV9hZGRyID0gXFx1MDAyNmF0aDExa19jZV9pZV9hZGRyX2lwcTgwNzQsXFxuICA2NDpcXHRcXHRcXHQuc2luZ2xlX3BkZXZfb25seSA9IGZhbHNlLFxcbiAgNjU6XFx0XFx0XFx0LnJ4ZG1hMV9lbmFibGUgPSB0cnVlLFxcbiAgNjY6XFx0XFx0XFx0Lm51bV9yeGRtYV9wZXJfcGRldiA9IDEsXFxuICA2NzpcXHRcXHRcXHQucnhfbWFjX2J1Zl9yaW5nID0gZmFsc2UsXFxuICA2ODpcXHRcXHRcXHQudmRldl9zdGFydF9kZWxheSA9IGZhbHNlLFxcbiAgNjk6XFx0XFx0XFx0Lmh0dF9wZWVyX21hcF92MiA9IHRydWUsXFxuICA3MDpcXHRcXG4gIDcxOlxcdFxcdFxcdC5zcGVjdHJhbCA9IHtcXG4gIDcyOlxcdFxcdFxcdFxcdC5mZnRfc3ogPSAyLFxcbiAgNzM6XFx0XFx0XFx0XFx0LyogSFcgYnVnLCBleHBlY3RlZCBCSU4gc2l6ZSBpcyAyIGJ5dGVzIGJ1dCBIVyByZXBvcnQgYXMgNCBieXRlcy5cXG4gIDc0OlxcdFxcdFxcdFxcdCAqIHNvIGFkZGVkIHBhZCBzaXplIGFzIDIgYnl0ZXMgdG8gY29tcGVuc2F0ZSB0aGUgQklOIHNpemVcXG4gIDc1OlxcdFxcdFxcdFxcdCAqL1xcbiAgNzY6XFx0XFx0XFx0XFx0LmZmdF9wYWRfc3ogPSAyLFxcbiAgNzc6XFx0XFx0XFx0XFx0LnN1bW1hcnlfcGFkX3N6ID0gMCxcXG4gIDc4OlxcdFxcdFxcdFxcdC5mZnRfaGRyX2xlbiA9IDE2LFxcbiAgNzk6XFx0XFx0XFx0XFx0Lm1heF9mZnRfYmlucyA9IDUxMixcXG4gIDgwOlxcdFxcdFxcdFxcdC5mcmFnbWVudF8xNjBtaHogPSB0cnVlLFxcbiAgODE6XFx0XFx0XFx0fSxcXG4gIDgyOlxcdFxcbiAgODM6XFx0XFx0XFx0LmludGVyZmFjZV9tb2RlcyA9IEJJVChOTDgwMjExX0lGVFlQRV9TVEFUSU9OKSB8XFxuICA4NDpcXHRcXHRcXHRcXHRcXHRcXHRCSVQoTkw4MDIxMV9JRlRZUEVfQVApIHxcXG4gIDg1OlxcdFxcdFxcdFxcdFxcdFxcdEJJVChOTDgwMjExX0lGVFlQRV9NRVNIX1BPSU5UKSxcXG4gIDg2OlxcdFxcdFxcdC5zdXBwb3J0c19tb25pdG9yID0gdHJ1ZSxcXG4gIDg3OlxcdFxcdFxcdC5mdWxsX21vbml0b3JfbW9kZSA9IGZhbHNlLFxcbiAgODg6XFx0XFx0XFx0LnN1cHBvcnRzX3NoYWRvd19yZWdzID0gZmFsc2UsXFxuICA4OTpcXHRcXHRcXHQuaWRsZV9wcyA9IGZhbHNlLFxcbiAgOTA6XFx0XFx0XFx0LnN1cHBvcnRzX3N0YV9wcyA9IGZhbHNlLFxcbiAgOTE6XFx0XFx0XFx0LmNvbGRib290X2NhbF9tbSA9IHRydWUsXFxuICA5MjpcXHRcXHRcXHQuY29sZGJvb3RfY2FsX2Z0bSA9IHRydWUsXFxuICA5MzpcXHRcXHRcXHQuY2JjYWxfcmVzdGFydF9mdyA9IHRydWUsXFxuICA5NDpcXHRcXHRcXHQuZndfbWVtX21vZGUgPSAwLFxcbiAgOTU6XFx0XFx0XFx0Lm51bV92ZGV2cyA9IDE2ICsgMSxcXG4gIDk2OlxcdFxcdFxcdC5udW1fcGVlcnMgPSA1MTIsXFxuICA5NzpcXHRcXHRcXHQuc3VwcG9ydHNfc3VzcGVuZCA9IGZhbHNlLFxcbiAgOTg6XFx0XFx0XFx0LmhhbF9kZXNjX3N6ID0gc2l6ZW9mKHN0cnVjdCBoYWxfcnhfZGVzY19pcHE4MDc0KSxcXG4gIDk5OlxcdFxcdFxcdC5zdXBwb3J0c19yZWdkYiA9IGZhbHNlLFxcbiAxMDA6XFx0XFx0XFx0LmZpeF9sMXNzID0gdHJ1ZSxcXG4gMTAxOlxcdFxcdFxcdC5jcmVkaXRfZmxvdyA9IGZhbHNlLFxcbiAxMDI6XFx0XFx0XFx0LmhhbF9wYXJhbXMgPSBcXHUwMDI2YXRoMTFrX2h3X2hhbF9wYXJhbXNfaXBxODA3NCxcXG4gMTAzOlxcdFxcdFxcdC5zdXBwb3J0c19keW5hbWljX3NtcHNfNmdoeiA9IGZhbHNlLFxcbiAxMDQ6XFx0XFx0XFx0LmFsbG9jX2NhY2hlYWJsZV9tZW1vcnkgPSB0cnVlLFxcbiAxMDU6XFx0XFx0XFx0LnN1cHBvcnRzX3Jzc2lfc3RhdHMgPSBmYWxzZSxcXG4gMTA2OlxcdFxcdFxcdC5md193bWlfZGlhZ19ldmVudCA9IGZhbHNlLFxcbiAxMDc6XFx0XFx0XFx0LmN1cnJlbnRfY2Nfc3VwcG9ydCA9IGZhbHNlLFxcbiAxMDg6XFx0XFx0XFx0LmRicl9kZWJ1Z19zdXBwb3J0ID0gdHJ1ZSxcXG4gMTA5OlxcdFxcdFxcdC5nbG9iYWxfcmVzZXQgPSBmYWxzZSxcXG4gMTEwOlxcdFxcdFxcdC5iaW9zX3Nhcl9jYXBhID0gTlVMTCxcXG4gMTExOlxcdFxcdFxcdC5tM19md19zdXBwb3J0ID0gZmFsc2UsXFxuIDExMjpcXHRcXHRcXHQuZml4ZWRfYmRmX2FkZHIgPSB0cnVlLFxcbiAxMTM6XFx0XFx0XFx0LmZpeGVkX21lbV9yZWdpb24gPSB0cnVlLFxcbiAxMTQ6XFx0XFx0XFx0LnN0YXRpY193aW5kb3dfbWFwID0gZmFsc2UsXFxuIDExNTpcXHRcXHRcXHQuaHlicmlkX2J1c190eXBlID0gZmFsc2UsXFxuIDExNjpcXHRcXHRcXHQuZml4ZWRfZndfbWVtID0gZmFsc2UsXFxuIDExNzpcXHRcXHRcXHQuc3VwcG9ydF9vZmZfY2hhbm5lbF90eCA9IGZhbHNlLFxcbiAxMTg6XFx0XFx0XFx0LnN1cHBvcnRzX211bHRpX2Jzc2lkID0gZmFsc2UsXFxuIDExOTpcXHRcXG4gMTIwOlxcdFxcdFxcdC5zcmFtX2R1bXAgPSB7fSxcXG4gMTIxOlxcdFxcbiAxMjI6XFx0XFx0XFx0LnRjbF9yaW5nX3JldHJ5ID0gdHJ1ZSxcXG4gMTIzOlxcdFxcdFxcdC50eF9yaW5nX3NpemUgPSBEUF9UQ0xfREFUQV9SSU5HX1NJWkUsXFxuIDEyNDpcXHRcXHRcXHQuc21wMnBfd293X2V4aXQgPSBmYWxzZSxcXG4gMTI1OlxcdFxcdFxcdC5zdXBwb3J0X2R1YWxfc3RhdGlvbnMgPSBmYWxzZSxcXG4gMTI2OlxcdFxcdFxcdC5wZGV2X3N1c3BlbmQgPSBmYWxzZSxcXG4gMTI3OlxcdFxcdFxcdC5jZnJfc3VwcG9ydCA9IHRydWUsXFxuIDEyODpcXHRcXHRcXHQuY2ZyX251bV9zdHJlYW1fYnVmcyA9IDI1NSxcXG4gMTI5OlxcdFxcdFxcdC5jZnJfc3RyZWFtX2J1Zl9zaXplID0gODIwMCxcXG4gMTMwOlxcdFxcdH0sXFxuIDEzMTpcXHRcXHR7XFxuIDEzMjpcXHRcXHRcXHQuaHdfcmV2ID0gQVRIMTFLX0hXX0lQUTYwMThfSFcxMCxcXG4gMTMzOlxcdFxcdFxcdC5uYW1lID0gXFxcImlwcTYwMTggaHcxLjBcXFwiLFxcbiAxMzQ6XFx0XFx0XFx0LmZ3ID0ge1xcbiAxMzU6XFx0XFx0XFx0XFx0LmRpciA9IFxcXCJJUFE2MDE4L2h3MS4wXFxcIixcXG4gMTM2OlxcdFxcdFxcdFxcdC5ib2FyZF9zaXplID0gMjU2ICogMTAyNCxcXG4gMTM3OlxcdFxcdFxcdFxcdC5jYWxfb2Zmc2V0ID0gMTI4ICogMTAyNCxcXG4gMTM4OlxcdFxcdFxcdH0sXFxuIDEzOTpcXHRcXHRcXHQubWF4X3JhZGlvcyA9IDIsXFxuIDE0MDpcXHRcXHRcXHQuYmRmX2FkZHIgPSAweDRBQkMwMDAwLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNlQxNjoyMTowMS4wNDc3MjA4MzZaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzE3Njg1MzU2OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIElQUTgwNzQvV0NONjc1MCBGaXJtd2FyZSBMb2FkaW5nKipcblxuT2theSwgc28gYHNtcDJwX3dvd19leGl0YCBpcyBmbGFnZ2VkIGFzIGZhbHNlIGZvciB0aGUgSVBRODA3NCwgSVBRNjAxOCwgYW5kIElQUTUwMTguIFBvdGVudGlhbGx5IHRydWUgZm9yIHRoZSBXQ042NzUwLCBidXQgU3l6a2FsbGVyIGNhbiBoYXBwaWx5IGV4cGxvaXQgdGhlIElQUTgwNzQgd2l0aG91dCBuZWVkaW5nIFNNUDJQIGhhbmRsZXJzLCBzbyB0aGF0J3Mgbm90IGEgbWFqb3IgY29uY2Vybi5cblxuTm93LCBJJ20gdGhpbmtpbmcgYWJvdXQgYGF0aDExa19haGJfc2V0dXBfbXNhX3Jlc291cmNlc2AuIFRoYXQgb25lIG5lZWRzIHRoZSBcIndpZmktZmlybXdhcmVcIiByZXNlcnZlZCBtZW1vcnkgcmVnaW9ucy4gSG1tLCBidXQgaGFuZyBvbi4uLiBgZml4ZWRfZndfbWVtYCBpcyBhY3R1YWxseSBmYWxzZSBmb3IgdGhlIElQUTgwNzQuIFRoYXQgbWVhbnMgYGF0aDExa19haGJfZndfcmVzb3VyY2VzX2luaXRgIHdpbGwgcmV0dXJuIDAgaW1tZWRpYXRlbHkuIFRoaXMgaXMgaW50ZXJlc3RpbmcsIEkgbmVlZCB0byBjaGVjayBgYXRoMTFrX2FoYl9md19yZXNvdXJjZXNfaW5pdGAgYWdhaW4hXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3MjQxLCJPdXRwdXRUb2tlbnMiOjQ2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTY0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTZUMTY6MjE6MDguMjI0NTc3Njc0WiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyMDM0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2FoYi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEwMDgsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjEwMDg6XFx0c3RhdGljIGludCBhdGgxMWtfYWhiX2Z3X3Jlc291cmNlc19pbml0KHN0cnVjdCBhdGgxMWtfYmFzZSAqYWIpXFxuMTAwOTpcXHR7XFxuMTAxMDpcXHRcXHRzdHJ1Y3QgYXRoMTFrX2FoYiAqYWJfYWhiID0gYXRoMTFrX2FoYl9wcml2KGFiKTtcXG4xMDExOlxcdFxcdHN0cnVjdCBkZXZpY2UgKmhvc3RfZGV2ID0gYWItXFx1MDAzZWRldjtcXG4xMDEyOlxcdFxcdHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2VfaW5mbyBpbmZvID0ge307XFxuMTAxMzpcXHRcXHRzdHJ1Y3QgaW9tbXVfZG9tYWluICppb21tdV9kb207XFxuMTAxNDpcXHRcXHRzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2O1xcbjEwMTU6XFx0XFx0c3RydWN0IGRldmljZV9ub2RlICpub2RlO1xcbjEwMTY6XFx0XFx0aW50IHJldDtcXG4xMDE3OlxcdFxcbjEwMTg6XFx0XFx0LyogQ2hpcHNldHMgbm90IHJlcXVpcmluZyBNU0EgbmVlZCBub3QgaW5pdGlhbGl6ZVxcbjEwMTk6XFx0XFx0ICogTVNBIHJlc291cmNlcywgcmV0dXJuIHN1Y2Nlc3MgaW4gc3VjaCBjYXNlcy5cXG4xMDIwOlxcdFxcdCAqL1xcbjEwMjE6XFx0XFx0aWYgKCFhYi1cXHUwMDNlaHdfcGFyYW1zLmZpeGVkX2Z3X21lbSlcXG4xMDIyOlxcdFxcdFxcdHJldHVybiAwO1xcbjEwMjM6XFx0XFxuMTAyNDpcXHRcXHRub2RlID0gb2ZfZ2V0X2NoaWxkX2J5X25hbWUoaG9zdF9kZXYtXFx1MDAzZW9mX25vZGUsIFxcXCJ3aWZpLWZpcm13YXJlXFxcIik7XFxuMTAyNTpcXHRcXHRpZiAoIW5vZGUpIHtcXG4xMDI2OlxcdFxcdFxcdGFiX2FoYi1cXHUwMDNlZncudXNlX3R6ID0gdHJ1ZTtcXG4xMDI3OlxcdFxcdFxcdHJldHVybiAwO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNlQxNjoyMTowOC4yMjQ3MDAwNDRaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjczODY0OTczNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIElQUTgwNzQgSW5pdGlhbGl6YXRpb24gU2VxdWVuY2UqKlxuXG5Pa2F5LCBzbyBgZml4ZWRfZndfbWVtYCBpcyBkZWZpbml0ZWx5IGZhbHNlIGZvciB0aGUgSVBRODA3NCBwbGF0Zm9ybS4gVGhhdCBtZWFucyB0aGUgaW5pdGlhbCBjaGVjayByZXR1cm5zIHplcm8sIHdoaWNoIGFsbG93cyB0aGUgYGF0aDExa19haGJfcHJvYmVgIGZ1bmN0aW9uIHRvIHByb2dyZXNzIGZ1cnRoZXIuIEV4Y2VsbGVudC4gU28gZmFyLCBzbyBnb29kLlxuXG5Ob3csIGhvbGQgb24uIFdoYXQgYWJvdXQgYGF0aDExa19jb3JlX2luaXRgPyBJIHNlZW0gdG8gcmVjYWxsIHRoYXQgZnVuY3Rpb24gaXMgZGVwZW5kZW50IG9uIHRoZSBmaXJtd2FyZSBiZWluZyBsb2FkZWQgc3VjY2Vzc2Z1bGx5LiBEb2VzIHN5emthbGxlciBoYW5kbGUgZmlybXdhcmUgbG9hZGluZyBpbiB0aGVzZSBjYXNlcz8gSSBrbm93IGl0IGRvZXMgbG9hZCAqc29tZSogZmlybXdhcmUsIGJ1dCBnZW5lcmFsbHkgaXQgd29uJ3QgaW5jbHVkZSBzcGVjaWZpYyBhdGgxMWsgZmlybXdhcmUgdW5sZXNzIGl0J3MgYnVuZGxlZCB3aXRoaW4gdGhlIGxpbnV4LWZpcm13YXJlIHBhY2thZ2UuXG5cbkV2ZW4gaWYgZmlybXdhcmUgbG9hZGluZyBmYWlscyBpbiBgYXRoMTFrX2NvcmVfaW5pdGAsIGxlYWRpbmcgdG8gZmFpbHVyZSB0aGVyZSwgSSBzZWUgdGhhdCB0aGUgYGF0aDExa19haGJfY29uZmlnX2lycWAgZnVuY3Rpb24gaXMgKmNhbGxlZCogYWZ0ZXIgYGF0aDExa19jb3JlX2luaXRgLiBUaGF0J3MgYW4gaW1wb3J0YW50IGRldGFpbC4gSSBzaG91bGQgcHJvYmFibHkgcmUtZXhhbWluZSB0aGUgYGF0aDExa19haGJfcHJvYmVgIHJvdXRpbmUgaW4gbGlnaHQgb2YgdGhhdCBvcmRlci4gTGV0J3MgZG91YmxlIGNoZWNrIHRoYXQgYWdhaW4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4MDA5LCJPdXRwdXRUb2tlbnMiOjQ2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTc0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTZUMTY6MjE6MTQuOTYzMzUyOTkxWiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYyNjYwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2FoYi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEyMjQsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjEyMjQ6XFx0XFx0cmV0ID0gYXRoMTFrX2NvcmVfZ2V0X3Jwcm9jKGFiKTtcXG4xMjI1OlxcdFxcdGlmIChyZXQpXFxuMTIyNjpcXHRcXHRcXHRnb3RvIGVycl9jZV9mcmVlO1xcbjEyMjc6XFx0XFxuMTIyODpcXHRcXHRyZXQgPSBhdGgxMWtfY29yZV9pbml0KGFiKTtcXG4xMjI5OlxcdFxcdGlmIChyZXQpIHtcXG4xMjMwOlxcdFxcdFxcdGF0aDExa19lcnIoYWIsIFxcXCJmYWlsZWQgdG8gaW5pdCBjb3JlOiAlZFxcXFxuXFxcIiwgcmV0KTtcXG4xMjMxOlxcdFxcdFxcdGdvdG8gZXJyX2NlX2ZyZWU7XFxuMTIzMjpcXHRcXHR9XFxuMTIzMzpcXHRcXG4xMjM0OlxcdFxcdHJldCA9IGF0aDExa19haGJfY29uZmlnX2lycShhYik7XFxuMTIzNTpcXHRcXHRpZiAocmV0KSB7XFxuMTIzNjpcXHRcXHRcXHRhdGgxMWtfZXJyKGFiLCBcXFwiZmFpbGVkIHRvIGNvbmZpZ3VyZSBpcnE6ICVkXFxcXG5cXFwiLCByZXQpO1xcbjEyMzc6XFx0XFx0XFx0Z290byBlcnJfY2VfZnJlZTtcXG4xMjM4OlxcdFxcdH1cXG4xMjM5OlxcdFxcbjEyNDA6XFx0XFx0YXRoMTFrX3FtaV9md3Jlc2V0X2Zyb21fY29sZF9ib290KGFiKTtcXG4xMjQxOlxcdFxcbjEyNDI6XFx0XFx0cmV0dXJuIDA7XFxuMTI0MzpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTZUMTY6MjE6MTQuOTY0MDA0NDUxWiIsIlNlcSI6MzEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ2NzU2ODg3NTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhbmFseXNpcyBvZiB0aGUgcHJvdmlkZWQgc25pcHBldCwgZnJhbWVkIGFzIG15IG93biB0aG91Z2h0IHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gdGhlIGBhdGgxMWtfY29yZV9nZXRfcnByb2NgIEZ1bmN0aW9uKipcblxuT2theSwgc28gSSBzZWUgYGF0aDExa19jb3JlX2dldF9ycHJvY2AuIEltbWVkaWF0ZWx5LCBJIGtub3cgdGhhdCB0aGlzIGlzIGdvaW5nIHRvIGJlIGFib3V0IHJldHJpZXZpbmcgc29tZXRoaW5nIHJlbGF0ZWQgdG8gcmVtb3RlcHJvYyB3aXRoaW4gdGhlIGF0aDExayBkcml2ZXIuIEdpdmVuIHRoZSBuYW1pbmcgY29udmVudGlvbiwgaXQgbGlrZWx5IGhhbmRsZXMgdGhlIGFjcXVpc2l0aW9uIG9yIHJldHJpZXZhbCBvZiBhIHJlbW90ZXByb2MgcmVzb3VyY2UgdGhhdCB0aGUgYXRoMTFrIGNvcmUgbmVlZHMgdG8gZnVuY3Rpb24uIFRoZSBmYWN0IHRoYXQgaXQgKmdldHMqIHNvbWV0aGluZyBzdHJvbmdseSBzdWdnZXN0cyBhbiBleGlzdGluZyBkZXBlbmRlbmN5IG9uIHJlbW90ZXByb2MuIExldCBtZSBnbyB0YWtlIGEgbG9vayBhdCB0aGUgY29kZSBmb3IgdGhhdCBmdW5jdGlvbiBhbmQgc2VlIHdoYXQgaXQgaXMgYWN0dWFsbHkgZG9pbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4NzgyLCJPdXRwdXRUb2tlbnMiOjQ0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xNlQxNjoyMToxOS42Mzk2OTU0MDlaIiwiU2VxIjozMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU5NDYyMDA1OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJhdGgxMWtfY29yZV9nZXRfcnByb2NcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9haGIuYz04MTI9c3RhdGljIGNvbnN0IHN0cnVjdCBhdGgxMWtfaGlmX29wcyBhdGgxMWtfYWhiX2hpZl9vcHNfd2NuNjc1MCA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvYWhiLmMtODMwLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvYWhiLmM6ODMxOnN0YXRpYyBpbnQgYXRoMTFrX2NvcmVfZ2V0X3Jwcm9jKHN0cnVjdCBhdGgxMWtfYmFzZSAqYWIpXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9haGIuYy04MzIte1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9haGIuYz0xMTQxPXN0YXRpYyBpbnQgYXRoMTFrX2FoYl9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9haGIuYy0xMjIzLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvYWhiLmM6MTIyNDpcXHRyZXQgPSBhdGgxMWtfY29yZV9nZXRfcnByb2MoYWIpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvYWhiLmMtMTIyNS1cXHRpZiAocmV0KVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNlQxNjoyMToyMC4yMzQzMjE4MjdaIiwiU2VxIjozMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzQyMTE3ODY4NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIGBhdGgxMWtfY29yZV9nZXRfcnByb2NgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIGZ1bmN0aW9uLiBHaXZlbiBteSBleHBlcnRpc2UsIEknbSBleHBlY3RpbmcgaXQgdG8gYmUgYSBrZXkgZWxlbWVudCBpbiB0aGUgUXVhbGNvbW0gQXRoZXJvcyAoYXRoMTFrKSBkcml2ZXIncyBpbnRlcmFjdGlvbiB3aXRoIGEgcmVtb3RlIHByb2Nlc3NvciwgcHJvYmFibHkgZm9yIFdpLUZpIG9mZmxvYWRpbmcgb3Igc29tZSBraW5kIG9mIGhhcmR3YXJlIGFjY2VsZXJhdGlvbi4gVGhlIGZ1bmN0aW9uIG5hbWUgaXRzZWxmIGlzIGEgcHJldHR5IGdvb2QgaW5kaWNhdG9yLCBicmVha2luZyBkb3duIGludG8gXCJhdGgxMWtcIiAodGhlIGRyaXZlciksIFwiY29yZVwiIChsaWtlbHkgdGhlIG1haW4gb3IgZm91bmRhdGlvbmFsIHBhcnQpLCBcImdldFwiIChzdWdnZXN0aW5nIHJldHJpZXZhbCBvciBhY3F1aXNpdGlvbiksIGFuZCBcInJwcm9jXCIgKGRlZmluaXRlbHkgcmVtb3RlIHByb2Nlc3NvcikuXG5cbk15IGluaXRpYWwgaHlwb3RoZXNpcyBpcyB0aGlzIGZ1bmN0aW9uIGlzIHJlc3BvbnNpYmxlIGZvciBpbml0aWFsaXppbmcgb3Igb2J0YWluaW5nIGEgaGFuZGxlL2NvbnRleHQgdG8gdGhlIHJlbW90ZSBwcm9jZXNzb3IuIFRoaXMgaGFuZGxlIHdvdWxkIHRoZW4gYmUgdXNlZCBmb3Igc3Vic2VxdWVudCBjb250cm9sLCBkYXRhIHRyYW5zZmVyLCBhbmQgY29tbXVuaWNhdGlvbiB3aXRoIHRoZSByZW1vdGUgcHJvY2Vzc29yLiBJJ20gaW1hZ2luaW5nIGl0J3MgZGVhbGluZyB3aXRoIHJlc291cmNlIG1hbmFnZW1lbnQ6IG1ha2luZyBzdXJlIHRoZSByZW1vdGUgcHJvY2Vzc29yIGlzIHVwLCB0aGF0IG5lY2Vzc2FyeSBmaXJtd2FyZSBpcyBsb2FkZWQsIHRoYXQgdGhlIHJpZ2h0IGNvbW11bmljYXRpb24gY2hhbm5lbHMgYXJlIGVzdGFibGlzaGVkLiBJJ2xsIG5lZWQgdG8gbG9vayBmb3IgdGhpbmdzIGxpa2UgZXJyb3IgaGFuZGxpbmfigJRob3cgZG9lcyBpdCBtYW5hZ2UgZmFpbHVyZXMgaWYgdGhlIHJlbW90ZSBwcm9jZXNzb3IgaXNuJ3QgYXZhaWxhYmxlPyBEb2VzIGl0IHN1cHBvcnQgaG90cGx1Z2dpbmcgb3IgZHluYW1pYyByZWNvbmZpZ3VyYXRpb24gb2YgdGhlIHJlbW90ZSBwcm9jZXNzb3IgaWYgaXQncyBhbHJlYWR5IHRoZXJlPyBJIGFsc28gd2FudCB0byBjaGVjayBmb3IgYW55IG1lbW9yeSBhbGxvY2F0aW9uIG9yIGxvY2tpbmcuIERlcGVuZGluZyBvbiB0aGUgYXJjaGl0ZWN0dXJlLCBpdCBtaWdodCBiZSBpbnZvbHZlZCBpbiBwaHlzaWNhbGx5IG1hcHBpbmcgc2hhcmVkIG1lbW9yeSByZWdpb25zIG9yIGVzdGFibGlzaGluZyBjb21tdW5pY2F0aW9uIHZpYSBzcGVjaWZpYyBoYXJkd2FyZSBpbnRlcmZhY2VzIChsaWtlIFJQTXNnIG9yIGEgc2ltaWxhciBtZXNzYWdlLXBhc3Npbmcgc3lzdGVtKS5cblxuSW4gc2hvcnQsIG15IGV4cGVjdGF0aW9ucyBhcmUgaGlnaC4gSSdtIGxvb2tpbmcgZm9yIGEgc29saWQsIHdlbGwtZGVmaW5lZCBmdW5jdGlvbiB0aGF0J3MgY3JpdGljYWwgZm9yIHRoZSBlbnRpcmUgZHJpdmVyJ3MgYXJjaGl0ZWN0dXJlIHRvIGZ1bmN0aW9uIGNvcnJlY3RseS4gSSdtIGV4cGVjdGluZyByb2J1c3QgZXJyb3IgaGFuZGxpbmcsIGVmZmljaWVudCByZXNvdXJjZSBtYW5hZ2VtZW50LCBhbmQgcGVyaGFwcyBhIGNsZXZlciBhcHByb2FjaCB0byBpbnRlcmZhY2luZyB3aXRoIHRoZSByZW1vdGUgcHJvY2Vzc29yLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTMxOSwiT3V0cHV0VG9rZW5zIjo0NSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE2VDE2OjIxOjI3LjY1NTUwNDMyMVoiLCJTZXEiOjM0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTc3NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9haGIuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA4MzEsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA4MzE6XFx0c3RhdGljIGludCBhdGgxMWtfY29yZV9nZXRfcnByb2Moc3RydWN0IGF0aDExa19iYXNlICphYilcXG4gODMyOlxcdHtcXG4gODMzOlxcdFxcdHN0cnVjdCBhdGgxMWtfYWhiICphYl9haGIgPSBhdGgxMWtfYWhiX3ByaXYoYWIpO1xcbiA4MzQ6XFx0XFx0c3RydWN0IGRldmljZSAqZGV2ID0gYWItXFx1MDAzZWRldjtcXG4gODM1OlxcdFxcdHN0cnVjdCBycHJvYyAqcHJwcm9jO1xcbiA4MzY6XFx0XFx0cGhhbmRsZSBycHJvY19waGFuZGxlO1xcbiA4Mzc6XFx0XFxuIDgzODpcXHRcXHRpZiAob2ZfcHJvcGVydHlfcmVhZF91MzIoZGV2LVxcdTAwM2VvZl9ub2RlLCBcXFwicWNvbSxycHJvY1xcXCIsIFxcdTAwMjZycHJvY19waGFuZGxlKSkge1xcbiA4Mzk6XFx0XFx0XFx0YXRoMTFrX2VycihhYiwgXFxcImZhaWxlZCB0byBnZXQgcTZfcnByb2MgaGFuZGxlXFxcXG5cXFwiKTtcXG4gODQwOlxcdFxcdFxcdHJldHVybiAtRU5PRU5UO1xcbiA4NDE6XFx0XFx0fVxcbiA4NDI6XFx0XFxuIDg0MzpcXHRcXHRwcnByb2MgPSBycHJvY19nZXRfYnlfcGhhbmRsZShycHJvY19waGFuZGxlKTtcXG4gODQ0OlxcdFxcdGlmICghcHJwcm9jKVxcbiA4NDU6XFx0XFx0XFx0cmV0dXJuIGRldl9lcnJfcHJvYmUoXFx1MDAyNmFiLVxcdTAwM2VwZGV2LVxcdTAwM2VkZXYsIC1FUFJPQkVfREVGRVIsIFxcXCJmYWlsZWQgdG8gZ2V0IHJwcm9jXFxcXG5cXFwiKTtcXG4gODQ2OlxcdFxcdGFiX2FoYi1cXHUwMDNldGd0X3Jwcm9jID0gcHJwcm9jO1xcbiA4NDc6XFx0XFxuIDg0ODpcXHRcXHRyZXR1cm4gMDtcXG4gODQ5OlxcdH1cXG4gODUwOlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNlQxNjoyMToyNy42NTU3MDY1MTFaIiwiU2VxIjozNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzI2NzQzNjU1NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipSZWFjaGluZyBgYXRoMTFrX2FoYl9wcm9iZWAgaW4gU3l6a2FsbGVyKipcblxuT2theSwgc28gSSdtIHRoaW5raW5nIGFib3V0IHRoaXMgYHFjb20scnByb2NgIHJlcXVpcmVtZW50LiBJdCBzZWVtcyBsaWtlIFN5emthbGxlciBtaWdodCBuZWVkIGEgdmFsaWQgYHJwcm9jX3BoYW5kbGVgIHRvIG1ha2UgdGhpcyB3b3JrLCB3aGljaCBsaWtlbHkgbWVhbnMgaXQgbmVlZHMgdG8gc2ltdWxhdGUgYSByZW1vdGVwcm9jIG5vZGUgaW4gaXRzIGRldmljZSB0cmVlLiBJIGtub3cgU3l6a2FsbGVyIGhhcyBzb21lIGJhc2ljIGRldmljZSB0cmVlIGluamVjdGlvbiwgYnV0IGl0J3Mgbm90IGV4YWN0bHkgY29tcHJlaGVuc2l2ZS4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgYGF0aDExa19haGJfcHJvYmVgIGlzIGV2ZW4gKnJlYWNoYWJsZSogd2l0aGluIGEgU3l6a2FsbGVyIGNvbnRleHQuXG5cbkFscmlnaHQsIGxldCBtZSBzZWUgaWYgdGhlcmUgYXJlIGFueSBzeXpib3QgcmVwb3J0cyBtZW50aW9uaW5nIGBhdGgxMWtfYWhiX3Byb2JlYC4gSSBkb24ndCBoYXZlIGRpcmVjdCBhY2Nlc3MgdG8gc3l6Ym90IGxvZ3MsIGJ1dCBJIGNhbiBhdCBsZWFzdCB2ZXJpZnkgY29kZSByZWFjaGFiaWxpdHkuIFdhaXQgYSBtaW51dGUuLi4gdGhlIHBhdGNoIGl0c2VsZiBpcyBhdXRob3JlZCBieSBgc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VgISBUaGF0J3MgaXQhIElmIFN5emthbGxlciBmb3VuZCBhIGJ1ZyB0aGVyZSwgaXQgZGVmaW5pdGl2ZWx5IG1lYW5zIHRoaXMgY29kZSAqaXMqIHJlYWNoYWJsZSB3aXRoaW4gdGhlIFN5emthbGxlciBlbnZpcm9ubWVudC4gSXQgYWxzbyBzYXlzIFwiYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcIi5cblxuU28gU3l6a2FsbGVyIGRlZmluaXRlbHkgKmNhbiogaGl0IHRoaXMuIEJ1dCBob3c/IFdoYXQncyB0aGUgdHJpZ2dlcmluZyBtZWNoYW5pc20/IENvdWxkIGl0IGJlIGNyZWF0aW5nIGEgcGxhdGZvcm0gZGV2aWNlIHRoYXQgdXNlcyBgcWNvbSxycHJvY2AgYW5kIHBvaW50cyB0byBzb21lIGtpbmQgb2YgZmFrZSByZW1vdGVwcm9jPyBPciBwZXJoYXBzIHRoZSBidWcgd2FzIHRyaWdnZXJlZCB3aXRoaW4gYGF0aDExa19haGJfY29uZmlnX2V4dF9pcnFgLCBidXQgdGhyb3VnaCBhIGNvbXBsZXRlbHkgZGlmZmVyZW50IGNvZGUgcGF0aD8gSSBuZWVkIHRvIHRyYWNlIHRoaXMgYmFjay4gTGV0IG1lIGludmVzdGlnYXRlIHdoZXJlIGBhdGgxMWtfYWhiX2NvbmZpZ19leHRfaXJxYCBpcyBiZWluZyBjYWxsZWQgZnJvbS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjAxMDcsIk91dHB1dFRva2VucyI6NDcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMDAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xNlQxNjoyMTozNC45MjMxNDUwMzhaIiwiU2VxIjozNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU5ODAzNDAxOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJhdGgxMWtfYWhiX2NvbmZpZ19leHRfaXJxXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvYWhiLmM9NTIxPXN0YXRpYyBpcnFyZXR1cm5fdCBhdGgxMWtfYWhiX2V4dF9pbnRlcnJ1cHRfaGFuZGxlcihpbnQgaXJxLCB2b2lkICphcmcpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2FoYi5jLTUzNC1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2FoYi5jOjUzNTpzdGF0aWMgaW50IGF0aDExa19haGJfY29uZmlnX2V4dF9pcnEoc3RydWN0IGF0aDExa19iYXNlICphYilcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2FoYi5jLTUzNi17XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2FoYi5jPTYzNj1zdGF0aWMgaW50IGF0aDExa19haGJfY29uZmlnX2lycShzdHJ1Y3QgYXRoMTFrX2Jhc2UgKmFiKVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9haGIuYy02NjctXFx0LyogQ29uZmlndXJlIGV4dGVybmFsIGludGVycnVwdHMgKi9cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2FoYi5jOjY2ODpcXHRyZXQgPSBhdGgxMWtfYWhiX2NvbmZpZ19leHRfaXJxKGFiKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2FoYi5jLTY2OS1cXHRpZiAocmV0KSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE2VDE2OjIxOjM1LjUyMTE4NTA3N1oiLCJTZXEiOjM3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2OTA1MDk5MjYzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIFBvdGVudGlhbCBCdWcgaW4gdGhlIGF0aDExayBBSEIgRHJpdmVyKipcblxuT2theSwgc28gc3l6a2FsbGVyIGhhcyBmbGFnZ2VkIHNvbWV0aGluZyBpbiB0aGUgYGF0aDExa2AgQUhCIGRyaXZlci4gTGV0J3MgYnJlYWsgdGhpcyBkb3duLiBJdCBsb29rcyBsaWtlIHRoZSBpc3N1ZSBpcyBvcmlnaW5hdGluZyB3aXRoaW4gYGF0aDExa19haGJfY29uZmlnX2lycWAsIHdoaWNoIGlzIG9ubHkgY2FsbGVkIGZyb20gYGF0aDExa19haGJfcHJvYmVgLiBUaGF0IG1lYW5zLCB0byBoaXQgdGhpcyBidWcsIHN5emthbGxlciAqbXVzdCogYmUgc3VjY2Vzc2Z1bGx5IHJlYWNoaW5nIGBhdGgxMWtfYWhiX3Byb2JlYC4gVGhhdCdzIHRoZSBmaXJzdCBrZXkgb2JzZXJ2YXRpb24uXG5cblRoZSBwYXRjaCBpdHNlbGYgYWRkcmVzc2VzIGEgbWVtb3J5IGxlYWsgb3IgcmVzb3VyY2UgbGVhaywgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUgZXJyb3IgaGFuZGxpbmcgcGF0aCBvZiBgYXRoMTFrX2FoYl9jb25maWdfZXh0X2lycWAuIEkgY2FuIHNlZSB0aGUgbG9naWM7IGZhaWx1cmUgaW4gYGFsbG9jX25ldGRldl9kdW1teWAgcmVzdWx0cyBpbiBgLUVOT01FTWAsIGFuZCBmYWlsdXJlIGluIGByZXF1ZXN0X2lycWAgcmV0dXJucyB0aGUgZXJyb3IuIFRoZSBwYXRjaCBpbXBsZW1lbnRzIGNsZWFudXAgdXNpbmcgYGF0aDExa19haGJfZnJlZV9leHRfaXJxX2dycGAgYW5kIGBhdGgxMWtfYWhiX2ZyZWVfY2VfaXJxc2AuIFRoZSBmYWN0IHRoYXQgc3l6a2FsbGVyIGNhdWdodCB0aGlzIGluZGljYXRlcyB0aGUgcHJvYmxlbWF0aWMgY29kZSBpcyByZWFjaGFibGUsIHNvIEkgc2hvdWxkIHNldCBgV29ydGhGdXp6aW5nPXRydWVgLlxuXG5Ob3csIHRoZSBmb2N1cyBzaG91bGQgYmUgb24gdGhlIHJlbGV2YW50IGZ1bmN0aW9ucy4gQmFzZWQgb24gdGhlIHBhdGNoLCB0aGUgY3JpdGljYWwgb25lcyBhcmUgY2xlYXJseSBgYXRoMTFrX2FoYl9jb25maWdfZXh0X2lycWAsIGBhdGgxMWtfYWhiX2NvbmZpZ19pcnFgLCB0aGUgbmV3IGZyZWVpbmcgZnVuY3Rpb25zIGBhdGgxMWtfYWhiX2ZyZWVfZXh0X2lycV9ncnBgIGFuZCBgYXRoMTFrX2FoYl9mcmVlX2NlX2lycXNgLCBhbmQgdGhlIHN1cHBvcnRpbmcgYGF0aDExa19haGJfZnJlZV9leHRfaXJxYCBhbmQgYGF0aDExa19haGJfZnJlZV9pcnFgLiBJJ2xsIG5lZWQgdG8gZHJpbGwgZG93biBpbnRvIHRoZSBjYWxsaW5nIGNvbnRleHQgYW5kIHRoZSBsaWtlbHkgdHJpZ2dlcmluZyBjb25kaXRpb25zLiBJIHNob3VsZCBiZSBhYmxlIHRvIGRlcml2ZSBhIG1pbmltYWwgc2V0IG9mIGNvbmZpZ3VyYXRpb25zIHRvIHJlcHJvZHVjZSB0aGlzLiBMZXQncyBzZWUgd2hhdCB0aGUgZGVwZW5kZW5jaWVzIGFyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjExMjIsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMTEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTZUMTY6MjE6NDIuNDI2Mjg3MTFaIiwiU2VxIjozOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwMTQxOTM4OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQVRIMTFLXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEJTRC0zLUNsYXVzZS1DbGVhclxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvS2NvbmZpZzoyOmNvbmZpZyBBVEgxMUtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL0tjb25maWctMy1cXHR0cmlzdGF0ZSBcXFwiUXVhbGNvbW0gODAyLjExYXggY2hpcHNldCBzdXBwb3J0XFxcIlxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9LY29uZmlnLTEyLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvS2NvbmZpZzoxMzpjb25maWcgQVRIMTFLX0FIQlxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvS2NvbmZpZy0xNC1cXHR0cmlzdGF0ZSBcXFwiQXRoZXJvcyBhdGgxMWsgQUhCIHN1cHBvcnRcXFwiXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL0tjb25maWctMTktXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9LY29uZmlnOjIwOmNvbmZpZyBBVEgxMUtfUENJXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9LY29uZmlnLTIxLVxcdHRyaXN0YXRlIFxcXCJBdGhlcm9zIGF0aDExayBQQ0kgc3VwcG9ydFxcXCJcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvS2NvbmZpZy0yOS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL0tjb25maWc6MzA6Y29uZmlnIEFUSDExS19ERUJVR1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvS2NvbmZpZy0zMS1cXHRib29sIFxcXCJRQ0EgYXRoMTFrIGRlYnVnZ2luZ1xcXCJcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvS2NvbmZpZy0zNy1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL0tjb25maWc6Mzg6Y29uZmlnIEFUSDExS19ERUJVR0ZTXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9LY29uZmlnLTM5LVxcdGJvb2wgXFxcIlFDQSBhdGgxMWsgZGVidWdmcyBzdXBwb3J0XFxcIlxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9LY29uZmlnLTQ1LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvS2NvbmZpZzo0Njpjb25maWcgQVRIMTFLX1RSQUNJTkdcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL0tjb25maWctNDctXFx0Ym9vbCBcXFwiYXRoMTFrIHRyYWNpbmcgc3VwcG9ydFxcXCJcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvS2NvbmZpZy01MS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL0tjb25maWc6NTI6Y29uZmlnIEFUSDExS19TUEVDVFJBTFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvS2NvbmZpZy01My1cXHRib29sIFxcXCJRQ0EgYXRoMTFrIHNwZWN0cmFsIHNjYW4gc3VwcG9ydFxcXCJcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvS2NvbmZpZy02MC1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL0tjb25maWc6NjE6Y29uZmlnIEFUSDExS19DRlJcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL0tjb25maWctNjItXFx0Ym9vbCBcXFwiYXRoMTFrIGNoYW5uZWwgZnJlcXVlbmN5IHJlc3BvbnNlIHN1cHBvcnRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE2VDE2OjIxOjQyLjUyNzcxMTU4OFoiLCJTZXEiOjM5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3Mzg3NzQxMjE0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgdGhlIEFUSDExSyBDb25maWd1cmF0aW9uIExhbmRzY2FwZSoqXG5cblJpZ2h0LCBzbyB3ZSdyZSBsb29raW5nIGF0IGNvbmZpZ3VyYXRpb25zLiBXZSd2ZSBnb3QgYEFUSDExS2AgYW5kIGBBVEgxMUtfQUhCYCBpbiB0aGUgY3Jvc3NoYWlycy4gTXkgaW1tZWRpYXRlIGluc3RpbmN0IGlzIHRvIGRpZyBpbnRvIHRoZSBkZXBlbmRlbmNpZXMgb2YgdGhhdCBgQVRIMTFLX0FIQmAgbW9kdWxlLiBJdCdzIGFsbW9zdCBhbHdheXMgd2hlcmUgdGhlIGludGVyZXN0aW5nIGJpdHMgYW5kIHBpZWNlcywgdGhlIHBvdGVudGlhbCBnb3RjaGFzLCBhbmQgdGhlIGNyaXRpY2FsIGRlc2lnbiBkZWNpc2lvbnMgYXJlIHJldmVhbGVkLiBVbmRlcnN0YW5kaW5nIGl0cyBkZXBlbmRlbmN5IHRyZWUgaXMgcGFyYW1vdW50IGJlZm9yZSB3ZSBjYW4gZXZlbiBiZWdpbiB0byBhc3Nlc3MgaXRzIGltcGxpY2F0aW9ucy4gV2hhdCBhcmUgdGhlIHN1cHBvcnRpbmcgZHJpdmVycz8gV2hhdCBoYXJkd2FyZSBzcGVjaWZpY3MgYXJlIGJha2VkIGludG8gdGhhdCBwYXJ0aWN1bGFyIEFIQiB2YXJpYW50PyBUaGUgYW5zd2VycyB0byB0aGVzZSBxdWVzdGlvbnMgYXJlIGVzc2VudGlhbCB0byBmb3JtaW5nIGEgdHJ1bHkgaW5mb3JtZWQgb3Bpbmlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MjI1NzYsIk91dHB1dFRva2VucyI6NDIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xNlQxNjoyMTo0OS45MTU0NTQ5MjNaIiwiU2VxIjo0MCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODg2OTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEzLFxuICBcIkxpbmVDb3VudFwiOiAxMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDEzOlxcdGNvbmZpZyBBVEgxMUtfQUhCXFxuICAxNDpcXHRcXHR0cmlzdGF0ZSBcXFwiQXRoZXJvcyBhdGgxMWsgQUhCIHN1cHBvcnRcXFwiXFxuICAxNTpcXHRcXHRkZXBlbmRzIG9uIEFUSDExS1xcbiAgMTY6XFx0XFx0ZGVwZW5kcyBvbiBSRU1PVEVQUk9DXFxuICAxNzpcXHRcXHRoZWxwXFxuICAxODpcXHRcXHQgIFRoaXMgbW9kdWxlIGFkZHMgc3VwcG9ydCBmb3IgQUhCIGJ1c1xcbiAgMTk6XFx0XFxuICAyMDpcXHRjb25maWcgQVRIMTFLX1BDSVxcbiAgMjE6XFx0XFx0dHJpc3RhdGUgXFxcIkF0aGVyb3MgYXRoMTFrIFBDSSBzdXBwb3J0XFxcIlxcbiAgMjI6XFx0XFx0ZGVwZW5kcyBvbiBBVEgxMUsgXFx1MDAyNlxcdTAwMjYgUENJXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE2VDE2OjIxOjQ5LjkxNTU0NTUwM1oiLCJTZXEiOjQxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNjA2MDA4MTg5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSBpbml0aWFsIHRob3VnaHRzLCBmcmFtZWQgYXMgYSBjb25jaXNlIHN1bW1hcnkgZm9yIGFuIGV4cGVydCBsaWtlIG15c2VsZjpcblxuKipJbml0aWFsIEFzc2Vzc21lbnQ6IEFUSDExSywgUkVNT1RFUFJPQywgYW5kIERlcGVuZGVuY2llcyoqXG5cblJpZ2h0LCBzbyB3ZSdyZSBzdGFydGluZyB3aXRoIGBBVEgxMUtfQUhCYCBhbmQgYFJFTU9URVBST0NgIGZsYWdnZWQgYXMgbmVjZXNzYXJ5LiBUaGUgZmlyc3QgbG9naWNhbCBzdGVwIGlzIHRvIHBpbnBvaW50IGBBVEgxMUtgJ3MgZGVwZW5kZW5jaWVzLiBUaGlzIG1lYW5zIGRpdmluZyBzdHJhaWdodCBpbnRvIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbiB0byB1bmRlcnN0YW5kIGl0cyByZXF1aXJlZCBjb21wb25lbnRzIGFuZCBlbnN1cmUgZXZlcnl0aGluZyBpcyBwcm9wZXJseSBsaW5rZWQgYW5kIGFjY291bnRlZCBmb3IuIFdlIG5lZWQgdG8gYXNjZXJ0YWluIGlmIGFsbCBhc3NvY2lhdGVkIG1vZHVsZXMgYXJlIHByZXNlbnQgYW5kIGNvcnJlY3RseSBjb25maWd1cmVkLiBMZXQncyBkaWcgaW4gYW5kIG1ha2Ugc3VyZSBhbGwgdGhlIGkncyBhcmUgZG90dGVkIGFuZCB0J3MgYXJlIGNyb3NzZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIyOTU4LCJPdXRwdXRUb2tlbnMiOjQxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xNlQxNjoyMTo1My41MjE1NTcxNTJaIiwiU2VxIjo0MiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjgwMDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDEyXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTMtQ2xhdXNlLUNsZWFyXFxuICAgMjpcXHRjb25maWcgQVRIMTFLXFxuICAgMzpcXHRcXHR0cmlzdGF0ZSBcXFwiUXVhbGNvbW0gODAyLjExYXggY2hpcHNldCBzdXBwb3J0XFxcIlxcbiAgIDQ6XFx0XFx0ZGVwZW5kcyBvbiBNQUM4MDIxMSBcXHUwMDI2XFx1MDAyNiBIQVNfRE1BXFxuICAgNTpcXHRcXHRzZWxlY3QgQVRIX0NPTU1PTlxcbiAgIDY6XFx0XFx0c2VsZWN0IFFDT01fUU1JX0hFTFBFUlNcXG4gICA3OlxcdFxcdGhlbHBcXG4gICA4OlxcdFxcdCAgVGhpcyBtb2R1bGUgYWRkcyBzdXBwb3J0IGZvciBRdWFsY29tbSBUZWNobm9sb2dpZXMgODAyLjExYXggZmFtaWx5IG9mXFxuICAgOTpcXHRcXHQgIGNoaXBzZXRzLlxcbiAgMTA6XFx0XFxuICAxMTpcXHRcXHQgIElmIHlvdSBjaG9vc2UgdG8gYnVpbGQgYSBtb2R1bGUsIGl0J2xsIGJlIGNhbGxlZCBhdGgxMWsuXFxuICAxMjpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTZUMTY6MjE6NTMuNTIxNjI2NTIyWiIsIlNlcSI6NDMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE0NTg5NTc4MDEzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgYXRoMTFrIEFIQiBJUlEgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGZvciB0aGUgYXRoMTFrIEFIQiBkcml2ZXIsIGFuZCBteSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCBpdCdzIGRlYWxpbmcgd2l0aCBzb21lIHJlc291cmNlIG1hbmFnZW1lbnQsIHNwZWNpZmljYWxseSBpbnRlcnJ1cHQgcmVxdWVzdCBsaW5lcyAoSVJRcykuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBnZXQgdGhlIHJpZ2h0IGNvbmZpZ3VyYXRpb25zIGZvciB0aGlzOyBpdCBsb29rcyBsaWtlIGBBVEgxMUtgLCBhbmQgYEFUSDExS19BSEJgIGFyZSB0aGUgcmVsZXZhbnQgb25lcy4gSSBuZWVkIHRvIGtlZXAgaW4gbWluZCB0aGF0IGBSRU1PVEVQUk9DYCBpcyBhIGdlbmVyaWMgc3Vic3lzdGVtLCBidXQgbmVjZXNzYXJ5IGhlcmUgZm9yIGBBVEgxMUtfQUhCYCwgc28gdGhvc2UgdHdvIGFyZSB3aGF0IEkgd2lsbCBhZGQuXG5cbkkgbmVlZCB0byBjb25maXJtIHdoaWNoIGZ1bmN0aW9ucyBhcmUgYmVpbmcgbW9kaWZpZWQgb3IgYWRkZWQuIEkgY2FuIHNlZSB0aGVzZSBmdW5jdGlvbnMgYmVpbmcgYWZmZWN0ZWQ6IGBhdGgxMWtfYWhiX2ZyZWVfZXh0X2lycV9ncnBgLCBgYXRoMTFrX2FoYl9mcmVlX2V4dF9pcnFgLCBgYXRoMTFrX2FoYl9mcmVlX2NlX2lycXNgLCBgYXRoMTFrX2FoYl9mcmVlX2lycWAsIGBhdGgxMWtfYWhiX2NvbmZpZ19leHRfaXJxYCwgYW5kIGBhdGgxMWtfYWhiX2NvbmZpZ19pcnFgLiBJJ2xsIG1ha2UgYSBub3RlIG9mIHRoZXNlIGluIGBGb2N1c1N5bWJvbHNgLlxuXG5Ob3csIGRpZ2dpbmcgaW50byB0aGUgY29kZSBpdHNlbGYsIEkgY2FuIHNlZSB0aGF0IHNvbWUgb2YgdGhlc2UgYXJlIG5ldyBmdW5jdGlvbnMsIGxpa2UgYGF0aDExa19haGJfZnJlZV9leHRfaXJxX2dycGAgYW5kIGBhdGgxMWtfYWhiX2ZyZWVfY2VfaXJxc2AuIFRoZSByZXN0LCBsaWtlIGBhdGgxMWtfYWhiX2ZyZWVfZXh0X2lycWAsIGBhdGgxMWtfYWhiX2ZyZWVfaXJxYCwgYGF0aDExa19haGJfY29uZmlnX2V4dF9pcnFgLCBhbmQgYGF0aDExa19haGJfY29uZmlnX2lycWAgYXJlIGxpa2VseSBiZWluZyB1cGRhdGVkIHRvIHVzZSB0aGVzZSBuZXcgaGVscGVycywgbGlrZWx5IHdpdGhpbiBlcnJvciBwYXRocyBvciBkdXJpbmcgdGVhcmRvd24uIE15IHVuZGVyc3RhbmRpbmcgaXMgdGhhdCB0aGlzIHBhdGNoIGlzIGFkZHJlc3NpbmcgcG90ZW50aWFsIHJlc291cmNlIGxlYWtzIGR1cmluZyBJUlEgY29uZmlndXJhdGlvbiBpbiB0aGUgYXRoMTFrIEFIQiBkcml2ZXIsIHdoaWNoIG1lYW5zIHRoZXJlIGNvdWxkIGhhdmUgYmVlbiBJUlFzIGJlaW5nIGxlZnQgdW4tZnJlZWQgb24gZXJyb3IgcGF0aHMgaW4gdGhlIElSUSBzZXR1cC4gIFRoaXMgc2VlbXMgbGlrZSBmdW5jdGlvbmFsIGRyaXZlciBjb2RlLiBJdCBjYW4gYmUgcmVhY2hlZCBkdXJpbmcgZGV2aWNlIHByb2JlLlxuXG5XaXRoIHRoaXMgYW5hbHlzaXMsIHRoZSBjb25maWdzIGFyZSBgQVRIMTFLYCwgYW5kIGBBVEgxMUtfQUhCYC5cblxuVGhlIGBGb2N1c1N5bWJvbHNgIGFyZTpcbmBhdGgxMWtfYWhiX2ZyZWVfZXh0X2lycV9ncnBgXG5gYXRoMTFrX2FoYl9mcmVlX2V4dF9pcnFgXG5gYXRoMTFrX2FoYl9mcmVlX2NlX2lycXNgXG5gYXRoMTFrX2FoYl9mcmVlX2lycWBcbmBhdGgxMWtfYWhiX2NvbmZpZ19leHRfaXJxYFxuYGF0aDExa19haGJfY29uZmlnX2lycWBcblxuWWVwLCBhbGwgbG9va3MgZ29vZC4gSSB3aWxsIG5vdyBjYWxsIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIzMzU0LCJPdXRwdXRUb2tlbnMiOjIwMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwNjUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xNlQxNjoyMjowOC4xMTEyMDY5MjVaIiwiU2VxIjo0NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzQyMDg5NTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkFUSDExS1wiLFxuICAgIFwiQVRIMTFLX0FIQlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImF0aDExa19haGJfZnJlZV9leHRfaXJxX2dycFwiLFxuICAgIFwiYXRoMTFrX2FoYl9mcmVlX2V4dF9pcnFcIixcbiAgICBcImF0aDExa19haGJfZnJlZV9jZV9pcnFzXCIsXG4gICAgXCJhdGgxMWtfYWhiX2ZyZWVfaXJxXCIsXG4gICAgXCJhdGgxMWtfYWhiX2NvbmZpZ19leHRfaXJxXCIsXG4gICAgXCJhdGgxMWtfYWhiX2NvbmZpZ19pcnFcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyByZXNvdXJjZSBsZWFrcyBpbiB0aGUgZXJyb3IgcGF0aHMgb2YgSVJRIGNvbmZpZ3VyYXRpb24gZm9yIHRoZSBhdGgxMWsgQUhCIGRyaXZlci4gSXQgaW50cm9kdWNlcyBuZXcgaGVscGVyIGZ1bmN0aW9ucyBmb3IgZnJlZWluZyBJUlFzIGFuZCB1cGRhdGVzIHRoZSBjb25maWd1cmF0aW9uIGZ1bmN0aW9ucyB0byB1c2UgdGhlbSBvbiBmYWlsdXJlLiBUaGlzIGlzIGZ1bmN0aW9uYWwgZHJpdmVyIGNvZGUgdGhhdCBjYW4gYmUgcmVhY2hlZCBkdXJpbmcgZGV2aWNlIHByb2JlLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkFUSDExS1wiLFxuICAgIFwiQVRIMTFLX0FIQlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImF0aDExa19haGJfZnJlZV9leHRfaXJxX2dycFwiLFxuICAgIFwiYXRoMTFrX2FoYl9mcmVlX2V4dF9pcnFcIixcbiAgICBcImF0aDExa19haGJfZnJlZV9jZV9pcnFzXCIsXG4gICAgXCJhdGgxMWtfYWhiX2ZyZWVfaXJxXCIsXG4gICAgXCJhdGgxMWtfYWhiX2NvbmZpZ19leHRfaXJxXCIsXG4gICAgXCJhdGgxMWtfYWhiX2NvbmZpZ19pcnFcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyByZXNvdXJjZSBsZWFrcyBpbiB0aGUgZXJyb3IgcGF0aHMgb2YgSVJRIGNvbmZpZ3VyYXRpb24gZm9yIHRoZSBhdGgxMWsgQUhCIGRyaXZlci4gSXQgaW50cm9kdWNlcyBuZXcgaGVscGVyIGZ1bmN0aW9ucyBmb3IgZnJlZWluZyBJUlFzIGFuZCB1cGRhdGVzIHRoZSBjb25maWd1cmF0aW9uIGZ1bmN0aW9ucyB0byB1c2UgdGhlbSBvbiBmYWlsdXJlLiBUaGlzIGlzIGZ1bmN0aW9uYWwgZHJpdmVyIGNvZGUgdGhhdCBjYW4gYmUgcmVhY2hlZCBkdXJpbmcgZGV2aWNlIHByb2JlLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },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-workflowrcdk2[1] Phase: Succeeded StartedAt: 2026-07-16 16:22:17 +0000 UTC FinishedAt: 2026-07-16 16:22:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrcdk2[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-16 16:22:17 +0000 UTC FinishedAt: 2026-07-16 16:22:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrcdk2[2] Phase: Succeeded StartedAt: 2026-07-16 16:22:17 +0000 UTC FinishedAt: 2026-07-16 17:48:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrcdk2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"37e2f878a7a660a216cc7a60459995fefd150f25","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATH11K","ATH11K_AHB"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ath11k_ahb_free_ext_irq_grp","ath11k_ahb_free_ext_irq","ath11k_ahb_free_ce_irqs","ath11k_ahb_free_irq","ath11k_ahb_config_ext_irq","ath11k_ahb_config_irq"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"37e2f878a7a660a216cc7a60459995fefd150f25","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATH11K","ATH11K_AHB"],"series_id":"023a02bc-4e55-4b41-9c96-3a38e6e7ec24","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-07-16 16:22:17 +0000 UTC FinishedAt: 2026-07-16 17:48:49 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"37e2f878a7a660a216cc7a60459995fefd150f25","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATH11K","ATH11K_AHB"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ath11k_ahb_free_ext_irq_grp","ath11k_ahb_free_ext_irq","ath11k_ahb_free_ce_irqs","ath11k_ahb_free_irq","ath11k_ahb_config_ext_irq","ath11k_ahb_config_irq"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"37e2f878a7a660a216cc7a60459995fefd150f25","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATH11K","ATH11K_AHB"],"series_id":"023a02bc-4e55-4b41-9c96-3a38e6e7ec24","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowrcdk2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"37e2f878a7a660a216cc7a60459995fefd150f25","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATH11K","ATH11K_AHB"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ath11k_ahb_free_ext_irq_grp","ath11k_ahb_free_ext_irq","ath11k_ahb_free_ce_irqs","ath11k_ahb_free_irq","ath11k_ahb_config_ext_irq","ath11k_ahb_config_irq"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"37e2f878a7a660a216cc7a60459995fefd150f25","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATH11K","ATH11K_AHB"],"series_id":"023a02bc-4e55-4b41-9c96-3a38e6e7ec24","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-07-16 16:22:17 +0000 UTC FinishedAt: 2026-07-16 16:22:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrcdk2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"37e2f878a7a660a216cc7a60459995fefd150f25","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATH11K","ATH11K_AHB"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ath11k_ahb_free_ext_irq_grp","ath11k_ahb_free_ext_irq","ath11k_ahb_free_ce_irqs","ath11k_ahb_free_irq","ath11k_ahb_config_ext_irq","ath11k_ahb_config_irq"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"37e2f878a7a660a216cc7a60459995fefd150f25","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATH11K","ATH11K_AHB"],"series_id":"023a02bc-4e55-4b41-9c96-3a38e6e7ec24","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-07-16 16:22:17 +0000 UTC FinishedAt: 2026-07-16 16:22:24 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"37e2f878a7a660a216cc7a60459995fefd150f25","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATH11K","ATH11K_AHB"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowrcdk2/series-workflowrcdk2-convert-artifact-1610013287/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowrcdk2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"37e2f878a7a660a216cc7a60459995fefd150f25","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATH11K","ATH11K_AHB"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ath11k_ahb_free_ext_irq_grp","ath11k_ahb_free_ext_irq","ath11k_ahb_free_ce_irqs","ath11k_ahb_free_irq","ath11k_ahb_config_ext_irq","ath11k_ahb_config_irq"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"37e2f878a7a660a216cc7a60459995fefd150f25","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATH11K","ATH11K_AHB"],"series_id":"023a02bc-4e55-4b41-9c96-3a38e6e7ec24","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-07-16 16:22:37 +0000 UTC FinishedAt: 2026-07-16 17:06:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrcdk2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"37e2f878a7a660a216cc7a60459995fefd150f25","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATH11K","ATH11K_AHB"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ath11k_ahb_free_ext_irq_grp","ath11k_ahb_free_ext_irq","ath11k_ahb_free_ce_irqs","ath11k_ahb_free_irq","ath11k_ahb_config_ext_irq","ath11k_ahb_config_irq"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"37e2f878a7a660a216cc7a60459995fefd150f25","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATH11K","ATH11K_AHB"],"series_id":"023a02bc-4e55-4b41-9c96-3a38e6e7ec24","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-07-16 16:22:37 +0000 UTC FinishedAt: 2026-07-16 17:06:04 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*c6af98e4-c4b6-4e5c-9d8d-c5ac85c354a5,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:request,Path:/tmp/request.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowrcdk2/series-workflowrcdk2-convert-artifact-1610013287/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "build_id": "6b24788b-b9a6-4551-90ef-60d3999b56cb", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowrcdk2/series-workflowrcdk2-build-action-1588711677/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowrcdk2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"37e2f878a7a660a216cc7a60459995fefd150f25","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATH11K","ATH11K_AHB"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ath11k_ahb_free_ext_irq_grp","ath11k_ahb_free_ext_irq","ath11k_ahb_free_ce_irqs","ath11k_ahb_free_irq","ath11k_ahb_config_ext_irq","ath11k_ahb_config_irq"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"37e2f878a7a660a216cc7a60459995fefd150f25","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATH11K","ATH11K_AHB"],"series_id":"023a02bc-4e55-4b41-9c96-3a38e6e7ec24","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-07-16 16:22:37 +0000 UTC FinishedAt: 2026-07-16 17:05:42 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*c6af98e4-c4b6-4e5c-9d8d-c5ac85c354a5,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:request,Path:/tmp/request.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowrcdk2/series-workflowrcdk2-convert-artifact-1610013287/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "build_id": "6b24788b-b9a6-4551-90ef-60d3999b56cb", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowrcdk2/series-workflowrcdk2-build-action-1588711677/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowrcdk2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"37e2f878a7a660a216cc7a60459995fefd150f25","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATH11K","ATH11K_AHB"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ath11k_ahb_free_ext_irq_grp","ath11k_ahb_free_ext_irq","ath11k_ahb_free_ce_irqs","ath11k_ahb_free_irq","ath11k_ahb_config_ext_irq","ath11k_ahb_config_irq"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"37e2f878a7a660a216cc7a60459995fefd150f25","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATH11K","ATH11K_AHB"],"series_id":"023a02bc-4e55-4b41-9c96-3a38e6e7ec24","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-07-16 17:06:04 +0000 UTC FinishedAt: 2026-07-16 17:06:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrcdk2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"37e2f878a7a660a216cc7a60459995fefd150f25","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATH11K","ATH11K_AHB"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ath11k_ahb_free_ext_irq_grp","ath11k_ahb_free_ext_irq","ath11k_ahb_free_ce_irqs","ath11k_ahb_free_irq","ath11k_ahb_config_ext_irq","ath11k_ahb_config_irq"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"37e2f878a7a660a216cc7a60459995fefd150f25","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATH11K","ATH11K_AHB"],"series_id":"023a02bc-4e55-4b41-9c96-3a38e6e7ec24","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-07-16 17:06:04 +0000 UTC FinishedAt: 2026-07-16 17:06:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrcdk2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"37e2f878a7a660a216cc7a60459995fefd150f25","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATH11K","ATH11K_AHB"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ath11k_ahb_free_ext_irq_grp","ath11k_ahb_free_ext_irq","ath11k_ahb_free_ce_irqs","ath11k_ahb_free_irq","ath11k_ahb_config_ext_irq","ath11k_ahb_config_irq"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"37e2f878a7a660a216cc7a60459995fefd150f25","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATH11K","ATH11K_AHB"],"series_id":"023a02bc-4e55-4b41-9c96-3a38e6e7ec24","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-07-16 17:06:04 +0000 UTC FinishedAt: 2026-07-16 17:06:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrcdk2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"37e2f878a7a660a216cc7a60459995fefd150f25","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATH11K","ATH11K_AHB"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ath11k_ahb_free_ext_irq_grp","ath11k_ahb_free_ext_irq","ath11k_ahb_free_ce_irqs","ath11k_ahb_free_irq","ath11k_ahb_config_ext_irq","ath11k_ahb_config_irq"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"37e2f878a7a660a216cc7a60459995fefd150f25","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATH11K","ATH11K_AHB"],"series_id":"023a02bc-4e55-4b41-9c96-3a38e6e7ec24","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-07-16 17:06:04 +0000 UTC FinishedAt: 2026-07-16 17:06:11 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"37e2f878a7a660a216cc7a60459995fefd150f25","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATH11K","ATH11K_AHB"],"series_id":"023a02bc-4e55-4b41-9c96-3a38e6e7ec24","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowrcdk2/series-workflowrcdk2-convert-artifact-3033943062/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowrcdk2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"37e2f878a7a660a216cc7a60459995fefd150f25","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATH11K","ATH11K_AHB"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ath11k_ahb_free_ext_irq_grp","ath11k_ahb_free_ext_irq","ath11k_ahb_free_ce_irqs","ath11k_ahb_free_irq","ath11k_ahb_config_ext_irq","ath11k_ahb_config_irq"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"37e2f878a7a660a216cc7a60459995fefd150f25","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATH11K","ATH11K_AHB"],"series_id":"023a02bc-4e55-4b41-9c96-3a38e6e7ec24","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-07-16 17:06:14 +0000 UTC FinishedAt: 2026-07-16 17:08:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrcdk2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"37e2f878a7a660a216cc7a60459995fefd150f25","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATH11K","ATH11K_AHB"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ath11k_ahb_free_ext_irq_grp","ath11k_ahb_free_ext_irq","ath11k_ahb_free_ce_irqs","ath11k_ahb_free_irq","ath11k_ahb_config_ext_irq","ath11k_ahb_config_irq"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"37e2f878a7a660a216cc7a60459995fefd150f25","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATH11K","ATH11K_AHB"],"series_id":"023a02bc-4e55-4b41-9c96-3a38e6e7ec24","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-07-16 17:06:14 +0000 UTC FinishedAt: 2026-07-16 17:08:15 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*6b24788b-b9a6-4551-90ef-60d3999b56cb,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Boot test: Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:report-findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/base,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowrcdk2/series-workflowrcdk2-build-action-1588711677/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "success": true },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-workflowrcdk2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"37e2f878a7a660a216cc7a60459995fefd150f25","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATH11K","ATH11K_AHB"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ath11k_ahb_free_ext_irq_grp","ath11k_ahb_free_ext_irq","ath11k_ahb_free_ce_irqs","ath11k_ahb_free_irq","ath11k_ahb_config_ext_irq","ath11k_ahb_config_irq"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"37e2f878a7a660a216cc7a60459995fefd150f25","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATH11K","ATH11K_AHB"],"series_id":"023a02bc-4e55-4b41-9c96-3a38e6e7ec24","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-07-16 17:08:24 +0000 UTC FinishedAt: 2026-07-16 17:08:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrcdk2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"37e2f878a7a660a216cc7a60459995fefd150f25","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATH11K","ATH11K_AHB"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ath11k_ahb_free_ext_irq_grp","ath11k_ahb_free_ext_irq","ath11k_ahb_free_ce_irqs","ath11k_ahb_free_irq","ath11k_ahb_config_ext_irq","ath11k_ahb_config_irq"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"37e2f878a7a660a216cc7a60459995fefd150f25","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATH11K","ATH11K_AHB"],"series_id":"023a02bc-4e55-4b41-9c96-3a38e6e7ec24","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-07-16 17:08:24 +0000 UTC FinishedAt: 2026-07-16 17:08:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrcdk2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"37e2f878a7a660a216cc7a60459995fefd150f25","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATH11K","ATH11K_AHB"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ath11k_ahb_free_ext_irq_grp","ath11k_ahb_free_ext_irq","ath11k_ahb_free_ce_irqs","ath11k_ahb_free_irq","ath11k_ahb_config_ext_irq","ath11k_ahb_config_irq"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"37e2f878a7a660a216cc7a60459995fefd150f25","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATH11K","ATH11K_AHB"],"series_id":"023a02bc-4e55-4b41-9c96-3a38e6e7ec24","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-07-16 17:08:24 +0000 UTC FinishedAt: 2026-07-16 17:45:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrcdk2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"37e2f878a7a660a216cc7a60459995fefd150f25","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATH11K","ATH11K_AHB"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ath11k_ahb_free_ext_irq_grp","ath11k_ahb_free_ext_irq","ath11k_ahb_free_ce_irqs","ath11k_ahb_free_irq","ath11k_ahb_config_ext_irq","ath11k_ahb_config_irq"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"37e2f878a7a660a216cc7a60459995fefd150f25","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATH11K","ATH11K_AHB"],"series_id":"023a02bc-4e55-4b41-9c96-3a38e6e7ec24","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-07-16 17:08:24 +0000 UTC FinishedAt: 2026-07-16 17:45:09 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*c6af98e4-c4b6-4e5c-9d8d-c5ac85c354a5,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:request,Path:/tmp/request.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowrcdk2/series-workflowrcdk2-convert-artifact-3033943062/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "build_id": "e911e4f9-2512-44c6-8323-4e92f9a30adc", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowrcdk2/series-workflowrcdk2-build-action-518327578/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowrcdk2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"37e2f878a7a660a216cc7a60459995fefd150f25","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATH11K","ATH11K_AHB"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ath11k_ahb_free_ext_irq_grp","ath11k_ahb_free_ext_irq","ath11k_ahb_free_ce_irqs","ath11k_ahb_free_irq","ath11k_ahb_config_ext_irq","ath11k_ahb_config_irq"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"37e2f878a7a660a216cc7a60459995fefd150f25","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATH11K","ATH11K_AHB"],"series_id":"023a02bc-4e55-4b41-9c96-3a38e6e7ec24","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-07-16 17:08:24 +0000 UTC FinishedAt: 2026-07-16 17:44:46 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*c6af98e4-c4b6-4e5c-9d8d-c5ac85c354a5,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:request,Path:/tmp/request.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowrcdk2/series-workflowrcdk2-convert-artifact-3033943062/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "build_id": "e911e4f9-2512-44c6-8323-4e92f9a30adc", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowrcdk2/series-workflowrcdk2-build-action-518327578/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowrcdk2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"37e2f878a7a660a216cc7a60459995fefd150f25","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATH11K","ATH11K_AHB"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ath11k_ahb_free_ext_irq_grp","ath11k_ahb_free_ext_irq","ath11k_ahb_free_ce_irqs","ath11k_ahb_free_irq","ath11k_ahb_config_ext_irq","ath11k_ahb_config_irq"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"37e2f878a7a660a216cc7a60459995fefd150f25","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATH11K","ATH11K_AHB"],"series_id":"023a02bc-4e55-4b41-9c96-3a38e6e7ec24","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-07-16 17:45:09 +0000 UTC FinishedAt: 2026-07-16 17:45:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrcdk2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"37e2f878a7a660a216cc7a60459995fefd150f25","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATH11K","ATH11K_AHB"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ath11k_ahb_free_ext_irq_grp","ath11k_ahb_free_ext_irq","ath11k_ahb_free_ce_irqs","ath11k_ahb_free_irq","ath11k_ahb_config_ext_irq","ath11k_ahb_config_irq"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"37e2f878a7a660a216cc7a60459995fefd150f25","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATH11K","ATH11K_AHB"],"series_id":"023a02bc-4e55-4b41-9c96-3a38e6e7ec24","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-07-16 17:45:09 +0000 UTC FinishedAt: 2026-07-16 17:45:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrcdk2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"37e2f878a7a660a216cc7a60459995fefd150f25","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATH11K","ATH11K_AHB"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ath11k_ahb_free_ext_irq_grp","ath11k_ahb_free_ext_irq","ath11k_ahb_free_ce_irqs","ath11k_ahb_free_irq","ath11k_ahb_config_ext_irq","ath11k_ahb_config_irq"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"37e2f878a7a660a216cc7a60459995fefd150f25","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATH11K","ATH11K_AHB"],"series_id":"023a02bc-4e55-4b41-9c96-3a38e6e7ec24","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-07-16 17:45:09 +0000 UTC FinishedAt: 2026-07-16 17:47:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrcdk2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"37e2f878a7a660a216cc7a60459995fefd150f25","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATH11K","ATH11K_AHB"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ath11k_ahb_free_ext_irq_grp","ath11k_ahb_free_ext_irq","ath11k_ahb_free_ce_irqs","ath11k_ahb_free_irq","ath11k_ahb_config_ext_irq","ath11k_ahb_config_irq"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"37e2f878a7a660a216cc7a60459995fefd150f25","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATH11K","ATH11K_AHB"],"series_id":"023a02bc-4e55-4b41-9c96-3a38e6e7ec24","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-07-16 17:45:09 +0000 UTC FinishedAt: 2026-07-16 17:47:00 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*e911e4f9-2512-44c6-8323-4e92f9a30adc,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Boot test: Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:report-findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/base,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowrcdk2/series-workflowrcdk2-build-action-518327578/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "success": true },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-workflowrcdk2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"37e2f878a7a660a216cc7a60459995fefd150f25","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATH11K","ATH11K_AHB"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ath11k_ahb_free_ext_irq_grp","ath11k_ahb_free_ext_irq","ath11k_ahb_free_ce_irqs","ath11k_ahb_free_irq","ath11k_ahb_config_ext_irq","ath11k_ahb_config_irq"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"37e2f878a7a660a216cc7a60459995fefd150f25","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATH11K","ATH11K_AHB"],"series_id":"023a02bc-4e55-4b41-9c96-3a38e6e7ec24","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-07-16 17:47:12 +0000 UTC FinishedAt: 2026-07-16 17:48:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrcdk2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"37e2f878a7a660a216cc7a60459995fefd150f25","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATH11K","ATH11K_AHB"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ath11k_ahb_free_ext_irq_grp","ath11k_ahb_free_ext_irq","ath11k_ahb_free_ce_irqs","ath11k_ahb_free_irq","ath11k_ahb_config_ext_irq","ath11k_ahb_config_irq"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"37e2f878a7a660a216cc7a60459995fefd150f25","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATH11K","ATH11K_AHB"],"series_id":"023a02bc-4e55-4b41-9c96-3a38e6e7ec24","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-07-16 17:47:12 +0000 UTC FinishedAt: 2026-07-16 17:48:49 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ath11k_ahb_free_ext_irq_grp","ath11k_ahb_free_ext_irq","ath11k_ahb_free_ce_irqs","ath11k_ahb_free_irq","ath11k_ahb_config_ext_irq","ath11k_ahb_config_irq"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:track,Default:nil,Value:*KASAN,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:base-build-id,Default:nil,Value:*6b24788b-b9a6-4551-90ef-60d3999b56cb,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*e911e4f9-2512-44c6-8323-4e92f9a30adc,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:base-kernel,Path:,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowrcdk2/series-workflowrcdk2-build-action-1588711677/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:patched-kernel,Path:,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowrcdk2/series-workflowrcdk2-build-action-518327578/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowrcdk2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"37e2f878a7a660a216cc7a60459995fefd150f25","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATH11K","ATH11K_AHB"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ath11k_ahb_free_ext_irq_grp","ath11k_ahb_free_ext_irq","ath11k_ahb_free_ce_irqs","ath11k_ahb_free_irq","ath11k_ahb_config_ext_irq","ath11k_ahb_config_irq"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"37e2f878a7a660a216cc7a60459995fefd150f25","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATH11K","ATH11K_AHB"],"series_id":"023a02bc-4e55-4b41-9c96-3a38e6e7ec24","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-07-16 17:47:12 +0000 UTC FinishedAt: 2026-07-16 17:47:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrcdk2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"37e2f878a7a660a216cc7a60459995fefd150f25","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATH11K","ATH11K_AHB"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ath11k_ahb_free_ext_irq_grp","ath11k_ahb_free_ext_irq","ath11k_ahb_free_ce_irqs","ath11k_ahb_free_irq","ath11k_ahb_config_ext_irq","ath11k_ahb_config_irq"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"37e2f878a7a660a216cc7a60459995fefd150f25","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATH11K","ATH11K_AHB"],"series_id":"023a02bc-4e55-4b41-9c96-3a38e6e7ec24","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-07-16 17:47:12 +0000 UTC FinishedAt: 2026-07-16 17:47:33 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ath11k_ahb_free_ext_irq_grp","ath11k_ahb_free_ext_irq","ath11k_ahb_free_ce_irqs","ath11k_ahb_free_irq","ath11k_ahb_config_ext_irq","ath11k_ahb_config_irq"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowrcdk2/series-workflowrcdk2-convert-artifact-1945181371/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowrcdk2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"37e2f878a7a660a216cc7a60459995fefd150f25","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATH11K","ATH11K_AHB"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ath11k_ahb_free_ext_irq_grp","ath11k_ahb_free_ext_irq","ath11k_ahb_free_ce_irqs","ath11k_ahb_free_irq","ath11k_ahb_config_ext_irq","ath11k_ahb_config_irq"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"37e2f878a7a660a216cc7a60459995fefd150f25","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATH11K","ATH11K_AHB"],"series_id":"023a02bc-4e55-4b41-9c96-3a38e6e7ec24","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-07-16 17:47:12 +0000 UTC FinishedAt: 2026-07-16 17:47:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrcdk2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"37e2f878a7a660a216cc7a60459995fefd150f25","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATH11K","ATH11K_AHB"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ath11k_ahb_free_ext_irq_grp","ath11k_ahb_free_ext_irq","ath11k_ahb_free_ce_irqs","ath11k_ahb_free_irq","ath11k_ahb_config_ext_irq","ath11k_ahb_config_irq"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"37e2f878a7a660a216cc7a60459995fefd150f25","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATH11K","ATH11K_AHB"],"series_id":"023a02bc-4e55-4b41-9c96-3a38e6e7ec24","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-07-16 17:47:12 +0000 UTC FinishedAt: 2026-07-16 17:47:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrcdk2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"37e2f878a7a660a216cc7a60459995fefd150f25","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATH11K","ATH11K_AHB"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ath11k_ahb_free_ext_irq_grp","ath11k_ahb_free_ext_irq","ath11k_ahb_free_ce_irqs","ath11k_ahb_free_irq","ath11k_ahb_config_ext_irq","ath11k_ahb_config_irq"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"37e2f878a7a660a216cc7a60459995fefd150f25","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATH11K","ATH11K_AHB"],"series_id":"023a02bc-4e55-4b41-9c96-3a38e6e7ec24","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-07-16 17:47:12 +0000 UTC FinishedAt: 2026-07-16 17:47:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrcdk2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"37e2f878a7a660a216cc7a60459995fefd150f25","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATH11K","ATH11K_AHB"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ath11k_ahb_free_ext_irq_grp","ath11k_ahb_free_ext_irq","ath11k_ahb_free_ce_irqs","ath11k_ahb_free_irq","ath11k_ahb_config_ext_irq","ath11k_ahb_config_irq"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"37e2f878a7a660a216cc7a60459995fefd150f25","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATH11K","ATH11K_AHB"],"series_id":"023a02bc-4e55-4b41-9c96-3a38e6e7ec24","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-07-16 17:47:40 +0000 UTC FinishedAt: 2026-07-16 17:48:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrcdk2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"37e2f878a7a660a216cc7a60459995fefd150f25","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATH11K","ATH11K_AHB"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ath11k_ahb_free_ext_irq_grp","ath11k_ahb_free_ext_irq","ath11k_ahb_free_ce_irqs","ath11k_ahb_free_irq","ath11k_ahb_config_ext_irq","ath11k_ahb_config_irq"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"37e2f878a7a660a216cc7a60459995fefd150f25","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATH11K","ATH11K_AHB"],"series_id":"023a02bc-4e55-4b41-9c96-3a38e6e7ec24","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-07-16 17:47:40 +0000 UTC FinishedAt: 2026-07-16 17:48:43 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*6b24788b-b9a6-4551-90ef-60d3999b56cb,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*e911e4f9-2512-44c6-8323-4e92f9a30adc,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Fuzz,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:base-kernel,Path:/base,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowrcdk2/series-workflowrcdk2-build-action-1588711677/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:patched-kernel,Path:/patched,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowrcdk2/series-workflowrcdk2-build-action-518327578/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:config,Path:/tmp/config.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowrcdk2/series-workflowrcdk2-convert-artifact-1945181371/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,}