Name: series-workflowtdlxr Phase: Succeeded StartedAt: 2026-08-07 11:49:04 +0000 UTC FinishedAt: 2026-08-07 15:08:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtdlxr[0] Phase: Succeeded StartedAt: 2026-08-07 11:49:04 +0000 UTC FinishedAt: 2026-08-07 13:22:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtdlxr[0].run-triage Phase: Succeeded StartedAt: 2026-08-07 11:49:04 +0000 UTC FinishedAt: 2026-08-07 13:22:05 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "ca10634ebcca850dec2f1507ad5bfe70b82a9c00", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "VHOST_VDPA", "VDPA", "VDPA_SIM", "VDPA_SIM_NET", "VDPA_SIM_BLOCK", "VDPA_USER", "RUNTIME_TESTING_MENU" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "ca10634ebcca850dec2f1507ad5bfe70b82a9c00", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "VHOST_VDPA", "VDPA", "VDPA_SIM", "VDPA_SIM_NET", "VDPA_SIM_BLOCK", "VDPA_USER", "RUNTIME_TESTING_MENU" ], "series_id": "74c31c45-e993-4568-9369-99929eeb193d" }, "track": "KASAN", "fuzz": { "focus": [ "kvm", "net" ], "focus_symbols": [ "vhost_vdpa_unlocked_ioctl", "vhost_vdpa_release", "vhost_vdpa_config_cb" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db", "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+CgkJCTx0ZD4yMDI2LzA4LzA3IDEyOjM1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1ZIT1NUX1ZEUEEmIzM0OywKICAgICYjMzQ7VkRQQSYjMzQ7LAogICAgJiMzNDtWRFBBX1NJTSYjMzQ7LAogICAgJiMzNDtWRFBBX1NJTV9ORVQmIzM0OywKICAgICYjMzQ7VkRQQV9TSU1fQkxPQ0smIzM0OywKICAgICYjMzQ7VkRQQV9VU0VSJiMzNDssCiAgICAmIzM0O1JVTlRJTUVfVEVTVElOR19NRU5VJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dmhvc3RfdmRwYV91bmxvY2tlZF9pb2N0bCYjMzQ7LAogICAgJiMzNDt2aG9zdF92ZHBhX3JlbGVhc2UmIzM0OywKICAgICYjMzQ7dmhvc3RfdmRwYV9jb25maWdfY2ImIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRyZXNzZXMgYSBjb25jdXJyZW5jeSBpc3N1ZSAobGlrZWx5IGEgcmFjZSBjb25kaXRpb24gb3IgdXNlLWFmdGVyLWZyZWUpIGJ5IGFkZGluZyBhIHNwaW5sb2NrIChgY29uZmlnX2xvY2tgKSB0byBzZXJpYWxpemUgYWNjZXNzZXMgdG8gYHYtXHUwMDNlY29uZmlnX2N0eGAgaW4gYHZob3N0X3ZkcGFfY29uZmlnX2NiKClgLCBgdmhvc3RfdmRwYV9jb25maWdfcHV0KClgLCBhbmQgYHZob3N0X3ZkcGFfc2V0X2NvbmZpZ19jYWxsKClgLiBUaGVzZSBjaGFuZ2VzIGRvIG5vdCBpbnRyb2R1Y2Ugb3IgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcywgaW5mby1sZWFrcywgb3IgY29tcGxleCBkYXRhIHN0cnVjdHVyZSBhbGxvY2F0aW9ucyB0aGF0IHdvdWxkIHJlcXVpcmUgS01TQU4uIFRoZSBidWcgYmVpbmcgZml4ZWQgYW5kIGFueSBwb3RlbnRpYWwgcmVncmVzc2lvbnMgd291bGQgYmUgcmVsYXRlZCB0byBsb2NraW5nLCByYWNlIGNvbmRpdGlvbnMsIG9yIHVzZS1hZnRlci1mcmVlLCB3aGljaCBhcmUgZWZmZWN0aXZlbHkgY2F1Z2h0IGJ5IEtBU0FOLCBLQ1NBTiwgYW5kIExPQ0tERVAuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYSBzcGlubG9jayB0byBgc3RydWN0IHZob3N0X3ZkcGFgIHRvIGZpeCBhIHJhY2UgY29uZGl0aW9uIGJldHdlZW4gYHZob3N0X3ZkcGFfY29uZmlnX2NiYCBhbmQgYHZob3N0X3ZkcGFfc2V0X2NvbmZpZ19jYWxsYCAvIGB2aG9zdF92ZHBhX2NvbmZpZ19wdXRgLiBUaGVzZSBmdW5jdGlvbnMgYXJlIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgdGhlIHZob3N0LXZkcGEgY2hhcmRldiBpb2N0bHMgYW5kIHJlbGVhc2Ugb3BlcmF0aW9ucy4gVGhlIHZEUEEgc3Vic3lzdGVtIGNhbiBiZSB0ZXN0ZWQgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCB1c2luZyB2RFBBIHNpbXVsYXRvcnMgKGB2ZHBhX3NpbV9uZXRgLCBgdmRwYV9zaW1fYmxrYCkgb3IgYHZkdXNlYC4gVGhlcmVmb3JlLCB0aGUgY2hhbmdlcyBoYXZlIGEgZnVuY3Rpb25hbCBpbXBhY3QgdGhhdCBpcyB3b3J0aCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDEyOjM1PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgOTI4ZWVlMjA0YWU3YjNhYjc4NzZhNzNjNzAzMTM4NTgyNmI1YjYyNFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgQXVnIDcgMTI6MzU6MDMgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy92aG9zdC92ZHBhLmMgYi9kcml2ZXJzL3Zob3N0L3ZkcGEuY1xuaW5kZXggYWM1NTI3NWZhMGQwYS4uMjcyZDUwNmQ4MzFjOCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvdmhvc3QvdmRwYS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL3Zob3N0L3ZkcGEuY1xuQEAgLTU2LDYgJiM0Mzs1Niw4IEBAIHN0cnVjdCB2aG9zdF92ZHBhIHtcbiBcdGludCB2aXJ0aW9faWQ7XG4gXHRpbnQgbWlub3I7XG4gXHRzdHJ1Y3QgZXZlbnRmZF9jdHggKmNvbmZpZ19jdHg7XG4mIzQzO1x0LyogU2VyaWFsaXNlcyB2aG9zdF92ZHBhX2NvbmZpZ19jYigpIGFnYWluc3QgY29uZmlnX2N0eCBiZWluZyByZXBsYWNlZC4gKi9cbiYjNDM7XHRzcGlubG9ja190IGNvbmZpZ19sb2NrO1xuIFx0aW50IGluX2JhdGNoO1xuIFx0c3RydWN0IHZkcGFfaW92YV9yYW5nZSByYW5nZTtcbiBcdHUzMiBiYXRjaF9hc2lkO1xuQEAgLTE4NywxMCAmIzQzOzE4OSwxMiBAQCBzdGF0aWMgaXJxcmV0dXJuX3Qgdmhvc3RfdmRwYV92aXJ0cXVldWVfY2Iodm9pZCAqcHJpdmF0ZSlcbiBzdGF0aWMgaXJxcmV0dXJuX3Qgdmhvc3RfdmRwYV9jb25maWdfY2Iodm9pZCAqcHJpdmF0ZSlcbiB7XG4gXHRzdHJ1Y3Qgdmhvc3RfdmRwYSAqdiA9IHByaXZhdGU7XG4tXHRzdHJ1Y3QgZXZlbnRmZF9jdHggKmNvbmZpZ19jdHggPSB2LVx1MDAzZWNvbmZpZ19jdHg7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBmbGFncztcbiBcbi1cdGlmIChjb25maWdfY3R4KVxuLVx0XHRldmVudGZkX3NpZ25hbChjb25maWdfY3R4KTtcbiYjNDM7XHRzcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZ2LVx1MDAzZWNvbmZpZ19sb2NrLCBmbGFncyk7XG4mIzQzO1x0aWYgKHYtXHUwMDNlY29uZmlnX2N0eClcbiYjNDM7XHRcdGV2ZW50ZmRfc2lnbmFsKHYtXHUwMDNlY29uZmlnX2N0eCk7XG4mIzQzO1x0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZ2LVx1MDAzZWNvbmZpZ19sb2NrLCBmbGFncyk7XG4gXG4gXHRyZXR1cm4gSVJRX0hBTkRMRUQ7XG4gfVxuQEAgLTUxMSwxNSAmIzQzOzUxNSwyMiBAQCBzdGF0aWMgbG9uZyB2aG9zdF92ZHBhX2dldF92cmluZ19udW0oc3RydWN0IHZob3N0X3ZkcGEgKnYsIHUxNiBfX3VzZXIgKmFyZ3ApXG4gXG4gc3RhdGljIHZvaWQgdmhvc3RfdmRwYV9jb25maWdfcHV0KHN0cnVjdCB2aG9zdF92ZHBhICp2KVxuIHtcbi1cdGlmICh2LVx1MDAzZWNvbmZpZ19jdHgpIHtcbi1cdFx0ZXZlbnRmZF9jdHhfcHV0KHYtXHUwMDNlY29uZmlnX2N0eCk7XG4tXHRcdHYtXHUwMDNlY29uZmlnX2N0eCA9IE5VTEw7XG4tXHR9XG4mIzQzO1x0c3RydWN0IGV2ZW50ZmRfY3R4ICpjdHg7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBmbGFncztcbiYjNDM7XG4mIzQzO1x0c3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2di1cdTAwM2Vjb25maWdfbG9jaywgZmxhZ3MpO1xuJiM0MztcdGN0eCA9IHYtXHUwMDNlY29uZmlnX2N0eDtcbiYjNDM7XHR2LVx1MDAzZWNvbmZpZ19jdHggPSBOVUxMO1xuJiM0MztcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2di1cdTAwM2Vjb25maWdfbG9jaywgZmxhZ3MpO1xuJiM0MztcbiYjNDM7XHRpZiAoY3R4KVxuJiM0MztcdFx0ZXZlbnRmZF9jdHhfcHV0KGN0eCk7XG4gfVxuIFxuIHN0YXRpYyBsb25nIHZob3N0X3ZkcGFfc2V0X2NvbmZpZ19jYWxsKHN0cnVjdCB2aG9zdF92ZHBhICp2LCB1MzIgX191c2VyICphcmdwKVxuIHtcbiBcdHN0cnVjdCB2ZHBhX2NhbGxiYWNrIGNiO1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4gXHRpbnQgZmQ7XG4gXHRzdHJ1Y3QgZXZlbnRmZF9jdHggKmN0eDtcbiBcbkBAIC01MjksMTggJiM0Mzs1NDAsMjAgQEAgc3RhdGljIGxvbmcgdmhvc3RfdmRwYV9zZXRfY29uZmlnX2NhbGwoc3RydWN0IHZob3N0X3ZkcGEgKnYsIHUzMiBfX3VzZXIgKmFyZ3ApXG4gXHRcdHJldHVybiAgLUVGQVVMVDtcbiBcbiBcdGN0eCA9IGZkID09IFZIT1NUX0ZJTEVfVU5CSU5EID8gTlVMTCA6IGV2ZW50ZmRfY3R4X2ZkZ2V0KGZkKTtcbiYjNDM7XHRpZiAoSVNfRVJSKGN0eCkpXG4mIzQzO1x0XHRyZXR1cm4gUFRSX0VSUihjdHgpO1xuJiM0MztcbiYjNDM7XHRzcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZ2LVx1MDAzZWNvbmZpZ19sb2NrLCBmbGFncyk7XG4gXHRzd2FwKGN0eCwgdi1cdTAwM2Vjb25maWdfY3R4KTtcbiYjNDM7XHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNnYtXHUwMDNlY29uZmlnX2xvY2ssIGZsYWdzKTtcbiBcbi1cdGlmICghSVNfRVJSX09SX05VTEwoY3R4KSlcbiYjNDM7XHQvKlxuJiM0MztcdCAqIFRoZSBjYWxsYmFjayBjYW4gbm8gbG9uZ2VyIHJlYWNoIHRoZSBvbGQgY29udGV4dCwgc28gdGhpcyBpcyB0aGVcbiYjNDM7XHQgKiBsYXN0IHJlZmVyZW5jZSB0byBpdC5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAoY3R4KVxuIFx0XHRldmVudGZkX2N0eF9wdXQoY3R4KTtcbiBcbi1cdGlmIChJU19FUlIodi1cdTAwM2Vjb25maWdfY3R4KSkge1xuLVx0XHRsb25nIHJldCA9IFBUUl9FUlIodi1cdTAwM2Vjb25maWdfY3R4KTtcbi1cbi1cdFx0di1cdTAwM2Vjb25maWdfY3R4ID0gTlVMTDtcbi1cdFx0cmV0dXJuIHJldDtcbi1cdH1cbi1cbiBcdHYtXHUwMDNldmRwYS1cdTAwM2Vjb25maWctXHUwMDNlc2V0X2NvbmZpZ19jYih2LVx1MDAzZXZkcGEsIFx1MDAyNmNiKTtcbiBcbiBcdHJldHVybiAwO1xuQEAgLTE1OTksNiAmIzQzOzE2MTIsNyBAQCBzdGF0aWMgaW50IHZob3N0X3ZkcGFfcHJvYmUoc3RydWN0IHZkcGFfZGV2aWNlICp2ZHBhKVxuIFx0fVxuIFxuIFx0YXRvbWljX3NldChcdTAwMjZ2LVx1MDAzZW9wZW5lZCwgMCk7XG4mIzQzO1x0c3Bpbl9sb2NrX2luaXQoXHUwMDI2di1cdTAwM2Vjb25maWdfbG9jayk7XG4gXHR2LVx1MDAzZW1pbm9yID0gbWlub3I7XG4gXHR2LVx1MDAzZXZkcGEgPSB2ZHBhO1xuIFx0di1cdTAwM2VudnFzID0gdmRwYS1cdTAwM2VudnFzO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDEyOjM1PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtWSE9TVF9WRFBBJiMzNDssCiAgICAmIzM0O1ZEUEEmIzM0OywKICAgICYjMzQ7VkRQQV9TSU0mIzM0OywKICAgICYjMzQ7VkRQQV9TSU1fTkVUJiMzNDssCiAgICAmIzM0O1ZEUEFfU0lNX0JMT0NLJiMzNDssCiAgICAmIzM0O1ZEUEFfVVNFUiYjMzQ7LAogICAgJiMzNDtSVU5USU1FX1RFU1RJTkdfTUVOVSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3Zob3N0X3ZkcGFfdW5sb2NrZWRfaW9jdGwmIzM0OywKICAgICYjMzQ7dmhvc3RfdmRwYV9yZWxlYXNlJiMzNDssCiAgICAmIzM0O3Zob3N0X3ZkcGFfY29uZmlnX2NiJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYSBzcGlubG9jayB0byBgc3RydWN0IHZob3N0X3ZkcGFgIHRvIGZpeCBhIHJhY2UgY29uZGl0aW9uIGJldHdlZW4gYHZob3N0X3ZkcGFfY29uZmlnX2NiYCBhbmQgYHZob3N0X3ZkcGFfc2V0X2NvbmZpZ19jYWxsYCAvIGB2aG9zdF92ZHBhX2NvbmZpZ19wdXRgLiBUaGVzZSBmdW5jdGlvbnMgYXJlIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgdGhlIHZob3N0LXZkcGEgY2hhcmRldiBpb2N0bHMgYW5kIHJlbGVhc2Ugb3BlcmF0aW9ucy4gVGhlIHZEUEEgc3Vic3lzdGVtIGNhbiBiZSB0ZXN0ZWQgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCB1c2luZyB2RFBBIHNpbXVsYXRvcnMgKGB2ZHBhX3NpbV9uZXRgLCBgdmRwYV9zaW1fYmxrYCkgb3IgYHZkdXNlYC4gVGhlcmVmb3JlLCB0aGUgY2hhbmdlcyBoYXZlIGEgZnVuY3Rpb25hbCBpbXBhY3QgdGhhdCBpcyB3b3J0aCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgOTI4ZWVlMjA0YWU3YjNhYjc4NzZhNzNjNzAzMTM4NTgyNmI1YjYyNApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBGcmkgQXVnIDcgMTI6MzU6MDMgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Zob3N0L3ZkcGEuYyBiL2RyaXZlcnMvdmhvc3QvdmRwYS5jCmluZGV4IGFjNTUyNzVmYTBkMGEuLjI3MmQ1MDZkODMxYzggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmhvc3QvdmRwYS5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvdmhvc3QvdmRwYS5jCkBAIC01Niw2ICYjNDM7NTYsOCBAQCBzdHJ1Y3Qgdmhvc3RfdmRwYSB7CiAJaW50IHZpcnRpb19pZDsKIAlpbnQgbWlub3I7CiAJc3RydWN0IGV2ZW50ZmRfY3R4ICpjb25maWdfY3R4OwomIzQzOwkvKiBTZXJpYWxpc2VzIHZob3N0X3ZkcGFfY29uZmlnX2NiKCkgYWdhaW5zdCBjb25maWdfY3R4IGJlaW5nIHJlcGxhY2VkLiAqLwomIzQzOwlzcGlubG9ja190IGNvbmZpZ19sb2NrOwogCWludCBpbl9iYXRjaDsKIAlzdHJ1Y3QgdmRwYV9pb3ZhX3JhbmdlIHJhbmdlOwogCXUzMiBiYXRjaF9hc2lkOwpAQCAtMTg3LDEwICYjNDM7MTg5LDEyIEBAIHN0YXRpYyBpcnFyZXR1cm5fdCB2aG9zdF92ZHBhX3ZpcnRxdWV1ZV9jYih2b2lkICpwcml2YXRlKQogc3RhdGljIGlycXJldHVybl90IHZob3N0X3ZkcGFfY29uZmlnX2NiKHZvaWQgKnByaXZhdGUpCiB7CiAJc3RydWN0IHZob3N0X3ZkcGEgKnYgPSBwcml2YXRlOwotCXN0cnVjdCBldmVudGZkX2N0eCAqY29uZmlnX2N0eCA9IHYtJmd0O2NvbmZpZ19jdHg7CiYjNDM7CXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQlpZiAoY29uZmlnX2N0eCkKLQkJZXZlbnRmZF9zaWduYWwoY29uZmlnX2N0eCk7CiYjNDM7CXNwaW5fbG9ja19pcnFzYXZlKCZhbXA7di0mZ3Q7Y29uZmlnX2xvY2ssIGZsYWdzKTsKJiM0MzsJaWYgKHYtJmd0O2NvbmZpZ19jdHgpCiYjNDM7CQlldmVudGZkX3NpZ25hbCh2LSZndDtjb25maWdfY3R4KTsKJiM0MzsJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYW1wO3YtJmd0O2NvbmZpZ19sb2NrLCBmbGFncyk7CiAKIAlyZXR1cm4gSVJRX0hBTkRMRUQ7CiB9CkBAIC01MTEsMTUgJiM0Mzs1MTUsMjIgQEAgc3RhdGljIGxvbmcgdmhvc3RfdmRwYV9nZXRfdnJpbmdfbnVtKHN0cnVjdCB2aG9zdF92ZHBhICp2LCB1MTYgX191c2VyICphcmdwKQogCiBzdGF0aWMgdm9pZCB2aG9zdF92ZHBhX2NvbmZpZ19wdXQoc3RydWN0IHZob3N0X3ZkcGEgKnYpCiB7Ci0JaWYgKHYtJmd0O2NvbmZpZ19jdHgpIHsKLQkJZXZlbnRmZF9jdHhfcHV0KHYtJmd0O2NvbmZpZ19jdHgpOwotCQl2LSZndDtjb25maWdfY3R4ID0gTlVMTDsKLQl9CiYjNDM7CXN0cnVjdCBldmVudGZkX2N0eCAqY3R4OwomIzQzOwl1bnNpZ25lZCBsb25nIGZsYWdzOwomIzQzOwomIzQzOwlzcGluX2xvY2tfaXJxc2F2ZSgmYW1wO3YtJmd0O2NvbmZpZ19sb2NrLCBmbGFncyk7CiYjNDM7CWN0eCA9IHYtJmd0O2NvbmZpZ19jdHg7CiYjNDM7CXYtJmd0O2NvbmZpZ19jdHggPSBOVUxMOwomIzQzOwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhbXA7di0mZ3Q7Y29uZmlnX2xvY2ssIGZsYWdzKTsKJiM0MzsKJiM0MzsJaWYgKGN0eCkKJiM0MzsJCWV2ZW50ZmRfY3R4X3B1dChjdHgpOwogfQogCiBzdGF0aWMgbG9uZyB2aG9zdF92ZHBhX3NldF9jb25maWdfY2FsbChzdHJ1Y3Qgdmhvc3RfdmRwYSAqdiwgdTMyIF9fdXNlciAqYXJncCkKIHsKIAlzdHJ1Y3QgdmRwYV9jYWxsYmFjayBjYjsKJiM0MzsJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgZmQ7CiAJc3RydWN0IGV2ZW50ZmRfY3R4ICpjdHg7CiAKQEAgLTUyOSwxOCAmIzQzOzU0MCwyMCBAQCBzdGF0aWMgbG9uZyB2aG9zdF92ZHBhX3NldF9jb25maWdfY2FsbChzdHJ1Y3Qgdmhvc3RfdmRwYSAqdiwgdTMyIF9fdXNlciAqYXJncCkKIAkJcmV0dXJuICAtRUZBVUxUOwogCiAJY3R4ID0gZmQgPT0gVkhPU1RfRklMRV9VTkJJTkQgPyBOVUxMIDogZXZlbnRmZF9jdHhfZmRnZXQoZmQpOwomIzQzOwlpZiAoSVNfRVJSKGN0eCkpCiYjNDM7CQlyZXR1cm4gUFRSX0VSUihjdHgpOwomIzQzOwomIzQzOwlzcGluX2xvY2tfaXJxc2F2ZSgmYW1wO3YtJmd0O2NvbmZpZ19sb2NrLCBmbGFncyk7CiAJc3dhcChjdHgsIHYtJmd0O2NvbmZpZ19jdHgpOwomIzQzOwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhbXA7di0mZ3Q7Y29uZmlnX2xvY2ssIGZsYWdzKTsKIAotCWlmICghSVNfRVJSX09SX05VTEwoY3R4KSkKJiM0MzsJLyoKJiM0MzsJICogVGhlIGNhbGxiYWNrIGNhbiBubyBsb25nZXIgcmVhY2ggdGhlIG9sZCBjb250ZXh0LCBzbyB0aGlzIGlzIHRoZQomIzQzOwkgKiBsYXN0IHJlZmVyZW5jZSB0byBpdC4KJiM0MzsJICovCiYjNDM7CWlmIChjdHgpCiAJCWV2ZW50ZmRfY3R4X3B1dChjdHgpOwogCi0JaWYgKElTX0VSUih2LSZndDtjb25maWdfY3R4KSkgewotCQlsb25nIHJldCA9IFBUUl9FUlIodi0mZ3Q7Y29uZmlnX2N0eCk7Ci0KLQkJdi0mZ3Q7Y29uZmlnX2N0eCA9IE5VTEw7Ci0JCXJldHVybiByZXQ7Ci0JfQotCiAJdi0mZ3Q7dmRwYS0mZ3Q7Y29uZmlnLSZndDtzZXRfY29uZmlnX2NiKHYtJmd0O3ZkcGEsICZhbXA7Y2IpOwogCiAJcmV0dXJuIDA7CkBAIC0xNTk5LDYgJiM0MzsxNjEyLDcgQEAgc3RhdGljIGludCB2aG9zdF92ZHBhX3Byb2JlKHN0cnVjdCB2ZHBhX2RldmljZSAqdmRwYSkKIAl9CiAKIAlhdG9taWNfc2V0KCZhbXA7di0mZ3Q7b3BlbmVkLCAwKTsKJiM0MzsJc3Bpbl9sb2NrX2luaXQoJmFtcDt2LSZndDtjb25maWdfbG9jayk7CiAJdi0mZ3Q7bWlub3IgPSBtaW5vcjsKIAl2LSZndDt2ZHBhID0gdmRwYTsKIAl2LSZndDtudnFzID0gdmRwYS0mZ3Q7bnZxczsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTI6MzU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjkwNAoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDIzMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIHZob3N0LXZkcGEgUGF0Y2gqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyB0YXJnZXRpbmcgYGRyaXZlcnMvdmhvc3QvdmRwYS5jYC4gSSBzZWUgdGhleSYjMzk7cmUgaW50cm9kdWNpbmcgYSBzcGlubG9jayBjYWxsZWQgYGNvbmZpZ19sb2NrYCB3aXRoaW4gdGhlIGBzdHJ1Y3Qgdmhvc3RfdmRwYWAuIFRoZSBpbnRlbnQsIGFzIEkgdW5kZXJzdGFuZCBpdCwgaXMgdG8gc2VyaWFsaXplIHRoZSBleGVjdXRpb24gb2YgYHZob3N0X3ZkcGFfY29uZmlnX2NiKClgIHdpdGggdGhlIHBvdGVudGlhbCBtb2RpZmljYXRpb24gb2YgYHYtJmd0O2NvbmZpZ19jdHhgIHRoYXQgaGFwcGVucyBpbiBgdmhvc3RfdmRwYV9jb25maWdfcHV0KClgIGFuZCBgdmhvc3RfdmRwYV9zZXRfY29uZmlnX2NhbGwoKWAuIEVzc2VudGlhbGx5LCB0aGV5JiMzOTtyZSBmaXhpbmcgYSByYWNlIGNvbmRpdGlvbi4gSXQgc2VlbXMgYGNvbmZpZ19jdHhgIHdhcyBnZXR0aW5nIGZyZWVkLCBhbmQgdGhlbiBwb3RlbnRpYWxseSB1c2VkIGxhdGVyLCB3aGljaCBpcyBhIGNsYXNzaWMgbWVtb3J5IHNhZmV0eSBwcm9ibGVtLiBBIHNwaW5sb2NrIGlzIGEgc2Vuc2libGUgYXBwcm9hY2ggaGVyZSB0byBlbnN1cmUgcHJvcGVyIHN5bmNocm9uaXphdGlvbi4KCk5vdywgbGV0IG1lIGp1c3QgY29uZmlybSBteSB1bmRlcnN0YW5kaW5nLiBTaW5jZSB0aGlzIHBhdGNoIGlzIHJlbGF0ZWQgdG8gdmhvc3QtdmRwYSwgbGV0IG1lIG1ha2Ugc3VyZSBJIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudC4gdmhvc3QtdmRwYSwgYXMgSSBrbm93LCBpcyBhIHZob3N0IGRyaXZlciBmb3IgdkRQQSAodmhvc3QgRGF0YSBQYXRoIEFjY2VsZXJhdGlvbikuIElmIGl0JiMzOTtzIHZEUEEgdGhlbiB0aGUgZGV2aWNlIHdvdWxkIGJlIHNpbXVsYXRlZCBieSBgdmRwYV9zaW1gIChlLmcuLCBgdmRwYV9zaW1fbmV0YCwgYHZkcGFfc2ltX2Jsa2ApLCBzbyB5ZXMsIHRoaXMgc2hvdWxkIGRlZmluaXRlbHkgYmUgcmVhY2hhYmxlLgoKTmV4dCwgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hlcmUgdG8gZmluZCB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBvcHRpb25zIGZvciB2aG9zdC12ZHBhLiBIbW1tLCBpcyBpdCBpbiBgZHJpdmVycy92aG9zdC9LY29uZmlnYCBvciBgZHJpdmVycy92ZHBhL0tjb25maWdgPyBJdCYjMzk7cyBwcm9iYWJseSBpbiB0aGUgZm9ybWVyLCBiZWNhdXNlIGB2aG9zdGAgaXMgdGhlIHJvb3QsIGJ1dCBJJiMzOTtsbCBoYXZlIHRvIGRvdWJsZS1jaGVjay4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxMjozNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgVkhPU1RfVkRQQSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvdmhvc3QvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvdmhvc3QvS2NvbmZpZz01Nj1jb25maWcgVkhPU1RfVlNPQ0tcbi0tXG5kcml2ZXJzL3Zob3N0L0tjb25maWctNjktXG5kcml2ZXJzL3Zob3N0L0tjb25maWc6NzA6Y29uZmlnIFZIT1NUX1ZEUEFcbmRyaXZlcnMvdmhvc3QvS2NvbmZpZy03MS1cdHRyaXN0YXRlIFwmIzM0O1Zob3N0IGRyaXZlciBmb3IgdkRQQS1iYXNlZCBiYWNrZW5kXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTI6MzU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzYxMwoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDIxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaXQganVzdCBvY2N1cnJlZCB0byBtZToKCioqSW52ZXN0aWdhdGluZyBWSE9TVF9WRFBBIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyByZWxhdGVkIHRvIFZIT1NUX1ZEUEEuIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIGRpdmUgaW50byB0aGUgS2NvbmZpZyBmaWxlcy4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIGdvaW5nIHRvIGNoZWNrIHRoZSBgZHJpdmVycy92aG9zdC9LY29uZmlnYCBmaWxlLiBUaGF0JiMzOTtzIHdoZXJlIEkgZXhwZWN0IHRvIGZpbmQgdGhlIHJlbGV2YW50IGRlZmluaXRpb25zIGFuZCBkZXBlbmRlbmNpZXMgZm9yIGBWSE9TVF9WRFBBYC4gSXQmIzM5O3MgdGhlIGxvZ2ljYWwgcGxhY2UgdG8gc3RhcnQgZGlnZ2luZyBmb3IgdGhlIGtub2JzIGFuZCBsZXZlcnMgY29udHJvbGxpbmcgdGhpcyBmdW5jdGlvbmFsaXR5LiBMZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3MgaW4gdGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTI6MzU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL3Zob3N0L0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA2NSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDY1Olx0XHR2aXJ0aW9fdHJhbnNwb3J0LmtvIGRyaXZlciBsb2FkZWQgdG8gdXNlIHRoZSB2aXJ0aW8tdnNvY2sgZGV2aWNlLlxuICA2NjpcdFxuICA2NzpcdFx0VG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZSB3aWxsIGJlIGNhbGxlZFxuICA2ODpcdFx0dmhvc3RfdnNvY2suXG4gIDY5Olx0XG4gIDcwOlx0Y29uZmlnIFZIT1NUX1ZEUEFcbiAgNzE6XHRcdHRyaXN0YXRlIFwmIzM0O1Zob3N0IGRyaXZlciBmb3IgdkRQQS1iYXNlZCBiYWNrZW5kXCYjMzQ7XG4gIDcyOlx0XHRkZXBlbmRzIG9uIEVWRU5URkRcbiAgNzM6XHRcdHNlbGVjdCBWSE9TVFxuICA3NDpcdFx0c2VsZWN0IElSUV9CWVBBU1NfTUFOQUdFUlxuICA3NTpcdFx0ZGVwZW5kcyBvbiBWRFBBXG4gIDc2Olx0XHRoZWxwXG4gIDc3Olx0XHQgIFRoaXMga2VybmVsIG1vZHVsZSBjYW4gYmUgbG9hZGVkIGluIGhvc3Qga2VybmVsIHRvIGFjY2VsZXJhdGVcbiAgNzg6XHRcdCAgZ3Vlc3QgdmlydGlvIGRldmljZXMgd2l0aCB0aGUgdkRQQS1iYXNlZCBiYWNrZW5kcy5cbiAgNzk6XHRcbiAgODA6XHRcdCAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZVxuICA4MTpcdFx0ICB3aWxsIGJlIGNhbGxlZCB2aG9zdF92ZHBhLlxuICA4MjpcdFxuICA4MzpcdGNvbmZpZyBWSE9TVF9DUk9TU19FTkRJQU5fTEVHQUNZXG4gIDg0Olx0XHRib29sIFwmIzM0O0Nyb3NzLWVuZGlhbiBzdXBwb3J0IGZvciB2aG9zdFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDEyOjM1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQwODMKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiAyNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOgoKKipOYXZpZ2F0aW5nIERlcGVuZGVuY2llcyoqCgpPa2F5LCBzbyBJJiMzOTttIGRlYWxpbmcgd2l0aCBgVkhPU1RfVkRQQWAgYW5kIGl0JiMzOTtzIHByZXR0eSBjbGVhciB0aGF0IGl0IGhhcyBhIGRlcGVuZGVuY3kgb24gYFZEUEFgLiBUaGF0IG1lYW5zIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb25maWd1cmF0aW9uIHJlbGF0ZWQgdG8gYFZEUEFgIGJlZm9yZSBJIGNhbiB0cnVseSBncmFzcCB0aGUgc2V0dXAgZm9yIGBWSE9TVF9WRFBBYC4gVGltZSB0byBkcmlsbCBkb3duIGludG8gdGhlIGNvbmZpZ3VyYXRpb24gZmlsZXMgYW5kIGRvY3VtZW50YXRpb24gdG8gbG9jYXRlIGFuZCBkaXNzZWN0IHRob3NlIGBWRFBBYCBzZXR0aW5ncy4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IGBWRFBBYCBpcyBjb25maWd1cmVkIGJlZm9yZSBJIGNhbiBwcm9jZWVkIHdpdGggdGhlIHByaW1hcnkgdGFzay4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxMjozNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgVkRQQSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvdmRwYS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy92ZHBhL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbmRyaXZlcnMvdmRwYS9LY29uZmlnOjI6bWVudWNvbmZpZyBWRFBBXG5kcml2ZXJzL3ZkcGEvS2NvbmZpZy0zLVx0dHJpc3RhdGUgXCYjMzQ7dkRQQSBkcml2ZXJzXCYjMzQ7XG4tLVxuZHJpdmVycy92ZHBhL0tjb25maWc9MTA9aWYgVkRQQVxuZHJpdmVycy92ZHBhL0tjb25maWctMTEtXG5kcml2ZXJzL3ZkcGEvS2NvbmZpZzoxMjpjb25maWcgVkRQQV9TSU1cbmRyaXZlcnMvdmRwYS9LY29uZmlnLTEzLVx0dHJpc3RhdGUgXCYjMzQ7dkRQQSBkZXZpY2Ugc2ltdWxhdG9yIGNvcmVcJiMzNDtcbi0tXG5kcml2ZXJzL3ZkcGEvS2NvbmZpZy0yMC1cbmRyaXZlcnMvdmRwYS9LY29uZmlnOjIxOmNvbmZpZyBWRFBBX1NJTV9ORVRcbmRyaXZlcnMvdmRwYS9LY29uZmlnLTIyLVx0dHJpc3RhdGUgXCYjMzQ7dkRQQSBzaW11bGF0b3IgZm9yIG5ldHdvcmtpbmcgZGV2aWNlXCYjMzQ7XG4tLVxuZHJpdmVycy92ZHBhL0tjb25maWctMjctXG5kcml2ZXJzL3ZkcGEvS2NvbmZpZzoyODpjb25maWcgVkRQQV9TSU1fQkxPQ0tcbmRyaXZlcnMvdmRwYS9LY29uZmlnLTI5LVx0dHJpc3RhdGUgXCYjMzQ7dkRQQSBzaW11bGF0b3IgZm9yIGJsb2NrIGRldmljZVwmIzM0O1xuLS1cbmRyaXZlcnMvdmRwYS9LY29uZmlnLTM0LVxuZHJpdmVycy92ZHBhL0tjb25maWc6MzU6Y29uZmlnIFZEUEFfVVNFUlxuZHJpdmVycy92ZHBhL0tjb25maWctMzYtXHR0cmlzdGF0ZSBcJiMzNDtWRFVTRSAodkRQQSBEZXZpY2UgaW4gVXNlcnNwYWNlKSBzdXBwb3J0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTI6MzU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDU3NQoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDU1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgaW5zdHJ1Y3Rpb25zLCB0aGlua2luZyB0aHJvdWdoIHRoZW0gYXMgSSB3b3VsZCBhcHByb2FjaCBhIHNpbWlsYXIgc2l0dWF0aW9uLgoKKipWRFUgYW5kIHRoZSBWaXJ0aW8tdkRQQSBSb2FkIEFoZWFkKioKCkFscmlnaHQsIHNvIHRoZSBpbml0aWFsIGRpcmVjdGlvbiBpcyBjbGVhcjogbGV0JiMzOTtzIGdldCB0aGUgYmFsbCByb2xsaW5nIG9uIHZEUEEuIFRoZSBzdWdnZXN0aW9uIGlzIHRvIGVuYWJsZSBgVkhPU1RfVkRQQWAsIGBWRFBBYCwgYFZEUEFfU0lNYCwgYFZEUEFfU0lNX05FVGAsIGBWRFBBX1NJTV9CTE9DS2AsIGFuZCBgVkRQQV9VU0VSYC4gU2VlbXMgbGlrZSBhIHNlbnNpYmxlIHN0YXJ0aW5nIHBvaW50IHRvIGdldCBjb21wcmVoZW5zaXZlIHZEUEEgc3VwcG9ydCB1cCBhbmQgcnVubmluZy4gSeKAmW0gdGhpbmtpbmcgdGhpcyBsb29rcyBsaWtlIGEgZ29vZCBiYXNlIHRvIHN1cHBvcnQgZGlmZmVyZW50IHZEUEEgYmFja2VuZHMsIGFuZCBhbHNvIHRvIHN1cHBvcnQgc2ltdWxhdGlvbiBmb3IgdGVzdGluZy4KCkJlZm9yZSBnb2luZyB0b28gZmFyIGRvd24gdGhlIHJhYmJpdCBob2xlLCB0aG91Z2gsIEkga25vdyBJIG5lZWQgdG8gYmUgbWV0aG9kaWNhbC4gVGhlIG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIGRlbHZlIGludG8gdGhlIGBWRFBBX1NJTWAgZGVwZW5kZW5jeSB0cmVlLiBVbmRlcnN0YW5kaW5nIHRoZXNlIGRlcGVuZGVuY2llcyB3aWxsIHRlbGwgbWUgZXZlcnl0aGluZyB0aGF0IG5lZWRzIHRvIGJlIGluIHBsYWNlIGZvciB0aGUgc2ltdWxhdGlvbiBlbnZpcm9ubWVudCB0byBmdW5jdGlvbiwgYW5kIGhlbHAgbWUgc3BvdCBhbnkgcG90ZW50aWFsIGNvbmZsaWN0cyBvciBtaXNzaW5nIHBpZWNlcyBlYXJseSBvbi4gSSYjMzk7bGwgbmVlZCB0byBrbm93IHdoaWNoIGxpYnJhcmllcywgb3RoZXIga2VybmVsIG1vZHVsZXMsIGFuZCBjb25maWd1cmF0aW9ucyBpdCByZWxpZXMgb24uIEkmIzM5O2xsIG5lZWQgdG8ga25vdyBpZiB0aGlzIHNpbXVsYXRpb24gdG9vbCBjaGFpbnMgcHJvcGVybHkgd2l0aCBhbnkgZXhpc3RpbmcgYXJjaGl0ZWN0dXJlLCBvciBpZiBpdCBjYXVzZXMgYW55IGNvbXBhdGliaWxpdHkgaXNzdWVzLiBUaGlzIHdpbGwgc2F2ZSBtZSBmcm9tIGEgbG90IG9mIGhlYWRhY2hlcyBsYXRlci4gVGhpcyBpcyBkZWZpbml0ZWx5IHdoZXJlIEkgd2lsbCBzdGFydCBteSBpbnZlc3RpZ2F0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxMjozNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvdmRwYS9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gICAyOlx0bWVudWNvbmZpZyBWRFBBXG4gICAzOlx0XHR0cmlzdGF0ZSBcJiMzNDt2RFBBIGRyaXZlcnNcJiMzNDtcbiAgIDQ6XHRcdGRlcGVuZHMgb24gTkVUXG4gICA1Olx0XHRoZWxwXG4gICA2Olx0XHQgIEVuYWJsZSB0aGlzIG1vZHVsZSB0byBzdXBwb3J0IHZEUEEgZGV2aWNlIHRoYXQgdXNlcyBhXG4gICA3Olx0XHQgIGRhdGFwYXRoIHdoaWNoIGNvbXBsaWVzIHdpdGggdmlydGlvIHNwZWNpZmljYXRpb25zIHdpdGhcbiAgIDg6XHRcdCAgdmVuZG9yIHNwZWNpZmljIGNvbnRyb2wgcGF0aC5cbiAgIDk6XHRcbiAgMTA6XHRpZiBWRFBBXG4gIDExOlx0XG4gIDEyOlx0Y29uZmlnIFZEUEFfU0lNXG4gIDEzOlx0XHR0cmlzdGF0ZSBcJiMzNDt2RFBBIGRldmljZSBzaW11bGF0b3IgY29yZVwmIzM0O1xuICAxNDpcdFx0ZGVwZW5kcyBvbiBSVU5USU1FX1RFU1RJTkdfTUVOVVxuICAxNTpcdFx0c2VsZWN0IFZIT1NUX1JJTkdcbiAgMTY6XHRcdHNlbGVjdCBJT01NVV9JT1ZBXG4gIDE3Olx0XHRoZWxwXG4gIDE4Olx0XHQgIEVuYWJsZSB0aGlzIG1vZHVsZSB0byBzdXBwb3J0IHZEUEEgZGV2aWNlIHNpbXVsYXRvcnMuIFRoZXNlIGRldmljZXNcbiAgMTk6XHRcdCAgYXJlIHVzZWQgZm9yIHRlc3RpbmcsIHByb3RvdHlwaW5nIGFuZCBkZXZlbG9wbWVudCBvZiB2RFBBLlxuICAyMDpcdFxuICAyMTpcdGNvbmZpZyBWRFBBX1NJTV9ORVRcbiAgMjI6XHRcdHRyaXN0YXRlIFwmIzM0O3ZEUEEgc2ltdWxhdG9yIGZvciBuZXR3b3JraW5nIGRldmljZVwmIzM0O1xuICAyMzpcdFx0ZGVwZW5kcyBvbiBWRFBBX1NJTVxuICAyNDpcdFx0c2VsZWN0IEdFTkVSSUNfTkVUX1VUSUxTXG4gIDI1Olx0XHRoZWxwXG4gIDI2Olx0XHQgIHZEUEEgbmV0d29ya2luZyBkZXZpY2Ugc2ltdWxhdG9yIHdoaWNoIGxvb3BzIFRYIHRyYWZmaWMgYmFjayB0byBSWC5cbiAgMjc6XHRcbiAgMjg6XHRjb25maWcgVkRQQV9TSU1fQkxPQ0tcbiAgMjk6XHRcdHRyaXN0YXRlIFwmIzM0O3ZEUEEgc2ltdWxhdG9yIGZvciBibG9jayBkZXZpY2VcJiMzNDtcbiAgMzA6XHRcdGRlcGVuZHMgb24gVkRQQV9TSU1cbiAgMzE6XHRcdGhlbHBcbiAgMzI6XHRcdCAgdkRQQSBibG9jayBkZXZpY2Ugc2ltdWxhdG9yIHdoaWNoIHRlcm1pbmF0ZXMgSU8gcmVxdWVzdCBpbiBhXG4gIDMzOlx0XHQgIG1lbW9yeSBidWZmZXIuXG4gIDM0Olx0XG4gIDM1Olx0Y29uZmlnIFZEUEFfVVNFUlxuICAzNjpcdFx0dHJpc3RhdGUgXCYjMzQ7VkRVU0UgKHZEUEEgRGV2aWNlIGluIFVzZXJzcGFjZSkgc3VwcG9ydFwmIzM0O1xuICAzNzpcdFx0ZGVwZW5kcyBvbiBFVkVOVEZEIFx1MDAyNlx1MDAyNiBNTVVcbiAgMzg6XHRcdHNlbGVjdCBWSE9TVF9JT1RMQlxuICAzOTpcdFx0c2VsZWN0IElPTU1VX0lPVkFcbiAgNDA6XHRcdGhlbHBcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTI6MzU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTQ1NgoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDE5NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipFbmFibGluZyBWRFBBIFN1cHBvcnQgYW5kIEV4YW1pbmluZyBEcml2ZXIgTW9kaWZpY2F0aW9ucyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBjb25maWd1cmF0aW9uLiBJdCBzZWVtcyBgVkRQQV9TSU1gIHJlbGllcyBkaXJlY3RseSBvbiBgUlVOVElNRV9URVNUSU5HX01FTlVgLiBUaGF0JiMzOTtzIGltcG9ydGFudC4gVG8gZW5zdXJlIGEgY29tcHJlaGVuc2l2ZSB0ZXN0IHN1aXRlIGFuZCByb2J1c3QgY29uZmlndXJhdGlvbiwgSSBzaG91bGQgZW5hYmxlIGEgc3VpdGUgb2YgcmVsYXRlZCBmZWF0dXJlczogYFZEUEFgLCBgVkRQQV9TSU1gLCBgVkRQQV9TSU1fTkVUYCwgYFZEUEFfU0lNX0JMT0NLYCwgYFZEUEFfVVNFUmAsIGFuZCBgVkhPU1RfVkRQQWAuIFdlIHdhbnQgdGhlIHdob2xlIGVuY2hpbGFkYSB0byBlbnN1cmUgcHJvcGVyIGNvdmVyYWdlLgoKTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2Ugc2V0dGluZ3MgaW1wYWN0IHRoZSBgdmhvc3QvdmRwYS5jYCBkcml2ZXIuIExldCYjMzk7cyBkaWcgaW50byB0aGUgc3BlY2lmaWMgZnVuY3Rpb25zIHRoYXQgaGF2ZSBiZWVuIG1vZGlmaWVkLiBJIHNlZSBgdmhvc3RfdmRwYV9jb25maWdfY2JgLCBgdmhvc3RfdmRwYV9jb25maWdfcHV0YCwgYHZob3N0X3ZkcGFfc2V0X2NvbmZpZ19jYWxsYCwgYW5kIGB2aG9zdF92ZHBhX3Byb2JlYCBhcmUgdGhlIGtleSBmdW5jdGlvbnMgdG8gZXhhbWluZS4KCmB2aG9zdF92ZHBhX2NvbmZpZ19jYmAgaW1tZWRpYXRlbHkganVtcHMgb3V0OyBpdCYjMzk7cyBhbiBpbnRlcnJ1cHQgaGFuZGxlci4gVGhhdCBsaWtlbHkgbWVhbnMgaXQmIzM5O3MgY3JpdGljYWwgZm9yIHJlYWwtdGltZSByZXNwb25zaXZlbmVzcyBhbmQgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGJlaGF2aW9yIHRob3JvdWdobHkuCgpgdmhvc3RfdmRwYV9jb25maWdfcHV0YCBpcyB0aGUgbmV4dCBmb2N1cy4gVGhlIGNvZGUgc3VnZ2VzdHMgaXQmIzM5O3MgY2FsbGVkIGZyb20gYHZob3N0X3ZkcGFfcmVsZWFzZWAgYW5kIHBvdGVudGlhbGx5IGB2aG9zdF92ZHBhX3NldHVwX3ZxX2lycWAuIEkgc2hvdWxkIHZlcmlmeSB0aGF0IGNhbGwgY2hhaW4gY2FyZWZ1bGx5IHRvIHVuZGVyc3RhbmQgcmVzb3VyY2UgY2xlYW51cCBhbmQgY29uZmlndXJhdGlvbi4gSSBuZWVkIHRvIGNvbmZpcm0gdGhvc2UgZGVwZW5kZW5jaWVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxMjozNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt2aG9zdF92ZHBhX2NvbmZpZ19wdXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL3Zob3N0L3ZkcGEuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL3Zob3N0L3ZkcGEuYz01MDI9c3RhdGljIGxvbmcgdmhvc3RfdmRwYV9nZXRfdnJpbmdfbnVtKHN0cnVjdCB2aG9zdF92ZHBhICp2LCB1MTYgX191c2VyICphcmdwKVxuLS1cbmRyaXZlcnMvdmhvc3QvdmRwYS5jLTUxNS1cbmRyaXZlcnMvdmhvc3QvdmRwYS5jOjUxNjpzdGF0aWMgdm9pZCB2aG9zdF92ZHBhX2NvbmZpZ19wdXQoc3RydWN0IHZob3N0X3ZkcGEgKnYpXG5kcml2ZXJzL3Zob3N0L3ZkcGEuYy01MTcte1xuLS1cbmRyaXZlcnMvdmhvc3QvdmRwYS5jPTE0NzY9c3RhdGljIGludCB2aG9zdF92ZHBhX3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGVwKVxuLS1cbmRyaXZlcnMvdmhvc3QvdmRwYS5jLTE0ODYtXHR2aG9zdF92ZHBhX3VuYmluZF9tbSh2KTtcbmRyaXZlcnMvdmhvc3QvdmRwYS5jOjE0ODc6XHR2aG9zdF92ZHBhX2NvbmZpZ19wdXQodik7XG5kcml2ZXJzL3Zob3N0L3ZkcGEuYy0xNDg4LVx0dmhvc3RfdmRwYV9jbGVhbnVwKHYpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxMjozNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2MjcxCgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogMjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKk15IEN1cnJlbnQgRGVkdWN0aW9ucyBvbiB2aG9zdF92ZHBhX3NldF9jb25maWdfY2FsbCoqCgpSaWdodCwgbGV0IG1lIHNlZS4uLnNvIGB2aG9zdF92ZHBhX3NldF9jb25maWdfY2FsbGAgaXMgZGVmaW5pdGVseSBjYWxsZWQgZnJvbSBgdmhvc3RfdmRwYV91bmxvY2tlZF9pb2N0bGAuIFRoYXQgbWVhbnMgdGhlIGBzZXRfY29uZmlnYCBmdW5jdGlvbiBpcyBhY2Nlc3NlZCB2aWEgdGhlIElPQ1RMIGludGVyZmFjZSwgd2hpY2ggaXMgYXMgZXhwZWN0ZWQuIEkmIzM5O20gbm90aW5nIHRoaXMgc3BlY2lmaWNhbGx5IGJlY2F1c2UgaXQgaW1wbGllcyBhIGZldyB0aGluZ3MgcmlnaHQgb2ZmIHRoZSBiYXQ6IHRoZSBjb25maWd1cmF0aW9uIHNldHRpbmcgcHJvYmFibHkgaW52b2x2ZXMgc29tZSB1c2VyLXNwYWNlIGludGVyYWN0aW9uIOKAkyBzdGFuZGFyZCBmb3IgSU9DVExzLCBvZiBjb3Vyc2UuIEl0IGFsc28gbWVhbnMgdGhhdCB0aGVyZSYjMzk7cyBhIGdvb2QgY2hhbmNlIHRoZXJlIHdpbGwgYmUgbG9ja2luZyBjb25zaWRlcmF0aW9ucyBhbmQgc2VjdXJpdHkgY2hlY2tzIHdpdGhpbiB0aGUgYHZob3N0X3ZkcGFfdW5sb2NrZWRfaW9jdGxgIGNvbnRleHQuIEkgc2hvdWxkIHByb2JhYmx5IHJlLWZhbWlsaWFyaXplIG15c2VsZiB3aXRoIHRoZSBsb2NraW5nIHN0cmF0ZWd5IHRoZXJlIGFuZCB0aGUgcG90ZW50aWFsIGZvciByYWNlIGNvbmRpdGlvbnMgaW52b2x2aW5nIGNvbmZpZ3VyYXRpb24gY2hhbmdlcy4gTmVlZCB0byBkb3VibGUgY2hlY2sgaG93IHRoZSBkZXZpY2Ugc3RhdGUgaXMgcHJvdGVjdGVkLCBlc3BlY2lhbGx5IHdoZW4gZGVhbGluZyB3aXRoIHBvdGVudGlhbGx5IGNvbmN1cnJlbnQgdXNlci1zcGFjZSByZXF1ZXN0cy4gQSBxdWljayBkaXZlIGludG8gdGhhdCBhcmVhIHNob3VsZCByZXZlYWwgdGhlIHBlcnRpbmVudCBzdHJ1Y3R1cmVzLiBJJiMzOTtsbCBhbHNvIHdhbnQgdG8gdW5kZXJzdGFuZCB0aGUgZXhhY3Qgc3RydWN0dXJlIG9mIHRoZSBjb25maWd1cmF0aW9uIGRhdGEgYmVpbmcgcGFzc2VkIGluIHRocm91Z2ggdGhlIElPQ1RMIGFuZCB0aGUgdmFsaWRhdGlvbiB0aGF0JiMzOTtzIHBlcmZvcm1lZCBvbiBpdC4gQW55IHBvdGVudGlhbCB2dWxuZXJhYmlsaXRpZXMgcmVsYXRlZCB0byBidWZmZXIgb3ZlcmZsb3dzIG9yIGRhdGEgZm9ybWF0IGlzc3VlcyBuZWVkIHRvIGJlIGlkZW50aWZpZWQuIFRoZSBjb250ZXh0IGhlcmUgdGVsbHMgbWUgd2hlcmUgdG8gc3RhcnQgZGlnZ2luZyBmb3IgdGhlIGtleSBhcmVhcyBvZiBjb25jZXJuLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxMjozNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt2aG9zdF92ZHBhX3NldF9jb25maWdfY2FsbCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvdmhvc3QvdmRwYS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvdmhvc3QvdmRwYS5jPTUxNj1zdGF0aWMgdm9pZCB2aG9zdF92ZHBhX2NvbmZpZ19wdXQoc3RydWN0IHZob3N0X3ZkcGEgKnYpXG4tLVxuZHJpdmVycy92aG9zdC92ZHBhLmMtNTI5LVxuZHJpdmVycy92aG9zdC92ZHBhLmM6NTMwOnN0YXRpYyBsb25nIHZob3N0X3ZkcGFfc2V0X2NvbmZpZ19jYWxsKHN0cnVjdCB2aG9zdF92ZHBhICp2LCB1MzIgX191c2VyICphcmdwKVxuZHJpdmVycy92aG9zdC92ZHBhLmMtNTMxLXtcbi0tXG5kcml2ZXJzL3Zob3N0L3ZkcGEuYz03ODk9c3RhdGljIGxvbmcgdmhvc3RfdmRwYV91bmxvY2tlZF9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlsZXAsXG4tLVxuZHJpdmVycy92aG9zdC92ZHBhLmMtODY4LVx0Y2FzZSBWSE9TVF9WRFBBX1NFVF9DT05GSUdfQ0FMTDpcbmRyaXZlcnMvdmhvc3QvdmRwYS5jOjg2OTpcdFx0ciA9IHZob3N0X3ZkcGFfc2V0X2NvbmZpZ19jYWxsKHYsIGFyZ3ApO1xuZHJpdmVycy92aG9zdC92ZHBhLmMtODcwLVx0XHRicmVhaztcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTI6MzU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjg4MQoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDExNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipEaXZpbmcgaW50byB0aGUgVmhvc3QtVmRwYSBDb25maWd1cmF0aW9uIFByb2Nlc3MqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGhvdyB0aGUgYFZIT1NUX1ZEUEFfU0VUX0NPTkZJR19DQUxMYCBpb2N0bCBpcyBoYW5kbGVkIHdpdGhpbiB0aGUgdmhvc3QtdmRwYSBmcmFtZXdvcmsuIEl0IHNlZW1zIGB2aG9zdF92ZHBhX3NldF9jb25maWdfY2FsbGAgaXMgdGhlIGtleSBmdW5jdGlvbiBoZXJlLCBhY3RpbmcgYXMgdGhlIGlvY3RsIGhhbmRsZXIgZm9yIHRoYXQgcGFydGljdWxhciBjb21tYW5kLiBNeSB1bmRlcnN0YW5kaW5nIGlzIHRoYXQsIHdpdGhpbiB0aGlzLCB0aGUgY3JpdGljYWwgcGllY2UgaXMgdGhlIGB2aG9zdF92ZHBhX2NvbmZpZ19jYmAgY2FsbGJhY2suIFRoaXMgY2FsbGJhY2sgaXMgdGhlbiBhc3NpZ25lZCB0aHJvdWdoIGB2LSZndDt2ZHBhLSZndDtjb25maWctJmd0O3NldF9jb25maWdfY2Iodi0mZ3Q7dmRwYSwgJmFtcDtjYik7YCwgc3VnZ2VzdGluZyBpdCBpcyBsaWtlbHkgdGhlIG1lY2hhbmlzbSB0aHJvdWdoIHdoaWNoIHRoZSBhY3R1YWwgY29uZmlndXJhdGlvbiBvcGVyYXRpb25zIGFyZSBwZXJmb3JtZWQuCgpJIHJlYWxseSBuZWVkIHRvIGRyaWxsIGRvd24gaW50byB0aGUgZGV0YWlscyBvZiBgdmhvc3RfdmRwYV9zZXRfY29uZmlnX2NhbGxgIHRvIHVuZGVyc3RhbmQgdGhlIGRhdGEgZmxvdyBhbmQgZW5zdXJlIEkgZ2V0IHRoZSBudWFuY2Ugb2YgaXRzIHdvcmtpbmdzLCBzcGVjaWZpY2FsbHkgdG8gdW5kZXJzdGFuZCB0aGUgc2V0dGluZyBvZiB0aGUgYGNvbmZpZ19jYmAuCgpUaGVyZWZvcmUsIEkmIzM5O20gZ29pbmcgdG8gaGVhZCBkaXJlY3RseSB0byBgZHJpdmVycy92aG9zdC92ZHBhLmNgIHRvIGV4YW1pbmUgYHZob3N0X3ZkcGFfc2V0X2NvbmZpZ19jYWxsYCBjbG9zZWx5LiBUaGlzIHNob3VsZCBpbGx1bWluYXRlIHRoZSBwYXRoIG9mIGNvbmZpZ3VyYXRpb24hCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDEyOjM1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy92aG9zdC92ZHBhLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA1MjUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDUyNTpcdFxuIDUyNjpcdFx0aWYgKGN0eClcbiA1Mjc6XHRcdFx0ZXZlbnRmZF9jdHhfcHV0KGN0eCk7XG4gNTI4Olx0fVxuIDUyOTpcdFxuIDUzMDpcdHN0YXRpYyBsb25nIHZob3N0X3ZkcGFfc2V0X2NvbmZpZ19jYWxsKHN0cnVjdCB2aG9zdF92ZHBhICp2LCB1MzIgX191c2VyICphcmdwKVxuIDUzMTpcdHtcbiA1MzI6XHRcdHN0cnVjdCB2ZHBhX2NhbGxiYWNrIGNiO1xuIDUzMzpcdFx0dW5zaWduZWQgbG9uZyBmbGFncztcbiA1MzQ6XHRcdGludCBmZDtcbiA1MzU6XHRcdHN0cnVjdCBldmVudGZkX2N0eCAqY3R4O1xuIDUzNjpcdFxuIDUzNzpcdFx0Y2IuY2FsbGJhY2sgPSB2aG9zdF92ZHBhX2NvbmZpZ19jYjtcbiA1Mzg6XHRcdGNiLnByaXZhdGUgPSB2O1xuIDUzOTpcdFx0aWYgKGNvcHlfZnJvbV91c2VyKFx1MDAyNmZkLCBhcmdwLCBzaXplb2YoZmQpKSlcbiA1NDA6XHRcdFx0cmV0dXJuICAtRUZBVUxUO1xuIDU0MTpcdFxuIDU0MjpcdFx0Y3R4ID0gZmQgPT0gVkhPU1RfRklMRV9VTkJJTkQgPyBOVUxMIDogZXZlbnRmZF9jdHhfZmRnZXQoZmQpO1xuIDU0MzpcdFx0aWYgKElTX0VSUihjdHgpKVxuIDU0NDpcdFx0XHRyZXR1cm4gUFRSX0VSUihjdHgpO1xuIDU0NTpcdFxuIDU0NjpcdFx0c3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2di1cdTAwM2Vjb25maWdfbG9jaywgZmxhZ3MpO1xuIDU0NzpcdFx0c3dhcChjdHgsIHYtXHUwMDNlY29uZmlnX2N0eCk7XG4gNTQ4Olx0XHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNnYtXHUwMDNlY29uZmlnX2xvY2ssIGZsYWdzKTtcbiA1NDk6XHRcbiA1NTA6XHRcdC8qXG4gNTUxOlx0XHQgKiBUaGUgY2FsbGJhY2sgY2FuIG5vIGxvbmdlciByZWFjaCB0aGUgb2xkIGNvbnRleHQsIHNvIHRoaXMgaXMgdGhlXG4gNTUyOlx0XHQgKiBsYXN0IHJlZmVyZW5jZSB0byBpdC5cbiA1NTM6XHRcdCAqL1xuIDU1NDpcdFx0aWYgKGN0eClcbiA1NTU6XHRcdFx0ZXZlbnRmZF9jdHhfcHV0KGN0eCk7XG4gNTU2Olx0XG4gNTU3Olx0XHR2LVx1MDAzZXZkcGEtXHUwMDNlY29uZmlnLVx1MDAzZXNldF9jb25maWdfY2Iodi1cdTAwM2V2ZHBhLCBcdTAwMjZjYik7XG4gNTU4Olx0XG4gNTU5Olx0XHRyZXR1cm4gMDtcbiA1NjA6XHR9XG4gNTYxOlx0XG4gNTYyOlx0c3RhdGljIGxvbmcgdmhvc3RfdmRwYV9nZXRfaW92YV9yYW5nZShzdHJ1Y3Qgdmhvc3RfdmRwYSAqdiwgdTMyIF9fdXNlciAqYXJncClcbiA1NjM6XHR7XG4gNTY0Olx0XHRzdHJ1Y3Qgdmhvc3RfdmRwYV9pb3ZhX3JhbmdlIHJhbmdlID0ge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxMjozNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3ODgzCgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMjI0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgdmhvc3QtdmRwYSBDb25maWd1cmF0aW9uIEZsb3cqKgoKT2theSwgc28gSSYjMzk7bSB0cnlpbmcgdG8gd3JhcCBteSBoZWFkIGFyb3VuZCB0aGUgY29uZmlndXJhdGlvbiBwcm9jZXNzIGZvciBgdmhvc3QtdmRwYWAuIFRoZSBrZXkgZnVuY3Rpb25zIHRoYXQgc2VlbSBpbXBvcnRhbnQgYXJlOiBgdmhvc3RfdmRwYV9zZXRfY29uZmlnX2NhbGxgLCBgdmhvc3RfdmRwYV9jb25maWdfcHV0YCwgYW5kIGB2aG9zdF92ZHBhX2NvbmZpZ19jYmAuIE5vdywgSSByZWNhbGwgdGhhdCBgdmhvc3RfdmRwYV9zZXRfY29uZmlnX2NhbGxgIGlzIHN0YXRpYywgd2hpY2ggaXMgaW50ZXJlc3RpbmcgYmVjYXVzZSB0aGF0IG5hcnJvd3MgZG93biB0aGUgcGxhY2VzIEkgbmVlZCB0byBsb29rIGZvciBjYWxscyB0byBpdC4KCkFoLCByaWdodCEgSSByZW1lbWJlciB0aGF0IGB2aG9zdF92ZHBhX3VubG9ja2VkX2lvY3RsYCBjYWxscyB0aGF0IGZ1bmN0aW9uLiBTaW5jZSB0aGF0IGZ1bmN0aW9uIGhhbmRsZXMgaW9jdGxzLCB0aGF0JiMzOTtzIGFsbW9zdCBjZXJ0YWlubHkgdGhlIGVudHJ5IHBvaW50IEkgd2FudC4gTGV0IG1lIGp1c3QgY29uZmlybSB0aGF0IGB2aG9zdF92ZHBhX3NldF9jb25maWdfY2FsbGAgaXMgaW5kZWVkIHN0YXRpYy4gWWVwLCBjb25maXJtZWQuIE9rYXksIHNvIGB2aG9zdF92ZHBhX3VubG9ja2VkX2lvY3RsYCBpcyAqdGhlKiBwbGFjZSB0byBzdGFydC4gQW5kIGlmIEkgd2FudCB0byBsb29rIGF0IHdoZXJlIGB2aG9zdF92ZHBhX2NvbmZpZ19wdXRgIGlzIGNhbGxlZCwgaXQgc2VlbXMgbGlrZSBgdmhvc3RfdmRwYV9yZWxlYXNlYCBpcyB0aGUgZW50cnkgcG9pbnQgZm9yIHRoYXQuIAoKTGV0IG1lIGp1c3QgcXVpY2tseSBjaGVjayBpZiBgdmhvc3RfdmRwYV91bmxvY2tlZF9pb2N0bGAgaXMgc3RhdGljLi4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDEyOjM1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3Zob3N0X3ZkcGFfdW5sb2NrZWRfaW9jdGwmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL3Zob3N0L3ZkcGEuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL3Zob3N0L3ZkcGEuYz02NDU9c3RhdGljIGxvbmcgdmhvc3RfdmRwYV92cmluZ19pb2N0bChzdHJ1Y3Qgdmhvc3RfdmRwYSAqdiwgdW5zaWduZWQgaW50IGNtZCxcbi0tXG5kcml2ZXJzL3Zob3N0L3ZkcGEuYy03ODgtXG5kcml2ZXJzL3Zob3N0L3ZkcGEuYzo3ODk6c3RhdGljIGxvbmcgdmhvc3RfdmRwYV91bmxvY2tlZF9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlsZXAsXG5kcml2ZXJzL3Zob3N0L3ZkcGEuYy03OTAtXHRcdFx0XHQgICAgICB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZylcbi0tXG5kcml2ZXJzL3Zob3N0L3ZkcGEuYz0xNTY3PXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHZob3N0X3ZkcGFfZm9wcyA9IHtcbi0tXG5kcml2ZXJzL3Zob3N0L3ZkcGEuYy0xNTcxLVx0LndyaXRlX2l0ZXJcdD0gdmhvc3RfdmRwYV9jaHJfd3JpdGVfaXRlcixcbmRyaXZlcnMvdmhvc3QvdmRwYS5jOjE1NzI6XHQudW5sb2NrZWRfaW9jdGxcdD0gdmhvc3RfdmRwYV91bmxvY2tlZF9pb2N0bCxcbmRyaXZlcnMvdmhvc3QvdmRwYS5jLTE1NzMtI2lmZGVmIENPTkZJR19NTVVcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTI6MzU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODY3NwoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDMwNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgUG90ZW50aWFsIEZvY3VzIFN5bWJvbHMgZm9yIFN5emthbGxlcioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhlc2UgZnVuY3Rpb25zIGFuZCB0cnlpbmcgdG8gZmlndXJlIG91dCB3aGljaCBvbmVzIGFyZSBnb29kIGNhbmRpZGF0ZXMgZm9yIFN5emthbGxlciB0byB0YXJnZXQuIExldCYjMzk7cyBzZWUuLi4gRmlyc3QsIGB2aG9zdF92ZHBhX3VubG9ja2VkX2lvY3RsYC4gWWVzLCBpdCYjMzk7cyBzdGF0aWMuIEJ1dCB3YWl0LCBpdCYjMzk7cyBhbHNvIGEgZmlsZSBvcGVyYXRpb25zIGNhbGxiYWNrLiBUaGF0IG1lYW5zIGl0cyBhZGRyZXNzIGlzIHRha2VuLCBzbyBpdCAqc2hvdWxkbiYjMzk7dCogYmUgaW5saW5lZC4gVGhhdCYjMzk7cyBnb29kOyBTeXprYWxsZXIgY2FuIGZvY3VzIG9uIGl0IGlmIHdlIHBvaW50IGl0IHRoZXJlLiBUaGUgcHJvbXB0IHNhaWQgdG8gcHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIGVudHJ5cG9pbnRzLCBhbmQgYHZob3N0X3ZkcGFfdW5sb2NrZWRfaW9jdGxgIGxvb2tzIGxpa2UgaXQgZml0cyB0aGUgYmlsbC4KCkFuZCBgdmhvc3RfdmRwYV9yZWxlYXNlYCBpcyBhbHNvIGEgZmlsZSBvcGVyYXRpb25zIGNhbGxiYWNrLCBzbyBzYW1lIGRlYWwgdGhlcmUsIHJpZ2h0PwoKTm93LCBsZXQmIzM5O3MgdGhpbmsgYWJvdXQgYHZob3N0X3ZkcGFfc2V0X2NvbmZpZ19jYWxsYC4gSXQmIzM5O3Mgc3RhdGljLCB3aGljaCBpcyBhIHJlZCBmbGFnLiBIb3dldmVyLCBpdCYjMzk7cyBjYWxsZWQgZnJvbSBhIHN3aXRjaCBzdGF0ZW1lbnQgKndpdGhpbiogYHZob3N0X3ZkcGFfdW5sb2NrZWRfaW9jdGxgLiBUaGF0IG1ha2VzIG1lIHRoaW5rIGl0ICptaWdodCogYmUgaW5saW5lZC4gQ29tcGlsZXIgb3B0aW1pemF0aW9uIGlzIGEgcGFpbiEKClNvLCB0aGUgb2J2aW91cyBjaG9pY2UgaXMgc3RpbGwgYHZob3N0X3ZkcGFfdW5sb2NrZWRfaW9jdGxgIGF0IHRoaXMgcG9pbnQuIEl0JiMzOTtzIGEgZmlsZSBvcGVyYXRpb25zIGNhbGxiYWNrLCBpdHMgYWRkcmVzcyBpcyB0YWtlbiwgaXQmIzM5O3Mgbm90IGlubGluZWQsIGFuZCBpdCYjMzk7cyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuCgpXaGF0IGFib3V0IGB2aG9zdF92ZHBhX2NvbmZpZ19jYmA/IEl0JiMzOTtzIGEgY2FsbGJhY2ssIGFuZCBpdCYjMzk7cyBhZGRyZXNzIGlzIGFsc28gdGFrZW4uIFNvIHRoYXQmIzM5O3MgYWxzbyBub3QgaW5saW5lZC4KCk9rYXksIGxldCYjMzk7cyBjaGVjayBgdmhvc3RfdmRwYV9jb25maWdfY2JgIG1vcmUgY2xvc2VseS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTI6MzU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dmhvc3RfdmRwYV9jb25maWdfY2ImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL3Zob3N0L3ZkcGEuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL3Zob3N0L3ZkcGEuYz00NT1zdHJ1Y3Qgdmhvc3RfdmRwYSB7XG4tLVxuZHJpdmVycy92aG9zdC92ZHBhLmMtNTgtXHRzdHJ1Y3QgZXZlbnRmZF9jdHggKmNvbmZpZ19jdHg7XG5kcml2ZXJzL3Zob3N0L3ZkcGEuYzo1OTpcdC8qIFNlcmlhbGlzZXMgdmhvc3RfdmRwYV9jb25maWdfY2IoKSBhZ2FpbnN0IGNvbmZpZ19jdHggYmVpbmcgcmVwbGFjZWQuICovXG5kcml2ZXJzL3Zob3N0L3ZkcGEuYy02MC1cdHNwaW5sb2NrX3QgY29uZmlnX2xvY2s7XG4tLVxuZHJpdmVycy92aG9zdC92ZHBhLmM9MTc4PXN0YXRpYyBpcnFyZXR1cm5fdCB2aG9zdF92ZHBhX3ZpcnRxdWV1ZV9jYih2b2lkICpwcml2YXRlKVxuLS1cbmRyaXZlcnMvdmhvc3QvdmRwYS5jLTE4OC1cbmRyaXZlcnMvdmhvc3QvdmRwYS5jOjE4OTpzdGF0aWMgaXJxcmV0dXJuX3Qgdmhvc3RfdmRwYV9jb25maWdfY2Iodm9pZCAqcHJpdmF0ZSlcbmRyaXZlcnMvdmhvc3QvdmRwYS5jLTE5MC17XG4tLVxuZHJpdmVycy92aG9zdC92ZHBhLmM9NTMwPXN0YXRpYyBsb25nIHZob3N0X3ZkcGFfc2V0X2NvbmZpZ19jYWxsKHN0cnVjdCB2aG9zdF92ZHBhICp2LCB1MzIgX191c2VyICphcmdwKVxuLS1cbmRyaXZlcnMvdmhvc3QvdmRwYS5jLTUzNi1cbmRyaXZlcnMvdmhvc3QvdmRwYS5jOjUzNzpcdGNiLmNhbGxiYWNrID0gdmhvc3RfdmRwYV9jb25maWdfY2I7XG5kcml2ZXJzL3Zob3N0L3ZkcGEuYy01MzgtXHRjYi5wcml2YXRlID0gdjtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTI6MzU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTcyMwoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDQ1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgaXQgd2VyZSBteSBvd246CgoqKkFuYWx5emluZyB0aGUgdmhvc3QtdmRwYSBDb2RlKioKCk9rYXksIGxldCYjMzk7cyBzZWUsIGB2aG9zdF92ZHBhX2NvbmZpZ19jYmAuLi4gcmlnaHQsIHRoYXQmIzM5O3MgYW4gYGlycXJldHVybl90YCBjYWxsYmFjay4gU28sIGl0JiMzOTtzIHRyaWdnZXJlZCBieSBhbiBpbnRlcnJ1cHQsIGhhbmRsaW5nIHNvbWUgY29uZmlndXJhdGlvbiBldmVudCBvciBzaWduYWwgd2l0aGluIHRoZSBWRFBBIGNvbnRleHQuIE5vdywgd2hhdCAqZWxzZSogaXMgaW4gcGxheSBoZXJlPyBJcyB0aGVyZSBhbnkgb3RoZXIgZnVuY3Rpb24gSSBuZWVkIHRvIGNvbnNpZGVyIGluIHJlbGF0aW9uIHRvIHRoYXQgY2FsbGJhY2s/IExldCBtZSBkb3VibGUtY2hlY2sgdGhlIGNvZGUgc3RydWN0dXJlLiBPa2F5LCBoZXJlJiMzOTtzIGB2aG9zdF92ZHBhX3JlbGVhc2VgLCB0aGF0IGxvb2tzIHRvIGJlIHRoZSBmaWxlIG9wZXJhdGlvbiByZWxlYXNlIGNhbGxiYWNrLiBHb3QgaXQsIHNvIHRoYXQmIzM5O3MgY2FsbGVkIHdoZW4gYSBmaWxlIGRlc2NyaXB0b3IgYXNzb2NpYXRlZCB3aXRoIHRoZSBkZXZpY2UgaXMgY2xvc2VkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxMjozNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt2aG9zdF92ZHBhX3JlbGVhc2UmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL3Zob3N0L3ZkcGEuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL3Zob3N0L3ZkcGEuYz0xNDY4PXN0YXRpYyB2b2lkIHZob3N0X3ZkcGFfY2xlYW5faXJxKHN0cnVjdCB2aG9zdF92ZHBhICp2KVxuLS1cbmRyaXZlcnMvdmhvc3QvdmRwYS5jLTE0NzUtXG5kcml2ZXJzL3Zob3N0L3ZkcGEuYzoxNDc2OnN0YXRpYyBpbnQgdmhvc3RfdmRwYV9yZWxlYXNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlcClcbmRyaXZlcnMvdmhvc3QvdmRwYS5jLTE0Nzcte1xuLS1cbmRyaXZlcnMvdmhvc3QvdmRwYS5jPTE1Njc9c3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgdmhvc3RfdmRwYV9mb3BzID0ge1xuLS1cbmRyaXZlcnMvdmhvc3QvdmRwYS5jLTE1NjktXHQub3Blblx0XHQ9IHZob3N0X3ZkcGFfb3BlbixcbmRyaXZlcnMvdmhvc3QvdmRwYS5jOjE1NzA6XHQucmVsZWFzZVx0PSB2aG9zdF92ZHBhX3JlbGVhc2UsXG5kcml2ZXJzL3Zob3N0L3ZkcGEuYy0xNTcxLVx0LndyaXRlX2l0ZXJcdD0gdmhvc3RfdmRwYV9jaHJfd3JpdGVfaXRlcixcbi0tXG5kcml2ZXJzL3Zob3N0L3ZkcGEuYy0xNTc4LVxuZHJpdmVycy92aG9zdC92ZHBhLmM6MTU3OTpzdGF0aWMgdm9pZCB2aG9zdF92ZHBhX3JlbGVhc2VfZGV2KHN0cnVjdCBkZXZpY2UgKmRldmljZSlcbmRyaXZlcnMvdmhvc3QvdmRwYS5jLTE1ODAte1xuLS1cbmRyaXZlcnMvdmhvc3QvdmRwYS5jPTE1ODk9c3RhdGljIGludCB2aG9zdF92ZHBhX3Byb2JlKHN0cnVjdCB2ZHBhX2RldmljZSAqdmRwYSlcbi0tXG5kcml2ZXJzL3Zob3N0L3ZkcGEuYy0xNjIxLVx0ZGV2aWNlX2luaXRpYWxpemUoXHUwMDI2di1cdTAwM2VkZXYpO1xuZHJpdmVycy92aG9zdC92ZHBhLmM6MTYyMjpcdHYtXHUwMDNlZGV2LnJlbGVhc2UgPSB2aG9zdF92ZHBhX3JlbGVhc2VfZGV2O1xuZHJpdmVycy92aG9zdC92ZHBhLmMtMTYyMy1cdHYtXHUwMDNlZGV2LnBhcmVudCA9IFx1MDAyNnZkcGEtXHUwMDNlZGV2O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxMjozNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDQxMQoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDIxOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipDb25maWd1cmF0aW9uIERlZXAgRGl2ZSBmb3IgVkRQQSBhbmQgVmhvc3QtVkRQQSoqCgpPa2F5LCBsZXQmIzM5O3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkmIzM5O20gaG9taW5nIGluIG9uIHRoZSBjcml0aWNhbCBzeW1ib2xzIHJlbGF0ZWQgdG8gVkRQQSBhbmQgdmhvc3QtdmRwYTogYHZob3N0X3ZkcGFfdW5sb2NrZWRfaW9jdGxgLCBgdmhvc3RfdmRwYV9yZWxlYXNlYCwgYW5kIGB2aG9zdF92ZHBhX2NvbmZpZ19jYmAuIFRoZXNlIGFyZSBteSBpbml0aWFsIGJyZWFkY3J1bWJzLgoKTm93LCBsZXQmIzM5O3MgbWV0aWN1bG91c2x5IHJldmlldyB0aGUgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMuIEZpcnN0LCB3ZSBuZWVkIHRvIGVuc3VyZSBgVkhPU1RfVkRQQWAgaXMgZW5hYmxlZCDigJMgdGhhdCYjMzk7cyBvdXIgYW5jaG9yLiBGb2xsb3dpbmcgdGhhdCwgd2UgaGF2ZSBkZXBlbmRlbmNpZXMgdGhhdCB3ZSBuZWVkIHRvIGVuc3VyZSBhcmUgYWxzbyBlbmFibGVkLCBzbyB3ZSBuZWVkIHRvIHZlcmlmeToKKiAgIGBWSE9TVF9WRFBBYCBoaW5nZXMgb24gYm90aCBgRVZFTlRGRGAgYW5kIGBWRFBBYC4KKiAgIGBWRFBBYCwgaW4gdHVybiwgZGVwZW5kcyBvbiBgTkVUYC4KKiAgIElmIHdlIG5lZWQgdGhlIGBWRFBBX1NJTWAgbW9kdWxlIHdlIG5lZWQgdG8gZW5zdXJlIGBSVU5USU1FX1RFU1RJTkdfTUVOVWAgaXMgZW5hYmxlZC4KKiAgIFRoZW4gZm9yIGJvdGggYFZEUEFfU0lNX05FVGAgYW5kIGBWRFBBX1NJTV9CTE9DS2AgbW9kdWxlcywgdGhlaXIgc2hhcmVkIGRlcGVuZGVuY3kgaXMgYFZEUEFfU0lNYC4KKiAgIGBWRFBBX1VTRVJgIGFsc28gcmVxdWlyZXMgYEVWRU5URkRgIGFuZCBgTU1VYC4KCkJhc2VkIG9uIHRoaXMgY2FzY2FkZSBvZiBkZXBlbmRlbmNpZXMsIEkmIzM5O20gY29uZmlkZW50IHdlIG5lZWQgdG8gZW5hYmxlIHRoZSBmb2xsb3dpbmcgY29uZmlndXJhdGlvbnM6CgoqICAgYFZIT1NUX1ZEUEFgCiogICBgVkRQQWAKKiAgIGBWRFBBX1NJTWAKKiAgIGBWRFBBX1NJTV9ORVRgCiogICBgVkRQQV9TSU1fQkxPQ0tgCiogICBgVkRQQV9VU0VSYAoKSG93ZXZlciwgYmVmb3JlIHdlIGZpbmFsaXplIHRoZXNlIGNvbmZpZ3VyYXRpb25zLCBJIG5lZWQgdG8gY2hlY2sgaWYgdGhlcmUgYXJlIGFueSBvdGhlciByZWxhdGVkIGNvbmZpZ3VyYXRpb25zIHRoYXQgbWF5IGJlIHJlbGV2YW50IG9yIGFkZCBhZGRpdGlvbmFsIGZ1bmN0aW9uYWxpdHkgdGhhdCBzaG91bGQgYmUgZW5hYmxlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTI6MzU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFJVTlRJTUVfVEVTVElOR19NRU5VJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2xpYi9LY29uZmlnLmRlYnVnPTIyNTY9Y29uZmlnIEtDT1ZfU0VMRlRFU1Rcbi0tXG5saWIvS2NvbmZpZy5kZWJ1Zy0yMjYzLVxubGliL0tjb25maWcuZGVidWc6MjI2NDptZW51Y29uZmlnIFJVTlRJTUVfVEVTVElOR19NRU5VXG5saWIvS2NvbmZpZy5kZWJ1Zy0yMjY1LVx0Ym9vbCBcJiMzNDtSdW50aW1lIFRlc3RpbmdcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTI6MzU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTExMjEKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiA2NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duIG1lbnRhbCBwcm9jZXNzOgoKKipFbmFibGluZyBSdW50aW1lIFRlc3RpbmcgYW5kIFJldmlzaXRpbmcgRGVwZW5kZW5jaWVzKioKCkFscmlnaHQsIHRoZSBzeXN0ZW0gY29uZmlndXJhdGlvbiAoYG1lbnVjb25maWdgKSBpbmNsdWRlcyBzb21ldGhpbmcgY2FsbGVkIGBSVU5USU1FX1RFU1RJTkdfTUVOVWAuIEkgaW1tZWRpYXRlbHkgcmVjb2duaXplIHRoYXQgdGhpcyBzb3VuZHMgbGlrZSBzb21ldGhpbmcgd2Ugc2hvdWxkIGVuYWJsZS4gTXkgZXhwZXJpZW5jZSB3aXRoIHN5emthbGxlciBzZXR1cHMgc3VnZ2VzdHMgaXQmIzM5O3MgdXN1YWxseSBwYXJ0IG9mIHRoZSBwaWN0dXJlLiBIb3dldmVyLCBpdCYjMzk7cyB3b3J0aCBkb3VibGUtY2hlY2tpbmcuIEl0JiMzOTtzIGJlc3QgdG8gaW5jbHVkZSBpdCB1bmxlc3MgdGhlcmUmIzM5O3MgYW4gb3ZlcndoZWxtaW5nIHJlYXNvbiBub3QgdG8uIEJldHRlciBzYWZlIHRoYW4gc29ycnkgd2hlbiBpdCBjb21lcyB0byBydW50aW1lIHRlc3RpbmcgY2FwYWJpbGl0aWVzLCByaWdodD8KCk5vdywgbGV0IG1lIGp1c3QgcXVpY2tseSByZXZpc2l0IHRoZSBkZXBlbmRlbmNpZXMgZm9yIGBWRFBBX1NJTWAuIEkgd2FudCB0byBtYWtlIHN1cmUgSSBoYXZlbiYjMzk7dCBtaXNzZWQgYW55dGhpbmcgb3IgdGhhdCB0aGVyZSBhcmVuJiMzOTt0IGFueSBwb3RlbnRpYWwgY29uZmxpY3RzIGFmdGVyIGVuYWJsaW5nIHRoYXQgbWVudS4gQWx3YXlzIGdvb2QgdG8gZG91YmxlLWNoZWNrIHRoZXNlIHRoaW5ncywgZXNwZWNpYWxseSB3aGVuIG1ha2luZyBjb25maWd1cmF0aW9uIGNoYW5nZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDEyOjM2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy92ZHBhL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDEwOlx0aWYgVkRQQVxuICAxMTpcdFxuICAxMjpcdGNvbmZpZyBWRFBBX1NJTVxuICAxMzpcdFx0dHJpc3RhdGUgXCYjMzQ7dkRQQSBkZXZpY2Ugc2ltdWxhdG9yIGNvcmVcJiMzNDtcbiAgMTQ6XHRcdGRlcGVuZHMgb24gUlVOVElNRV9URVNUSU5HX01FTlVcbiAgMTU6XHRcdHNlbGVjdCBWSE9TVF9SSU5HXG4gIDE2Olx0XHRzZWxlY3QgSU9NTVVfSU9WQVxuICAxNzpcdFx0aGVscFxuICAxODpcdFx0ICBFbmFibGUgdGhpcyBtb2R1bGUgdG8gc3VwcG9ydCB2RFBBIGRldmljZSBzaW11bGF0b3JzLiBUaGVzZSBkZXZpY2VzXG4gIDE5Olx0XHQgIGFyZSB1c2VkIGZvciB0ZXN0aW5nLCBwcm90b3R5cGluZyBhbmQgZGV2ZWxvcG1lbnQgb2YgdkRQQS5cbiAgMjA6XHRcbiAgMjE6XHRjb25maWcgVkRQQV9TSU1fTkVUXG4gIDIyOlx0XHR0cmlzdGF0ZSBcJiMzNDt2RFBBIHNpbXVsYXRvciBmb3IgbmV0d29ya2luZyBkZXZpY2VcJiMzNDtcbiAgMjM6XHRcdGRlcGVuZHMgb24gVkRQQV9TSU1cbiAgMjQ6XHRcdHNlbGVjdCBHRU5FUklDX05FVF9VVElMU1xuICAyNTpcdFx0aGVscFxuICAyNjpcdFx0ICB2RFBBIG5ldHdvcmtpbmcgZGV2aWNlIHNpbXVsYXRvciB3aGljaCBsb29wcyBUWCB0cmFmZmljIGJhY2sgdG8gUlguXG4gIDI3Olx0XG4gIDI4Olx0Y29uZmlnIFZEUEFfU0lNX0JMT0NLXG4gIDI5Olx0XHR0cmlzdGF0ZSBcJiMzNDt2RFBBIHNpbXVsYXRvciBmb3IgYmxvY2sgZGV2aWNlXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDEyOjM2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExNjY2CgkJCQkJCQlvdXRwdXQ6IDI1NAoJCQkJCQkJdGhvdWdodHM6IDI2NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSB2aG9zdC12ZHBhIFBhdGNoKioKCk9rYXksIHNvIHdlJiMzOTtyZSBsb29raW5nIGF0IGEgcGF0Y2ggaGVyZSwgYW5kIHRoZSBrZXkgdGhpbmcgSSBzZWUgcmlnaHQgYXdheSBpcyB0aGUgYWRkaXRpb24gb2YgYFJVTlRJTUVfVEVTVElOR19NRU5VYC4gVGhhdCYjMzk7cyBhIHN0cm9uZyBpbmRpY2F0b3IgdGhhdCB0aGlzIHJlcXVpcmVzIHNvbWUgcnVudGltZSBhbmFseXNpcy4KCk5vdywgbGV0JiMzOTtzIGJyZWFrIGRvd24gdGhlIGNvbmZpZ3VyYXRpb24gZWxlbWVudHMgaW52b2x2ZWQuIFdlJiMzOTt2ZSBnb3QgYFZIT1NUX1ZEUEFgLCBgVkRQQWAsIGBWRFBBX1NJTWAsIGBWRFBBX1NJTV9ORVRgLCBgVkRQQV9TSU1fQkxPQ0tgLCBgVkRQQV9VU0VSYCwgYW5kIHRoZSBjcml0aWNhbCBgUlVOVElNRV9URVNUSU5HX01FTlVgLgoKVGhlIHJlYWwgZm9jdXMgcG9pbnRzLCB0aGUgZnVuY3Rpb25zIHRoYXQgYXJlIHByb2JhYmx5IHRoZSBtb3N0IGltcG9ydGFudCB0byBjb25zaWRlciBpbiBkZXRhaWwgYXJlIGB2aG9zdF92ZHBhX3VubG9ja2VkX2lvY3RsYCwgYHZob3N0X3ZkcGFfcmVsZWFzZWAsIGFuZCBgdmhvc3RfdmRwYV9jb25maWdfY2JgLgoKRnJvbSB3aGF0IEkgdW5kZXJzdGFuZCwgdGhpcyBwYXRjaCBpcyBhZGRyZXNzaW5nIGEgcmFjZSBjb25kaXRpb24gd2l0aGluIGBzdHJ1Y3Qgdmhvc3RfdmRwYWAuIEl0IHNlZW1zIGxpa2UgYHZob3N0X3ZkcGFfY29uZmlnX2NiYCBpcyByYWNpbmcgd2l0aCBgdmhvc3RfdmRwYV9zZXRfY29uZmlnX2NhbGxgIGFuZCBgdmhvc3RfdmRwYV9jb25maWdfcHV0YC4gVGhpcyBpcyBpbXBvcnRhbnQsIGJlY2F1c2UgdGhlc2UgZnVuY3Rpb25zIGFyZSBhY2Nlc3NpYmxlIGZyb20gdXNlciBzcGFjZSB2aWEgdGhlIHZob3N0LXZkcGEgY2hhcmRldiBpb2N0bHMgYW5kIHJlbGVhc2Ugb3BlcmF0aW9ucy4gVGhpcyBpcyBhIHZlcnkgaW50ZXJlc3RpbmcgcG9pbnQgYmVjYXVzZSB0aGlzIGlzIHdoZXJlIHRoZSByYWNlIGNvbmRpdGlvbiBpcyBpbnRyb2R1Y2VkIGFuZCB3aGVyZSBpdCBjYW4gYmUgcG90ZW50aWFsbHkgZXhwbG9pdGVkLgoKR2l2ZW4gdGhhdCB2RFBBIGNhbiBiZSB0ZXN0ZWQgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCB3aXRoIHNpbXVsYXRvcnMgbGlrZSBgdmRwYV9zaW1fbmV0YCwgYHZkcGFfc2ltX2Jsa2AsIGFuZCBgdmR1c2VgLCB0aGlzIGZpeCBoYXMgYSBkZW1vbnN0cmFibGUgZnVuY3Rpb25hbCBpbXBhY3QuIEJlY2F1c2Ugb2YgdGhhdCwgZnV6emluZyBpcyBhbiBvYnZpb3VzIG5leHQgc3RlcC4gVGhpcyBwYXRjaCAqbmVlZHMqIGZ1enppbmcgdG8gbWFrZSBzdXJlIGl0IGlzIHJvYnVzdC4KCkkmIzM5O20gcmVhZHkgdG8gbWFyayB0aGlzIG9uZSBkb3duLCBhbmQgbGV0JiMzOTtzIGNhbGwgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTI6MzY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1ZIT1NUX1ZEUEEmIzM0OywKICAgICYjMzQ7VkRQQSYjMzQ7LAogICAgJiMzNDtWRFBBX1NJTSYjMzQ7LAogICAgJiMzNDtWRFBBX1NJTV9ORVQmIzM0OywKICAgICYjMzQ7VkRQQV9TSU1fQkxPQ0smIzM0OywKICAgICYjMzQ7VkRQQV9VU0VSJiMzNDssCiAgICAmIzM0O1JVTlRJTUVfVEVTVElOR19NRU5VJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dmhvc3RfdmRwYV91bmxvY2tlZF9pb2N0bCYjMzQ7LAogICAgJiMzNDt2aG9zdF92ZHBhX3JlbGVhc2UmIzM0OywKICAgICYjMzQ7dmhvc3RfdmRwYV9jb25maWdfY2ImIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBhIHNwaW5sb2NrIHRvIGBzdHJ1Y3Qgdmhvc3RfdmRwYWAgdG8gZml4IGEgcmFjZSBjb25kaXRpb24gYmV0d2VlbiBgdmhvc3RfdmRwYV9jb25maWdfY2JgIGFuZCBgdmhvc3RfdmRwYV9zZXRfY29uZmlnX2NhbGxgIC8gYHZob3N0X3ZkcGFfY29uZmlnX3B1dGAuIFRoZXNlIGZ1bmN0aW9ucyBhcmUgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSB0aGUgdmhvc3QtdmRwYSBjaGFyZGV2IGlvY3RscyBhbmQgcmVsZWFzZSBvcGVyYXRpb25zLiBUaGUgdkRQQSBzdWJzeXN0ZW0gY2FuIGJlIHRlc3RlZCBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50IHVzaW5nIHZEUEEgc2ltdWxhdG9ycyAoYHZkcGFfc2ltX25ldGAsIGB2ZHBhX3NpbV9ibGtgKSBvciBgdmR1c2VgLiBUaGVyZWZvcmUsIHRoZSBjaGFuZ2VzIGhhdmUgYSBmdW5jdGlvbmFsIGltcGFjdCB0aGF0IGlzIHdvcnRoIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1ZIT1NUX1ZEUEEmIzM0OywKICAgICYjMzQ7VkRQQSYjMzQ7LAogICAgJiMzNDtWRFBBX1NJTSYjMzQ7LAogICAgJiMzNDtWRFBBX1NJTV9ORVQmIzM0OywKICAgICYjMzQ7VkRQQV9TSU1fQkxPQ0smIzM0OywKICAgICYjMzQ7VkRQQV9VU0VSJiMzNDssCiAgICAmIzM0O1JVTlRJTUVfVEVTVElOR19NRU5VJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dmhvc3RfdmRwYV91bmxvY2tlZF9pb2N0bCYjMzQ7LAogICAgJiMzNDt2aG9zdF92ZHBhX3JlbGVhc2UmIzM0OywKICAgICYjMzQ7dmhvc3RfdmRwYV9jb25maWdfY2ImIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBhIHNwaW5sb2NrIHRvIGBzdHJ1Y3Qgdmhvc3RfdmRwYWAgdG8gZml4IGEgcmFjZSBjb25kaXRpb24gYmV0d2VlbiBgdmhvc3RfdmRwYV9jb25maWdfY2JgIGFuZCBgdmhvc3RfdmRwYV9zZXRfY29uZmlnX2NhbGxgIC8gYHZob3N0X3ZkcGFfY29uZmlnX3B1dGAuIFRoZXNlIGZ1bmN0aW9ucyBhcmUgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSB0aGUgdmhvc3QtdmRwYSBjaGFyZGV2IGlvY3RscyBhbmQgcmVsZWFzZSBvcGVyYXRpb25zLiBUaGUgdkRQQSBzdWJzeXN0ZW0gY2FuIGJlIHRlc3RlZCBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50IHVzaW5nIHZEUEEgc2ltdWxhdG9ycyAoYHZkcGFfc2ltX25ldGAsIGB2ZHBhX3NpbV9ibGtgKSBvciBgdmR1c2VgLiBUaGVyZWZvcmUsIHRoZSBjaGFuZ2VzIGhhdmUgYSBmdW5jdGlvbmFsIGltcGFjdCB0aGF0IGlzIHdvcnRoIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDEyOjM2PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTI6MzY8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcmVzc2VzIGEgY29uY3VycmVuY3kgaXNzdWUgKGxpa2VseSBhIHJhY2UgY29uZGl0aW9uIG9yIHVzZS1hZnRlci1mcmVlKSBieSBhZGRpbmcgYSBzcGlubG9jayAoYGNvbmZpZ19sb2NrYCkgdG8gc2VyaWFsaXplIGFjY2Vzc2VzIHRvIGB2LVx1MDAzZWNvbmZpZ19jdHhgIGluIGB2aG9zdF92ZHBhX2NvbmZpZ19jYigpYCwgYHZob3N0X3ZkcGFfY29uZmlnX3B1dCgpYCwgYW5kIGB2aG9zdF92ZHBhX3NldF9jb25maWdfY2FsbCgpYC4gVGhlc2UgY2hhbmdlcyBkbyBub3QgaW50cm9kdWNlIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MsIGluZm8tbGVha3MsIG9yIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmUgYWxsb2NhdGlvbnMgdGhhdCB3b3VsZCByZXF1aXJlIEtNU0FOLiBUaGUgYnVnIGJlaW5nIGZpeGVkIGFuZCBhbnkgcG90ZW50aWFsIHJlZ3Jlc3Npb25zIHdvdWxkIGJlIHJlbGF0ZWQgdG8gbG9ja2luZywgcmFjZSBjb25kaXRpb25zLCBvciB1c2UtYWZ0ZXItZnJlZSwgd2hpY2ggYXJlIGVmZmVjdGl2ZWx5IGNhdWdodCBieSBLQVNBTiwgS0NTQU4sIGFuZCBMT0NLREVQLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA5MjhlZWUyMDRhZTdiM2FiNzg3NmE3M2M3MDMxMzg1ODI2YjViNjI0CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIEZyaSBBdWcgNyAxMjozNTowMyAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmhvc3QvdmRwYS5jIGIvZHJpdmVycy92aG9zdC92ZHBhLmMKaW5kZXggYWM1NTI3NWZhMGQwYS4uMjcyZDUwNmQ4MzFjOCAxMDA2NDQKLS0tIGEvZHJpdmVycy92aG9zdC92ZHBhLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy92aG9zdC92ZHBhLmMKQEAgLTU2LDYgJiM0Mzs1Niw4IEBAIHN0cnVjdCB2aG9zdF92ZHBhIHsKIAlpbnQgdmlydGlvX2lkOwogCWludCBtaW5vcjsKIAlzdHJ1Y3QgZXZlbnRmZF9jdHggKmNvbmZpZ19jdHg7CiYjNDM7CS8qIFNlcmlhbGlzZXMgdmhvc3RfdmRwYV9jb25maWdfY2IoKSBhZ2FpbnN0IGNvbmZpZ19jdHggYmVpbmcgcmVwbGFjZWQuICovCiYjNDM7CXNwaW5sb2NrX3QgY29uZmlnX2xvY2s7CiAJaW50IGluX2JhdGNoOwogCXN0cnVjdCB2ZHBhX2lvdmFfcmFuZ2UgcmFuZ2U7CiAJdTMyIGJhdGNoX2FzaWQ7CkBAIC0xODcsMTAgJiM0MzsxODksMTIgQEAgc3RhdGljIGlycXJldHVybl90IHZob3N0X3ZkcGFfdmlydHF1ZXVlX2NiKHZvaWQgKnByaXZhdGUpCiBzdGF0aWMgaXJxcmV0dXJuX3Qgdmhvc3RfdmRwYV9jb25maWdfY2Iodm9pZCAqcHJpdmF0ZSkKIHsKIAlzdHJ1Y3Qgdmhvc3RfdmRwYSAqdiA9IHByaXZhdGU7Ci0Jc3RydWN0IGV2ZW50ZmRfY3R4ICpjb25maWdfY3R4ID0gdi0mZ3Q7Y29uZmlnX2N0eDsKJiM0MzsJdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCWlmIChjb25maWdfY3R4KQotCQlldmVudGZkX3NpZ25hbChjb25maWdfY3R4KTsKJiM0MzsJc3Bpbl9sb2NrX2lycXNhdmUoJmFtcDt2LSZndDtjb25maWdfbG9jaywgZmxhZ3MpOwomIzQzOwlpZiAodi0mZ3Q7Y29uZmlnX2N0eCkKJiM0MzsJCWV2ZW50ZmRfc2lnbmFsKHYtJmd0O2NvbmZpZ19jdHgpOwomIzQzOwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhbXA7di0mZ3Q7Y29uZmlnX2xvY2ssIGZsYWdzKTsKIAogCXJldHVybiBJUlFfSEFORExFRDsKIH0KQEAgLTUxMSwxNSAmIzQzOzUxNSwyMiBAQCBzdGF0aWMgbG9uZyB2aG9zdF92ZHBhX2dldF92cmluZ19udW0oc3RydWN0IHZob3N0X3ZkcGEgKnYsIHUxNiBfX3VzZXIgKmFyZ3ApCiAKIHN0YXRpYyB2b2lkIHZob3N0X3ZkcGFfY29uZmlnX3B1dChzdHJ1Y3Qgdmhvc3RfdmRwYSAqdikKIHsKLQlpZiAodi0mZ3Q7Y29uZmlnX2N0eCkgewotCQlldmVudGZkX2N0eF9wdXQodi0mZ3Q7Y29uZmlnX2N0eCk7Ci0JCXYtJmd0O2NvbmZpZ19jdHggPSBOVUxMOwotCX0KJiM0MzsJc3RydWN0IGV2ZW50ZmRfY3R4ICpjdHg7CiYjNDM7CXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiYjNDM7CiYjNDM7CXNwaW5fbG9ja19pcnFzYXZlKCZhbXA7di0mZ3Q7Y29uZmlnX2xvY2ssIGZsYWdzKTsKJiM0MzsJY3R4ID0gdi0mZ3Q7Y29uZmlnX2N0eDsKJiM0MzsJdi0mZ3Q7Y29uZmlnX2N0eCA9IE5VTEw7CiYjNDM7CXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFtcDt2LSZndDtjb25maWdfbG9jaywgZmxhZ3MpOwomIzQzOwomIzQzOwlpZiAoY3R4KQomIzQzOwkJZXZlbnRmZF9jdHhfcHV0KGN0eCk7CiB9CiAKIHN0YXRpYyBsb25nIHZob3N0X3ZkcGFfc2V0X2NvbmZpZ19jYWxsKHN0cnVjdCB2aG9zdF92ZHBhICp2LCB1MzIgX191c2VyICphcmdwKQogewogCXN0cnVjdCB2ZHBhX2NhbGxiYWNrIGNiOwomIzQzOwl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWludCBmZDsKIAlzdHJ1Y3QgZXZlbnRmZF9jdHggKmN0eDsKIApAQCAtNTI5LDE4ICYjNDM7NTQwLDIwIEBAIHN0YXRpYyBsb25nIHZob3N0X3ZkcGFfc2V0X2NvbmZpZ19jYWxsKHN0cnVjdCB2aG9zdF92ZHBhICp2LCB1MzIgX191c2VyICphcmdwKQogCQlyZXR1cm4gIC1FRkFVTFQ7CiAKIAljdHggPSBmZCA9PSBWSE9TVF9GSUxFX1VOQklORCA/IE5VTEwgOiBldmVudGZkX2N0eF9mZGdldChmZCk7CiYjNDM7CWlmIChJU19FUlIoY3R4KSkKJiM0MzsJCXJldHVybiBQVFJfRVJSKGN0eCk7CiYjNDM7CiYjNDM7CXNwaW5fbG9ja19pcnFzYXZlKCZhbXA7di0mZ3Q7Y29uZmlnX2xvY2ssIGZsYWdzKTsKIAlzd2FwKGN0eCwgdi0mZ3Q7Y29uZmlnX2N0eCk7CiYjNDM7CXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFtcDt2LSZndDtjb25maWdfbG9jaywgZmxhZ3MpOwogCi0JaWYgKCFJU19FUlJfT1JfTlVMTChjdHgpKQomIzQzOwkvKgomIzQzOwkgKiBUaGUgY2FsbGJhY2sgY2FuIG5vIGxvbmdlciByZWFjaCB0aGUgb2xkIGNvbnRleHQsIHNvIHRoaXMgaXMgdGhlCiYjNDM7CSAqIGxhc3QgcmVmZXJlbmNlIHRvIGl0LgomIzQzOwkgKi8KJiM0MzsJaWYgKGN0eCkKIAkJZXZlbnRmZF9jdHhfcHV0KGN0eCk7CiAKLQlpZiAoSVNfRVJSKHYtJmd0O2NvbmZpZ19jdHgpKSB7Ci0JCWxvbmcgcmV0ID0gUFRSX0VSUih2LSZndDtjb25maWdfY3R4KTsKLQotCQl2LSZndDtjb25maWdfY3R4ID0gTlVMTDsKLQkJcmV0dXJuIHJldDsKLQl9Ci0KIAl2LSZndDt2ZHBhLSZndDtjb25maWctJmd0O3NldF9jb25maWdfY2Iodi0mZ3Q7dmRwYSwgJmFtcDtjYik7CiAKIAlyZXR1cm4gMDsKQEAgLTE1OTksNiAmIzQzOzE2MTIsNyBAQCBzdGF0aWMgaW50IHZob3N0X3ZkcGFfcHJvYmUoc3RydWN0IHZkcGFfZGV2aWNlICp2ZHBhKQogCX0KIAogCWF0b21pY19zZXQoJmFtcDt2LSZndDtvcGVuZWQsIDApOwomIzQzOwlzcGluX2xvY2tfaW5pdCgmYW1wO3YtJmd0O2NvbmZpZ19sb2NrKTsKIAl2LSZndDttaW5vciA9IG1pbm9yOwogCXYtJmd0O3ZkcGEgPSB2ZHBhOwogCXYtJmd0O252cXMgPSB2ZHBhLSZndDtudnFzOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTI6MzY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjkwMQoJCQkJCQkJb3V0cHV0OiAxNzUKCQkJCQkJCXRob3VnaHRzOiAyODYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSB2aG9zdC12ZHBhIENvbmZpZ3VyYXRpb24gTG9jayBQYXRjaCoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGludHJvZHVjZXMgYSBzcGlubG9jaywgYGNvbmZpZ19sb2NrYCwgdG8gdGhlIGB2aG9zdF92ZHBhYCBzdHJ1Y3R1cmUuIFRoZSBwdXJwb3NlIGlzIHRvIHNlcmlhbGl6ZSBhY2Nlc3MgdG8gdGhlIGBjb25maWdfY3R4YCB3aXRoaW4gYHZob3N0X3ZkcGFfY29uZmlnX2NiKClgIGFuZCBwcmV2ZW50IGlzc3VlcyB3aGVuIGBjb25maWdfY3R4YCBpcyByZXBsYWNlZC4gVGhlIGNoYW5nZXMgcHJpbWFyaWx5IGZvY3VzIG9uIG1vZGlmeWluZyBgdmhvc3RfdmRwYV9jb25maWdfY2JgLCBgdmhvc3RfdmRwYV9jb25maWdfcHV0YCwgYHZob3N0X3ZkcGFfc2V0X2NvbmZpZ19jYWxsYCwgYW5kIGB2aG9zdF92ZHBhX3Byb2JlYCB0byBjb3JyZWN0bHkgdXRpbGl6ZSB0aGlzIG5ldyBsb2NraW5nIG1lY2hhbmlzbS4KCkZyb20gbXkgdW5kZXJzdGFuZGluZywgdGhpcyBpcyBhIGNsZWFuIGZpeC4gVGhlcmUgYXJlIG5vIGNoYW5nZXMgdGhhdCBpbnRyb2R1Y2UgbmV3IHVzZXItc3BhY2UgZGF0YSwgbm8gaW5mbyBsZWFrcywgYW5kIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIGNvbmNlcm5zLiBUaGUgcHJvYmxlbSBiZWluZyBhZGRyZXNzZWQgaXMgYWxtb3N0IGNlcnRhaW5seSBhIHVzZS1hZnRlci1mcmVlIG9yIHJhY2UgY29uZGl0aW9uLCB3aGljaCBpcyBwcm9iYWJseSBiZWluZyBmbGFnZ2VkIGJ5IEtBU0FOIG9yIEtDU0FOLiBUaGVyZWZvcmUsIEkgZG9uJiMzOTt0IHNlZSBhbnkgcmVhc29uIHRvIGJyaW5nIEtNU0FOIGludG8gdGhlIHBpY3R1cmUgaGVyZS4KCkxldCBtZSBqdXN0IHF1aWNrbHkgdmVyaWZ5IG15IHVuZGVyc3RhbmRpbmcuIGB2aG9zdF92ZHBhX3NldF9jb25maWdfY2FsbGAgYXBwZWFycyB0byBiZSBnZXR0aW5nIGFuIGBmZGAgZnJvbSB1c2Vyc3BhY2UsIGdldHRpbmcgdGhlIGV2ZW50ZmQgY29udGV4dCwgYW5kIHRoZW4gc3dhcHBpbmcgdGhhdCBjb250ZXh0IHdpdGggYHYtJmd0O2NvbmZpZ19jdHhgLiBUaGUgYWRkZWQgc3BpbmxvY2sgaXMgc3BlY2lmaWNhbGx5IG1lYW50IHRvIHByb3RlY3QgdGhpcyBzd2FwIG9wZXJhdGlvbiBhbmQgdGhlIHN1YnNlcXVlbnQgY2hlY2sgb2YgYHYtJmd0O2NvbmZpZ19jdHhgIHdpdGhpbiBgdmhvc3RfdmRwYV9jb25maWdfY2JgLiBZZXMsIHRoaXMgbG9va3MgbGlrZSBhIHN0cmFpZ2h0Zm9yd2FyZCBjb25jdXJyZW5jeSBpc3N1ZSByZXNvbHV0aW9uLgoKVGhlcmVmb3JlLCBJJiMzOTttIGNvbmZpZGVudCB0aGF0IGBOZWVkc0tNU0FOPWZhbHNlYCBpcyB0aGUgY29ycmVjdCBzZXR0aW5nLiBJJiMzOTtsbCBwcm9jZWVkIHdpdGggdGhhdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTI6MzY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcmVzc2VzIGEgY29uY3VycmVuY3kgaXNzdWUgKGxpa2VseSBhIHJhY2UgY29uZGl0aW9uIG9yIHVzZS1hZnRlci1mcmVlKSBieSBhZGRpbmcgYSBzcGlubG9jayAoYGNvbmZpZ19sb2NrYCkgdG8gc2VyaWFsaXplIGFjY2Vzc2VzIHRvIGB2LVx1MDAzZWNvbmZpZ19jdHhgIGluIGB2aG9zdF92ZHBhX2NvbmZpZ19jYigpYCwgYHZob3N0X3ZkcGFfY29uZmlnX3B1dCgpYCwgYW5kIGB2aG9zdF92ZHBhX3NldF9jb25maWdfY2FsbCgpYC4gVGhlc2UgY2hhbmdlcyBkbyBub3QgaW50cm9kdWNlIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MsIGluZm8tbGVha3MsIG9yIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmUgYWxsb2NhdGlvbnMgdGhhdCB3b3VsZCByZXF1aXJlIEtNU0FOLiBUaGUgYnVnIGJlaW5nIGZpeGVkIGFuZCBhbnkgcG90ZW50aWFsIHJlZ3Jlc3Npb25zIHdvdWxkIGJlIHJlbGF0ZWQgdG8gbG9ja2luZywgcmFjZSBjb25kaXRpb25zLCBvciB1c2UtYWZ0ZXItZnJlZSwgd2hpY2ggYXJlIGVmZmVjdGl2ZWx5IGNhdWdodCBieSBLQVNBTiwgS0NTQU4sIGFuZCBMT0NLREVQLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcmVzc2VzIGEgY29uY3VycmVuY3kgaXNzdWUgKGxpa2VseSBhIHJhY2UgY29uZGl0aW9uIG9yIHVzZS1hZnRlci1mcmVlKSBieSBhZGRpbmcgYSBzcGlubG9jayAoYGNvbmZpZ19sb2NrYCkgdG8gc2VyaWFsaXplIGFjY2Vzc2VzIHRvIGB2LVx1MDAzZWNvbmZpZ19jdHhgIGluIGB2aG9zdF92ZHBhX2NvbmZpZ19jYigpYCwgYHZob3N0X3ZkcGFfY29uZmlnX3B1dCgpYCwgYW5kIGB2aG9zdF92ZHBhX3NldF9jb25maWdfY2FsbCgpYC4gVGhlc2UgY2hhbmdlcyBkbyBub3QgaW50cm9kdWNlIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MsIGluZm8tbGVha3MsIG9yIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmUgYWxsb2NhdGlvbnMgdGhhdCB3b3VsZCByZXF1aXJlIEtNU0FOLiBUaGUgYnVnIGJlaW5nIGZpeGVkIGFuZCBhbnkgcG90ZW50aWFsIHJlZ3Jlc3Npb25zIHdvdWxkIGJlIHJlbGF0ZWQgdG8gbG9ja2luZywgcmFjZSBjb25kaXRpb25zLCBvciB1c2UtYWZ0ZXItZnJlZSwgd2hpY2ggYXJlIGVmZmVjdGl2ZWx5IGNhdWdodCBieSBLQVNBTiwgS0NTQU4sIGFuZCBMT0NLREVQLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxMjozNTowNS4xNzM0NDU2ODlaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MjI1NTM1OTIxNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJWSE9TVF9WRFBBXCIsXG4gICAgXCJWRFBBXCIsXG4gICAgXCJWRFBBX1NJTVwiLFxuICAgIFwiVkRQQV9TSU1fTkVUXCIsXG4gICAgXCJWRFBBX1NJTV9CTE9DS1wiLFxuICAgIFwiVkRQQV9VU0VSXCIsXG4gICAgXCJSVU5USU1FX1RFU1RJTkdfTUVOVVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInZob3N0X3ZkcGFfdW5sb2NrZWRfaW9jdGxcIixcbiAgICBcInZob3N0X3ZkcGFfcmVsZWFzZVwiLFxuICAgIFwidmhvc3RfdmRwYV9jb25maWdfY2JcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHJlc3NlcyBhIGNvbmN1cnJlbmN5IGlzc3VlIChsaWtlbHkgYSByYWNlIGNvbmRpdGlvbiBvciB1c2UtYWZ0ZXItZnJlZSkgYnkgYWRkaW5nIGEgc3BpbmxvY2sgKGBjb25maWdfbG9ja2ApIHRvIHNlcmlhbGl6ZSBhY2Nlc3NlcyB0byBgdi1cXHUwMDNlY29uZmlnX2N0eGAgaW4gYHZob3N0X3ZkcGFfY29uZmlnX2NiKClgLCBgdmhvc3RfdmRwYV9jb25maWdfcHV0KClgLCBhbmQgYHZob3N0X3ZkcGFfc2V0X2NvbmZpZ19jYWxsKClgLiBUaGVzZSBjaGFuZ2VzIGRvIG5vdCBpbnRyb2R1Y2Ugb3IgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcywgaW5mby1sZWFrcywgb3IgY29tcGxleCBkYXRhIHN0cnVjdHVyZSBhbGxvY2F0aW9ucyB0aGF0IHdvdWxkIHJlcXVpcmUgS01TQU4uIFRoZSBidWcgYmVpbmcgZml4ZWQgYW5kIGFueSBwb3RlbnRpYWwgcmVncmVzc2lvbnMgd291bGQgYmUgcmVsYXRlZCB0byBsb2NraW5nLCByYWNlIGNvbmRpdGlvbnMsIG9yIHVzZS1hZnRlci1mcmVlLCB3aGljaCBhcmUgZWZmZWN0aXZlbHkgY2F1Z2h0IGJ5IEtBU0FOLCBLQ1NBTiwgYW5kIExPQ0tERVAuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhIHNwaW5sb2NrIHRvIGBzdHJ1Y3Qgdmhvc3RfdmRwYWAgdG8gZml4IGEgcmFjZSBjb25kaXRpb24gYmV0d2VlbiBgdmhvc3RfdmRwYV9jb25maWdfY2JgIGFuZCBgdmhvc3RfdmRwYV9zZXRfY29uZmlnX2NhbGxgIC8gYHZob3N0X3ZkcGFfY29uZmlnX3B1dGAuIFRoZXNlIGZ1bmN0aW9ucyBhcmUgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSB0aGUgdmhvc3QtdmRwYSBjaGFyZGV2IGlvY3RscyBhbmQgcmVsZWFzZSBvcGVyYXRpb25zLiBUaGUgdkRQQSBzdWJzeXN0ZW0gY2FuIGJlIHRlc3RlZCBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50IHVzaW5nIHZEUEEgc2ltdWxhdG9ycyAoYHZkcGFfc2ltX25ldGAsIGB2ZHBhX3NpbV9ibGtgKSBvciBgdmR1c2VgLiBUaGVyZWZvcmUsIHRoZSBjaGFuZ2VzIGhhdmUgYSBmdW5jdGlvbmFsIGltcGFjdCB0aGF0IGlzIHdvcnRoIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDEyOjM1OjA1LjE3MzQ1MTUzOVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTI1ODE4ODE1MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDkyOGVlZTIwNGFlN2IzYWI3ODc2YTczYzcwMzEzODU4MjZiNWI2MjRcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIEZyaSBBdWcgNyAxMjozNTowMyAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL3Zob3N0L3ZkcGEuYyBiL2RyaXZlcnMvdmhvc3QvdmRwYS5jXFxuaW5kZXggYWM1NTI3NWZhMGQwYS4uMjcyZDUwNmQ4MzFjOCAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL3Zob3N0L3ZkcGEuY1xcbisrKyBiL2RyaXZlcnMvdmhvc3QvdmRwYS5jXFxuQEAgLTU2LDYgKzU2LDggQEAgc3RydWN0IHZob3N0X3ZkcGEge1xcbiBcXHRpbnQgdmlydGlvX2lkO1xcbiBcXHRpbnQgbWlub3I7XFxuIFxcdHN0cnVjdCBldmVudGZkX2N0eCAqY29uZmlnX2N0eDtcXG4rXFx0LyogU2VyaWFsaXNlcyB2aG9zdF92ZHBhX2NvbmZpZ19jYigpIGFnYWluc3QgY29uZmlnX2N0eCBiZWluZyByZXBsYWNlZC4gKi9cXG4rXFx0c3BpbmxvY2tfdCBjb25maWdfbG9jaztcXG4gXFx0aW50IGluX2JhdGNoO1xcbiBcXHRzdHJ1Y3QgdmRwYV9pb3ZhX3JhbmdlIHJhbmdlO1xcbiBcXHR1MzIgYmF0Y2hfYXNpZDtcXG5AQCAtMTg3LDEwICsxODksMTIgQEAgc3RhdGljIGlycXJldHVybl90IHZob3N0X3ZkcGFfdmlydHF1ZXVlX2NiKHZvaWQgKnByaXZhdGUpXFxuIHN0YXRpYyBpcnFyZXR1cm5fdCB2aG9zdF92ZHBhX2NvbmZpZ19jYih2b2lkICpwcml2YXRlKVxcbiB7XFxuIFxcdHN0cnVjdCB2aG9zdF92ZHBhICp2ID0gcHJpdmF0ZTtcXG4tXFx0c3RydWN0IGV2ZW50ZmRfY3R4ICpjb25maWdfY3R4ID0gdi1cXHUwMDNlY29uZmlnX2N0eDtcXG4rXFx0dW5zaWduZWQgbG9uZyBmbGFncztcXG4gXFxuLVxcdGlmIChjb25maWdfY3R4KVxcbi1cXHRcXHRldmVudGZkX3NpZ25hbChjb25maWdfY3R4KTtcXG4rXFx0c3Bpbl9sb2NrX2lycXNhdmUoXFx1MDAyNnYtXFx1MDAzZWNvbmZpZ19sb2NrLCBmbGFncyk7XFxuK1xcdGlmICh2LVxcdTAwM2Vjb25maWdfY3R4KVxcbitcXHRcXHRldmVudGZkX3NpZ25hbCh2LVxcdTAwM2Vjb25maWdfY3R4KTtcXG4rXFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcXHUwMDI2di1cXHUwMDNlY29uZmlnX2xvY2ssIGZsYWdzKTtcXG4gXFxuIFxcdHJldHVybiBJUlFfSEFORExFRDtcXG4gfVxcbkBAIC01MTEsMTUgKzUxNSwyMiBAQCBzdGF0aWMgbG9uZyB2aG9zdF92ZHBhX2dldF92cmluZ19udW0oc3RydWN0IHZob3N0X3ZkcGEgKnYsIHUxNiBfX3VzZXIgKmFyZ3ApXFxuIFxcbiBzdGF0aWMgdm9pZCB2aG9zdF92ZHBhX2NvbmZpZ19wdXQoc3RydWN0IHZob3N0X3ZkcGEgKnYpXFxuIHtcXG4tXFx0aWYgKHYtXFx1MDAzZWNvbmZpZ19jdHgpIHtcXG4tXFx0XFx0ZXZlbnRmZF9jdHhfcHV0KHYtXFx1MDAzZWNvbmZpZ19jdHgpO1xcbi1cXHRcXHR2LVxcdTAwM2Vjb25maWdfY3R4ID0gTlVMTDtcXG4tXFx0fVxcbitcXHRzdHJ1Y3QgZXZlbnRmZF9jdHggKmN0eDtcXG4rXFx0dW5zaWduZWQgbG9uZyBmbGFncztcXG4rXFxuK1xcdHNwaW5fbG9ja19pcnFzYXZlKFxcdTAwMjZ2LVxcdTAwM2Vjb25maWdfbG9jaywgZmxhZ3MpO1xcbitcXHRjdHggPSB2LVxcdTAwM2Vjb25maWdfY3R4O1xcbitcXHR2LVxcdTAwM2Vjb25maWdfY3R4ID0gTlVMTDtcXG4rXFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcXHUwMDI2di1cXHUwMDNlY29uZmlnX2xvY2ssIGZsYWdzKTtcXG4rXFxuK1xcdGlmIChjdHgpXFxuK1xcdFxcdGV2ZW50ZmRfY3R4X3B1dChjdHgpO1xcbiB9XFxuIFxcbiBzdGF0aWMgbG9uZyB2aG9zdF92ZHBhX3NldF9jb25maWdfY2FsbChzdHJ1Y3Qgdmhvc3RfdmRwYSAqdiwgdTMyIF9fdXNlciAqYXJncClcXG4ge1xcbiBcXHRzdHJ1Y3QgdmRwYV9jYWxsYmFjayBjYjtcXG4rXFx0dW5zaWduZWQgbG9uZyBmbGFncztcXG4gXFx0aW50IGZkO1xcbiBcXHRzdHJ1Y3QgZXZlbnRmZF9jdHggKmN0eDtcXG4gXFxuQEAgLTUyOSwxOCArNTQwLDIwIEBAIHN0YXRpYyBsb25nIHZob3N0X3ZkcGFfc2V0X2NvbmZpZ19jYWxsKHN0cnVjdCB2aG9zdF92ZHBhICp2LCB1MzIgX191c2VyICphcmdwKVxcbiBcXHRcXHRyZXR1cm4gIC1FRkFVTFQ7XFxuIFxcbiBcXHRjdHggPSBmZCA9PSBWSE9TVF9GSUxFX1VOQklORCA/IE5VTEwgOiBldmVudGZkX2N0eF9mZGdldChmZCk7XFxuK1xcdGlmIChJU19FUlIoY3R4KSlcXG4rXFx0XFx0cmV0dXJuIFBUUl9FUlIoY3R4KTtcXG4rXFxuK1xcdHNwaW5fbG9ja19pcnFzYXZlKFxcdTAwMjZ2LVxcdTAwM2Vjb25maWdfbG9jaywgZmxhZ3MpO1xcbiBcXHRzd2FwKGN0eCwgdi1cXHUwMDNlY29uZmlnX2N0eCk7XFxuK1xcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXFx1MDAyNnYtXFx1MDAzZWNvbmZpZ19sb2NrLCBmbGFncyk7XFxuIFxcbi1cXHRpZiAoIUlTX0VSUl9PUl9OVUxMKGN0eCkpXFxuK1xcdC8qXFxuK1xcdCAqIFRoZSBjYWxsYmFjayBjYW4gbm8gbG9uZ2VyIHJlYWNoIHRoZSBvbGQgY29udGV4dCwgc28gdGhpcyBpcyB0aGVcXG4rXFx0ICogbGFzdCByZWZlcmVuY2UgdG8gaXQuXFxuK1xcdCAqL1xcbitcXHRpZiAoY3R4KVxcbiBcXHRcXHRldmVudGZkX2N0eF9wdXQoY3R4KTtcXG4gXFxuLVxcdGlmIChJU19FUlIodi1cXHUwMDNlY29uZmlnX2N0eCkpIHtcXG4tXFx0XFx0bG9uZyByZXQgPSBQVFJfRVJSKHYtXFx1MDAzZWNvbmZpZ19jdHgpO1xcbi1cXG4tXFx0XFx0di1cXHUwMDNlY29uZmlnX2N0eCA9IE5VTEw7XFxuLVxcdFxcdHJldHVybiByZXQ7XFxuLVxcdH1cXG4tXFxuIFxcdHYtXFx1MDAzZXZkcGEtXFx1MDAzZWNvbmZpZy1cXHUwMDNlc2V0X2NvbmZpZ19jYih2LVxcdTAwM2V2ZHBhLCBcXHUwMDI2Y2IpO1xcbiBcXG4gXFx0cmV0dXJuIDA7XFxuQEAgLTE1OTksNiArMTYxMiw3IEBAIHN0YXRpYyBpbnQgdmhvc3RfdmRwYV9wcm9iZShzdHJ1Y3QgdmRwYV9kZXZpY2UgKnZkcGEpXFxuIFxcdH1cXG4gXFxuIFxcdGF0b21pY19zZXQoXFx1MDAyNnYtXFx1MDAzZW9wZW5lZCwgMCk7XFxuK1xcdHNwaW5fbG9ja19pbml0KFxcdTAwMjZ2LVxcdTAwM2Vjb25maWdfbG9jayk7XFxuIFxcdHYtXFx1MDAzZW1pbm9yID0gbWlub3I7XFxuIFxcdHYtXFx1MDAzZXZkcGEgPSB2ZHBhO1xcbiBcXHR2LVxcdTAwM2VudnFzID0gdmRwYS1cXHUwMDNlbnZxcztcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTI6MzU6MDYuNDMyMzI5MTFaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo2MzQ4ODE0MDY1MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJWSE9TVF9WRFBBXCIsXG4gICAgXCJWRFBBXCIsXG4gICAgXCJWRFBBX1NJTVwiLFxuICAgIFwiVkRQQV9TSU1fTkVUXCIsXG4gICAgXCJWRFBBX1NJTV9CTE9DS1wiLFxuICAgIFwiVkRQQV9VU0VSXCIsXG4gICAgXCJSVU5USU1FX1RFU1RJTkdfTUVOVVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInZob3N0X3ZkcGFfdW5sb2NrZWRfaW9jdGxcIixcbiAgICBcInZob3N0X3ZkcGFfcmVsZWFzZVwiLFxuICAgIFwidmhvc3RfdmRwYV9jb25maWdfY2JcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGEgc3BpbmxvY2sgdG8gYHN0cnVjdCB2aG9zdF92ZHBhYCB0byBmaXggYSByYWNlIGNvbmRpdGlvbiBiZXR3ZWVuIGB2aG9zdF92ZHBhX2NvbmZpZ19jYmAgYW5kIGB2aG9zdF92ZHBhX3NldF9jb25maWdfY2FsbGAgLyBgdmhvc3RfdmRwYV9jb25maWdfcHV0YC4gVGhlc2UgZnVuY3Rpb25zIGFyZSByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIHRoZSB2aG9zdC12ZHBhIGNoYXJkZXYgaW9jdGxzIGFuZCByZWxlYXNlIG9wZXJhdGlvbnMuIFRoZSB2RFBBIHN1YnN5c3RlbSBjYW4gYmUgdGVzdGVkIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQgdXNpbmcgdkRQQSBzaW11bGF0b3JzIChgdmRwYV9zaW1fbmV0YCwgYHZkcGFfc2ltX2Jsa2ApIG9yIGB2ZHVzZWAuIFRoZXJlZm9yZSwgdGhlIGNoYW5nZXMgaGF2ZSBhIGZ1bmN0aW9uYWwgaW1wYWN0IHRoYXQgaXMgd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgOTI4ZWVlMjA0YWU3YjNhYjc4NzZhNzNjNzAzMTM4NTgyNmI1YjYyNFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgQXVnIDcgMTI6MzU6MDMgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL3Zob3N0L3ZkcGEuYyBiL2RyaXZlcnMvdmhvc3QvdmRwYS5jXG5pbmRleCBhYzU1Mjc1ZmEwZDBhLi4yNzJkNTA2ZDgzMWM4IDEwMDY0NFxuLS0tIGEvZHJpdmVycy92aG9zdC92ZHBhLmNcbisrKyBiL2RyaXZlcnMvdmhvc3QvdmRwYS5jXG5AQCAtNTYsNiArNTYsOCBAQCBzdHJ1Y3Qgdmhvc3RfdmRwYSB7XG4gXHRpbnQgdmlydGlvX2lkO1xuIFx0aW50IG1pbm9yO1xuIFx0c3RydWN0IGV2ZW50ZmRfY3R4ICpjb25maWdfY3R4O1xuK1x0LyogU2VyaWFsaXNlcyB2aG9zdF92ZHBhX2NvbmZpZ19jYigpIGFnYWluc3QgY29uZmlnX2N0eCBiZWluZyByZXBsYWNlZC4gKi9cbitcdHNwaW5sb2NrX3QgY29uZmlnX2xvY2s7XG4gXHRpbnQgaW5fYmF0Y2g7XG4gXHRzdHJ1Y3QgdmRwYV9pb3ZhX3JhbmdlIHJhbmdlO1xuIFx0dTMyIGJhdGNoX2FzaWQ7XG5AQCAtMTg3LDEwICsxODksMTIgQEAgc3RhdGljIGlycXJldHVybl90IHZob3N0X3ZkcGFfdmlydHF1ZXVlX2NiKHZvaWQgKnByaXZhdGUpXG4gc3RhdGljIGlycXJldHVybl90IHZob3N0X3ZkcGFfY29uZmlnX2NiKHZvaWQgKnByaXZhdGUpXG4ge1xuIFx0c3RydWN0IHZob3N0X3ZkcGEgKnYgPSBwcml2YXRlO1xuLVx0c3RydWN0IGV2ZW50ZmRfY3R4ICpjb25maWdfY3R4ID0gdi1cdTAwM2Vjb25maWdfY3R4O1xuK1x0dW5zaWduZWQgbG9uZyBmbGFncztcbiBcbi1cdGlmIChjb25maWdfY3R4KVxuLVx0XHRldmVudGZkX3NpZ25hbChjb25maWdfY3R4KTtcbitcdHNwaW5fbG9ja19pcnFzYXZlKFx1MDAyNnYtXHUwMDNlY29uZmlnX2xvY2ssIGZsYWdzKTtcbitcdGlmICh2LVx1MDAzZWNvbmZpZ19jdHgpXG4rXHRcdGV2ZW50ZmRfc2lnbmFsKHYtXHUwMDNlY29uZmlnX2N0eCk7XG4rXHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNnYtXHUwMDNlY29uZmlnX2xvY2ssIGZsYWdzKTtcbiBcbiBcdHJldHVybiBJUlFfSEFORExFRDtcbiB9XG5AQCAtNTExLDE1ICs1MTUsMjIgQEAgc3RhdGljIGxvbmcgdmhvc3RfdmRwYV9nZXRfdnJpbmdfbnVtKHN0cnVjdCB2aG9zdF92ZHBhICp2LCB1MTYgX191c2VyICphcmdwKVxuIFxuIHN0YXRpYyB2b2lkIHZob3N0X3ZkcGFfY29uZmlnX3B1dChzdHJ1Y3Qgdmhvc3RfdmRwYSAqdilcbiB7XG4tXHRpZiAodi1cdTAwM2Vjb25maWdfY3R4KSB7XG4tXHRcdGV2ZW50ZmRfY3R4X3B1dCh2LVx1MDAzZWNvbmZpZ19jdHgpO1xuLVx0XHR2LVx1MDAzZWNvbmZpZ19jdHggPSBOVUxMO1xuLVx0fVxuK1x0c3RydWN0IGV2ZW50ZmRfY3R4ICpjdHg7XG4rXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuK1xuK1x0c3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2di1cdTAwM2Vjb25maWdfbG9jaywgZmxhZ3MpO1xuK1x0Y3R4ID0gdi1cdTAwM2Vjb25maWdfY3R4O1xuK1x0di1cdTAwM2Vjb25maWdfY3R4ID0gTlVMTDtcbitcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2di1cdTAwM2Vjb25maWdfbG9jaywgZmxhZ3MpO1xuK1xuK1x0aWYgKGN0eClcbitcdFx0ZXZlbnRmZF9jdHhfcHV0KGN0eCk7XG4gfVxuIFxuIHN0YXRpYyBsb25nIHZob3N0X3ZkcGFfc2V0X2NvbmZpZ19jYWxsKHN0cnVjdCB2aG9zdF92ZHBhICp2LCB1MzIgX191c2VyICphcmdwKVxuIHtcbiBcdHN0cnVjdCB2ZHBhX2NhbGxiYWNrIGNiO1xuK1x0dW5zaWduZWQgbG9uZyBmbGFncztcbiBcdGludCBmZDtcbiBcdHN0cnVjdCBldmVudGZkX2N0eCAqY3R4O1xuIFxuQEAgLTUyOSwxOCArNTQwLDIwIEBAIHN0YXRpYyBsb25nIHZob3N0X3ZkcGFfc2V0X2NvbmZpZ19jYWxsKHN0cnVjdCB2aG9zdF92ZHBhICp2LCB1MzIgX191c2VyICphcmdwKVxuIFx0XHRyZXR1cm4gIC1FRkFVTFQ7XG4gXG4gXHRjdHggPSBmZCA9PSBWSE9TVF9GSUxFX1VOQklORCA/IE5VTEwgOiBldmVudGZkX2N0eF9mZGdldChmZCk7XG4rXHRpZiAoSVNfRVJSKGN0eCkpXG4rXHRcdHJldHVybiBQVFJfRVJSKGN0eCk7XG4rXG4rXHRzcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZ2LVx1MDAzZWNvbmZpZ19sb2NrLCBmbGFncyk7XG4gXHRzd2FwKGN0eCwgdi1cdTAwM2Vjb25maWdfY3R4KTtcbitcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2di1cdTAwM2Vjb25maWdfbG9jaywgZmxhZ3MpO1xuIFxuLVx0aWYgKCFJU19FUlJfT1JfTlVMTChjdHgpKVxuK1x0LypcbitcdCAqIFRoZSBjYWxsYmFjayBjYW4gbm8gbG9uZ2VyIHJlYWNoIHRoZSBvbGQgY29udGV4dCwgc28gdGhpcyBpcyB0aGVcbitcdCAqIGxhc3QgcmVmZXJlbmNlIHRvIGl0LlxuK1x0ICovXG4rXHRpZiAoY3R4KVxuIFx0XHRldmVudGZkX2N0eF9wdXQoY3R4KTtcbiBcbi1cdGlmIChJU19FUlIodi1cdTAwM2Vjb25maWdfY3R4KSkge1xuLVx0XHRsb25nIHJldCA9IFBUUl9FUlIodi1cdTAwM2Vjb25maWdfY3R4KTtcbi1cbi1cdFx0di1cdTAwM2Vjb25maWdfY3R4ID0gTlVMTDtcbi1cdFx0cmV0dXJuIHJldDtcbi1cdH1cbi1cbiBcdHYtXHUwMDNldmRwYS1cdTAwM2Vjb25maWctXHUwMDNlc2V0X2NvbmZpZ19jYih2LVx1MDAzZXZkcGEsIFx1MDAyNmNiKTtcbiBcbiBcdHJldHVybiAwO1xuQEAgLTE1OTksNiArMTYxMiw3IEBAIHN0YXRpYyBpbnQgdmhvc3RfdmRwYV9wcm9iZShzdHJ1Y3QgdmRwYV9kZXZpY2UgKnZkcGEpXG4gXHR9XG4gXG4gXHRhdG9taWNfc2V0KFx1MDAyNnYtXHUwMDNlb3BlbmVkLCAwKTtcbitcdHNwaW5fbG9ja19pbml0KFx1MDAyNnYtXHUwMDNlY29uZmlnX2xvY2spO1xuIFx0di1cdTAwM2VtaW5vciA9IG1pbm9yO1xuIFx0di1cdTAwM2V2ZHBhID0gdmRwYTtcbiBcdHYtXHUwMDNlbnZxcyA9IHZkcGEtXHUwMDNlbnZxcztcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDEyOjM1OjA2LjQzMjMzMDE5WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTY1OTYwMjY1NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIHZob3N0LXZkcGEgUGF0Y2gqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIHRhcmdldGluZyBgZHJpdmVycy92aG9zdC92ZHBhLmNgLiBJIHNlZSB0aGV5J3JlIGludHJvZHVjaW5nIGEgc3BpbmxvY2sgY2FsbGVkIGBjb25maWdfbG9ja2Agd2l0aGluIHRoZSBgc3RydWN0IHZob3N0X3ZkcGFgLiBUaGUgaW50ZW50LCBhcyBJIHVuZGVyc3RhbmQgaXQsIGlzIHRvIHNlcmlhbGl6ZSB0aGUgZXhlY3V0aW9uIG9mIGB2aG9zdF92ZHBhX2NvbmZpZ19jYigpYCB3aXRoIHRoZSBwb3RlbnRpYWwgbW9kaWZpY2F0aW9uIG9mIGB2LVx1MDAzZWNvbmZpZ19jdHhgIHRoYXQgaGFwcGVucyBpbiBgdmhvc3RfdmRwYV9jb25maWdfcHV0KClgIGFuZCBgdmhvc3RfdmRwYV9zZXRfY29uZmlnX2NhbGwoKWAuIEVzc2VudGlhbGx5LCB0aGV5J3JlIGZpeGluZyBhIHJhY2UgY29uZGl0aW9uLiBJdCBzZWVtcyBgY29uZmlnX2N0eGAgd2FzIGdldHRpbmcgZnJlZWQsIGFuZCB0aGVuIHBvdGVudGlhbGx5IHVzZWQgbGF0ZXIsIHdoaWNoIGlzIGEgY2xhc3NpYyBtZW1vcnkgc2FmZXR5IHByb2JsZW0uIEEgc3BpbmxvY2sgaXMgYSBzZW5zaWJsZSBhcHByb2FjaCBoZXJlIHRvIGVuc3VyZSBwcm9wZXIgc3luY2hyb25pemF0aW9uLlxuXG5Ob3csIGxldCBtZSBqdXN0IGNvbmZpcm0gbXkgdW5kZXJzdGFuZGluZy4gU2luY2UgdGhpcyBwYXRjaCBpcyByZWxhdGVkIHRvIHZob3N0LXZkcGEsIGxldCBtZSBtYWtlIHN1cmUgSSB1bmRlcnN0YW5kIHRoZSBjb250ZXh0IGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQuIHZob3N0LXZkcGEsIGFzIEkga25vdywgaXMgYSB2aG9zdCBkcml2ZXIgZm9yIHZEUEEgKHZob3N0IERhdGEgUGF0aCBBY2NlbGVyYXRpb24pLiBJZiBpdCdzIHZEUEEgdGhlbiB0aGUgZGV2aWNlIHdvdWxkIGJlIHNpbXVsYXRlZCBieSBgdmRwYV9zaW1gIChlLmcuLCBgdmRwYV9zaW1fbmV0YCwgYHZkcGFfc2ltX2Jsa2ApLCBzbyB5ZXMsIHRoaXMgc2hvdWxkIGRlZmluaXRlbHkgYmUgcmVhY2hhYmxlLlxuXG5OZXh0LCBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGVyZSB0byBmaW5kIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIHZob3N0LXZkcGEuIEhtbW0sIGlzIGl0IGluIGBkcml2ZXJzL3Zob3N0L0tjb25maWdgIG9yIGBkcml2ZXJzL3ZkcGEvS2NvbmZpZ2A/IEl0J3MgcHJvYmFibHkgaW4gdGhlIGZvcm1lciwgYmVjYXVzZSBgdmhvc3RgIGlzIHRoZSByb290LCBidXQgSSdsbCBoYXZlIHRvIGRvdWJsZS1jaGVjay5cblxuXG4iLCJJbnB1dFRva2VucyI6MjkwNCwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzMiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDEyOjM1OjEyLjA5MTkzNTc3NloiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MTY5MjM3NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgVkhPU1RfVkRQQVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL3Zob3N0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3Zob3N0L0tjb25maWc9NTY9Y29uZmlnIFZIT1NUX1ZTT0NLXFxuLS1cXG5kcml2ZXJzL3Zob3N0L0tjb25maWctNjktXFxuZHJpdmVycy92aG9zdC9LY29uZmlnOjcwOmNvbmZpZyBWSE9TVF9WRFBBXFxuZHJpdmVycy92aG9zdC9LY29uZmlnLTcxLVxcdHRyaXN0YXRlIFxcXCJWaG9zdCBkcml2ZXIgZm9yIHZEUEEtYmFzZWQgYmFja2VuZFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTI6MzU6MTIuMTQzNjMxODgzWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzEyMjY0MjEzNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaXQganVzdCBvY2N1cnJlZCB0byBtZTpcblxuKipJbnZlc3RpZ2F0aW5nIFZIT1NUX1ZEUEEgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgcmVsYXRlZCB0byBWSE9TVF9WRFBBLiBNeSBmaXJzdCBpbnN0aW5jdCBpcyB0byBkaXZlIGludG8gdGhlIEtjb25maWcgZmlsZXMuIFNwZWNpZmljYWxseSwgSSdtIGdvaW5nIHRvIGNoZWNrIHRoZSBgZHJpdmVycy92aG9zdC9LY29uZmlnYCBmaWxlLiBUaGF0J3Mgd2hlcmUgSSBleHBlY3QgdG8gZmluZCB0aGUgcmVsZXZhbnQgZGVmaW5pdGlvbnMgYW5kIGRlcGVuZGVuY2llcyBmb3IgYFZIT1NUX1ZEUEFgLiBJdCdzIHRoZSBsb2dpY2FsIHBsYWNlIHRvIHN0YXJ0IGRpZ2dpbmcgZm9yIHRoZSBrbm9icyBhbmQgbGV2ZXJzIGNvbnRyb2xsaW5nIHRoaXMgZnVuY3Rpb25hbGl0eS4gTGV0J3Mgc2VlIHdoYXQncyBpbiB0aGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzYxMywiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDEyOjM1OjE1LjI2NjI3NzY1WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTkxNDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy92aG9zdC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDY1LFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDY1OlxcdFxcdHZpcnRpb190cmFuc3BvcnQua28gZHJpdmVyIGxvYWRlZCB0byB1c2UgdGhlIHZpcnRpby12c29jayBkZXZpY2UuXFxuICA2NjpcXHRcXG4gIDY3OlxcdFxcdFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGUgd2lsbCBiZSBjYWxsZWRcXG4gIDY4OlxcdFxcdHZob3N0X3Zzb2NrLlxcbiAgNjk6XFx0XFxuICA3MDpcXHRjb25maWcgVkhPU1RfVkRQQVxcbiAgNzE6XFx0XFx0dHJpc3RhdGUgXFxcIlZob3N0IGRyaXZlciBmb3IgdkRQQS1iYXNlZCBiYWNrZW5kXFxcIlxcbiAgNzI6XFx0XFx0ZGVwZW5kcyBvbiBFVkVOVEZEXFxuICA3MzpcXHRcXHRzZWxlY3QgVkhPU1RcXG4gIDc0OlxcdFxcdHNlbGVjdCBJUlFfQllQQVNTX01BTkFHRVJcXG4gIDc1OlxcdFxcdGRlcGVuZHMgb24gVkRQQVxcbiAgNzY6XFx0XFx0aGVscFxcbiAgNzc6XFx0XFx0ICBUaGlzIGtlcm5lbCBtb2R1bGUgY2FuIGJlIGxvYWRlZCBpbiBob3N0IGtlcm5lbCB0byBhY2NlbGVyYXRlXFxuICA3ODpcXHRcXHQgIGd1ZXN0IHZpcnRpbyBkZXZpY2VzIHdpdGggdGhlIHZEUEEtYmFzZWQgYmFja2VuZHMuXFxuICA3OTpcXHRcXG4gIDgwOlxcdFxcdCAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZVxcbiAgODE6XFx0XFx0ICB3aWxsIGJlIGNhbGxlZCB2aG9zdF92ZHBhLlxcbiAgODI6XFx0XFxuICA4MzpcXHRjb25maWcgVkhPU1RfQ1JPU1NfRU5ESUFOX0xFR0FDWVxcbiAgODQ6XFx0XFx0Ym9vbCBcXFwiQ3Jvc3MtZW5kaWFuIHN1cHBvcnQgZm9yIHZob3N0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxMjozNToxNS4yNjYzMzkwNVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI3Njk5NTg0MjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOlxuXG4qKk5hdmlnYXRpbmcgRGVwZW5kZW5jaWVzKipcblxuT2theSwgc28gSSdtIGRlYWxpbmcgd2l0aCBgVkhPU1RfVkRQQWAgYW5kIGl0J3MgcHJldHR5IGNsZWFyIHRoYXQgaXQgaGFzIGEgZGVwZW5kZW5jeSBvbiBgVkRQQWAuIFRoYXQgbWVhbnMgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbmZpZ3VyYXRpb24gcmVsYXRlZCB0byBgVkRQQWAgYmVmb3JlIEkgY2FuIHRydWx5IGdyYXNwIHRoZSBzZXR1cCBmb3IgYFZIT1NUX1ZEUEFgLiBUaW1lIHRvIGRyaWxsIGRvd24gaW50byB0aGUgY29uZmlndXJhdGlvbiBmaWxlcyBhbmQgZG9jdW1lbnRhdGlvbiB0byBsb2NhdGUgYW5kIGRpc3NlY3QgdGhvc2UgYFZEUEFgIHNldHRpbmdzLiBJIG5lZWQgdG8gZmlndXJlIG91dCBob3cgYFZEUEFgIGlzIGNvbmZpZ3VyZWQgYmVmb3JlIEkgY2FuIHByb2NlZWQgd2l0aCB0aGUgcHJpbWFyeSB0YXNrLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MDgzLCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxMjozNToxOC4wMzYzMDAxNzNaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTA5MzM1MDYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFZEUEFcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy92ZHBhL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3ZkcGEvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbmRyaXZlcnMvdmRwYS9LY29uZmlnOjI6bWVudWNvbmZpZyBWRFBBXFxuZHJpdmVycy92ZHBhL0tjb25maWctMy1cXHR0cmlzdGF0ZSBcXFwidkRQQSBkcml2ZXJzXFxcIlxcbi0tXFxuZHJpdmVycy92ZHBhL0tjb25maWc9MTA9aWYgVkRQQVxcbmRyaXZlcnMvdmRwYS9LY29uZmlnLTExLVxcbmRyaXZlcnMvdmRwYS9LY29uZmlnOjEyOmNvbmZpZyBWRFBBX1NJTVxcbmRyaXZlcnMvdmRwYS9LY29uZmlnLTEzLVxcdHRyaXN0YXRlIFxcXCJ2RFBBIGRldmljZSBzaW11bGF0b3IgY29yZVxcXCJcXG4tLVxcbmRyaXZlcnMvdmRwYS9LY29uZmlnLTIwLVxcbmRyaXZlcnMvdmRwYS9LY29uZmlnOjIxOmNvbmZpZyBWRFBBX1NJTV9ORVRcXG5kcml2ZXJzL3ZkcGEvS2NvbmZpZy0yMi1cXHR0cmlzdGF0ZSBcXFwidkRQQSBzaW11bGF0b3IgZm9yIG5ldHdvcmtpbmcgZGV2aWNlXFxcIlxcbi0tXFxuZHJpdmVycy92ZHBhL0tjb25maWctMjctXFxuZHJpdmVycy92ZHBhL0tjb25maWc6Mjg6Y29uZmlnIFZEUEFfU0lNX0JMT0NLXFxuZHJpdmVycy92ZHBhL0tjb25maWctMjktXFx0dHJpc3RhdGUgXFxcInZEUEEgc2ltdWxhdG9yIGZvciBibG9jayBkZXZpY2VcXFwiXFxuLS1cXG5kcml2ZXJzL3ZkcGEvS2NvbmZpZy0zNC1cXG5kcml2ZXJzL3ZkcGEvS2NvbmZpZzozNTpjb25maWcgVkRQQV9VU0VSXFxuZHJpdmVycy92ZHBhL0tjb25maWctMzYtXFx0dHJpc3RhdGUgXFxcIlZEVVNFICh2RFBBIERldmljZSBpbiBVc2Vyc3BhY2UpIHN1cHBvcnRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDEyOjM1OjE4LjA4NzI0MDE4OVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQyNDAyMzYxNzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIGluc3RydWN0aW9ucywgdGhpbmtpbmcgdGhyb3VnaCB0aGVtIGFzIEkgd291bGQgYXBwcm9hY2ggYSBzaW1pbGFyIHNpdHVhdGlvbi5cblxuKipWRFUgYW5kIHRoZSBWaXJ0aW8tdkRQQSBSb2FkIEFoZWFkKipcblxuQWxyaWdodCwgc28gdGhlIGluaXRpYWwgZGlyZWN0aW9uIGlzIGNsZWFyOiBsZXQncyBnZXQgdGhlIGJhbGwgcm9sbGluZyBvbiB2RFBBLiBUaGUgc3VnZ2VzdGlvbiBpcyB0byBlbmFibGUgYFZIT1NUX1ZEUEFgLCBgVkRQQWAsIGBWRFBBX1NJTWAsIGBWRFBBX1NJTV9ORVRgLCBgVkRQQV9TSU1fQkxPQ0tgLCBhbmQgYFZEUEFfVVNFUmAuIFNlZW1zIGxpa2UgYSBzZW5zaWJsZSBzdGFydGluZyBwb2ludCB0byBnZXQgY29tcHJlaGVuc2l2ZSB2RFBBIHN1cHBvcnQgdXAgYW5kIHJ1bm5pbmcuIEnigJltIHRoaW5raW5nIHRoaXMgbG9va3MgbGlrZSBhIGdvb2QgYmFzZSB0byBzdXBwb3J0IGRpZmZlcmVudCB2RFBBIGJhY2tlbmRzLCBhbmQgYWxzbyB0byBzdXBwb3J0IHNpbXVsYXRpb24gZm9yIHRlc3RpbmcuXG5cbkJlZm9yZSBnb2luZyB0b28gZmFyIGRvd24gdGhlIHJhYmJpdCBob2xlLCB0aG91Z2gsIEkga25vdyBJIG5lZWQgdG8gYmUgbWV0aG9kaWNhbC4gVGhlIG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIGRlbHZlIGludG8gdGhlIGBWRFBBX1NJTWAgZGVwZW5kZW5jeSB0cmVlLiBVbmRlcnN0YW5kaW5nIHRoZXNlIGRlcGVuZGVuY2llcyB3aWxsIHRlbGwgbWUgZXZlcnl0aGluZyB0aGF0IG5lZWRzIHRvIGJlIGluIHBsYWNlIGZvciB0aGUgc2ltdWxhdGlvbiBlbnZpcm9ubWVudCB0byBmdW5jdGlvbiwgYW5kIGhlbHAgbWUgc3BvdCBhbnkgcG90ZW50aWFsIGNvbmZsaWN0cyBvciBtaXNzaW5nIHBpZWNlcyBlYXJseSBvbi4gSSdsbCBuZWVkIHRvIGtub3cgd2hpY2ggbGlicmFyaWVzLCBvdGhlciBrZXJuZWwgbW9kdWxlcywgYW5kIGNvbmZpZ3VyYXRpb25zIGl0IHJlbGllcyBvbi4gSSdsbCBuZWVkIHRvIGtub3cgaWYgdGhpcyBzaW11bGF0aW9uIHRvb2wgY2hhaW5zIHByb3Blcmx5IHdpdGggYW55IGV4aXN0aW5nIGFyY2hpdGVjdHVyZSwgb3IgaWYgaXQgY2F1c2VzIGFueSBjb21wYXRpYmlsaXR5IGlzc3Vlcy4gVGhpcyB3aWxsIHNhdmUgbWUgZnJvbSBhIGxvdCBvZiBoZWFkYWNoZXMgbGF0ZXIuIFRoaXMgaXMgZGVmaW5pdGVseSB3aGVyZSBJIHdpbGwgc3RhcnQgbXkgaW52ZXN0aWdhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6NDU3NSwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDEyOjM1OjIyLjMyNzQ3ODg1OFoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NjEwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL3ZkcGEvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbiAgIDI6XFx0bWVudWNvbmZpZyBWRFBBXFxuICAgMzpcXHRcXHR0cmlzdGF0ZSBcXFwidkRQQSBkcml2ZXJzXFxcIlxcbiAgIDQ6XFx0XFx0ZGVwZW5kcyBvbiBORVRcXG4gICA1OlxcdFxcdGhlbHBcXG4gICA2OlxcdFxcdCAgRW5hYmxlIHRoaXMgbW9kdWxlIHRvIHN1cHBvcnQgdkRQQSBkZXZpY2UgdGhhdCB1c2VzIGFcXG4gICA3OlxcdFxcdCAgZGF0YXBhdGggd2hpY2ggY29tcGxpZXMgd2l0aCB2aXJ0aW8gc3BlY2lmaWNhdGlvbnMgd2l0aFxcbiAgIDg6XFx0XFx0ICB2ZW5kb3Igc3BlY2lmaWMgY29udHJvbCBwYXRoLlxcbiAgIDk6XFx0XFxuICAxMDpcXHRpZiBWRFBBXFxuICAxMTpcXHRcXG4gIDEyOlxcdGNvbmZpZyBWRFBBX1NJTVxcbiAgMTM6XFx0XFx0dHJpc3RhdGUgXFxcInZEUEEgZGV2aWNlIHNpbXVsYXRvciBjb3JlXFxcIlxcbiAgMTQ6XFx0XFx0ZGVwZW5kcyBvbiBSVU5USU1FX1RFU1RJTkdfTUVOVVxcbiAgMTU6XFx0XFx0c2VsZWN0IFZIT1NUX1JJTkdcXG4gIDE2OlxcdFxcdHNlbGVjdCBJT01NVV9JT1ZBXFxuICAxNzpcXHRcXHRoZWxwXFxuICAxODpcXHRcXHQgIEVuYWJsZSB0aGlzIG1vZHVsZSB0byBzdXBwb3J0IHZEUEEgZGV2aWNlIHNpbXVsYXRvcnMuIFRoZXNlIGRldmljZXNcXG4gIDE5OlxcdFxcdCAgYXJlIHVzZWQgZm9yIHRlc3RpbmcsIHByb3RvdHlwaW5nIGFuZCBkZXZlbG9wbWVudCBvZiB2RFBBLlxcbiAgMjA6XFx0XFxuICAyMTpcXHRjb25maWcgVkRQQV9TSU1fTkVUXFxuICAyMjpcXHRcXHR0cmlzdGF0ZSBcXFwidkRQQSBzaW11bGF0b3IgZm9yIG5ldHdvcmtpbmcgZGV2aWNlXFxcIlxcbiAgMjM6XFx0XFx0ZGVwZW5kcyBvbiBWRFBBX1NJTVxcbiAgMjQ6XFx0XFx0c2VsZWN0IEdFTkVSSUNfTkVUX1VUSUxTXFxuICAyNTpcXHRcXHRoZWxwXFxuICAyNjpcXHRcXHQgIHZEUEEgbmV0d29ya2luZyBkZXZpY2Ugc2ltdWxhdG9yIHdoaWNoIGxvb3BzIFRYIHRyYWZmaWMgYmFjayB0byBSWC5cXG4gIDI3OlxcdFxcbiAgMjg6XFx0Y29uZmlnIFZEUEFfU0lNX0JMT0NLXFxuICAyOTpcXHRcXHR0cmlzdGF0ZSBcXFwidkRQQSBzaW11bGF0b3IgZm9yIGJsb2NrIGRldmljZVxcXCJcXG4gIDMwOlxcdFxcdGRlcGVuZHMgb24gVkRQQV9TSU1cXG4gIDMxOlxcdFxcdGhlbHBcXG4gIDMyOlxcdFxcdCAgdkRQQSBibG9jayBkZXZpY2Ugc2ltdWxhdG9yIHdoaWNoIHRlcm1pbmF0ZXMgSU8gcmVxdWVzdCBpbiBhXFxuICAzMzpcXHRcXHQgIG1lbW9yeSBidWZmZXIuXFxuICAzNDpcXHRcXG4gIDM1OlxcdGNvbmZpZyBWRFBBX1VTRVJcXG4gIDM2OlxcdFxcdHRyaXN0YXRlIFxcXCJWRFVTRSAodkRQQSBEZXZpY2UgaW4gVXNlcnNwYWNlKSBzdXBwb3J0XFxcIlxcbiAgMzc6XFx0XFx0ZGVwZW5kcyBvbiBFVkVOVEZEIFxcdTAwMjZcXHUwMDI2IE1NVVxcbiAgMzg6XFx0XFx0c2VsZWN0IFZIT1NUX0lPVExCXFxuICAzOTpcXHRcXHRzZWxlY3QgSU9NTVVfSU9WQVxcbiAgNDA6XFx0XFx0aGVscFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxMjozNToyMi4zMjc1NDY2NzhaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDY2OTcyMTM4OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipFbmFibGluZyBWRFBBIFN1cHBvcnQgYW5kIEV4YW1pbmluZyBEcml2ZXIgTW9kaWZpY2F0aW9ucyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgY29uZmlndXJhdGlvbi4gSXQgc2VlbXMgYFZEUEFfU0lNYCByZWxpZXMgZGlyZWN0bHkgb24gYFJVTlRJTUVfVEVTVElOR19NRU5VYC4gVGhhdCdzIGltcG9ydGFudC4gVG8gZW5zdXJlIGEgY29tcHJlaGVuc2l2ZSB0ZXN0IHN1aXRlIGFuZCByb2J1c3QgY29uZmlndXJhdGlvbiwgSSBzaG91bGQgZW5hYmxlIGEgc3VpdGUgb2YgcmVsYXRlZCBmZWF0dXJlczogYFZEUEFgLCBgVkRQQV9TSU1gLCBgVkRQQV9TSU1fTkVUYCwgYFZEUEFfU0lNX0JMT0NLYCwgYFZEUEFfVVNFUmAsIGFuZCBgVkhPU1RfVkRQQWAuIFdlIHdhbnQgdGhlIHdob2xlIGVuY2hpbGFkYSB0byBlbnN1cmUgcHJvcGVyIGNvdmVyYWdlLlxuXG5Ob3csIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGVzZSBzZXR0aW5ncyBpbXBhY3QgdGhlIGB2aG9zdC92ZHBhLmNgIGRyaXZlci4gTGV0J3MgZGlnIGludG8gdGhlIHNwZWNpZmljIGZ1bmN0aW9ucyB0aGF0IGhhdmUgYmVlbiBtb2RpZmllZC4gSSBzZWUgYHZob3N0X3ZkcGFfY29uZmlnX2NiYCwgYHZob3N0X3ZkcGFfY29uZmlnX3B1dGAsIGB2aG9zdF92ZHBhX3NldF9jb25maWdfY2FsbGAsIGFuZCBgdmhvc3RfdmRwYV9wcm9iZWAgYXJlIHRoZSBrZXkgZnVuY3Rpb25zIHRvIGV4YW1pbmUuXG5cbmB2aG9zdF92ZHBhX2NvbmZpZ19jYmAgaW1tZWRpYXRlbHkganVtcHMgb3V0OyBpdCdzIGFuIGludGVycnVwdCBoYW5kbGVyLiBUaGF0IGxpa2VseSBtZWFucyBpdCdzIGNyaXRpY2FsIGZvciByZWFsLXRpbWUgcmVzcG9uc2l2ZW5lc3MgYW5kIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBiZWhhdmlvciB0aG9yb3VnaGx5LlxuXG5gdmhvc3RfdmRwYV9jb25maWdfcHV0YCBpcyB0aGUgbmV4dCBmb2N1cy4gVGhlIGNvZGUgc3VnZ2VzdHMgaXQncyBjYWxsZWQgZnJvbSBgdmhvc3RfdmRwYV9yZWxlYXNlYCBhbmQgcG90ZW50aWFsbHkgYHZob3N0X3ZkcGFfc2V0dXBfdnFfaXJxYC4gSSBzaG91bGQgdmVyaWZ5IHRoYXQgY2FsbCBjaGFpbiBjYXJlZnVsbHkgdG8gdW5kZXJzdGFuZCByZXNvdXJjZSBjbGVhbnVwIGFuZCBjb25maWd1cmF0aW9uLiBJIG5lZWQgdG8gY29uZmlybSB0aG9zZSBkZXBlbmRlbmNpZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU0NTYsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOTUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxMjozNToyNi45OTcyNzAzNjVaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU3NjQyMzg2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInZob3N0X3ZkcGFfY29uZmlnX3B1dFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL3Zob3N0L3ZkcGEuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3Zob3N0L3ZkcGEuYz01MDI9c3RhdGljIGxvbmcgdmhvc3RfdmRwYV9nZXRfdnJpbmdfbnVtKHN0cnVjdCB2aG9zdF92ZHBhICp2LCB1MTYgX191c2VyICphcmdwKVxcbi0tXFxuZHJpdmVycy92aG9zdC92ZHBhLmMtNTE1LVxcbmRyaXZlcnMvdmhvc3QvdmRwYS5jOjUxNjpzdGF0aWMgdm9pZCB2aG9zdF92ZHBhX2NvbmZpZ19wdXQoc3RydWN0IHZob3N0X3ZkcGEgKnYpXFxuZHJpdmVycy92aG9zdC92ZHBhLmMtNTE3LXtcXG4tLVxcbmRyaXZlcnMvdmhvc3QvdmRwYS5jPTE0NzY9c3RhdGljIGludCB2aG9zdF92ZHBhX3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGVwKVxcbi0tXFxuZHJpdmVycy92aG9zdC92ZHBhLmMtMTQ4Ni1cXHR2aG9zdF92ZHBhX3VuYmluZF9tbSh2KTtcXG5kcml2ZXJzL3Zob3N0L3ZkcGEuYzoxNDg3OlxcdHZob3N0X3ZkcGFfY29uZmlnX3B1dCh2KTtcXG5kcml2ZXJzL3Zob3N0L3ZkcGEuYy0xNDg4LVxcdHZob3N0X3ZkcGFfY2xlYW51cCh2KTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTI6MzU6MjcuMDU0OTE2MTAxWiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM4ODY2NjA1ODMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipNeSBDdXJyZW50IERlZHVjdGlvbnMgb24gdmhvc3RfdmRwYV9zZXRfY29uZmlnX2NhbGwqKlxuXG5SaWdodCwgbGV0IG1lIHNlZS4uLnNvIGB2aG9zdF92ZHBhX3NldF9jb25maWdfY2FsbGAgaXMgZGVmaW5pdGVseSBjYWxsZWQgZnJvbSBgdmhvc3RfdmRwYV91bmxvY2tlZF9pb2N0bGAuIFRoYXQgbWVhbnMgdGhlIGBzZXRfY29uZmlnYCBmdW5jdGlvbiBpcyBhY2Nlc3NlZCB2aWEgdGhlIElPQ1RMIGludGVyZmFjZSwgd2hpY2ggaXMgYXMgZXhwZWN0ZWQuIEknbSBub3RpbmcgdGhpcyBzcGVjaWZpY2FsbHkgYmVjYXVzZSBpdCBpbXBsaWVzIGEgZmV3IHRoaW5ncyByaWdodCBvZmYgdGhlIGJhdDogdGhlIGNvbmZpZ3VyYXRpb24gc2V0dGluZyBwcm9iYWJseSBpbnZvbHZlcyBzb21lIHVzZXItc3BhY2UgaW50ZXJhY3Rpb24g4oCTIHN0YW5kYXJkIGZvciBJT0NUTHMsIG9mIGNvdXJzZS4gSXQgYWxzbyBtZWFucyB0aGF0IHRoZXJlJ3MgYSBnb29kIGNoYW5jZSB0aGVyZSB3aWxsIGJlIGxvY2tpbmcgY29uc2lkZXJhdGlvbnMgYW5kIHNlY3VyaXR5IGNoZWNrcyB3aXRoaW4gdGhlIGB2aG9zdF92ZHBhX3VubG9ja2VkX2lvY3RsYCBjb250ZXh0LiBJIHNob3VsZCBwcm9iYWJseSByZS1mYW1pbGlhcml6ZSBteXNlbGYgd2l0aCB0aGUgbG9ja2luZyBzdHJhdGVneSB0aGVyZSBhbmQgdGhlIHBvdGVudGlhbCBmb3IgcmFjZSBjb25kaXRpb25zIGludm9sdmluZyBjb25maWd1cmF0aW9uIGNoYW5nZXMuIE5lZWQgdG8gZG91YmxlIGNoZWNrIGhvdyB0aGUgZGV2aWNlIHN0YXRlIGlzIHByb3RlY3RlZCwgZXNwZWNpYWxseSB3aGVuIGRlYWxpbmcgd2l0aCBwb3RlbnRpYWxseSBjb25jdXJyZW50IHVzZXItc3BhY2UgcmVxdWVzdHMuIEEgcXVpY2sgZGl2ZSBpbnRvIHRoYXQgYXJlYSBzaG91bGQgcmV2ZWFsIHRoZSBwZXJ0aW5lbnQgc3RydWN0dXJlcy4gSSdsbCBhbHNvIHdhbnQgdG8gdW5kZXJzdGFuZCB0aGUgZXhhY3Qgc3RydWN0dXJlIG9mIHRoZSBjb25maWd1cmF0aW9uIGRhdGEgYmVpbmcgcGFzc2VkIGluIHRocm91Z2ggdGhlIElPQ1RMIGFuZCB0aGUgdmFsaWRhdGlvbiB0aGF0J3MgcGVyZm9ybWVkIG9uIGl0LiBBbnkgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdGllcyByZWxhdGVkIHRvIGJ1ZmZlciBvdmVyZmxvd3Mgb3IgZGF0YSBmb3JtYXQgaXNzdWVzIG5lZWQgdG8gYmUgaWRlbnRpZmllZC4gVGhlIGNvbnRleHQgaGVyZSB0ZWxscyBtZSB3aGVyZSB0byBzdGFydCBkaWdnaW5nIGZvciB0aGUga2V5IGFyZWFzIG9mIGNvbmNlcm4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYyNzEsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxMjozNTozMC45NDE1Nzk1NTRaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjcwODE3NDAyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ2aG9zdF92ZHBhX3NldF9jb25maWdfY2FsbFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL3Zob3N0L3ZkcGEuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3Zob3N0L3ZkcGEuYz01MTY9c3RhdGljIHZvaWQgdmhvc3RfdmRwYV9jb25maWdfcHV0KHN0cnVjdCB2aG9zdF92ZHBhICp2KVxcbi0tXFxuZHJpdmVycy92aG9zdC92ZHBhLmMtNTI5LVxcbmRyaXZlcnMvdmhvc3QvdmRwYS5jOjUzMDpzdGF0aWMgbG9uZyB2aG9zdF92ZHBhX3NldF9jb25maWdfY2FsbChzdHJ1Y3Qgdmhvc3RfdmRwYSAqdiwgdTMyIF9fdXNlciAqYXJncClcXG5kcml2ZXJzL3Zob3N0L3ZkcGEuYy01MzEte1xcbi0tXFxuZHJpdmVycy92aG9zdC92ZHBhLmM9Nzg5PXN0YXRpYyBsb25nIHZob3N0X3ZkcGFfdW5sb2NrZWRfaW9jdGwoc3RydWN0IGZpbGUgKmZpbGVwLFxcbi0tXFxuZHJpdmVycy92aG9zdC92ZHBhLmMtODY4LVxcdGNhc2UgVkhPU1RfVkRQQV9TRVRfQ09ORklHX0NBTEw6XFxuZHJpdmVycy92aG9zdC92ZHBhLmM6ODY5OlxcdFxcdHIgPSB2aG9zdF92ZHBhX3NldF9jb25maWdfY2FsbCh2LCBhcmdwKTtcXG5kcml2ZXJzL3Zob3N0L3ZkcGEuYy04NzAtXFx0XFx0YnJlYWs7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDEyOjM1OjMxLjY0OTc1ODg2NFoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MzM0NzEzMTkxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkRpdmluZyBpbnRvIHRoZSBWaG9zdC1WZHBhIENvbmZpZ3VyYXRpb24gUHJvY2VzcyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGhvdyB0aGUgYFZIT1NUX1ZEUEFfU0VUX0NPTkZJR19DQUxMYCBpb2N0bCBpcyBoYW5kbGVkIHdpdGhpbiB0aGUgdmhvc3QtdmRwYSBmcmFtZXdvcmsuIEl0IHNlZW1zIGB2aG9zdF92ZHBhX3NldF9jb25maWdfY2FsbGAgaXMgdGhlIGtleSBmdW5jdGlvbiBoZXJlLCBhY3RpbmcgYXMgdGhlIGlvY3RsIGhhbmRsZXIgZm9yIHRoYXQgcGFydGljdWxhciBjb21tYW5kLiBNeSB1bmRlcnN0YW5kaW5nIGlzIHRoYXQsIHdpdGhpbiB0aGlzLCB0aGUgY3JpdGljYWwgcGllY2UgaXMgdGhlIGB2aG9zdF92ZHBhX2NvbmZpZ19jYmAgY2FsbGJhY2suIFRoaXMgY2FsbGJhY2sgaXMgdGhlbiBhc3NpZ25lZCB0aHJvdWdoIGB2LVx1MDAzZXZkcGEtXHUwMDNlY29uZmlnLVx1MDAzZXNldF9jb25maWdfY2Iodi1cdTAwM2V2ZHBhLCBcdTAwMjZjYik7YCwgc3VnZ2VzdGluZyBpdCBpcyBsaWtlbHkgdGhlIG1lY2hhbmlzbSB0aHJvdWdoIHdoaWNoIHRoZSBhY3R1YWwgY29uZmlndXJhdGlvbiBvcGVyYXRpb25zIGFyZSBwZXJmb3JtZWQuXG5cbkkgcmVhbGx5IG5lZWQgdG8gZHJpbGwgZG93biBpbnRvIHRoZSBkZXRhaWxzIG9mIGB2aG9zdF92ZHBhX3NldF9jb25maWdfY2FsbGAgdG8gdW5kZXJzdGFuZCB0aGUgZGF0YSBmbG93IGFuZCBlbnN1cmUgSSBnZXQgdGhlIG51YW5jZSBvZiBpdHMgd29ya2luZ3MsIHNwZWNpZmljYWxseSB0byB1bmRlcnN0YW5kIHRoZSBzZXR0aW5nIG9mIHRoZSBgY29uZmlnX2NiYC5cblxuVGhlcmVmb3JlLCBJJ20gZ29pbmcgdG8gaGVhZCBkaXJlY3RseSB0byBgZHJpdmVycy92aG9zdC92ZHBhLmNgIHRvIGV4YW1pbmUgYHZob3N0X3ZkcGFfc2V0X2NvbmZpZ19jYWxsYCBjbG9zZWx5LiBUaGlzIHNob3VsZCBpbGx1bWluYXRlIHRoZSBwYXRoIG9mIGNvbmZpZ3VyYXRpb24hXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY4ODEsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTI6MzU6MzUuOTg0NDc0MTk1WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyNjMxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL3Zob3N0L3ZkcGEuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA1MjUsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA1MjU6XFx0XFxuIDUyNjpcXHRcXHRpZiAoY3R4KVxcbiA1Mjc6XFx0XFx0XFx0ZXZlbnRmZF9jdHhfcHV0KGN0eCk7XFxuIDUyODpcXHR9XFxuIDUyOTpcXHRcXG4gNTMwOlxcdHN0YXRpYyBsb25nIHZob3N0X3ZkcGFfc2V0X2NvbmZpZ19jYWxsKHN0cnVjdCB2aG9zdF92ZHBhICp2LCB1MzIgX191c2VyICphcmdwKVxcbiA1MzE6XFx0e1xcbiA1MzI6XFx0XFx0c3RydWN0IHZkcGFfY2FsbGJhY2sgY2I7XFxuIDUzMzpcXHRcXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xcbiA1MzQ6XFx0XFx0aW50IGZkO1xcbiA1MzU6XFx0XFx0c3RydWN0IGV2ZW50ZmRfY3R4ICpjdHg7XFxuIDUzNjpcXHRcXG4gNTM3OlxcdFxcdGNiLmNhbGxiYWNrID0gdmhvc3RfdmRwYV9jb25maWdfY2I7XFxuIDUzODpcXHRcXHRjYi5wcml2YXRlID0gdjtcXG4gNTM5OlxcdFxcdGlmIChjb3B5X2Zyb21fdXNlcihcXHUwMDI2ZmQsIGFyZ3AsIHNpemVvZihmZCkpKVxcbiA1NDA6XFx0XFx0XFx0cmV0dXJuICAtRUZBVUxUO1xcbiA1NDE6XFx0XFxuIDU0MjpcXHRcXHRjdHggPSBmZCA9PSBWSE9TVF9GSUxFX1VOQklORCA/IE5VTEwgOiBldmVudGZkX2N0eF9mZGdldChmZCk7XFxuIDU0MzpcXHRcXHRpZiAoSVNfRVJSKGN0eCkpXFxuIDU0NDpcXHRcXHRcXHRyZXR1cm4gUFRSX0VSUihjdHgpO1xcbiA1NDU6XFx0XFxuIDU0NjpcXHRcXHRzcGluX2xvY2tfaXJxc2F2ZShcXHUwMDI2di1cXHUwMDNlY29uZmlnX2xvY2ssIGZsYWdzKTtcXG4gNTQ3OlxcdFxcdHN3YXAoY3R4LCB2LVxcdTAwM2Vjb25maWdfY3R4KTtcXG4gNTQ4OlxcdFxcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXFx1MDAyNnYtXFx1MDAzZWNvbmZpZ19sb2NrLCBmbGFncyk7XFxuIDU0OTpcXHRcXG4gNTUwOlxcdFxcdC8qXFxuIDU1MTpcXHRcXHQgKiBUaGUgY2FsbGJhY2sgY2FuIG5vIGxvbmdlciByZWFjaCB0aGUgb2xkIGNvbnRleHQsIHNvIHRoaXMgaXMgdGhlXFxuIDU1MjpcXHRcXHQgKiBsYXN0IHJlZmVyZW5jZSB0byBpdC5cXG4gNTUzOlxcdFxcdCAqL1xcbiA1NTQ6XFx0XFx0aWYgKGN0eClcXG4gNTU1OlxcdFxcdFxcdGV2ZW50ZmRfY3R4X3B1dChjdHgpO1xcbiA1NTY6XFx0XFxuIDU1NzpcXHRcXHR2LVxcdTAwM2V2ZHBhLVxcdTAwM2Vjb25maWctXFx1MDAzZXNldF9jb25maWdfY2Iodi1cXHUwMDNldmRwYSwgXFx1MDAyNmNiKTtcXG4gNTU4OlxcdFxcbiA1NTk6XFx0XFx0cmV0dXJuIDA7XFxuIDU2MDpcXHR9XFxuIDU2MTpcXHRcXG4gNTYyOlxcdHN0YXRpYyBsb25nIHZob3N0X3ZkcGFfZ2V0X2lvdmFfcmFuZ2Uoc3RydWN0IHZob3N0X3ZkcGEgKnYsIHUzMiBfX3VzZXIgKmFyZ3ApXFxuIDU2MzpcXHR7XFxuIDU2NDpcXHRcXHRzdHJ1Y3Qgdmhvc3RfdmRwYV9pb3ZhX3JhbmdlIHJhbmdlID0ge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxMjozNTozNS45ODQ2MDIxMTVaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTA2ODE5MjMyOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIHZob3N0LXZkcGEgQ29uZmlndXJhdGlvbiBGbG93KipcblxuT2theSwgc28gSSdtIHRyeWluZyB0byB3cmFwIG15IGhlYWQgYXJvdW5kIHRoZSBjb25maWd1cmF0aW9uIHByb2Nlc3MgZm9yIGB2aG9zdC12ZHBhYC4gVGhlIGtleSBmdW5jdGlvbnMgdGhhdCBzZWVtIGltcG9ydGFudCBhcmU6IGB2aG9zdF92ZHBhX3NldF9jb25maWdfY2FsbGAsIGB2aG9zdF92ZHBhX2NvbmZpZ19wdXRgLCBhbmQgYHZob3N0X3ZkcGFfY29uZmlnX2NiYC4gTm93LCBJIHJlY2FsbCB0aGF0IGB2aG9zdF92ZHBhX3NldF9jb25maWdfY2FsbGAgaXMgc3RhdGljLCB3aGljaCBpcyBpbnRlcmVzdGluZyBiZWNhdXNlIHRoYXQgbmFycm93cyBkb3duIHRoZSBwbGFjZXMgSSBuZWVkIHRvIGxvb2sgZm9yIGNhbGxzIHRvIGl0LlxuXG5BaCwgcmlnaHQhIEkgcmVtZW1iZXIgdGhhdCBgdmhvc3RfdmRwYV91bmxvY2tlZF9pb2N0bGAgY2FsbHMgdGhhdCBmdW5jdGlvbi4gU2luY2UgdGhhdCBmdW5jdGlvbiBoYW5kbGVzIGlvY3RscywgdGhhdCdzIGFsbW9zdCBjZXJ0YWlubHkgdGhlIGVudHJ5IHBvaW50IEkgd2FudC4gTGV0IG1lIGp1c3QgY29uZmlybSB0aGF0IGB2aG9zdF92ZHBhX3NldF9jb25maWdfY2FsbGAgaXMgaW5kZWVkIHN0YXRpYy4gWWVwLCBjb25maXJtZWQuIE9rYXksIHNvIGB2aG9zdF92ZHBhX3VubG9ja2VkX2lvY3RsYCBpcyAqdGhlKiBwbGFjZSB0byBzdGFydC4gQW5kIGlmIEkgd2FudCB0byBsb29rIGF0IHdoZXJlIGB2aG9zdF92ZHBhX2NvbmZpZ19wdXRgIGlzIGNhbGxlZCwgaXQgc2VlbXMgbGlrZSBgdmhvc3RfdmRwYV9yZWxlYXNlYCBpcyB0aGUgZW50cnkgcG9pbnQgZm9yIHRoYXQuIFxuXG5MZXQgbWUganVzdCBxdWlja2x5IGNoZWNrIGlmIGB2aG9zdF92ZHBhX3VubG9ja2VkX2lvY3RsYCBpcyBzdGF0aWMuLi5cblxuXG4iLCJJbnB1dFRva2VucyI6Nzg4MywiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyNCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDEyOjM1OjQxLjA1Mjc5Njc5NFoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTk2ODIwMzMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidmhvc3RfdmRwYV91bmxvY2tlZF9pb2N0bFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL3Zob3N0L3ZkcGEuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3Zob3N0L3ZkcGEuYz02NDU9c3RhdGljIGxvbmcgdmhvc3RfdmRwYV92cmluZ19pb2N0bChzdHJ1Y3Qgdmhvc3RfdmRwYSAqdiwgdW5zaWduZWQgaW50IGNtZCxcXG4tLVxcbmRyaXZlcnMvdmhvc3QvdmRwYS5jLTc4OC1cXG5kcml2ZXJzL3Zob3N0L3ZkcGEuYzo3ODk6c3RhdGljIGxvbmcgdmhvc3RfdmRwYV91bmxvY2tlZF9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlsZXAsXFxuZHJpdmVycy92aG9zdC92ZHBhLmMtNzkwLVxcdFxcdFxcdFxcdCAgICAgIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKVxcbi0tXFxuZHJpdmVycy92aG9zdC92ZHBhLmM9MTU2Nz1zdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyB2aG9zdF92ZHBhX2ZvcHMgPSB7XFxuLS1cXG5kcml2ZXJzL3Zob3N0L3ZkcGEuYy0xNTcxLVxcdC53cml0ZV9pdGVyXFx0PSB2aG9zdF92ZHBhX2Nocl93cml0ZV9pdGVyLFxcbmRyaXZlcnMvdmhvc3QvdmRwYS5jOjE1NzI6XFx0LnVubG9ja2VkX2lvY3RsXFx0PSB2aG9zdF92ZHBhX3VubG9ja2VkX2lvY3RsLFxcbmRyaXZlcnMvdmhvc3QvdmRwYS5jLTE1NzMtI2lmZGVmIENPTkZJR19NTVVcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTI6MzU6NDEuMTUyNDg0MTI3WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU3NDg5Mjg2MzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIFBvdGVudGlhbCBGb2N1cyBTeW1ib2xzIGZvciBTeXprYWxsZXIqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGVzZSBmdW5jdGlvbnMgYW5kIHRyeWluZyB0byBmaWd1cmUgb3V0IHdoaWNoIG9uZXMgYXJlIGdvb2QgY2FuZGlkYXRlcyBmb3IgU3l6a2FsbGVyIHRvIHRhcmdldC4gTGV0J3Mgc2VlLi4uIEZpcnN0LCBgdmhvc3RfdmRwYV91bmxvY2tlZF9pb2N0bGAuIFllcywgaXQncyBzdGF0aWMuIEJ1dCB3YWl0LCBpdCdzIGFsc28gYSBmaWxlIG9wZXJhdGlvbnMgY2FsbGJhY2suIFRoYXQgbWVhbnMgaXRzIGFkZHJlc3MgaXMgdGFrZW4sIHNvIGl0ICpzaG91bGRuJ3QqIGJlIGlubGluZWQuIFRoYXQncyBnb29kOyBTeXprYWxsZXIgY2FuIGZvY3VzIG9uIGl0IGlmIHdlIHBvaW50IGl0IHRoZXJlLiBUaGUgcHJvbXB0IHNhaWQgdG8gcHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIGVudHJ5cG9pbnRzLCBhbmQgYHZob3N0X3ZkcGFfdW5sb2NrZWRfaW9jdGxgIGxvb2tzIGxpa2UgaXQgZml0cyB0aGUgYmlsbC5cblxuQW5kIGB2aG9zdF92ZHBhX3JlbGVhc2VgIGlzIGFsc28gYSBmaWxlIG9wZXJhdGlvbnMgY2FsbGJhY2ssIHNvIHNhbWUgZGVhbCB0aGVyZSwgcmlnaHQ/XG5cbk5vdywgbGV0J3MgdGhpbmsgYWJvdXQgYHZob3N0X3ZkcGFfc2V0X2NvbmZpZ19jYWxsYC4gSXQncyBzdGF0aWMsIHdoaWNoIGlzIGEgcmVkIGZsYWcuIEhvd2V2ZXIsIGl0J3MgY2FsbGVkIGZyb20gYSBzd2l0Y2ggc3RhdGVtZW50ICp3aXRoaW4qIGB2aG9zdF92ZHBhX3VubG9ja2VkX2lvY3RsYC4gVGhhdCBtYWtlcyBtZSB0aGluayBpdCAqbWlnaHQqIGJlIGlubGluZWQuIENvbXBpbGVyIG9wdGltaXphdGlvbiBpcyBhIHBhaW4hXG5cblNvLCB0aGUgb2J2aW91cyBjaG9pY2UgaXMgc3RpbGwgYHZob3N0X3ZkcGFfdW5sb2NrZWRfaW9jdGxgIGF0IHRoaXMgcG9pbnQuIEl0J3MgYSBmaWxlIG9wZXJhdGlvbnMgY2FsbGJhY2ssIGl0cyBhZGRyZXNzIGlzIHRha2VuLCBpdCdzIG5vdCBpbmxpbmVkLCBhbmQgaXQncyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuXG5cbldoYXQgYWJvdXQgYHZob3N0X3ZkcGFfY29uZmlnX2NiYD8gSXQncyBhIGNhbGxiYWNrLCBhbmQgaXQncyBhZGRyZXNzIGlzIGFsc28gdGFrZW4uIFNvIHRoYXQncyBhbHNvIG5vdCBpbmxpbmVkLlxuXG5Pa2F5LCBsZXQncyBjaGVjayBgdmhvc3RfdmRwYV9jb25maWdfY2JgIG1vcmUgY2xvc2VseS5cblxuXG4iLCJJbnB1dFRva2VucyI6ODY3NywiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMwNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxMjozNTo0Ni45MDE0MTQ4MTdaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU5NjIwNzM1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInZob3N0X3ZkcGFfY29uZmlnX2NiXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvdmhvc3QvdmRwYS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvdmhvc3QvdmRwYS5jPTQ1PXN0cnVjdCB2aG9zdF92ZHBhIHtcXG4tLVxcbmRyaXZlcnMvdmhvc3QvdmRwYS5jLTU4LVxcdHN0cnVjdCBldmVudGZkX2N0eCAqY29uZmlnX2N0eDtcXG5kcml2ZXJzL3Zob3N0L3ZkcGEuYzo1OTpcXHQvKiBTZXJpYWxpc2VzIHZob3N0X3ZkcGFfY29uZmlnX2NiKCkgYWdhaW5zdCBjb25maWdfY3R4IGJlaW5nIHJlcGxhY2VkLiAqL1xcbmRyaXZlcnMvdmhvc3QvdmRwYS5jLTYwLVxcdHNwaW5sb2NrX3QgY29uZmlnX2xvY2s7XFxuLS1cXG5kcml2ZXJzL3Zob3N0L3ZkcGEuYz0xNzg9c3RhdGljIGlycXJldHVybl90IHZob3N0X3ZkcGFfdmlydHF1ZXVlX2NiKHZvaWQgKnByaXZhdGUpXFxuLS1cXG5kcml2ZXJzL3Zob3N0L3ZkcGEuYy0xODgtXFxuZHJpdmVycy92aG9zdC92ZHBhLmM6MTg5OnN0YXRpYyBpcnFyZXR1cm5fdCB2aG9zdF92ZHBhX2NvbmZpZ19jYih2b2lkICpwcml2YXRlKVxcbmRyaXZlcnMvdmhvc3QvdmRwYS5jLTE5MC17XFxuLS1cXG5kcml2ZXJzL3Zob3N0L3ZkcGEuYz01MzA9c3RhdGljIGxvbmcgdmhvc3RfdmRwYV9zZXRfY29uZmlnX2NhbGwoc3RydWN0IHZob3N0X3ZkcGEgKnYsIHUzMiBfX3VzZXIgKmFyZ3ApXFxuLS1cXG5kcml2ZXJzL3Zob3N0L3ZkcGEuYy01MzYtXFxuZHJpdmVycy92aG9zdC92ZHBhLmM6NTM3OlxcdGNiLmNhbGxiYWNrID0gdmhvc3RfdmRwYV9jb25maWdfY2I7XFxuZHJpdmVycy92aG9zdC92ZHBhLmMtNTM4LVxcdGNiLnByaXZhdGUgPSB2O1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxMjozNTo0Ni45NjEwNDAwOTNaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDMxNjIzMzU4MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgaXQgd2VyZSBteSBvd246XG5cbioqQW5hbHl6aW5nIHRoZSB2aG9zdC12ZHBhIENvZGUqKlxuXG5Pa2F5LCBsZXQncyBzZWUsIGB2aG9zdF92ZHBhX2NvbmZpZ19jYmAuLi4gcmlnaHQsIHRoYXQncyBhbiBgaXJxcmV0dXJuX3RgIGNhbGxiYWNrLiBTbywgaXQncyB0cmlnZ2VyZWQgYnkgYW4gaW50ZXJydXB0LCBoYW5kbGluZyBzb21lIGNvbmZpZ3VyYXRpb24gZXZlbnQgb3Igc2lnbmFsIHdpdGhpbiB0aGUgVkRQQSBjb250ZXh0LiBOb3csIHdoYXQgKmVsc2UqIGlzIGluIHBsYXkgaGVyZT8gSXMgdGhlcmUgYW55IG90aGVyIGZ1bmN0aW9uIEkgbmVlZCB0byBjb25zaWRlciBpbiByZWxhdGlvbiB0byB0aGF0IGNhbGxiYWNrPyBMZXQgbWUgZG91YmxlLWNoZWNrIHRoZSBjb2RlIHN0cnVjdHVyZS4gT2theSwgaGVyZSdzIGB2aG9zdF92ZHBhX3JlbGVhc2VgLCB0aGF0IGxvb2tzIHRvIGJlIHRoZSBmaWxlIG9wZXJhdGlvbiByZWxlYXNlIGNhbGxiYWNrLiBHb3QgaXQsIHNvIHRoYXQncyBjYWxsZWQgd2hlbiBhIGZpbGUgZGVzY3JpcHRvciBhc3NvY2lhdGVkIHdpdGggdGhlIGRldmljZSBpcyBjbG9zZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk3MjMsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxMjozNTo1MS4yNzcyNzU4MTZaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2ODk2ODA2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInZob3N0X3ZkcGFfcmVsZWFzZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL3Zob3N0L3ZkcGEuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3Zob3N0L3ZkcGEuYz0xNDY4PXN0YXRpYyB2b2lkIHZob3N0X3ZkcGFfY2xlYW5faXJxKHN0cnVjdCB2aG9zdF92ZHBhICp2KVxcbi0tXFxuZHJpdmVycy92aG9zdC92ZHBhLmMtMTQ3NS1cXG5kcml2ZXJzL3Zob3N0L3ZkcGEuYzoxNDc2OnN0YXRpYyBpbnQgdmhvc3RfdmRwYV9yZWxlYXNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlcClcXG5kcml2ZXJzL3Zob3N0L3ZkcGEuYy0xNDc3LXtcXG4tLVxcbmRyaXZlcnMvdmhvc3QvdmRwYS5jPTE1Njc9c3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgdmhvc3RfdmRwYV9mb3BzID0ge1xcbi0tXFxuZHJpdmVycy92aG9zdC92ZHBhLmMtMTU2OS1cXHQub3BlblxcdFxcdD0gdmhvc3RfdmRwYV9vcGVuLFxcbmRyaXZlcnMvdmhvc3QvdmRwYS5jOjE1NzA6XFx0LnJlbGVhc2VcXHQ9IHZob3N0X3ZkcGFfcmVsZWFzZSxcXG5kcml2ZXJzL3Zob3N0L3ZkcGEuYy0xNTcxLVxcdC53cml0ZV9pdGVyXFx0PSB2aG9zdF92ZHBhX2Nocl93cml0ZV9pdGVyLFxcbi0tXFxuZHJpdmVycy92aG9zdC92ZHBhLmMtMTU3OC1cXG5kcml2ZXJzL3Zob3N0L3ZkcGEuYzoxNTc5OnN0YXRpYyB2b2lkIHZob3N0X3ZkcGFfcmVsZWFzZV9kZXYoc3RydWN0IGRldmljZSAqZGV2aWNlKVxcbmRyaXZlcnMvdmhvc3QvdmRwYS5jLTE1ODAte1xcbi0tXFxuZHJpdmVycy92aG9zdC92ZHBhLmM9MTU4OT1zdGF0aWMgaW50IHZob3N0X3ZkcGFfcHJvYmUoc3RydWN0IHZkcGFfZGV2aWNlICp2ZHBhKVxcbi0tXFxuZHJpdmVycy92aG9zdC92ZHBhLmMtMTYyMS1cXHRkZXZpY2VfaW5pdGlhbGl6ZShcXHUwMDI2di1cXHUwMDNlZGV2KTtcXG5kcml2ZXJzL3Zob3N0L3ZkcGEuYzoxNjIyOlxcdHYtXFx1MDAzZWRldi5yZWxlYXNlID0gdmhvc3RfdmRwYV9yZWxlYXNlX2RldjtcXG5kcml2ZXJzL3Zob3N0L3ZkcGEuYy0xNjIzLVxcdHYtXFx1MDAzZWRldi5wYXJlbnQgPSBcXHUwMDI2dmRwYS1cXHUwMDNlZGV2O1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxMjozNTo1MS4zMjQxNzQ2NjJaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTQ0NTI2OTgxMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipDb25maWd1cmF0aW9uIERlZXAgRGl2ZSBmb3IgVkRQQSBhbmQgVmhvc3QtVkRQQSoqXG5cbk9rYXksIGxldCdzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJJ20gaG9taW5nIGluIG9uIHRoZSBjcml0aWNhbCBzeW1ib2xzIHJlbGF0ZWQgdG8gVkRQQSBhbmQgdmhvc3QtdmRwYTogYHZob3N0X3ZkcGFfdW5sb2NrZWRfaW9jdGxgLCBgdmhvc3RfdmRwYV9yZWxlYXNlYCwgYW5kIGB2aG9zdF92ZHBhX2NvbmZpZ19jYmAuIFRoZXNlIGFyZSBteSBpbml0aWFsIGJyZWFkY3J1bWJzLlxuXG5Ob3csIGxldCdzIG1ldGljdWxvdXNseSByZXZpZXcgdGhlIGNvbmZpZ3VyYXRpb24gZGVwZW5kZW5jaWVzLiBGaXJzdCwgd2UgbmVlZCB0byBlbnN1cmUgYFZIT1NUX1ZEUEFgIGlzIGVuYWJsZWQg4oCTIHRoYXQncyBvdXIgYW5jaG9yLiBGb2xsb3dpbmcgdGhhdCwgd2UgaGF2ZSBkZXBlbmRlbmNpZXMgdGhhdCB3ZSBuZWVkIHRvIGVuc3VyZSBhcmUgYWxzbyBlbmFibGVkLCBzbyB3ZSBuZWVkIHRvIHZlcmlmeTpcbiogICBgVkhPU1RfVkRQQWAgaGluZ2VzIG9uIGJvdGggYEVWRU5URkRgIGFuZCBgVkRQQWAuXG4qICAgYFZEUEFgLCBpbiB0dXJuLCBkZXBlbmRzIG9uIGBORVRgLlxuKiAgIElmIHdlIG5lZWQgdGhlIGBWRFBBX1NJTWAgbW9kdWxlIHdlIG5lZWQgdG8gZW5zdXJlIGBSVU5USU1FX1RFU1RJTkdfTUVOVWAgaXMgZW5hYmxlZC5cbiogICBUaGVuIGZvciBib3RoIGBWRFBBX1NJTV9ORVRgIGFuZCBgVkRQQV9TSU1fQkxPQ0tgIG1vZHVsZXMsIHRoZWlyIHNoYXJlZCBkZXBlbmRlbmN5IGlzIGBWRFBBX1NJTWAuXG4qICAgYFZEUEFfVVNFUmAgYWxzbyByZXF1aXJlcyBgRVZFTlRGRGAgYW5kIGBNTVVgLlxuXG5CYXNlZCBvbiB0aGlzIGNhc2NhZGUgb2YgZGVwZW5kZW5jaWVzLCBJJ20gY29uZmlkZW50IHdlIG5lZWQgdG8gZW5hYmxlIHRoZSBmb2xsb3dpbmcgY29uZmlndXJhdGlvbnM6XG5cbiogICBgVkhPU1RfVkRQQWBcbiogICBgVkRQQWBcbiogICBgVkRQQV9TSU1gXG4qICAgYFZEUEFfU0lNX05FVGBcbiogICBgVkRQQV9TSU1fQkxPQ0tgXG4qICAgYFZEUEFfVVNFUmBcblxuSG93ZXZlciwgYmVmb3JlIHdlIGZpbmFsaXplIHRoZXNlIGNvbmZpZ3VyYXRpb25zLCBJIG5lZWQgdG8gY2hlY2sgaWYgdGhlcmUgYXJlIGFueSBvdGhlciByZWxhdGVkIGNvbmZpZ3VyYXRpb25zIHRoYXQgbWF5IGJlIHJlbGV2YW50IG9yIGFkZCBhZGRpdGlvbmFsIGZ1bmN0aW9uYWxpdHkgdGhhdCBzaG91bGQgYmUgZW5hYmxlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA0MTEsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTI6MzU6NTYuNzY5NDQ3NzA1WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjExNjU1Mzk1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBSVU5USU1FX1RFU1RJTkdfTUVOVVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibGliL0tjb25maWcuZGVidWc9MjI1Nj1jb25maWcgS0NPVl9TRUxGVEVTVFxcbi0tXFxubGliL0tjb25maWcuZGVidWctMjI2My1cXG5saWIvS2NvbmZpZy5kZWJ1ZzoyMjY0Om1lbnVjb25maWcgUlVOVElNRV9URVNUSU5HX01FTlVcXG5saWIvS2NvbmZpZy5kZWJ1Zy0yMjY1LVxcdGJvb2wgXFxcIlJ1bnRpbWUgVGVzdGluZ1xcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTI6MzU6NTguMzgxMTA4MjZaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzkyMjIzNDAyMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3M6XG5cbioqRW5hYmxpbmcgUnVudGltZSBUZXN0aW5nIGFuZCBSZXZpc2l0aW5nIERlcGVuZGVuY2llcyoqXG5cbkFscmlnaHQsIHRoZSBzeXN0ZW0gY29uZmlndXJhdGlvbiAoYG1lbnVjb25maWdgKSBpbmNsdWRlcyBzb21ldGhpbmcgY2FsbGVkIGBSVU5USU1FX1RFU1RJTkdfTUVOVWAuIEkgaW1tZWRpYXRlbHkgcmVjb2duaXplIHRoYXQgdGhpcyBzb3VuZHMgbGlrZSBzb21ldGhpbmcgd2Ugc2hvdWxkIGVuYWJsZS4gTXkgZXhwZXJpZW5jZSB3aXRoIHN5emthbGxlciBzZXR1cHMgc3VnZ2VzdHMgaXQncyB1c3VhbGx5IHBhcnQgb2YgdGhlIHBpY3R1cmUuIEhvd2V2ZXIsIGl0J3Mgd29ydGggZG91YmxlLWNoZWNraW5nLiBJdCdzIGJlc3QgdG8gaW5jbHVkZSBpdCB1bmxlc3MgdGhlcmUncyBhbiBvdmVyd2hlbG1pbmcgcmVhc29uIG5vdCB0by4gQmV0dGVyIHNhZmUgdGhhbiBzb3JyeSB3aGVuIGl0IGNvbWVzIHRvIHJ1bnRpbWUgdGVzdGluZyBjYXBhYmlsaXRpZXMsIHJpZ2h0P1xuXG5Ob3csIGxldCBtZSBqdXN0IHF1aWNrbHkgcmV2aXNpdCB0aGUgZGVwZW5kZW5jaWVzIGZvciBgVkRQQV9TSU1gLiBJIHdhbnQgdG8gbWFrZSBzdXJlIEkgaGF2ZW4ndCBtaXNzZWQgYW55dGhpbmcgb3IgdGhhdCB0aGVyZSBhcmVuJ3QgYW55IHBvdGVudGlhbCBjb25mbGljdHMgYWZ0ZXIgZW5hYmxpbmcgdGhhdCBtZW51LiBBbHdheXMgZ29vZCB0byBkb3VibGUtY2hlY2sgdGhlc2UgdGhpbmdzLCBlc3BlY2lhbGx5IHdoZW4gbWFraW5nIGNvbmZpZ3VyYXRpb24gY2hhbmdlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTExMjEsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxMjozNjowMi4zMDMzNDUzMDFaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjA3MjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy92ZHBhL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMTAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgMTA6XFx0aWYgVkRQQVxcbiAgMTE6XFx0XFxuICAxMjpcXHRjb25maWcgVkRQQV9TSU1cXG4gIDEzOlxcdFxcdHRyaXN0YXRlIFxcXCJ2RFBBIGRldmljZSBzaW11bGF0b3IgY29yZVxcXCJcXG4gIDE0OlxcdFxcdGRlcGVuZHMgb24gUlVOVElNRV9URVNUSU5HX01FTlVcXG4gIDE1OlxcdFxcdHNlbGVjdCBWSE9TVF9SSU5HXFxuICAxNjpcXHRcXHRzZWxlY3QgSU9NTVVfSU9WQVxcbiAgMTc6XFx0XFx0aGVscFxcbiAgMTg6XFx0XFx0ICBFbmFibGUgdGhpcyBtb2R1bGUgdG8gc3VwcG9ydCB2RFBBIGRldmljZSBzaW11bGF0b3JzLiBUaGVzZSBkZXZpY2VzXFxuICAxOTpcXHRcXHQgIGFyZSB1c2VkIGZvciB0ZXN0aW5nLCBwcm90b3R5cGluZyBhbmQgZGV2ZWxvcG1lbnQgb2YgdkRQQS5cXG4gIDIwOlxcdFxcbiAgMjE6XFx0Y29uZmlnIFZEUEFfU0lNX05FVFxcbiAgMjI6XFx0XFx0dHJpc3RhdGUgXFxcInZEUEEgc2ltdWxhdG9yIGZvciBuZXR3b3JraW5nIGRldmljZVxcXCJcXG4gIDIzOlxcdFxcdGRlcGVuZHMgb24gVkRQQV9TSU1cXG4gIDI0OlxcdFxcdHNlbGVjdCBHRU5FUklDX05FVF9VVElMU1xcbiAgMjU6XFx0XFx0aGVscFxcbiAgMjY6XFx0XFx0ICB2RFBBIG5ldHdvcmtpbmcgZGV2aWNlIHNpbXVsYXRvciB3aGljaCBsb29wcyBUWCB0cmFmZmljIGJhY2sgdG8gUlguXFxuICAyNzpcXHRcXG4gIDI4OlxcdGNvbmZpZyBWRFBBX1NJTV9CTE9DS1xcbiAgMjk6XFx0XFx0dHJpc3RhdGUgXFxcInZEUEEgc2ltdWxhdG9yIGZvciBibG9jayBkZXZpY2VcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDEyOjM2OjAyLjMwMzQwNzM1MVoiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3NTQ3MzE2NjQ0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIHZob3N0LXZkcGEgUGF0Y2gqKlxuXG5Pa2F5LCBzbyB3ZSdyZSBsb29raW5nIGF0IGEgcGF0Y2ggaGVyZSwgYW5kIHRoZSBrZXkgdGhpbmcgSSBzZWUgcmlnaHQgYXdheSBpcyB0aGUgYWRkaXRpb24gb2YgYFJVTlRJTUVfVEVTVElOR19NRU5VYC4gVGhhdCdzIGEgc3Ryb25nIGluZGljYXRvciB0aGF0IHRoaXMgcmVxdWlyZXMgc29tZSBydW50aW1lIGFuYWx5c2lzLlxuXG5Ob3csIGxldCdzIGJyZWFrIGRvd24gdGhlIGNvbmZpZ3VyYXRpb24gZWxlbWVudHMgaW52b2x2ZWQuIFdlJ3ZlIGdvdCBgVkhPU1RfVkRQQWAsIGBWRFBBYCwgYFZEUEFfU0lNYCwgYFZEUEFfU0lNX05FVGAsIGBWRFBBX1NJTV9CTE9DS2AsIGBWRFBBX1VTRVJgLCBhbmQgdGhlIGNyaXRpY2FsIGBSVU5USU1FX1RFU1RJTkdfTUVOVWAuXG5cblRoZSByZWFsIGZvY3VzIHBvaW50cywgdGhlIGZ1bmN0aW9ucyB0aGF0IGFyZSBwcm9iYWJseSB0aGUgbW9zdCBpbXBvcnRhbnQgdG8gY29uc2lkZXIgaW4gZGV0YWlsIGFyZSBgdmhvc3RfdmRwYV91bmxvY2tlZF9pb2N0bGAsIGB2aG9zdF92ZHBhX3JlbGVhc2VgLCBhbmQgYHZob3N0X3ZkcGFfY29uZmlnX2NiYC5cblxuRnJvbSB3aGF0IEkgdW5kZXJzdGFuZCwgdGhpcyBwYXRjaCBpcyBhZGRyZXNzaW5nIGEgcmFjZSBjb25kaXRpb24gd2l0aGluIGBzdHJ1Y3Qgdmhvc3RfdmRwYWAuIEl0IHNlZW1zIGxpa2UgYHZob3N0X3ZkcGFfY29uZmlnX2NiYCBpcyByYWNpbmcgd2l0aCBgdmhvc3RfdmRwYV9zZXRfY29uZmlnX2NhbGxgIGFuZCBgdmhvc3RfdmRwYV9jb25maWdfcHV0YC4gVGhpcyBpcyBpbXBvcnRhbnQsIGJlY2F1c2UgdGhlc2UgZnVuY3Rpb25zIGFyZSBhY2Nlc3NpYmxlIGZyb20gdXNlciBzcGFjZSB2aWEgdGhlIHZob3N0LXZkcGEgY2hhcmRldiBpb2N0bHMgYW5kIHJlbGVhc2Ugb3BlcmF0aW9ucy4gVGhpcyBpcyBhIHZlcnkgaW50ZXJlc3RpbmcgcG9pbnQgYmVjYXVzZSB0aGlzIGlzIHdoZXJlIHRoZSByYWNlIGNvbmRpdGlvbiBpcyBpbnRyb2R1Y2VkIGFuZCB3aGVyZSBpdCBjYW4gYmUgcG90ZW50aWFsbHkgZXhwbG9pdGVkLlxuXG5HaXZlbiB0aGF0IHZEUEEgY2FuIGJlIHRlc3RlZCBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50IHdpdGggc2ltdWxhdG9ycyBsaWtlIGB2ZHBhX3NpbV9uZXRgLCBgdmRwYV9zaW1fYmxrYCwgYW5kIGB2ZHVzZWAsIHRoaXMgZml4IGhhcyBhIGRlbW9uc3RyYWJsZSBmdW5jdGlvbmFsIGltcGFjdC4gQmVjYXVzZSBvZiB0aGF0LCBmdXp6aW5nIGlzIGFuIG9idmlvdXMgbmV4dCBzdGVwLiBUaGlzIHBhdGNoICpuZWVkcyogZnV6emluZyB0byBtYWtlIHN1cmUgaXQgaXMgcm9idXN0LlxuXG5JJ20gcmVhZHkgdG8gbWFyayB0aGlzIG9uZSBkb3duLCBhbmQgbGV0J3MgY2FsbCBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTY2NiwiT3V0cHV0VG9rZW5zIjoyNTQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNjQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxMjozNjowOS44NTA3MjY5NjVaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2OTc0MDEzNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVkhPU1RfVkRQQVwiLFxuICAgIFwiVkRQQVwiLFxuICAgIFwiVkRQQV9TSU1cIixcbiAgICBcIlZEUEFfU0lNX05FVFwiLFxuICAgIFwiVkRQQV9TSU1fQkxPQ0tcIixcbiAgICBcIlZEUEFfVVNFUlwiLFxuICAgIFwiUlVOVElNRV9URVNUSU5HX01FTlVcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ2aG9zdF92ZHBhX3VubG9ja2VkX2lvY3RsXCIsXG4gICAgXCJ2aG9zdF92ZHBhX3JlbGVhc2VcIixcbiAgICBcInZob3N0X3ZkcGFfY29uZmlnX2NiXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhIHNwaW5sb2NrIHRvIGBzdHJ1Y3Qgdmhvc3RfdmRwYWAgdG8gZml4IGEgcmFjZSBjb25kaXRpb24gYmV0d2VlbiBgdmhvc3RfdmRwYV9jb25maWdfY2JgIGFuZCBgdmhvc3RfdmRwYV9zZXRfY29uZmlnX2NhbGxgIC8gYHZob3N0X3ZkcGFfY29uZmlnX3B1dGAuIFRoZXNlIGZ1bmN0aW9ucyBhcmUgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSB0aGUgdmhvc3QtdmRwYSBjaGFyZGV2IGlvY3RscyBhbmQgcmVsZWFzZSBvcGVyYXRpb25zLiBUaGUgdkRQQSBzdWJzeXN0ZW0gY2FuIGJlIHRlc3RlZCBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50IHVzaW5nIHZEUEEgc2ltdWxhdG9ycyAoYHZkcGFfc2ltX25ldGAsIGB2ZHBhX3NpbV9ibGtgKSBvciBgdmR1c2VgLiBUaGVyZWZvcmUsIHRoZSBjaGFuZ2VzIGhhdmUgYSBmdW5jdGlvbmFsIGltcGFjdCB0aGF0IGlzIHdvcnRoIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVkhPU1RfVkRQQVwiLFxuICAgIFwiVkRQQVwiLFxuICAgIFwiVkRQQV9TSU1cIixcbiAgICBcIlZEUEFfU0lNX05FVFwiLFxuICAgIFwiVkRQQV9TSU1fQkxPQ0tcIixcbiAgICBcIlZEUEFfVVNFUlwiLFxuICAgIFwiUlVOVElNRV9URVNUSU5HX01FTlVcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ2aG9zdF92ZHBhX3VubG9ja2VkX2lvY3RsXCIsXG4gICAgXCJ2aG9zdF92ZHBhX3JlbGVhc2VcIixcbiAgICBcInZob3N0X3ZkcGFfY29uZmlnX2NiXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhIHNwaW5sb2NrIHRvIGBzdHJ1Y3Qgdmhvc3RfdmRwYWAgdG8gZml4IGEgcmFjZSBjb25kaXRpb24gYmV0d2VlbiBgdmhvc3RfdmRwYV9jb25maWdfY2JgIGFuZCBgdmhvc3RfdmRwYV9zZXRfY29uZmlnX2NhbGxgIC8gYHZob3N0X3ZkcGFfY29uZmlnX3B1dGAuIFRoZXNlIGZ1bmN0aW9ucyBhcmUgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSB0aGUgdmhvc3QtdmRwYSBjaGFyZGV2IGlvY3RscyBhbmQgcmVsZWFzZSBvcGVyYXRpb25zLiBUaGUgdkRQQSBzdWJzeXN0ZW0gY2FuIGJlIHRlc3RlZCBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50IHVzaW5nIHZEUEEgc2ltdWxhdG9ycyAoYHZkcGFfc2ltX25ldGAsIGB2ZHBhX3NpbV9ibGtgKSBvciBgdmR1c2VgLiBUaGVyZWZvcmUsIHRoZSBjaGFuZ2VzIGhhdmUgYSBmdW5jdGlvbmFsIGltcGFjdCB0aGF0IGlzIHdvcnRoIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDEyOjM2OjA5LjkyMDQ3MzEzWiIsIlNlcSI6MjksIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NTA4MzIxNTI2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTI6MzY6MDkuOTIwOTI2NDhaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6NzUwNzg2NDAyNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcmVzc2VzIGEgY29uY3VycmVuY3kgaXNzdWUgKGxpa2VseSBhIHJhY2UgY29uZGl0aW9uIG9yIHVzZS1hZnRlci1mcmVlKSBieSBhZGRpbmcgYSBzcGlubG9jayAoYGNvbmZpZ19sb2NrYCkgdG8gc2VyaWFsaXplIGFjY2Vzc2VzIHRvIGB2LVxcdTAwM2Vjb25maWdfY3R4YCBpbiBgdmhvc3RfdmRwYV9jb25maWdfY2IoKWAsIGB2aG9zdF92ZHBhX2NvbmZpZ19wdXQoKWAsIGFuZCBgdmhvc3RfdmRwYV9zZXRfY29uZmlnX2NhbGwoKWAuIFRoZXNlIGNoYW5nZXMgZG8gbm90IGludHJvZHVjZSBvciBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLCBpbmZvLWxlYWtzLCBvciBjb21wbGV4IGRhdGEgc3RydWN0dXJlIGFsbG9jYXRpb25zIHRoYXQgd291bGQgcmVxdWlyZSBLTVNBTi4gVGhlIGJ1ZyBiZWluZyBmaXhlZCBhbmQgYW55IHBvdGVudGlhbCByZWdyZXNzaW9ucyB3b3VsZCBiZSByZWxhdGVkIHRvIGxvY2tpbmcsIHJhY2UgY29uZGl0aW9ucywgb3IgdXNlLWFmdGVyLWZyZWUsIHdoaWNoIGFyZSBlZmZlY3RpdmVseSBjYXVnaHQgYnkgS0FTQU4sIEtDU0FOLCBhbmQgTE9DS0RFUC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA5MjhlZWUyMDRhZTdiM2FiNzg3NmE3M2M3MDMxMzg1ODI2YjViNjI0XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBBdWcgNyAxMjozNTowMyAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmhvc3QvdmRwYS5jIGIvZHJpdmVycy92aG9zdC92ZHBhLmNcbmluZGV4IGFjNTUyNzVmYTBkMGEuLjI3MmQ1MDZkODMxYzggMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL3Zob3N0L3ZkcGEuY1xuKysrIGIvZHJpdmVycy92aG9zdC92ZHBhLmNcbkBAIC01Niw2ICs1Niw4IEBAIHN0cnVjdCB2aG9zdF92ZHBhIHtcbiBcdGludCB2aXJ0aW9faWQ7XG4gXHRpbnQgbWlub3I7XG4gXHRzdHJ1Y3QgZXZlbnRmZF9jdHggKmNvbmZpZ19jdHg7XG4rXHQvKiBTZXJpYWxpc2VzIHZob3N0X3ZkcGFfY29uZmlnX2NiKCkgYWdhaW5zdCBjb25maWdfY3R4IGJlaW5nIHJlcGxhY2VkLiAqL1xuK1x0c3BpbmxvY2tfdCBjb25maWdfbG9jaztcbiBcdGludCBpbl9iYXRjaDtcbiBcdHN0cnVjdCB2ZHBhX2lvdmFfcmFuZ2UgcmFuZ2U7XG4gXHR1MzIgYmF0Y2hfYXNpZDtcbkBAIC0xODcsMTAgKzE4OSwxMiBAQCBzdGF0aWMgaXJxcmV0dXJuX3Qgdmhvc3RfdmRwYV92aXJ0cXVldWVfY2Iodm9pZCAqcHJpdmF0ZSlcbiBzdGF0aWMgaXJxcmV0dXJuX3Qgdmhvc3RfdmRwYV9jb25maWdfY2Iodm9pZCAqcHJpdmF0ZSlcbiB7XG4gXHRzdHJ1Y3Qgdmhvc3RfdmRwYSAqdiA9IHByaXZhdGU7XG4tXHRzdHJ1Y3QgZXZlbnRmZF9jdHggKmNvbmZpZ19jdHggPSB2LVx1MDAzZWNvbmZpZ19jdHg7XG4rXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuIFxuLVx0aWYgKGNvbmZpZ19jdHgpXG4tXHRcdGV2ZW50ZmRfc2lnbmFsKGNvbmZpZ19jdHgpO1xuK1x0c3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2di1cdTAwM2Vjb25maWdfbG9jaywgZmxhZ3MpO1xuK1x0aWYgKHYtXHUwMDNlY29uZmlnX2N0eClcbitcdFx0ZXZlbnRmZF9zaWduYWwodi1cdTAwM2Vjb25maWdfY3R4KTtcbitcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2di1cdTAwM2Vjb25maWdfbG9jaywgZmxhZ3MpO1xuIFxuIFx0cmV0dXJuIElSUV9IQU5ETEVEO1xuIH1cbkBAIC01MTEsMTUgKzUxNSwyMiBAQCBzdGF0aWMgbG9uZyB2aG9zdF92ZHBhX2dldF92cmluZ19udW0oc3RydWN0IHZob3N0X3ZkcGEgKnYsIHUxNiBfX3VzZXIgKmFyZ3ApXG4gXG4gc3RhdGljIHZvaWQgdmhvc3RfdmRwYV9jb25maWdfcHV0KHN0cnVjdCB2aG9zdF92ZHBhICp2KVxuIHtcbi1cdGlmICh2LVx1MDAzZWNvbmZpZ19jdHgpIHtcbi1cdFx0ZXZlbnRmZF9jdHhfcHV0KHYtXHUwMDNlY29uZmlnX2N0eCk7XG4tXHRcdHYtXHUwMDNlY29uZmlnX2N0eCA9IE5VTEw7XG4tXHR9XG4rXHRzdHJ1Y3QgZXZlbnRmZF9jdHggKmN0eDtcbitcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4rXG4rXHRzcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZ2LVx1MDAzZWNvbmZpZ19sb2NrLCBmbGFncyk7XG4rXHRjdHggPSB2LVx1MDAzZWNvbmZpZ19jdHg7XG4rXHR2LVx1MDAzZWNvbmZpZ19jdHggPSBOVUxMO1xuK1x0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZ2LVx1MDAzZWNvbmZpZ19sb2NrLCBmbGFncyk7XG4rXG4rXHRpZiAoY3R4KVxuK1x0XHRldmVudGZkX2N0eF9wdXQoY3R4KTtcbiB9XG4gXG4gc3RhdGljIGxvbmcgdmhvc3RfdmRwYV9zZXRfY29uZmlnX2NhbGwoc3RydWN0IHZob3N0X3ZkcGEgKnYsIHUzMiBfX3VzZXIgKmFyZ3ApXG4ge1xuIFx0c3RydWN0IHZkcGFfY2FsbGJhY2sgY2I7XG4rXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuIFx0aW50IGZkO1xuIFx0c3RydWN0IGV2ZW50ZmRfY3R4ICpjdHg7XG4gXG5AQCAtNTI5LDE4ICs1NDAsMjAgQEAgc3RhdGljIGxvbmcgdmhvc3RfdmRwYV9zZXRfY29uZmlnX2NhbGwoc3RydWN0IHZob3N0X3ZkcGEgKnYsIHUzMiBfX3VzZXIgKmFyZ3ApXG4gXHRcdHJldHVybiAgLUVGQVVMVDtcbiBcbiBcdGN0eCA9IGZkID09IFZIT1NUX0ZJTEVfVU5CSU5EID8gTlVMTCA6IGV2ZW50ZmRfY3R4X2ZkZ2V0KGZkKTtcbitcdGlmIChJU19FUlIoY3R4KSlcbitcdFx0cmV0dXJuIFBUUl9FUlIoY3R4KTtcbitcbitcdHNwaW5fbG9ja19pcnFzYXZlKFx1MDAyNnYtXHUwMDNlY29uZmlnX2xvY2ssIGZsYWdzKTtcbiBcdHN3YXAoY3R4LCB2LVx1MDAzZWNvbmZpZ19jdHgpO1xuK1x0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZ2LVx1MDAzZWNvbmZpZ19sb2NrLCBmbGFncyk7XG4gXG4tXHRpZiAoIUlTX0VSUl9PUl9OVUxMKGN0eCkpXG4rXHQvKlxuK1x0ICogVGhlIGNhbGxiYWNrIGNhbiBubyBsb25nZXIgcmVhY2ggdGhlIG9sZCBjb250ZXh0LCBzbyB0aGlzIGlzIHRoZVxuK1x0ICogbGFzdCByZWZlcmVuY2UgdG8gaXQuXG4rXHQgKi9cbitcdGlmIChjdHgpXG4gXHRcdGV2ZW50ZmRfY3R4X3B1dChjdHgpO1xuIFxuLVx0aWYgKElTX0VSUih2LVx1MDAzZWNvbmZpZ19jdHgpKSB7XG4tXHRcdGxvbmcgcmV0ID0gUFRSX0VSUih2LVx1MDAzZWNvbmZpZ19jdHgpO1xuLVxuLVx0XHR2LVx1MDAzZWNvbmZpZ19jdHggPSBOVUxMO1xuLVx0XHRyZXR1cm4gcmV0O1xuLVx0fVxuLVxuIFx0di1cdTAwM2V2ZHBhLVx1MDAzZWNvbmZpZy1cdTAwM2VzZXRfY29uZmlnX2NiKHYtXHUwMDNldmRwYSwgXHUwMDI2Y2IpO1xuIFxuIFx0cmV0dXJuIDA7XG5AQCAtMTU5OSw2ICsxNjEyLDcgQEAgc3RhdGljIGludCB2aG9zdF92ZHBhX3Byb2JlKHN0cnVjdCB2ZHBhX2RldmljZSAqdmRwYSlcbiBcdH1cbiBcbiBcdGF0b21pY19zZXQoXHUwMDI2di1cdTAwM2VvcGVuZWQsIDApO1xuK1x0c3Bpbl9sb2NrX2luaXQoXHUwMDI2di1cdTAwM2Vjb25maWdfbG9jayk7XG4gXHR2LVx1MDAzZW1pbm9yID0gbWlub3I7XG4gXHR2LVx1MDAzZXZkcGEgPSB2ZHBhO1xuIFx0di1cdTAwM2VudnFzID0gdmRwYS1cdTAwM2VudnFzO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTI6MzY6MDkuOTIwOTI3MzZaIiwiU2VxIjozMSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzUwNzgzNzc1NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIHZob3N0LXZkcGEgQ29uZmlndXJhdGlvbiBMb2NrIFBhdGNoKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpbnRyb2R1Y2VzIGEgc3BpbmxvY2ssIGBjb25maWdfbG9ja2AsIHRvIHRoZSBgdmhvc3RfdmRwYWAgc3RydWN0dXJlLiBUaGUgcHVycG9zZSBpcyB0byBzZXJpYWxpemUgYWNjZXNzIHRvIHRoZSBgY29uZmlnX2N0eGAgd2l0aGluIGB2aG9zdF92ZHBhX2NvbmZpZ19jYigpYCBhbmQgcHJldmVudCBpc3N1ZXMgd2hlbiBgY29uZmlnX2N0eGAgaXMgcmVwbGFjZWQuIFRoZSBjaGFuZ2VzIHByaW1hcmlseSBmb2N1cyBvbiBtb2RpZnlpbmcgYHZob3N0X3ZkcGFfY29uZmlnX2NiYCwgYHZob3N0X3ZkcGFfY29uZmlnX3B1dGAsIGB2aG9zdF92ZHBhX3NldF9jb25maWdfY2FsbGAsIGFuZCBgdmhvc3RfdmRwYV9wcm9iZWAgdG8gY29ycmVjdGx5IHV0aWxpemUgdGhpcyBuZXcgbG9ja2luZyBtZWNoYW5pc20uXG5cbkZyb20gbXkgdW5kZXJzdGFuZGluZywgdGhpcyBpcyBhIGNsZWFuIGZpeC4gVGhlcmUgYXJlIG5vIGNoYW5nZXMgdGhhdCBpbnRyb2R1Y2UgbmV3IHVzZXItc3BhY2UgZGF0YSwgbm8gaW5mbyBsZWFrcywgYW5kIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIGNvbmNlcm5zLiBUaGUgcHJvYmxlbSBiZWluZyBhZGRyZXNzZWQgaXMgYWxtb3N0IGNlcnRhaW5seSBhIHVzZS1hZnRlci1mcmVlIG9yIHJhY2UgY29uZGl0aW9uLCB3aGljaCBpcyBwcm9iYWJseSBiZWluZyBmbGFnZ2VkIGJ5IEtBU0FOIG9yIEtDU0FOLiBUaGVyZWZvcmUsIEkgZG9uJ3Qgc2VlIGFueSByZWFzb24gdG8gYnJpbmcgS01TQU4gaW50byB0aGUgcGljdHVyZSBoZXJlLlxuXG5MZXQgbWUganVzdCBxdWlja2x5IHZlcmlmeSBteSB1bmRlcnN0YW5kaW5nLiBgdmhvc3RfdmRwYV9zZXRfY29uZmlnX2NhbGxgIGFwcGVhcnMgdG8gYmUgZ2V0dGluZyBhbiBgZmRgIGZyb20gdXNlcnNwYWNlLCBnZXR0aW5nIHRoZSBldmVudGZkIGNvbnRleHQsIGFuZCB0aGVuIHN3YXBwaW5nIHRoYXQgY29udGV4dCB3aXRoIGB2LVx1MDAzZWNvbmZpZ19jdHhgLiBUaGUgYWRkZWQgc3BpbmxvY2sgaXMgc3BlY2lmaWNhbGx5IG1lYW50IHRvIHByb3RlY3QgdGhpcyBzd2FwIG9wZXJhdGlvbiBhbmQgdGhlIHN1YnNlcXVlbnQgY2hlY2sgb2YgYHYtXHUwMDNlY29uZmlnX2N0eGAgd2l0aGluIGB2aG9zdF92ZHBhX2NvbmZpZ19jYmAuIFllcywgdGhpcyBsb29rcyBsaWtlIGEgc3RyYWlnaHRmb3J3YXJkIGNvbmN1cnJlbmN5IGlzc3VlIHJlc29sdXRpb24uXG5cblRoZXJlZm9yZSwgSSdtIGNvbmZpZGVudCB0aGF0IGBOZWVkc0tNU0FOPWZhbHNlYCBpcyB0aGUgY29ycmVjdCBzZXR0aW5nLiBJJ2xsIHByb2NlZWQgd2l0aCB0aGF0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyOTAxLCJPdXRwdXRUb2tlbnMiOjE3NSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI4NiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDEyOjM2OjE3LjQyODc2OTAwNloiLCJTZXEiOjMyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5OTIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcmVzc2VzIGEgY29uY3VycmVuY3kgaXNzdWUgKGxpa2VseSBhIHJhY2UgY29uZGl0aW9uIG9yIHVzZS1hZnRlci1mcmVlKSBieSBhZGRpbmcgYSBzcGlubG9jayAoYGNvbmZpZ19sb2NrYCkgdG8gc2VyaWFsaXplIGFjY2Vzc2VzIHRvIGB2LVxcdTAwM2Vjb25maWdfY3R4YCBpbiBgdmhvc3RfdmRwYV9jb25maWdfY2IoKWAsIGB2aG9zdF92ZHBhX2NvbmZpZ19wdXQoKWAsIGFuZCBgdmhvc3RfdmRwYV9zZXRfY29uZmlnX2NhbGwoKWAuIFRoZXNlIGNoYW5nZXMgZG8gbm90IGludHJvZHVjZSBvciBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLCBpbmZvLWxlYWtzLCBvciBjb21wbGV4IGRhdGEgc3RydWN0dXJlIGFsbG9jYXRpb25zIHRoYXQgd291bGQgcmVxdWlyZSBLTVNBTi4gVGhlIGJ1ZyBiZWluZyBmaXhlZCBhbmQgYW55IHBvdGVudGlhbCByZWdyZXNzaW9ucyB3b3VsZCBiZSByZWxhdGVkIHRvIGxvY2tpbmcsIHJhY2UgY29uZGl0aW9ucywgb3IgdXNlLWFmdGVyLWZyZWUsIHdoaWNoIGFyZSBlZmZlY3RpdmVseSBjYXVnaHQgYnkgS0FTQU4sIEtDU0FOLCBhbmQgTE9DS0RFUC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRyZXNzZXMgYSBjb25jdXJyZW5jeSBpc3N1ZSAobGlrZWx5IGEgcmFjZSBjb25kaXRpb24gb3IgdXNlLWFmdGVyLWZyZWUpIGJ5IGFkZGluZyBhIHNwaW5sb2NrIChgY29uZmlnX2xvY2tgKSB0byBzZXJpYWxpemUgYWNjZXNzZXMgdG8gYHYtXFx1MDAzZWNvbmZpZ19jdHhgIGluIGB2aG9zdF92ZHBhX2NvbmZpZ19jYigpYCwgYHZob3N0X3ZkcGFfY29uZmlnX3B1dCgpYCwgYW5kIGB2aG9zdF92ZHBhX3NldF9jb25maWdfY2FsbCgpYC4gVGhlc2UgY2hhbmdlcyBkbyBub3QgaW50cm9kdWNlIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MsIGluZm8tbGVha3MsIG9yIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmUgYWxsb2NhdGlvbnMgdGhhdCB3b3VsZCByZXF1aXJlIEtNU0FOLiBUaGUgYnVnIGJlaW5nIGZpeGVkIGFuZCBhbnkgcG90ZW50aWFsIHJlZ3Jlc3Npb25zIHdvdWxkIGJlIHJlbGF0ZWQgdG8gbG9ja2luZywgcmFjZSBjb25kaXRpb25zLCBvciB1c2UtYWZ0ZXItZnJlZSwgd2hpY2ggYXJlIGVmZmVjdGl2ZWx5IGNhdWdodCBieSBLQVNBTiwgS0NTQU4sIGFuZCBMT0NLREVQLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },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-workflowtdlxr[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-07 11:49:04 +0000 UTC FinishedAt: 2026-08-07 13:21:55 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "ca10634ebcca850dec2f1507ad5bfe70b82a9c00", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "VHOST_VDPA", "VDPA", "VDPA_SIM", "VDPA_SIM_NET", "VDPA_SIM_BLOCK", "VDPA_USER", "RUNTIME_TESTING_MENU" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "ca10634ebcca850dec2f1507ad5bfe70b82a9c00", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "VHOST_VDPA", "VDPA", "VDPA_SIM", "VDPA_SIM_NET", "VDPA_SIM_BLOCK", "VDPA_USER", "RUNTIME_TESTING_MENU" ], "series_id": "74c31c45-e993-4568-9369-99929eeb193d" }, "track": "KASAN", "fuzz": { "focus": [ "kvm", "net" ], "focus_symbols": [ "vhost_vdpa_unlocked_ioctl", "vhost_vdpa_release", "vhost_vdpa_config_cb" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db", "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+CgkJCTx0ZD4yMDI2LzA4LzA3IDEyOjM1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1ZIT1NUX1ZEUEEmIzM0OywKICAgICYjMzQ7VkRQQSYjMzQ7LAogICAgJiMzNDtWRFBBX1NJTSYjMzQ7LAogICAgJiMzNDtWRFBBX1NJTV9ORVQmIzM0OywKICAgICYjMzQ7VkRQQV9TSU1fQkxPQ0smIzM0OywKICAgICYjMzQ7VkRQQV9VU0VSJiMzNDssCiAgICAmIzM0O1JVTlRJTUVfVEVTVElOR19NRU5VJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dmhvc3RfdmRwYV91bmxvY2tlZF9pb2N0bCYjMzQ7LAogICAgJiMzNDt2aG9zdF92ZHBhX3JlbGVhc2UmIzM0OywKICAgICYjMzQ7dmhvc3RfdmRwYV9jb25maWdfY2ImIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRyZXNzZXMgYSBjb25jdXJyZW5jeSBpc3N1ZSAobGlrZWx5IGEgcmFjZSBjb25kaXRpb24gb3IgdXNlLWFmdGVyLWZyZWUpIGJ5IGFkZGluZyBhIHNwaW5sb2NrIChgY29uZmlnX2xvY2tgKSB0byBzZXJpYWxpemUgYWNjZXNzZXMgdG8gYHYtXHUwMDNlY29uZmlnX2N0eGAgaW4gYHZob3N0X3ZkcGFfY29uZmlnX2NiKClgLCBgdmhvc3RfdmRwYV9jb25maWdfcHV0KClgLCBhbmQgYHZob3N0X3ZkcGFfc2V0X2NvbmZpZ19jYWxsKClgLiBUaGVzZSBjaGFuZ2VzIGRvIG5vdCBpbnRyb2R1Y2Ugb3IgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcywgaW5mby1sZWFrcywgb3IgY29tcGxleCBkYXRhIHN0cnVjdHVyZSBhbGxvY2F0aW9ucyB0aGF0IHdvdWxkIHJlcXVpcmUgS01TQU4uIFRoZSBidWcgYmVpbmcgZml4ZWQgYW5kIGFueSBwb3RlbnRpYWwgcmVncmVzc2lvbnMgd291bGQgYmUgcmVsYXRlZCB0byBsb2NraW5nLCByYWNlIGNvbmRpdGlvbnMsIG9yIHVzZS1hZnRlci1mcmVlLCB3aGljaCBhcmUgZWZmZWN0aXZlbHkgY2F1Z2h0IGJ5IEtBU0FOLCBLQ1NBTiwgYW5kIExPQ0tERVAuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYSBzcGlubG9jayB0byBgc3RydWN0IHZob3N0X3ZkcGFgIHRvIGZpeCBhIHJhY2UgY29uZGl0aW9uIGJldHdlZW4gYHZob3N0X3ZkcGFfY29uZmlnX2NiYCBhbmQgYHZob3N0X3ZkcGFfc2V0X2NvbmZpZ19jYWxsYCAvIGB2aG9zdF92ZHBhX2NvbmZpZ19wdXRgLiBUaGVzZSBmdW5jdGlvbnMgYXJlIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgdGhlIHZob3N0LXZkcGEgY2hhcmRldiBpb2N0bHMgYW5kIHJlbGVhc2Ugb3BlcmF0aW9ucy4gVGhlIHZEUEEgc3Vic3lzdGVtIGNhbiBiZSB0ZXN0ZWQgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCB1c2luZyB2RFBBIHNpbXVsYXRvcnMgKGB2ZHBhX3NpbV9uZXRgLCBgdmRwYV9zaW1fYmxrYCkgb3IgYHZkdXNlYC4gVGhlcmVmb3JlLCB0aGUgY2hhbmdlcyBoYXZlIGEgZnVuY3Rpb25hbCBpbXBhY3QgdGhhdCBpcyB3b3J0aCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDEyOjM1PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgOTI4ZWVlMjA0YWU3YjNhYjc4NzZhNzNjNzAzMTM4NTgyNmI1YjYyNFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgQXVnIDcgMTI6MzU6MDMgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy92aG9zdC92ZHBhLmMgYi9kcml2ZXJzL3Zob3N0L3ZkcGEuY1xuaW5kZXggYWM1NTI3NWZhMGQwYS4uMjcyZDUwNmQ4MzFjOCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvdmhvc3QvdmRwYS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL3Zob3N0L3ZkcGEuY1xuQEAgLTU2LDYgJiM0Mzs1Niw4IEBAIHN0cnVjdCB2aG9zdF92ZHBhIHtcbiBcdGludCB2aXJ0aW9faWQ7XG4gXHRpbnQgbWlub3I7XG4gXHRzdHJ1Y3QgZXZlbnRmZF9jdHggKmNvbmZpZ19jdHg7XG4mIzQzO1x0LyogU2VyaWFsaXNlcyB2aG9zdF92ZHBhX2NvbmZpZ19jYigpIGFnYWluc3QgY29uZmlnX2N0eCBiZWluZyByZXBsYWNlZC4gKi9cbiYjNDM7XHRzcGlubG9ja190IGNvbmZpZ19sb2NrO1xuIFx0aW50IGluX2JhdGNoO1xuIFx0c3RydWN0IHZkcGFfaW92YV9yYW5nZSByYW5nZTtcbiBcdHUzMiBiYXRjaF9hc2lkO1xuQEAgLTE4NywxMCAmIzQzOzE4OSwxMiBAQCBzdGF0aWMgaXJxcmV0dXJuX3Qgdmhvc3RfdmRwYV92aXJ0cXVldWVfY2Iodm9pZCAqcHJpdmF0ZSlcbiBzdGF0aWMgaXJxcmV0dXJuX3Qgdmhvc3RfdmRwYV9jb25maWdfY2Iodm9pZCAqcHJpdmF0ZSlcbiB7XG4gXHRzdHJ1Y3Qgdmhvc3RfdmRwYSAqdiA9IHByaXZhdGU7XG4tXHRzdHJ1Y3QgZXZlbnRmZF9jdHggKmNvbmZpZ19jdHggPSB2LVx1MDAzZWNvbmZpZ19jdHg7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBmbGFncztcbiBcbi1cdGlmIChjb25maWdfY3R4KVxuLVx0XHRldmVudGZkX3NpZ25hbChjb25maWdfY3R4KTtcbiYjNDM7XHRzcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZ2LVx1MDAzZWNvbmZpZ19sb2NrLCBmbGFncyk7XG4mIzQzO1x0aWYgKHYtXHUwMDNlY29uZmlnX2N0eClcbiYjNDM7XHRcdGV2ZW50ZmRfc2lnbmFsKHYtXHUwMDNlY29uZmlnX2N0eCk7XG4mIzQzO1x0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZ2LVx1MDAzZWNvbmZpZ19sb2NrLCBmbGFncyk7XG4gXG4gXHRyZXR1cm4gSVJRX0hBTkRMRUQ7XG4gfVxuQEAgLTUxMSwxNSAmIzQzOzUxNSwyMiBAQCBzdGF0aWMgbG9uZyB2aG9zdF92ZHBhX2dldF92cmluZ19udW0oc3RydWN0IHZob3N0X3ZkcGEgKnYsIHUxNiBfX3VzZXIgKmFyZ3ApXG4gXG4gc3RhdGljIHZvaWQgdmhvc3RfdmRwYV9jb25maWdfcHV0KHN0cnVjdCB2aG9zdF92ZHBhICp2KVxuIHtcbi1cdGlmICh2LVx1MDAzZWNvbmZpZ19jdHgpIHtcbi1cdFx0ZXZlbnRmZF9jdHhfcHV0KHYtXHUwMDNlY29uZmlnX2N0eCk7XG4tXHRcdHYtXHUwMDNlY29uZmlnX2N0eCA9IE5VTEw7XG4tXHR9XG4mIzQzO1x0c3RydWN0IGV2ZW50ZmRfY3R4ICpjdHg7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBmbGFncztcbiYjNDM7XG4mIzQzO1x0c3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2di1cdTAwM2Vjb25maWdfbG9jaywgZmxhZ3MpO1xuJiM0MztcdGN0eCA9IHYtXHUwMDNlY29uZmlnX2N0eDtcbiYjNDM7XHR2LVx1MDAzZWNvbmZpZ19jdHggPSBOVUxMO1xuJiM0MztcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2di1cdTAwM2Vjb25maWdfbG9jaywgZmxhZ3MpO1xuJiM0MztcbiYjNDM7XHRpZiAoY3R4KVxuJiM0MztcdFx0ZXZlbnRmZF9jdHhfcHV0KGN0eCk7XG4gfVxuIFxuIHN0YXRpYyBsb25nIHZob3N0X3ZkcGFfc2V0X2NvbmZpZ19jYWxsKHN0cnVjdCB2aG9zdF92ZHBhICp2LCB1MzIgX191c2VyICphcmdwKVxuIHtcbiBcdHN0cnVjdCB2ZHBhX2NhbGxiYWNrIGNiO1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4gXHRpbnQgZmQ7XG4gXHRzdHJ1Y3QgZXZlbnRmZF9jdHggKmN0eDtcbiBcbkBAIC01MjksMTggJiM0Mzs1NDAsMjAgQEAgc3RhdGljIGxvbmcgdmhvc3RfdmRwYV9zZXRfY29uZmlnX2NhbGwoc3RydWN0IHZob3N0X3ZkcGEgKnYsIHUzMiBfX3VzZXIgKmFyZ3ApXG4gXHRcdHJldHVybiAgLUVGQVVMVDtcbiBcbiBcdGN0eCA9IGZkID09IFZIT1NUX0ZJTEVfVU5CSU5EID8gTlVMTCA6IGV2ZW50ZmRfY3R4X2ZkZ2V0KGZkKTtcbiYjNDM7XHRpZiAoSVNfRVJSKGN0eCkpXG4mIzQzO1x0XHRyZXR1cm4gUFRSX0VSUihjdHgpO1xuJiM0MztcbiYjNDM7XHRzcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZ2LVx1MDAzZWNvbmZpZ19sb2NrLCBmbGFncyk7XG4gXHRzd2FwKGN0eCwgdi1cdTAwM2Vjb25maWdfY3R4KTtcbiYjNDM7XHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNnYtXHUwMDNlY29uZmlnX2xvY2ssIGZsYWdzKTtcbiBcbi1cdGlmICghSVNfRVJSX09SX05VTEwoY3R4KSlcbiYjNDM7XHQvKlxuJiM0MztcdCAqIFRoZSBjYWxsYmFjayBjYW4gbm8gbG9uZ2VyIHJlYWNoIHRoZSBvbGQgY29udGV4dCwgc28gdGhpcyBpcyB0aGVcbiYjNDM7XHQgKiBsYXN0IHJlZmVyZW5jZSB0byBpdC5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAoY3R4KVxuIFx0XHRldmVudGZkX2N0eF9wdXQoY3R4KTtcbiBcbi1cdGlmIChJU19FUlIodi1cdTAwM2Vjb25maWdfY3R4KSkge1xuLVx0XHRsb25nIHJldCA9IFBUUl9FUlIodi1cdTAwM2Vjb25maWdfY3R4KTtcbi1cbi1cdFx0di1cdTAwM2Vjb25maWdfY3R4ID0gTlVMTDtcbi1cdFx0cmV0dXJuIHJldDtcbi1cdH1cbi1cbiBcdHYtXHUwMDNldmRwYS1cdTAwM2Vjb25maWctXHUwMDNlc2V0X2NvbmZpZ19jYih2LVx1MDAzZXZkcGEsIFx1MDAyNmNiKTtcbiBcbiBcdHJldHVybiAwO1xuQEAgLTE1OTksNiAmIzQzOzE2MTIsNyBAQCBzdGF0aWMgaW50IHZob3N0X3ZkcGFfcHJvYmUoc3RydWN0IHZkcGFfZGV2aWNlICp2ZHBhKVxuIFx0fVxuIFxuIFx0YXRvbWljX3NldChcdTAwMjZ2LVx1MDAzZW9wZW5lZCwgMCk7XG4mIzQzO1x0c3Bpbl9sb2NrX2luaXQoXHUwMDI2di1cdTAwM2Vjb25maWdfbG9jayk7XG4gXHR2LVx1MDAzZW1pbm9yID0gbWlub3I7XG4gXHR2LVx1MDAzZXZkcGEgPSB2ZHBhO1xuIFx0di1cdTAwM2VudnFzID0gdmRwYS1cdTAwM2VudnFzO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDEyOjM1PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtWSE9TVF9WRFBBJiMzNDssCiAgICAmIzM0O1ZEUEEmIzM0OywKICAgICYjMzQ7VkRQQV9TSU0mIzM0OywKICAgICYjMzQ7VkRQQV9TSU1fTkVUJiMzNDssCiAgICAmIzM0O1ZEUEFfU0lNX0JMT0NLJiMzNDssCiAgICAmIzM0O1ZEUEFfVVNFUiYjMzQ7LAogICAgJiMzNDtSVU5USU1FX1RFU1RJTkdfTUVOVSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3Zob3N0X3ZkcGFfdW5sb2NrZWRfaW9jdGwmIzM0OywKICAgICYjMzQ7dmhvc3RfdmRwYV9yZWxlYXNlJiMzNDssCiAgICAmIzM0O3Zob3N0X3ZkcGFfY29uZmlnX2NiJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYSBzcGlubG9jayB0byBgc3RydWN0IHZob3N0X3ZkcGFgIHRvIGZpeCBhIHJhY2UgY29uZGl0aW9uIGJldHdlZW4gYHZob3N0X3ZkcGFfY29uZmlnX2NiYCBhbmQgYHZob3N0X3ZkcGFfc2V0X2NvbmZpZ19jYWxsYCAvIGB2aG9zdF92ZHBhX2NvbmZpZ19wdXRgLiBUaGVzZSBmdW5jdGlvbnMgYXJlIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgdGhlIHZob3N0LXZkcGEgY2hhcmRldiBpb2N0bHMgYW5kIHJlbGVhc2Ugb3BlcmF0aW9ucy4gVGhlIHZEUEEgc3Vic3lzdGVtIGNhbiBiZSB0ZXN0ZWQgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCB1c2luZyB2RFBBIHNpbXVsYXRvcnMgKGB2ZHBhX3NpbV9uZXRgLCBgdmRwYV9zaW1fYmxrYCkgb3IgYHZkdXNlYC4gVGhlcmVmb3JlLCB0aGUgY2hhbmdlcyBoYXZlIGEgZnVuY3Rpb25hbCBpbXBhY3QgdGhhdCBpcyB3b3J0aCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgOTI4ZWVlMjA0YWU3YjNhYjc4NzZhNzNjNzAzMTM4NTgyNmI1YjYyNApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBGcmkgQXVnIDcgMTI6MzU6MDMgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Zob3N0L3ZkcGEuYyBiL2RyaXZlcnMvdmhvc3QvdmRwYS5jCmluZGV4IGFjNTUyNzVmYTBkMGEuLjI3MmQ1MDZkODMxYzggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmhvc3QvdmRwYS5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvdmhvc3QvdmRwYS5jCkBAIC01Niw2ICYjNDM7NTYsOCBAQCBzdHJ1Y3Qgdmhvc3RfdmRwYSB7CiAJaW50IHZpcnRpb19pZDsKIAlpbnQgbWlub3I7CiAJc3RydWN0IGV2ZW50ZmRfY3R4ICpjb25maWdfY3R4OwomIzQzOwkvKiBTZXJpYWxpc2VzIHZob3N0X3ZkcGFfY29uZmlnX2NiKCkgYWdhaW5zdCBjb25maWdfY3R4IGJlaW5nIHJlcGxhY2VkLiAqLwomIzQzOwlzcGlubG9ja190IGNvbmZpZ19sb2NrOwogCWludCBpbl9iYXRjaDsKIAlzdHJ1Y3QgdmRwYV9pb3ZhX3JhbmdlIHJhbmdlOwogCXUzMiBiYXRjaF9hc2lkOwpAQCAtMTg3LDEwICYjNDM7MTg5LDEyIEBAIHN0YXRpYyBpcnFyZXR1cm5fdCB2aG9zdF92ZHBhX3ZpcnRxdWV1ZV9jYih2b2lkICpwcml2YXRlKQogc3RhdGljIGlycXJldHVybl90IHZob3N0X3ZkcGFfY29uZmlnX2NiKHZvaWQgKnByaXZhdGUpCiB7CiAJc3RydWN0IHZob3N0X3ZkcGEgKnYgPSBwcml2YXRlOwotCXN0cnVjdCBldmVudGZkX2N0eCAqY29uZmlnX2N0eCA9IHYtJmd0O2NvbmZpZ19jdHg7CiYjNDM7CXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQlpZiAoY29uZmlnX2N0eCkKLQkJZXZlbnRmZF9zaWduYWwoY29uZmlnX2N0eCk7CiYjNDM7CXNwaW5fbG9ja19pcnFzYXZlKCZhbXA7di0mZ3Q7Y29uZmlnX2xvY2ssIGZsYWdzKTsKJiM0MzsJaWYgKHYtJmd0O2NvbmZpZ19jdHgpCiYjNDM7CQlldmVudGZkX3NpZ25hbCh2LSZndDtjb25maWdfY3R4KTsKJiM0MzsJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYW1wO3YtJmd0O2NvbmZpZ19sb2NrLCBmbGFncyk7CiAKIAlyZXR1cm4gSVJRX0hBTkRMRUQ7CiB9CkBAIC01MTEsMTUgJiM0Mzs1MTUsMjIgQEAgc3RhdGljIGxvbmcgdmhvc3RfdmRwYV9nZXRfdnJpbmdfbnVtKHN0cnVjdCB2aG9zdF92ZHBhICp2LCB1MTYgX191c2VyICphcmdwKQogCiBzdGF0aWMgdm9pZCB2aG9zdF92ZHBhX2NvbmZpZ19wdXQoc3RydWN0IHZob3N0X3ZkcGEgKnYpCiB7Ci0JaWYgKHYtJmd0O2NvbmZpZ19jdHgpIHsKLQkJZXZlbnRmZF9jdHhfcHV0KHYtJmd0O2NvbmZpZ19jdHgpOwotCQl2LSZndDtjb25maWdfY3R4ID0gTlVMTDsKLQl9CiYjNDM7CXN0cnVjdCBldmVudGZkX2N0eCAqY3R4OwomIzQzOwl1bnNpZ25lZCBsb25nIGZsYWdzOwomIzQzOwomIzQzOwlzcGluX2xvY2tfaXJxc2F2ZSgmYW1wO3YtJmd0O2NvbmZpZ19sb2NrLCBmbGFncyk7CiYjNDM7CWN0eCA9IHYtJmd0O2NvbmZpZ19jdHg7CiYjNDM7CXYtJmd0O2NvbmZpZ19jdHggPSBOVUxMOwomIzQzOwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhbXA7di0mZ3Q7Y29uZmlnX2xvY2ssIGZsYWdzKTsKJiM0MzsKJiM0MzsJaWYgKGN0eCkKJiM0MzsJCWV2ZW50ZmRfY3R4X3B1dChjdHgpOwogfQogCiBzdGF0aWMgbG9uZyB2aG9zdF92ZHBhX3NldF9jb25maWdfY2FsbChzdHJ1Y3Qgdmhvc3RfdmRwYSAqdiwgdTMyIF9fdXNlciAqYXJncCkKIHsKIAlzdHJ1Y3QgdmRwYV9jYWxsYmFjayBjYjsKJiM0MzsJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgZmQ7CiAJc3RydWN0IGV2ZW50ZmRfY3R4ICpjdHg7CiAKQEAgLTUyOSwxOCAmIzQzOzU0MCwyMCBAQCBzdGF0aWMgbG9uZyB2aG9zdF92ZHBhX3NldF9jb25maWdfY2FsbChzdHJ1Y3Qgdmhvc3RfdmRwYSAqdiwgdTMyIF9fdXNlciAqYXJncCkKIAkJcmV0dXJuICAtRUZBVUxUOwogCiAJY3R4ID0gZmQgPT0gVkhPU1RfRklMRV9VTkJJTkQgPyBOVUxMIDogZXZlbnRmZF9jdHhfZmRnZXQoZmQpOwomIzQzOwlpZiAoSVNfRVJSKGN0eCkpCiYjNDM7CQlyZXR1cm4gUFRSX0VSUihjdHgpOwomIzQzOwomIzQzOwlzcGluX2xvY2tfaXJxc2F2ZSgmYW1wO3YtJmd0O2NvbmZpZ19sb2NrLCBmbGFncyk7CiAJc3dhcChjdHgsIHYtJmd0O2NvbmZpZ19jdHgpOwomIzQzOwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhbXA7di0mZ3Q7Y29uZmlnX2xvY2ssIGZsYWdzKTsKIAotCWlmICghSVNfRVJSX09SX05VTEwoY3R4KSkKJiM0MzsJLyoKJiM0MzsJICogVGhlIGNhbGxiYWNrIGNhbiBubyBsb25nZXIgcmVhY2ggdGhlIG9sZCBjb250ZXh0LCBzbyB0aGlzIGlzIHRoZQomIzQzOwkgKiBsYXN0IHJlZmVyZW5jZSB0byBpdC4KJiM0MzsJICovCiYjNDM7CWlmIChjdHgpCiAJCWV2ZW50ZmRfY3R4X3B1dChjdHgpOwogCi0JaWYgKElTX0VSUih2LSZndDtjb25maWdfY3R4KSkgewotCQlsb25nIHJldCA9IFBUUl9FUlIodi0mZ3Q7Y29uZmlnX2N0eCk7Ci0KLQkJdi0mZ3Q7Y29uZmlnX2N0eCA9IE5VTEw7Ci0JCXJldHVybiByZXQ7Ci0JfQotCiAJdi0mZ3Q7dmRwYS0mZ3Q7Y29uZmlnLSZndDtzZXRfY29uZmlnX2NiKHYtJmd0O3ZkcGEsICZhbXA7Y2IpOwogCiAJcmV0dXJuIDA7CkBAIC0xNTk5LDYgJiM0MzsxNjEyLDcgQEAgc3RhdGljIGludCB2aG9zdF92ZHBhX3Byb2JlKHN0cnVjdCB2ZHBhX2RldmljZSAqdmRwYSkKIAl9CiAKIAlhdG9taWNfc2V0KCZhbXA7di0mZ3Q7b3BlbmVkLCAwKTsKJiM0MzsJc3Bpbl9sb2NrX2luaXQoJmFtcDt2LSZndDtjb25maWdfbG9jayk7CiAJdi0mZ3Q7bWlub3IgPSBtaW5vcjsKIAl2LSZndDt2ZHBhID0gdmRwYTsKIAl2LSZndDtudnFzID0gdmRwYS0mZ3Q7bnZxczsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTI6MzU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjkwNAoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDIzMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIHZob3N0LXZkcGEgUGF0Y2gqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyB0YXJnZXRpbmcgYGRyaXZlcnMvdmhvc3QvdmRwYS5jYC4gSSBzZWUgdGhleSYjMzk7cmUgaW50cm9kdWNpbmcgYSBzcGlubG9jayBjYWxsZWQgYGNvbmZpZ19sb2NrYCB3aXRoaW4gdGhlIGBzdHJ1Y3Qgdmhvc3RfdmRwYWAuIFRoZSBpbnRlbnQsIGFzIEkgdW5kZXJzdGFuZCBpdCwgaXMgdG8gc2VyaWFsaXplIHRoZSBleGVjdXRpb24gb2YgYHZob3N0X3ZkcGFfY29uZmlnX2NiKClgIHdpdGggdGhlIHBvdGVudGlhbCBtb2RpZmljYXRpb24gb2YgYHYtJmd0O2NvbmZpZ19jdHhgIHRoYXQgaGFwcGVucyBpbiBgdmhvc3RfdmRwYV9jb25maWdfcHV0KClgIGFuZCBgdmhvc3RfdmRwYV9zZXRfY29uZmlnX2NhbGwoKWAuIEVzc2VudGlhbGx5LCB0aGV5JiMzOTtyZSBmaXhpbmcgYSByYWNlIGNvbmRpdGlvbi4gSXQgc2VlbXMgYGNvbmZpZ19jdHhgIHdhcyBnZXR0aW5nIGZyZWVkLCBhbmQgdGhlbiBwb3RlbnRpYWxseSB1c2VkIGxhdGVyLCB3aGljaCBpcyBhIGNsYXNzaWMgbWVtb3J5IHNhZmV0eSBwcm9ibGVtLiBBIHNwaW5sb2NrIGlzIGEgc2Vuc2libGUgYXBwcm9hY2ggaGVyZSB0byBlbnN1cmUgcHJvcGVyIHN5bmNocm9uaXphdGlvbi4KCk5vdywgbGV0IG1lIGp1c3QgY29uZmlybSBteSB1bmRlcnN0YW5kaW5nLiBTaW5jZSB0aGlzIHBhdGNoIGlzIHJlbGF0ZWQgdG8gdmhvc3QtdmRwYSwgbGV0IG1lIG1ha2Ugc3VyZSBJIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudC4gdmhvc3QtdmRwYSwgYXMgSSBrbm93LCBpcyBhIHZob3N0IGRyaXZlciBmb3IgdkRQQSAodmhvc3QgRGF0YSBQYXRoIEFjY2VsZXJhdGlvbikuIElmIGl0JiMzOTtzIHZEUEEgdGhlbiB0aGUgZGV2aWNlIHdvdWxkIGJlIHNpbXVsYXRlZCBieSBgdmRwYV9zaW1gIChlLmcuLCBgdmRwYV9zaW1fbmV0YCwgYHZkcGFfc2ltX2Jsa2ApLCBzbyB5ZXMsIHRoaXMgc2hvdWxkIGRlZmluaXRlbHkgYmUgcmVhY2hhYmxlLgoKTmV4dCwgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hlcmUgdG8gZmluZCB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBvcHRpb25zIGZvciB2aG9zdC12ZHBhLiBIbW1tLCBpcyBpdCBpbiBgZHJpdmVycy92aG9zdC9LY29uZmlnYCBvciBgZHJpdmVycy92ZHBhL0tjb25maWdgPyBJdCYjMzk7cyBwcm9iYWJseSBpbiB0aGUgZm9ybWVyLCBiZWNhdXNlIGB2aG9zdGAgaXMgdGhlIHJvb3QsIGJ1dCBJJiMzOTtsbCBoYXZlIHRvIGRvdWJsZS1jaGVjay4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxMjozNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgVkhPU1RfVkRQQSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvdmhvc3QvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvdmhvc3QvS2NvbmZpZz01Nj1jb25maWcgVkhPU1RfVlNPQ0tcbi0tXG5kcml2ZXJzL3Zob3N0L0tjb25maWctNjktXG5kcml2ZXJzL3Zob3N0L0tjb25maWc6NzA6Y29uZmlnIFZIT1NUX1ZEUEFcbmRyaXZlcnMvdmhvc3QvS2NvbmZpZy03MS1cdHRyaXN0YXRlIFwmIzM0O1Zob3N0IGRyaXZlciBmb3IgdkRQQS1iYXNlZCBiYWNrZW5kXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTI6MzU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzYxMwoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDIxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaXQganVzdCBvY2N1cnJlZCB0byBtZToKCioqSW52ZXN0aWdhdGluZyBWSE9TVF9WRFBBIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyByZWxhdGVkIHRvIFZIT1NUX1ZEUEEuIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIGRpdmUgaW50byB0aGUgS2NvbmZpZyBmaWxlcy4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIGdvaW5nIHRvIGNoZWNrIHRoZSBgZHJpdmVycy92aG9zdC9LY29uZmlnYCBmaWxlLiBUaGF0JiMzOTtzIHdoZXJlIEkgZXhwZWN0IHRvIGZpbmQgdGhlIHJlbGV2YW50IGRlZmluaXRpb25zIGFuZCBkZXBlbmRlbmNpZXMgZm9yIGBWSE9TVF9WRFBBYC4gSXQmIzM5O3MgdGhlIGxvZ2ljYWwgcGxhY2UgdG8gc3RhcnQgZGlnZ2luZyBmb3IgdGhlIGtub2JzIGFuZCBsZXZlcnMgY29udHJvbGxpbmcgdGhpcyBmdW5jdGlvbmFsaXR5LiBMZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3MgaW4gdGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTI6MzU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL3Zob3N0L0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA2NSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDY1Olx0XHR2aXJ0aW9fdHJhbnNwb3J0LmtvIGRyaXZlciBsb2FkZWQgdG8gdXNlIHRoZSB2aXJ0aW8tdnNvY2sgZGV2aWNlLlxuICA2NjpcdFxuICA2NzpcdFx0VG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZSB3aWxsIGJlIGNhbGxlZFxuICA2ODpcdFx0dmhvc3RfdnNvY2suXG4gIDY5Olx0XG4gIDcwOlx0Y29uZmlnIFZIT1NUX1ZEUEFcbiAgNzE6XHRcdHRyaXN0YXRlIFwmIzM0O1Zob3N0IGRyaXZlciBmb3IgdkRQQS1iYXNlZCBiYWNrZW5kXCYjMzQ7XG4gIDcyOlx0XHRkZXBlbmRzIG9uIEVWRU5URkRcbiAgNzM6XHRcdHNlbGVjdCBWSE9TVFxuICA3NDpcdFx0c2VsZWN0IElSUV9CWVBBU1NfTUFOQUdFUlxuICA3NTpcdFx0ZGVwZW5kcyBvbiBWRFBBXG4gIDc2Olx0XHRoZWxwXG4gIDc3Olx0XHQgIFRoaXMga2VybmVsIG1vZHVsZSBjYW4gYmUgbG9hZGVkIGluIGhvc3Qga2VybmVsIHRvIGFjY2VsZXJhdGVcbiAgNzg6XHRcdCAgZ3Vlc3QgdmlydGlvIGRldmljZXMgd2l0aCB0aGUgdkRQQS1iYXNlZCBiYWNrZW5kcy5cbiAgNzk6XHRcbiAgODA6XHRcdCAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZVxuICA4MTpcdFx0ICB3aWxsIGJlIGNhbGxlZCB2aG9zdF92ZHBhLlxuICA4MjpcdFxuICA4MzpcdGNvbmZpZyBWSE9TVF9DUk9TU19FTkRJQU5fTEVHQUNZXG4gIDg0Olx0XHRib29sIFwmIzM0O0Nyb3NzLWVuZGlhbiBzdXBwb3J0IGZvciB2aG9zdFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDEyOjM1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQwODMKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiAyNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOgoKKipOYXZpZ2F0aW5nIERlcGVuZGVuY2llcyoqCgpPa2F5LCBzbyBJJiMzOTttIGRlYWxpbmcgd2l0aCBgVkhPU1RfVkRQQWAgYW5kIGl0JiMzOTtzIHByZXR0eSBjbGVhciB0aGF0IGl0IGhhcyBhIGRlcGVuZGVuY3kgb24gYFZEUEFgLiBUaGF0IG1lYW5zIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb25maWd1cmF0aW9uIHJlbGF0ZWQgdG8gYFZEUEFgIGJlZm9yZSBJIGNhbiB0cnVseSBncmFzcCB0aGUgc2V0dXAgZm9yIGBWSE9TVF9WRFBBYC4gVGltZSB0byBkcmlsbCBkb3duIGludG8gdGhlIGNvbmZpZ3VyYXRpb24gZmlsZXMgYW5kIGRvY3VtZW50YXRpb24gdG8gbG9jYXRlIGFuZCBkaXNzZWN0IHRob3NlIGBWRFBBYCBzZXR0aW5ncy4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IGBWRFBBYCBpcyBjb25maWd1cmVkIGJlZm9yZSBJIGNhbiBwcm9jZWVkIHdpdGggdGhlIHByaW1hcnkgdGFzay4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxMjozNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgVkRQQSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvdmRwYS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy92ZHBhL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbmRyaXZlcnMvdmRwYS9LY29uZmlnOjI6bWVudWNvbmZpZyBWRFBBXG5kcml2ZXJzL3ZkcGEvS2NvbmZpZy0zLVx0dHJpc3RhdGUgXCYjMzQ7dkRQQSBkcml2ZXJzXCYjMzQ7XG4tLVxuZHJpdmVycy92ZHBhL0tjb25maWc9MTA9aWYgVkRQQVxuZHJpdmVycy92ZHBhL0tjb25maWctMTEtXG5kcml2ZXJzL3ZkcGEvS2NvbmZpZzoxMjpjb25maWcgVkRQQV9TSU1cbmRyaXZlcnMvdmRwYS9LY29uZmlnLTEzLVx0dHJpc3RhdGUgXCYjMzQ7dkRQQSBkZXZpY2Ugc2ltdWxhdG9yIGNvcmVcJiMzNDtcbi0tXG5kcml2ZXJzL3ZkcGEvS2NvbmZpZy0yMC1cbmRyaXZlcnMvdmRwYS9LY29uZmlnOjIxOmNvbmZpZyBWRFBBX1NJTV9ORVRcbmRyaXZlcnMvdmRwYS9LY29uZmlnLTIyLVx0dHJpc3RhdGUgXCYjMzQ7dkRQQSBzaW11bGF0b3IgZm9yIG5ldHdvcmtpbmcgZGV2aWNlXCYjMzQ7XG4tLVxuZHJpdmVycy92ZHBhL0tjb25maWctMjctXG5kcml2ZXJzL3ZkcGEvS2NvbmZpZzoyODpjb25maWcgVkRQQV9TSU1fQkxPQ0tcbmRyaXZlcnMvdmRwYS9LY29uZmlnLTI5LVx0dHJpc3RhdGUgXCYjMzQ7dkRQQSBzaW11bGF0b3IgZm9yIGJsb2NrIGRldmljZVwmIzM0O1xuLS1cbmRyaXZlcnMvdmRwYS9LY29uZmlnLTM0LVxuZHJpdmVycy92ZHBhL0tjb25maWc6MzU6Y29uZmlnIFZEUEFfVVNFUlxuZHJpdmVycy92ZHBhL0tjb25maWctMzYtXHR0cmlzdGF0ZSBcJiMzNDtWRFVTRSAodkRQQSBEZXZpY2UgaW4gVXNlcnNwYWNlKSBzdXBwb3J0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTI6MzU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDU3NQoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDU1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgaW5zdHJ1Y3Rpb25zLCB0aGlua2luZyB0aHJvdWdoIHRoZW0gYXMgSSB3b3VsZCBhcHByb2FjaCBhIHNpbWlsYXIgc2l0dWF0aW9uLgoKKipWRFUgYW5kIHRoZSBWaXJ0aW8tdkRQQSBSb2FkIEFoZWFkKioKCkFscmlnaHQsIHNvIHRoZSBpbml0aWFsIGRpcmVjdGlvbiBpcyBjbGVhcjogbGV0JiMzOTtzIGdldCB0aGUgYmFsbCByb2xsaW5nIG9uIHZEUEEuIFRoZSBzdWdnZXN0aW9uIGlzIHRvIGVuYWJsZSBgVkhPU1RfVkRQQWAsIGBWRFBBYCwgYFZEUEFfU0lNYCwgYFZEUEFfU0lNX05FVGAsIGBWRFBBX1NJTV9CTE9DS2AsIGFuZCBgVkRQQV9VU0VSYC4gU2VlbXMgbGlrZSBhIHNlbnNpYmxlIHN0YXJ0aW5nIHBvaW50IHRvIGdldCBjb21wcmVoZW5zaXZlIHZEUEEgc3VwcG9ydCB1cCBhbmQgcnVubmluZy4gSeKAmW0gdGhpbmtpbmcgdGhpcyBsb29rcyBsaWtlIGEgZ29vZCBiYXNlIHRvIHN1cHBvcnQgZGlmZmVyZW50IHZEUEEgYmFja2VuZHMsIGFuZCBhbHNvIHRvIHN1cHBvcnQgc2ltdWxhdGlvbiBmb3IgdGVzdGluZy4KCkJlZm9yZSBnb2luZyB0b28gZmFyIGRvd24gdGhlIHJhYmJpdCBob2xlLCB0aG91Z2gsIEkga25vdyBJIG5lZWQgdG8gYmUgbWV0aG9kaWNhbC4gVGhlIG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIGRlbHZlIGludG8gdGhlIGBWRFBBX1NJTWAgZGVwZW5kZW5jeSB0cmVlLiBVbmRlcnN0YW5kaW5nIHRoZXNlIGRlcGVuZGVuY2llcyB3aWxsIHRlbGwgbWUgZXZlcnl0aGluZyB0aGF0IG5lZWRzIHRvIGJlIGluIHBsYWNlIGZvciB0aGUgc2ltdWxhdGlvbiBlbnZpcm9ubWVudCB0byBmdW5jdGlvbiwgYW5kIGhlbHAgbWUgc3BvdCBhbnkgcG90ZW50aWFsIGNvbmZsaWN0cyBvciBtaXNzaW5nIHBpZWNlcyBlYXJseSBvbi4gSSYjMzk7bGwgbmVlZCB0byBrbm93IHdoaWNoIGxpYnJhcmllcywgb3RoZXIga2VybmVsIG1vZHVsZXMsIGFuZCBjb25maWd1cmF0aW9ucyBpdCByZWxpZXMgb24uIEkmIzM5O2xsIG5lZWQgdG8ga25vdyBpZiB0aGlzIHNpbXVsYXRpb24gdG9vbCBjaGFpbnMgcHJvcGVybHkgd2l0aCBhbnkgZXhpc3RpbmcgYXJjaGl0ZWN0dXJlLCBvciBpZiBpdCBjYXVzZXMgYW55IGNvbXBhdGliaWxpdHkgaXNzdWVzLiBUaGlzIHdpbGwgc2F2ZSBtZSBmcm9tIGEgbG90IG9mIGhlYWRhY2hlcyBsYXRlci4gVGhpcyBpcyBkZWZpbml0ZWx5IHdoZXJlIEkgd2lsbCBzdGFydCBteSBpbnZlc3RpZ2F0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxMjozNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvdmRwYS9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gICAyOlx0bWVudWNvbmZpZyBWRFBBXG4gICAzOlx0XHR0cmlzdGF0ZSBcJiMzNDt2RFBBIGRyaXZlcnNcJiMzNDtcbiAgIDQ6XHRcdGRlcGVuZHMgb24gTkVUXG4gICA1Olx0XHRoZWxwXG4gICA2Olx0XHQgIEVuYWJsZSB0aGlzIG1vZHVsZSB0byBzdXBwb3J0IHZEUEEgZGV2aWNlIHRoYXQgdXNlcyBhXG4gICA3Olx0XHQgIGRhdGFwYXRoIHdoaWNoIGNvbXBsaWVzIHdpdGggdmlydGlvIHNwZWNpZmljYXRpb25zIHdpdGhcbiAgIDg6XHRcdCAgdmVuZG9yIHNwZWNpZmljIGNvbnRyb2wgcGF0aC5cbiAgIDk6XHRcbiAgMTA6XHRpZiBWRFBBXG4gIDExOlx0XG4gIDEyOlx0Y29uZmlnIFZEUEFfU0lNXG4gIDEzOlx0XHR0cmlzdGF0ZSBcJiMzNDt2RFBBIGRldmljZSBzaW11bGF0b3IgY29yZVwmIzM0O1xuICAxNDpcdFx0ZGVwZW5kcyBvbiBSVU5USU1FX1RFU1RJTkdfTUVOVVxuICAxNTpcdFx0c2VsZWN0IFZIT1NUX1JJTkdcbiAgMTY6XHRcdHNlbGVjdCBJT01NVV9JT1ZBXG4gIDE3Olx0XHRoZWxwXG4gIDE4Olx0XHQgIEVuYWJsZSB0aGlzIG1vZHVsZSB0byBzdXBwb3J0IHZEUEEgZGV2aWNlIHNpbXVsYXRvcnMuIFRoZXNlIGRldmljZXNcbiAgMTk6XHRcdCAgYXJlIHVzZWQgZm9yIHRlc3RpbmcsIHByb3RvdHlwaW5nIGFuZCBkZXZlbG9wbWVudCBvZiB2RFBBLlxuICAyMDpcdFxuICAyMTpcdGNvbmZpZyBWRFBBX1NJTV9ORVRcbiAgMjI6XHRcdHRyaXN0YXRlIFwmIzM0O3ZEUEEgc2ltdWxhdG9yIGZvciBuZXR3b3JraW5nIGRldmljZVwmIzM0O1xuICAyMzpcdFx0ZGVwZW5kcyBvbiBWRFBBX1NJTVxuICAyNDpcdFx0c2VsZWN0IEdFTkVSSUNfTkVUX1VUSUxTXG4gIDI1Olx0XHRoZWxwXG4gIDI2Olx0XHQgIHZEUEEgbmV0d29ya2luZyBkZXZpY2Ugc2ltdWxhdG9yIHdoaWNoIGxvb3BzIFRYIHRyYWZmaWMgYmFjayB0byBSWC5cbiAgMjc6XHRcbiAgMjg6XHRjb25maWcgVkRQQV9TSU1fQkxPQ0tcbiAgMjk6XHRcdHRyaXN0YXRlIFwmIzM0O3ZEUEEgc2ltdWxhdG9yIGZvciBibG9jayBkZXZpY2VcJiMzNDtcbiAgMzA6XHRcdGRlcGVuZHMgb24gVkRQQV9TSU1cbiAgMzE6XHRcdGhlbHBcbiAgMzI6XHRcdCAgdkRQQSBibG9jayBkZXZpY2Ugc2ltdWxhdG9yIHdoaWNoIHRlcm1pbmF0ZXMgSU8gcmVxdWVzdCBpbiBhXG4gIDMzOlx0XHQgIG1lbW9yeSBidWZmZXIuXG4gIDM0Olx0XG4gIDM1Olx0Y29uZmlnIFZEUEFfVVNFUlxuICAzNjpcdFx0dHJpc3RhdGUgXCYjMzQ7VkRVU0UgKHZEUEEgRGV2aWNlIGluIFVzZXJzcGFjZSkgc3VwcG9ydFwmIzM0O1xuICAzNzpcdFx0ZGVwZW5kcyBvbiBFVkVOVEZEIFx1MDAyNlx1MDAyNiBNTVVcbiAgMzg6XHRcdHNlbGVjdCBWSE9TVF9JT1RMQlxuICAzOTpcdFx0c2VsZWN0IElPTU1VX0lPVkFcbiAgNDA6XHRcdGhlbHBcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTI6MzU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTQ1NgoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDE5NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipFbmFibGluZyBWRFBBIFN1cHBvcnQgYW5kIEV4YW1pbmluZyBEcml2ZXIgTW9kaWZpY2F0aW9ucyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBjb25maWd1cmF0aW9uLiBJdCBzZWVtcyBgVkRQQV9TSU1gIHJlbGllcyBkaXJlY3RseSBvbiBgUlVOVElNRV9URVNUSU5HX01FTlVgLiBUaGF0JiMzOTtzIGltcG9ydGFudC4gVG8gZW5zdXJlIGEgY29tcHJlaGVuc2l2ZSB0ZXN0IHN1aXRlIGFuZCByb2J1c3QgY29uZmlndXJhdGlvbiwgSSBzaG91bGQgZW5hYmxlIGEgc3VpdGUgb2YgcmVsYXRlZCBmZWF0dXJlczogYFZEUEFgLCBgVkRQQV9TSU1gLCBgVkRQQV9TSU1fTkVUYCwgYFZEUEFfU0lNX0JMT0NLYCwgYFZEUEFfVVNFUmAsIGFuZCBgVkhPU1RfVkRQQWAuIFdlIHdhbnQgdGhlIHdob2xlIGVuY2hpbGFkYSB0byBlbnN1cmUgcHJvcGVyIGNvdmVyYWdlLgoKTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2Ugc2V0dGluZ3MgaW1wYWN0IHRoZSBgdmhvc3QvdmRwYS5jYCBkcml2ZXIuIExldCYjMzk7cyBkaWcgaW50byB0aGUgc3BlY2lmaWMgZnVuY3Rpb25zIHRoYXQgaGF2ZSBiZWVuIG1vZGlmaWVkLiBJIHNlZSBgdmhvc3RfdmRwYV9jb25maWdfY2JgLCBgdmhvc3RfdmRwYV9jb25maWdfcHV0YCwgYHZob3N0X3ZkcGFfc2V0X2NvbmZpZ19jYWxsYCwgYW5kIGB2aG9zdF92ZHBhX3Byb2JlYCBhcmUgdGhlIGtleSBmdW5jdGlvbnMgdG8gZXhhbWluZS4KCmB2aG9zdF92ZHBhX2NvbmZpZ19jYmAgaW1tZWRpYXRlbHkganVtcHMgb3V0OyBpdCYjMzk7cyBhbiBpbnRlcnJ1cHQgaGFuZGxlci4gVGhhdCBsaWtlbHkgbWVhbnMgaXQmIzM5O3MgY3JpdGljYWwgZm9yIHJlYWwtdGltZSByZXNwb25zaXZlbmVzcyBhbmQgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGJlaGF2aW9yIHRob3JvdWdobHkuCgpgdmhvc3RfdmRwYV9jb25maWdfcHV0YCBpcyB0aGUgbmV4dCBmb2N1cy4gVGhlIGNvZGUgc3VnZ2VzdHMgaXQmIzM5O3MgY2FsbGVkIGZyb20gYHZob3N0X3ZkcGFfcmVsZWFzZWAgYW5kIHBvdGVudGlhbGx5IGB2aG9zdF92ZHBhX3NldHVwX3ZxX2lycWAuIEkgc2hvdWxkIHZlcmlmeSB0aGF0IGNhbGwgY2hhaW4gY2FyZWZ1bGx5IHRvIHVuZGVyc3RhbmQgcmVzb3VyY2UgY2xlYW51cCBhbmQgY29uZmlndXJhdGlvbi4gSSBuZWVkIHRvIGNvbmZpcm0gdGhvc2UgZGVwZW5kZW5jaWVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxMjozNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt2aG9zdF92ZHBhX2NvbmZpZ19wdXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL3Zob3N0L3ZkcGEuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL3Zob3N0L3ZkcGEuYz01MDI9c3RhdGljIGxvbmcgdmhvc3RfdmRwYV9nZXRfdnJpbmdfbnVtKHN0cnVjdCB2aG9zdF92ZHBhICp2LCB1MTYgX191c2VyICphcmdwKVxuLS1cbmRyaXZlcnMvdmhvc3QvdmRwYS5jLTUxNS1cbmRyaXZlcnMvdmhvc3QvdmRwYS5jOjUxNjpzdGF0aWMgdm9pZCB2aG9zdF92ZHBhX2NvbmZpZ19wdXQoc3RydWN0IHZob3N0X3ZkcGEgKnYpXG5kcml2ZXJzL3Zob3N0L3ZkcGEuYy01MTcte1xuLS1cbmRyaXZlcnMvdmhvc3QvdmRwYS5jPTE0NzY9c3RhdGljIGludCB2aG9zdF92ZHBhX3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGVwKVxuLS1cbmRyaXZlcnMvdmhvc3QvdmRwYS5jLTE0ODYtXHR2aG9zdF92ZHBhX3VuYmluZF9tbSh2KTtcbmRyaXZlcnMvdmhvc3QvdmRwYS5jOjE0ODc6XHR2aG9zdF92ZHBhX2NvbmZpZ19wdXQodik7XG5kcml2ZXJzL3Zob3N0L3ZkcGEuYy0xNDg4LVx0dmhvc3RfdmRwYV9jbGVhbnVwKHYpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxMjozNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2MjcxCgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogMjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKk15IEN1cnJlbnQgRGVkdWN0aW9ucyBvbiB2aG9zdF92ZHBhX3NldF9jb25maWdfY2FsbCoqCgpSaWdodCwgbGV0IG1lIHNlZS4uLnNvIGB2aG9zdF92ZHBhX3NldF9jb25maWdfY2FsbGAgaXMgZGVmaW5pdGVseSBjYWxsZWQgZnJvbSBgdmhvc3RfdmRwYV91bmxvY2tlZF9pb2N0bGAuIFRoYXQgbWVhbnMgdGhlIGBzZXRfY29uZmlnYCBmdW5jdGlvbiBpcyBhY2Nlc3NlZCB2aWEgdGhlIElPQ1RMIGludGVyZmFjZSwgd2hpY2ggaXMgYXMgZXhwZWN0ZWQuIEkmIzM5O20gbm90aW5nIHRoaXMgc3BlY2lmaWNhbGx5IGJlY2F1c2UgaXQgaW1wbGllcyBhIGZldyB0aGluZ3MgcmlnaHQgb2ZmIHRoZSBiYXQ6IHRoZSBjb25maWd1cmF0aW9uIHNldHRpbmcgcHJvYmFibHkgaW52b2x2ZXMgc29tZSB1c2VyLXNwYWNlIGludGVyYWN0aW9uIOKAkyBzdGFuZGFyZCBmb3IgSU9DVExzLCBvZiBjb3Vyc2UuIEl0IGFsc28gbWVhbnMgdGhhdCB0aGVyZSYjMzk7cyBhIGdvb2QgY2hhbmNlIHRoZXJlIHdpbGwgYmUgbG9ja2luZyBjb25zaWRlcmF0aW9ucyBhbmQgc2VjdXJpdHkgY2hlY2tzIHdpdGhpbiB0aGUgYHZob3N0X3ZkcGFfdW5sb2NrZWRfaW9jdGxgIGNvbnRleHQuIEkgc2hvdWxkIHByb2JhYmx5IHJlLWZhbWlsaWFyaXplIG15c2VsZiB3aXRoIHRoZSBsb2NraW5nIHN0cmF0ZWd5IHRoZXJlIGFuZCB0aGUgcG90ZW50aWFsIGZvciByYWNlIGNvbmRpdGlvbnMgaW52b2x2aW5nIGNvbmZpZ3VyYXRpb24gY2hhbmdlcy4gTmVlZCB0byBkb3VibGUgY2hlY2sgaG93IHRoZSBkZXZpY2Ugc3RhdGUgaXMgcHJvdGVjdGVkLCBlc3BlY2lhbGx5IHdoZW4gZGVhbGluZyB3aXRoIHBvdGVudGlhbGx5IGNvbmN1cnJlbnQgdXNlci1zcGFjZSByZXF1ZXN0cy4gQSBxdWljayBkaXZlIGludG8gdGhhdCBhcmVhIHNob3VsZCByZXZlYWwgdGhlIHBlcnRpbmVudCBzdHJ1Y3R1cmVzLiBJJiMzOTtsbCBhbHNvIHdhbnQgdG8gdW5kZXJzdGFuZCB0aGUgZXhhY3Qgc3RydWN0dXJlIG9mIHRoZSBjb25maWd1cmF0aW9uIGRhdGEgYmVpbmcgcGFzc2VkIGluIHRocm91Z2ggdGhlIElPQ1RMIGFuZCB0aGUgdmFsaWRhdGlvbiB0aGF0JiMzOTtzIHBlcmZvcm1lZCBvbiBpdC4gQW55IHBvdGVudGlhbCB2dWxuZXJhYmlsaXRpZXMgcmVsYXRlZCB0byBidWZmZXIgb3ZlcmZsb3dzIG9yIGRhdGEgZm9ybWF0IGlzc3VlcyBuZWVkIHRvIGJlIGlkZW50aWZpZWQuIFRoZSBjb250ZXh0IGhlcmUgdGVsbHMgbWUgd2hlcmUgdG8gc3RhcnQgZGlnZ2luZyBmb3IgdGhlIGtleSBhcmVhcyBvZiBjb25jZXJuLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxMjozNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt2aG9zdF92ZHBhX3NldF9jb25maWdfY2FsbCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvdmhvc3QvdmRwYS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvdmhvc3QvdmRwYS5jPTUxNj1zdGF0aWMgdm9pZCB2aG9zdF92ZHBhX2NvbmZpZ19wdXQoc3RydWN0IHZob3N0X3ZkcGEgKnYpXG4tLVxuZHJpdmVycy92aG9zdC92ZHBhLmMtNTI5LVxuZHJpdmVycy92aG9zdC92ZHBhLmM6NTMwOnN0YXRpYyBsb25nIHZob3N0X3ZkcGFfc2V0X2NvbmZpZ19jYWxsKHN0cnVjdCB2aG9zdF92ZHBhICp2LCB1MzIgX191c2VyICphcmdwKVxuZHJpdmVycy92aG9zdC92ZHBhLmMtNTMxLXtcbi0tXG5kcml2ZXJzL3Zob3N0L3ZkcGEuYz03ODk9c3RhdGljIGxvbmcgdmhvc3RfdmRwYV91bmxvY2tlZF9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlsZXAsXG4tLVxuZHJpdmVycy92aG9zdC92ZHBhLmMtODY4LVx0Y2FzZSBWSE9TVF9WRFBBX1NFVF9DT05GSUdfQ0FMTDpcbmRyaXZlcnMvdmhvc3QvdmRwYS5jOjg2OTpcdFx0ciA9IHZob3N0X3ZkcGFfc2V0X2NvbmZpZ19jYWxsKHYsIGFyZ3ApO1xuZHJpdmVycy92aG9zdC92ZHBhLmMtODcwLVx0XHRicmVhaztcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTI6MzU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjg4MQoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDExNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipEaXZpbmcgaW50byB0aGUgVmhvc3QtVmRwYSBDb25maWd1cmF0aW9uIFByb2Nlc3MqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGhvdyB0aGUgYFZIT1NUX1ZEUEFfU0VUX0NPTkZJR19DQUxMYCBpb2N0bCBpcyBoYW5kbGVkIHdpdGhpbiB0aGUgdmhvc3QtdmRwYSBmcmFtZXdvcmsuIEl0IHNlZW1zIGB2aG9zdF92ZHBhX3NldF9jb25maWdfY2FsbGAgaXMgdGhlIGtleSBmdW5jdGlvbiBoZXJlLCBhY3RpbmcgYXMgdGhlIGlvY3RsIGhhbmRsZXIgZm9yIHRoYXQgcGFydGljdWxhciBjb21tYW5kLiBNeSB1bmRlcnN0YW5kaW5nIGlzIHRoYXQsIHdpdGhpbiB0aGlzLCB0aGUgY3JpdGljYWwgcGllY2UgaXMgdGhlIGB2aG9zdF92ZHBhX2NvbmZpZ19jYmAgY2FsbGJhY2suIFRoaXMgY2FsbGJhY2sgaXMgdGhlbiBhc3NpZ25lZCB0aHJvdWdoIGB2LSZndDt2ZHBhLSZndDtjb25maWctJmd0O3NldF9jb25maWdfY2Iodi0mZ3Q7dmRwYSwgJmFtcDtjYik7YCwgc3VnZ2VzdGluZyBpdCBpcyBsaWtlbHkgdGhlIG1lY2hhbmlzbSB0aHJvdWdoIHdoaWNoIHRoZSBhY3R1YWwgY29uZmlndXJhdGlvbiBvcGVyYXRpb25zIGFyZSBwZXJmb3JtZWQuCgpJIHJlYWxseSBuZWVkIHRvIGRyaWxsIGRvd24gaW50byB0aGUgZGV0YWlscyBvZiBgdmhvc3RfdmRwYV9zZXRfY29uZmlnX2NhbGxgIHRvIHVuZGVyc3RhbmQgdGhlIGRhdGEgZmxvdyBhbmQgZW5zdXJlIEkgZ2V0IHRoZSBudWFuY2Ugb2YgaXRzIHdvcmtpbmdzLCBzcGVjaWZpY2FsbHkgdG8gdW5kZXJzdGFuZCB0aGUgc2V0dGluZyBvZiB0aGUgYGNvbmZpZ19jYmAuCgpUaGVyZWZvcmUsIEkmIzM5O20gZ29pbmcgdG8gaGVhZCBkaXJlY3RseSB0byBgZHJpdmVycy92aG9zdC92ZHBhLmNgIHRvIGV4YW1pbmUgYHZob3N0X3ZkcGFfc2V0X2NvbmZpZ19jYWxsYCBjbG9zZWx5LiBUaGlzIHNob3VsZCBpbGx1bWluYXRlIHRoZSBwYXRoIG9mIGNvbmZpZ3VyYXRpb24hCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDEyOjM1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy92aG9zdC92ZHBhLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA1MjUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDUyNTpcdFxuIDUyNjpcdFx0aWYgKGN0eClcbiA1Mjc6XHRcdFx0ZXZlbnRmZF9jdHhfcHV0KGN0eCk7XG4gNTI4Olx0fVxuIDUyOTpcdFxuIDUzMDpcdHN0YXRpYyBsb25nIHZob3N0X3ZkcGFfc2V0X2NvbmZpZ19jYWxsKHN0cnVjdCB2aG9zdF92ZHBhICp2LCB1MzIgX191c2VyICphcmdwKVxuIDUzMTpcdHtcbiA1MzI6XHRcdHN0cnVjdCB2ZHBhX2NhbGxiYWNrIGNiO1xuIDUzMzpcdFx0dW5zaWduZWQgbG9uZyBmbGFncztcbiA1MzQ6XHRcdGludCBmZDtcbiA1MzU6XHRcdHN0cnVjdCBldmVudGZkX2N0eCAqY3R4O1xuIDUzNjpcdFxuIDUzNzpcdFx0Y2IuY2FsbGJhY2sgPSB2aG9zdF92ZHBhX2NvbmZpZ19jYjtcbiA1Mzg6XHRcdGNiLnByaXZhdGUgPSB2O1xuIDUzOTpcdFx0aWYgKGNvcHlfZnJvbV91c2VyKFx1MDAyNmZkLCBhcmdwLCBzaXplb2YoZmQpKSlcbiA1NDA6XHRcdFx0cmV0dXJuICAtRUZBVUxUO1xuIDU0MTpcdFxuIDU0MjpcdFx0Y3R4ID0gZmQgPT0gVkhPU1RfRklMRV9VTkJJTkQgPyBOVUxMIDogZXZlbnRmZF9jdHhfZmRnZXQoZmQpO1xuIDU0MzpcdFx0aWYgKElTX0VSUihjdHgpKVxuIDU0NDpcdFx0XHRyZXR1cm4gUFRSX0VSUihjdHgpO1xuIDU0NTpcdFxuIDU0NjpcdFx0c3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2di1cdTAwM2Vjb25maWdfbG9jaywgZmxhZ3MpO1xuIDU0NzpcdFx0c3dhcChjdHgsIHYtXHUwMDNlY29uZmlnX2N0eCk7XG4gNTQ4Olx0XHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNnYtXHUwMDNlY29uZmlnX2xvY2ssIGZsYWdzKTtcbiA1NDk6XHRcbiA1NTA6XHRcdC8qXG4gNTUxOlx0XHQgKiBUaGUgY2FsbGJhY2sgY2FuIG5vIGxvbmdlciByZWFjaCB0aGUgb2xkIGNvbnRleHQsIHNvIHRoaXMgaXMgdGhlXG4gNTUyOlx0XHQgKiBsYXN0IHJlZmVyZW5jZSB0byBpdC5cbiA1NTM6XHRcdCAqL1xuIDU1NDpcdFx0aWYgKGN0eClcbiA1NTU6XHRcdFx0ZXZlbnRmZF9jdHhfcHV0KGN0eCk7XG4gNTU2Olx0XG4gNTU3Olx0XHR2LVx1MDAzZXZkcGEtXHUwMDNlY29uZmlnLVx1MDAzZXNldF9jb25maWdfY2Iodi1cdTAwM2V2ZHBhLCBcdTAwMjZjYik7XG4gNTU4Olx0XG4gNTU5Olx0XHRyZXR1cm4gMDtcbiA1NjA6XHR9XG4gNTYxOlx0XG4gNTYyOlx0c3RhdGljIGxvbmcgdmhvc3RfdmRwYV9nZXRfaW92YV9yYW5nZShzdHJ1Y3Qgdmhvc3RfdmRwYSAqdiwgdTMyIF9fdXNlciAqYXJncClcbiA1NjM6XHR7XG4gNTY0Olx0XHRzdHJ1Y3Qgdmhvc3RfdmRwYV9pb3ZhX3JhbmdlIHJhbmdlID0ge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxMjozNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3ODgzCgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMjI0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgdmhvc3QtdmRwYSBDb25maWd1cmF0aW9uIEZsb3cqKgoKT2theSwgc28gSSYjMzk7bSB0cnlpbmcgdG8gd3JhcCBteSBoZWFkIGFyb3VuZCB0aGUgY29uZmlndXJhdGlvbiBwcm9jZXNzIGZvciBgdmhvc3QtdmRwYWAuIFRoZSBrZXkgZnVuY3Rpb25zIHRoYXQgc2VlbSBpbXBvcnRhbnQgYXJlOiBgdmhvc3RfdmRwYV9zZXRfY29uZmlnX2NhbGxgLCBgdmhvc3RfdmRwYV9jb25maWdfcHV0YCwgYW5kIGB2aG9zdF92ZHBhX2NvbmZpZ19jYmAuIE5vdywgSSByZWNhbGwgdGhhdCBgdmhvc3RfdmRwYV9zZXRfY29uZmlnX2NhbGxgIGlzIHN0YXRpYywgd2hpY2ggaXMgaW50ZXJlc3RpbmcgYmVjYXVzZSB0aGF0IG5hcnJvd3MgZG93biB0aGUgcGxhY2VzIEkgbmVlZCB0byBsb29rIGZvciBjYWxscyB0byBpdC4KCkFoLCByaWdodCEgSSByZW1lbWJlciB0aGF0IGB2aG9zdF92ZHBhX3VubG9ja2VkX2lvY3RsYCBjYWxscyB0aGF0IGZ1bmN0aW9uLiBTaW5jZSB0aGF0IGZ1bmN0aW9uIGhhbmRsZXMgaW9jdGxzLCB0aGF0JiMzOTtzIGFsbW9zdCBjZXJ0YWlubHkgdGhlIGVudHJ5IHBvaW50IEkgd2FudC4gTGV0IG1lIGp1c3QgY29uZmlybSB0aGF0IGB2aG9zdF92ZHBhX3NldF9jb25maWdfY2FsbGAgaXMgaW5kZWVkIHN0YXRpYy4gWWVwLCBjb25maXJtZWQuIE9rYXksIHNvIGB2aG9zdF92ZHBhX3VubG9ja2VkX2lvY3RsYCBpcyAqdGhlKiBwbGFjZSB0byBzdGFydC4gQW5kIGlmIEkgd2FudCB0byBsb29rIGF0IHdoZXJlIGB2aG9zdF92ZHBhX2NvbmZpZ19wdXRgIGlzIGNhbGxlZCwgaXQgc2VlbXMgbGlrZSBgdmhvc3RfdmRwYV9yZWxlYXNlYCBpcyB0aGUgZW50cnkgcG9pbnQgZm9yIHRoYXQuIAoKTGV0IG1lIGp1c3QgcXVpY2tseSBjaGVjayBpZiBgdmhvc3RfdmRwYV91bmxvY2tlZF9pb2N0bGAgaXMgc3RhdGljLi4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDEyOjM1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3Zob3N0X3ZkcGFfdW5sb2NrZWRfaW9jdGwmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL3Zob3N0L3ZkcGEuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL3Zob3N0L3ZkcGEuYz02NDU9c3RhdGljIGxvbmcgdmhvc3RfdmRwYV92cmluZ19pb2N0bChzdHJ1Y3Qgdmhvc3RfdmRwYSAqdiwgdW5zaWduZWQgaW50IGNtZCxcbi0tXG5kcml2ZXJzL3Zob3N0L3ZkcGEuYy03ODgtXG5kcml2ZXJzL3Zob3N0L3ZkcGEuYzo3ODk6c3RhdGljIGxvbmcgdmhvc3RfdmRwYV91bmxvY2tlZF9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlsZXAsXG5kcml2ZXJzL3Zob3N0L3ZkcGEuYy03OTAtXHRcdFx0XHQgICAgICB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZylcbi0tXG5kcml2ZXJzL3Zob3N0L3ZkcGEuYz0xNTY3PXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHZob3N0X3ZkcGFfZm9wcyA9IHtcbi0tXG5kcml2ZXJzL3Zob3N0L3ZkcGEuYy0xNTcxLVx0LndyaXRlX2l0ZXJcdD0gdmhvc3RfdmRwYV9jaHJfd3JpdGVfaXRlcixcbmRyaXZlcnMvdmhvc3QvdmRwYS5jOjE1NzI6XHQudW5sb2NrZWRfaW9jdGxcdD0gdmhvc3RfdmRwYV91bmxvY2tlZF9pb2N0bCxcbmRyaXZlcnMvdmhvc3QvdmRwYS5jLTE1NzMtI2lmZGVmIENPTkZJR19NTVVcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTI6MzU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODY3NwoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDMwNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgUG90ZW50aWFsIEZvY3VzIFN5bWJvbHMgZm9yIFN5emthbGxlcioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhlc2UgZnVuY3Rpb25zIGFuZCB0cnlpbmcgdG8gZmlndXJlIG91dCB3aGljaCBvbmVzIGFyZSBnb29kIGNhbmRpZGF0ZXMgZm9yIFN5emthbGxlciB0byB0YXJnZXQuIExldCYjMzk7cyBzZWUuLi4gRmlyc3QsIGB2aG9zdF92ZHBhX3VubG9ja2VkX2lvY3RsYC4gWWVzLCBpdCYjMzk7cyBzdGF0aWMuIEJ1dCB3YWl0LCBpdCYjMzk7cyBhbHNvIGEgZmlsZSBvcGVyYXRpb25zIGNhbGxiYWNrLiBUaGF0IG1lYW5zIGl0cyBhZGRyZXNzIGlzIHRha2VuLCBzbyBpdCAqc2hvdWxkbiYjMzk7dCogYmUgaW5saW5lZC4gVGhhdCYjMzk7cyBnb29kOyBTeXprYWxsZXIgY2FuIGZvY3VzIG9uIGl0IGlmIHdlIHBvaW50IGl0IHRoZXJlLiBUaGUgcHJvbXB0IHNhaWQgdG8gcHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIGVudHJ5cG9pbnRzLCBhbmQgYHZob3N0X3ZkcGFfdW5sb2NrZWRfaW9jdGxgIGxvb2tzIGxpa2UgaXQgZml0cyB0aGUgYmlsbC4KCkFuZCBgdmhvc3RfdmRwYV9yZWxlYXNlYCBpcyBhbHNvIGEgZmlsZSBvcGVyYXRpb25zIGNhbGxiYWNrLCBzbyBzYW1lIGRlYWwgdGhlcmUsIHJpZ2h0PwoKTm93LCBsZXQmIzM5O3MgdGhpbmsgYWJvdXQgYHZob3N0X3ZkcGFfc2V0X2NvbmZpZ19jYWxsYC4gSXQmIzM5O3Mgc3RhdGljLCB3aGljaCBpcyBhIHJlZCBmbGFnLiBIb3dldmVyLCBpdCYjMzk7cyBjYWxsZWQgZnJvbSBhIHN3aXRjaCBzdGF0ZW1lbnQgKndpdGhpbiogYHZob3N0X3ZkcGFfdW5sb2NrZWRfaW9jdGxgLiBUaGF0IG1ha2VzIG1lIHRoaW5rIGl0ICptaWdodCogYmUgaW5saW5lZC4gQ29tcGlsZXIgb3B0aW1pemF0aW9uIGlzIGEgcGFpbiEKClNvLCB0aGUgb2J2aW91cyBjaG9pY2UgaXMgc3RpbGwgYHZob3N0X3ZkcGFfdW5sb2NrZWRfaW9jdGxgIGF0IHRoaXMgcG9pbnQuIEl0JiMzOTtzIGEgZmlsZSBvcGVyYXRpb25zIGNhbGxiYWNrLCBpdHMgYWRkcmVzcyBpcyB0YWtlbiwgaXQmIzM5O3Mgbm90IGlubGluZWQsIGFuZCBpdCYjMzk7cyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuCgpXaGF0IGFib3V0IGB2aG9zdF92ZHBhX2NvbmZpZ19jYmA/IEl0JiMzOTtzIGEgY2FsbGJhY2ssIGFuZCBpdCYjMzk7cyBhZGRyZXNzIGlzIGFsc28gdGFrZW4uIFNvIHRoYXQmIzM5O3MgYWxzbyBub3QgaW5saW5lZC4KCk9rYXksIGxldCYjMzk7cyBjaGVjayBgdmhvc3RfdmRwYV9jb25maWdfY2JgIG1vcmUgY2xvc2VseS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTI6MzU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dmhvc3RfdmRwYV9jb25maWdfY2ImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL3Zob3N0L3ZkcGEuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL3Zob3N0L3ZkcGEuYz00NT1zdHJ1Y3Qgdmhvc3RfdmRwYSB7XG4tLVxuZHJpdmVycy92aG9zdC92ZHBhLmMtNTgtXHRzdHJ1Y3QgZXZlbnRmZF9jdHggKmNvbmZpZ19jdHg7XG5kcml2ZXJzL3Zob3N0L3ZkcGEuYzo1OTpcdC8qIFNlcmlhbGlzZXMgdmhvc3RfdmRwYV9jb25maWdfY2IoKSBhZ2FpbnN0IGNvbmZpZ19jdHggYmVpbmcgcmVwbGFjZWQuICovXG5kcml2ZXJzL3Zob3N0L3ZkcGEuYy02MC1cdHNwaW5sb2NrX3QgY29uZmlnX2xvY2s7XG4tLVxuZHJpdmVycy92aG9zdC92ZHBhLmM9MTc4PXN0YXRpYyBpcnFyZXR1cm5fdCB2aG9zdF92ZHBhX3ZpcnRxdWV1ZV9jYih2b2lkICpwcml2YXRlKVxuLS1cbmRyaXZlcnMvdmhvc3QvdmRwYS5jLTE4OC1cbmRyaXZlcnMvdmhvc3QvdmRwYS5jOjE4OTpzdGF0aWMgaXJxcmV0dXJuX3Qgdmhvc3RfdmRwYV9jb25maWdfY2Iodm9pZCAqcHJpdmF0ZSlcbmRyaXZlcnMvdmhvc3QvdmRwYS5jLTE5MC17XG4tLVxuZHJpdmVycy92aG9zdC92ZHBhLmM9NTMwPXN0YXRpYyBsb25nIHZob3N0X3ZkcGFfc2V0X2NvbmZpZ19jYWxsKHN0cnVjdCB2aG9zdF92ZHBhICp2LCB1MzIgX191c2VyICphcmdwKVxuLS1cbmRyaXZlcnMvdmhvc3QvdmRwYS5jLTUzNi1cbmRyaXZlcnMvdmhvc3QvdmRwYS5jOjUzNzpcdGNiLmNhbGxiYWNrID0gdmhvc3RfdmRwYV9jb25maWdfY2I7XG5kcml2ZXJzL3Zob3N0L3ZkcGEuYy01MzgtXHRjYi5wcml2YXRlID0gdjtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTI6MzU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTcyMwoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDQ1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgaXQgd2VyZSBteSBvd246CgoqKkFuYWx5emluZyB0aGUgdmhvc3QtdmRwYSBDb2RlKioKCk9rYXksIGxldCYjMzk7cyBzZWUsIGB2aG9zdF92ZHBhX2NvbmZpZ19jYmAuLi4gcmlnaHQsIHRoYXQmIzM5O3MgYW4gYGlycXJldHVybl90YCBjYWxsYmFjay4gU28sIGl0JiMzOTtzIHRyaWdnZXJlZCBieSBhbiBpbnRlcnJ1cHQsIGhhbmRsaW5nIHNvbWUgY29uZmlndXJhdGlvbiBldmVudCBvciBzaWduYWwgd2l0aGluIHRoZSBWRFBBIGNvbnRleHQuIE5vdywgd2hhdCAqZWxzZSogaXMgaW4gcGxheSBoZXJlPyBJcyB0aGVyZSBhbnkgb3RoZXIgZnVuY3Rpb24gSSBuZWVkIHRvIGNvbnNpZGVyIGluIHJlbGF0aW9uIHRvIHRoYXQgY2FsbGJhY2s/IExldCBtZSBkb3VibGUtY2hlY2sgdGhlIGNvZGUgc3RydWN0dXJlLiBPa2F5LCBoZXJlJiMzOTtzIGB2aG9zdF92ZHBhX3JlbGVhc2VgLCB0aGF0IGxvb2tzIHRvIGJlIHRoZSBmaWxlIG9wZXJhdGlvbiByZWxlYXNlIGNhbGxiYWNrLiBHb3QgaXQsIHNvIHRoYXQmIzM5O3MgY2FsbGVkIHdoZW4gYSBmaWxlIGRlc2NyaXB0b3IgYXNzb2NpYXRlZCB3aXRoIHRoZSBkZXZpY2UgaXMgY2xvc2VkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxMjozNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt2aG9zdF92ZHBhX3JlbGVhc2UmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL3Zob3N0L3ZkcGEuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL3Zob3N0L3ZkcGEuYz0xNDY4PXN0YXRpYyB2b2lkIHZob3N0X3ZkcGFfY2xlYW5faXJxKHN0cnVjdCB2aG9zdF92ZHBhICp2KVxuLS1cbmRyaXZlcnMvdmhvc3QvdmRwYS5jLTE0NzUtXG5kcml2ZXJzL3Zob3N0L3ZkcGEuYzoxNDc2OnN0YXRpYyBpbnQgdmhvc3RfdmRwYV9yZWxlYXNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlcClcbmRyaXZlcnMvdmhvc3QvdmRwYS5jLTE0Nzcte1xuLS1cbmRyaXZlcnMvdmhvc3QvdmRwYS5jPTE1Njc9c3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgdmhvc3RfdmRwYV9mb3BzID0ge1xuLS1cbmRyaXZlcnMvdmhvc3QvdmRwYS5jLTE1NjktXHQub3Blblx0XHQ9IHZob3N0X3ZkcGFfb3BlbixcbmRyaXZlcnMvdmhvc3QvdmRwYS5jOjE1NzA6XHQucmVsZWFzZVx0PSB2aG9zdF92ZHBhX3JlbGVhc2UsXG5kcml2ZXJzL3Zob3N0L3ZkcGEuYy0xNTcxLVx0LndyaXRlX2l0ZXJcdD0gdmhvc3RfdmRwYV9jaHJfd3JpdGVfaXRlcixcbi0tXG5kcml2ZXJzL3Zob3N0L3ZkcGEuYy0xNTc4LVxuZHJpdmVycy92aG9zdC92ZHBhLmM6MTU3OTpzdGF0aWMgdm9pZCB2aG9zdF92ZHBhX3JlbGVhc2VfZGV2KHN0cnVjdCBkZXZpY2UgKmRldmljZSlcbmRyaXZlcnMvdmhvc3QvdmRwYS5jLTE1ODAte1xuLS1cbmRyaXZlcnMvdmhvc3QvdmRwYS5jPTE1ODk9c3RhdGljIGludCB2aG9zdF92ZHBhX3Byb2JlKHN0cnVjdCB2ZHBhX2RldmljZSAqdmRwYSlcbi0tXG5kcml2ZXJzL3Zob3N0L3ZkcGEuYy0xNjIxLVx0ZGV2aWNlX2luaXRpYWxpemUoXHUwMDI2di1cdTAwM2VkZXYpO1xuZHJpdmVycy92aG9zdC92ZHBhLmM6MTYyMjpcdHYtXHUwMDNlZGV2LnJlbGVhc2UgPSB2aG9zdF92ZHBhX3JlbGVhc2VfZGV2O1xuZHJpdmVycy92aG9zdC92ZHBhLmMtMTYyMy1cdHYtXHUwMDNlZGV2LnBhcmVudCA9IFx1MDAyNnZkcGEtXHUwMDNlZGV2O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxMjozNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDQxMQoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDIxOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipDb25maWd1cmF0aW9uIERlZXAgRGl2ZSBmb3IgVkRQQSBhbmQgVmhvc3QtVkRQQSoqCgpPa2F5LCBsZXQmIzM5O3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkmIzM5O20gaG9taW5nIGluIG9uIHRoZSBjcml0aWNhbCBzeW1ib2xzIHJlbGF0ZWQgdG8gVkRQQSBhbmQgdmhvc3QtdmRwYTogYHZob3N0X3ZkcGFfdW5sb2NrZWRfaW9jdGxgLCBgdmhvc3RfdmRwYV9yZWxlYXNlYCwgYW5kIGB2aG9zdF92ZHBhX2NvbmZpZ19jYmAuIFRoZXNlIGFyZSBteSBpbml0aWFsIGJyZWFkY3J1bWJzLgoKTm93LCBsZXQmIzM5O3MgbWV0aWN1bG91c2x5IHJldmlldyB0aGUgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMuIEZpcnN0LCB3ZSBuZWVkIHRvIGVuc3VyZSBgVkhPU1RfVkRQQWAgaXMgZW5hYmxlZCDigJMgdGhhdCYjMzk7cyBvdXIgYW5jaG9yLiBGb2xsb3dpbmcgdGhhdCwgd2UgaGF2ZSBkZXBlbmRlbmNpZXMgdGhhdCB3ZSBuZWVkIHRvIGVuc3VyZSBhcmUgYWxzbyBlbmFibGVkLCBzbyB3ZSBuZWVkIHRvIHZlcmlmeToKKiAgIGBWSE9TVF9WRFBBYCBoaW5nZXMgb24gYm90aCBgRVZFTlRGRGAgYW5kIGBWRFBBYC4KKiAgIGBWRFBBYCwgaW4gdHVybiwgZGVwZW5kcyBvbiBgTkVUYC4KKiAgIElmIHdlIG5lZWQgdGhlIGBWRFBBX1NJTWAgbW9kdWxlIHdlIG5lZWQgdG8gZW5zdXJlIGBSVU5USU1FX1RFU1RJTkdfTUVOVWAgaXMgZW5hYmxlZC4KKiAgIFRoZW4gZm9yIGJvdGggYFZEUEFfU0lNX05FVGAgYW5kIGBWRFBBX1NJTV9CTE9DS2AgbW9kdWxlcywgdGhlaXIgc2hhcmVkIGRlcGVuZGVuY3kgaXMgYFZEUEFfU0lNYC4KKiAgIGBWRFBBX1VTRVJgIGFsc28gcmVxdWlyZXMgYEVWRU5URkRgIGFuZCBgTU1VYC4KCkJhc2VkIG9uIHRoaXMgY2FzY2FkZSBvZiBkZXBlbmRlbmNpZXMsIEkmIzM5O20gY29uZmlkZW50IHdlIG5lZWQgdG8gZW5hYmxlIHRoZSBmb2xsb3dpbmcgY29uZmlndXJhdGlvbnM6CgoqICAgYFZIT1NUX1ZEUEFgCiogICBgVkRQQWAKKiAgIGBWRFBBX1NJTWAKKiAgIGBWRFBBX1NJTV9ORVRgCiogICBgVkRQQV9TSU1fQkxPQ0tgCiogICBgVkRQQV9VU0VSYAoKSG93ZXZlciwgYmVmb3JlIHdlIGZpbmFsaXplIHRoZXNlIGNvbmZpZ3VyYXRpb25zLCBJIG5lZWQgdG8gY2hlY2sgaWYgdGhlcmUgYXJlIGFueSBvdGhlciByZWxhdGVkIGNvbmZpZ3VyYXRpb25zIHRoYXQgbWF5IGJlIHJlbGV2YW50IG9yIGFkZCBhZGRpdGlvbmFsIGZ1bmN0aW9uYWxpdHkgdGhhdCBzaG91bGQgYmUgZW5hYmxlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTI6MzU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFJVTlRJTUVfVEVTVElOR19NRU5VJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2xpYi9LY29uZmlnLmRlYnVnPTIyNTY9Y29uZmlnIEtDT1ZfU0VMRlRFU1Rcbi0tXG5saWIvS2NvbmZpZy5kZWJ1Zy0yMjYzLVxubGliL0tjb25maWcuZGVidWc6MjI2NDptZW51Y29uZmlnIFJVTlRJTUVfVEVTVElOR19NRU5VXG5saWIvS2NvbmZpZy5kZWJ1Zy0yMjY1LVx0Ym9vbCBcJiMzNDtSdW50aW1lIFRlc3RpbmdcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTI6MzU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTExMjEKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiA2NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duIG1lbnRhbCBwcm9jZXNzOgoKKipFbmFibGluZyBSdW50aW1lIFRlc3RpbmcgYW5kIFJldmlzaXRpbmcgRGVwZW5kZW5jaWVzKioKCkFscmlnaHQsIHRoZSBzeXN0ZW0gY29uZmlndXJhdGlvbiAoYG1lbnVjb25maWdgKSBpbmNsdWRlcyBzb21ldGhpbmcgY2FsbGVkIGBSVU5USU1FX1RFU1RJTkdfTUVOVWAuIEkgaW1tZWRpYXRlbHkgcmVjb2duaXplIHRoYXQgdGhpcyBzb3VuZHMgbGlrZSBzb21ldGhpbmcgd2Ugc2hvdWxkIGVuYWJsZS4gTXkgZXhwZXJpZW5jZSB3aXRoIHN5emthbGxlciBzZXR1cHMgc3VnZ2VzdHMgaXQmIzM5O3MgdXN1YWxseSBwYXJ0IG9mIHRoZSBwaWN0dXJlLiBIb3dldmVyLCBpdCYjMzk7cyB3b3J0aCBkb3VibGUtY2hlY2tpbmcuIEl0JiMzOTtzIGJlc3QgdG8gaW5jbHVkZSBpdCB1bmxlc3MgdGhlcmUmIzM5O3MgYW4gb3ZlcndoZWxtaW5nIHJlYXNvbiBub3QgdG8uIEJldHRlciBzYWZlIHRoYW4gc29ycnkgd2hlbiBpdCBjb21lcyB0byBydW50aW1lIHRlc3RpbmcgY2FwYWJpbGl0aWVzLCByaWdodD8KCk5vdywgbGV0IG1lIGp1c3QgcXVpY2tseSByZXZpc2l0IHRoZSBkZXBlbmRlbmNpZXMgZm9yIGBWRFBBX1NJTWAuIEkgd2FudCB0byBtYWtlIHN1cmUgSSBoYXZlbiYjMzk7dCBtaXNzZWQgYW55dGhpbmcgb3IgdGhhdCB0aGVyZSBhcmVuJiMzOTt0IGFueSBwb3RlbnRpYWwgY29uZmxpY3RzIGFmdGVyIGVuYWJsaW5nIHRoYXQgbWVudS4gQWx3YXlzIGdvb2QgdG8gZG91YmxlLWNoZWNrIHRoZXNlIHRoaW5ncywgZXNwZWNpYWxseSB3aGVuIG1ha2luZyBjb25maWd1cmF0aW9uIGNoYW5nZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDEyOjM2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy92ZHBhL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDEwOlx0aWYgVkRQQVxuICAxMTpcdFxuICAxMjpcdGNvbmZpZyBWRFBBX1NJTVxuICAxMzpcdFx0dHJpc3RhdGUgXCYjMzQ7dkRQQSBkZXZpY2Ugc2ltdWxhdG9yIGNvcmVcJiMzNDtcbiAgMTQ6XHRcdGRlcGVuZHMgb24gUlVOVElNRV9URVNUSU5HX01FTlVcbiAgMTU6XHRcdHNlbGVjdCBWSE9TVF9SSU5HXG4gIDE2Olx0XHRzZWxlY3QgSU9NTVVfSU9WQVxuICAxNzpcdFx0aGVscFxuICAxODpcdFx0ICBFbmFibGUgdGhpcyBtb2R1bGUgdG8gc3VwcG9ydCB2RFBBIGRldmljZSBzaW11bGF0b3JzLiBUaGVzZSBkZXZpY2VzXG4gIDE5Olx0XHQgIGFyZSB1c2VkIGZvciB0ZXN0aW5nLCBwcm90b3R5cGluZyBhbmQgZGV2ZWxvcG1lbnQgb2YgdkRQQS5cbiAgMjA6XHRcbiAgMjE6XHRjb25maWcgVkRQQV9TSU1fTkVUXG4gIDIyOlx0XHR0cmlzdGF0ZSBcJiMzNDt2RFBBIHNpbXVsYXRvciBmb3IgbmV0d29ya2luZyBkZXZpY2VcJiMzNDtcbiAgMjM6XHRcdGRlcGVuZHMgb24gVkRQQV9TSU1cbiAgMjQ6XHRcdHNlbGVjdCBHRU5FUklDX05FVF9VVElMU1xuICAyNTpcdFx0aGVscFxuICAyNjpcdFx0ICB2RFBBIG5ldHdvcmtpbmcgZGV2aWNlIHNpbXVsYXRvciB3aGljaCBsb29wcyBUWCB0cmFmZmljIGJhY2sgdG8gUlguXG4gIDI3Olx0XG4gIDI4Olx0Y29uZmlnIFZEUEFfU0lNX0JMT0NLXG4gIDI5Olx0XHR0cmlzdGF0ZSBcJiMzNDt2RFBBIHNpbXVsYXRvciBmb3IgYmxvY2sgZGV2aWNlXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDEyOjM2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExNjY2CgkJCQkJCQlvdXRwdXQ6IDI1NAoJCQkJCQkJdGhvdWdodHM6IDI2NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSB2aG9zdC12ZHBhIFBhdGNoKioKCk9rYXksIHNvIHdlJiMzOTtyZSBsb29raW5nIGF0IGEgcGF0Y2ggaGVyZSwgYW5kIHRoZSBrZXkgdGhpbmcgSSBzZWUgcmlnaHQgYXdheSBpcyB0aGUgYWRkaXRpb24gb2YgYFJVTlRJTUVfVEVTVElOR19NRU5VYC4gVGhhdCYjMzk7cyBhIHN0cm9uZyBpbmRpY2F0b3IgdGhhdCB0aGlzIHJlcXVpcmVzIHNvbWUgcnVudGltZSBhbmFseXNpcy4KCk5vdywgbGV0JiMzOTtzIGJyZWFrIGRvd24gdGhlIGNvbmZpZ3VyYXRpb24gZWxlbWVudHMgaW52b2x2ZWQuIFdlJiMzOTt2ZSBnb3QgYFZIT1NUX1ZEUEFgLCBgVkRQQWAsIGBWRFBBX1NJTWAsIGBWRFBBX1NJTV9ORVRgLCBgVkRQQV9TSU1fQkxPQ0tgLCBgVkRQQV9VU0VSYCwgYW5kIHRoZSBjcml0aWNhbCBgUlVOVElNRV9URVNUSU5HX01FTlVgLgoKVGhlIHJlYWwgZm9jdXMgcG9pbnRzLCB0aGUgZnVuY3Rpb25zIHRoYXQgYXJlIHByb2JhYmx5IHRoZSBtb3N0IGltcG9ydGFudCB0byBjb25zaWRlciBpbiBkZXRhaWwgYXJlIGB2aG9zdF92ZHBhX3VubG9ja2VkX2lvY3RsYCwgYHZob3N0X3ZkcGFfcmVsZWFzZWAsIGFuZCBgdmhvc3RfdmRwYV9jb25maWdfY2JgLgoKRnJvbSB3aGF0IEkgdW5kZXJzdGFuZCwgdGhpcyBwYXRjaCBpcyBhZGRyZXNzaW5nIGEgcmFjZSBjb25kaXRpb24gd2l0aGluIGBzdHJ1Y3Qgdmhvc3RfdmRwYWAuIEl0IHNlZW1zIGxpa2UgYHZob3N0X3ZkcGFfY29uZmlnX2NiYCBpcyByYWNpbmcgd2l0aCBgdmhvc3RfdmRwYV9zZXRfY29uZmlnX2NhbGxgIGFuZCBgdmhvc3RfdmRwYV9jb25maWdfcHV0YC4gVGhpcyBpcyBpbXBvcnRhbnQsIGJlY2F1c2UgdGhlc2UgZnVuY3Rpb25zIGFyZSBhY2Nlc3NpYmxlIGZyb20gdXNlciBzcGFjZSB2aWEgdGhlIHZob3N0LXZkcGEgY2hhcmRldiBpb2N0bHMgYW5kIHJlbGVhc2Ugb3BlcmF0aW9ucy4gVGhpcyBpcyBhIHZlcnkgaW50ZXJlc3RpbmcgcG9pbnQgYmVjYXVzZSB0aGlzIGlzIHdoZXJlIHRoZSByYWNlIGNvbmRpdGlvbiBpcyBpbnRyb2R1Y2VkIGFuZCB3aGVyZSBpdCBjYW4gYmUgcG90ZW50aWFsbHkgZXhwbG9pdGVkLgoKR2l2ZW4gdGhhdCB2RFBBIGNhbiBiZSB0ZXN0ZWQgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCB3aXRoIHNpbXVsYXRvcnMgbGlrZSBgdmRwYV9zaW1fbmV0YCwgYHZkcGFfc2ltX2Jsa2AsIGFuZCBgdmR1c2VgLCB0aGlzIGZpeCBoYXMgYSBkZW1vbnN0cmFibGUgZnVuY3Rpb25hbCBpbXBhY3QuIEJlY2F1c2Ugb2YgdGhhdCwgZnV6emluZyBpcyBhbiBvYnZpb3VzIG5leHQgc3RlcC4gVGhpcyBwYXRjaCAqbmVlZHMqIGZ1enppbmcgdG8gbWFrZSBzdXJlIGl0IGlzIHJvYnVzdC4KCkkmIzM5O20gcmVhZHkgdG8gbWFyayB0aGlzIG9uZSBkb3duLCBhbmQgbGV0JiMzOTtzIGNhbGwgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTI6MzY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1ZIT1NUX1ZEUEEmIzM0OywKICAgICYjMzQ7VkRQQSYjMzQ7LAogICAgJiMzNDtWRFBBX1NJTSYjMzQ7LAogICAgJiMzNDtWRFBBX1NJTV9ORVQmIzM0OywKICAgICYjMzQ7VkRQQV9TSU1fQkxPQ0smIzM0OywKICAgICYjMzQ7VkRQQV9VU0VSJiMzNDssCiAgICAmIzM0O1JVTlRJTUVfVEVTVElOR19NRU5VJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dmhvc3RfdmRwYV91bmxvY2tlZF9pb2N0bCYjMzQ7LAogICAgJiMzNDt2aG9zdF92ZHBhX3JlbGVhc2UmIzM0OywKICAgICYjMzQ7dmhvc3RfdmRwYV9jb25maWdfY2ImIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBhIHNwaW5sb2NrIHRvIGBzdHJ1Y3Qgdmhvc3RfdmRwYWAgdG8gZml4IGEgcmFjZSBjb25kaXRpb24gYmV0d2VlbiBgdmhvc3RfdmRwYV9jb25maWdfY2JgIGFuZCBgdmhvc3RfdmRwYV9zZXRfY29uZmlnX2NhbGxgIC8gYHZob3N0X3ZkcGFfY29uZmlnX3B1dGAuIFRoZXNlIGZ1bmN0aW9ucyBhcmUgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSB0aGUgdmhvc3QtdmRwYSBjaGFyZGV2IGlvY3RscyBhbmQgcmVsZWFzZSBvcGVyYXRpb25zLiBUaGUgdkRQQSBzdWJzeXN0ZW0gY2FuIGJlIHRlc3RlZCBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50IHVzaW5nIHZEUEEgc2ltdWxhdG9ycyAoYHZkcGFfc2ltX25ldGAsIGB2ZHBhX3NpbV9ibGtgKSBvciBgdmR1c2VgLiBUaGVyZWZvcmUsIHRoZSBjaGFuZ2VzIGhhdmUgYSBmdW5jdGlvbmFsIGltcGFjdCB0aGF0IGlzIHdvcnRoIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1ZIT1NUX1ZEUEEmIzM0OywKICAgICYjMzQ7VkRQQSYjMzQ7LAogICAgJiMzNDtWRFBBX1NJTSYjMzQ7LAogICAgJiMzNDtWRFBBX1NJTV9ORVQmIzM0OywKICAgICYjMzQ7VkRQQV9TSU1fQkxPQ0smIzM0OywKICAgICYjMzQ7VkRQQV9VU0VSJiMzNDssCiAgICAmIzM0O1JVTlRJTUVfVEVTVElOR19NRU5VJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dmhvc3RfdmRwYV91bmxvY2tlZF9pb2N0bCYjMzQ7LAogICAgJiMzNDt2aG9zdF92ZHBhX3JlbGVhc2UmIzM0OywKICAgICYjMzQ7dmhvc3RfdmRwYV9jb25maWdfY2ImIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBhIHNwaW5sb2NrIHRvIGBzdHJ1Y3Qgdmhvc3RfdmRwYWAgdG8gZml4IGEgcmFjZSBjb25kaXRpb24gYmV0d2VlbiBgdmhvc3RfdmRwYV9jb25maWdfY2JgIGFuZCBgdmhvc3RfdmRwYV9zZXRfY29uZmlnX2NhbGxgIC8gYHZob3N0X3ZkcGFfY29uZmlnX3B1dGAuIFRoZXNlIGZ1bmN0aW9ucyBhcmUgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSB0aGUgdmhvc3QtdmRwYSBjaGFyZGV2IGlvY3RscyBhbmQgcmVsZWFzZSBvcGVyYXRpb25zLiBUaGUgdkRQQSBzdWJzeXN0ZW0gY2FuIGJlIHRlc3RlZCBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50IHVzaW5nIHZEUEEgc2ltdWxhdG9ycyAoYHZkcGFfc2ltX25ldGAsIGB2ZHBhX3NpbV9ibGtgKSBvciBgdmR1c2VgLiBUaGVyZWZvcmUsIHRoZSBjaGFuZ2VzIGhhdmUgYSBmdW5jdGlvbmFsIGltcGFjdCB0aGF0IGlzIHdvcnRoIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDEyOjM2PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTI6MzY8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcmVzc2VzIGEgY29uY3VycmVuY3kgaXNzdWUgKGxpa2VseSBhIHJhY2UgY29uZGl0aW9uIG9yIHVzZS1hZnRlci1mcmVlKSBieSBhZGRpbmcgYSBzcGlubG9jayAoYGNvbmZpZ19sb2NrYCkgdG8gc2VyaWFsaXplIGFjY2Vzc2VzIHRvIGB2LVx1MDAzZWNvbmZpZ19jdHhgIGluIGB2aG9zdF92ZHBhX2NvbmZpZ19jYigpYCwgYHZob3N0X3ZkcGFfY29uZmlnX3B1dCgpYCwgYW5kIGB2aG9zdF92ZHBhX3NldF9jb25maWdfY2FsbCgpYC4gVGhlc2UgY2hhbmdlcyBkbyBub3QgaW50cm9kdWNlIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MsIGluZm8tbGVha3MsIG9yIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmUgYWxsb2NhdGlvbnMgdGhhdCB3b3VsZCByZXF1aXJlIEtNU0FOLiBUaGUgYnVnIGJlaW5nIGZpeGVkIGFuZCBhbnkgcG90ZW50aWFsIHJlZ3Jlc3Npb25zIHdvdWxkIGJlIHJlbGF0ZWQgdG8gbG9ja2luZywgcmFjZSBjb25kaXRpb25zLCBvciB1c2UtYWZ0ZXItZnJlZSwgd2hpY2ggYXJlIGVmZmVjdGl2ZWx5IGNhdWdodCBieSBLQVNBTiwgS0NTQU4sIGFuZCBMT0NLREVQLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA5MjhlZWUyMDRhZTdiM2FiNzg3NmE3M2M3MDMxMzg1ODI2YjViNjI0CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIEZyaSBBdWcgNyAxMjozNTowMyAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmhvc3QvdmRwYS5jIGIvZHJpdmVycy92aG9zdC92ZHBhLmMKaW5kZXggYWM1NTI3NWZhMGQwYS4uMjcyZDUwNmQ4MzFjOCAxMDA2NDQKLS0tIGEvZHJpdmVycy92aG9zdC92ZHBhLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy92aG9zdC92ZHBhLmMKQEAgLTU2LDYgJiM0Mzs1Niw4IEBAIHN0cnVjdCB2aG9zdF92ZHBhIHsKIAlpbnQgdmlydGlvX2lkOwogCWludCBtaW5vcjsKIAlzdHJ1Y3QgZXZlbnRmZF9jdHggKmNvbmZpZ19jdHg7CiYjNDM7CS8qIFNlcmlhbGlzZXMgdmhvc3RfdmRwYV9jb25maWdfY2IoKSBhZ2FpbnN0IGNvbmZpZ19jdHggYmVpbmcgcmVwbGFjZWQuICovCiYjNDM7CXNwaW5sb2NrX3QgY29uZmlnX2xvY2s7CiAJaW50IGluX2JhdGNoOwogCXN0cnVjdCB2ZHBhX2lvdmFfcmFuZ2UgcmFuZ2U7CiAJdTMyIGJhdGNoX2FzaWQ7CkBAIC0xODcsMTAgJiM0MzsxODksMTIgQEAgc3RhdGljIGlycXJldHVybl90IHZob3N0X3ZkcGFfdmlydHF1ZXVlX2NiKHZvaWQgKnByaXZhdGUpCiBzdGF0aWMgaXJxcmV0dXJuX3Qgdmhvc3RfdmRwYV9jb25maWdfY2Iodm9pZCAqcHJpdmF0ZSkKIHsKIAlzdHJ1Y3Qgdmhvc3RfdmRwYSAqdiA9IHByaXZhdGU7Ci0Jc3RydWN0IGV2ZW50ZmRfY3R4ICpjb25maWdfY3R4ID0gdi0mZ3Q7Y29uZmlnX2N0eDsKJiM0MzsJdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCWlmIChjb25maWdfY3R4KQotCQlldmVudGZkX3NpZ25hbChjb25maWdfY3R4KTsKJiM0MzsJc3Bpbl9sb2NrX2lycXNhdmUoJmFtcDt2LSZndDtjb25maWdfbG9jaywgZmxhZ3MpOwomIzQzOwlpZiAodi0mZ3Q7Y29uZmlnX2N0eCkKJiM0MzsJCWV2ZW50ZmRfc2lnbmFsKHYtJmd0O2NvbmZpZ19jdHgpOwomIzQzOwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhbXA7di0mZ3Q7Y29uZmlnX2xvY2ssIGZsYWdzKTsKIAogCXJldHVybiBJUlFfSEFORExFRDsKIH0KQEAgLTUxMSwxNSAmIzQzOzUxNSwyMiBAQCBzdGF0aWMgbG9uZyB2aG9zdF92ZHBhX2dldF92cmluZ19udW0oc3RydWN0IHZob3N0X3ZkcGEgKnYsIHUxNiBfX3VzZXIgKmFyZ3ApCiAKIHN0YXRpYyB2b2lkIHZob3N0X3ZkcGFfY29uZmlnX3B1dChzdHJ1Y3Qgdmhvc3RfdmRwYSAqdikKIHsKLQlpZiAodi0mZ3Q7Y29uZmlnX2N0eCkgewotCQlldmVudGZkX2N0eF9wdXQodi0mZ3Q7Y29uZmlnX2N0eCk7Ci0JCXYtJmd0O2NvbmZpZ19jdHggPSBOVUxMOwotCX0KJiM0MzsJc3RydWN0IGV2ZW50ZmRfY3R4ICpjdHg7CiYjNDM7CXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiYjNDM7CiYjNDM7CXNwaW5fbG9ja19pcnFzYXZlKCZhbXA7di0mZ3Q7Y29uZmlnX2xvY2ssIGZsYWdzKTsKJiM0MzsJY3R4ID0gdi0mZ3Q7Y29uZmlnX2N0eDsKJiM0MzsJdi0mZ3Q7Y29uZmlnX2N0eCA9IE5VTEw7CiYjNDM7CXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFtcDt2LSZndDtjb25maWdfbG9jaywgZmxhZ3MpOwomIzQzOwomIzQzOwlpZiAoY3R4KQomIzQzOwkJZXZlbnRmZF9jdHhfcHV0KGN0eCk7CiB9CiAKIHN0YXRpYyBsb25nIHZob3N0X3ZkcGFfc2V0X2NvbmZpZ19jYWxsKHN0cnVjdCB2aG9zdF92ZHBhICp2LCB1MzIgX191c2VyICphcmdwKQogewogCXN0cnVjdCB2ZHBhX2NhbGxiYWNrIGNiOwomIzQzOwl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWludCBmZDsKIAlzdHJ1Y3QgZXZlbnRmZF9jdHggKmN0eDsKIApAQCAtNTI5LDE4ICYjNDM7NTQwLDIwIEBAIHN0YXRpYyBsb25nIHZob3N0X3ZkcGFfc2V0X2NvbmZpZ19jYWxsKHN0cnVjdCB2aG9zdF92ZHBhICp2LCB1MzIgX191c2VyICphcmdwKQogCQlyZXR1cm4gIC1FRkFVTFQ7CiAKIAljdHggPSBmZCA9PSBWSE9TVF9GSUxFX1VOQklORCA/IE5VTEwgOiBldmVudGZkX2N0eF9mZGdldChmZCk7CiYjNDM7CWlmIChJU19FUlIoY3R4KSkKJiM0MzsJCXJldHVybiBQVFJfRVJSKGN0eCk7CiYjNDM7CiYjNDM7CXNwaW5fbG9ja19pcnFzYXZlKCZhbXA7di0mZ3Q7Y29uZmlnX2xvY2ssIGZsYWdzKTsKIAlzd2FwKGN0eCwgdi0mZ3Q7Y29uZmlnX2N0eCk7CiYjNDM7CXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFtcDt2LSZndDtjb25maWdfbG9jaywgZmxhZ3MpOwogCi0JaWYgKCFJU19FUlJfT1JfTlVMTChjdHgpKQomIzQzOwkvKgomIzQzOwkgKiBUaGUgY2FsbGJhY2sgY2FuIG5vIGxvbmdlciByZWFjaCB0aGUgb2xkIGNvbnRleHQsIHNvIHRoaXMgaXMgdGhlCiYjNDM7CSAqIGxhc3QgcmVmZXJlbmNlIHRvIGl0LgomIzQzOwkgKi8KJiM0MzsJaWYgKGN0eCkKIAkJZXZlbnRmZF9jdHhfcHV0KGN0eCk7CiAKLQlpZiAoSVNfRVJSKHYtJmd0O2NvbmZpZ19jdHgpKSB7Ci0JCWxvbmcgcmV0ID0gUFRSX0VSUih2LSZndDtjb25maWdfY3R4KTsKLQotCQl2LSZndDtjb25maWdfY3R4ID0gTlVMTDsKLQkJcmV0dXJuIHJldDsKLQl9Ci0KIAl2LSZndDt2ZHBhLSZndDtjb25maWctJmd0O3NldF9jb25maWdfY2Iodi0mZ3Q7dmRwYSwgJmFtcDtjYik7CiAKIAlyZXR1cm4gMDsKQEAgLTE1OTksNiAmIzQzOzE2MTIsNyBAQCBzdGF0aWMgaW50IHZob3N0X3ZkcGFfcHJvYmUoc3RydWN0IHZkcGFfZGV2aWNlICp2ZHBhKQogCX0KIAogCWF0b21pY19zZXQoJmFtcDt2LSZndDtvcGVuZWQsIDApOwomIzQzOwlzcGluX2xvY2tfaW5pdCgmYW1wO3YtJmd0O2NvbmZpZ19sb2NrKTsKIAl2LSZndDttaW5vciA9IG1pbm9yOwogCXYtJmd0O3ZkcGEgPSB2ZHBhOwogCXYtJmd0O252cXMgPSB2ZHBhLSZndDtudnFzOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTI6MzY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjkwMQoJCQkJCQkJb3V0cHV0OiAxNzUKCQkJCQkJCXRob3VnaHRzOiAyODYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSB2aG9zdC12ZHBhIENvbmZpZ3VyYXRpb24gTG9jayBQYXRjaCoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGludHJvZHVjZXMgYSBzcGlubG9jaywgYGNvbmZpZ19sb2NrYCwgdG8gdGhlIGB2aG9zdF92ZHBhYCBzdHJ1Y3R1cmUuIFRoZSBwdXJwb3NlIGlzIHRvIHNlcmlhbGl6ZSBhY2Nlc3MgdG8gdGhlIGBjb25maWdfY3R4YCB3aXRoaW4gYHZob3N0X3ZkcGFfY29uZmlnX2NiKClgIGFuZCBwcmV2ZW50IGlzc3VlcyB3aGVuIGBjb25maWdfY3R4YCBpcyByZXBsYWNlZC4gVGhlIGNoYW5nZXMgcHJpbWFyaWx5IGZvY3VzIG9uIG1vZGlmeWluZyBgdmhvc3RfdmRwYV9jb25maWdfY2JgLCBgdmhvc3RfdmRwYV9jb25maWdfcHV0YCwgYHZob3N0X3ZkcGFfc2V0X2NvbmZpZ19jYWxsYCwgYW5kIGB2aG9zdF92ZHBhX3Byb2JlYCB0byBjb3JyZWN0bHkgdXRpbGl6ZSB0aGlzIG5ldyBsb2NraW5nIG1lY2hhbmlzbS4KCkZyb20gbXkgdW5kZXJzdGFuZGluZywgdGhpcyBpcyBhIGNsZWFuIGZpeC4gVGhlcmUgYXJlIG5vIGNoYW5nZXMgdGhhdCBpbnRyb2R1Y2UgbmV3IHVzZXItc3BhY2UgZGF0YSwgbm8gaW5mbyBsZWFrcywgYW5kIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIGNvbmNlcm5zLiBUaGUgcHJvYmxlbSBiZWluZyBhZGRyZXNzZWQgaXMgYWxtb3N0IGNlcnRhaW5seSBhIHVzZS1hZnRlci1mcmVlIG9yIHJhY2UgY29uZGl0aW9uLCB3aGljaCBpcyBwcm9iYWJseSBiZWluZyBmbGFnZ2VkIGJ5IEtBU0FOIG9yIEtDU0FOLiBUaGVyZWZvcmUsIEkgZG9uJiMzOTt0IHNlZSBhbnkgcmVhc29uIHRvIGJyaW5nIEtNU0FOIGludG8gdGhlIHBpY3R1cmUgaGVyZS4KCkxldCBtZSBqdXN0IHF1aWNrbHkgdmVyaWZ5IG15IHVuZGVyc3RhbmRpbmcuIGB2aG9zdF92ZHBhX3NldF9jb25maWdfY2FsbGAgYXBwZWFycyB0byBiZSBnZXR0aW5nIGFuIGBmZGAgZnJvbSB1c2Vyc3BhY2UsIGdldHRpbmcgdGhlIGV2ZW50ZmQgY29udGV4dCwgYW5kIHRoZW4gc3dhcHBpbmcgdGhhdCBjb250ZXh0IHdpdGggYHYtJmd0O2NvbmZpZ19jdHhgLiBUaGUgYWRkZWQgc3BpbmxvY2sgaXMgc3BlY2lmaWNhbGx5IG1lYW50IHRvIHByb3RlY3QgdGhpcyBzd2FwIG9wZXJhdGlvbiBhbmQgdGhlIHN1YnNlcXVlbnQgY2hlY2sgb2YgYHYtJmd0O2NvbmZpZ19jdHhgIHdpdGhpbiBgdmhvc3RfdmRwYV9jb25maWdfY2JgLiBZZXMsIHRoaXMgbG9va3MgbGlrZSBhIHN0cmFpZ2h0Zm9yd2FyZCBjb25jdXJyZW5jeSBpc3N1ZSByZXNvbHV0aW9uLgoKVGhlcmVmb3JlLCBJJiMzOTttIGNvbmZpZGVudCB0aGF0IGBOZWVkc0tNU0FOPWZhbHNlYCBpcyB0aGUgY29ycmVjdCBzZXR0aW5nLiBJJiMzOTtsbCBwcm9jZWVkIHdpdGggdGhhdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTI6MzY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcmVzc2VzIGEgY29uY3VycmVuY3kgaXNzdWUgKGxpa2VseSBhIHJhY2UgY29uZGl0aW9uIG9yIHVzZS1hZnRlci1mcmVlKSBieSBhZGRpbmcgYSBzcGlubG9jayAoYGNvbmZpZ19sb2NrYCkgdG8gc2VyaWFsaXplIGFjY2Vzc2VzIHRvIGB2LVx1MDAzZWNvbmZpZ19jdHhgIGluIGB2aG9zdF92ZHBhX2NvbmZpZ19jYigpYCwgYHZob3N0X3ZkcGFfY29uZmlnX3B1dCgpYCwgYW5kIGB2aG9zdF92ZHBhX3NldF9jb25maWdfY2FsbCgpYC4gVGhlc2UgY2hhbmdlcyBkbyBub3QgaW50cm9kdWNlIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MsIGluZm8tbGVha3MsIG9yIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmUgYWxsb2NhdGlvbnMgdGhhdCB3b3VsZCByZXF1aXJlIEtNU0FOLiBUaGUgYnVnIGJlaW5nIGZpeGVkIGFuZCBhbnkgcG90ZW50aWFsIHJlZ3Jlc3Npb25zIHdvdWxkIGJlIHJlbGF0ZWQgdG8gbG9ja2luZywgcmFjZSBjb25kaXRpb25zLCBvciB1c2UtYWZ0ZXItZnJlZSwgd2hpY2ggYXJlIGVmZmVjdGl2ZWx5IGNhdWdodCBieSBLQVNBTiwgS0NTQU4sIGFuZCBMT0NLREVQLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcmVzc2VzIGEgY29uY3VycmVuY3kgaXNzdWUgKGxpa2VseSBhIHJhY2UgY29uZGl0aW9uIG9yIHVzZS1hZnRlci1mcmVlKSBieSBhZGRpbmcgYSBzcGlubG9jayAoYGNvbmZpZ19sb2NrYCkgdG8gc2VyaWFsaXplIGFjY2Vzc2VzIHRvIGB2LVx1MDAzZWNvbmZpZ19jdHhgIGluIGB2aG9zdF92ZHBhX2NvbmZpZ19jYigpYCwgYHZob3N0X3ZkcGFfY29uZmlnX3B1dCgpYCwgYW5kIGB2aG9zdF92ZHBhX3NldF9jb25maWdfY2FsbCgpYC4gVGhlc2UgY2hhbmdlcyBkbyBub3QgaW50cm9kdWNlIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MsIGluZm8tbGVha3MsIG9yIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmUgYWxsb2NhdGlvbnMgdGhhdCB3b3VsZCByZXF1aXJlIEtNU0FOLiBUaGUgYnVnIGJlaW5nIGZpeGVkIGFuZCBhbnkgcG90ZW50aWFsIHJlZ3Jlc3Npb25zIHdvdWxkIGJlIHJlbGF0ZWQgdG8gbG9ja2luZywgcmFjZSBjb25kaXRpb25zLCBvciB1c2UtYWZ0ZXItZnJlZSwgd2hpY2ggYXJlIGVmZmVjdGl2ZWx5IGNhdWdodCBieSBLQVNBTiwgS0NTQU4sIGFuZCBMT0NLREVQLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxMjozNTowNS4xNzM0NDU2ODlaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MjI1NTM1OTIxNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJWSE9TVF9WRFBBXCIsXG4gICAgXCJWRFBBXCIsXG4gICAgXCJWRFBBX1NJTVwiLFxuICAgIFwiVkRQQV9TSU1fTkVUXCIsXG4gICAgXCJWRFBBX1NJTV9CTE9DS1wiLFxuICAgIFwiVkRQQV9VU0VSXCIsXG4gICAgXCJSVU5USU1FX1RFU1RJTkdfTUVOVVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInZob3N0X3ZkcGFfdW5sb2NrZWRfaW9jdGxcIixcbiAgICBcInZob3N0X3ZkcGFfcmVsZWFzZVwiLFxuICAgIFwidmhvc3RfdmRwYV9jb25maWdfY2JcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHJlc3NlcyBhIGNvbmN1cnJlbmN5IGlzc3VlIChsaWtlbHkgYSByYWNlIGNvbmRpdGlvbiBvciB1c2UtYWZ0ZXItZnJlZSkgYnkgYWRkaW5nIGEgc3BpbmxvY2sgKGBjb25maWdfbG9ja2ApIHRvIHNlcmlhbGl6ZSBhY2Nlc3NlcyB0byBgdi1cXHUwMDNlY29uZmlnX2N0eGAgaW4gYHZob3N0X3ZkcGFfY29uZmlnX2NiKClgLCBgdmhvc3RfdmRwYV9jb25maWdfcHV0KClgLCBhbmQgYHZob3N0X3ZkcGFfc2V0X2NvbmZpZ19jYWxsKClgLiBUaGVzZSBjaGFuZ2VzIGRvIG5vdCBpbnRyb2R1Y2Ugb3IgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcywgaW5mby1sZWFrcywgb3IgY29tcGxleCBkYXRhIHN0cnVjdHVyZSBhbGxvY2F0aW9ucyB0aGF0IHdvdWxkIHJlcXVpcmUgS01TQU4uIFRoZSBidWcgYmVpbmcgZml4ZWQgYW5kIGFueSBwb3RlbnRpYWwgcmVncmVzc2lvbnMgd291bGQgYmUgcmVsYXRlZCB0byBsb2NraW5nLCByYWNlIGNvbmRpdGlvbnMsIG9yIHVzZS1hZnRlci1mcmVlLCB3aGljaCBhcmUgZWZmZWN0aXZlbHkgY2F1Z2h0IGJ5IEtBU0FOLCBLQ1NBTiwgYW5kIExPQ0tERVAuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhIHNwaW5sb2NrIHRvIGBzdHJ1Y3Qgdmhvc3RfdmRwYWAgdG8gZml4IGEgcmFjZSBjb25kaXRpb24gYmV0d2VlbiBgdmhvc3RfdmRwYV9jb25maWdfY2JgIGFuZCBgdmhvc3RfdmRwYV9zZXRfY29uZmlnX2NhbGxgIC8gYHZob3N0X3ZkcGFfY29uZmlnX3B1dGAuIFRoZXNlIGZ1bmN0aW9ucyBhcmUgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSB0aGUgdmhvc3QtdmRwYSBjaGFyZGV2IGlvY3RscyBhbmQgcmVsZWFzZSBvcGVyYXRpb25zLiBUaGUgdkRQQSBzdWJzeXN0ZW0gY2FuIGJlIHRlc3RlZCBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50IHVzaW5nIHZEUEEgc2ltdWxhdG9ycyAoYHZkcGFfc2ltX25ldGAsIGB2ZHBhX3NpbV9ibGtgKSBvciBgdmR1c2VgLiBUaGVyZWZvcmUsIHRoZSBjaGFuZ2VzIGhhdmUgYSBmdW5jdGlvbmFsIGltcGFjdCB0aGF0IGlzIHdvcnRoIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDEyOjM1OjA1LjE3MzQ1MTUzOVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTI1ODE4ODE1MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDkyOGVlZTIwNGFlN2IzYWI3ODc2YTczYzcwMzEzODU4MjZiNWI2MjRcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIEZyaSBBdWcgNyAxMjozNTowMyAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL3Zob3N0L3ZkcGEuYyBiL2RyaXZlcnMvdmhvc3QvdmRwYS5jXFxuaW5kZXggYWM1NTI3NWZhMGQwYS4uMjcyZDUwNmQ4MzFjOCAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL3Zob3N0L3ZkcGEuY1xcbisrKyBiL2RyaXZlcnMvdmhvc3QvdmRwYS5jXFxuQEAgLTU2LDYgKzU2LDggQEAgc3RydWN0IHZob3N0X3ZkcGEge1xcbiBcXHRpbnQgdmlydGlvX2lkO1xcbiBcXHRpbnQgbWlub3I7XFxuIFxcdHN0cnVjdCBldmVudGZkX2N0eCAqY29uZmlnX2N0eDtcXG4rXFx0LyogU2VyaWFsaXNlcyB2aG9zdF92ZHBhX2NvbmZpZ19jYigpIGFnYWluc3QgY29uZmlnX2N0eCBiZWluZyByZXBsYWNlZC4gKi9cXG4rXFx0c3BpbmxvY2tfdCBjb25maWdfbG9jaztcXG4gXFx0aW50IGluX2JhdGNoO1xcbiBcXHRzdHJ1Y3QgdmRwYV9pb3ZhX3JhbmdlIHJhbmdlO1xcbiBcXHR1MzIgYmF0Y2hfYXNpZDtcXG5AQCAtMTg3LDEwICsxODksMTIgQEAgc3RhdGljIGlycXJldHVybl90IHZob3N0X3ZkcGFfdmlydHF1ZXVlX2NiKHZvaWQgKnByaXZhdGUpXFxuIHN0YXRpYyBpcnFyZXR1cm5fdCB2aG9zdF92ZHBhX2NvbmZpZ19jYih2b2lkICpwcml2YXRlKVxcbiB7XFxuIFxcdHN0cnVjdCB2aG9zdF92ZHBhICp2ID0gcHJpdmF0ZTtcXG4tXFx0c3RydWN0IGV2ZW50ZmRfY3R4ICpjb25maWdfY3R4ID0gdi1cXHUwMDNlY29uZmlnX2N0eDtcXG4rXFx0dW5zaWduZWQgbG9uZyBmbGFncztcXG4gXFxuLVxcdGlmIChjb25maWdfY3R4KVxcbi1cXHRcXHRldmVudGZkX3NpZ25hbChjb25maWdfY3R4KTtcXG4rXFx0c3Bpbl9sb2NrX2lycXNhdmUoXFx1MDAyNnYtXFx1MDAzZWNvbmZpZ19sb2NrLCBmbGFncyk7XFxuK1xcdGlmICh2LVxcdTAwM2Vjb25maWdfY3R4KVxcbitcXHRcXHRldmVudGZkX3NpZ25hbCh2LVxcdTAwM2Vjb25maWdfY3R4KTtcXG4rXFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcXHUwMDI2di1cXHUwMDNlY29uZmlnX2xvY2ssIGZsYWdzKTtcXG4gXFxuIFxcdHJldHVybiBJUlFfSEFORExFRDtcXG4gfVxcbkBAIC01MTEsMTUgKzUxNSwyMiBAQCBzdGF0aWMgbG9uZyB2aG9zdF92ZHBhX2dldF92cmluZ19udW0oc3RydWN0IHZob3N0X3ZkcGEgKnYsIHUxNiBfX3VzZXIgKmFyZ3ApXFxuIFxcbiBzdGF0aWMgdm9pZCB2aG9zdF92ZHBhX2NvbmZpZ19wdXQoc3RydWN0IHZob3N0X3ZkcGEgKnYpXFxuIHtcXG4tXFx0aWYgKHYtXFx1MDAzZWNvbmZpZ19jdHgpIHtcXG4tXFx0XFx0ZXZlbnRmZF9jdHhfcHV0KHYtXFx1MDAzZWNvbmZpZ19jdHgpO1xcbi1cXHRcXHR2LVxcdTAwM2Vjb25maWdfY3R4ID0gTlVMTDtcXG4tXFx0fVxcbitcXHRzdHJ1Y3QgZXZlbnRmZF9jdHggKmN0eDtcXG4rXFx0dW5zaWduZWQgbG9uZyBmbGFncztcXG4rXFxuK1xcdHNwaW5fbG9ja19pcnFzYXZlKFxcdTAwMjZ2LVxcdTAwM2Vjb25maWdfbG9jaywgZmxhZ3MpO1xcbitcXHRjdHggPSB2LVxcdTAwM2Vjb25maWdfY3R4O1xcbitcXHR2LVxcdTAwM2Vjb25maWdfY3R4ID0gTlVMTDtcXG4rXFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcXHUwMDI2di1cXHUwMDNlY29uZmlnX2xvY2ssIGZsYWdzKTtcXG4rXFxuK1xcdGlmIChjdHgpXFxuK1xcdFxcdGV2ZW50ZmRfY3R4X3B1dChjdHgpO1xcbiB9XFxuIFxcbiBzdGF0aWMgbG9uZyB2aG9zdF92ZHBhX3NldF9jb25maWdfY2FsbChzdHJ1Y3Qgdmhvc3RfdmRwYSAqdiwgdTMyIF9fdXNlciAqYXJncClcXG4ge1xcbiBcXHRzdHJ1Y3QgdmRwYV9jYWxsYmFjayBjYjtcXG4rXFx0dW5zaWduZWQgbG9uZyBmbGFncztcXG4gXFx0aW50IGZkO1xcbiBcXHRzdHJ1Y3QgZXZlbnRmZF9jdHggKmN0eDtcXG4gXFxuQEAgLTUyOSwxOCArNTQwLDIwIEBAIHN0YXRpYyBsb25nIHZob3N0X3ZkcGFfc2V0X2NvbmZpZ19jYWxsKHN0cnVjdCB2aG9zdF92ZHBhICp2LCB1MzIgX191c2VyICphcmdwKVxcbiBcXHRcXHRyZXR1cm4gIC1FRkFVTFQ7XFxuIFxcbiBcXHRjdHggPSBmZCA9PSBWSE9TVF9GSUxFX1VOQklORCA/IE5VTEwgOiBldmVudGZkX2N0eF9mZGdldChmZCk7XFxuK1xcdGlmIChJU19FUlIoY3R4KSlcXG4rXFx0XFx0cmV0dXJuIFBUUl9FUlIoY3R4KTtcXG4rXFxuK1xcdHNwaW5fbG9ja19pcnFzYXZlKFxcdTAwMjZ2LVxcdTAwM2Vjb25maWdfbG9jaywgZmxhZ3MpO1xcbiBcXHRzd2FwKGN0eCwgdi1cXHUwMDNlY29uZmlnX2N0eCk7XFxuK1xcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXFx1MDAyNnYtXFx1MDAzZWNvbmZpZ19sb2NrLCBmbGFncyk7XFxuIFxcbi1cXHRpZiAoIUlTX0VSUl9PUl9OVUxMKGN0eCkpXFxuK1xcdC8qXFxuK1xcdCAqIFRoZSBjYWxsYmFjayBjYW4gbm8gbG9uZ2VyIHJlYWNoIHRoZSBvbGQgY29udGV4dCwgc28gdGhpcyBpcyB0aGVcXG4rXFx0ICogbGFzdCByZWZlcmVuY2UgdG8gaXQuXFxuK1xcdCAqL1xcbitcXHRpZiAoY3R4KVxcbiBcXHRcXHRldmVudGZkX2N0eF9wdXQoY3R4KTtcXG4gXFxuLVxcdGlmIChJU19FUlIodi1cXHUwMDNlY29uZmlnX2N0eCkpIHtcXG4tXFx0XFx0bG9uZyByZXQgPSBQVFJfRVJSKHYtXFx1MDAzZWNvbmZpZ19jdHgpO1xcbi1cXG4tXFx0XFx0di1cXHUwMDNlY29uZmlnX2N0eCA9IE5VTEw7XFxuLVxcdFxcdHJldHVybiByZXQ7XFxuLVxcdH1cXG4tXFxuIFxcdHYtXFx1MDAzZXZkcGEtXFx1MDAzZWNvbmZpZy1cXHUwMDNlc2V0X2NvbmZpZ19jYih2LVxcdTAwM2V2ZHBhLCBcXHUwMDI2Y2IpO1xcbiBcXG4gXFx0cmV0dXJuIDA7XFxuQEAgLTE1OTksNiArMTYxMiw3IEBAIHN0YXRpYyBpbnQgdmhvc3RfdmRwYV9wcm9iZShzdHJ1Y3QgdmRwYV9kZXZpY2UgKnZkcGEpXFxuIFxcdH1cXG4gXFxuIFxcdGF0b21pY19zZXQoXFx1MDAyNnYtXFx1MDAzZW9wZW5lZCwgMCk7XFxuK1xcdHNwaW5fbG9ja19pbml0KFxcdTAwMjZ2LVxcdTAwM2Vjb25maWdfbG9jayk7XFxuIFxcdHYtXFx1MDAzZW1pbm9yID0gbWlub3I7XFxuIFxcdHYtXFx1MDAzZXZkcGEgPSB2ZHBhO1xcbiBcXHR2LVxcdTAwM2VudnFzID0gdmRwYS1cXHUwMDNlbnZxcztcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTI6MzU6MDYuNDMyMzI5MTFaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo2MzQ4ODE0MDY1MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJWSE9TVF9WRFBBXCIsXG4gICAgXCJWRFBBXCIsXG4gICAgXCJWRFBBX1NJTVwiLFxuICAgIFwiVkRQQV9TSU1fTkVUXCIsXG4gICAgXCJWRFBBX1NJTV9CTE9DS1wiLFxuICAgIFwiVkRQQV9VU0VSXCIsXG4gICAgXCJSVU5USU1FX1RFU1RJTkdfTUVOVVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInZob3N0X3ZkcGFfdW5sb2NrZWRfaW9jdGxcIixcbiAgICBcInZob3N0X3ZkcGFfcmVsZWFzZVwiLFxuICAgIFwidmhvc3RfdmRwYV9jb25maWdfY2JcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGEgc3BpbmxvY2sgdG8gYHN0cnVjdCB2aG9zdF92ZHBhYCB0byBmaXggYSByYWNlIGNvbmRpdGlvbiBiZXR3ZWVuIGB2aG9zdF92ZHBhX2NvbmZpZ19jYmAgYW5kIGB2aG9zdF92ZHBhX3NldF9jb25maWdfY2FsbGAgLyBgdmhvc3RfdmRwYV9jb25maWdfcHV0YC4gVGhlc2UgZnVuY3Rpb25zIGFyZSByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIHRoZSB2aG9zdC12ZHBhIGNoYXJkZXYgaW9jdGxzIGFuZCByZWxlYXNlIG9wZXJhdGlvbnMuIFRoZSB2RFBBIHN1YnN5c3RlbSBjYW4gYmUgdGVzdGVkIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQgdXNpbmcgdkRQQSBzaW11bGF0b3JzIChgdmRwYV9zaW1fbmV0YCwgYHZkcGFfc2ltX2Jsa2ApIG9yIGB2ZHVzZWAuIFRoZXJlZm9yZSwgdGhlIGNoYW5nZXMgaGF2ZSBhIGZ1bmN0aW9uYWwgaW1wYWN0IHRoYXQgaXMgd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgOTI4ZWVlMjA0YWU3YjNhYjc4NzZhNzNjNzAzMTM4NTgyNmI1YjYyNFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgQXVnIDcgMTI6MzU6MDMgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL3Zob3N0L3ZkcGEuYyBiL2RyaXZlcnMvdmhvc3QvdmRwYS5jXG5pbmRleCBhYzU1Mjc1ZmEwZDBhLi4yNzJkNTA2ZDgzMWM4IDEwMDY0NFxuLS0tIGEvZHJpdmVycy92aG9zdC92ZHBhLmNcbisrKyBiL2RyaXZlcnMvdmhvc3QvdmRwYS5jXG5AQCAtNTYsNiArNTYsOCBAQCBzdHJ1Y3Qgdmhvc3RfdmRwYSB7XG4gXHRpbnQgdmlydGlvX2lkO1xuIFx0aW50IG1pbm9yO1xuIFx0c3RydWN0IGV2ZW50ZmRfY3R4ICpjb25maWdfY3R4O1xuK1x0LyogU2VyaWFsaXNlcyB2aG9zdF92ZHBhX2NvbmZpZ19jYigpIGFnYWluc3QgY29uZmlnX2N0eCBiZWluZyByZXBsYWNlZC4gKi9cbitcdHNwaW5sb2NrX3QgY29uZmlnX2xvY2s7XG4gXHRpbnQgaW5fYmF0Y2g7XG4gXHRzdHJ1Y3QgdmRwYV9pb3ZhX3JhbmdlIHJhbmdlO1xuIFx0dTMyIGJhdGNoX2FzaWQ7XG5AQCAtMTg3LDEwICsxODksMTIgQEAgc3RhdGljIGlycXJldHVybl90IHZob3N0X3ZkcGFfdmlydHF1ZXVlX2NiKHZvaWQgKnByaXZhdGUpXG4gc3RhdGljIGlycXJldHVybl90IHZob3N0X3ZkcGFfY29uZmlnX2NiKHZvaWQgKnByaXZhdGUpXG4ge1xuIFx0c3RydWN0IHZob3N0X3ZkcGEgKnYgPSBwcml2YXRlO1xuLVx0c3RydWN0IGV2ZW50ZmRfY3R4ICpjb25maWdfY3R4ID0gdi1cdTAwM2Vjb25maWdfY3R4O1xuK1x0dW5zaWduZWQgbG9uZyBmbGFncztcbiBcbi1cdGlmIChjb25maWdfY3R4KVxuLVx0XHRldmVudGZkX3NpZ25hbChjb25maWdfY3R4KTtcbitcdHNwaW5fbG9ja19pcnFzYXZlKFx1MDAyNnYtXHUwMDNlY29uZmlnX2xvY2ssIGZsYWdzKTtcbitcdGlmICh2LVx1MDAzZWNvbmZpZ19jdHgpXG4rXHRcdGV2ZW50ZmRfc2lnbmFsKHYtXHUwMDNlY29uZmlnX2N0eCk7XG4rXHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNnYtXHUwMDNlY29uZmlnX2xvY2ssIGZsYWdzKTtcbiBcbiBcdHJldHVybiBJUlFfSEFORExFRDtcbiB9XG5AQCAtNTExLDE1ICs1MTUsMjIgQEAgc3RhdGljIGxvbmcgdmhvc3RfdmRwYV9nZXRfdnJpbmdfbnVtKHN0cnVjdCB2aG9zdF92ZHBhICp2LCB1MTYgX191c2VyICphcmdwKVxuIFxuIHN0YXRpYyB2b2lkIHZob3N0X3ZkcGFfY29uZmlnX3B1dChzdHJ1Y3Qgdmhvc3RfdmRwYSAqdilcbiB7XG4tXHRpZiAodi1cdTAwM2Vjb25maWdfY3R4KSB7XG4tXHRcdGV2ZW50ZmRfY3R4X3B1dCh2LVx1MDAzZWNvbmZpZ19jdHgpO1xuLVx0XHR2LVx1MDAzZWNvbmZpZ19jdHggPSBOVUxMO1xuLVx0fVxuK1x0c3RydWN0IGV2ZW50ZmRfY3R4ICpjdHg7XG4rXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuK1xuK1x0c3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2di1cdTAwM2Vjb25maWdfbG9jaywgZmxhZ3MpO1xuK1x0Y3R4ID0gdi1cdTAwM2Vjb25maWdfY3R4O1xuK1x0di1cdTAwM2Vjb25maWdfY3R4ID0gTlVMTDtcbitcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2di1cdTAwM2Vjb25maWdfbG9jaywgZmxhZ3MpO1xuK1xuK1x0aWYgKGN0eClcbitcdFx0ZXZlbnRmZF9jdHhfcHV0KGN0eCk7XG4gfVxuIFxuIHN0YXRpYyBsb25nIHZob3N0X3ZkcGFfc2V0X2NvbmZpZ19jYWxsKHN0cnVjdCB2aG9zdF92ZHBhICp2LCB1MzIgX191c2VyICphcmdwKVxuIHtcbiBcdHN0cnVjdCB2ZHBhX2NhbGxiYWNrIGNiO1xuK1x0dW5zaWduZWQgbG9uZyBmbGFncztcbiBcdGludCBmZDtcbiBcdHN0cnVjdCBldmVudGZkX2N0eCAqY3R4O1xuIFxuQEAgLTUyOSwxOCArNTQwLDIwIEBAIHN0YXRpYyBsb25nIHZob3N0X3ZkcGFfc2V0X2NvbmZpZ19jYWxsKHN0cnVjdCB2aG9zdF92ZHBhICp2LCB1MzIgX191c2VyICphcmdwKVxuIFx0XHRyZXR1cm4gIC1FRkFVTFQ7XG4gXG4gXHRjdHggPSBmZCA9PSBWSE9TVF9GSUxFX1VOQklORCA/IE5VTEwgOiBldmVudGZkX2N0eF9mZGdldChmZCk7XG4rXHRpZiAoSVNfRVJSKGN0eCkpXG4rXHRcdHJldHVybiBQVFJfRVJSKGN0eCk7XG4rXG4rXHRzcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZ2LVx1MDAzZWNvbmZpZ19sb2NrLCBmbGFncyk7XG4gXHRzd2FwKGN0eCwgdi1cdTAwM2Vjb25maWdfY3R4KTtcbitcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2di1cdTAwM2Vjb25maWdfbG9jaywgZmxhZ3MpO1xuIFxuLVx0aWYgKCFJU19FUlJfT1JfTlVMTChjdHgpKVxuK1x0LypcbitcdCAqIFRoZSBjYWxsYmFjayBjYW4gbm8gbG9uZ2VyIHJlYWNoIHRoZSBvbGQgY29udGV4dCwgc28gdGhpcyBpcyB0aGVcbitcdCAqIGxhc3QgcmVmZXJlbmNlIHRvIGl0LlxuK1x0ICovXG4rXHRpZiAoY3R4KVxuIFx0XHRldmVudGZkX2N0eF9wdXQoY3R4KTtcbiBcbi1cdGlmIChJU19FUlIodi1cdTAwM2Vjb25maWdfY3R4KSkge1xuLVx0XHRsb25nIHJldCA9IFBUUl9FUlIodi1cdTAwM2Vjb25maWdfY3R4KTtcbi1cbi1cdFx0di1cdTAwM2Vjb25maWdfY3R4ID0gTlVMTDtcbi1cdFx0cmV0dXJuIHJldDtcbi1cdH1cbi1cbiBcdHYtXHUwMDNldmRwYS1cdTAwM2Vjb25maWctXHUwMDNlc2V0X2NvbmZpZ19jYih2LVx1MDAzZXZkcGEsIFx1MDAyNmNiKTtcbiBcbiBcdHJldHVybiAwO1xuQEAgLTE1OTksNiArMTYxMiw3IEBAIHN0YXRpYyBpbnQgdmhvc3RfdmRwYV9wcm9iZShzdHJ1Y3QgdmRwYV9kZXZpY2UgKnZkcGEpXG4gXHR9XG4gXG4gXHRhdG9taWNfc2V0KFx1MDAyNnYtXHUwMDNlb3BlbmVkLCAwKTtcbitcdHNwaW5fbG9ja19pbml0KFx1MDAyNnYtXHUwMDNlY29uZmlnX2xvY2spO1xuIFx0di1cdTAwM2VtaW5vciA9IG1pbm9yO1xuIFx0di1cdTAwM2V2ZHBhID0gdmRwYTtcbiBcdHYtXHUwMDNlbnZxcyA9IHZkcGEtXHUwMDNlbnZxcztcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDEyOjM1OjA2LjQzMjMzMDE5WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTY1OTYwMjY1NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIHZob3N0LXZkcGEgUGF0Y2gqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIHRhcmdldGluZyBgZHJpdmVycy92aG9zdC92ZHBhLmNgLiBJIHNlZSB0aGV5J3JlIGludHJvZHVjaW5nIGEgc3BpbmxvY2sgY2FsbGVkIGBjb25maWdfbG9ja2Agd2l0aGluIHRoZSBgc3RydWN0IHZob3N0X3ZkcGFgLiBUaGUgaW50ZW50LCBhcyBJIHVuZGVyc3RhbmQgaXQsIGlzIHRvIHNlcmlhbGl6ZSB0aGUgZXhlY3V0aW9uIG9mIGB2aG9zdF92ZHBhX2NvbmZpZ19jYigpYCB3aXRoIHRoZSBwb3RlbnRpYWwgbW9kaWZpY2F0aW9uIG9mIGB2LVx1MDAzZWNvbmZpZ19jdHhgIHRoYXQgaGFwcGVucyBpbiBgdmhvc3RfdmRwYV9jb25maWdfcHV0KClgIGFuZCBgdmhvc3RfdmRwYV9zZXRfY29uZmlnX2NhbGwoKWAuIEVzc2VudGlhbGx5LCB0aGV5J3JlIGZpeGluZyBhIHJhY2UgY29uZGl0aW9uLiBJdCBzZWVtcyBgY29uZmlnX2N0eGAgd2FzIGdldHRpbmcgZnJlZWQsIGFuZCB0aGVuIHBvdGVudGlhbGx5IHVzZWQgbGF0ZXIsIHdoaWNoIGlzIGEgY2xhc3NpYyBtZW1vcnkgc2FmZXR5IHByb2JsZW0uIEEgc3BpbmxvY2sgaXMgYSBzZW5zaWJsZSBhcHByb2FjaCBoZXJlIHRvIGVuc3VyZSBwcm9wZXIgc3luY2hyb25pemF0aW9uLlxuXG5Ob3csIGxldCBtZSBqdXN0IGNvbmZpcm0gbXkgdW5kZXJzdGFuZGluZy4gU2luY2UgdGhpcyBwYXRjaCBpcyByZWxhdGVkIHRvIHZob3N0LXZkcGEsIGxldCBtZSBtYWtlIHN1cmUgSSB1bmRlcnN0YW5kIHRoZSBjb250ZXh0IGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQuIHZob3N0LXZkcGEsIGFzIEkga25vdywgaXMgYSB2aG9zdCBkcml2ZXIgZm9yIHZEUEEgKHZob3N0IERhdGEgUGF0aCBBY2NlbGVyYXRpb24pLiBJZiBpdCdzIHZEUEEgdGhlbiB0aGUgZGV2aWNlIHdvdWxkIGJlIHNpbXVsYXRlZCBieSBgdmRwYV9zaW1gIChlLmcuLCBgdmRwYV9zaW1fbmV0YCwgYHZkcGFfc2ltX2Jsa2ApLCBzbyB5ZXMsIHRoaXMgc2hvdWxkIGRlZmluaXRlbHkgYmUgcmVhY2hhYmxlLlxuXG5OZXh0LCBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGVyZSB0byBmaW5kIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIHZob3N0LXZkcGEuIEhtbW0sIGlzIGl0IGluIGBkcml2ZXJzL3Zob3N0L0tjb25maWdgIG9yIGBkcml2ZXJzL3ZkcGEvS2NvbmZpZ2A/IEl0J3MgcHJvYmFibHkgaW4gdGhlIGZvcm1lciwgYmVjYXVzZSBgdmhvc3RgIGlzIHRoZSByb290LCBidXQgSSdsbCBoYXZlIHRvIGRvdWJsZS1jaGVjay5cblxuXG4iLCJJbnB1dFRva2VucyI6MjkwNCwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzMiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDEyOjM1OjEyLjA5MTkzNTc3NloiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MTY5MjM3NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgVkhPU1RfVkRQQVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL3Zob3N0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3Zob3N0L0tjb25maWc9NTY9Y29uZmlnIFZIT1NUX1ZTT0NLXFxuLS1cXG5kcml2ZXJzL3Zob3N0L0tjb25maWctNjktXFxuZHJpdmVycy92aG9zdC9LY29uZmlnOjcwOmNvbmZpZyBWSE9TVF9WRFBBXFxuZHJpdmVycy92aG9zdC9LY29uZmlnLTcxLVxcdHRyaXN0YXRlIFxcXCJWaG9zdCBkcml2ZXIgZm9yIHZEUEEtYmFzZWQgYmFja2VuZFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTI6MzU6MTIuMTQzNjMxODgzWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzEyMjY0MjEzNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaXQganVzdCBvY2N1cnJlZCB0byBtZTpcblxuKipJbnZlc3RpZ2F0aW5nIFZIT1NUX1ZEUEEgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgcmVsYXRlZCB0byBWSE9TVF9WRFBBLiBNeSBmaXJzdCBpbnN0aW5jdCBpcyB0byBkaXZlIGludG8gdGhlIEtjb25maWcgZmlsZXMuIFNwZWNpZmljYWxseSwgSSdtIGdvaW5nIHRvIGNoZWNrIHRoZSBgZHJpdmVycy92aG9zdC9LY29uZmlnYCBmaWxlLiBUaGF0J3Mgd2hlcmUgSSBleHBlY3QgdG8gZmluZCB0aGUgcmVsZXZhbnQgZGVmaW5pdGlvbnMgYW5kIGRlcGVuZGVuY2llcyBmb3IgYFZIT1NUX1ZEUEFgLiBJdCdzIHRoZSBsb2dpY2FsIHBsYWNlIHRvIHN0YXJ0IGRpZ2dpbmcgZm9yIHRoZSBrbm9icyBhbmQgbGV2ZXJzIGNvbnRyb2xsaW5nIHRoaXMgZnVuY3Rpb25hbGl0eS4gTGV0J3Mgc2VlIHdoYXQncyBpbiB0aGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzYxMywiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDEyOjM1OjE1LjI2NjI3NzY1WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTkxNDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy92aG9zdC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDY1LFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDY1OlxcdFxcdHZpcnRpb190cmFuc3BvcnQua28gZHJpdmVyIGxvYWRlZCB0byB1c2UgdGhlIHZpcnRpby12c29jayBkZXZpY2UuXFxuICA2NjpcXHRcXG4gIDY3OlxcdFxcdFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGUgd2lsbCBiZSBjYWxsZWRcXG4gIDY4OlxcdFxcdHZob3N0X3Zzb2NrLlxcbiAgNjk6XFx0XFxuICA3MDpcXHRjb25maWcgVkhPU1RfVkRQQVxcbiAgNzE6XFx0XFx0dHJpc3RhdGUgXFxcIlZob3N0IGRyaXZlciBmb3IgdkRQQS1iYXNlZCBiYWNrZW5kXFxcIlxcbiAgNzI6XFx0XFx0ZGVwZW5kcyBvbiBFVkVOVEZEXFxuICA3MzpcXHRcXHRzZWxlY3QgVkhPU1RcXG4gIDc0OlxcdFxcdHNlbGVjdCBJUlFfQllQQVNTX01BTkFHRVJcXG4gIDc1OlxcdFxcdGRlcGVuZHMgb24gVkRQQVxcbiAgNzY6XFx0XFx0aGVscFxcbiAgNzc6XFx0XFx0ICBUaGlzIGtlcm5lbCBtb2R1bGUgY2FuIGJlIGxvYWRlZCBpbiBob3N0IGtlcm5lbCB0byBhY2NlbGVyYXRlXFxuICA3ODpcXHRcXHQgIGd1ZXN0IHZpcnRpbyBkZXZpY2VzIHdpdGggdGhlIHZEUEEtYmFzZWQgYmFja2VuZHMuXFxuICA3OTpcXHRcXG4gIDgwOlxcdFxcdCAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZVxcbiAgODE6XFx0XFx0ICB3aWxsIGJlIGNhbGxlZCB2aG9zdF92ZHBhLlxcbiAgODI6XFx0XFxuICA4MzpcXHRjb25maWcgVkhPU1RfQ1JPU1NfRU5ESUFOX0xFR0FDWVxcbiAgODQ6XFx0XFx0Ym9vbCBcXFwiQ3Jvc3MtZW5kaWFuIHN1cHBvcnQgZm9yIHZob3N0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxMjozNToxNS4yNjYzMzkwNVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI3Njk5NTg0MjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOlxuXG4qKk5hdmlnYXRpbmcgRGVwZW5kZW5jaWVzKipcblxuT2theSwgc28gSSdtIGRlYWxpbmcgd2l0aCBgVkhPU1RfVkRQQWAgYW5kIGl0J3MgcHJldHR5IGNsZWFyIHRoYXQgaXQgaGFzIGEgZGVwZW5kZW5jeSBvbiBgVkRQQWAuIFRoYXQgbWVhbnMgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbmZpZ3VyYXRpb24gcmVsYXRlZCB0byBgVkRQQWAgYmVmb3JlIEkgY2FuIHRydWx5IGdyYXNwIHRoZSBzZXR1cCBmb3IgYFZIT1NUX1ZEUEFgLiBUaW1lIHRvIGRyaWxsIGRvd24gaW50byB0aGUgY29uZmlndXJhdGlvbiBmaWxlcyBhbmQgZG9jdW1lbnRhdGlvbiB0byBsb2NhdGUgYW5kIGRpc3NlY3QgdGhvc2UgYFZEUEFgIHNldHRpbmdzLiBJIG5lZWQgdG8gZmlndXJlIG91dCBob3cgYFZEUEFgIGlzIGNvbmZpZ3VyZWQgYmVmb3JlIEkgY2FuIHByb2NlZWQgd2l0aCB0aGUgcHJpbWFyeSB0YXNrLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MDgzLCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxMjozNToxOC4wMzYzMDAxNzNaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTA5MzM1MDYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFZEUEFcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy92ZHBhL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3ZkcGEvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbmRyaXZlcnMvdmRwYS9LY29uZmlnOjI6bWVudWNvbmZpZyBWRFBBXFxuZHJpdmVycy92ZHBhL0tjb25maWctMy1cXHR0cmlzdGF0ZSBcXFwidkRQQSBkcml2ZXJzXFxcIlxcbi0tXFxuZHJpdmVycy92ZHBhL0tjb25maWc9MTA9aWYgVkRQQVxcbmRyaXZlcnMvdmRwYS9LY29uZmlnLTExLVxcbmRyaXZlcnMvdmRwYS9LY29uZmlnOjEyOmNvbmZpZyBWRFBBX1NJTVxcbmRyaXZlcnMvdmRwYS9LY29uZmlnLTEzLVxcdHRyaXN0YXRlIFxcXCJ2RFBBIGRldmljZSBzaW11bGF0b3IgY29yZVxcXCJcXG4tLVxcbmRyaXZlcnMvdmRwYS9LY29uZmlnLTIwLVxcbmRyaXZlcnMvdmRwYS9LY29uZmlnOjIxOmNvbmZpZyBWRFBBX1NJTV9ORVRcXG5kcml2ZXJzL3ZkcGEvS2NvbmZpZy0yMi1cXHR0cmlzdGF0ZSBcXFwidkRQQSBzaW11bGF0b3IgZm9yIG5ldHdvcmtpbmcgZGV2aWNlXFxcIlxcbi0tXFxuZHJpdmVycy92ZHBhL0tjb25maWctMjctXFxuZHJpdmVycy92ZHBhL0tjb25maWc6Mjg6Y29uZmlnIFZEUEFfU0lNX0JMT0NLXFxuZHJpdmVycy92ZHBhL0tjb25maWctMjktXFx0dHJpc3RhdGUgXFxcInZEUEEgc2ltdWxhdG9yIGZvciBibG9jayBkZXZpY2VcXFwiXFxuLS1cXG5kcml2ZXJzL3ZkcGEvS2NvbmZpZy0zNC1cXG5kcml2ZXJzL3ZkcGEvS2NvbmZpZzozNTpjb25maWcgVkRQQV9VU0VSXFxuZHJpdmVycy92ZHBhL0tjb25maWctMzYtXFx0dHJpc3RhdGUgXFxcIlZEVVNFICh2RFBBIERldmljZSBpbiBVc2Vyc3BhY2UpIHN1cHBvcnRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDEyOjM1OjE4LjA4NzI0MDE4OVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQyNDAyMzYxNzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIGluc3RydWN0aW9ucywgdGhpbmtpbmcgdGhyb3VnaCB0aGVtIGFzIEkgd291bGQgYXBwcm9hY2ggYSBzaW1pbGFyIHNpdHVhdGlvbi5cblxuKipWRFUgYW5kIHRoZSBWaXJ0aW8tdkRQQSBSb2FkIEFoZWFkKipcblxuQWxyaWdodCwgc28gdGhlIGluaXRpYWwgZGlyZWN0aW9uIGlzIGNsZWFyOiBsZXQncyBnZXQgdGhlIGJhbGwgcm9sbGluZyBvbiB2RFBBLiBUaGUgc3VnZ2VzdGlvbiBpcyB0byBlbmFibGUgYFZIT1NUX1ZEUEFgLCBgVkRQQWAsIGBWRFBBX1NJTWAsIGBWRFBBX1NJTV9ORVRgLCBgVkRQQV9TSU1fQkxPQ0tgLCBhbmQgYFZEUEFfVVNFUmAuIFNlZW1zIGxpa2UgYSBzZW5zaWJsZSBzdGFydGluZyBwb2ludCB0byBnZXQgY29tcHJlaGVuc2l2ZSB2RFBBIHN1cHBvcnQgdXAgYW5kIHJ1bm5pbmcuIEnigJltIHRoaW5raW5nIHRoaXMgbG9va3MgbGlrZSBhIGdvb2QgYmFzZSB0byBzdXBwb3J0IGRpZmZlcmVudCB2RFBBIGJhY2tlbmRzLCBhbmQgYWxzbyB0byBzdXBwb3J0IHNpbXVsYXRpb24gZm9yIHRlc3RpbmcuXG5cbkJlZm9yZSBnb2luZyB0b28gZmFyIGRvd24gdGhlIHJhYmJpdCBob2xlLCB0aG91Z2gsIEkga25vdyBJIG5lZWQgdG8gYmUgbWV0aG9kaWNhbC4gVGhlIG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIGRlbHZlIGludG8gdGhlIGBWRFBBX1NJTWAgZGVwZW5kZW5jeSB0cmVlLiBVbmRlcnN0YW5kaW5nIHRoZXNlIGRlcGVuZGVuY2llcyB3aWxsIHRlbGwgbWUgZXZlcnl0aGluZyB0aGF0IG5lZWRzIHRvIGJlIGluIHBsYWNlIGZvciB0aGUgc2ltdWxhdGlvbiBlbnZpcm9ubWVudCB0byBmdW5jdGlvbiwgYW5kIGhlbHAgbWUgc3BvdCBhbnkgcG90ZW50aWFsIGNvbmZsaWN0cyBvciBtaXNzaW5nIHBpZWNlcyBlYXJseSBvbi4gSSdsbCBuZWVkIHRvIGtub3cgd2hpY2ggbGlicmFyaWVzLCBvdGhlciBrZXJuZWwgbW9kdWxlcywgYW5kIGNvbmZpZ3VyYXRpb25zIGl0IHJlbGllcyBvbi4gSSdsbCBuZWVkIHRvIGtub3cgaWYgdGhpcyBzaW11bGF0aW9uIHRvb2wgY2hhaW5zIHByb3Blcmx5IHdpdGggYW55IGV4aXN0aW5nIGFyY2hpdGVjdHVyZSwgb3IgaWYgaXQgY2F1c2VzIGFueSBjb21wYXRpYmlsaXR5IGlzc3Vlcy4gVGhpcyB3aWxsIHNhdmUgbWUgZnJvbSBhIGxvdCBvZiBoZWFkYWNoZXMgbGF0ZXIuIFRoaXMgaXMgZGVmaW5pdGVseSB3aGVyZSBJIHdpbGwgc3RhcnQgbXkgaW52ZXN0aWdhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6NDU3NSwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDEyOjM1OjIyLjMyNzQ3ODg1OFoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NjEwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL3ZkcGEvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbiAgIDI6XFx0bWVudWNvbmZpZyBWRFBBXFxuICAgMzpcXHRcXHR0cmlzdGF0ZSBcXFwidkRQQSBkcml2ZXJzXFxcIlxcbiAgIDQ6XFx0XFx0ZGVwZW5kcyBvbiBORVRcXG4gICA1OlxcdFxcdGhlbHBcXG4gICA2OlxcdFxcdCAgRW5hYmxlIHRoaXMgbW9kdWxlIHRvIHN1cHBvcnQgdkRQQSBkZXZpY2UgdGhhdCB1c2VzIGFcXG4gICA3OlxcdFxcdCAgZGF0YXBhdGggd2hpY2ggY29tcGxpZXMgd2l0aCB2aXJ0aW8gc3BlY2lmaWNhdGlvbnMgd2l0aFxcbiAgIDg6XFx0XFx0ICB2ZW5kb3Igc3BlY2lmaWMgY29udHJvbCBwYXRoLlxcbiAgIDk6XFx0XFxuICAxMDpcXHRpZiBWRFBBXFxuICAxMTpcXHRcXG4gIDEyOlxcdGNvbmZpZyBWRFBBX1NJTVxcbiAgMTM6XFx0XFx0dHJpc3RhdGUgXFxcInZEUEEgZGV2aWNlIHNpbXVsYXRvciBjb3JlXFxcIlxcbiAgMTQ6XFx0XFx0ZGVwZW5kcyBvbiBSVU5USU1FX1RFU1RJTkdfTUVOVVxcbiAgMTU6XFx0XFx0c2VsZWN0IFZIT1NUX1JJTkdcXG4gIDE2OlxcdFxcdHNlbGVjdCBJT01NVV9JT1ZBXFxuICAxNzpcXHRcXHRoZWxwXFxuICAxODpcXHRcXHQgIEVuYWJsZSB0aGlzIG1vZHVsZSB0byBzdXBwb3J0IHZEUEEgZGV2aWNlIHNpbXVsYXRvcnMuIFRoZXNlIGRldmljZXNcXG4gIDE5OlxcdFxcdCAgYXJlIHVzZWQgZm9yIHRlc3RpbmcsIHByb3RvdHlwaW5nIGFuZCBkZXZlbG9wbWVudCBvZiB2RFBBLlxcbiAgMjA6XFx0XFxuICAyMTpcXHRjb25maWcgVkRQQV9TSU1fTkVUXFxuICAyMjpcXHRcXHR0cmlzdGF0ZSBcXFwidkRQQSBzaW11bGF0b3IgZm9yIG5ldHdvcmtpbmcgZGV2aWNlXFxcIlxcbiAgMjM6XFx0XFx0ZGVwZW5kcyBvbiBWRFBBX1NJTVxcbiAgMjQ6XFx0XFx0c2VsZWN0IEdFTkVSSUNfTkVUX1VUSUxTXFxuICAyNTpcXHRcXHRoZWxwXFxuICAyNjpcXHRcXHQgIHZEUEEgbmV0d29ya2luZyBkZXZpY2Ugc2ltdWxhdG9yIHdoaWNoIGxvb3BzIFRYIHRyYWZmaWMgYmFjayB0byBSWC5cXG4gIDI3OlxcdFxcbiAgMjg6XFx0Y29uZmlnIFZEUEFfU0lNX0JMT0NLXFxuICAyOTpcXHRcXHR0cmlzdGF0ZSBcXFwidkRQQSBzaW11bGF0b3IgZm9yIGJsb2NrIGRldmljZVxcXCJcXG4gIDMwOlxcdFxcdGRlcGVuZHMgb24gVkRQQV9TSU1cXG4gIDMxOlxcdFxcdGhlbHBcXG4gIDMyOlxcdFxcdCAgdkRQQSBibG9jayBkZXZpY2Ugc2ltdWxhdG9yIHdoaWNoIHRlcm1pbmF0ZXMgSU8gcmVxdWVzdCBpbiBhXFxuICAzMzpcXHRcXHQgIG1lbW9yeSBidWZmZXIuXFxuICAzNDpcXHRcXG4gIDM1OlxcdGNvbmZpZyBWRFBBX1VTRVJcXG4gIDM2OlxcdFxcdHRyaXN0YXRlIFxcXCJWRFVTRSAodkRQQSBEZXZpY2UgaW4gVXNlcnNwYWNlKSBzdXBwb3J0XFxcIlxcbiAgMzc6XFx0XFx0ZGVwZW5kcyBvbiBFVkVOVEZEIFxcdTAwMjZcXHUwMDI2IE1NVVxcbiAgMzg6XFx0XFx0c2VsZWN0IFZIT1NUX0lPVExCXFxuICAzOTpcXHRcXHRzZWxlY3QgSU9NTVVfSU9WQVxcbiAgNDA6XFx0XFx0aGVscFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxMjozNToyMi4zMjc1NDY2NzhaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDY2OTcyMTM4OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipFbmFibGluZyBWRFBBIFN1cHBvcnQgYW5kIEV4YW1pbmluZyBEcml2ZXIgTW9kaWZpY2F0aW9ucyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgY29uZmlndXJhdGlvbi4gSXQgc2VlbXMgYFZEUEFfU0lNYCByZWxpZXMgZGlyZWN0bHkgb24gYFJVTlRJTUVfVEVTVElOR19NRU5VYC4gVGhhdCdzIGltcG9ydGFudC4gVG8gZW5zdXJlIGEgY29tcHJlaGVuc2l2ZSB0ZXN0IHN1aXRlIGFuZCByb2J1c3QgY29uZmlndXJhdGlvbiwgSSBzaG91bGQgZW5hYmxlIGEgc3VpdGUgb2YgcmVsYXRlZCBmZWF0dXJlczogYFZEUEFgLCBgVkRQQV9TSU1gLCBgVkRQQV9TSU1fTkVUYCwgYFZEUEFfU0lNX0JMT0NLYCwgYFZEUEFfVVNFUmAsIGFuZCBgVkhPU1RfVkRQQWAuIFdlIHdhbnQgdGhlIHdob2xlIGVuY2hpbGFkYSB0byBlbnN1cmUgcHJvcGVyIGNvdmVyYWdlLlxuXG5Ob3csIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGVzZSBzZXR0aW5ncyBpbXBhY3QgdGhlIGB2aG9zdC92ZHBhLmNgIGRyaXZlci4gTGV0J3MgZGlnIGludG8gdGhlIHNwZWNpZmljIGZ1bmN0aW9ucyB0aGF0IGhhdmUgYmVlbiBtb2RpZmllZC4gSSBzZWUgYHZob3N0X3ZkcGFfY29uZmlnX2NiYCwgYHZob3N0X3ZkcGFfY29uZmlnX3B1dGAsIGB2aG9zdF92ZHBhX3NldF9jb25maWdfY2FsbGAsIGFuZCBgdmhvc3RfdmRwYV9wcm9iZWAgYXJlIHRoZSBrZXkgZnVuY3Rpb25zIHRvIGV4YW1pbmUuXG5cbmB2aG9zdF92ZHBhX2NvbmZpZ19jYmAgaW1tZWRpYXRlbHkganVtcHMgb3V0OyBpdCdzIGFuIGludGVycnVwdCBoYW5kbGVyLiBUaGF0IGxpa2VseSBtZWFucyBpdCdzIGNyaXRpY2FsIGZvciByZWFsLXRpbWUgcmVzcG9uc2l2ZW5lc3MgYW5kIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBiZWhhdmlvciB0aG9yb3VnaGx5LlxuXG5gdmhvc3RfdmRwYV9jb25maWdfcHV0YCBpcyB0aGUgbmV4dCBmb2N1cy4gVGhlIGNvZGUgc3VnZ2VzdHMgaXQncyBjYWxsZWQgZnJvbSBgdmhvc3RfdmRwYV9yZWxlYXNlYCBhbmQgcG90ZW50aWFsbHkgYHZob3N0X3ZkcGFfc2V0dXBfdnFfaXJxYC4gSSBzaG91bGQgdmVyaWZ5IHRoYXQgY2FsbCBjaGFpbiBjYXJlZnVsbHkgdG8gdW5kZXJzdGFuZCByZXNvdXJjZSBjbGVhbnVwIGFuZCBjb25maWd1cmF0aW9uLiBJIG5lZWQgdG8gY29uZmlybSB0aG9zZSBkZXBlbmRlbmNpZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU0NTYsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOTUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxMjozNToyNi45OTcyNzAzNjVaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU3NjQyMzg2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInZob3N0X3ZkcGFfY29uZmlnX3B1dFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL3Zob3N0L3ZkcGEuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3Zob3N0L3ZkcGEuYz01MDI9c3RhdGljIGxvbmcgdmhvc3RfdmRwYV9nZXRfdnJpbmdfbnVtKHN0cnVjdCB2aG9zdF92ZHBhICp2LCB1MTYgX191c2VyICphcmdwKVxcbi0tXFxuZHJpdmVycy92aG9zdC92ZHBhLmMtNTE1LVxcbmRyaXZlcnMvdmhvc3QvdmRwYS5jOjUxNjpzdGF0aWMgdm9pZCB2aG9zdF92ZHBhX2NvbmZpZ19wdXQoc3RydWN0IHZob3N0X3ZkcGEgKnYpXFxuZHJpdmVycy92aG9zdC92ZHBhLmMtNTE3LXtcXG4tLVxcbmRyaXZlcnMvdmhvc3QvdmRwYS5jPTE0NzY9c3RhdGljIGludCB2aG9zdF92ZHBhX3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGVwKVxcbi0tXFxuZHJpdmVycy92aG9zdC92ZHBhLmMtMTQ4Ni1cXHR2aG9zdF92ZHBhX3VuYmluZF9tbSh2KTtcXG5kcml2ZXJzL3Zob3N0L3ZkcGEuYzoxNDg3OlxcdHZob3N0X3ZkcGFfY29uZmlnX3B1dCh2KTtcXG5kcml2ZXJzL3Zob3N0L3ZkcGEuYy0xNDg4LVxcdHZob3N0X3ZkcGFfY2xlYW51cCh2KTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTI6MzU6MjcuMDU0OTE2MTAxWiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM4ODY2NjA1ODMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipNeSBDdXJyZW50IERlZHVjdGlvbnMgb24gdmhvc3RfdmRwYV9zZXRfY29uZmlnX2NhbGwqKlxuXG5SaWdodCwgbGV0IG1lIHNlZS4uLnNvIGB2aG9zdF92ZHBhX3NldF9jb25maWdfY2FsbGAgaXMgZGVmaW5pdGVseSBjYWxsZWQgZnJvbSBgdmhvc3RfdmRwYV91bmxvY2tlZF9pb2N0bGAuIFRoYXQgbWVhbnMgdGhlIGBzZXRfY29uZmlnYCBmdW5jdGlvbiBpcyBhY2Nlc3NlZCB2aWEgdGhlIElPQ1RMIGludGVyZmFjZSwgd2hpY2ggaXMgYXMgZXhwZWN0ZWQuIEknbSBub3RpbmcgdGhpcyBzcGVjaWZpY2FsbHkgYmVjYXVzZSBpdCBpbXBsaWVzIGEgZmV3IHRoaW5ncyByaWdodCBvZmYgdGhlIGJhdDogdGhlIGNvbmZpZ3VyYXRpb24gc2V0dGluZyBwcm9iYWJseSBpbnZvbHZlcyBzb21lIHVzZXItc3BhY2UgaW50ZXJhY3Rpb24g4oCTIHN0YW5kYXJkIGZvciBJT0NUTHMsIG9mIGNvdXJzZS4gSXQgYWxzbyBtZWFucyB0aGF0IHRoZXJlJ3MgYSBnb29kIGNoYW5jZSB0aGVyZSB3aWxsIGJlIGxvY2tpbmcgY29uc2lkZXJhdGlvbnMgYW5kIHNlY3VyaXR5IGNoZWNrcyB3aXRoaW4gdGhlIGB2aG9zdF92ZHBhX3VubG9ja2VkX2lvY3RsYCBjb250ZXh0LiBJIHNob3VsZCBwcm9iYWJseSByZS1mYW1pbGlhcml6ZSBteXNlbGYgd2l0aCB0aGUgbG9ja2luZyBzdHJhdGVneSB0aGVyZSBhbmQgdGhlIHBvdGVudGlhbCBmb3IgcmFjZSBjb25kaXRpb25zIGludm9sdmluZyBjb25maWd1cmF0aW9uIGNoYW5nZXMuIE5lZWQgdG8gZG91YmxlIGNoZWNrIGhvdyB0aGUgZGV2aWNlIHN0YXRlIGlzIHByb3RlY3RlZCwgZXNwZWNpYWxseSB3aGVuIGRlYWxpbmcgd2l0aCBwb3RlbnRpYWxseSBjb25jdXJyZW50IHVzZXItc3BhY2UgcmVxdWVzdHMuIEEgcXVpY2sgZGl2ZSBpbnRvIHRoYXQgYXJlYSBzaG91bGQgcmV2ZWFsIHRoZSBwZXJ0aW5lbnQgc3RydWN0dXJlcy4gSSdsbCBhbHNvIHdhbnQgdG8gdW5kZXJzdGFuZCB0aGUgZXhhY3Qgc3RydWN0dXJlIG9mIHRoZSBjb25maWd1cmF0aW9uIGRhdGEgYmVpbmcgcGFzc2VkIGluIHRocm91Z2ggdGhlIElPQ1RMIGFuZCB0aGUgdmFsaWRhdGlvbiB0aGF0J3MgcGVyZm9ybWVkIG9uIGl0LiBBbnkgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdGllcyByZWxhdGVkIHRvIGJ1ZmZlciBvdmVyZmxvd3Mgb3IgZGF0YSBmb3JtYXQgaXNzdWVzIG5lZWQgdG8gYmUgaWRlbnRpZmllZC4gVGhlIGNvbnRleHQgaGVyZSB0ZWxscyBtZSB3aGVyZSB0byBzdGFydCBkaWdnaW5nIGZvciB0aGUga2V5IGFyZWFzIG9mIGNvbmNlcm4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYyNzEsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxMjozNTozMC45NDE1Nzk1NTRaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjcwODE3NDAyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ2aG9zdF92ZHBhX3NldF9jb25maWdfY2FsbFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL3Zob3N0L3ZkcGEuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3Zob3N0L3ZkcGEuYz01MTY9c3RhdGljIHZvaWQgdmhvc3RfdmRwYV9jb25maWdfcHV0KHN0cnVjdCB2aG9zdF92ZHBhICp2KVxcbi0tXFxuZHJpdmVycy92aG9zdC92ZHBhLmMtNTI5LVxcbmRyaXZlcnMvdmhvc3QvdmRwYS5jOjUzMDpzdGF0aWMgbG9uZyB2aG9zdF92ZHBhX3NldF9jb25maWdfY2FsbChzdHJ1Y3Qgdmhvc3RfdmRwYSAqdiwgdTMyIF9fdXNlciAqYXJncClcXG5kcml2ZXJzL3Zob3N0L3ZkcGEuYy01MzEte1xcbi0tXFxuZHJpdmVycy92aG9zdC92ZHBhLmM9Nzg5PXN0YXRpYyBsb25nIHZob3N0X3ZkcGFfdW5sb2NrZWRfaW9jdGwoc3RydWN0IGZpbGUgKmZpbGVwLFxcbi0tXFxuZHJpdmVycy92aG9zdC92ZHBhLmMtODY4LVxcdGNhc2UgVkhPU1RfVkRQQV9TRVRfQ09ORklHX0NBTEw6XFxuZHJpdmVycy92aG9zdC92ZHBhLmM6ODY5OlxcdFxcdHIgPSB2aG9zdF92ZHBhX3NldF9jb25maWdfY2FsbCh2LCBhcmdwKTtcXG5kcml2ZXJzL3Zob3N0L3ZkcGEuYy04NzAtXFx0XFx0YnJlYWs7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDEyOjM1OjMxLjY0OTc1ODg2NFoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MzM0NzEzMTkxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkRpdmluZyBpbnRvIHRoZSBWaG9zdC1WZHBhIENvbmZpZ3VyYXRpb24gUHJvY2VzcyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGhvdyB0aGUgYFZIT1NUX1ZEUEFfU0VUX0NPTkZJR19DQUxMYCBpb2N0bCBpcyBoYW5kbGVkIHdpdGhpbiB0aGUgdmhvc3QtdmRwYSBmcmFtZXdvcmsuIEl0IHNlZW1zIGB2aG9zdF92ZHBhX3NldF9jb25maWdfY2FsbGAgaXMgdGhlIGtleSBmdW5jdGlvbiBoZXJlLCBhY3RpbmcgYXMgdGhlIGlvY3RsIGhhbmRsZXIgZm9yIHRoYXQgcGFydGljdWxhciBjb21tYW5kLiBNeSB1bmRlcnN0YW5kaW5nIGlzIHRoYXQsIHdpdGhpbiB0aGlzLCB0aGUgY3JpdGljYWwgcGllY2UgaXMgdGhlIGB2aG9zdF92ZHBhX2NvbmZpZ19jYmAgY2FsbGJhY2suIFRoaXMgY2FsbGJhY2sgaXMgdGhlbiBhc3NpZ25lZCB0aHJvdWdoIGB2LVx1MDAzZXZkcGEtXHUwMDNlY29uZmlnLVx1MDAzZXNldF9jb25maWdfY2Iodi1cdTAwM2V2ZHBhLCBcdTAwMjZjYik7YCwgc3VnZ2VzdGluZyBpdCBpcyBsaWtlbHkgdGhlIG1lY2hhbmlzbSB0aHJvdWdoIHdoaWNoIHRoZSBhY3R1YWwgY29uZmlndXJhdGlvbiBvcGVyYXRpb25zIGFyZSBwZXJmb3JtZWQuXG5cbkkgcmVhbGx5IG5lZWQgdG8gZHJpbGwgZG93biBpbnRvIHRoZSBkZXRhaWxzIG9mIGB2aG9zdF92ZHBhX3NldF9jb25maWdfY2FsbGAgdG8gdW5kZXJzdGFuZCB0aGUgZGF0YSBmbG93IGFuZCBlbnN1cmUgSSBnZXQgdGhlIG51YW5jZSBvZiBpdHMgd29ya2luZ3MsIHNwZWNpZmljYWxseSB0byB1bmRlcnN0YW5kIHRoZSBzZXR0aW5nIG9mIHRoZSBgY29uZmlnX2NiYC5cblxuVGhlcmVmb3JlLCBJJ20gZ29pbmcgdG8gaGVhZCBkaXJlY3RseSB0byBgZHJpdmVycy92aG9zdC92ZHBhLmNgIHRvIGV4YW1pbmUgYHZob3N0X3ZkcGFfc2V0X2NvbmZpZ19jYWxsYCBjbG9zZWx5LiBUaGlzIHNob3VsZCBpbGx1bWluYXRlIHRoZSBwYXRoIG9mIGNvbmZpZ3VyYXRpb24hXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY4ODEsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTI6MzU6MzUuOTg0NDc0MTk1WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyNjMxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL3Zob3N0L3ZkcGEuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA1MjUsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA1MjU6XFx0XFxuIDUyNjpcXHRcXHRpZiAoY3R4KVxcbiA1Mjc6XFx0XFx0XFx0ZXZlbnRmZF9jdHhfcHV0KGN0eCk7XFxuIDUyODpcXHR9XFxuIDUyOTpcXHRcXG4gNTMwOlxcdHN0YXRpYyBsb25nIHZob3N0X3ZkcGFfc2V0X2NvbmZpZ19jYWxsKHN0cnVjdCB2aG9zdF92ZHBhICp2LCB1MzIgX191c2VyICphcmdwKVxcbiA1MzE6XFx0e1xcbiA1MzI6XFx0XFx0c3RydWN0IHZkcGFfY2FsbGJhY2sgY2I7XFxuIDUzMzpcXHRcXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xcbiA1MzQ6XFx0XFx0aW50IGZkO1xcbiA1MzU6XFx0XFx0c3RydWN0IGV2ZW50ZmRfY3R4ICpjdHg7XFxuIDUzNjpcXHRcXG4gNTM3OlxcdFxcdGNiLmNhbGxiYWNrID0gdmhvc3RfdmRwYV9jb25maWdfY2I7XFxuIDUzODpcXHRcXHRjYi5wcml2YXRlID0gdjtcXG4gNTM5OlxcdFxcdGlmIChjb3B5X2Zyb21fdXNlcihcXHUwMDI2ZmQsIGFyZ3AsIHNpemVvZihmZCkpKVxcbiA1NDA6XFx0XFx0XFx0cmV0dXJuICAtRUZBVUxUO1xcbiA1NDE6XFx0XFxuIDU0MjpcXHRcXHRjdHggPSBmZCA9PSBWSE9TVF9GSUxFX1VOQklORCA/IE5VTEwgOiBldmVudGZkX2N0eF9mZGdldChmZCk7XFxuIDU0MzpcXHRcXHRpZiAoSVNfRVJSKGN0eCkpXFxuIDU0NDpcXHRcXHRcXHRyZXR1cm4gUFRSX0VSUihjdHgpO1xcbiA1NDU6XFx0XFxuIDU0NjpcXHRcXHRzcGluX2xvY2tfaXJxc2F2ZShcXHUwMDI2di1cXHUwMDNlY29uZmlnX2xvY2ssIGZsYWdzKTtcXG4gNTQ3OlxcdFxcdHN3YXAoY3R4LCB2LVxcdTAwM2Vjb25maWdfY3R4KTtcXG4gNTQ4OlxcdFxcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXFx1MDAyNnYtXFx1MDAzZWNvbmZpZ19sb2NrLCBmbGFncyk7XFxuIDU0OTpcXHRcXG4gNTUwOlxcdFxcdC8qXFxuIDU1MTpcXHRcXHQgKiBUaGUgY2FsbGJhY2sgY2FuIG5vIGxvbmdlciByZWFjaCB0aGUgb2xkIGNvbnRleHQsIHNvIHRoaXMgaXMgdGhlXFxuIDU1MjpcXHRcXHQgKiBsYXN0IHJlZmVyZW5jZSB0byBpdC5cXG4gNTUzOlxcdFxcdCAqL1xcbiA1NTQ6XFx0XFx0aWYgKGN0eClcXG4gNTU1OlxcdFxcdFxcdGV2ZW50ZmRfY3R4X3B1dChjdHgpO1xcbiA1NTY6XFx0XFxuIDU1NzpcXHRcXHR2LVxcdTAwM2V2ZHBhLVxcdTAwM2Vjb25maWctXFx1MDAzZXNldF9jb25maWdfY2Iodi1cXHUwMDNldmRwYSwgXFx1MDAyNmNiKTtcXG4gNTU4OlxcdFxcbiA1NTk6XFx0XFx0cmV0dXJuIDA7XFxuIDU2MDpcXHR9XFxuIDU2MTpcXHRcXG4gNTYyOlxcdHN0YXRpYyBsb25nIHZob3N0X3ZkcGFfZ2V0X2lvdmFfcmFuZ2Uoc3RydWN0IHZob3N0X3ZkcGEgKnYsIHUzMiBfX3VzZXIgKmFyZ3ApXFxuIDU2MzpcXHR7XFxuIDU2NDpcXHRcXHRzdHJ1Y3Qgdmhvc3RfdmRwYV9pb3ZhX3JhbmdlIHJhbmdlID0ge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxMjozNTozNS45ODQ2MDIxMTVaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTA2ODE5MjMyOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIHZob3N0LXZkcGEgQ29uZmlndXJhdGlvbiBGbG93KipcblxuT2theSwgc28gSSdtIHRyeWluZyB0byB3cmFwIG15IGhlYWQgYXJvdW5kIHRoZSBjb25maWd1cmF0aW9uIHByb2Nlc3MgZm9yIGB2aG9zdC12ZHBhYC4gVGhlIGtleSBmdW5jdGlvbnMgdGhhdCBzZWVtIGltcG9ydGFudCBhcmU6IGB2aG9zdF92ZHBhX3NldF9jb25maWdfY2FsbGAsIGB2aG9zdF92ZHBhX2NvbmZpZ19wdXRgLCBhbmQgYHZob3N0X3ZkcGFfY29uZmlnX2NiYC4gTm93LCBJIHJlY2FsbCB0aGF0IGB2aG9zdF92ZHBhX3NldF9jb25maWdfY2FsbGAgaXMgc3RhdGljLCB3aGljaCBpcyBpbnRlcmVzdGluZyBiZWNhdXNlIHRoYXQgbmFycm93cyBkb3duIHRoZSBwbGFjZXMgSSBuZWVkIHRvIGxvb2sgZm9yIGNhbGxzIHRvIGl0LlxuXG5BaCwgcmlnaHQhIEkgcmVtZW1iZXIgdGhhdCBgdmhvc3RfdmRwYV91bmxvY2tlZF9pb2N0bGAgY2FsbHMgdGhhdCBmdW5jdGlvbi4gU2luY2UgdGhhdCBmdW5jdGlvbiBoYW5kbGVzIGlvY3RscywgdGhhdCdzIGFsbW9zdCBjZXJ0YWlubHkgdGhlIGVudHJ5IHBvaW50IEkgd2FudC4gTGV0IG1lIGp1c3QgY29uZmlybSB0aGF0IGB2aG9zdF92ZHBhX3NldF9jb25maWdfY2FsbGAgaXMgaW5kZWVkIHN0YXRpYy4gWWVwLCBjb25maXJtZWQuIE9rYXksIHNvIGB2aG9zdF92ZHBhX3VubG9ja2VkX2lvY3RsYCBpcyAqdGhlKiBwbGFjZSB0byBzdGFydC4gQW5kIGlmIEkgd2FudCB0byBsb29rIGF0IHdoZXJlIGB2aG9zdF92ZHBhX2NvbmZpZ19wdXRgIGlzIGNhbGxlZCwgaXQgc2VlbXMgbGlrZSBgdmhvc3RfdmRwYV9yZWxlYXNlYCBpcyB0aGUgZW50cnkgcG9pbnQgZm9yIHRoYXQuIFxuXG5MZXQgbWUganVzdCBxdWlja2x5IGNoZWNrIGlmIGB2aG9zdF92ZHBhX3VubG9ja2VkX2lvY3RsYCBpcyBzdGF0aWMuLi5cblxuXG4iLCJJbnB1dFRva2VucyI6Nzg4MywiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyNCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDEyOjM1OjQxLjA1Mjc5Njc5NFoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTk2ODIwMzMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidmhvc3RfdmRwYV91bmxvY2tlZF9pb2N0bFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL3Zob3N0L3ZkcGEuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3Zob3N0L3ZkcGEuYz02NDU9c3RhdGljIGxvbmcgdmhvc3RfdmRwYV92cmluZ19pb2N0bChzdHJ1Y3Qgdmhvc3RfdmRwYSAqdiwgdW5zaWduZWQgaW50IGNtZCxcXG4tLVxcbmRyaXZlcnMvdmhvc3QvdmRwYS5jLTc4OC1cXG5kcml2ZXJzL3Zob3N0L3ZkcGEuYzo3ODk6c3RhdGljIGxvbmcgdmhvc3RfdmRwYV91bmxvY2tlZF9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlsZXAsXFxuZHJpdmVycy92aG9zdC92ZHBhLmMtNzkwLVxcdFxcdFxcdFxcdCAgICAgIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKVxcbi0tXFxuZHJpdmVycy92aG9zdC92ZHBhLmM9MTU2Nz1zdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyB2aG9zdF92ZHBhX2ZvcHMgPSB7XFxuLS1cXG5kcml2ZXJzL3Zob3N0L3ZkcGEuYy0xNTcxLVxcdC53cml0ZV9pdGVyXFx0PSB2aG9zdF92ZHBhX2Nocl93cml0ZV9pdGVyLFxcbmRyaXZlcnMvdmhvc3QvdmRwYS5jOjE1NzI6XFx0LnVubG9ja2VkX2lvY3RsXFx0PSB2aG9zdF92ZHBhX3VubG9ja2VkX2lvY3RsLFxcbmRyaXZlcnMvdmhvc3QvdmRwYS5jLTE1NzMtI2lmZGVmIENPTkZJR19NTVVcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTI6MzU6NDEuMTUyNDg0MTI3WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU3NDg5Mjg2MzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIFBvdGVudGlhbCBGb2N1cyBTeW1ib2xzIGZvciBTeXprYWxsZXIqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGVzZSBmdW5jdGlvbnMgYW5kIHRyeWluZyB0byBmaWd1cmUgb3V0IHdoaWNoIG9uZXMgYXJlIGdvb2QgY2FuZGlkYXRlcyBmb3IgU3l6a2FsbGVyIHRvIHRhcmdldC4gTGV0J3Mgc2VlLi4uIEZpcnN0LCBgdmhvc3RfdmRwYV91bmxvY2tlZF9pb2N0bGAuIFllcywgaXQncyBzdGF0aWMuIEJ1dCB3YWl0LCBpdCdzIGFsc28gYSBmaWxlIG9wZXJhdGlvbnMgY2FsbGJhY2suIFRoYXQgbWVhbnMgaXRzIGFkZHJlc3MgaXMgdGFrZW4sIHNvIGl0ICpzaG91bGRuJ3QqIGJlIGlubGluZWQuIFRoYXQncyBnb29kOyBTeXprYWxsZXIgY2FuIGZvY3VzIG9uIGl0IGlmIHdlIHBvaW50IGl0IHRoZXJlLiBUaGUgcHJvbXB0IHNhaWQgdG8gcHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIGVudHJ5cG9pbnRzLCBhbmQgYHZob3N0X3ZkcGFfdW5sb2NrZWRfaW9jdGxgIGxvb2tzIGxpa2UgaXQgZml0cyB0aGUgYmlsbC5cblxuQW5kIGB2aG9zdF92ZHBhX3JlbGVhc2VgIGlzIGFsc28gYSBmaWxlIG9wZXJhdGlvbnMgY2FsbGJhY2ssIHNvIHNhbWUgZGVhbCB0aGVyZSwgcmlnaHQ/XG5cbk5vdywgbGV0J3MgdGhpbmsgYWJvdXQgYHZob3N0X3ZkcGFfc2V0X2NvbmZpZ19jYWxsYC4gSXQncyBzdGF0aWMsIHdoaWNoIGlzIGEgcmVkIGZsYWcuIEhvd2V2ZXIsIGl0J3MgY2FsbGVkIGZyb20gYSBzd2l0Y2ggc3RhdGVtZW50ICp3aXRoaW4qIGB2aG9zdF92ZHBhX3VubG9ja2VkX2lvY3RsYC4gVGhhdCBtYWtlcyBtZSB0aGluayBpdCAqbWlnaHQqIGJlIGlubGluZWQuIENvbXBpbGVyIG9wdGltaXphdGlvbiBpcyBhIHBhaW4hXG5cblNvLCB0aGUgb2J2aW91cyBjaG9pY2UgaXMgc3RpbGwgYHZob3N0X3ZkcGFfdW5sb2NrZWRfaW9jdGxgIGF0IHRoaXMgcG9pbnQuIEl0J3MgYSBmaWxlIG9wZXJhdGlvbnMgY2FsbGJhY2ssIGl0cyBhZGRyZXNzIGlzIHRha2VuLCBpdCdzIG5vdCBpbmxpbmVkLCBhbmQgaXQncyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuXG5cbldoYXQgYWJvdXQgYHZob3N0X3ZkcGFfY29uZmlnX2NiYD8gSXQncyBhIGNhbGxiYWNrLCBhbmQgaXQncyBhZGRyZXNzIGlzIGFsc28gdGFrZW4uIFNvIHRoYXQncyBhbHNvIG5vdCBpbmxpbmVkLlxuXG5Pa2F5LCBsZXQncyBjaGVjayBgdmhvc3RfdmRwYV9jb25maWdfY2JgIG1vcmUgY2xvc2VseS5cblxuXG4iLCJJbnB1dFRva2VucyI6ODY3NywiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMwNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxMjozNTo0Ni45MDE0MTQ4MTdaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU5NjIwNzM1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInZob3N0X3ZkcGFfY29uZmlnX2NiXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvdmhvc3QvdmRwYS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvdmhvc3QvdmRwYS5jPTQ1PXN0cnVjdCB2aG9zdF92ZHBhIHtcXG4tLVxcbmRyaXZlcnMvdmhvc3QvdmRwYS5jLTU4LVxcdHN0cnVjdCBldmVudGZkX2N0eCAqY29uZmlnX2N0eDtcXG5kcml2ZXJzL3Zob3N0L3ZkcGEuYzo1OTpcXHQvKiBTZXJpYWxpc2VzIHZob3N0X3ZkcGFfY29uZmlnX2NiKCkgYWdhaW5zdCBjb25maWdfY3R4IGJlaW5nIHJlcGxhY2VkLiAqL1xcbmRyaXZlcnMvdmhvc3QvdmRwYS5jLTYwLVxcdHNwaW5sb2NrX3QgY29uZmlnX2xvY2s7XFxuLS1cXG5kcml2ZXJzL3Zob3N0L3ZkcGEuYz0xNzg9c3RhdGljIGlycXJldHVybl90IHZob3N0X3ZkcGFfdmlydHF1ZXVlX2NiKHZvaWQgKnByaXZhdGUpXFxuLS1cXG5kcml2ZXJzL3Zob3N0L3ZkcGEuYy0xODgtXFxuZHJpdmVycy92aG9zdC92ZHBhLmM6MTg5OnN0YXRpYyBpcnFyZXR1cm5fdCB2aG9zdF92ZHBhX2NvbmZpZ19jYih2b2lkICpwcml2YXRlKVxcbmRyaXZlcnMvdmhvc3QvdmRwYS5jLTE5MC17XFxuLS1cXG5kcml2ZXJzL3Zob3N0L3ZkcGEuYz01MzA9c3RhdGljIGxvbmcgdmhvc3RfdmRwYV9zZXRfY29uZmlnX2NhbGwoc3RydWN0IHZob3N0X3ZkcGEgKnYsIHUzMiBfX3VzZXIgKmFyZ3ApXFxuLS1cXG5kcml2ZXJzL3Zob3N0L3ZkcGEuYy01MzYtXFxuZHJpdmVycy92aG9zdC92ZHBhLmM6NTM3OlxcdGNiLmNhbGxiYWNrID0gdmhvc3RfdmRwYV9jb25maWdfY2I7XFxuZHJpdmVycy92aG9zdC92ZHBhLmMtNTM4LVxcdGNiLnByaXZhdGUgPSB2O1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxMjozNTo0Ni45NjEwNDAwOTNaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDMxNjIzMzU4MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgaXQgd2VyZSBteSBvd246XG5cbioqQW5hbHl6aW5nIHRoZSB2aG9zdC12ZHBhIENvZGUqKlxuXG5Pa2F5LCBsZXQncyBzZWUsIGB2aG9zdF92ZHBhX2NvbmZpZ19jYmAuLi4gcmlnaHQsIHRoYXQncyBhbiBgaXJxcmV0dXJuX3RgIGNhbGxiYWNrLiBTbywgaXQncyB0cmlnZ2VyZWQgYnkgYW4gaW50ZXJydXB0LCBoYW5kbGluZyBzb21lIGNvbmZpZ3VyYXRpb24gZXZlbnQgb3Igc2lnbmFsIHdpdGhpbiB0aGUgVkRQQSBjb250ZXh0LiBOb3csIHdoYXQgKmVsc2UqIGlzIGluIHBsYXkgaGVyZT8gSXMgdGhlcmUgYW55IG90aGVyIGZ1bmN0aW9uIEkgbmVlZCB0byBjb25zaWRlciBpbiByZWxhdGlvbiB0byB0aGF0IGNhbGxiYWNrPyBMZXQgbWUgZG91YmxlLWNoZWNrIHRoZSBjb2RlIHN0cnVjdHVyZS4gT2theSwgaGVyZSdzIGB2aG9zdF92ZHBhX3JlbGVhc2VgLCB0aGF0IGxvb2tzIHRvIGJlIHRoZSBmaWxlIG9wZXJhdGlvbiByZWxlYXNlIGNhbGxiYWNrLiBHb3QgaXQsIHNvIHRoYXQncyBjYWxsZWQgd2hlbiBhIGZpbGUgZGVzY3JpcHRvciBhc3NvY2lhdGVkIHdpdGggdGhlIGRldmljZSBpcyBjbG9zZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk3MjMsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxMjozNTo1MS4yNzcyNzU4MTZaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2ODk2ODA2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInZob3N0X3ZkcGFfcmVsZWFzZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL3Zob3N0L3ZkcGEuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3Zob3N0L3ZkcGEuYz0xNDY4PXN0YXRpYyB2b2lkIHZob3N0X3ZkcGFfY2xlYW5faXJxKHN0cnVjdCB2aG9zdF92ZHBhICp2KVxcbi0tXFxuZHJpdmVycy92aG9zdC92ZHBhLmMtMTQ3NS1cXG5kcml2ZXJzL3Zob3N0L3ZkcGEuYzoxNDc2OnN0YXRpYyBpbnQgdmhvc3RfdmRwYV9yZWxlYXNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlcClcXG5kcml2ZXJzL3Zob3N0L3ZkcGEuYy0xNDc3LXtcXG4tLVxcbmRyaXZlcnMvdmhvc3QvdmRwYS5jPTE1Njc9c3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgdmhvc3RfdmRwYV9mb3BzID0ge1xcbi0tXFxuZHJpdmVycy92aG9zdC92ZHBhLmMtMTU2OS1cXHQub3BlblxcdFxcdD0gdmhvc3RfdmRwYV9vcGVuLFxcbmRyaXZlcnMvdmhvc3QvdmRwYS5jOjE1NzA6XFx0LnJlbGVhc2VcXHQ9IHZob3N0X3ZkcGFfcmVsZWFzZSxcXG5kcml2ZXJzL3Zob3N0L3ZkcGEuYy0xNTcxLVxcdC53cml0ZV9pdGVyXFx0PSB2aG9zdF92ZHBhX2Nocl93cml0ZV9pdGVyLFxcbi0tXFxuZHJpdmVycy92aG9zdC92ZHBhLmMtMTU3OC1cXG5kcml2ZXJzL3Zob3N0L3ZkcGEuYzoxNTc5OnN0YXRpYyB2b2lkIHZob3N0X3ZkcGFfcmVsZWFzZV9kZXYoc3RydWN0IGRldmljZSAqZGV2aWNlKVxcbmRyaXZlcnMvdmhvc3QvdmRwYS5jLTE1ODAte1xcbi0tXFxuZHJpdmVycy92aG9zdC92ZHBhLmM9MTU4OT1zdGF0aWMgaW50IHZob3N0X3ZkcGFfcHJvYmUoc3RydWN0IHZkcGFfZGV2aWNlICp2ZHBhKVxcbi0tXFxuZHJpdmVycy92aG9zdC92ZHBhLmMtMTYyMS1cXHRkZXZpY2VfaW5pdGlhbGl6ZShcXHUwMDI2di1cXHUwMDNlZGV2KTtcXG5kcml2ZXJzL3Zob3N0L3ZkcGEuYzoxNjIyOlxcdHYtXFx1MDAzZWRldi5yZWxlYXNlID0gdmhvc3RfdmRwYV9yZWxlYXNlX2RldjtcXG5kcml2ZXJzL3Zob3N0L3ZkcGEuYy0xNjIzLVxcdHYtXFx1MDAzZWRldi5wYXJlbnQgPSBcXHUwMDI2dmRwYS1cXHUwMDNlZGV2O1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxMjozNTo1MS4zMjQxNzQ2NjJaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTQ0NTI2OTgxMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipDb25maWd1cmF0aW9uIERlZXAgRGl2ZSBmb3IgVkRQQSBhbmQgVmhvc3QtVkRQQSoqXG5cbk9rYXksIGxldCdzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJJ20gaG9taW5nIGluIG9uIHRoZSBjcml0aWNhbCBzeW1ib2xzIHJlbGF0ZWQgdG8gVkRQQSBhbmQgdmhvc3QtdmRwYTogYHZob3N0X3ZkcGFfdW5sb2NrZWRfaW9jdGxgLCBgdmhvc3RfdmRwYV9yZWxlYXNlYCwgYW5kIGB2aG9zdF92ZHBhX2NvbmZpZ19jYmAuIFRoZXNlIGFyZSBteSBpbml0aWFsIGJyZWFkY3J1bWJzLlxuXG5Ob3csIGxldCdzIG1ldGljdWxvdXNseSByZXZpZXcgdGhlIGNvbmZpZ3VyYXRpb24gZGVwZW5kZW5jaWVzLiBGaXJzdCwgd2UgbmVlZCB0byBlbnN1cmUgYFZIT1NUX1ZEUEFgIGlzIGVuYWJsZWQg4oCTIHRoYXQncyBvdXIgYW5jaG9yLiBGb2xsb3dpbmcgdGhhdCwgd2UgaGF2ZSBkZXBlbmRlbmNpZXMgdGhhdCB3ZSBuZWVkIHRvIGVuc3VyZSBhcmUgYWxzbyBlbmFibGVkLCBzbyB3ZSBuZWVkIHRvIHZlcmlmeTpcbiogICBgVkhPU1RfVkRQQWAgaGluZ2VzIG9uIGJvdGggYEVWRU5URkRgIGFuZCBgVkRQQWAuXG4qICAgYFZEUEFgLCBpbiB0dXJuLCBkZXBlbmRzIG9uIGBORVRgLlxuKiAgIElmIHdlIG5lZWQgdGhlIGBWRFBBX1NJTWAgbW9kdWxlIHdlIG5lZWQgdG8gZW5zdXJlIGBSVU5USU1FX1RFU1RJTkdfTUVOVWAgaXMgZW5hYmxlZC5cbiogICBUaGVuIGZvciBib3RoIGBWRFBBX1NJTV9ORVRgIGFuZCBgVkRQQV9TSU1fQkxPQ0tgIG1vZHVsZXMsIHRoZWlyIHNoYXJlZCBkZXBlbmRlbmN5IGlzIGBWRFBBX1NJTWAuXG4qICAgYFZEUEFfVVNFUmAgYWxzbyByZXF1aXJlcyBgRVZFTlRGRGAgYW5kIGBNTVVgLlxuXG5CYXNlZCBvbiB0aGlzIGNhc2NhZGUgb2YgZGVwZW5kZW5jaWVzLCBJJ20gY29uZmlkZW50IHdlIG5lZWQgdG8gZW5hYmxlIHRoZSBmb2xsb3dpbmcgY29uZmlndXJhdGlvbnM6XG5cbiogICBgVkhPU1RfVkRQQWBcbiogICBgVkRQQWBcbiogICBgVkRQQV9TSU1gXG4qICAgYFZEUEFfU0lNX05FVGBcbiogICBgVkRQQV9TSU1fQkxPQ0tgXG4qICAgYFZEUEFfVVNFUmBcblxuSG93ZXZlciwgYmVmb3JlIHdlIGZpbmFsaXplIHRoZXNlIGNvbmZpZ3VyYXRpb25zLCBJIG5lZWQgdG8gY2hlY2sgaWYgdGhlcmUgYXJlIGFueSBvdGhlciByZWxhdGVkIGNvbmZpZ3VyYXRpb25zIHRoYXQgbWF5IGJlIHJlbGV2YW50IG9yIGFkZCBhZGRpdGlvbmFsIGZ1bmN0aW9uYWxpdHkgdGhhdCBzaG91bGQgYmUgZW5hYmxlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA0MTEsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTI6MzU6NTYuNzY5NDQ3NzA1WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjExNjU1Mzk1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBSVU5USU1FX1RFU1RJTkdfTUVOVVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibGliL0tjb25maWcuZGVidWc9MjI1Nj1jb25maWcgS0NPVl9TRUxGVEVTVFxcbi0tXFxubGliL0tjb25maWcuZGVidWctMjI2My1cXG5saWIvS2NvbmZpZy5kZWJ1ZzoyMjY0Om1lbnVjb25maWcgUlVOVElNRV9URVNUSU5HX01FTlVcXG5saWIvS2NvbmZpZy5kZWJ1Zy0yMjY1LVxcdGJvb2wgXFxcIlJ1bnRpbWUgVGVzdGluZ1xcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTI6MzU6NTguMzgxMTA4MjZaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzkyMjIzNDAyMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3M6XG5cbioqRW5hYmxpbmcgUnVudGltZSBUZXN0aW5nIGFuZCBSZXZpc2l0aW5nIERlcGVuZGVuY2llcyoqXG5cbkFscmlnaHQsIHRoZSBzeXN0ZW0gY29uZmlndXJhdGlvbiAoYG1lbnVjb25maWdgKSBpbmNsdWRlcyBzb21ldGhpbmcgY2FsbGVkIGBSVU5USU1FX1RFU1RJTkdfTUVOVWAuIEkgaW1tZWRpYXRlbHkgcmVjb2duaXplIHRoYXQgdGhpcyBzb3VuZHMgbGlrZSBzb21ldGhpbmcgd2Ugc2hvdWxkIGVuYWJsZS4gTXkgZXhwZXJpZW5jZSB3aXRoIHN5emthbGxlciBzZXR1cHMgc3VnZ2VzdHMgaXQncyB1c3VhbGx5IHBhcnQgb2YgdGhlIHBpY3R1cmUuIEhvd2V2ZXIsIGl0J3Mgd29ydGggZG91YmxlLWNoZWNraW5nLiBJdCdzIGJlc3QgdG8gaW5jbHVkZSBpdCB1bmxlc3MgdGhlcmUncyBhbiBvdmVyd2hlbG1pbmcgcmVhc29uIG5vdCB0by4gQmV0dGVyIHNhZmUgdGhhbiBzb3JyeSB3aGVuIGl0IGNvbWVzIHRvIHJ1bnRpbWUgdGVzdGluZyBjYXBhYmlsaXRpZXMsIHJpZ2h0P1xuXG5Ob3csIGxldCBtZSBqdXN0IHF1aWNrbHkgcmV2aXNpdCB0aGUgZGVwZW5kZW5jaWVzIGZvciBgVkRQQV9TSU1gLiBJIHdhbnQgdG8gbWFrZSBzdXJlIEkgaGF2ZW4ndCBtaXNzZWQgYW55dGhpbmcgb3IgdGhhdCB0aGVyZSBhcmVuJ3QgYW55IHBvdGVudGlhbCBjb25mbGljdHMgYWZ0ZXIgZW5hYmxpbmcgdGhhdCBtZW51LiBBbHdheXMgZ29vZCB0byBkb3VibGUtY2hlY2sgdGhlc2UgdGhpbmdzLCBlc3BlY2lhbGx5IHdoZW4gbWFraW5nIGNvbmZpZ3VyYXRpb24gY2hhbmdlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTExMjEsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxMjozNjowMi4zMDMzNDUzMDFaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjA3MjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy92ZHBhL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMTAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgMTA6XFx0aWYgVkRQQVxcbiAgMTE6XFx0XFxuICAxMjpcXHRjb25maWcgVkRQQV9TSU1cXG4gIDEzOlxcdFxcdHRyaXN0YXRlIFxcXCJ2RFBBIGRldmljZSBzaW11bGF0b3IgY29yZVxcXCJcXG4gIDE0OlxcdFxcdGRlcGVuZHMgb24gUlVOVElNRV9URVNUSU5HX01FTlVcXG4gIDE1OlxcdFxcdHNlbGVjdCBWSE9TVF9SSU5HXFxuICAxNjpcXHRcXHRzZWxlY3QgSU9NTVVfSU9WQVxcbiAgMTc6XFx0XFx0aGVscFxcbiAgMTg6XFx0XFx0ICBFbmFibGUgdGhpcyBtb2R1bGUgdG8gc3VwcG9ydCB2RFBBIGRldmljZSBzaW11bGF0b3JzLiBUaGVzZSBkZXZpY2VzXFxuICAxOTpcXHRcXHQgIGFyZSB1c2VkIGZvciB0ZXN0aW5nLCBwcm90b3R5cGluZyBhbmQgZGV2ZWxvcG1lbnQgb2YgdkRQQS5cXG4gIDIwOlxcdFxcbiAgMjE6XFx0Y29uZmlnIFZEUEFfU0lNX05FVFxcbiAgMjI6XFx0XFx0dHJpc3RhdGUgXFxcInZEUEEgc2ltdWxhdG9yIGZvciBuZXR3b3JraW5nIGRldmljZVxcXCJcXG4gIDIzOlxcdFxcdGRlcGVuZHMgb24gVkRQQV9TSU1cXG4gIDI0OlxcdFxcdHNlbGVjdCBHRU5FUklDX05FVF9VVElMU1xcbiAgMjU6XFx0XFx0aGVscFxcbiAgMjY6XFx0XFx0ICB2RFBBIG5ldHdvcmtpbmcgZGV2aWNlIHNpbXVsYXRvciB3aGljaCBsb29wcyBUWCB0cmFmZmljIGJhY2sgdG8gUlguXFxuICAyNzpcXHRcXG4gIDI4OlxcdGNvbmZpZyBWRFBBX1NJTV9CTE9DS1xcbiAgMjk6XFx0XFx0dHJpc3RhdGUgXFxcInZEUEEgc2ltdWxhdG9yIGZvciBibG9jayBkZXZpY2VcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDEyOjM2OjAyLjMwMzQwNzM1MVoiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3NTQ3MzE2NjQ0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIHZob3N0LXZkcGEgUGF0Y2gqKlxuXG5Pa2F5LCBzbyB3ZSdyZSBsb29raW5nIGF0IGEgcGF0Y2ggaGVyZSwgYW5kIHRoZSBrZXkgdGhpbmcgSSBzZWUgcmlnaHQgYXdheSBpcyB0aGUgYWRkaXRpb24gb2YgYFJVTlRJTUVfVEVTVElOR19NRU5VYC4gVGhhdCdzIGEgc3Ryb25nIGluZGljYXRvciB0aGF0IHRoaXMgcmVxdWlyZXMgc29tZSBydW50aW1lIGFuYWx5c2lzLlxuXG5Ob3csIGxldCdzIGJyZWFrIGRvd24gdGhlIGNvbmZpZ3VyYXRpb24gZWxlbWVudHMgaW52b2x2ZWQuIFdlJ3ZlIGdvdCBgVkhPU1RfVkRQQWAsIGBWRFBBYCwgYFZEUEFfU0lNYCwgYFZEUEFfU0lNX05FVGAsIGBWRFBBX1NJTV9CTE9DS2AsIGBWRFBBX1VTRVJgLCBhbmQgdGhlIGNyaXRpY2FsIGBSVU5USU1FX1RFU1RJTkdfTUVOVWAuXG5cblRoZSByZWFsIGZvY3VzIHBvaW50cywgdGhlIGZ1bmN0aW9ucyB0aGF0IGFyZSBwcm9iYWJseSB0aGUgbW9zdCBpbXBvcnRhbnQgdG8gY29uc2lkZXIgaW4gZGV0YWlsIGFyZSBgdmhvc3RfdmRwYV91bmxvY2tlZF9pb2N0bGAsIGB2aG9zdF92ZHBhX3JlbGVhc2VgLCBhbmQgYHZob3N0X3ZkcGFfY29uZmlnX2NiYC5cblxuRnJvbSB3aGF0IEkgdW5kZXJzdGFuZCwgdGhpcyBwYXRjaCBpcyBhZGRyZXNzaW5nIGEgcmFjZSBjb25kaXRpb24gd2l0aGluIGBzdHJ1Y3Qgdmhvc3RfdmRwYWAuIEl0IHNlZW1zIGxpa2UgYHZob3N0X3ZkcGFfY29uZmlnX2NiYCBpcyByYWNpbmcgd2l0aCBgdmhvc3RfdmRwYV9zZXRfY29uZmlnX2NhbGxgIGFuZCBgdmhvc3RfdmRwYV9jb25maWdfcHV0YC4gVGhpcyBpcyBpbXBvcnRhbnQsIGJlY2F1c2UgdGhlc2UgZnVuY3Rpb25zIGFyZSBhY2Nlc3NpYmxlIGZyb20gdXNlciBzcGFjZSB2aWEgdGhlIHZob3N0LXZkcGEgY2hhcmRldiBpb2N0bHMgYW5kIHJlbGVhc2Ugb3BlcmF0aW9ucy4gVGhpcyBpcyBhIHZlcnkgaW50ZXJlc3RpbmcgcG9pbnQgYmVjYXVzZSB0aGlzIGlzIHdoZXJlIHRoZSByYWNlIGNvbmRpdGlvbiBpcyBpbnRyb2R1Y2VkIGFuZCB3aGVyZSBpdCBjYW4gYmUgcG90ZW50aWFsbHkgZXhwbG9pdGVkLlxuXG5HaXZlbiB0aGF0IHZEUEEgY2FuIGJlIHRlc3RlZCBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50IHdpdGggc2ltdWxhdG9ycyBsaWtlIGB2ZHBhX3NpbV9uZXRgLCBgdmRwYV9zaW1fYmxrYCwgYW5kIGB2ZHVzZWAsIHRoaXMgZml4IGhhcyBhIGRlbW9uc3RyYWJsZSBmdW5jdGlvbmFsIGltcGFjdC4gQmVjYXVzZSBvZiB0aGF0LCBmdXp6aW5nIGlzIGFuIG9idmlvdXMgbmV4dCBzdGVwLiBUaGlzIHBhdGNoICpuZWVkcyogZnV6emluZyB0byBtYWtlIHN1cmUgaXQgaXMgcm9idXN0LlxuXG5JJ20gcmVhZHkgdG8gbWFyayB0aGlzIG9uZSBkb3duLCBhbmQgbGV0J3MgY2FsbCBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTY2NiwiT3V0cHV0VG9rZW5zIjoyNTQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNjQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxMjozNjowOS44NTA3MjY5NjVaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2OTc0MDEzNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVkhPU1RfVkRQQVwiLFxuICAgIFwiVkRQQVwiLFxuICAgIFwiVkRQQV9TSU1cIixcbiAgICBcIlZEUEFfU0lNX05FVFwiLFxuICAgIFwiVkRQQV9TSU1fQkxPQ0tcIixcbiAgICBcIlZEUEFfVVNFUlwiLFxuICAgIFwiUlVOVElNRV9URVNUSU5HX01FTlVcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ2aG9zdF92ZHBhX3VubG9ja2VkX2lvY3RsXCIsXG4gICAgXCJ2aG9zdF92ZHBhX3JlbGVhc2VcIixcbiAgICBcInZob3N0X3ZkcGFfY29uZmlnX2NiXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhIHNwaW5sb2NrIHRvIGBzdHJ1Y3Qgdmhvc3RfdmRwYWAgdG8gZml4IGEgcmFjZSBjb25kaXRpb24gYmV0d2VlbiBgdmhvc3RfdmRwYV9jb25maWdfY2JgIGFuZCBgdmhvc3RfdmRwYV9zZXRfY29uZmlnX2NhbGxgIC8gYHZob3N0X3ZkcGFfY29uZmlnX3B1dGAuIFRoZXNlIGZ1bmN0aW9ucyBhcmUgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSB0aGUgdmhvc3QtdmRwYSBjaGFyZGV2IGlvY3RscyBhbmQgcmVsZWFzZSBvcGVyYXRpb25zLiBUaGUgdkRQQSBzdWJzeXN0ZW0gY2FuIGJlIHRlc3RlZCBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50IHVzaW5nIHZEUEEgc2ltdWxhdG9ycyAoYHZkcGFfc2ltX25ldGAsIGB2ZHBhX3NpbV9ibGtgKSBvciBgdmR1c2VgLiBUaGVyZWZvcmUsIHRoZSBjaGFuZ2VzIGhhdmUgYSBmdW5jdGlvbmFsIGltcGFjdCB0aGF0IGlzIHdvcnRoIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVkhPU1RfVkRQQVwiLFxuICAgIFwiVkRQQVwiLFxuICAgIFwiVkRQQV9TSU1cIixcbiAgICBcIlZEUEFfU0lNX05FVFwiLFxuICAgIFwiVkRQQV9TSU1fQkxPQ0tcIixcbiAgICBcIlZEUEFfVVNFUlwiLFxuICAgIFwiUlVOVElNRV9URVNUSU5HX01FTlVcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ2aG9zdF92ZHBhX3VubG9ja2VkX2lvY3RsXCIsXG4gICAgXCJ2aG9zdF92ZHBhX3JlbGVhc2VcIixcbiAgICBcInZob3N0X3ZkcGFfY29uZmlnX2NiXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhIHNwaW5sb2NrIHRvIGBzdHJ1Y3Qgdmhvc3RfdmRwYWAgdG8gZml4IGEgcmFjZSBjb25kaXRpb24gYmV0d2VlbiBgdmhvc3RfdmRwYV9jb25maWdfY2JgIGFuZCBgdmhvc3RfdmRwYV9zZXRfY29uZmlnX2NhbGxgIC8gYHZob3N0X3ZkcGFfY29uZmlnX3B1dGAuIFRoZXNlIGZ1bmN0aW9ucyBhcmUgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSB0aGUgdmhvc3QtdmRwYSBjaGFyZGV2IGlvY3RscyBhbmQgcmVsZWFzZSBvcGVyYXRpb25zLiBUaGUgdkRQQSBzdWJzeXN0ZW0gY2FuIGJlIHRlc3RlZCBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50IHVzaW5nIHZEUEEgc2ltdWxhdG9ycyAoYHZkcGFfc2ltX25ldGAsIGB2ZHBhX3NpbV9ibGtgKSBvciBgdmR1c2VgLiBUaGVyZWZvcmUsIHRoZSBjaGFuZ2VzIGhhdmUgYSBmdW5jdGlvbmFsIGltcGFjdCB0aGF0IGlzIHdvcnRoIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDEyOjM2OjA5LjkyMDQ3MzEzWiIsIlNlcSI6MjksIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NTA4MzIxNTI2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTI6MzY6MDkuOTIwOTI2NDhaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6NzUwNzg2NDAyNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcmVzc2VzIGEgY29uY3VycmVuY3kgaXNzdWUgKGxpa2VseSBhIHJhY2UgY29uZGl0aW9uIG9yIHVzZS1hZnRlci1mcmVlKSBieSBhZGRpbmcgYSBzcGlubG9jayAoYGNvbmZpZ19sb2NrYCkgdG8gc2VyaWFsaXplIGFjY2Vzc2VzIHRvIGB2LVxcdTAwM2Vjb25maWdfY3R4YCBpbiBgdmhvc3RfdmRwYV9jb25maWdfY2IoKWAsIGB2aG9zdF92ZHBhX2NvbmZpZ19wdXQoKWAsIGFuZCBgdmhvc3RfdmRwYV9zZXRfY29uZmlnX2NhbGwoKWAuIFRoZXNlIGNoYW5nZXMgZG8gbm90IGludHJvZHVjZSBvciBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLCBpbmZvLWxlYWtzLCBvciBjb21wbGV4IGRhdGEgc3RydWN0dXJlIGFsbG9jYXRpb25zIHRoYXQgd291bGQgcmVxdWlyZSBLTVNBTi4gVGhlIGJ1ZyBiZWluZyBmaXhlZCBhbmQgYW55IHBvdGVudGlhbCByZWdyZXNzaW9ucyB3b3VsZCBiZSByZWxhdGVkIHRvIGxvY2tpbmcsIHJhY2UgY29uZGl0aW9ucywgb3IgdXNlLWFmdGVyLWZyZWUsIHdoaWNoIGFyZSBlZmZlY3RpdmVseSBjYXVnaHQgYnkgS0FTQU4sIEtDU0FOLCBhbmQgTE9DS0RFUC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA5MjhlZWUyMDRhZTdiM2FiNzg3NmE3M2M3MDMxMzg1ODI2YjViNjI0XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBBdWcgNyAxMjozNTowMyAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmhvc3QvdmRwYS5jIGIvZHJpdmVycy92aG9zdC92ZHBhLmNcbmluZGV4IGFjNTUyNzVmYTBkMGEuLjI3MmQ1MDZkODMxYzggMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL3Zob3N0L3ZkcGEuY1xuKysrIGIvZHJpdmVycy92aG9zdC92ZHBhLmNcbkBAIC01Niw2ICs1Niw4IEBAIHN0cnVjdCB2aG9zdF92ZHBhIHtcbiBcdGludCB2aXJ0aW9faWQ7XG4gXHRpbnQgbWlub3I7XG4gXHRzdHJ1Y3QgZXZlbnRmZF9jdHggKmNvbmZpZ19jdHg7XG4rXHQvKiBTZXJpYWxpc2VzIHZob3N0X3ZkcGFfY29uZmlnX2NiKCkgYWdhaW5zdCBjb25maWdfY3R4IGJlaW5nIHJlcGxhY2VkLiAqL1xuK1x0c3BpbmxvY2tfdCBjb25maWdfbG9jaztcbiBcdGludCBpbl9iYXRjaDtcbiBcdHN0cnVjdCB2ZHBhX2lvdmFfcmFuZ2UgcmFuZ2U7XG4gXHR1MzIgYmF0Y2hfYXNpZDtcbkBAIC0xODcsMTAgKzE4OSwxMiBAQCBzdGF0aWMgaXJxcmV0dXJuX3Qgdmhvc3RfdmRwYV92aXJ0cXVldWVfY2Iodm9pZCAqcHJpdmF0ZSlcbiBzdGF0aWMgaXJxcmV0dXJuX3Qgdmhvc3RfdmRwYV9jb25maWdfY2Iodm9pZCAqcHJpdmF0ZSlcbiB7XG4gXHRzdHJ1Y3Qgdmhvc3RfdmRwYSAqdiA9IHByaXZhdGU7XG4tXHRzdHJ1Y3QgZXZlbnRmZF9jdHggKmNvbmZpZ19jdHggPSB2LVx1MDAzZWNvbmZpZ19jdHg7XG4rXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuIFxuLVx0aWYgKGNvbmZpZ19jdHgpXG4tXHRcdGV2ZW50ZmRfc2lnbmFsKGNvbmZpZ19jdHgpO1xuK1x0c3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2di1cdTAwM2Vjb25maWdfbG9jaywgZmxhZ3MpO1xuK1x0aWYgKHYtXHUwMDNlY29uZmlnX2N0eClcbitcdFx0ZXZlbnRmZF9zaWduYWwodi1cdTAwM2Vjb25maWdfY3R4KTtcbitcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2di1cdTAwM2Vjb25maWdfbG9jaywgZmxhZ3MpO1xuIFxuIFx0cmV0dXJuIElSUV9IQU5ETEVEO1xuIH1cbkBAIC01MTEsMTUgKzUxNSwyMiBAQCBzdGF0aWMgbG9uZyB2aG9zdF92ZHBhX2dldF92cmluZ19udW0oc3RydWN0IHZob3N0X3ZkcGEgKnYsIHUxNiBfX3VzZXIgKmFyZ3ApXG4gXG4gc3RhdGljIHZvaWQgdmhvc3RfdmRwYV9jb25maWdfcHV0KHN0cnVjdCB2aG9zdF92ZHBhICp2KVxuIHtcbi1cdGlmICh2LVx1MDAzZWNvbmZpZ19jdHgpIHtcbi1cdFx0ZXZlbnRmZF9jdHhfcHV0KHYtXHUwMDNlY29uZmlnX2N0eCk7XG4tXHRcdHYtXHUwMDNlY29uZmlnX2N0eCA9IE5VTEw7XG4tXHR9XG4rXHRzdHJ1Y3QgZXZlbnRmZF9jdHggKmN0eDtcbitcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4rXG4rXHRzcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZ2LVx1MDAzZWNvbmZpZ19sb2NrLCBmbGFncyk7XG4rXHRjdHggPSB2LVx1MDAzZWNvbmZpZ19jdHg7XG4rXHR2LVx1MDAzZWNvbmZpZ19jdHggPSBOVUxMO1xuK1x0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZ2LVx1MDAzZWNvbmZpZ19sb2NrLCBmbGFncyk7XG4rXG4rXHRpZiAoY3R4KVxuK1x0XHRldmVudGZkX2N0eF9wdXQoY3R4KTtcbiB9XG4gXG4gc3RhdGljIGxvbmcgdmhvc3RfdmRwYV9zZXRfY29uZmlnX2NhbGwoc3RydWN0IHZob3N0X3ZkcGEgKnYsIHUzMiBfX3VzZXIgKmFyZ3ApXG4ge1xuIFx0c3RydWN0IHZkcGFfY2FsbGJhY2sgY2I7XG4rXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuIFx0aW50IGZkO1xuIFx0c3RydWN0IGV2ZW50ZmRfY3R4ICpjdHg7XG4gXG5AQCAtNTI5LDE4ICs1NDAsMjAgQEAgc3RhdGljIGxvbmcgdmhvc3RfdmRwYV9zZXRfY29uZmlnX2NhbGwoc3RydWN0IHZob3N0X3ZkcGEgKnYsIHUzMiBfX3VzZXIgKmFyZ3ApXG4gXHRcdHJldHVybiAgLUVGQVVMVDtcbiBcbiBcdGN0eCA9IGZkID09IFZIT1NUX0ZJTEVfVU5CSU5EID8gTlVMTCA6IGV2ZW50ZmRfY3R4X2ZkZ2V0KGZkKTtcbitcdGlmIChJU19FUlIoY3R4KSlcbitcdFx0cmV0dXJuIFBUUl9FUlIoY3R4KTtcbitcbitcdHNwaW5fbG9ja19pcnFzYXZlKFx1MDAyNnYtXHUwMDNlY29uZmlnX2xvY2ssIGZsYWdzKTtcbiBcdHN3YXAoY3R4LCB2LVx1MDAzZWNvbmZpZ19jdHgpO1xuK1x0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZ2LVx1MDAzZWNvbmZpZ19sb2NrLCBmbGFncyk7XG4gXG4tXHRpZiAoIUlTX0VSUl9PUl9OVUxMKGN0eCkpXG4rXHQvKlxuK1x0ICogVGhlIGNhbGxiYWNrIGNhbiBubyBsb25nZXIgcmVhY2ggdGhlIG9sZCBjb250ZXh0LCBzbyB0aGlzIGlzIHRoZVxuK1x0ICogbGFzdCByZWZlcmVuY2UgdG8gaXQuXG4rXHQgKi9cbitcdGlmIChjdHgpXG4gXHRcdGV2ZW50ZmRfY3R4X3B1dChjdHgpO1xuIFxuLVx0aWYgKElTX0VSUih2LVx1MDAzZWNvbmZpZ19jdHgpKSB7XG4tXHRcdGxvbmcgcmV0ID0gUFRSX0VSUih2LVx1MDAzZWNvbmZpZ19jdHgpO1xuLVxuLVx0XHR2LVx1MDAzZWNvbmZpZ19jdHggPSBOVUxMO1xuLVx0XHRyZXR1cm4gcmV0O1xuLVx0fVxuLVxuIFx0di1cdTAwM2V2ZHBhLVx1MDAzZWNvbmZpZy1cdTAwM2VzZXRfY29uZmlnX2NiKHYtXHUwMDNldmRwYSwgXHUwMDI2Y2IpO1xuIFxuIFx0cmV0dXJuIDA7XG5AQCAtMTU5OSw2ICsxNjEyLDcgQEAgc3RhdGljIGludCB2aG9zdF92ZHBhX3Byb2JlKHN0cnVjdCB2ZHBhX2RldmljZSAqdmRwYSlcbiBcdH1cbiBcbiBcdGF0b21pY19zZXQoXHUwMDI2di1cdTAwM2VvcGVuZWQsIDApO1xuK1x0c3Bpbl9sb2NrX2luaXQoXHUwMDI2di1cdTAwM2Vjb25maWdfbG9jayk7XG4gXHR2LVx1MDAzZW1pbm9yID0gbWlub3I7XG4gXHR2LVx1MDAzZXZkcGEgPSB2ZHBhO1xuIFx0di1cdTAwM2VudnFzID0gdmRwYS1cdTAwM2VudnFzO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTI6MzY6MDkuOTIwOTI3MzZaIiwiU2VxIjozMSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzUwNzgzNzc1NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIHZob3N0LXZkcGEgQ29uZmlndXJhdGlvbiBMb2NrIFBhdGNoKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpbnRyb2R1Y2VzIGEgc3BpbmxvY2ssIGBjb25maWdfbG9ja2AsIHRvIHRoZSBgdmhvc3RfdmRwYWAgc3RydWN0dXJlLiBUaGUgcHVycG9zZSBpcyB0byBzZXJpYWxpemUgYWNjZXNzIHRvIHRoZSBgY29uZmlnX2N0eGAgd2l0aGluIGB2aG9zdF92ZHBhX2NvbmZpZ19jYigpYCBhbmQgcHJldmVudCBpc3N1ZXMgd2hlbiBgY29uZmlnX2N0eGAgaXMgcmVwbGFjZWQuIFRoZSBjaGFuZ2VzIHByaW1hcmlseSBmb2N1cyBvbiBtb2RpZnlpbmcgYHZob3N0X3ZkcGFfY29uZmlnX2NiYCwgYHZob3N0X3ZkcGFfY29uZmlnX3B1dGAsIGB2aG9zdF92ZHBhX3NldF9jb25maWdfY2FsbGAsIGFuZCBgdmhvc3RfdmRwYV9wcm9iZWAgdG8gY29ycmVjdGx5IHV0aWxpemUgdGhpcyBuZXcgbG9ja2luZyBtZWNoYW5pc20uXG5cbkZyb20gbXkgdW5kZXJzdGFuZGluZywgdGhpcyBpcyBhIGNsZWFuIGZpeC4gVGhlcmUgYXJlIG5vIGNoYW5nZXMgdGhhdCBpbnRyb2R1Y2UgbmV3IHVzZXItc3BhY2UgZGF0YSwgbm8gaW5mbyBsZWFrcywgYW5kIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIGNvbmNlcm5zLiBUaGUgcHJvYmxlbSBiZWluZyBhZGRyZXNzZWQgaXMgYWxtb3N0IGNlcnRhaW5seSBhIHVzZS1hZnRlci1mcmVlIG9yIHJhY2UgY29uZGl0aW9uLCB3aGljaCBpcyBwcm9iYWJseSBiZWluZyBmbGFnZ2VkIGJ5IEtBU0FOIG9yIEtDU0FOLiBUaGVyZWZvcmUsIEkgZG9uJ3Qgc2VlIGFueSByZWFzb24gdG8gYnJpbmcgS01TQU4gaW50byB0aGUgcGljdHVyZSBoZXJlLlxuXG5MZXQgbWUganVzdCBxdWlja2x5IHZlcmlmeSBteSB1bmRlcnN0YW5kaW5nLiBgdmhvc3RfdmRwYV9zZXRfY29uZmlnX2NhbGxgIGFwcGVhcnMgdG8gYmUgZ2V0dGluZyBhbiBgZmRgIGZyb20gdXNlcnNwYWNlLCBnZXR0aW5nIHRoZSBldmVudGZkIGNvbnRleHQsIGFuZCB0aGVuIHN3YXBwaW5nIHRoYXQgY29udGV4dCB3aXRoIGB2LVx1MDAzZWNvbmZpZ19jdHhgLiBUaGUgYWRkZWQgc3BpbmxvY2sgaXMgc3BlY2lmaWNhbGx5IG1lYW50IHRvIHByb3RlY3QgdGhpcyBzd2FwIG9wZXJhdGlvbiBhbmQgdGhlIHN1YnNlcXVlbnQgY2hlY2sgb2YgYHYtXHUwMDNlY29uZmlnX2N0eGAgd2l0aGluIGB2aG9zdF92ZHBhX2NvbmZpZ19jYmAuIFllcywgdGhpcyBsb29rcyBsaWtlIGEgc3RyYWlnaHRmb3J3YXJkIGNvbmN1cnJlbmN5IGlzc3VlIHJlc29sdXRpb24uXG5cblRoZXJlZm9yZSwgSSdtIGNvbmZpZGVudCB0aGF0IGBOZWVkc0tNU0FOPWZhbHNlYCBpcyB0aGUgY29ycmVjdCBzZXR0aW5nLiBJJ2xsIHByb2NlZWQgd2l0aCB0aGF0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyOTAxLCJPdXRwdXRUb2tlbnMiOjE3NSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI4NiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDEyOjM2OjE3LjQyODc2OTAwNloiLCJTZXEiOjMyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5OTIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcmVzc2VzIGEgY29uY3VycmVuY3kgaXNzdWUgKGxpa2VseSBhIHJhY2UgY29uZGl0aW9uIG9yIHVzZS1hZnRlci1mcmVlKSBieSBhZGRpbmcgYSBzcGlubG9jayAoYGNvbmZpZ19sb2NrYCkgdG8gc2VyaWFsaXplIGFjY2Vzc2VzIHRvIGB2LVxcdTAwM2Vjb25maWdfY3R4YCBpbiBgdmhvc3RfdmRwYV9jb25maWdfY2IoKWAsIGB2aG9zdF92ZHBhX2NvbmZpZ19wdXQoKWAsIGFuZCBgdmhvc3RfdmRwYV9zZXRfY29uZmlnX2NhbGwoKWAuIFRoZXNlIGNoYW5nZXMgZG8gbm90IGludHJvZHVjZSBvciBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLCBpbmZvLWxlYWtzLCBvciBjb21wbGV4IGRhdGEgc3RydWN0dXJlIGFsbG9jYXRpb25zIHRoYXQgd291bGQgcmVxdWlyZSBLTVNBTi4gVGhlIGJ1ZyBiZWluZyBmaXhlZCBhbmQgYW55IHBvdGVudGlhbCByZWdyZXNzaW9ucyB3b3VsZCBiZSByZWxhdGVkIHRvIGxvY2tpbmcsIHJhY2UgY29uZGl0aW9ucywgb3IgdXNlLWFmdGVyLWZyZWUsIHdoaWNoIGFyZSBlZmZlY3RpdmVseSBjYXVnaHQgYnkgS0FTQU4sIEtDU0FOLCBhbmQgTE9DS0RFUC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRyZXNzZXMgYSBjb25jdXJyZW5jeSBpc3N1ZSAobGlrZWx5IGEgcmFjZSBjb25kaXRpb24gb3IgdXNlLWFmdGVyLWZyZWUpIGJ5IGFkZGluZyBhIHNwaW5sb2NrIChgY29uZmlnX2xvY2tgKSB0byBzZXJpYWxpemUgYWNjZXNzZXMgdG8gYHYtXFx1MDAzZWNvbmZpZ19jdHhgIGluIGB2aG9zdF92ZHBhX2NvbmZpZ19jYigpYCwgYHZob3N0X3ZkcGFfY29uZmlnX3B1dCgpYCwgYW5kIGB2aG9zdF92ZHBhX3NldF9jb25maWdfY2FsbCgpYC4gVGhlc2UgY2hhbmdlcyBkbyBub3QgaW50cm9kdWNlIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MsIGluZm8tbGVha3MsIG9yIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmUgYWxsb2NhdGlvbnMgdGhhdCB3b3VsZCByZXF1aXJlIEtNU0FOLiBUaGUgYnVnIGJlaW5nIGZpeGVkIGFuZCBhbnkgcG90ZW50aWFsIHJlZ3Jlc3Npb25zIHdvdWxkIGJlIHJlbGF0ZWQgdG8gbG9ja2luZywgcmFjZSBjb25kaXRpb25zLCBvciB1c2UtYWZ0ZXItZnJlZSwgd2hpY2ggYXJlIGVmZmVjdGl2ZWx5IGNhdWdodCBieSBLQVNBTiwgS0NTQU4sIGFuZCBMT0NLREVQLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },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-workflowtdlxr[1] Phase: Succeeded StartedAt: 2026-08-07 13:22:05 +0000 UTC FinishedAt: 2026-08-07 13:22:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtdlxr[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-07 13:22:05 +0000 UTC FinishedAt: 2026-08-07 13:22:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtdlxr[2] Phase: Succeeded StartedAt: 2026-08-07 13:22:05 +0000 UTC FinishedAt: 2026-08-07 15:08:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtdlxr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ca10634ebcca850dec2f1507ad5bfe70b82a9c00","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VDPA","VDPA","VDPA_SIM","VDPA_SIM_NET","VDPA_SIM_BLOCK","VDPA_USER","RUNTIME_TESTING_MENU"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["vhost_vdpa_unlocked_ioctl","vhost_vdpa_release","vhost_vdpa_config_cb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ca10634ebcca850dec2f1507ad5bfe70b82a9c00","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VDPA","VDPA","VDPA_SIM","VDPA_SIM_NET","VDPA_SIM_BLOCK","VDPA_USER","RUNTIME_TESTING_MENU"],"series_id":"74c31c45-e993-4568-9369-99929eeb193d","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-07 13:22:05 +0000 UTC FinishedAt: 2026-08-07 15:08:26 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"ca10634ebcca850dec2f1507ad5bfe70b82a9c00","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VDPA","VDPA","VDPA_SIM","VDPA_SIM_NET","VDPA_SIM_BLOCK","VDPA_USER","RUNTIME_TESTING_MENU"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["vhost_vdpa_unlocked_ioctl","vhost_vdpa_release","vhost_vdpa_config_cb"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"ca10634ebcca850dec2f1507ad5bfe70b82a9c00","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VDPA","VDPA","VDPA_SIM","VDPA_SIM_NET","VDPA_SIM_BLOCK","VDPA_USER","RUNTIME_TESTING_MENU"],"series_id":"74c31c45-e993-4568-9369-99929eeb193d","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowtdlxr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ca10634ebcca850dec2f1507ad5bfe70b82a9c00","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VDPA","VDPA","VDPA_SIM","VDPA_SIM_NET","VDPA_SIM_BLOCK","VDPA_USER","RUNTIME_TESTING_MENU"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["vhost_vdpa_unlocked_ioctl","vhost_vdpa_release","vhost_vdpa_config_cb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ca10634ebcca850dec2f1507ad5bfe70b82a9c00","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VDPA","VDPA","VDPA_SIM","VDPA_SIM_NET","VDPA_SIM_BLOCK","VDPA_USER","RUNTIME_TESTING_MENU"],"series_id":"74c31c45-e993-4568-9369-99929eeb193d","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-07 13:22:05 +0000 UTC FinishedAt: 2026-08-07 13:22:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtdlxr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ca10634ebcca850dec2f1507ad5bfe70b82a9c00","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VDPA","VDPA","VDPA_SIM","VDPA_SIM_NET","VDPA_SIM_BLOCK","VDPA_USER","RUNTIME_TESTING_MENU"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["vhost_vdpa_unlocked_ioctl","vhost_vdpa_release","vhost_vdpa_config_cb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ca10634ebcca850dec2f1507ad5bfe70b82a9c00","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VDPA","VDPA","VDPA_SIM","VDPA_SIM_NET","VDPA_SIM_BLOCK","VDPA_USER","RUNTIME_TESTING_MENU"],"series_id":"74c31c45-e993-4568-9369-99929eeb193d","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-07 13:22:05 +0000 UTC FinishedAt: 2026-08-07 13:22:11 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"ca10634ebcca850dec2f1507ad5bfe70b82a9c00","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VDPA","VDPA","VDPA_SIM","VDPA_SIM_NET","VDPA_SIM_BLOCK","VDPA_USER","RUNTIME_TESTING_MENU"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},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-workflowtdlxr/series-workflowtdlxr-convert-artifact-3654738359/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowtdlxr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ca10634ebcca850dec2f1507ad5bfe70b82a9c00","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VDPA","VDPA","VDPA_SIM","VDPA_SIM_NET","VDPA_SIM_BLOCK","VDPA_USER","RUNTIME_TESTING_MENU"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["vhost_vdpa_unlocked_ioctl","vhost_vdpa_release","vhost_vdpa_config_cb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ca10634ebcca850dec2f1507ad5bfe70b82a9c00","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VDPA","VDPA","VDPA_SIM","VDPA_SIM_NET","VDPA_SIM_BLOCK","VDPA_USER","RUNTIME_TESTING_MENU"],"series_id":"74c31c45-e993-4568-9369-99929eeb193d","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-07 13:22:15 +0000 UTC FinishedAt: 2026-08-07 13:43:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtdlxr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ca10634ebcca850dec2f1507ad5bfe70b82a9c00","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VDPA","VDPA","VDPA_SIM","VDPA_SIM_NET","VDPA_SIM_BLOCK","VDPA_USER","RUNTIME_TESTING_MENU"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["vhost_vdpa_unlocked_ioctl","vhost_vdpa_release","vhost_vdpa_config_cb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ca10634ebcca850dec2f1507ad5bfe70b82a9c00","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VDPA","VDPA","VDPA_SIM","VDPA_SIM_NET","VDPA_SIM_BLOCK","VDPA_USER","RUNTIME_TESTING_MENU"],"series_id":"74c31c45-e993-4568-9369-99929eeb193d","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-07 13:22:15 +0000 UTC FinishedAt: 2026-08-07 13:43:06 +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:*7372ab07-18b7-469d-a39d-23c19563e9c7,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-workflowtdlxr/series-workflowtdlxr-convert-artifact-3654738359/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": "f2e17ac1-99d4-4b89-8244-79b491c25191", "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-workflowtdlxr/series-workflowtdlxr-build-action-50086157/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowtdlxr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ca10634ebcca850dec2f1507ad5bfe70b82a9c00","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VDPA","VDPA","VDPA_SIM","VDPA_SIM_NET","VDPA_SIM_BLOCK","VDPA_USER","RUNTIME_TESTING_MENU"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["vhost_vdpa_unlocked_ioctl","vhost_vdpa_release","vhost_vdpa_config_cb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ca10634ebcca850dec2f1507ad5bfe70b82a9c00","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VDPA","VDPA","VDPA_SIM","VDPA_SIM_NET","VDPA_SIM_BLOCK","VDPA_USER","RUNTIME_TESTING_MENU"],"series_id":"74c31c45-e993-4568-9369-99929eeb193d","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-07 13:22:15 +0000 UTC FinishedAt: 2026-08-07 13:42:26 +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:*7372ab07-18b7-469d-a39d-23c19563e9c7,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-workflowtdlxr/series-workflowtdlxr-convert-artifact-3654738359/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": "f2e17ac1-99d4-4b89-8244-79b491c25191", "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-workflowtdlxr/series-workflowtdlxr-build-action-50086157/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowtdlxr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ca10634ebcca850dec2f1507ad5bfe70b82a9c00","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VDPA","VDPA","VDPA_SIM","VDPA_SIM_NET","VDPA_SIM_BLOCK","VDPA_USER","RUNTIME_TESTING_MENU"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["vhost_vdpa_unlocked_ioctl","vhost_vdpa_release","vhost_vdpa_config_cb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ca10634ebcca850dec2f1507ad5bfe70b82a9c00","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VDPA","VDPA","VDPA_SIM","VDPA_SIM_NET","VDPA_SIM_BLOCK","VDPA_USER","RUNTIME_TESTING_MENU"],"series_id":"74c31c45-e993-4568-9369-99929eeb193d","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-07 13:43:06 +0000 UTC FinishedAt: 2026-08-07 13:43:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtdlxr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ca10634ebcca850dec2f1507ad5bfe70b82a9c00","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VDPA","VDPA","VDPA_SIM","VDPA_SIM_NET","VDPA_SIM_BLOCK","VDPA_USER","RUNTIME_TESTING_MENU"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["vhost_vdpa_unlocked_ioctl","vhost_vdpa_release","vhost_vdpa_config_cb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ca10634ebcca850dec2f1507ad5bfe70b82a9c00","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VDPA","VDPA","VDPA_SIM","VDPA_SIM_NET","VDPA_SIM_BLOCK","VDPA_USER","RUNTIME_TESTING_MENU"],"series_id":"74c31c45-e993-4568-9369-99929eeb193d","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-07 13:43:06 +0000 UTC FinishedAt: 2026-08-07 13:43:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtdlxr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ca10634ebcca850dec2f1507ad5bfe70b82a9c00","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VDPA","VDPA","VDPA_SIM","VDPA_SIM_NET","VDPA_SIM_BLOCK","VDPA_USER","RUNTIME_TESTING_MENU"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["vhost_vdpa_unlocked_ioctl","vhost_vdpa_release","vhost_vdpa_config_cb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ca10634ebcca850dec2f1507ad5bfe70b82a9c00","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VDPA","VDPA","VDPA_SIM","VDPA_SIM_NET","VDPA_SIM_BLOCK","VDPA_USER","RUNTIME_TESTING_MENU"],"series_id":"74c31c45-e993-4568-9369-99929eeb193d","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-07 13:43:06 +0000 UTC FinishedAt: 2026-08-07 13:43:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtdlxr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ca10634ebcca850dec2f1507ad5bfe70b82a9c00","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VDPA","VDPA","VDPA_SIM","VDPA_SIM_NET","VDPA_SIM_BLOCK","VDPA_USER","RUNTIME_TESTING_MENU"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["vhost_vdpa_unlocked_ioctl","vhost_vdpa_release","vhost_vdpa_config_cb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ca10634ebcca850dec2f1507ad5bfe70b82a9c00","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VDPA","VDPA","VDPA_SIM","VDPA_SIM_NET","VDPA_SIM_BLOCK","VDPA_USER","RUNTIME_TESTING_MENU"],"series_id":"74c31c45-e993-4568-9369-99929eeb193d","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-07 13:43:06 +0000 UTC FinishedAt: 2026-08-07 13:43:10 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"ca10634ebcca850dec2f1507ad5bfe70b82a9c00","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VDPA","VDPA","VDPA_SIM","VDPA_SIM_NET","VDPA_SIM_BLOCK","VDPA_USER","RUNTIME_TESTING_MENU"],"series_id":"74c31c45-e993-4568-9369-99929eeb193d","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},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-workflowtdlxr/series-workflowtdlxr-convert-artifact-4090914534/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowtdlxr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ca10634ebcca850dec2f1507ad5bfe70b82a9c00","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VDPA","VDPA","VDPA_SIM","VDPA_SIM_NET","VDPA_SIM_BLOCK","VDPA_USER","RUNTIME_TESTING_MENU"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["vhost_vdpa_unlocked_ioctl","vhost_vdpa_release","vhost_vdpa_config_cb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ca10634ebcca850dec2f1507ad5bfe70b82a9c00","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VDPA","VDPA","VDPA_SIM","VDPA_SIM_NET","VDPA_SIM_BLOCK","VDPA_USER","RUNTIME_TESTING_MENU"],"series_id":"74c31c45-e993-4568-9369-99929eeb193d","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-07 13:43:16 +0000 UTC FinishedAt: 2026-08-07 13:45:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtdlxr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ca10634ebcca850dec2f1507ad5bfe70b82a9c00","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VDPA","VDPA","VDPA_SIM","VDPA_SIM_NET","VDPA_SIM_BLOCK","VDPA_USER","RUNTIME_TESTING_MENU"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["vhost_vdpa_unlocked_ioctl","vhost_vdpa_release","vhost_vdpa_config_cb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ca10634ebcca850dec2f1507ad5bfe70b82a9c00","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VDPA","VDPA","VDPA_SIM","VDPA_SIM_NET","VDPA_SIM_BLOCK","VDPA_USER","RUNTIME_TESTING_MENU"],"series_id":"74c31c45-e993-4568-9369-99929eeb193d","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-07 13:43:16 +0000 UTC FinishedAt: 2026-08-07 13:44:58 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*f2e17ac1-99d4-4b89-8244-79b491c25191,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-workflowtdlxr/series-workflowtdlxr-build-action-50086157/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-workflowtdlxr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ca10634ebcca850dec2f1507ad5bfe70b82a9c00","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VDPA","VDPA","VDPA_SIM","VDPA_SIM_NET","VDPA_SIM_BLOCK","VDPA_USER","RUNTIME_TESTING_MENU"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["vhost_vdpa_unlocked_ioctl","vhost_vdpa_release","vhost_vdpa_config_cb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ca10634ebcca850dec2f1507ad5bfe70b82a9c00","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VDPA","VDPA","VDPA_SIM","VDPA_SIM_NET","VDPA_SIM_BLOCK","VDPA_USER","RUNTIME_TESTING_MENU"],"series_id":"74c31c45-e993-4568-9369-99929eeb193d","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-07 13:45:08 +0000 UTC FinishedAt: 2026-08-07 13:45:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtdlxr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ca10634ebcca850dec2f1507ad5bfe70b82a9c00","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VDPA","VDPA","VDPA_SIM","VDPA_SIM_NET","VDPA_SIM_BLOCK","VDPA_USER","RUNTIME_TESTING_MENU"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["vhost_vdpa_unlocked_ioctl","vhost_vdpa_release","vhost_vdpa_config_cb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ca10634ebcca850dec2f1507ad5bfe70b82a9c00","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VDPA","VDPA","VDPA_SIM","VDPA_SIM_NET","VDPA_SIM_BLOCK","VDPA_USER","RUNTIME_TESTING_MENU"],"series_id":"74c31c45-e993-4568-9369-99929eeb193d","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-07 13:45:08 +0000 UTC FinishedAt: 2026-08-07 13:45:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtdlxr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ca10634ebcca850dec2f1507ad5bfe70b82a9c00","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VDPA","VDPA","VDPA_SIM","VDPA_SIM_NET","VDPA_SIM_BLOCK","VDPA_USER","RUNTIME_TESTING_MENU"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["vhost_vdpa_unlocked_ioctl","vhost_vdpa_release","vhost_vdpa_config_cb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ca10634ebcca850dec2f1507ad5bfe70b82a9c00","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VDPA","VDPA","VDPA_SIM","VDPA_SIM_NET","VDPA_SIM_BLOCK","VDPA_USER","RUNTIME_TESTING_MENU"],"series_id":"74c31c45-e993-4568-9369-99929eeb193d","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-07 13:45:08 +0000 UTC FinishedAt: 2026-08-07 14:01:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtdlxr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ca10634ebcca850dec2f1507ad5bfe70b82a9c00","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VDPA","VDPA","VDPA_SIM","VDPA_SIM_NET","VDPA_SIM_BLOCK","VDPA_USER","RUNTIME_TESTING_MENU"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["vhost_vdpa_unlocked_ioctl","vhost_vdpa_release","vhost_vdpa_config_cb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ca10634ebcca850dec2f1507ad5bfe70b82a9c00","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VDPA","VDPA","VDPA_SIM","VDPA_SIM_NET","VDPA_SIM_BLOCK","VDPA_USER","RUNTIME_TESTING_MENU"],"series_id":"74c31c45-e993-4568-9369-99929eeb193d","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-07 13:45:08 +0000 UTC FinishedAt: 2026-08-07 14:01:25 +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:*7372ab07-18b7-469d-a39d-23c19563e9c7,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-workflowtdlxr/series-workflowtdlxr-convert-artifact-4090914534/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": "3f691c00-140c-42ac-9b81-a5f8889084b0", "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-workflowtdlxr/series-workflowtdlxr-build-action-3836681386/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowtdlxr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ca10634ebcca850dec2f1507ad5bfe70b82a9c00","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VDPA","VDPA","VDPA_SIM","VDPA_SIM_NET","VDPA_SIM_BLOCK","VDPA_USER","RUNTIME_TESTING_MENU"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["vhost_vdpa_unlocked_ioctl","vhost_vdpa_release","vhost_vdpa_config_cb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ca10634ebcca850dec2f1507ad5bfe70b82a9c00","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VDPA","VDPA","VDPA_SIM","VDPA_SIM_NET","VDPA_SIM_BLOCK","VDPA_USER","RUNTIME_TESTING_MENU"],"series_id":"74c31c45-e993-4568-9369-99929eeb193d","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-07 13:45:08 +0000 UTC FinishedAt: 2026-08-07 14:01:15 +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:*7372ab07-18b7-469d-a39d-23c19563e9c7,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-workflowtdlxr/series-workflowtdlxr-convert-artifact-4090914534/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": "3f691c00-140c-42ac-9b81-a5f8889084b0", "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-workflowtdlxr/series-workflowtdlxr-build-action-3836681386/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowtdlxr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ca10634ebcca850dec2f1507ad5bfe70b82a9c00","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VDPA","VDPA","VDPA_SIM","VDPA_SIM_NET","VDPA_SIM_BLOCK","VDPA_USER","RUNTIME_TESTING_MENU"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["vhost_vdpa_unlocked_ioctl","vhost_vdpa_release","vhost_vdpa_config_cb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ca10634ebcca850dec2f1507ad5bfe70b82a9c00","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VDPA","VDPA","VDPA_SIM","VDPA_SIM_NET","VDPA_SIM_BLOCK","VDPA_USER","RUNTIME_TESTING_MENU"],"series_id":"74c31c45-e993-4568-9369-99929eeb193d","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-07 14:01:25 +0000 UTC FinishedAt: 2026-08-07 14:01:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtdlxr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ca10634ebcca850dec2f1507ad5bfe70b82a9c00","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VDPA","VDPA","VDPA_SIM","VDPA_SIM_NET","VDPA_SIM_BLOCK","VDPA_USER","RUNTIME_TESTING_MENU"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["vhost_vdpa_unlocked_ioctl","vhost_vdpa_release","vhost_vdpa_config_cb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ca10634ebcca850dec2f1507ad5bfe70b82a9c00","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VDPA","VDPA","VDPA_SIM","VDPA_SIM_NET","VDPA_SIM_BLOCK","VDPA_USER","RUNTIME_TESTING_MENU"],"series_id":"74c31c45-e993-4568-9369-99929eeb193d","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-07 14:01:25 +0000 UTC FinishedAt: 2026-08-07 14:01:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtdlxr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ca10634ebcca850dec2f1507ad5bfe70b82a9c00","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VDPA","VDPA","VDPA_SIM","VDPA_SIM_NET","VDPA_SIM_BLOCK","VDPA_USER","RUNTIME_TESTING_MENU"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["vhost_vdpa_unlocked_ioctl","vhost_vdpa_release","vhost_vdpa_config_cb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ca10634ebcca850dec2f1507ad5bfe70b82a9c00","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VDPA","VDPA","VDPA_SIM","VDPA_SIM_NET","VDPA_SIM_BLOCK","VDPA_USER","RUNTIME_TESTING_MENU"],"series_id":"74c31c45-e993-4568-9369-99929eeb193d","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-07 14:01:25 +0000 UTC FinishedAt: 2026-08-07 14:03:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtdlxr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ca10634ebcca850dec2f1507ad5bfe70b82a9c00","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VDPA","VDPA","VDPA_SIM","VDPA_SIM_NET","VDPA_SIM_BLOCK","VDPA_USER","RUNTIME_TESTING_MENU"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["vhost_vdpa_unlocked_ioctl","vhost_vdpa_release","vhost_vdpa_config_cb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ca10634ebcca850dec2f1507ad5bfe70b82a9c00","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VDPA","VDPA","VDPA_SIM","VDPA_SIM_NET","VDPA_SIM_BLOCK","VDPA_USER","RUNTIME_TESTING_MENU"],"series_id":"74c31c45-e993-4568-9369-99929eeb193d","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-07 14:01:25 +0000 UTC FinishedAt: 2026-08-07 14:03:28 +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:*3f691c00-140c-42ac-9b81-a5f8889084b0,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-workflowtdlxr/series-workflowtdlxr-build-action-3836681386/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-workflowtdlxr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ca10634ebcca850dec2f1507ad5bfe70b82a9c00","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VDPA","VDPA","VDPA_SIM","VDPA_SIM_NET","VDPA_SIM_BLOCK","VDPA_USER","RUNTIME_TESTING_MENU"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["vhost_vdpa_unlocked_ioctl","vhost_vdpa_release","vhost_vdpa_config_cb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ca10634ebcca850dec2f1507ad5bfe70b82a9c00","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VDPA","VDPA","VDPA_SIM","VDPA_SIM_NET","VDPA_SIM_BLOCK","VDPA_USER","RUNTIME_TESTING_MENU"],"series_id":"74c31c45-e993-4568-9369-99929eeb193d","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-07 14:03:38 +0000 UTC FinishedAt: 2026-08-07 15:08:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtdlxr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ca10634ebcca850dec2f1507ad5bfe70b82a9c00","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VDPA","VDPA","VDPA_SIM","VDPA_SIM_NET","VDPA_SIM_BLOCK","VDPA_USER","RUNTIME_TESTING_MENU"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["vhost_vdpa_unlocked_ioctl","vhost_vdpa_release","vhost_vdpa_config_cb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ca10634ebcca850dec2f1507ad5bfe70b82a9c00","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VDPA","VDPA","VDPA_SIM","VDPA_SIM_NET","VDPA_SIM_BLOCK","VDPA_USER","RUNTIME_TESTING_MENU"],"series_id":"74c31c45-e993-4568-9369-99929eeb193d","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-07 14:03:38 +0000 UTC FinishedAt: 2026-08-07 15:08:26 +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-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["vhost_vdpa_unlocked_ioctl","vhost_vdpa_release","vhost_vdpa_config_cb"],"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:*f2e17ac1-99d4-4b89-8244-79b491c25191,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*3f691c00-140c-42ac-9b81-a5f8889084b0,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-workflowtdlxr/series-workflowtdlxr-build-action-50086157/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-workflowtdlxr/series-workflowtdlxr-build-action-3836681386/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowtdlxr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ca10634ebcca850dec2f1507ad5bfe70b82a9c00","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VDPA","VDPA","VDPA_SIM","VDPA_SIM_NET","VDPA_SIM_BLOCK","VDPA_USER","RUNTIME_TESTING_MENU"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["vhost_vdpa_unlocked_ioctl","vhost_vdpa_release","vhost_vdpa_config_cb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ca10634ebcca850dec2f1507ad5bfe70b82a9c00","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VDPA","VDPA","VDPA_SIM","VDPA_SIM_NET","VDPA_SIM_BLOCK","VDPA_USER","RUNTIME_TESTING_MENU"],"series_id":"74c31c45-e993-4568-9369-99929eeb193d","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-07 14:03:38 +0000 UTC FinishedAt: 2026-08-07 14:03:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtdlxr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ca10634ebcca850dec2f1507ad5bfe70b82a9c00","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VDPA","VDPA","VDPA_SIM","VDPA_SIM_NET","VDPA_SIM_BLOCK","VDPA_USER","RUNTIME_TESTING_MENU"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["vhost_vdpa_unlocked_ioctl","vhost_vdpa_release","vhost_vdpa_config_cb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ca10634ebcca850dec2f1507ad5bfe70b82a9c00","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VDPA","VDPA","VDPA_SIM","VDPA_SIM_NET","VDPA_SIM_BLOCK","VDPA_USER","RUNTIME_TESTING_MENU"],"series_id":"74c31c45-e993-4568-9369-99929eeb193d","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-07 14:03:38 +0000 UTC FinishedAt: 2026-08-07 14:03:42 +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-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["vhost_vdpa_unlocked_ioctl","vhost_vdpa_release","vhost_vdpa_config_cb"],"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-workflowtdlxr/series-workflowtdlxr-convert-artifact-2214926891/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowtdlxr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ca10634ebcca850dec2f1507ad5bfe70b82a9c00","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VDPA","VDPA","VDPA_SIM","VDPA_SIM_NET","VDPA_SIM_BLOCK","VDPA_USER","RUNTIME_TESTING_MENU"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["vhost_vdpa_unlocked_ioctl","vhost_vdpa_release","vhost_vdpa_config_cb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ca10634ebcca850dec2f1507ad5bfe70b82a9c00","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VDPA","VDPA","VDPA_SIM","VDPA_SIM_NET","VDPA_SIM_BLOCK","VDPA_USER","RUNTIME_TESTING_MENU"],"series_id":"74c31c45-e993-4568-9369-99929eeb193d","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-07 14:03:38 +0000 UTC FinishedAt: 2026-08-07 14:03:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtdlxr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ca10634ebcca850dec2f1507ad5bfe70b82a9c00","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VDPA","VDPA","VDPA_SIM","VDPA_SIM_NET","VDPA_SIM_BLOCK","VDPA_USER","RUNTIME_TESTING_MENU"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["vhost_vdpa_unlocked_ioctl","vhost_vdpa_release","vhost_vdpa_config_cb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ca10634ebcca850dec2f1507ad5bfe70b82a9c00","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VDPA","VDPA","VDPA_SIM","VDPA_SIM_NET","VDPA_SIM_BLOCK","VDPA_USER","RUNTIME_TESTING_MENU"],"series_id":"74c31c45-e993-4568-9369-99929eeb193d","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-07 14:03:38 +0000 UTC FinishedAt: 2026-08-07 14:03:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtdlxr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ca10634ebcca850dec2f1507ad5bfe70b82a9c00","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VDPA","VDPA","VDPA_SIM","VDPA_SIM_NET","VDPA_SIM_BLOCK","VDPA_USER","RUNTIME_TESTING_MENU"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["vhost_vdpa_unlocked_ioctl","vhost_vdpa_release","vhost_vdpa_config_cb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ca10634ebcca850dec2f1507ad5bfe70b82a9c00","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VDPA","VDPA","VDPA_SIM","VDPA_SIM_NET","VDPA_SIM_BLOCK","VDPA_USER","RUNTIME_TESTING_MENU"],"series_id":"74c31c45-e993-4568-9369-99929eeb193d","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-07 14:03:38 +0000 UTC FinishedAt: 2026-08-07 14:03:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtdlxr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ca10634ebcca850dec2f1507ad5bfe70b82a9c00","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VDPA","VDPA","VDPA_SIM","VDPA_SIM_NET","VDPA_SIM_BLOCK","VDPA_USER","RUNTIME_TESTING_MENU"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["vhost_vdpa_unlocked_ioctl","vhost_vdpa_release","vhost_vdpa_config_cb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ca10634ebcca850dec2f1507ad5bfe70b82a9c00","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VDPA","VDPA","VDPA_SIM","VDPA_SIM_NET","VDPA_SIM_BLOCK","VDPA_USER","RUNTIME_TESTING_MENU"],"series_id":"74c31c45-e993-4568-9369-99929eeb193d","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-07 14:03:48 +0000 UTC FinishedAt: 2026-08-07 15:08:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtdlxr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ca10634ebcca850dec2f1507ad5bfe70b82a9c00","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VDPA","VDPA","VDPA_SIM","VDPA_SIM_NET","VDPA_SIM_BLOCK","VDPA_USER","RUNTIME_TESTING_MENU"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["vhost_vdpa_unlocked_ioctl","vhost_vdpa_release","vhost_vdpa_config_cb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ca10634ebcca850dec2f1507ad5bfe70b82a9c00","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VDPA","VDPA","VDPA_SIM","VDPA_SIM_NET","VDPA_SIM_BLOCK","VDPA_USER","RUNTIME_TESTING_MENU"],"series_id":"74c31c45-e993-4568-9369-99929eeb193d","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-07 14:03:48 +0000 UTC FinishedAt: 2026-08-07 15:08:16 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*f2e17ac1-99d4-4b89-8244-79b491c25191,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*3f691c00-140c-42ac-9b81-a5f8889084b0,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-workflowtdlxr/series-workflowtdlxr-build-action-50086157/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-workflowtdlxr/series-workflowtdlxr-build-action-3836681386/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-workflowtdlxr/series-workflowtdlxr-convert-artifact-2214926891/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,}