Name: series-workflow9nlt2 Phase: Succeeded StartedAt: 2026-08-31 08:25:14 +0000 UTC FinishedAt: 2026-08-31 09:12:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9nlt2[0] Phase: Succeeded StartedAt: 2026-08-31 08:25:14 +0000 UTC FinishedAt: 2026-08-31 08:28:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9nlt2[0].run-triage Phase: Succeeded StartedAt: 2026-08-31 08:25:14 +0000 UTC FinishedAt: 2026-08-31 08:28:10 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "cf72cbb39da84b6f02f90c07f33b102fc10b16f0", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM", "VIRTUALIZATION" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "cf72cbb39da84b6f02f90c07f33b102fc10b16f0", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM", "VIRTUALIZATION" ], "series_id": "b03c2f29-3fac-4960-800e-c9cd7723e89c" }, "track": "KASAN", "fuzz": { "focus": [ "kvm" ], "focus_symbols": [ "vgic_v3_set_redist_base", "vgic_register_redist_iodev", "vgic_unregister_redist_iodev" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDA4OjI2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTSYjMzQ7LAogICAgJiMzNDtWSVJUVUFMSVpBVElPTiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3ZnaWNfdjNfc2V0X3JlZGlzdF9iYXNlJiMzNDssCiAgICAmIzM0O3ZnaWNfcmVnaXN0ZXJfcmVkaXN0X2lvZGV2JiMzNDssCiAgICAmIzM0O3ZnaWNfdW5yZWdpc3Rlcl9yZWRpc3RfaW9kZXYmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBlcnJvciByb2xsYmFjayBoYW5kbGluZyBkdXJpbmcgS1ZNIEFSTTY0IFZHSUN2MyByZWRpc3RyaWJ1dG9yIGlvZGV2IHJlZ2lzdHJhdGlvbiAoaGFuZGxpbmcgZmFpbGVkIHJlZ2lzdHJhdGlvbiBjbGVhbnVwLCByZXNldHRpbmcgdmdpY19jcHUgcmVkaXN0cmlidXRvciBwb2ludGVycywgYW5kIGRlY3JlbWVudGluZyBmcmVlX2luZGV4IGFwcHJvcHJpYXRlbHkpLiBUaGUgY2hhbmdlcyBkbyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSBhbnkgbWVtb3J5IGFsbG9jYXRpb25zLCBkYXRhIHN0cnVjdHVyZXMgY29waWVkIHRvIHVzZXJzcGFjZSwgb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgYWNjZXNzZXMuIEFueSBwb3RlbnRpYWwgY29uY3VycmVuY3ksIGxvY2sgb3JkZXJpbmcsIG9yIGludmFsaWQgZGVyZWZlcmVuY2UgaXNzdWVzIGFyZSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIHNhbml0aXplcnMgKExPQ0tERVAvS0FTQU4pLiBUaGVyZWZvcmUsIHRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgaW5mb3JtYXRpb24gbGVha3MgdGhhdCB3b3VsZCByZXF1aXJlIGEgS01TQU4gZnV6emluZyBzZXNzaW9uLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBlcnJvciB1bndpbmRpbmcgYW5kIHJvbGxiYWNrIGhhbmRsaW5nIHdoZW4gcmVnaXN0ZXJpbmcgVkdJQ3YzIHJlZGlzdHJpYnV0b3IgSS9PIGRldmljZXMgaW4gQVJNNjQgS1ZNLiBJdCBlbnN1cmVzIHRoYXQgZmFpbGVkIHJlZGlzdHJpYnV0b3IgcmVnaXN0cmF0aW9uIHByb3Blcmx5IHJvbGxzIGJhY2sgdGhlIGFzc2lnbmVkIHJlZ2lvbiBzdGF0ZSBhbmQgb25seSB0ZWFycyBkb3duIFZDUFVzIGFzc29jaWF0ZWQgd2l0aCB0aGUgZmFpbGluZyByZWdpb24uIFRoZXNlIGNvZGUgcGF0aHMgYXJlIHJlYWNoYWJsZSB2aWEgS1ZNIGlvY3RscyBhbmQgd29ydGggZnV6emluZyBmb3IgY29uY3VycmVuY3kgYW5kIHN0YXRlIG1hbmFnZW1lbnQgYnVncy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAwODoyNjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGFjOGZjN2E1NGNmMTcyMjI3NGM4MzQyY2YxZjA4NjJhMTQ1OTliNjhcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEF1ZyAzMSAwODoyNjoyMyAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtbW1pby12My5jIGIvYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLW1taW8tdjMuY1xuaW5kZXggNTkxM2EyMGQ4MzAxOS4uNzdhYTg0MzM3MDFhMSAxMDA2NDRcbi0tLSBhL2FyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1tbWlvLXYzLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1tbWlvLXYzLmNcbkBAIC03NjYsNiAmIzQzOzc2NiwxOSBAQCB1bnNpZ25lZCBpbnQgdmdpY192M19pbml0X2Rpc3RfaW9kZXYoc3RydWN0IHZnaWNfaW9fZGV2aWNlICpkZXYpXG4gXHRyZXR1cm4gU1pfNjRLO1xuIH1cbiBcbiYjNDM7c3RhdGljIHZvaWQgdmdpY191bmRvX3JlZGlzdF9hc3NpZ25tZW50KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB2Z2ljX2NwdSAqdmdpY19jcHUgPSBcdTAwMjZ2Y3B1LVx1MDAzZWFyY2gudmdpY19jcHU7XG4mIzQzO1xuJiM0MztcdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXHUwMDI2dmNwdS1cdTAwM2Vrdm0tXHUwMDNlc2xvdHNfbG9jayk7XG4mIzQzO1xuJiM0MztcdGd1YXJkKG11dGV4KShcdTAwMjZ2Y3B1LVx1MDAzZWt2bS1cdTAwM2VhcmNoLmNvbmZpZ19sb2NrKTtcbiYjNDM7XG4mIzQzO1x0dmdpY19jcHUtXHUwMDNlcmRyZWctXHUwMDNlZnJlZV9pbmRleC0tO1xuJiM0MztcdHZnaWNfY3B1LVx1MDAzZXJkcmVnID0gTlVMTDtcbiYjNDM7XHR2Z2ljX2NwdS1cdTAwM2VyZF9pb2Rldi5iYXNlX2FkZHIgPSBWR0lDX0FERFJfVU5ERUY7XG4mIzQzO31cbiYjNDM7XG4gLyoqXG4gICogdmdpY19yZWdpc3Rlcl9yZWRpc3RfaW9kZXYgLSByZWdpc3RlciBhIHNpbmdsZSByZWRpc3QgaW9kZXZcbiAgKiBAdmNwdTogICAgVGhlIFZDUFUgdG8gd2hpY2ggdGhlIHJlZGlzdHJpYnV0b3IgYmVsb25nc1xuQEAgLTgxOCwxNiAmIzQzOzgzMSwxNyBAQCBpbnQgdmdpY19yZWdpc3Rlcl9yZWRpc3RfaW9kZXYoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFx0cmRfZGV2LVx1MDAzZW5yX3JlZ2lvbnMgPSBBUlJBWV9TSVpFKHZnaWNfdjNfcmRfcmVnaXN0ZXJzKTtcbiBcdHJkX2Rldi1cdTAwM2VyZWRpc3RfdmNwdSA9IHZjcHU7XG4gXG4mIzQzO1x0LyogUHJvdGVjdGVkIGJ5IHNsb3RzX2xvY2sgKi9cbiYjNDM7XHRyZHJlZy1cdTAwM2VmcmVlX2luZGV4JiM0MzsmIzQzOztcbiYjNDM7XG4gXHRtdXRleF91bmxvY2soXHUwMDI2a3ZtLVx1MDAzZWFyY2guY29uZmlnX2xvY2spO1xuIFxuIFx0cmV0ID0ga3ZtX2lvX2J1c19yZWdpc3Rlcl9kZXYoa3ZtLCBLVk1fTU1JT19CVVMsIHJkX2Jhc2UsXG4gXHRcdFx0XHQgICAgICAyICogU1pfNjRLLCBcdTAwMjZyZF9kZXYtXHUwMDNlZGV2KTtcbiBcdGlmIChyZXQpXG4tXHRcdHJldHVybiByZXQ7XG4mIzQzO1x0XHR2Z2ljX3VuZG9fcmVkaXN0X2Fzc2lnbm1lbnQodmNwdSk7XG4gXG4tXHQvKiBQcm90ZWN0ZWQgYnkgc2xvdHNfbG9jayAqL1xuLVx0cmRyZWctXHUwMDNlZnJlZV9pbmRleCYjNDM7JiM0Mzs7XG4tXHRyZXR1cm4gMDtcbiYjNDM7XHRyZXR1cm4gcmV0O1xuIFxuIG91dF91bmxvY2s6XG4gXHRtdXRleF91bmxvY2soXHUwMDI2a3ZtLVx1MDAzZWFyY2guY29uZmlnX2xvY2spO1xuQEAgLTg0MSw3ICYjNDM7ODU1LDI1IEBAIHZvaWQgdmdpY191bnJlZ2lzdGVyX3JlZGlzdF9pb2RldihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXHRrdm1faW9fYnVzX3VucmVnaXN0ZXJfZGV2KHZjcHUtXHUwMDNla3ZtLCBLVk1fTU1JT19CVVMsIFx1MDAyNnJkX2Rldi1cdTAwM2VkZXYpO1xuIH1cbiBcbi1zdGF0aWMgaW50IHZnaWNfcmVnaXN0ZXJfYWxsX3JlZGlzdF9pb2RldnMoc3RydWN0IGt2bSAqa3ZtKVxuJiM0MztzdGF0aWMgdm9pZCB2Z2ljX3JvbGxiYWNrX3JlZGlzdF9pb2RldihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXG4mIzQzO1x0XHRcdFx0ICAgICAgIHN0cnVjdCB2Z2ljX3JlZGlzdF9yZWdpb24gKnJkcmVnKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHZnaWNfY3B1ICp2Z2ljX2NwdSA9IFx1MDAyNnZjcHUtXHUwMDNlYXJjaC52Z2ljX2NwdTtcbiYjNDM7XG4mIzQzO1x0bG9ja2RlcF9hc3NlcnRfaGVsZChcdTAwMjZ2Y3B1LVx1MDAzZWt2bS1cdTAwM2VzbG90c19sb2NrKTtcbiYjNDM7XG4mIzQzO1x0aWYgKHZnaWNfY3B1LVx1MDAzZXJkcmVnICE9IHJkcmVnKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHR2Z2ljX3VucmVnaXN0ZXJfcmVkaXN0X2lvZGV2KHZjcHUpO1xuJiM0MztcbiYjNDM7XHRndWFyZChtdXRleCkoXHUwMDI2dmNwdS1cdTAwM2Vrdm0tXHUwMDNlYXJjaC5jb25maWdfbG9jayk7XG4mIzQzO1x0dmdpY19jcHUtXHUwMDNlcmRyZWcgPSBOVUxMO1xuJiM0MztcdHZnaWNfY3B1LVx1MDAzZXJkX2lvZGV2LmJhc2VfYWRkciA9IFZHSUNfQUREUl9VTkRFRjtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCB2Z2ljX3JlZ2lzdGVyX2FsbF9yZWRpc3RfaW9kZXZzKHN0cnVjdCBrdm0gKmt2bSxcbiYjNDM7XHRcdFx0XHRcdCAgIHN0cnVjdCB2Z2ljX3JlZGlzdF9yZWdpb24gKnJkcmVnKVxuIHtcbiBcdHN0cnVjdCBrdm1fdmNwdSAqdmNwdTtcbiBcdHVuc2lnbmVkIGxvbmcgYztcbkBAIC04NTYsMTIgJiM0Mzs4ODgsMTIgQEAgc3RhdGljIGludCB2Z2ljX3JlZ2lzdGVyX2FsbF9yZWRpc3RfaW9kZXZzKHN0cnVjdCBrdm0gKmt2bSlcbiBcdH1cbiBcbiBcdGlmIChyZXQpIHtcbi1cdFx0LyogVGhlIGN1cnJlbnQgYyBmYWlsZWQsIHNvIGl0ZXJhdGUgb3ZlciB0aGUgcHJldmlvdXMgb25lcy4gKi9cbiYjNDM7XHRcdC8qIFVuZG8gYXNzaWdubWVudHMgbWFkZSBmcm9tIHRoZSByZWdpb24gYmVpbmcgYWRkZWQuICovXG4gXHRcdGludCBpO1xuIFxuIFx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBjOyBpJiM0MzsmIzQzOykge1xuIFx0XHRcdHZjcHUgPSBrdm1fZ2V0X3ZjcHUoa3ZtLCBpKTtcbi1cdFx0XHR2Z2ljX3VucmVnaXN0ZXJfcmVkaXN0X2lvZGV2KHZjcHUpO1xuJiM0MztcdFx0XHR2Z2ljX3JvbGxiYWNrX3JlZGlzdF9pb2Rldih2Y3B1LCByZHJlZyk7XG4gXHRcdH1cbiBcdH1cbiBcbkBAIC05NzAsMTAgJiM0MzsxMDAyLDEzIEBAIHZvaWQgdmdpY192M19mcmVlX3JlZGlzdF9yZWdpb24oc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3QgdmdpY19yZWRpc3RfcmVnaW9uICpyZHJlXG4gXG4gaW50IHZnaWNfdjNfc2V0X3JlZGlzdF9iYXNlKHN0cnVjdCBrdm0gKmt2bSwgdTMyIGluZGV4LCB1NjQgYWRkciwgdTMyIGNvdW50KVxuIHtcbiYjNDM7XHRzdHJ1Y3QgdmdpY19yZWRpc3RfcmVnaW9uICpyZHJlZztcbiBcdGludCByZXQ7XG4gXG4gXHRtdXRleF9sb2NrKFx1MDAyNmt2bS1cdTAwM2VhcmNoLmNvbmZpZ19sb2NrKTtcbiBcdHJldCA9IHZnaWNfdjNfYWxsb2NfcmVkaXN0X3JlZ2lvbihrdm0sIGluZGV4LCBhZGRyLCBjb3VudCk7XG4mIzQzO1x0aWYgKCFyZXQpXG4mIzQzO1x0XHRyZHJlZyA9IHZnaWNfdjNfcmRpc3RfcmVnaW9uX2Zyb21faW5kZXgoa3ZtLCBpbmRleCk7XG4gXHRtdXRleF91bmxvY2soXHUwMDI2a3ZtLVx1MDAzZWFyY2guY29uZmlnX2xvY2spO1xuIFx0aWYgKHJldClcbiBcdFx0cmV0dXJuIHJldDtcbkBAIC05ODIsMTIgJiM0MzsxMDE3LDkgQEAgaW50IHZnaWNfdjNfc2V0X3JlZGlzdF9iYXNlKHN0cnVjdCBrdm0gKmt2bSwgdTMyIGluZGV4LCB1NjQgYWRkciwgdTMyIGNvdW50KVxuIFx0ICogUmVnaXN0ZXIgaW9kZXZzIGZvciBlYWNoIGV4aXN0aW5nIFZDUFUuICBBZGRpbmcgbW9yZSBWQ1BVc1xuIFx0ICogYWZ0ZXJ3YXJkcyB3aWxsIHJlZ2lzdGVyIHRoZSBpb2RldnMgd2hlbiBuZWVkZWQuXG4gXHQgKi9cbi1cdHJldCA9IHZnaWNfcmVnaXN0ZXJfYWxsX3JlZGlzdF9pb2RldnMoa3ZtKTtcbiYjNDM7XHRyZXQgPSB2Z2ljX3JlZ2lzdGVyX2FsbF9yZWRpc3RfaW9kZXZzKGt2bSwgcmRyZWcpO1xuIFx0aWYgKHJldCkge1xuLVx0XHRzdHJ1Y3QgdmdpY19yZWRpc3RfcmVnaW9uICpyZHJlZztcbi1cbiBcdFx0bXV0ZXhfbG9jayhcdTAwMjZrdm0tXHUwMDNlYXJjaC5jb25maWdfbG9jayk7XG4tXHRcdHJkcmVnID0gdmdpY192M19yZGlzdF9yZWdpb25fZnJvbV9pbmRleChrdm0sIGluZGV4KTtcbiBcdFx0dmdpY192M19mcmVlX3JlZGlzdF9yZWdpb24oa3ZtLCByZHJlZyk7XG4gXHRcdG11dGV4X3VubG9jayhcdTAwMjZrdm0tXHUwMDNlYXJjaC5jb25maWdfbG9jayk7XG4gXHRcdHJldHVybiByZXQ7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2FybTY0L3ZnaWNfaW5pdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2FybTY0L3ZnaWNfaW5pdC5jXG5pbmRleCA0N2UzNGI0M2FmYjI5Li41YTMwZjNjYjAzOWJlIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2FybTY0L3ZnaWNfaW5pdC5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vYXJtNjQvdmdpY19pbml0LmNcbkBAIC01LDYgJiM0Mzs1LDcgQEBcbiAgKiBDb3B5cmlnaHQgKEMpIDIwMjAsIFJlZCBIYXQsIEluYy5cbiAgKi9cbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9rZXJuZWwuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9zaXplcy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjc3lzL3N5c2NhbGwuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2FzbS9rdm0uaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2FzbS9rdm1fcGFyYS5oXHUwMDNlXG5AQCAtMTMsMTIgJiM0MzsxNCwyMSBAQFxuIFxuICNpbmNsdWRlIFwmIzM0O3Rlc3RfdXRpbC5oXCYjMzQ7XG4gI2luY2x1ZGUgXCYjMzQ7a3ZtX3V0aWwuaFwmIzM0O1xuJiM0MzsjaW5jbHVkZSBcJiMzNDtnaWMuaFwmIzM0O1xuICNpbmNsdWRlIFwmIzM0O3Byb2Nlc3Nvci5oXCYjMzQ7XG4gI2luY2x1ZGUgXCYjMzQ7dmdpYy5oXCYjMzQ7XG4gI2luY2x1ZGUgXCYjMzQ7Z2ljX3YzLmhcJiMzNDtcbiBcbiAjZGVmaW5lIE5SX1ZDUFVTXHRcdDRcbiBcbiYjNDM7I2RlZmluZSBSRURJU1RfUkVUUllfUkVHSU9OMF9CQVNFXHRHSUNSX0JBU0VfR1BBXG4mIzQzOyNkZWZpbmUgUkVESVNUX1JFVFJZX1JFR0lPTjFfQkFTRVx0XFxcbiYjNDM7XHQoUkVESVNUX1JFVFJZX1JFR0lPTjBfQkFTRSAmIzQzOyAyICogS1ZNX1ZHSUNfVjNfUkVESVNUX1NJWkUpXG4mIzQzOyNkZWZpbmUgUkVESVNUX1JFVFJZX0RJU1RfQkFTRVx0XHRcXFxuJiM0MztcdChSRURJU1RfUkVUUllfUkVHSU9OMV9CQVNFICYjNDM7IEtWTV9WR0lDX1YzX1JFRElTVF9TSVpFKVxuJiM0MzsjZGVmaW5lIFJFRElTVF9SRVRSWV9SRUdJT04yX0JBU0VcdFxcXG4mIzQzO1x0KFJFRElTVF9SRVRSWV9ESVNUX0JBU0UgJiM0MzsgS1ZNX1ZHSUNfVjNfRElTVF9TSVpFKVxuJiM0MztcbiAjZGVmaW5lIFJFR19PRkZTRVQodmNwdSwgb2Zmc2V0KSAoKCh1NjQpdmNwdSBcdTAwM2NcdTAwM2MgMzIpIHwgb2Zmc2V0KVxuIFxuICNkZWZpbmUgVkdJQ19ERVZfSVNfVjIoX2QpICgoX2QpID09IEtWTV9ERVZfVFlQRV9BUk1fVkdJQ19WMilcbkBAIC02NSw2ICYjNDM7NzUsMjMgQEAgc3RhdGljIHZvaWQgZ3Vlc3RfY29kZSh2b2lkKVxuIFx0R1VFU1RfRE9ORSgpO1xuIH1cbiBcbiYjNDM7c3RhdGljIHZvaWQgZ3Vlc3RfY2hlY2tfcmVkaXN0X3JldHJ5KHZvaWQpXG4mIzQzO3tcbiYjNDM7XHR1bnNpZ25lZCBpbnQgaTtcbiYjNDM7XG4mIzQzO1x0LyogVGhlIGZpcnN0IHRocmVlIHJlZGlzdHJpYnV0b3JzIHNwYW4gYWRqYWNlbnQgcmVnaW9ucyAwIGFuZCAxLiAqL1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIE5SX1ZDUFVTOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0dTY0IGJhc2UgPSBpIFx1MDAzYyAzID8gUkVESVNUX1JFVFJZX1JFR0lPTjBfQkFTRSAmIzQzO1xuJiM0MztcdFx0XHRcdCAgICAgICBpICogS1ZNX1ZHSUNfVjNfUkVESVNUX1NJWkUgOlxuJiM0MztcdFx0XHRcdCAgICAgICBSRURJU1RfUkVUUllfUkVHSU9OMl9CQVNFO1xuJiM0MztcdFx0dTY0IHR5cGVyID0gcmVhZHEoKHZvaWQgKikodW5zaWduZWQgbG9uZykoYmFzZSAmIzQzOyBHSUNSX1RZUEVSKSk7XG4mIzQzO1xuJiM0MztcdFx0R1VFU1RfQVNTRVJUX0VRKEdJQ1JfVFlQRVJfQ1BVX05VTUJFUih0eXBlciksIGkpO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0R1VFU1RfRE9ORSgpO1xuJiM0Mzt9XG4mIzQzO1xuIC8qIHdlIGRvbiYjMzk7dCB3YW50IHRvIGFzc2VydCBvbiBydW4gZXhlY3V0aW9uLCBoZW5jZSB0aGF0IGhlbHBlciAqL1xuIHN0YXRpYyBpbnQgcnVuX3ZjcHUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIHtcbkBAIC03Myw2ICYjNDM7MTAwLDcgQEAgc3RhdGljIGludCBydW5fdmNwdShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXG4gc3RhdGljIHN0cnVjdCB2bV9naWMgdm1fZ2ljX2NyZWF0ZV93aXRoX3ZjcHVzKHUzMiBnaWNfZGV2X3R5cGUsXG4gXHRcdFx0XHRcdCAgICAgIHUzMiBucl92Y3B1cyxcbiYjNDM7XHRcdFx0XHRcdCAgICAgIHZvaWQgKmd1ZXN0X2NvZGUsXG4gXHRcdFx0XHRcdCAgICAgIHN0cnVjdCBrdm1fdmNwdSAqdmNwdXNbXSlcbiB7XG4gXHRzdHJ1Y3Qgdm1fZ2ljIHY7XG5AQCAtMzM4LDcgJiM0MzszNjYsNyBAQCBzdGF0aWMgdm9pZCB0ZXN0X3ZnaWNfdGhlbl92Y3B1cyh1MzIgZ2ljX2Rldl90eXBlKVxuIFx0c3RydWN0IHZtX2dpYyB2O1xuIFx0aW50IHJldCwgaTtcbiBcbi1cdHYgPSB2bV9naWNfY3JlYXRlX3dpdGhfdmNwdXMoZ2ljX2Rldl90eXBlLCAxLCB2Y3B1cyk7XG4mIzQzO1x0diA9IHZtX2dpY19jcmVhdGVfd2l0aF92Y3B1cyhnaWNfZGV2X3R5cGUsIDEsIGd1ZXN0X2NvZGUsIHZjcHVzKTtcbiBcbiBcdHN1YnRlc3RfZGlzdF9yZGlzdChcdTAwMjZ2KTtcbiBcbkBAIC0zNTksNyAmIzQzOzM4Nyw4IEBAIHN0YXRpYyB2b2lkIHRlc3RfdmNwdXNfdGhlbl92Z2ljKHUzMiBnaWNfZGV2X3R5cGUpXG4gXHRzdHJ1Y3Qgdm1fZ2ljIHY7XG4gXHRpbnQgcmV0O1xuIFxuLVx0diA9IHZtX2dpY19jcmVhdGVfd2l0aF92Y3B1cyhnaWNfZGV2X3R5cGUsIE5SX1ZDUFVTLCB2Y3B1cyk7XG4mIzQzO1x0diA9IHZtX2dpY19jcmVhdGVfd2l0aF92Y3B1cyhnaWNfZGV2X3R5cGUsIE5SX1ZDUFVTLCBndWVzdF9jb2RlLFxuJiM0MztcdFx0XHRcdCAgICAgdmNwdXMpO1xuIFxuIFx0c3VidGVzdF9kaXN0X3JkaXN0KFx1MDAyNnYpO1xuIFxuQEAgLTQxMSw3ICYjNDM7NDQwLDggQEAgc3RhdGljIHZvaWQgdGVzdF92M19uZXdfcmVkaXN0X3JlZ2lvbnModm9pZClcbiBcdHU2NCBhZGRyO1xuIFx0aW50IHJldDtcbiBcbi1cdHYgPSB2bV9naWNfY3JlYXRlX3dpdGhfdmNwdXMoS1ZNX0RFVl9UWVBFX0FSTV9WR0lDX1YzLCBOUl9WQ1BVUywgdmNwdXMpO1xuJiM0MztcdHYgPSB2bV9naWNfY3JlYXRlX3dpdGhfdmNwdXMoS1ZNX0RFVl9UWVBFX0FSTV9WR0lDX1YzLCBOUl9WQ1BVUyxcbiYjNDM7XHRcdFx0XHQgICAgIGd1ZXN0X2NvZGUsIHZjcHVzKTtcbiBcdHN1YnRlc3RfdjNfcmVkaXN0X3JlZ2lvbnMoXHUwMDI2dik7XG4gXHRrdm1fZGV2aWNlX2F0dHJfc2V0KHYuZ2ljX2ZkLCBLVk1fREVWX0FSTV9WR0lDX0dSUF9DVFJMLFxuIFx0XHRcdCAgICBLVk1fREVWX0FSTV9WR0lDX0NUUkxfSU5JVCwgTlVMTCk7XG5AQCAtNDIyLDcgJiM0Mzs0NTIsOCBAQCBzdGF0aWMgdm9pZCB0ZXN0X3YzX25ld19yZWRpc3RfcmVnaW9ucyh2b2lkKVxuIFxuIFx0Lyogc3RlcDIgKi9cbiBcbi1cdHYgPSB2bV9naWNfY3JlYXRlX3dpdGhfdmNwdXMoS1ZNX0RFVl9UWVBFX0FSTV9WR0lDX1YzLCBOUl9WQ1BVUywgdmNwdXMpO1xuJiM0MztcdHYgPSB2bV9naWNfY3JlYXRlX3dpdGhfdmNwdXMoS1ZNX0RFVl9UWVBFX0FSTV9WR0lDX1YzLCBOUl9WQ1BVUyxcbiYjNDM7XHRcdFx0XHQgICAgIGd1ZXN0X2NvZGUsIHZjcHVzKTtcbiBcdHN1YnRlc3RfdjNfcmVkaXN0X3JlZ2lvbnMoXHUwMDI2dik7XG4gXG4gXHRhZGRyID0gUkVESVNUX1JFR0lPTl9BVFRSX0FERFIoMSwgMHgyODAwMDAsIDAsIDIpO1xuQEAgLTQzNiw3ICYjNDM7NDY3LDggQEAgc3RhdGljIHZvaWQgdGVzdF92M19uZXdfcmVkaXN0X3JlZ2lvbnModm9pZClcbiBcbiBcdC8qIHN0ZXAgMyAqL1xuIFxuLVx0diA9IHZtX2dpY19jcmVhdGVfd2l0aF92Y3B1cyhLVk1fREVWX1RZUEVfQVJNX1ZHSUNfVjMsIE5SX1ZDUFVTLCB2Y3B1cyk7XG4mIzQzO1x0diA9IHZtX2dpY19jcmVhdGVfd2l0aF92Y3B1cyhLVk1fREVWX1RZUEVfQVJNX1ZHSUNfVjMsIE5SX1ZDUFVTLFxuJiM0MztcdFx0XHRcdCAgICAgZ3Vlc3RfY29kZSwgdmNwdXMpO1xuIFx0c3VidGVzdF92M19yZWRpc3RfcmVnaW9ucyhcdTAwMjZ2KTtcbiBcbiBcdHJldCA9IF9fa3ZtX2RldmljZV9hdHRyX3NldCh2LmdpY19mZCwgS1ZNX0RFVl9BUk1fVkdJQ19HUlBfQUREUixcbkBAIC00NTcsNiAmIzQzOzQ4OSw3MCBAQCBzdGF0aWMgdm9pZCB0ZXN0X3YzX25ld19yZWRpc3RfcmVnaW9ucyh2b2lkKVxuIFx0dm1fZ2ljX2Rlc3Ryb3koXHUwMDI2dik7XG4gfVxuIFxuJiM0MztzdGF0aWMgdm9pZCB0ZXN0X3YzX3JlZGlzdF9yZWdpb25fcmV0cnkodm9pZClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBrdm1fdmNwdSAqdmNwdXNbTlJfVkNQVVNdO1xuJiM0MztcdHN0cnVjdCB2bV9naWMgdjtcbiYjNDM7XHRzdHJ1Y3QgdWNhbGwgdWM7XG4mIzQzO1x0dTY0IGFkZHI7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0diA9IHZtX2dpY19jcmVhdGVfd2l0aF92Y3B1cyhLVk1fREVWX1RZUEVfQVJNX1ZHSUNfVjMsIE5SX1ZDUFVTLFxuJiM0MztcdFx0XHRcdCAgICAgZ3Vlc3RfY2hlY2tfcmVkaXN0X3JldHJ5LCB2Y3B1cyk7XG4mIzQzO1xuJiM0MztcdGFkZHIgPSBSRURJU1RfUkVHSU9OX0FUVFJfQUREUigyLCBSRURJU1RfUkVUUllfUkVHSU9OMF9CQVNFLCAwLCAwKTtcbiYjNDM7XHRrdm1fZGV2aWNlX2F0dHJfc2V0KHYuZ2ljX2ZkLCBLVk1fREVWX0FSTV9WR0lDX0dSUF9BRERSLFxuJiM0MztcdFx0XHQgICAgS1ZNX1ZHSUNfVjNfQUREUl9UWVBFX1JFRElTVF9SRUdJT04sIFx1MDAyNmFkZHIpO1xuJiM0MztcbiYjNDM7XHRhZGRyID0gUkVESVNUX1JFR0lPTl9BVFRSX0FERFIoMSwgUkVESVNUX1JFVFJZX1JFR0lPTjFfQkFTRSwgMCwgMSk7XG4mIzQzO1x0a3ZtX2RldmljZV9hdHRyX3NldCh2LmdpY19mZCwgS1ZNX0RFVl9BUk1fVkdJQ19HUlBfQUREUixcbiYjNDM7XHRcdFx0ICAgIEtWTV9WR0lDX1YzX0FERFJfVFlQRV9SRURJU1RfUkVHSU9OLCBcdTAwMjZhZGRyKTtcbiYjNDM7XG4mIzQzO1x0YWRkciA9IFJFRElTVF9SRVRSWV9ESVNUX0JBU0U7XG4mIzQzO1x0a3ZtX2RldmljZV9hdHRyX3NldCh2LmdpY19mZCwgS1ZNX0RFVl9BUk1fVkdJQ19HUlBfQUREUixcbiYjNDM7XHRcdFx0ICAgIEtWTV9WR0lDX1YzX0FERFJfVFlQRV9ESVNULCBcdTAwMjZhZGRyKTtcbiYjNDM7XG4mIzQzO1x0YWRkciA9IFJFRElTVF9SRUdJT05fQVRUUl9BRERSKDEsIFJFRElTVF9SRVRSWV9ESVNUX0JBU0UsIDAsIDIpO1xuJiM0MztcdHJldCA9IF9fa3ZtX2RldmljZV9hdHRyX3NldCh2LmdpY19mZCwgS1ZNX0RFVl9BUk1fVkdJQ19HUlBfQUREUixcbiYjNDM7XHRcdFx0XHQgICAgS1ZNX1ZHSUNfVjNfQUREUl9UWVBFX1JFRElTVF9SRUdJT04sXG4mIzQzO1x0XHRcdFx0ICAgIFx1MDAyNmFkZHIpO1xuJiM0MztcdFRFU1RfQVNTRVJUKHJldCBcdTAwMjZcdTAwMjYgZXJybm8gPT0gRUlOVkFMLFxuJiM0MztcdFx0ICAgIFwmIzM0O3JlZ2lzdGVyIHJlZGlzdCByZWdpb24gY29sbGlkaW5nIHdpdGggZGlzdFwmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdGFkZHIgPSBSRURJU1RfUkVHSU9OX0FUVFJfQUREUigxLCBSRURJU1RfUkVUUllfUkVHSU9OMl9CQVNFLCAwLCAyKTtcbiYjNDM7XHRrdm1fZGV2aWNlX2F0dHJfc2V0KHYuZ2ljX2ZkLCBLVk1fREVWX0FSTV9WR0lDX0dSUF9BRERSLFxuJiM0MztcdFx0XHQgICAgS1ZNX1ZHSUNfVjNfQUREUl9UWVBFX1JFRElTVF9SRUdJT04sIFx1MDAyNmFkZHIpO1xuJiM0MztcbiYjNDM7XHR2aXJ0X21hcCh2LnZtLCBSRURJU1RfUkVUUllfUkVHSU9OMF9CQVNFLCBSRURJU1RfUkVUUllfUkVHSU9OMF9CQVNFLFxuJiM0MztcdFx0IHZtX2NhbGNfbnVtX2d1ZXN0X3BhZ2VzKHYudm0tXHUwMDNlbW9kZSxcbiYjNDM7XHRcdFx0XHRcdCAzICogS1ZNX1ZHSUNfVjNfUkVESVNUX1NJWkUpKTtcbiYjNDM7XHR2aXJ0X21hcCh2LnZtLCBSRURJU1RfUkVUUllfUkVHSU9OMl9CQVNFLCBSRURJU1RfUkVUUllfUkVHSU9OMl9CQVNFLFxuJiM0MztcdFx0IHZtX2NhbGNfbnVtX2d1ZXN0X3BhZ2VzKHYudm0tXHUwMDNlbW9kZSxcbiYjNDM7XHRcdFx0XHRcdCBLVk1fVkdJQ19WM19SRURJU1RfU0laRSkpO1xuJiM0MztcbiYjNDM7XHRrdm1fZGV2aWNlX2F0dHJfc2V0KHYuZ2ljX2ZkLCBLVk1fREVWX0FSTV9WR0lDX0dSUF9DVFJMLFxuJiM0MztcdFx0XHQgICAgS1ZNX0RFVl9BUk1fVkdJQ19DVFJMX0lOSVQsIE5VTEwpO1xuJiM0MztcbiYjNDM7XHR2Y3B1X3J1bih2Y3B1c1swXSk7XG4mIzQzO1x0c3dpdGNoIChnZXRfdWNhbGwodmNwdXNbMF0sIFx1MDAyNnVjKSkge1xuJiM0MztcdGNhc2UgVUNBTExfRE9ORTpcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdGNhc2UgVUNBTExfQUJPUlQ6XG4mIzQzO1x0XHRSRVBPUlRfR1VFU1RfQVNTRVJUKHVjKTtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdGNhc2UgVUNBTExfTk9ORTpcbiYjNDM7XHRcdGlmICh2Y3B1c1swXS1cdTAwM2VydW4tXHUwMDNlZXhpdF9yZWFzb24gPT0gS1ZNX0VYSVRfTU1JTylcbiYjNDM7XHRcdFx0VEVTVF9GQUlMKFwmIzM0O1VuZXhwZWN0ZWQgTU1JTyBleGl0IGF0IDB4JWxseFwmIzM0OyxcbiYjNDM7XHRcdFx0XHQgIHZjcHVzWzBdLVx1MDAzZXJ1bi1cdTAwM2VtbWlvLnBoeXNfYWRkcik7XG4mIzQzO1x0XHRmYWxsdGhyb3VnaDtcbiYjNDM7XHRkZWZhdWx0OlxuJiM0MztcdFx0VEVTVF9GQUlMKFwmIzM0O1VuZXhwZWN0ZWQgdWNhbGwgJWx1LCBleGl0X3JlYXNvbiAldVwmIzM0OyxcbiYjNDM7XHRcdFx0ICB1Yy5jbWQsIHZjcHVzWzBdLVx1MDAzZXJ1bi1cdTAwM2VleGl0X3JlYXNvbik7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHR2bV9naWNfZGVzdHJveShcdTAwMjZ2KTtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgdm9pZCB0ZXN0X3YzX3R5cGVyX2FjY2Vzc2VzKHZvaWQpXG4ge1xuIFx0c3RydWN0IHZtX2dpYyB2O1xuQEAgLTYwOCw3ICYjNDM7NzA0LDggQEAgc3RhdGljIHZvaWQgdGVzdF92M19yZWRpc3RfaXBhX3JhbmdlX2NoZWNrX2F0X3ZjcHVfcnVuKHZvaWQpXG4gXHRpbnQgcmV0LCBpO1xuIFx0dTY0IGFkZHI7XG4gXG4tXHR2ID0gdm1fZ2ljX2NyZWF0ZV93aXRoX3ZjcHVzKEtWTV9ERVZfVFlQRV9BUk1fVkdJQ19WMywgMSwgdmNwdXMpO1xuJiM0MztcdHYgPSB2bV9naWNfY3JlYXRlX3dpdGhfdmNwdXMoS1ZNX0RFVl9UWVBFX0FSTV9WR0lDX1YzLCAxLCBndWVzdF9jb2RlLFxuJiM0MztcdFx0XHRcdCAgICAgdmNwdXMpO1xuIFxuIFx0LyogU2V0IHNwYWNlIGZvciAzIHJlZGlzdHMsIHdlIGhhdmUgMSB2Y3B1LCBzbyB0aGlzIHN1Y2NlZWRzLiAqL1xuIFx0YWRkciA9IG1heF9waHlzX3NpemUgLSAoMyAqIDIgKiAweDEwMDAwKTtcbkBAIC02NDEsNyAmIzQzOzczOCw4IEBAIHN0YXRpYyB2b2lkIHRlc3RfdjNfaXRzX3JlZ2lvbih2b2lkKVxuIFx0dTY0IGFkZHI7XG4gXHRpbnQgaXRzX2ZkLCByZXQ7XG4gXG4tXHR2ID0gdm1fZ2ljX2NyZWF0ZV93aXRoX3ZjcHVzKEtWTV9ERVZfVFlQRV9BUk1fVkdJQ19WMywgTlJfVkNQVVMsIHZjcHVzKTtcbiYjNDM7XHR2ID0gdm1fZ2ljX2NyZWF0ZV93aXRoX3ZjcHVzKEtWTV9ERVZfVFlQRV9BUk1fVkdJQ19WMywgTlJfVkNQVVMsXG4mIzQzO1x0XHRcdFx0ICAgICBndWVzdF9jb2RlLCB2Y3B1cyk7XG4gXHRpdHNfZmQgPSBrdm1fY3JlYXRlX2RldmljZSh2LnZtLCBLVk1fREVWX1RZUEVfQVJNX1ZHSUNfSVRTKTtcbiBcbiBcdGFkZHIgPSAweDQwMTAwMDtcbkBAIC02ODQsNyAmIzQzOzc4Miw4IEBAIHN0YXRpYyB2b2lkIHRlc3RfdjNfbmFzc2dpY2FwKHZvaWQpXG4gXHR1MzIgdHlwZXIyO1xuIFx0aW50IHJldDtcbiBcbi1cdHZtID0gdm1fZ2ljX2NyZWF0ZV93aXRoX3ZjcHVzKEtWTV9ERVZfVFlQRV9BUk1fVkdJQ19WMywgTlJfVkNQVVMsIHZjcHVzKTtcbiYjNDM7XHR2bSA9IHZtX2dpY19jcmVhdGVfd2l0aF92Y3B1cyhLVk1fREVWX1RZUEVfQVJNX1ZHSUNfVjMsIE5SX1ZDUFVTLFxuJiM0MztcdFx0XHRcdCAgICAgIGd1ZXN0X2NvZGUsIHZjcHVzKTtcbiBcdGt2bV9kZXZpY2VfYXR0cl9nZXQodm0uZ2ljX2ZkLCBLVk1fREVWX0FSTV9WR0lDX0dSUF9ESVNUX1JFR1MsXG4gXHRcdFx0ICAgIEdJQ0RfVFlQRVIyLCBcdTAwMjZ0eXBlcjIpO1xuIFx0aGFzX25hc3NnaWNhcCA9IHR5cGVyMiBcdTAwMjYgR0lDRF9UWVBFUjJfbkFTU0dJY2FwO1xuQEAgLTk3OCw2ICYjNDM7MTA3Nyw3IEBAIHZvaWQgcnVuX3Rlc3RzKHUzMiBnaWNfZGV2X3R5cGUpXG4gXG4gXHRpZiAoVkdJQ19ERVZfSVNfVjMoZ2ljX2Rldl90eXBlKSkge1xuIFx0XHR0ZXN0X3YzX25ld19yZWRpc3RfcmVnaW9ucygpO1xuJiM0MztcdFx0dGVzdF92M19yZWRpc3RfcmVnaW9uX3JldHJ5KCk7XG4gXHRcdHRlc3RfdjNfdHlwZXJfYWNjZXNzZXMoKTtcbiBcdFx0dGVzdF92M19sYXN0X2JpdF9yZWRpc3RfcmVnaW9ucygpO1xuIFx0XHR0ZXN0X3YzX2xhc3RfYml0X3NpbmdsZV9yZGlzdCgpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDA4OjI2PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTSYjMzQ7LAogICAgJiMzNDtWSVJUVUFMSVpBVElPTiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3ZnaWNfdjNfc2V0X3JlZGlzdF9iYXNlJiMzNDssCiAgICAmIzM0O3ZnaWNfcmVnaXN0ZXJfcmVkaXN0X2lvZGV2JiMzNDssCiAgICAmIzM0O3ZnaWNfdW5yZWdpc3Rlcl9yZWRpc3RfaW9kZXYmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgZXJyb3IgdW53aW5kaW5nIGFuZCByb2xsYmFjayBoYW5kbGluZyB3aGVuIHJlZ2lzdGVyaW5nIFZHSUN2MyByZWRpc3RyaWJ1dG9yIEkvTyBkZXZpY2VzIGluIEFSTTY0IEtWTS4gSXQgZW5zdXJlcyB0aGF0IGZhaWxlZCByZWRpc3RyaWJ1dG9yIHJlZ2lzdHJhdGlvbiBwcm9wZXJseSByb2xscyBiYWNrIHRoZSBhc3NpZ25lZCByZWdpb24gc3RhdGUgYW5kIG9ubHkgdGVhcnMgZG93biBWQ1BVcyBhc3NvY2lhdGVkIHdpdGggdGhlIGZhaWxpbmcgcmVnaW9uLiBUaGVzZSBjb2RlIHBhdGhzIGFyZSByZWFjaGFibGUgdmlhIEtWTSBpb2N0bHMgYW5kIHdvcnRoIGZ1enppbmcgZm9yIGNvbmN1cnJlbmN5IGFuZCBzdGF0ZSBtYW5hZ2VtZW50IGJ1Z3MuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBhYzhmYzdhNTRjZjE3MjIyNzRjODM0MmNmMWYwODYyYTE0NTk5YjY4CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIE1vbiBBdWcgMzEgMDg6MjY6MjMgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtbW1pby12My5jIGIvYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLW1taW8tdjMuYwppbmRleCA1OTEzYTIwZDgzMDE5Li43N2FhODQzMzcwMWExIDEwMDY0NAotLS0gYS9hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtbW1pby12My5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1tbWlvLXYzLmMKQEAgLTc2Niw2ICYjNDM7NzY2LDE5IEBAIHVuc2lnbmVkIGludCB2Z2ljX3YzX2luaXRfZGlzdF9pb2RldihzdHJ1Y3QgdmdpY19pb19kZXZpY2UgKmRldikKIAlyZXR1cm4gU1pfNjRLOwogfQogCiYjNDM7c3RhdGljIHZvaWQgdmdpY191bmRvX3JlZGlzdF9hc3NpZ25tZW50KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCB2Z2ljX2NwdSAqdmdpY19jcHUgPSAmYW1wO3ZjcHUtJmd0O2FyY2gudmdpY19jcHU7CiYjNDM7CiYjNDM7CWxvY2tkZXBfYXNzZXJ0X2hlbGQoJmFtcDt2Y3B1LSZndDtrdm0tJmd0O3Nsb3RzX2xvY2spOwomIzQzOwomIzQzOwlndWFyZChtdXRleCkoJmFtcDt2Y3B1LSZndDtrdm0tJmd0O2FyY2guY29uZmlnX2xvY2spOwomIzQzOwomIzQzOwl2Z2ljX2NwdS0mZ3Q7cmRyZWctJmd0O2ZyZWVfaW5kZXgtLTsKJiM0MzsJdmdpY19jcHUtJmd0O3JkcmVnID0gTlVMTDsKJiM0MzsJdmdpY19jcHUtJmd0O3JkX2lvZGV2LmJhc2VfYWRkciA9IFZHSUNfQUREUl9VTkRFRjsKJiM0Mzt9CiYjNDM7CiAvKioKICAqIHZnaWNfcmVnaXN0ZXJfcmVkaXN0X2lvZGV2IC0gcmVnaXN0ZXIgYSBzaW5nbGUgcmVkaXN0IGlvZGV2CiAgKiBAdmNwdTogICAgVGhlIFZDUFUgdG8gd2hpY2ggdGhlIHJlZGlzdHJpYnV0b3IgYmVsb25ncwpAQCAtODE4LDE2ICYjNDM7ODMxLDE3IEBAIGludCB2Z2ljX3JlZ2lzdGVyX3JlZGlzdF9pb2RldihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiAJcmRfZGV2LSZndDtucl9yZWdpb25zID0gQVJSQVlfU0laRSh2Z2ljX3YzX3JkX3JlZ2lzdGVycyk7CiAJcmRfZGV2LSZndDtyZWRpc3RfdmNwdSA9IHZjcHU7CiAKJiM0MzsJLyogUHJvdGVjdGVkIGJ5IHNsb3RzX2xvY2sgKi8KJiM0MzsJcmRyZWctJmd0O2ZyZWVfaW5kZXgmIzQzOyYjNDM7OwomIzQzOwogCW11dGV4X3VubG9jaygmYW1wO2t2bS0mZ3Q7YXJjaC5jb25maWdfbG9jayk7CiAKIAlyZXQgPSBrdm1faW9fYnVzX3JlZ2lzdGVyX2Rldihrdm0sIEtWTV9NTUlPX0JVUywgcmRfYmFzZSwKIAkJCQkgICAgICAyICogU1pfNjRLLCAmYW1wO3JkX2Rldi0mZ3Q7ZGV2KTsKIAlpZiAocmV0KQotCQlyZXR1cm4gcmV0OwomIzQzOwkJdmdpY191bmRvX3JlZGlzdF9hc3NpZ25tZW50KHZjcHUpOwogCi0JLyogUHJvdGVjdGVkIGJ5IHNsb3RzX2xvY2sgKi8KLQlyZHJlZy0mZ3Q7ZnJlZV9pbmRleCYjNDM7JiM0Mzs7Ci0JcmV0dXJuIDA7CiYjNDM7CXJldHVybiByZXQ7CiAKIG91dF91bmxvY2s6CiAJbXV0ZXhfdW5sb2NrKCZhbXA7a3ZtLSZndDthcmNoLmNvbmZpZ19sb2NrKTsKQEAgLTg0MSw3ICYjNDM7ODU1LDI1IEBAIHZvaWQgdmdpY191bnJlZ2lzdGVyX3JlZGlzdF9pb2RldihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiAJa3ZtX2lvX2J1c191bnJlZ2lzdGVyX2Rldih2Y3B1LSZndDtrdm0sIEtWTV9NTUlPX0JVUywgJmFtcDtyZF9kZXYtJmd0O2Rldik7CiB9CiAKLXN0YXRpYyBpbnQgdmdpY19yZWdpc3Rlcl9hbGxfcmVkaXN0X2lvZGV2cyhzdHJ1Y3Qga3ZtICprdm0pCiYjNDM7c3RhdGljIHZvaWQgdmdpY19yb2xsYmFja19yZWRpc3RfaW9kZXYoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LAomIzQzOwkJCQkgICAgICAgc3RydWN0IHZnaWNfcmVkaXN0X3JlZ2lvbiAqcmRyZWcpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgdmdpY19jcHUgKnZnaWNfY3B1ID0gJmFtcDt2Y3B1LSZndDthcmNoLnZnaWNfY3B1OwomIzQzOwomIzQzOwlsb2NrZGVwX2Fzc2VydF9oZWxkKCZhbXA7dmNwdS0mZ3Q7a3ZtLSZndDtzbG90c19sb2NrKTsKJiM0MzsKJiM0MzsJaWYgKHZnaWNfY3B1LSZndDtyZHJlZyAhPSByZHJlZykKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJdmdpY191bnJlZ2lzdGVyX3JlZGlzdF9pb2Rldih2Y3B1KTsKJiM0MzsKJiM0MzsJZ3VhcmQobXV0ZXgpKCZhbXA7dmNwdS0mZ3Q7a3ZtLSZndDthcmNoLmNvbmZpZ19sb2NrKTsKJiM0MzsJdmdpY19jcHUtJmd0O3JkcmVnID0gTlVMTDsKJiM0MzsJdmdpY19jcHUtJmd0O3JkX2lvZGV2LmJhc2VfYWRkciA9IFZHSUNfQUREUl9VTkRFRjsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCB2Z2ljX3JlZ2lzdGVyX2FsbF9yZWRpc3RfaW9kZXZzKHN0cnVjdCBrdm0gKmt2bSwKJiM0MzsJCQkJCSAgIHN0cnVjdCB2Z2ljX3JlZGlzdF9yZWdpb24gKnJkcmVnKQogewogCXN0cnVjdCBrdm1fdmNwdSAqdmNwdTsKIAl1bnNpZ25lZCBsb25nIGM7CkBAIC04NTYsMTIgJiM0Mzs4ODgsMTIgQEAgc3RhdGljIGludCB2Z2ljX3JlZ2lzdGVyX2FsbF9yZWRpc3RfaW9kZXZzKHN0cnVjdCBrdm0gKmt2bSkKIAl9CiAKIAlpZiAocmV0KSB7Ci0JCS8qIFRoZSBjdXJyZW50IGMgZmFpbGVkLCBzbyBpdGVyYXRlIG92ZXIgdGhlIHByZXZpb3VzIG9uZXMuICovCiYjNDM7CQkvKiBVbmRvIGFzc2lnbm1lbnRzIG1hZGUgZnJvbSB0aGUgcmVnaW9uIGJlaW5nIGFkZGVkLiAqLwogCQlpbnQgaTsKIAogCQlmb3IgKGkgPSAwOyBpICZsdDsgYzsgaSYjNDM7JiM0MzspIHsKIAkJCXZjcHUgPSBrdm1fZ2V0X3ZjcHUoa3ZtLCBpKTsKLQkJCXZnaWNfdW5yZWdpc3Rlcl9yZWRpc3RfaW9kZXYodmNwdSk7CiYjNDM7CQkJdmdpY19yb2xsYmFja19yZWRpc3RfaW9kZXYodmNwdSwgcmRyZWcpOwogCQl9CiAJfQogCkBAIC05NzAsMTAgJiM0MzsxMDAyLDEzIEBAIHZvaWQgdmdpY192M19mcmVlX3JlZGlzdF9yZWdpb24oc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3QgdmdpY19yZWRpc3RfcmVnaW9uICpyZHJlCiAKIGludCB2Z2ljX3YzX3NldF9yZWRpc3RfYmFzZShzdHJ1Y3Qga3ZtICprdm0sIHUzMiBpbmRleCwgdTY0IGFkZHIsIHUzMiBjb3VudCkKIHsKJiM0MzsJc3RydWN0IHZnaWNfcmVkaXN0X3JlZ2lvbiAqcmRyZWc7CiAJaW50IHJldDsKIAogCW11dGV4X2xvY2soJmFtcDtrdm0tJmd0O2FyY2guY29uZmlnX2xvY2spOwogCXJldCA9IHZnaWNfdjNfYWxsb2NfcmVkaXN0X3JlZ2lvbihrdm0sIGluZGV4LCBhZGRyLCBjb3VudCk7CiYjNDM7CWlmICghcmV0KQomIzQzOwkJcmRyZWcgPSB2Z2ljX3YzX3JkaXN0X3JlZ2lvbl9mcm9tX2luZGV4KGt2bSwgaW5kZXgpOwogCW11dGV4X3VubG9jaygmYW1wO2t2bS0mZ3Q7YXJjaC5jb25maWdfbG9jayk7CiAJaWYgKHJldCkKIAkJcmV0dXJuIHJldDsKQEAgLTk4MiwxMiAmIzQzOzEwMTcsOSBAQCBpbnQgdmdpY192M19zZXRfcmVkaXN0X2Jhc2Uoc3RydWN0IGt2bSAqa3ZtLCB1MzIgaW5kZXgsIHU2NCBhZGRyLCB1MzIgY291bnQpCiAJICogUmVnaXN0ZXIgaW9kZXZzIGZvciBlYWNoIGV4aXN0aW5nIFZDUFUuICBBZGRpbmcgbW9yZSBWQ1BVcwogCSAqIGFmdGVyd2FyZHMgd2lsbCByZWdpc3RlciB0aGUgaW9kZXZzIHdoZW4gbmVlZGVkLgogCSAqLwotCXJldCA9IHZnaWNfcmVnaXN0ZXJfYWxsX3JlZGlzdF9pb2RldnMoa3ZtKTsKJiM0MzsJcmV0ID0gdmdpY19yZWdpc3Rlcl9hbGxfcmVkaXN0X2lvZGV2cyhrdm0sIHJkcmVnKTsKIAlpZiAocmV0KSB7Ci0JCXN0cnVjdCB2Z2ljX3JlZGlzdF9yZWdpb24gKnJkcmVnOwotCiAJCW11dGV4X2xvY2soJmFtcDtrdm0tJmd0O2FyY2guY29uZmlnX2xvY2spOwotCQlyZHJlZyA9IHZnaWNfdjNfcmRpc3RfcmVnaW9uX2Zyb21faW5kZXgoa3ZtLCBpbmRleCk7CiAJCXZnaWNfdjNfZnJlZV9yZWRpc3RfcmVnaW9uKGt2bSwgcmRyZWcpOwogCQltdXRleF91bmxvY2soJmFtcDtrdm0tJmd0O2FyY2guY29uZmlnX2xvY2spOwogCQlyZXR1cm4gcmV0OwpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2FybTY0L3ZnaWNfaW5pdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2FybTY0L3ZnaWNfaW5pdC5jCmluZGV4IDQ3ZTM0YjQzYWZiMjkuLjVhMzBmM2NiMDM5YmUgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9hcm02NC92Z2ljX2luaXQuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vYXJtNjQvdmdpY19pbml0LmMKQEAgLTUsNiAmIzQzOzUsNyBAQAogICogQ29weXJpZ2h0IChDKSAyMDIwLCBSZWQgSGF0LCBJbmMuCiAgKi8KICNpbmNsdWRlICZsdDtsaW51eC9rZXJuZWwuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvc2l6ZXMuaCZndDsKICNpbmNsdWRlICZsdDtzeXMvc3lzY2FsbC5oJmd0OwogI2luY2x1ZGUgJmx0O2FzbS9rdm0uaCZndDsKICNpbmNsdWRlICZsdDthc20va3ZtX3BhcmEuaCZndDsKQEAgLTEzLDEyICYjNDM7MTQsMjEgQEAKIAogI2luY2x1ZGUgJiMzNDt0ZXN0X3V0aWwuaCYjMzQ7CiAjaW5jbHVkZSAmIzM0O2t2bV91dGlsLmgmIzM0OwomIzQzOyNpbmNsdWRlICYjMzQ7Z2ljLmgmIzM0OwogI2luY2x1ZGUgJiMzNDtwcm9jZXNzb3IuaCYjMzQ7CiAjaW5jbHVkZSAmIzM0O3ZnaWMuaCYjMzQ7CiAjaW5jbHVkZSAmIzM0O2dpY192My5oJiMzNDsKIAogI2RlZmluZSBOUl9WQ1BVUwkJNAogCiYjNDM7I2RlZmluZSBSRURJU1RfUkVUUllfUkVHSU9OMF9CQVNFCUdJQ1JfQkFTRV9HUEEKJiM0MzsjZGVmaW5lIFJFRElTVF9SRVRSWV9SRUdJT04xX0JBU0UJXAomIzQzOwkoUkVESVNUX1JFVFJZX1JFR0lPTjBfQkFTRSAmIzQzOyAyICogS1ZNX1ZHSUNfVjNfUkVESVNUX1NJWkUpCiYjNDM7I2RlZmluZSBSRURJU1RfUkVUUllfRElTVF9CQVNFCQlcCiYjNDM7CShSRURJU1RfUkVUUllfUkVHSU9OMV9CQVNFICYjNDM7IEtWTV9WR0lDX1YzX1JFRElTVF9TSVpFKQomIzQzOyNkZWZpbmUgUkVESVNUX1JFVFJZX1JFR0lPTjJfQkFTRQlcCiYjNDM7CShSRURJU1RfUkVUUllfRElTVF9CQVNFICYjNDM7IEtWTV9WR0lDX1YzX0RJU1RfU0laRSkKJiM0MzsKICNkZWZpbmUgUkVHX09GRlNFVCh2Y3B1LCBvZmZzZXQpICgoKHU2NCl2Y3B1ICZsdDsmbHQ7IDMyKSB8IG9mZnNldCkKIAogI2RlZmluZSBWR0lDX0RFVl9JU19WMihfZCkgKChfZCkgPT0gS1ZNX0RFVl9UWVBFX0FSTV9WR0lDX1YyKQpAQCAtNjUsNiAmIzQzOzc1LDIzIEBAIHN0YXRpYyB2b2lkIGd1ZXN0X2NvZGUodm9pZCkKIAlHVUVTVF9ET05FKCk7CiB9CiAKJiM0MztzdGF0aWMgdm9pZCBndWVzdF9jaGVja19yZWRpc3RfcmV0cnkodm9pZCkKJiM0Mzt7CiYjNDM7CXVuc2lnbmVkIGludCBpOwomIzQzOwomIzQzOwkvKiBUaGUgZmlyc3QgdGhyZWUgcmVkaXN0cmlidXRvcnMgc3BhbiBhZGphY2VudCByZWdpb25zIDAgYW5kIDEuICovCiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBOUl9WQ1BVUzsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCXU2NCBiYXNlID0gaSAmbHQ7IDMgPyBSRURJU1RfUkVUUllfUkVHSU9OMF9CQVNFICYjNDM7CiYjNDM7CQkJCSAgICAgICBpICogS1ZNX1ZHSUNfVjNfUkVESVNUX1NJWkUgOgomIzQzOwkJCQkgICAgICAgUkVESVNUX1JFVFJZX1JFR0lPTjJfQkFTRTsKJiM0MzsJCXU2NCB0eXBlciA9IHJlYWRxKCh2b2lkICopKHVuc2lnbmVkIGxvbmcpKGJhc2UgJiM0MzsgR0lDUl9UWVBFUikpOwomIzQzOwomIzQzOwkJR1VFU1RfQVNTRVJUX0VRKEdJQ1JfVFlQRVJfQ1BVX05VTUJFUih0eXBlciksIGkpOwomIzQzOwl9CiYjNDM7CiYjNDM7CUdVRVNUX0RPTkUoKTsKJiM0Mzt9CiYjNDM7CiAvKiB3ZSBkb24mIzM5O3Qgd2FudCB0byBhc3NlcnQgb24gcnVuIGV4ZWN1dGlvbiwgaGVuY2UgdGhhdCBoZWxwZXIgKi8KIHN0YXRpYyBpbnQgcnVuX3ZjcHUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogewpAQCAtNzMsNiAmIzQzOzEwMCw3IEBAIHN0YXRpYyBpbnQgcnVuX3ZjcHUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogCiBzdGF0aWMgc3RydWN0IHZtX2dpYyB2bV9naWNfY3JlYXRlX3dpdGhfdmNwdXModTMyIGdpY19kZXZfdHlwZSwKIAkJCQkJICAgICAgdTMyIG5yX3ZjcHVzLAomIzQzOwkJCQkJICAgICAgdm9pZCAqZ3Vlc3RfY29kZSwKIAkJCQkJICAgICAgc3RydWN0IGt2bV92Y3B1ICp2Y3B1c1tdKQogewogCXN0cnVjdCB2bV9naWMgdjsKQEAgLTMzOCw3ICYjNDM7MzY2LDcgQEAgc3RhdGljIHZvaWQgdGVzdF92Z2ljX3RoZW5fdmNwdXModTMyIGdpY19kZXZfdHlwZSkKIAlzdHJ1Y3Qgdm1fZ2ljIHY7CiAJaW50IHJldCwgaTsKIAotCXYgPSB2bV9naWNfY3JlYXRlX3dpdGhfdmNwdXMoZ2ljX2Rldl90eXBlLCAxLCB2Y3B1cyk7CiYjNDM7CXYgPSB2bV9naWNfY3JlYXRlX3dpdGhfdmNwdXMoZ2ljX2Rldl90eXBlLCAxLCBndWVzdF9jb2RlLCB2Y3B1cyk7CiAKIAlzdWJ0ZXN0X2Rpc3RfcmRpc3QoJmFtcDt2KTsKIApAQCAtMzU5LDcgJiM0MzszODcsOCBAQCBzdGF0aWMgdm9pZCB0ZXN0X3ZjcHVzX3RoZW5fdmdpYyh1MzIgZ2ljX2Rldl90eXBlKQogCXN0cnVjdCB2bV9naWMgdjsKIAlpbnQgcmV0OwogCi0JdiA9IHZtX2dpY19jcmVhdGVfd2l0aF92Y3B1cyhnaWNfZGV2X3R5cGUsIE5SX1ZDUFVTLCB2Y3B1cyk7CiYjNDM7CXYgPSB2bV9naWNfY3JlYXRlX3dpdGhfdmNwdXMoZ2ljX2Rldl90eXBlLCBOUl9WQ1BVUywgZ3Vlc3RfY29kZSwKJiM0MzsJCQkJICAgICB2Y3B1cyk7CiAKIAlzdWJ0ZXN0X2Rpc3RfcmRpc3QoJmFtcDt2KTsKIApAQCAtNDExLDcgJiM0Mzs0NDAsOCBAQCBzdGF0aWMgdm9pZCB0ZXN0X3YzX25ld19yZWRpc3RfcmVnaW9ucyh2b2lkKQogCXU2NCBhZGRyOwogCWludCByZXQ7CiAKLQl2ID0gdm1fZ2ljX2NyZWF0ZV93aXRoX3ZjcHVzKEtWTV9ERVZfVFlQRV9BUk1fVkdJQ19WMywgTlJfVkNQVVMsIHZjcHVzKTsKJiM0MzsJdiA9IHZtX2dpY19jcmVhdGVfd2l0aF92Y3B1cyhLVk1fREVWX1RZUEVfQVJNX1ZHSUNfVjMsIE5SX1ZDUFVTLAomIzQzOwkJCQkgICAgIGd1ZXN0X2NvZGUsIHZjcHVzKTsKIAlzdWJ0ZXN0X3YzX3JlZGlzdF9yZWdpb25zKCZhbXA7dik7CiAJa3ZtX2RldmljZV9hdHRyX3NldCh2LmdpY19mZCwgS1ZNX0RFVl9BUk1fVkdJQ19HUlBfQ1RSTCwKIAkJCSAgICBLVk1fREVWX0FSTV9WR0lDX0NUUkxfSU5JVCwgTlVMTCk7CkBAIC00MjIsNyAmIzQzOzQ1Miw4IEBAIHN0YXRpYyB2b2lkIHRlc3RfdjNfbmV3X3JlZGlzdF9yZWdpb25zKHZvaWQpCiAKIAkvKiBzdGVwMiAqLwogCi0JdiA9IHZtX2dpY19jcmVhdGVfd2l0aF92Y3B1cyhLVk1fREVWX1RZUEVfQVJNX1ZHSUNfVjMsIE5SX1ZDUFVTLCB2Y3B1cyk7CiYjNDM7CXYgPSB2bV9naWNfY3JlYXRlX3dpdGhfdmNwdXMoS1ZNX0RFVl9UWVBFX0FSTV9WR0lDX1YzLCBOUl9WQ1BVUywKJiM0MzsJCQkJICAgICBndWVzdF9jb2RlLCB2Y3B1cyk7CiAJc3VidGVzdF92M19yZWRpc3RfcmVnaW9ucygmYW1wO3YpOwogCiAJYWRkciA9IFJFRElTVF9SRUdJT05fQVRUUl9BRERSKDEsIDB4MjgwMDAwLCAwLCAyKTsKQEAgLTQzNiw3ICYjNDM7NDY3LDggQEAgc3RhdGljIHZvaWQgdGVzdF92M19uZXdfcmVkaXN0X3JlZ2lvbnModm9pZCkKIAogCS8qIHN0ZXAgMyAqLwogCi0JdiA9IHZtX2dpY19jcmVhdGVfd2l0aF92Y3B1cyhLVk1fREVWX1RZUEVfQVJNX1ZHSUNfVjMsIE5SX1ZDUFVTLCB2Y3B1cyk7CiYjNDM7CXYgPSB2bV9naWNfY3JlYXRlX3dpdGhfdmNwdXMoS1ZNX0RFVl9UWVBFX0FSTV9WR0lDX1YzLCBOUl9WQ1BVUywKJiM0MzsJCQkJICAgICBndWVzdF9jb2RlLCB2Y3B1cyk7CiAJc3VidGVzdF92M19yZWRpc3RfcmVnaW9ucygmYW1wO3YpOwogCiAJcmV0ID0gX19rdm1fZGV2aWNlX2F0dHJfc2V0KHYuZ2ljX2ZkLCBLVk1fREVWX0FSTV9WR0lDX0dSUF9BRERSLApAQCAtNDU3LDYgJiM0Mzs0ODksNzAgQEAgc3RhdGljIHZvaWQgdGVzdF92M19uZXdfcmVkaXN0X3JlZ2lvbnModm9pZCkKIAl2bV9naWNfZGVzdHJveSgmYW1wO3YpOwogfQogCiYjNDM7c3RhdGljIHZvaWQgdGVzdF92M19yZWRpc3RfcmVnaW9uX3JldHJ5KHZvaWQpCiYjNDM7ewomIzQzOwlzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHVzW05SX1ZDUFVTXTsKJiM0MzsJc3RydWN0IHZtX2dpYyB2OwomIzQzOwlzdHJ1Y3QgdWNhbGwgdWM7CiYjNDM7CXU2NCBhZGRyOwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwl2ID0gdm1fZ2ljX2NyZWF0ZV93aXRoX3ZjcHVzKEtWTV9ERVZfVFlQRV9BUk1fVkdJQ19WMywgTlJfVkNQVVMsCiYjNDM7CQkJCSAgICAgZ3Vlc3RfY2hlY2tfcmVkaXN0X3JldHJ5LCB2Y3B1cyk7CiYjNDM7CiYjNDM7CWFkZHIgPSBSRURJU1RfUkVHSU9OX0FUVFJfQUREUigyLCBSRURJU1RfUkVUUllfUkVHSU9OMF9CQVNFLCAwLCAwKTsKJiM0MzsJa3ZtX2RldmljZV9hdHRyX3NldCh2LmdpY19mZCwgS1ZNX0RFVl9BUk1fVkdJQ19HUlBfQUREUiwKJiM0MzsJCQkgICAgS1ZNX1ZHSUNfVjNfQUREUl9UWVBFX1JFRElTVF9SRUdJT04sICZhbXA7YWRkcik7CiYjNDM7CiYjNDM7CWFkZHIgPSBSRURJU1RfUkVHSU9OX0FUVFJfQUREUigxLCBSRURJU1RfUkVUUllfUkVHSU9OMV9CQVNFLCAwLCAxKTsKJiM0MzsJa3ZtX2RldmljZV9hdHRyX3NldCh2LmdpY19mZCwgS1ZNX0RFVl9BUk1fVkdJQ19HUlBfQUREUiwKJiM0MzsJCQkgICAgS1ZNX1ZHSUNfVjNfQUREUl9UWVBFX1JFRElTVF9SRUdJT04sICZhbXA7YWRkcik7CiYjNDM7CiYjNDM7CWFkZHIgPSBSRURJU1RfUkVUUllfRElTVF9CQVNFOwomIzQzOwlrdm1fZGV2aWNlX2F0dHJfc2V0KHYuZ2ljX2ZkLCBLVk1fREVWX0FSTV9WR0lDX0dSUF9BRERSLAomIzQzOwkJCSAgICBLVk1fVkdJQ19WM19BRERSX1RZUEVfRElTVCwgJmFtcDthZGRyKTsKJiM0MzsKJiM0MzsJYWRkciA9IFJFRElTVF9SRUdJT05fQVRUUl9BRERSKDEsIFJFRElTVF9SRVRSWV9ESVNUX0JBU0UsIDAsIDIpOwomIzQzOwlyZXQgPSBfX2t2bV9kZXZpY2VfYXR0cl9zZXQodi5naWNfZmQsIEtWTV9ERVZfQVJNX1ZHSUNfR1JQX0FERFIsCiYjNDM7CQkJCSAgICBLVk1fVkdJQ19WM19BRERSX1RZUEVfUkVESVNUX1JFR0lPTiwKJiM0MzsJCQkJICAgICZhbXA7YWRkcik7CiYjNDM7CVRFU1RfQVNTRVJUKHJldCAmYW1wOyZhbXA7IGVycm5vID09IEVJTlZBTCwKJiM0MzsJCSAgICAmIzM0O3JlZ2lzdGVyIHJlZGlzdCByZWdpb24gY29sbGlkaW5nIHdpdGggZGlzdCYjMzQ7KTsKJiM0MzsKJiM0MzsJYWRkciA9IFJFRElTVF9SRUdJT05fQVRUUl9BRERSKDEsIFJFRElTVF9SRVRSWV9SRUdJT04yX0JBU0UsIDAsIDIpOwomIzQzOwlrdm1fZGV2aWNlX2F0dHJfc2V0KHYuZ2ljX2ZkLCBLVk1fREVWX0FSTV9WR0lDX0dSUF9BRERSLAomIzQzOwkJCSAgICBLVk1fVkdJQ19WM19BRERSX1RZUEVfUkVESVNUX1JFR0lPTiwgJmFtcDthZGRyKTsKJiM0MzsKJiM0MzsJdmlydF9tYXAodi52bSwgUkVESVNUX1JFVFJZX1JFR0lPTjBfQkFTRSwgUkVESVNUX1JFVFJZX1JFR0lPTjBfQkFTRSwKJiM0MzsJCSB2bV9jYWxjX251bV9ndWVzdF9wYWdlcyh2LnZtLSZndDttb2RlLAomIzQzOwkJCQkJIDMgKiBLVk1fVkdJQ19WM19SRURJU1RfU0laRSkpOwomIzQzOwl2aXJ0X21hcCh2LnZtLCBSRURJU1RfUkVUUllfUkVHSU9OMl9CQVNFLCBSRURJU1RfUkVUUllfUkVHSU9OMl9CQVNFLAomIzQzOwkJIHZtX2NhbGNfbnVtX2d1ZXN0X3BhZ2VzKHYudm0tJmd0O21vZGUsCiYjNDM7CQkJCQkgS1ZNX1ZHSUNfVjNfUkVESVNUX1NJWkUpKTsKJiM0MzsKJiM0MzsJa3ZtX2RldmljZV9hdHRyX3NldCh2LmdpY19mZCwgS1ZNX0RFVl9BUk1fVkdJQ19HUlBfQ1RSTCwKJiM0MzsJCQkgICAgS1ZNX0RFVl9BUk1fVkdJQ19DVFJMX0lOSVQsIE5VTEwpOwomIzQzOwomIzQzOwl2Y3B1X3J1bih2Y3B1c1swXSk7CiYjNDM7CXN3aXRjaCAoZ2V0X3VjYWxsKHZjcHVzWzBdLCAmYW1wO3VjKSkgewomIzQzOwljYXNlIFVDQUxMX0RPTkU6CiYjNDM7CQlicmVhazsKJiM0MzsJY2FzZSBVQ0FMTF9BQk9SVDoKJiM0MzsJCVJFUE9SVF9HVUVTVF9BU1NFUlQodWMpOwomIzQzOwkJYnJlYWs7CiYjNDM7CWNhc2UgVUNBTExfTk9ORToKJiM0MzsJCWlmICh2Y3B1c1swXS0mZ3Q7cnVuLSZndDtleGl0X3JlYXNvbiA9PSBLVk1fRVhJVF9NTUlPKQomIzQzOwkJCVRFU1RfRkFJTCgmIzM0O1VuZXhwZWN0ZWQgTU1JTyBleGl0IGF0IDB4JWxseCYjMzQ7LAomIzQzOwkJCQkgIHZjcHVzWzBdLSZndDtydW4tJmd0O21taW8ucGh5c19hZGRyKTsKJiM0MzsJCWZhbGx0aHJvdWdoOwomIzQzOwlkZWZhdWx0OgomIzQzOwkJVEVTVF9GQUlMKCYjMzQ7VW5leHBlY3RlZCB1Y2FsbCAlbHUsIGV4aXRfcmVhc29uICV1JiMzNDssCiYjNDM7CQkJICB1Yy5jbWQsIHZjcHVzWzBdLSZndDtydW4tJmd0O2V4aXRfcmVhc29uKTsKJiM0MzsJfQomIzQzOwomIzQzOwl2bV9naWNfZGVzdHJveSgmYW1wO3YpOwomIzQzO30KJiM0MzsKIHN0YXRpYyB2b2lkIHRlc3RfdjNfdHlwZXJfYWNjZXNzZXModm9pZCkKIHsKIAlzdHJ1Y3Qgdm1fZ2ljIHY7CkBAIC02MDgsNyAmIzQzOzcwNCw4IEBAIHN0YXRpYyB2b2lkIHRlc3RfdjNfcmVkaXN0X2lwYV9yYW5nZV9jaGVja19hdF92Y3B1X3J1bih2b2lkKQogCWludCByZXQsIGk7CiAJdTY0IGFkZHI7CiAKLQl2ID0gdm1fZ2ljX2NyZWF0ZV93aXRoX3ZjcHVzKEtWTV9ERVZfVFlQRV9BUk1fVkdJQ19WMywgMSwgdmNwdXMpOwomIzQzOwl2ID0gdm1fZ2ljX2NyZWF0ZV93aXRoX3ZjcHVzKEtWTV9ERVZfVFlQRV9BUk1fVkdJQ19WMywgMSwgZ3Vlc3RfY29kZSwKJiM0MzsJCQkJICAgICB2Y3B1cyk7CiAKIAkvKiBTZXQgc3BhY2UgZm9yIDMgcmVkaXN0cywgd2UgaGF2ZSAxIHZjcHUsIHNvIHRoaXMgc3VjY2VlZHMuICovCiAJYWRkciA9IG1heF9waHlzX3NpemUgLSAoMyAqIDIgKiAweDEwMDAwKTsKQEAgLTY0MSw3ICYjNDM7NzM4LDggQEAgc3RhdGljIHZvaWQgdGVzdF92M19pdHNfcmVnaW9uKHZvaWQpCiAJdTY0IGFkZHI7CiAJaW50IGl0c19mZCwgcmV0OwogCi0JdiA9IHZtX2dpY19jcmVhdGVfd2l0aF92Y3B1cyhLVk1fREVWX1RZUEVfQVJNX1ZHSUNfVjMsIE5SX1ZDUFVTLCB2Y3B1cyk7CiYjNDM7CXYgPSB2bV9naWNfY3JlYXRlX3dpdGhfdmNwdXMoS1ZNX0RFVl9UWVBFX0FSTV9WR0lDX1YzLCBOUl9WQ1BVUywKJiM0MzsJCQkJICAgICBndWVzdF9jb2RlLCB2Y3B1cyk7CiAJaXRzX2ZkID0ga3ZtX2NyZWF0ZV9kZXZpY2Uodi52bSwgS1ZNX0RFVl9UWVBFX0FSTV9WR0lDX0lUUyk7CiAKIAlhZGRyID0gMHg0MDEwMDA7CkBAIC02ODQsNyAmIzQzOzc4Miw4IEBAIHN0YXRpYyB2b2lkIHRlc3RfdjNfbmFzc2dpY2FwKHZvaWQpCiAJdTMyIHR5cGVyMjsKIAlpbnQgcmV0OwogCi0Jdm0gPSB2bV9naWNfY3JlYXRlX3dpdGhfdmNwdXMoS1ZNX0RFVl9UWVBFX0FSTV9WR0lDX1YzLCBOUl9WQ1BVUywgdmNwdXMpOwomIzQzOwl2bSA9IHZtX2dpY19jcmVhdGVfd2l0aF92Y3B1cyhLVk1fREVWX1RZUEVfQVJNX1ZHSUNfVjMsIE5SX1ZDUFVTLAomIzQzOwkJCQkgICAgICBndWVzdF9jb2RlLCB2Y3B1cyk7CiAJa3ZtX2RldmljZV9hdHRyX2dldCh2bS5naWNfZmQsIEtWTV9ERVZfQVJNX1ZHSUNfR1JQX0RJU1RfUkVHUywKIAkJCSAgICBHSUNEX1RZUEVSMiwgJmFtcDt0eXBlcjIpOwogCWhhc19uYXNzZ2ljYXAgPSB0eXBlcjIgJmFtcDsgR0lDRF9UWVBFUjJfbkFTU0dJY2FwOwpAQCAtOTc4LDYgJiM0MzsxMDc3LDcgQEAgdm9pZCBydW5fdGVzdHModTMyIGdpY19kZXZfdHlwZSkKIAogCWlmIChWR0lDX0RFVl9JU19WMyhnaWNfZGV2X3R5cGUpKSB7CiAJCXRlc3RfdjNfbmV3X3JlZGlzdF9yZWdpb25zKCk7CiYjNDM7CQl0ZXN0X3YzX3JlZGlzdF9yZWdpb25fcmV0cnkoKTsKIAkJdGVzdF92M190eXBlcl9hY2Nlc3NlcygpOwogCQl0ZXN0X3YzX2xhc3RfYml0X3JlZGlzdF9yZWdpb25zKCk7CiAJCXRlc3RfdjNfbGFzdF9iaXRfc2luZ2xlX3JkaXN0KCk7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDA4OjI2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDcxMjEKCQkJCQkJCW91dHB1dDogNTEKCQkJCQkJCXRob3VnaHRzOiAyMjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgTGludXggS2VybmVsIENvbW1pdCBmb3IgRnV6emluZyBQb3RlbnRpYWwqKgoKT2theSwgc28gSSBuZWVkIHRvIGV2YWx1YXRlIHRoaXMgcmVjZW50IGNvbW1pdCB0byB0aGUgTGludXgga2VybmVsLiBUaGUgZ29hbCBpcyB0byBkZXRlcm1pbmUgaWYgaXQmIzM5O3MgZnV6ei13b3J0aHksIHdoYXQgc3BlY2lmaWMgc3ltYm9scyBJIHNob3VsZCBmb2N1cyBvbiwgYW5kIGFueSBjb25maWd1cmF0aW9uIHNldHRpbmdzIEkgbmVlZCB0byBiZSBhd2FyZSBvZi4gTGV0JiMzOTtzIGRpZyBpbi4KClRoZSBkaWZmIHRhcmdldHMgYGFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1tbWlvLXYzLmNgIGFuZCBhZGRzIHRlc3RzIHRvIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vYXJtNjQvdmdpY19pbml0LmNgLiBUaGF0IGltbWVkaWF0ZWx5IG1ha2VzIG1lIHRoaW5rIHRoaXMgaW52b2x2ZXMgS1ZNIGFuZCBzcGVjaWZpY2FsbHkgdGhlIFZpcnR1YWwgR0lDIChHZW5lcmljIEludGVycnVwdCBDb250cm9sbGVyKSBpbXBsZW1lbnRhdGlvbiBmb3IgQVJNNjQuIEludGVyZXN0aW5nLgoKSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCB0aGUga2V5IGZ1bmN0aW9ucyBpbnRyb2R1Y2VkIG9yIG1vZGlmaWVkIGFyZSwgc28gSSYjMzk7bGwgcmV2aWV3IGB2Z2ljX3VuZG9fcmVkaXN0X2Fzc2lnbm1lbnRgLCBgdmdpY19yZWdpc3Rlcl9yZWRpc3RfaW9kZXZgLCBgdmdpY19yb2xsYmFja19yZWRpc3RfaW9kZXZgLCBgdmdpY19yZWdpc3Rlcl9hbGxfcmVkaXN0X2lvZGV2c2AsIGFuZCBgdmdpY192M19zZXRfcmVkaXN0X2Jhc2VgIGluIGRldGFpbC4gVGhlc2UgbGlrZWx5IGhhbmRsZSB0aGUgcmVkaXN0cmlidXRpb24gb2YgSS9PIGRldmljZXMgd2l0aGluIHRoZSBWVkdJQy4gSW50ZXJydXB0IGNvbnRyb2xsZXJzIGFyZSBhbHdheXMgYSBnb29kIGFyZWEgZm9yIGZ1enppbmcsIGVzcGVjaWFsbHkgdmlydHVhbGl6ZWQgb25lcy4KClRvIGdldCBhIGJldHRlciBwaWN0dXJlLCBJJiMzOTtsbCB1c2UgZWl0aGVyIGBncmVwcGVyYCBvciBqdXN0IHJlYWQgdGhlIHJlbGV2YW50IGZpbGVzLCBzcGVjaWZpY2FsbHkgYGFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1tbWlvLXYzLmNgLCB0byB1bmRlcnN0YW5kIHRoZSBjb250cm9sIGZsb3cgYW5kIGRhdGEgc3RydWN0dXJlcyBpbnZvbHZlZC4gSSYjMzk7bGwgYWxzbyBkb3VibGUtY2hlY2sgdGhlIEtjb25maWcgb3B0aW9ucyBmb3IgQVJNNjQgS1ZNIHRvIHNlZSBpZiBhbnkgc3BlY2lmaWMgY29uZmlndXJhdGlvbnMgbmVlZCB0byBiZSBlbmFibGVkIGZvciB0aGlzIGNvZGUgdG8gYmUgYWN0aXZlLiBUaGF0IHdpbGwgaW5mbHVlbmNlIHRoZSBzZXR1cCBvZiBhbnkgZnV6emluZyBlbnZpcm9ubWVudCBJIGVzdGFibGlzaC4gSSBuZWVkIHRvIGJlIGNlcnRhaW4gdGhlIGtlcm5lbCBpcyBjb25maWd1cmVkIGNvcnJlY3RseSB0byBleGVyY2lzZSB0aGlzIGNvZGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMDg6MjY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDthcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtbW1pby12My5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNzYwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNzYwOlx0e1xuIDc2MTpcdFx0ZGV2LVx1MDAzZXJlZ2lvbnMgPSB2Z2ljX3YzX2Rpc3RfcmVnaXN0ZXJzO1xuIDc2MjpcdFx0ZGV2LVx1MDAzZW5yX3JlZ2lvbnMgPSBBUlJBWV9TSVpFKHZnaWNfdjNfZGlzdF9yZWdpc3RlcnMpO1xuIDc2MzpcdFxuIDc2NDpcdFx0a3ZtX2lvZGV2aWNlX2luaXQoXHUwMDI2ZGV2LVx1MDAzZWRldiwgXHUwMDI2a3ZtX2lvX2dpY19vcHMpO1xuIDc2NTpcdFxuIDc2NjpcdFx0cmV0dXJuIFNaXzY0SztcbiA3Njc6XHR9XG4gNzY4Olx0XG4gNzY5Olx0c3RhdGljIHZvaWQgdmdpY191bmRvX3JlZGlzdF9hc3NpZ25tZW50KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiA3NzA6XHR7XG4gNzcxOlx0XHRzdHJ1Y3QgdmdpY19jcHUgKnZnaWNfY3B1ID0gXHUwMDI2dmNwdS1cdTAwM2VhcmNoLnZnaWNfY3B1O1xuIDc3MjpcdFxuIDc3MzpcdFx0bG9ja2RlcF9hc3NlcnRfaGVsZChcdTAwMjZ2Y3B1LVx1MDAzZWt2bS1cdTAwM2VzbG90c19sb2NrKTtcbiA3NzQ6XHRcbiA3NzU6XHRcdGd1YXJkKG11dGV4KShcdTAwMjZ2Y3B1LVx1MDAzZWt2bS1cdTAwM2VhcmNoLmNvbmZpZ19sb2NrKTtcbiA3NzY6XHRcbiA3Nzc6XHRcdHZnaWNfY3B1LVx1MDAzZXJkcmVnLVx1MDAzZWZyZWVfaW5kZXgtLTtcbiA3Nzg6XHRcdHZnaWNfY3B1LVx1MDAzZXJkcmVnID0gTlVMTDtcbiA3Nzk6XHRcdHZnaWNfY3B1LVx1MDAzZXJkX2lvZGV2LmJhc2VfYWRkciA9IFZHSUNfQUREUl9VTkRFRjtcbiA3ODA6XHR9XG4gNzgxOlx0XG4gNzgyOlx0LyoqXG4gNzgzOlx0ICogdmdpY19yZWdpc3Rlcl9yZWRpc3RfaW9kZXYgLSByZWdpc3RlciBhIHNpbmdsZSByZWRpc3QgaW9kZXZcbiA3ODQ6XHQgKiBAdmNwdTogICAgVGhlIFZDUFUgdG8gd2hpY2ggdGhlIHJlZGlzdHJpYnV0b3IgYmVsb25nc1xuIDc4NTpcdCAqXG4gNzg2Olx0ICogUmVnaXN0ZXIgYSBLVk0gaW9kZXYgZm9yIHRoaXMgVkNQVSYjMzk7cyByZWRpc3RyaWJ1dG9yIHVzaW5nIHRoZSBhZGRyZXNzXG4gNzg3Olx0ICogcHJvdmlkZWQuXG4gNzg4Olx0ICpcbiA3ODk6XHQgKiBSZXR1cm4gMCBvbiBzdWNjZXNzLCAtRVJSTk8gb3RoZXJ3aXNlLlxuIDc5MDpcdCAqL1xuIDc5MTpcdGludCB2Z2ljX3JlZ2lzdGVyX3JlZGlzdF9pb2RldihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gNzkyOlx0e1xuIDc5MzpcdFx0c3RydWN0IGt2bSAqa3ZtID0gdmNwdS1cdTAwM2Vrdm07XG4gNzk0Olx0XHRzdHJ1Y3QgdmdpY19kaXN0ICp2Z2ljID0gXHUwMDI2a3ZtLVx1MDAzZWFyY2gudmdpYztcbiA3OTU6XHRcdHN0cnVjdCB2Z2ljX2NwdSAqdmdpY19jcHUgPSBcdTAwMjZ2Y3B1LVx1MDAzZWFyY2gudmdpY19jcHU7XG4gNzk2Olx0XHRzdHJ1Y3QgdmdpY19pb19kZXZpY2UgKnJkX2RldiA9IFx1MDAyNnZjcHUtXHUwMDNlYXJjaC52Z2ljX2NwdS5yZF9pb2RldjtcbiA3OTc6XHRcdHN0cnVjdCB2Z2ljX3JlZGlzdF9yZWdpb24gKnJkcmVnO1xuIDc5ODpcdFx0Z3BhX3QgcmRfYmFzZTtcbiA3OTk6XHRcdGludCByZXQgPSAwO1xuIDgwMDpcdFxuIDgwMTpcdFx0bG9ja2RlcF9hc3NlcnRfaGVsZChcdTAwMjZrdm0tXHUwMDNlc2xvdHNfbG9jayk7XG4gODAyOlx0XHRtdXRleF9sb2NrKFx1MDAyNmt2bS1cdTAwM2VhcmNoLmNvbmZpZ19sb2NrKTtcbiA4MDM6XHRcbiA4MDQ6XHRcdGlmICghSVNfVkdJQ19BRERSX1VOREVGKHZnaWNfY3B1LVx1MDAzZXJkX2lvZGV2LmJhc2VfYWRkcikpXG4gODA1Olx0XHRcdGdvdG8gb3V0X3VubG9jaztcbiA4MDY6XHRcbiA4MDc6XHRcdC8qXG4gODA4Olx0XHQgKiBXZSBtYXkgYmUgY3JlYXRpbmcgVkNQVXMgYmVmb3JlIGhhdmluZyBzZXQgdGhlIGJhc2UgYWRkcmVzcyBmb3IgdGhlXG4gODA5Olx0XHQgKiByZWRpc3RyaWJ1dG9yIHJlZ2lvbiwgaW4gd2hpY2ggY2FzZSB3ZSB3aWxsIGNvbWUgYmFjayB0byB0aGlzXG4gODEwOlx0XHQgKiBmdW5jdGlvbiBmb3IgYWxsIFZDUFVzIHdoZW4gdGhlIGJhc2UgYWRkcmVzcyBpcyBzZXQuICBKdXN0IHJldHVyblxuIDgxMTpcdFx0ICogd2l0aG91dCBkb2luZyBhbnkgd29yayBmb3Igbm93LlxuIDgxMjpcdFx0ICovXG4gODEzOlx0XHRyZHJlZyA9IHZnaWNfdjNfcmRpc3RfZnJlZV9zbG90KFx1MDAyNnZnaWMtXHUwMDNlcmRfcmVnaW9ucyk7XG4gODE0Olx0XHRpZiAoIXJkcmVnKVxuIDgxNTpcdFx0XHRnb3RvIG91dF91bmxvY2s7XG4gODE2Olx0XG4gODE3Olx0XHRpZiAoIXZnaWNfdjNfY2hlY2tfYmFzZShrdm0pKSB7XG4gODE4Olx0XHRcdHJldCA9IC1FSU5WQUw7XG4gODE5Olx0XHRcdGdvdG8gb3V0X3VubG9jaztcbiA4MjA6XHRcdH1cbiA4MjE6XHRcbiA4MjI6XHRcdHZnaWNfY3B1LVx1MDAzZXJkcmVnID0gcmRyZWc7XG4gODIzOlx0XHR2Z2ljX2NwdS1cdTAwM2VyZHJlZ19pbmRleCA9IHJkcmVnLVx1MDAzZWZyZWVfaW5kZXg7XG4gODI0Olx0XG4gODI1Olx0XHRyZF9iYXNlID0gcmRyZWctXHUwMDNlYmFzZSAmIzQzOyByZHJlZy1cdTAwM2VmcmVlX2luZGV4ICogS1ZNX1ZHSUNfVjNfUkVESVNUX1NJWkU7XG4gODI2Olx0XG4gODI3Olx0XHRrdm1faW9kZXZpY2VfaW5pdChcdTAwMjZyZF9kZXYtXHUwMDNlZGV2LCBcdTAwMjZrdm1faW9fZ2ljX29wcyk7XG4gODI4Olx0XHRyZF9kZXYtXHUwMDNlYmFzZV9hZGRyID0gcmRfYmFzZTtcbiA4Mjk6XHRcdHJkX2Rldi1cdTAwM2Vpb2Rldl90eXBlID0gSU9ERVZfUkVESVNUO1xuIDgzMDpcdFx0cmRfZGV2LVx1MDAzZXJlZ2lvbnMgPSB2Z2ljX3YzX3JkX3JlZ2lzdGVycztcbiA4MzE6XHRcdHJkX2Rldi1cdTAwM2Vucl9yZWdpb25zID0gQVJSQVlfU0laRSh2Z2ljX3YzX3JkX3JlZ2lzdGVycyk7XG4gODMyOlx0XHRyZF9kZXYtXHUwMDNlcmVkaXN0X3ZjcHUgPSB2Y3B1O1xuIDgzMzpcdFxuIDgzNDpcdFx0LyogUHJvdGVjdGVkIGJ5IHNsb3RzX2xvY2sgKi9cbiA4MzU6XHRcdHJkcmVnLVx1MDAzZWZyZWVfaW5kZXgmIzQzOyYjNDM7O1xuIDgzNjpcdFxuIDgzNzpcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNmt2bS1cdTAwM2VhcmNoLmNvbmZpZ19sb2NrKTtcbiA4Mzg6XHRcbiA4Mzk6XHRcdHJldCA9IGt2bV9pb19idXNfcmVnaXN0ZXJfZGV2KGt2bSwgS1ZNX01NSU9fQlVTLCByZF9iYXNlLFxuIDg0MDpcdFx0XHRcdFx0ICAgICAgMiAqIFNaXzY0SywgXHUwMDI2cmRfZGV2LVx1MDAzZWRldik7XG4gODQxOlx0XHRpZiAocmV0KVxuIDg0MjpcdFx0XHR2Z2ljX3VuZG9fcmVkaXN0X2Fzc2lnbm1lbnQodmNwdSk7XG4gODQzOlx0XG4gODQ0Olx0XHRyZXR1cm4gcmV0O1xuIDg0NTpcdFxuIDg0NjpcdG91dF91bmxvY2s6XG4gODQ3Olx0XHRtdXRleF91bmxvY2soXHUwMDI2a3ZtLVx1MDAzZWFyY2guY29uZmlnX2xvY2spO1xuIDg0ODpcdFx0cmV0dXJuIHJldDtcbiA4NDk6XHR9XG4gODUwOlx0XG4gODUxOlx0dm9pZCB2Z2ljX3VucmVnaXN0ZXJfcmVkaXN0X2lvZGV2KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiA4NTI6XHR7XG4gODUzOlx0XHRzdHJ1Y3QgdmdpY19pb19kZXZpY2UgKnJkX2RldiA9IFx1MDAyNnZjcHUtXHUwMDNlYXJjaC52Z2ljX2NwdS5yZF9pb2RldjtcbiA4NTQ6XHRcbiA4NTU6XHRcdGt2bV9pb19idXNfdW5yZWdpc3Rlcl9kZXYodmNwdS1cdTAwM2Vrdm0sIEtWTV9NTUlPX0JVUywgXHUwMDI2cmRfZGV2LVx1MDAzZWRldik7XG4gODU2Olx0fVxuIDg1NzpcdFxuIDg1ODpcdHN0YXRpYyB2b2lkIHZnaWNfcm9sbGJhY2tfcmVkaXN0X2lvZGV2KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbiA4NTk6XHRcdFx0XHRcdCAgICAgICBzdHJ1Y3QgdmdpY19yZWRpc3RfcmVnaW9uICpyZHJlZylcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAwODoyNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5NDcwCgkJCQkJCQlvdXRwdXQ6IDUwCgkJCQkJCQl0aG91Z2h0czogNDEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIGxpbmVzIG9mIGNvZGUsIHByZXNlbnRlZCBhcyBhIHBlcnNvbmFsIHJlZmxlY3Rpb24sIGFzIGlmIEkgd2VyZSBhbmFseXppbmcgdGhlbSBteXNlbGY6CgoqKkFuYWx5emluZyB2Z2ljLW1taW8tdjMuYzogTGluZXMgODYwLTEwMzAqKgoKQWxyaWdodCwgSSYjMzk7bSBoZWFkaW5nIGRvd24gaW50byB0aGUgZ3V0cyBvZiB0aGUgYHZnaWMtbW1pby12My5jYCBmaWxlLCBzcGVjaWZpY2FsbHkgbGluZXMgODYwIHRvIDEwMzAuIFRoaXMgbGlrZWx5IGNvbnRhaW5zIGNydWNpYWwgbG9naWMgZm9yIGhhbmRsaW5nIHRoZSBNTUlPIChNZW1vcnktTWFwcGVkIEkvTykgaW50ZXJhY3Rpb25zIGZvciB0aGUgVmlydHVhbCBHSUMgKEdlbmVyaWMgSW50ZXJydXB0IENvbnRyb2xsZXIpIHZlcnNpb24gMywgd2l0aGluIHRoZSBBUk02NCBLVk0gZW52aXJvbm1lbnQuIEdpdmVuIHRoZSBsaW5lIG51bWJlcnMsIEkmIzM5O20gZXhwZWN0aW5nIHRoaXMgaXMgZ29pbmcgdG8gYmUgYSByZWxhdGl2ZWx5IHNlbGYtY29udGFpbmVkLCBidXQgaW1wb3J0YW50LCBibG9jayBvZiBjb2RlLiBNeSBodW5jaCBpcyB0aGF0IHRoaXMgZGVhbHMgd2l0aCBlaXRoZXIgdGhlIHJlYWQgb3Igd3JpdGUgaGFuZGxpbmcgZm9yIGEgc2V0IG9mIHJlZ2lzdGVycywgb3IgcGVyaGFwcyBhIGNvcmUgc3RhdGUgdXBkYXRlIHdpdGhpbiB0aGUgdmdpYy4gTGV0IG1lIGFuYWx5emUgdGhpcyBhIGxpdHRsZSBkZWVwZXIsIGFuZCBzZWUgaWYgSSBjYW4gZmlndXJlIG91dCB0aGUgY29udGV4dC4KCkkgYW0gbG9va2luZyB0byB1bmRlcnN0YW5kIGV4YWN0bHkgaG93IHRoZSBLVk0gaHlwZXJ2aXNvciBpcyBpbnRlcmFjdGluZyB3aXRoIHRoZSB2aXJ0dWFsIEdJQy4gSSB3aWxsIHN0YXJ0IGJ5IHNlZWluZyBob3cgdGhlIGRpZmZlcmVudCByZWdpc3RlcnMgaW4gdGhlIHZpcnR1YWwgR0lDIGFyZSBtYXBwZWQuIEZyb20gdGhlcmUsIEkgd2lsbCBsaWtlbHkgdW5kZXJzdGFuZCBob3cgaW50ZXJydXB0cyBhcmUgaW5qZWN0ZWQgaW50byB0aGUgZ3Vlc3QgVk1zLiBJIGFtIG1vc3QgaW50ZXJlc3RlZCBpbiBzZWVpbmcgaWYgdGhlcmUgYXJlIGFueSByYWNlIGNvbmRpdGlvbnMgYmV0d2VlbiB0aGUgaG9zdCBhbmQgZ3Vlc3QsIGFuZCBob3cgdGhpcyBpcyBoYW5kbGVkLCBpZiBzby4gVGhlIG1vc3QgaW1wb3J0YW50IHRoaW5nIGhlcmUgaXMgdG8gbWFrZSBzdXJlIHRoaXMgaXMgZWZmaWNpZW50LCBnaXZlbiBob3cgaW50ZXJydXB0IGRlbGl2ZXJ5IGlzIGEgaGlnaCBmcmVxdWVuY3kgZXZlbnQuCgpJIHdpbGwgYWxzbyBiZSBvbiB0aGUgbG9va291dCBmb3IgYW55IHBvdGVudGlhbCBhcmVhcyBmb3Igb3B0aW1pemF0aW9uLCBvciBwb2ludHMgd2hlcmUgd2UgY291bGQgYmUgaW5hZHZlcnRlbnRseSBpbnRyb2R1Y2luZyBsYXRlbmN5LiBUaGUgZ29hbCBoZXJlIGlzIHRvIGdldCBhIHNvbGlkIGdyYXNwIG9mIGhvdyB0aGUgTU1JTyBtZWNoYW5pc20gd29ya3MgaW4gdGhpcyBWZ2ljLVYzIGNvbnRleHQuIEkgYWxzbyB3YW50IHRvIGlkZW50aWZ5IGhvdyB0aGUgY29kZSBtaWdodCBpbnRlcmFjdCB3aXRoIG90aGVyIHBhcnRzIG9mIHRoZSBLVk0gaW5mcmFzdHJ1Y3R1cmUsIHN1Y2ggYXMgdGhlIHZDUFUgb3IgdGhlIGludGVycnVwdCBjb250cm9sbGVyIGVtdWxhdGlvbiBsYXllcnMuIFRoaXMgcGFydGljdWxhciBzZWN0aW9uIGhhcyB0byBiZSBjb21wbGV0ZWx5IGNvcnJlY3QsIGFzIGludGVycnVwdCBkZWxpdmVyeSBpcyBjcnVjaWFsIGZvciBwcm9wZXIgb3BlcmF0aW9uLiBJJiMzOTttIGhvcGluZyBJIGNhbiBmaW5kIGEgc2VjdGlvbiB0aGF0IGlzIHVuZGVyc3RhbmRhYmxlLCBzbyB0aGF0IEkgY2FuIGxvb2sgYXQgbW9yZSBjb21wbGljYXRlZCBhcmVhcyBsYXRlci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAwODoyNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2FyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1tbWlvLXYzLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA4NTgsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogODAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDg1ODpcdHN0YXRpYyB2b2lkIHZnaWNfcm9sbGJhY2tfcmVkaXN0X2lvZGV2KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbiA4NTk6XHRcdFx0XHRcdCAgICAgICBzdHJ1Y3QgdmdpY19yZWRpc3RfcmVnaW9uICpyZHJlZylcbiA4NjA6XHR7XG4gODYxOlx0XHRzdHJ1Y3QgdmdpY19jcHUgKnZnaWNfY3B1ID0gXHUwMDI2dmNwdS1cdTAwM2VhcmNoLnZnaWNfY3B1O1xuIDg2MjpcdFxuIDg2MzpcdFx0bG9ja2RlcF9hc3NlcnRfaGVsZChcdTAwMjZ2Y3B1LVx1MDAzZWt2bS1cdTAwM2VzbG90c19sb2NrKTtcbiA4NjQ6XHRcbiA4NjU6XHRcdGlmICh2Z2ljX2NwdS1cdTAwM2VyZHJlZyAhPSByZHJlZylcbiA4NjY6XHRcdFx0cmV0dXJuO1xuIDg2NzpcdFxuIDg2ODpcdFx0dmdpY191bnJlZ2lzdGVyX3JlZGlzdF9pb2Rldih2Y3B1KTtcbiA4Njk6XHRcbiA4NzA6XHRcdGd1YXJkKG11dGV4KShcdTAwMjZ2Y3B1LVx1MDAzZWt2bS1cdTAwM2VhcmNoLmNvbmZpZ19sb2NrKTtcbiA4NzE6XHRcdHZnaWNfY3B1LVx1MDAzZXJkcmVnID0gTlVMTDtcbiA4NzI6XHRcdHZnaWNfY3B1LVx1MDAzZXJkX2lvZGV2LmJhc2VfYWRkciA9IFZHSUNfQUREUl9VTkRFRjtcbiA4NzM6XHR9XG4gODc0Olx0XG4gODc1Olx0c3RhdGljIGludCB2Z2ljX3JlZ2lzdGVyX2FsbF9yZWRpc3RfaW9kZXZzKHN0cnVjdCBrdm0gKmt2bSxcbiA4NzY6XHRcdFx0XHRcdFx0ICAgc3RydWN0IHZnaWNfcmVkaXN0X3JlZ2lvbiAqcmRyZWcpXG4gODc3Olx0e1xuIDg3ODpcdFx0c3RydWN0IGt2bV92Y3B1ICp2Y3B1O1xuIDg3OTpcdFx0dW5zaWduZWQgbG9uZyBjO1xuIDg4MDpcdFx0aW50IHJldCA9IDA7XG4gODgxOlx0XG4gODgyOlx0XHRsb2NrZGVwX2Fzc2VydF9oZWxkKFx1MDAyNmt2bS1cdTAwM2VzbG90c19sb2NrKTtcbiA4ODM6XHRcbiA4ODQ6XHRcdGt2bV9mb3JfZWFjaF92Y3B1KGMsIHZjcHUsIGt2bSkge1xuIDg4NTpcdFx0XHRyZXQgPSB2Z2ljX3JlZ2lzdGVyX3JlZGlzdF9pb2Rldih2Y3B1KTtcbiA4ODY6XHRcdFx0aWYgKHJldClcbiA4ODc6XHRcdFx0XHRicmVhaztcbiA4ODg6XHRcdH1cbiA4ODk6XHRcbiA4OTA6XHRcdGlmIChyZXQpIHtcbiA4OTE6XHRcdFx0LyogVW5kbyBhc3NpZ25tZW50cyBtYWRlIGZyb20gdGhlIHJlZ2lvbiBiZWluZyBhZGRlZC4gKi9cbiA4OTI6XHRcdFx0aW50IGk7XG4gODkzOlx0XG4gODk0Olx0XHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGM7IGkmIzQzOyYjNDM7KSB7XG4gODk1Olx0XHRcdFx0dmNwdSA9IGt2bV9nZXRfdmNwdShrdm0sIGkpO1xuIDg5NjpcdFx0XHRcdHZnaWNfcm9sbGJhY2tfcmVkaXN0X2lvZGV2KHZjcHUsIHJkcmVnKTtcbiA4OTc6XHRcdFx0fVxuIDg5ODpcdFx0fVxuIDg5OTpcdFxuIDkwMDpcdFx0cmV0dXJuIHJldDtcbiA5MDE6XHR9XG4gOTAyOlx0XG4gOTAzOlx0LyoqXG4gOTA0Olx0ICogdmdpY192M19hbGxvY19yZWRpc3RfcmVnaW9uIC0gQWxsb2NhdGUgYSBuZXcgcmVkaXN0cmlidXRvciByZWdpb25cbiA5MDU6XHQgKlxuIDkwNjpcdCAqIFBlcmZvcm1zIHZhcmlvdXMgY2hlY2tzIGJlZm9yZSBpbnNlcnRpbmcgdGhlIHJkaXN0IHJlZ2lvbiBpbiB0aGUgbGlzdC5cbiA5MDc6XHQgKiBUaG9zZSB0ZXN0cyBkZXBlbmQgb24gd2hldGhlciB0aGUgc2l6ZSBvZiB0aGUgcmRpc3QgcmVnaW9uIGlzIGtub3duXG4gOTA4Olx0ICogKGllLiBjb3VudCAhPSAwKS4gVGhlIGxpc3QgaXMgc29ydGVkIGJ5IHJkaXN0IHJlZ2lvbiBpbmRleC5cbiA5MDk6XHQgKlxuIDkxMDpcdCAqIEBrdm06IGt2bSBoYW5kbGVcbiA5MTE6XHQgKiBAaW5kZXg6IHJlZGlzdCByZWdpb24gaW5kZXhcbiA5MTI6XHQgKiBAYmFzZTogYmFzZSBvZiB0aGUgbmV3IHJkaXN0IHJlZ2lvblxuIDkxMzpcdCAqIEBjb3VudDogbnVtYmVyIG9mIHJlZGlzdHJpYnV0b3JzIHRoZSByZWdpb24gaXMgbWFkZSBvZiAoMCBpbiB0aGUgb2xkIHN0eWxlXG4gOTE0Olx0ICogc2luZ2xlIHJlZ2lvbiwgd2hvc2Ugc2l6ZSBpcyBpbmR1Y2VkIGZyb20gdGhlIG51bWJlciBvZiB2Y3B1cylcbiA5MTU6XHQgKlxuIDkxNjpcdCAqIFJldHVybiAwIG9uIHN1Y2Nlc3MsIFx1MDAzYyAwIG90aGVyd2lzZVxuIDkxNzpcdCAqL1xuIDkxODpcdHN0YXRpYyBpbnQgdmdpY192M19hbGxvY19yZWRpc3RfcmVnaW9uKHN0cnVjdCBrdm0gKmt2bSwgdWludDMyX3QgaW5kZXgsXG4gOTE5Olx0XHRcdFx0XHQgICAgICAgZ3BhX3QgYmFzZSwgdWludDMyX3QgY291bnQpXG4gOTIwOlx0e1xuIDkyMTpcdFx0c3RydWN0IHZnaWNfZGlzdCAqZCA9IFx1MDAyNmt2bS1cdTAwM2VhcmNoLnZnaWM7XG4gOTIyOlx0XHRzdHJ1Y3QgdmdpY19yZWRpc3RfcmVnaW9uICpyZHJlZztcbiA5MjM6XHRcdHN0cnVjdCBsaXN0X2hlYWQgKnJkX3JlZ2lvbnMgPSBcdTAwMjZkLVx1MDAzZXJkX3JlZ2lvbnM7XG4gOTI0Olx0XHRpbnQgbnJfdmNwdXMgPSBhdG9taWNfcmVhZChcdTAwMjZrdm0tXHUwMDNlb25saW5lX3ZjcHVzKTtcbiA5MjU6XHRcdHNpemVfdCBzaXplID0gY291bnQgPyBjb3VudCAqIEtWTV9WR0lDX1YzX1JFRElTVF9TSVpFXG4gOTI2Olx0XHRcdFx0ICAgIDogbnJfdmNwdXMgKiBLVk1fVkdJQ19WM19SRURJU1RfU0laRTtcbiA5Mjc6XHRcdGludCByZXQ7XG4gOTI4Olx0XG4gOTI5Olx0XHQvKiBjcm9zcyB0aGUgZW5kIG9mIG1lbW9yeSA/ICovXG4gOTMwOlx0XHRpZiAoYmFzZSAmIzQzOyBzaXplIFx1MDAzYyBiYXNlKVxuIDkzMTpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiA5MzI6XHRcbiA5MzM6XHRcdGlmIChsaXN0X2VtcHR5KHJkX3JlZ2lvbnMpKSB7XG4gOTM0Olx0XHRcdGlmIChpbmRleCAhPSAwKVxuIDkzNTpcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuIDkzNjpcdFx0fSBlbHNlIHtcbiA5Mzc6XHRcdFx0cmRyZWcgPSBsaXN0X2xhc3RfZW50cnkocmRfcmVnaW9ucyxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAwODoyNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTI4MwoJCQkJCQkJb3V0cHV0OiA1MAoJCQkJCQkJdGhvdWdodHM6IDM5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBhc3N1bWluZyBJJiMzOTttIGRlZXBseSBmYW1pbGlhciB3aXRoIEFSTTY0IEtWTSBhbmQgVkdDOgoKKipEaXZpbmcgaW50byB0aGUgVmdpYy1NTUlPLVYzLmMgQ29kZSoqCgpSaWdodCwgbGV0JiMzOTtzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gdGFrZSBhIGxvb2sgYXQgYSBzcGVjaWZpYyBzZWN0aW9uIG9mIHRoZSB2aXJ0dWFsIEdJQyBNTUlPIGNvZGUuIFNwZWNpZmljYWxseSwgbGluZXMgOTgwIHRocm91Z2ggMTAzMCB3aXRoaW4gdGhlIGBhcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtbW1pby12My5jYCBmaWxlLiBUaGlzIHRlbGxzIG1lIHRoZXJlJiMzOTtzIHNvbWV0aGluZyBzcGVjaWZpYyBpbiB0aGUgVjMgTU1JTyBlbXVsYXRpb24gdGhhdCByZXF1aXJlcyBteSBhdHRlbnRpb24uIEkmIzM5O20gcHJvYmFibHkgZGVhbGluZyB3aXRoIGFuIGlzc3VlLCBwZXJoYXBzIGEgcGVyZm9ybWFuY2UgYm90dGxlbmVjaywgb3IgZGVidWdnaW5nIGEgcmVwb3J0ZWQgYnVnIHJlbGF0ZWQgdG8gaG93IHRoZSB2aXJ0dWFsIEdJQyBoYW5kbGVzIG1lbW9yeS1tYXBwZWQgSS9PLiBUaGUgbGluZSBudW1iZXJzIG5hcnJvdyB0aGUgc2NvcGUsIHdoaWNoIG1lYW5zIEkgc2hvdWxkIHF1aWNrbHkgaXNvbGF0ZSB0aGUgcmVsZXZhbnQgY29kZSBibG9jayBhbmQgdW5kZXJzdGFuZCBpdHMgZnVuY3Rpb24gd2l0aGluIHRoZSBWMyBNTUlPIGZyYW1ld29yay4gSSYjMzk7bSBleHBlY3RpbmcgdGhpcyBibG9jayB3aWxsIHJldmVhbCB0aGUgY3J1eCBvZiB0aGUgcHJvYmxlbS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAwODoyNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2FyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1tbWlvLXYzLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA5ODAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDk4MDpcdFx0cmV0dXJuIDA7XG4gOTgxOlx0ZnJlZTpcbiA5ODI6XHRcdGtmcmVlKHJkcmVnKTtcbiA5ODM6XHRcdHJldHVybiByZXQ7XG4gOTg0Olx0fVxuIDk4NTpcdFxuIDk4NjpcdHZvaWQgdmdpY192M19mcmVlX3JlZGlzdF9yZWdpb24oc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3QgdmdpY19yZWRpc3RfcmVnaW9uICpyZHJlZylcbiA5ODc6XHR7XG4gOTg4Olx0XHRzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHU7XG4gOTg5Olx0XHR1bnNpZ25lZCBsb25nIGM7XG4gOTkwOlx0XG4gOTkxOlx0XHRsb2NrZGVwX2Fzc2VydF9oZWxkKFx1MDAyNmt2bS1cdTAwM2VhcmNoLmNvbmZpZ19sb2NrKTtcbiA5OTI6XHRcbiA5OTM6XHRcdC8qIEdhcmJhZ2UgY29sbGVjdCB0aGUgcmVnaW9uICovXG4gOTk0Olx0XHRrdm1fZm9yX2VhY2hfdmNwdShjLCB2Y3B1LCBrdm0pIHtcbiA5OTU6XHRcdFx0aWYgKHZjcHUtXHUwMDNlYXJjaC52Z2ljX2NwdS5yZHJlZyA9PSByZHJlZylcbiA5OTY6XHRcdFx0XHR2Y3B1LVx1MDAzZWFyY2gudmdpY19jcHUucmRyZWcgPSBOVUxMO1xuIDk5NzpcdFx0fVxuIDk5ODpcdFxuIDk5OTpcdFx0bGlzdF9kZWwoXHUwMDI2cmRyZWctXHUwMDNlbGlzdCk7XG4xMDAwOlx0XHRrZnJlZShyZHJlZyk7XG4xMDAxOlx0fVxuMTAwMjpcdFxuMTAwMzpcdGludCB2Z2ljX3YzX3NldF9yZWRpc3RfYmFzZShzdHJ1Y3Qga3ZtICprdm0sIHUzMiBpbmRleCwgdTY0IGFkZHIsIHUzMiBjb3VudClcbjEwMDQ6XHR7XG4xMDA1Olx0XHRzdHJ1Y3QgdmdpY19yZWRpc3RfcmVnaW9uICpyZHJlZztcbjEwMDY6XHRcdGludCByZXQ7XG4xMDA3Olx0XG4xMDA4Olx0XHRtdXRleF9sb2NrKFx1MDAyNmt2bS1cdTAwM2VhcmNoLmNvbmZpZ19sb2NrKTtcbjEwMDk6XHRcdHJldCA9IHZnaWNfdjNfYWxsb2NfcmVkaXN0X3JlZ2lvbihrdm0sIGluZGV4LCBhZGRyLCBjb3VudCk7XG4xMDEwOlx0XHRpZiAoIXJldClcbjEwMTE6XHRcdFx0cmRyZWcgPSB2Z2ljX3YzX3JkaXN0X3JlZ2lvbl9mcm9tX2luZGV4KGt2bSwgaW5kZXgpO1xuMTAxMjpcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNmt2bS1cdTAwM2VhcmNoLmNvbmZpZ19sb2NrKTtcbjEwMTM6XHRcdGlmIChyZXQpXG4xMDE0Olx0XHRcdHJldHVybiByZXQ7XG4xMDE1Olx0XG4xMDE2Olx0XHQvKlxuMTAxNzpcdFx0ICogUmVnaXN0ZXIgaW9kZXZzIGZvciBlYWNoIGV4aXN0aW5nIFZDUFUuICBBZGRpbmcgbW9yZSBWQ1BVc1xuMTAxODpcdFx0ICogYWZ0ZXJ3YXJkcyB3aWxsIHJlZ2lzdGVyIHRoZSBpb2RldnMgd2hlbiBuZWVkZWQuXG4xMDE5Olx0XHQgKi9cbjEwMjA6XHRcdHJldCA9IHZnaWNfcmVnaXN0ZXJfYWxsX3JlZGlzdF9pb2RldnMoa3ZtLCByZHJlZyk7XG4xMDIxOlx0XHRpZiAocmV0KSB7XG4xMDIyOlx0XHRcdG11dGV4X2xvY2soXHUwMDI2a3ZtLVx1MDAzZWFyY2guY29uZmlnX2xvY2spO1xuMTAyMzpcdFx0XHR2Z2ljX3YzX2ZyZWVfcmVkaXN0X3JlZ2lvbihrdm0sIHJkcmVnKTtcbjEwMjQ6XHRcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNmt2bS1cdTAwM2VhcmNoLmNvbmZpZ19sb2NrKTtcbjEwMjU6XHRcdFx0cmV0dXJuIHJldDtcbjEwMjY6XHRcdH1cbjEwMjc6XHRcbjEwMjg6XHRcdHJldHVybiAwO1xuMTAyOTpcdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAwODoyNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjM1NAoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDM4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkRlbHZpbmcgaW50byBBUk02NCBLVk0gYW5kIFZHSUMgQ29uZmlndXJhdGlvbioqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBLY29uZmlnIG9wdGlvbnMgdGhhdCBnb3Zlcm4gdGhlIGJlaGF2aW9yIG9mIEFSTTY0IEtWTSwgZXNwZWNpYWxseSBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIFZpcnR1YWwgR0lDIChWR0lDKS4gVGhpcyBtZWFucyBJJiMzOTttIGdvaW5nIHRvIGRpdmUgcmlnaHQgaW50byB0aGUgaGVhcnQgb2YgdGhlIG1hdHRlciDigJMgdGhlIGBhcmNoL2FybTY0L2t2bS9LY29uZmlnYCBmaWxlLiBUaGF0JiMzOTtzIHdoZXJlIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9uIHZhcmlhYmxlcyBzaG91bGQgYmUgZGVmaW5lZCBhbmQgbGlua2VkLiBUaGlzIGlzIGdvaW5nIHRvIGdpdmUgbWUgYSBzb2xpZCBmb3VuZGF0aW9uIGZvciBmdXJ0aGVyIGludmVzdGlnYXRpb25zIGludG8gdGhlIGtlcm5lbCBzb3VyY2UuIFRpbWUgdG8gZ2V0IHRvIHdvcmsuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDA4OjI2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7YXJjaC9hcm02NC9rdm0vS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4gICAyOlx0I1xuICAgMzpcdCMgS1ZNIGNvbmZpZ3VyYXRpb25cbiAgIDQ6XHQjXG4gICA1Olx0XG4gICA2Olx0c291cmNlIFwmIzM0O3ZpcnQva3ZtL0tjb25maWdcJiMzNDtcbiAgIDc6XHRcbiAgIDg6XHRtZW51Y29uZmlnIFZJUlRVQUxJWkFUSU9OXG4gICA5Olx0XHRib29sIFwmIzM0O1ZpcnR1YWxpemF0aW9uXCYjMzQ7XG4gIDEwOlx0XHRoZWxwXG4gIDExOlx0XHQgIFNheSBZIGhlcmUgdG8gZ2V0IHRvIHNlZSBvcHRpb25zIGZvciB1c2luZyB5b3VyIExpbnV4IGhvc3QgdG8gcnVuXG4gIDEyOlx0XHQgIG90aGVyIG9wZXJhdGluZyBzeXN0ZW1zIGluc2lkZSB2aXJ0dWFsIG1hY2hpbmVzIChndWVzdHMpLlxuICAxMzpcdFx0ICBUaGlzIG9wdGlvbiBhbG9uZSBkb2VzIG5vdCBhZGQgYW55IGtlcm5lbCBjb2RlLlxuICAxNDpcdFxuICAxNTpcdFx0ICBJZiB5b3Ugc2F5IE4sIGFsbCBvcHRpb25zIGluIHRoaXMgc3VibWVudSB3aWxsIGJlIHNraXBwZWQgYW5kXG4gIDE2Olx0XHQgIGRpc2FibGVkLlxuICAxNzpcdFxuICAxODpcdGlmIFZJUlRVQUxJWkFUSU9OXG4gIDE5Olx0XG4gIDIwOlx0bWVudWNvbmZpZyBLVk1cbiAgMjE6XHRcdGJvb2wgXCYjMzQ7S2VybmVsLWJhc2VkIFZpcnR1YWwgTWFjaGluZSAoS1ZNKSBzdXBwb3J0XCYjMzQ7XG4gIDIyOlx0XHRzZWxlY3QgS1ZNX0NPTU1PTlxuICAyMzpcdFx0c2VsZWN0IEtWTV9HRU5FUklDX0hBUkRXQVJFX0VOQUJMSU5HXG4gIDI0Olx0XHRzZWxlY3QgSEFWRV9LVk1fQ1BVX1JFTEFYX0lOVEVSQ0VQVFxuICAyNTpcdFx0c2VsZWN0IEtWTV9NTUlPXG4gIDI2Olx0XHRzZWxlY3QgS1ZNX0dFTkVSSUNfRElSVFlMT0dfUkVBRF9QUk9URUNUXG4gIDI3Olx0XHRzZWxlY3QgVklSVF9YRkVSX1RPX0dVRVNUX1dPUktcbiAgMjg6XHRcdHNlbGVjdCBLVk1fVkZJT1xuICAyOTpcdFx0c2VsZWN0IEhBVkVfS1ZNX0RJUlRZX1JJTkdfQUNRX1JFTFxuICAzMDpcdFx0c2VsZWN0IE5FRURfS1ZNX0RJUlRZX1JJTkdfV0lUSF9CSVRNQVBcbiAgMzE6XHRcdHNlbGVjdCBIQVZFX0tWTV9NU0lcbiAgMzI6XHRcdHNlbGVjdCBIQVZFX0tWTV9JUlFDSElQXG4gIDMzOlx0XHRzZWxlY3QgSEFWRV9LVk1fSVJRX1JPVVRJTkdcbiAgMzQ6XHRcdHNlbGVjdCBIQVZFX0tWTV9JUlFfQllQQVNTXG4gIDM1Olx0XHRzZWxlY3QgSEFWRV9LVk1fUkVBRE9OTFlfTUVNXG4gIDM2Olx0XHRzZWxlY3QgSEFWRV9LVk1fVkNQVV9SVU5fUElEX0NIQU5HRVxuICAzNzpcdFx0c2VsZWN0IFNDSEVEX0lORk9cbiAgMzg6XHRcdHNlbGVjdCBHVUVTVF9QRVJGX0VWRU5UUyBpZiBQRVJGX0VWRU5UU1xuICAzOTpcdFx0c2VsZWN0IEtWTV9HVUVTVF9NRU1GRFxuICA0MDpcdFx0aGVscFxuICA0MTpcdFx0ICBTdXBwb3J0IGhvc3RpbmcgdmlydHVhbGl6ZWQgZ3Vlc3QgbWFjaGluZXMuXG4gIDQyOlx0XG4gIDQzOlx0XHQgIElmIHVuc3VyZSwgc2F5IE4uXG4gIDQ0Olx0XG4gIDQ1Olx0aWYgS1ZNXG4gIDQ2Olx0XG4gIDQ3Olx0Y29uZmlnIFBURFVNUF9TVEFHRTJfREVCVUdGU1xuICA0ODpcdFx0Ym9vbCBcJiMzNDtQcmVzZW50IHRoZSBzdGFnZS0yIHBhZ2V0YWJsZXMgdG8gZGVidWdmc1wmIzM0O1xuICA0OTpcdFx0ZGVwZW5kcyBvbiBERUJVR19LRVJORUxcbiAgNTA6XHRcdGRlcGVuZHMgb24gREVCVUdfRlNcbiAgNTE6XHRcdGRlcGVuZHMgb24gQVJDSF9IQVNfUFREVU1QXG4gIDUyOlx0XHRzZWxlY3QgUFREVU1QXG4gIDUzOlx0XHRkZWZhdWx0IG5cbiAgNTQ6XHRcdGhlbHBcbiAgNTU6XHRcdCAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCB0byBzaG93IHRoZSBzdGFnZS0yIGtlcm5lbCBwYWdldGFibGVzXG4gIDU2Olx0XHQgIGxheW91dCBpbiBhIGRlYnVnZnMgZmlsZS4gVGhpcyBpbmZvcm1hdGlvbiBpcyBvbmx5IHVzZWZ1bCBmb3Iga2VybmVsIGRldmVsb3BlcnNcbiAgNTc6XHRcdCAgd2hvIGFyZSB3b3JraW5nIGluIGFyY2hpdGVjdHVyZSBzcGVjaWZpYyBhcmVhcyBvZiB0aGUga2VybmVsLlxuICA1ODpcdFx0ICBJdCBpcyBwcm9iYWJseSBub3QgYSBnb29kIGlkZWEgdG8gZW5hYmxlIHRoaXMgZmVhdHVyZSBpbiBhIHByb2R1Y3Rpb25cbiAgNTk6XHRcdCAga2VybmVsLlxuICA2MDpcdFxuICA2MTpcdFx0ICBJZiBpbiBkb3VidCwgc2F5IE4uXG4gIDYyOlx0XG4gIDYzOlx0Y29uZmlnIE5WSEVfRUwyX0RFQlVHXG4gIDY0Olx0XHRib29sIFwmIzM0O0RlYnVnIG1vZGUgZm9yIG5vbi1WSEUgRUwyIG9iamVjdFwmIzM0O1xuICA2NTpcdFx0ZGVmYXVsdCBuXG4gIDY2Olx0XHRoZWxwXG4gIDY3Olx0XHQgIFNheSBZIGhlcmUgdG8gZW5hYmxlIHRoZSBkZWJ1ZyBtb2RlIGZvciB0aGUgbm9uLVZIRSBLVk0gRUwyIG9iamVjdC5cbiAgNjg6XHRcdCAgRmFpbHVyZSByZXBvcnRzIHdpbGwgQlVHKCkgaW4gdGhlIGh5cGVydmlzb3IuIFRoaXMgaXMgaW50ZW5kZWQgZm9yXG4gIDY5Olx0XHQgIGxvY2FsIEVMMiBoeXBlcnZpc29yIGRldmVsb3BtZW50LlxuICA3MDpcdFxuICA3MTpcdFx0ICBJZiB1bnN1cmUsIHNheSBOLlxuICA3MjpcdFxuICA3MzpcdGlmIE5WSEVfRUwyX0RFQlVHXG4gIDc0Olx0XG4gIDc1Olx0Y29uZmlnIE5WSEVfRUwyX1RSQUNJTkdcbiAgNzY6XHRcdGJvb2xcbiAgNzc6XHRcdGRlcGVuZHMgb24gVFJBQ0lORyBcdTAwMjZcdTAwMjYgRlRSQUNFXG4gIDc4Olx0XHRzZWxlY3QgVFJBQ0VfUkVNT1RFXG4gIDc5Olx0XHRkZWZhdWx0IHlcbiAgODA6XHRcbiAgODE6XHRjb25maWcgUEtWTV9ESVNBQkxFX1NUQUdFMl9PTl9QQU5JQ1xuICA4MjpcdFx0Ym9vbCBcJiMzNDtEaXNhYmxlIHRoZSBob3N0IHN0YWdlLTIgb24gcGFuaWNcJiMzNDtcbiAgODM6XHRcdGRlZmF1bHQgblxuICA4NDpcdFx0aGVscFxuICA4NTpcdFx0ICBSZWxheCB0aGUgaG9zdCBzdGFnZS0yIG9uIGh5cGVydmlzb3IgcGFuaWMgdG8gYWxsb3cgdGhlIGtlcm5lbCB0b1xuICA4NjpcdFx0ICB1bndpbmQgYW5kIHN5bWJvbGl6ZSB0aGUgaHlwZXJ2aXNvciBzdGFja3RyYWNlLiBUaGlzIGhvd2V2ZXIgdGFtcGVyc1xuICA4NzpcdFx0ICB0aGUgc3lzdGVtIHNlY3VyaXR5LiBUaGlzIGlzIGludGVuZGVkIGZvciBsb2NhbCBFTDIgaHlwZXJ2aXNvclxuICA4ODpcdFx0ICBkZXZlbG9wbWVudC5cbiAgODk6XHRcbiAgOTA6XHRcdCAgSWYgdW5zdXJlLCBzYXkgTi5cbiAgOTE6XHRcbiAgOTI6XHRjb25maWcgUEtWTV9TVEFDS1RSQUNFXG4gIDkzOlx0XHRib29sIFwmIzM0O1Byb3RlY3RlZCBLVk0gaHlwZXJ2aXNvciBzdGFja3RyYWNlc1wmIzM0O1xuICA5NDpcdFx0ZGVwZW5kcyBvbiBQS1ZNX0RJU0FCTEVfU1RBR0UyX09OX1BBTklDXG4gIDk1Olx0XHRkZWZhdWx0IHlcbiAgOTY6XHRcdGhlbHBcbiAgOTc6XHRcdCAgU2F5IFkgaGVyZSB0byBlbmFibGUgcEtWTSBoeXBlcnZpc29yIHN0YWNrdHJhY2VzIG9uIGh5cF9wYW5pYygpXG4gIDk4Olx0XG4gIDk5Olx0XHQgIElmIHVzaW5nIHByb3RlY3RlZCBuVkhFIG1vZGUsIGJ1dCBjYW5ub3QgYWZmb3JkIHRoZSBhc3NvY2lhdGVkXG4gMTAwOlx0XHQgIG1lbW9yeSBjb3N0IChsZXNzIHRoYW4gMC43NSBwYWdlIHBlciBDUFUpIG9mIHBLVk0gc3RhY2t0cmFjZXMsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDA4OjI2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzODg3CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogNTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhlIHRob3VnaHQgcHJvY2VzcyB5b3UgZGVzY3JpYmVkOgoKKipFeGFtaW5pbmcgdGhlIEtWTS9BUk02NCBCdWlsZCBQcm9jZXNzKioKCk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBgdmdpYy1tbWlvLXYzLmNgIGlzIGJlaW5nIGNvbXBpbGVkLiBHaXZlbiBpdHMgYXNzb2NpYXRpb24gd2l0aCB0aGUgVmlydHVhbCBHSUMgYW5kIEFSTTY0IGFyY2hpdGVjdHVyZSwgbXkgZmlyc3Qgc3RlcCBpcyB0byBkaWcgaW50byB0aGUgTWFrZWZpbGVzLiBJJiMzOTtsbCBzdGFydCBieSBjaGVja2luZyB0aGUgTWFrZWZpbGVzIGluIGBhcmNoL2FybTY0L2t2bS9gIGFuZCB0aGVuIGBhcmNoL2FybTY0L2t2bS92Z2ljL2AuIFRoaXMgc2hvdWxkIHJldmVhbCB0aGUgYnVpbGQgcnVsZXMgYW5kIGRlcGVuZGVuY2llcyBmb3IgdGhhdCBzcGVjaWZpYyBmaWxlLiBIb3BlZnVsbHksIEkgY2FuIHRyYWNlIHRoZSBmbGFncywgaW5jbHVkZXMsIGFuZCBsaW5raW5nIHRvIHNlZSBob3cgaXQgYWxsIGNvbWVzIHRvZ2V0aGVyIGluIHRoZSBvdmVyYWxsIEtWTSBidWlsZCBmb3IgdGhpcyBhcmNoaXRlY3R1cmUuIEl0JiMzOTtzIHVzdWFsbHkgc3RyYWlnaHRmb3J3YXJkIHRvIHNlZSB0aGUgcmVsZXZhbnQgb2JqZWN0IGZpbGUgYW5kIHdoZXJlIGl0IGZpdHMgaW4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDA4OjI2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7YXJjaC9hcm02NC9rdm0vTWFrZWZpbGUmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4gICAyOlx0I1xuICAgMzpcdCMgTWFrZWZpbGUgZm9yIEtlcm5lbC1iYXNlZCBWaXJ0dWFsIE1hY2hpbmUgbW9kdWxlXG4gICA0Olx0I1xuICAgNTpcdFxuICAgNjpcdGNjZmxhZ3MteSAmIzQzOz0gLUkgJChzcmMpXG4gICA3Olx0XG4gICA4Olx0aW5jbHVkZSAkKHNyY3RyZWUpL3ZpcnQva3ZtL01ha2VmaWxlLmt2bVxuICAgOTpcdFxuICAxMDpcdG9iai0kKENPTkZJR19LVk0pICYjNDM7PSBrdm0ub1xuICAxMTpcdG9iai0kKENPTkZJR19LVk0pICYjNDM7PSBoeXAvXG4gIDEyOlx0XG4gIDEzOlx0Q0ZMQUdTX3N5c19yZWdzLm8gJiM0Mzs9IC1Xbm8tb3ZlcnJpZGUtaW5pdFxuICAxNDpcdENGTEFHU19oYW5kbGVfZXhpdC5vICYjNDM7PSAtV25vLW92ZXJyaWRlLWluaXRcbiAgMTU6XHRcbiAgMTY6XHRrdm0teSAmIzQzOz0gYXJtLm8gbW11Lm8gbW1pby5vIHBzY2kubyBoeXBlcmNhbGxzLm8gcHZ0aW1lLm8gXFxcbiAgMTc6XHRcdCBpbmplY3RfZmF1bHQubyB2YV9sYXlvdXQubyBoYW5kbGVfZXhpdC5vIGNvbmZpZy5vIFxcXG4gIDE4Olx0XHQgZ3Vlc3QubyBkZWJ1Zy5vIHJlc2V0Lm8gc3lzX3JlZ3MubyBzdGFja3RyYWNlLm8gXFxcbiAgMTk6XHRcdCB2Z2ljLXN5cy1yZWctdjMubyBmcHNpbWQubyBwa3ZtLm8gXFxcbiAgMjA6XHRcdCBhcmNoX3RpbWVyLm8gdHJuZy5vIHZtaWQubyBlbXVsYXRlLW5lc3RlZC5vIG5lc3RlZC5vIGF0Lm8gXFxcbiAgMjE6XHRcdCB2Z2ljL3ZnaWMubyB2Z2ljL3ZnaWMtaW5pdC5vIFxcXG4gIDIyOlx0XHQgdmdpYy92Z2ljLWlycWZkLm8gdmdpYy92Z2ljLXYyLm8gXFxcbiAgMjM6XHRcdCB2Z2ljL3ZnaWMtdjMubyB2Z2ljL3ZnaWMtdjQubyBcXFxuICAyNDpcdFx0IHZnaWMvdmdpYy1tbWlvLm8gdmdpYy92Z2ljLW1taW8tdjIubyBcXFxuICAyNTpcdFx0IHZnaWMvdmdpYy1tbWlvLXYzLm8gdmdpYy92Z2ljLWt2bS1kZXZpY2UubyBcXFxuICAyNjpcdFx0IHZnaWMvdmdpYy1pdHMubyB2Z2ljL3ZnaWMtZGVidWcubyB2Z2ljL3ZnaWMtdjMtbmVzdGVkLm8gXFxcbiAgMjc6XHRcdCB2Z2ljL3ZnaWMtdjUub1xuICAyODpcdFxuICAyOTpcdGt2bS0kKENPTkZJR19IV19QRVJGX0VWRU5UUykgICYjNDM7PSBwbXUtZW11bC5vIHBtdS5vXG4gIDMwOlx0a3ZtLSQoQ09ORklHX0FSTTY0X1BUUl9BVVRIKSAgJiM0Mzs9IHBhdXRoLm9cbiAgMzE6XHRrdm0tJChDT05GSUdfUFREVU1QX1NUQUdFMl9ERUJVR0ZTKSAmIzQzOz0gcHRkdW1wLm9cbiAgMzI6XHRcbiAgMzM6XHRrdm0tJChDT05GSUdfTlZIRV9FTDJfVFJBQ0lORykgJiM0Mzs9IGh5cF90cmFjZS5vXG4gIDM0Olx0XG4gIDM1Olx0YWx3YXlzLXkgOj0gaHlwX2NvbnN0YW50cy5oIGh5cC1jb25zdGFudHMuc1xuICAzNjpcdFxuICAzNzpcdGRlZmluZSBydWxlX2dlbl9oeXBfY29uc3RhbnRzXG4gIDM4Olx0XHQkKGNhbGwgZmlsZWNoayxvZmZzZXRzLF9fSFlQX0NPTlNUQU5UU19IX18pXG4gIDM5Olx0ZW5kZWZcbiAgNDA6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMDg6MjY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQ4ODQKCQkJCQkJCW91dHB1dDogNjQKCQkJCQkJCXRob3VnaHRzOiAxMTE1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5c2lzIG9mIFZHSUN2MyBSZWRpc3RyaWJ1dG9yIFJlZ2lzdHJhdGlvbiBpbiBBUk02NCBLVk0qKgoKT2theSwgc28gYHZnaWMvdmdpYy1tbWlvLXYzLm9gIGlzIGJlaW5nIGJ1aWx0IHdoZW4gYENPTkZJR19LVk1gIGlzIGVuYWJsZWQsIGFuZCB3ZSBrbm93IHRoYXQgS1ZNIGl0c2VsZiBvbiBhcm02NCByZXF1aXJlcyBgQ09ORklHX0tWTWAgYW5kIGBDT05GSUdfVklSVFVBTElaQVRJT05gLiBJIHNob3VsZCBkb3VibGUtY2hlY2sgdGhlIEtjb25maWcsIGp1c3QgdG8gYmUgdGhvcm91Z2guLi4geWVwLCBgbWVudWNvbmZpZyBWSVJUVUFMSVpBVElPTmAsIGZvbGxvd2VkIGJ5IGBtZW51Y29uZmlnIEtWTWAuIE5vdywgbGV0JiMzOTtzIGxvb2sgYXQgdGhlIGFjdHVhbCBjb2RlIGNoYW5nZXMuCgpFc3NlbnRpYWxseSwgdGhpcyBpcyBhIGZpeCBmb3Igc29tZSBlcnJvciBoYW5kbGluZyBhcm91bmQgcmVnaXN0ZXJpbmcgcmVkaXN0cmlidXRvciByZWdpb25zLiBQcmV2aW91c2x5LCBpbiBgdmdpY19yZWdpc3Rlcl9yZWRpc3RfaW9kZXYoKWAsIGlmIGBrdm1faW9fYnVzX3JlZ2lzdGVyX2RldmAgZmFpbGVkLCB0aGUgY29kZSBkaWRuJiMzOTt0IHVuZG8gdGhlIHJlZGlzdHJpYnV0b3IgYXNzaWdubWVudC4gSXQgaW5jcmVtZW50ZWQgYHJkcmVnLSZndDtmcmVlX2luZGV4YCBhbmQgc2V0IGB2Z2ljX2NwdS0mZ3Q7cmRyZWdgLCBidXQgZGlkbiYjMzk7dCBhY3R1YWxseSB1bnJlZ2lzdGVyIHRoZSBkZXZpY2UsIGxlYWRpbmcgdG8gcG90ZW50aWFsIGNvcnJ1cHRpb24uIE5vdywgaWYgdGhlIHJlZ2lzdHJhdGlvbiBmYWlscywgd2UgY2FsbCBgdmdpY191bmRvX3JlZGlzdF9hc3NpZ25tZW50KHZjcHUpYCB0byBjbGVhbiB0aGluZ3MgdXAuCgpUaGUgc2FtZSBwcm9ibGVtIGV4aXN0ZWQgaW4gYHZnaWNfcmVnaXN0ZXJfYWxsX3JlZGlzdF9pb2RldnMoKWAuIEl0IHVzZWQgdG8gaXRlcmF0ZSBhbmQgdW5yZWdpc3RlciBwcmV2aW91cyByZWRpc3RyaWJ1dG9yIGlvZGV2cywgYnV0IGRpZG4mIzM5O3QgaGF2ZSBhIHRhcmdldGVkIG1ldGhvZCB0byBkZWFsIHdpdGggYSBmYWlsaW5nIHJlZ2lzdHJhdGlvbjsgbm93IGl0IHBhc3NlcyBgcmRyZWdgIHRvIHRoZSByZWdpc3RyYXRpb24gZnVuY3Rpb24uIElmIGEgcmVnaXN0cmF0aW9uIGZhaWxzLCBpdCBub3cgaXRlcmF0ZXMgdGhyb3VnaCB0aGUgKnByZXZpb3VzbHkqIHByb2Nlc3NlZCB2Y3B1cyBhbmQgcm9sbHMgYmFjayBvbmx5IHRoZSByZWxldmFudCBpb2RldnMgYnkgY2FsbGluZyBgdmdpY19yb2xsYmFja19yZWRpc3RfaW9kZXYodmNwdSwgcmRyZWcpYC4gVGhpcyBmdW5jdGlvbiBpcyB2ZXJ5IHNwZWNpZmljOiBpdCBvbmx5IG9wZXJhdGVzIG9uIHRoZSBpb2RldnMgYXNzb2NpYXRlZCB3aXRoIHRoZSAqY3VycmVudCogcmVkaXN0cmlidXRvciByZWdpb24uIEl0IHRoZW4gdW5yZWdpc3RlcnMgdGhlIGlvZGV2IGFuZCBjbGVhcnMgdGhlIHZjcHUmIzM5O3MgcmVmZXJlbmNlcy4gQWxzbywgYHZnaWNfdjNfc2V0X3JlZGlzdF9iYXNlKClgIG5vdyBwYXNzZXMgdGhlIGByZHJlZ2AgdG8gYHZnaWNfcmVnaXN0ZXJfYWxsX3JlZGlzdF9pb2RldnMoKWAuCgpTbywgaXQgbG9va3MgbGlrZSBhIHByb3BlciBmaXggZm9yIGVycm9yIHVud2luZGluZyBhbmQgcm9sbGJhY2sgZHVyaW5nIHJlZGlzdHJpYnV0b3IgcmVnaXN0cmF0aW9uIGluIEFSTTY0IEtWTSYjMzk7cyBWR0lDdjMgaW1wbGVtZW50YXRpb24uIFdlJiMzOTtyZSBub3cgZW5zdXJpbmcgdGhhdCBpZiBhIGRldmljZSByZWdpc3RyYXRpb24gZmFpbHMgcGFydHdheSB0aHJvdWdoLCB3ZSBwcm9wZXJseSBjbGVhbiB1cCBhbnkgcGFydGlhbGx5LXJlZ2lzdGVyZWQgZGV2aWNlcywgYXZvaWRpbmcgc3RhdGUgY29ycnVwdGlvbi4KCk5vdywgaXMgdGhpcyBldmVuIGEgcmVhY2hhYmxlIGNvZGUgcGF0aD8gWWVzLCBLVk0gb24gQVJNNjQgaXMgZnV6emFibGUuIFdlIGNhbiB1c2UgdG9vbHMgbGlrZSBzeXprYWxsZXIgdG8gZnV6eiB0aGUgYC9kZXYva3ZtYCBpb2N0bHMsIGluY2x1ZGluZyBgS1ZNX1NFVF9ERVZJQ0VfQVRUUmAgZm9yIGBLVk1fREVWX0FSTV9WR0lDX0dSUF9BRERSYCBhbmQgYEtWTV9WR0lDX1YzX0FERFJfVFlQRV9SRURJU1RfUkVHSU9OYC4gVGhpcyBpcyBhIGNsYXNzaWMgdGFyZ2V0IGZvciBmdXp6aW5nLiBNZW1vcnkgc2FmZXR5LCBsb2NrIG9yZGVyaW5nLCBhbmQgc3RhdGUgY29ycnVwdGlvbiBkdXJpbmcgZXJyb3Igcm9sbGJhY2sgaW4gS1ZNIGFyZSBwcmltZSB0YXJnZXRzIGZvciB2dWxuZXJhYmlsaXRpZXMuCgpBbHJpZ2h0LCBsZXQmIzM5O3MgbG9vayBhdCB0aGUgbm9uLXN0YXRpYyBmdW5jdGlvbnMgZnJvbSBgYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLW1taW8tdjMuY2A6IGB2Z2ljX3YzX3NldF9yZWRpc3RfYmFzZWAsIGB2Z2ljX3JlZ2lzdGVyX3JlZGlzdF9pb2RldmAsIGFuZCBgdmdpY191bnJlZ2lzdGVyX3JlZGlzdF9pb2RldmAuIFdlIG5lZWQgdG8gZGV0ZXJtaW5lIGhvdyB0aGVzZSBmdW5jdGlvbnMgYXJlIGJlaW5nIHVzZWQgd2l0aGluIEtWTS4gV2Ugc2hvdWxkIHRyYWNlIHRoZWlyIGNhbGxzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAwODoyNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt2Z2ljX3YzX3NldF9yZWRpc3RfYmFzZXx2Z2ljX3JlZ2lzdGVyX3JlZGlzdF9pb2Rldnx2Z2ljX3VucmVnaXN0ZXJfcmVkaXN0X2lvZGV2JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC9hcm02NC9rdm0mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWluaXQuYz0zODE9aW50IGt2bV92Z2ljX3ZjcHVfaW5pdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4tLVxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWluaXQuYy00MDUtXHRcdG11dGV4X2xvY2soXHUwMDI2dmNwdS1cdTAwM2Vrdm0tXHUwMDNlc2xvdHNfbG9jayk7XG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtaW5pdC5jOjQwNjpcdFx0cmV0ID0gdmdpY19yZWdpc3Rlcl9yZWRpc3RfaW9kZXYodmNwdSk7XG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtaW5pdC5jLTQwNy1cdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNnZjcHUtXHUwMDNla3ZtLVx1MDAzZXNsb3RzX2xvY2spO1xuLS1cbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1pbml0LmM9NTEzPXN0YXRpYyB2b2lkIF9fa3ZtX3ZnaWNfdmNwdV9kZXN0cm95KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbi0tXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtaW5pdC5jLTU0NC1cdFx0aWYgKGt2bV9nZXRfdmNwdV9ieV9pZCh2Y3B1LVx1MDAzZWt2bSwgdmNwdS1cdTAwM2V2Y3B1X2lkKSAhPSB2Y3B1KVxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWluaXQuYzo1NDU6XHRcdFx0dmdpY191bnJlZ2lzdGVyX3JlZGlzdF9pb2Rldih2Y3B1KTtcbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1pbml0LmMtNTQ2LVxuLS1cbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1pbml0LmM9NTYwPXZvaWQga3ZtX3ZnaWNfZGVzdHJveShzdHJ1Y3Qga3ZtICprdm0pXG4tLVxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWluaXQuYy01NzgtXHRcdGt2bV9mb3JfZWFjaF92Y3B1KGksIHZjcHUsIGt2bSlcbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1pbml0LmM6NTc5Olx0XHRcdHZnaWNfdW5yZWdpc3Rlcl9yZWRpc3RfaW9kZXYodmNwdSk7XG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtaW5pdC5jLTU4MC1cbi0tXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMta3ZtLWRldmljZS5jPTkzPXN0YXRpYyBpbnQga3ZtX3ZnaWNfYWRkcihzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fZGV2aWNlX2F0dHIgKmF0dHIsIGJvb2wgd3JpdGUpXG4tLVxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWt2bS1kZXZpY2UuYy0xMzctXHRcdGlmICh3cml0ZSkge1xuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWt2bS1kZXZpY2UuYzoxMzg6XHRcdFx0ciA9IHZnaWNfdjNfc2V0X3JlZGlzdF9iYXNlKGt2bSwgMCwgYWRkciwgMCk7XG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMta3ZtLWRldmljZS5jLTEzOS1cdFx0XHRnb3RvIG91dDtcbi0tXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMta3ZtLWRldmljZS5jLTE2Ny1cdFx0XHRlbHNlXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMta3ZtLWRldmljZS5jOjE2ODpcdFx0XHRcdHIgPSB2Z2ljX3YzX3NldF9yZWRpc3RfYmFzZShrdm0sIGluZGV4LFxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWt2bS1kZXZpY2UuYy0xNjktXHRcdFx0XHRcdFx0XHQgICAgYmFzZSwgY291bnQpO1xuLS1cbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1tbWlvLXYzLmM9NzY5PXN0YXRpYyB2b2lkIHZnaWNfdW5kb19yZWRpc3RfYXNzaWdubWVudChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4tLVxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLW1taW8tdjMuYy03ODItLyoqXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtbW1pby12My5jOjc4MzogKiB2Z2ljX3JlZ2lzdGVyX3JlZGlzdF9pb2RldiAtIHJlZ2lzdGVyIGEgc2luZ2xlIHJlZGlzdCBpb2RldlxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLW1taW8tdjMuYy03ODQtICogQHZjcHU6ICAgIFRoZSBWQ1BVIHRvIHdoaWNoIHRoZSByZWRpc3RyaWJ1dG9yIGJlbG9uZ3Ncbi0tXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtbW1pby12My5jLTc5MC0gKi9cbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1tbWlvLXYzLmM6NzkxOmludCB2Z2ljX3JlZ2lzdGVyX3JlZGlzdF9pb2RldihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtbW1pby12My5jLTc5Mi17XG4tLVxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLW1taW8tdjMuYy04NTAtXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtbW1pby12My5jOjg1MTp2b2lkIHZnaWNfdW5yZWdpc3Rlcl9yZWRpc3RfaW9kZXYoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLW1taW8tdjMuYy04NTIte1xuLS1cbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1tbWlvLXYzLmM9ODU4PXN0YXRpYyB2b2lkIHZnaWNfcm9sbGJhY2tfcmVkaXN0X2lvZGV2KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbi0tXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtbW1pby12My5jLTg2Ny1cbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1tbWlvLXYzLmM6ODY4Olx0dmdpY191bnJlZ2lzdGVyX3JlZGlzdF9pb2Rldih2Y3B1KTtcbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1tbWlvLXYzLmMtODY5LVxuLS1cbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1tbWlvLXYzLmM9ODc1PXN0YXRpYyBpbnQgdmdpY19yZWdpc3Rlcl9hbGxfcmVkaXN0X2lvZGV2cyhzdHJ1Y3Qga3ZtICprdm0sXG4tLVxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLW1taW8tdjMuYy04ODQtXHRrdm1fZm9yX2VhY2hfdmNwdShjLCB2Y3B1LCBrdm0pIHtcbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1tbWlvLXYzLmM6ODg1Olx0XHRyZXQgPSB2Z2ljX3JlZ2lzdGVyX3JlZGlzdF9pb2Rldih2Y3B1KTtcbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1tbWlvLXYzLmMtODg2LVx0XHRpZiAocmV0KVxuLS1cbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1tbWlvLXYzLmM9OTg2PXZvaWQgdmdpY192M19mcmVlX3JlZGlzdF9yZWdpb24oc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3QgdmdpY19yZWRpc3RfcmVnaW9uICpyZHJlZylcbi0tXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtbW1pby12My5jLTEwMDItXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtbW1pby12My5jOjEwMDM6aW50IHZnaWNfdjNfc2V0X3JlZGlzdF9iYXNlKHN0cnVjdCBrdm0gKmt2bSwgdTMyIGluZGV4LCB1NjQgYWRkciwgdTMyIGNvdW50KVxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLW1taW8tdjMuYy0xMDA0LXtcbi0tXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMuaD0zNDk9aW50IHZnaWNfdjNfc2F2ZV9wZW5kaW5nX3RhYmxlcyhzdHJ1Y3Qga3ZtICprdm0pO1xuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLmg6MzUwOmludCB2Z2ljX3YzX3NldF9yZWRpc3RfYmFzZShzdHJ1Y3Qga3ZtICprdm0sIHUzMiBpbmRleCwgdTY0IGFkZHIsIHUzMiBjb3VudCk7XG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMuaDozNTE6aW50IHZnaWNfcmVnaXN0ZXJfcmVkaXN0X2lvZGV2KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMuaDozNTI6dm9pZCB2Z2ljX3VucmVnaXN0ZXJfcmVkaXN0X2lvZGV2KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMuaC0zNTMtYm9vbCB2Z2ljX3YzX2NoZWNrX2Jhc2Uoc3RydWN0IGt2bSAqa3ZtKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMDg6MjY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTg3MjgKCQkJCQkJCW91dHB1dDogMTYxCgkJCQkJCQl0aG91Z2h0czogMzcxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIEFSTTY0IEtWTSBDb25maWd1cmF0aW9uIGFuZCBQYXRjaCBMb2dpYyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgSSBuZWVkIHRvIHZlcmlmeSB0aGUgbmVjZXNzYXJ5IGNvbmZpZ3VyYXRpb25zIGZvciBlbmFibGluZyBLVk0gb24gYXJtNjQuIEkmIzM5O20gc3RhcnRpbmcgd2l0aCB0aGUgYGFyY2gvYXJtNjQva3ZtL0tjb25maWdgIGZpbGUuIEkgc2VlIGBtZW51Y29uZmlnIFZJUlRVQUxJWkFUSU9OYCBhbmQsIGRlcGVuZGVudCBvbiB0aGF0LCBgbWVudWNvbmZpZyBLVk1gLiBUaGUgZGVwZW5kZW5jeSBtYWtlcyBzZW5zZSwgb2YgY291cnNlLgoKTmV4dCwgSSYjMzk7bSBkb3VibGUtY2hlY2tpbmcgdGhvc2Ugc3ltYm9sczogYEtWTWAgYW5kIGBWSVJUVUFMSVpBVElPTmAuIFRoZXkmIzM5O3JlIGJvdGggZGVmaW5lZCBhcyBib29sZWFuIGNvbmZpZ3MsIHdoaWNoIGlzIHdoYXQgSSYjMzk7ZCBleHBlY3QuIE5vdyBJJiMzOTtsbCBxdWlja2x5IGNvbmZpcm0gdGhhdCBLVk0gZG9lc24mIzM5O3QgaGF2ZSBhbnkgc3BlY2lmaWMgYXJjaGl0ZWN0dXJhbCBkZXBlbmRlbmNpZXMgdGhhdCBJJiMzOTt2ZSBtaXNzZWQsIGFuZCB0aGF0IGBLVk1gIGFuZCBgVklSVFVBTElaQVRJT05gIGFyZSBpbmRlZWQgdGhlIGNvcmUgY29uZmlndXJhdGlvbiBzeW1ib2xzLiBUaGUgYEVuYWJsZUNvbmZpZ3NgIGxpc3QgY29uZmlybXMgbXkgdW5kZXJzdGFuZGluZy4KCkkmIzM5O20gbm93IHNoaWZ0aW5nIGZvY3VzIHRvIHRoZSBrZXkgZnVuY3Rpb24gc3ltYm9scyBpbXBhY3RlZCBieSB0aGUgY2hhbmdlcyBpbiB0aGlzIHBhdGNoLiBTcGVjaWZpY2FsbHksIEkgc2VlIHRocmVlIGNyaXRpY2FsIGVudHJ5IHBvaW50cyB0aGF0IHdpbGwgYmUgZGlyZWN0bHkgYWZmZWN0ZWQuIE5hbWVseTogYHZnaWNfdjNfc2V0X3JlZGlzdF9iYXNlYCwgYHZnaWNfcmVnaXN0ZXJfcmVkaXN0X2lvZGV2YCwgYW5kIGB2Z2ljX3VucmVnaXN0ZXJfcmVkaXN0X2lvZGV2YC4KClRoZSByZWFzb25pbmcgYmVoaW5kIHRoZSBwYXRjaCBpcyBmYWlybHkgY2xlYXIuIEl0JiMzOTtzIGFib3V0IGltcHJvdmVkIGVycm9yIGhhbmRsaW5nIGluIHRoZSBBUk02NCBLVk0gVkdJQ3YzIHJlZGlzdHJpYnV0b3IgbG9naWMsIHNwZWNpZmljYWxseSB3aGVuIGFzc2lnbmluZyByZWdpb25zIGFuZCByZWdpc3RlcmluZyBpb2RldnMuIFRoZSBwYXRjaCBhaW1zIHRvIGNvcnJlY3RseSByb2xsIGJhY2sgcmVkaXN0cmlidXRvciBhc3NpZ25tZW50cyB3aGVuIGVpdGhlciBhIHNpbmdsZSBpb2RldiByZWdpc3RyYXRpb24gb3IgdGhlIHJlZ2lzdHJhdGlvbiBvZiBhbGwgcmVkaXN0cmlidXRvciBpb2RldnMgZmFpbHMuIFRoZSBnb2FsIGlzIHRvIGF2b2lkIHN0YWxlIHN0YXRlcyBhbmQgcHJldmVudCBpbmNvcnJlY3QgYWNjb3VudGluZyBvZiBWQ1BVJiMzOTtzIGFzc2lnbmVkIHRvIHJlZ2lvbnMsIHdoaWNoIGlzIGEgY29tbW9uIHNvdXJjZSBvZiBpbnN0YWJpbGl0eS4gSXQmIzM5O3MgYWxsIGFib3V0IGVuc3VyaW5nIHRoYXQgd2Ugb25seSB1bmRvIGFzc2lnbm1lbnRzIGZvciB2Q1BVcyBhc3NvY2lhdGVkIHdpdGggdGhlIGZhaWxlZCByZWdpb24sIHdoaWNoIGlzIGEgZ29vZCwgc291bmQgYXBwcm9hY2guIFRoaXMgbWFrZXMgdGhlIEtWTSBWR0lDIGluaXRpYWxpemF0aW9uIGFuZCBkZXZpY2UgY29uZmlndXJhdGlvbiBwYXRocyByZWFjaGFibGUsIHdoaWNoIGhhcyBzb21lIG9idmlvdXMgaW1wbGljYXRpb25zIGZvciBmdXp6aW5nIGFuZCBvdmVyYWxsIHJvYnVzdG5lc3MuCgpUaGVyZWZvcmUsIEkmIzM5O2xsIGNhbGwgYHNldC1yZXN1bHRzYC4gSSBoYXZlIGEgZ29vZCBncmFzcCBvZiB0aGUgcGF0Y2gmIzM5O3MgaW1wYWN0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAwODoyNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7S1ZNJiMzNDssCiAgICAmIzM0O1ZJUlRVQUxJWkFUSU9OJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dmdpY192M19zZXRfcmVkaXN0X2Jhc2UmIzM0OywKICAgICYjMzQ7dmdpY19yZWdpc3Rlcl9yZWRpc3RfaW9kZXYmIzM0OywKICAgICYjMzQ7dmdpY191bnJlZ2lzdGVyX3JlZGlzdF9pb2RldiYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBlcnJvciB1bndpbmRpbmcgYW5kIHJvbGxiYWNrIGhhbmRsaW5nIHdoZW4gcmVnaXN0ZXJpbmcgVkdJQ3YzIHJlZGlzdHJpYnV0b3IgSS9PIGRldmljZXMgaW4gQVJNNjQgS1ZNLiBJdCBlbnN1cmVzIHRoYXQgZmFpbGVkIHJlZGlzdHJpYnV0b3IgcmVnaXN0cmF0aW9uIHByb3Blcmx5IHJvbGxzIGJhY2sgdGhlIGFzc2lnbmVkIHJlZ2lvbiBzdGF0ZSBhbmQgb25seSB0ZWFycyBkb3duIFZDUFVzIGFzc29jaWF0ZWQgd2l0aCB0aGUgZmFpbGluZyByZWdpb24uIFRoZXNlIGNvZGUgcGF0aHMgYXJlIHJlYWNoYWJsZSB2aWEgS1ZNIGlvY3RscyBhbmQgd29ydGggZnV6emluZyBmb3IgY29uY3VycmVuY3kgYW5kIHN0YXRlIG1hbmFnZW1lbnQgYnVncy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7S1ZNJiMzNDssCiAgICAmIzM0O1ZJUlRVQUxJWkFUSU9OJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dmdpY192M19zZXRfcmVkaXN0X2Jhc2UmIzM0OywKICAgICYjMzQ7dmdpY19yZWdpc3Rlcl9yZWRpc3RfaW9kZXYmIzM0OywKICAgICYjMzQ7dmdpY191bnJlZ2lzdGVyX3JlZGlzdF9pb2RldiYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBlcnJvciB1bndpbmRpbmcgYW5kIHJvbGxiYWNrIGhhbmRsaW5nIHdoZW4gcmVnaXN0ZXJpbmcgVkdJQ3YzIHJlZGlzdHJpYnV0b3IgSS9PIGRldmljZXMgaW4gQVJNNjQgS1ZNLiBJdCBlbnN1cmVzIHRoYXQgZmFpbGVkIHJlZGlzdHJpYnV0b3IgcmVnaXN0cmF0aW9uIHByb3Blcmx5IHJvbGxzIGJhY2sgdGhlIGFzc2lnbmVkIHJlZ2lvbiBzdGF0ZSBhbmQgb25seSB0ZWFycyBkb3duIFZDUFVzIGFzc29jaWF0ZWQgd2l0aCB0aGUgZmFpbGluZyByZWdpb24uIFRoZXNlIGNvZGUgcGF0aHMgYXJlIHJlYWNoYWJsZSB2aWEgS1ZNIGlvY3RscyBhbmQgd29ydGggZnV6emluZyBmb3IgY29uY3VycmVuY3kgYW5kIHN0YXRlIG1hbmFnZW1lbnQgYnVncy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMDg6MjY8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAwODoyNjwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGVycm9yIHJvbGxiYWNrIGhhbmRsaW5nIGR1cmluZyBLVk0gQVJNNjQgVkdJQ3YzIHJlZGlzdHJpYnV0b3IgaW9kZXYgcmVnaXN0cmF0aW9uIChoYW5kbGluZyBmYWlsZWQgcmVnaXN0cmF0aW9uIGNsZWFudXAsIHJlc2V0dGluZyB2Z2ljX2NwdSByZWRpc3RyaWJ1dG9yIHBvaW50ZXJzLCBhbmQgZGVjcmVtZW50aW5nIGZyZWVfaW5kZXggYXBwcm9wcmlhdGVseSkuIFRoZSBjaGFuZ2VzIGRvIG5vdCBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IGFueSBtZW1vcnkgYWxsb2NhdGlvbnMsIGRhdGEgc3RydWN0dXJlcyBjb3BpZWQgdG8gdXNlcnNwYWNlLCBvciB1bmluaXRpYWxpemVkIG1lbW9yeSBhY2Nlc3Nlcy4gQW55IHBvdGVudGlhbCBjb25jdXJyZW5jeSwgbG9jayBvcmRlcmluZywgb3IgaW52YWxpZCBkZXJlZmVyZW5jZSBpc3N1ZXMgYXJlIGNvdmVyZWQgYnkgc3RhbmRhcmQgc2FuaXRpemVycyAoTE9DS0RFUC9LQVNBTikuIFRoZXJlZm9yZSwgdGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBpbmZvcm1hdGlvbiBsZWFrcyB0aGF0IHdvdWxkIHJlcXVpcmUgYSBLTVNBTiBmdXp6aW5nIHNlc3Npb24uJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGFjOGZjN2E1NGNmMTcyMjI3NGM4MzQyY2YxZjA4NjJhMTQ1OTliNjgKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgTW9uIEF1ZyAzMSAwODoyNjoyMyAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1tbWlvLXYzLmMgYi9hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtbW1pby12My5jCmluZGV4IDU5MTNhMjBkODMwMTkuLjc3YWE4NDMzNzAxYTEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1tbWlvLXYzLmMKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLW1taW8tdjMuYwpAQCAtNzY2LDYgJiM0Mzs3NjYsMTkgQEAgdW5zaWduZWQgaW50IHZnaWNfdjNfaW5pdF9kaXN0X2lvZGV2KHN0cnVjdCB2Z2ljX2lvX2RldmljZSAqZGV2KQogCXJldHVybiBTWl82NEs7CiB9CiAKJiM0MztzdGF0aWMgdm9pZCB2Z2ljX3VuZG9fcmVkaXN0X2Fzc2lnbm1lbnQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQomIzQzO3sKJiM0MzsJc3RydWN0IHZnaWNfY3B1ICp2Z2ljX2NwdSA9ICZhbXA7dmNwdS0mZ3Q7YXJjaC52Z2ljX2NwdTsKJiM0MzsKJiM0MzsJbG9ja2RlcF9hc3NlcnRfaGVsZCgmYW1wO3ZjcHUtJmd0O2t2bS0mZ3Q7c2xvdHNfbG9jayk7CiYjNDM7CiYjNDM7CWd1YXJkKG11dGV4KSgmYW1wO3ZjcHUtJmd0O2t2bS0mZ3Q7YXJjaC5jb25maWdfbG9jayk7CiYjNDM7CiYjNDM7CXZnaWNfY3B1LSZndDtyZHJlZy0mZ3Q7ZnJlZV9pbmRleC0tOwomIzQzOwl2Z2ljX2NwdS0mZ3Q7cmRyZWcgPSBOVUxMOwomIzQzOwl2Z2ljX2NwdS0mZ3Q7cmRfaW9kZXYuYmFzZV9hZGRyID0gVkdJQ19BRERSX1VOREVGOwomIzQzO30KJiM0MzsKIC8qKgogICogdmdpY19yZWdpc3Rlcl9yZWRpc3RfaW9kZXYgLSByZWdpc3RlciBhIHNpbmdsZSByZWRpc3QgaW9kZXYKICAqIEB2Y3B1OiAgICBUaGUgVkNQVSB0byB3aGljaCB0aGUgcmVkaXN0cmlidXRvciBiZWxvbmdzCkBAIC04MTgsMTYgJiM0Mzs4MzEsMTcgQEAgaW50IHZnaWNfcmVnaXN0ZXJfcmVkaXN0X2lvZGV2KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIAlyZF9kZXYtJmd0O25yX3JlZ2lvbnMgPSBBUlJBWV9TSVpFKHZnaWNfdjNfcmRfcmVnaXN0ZXJzKTsKIAlyZF9kZXYtJmd0O3JlZGlzdF92Y3B1ID0gdmNwdTsKIAomIzQzOwkvKiBQcm90ZWN0ZWQgYnkgc2xvdHNfbG9jayAqLwomIzQzOwlyZHJlZy0mZ3Q7ZnJlZV9pbmRleCYjNDM7JiM0Mzs7CiYjNDM7CiAJbXV0ZXhfdW5sb2NrKCZhbXA7a3ZtLSZndDthcmNoLmNvbmZpZ19sb2NrKTsKIAogCXJldCA9IGt2bV9pb19idXNfcmVnaXN0ZXJfZGV2KGt2bSwgS1ZNX01NSU9fQlVTLCByZF9iYXNlLAogCQkJCSAgICAgIDIgKiBTWl82NEssICZhbXA7cmRfZGV2LSZndDtkZXYpOwogCWlmIChyZXQpCi0JCXJldHVybiByZXQ7CiYjNDM7CQl2Z2ljX3VuZG9fcmVkaXN0X2Fzc2lnbm1lbnQodmNwdSk7CiAKLQkvKiBQcm90ZWN0ZWQgYnkgc2xvdHNfbG9jayAqLwotCXJkcmVnLSZndDtmcmVlX2luZGV4JiM0MzsmIzQzOzsKLQlyZXR1cm4gMDsKJiM0MzsJcmV0dXJuIHJldDsKIAogb3V0X3VubG9jazoKIAltdXRleF91bmxvY2soJmFtcDtrdm0tJmd0O2FyY2guY29uZmlnX2xvY2spOwpAQCAtODQxLDcgJiM0Mzs4NTUsMjUgQEAgdm9pZCB2Z2ljX3VucmVnaXN0ZXJfcmVkaXN0X2lvZGV2KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIAlrdm1faW9fYnVzX3VucmVnaXN0ZXJfZGV2KHZjcHUtJmd0O2t2bSwgS1ZNX01NSU9fQlVTLCAmYW1wO3JkX2Rldi0mZ3Q7ZGV2KTsKIH0KIAotc3RhdGljIGludCB2Z2ljX3JlZ2lzdGVyX2FsbF9yZWRpc3RfaW9kZXZzKHN0cnVjdCBrdm0gKmt2bSkKJiM0MztzdGF0aWMgdm9pZCB2Z2ljX3JvbGxiYWNrX3JlZGlzdF9pb2RldihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsCiYjNDM7CQkJCSAgICAgICBzdHJ1Y3QgdmdpY19yZWRpc3RfcmVnaW9uICpyZHJlZykKJiM0Mzt7CiYjNDM7CXN0cnVjdCB2Z2ljX2NwdSAqdmdpY19jcHUgPSAmYW1wO3ZjcHUtJmd0O2FyY2gudmdpY19jcHU7CiYjNDM7CiYjNDM7CWxvY2tkZXBfYXNzZXJ0X2hlbGQoJmFtcDt2Y3B1LSZndDtrdm0tJmd0O3Nsb3RzX2xvY2spOwomIzQzOwomIzQzOwlpZiAodmdpY19jcHUtJmd0O3JkcmVnICE9IHJkcmVnKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwl2Z2ljX3VucmVnaXN0ZXJfcmVkaXN0X2lvZGV2KHZjcHUpOwomIzQzOwomIzQzOwlndWFyZChtdXRleCkoJmFtcDt2Y3B1LSZndDtrdm0tJmd0O2FyY2guY29uZmlnX2xvY2spOwomIzQzOwl2Z2ljX2NwdS0mZ3Q7cmRyZWcgPSBOVUxMOwomIzQzOwl2Z2ljX2NwdS0mZ3Q7cmRfaW9kZXYuYmFzZV9hZGRyID0gVkdJQ19BRERSX1VOREVGOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IHZnaWNfcmVnaXN0ZXJfYWxsX3JlZGlzdF9pb2RldnMoc3RydWN0IGt2bSAqa3ZtLAomIzQzOwkJCQkJICAgc3RydWN0IHZnaWNfcmVkaXN0X3JlZ2lvbiAqcmRyZWcpCiB7CiAJc3RydWN0IGt2bV92Y3B1ICp2Y3B1OwogCXVuc2lnbmVkIGxvbmcgYzsKQEAgLTg1NiwxMiAmIzQzOzg4OCwxMiBAQCBzdGF0aWMgaW50IHZnaWNfcmVnaXN0ZXJfYWxsX3JlZGlzdF9pb2RldnMoc3RydWN0IGt2bSAqa3ZtKQogCX0KIAogCWlmIChyZXQpIHsKLQkJLyogVGhlIGN1cnJlbnQgYyBmYWlsZWQsIHNvIGl0ZXJhdGUgb3ZlciB0aGUgcHJldmlvdXMgb25lcy4gKi8KJiM0MzsJCS8qIFVuZG8gYXNzaWdubWVudHMgbWFkZSBmcm9tIHRoZSByZWdpb24gYmVpbmcgYWRkZWQuICovCiAJCWludCBpOwogCiAJCWZvciAoaSA9IDA7IGkgJmx0OyBjOyBpJiM0MzsmIzQzOykgewogCQkJdmNwdSA9IGt2bV9nZXRfdmNwdShrdm0sIGkpOwotCQkJdmdpY191bnJlZ2lzdGVyX3JlZGlzdF9pb2Rldih2Y3B1KTsKJiM0MzsJCQl2Z2ljX3JvbGxiYWNrX3JlZGlzdF9pb2Rldih2Y3B1LCByZHJlZyk7CiAJCX0KIAl9CiAKQEAgLTk3MCwxMCAmIzQzOzEwMDIsMTMgQEAgdm9pZCB2Z2ljX3YzX2ZyZWVfcmVkaXN0X3JlZ2lvbihzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCB2Z2ljX3JlZGlzdF9yZWdpb24gKnJkcmUKIAogaW50IHZnaWNfdjNfc2V0X3JlZGlzdF9iYXNlKHN0cnVjdCBrdm0gKmt2bSwgdTMyIGluZGV4LCB1NjQgYWRkciwgdTMyIGNvdW50KQogewomIzQzOwlzdHJ1Y3QgdmdpY19yZWRpc3RfcmVnaW9uICpyZHJlZzsKIAlpbnQgcmV0OwogCiAJbXV0ZXhfbG9jaygmYW1wO2t2bS0mZ3Q7YXJjaC5jb25maWdfbG9jayk7CiAJcmV0ID0gdmdpY192M19hbGxvY19yZWRpc3RfcmVnaW9uKGt2bSwgaW5kZXgsIGFkZHIsIGNvdW50KTsKJiM0MzsJaWYgKCFyZXQpCiYjNDM7CQlyZHJlZyA9IHZnaWNfdjNfcmRpc3RfcmVnaW9uX2Zyb21faW5kZXgoa3ZtLCBpbmRleCk7CiAJbXV0ZXhfdW5sb2NrKCZhbXA7a3ZtLSZndDthcmNoLmNvbmZpZ19sb2NrKTsKIAlpZiAocmV0KQogCQlyZXR1cm4gcmV0OwpAQCAtOTgyLDEyICYjNDM7MTAxNyw5IEBAIGludCB2Z2ljX3YzX3NldF9yZWRpc3RfYmFzZShzdHJ1Y3Qga3ZtICprdm0sIHUzMiBpbmRleCwgdTY0IGFkZHIsIHUzMiBjb3VudCkKIAkgKiBSZWdpc3RlciBpb2RldnMgZm9yIGVhY2ggZXhpc3RpbmcgVkNQVS4gIEFkZGluZyBtb3JlIFZDUFVzCiAJICogYWZ0ZXJ3YXJkcyB3aWxsIHJlZ2lzdGVyIHRoZSBpb2RldnMgd2hlbiBuZWVkZWQuCiAJICovCi0JcmV0ID0gdmdpY19yZWdpc3Rlcl9hbGxfcmVkaXN0X2lvZGV2cyhrdm0pOwomIzQzOwlyZXQgPSB2Z2ljX3JlZ2lzdGVyX2FsbF9yZWRpc3RfaW9kZXZzKGt2bSwgcmRyZWcpOwogCWlmIChyZXQpIHsKLQkJc3RydWN0IHZnaWNfcmVkaXN0X3JlZ2lvbiAqcmRyZWc7Ci0KIAkJbXV0ZXhfbG9jaygmYW1wO2t2bS0mZ3Q7YXJjaC5jb25maWdfbG9jayk7Ci0JCXJkcmVnID0gdmdpY192M19yZGlzdF9yZWdpb25fZnJvbV9pbmRleChrdm0sIGluZGV4KTsKIAkJdmdpY192M19mcmVlX3JlZGlzdF9yZWdpb24oa3ZtLCByZHJlZyk7CiAJCW11dGV4X3VubG9jaygmYW1wO2t2bS0mZ3Q7YXJjaC5jb25maWdfbG9jayk7CiAJCXJldHVybiByZXQ7CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vYXJtNjQvdmdpY19pbml0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vYXJtNjQvdmdpY19pbml0LmMKaW5kZXggNDdlMzRiNDNhZmIyOS4uNWEzMGYzY2IwMzliZSAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2FybTY0L3ZnaWNfaW5pdC5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9hcm02NC92Z2ljX2luaXQuYwpAQCAtNSw2ICYjNDM7NSw3IEBACiAgKiBDb3B5cmlnaHQgKEMpIDIwMjAsIFJlZCBIYXQsIEluYy4KICAqLwogI2luY2x1ZGUgJmx0O2xpbnV4L2tlcm5lbC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9zaXplcy5oJmd0OwogI2luY2x1ZGUgJmx0O3N5cy9zeXNjYWxsLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7YXNtL2t2bS5oJmd0OwogI2luY2x1ZGUgJmx0O2FzbS9rdm1fcGFyYS5oJmd0OwpAQCAtMTMsMTIgJiM0MzsxNCwyMSBAQAogCiAjaW5jbHVkZSAmIzM0O3Rlc3RfdXRpbC5oJiMzNDsKICNpbmNsdWRlICYjMzQ7a3ZtX3V0aWwuaCYjMzQ7CiYjNDM7I2luY2x1ZGUgJiMzNDtnaWMuaCYjMzQ7CiAjaW5jbHVkZSAmIzM0O3Byb2Nlc3Nvci5oJiMzNDsKICNpbmNsdWRlICYjMzQ7dmdpYy5oJiMzNDsKICNpbmNsdWRlICYjMzQ7Z2ljX3YzLmgmIzM0OwogCiAjZGVmaW5lIE5SX1ZDUFVTCQk0CiAKJiM0MzsjZGVmaW5lIFJFRElTVF9SRVRSWV9SRUdJT04wX0JBU0UJR0lDUl9CQVNFX0dQQQomIzQzOyNkZWZpbmUgUkVESVNUX1JFVFJZX1JFR0lPTjFfQkFTRQlcCiYjNDM7CShSRURJU1RfUkVUUllfUkVHSU9OMF9CQVNFICYjNDM7IDIgKiBLVk1fVkdJQ19WM19SRURJU1RfU0laRSkKJiM0MzsjZGVmaW5lIFJFRElTVF9SRVRSWV9ESVNUX0JBU0UJCVwKJiM0MzsJKFJFRElTVF9SRVRSWV9SRUdJT04xX0JBU0UgJiM0MzsgS1ZNX1ZHSUNfVjNfUkVESVNUX1NJWkUpCiYjNDM7I2RlZmluZSBSRURJU1RfUkVUUllfUkVHSU9OMl9CQVNFCVwKJiM0MzsJKFJFRElTVF9SRVRSWV9ESVNUX0JBU0UgJiM0MzsgS1ZNX1ZHSUNfVjNfRElTVF9TSVpFKQomIzQzOwogI2RlZmluZSBSRUdfT0ZGU0VUKHZjcHUsIG9mZnNldCkgKCgodTY0KXZjcHUgJmx0OyZsdDsgMzIpIHwgb2Zmc2V0KQogCiAjZGVmaW5lIFZHSUNfREVWX0lTX1YyKF9kKSAoKF9kKSA9PSBLVk1fREVWX1RZUEVfQVJNX1ZHSUNfVjIpCkBAIC02NSw2ICYjNDM7NzUsMjMgQEAgc3RhdGljIHZvaWQgZ3Vlc3RfY29kZSh2b2lkKQogCUdVRVNUX0RPTkUoKTsKIH0KIAomIzQzO3N0YXRpYyB2b2lkIGd1ZXN0X2NoZWNrX3JlZGlzdF9yZXRyeSh2b2lkKQomIzQzO3sKJiM0MzsJdW5zaWduZWQgaW50IGk7CiYjNDM7CiYjNDM7CS8qIFRoZSBmaXJzdCB0aHJlZSByZWRpc3RyaWJ1dG9ycyBzcGFuIGFkamFjZW50IHJlZ2lvbnMgMCBhbmQgMS4gKi8KJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IE5SX1ZDUFVTOyBpJiM0MzsmIzQzOykgewomIzQzOwkJdTY0IGJhc2UgPSBpICZsdDsgMyA/IFJFRElTVF9SRVRSWV9SRUdJT04wX0JBU0UgJiM0MzsKJiM0MzsJCQkJICAgICAgIGkgKiBLVk1fVkdJQ19WM19SRURJU1RfU0laRSA6CiYjNDM7CQkJCSAgICAgICBSRURJU1RfUkVUUllfUkVHSU9OMl9CQVNFOwomIzQzOwkJdTY0IHR5cGVyID0gcmVhZHEoKHZvaWQgKikodW5zaWduZWQgbG9uZykoYmFzZSAmIzQzOyBHSUNSX1RZUEVSKSk7CiYjNDM7CiYjNDM7CQlHVUVTVF9BU1NFUlRfRVEoR0lDUl9UWVBFUl9DUFVfTlVNQkVSKHR5cGVyKSwgaSk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJR1VFU1RfRE9ORSgpOwomIzQzO30KJiM0MzsKIC8qIHdlIGRvbiYjMzk7dCB3YW50IHRvIGFzc2VydCBvbiBydW4gZXhlY3V0aW9uLCBoZW5jZSB0aGF0IGhlbHBlciAqLwogc3RhdGljIGludCBydW5fdmNwdShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiB7CkBAIC03Myw2ICYjNDM7MTAwLDcgQEAgc3RhdGljIGludCBydW5fdmNwdShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiAKIHN0YXRpYyBzdHJ1Y3Qgdm1fZ2ljIHZtX2dpY19jcmVhdGVfd2l0aF92Y3B1cyh1MzIgZ2ljX2Rldl90eXBlLAogCQkJCQkgICAgICB1MzIgbnJfdmNwdXMsCiYjNDM7CQkJCQkgICAgICB2b2lkICpndWVzdF9jb2RlLAogCQkJCQkgICAgICBzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHVzW10pCiB7CiAJc3RydWN0IHZtX2dpYyB2OwpAQCAtMzM4LDcgJiM0MzszNjYsNyBAQCBzdGF0aWMgdm9pZCB0ZXN0X3ZnaWNfdGhlbl92Y3B1cyh1MzIgZ2ljX2Rldl90eXBlKQogCXN0cnVjdCB2bV9naWMgdjsKIAlpbnQgcmV0LCBpOwogCi0JdiA9IHZtX2dpY19jcmVhdGVfd2l0aF92Y3B1cyhnaWNfZGV2X3R5cGUsIDEsIHZjcHVzKTsKJiM0MzsJdiA9IHZtX2dpY19jcmVhdGVfd2l0aF92Y3B1cyhnaWNfZGV2X3R5cGUsIDEsIGd1ZXN0X2NvZGUsIHZjcHVzKTsKIAogCXN1YnRlc3RfZGlzdF9yZGlzdCgmYW1wO3YpOwogCkBAIC0zNTksNyAmIzQzOzM4Nyw4IEBAIHN0YXRpYyB2b2lkIHRlc3RfdmNwdXNfdGhlbl92Z2ljKHUzMiBnaWNfZGV2X3R5cGUpCiAJc3RydWN0IHZtX2dpYyB2OwogCWludCByZXQ7CiAKLQl2ID0gdm1fZ2ljX2NyZWF0ZV93aXRoX3ZjcHVzKGdpY19kZXZfdHlwZSwgTlJfVkNQVVMsIHZjcHVzKTsKJiM0MzsJdiA9IHZtX2dpY19jcmVhdGVfd2l0aF92Y3B1cyhnaWNfZGV2X3R5cGUsIE5SX1ZDUFVTLCBndWVzdF9jb2RlLAomIzQzOwkJCQkgICAgIHZjcHVzKTsKIAogCXN1YnRlc3RfZGlzdF9yZGlzdCgmYW1wO3YpOwogCkBAIC00MTEsNyAmIzQzOzQ0MCw4IEBAIHN0YXRpYyB2b2lkIHRlc3RfdjNfbmV3X3JlZGlzdF9yZWdpb25zKHZvaWQpCiAJdTY0IGFkZHI7CiAJaW50IHJldDsKIAotCXYgPSB2bV9naWNfY3JlYXRlX3dpdGhfdmNwdXMoS1ZNX0RFVl9UWVBFX0FSTV9WR0lDX1YzLCBOUl9WQ1BVUywgdmNwdXMpOwomIzQzOwl2ID0gdm1fZ2ljX2NyZWF0ZV93aXRoX3ZjcHVzKEtWTV9ERVZfVFlQRV9BUk1fVkdJQ19WMywgTlJfVkNQVVMsCiYjNDM7CQkJCSAgICAgZ3Vlc3RfY29kZSwgdmNwdXMpOwogCXN1YnRlc3RfdjNfcmVkaXN0X3JlZ2lvbnMoJmFtcDt2KTsKIAlrdm1fZGV2aWNlX2F0dHJfc2V0KHYuZ2ljX2ZkLCBLVk1fREVWX0FSTV9WR0lDX0dSUF9DVFJMLAogCQkJICAgIEtWTV9ERVZfQVJNX1ZHSUNfQ1RSTF9JTklULCBOVUxMKTsKQEAgLTQyMiw3ICYjNDM7NDUyLDggQEAgc3RhdGljIHZvaWQgdGVzdF92M19uZXdfcmVkaXN0X3JlZ2lvbnModm9pZCkKIAogCS8qIHN0ZXAyICovCiAKLQl2ID0gdm1fZ2ljX2NyZWF0ZV93aXRoX3ZjcHVzKEtWTV9ERVZfVFlQRV9BUk1fVkdJQ19WMywgTlJfVkNQVVMsIHZjcHVzKTsKJiM0MzsJdiA9IHZtX2dpY19jcmVhdGVfd2l0aF92Y3B1cyhLVk1fREVWX1RZUEVfQVJNX1ZHSUNfVjMsIE5SX1ZDUFVTLAomIzQzOwkJCQkgICAgIGd1ZXN0X2NvZGUsIHZjcHVzKTsKIAlzdWJ0ZXN0X3YzX3JlZGlzdF9yZWdpb25zKCZhbXA7dik7CiAKIAlhZGRyID0gUkVESVNUX1JFR0lPTl9BVFRSX0FERFIoMSwgMHgyODAwMDAsIDAsIDIpOwpAQCAtNDM2LDcgJiM0Mzs0NjcsOCBAQCBzdGF0aWMgdm9pZCB0ZXN0X3YzX25ld19yZWRpc3RfcmVnaW9ucyh2b2lkKQogCiAJLyogc3RlcCAzICovCiAKLQl2ID0gdm1fZ2ljX2NyZWF0ZV93aXRoX3ZjcHVzKEtWTV9ERVZfVFlQRV9BUk1fVkdJQ19WMywgTlJfVkNQVVMsIHZjcHVzKTsKJiM0MzsJdiA9IHZtX2dpY19jcmVhdGVfd2l0aF92Y3B1cyhLVk1fREVWX1RZUEVfQVJNX1ZHSUNfVjMsIE5SX1ZDUFVTLAomIzQzOwkJCQkgICAgIGd1ZXN0X2NvZGUsIHZjcHVzKTsKIAlzdWJ0ZXN0X3YzX3JlZGlzdF9yZWdpb25zKCZhbXA7dik7CiAKIAlyZXQgPSBfX2t2bV9kZXZpY2VfYXR0cl9zZXQodi5naWNfZmQsIEtWTV9ERVZfQVJNX1ZHSUNfR1JQX0FERFIsCkBAIC00NTcsNiAmIzQzOzQ4OSw3MCBAQCBzdGF0aWMgdm9pZCB0ZXN0X3YzX25ld19yZWRpc3RfcmVnaW9ucyh2b2lkKQogCXZtX2dpY19kZXN0cm95KCZhbXA7dik7CiB9CiAKJiM0MztzdGF0aWMgdm9pZCB0ZXN0X3YzX3JlZGlzdF9yZWdpb25fcmV0cnkodm9pZCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBrdm1fdmNwdSAqdmNwdXNbTlJfVkNQVVNdOwomIzQzOwlzdHJ1Y3Qgdm1fZ2ljIHY7CiYjNDM7CXN0cnVjdCB1Y2FsbCB1YzsKJiM0MzsJdTY0IGFkZHI7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CXYgPSB2bV9naWNfY3JlYXRlX3dpdGhfdmNwdXMoS1ZNX0RFVl9UWVBFX0FSTV9WR0lDX1YzLCBOUl9WQ1BVUywKJiM0MzsJCQkJICAgICBndWVzdF9jaGVja19yZWRpc3RfcmV0cnksIHZjcHVzKTsKJiM0MzsKJiM0MzsJYWRkciA9IFJFRElTVF9SRUdJT05fQVRUUl9BRERSKDIsIFJFRElTVF9SRVRSWV9SRUdJT04wX0JBU0UsIDAsIDApOwomIzQzOwlrdm1fZGV2aWNlX2F0dHJfc2V0KHYuZ2ljX2ZkLCBLVk1fREVWX0FSTV9WR0lDX0dSUF9BRERSLAomIzQzOwkJCSAgICBLVk1fVkdJQ19WM19BRERSX1RZUEVfUkVESVNUX1JFR0lPTiwgJmFtcDthZGRyKTsKJiM0MzsKJiM0MzsJYWRkciA9IFJFRElTVF9SRUdJT05fQVRUUl9BRERSKDEsIFJFRElTVF9SRVRSWV9SRUdJT04xX0JBU0UsIDAsIDEpOwomIzQzOwlrdm1fZGV2aWNlX2F0dHJfc2V0KHYuZ2ljX2ZkLCBLVk1fREVWX0FSTV9WR0lDX0dSUF9BRERSLAomIzQzOwkJCSAgICBLVk1fVkdJQ19WM19BRERSX1RZUEVfUkVESVNUX1JFR0lPTiwgJmFtcDthZGRyKTsKJiM0MzsKJiM0MzsJYWRkciA9IFJFRElTVF9SRVRSWV9ESVNUX0JBU0U7CiYjNDM7CWt2bV9kZXZpY2VfYXR0cl9zZXQodi5naWNfZmQsIEtWTV9ERVZfQVJNX1ZHSUNfR1JQX0FERFIsCiYjNDM7CQkJICAgIEtWTV9WR0lDX1YzX0FERFJfVFlQRV9ESVNULCAmYW1wO2FkZHIpOwomIzQzOwomIzQzOwlhZGRyID0gUkVESVNUX1JFR0lPTl9BVFRSX0FERFIoMSwgUkVESVNUX1JFVFJZX0RJU1RfQkFTRSwgMCwgMik7CiYjNDM7CXJldCA9IF9fa3ZtX2RldmljZV9hdHRyX3NldCh2LmdpY19mZCwgS1ZNX0RFVl9BUk1fVkdJQ19HUlBfQUREUiwKJiM0MzsJCQkJICAgIEtWTV9WR0lDX1YzX0FERFJfVFlQRV9SRURJU1RfUkVHSU9OLAomIzQzOwkJCQkgICAgJmFtcDthZGRyKTsKJiM0MzsJVEVTVF9BU1NFUlQocmV0ICZhbXA7JmFtcDsgZXJybm8gPT0gRUlOVkFMLAomIzQzOwkJICAgICYjMzQ7cmVnaXN0ZXIgcmVkaXN0IHJlZ2lvbiBjb2xsaWRpbmcgd2l0aCBkaXN0JiMzNDspOwomIzQzOwomIzQzOwlhZGRyID0gUkVESVNUX1JFR0lPTl9BVFRSX0FERFIoMSwgUkVESVNUX1JFVFJZX1JFR0lPTjJfQkFTRSwgMCwgMik7CiYjNDM7CWt2bV9kZXZpY2VfYXR0cl9zZXQodi5naWNfZmQsIEtWTV9ERVZfQVJNX1ZHSUNfR1JQX0FERFIsCiYjNDM7CQkJICAgIEtWTV9WR0lDX1YzX0FERFJfVFlQRV9SRURJU1RfUkVHSU9OLCAmYW1wO2FkZHIpOwomIzQzOwomIzQzOwl2aXJ0X21hcCh2LnZtLCBSRURJU1RfUkVUUllfUkVHSU9OMF9CQVNFLCBSRURJU1RfUkVUUllfUkVHSU9OMF9CQVNFLAomIzQzOwkJIHZtX2NhbGNfbnVtX2d1ZXN0X3BhZ2VzKHYudm0tJmd0O21vZGUsCiYjNDM7CQkJCQkgMyAqIEtWTV9WR0lDX1YzX1JFRElTVF9TSVpFKSk7CiYjNDM7CXZpcnRfbWFwKHYudm0sIFJFRElTVF9SRVRSWV9SRUdJT04yX0JBU0UsIFJFRElTVF9SRVRSWV9SRUdJT04yX0JBU0UsCiYjNDM7CQkgdm1fY2FsY19udW1fZ3Vlc3RfcGFnZXModi52bS0mZ3Q7bW9kZSwKJiM0MzsJCQkJCSBLVk1fVkdJQ19WM19SRURJU1RfU0laRSkpOwomIzQzOwomIzQzOwlrdm1fZGV2aWNlX2F0dHJfc2V0KHYuZ2ljX2ZkLCBLVk1fREVWX0FSTV9WR0lDX0dSUF9DVFJMLAomIzQzOwkJCSAgICBLVk1fREVWX0FSTV9WR0lDX0NUUkxfSU5JVCwgTlVMTCk7CiYjNDM7CiYjNDM7CXZjcHVfcnVuKHZjcHVzWzBdKTsKJiM0MzsJc3dpdGNoIChnZXRfdWNhbGwodmNwdXNbMF0sICZhbXA7dWMpKSB7CiYjNDM7CWNhc2UgVUNBTExfRE9ORToKJiM0MzsJCWJyZWFrOwomIzQzOwljYXNlIFVDQUxMX0FCT1JUOgomIzQzOwkJUkVQT1JUX0dVRVNUX0FTU0VSVCh1Yyk7CiYjNDM7CQlicmVhazsKJiM0MzsJY2FzZSBVQ0FMTF9OT05FOgomIzQzOwkJaWYgKHZjcHVzWzBdLSZndDtydW4tJmd0O2V4aXRfcmVhc29uID09IEtWTV9FWElUX01NSU8pCiYjNDM7CQkJVEVTVF9GQUlMKCYjMzQ7VW5leHBlY3RlZCBNTUlPIGV4aXQgYXQgMHglbGx4JiMzNDssCiYjNDM7CQkJCSAgdmNwdXNbMF0tJmd0O3J1bi0mZ3Q7bW1pby5waHlzX2FkZHIpOwomIzQzOwkJZmFsbHRocm91Z2g7CiYjNDM7CWRlZmF1bHQ6CiYjNDM7CQlURVNUX0ZBSUwoJiMzNDtVbmV4cGVjdGVkIHVjYWxsICVsdSwgZXhpdF9yZWFzb24gJXUmIzM0OywKJiM0MzsJCQkgIHVjLmNtZCwgdmNwdXNbMF0tJmd0O3J1bi0mZ3Q7ZXhpdF9yZWFzb24pOwomIzQzOwl9CiYjNDM7CiYjNDM7CXZtX2dpY19kZXN0cm95KCZhbXA7dik7CiYjNDM7fQomIzQzOwogc3RhdGljIHZvaWQgdGVzdF92M190eXBlcl9hY2Nlc3Nlcyh2b2lkKQogewogCXN0cnVjdCB2bV9naWMgdjsKQEAgLTYwOCw3ICYjNDM7NzA0LDggQEAgc3RhdGljIHZvaWQgdGVzdF92M19yZWRpc3RfaXBhX3JhbmdlX2NoZWNrX2F0X3ZjcHVfcnVuKHZvaWQpCiAJaW50IHJldCwgaTsKIAl1NjQgYWRkcjsKIAotCXYgPSB2bV9naWNfY3JlYXRlX3dpdGhfdmNwdXMoS1ZNX0RFVl9UWVBFX0FSTV9WR0lDX1YzLCAxLCB2Y3B1cyk7CiYjNDM7CXYgPSB2bV9naWNfY3JlYXRlX3dpdGhfdmNwdXMoS1ZNX0RFVl9UWVBFX0FSTV9WR0lDX1YzLCAxLCBndWVzdF9jb2RlLAomIzQzOwkJCQkgICAgIHZjcHVzKTsKIAogCS8qIFNldCBzcGFjZSBmb3IgMyByZWRpc3RzLCB3ZSBoYXZlIDEgdmNwdSwgc28gdGhpcyBzdWNjZWVkcy4gKi8KIAlhZGRyID0gbWF4X3BoeXNfc2l6ZSAtICgzICogMiAqIDB4MTAwMDApOwpAQCAtNjQxLDcgJiM0Mzs3MzgsOCBAQCBzdGF0aWMgdm9pZCB0ZXN0X3YzX2l0c19yZWdpb24odm9pZCkKIAl1NjQgYWRkcjsKIAlpbnQgaXRzX2ZkLCByZXQ7CiAKLQl2ID0gdm1fZ2ljX2NyZWF0ZV93aXRoX3ZjcHVzKEtWTV9ERVZfVFlQRV9BUk1fVkdJQ19WMywgTlJfVkNQVVMsIHZjcHVzKTsKJiM0MzsJdiA9IHZtX2dpY19jcmVhdGVfd2l0aF92Y3B1cyhLVk1fREVWX1RZUEVfQVJNX1ZHSUNfVjMsIE5SX1ZDUFVTLAomIzQzOwkJCQkgICAgIGd1ZXN0X2NvZGUsIHZjcHVzKTsKIAlpdHNfZmQgPSBrdm1fY3JlYXRlX2RldmljZSh2LnZtLCBLVk1fREVWX1RZUEVfQVJNX1ZHSUNfSVRTKTsKIAogCWFkZHIgPSAweDQwMTAwMDsKQEAgLTY4NCw3ICYjNDM7NzgyLDggQEAgc3RhdGljIHZvaWQgdGVzdF92M19uYXNzZ2ljYXAodm9pZCkKIAl1MzIgdHlwZXIyOwogCWludCByZXQ7CiAKLQl2bSA9IHZtX2dpY19jcmVhdGVfd2l0aF92Y3B1cyhLVk1fREVWX1RZUEVfQVJNX1ZHSUNfVjMsIE5SX1ZDUFVTLCB2Y3B1cyk7CiYjNDM7CXZtID0gdm1fZ2ljX2NyZWF0ZV93aXRoX3ZjcHVzKEtWTV9ERVZfVFlQRV9BUk1fVkdJQ19WMywgTlJfVkNQVVMsCiYjNDM7CQkJCSAgICAgIGd1ZXN0X2NvZGUsIHZjcHVzKTsKIAlrdm1fZGV2aWNlX2F0dHJfZ2V0KHZtLmdpY19mZCwgS1ZNX0RFVl9BUk1fVkdJQ19HUlBfRElTVF9SRUdTLAogCQkJICAgIEdJQ0RfVFlQRVIyLCAmYW1wO3R5cGVyMik7CiAJaGFzX25hc3NnaWNhcCA9IHR5cGVyMiAmYW1wOyBHSUNEX1RZUEVSMl9uQVNTR0ljYXA7CkBAIC05NzgsNiAmIzQzOzEwNzcsNyBAQCB2b2lkIHJ1bl90ZXN0cyh1MzIgZ2ljX2Rldl90eXBlKQogCiAJaWYgKFZHSUNfREVWX0lTX1YzKGdpY19kZXZfdHlwZSkpIHsKIAkJdGVzdF92M19uZXdfcmVkaXN0X3JlZ2lvbnMoKTsKJiM0MzsJCXRlc3RfdjNfcmVkaXN0X3JlZ2lvbl9yZXRyeSgpOwogCQl0ZXN0X3YzX3R5cGVyX2FjY2Vzc2VzKCk7CiAJCXRlc3RfdjNfbGFzdF9iaXRfcmVkaXN0X3JlZ2lvbnMoKTsKIAkJdGVzdF92M19sYXN0X2JpdF9zaW5nbGVfcmRpc3QoKTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDA4OjI2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDcxMTgKCQkJCQkJCW91dHB1dDogNTAKCQkJCQkJCXRob3VnaHRzOiA0NDQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBQYXRjaCBTZXJpZXMgZm9yIEtNU0FOIEZ1enppbmcgTmVlZHMqKgoKT2theSwgc28gdGhlIHRhc2sgaXMgdG8gZmlndXJlIG91dCBpZiB0aGlzIHBhdGNoIHNlcmllcyBpbiBgYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLW1taW8tdjMuY2AgYW5kIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vYXJtNjQvdmdpY19pbml0LmNgIHdhcnJhbnRzIGEgS01TQU4gZnV6emluZyBzZXNzaW9uLiBJIG5lZWQgdG8gZGV0ZXJtaW5lIGlmIGBOZWVkc0tNU0FOID0gdHJ1ZWAgb3IgYE5lZWRzS01TQU4gPSBmYWxzZWAuIExldCYjMzk7cyBkaXZlIGluIGFuZCBzZWUgd2hhdCYjMzk7cyBjaGFuZ2VkLgoKRmlyc3QsIEkmIzM5O20gemVyb2luZyBpbiBvbiBgYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLW1taW8tdjMuY2AuIEl0IGxvb2tzIGxpa2UgdGhlIGNvcmUgb2YgdGhlIGNoYW5nZXMgcmV2b2x2ZSBhcm91bmQgcmVkaXN0cmlidXRvciBkZXZpY2UgbWFuYWdlbWVudC4gSSBzZWUgc2V2ZXJhbCBmdW5jdGlvbnMgaW52b2x2ZWQ6IGB2Z2ljX3VuZG9fcmVkaXN0X2Fzc2lnbm1lbnRgLCBgdmdpY19yZWdpc3Rlcl9yZWRpc3RfaW9kZXZgLCBgdmdpY19yb2xsYmFja19yZWRpc3RfaW9kZXZgLCBgdmdpY19yZWdpc3Rlcl9hbGxfcmVkaXN0X2lvZGV2c2AsIGFuZCBgdmdpY192M19zZXRfcmVkaXN0X2Jhc2VgLgoKVGhlIGZ1bmN0aW9ucyBkZWFsaW5nIHdpdGggdGhlIHJlZGlzdHJpYnV0b3IgYXNzaWdubWVudHMgc2VlbSB0byBiZSBzZXR0aW5nIGFuZCB1bnNldHRpbmcgYHZnaWNfY3B1LSZndDtyZHJlZ2AsIGFsb25nIHdpdGggb3RoZXIgcmVsYXRlZCBtZW1vcnkgbG9jYXRpb25zLiBJIG5lZWQgdG8gYmUgY2FyZWZ1bCB3aXRoIHRoZSBsb2NraW5nIGFuZCB1bmxvY2tpbmcgb3BlcmF0aW9ucy4gU3BlY2lmaWNhbGx5LCBgdmdpY191bmRvX3JlZGlzdF9hc3NpZ25tZW50YCByZXNldHMgdGhlIGluZGV4IGFuZCBwb2ludGVyLCBhbmQgYHZnaWNfcmVnaXN0ZXJfcmVkaXN0X2lvZGV2YCBkZWFscyB3aXRoIG1lbW9yeSBhbGxvY2F0aW9uIChvciByZWdpc3RyYXRpb24gdmlhIGBrdm1faW9fYnVzX3JlZ2lzdGVyX2RldmApIGFuZCBjYWxscyBgdmdpY191bmRvX3JlZGlzdF9hc3NpZ25tZW50YCBvbiBmYWlsdXJlLiBgdmdpY19yb2xsYmFja19yZWRpc3RfaW9kZXZgIGFwcGVhcnMgdG8gYmUgYSBjbGVhbnVwIGZ1bmN0aW9uIHRoYXQgYWxzbyBzZXRzIHRoZSBgcmRyZWdgIHBvaW50ZXIgdG8gYE5VTExgLiBUaGUgYHZnaWNfcmVnaXN0ZXJfYWxsX3JlZGlzdF9pb2RldnNgIGZ1bmN0aW9uIHNlZW1zIHRvIGJlIHVzZWQgdG8gcGVyZm9ybSBvcGVyYXRpb25zIG9uIGEgY29sbGVjdGlvbiBvZiByZWRpc3RyaWJ1dG9yIGRldmljZXMsIGFuZCBpcyBwYXNzZWQgYHJkcmVnYC4gVGhlIGltcG9ydGFudCB0aGluZyBoZXJlIGlzIHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgYHJkcmVnYCBpcyB1c2VkLiBGaW5hbGx5LCBgdmdpY192M19zZXRfcmVkaXN0X2Jhc2VgIGFwcGVhcnMgdG8gYmUgYSBoaWdoZXIgbGV2ZWwgZnVuY3Rpb24gdGhhdCBmZXRjaGVzIHRoZSBgcmRyZWdgIGFuZCBjYWxscyBgdmdpY19yZWdpc3Rlcl9hbGxfcmVkaXN0X2lvZGV2c2AuCgpJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZGF0YSBmbG93IGFuZCBob3cgdGhlc2UgZnVuY3Rpb25zIGludGVyYWN0LiBUbyBkbyB0aGF0IGVmZmVjdGl2ZWx5LCBJJiMzOTttIGdvaW5nIHRvIHB1bGwgdXAgdGhlIGNvbnRleHQgd2l0aCBgcmVhZC1maWxlYCBhbmQgY2FyZWZ1bGx5IGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgd2l0aGluIGB2Z2ljLW1taW8tdjMuY2AuIEkgbmVlZCBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIHRoZSBvdmVyYWxsIG1lbW9yeSBtYW5hZ2VtZW50IHN0cmF0ZWd5IGFuZCBob3cgdGhlIHJlZGlzdHJpYnV0b3IgZGV2aWNlIGlzIGhhbmRsZWQuIEkgbmVlZCB0byBsb29rIGZvciBhbnkgcG90ZW50aWFsIGZvciB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlLWZyZWUsIG9yIG1lbW9yeSBsZWFrcyB3aXRoaW4gdGhpcyBzZWN0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAwODoyNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2FyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1tbWlvLXYzLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA3NjAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogOTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDc2MDpcdHtcbiA3NjE6XHRcdGRldi1cdTAwM2VyZWdpb25zID0gdmdpY192M19kaXN0X3JlZ2lzdGVycztcbiA3NjI6XHRcdGRldi1cdTAwM2Vucl9yZWdpb25zID0gQVJSQVlfU0laRSh2Z2ljX3YzX2Rpc3RfcmVnaXN0ZXJzKTtcbiA3NjM6XHRcbiA3NjQ6XHRcdGt2bV9pb2RldmljZV9pbml0KFx1MDAyNmRldi1cdTAwM2VkZXYsIFx1MDAyNmt2bV9pb19naWNfb3BzKTtcbiA3NjU6XHRcbiA3NjY6XHRcdHJldHVybiBTWl82NEs7XG4gNzY3Olx0fVxuIDc2ODpcdFxuIDc2OTpcdHN0YXRpYyB2b2lkIHZnaWNfdW5kb19yZWRpc3RfYXNzaWdubWVudChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gNzcwOlx0e1xuIDc3MTpcdFx0c3RydWN0IHZnaWNfY3B1ICp2Z2ljX2NwdSA9IFx1MDAyNnZjcHUtXHUwMDNlYXJjaC52Z2ljX2NwdTtcbiA3NzI6XHRcbiA3NzM6XHRcdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXHUwMDI2dmNwdS1cdTAwM2Vrdm0tXHUwMDNlc2xvdHNfbG9jayk7XG4gNzc0Olx0XG4gNzc1Olx0XHRndWFyZChtdXRleCkoXHUwMDI2dmNwdS1cdTAwM2Vrdm0tXHUwMDNlYXJjaC5jb25maWdfbG9jayk7XG4gNzc2Olx0XG4gNzc3Olx0XHR2Z2ljX2NwdS1cdTAwM2VyZHJlZy1cdTAwM2VmcmVlX2luZGV4LS07XG4gNzc4Olx0XHR2Z2ljX2NwdS1cdTAwM2VyZHJlZyA9IE5VTEw7XG4gNzc5Olx0XHR2Z2ljX2NwdS1cdTAwM2VyZF9pb2Rldi5iYXNlX2FkZHIgPSBWR0lDX0FERFJfVU5ERUY7XG4gNzgwOlx0fVxuIDc4MTpcdFxuIDc4MjpcdC8qKlxuIDc4MzpcdCAqIHZnaWNfcmVnaXN0ZXJfcmVkaXN0X2lvZGV2IC0gcmVnaXN0ZXIgYSBzaW5nbGUgcmVkaXN0IGlvZGV2XG4gNzg0Olx0ICogQHZjcHU6ICAgIFRoZSBWQ1BVIHRvIHdoaWNoIHRoZSByZWRpc3RyaWJ1dG9yIGJlbG9uZ3NcbiA3ODU6XHQgKlxuIDc4NjpcdCAqIFJlZ2lzdGVyIGEgS1ZNIGlvZGV2IGZvciB0aGlzIFZDUFUmIzM5O3MgcmVkaXN0cmlidXRvciB1c2luZyB0aGUgYWRkcmVzc1xuIDc4NzpcdCAqIHByb3ZpZGVkLlxuIDc4ODpcdCAqXG4gNzg5Olx0ICogUmV0dXJuIDAgb24gc3VjY2VzcywgLUVSUk5PIG90aGVyd2lzZS5cbiA3OTA6XHQgKi9cbiA3OTE6XHRpbnQgdmdpY19yZWdpc3Rlcl9yZWRpc3RfaW9kZXYoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIDc5MjpcdHtcbiA3OTM6XHRcdHN0cnVjdCBrdm0gKmt2bSA9IHZjcHUtXHUwMDNla3ZtO1xuIDc5NDpcdFx0c3RydWN0IHZnaWNfZGlzdCAqdmdpYyA9IFx1MDAyNmt2bS1cdTAwM2VhcmNoLnZnaWM7XG4gNzk1Olx0XHRzdHJ1Y3QgdmdpY19jcHUgKnZnaWNfY3B1ID0gXHUwMDI2dmNwdS1cdTAwM2VhcmNoLnZnaWNfY3B1O1xuIDc5NjpcdFx0c3RydWN0IHZnaWNfaW9fZGV2aWNlICpyZF9kZXYgPSBcdTAwMjZ2Y3B1LVx1MDAzZWFyY2gudmdpY19jcHUucmRfaW9kZXY7XG4gNzk3Olx0XHRzdHJ1Y3QgdmdpY19yZWRpc3RfcmVnaW9uICpyZHJlZztcbiA3OTg6XHRcdGdwYV90IHJkX2Jhc2U7XG4gNzk5Olx0XHRpbnQgcmV0ID0gMDtcbiA4MDA6XHRcbiA4MDE6XHRcdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXHUwMDI2a3ZtLVx1MDAzZXNsb3RzX2xvY2spO1xuIDgwMjpcdFx0bXV0ZXhfbG9jayhcdTAwMjZrdm0tXHUwMDNlYXJjaC5jb25maWdfbG9jayk7XG4gODAzOlx0XG4gODA0Olx0XHRpZiAoIUlTX1ZHSUNfQUREUl9VTkRFRih2Z2ljX2NwdS1cdTAwM2VyZF9pb2Rldi5iYXNlX2FkZHIpKVxuIDgwNTpcdFx0XHRnb3RvIG91dF91bmxvY2s7XG4gODA2Olx0XG4gODA3Olx0XHQvKlxuIDgwODpcdFx0ICogV2UgbWF5IGJlIGNyZWF0aW5nIFZDUFVzIGJlZm9yZSBoYXZpbmcgc2V0IHRoZSBiYXNlIGFkZHJlc3MgZm9yIHRoZVxuIDgwOTpcdFx0ICogcmVkaXN0cmlidXRvciByZWdpb24sIGluIHdoaWNoIGNhc2Ugd2Ugd2lsbCBjb21lIGJhY2sgdG8gdGhpc1xuIDgxMDpcdFx0ICogZnVuY3Rpb24gZm9yIGFsbCBWQ1BVcyB3aGVuIHRoZSBiYXNlIGFkZHJlc3MgaXMgc2V0LiAgSnVzdCByZXR1cm5cbiA4MTE6XHRcdCAqIHdpdGhvdXQgZG9pbmcgYW55IHdvcmsgZm9yIG5vdy5cbiA4MTI6XHRcdCAqL1xuIDgxMzpcdFx0cmRyZWcgPSB2Z2ljX3YzX3JkaXN0X2ZyZWVfc2xvdChcdTAwMjZ2Z2ljLVx1MDAzZXJkX3JlZ2lvbnMpO1xuIDgxNDpcdFx0aWYgKCFyZHJlZylcbiA4MTU6XHRcdFx0Z290byBvdXRfdW5sb2NrO1xuIDgxNjpcdFxuIDgxNzpcdFx0aWYgKCF2Z2ljX3YzX2NoZWNrX2Jhc2Uoa3ZtKSkge1xuIDgxODpcdFx0XHRyZXQgPSAtRUlOVkFMO1xuIDgxOTpcdFx0XHRnb3RvIG91dF91bmxvY2s7XG4gODIwOlx0XHR9XG4gODIxOlx0XG4gODIyOlx0XHR2Z2ljX2NwdS1cdTAwM2VyZHJlZyA9IHJkcmVnO1xuIDgyMzpcdFx0dmdpY19jcHUtXHUwMDNlcmRyZWdfaW5kZXggPSByZHJlZy1cdTAwM2VmcmVlX2luZGV4O1xuIDgyNDpcdFxuIDgyNTpcdFx0cmRfYmFzZSA9IHJkcmVnLVx1MDAzZWJhc2UgJiM0MzsgcmRyZWctXHUwMDNlZnJlZV9pbmRleCAqIEtWTV9WR0lDX1YzX1JFRElTVF9TSVpFO1xuIDgyNjpcdFxuIDgyNzpcdFx0a3ZtX2lvZGV2aWNlX2luaXQoXHUwMDI2cmRfZGV2LVx1MDAzZWRldiwgXHUwMDI2a3ZtX2lvX2dpY19vcHMpO1xuIDgyODpcdFx0cmRfZGV2LVx1MDAzZWJhc2VfYWRkciA9IHJkX2Jhc2U7XG4gODI5Olx0XHRyZF9kZXYtXHUwMDNlaW9kZXZfdHlwZSA9IElPREVWX1JFRElTVDtcbiA4MzA6XHRcdHJkX2Rldi1cdTAwM2VyZWdpb25zID0gdmdpY192M19yZF9yZWdpc3RlcnM7XG4gODMxOlx0XHRyZF9kZXYtXHUwMDNlbnJfcmVnaW9ucyA9IEFSUkFZX1NJWkUodmdpY192M19yZF9yZWdpc3RlcnMpO1xuIDgzMjpcdFx0cmRfZGV2LVx1MDAzZXJlZGlzdF92Y3B1ID0gdmNwdTtcbiA4MzM6XHRcbiA4MzQ6XHRcdC8qIFByb3RlY3RlZCBieSBzbG90c19sb2NrICovXG4gODM1Olx0XHRyZHJlZy1cdTAwM2VmcmVlX2luZGV4JiM0MzsmIzQzOztcbiA4MzY6XHRcbiA4Mzc6XHRcdG11dGV4X3VubG9jayhcdTAwMjZrdm0tXHUwMDNlYXJjaC5jb25maWdfbG9jayk7XG4gODM4Olx0XG4gODM5Olx0XHRyZXQgPSBrdm1faW9fYnVzX3JlZ2lzdGVyX2Rldihrdm0sIEtWTV9NTUlPX0JVUywgcmRfYmFzZSxcbiA4NDA6XHRcdFx0XHRcdCAgICAgIDIgKiBTWl82NEssIFx1MDAyNnJkX2Rldi1cdTAwM2VkZXYpO1xuIDg0MTpcdFx0aWYgKHJldClcbiA4NDI6XHRcdFx0dmdpY191bmRvX3JlZGlzdF9hc3NpZ25tZW50KHZjcHUpO1xuIDg0MzpcdFxuIDg0NDpcdFx0cmV0dXJuIHJldDtcbiA4NDU6XHRcbiA4NDY6XHRvdXRfdW5sb2NrOlxuIDg0NzpcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNmt2bS1cdTAwM2VhcmNoLmNvbmZpZ19sb2NrKTtcbiA4NDg6XHRcdHJldHVybiByZXQ7XG4gODQ5Olx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAwODoyNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5Njg4CgkJCQkJCQlvdXRwdXQ6IDUwCgkJCQkJCQl0aG91Z2h0czogNDAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2Ygd2hhdCBJIHdvdWxkIGJlIHRoaW5raW5nLCBnaXZlbiB0aGF0IGNvbnRleHQuCgoqKkRpdmluZyBpbnRvIHRoZSBWZ2ljLU1NSU8tVjMgSW1wbGVtZW50YXRpb24qKgoKQWxyaWdodCwgdGltZSB0byBkaWcgaW50byB0aGUgZ3V0cyBvZiB0aGUgdmlydHVhbCBHSUMgKEdlbmVyaWMgSW50ZXJydXB0IENvbnRyb2xsZXIpIG1lbW9yeS1tYXBwZWQgSS9PIHYzIGltcGxlbWVudGF0aW9uLCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBgYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLW1taW8tdjMuY2AgZmlsZS4gSSBuZWVkIHRvIGdldCBhIGJldHRlciBoYW5kbGUgb24gaG93IHRoaXMgdmVyc2lvbiBoYW5kbGVzIG1lbW9yeS1tYXBwZWQgYWNjZXNzZXMuIExldCYjMzk7cyBzdGFydCBieSB6ZXJvaW5nIGluIG9uIGxpbmVzIDg1MCB0aHJvdWdoIDkzMC4gVGhpcyBzZWN0aW9uIGlzIHByb2JhYmx5IGtleSB0byB1bmRlcnN0YW5kaW5nIGEgc3BlY2lmaWMgY3JpdGljYWwgZnVuY3Rpb24gb3IgYSBwYXJ0aWN1bGFyIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMsIG1heWJlIHJlbGF0ZWQgdG8gaW50ZXJydXB0IGNvbmZpZ3VyYXRpb24sIGluamVjdGlvbiwgb3IgYWNrbm93bGVkZ2VtZW50LiBLbm93aW5nIHRoaXMgd2lsbCBnaXZlIG1lIGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2YgaG93IHRoZSB2aXJ0dWFsIEdJQyBpbnRlcmFjdHMgd2l0aCB0aGUgaG9zdCBhbmQgZ3Vlc3QsIHNwZWNpZmljYWxseSB0aGUgbWVtb3J5LW1hcHBlZCBpbnRlcmZhY2UuIEkmIzM5O20gaG9waW5nIHRvIGlkZW50aWZ5IGFueSBwb3RlbnRpYWwgYm90dGxlbmVja3MsIGFyZWFzIGZvciBvcHRpbWl6YXRpb24sIG9yIHBlcmhhcHMgZXZlbiBzdWJ0bGUgYnVncy4gTGV0JiMzOTtzIHNlZSB3aGF0IHRoZXNlIGxpbmVzIHJldmVhbC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMDg6Mjc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDthcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtbW1pby12My5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogODUwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDgwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA4NTA6XHRcbiA4NTE6XHR2b2lkIHZnaWNfdW5yZWdpc3Rlcl9yZWRpc3RfaW9kZXYoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIDg1MjpcdHtcbiA4NTM6XHRcdHN0cnVjdCB2Z2ljX2lvX2RldmljZSAqcmRfZGV2ID0gXHUwMDI2dmNwdS1cdTAwM2VhcmNoLnZnaWNfY3B1LnJkX2lvZGV2O1xuIDg1NDpcdFxuIDg1NTpcdFx0a3ZtX2lvX2J1c191bnJlZ2lzdGVyX2Rldih2Y3B1LVx1MDAzZWt2bSwgS1ZNX01NSU9fQlVTLCBcdTAwMjZyZF9kZXYtXHUwMDNlZGV2KTtcbiA4NTY6XHR9XG4gODU3Olx0XG4gODU4Olx0c3RhdGljIHZvaWQgdmdpY19yb2xsYmFja19yZWRpc3RfaW9kZXYoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuIDg1OTpcdFx0XHRcdFx0ICAgICAgIHN0cnVjdCB2Z2ljX3JlZGlzdF9yZWdpb24gKnJkcmVnKVxuIDg2MDpcdHtcbiA4NjE6XHRcdHN0cnVjdCB2Z2ljX2NwdSAqdmdpY19jcHUgPSBcdTAwMjZ2Y3B1LVx1MDAzZWFyY2gudmdpY19jcHU7XG4gODYyOlx0XG4gODYzOlx0XHRsb2NrZGVwX2Fzc2VydF9oZWxkKFx1MDAyNnZjcHUtXHUwMDNla3ZtLVx1MDAzZXNsb3RzX2xvY2spO1xuIDg2NDpcdFxuIDg2NTpcdFx0aWYgKHZnaWNfY3B1LVx1MDAzZXJkcmVnICE9IHJkcmVnKVxuIDg2NjpcdFx0XHRyZXR1cm47XG4gODY3Olx0XG4gODY4Olx0XHR2Z2ljX3VucmVnaXN0ZXJfcmVkaXN0X2lvZGV2KHZjcHUpO1xuIDg2OTpcdFxuIDg3MDpcdFx0Z3VhcmQobXV0ZXgpKFx1MDAyNnZjcHUtXHUwMDNla3ZtLVx1MDAzZWFyY2guY29uZmlnX2xvY2spO1xuIDg3MTpcdFx0dmdpY19jcHUtXHUwMDNlcmRyZWcgPSBOVUxMO1xuIDg3MjpcdFx0dmdpY19jcHUtXHUwMDNlcmRfaW9kZXYuYmFzZV9hZGRyID0gVkdJQ19BRERSX1VOREVGO1xuIDg3MzpcdH1cbiA4NzQ6XHRcbiA4NzU6XHRzdGF0aWMgaW50IHZnaWNfcmVnaXN0ZXJfYWxsX3JlZGlzdF9pb2RldnMoc3RydWN0IGt2bSAqa3ZtLFxuIDg3NjpcdFx0XHRcdFx0XHQgICBzdHJ1Y3QgdmdpY19yZWRpc3RfcmVnaW9uICpyZHJlZylcbiA4Nzc6XHR7XG4gODc4Olx0XHRzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHU7XG4gODc5Olx0XHR1bnNpZ25lZCBsb25nIGM7XG4gODgwOlx0XHRpbnQgcmV0ID0gMDtcbiA4ODE6XHRcbiA4ODI6XHRcdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXHUwMDI2a3ZtLVx1MDAzZXNsb3RzX2xvY2spO1xuIDg4MzpcdFxuIDg4NDpcdFx0a3ZtX2Zvcl9lYWNoX3ZjcHUoYywgdmNwdSwga3ZtKSB7XG4gODg1Olx0XHRcdHJldCA9IHZnaWNfcmVnaXN0ZXJfcmVkaXN0X2lvZGV2KHZjcHUpO1xuIDg4NjpcdFx0XHRpZiAocmV0KVxuIDg4NzpcdFx0XHRcdGJyZWFrO1xuIDg4ODpcdFx0fVxuIDg4OTpcdFxuIDg5MDpcdFx0aWYgKHJldCkge1xuIDg5MTpcdFx0XHQvKiBVbmRvIGFzc2lnbm1lbnRzIG1hZGUgZnJvbSB0aGUgcmVnaW9uIGJlaW5nIGFkZGVkLiAqL1xuIDg5MjpcdFx0XHRpbnQgaTtcbiA4OTM6XHRcbiA4OTQ6XHRcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgYzsgaSYjNDM7JiM0MzspIHtcbiA4OTU6XHRcdFx0XHR2Y3B1ID0ga3ZtX2dldF92Y3B1KGt2bSwgaSk7XG4gODk2Olx0XHRcdFx0dmdpY19yb2xsYmFja19yZWRpc3RfaW9kZXYodmNwdSwgcmRyZWcpO1xuIDg5NzpcdFx0XHR9XG4gODk4Olx0XHR9XG4gODk5Olx0XG4gOTAwOlx0XHRyZXR1cm4gcmV0O1xuIDkwMTpcdH1cbiA5MDI6XHRcbiA5MDM6XHQvKipcbiA5MDQ6XHQgKiB2Z2ljX3YzX2FsbG9jX3JlZGlzdF9yZWdpb24gLSBBbGxvY2F0ZSBhIG5ldyByZWRpc3RyaWJ1dG9yIHJlZ2lvblxuIDkwNTpcdCAqXG4gOTA2Olx0ICogUGVyZm9ybXMgdmFyaW91cyBjaGVja3MgYmVmb3JlIGluc2VydGluZyB0aGUgcmRpc3QgcmVnaW9uIGluIHRoZSBsaXN0LlxuIDkwNzpcdCAqIFRob3NlIHRlc3RzIGRlcGVuZCBvbiB3aGV0aGVyIHRoZSBzaXplIG9mIHRoZSByZGlzdCByZWdpb24gaXMga25vd25cbiA5MDg6XHQgKiAoaWUuIGNvdW50ICE9IDApLiBUaGUgbGlzdCBpcyBzb3J0ZWQgYnkgcmRpc3QgcmVnaW9uIGluZGV4LlxuIDkwOTpcdCAqXG4gOTEwOlx0ICogQGt2bToga3ZtIGhhbmRsZVxuIDkxMTpcdCAqIEBpbmRleDogcmVkaXN0IHJlZ2lvbiBpbmRleFxuIDkxMjpcdCAqIEBiYXNlOiBiYXNlIG9mIHRoZSBuZXcgcmRpc3QgcmVnaW9uXG4gOTEzOlx0ICogQGNvdW50OiBudW1iZXIgb2YgcmVkaXN0cmlidXRvcnMgdGhlIHJlZ2lvbiBpcyBtYWRlIG9mICgwIGluIHRoZSBvbGQgc3R5bGVcbiA5MTQ6XHQgKiBzaW5nbGUgcmVnaW9uLCB3aG9zZSBzaXplIGlzIGluZHVjZWQgZnJvbSB0aGUgbnVtYmVyIG9mIHZjcHVzKVxuIDkxNTpcdCAqXG4gOTE2Olx0ICogUmV0dXJuIDAgb24gc3VjY2VzcywgXHUwMDNjIDAgb3RoZXJ3aXNlXG4gOTE3Olx0ICovXG4gOTE4Olx0c3RhdGljIGludCB2Z2ljX3YzX2FsbG9jX3JlZGlzdF9yZWdpb24oc3RydWN0IGt2bSAqa3ZtLCB1aW50MzJfdCBpbmRleCxcbiA5MTk6XHRcdFx0XHRcdCAgICAgICBncGFfdCBiYXNlLCB1aW50MzJfdCBjb3VudClcbiA5MjA6XHR7XG4gOTIxOlx0XHRzdHJ1Y3QgdmdpY19kaXN0ICpkID0gXHUwMDI2a3ZtLVx1MDAzZWFyY2gudmdpYztcbiA5MjI6XHRcdHN0cnVjdCB2Z2ljX3JlZGlzdF9yZWdpb24gKnJkcmVnO1xuIDkyMzpcdFx0c3RydWN0IGxpc3RfaGVhZCAqcmRfcmVnaW9ucyA9IFx1MDAyNmQtXHUwMDNlcmRfcmVnaW9ucztcbiA5MjQ6XHRcdGludCBucl92Y3B1cyA9IGF0b21pY19yZWFkKFx1MDAyNmt2bS1cdTAwM2VvbmxpbmVfdmNwdXMpO1xuIDkyNTpcdFx0c2l6ZV90IHNpemUgPSBjb3VudCA/IGNvdW50ICogS1ZNX1ZHSUNfVjNfUkVESVNUX1NJWkVcbiA5MjY6XHRcdFx0XHQgICAgOiBucl92Y3B1cyAqIEtWTV9WR0lDX1YzX1JFRElTVF9TSVpFO1xuIDkyNzpcdFx0aW50IHJldDtcbiA5Mjg6XHRcbiA5Mjk6XHRcdC8qIGNyb3NzIHRoZSBlbmQgb2YgbWVtb3J5ID8gKi9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMDg6Mjc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTEzMDYKCQkJCQkJCW91dHB1dDogMTQ1CgkJCQkJCQl0aG91Z2h0czogNzAwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlBhdGNoIEFuYWx5c2lzOiBWR0lDIFJlZGlzdHJpYnV0b3IgUmVnaXN0cmF0aW9uIEVycm9yIEhhbmRsaW5nKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBncmFzcCB0aGUgY29yZSBjb25jZXB0dWFsIGNoYW5nZSB0aGlzIHBhdGNoIGludHJvZHVjZXMuIEl0IGxvb2tzIGxpa2UgaXQmIzM5O3MgYWRkcmVzc2luZyBhIGNyaXRpY2FsIGZsYXcgaW4gdGhlIGVycm9yIGhhbmRsaW5nIGZvciByZWdpc3RlcmluZyByZWRpc3RyaWJ1dG9yIE1NSU8gZGV2aWNlcyB3aXRoaW4gdGhlIEtWTSBWR0lDIHYzIGltcGxlbWVudGF0aW9uLCBzcGVjaWZpY2FsbHkgb24gYXJtNjQuIFByZXZpb3VzbHksIHRoZXJlIHdhcyBhIHByb2JsZW0gd2l0aCB0aGUgb3JkZXIgb2Ygb3BlcmF0aW9ucyB3aGVuIHJlZ2lzdGVyaW5nIHRoZXNlIGBpb2RldnNgLiBUaGUgaW5jcmVtZW50IG9mIGByZHJlZy0mZ3Q7ZnJlZV9pbmRleGAgd2FzIGhhcHBlbmluZyAqYWZ0ZXIqIHRoZSBwb3RlbnRpYWxseSBmYWlsaW5nIGBrdm1faW9fYnVzX3JlZ2lzdGVyX2RldmAgY2FsbC4gVGhpcyBsZWZ0IHRoaW5ncyBpbiBhIG1lc3N5IHN0YXRlIGlmIHRoZSByZWdpc3RyYXRpb24gZmFpbGVkIG9yIGlmIHNvbWV0aGluZyB3ZW50IHdyb25nIGxhdGVyIGluIHRoZSBgdmdpY19yZWdpc3Rlcl9hbGxfcmVkaXN0X2lvZGV2c2AgcHJvY2Vzcy4KClRoZSBwYXRjaCBzZWVtcyB0byBjbGVhbiB1cCB0aGUgbG9naWMgYXJvdW5kIHRoYXQgZmFpbHVyZSwgd2l0aCB0aGVzZSBrZXkgY2hhbmdlczogYHZnaWNfdW5kb19yZWRpc3RfYXNzaWdubWVudGAgbm93IGNvcnJlY3RseSByZXNldHMgYHJkcmVnLSZndDtmcmVlX2luZGV4YCwgaXQgYWxzbyBjbGVhcnMgYHZnaWNfY3B1LSZndDtyZHJlZ2AgYW5kIGB2Z2ljX2NwdS0mZ3Q7cmRfaW9kZXYuYmFzZV9hZGRyYC4gVGhlIHBhdGNoIGFsc28gZW5zdXJlcyB0aGF0IGB2Z2ljX3JvbGxiYWNrX3JlZGlzdF9pb2RldmAgb25seSB1bnJlZ2lzdGVycyBhbmQgcmVzZXRzIHN0YXRlIGlmIHRoZSBgdmdpY19jcHUtJmd0O3JkcmVnYCBtYXRjaGVzIHRoZSBjdXJyZW50IGByZHJlZ2AuIFRoZSBjYWxscyB0byBgdmdpY19yZWdpc3Rlcl9hbGxfcmVkaXN0X2lvZGV2c2AgYW5kIGB2Z2ljX3YzX3NldF9yZWRpc3RfYmFzZWAgYXJlIGFsc28gdXBkYXRlZCB0byBwYXNzIGByZHJlZ2AsIHdoaWNoIG1ha2VzIHNlbnNlIGZvciB0aGUgY29ycmVjdCBiZWhhdmlvci4KCk5vdywgbGV0JiMzOTtzIGdldCBpbnRvIHRoZSBuaXR0eS1ncml0dHkuIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhpcyBwYXRjaCBpc24mIzM5O3QgaW50cm9kdWNpbmcgYW55IG5ldyB2dWxuZXJhYmlsaXRpZXMgb3Igd2Vha25lc3NlcywgZXNwZWNpYWxseSByZWxhdGVkIHRvIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBwb3RlbnRpYWwgaW5mb3JtYXRpb24gbGVha3MsIGFuZCBnZW5lcmFsIG1lbW9yeSBzYWZldHkuIEkmIzM5O20gZm9jdXNpbmcgb24gdXNlciBzcGFjZSBpbnRlcmFjdGlvbnMsIGRhdGEgc3RydWN0dXJlIGluaXRpYWxpemF0aW9uLCBhbmQgdGhlIHVzdWFsIHN1c3BlY3RzLiBJIGNhbiBzZWUgdGhhdCB0aGUgY2hhbmdlcyBkb24mIzM5O3QgY29weSBtZW1vcnkgdG8gdXNlciBzcGFjZSwgbm8gbmV3IHVuaW5pdGlhbGl6ZWQgc3RydWN0dXJlcyBvciBmaWVsZHMgYXJlIGludHJvZHVjZWQsIGFuZCBubyBicmFuY2hlcyBhcmUgYmFzZWQgb24gdW5pbml0aWFsaXplZCBkYXRhLiBUaGVzZSBhcmUgZ29vZCBzaWducy4KClRoZSBtYWluIGlzc3VlIGhlcmUgaXMgYSBsb2dpYyBidWcgYW5kIGEgY2xlYW51cCBpc3N1ZS4gSXQmIzM5O3MgYW4gZXJyb3IgaGFuZGxpbmcgYW5kIHN0YXRlIG1hbmFnZW1lbnQgcHJvYmxlbSDigJMgYSBmYWlsZWQgcmVnaXN0cmF0aW9uIHRoYXQgd2FzIGxlYWRpbmcgdG8gYW4gaW5jb25zaXN0ZW50IHN0YXRlLiBObyBuZXcgbWVtb3J5IGFsbG9jYXRpb25zIHdlcmUgaW50cm9kdWNlZCwgd2hpY2ggZnVydGhlciByZWR1Y2VzIGFueSB3b3JyaWVzIG9mIG1lbW9yeSBpc3N1ZXMuCgpUaGUgcXVlc3Rpb24gb2YgS01TQU4gKEtlcm5lbCBNZW1vcnkgU2FuaXRpemVyKSBpcyBwYXJhbW91bnQsIG9mIGNvdXJzZS4gSSBuZWVkIHRvIGNhcmVmdWxseSBhc3Nlc3MgaWYgdGhpcyBwYXRjaCB3YXJyYW50cyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uIFRoZSBndWlkZWxpbmVzIGFyZSBjbGVhcjogdW5sZXNzIHRoZSBwYXRjaCBpbnRyb2R1Y2VzICpzcGVjaWZpY2FsbHkqIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIHRoYXQgS01TQU4gaXMgbmVlZGVkIHRvIGRldGVjdCwgd2UgZG9uJiMzOTt0IG5lZWQgS01TQU4uIEJhc2VkIG9uIG15IHJldmlldywgdGhhdCYjMzk7cyBub3QgdGhlIGNhc2UgaGVyZS4KCjEuICBUaGlzIHBhdGNoIGlzbiYjMzk7dCBpbnRyb2R1Y2luZyBhIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KMi4gIEl04oCZcyBwcmltYXJpbHkgZml4aW5nIGVycm9yIGhhbmRsaW5nIGFuZCBjbGVhbnVwIGxvZ2ljIGZvciB0aGUgZXhpc3RpbmcgS1ZNIFZHSUMgcmVkaXN0cmlidXRvciByZWdpc3RyYXRpb24sIGFuZCBpbXByb3Zpbmcgc3RhdGUgY29uc2lzdGVuY3kuCjMuICBFdmVyeXRoaW5nIHRoZSBwYXRjaCB0b3VjaGVzIGFuZCBtb2RpZmllcyBhcmUgaW5pdGlhbGl6ZWQgcG9pbnRlcnMgYW5kIGZpZWxkcyBvbiBleGlzdGluZyBzdHJ1Y3Qga3ZtLCBrdm1cX3ZjcHUsIGFuZCB2Z2ljIHN0cnVjdHVyZXMuCgpUaGVyZWZvcmUsIGBOZWVkc0tNU0FOID0gZmFsc2VgLiBJIG5lZWQgdG8gZG9jdW1lbnQgdGhpcyByZWFzb25pbmcgdGhvcm91Z2hseSwgdGhvdWdoLCBhbmQgSSBuZWVkIHRvIGRvIGEgdGhvcm91Z2ggc2FuaXR5IGNoZWNrIHRvIG1ha2UgY2VydGFpbiBJIGhhdmVuJiMzOTt0IG1pc3NlZCBhbnl0aGluZy4gSSYjMzk7bSBxdWl0ZSBjb25maWRlbnQgdGhhdCB0aGlzIHBhdGNoIGlzIHNhZmUsIGJ1dCB0aGVyZSYjMzk7cyBubyByZWFzb24gdG8gcnVzaCBoZXJlLiBJJiMzOTtsbCB0YWtlIGEgY29tcHJlaGVuc2l2ZSBsb29rIGF0IHRoZSBvdmVyYWxsIGNvbnRleHQsIHRoZSBvcmlnaW5hbCBkZXNpZ24sIHRoZSBwcm9ibGVtLCBhbmQgdGhlIHNvbHV0aW9uIHRvIGVuc3VyZSBJIHVuZGVyc3RhbmQgaXQgaW5zaWRlIGFuZCBvdXQuIFRoZW4gSSYjMzk7bGwgd3JpdGUgdXAgYSBkZXRhaWxlZCBleHBsYW5hdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMDg6Mjc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgZXJyb3Igcm9sbGJhY2sgaGFuZGxpbmcgZHVyaW5nIEtWTSBBUk02NCBWR0lDdjMgcmVkaXN0cmlidXRvciBpb2RldiByZWdpc3RyYXRpb24gKGhhbmRsaW5nIGZhaWxlZCByZWdpc3RyYXRpb24gY2xlYW51cCwgcmVzZXR0aW5nIHZnaWNfY3B1IHJlZGlzdHJpYnV0b3IgcG9pbnRlcnMsIGFuZCBkZWNyZW1lbnRpbmcgZnJlZV9pbmRleCBhcHByb3ByaWF0ZWx5KS4gVGhlIGNoYW5nZXMgZG8gbm90IGludHJvZHVjZSBvciBtb2RpZnkgYW55IG1lbW9yeSBhbGxvY2F0aW9ucywgZGF0YSBzdHJ1Y3R1cmVzIGNvcGllZCB0byB1c2Vyc3BhY2UsIG9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFjY2Vzc2VzLiBBbnkgcG90ZW50aWFsIGNvbmN1cnJlbmN5LCBsb2NrIG9yZGVyaW5nLCBvciBpbnZhbGlkIGRlcmVmZXJlbmNlIGlzc3VlcyBhcmUgY292ZXJlZCBieSBzdGFuZGFyZCBzYW5pdGl6ZXJzIChMT0NLREVQL0tBU0FOKS4gVGhlcmVmb3JlLCB0aGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGluZm9ybWF0aW9uIGxlYWtzIHRoYXQgd291bGQgcmVxdWlyZSBhIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGVycm9yIHJvbGxiYWNrIGhhbmRsaW5nIGR1cmluZyBLVk0gQVJNNjQgVkdJQ3YzIHJlZGlzdHJpYnV0b3IgaW9kZXYgcmVnaXN0cmF0aW9uIChoYW5kbGluZyBmYWlsZWQgcmVnaXN0cmF0aW9uIGNsZWFudXAsIHJlc2V0dGluZyB2Z2ljX2NwdSByZWRpc3RyaWJ1dG9yIHBvaW50ZXJzLCBhbmQgZGVjcmVtZW50aW5nIGZyZWVfaW5kZXggYXBwcm9wcmlhdGVseSkuIFRoZSBjaGFuZ2VzIGRvIG5vdCBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IGFueSBtZW1vcnkgYWxsb2NhdGlvbnMsIGRhdGEgc3RydWN0dXJlcyBjb3BpZWQgdG8gdXNlcnNwYWNlLCBvciB1bmluaXRpYWxpemVkIG1lbW9yeSBhY2Nlc3Nlcy4gQW55IHBvdGVudGlhbCBjb25jdXJyZW5jeSwgbG9jayBvcmRlcmluZywgb3IgaW52YWxpZCBkZXJlZmVyZW5jZSBpc3N1ZXMgYXJlIGNvdmVyZWQgYnkgc3RhbmRhcmQgc2FuaXRpemVycyAoTE9DS0RFUC9LQVNBTikuIFRoZXJlZm9yZSwgdGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBpbmZvcm1hdGlvbiBsZWFrcyB0aGF0IHdvdWxkIHJlcXVpcmUgYSBLTVNBTiBmdXp6aW5nIHNlc3Npb24uJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDA4OjI2OjI0LjUyNjI0NDAwMloiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk0MzQxMjYyOTg0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIktWTVwiLFxuICAgIFwiVklSVFVBTElaQVRJT05cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ2Z2ljX3YzX3NldF9yZWRpc3RfYmFzZVwiLFxuICAgIFwidmdpY19yZWdpc3Rlcl9yZWRpc3RfaW9kZXZcIixcbiAgICBcInZnaWNfdW5yZWdpc3Rlcl9yZWRpc3RfaW9kZXZcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGVycm9yIHJvbGxiYWNrIGhhbmRsaW5nIGR1cmluZyBLVk0gQVJNNjQgVkdJQ3YzIHJlZGlzdHJpYnV0b3IgaW9kZXYgcmVnaXN0cmF0aW9uIChoYW5kbGluZyBmYWlsZWQgcmVnaXN0cmF0aW9uIGNsZWFudXAsIHJlc2V0dGluZyB2Z2ljX2NwdSByZWRpc3RyaWJ1dG9yIHBvaW50ZXJzLCBhbmQgZGVjcmVtZW50aW5nIGZyZWVfaW5kZXggYXBwcm9wcmlhdGVseSkuIFRoZSBjaGFuZ2VzIGRvIG5vdCBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IGFueSBtZW1vcnkgYWxsb2NhdGlvbnMsIGRhdGEgc3RydWN0dXJlcyBjb3BpZWQgdG8gdXNlcnNwYWNlLCBvciB1bmluaXRpYWxpemVkIG1lbW9yeSBhY2Nlc3Nlcy4gQW55IHBvdGVudGlhbCBjb25jdXJyZW5jeSwgbG9jayBvcmRlcmluZywgb3IgaW52YWxpZCBkZXJlZmVyZW5jZSBpc3N1ZXMgYXJlIGNvdmVyZWQgYnkgc3RhbmRhcmQgc2FuaXRpemVycyAoTE9DS0RFUC9LQVNBTikuIFRoZXJlZm9yZSwgdGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBpbmZvcm1hdGlvbiBsZWFrcyB0aGF0IHdvdWxkIHJlcXVpcmUgYSBLTVNBTiBmdXp6aW5nIHNlc3Npb24uXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgZXJyb3IgdW53aW5kaW5nIGFuZCByb2xsYmFjayBoYW5kbGluZyB3aGVuIHJlZ2lzdGVyaW5nIFZHSUN2MyByZWRpc3RyaWJ1dG9yIEkvTyBkZXZpY2VzIGluIEFSTTY0IEtWTS4gSXQgZW5zdXJlcyB0aGF0IGZhaWxlZCByZWRpc3RyaWJ1dG9yIHJlZ2lzdHJhdGlvbiBwcm9wZXJseSByb2xscyBiYWNrIHRoZSBhc3NpZ25lZCByZWdpb24gc3RhdGUgYW5kIG9ubHkgdGVhcnMgZG93biBWQ1BVcyBhc3NvY2lhdGVkIHdpdGggdGhlIGZhaWxpbmcgcmVnaW9uLiBUaGVzZSBjb2RlIHBhdGhzIGFyZSByZWFjaGFibGUgdmlhIEtWTSBpb2N0bHMgYW5kIHdvcnRoIGZ1enppbmcgZm9yIGNvbmN1cnJlbmN5IGFuZCBzdGF0ZSBtYW5hZ2VtZW50IGJ1Z3MuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDA4OjI2OjI0LjUyNjI0ODM2MloiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzkzMDQxODQyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgYWM4ZmM3YTU0Y2YxNzIyMjc0YzgzNDJjZjFmMDg2MmExNDU5OWI2OFxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgTW9uIEF1ZyAzMSAwODoyNjoyMyAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtbW1pby12My5jIGIvYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLW1taW8tdjMuY1xcbmluZGV4IDU5MTNhMjBkODMwMTkuLjc3YWE4NDMzNzAxYTEgMTAwNjQ0XFxuLS0tIGEvYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLW1taW8tdjMuY1xcbisrKyBiL2FyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1tbWlvLXYzLmNcXG5AQCAtNzY2LDYgKzc2NiwxOSBAQCB1bnNpZ25lZCBpbnQgdmdpY192M19pbml0X2Rpc3RfaW9kZXYoc3RydWN0IHZnaWNfaW9fZGV2aWNlICpkZXYpXFxuIFxcdHJldHVybiBTWl82NEs7XFxuIH1cXG4gXFxuK3N0YXRpYyB2b2lkIHZnaWNfdW5kb19yZWRpc3RfYXNzaWdubWVudChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuK3tcXG4rXFx0c3RydWN0IHZnaWNfY3B1ICp2Z2ljX2NwdSA9IFxcdTAwMjZ2Y3B1LVxcdTAwM2VhcmNoLnZnaWNfY3B1O1xcbitcXG4rXFx0bG9ja2RlcF9hc3NlcnRfaGVsZChcXHUwMDI2dmNwdS1cXHUwMDNla3ZtLVxcdTAwM2VzbG90c19sb2NrKTtcXG4rXFxuK1xcdGd1YXJkKG11dGV4KShcXHUwMDI2dmNwdS1cXHUwMDNla3ZtLVxcdTAwM2VhcmNoLmNvbmZpZ19sb2NrKTtcXG4rXFxuK1xcdHZnaWNfY3B1LVxcdTAwM2VyZHJlZy1cXHUwMDNlZnJlZV9pbmRleC0tO1xcbitcXHR2Z2ljX2NwdS1cXHUwMDNlcmRyZWcgPSBOVUxMO1xcbitcXHR2Z2ljX2NwdS1cXHUwMDNlcmRfaW9kZXYuYmFzZV9hZGRyID0gVkdJQ19BRERSX1VOREVGO1xcbit9XFxuK1xcbiAvKipcXG4gICogdmdpY19yZWdpc3Rlcl9yZWRpc3RfaW9kZXYgLSByZWdpc3RlciBhIHNpbmdsZSByZWRpc3QgaW9kZXZcXG4gICogQHZjcHU6ICAgIFRoZSBWQ1BVIHRvIHdoaWNoIHRoZSByZWRpc3RyaWJ1dG9yIGJlbG9uZ3NcXG5AQCAtODE4LDE2ICs4MzEsMTcgQEAgaW50IHZnaWNfcmVnaXN0ZXJfcmVkaXN0X2lvZGV2KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4gXFx0cmRfZGV2LVxcdTAwM2Vucl9yZWdpb25zID0gQVJSQVlfU0laRSh2Z2ljX3YzX3JkX3JlZ2lzdGVycyk7XFxuIFxcdHJkX2Rldi1cXHUwMDNlcmVkaXN0X3ZjcHUgPSB2Y3B1O1xcbiBcXG4rXFx0LyogUHJvdGVjdGVkIGJ5IHNsb3RzX2xvY2sgKi9cXG4rXFx0cmRyZWctXFx1MDAzZWZyZWVfaW5kZXgrKztcXG4rXFxuIFxcdG11dGV4X3VubG9jayhcXHUwMDI2a3ZtLVxcdTAwM2VhcmNoLmNvbmZpZ19sb2NrKTtcXG4gXFxuIFxcdHJldCA9IGt2bV9pb19idXNfcmVnaXN0ZXJfZGV2KGt2bSwgS1ZNX01NSU9fQlVTLCByZF9iYXNlLFxcbiBcXHRcXHRcXHRcXHQgICAgICAyICogU1pfNjRLLCBcXHUwMDI2cmRfZGV2LVxcdTAwM2VkZXYpO1xcbiBcXHRpZiAocmV0KVxcbi1cXHRcXHRyZXR1cm4gcmV0O1xcbitcXHRcXHR2Z2ljX3VuZG9fcmVkaXN0X2Fzc2lnbm1lbnQodmNwdSk7XFxuIFxcbi1cXHQvKiBQcm90ZWN0ZWQgYnkgc2xvdHNfbG9jayAqL1xcbi1cXHRyZHJlZy1cXHUwMDNlZnJlZV9pbmRleCsrO1xcbi1cXHRyZXR1cm4gMDtcXG4rXFx0cmV0dXJuIHJldDtcXG4gXFxuIG91dF91bmxvY2s6XFxuIFxcdG11dGV4X3VubG9jayhcXHUwMDI2a3ZtLVxcdTAwM2VhcmNoLmNvbmZpZ19sb2NrKTtcXG5AQCAtODQxLDcgKzg1NSwyNSBAQCB2b2lkIHZnaWNfdW5yZWdpc3Rlcl9yZWRpc3RfaW9kZXYoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbiBcXHRrdm1faW9fYnVzX3VucmVnaXN0ZXJfZGV2KHZjcHUtXFx1MDAzZWt2bSwgS1ZNX01NSU9fQlVTLCBcXHUwMDI2cmRfZGV2LVxcdTAwM2VkZXYpO1xcbiB9XFxuIFxcbi1zdGF0aWMgaW50IHZnaWNfcmVnaXN0ZXJfYWxsX3JlZGlzdF9pb2RldnMoc3RydWN0IGt2bSAqa3ZtKVxcbitzdGF0aWMgdm9pZCB2Z2ljX3JvbGxiYWNrX3JlZGlzdF9pb2RldihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXFxuK1xcdFxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgdmdpY19yZWRpc3RfcmVnaW9uICpyZHJlZylcXG4re1xcbitcXHRzdHJ1Y3QgdmdpY19jcHUgKnZnaWNfY3B1ID0gXFx1MDAyNnZjcHUtXFx1MDAzZWFyY2gudmdpY19jcHU7XFxuK1xcbitcXHRsb2NrZGVwX2Fzc2VydF9oZWxkKFxcdTAwMjZ2Y3B1LVxcdTAwM2Vrdm0tXFx1MDAzZXNsb3RzX2xvY2spO1xcbitcXG4rXFx0aWYgKHZnaWNfY3B1LVxcdTAwM2VyZHJlZyAhPSByZHJlZylcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0dmdpY191bnJlZ2lzdGVyX3JlZGlzdF9pb2Rldih2Y3B1KTtcXG4rXFxuK1xcdGd1YXJkKG11dGV4KShcXHUwMDI2dmNwdS1cXHUwMDNla3ZtLVxcdTAwM2VhcmNoLmNvbmZpZ19sb2NrKTtcXG4rXFx0dmdpY19jcHUtXFx1MDAzZXJkcmVnID0gTlVMTDtcXG4rXFx0dmdpY19jcHUtXFx1MDAzZXJkX2lvZGV2LmJhc2VfYWRkciA9IFZHSUNfQUREUl9VTkRFRjtcXG4rfVxcbitcXG4rc3RhdGljIGludCB2Z2ljX3JlZ2lzdGVyX2FsbF9yZWRpc3RfaW9kZXZzKHN0cnVjdCBrdm0gKmt2bSxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgc3RydWN0IHZnaWNfcmVkaXN0X3JlZ2lvbiAqcmRyZWcpXFxuIHtcXG4gXFx0c3RydWN0IGt2bV92Y3B1ICp2Y3B1O1xcbiBcXHR1bnNpZ25lZCBsb25nIGM7XFxuQEAgLTg1NiwxMiArODg4LDEyIEBAIHN0YXRpYyBpbnQgdmdpY19yZWdpc3Rlcl9hbGxfcmVkaXN0X2lvZGV2cyhzdHJ1Y3Qga3ZtICprdm0pXFxuIFxcdH1cXG4gXFxuIFxcdGlmIChyZXQpIHtcXG4tXFx0XFx0LyogVGhlIGN1cnJlbnQgYyBmYWlsZWQsIHNvIGl0ZXJhdGUgb3ZlciB0aGUgcHJldmlvdXMgb25lcy4gKi9cXG4rXFx0XFx0LyogVW5kbyBhc3NpZ25tZW50cyBtYWRlIGZyb20gdGhlIHJlZ2lvbiBiZWluZyBhZGRlZC4gKi9cXG4gXFx0XFx0aW50IGk7XFxuIFxcbiBcXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgYzsgaSsrKSB7XFxuIFxcdFxcdFxcdHZjcHUgPSBrdm1fZ2V0X3ZjcHUoa3ZtLCBpKTtcXG4tXFx0XFx0XFx0dmdpY191bnJlZ2lzdGVyX3JlZGlzdF9pb2Rldih2Y3B1KTtcXG4rXFx0XFx0XFx0dmdpY19yb2xsYmFja19yZWRpc3RfaW9kZXYodmNwdSwgcmRyZWcpO1xcbiBcXHRcXHR9XFxuIFxcdH1cXG4gXFxuQEAgLTk3MCwxMCArMTAwMiwxMyBAQCB2b2lkIHZnaWNfdjNfZnJlZV9yZWRpc3RfcmVnaW9uKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IHZnaWNfcmVkaXN0X3JlZ2lvbiAqcmRyZVxcbiBcXG4gaW50IHZnaWNfdjNfc2V0X3JlZGlzdF9iYXNlKHN0cnVjdCBrdm0gKmt2bSwgdTMyIGluZGV4LCB1NjQgYWRkciwgdTMyIGNvdW50KVxcbiB7XFxuK1xcdHN0cnVjdCB2Z2ljX3JlZGlzdF9yZWdpb24gKnJkcmVnO1xcbiBcXHRpbnQgcmV0O1xcbiBcXG4gXFx0bXV0ZXhfbG9jayhcXHUwMDI2a3ZtLVxcdTAwM2VhcmNoLmNvbmZpZ19sb2NrKTtcXG4gXFx0cmV0ID0gdmdpY192M19hbGxvY19yZWRpc3RfcmVnaW9uKGt2bSwgaW5kZXgsIGFkZHIsIGNvdW50KTtcXG4rXFx0aWYgKCFyZXQpXFxuK1xcdFxcdHJkcmVnID0gdmdpY192M19yZGlzdF9yZWdpb25fZnJvbV9pbmRleChrdm0sIGluZGV4KTtcXG4gXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZrdm0tXFx1MDAzZWFyY2guY29uZmlnX2xvY2spO1xcbiBcXHRpZiAocmV0KVxcbiBcXHRcXHRyZXR1cm4gcmV0O1xcbkBAIC05ODIsMTIgKzEwMTcsOSBAQCBpbnQgdmdpY192M19zZXRfcmVkaXN0X2Jhc2Uoc3RydWN0IGt2bSAqa3ZtLCB1MzIgaW5kZXgsIHU2NCBhZGRyLCB1MzIgY291bnQpXFxuIFxcdCAqIFJlZ2lzdGVyIGlvZGV2cyBmb3IgZWFjaCBleGlzdGluZyBWQ1BVLiAgQWRkaW5nIG1vcmUgVkNQVXNcXG4gXFx0ICogYWZ0ZXJ3YXJkcyB3aWxsIHJlZ2lzdGVyIHRoZSBpb2RldnMgd2hlbiBuZWVkZWQuXFxuIFxcdCAqL1xcbi1cXHRyZXQgPSB2Z2ljX3JlZ2lzdGVyX2FsbF9yZWRpc3RfaW9kZXZzKGt2bSk7XFxuK1xcdHJldCA9IHZnaWNfcmVnaXN0ZXJfYWxsX3JlZGlzdF9pb2RldnMoa3ZtLCByZHJlZyk7XFxuIFxcdGlmIChyZXQpIHtcXG4tXFx0XFx0c3RydWN0IHZnaWNfcmVkaXN0X3JlZ2lvbiAqcmRyZWc7XFxuLVxcbiBcXHRcXHRtdXRleF9sb2NrKFxcdTAwMjZrdm0tXFx1MDAzZWFyY2guY29uZmlnX2xvY2spO1xcbi1cXHRcXHRyZHJlZyA9IHZnaWNfdjNfcmRpc3RfcmVnaW9uX2Zyb21faW5kZXgoa3ZtLCBpbmRleCk7XFxuIFxcdFxcdHZnaWNfdjNfZnJlZV9yZWRpc3RfcmVnaW9uKGt2bSwgcmRyZWcpO1xcbiBcXHRcXHRtdXRleF91bmxvY2soXFx1MDAyNmt2bS1cXHUwMDNlYXJjaC5jb25maWdfbG9jayk7XFxuIFxcdFxcdHJldHVybiByZXQ7XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9hcm02NC92Z2ljX2luaXQuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9hcm02NC92Z2ljX2luaXQuY1xcbmluZGV4IDQ3ZTM0YjQzYWZiMjkuLjVhMzBmM2NiMDM5YmUgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2FybTY0L3ZnaWNfaW5pdC5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2FybTY0L3ZnaWNfaW5pdC5jXFxuQEAgLTUsNiArNSw3IEBAXFxuICAqIENvcHlyaWdodCAoQykgMjAyMCwgUmVkIEhhdCwgSW5jLlxcbiAgKi9cXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2tlcm5lbC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvc2l6ZXMuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY3N5cy9zeXNjYWxsLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2Nhc20va3ZtLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2Nhc20va3ZtX3BhcmEuaFxcdTAwM2VcXG5AQCAtMTMsMTIgKzE0LDIxIEBAXFxuIFxcbiAjaW5jbHVkZSBcXFwidGVzdF91dGlsLmhcXFwiXFxuICNpbmNsdWRlIFxcXCJrdm1fdXRpbC5oXFxcIlxcbisjaW5jbHVkZSBcXFwiZ2ljLmhcXFwiXFxuICNpbmNsdWRlIFxcXCJwcm9jZXNzb3IuaFxcXCJcXG4gI2luY2x1ZGUgXFxcInZnaWMuaFxcXCJcXG4gI2luY2x1ZGUgXFxcImdpY192My5oXFxcIlxcbiBcXG4gI2RlZmluZSBOUl9WQ1BVU1xcdFxcdDRcXG4gXFxuKyNkZWZpbmUgUkVESVNUX1JFVFJZX1JFR0lPTjBfQkFTRVxcdEdJQ1JfQkFTRV9HUEFcXG4rI2RlZmluZSBSRURJU1RfUkVUUllfUkVHSU9OMV9CQVNFXFx0XFxcXFxcbitcXHQoUkVESVNUX1JFVFJZX1JFR0lPTjBfQkFTRSArIDIgKiBLVk1fVkdJQ19WM19SRURJU1RfU0laRSlcXG4rI2RlZmluZSBSRURJU1RfUkVUUllfRElTVF9CQVNFXFx0XFx0XFxcXFxcbitcXHQoUkVESVNUX1JFVFJZX1JFR0lPTjFfQkFTRSArIEtWTV9WR0lDX1YzX1JFRElTVF9TSVpFKVxcbisjZGVmaW5lIFJFRElTVF9SRVRSWV9SRUdJT04yX0JBU0VcXHRcXFxcXFxuK1xcdChSRURJU1RfUkVUUllfRElTVF9CQVNFICsgS1ZNX1ZHSUNfVjNfRElTVF9TSVpFKVxcbitcXG4gI2RlZmluZSBSRUdfT0ZGU0VUKHZjcHUsIG9mZnNldCkgKCgodTY0KXZjcHUgXFx1MDAzY1xcdTAwM2MgMzIpIHwgb2Zmc2V0KVxcbiBcXG4gI2RlZmluZSBWR0lDX0RFVl9JU19WMihfZCkgKChfZCkgPT0gS1ZNX0RFVl9UWVBFX0FSTV9WR0lDX1YyKVxcbkBAIC02NSw2ICs3NSwyMyBAQCBzdGF0aWMgdm9pZCBndWVzdF9jb2RlKHZvaWQpXFxuIFxcdEdVRVNUX0RPTkUoKTtcXG4gfVxcbiBcXG4rc3RhdGljIHZvaWQgZ3Vlc3RfY2hlY2tfcmVkaXN0X3JldHJ5KHZvaWQpXFxuK3tcXG4rXFx0dW5zaWduZWQgaW50IGk7XFxuK1xcbitcXHQvKiBUaGUgZmlyc3QgdGhyZWUgcmVkaXN0cmlidXRvcnMgc3BhbiBhZGphY2VudCByZWdpb25zIDAgYW5kIDEuICovXFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBOUl9WQ1BVUzsgaSsrKSB7XFxuK1xcdFxcdHU2NCBiYXNlID0gaSBcXHUwMDNjIDMgPyBSRURJU1RfUkVUUllfUkVHSU9OMF9CQVNFICtcXG4rXFx0XFx0XFx0XFx0ICAgICAgIGkgKiBLVk1fVkdJQ19WM19SRURJU1RfU0laRSA6XFxuK1xcdFxcdFxcdFxcdCAgICAgICBSRURJU1RfUkVUUllfUkVHSU9OMl9CQVNFO1xcbitcXHRcXHR1NjQgdHlwZXIgPSByZWFkcSgodm9pZCAqKSh1bnNpZ25lZCBsb25nKShiYXNlICsgR0lDUl9UWVBFUikpO1xcbitcXG4rXFx0XFx0R1VFU1RfQVNTRVJUX0VRKEdJQ1JfVFlQRVJfQ1BVX05VTUJFUih0eXBlciksIGkpO1xcbitcXHR9XFxuK1xcbitcXHRHVUVTVF9ET05FKCk7XFxuK31cXG4rXFxuIC8qIHdlIGRvbid0IHdhbnQgdG8gYXNzZXJ0IG9uIHJ1biBleGVjdXRpb24sIGhlbmNlIHRoYXQgaGVscGVyICovXFxuIHN0YXRpYyBpbnQgcnVuX3ZjcHUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbiB7XFxuQEAgLTczLDYgKzEwMCw3IEBAIHN0YXRpYyBpbnQgcnVuX3ZjcHUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbiBcXG4gc3RhdGljIHN0cnVjdCB2bV9naWMgdm1fZ2ljX2NyZWF0ZV93aXRoX3ZjcHVzKHUzMiBnaWNfZGV2X3R5cGUsXFxuIFxcdFxcdFxcdFxcdFxcdCAgICAgIHUzMiBucl92Y3B1cyxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICAgdm9pZCAqZ3Vlc3RfY29kZSxcXG4gXFx0XFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IGt2bV92Y3B1ICp2Y3B1c1tdKVxcbiB7XFxuIFxcdHN0cnVjdCB2bV9naWMgdjtcXG5AQCAtMzM4LDcgKzM2Niw3IEBAIHN0YXRpYyB2b2lkIHRlc3RfdmdpY190aGVuX3ZjcHVzKHUzMiBnaWNfZGV2X3R5cGUpXFxuIFxcdHN0cnVjdCB2bV9naWMgdjtcXG4gXFx0aW50IHJldCwgaTtcXG4gXFxuLVxcdHYgPSB2bV9naWNfY3JlYXRlX3dpdGhfdmNwdXMoZ2ljX2Rldl90eXBlLCAxLCB2Y3B1cyk7XFxuK1xcdHYgPSB2bV9naWNfY3JlYXRlX3dpdGhfdmNwdXMoZ2ljX2Rldl90eXBlLCAxLCBndWVzdF9jb2RlLCB2Y3B1cyk7XFxuIFxcbiBcXHRzdWJ0ZXN0X2Rpc3RfcmRpc3QoXFx1MDAyNnYpO1xcbiBcXG5AQCAtMzU5LDcgKzM4Nyw4IEBAIHN0YXRpYyB2b2lkIHRlc3RfdmNwdXNfdGhlbl92Z2ljKHUzMiBnaWNfZGV2X3R5cGUpXFxuIFxcdHN0cnVjdCB2bV9naWMgdjtcXG4gXFx0aW50IHJldDtcXG4gXFxuLVxcdHYgPSB2bV9naWNfY3JlYXRlX3dpdGhfdmNwdXMoZ2ljX2Rldl90eXBlLCBOUl9WQ1BVUywgdmNwdXMpO1xcbitcXHR2ID0gdm1fZ2ljX2NyZWF0ZV93aXRoX3ZjcHVzKGdpY19kZXZfdHlwZSwgTlJfVkNQVVMsIGd1ZXN0X2NvZGUsXFxuK1xcdFxcdFxcdFxcdCAgICAgdmNwdXMpO1xcbiBcXG4gXFx0c3VidGVzdF9kaXN0X3JkaXN0KFxcdTAwMjZ2KTtcXG4gXFxuQEAgLTQxMSw3ICs0NDAsOCBAQCBzdGF0aWMgdm9pZCB0ZXN0X3YzX25ld19yZWRpc3RfcmVnaW9ucyh2b2lkKVxcbiBcXHR1NjQgYWRkcjtcXG4gXFx0aW50IHJldDtcXG4gXFxuLVxcdHYgPSB2bV9naWNfY3JlYXRlX3dpdGhfdmNwdXMoS1ZNX0RFVl9UWVBFX0FSTV9WR0lDX1YzLCBOUl9WQ1BVUywgdmNwdXMpO1xcbitcXHR2ID0gdm1fZ2ljX2NyZWF0ZV93aXRoX3ZjcHVzKEtWTV9ERVZfVFlQRV9BUk1fVkdJQ19WMywgTlJfVkNQVVMsXFxuK1xcdFxcdFxcdFxcdCAgICAgZ3Vlc3RfY29kZSwgdmNwdXMpO1xcbiBcXHRzdWJ0ZXN0X3YzX3JlZGlzdF9yZWdpb25zKFxcdTAwMjZ2KTtcXG4gXFx0a3ZtX2RldmljZV9hdHRyX3NldCh2LmdpY19mZCwgS1ZNX0RFVl9BUk1fVkdJQ19HUlBfQ1RSTCxcXG4gXFx0XFx0XFx0ICAgIEtWTV9ERVZfQVJNX1ZHSUNfQ1RSTF9JTklULCBOVUxMKTtcXG5AQCAtNDIyLDcgKzQ1Miw4IEBAIHN0YXRpYyB2b2lkIHRlc3RfdjNfbmV3X3JlZGlzdF9yZWdpb25zKHZvaWQpXFxuIFxcbiBcXHQvKiBzdGVwMiAqL1xcbiBcXG4tXFx0diA9IHZtX2dpY19jcmVhdGVfd2l0aF92Y3B1cyhLVk1fREVWX1RZUEVfQVJNX1ZHSUNfVjMsIE5SX1ZDUFVTLCB2Y3B1cyk7XFxuK1xcdHYgPSB2bV9naWNfY3JlYXRlX3dpdGhfdmNwdXMoS1ZNX0RFVl9UWVBFX0FSTV9WR0lDX1YzLCBOUl9WQ1BVUyxcXG4rXFx0XFx0XFx0XFx0ICAgICBndWVzdF9jb2RlLCB2Y3B1cyk7XFxuIFxcdHN1YnRlc3RfdjNfcmVkaXN0X3JlZ2lvbnMoXFx1MDAyNnYpO1xcbiBcXG4gXFx0YWRkciA9IFJFRElTVF9SRUdJT05fQVRUUl9BRERSKDEsIDB4MjgwMDAwLCAwLCAyKTtcXG5AQCAtNDM2LDcgKzQ2Nyw4IEBAIHN0YXRpYyB2b2lkIHRlc3RfdjNfbmV3X3JlZGlzdF9yZWdpb25zKHZvaWQpXFxuIFxcbiBcXHQvKiBzdGVwIDMgKi9cXG4gXFxuLVxcdHYgPSB2bV9naWNfY3JlYXRlX3dpdGhfdmNwdXMoS1ZNX0RFVl9UWVBFX0FSTV9WR0lDX1YzLCBOUl9WQ1BVUywgdmNwdXMpO1xcbitcXHR2ID0gdm1fZ2ljX2NyZWF0ZV93aXRoX3ZjcHVzKEtWTV9ERVZfVFlQRV9BUk1fVkdJQ19WMywgTlJfVkNQVVMsXFxuK1xcdFxcdFxcdFxcdCAgICAgZ3Vlc3RfY29kZSwgdmNwdXMpO1xcbiBcXHRzdWJ0ZXN0X3YzX3JlZGlzdF9yZWdpb25zKFxcdTAwMjZ2KTtcXG4gXFxuIFxcdHJldCA9IF9fa3ZtX2RldmljZV9hdHRyX3NldCh2LmdpY19mZCwgS1ZNX0RFVl9BUk1fVkdJQ19HUlBfQUREUixcXG5AQCAtNDU3LDYgKzQ4OSw3MCBAQCBzdGF0aWMgdm9pZCB0ZXN0X3YzX25ld19yZWRpc3RfcmVnaW9ucyh2b2lkKVxcbiBcXHR2bV9naWNfZGVzdHJveShcXHUwMDI2dik7XFxuIH1cXG4gXFxuK3N0YXRpYyB2b2lkIHRlc3RfdjNfcmVkaXN0X3JlZ2lvbl9yZXRyeSh2b2lkKVxcbit7XFxuK1xcdHN0cnVjdCBrdm1fdmNwdSAqdmNwdXNbTlJfVkNQVVNdO1xcbitcXHRzdHJ1Y3Qgdm1fZ2ljIHY7XFxuK1xcdHN0cnVjdCB1Y2FsbCB1YztcXG4rXFx0dTY0IGFkZHI7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHR2ID0gdm1fZ2ljX2NyZWF0ZV93aXRoX3ZjcHVzKEtWTV9ERVZfVFlQRV9BUk1fVkdJQ19WMywgTlJfVkNQVVMsXFxuK1xcdFxcdFxcdFxcdCAgICAgZ3Vlc3RfY2hlY2tfcmVkaXN0X3JldHJ5LCB2Y3B1cyk7XFxuK1xcbitcXHRhZGRyID0gUkVESVNUX1JFR0lPTl9BVFRSX0FERFIoMiwgUkVESVNUX1JFVFJZX1JFR0lPTjBfQkFTRSwgMCwgMCk7XFxuK1xcdGt2bV9kZXZpY2VfYXR0cl9zZXQodi5naWNfZmQsIEtWTV9ERVZfQVJNX1ZHSUNfR1JQX0FERFIsXFxuK1xcdFxcdFxcdCAgICBLVk1fVkdJQ19WM19BRERSX1RZUEVfUkVESVNUX1JFR0lPTiwgXFx1MDAyNmFkZHIpO1xcbitcXG4rXFx0YWRkciA9IFJFRElTVF9SRUdJT05fQVRUUl9BRERSKDEsIFJFRElTVF9SRVRSWV9SRUdJT04xX0JBU0UsIDAsIDEpO1xcbitcXHRrdm1fZGV2aWNlX2F0dHJfc2V0KHYuZ2ljX2ZkLCBLVk1fREVWX0FSTV9WR0lDX0dSUF9BRERSLFxcbitcXHRcXHRcXHQgICAgS1ZNX1ZHSUNfVjNfQUREUl9UWVBFX1JFRElTVF9SRUdJT04sIFxcdTAwMjZhZGRyKTtcXG4rXFxuK1xcdGFkZHIgPSBSRURJU1RfUkVUUllfRElTVF9CQVNFO1xcbitcXHRrdm1fZGV2aWNlX2F0dHJfc2V0KHYuZ2ljX2ZkLCBLVk1fREVWX0FSTV9WR0lDX0dSUF9BRERSLFxcbitcXHRcXHRcXHQgICAgS1ZNX1ZHSUNfVjNfQUREUl9UWVBFX0RJU1QsIFxcdTAwMjZhZGRyKTtcXG4rXFxuK1xcdGFkZHIgPSBSRURJU1RfUkVHSU9OX0FUVFJfQUREUigxLCBSRURJU1RfUkVUUllfRElTVF9CQVNFLCAwLCAyKTtcXG4rXFx0cmV0ID0gX19rdm1fZGV2aWNlX2F0dHJfc2V0KHYuZ2ljX2ZkLCBLVk1fREVWX0FSTV9WR0lDX0dSUF9BRERSLFxcbitcXHRcXHRcXHRcXHQgICAgS1ZNX1ZHSUNfVjNfQUREUl9UWVBFX1JFRElTVF9SRUdJT04sXFxuK1xcdFxcdFxcdFxcdCAgICBcXHUwMDI2YWRkcik7XFxuK1xcdFRFU1RfQVNTRVJUKHJldCBcXHUwMDI2XFx1MDAyNiBlcnJubyA9PSBFSU5WQUwsXFxuK1xcdFxcdCAgICBcXFwicmVnaXN0ZXIgcmVkaXN0IHJlZ2lvbiBjb2xsaWRpbmcgd2l0aCBkaXN0XFxcIik7XFxuK1xcbitcXHRhZGRyID0gUkVESVNUX1JFR0lPTl9BVFRSX0FERFIoMSwgUkVESVNUX1JFVFJZX1JFR0lPTjJfQkFTRSwgMCwgMik7XFxuK1xcdGt2bV9kZXZpY2VfYXR0cl9zZXQodi5naWNfZmQsIEtWTV9ERVZfQVJNX1ZHSUNfR1JQX0FERFIsXFxuK1xcdFxcdFxcdCAgICBLVk1fVkdJQ19WM19BRERSX1RZUEVfUkVESVNUX1JFR0lPTiwgXFx1MDAyNmFkZHIpO1xcbitcXG4rXFx0dmlydF9tYXAodi52bSwgUkVESVNUX1JFVFJZX1JFR0lPTjBfQkFTRSwgUkVESVNUX1JFVFJZX1JFR0lPTjBfQkFTRSxcXG4rXFx0XFx0IHZtX2NhbGNfbnVtX2d1ZXN0X3BhZ2VzKHYudm0tXFx1MDAzZW1vZGUsXFxuK1xcdFxcdFxcdFxcdFxcdCAzICogS1ZNX1ZHSUNfVjNfUkVESVNUX1NJWkUpKTtcXG4rXFx0dmlydF9tYXAodi52bSwgUkVESVNUX1JFVFJZX1JFR0lPTjJfQkFTRSwgUkVESVNUX1JFVFJZX1JFR0lPTjJfQkFTRSxcXG4rXFx0XFx0IHZtX2NhbGNfbnVtX2d1ZXN0X3BhZ2VzKHYudm0tXFx1MDAzZW1vZGUsXFxuK1xcdFxcdFxcdFxcdFxcdCBLVk1fVkdJQ19WM19SRURJU1RfU0laRSkpO1xcbitcXG4rXFx0a3ZtX2RldmljZV9hdHRyX3NldCh2LmdpY19mZCwgS1ZNX0RFVl9BUk1fVkdJQ19HUlBfQ1RSTCxcXG4rXFx0XFx0XFx0ICAgIEtWTV9ERVZfQVJNX1ZHSUNfQ1RSTF9JTklULCBOVUxMKTtcXG4rXFxuK1xcdHZjcHVfcnVuKHZjcHVzWzBdKTtcXG4rXFx0c3dpdGNoIChnZXRfdWNhbGwodmNwdXNbMF0sIFxcdTAwMjZ1YykpIHtcXG4rXFx0Y2FzZSBVQ0FMTF9ET05FOlxcbitcXHRcXHRicmVhaztcXG4rXFx0Y2FzZSBVQ0FMTF9BQk9SVDpcXG4rXFx0XFx0UkVQT1JUX0dVRVNUX0FTU0VSVCh1Yyk7XFxuK1xcdFxcdGJyZWFrO1xcbitcXHRjYXNlIFVDQUxMX05PTkU6XFxuK1xcdFxcdGlmICh2Y3B1c1swXS1cXHUwMDNlcnVuLVxcdTAwM2VleGl0X3JlYXNvbiA9PSBLVk1fRVhJVF9NTUlPKVxcbitcXHRcXHRcXHRURVNUX0ZBSUwoXFxcIlVuZXhwZWN0ZWQgTU1JTyBleGl0IGF0IDB4JWxseFxcXCIsXFxuK1xcdFxcdFxcdFxcdCAgdmNwdXNbMF0tXFx1MDAzZXJ1bi1cXHUwMDNlbW1pby5waHlzX2FkZHIpO1xcbitcXHRcXHRmYWxsdGhyb3VnaDtcXG4rXFx0ZGVmYXVsdDpcXG4rXFx0XFx0VEVTVF9GQUlMKFxcXCJVbmV4cGVjdGVkIHVjYWxsICVsdSwgZXhpdF9yZWFzb24gJXVcXFwiLFxcbitcXHRcXHRcXHQgIHVjLmNtZCwgdmNwdXNbMF0tXFx1MDAzZXJ1bi1cXHUwMDNlZXhpdF9yZWFzb24pO1xcbitcXHR9XFxuK1xcbitcXHR2bV9naWNfZGVzdHJveShcXHUwMDI2dik7XFxuK31cXG4rXFxuIHN0YXRpYyB2b2lkIHRlc3RfdjNfdHlwZXJfYWNjZXNzZXModm9pZClcXG4ge1xcbiBcXHRzdHJ1Y3Qgdm1fZ2ljIHY7XFxuQEAgLTYwOCw3ICs3MDQsOCBAQCBzdGF0aWMgdm9pZCB0ZXN0X3YzX3JlZGlzdF9pcGFfcmFuZ2VfY2hlY2tfYXRfdmNwdV9ydW4odm9pZClcXG4gXFx0aW50IHJldCwgaTtcXG4gXFx0dTY0IGFkZHI7XFxuIFxcbi1cXHR2ID0gdm1fZ2ljX2NyZWF0ZV93aXRoX3ZjcHVzKEtWTV9ERVZfVFlQRV9BUk1fVkdJQ19WMywgMSwgdmNwdXMpO1xcbitcXHR2ID0gdm1fZ2ljX2NyZWF0ZV93aXRoX3ZjcHVzKEtWTV9ERVZfVFlQRV9BUk1fVkdJQ19WMywgMSwgZ3Vlc3RfY29kZSxcXG4rXFx0XFx0XFx0XFx0ICAgICB2Y3B1cyk7XFxuIFxcbiBcXHQvKiBTZXQgc3BhY2UgZm9yIDMgcmVkaXN0cywgd2UgaGF2ZSAxIHZjcHUsIHNvIHRoaXMgc3VjY2VlZHMuICovXFxuIFxcdGFkZHIgPSBtYXhfcGh5c19zaXplIC0gKDMgKiAyICogMHgxMDAwMCk7XFxuQEAgLTY0MSw3ICs3MzgsOCBAQCBzdGF0aWMgdm9pZCB0ZXN0X3YzX2l0c19yZWdpb24odm9pZClcXG4gXFx0dTY0IGFkZHI7XFxuIFxcdGludCBpdHNfZmQsIHJldDtcXG4gXFxuLVxcdHYgPSB2bV9naWNfY3JlYXRlX3dpdGhfdmNwdXMoS1ZNX0RFVl9UWVBFX0FSTV9WR0lDX1YzLCBOUl9WQ1BVUywgdmNwdXMpO1xcbitcXHR2ID0gdm1fZ2ljX2NyZWF0ZV93aXRoX3ZjcHVzKEtWTV9ERVZfVFlQRV9BUk1fVkdJQ19WMywgTlJfVkNQVVMsXFxuK1xcdFxcdFxcdFxcdCAgICAgZ3Vlc3RfY29kZSwgdmNwdXMpO1xcbiBcXHRpdHNfZmQgPSBrdm1fY3JlYXRlX2RldmljZSh2LnZtLCBLVk1fREVWX1RZUEVfQVJNX1ZHSUNfSVRTKTtcXG4gXFxuIFxcdGFkZHIgPSAweDQwMTAwMDtcXG5AQCAtNjg0LDcgKzc4Miw4IEBAIHN0YXRpYyB2b2lkIHRlc3RfdjNfbmFzc2dpY2FwKHZvaWQpXFxuIFxcdHUzMiB0eXBlcjI7XFxuIFxcdGludCByZXQ7XFxuIFxcbi1cXHR2bSA9IHZtX2dpY19jcmVhdGVfd2l0aF92Y3B1cyhLVk1fREVWX1RZUEVfQVJNX1ZHSUNfVjMsIE5SX1ZDUFVTLCB2Y3B1cyk7XFxuK1xcdHZtID0gdm1fZ2ljX2NyZWF0ZV93aXRoX3ZjcHVzKEtWTV9ERVZfVFlQRV9BUk1fVkdJQ19WMywgTlJfVkNQVVMsXFxuK1xcdFxcdFxcdFxcdCAgICAgIGd1ZXN0X2NvZGUsIHZjcHVzKTtcXG4gXFx0a3ZtX2RldmljZV9hdHRyX2dldCh2bS5naWNfZmQsIEtWTV9ERVZfQVJNX1ZHSUNfR1JQX0RJU1RfUkVHUyxcXG4gXFx0XFx0XFx0ICAgIEdJQ0RfVFlQRVIyLCBcXHUwMDI2dHlwZXIyKTtcXG4gXFx0aGFzX25hc3NnaWNhcCA9IHR5cGVyMiBcXHUwMDI2IEdJQ0RfVFlQRVIyX25BU1NHSWNhcDtcXG5AQCAtOTc4LDYgKzEwNzcsNyBAQCB2b2lkIHJ1bl90ZXN0cyh1MzIgZ2ljX2Rldl90eXBlKVxcbiBcXG4gXFx0aWYgKFZHSUNfREVWX0lTX1YzKGdpY19kZXZfdHlwZSkpIHtcXG4gXFx0XFx0dGVzdF92M19uZXdfcmVkaXN0X3JlZ2lvbnMoKTtcXG4rXFx0XFx0dGVzdF92M19yZWRpc3RfcmVnaW9uX3JldHJ5KCk7XFxuIFxcdFxcdHRlc3RfdjNfdHlwZXJfYWNjZXNzZXMoKTtcXG4gXFx0XFx0dGVzdF92M19sYXN0X2JpdF9yZWRpc3RfcmVnaW9ucygpO1xcbiBcXHRcXHR0ZXN0X3YzX2xhc3RfYml0X3NpbmdsZV9yZGlzdCgpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQwODoyNjoyNC45MTk4NTUxMTNaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjM0MzU5NjAyMDM4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIktWTVwiLFxuICAgIFwiVklSVFVBTElaQVRJT05cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ2Z2ljX3YzX3NldF9yZWRpc3RfYmFzZVwiLFxuICAgIFwidmdpY19yZWdpc3Rlcl9yZWRpc3RfaW9kZXZcIixcbiAgICBcInZnaWNfdW5yZWdpc3Rlcl9yZWRpc3RfaW9kZXZcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBlcnJvciB1bndpbmRpbmcgYW5kIHJvbGxiYWNrIGhhbmRsaW5nIHdoZW4gcmVnaXN0ZXJpbmcgVkdJQ3YzIHJlZGlzdHJpYnV0b3IgSS9PIGRldmljZXMgaW4gQVJNNjQgS1ZNLiBJdCBlbnN1cmVzIHRoYXQgZmFpbGVkIHJlZGlzdHJpYnV0b3IgcmVnaXN0cmF0aW9uIHByb3Blcmx5IHJvbGxzIGJhY2sgdGhlIGFzc2lnbmVkIHJlZ2lvbiBzdGF0ZSBhbmQgb25seSB0ZWFycyBkb3duIFZDUFVzIGFzc29jaWF0ZWQgd2l0aCB0aGUgZmFpbGluZyByZWdpb24uIFRoZXNlIGNvZGUgcGF0aHMgYXJlIHJlYWNoYWJsZSB2aWEgS1ZNIGlvY3RscyBhbmQgd29ydGggZnV6emluZyBmb3IgY29uY3VycmVuY3kgYW5kIHN0YXRlIG1hbmFnZW1lbnQgYnVncy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgYWM4ZmM3YTU0Y2YxNzIyMjc0YzgzNDJjZjFmMDg2MmExNDU5OWI2OFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gQXVnIDMxIDA4OjI2OjIzIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLW1taW8tdjMuYyBiL2FyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1tbWlvLXYzLmNcbmluZGV4IDU5MTNhMjBkODMwMTkuLjc3YWE4NDMzNzAxYTEgMTAwNjQ0XG4tLS0gYS9hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtbW1pby12My5jXG4rKysgYi9hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtbW1pby12My5jXG5AQCAtNzY2LDYgKzc2NiwxOSBAQCB1bnNpZ25lZCBpbnQgdmdpY192M19pbml0X2Rpc3RfaW9kZXYoc3RydWN0IHZnaWNfaW9fZGV2aWNlICpkZXYpXG4gXHRyZXR1cm4gU1pfNjRLO1xuIH1cbiBcbitzdGF0aWMgdm9pZCB2Z2ljX3VuZG9fcmVkaXN0X2Fzc2lnbm1lbnQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuK3tcbitcdHN0cnVjdCB2Z2ljX2NwdSAqdmdpY19jcHUgPSBcdTAwMjZ2Y3B1LVx1MDAzZWFyY2gudmdpY19jcHU7XG4rXG4rXHRsb2NrZGVwX2Fzc2VydF9oZWxkKFx1MDAyNnZjcHUtXHUwMDNla3ZtLVx1MDAzZXNsb3RzX2xvY2spO1xuK1xuK1x0Z3VhcmQobXV0ZXgpKFx1MDAyNnZjcHUtXHUwMDNla3ZtLVx1MDAzZWFyY2guY29uZmlnX2xvY2spO1xuK1xuK1x0dmdpY19jcHUtXHUwMDNlcmRyZWctXHUwMDNlZnJlZV9pbmRleC0tO1xuK1x0dmdpY19jcHUtXHUwMDNlcmRyZWcgPSBOVUxMO1xuK1x0dmdpY19jcHUtXHUwMDNlcmRfaW9kZXYuYmFzZV9hZGRyID0gVkdJQ19BRERSX1VOREVGO1xuK31cbitcbiAvKipcbiAgKiB2Z2ljX3JlZ2lzdGVyX3JlZGlzdF9pb2RldiAtIHJlZ2lzdGVyIGEgc2luZ2xlIHJlZGlzdCBpb2RldlxuICAqIEB2Y3B1OiAgICBUaGUgVkNQVSB0byB3aGljaCB0aGUgcmVkaXN0cmlidXRvciBiZWxvbmdzXG5AQCAtODE4LDE2ICs4MzEsMTcgQEAgaW50IHZnaWNfcmVnaXN0ZXJfcmVkaXN0X2lvZGV2KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBcdHJkX2Rldi1cdTAwM2Vucl9yZWdpb25zID0gQVJSQVlfU0laRSh2Z2ljX3YzX3JkX3JlZ2lzdGVycyk7XG4gXHRyZF9kZXYtXHUwMDNlcmVkaXN0X3ZjcHUgPSB2Y3B1O1xuIFxuK1x0LyogUHJvdGVjdGVkIGJ5IHNsb3RzX2xvY2sgKi9cbitcdHJkcmVnLVx1MDAzZWZyZWVfaW5kZXgrKztcbitcbiBcdG11dGV4X3VubG9jayhcdTAwMjZrdm0tXHUwMDNlYXJjaC5jb25maWdfbG9jayk7XG4gXG4gXHRyZXQgPSBrdm1faW9fYnVzX3JlZ2lzdGVyX2Rldihrdm0sIEtWTV9NTUlPX0JVUywgcmRfYmFzZSxcbiBcdFx0XHRcdCAgICAgIDIgKiBTWl82NEssIFx1MDAyNnJkX2Rldi1cdTAwM2VkZXYpO1xuIFx0aWYgKHJldClcbi1cdFx0cmV0dXJuIHJldDtcbitcdFx0dmdpY191bmRvX3JlZGlzdF9hc3NpZ25tZW50KHZjcHUpO1xuIFxuLVx0LyogUHJvdGVjdGVkIGJ5IHNsb3RzX2xvY2sgKi9cbi1cdHJkcmVnLVx1MDAzZWZyZWVfaW5kZXgrKztcbi1cdHJldHVybiAwO1xuK1x0cmV0dXJuIHJldDtcbiBcbiBvdXRfdW5sb2NrOlxuIFx0bXV0ZXhfdW5sb2NrKFx1MDAyNmt2bS1cdTAwM2VhcmNoLmNvbmZpZ19sb2NrKTtcbkBAIC04NDEsNyArODU1LDI1IEBAIHZvaWQgdmdpY191bnJlZ2lzdGVyX3JlZGlzdF9pb2RldihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXHRrdm1faW9fYnVzX3VucmVnaXN0ZXJfZGV2KHZjcHUtXHUwMDNla3ZtLCBLVk1fTU1JT19CVVMsIFx1MDAyNnJkX2Rldi1cdTAwM2VkZXYpO1xuIH1cbiBcbi1zdGF0aWMgaW50IHZnaWNfcmVnaXN0ZXJfYWxsX3JlZGlzdF9pb2RldnMoc3RydWN0IGt2bSAqa3ZtKVxuK3N0YXRpYyB2b2lkIHZnaWNfcm9sbGJhY2tfcmVkaXN0X2lvZGV2KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbitcdFx0XHRcdCAgICAgICBzdHJ1Y3QgdmdpY19yZWRpc3RfcmVnaW9uICpyZHJlZylcbit7XG4rXHRzdHJ1Y3QgdmdpY19jcHUgKnZnaWNfY3B1ID0gXHUwMDI2dmNwdS1cdTAwM2VhcmNoLnZnaWNfY3B1O1xuK1xuK1x0bG9ja2RlcF9hc3NlcnRfaGVsZChcdTAwMjZ2Y3B1LVx1MDAzZWt2bS1cdTAwM2VzbG90c19sb2NrKTtcbitcbitcdGlmICh2Z2ljX2NwdS1cdTAwM2VyZHJlZyAhPSByZHJlZylcbitcdFx0cmV0dXJuO1xuK1xuK1x0dmdpY191bnJlZ2lzdGVyX3JlZGlzdF9pb2Rldih2Y3B1KTtcbitcbitcdGd1YXJkKG11dGV4KShcdTAwMjZ2Y3B1LVx1MDAzZWt2bS1cdTAwM2VhcmNoLmNvbmZpZ19sb2NrKTtcbitcdHZnaWNfY3B1LVx1MDAzZXJkcmVnID0gTlVMTDtcbitcdHZnaWNfY3B1LVx1MDAzZXJkX2lvZGV2LmJhc2VfYWRkciA9IFZHSUNfQUREUl9VTkRFRjtcbit9XG4rXG4rc3RhdGljIGludCB2Z2ljX3JlZ2lzdGVyX2FsbF9yZWRpc3RfaW9kZXZzKHN0cnVjdCBrdm0gKmt2bSxcbitcdFx0XHRcdFx0ICAgc3RydWN0IHZnaWNfcmVkaXN0X3JlZ2lvbiAqcmRyZWcpXG4ge1xuIFx0c3RydWN0IGt2bV92Y3B1ICp2Y3B1O1xuIFx0dW5zaWduZWQgbG9uZyBjO1xuQEAgLTg1NiwxMiArODg4LDEyIEBAIHN0YXRpYyBpbnQgdmdpY19yZWdpc3Rlcl9hbGxfcmVkaXN0X2lvZGV2cyhzdHJ1Y3Qga3ZtICprdm0pXG4gXHR9XG4gXG4gXHRpZiAocmV0KSB7XG4tXHRcdC8qIFRoZSBjdXJyZW50IGMgZmFpbGVkLCBzbyBpdGVyYXRlIG92ZXIgdGhlIHByZXZpb3VzIG9uZXMuICovXG4rXHRcdC8qIFVuZG8gYXNzaWdubWVudHMgbWFkZSBmcm9tIHRoZSByZWdpb24gYmVpbmcgYWRkZWQuICovXG4gXHRcdGludCBpO1xuIFxuIFx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBjOyBpKyspIHtcbiBcdFx0XHR2Y3B1ID0ga3ZtX2dldF92Y3B1KGt2bSwgaSk7XG4tXHRcdFx0dmdpY191bnJlZ2lzdGVyX3JlZGlzdF9pb2Rldih2Y3B1KTtcbitcdFx0XHR2Z2ljX3JvbGxiYWNrX3JlZGlzdF9pb2Rldih2Y3B1LCByZHJlZyk7XG4gXHRcdH1cbiBcdH1cbiBcbkBAIC05NzAsMTAgKzEwMDIsMTMgQEAgdm9pZCB2Z2ljX3YzX2ZyZWVfcmVkaXN0X3JlZ2lvbihzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCB2Z2ljX3JlZGlzdF9yZWdpb24gKnJkcmVcbiBcbiBpbnQgdmdpY192M19zZXRfcmVkaXN0X2Jhc2Uoc3RydWN0IGt2bSAqa3ZtLCB1MzIgaW5kZXgsIHU2NCBhZGRyLCB1MzIgY291bnQpXG4ge1xuK1x0c3RydWN0IHZnaWNfcmVkaXN0X3JlZ2lvbiAqcmRyZWc7XG4gXHRpbnQgcmV0O1xuIFxuIFx0bXV0ZXhfbG9jayhcdTAwMjZrdm0tXHUwMDNlYXJjaC5jb25maWdfbG9jayk7XG4gXHRyZXQgPSB2Z2ljX3YzX2FsbG9jX3JlZGlzdF9yZWdpb24oa3ZtLCBpbmRleCwgYWRkciwgY291bnQpO1xuK1x0aWYgKCFyZXQpXG4rXHRcdHJkcmVnID0gdmdpY192M19yZGlzdF9yZWdpb25fZnJvbV9pbmRleChrdm0sIGluZGV4KTtcbiBcdG11dGV4X3VubG9jayhcdTAwMjZrdm0tXHUwMDNlYXJjaC5jb25maWdfbG9jayk7XG4gXHRpZiAocmV0KVxuIFx0XHRyZXR1cm4gcmV0O1xuQEAgLTk4MiwxMiArMTAxNyw5IEBAIGludCB2Z2ljX3YzX3NldF9yZWRpc3RfYmFzZShzdHJ1Y3Qga3ZtICprdm0sIHUzMiBpbmRleCwgdTY0IGFkZHIsIHUzMiBjb3VudClcbiBcdCAqIFJlZ2lzdGVyIGlvZGV2cyBmb3IgZWFjaCBleGlzdGluZyBWQ1BVLiAgQWRkaW5nIG1vcmUgVkNQVXNcbiBcdCAqIGFmdGVyd2FyZHMgd2lsbCByZWdpc3RlciB0aGUgaW9kZXZzIHdoZW4gbmVlZGVkLlxuIFx0ICovXG4tXHRyZXQgPSB2Z2ljX3JlZ2lzdGVyX2FsbF9yZWRpc3RfaW9kZXZzKGt2bSk7XG4rXHRyZXQgPSB2Z2ljX3JlZ2lzdGVyX2FsbF9yZWRpc3RfaW9kZXZzKGt2bSwgcmRyZWcpO1xuIFx0aWYgKHJldCkge1xuLVx0XHRzdHJ1Y3QgdmdpY19yZWRpc3RfcmVnaW9uICpyZHJlZztcbi1cbiBcdFx0bXV0ZXhfbG9jayhcdTAwMjZrdm0tXHUwMDNlYXJjaC5jb25maWdfbG9jayk7XG4tXHRcdHJkcmVnID0gdmdpY192M19yZGlzdF9yZWdpb25fZnJvbV9pbmRleChrdm0sIGluZGV4KTtcbiBcdFx0dmdpY192M19mcmVlX3JlZGlzdF9yZWdpb24oa3ZtLCByZHJlZyk7XG4gXHRcdG11dGV4X3VubG9jayhcdTAwMjZrdm0tXHUwMDNlYXJjaC5jb25maWdfbG9jayk7XG4gXHRcdHJldHVybiByZXQ7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2FybTY0L3ZnaWNfaW5pdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2FybTY0L3ZnaWNfaW5pdC5jXG5pbmRleCA0N2UzNGI0M2FmYjI5Li41YTMwZjNjYjAzOWJlIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2FybTY0L3ZnaWNfaW5pdC5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vYXJtNjQvdmdpY19pbml0LmNcbkBAIC01LDYgKzUsNyBAQFxuICAqIENvcHlyaWdodCAoQykgMjAyMCwgUmVkIEhhdCwgSW5jLlxuICAqL1xuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2tlcm5lbC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvc2l6ZXMuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY3N5cy9zeXNjYWxsLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2Nhc20va3ZtLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2Nhc20va3ZtX3BhcmEuaFx1MDAzZVxuQEAgLTEzLDEyICsxNCwyMSBAQFxuIFxuICNpbmNsdWRlIFwidGVzdF91dGlsLmhcIlxuICNpbmNsdWRlIFwia3ZtX3V0aWwuaFwiXG4rI2luY2x1ZGUgXCJnaWMuaFwiXG4gI2luY2x1ZGUgXCJwcm9jZXNzb3IuaFwiXG4gI2luY2x1ZGUgXCJ2Z2ljLmhcIlxuICNpbmNsdWRlIFwiZ2ljX3YzLmhcIlxuIFxuICNkZWZpbmUgTlJfVkNQVVNcdFx0NFxuIFxuKyNkZWZpbmUgUkVESVNUX1JFVFJZX1JFR0lPTjBfQkFTRVx0R0lDUl9CQVNFX0dQQVxuKyNkZWZpbmUgUkVESVNUX1JFVFJZX1JFR0lPTjFfQkFTRVx0XFxcbitcdChSRURJU1RfUkVUUllfUkVHSU9OMF9CQVNFICsgMiAqIEtWTV9WR0lDX1YzX1JFRElTVF9TSVpFKVxuKyNkZWZpbmUgUkVESVNUX1JFVFJZX0RJU1RfQkFTRVx0XHRcXFxuK1x0KFJFRElTVF9SRVRSWV9SRUdJT04xX0JBU0UgKyBLVk1fVkdJQ19WM19SRURJU1RfU0laRSlcbisjZGVmaW5lIFJFRElTVF9SRVRSWV9SRUdJT04yX0JBU0VcdFxcXG4rXHQoUkVESVNUX1JFVFJZX0RJU1RfQkFTRSArIEtWTV9WR0lDX1YzX0RJU1RfU0laRSlcbitcbiAjZGVmaW5lIFJFR19PRkZTRVQodmNwdSwgb2Zmc2V0KSAoKCh1NjQpdmNwdSBcdTAwM2NcdTAwM2MgMzIpIHwgb2Zmc2V0KVxuIFxuICNkZWZpbmUgVkdJQ19ERVZfSVNfVjIoX2QpICgoX2QpID09IEtWTV9ERVZfVFlQRV9BUk1fVkdJQ19WMilcbkBAIC02NSw2ICs3NSwyMyBAQCBzdGF0aWMgdm9pZCBndWVzdF9jb2RlKHZvaWQpXG4gXHRHVUVTVF9ET05FKCk7XG4gfVxuIFxuK3N0YXRpYyB2b2lkIGd1ZXN0X2NoZWNrX3JlZGlzdF9yZXRyeSh2b2lkKVxuK3tcbitcdHVuc2lnbmVkIGludCBpO1xuK1xuK1x0LyogVGhlIGZpcnN0IHRocmVlIHJlZGlzdHJpYnV0b3JzIHNwYW4gYWRqYWNlbnQgcmVnaW9ucyAwIGFuZCAxLiAqL1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgTlJfVkNQVVM7IGkrKykge1xuK1x0XHR1NjQgYmFzZSA9IGkgXHUwMDNjIDMgPyBSRURJU1RfUkVUUllfUkVHSU9OMF9CQVNFICtcbitcdFx0XHRcdCAgICAgICBpICogS1ZNX1ZHSUNfVjNfUkVESVNUX1NJWkUgOlxuK1x0XHRcdFx0ICAgICAgIFJFRElTVF9SRVRSWV9SRUdJT04yX0JBU0U7XG4rXHRcdHU2NCB0eXBlciA9IHJlYWRxKCh2b2lkICopKHVuc2lnbmVkIGxvbmcpKGJhc2UgKyBHSUNSX1RZUEVSKSk7XG4rXG4rXHRcdEdVRVNUX0FTU0VSVF9FUShHSUNSX1RZUEVSX0NQVV9OVU1CRVIodHlwZXIpLCBpKTtcbitcdH1cbitcbitcdEdVRVNUX0RPTkUoKTtcbit9XG4rXG4gLyogd2UgZG9uJ3Qgd2FudCB0byBhc3NlcnQgb24gcnVuIGV4ZWN1dGlvbiwgaGVuY2UgdGhhdCBoZWxwZXIgKi9cbiBzdGF0aWMgaW50IHJ1bl92Y3B1KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiB7XG5AQCAtNzMsNiArMTAwLDcgQEAgc3RhdGljIGludCBydW5fdmNwdShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXG4gc3RhdGljIHN0cnVjdCB2bV9naWMgdm1fZ2ljX2NyZWF0ZV93aXRoX3ZjcHVzKHUzMiBnaWNfZGV2X3R5cGUsXG4gXHRcdFx0XHRcdCAgICAgIHUzMiBucl92Y3B1cyxcbitcdFx0XHRcdFx0ICAgICAgdm9pZCAqZ3Vlc3RfY29kZSxcbiBcdFx0XHRcdFx0ICAgICAgc3RydWN0IGt2bV92Y3B1ICp2Y3B1c1tdKVxuIHtcbiBcdHN0cnVjdCB2bV9naWMgdjtcbkBAIC0zMzgsNyArMzY2LDcgQEAgc3RhdGljIHZvaWQgdGVzdF92Z2ljX3RoZW5fdmNwdXModTMyIGdpY19kZXZfdHlwZSlcbiBcdHN0cnVjdCB2bV9naWMgdjtcbiBcdGludCByZXQsIGk7XG4gXG4tXHR2ID0gdm1fZ2ljX2NyZWF0ZV93aXRoX3ZjcHVzKGdpY19kZXZfdHlwZSwgMSwgdmNwdXMpO1xuK1x0diA9IHZtX2dpY19jcmVhdGVfd2l0aF92Y3B1cyhnaWNfZGV2X3R5cGUsIDEsIGd1ZXN0X2NvZGUsIHZjcHVzKTtcbiBcbiBcdHN1YnRlc3RfZGlzdF9yZGlzdChcdTAwMjZ2KTtcbiBcbkBAIC0zNTksNyArMzg3LDggQEAgc3RhdGljIHZvaWQgdGVzdF92Y3B1c190aGVuX3ZnaWModTMyIGdpY19kZXZfdHlwZSlcbiBcdHN0cnVjdCB2bV9naWMgdjtcbiBcdGludCByZXQ7XG4gXG4tXHR2ID0gdm1fZ2ljX2NyZWF0ZV93aXRoX3ZjcHVzKGdpY19kZXZfdHlwZSwgTlJfVkNQVVMsIHZjcHVzKTtcbitcdHYgPSB2bV9naWNfY3JlYXRlX3dpdGhfdmNwdXMoZ2ljX2Rldl90eXBlLCBOUl9WQ1BVUywgZ3Vlc3RfY29kZSxcbitcdFx0XHRcdCAgICAgdmNwdXMpO1xuIFxuIFx0c3VidGVzdF9kaXN0X3JkaXN0KFx1MDAyNnYpO1xuIFxuQEAgLTQxMSw3ICs0NDAsOCBAQCBzdGF0aWMgdm9pZCB0ZXN0X3YzX25ld19yZWRpc3RfcmVnaW9ucyh2b2lkKVxuIFx0dTY0IGFkZHI7XG4gXHRpbnQgcmV0O1xuIFxuLVx0diA9IHZtX2dpY19jcmVhdGVfd2l0aF92Y3B1cyhLVk1fREVWX1RZUEVfQVJNX1ZHSUNfVjMsIE5SX1ZDUFVTLCB2Y3B1cyk7XG4rXHR2ID0gdm1fZ2ljX2NyZWF0ZV93aXRoX3ZjcHVzKEtWTV9ERVZfVFlQRV9BUk1fVkdJQ19WMywgTlJfVkNQVVMsXG4rXHRcdFx0XHQgICAgIGd1ZXN0X2NvZGUsIHZjcHVzKTtcbiBcdHN1YnRlc3RfdjNfcmVkaXN0X3JlZ2lvbnMoXHUwMDI2dik7XG4gXHRrdm1fZGV2aWNlX2F0dHJfc2V0KHYuZ2ljX2ZkLCBLVk1fREVWX0FSTV9WR0lDX0dSUF9DVFJMLFxuIFx0XHRcdCAgICBLVk1fREVWX0FSTV9WR0lDX0NUUkxfSU5JVCwgTlVMTCk7XG5AQCAtNDIyLDcgKzQ1Miw4IEBAIHN0YXRpYyB2b2lkIHRlc3RfdjNfbmV3X3JlZGlzdF9yZWdpb25zKHZvaWQpXG4gXG4gXHQvKiBzdGVwMiAqL1xuIFxuLVx0diA9IHZtX2dpY19jcmVhdGVfd2l0aF92Y3B1cyhLVk1fREVWX1RZUEVfQVJNX1ZHSUNfVjMsIE5SX1ZDUFVTLCB2Y3B1cyk7XG4rXHR2ID0gdm1fZ2ljX2NyZWF0ZV93aXRoX3ZjcHVzKEtWTV9ERVZfVFlQRV9BUk1fVkdJQ19WMywgTlJfVkNQVVMsXG4rXHRcdFx0XHQgICAgIGd1ZXN0X2NvZGUsIHZjcHVzKTtcbiBcdHN1YnRlc3RfdjNfcmVkaXN0X3JlZ2lvbnMoXHUwMDI2dik7XG4gXG4gXHRhZGRyID0gUkVESVNUX1JFR0lPTl9BVFRSX0FERFIoMSwgMHgyODAwMDAsIDAsIDIpO1xuQEAgLTQzNiw3ICs0NjcsOCBAQCBzdGF0aWMgdm9pZCB0ZXN0X3YzX25ld19yZWRpc3RfcmVnaW9ucyh2b2lkKVxuIFxuIFx0Lyogc3RlcCAzICovXG4gXG4tXHR2ID0gdm1fZ2ljX2NyZWF0ZV93aXRoX3ZjcHVzKEtWTV9ERVZfVFlQRV9BUk1fVkdJQ19WMywgTlJfVkNQVVMsIHZjcHVzKTtcbitcdHYgPSB2bV9naWNfY3JlYXRlX3dpdGhfdmNwdXMoS1ZNX0RFVl9UWVBFX0FSTV9WR0lDX1YzLCBOUl9WQ1BVUyxcbitcdFx0XHRcdCAgICAgZ3Vlc3RfY29kZSwgdmNwdXMpO1xuIFx0c3VidGVzdF92M19yZWRpc3RfcmVnaW9ucyhcdTAwMjZ2KTtcbiBcbiBcdHJldCA9IF9fa3ZtX2RldmljZV9hdHRyX3NldCh2LmdpY19mZCwgS1ZNX0RFVl9BUk1fVkdJQ19HUlBfQUREUixcbkBAIC00NTcsNiArNDg5LDcwIEBAIHN0YXRpYyB2b2lkIHRlc3RfdjNfbmV3X3JlZGlzdF9yZWdpb25zKHZvaWQpXG4gXHR2bV9naWNfZGVzdHJveShcdTAwMjZ2KTtcbiB9XG4gXG4rc3RhdGljIHZvaWQgdGVzdF92M19yZWRpc3RfcmVnaW9uX3JldHJ5KHZvaWQpXG4re1xuK1x0c3RydWN0IGt2bV92Y3B1ICp2Y3B1c1tOUl9WQ1BVU107XG4rXHRzdHJ1Y3Qgdm1fZ2ljIHY7XG4rXHRzdHJ1Y3QgdWNhbGwgdWM7XG4rXHR1NjQgYWRkcjtcbitcdGludCByZXQ7XG4rXG4rXHR2ID0gdm1fZ2ljX2NyZWF0ZV93aXRoX3ZjcHVzKEtWTV9ERVZfVFlQRV9BUk1fVkdJQ19WMywgTlJfVkNQVVMsXG4rXHRcdFx0XHQgICAgIGd1ZXN0X2NoZWNrX3JlZGlzdF9yZXRyeSwgdmNwdXMpO1xuK1xuK1x0YWRkciA9IFJFRElTVF9SRUdJT05fQVRUUl9BRERSKDIsIFJFRElTVF9SRVRSWV9SRUdJT04wX0JBU0UsIDAsIDApO1xuK1x0a3ZtX2RldmljZV9hdHRyX3NldCh2LmdpY19mZCwgS1ZNX0RFVl9BUk1fVkdJQ19HUlBfQUREUixcbitcdFx0XHQgICAgS1ZNX1ZHSUNfVjNfQUREUl9UWVBFX1JFRElTVF9SRUdJT04sIFx1MDAyNmFkZHIpO1xuK1xuK1x0YWRkciA9IFJFRElTVF9SRUdJT05fQVRUUl9BRERSKDEsIFJFRElTVF9SRVRSWV9SRUdJT04xX0JBU0UsIDAsIDEpO1xuK1x0a3ZtX2RldmljZV9hdHRyX3NldCh2LmdpY19mZCwgS1ZNX0RFVl9BUk1fVkdJQ19HUlBfQUREUixcbitcdFx0XHQgICAgS1ZNX1ZHSUNfVjNfQUREUl9UWVBFX1JFRElTVF9SRUdJT04sIFx1MDAyNmFkZHIpO1xuK1xuK1x0YWRkciA9IFJFRElTVF9SRVRSWV9ESVNUX0JBU0U7XG4rXHRrdm1fZGV2aWNlX2F0dHJfc2V0KHYuZ2ljX2ZkLCBLVk1fREVWX0FSTV9WR0lDX0dSUF9BRERSLFxuK1x0XHRcdCAgICBLVk1fVkdJQ19WM19BRERSX1RZUEVfRElTVCwgXHUwMDI2YWRkcik7XG4rXG4rXHRhZGRyID0gUkVESVNUX1JFR0lPTl9BVFRSX0FERFIoMSwgUkVESVNUX1JFVFJZX0RJU1RfQkFTRSwgMCwgMik7XG4rXHRyZXQgPSBfX2t2bV9kZXZpY2VfYXR0cl9zZXQodi5naWNfZmQsIEtWTV9ERVZfQVJNX1ZHSUNfR1JQX0FERFIsXG4rXHRcdFx0XHQgICAgS1ZNX1ZHSUNfVjNfQUREUl9UWVBFX1JFRElTVF9SRUdJT04sXG4rXHRcdFx0XHQgICAgXHUwMDI2YWRkcik7XG4rXHRURVNUX0FTU0VSVChyZXQgXHUwMDI2XHUwMDI2IGVycm5vID09IEVJTlZBTCxcbitcdFx0ICAgIFwicmVnaXN0ZXIgcmVkaXN0IHJlZ2lvbiBjb2xsaWRpbmcgd2l0aCBkaXN0XCIpO1xuK1xuK1x0YWRkciA9IFJFRElTVF9SRUdJT05fQVRUUl9BRERSKDEsIFJFRElTVF9SRVRSWV9SRUdJT04yX0JBU0UsIDAsIDIpO1xuK1x0a3ZtX2RldmljZV9hdHRyX3NldCh2LmdpY19mZCwgS1ZNX0RFVl9BUk1fVkdJQ19HUlBfQUREUixcbitcdFx0XHQgICAgS1ZNX1ZHSUNfVjNfQUREUl9UWVBFX1JFRElTVF9SRUdJT04sIFx1MDAyNmFkZHIpO1xuK1xuK1x0dmlydF9tYXAodi52bSwgUkVESVNUX1JFVFJZX1JFR0lPTjBfQkFTRSwgUkVESVNUX1JFVFJZX1JFR0lPTjBfQkFTRSxcbitcdFx0IHZtX2NhbGNfbnVtX2d1ZXN0X3BhZ2VzKHYudm0tXHUwMDNlbW9kZSxcbitcdFx0XHRcdFx0IDMgKiBLVk1fVkdJQ19WM19SRURJU1RfU0laRSkpO1xuK1x0dmlydF9tYXAodi52bSwgUkVESVNUX1JFVFJZX1JFR0lPTjJfQkFTRSwgUkVESVNUX1JFVFJZX1JFR0lPTjJfQkFTRSxcbitcdFx0IHZtX2NhbGNfbnVtX2d1ZXN0X3BhZ2VzKHYudm0tXHUwMDNlbW9kZSxcbitcdFx0XHRcdFx0IEtWTV9WR0lDX1YzX1JFRElTVF9TSVpFKSk7XG4rXG4rXHRrdm1fZGV2aWNlX2F0dHJfc2V0KHYuZ2ljX2ZkLCBLVk1fREVWX0FSTV9WR0lDX0dSUF9DVFJMLFxuK1x0XHRcdCAgICBLVk1fREVWX0FSTV9WR0lDX0NUUkxfSU5JVCwgTlVMTCk7XG4rXG4rXHR2Y3B1X3J1bih2Y3B1c1swXSk7XG4rXHRzd2l0Y2ggKGdldF91Y2FsbCh2Y3B1c1swXSwgXHUwMDI2dWMpKSB7XG4rXHRjYXNlIFVDQUxMX0RPTkU6XG4rXHRcdGJyZWFrO1xuK1x0Y2FzZSBVQ0FMTF9BQk9SVDpcbitcdFx0UkVQT1JUX0dVRVNUX0FTU0VSVCh1Yyk7XG4rXHRcdGJyZWFrO1xuK1x0Y2FzZSBVQ0FMTF9OT05FOlxuK1x0XHRpZiAodmNwdXNbMF0tXHUwMDNlcnVuLVx1MDAzZWV4aXRfcmVhc29uID09IEtWTV9FWElUX01NSU8pXG4rXHRcdFx0VEVTVF9GQUlMKFwiVW5leHBlY3RlZCBNTUlPIGV4aXQgYXQgMHglbGx4XCIsXG4rXHRcdFx0XHQgIHZjcHVzWzBdLVx1MDAzZXJ1bi1cdTAwM2VtbWlvLnBoeXNfYWRkcik7XG4rXHRcdGZhbGx0aHJvdWdoO1xuK1x0ZGVmYXVsdDpcbitcdFx0VEVTVF9GQUlMKFwiVW5leHBlY3RlZCB1Y2FsbCAlbHUsIGV4aXRfcmVhc29uICV1XCIsXG4rXHRcdFx0ICB1Yy5jbWQsIHZjcHVzWzBdLVx1MDAzZXJ1bi1cdTAwM2VleGl0X3JlYXNvbik7XG4rXHR9XG4rXG4rXHR2bV9naWNfZGVzdHJveShcdTAwMjZ2KTtcbit9XG4rXG4gc3RhdGljIHZvaWQgdGVzdF92M190eXBlcl9hY2Nlc3Nlcyh2b2lkKVxuIHtcbiBcdHN0cnVjdCB2bV9naWMgdjtcbkBAIC02MDgsNyArNzA0LDggQEAgc3RhdGljIHZvaWQgdGVzdF92M19yZWRpc3RfaXBhX3JhbmdlX2NoZWNrX2F0X3ZjcHVfcnVuKHZvaWQpXG4gXHRpbnQgcmV0LCBpO1xuIFx0dTY0IGFkZHI7XG4gXG4tXHR2ID0gdm1fZ2ljX2NyZWF0ZV93aXRoX3ZjcHVzKEtWTV9ERVZfVFlQRV9BUk1fVkdJQ19WMywgMSwgdmNwdXMpO1xuK1x0diA9IHZtX2dpY19jcmVhdGVfd2l0aF92Y3B1cyhLVk1fREVWX1RZUEVfQVJNX1ZHSUNfVjMsIDEsIGd1ZXN0X2NvZGUsXG4rXHRcdFx0XHQgICAgIHZjcHVzKTtcbiBcbiBcdC8qIFNldCBzcGFjZSBmb3IgMyByZWRpc3RzLCB3ZSBoYXZlIDEgdmNwdSwgc28gdGhpcyBzdWNjZWVkcy4gKi9cbiBcdGFkZHIgPSBtYXhfcGh5c19zaXplIC0gKDMgKiAyICogMHgxMDAwMCk7XG5AQCAtNjQxLDcgKzczOCw4IEBAIHN0YXRpYyB2b2lkIHRlc3RfdjNfaXRzX3JlZ2lvbih2b2lkKVxuIFx0dTY0IGFkZHI7XG4gXHRpbnQgaXRzX2ZkLCByZXQ7XG4gXG4tXHR2ID0gdm1fZ2ljX2NyZWF0ZV93aXRoX3ZjcHVzKEtWTV9ERVZfVFlQRV9BUk1fVkdJQ19WMywgTlJfVkNQVVMsIHZjcHVzKTtcbitcdHYgPSB2bV9naWNfY3JlYXRlX3dpdGhfdmNwdXMoS1ZNX0RFVl9UWVBFX0FSTV9WR0lDX1YzLCBOUl9WQ1BVUyxcbitcdFx0XHRcdCAgICAgZ3Vlc3RfY29kZSwgdmNwdXMpO1xuIFx0aXRzX2ZkID0ga3ZtX2NyZWF0ZV9kZXZpY2Uodi52bSwgS1ZNX0RFVl9UWVBFX0FSTV9WR0lDX0lUUyk7XG4gXG4gXHRhZGRyID0gMHg0MDEwMDA7XG5AQCAtNjg0LDcgKzc4Miw4IEBAIHN0YXRpYyB2b2lkIHRlc3RfdjNfbmFzc2dpY2FwKHZvaWQpXG4gXHR1MzIgdHlwZXIyO1xuIFx0aW50IHJldDtcbiBcbi1cdHZtID0gdm1fZ2ljX2NyZWF0ZV93aXRoX3ZjcHVzKEtWTV9ERVZfVFlQRV9BUk1fVkdJQ19WMywgTlJfVkNQVVMsIHZjcHVzKTtcbitcdHZtID0gdm1fZ2ljX2NyZWF0ZV93aXRoX3ZjcHVzKEtWTV9ERVZfVFlQRV9BUk1fVkdJQ19WMywgTlJfVkNQVVMsXG4rXHRcdFx0XHQgICAgICBndWVzdF9jb2RlLCB2Y3B1cyk7XG4gXHRrdm1fZGV2aWNlX2F0dHJfZ2V0KHZtLmdpY19mZCwgS1ZNX0RFVl9BUk1fVkdJQ19HUlBfRElTVF9SRUdTLFxuIFx0XHRcdCAgICBHSUNEX1RZUEVSMiwgXHUwMDI2dHlwZXIyKTtcbiBcdGhhc19uYXNzZ2ljYXAgPSB0eXBlcjIgXHUwMDI2IEdJQ0RfVFlQRVIyX25BU1NHSWNhcDtcbkBAIC05NzgsNiArMTA3Nyw3IEBAIHZvaWQgcnVuX3Rlc3RzKHUzMiBnaWNfZGV2X3R5cGUpXG4gXG4gXHRpZiAoVkdJQ19ERVZfSVNfVjMoZ2ljX2Rldl90eXBlKSkge1xuIFx0XHR0ZXN0X3YzX25ld19yZWRpc3RfcmVnaW9ucygpO1xuK1x0XHR0ZXN0X3YzX3JlZGlzdF9yZWdpb25fcmV0cnkoKTtcbiBcdFx0dGVzdF92M190eXBlcl9hY2Nlc3NlcygpO1xuIFx0XHR0ZXN0X3YzX2xhc3RfYml0X3JlZGlzdF9yZWdpb25zKCk7XG4gXHRcdHRlc3RfdjNfbGFzdF9iaXRfc2luZ2xlX3JkaXN0KCk7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQwODoyNjoyNC45MTk4NTY0ODJaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo2MTAzNTE2OTI3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIExpbnV4IEtlcm5lbCBDb21taXQgZm9yIEZ1enppbmcgUG90ZW50aWFsKipcblxuT2theSwgc28gSSBuZWVkIHRvIGV2YWx1YXRlIHRoaXMgcmVjZW50IGNvbW1pdCB0byB0aGUgTGludXgga2VybmVsLiBUaGUgZ29hbCBpcyB0byBkZXRlcm1pbmUgaWYgaXQncyBmdXp6LXdvcnRoeSwgd2hhdCBzcGVjaWZpYyBzeW1ib2xzIEkgc2hvdWxkIGZvY3VzIG9uLCBhbmQgYW55IGNvbmZpZ3VyYXRpb24gc2V0dGluZ3MgSSBuZWVkIHRvIGJlIGF3YXJlIG9mLiBMZXQncyBkaWcgaW4uXG5cblRoZSBkaWZmIHRhcmdldHMgYGFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1tbWlvLXYzLmNgIGFuZCBhZGRzIHRlc3RzIHRvIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vYXJtNjQvdmdpY19pbml0LmNgLiBUaGF0IGltbWVkaWF0ZWx5IG1ha2VzIG1lIHRoaW5rIHRoaXMgaW52b2x2ZXMgS1ZNIGFuZCBzcGVjaWZpY2FsbHkgdGhlIFZpcnR1YWwgR0lDIChHZW5lcmljIEludGVycnVwdCBDb250cm9sbGVyKSBpbXBsZW1lbnRhdGlvbiBmb3IgQVJNNjQuIEludGVyZXN0aW5nLlxuXG5JIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHRoZSBrZXkgZnVuY3Rpb25zIGludHJvZHVjZWQgb3IgbW9kaWZpZWQgYXJlLCBzbyBJJ2xsIHJldmlldyBgdmdpY191bmRvX3JlZGlzdF9hc3NpZ25tZW50YCwgYHZnaWNfcmVnaXN0ZXJfcmVkaXN0X2lvZGV2YCwgYHZnaWNfcm9sbGJhY2tfcmVkaXN0X2lvZGV2YCwgYHZnaWNfcmVnaXN0ZXJfYWxsX3JlZGlzdF9pb2RldnNgLCBhbmQgYHZnaWNfdjNfc2V0X3JlZGlzdF9iYXNlYCBpbiBkZXRhaWwuIFRoZXNlIGxpa2VseSBoYW5kbGUgdGhlIHJlZGlzdHJpYnV0aW9uIG9mIEkvTyBkZXZpY2VzIHdpdGhpbiB0aGUgVlZHSUMuIEludGVycnVwdCBjb250cm9sbGVycyBhcmUgYWx3YXlzIGEgZ29vZCBhcmVhIGZvciBmdXp6aW5nLCBlc3BlY2lhbGx5IHZpcnR1YWxpemVkIG9uZXMuXG5cblRvIGdldCBhIGJldHRlciBwaWN0dXJlLCBJJ2xsIHVzZSBlaXRoZXIgYGdyZXBwZXJgIG9yIGp1c3QgcmVhZCB0aGUgcmVsZXZhbnQgZmlsZXMsIHNwZWNpZmljYWxseSBgYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLW1taW8tdjMuY2AsIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRyb2wgZmxvdyBhbmQgZGF0YSBzdHJ1Y3R1cmVzIGludm9sdmVkLiBJJ2xsIGFsc28gZG91YmxlLWNoZWNrIHRoZSBLY29uZmlnIG9wdGlvbnMgZm9yIEFSTTY0IEtWTSB0byBzZWUgaWYgYW55IHNwZWNpZmljIGNvbmZpZ3VyYXRpb25zIG5lZWQgdG8gYmUgZW5hYmxlZCBmb3IgdGhpcyBjb2RlIHRvIGJlIGFjdGl2ZS4gVGhhdCB3aWxsIGluZmx1ZW5jZSB0aGUgc2V0dXAgb2YgYW55IGZ1enppbmcgZW52aXJvbm1lbnQgSSBlc3RhYmxpc2guIEkgbmVlZCB0byBiZSBjZXJ0YWluIHRoZSBrZXJuZWwgaXMgY29uZmlndXJlZCBjb3JyZWN0bHkgdG8gZXhlcmNpc2UgdGhpcyBjb2RlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3MTIxLCJPdXRwdXRUb2tlbnMiOjUxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjI0LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMDg6MjY6MzEuMDIzMzc1NTg5WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTg3NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLW1taW8tdjMuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA3NjAsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNzYwOlxcdHtcXG4gNzYxOlxcdFxcdGRldi1cXHUwMDNlcmVnaW9ucyA9IHZnaWNfdjNfZGlzdF9yZWdpc3RlcnM7XFxuIDc2MjpcXHRcXHRkZXYtXFx1MDAzZW5yX3JlZ2lvbnMgPSBBUlJBWV9TSVpFKHZnaWNfdjNfZGlzdF9yZWdpc3RlcnMpO1xcbiA3NjM6XFx0XFxuIDc2NDpcXHRcXHRrdm1faW9kZXZpY2VfaW5pdChcXHUwMDI2ZGV2LVxcdTAwM2VkZXYsIFxcdTAwMjZrdm1faW9fZ2ljX29wcyk7XFxuIDc2NTpcXHRcXG4gNzY2OlxcdFxcdHJldHVybiBTWl82NEs7XFxuIDc2NzpcXHR9XFxuIDc2ODpcXHRcXG4gNzY5OlxcdHN0YXRpYyB2b2lkIHZnaWNfdW5kb19yZWRpc3RfYXNzaWdubWVudChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuIDc3MDpcXHR7XFxuIDc3MTpcXHRcXHRzdHJ1Y3QgdmdpY19jcHUgKnZnaWNfY3B1ID0gXFx1MDAyNnZjcHUtXFx1MDAzZWFyY2gudmdpY19jcHU7XFxuIDc3MjpcXHRcXG4gNzczOlxcdFxcdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXFx1MDAyNnZjcHUtXFx1MDAzZWt2bS1cXHUwMDNlc2xvdHNfbG9jayk7XFxuIDc3NDpcXHRcXG4gNzc1OlxcdFxcdGd1YXJkKG11dGV4KShcXHUwMDI2dmNwdS1cXHUwMDNla3ZtLVxcdTAwM2VhcmNoLmNvbmZpZ19sb2NrKTtcXG4gNzc2OlxcdFxcbiA3Nzc6XFx0XFx0dmdpY19jcHUtXFx1MDAzZXJkcmVnLVxcdTAwM2VmcmVlX2luZGV4LS07XFxuIDc3ODpcXHRcXHR2Z2ljX2NwdS1cXHUwMDNlcmRyZWcgPSBOVUxMO1xcbiA3Nzk6XFx0XFx0dmdpY19jcHUtXFx1MDAzZXJkX2lvZGV2LmJhc2VfYWRkciA9IFZHSUNfQUREUl9VTkRFRjtcXG4gNzgwOlxcdH1cXG4gNzgxOlxcdFxcbiA3ODI6XFx0LyoqXFxuIDc4MzpcXHQgKiB2Z2ljX3JlZ2lzdGVyX3JlZGlzdF9pb2RldiAtIHJlZ2lzdGVyIGEgc2luZ2xlIHJlZGlzdCBpb2RldlxcbiA3ODQ6XFx0ICogQHZjcHU6ICAgIFRoZSBWQ1BVIHRvIHdoaWNoIHRoZSByZWRpc3RyaWJ1dG9yIGJlbG9uZ3NcXG4gNzg1OlxcdCAqXFxuIDc4NjpcXHQgKiBSZWdpc3RlciBhIEtWTSBpb2RldiBmb3IgdGhpcyBWQ1BVJ3MgcmVkaXN0cmlidXRvciB1c2luZyB0aGUgYWRkcmVzc1xcbiA3ODc6XFx0ICogcHJvdmlkZWQuXFxuIDc4ODpcXHQgKlxcbiA3ODk6XFx0ICogUmV0dXJuIDAgb24gc3VjY2VzcywgLUVSUk5PIG90aGVyd2lzZS5cXG4gNzkwOlxcdCAqL1xcbiA3OTE6XFx0aW50IHZnaWNfcmVnaXN0ZXJfcmVkaXN0X2lvZGV2KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4gNzkyOlxcdHtcXG4gNzkzOlxcdFxcdHN0cnVjdCBrdm0gKmt2bSA9IHZjcHUtXFx1MDAzZWt2bTtcXG4gNzk0OlxcdFxcdHN0cnVjdCB2Z2ljX2Rpc3QgKnZnaWMgPSBcXHUwMDI2a3ZtLVxcdTAwM2VhcmNoLnZnaWM7XFxuIDc5NTpcXHRcXHRzdHJ1Y3QgdmdpY19jcHUgKnZnaWNfY3B1ID0gXFx1MDAyNnZjcHUtXFx1MDAzZWFyY2gudmdpY19jcHU7XFxuIDc5NjpcXHRcXHRzdHJ1Y3QgdmdpY19pb19kZXZpY2UgKnJkX2RldiA9IFxcdTAwMjZ2Y3B1LVxcdTAwM2VhcmNoLnZnaWNfY3B1LnJkX2lvZGV2O1xcbiA3OTc6XFx0XFx0c3RydWN0IHZnaWNfcmVkaXN0X3JlZ2lvbiAqcmRyZWc7XFxuIDc5ODpcXHRcXHRncGFfdCByZF9iYXNlO1xcbiA3OTk6XFx0XFx0aW50IHJldCA9IDA7XFxuIDgwMDpcXHRcXG4gODAxOlxcdFxcdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXFx1MDAyNmt2bS1cXHUwMDNlc2xvdHNfbG9jayk7XFxuIDgwMjpcXHRcXHRtdXRleF9sb2NrKFxcdTAwMjZrdm0tXFx1MDAzZWFyY2guY29uZmlnX2xvY2spO1xcbiA4MDM6XFx0XFxuIDgwNDpcXHRcXHRpZiAoIUlTX1ZHSUNfQUREUl9VTkRFRih2Z2ljX2NwdS1cXHUwMDNlcmRfaW9kZXYuYmFzZV9hZGRyKSlcXG4gODA1OlxcdFxcdFxcdGdvdG8gb3V0X3VubG9jaztcXG4gODA2OlxcdFxcbiA4MDc6XFx0XFx0LypcXG4gODA4OlxcdFxcdCAqIFdlIG1heSBiZSBjcmVhdGluZyBWQ1BVcyBiZWZvcmUgaGF2aW5nIHNldCB0aGUgYmFzZSBhZGRyZXNzIGZvciB0aGVcXG4gODA5OlxcdFxcdCAqIHJlZGlzdHJpYnV0b3IgcmVnaW9uLCBpbiB3aGljaCBjYXNlIHdlIHdpbGwgY29tZSBiYWNrIHRvIHRoaXNcXG4gODEwOlxcdFxcdCAqIGZ1bmN0aW9uIGZvciBhbGwgVkNQVXMgd2hlbiB0aGUgYmFzZSBhZGRyZXNzIGlzIHNldC4gIEp1c3QgcmV0dXJuXFxuIDgxMTpcXHRcXHQgKiB3aXRob3V0IGRvaW5nIGFueSB3b3JrIGZvciBub3cuXFxuIDgxMjpcXHRcXHQgKi9cXG4gODEzOlxcdFxcdHJkcmVnID0gdmdpY192M19yZGlzdF9mcmVlX3Nsb3QoXFx1MDAyNnZnaWMtXFx1MDAzZXJkX3JlZ2lvbnMpO1xcbiA4MTQ6XFx0XFx0aWYgKCFyZHJlZylcXG4gODE1OlxcdFxcdFxcdGdvdG8gb3V0X3VubG9jaztcXG4gODE2OlxcdFxcbiA4MTc6XFx0XFx0aWYgKCF2Z2ljX3YzX2NoZWNrX2Jhc2Uoa3ZtKSkge1xcbiA4MTg6XFx0XFx0XFx0cmV0ID0gLUVJTlZBTDtcXG4gODE5OlxcdFxcdFxcdGdvdG8gb3V0X3VubG9jaztcXG4gODIwOlxcdFxcdH1cXG4gODIxOlxcdFxcbiA4MjI6XFx0XFx0dmdpY19jcHUtXFx1MDAzZXJkcmVnID0gcmRyZWc7XFxuIDgyMzpcXHRcXHR2Z2ljX2NwdS1cXHUwMDNlcmRyZWdfaW5kZXggPSByZHJlZy1cXHUwMDNlZnJlZV9pbmRleDtcXG4gODI0OlxcdFxcbiA4MjU6XFx0XFx0cmRfYmFzZSA9IHJkcmVnLVxcdTAwM2ViYXNlICsgcmRyZWctXFx1MDAzZWZyZWVfaW5kZXggKiBLVk1fVkdJQ19WM19SRURJU1RfU0laRTtcXG4gODI2OlxcdFxcbiA4Mjc6XFx0XFx0a3ZtX2lvZGV2aWNlX2luaXQoXFx1MDAyNnJkX2Rldi1cXHUwMDNlZGV2LCBcXHUwMDI2a3ZtX2lvX2dpY19vcHMpO1xcbiA4Mjg6XFx0XFx0cmRfZGV2LVxcdTAwM2ViYXNlX2FkZHIgPSByZF9iYXNlO1xcbiA4Mjk6XFx0XFx0cmRfZGV2LVxcdTAwM2Vpb2Rldl90eXBlID0gSU9ERVZfUkVESVNUO1xcbiA4MzA6XFx0XFx0cmRfZGV2LVxcdTAwM2VyZWdpb25zID0gdmdpY192M19yZF9yZWdpc3RlcnM7XFxuIDgzMTpcXHRcXHRyZF9kZXYtXFx1MDAzZW5yX3JlZ2lvbnMgPSBBUlJBWV9TSVpFKHZnaWNfdjNfcmRfcmVnaXN0ZXJzKTtcXG4gODMyOlxcdFxcdHJkX2Rldi1cXHUwMDNlcmVkaXN0X3ZjcHUgPSB2Y3B1O1xcbiA4MzM6XFx0XFxuIDgzNDpcXHRcXHQvKiBQcm90ZWN0ZWQgYnkgc2xvdHNfbG9jayAqL1xcbiA4MzU6XFx0XFx0cmRyZWctXFx1MDAzZWZyZWVfaW5kZXgrKztcXG4gODM2OlxcdFxcbiA4Mzc6XFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZrdm0tXFx1MDAzZWFyY2guY29uZmlnX2xvY2spO1xcbiA4Mzg6XFx0XFxuIDgzOTpcXHRcXHRyZXQgPSBrdm1faW9fYnVzX3JlZ2lzdGVyX2Rldihrdm0sIEtWTV9NTUlPX0JVUywgcmRfYmFzZSxcXG4gODQwOlxcdFxcdFxcdFxcdFxcdCAgICAgIDIgKiBTWl82NEssIFxcdTAwMjZyZF9kZXYtXFx1MDAzZWRldik7XFxuIDg0MTpcXHRcXHRpZiAocmV0KVxcbiA4NDI6XFx0XFx0XFx0dmdpY191bmRvX3JlZGlzdF9hc3NpZ25tZW50KHZjcHUpO1xcbiA4NDM6XFx0XFxuIDg0NDpcXHRcXHRyZXR1cm4gcmV0O1xcbiA4NDU6XFx0XFxuIDg0NjpcXHRvdXRfdW5sb2NrOlxcbiA4NDc6XFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZrdm0tXFx1MDAzZWFyY2guY29uZmlnX2xvY2spO1xcbiA4NDg6XFx0XFx0cmV0dXJuIHJldDtcXG4gODQ5OlxcdH1cXG4gODUwOlxcdFxcbiA4NTE6XFx0dm9pZCB2Z2ljX3VucmVnaXN0ZXJfcmVkaXN0X2lvZGV2KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4gODUyOlxcdHtcXG4gODUzOlxcdFxcdHN0cnVjdCB2Z2ljX2lvX2RldmljZSAqcmRfZGV2ID0gXFx1MDAyNnZjcHUtXFx1MDAzZWFyY2gudmdpY19jcHUucmRfaW9kZXY7XFxuIDg1NDpcXHRcXG4gODU1OlxcdFxcdGt2bV9pb19idXNfdW5yZWdpc3Rlcl9kZXYodmNwdS1cXHUwMDNla3ZtLCBLVk1fTU1JT19CVVMsIFxcdTAwMjZyZF9kZXYtXFx1MDAzZWRldik7XFxuIDg1NjpcXHR9XFxuIDg1NzpcXHRcXG4gODU4OlxcdHN0YXRpYyB2b2lkIHZnaWNfcm9sbGJhY2tfcmVkaXN0X2lvZGV2KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcXG4gODU5OlxcdFxcdFxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgdmdpY19yZWRpc3RfcmVnaW9uICpyZHJlZylcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMDg6MjY6MzEuMDIzNDc2Njk5WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDEzOTcyNDM0MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUncyBteSB0YWtlIG9uIHRob3NlIGxpbmVzIG9mIGNvZGUsIHByZXNlbnRlZCBhcyBhIHBlcnNvbmFsIHJlZmxlY3Rpb24sIGFzIGlmIEkgd2VyZSBhbmFseXppbmcgdGhlbSBteXNlbGY6XG5cbioqQW5hbHl6aW5nIHZnaWMtbW1pby12My5jOiBMaW5lcyA4NjAtMTAzMCoqXG5cbkFscmlnaHQsIEknbSBoZWFkaW5nIGRvd24gaW50byB0aGUgZ3V0cyBvZiB0aGUgYHZnaWMtbW1pby12My5jYCBmaWxlLCBzcGVjaWZpY2FsbHkgbGluZXMgODYwIHRvIDEwMzAuIFRoaXMgbGlrZWx5IGNvbnRhaW5zIGNydWNpYWwgbG9naWMgZm9yIGhhbmRsaW5nIHRoZSBNTUlPIChNZW1vcnktTWFwcGVkIEkvTykgaW50ZXJhY3Rpb25zIGZvciB0aGUgVmlydHVhbCBHSUMgKEdlbmVyaWMgSW50ZXJydXB0IENvbnRyb2xsZXIpIHZlcnNpb24gMywgd2l0aGluIHRoZSBBUk02NCBLVk0gZW52aXJvbm1lbnQuIEdpdmVuIHRoZSBsaW5lIG51bWJlcnMsIEknbSBleHBlY3RpbmcgdGhpcyBpcyBnb2luZyB0byBiZSBhIHJlbGF0aXZlbHkgc2VsZi1jb250YWluZWQsIGJ1dCBpbXBvcnRhbnQsIGJsb2NrIG9mIGNvZGUuIE15IGh1bmNoIGlzIHRoYXQgdGhpcyBkZWFscyB3aXRoIGVpdGhlciB0aGUgcmVhZCBvciB3cml0ZSBoYW5kbGluZyBmb3IgYSBzZXQgb2YgcmVnaXN0ZXJzLCBvciBwZXJoYXBzIGEgY29yZSBzdGF0ZSB1cGRhdGUgd2l0aGluIHRoZSB2Z2ljLiBMZXQgbWUgYW5hbHl6ZSB0aGlzIGEgbGl0dGxlIGRlZXBlciwgYW5kIHNlZSBpZiBJIGNhbiBmaWd1cmUgb3V0IHRoZSBjb250ZXh0LlxuXG5JIGFtIGxvb2tpbmcgdG8gdW5kZXJzdGFuZCBleGFjdGx5IGhvdyB0aGUgS1ZNIGh5cGVydmlzb3IgaXMgaW50ZXJhY3Rpbmcgd2l0aCB0aGUgdmlydHVhbCBHSUMuIEkgd2lsbCBzdGFydCBieSBzZWVpbmcgaG93IHRoZSBkaWZmZXJlbnQgcmVnaXN0ZXJzIGluIHRoZSB2aXJ0dWFsIEdJQyBhcmUgbWFwcGVkLiBGcm9tIHRoZXJlLCBJIHdpbGwgbGlrZWx5IHVuZGVyc3RhbmQgaG93IGludGVycnVwdHMgYXJlIGluamVjdGVkIGludG8gdGhlIGd1ZXN0IFZNcy4gSSBhbSBtb3N0IGludGVyZXN0ZWQgaW4gc2VlaW5nIGlmIHRoZXJlIGFyZSBhbnkgcmFjZSBjb25kaXRpb25zIGJldHdlZW4gdGhlIGhvc3QgYW5kIGd1ZXN0LCBhbmQgaG93IHRoaXMgaXMgaGFuZGxlZCwgaWYgc28uIFRoZSBtb3N0IGltcG9ydGFudCB0aGluZyBoZXJlIGlzIHRvIG1ha2Ugc3VyZSB0aGlzIGlzIGVmZmljaWVudCwgZ2l2ZW4gaG93IGludGVycnVwdCBkZWxpdmVyeSBpcyBhIGhpZ2ggZnJlcXVlbmN5IGV2ZW50LlxuXG5JIHdpbGwgYWxzbyBiZSBvbiB0aGUgbG9va291dCBmb3IgYW55IHBvdGVudGlhbCBhcmVhcyBmb3Igb3B0aW1pemF0aW9uLCBvciBwb2ludHMgd2hlcmUgd2UgY291bGQgYmUgaW5hZHZlcnRlbnRseSBpbnRyb2R1Y2luZyBsYXRlbmN5LiBUaGUgZ29hbCBoZXJlIGlzIHRvIGdldCBhIHNvbGlkIGdyYXNwIG9mIGhvdyB0aGUgTU1JTyBtZWNoYW5pc20gd29ya3MgaW4gdGhpcyBWZ2ljLVYzIGNvbnRleHQuIEkgYWxzbyB3YW50IHRvIGlkZW50aWZ5IGhvdyB0aGUgY29kZSBtaWdodCBpbnRlcmFjdCB3aXRoIG90aGVyIHBhcnRzIG9mIHRoZSBLVk0gaW5mcmFzdHJ1Y3R1cmUsIHN1Y2ggYXMgdGhlIHZDUFUgb3IgdGhlIGludGVycnVwdCBjb250cm9sbGVyIGVtdWxhdGlvbiBsYXllcnMuIFRoaXMgcGFydGljdWxhciBzZWN0aW9uIGhhcyB0byBiZSBjb21wbGV0ZWx5IGNvcnJlY3QsIGFzIGludGVycnVwdCBkZWxpdmVyeSBpcyBjcnVjaWFsIGZvciBwcm9wZXIgb3BlcmF0aW9uLiBJJ20gaG9waW5nIEkgY2FuIGZpbmQgYSBzZWN0aW9uIHRoYXQgaXMgdW5kZXJzdGFuZGFibGUsIHNvIHRoYXQgSSBjYW4gbG9vayBhdCBtb3JlIGNvbXBsaWNhdGVkIGFyZWFzIGxhdGVyLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5NDcwLCJPdXRwdXRUb2tlbnMiOjUwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQwODoyNjozNS4xNjMyMDMwMjJaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5MjYwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJhcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtbW1pby12My5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDg1OCxcbiAgXCJMaW5lQ291bnRcIjogODBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDg1ODpcXHRzdGF0aWMgdm9pZCB2Z2ljX3JvbGxiYWNrX3JlZGlzdF9pb2RldihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXFxuIDg1OTpcXHRcXHRcXHRcXHRcXHQgICAgICAgc3RydWN0IHZnaWNfcmVkaXN0X3JlZ2lvbiAqcmRyZWcpXFxuIDg2MDpcXHR7XFxuIDg2MTpcXHRcXHRzdHJ1Y3QgdmdpY19jcHUgKnZnaWNfY3B1ID0gXFx1MDAyNnZjcHUtXFx1MDAzZWFyY2gudmdpY19jcHU7XFxuIDg2MjpcXHRcXG4gODYzOlxcdFxcdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXFx1MDAyNnZjcHUtXFx1MDAzZWt2bS1cXHUwMDNlc2xvdHNfbG9jayk7XFxuIDg2NDpcXHRcXG4gODY1OlxcdFxcdGlmICh2Z2ljX2NwdS1cXHUwMDNlcmRyZWcgIT0gcmRyZWcpXFxuIDg2NjpcXHRcXHRcXHRyZXR1cm47XFxuIDg2NzpcXHRcXG4gODY4OlxcdFxcdHZnaWNfdW5yZWdpc3Rlcl9yZWRpc3RfaW9kZXYodmNwdSk7XFxuIDg2OTpcXHRcXG4gODcwOlxcdFxcdGd1YXJkKG11dGV4KShcXHUwMDI2dmNwdS1cXHUwMDNla3ZtLVxcdTAwM2VhcmNoLmNvbmZpZ19sb2NrKTtcXG4gODcxOlxcdFxcdHZnaWNfY3B1LVxcdTAwM2VyZHJlZyA9IE5VTEw7XFxuIDg3MjpcXHRcXHR2Z2ljX2NwdS1cXHUwMDNlcmRfaW9kZXYuYmFzZV9hZGRyID0gVkdJQ19BRERSX1VOREVGO1xcbiA4NzM6XFx0fVxcbiA4NzQ6XFx0XFxuIDg3NTpcXHRzdGF0aWMgaW50IHZnaWNfcmVnaXN0ZXJfYWxsX3JlZGlzdF9pb2RldnMoc3RydWN0IGt2bSAqa3ZtLFxcbiA4NzY6XFx0XFx0XFx0XFx0XFx0XFx0ICAgc3RydWN0IHZnaWNfcmVkaXN0X3JlZ2lvbiAqcmRyZWcpXFxuIDg3NzpcXHR7XFxuIDg3ODpcXHRcXHRzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHU7XFxuIDg3OTpcXHRcXHR1bnNpZ25lZCBsb25nIGM7XFxuIDg4MDpcXHRcXHRpbnQgcmV0ID0gMDtcXG4gODgxOlxcdFxcbiA4ODI6XFx0XFx0bG9ja2RlcF9hc3NlcnRfaGVsZChcXHUwMDI2a3ZtLVxcdTAwM2VzbG90c19sb2NrKTtcXG4gODgzOlxcdFxcbiA4ODQ6XFx0XFx0a3ZtX2Zvcl9lYWNoX3ZjcHUoYywgdmNwdSwga3ZtKSB7XFxuIDg4NTpcXHRcXHRcXHRyZXQgPSB2Z2ljX3JlZ2lzdGVyX3JlZGlzdF9pb2Rldih2Y3B1KTtcXG4gODg2OlxcdFxcdFxcdGlmIChyZXQpXFxuIDg4NzpcXHRcXHRcXHRcXHRicmVhaztcXG4gODg4OlxcdFxcdH1cXG4gODg5OlxcdFxcbiA4OTA6XFx0XFx0aWYgKHJldCkge1xcbiA4OTE6XFx0XFx0XFx0LyogVW5kbyBhc3NpZ25tZW50cyBtYWRlIGZyb20gdGhlIHJlZ2lvbiBiZWluZyBhZGRlZC4gKi9cXG4gODkyOlxcdFxcdFxcdGludCBpO1xcbiA4OTM6XFx0XFxuIDg5NDpcXHRcXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgYzsgaSsrKSB7XFxuIDg5NTpcXHRcXHRcXHRcXHR2Y3B1ID0ga3ZtX2dldF92Y3B1KGt2bSwgaSk7XFxuIDg5NjpcXHRcXHRcXHRcXHR2Z2ljX3JvbGxiYWNrX3JlZGlzdF9pb2Rldih2Y3B1LCByZHJlZyk7XFxuIDg5NzpcXHRcXHRcXHR9XFxuIDg5ODpcXHRcXHR9XFxuIDg5OTpcXHRcXG4gOTAwOlxcdFxcdHJldHVybiByZXQ7XFxuIDkwMTpcXHR9XFxuIDkwMjpcXHRcXG4gOTAzOlxcdC8qKlxcbiA5MDQ6XFx0ICogdmdpY192M19hbGxvY19yZWRpc3RfcmVnaW9uIC0gQWxsb2NhdGUgYSBuZXcgcmVkaXN0cmlidXRvciByZWdpb25cXG4gOTA1OlxcdCAqXFxuIDkwNjpcXHQgKiBQZXJmb3JtcyB2YXJpb3VzIGNoZWNrcyBiZWZvcmUgaW5zZXJ0aW5nIHRoZSByZGlzdCByZWdpb24gaW4gdGhlIGxpc3QuXFxuIDkwNzpcXHQgKiBUaG9zZSB0ZXN0cyBkZXBlbmQgb24gd2hldGhlciB0aGUgc2l6ZSBvZiB0aGUgcmRpc3QgcmVnaW9uIGlzIGtub3duXFxuIDkwODpcXHQgKiAoaWUuIGNvdW50ICE9IDApLiBUaGUgbGlzdCBpcyBzb3J0ZWQgYnkgcmRpc3QgcmVnaW9uIGluZGV4LlxcbiA5MDk6XFx0ICpcXG4gOTEwOlxcdCAqIEBrdm06IGt2bSBoYW5kbGVcXG4gOTExOlxcdCAqIEBpbmRleDogcmVkaXN0IHJlZ2lvbiBpbmRleFxcbiA5MTI6XFx0ICogQGJhc2U6IGJhc2Ugb2YgdGhlIG5ldyByZGlzdCByZWdpb25cXG4gOTEzOlxcdCAqIEBjb3VudDogbnVtYmVyIG9mIHJlZGlzdHJpYnV0b3JzIHRoZSByZWdpb24gaXMgbWFkZSBvZiAoMCBpbiB0aGUgb2xkIHN0eWxlXFxuIDkxNDpcXHQgKiBzaW5nbGUgcmVnaW9uLCB3aG9zZSBzaXplIGlzIGluZHVjZWQgZnJvbSB0aGUgbnVtYmVyIG9mIHZjcHVzKVxcbiA5MTU6XFx0ICpcXG4gOTE2OlxcdCAqIFJldHVybiAwIG9uIHN1Y2Nlc3MsIFxcdTAwM2MgMCBvdGhlcndpc2VcXG4gOTE3OlxcdCAqL1xcbiA5MTg6XFx0c3RhdGljIGludCB2Z2ljX3YzX2FsbG9jX3JlZGlzdF9yZWdpb24oc3RydWN0IGt2bSAqa3ZtLCB1aW50MzJfdCBpbmRleCxcXG4gOTE5OlxcdFxcdFxcdFxcdFxcdCAgICAgICBncGFfdCBiYXNlLCB1aW50MzJfdCBjb3VudClcXG4gOTIwOlxcdHtcXG4gOTIxOlxcdFxcdHN0cnVjdCB2Z2ljX2Rpc3QgKmQgPSBcXHUwMDI2a3ZtLVxcdTAwM2VhcmNoLnZnaWM7XFxuIDkyMjpcXHRcXHRzdHJ1Y3QgdmdpY19yZWRpc3RfcmVnaW9uICpyZHJlZztcXG4gOTIzOlxcdFxcdHN0cnVjdCBsaXN0X2hlYWQgKnJkX3JlZ2lvbnMgPSBcXHUwMDI2ZC1cXHUwMDNlcmRfcmVnaW9ucztcXG4gOTI0OlxcdFxcdGludCBucl92Y3B1cyA9IGF0b21pY19yZWFkKFxcdTAwMjZrdm0tXFx1MDAzZW9ubGluZV92Y3B1cyk7XFxuIDkyNTpcXHRcXHRzaXplX3Qgc2l6ZSA9IGNvdW50ID8gY291bnQgKiBLVk1fVkdJQ19WM19SRURJU1RfU0laRVxcbiA5MjY6XFx0XFx0XFx0XFx0ICAgIDogbnJfdmNwdXMgKiBLVk1fVkdJQ19WM19SRURJU1RfU0laRTtcXG4gOTI3OlxcdFxcdGludCByZXQ7XFxuIDkyODpcXHRcXG4gOTI5OlxcdFxcdC8qIGNyb3NzIHRoZSBlbmQgb2YgbWVtb3J5ID8gKi9cXG4gOTMwOlxcdFxcdGlmIChiYXNlICsgc2l6ZSBcXHUwMDNjIGJhc2UpXFxuIDkzMTpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gOTMyOlxcdFxcbiA5MzM6XFx0XFx0aWYgKGxpc3RfZW1wdHkocmRfcmVnaW9ucykpIHtcXG4gOTM0OlxcdFxcdFxcdGlmIChpbmRleCAhPSAwKVxcbiA5MzU6XFx0XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIDkzNjpcXHRcXHR9IGVsc2Uge1xcbiA5Mzc6XFx0XFx0XFx0cmRyZWcgPSBsaXN0X2xhc3RfZW50cnkocmRfcmVnaW9ucyxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMDg6MjY6MzUuMTYzMjk3NTMyWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzExNzA2MjM0OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBhc3N1bWluZyBJJ20gZGVlcGx5IGZhbWlsaWFyIHdpdGggQVJNNjQgS1ZNIGFuZCBWR0M6XG5cbioqRGl2aW5nIGludG8gdGhlIFZnaWMtTU1JTy1WMy5jIENvZGUqKlxuXG5SaWdodCwgbGV0J3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkgbmVlZCB0byB0YWtlIGEgbG9vayBhdCBhIHNwZWNpZmljIHNlY3Rpb24gb2YgdGhlIHZpcnR1YWwgR0lDIE1NSU8gY29kZS4gU3BlY2lmaWNhbGx5LCBsaW5lcyA5ODAgdGhyb3VnaCAxMDMwIHdpdGhpbiB0aGUgYGFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1tbWlvLXYzLmNgIGZpbGUuIFRoaXMgdGVsbHMgbWUgdGhlcmUncyBzb21ldGhpbmcgc3BlY2lmaWMgaW4gdGhlIFYzIE1NSU8gZW11bGF0aW9uIHRoYXQgcmVxdWlyZXMgbXkgYXR0ZW50aW9uLiBJJ20gcHJvYmFibHkgZGVhbGluZyB3aXRoIGFuIGlzc3VlLCBwZXJoYXBzIGEgcGVyZm9ybWFuY2UgYm90dGxlbmVjaywgb3IgZGVidWdnaW5nIGEgcmVwb3J0ZWQgYnVnIHJlbGF0ZWQgdG8gaG93IHRoZSB2aXJ0dWFsIEdJQyBoYW5kbGVzIG1lbW9yeS1tYXBwZWQgSS9PLiBUaGUgbGluZSBudW1iZXJzIG5hcnJvdyB0aGUgc2NvcGUsIHdoaWNoIG1lYW5zIEkgc2hvdWxkIHF1aWNrbHkgaXNvbGF0ZSB0aGUgcmVsZXZhbnQgY29kZSBibG9jayBhbmQgdW5kZXJzdGFuZCBpdHMgZnVuY3Rpb24gd2l0aGluIHRoZSBWMyBNTUlPIGZyYW1ld29yay4gSSdtIGV4cGVjdGluZyB0aGlzIGJsb2NrIHdpbGwgcmV2ZWFsIHRoZSBjcnV4IG9mIHRoZSBwcm9ibGVtLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTI4MywiT3V0cHV0VG9rZW5zIjo1MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMDg6MjY6MzguMjgwMzYxNzYxWiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTI3OTAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1tbWlvLXYzLmNcIixcbiAgXCJGaXJzdExpbmVcIjogOTgwLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgOTgwOlxcdFxcdHJldHVybiAwO1xcbiA5ODE6XFx0ZnJlZTpcXG4gOTgyOlxcdFxcdGtmcmVlKHJkcmVnKTtcXG4gOTgzOlxcdFxcdHJldHVybiByZXQ7XFxuIDk4NDpcXHR9XFxuIDk4NTpcXHRcXG4gOTg2OlxcdHZvaWQgdmdpY192M19mcmVlX3JlZGlzdF9yZWdpb24oc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3QgdmdpY19yZWRpc3RfcmVnaW9uICpyZHJlZylcXG4gOTg3OlxcdHtcXG4gOTg4OlxcdFxcdHN0cnVjdCBrdm1fdmNwdSAqdmNwdTtcXG4gOTg5OlxcdFxcdHVuc2lnbmVkIGxvbmcgYztcXG4gOTkwOlxcdFxcbiA5OTE6XFx0XFx0bG9ja2RlcF9hc3NlcnRfaGVsZChcXHUwMDI2a3ZtLVxcdTAwM2VhcmNoLmNvbmZpZ19sb2NrKTtcXG4gOTkyOlxcdFxcbiA5OTM6XFx0XFx0LyogR2FyYmFnZSBjb2xsZWN0IHRoZSByZWdpb24gKi9cXG4gOTk0OlxcdFxcdGt2bV9mb3JfZWFjaF92Y3B1KGMsIHZjcHUsIGt2bSkge1xcbiA5OTU6XFx0XFx0XFx0aWYgKHZjcHUtXFx1MDAzZWFyY2gudmdpY19jcHUucmRyZWcgPT0gcmRyZWcpXFxuIDk5NjpcXHRcXHRcXHRcXHR2Y3B1LVxcdTAwM2VhcmNoLnZnaWNfY3B1LnJkcmVnID0gTlVMTDtcXG4gOTk3OlxcdFxcdH1cXG4gOTk4OlxcdFxcbiA5OTk6XFx0XFx0bGlzdF9kZWwoXFx1MDAyNnJkcmVnLVxcdTAwM2VsaXN0KTtcXG4xMDAwOlxcdFxcdGtmcmVlKHJkcmVnKTtcXG4xMDAxOlxcdH1cXG4xMDAyOlxcdFxcbjEwMDM6XFx0aW50IHZnaWNfdjNfc2V0X3JlZGlzdF9iYXNlKHN0cnVjdCBrdm0gKmt2bSwgdTMyIGluZGV4LCB1NjQgYWRkciwgdTMyIGNvdW50KVxcbjEwMDQ6XFx0e1xcbjEwMDU6XFx0XFx0c3RydWN0IHZnaWNfcmVkaXN0X3JlZ2lvbiAqcmRyZWc7XFxuMTAwNjpcXHRcXHRpbnQgcmV0O1xcbjEwMDc6XFx0XFxuMTAwODpcXHRcXHRtdXRleF9sb2NrKFxcdTAwMjZrdm0tXFx1MDAzZWFyY2guY29uZmlnX2xvY2spO1xcbjEwMDk6XFx0XFx0cmV0ID0gdmdpY192M19hbGxvY19yZWRpc3RfcmVnaW9uKGt2bSwgaW5kZXgsIGFkZHIsIGNvdW50KTtcXG4xMDEwOlxcdFxcdGlmICghcmV0KVxcbjEwMTE6XFx0XFx0XFx0cmRyZWcgPSB2Z2ljX3YzX3JkaXN0X3JlZ2lvbl9mcm9tX2luZGV4KGt2bSwgaW5kZXgpO1xcbjEwMTI6XFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZrdm0tXFx1MDAzZWFyY2guY29uZmlnX2xvY2spO1xcbjEwMTM6XFx0XFx0aWYgKHJldClcXG4xMDE0OlxcdFxcdFxcdHJldHVybiByZXQ7XFxuMTAxNTpcXHRcXG4xMDE2OlxcdFxcdC8qXFxuMTAxNzpcXHRcXHQgKiBSZWdpc3RlciBpb2RldnMgZm9yIGVhY2ggZXhpc3RpbmcgVkNQVS4gIEFkZGluZyBtb3JlIFZDUFVzXFxuMTAxODpcXHRcXHQgKiBhZnRlcndhcmRzIHdpbGwgcmVnaXN0ZXIgdGhlIGlvZGV2cyB3aGVuIG5lZWRlZC5cXG4xMDE5OlxcdFxcdCAqL1xcbjEwMjA6XFx0XFx0cmV0ID0gdmdpY19yZWdpc3Rlcl9hbGxfcmVkaXN0X2lvZGV2cyhrdm0sIHJkcmVnKTtcXG4xMDIxOlxcdFxcdGlmIChyZXQpIHtcXG4xMDIyOlxcdFxcdFxcdG11dGV4X2xvY2soXFx1MDAyNmt2bS1cXHUwMDNlYXJjaC5jb25maWdfbG9jayk7XFxuMTAyMzpcXHRcXHRcXHR2Z2ljX3YzX2ZyZWVfcmVkaXN0X3JlZ2lvbihrdm0sIHJkcmVnKTtcXG4xMDI0OlxcdFxcdFxcdG11dGV4X3VubG9jayhcXHUwMDI2a3ZtLVxcdTAwM2VhcmNoLmNvbmZpZ19sb2NrKTtcXG4xMDI1OlxcdFxcdFxcdHJldHVybiByZXQ7XFxuMTAyNjpcXHRcXHR9XFxuMTAyNzpcXHRcXG4xMDI4OlxcdFxcdHJldHVybiAwO1xcbjEwMjk6XFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQwODoyNjozOC4yODA0OTE0NDFaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1ODQ3MjcxMDQ1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkRlbHZpbmcgaW50byBBUk02NCBLVk0gYW5kIFZHSUMgQ29uZmlndXJhdGlvbioqXG5cbkFscmlnaHQsIGxldCdzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgS2NvbmZpZyBvcHRpb25zIHRoYXQgZ292ZXJuIHRoZSBiZWhhdmlvciBvZiBBUk02NCBLVk0sIGVzcGVjaWFsbHkgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSBWaXJ0dWFsIEdJQyAoVkdJQykuIFRoaXMgbWVhbnMgSSdtIGdvaW5nIHRvIGRpdmUgcmlnaHQgaW50byB0aGUgaGVhcnQgb2YgdGhlIG1hdHRlciDigJMgdGhlIGBhcmNoL2FybTY0L2t2bS9LY29uZmlnYCBmaWxlLiBUaGF0J3Mgd2hlcmUgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gdmFyaWFibGVzIHNob3VsZCBiZSBkZWZpbmVkIGFuZCBsaW5rZWQuIFRoaXMgaXMgZ29pbmcgdG8gZ2l2ZSBtZSBhIHNvbGlkIGZvdW5kYXRpb24gZm9yIGZ1cnRoZXIgaW52ZXN0aWdhdGlvbnMgaW50byB0aGUga2VybmVsIHNvdXJjZS4gVGltZSB0byBnZXQgdG8gd29yay5cblxuXG4iLCJJbnB1dFRva2VucyI6MTIzNTQsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozOCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDA4OjI2OjQ0LjEyNzc2NTE2NloiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTU1NDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiYXJjaC9hcm02NC9rdm0vS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiAxMDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuICAgMjpcXHQjXFxuICAgMzpcXHQjIEtWTSBjb25maWd1cmF0aW9uXFxuICAgNDpcXHQjXFxuICAgNTpcXHRcXG4gICA2OlxcdHNvdXJjZSBcXFwidmlydC9rdm0vS2NvbmZpZ1xcXCJcXG4gICA3OlxcdFxcbiAgIDg6XFx0bWVudWNvbmZpZyBWSVJUVUFMSVpBVElPTlxcbiAgIDk6XFx0XFx0Ym9vbCBcXFwiVmlydHVhbGl6YXRpb25cXFwiXFxuICAxMDpcXHRcXHRoZWxwXFxuICAxMTpcXHRcXHQgIFNheSBZIGhlcmUgdG8gZ2V0IHRvIHNlZSBvcHRpb25zIGZvciB1c2luZyB5b3VyIExpbnV4IGhvc3QgdG8gcnVuXFxuICAxMjpcXHRcXHQgIG90aGVyIG9wZXJhdGluZyBzeXN0ZW1zIGluc2lkZSB2aXJ0dWFsIG1hY2hpbmVzIChndWVzdHMpLlxcbiAgMTM6XFx0XFx0ICBUaGlzIG9wdGlvbiBhbG9uZSBkb2VzIG5vdCBhZGQgYW55IGtlcm5lbCBjb2RlLlxcbiAgMTQ6XFx0XFxuICAxNTpcXHRcXHQgIElmIHlvdSBzYXkgTiwgYWxsIG9wdGlvbnMgaW4gdGhpcyBzdWJtZW51IHdpbGwgYmUgc2tpcHBlZCBhbmRcXG4gIDE2OlxcdFxcdCAgZGlzYWJsZWQuXFxuICAxNzpcXHRcXG4gIDE4OlxcdGlmIFZJUlRVQUxJWkFUSU9OXFxuICAxOTpcXHRcXG4gIDIwOlxcdG1lbnVjb25maWcgS1ZNXFxuICAyMTpcXHRcXHRib29sIFxcXCJLZXJuZWwtYmFzZWQgVmlydHVhbCBNYWNoaW5lIChLVk0pIHN1cHBvcnRcXFwiXFxuICAyMjpcXHRcXHRzZWxlY3QgS1ZNX0NPTU1PTlxcbiAgMjM6XFx0XFx0c2VsZWN0IEtWTV9HRU5FUklDX0hBUkRXQVJFX0VOQUJMSU5HXFxuICAyNDpcXHRcXHRzZWxlY3QgSEFWRV9LVk1fQ1BVX1JFTEFYX0lOVEVSQ0VQVFxcbiAgMjU6XFx0XFx0c2VsZWN0IEtWTV9NTUlPXFxuICAyNjpcXHRcXHRzZWxlY3QgS1ZNX0dFTkVSSUNfRElSVFlMT0dfUkVBRF9QUk9URUNUXFxuICAyNzpcXHRcXHRzZWxlY3QgVklSVF9YRkVSX1RPX0dVRVNUX1dPUktcXG4gIDI4OlxcdFxcdHNlbGVjdCBLVk1fVkZJT1xcbiAgMjk6XFx0XFx0c2VsZWN0IEhBVkVfS1ZNX0RJUlRZX1JJTkdfQUNRX1JFTFxcbiAgMzA6XFx0XFx0c2VsZWN0IE5FRURfS1ZNX0RJUlRZX1JJTkdfV0lUSF9CSVRNQVBcXG4gIDMxOlxcdFxcdHNlbGVjdCBIQVZFX0tWTV9NU0lcXG4gIDMyOlxcdFxcdHNlbGVjdCBIQVZFX0tWTV9JUlFDSElQXFxuICAzMzpcXHRcXHRzZWxlY3QgSEFWRV9LVk1fSVJRX1JPVVRJTkdcXG4gIDM0OlxcdFxcdHNlbGVjdCBIQVZFX0tWTV9JUlFfQllQQVNTXFxuICAzNTpcXHRcXHRzZWxlY3QgSEFWRV9LVk1fUkVBRE9OTFlfTUVNXFxuICAzNjpcXHRcXHRzZWxlY3QgSEFWRV9LVk1fVkNQVV9SVU5fUElEX0NIQU5HRVxcbiAgMzc6XFx0XFx0c2VsZWN0IFNDSEVEX0lORk9cXG4gIDM4OlxcdFxcdHNlbGVjdCBHVUVTVF9QRVJGX0VWRU5UUyBpZiBQRVJGX0VWRU5UU1xcbiAgMzk6XFx0XFx0c2VsZWN0IEtWTV9HVUVTVF9NRU1GRFxcbiAgNDA6XFx0XFx0aGVscFxcbiAgNDE6XFx0XFx0ICBTdXBwb3J0IGhvc3RpbmcgdmlydHVhbGl6ZWQgZ3Vlc3QgbWFjaGluZXMuXFxuICA0MjpcXHRcXG4gIDQzOlxcdFxcdCAgSWYgdW5zdXJlLCBzYXkgTi5cXG4gIDQ0OlxcdFxcbiAgNDU6XFx0aWYgS1ZNXFxuICA0NjpcXHRcXG4gIDQ3OlxcdGNvbmZpZyBQVERVTVBfU1RBR0UyX0RFQlVHRlNcXG4gIDQ4OlxcdFxcdGJvb2wgXFxcIlByZXNlbnQgdGhlIHN0YWdlLTIgcGFnZXRhYmxlcyB0byBkZWJ1Z2ZzXFxcIlxcbiAgNDk6XFx0XFx0ZGVwZW5kcyBvbiBERUJVR19LRVJORUxcXG4gIDUwOlxcdFxcdGRlcGVuZHMgb24gREVCVUdfRlNcXG4gIDUxOlxcdFxcdGRlcGVuZHMgb24gQVJDSF9IQVNfUFREVU1QXFxuICA1MjpcXHRcXHRzZWxlY3QgUFREVU1QXFxuICA1MzpcXHRcXHRkZWZhdWx0IG5cXG4gIDU0OlxcdFxcdGhlbHBcXG4gIDU1OlxcdFxcdCAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCB0byBzaG93IHRoZSBzdGFnZS0yIGtlcm5lbCBwYWdldGFibGVzXFxuICA1NjpcXHRcXHQgIGxheW91dCBpbiBhIGRlYnVnZnMgZmlsZS4gVGhpcyBpbmZvcm1hdGlvbiBpcyBvbmx5IHVzZWZ1bCBmb3Iga2VybmVsIGRldmVsb3BlcnNcXG4gIDU3OlxcdFxcdCAgd2hvIGFyZSB3b3JraW5nIGluIGFyY2hpdGVjdHVyZSBzcGVjaWZpYyBhcmVhcyBvZiB0aGUga2VybmVsLlxcbiAgNTg6XFx0XFx0ICBJdCBpcyBwcm9iYWJseSBub3QgYSBnb29kIGlkZWEgdG8gZW5hYmxlIHRoaXMgZmVhdHVyZSBpbiBhIHByb2R1Y3Rpb25cXG4gIDU5OlxcdFxcdCAga2VybmVsLlxcbiAgNjA6XFx0XFxuICA2MTpcXHRcXHQgIElmIGluIGRvdWJ0LCBzYXkgTi5cXG4gIDYyOlxcdFxcbiAgNjM6XFx0Y29uZmlnIE5WSEVfRUwyX0RFQlVHXFxuICA2NDpcXHRcXHRib29sIFxcXCJEZWJ1ZyBtb2RlIGZvciBub24tVkhFIEVMMiBvYmplY3RcXFwiXFxuICA2NTpcXHRcXHRkZWZhdWx0IG5cXG4gIDY2OlxcdFxcdGhlbHBcXG4gIDY3OlxcdFxcdCAgU2F5IFkgaGVyZSB0byBlbmFibGUgdGhlIGRlYnVnIG1vZGUgZm9yIHRoZSBub24tVkhFIEtWTSBFTDIgb2JqZWN0LlxcbiAgNjg6XFx0XFx0ICBGYWlsdXJlIHJlcG9ydHMgd2lsbCBCVUcoKSBpbiB0aGUgaHlwZXJ2aXNvci4gVGhpcyBpcyBpbnRlbmRlZCBmb3JcXG4gIDY5OlxcdFxcdCAgbG9jYWwgRUwyIGh5cGVydmlzb3IgZGV2ZWxvcG1lbnQuXFxuICA3MDpcXHRcXG4gIDcxOlxcdFxcdCAgSWYgdW5zdXJlLCBzYXkgTi5cXG4gIDcyOlxcdFxcbiAgNzM6XFx0aWYgTlZIRV9FTDJfREVCVUdcXG4gIDc0OlxcdFxcbiAgNzU6XFx0Y29uZmlnIE5WSEVfRUwyX1RSQUNJTkdcXG4gIDc2OlxcdFxcdGJvb2xcXG4gIDc3OlxcdFxcdGRlcGVuZHMgb24gVFJBQ0lORyBcXHUwMDI2XFx1MDAyNiBGVFJBQ0VcXG4gIDc4OlxcdFxcdHNlbGVjdCBUUkFDRV9SRU1PVEVcXG4gIDc5OlxcdFxcdGRlZmF1bHQgeVxcbiAgODA6XFx0XFxuICA4MTpcXHRjb25maWcgUEtWTV9ESVNBQkxFX1NUQUdFMl9PTl9QQU5JQ1xcbiAgODI6XFx0XFx0Ym9vbCBcXFwiRGlzYWJsZSB0aGUgaG9zdCBzdGFnZS0yIG9uIHBhbmljXFxcIlxcbiAgODM6XFx0XFx0ZGVmYXVsdCBuXFxuICA4NDpcXHRcXHRoZWxwXFxuICA4NTpcXHRcXHQgIFJlbGF4IHRoZSBob3N0IHN0YWdlLTIgb24gaHlwZXJ2aXNvciBwYW5pYyB0byBhbGxvdyB0aGUga2VybmVsIHRvXFxuICA4NjpcXHRcXHQgIHVud2luZCBhbmQgc3ltYm9saXplIHRoZSBoeXBlcnZpc29yIHN0YWNrdHJhY2UuIFRoaXMgaG93ZXZlciB0YW1wZXJzXFxuICA4NzpcXHRcXHQgIHRoZSBzeXN0ZW0gc2VjdXJpdHkuIFRoaXMgaXMgaW50ZW5kZWQgZm9yIGxvY2FsIEVMMiBoeXBlcnZpc29yXFxuICA4ODpcXHRcXHQgIGRldmVsb3BtZW50LlxcbiAgODk6XFx0XFxuICA5MDpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IE4uXFxuICA5MTpcXHRcXG4gIDkyOlxcdGNvbmZpZyBQS1ZNX1NUQUNLVFJBQ0VcXG4gIDkzOlxcdFxcdGJvb2wgXFxcIlByb3RlY3RlZCBLVk0gaHlwZXJ2aXNvciBzdGFja3RyYWNlc1xcXCJcXG4gIDk0OlxcdFxcdGRlcGVuZHMgb24gUEtWTV9ESVNBQkxFX1NUQUdFMl9PTl9QQU5JQ1xcbiAgOTU6XFx0XFx0ZGVmYXVsdCB5XFxuICA5NjpcXHRcXHRoZWxwXFxuICA5NzpcXHRcXHQgIFNheSBZIGhlcmUgdG8gZW5hYmxlIHBLVk0gaHlwZXJ2aXNvciBzdGFja3RyYWNlcyBvbiBoeXBfcGFuaWMoKVxcbiAgOTg6XFx0XFxuICA5OTpcXHRcXHQgIElmIHVzaW5nIHByb3RlY3RlZCBuVkhFIG1vZGUsIGJ1dCBjYW5ub3QgYWZmb3JkIHRoZSBhc3NvY2lhdGVkXFxuIDEwMDpcXHRcXHQgIG1lbW9yeSBjb3N0IChsZXNzIHRoYW4gMC43NSBwYWdlIHBlciBDUFUpIG9mIHBLVk0gc3RhY2t0cmFjZXMsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDA4OjI2OjQ0LjEyNzg4MzQ3NloiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNzE0MTUxODQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhlIHRob3VnaHQgcHJvY2VzcyB5b3UgZGVzY3JpYmVkOlxuXG4qKkV4YW1pbmluZyB0aGUgS1ZNL0FSTTY0IEJ1aWxkIFByb2Nlc3MqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgYHZnaWMtbW1pby12My5jYCBpcyBiZWluZyBjb21waWxlZC4gR2l2ZW4gaXRzIGFzc29jaWF0aW9uIHdpdGggdGhlIFZpcnR1YWwgR0lDIGFuZCBBUk02NCBhcmNoaXRlY3R1cmUsIG15IGZpcnN0IHN0ZXAgaXMgdG8gZGlnIGludG8gdGhlIE1ha2VmaWxlcy4gSSdsbCBzdGFydCBieSBjaGVja2luZyB0aGUgTWFrZWZpbGVzIGluIGBhcmNoL2FybTY0L2t2bS9gIGFuZCB0aGVuIGBhcmNoL2FybTY0L2t2bS92Z2ljL2AuIFRoaXMgc2hvdWxkIHJldmVhbCB0aGUgYnVpbGQgcnVsZXMgYW5kIGRlcGVuZGVuY2llcyBmb3IgdGhhdCBzcGVjaWZpYyBmaWxlLiBIb3BlZnVsbHksIEkgY2FuIHRyYWNlIHRoZSBmbGFncywgaW5jbHVkZXMsIGFuZCBsaW5raW5nIHRvIHNlZSBob3cgaXQgYWxsIGNvbWVzIHRvZ2V0aGVyIGluIHRoZSBvdmVyYWxsIEtWTSBidWlsZCBmb3IgdGhpcyBhcmNoaXRlY3R1cmUuIEl0J3MgdXN1YWxseSBzdHJhaWdodGZvcndhcmQgdG8gc2VlIHRoZSByZWxldmFudCBvYmplY3QgZmlsZSBhbmQgd2hlcmUgaXQgZml0cyBpbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM4ODcsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDA4OjI2OjQ2Ljg0MjAzNzk5NVoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NTkzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJhcmNoL2FybTY0L2t2bS9NYWtlZmlsZVwiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG4gICAyOlxcdCNcXG4gICAzOlxcdCMgTWFrZWZpbGUgZm9yIEtlcm5lbC1iYXNlZCBWaXJ0dWFsIE1hY2hpbmUgbW9kdWxlXFxuICAgNDpcXHQjXFxuICAgNTpcXHRcXG4gICA2OlxcdGNjZmxhZ3MteSArPSAtSSAkKHNyYylcXG4gICA3OlxcdFxcbiAgIDg6XFx0aW5jbHVkZSAkKHNyY3RyZWUpL3ZpcnQva3ZtL01ha2VmaWxlLmt2bVxcbiAgIDk6XFx0XFxuICAxMDpcXHRvYmotJChDT05GSUdfS1ZNKSArPSBrdm0ub1xcbiAgMTE6XFx0b2JqLSQoQ09ORklHX0tWTSkgKz0gaHlwL1xcbiAgMTI6XFx0XFxuICAxMzpcXHRDRkxBR1Nfc3lzX3JlZ3MubyArPSAtV25vLW92ZXJyaWRlLWluaXRcXG4gIDE0OlxcdENGTEFHU19oYW5kbGVfZXhpdC5vICs9IC1Xbm8tb3ZlcnJpZGUtaW5pdFxcbiAgMTU6XFx0XFxuICAxNjpcXHRrdm0teSArPSBhcm0ubyBtbXUubyBtbWlvLm8gcHNjaS5vIGh5cGVyY2FsbHMubyBwdnRpbWUubyBcXFxcXFxuICAxNzpcXHRcXHQgaW5qZWN0X2ZhdWx0Lm8gdmFfbGF5b3V0Lm8gaGFuZGxlX2V4aXQubyBjb25maWcubyBcXFxcXFxuICAxODpcXHRcXHQgZ3Vlc3QubyBkZWJ1Zy5vIHJlc2V0Lm8gc3lzX3JlZ3MubyBzdGFja3RyYWNlLm8gXFxcXFxcbiAgMTk6XFx0XFx0IHZnaWMtc3lzLXJlZy12My5vIGZwc2ltZC5vIHBrdm0ubyBcXFxcXFxuICAyMDpcXHRcXHQgYXJjaF90aW1lci5vIHRybmcubyB2bWlkLm8gZW11bGF0ZS1uZXN0ZWQubyBuZXN0ZWQubyBhdC5vIFxcXFxcXG4gIDIxOlxcdFxcdCB2Z2ljL3ZnaWMubyB2Z2ljL3ZnaWMtaW5pdC5vIFxcXFxcXG4gIDIyOlxcdFxcdCB2Z2ljL3ZnaWMtaXJxZmQubyB2Z2ljL3ZnaWMtdjIubyBcXFxcXFxuICAyMzpcXHRcXHQgdmdpYy92Z2ljLXYzLm8gdmdpYy92Z2ljLXY0Lm8gXFxcXFxcbiAgMjQ6XFx0XFx0IHZnaWMvdmdpYy1tbWlvLm8gdmdpYy92Z2ljLW1taW8tdjIubyBcXFxcXFxuICAyNTpcXHRcXHQgdmdpYy92Z2ljLW1taW8tdjMubyB2Z2ljL3ZnaWMta3ZtLWRldmljZS5vIFxcXFxcXG4gIDI2OlxcdFxcdCB2Z2ljL3ZnaWMtaXRzLm8gdmdpYy92Z2ljLWRlYnVnLm8gdmdpYy92Z2ljLXYzLW5lc3RlZC5vIFxcXFxcXG4gIDI3OlxcdFxcdCB2Z2ljL3ZnaWMtdjUub1xcbiAgMjg6XFx0XFxuICAyOTpcXHRrdm0tJChDT05GSUdfSFdfUEVSRl9FVkVOVFMpICArPSBwbXUtZW11bC5vIHBtdS5vXFxuICAzMDpcXHRrdm0tJChDT05GSUdfQVJNNjRfUFRSX0FVVEgpICArPSBwYXV0aC5vXFxuICAzMTpcXHRrdm0tJChDT05GSUdfUFREVU1QX1NUQUdFMl9ERUJVR0ZTKSArPSBwdGR1bXAub1xcbiAgMzI6XFx0XFxuICAzMzpcXHRrdm0tJChDT05GSUdfTlZIRV9FTDJfVFJBQ0lORykgKz0gaHlwX3RyYWNlLm9cXG4gIDM0OlxcdFxcbiAgMzU6XFx0YWx3YXlzLXkgOj0gaHlwX2NvbnN0YW50cy5oIGh5cC1jb25zdGFudHMuc1xcbiAgMzY6XFx0XFxuICAzNzpcXHRkZWZpbmUgcnVsZV9nZW5faHlwX2NvbnN0YW50c1xcbiAgMzg6XFx0XFx0JChjYWxsIGZpbGVjaGssb2Zmc2V0cyxfX0hZUF9DT05TVEFOVFNfSF9fKVxcbiAgMzk6XFx0ZW5kZWZcXG4gIDQwOlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQwODoyNjo0Ni44NDIxMDUyOTVaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6Nzk5OTkwNDkzNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXNpcyBvZiBWR0lDdjMgUmVkaXN0cmlidXRvciBSZWdpc3RyYXRpb24gaW4gQVJNNjQgS1ZNKipcblxuT2theSwgc28gYHZnaWMvdmdpYy1tbWlvLXYzLm9gIGlzIGJlaW5nIGJ1aWx0IHdoZW4gYENPTkZJR19LVk1gIGlzIGVuYWJsZWQsIGFuZCB3ZSBrbm93IHRoYXQgS1ZNIGl0c2VsZiBvbiBhcm02NCByZXF1aXJlcyBgQ09ORklHX0tWTWAgYW5kIGBDT05GSUdfVklSVFVBTElaQVRJT05gLiBJIHNob3VsZCBkb3VibGUtY2hlY2sgdGhlIEtjb25maWcsIGp1c3QgdG8gYmUgdGhvcm91Z2guLi4geWVwLCBgbWVudWNvbmZpZyBWSVJUVUFMSVpBVElPTmAsIGZvbGxvd2VkIGJ5IGBtZW51Y29uZmlnIEtWTWAuIE5vdywgbGV0J3MgbG9vayBhdCB0aGUgYWN0dWFsIGNvZGUgY2hhbmdlcy5cblxuRXNzZW50aWFsbHksIHRoaXMgaXMgYSBmaXggZm9yIHNvbWUgZXJyb3IgaGFuZGxpbmcgYXJvdW5kIHJlZ2lzdGVyaW5nIHJlZGlzdHJpYnV0b3IgcmVnaW9ucy4gUHJldmlvdXNseSwgaW4gYHZnaWNfcmVnaXN0ZXJfcmVkaXN0X2lvZGV2KClgLCBpZiBga3ZtX2lvX2J1c19yZWdpc3Rlcl9kZXZgIGZhaWxlZCwgdGhlIGNvZGUgZGlkbid0IHVuZG8gdGhlIHJlZGlzdHJpYnV0b3IgYXNzaWdubWVudC4gSXQgaW5jcmVtZW50ZWQgYHJkcmVnLVx1MDAzZWZyZWVfaW5kZXhgIGFuZCBzZXQgYHZnaWNfY3B1LVx1MDAzZXJkcmVnYCwgYnV0IGRpZG4ndCBhY3R1YWxseSB1bnJlZ2lzdGVyIHRoZSBkZXZpY2UsIGxlYWRpbmcgdG8gcG90ZW50aWFsIGNvcnJ1cHRpb24uIE5vdywgaWYgdGhlIHJlZ2lzdHJhdGlvbiBmYWlscywgd2UgY2FsbCBgdmdpY191bmRvX3JlZGlzdF9hc3NpZ25tZW50KHZjcHUpYCB0byBjbGVhbiB0aGluZ3MgdXAuXG5cblRoZSBzYW1lIHByb2JsZW0gZXhpc3RlZCBpbiBgdmdpY19yZWdpc3Rlcl9hbGxfcmVkaXN0X2lvZGV2cygpYC4gSXQgdXNlZCB0byBpdGVyYXRlIGFuZCB1bnJlZ2lzdGVyIHByZXZpb3VzIHJlZGlzdHJpYnV0b3IgaW9kZXZzLCBidXQgZGlkbid0IGhhdmUgYSB0YXJnZXRlZCBtZXRob2QgdG8gZGVhbCB3aXRoIGEgZmFpbGluZyByZWdpc3RyYXRpb247IG5vdyBpdCBwYXNzZXMgYHJkcmVnYCB0byB0aGUgcmVnaXN0cmF0aW9uIGZ1bmN0aW9uLiBJZiBhIHJlZ2lzdHJhdGlvbiBmYWlscywgaXQgbm93IGl0ZXJhdGVzIHRocm91Z2ggdGhlICpwcmV2aW91c2x5KiBwcm9jZXNzZWQgdmNwdXMgYW5kIHJvbGxzIGJhY2sgb25seSB0aGUgcmVsZXZhbnQgaW9kZXZzIGJ5IGNhbGxpbmcgYHZnaWNfcm9sbGJhY2tfcmVkaXN0X2lvZGV2KHZjcHUsIHJkcmVnKWAuIFRoaXMgZnVuY3Rpb24gaXMgdmVyeSBzcGVjaWZpYzogaXQgb25seSBvcGVyYXRlcyBvbiB0aGUgaW9kZXZzIGFzc29jaWF0ZWQgd2l0aCB0aGUgKmN1cnJlbnQqIHJlZGlzdHJpYnV0b3IgcmVnaW9uLiBJdCB0aGVuIHVucmVnaXN0ZXJzIHRoZSBpb2RldiBhbmQgY2xlYXJzIHRoZSB2Y3B1J3MgcmVmZXJlbmNlcy4gQWxzbywgYHZnaWNfdjNfc2V0X3JlZGlzdF9iYXNlKClgIG5vdyBwYXNzZXMgdGhlIGByZHJlZ2AgdG8gYHZnaWNfcmVnaXN0ZXJfYWxsX3JlZGlzdF9pb2RldnMoKWAuXG5cblNvLCBpdCBsb29rcyBsaWtlIGEgcHJvcGVyIGZpeCBmb3IgZXJyb3IgdW53aW5kaW5nIGFuZCByb2xsYmFjayBkdXJpbmcgcmVkaXN0cmlidXRvciByZWdpc3RyYXRpb24gaW4gQVJNNjQgS1ZNJ3MgVkdJQ3YzIGltcGxlbWVudGF0aW9uLiBXZSdyZSBub3cgZW5zdXJpbmcgdGhhdCBpZiBhIGRldmljZSByZWdpc3RyYXRpb24gZmFpbHMgcGFydHdheSB0aHJvdWdoLCB3ZSBwcm9wZXJseSBjbGVhbiB1cCBhbnkgcGFydGlhbGx5LXJlZ2lzdGVyZWQgZGV2aWNlcywgYXZvaWRpbmcgc3RhdGUgY29ycnVwdGlvbi5cblxuTm93LCBpcyB0aGlzIGV2ZW4gYSByZWFjaGFibGUgY29kZSBwYXRoPyBZZXMsIEtWTSBvbiBBUk02NCBpcyBmdXp6YWJsZS4gV2UgY2FuIHVzZSB0b29scyBsaWtlIHN5emthbGxlciB0byBmdXp6IHRoZSBgL2Rldi9rdm1gIGlvY3RscywgaW5jbHVkaW5nIGBLVk1fU0VUX0RFVklDRV9BVFRSYCBmb3IgYEtWTV9ERVZfQVJNX1ZHSUNfR1JQX0FERFJgIGFuZCBgS1ZNX1ZHSUNfVjNfQUREUl9UWVBFX1JFRElTVF9SRUdJT05gLiBUaGlzIGlzIGEgY2xhc3NpYyB0YXJnZXQgZm9yIGZ1enppbmcuIE1lbW9yeSBzYWZldHksIGxvY2sgb3JkZXJpbmcsIGFuZCBzdGF0ZSBjb3JydXB0aW9uIGR1cmluZyBlcnJvciByb2xsYmFjayBpbiBLVk0gYXJlIHByaW1lIHRhcmdldHMgZm9yIHZ1bG5lcmFiaWxpdGllcy5cblxuQWxyaWdodCwgbGV0J3MgbG9vayBhdCB0aGUgbm9uLXN0YXRpYyBmdW5jdGlvbnMgZnJvbSBgYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLW1taW8tdjMuY2A6IGB2Z2ljX3YzX3NldF9yZWRpc3RfYmFzZWAsIGB2Z2ljX3JlZ2lzdGVyX3JlZGlzdF9pb2RldmAsIGFuZCBgdmdpY191bnJlZ2lzdGVyX3JlZGlzdF9pb2RldmAuIFdlIG5lZWQgdG8gZGV0ZXJtaW5lIGhvdyB0aGVzZSBmdW5jdGlvbnMgYXJlIGJlaW5nIHVzZWQgd2l0aGluIEtWTS4gV2Ugc2hvdWxkIHRyYWNlIHRoZWlyIGNhbGxzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDg4NCwiT3V0cHV0VG9rZW5zIjo2NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExMTUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQwODoyNjo1NC44NDIwMTQzMTFaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUxOTIxNDQ2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInZnaWNfdjNfc2V0X3JlZGlzdF9iYXNlfHZnaWNfcmVnaXN0ZXJfcmVkaXN0X2lvZGV2fHZnaWNfdW5yZWdpc3Rlcl9yZWRpc3RfaW9kZXZcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC9hcm02NC9rdm1cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWluaXQuYz0zODE9aW50IGt2bV92Z2ljX3ZjcHVfaW5pdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuLS1cXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtaW5pdC5jLTQwNS1cXHRcXHRtdXRleF9sb2NrKFxcdTAwMjZ2Y3B1LVxcdTAwM2Vrdm0tXFx1MDAzZXNsb3RzX2xvY2spO1xcbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1pbml0LmM6NDA2OlxcdFxcdHJldCA9IHZnaWNfcmVnaXN0ZXJfcmVkaXN0X2lvZGV2KHZjcHUpO1xcbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1pbml0LmMtNDA3LVxcdFxcdG11dGV4X3VubG9jayhcXHUwMDI2dmNwdS1cXHUwMDNla3ZtLVxcdTAwM2VzbG90c19sb2NrKTtcXG4tLVxcbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1pbml0LmM9NTEzPXN0YXRpYyB2b2lkIF9fa3ZtX3ZnaWNfdmNwdV9kZXN0cm95KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4tLVxcbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1pbml0LmMtNTQ0LVxcdFxcdGlmIChrdm1fZ2V0X3ZjcHVfYnlfaWQodmNwdS1cXHUwMDNla3ZtLCB2Y3B1LVxcdTAwM2V2Y3B1X2lkKSAhPSB2Y3B1KVxcbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1pbml0LmM6NTQ1OlxcdFxcdFxcdHZnaWNfdW5yZWdpc3Rlcl9yZWRpc3RfaW9kZXYodmNwdSk7XFxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWluaXQuYy01NDYtXFxuLS1cXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtaW5pdC5jPTU2MD12b2lkIGt2bV92Z2ljX2Rlc3Ryb3koc3RydWN0IGt2bSAqa3ZtKVxcbi0tXFxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWluaXQuYy01NzgtXFx0XFx0a3ZtX2Zvcl9lYWNoX3ZjcHUoaSwgdmNwdSwga3ZtKVxcbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1pbml0LmM6NTc5OlxcdFxcdFxcdHZnaWNfdW5yZWdpc3Rlcl9yZWRpc3RfaW9kZXYodmNwdSk7XFxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWluaXQuYy01ODAtXFxuLS1cXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMta3ZtLWRldmljZS5jPTkzPXN0YXRpYyBpbnQga3ZtX3ZnaWNfYWRkcihzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fZGV2aWNlX2F0dHIgKmF0dHIsIGJvb2wgd3JpdGUpXFxuLS1cXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMta3ZtLWRldmljZS5jLTEzNy1cXHRcXHRpZiAod3JpdGUpIHtcXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMta3ZtLWRldmljZS5jOjEzODpcXHRcXHRcXHRyID0gdmdpY192M19zZXRfcmVkaXN0X2Jhc2Uoa3ZtLCAwLCBhZGRyLCAwKTtcXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMta3ZtLWRldmljZS5jLTEzOS1cXHRcXHRcXHRnb3RvIG91dDtcXG4tLVxcbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1rdm0tZGV2aWNlLmMtMTY3LVxcdFxcdFxcdGVsc2VcXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMta3ZtLWRldmljZS5jOjE2ODpcXHRcXHRcXHRcXHRyID0gdmdpY192M19zZXRfcmVkaXN0X2Jhc2Uoa3ZtLCBpbmRleCxcXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMta3ZtLWRldmljZS5jLTE2OS1cXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgYmFzZSwgY291bnQpO1xcbi0tXFxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLW1taW8tdjMuYz03Njk9c3RhdGljIHZvaWQgdmdpY191bmRvX3JlZGlzdF9hc3NpZ25tZW50KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4tLVxcbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1tbWlvLXYzLmMtNzgyLS8qKlxcbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1tbWlvLXYzLmM6NzgzOiAqIHZnaWNfcmVnaXN0ZXJfcmVkaXN0X2lvZGV2IC0gcmVnaXN0ZXIgYSBzaW5nbGUgcmVkaXN0IGlvZGV2XFxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLW1taW8tdjMuYy03ODQtICogQHZjcHU6ICAgIFRoZSBWQ1BVIHRvIHdoaWNoIHRoZSByZWRpc3RyaWJ1dG9yIGJlbG9uZ3NcXG4tLVxcbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1tbWlvLXYzLmMtNzkwLSAqL1xcbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1tbWlvLXYzLmM6NzkxOmludCB2Z2ljX3JlZ2lzdGVyX3JlZGlzdF9pb2RldihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLW1taW8tdjMuYy03OTIte1xcbi0tXFxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLW1taW8tdjMuYy04NTAtXFxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLW1taW8tdjMuYzo4NTE6dm9pZCB2Z2ljX3VucmVnaXN0ZXJfcmVkaXN0X2lvZGV2KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtbW1pby12My5jLTg1Mi17XFxuLS1cXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtbW1pby12My5jPTg1OD1zdGF0aWMgdm9pZCB2Z2ljX3JvbGxiYWNrX3JlZGlzdF9pb2RldihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXFxuLS1cXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtbW1pby12My5jLTg2Ny1cXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtbW1pby12My5jOjg2ODpcXHR2Z2ljX3VucmVnaXN0ZXJfcmVkaXN0X2lvZGV2KHZjcHUpO1xcbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1tbWlvLXYzLmMtODY5LVxcbi0tXFxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLW1taW8tdjMuYz04NzU9c3RhdGljIGludCB2Z2ljX3JlZ2lzdGVyX2FsbF9yZWRpc3RfaW9kZXZzKHN0cnVjdCBrdm0gKmt2bSxcXG4tLVxcbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1tbWlvLXYzLmMtODg0LVxcdGt2bV9mb3JfZWFjaF92Y3B1KGMsIHZjcHUsIGt2bSkge1xcbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1tbWlvLXYzLmM6ODg1OlxcdFxcdHJldCA9IHZnaWNfcmVnaXN0ZXJfcmVkaXN0X2lvZGV2KHZjcHUpO1xcbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1tbWlvLXYzLmMtODg2LVxcdFxcdGlmIChyZXQpXFxuLS1cXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtbW1pby12My5jPTk4Nj12b2lkIHZnaWNfdjNfZnJlZV9yZWRpc3RfcmVnaW9uKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IHZnaWNfcmVkaXN0X3JlZ2lvbiAqcmRyZWcpXFxuLS1cXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtbW1pby12My5jLTEwMDItXFxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLW1taW8tdjMuYzoxMDAzOmludCB2Z2ljX3YzX3NldF9yZWRpc3RfYmFzZShzdHJ1Y3Qga3ZtICprdm0sIHUzMiBpbmRleCwgdTY0IGFkZHIsIHUzMiBjb3VudClcXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtbW1pby12My5jLTEwMDQte1xcbi0tXFxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLmg9MzQ5PWludCB2Z2ljX3YzX3NhdmVfcGVuZGluZ190YWJsZXMoc3RydWN0IGt2bSAqa3ZtKTtcXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMuaDozNTA6aW50IHZnaWNfdjNfc2V0X3JlZGlzdF9iYXNlKHN0cnVjdCBrdm0gKmt2bSwgdTMyIGluZGV4LCB1NjQgYWRkciwgdTMyIGNvdW50KTtcXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMuaDozNTE6aW50IHZnaWNfcmVnaXN0ZXJfcmVkaXN0X2lvZGV2KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XFxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLmg6MzUyOnZvaWQgdmdpY191bnJlZ2lzdGVyX3JlZGlzdF9pb2RldihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xcbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy5oLTM1My1ib29sIHZnaWNfdjNfY2hlY2tfYmFzZShzdHJ1Y3Qga3ZtICprdm0pO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQwODoyNjo1NC44OTM5NDIxMzdaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDMxMTcyNzY4MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiBBUk02NCBLVk0gQ29uZmlndXJhdGlvbiBhbmQgUGF0Y2ggTG9naWMqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJIG5lZWQgdG8gdmVyaWZ5IHRoZSBuZWNlc3NhcnkgY29uZmlndXJhdGlvbnMgZm9yIGVuYWJsaW5nIEtWTSBvbiBhcm02NC4gSSdtIHN0YXJ0aW5nIHdpdGggdGhlIGBhcmNoL2FybTY0L2t2bS9LY29uZmlnYCBmaWxlLiBJIHNlZSBgbWVudWNvbmZpZyBWSVJUVUFMSVpBVElPTmAgYW5kLCBkZXBlbmRlbnQgb24gdGhhdCwgYG1lbnVjb25maWcgS1ZNYC4gVGhlIGRlcGVuZGVuY3kgbWFrZXMgc2Vuc2UsIG9mIGNvdXJzZS5cblxuTmV4dCwgSSdtIGRvdWJsZS1jaGVja2luZyB0aG9zZSBzeW1ib2xzOiBgS1ZNYCBhbmQgYFZJUlRVQUxJWkFUSU9OYC4gVGhleSdyZSBib3RoIGRlZmluZWQgYXMgYm9vbGVhbiBjb25maWdzLCB3aGljaCBpcyB3aGF0IEknZCBleHBlY3QuIE5vdyBJJ2xsIHF1aWNrbHkgY29uZmlybSB0aGF0IEtWTSBkb2Vzbid0IGhhdmUgYW55IHNwZWNpZmljIGFyY2hpdGVjdHVyYWwgZGVwZW5kZW5jaWVzIHRoYXQgSSd2ZSBtaXNzZWQsIGFuZCB0aGF0IGBLVk1gIGFuZCBgVklSVFVBTElaQVRJT05gIGFyZSBpbmRlZWQgdGhlIGNvcmUgY29uZmlndXJhdGlvbiBzeW1ib2xzLiBUaGUgYEVuYWJsZUNvbmZpZ3NgIGxpc3QgY29uZmlybXMgbXkgdW5kZXJzdGFuZGluZy5cblxuSSdtIG5vdyBzaGlmdGluZyBmb2N1cyB0byB0aGUga2V5IGZ1bmN0aW9uIHN5bWJvbHMgaW1wYWN0ZWQgYnkgdGhlIGNoYW5nZXMgaW4gdGhpcyBwYXRjaC4gU3BlY2lmaWNhbGx5LCBJIHNlZSB0aHJlZSBjcml0aWNhbCBlbnRyeSBwb2ludHMgdGhhdCB3aWxsIGJlIGRpcmVjdGx5IGFmZmVjdGVkLiBOYW1lbHk6IGB2Z2ljX3YzX3NldF9yZWRpc3RfYmFzZWAsIGB2Z2ljX3JlZ2lzdGVyX3JlZGlzdF9pb2RldmAsIGFuZCBgdmdpY191bnJlZ2lzdGVyX3JlZGlzdF9pb2RldmAuXG5cblRoZSByZWFzb25pbmcgYmVoaW5kIHRoZSBwYXRjaCBpcyBmYWlybHkgY2xlYXIuIEl0J3MgYWJvdXQgaW1wcm92ZWQgZXJyb3IgaGFuZGxpbmcgaW4gdGhlIEFSTTY0IEtWTSBWR0lDdjMgcmVkaXN0cmlidXRvciBsb2dpYywgc3BlY2lmaWNhbGx5IHdoZW4gYXNzaWduaW5nIHJlZ2lvbnMgYW5kIHJlZ2lzdGVyaW5nIGlvZGV2cy4gVGhlIHBhdGNoIGFpbXMgdG8gY29ycmVjdGx5IHJvbGwgYmFjayByZWRpc3RyaWJ1dG9yIGFzc2lnbm1lbnRzIHdoZW4gZWl0aGVyIGEgc2luZ2xlIGlvZGV2IHJlZ2lzdHJhdGlvbiBvciB0aGUgcmVnaXN0cmF0aW9uIG9mIGFsbCByZWRpc3RyaWJ1dG9yIGlvZGV2cyBmYWlscy4gVGhlIGdvYWwgaXMgdG8gYXZvaWQgc3RhbGUgc3RhdGVzIGFuZCBwcmV2ZW50IGluY29ycmVjdCBhY2NvdW50aW5nIG9mIFZDUFUncyBhc3NpZ25lZCB0byByZWdpb25zLCB3aGljaCBpcyBhIGNvbW1vbiBzb3VyY2Ugb2YgaW5zdGFiaWxpdHkuIEl0J3MgYWxsIGFib3V0IGVuc3VyaW5nIHRoYXQgd2Ugb25seSB1bmRvIGFzc2lnbm1lbnRzIGZvciB2Q1BVcyBhc3NvY2lhdGVkIHdpdGggdGhlIGZhaWxlZCByZWdpb24sIHdoaWNoIGlzIGEgZ29vZCwgc291bmQgYXBwcm9hY2guIFRoaXMgbWFrZXMgdGhlIEtWTSBWR0lDIGluaXRpYWxpemF0aW9uIGFuZCBkZXZpY2UgY29uZmlndXJhdGlvbiBwYXRocyByZWFjaGFibGUsIHdoaWNoIGhhcyBzb21lIG9idmlvdXMgaW1wbGljYXRpb25zIGZvciBmdXp6aW5nIGFuZCBvdmVyYWxsIHJvYnVzdG5lc3MuXG5cblRoZXJlZm9yZSwgSSdsbCBjYWxsIGBzZXQtcmVzdWx0c2AuIEkgaGF2ZSBhIGdvb2QgZ3Jhc3Agb2YgdGhlIHBhdGNoJ3MgaW1wYWN0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODcyOCwiT3V0cHV0VG9rZW5zIjoxNjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNzEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMDg6MjY6NTkuMjA1NjczMDI3WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzM3ODE0NzQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIktWTVwiLFxuICAgIFwiVklSVFVBTElaQVRJT05cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ2Z2ljX3YzX3NldF9yZWRpc3RfYmFzZVwiLFxuICAgIFwidmdpY19yZWdpc3Rlcl9yZWRpc3RfaW9kZXZcIixcbiAgICBcInZnaWNfdW5yZWdpc3Rlcl9yZWRpc3RfaW9kZXZcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBlcnJvciB1bndpbmRpbmcgYW5kIHJvbGxiYWNrIGhhbmRsaW5nIHdoZW4gcmVnaXN0ZXJpbmcgVkdJQ3YzIHJlZGlzdHJpYnV0b3IgSS9PIGRldmljZXMgaW4gQVJNNjQgS1ZNLiBJdCBlbnN1cmVzIHRoYXQgZmFpbGVkIHJlZGlzdHJpYnV0b3IgcmVnaXN0cmF0aW9uIHByb3Blcmx5IHJvbGxzIGJhY2sgdGhlIGFzc2lnbmVkIHJlZ2lvbiBzdGF0ZSBhbmQgb25seSB0ZWFycyBkb3duIFZDUFVzIGFzc29jaWF0ZWQgd2l0aCB0aGUgZmFpbGluZyByZWdpb24uIFRoZXNlIGNvZGUgcGF0aHMgYXJlIHJlYWNoYWJsZSB2aWEgS1ZNIGlvY3RscyBhbmQgd29ydGggZnV6emluZyBmb3IgY29uY3VycmVuY3kgYW5kIHN0YXRlIG1hbmFnZW1lbnQgYnVncy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJLVk1cIixcbiAgICBcIlZJUlRVQUxJWkFUSU9OXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidmdpY192M19zZXRfcmVkaXN0X2Jhc2VcIixcbiAgICBcInZnaWNfcmVnaXN0ZXJfcmVkaXN0X2lvZGV2XCIsXG4gICAgXCJ2Z2ljX3VucmVnaXN0ZXJfcmVkaXN0X2lvZGV2XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgZXJyb3IgdW53aW5kaW5nIGFuZCByb2xsYmFjayBoYW5kbGluZyB3aGVuIHJlZ2lzdGVyaW5nIFZHSUN2MyByZWRpc3RyaWJ1dG9yIEkvTyBkZXZpY2VzIGluIEFSTTY0IEtWTS4gSXQgZW5zdXJlcyB0aGF0IGZhaWxlZCByZWRpc3RyaWJ1dG9yIHJlZ2lzdHJhdGlvbiBwcm9wZXJseSByb2xscyBiYWNrIHRoZSBhc3NpZ25lZCByZWdpb24gc3RhdGUgYW5kIG9ubHkgdGVhcnMgZG93biBWQ1BVcyBhc3NvY2lhdGVkIHdpdGggdGhlIGZhaWxpbmcgcmVnaW9uLiBUaGVzZSBjb2RlIHBhdGhzIGFyZSByZWFjaGFibGUgdmlhIEtWTSBpb2N0bHMgYW5kIHdvcnRoIGZ1enppbmcgZm9yIGNvbmN1cnJlbmN5IGFuZCBzdGF0ZSBtYW5hZ2VtZW50IGJ1Z3MuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDA4OjI2OjU5LjI3OTQ2MDU4MVoiLCJTZXEiOjE3LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTk1ODgwMzYyMzUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQwODoyNjo1OS4yNzk5MDEzNDFaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjo1OTU4NzU5MjE5NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgZXJyb3Igcm9sbGJhY2sgaGFuZGxpbmcgZHVyaW5nIEtWTSBBUk02NCBWR0lDdjMgcmVkaXN0cmlidXRvciBpb2RldiByZWdpc3RyYXRpb24gKGhhbmRsaW5nIGZhaWxlZCByZWdpc3RyYXRpb24gY2xlYW51cCwgcmVzZXR0aW5nIHZnaWNfY3B1IHJlZGlzdHJpYnV0b3IgcG9pbnRlcnMsIGFuZCBkZWNyZW1lbnRpbmcgZnJlZV9pbmRleCBhcHByb3ByaWF0ZWx5KS4gVGhlIGNoYW5nZXMgZG8gbm90IGludHJvZHVjZSBvciBtb2RpZnkgYW55IG1lbW9yeSBhbGxvY2F0aW9ucywgZGF0YSBzdHJ1Y3R1cmVzIGNvcGllZCB0byB1c2Vyc3BhY2UsIG9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFjY2Vzc2VzLiBBbnkgcG90ZW50aWFsIGNvbmN1cnJlbmN5LCBsb2NrIG9yZGVyaW5nLCBvciBpbnZhbGlkIGRlcmVmZXJlbmNlIGlzc3VlcyBhcmUgY292ZXJlZCBieSBzdGFuZGFyZCBzYW5pdGl6ZXJzIChMT0NLREVQL0tBU0FOKS4gVGhlcmVmb3JlLCB0aGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGluZm9ybWF0aW9uIGxlYWtzIHRoYXQgd291bGQgcmVxdWlyZSBhIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBhYzhmYzdhNTRjZjE3MjIyNzRjODM0MmNmMWYwODYyYTE0NTk5YjY4XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBBdWcgMzEgMDg6MjY6MjMgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtbW1pby12My5jIGIvYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLW1taW8tdjMuY1xuaW5kZXggNTkxM2EyMGQ4MzAxOS4uNzdhYTg0MzM3MDFhMSAxMDA2NDRcbi0tLSBhL2FyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1tbWlvLXYzLmNcbisrKyBiL2FyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1tbWlvLXYzLmNcbkBAIC03NjYsNiArNzY2LDE5IEBAIHVuc2lnbmVkIGludCB2Z2ljX3YzX2luaXRfZGlzdF9pb2RldihzdHJ1Y3QgdmdpY19pb19kZXZpY2UgKmRldilcbiBcdHJldHVybiBTWl82NEs7XG4gfVxuIFxuK3N0YXRpYyB2b2lkIHZnaWNfdW5kb19yZWRpc3RfYXNzaWdubWVudChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4re1xuK1x0c3RydWN0IHZnaWNfY3B1ICp2Z2ljX2NwdSA9IFx1MDAyNnZjcHUtXHUwMDNlYXJjaC52Z2ljX2NwdTtcbitcbitcdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXHUwMDI2dmNwdS1cdTAwM2Vrdm0tXHUwMDNlc2xvdHNfbG9jayk7XG4rXG4rXHRndWFyZChtdXRleCkoXHUwMDI2dmNwdS1cdTAwM2Vrdm0tXHUwMDNlYXJjaC5jb25maWdfbG9jayk7XG4rXG4rXHR2Z2ljX2NwdS1cdTAwM2VyZHJlZy1cdTAwM2VmcmVlX2luZGV4LS07XG4rXHR2Z2ljX2NwdS1cdTAwM2VyZHJlZyA9IE5VTEw7XG4rXHR2Z2ljX2NwdS1cdTAwM2VyZF9pb2Rldi5iYXNlX2FkZHIgPSBWR0lDX0FERFJfVU5ERUY7XG4rfVxuK1xuIC8qKlxuICAqIHZnaWNfcmVnaXN0ZXJfcmVkaXN0X2lvZGV2IC0gcmVnaXN0ZXIgYSBzaW5nbGUgcmVkaXN0IGlvZGV2XG4gICogQHZjcHU6ICAgIFRoZSBWQ1BVIHRvIHdoaWNoIHRoZSByZWRpc3RyaWJ1dG9yIGJlbG9uZ3NcbkBAIC04MTgsMTYgKzgzMSwxNyBAQCBpbnQgdmdpY19yZWdpc3Rlcl9yZWRpc3RfaW9kZXYoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFx0cmRfZGV2LVx1MDAzZW5yX3JlZ2lvbnMgPSBBUlJBWV9TSVpFKHZnaWNfdjNfcmRfcmVnaXN0ZXJzKTtcbiBcdHJkX2Rldi1cdTAwM2VyZWRpc3RfdmNwdSA9IHZjcHU7XG4gXG4rXHQvKiBQcm90ZWN0ZWQgYnkgc2xvdHNfbG9jayAqL1xuK1x0cmRyZWctXHUwMDNlZnJlZV9pbmRleCsrO1xuK1xuIFx0bXV0ZXhfdW5sb2NrKFx1MDAyNmt2bS1cdTAwM2VhcmNoLmNvbmZpZ19sb2NrKTtcbiBcbiBcdHJldCA9IGt2bV9pb19idXNfcmVnaXN0ZXJfZGV2KGt2bSwgS1ZNX01NSU9fQlVTLCByZF9iYXNlLFxuIFx0XHRcdFx0ICAgICAgMiAqIFNaXzY0SywgXHUwMDI2cmRfZGV2LVx1MDAzZWRldik7XG4gXHRpZiAocmV0KVxuLVx0XHRyZXR1cm4gcmV0O1xuK1x0XHR2Z2ljX3VuZG9fcmVkaXN0X2Fzc2lnbm1lbnQodmNwdSk7XG4gXG4tXHQvKiBQcm90ZWN0ZWQgYnkgc2xvdHNfbG9jayAqL1xuLVx0cmRyZWctXHUwMDNlZnJlZV9pbmRleCsrO1xuLVx0cmV0dXJuIDA7XG4rXHRyZXR1cm4gcmV0O1xuIFxuIG91dF91bmxvY2s6XG4gXHRtdXRleF91bmxvY2soXHUwMDI2a3ZtLVx1MDAzZWFyY2guY29uZmlnX2xvY2spO1xuQEAgLTg0MSw3ICs4NTUsMjUgQEAgdm9pZCB2Z2ljX3VucmVnaXN0ZXJfcmVkaXN0X2lvZGV2KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBcdGt2bV9pb19idXNfdW5yZWdpc3Rlcl9kZXYodmNwdS1cdTAwM2Vrdm0sIEtWTV9NTUlPX0JVUywgXHUwMDI2cmRfZGV2LVx1MDAzZWRldik7XG4gfVxuIFxuLXN0YXRpYyBpbnQgdmdpY19yZWdpc3Rlcl9hbGxfcmVkaXN0X2lvZGV2cyhzdHJ1Y3Qga3ZtICprdm0pXG4rc3RhdGljIHZvaWQgdmdpY19yb2xsYmFja19yZWRpc3RfaW9kZXYoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuK1x0XHRcdFx0ICAgICAgIHN0cnVjdCB2Z2ljX3JlZGlzdF9yZWdpb24gKnJkcmVnKVxuK3tcbitcdHN0cnVjdCB2Z2ljX2NwdSAqdmdpY19jcHUgPSBcdTAwMjZ2Y3B1LVx1MDAzZWFyY2gudmdpY19jcHU7XG4rXG4rXHRsb2NrZGVwX2Fzc2VydF9oZWxkKFx1MDAyNnZjcHUtXHUwMDNla3ZtLVx1MDAzZXNsb3RzX2xvY2spO1xuK1xuK1x0aWYgKHZnaWNfY3B1LVx1MDAzZXJkcmVnICE9IHJkcmVnKVxuK1x0XHRyZXR1cm47XG4rXG4rXHR2Z2ljX3VucmVnaXN0ZXJfcmVkaXN0X2lvZGV2KHZjcHUpO1xuK1xuK1x0Z3VhcmQobXV0ZXgpKFx1MDAyNnZjcHUtXHUwMDNla3ZtLVx1MDAzZWFyY2guY29uZmlnX2xvY2spO1xuK1x0dmdpY19jcHUtXHUwMDNlcmRyZWcgPSBOVUxMO1xuK1x0dmdpY19jcHUtXHUwMDNlcmRfaW9kZXYuYmFzZV9hZGRyID0gVkdJQ19BRERSX1VOREVGO1xuK31cbitcbitzdGF0aWMgaW50IHZnaWNfcmVnaXN0ZXJfYWxsX3JlZGlzdF9pb2RldnMoc3RydWN0IGt2bSAqa3ZtLFxuK1x0XHRcdFx0XHQgICBzdHJ1Y3QgdmdpY19yZWRpc3RfcmVnaW9uICpyZHJlZylcbiB7XG4gXHRzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHU7XG4gXHR1bnNpZ25lZCBsb25nIGM7XG5AQCAtODU2LDEyICs4ODgsMTIgQEAgc3RhdGljIGludCB2Z2ljX3JlZ2lzdGVyX2FsbF9yZWRpc3RfaW9kZXZzKHN0cnVjdCBrdm0gKmt2bSlcbiBcdH1cbiBcbiBcdGlmIChyZXQpIHtcbi1cdFx0LyogVGhlIGN1cnJlbnQgYyBmYWlsZWQsIHNvIGl0ZXJhdGUgb3ZlciB0aGUgcHJldmlvdXMgb25lcy4gKi9cbitcdFx0LyogVW5kbyBhc3NpZ25tZW50cyBtYWRlIGZyb20gdGhlIHJlZ2lvbiBiZWluZyBhZGRlZC4gKi9cbiBcdFx0aW50IGk7XG4gXG4gXHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGM7IGkrKykge1xuIFx0XHRcdHZjcHUgPSBrdm1fZ2V0X3ZjcHUoa3ZtLCBpKTtcbi1cdFx0XHR2Z2ljX3VucmVnaXN0ZXJfcmVkaXN0X2lvZGV2KHZjcHUpO1xuK1x0XHRcdHZnaWNfcm9sbGJhY2tfcmVkaXN0X2lvZGV2KHZjcHUsIHJkcmVnKTtcbiBcdFx0fVxuIFx0fVxuIFxuQEAgLTk3MCwxMCArMTAwMiwxMyBAQCB2b2lkIHZnaWNfdjNfZnJlZV9yZWRpc3RfcmVnaW9uKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IHZnaWNfcmVkaXN0X3JlZ2lvbiAqcmRyZVxuIFxuIGludCB2Z2ljX3YzX3NldF9yZWRpc3RfYmFzZShzdHJ1Y3Qga3ZtICprdm0sIHUzMiBpbmRleCwgdTY0IGFkZHIsIHUzMiBjb3VudClcbiB7XG4rXHRzdHJ1Y3QgdmdpY19yZWRpc3RfcmVnaW9uICpyZHJlZztcbiBcdGludCByZXQ7XG4gXG4gXHRtdXRleF9sb2NrKFx1MDAyNmt2bS1cdTAwM2VhcmNoLmNvbmZpZ19sb2NrKTtcbiBcdHJldCA9IHZnaWNfdjNfYWxsb2NfcmVkaXN0X3JlZ2lvbihrdm0sIGluZGV4LCBhZGRyLCBjb3VudCk7XG4rXHRpZiAoIXJldClcbitcdFx0cmRyZWcgPSB2Z2ljX3YzX3JkaXN0X3JlZ2lvbl9mcm9tX2luZGV4KGt2bSwgaW5kZXgpO1xuIFx0bXV0ZXhfdW5sb2NrKFx1MDAyNmt2bS1cdTAwM2VhcmNoLmNvbmZpZ19sb2NrKTtcbiBcdGlmIChyZXQpXG4gXHRcdHJldHVybiByZXQ7XG5AQCAtOTgyLDEyICsxMDE3LDkgQEAgaW50IHZnaWNfdjNfc2V0X3JlZGlzdF9iYXNlKHN0cnVjdCBrdm0gKmt2bSwgdTMyIGluZGV4LCB1NjQgYWRkciwgdTMyIGNvdW50KVxuIFx0ICogUmVnaXN0ZXIgaW9kZXZzIGZvciBlYWNoIGV4aXN0aW5nIFZDUFUuICBBZGRpbmcgbW9yZSBWQ1BVc1xuIFx0ICogYWZ0ZXJ3YXJkcyB3aWxsIHJlZ2lzdGVyIHRoZSBpb2RldnMgd2hlbiBuZWVkZWQuXG4gXHQgKi9cbi1cdHJldCA9IHZnaWNfcmVnaXN0ZXJfYWxsX3JlZGlzdF9pb2RldnMoa3ZtKTtcbitcdHJldCA9IHZnaWNfcmVnaXN0ZXJfYWxsX3JlZGlzdF9pb2RldnMoa3ZtLCByZHJlZyk7XG4gXHRpZiAocmV0KSB7XG4tXHRcdHN0cnVjdCB2Z2ljX3JlZGlzdF9yZWdpb24gKnJkcmVnO1xuLVxuIFx0XHRtdXRleF9sb2NrKFx1MDAyNmt2bS1cdTAwM2VhcmNoLmNvbmZpZ19sb2NrKTtcbi1cdFx0cmRyZWcgPSB2Z2ljX3YzX3JkaXN0X3JlZ2lvbl9mcm9tX2luZGV4KGt2bSwgaW5kZXgpO1xuIFx0XHR2Z2ljX3YzX2ZyZWVfcmVkaXN0X3JlZ2lvbihrdm0sIHJkcmVnKTtcbiBcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNmt2bS1cdTAwM2VhcmNoLmNvbmZpZ19sb2NrKTtcbiBcdFx0cmV0dXJuIHJldDtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vYXJtNjQvdmdpY19pbml0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vYXJtNjQvdmdpY19pbml0LmNcbmluZGV4IDQ3ZTM0YjQzYWZiMjkuLjVhMzBmM2NiMDM5YmUgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vYXJtNjQvdmdpY19pbml0LmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9hcm02NC92Z2ljX2luaXQuY1xuQEAgLTUsNiArNSw3IEBAXG4gICogQ29weXJpZ2h0IChDKSAyMDIwLCBSZWQgSGF0LCBJbmMuXG4gICovXG4gI2luY2x1ZGUgXHUwMDNjbGludXgva2VybmVsLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9zaXplcy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjc3lzL3N5c2NhbGwuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2FzbS9rdm0uaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2FzbS9rdm1fcGFyYS5oXHUwMDNlXG5AQCAtMTMsMTIgKzE0LDIxIEBAXG4gXG4gI2luY2x1ZGUgXCJ0ZXN0X3V0aWwuaFwiXG4gI2luY2x1ZGUgXCJrdm1fdXRpbC5oXCJcbisjaW5jbHVkZSBcImdpYy5oXCJcbiAjaW5jbHVkZSBcInByb2Nlc3Nvci5oXCJcbiAjaW5jbHVkZSBcInZnaWMuaFwiXG4gI2luY2x1ZGUgXCJnaWNfdjMuaFwiXG4gXG4gI2RlZmluZSBOUl9WQ1BVU1x0XHQ0XG4gXG4rI2RlZmluZSBSRURJU1RfUkVUUllfUkVHSU9OMF9CQVNFXHRHSUNSX0JBU0VfR1BBXG4rI2RlZmluZSBSRURJU1RfUkVUUllfUkVHSU9OMV9CQVNFXHRcXFxuK1x0KFJFRElTVF9SRVRSWV9SRUdJT04wX0JBU0UgKyAyICogS1ZNX1ZHSUNfVjNfUkVESVNUX1NJWkUpXG4rI2RlZmluZSBSRURJU1RfUkVUUllfRElTVF9CQVNFXHRcdFxcXG4rXHQoUkVESVNUX1JFVFJZX1JFR0lPTjFfQkFTRSArIEtWTV9WR0lDX1YzX1JFRElTVF9TSVpFKVxuKyNkZWZpbmUgUkVESVNUX1JFVFJZX1JFR0lPTjJfQkFTRVx0XFxcbitcdChSRURJU1RfUkVUUllfRElTVF9CQVNFICsgS1ZNX1ZHSUNfVjNfRElTVF9TSVpFKVxuK1xuICNkZWZpbmUgUkVHX09GRlNFVCh2Y3B1LCBvZmZzZXQpICgoKHU2NCl2Y3B1IFx1MDAzY1x1MDAzYyAzMikgfCBvZmZzZXQpXG4gXG4gI2RlZmluZSBWR0lDX0RFVl9JU19WMihfZCkgKChfZCkgPT0gS1ZNX0RFVl9UWVBFX0FSTV9WR0lDX1YyKVxuQEAgLTY1LDYgKzc1LDIzIEBAIHN0YXRpYyB2b2lkIGd1ZXN0X2NvZGUodm9pZClcbiBcdEdVRVNUX0RPTkUoKTtcbiB9XG4gXG4rc3RhdGljIHZvaWQgZ3Vlc3RfY2hlY2tfcmVkaXN0X3JldHJ5KHZvaWQpXG4re1xuK1x0dW5zaWduZWQgaW50IGk7XG4rXG4rXHQvKiBUaGUgZmlyc3QgdGhyZWUgcmVkaXN0cmlidXRvcnMgc3BhbiBhZGphY2VudCByZWdpb25zIDAgYW5kIDEuICovXG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBOUl9WQ1BVUzsgaSsrKSB7XG4rXHRcdHU2NCBiYXNlID0gaSBcdTAwM2MgMyA/IFJFRElTVF9SRVRSWV9SRUdJT04wX0JBU0UgK1xuK1x0XHRcdFx0ICAgICAgIGkgKiBLVk1fVkdJQ19WM19SRURJU1RfU0laRSA6XG4rXHRcdFx0XHQgICAgICAgUkVESVNUX1JFVFJZX1JFR0lPTjJfQkFTRTtcbitcdFx0dTY0IHR5cGVyID0gcmVhZHEoKHZvaWQgKikodW5zaWduZWQgbG9uZykoYmFzZSArIEdJQ1JfVFlQRVIpKTtcbitcbitcdFx0R1VFU1RfQVNTRVJUX0VRKEdJQ1JfVFlQRVJfQ1BVX05VTUJFUih0eXBlciksIGkpO1xuK1x0fVxuK1xuK1x0R1VFU1RfRE9ORSgpO1xuK31cbitcbiAvKiB3ZSBkb24ndCB3YW50IHRvIGFzc2VydCBvbiBydW4gZXhlY3V0aW9uLCBoZW5jZSB0aGF0IGhlbHBlciAqL1xuIHN0YXRpYyBpbnQgcnVuX3ZjcHUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIHtcbkBAIC03Myw2ICsxMDAsNyBAQCBzdGF0aWMgaW50IHJ1bl92Y3B1KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBcbiBzdGF0aWMgc3RydWN0IHZtX2dpYyB2bV9naWNfY3JlYXRlX3dpdGhfdmNwdXModTMyIGdpY19kZXZfdHlwZSxcbiBcdFx0XHRcdFx0ICAgICAgdTMyIG5yX3ZjcHVzLFxuK1x0XHRcdFx0XHQgICAgICB2b2lkICpndWVzdF9jb2RlLFxuIFx0XHRcdFx0XHQgICAgICBzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHVzW10pXG4ge1xuIFx0c3RydWN0IHZtX2dpYyB2O1xuQEAgLTMzOCw3ICszNjYsNyBAQCBzdGF0aWMgdm9pZCB0ZXN0X3ZnaWNfdGhlbl92Y3B1cyh1MzIgZ2ljX2Rldl90eXBlKVxuIFx0c3RydWN0IHZtX2dpYyB2O1xuIFx0aW50IHJldCwgaTtcbiBcbi1cdHYgPSB2bV9naWNfY3JlYXRlX3dpdGhfdmNwdXMoZ2ljX2Rldl90eXBlLCAxLCB2Y3B1cyk7XG4rXHR2ID0gdm1fZ2ljX2NyZWF0ZV93aXRoX3ZjcHVzKGdpY19kZXZfdHlwZSwgMSwgZ3Vlc3RfY29kZSwgdmNwdXMpO1xuIFxuIFx0c3VidGVzdF9kaXN0X3JkaXN0KFx1MDAyNnYpO1xuIFxuQEAgLTM1OSw3ICszODcsOCBAQCBzdGF0aWMgdm9pZCB0ZXN0X3ZjcHVzX3RoZW5fdmdpYyh1MzIgZ2ljX2Rldl90eXBlKVxuIFx0c3RydWN0IHZtX2dpYyB2O1xuIFx0aW50IHJldDtcbiBcbi1cdHYgPSB2bV9naWNfY3JlYXRlX3dpdGhfdmNwdXMoZ2ljX2Rldl90eXBlLCBOUl9WQ1BVUywgdmNwdXMpO1xuK1x0diA9IHZtX2dpY19jcmVhdGVfd2l0aF92Y3B1cyhnaWNfZGV2X3R5cGUsIE5SX1ZDUFVTLCBndWVzdF9jb2RlLFxuK1x0XHRcdFx0ICAgICB2Y3B1cyk7XG4gXG4gXHRzdWJ0ZXN0X2Rpc3RfcmRpc3QoXHUwMDI2dik7XG4gXG5AQCAtNDExLDcgKzQ0MCw4IEBAIHN0YXRpYyB2b2lkIHRlc3RfdjNfbmV3X3JlZGlzdF9yZWdpb25zKHZvaWQpXG4gXHR1NjQgYWRkcjtcbiBcdGludCByZXQ7XG4gXG4tXHR2ID0gdm1fZ2ljX2NyZWF0ZV93aXRoX3ZjcHVzKEtWTV9ERVZfVFlQRV9BUk1fVkdJQ19WMywgTlJfVkNQVVMsIHZjcHVzKTtcbitcdHYgPSB2bV9naWNfY3JlYXRlX3dpdGhfdmNwdXMoS1ZNX0RFVl9UWVBFX0FSTV9WR0lDX1YzLCBOUl9WQ1BVUyxcbitcdFx0XHRcdCAgICAgZ3Vlc3RfY29kZSwgdmNwdXMpO1xuIFx0c3VidGVzdF92M19yZWRpc3RfcmVnaW9ucyhcdTAwMjZ2KTtcbiBcdGt2bV9kZXZpY2VfYXR0cl9zZXQodi5naWNfZmQsIEtWTV9ERVZfQVJNX1ZHSUNfR1JQX0NUUkwsXG4gXHRcdFx0ICAgIEtWTV9ERVZfQVJNX1ZHSUNfQ1RSTF9JTklULCBOVUxMKTtcbkBAIC00MjIsNyArNDUyLDggQEAgc3RhdGljIHZvaWQgdGVzdF92M19uZXdfcmVkaXN0X3JlZ2lvbnModm9pZClcbiBcbiBcdC8qIHN0ZXAyICovXG4gXG4tXHR2ID0gdm1fZ2ljX2NyZWF0ZV93aXRoX3ZjcHVzKEtWTV9ERVZfVFlQRV9BUk1fVkdJQ19WMywgTlJfVkNQVVMsIHZjcHVzKTtcbitcdHYgPSB2bV9naWNfY3JlYXRlX3dpdGhfdmNwdXMoS1ZNX0RFVl9UWVBFX0FSTV9WR0lDX1YzLCBOUl9WQ1BVUyxcbitcdFx0XHRcdCAgICAgZ3Vlc3RfY29kZSwgdmNwdXMpO1xuIFx0c3VidGVzdF92M19yZWRpc3RfcmVnaW9ucyhcdTAwMjZ2KTtcbiBcbiBcdGFkZHIgPSBSRURJU1RfUkVHSU9OX0FUVFJfQUREUigxLCAweDI4MDAwMCwgMCwgMik7XG5AQCAtNDM2LDcgKzQ2Nyw4IEBAIHN0YXRpYyB2b2lkIHRlc3RfdjNfbmV3X3JlZGlzdF9yZWdpb25zKHZvaWQpXG4gXG4gXHQvKiBzdGVwIDMgKi9cbiBcbi1cdHYgPSB2bV9naWNfY3JlYXRlX3dpdGhfdmNwdXMoS1ZNX0RFVl9UWVBFX0FSTV9WR0lDX1YzLCBOUl9WQ1BVUywgdmNwdXMpO1xuK1x0diA9IHZtX2dpY19jcmVhdGVfd2l0aF92Y3B1cyhLVk1fREVWX1RZUEVfQVJNX1ZHSUNfVjMsIE5SX1ZDUFVTLFxuK1x0XHRcdFx0ICAgICBndWVzdF9jb2RlLCB2Y3B1cyk7XG4gXHRzdWJ0ZXN0X3YzX3JlZGlzdF9yZWdpb25zKFx1MDAyNnYpO1xuIFxuIFx0cmV0ID0gX19rdm1fZGV2aWNlX2F0dHJfc2V0KHYuZ2ljX2ZkLCBLVk1fREVWX0FSTV9WR0lDX0dSUF9BRERSLFxuQEAgLTQ1Nyw2ICs0ODksNzAgQEAgc3RhdGljIHZvaWQgdGVzdF92M19uZXdfcmVkaXN0X3JlZ2lvbnModm9pZClcbiBcdHZtX2dpY19kZXN0cm95KFx1MDAyNnYpO1xuIH1cbiBcbitzdGF0aWMgdm9pZCB0ZXN0X3YzX3JlZGlzdF9yZWdpb25fcmV0cnkodm9pZClcbit7XG4rXHRzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHVzW05SX1ZDUFVTXTtcbitcdHN0cnVjdCB2bV9naWMgdjtcbitcdHN0cnVjdCB1Y2FsbCB1YztcbitcdHU2NCBhZGRyO1xuK1x0aW50IHJldDtcbitcbitcdHYgPSB2bV9naWNfY3JlYXRlX3dpdGhfdmNwdXMoS1ZNX0RFVl9UWVBFX0FSTV9WR0lDX1YzLCBOUl9WQ1BVUyxcbitcdFx0XHRcdCAgICAgZ3Vlc3RfY2hlY2tfcmVkaXN0X3JldHJ5LCB2Y3B1cyk7XG4rXG4rXHRhZGRyID0gUkVESVNUX1JFR0lPTl9BVFRSX0FERFIoMiwgUkVESVNUX1JFVFJZX1JFR0lPTjBfQkFTRSwgMCwgMCk7XG4rXHRrdm1fZGV2aWNlX2F0dHJfc2V0KHYuZ2ljX2ZkLCBLVk1fREVWX0FSTV9WR0lDX0dSUF9BRERSLFxuK1x0XHRcdCAgICBLVk1fVkdJQ19WM19BRERSX1RZUEVfUkVESVNUX1JFR0lPTiwgXHUwMDI2YWRkcik7XG4rXG4rXHRhZGRyID0gUkVESVNUX1JFR0lPTl9BVFRSX0FERFIoMSwgUkVESVNUX1JFVFJZX1JFR0lPTjFfQkFTRSwgMCwgMSk7XG4rXHRrdm1fZGV2aWNlX2F0dHJfc2V0KHYuZ2ljX2ZkLCBLVk1fREVWX0FSTV9WR0lDX0dSUF9BRERSLFxuK1x0XHRcdCAgICBLVk1fVkdJQ19WM19BRERSX1RZUEVfUkVESVNUX1JFR0lPTiwgXHUwMDI2YWRkcik7XG4rXG4rXHRhZGRyID0gUkVESVNUX1JFVFJZX0RJU1RfQkFTRTtcbitcdGt2bV9kZXZpY2VfYXR0cl9zZXQodi5naWNfZmQsIEtWTV9ERVZfQVJNX1ZHSUNfR1JQX0FERFIsXG4rXHRcdFx0ICAgIEtWTV9WR0lDX1YzX0FERFJfVFlQRV9ESVNULCBcdTAwMjZhZGRyKTtcbitcbitcdGFkZHIgPSBSRURJU1RfUkVHSU9OX0FUVFJfQUREUigxLCBSRURJU1RfUkVUUllfRElTVF9CQVNFLCAwLCAyKTtcbitcdHJldCA9IF9fa3ZtX2RldmljZV9hdHRyX3NldCh2LmdpY19mZCwgS1ZNX0RFVl9BUk1fVkdJQ19HUlBfQUREUixcbitcdFx0XHRcdCAgICBLVk1fVkdJQ19WM19BRERSX1RZUEVfUkVESVNUX1JFR0lPTixcbitcdFx0XHRcdCAgICBcdTAwMjZhZGRyKTtcbitcdFRFU1RfQVNTRVJUKHJldCBcdTAwMjZcdTAwMjYgZXJybm8gPT0gRUlOVkFMLFxuK1x0XHQgICAgXCJyZWdpc3RlciByZWRpc3QgcmVnaW9uIGNvbGxpZGluZyB3aXRoIGRpc3RcIik7XG4rXG4rXHRhZGRyID0gUkVESVNUX1JFR0lPTl9BVFRSX0FERFIoMSwgUkVESVNUX1JFVFJZX1JFR0lPTjJfQkFTRSwgMCwgMik7XG4rXHRrdm1fZGV2aWNlX2F0dHJfc2V0KHYuZ2ljX2ZkLCBLVk1fREVWX0FSTV9WR0lDX0dSUF9BRERSLFxuK1x0XHRcdCAgICBLVk1fVkdJQ19WM19BRERSX1RZUEVfUkVESVNUX1JFR0lPTiwgXHUwMDI2YWRkcik7XG4rXG4rXHR2aXJ0X21hcCh2LnZtLCBSRURJU1RfUkVUUllfUkVHSU9OMF9CQVNFLCBSRURJU1RfUkVUUllfUkVHSU9OMF9CQVNFLFxuK1x0XHQgdm1fY2FsY19udW1fZ3Vlc3RfcGFnZXModi52bS1cdTAwM2Vtb2RlLFxuK1x0XHRcdFx0XHQgMyAqIEtWTV9WR0lDX1YzX1JFRElTVF9TSVpFKSk7XG4rXHR2aXJ0X21hcCh2LnZtLCBSRURJU1RfUkVUUllfUkVHSU9OMl9CQVNFLCBSRURJU1RfUkVUUllfUkVHSU9OMl9CQVNFLFxuK1x0XHQgdm1fY2FsY19udW1fZ3Vlc3RfcGFnZXModi52bS1cdTAwM2Vtb2RlLFxuK1x0XHRcdFx0XHQgS1ZNX1ZHSUNfVjNfUkVESVNUX1NJWkUpKTtcbitcbitcdGt2bV9kZXZpY2VfYXR0cl9zZXQodi5naWNfZmQsIEtWTV9ERVZfQVJNX1ZHSUNfR1JQX0NUUkwsXG4rXHRcdFx0ICAgIEtWTV9ERVZfQVJNX1ZHSUNfQ1RSTF9JTklULCBOVUxMKTtcbitcbitcdHZjcHVfcnVuKHZjcHVzWzBdKTtcbitcdHN3aXRjaCAoZ2V0X3VjYWxsKHZjcHVzWzBdLCBcdTAwMjZ1YykpIHtcbitcdGNhc2UgVUNBTExfRE9ORTpcbitcdFx0YnJlYWs7XG4rXHRjYXNlIFVDQUxMX0FCT1JUOlxuK1x0XHRSRVBPUlRfR1VFU1RfQVNTRVJUKHVjKTtcbitcdFx0YnJlYWs7XG4rXHRjYXNlIFVDQUxMX05PTkU6XG4rXHRcdGlmICh2Y3B1c1swXS1cdTAwM2VydW4tXHUwMDNlZXhpdF9yZWFzb24gPT0gS1ZNX0VYSVRfTU1JTylcbitcdFx0XHRURVNUX0ZBSUwoXCJVbmV4cGVjdGVkIE1NSU8gZXhpdCBhdCAweCVsbHhcIixcbitcdFx0XHRcdCAgdmNwdXNbMF0tXHUwMDNlcnVuLVx1MDAzZW1taW8ucGh5c19hZGRyKTtcbitcdFx0ZmFsbHRocm91Z2g7XG4rXHRkZWZhdWx0OlxuK1x0XHRURVNUX0ZBSUwoXCJVbmV4cGVjdGVkIHVjYWxsICVsdSwgZXhpdF9yZWFzb24gJXVcIixcbitcdFx0XHQgIHVjLmNtZCwgdmNwdXNbMF0tXHUwMDNlcnVuLVx1MDAzZWV4aXRfcmVhc29uKTtcbitcdH1cbitcbitcdHZtX2dpY19kZXN0cm95KFx1MDAyNnYpO1xuK31cbitcbiBzdGF0aWMgdm9pZCB0ZXN0X3YzX3R5cGVyX2FjY2Vzc2VzKHZvaWQpXG4ge1xuIFx0c3RydWN0IHZtX2dpYyB2O1xuQEAgLTYwOCw3ICs3MDQsOCBAQCBzdGF0aWMgdm9pZCB0ZXN0X3YzX3JlZGlzdF9pcGFfcmFuZ2VfY2hlY2tfYXRfdmNwdV9ydW4odm9pZClcbiBcdGludCByZXQsIGk7XG4gXHR1NjQgYWRkcjtcbiBcbi1cdHYgPSB2bV9naWNfY3JlYXRlX3dpdGhfdmNwdXMoS1ZNX0RFVl9UWVBFX0FSTV9WR0lDX1YzLCAxLCB2Y3B1cyk7XG4rXHR2ID0gdm1fZ2ljX2NyZWF0ZV93aXRoX3ZjcHVzKEtWTV9ERVZfVFlQRV9BUk1fVkdJQ19WMywgMSwgZ3Vlc3RfY29kZSxcbitcdFx0XHRcdCAgICAgdmNwdXMpO1xuIFxuIFx0LyogU2V0IHNwYWNlIGZvciAzIHJlZGlzdHMsIHdlIGhhdmUgMSB2Y3B1LCBzbyB0aGlzIHN1Y2NlZWRzLiAqL1xuIFx0YWRkciA9IG1heF9waHlzX3NpemUgLSAoMyAqIDIgKiAweDEwMDAwKTtcbkBAIC02NDEsNyArNzM4LDggQEAgc3RhdGljIHZvaWQgdGVzdF92M19pdHNfcmVnaW9uKHZvaWQpXG4gXHR1NjQgYWRkcjtcbiBcdGludCBpdHNfZmQsIHJldDtcbiBcbi1cdHYgPSB2bV9naWNfY3JlYXRlX3dpdGhfdmNwdXMoS1ZNX0RFVl9UWVBFX0FSTV9WR0lDX1YzLCBOUl9WQ1BVUywgdmNwdXMpO1xuK1x0diA9IHZtX2dpY19jcmVhdGVfd2l0aF92Y3B1cyhLVk1fREVWX1RZUEVfQVJNX1ZHSUNfVjMsIE5SX1ZDUFVTLFxuK1x0XHRcdFx0ICAgICBndWVzdF9jb2RlLCB2Y3B1cyk7XG4gXHRpdHNfZmQgPSBrdm1fY3JlYXRlX2RldmljZSh2LnZtLCBLVk1fREVWX1RZUEVfQVJNX1ZHSUNfSVRTKTtcbiBcbiBcdGFkZHIgPSAweDQwMTAwMDtcbkBAIC02ODQsNyArNzgyLDggQEAgc3RhdGljIHZvaWQgdGVzdF92M19uYXNzZ2ljYXAodm9pZClcbiBcdHUzMiB0eXBlcjI7XG4gXHRpbnQgcmV0O1xuIFxuLVx0dm0gPSB2bV9naWNfY3JlYXRlX3dpdGhfdmNwdXMoS1ZNX0RFVl9UWVBFX0FSTV9WR0lDX1YzLCBOUl9WQ1BVUywgdmNwdXMpO1xuK1x0dm0gPSB2bV9naWNfY3JlYXRlX3dpdGhfdmNwdXMoS1ZNX0RFVl9UWVBFX0FSTV9WR0lDX1YzLCBOUl9WQ1BVUyxcbitcdFx0XHRcdCAgICAgIGd1ZXN0X2NvZGUsIHZjcHVzKTtcbiBcdGt2bV9kZXZpY2VfYXR0cl9nZXQodm0uZ2ljX2ZkLCBLVk1fREVWX0FSTV9WR0lDX0dSUF9ESVNUX1JFR1MsXG4gXHRcdFx0ICAgIEdJQ0RfVFlQRVIyLCBcdTAwMjZ0eXBlcjIpO1xuIFx0aGFzX25hc3NnaWNhcCA9IHR5cGVyMiBcdTAwMjYgR0lDRF9UWVBFUjJfbkFTU0dJY2FwO1xuQEAgLTk3OCw2ICsxMDc3LDcgQEAgdm9pZCBydW5fdGVzdHModTMyIGdpY19kZXZfdHlwZSlcbiBcbiBcdGlmIChWR0lDX0RFVl9JU19WMyhnaWNfZGV2X3R5cGUpKSB7XG4gXHRcdHRlc3RfdjNfbmV3X3JlZGlzdF9yZWdpb25zKCk7XG4rXHRcdHRlc3RfdjNfcmVkaXN0X3JlZ2lvbl9yZXRyeSgpO1xuIFx0XHR0ZXN0X3YzX3R5cGVyX2FjY2Vzc2VzKCk7XG4gXHRcdHRlc3RfdjNfbGFzdF9iaXRfcmVkaXN0X3JlZ2lvbnMoKTtcbiBcdFx0dGVzdF92M19sYXN0X2JpdF9zaW5nbGVfcmRpc3QoKTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDA4OjI2OjU5LjI3OTkwMTk3MVoiLCJTZXEiOjE5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyOTAwODUyMTUyNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFBhdGNoIFNlcmllcyBmb3IgS01TQU4gRnV6emluZyBOZWVkcyoqXG5cbk9rYXksIHNvIHRoZSB0YXNrIGlzIHRvIGZpZ3VyZSBvdXQgaWYgdGhpcyBwYXRjaCBzZXJpZXMgaW4gYGFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1tbWlvLXYzLmNgIGFuZCBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2FybTY0L3ZnaWNfaW5pdC5jYCB3YXJyYW50cyBhIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4gSSBuZWVkIHRvIGRldGVybWluZSBpZiBgTmVlZHNLTVNBTiA9IHRydWVgIG9yIGBOZWVkc0tNU0FOID0gZmFsc2VgLiBMZXQncyBkaXZlIGluIGFuZCBzZWUgd2hhdCdzIGNoYW5nZWQuXG5cbkZpcnN0LCBJJ20gemVyb2luZyBpbiBvbiBgYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLW1taW8tdjMuY2AuIEl0IGxvb2tzIGxpa2UgdGhlIGNvcmUgb2YgdGhlIGNoYW5nZXMgcmV2b2x2ZSBhcm91bmQgcmVkaXN0cmlidXRvciBkZXZpY2UgbWFuYWdlbWVudC4gSSBzZWUgc2V2ZXJhbCBmdW5jdGlvbnMgaW52b2x2ZWQ6IGB2Z2ljX3VuZG9fcmVkaXN0X2Fzc2lnbm1lbnRgLCBgdmdpY19yZWdpc3Rlcl9yZWRpc3RfaW9kZXZgLCBgdmdpY19yb2xsYmFja19yZWRpc3RfaW9kZXZgLCBgdmdpY19yZWdpc3Rlcl9hbGxfcmVkaXN0X2lvZGV2c2AsIGFuZCBgdmdpY192M19zZXRfcmVkaXN0X2Jhc2VgLlxuXG5UaGUgZnVuY3Rpb25zIGRlYWxpbmcgd2l0aCB0aGUgcmVkaXN0cmlidXRvciBhc3NpZ25tZW50cyBzZWVtIHRvIGJlIHNldHRpbmcgYW5kIHVuc2V0dGluZyBgdmdpY19jcHUtXHUwMDNlcmRyZWdgLCBhbG9uZyB3aXRoIG90aGVyIHJlbGF0ZWQgbWVtb3J5IGxvY2F0aW9ucy4gSSBuZWVkIHRvIGJlIGNhcmVmdWwgd2l0aCB0aGUgbG9ja2luZyBhbmQgdW5sb2NraW5nIG9wZXJhdGlvbnMuIFNwZWNpZmljYWxseSwgYHZnaWNfdW5kb19yZWRpc3RfYXNzaWdubWVudGAgcmVzZXRzIHRoZSBpbmRleCBhbmQgcG9pbnRlciwgYW5kIGB2Z2ljX3JlZ2lzdGVyX3JlZGlzdF9pb2RldmAgZGVhbHMgd2l0aCBtZW1vcnkgYWxsb2NhdGlvbiAob3IgcmVnaXN0cmF0aW9uIHZpYSBga3ZtX2lvX2J1c19yZWdpc3Rlcl9kZXZgKSBhbmQgY2FsbHMgYHZnaWNfdW5kb19yZWRpc3RfYXNzaWdubWVudGAgb24gZmFpbHVyZS4gYHZnaWNfcm9sbGJhY2tfcmVkaXN0X2lvZGV2YCBhcHBlYXJzIHRvIGJlIGEgY2xlYW51cCBmdW5jdGlvbiB0aGF0IGFsc28gc2V0cyB0aGUgYHJkcmVnYCBwb2ludGVyIHRvIGBOVUxMYC4gVGhlIGB2Z2ljX3JlZ2lzdGVyX2FsbF9yZWRpc3RfaW9kZXZzYCBmdW5jdGlvbiBzZWVtcyB0byBiZSB1c2VkIHRvIHBlcmZvcm0gb3BlcmF0aW9ucyBvbiBhIGNvbGxlY3Rpb24gb2YgcmVkaXN0cmlidXRvciBkZXZpY2VzLCBhbmQgaXMgcGFzc2VkIGByZHJlZ2AuIFRoZSBpbXBvcnRhbnQgdGhpbmcgaGVyZSBpcyB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIGByZHJlZ2AgaXMgdXNlZC4gRmluYWxseSwgYHZnaWNfdjNfc2V0X3JlZGlzdF9iYXNlYCBhcHBlYXJzIHRvIGJlIGEgaGlnaGVyIGxldmVsIGZ1bmN0aW9uIHRoYXQgZmV0Y2hlcyB0aGUgYHJkcmVnYCBhbmQgY2FsbHMgYHZnaWNfcmVnaXN0ZXJfYWxsX3JlZGlzdF9pb2RldnNgLlxuXG5JIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZGF0YSBmbG93IGFuZCBob3cgdGhlc2UgZnVuY3Rpb25zIGludGVyYWN0LiBUbyBkbyB0aGF0IGVmZmVjdGl2ZWx5LCBJJ20gZ29pbmcgdG8gcHVsbCB1cCB0aGUgY29udGV4dCB3aXRoIGByZWFkLWZpbGVgIGFuZCBjYXJlZnVsbHkgaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSB3aXRoaW4gYHZnaWMtbW1pby12My5jYC4gSSBuZWVkIGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2YgdGhlIG92ZXJhbGwgbWVtb3J5IG1hbmFnZW1lbnQgc3RyYXRlZ3kgYW5kIGhvdyB0aGUgcmVkaXN0cmlidXRvciBkZXZpY2UgaXMgaGFuZGxlZC4gSSBuZWVkIHRvIGxvb2sgZm9yIGFueSBwb3RlbnRpYWwgZm9yIHVzZS1hZnRlci1mcmVlLCBkb3VibGUtZnJlZSwgb3IgbWVtb3J5IGxlYWtzIHdpdGhpbiB0aGlzIHNlY3Rpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjcxMTgsIk91dHB1dFRva2VucyI6NTAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NDQsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQwODoyNzoyOC4yODg0MjY5MTZaIiwiU2VxIjoyMCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTkwMzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLW1taW8tdjMuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA3NjAsXG4gIFwiTGluZUNvdW50XCI6IDkwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA3NjA6XFx0e1xcbiA3NjE6XFx0XFx0ZGV2LVxcdTAwM2VyZWdpb25zID0gdmdpY192M19kaXN0X3JlZ2lzdGVycztcXG4gNzYyOlxcdFxcdGRldi1cXHUwMDNlbnJfcmVnaW9ucyA9IEFSUkFZX1NJWkUodmdpY192M19kaXN0X3JlZ2lzdGVycyk7XFxuIDc2MzpcXHRcXG4gNzY0OlxcdFxcdGt2bV9pb2RldmljZV9pbml0KFxcdTAwMjZkZXYtXFx1MDAzZWRldiwgXFx1MDAyNmt2bV9pb19naWNfb3BzKTtcXG4gNzY1OlxcdFxcbiA3NjY6XFx0XFx0cmV0dXJuIFNaXzY0SztcXG4gNzY3OlxcdH1cXG4gNzY4OlxcdFxcbiA3Njk6XFx0c3RhdGljIHZvaWQgdmdpY191bmRvX3JlZGlzdF9hc3NpZ25tZW50KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4gNzcwOlxcdHtcXG4gNzcxOlxcdFxcdHN0cnVjdCB2Z2ljX2NwdSAqdmdpY19jcHUgPSBcXHUwMDI2dmNwdS1cXHUwMDNlYXJjaC52Z2ljX2NwdTtcXG4gNzcyOlxcdFxcbiA3NzM6XFx0XFx0bG9ja2RlcF9hc3NlcnRfaGVsZChcXHUwMDI2dmNwdS1cXHUwMDNla3ZtLVxcdTAwM2VzbG90c19sb2NrKTtcXG4gNzc0OlxcdFxcbiA3NzU6XFx0XFx0Z3VhcmQobXV0ZXgpKFxcdTAwMjZ2Y3B1LVxcdTAwM2Vrdm0tXFx1MDAzZWFyY2guY29uZmlnX2xvY2spO1xcbiA3NzY6XFx0XFxuIDc3NzpcXHRcXHR2Z2ljX2NwdS1cXHUwMDNlcmRyZWctXFx1MDAzZWZyZWVfaW5kZXgtLTtcXG4gNzc4OlxcdFxcdHZnaWNfY3B1LVxcdTAwM2VyZHJlZyA9IE5VTEw7XFxuIDc3OTpcXHRcXHR2Z2ljX2NwdS1cXHUwMDNlcmRfaW9kZXYuYmFzZV9hZGRyID0gVkdJQ19BRERSX1VOREVGO1xcbiA3ODA6XFx0fVxcbiA3ODE6XFx0XFxuIDc4MjpcXHQvKipcXG4gNzgzOlxcdCAqIHZnaWNfcmVnaXN0ZXJfcmVkaXN0X2lvZGV2IC0gcmVnaXN0ZXIgYSBzaW5nbGUgcmVkaXN0IGlvZGV2XFxuIDc4NDpcXHQgKiBAdmNwdTogICAgVGhlIFZDUFUgdG8gd2hpY2ggdGhlIHJlZGlzdHJpYnV0b3IgYmVsb25nc1xcbiA3ODU6XFx0ICpcXG4gNzg2OlxcdCAqIFJlZ2lzdGVyIGEgS1ZNIGlvZGV2IGZvciB0aGlzIFZDUFUncyByZWRpc3RyaWJ1dG9yIHVzaW5nIHRoZSBhZGRyZXNzXFxuIDc4NzpcXHQgKiBwcm92aWRlZC5cXG4gNzg4OlxcdCAqXFxuIDc4OTpcXHQgKiBSZXR1cm4gMCBvbiBzdWNjZXNzLCAtRVJSTk8gb3RoZXJ3aXNlLlxcbiA3OTA6XFx0ICovXFxuIDc5MTpcXHRpbnQgdmdpY19yZWdpc3Rlcl9yZWRpc3RfaW9kZXYoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbiA3OTI6XFx0e1xcbiA3OTM6XFx0XFx0c3RydWN0IGt2bSAqa3ZtID0gdmNwdS1cXHUwMDNla3ZtO1xcbiA3OTQ6XFx0XFx0c3RydWN0IHZnaWNfZGlzdCAqdmdpYyA9IFxcdTAwMjZrdm0tXFx1MDAzZWFyY2gudmdpYztcXG4gNzk1OlxcdFxcdHN0cnVjdCB2Z2ljX2NwdSAqdmdpY19jcHUgPSBcXHUwMDI2dmNwdS1cXHUwMDNlYXJjaC52Z2ljX2NwdTtcXG4gNzk2OlxcdFxcdHN0cnVjdCB2Z2ljX2lvX2RldmljZSAqcmRfZGV2ID0gXFx1MDAyNnZjcHUtXFx1MDAzZWFyY2gudmdpY19jcHUucmRfaW9kZXY7XFxuIDc5NzpcXHRcXHRzdHJ1Y3QgdmdpY19yZWRpc3RfcmVnaW9uICpyZHJlZztcXG4gNzk4OlxcdFxcdGdwYV90IHJkX2Jhc2U7XFxuIDc5OTpcXHRcXHRpbnQgcmV0ID0gMDtcXG4gODAwOlxcdFxcbiA4MDE6XFx0XFx0bG9ja2RlcF9hc3NlcnRfaGVsZChcXHUwMDI2a3ZtLVxcdTAwM2VzbG90c19sb2NrKTtcXG4gODAyOlxcdFxcdG11dGV4X2xvY2soXFx1MDAyNmt2bS1cXHUwMDNlYXJjaC5jb25maWdfbG9jayk7XFxuIDgwMzpcXHRcXG4gODA0OlxcdFxcdGlmICghSVNfVkdJQ19BRERSX1VOREVGKHZnaWNfY3B1LVxcdTAwM2VyZF9pb2Rldi5iYXNlX2FkZHIpKVxcbiA4MDU6XFx0XFx0XFx0Z290byBvdXRfdW5sb2NrO1xcbiA4MDY6XFx0XFxuIDgwNzpcXHRcXHQvKlxcbiA4MDg6XFx0XFx0ICogV2UgbWF5IGJlIGNyZWF0aW5nIFZDUFVzIGJlZm9yZSBoYXZpbmcgc2V0IHRoZSBiYXNlIGFkZHJlc3MgZm9yIHRoZVxcbiA4MDk6XFx0XFx0ICogcmVkaXN0cmlidXRvciByZWdpb24sIGluIHdoaWNoIGNhc2Ugd2Ugd2lsbCBjb21lIGJhY2sgdG8gdGhpc1xcbiA4MTA6XFx0XFx0ICogZnVuY3Rpb24gZm9yIGFsbCBWQ1BVcyB3aGVuIHRoZSBiYXNlIGFkZHJlc3MgaXMgc2V0LiAgSnVzdCByZXR1cm5cXG4gODExOlxcdFxcdCAqIHdpdGhvdXQgZG9pbmcgYW55IHdvcmsgZm9yIG5vdy5cXG4gODEyOlxcdFxcdCAqL1xcbiA4MTM6XFx0XFx0cmRyZWcgPSB2Z2ljX3YzX3JkaXN0X2ZyZWVfc2xvdChcXHUwMDI2dmdpYy1cXHUwMDNlcmRfcmVnaW9ucyk7XFxuIDgxNDpcXHRcXHRpZiAoIXJkcmVnKVxcbiA4MTU6XFx0XFx0XFx0Z290byBvdXRfdW5sb2NrO1xcbiA4MTY6XFx0XFxuIDgxNzpcXHRcXHRpZiAoIXZnaWNfdjNfY2hlY2tfYmFzZShrdm0pKSB7XFxuIDgxODpcXHRcXHRcXHRyZXQgPSAtRUlOVkFMO1xcbiA4MTk6XFx0XFx0XFx0Z290byBvdXRfdW5sb2NrO1xcbiA4MjA6XFx0XFx0fVxcbiA4MjE6XFx0XFxuIDgyMjpcXHRcXHR2Z2ljX2NwdS1cXHUwMDNlcmRyZWcgPSByZHJlZztcXG4gODIzOlxcdFxcdHZnaWNfY3B1LVxcdTAwM2VyZHJlZ19pbmRleCA9IHJkcmVnLVxcdTAwM2VmcmVlX2luZGV4O1xcbiA4MjQ6XFx0XFxuIDgyNTpcXHRcXHRyZF9iYXNlID0gcmRyZWctXFx1MDAzZWJhc2UgKyByZHJlZy1cXHUwMDNlZnJlZV9pbmRleCAqIEtWTV9WR0lDX1YzX1JFRElTVF9TSVpFO1xcbiA4MjY6XFx0XFxuIDgyNzpcXHRcXHRrdm1faW9kZXZpY2VfaW5pdChcXHUwMDI2cmRfZGV2LVxcdTAwM2VkZXYsIFxcdTAwMjZrdm1faW9fZ2ljX29wcyk7XFxuIDgyODpcXHRcXHRyZF9kZXYtXFx1MDAzZWJhc2VfYWRkciA9IHJkX2Jhc2U7XFxuIDgyOTpcXHRcXHRyZF9kZXYtXFx1MDAzZWlvZGV2X3R5cGUgPSBJT0RFVl9SRURJU1Q7XFxuIDgzMDpcXHRcXHRyZF9kZXYtXFx1MDAzZXJlZ2lvbnMgPSB2Z2ljX3YzX3JkX3JlZ2lzdGVycztcXG4gODMxOlxcdFxcdHJkX2Rldi1cXHUwMDNlbnJfcmVnaW9ucyA9IEFSUkFZX1NJWkUodmdpY192M19yZF9yZWdpc3RlcnMpO1xcbiA4MzI6XFx0XFx0cmRfZGV2LVxcdTAwM2VyZWRpc3RfdmNwdSA9IHZjcHU7XFxuIDgzMzpcXHRcXG4gODM0OlxcdFxcdC8qIFByb3RlY3RlZCBieSBzbG90c19sb2NrICovXFxuIDgzNTpcXHRcXHRyZHJlZy1cXHUwMDNlZnJlZV9pbmRleCsrO1xcbiA4MzY6XFx0XFxuIDgzNzpcXHRcXHRtdXRleF91bmxvY2soXFx1MDAyNmt2bS1cXHUwMDNlYXJjaC5jb25maWdfbG9jayk7XFxuIDgzODpcXHRcXG4gODM5OlxcdFxcdHJldCA9IGt2bV9pb19idXNfcmVnaXN0ZXJfZGV2KGt2bSwgS1ZNX01NSU9fQlVTLCByZF9iYXNlLFxcbiA4NDA6XFx0XFx0XFx0XFx0XFx0ICAgICAgMiAqIFNaXzY0SywgXFx1MDAyNnJkX2Rldi1cXHUwMDNlZGV2KTtcXG4gODQxOlxcdFxcdGlmIChyZXQpXFxuIDg0MjpcXHRcXHRcXHR2Z2ljX3VuZG9fcmVkaXN0X2Fzc2lnbm1lbnQodmNwdSk7XFxuIDg0MzpcXHRcXG4gODQ0OlxcdFxcdHJldHVybiByZXQ7XFxuIDg0NTpcXHRcXG4gODQ2OlxcdG91dF91bmxvY2s6XFxuIDg0NzpcXHRcXHRtdXRleF91bmxvY2soXFx1MDAyNmt2bS1cXHUwMDNlYXJjaC5jb25maWdfbG9jayk7XFxuIDg0ODpcXHRcXHRyZXR1cm4gcmV0O1xcbiA4NDk6XFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQwODoyNzoyOC4yODg1Mjc5NjZaIiwiU2VxIjoyMSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTk2MzczOTg4NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHdoYXQgSSB3b3VsZCBiZSB0aGlua2luZywgZ2l2ZW4gdGhhdCBjb250ZXh0LlxuXG4qKkRpdmluZyBpbnRvIHRoZSBWZ2ljLU1NSU8tVjMgSW1wbGVtZW50YXRpb24qKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGRpZyBpbnRvIHRoZSBndXRzIG9mIHRoZSB2aXJ0dWFsIEdJQyAoR2VuZXJpYyBJbnRlcnJ1cHQgQ29udHJvbGxlcikgbWVtb3J5LW1hcHBlZCBJL08gdjMgaW1wbGVtZW50YXRpb24sIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIGBhcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtbW1pby12My5jYCBmaWxlLiBJIG5lZWQgdG8gZ2V0IGEgYmV0dGVyIGhhbmRsZSBvbiBob3cgdGhpcyB2ZXJzaW9uIGhhbmRsZXMgbWVtb3J5LW1hcHBlZCBhY2Nlc3Nlcy4gTGV0J3Mgc3RhcnQgYnkgemVyb2luZyBpbiBvbiBsaW5lcyA4NTAgdGhyb3VnaCA5MzAuIFRoaXMgc2VjdGlvbiBpcyBwcm9iYWJseSBrZXkgdG8gdW5kZXJzdGFuZGluZyBhIHNwZWNpZmljIGNyaXRpY2FsIGZ1bmN0aW9uIG9yIGEgcGFydGljdWxhciBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zLCBtYXliZSByZWxhdGVkIHRvIGludGVycnVwdCBjb25maWd1cmF0aW9uLCBpbmplY3Rpb24sIG9yIGFja25vd2xlZGdlbWVudC4gS25vd2luZyB0aGlzIHdpbGwgZ2l2ZSBtZSBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0aGUgdmlydHVhbCBHSUMgaW50ZXJhY3RzIHdpdGggdGhlIGhvc3QgYW5kIGd1ZXN0LCBzcGVjaWZpY2FsbHkgdGhlIG1lbW9yeS1tYXBwZWQgaW50ZXJmYWNlLiBJJ20gaG9waW5nIHRvIGlkZW50aWZ5IGFueSBwb3RlbnRpYWwgYm90dGxlbmVja3MsIGFyZWFzIGZvciBvcHRpbWl6YXRpb24sIG9yIHBlcmhhcHMgZXZlbiBzdWJ0bGUgYnVncy4gTGV0J3Mgc2VlIHdoYXQgdGhlc2UgbGluZXMgcmV2ZWFsLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5Njg4LCJPdXRwdXRUb2tlbnMiOjUwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQwODoyNzozMC4yNTIyNzEzOVoiLCJTZXEiOjIyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDI3MjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLW1taW8tdjMuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA4NTAsXG4gIFwiTGluZUNvdW50XCI6IDgwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA4NTA6XFx0XFxuIDg1MTpcXHR2b2lkIHZnaWNfdW5yZWdpc3Rlcl9yZWRpc3RfaW9kZXYoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbiA4NTI6XFx0e1xcbiA4NTM6XFx0XFx0c3RydWN0IHZnaWNfaW9fZGV2aWNlICpyZF9kZXYgPSBcXHUwMDI2dmNwdS1cXHUwMDNlYXJjaC52Z2ljX2NwdS5yZF9pb2RldjtcXG4gODU0OlxcdFxcbiA4NTU6XFx0XFx0a3ZtX2lvX2J1c191bnJlZ2lzdGVyX2Rldih2Y3B1LVxcdTAwM2Vrdm0sIEtWTV9NTUlPX0JVUywgXFx1MDAyNnJkX2Rldi1cXHUwMDNlZGV2KTtcXG4gODU2OlxcdH1cXG4gODU3OlxcdFxcbiA4NTg6XFx0c3RhdGljIHZvaWQgdmdpY19yb2xsYmFja19yZWRpc3RfaW9kZXYoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxcbiA4NTk6XFx0XFx0XFx0XFx0XFx0ICAgICAgIHN0cnVjdCB2Z2ljX3JlZGlzdF9yZWdpb24gKnJkcmVnKVxcbiA4NjA6XFx0e1xcbiA4NjE6XFx0XFx0c3RydWN0IHZnaWNfY3B1ICp2Z2ljX2NwdSA9IFxcdTAwMjZ2Y3B1LVxcdTAwM2VhcmNoLnZnaWNfY3B1O1xcbiA4NjI6XFx0XFxuIDg2MzpcXHRcXHRsb2NrZGVwX2Fzc2VydF9oZWxkKFxcdTAwMjZ2Y3B1LVxcdTAwM2Vrdm0tXFx1MDAzZXNsb3RzX2xvY2spO1xcbiA4NjQ6XFx0XFxuIDg2NTpcXHRcXHRpZiAodmdpY19jcHUtXFx1MDAzZXJkcmVnICE9IHJkcmVnKVxcbiA4NjY6XFx0XFx0XFx0cmV0dXJuO1xcbiA4Njc6XFx0XFxuIDg2ODpcXHRcXHR2Z2ljX3VucmVnaXN0ZXJfcmVkaXN0X2lvZGV2KHZjcHUpO1xcbiA4Njk6XFx0XFxuIDg3MDpcXHRcXHRndWFyZChtdXRleCkoXFx1MDAyNnZjcHUtXFx1MDAzZWt2bS1cXHUwMDNlYXJjaC5jb25maWdfbG9jayk7XFxuIDg3MTpcXHRcXHR2Z2ljX2NwdS1cXHUwMDNlcmRyZWcgPSBOVUxMO1xcbiA4NzI6XFx0XFx0dmdpY19jcHUtXFx1MDAzZXJkX2lvZGV2LmJhc2VfYWRkciA9IFZHSUNfQUREUl9VTkRFRjtcXG4gODczOlxcdH1cXG4gODc0OlxcdFxcbiA4NzU6XFx0c3RhdGljIGludCB2Z2ljX3JlZ2lzdGVyX2FsbF9yZWRpc3RfaW9kZXZzKHN0cnVjdCBrdm0gKmt2bSxcXG4gODc2OlxcdFxcdFxcdFxcdFxcdFxcdCAgIHN0cnVjdCB2Z2ljX3JlZGlzdF9yZWdpb24gKnJkcmVnKVxcbiA4Nzc6XFx0e1xcbiA4Nzg6XFx0XFx0c3RydWN0IGt2bV92Y3B1ICp2Y3B1O1xcbiA4Nzk6XFx0XFx0dW5zaWduZWQgbG9uZyBjO1xcbiA4ODA6XFx0XFx0aW50IHJldCA9IDA7XFxuIDg4MTpcXHRcXG4gODgyOlxcdFxcdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXFx1MDAyNmt2bS1cXHUwMDNlc2xvdHNfbG9jayk7XFxuIDg4MzpcXHRcXG4gODg0OlxcdFxcdGt2bV9mb3JfZWFjaF92Y3B1KGMsIHZjcHUsIGt2bSkge1xcbiA4ODU6XFx0XFx0XFx0cmV0ID0gdmdpY19yZWdpc3Rlcl9yZWRpc3RfaW9kZXYodmNwdSk7XFxuIDg4NjpcXHRcXHRcXHRpZiAocmV0KVxcbiA4ODc6XFx0XFx0XFx0XFx0YnJlYWs7XFxuIDg4ODpcXHRcXHR9XFxuIDg4OTpcXHRcXG4gODkwOlxcdFxcdGlmIChyZXQpIHtcXG4gODkxOlxcdFxcdFxcdC8qIFVuZG8gYXNzaWdubWVudHMgbWFkZSBmcm9tIHRoZSByZWdpb24gYmVpbmcgYWRkZWQuICovXFxuIDg5MjpcXHRcXHRcXHRpbnQgaTtcXG4gODkzOlxcdFxcbiA4OTQ6XFx0XFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIGM7IGkrKykge1xcbiA4OTU6XFx0XFx0XFx0XFx0dmNwdSA9IGt2bV9nZXRfdmNwdShrdm0sIGkpO1xcbiA4OTY6XFx0XFx0XFx0XFx0dmdpY19yb2xsYmFja19yZWRpc3RfaW9kZXYodmNwdSwgcmRyZWcpO1xcbiA4OTc6XFx0XFx0XFx0fVxcbiA4OTg6XFx0XFx0fVxcbiA4OTk6XFx0XFxuIDkwMDpcXHRcXHRyZXR1cm4gcmV0O1xcbiA5MDE6XFx0fVxcbiA5MDI6XFx0XFxuIDkwMzpcXHQvKipcXG4gOTA0OlxcdCAqIHZnaWNfdjNfYWxsb2NfcmVkaXN0X3JlZ2lvbiAtIEFsbG9jYXRlIGEgbmV3IHJlZGlzdHJpYnV0b3IgcmVnaW9uXFxuIDkwNTpcXHQgKlxcbiA5MDY6XFx0ICogUGVyZm9ybXMgdmFyaW91cyBjaGVja3MgYmVmb3JlIGluc2VydGluZyB0aGUgcmRpc3QgcmVnaW9uIGluIHRoZSBsaXN0LlxcbiA5MDc6XFx0ICogVGhvc2UgdGVzdHMgZGVwZW5kIG9uIHdoZXRoZXIgdGhlIHNpemUgb2YgdGhlIHJkaXN0IHJlZ2lvbiBpcyBrbm93blxcbiA5MDg6XFx0ICogKGllLiBjb3VudCAhPSAwKS4gVGhlIGxpc3QgaXMgc29ydGVkIGJ5IHJkaXN0IHJlZ2lvbiBpbmRleC5cXG4gOTA5OlxcdCAqXFxuIDkxMDpcXHQgKiBAa3ZtOiBrdm0gaGFuZGxlXFxuIDkxMTpcXHQgKiBAaW5kZXg6IHJlZGlzdCByZWdpb24gaW5kZXhcXG4gOTEyOlxcdCAqIEBiYXNlOiBiYXNlIG9mIHRoZSBuZXcgcmRpc3QgcmVnaW9uXFxuIDkxMzpcXHQgKiBAY291bnQ6IG51bWJlciBvZiByZWRpc3RyaWJ1dG9ycyB0aGUgcmVnaW9uIGlzIG1hZGUgb2YgKDAgaW4gdGhlIG9sZCBzdHlsZVxcbiA5MTQ6XFx0ICogc2luZ2xlIHJlZ2lvbiwgd2hvc2Ugc2l6ZSBpcyBpbmR1Y2VkIGZyb20gdGhlIG51bWJlciBvZiB2Y3B1cylcXG4gOTE1OlxcdCAqXFxuIDkxNjpcXHQgKiBSZXR1cm4gMCBvbiBzdWNjZXNzLCBcXHUwMDNjIDAgb3RoZXJ3aXNlXFxuIDkxNzpcXHQgKi9cXG4gOTE4OlxcdHN0YXRpYyBpbnQgdmdpY192M19hbGxvY19yZWRpc3RfcmVnaW9uKHN0cnVjdCBrdm0gKmt2bSwgdWludDMyX3QgaW5kZXgsXFxuIDkxOTpcXHRcXHRcXHRcXHRcXHQgICAgICAgZ3BhX3QgYmFzZSwgdWludDMyX3QgY291bnQpXFxuIDkyMDpcXHR7XFxuIDkyMTpcXHRcXHRzdHJ1Y3QgdmdpY19kaXN0ICpkID0gXFx1MDAyNmt2bS1cXHUwMDNlYXJjaC52Z2ljO1xcbiA5MjI6XFx0XFx0c3RydWN0IHZnaWNfcmVkaXN0X3JlZ2lvbiAqcmRyZWc7XFxuIDkyMzpcXHRcXHRzdHJ1Y3QgbGlzdF9oZWFkICpyZF9yZWdpb25zID0gXFx1MDAyNmQtXFx1MDAzZXJkX3JlZ2lvbnM7XFxuIDkyNDpcXHRcXHRpbnQgbnJfdmNwdXMgPSBhdG9taWNfcmVhZChcXHUwMDI2a3ZtLVxcdTAwM2VvbmxpbmVfdmNwdXMpO1xcbiA5MjU6XFx0XFx0c2l6ZV90IHNpemUgPSBjb3VudCA/IGNvdW50ICogS1ZNX1ZHSUNfVjNfUkVESVNUX1NJWkVcXG4gOTI2OlxcdFxcdFxcdFxcdCAgICA6IG5yX3ZjcHVzICogS1ZNX1ZHSUNfVjNfUkVESVNUX1NJWkU7XFxuIDkyNzpcXHRcXHRpbnQgcmV0O1xcbiA5Mjg6XFx0XFxuIDkyOTpcXHRcXHQvKiBjcm9zcyB0aGUgZW5kIG9mIG1lbW9yeSA/ICovXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDA4OjI3OjMwLjI1MjM3Nzc5WiIsIlNlcSI6MjMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI4NjE1MDkzMTg2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlBhdGNoIEFuYWx5c2lzOiBWR0lDIFJlZGlzdHJpYnV0b3IgUmVnaXN0cmF0aW9uIEVycm9yIEhhbmRsaW5nKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZ3Jhc3AgdGhlIGNvcmUgY29uY2VwdHVhbCBjaGFuZ2UgdGhpcyBwYXRjaCBpbnRyb2R1Y2VzLiBJdCBsb29rcyBsaWtlIGl0J3MgYWRkcmVzc2luZyBhIGNyaXRpY2FsIGZsYXcgaW4gdGhlIGVycm9yIGhhbmRsaW5nIGZvciByZWdpc3RlcmluZyByZWRpc3RyaWJ1dG9yIE1NSU8gZGV2aWNlcyB3aXRoaW4gdGhlIEtWTSBWR0lDIHYzIGltcGxlbWVudGF0aW9uLCBzcGVjaWZpY2FsbHkgb24gYXJtNjQuIFByZXZpb3VzbHksIHRoZXJlIHdhcyBhIHByb2JsZW0gd2l0aCB0aGUgb3JkZXIgb2Ygb3BlcmF0aW9ucyB3aGVuIHJlZ2lzdGVyaW5nIHRoZXNlIGBpb2RldnNgLiBUaGUgaW5jcmVtZW50IG9mIGByZHJlZy1cdTAwM2VmcmVlX2luZGV4YCB3YXMgaGFwcGVuaW5nICphZnRlciogdGhlIHBvdGVudGlhbGx5IGZhaWxpbmcgYGt2bV9pb19idXNfcmVnaXN0ZXJfZGV2YCBjYWxsLiBUaGlzIGxlZnQgdGhpbmdzIGluIGEgbWVzc3kgc3RhdGUgaWYgdGhlIHJlZ2lzdHJhdGlvbiBmYWlsZWQgb3IgaWYgc29tZXRoaW5nIHdlbnQgd3JvbmcgbGF0ZXIgaW4gdGhlIGB2Z2ljX3JlZ2lzdGVyX2FsbF9yZWRpc3RfaW9kZXZzYCBwcm9jZXNzLlxuXG5UaGUgcGF0Y2ggc2VlbXMgdG8gY2xlYW4gdXAgdGhlIGxvZ2ljIGFyb3VuZCB0aGF0IGZhaWx1cmUsIHdpdGggdGhlc2Uga2V5IGNoYW5nZXM6IGB2Z2ljX3VuZG9fcmVkaXN0X2Fzc2lnbm1lbnRgIG5vdyBjb3JyZWN0bHkgcmVzZXRzIGByZHJlZy1cdTAwM2VmcmVlX2luZGV4YCwgaXQgYWxzbyBjbGVhcnMgYHZnaWNfY3B1LVx1MDAzZXJkcmVnYCBhbmQgYHZnaWNfY3B1LVx1MDAzZXJkX2lvZGV2LmJhc2VfYWRkcmAuIFRoZSBwYXRjaCBhbHNvIGVuc3VyZXMgdGhhdCBgdmdpY19yb2xsYmFja19yZWRpc3RfaW9kZXZgIG9ubHkgdW5yZWdpc3RlcnMgYW5kIHJlc2V0cyBzdGF0ZSBpZiB0aGUgYHZnaWNfY3B1LVx1MDAzZXJkcmVnYCBtYXRjaGVzIHRoZSBjdXJyZW50IGByZHJlZ2AuIFRoZSBjYWxscyB0byBgdmdpY19yZWdpc3Rlcl9hbGxfcmVkaXN0X2lvZGV2c2AgYW5kIGB2Z2ljX3YzX3NldF9yZWRpc3RfYmFzZWAgYXJlIGFsc28gdXBkYXRlZCB0byBwYXNzIGByZHJlZ2AsIHdoaWNoIG1ha2VzIHNlbnNlIGZvciB0aGUgY29ycmVjdCBiZWhhdmlvci5cblxuTm93LCBsZXQncyBnZXQgaW50byB0aGUgbml0dHktZ3JpdHR5LiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoaXMgcGF0Y2ggaXNuJ3QgaW50cm9kdWNpbmcgYW55IG5ldyB2dWxuZXJhYmlsaXRpZXMgb3Igd2Vha25lc3NlcywgZXNwZWNpYWxseSByZWxhdGVkIHRvIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBwb3RlbnRpYWwgaW5mb3JtYXRpb24gbGVha3MsIGFuZCBnZW5lcmFsIG1lbW9yeSBzYWZldHkuIEknbSBmb2N1c2luZyBvbiB1c2VyIHNwYWNlIGludGVyYWN0aW9ucywgZGF0YSBzdHJ1Y3R1cmUgaW5pdGlhbGl6YXRpb24sIGFuZCB0aGUgdXN1YWwgc3VzcGVjdHMuIEkgY2FuIHNlZSB0aGF0IHRoZSBjaGFuZ2VzIGRvbid0IGNvcHkgbWVtb3J5IHRvIHVzZXIgc3BhY2UsIG5vIG5ldyB1bmluaXRpYWxpemVkIHN0cnVjdHVyZXMgb3IgZmllbGRzIGFyZSBpbnRyb2R1Y2VkLCBhbmQgbm8gYnJhbmNoZXMgYXJlIGJhc2VkIG9uIHVuaW5pdGlhbGl6ZWQgZGF0YS4gVGhlc2UgYXJlIGdvb2Qgc2lnbnMuXG5cblRoZSBtYWluIGlzc3VlIGhlcmUgaXMgYSBsb2dpYyBidWcgYW5kIGEgY2xlYW51cCBpc3N1ZS4gSXQncyBhbiBlcnJvciBoYW5kbGluZyBhbmQgc3RhdGUgbWFuYWdlbWVudCBwcm9ibGVtIOKAkyBhIGZhaWxlZCByZWdpc3RyYXRpb24gdGhhdCB3YXMgbGVhZGluZyB0byBhbiBpbmNvbnNpc3RlbnQgc3RhdGUuIE5vIG5ldyBtZW1vcnkgYWxsb2NhdGlvbnMgd2VyZSBpbnRyb2R1Y2VkLCB3aGljaCBmdXJ0aGVyIHJlZHVjZXMgYW55IHdvcnJpZXMgb2YgbWVtb3J5IGlzc3Vlcy5cblxuVGhlIHF1ZXN0aW9uIG9mIEtNU0FOIChLZXJuZWwgTWVtb3J5IFNhbml0aXplcikgaXMgcGFyYW1vdW50LCBvZiBjb3Vyc2UuIEkgbmVlZCB0byBjYXJlZnVsbHkgYXNzZXNzIGlmIHRoaXMgcGF0Y2ggd2FycmFudHMgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLiBUaGUgZ3VpZGVsaW5lcyBhcmUgY2xlYXI6IHVubGVzcyB0aGUgcGF0Y2ggaW50cm9kdWNlcyAqc3BlY2lmaWNhbGx5KiB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyB0aGF0IEtNU0FOIGlzIG5lZWRlZCB0byBkZXRlY3QsIHdlIGRvbid0IG5lZWQgS01TQU4uIEJhc2VkIG9uIG15IHJldmlldywgdGhhdCdzIG5vdCB0aGUgY2FzZSBoZXJlLlxuXG4xLiAgVGhpcyBwYXRjaCBpc24ndCBpbnRyb2R1Y2luZyBhIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cbjIuICBJdOKAmXMgcHJpbWFyaWx5IGZpeGluZyBlcnJvciBoYW5kbGluZyBhbmQgY2xlYW51cCBsb2dpYyBmb3IgdGhlIGV4aXN0aW5nIEtWTSBWR0lDIHJlZGlzdHJpYnV0b3IgcmVnaXN0cmF0aW9uLCBhbmQgaW1wcm92aW5nIHN0YXRlIGNvbnNpc3RlbmN5LlxuMy4gIEV2ZXJ5dGhpbmcgdGhlIHBhdGNoIHRvdWNoZXMgYW5kIG1vZGlmaWVzIGFyZSBpbml0aWFsaXplZCBwb2ludGVycyBhbmQgZmllbGRzIG9uIGV4aXN0aW5nIHN0cnVjdCBrdm0sIGt2bVxcX3ZjcHUsIGFuZCB2Z2ljIHN0cnVjdHVyZXMuXG5cblRoZXJlZm9yZSwgYE5lZWRzS01TQU4gPSBmYWxzZWAuIEkgbmVlZCB0byBkb2N1bWVudCB0aGlzIHJlYXNvbmluZyB0aG9yb3VnaGx5LCB0aG91Z2gsIGFuZCBJIG5lZWQgdG8gZG8gYSB0aG9yb3VnaCBzYW5pdHkgY2hlY2sgdG8gbWFrZSBjZXJ0YWluIEkgaGF2ZW4ndCBtaXNzZWQgYW55dGhpbmcuIEknbSBxdWl0ZSBjb25maWRlbnQgdGhhdCB0aGlzIHBhdGNoIGlzIHNhZmUsIGJ1dCB0aGVyZSdzIG5vIHJlYXNvbiB0byBydXNoIGhlcmUuIEknbGwgdGFrZSBhIGNvbXByZWhlbnNpdmUgbG9vayBhdCB0aGUgb3ZlcmFsbCBjb250ZXh0LCB0aGUgb3JpZ2luYWwgZGVzaWduLCB0aGUgcHJvYmxlbSwgYW5kIHRoZSBzb2x1dGlvbiB0byBlbnN1cmUgSSB1bmRlcnN0YW5kIGl0IGluc2lkZSBhbmQgb3V0LiBUaGVuIEknbGwgd3JpdGUgdXAgYSBkZXRhaWxlZCBleHBsYW5hdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTEzMDYsIk91dHB1dFRva2VucyI6MTQ1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzAwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMDg6Mjc6NTguODY3NDczOTA2WiIsIlNlcSI6MjQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTc3MDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBlcnJvciByb2xsYmFjayBoYW5kbGluZyBkdXJpbmcgS1ZNIEFSTTY0IFZHSUN2MyByZWRpc3RyaWJ1dG9yIGlvZGV2IHJlZ2lzdHJhdGlvbiAoaGFuZGxpbmcgZmFpbGVkIHJlZ2lzdHJhdGlvbiBjbGVhbnVwLCByZXNldHRpbmcgdmdpY19jcHUgcmVkaXN0cmlidXRvciBwb2ludGVycywgYW5kIGRlY3JlbWVudGluZyBmcmVlX2luZGV4IGFwcHJvcHJpYXRlbHkpLiBUaGUgY2hhbmdlcyBkbyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSBhbnkgbWVtb3J5IGFsbG9jYXRpb25zLCBkYXRhIHN0cnVjdHVyZXMgY29waWVkIHRvIHVzZXJzcGFjZSwgb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgYWNjZXNzZXMuIEFueSBwb3RlbnRpYWwgY29uY3VycmVuY3ksIGxvY2sgb3JkZXJpbmcsIG9yIGludmFsaWQgZGVyZWZlcmVuY2UgaXNzdWVzIGFyZSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIHNhbml0aXplcnMgKExPQ0tERVAvS0FTQU4pLiBUaGVyZWZvcmUsIHRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgaW5mb3JtYXRpb24gbGVha3MgdGhhdCB3b3VsZCByZXF1aXJlIGEgS01TQU4gZnV6emluZyBzZXNzaW9uLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGVycm9yIHJvbGxiYWNrIGhhbmRsaW5nIGR1cmluZyBLVk0gQVJNNjQgVkdJQ3YzIHJlZGlzdHJpYnV0b3IgaW9kZXYgcmVnaXN0cmF0aW9uIChoYW5kbGluZyBmYWlsZWQgcmVnaXN0cmF0aW9uIGNsZWFudXAsIHJlc2V0dGluZyB2Z2ljX2NwdSByZWRpc3RyaWJ1dG9yIHBvaW50ZXJzLCBhbmQgZGVjcmVtZW50aW5nIGZyZWVfaW5kZXggYXBwcm9wcmlhdGVseSkuIFRoZSBjaGFuZ2VzIGRvIG5vdCBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IGFueSBtZW1vcnkgYWxsb2NhdGlvbnMsIGRhdGEgc3RydWN0dXJlcyBjb3BpZWQgdG8gdXNlcnNwYWNlLCBvciB1bmluaXRpYWxpemVkIG1lbW9yeSBhY2Nlc3Nlcy4gQW55IHBvdGVudGlhbCBjb25jdXJyZW5jeSwgbG9jayBvcmRlcmluZywgb3IgaW52YWxpZCBkZXJlZmVyZW5jZSBpc3N1ZXMgYXJlIGNvdmVyZWQgYnkgc3RhbmRhcmQgc2FuaXRpemVycyAoTE9DS0RFUC9LQVNBTikuIFRoZXJlZm9yZSwgdGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBpbmZvcm1hdGlvbiBsZWFrcyB0aGF0IHdvdWxkIHJlcXVpcmUgYSBLTVNBTiBmdXp6aW5nIHNlc3Npb24uXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow9nlt2[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-31 08:25:14 +0000 UTC FinishedAt: 2026-08-31 08:28:01 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "cf72cbb39da84b6f02f90c07f33b102fc10b16f0", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM", "VIRTUALIZATION" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "cf72cbb39da84b6f02f90c07f33b102fc10b16f0", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM", "VIRTUALIZATION" ], "series_id": "b03c2f29-3fac-4960-800e-c9cd7723e89c" }, "track": "KASAN", "fuzz": { "focus": [ "kvm" ], "focus_symbols": [ "vgic_v3_set_redist_base", "vgic_register_redist_iodev", "vgic_unregister_redist_iodev" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDA4OjI2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTSYjMzQ7LAogICAgJiMzNDtWSVJUVUFMSVpBVElPTiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3ZnaWNfdjNfc2V0X3JlZGlzdF9iYXNlJiMzNDssCiAgICAmIzM0O3ZnaWNfcmVnaXN0ZXJfcmVkaXN0X2lvZGV2JiMzNDssCiAgICAmIzM0O3ZnaWNfdW5yZWdpc3Rlcl9yZWRpc3RfaW9kZXYmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBlcnJvciByb2xsYmFjayBoYW5kbGluZyBkdXJpbmcgS1ZNIEFSTTY0IFZHSUN2MyByZWRpc3RyaWJ1dG9yIGlvZGV2IHJlZ2lzdHJhdGlvbiAoaGFuZGxpbmcgZmFpbGVkIHJlZ2lzdHJhdGlvbiBjbGVhbnVwLCByZXNldHRpbmcgdmdpY19jcHUgcmVkaXN0cmlidXRvciBwb2ludGVycywgYW5kIGRlY3JlbWVudGluZyBmcmVlX2luZGV4IGFwcHJvcHJpYXRlbHkpLiBUaGUgY2hhbmdlcyBkbyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSBhbnkgbWVtb3J5IGFsbG9jYXRpb25zLCBkYXRhIHN0cnVjdHVyZXMgY29waWVkIHRvIHVzZXJzcGFjZSwgb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgYWNjZXNzZXMuIEFueSBwb3RlbnRpYWwgY29uY3VycmVuY3ksIGxvY2sgb3JkZXJpbmcsIG9yIGludmFsaWQgZGVyZWZlcmVuY2UgaXNzdWVzIGFyZSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIHNhbml0aXplcnMgKExPQ0tERVAvS0FTQU4pLiBUaGVyZWZvcmUsIHRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgaW5mb3JtYXRpb24gbGVha3MgdGhhdCB3b3VsZCByZXF1aXJlIGEgS01TQU4gZnV6emluZyBzZXNzaW9uLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBlcnJvciB1bndpbmRpbmcgYW5kIHJvbGxiYWNrIGhhbmRsaW5nIHdoZW4gcmVnaXN0ZXJpbmcgVkdJQ3YzIHJlZGlzdHJpYnV0b3IgSS9PIGRldmljZXMgaW4gQVJNNjQgS1ZNLiBJdCBlbnN1cmVzIHRoYXQgZmFpbGVkIHJlZGlzdHJpYnV0b3IgcmVnaXN0cmF0aW9uIHByb3Blcmx5IHJvbGxzIGJhY2sgdGhlIGFzc2lnbmVkIHJlZ2lvbiBzdGF0ZSBhbmQgb25seSB0ZWFycyBkb3duIFZDUFVzIGFzc29jaWF0ZWQgd2l0aCB0aGUgZmFpbGluZyByZWdpb24uIFRoZXNlIGNvZGUgcGF0aHMgYXJlIHJlYWNoYWJsZSB2aWEgS1ZNIGlvY3RscyBhbmQgd29ydGggZnV6emluZyBmb3IgY29uY3VycmVuY3kgYW5kIHN0YXRlIG1hbmFnZW1lbnQgYnVncy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAwODoyNjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGFjOGZjN2E1NGNmMTcyMjI3NGM4MzQyY2YxZjA4NjJhMTQ1OTliNjhcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEF1ZyAzMSAwODoyNjoyMyAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtbW1pby12My5jIGIvYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLW1taW8tdjMuY1xuaW5kZXggNTkxM2EyMGQ4MzAxOS4uNzdhYTg0MzM3MDFhMSAxMDA2NDRcbi0tLSBhL2FyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1tbWlvLXYzLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1tbWlvLXYzLmNcbkBAIC03NjYsNiAmIzQzOzc2NiwxOSBAQCB1bnNpZ25lZCBpbnQgdmdpY192M19pbml0X2Rpc3RfaW9kZXYoc3RydWN0IHZnaWNfaW9fZGV2aWNlICpkZXYpXG4gXHRyZXR1cm4gU1pfNjRLO1xuIH1cbiBcbiYjNDM7c3RhdGljIHZvaWQgdmdpY191bmRvX3JlZGlzdF9hc3NpZ25tZW50KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB2Z2ljX2NwdSAqdmdpY19jcHUgPSBcdTAwMjZ2Y3B1LVx1MDAzZWFyY2gudmdpY19jcHU7XG4mIzQzO1xuJiM0MztcdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXHUwMDI2dmNwdS1cdTAwM2Vrdm0tXHUwMDNlc2xvdHNfbG9jayk7XG4mIzQzO1xuJiM0MztcdGd1YXJkKG11dGV4KShcdTAwMjZ2Y3B1LVx1MDAzZWt2bS1cdTAwM2VhcmNoLmNvbmZpZ19sb2NrKTtcbiYjNDM7XG4mIzQzO1x0dmdpY19jcHUtXHUwMDNlcmRyZWctXHUwMDNlZnJlZV9pbmRleC0tO1xuJiM0MztcdHZnaWNfY3B1LVx1MDAzZXJkcmVnID0gTlVMTDtcbiYjNDM7XHR2Z2ljX2NwdS1cdTAwM2VyZF9pb2Rldi5iYXNlX2FkZHIgPSBWR0lDX0FERFJfVU5ERUY7XG4mIzQzO31cbiYjNDM7XG4gLyoqXG4gICogdmdpY19yZWdpc3Rlcl9yZWRpc3RfaW9kZXYgLSByZWdpc3RlciBhIHNpbmdsZSByZWRpc3QgaW9kZXZcbiAgKiBAdmNwdTogICAgVGhlIFZDUFUgdG8gd2hpY2ggdGhlIHJlZGlzdHJpYnV0b3IgYmVsb25nc1xuQEAgLTgxOCwxNiAmIzQzOzgzMSwxNyBAQCBpbnQgdmdpY19yZWdpc3Rlcl9yZWRpc3RfaW9kZXYoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFx0cmRfZGV2LVx1MDAzZW5yX3JlZ2lvbnMgPSBBUlJBWV9TSVpFKHZnaWNfdjNfcmRfcmVnaXN0ZXJzKTtcbiBcdHJkX2Rldi1cdTAwM2VyZWRpc3RfdmNwdSA9IHZjcHU7XG4gXG4mIzQzO1x0LyogUHJvdGVjdGVkIGJ5IHNsb3RzX2xvY2sgKi9cbiYjNDM7XHRyZHJlZy1cdTAwM2VmcmVlX2luZGV4JiM0MzsmIzQzOztcbiYjNDM7XG4gXHRtdXRleF91bmxvY2soXHUwMDI2a3ZtLVx1MDAzZWFyY2guY29uZmlnX2xvY2spO1xuIFxuIFx0cmV0ID0ga3ZtX2lvX2J1c19yZWdpc3Rlcl9kZXYoa3ZtLCBLVk1fTU1JT19CVVMsIHJkX2Jhc2UsXG4gXHRcdFx0XHQgICAgICAyICogU1pfNjRLLCBcdTAwMjZyZF9kZXYtXHUwMDNlZGV2KTtcbiBcdGlmIChyZXQpXG4tXHRcdHJldHVybiByZXQ7XG4mIzQzO1x0XHR2Z2ljX3VuZG9fcmVkaXN0X2Fzc2lnbm1lbnQodmNwdSk7XG4gXG4tXHQvKiBQcm90ZWN0ZWQgYnkgc2xvdHNfbG9jayAqL1xuLVx0cmRyZWctXHUwMDNlZnJlZV9pbmRleCYjNDM7JiM0Mzs7XG4tXHRyZXR1cm4gMDtcbiYjNDM7XHRyZXR1cm4gcmV0O1xuIFxuIG91dF91bmxvY2s6XG4gXHRtdXRleF91bmxvY2soXHUwMDI2a3ZtLVx1MDAzZWFyY2guY29uZmlnX2xvY2spO1xuQEAgLTg0MSw3ICYjNDM7ODU1LDI1IEBAIHZvaWQgdmdpY191bnJlZ2lzdGVyX3JlZGlzdF9pb2RldihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXHRrdm1faW9fYnVzX3VucmVnaXN0ZXJfZGV2KHZjcHUtXHUwMDNla3ZtLCBLVk1fTU1JT19CVVMsIFx1MDAyNnJkX2Rldi1cdTAwM2VkZXYpO1xuIH1cbiBcbi1zdGF0aWMgaW50IHZnaWNfcmVnaXN0ZXJfYWxsX3JlZGlzdF9pb2RldnMoc3RydWN0IGt2bSAqa3ZtKVxuJiM0MztzdGF0aWMgdm9pZCB2Z2ljX3JvbGxiYWNrX3JlZGlzdF9pb2RldihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXG4mIzQzO1x0XHRcdFx0ICAgICAgIHN0cnVjdCB2Z2ljX3JlZGlzdF9yZWdpb24gKnJkcmVnKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHZnaWNfY3B1ICp2Z2ljX2NwdSA9IFx1MDAyNnZjcHUtXHUwMDNlYXJjaC52Z2ljX2NwdTtcbiYjNDM7XG4mIzQzO1x0bG9ja2RlcF9hc3NlcnRfaGVsZChcdTAwMjZ2Y3B1LVx1MDAzZWt2bS1cdTAwM2VzbG90c19sb2NrKTtcbiYjNDM7XG4mIzQzO1x0aWYgKHZnaWNfY3B1LVx1MDAzZXJkcmVnICE9IHJkcmVnKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHR2Z2ljX3VucmVnaXN0ZXJfcmVkaXN0X2lvZGV2KHZjcHUpO1xuJiM0MztcbiYjNDM7XHRndWFyZChtdXRleCkoXHUwMDI2dmNwdS1cdTAwM2Vrdm0tXHUwMDNlYXJjaC5jb25maWdfbG9jayk7XG4mIzQzO1x0dmdpY19jcHUtXHUwMDNlcmRyZWcgPSBOVUxMO1xuJiM0MztcdHZnaWNfY3B1LVx1MDAzZXJkX2lvZGV2LmJhc2VfYWRkciA9IFZHSUNfQUREUl9VTkRFRjtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCB2Z2ljX3JlZ2lzdGVyX2FsbF9yZWRpc3RfaW9kZXZzKHN0cnVjdCBrdm0gKmt2bSxcbiYjNDM7XHRcdFx0XHRcdCAgIHN0cnVjdCB2Z2ljX3JlZGlzdF9yZWdpb24gKnJkcmVnKVxuIHtcbiBcdHN0cnVjdCBrdm1fdmNwdSAqdmNwdTtcbiBcdHVuc2lnbmVkIGxvbmcgYztcbkBAIC04NTYsMTIgJiM0Mzs4ODgsMTIgQEAgc3RhdGljIGludCB2Z2ljX3JlZ2lzdGVyX2FsbF9yZWRpc3RfaW9kZXZzKHN0cnVjdCBrdm0gKmt2bSlcbiBcdH1cbiBcbiBcdGlmIChyZXQpIHtcbi1cdFx0LyogVGhlIGN1cnJlbnQgYyBmYWlsZWQsIHNvIGl0ZXJhdGUgb3ZlciB0aGUgcHJldmlvdXMgb25lcy4gKi9cbiYjNDM7XHRcdC8qIFVuZG8gYXNzaWdubWVudHMgbWFkZSBmcm9tIHRoZSByZWdpb24gYmVpbmcgYWRkZWQuICovXG4gXHRcdGludCBpO1xuIFxuIFx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBjOyBpJiM0MzsmIzQzOykge1xuIFx0XHRcdHZjcHUgPSBrdm1fZ2V0X3ZjcHUoa3ZtLCBpKTtcbi1cdFx0XHR2Z2ljX3VucmVnaXN0ZXJfcmVkaXN0X2lvZGV2KHZjcHUpO1xuJiM0MztcdFx0XHR2Z2ljX3JvbGxiYWNrX3JlZGlzdF9pb2Rldih2Y3B1LCByZHJlZyk7XG4gXHRcdH1cbiBcdH1cbiBcbkBAIC05NzAsMTAgJiM0MzsxMDAyLDEzIEBAIHZvaWQgdmdpY192M19mcmVlX3JlZGlzdF9yZWdpb24oc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3QgdmdpY19yZWRpc3RfcmVnaW9uICpyZHJlXG4gXG4gaW50IHZnaWNfdjNfc2V0X3JlZGlzdF9iYXNlKHN0cnVjdCBrdm0gKmt2bSwgdTMyIGluZGV4LCB1NjQgYWRkciwgdTMyIGNvdW50KVxuIHtcbiYjNDM7XHRzdHJ1Y3QgdmdpY19yZWRpc3RfcmVnaW9uICpyZHJlZztcbiBcdGludCByZXQ7XG4gXG4gXHRtdXRleF9sb2NrKFx1MDAyNmt2bS1cdTAwM2VhcmNoLmNvbmZpZ19sb2NrKTtcbiBcdHJldCA9IHZnaWNfdjNfYWxsb2NfcmVkaXN0X3JlZ2lvbihrdm0sIGluZGV4LCBhZGRyLCBjb3VudCk7XG4mIzQzO1x0aWYgKCFyZXQpXG4mIzQzO1x0XHRyZHJlZyA9IHZnaWNfdjNfcmRpc3RfcmVnaW9uX2Zyb21faW5kZXgoa3ZtLCBpbmRleCk7XG4gXHRtdXRleF91bmxvY2soXHUwMDI2a3ZtLVx1MDAzZWFyY2guY29uZmlnX2xvY2spO1xuIFx0aWYgKHJldClcbiBcdFx0cmV0dXJuIHJldDtcbkBAIC05ODIsMTIgJiM0MzsxMDE3LDkgQEAgaW50IHZnaWNfdjNfc2V0X3JlZGlzdF9iYXNlKHN0cnVjdCBrdm0gKmt2bSwgdTMyIGluZGV4LCB1NjQgYWRkciwgdTMyIGNvdW50KVxuIFx0ICogUmVnaXN0ZXIgaW9kZXZzIGZvciBlYWNoIGV4aXN0aW5nIFZDUFUuICBBZGRpbmcgbW9yZSBWQ1BVc1xuIFx0ICogYWZ0ZXJ3YXJkcyB3aWxsIHJlZ2lzdGVyIHRoZSBpb2RldnMgd2hlbiBuZWVkZWQuXG4gXHQgKi9cbi1cdHJldCA9IHZnaWNfcmVnaXN0ZXJfYWxsX3JlZGlzdF9pb2RldnMoa3ZtKTtcbiYjNDM7XHRyZXQgPSB2Z2ljX3JlZ2lzdGVyX2FsbF9yZWRpc3RfaW9kZXZzKGt2bSwgcmRyZWcpO1xuIFx0aWYgKHJldCkge1xuLVx0XHRzdHJ1Y3QgdmdpY19yZWRpc3RfcmVnaW9uICpyZHJlZztcbi1cbiBcdFx0bXV0ZXhfbG9jayhcdTAwMjZrdm0tXHUwMDNlYXJjaC5jb25maWdfbG9jayk7XG4tXHRcdHJkcmVnID0gdmdpY192M19yZGlzdF9yZWdpb25fZnJvbV9pbmRleChrdm0sIGluZGV4KTtcbiBcdFx0dmdpY192M19mcmVlX3JlZGlzdF9yZWdpb24oa3ZtLCByZHJlZyk7XG4gXHRcdG11dGV4X3VubG9jayhcdTAwMjZrdm0tXHUwMDNlYXJjaC5jb25maWdfbG9jayk7XG4gXHRcdHJldHVybiByZXQ7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2FybTY0L3ZnaWNfaW5pdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2FybTY0L3ZnaWNfaW5pdC5jXG5pbmRleCA0N2UzNGI0M2FmYjI5Li41YTMwZjNjYjAzOWJlIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2FybTY0L3ZnaWNfaW5pdC5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vYXJtNjQvdmdpY19pbml0LmNcbkBAIC01LDYgJiM0Mzs1LDcgQEBcbiAgKiBDb3B5cmlnaHQgKEMpIDIwMjAsIFJlZCBIYXQsIEluYy5cbiAgKi9cbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9rZXJuZWwuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9zaXplcy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjc3lzL3N5c2NhbGwuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2FzbS9rdm0uaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2FzbS9rdm1fcGFyYS5oXHUwMDNlXG5AQCAtMTMsMTIgJiM0MzsxNCwyMSBAQFxuIFxuICNpbmNsdWRlIFwmIzM0O3Rlc3RfdXRpbC5oXCYjMzQ7XG4gI2luY2x1ZGUgXCYjMzQ7a3ZtX3V0aWwuaFwmIzM0O1xuJiM0MzsjaW5jbHVkZSBcJiMzNDtnaWMuaFwmIzM0O1xuICNpbmNsdWRlIFwmIzM0O3Byb2Nlc3Nvci5oXCYjMzQ7XG4gI2luY2x1ZGUgXCYjMzQ7dmdpYy5oXCYjMzQ7XG4gI2luY2x1ZGUgXCYjMzQ7Z2ljX3YzLmhcJiMzNDtcbiBcbiAjZGVmaW5lIE5SX1ZDUFVTXHRcdDRcbiBcbiYjNDM7I2RlZmluZSBSRURJU1RfUkVUUllfUkVHSU9OMF9CQVNFXHRHSUNSX0JBU0VfR1BBXG4mIzQzOyNkZWZpbmUgUkVESVNUX1JFVFJZX1JFR0lPTjFfQkFTRVx0XFxcbiYjNDM7XHQoUkVESVNUX1JFVFJZX1JFR0lPTjBfQkFTRSAmIzQzOyAyICogS1ZNX1ZHSUNfVjNfUkVESVNUX1NJWkUpXG4mIzQzOyNkZWZpbmUgUkVESVNUX1JFVFJZX0RJU1RfQkFTRVx0XHRcXFxuJiM0MztcdChSRURJU1RfUkVUUllfUkVHSU9OMV9CQVNFICYjNDM7IEtWTV9WR0lDX1YzX1JFRElTVF9TSVpFKVxuJiM0MzsjZGVmaW5lIFJFRElTVF9SRVRSWV9SRUdJT04yX0JBU0VcdFxcXG4mIzQzO1x0KFJFRElTVF9SRVRSWV9ESVNUX0JBU0UgJiM0MzsgS1ZNX1ZHSUNfVjNfRElTVF9TSVpFKVxuJiM0MztcbiAjZGVmaW5lIFJFR19PRkZTRVQodmNwdSwgb2Zmc2V0KSAoKCh1NjQpdmNwdSBcdTAwM2NcdTAwM2MgMzIpIHwgb2Zmc2V0KVxuIFxuICNkZWZpbmUgVkdJQ19ERVZfSVNfVjIoX2QpICgoX2QpID09IEtWTV9ERVZfVFlQRV9BUk1fVkdJQ19WMilcbkBAIC02NSw2ICYjNDM7NzUsMjMgQEAgc3RhdGljIHZvaWQgZ3Vlc3RfY29kZSh2b2lkKVxuIFx0R1VFU1RfRE9ORSgpO1xuIH1cbiBcbiYjNDM7c3RhdGljIHZvaWQgZ3Vlc3RfY2hlY2tfcmVkaXN0X3JldHJ5KHZvaWQpXG4mIzQzO3tcbiYjNDM7XHR1bnNpZ25lZCBpbnQgaTtcbiYjNDM7XG4mIzQzO1x0LyogVGhlIGZpcnN0IHRocmVlIHJlZGlzdHJpYnV0b3JzIHNwYW4gYWRqYWNlbnQgcmVnaW9ucyAwIGFuZCAxLiAqL1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIE5SX1ZDUFVTOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0dTY0IGJhc2UgPSBpIFx1MDAzYyAzID8gUkVESVNUX1JFVFJZX1JFR0lPTjBfQkFTRSAmIzQzO1xuJiM0MztcdFx0XHRcdCAgICAgICBpICogS1ZNX1ZHSUNfVjNfUkVESVNUX1NJWkUgOlxuJiM0MztcdFx0XHRcdCAgICAgICBSRURJU1RfUkVUUllfUkVHSU9OMl9CQVNFO1xuJiM0MztcdFx0dTY0IHR5cGVyID0gcmVhZHEoKHZvaWQgKikodW5zaWduZWQgbG9uZykoYmFzZSAmIzQzOyBHSUNSX1RZUEVSKSk7XG4mIzQzO1xuJiM0MztcdFx0R1VFU1RfQVNTRVJUX0VRKEdJQ1JfVFlQRVJfQ1BVX05VTUJFUih0eXBlciksIGkpO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0R1VFU1RfRE9ORSgpO1xuJiM0Mzt9XG4mIzQzO1xuIC8qIHdlIGRvbiYjMzk7dCB3YW50IHRvIGFzc2VydCBvbiBydW4gZXhlY3V0aW9uLCBoZW5jZSB0aGF0IGhlbHBlciAqL1xuIHN0YXRpYyBpbnQgcnVuX3ZjcHUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIHtcbkBAIC03Myw2ICYjNDM7MTAwLDcgQEAgc3RhdGljIGludCBydW5fdmNwdShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXG4gc3RhdGljIHN0cnVjdCB2bV9naWMgdm1fZ2ljX2NyZWF0ZV93aXRoX3ZjcHVzKHUzMiBnaWNfZGV2X3R5cGUsXG4gXHRcdFx0XHRcdCAgICAgIHUzMiBucl92Y3B1cyxcbiYjNDM7XHRcdFx0XHRcdCAgICAgIHZvaWQgKmd1ZXN0X2NvZGUsXG4gXHRcdFx0XHRcdCAgICAgIHN0cnVjdCBrdm1fdmNwdSAqdmNwdXNbXSlcbiB7XG4gXHRzdHJ1Y3Qgdm1fZ2ljIHY7XG5AQCAtMzM4LDcgJiM0MzszNjYsNyBAQCBzdGF0aWMgdm9pZCB0ZXN0X3ZnaWNfdGhlbl92Y3B1cyh1MzIgZ2ljX2Rldl90eXBlKVxuIFx0c3RydWN0IHZtX2dpYyB2O1xuIFx0aW50IHJldCwgaTtcbiBcbi1cdHYgPSB2bV9naWNfY3JlYXRlX3dpdGhfdmNwdXMoZ2ljX2Rldl90eXBlLCAxLCB2Y3B1cyk7XG4mIzQzO1x0diA9IHZtX2dpY19jcmVhdGVfd2l0aF92Y3B1cyhnaWNfZGV2X3R5cGUsIDEsIGd1ZXN0X2NvZGUsIHZjcHVzKTtcbiBcbiBcdHN1YnRlc3RfZGlzdF9yZGlzdChcdTAwMjZ2KTtcbiBcbkBAIC0zNTksNyAmIzQzOzM4Nyw4IEBAIHN0YXRpYyB2b2lkIHRlc3RfdmNwdXNfdGhlbl92Z2ljKHUzMiBnaWNfZGV2X3R5cGUpXG4gXHRzdHJ1Y3Qgdm1fZ2ljIHY7XG4gXHRpbnQgcmV0O1xuIFxuLVx0diA9IHZtX2dpY19jcmVhdGVfd2l0aF92Y3B1cyhnaWNfZGV2X3R5cGUsIE5SX1ZDUFVTLCB2Y3B1cyk7XG4mIzQzO1x0diA9IHZtX2dpY19jcmVhdGVfd2l0aF92Y3B1cyhnaWNfZGV2X3R5cGUsIE5SX1ZDUFVTLCBndWVzdF9jb2RlLFxuJiM0MztcdFx0XHRcdCAgICAgdmNwdXMpO1xuIFxuIFx0c3VidGVzdF9kaXN0X3JkaXN0KFx1MDAyNnYpO1xuIFxuQEAgLTQxMSw3ICYjNDM7NDQwLDggQEAgc3RhdGljIHZvaWQgdGVzdF92M19uZXdfcmVkaXN0X3JlZ2lvbnModm9pZClcbiBcdHU2NCBhZGRyO1xuIFx0aW50IHJldDtcbiBcbi1cdHYgPSB2bV9naWNfY3JlYXRlX3dpdGhfdmNwdXMoS1ZNX0RFVl9UWVBFX0FSTV9WR0lDX1YzLCBOUl9WQ1BVUywgdmNwdXMpO1xuJiM0MztcdHYgPSB2bV9naWNfY3JlYXRlX3dpdGhfdmNwdXMoS1ZNX0RFVl9UWVBFX0FSTV9WR0lDX1YzLCBOUl9WQ1BVUyxcbiYjNDM7XHRcdFx0XHQgICAgIGd1ZXN0X2NvZGUsIHZjcHVzKTtcbiBcdHN1YnRlc3RfdjNfcmVkaXN0X3JlZ2lvbnMoXHUwMDI2dik7XG4gXHRrdm1fZGV2aWNlX2F0dHJfc2V0KHYuZ2ljX2ZkLCBLVk1fREVWX0FSTV9WR0lDX0dSUF9DVFJMLFxuIFx0XHRcdCAgICBLVk1fREVWX0FSTV9WR0lDX0NUUkxfSU5JVCwgTlVMTCk7XG5AQCAtNDIyLDcgJiM0Mzs0NTIsOCBAQCBzdGF0aWMgdm9pZCB0ZXN0X3YzX25ld19yZWRpc3RfcmVnaW9ucyh2b2lkKVxuIFxuIFx0Lyogc3RlcDIgKi9cbiBcbi1cdHYgPSB2bV9naWNfY3JlYXRlX3dpdGhfdmNwdXMoS1ZNX0RFVl9UWVBFX0FSTV9WR0lDX1YzLCBOUl9WQ1BVUywgdmNwdXMpO1xuJiM0MztcdHYgPSB2bV9naWNfY3JlYXRlX3dpdGhfdmNwdXMoS1ZNX0RFVl9UWVBFX0FSTV9WR0lDX1YzLCBOUl9WQ1BVUyxcbiYjNDM7XHRcdFx0XHQgICAgIGd1ZXN0X2NvZGUsIHZjcHVzKTtcbiBcdHN1YnRlc3RfdjNfcmVkaXN0X3JlZ2lvbnMoXHUwMDI2dik7XG4gXG4gXHRhZGRyID0gUkVESVNUX1JFR0lPTl9BVFRSX0FERFIoMSwgMHgyODAwMDAsIDAsIDIpO1xuQEAgLTQzNiw3ICYjNDM7NDY3LDggQEAgc3RhdGljIHZvaWQgdGVzdF92M19uZXdfcmVkaXN0X3JlZ2lvbnModm9pZClcbiBcbiBcdC8qIHN0ZXAgMyAqL1xuIFxuLVx0diA9IHZtX2dpY19jcmVhdGVfd2l0aF92Y3B1cyhLVk1fREVWX1RZUEVfQVJNX1ZHSUNfVjMsIE5SX1ZDUFVTLCB2Y3B1cyk7XG4mIzQzO1x0diA9IHZtX2dpY19jcmVhdGVfd2l0aF92Y3B1cyhLVk1fREVWX1RZUEVfQVJNX1ZHSUNfVjMsIE5SX1ZDUFVTLFxuJiM0MztcdFx0XHRcdCAgICAgZ3Vlc3RfY29kZSwgdmNwdXMpO1xuIFx0c3VidGVzdF92M19yZWRpc3RfcmVnaW9ucyhcdTAwMjZ2KTtcbiBcbiBcdHJldCA9IF9fa3ZtX2RldmljZV9hdHRyX3NldCh2LmdpY19mZCwgS1ZNX0RFVl9BUk1fVkdJQ19HUlBfQUREUixcbkBAIC00NTcsNiAmIzQzOzQ4OSw3MCBAQCBzdGF0aWMgdm9pZCB0ZXN0X3YzX25ld19yZWRpc3RfcmVnaW9ucyh2b2lkKVxuIFx0dm1fZ2ljX2Rlc3Ryb3koXHUwMDI2dik7XG4gfVxuIFxuJiM0MztzdGF0aWMgdm9pZCB0ZXN0X3YzX3JlZGlzdF9yZWdpb25fcmV0cnkodm9pZClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBrdm1fdmNwdSAqdmNwdXNbTlJfVkNQVVNdO1xuJiM0MztcdHN0cnVjdCB2bV9naWMgdjtcbiYjNDM7XHRzdHJ1Y3QgdWNhbGwgdWM7XG4mIzQzO1x0dTY0IGFkZHI7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0diA9IHZtX2dpY19jcmVhdGVfd2l0aF92Y3B1cyhLVk1fREVWX1RZUEVfQVJNX1ZHSUNfVjMsIE5SX1ZDUFVTLFxuJiM0MztcdFx0XHRcdCAgICAgZ3Vlc3RfY2hlY2tfcmVkaXN0X3JldHJ5LCB2Y3B1cyk7XG4mIzQzO1xuJiM0MztcdGFkZHIgPSBSRURJU1RfUkVHSU9OX0FUVFJfQUREUigyLCBSRURJU1RfUkVUUllfUkVHSU9OMF9CQVNFLCAwLCAwKTtcbiYjNDM7XHRrdm1fZGV2aWNlX2F0dHJfc2V0KHYuZ2ljX2ZkLCBLVk1fREVWX0FSTV9WR0lDX0dSUF9BRERSLFxuJiM0MztcdFx0XHQgICAgS1ZNX1ZHSUNfVjNfQUREUl9UWVBFX1JFRElTVF9SRUdJT04sIFx1MDAyNmFkZHIpO1xuJiM0MztcbiYjNDM7XHRhZGRyID0gUkVESVNUX1JFR0lPTl9BVFRSX0FERFIoMSwgUkVESVNUX1JFVFJZX1JFR0lPTjFfQkFTRSwgMCwgMSk7XG4mIzQzO1x0a3ZtX2RldmljZV9hdHRyX3NldCh2LmdpY19mZCwgS1ZNX0RFVl9BUk1fVkdJQ19HUlBfQUREUixcbiYjNDM7XHRcdFx0ICAgIEtWTV9WR0lDX1YzX0FERFJfVFlQRV9SRURJU1RfUkVHSU9OLCBcdTAwMjZhZGRyKTtcbiYjNDM7XG4mIzQzO1x0YWRkciA9IFJFRElTVF9SRVRSWV9ESVNUX0JBU0U7XG4mIzQzO1x0a3ZtX2RldmljZV9hdHRyX3NldCh2LmdpY19mZCwgS1ZNX0RFVl9BUk1fVkdJQ19HUlBfQUREUixcbiYjNDM7XHRcdFx0ICAgIEtWTV9WR0lDX1YzX0FERFJfVFlQRV9ESVNULCBcdTAwMjZhZGRyKTtcbiYjNDM7XG4mIzQzO1x0YWRkciA9IFJFRElTVF9SRUdJT05fQVRUUl9BRERSKDEsIFJFRElTVF9SRVRSWV9ESVNUX0JBU0UsIDAsIDIpO1xuJiM0MztcdHJldCA9IF9fa3ZtX2RldmljZV9hdHRyX3NldCh2LmdpY19mZCwgS1ZNX0RFVl9BUk1fVkdJQ19HUlBfQUREUixcbiYjNDM7XHRcdFx0XHQgICAgS1ZNX1ZHSUNfVjNfQUREUl9UWVBFX1JFRElTVF9SRUdJT04sXG4mIzQzO1x0XHRcdFx0ICAgIFx1MDAyNmFkZHIpO1xuJiM0MztcdFRFU1RfQVNTRVJUKHJldCBcdTAwMjZcdTAwMjYgZXJybm8gPT0gRUlOVkFMLFxuJiM0MztcdFx0ICAgIFwmIzM0O3JlZ2lzdGVyIHJlZGlzdCByZWdpb24gY29sbGlkaW5nIHdpdGggZGlzdFwmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdGFkZHIgPSBSRURJU1RfUkVHSU9OX0FUVFJfQUREUigxLCBSRURJU1RfUkVUUllfUkVHSU9OMl9CQVNFLCAwLCAyKTtcbiYjNDM7XHRrdm1fZGV2aWNlX2F0dHJfc2V0KHYuZ2ljX2ZkLCBLVk1fREVWX0FSTV9WR0lDX0dSUF9BRERSLFxuJiM0MztcdFx0XHQgICAgS1ZNX1ZHSUNfVjNfQUREUl9UWVBFX1JFRElTVF9SRUdJT04sIFx1MDAyNmFkZHIpO1xuJiM0MztcbiYjNDM7XHR2aXJ0X21hcCh2LnZtLCBSRURJU1RfUkVUUllfUkVHSU9OMF9CQVNFLCBSRURJU1RfUkVUUllfUkVHSU9OMF9CQVNFLFxuJiM0MztcdFx0IHZtX2NhbGNfbnVtX2d1ZXN0X3BhZ2VzKHYudm0tXHUwMDNlbW9kZSxcbiYjNDM7XHRcdFx0XHRcdCAzICogS1ZNX1ZHSUNfVjNfUkVESVNUX1NJWkUpKTtcbiYjNDM7XHR2aXJ0X21hcCh2LnZtLCBSRURJU1RfUkVUUllfUkVHSU9OMl9CQVNFLCBSRURJU1RfUkVUUllfUkVHSU9OMl9CQVNFLFxuJiM0MztcdFx0IHZtX2NhbGNfbnVtX2d1ZXN0X3BhZ2VzKHYudm0tXHUwMDNlbW9kZSxcbiYjNDM7XHRcdFx0XHRcdCBLVk1fVkdJQ19WM19SRURJU1RfU0laRSkpO1xuJiM0MztcbiYjNDM7XHRrdm1fZGV2aWNlX2F0dHJfc2V0KHYuZ2ljX2ZkLCBLVk1fREVWX0FSTV9WR0lDX0dSUF9DVFJMLFxuJiM0MztcdFx0XHQgICAgS1ZNX0RFVl9BUk1fVkdJQ19DVFJMX0lOSVQsIE5VTEwpO1xuJiM0MztcbiYjNDM7XHR2Y3B1X3J1bih2Y3B1c1swXSk7XG4mIzQzO1x0c3dpdGNoIChnZXRfdWNhbGwodmNwdXNbMF0sIFx1MDAyNnVjKSkge1xuJiM0MztcdGNhc2UgVUNBTExfRE9ORTpcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdGNhc2UgVUNBTExfQUJPUlQ6XG4mIzQzO1x0XHRSRVBPUlRfR1VFU1RfQVNTRVJUKHVjKTtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdGNhc2UgVUNBTExfTk9ORTpcbiYjNDM7XHRcdGlmICh2Y3B1c1swXS1cdTAwM2VydW4tXHUwMDNlZXhpdF9yZWFzb24gPT0gS1ZNX0VYSVRfTU1JTylcbiYjNDM7XHRcdFx0VEVTVF9GQUlMKFwmIzM0O1VuZXhwZWN0ZWQgTU1JTyBleGl0IGF0IDB4JWxseFwmIzM0OyxcbiYjNDM7XHRcdFx0XHQgIHZjcHVzWzBdLVx1MDAzZXJ1bi1cdTAwM2VtbWlvLnBoeXNfYWRkcik7XG4mIzQzO1x0XHRmYWxsdGhyb3VnaDtcbiYjNDM7XHRkZWZhdWx0OlxuJiM0MztcdFx0VEVTVF9GQUlMKFwmIzM0O1VuZXhwZWN0ZWQgdWNhbGwgJWx1LCBleGl0X3JlYXNvbiAldVwmIzM0OyxcbiYjNDM7XHRcdFx0ICB1Yy5jbWQsIHZjcHVzWzBdLVx1MDAzZXJ1bi1cdTAwM2VleGl0X3JlYXNvbik7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHR2bV9naWNfZGVzdHJveShcdTAwMjZ2KTtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgdm9pZCB0ZXN0X3YzX3R5cGVyX2FjY2Vzc2VzKHZvaWQpXG4ge1xuIFx0c3RydWN0IHZtX2dpYyB2O1xuQEAgLTYwOCw3ICYjNDM7NzA0LDggQEAgc3RhdGljIHZvaWQgdGVzdF92M19yZWRpc3RfaXBhX3JhbmdlX2NoZWNrX2F0X3ZjcHVfcnVuKHZvaWQpXG4gXHRpbnQgcmV0LCBpO1xuIFx0dTY0IGFkZHI7XG4gXG4tXHR2ID0gdm1fZ2ljX2NyZWF0ZV93aXRoX3ZjcHVzKEtWTV9ERVZfVFlQRV9BUk1fVkdJQ19WMywgMSwgdmNwdXMpO1xuJiM0MztcdHYgPSB2bV9naWNfY3JlYXRlX3dpdGhfdmNwdXMoS1ZNX0RFVl9UWVBFX0FSTV9WR0lDX1YzLCAxLCBndWVzdF9jb2RlLFxuJiM0MztcdFx0XHRcdCAgICAgdmNwdXMpO1xuIFxuIFx0LyogU2V0IHNwYWNlIGZvciAzIHJlZGlzdHMsIHdlIGhhdmUgMSB2Y3B1LCBzbyB0aGlzIHN1Y2NlZWRzLiAqL1xuIFx0YWRkciA9IG1heF9waHlzX3NpemUgLSAoMyAqIDIgKiAweDEwMDAwKTtcbkBAIC02NDEsNyAmIzQzOzczOCw4IEBAIHN0YXRpYyB2b2lkIHRlc3RfdjNfaXRzX3JlZ2lvbih2b2lkKVxuIFx0dTY0IGFkZHI7XG4gXHRpbnQgaXRzX2ZkLCByZXQ7XG4gXG4tXHR2ID0gdm1fZ2ljX2NyZWF0ZV93aXRoX3ZjcHVzKEtWTV9ERVZfVFlQRV9BUk1fVkdJQ19WMywgTlJfVkNQVVMsIHZjcHVzKTtcbiYjNDM7XHR2ID0gdm1fZ2ljX2NyZWF0ZV93aXRoX3ZjcHVzKEtWTV9ERVZfVFlQRV9BUk1fVkdJQ19WMywgTlJfVkNQVVMsXG4mIzQzO1x0XHRcdFx0ICAgICBndWVzdF9jb2RlLCB2Y3B1cyk7XG4gXHRpdHNfZmQgPSBrdm1fY3JlYXRlX2RldmljZSh2LnZtLCBLVk1fREVWX1RZUEVfQVJNX1ZHSUNfSVRTKTtcbiBcbiBcdGFkZHIgPSAweDQwMTAwMDtcbkBAIC02ODQsNyAmIzQzOzc4Miw4IEBAIHN0YXRpYyB2b2lkIHRlc3RfdjNfbmFzc2dpY2FwKHZvaWQpXG4gXHR1MzIgdHlwZXIyO1xuIFx0aW50IHJldDtcbiBcbi1cdHZtID0gdm1fZ2ljX2NyZWF0ZV93aXRoX3ZjcHVzKEtWTV9ERVZfVFlQRV9BUk1fVkdJQ19WMywgTlJfVkNQVVMsIHZjcHVzKTtcbiYjNDM7XHR2bSA9IHZtX2dpY19jcmVhdGVfd2l0aF92Y3B1cyhLVk1fREVWX1RZUEVfQVJNX1ZHSUNfVjMsIE5SX1ZDUFVTLFxuJiM0MztcdFx0XHRcdCAgICAgIGd1ZXN0X2NvZGUsIHZjcHVzKTtcbiBcdGt2bV9kZXZpY2VfYXR0cl9nZXQodm0uZ2ljX2ZkLCBLVk1fREVWX0FSTV9WR0lDX0dSUF9ESVNUX1JFR1MsXG4gXHRcdFx0ICAgIEdJQ0RfVFlQRVIyLCBcdTAwMjZ0eXBlcjIpO1xuIFx0aGFzX25hc3NnaWNhcCA9IHR5cGVyMiBcdTAwMjYgR0lDRF9UWVBFUjJfbkFTU0dJY2FwO1xuQEAgLTk3OCw2ICYjNDM7MTA3Nyw3IEBAIHZvaWQgcnVuX3Rlc3RzKHUzMiBnaWNfZGV2X3R5cGUpXG4gXG4gXHRpZiAoVkdJQ19ERVZfSVNfVjMoZ2ljX2Rldl90eXBlKSkge1xuIFx0XHR0ZXN0X3YzX25ld19yZWRpc3RfcmVnaW9ucygpO1xuJiM0MztcdFx0dGVzdF92M19yZWRpc3RfcmVnaW9uX3JldHJ5KCk7XG4gXHRcdHRlc3RfdjNfdHlwZXJfYWNjZXNzZXMoKTtcbiBcdFx0dGVzdF92M19sYXN0X2JpdF9yZWRpc3RfcmVnaW9ucygpO1xuIFx0XHR0ZXN0X3YzX2xhc3RfYml0X3NpbmdsZV9yZGlzdCgpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDA4OjI2PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTSYjMzQ7LAogICAgJiMzNDtWSVJUVUFMSVpBVElPTiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3ZnaWNfdjNfc2V0X3JlZGlzdF9iYXNlJiMzNDssCiAgICAmIzM0O3ZnaWNfcmVnaXN0ZXJfcmVkaXN0X2lvZGV2JiMzNDssCiAgICAmIzM0O3ZnaWNfdW5yZWdpc3Rlcl9yZWRpc3RfaW9kZXYmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgZXJyb3IgdW53aW5kaW5nIGFuZCByb2xsYmFjayBoYW5kbGluZyB3aGVuIHJlZ2lzdGVyaW5nIFZHSUN2MyByZWRpc3RyaWJ1dG9yIEkvTyBkZXZpY2VzIGluIEFSTTY0IEtWTS4gSXQgZW5zdXJlcyB0aGF0IGZhaWxlZCByZWRpc3RyaWJ1dG9yIHJlZ2lzdHJhdGlvbiBwcm9wZXJseSByb2xscyBiYWNrIHRoZSBhc3NpZ25lZCByZWdpb24gc3RhdGUgYW5kIG9ubHkgdGVhcnMgZG93biBWQ1BVcyBhc3NvY2lhdGVkIHdpdGggdGhlIGZhaWxpbmcgcmVnaW9uLiBUaGVzZSBjb2RlIHBhdGhzIGFyZSByZWFjaGFibGUgdmlhIEtWTSBpb2N0bHMgYW5kIHdvcnRoIGZ1enppbmcgZm9yIGNvbmN1cnJlbmN5IGFuZCBzdGF0ZSBtYW5hZ2VtZW50IGJ1Z3MuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBhYzhmYzdhNTRjZjE3MjIyNzRjODM0MmNmMWYwODYyYTE0NTk5YjY4CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIE1vbiBBdWcgMzEgMDg6MjY6MjMgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtbW1pby12My5jIGIvYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLW1taW8tdjMuYwppbmRleCA1OTEzYTIwZDgzMDE5Li43N2FhODQzMzcwMWExIDEwMDY0NAotLS0gYS9hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtbW1pby12My5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1tbWlvLXYzLmMKQEAgLTc2Niw2ICYjNDM7NzY2LDE5IEBAIHVuc2lnbmVkIGludCB2Z2ljX3YzX2luaXRfZGlzdF9pb2RldihzdHJ1Y3QgdmdpY19pb19kZXZpY2UgKmRldikKIAlyZXR1cm4gU1pfNjRLOwogfQogCiYjNDM7c3RhdGljIHZvaWQgdmdpY191bmRvX3JlZGlzdF9hc3NpZ25tZW50KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCB2Z2ljX2NwdSAqdmdpY19jcHUgPSAmYW1wO3ZjcHUtJmd0O2FyY2gudmdpY19jcHU7CiYjNDM7CiYjNDM7CWxvY2tkZXBfYXNzZXJ0X2hlbGQoJmFtcDt2Y3B1LSZndDtrdm0tJmd0O3Nsb3RzX2xvY2spOwomIzQzOwomIzQzOwlndWFyZChtdXRleCkoJmFtcDt2Y3B1LSZndDtrdm0tJmd0O2FyY2guY29uZmlnX2xvY2spOwomIzQzOwomIzQzOwl2Z2ljX2NwdS0mZ3Q7cmRyZWctJmd0O2ZyZWVfaW5kZXgtLTsKJiM0MzsJdmdpY19jcHUtJmd0O3JkcmVnID0gTlVMTDsKJiM0MzsJdmdpY19jcHUtJmd0O3JkX2lvZGV2LmJhc2VfYWRkciA9IFZHSUNfQUREUl9VTkRFRjsKJiM0Mzt9CiYjNDM7CiAvKioKICAqIHZnaWNfcmVnaXN0ZXJfcmVkaXN0X2lvZGV2IC0gcmVnaXN0ZXIgYSBzaW5nbGUgcmVkaXN0IGlvZGV2CiAgKiBAdmNwdTogICAgVGhlIFZDUFUgdG8gd2hpY2ggdGhlIHJlZGlzdHJpYnV0b3IgYmVsb25ncwpAQCAtODE4LDE2ICYjNDM7ODMxLDE3IEBAIGludCB2Z2ljX3JlZ2lzdGVyX3JlZGlzdF9pb2RldihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiAJcmRfZGV2LSZndDtucl9yZWdpb25zID0gQVJSQVlfU0laRSh2Z2ljX3YzX3JkX3JlZ2lzdGVycyk7CiAJcmRfZGV2LSZndDtyZWRpc3RfdmNwdSA9IHZjcHU7CiAKJiM0MzsJLyogUHJvdGVjdGVkIGJ5IHNsb3RzX2xvY2sgKi8KJiM0MzsJcmRyZWctJmd0O2ZyZWVfaW5kZXgmIzQzOyYjNDM7OwomIzQzOwogCW11dGV4X3VubG9jaygmYW1wO2t2bS0mZ3Q7YXJjaC5jb25maWdfbG9jayk7CiAKIAlyZXQgPSBrdm1faW9fYnVzX3JlZ2lzdGVyX2Rldihrdm0sIEtWTV9NTUlPX0JVUywgcmRfYmFzZSwKIAkJCQkgICAgICAyICogU1pfNjRLLCAmYW1wO3JkX2Rldi0mZ3Q7ZGV2KTsKIAlpZiAocmV0KQotCQlyZXR1cm4gcmV0OwomIzQzOwkJdmdpY191bmRvX3JlZGlzdF9hc3NpZ25tZW50KHZjcHUpOwogCi0JLyogUHJvdGVjdGVkIGJ5IHNsb3RzX2xvY2sgKi8KLQlyZHJlZy0mZ3Q7ZnJlZV9pbmRleCYjNDM7JiM0Mzs7Ci0JcmV0dXJuIDA7CiYjNDM7CXJldHVybiByZXQ7CiAKIG91dF91bmxvY2s6CiAJbXV0ZXhfdW5sb2NrKCZhbXA7a3ZtLSZndDthcmNoLmNvbmZpZ19sb2NrKTsKQEAgLTg0MSw3ICYjNDM7ODU1LDI1IEBAIHZvaWQgdmdpY191bnJlZ2lzdGVyX3JlZGlzdF9pb2RldihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiAJa3ZtX2lvX2J1c191bnJlZ2lzdGVyX2Rldih2Y3B1LSZndDtrdm0sIEtWTV9NTUlPX0JVUywgJmFtcDtyZF9kZXYtJmd0O2Rldik7CiB9CiAKLXN0YXRpYyBpbnQgdmdpY19yZWdpc3Rlcl9hbGxfcmVkaXN0X2lvZGV2cyhzdHJ1Y3Qga3ZtICprdm0pCiYjNDM7c3RhdGljIHZvaWQgdmdpY19yb2xsYmFja19yZWRpc3RfaW9kZXYoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LAomIzQzOwkJCQkgICAgICAgc3RydWN0IHZnaWNfcmVkaXN0X3JlZ2lvbiAqcmRyZWcpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgdmdpY19jcHUgKnZnaWNfY3B1ID0gJmFtcDt2Y3B1LSZndDthcmNoLnZnaWNfY3B1OwomIzQzOwomIzQzOwlsb2NrZGVwX2Fzc2VydF9oZWxkKCZhbXA7dmNwdS0mZ3Q7a3ZtLSZndDtzbG90c19sb2NrKTsKJiM0MzsKJiM0MzsJaWYgKHZnaWNfY3B1LSZndDtyZHJlZyAhPSByZHJlZykKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJdmdpY191bnJlZ2lzdGVyX3JlZGlzdF9pb2Rldih2Y3B1KTsKJiM0MzsKJiM0MzsJZ3VhcmQobXV0ZXgpKCZhbXA7dmNwdS0mZ3Q7a3ZtLSZndDthcmNoLmNvbmZpZ19sb2NrKTsKJiM0MzsJdmdpY19jcHUtJmd0O3JkcmVnID0gTlVMTDsKJiM0MzsJdmdpY19jcHUtJmd0O3JkX2lvZGV2LmJhc2VfYWRkciA9IFZHSUNfQUREUl9VTkRFRjsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCB2Z2ljX3JlZ2lzdGVyX2FsbF9yZWRpc3RfaW9kZXZzKHN0cnVjdCBrdm0gKmt2bSwKJiM0MzsJCQkJCSAgIHN0cnVjdCB2Z2ljX3JlZGlzdF9yZWdpb24gKnJkcmVnKQogewogCXN0cnVjdCBrdm1fdmNwdSAqdmNwdTsKIAl1bnNpZ25lZCBsb25nIGM7CkBAIC04NTYsMTIgJiM0Mzs4ODgsMTIgQEAgc3RhdGljIGludCB2Z2ljX3JlZ2lzdGVyX2FsbF9yZWRpc3RfaW9kZXZzKHN0cnVjdCBrdm0gKmt2bSkKIAl9CiAKIAlpZiAocmV0KSB7Ci0JCS8qIFRoZSBjdXJyZW50IGMgZmFpbGVkLCBzbyBpdGVyYXRlIG92ZXIgdGhlIHByZXZpb3VzIG9uZXMuICovCiYjNDM7CQkvKiBVbmRvIGFzc2lnbm1lbnRzIG1hZGUgZnJvbSB0aGUgcmVnaW9uIGJlaW5nIGFkZGVkLiAqLwogCQlpbnQgaTsKIAogCQlmb3IgKGkgPSAwOyBpICZsdDsgYzsgaSYjNDM7JiM0MzspIHsKIAkJCXZjcHUgPSBrdm1fZ2V0X3ZjcHUoa3ZtLCBpKTsKLQkJCXZnaWNfdW5yZWdpc3Rlcl9yZWRpc3RfaW9kZXYodmNwdSk7CiYjNDM7CQkJdmdpY19yb2xsYmFja19yZWRpc3RfaW9kZXYodmNwdSwgcmRyZWcpOwogCQl9CiAJfQogCkBAIC05NzAsMTAgJiM0MzsxMDAyLDEzIEBAIHZvaWQgdmdpY192M19mcmVlX3JlZGlzdF9yZWdpb24oc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3QgdmdpY19yZWRpc3RfcmVnaW9uICpyZHJlCiAKIGludCB2Z2ljX3YzX3NldF9yZWRpc3RfYmFzZShzdHJ1Y3Qga3ZtICprdm0sIHUzMiBpbmRleCwgdTY0IGFkZHIsIHUzMiBjb3VudCkKIHsKJiM0MzsJc3RydWN0IHZnaWNfcmVkaXN0X3JlZ2lvbiAqcmRyZWc7CiAJaW50IHJldDsKIAogCW11dGV4X2xvY2soJmFtcDtrdm0tJmd0O2FyY2guY29uZmlnX2xvY2spOwogCXJldCA9IHZnaWNfdjNfYWxsb2NfcmVkaXN0X3JlZ2lvbihrdm0sIGluZGV4LCBhZGRyLCBjb3VudCk7CiYjNDM7CWlmICghcmV0KQomIzQzOwkJcmRyZWcgPSB2Z2ljX3YzX3JkaXN0X3JlZ2lvbl9mcm9tX2luZGV4KGt2bSwgaW5kZXgpOwogCW11dGV4X3VubG9jaygmYW1wO2t2bS0mZ3Q7YXJjaC5jb25maWdfbG9jayk7CiAJaWYgKHJldCkKIAkJcmV0dXJuIHJldDsKQEAgLTk4MiwxMiAmIzQzOzEwMTcsOSBAQCBpbnQgdmdpY192M19zZXRfcmVkaXN0X2Jhc2Uoc3RydWN0IGt2bSAqa3ZtLCB1MzIgaW5kZXgsIHU2NCBhZGRyLCB1MzIgY291bnQpCiAJICogUmVnaXN0ZXIgaW9kZXZzIGZvciBlYWNoIGV4aXN0aW5nIFZDUFUuICBBZGRpbmcgbW9yZSBWQ1BVcwogCSAqIGFmdGVyd2FyZHMgd2lsbCByZWdpc3RlciB0aGUgaW9kZXZzIHdoZW4gbmVlZGVkLgogCSAqLwotCXJldCA9IHZnaWNfcmVnaXN0ZXJfYWxsX3JlZGlzdF9pb2RldnMoa3ZtKTsKJiM0MzsJcmV0ID0gdmdpY19yZWdpc3Rlcl9hbGxfcmVkaXN0X2lvZGV2cyhrdm0sIHJkcmVnKTsKIAlpZiAocmV0KSB7Ci0JCXN0cnVjdCB2Z2ljX3JlZGlzdF9yZWdpb24gKnJkcmVnOwotCiAJCW11dGV4X2xvY2soJmFtcDtrdm0tJmd0O2FyY2guY29uZmlnX2xvY2spOwotCQlyZHJlZyA9IHZnaWNfdjNfcmRpc3RfcmVnaW9uX2Zyb21faW5kZXgoa3ZtLCBpbmRleCk7CiAJCXZnaWNfdjNfZnJlZV9yZWRpc3RfcmVnaW9uKGt2bSwgcmRyZWcpOwogCQltdXRleF91bmxvY2soJmFtcDtrdm0tJmd0O2FyY2guY29uZmlnX2xvY2spOwogCQlyZXR1cm4gcmV0OwpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2FybTY0L3ZnaWNfaW5pdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2FybTY0L3ZnaWNfaW5pdC5jCmluZGV4IDQ3ZTM0YjQzYWZiMjkuLjVhMzBmM2NiMDM5YmUgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9hcm02NC92Z2ljX2luaXQuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vYXJtNjQvdmdpY19pbml0LmMKQEAgLTUsNiAmIzQzOzUsNyBAQAogICogQ29weXJpZ2h0IChDKSAyMDIwLCBSZWQgSGF0LCBJbmMuCiAgKi8KICNpbmNsdWRlICZsdDtsaW51eC9rZXJuZWwuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvc2l6ZXMuaCZndDsKICNpbmNsdWRlICZsdDtzeXMvc3lzY2FsbC5oJmd0OwogI2luY2x1ZGUgJmx0O2FzbS9rdm0uaCZndDsKICNpbmNsdWRlICZsdDthc20va3ZtX3BhcmEuaCZndDsKQEAgLTEzLDEyICYjNDM7MTQsMjEgQEAKIAogI2luY2x1ZGUgJiMzNDt0ZXN0X3V0aWwuaCYjMzQ7CiAjaW5jbHVkZSAmIzM0O2t2bV91dGlsLmgmIzM0OwomIzQzOyNpbmNsdWRlICYjMzQ7Z2ljLmgmIzM0OwogI2luY2x1ZGUgJiMzNDtwcm9jZXNzb3IuaCYjMzQ7CiAjaW5jbHVkZSAmIzM0O3ZnaWMuaCYjMzQ7CiAjaW5jbHVkZSAmIzM0O2dpY192My5oJiMzNDsKIAogI2RlZmluZSBOUl9WQ1BVUwkJNAogCiYjNDM7I2RlZmluZSBSRURJU1RfUkVUUllfUkVHSU9OMF9CQVNFCUdJQ1JfQkFTRV9HUEEKJiM0MzsjZGVmaW5lIFJFRElTVF9SRVRSWV9SRUdJT04xX0JBU0UJXAomIzQzOwkoUkVESVNUX1JFVFJZX1JFR0lPTjBfQkFTRSAmIzQzOyAyICogS1ZNX1ZHSUNfVjNfUkVESVNUX1NJWkUpCiYjNDM7I2RlZmluZSBSRURJU1RfUkVUUllfRElTVF9CQVNFCQlcCiYjNDM7CShSRURJU1RfUkVUUllfUkVHSU9OMV9CQVNFICYjNDM7IEtWTV9WR0lDX1YzX1JFRElTVF9TSVpFKQomIzQzOyNkZWZpbmUgUkVESVNUX1JFVFJZX1JFR0lPTjJfQkFTRQlcCiYjNDM7CShSRURJU1RfUkVUUllfRElTVF9CQVNFICYjNDM7IEtWTV9WR0lDX1YzX0RJU1RfU0laRSkKJiM0MzsKICNkZWZpbmUgUkVHX09GRlNFVCh2Y3B1LCBvZmZzZXQpICgoKHU2NCl2Y3B1ICZsdDsmbHQ7IDMyKSB8IG9mZnNldCkKIAogI2RlZmluZSBWR0lDX0RFVl9JU19WMihfZCkgKChfZCkgPT0gS1ZNX0RFVl9UWVBFX0FSTV9WR0lDX1YyKQpAQCAtNjUsNiAmIzQzOzc1LDIzIEBAIHN0YXRpYyB2b2lkIGd1ZXN0X2NvZGUodm9pZCkKIAlHVUVTVF9ET05FKCk7CiB9CiAKJiM0MztzdGF0aWMgdm9pZCBndWVzdF9jaGVja19yZWRpc3RfcmV0cnkodm9pZCkKJiM0Mzt7CiYjNDM7CXVuc2lnbmVkIGludCBpOwomIzQzOwomIzQzOwkvKiBUaGUgZmlyc3QgdGhyZWUgcmVkaXN0cmlidXRvcnMgc3BhbiBhZGphY2VudCByZWdpb25zIDAgYW5kIDEuICovCiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBOUl9WQ1BVUzsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCXU2NCBiYXNlID0gaSAmbHQ7IDMgPyBSRURJU1RfUkVUUllfUkVHSU9OMF9CQVNFICYjNDM7CiYjNDM7CQkJCSAgICAgICBpICogS1ZNX1ZHSUNfVjNfUkVESVNUX1NJWkUgOgomIzQzOwkJCQkgICAgICAgUkVESVNUX1JFVFJZX1JFR0lPTjJfQkFTRTsKJiM0MzsJCXU2NCB0eXBlciA9IHJlYWRxKCh2b2lkICopKHVuc2lnbmVkIGxvbmcpKGJhc2UgJiM0MzsgR0lDUl9UWVBFUikpOwomIzQzOwomIzQzOwkJR1VFU1RfQVNTRVJUX0VRKEdJQ1JfVFlQRVJfQ1BVX05VTUJFUih0eXBlciksIGkpOwomIzQzOwl9CiYjNDM7CiYjNDM7CUdVRVNUX0RPTkUoKTsKJiM0Mzt9CiYjNDM7CiAvKiB3ZSBkb24mIzM5O3Qgd2FudCB0byBhc3NlcnQgb24gcnVuIGV4ZWN1dGlvbiwgaGVuY2UgdGhhdCBoZWxwZXIgKi8KIHN0YXRpYyBpbnQgcnVuX3ZjcHUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogewpAQCAtNzMsNiAmIzQzOzEwMCw3IEBAIHN0YXRpYyBpbnQgcnVuX3ZjcHUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogCiBzdGF0aWMgc3RydWN0IHZtX2dpYyB2bV9naWNfY3JlYXRlX3dpdGhfdmNwdXModTMyIGdpY19kZXZfdHlwZSwKIAkJCQkJICAgICAgdTMyIG5yX3ZjcHVzLAomIzQzOwkJCQkJICAgICAgdm9pZCAqZ3Vlc3RfY29kZSwKIAkJCQkJICAgICAgc3RydWN0IGt2bV92Y3B1ICp2Y3B1c1tdKQogewogCXN0cnVjdCB2bV9naWMgdjsKQEAgLTMzOCw3ICYjNDM7MzY2LDcgQEAgc3RhdGljIHZvaWQgdGVzdF92Z2ljX3RoZW5fdmNwdXModTMyIGdpY19kZXZfdHlwZSkKIAlzdHJ1Y3Qgdm1fZ2ljIHY7CiAJaW50IHJldCwgaTsKIAotCXYgPSB2bV9naWNfY3JlYXRlX3dpdGhfdmNwdXMoZ2ljX2Rldl90eXBlLCAxLCB2Y3B1cyk7CiYjNDM7CXYgPSB2bV9naWNfY3JlYXRlX3dpdGhfdmNwdXMoZ2ljX2Rldl90eXBlLCAxLCBndWVzdF9jb2RlLCB2Y3B1cyk7CiAKIAlzdWJ0ZXN0X2Rpc3RfcmRpc3QoJmFtcDt2KTsKIApAQCAtMzU5LDcgJiM0MzszODcsOCBAQCBzdGF0aWMgdm9pZCB0ZXN0X3ZjcHVzX3RoZW5fdmdpYyh1MzIgZ2ljX2Rldl90eXBlKQogCXN0cnVjdCB2bV9naWMgdjsKIAlpbnQgcmV0OwogCi0JdiA9IHZtX2dpY19jcmVhdGVfd2l0aF92Y3B1cyhnaWNfZGV2X3R5cGUsIE5SX1ZDUFVTLCB2Y3B1cyk7CiYjNDM7CXYgPSB2bV9naWNfY3JlYXRlX3dpdGhfdmNwdXMoZ2ljX2Rldl90eXBlLCBOUl9WQ1BVUywgZ3Vlc3RfY29kZSwKJiM0MzsJCQkJICAgICB2Y3B1cyk7CiAKIAlzdWJ0ZXN0X2Rpc3RfcmRpc3QoJmFtcDt2KTsKIApAQCAtNDExLDcgJiM0Mzs0NDAsOCBAQCBzdGF0aWMgdm9pZCB0ZXN0X3YzX25ld19yZWRpc3RfcmVnaW9ucyh2b2lkKQogCXU2NCBhZGRyOwogCWludCByZXQ7CiAKLQl2ID0gdm1fZ2ljX2NyZWF0ZV93aXRoX3ZjcHVzKEtWTV9ERVZfVFlQRV9BUk1fVkdJQ19WMywgTlJfVkNQVVMsIHZjcHVzKTsKJiM0MzsJdiA9IHZtX2dpY19jcmVhdGVfd2l0aF92Y3B1cyhLVk1fREVWX1RZUEVfQVJNX1ZHSUNfVjMsIE5SX1ZDUFVTLAomIzQzOwkJCQkgICAgIGd1ZXN0X2NvZGUsIHZjcHVzKTsKIAlzdWJ0ZXN0X3YzX3JlZGlzdF9yZWdpb25zKCZhbXA7dik7CiAJa3ZtX2RldmljZV9hdHRyX3NldCh2LmdpY19mZCwgS1ZNX0RFVl9BUk1fVkdJQ19HUlBfQ1RSTCwKIAkJCSAgICBLVk1fREVWX0FSTV9WR0lDX0NUUkxfSU5JVCwgTlVMTCk7CkBAIC00MjIsNyAmIzQzOzQ1Miw4IEBAIHN0YXRpYyB2b2lkIHRlc3RfdjNfbmV3X3JlZGlzdF9yZWdpb25zKHZvaWQpCiAKIAkvKiBzdGVwMiAqLwogCi0JdiA9IHZtX2dpY19jcmVhdGVfd2l0aF92Y3B1cyhLVk1fREVWX1RZUEVfQVJNX1ZHSUNfVjMsIE5SX1ZDUFVTLCB2Y3B1cyk7CiYjNDM7CXYgPSB2bV9naWNfY3JlYXRlX3dpdGhfdmNwdXMoS1ZNX0RFVl9UWVBFX0FSTV9WR0lDX1YzLCBOUl9WQ1BVUywKJiM0MzsJCQkJICAgICBndWVzdF9jb2RlLCB2Y3B1cyk7CiAJc3VidGVzdF92M19yZWRpc3RfcmVnaW9ucygmYW1wO3YpOwogCiAJYWRkciA9IFJFRElTVF9SRUdJT05fQVRUUl9BRERSKDEsIDB4MjgwMDAwLCAwLCAyKTsKQEAgLTQzNiw3ICYjNDM7NDY3LDggQEAgc3RhdGljIHZvaWQgdGVzdF92M19uZXdfcmVkaXN0X3JlZ2lvbnModm9pZCkKIAogCS8qIHN0ZXAgMyAqLwogCi0JdiA9IHZtX2dpY19jcmVhdGVfd2l0aF92Y3B1cyhLVk1fREVWX1RZUEVfQVJNX1ZHSUNfVjMsIE5SX1ZDUFVTLCB2Y3B1cyk7CiYjNDM7CXYgPSB2bV9naWNfY3JlYXRlX3dpdGhfdmNwdXMoS1ZNX0RFVl9UWVBFX0FSTV9WR0lDX1YzLCBOUl9WQ1BVUywKJiM0MzsJCQkJICAgICBndWVzdF9jb2RlLCB2Y3B1cyk7CiAJc3VidGVzdF92M19yZWRpc3RfcmVnaW9ucygmYW1wO3YpOwogCiAJcmV0ID0gX19rdm1fZGV2aWNlX2F0dHJfc2V0KHYuZ2ljX2ZkLCBLVk1fREVWX0FSTV9WR0lDX0dSUF9BRERSLApAQCAtNDU3LDYgJiM0Mzs0ODksNzAgQEAgc3RhdGljIHZvaWQgdGVzdF92M19uZXdfcmVkaXN0X3JlZ2lvbnModm9pZCkKIAl2bV9naWNfZGVzdHJveSgmYW1wO3YpOwogfQogCiYjNDM7c3RhdGljIHZvaWQgdGVzdF92M19yZWRpc3RfcmVnaW9uX3JldHJ5KHZvaWQpCiYjNDM7ewomIzQzOwlzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHVzW05SX1ZDUFVTXTsKJiM0MzsJc3RydWN0IHZtX2dpYyB2OwomIzQzOwlzdHJ1Y3QgdWNhbGwgdWM7CiYjNDM7CXU2NCBhZGRyOwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwl2ID0gdm1fZ2ljX2NyZWF0ZV93aXRoX3ZjcHVzKEtWTV9ERVZfVFlQRV9BUk1fVkdJQ19WMywgTlJfVkNQVVMsCiYjNDM7CQkJCSAgICAgZ3Vlc3RfY2hlY2tfcmVkaXN0X3JldHJ5LCB2Y3B1cyk7CiYjNDM7CiYjNDM7CWFkZHIgPSBSRURJU1RfUkVHSU9OX0FUVFJfQUREUigyLCBSRURJU1RfUkVUUllfUkVHSU9OMF9CQVNFLCAwLCAwKTsKJiM0MzsJa3ZtX2RldmljZV9hdHRyX3NldCh2LmdpY19mZCwgS1ZNX0RFVl9BUk1fVkdJQ19HUlBfQUREUiwKJiM0MzsJCQkgICAgS1ZNX1ZHSUNfVjNfQUREUl9UWVBFX1JFRElTVF9SRUdJT04sICZhbXA7YWRkcik7CiYjNDM7CiYjNDM7CWFkZHIgPSBSRURJU1RfUkVHSU9OX0FUVFJfQUREUigxLCBSRURJU1RfUkVUUllfUkVHSU9OMV9CQVNFLCAwLCAxKTsKJiM0MzsJa3ZtX2RldmljZV9hdHRyX3NldCh2LmdpY19mZCwgS1ZNX0RFVl9BUk1fVkdJQ19HUlBfQUREUiwKJiM0MzsJCQkgICAgS1ZNX1ZHSUNfVjNfQUREUl9UWVBFX1JFRElTVF9SRUdJT04sICZhbXA7YWRkcik7CiYjNDM7CiYjNDM7CWFkZHIgPSBSRURJU1RfUkVUUllfRElTVF9CQVNFOwomIzQzOwlrdm1fZGV2aWNlX2F0dHJfc2V0KHYuZ2ljX2ZkLCBLVk1fREVWX0FSTV9WR0lDX0dSUF9BRERSLAomIzQzOwkJCSAgICBLVk1fVkdJQ19WM19BRERSX1RZUEVfRElTVCwgJmFtcDthZGRyKTsKJiM0MzsKJiM0MzsJYWRkciA9IFJFRElTVF9SRUdJT05fQVRUUl9BRERSKDEsIFJFRElTVF9SRVRSWV9ESVNUX0JBU0UsIDAsIDIpOwomIzQzOwlyZXQgPSBfX2t2bV9kZXZpY2VfYXR0cl9zZXQodi5naWNfZmQsIEtWTV9ERVZfQVJNX1ZHSUNfR1JQX0FERFIsCiYjNDM7CQkJCSAgICBLVk1fVkdJQ19WM19BRERSX1RZUEVfUkVESVNUX1JFR0lPTiwKJiM0MzsJCQkJICAgICZhbXA7YWRkcik7CiYjNDM7CVRFU1RfQVNTRVJUKHJldCAmYW1wOyZhbXA7IGVycm5vID09IEVJTlZBTCwKJiM0MzsJCSAgICAmIzM0O3JlZ2lzdGVyIHJlZGlzdCByZWdpb24gY29sbGlkaW5nIHdpdGggZGlzdCYjMzQ7KTsKJiM0MzsKJiM0MzsJYWRkciA9IFJFRElTVF9SRUdJT05fQVRUUl9BRERSKDEsIFJFRElTVF9SRVRSWV9SRUdJT04yX0JBU0UsIDAsIDIpOwomIzQzOwlrdm1fZGV2aWNlX2F0dHJfc2V0KHYuZ2ljX2ZkLCBLVk1fREVWX0FSTV9WR0lDX0dSUF9BRERSLAomIzQzOwkJCSAgICBLVk1fVkdJQ19WM19BRERSX1RZUEVfUkVESVNUX1JFR0lPTiwgJmFtcDthZGRyKTsKJiM0MzsKJiM0MzsJdmlydF9tYXAodi52bSwgUkVESVNUX1JFVFJZX1JFR0lPTjBfQkFTRSwgUkVESVNUX1JFVFJZX1JFR0lPTjBfQkFTRSwKJiM0MzsJCSB2bV9jYWxjX251bV9ndWVzdF9wYWdlcyh2LnZtLSZndDttb2RlLAomIzQzOwkJCQkJIDMgKiBLVk1fVkdJQ19WM19SRURJU1RfU0laRSkpOwomIzQzOwl2aXJ0X21hcCh2LnZtLCBSRURJU1RfUkVUUllfUkVHSU9OMl9CQVNFLCBSRURJU1RfUkVUUllfUkVHSU9OMl9CQVNFLAomIzQzOwkJIHZtX2NhbGNfbnVtX2d1ZXN0X3BhZ2VzKHYudm0tJmd0O21vZGUsCiYjNDM7CQkJCQkgS1ZNX1ZHSUNfVjNfUkVESVNUX1NJWkUpKTsKJiM0MzsKJiM0MzsJa3ZtX2RldmljZV9hdHRyX3NldCh2LmdpY19mZCwgS1ZNX0RFVl9BUk1fVkdJQ19HUlBfQ1RSTCwKJiM0MzsJCQkgICAgS1ZNX0RFVl9BUk1fVkdJQ19DVFJMX0lOSVQsIE5VTEwpOwomIzQzOwomIzQzOwl2Y3B1X3J1bih2Y3B1c1swXSk7CiYjNDM7CXN3aXRjaCAoZ2V0X3VjYWxsKHZjcHVzWzBdLCAmYW1wO3VjKSkgewomIzQzOwljYXNlIFVDQUxMX0RPTkU6CiYjNDM7CQlicmVhazsKJiM0MzsJY2FzZSBVQ0FMTF9BQk9SVDoKJiM0MzsJCVJFUE9SVF9HVUVTVF9BU1NFUlQodWMpOwomIzQzOwkJYnJlYWs7CiYjNDM7CWNhc2UgVUNBTExfTk9ORToKJiM0MzsJCWlmICh2Y3B1c1swXS0mZ3Q7cnVuLSZndDtleGl0X3JlYXNvbiA9PSBLVk1fRVhJVF9NTUlPKQomIzQzOwkJCVRFU1RfRkFJTCgmIzM0O1VuZXhwZWN0ZWQgTU1JTyBleGl0IGF0IDB4JWxseCYjMzQ7LAomIzQzOwkJCQkgIHZjcHVzWzBdLSZndDtydW4tJmd0O21taW8ucGh5c19hZGRyKTsKJiM0MzsJCWZhbGx0aHJvdWdoOwomIzQzOwlkZWZhdWx0OgomIzQzOwkJVEVTVF9GQUlMKCYjMzQ7VW5leHBlY3RlZCB1Y2FsbCAlbHUsIGV4aXRfcmVhc29uICV1JiMzNDssCiYjNDM7CQkJICB1Yy5jbWQsIHZjcHVzWzBdLSZndDtydW4tJmd0O2V4aXRfcmVhc29uKTsKJiM0MzsJfQomIzQzOwomIzQzOwl2bV9naWNfZGVzdHJveSgmYW1wO3YpOwomIzQzO30KJiM0MzsKIHN0YXRpYyB2b2lkIHRlc3RfdjNfdHlwZXJfYWNjZXNzZXModm9pZCkKIHsKIAlzdHJ1Y3Qgdm1fZ2ljIHY7CkBAIC02MDgsNyAmIzQzOzcwNCw4IEBAIHN0YXRpYyB2b2lkIHRlc3RfdjNfcmVkaXN0X2lwYV9yYW5nZV9jaGVja19hdF92Y3B1X3J1bih2b2lkKQogCWludCByZXQsIGk7CiAJdTY0IGFkZHI7CiAKLQl2ID0gdm1fZ2ljX2NyZWF0ZV93aXRoX3ZjcHVzKEtWTV9ERVZfVFlQRV9BUk1fVkdJQ19WMywgMSwgdmNwdXMpOwomIzQzOwl2ID0gdm1fZ2ljX2NyZWF0ZV93aXRoX3ZjcHVzKEtWTV9ERVZfVFlQRV9BUk1fVkdJQ19WMywgMSwgZ3Vlc3RfY29kZSwKJiM0MzsJCQkJICAgICB2Y3B1cyk7CiAKIAkvKiBTZXQgc3BhY2UgZm9yIDMgcmVkaXN0cywgd2UgaGF2ZSAxIHZjcHUsIHNvIHRoaXMgc3VjY2VlZHMuICovCiAJYWRkciA9IG1heF9waHlzX3NpemUgLSAoMyAqIDIgKiAweDEwMDAwKTsKQEAgLTY0MSw3ICYjNDM7NzM4LDggQEAgc3RhdGljIHZvaWQgdGVzdF92M19pdHNfcmVnaW9uKHZvaWQpCiAJdTY0IGFkZHI7CiAJaW50IGl0c19mZCwgcmV0OwogCi0JdiA9IHZtX2dpY19jcmVhdGVfd2l0aF92Y3B1cyhLVk1fREVWX1RZUEVfQVJNX1ZHSUNfVjMsIE5SX1ZDUFVTLCB2Y3B1cyk7CiYjNDM7CXYgPSB2bV9naWNfY3JlYXRlX3dpdGhfdmNwdXMoS1ZNX0RFVl9UWVBFX0FSTV9WR0lDX1YzLCBOUl9WQ1BVUywKJiM0MzsJCQkJICAgICBndWVzdF9jb2RlLCB2Y3B1cyk7CiAJaXRzX2ZkID0ga3ZtX2NyZWF0ZV9kZXZpY2Uodi52bSwgS1ZNX0RFVl9UWVBFX0FSTV9WR0lDX0lUUyk7CiAKIAlhZGRyID0gMHg0MDEwMDA7CkBAIC02ODQsNyAmIzQzOzc4Miw4IEBAIHN0YXRpYyB2b2lkIHRlc3RfdjNfbmFzc2dpY2FwKHZvaWQpCiAJdTMyIHR5cGVyMjsKIAlpbnQgcmV0OwogCi0Jdm0gPSB2bV9naWNfY3JlYXRlX3dpdGhfdmNwdXMoS1ZNX0RFVl9UWVBFX0FSTV9WR0lDX1YzLCBOUl9WQ1BVUywgdmNwdXMpOwomIzQzOwl2bSA9IHZtX2dpY19jcmVhdGVfd2l0aF92Y3B1cyhLVk1fREVWX1RZUEVfQVJNX1ZHSUNfVjMsIE5SX1ZDUFVTLAomIzQzOwkJCQkgICAgICBndWVzdF9jb2RlLCB2Y3B1cyk7CiAJa3ZtX2RldmljZV9hdHRyX2dldCh2bS5naWNfZmQsIEtWTV9ERVZfQVJNX1ZHSUNfR1JQX0RJU1RfUkVHUywKIAkJCSAgICBHSUNEX1RZUEVSMiwgJmFtcDt0eXBlcjIpOwogCWhhc19uYXNzZ2ljYXAgPSB0eXBlcjIgJmFtcDsgR0lDRF9UWVBFUjJfbkFTU0dJY2FwOwpAQCAtOTc4LDYgJiM0MzsxMDc3LDcgQEAgdm9pZCBydW5fdGVzdHModTMyIGdpY19kZXZfdHlwZSkKIAogCWlmIChWR0lDX0RFVl9JU19WMyhnaWNfZGV2X3R5cGUpKSB7CiAJCXRlc3RfdjNfbmV3X3JlZGlzdF9yZWdpb25zKCk7CiYjNDM7CQl0ZXN0X3YzX3JlZGlzdF9yZWdpb25fcmV0cnkoKTsKIAkJdGVzdF92M190eXBlcl9hY2Nlc3NlcygpOwogCQl0ZXN0X3YzX2xhc3RfYml0X3JlZGlzdF9yZWdpb25zKCk7CiAJCXRlc3RfdjNfbGFzdF9iaXRfc2luZ2xlX3JkaXN0KCk7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDA4OjI2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDcxMjEKCQkJCQkJCW91dHB1dDogNTEKCQkJCQkJCXRob3VnaHRzOiAyMjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgTGludXggS2VybmVsIENvbW1pdCBmb3IgRnV6emluZyBQb3RlbnRpYWwqKgoKT2theSwgc28gSSBuZWVkIHRvIGV2YWx1YXRlIHRoaXMgcmVjZW50IGNvbW1pdCB0byB0aGUgTGludXgga2VybmVsLiBUaGUgZ29hbCBpcyB0byBkZXRlcm1pbmUgaWYgaXQmIzM5O3MgZnV6ei13b3J0aHksIHdoYXQgc3BlY2lmaWMgc3ltYm9scyBJIHNob3VsZCBmb2N1cyBvbiwgYW5kIGFueSBjb25maWd1cmF0aW9uIHNldHRpbmdzIEkgbmVlZCB0byBiZSBhd2FyZSBvZi4gTGV0JiMzOTtzIGRpZyBpbi4KClRoZSBkaWZmIHRhcmdldHMgYGFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1tbWlvLXYzLmNgIGFuZCBhZGRzIHRlc3RzIHRvIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vYXJtNjQvdmdpY19pbml0LmNgLiBUaGF0IGltbWVkaWF0ZWx5IG1ha2VzIG1lIHRoaW5rIHRoaXMgaW52b2x2ZXMgS1ZNIGFuZCBzcGVjaWZpY2FsbHkgdGhlIFZpcnR1YWwgR0lDIChHZW5lcmljIEludGVycnVwdCBDb250cm9sbGVyKSBpbXBsZW1lbnRhdGlvbiBmb3IgQVJNNjQuIEludGVyZXN0aW5nLgoKSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCB0aGUga2V5IGZ1bmN0aW9ucyBpbnRyb2R1Y2VkIG9yIG1vZGlmaWVkIGFyZSwgc28gSSYjMzk7bGwgcmV2aWV3IGB2Z2ljX3VuZG9fcmVkaXN0X2Fzc2lnbm1lbnRgLCBgdmdpY19yZWdpc3Rlcl9yZWRpc3RfaW9kZXZgLCBgdmdpY19yb2xsYmFja19yZWRpc3RfaW9kZXZgLCBgdmdpY19yZWdpc3Rlcl9hbGxfcmVkaXN0X2lvZGV2c2AsIGFuZCBgdmdpY192M19zZXRfcmVkaXN0X2Jhc2VgIGluIGRldGFpbC4gVGhlc2UgbGlrZWx5IGhhbmRsZSB0aGUgcmVkaXN0cmlidXRpb24gb2YgSS9PIGRldmljZXMgd2l0aGluIHRoZSBWVkdJQy4gSW50ZXJydXB0IGNvbnRyb2xsZXJzIGFyZSBhbHdheXMgYSBnb29kIGFyZWEgZm9yIGZ1enppbmcsIGVzcGVjaWFsbHkgdmlydHVhbGl6ZWQgb25lcy4KClRvIGdldCBhIGJldHRlciBwaWN0dXJlLCBJJiMzOTtsbCB1c2UgZWl0aGVyIGBncmVwcGVyYCBvciBqdXN0IHJlYWQgdGhlIHJlbGV2YW50IGZpbGVzLCBzcGVjaWZpY2FsbHkgYGFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1tbWlvLXYzLmNgLCB0byB1bmRlcnN0YW5kIHRoZSBjb250cm9sIGZsb3cgYW5kIGRhdGEgc3RydWN0dXJlcyBpbnZvbHZlZC4gSSYjMzk7bGwgYWxzbyBkb3VibGUtY2hlY2sgdGhlIEtjb25maWcgb3B0aW9ucyBmb3IgQVJNNjQgS1ZNIHRvIHNlZSBpZiBhbnkgc3BlY2lmaWMgY29uZmlndXJhdGlvbnMgbmVlZCB0byBiZSBlbmFibGVkIGZvciB0aGlzIGNvZGUgdG8gYmUgYWN0aXZlLiBUaGF0IHdpbGwgaW5mbHVlbmNlIHRoZSBzZXR1cCBvZiBhbnkgZnV6emluZyBlbnZpcm9ubWVudCBJIGVzdGFibGlzaC4gSSBuZWVkIHRvIGJlIGNlcnRhaW4gdGhlIGtlcm5lbCBpcyBjb25maWd1cmVkIGNvcnJlY3RseSB0byBleGVyY2lzZSB0aGlzIGNvZGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMDg6MjY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDthcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtbW1pby12My5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNzYwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNzYwOlx0e1xuIDc2MTpcdFx0ZGV2LVx1MDAzZXJlZ2lvbnMgPSB2Z2ljX3YzX2Rpc3RfcmVnaXN0ZXJzO1xuIDc2MjpcdFx0ZGV2LVx1MDAzZW5yX3JlZ2lvbnMgPSBBUlJBWV9TSVpFKHZnaWNfdjNfZGlzdF9yZWdpc3RlcnMpO1xuIDc2MzpcdFxuIDc2NDpcdFx0a3ZtX2lvZGV2aWNlX2luaXQoXHUwMDI2ZGV2LVx1MDAzZWRldiwgXHUwMDI2a3ZtX2lvX2dpY19vcHMpO1xuIDc2NTpcdFxuIDc2NjpcdFx0cmV0dXJuIFNaXzY0SztcbiA3Njc6XHR9XG4gNzY4Olx0XG4gNzY5Olx0c3RhdGljIHZvaWQgdmdpY191bmRvX3JlZGlzdF9hc3NpZ25tZW50KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiA3NzA6XHR7XG4gNzcxOlx0XHRzdHJ1Y3QgdmdpY19jcHUgKnZnaWNfY3B1ID0gXHUwMDI2dmNwdS1cdTAwM2VhcmNoLnZnaWNfY3B1O1xuIDc3MjpcdFxuIDc3MzpcdFx0bG9ja2RlcF9hc3NlcnRfaGVsZChcdTAwMjZ2Y3B1LVx1MDAzZWt2bS1cdTAwM2VzbG90c19sb2NrKTtcbiA3NzQ6XHRcbiA3NzU6XHRcdGd1YXJkKG11dGV4KShcdTAwMjZ2Y3B1LVx1MDAzZWt2bS1cdTAwM2VhcmNoLmNvbmZpZ19sb2NrKTtcbiA3NzY6XHRcbiA3Nzc6XHRcdHZnaWNfY3B1LVx1MDAzZXJkcmVnLVx1MDAzZWZyZWVfaW5kZXgtLTtcbiA3Nzg6XHRcdHZnaWNfY3B1LVx1MDAzZXJkcmVnID0gTlVMTDtcbiA3Nzk6XHRcdHZnaWNfY3B1LVx1MDAzZXJkX2lvZGV2LmJhc2VfYWRkciA9IFZHSUNfQUREUl9VTkRFRjtcbiA3ODA6XHR9XG4gNzgxOlx0XG4gNzgyOlx0LyoqXG4gNzgzOlx0ICogdmdpY19yZWdpc3Rlcl9yZWRpc3RfaW9kZXYgLSByZWdpc3RlciBhIHNpbmdsZSByZWRpc3QgaW9kZXZcbiA3ODQ6XHQgKiBAdmNwdTogICAgVGhlIFZDUFUgdG8gd2hpY2ggdGhlIHJlZGlzdHJpYnV0b3IgYmVsb25nc1xuIDc4NTpcdCAqXG4gNzg2Olx0ICogUmVnaXN0ZXIgYSBLVk0gaW9kZXYgZm9yIHRoaXMgVkNQVSYjMzk7cyByZWRpc3RyaWJ1dG9yIHVzaW5nIHRoZSBhZGRyZXNzXG4gNzg3Olx0ICogcHJvdmlkZWQuXG4gNzg4Olx0ICpcbiA3ODk6XHQgKiBSZXR1cm4gMCBvbiBzdWNjZXNzLCAtRVJSTk8gb3RoZXJ3aXNlLlxuIDc5MDpcdCAqL1xuIDc5MTpcdGludCB2Z2ljX3JlZ2lzdGVyX3JlZGlzdF9pb2RldihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gNzkyOlx0e1xuIDc5MzpcdFx0c3RydWN0IGt2bSAqa3ZtID0gdmNwdS1cdTAwM2Vrdm07XG4gNzk0Olx0XHRzdHJ1Y3QgdmdpY19kaXN0ICp2Z2ljID0gXHUwMDI2a3ZtLVx1MDAzZWFyY2gudmdpYztcbiA3OTU6XHRcdHN0cnVjdCB2Z2ljX2NwdSAqdmdpY19jcHUgPSBcdTAwMjZ2Y3B1LVx1MDAzZWFyY2gudmdpY19jcHU7XG4gNzk2Olx0XHRzdHJ1Y3QgdmdpY19pb19kZXZpY2UgKnJkX2RldiA9IFx1MDAyNnZjcHUtXHUwMDNlYXJjaC52Z2ljX2NwdS5yZF9pb2RldjtcbiA3OTc6XHRcdHN0cnVjdCB2Z2ljX3JlZGlzdF9yZWdpb24gKnJkcmVnO1xuIDc5ODpcdFx0Z3BhX3QgcmRfYmFzZTtcbiA3OTk6XHRcdGludCByZXQgPSAwO1xuIDgwMDpcdFxuIDgwMTpcdFx0bG9ja2RlcF9hc3NlcnRfaGVsZChcdTAwMjZrdm0tXHUwMDNlc2xvdHNfbG9jayk7XG4gODAyOlx0XHRtdXRleF9sb2NrKFx1MDAyNmt2bS1cdTAwM2VhcmNoLmNvbmZpZ19sb2NrKTtcbiA4MDM6XHRcbiA4MDQ6XHRcdGlmICghSVNfVkdJQ19BRERSX1VOREVGKHZnaWNfY3B1LVx1MDAzZXJkX2lvZGV2LmJhc2VfYWRkcikpXG4gODA1Olx0XHRcdGdvdG8gb3V0X3VubG9jaztcbiA4MDY6XHRcbiA4MDc6XHRcdC8qXG4gODA4Olx0XHQgKiBXZSBtYXkgYmUgY3JlYXRpbmcgVkNQVXMgYmVmb3JlIGhhdmluZyBzZXQgdGhlIGJhc2UgYWRkcmVzcyBmb3IgdGhlXG4gODA5Olx0XHQgKiByZWRpc3RyaWJ1dG9yIHJlZ2lvbiwgaW4gd2hpY2ggY2FzZSB3ZSB3aWxsIGNvbWUgYmFjayB0byB0aGlzXG4gODEwOlx0XHQgKiBmdW5jdGlvbiBmb3IgYWxsIFZDUFVzIHdoZW4gdGhlIGJhc2UgYWRkcmVzcyBpcyBzZXQuICBKdXN0IHJldHVyblxuIDgxMTpcdFx0ICogd2l0aG91dCBkb2luZyBhbnkgd29yayBmb3Igbm93LlxuIDgxMjpcdFx0ICovXG4gODEzOlx0XHRyZHJlZyA9IHZnaWNfdjNfcmRpc3RfZnJlZV9zbG90KFx1MDAyNnZnaWMtXHUwMDNlcmRfcmVnaW9ucyk7XG4gODE0Olx0XHRpZiAoIXJkcmVnKVxuIDgxNTpcdFx0XHRnb3RvIG91dF91bmxvY2s7XG4gODE2Olx0XG4gODE3Olx0XHRpZiAoIXZnaWNfdjNfY2hlY2tfYmFzZShrdm0pKSB7XG4gODE4Olx0XHRcdHJldCA9IC1FSU5WQUw7XG4gODE5Olx0XHRcdGdvdG8gb3V0X3VubG9jaztcbiA4MjA6XHRcdH1cbiA4MjE6XHRcbiA4MjI6XHRcdHZnaWNfY3B1LVx1MDAzZXJkcmVnID0gcmRyZWc7XG4gODIzOlx0XHR2Z2ljX2NwdS1cdTAwM2VyZHJlZ19pbmRleCA9IHJkcmVnLVx1MDAzZWZyZWVfaW5kZXg7XG4gODI0Olx0XG4gODI1Olx0XHRyZF9iYXNlID0gcmRyZWctXHUwMDNlYmFzZSAmIzQzOyByZHJlZy1cdTAwM2VmcmVlX2luZGV4ICogS1ZNX1ZHSUNfVjNfUkVESVNUX1NJWkU7XG4gODI2Olx0XG4gODI3Olx0XHRrdm1faW9kZXZpY2VfaW5pdChcdTAwMjZyZF9kZXYtXHUwMDNlZGV2LCBcdTAwMjZrdm1faW9fZ2ljX29wcyk7XG4gODI4Olx0XHRyZF9kZXYtXHUwMDNlYmFzZV9hZGRyID0gcmRfYmFzZTtcbiA4Mjk6XHRcdHJkX2Rldi1cdTAwM2Vpb2Rldl90eXBlID0gSU9ERVZfUkVESVNUO1xuIDgzMDpcdFx0cmRfZGV2LVx1MDAzZXJlZ2lvbnMgPSB2Z2ljX3YzX3JkX3JlZ2lzdGVycztcbiA4MzE6XHRcdHJkX2Rldi1cdTAwM2Vucl9yZWdpb25zID0gQVJSQVlfU0laRSh2Z2ljX3YzX3JkX3JlZ2lzdGVycyk7XG4gODMyOlx0XHRyZF9kZXYtXHUwMDNlcmVkaXN0X3ZjcHUgPSB2Y3B1O1xuIDgzMzpcdFxuIDgzNDpcdFx0LyogUHJvdGVjdGVkIGJ5IHNsb3RzX2xvY2sgKi9cbiA4MzU6XHRcdHJkcmVnLVx1MDAzZWZyZWVfaW5kZXgmIzQzOyYjNDM7O1xuIDgzNjpcdFxuIDgzNzpcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNmt2bS1cdTAwM2VhcmNoLmNvbmZpZ19sb2NrKTtcbiA4Mzg6XHRcbiA4Mzk6XHRcdHJldCA9IGt2bV9pb19idXNfcmVnaXN0ZXJfZGV2KGt2bSwgS1ZNX01NSU9fQlVTLCByZF9iYXNlLFxuIDg0MDpcdFx0XHRcdFx0ICAgICAgMiAqIFNaXzY0SywgXHUwMDI2cmRfZGV2LVx1MDAzZWRldik7XG4gODQxOlx0XHRpZiAocmV0KVxuIDg0MjpcdFx0XHR2Z2ljX3VuZG9fcmVkaXN0X2Fzc2lnbm1lbnQodmNwdSk7XG4gODQzOlx0XG4gODQ0Olx0XHRyZXR1cm4gcmV0O1xuIDg0NTpcdFxuIDg0NjpcdG91dF91bmxvY2s6XG4gODQ3Olx0XHRtdXRleF91bmxvY2soXHUwMDI2a3ZtLVx1MDAzZWFyY2guY29uZmlnX2xvY2spO1xuIDg0ODpcdFx0cmV0dXJuIHJldDtcbiA4NDk6XHR9XG4gODUwOlx0XG4gODUxOlx0dm9pZCB2Z2ljX3VucmVnaXN0ZXJfcmVkaXN0X2lvZGV2KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiA4NTI6XHR7XG4gODUzOlx0XHRzdHJ1Y3QgdmdpY19pb19kZXZpY2UgKnJkX2RldiA9IFx1MDAyNnZjcHUtXHUwMDNlYXJjaC52Z2ljX2NwdS5yZF9pb2RldjtcbiA4NTQ6XHRcbiA4NTU6XHRcdGt2bV9pb19idXNfdW5yZWdpc3Rlcl9kZXYodmNwdS1cdTAwM2Vrdm0sIEtWTV9NTUlPX0JVUywgXHUwMDI2cmRfZGV2LVx1MDAzZWRldik7XG4gODU2Olx0fVxuIDg1NzpcdFxuIDg1ODpcdHN0YXRpYyB2b2lkIHZnaWNfcm9sbGJhY2tfcmVkaXN0X2lvZGV2KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbiA4NTk6XHRcdFx0XHRcdCAgICAgICBzdHJ1Y3QgdmdpY19yZWRpc3RfcmVnaW9uICpyZHJlZylcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAwODoyNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5NDcwCgkJCQkJCQlvdXRwdXQ6IDUwCgkJCQkJCQl0aG91Z2h0czogNDEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIGxpbmVzIG9mIGNvZGUsIHByZXNlbnRlZCBhcyBhIHBlcnNvbmFsIHJlZmxlY3Rpb24sIGFzIGlmIEkgd2VyZSBhbmFseXppbmcgdGhlbSBteXNlbGY6CgoqKkFuYWx5emluZyB2Z2ljLW1taW8tdjMuYzogTGluZXMgODYwLTEwMzAqKgoKQWxyaWdodCwgSSYjMzk7bSBoZWFkaW5nIGRvd24gaW50byB0aGUgZ3V0cyBvZiB0aGUgYHZnaWMtbW1pby12My5jYCBmaWxlLCBzcGVjaWZpY2FsbHkgbGluZXMgODYwIHRvIDEwMzAuIFRoaXMgbGlrZWx5IGNvbnRhaW5zIGNydWNpYWwgbG9naWMgZm9yIGhhbmRsaW5nIHRoZSBNTUlPIChNZW1vcnktTWFwcGVkIEkvTykgaW50ZXJhY3Rpb25zIGZvciB0aGUgVmlydHVhbCBHSUMgKEdlbmVyaWMgSW50ZXJydXB0IENvbnRyb2xsZXIpIHZlcnNpb24gMywgd2l0aGluIHRoZSBBUk02NCBLVk0gZW52aXJvbm1lbnQuIEdpdmVuIHRoZSBsaW5lIG51bWJlcnMsIEkmIzM5O20gZXhwZWN0aW5nIHRoaXMgaXMgZ29pbmcgdG8gYmUgYSByZWxhdGl2ZWx5IHNlbGYtY29udGFpbmVkLCBidXQgaW1wb3J0YW50LCBibG9jayBvZiBjb2RlLiBNeSBodW5jaCBpcyB0aGF0IHRoaXMgZGVhbHMgd2l0aCBlaXRoZXIgdGhlIHJlYWQgb3Igd3JpdGUgaGFuZGxpbmcgZm9yIGEgc2V0IG9mIHJlZ2lzdGVycywgb3IgcGVyaGFwcyBhIGNvcmUgc3RhdGUgdXBkYXRlIHdpdGhpbiB0aGUgdmdpYy4gTGV0IG1lIGFuYWx5emUgdGhpcyBhIGxpdHRsZSBkZWVwZXIsIGFuZCBzZWUgaWYgSSBjYW4gZmlndXJlIG91dCB0aGUgY29udGV4dC4KCkkgYW0gbG9va2luZyB0byB1bmRlcnN0YW5kIGV4YWN0bHkgaG93IHRoZSBLVk0gaHlwZXJ2aXNvciBpcyBpbnRlcmFjdGluZyB3aXRoIHRoZSB2aXJ0dWFsIEdJQy4gSSB3aWxsIHN0YXJ0IGJ5IHNlZWluZyBob3cgdGhlIGRpZmZlcmVudCByZWdpc3RlcnMgaW4gdGhlIHZpcnR1YWwgR0lDIGFyZSBtYXBwZWQuIEZyb20gdGhlcmUsIEkgd2lsbCBsaWtlbHkgdW5kZXJzdGFuZCBob3cgaW50ZXJydXB0cyBhcmUgaW5qZWN0ZWQgaW50byB0aGUgZ3Vlc3QgVk1zLiBJIGFtIG1vc3QgaW50ZXJlc3RlZCBpbiBzZWVpbmcgaWYgdGhlcmUgYXJlIGFueSByYWNlIGNvbmRpdGlvbnMgYmV0d2VlbiB0aGUgaG9zdCBhbmQgZ3Vlc3QsIGFuZCBob3cgdGhpcyBpcyBoYW5kbGVkLCBpZiBzby4gVGhlIG1vc3QgaW1wb3J0YW50IHRoaW5nIGhlcmUgaXMgdG8gbWFrZSBzdXJlIHRoaXMgaXMgZWZmaWNpZW50LCBnaXZlbiBob3cgaW50ZXJydXB0IGRlbGl2ZXJ5IGlzIGEgaGlnaCBmcmVxdWVuY3kgZXZlbnQuCgpJIHdpbGwgYWxzbyBiZSBvbiB0aGUgbG9va291dCBmb3IgYW55IHBvdGVudGlhbCBhcmVhcyBmb3Igb3B0aW1pemF0aW9uLCBvciBwb2ludHMgd2hlcmUgd2UgY291bGQgYmUgaW5hZHZlcnRlbnRseSBpbnRyb2R1Y2luZyBsYXRlbmN5LiBUaGUgZ29hbCBoZXJlIGlzIHRvIGdldCBhIHNvbGlkIGdyYXNwIG9mIGhvdyB0aGUgTU1JTyBtZWNoYW5pc20gd29ya3MgaW4gdGhpcyBWZ2ljLVYzIGNvbnRleHQuIEkgYWxzbyB3YW50IHRvIGlkZW50aWZ5IGhvdyB0aGUgY29kZSBtaWdodCBpbnRlcmFjdCB3aXRoIG90aGVyIHBhcnRzIG9mIHRoZSBLVk0gaW5mcmFzdHJ1Y3R1cmUsIHN1Y2ggYXMgdGhlIHZDUFUgb3IgdGhlIGludGVycnVwdCBjb250cm9sbGVyIGVtdWxhdGlvbiBsYXllcnMuIFRoaXMgcGFydGljdWxhciBzZWN0aW9uIGhhcyB0byBiZSBjb21wbGV0ZWx5IGNvcnJlY3QsIGFzIGludGVycnVwdCBkZWxpdmVyeSBpcyBjcnVjaWFsIGZvciBwcm9wZXIgb3BlcmF0aW9uLiBJJiMzOTttIGhvcGluZyBJIGNhbiBmaW5kIGEgc2VjdGlvbiB0aGF0IGlzIHVuZGVyc3RhbmRhYmxlLCBzbyB0aGF0IEkgY2FuIGxvb2sgYXQgbW9yZSBjb21wbGljYXRlZCBhcmVhcyBsYXRlci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAwODoyNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2FyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1tbWlvLXYzLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA4NTgsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogODAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDg1ODpcdHN0YXRpYyB2b2lkIHZnaWNfcm9sbGJhY2tfcmVkaXN0X2lvZGV2KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbiA4NTk6XHRcdFx0XHRcdCAgICAgICBzdHJ1Y3QgdmdpY19yZWRpc3RfcmVnaW9uICpyZHJlZylcbiA4NjA6XHR7XG4gODYxOlx0XHRzdHJ1Y3QgdmdpY19jcHUgKnZnaWNfY3B1ID0gXHUwMDI2dmNwdS1cdTAwM2VhcmNoLnZnaWNfY3B1O1xuIDg2MjpcdFxuIDg2MzpcdFx0bG9ja2RlcF9hc3NlcnRfaGVsZChcdTAwMjZ2Y3B1LVx1MDAzZWt2bS1cdTAwM2VzbG90c19sb2NrKTtcbiA4NjQ6XHRcbiA4NjU6XHRcdGlmICh2Z2ljX2NwdS1cdTAwM2VyZHJlZyAhPSByZHJlZylcbiA4NjY6XHRcdFx0cmV0dXJuO1xuIDg2NzpcdFxuIDg2ODpcdFx0dmdpY191bnJlZ2lzdGVyX3JlZGlzdF9pb2Rldih2Y3B1KTtcbiA4Njk6XHRcbiA4NzA6XHRcdGd1YXJkKG11dGV4KShcdTAwMjZ2Y3B1LVx1MDAzZWt2bS1cdTAwM2VhcmNoLmNvbmZpZ19sb2NrKTtcbiA4NzE6XHRcdHZnaWNfY3B1LVx1MDAzZXJkcmVnID0gTlVMTDtcbiA4NzI6XHRcdHZnaWNfY3B1LVx1MDAzZXJkX2lvZGV2LmJhc2VfYWRkciA9IFZHSUNfQUREUl9VTkRFRjtcbiA4NzM6XHR9XG4gODc0Olx0XG4gODc1Olx0c3RhdGljIGludCB2Z2ljX3JlZ2lzdGVyX2FsbF9yZWRpc3RfaW9kZXZzKHN0cnVjdCBrdm0gKmt2bSxcbiA4NzY6XHRcdFx0XHRcdFx0ICAgc3RydWN0IHZnaWNfcmVkaXN0X3JlZ2lvbiAqcmRyZWcpXG4gODc3Olx0e1xuIDg3ODpcdFx0c3RydWN0IGt2bV92Y3B1ICp2Y3B1O1xuIDg3OTpcdFx0dW5zaWduZWQgbG9uZyBjO1xuIDg4MDpcdFx0aW50IHJldCA9IDA7XG4gODgxOlx0XG4gODgyOlx0XHRsb2NrZGVwX2Fzc2VydF9oZWxkKFx1MDAyNmt2bS1cdTAwM2VzbG90c19sb2NrKTtcbiA4ODM6XHRcbiA4ODQ6XHRcdGt2bV9mb3JfZWFjaF92Y3B1KGMsIHZjcHUsIGt2bSkge1xuIDg4NTpcdFx0XHRyZXQgPSB2Z2ljX3JlZ2lzdGVyX3JlZGlzdF9pb2Rldih2Y3B1KTtcbiA4ODY6XHRcdFx0aWYgKHJldClcbiA4ODc6XHRcdFx0XHRicmVhaztcbiA4ODg6XHRcdH1cbiA4ODk6XHRcbiA4OTA6XHRcdGlmIChyZXQpIHtcbiA4OTE6XHRcdFx0LyogVW5kbyBhc3NpZ25tZW50cyBtYWRlIGZyb20gdGhlIHJlZ2lvbiBiZWluZyBhZGRlZC4gKi9cbiA4OTI6XHRcdFx0aW50IGk7XG4gODkzOlx0XG4gODk0Olx0XHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGM7IGkmIzQzOyYjNDM7KSB7XG4gODk1Olx0XHRcdFx0dmNwdSA9IGt2bV9nZXRfdmNwdShrdm0sIGkpO1xuIDg5NjpcdFx0XHRcdHZnaWNfcm9sbGJhY2tfcmVkaXN0X2lvZGV2KHZjcHUsIHJkcmVnKTtcbiA4OTc6XHRcdFx0fVxuIDg5ODpcdFx0fVxuIDg5OTpcdFxuIDkwMDpcdFx0cmV0dXJuIHJldDtcbiA5MDE6XHR9XG4gOTAyOlx0XG4gOTAzOlx0LyoqXG4gOTA0Olx0ICogdmdpY192M19hbGxvY19yZWRpc3RfcmVnaW9uIC0gQWxsb2NhdGUgYSBuZXcgcmVkaXN0cmlidXRvciByZWdpb25cbiA5MDU6XHQgKlxuIDkwNjpcdCAqIFBlcmZvcm1zIHZhcmlvdXMgY2hlY2tzIGJlZm9yZSBpbnNlcnRpbmcgdGhlIHJkaXN0IHJlZ2lvbiBpbiB0aGUgbGlzdC5cbiA5MDc6XHQgKiBUaG9zZSB0ZXN0cyBkZXBlbmQgb24gd2hldGhlciB0aGUgc2l6ZSBvZiB0aGUgcmRpc3QgcmVnaW9uIGlzIGtub3duXG4gOTA4Olx0ICogKGllLiBjb3VudCAhPSAwKS4gVGhlIGxpc3QgaXMgc29ydGVkIGJ5IHJkaXN0IHJlZ2lvbiBpbmRleC5cbiA5MDk6XHQgKlxuIDkxMDpcdCAqIEBrdm06IGt2bSBoYW5kbGVcbiA5MTE6XHQgKiBAaW5kZXg6IHJlZGlzdCByZWdpb24gaW5kZXhcbiA5MTI6XHQgKiBAYmFzZTogYmFzZSBvZiB0aGUgbmV3IHJkaXN0IHJlZ2lvblxuIDkxMzpcdCAqIEBjb3VudDogbnVtYmVyIG9mIHJlZGlzdHJpYnV0b3JzIHRoZSByZWdpb24gaXMgbWFkZSBvZiAoMCBpbiB0aGUgb2xkIHN0eWxlXG4gOTE0Olx0ICogc2luZ2xlIHJlZ2lvbiwgd2hvc2Ugc2l6ZSBpcyBpbmR1Y2VkIGZyb20gdGhlIG51bWJlciBvZiB2Y3B1cylcbiA5MTU6XHQgKlxuIDkxNjpcdCAqIFJldHVybiAwIG9uIHN1Y2Nlc3MsIFx1MDAzYyAwIG90aGVyd2lzZVxuIDkxNzpcdCAqL1xuIDkxODpcdHN0YXRpYyBpbnQgdmdpY192M19hbGxvY19yZWRpc3RfcmVnaW9uKHN0cnVjdCBrdm0gKmt2bSwgdWludDMyX3QgaW5kZXgsXG4gOTE5Olx0XHRcdFx0XHQgICAgICAgZ3BhX3QgYmFzZSwgdWludDMyX3QgY291bnQpXG4gOTIwOlx0e1xuIDkyMTpcdFx0c3RydWN0IHZnaWNfZGlzdCAqZCA9IFx1MDAyNmt2bS1cdTAwM2VhcmNoLnZnaWM7XG4gOTIyOlx0XHRzdHJ1Y3QgdmdpY19yZWRpc3RfcmVnaW9uICpyZHJlZztcbiA5MjM6XHRcdHN0cnVjdCBsaXN0X2hlYWQgKnJkX3JlZ2lvbnMgPSBcdTAwMjZkLVx1MDAzZXJkX3JlZ2lvbnM7XG4gOTI0Olx0XHRpbnQgbnJfdmNwdXMgPSBhdG9taWNfcmVhZChcdTAwMjZrdm0tXHUwMDNlb25saW5lX3ZjcHVzKTtcbiA5MjU6XHRcdHNpemVfdCBzaXplID0gY291bnQgPyBjb3VudCAqIEtWTV9WR0lDX1YzX1JFRElTVF9TSVpFXG4gOTI2Olx0XHRcdFx0ICAgIDogbnJfdmNwdXMgKiBLVk1fVkdJQ19WM19SRURJU1RfU0laRTtcbiA5Mjc6XHRcdGludCByZXQ7XG4gOTI4Olx0XG4gOTI5Olx0XHQvKiBjcm9zcyB0aGUgZW5kIG9mIG1lbW9yeSA/ICovXG4gOTMwOlx0XHRpZiAoYmFzZSAmIzQzOyBzaXplIFx1MDAzYyBiYXNlKVxuIDkzMTpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiA5MzI6XHRcbiA5MzM6XHRcdGlmIChsaXN0X2VtcHR5KHJkX3JlZ2lvbnMpKSB7XG4gOTM0Olx0XHRcdGlmIChpbmRleCAhPSAwKVxuIDkzNTpcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuIDkzNjpcdFx0fSBlbHNlIHtcbiA5Mzc6XHRcdFx0cmRyZWcgPSBsaXN0X2xhc3RfZW50cnkocmRfcmVnaW9ucyxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAwODoyNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTI4MwoJCQkJCQkJb3V0cHV0OiA1MAoJCQkJCQkJdGhvdWdodHM6IDM5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBhc3N1bWluZyBJJiMzOTttIGRlZXBseSBmYW1pbGlhciB3aXRoIEFSTTY0IEtWTSBhbmQgVkdDOgoKKipEaXZpbmcgaW50byB0aGUgVmdpYy1NTUlPLVYzLmMgQ29kZSoqCgpSaWdodCwgbGV0JiMzOTtzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gdGFrZSBhIGxvb2sgYXQgYSBzcGVjaWZpYyBzZWN0aW9uIG9mIHRoZSB2aXJ0dWFsIEdJQyBNTUlPIGNvZGUuIFNwZWNpZmljYWxseSwgbGluZXMgOTgwIHRocm91Z2ggMTAzMCB3aXRoaW4gdGhlIGBhcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtbW1pby12My5jYCBmaWxlLiBUaGlzIHRlbGxzIG1lIHRoZXJlJiMzOTtzIHNvbWV0aGluZyBzcGVjaWZpYyBpbiB0aGUgVjMgTU1JTyBlbXVsYXRpb24gdGhhdCByZXF1aXJlcyBteSBhdHRlbnRpb24uIEkmIzM5O20gcHJvYmFibHkgZGVhbGluZyB3aXRoIGFuIGlzc3VlLCBwZXJoYXBzIGEgcGVyZm9ybWFuY2UgYm90dGxlbmVjaywgb3IgZGVidWdnaW5nIGEgcmVwb3J0ZWQgYnVnIHJlbGF0ZWQgdG8gaG93IHRoZSB2aXJ0dWFsIEdJQyBoYW5kbGVzIG1lbW9yeS1tYXBwZWQgSS9PLiBUaGUgbGluZSBudW1iZXJzIG5hcnJvdyB0aGUgc2NvcGUsIHdoaWNoIG1lYW5zIEkgc2hvdWxkIHF1aWNrbHkgaXNvbGF0ZSB0aGUgcmVsZXZhbnQgY29kZSBibG9jayBhbmQgdW5kZXJzdGFuZCBpdHMgZnVuY3Rpb24gd2l0aGluIHRoZSBWMyBNTUlPIGZyYW1ld29yay4gSSYjMzk7bSBleHBlY3RpbmcgdGhpcyBibG9jayB3aWxsIHJldmVhbCB0aGUgY3J1eCBvZiB0aGUgcHJvYmxlbS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAwODoyNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2FyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1tbWlvLXYzLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA5ODAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDk4MDpcdFx0cmV0dXJuIDA7XG4gOTgxOlx0ZnJlZTpcbiA5ODI6XHRcdGtmcmVlKHJkcmVnKTtcbiA5ODM6XHRcdHJldHVybiByZXQ7XG4gOTg0Olx0fVxuIDk4NTpcdFxuIDk4NjpcdHZvaWQgdmdpY192M19mcmVlX3JlZGlzdF9yZWdpb24oc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3QgdmdpY19yZWRpc3RfcmVnaW9uICpyZHJlZylcbiA5ODc6XHR7XG4gOTg4Olx0XHRzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHU7XG4gOTg5Olx0XHR1bnNpZ25lZCBsb25nIGM7XG4gOTkwOlx0XG4gOTkxOlx0XHRsb2NrZGVwX2Fzc2VydF9oZWxkKFx1MDAyNmt2bS1cdTAwM2VhcmNoLmNvbmZpZ19sb2NrKTtcbiA5OTI6XHRcbiA5OTM6XHRcdC8qIEdhcmJhZ2UgY29sbGVjdCB0aGUgcmVnaW9uICovXG4gOTk0Olx0XHRrdm1fZm9yX2VhY2hfdmNwdShjLCB2Y3B1LCBrdm0pIHtcbiA5OTU6XHRcdFx0aWYgKHZjcHUtXHUwMDNlYXJjaC52Z2ljX2NwdS5yZHJlZyA9PSByZHJlZylcbiA5OTY6XHRcdFx0XHR2Y3B1LVx1MDAzZWFyY2gudmdpY19jcHUucmRyZWcgPSBOVUxMO1xuIDk5NzpcdFx0fVxuIDk5ODpcdFxuIDk5OTpcdFx0bGlzdF9kZWwoXHUwMDI2cmRyZWctXHUwMDNlbGlzdCk7XG4xMDAwOlx0XHRrZnJlZShyZHJlZyk7XG4xMDAxOlx0fVxuMTAwMjpcdFxuMTAwMzpcdGludCB2Z2ljX3YzX3NldF9yZWRpc3RfYmFzZShzdHJ1Y3Qga3ZtICprdm0sIHUzMiBpbmRleCwgdTY0IGFkZHIsIHUzMiBjb3VudClcbjEwMDQ6XHR7XG4xMDA1Olx0XHRzdHJ1Y3QgdmdpY19yZWRpc3RfcmVnaW9uICpyZHJlZztcbjEwMDY6XHRcdGludCByZXQ7XG4xMDA3Olx0XG4xMDA4Olx0XHRtdXRleF9sb2NrKFx1MDAyNmt2bS1cdTAwM2VhcmNoLmNvbmZpZ19sb2NrKTtcbjEwMDk6XHRcdHJldCA9IHZnaWNfdjNfYWxsb2NfcmVkaXN0X3JlZ2lvbihrdm0sIGluZGV4LCBhZGRyLCBjb3VudCk7XG4xMDEwOlx0XHRpZiAoIXJldClcbjEwMTE6XHRcdFx0cmRyZWcgPSB2Z2ljX3YzX3JkaXN0X3JlZ2lvbl9mcm9tX2luZGV4KGt2bSwgaW5kZXgpO1xuMTAxMjpcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNmt2bS1cdTAwM2VhcmNoLmNvbmZpZ19sb2NrKTtcbjEwMTM6XHRcdGlmIChyZXQpXG4xMDE0Olx0XHRcdHJldHVybiByZXQ7XG4xMDE1Olx0XG4xMDE2Olx0XHQvKlxuMTAxNzpcdFx0ICogUmVnaXN0ZXIgaW9kZXZzIGZvciBlYWNoIGV4aXN0aW5nIFZDUFUuICBBZGRpbmcgbW9yZSBWQ1BVc1xuMTAxODpcdFx0ICogYWZ0ZXJ3YXJkcyB3aWxsIHJlZ2lzdGVyIHRoZSBpb2RldnMgd2hlbiBuZWVkZWQuXG4xMDE5Olx0XHQgKi9cbjEwMjA6XHRcdHJldCA9IHZnaWNfcmVnaXN0ZXJfYWxsX3JlZGlzdF9pb2RldnMoa3ZtLCByZHJlZyk7XG4xMDIxOlx0XHRpZiAocmV0KSB7XG4xMDIyOlx0XHRcdG11dGV4X2xvY2soXHUwMDI2a3ZtLVx1MDAzZWFyY2guY29uZmlnX2xvY2spO1xuMTAyMzpcdFx0XHR2Z2ljX3YzX2ZyZWVfcmVkaXN0X3JlZ2lvbihrdm0sIHJkcmVnKTtcbjEwMjQ6XHRcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNmt2bS1cdTAwM2VhcmNoLmNvbmZpZ19sb2NrKTtcbjEwMjU6XHRcdFx0cmV0dXJuIHJldDtcbjEwMjY6XHRcdH1cbjEwMjc6XHRcbjEwMjg6XHRcdHJldHVybiAwO1xuMTAyOTpcdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAwODoyNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjM1NAoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDM4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkRlbHZpbmcgaW50byBBUk02NCBLVk0gYW5kIFZHSUMgQ29uZmlndXJhdGlvbioqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBLY29uZmlnIG9wdGlvbnMgdGhhdCBnb3Zlcm4gdGhlIGJlaGF2aW9yIG9mIEFSTTY0IEtWTSwgZXNwZWNpYWxseSBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIFZpcnR1YWwgR0lDIChWR0lDKS4gVGhpcyBtZWFucyBJJiMzOTttIGdvaW5nIHRvIGRpdmUgcmlnaHQgaW50byB0aGUgaGVhcnQgb2YgdGhlIG1hdHRlciDigJMgdGhlIGBhcmNoL2FybTY0L2t2bS9LY29uZmlnYCBmaWxlLiBUaGF0JiMzOTtzIHdoZXJlIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9uIHZhcmlhYmxlcyBzaG91bGQgYmUgZGVmaW5lZCBhbmQgbGlua2VkLiBUaGlzIGlzIGdvaW5nIHRvIGdpdmUgbWUgYSBzb2xpZCBmb3VuZGF0aW9uIGZvciBmdXJ0aGVyIGludmVzdGlnYXRpb25zIGludG8gdGhlIGtlcm5lbCBzb3VyY2UuIFRpbWUgdG8gZ2V0IHRvIHdvcmsuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDA4OjI2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7YXJjaC9hcm02NC9rdm0vS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4gICAyOlx0I1xuICAgMzpcdCMgS1ZNIGNvbmZpZ3VyYXRpb25cbiAgIDQ6XHQjXG4gICA1Olx0XG4gICA2Olx0c291cmNlIFwmIzM0O3ZpcnQva3ZtL0tjb25maWdcJiMzNDtcbiAgIDc6XHRcbiAgIDg6XHRtZW51Y29uZmlnIFZJUlRVQUxJWkFUSU9OXG4gICA5Olx0XHRib29sIFwmIzM0O1ZpcnR1YWxpemF0aW9uXCYjMzQ7XG4gIDEwOlx0XHRoZWxwXG4gIDExOlx0XHQgIFNheSBZIGhlcmUgdG8gZ2V0IHRvIHNlZSBvcHRpb25zIGZvciB1c2luZyB5b3VyIExpbnV4IGhvc3QgdG8gcnVuXG4gIDEyOlx0XHQgIG90aGVyIG9wZXJhdGluZyBzeXN0ZW1zIGluc2lkZSB2aXJ0dWFsIG1hY2hpbmVzIChndWVzdHMpLlxuICAxMzpcdFx0ICBUaGlzIG9wdGlvbiBhbG9uZSBkb2VzIG5vdCBhZGQgYW55IGtlcm5lbCBjb2RlLlxuICAxNDpcdFxuICAxNTpcdFx0ICBJZiB5b3Ugc2F5IE4sIGFsbCBvcHRpb25zIGluIHRoaXMgc3VibWVudSB3aWxsIGJlIHNraXBwZWQgYW5kXG4gIDE2Olx0XHQgIGRpc2FibGVkLlxuICAxNzpcdFxuICAxODpcdGlmIFZJUlRVQUxJWkFUSU9OXG4gIDE5Olx0XG4gIDIwOlx0bWVudWNvbmZpZyBLVk1cbiAgMjE6XHRcdGJvb2wgXCYjMzQ7S2VybmVsLWJhc2VkIFZpcnR1YWwgTWFjaGluZSAoS1ZNKSBzdXBwb3J0XCYjMzQ7XG4gIDIyOlx0XHRzZWxlY3QgS1ZNX0NPTU1PTlxuICAyMzpcdFx0c2VsZWN0IEtWTV9HRU5FUklDX0hBUkRXQVJFX0VOQUJMSU5HXG4gIDI0Olx0XHRzZWxlY3QgSEFWRV9LVk1fQ1BVX1JFTEFYX0lOVEVSQ0VQVFxuICAyNTpcdFx0c2VsZWN0IEtWTV9NTUlPXG4gIDI2Olx0XHRzZWxlY3QgS1ZNX0dFTkVSSUNfRElSVFlMT0dfUkVBRF9QUk9URUNUXG4gIDI3Olx0XHRzZWxlY3QgVklSVF9YRkVSX1RPX0dVRVNUX1dPUktcbiAgMjg6XHRcdHNlbGVjdCBLVk1fVkZJT1xuICAyOTpcdFx0c2VsZWN0IEhBVkVfS1ZNX0RJUlRZX1JJTkdfQUNRX1JFTFxuICAzMDpcdFx0c2VsZWN0IE5FRURfS1ZNX0RJUlRZX1JJTkdfV0lUSF9CSVRNQVBcbiAgMzE6XHRcdHNlbGVjdCBIQVZFX0tWTV9NU0lcbiAgMzI6XHRcdHNlbGVjdCBIQVZFX0tWTV9JUlFDSElQXG4gIDMzOlx0XHRzZWxlY3QgSEFWRV9LVk1fSVJRX1JPVVRJTkdcbiAgMzQ6XHRcdHNlbGVjdCBIQVZFX0tWTV9JUlFfQllQQVNTXG4gIDM1Olx0XHRzZWxlY3QgSEFWRV9LVk1fUkVBRE9OTFlfTUVNXG4gIDM2Olx0XHRzZWxlY3QgSEFWRV9LVk1fVkNQVV9SVU5fUElEX0NIQU5HRVxuICAzNzpcdFx0c2VsZWN0IFNDSEVEX0lORk9cbiAgMzg6XHRcdHNlbGVjdCBHVUVTVF9QRVJGX0VWRU5UUyBpZiBQRVJGX0VWRU5UU1xuICAzOTpcdFx0c2VsZWN0IEtWTV9HVUVTVF9NRU1GRFxuICA0MDpcdFx0aGVscFxuICA0MTpcdFx0ICBTdXBwb3J0IGhvc3RpbmcgdmlydHVhbGl6ZWQgZ3Vlc3QgbWFjaGluZXMuXG4gIDQyOlx0XG4gIDQzOlx0XHQgIElmIHVuc3VyZSwgc2F5IE4uXG4gIDQ0Olx0XG4gIDQ1Olx0aWYgS1ZNXG4gIDQ2Olx0XG4gIDQ3Olx0Y29uZmlnIFBURFVNUF9TVEFHRTJfREVCVUdGU1xuICA0ODpcdFx0Ym9vbCBcJiMzNDtQcmVzZW50IHRoZSBzdGFnZS0yIHBhZ2V0YWJsZXMgdG8gZGVidWdmc1wmIzM0O1xuICA0OTpcdFx0ZGVwZW5kcyBvbiBERUJVR19LRVJORUxcbiAgNTA6XHRcdGRlcGVuZHMgb24gREVCVUdfRlNcbiAgNTE6XHRcdGRlcGVuZHMgb24gQVJDSF9IQVNfUFREVU1QXG4gIDUyOlx0XHRzZWxlY3QgUFREVU1QXG4gIDUzOlx0XHRkZWZhdWx0IG5cbiAgNTQ6XHRcdGhlbHBcbiAgNTU6XHRcdCAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCB0byBzaG93IHRoZSBzdGFnZS0yIGtlcm5lbCBwYWdldGFibGVzXG4gIDU2Olx0XHQgIGxheW91dCBpbiBhIGRlYnVnZnMgZmlsZS4gVGhpcyBpbmZvcm1hdGlvbiBpcyBvbmx5IHVzZWZ1bCBmb3Iga2VybmVsIGRldmVsb3BlcnNcbiAgNTc6XHRcdCAgd2hvIGFyZSB3b3JraW5nIGluIGFyY2hpdGVjdHVyZSBzcGVjaWZpYyBhcmVhcyBvZiB0aGUga2VybmVsLlxuICA1ODpcdFx0ICBJdCBpcyBwcm9iYWJseSBub3QgYSBnb29kIGlkZWEgdG8gZW5hYmxlIHRoaXMgZmVhdHVyZSBpbiBhIHByb2R1Y3Rpb25cbiAgNTk6XHRcdCAga2VybmVsLlxuICA2MDpcdFxuICA2MTpcdFx0ICBJZiBpbiBkb3VidCwgc2F5IE4uXG4gIDYyOlx0XG4gIDYzOlx0Y29uZmlnIE5WSEVfRUwyX0RFQlVHXG4gIDY0Olx0XHRib29sIFwmIzM0O0RlYnVnIG1vZGUgZm9yIG5vbi1WSEUgRUwyIG9iamVjdFwmIzM0O1xuICA2NTpcdFx0ZGVmYXVsdCBuXG4gIDY2Olx0XHRoZWxwXG4gIDY3Olx0XHQgIFNheSBZIGhlcmUgdG8gZW5hYmxlIHRoZSBkZWJ1ZyBtb2RlIGZvciB0aGUgbm9uLVZIRSBLVk0gRUwyIG9iamVjdC5cbiAgNjg6XHRcdCAgRmFpbHVyZSByZXBvcnRzIHdpbGwgQlVHKCkgaW4gdGhlIGh5cGVydmlzb3IuIFRoaXMgaXMgaW50ZW5kZWQgZm9yXG4gIDY5Olx0XHQgIGxvY2FsIEVMMiBoeXBlcnZpc29yIGRldmVsb3BtZW50LlxuICA3MDpcdFxuICA3MTpcdFx0ICBJZiB1bnN1cmUsIHNheSBOLlxuICA3MjpcdFxuICA3MzpcdGlmIE5WSEVfRUwyX0RFQlVHXG4gIDc0Olx0XG4gIDc1Olx0Y29uZmlnIE5WSEVfRUwyX1RSQUNJTkdcbiAgNzY6XHRcdGJvb2xcbiAgNzc6XHRcdGRlcGVuZHMgb24gVFJBQ0lORyBcdTAwMjZcdTAwMjYgRlRSQUNFXG4gIDc4Olx0XHRzZWxlY3QgVFJBQ0VfUkVNT1RFXG4gIDc5Olx0XHRkZWZhdWx0IHlcbiAgODA6XHRcbiAgODE6XHRjb25maWcgUEtWTV9ESVNBQkxFX1NUQUdFMl9PTl9QQU5JQ1xuICA4MjpcdFx0Ym9vbCBcJiMzNDtEaXNhYmxlIHRoZSBob3N0IHN0YWdlLTIgb24gcGFuaWNcJiMzNDtcbiAgODM6XHRcdGRlZmF1bHQgblxuICA4NDpcdFx0aGVscFxuICA4NTpcdFx0ICBSZWxheCB0aGUgaG9zdCBzdGFnZS0yIG9uIGh5cGVydmlzb3IgcGFuaWMgdG8gYWxsb3cgdGhlIGtlcm5lbCB0b1xuICA4NjpcdFx0ICB1bndpbmQgYW5kIHN5bWJvbGl6ZSB0aGUgaHlwZXJ2aXNvciBzdGFja3RyYWNlLiBUaGlzIGhvd2V2ZXIgdGFtcGVyc1xuICA4NzpcdFx0ICB0aGUgc3lzdGVtIHNlY3VyaXR5LiBUaGlzIGlzIGludGVuZGVkIGZvciBsb2NhbCBFTDIgaHlwZXJ2aXNvclxuICA4ODpcdFx0ICBkZXZlbG9wbWVudC5cbiAgODk6XHRcbiAgOTA6XHRcdCAgSWYgdW5zdXJlLCBzYXkgTi5cbiAgOTE6XHRcbiAgOTI6XHRjb25maWcgUEtWTV9TVEFDS1RSQUNFXG4gIDkzOlx0XHRib29sIFwmIzM0O1Byb3RlY3RlZCBLVk0gaHlwZXJ2aXNvciBzdGFja3RyYWNlc1wmIzM0O1xuICA5NDpcdFx0ZGVwZW5kcyBvbiBQS1ZNX0RJU0FCTEVfU1RBR0UyX09OX1BBTklDXG4gIDk1Olx0XHRkZWZhdWx0IHlcbiAgOTY6XHRcdGhlbHBcbiAgOTc6XHRcdCAgU2F5IFkgaGVyZSB0byBlbmFibGUgcEtWTSBoeXBlcnZpc29yIHN0YWNrdHJhY2VzIG9uIGh5cF9wYW5pYygpXG4gIDk4Olx0XG4gIDk5Olx0XHQgIElmIHVzaW5nIHByb3RlY3RlZCBuVkhFIG1vZGUsIGJ1dCBjYW5ub3QgYWZmb3JkIHRoZSBhc3NvY2lhdGVkXG4gMTAwOlx0XHQgIG1lbW9yeSBjb3N0IChsZXNzIHRoYW4gMC43NSBwYWdlIHBlciBDUFUpIG9mIHBLVk0gc3RhY2t0cmFjZXMsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDA4OjI2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzODg3CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogNTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhlIHRob3VnaHQgcHJvY2VzcyB5b3UgZGVzY3JpYmVkOgoKKipFeGFtaW5pbmcgdGhlIEtWTS9BUk02NCBCdWlsZCBQcm9jZXNzKioKCk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBgdmdpYy1tbWlvLXYzLmNgIGlzIGJlaW5nIGNvbXBpbGVkLiBHaXZlbiBpdHMgYXNzb2NpYXRpb24gd2l0aCB0aGUgVmlydHVhbCBHSUMgYW5kIEFSTTY0IGFyY2hpdGVjdHVyZSwgbXkgZmlyc3Qgc3RlcCBpcyB0byBkaWcgaW50byB0aGUgTWFrZWZpbGVzLiBJJiMzOTtsbCBzdGFydCBieSBjaGVja2luZyB0aGUgTWFrZWZpbGVzIGluIGBhcmNoL2FybTY0L2t2bS9gIGFuZCB0aGVuIGBhcmNoL2FybTY0L2t2bS92Z2ljL2AuIFRoaXMgc2hvdWxkIHJldmVhbCB0aGUgYnVpbGQgcnVsZXMgYW5kIGRlcGVuZGVuY2llcyBmb3IgdGhhdCBzcGVjaWZpYyBmaWxlLiBIb3BlZnVsbHksIEkgY2FuIHRyYWNlIHRoZSBmbGFncywgaW5jbHVkZXMsIGFuZCBsaW5raW5nIHRvIHNlZSBob3cgaXQgYWxsIGNvbWVzIHRvZ2V0aGVyIGluIHRoZSBvdmVyYWxsIEtWTSBidWlsZCBmb3IgdGhpcyBhcmNoaXRlY3R1cmUuIEl0JiMzOTtzIHVzdWFsbHkgc3RyYWlnaHRmb3J3YXJkIHRvIHNlZSB0aGUgcmVsZXZhbnQgb2JqZWN0IGZpbGUgYW5kIHdoZXJlIGl0IGZpdHMgaW4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDA4OjI2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7YXJjaC9hcm02NC9rdm0vTWFrZWZpbGUmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4gICAyOlx0I1xuICAgMzpcdCMgTWFrZWZpbGUgZm9yIEtlcm5lbC1iYXNlZCBWaXJ0dWFsIE1hY2hpbmUgbW9kdWxlXG4gICA0Olx0I1xuICAgNTpcdFxuICAgNjpcdGNjZmxhZ3MteSAmIzQzOz0gLUkgJChzcmMpXG4gICA3Olx0XG4gICA4Olx0aW5jbHVkZSAkKHNyY3RyZWUpL3ZpcnQva3ZtL01ha2VmaWxlLmt2bVxuICAgOTpcdFxuICAxMDpcdG9iai0kKENPTkZJR19LVk0pICYjNDM7PSBrdm0ub1xuICAxMTpcdG9iai0kKENPTkZJR19LVk0pICYjNDM7PSBoeXAvXG4gIDEyOlx0XG4gIDEzOlx0Q0ZMQUdTX3N5c19yZWdzLm8gJiM0Mzs9IC1Xbm8tb3ZlcnJpZGUtaW5pdFxuICAxNDpcdENGTEFHU19oYW5kbGVfZXhpdC5vICYjNDM7PSAtV25vLW92ZXJyaWRlLWluaXRcbiAgMTU6XHRcbiAgMTY6XHRrdm0teSAmIzQzOz0gYXJtLm8gbW11Lm8gbW1pby5vIHBzY2kubyBoeXBlcmNhbGxzLm8gcHZ0aW1lLm8gXFxcbiAgMTc6XHRcdCBpbmplY3RfZmF1bHQubyB2YV9sYXlvdXQubyBoYW5kbGVfZXhpdC5vIGNvbmZpZy5vIFxcXG4gIDE4Olx0XHQgZ3Vlc3QubyBkZWJ1Zy5vIHJlc2V0Lm8gc3lzX3JlZ3MubyBzdGFja3RyYWNlLm8gXFxcbiAgMTk6XHRcdCB2Z2ljLXN5cy1yZWctdjMubyBmcHNpbWQubyBwa3ZtLm8gXFxcbiAgMjA6XHRcdCBhcmNoX3RpbWVyLm8gdHJuZy5vIHZtaWQubyBlbXVsYXRlLW5lc3RlZC5vIG5lc3RlZC5vIGF0Lm8gXFxcbiAgMjE6XHRcdCB2Z2ljL3ZnaWMubyB2Z2ljL3ZnaWMtaW5pdC5vIFxcXG4gIDIyOlx0XHQgdmdpYy92Z2ljLWlycWZkLm8gdmdpYy92Z2ljLXYyLm8gXFxcbiAgMjM6XHRcdCB2Z2ljL3ZnaWMtdjMubyB2Z2ljL3ZnaWMtdjQubyBcXFxuICAyNDpcdFx0IHZnaWMvdmdpYy1tbWlvLm8gdmdpYy92Z2ljLW1taW8tdjIubyBcXFxuICAyNTpcdFx0IHZnaWMvdmdpYy1tbWlvLXYzLm8gdmdpYy92Z2ljLWt2bS1kZXZpY2UubyBcXFxuICAyNjpcdFx0IHZnaWMvdmdpYy1pdHMubyB2Z2ljL3ZnaWMtZGVidWcubyB2Z2ljL3ZnaWMtdjMtbmVzdGVkLm8gXFxcbiAgMjc6XHRcdCB2Z2ljL3ZnaWMtdjUub1xuICAyODpcdFxuICAyOTpcdGt2bS0kKENPTkZJR19IV19QRVJGX0VWRU5UUykgICYjNDM7PSBwbXUtZW11bC5vIHBtdS5vXG4gIDMwOlx0a3ZtLSQoQ09ORklHX0FSTTY0X1BUUl9BVVRIKSAgJiM0Mzs9IHBhdXRoLm9cbiAgMzE6XHRrdm0tJChDT05GSUdfUFREVU1QX1NUQUdFMl9ERUJVR0ZTKSAmIzQzOz0gcHRkdW1wLm9cbiAgMzI6XHRcbiAgMzM6XHRrdm0tJChDT05GSUdfTlZIRV9FTDJfVFJBQ0lORykgJiM0Mzs9IGh5cF90cmFjZS5vXG4gIDM0Olx0XG4gIDM1Olx0YWx3YXlzLXkgOj0gaHlwX2NvbnN0YW50cy5oIGh5cC1jb25zdGFudHMuc1xuICAzNjpcdFxuICAzNzpcdGRlZmluZSBydWxlX2dlbl9oeXBfY29uc3RhbnRzXG4gIDM4Olx0XHQkKGNhbGwgZmlsZWNoayxvZmZzZXRzLF9fSFlQX0NPTlNUQU5UU19IX18pXG4gIDM5Olx0ZW5kZWZcbiAgNDA6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMDg6MjY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQ4ODQKCQkJCQkJCW91dHB1dDogNjQKCQkJCQkJCXRob3VnaHRzOiAxMTE1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5c2lzIG9mIFZHSUN2MyBSZWRpc3RyaWJ1dG9yIFJlZ2lzdHJhdGlvbiBpbiBBUk02NCBLVk0qKgoKT2theSwgc28gYHZnaWMvdmdpYy1tbWlvLXYzLm9gIGlzIGJlaW5nIGJ1aWx0IHdoZW4gYENPTkZJR19LVk1gIGlzIGVuYWJsZWQsIGFuZCB3ZSBrbm93IHRoYXQgS1ZNIGl0c2VsZiBvbiBhcm02NCByZXF1aXJlcyBgQ09ORklHX0tWTWAgYW5kIGBDT05GSUdfVklSVFVBTElaQVRJT05gLiBJIHNob3VsZCBkb3VibGUtY2hlY2sgdGhlIEtjb25maWcsIGp1c3QgdG8gYmUgdGhvcm91Z2guLi4geWVwLCBgbWVudWNvbmZpZyBWSVJUVUFMSVpBVElPTmAsIGZvbGxvd2VkIGJ5IGBtZW51Y29uZmlnIEtWTWAuIE5vdywgbGV0JiMzOTtzIGxvb2sgYXQgdGhlIGFjdHVhbCBjb2RlIGNoYW5nZXMuCgpFc3NlbnRpYWxseSwgdGhpcyBpcyBhIGZpeCBmb3Igc29tZSBlcnJvciBoYW5kbGluZyBhcm91bmQgcmVnaXN0ZXJpbmcgcmVkaXN0cmlidXRvciByZWdpb25zLiBQcmV2aW91c2x5LCBpbiBgdmdpY19yZWdpc3Rlcl9yZWRpc3RfaW9kZXYoKWAsIGlmIGBrdm1faW9fYnVzX3JlZ2lzdGVyX2RldmAgZmFpbGVkLCB0aGUgY29kZSBkaWRuJiMzOTt0IHVuZG8gdGhlIHJlZGlzdHJpYnV0b3IgYXNzaWdubWVudC4gSXQgaW5jcmVtZW50ZWQgYHJkcmVnLSZndDtmcmVlX2luZGV4YCBhbmQgc2V0IGB2Z2ljX2NwdS0mZ3Q7cmRyZWdgLCBidXQgZGlkbiYjMzk7dCBhY3R1YWxseSB1bnJlZ2lzdGVyIHRoZSBkZXZpY2UsIGxlYWRpbmcgdG8gcG90ZW50aWFsIGNvcnJ1cHRpb24uIE5vdywgaWYgdGhlIHJlZ2lzdHJhdGlvbiBmYWlscywgd2UgY2FsbCBgdmdpY191bmRvX3JlZGlzdF9hc3NpZ25tZW50KHZjcHUpYCB0byBjbGVhbiB0aGluZ3MgdXAuCgpUaGUgc2FtZSBwcm9ibGVtIGV4aXN0ZWQgaW4gYHZnaWNfcmVnaXN0ZXJfYWxsX3JlZGlzdF9pb2RldnMoKWAuIEl0IHVzZWQgdG8gaXRlcmF0ZSBhbmQgdW5yZWdpc3RlciBwcmV2aW91cyByZWRpc3RyaWJ1dG9yIGlvZGV2cywgYnV0IGRpZG4mIzM5O3QgaGF2ZSBhIHRhcmdldGVkIG1ldGhvZCB0byBkZWFsIHdpdGggYSBmYWlsaW5nIHJlZ2lzdHJhdGlvbjsgbm93IGl0IHBhc3NlcyBgcmRyZWdgIHRvIHRoZSByZWdpc3RyYXRpb24gZnVuY3Rpb24uIElmIGEgcmVnaXN0cmF0aW9uIGZhaWxzLCBpdCBub3cgaXRlcmF0ZXMgdGhyb3VnaCB0aGUgKnByZXZpb3VzbHkqIHByb2Nlc3NlZCB2Y3B1cyBhbmQgcm9sbHMgYmFjayBvbmx5IHRoZSByZWxldmFudCBpb2RldnMgYnkgY2FsbGluZyBgdmdpY19yb2xsYmFja19yZWRpc3RfaW9kZXYodmNwdSwgcmRyZWcpYC4gVGhpcyBmdW5jdGlvbiBpcyB2ZXJ5IHNwZWNpZmljOiBpdCBvbmx5IG9wZXJhdGVzIG9uIHRoZSBpb2RldnMgYXNzb2NpYXRlZCB3aXRoIHRoZSAqY3VycmVudCogcmVkaXN0cmlidXRvciByZWdpb24uIEl0IHRoZW4gdW5yZWdpc3RlcnMgdGhlIGlvZGV2IGFuZCBjbGVhcnMgdGhlIHZjcHUmIzM5O3MgcmVmZXJlbmNlcy4gQWxzbywgYHZnaWNfdjNfc2V0X3JlZGlzdF9iYXNlKClgIG5vdyBwYXNzZXMgdGhlIGByZHJlZ2AgdG8gYHZnaWNfcmVnaXN0ZXJfYWxsX3JlZGlzdF9pb2RldnMoKWAuCgpTbywgaXQgbG9va3MgbGlrZSBhIHByb3BlciBmaXggZm9yIGVycm9yIHVud2luZGluZyBhbmQgcm9sbGJhY2sgZHVyaW5nIHJlZGlzdHJpYnV0b3IgcmVnaXN0cmF0aW9uIGluIEFSTTY0IEtWTSYjMzk7cyBWR0lDdjMgaW1wbGVtZW50YXRpb24uIFdlJiMzOTtyZSBub3cgZW5zdXJpbmcgdGhhdCBpZiBhIGRldmljZSByZWdpc3RyYXRpb24gZmFpbHMgcGFydHdheSB0aHJvdWdoLCB3ZSBwcm9wZXJseSBjbGVhbiB1cCBhbnkgcGFydGlhbGx5LXJlZ2lzdGVyZWQgZGV2aWNlcywgYXZvaWRpbmcgc3RhdGUgY29ycnVwdGlvbi4KCk5vdywgaXMgdGhpcyBldmVuIGEgcmVhY2hhYmxlIGNvZGUgcGF0aD8gWWVzLCBLVk0gb24gQVJNNjQgaXMgZnV6emFibGUuIFdlIGNhbiB1c2UgdG9vbHMgbGlrZSBzeXprYWxsZXIgdG8gZnV6eiB0aGUgYC9kZXYva3ZtYCBpb2N0bHMsIGluY2x1ZGluZyBgS1ZNX1NFVF9ERVZJQ0VfQVRUUmAgZm9yIGBLVk1fREVWX0FSTV9WR0lDX0dSUF9BRERSYCBhbmQgYEtWTV9WR0lDX1YzX0FERFJfVFlQRV9SRURJU1RfUkVHSU9OYC4gVGhpcyBpcyBhIGNsYXNzaWMgdGFyZ2V0IGZvciBmdXp6aW5nLiBNZW1vcnkgc2FmZXR5LCBsb2NrIG9yZGVyaW5nLCBhbmQgc3RhdGUgY29ycnVwdGlvbiBkdXJpbmcgZXJyb3Igcm9sbGJhY2sgaW4gS1ZNIGFyZSBwcmltZSB0YXJnZXRzIGZvciB2dWxuZXJhYmlsaXRpZXMuCgpBbHJpZ2h0LCBsZXQmIzM5O3MgbG9vayBhdCB0aGUgbm9uLXN0YXRpYyBmdW5jdGlvbnMgZnJvbSBgYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLW1taW8tdjMuY2A6IGB2Z2ljX3YzX3NldF9yZWRpc3RfYmFzZWAsIGB2Z2ljX3JlZ2lzdGVyX3JlZGlzdF9pb2RldmAsIGFuZCBgdmdpY191bnJlZ2lzdGVyX3JlZGlzdF9pb2RldmAuIFdlIG5lZWQgdG8gZGV0ZXJtaW5lIGhvdyB0aGVzZSBmdW5jdGlvbnMgYXJlIGJlaW5nIHVzZWQgd2l0aGluIEtWTS4gV2Ugc2hvdWxkIHRyYWNlIHRoZWlyIGNhbGxzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAwODoyNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt2Z2ljX3YzX3NldF9yZWRpc3RfYmFzZXx2Z2ljX3JlZ2lzdGVyX3JlZGlzdF9pb2Rldnx2Z2ljX3VucmVnaXN0ZXJfcmVkaXN0X2lvZGV2JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC9hcm02NC9rdm0mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWluaXQuYz0zODE9aW50IGt2bV92Z2ljX3ZjcHVfaW5pdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4tLVxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWluaXQuYy00MDUtXHRcdG11dGV4X2xvY2soXHUwMDI2dmNwdS1cdTAwM2Vrdm0tXHUwMDNlc2xvdHNfbG9jayk7XG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtaW5pdC5jOjQwNjpcdFx0cmV0ID0gdmdpY19yZWdpc3Rlcl9yZWRpc3RfaW9kZXYodmNwdSk7XG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtaW5pdC5jLTQwNy1cdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNnZjcHUtXHUwMDNla3ZtLVx1MDAzZXNsb3RzX2xvY2spO1xuLS1cbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1pbml0LmM9NTEzPXN0YXRpYyB2b2lkIF9fa3ZtX3ZnaWNfdmNwdV9kZXN0cm95KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbi0tXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtaW5pdC5jLTU0NC1cdFx0aWYgKGt2bV9nZXRfdmNwdV9ieV9pZCh2Y3B1LVx1MDAzZWt2bSwgdmNwdS1cdTAwM2V2Y3B1X2lkKSAhPSB2Y3B1KVxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWluaXQuYzo1NDU6XHRcdFx0dmdpY191bnJlZ2lzdGVyX3JlZGlzdF9pb2Rldih2Y3B1KTtcbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1pbml0LmMtNTQ2LVxuLS1cbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1pbml0LmM9NTYwPXZvaWQga3ZtX3ZnaWNfZGVzdHJveShzdHJ1Y3Qga3ZtICprdm0pXG4tLVxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWluaXQuYy01NzgtXHRcdGt2bV9mb3JfZWFjaF92Y3B1KGksIHZjcHUsIGt2bSlcbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1pbml0LmM6NTc5Olx0XHRcdHZnaWNfdW5yZWdpc3Rlcl9yZWRpc3RfaW9kZXYodmNwdSk7XG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtaW5pdC5jLTU4MC1cbi0tXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMta3ZtLWRldmljZS5jPTkzPXN0YXRpYyBpbnQga3ZtX3ZnaWNfYWRkcihzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fZGV2aWNlX2F0dHIgKmF0dHIsIGJvb2wgd3JpdGUpXG4tLVxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWt2bS1kZXZpY2UuYy0xMzctXHRcdGlmICh3cml0ZSkge1xuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWt2bS1kZXZpY2UuYzoxMzg6XHRcdFx0ciA9IHZnaWNfdjNfc2V0X3JlZGlzdF9iYXNlKGt2bSwgMCwgYWRkciwgMCk7XG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMta3ZtLWRldmljZS5jLTEzOS1cdFx0XHRnb3RvIG91dDtcbi0tXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMta3ZtLWRldmljZS5jLTE2Ny1cdFx0XHRlbHNlXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMta3ZtLWRldmljZS5jOjE2ODpcdFx0XHRcdHIgPSB2Z2ljX3YzX3NldF9yZWRpc3RfYmFzZShrdm0sIGluZGV4LFxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWt2bS1kZXZpY2UuYy0xNjktXHRcdFx0XHRcdFx0XHQgICAgYmFzZSwgY291bnQpO1xuLS1cbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1tbWlvLXYzLmM9NzY5PXN0YXRpYyB2b2lkIHZnaWNfdW5kb19yZWRpc3RfYXNzaWdubWVudChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4tLVxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLW1taW8tdjMuYy03ODItLyoqXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtbW1pby12My5jOjc4MzogKiB2Z2ljX3JlZ2lzdGVyX3JlZGlzdF9pb2RldiAtIHJlZ2lzdGVyIGEgc2luZ2xlIHJlZGlzdCBpb2RldlxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLW1taW8tdjMuYy03ODQtICogQHZjcHU6ICAgIFRoZSBWQ1BVIHRvIHdoaWNoIHRoZSByZWRpc3RyaWJ1dG9yIGJlbG9uZ3Ncbi0tXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtbW1pby12My5jLTc5MC0gKi9cbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1tbWlvLXYzLmM6NzkxOmludCB2Z2ljX3JlZ2lzdGVyX3JlZGlzdF9pb2RldihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtbW1pby12My5jLTc5Mi17XG4tLVxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLW1taW8tdjMuYy04NTAtXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtbW1pby12My5jOjg1MTp2b2lkIHZnaWNfdW5yZWdpc3Rlcl9yZWRpc3RfaW9kZXYoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLW1taW8tdjMuYy04NTIte1xuLS1cbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1tbWlvLXYzLmM9ODU4PXN0YXRpYyB2b2lkIHZnaWNfcm9sbGJhY2tfcmVkaXN0X2lvZGV2KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbi0tXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtbW1pby12My5jLTg2Ny1cbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1tbWlvLXYzLmM6ODY4Olx0dmdpY191bnJlZ2lzdGVyX3JlZGlzdF9pb2Rldih2Y3B1KTtcbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1tbWlvLXYzLmMtODY5LVxuLS1cbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1tbWlvLXYzLmM9ODc1PXN0YXRpYyBpbnQgdmdpY19yZWdpc3Rlcl9hbGxfcmVkaXN0X2lvZGV2cyhzdHJ1Y3Qga3ZtICprdm0sXG4tLVxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLW1taW8tdjMuYy04ODQtXHRrdm1fZm9yX2VhY2hfdmNwdShjLCB2Y3B1LCBrdm0pIHtcbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1tbWlvLXYzLmM6ODg1Olx0XHRyZXQgPSB2Z2ljX3JlZ2lzdGVyX3JlZGlzdF9pb2Rldih2Y3B1KTtcbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1tbWlvLXYzLmMtODg2LVx0XHRpZiAocmV0KVxuLS1cbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1tbWlvLXYzLmM9OTg2PXZvaWQgdmdpY192M19mcmVlX3JlZGlzdF9yZWdpb24oc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3QgdmdpY19yZWRpc3RfcmVnaW9uICpyZHJlZylcbi0tXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtbW1pby12My5jLTEwMDItXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtbW1pby12My5jOjEwMDM6aW50IHZnaWNfdjNfc2V0X3JlZGlzdF9iYXNlKHN0cnVjdCBrdm0gKmt2bSwgdTMyIGluZGV4LCB1NjQgYWRkciwgdTMyIGNvdW50KVxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLW1taW8tdjMuYy0xMDA0LXtcbi0tXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMuaD0zNDk9aW50IHZnaWNfdjNfc2F2ZV9wZW5kaW5nX3RhYmxlcyhzdHJ1Y3Qga3ZtICprdm0pO1xuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLmg6MzUwOmludCB2Z2ljX3YzX3NldF9yZWRpc3RfYmFzZShzdHJ1Y3Qga3ZtICprdm0sIHUzMiBpbmRleCwgdTY0IGFkZHIsIHUzMiBjb3VudCk7XG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMuaDozNTE6aW50IHZnaWNfcmVnaXN0ZXJfcmVkaXN0X2lvZGV2KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMuaDozNTI6dm9pZCB2Z2ljX3VucmVnaXN0ZXJfcmVkaXN0X2lvZGV2KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMuaC0zNTMtYm9vbCB2Z2ljX3YzX2NoZWNrX2Jhc2Uoc3RydWN0IGt2bSAqa3ZtKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMDg6MjY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTg3MjgKCQkJCQkJCW91dHB1dDogMTYxCgkJCQkJCQl0aG91Z2h0czogMzcxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIEFSTTY0IEtWTSBDb25maWd1cmF0aW9uIGFuZCBQYXRjaCBMb2dpYyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgSSBuZWVkIHRvIHZlcmlmeSB0aGUgbmVjZXNzYXJ5IGNvbmZpZ3VyYXRpb25zIGZvciBlbmFibGluZyBLVk0gb24gYXJtNjQuIEkmIzM5O20gc3RhcnRpbmcgd2l0aCB0aGUgYGFyY2gvYXJtNjQva3ZtL0tjb25maWdgIGZpbGUuIEkgc2VlIGBtZW51Y29uZmlnIFZJUlRVQUxJWkFUSU9OYCBhbmQsIGRlcGVuZGVudCBvbiB0aGF0LCBgbWVudWNvbmZpZyBLVk1gLiBUaGUgZGVwZW5kZW5jeSBtYWtlcyBzZW5zZSwgb2YgY291cnNlLgoKTmV4dCwgSSYjMzk7bSBkb3VibGUtY2hlY2tpbmcgdGhvc2Ugc3ltYm9sczogYEtWTWAgYW5kIGBWSVJUVUFMSVpBVElPTmAuIFRoZXkmIzM5O3JlIGJvdGggZGVmaW5lZCBhcyBib29sZWFuIGNvbmZpZ3MsIHdoaWNoIGlzIHdoYXQgSSYjMzk7ZCBleHBlY3QuIE5vdyBJJiMzOTtsbCBxdWlja2x5IGNvbmZpcm0gdGhhdCBLVk0gZG9lc24mIzM5O3QgaGF2ZSBhbnkgc3BlY2lmaWMgYXJjaGl0ZWN0dXJhbCBkZXBlbmRlbmNpZXMgdGhhdCBJJiMzOTt2ZSBtaXNzZWQsIGFuZCB0aGF0IGBLVk1gIGFuZCBgVklSVFVBTElaQVRJT05gIGFyZSBpbmRlZWQgdGhlIGNvcmUgY29uZmlndXJhdGlvbiBzeW1ib2xzLiBUaGUgYEVuYWJsZUNvbmZpZ3NgIGxpc3QgY29uZmlybXMgbXkgdW5kZXJzdGFuZGluZy4KCkkmIzM5O20gbm93IHNoaWZ0aW5nIGZvY3VzIHRvIHRoZSBrZXkgZnVuY3Rpb24gc3ltYm9scyBpbXBhY3RlZCBieSB0aGUgY2hhbmdlcyBpbiB0aGlzIHBhdGNoLiBTcGVjaWZpY2FsbHksIEkgc2VlIHRocmVlIGNyaXRpY2FsIGVudHJ5IHBvaW50cyB0aGF0IHdpbGwgYmUgZGlyZWN0bHkgYWZmZWN0ZWQuIE5hbWVseTogYHZnaWNfdjNfc2V0X3JlZGlzdF9iYXNlYCwgYHZnaWNfcmVnaXN0ZXJfcmVkaXN0X2lvZGV2YCwgYW5kIGB2Z2ljX3VucmVnaXN0ZXJfcmVkaXN0X2lvZGV2YC4KClRoZSByZWFzb25pbmcgYmVoaW5kIHRoZSBwYXRjaCBpcyBmYWlybHkgY2xlYXIuIEl0JiMzOTtzIGFib3V0IGltcHJvdmVkIGVycm9yIGhhbmRsaW5nIGluIHRoZSBBUk02NCBLVk0gVkdJQ3YzIHJlZGlzdHJpYnV0b3IgbG9naWMsIHNwZWNpZmljYWxseSB3aGVuIGFzc2lnbmluZyByZWdpb25zIGFuZCByZWdpc3RlcmluZyBpb2RldnMuIFRoZSBwYXRjaCBhaW1zIHRvIGNvcnJlY3RseSByb2xsIGJhY2sgcmVkaXN0cmlidXRvciBhc3NpZ25tZW50cyB3aGVuIGVpdGhlciBhIHNpbmdsZSBpb2RldiByZWdpc3RyYXRpb24gb3IgdGhlIHJlZ2lzdHJhdGlvbiBvZiBhbGwgcmVkaXN0cmlidXRvciBpb2RldnMgZmFpbHMuIFRoZSBnb2FsIGlzIHRvIGF2b2lkIHN0YWxlIHN0YXRlcyBhbmQgcHJldmVudCBpbmNvcnJlY3QgYWNjb3VudGluZyBvZiBWQ1BVJiMzOTtzIGFzc2lnbmVkIHRvIHJlZ2lvbnMsIHdoaWNoIGlzIGEgY29tbW9uIHNvdXJjZSBvZiBpbnN0YWJpbGl0eS4gSXQmIzM5O3MgYWxsIGFib3V0IGVuc3VyaW5nIHRoYXQgd2Ugb25seSB1bmRvIGFzc2lnbm1lbnRzIGZvciB2Q1BVcyBhc3NvY2lhdGVkIHdpdGggdGhlIGZhaWxlZCByZWdpb24sIHdoaWNoIGlzIGEgZ29vZCwgc291bmQgYXBwcm9hY2guIFRoaXMgbWFrZXMgdGhlIEtWTSBWR0lDIGluaXRpYWxpemF0aW9uIGFuZCBkZXZpY2UgY29uZmlndXJhdGlvbiBwYXRocyByZWFjaGFibGUsIHdoaWNoIGhhcyBzb21lIG9idmlvdXMgaW1wbGljYXRpb25zIGZvciBmdXp6aW5nIGFuZCBvdmVyYWxsIHJvYnVzdG5lc3MuCgpUaGVyZWZvcmUsIEkmIzM5O2xsIGNhbGwgYHNldC1yZXN1bHRzYC4gSSBoYXZlIGEgZ29vZCBncmFzcCBvZiB0aGUgcGF0Y2gmIzM5O3MgaW1wYWN0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAwODoyNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7S1ZNJiMzNDssCiAgICAmIzM0O1ZJUlRVQUxJWkFUSU9OJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dmdpY192M19zZXRfcmVkaXN0X2Jhc2UmIzM0OywKICAgICYjMzQ7dmdpY19yZWdpc3Rlcl9yZWRpc3RfaW9kZXYmIzM0OywKICAgICYjMzQ7dmdpY191bnJlZ2lzdGVyX3JlZGlzdF9pb2RldiYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBlcnJvciB1bndpbmRpbmcgYW5kIHJvbGxiYWNrIGhhbmRsaW5nIHdoZW4gcmVnaXN0ZXJpbmcgVkdJQ3YzIHJlZGlzdHJpYnV0b3IgSS9PIGRldmljZXMgaW4gQVJNNjQgS1ZNLiBJdCBlbnN1cmVzIHRoYXQgZmFpbGVkIHJlZGlzdHJpYnV0b3IgcmVnaXN0cmF0aW9uIHByb3Blcmx5IHJvbGxzIGJhY2sgdGhlIGFzc2lnbmVkIHJlZ2lvbiBzdGF0ZSBhbmQgb25seSB0ZWFycyBkb3duIFZDUFVzIGFzc29jaWF0ZWQgd2l0aCB0aGUgZmFpbGluZyByZWdpb24uIFRoZXNlIGNvZGUgcGF0aHMgYXJlIHJlYWNoYWJsZSB2aWEgS1ZNIGlvY3RscyBhbmQgd29ydGggZnV6emluZyBmb3IgY29uY3VycmVuY3kgYW5kIHN0YXRlIG1hbmFnZW1lbnQgYnVncy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7S1ZNJiMzNDssCiAgICAmIzM0O1ZJUlRVQUxJWkFUSU9OJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dmdpY192M19zZXRfcmVkaXN0X2Jhc2UmIzM0OywKICAgICYjMzQ7dmdpY19yZWdpc3Rlcl9yZWRpc3RfaW9kZXYmIzM0OywKICAgICYjMzQ7dmdpY191bnJlZ2lzdGVyX3JlZGlzdF9pb2RldiYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBlcnJvciB1bndpbmRpbmcgYW5kIHJvbGxiYWNrIGhhbmRsaW5nIHdoZW4gcmVnaXN0ZXJpbmcgVkdJQ3YzIHJlZGlzdHJpYnV0b3IgSS9PIGRldmljZXMgaW4gQVJNNjQgS1ZNLiBJdCBlbnN1cmVzIHRoYXQgZmFpbGVkIHJlZGlzdHJpYnV0b3IgcmVnaXN0cmF0aW9uIHByb3Blcmx5IHJvbGxzIGJhY2sgdGhlIGFzc2lnbmVkIHJlZ2lvbiBzdGF0ZSBhbmQgb25seSB0ZWFycyBkb3duIFZDUFVzIGFzc29jaWF0ZWQgd2l0aCB0aGUgZmFpbGluZyByZWdpb24uIFRoZXNlIGNvZGUgcGF0aHMgYXJlIHJlYWNoYWJsZSB2aWEgS1ZNIGlvY3RscyBhbmQgd29ydGggZnV6emluZyBmb3IgY29uY3VycmVuY3kgYW5kIHN0YXRlIG1hbmFnZW1lbnQgYnVncy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMDg6MjY8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAwODoyNjwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGVycm9yIHJvbGxiYWNrIGhhbmRsaW5nIGR1cmluZyBLVk0gQVJNNjQgVkdJQ3YzIHJlZGlzdHJpYnV0b3IgaW9kZXYgcmVnaXN0cmF0aW9uIChoYW5kbGluZyBmYWlsZWQgcmVnaXN0cmF0aW9uIGNsZWFudXAsIHJlc2V0dGluZyB2Z2ljX2NwdSByZWRpc3RyaWJ1dG9yIHBvaW50ZXJzLCBhbmQgZGVjcmVtZW50aW5nIGZyZWVfaW5kZXggYXBwcm9wcmlhdGVseSkuIFRoZSBjaGFuZ2VzIGRvIG5vdCBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IGFueSBtZW1vcnkgYWxsb2NhdGlvbnMsIGRhdGEgc3RydWN0dXJlcyBjb3BpZWQgdG8gdXNlcnNwYWNlLCBvciB1bmluaXRpYWxpemVkIG1lbW9yeSBhY2Nlc3Nlcy4gQW55IHBvdGVudGlhbCBjb25jdXJyZW5jeSwgbG9jayBvcmRlcmluZywgb3IgaW52YWxpZCBkZXJlZmVyZW5jZSBpc3N1ZXMgYXJlIGNvdmVyZWQgYnkgc3RhbmRhcmQgc2FuaXRpemVycyAoTE9DS0RFUC9LQVNBTikuIFRoZXJlZm9yZSwgdGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBpbmZvcm1hdGlvbiBsZWFrcyB0aGF0IHdvdWxkIHJlcXVpcmUgYSBLTVNBTiBmdXp6aW5nIHNlc3Npb24uJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGFjOGZjN2E1NGNmMTcyMjI3NGM4MzQyY2YxZjA4NjJhMTQ1OTliNjgKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgTW9uIEF1ZyAzMSAwODoyNjoyMyAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1tbWlvLXYzLmMgYi9hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtbW1pby12My5jCmluZGV4IDU5MTNhMjBkODMwMTkuLjc3YWE4NDMzNzAxYTEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1tbWlvLXYzLmMKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLW1taW8tdjMuYwpAQCAtNzY2LDYgJiM0Mzs3NjYsMTkgQEAgdW5zaWduZWQgaW50IHZnaWNfdjNfaW5pdF9kaXN0X2lvZGV2KHN0cnVjdCB2Z2ljX2lvX2RldmljZSAqZGV2KQogCXJldHVybiBTWl82NEs7CiB9CiAKJiM0MztzdGF0aWMgdm9pZCB2Z2ljX3VuZG9fcmVkaXN0X2Fzc2lnbm1lbnQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQomIzQzO3sKJiM0MzsJc3RydWN0IHZnaWNfY3B1ICp2Z2ljX2NwdSA9ICZhbXA7dmNwdS0mZ3Q7YXJjaC52Z2ljX2NwdTsKJiM0MzsKJiM0MzsJbG9ja2RlcF9hc3NlcnRfaGVsZCgmYW1wO3ZjcHUtJmd0O2t2bS0mZ3Q7c2xvdHNfbG9jayk7CiYjNDM7CiYjNDM7CWd1YXJkKG11dGV4KSgmYW1wO3ZjcHUtJmd0O2t2bS0mZ3Q7YXJjaC5jb25maWdfbG9jayk7CiYjNDM7CiYjNDM7CXZnaWNfY3B1LSZndDtyZHJlZy0mZ3Q7ZnJlZV9pbmRleC0tOwomIzQzOwl2Z2ljX2NwdS0mZ3Q7cmRyZWcgPSBOVUxMOwomIzQzOwl2Z2ljX2NwdS0mZ3Q7cmRfaW9kZXYuYmFzZV9hZGRyID0gVkdJQ19BRERSX1VOREVGOwomIzQzO30KJiM0MzsKIC8qKgogICogdmdpY19yZWdpc3Rlcl9yZWRpc3RfaW9kZXYgLSByZWdpc3RlciBhIHNpbmdsZSByZWRpc3QgaW9kZXYKICAqIEB2Y3B1OiAgICBUaGUgVkNQVSB0byB3aGljaCB0aGUgcmVkaXN0cmlidXRvciBiZWxvbmdzCkBAIC04MTgsMTYgJiM0Mzs4MzEsMTcgQEAgaW50IHZnaWNfcmVnaXN0ZXJfcmVkaXN0X2lvZGV2KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIAlyZF9kZXYtJmd0O25yX3JlZ2lvbnMgPSBBUlJBWV9TSVpFKHZnaWNfdjNfcmRfcmVnaXN0ZXJzKTsKIAlyZF9kZXYtJmd0O3JlZGlzdF92Y3B1ID0gdmNwdTsKIAomIzQzOwkvKiBQcm90ZWN0ZWQgYnkgc2xvdHNfbG9jayAqLwomIzQzOwlyZHJlZy0mZ3Q7ZnJlZV9pbmRleCYjNDM7JiM0Mzs7CiYjNDM7CiAJbXV0ZXhfdW5sb2NrKCZhbXA7a3ZtLSZndDthcmNoLmNvbmZpZ19sb2NrKTsKIAogCXJldCA9IGt2bV9pb19idXNfcmVnaXN0ZXJfZGV2KGt2bSwgS1ZNX01NSU9fQlVTLCByZF9iYXNlLAogCQkJCSAgICAgIDIgKiBTWl82NEssICZhbXA7cmRfZGV2LSZndDtkZXYpOwogCWlmIChyZXQpCi0JCXJldHVybiByZXQ7CiYjNDM7CQl2Z2ljX3VuZG9fcmVkaXN0X2Fzc2lnbm1lbnQodmNwdSk7CiAKLQkvKiBQcm90ZWN0ZWQgYnkgc2xvdHNfbG9jayAqLwotCXJkcmVnLSZndDtmcmVlX2luZGV4JiM0MzsmIzQzOzsKLQlyZXR1cm4gMDsKJiM0MzsJcmV0dXJuIHJldDsKIAogb3V0X3VubG9jazoKIAltdXRleF91bmxvY2soJmFtcDtrdm0tJmd0O2FyY2guY29uZmlnX2xvY2spOwpAQCAtODQxLDcgJiM0Mzs4NTUsMjUgQEAgdm9pZCB2Z2ljX3VucmVnaXN0ZXJfcmVkaXN0X2lvZGV2KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIAlrdm1faW9fYnVzX3VucmVnaXN0ZXJfZGV2KHZjcHUtJmd0O2t2bSwgS1ZNX01NSU9fQlVTLCAmYW1wO3JkX2Rldi0mZ3Q7ZGV2KTsKIH0KIAotc3RhdGljIGludCB2Z2ljX3JlZ2lzdGVyX2FsbF9yZWRpc3RfaW9kZXZzKHN0cnVjdCBrdm0gKmt2bSkKJiM0MztzdGF0aWMgdm9pZCB2Z2ljX3JvbGxiYWNrX3JlZGlzdF9pb2RldihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsCiYjNDM7CQkJCSAgICAgICBzdHJ1Y3QgdmdpY19yZWRpc3RfcmVnaW9uICpyZHJlZykKJiM0Mzt7CiYjNDM7CXN0cnVjdCB2Z2ljX2NwdSAqdmdpY19jcHUgPSAmYW1wO3ZjcHUtJmd0O2FyY2gudmdpY19jcHU7CiYjNDM7CiYjNDM7CWxvY2tkZXBfYXNzZXJ0X2hlbGQoJmFtcDt2Y3B1LSZndDtrdm0tJmd0O3Nsb3RzX2xvY2spOwomIzQzOwomIzQzOwlpZiAodmdpY19jcHUtJmd0O3JkcmVnICE9IHJkcmVnKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwl2Z2ljX3VucmVnaXN0ZXJfcmVkaXN0X2lvZGV2KHZjcHUpOwomIzQzOwomIzQzOwlndWFyZChtdXRleCkoJmFtcDt2Y3B1LSZndDtrdm0tJmd0O2FyY2guY29uZmlnX2xvY2spOwomIzQzOwl2Z2ljX2NwdS0mZ3Q7cmRyZWcgPSBOVUxMOwomIzQzOwl2Z2ljX2NwdS0mZ3Q7cmRfaW9kZXYuYmFzZV9hZGRyID0gVkdJQ19BRERSX1VOREVGOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IHZnaWNfcmVnaXN0ZXJfYWxsX3JlZGlzdF9pb2RldnMoc3RydWN0IGt2bSAqa3ZtLAomIzQzOwkJCQkJICAgc3RydWN0IHZnaWNfcmVkaXN0X3JlZ2lvbiAqcmRyZWcpCiB7CiAJc3RydWN0IGt2bV92Y3B1ICp2Y3B1OwogCXVuc2lnbmVkIGxvbmcgYzsKQEAgLTg1NiwxMiAmIzQzOzg4OCwxMiBAQCBzdGF0aWMgaW50IHZnaWNfcmVnaXN0ZXJfYWxsX3JlZGlzdF9pb2RldnMoc3RydWN0IGt2bSAqa3ZtKQogCX0KIAogCWlmIChyZXQpIHsKLQkJLyogVGhlIGN1cnJlbnQgYyBmYWlsZWQsIHNvIGl0ZXJhdGUgb3ZlciB0aGUgcHJldmlvdXMgb25lcy4gKi8KJiM0MzsJCS8qIFVuZG8gYXNzaWdubWVudHMgbWFkZSBmcm9tIHRoZSByZWdpb24gYmVpbmcgYWRkZWQuICovCiAJCWludCBpOwogCiAJCWZvciAoaSA9IDA7IGkgJmx0OyBjOyBpJiM0MzsmIzQzOykgewogCQkJdmNwdSA9IGt2bV9nZXRfdmNwdShrdm0sIGkpOwotCQkJdmdpY191bnJlZ2lzdGVyX3JlZGlzdF9pb2Rldih2Y3B1KTsKJiM0MzsJCQl2Z2ljX3JvbGxiYWNrX3JlZGlzdF9pb2Rldih2Y3B1LCByZHJlZyk7CiAJCX0KIAl9CiAKQEAgLTk3MCwxMCAmIzQzOzEwMDIsMTMgQEAgdm9pZCB2Z2ljX3YzX2ZyZWVfcmVkaXN0X3JlZ2lvbihzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCB2Z2ljX3JlZGlzdF9yZWdpb24gKnJkcmUKIAogaW50IHZnaWNfdjNfc2V0X3JlZGlzdF9iYXNlKHN0cnVjdCBrdm0gKmt2bSwgdTMyIGluZGV4LCB1NjQgYWRkciwgdTMyIGNvdW50KQogewomIzQzOwlzdHJ1Y3QgdmdpY19yZWRpc3RfcmVnaW9uICpyZHJlZzsKIAlpbnQgcmV0OwogCiAJbXV0ZXhfbG9jaygmYW1wO2t2bS0mZ3Q7YXJjaC5jb25maWdfbG9jayk7CiAJcmV0ID0gdmdpY192M19hbGxvY19yZWRpc3RfcmVnaW9uKGt2bSwgaW5kZXgsIGFkZHIsIGNvdW50KTsKJiM0MzsJaWYgKCFyZXQpCiYjNDM7CQlyZHJlZyA9IHZnaWNfdjNfcmRpc3RfcmVnaW9uX2Zyb21faW5kZXgoa3ZtLCBpbmRleCk7CiAJbXV0ZXhfdW5sb2NrKCZhbXA7a3ZtLSZndDthcmNoLmNvbmZpZ19sb2NrKTsKIAlpZiAocmV0KQogCQlyZXR1cm4gcmV0OwpAQCAtOTgyLDEyICYjNDM7MTAxNyw5IEBAIGludCB2Z2ljX3YzX3NldF9yZWRpc3RfYmFzZShzdHJ1Y3Qga3ZtICprdm0sIHUzMiBpbmRleCwgdTY0IGFkZHIsIHUzMiBjb3VudCkKIAkgKiBSZWdpc3RlciBpb2RldnMgZm9yIGVhY2ggZXhpc3RpbmcgVkNQVS4gIEFkZGluZyBtb3JlIFZDUFVzCiAJICogYWZ0ZXJ3YXJkcyB3aWxsIHJlZ2lzdGVyIHRoZSBpb2RldnMgd2hlbiBuZWVkZWQuCiAJICovCi0JcmV0ID0gdmdpY19yZWdpc3Rlcl9hbGxfcmVkaXN0X2lvZGV2cyhrdm0pOwomIzQzOwlyZXQgPSB2Z2ljX3JlZ2lzdGVyX2FsbF9yZWRpc3RfaW9kZXZzKGt2bSwgcmRyZWcpOwogCWlmIChyZXQpIHsKLQkJc3RydWN0IHZnaWNfcmVkaXN0X3JlZ2lvbiAqcmRyZWc7Ci0KIAkJbXV0ZXhfbG9jaygmYW1wO2t2bS0mZ3Q7YXJjaC5jb25maWdfbG9jayk7Ci0JCXJkcmVnID0gdmdpY192M19yZGlzdF9yZWdpb25fZnJvbV9pbmRleChrdm0sIGluZGV4KTsKIAkJdmdpY192M19mcmVlX3JlZGlzdF9yZWdpb24oa3ZtLCByZHJlZyk7CiAJCW11dGV4X3VubG9jaygmYW1wO2t2bS0mZ3Q7YXJjaC5jb25maWdfbG9jayk7CiAJCXJldHVybiByZXQ7CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vYXJtNjQvdmdpY19pbml0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vYXJtNjQvdmdpY19pbml0LmMKaW5kZXggNDdlMzRiNDNhZmIyOS4uNWEzMGYzY2IwMzliZSAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2FybTY0L3ZnaWNfaW5pdC5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9hcm02NC92Z2ljX2luaXQuYwpAQCAtNSw2ICYjNDM7NSw3IEBACiAgKiBDb3B5cmlnaHQgKEMpIDIwMjAsIFJlZCBIYXQsIEluYy4KICAqLwogI2luY2x1ZGUgJmx0O2xpbnV4L2tlcm5lbC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9zaXplcy5oJmd0OwogI2luY2x1ZGUgJmx0O3N5cy9zeXNjYWxsLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7YXNtL2t2bS5oJmd0OwogI2luY2x1ZGUgJmx0O2FzbS9rdm1fcGFyYS5oJmd0OwpAQCAtMTMsMTIgJiM0MzsxNCwyMSBAQAogCiAjaW5jbHVkZSAmIzM0O3Rlc3RfdXRpbC5oJiMzNDsKICNpbmNsdWRlICYjMzQ7a3ZtX3V0aWwuaCYjMzQ7CiYjNDM7I2luY2x1ZGUgJiMzNDtnaWMuaCYjMzQ7CiAjaW5jbHVkZSAmIzM0O3Byb2Nlc3Nvci5oJiMzNDsKICNpbmNsdWRlICYjMzQ7dmdpYy5oJiMzNDsKICNpbmNsdWRlICYjMzQ7Z2ljX3YzLmgmIzM0OwogCiAjZGVmaW5lIE5SX1ZDUFVTCQk0CiAKJiM0MzsjZGVmaW5lIFJFRElTVF9SRVRSWV9SRUdJT04wX0JBU0UJR0lDUl9CQVNFX0dQQQomIzQzOyNkZWZpbmUgUkVESVNUX1JFVFJZX1JFR0lPTjFfQkFTRQlcCiYjNDM7CShSRURJU1RfUkVUUllfUkVHSU9OMF9CQVNFICYjNDM7IDIgKiBLVk1fVkdJQ19WM19SRURJU1RfU0laRSkKJiM0MzsjZGVmaW5lIFJFRElTVF9SRVRSWV9ESVNUX0JBU0UJCVwKJiM0MzsJKFJFRElTVF9SRVRSWV9SRUdJT04xX0JBU0UgJiM0MzsgS1ZNX1ZHSUNfVjNfUkVESVNUX1NJWkUpCiYjNDM7I2RlZmluZSBSRURJU1RfUkVUUllfUkVHSU9OMl9CQVNFCVwKJiM0MzsJKFJFRElTVF9SRVRSWV9ESVNUX0JBU0UgJiM0MzsgS1ZNX1ZHSUNfVjNfRElTVF9TSVpFKQomIzQzOwogI2RlZmluZSBSRUdfT0ZGU0VUKHZjcHUsIG9mZnNldCkgKCgodTY0KXZjcHUgJmx0OyZsdDsgMzIpIHwgb2Zmc2V0KQogCiAjZGVmaW5lIFZHSUNfREVWX0lTX1YyKF9kKSAoKF9kKSA9PSBLVk1fREVWX1RZUEVfQVJNX1ZHSUNfVjIpCkBAIC02NSw2ICYjNDM7NzUsMjMgQEAgc3RhdGljIHZvaWQgZ3Vlc3RfY29kZSh2b2lkKQogCUdVRVNUX0RPTkUoKTsKIH0KIAomIzQzO3N0YXRpYyB2b2lkIGd1ZXN0X2NoZWNrX3JlZGlzdF9yZXRyeSh2b2lkKQomIzQzO3sKJiM0MzsJdW5zaWduZWQgaW50IGk7CiYjNDM7CiYjNDM7CS8qIFRoZSBmaXJzdCB0aHJlZSByZWRpc3RyaWJ1dG9ycyBzcGFuIGFkamFjZW50IHJlZ2lvbnMgMCBhbmQgMS4gKi8KJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IE5SX1ZDUFVTOyBpJiM0MzsmIzQzOykgewomIzQzOwkJdTY0IGJhc2UgPSBpICZsdDsgMyA/IFJFRElTVF9SRVRSWV9SRUdJT04wX0JBU0UgJiM0MzsKJiM0MzsJCQkJICAgICAgIGkgKiBLVk1fVkdJQ19WM19SRURJU1RfU0laRSA6CiYjNDM7CQkJCSAgICAgICBSRURJU1RfUkVUUllfUkVHSU9OMl9CQVNFOwomIzQzOwkJdTY0IHR5cGVyID0gcmVhZHEoKHZvaWQgKikodW5zaWduZWQgbG9uZykoYmFzZSAmIzQzOyBHSUNSX1RZUEVSKSk7CiYjNDM7CiYjNDM7CQlHVUVTVF9BU1NFUlRfRVEoR0lDUl9UWVBFUl9DUFVfTlVNQkVSKHR5cGVyKSwgaSk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJR1VFU1RfRE9ORSgpOwomIzQzO30KJiM0MzsKIC8qIHdlIGRvbiYjMzk7dCB3YW50IHRvIGFzc2VydCBvbiBydW4gZXhlY3V0aW9uLCBoZW5jZSB0aGF0IGhlbHBlciAqLwogc3RhdGljIGludCBydW5fdmNwdShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiB7CkBAIC03Myw2ICYjNDM7MTAwLDcgQEAgc3RhdGljIGludCBydW5fdmNwdShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiAKIHN0YXRpYyBzdHJ1Y3Qgdm1fZ2ljIHZtX2dpY19jcmVhdGVfd2l0aF92Y3B1cyh1MzIgZ2ljX2Rldl90eXBlLAogCQkJCQkgICAgICB1MzIgbnJfdmNwdXMsCiYjNDM7CQkJCQkgICAgICB2b2lkICpndWVzdF9jb2RlLAogCQkJCQkgICAgICBzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHVzW10pCiB7CiAJc3RydWN0IHZtX2dpYyB2OwpAQCAtMzM4LDcgJiM0MzszNjYsNyBAQCBzdGF0aWMgdm9pZCB0ZXN0X3ZnaWNfdGhlbl92Y3B1cyh1MzIgZ2ljX2Rldl90eXBlKQogCXN0cnVjdCB2bV9naWMgdjsKIAlpbnQgcmV0LCBpOwogCi0JdiA9IHZtX2dpY19jcmVhdGVfd2l0aF92Y3B1cyhnaWNfZGV2X3R5cGUsIDEsIHZjcHVzKTsKJiM0MzsJdiA9IHZtX2dpY19jcmVhdGVfd2l0aF92Y3B1cyhnaWNfZGV2X3R5cGUsIDEsIGd1ZXN0X2NvZGUsIHZjcHVzKTsKIAogCXN1YnRlc3RfZGlzdF9yZGlzdCgmYW1wO3YpOwogCkBAIC0zNTksNyAmIzQzOzM4Nyw4IEBAIHN0YXRpYyB2b2lkIHRlc3RfdmNwdXNfdGhlbl92Z2ljKHUzMiBnaWNfZGV2X3R5cGUpCiAJc3RydWN0IHZtX2dpYyB2OwogCWludCByZXQ7CiAKLQl2ID0gdm1fZ2ljX2NyZWF0ZV93aXRoX3ZjcHVzKGdpY19kZXZfdHlwZSwgTlJfVkNQVVMsIHZjcHVzKTsKJiM0MzsJdiA9IHZtX2dpY19jcmVhdGVfd2l0aF92Y3B1cyhnaWNfZGV2X3R5cGUsIE5SX1ZDUFVTLCBndWVzdF9jb2RlLAomIzQzOwkJCQkgICAgIHZjcHVzKTsKIAogCXN1YnRlc3RfZGlzdF9yZGlzdCgmYW1wO3YpOwogCkBAIC00MTEsNyAmIzQzOzQ0MCw4IEBAIHN0YXRpYyB2b2lkIHRlc3RfdjNfbmV3X3JlZGlzdF9yZWdpb25zKHZvaWQpCiAJdTY0IGFkZHI7CiAJaW50IHJldDsKIAotCXYgPSB2bV9naWNfY3JlYXRlX3dpdGhfdmNwdXMoS1ZNX0RFVl9UWVBFX0FSTV9WR0lDX1YzLCBOUl9WQ1BVUywgdmNwdXMpOwomIzQzOwl2ID0gdm1fZ2ljX2NyZWF0ZV93aXRoX3ZjcHVzKEtWTV9ERVZfVFlQRV9BUk1fVkdJQ19WMywgTlJfVkNQVVMsCiYjNDM7CQkJCSAgICAgZ3Vlc3RfY29kZSwgdmNwdXMpOwogCXN1YnRlc3RfdjNfcmVkaXN0X3JlZ2lvbnMoJmFtcDt2KTsKIAlrdm1fZGV2aWNlX2F0dHJfc2V0KHYuZ2ljX2ZkLCBLVk1fREVWX0FSTV9WR0lDX0dSUF9DVFJMLAogCQkJICAgIEtWTV9ERVZfQVJNX1ZHSUNfQ1RSTF9JTklULCBOVUxMKTsKQEAgLTQyMiw3ICYjNDM7NDUyLDggQEAgc3RhdGljIHZvaWQgdGVzdF92M19uZXdfcmVkaXN0X3JlZ2lvbnModm9pZCkKIAogCS8qIHN0ZXAyICovCiAKLQl2ID0gdm1fZ2ljX2NyZWF0ZV93aXRoX3ZjcHVzKEtWTV9ERVZfVFlQRV9BUk1fVkdJQ19WMywgTlJfVkNQVVMsIHZjcHVzKTsKJiM0MzsJdiA9IHZtX2dpY19jcmVhdGVfd2l0aF92Y3B1cyhLVk1fREVWX1RZUEVfQVJNX1ZHSUNfVjMsIE5SX1ZDUFVTLAomIzQzOwkJCQkgICAgIGd1ZXN0X2NvZGUsIHZjcHVzKTsKIAlzdWJ0ZXN0X3YzX3JlZGlzdF9yZWdpb25zKCZhbXA7dik7CiAKIAlhZGRyID0gUkVESVNUX1JFR0lPTl9BVFRSX0FERFIoMSwgMHgyODAwMDAsIDAsIDIpOwpAQCAtNDM2LDcgJiM0Mzs0NjcsOCBAQCBzdGF0aWMgdm9pZCB0ZXN0X3YzX25ld19yZWRpc3RfcmVnaW9ucyh2b2lkKQogCiAJLyogc3RlcCAzICovCiAKLQl2ID0gdm1fZ2ljX2NyZWF0ZV93aXRoX3ZjcHVzKEtWTV9ERVZfVFlQRV9BUk1fVkdJQ19WMywgTlJfVkNQVVMsIHZjcHVzKTsKJiM0MzsJdiA9IHZtX2dpY19jcmVhdGVfd2l0aF92Y3B1cyhLVk1fREVWX1RZUEVfQVJNX1ZHSUNfVjMsIE5SX1ZDUFVTLAomIzQzOwkJCQkgICAgIGd1ZXN0X2NvZGUsIHZjcHVzKTsKIAlzdWJ0ZXN0X3YzX3JlZGlzdF9yZWdpb25zKCZhbXA7dik7CiAKIAlyZXQgPSBfX2t2bV9kZXZpY2VfYXR0cl9zZXQodi5naWNfZmQsIEtWTV9ERVZfQVJNX1ZHSUNfR1JQX0FERFIsCkBAIC00NTcsNiAmIzQzOzQ4OSw3MCBAQCBzdGF0aWMgdm9pZCB0ZXN0X3YzX25ld19yZWRpc3RfcmVnaW9ucyh2b2lkKQogCXZtX2dpY19kZXN0cm95KCZhbXA7dik7CiB9CiAKJiM0MztzdGF0aWMgdm9pZCB0ZXN0X3YzX3JlZGlzdF9yZWdpb25fcmV0cnkodm9pZCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBrdm1fdmNwdSAqdmNwdXNbTlJfVkNQVVNdOwomIzQzOwlzdHJ1Y3Qgdm1fZ2ljIHY7CiYjNDM7CXN0cnVjdCB1Y2FsbCB1YzsKJiM0MzsJdTY0IGFkZHI7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CXYgPSB2bV9naWNfY3JlYXRlX3dpdGhfdmNwdXMoS1ZNX0RFVl9UWVBFX0FSTV9WR0lDX1YzLCBOUl9WQ1BVUywKJiM0MzsJCQkJICAgICBndWVzdF9jaGVja19yZWRpc3RfcmV0cnksIHZjcHVzKTsKJiM0MzsKJiM0MzsJYWRkciA9IFJFRElTVF9SRUdJT05fQVRUUl9BRERSKDIsIFJFRElTVF9SRVRSWV9SRUdJT04wX0JBU0UsIDAsIDApOwomIzQzOwlrdm1fZGV2aWNlX2F0dHJfc2V0KHYuZ2ljX2ZkLCBLVk1fREVWX0FSTV9WR0lDX0dSUF9BRERSLAomIzQzOwkJCSAgICBLVk1fVkdJQ19WM19BRERSX1RZUEVfUkVESVNUX1JFR0lPTiwgJmFtcDthZGRyKTsKJiM0MzsKJiM0MzsJYWRkciA9IFJFRElTVF9SRUdJT05fQVRUUl9BRERSKDEsIFJFRElTVF9SRVRSWV9SRUdJT04xX0JBU0UsIDAsIDEpOwomIzQzOwlrdm1fZGV2aWNlX2F0dHJfc2V0KHYuZ2ljX2ZkLCBLVk1fREVWX0FSTV9WR0lDX0dSUF9BRERSLAomIzQzOwkJCSAgICBLVk1fVkdJQ19WM19BRERSX1RZUEVfUkVESVNUX1JFR0lPTiwgJmFtcDthZGRyKTsKJiM0MzsKJiM0MzsJYWRkciA9IFJFRElTVF9SRVRSWV9ESVNUX0JBU0U7CiYjNDM7CWt2bV9kZXZpY2VfYXR0cl9zZXQodi5naWNfZmQsIEtWTV9ERVZfQVJNX1ZHSUNfR1JQX0FERFIsCiYjNDM7CQkJICAgIEtWTV9WR0lDX1YzX0FERFJfVFlQRV9ESVNULCAmYW1wO2FkZHIpOwomIzQzOwomIzQzOwlhZGRyID0gUkVESVNUX1JFR0lPTl9BVFRSX0FERFIoMSwgUkVESVNUX1JFVFJZX0RJU1RfQkFTRSwgMCwgMik7CiYjNDM7CXJldCA9IF9fa3ZtX2RldmljZV9hdHRyX3NldCh2LmdpY19mZCwgS1ZNX0RFVl9BUk1fVkdJQ19HUlBfQUREUiwKJiM0MzsJCQkJICAgIEtWTV9WR0lDX1YzX0FERFJfVFlQRV9SRURJU1RfUkVHSU9OLAomIzQzOwkJCQkgICAgJmFtcDthZGRyKTsKJiM0MzsJVEVTVF9BU1NFUlQocmV0ICZhbXA7JmFtcDsgZXJybm8gPT0gRUlOVkFMLAomIzQzOwkJICAgICYjMzQ7cmVnaXN0ZXIgcmVkaXN0IHJlZ2lvbiBjb2xsaWRpbmcgd2l0aCBkaXN0JiMzNDspOwomIzQzOwomIzQzOwlhZGRyID0gUkVESVNUX1JFR0lPTl9BVFRSX0FERFIoMSwgUkVESVNUX1JFVFJZX1JFR0lPTjJfQkFTRSwgMCwgMik7CiYjNDM7CWt2bV9kZXZpY2VfYXR0cl9zZXQodi5naWNfZmQsIEtWTV9ERVZfQVJNX1ZHSUNfR1JQX0FERFIsCiYjNDM7CQkJICAgIEtWTV9WR0lDX1YzX0FERFJfVFlQRV9SRURJU1RfUkVHSU9OLCAmYW1wO2FkZHIpOwomIzQzOwomIzQzOwl2aXJ0X21hcCh2LnZtLCBSRURJU1RfUkVUUllfUkVHSU9OMF9CQVNFLCBSRURJU1RfUkVUUllfUkVHSU9OMF9CQVNFLAomIzQzOwkJIHZtX2NhbGNfbnVtX2d1ZXN0X3BhZ2VzKHYudm0tJmd0O21vZGUsCiYjNDM7CQkJCQkgMyAqIEtWTV9WR0lDX1YzX1JFRElTVF9TSVpFKSk7CiYjNDM7CXZpcnRfbWFwKHYudm0sIFJFRElTVF9SRVRSWV9SRUdJT04yX0JBU0UsIFJFRElTVF9SRVRSWV9SRUdJT04yX0JBU0UsCiYjNDM7CQkgdm1fY2FsY19udW1fZ3Vlc3RfcGFnZXModi52bS0mZ3Q7bW9kZSwKJiM0MzsJCQkJCSBLVk1fVkdJQ19WM19SRURJU1RfU0laRSkpOwomIzQzOwomIzQzOwlrdm1fZGV2aWNlX2F0dHJfc2V0KHYuZ2ljX2ZkLCBLVk1fREVWX0FSTV9WR0lDX0dSUF9DVFJMLAomIzQzOwkJCSAgICBLVk1fREVWX0FSTV9WR0lDX0NUUkxfSU5JVCwgTlVMTCk7CiYjNDM7CiYjNDM7CXZjcHVfcnVuKHZjcHVzWzBdKTsKJiM0MzsJc3dpdGNoIChnZXRfdWNhbGwodmNwdXNbMF0sICZhbXA7dWMpKSB7CiYjNDM7CWNhc2UgVUNBTExfRE9ORToKJiM0MzsJCWJyZWFrOwomIzQzOwljYXNlIFVDQUxMX0FCT1JUOgomIzQzOwkJUkVQT1JUX0dVRVNUX0FTU0VSVCh1Yyk7CiYjNDM7CQlicmVhazsKJiM0MzsJY2FzZSBVQ0FMTF9OT05FOgomIzQzOwkJaWYgKHZjcHVzWzBdLSZndDtydW4tJmd0O2V4aXRfcmVhc29uID09IEtWTV9FWElUX01NSU8pCiYjNDM7CQkJVEVTVF9GQUlMKCYjMzQ7VW5leHBlY3RlZCBNTUlPIGV4aXQgYXQgMHglbGx4JiMzNDssCiYjNDM7CQkJCSAgdmNwdXNbMF0tJmd0O3J1bi0mZ3Q7bW1pby5waHlzX2FkZHIpOwomIzQzOwkJZmFsbHRocm91Z2g7CiYjNDM7CWRlZmF1bHQ6CiYjNDM7CQlURVNUX0ZBSUwoJiMzNDtVbmV4cGVjdGVkIHVjYWxsICVsdSwgZXhpdF9yZWFzb24gJXUmIzM0OywKJiM0MzsJCQkgIHVjLmNtZCwgdmNwdXNbMF0tJmd0O3J1bi0mZ3Q7ZXhpdF9yZWFzb24pOwomIzQzOwl9CiYjNDM7CiYjNDM7CXZtX2dpY19kZXN0cm95KCZhbXA7dik7CiYjNDM7fQomIzQzOwogc3RhdGljIHZvaWQgdGVzdF92M190eXBlcl9hY2Nlc3Nlcyh2b2lkKQogewogCXN0cnVjdCB2bV9naWMgdjsKQEAgLTYwOCw3ICYjNDM7NzA0LDggQEAgc3RhdGljIHZvaWQgdGVzdF92M19yZWRpc3RfaXBhX3JhbmdlX2NoZWNrX2F0X3ZjcHVfcnVuKHZvaWQpCiAJaW50IHJldCwgaTsKIAl1NjQgYWRkcjsKIAotCXYgPSB2bV9naWNfY3JlYXRlX3dpdGhfdmNwdXMoS1ZNX0RFVl9UWVBFX0FSTV9WR0lDX1YzLCAxLCB2Y3B1cyk7CiYjNDM7CXYgPSB2bV9naWNfY3JlYXRlX3dpdGhfdmNwdXMoS1ZNX0RFVl9UWVBFX0FSTV9WR0lDX1YzLCAxLCBndWVzdF9jb2RlLAomIzQzOwkJCQkgICAgIHZjcHVzKTsKIAogCS8qIFNldCBzcGFjZSBmb3IgMyByZWRpc3RzLCB3ZSBoYXZlIDEgdmNwdSwgc28gdGhpcyBzdWNjZWVkcy4gKi8KIAlhZGRyID0gbWF4X3BoeXNfc2l6ZSAtICgzICogMiAqIDB4MTAwMDApOwpAQCAtNjQxLDcgJiM0Mzs3MzgsOCBAQCBzdGF0aWMgdm9pZCB0ZXN0X3YzX2l0c19yZWdpb24odm9pZCkKIAl1NjQgYWRkcjsKIAlpbnQgaXRzX2ZkLCByZXQ7CiAKLQl2ID0gdm1fZ2ljX2NyZWF0ZV93aXRoX3ZjcHVzKEtWTV9ERVZfVFlQRV9BUk1fVkdJQ19WMywgTlJfVkNQVVMsIHZjcHVzKTsKJiM0MzsJdiA9IHZtX2dpY19jcmVhdGVfd2l0aF92Y3B1cyhLVk1fREVWX1RZUEVfQVJNX1ZHSUNfVjMsIE5SX1ZDUFVTLAomIzQzOwkJCQkgICAgIGd1ZXN0X2NvZGUsIHZjcHVzKTsKIAlpdHNfZmQgPSBrdm1fY3JlYXRlX2RldmljZSh2LnZtLCBLVk1fREVWX1RZUEVfQVJNX1ZHSUNfSVRTKTsKIAogCWFkZHIgPSAweDQwMTAwMDsKQEAgLTY4NCw3ICYjNDM7NzgyLDggQEAgc3RhdGljIHZvaWQgdGVzdF92M19uYXNzZ2ljYXAodm9pZCkKIAl1MzIgdHlwZXIyOwogCWludCByZXQ7CiAKLQl2bSA9IHZtX2dpY19jcmVhdGVfd2l0aF92Y3B1cyhLVk1fREVWX1RZUEVfQVJNX1ZHSUNfVjMsIE5SX1ZDUFVTLCB2Y3B1cyk7CiYjNDM7CXZtID0gdm1fZ2ljX2NyZWF0ZV93aXRoX3ZjcHVzKEtWTV9ERVZfVFlQRV9BUk1fVkdJQ19WMywgTlJfVkNQVVMsCiYjNDM7CQkJCSAgICAgIGd1ZXN0X2NvZGUsIHZjcHVzKTsKIAlrdm1fZGV2aWNlX2F0dHJfZ2V0KHZtLmdpY19mZCwgS1ZNX0RFVl9BUk1fVkdJQ19HUlBfRElTVF9SRUdTLAogCQkJICAgIEdJQ0RfVFlQRVIyLCAmYW1wO3R5cGVyMik7CiAJaGFzX25hc3NnaWNhcCA9IHR5cGVyMiAmYW1wOyBHSUNEX1RZUEVSMl9uQVNTR0ljYXA7CkBAIC05NzgsNiAmIzQzOzEwNzcsNyBAQCB2b2lkIHJ1bl90ZXN0cyh1MzIgZ2ljX2Rldl90eXBlKQogCiAJaWYgKFZHSUNfREVWX0lTX1YzKGdpY19kZXZfdHlwZSkpIHsKIAkJdGVzdF92M19uZXdfcmVkaXN0X3JlZ2lvbnMoKTsKJiM0MzsJCXRlc3RfdjNfcmVkaXN0X3JlZ2lvbl9yZXRyeSgpOwogCQl0ZXN0X3YzX3R5cGVyX2FjY2Vzc2VzKCk7CiAJCXRlc3RfdjNfbGFzdF9iaXRfcmVkaXN0X3JlZ2lvbnMoKTsKIAkJdGVzdF92M19sYXN0X2JpdF9zaW5nbGVfcmRpc3QoKTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDA4OjI2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDcxMTgKCQkJCQkJCW91dHB1dDogNTAKCQkJCQkJCXRob3VnaHRzOiA0NDQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBQYXRjaCBTZXJpZXMgZm9yIEtNU0FOIEZ1enppbmcgTmVlZHMqKgoKT2theSwgc28gdGhlIHRhc2sgaXMgdG8gZmlndXJlIG91dCBpZiB0aGlzIHBhdGNoIHNlcmllcyBpbiBgYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLW1taW8tdjMuY2AgYW5kIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vYXJtNjQvdmdpY19pbml0LmNgIHdhcnJhbnRzIGEgS01TQU4gZnV6emluZyBzZXNzaW9uLiBJIG5lZWQgdG8gZGV0ZXJtaW5lIGlmIGBOZWVkc0tNU0FOID0gdHJ1ZWAgb3IgYE5lZWRzS01TQU4gPSBmYWxzZWAuIExldCYjMzk7cyBkaXZlIGluIGFuZCBzZWUgd2hhdCYjMzk7cyBjaGFuZ2VkLgoKRmlyc3QsIEkmIzM5O20gemVyb2luZyBpbiBvbiBgYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLW1taW8tdjMuY2AuIEl0IGxvb2tzIGxpa2UgdGhlIGNvcmUgb2YgdGhlIGNoYW5nZXMgcmV2b2x2ZSBhcm91bmQgcmVkaXN0cmlidXRvciBkZXZpY2UgbWFuYWdlbWVudC4gSSBzZWUgc2V2ZXJhbCBmdW5jdGlvbnMgaW52b2x2ZWQ6IGB2Z2ljX3VuZG9fcmVkaXN0X2Fzc2lnbm1lbnRgLCBgdmdpY19yZWdpc3Rlcl9yZWRpc3RfaW9kZXZgLCBgdmdpY19yb2xsYmFja19yZWRpc3RfaW9kZXZgLCBgdmdpY19yZWdpc3Rlcl9hbGxfcmVkaXN0X2lvZGV2c2AsIGFuZCBgdmdpY192M19zZXRfcmVkaXN0X2Jhc2VgLgoKVGhlIGZ1bmN0aW9ucyBkZWFsaW5nIHdpdGggdGhlIHJlZGlzdHJpYnV0b3IgYXNzaWdubWVudHMgc2VlbSB0byBiZSBzZXR0aW5nIGFuZCB1bnNldHRpbmcgYHZnaWNfY3B1LSZndDtyZHJlZ2AsIGFsb25nIHdpdGggb3RoZXIgcmVsYXRlZCBtZW1vcnkgbG9jYXRpb25zLiBJIG5lZWQgdG8gYmUgY2FyZWZ1bCB3aXRoIHRoZSBsb2NraW5nIGFuZCB1bmxvY2tpbmcgb3BlcmF0aW9ucy4gU3BlY2lmaWNhbGx5LCBgdmdpY191bmRvX3JlZGlzdF9hc3NpZ25tZW50YCByZXNldHMgdGhlIGluZGV4IGFuZCBwb2ludGVyLCBhbmQgYHZnaWNfcmVnaXN0ZXJfcmVkaXN0X2lvZGV2YCBkZWFscyB3aXRoIG1lbW9yeSBhbGxvY2F0aW9uIChvciByZWdpc3RyYXRpb24gdmlhIGBrdm1faW9fYnVzX3JlZ2lzdGVyX2RldmApIGFuZCBjYWxscyBgdmdpY191bmRvX3JlZGlzdF9hc3NpZ25tZW50YCBvbiBmYWlsdXJlLiBgdmdpY19yb2xsYmFja19yZWRpc3RfaW9kZXZgIGFwcGVhcnMgdG8gYmUgYSBjbGVhbnVwIGZ1bmN0aW9uIHRoYXQgYWxzbyBzZXRzIHRoZSBgcmRyZWdgIHBvaW50ZXIgdG8gYE5VTExgLiBUaGUgYHZnaWNfcmVnaXN0ZXJfYWxsX3JlZGlzdF9pb2RldnNgIGZ1bmN0aW9uIHNlZW1zIHRvIGJlIHVzZWQgdG8gcGVyZm9ybSBvcGVyYXRpb25zIG9uIGEgY29sbGVjdGlvbiBvZiByZWRpc3RyaWJ1dG9yIGRldmljZXMsIGFuZCBpcyBwYXNzZWQgYHJkcmVnYC4gVGhlIGltcG9ydGFudCB0aGluZyBoZXJlIGlzIHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgYHJkcmVnYCBpcyB1c2VkLiBGaW5hbGx5LCBgdmdpY192M19zZXRfcmVkaXN0X2Jhc2VgIGFwcGVhcnMgdG8gYmUgYSBoaWdoZXIgbGV2ZWwgZnVuY3Rpb24gdGhhdCBmZXRjaGVzIHRoZSBgcmRyZWdgIGFuZCBjYWxscyBgdmdpY19yZWdpc3Rlcl9hbGxfcmVkaXN0X2lvZGV2c2AuCgpJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZGF0YSBmbG93IGFuZCBob3cgdGhlc2UgZnVuY3Rpb25zIGludGVyYWN0LiBUbyBkbyB0aGF0IGVmZmVjdGl2ZWx5LCBJJiMzOTttIGdvaW5nIHRvIHB1bGwgdXAgdGhlIGNvbnRleHQgd2l0aCBgcmVhZC1maWxlYCBhbmQgY2FyZWZ1bGx5IGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgd2l0aGluIGB2Z2ljLW1taW8tdjMuY2AuIEkgbmVlZCBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIHRoZSBvdmVyYWxsIG1lbW9yeSBtYW5hZ2VtZW50IHN0cmF0ZWd5IGFuZCBob3cgdGhlIHJlZGlzdHJpYnV0b3IgZGV2aWNlIGlzIGhhbmRsZWQuIEkgbmVlZCB0byBsb29rIGZvciBhbnkgcG90ZW50aWFsIGZvciB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlLWZyZWUsIG9yIG1lbW9yeSBsZWFrcyB3aXRoaW4gdGhpcyBzZWN0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAwODoyNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2FyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1tbWlvLXYzLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA3NjAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogOTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDc2MDpcdHtcbiA3NjE6XHRcdGRldi1cdTAwM2VyZWdpb25zID0gdmdpY192M19kaXN0X3JlZ2lzdGVycztcbiA3NjI6XHRcdGRldi1cdTAwM2Vucl9yZWdpb25zID0gQVJSQVlfU0laRSh2Z2ljX3YzX2Rpc3RfcmVnaXN0ZXJzKTtcbiA3NjM6XHRcbiA3NjQ6XHRcdGt2bV9pb2RldmljZV9pbml0KFx1MDAyNmRldi1cdTAwM2VkZXYsIFx1MDAyNmt2bV9pb19naWNfb3BzKTtcbiA3NjU6XHRcbiA3NjY6XHRcdHJldHVybiBTWl82NEs7XG4gNzY3Olx0fVxuIDc2ODpcdFxuIDc2OTpcdHN0YXRpYyB2b2lkIHZnaWNfdW5kb19yZWRpc3RfYXNzaWdubWVudChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gNzcwOlx0e1xuIDc3MTpcdFx0c3RydWN0IHZnaWNfY3B1ICp2Z2ljX2NwdSA9IFx1MDAyNnZjcHUtXHUwMDNlYXJjaC52Z2ljX2NwdTtcbiA3NzI6XHRcbiA3NzM6XHRcdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXHUwMDI2dmNwdS1cdTAwM2Vrdm0tXHUwMDNlc2xvdHNfbG9jayk7XG4gNzc0Olx0XG4gNzc1Olx0XHRndWFyZChtdXRleCkoXHUwMDI2dmNwdS1cdTAwM2Vrdm0tXHUwMDNlYXJjaC5jb25maWdfbG9jayk7XG4gNzc2Olx0XG4gNzc3Olx0XHR2Z2ljX2NwdS1cdTAwM2VyZHJlZy1cdTAwM2VmcmVlX2luZGV4LS07XG4gNzc4Olx0XHR2Z2ljX2NwdS1cdTAwM2VyZHJlZyA9IE5VTEw7XG4gNzc5Olx0XHR2Z2ljX2NwdS1cdTAwM2VyZF9pb2Rldi5iYXNlX2FkZHIgPSBWR0lDX0FERFJfVU5ERUY7XG4gNzgwOlx0fVxuIDc4MTpcdFxuIDc4MjpcdC8qKlxuIDc4MzpcdCAqIHZnaWNfcmVnaXN0ZXJfcmVkaXN0X2lvZGV2IC0gcmVnaXN0ZXIgYSBzaW5nbGUgcmVkaXN0IGlvZGV2XG4gNzg0Olx0ICogQHZjcHU6ICAgIFRoZSBWQ1BVIHRvIHdoaWNoIHRoZSByZWRpc3RyaWJ1dG9yIGJlbG9uZ3NcbiA3ODU6XHQgKlxuIDc4NjpcdCAqIFJlZ2lzdGVyIGEgS1ZNIGlvZGV2IGZvciB0aGlzIFZDUFUmIzM5O3MgcmVkaXN0cmlidXRvciB1c2luZyB0aGUgYWRkcmVzc1xuIDc4NzpcdCAqIHByb3ZpZGVkLlxuIDc4ODpcdCAqXG4gNzg5Olx0ICogUmV0dXJuIDAgb24gc3VjY2VzcywgLUVSUk5PIG90aGVyd2lzZS5cbiA3OTA6XHQgKi9cbiA3OTE6XHRpbnQgdmdpY19yZWdpc3Rlcl9yZWRpc3RfaW9kZXYoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIDc5MjpcdHtcbiA3OTM6XHRcdHN0cnVjdCBrdm0gKmt2bSA9IHZjcHUtXHUwMDNla3ZtO1xuIDc5NDpcdFx0c3RydWN0IHZnaWNfZGlzdCAqdmdpYyA9IFx1MDAyNmt2bS1cdTAwM2VhcmNoLnZnaWM7XG4gNzk1Olx0XHRzdHJ1Y3QgdmdpY19jcHUgKnZnaWNfY3B1ID0gXHUwMDI2dmNwdS1cdTAwM2VhcmNoLnZnaWNfY3B1O1xuIDc5NjpcdFx0c3RydWN0IHZnaWNfaW9fZGV2aWNlICpyZF9kZXYgPSBcdTAwMjZ2Y3B1LVx1MDAzZWFyY2gudmdpY19jcHUucmRfaW9kZXY7XG4gNzk3Olx0XHRzdHJ1Y3QgdmdpY19yZWRpc3RfcmVnaW9uICpyZHJlZztcbiA3OTg6XHRcdGdwYV90IHJkX2Jhc2U7XG4gNzk5Olx0XHRpbnQgcmV0ID0gMDtcbiA4MDA6XHRcbiA4MDE6XHRcdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXHUwMDI2a3ZtLVx1MDAzZXNsb3RzX2xvY2spO1xuIDgwMjpcdFx0bXV0ZXhfbG9jayhcdTAwMjZrdm0tXHUwMDNlYXJjaC5jb25maWdfbG9jayk7XG4gODAzOlx0XG4gODA0Olx0XHRpZiAoIUlTX1ZHSUNfQUREUl9VTkRFRih2Z2ljX2NwdS1cdTAwM2VyZF9pb2Rldi5iYXNlX2FkZHIpKVxuIDgwNTpcdFx0XHRnb3RvIG91dF91bmxvY2s7XG4gODA2Olx0XG4gODA3Olx0XHQvKlxuIDgwODpcdFx0ICogV2UgbWF5IGJlIGNyZWF0aW5nIFZDUFVzIGJlZm9yZSBoYXZpbmcgc2V0IHRoZSBiYXNlIGFkZHJlc3MgZm9yIHRoZVxuIDgwOTpcdFx0ICogcmVkaXN0cmlidXRvciByZWdpb24sIGluIHdoaWNoIGNhc2Ugd2Ugd2lsbCBjb21lIGJhY2sgdG8gdGhpc1xuIDgxMDpcdFx0ICogZnVuY3Rpb24gZm9yIGFsbCBWQ1BVcyB3aGVuIHRoZSBiYXNlIGFkZHJlc3MgaXMgc2V0LiAgSnVzdCByZXR1cm5cbiA4MTE6XHRcdCAqIHdpdGhvdXQgZG9pbmcgYW55IHdvcmsgZm9yIG5vdy5cbiA4MTI6XHRcdCAqL1xuIDgxMzpcdFx0cmRyZWcgPSB2Z2ljX3YzX3JkaXN0X2ZyZWVfc2xvdChcdTAwMjZ2Z2ljLVx1MDAzZXJkX3JlZ2lvbnMpO1xuIDgxNDpcdFx0aWYgKCFyZHJlZylcbiA4MTU6XHRcdFx0Z290byBvdXRfdW5sb2NrO1xuIDgxNjpcdFxuIDgxNzpcdFx0aWYgKCF2Z2ljX3YzX2NoZWNrX2Jhc2Uoa3ZtKSkge1xuIDgxODpcdFx0XHRyZXQgPSAtRUlOVkFMO1xuIDgxOTpcdFx0XHRnb3RvIG91dF91bmxvY2s7XG4gODIwOlx0XHR9XG4gODIxOlx0XG4gODIyOlx0XHR2Z2ljX2NwdS1cdTAwM2VyZHJlZyA9IHJkcmVnO1xuIDgyMzpcdFx0dmdpY19jcHUtXHUwMDNlcmRyZWdfaW5kZXggPSByZHJlZy1cdTAwM2VmcmVlX2luZGV4O1xuIDgyNDpcdFxuIDgyNTpcdFx0cmRfYmFzZSA9IHJkcmVnLVx1MDAzZWJhc2UgJiM0MzsgcmRyZWctXHUwMDNlZnJlZV9pbmRleCAqIEtWTV9WR0lDX1YzX1JFRElTVF9TSVpFO1xuIDgyNjpcdFxuIDgyNzpcdFx0a3ZtX2lvZGV2aWNlX2luaXQoXHUwMDI2cmRfZGV2LVx1MDAzZWRldiwgXHUwMDI2a3ZtX2lvX2dpY19vcHMpO1xuIDgyODpcdFx0cmRfZGV2LVx1MDAzZWJhc2VfYWRkciA9IHJkX2Jhc2U7XG4gODI5Olx0XHRyZF9kZXYtXHUwMDNlaW9kZXZfdHlwZSA9IElPREVWX1JFRElTVDtcbiA4MzA6XHRcdHJkX2Rldi1cdTAwM2VyZWdpb25zID0gdmdpY192M19yZF9yZWdpc3RlcnM7XG4gODMxOlx0XHRyZF9kZXYtXHUwMDNlbnJfcmVnaW9ucyA9IEFSUkFZX1NJWkUodmdpY192M19yZF9yZWdpc3RlcnMpO1xuIDgzMjpcdFx0cmRfZGV2LVx1MDAzZXJlZGlzdF92Y3B1ID0gdmNwdTtcbiA4MzM6XHRcbiA4MzQ6XHRcdC8qIFByb3RlY3RlZCBieSBzbG90c19sb2NrICovXG4gODM1Olx0XHRyZHJlZy1cdTAwM2VmcmVlX2luZGV4JiM0MzsmIzQzOztcbiA4MzY6XHRcbiA4Mzc6XHRcdG11dGV4X3VubG9jayhcdTAwMjZrdm0tXHUwMDNlYXJjaC5jb25maWdfbG9jayk7XG4gODM4Olx0XG4gODM5Olx0XHRyZXQgPSBrdm1faW9fYnVzX3JlZ2lzdGVyX2Rldihrdm0sIEtWTV9NTUlPX0JVUywgcmRfYmFzZSxcbiA4NDA6XHRcdFx0XHRcdCAgICAgIDIgKiBTWl82NEssIFx1MDAyNnJkX2Rldi1cdTAwM2VkZXYpO1xuIDg0MTpcdFx0aWYgKHJldClcbiA4NDI6XHRcdFx0dmdpY191bmRvX3JlZGlzdF9hc3NpZ25tZW50KHZjcHUpO1xuIDg0MzpcdFxuIDg0NDpcdFx0cmV0dXJuIHJldDtcbiA4NDU6XHRcbiA4NDY6XHRvdXRfdW5sb2NrOlxuIDg0NzpcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNmt2bS1cdTAwM2VhcmNoLmNvbmZpZ19sb2NrKTtcbiA4NDg6XHRcdHJldHVybiByZXQ7XG4gODQ5Olx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAwODoyNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5Njg4CgkJCQkJCQlvdXRwdXQ6IDUwCgkJCQkJCQl0aG91Z2h0czogNDAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2Ygd2hhdCBJIHdvdWxkIGJlIHRoaW5raW5nLCBnaXZlbiB0aGF0IGNvbnRleHQuCgoqKkRpdmluZyBpbnRvIHRoZSBWZ2ljLU1NSU8tVjMgSW1wbGVtZW50YXRpb24qKgoKQWxyaWdodCwgdGltZSB0byBkaWcgaW50byB0aGUgZ3V0cyBvZiB0aGUgdmlydHVhbCBHSUMgKEdlbmVyaWMgSW50ZXJydXB0IENvbnRyb2xsZXIpIG1lbW9yeS1tYXBwZWQgSS9PIHYzIGltcGxlbWVudGF0aW9uLCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBgYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLW1taW8tdjMuY2AgZmlsZS4gSSBuZWVkIHRvIGdldCBhIGJldHRlciBoYW5kbGUgb24gaG93IHRoaXMgdmVyc2lvbiBoYW5kbGVzIG1lbW9yeS1tYXBwZWQgYWNjZXNzZXMuIExldCYjMzk7cyBzdGFydCBieSB6ZXJvaW5nIGluIG9uIGxpbmVzIDg1MCB0aHJvdWdoIDkzMC4gVGhpcyBzZWN0aW9uIGlzIHByb2JhYmx5IGtleSB0byB1bmRlcnN0YW5kaW5nIGEgc3BlY2lmaWMgY3JpdGljYWwgZnVuY3Rpb24gb3IgYSBwYXJ0aWN1bGFyIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMsIG1heWJlIHJlbGF0ZWQgdG8gaW50ZXJydXB0IGNvbmZpZ3VyYXRpb24sIGluamVjdGlvbiwgb3IgYWNrbm93bGVkZ2VtZW50LiBLbm93aW5nIHRoaXMgd2lsbCBnaXZlIG1lIGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2YgaG93IHRoZSB2aXJ0dWFsIEdJQyBpbnRlcmFjdHMgd2l0aCB0aGUgaG9zdCBhbmQgZ3Vlc3QsIHNwZWNpZmljYWxseSB0aGUgbWVtb3J5LW1hcHBlZCBpbnRlcmZhY2UuIEkmIzM5O20gaG9waW5nIHRvIGlkZW50aWZ5IGFueSBwb3RlbnRpYWwgYm90dGxlbmVja3MsIGFyZWFzIGZvciBvcHRpbWl6YXRpb24sIG9yIHBlcmhhcHMgZXZlbiBzdWJ0bGUgYnVncy4gTGV0JiMzOTtzIHNlZSB3aGF0IHRoZXNlIGxpbmVzIHJldmVhbC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMDg6Mjc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDthcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtbW1pby12My5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogODUwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDgwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA4NTA6XHRcbiA4NTE6XHR2b2lkIHZnaWNfdW5yZWdpc3Rlcl9yZWRpc3RfaW9kZXYoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIDg1MjpcdHtcbiA4NTM6XHRcdHN0cnVjdCB2Z2ljX2lvX2RldmljZSAqcmRfZGV2ID0gXHUwMDI2dmNwdS1cdTAwM2VhcmNoLnZnaWNfY3B1LnJkX2lvZGV2O1xuIDg1NDpcdFxuIDg1NTpcdFx0a3ZtX2lvX2J1c191bnJlZ2lzdGVyX2Rldih2Y3B1LVx1MDAzZWt2bSwgS1ZNX01NSU9fQlVTLCBcdTAwMjZyZF9kZXYtXHUwMDNlZGV2KTtcbiA4NTY6XHR9XG4gODU3Olx0XG4gODU4Olx0c3RhdGljIHZvaWQgdmdpY19yb2xsYmFja19yZWRpc3RfaW9kZXYoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuIDg1OTpcdFx0XHRcdFx0ICAgICAgIHN0cnVjdCB2Z2ljX3JlZGlzdF9yZWdpb24gKnJkcmVnKVxuIDg2MDpcdHtcbiA4NjE6XHRcdHN0cnVjdCB2Z2ljX2NwdSAqdmdpY19jcHUgPSBcdTAwMjZ2Y3B1LVx1MDAzZWFyY2gudmdpY19jcHU7XG4gODYyOlx0XG4gODYzOlx0XHRsb2NrZGVwX2Fzc2VydF9oZWxkKFx1MDAyNnZjcHUtXHUwMDNla3ZtLVx1MDAzZXNsb3RzX2xvY2spO1xuIDg2NDpcdFxuIDg2NTpcdFx0aWYgKHZnaWNfY3B1LVx1MDAzZXJkcmVnICE9IHJkcmVnKVxuIDg2NjpcdFx0XHRyZXR1cm47XG4gODY3Olx0XG4gODY4Olx0XHR2Z2ljX3VucmVnaXN0ZXJfcmVkaXN0X2lvZGV2KHZjcHUpO1xuIDg2OTpcdFxuIDg3MDpcdFx0Z3VhcmQobXV0ZXgpKFx1MDAyNnZjcHUtXHUwMDNla3ZtLVx1MDAzZWFyY2guY29uZmlnX2xvY2spO1xuIDg3MTpcdFx0dmdpY19jcHUtXHUwMDNlcmRyZWcgPSBOVUxMO1xuIDg3MjpcdFx0dmdpY19jcHUtXHUwMDNlcmRfaW9kZXYuYmFzZV9hZGRyID0gVkdJQ19BRERSX1VOREVGO1xuIDg3MzpcdH1cbiA4NzQ6XHRcbiA4NzU6XHRzdGF0aWMgaW50IHZnaWNfcmVnaXN0ZXJfYWxsX3JlZGlzdF9pb2RldnMoc3RydWN0IGt2bSAqa3ZtLFxuIDg3NjpcdFx0XHRcdFx0XHQgICBzdHJ1Y3QgdmdpY19yZWRpc3RfcmVnaW9uICpyZHJlZylcbiA4Nzc6XHR7XG4gODc4Olx0XHRzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHU7XG4gODc5Olx0XHR1bnNpZ25lZCBsb25nIGM7XG4gODgwOlx0XHRpbnQgcmV0ID0gMDtcbiA4ODE6XHRcbiA4ODI6XHRcdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXHUwMDI2a3ZtLVx1MDAzZXNsb3RzX2xvY2spO1xuIDg4MzpcdFxuIDg4NDpcdFx0a3ZtX2Zvcl9lYWNoX3ZjcHUoYywgdmNwdSwga3ZtKSB7XG4gODg1Olx0XHRcdHJldCA9IHZnaWNfcmVnaXN0ZXJfcmVkaXN0X2lvZGV2KHZjcHUpO1xuIDg4NjpcdFx0XHRpZiAocmV0KVxuIDg4NzpcdFx0XHRcdGJyZWFrO1xuIDg4ODpcdFx0fVxuIDg4OTpcdFxuIDg5MDpcdFx0aWYgKHJldCkge1xuIDg5MTpcdFx0XHQvKiBVbmRvIGFzc2lnbm1lbnRzIG1hZGUgZnJvbSB0aGUgcmVnaW9uIGJlaW5nIGFkZGVkLiAqL1xuIDg5MjpcdFx0XHRpbnQgaTtcbiA4OTM6XHRcbiA4OTQ6XHRcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgYzsgaSYjNDM7JiM0MzspIHtcbiA4OTU6XHRcdFx0XHR2Y3B1ID0ga3ZtX2dldF92Y3B1KGt2bSwgaSk7XG4gODk2Olx0XHRcdFx0dmdpY19yb2xsYmFja19yZWRpc3RfaW9kZXYodmNwdSwgcmRyZWcpO1xuIDg5NzpcdFx0XHR9XG4gODk4Olx0XHR9XG4gODk5Olx0XG4gOTAwOlx0XHRyZXR1cm4gcmV0O1xuIDkwMTpcdH1cbiA5MDI6XHRcbiA5MDM6XHQvKipcbiA5MDQ6XHQgKiB2Z2ljX3YzX2FsbG9jX3JlZGlzdF9yZWdpb24gLSBBbGxvY2F0ZSBhIG5ldyByZWRpc3RyaWJ1dG9yIHJlZ2lvblxuIDkwNTpcdCAqXG4gOTA2Olx0ICogUGVyZm9ybXMgdmFyaW91cyBjaGVja3MgYmVmb3JlIGluc2VydGluZyB0aGUgcmRpc3QgcmVnaW9uIGluIHRoZSBsaXN0LlxuIDkwNzpcdCAqIFRob3NlIHRlc3RzIGRlcGVuZCBvbiB3aGV0aGVyIHRoZSBzaXplIG9mIHRoZSByZGlzdCByZWdpb24gaXMga25vd25cbiA5MDg6XHQgKiAoaWUuIGNvdW50ICE9IDApLiBUaGUgbGlzdCBpcyBzb3J0ZWQgYnkgcmRpc3QgcmVnaW9uIGluZGV4LlxuIDkwOTpcdCAqXG4gOTEwOlx0ICogQGt2bToga3ZtIGhhbmRsZVxuIDkxMTpcdCAqIEBpbmRleDogcmVkaXN0IHJlZ2lvbiBpbmRleFxuIDkxMjpcdCAqIEBiYXNlOiBiYXNlIG9mIHRoZSBuZXcgcmRpc3QgcmVnaW9uXG4gOTEzOlx0ICogQGNvdW50OiBudW1iZXIgb2YgcmVkaXN0cmlidXRvcnMgdGhlIHJlZ2lvbiBpcyBtYWRlIG9mICgwIGluIHRoZSBvbGQgc3R5bGVcbiA5MTQ6XHQgKiBzaW5nbGUgcmVnaW9uLCB3aG9zZSBzaXplIGlzIGluZHVjZWQgZnJvbSB0aGUgbnVtYmVyIG9mIHZjcHVzKVxuIDkxNTpcdCAqXG4gOTE2Olx0ICogUmV0dXJuIDAgb24gc3VjY2VzcywgXHUwMDNjIDAgb3RoZXJ3aXNlXG4gOTE3Olx0ICovXG4gOTE4Olx0c3RhdGljIGludCB2Z2ljX3YzX2FsbG9jX3JlZGlzdF9yZWdpb24oc3RydWN0IGt2bSAqa3ZtLCB1aW50MzJfdCBpbmRleCxcbiA5MTk6XHRcdFx0XHRcdCAgICAgICBncGFfdCBiYXNlLCB1aW50MzJfdCBjb3VudClcbiA5MjA6XHR7XG4gOTIxOlx0XHRzdHJ1Y3QgdmdpY19kaXN0ICpkID0gXHUwMDI2a3ZtLVx1MDAzZWFyY2gudmdpYztcbiA5MjI6XHRcdHN0cnVjdCB2Z2ljX3JlZGlzdF9yZWdpb24gKnJkcmVnO1xuIDkyMzpcdFx0c3RydWN0IGxpc3RfaGVhZCAqcmRfcmVnaW9ucyA9IFx1MDAyNmQtXHUwMDNlcmRfcmVnaW9ucztcbiA5MjQ6XHRcdGludCBucl92Y3B1cyA9IGF0b21pY19yZWFkKFx1MDAyNmt2bS1cdTAwM2VvbmxpbmVfdmNwdXMpO1xuIDkyNTpcdFx0c2l6ZV90IHNpemUgPSBjb3VudCA/IGNvdW50ICogS1ZNX1ZHSUNfVjNfUkVESVNUX1NJWkVcbiA5MjY6XHRcdFx0XHQgICAgOiBucl92Y3B1cyAqIEtWTV9WR0lDX1YzX1JFRElTVF9TSVpFO1xuIDkyNzpcdFx0aW50IHJldDtcbiA5Mjg6XHRcbiA5Mjk6XHRcdC8qIGNyb3NzIHRoZSBlbmQgb2YgbWVtb3J5ID8gKi9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMDg6Mjc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTEzMDYKCQkJCQkJCW91dHB1dDogMTQ1CgkJCQkJCQl0aG91Z2h0czogNzAwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlBhdGNoIEFuYWx5c2lzOiBWR0lDIFJlZGlzdHJpYnV0b3IgUmVnaXN0cmF0aW9uIEVycm9yIEhhbmRsaW5nKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBncmFzcCB0aGUgY29yZSBjb25jZXB0dWFsIGNoYW5nZSB0aGlzIHBhdGNoIGludHJvZHVjZXMuIEl0IGxvb2tzIGxpa2UgaXQmIzM5O3MgYWRkcmVzc2luZyBhIGNyaXRpY2FsIGZsYXcgaW4gdGhlIGVycm9yIGhhbmRsaW5nIGZvciByZWdpc3RlcmluZyByZWRpc3RyaWJ1dG9yIE1NSU8gZGV2aWNlcyB3aXRoaW4gdGhlIEtWTSBWR0lDIHYzIGltcGxlbWVudGF0aW9uLCBzcGVjaWZpY2FsbHkgb24gYXJtNjQuIFByZXZpb3VzbHksIHRoZXJlIHdhcyBhIHByb2JsZW0gd2l0aCB0aGUgb3JkZXIgb2Ygb3BlcmF0aW9ucyB3aGVuIHJlZ2lzdGVyaW5nIHRoZXNlIGBpb2RldnNgLiBUaGUgaW5jcmVtZW50IG9mIGByZHJlZy0mZ3Q7ZnJlZV9pbmRleGAgd2FzIGhhcHBlbmluZyAqYWZ0ZXIqIHRoZSBwb3RlbnRpYWxseSBmYWlsaW5nIGBrdm1faW9fYnVzX3JlZ2lzdGVyX2RldmAgY2FsbC4gVGhpcyBsZWZ0IHRoaW5ncyBpbiBhIG1lc3N5IHN0YXRlIGlmIHRoZSByZWdpc3RyYXRpb24gZmFpbGVkIG9yIGlmIHNvbWV0aGluZyB3ZW50IHdyb25nIGxhdGVyIGluIHRoZSBgdmdpY19yZWdpc3Rlcl9hbGxfcmVkaXN0X2lvZGV2c2AgcHJvY2Vzcy4KClRoZSBwYXRjaCBzZWVtcyB0byBjbGVhbiB1cCB0aGUgbG9naWMgYXJvdW5kIHRoYXQgZmFpbHVyZSwgd2l0aCB0aGVzZSBrZXkgY2hhbmdlczogYHZnaWNfdW5kb19yZWRpc3RfYXNzaWdubWVudGAgbm93IGNvcnJlY3RseSByZXNldHMgYHJkcmVnLSZndDtmcmVlX2luZGV4YCwgaXQgYWxzbyBjbGVhcnMgYHZnaWNfY3B1LSZndDtyZHJlZ2AgYW5kIGB2Z2ljX2NwdS0mZ3Q7cmRfaW9kZXYuYmFzZV9hZGRyYC4gVGhlIHBhdGNoIGFsc28gZW5zdXJlcyB0aGF0IGB2Z2ljX3JvbGxiYWNrX3JlZGlzdF9pb2RldmAgb25seSB1bnJlZ2lzdGVycyBhbmQgcmVzZXRzIHN0YXRlIGlmIHRoZSBgdmdpY19jcHUtJmd0O3JkcmVnYCBtYXRjaGVzIHRoZSBjdXJyZW50IGByZHJlZ2AuIFRoZSBjYWxscyB0byBgdmdpY19yZWdpc3Rlcl9hbGxfcmVkaXN0X2lvZGV2c2AgYW5kIGB2Z2ljX3YzX3NldF9yZWRpc3RfYmFzZWAgYXJlIGFsc28gdXBkYXRlZCB0byBwYXNzIGByZHJlZ2AsIHdoaWNoIG1ha2VzIHNlbnNlIGZvciB0aGUgY29ycmVjdCBiZWhhdmlvci4KCk5vdywgbGV0JiMzOTtzIGdldCBpbnRvIHRoZSBuaXR0eS1ncml0dHkuIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhpcyBwYXRjaCBpc24mIzM5O3QgaW50cm9kdWNpbmcgYW55IG5ldyB2dWxuZXJhYmlsaXRpZXMgb3Igd2Vha25lc3NlcywgZXNwZWNpYWxseSByZWxhdGVkIHRvIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBwb3RlbnRpYWwgaW5mb3JtYXRpb24gbGVha3MsIGFuZCBnZW5lcmFsIG1lbW9yeSBzYWZldHkuIEkmIzM5O20gZm9jdXNpbmcgb24gdXNlciBzcGFjZSBpbnRlcmFjdGlvbnMsIGRhdGEgc3RydWN0dXJlIGluaXRpYWxpemF0aW9uLCBhbmQgdGhlIHVzdWFsIHN1c3BlY3RzLiBJIGNhbiBzZWUgdGhhdCB0aGUgY2hhbmdlcyBkb24mIzM5O3QgY29weSBtZW1vcnkgdG8gdXNlciBzcGFjZSwgbm8gbmV3IHVuaW5pdGlhbGl6ZWQgc3RydWN0dXJlcyBvciBmaWVsZHMgYXJlIGludHJvZHVjZWQsIGFuZCBubyBicmFuY2hlcyBhcmUgYmFzZWQgb24gdW5pbml0aWFsaXplZCBkYXRhLiBUaGVzZSBhcmUgZ29vZCBzaWducy4KClRoZSBtYWluIGlzc3VlIGhlcmUgaXMgYSBsb2dpYyBidWcgYW5kIGEgY2xlYW51cCBpc3N1ZS4gSXQmIzM5O3MgYW4gZXJyb3IgaGFuZGxpbmcgYW5kIHN0YXRlIG1hbmFnZW1lbnQgcHJvYmxlbSDigJMgYSBmYWlsZWQgcmVnaXN0cmF0aW9uIHRoYXQgd2FzIGxlYWRpbmcgdG8gYW4gaW5jb25zaXN0ZW50IHN0YXRlLiBObyBuZXcgbWVtb3J5IGFsbG9jYXRpb25zIHdlcmUgaW50cm9kdWNlZCwgd2hpY2ggZnVydGhlciByZWR1Y2VzIGFueSB3b3JyaWVzIG9mIG1lbW9yeSBpc3N1ZXMuCgpUaGUgcXVlc3Rpb24gb2YgS01TQU4gKEtlcm5lbCBNZW1vcnkgU2FuaXRpemVyKSBpcyBwYXJhbW91bnQsIG9mIGNvdXJzZS4gSSBuZWVkIHRvIGNhcmVmdWxseSBhc3Nlc3MgaWYgdGhpcyBwYXRjaCB3YXJyYW50cyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uIFRoZSBndWlkZWxpbmVzIGFyZSBjbGVhcjogdW5sZXNzIHRoZSBwYXRjaCBpbnRyb2R1Y2VzICpzcGVjaWZpY2FsbHkqIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIHRoYXQgS01TQU4gaXMgbmVlZGVkIHRvIGRldGVjdCwgd2UgZG9uJiMzOTt0IG5lZWQgS01TQU4uIEJhc2VkIG9uIG15IHJldmlldywgdGhhdCYjMzk7cyBub3QgdGhlIGNhc2UgaGVyZS4KCjEuICBUaGlzIHBhdGNoIGlzbiYjMzk7dCBpbnRyb2R1Y2luZyBhIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KMi4gIEl04oCZcyBwcmltYXJpbHkgZml4aW5nIGVycm9yIGhhbmRsaW5nIGFuZCBjbGVhbnVwIGxvZ2ljIGZvciB0aGUgZXhpc3RpbmcgS1ZNIFZHSUMgcmVkaXN0cmlidXRvciByZWdpc3RyYXRpb24sIGFuZCBpbXByb3Zpbmcgc3RhdGUgY29uc2lzdGVuY3kuCjMuICBFdmVyeXRoaW5nIHRoZSBwYXRjaCB0b3VjaGVzIGFuZCBtb2RpZmllcyBhcmUgaW5pdGlhbGl6ZWQgcG9pbnRlcnMgYW5kIGZpZWxkcyBvbiBleGlzdGluZyBzdHJ1Y3Qga3ZtLCBrdm1cX3ZjcHUsIGFuZCB2Z2ljIHN0cnVjdHVyZXMuCgpUaGVyZWZvcmUsIGBOZWVkc0tNU0FOID0gZmFsc2VgLiBJIG5lZWQgdG8gZG9jdW1lbnQgdGhpcyByZWFzb25pbmcgdGhvcm91Z2hseSwgdGhvdWdoLCBhbmQgSSBuZWVkIHRvIGRvIGEgdGhvcm91Z2ggc2FuaXR5IGNoZWNrIHRvIG1ha2UgY2VydGFpbiBJIGhhdmVuJiMzOTt0IG1pc3NlZCBhbnl0aGluZy4gSSYjMzk7bSBxdWl0ZSBjb25maWRlbnQgdGhhdCB0aGlzIHBhdGNoIGlzIHNhZmUsIGJ1dCB0aGVyZSYjMzk7cyBubyByZWFzb24gdG8gcnVzaCBoZXJlLiBJJiMzOTtsbCB0YWtlIGEgY29tcHJlaGVuc2l2ZSBsb29rIGF0IHRoZSBvdmVyYWxsIGNvbnRleHQsIHRoZSBvcmlnaW5hbCBkZXNpZ24sIHRoZSBwcm9ibGVtLCBhbmQgdGhlIHNvbHV0aW9uIHRvIGVuc3VyZSBJIHVuZGVyc3RhbmQgaXQgaW5zaWRlIGFuZCBvdXQuIFRoZW4gSSYjMzk7bGwgd3JpdGUgdXAgYSBkZXRhaWxlZCBleHBsYW5hdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMDg6Mjc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgZXJyb3Igcm9sbGJhY2sgaGFuZGxpbmcgZHVyaW5nIEtWTSBBUk02NCBWR0lDdjMgcmVkaXN0cmlidXRvciBpb2RldiByZWdpc3RyYXRpb24gKGhhbmRsaW5nIGZhaWxlZCByZWdpc3RyYXRpb24gY2xlYW51cCwgcmVzZXR0aW5nIHZnaWNfY3B1IHJlZGlzdHJpYnV0b3IgcG9pbnRlcnMsIGFuZCBkZWNyZW1lbnRpbmcgZnJlZV9pbmRleCBhcHByb3ByaWF0ZWx5KS4gVGhlIGNoYW5nZXMgZG8gbm90IGludHJvZHVjZSBvciBtb2RpZnkgYW55IG1lbW9yeSBhbGxvY2F0aW9ucywgZGF0YSBzdHJ1Y3R1cmVzIGNvcGllZCB0byB1c2Vyc3BhY2UsIG9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFjY2Vzc2VzLiBBbnkgcG90ZW50aWFsIGNvbmN1cnJlbmN5LCBsb2NrIG9yZGVyaW5nLCBvciBpbnZhbGlkIGRlcmVmZXJlbmNlIGlzc3VlcyBhcmUgY292ZXJlZCBieSBzdGFuZGFyZCBzYW5pdGl6ZXJzIChMT0NLREVQL0tBU0FOKS4gVGhlcmVmb3JlLCB0aGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGluZm9ybWF0aW9uIGxlYWtzIHRoYXQgd291bGQgcmVxdWlyZSBhIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGVycm9yIHJvbGxiYWNrIGhhbmRsaW5nIGR1cmluZyBLVk0gQVJNNjQgVkdJQ3YzIHJlZGlzdHJpYnV0b3IgaW9kZXYgcmVnaXN0cmF0aW9uIChoYW5kbGluZyBmYWlsZWQgcmVnaXN0cmF0aW9uIGNsZWFudXAsIHJlc2V0dGluZyB2Z2ljX2NwdSByZWRpc3RyaWJ1dG9yIHBvaW50ZXJzLCBhbmQgZGVjcmVtZW50aW5nIGZyZWVfaW5kZXggYXBwcm9wcmlhdGVseSkuIFRoZSBjaGFuZ2VzIGRvIG5vdCBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IGFueSBtZW1vcnkgYWxsb2NhdGlvbnMsIGRhdGEgc3RydWN0dXJlcyBjb3BpZWQgdG8gdXNlcnNwYWNlLCBvciB1bmluaXRpYWxpemVkIG1lbW9yeSBhY2Nlc3Nlcy4gQW55IHBvdGVudGlhbCBjb25jdXJyZW5jeSwgbG9jayBvcmRlcmluZywgb3IgaW52YWxpZCBkZXJlZmVyZW5jZSBpc3N1ZXMgYXJlIGNvdmVyZWQgYnkgc3RhbmRhcmQgc2FuaXRpemVycyAoTE9DS0RFUC9LQVNBTikuIFRoZXJlZm9yZSwgdGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBpbmZvcm1hdGlvbiBsZWFrcyB0aGF0IHdvdWxkIHJlcXVpcmUgYSBLTVNBTiBmdXp6aW5nIHNlc3Npb24uJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDA4OjI2OjI0LjUyNjI0NDAwMloiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk0MzQxMjYyOTg0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIktWTVwiLFxuICAgIFwiVklSVFVBTElaQVRJT05cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ2Z2ljX3YzX3NldF9yZWRpc3RfYmFzZVwiLFxuICAgIFwidmdpY19yZWdpc3Rlcl9yZWRpc3RfaW9kZXZcIixcbiAgICBcInZnaWNfdW5yZWdpc3Rlcl9yZWRpc3RfaW9kZXZcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGVycm9yIHJvbGxiYWNrIGhhbmRsaW5nIGR1cmluZyBLVk0gQVJNNjQgVkdJQ3YzIHJlZGlzdHJpYnV0b3IgaW9kZXYgcmVnaXN0cmF0aW9uIChoYW5kbGluZyBmYWlsZWQgcmVnaXN0cmF0aW9uIGNsZWFudXAsIHJlc2V0dGluZyB2Z2ljX2NwdSByZWRpc3RyaWJ1dG9yIHBvaW50ZXJzLCBhbmQgZGVjcmVtZW50aW5nIGZyZWVfaW5kZXggYXBwcm9wcmlhdGVseSkuIFRoZSBjaGFuZ2VzIGRvIG5vdCBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IGFueSBtZW1vcnkgYWxsb2NhdGlvbnMsIGRhdGEgc3RydWN0dXJlcyBjb3BpZWQgdG8gdXNlcnNwYWNlLCBvciB1bmluaXRpYWxpemVkIG1lbW9yeSBhY2Nlc3Nlcy4gQW55IHBvdGVudGlhbCBjb25jdXJyZW5jeSwgbG9jayBvcmRlcmluZywgb3IgaW52YWxpZCBkZXJlZmVyZW5jZSBpc3N1ZXMgYXJlIGNvdmVyZWQgYnkgc3RhbmRhcmQgc2FuaXRpemVycyAoTE9DS0RFUC9LQVNBTikuIFRoZXJlZm9yZSwgdGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBpbmZvcm1hdGlvbiBsZWFrcyB0aGF0IHdvdWxkIHJlcXVpcmUgYSBLTVNBTiBmdXp6aW5nIHNlc3Npb24uXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgZXJyb3IgdW53aW5kaW5nIGFuZCByb2xsYmFjayBoYW5kbGluZyB3aGVuIHJlZ2lzdGVyaW5nIFZHSUN2MyByZWRpc3RyaWJ1dG9yIEkvTyBkZXZpY2VzIGluIEFSTTY0IEtWTS4gSXQgZW5zdXJlcyB0aGF0IGZhaWxlZCByZWRpc3RyaWJ1dG9yIHJlZ2lzdHJhdGlvbiBwcm9wZXJseSByb2xscyBiYWNrIHRoZSBhc3NpZ25lZCByZWdpb24gc3RhdGUgYW5kIG9ubHkgdGVhcnMgZG93biBWQ1BVcyBhc3NvY2lhdGVkIHdpdGggdGhlIGZhaWxpbmcgcmVnaW9uLiBUaGVzZSBjb2RlIHBhdGhzIGFyZSByZWFjaGFibGUgdmlhIEtWTSBpb2N0bHMgYW5kIHdvcnRoIGZ1enppbmcgZm9yIGNvbmN1cnJlbmN5IGFuZCBzdGF0ZSBtYW5hZ2VtZW50IGJ1Z3MuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDA4OjI2OjI0LjUyNjI0ODM2MloiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzkzMDQxODQyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgYWM4ZmM3YTU0Y2YxNzIyMjc0YzgzNDJjZjFmMDg2MmExNDU5OWI2OFxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgTW9uIEF1ZyAzMSAwODoyNjoyMyAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtbW1pby12My5jIGIvYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLW1taW8tdjMuY1xcbmluZGV4IDU5MTNhMjBkODMwMTkuLjc3YWE4NDMzNzAxYTEgMTAwNjQ0XFxuLS0tIGEvYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLW1taW8tdjMuY1xcbisrKyBiL2FyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1tbWlvLXYzLmNcXG5AQCAtNzY2LDYgKzc2NiwxOSBAQCB1bnNpZ25lZCBpbnQgdmdpY192M19pbml0X2Rpc3RfaW9kZXYoc3RydWN0IHZnaWNfaW9fZGV2aWNlICpkZXYpXFxuIFxcdHJldHVybiBTWl82NEs7XFxuIH1cXG4gXFxuK3N0YXRpYyB2b2lkIHZnaWNfdW5kb19yZWRpc3RfYXNzaWdubWVudChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuK3tcXG4rXFx0c3RydWN0IHZnaWNfY3B1ICp2Z2ljX2NwdSA9IFxcdTAwMjZ2Y3B1LVxcdTAwM2VhcmNoLnZnaWNfY3B1O1xcbitcXG4rXFx0bG9ja2RlcF9hc3NlcnRfaGVsZChcXHUwMDI2dmNwdS1cXHUwMDNla3ZtLVxcdTAwM2VzbG90c19sb2NrKTtcXG4rXFxuK1xcdGd1YXJkKG11dGV4KShcXHUwMDI2dmNwdS1cXHUwMDNla3ZtLVxcdTAwM2VhcmNoLmNvbmZpZ19sb2NrKTtcXG4rXFxuK1xcdHZnaWNfY3B1LVxcdTAwM2VyZHJlZy1cXHUwMDNlZnJlZV9pbmRleC0tO1xcbitcXHR2Z2ljX2NwdS1cXHUwMDNlcmRyZWcgPSBOVUxMO1xcbitcXHR2Z2ljX2NwdS1cXHUwMDNlcmRfaW9kZXYuYmFzZV9hZGRyID0gVkdJQ19BRERSX1VOREVGO1xcbit9XFxuK1xcbiAvKipcXG4gICogdmdpY19yZWdpc3Rlcl9yZWRpc3RfaW9kZXYgLSByZWdpc3RlciBhIHNpbmdsZSByZWRpc3QgaW9kZXZcXG4gICogQHZjcHU6ICAgIFRoZSBWQ1BVIHRvIHdoaWNoIHRoZSByZWRpc3RyaWJ1dG9yIGJlbG9uZ3NcXG5AQCAtODE4LDE2ICs4MzEsMTcgQEAgaW50IHZnaWNfcmVnaXN0ZXJfcmVkaXN0X2lvZGV2KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4gXFx0cmRfZGV2LVxcdTAwM2Vucl9yZWdpb25zID0gQVJSQVlfU0laRSh2Z2ljX3YzX3JkX3JlZ2lzdGVycyk7XFxuIFxcdHJkX2Rldi1cXHUwMDNlcmVkaXN0X3ZjcHUgPSB2Y3B1O1xcbiBcXG4rXFx0LyogUHJvdGVjdGVkIGJ5IHNsb3RzX2xvY2sgKi9cXG4rXFx0cmRyZWctXFx1MDAzZWZyZWVfaW5kZXgrKztcXG4rXFxuIFxcdG11dGV4X3VubG9jayhcXHUwMDI2a3ZtLVxcdTAwM2VhcmNoLmNvbmZpZ19sb2NrKTtcXG4gXFxuIFxcdHJldCA9IGt2bV9pb19idXNfcmVnaXN0ZXJfZGV2KGt2bSwgS1ZNX01NSU9fQlVTLCByZF9iYXNlLFxcbiBcXHRcXHRcXHRcXHQgICAgICAyICogU1pfNjRLLCBcXHUwMDI2cmRfZGV2LVxcdTAwM2VkZXYpO1xcbiBcXHRpZiAocmV0KVxcbi1cXHRcXHRyZXR1cm4gcmV0O1xcbitcXHRcXHR2Z2ljX3VuZG9fcmVkaXN0X2Fzc2lnbm1lbnQodmNwdSk7XFxuIFxcbi1cXHQvKiBQcm90ZWN0ZWQgYnkgc2xvdHNfbG9jayAqL1xcbi1cXHRyZHJlZy1cXHUwMDNlZnJlZV9pbmRleCsrO1xcbi1cXHRyZXR1cm4gMDtcXG4rXFx0cmV0dXJuIHJldDtcXG4gXFxuIG91dF91bmxvY2s6XFxuIFxcdG11dGV4X3VubG9jayhcXHUwMDI2a3ZtLVxcdTAwM2VhcmNoLmNvbmZpZ19sb2NrKTtcXG5AQCAtODQxLDcgKzg1NSwyNSBAQCB2b2lkIHZnaWNfdW5yZWdpc3Rlcl9yZWRpc3RfaW9kZXYoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbiBcXHRrdm1faW9fYnVzX3VucmVnaXN0ZXJfZGV2KHZjcHUtXFx1MDAzZWt2bSwgS1ZNX01NSU9fQlVTLCBcXHUwMDI2cmRfZGV2LVxcdTAwM2VkZXYpO1xcbiB9XFxuIFxcbi1zdGF0aWMgaW50IHZnaWNfcmVnaXN0ZXJfYWxsX3JlZGlzdF9pb2RldnMoc3RydWN0IGt2bSAqa3ZtKVxcbitzdGF0aWMgdm9pZCB2Z2ljX3JvbGxiYWNrX3JlZGlzdF9pb2RldihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXFxuK1xcdFxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgdmdpY19yZWRpc3RfcmVnaW9uICpyZHJlZylcXG4re1xcbitcXHRzdHJ1Y3QgdmdpY19jcHUgKnZnaWNfY3B1ID0gXFx1MDAyNnZjcHUtXFx1MDAzZWFyY2gudmdpY19jcHU7XFxuK1xcbitcXHRsb2NrZGVwX2Fzc2VydF9oZWxkKFxcdTAwMjZ2Y3B1LVxcdTAwM2Vrdm0tXFx1MDAzZXNsb3RzX2xvY2spO1xcbitcXG4rXFx0aWYgKHZnaWNfY3B1LVxcdTAwM2VyZHJlZyAhPSByZHJlZylcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0dmdpY191bnJlZ2lzdGVyX3JlZGlzdF9pb2Rldih2Y3B1KTtcXG4rXFxuK1xcdGd1YXJkKG11dGV4KShcXHUwMDI2dmNwdS1cXHUwMDNla3ZtLVxcdTAwM2VhcmNoLmNvbmZpZ19sb2NrKTtcXG4rXFx0dmdpY19jcHUtXFx1MDAzZXJkcmVnID0gTlVMTDtcXG4rXFx0dmdpY19jcHUtXFx1MDAzZXJkX2lvZGV2LmJhc2VfYWRkciA9IFZHSUNfQUREUl9VTkRFRjtcXG4rfVxcbitcXG4rc3RhdGljIGludCB2Z2ljX3JlZ2lzdGVyX2FsbF9yZWRpc3RfaW9kZXZzKHN0cnVjdCBrdm0gKmt2bSxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgc3RydWN0IHZnaWNfcmVkaXN0X3JlZ2lvbiAqcmRyZWcpXFxuIHtcXG4gXFx0c3RydWN0IGt2bV92Y3B1ICp2Y3B1O1xcbiBcXHR1bnNpZ25lZCBsb25nIGM7XFxuQEAgLTg1NiwxMiArODg4LDEyIEBAIHN0YXRpYyBpbnQgdmdpY19yZWdpc3Rlcl9hbGxfcmVkaXN0X2lvZGV2cyhzdHJ1Y3Qga3ZtICprdm0pXFxuIFxcdH1cXG4gXFxuIFxcdGlmIChyZXQpIHtcXG4tXFx0XFx0LyogVGhlIGN1cnJlbnQgYyBmYWlsZWQsIHNvIGl0ZXJhdGUgb3ZlciB0aGUgcHJldmlvdXMgb25lcy4gKi9cXG4rXFx0XFx0LyogVW5kbyBhc3NpZ25tZW50cyBtYWRlIGZyb20gdGhlIHJlZ2lvbiBiZWluZyBhZGRlZC4gKi9cXG4gXFx0XFx0aW50IGk7XFxuIFxcbiBcXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgYzsgaSsrKSB7XFxuIFxcdFxcdFxcdHZjcHUgPSBrdm1fZ2V0X3ZjcHUoa3ZtLCBpKTtcXG4tXFx0XFx0XFx0dmdpY191bnJlZ2lzdGVyX3JlZGlzdF9pb2Rldih2Y3B1KTtcXG4rXFx0XFx0XFx0dmdpY19yb2xsYmFja19yZWRpc3RfaW9kZXYodmNwdSwgcmRyZWcpO1xcbiBcXHRcXHR9XFxuIFxcdH1cXG4gXFxuQEAgLTk3MCwxMCArMTAwMiwxMyBAQCB2b2lkIHZnaWNfdjNfZnJlZV9yZWRpc3RfcmVnaW9uKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IHZnaWNfcmVkaXN0X3JlZ2lvbiAqcmRyZVxcbiBcXG4gaW50IHZnaWNfdjNfc2V0X3JlZGlzdF9iYXNlKHN0cnVjdCBrdm0gKmt2bSwgdTMyIGluZGV4LCB1NjQgYWRkciwgdTMyIGNvdW50KVxcbiB7XFxuK1xcdHN0cnVjdCB2Z2ljX3JlZGlzdF9yZWdpb24gKnJkcmVnO1xcbiBcXHRpbnQgcmV0O1xcbiBcXG4gXFx0bXV0ZXhfbG9jayhcXHUwMDI2a3ZtLVxcdTAwM2VhcmNoLmNvbmZpZ19sb2NrKTtcXG4gXFx0cmV0ID0gdmdpY192M19hbGxvY19yZWRpc3RfcmVnaW9uKGt2bSwgaW5kZXgsIGFkZHIsIGNvdW50KTtcXG4rXFx0aWYgKCFyZXQpXFxuK1xcdFxcdHJkcmVnID0gdmdpY192M19yZGlzdF9yZWdpb25fZnJvbV9pbmRleChrdm0sIGluZGV4KTtcXG4gXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZrdm0tXFx1MDAzZWFyY2guY29uZmlnX2xvY2spO1xcbiBcXHRpZiAocmV0KVxcbiBcXHRcXHRyZXR1cm4gcmV0O1xcbkBAIC05ODIsMTIgKzEwMTcsOSBAQCBpbnQgdmdpY192M19zZXRfcmVkaXN0X2Jhc2Uoc3RydWN0IGt2bSAqa3ZtLCB1MzIgaW5kZXgsIHU2NCBhZGRyLCB1MzIgY291bnQpXFxuIFxcdCAqIFJlZ2lzdGVyIGlvZGV2cyBmb3IgZWFjaCBleGlzdGluZyBWQ1BVLiAgQWRkaW5nIG1vcmUgVkNQVXNcXG4gXFx0ICogYWZ0ZXJ3YXJkcyB3aWxsIHJlZ2lzdGVyIHRoZSBpb2RldnMgd2hlbiBuZWVkZWQuXFxuIFxcdCAqL1xcbi1cXHRyZXQgPSB2Z2ljX3JlZ2lzdGVyX2FsbF9yZWRpc3RfaW9kZXZzKGt2bSk7XFxuK1xcdHJldCA9IHZnaWNfcmVnaXN0ZXJfYWxsX3JlZGlzdF9pb2RldnMoa3ZtLCByZHJlZyk7XFxuIFxcdGlmIChyZXQpIHtcXG4tXFx0XFx0c3RydWN0IHZnaWNfcmVkaXN0X3JlZ2lvbiAqcmRyZWc7XFxuLVxcbiBcXHRcXHRtdXRleF9sb2NrKFxcdTAwMjZrdm0tXFx1MDAzZWFyY2guY29uZmlnX2xvY2spO1xcbi1cXHRcXHRyZHJlZyA9IHZnaWNfdjNfcmRpc3RfcmVnaW9uX2Zyb21faW5kZXgoa3ZtLCBpbmRleCk7XFxuIFxcdFxcdHZnaWNfdjNfZnJlZV9yZWRpc3RfcmVnaW9uKGt2bSwgcmRyZWcpO1xcbiBcXHRcXHRtdXRleF91bmxvY2soXFx1MDAyNmt2bS1cXHUwMDNlYXJjaC5jb25maWdfbG9jayk7XFxuIFxcdFxcdHJldHVybiByZXQ7XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9hcm02NC92Z2ljX2luaXQuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9hcm02NC92Z2ljX2luaXQuY1xcbmluZGV4IDQ3ZTM0YjQzYWZiMjkuLjVhMzBmM2NiMDM5YmUgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2FybTY0L3ZnaWNfaW5pdC5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2FybTY0L3ZnaWNfaW5pdC5jXFxuQEAgLTUsNiArNSw3IEBAXFxuICAqIENvcHlyaWdodCAoQykgMjAyMCwgUmVkIEhhdCwgSW5jLlxcbiAgKi9cXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2tlcm5lbC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvc2l6ZXMuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY3N5cy9zeXNjYWxsLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2Nhc20va3ZtLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2Nhc20va3ZtX3BhcmEuaFxcdTAwM2VcXG5AQCAtMTMsMTIgKzE0LDIxIEBAXFxuIFxcbiAjaW5jbHVkZSBcXFwidGVzdF91dGlsLmhcXFwiXFxuICNpbmNsdWRlIFxcXCJrdm1fdXRpbC5oXFxcIlxcbisjaW5jbHVkZSBcXFwiZ2ljLmhcXFwiXFxuICNpbmNsdWRlIFxcXCJwcm9jZXNzb3IuaFxcXCJcXG4gI2luY2x1ZGUgXFxcInZnaWMuaFxcXCJcXG4gI2luY2x1ZGUgXFxcImdpY192My5oXFxcIlxcbiBcXG4gI2RlZmluZSBOUl9WQ1BVU1xcdFxcdDRcXG4gXFxuKyNkZWZpbmUgUkVESVNUX1JFVFJZX1JFR0lPTjBfQkFTRVxcdEdJQ1JfQkFTRV9HUEFcXG4rI2RlZmluZSBSRURJU1RfUkVUUllfUkVHSU9OMV9CQVNFXFx0XFxcXFxcbitcXHQoUkVESVNUX1JFVFJZX1JFR0lPTjBfQkFTRSArIDIgKiBLVk1fVkdJQ19WM19SRURJU1RfU0laRSlcXG4rI2RlZmluZSBSRURJU1RfUkVUUllfRElTVF9CQVNFXFx0XFx0XFxcXFxcbitcXHQoUkVESVNUX1JFVFJZX1JFR0lPTjFfQkFTRSArIEtWTV9WR0lDX1YzX1JFRElTVF9TSVpFKVxcbisjZGVmaW5lIFJFRElTVF9SRVRSWV9SRUdJT04yX0JBU0VcXHRcXFxcXFxuK1xcdChSRURJU1RfUkVUUllfRElTVF9CQVNFICsgS1ZNX1ZHSUNfVjNfRElTVF9TSVpFKVxcbitcXG4gI2RlZmluZSBSRUdfT0ZGU0VUKHZjcHUsIG9mZnNldCkgKCgodTY0KXZjcHUgXFx1MDAzY1xcdTAwM2MgMzIpIHwgb2Zmc2V0KVxcbiBcXG4gI2RlZmluZSBWR0lDX0RFVl9JU19WMihfZCkgKChfZCkgPT0gS1ZNX0RFVl9UWVBFX0FSTV9WR0lDX1YyKVxcbkBAIC02NSw2ICs3NSwyMyBAQCBzdGF0aWMgdm9pZCBndWVzdF9jb2RlKHZvaWQpXFxuIFxcdEdVRVNUX0RPTkUoKTtcXG4gfVxcbiBcXG4rc3RhdGljIHZvaWQgZ3Vlc3RfY2hlY2tfcmVkaXN0X3JldHJ5KHZvaWQpXFxuK3tcXG4rXFx0dW5zaWduZWQgaW50IGk7XFxuK1xcbitcXHQvKiBUaGUgZmlyc3QgdGhyZWUgcmVkaXN0cmlidXRvcnMgc3BhbiBhZGphY2VudCByZWdpb25zIDAgYW5kIDEuICovXFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBOUl9WQ1BVUzsgaSsrKSB7XFxuK1xcdFxcdHU2NCBiYXNlID0gaSBcXHUwMDNjIDMgPyBSRURJU1RfUkVUUllfUkVHSU9OMF9CQVNFICtcXG4rXFx0XFx0XFx0XFx0ICAgICAgIGkgKiBLVk1fVkdJQ19WM19SRURJU1RfU0laRSA6XFxuK1xcdFxcdFxcdFxcdCAgICAgICBSRURJU1RfUkVUUllfUkVHSU9OMl9CQVNFO1xcbitcXHRcXHR1NjQgdHlwZXIgPSByZWFkcSgodm9pZCAqKSh1bnNpZ25lZCBsb25nKShiYXNlICsgR0lDUl9UWVBFUikpO1xcbitcXG4rXFx0XFx0R1VFU1RfQVNTRVJUX0VRKEdJQ1JfVFlQRVJfQ1BVX05VTUJFUih0eXBlciksIGkpO1xcbitcXHR9XFxuK1xcbitcXHRHVUVTVF9ET05FKCk7XFxuK31cXG4rXFxuIC8qIHdlIGRvbid0IHdhbnQgdG8gYXNzZXJ0IG9uIHJ1biBleGVjdXRpb24sIGhlbmNlIHRoYXQgaGVscGVyICovXFxuIHN0YXRpYyBpbnQgcnVuX3ZjcHUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbiB7XFxuQEAgLTczLDYgKzEwMCw3IEBAIHN0YXRpYyBpbnQgcnVuX3ZjcHUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbiBcXG4gc3RhdGljIHN0cnVjdCB2bV9naWMgdm1fZ2ljX2NyZWF0ZV93aXRoX3ZjcHVzKHUzMiBnaWNfZGV2X3R5cGUsXFxuIFxcdFxcdFxcdFxcdFxcdCAgICAgIHUzMiBucl92Y3B1cyxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICAgdm9pZCAqZ3Vlc3RfY29kZSxcXG4gXFx0XFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IGt2bV92Y3B1ICp2Y3B1c1tdKVxcbiB7XFxuIFxcdHN0cnVjdCB2bV9naWMgdjtcXG5AQCAtMzM4LDcgKzM2Niw3IEBAIHN0YXRpYyB2b2lkIHRlc3RfdmdpY190aGVuX3ZjcHVzKHUzMiBnaWNfZGV2X3R5cGUpXFxuIFxcdHN0cnVjdCB2bV9naWMgdjtcXG4gXFx0aW50IHJldCwgaTtcXG4gXFxuLVxcdHYgPSB2bV9naWNfY3JlYXRlX3dpdGhfdmNwdXMoZ2ljX2Rldl90eXBlLCAxLCB2Y3B1cyk7XFxuK1xcdHYgPSB2bV9naWNfY3JlYXRlX3dpdGhfdmNwdXMoZ2ljX2Rldl90eXBlLCAxLCBndWVzdF9jb2RlLCB2Y3B1cyk7XFxuIFxcbiBcXHRzdWJ0ZXN0X2Rpc3RfcmRpc3QoXFx1MDAyNnYpO1xcbiBcXG5AQCAtMzU5LDcgKzM4Nyw4IEBAIHN0YXRpYyB2b2lkIHRlc3RfdmNwdXNfdGhlbl92Z2ljKHUzMiBnaWNfZGV2X3R5cGUpXFxuIFxcdHN0cnVjdCB2bV9naWMgdjtcXG4gXFx0aW50IHJldDtcXG4gXFxuLVxcdHYgPSB2bV9naWNfY3JlYXRlX3dpdGhfdmNwdXMoZ2ljX2Rldl90eXBlLCBOUl9WQ1BVUywgdmNwdXMpO1xcbitcXHR2ID0gdm1fZ2ljX2NyZWF0ZV93aXRoX3ZjcHVzKGdpY19kZXZfdHlwZSwgTlJfVkNQVVMsIGd1ZXN0X2NvZGUsXFxuK1xcdFxcdFxcdFxcdCAgICAgdmNwdXMpO1xcbiBcXG4gXFx0c3VidGVzdF9kaXN0X3JkaXN0KFxcdTAwMjZ2KTtcXG4gXFxuQEAgLTQxMSw3ICs0NDAsOCBAQCBzdGF0aWMgdm9pZCB0ZXN0X3YzX25ld19yZWRpc3RfcmVnaW9ucyh2b2lkKVxcbiBcXHR1NjQgYWRkcjtcXG4gXFx0aW50IHJldDtcXG4gXFxuLVxcdHYgPSB2bV9naWNfY3JlYXRlX3dpdGhfdmNwdXMoS1ZNX0RFVl9UWVBFX0FSTV9WR0lDX1YzLCBOUl9WQ1BVUywgdmNwdXMpO1xcbitcXHR2ID0gdm1fZ2ljX2NyZWF0ZV93aXRoX3ZjcHVzKEtWTV9ERVZfVFlQRV9BUk1fVkdJQ19WMywgTlJfVkNQVVMsXFxuK1xcdFxcdFxcdFxcdCAgICAgZ3Vlc3RfY29kZSwgdmNwdXMpO1xcbiBcXHRzdWJ0ZXN0X3YzX3JlZGlzdF9yZWdpb25zKFxcdTAwMjZ2KTtcXG4gXFx0a3ZtX2RldmljZV9hdHRyX3NldCh2LmdpY19mZCwgS1ZNX0RFVl9BUk1fVkdJQ19HUlBfQ1RSTCxcXG4gXFx0XFx0XFx0ICAgIEtWTV9ERVZfQVJNX1ZHSUNfQ1RSTF9JTklULCBOVUxMKTtcXG5AQCAtNDIyLDcgKzQ1Miw4IEBAIHN0YXRpYyB2b2lkIHRlc3RfdjNfbmV3X3JlZGlzdF9yZWdpb25zKHZvaWQpXFxuIFxcbiBcXHQvKiBzdGVwMiAqL1xcbiBcXG4tXFx0diA9IHZtX2dpY19jcmVhdGVfd2l0aF92Y3B1cyhLVk1fREVWX1RZUEVfQVJNX1ZHSUNfVjMsIE5SX1ZDUFVTLCB2Y3B1cyk7XFxuK1xcdHYgPSB2bV9naWNfY3JlYXRlX3dpdGhfdmNwdXMoS1ZNX0RFVl9UWVBFX0FSTV9WR0lDX1YzLCBOUl9WQ1BVUyxcXG4rXFx0XFx0XFx0XFx0ICAgICBndWVzdF9jb2RlLCB2Y3B1cyk7XFxuIFxcdHN1YnRlc3RfdjNfcmVkaXN0X3JlZ2lvbnMoXFx1MDAyNnYpO1xcbiBcXG4gXFx0YWRkciA9IFJFRElTVF9SRUdJT05fQVRUUl9BRERSKDEsIDB4MjgwMDAwLCAwLCAyKTtcXG5AQCAtNDM2LDcgKzQ2Nyw4IEBAIHN0YXRpYyB2b2lkIHRlc3RfdjNfbmV3X3JlZGlzdF9yZWdpb25zKHZvaWQpXFxuIFxcbiBcXHQvKiBzdGVwIDMgKi9cXG4gXFxuLVxcdHYgPSB2bV9naWNfY3JlYXRlX3dpdGhfdmNwdXMoS1ZNX0RFVl9UWVBFX0FSTV9WR0lDX1YzLCBOUl9WQ1BVUywgdmNwdXMpO1xcbitcXHR2ID0gdm1fZ2ljX2NyZWF0ZV93aXRoX3ZjcHVzKEtWTV9ERVZfVFlQRV9BUk1fVkdJQ19WMywgTlJfVkNQVVMsXFxuK1xcdFxcdFxcdFxcdCAgICAgZ3Vlc3RfY29kZSwgdmNwdXMpO1xcbiBcXHRzdWJ0ZXN0X3YzX3JlZGlzdF9yZWdpb25zKFxcdTAwMjZ2KTtcXG4gXFxuIFxcdHJldCA9IF9fa3ZtX2RldmljZV9hdHRyX3NldCh2LmdpY19mZCwgS1ZNX0RFVl9BUk1fVkdJQ19HUlBfQUREUixcXG5AQCAtNDU3LDYgKzQ4OSw3MCBAQCBzdGF0aWMgdm9pZCB0ZXN0X3YzX25ld19yZWRpc3RfcmVnaW9ucyh2b2lkKVxcbiBcXHR2bV9naWNfZGVzdHJveShcXHUwMDI2dik7XFxuIH1cXG4gXFxuK3N0YXRpYyB2b2lkIHRlc3RfdjNfcmVkaXN0X3JlZ2lvbl9yZXRyeSh2b2lkKVxcbit7XFxuK1xcdHN0cnVjdCBrdm1fdmNwdSAqdmNwdXNbTlJfVkNQVVNdO1xcbitcXHRzdHJ1Y3Qgdm1fZ2ljIHY7XFxuK1xcdHN0cnVjdCB1Y2FsbCB1YztcXG4rXFx0dTY0IGFkZHI7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHR2ID0gdm1fZ2ljX2NyZWF0ZV93aXRoX3ZjcHVzKEtWTV9ERVZfVFlQRV9BUk1fVkdJQ19WMywgTlJfVkNQVVMsXFxuK1xcdFxcdFxcdFxcdCAgICAgZ3Vlc3RfY2hlY2tfcmVkaXN0X3JldHJ5LCB2Y3B1cyk7XFxuK1xcbitcXHRhZGRyID0gUkVESVNUX1JFR0lPTl9BVFRSX0FERFIoMiwgUkVESVNUX1JFVFJZX1JFR0lPTjBfQkFTRSwgMCwgMCk7XFxuK1xcdGt2bV9kZXZpY2VfYXR0cl9zZXQodi5naWNfZmQsIEtWTV9ERVZfQVJNX1ZHSUNfR1JQX0FERFIsXFxuK1xcdFxcdFxcdCAgICBLVk1fVkdJQ19WM19BRERSX1RZUEVfUkVESVNUX1JFR0lPTiwgXFx1MDAyNmFkZHIpO1xcbitcXG4rXFx0YWRkciA9IFJFRElTVF9SRUdJT05fQVRUUl9BRERSKDEsIFJFRElTVF9SRVRSWV9SRUdJT04xX0JBU0UsIDAsIDEpO1xcbitcXHRrdm1fZGV2aWNlX2F0dHJfc2V0KHYuZ2ljX2ZkLCBLVk1fREVWX0FSTV9WR0lDX0dSUF9BRERSLFxcbitcXHRcXHRcXHQgICAgS1ZNX1ZHSUNfVjNfQUREUl9UWVBFX1JFRElTVF9SRUdJT04sIFxcdTAwMjZhZGRyKTtcXG4rXFxuK1xcdGFkZHIgPSBSRURJU1RfUkVUUllfRElTVF9CQVNFO1xcbitcXHRrdm1fZGV2aWNlX2F0dHJfc2V0KHYuZ2ljX2ZkLCBLVk1fREVWX0FSTV9WR0lDX0dSUF9BRERSLFxcbitcXHRcXHRcXHQgICAgS1ZNX1ZHSUNfVjNfQUREUl9UWVBFX0RJU1QsIFxcdTAwMjZhZGRyKTtcXG4rXFxuK1xcdGFkZHIgPSBSRURJU1RfUkVHSU9OX0FUVFJfQUREUigxLCBSRURJU1RfUkVUUllfRElTVF9CQVNFLCAwLCAyKTtcXG4rXFx0cmV0ID0gX19rdm1fZGV2aWNlX2F0dHJfc2V0KHYuZ2ljX2ZkLCBLVk1fREVWX0FSTV9WR0lDX0dSUF9BRERSLFxcbitcXHRcXHRcXHRcXHQgICAgS1ZNX1ZHSUNfVjNfQUREUl9UWVBFX1JFRElTVF9SRUdJT04sXFxuK1xcdFxcdFxcdFxcdCAgICBcXHUwMDI2YWRkcik7XFxuK1xcdFRFU1RfQVNTRVJUKHJldCBcXHUwMDI2XFx1MDAyNiBlcnJubyA9PSBFSU5WQUwsXFxuK1xcdFxcdCAgICBcXFwicmVnaXN0ZXIgcmVkaXN0IHJlZ2lvbiBjb2xsaWRpbmcgd2l0aCBkaXN0XFxcIik7XFxuK1xcbitcXHRhZGRyID0gUkVESVNUX1JFR0lPTl9BVFRSX0FERFIoMSwgUkVESVNUX1JFVFJZX1JFR0lPTjJfQkFTRSwgMCwgMik7XFxuK1xcdGt2bV9kZXZpY2VfYXR0cl9zZXQodi5naWNfZmQsIEtWTV9ERVZfQVJNX1ZHSUNfR1JQX0FERFIsXFxuK1xcdFxcdFxcdCAgICBLVk1fVkdJQ19WM19BRERSX1RZUEVfUkVESVNUX1JFR0lPTiwgXFx1MDAyNmFkZHIpO1xcbitcXG4rXFx0dmlydF9tYXAodi52bSwgUkVESVNUX1JFVFJZX1JFR0lPTjBfQkFTRSwgUkVESVNUX1JFVFJZX1JFR0lPTjBfQkFTRSxcXG4rXFx0XFx0IHZtX2NhbGNfbnVtX2d1ZXN0X3BhZ2VzKHYudm0tXFx1MDAzZW1vZGUsXFxuK1xcdFxcdFxcdFxcdFxcdCAzICogS1ZNX1ZHSUNfVjNfUkVESVNUX1NJWkUpKTtcXG4rXFx0dmlydF9tYXAodi52bSwgUkVESVNUX1JFVFJZX1JFR0lPTjJfQkFTRSwgUkVESVNUX1JFVFJZX1JFR0lPTjJfQkFTRSxcXG4rXFx0XFx0IHZtX2NhbGNfbnVtX2d1ZXN0X3BhZ2VzKHYudm0tXFx1MDAzZW1vZGUsXFxuK1xcdFxcdFxcdFxcdFxcdCBLVk1fVkdJQ19WM19SRURJU1RfU0laRSkpO1xcbitcXG4rXFx0a3ZtX2RldmljZV9hdHRyX3NldCh2LmdpY19mZCwgS1ZNX0RFVl9BUk1fVkdJQ19HUlBfQ1RSTCxcXG4rXFx0XFx0XFx0ICAgIEtWTV9ERVZfQVJNX1ZHSUNfQ1RSTF9JTklULCBOVUxMKTtcXG4rXFxuK1xcdHZjcHVfcnVuKHZjcHVzWzBdKTtcXG4rXFx0c3dpdGNoIChnZXRfdWNhbGwodmNwdXNbMF0sIFxcdTAwMjZ1YykpIHtcXG4rXFx0Y2FzZSBVQ0FMTF9ET05FOlxcbitcXHRcXHRicmVhaztcXG4rXFx0Y2FzZSBVQ0FMTF9BQk9SVDpcXG4rXFx0XFx0UkVQT1JUX0dVRVNUX0FTU0VSVCh1Yyk7XFxuK1xcdFxcdGJyZWFrO1xcbitcXHRjYXNlIFVDQUxMX05PTkU6XFxuK1xcdFxcdGlmICh2Y3B1c1swXS1cXHUwMDNlcnVuLVxcdTAwM2VleGl0X3JlYXNvbiA9PSBLVk1fRVhJVF9NTUlPKVxcbitcXHRcXHRcXHRURVNUX0ZBSUwoXFxcIlVuZXhwZWN0ZWQgTU1JTyBleGl0IGF0IDB4JWxseFxcXCIsXFxuK1xcdFxcdFxcdFxcdCAgdmNwdXNbMF0tXFx1MDAzZXJ1bi1cXHUwMDNlbW1pby5waHlzX2FkZHIpO1xcbitcXHRcXHRmYWxsdGhyb3VnaDtcXG4rXFx0ZGVmYXVsdDpcXG4rXFx0XFx0VEVTVF9GQUlMKFxcXCJVbmV4cGVjdGVkIHVjYWxsICVsdSwgZXhpdF9yZWFzb24gJXVcXFwiLFxcbitcXHRcXHRcXHQgIHVjLmNtZCwgdmNwdXNbMF0tXFx1MDAzZXJ1bi1cXHUwMDNlZXhpdF9yZWFzb24pO1xcbitcXHR9XFxuK1xcbitcXHR2bV9naWNfZGVzdHJveShcXHUwMDI2dik7XFxuK31cXG4rXFxuIHN0YXRpYyB2b2lkIHRlc3RfdjNfdHlwZXJfYWNjZXNzZXModm9pZClcXG4ge1xcbiBcXHRzdHJ1Y3Qgdm1fZ2ljIHY7XFxuQEAgLTYwOCw3ICs3MDQsOCBAQCBzdGF0aWMgdm9pZCB0ZXN0X3YzX3JlZGlzdF9pcGFfcmFuZ2VfY2hlY2tfYXRfdmNwdV9ydW4odm9pZClcXG4gXFx0aW50IHJldCwgaTtcXG4gXFx0dTY0IGFkZHI7XFxuIFxcbi1cXHR2ID0gdm1fZ2ljX2NyZWF0ZV93aXRoX3ZjcHVzKEtWTV9ERVZfVFlQRV9BUk1fVkdJQ19WMywgMSwgdmNwdXMpO1xcbitcXHR2ID0gdm1fZ2ljX2NyZWF0ZV93aXRoX3ZjcHVzKEtWTV9ERVZfVFlQRV9BUk1fVkdJQ19WMywgMSwgZ3Vlc3RfY29kZSxcXG4rXFx0XFx0XFx0XFx0ICAgICB2Y3B1cyk7XFxuIFxcbiBcXHQvKiBTZXQgc3BhY2UgZm9yIDMgcmVkaXN0cywgd2UgaGF2ZSAxIHZjcHUsIHNvIHRoaXMgc3VjY2VlZHMuICovXFxuIFxcdGFkZHIgPSBtYXhfcGh5c19zaXplIC0gKDMgKiAyICogMHgxMDAwMCk7XFxuQEAgLTY0MSw3ICs3MzgsOCBAQCBzdGF0aWMgdm9pZCB0ZXN0X3YzX2l0c19yZWdpb24odm9pZClcXG4gXFx0dTY0IGFkZHI7XFxuIFxcdGludCBpdHNfZmQsIHJldDtcXG4gXFxuLVxcdHYgPSB2bV9naWNfY3JlYXRlX3dpdGhfdmNwdXMoS1ZNX0RFVl9UWVBFX0FSTV9WR0lDX1YzLCBOUl9WQ1BVUywgdmNwdXMpO1xcbitcXHR2ID0gdm1fZ2ljX2NyZWF0ZV93aXRoX3ZjcHVzKEtWTV9ERVZfVFlQRV9BUk1fVkdJQ19WMywgTlJfVkNQVVMsXFxuK1xcdFxcdFxcdFxcdCAgICAgZ3Vlc3RfY29kZSwgdmNwdXMpO1xcbiBcXHRpdHNfZmQgPSBrdm1fY3JlYXRlX2RldmljZSh2LnZtLCBLVk1fREVWX1RZUEVfQVJNX1ZHSUNfSVRTKTtcXG4gXFxuIFxcdGFkZHIgPSAweDQwMTAwMDtcXG5AQCAtNjg0LDcgKzc4Miw4IEBAIHN0YXRpYyB2b2lkIHRlc3RfdjNfbmFzc2dpY2FwKHZvaWQpXFxuIFxcdHUzMiB0eXBlcjI7XFxuIFxcdGludCByZXQ7XFxuIFxcbi1cXHR2bSA9IHZtX2dpY19jcmVhdGVfd2l0aF92Y3B1cyhLVk1fREVWX1RZUEVfQVJNX1ZHSUNfVjMsIE5SX1ZDUFVTLCB2Y3B1cyk7XFxuK1xcdHZtID0gdm1fZ2ljX2NyZWF0ZV93aXRoX3ZjcHVzKEtWTV9ERVZfVFlQRV9BUk1fVkdJQ19WMywgTlJfVkNQVVMsXFxuK1xcdFxcdFxcdFxcdCAgICAgIGd1ZXN0X2NvZGUsIHZjcHVzKTtcXG4gXFx0a3ZtX2RldmljZV9hdHRyX2dldCh2bS5naWNfZmQsIEtWTV9ERVZfQVJNX1ZHSUNfR1JQX0RJU1RfUkVHUyxcXG4gXFx0XFx0XFx0ICAgIEdJQ0RfVFlQRVIyLCBcXHUwMDI2dHlwZXIyKTtcXG4gXFx0aGFzX25hc3NnaWNhcCA9IHR5cGVyMiBcXHUwMDI2IEdJQ0RfVFlQRVIyX25BU1NHSWNhcDtcXG5AQCAtOTc4LDYgKzEwNzcsNyBAQCB2b2lkIHJ1bl90ZXN0cyh1MzIgZ2ljX2Rldl90eXBlKVxcbiBcXG4gXFx0aWYgKFZHSUNfREVWX0lTX1YzKGdpY19kZXZfdHlwZSkpIHtcXG4gXFx0XFx0dGVzdF92M19uZXdfcmVkaXN0X3JlZ2lvbnMoKTtcXG4rXFx0XFx0dGVzdF92M19yZWRpc3RfcmVnaW9uX3JldHJ5KCk7XFxuIFxcdFxcdHRlc3RfdjNfdHlwZXJfYWNjZXNzZXMoKTtcXG4gXFx0XFx0dGVzdF92M19sYXN0X2JpdF9yZWRpc3RfcmVnaW9ucygpO1xcbiBcXHRcXHR0ZXN0X3YzX2xhc3RfYml0X3NpbmdsZV9yZGlzdCgpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQwODoyNjoyNC45MTk4NTUxMTNaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjM0MzU5NjAyMDM4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIktWTVwiLFxuICAgIFwiVklSVFVBTElaQVRJT05cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ2Z2ljX3YzX3NldF9yZWRpc3RfYmFzZVwiLFxuICAgIFwidmdpY19yZWdpc3Rlcl9yZWRpc3RfaW9kZXZcIixcbiAgICBcInZnaWNfdW5yZWdpc3Rlcl9yZWRpc3RfaW9kZXZcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBlcnJvciB1bndpbmRpbmcgYW5kIHJvbGxiYWNrIGhhbmRsaW5nIHdoZW4gcmVnaXN0ZXJpbmcgVkdJQ3YzIHJlZGlzdHJpYnV0b3IgSS9PIGRldmljZXMgaW4gQVJNNjQgS1ZNLiBJdCBlbnN1cmVzIHRoYXQgZmFpbGVkIHJlZGlzdHJpYnV0b3IgcmVnaXN0cmF0aW9uIHByb3Blcmx5IHJvbGxzIGJhY2sgdGhlIGFzc2lnbmVkIHJlZ2lvbiBzdGF0ZSBhbmQgb25seSB0ZWFycyBkb3duIFZDUFVzIGFzc29jaWF0ZWQgd2l0aCB0aGUgZmFpbGluZyByZWdpb24uIFRoZXNlIGNvZGUgcGF0aHMgYXJlIHJlYWNoYWJsZSB2aWEgS1ZNIGlvY3RscyBhbmQgd29ydGggZnV6emluZyBmb3IgY29uY3VycmVuY3kgYW5kIHN0YXRlIG1hbmFnZW1lbnQgYnVncy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgYWM4ZmM3YTU0Y2YxNzIyMjc0YzgzNDJjZjFmMDg2MmExNDU5OWI2OFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gQXVnIDMxIDA4OjI2OjIzIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLW1taW8tdjMuYyBiL2FyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1tbWlvLXYzLmNcbmluZGV4IDU5MTNhMjBkODMwMTkuLjc3YWE4NDMzNzAxYTEgMTAwNjQ0XG4tLS0gYS9hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtbW1pby12My5jXG4rKysgYi9hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtbW1pby12My5jXG5AQCAtNzY2LDYgKzc2NiwxOSBAQCB1bnNpZ25lZCBpbnQgdmdpY192M19pbml0X2Rpc3RfaW9kZXYoc3RydWN0IHZnaWNfaW9fZGV2aWNlICpkZXYpXG4gXHRyZXR1cm4gU1pfNjRLO1xuIH1cbiBcbitzdGF0aWMgdm9pZCB2Z2ljX3VuZG9fcmVkaXN0X2Fzc2lnbm1lbnQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuK3tcbitcdHN0cnVjdCB2Z2ljX2NwdSAqdmdpY19jcHUgPSBcdTAwMjZ2Y3B1LVx1MDAzZWFyY2gudmdpY19jcHU7XG4rXG4rXHRsb2NrZGVwX2Fzc2VydF9oZWxkKFx1MDAyNnZjcHUtXHUwMDNla3ZtLVx1MDAzZXNsb3RzX2xvY2spO1xuK1xuK1x0Z3VhcmQobXV0ZXgpKFx1MDAyNnZjcHUtXHUwMDNla3ZtLVx1MDAzZWFyY2guY29uZmlnX2xvY2spO1xuK1xuK1x0dmdpY19jcHUtXHUwMDNlcmRyZWctXHUwMDNlZnJlZV9pbmRleC0tO1xuK1x0dmdpY19jcHUtXHUwMDNlcmRyZWcgPSBOVUxMO1xuK1x0dmdpY19jcHUtXHUwMDNlcmRfaW9kZXYuYmFzZV9hZGRyID0gVkdJQ19BRERSX1VOREVGO1xuK31cbitcbiAvKipcbiAgKiB2Z2ljX3JlZ2lzdGVyX3JlZGlzdF9pb2RldiAtIHJlZ2lzdGVyIGEgc2luZ2xlIHJlZGlzdCBpb2RldlxuICAqIEB2Y3B1OiAgICBUaGUgVkNQVSB0byB3aGljaCB0aGUgcmVkaXN0cmlidXRvciBiZWxvbmdzXG5AQCAtODE4LDE2ICs4MzEsMTcgQEAgaW50IHZnaWNfcmVnaXN0ZXJfcmVkaXN0X2lvZGV2KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBcdHJkX2Rldi1cdTAwM2Vucl9yZWdpb25zID0gQVJSQVlfU0laRSh2Z2ljX3YzX3JkX3JlZ2lzdGVycyk7XG4gXHRyZF9kZXYtXHUwMDNlcmVkaXN0X3ZjcHUgPSB2Y3B1O1xuIFxuK1x0LyogUHJvdGVjdGVkIGJ5IHNsb3RzX2xvY2sgKi9cbitcdHJkcmVnLVx1MDAzZWZyZWVfaW5kZXgrKztcbitcbiBcdG11dGV4X3VubG9jayhcdTAwMjZrdm0tXHUwMDNlYXJjaC5jb25maWdfbG9jayk7XG4gXG4gXHRyZXQgPSBrdm1faW9fYnVzX3JlZ2lzdGVyX2Rldihrdm0sIEtWTV9NTUlPX0JVUywgcmRfYmFzZSxcbiBcdFx0XHRcdCAgICAgIDIgKiBTWl82NEssIFx1MDAyNnJkX2Rldi1cdTAwM2VkZXYpO1xuIFx0aWYgKHJldClcbi1cdFx0cmV0dXJuIHJldDtcbitcdFx0dmdpY191bmRvX3JlZGlzdF9hc3NpZ25tZW50KHZjcHUpO1xuIFxuLVx0LyogUHJvdGVjdGVkIGJ5IHNsb3RzX2xvY2sgKi9cbi1cdHJkcmVnLVx1MDAzZWZyZWVfaW5kZXgrKztcbi1cdHJldHVybiAwO1xuK1x0cmV0dXJuIHJldDtcbiBcbiBvdXRfdW5sb2NrOlxuIFx0bXV0ZXhfdW5sb2NrKFx1MDAyNmt2bS1cdTAwM2VhcmNoLmNvbmZpZ19sb2NrKTtcbkBAIC04NDEsNyArODU1LDI1IEBAIHZvaWQgdmdpY191bnJlZ2lzdGVyX3JlZGlzdF9pb2RldihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXHRrdm1faW9fYnVzX3VucmVnaXN0ZXJfZGV2KHZjcHUtXHUwMDNla3ZtLCBLVk1fTU1JT19CVVMsIFx1MDAyNnJkX2Rldi1cdTAwM2VkZXYpO1xuIH1cbiBcbi1zdGF0aWMgaW50IHZnaWNfcmVnaXN0ZXJfYWxsX3JlZGlzdF9pb2RldnMoc3RydWN0IGt2bSAqa3ZtKVxuK3N0YXRpYyB2b2lkIHZnaWNfcm9sbGJhY2tfcmVkaXN0X2lvZGV2KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbitcdFx0XHRcdCAgICAgICBzdHJ1Y3QgdmdpY19yZWRpc3RfcmVnaW9uICpyZHJlZylcbit7XG4rXHRzdHJ1Y3QgdmdpY19jcHUgKnZnaWNfY3B1ID0gXHUwMDI2dmNwdS1cdTAwM2VhcmNoLnZnaWNfY3B1O1xuK1xuK1x0bG9ja2RlcF9hc3NlcnRfaGVsZChcdTAwMjZ2Y3B1LVx1MDAzZWt2bS1cdTAwM2VzbG90c19sb2NrKTtcbitcbitcdGlmICh2Z2ljX2NwdS1cdTAwM2VyZHJlZyAhPSByZHJlZylcbitcdFx0cmV0dXJuO1xuK1xuK1x0dmdpY191bnJlZ2lzdGVyX3JlZGlzdF9pb2Rldih2Y3B1KTtcbitcbitcdGd1YXJkKG11dGV4KShcdTAwMjZ2Y3B1LVx1MDAzZWt2bS1cdTAwM2VhcmNoLmNvbmZpZ19sb2NrKTtcbitcdHZnaWNfY3B1LVx1MDAzZXJkcmVnID0gTlVMTDtcbitcdHZnaWNfY3B1LVx1MDAzZXJkX2lvZGV2LmJhc2VfYWRkciA9IFZHSUNfQUREUl9VTkRFRjtcbit9XG4rXG4rc3RhdGljIGludCB2Z2ljX3JlZ2lzdGVyX2FsbF9yZWRpc3RfaW9kZXZzKHN0cnVjdCBrdm0gKmt2bSxcbitcdFx0XHRcdFx0ICAgc3RydWN0IHZnaWNfcmVkaXN0X3JlZ2lvbiAqcmRyZWcpXG4ge1xuIFx0c3RydWN0IGt2bV92Y3B1ICp2Y3B1O1xuIFx0dW5zaWduZWQgbG9uZyBjO1xuQEAgLTg1NiwxMiArODg4LDEyIEBAIHN0YXRpYyBpbnQgdmdpY19yZWdpc3Rlcl9hbGxfcmVkaXN0X2lvZGV2cyhzdHJ1Y3Qga3ZtICprdm0pXG4gXHR9XG4gXG4gXHRpZiAocmV0KSB7XG4tXHRcdC8qIFRoZSBjdXJyZW50IGMgZmFpbGVkLCBzbyBpdGVyYXRlIG92ZXIgdGhlIHByZXZpb3VzIG9uZXMuICovXG4rXHRcdC8qIFVuZG8gYXNzaWdubWVudHMgbWFkZSBmcm9tIHRoZSByZWdpb24gYmVpbmcgYWRkZWQuICovXG4gXHRcdGludCBpO1xuIFxuIFx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBjOyBpKyspIHtcbiBcdFx0XHR2Y3B1ID0ga3ZtX2dldF92Y3B1KGt2bSwgaSk7XG4tXHRcdFx0dmdpY191bnJlZ2lzdGVyX3JlZGlzdF9pb2Rldih2Y3B1KTtcbitcdFx0XHR2Z2ljX3JvbGxiYWNrX3JlZGlzdF9pb2Rldih2Y3B1LCByZHJlZyk7XG4gXHRcdH1cbiBcdH1cbiBcbkBAIC05NzAsMTAgKzEwMDIsMTMgQEAgdm9pZCB2Z2ljX3YzX2ZyZWVfcmVkaXN0X3JlZ2lvbihzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCB2Z2ljX3JlZGlzdF9yZWdpb24gKnJkcmVcbiBcbiBpbnQgdmdpY192M19zZXRfcmVkaXN0X2Jhc2Uoc3RydWN0IGt2bSAqa3ZtLCB1MzIgaW5kZXgsIHU2NCBhZGRyLCB1MzIgY291bnQpXG4ge1xuK1x0c3RydWN0IHZnaWNfcmVkaXN0X3JlZ2lvbiAqcmRyZWc7XG4gXHRpbnQgcmV0O1xuIFxuIFx0bXV0ZXhfbG9jayhcdTAwMjZrdm0tXHUwMDNlYXJjaC5jb25maWdfbG9jayk7XG4gXHRyZXQgPSB2Z2ljX3YzX2FsbG9jX3JlZGlzdF9yZWdpb24oa3ZtLCBpbmRleCwgYWRkciwgY291bnQpO1xuK1x0aWYgKCFyZXQpXG4rXHRcdHJkcmVnID0gdmdpY192M19yZGlzdF9yZWdpb25fZnJvbV9pbmRleChrdm0sIGluZGV4KTtcbiBcdG11dGV4X3VubG9jayhcdTAwMjZrdm0tXHUwMDNlYXJjaC5jb25maWdfbG9jayk7XG4gXHRpZiAocmV0KVxuIFx0XHRyZXR1cm4gcmV0O1xuQEAgLTk4MiwxMiArMTAxNyw5IEBAIGludCB2Z2ljX3YzX3NldF9yZWRpc3RfYmFzZShzdHJ1Y3Qga3ZtICprdm0sIHUzMiBpbmRleCwgdTY0IGFkZHIsIHUzMiBjb3VudClcbiBcdCAqIFJlZ2lzdGVyIGlvZGV2cyBmb3IgZWFjaCBleGlzdGluZyBWQ1BVLiAgQWRkaW5nIG1vcmUgVkNQVXNcbiBcdCAqIGFmdGVyd2FyZHMgd2lsbCByZWdpc3RlciB0aGUgaW9kZXZzIHdoZW4gbmVlZGVkLlxuIFx0ICovXG4tXHRyZXQgPSB2Z2ljX3JlZ2lzdGVyX2FsbF9yZWRpc3RfaW9kZXZzKGt2bSk7XG4rXHRyZXQgPSB2Z2ljX3JlZ2lzdGVyX2FsbF9yZWRpc3RfaW9kZXZzKGt2bSwgcmRyZWcpO1xuIFx0aWYgKHJldCkge1xuLVx0XHRzdHJ1Y3QgdmdpY19yZWRpc3RfcmVnaW9uICpyZHJlZztcbi1cbiBcdFx0bXV0ZXhfbG9jayhcdTAwMjZrdm0tXHUwMDNlYXJjaC5jb25maWdfbG9jayk7XG4tXHRcdHJkcmVnID0gdmdpY192M19yZGlzdF9yZWdpb25fZnJvbV9pbmRleChrdm0sIGluZGV4KTtcbiBcdFx0dmdpY192M19mcmVlX3JlZGlzdF9yZWdpb24oa3ZtLCByZHJlZyk7XG4gXHRcdG11dGV4X3VubG9jayhcdTAwMjZrdm0tXHUwMDNlYXJjaC5jb25maWdfbG9jayk7XG4gXHRcdHJldHVybiByZXQ7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2FybTY0L3ZnaWNfaW5pdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2FybTY0L3ZnaWNfaW5pdC5jXG5pbmRleCA0N2UzNGI0M2FmYjI5Li41YTMwZjNjYjAzOWJlIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2FybTY0L3ZnaWNfaW5pdC5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vYXJtNjQvdmdpY19pbml0LmNcbkBAIC01LDYgKzUsNyBAQFxuICAqIENvcHlyaWdodCAoQykgMjAyMCwgUmVkIEhhdCwgSW5jLlxuICAqL1xuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2tlcm5lbC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvc2l6ZXMuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY3N5cy9zeXNjYWxsLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2Nhc20va3ZtLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2Nhc20va3ZtX3BhcmEuaFx1MDAzZVxuQEAgLTEzLDEyICsxNCwyMSBAQFxuIFxuICNpbmNsdWRlIFwidGVzdF91dGlsLmhcIlxuICNpbmNsdWRlIFwia3ZtX3V0aWwuaFwiXG4rI2luY2x1ZGUgXCJnaWMuaFwiXG4gI2luY2x1ZGUgXCJwcm9jZXNzb3IuaFwiXG4gI2luY2x1ZGUgXCJ2Z2ljLmhcIlxuICNpbmNsdWRlIFwiZ2ljX3YzLmhcIlxuIFxuICNkZWZpbmUgTlJfVkNQVVNcdFx0NFxuIFxuKyNkZWZpbmUgUkVESVNUX1JFVFJZX1JFR0lPTjBfQkFTRVx0R0lDUl9CQVNFX0dQQVxuKyNkZWZpbmUgUkVESVNUX1JFVFJZX1JFR0lPTjFfQkFTRVx0XFxcbitcdChSRURJU1RfUkVUUllfUkVHSU9OMF9CQVNFICsgMiAqIEtWTV9WR0lDX1YzX1JFRElTVF9TSVpFKVxuKyNkZWZpbmUgUkVESVNUX1JFVFJZX0RJU1RfQkFTRVx0XHRcXFxuK1x0KFJFRElTVF9SRVRSWV9SRUdJT04xX0JBU0UgKyBLVk1fVkdJQ19WM19SRURJU1RfU0laRSlcbisjZGVmaW5lIFJFRElTVF9SRVRSWV9SRUdJT04yX0JBU0VcdFxcXG4rXHQoUkVESVNUX1JFVFJZX0RJU1RfQkFTRSArIEtWTV9WR0lDX1YzX0RJU1RfU0laRSlcbitcbiAjZGVmaW5lIFJFR19PRkZTRVQodmNwdSwgb2Zmc2V0KSAoKCh1NjQpdmNwdSBcdTAwM2NcdTAwM2MgMzIpIHwgb2Zmc2V0KVxuIFxuICNkZWZpbmUgVkdJQ19ERVZfSVNfVjIoX2QpICgoX2QpID09IEtWTV9ERVZfVFlQRV9BUk1fVkdJQ19WMilcbkBAIC02NSw2ICs3NSwyMyBAQCBzdGF0aWMgdm9pZCBndWVzdF9jb2RlKHZvaWQpXG4gXHRHVUVTVF9ET05FKCk7XG4gfVxuIFxuK3N0YXRpYyB2b2lkIGd1ZXN0X2NoZWNrX3JlZGlzdF9yZXRyeSh2b2lkKVxuK3tcbitcdHVuc2lnbmVkIGludCBpO1xuK1xuK1x0LyogVGhlIGZpcnN0IHRocmVlIHJlZGlzdHJpYnV0b3JzIHNwYW4gYWRqYWNlbnQgcmVnaW9ucyAwIGFuZCAxLiAqL1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgTlJfVkNQVVM7IGkrKykge1xuK1x0XHR1NjQgYmFzZSA9IGkgXHUwMDNjIDMgPyBSRURJU1RfUkVUUllfUkVHSU9OMF9CQVNFICtcbitcdFx0XHRcdCAgICAgICBpICogS1ZNX1ZHSUNfVjNfUkVESVNUX1NJWkUgOlxuK1x0XHRcdFx0ICAgICAgIFJFRElTVF9SRVRSWV9SRUdJT04yX0JBU0U7XG4rXHRcdHU2NCB0eXBlciA9IHJlYWRxKCh2b2lkICopKHVuc2lnbmVkIGxvbmcpKGJhc2UgKyBHSUNSX1RZUEVSKSk7XG4rXG4rXHRcdEdVRVNUX0FTU0VSVF9FUShHSUNSX1RZUEVSX0NQVV9OVU1CRVIodHlwZXIpLCBpKTtcbitcdH1cbitcbitcdEdVRVNUX0RPTkUoKTtcbit9XG4rXG4gLyogd2UgZG9uJ3Qgd2FudCB0byBhc3NlcnQgb24gcnVuIGV4ZWN1dGlvbiwgaGVuY2UgdGhhdCBoZWxwZXIgKi9cbiBzdGF0aWMgaW50IHJ1bl92Y3B1KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiB7XG5AQCAtNzMsNiArMTAwLDcgQEAgc3RhdGljIGludCBydW5fdmNwdShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXG4gc3RhdGljIHN0cnVjdCB2bV9naWMgdm1fZ2ljX2NyZWF0ZV93aXRoX3ZjcHVzKHUzMiBnaWNfZGV2X3R5cGUsXG4gXHRcdFx0XHRcdCAgICAgIHUzMiBucl92Y3B1cyxcbitcdFx0XHRcdFx0ICAgICAgdm9pZCAqZ3Vlc3RfY29kZSxcbiBcdFx0XHRcdFx0ICAgICAgc3RydWN0IGt2bV92Y3B1ICp2Y3B1c1tdKVxuIHtcbiBcdHN0cnVjdCB2bV9naWMgdjtcbkBAIC0zMzgsNyArMzY2LDcgQEAgc3RhdGljIHZvaWQgdGVzdF92Z2ljX3RoZW5fdmNwdXModTMyIGdpY19kZXZfdHlwZSlcbiBcdHN0cnVjdCB2bV9naWMgdjtcbiBcdGludCByZXQsIGk7XG4gXG4tXHR2ID0gdm1fZ2ljX2NyZWF0ZV93aXRoX3ZjcHVzKGdpY19kZXZfdHlwZSwgMSwgdmNwdXMpO1xuK1x0diA9IHZtX2dpY19jcmVhdGVfd2l0aF92Y3B1cyhnaWNfZGV2X3R5cGUsIDEsIGd1ZXN0X2NvZGUsIHZjcHVzKTtcbiBcbiBcdHN1YnRlc3RfZGlzdF9yZGlzdChcdTAwMjZ2KTtcbiBcbkBAIC0zNTksNyArMzg3LDggQEAgc3RhdGljIHZvaWQgdGVzdF92Y3B1c190aGVuX3ZnaWModTMyIGdpY19kZXZfdHlwZSlcbiBcdHN0cnVjdCB2bV9naWMgdjtcbiBcdGludCByZXQ7XG4gXG4tXHR2ID0gdm1fZ2ljX2NyZWF0ZV93aXRoX3ZjcHVzKGdpY19kZXZfdHlwZSwgTlJfVkNQVVMsIHZjcHVzKTtcbitcdHYgPSB2bV9naWNfY3JlYXRlX3dpdGhfdmNwdXMoZ2ljX2Rldl90eXBlLCBOUl9WQ1BVUywgZ3Vlc3RfY29kZSxcbitcdFx0XHRcdCAgICAgdmNwdXMpO1xuIFxuIFx0c3VidGVzdF9kaXN0X3JkaXN0KFx1MDAyNnYpO1xuIFxuQEAgLTQxMSw3ICs0NDAsOCBAQCBzdGF0aWMgdm9pZCB0ZXN0X3YzX25ld19yZWRpc3RfcmVnaW9ucyh2b2lkKVxuIFx0dTY0IGFkZHI7XG4gXHRpbnQgcmV0O1xuIFxuLVx0diA9IHZtX2dpY19jcmVhdGVfd2l0aF92Y3B1cyhLVk1fREVWX1RZUEVfQVJNX1ZHSUNfVjMsIE5SX1ZDUFVTLCB2Y3B1cyk7XG4rXHR2ID0gdm1fZ2ljX2NyZWF0ZV93aXRoX3ZjcHVzKEtWTV9ERVZfVFlQRV9BUk1fVkdJQ19WMywgTlJfVkNQVVMsXG4rXHRcdFx0XHQgICAgIGd1ZXN0X2NvZGUsIHZjcHVzKTtcbiBcdHN1YnRlc3RfdjNfcmVkaXN0X3JlZ2lvbnMoXHUwMDI2dik7XG4gXHRrdm1fZGV2aWNlX2F0dHJfc2V0KHYuZ2ljX2ZkLCBLVk1fREVWX0FSTV9WR0lDX0dSUF9DVFJMLFxuIFx0XHRcdCAgICBLVk1fREVWX0FSTV9WR0lDX0NUUkxfSU5JVCwgTlVMTCk7XG5AQCAtNDIyLDcgKzQ1Miw4IEBAIHN0YXRpYyB2b2lkIHRlc3RfdjNfbmV3X3JlZGlzdF9yZWdpb25zKHZvaWQpXG4gXG4gXHQvKiBzdGVwMiAqL1xuIFxuLVx0diA9IHZtX2dpY19jcmVhdGVfd2l0aF92Y3B1cyhLVk1fREVWX1RZUEVfQVJNX1ZHSUNfVjMsIE5SX1ZDUFVTLCB2Y3B1cyk7XG4rXHR2ID0gdm1fZ2ljX2NyZWF0ZV93aXRoX3ZjcHVzKEtWTV9ERVZfVFlQRV9BUk1fVkdJQ19WMywgTlJfVkNQVVMsXG4rXHRcdFx0XHQgICAgIGd1ZXN0X2NvZGUsIHZjcHVzKTtcbiBcdHN1YnRlc3RfdjNfcmVkaXN0X3JlZ2lvbnMoXHUwMDI2dik7XG4gXG4gXHRhZGRyID0gUkVESVNUX1JFR0lPTl9BVFRSX0FERFIoMSwgMHgyODAwMDAsIDAsIDIpO1xuQEAgLTQzNiw3ICs0NjcsOCBAQCBzdGF0aWMgdm9pZCB0ZXN0X3YzX25ld19yZWRpc3RfcmVnaW9ucyh2b2lkKVxuIFxuIFx0Lyogc3RlcCAzICovXG4gXG4tXHR2ID0gdm1fZ2ljX2NyZWF0ZV93aXRoX3ZjcHVzKEtWTV9ERVZfVFlQRV9BUk1fVkdJQ19WMywgTlJfVkNQVVMsIHZjcHVzKTtcbitcdHYgPSB2bV9naWNfY3JlYXRlX3dpdGhfdmNwdXMoS1ZNX0RFVl9UWVBFX0FSTV9WR0lDX1YzLCBOUl9WQ1BVUyxcbitcdFx0XHRcdCAgICAgZ3Vlc3RfY29kZSwgdmNwdXMpO1xuIFx0c3VidGVzdF92M19yZWRpc3RfcmVnaW9ucyhcdTAwMjZ2KTtcbiBcbiBcdHJldCA9IF9fa3ZtX2RldmljZV9hdHRyX3NldCh2LmdpY19mZCwgS1ZNX0RFVl9BUk1fVkdJQ19HUlBfQUREUixcbkBAIC00NTcsNiArNDg5LDcwIEBAIHN0YXRpYyB2b2lkIHRlc3RfdjNfbmV3X3JlZGlzdF9yZWdpb25zKHZvaWQpXG4gXHR2bV9naWNfZGVzdHJveShcdTAwMjZ2KTtcbiB9XG4gXG4rc3RhdGljIHZvaWQgdGVzdF92M19yZWRpc3RfcmVnaW9uX3JldHJ5KHZvaWQpXG4re1xuK1x0c3RydWN0IGt2bV92Y3B1ICp2Y3B1c1tOUl9WQ1BVU107XG4rXHRzdHJ1Y3Qgdm1fZ2ljIHY7XG4rXHRzdHJ1Y3QgdWNhbGwgdWM7XG4rXHR1NjQgYWRkcjtcbitcdGludCByZXQ7XG4rXG4rXHR2ID0gdm1fZ2ljX2NyZWF0ZV93aXRoX3ZjcHVzKEtWTV9ERVZfVFlQRV9BUk1fVkdJQ19WMywgTlJfVkNQVVMsXG4rXHRcdFx0XHQgICAgIGd1ZXN0X2NoZWNrX3JlZGlzdF9yZXRyeSwgdmNwdXMpO1xuK1xuK1x0YWRkciA9IFJFRElTVF9SRUdJT05fQVRUUl9BRERSKDIsIFJFRElTVF9SRVRSWV9SRUdJT04wX0JBU0UsIDAsIDApO1xuK1x0a3ZtX2RldmljZV9hdHRyX3NldCh2LmdpY19mZCwgS1ZNX0RFVl9BUk1fVkdJQ19HUlBfQUREUixcbitcdFx0XHQgICAgS1ZNX1ZHSUNfVjNfQUREUl9UWVBFX1JFRElTVF9SRUdJT04sIFx1MDAyNmFkZHIpO1xuK1xuK1x0YWRkciA9IFJFRElTVF9SRUdJT05fQVRUUl9BRERSKDEsIFJFRElTVF9SRVRSWV9SRUdJT04xX0JBU0UsIDAsIDEpO1xuK1x0a3ZtX2RldmljZV9hdHRyX3NldCh2LmdpY19mZCwgS1ZNX0RFVl9BUk1fVkdJQ19HUlBfQUREUixcbitcdFx0XHQgICAgS1ZNX1ZHSUNfVjNfQUREUl9UWVBFX1JFRElTVF9SRUdJT04sIFx1MDAyNmFkZHIpO1xuK1xuK1x0YWRkciA9IFJFRElTVF9SRVRSWV9ESVNUX0JBU0U7XG4rXHRrdm1fZGV2aWNlX2F0dHJfc2V0KHYuZ2ljX2ZkLCBLVk1fREVWX0FSTV9WR0lDX0dSUF9BRERSLFxuK1x0XHRcdCAgICBLVk1fVkdJQ19WM19BRERSX1RZUEVfRElTVCwgXHUwMDI2YWRkcik7XG4rXG4rXHRhZGRyID0gUkVESVNUX1JFR0lPTl9BVFRSX0FERFIoMSwgUkVESVNUX1JFVFJZX0RJU1RfQkFTRSwgMCwgMik7XG4rXHRyZXQgPSBfX2t2bV9kZXZpY2VfYXR0cl9zZXQodi5naWNfZmQsIEtWTV9ERVZfQVJNX1ZHSUNfR1JQX0FERFIsXG4rXHRcdFx0XHQgICAgS1ZNX1ZHSUNfVjNfQUREUl9UWVBFX1JFRElTVF9SRUdJT04sXG4rXHRcdFx0XHQgICAgXHUwMDI2YWRkcik7XG4rXHRURVNUX0FTU0VSVChyZXQgXHUwMDI2XHUwMDI2IGVycm5vID09IEVJTlZBTCxcbitcdFx0ICAgIFwicmVnaXN0ZXIgcmVkaXN0IHJlZ2lvbiBjb2xsaWRpbmcgd2l0aCBkaXN0XCIpO1xuK1xuK1x0YWRkciA9IFJFRElTVF9SRUdJT05fQVRUUl9BRERSKDEsIFJFRElTVF9SRVRSWV9SRUdJT04yX0JBU0UsIDAsIDIpO1xuK1x0a3ZtX2RldmljZV9hdHRyX3NldCh2LmdpY19mZCwgS1ZNX0RFVl9BUk1fVkdJQ19HUlBfQUREUixcbitcdFx0XHQgICAgS1ZNX1ZHSUNfVjNfQUREUl9UWVBFX1JFRElTVF9SRUdJT04sIFx1MDAyNmFkZHIpO1xuK1xuK1x0dmlydF9tYXAodi52bSwgUkVESVNUX1JFVFJZX1JFR0lPTjBfQkFTRSwgUkVESVNUX1JFVFJZX1JFR0lPTjBfQkFTRSxcbitcdFx0IHZtX2NhbGNfbnVtX2d1ZXN0X3BhZ2VzKHYudm0tXHUwMDNlbW9kZSxcbitcdFx0XHRcdFx0IDMgKiBLVk1fVkdJQ19WM19SRURJU1RfU0laRSkpO1xuK1x0dmlydF9tYXAodi52bSwgUkVESVNUX1JFVFJZX1JFR0lPTjJfQkFTRSwgUkVESVNUX1JFVFJZX1JFR0lPTjJfQkFTRSxcbitcdFx0IHZtX2NhbGNfbnVtX2d1ZXN0X3BhZ2VzKHYudm0tXHUwMDNlbW9kZSxcbitcdFx0XHRcdFx0IEtWTV9WR0lDX1YzX1JFRElTVF9TSVpFKSk7XG4rXG4rXHRrdm1fZGV2aWNlX2F0dHJfc2V0KHYuZ2ljX2ZkLCBLVk1fREVWX0FSTV9WR0lDX0dSUF9DVFJMLFxuK1x0XHRcdCAgICBLVk1fREVWX0FSTV9WR0lDX0NUUkxfSU5JVCwgTlVMTCk7XG4rXG4rXHR2Y3B1X3J1bih2Y3B1c1swXSk7XG4rXHRzd2l0Y2ggKGdldF91Y2FsbCh2Y3B1c1swXSwgXHUwMDI2dWMpKSB7XG4rXHRjYXNlIFVDQUxMX0RPTkU6XG4rXHRcdGJyZWFrO1xuK1x0Y2FzZSBVQ0FMTF9BQk9SVDpcbitcdFx0UkVQT1JUX0dVRVNUX0FTU0VSVCh1Yyk7XG4rXHRcdGJyZWFrO1xuK1x0Y2FzZSBVQ0FMTF9OT05FOlxuK1x0XHRpZiAodmNwdXNbMF0tXHUwMDNlcnVuLVx1MDAzZWV4aXRfcmVhc29uID09IEtWTV9FWElUX01NSU8pXG4rXHRcdFx0VEVTVF9GQUlMKFwiVW5leHBlY3RlZCBNTUlPIGV4aXQgYXQgMHglbGx4XCIsXG4rXHRcdFx0XHQgIHZjcHVzWzBdLVx1MDAzZXJ1bi1cdTAwM2VtbWlvLnBoeXNfYWRkcik7XG4rXHRcdGZhbGx0aHJvdWdoO1xuK1x0ZGVmYXVsdDpcbitcdFx0VEVTVF9GQUlMKFwiVW5leHBlY3RlZCB1Y2FsbCAlbHUsIGV4aXRfcmVhc29uICV1XCIsXG4rXHRcdFx0ICB1Yy5jbWQsIHZjcHVzWzBdLVx1MDAzZXJ1bi1cdTAwM2VleGl0X3JlYXNvbik7XG4rXHR9XG4rXG4rXHR2bV9naWNfZGVzdHJveShcdTAwMjZ2KTtcbit9XG4rXG4gc3RhdGljIHZvaWQgdGVzdF92M190eXBlcl9hY2Nlc3Nlcyh2b2lkKVxuIHtcbiBcdHN0cnVjdCB2bV9naWMgdjtcbkBAIC02MDgsNyArNzA0LDggQEAgc3RhdGljIHZvaWQgdGVzdF92M19yZWRpc3RfaXBhX3JhbmdlX2NoZWNrX2F0X3ZjcHVfcnVuKHZvaWQpXG4gXHRpbnQgcmV0LCBpO1xuIFx0dTY0IGFkZHI7XG4gXG4tXHR2ID0gdm1fZ2ljX2NyZWF0ZV93aXRoX3ZjcHVzKEtWTV9ERVZfVFlQRV9BUk1fVkdJQ19WMywgMSwgdmNwdXMpO1xuK1x0diA9IHZtX2dpY19jcmVhdGVfd2l0aF92Y3B1cyhLVk1fREVWX1RZUEVfQVJNX1ZHSUNfVjMsIDEsIGd1ZXN0X2NvZGUsXG4rXHRcdFx0XHQgICAgIHZjcHVzKTtcbiBcbiBcdC8qIFNldCBzcGFjZSBmb3IgMyByZWRpc3RzLCB3ZSBoYXZlIDEgdmNwdSwgc28gdGhpcyBzdWNjZWVkcy4gKi9cbiBcdGFkZHIgPSBtYXhfcGh5c19zaXplIC0gKDMgKiAyICogMHgxMDAwMCk7XG5AQCAtNjQxLDcgKzczOCw4IEBAIHN0YXRpYyB2b2lkIHRlc3RfdjNfaXRzX3JlZ2lvbih2b2lkKVxuIFx0dTY0IGFkZHI7XG4gXHRpbnQgaXRzX2ZkLCByZXQ7XG4gXG4tXHR2ID0gdm1fZ2ljX2NyZWF0ZV93aXRoX3ZjcHVzKEtWTV9ERVZfVFlQRV9BUk1fVkdJQ19WMywgTlJfVkNQVVMsIHZjcHVzKTtcbitcdHYgPSB2bV9naWNfY3JlYXRlX3dpdGhfdmNwdXMoS1ZNX0RFVl9UWVBFX0FSTV9WR0lDX1YzLCBOUl9WQ1BVUyxcbitcdFx0XHRcdCAgICAgZ3Vlc3RfY29kZSwgdmNwdXMpO1xuIFx0aXRzX2ZkID0ga3ZtX2NyZWF0ZV9kZXZpY2Uodi52bSwgS1ZNX0RFVl9UWVBFX0FSTV9WR0lDX0lUUyk7XG4gXG4gXHRhZGRyID0gMHg0MDEwMDA7XG5AQCAtNjg0LDcgKzc4Miw4IEBAIHN0YXRpYyB2b2lkIHRlc3RfdjNfbmFzc2dpY2FwKHZvaWQpXG4gXHR1MzIgdHlwZXIyO1xuIFx0aW50IHJldDtcbiBcbi1cdHZtID0gdm1fZ2ljX2NyZWF0ZV93aXRoX3ZjcHVzKEtWTV9ERVZfVFlQRV9BUk1fVkdJQ19WMywgTlJfVkNQVVMsIHZjcHVzKTtcbitcdHZtID0gdm1fZ2ljX2NyZWF0ZV93aXRoX3ZjcHVzKEtWTV9ERVZfVFlQRV9BUk1fVkdJQ19WMywgTlJfVkNQVVMsXG4rXHRcdFx0XHQgICAgICBndWVzdF9jb2RlLCB2Y3B1cyk7XG4gXHRrdm1fZGV2aWNlX2F0dHJfZ2V0KHZtLmdpY19mZCwgS1ZNX0RFVl9BUk1fVkdJQ19HUlBfRElTVF9SRUdTLFxuIFx0XHRcdCAgICBHSUNEX1RZUEVSMiwgXHUwMDI2dHlwZXIyKTtcbiBcdGhhc19uYXNzZ2ljYXAgPSB0eXBlcjIgXHUwMDI2IEdJQ0RfVFlQRVIyX25BU1NHSWNhcDtcbkBAIC05NzgsNiArMTA3Nyw3IEBAIHZvaWQgcnVuX3Rlc3RzKHUzMiBnaWNfZGV2X3R5cGUpXG4gXG4gXHRpZiAoVkdJQ19ERVZfSVNfVjMoZ2ljX2Rldl90eXBlKSkge1xuIFx0XHR0ZXN0X3YzX25ld19yZWRpc3RfcmVnaW9ucygpO1xuK1x0XHR0ZXN0X3YzX3JlZGlzdF9yZWdpb25fcmV0cnkoKTtcbiBcdFx0dGVzdF92M190eXBlcl9hY2Nlc3NlcygpO1xuIFx0XHR0ZXN0X3YzX2xhc3RfYml0X3JlZGlzdF9yZWdpb25zKCk7XG4gXHRcdHRlc3RfdjNfbGFzdF9iaXRfc2luZ2xlX3JkaXN0KCk7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQwODoyNjoyNC45MTk4NTY0ODJaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo2MTAzNTE2OTI3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIExpbnV4IEtlcm5lbCBDb21taXQgZm9yIEZ1enppbmcgUG90ZW50aWFsKipcblxuT2theSwgc28gSSBuZWVkIHRvIGV2YWx1YXRlIHRoaXMgcmVjZW50IGNvbW1pdCB0byB0aGUgTGludXgga2VybmVsLiBUaGUgZ29hbCBpcyB0byBkZXRlcm1pbmUgaWYgaXQncyBmdXp6LXdvcnRoeSwgd2hhdCBzcGVjaWZpYyBzeW1ib2xzIEkgc2hvdWxkIGZvY3VzIG9uLCBhbmQgYW55IGNvbmZpZ3VyYXRpb24gc2V0dGluZ3MgSSBuZWVkIHRvIGJlIGF3YXJlIG9mLiBMZXQncyBkaWcgaW4uXG5cblRoZSBkaWZmIHRhcmdldHMgYGFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1tbWlvLXYzLmNgIGFuZCBhZGRzIHRlc3RzIHRvIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vYXJtNjQvdmdpY19pbml0LmNgLiBUaGF0IGltbWVkaWF0ZWx5IG1ha2VzIG1lIHRoaW5rIHRoaXMgaW52b2x2ZXMgS1ZNIGFuZCBzcGVjaWZpY2FsbHkgdGhlIFZpcnR1YWwgR0lDIChHZW5lcmljIEludGVycnVwdCBDb250cm9sbGVyKSBpbXBsZW1lbnRhdGlvbiBmb3IgQVJNNjQuIEludGVyZXN0aW5nLlxuXG5JIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHRoZSBrZXkgZnVuY3Rpb25zIGludHJvZHVjZWQgb3IgbW9kaWZpZWQgYXJlLCBzbyBJJ2xsIHJldmlldyBgdmdpY191bmRvX3JlZGlzdF9hc3NpZ25tZW50YCwgYHZnaWNfcmVnaXN0ZXJfcmVkaXN0X2lvZGV2YCwgYHZnaWNfcm9sbGJhY2tfcmVkaXN0X2lvZGV2YCwgYHZnaWNfcmVnaXN0ZXJfYWxsX3JlZGlzdF9pb2RldnNgLCBhbmQgYHZnaWNfdjNfc2V0X3JlZGlzdF9iYXNlYCBpbiBkZXRhaWwuIFRoZXNlIGxpa2VseSBoYW5kbGUgdGhlIHJlZGlzdHJpYnV0aW9uIG9mIEkvTyBkZXZpY2VzIHdpdGhpbiB0aGUgVlZHSUMuIEludGVycnVwdCBjb250cm9sbGVycyBhcmUgYWx3YXlzIGEgZ29vZCBhcmVhIGZvciBmdXp6aW5nLCBlc3BlY2lhbGx5IHZpcnR1YWxpemVkIG9uZXMuXG5cblRvIGdldCBhIGJldHRlciBwaWN0dXJlLCBJJ2xsIHVzZSBlaXRoZXIgYGdyZXBwZXJgIG9yIGp1c3QgcmVhZCB0aGUgcmVsZXZhbnQgZmlsZXMsIHNwZWNpZmljYWxseSBgYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLW1taW8tdjMuY2AsIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRyb2wgZmxvdyBhbmQgZGF0YSBzdHJ1Y3R1cmVzIGludm9sdmVkLiBJJ2xsIGFsc28gZG91YmxlLWNoZWNrIHRoZSBLY29uZmlnIG9wdGlvbnMgZm9yIEFSTTY0IEtWTSB0byBzZWUgaWYgYW55IHNwZWNpZmljIGNvbmZpZ3VyYXRpb25zIG5lZWQgdG8gYmUgZW5hYmxlZCBmb3IgdGhpcyBjb2RlIHRvIGJlIGFjdGl2ZS4gVGhhdCB3aWxsIGluZmx1ZW5jZSB0aGUgc2V0dXAgb2YgYW55IGZ1enppbmcgZW52aXJvbm1lbnQgSSBlc3RhYmxpc2guIEkgbmVlZCB0byBiZSBjZXJ0YWluIHRoZSBrZXJuZWwgaXMgY29uZmlndXJlZCBjb3JyZWN0bHkgdG8gZXhlcmNpc2UgdGhpcyBjb2RlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3MTIxLCJPdXRwdXRUb2tlbnMiOjUxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjI0LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMDg6MjY6MzEuMDIzMzc1NTg5WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTg3NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLW1taW8tdjMuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA3NjAsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNzYwOlxcdHtcXG4gNzYxOlxcdFxcdGRldi1cXHUwMDNlcmVnaW9ucyA9IHZnaWNfdjNfZGlzdF9yZWdpc3RlcnM7XFxuIDc2MjpcXHRcXHRkZXYtXFx1MDAzZW5yX3JlZ2lvbnMgPSBBUlJBWV9TSVpFKHZnaWNfdjNfZGlzdF9yZWdpc3RlcnMpO1xcbiA3NjM6XFx0XFxuIDc2NDpcXHRcXHRrdm1faW9kZXZpY2VfaW5pdChcXHUwMDI2ZGV2LVxcdTAwM2VkZXYsIFxcdTAwMjZrdm1faW9fZ2ljX29wcyk7XFxuIDc2NTpcXHRcXG4gNzY2OlxcdFxcdHJldHVybiBTWl82NEs7XFxuIDc2NzpcXHR9XFxuIDc2ODpcXHRcXG4gNzY5OlxcdHN0YXRpYyB2b2lkIHZnaWNfdW5kb19yZWRpc3RfYXNzaWdubWVudChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuIDc3MDpcXHR7XFxuIDc3MTpcXHRcXHRzdHJ1Y3QgdmdpY19jcHUgKnZnaWNfY3B1ID0gXFx1MDAyNnZjcHUtXFx1MDAzZWFyY2gudmdpY19jcHU7XFxuIDc3MjpcXHRcXG4gNzczOlxcdFxcdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXFx1MDAyNnZjcHUtXFx1MDAzZWt2bS1cXHUwMDNlc2xvdHNfbG9jayk7XFxuIDc3NDpcXHRcXG4gNzc1OlxcdFxcdGd1YXJkKG11dGV4KShcXHUwMDI2dmNwdS1cXHUwMDNla3ZtLVxcdTAwM2VhcmNoLmNvbmZpZ19sb2NrKTtcXG4gNzc2OlxcdFxcbiA3Nzc6XFx0XFx0dmdpY19jcHUtXFx1MDAzZXJkcmVnLVxcdTAwM2VmcmVlX2luZGV4LS07XFxuIDc3ODpcXHRcXHR2Z2ljX2NwdS1cXHUwMDNlcmRyZWcgPSBOVUxMO1xcbiA3Nzk6XFx0XFx0dmdpY19jcHUtXFx1MDAzZXJkX2lvZGV2LmJhc2VfYWRkciA9IFZHSUNfQUREUl9VTkRFRjtcXG4gNzgwOlxcdH1cXG4gNzgxOlxcdFxcbiA3ODI6XFx0LyoqXFxuIDc4MzpcXHQgKiB2Z2ljX3JlZ2lzdGVyX3JlZGlzdF9pb2RldiAtIHJlZ2lzdGVyIGEgc2luZ2xlIHJlZGlzdCBpb2RldlxcbiA3ODQ6XFx0ICogQHZjcHU6ICAgIFRoZSBWQ1BVIHRvIHdoaWNoIHRoZSByZWRpc3RyaWJ1dG9yIGJlbG9uZ3NcXG4gNzg1OlxcdCAqXFxuIDc4NjpcXHQgKiBSZWdpc3RlciBhIEtWTSBpb2RldiBmb3IgdGhpcyBWQ1BVJ3MgcmVkaXN0cmlidXRvciB1c2luZyB0aGUgYWRkcmVzc1xcbiA3ODc6XFx0ICogcHJvdmlkZWQuXFxuIDc4ODpcXHQgKlxcbiA3ODk6XFx0ICogUmV0dXJuIDAgb24gc3VjY2VzcywgLUVSUk5PIG90aGVyd2lzZS5cXG4gNzkwOlxcdCAqL1xcbiA3OTE6XFx0aW50IHZnaWNfcmVnaXN0ZXJfcmVkaXN0X2lvZGV2KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4gNzkyOlxcdHtcXG4gNzkzOlxcdFxcdHN0cnVjdCBrdm0gKmt2bSA9IHZjcHUtXFx1MDAzZWt2bTtcXG4gNzk0OlxcdFxcdHN0cnVjdCB2Z2ljX2Rpc3QgKnZnaWMgPSBcXHUwMDI2a3ZtLVxcdTAwM2VhcmNoLnZnaWM7XFxuIDc5NTpcXHRcXHRzdHJ1Y3QgdmdpY19jcHUgKnZnaWNfY3B1ID0gXFx1MDAyNnZjcHUtXFx1MDAzZWFyY2gudmdpY19jcHU7XFxuIDc5NjpcXHRcXHRzdHJ1Y3QgdmdpY19pb19kZXZpY2UgKnJkX2RldiA9IFxcdTAwMjZ2Y3B1LVxcdTAwM2VhcmNoLnZnaWNfY3B1LnJkX2lvZGV2O1xcbiA3OTc6XFx0XFx0c3RydWN0IHZnaWNfcmVkaXN0X3JlZ2lvbiAqcmRyZWc7XFxuIDc5ODpcXHRcXHRncGFfdCByZF9iYXNlO1xcbiA3OTk6XFx0XFx0aW50IHJldCA9IDA7XFxuIDgwMDpcXHRcXG4gODAxOlxcdFxcdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXFx1MDAyNmt2bS1cXHUwMDNlc2xvdHNfbG9jayk7XFxuIDgwMjpcXHRcXHRtdXRleF9sb2NrKFxcdTAwMjZrdm0tXFx1MDAzZWFyY2guY29uZmlnX2xvY2spO1xcbiA4MDM6XFx0XFxuIDgwNDpcXHRcXHRpZiAoIUlTX1ZHSUNfQUREUl9VTkRFRih2Z2ljX2NwdS1cXHUwMDNlcmRfaW9kZXYuYmFzZV9hZGRyKSlcXG4gODA1OlxcdFxcdFxcdGdvdG8gb3V0X3VubG9jaztcXG4gODA2OlxcdFxcbiA4MDc6XFx0XFx0LypcXG4gODA4OlxcdFxcdCAqIFdlIG1heSBiZSBjcmVhdGluZyBWQ1BVcyBiZWZvcmUgaGF2aW5nIHNldCB0aGUgYmFzZSBhZGRyZXNzIGZvciB0aGVcXG4gODA5OlxcdFxcdCAqIHJlZGlzdHJpYnV0b3IgcmVnaW9uLCBpbiB3aGljaCBjYXNlIHdlIHdpbGwgY29tZSBiYWNrIHRvIHRoaXNcXG4gODEwOlxcdFxcdCAqIGZ1bmN0aW9uIGZvciBhbGwgVkNQVXMgd2hlbiB0aGUgYmFzZSBhZGRyZXNzIGlzIHNldC4gIEp1c3QgcmV0dXJuXFxuIDgxMTpcXHRcXHQgKiB3aXRob3V0IGRvaW5nIGFueSB3b3JrIGZvciBub3cuXFxuIDgxMjpcXHRcXHQgKi9cXG4gODEzOlxcdFxcdHJkcmVnID0gdmdpY192M19yZGlzdF9mcmVlX3Nsb3QoXFx1MDAyNnZnaWMtXFx1MDAzZXJkX3JlZ2lvbnMpO1xcbiA4MTQ6XFx0XFx0aWYgKCFyZHJlZylcXG4gODE1OlxcdFxcdFxcdGdvdG8gb3V0X3VubG9jaztcXG4gODE2OlxcdFxcbiA4MTc6XFx0XFx0aWYgKCF2Z2ljX3YzX2NoZWNrX2Jhc2Uoa3ZtKSkge1xcbiA4MTg6XFx0XFx0XFx0cmV0ID0gLUVJTlZBTDtcXG4gODE5OlxcdFxcdFxcdGdvdG8gb3V0X3VubG9jaztcXG4gODIwOlxcdFxcdH1cXG4gODIxOlxcdFxcbiA4MjI6XFx0XFx0dmdpY19jcHUtXFx1MDAzZXJkcmVnID0gcmRyZWc7XFxuIDgyMzpcXHRcXHR2Z2ljX2NwdS1cXHUwMDNlcmRyZWdfaW5kZXggPSByZHJlZy1cXHUwMDNlZnJlZV9pbmRleDtcXG4gODI0OlxcdFxcbiA4MjU6XFx0XFx0cmRfYmFzZSA9IHJkcmVnLVxcdTAwM2ViYXNlICsgcmRyZWctXFx1MDAzZWZyZWVfaW5kZXggKiBLVk1fVkdJQ19WM19SRURJU1RfU0laRTtcXG4gODI2OlxcdFxcbiA4Mjc6XFx0XFx0a3ZtX2lvZGV2aWNlX2luaXQoXFx1MDAyNnJkX2Rldi1cXHUwMDNlZGV2LCBcXHUwMDI2a3ZtX2lvX2dpY19vcHMpO1xcbiA4Mjg6XFx0XFx0cmRfZGV2LVxcdTAwM2ViYXNlX2FkZHIgPSByZF9iYXNlO1xcbiA4Mjk6XFx0XFx0cmRfZGV2LVxcdTAwM2Vpb2Rldl90eXBlID0gSU9ERVZfUkVESVNUO1xcbiA4MzA6XFx0XFx0cmRfZGV2LVxcdTAwM2VyZWdpb25zID0gdmdpY192M19yZF9yZWdpc3RlcnM7XFxuIDgzMTpcXHRcXHRyZF9kZXYtXFx1MDAzZW5yX3JlZ2lvbnMgPSBBUlJBWV9TSVpFKHZnaWNfdjNfcmRfcmVnaXN0ZXJzKTtcXG4gODMyOlxcdFxcdHJkX2Rldi1cXHUwMDNlcmVkaXN0X3ZjcHUgPSB2Y3B1O1xcbiA4MzM6XFx0XFxuIDgzNDpcXHRcXHQvKiBQcm90ZWN0ZWQgYnkgc2xvdHNfbG9jayAqL1xcbiA4MzU6XFx0XFx0cmRyZWctXFx1MDAzZWZyZWVfaW5kZXgrKztcXG4gODM2OlxcdFxcbiA4Mzc6XFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZrdm0tXFx1MDAzZWFyY2guY29uZmlnX2xvY2spO1xcbiA4Mzg6XFx0XFxuIDgzOTpcXHRcXHRyZXQgPSBrdm1faW9fYnVzX3JlZ2lzdGVyX2Rldihrdm0sIEtWTV9NTUlPX0JVUywgcmRfYmFzZSxcXG4gODQwOlxcdFxcdFxcdFxcdFxcdCAgICAgIDIgKiBTWl82NEssIFxcdTAwMjZyZF9kZXYtXFx1MDAzZWRldik7XFxuIDg0MTpcXHRcXHRpZiAocmV0KVxcbiA4NDI6XFx0XFx0XFx0dmdpY191bmRvX3JlZGlzdF9hc3NpZ25tZW50KHZjcHUpO1xcbiA4NDM6XFx0XFxuIDg0NDpcXHRcXHRyZXR1cm4gcmV0O1xcbiA4NDU6XFx0XFxuIDg0NjpcXHRvdXRfdW5sb2NrOlxcbiA4NDc6XFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZrdm0tXFx1MDAzZWFyY2guY29uZmlnX2xvY2spO1xcbiA4NDg6XFx0XFx0cmV0dXJuIHJldDtcXG4gODQ5OlxcdH1cXG4gODUwOlxcdFxcbiA4NTE6XFx0dm9pZCB2Z2ljX3VucmVnaXN0ZXJfcmVkaXN0X2lvZGV2KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4gODUyOlxcdHtcXG4gODUzOlxcdFxcdHN0cnVjdCB2Z2ljX2lvX2RldmljZSAqcmRfZGV2ID0gXFx1MDAyNnZjcHUtXFx1MDAzZWFyY2gudmdpY19jcHUucmRfaW9kZXY7XFxuIDg1NDpcXHRcXG4gODU1OlxcdFxcdGt2bV9pb19idXNfdW5yZWdpc3Rlcl9kZXYodmNwdS1cXHUwMDNla3ZtLCBLVk1fTU1JT19CVVMsIFxcdTAwMjZyZF9kZXYtXFx1MDAzZWRldik7XFxuIDg1NjpcXHR9XFxuIDg1NzpcXHRcXG4gODU4OlxcdHN0YXRpYyB2b2lkIHZnaWNfcm9sbGJhY2tfcmVkaXN0X2lvZGV2KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcXG4gODU5OlxcdFxcdFxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgdmdpY19yZWRpc3RfcmVnaW9uICpyZHJlZylcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMDg6MjY6MzEuMDIzNDc2Njk5WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDEzOTcyNDM0MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUncyBteSB0YWtlIG9uIHRob3NlIGxpbmVzIG9mIGNvZGUsIHByZXNlbnRlZCBhcyBhIHBlcnNvbmFsIHJlZmxlY3Rpb24sIGFzIGlmIEkgd2VyZSBhbmFseXppbmcgdGhlbSBteXNlbGY6XG5cbioqQW5hbHl6aW5nIHZnaWMtbW1pby12My5jOiBMaW5lcyA4NjAtMTAzMCoqXG5cbkFscmlnaHQsIEknbSBoZWFkaW5nIGRvd24gaW50byB0aGUgZ3V0cyBvZiB0aGUgYHZnaWMtbW1pby12My5jYCBmaWxlLCBzcGVjaWZpY2FsbHkgbGluZXMgODYwIHRvIDEwMzAuIFRoaXMgbGlrZWx5IGNvbnRhaW5zIGNydWNpYWwgbG9naWMgZm9yIGhhbmRsaW5nIHRoZSBNTUlPIChNZW1vcnktTWFwcGVkIEkvTykgaW50ZXJhY3Rpb25zIGZvciB0aGUgVmlydHVhbCBHSUMgKEdlbmVyaWMgSW50ZXJydXB0IENvbnRyb2xsZXIpIHZlcnNpb24gMywgd2l0aGluIHRoZSBBUk02NCBLVk0gZW52aXJvbm1lbnQuIEdpdmVuIHRoZSBsaW5lIG51bWJlcnMsIEknbSBleHBlY3RpbmcgdGhpcyBpcyBnb2luZyB0byBiZSBhIHJlbGF0aXZlbHkgc2VsZi1jb250YWluZWQsIGJ1dCBpbXBvcnRhbnQsIGJsb2NrIG9mIGNvZGUuIE15IGh1bmNoIGlzIHRoYXQgdGhpcyBkZWFscyB3aXRoIGVpdGhlciB0aGUgcmVhZCBvciB3cml0ZSBoYW5kbGluZyBmb3IgYSBzZXQgb2YgcmVnaXN0ZXJzLCBvciBwZXJoYXBzIGEgY29yZSBzdGF0ZSB1cGRhdGUgd2l0aGluIHRoZSB2Z2ljLiBMZXQgbWUgYW5hbHl6ZSB0aGlzIGEgbGl0dGxlIGRlZXBlciwgYW5kIHNlZSBpZiBJIGNhbiBmaWd1cmUgb3V0IHRoZSBjb250ZXh0LlxuXG5JIGFtIGxvb2tpbmcgdG8gdW5kZXJzdGFuZCBleGFjdGx5IGhvdyB0aGUgS1ZNIGh5cGVydmlzb3IgaXMgaW50ZXJhY3Rpbmcgd2l0aCB0aGUgdmlydHVhbCBHSUMuIEkgd2lsbCBzdGFydCBieSBzZWVpbmcgaG93IHRoZSBkaWZmZXJlbnQgcmVnaXN0ZXJzIGluIHRoZSB2aXJ0dWFsIEdJQyBhcmUgbWFwcGVkLiBGcm9tIHRoZXJlLCBJIHdpbGwgbGlrZWx5IHVuZGVyc3RhbmQgaG93IGludGVycnVwdHMgYXJlIGluamVjdGVkIGludG8gdGhlIGd1ZXN0IFZNcy4gSSBhbSBtb3N0IGludGVyZXN0ZWQgaW4gc2VlaW5nIGlmIHRoZXJlIGFyZSBhbnkgcmFjZSBjb25kaXRpb25zIGJldHdlZW4gdGhlIGhvc3QgYW5kIGd1ZXN0LCBhbmQgaG93IHRoaXMgaXMgaGFuZGxlZCwgaWYgc28uIFRoZSBtb3N0IGltcG9ydGFudCB0aGluZyBoZXJlIGlzIHRvIG1ha2Ugc3VyZSB0aGlzIGlzIGVmZmljaWVudCwgZ2l2ZW4gaG93IGludGVycnVwdCBkZWxpdmVyeSBpcyBhIGhpZ2ggZnJlcXVlbmN5IGV2ZW50LlxuXG5JIHdpbGwgYWxzbyBiZSBvbiB0aGUgbG9va291dCBmb3IgYW55IHBvdGVudGlhbCBhcmVhcyBmb3Igb3B0aW1pemF0aW9uLCBvciBwb2ludHMgd2hlcmUgd2UgY291bGQgYmUgaW5hZHZlcnRlbnRseSBpbnRyb2R1Y2luZyBsYXRlbmN5LiBUaGUgZ29hbCBoZXJlIGlzIHRvIGdldCBhIHNvbGlkIGdyYXNwIG9mIGhvdyB0aGUgTU1JTyBtZWNoYW5pc20gd29ya3MgaW4gdGhpcyBWZ2ljLVYzIGNvbnRleHQuIEkgYWxzbyB3YW50IHRvIGlkZW50aWZ5IGhvdyB0aGUgY29kZSBtaWdodCBpbnRlcmFjdCB3aXRoIG90aGVyIHBhcnRzIG9mIHRoZSBLVk0gaW5mcmFzdHJ1Y3R1cmUsIHN1Y2ggYXMgdGhlIHZDUFUgb3IgdGhlIGludGVycnVwdCBjb250cm9sbGVyIGVtdWxhdGlvbiBsYXllcnMuIFRoaXMgcGFydGljdWxhciBzZWN0aW9uIGhhcyB0byBiZSBjb21wbGV0ZWx5IGNvcnJlY3QsIGFzIGludGVycnVwdCBkZWxpdmVyeSBpcyBjcnVjaWFsIGZvciBwcm9wZXIgb3BlcmF0aW9uLiBJJ20gaG9waW5nIEkgY2FuIGZpbmQgYSBzZWN0aW9uIHRoYXQgaXMgdW5kZXJzdGFuZGFibGUsIHNvIHRoYXQgSSBjYW4gbG9vayBhdCBtb3JlIGNvbXBsaWNhdGVkIGFyZWFzIGxhdGVyLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5NDcwLCJPdXRwdXRUb2tlbnMiOjUwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQwODoyNjozNS4xNjMyMDMwMjJaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5MjYwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJhcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtbW1pby12My5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDg1OCxcbiAgXCJMaW5lQ291bnRcIjogODBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDg1ODpcXHRzdGF0aWMgdm9pZCB2Z2ljX3JvbGxiYWNrX3JlZGlzdF9pb2RldihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXFxuIDg1OTpcXHRcXHRcXHRcXHRcXHQgICAgICAgc3RydWN0IHZnaWNfcmVkaXN0X3JlZ2lvbiAqcmRyZWcpXFxuIDg2MDpcXHR7XFxuIDg2MTpcXHRcXHRzdHJ1Y3QgdmdpY19jcHUgKnZnaWNfY3B1ID0gXFx1MDAyNnZjcHUtXFx1MDAzZWFyY2gudmdpY19jcHU7XFxuIDg2MjpcXHRcXG4gODYzOlxcdFxcdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXFx1MDAyNnZjcHUtXFx1MDAzZWt2bS1cXHUwMDNlc2xvdHNfbG9jayk7XFxuIDg2NDpcXHRcXG4gODY1OlxcdFxcdGlmICh2Z2ljX2NwdS1cXHUwMDNlcmRyZWcgIT0gcmRyZWcpXFxuIDg2NjpcXHRcXHRcXHRyZXR1cm47XFxuIDg2NzpcXHRcXG4gODY4OlxcdFxcdHZnaWNfdW5yZWdpc3Rlcl9yZWRpc3RfaW9kZXYodmNwdSk7XFxuIDg2OTpcXHRcXG4gODcwOlxcdFxcdGd1YXJkKG11dGV4KShcXHUwMDI2dmNwdS1cXHUwMDNla3ZtLVxcdTAwM2VhcmNoLmNvbmZpZ19sb2NrKTtcXG4gODcxOlxcdFxcdHZnaWNfY3B1LVxcdTAwM2VyZHJlZyA9IE5VTEw7XFxuIDg3MjpcXHRcXHR2Z2ljX2NwdS1cXHUwMDNlcmRfaW9kZXYuYmFzZV9hZGRyID0gVkdJQ19BRERSX1VOREVGO1xcbiA4NzM6XFx0fVxcbiA4NzQ6XFx0XFxuIDg3NTpcXHRzdGF0aWMgaW50IHZnaWNfcmVnaXN0ZXJfYWxsX3JlZGlzdF9pb2RldnMoc3RydWN0IGt2bSAqa3ZtLFxcbiA4NzY6XFx0XFx0XFx0XFx0XFx0XFx0ICAgc3RydWN0IHZnaWNfcmVkaXN0X3JlZ2lvbiAqcmRyZWcpXFxuIDg3NzpcXHR7XFxuIDg3ODpcXHRcXHRzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHU7XFxuIDg3OTpcXHRcXHR1bnNpZ25lZCBsb25nIGM7XFxuIDg4MDpcXHRcXHRpbnQgcmV0ID0gMDtcXG4gODgxOlxcdFxcbiA4ODI6XFx0XFx0bG9ja2RlcF9hc3NlcnRfaGVsZChcXHUwMDI2a3ZtLVxcdTAwM2VzbG90c19sb2NrKTtcXG4gODgzOlxcdFxcbiA4ODQ6XFx0XFx0a3ZtX2Zvcl9lYWNoX3ZjcHUoYywgdmNwdSwga3ZtKSB7XFxuIDg4NTpcXHRcXHRcXHRyZXQgPSB2Z2ljX3JlZ2lzdGVyX3JlZGlzdF9pb2Rldih2Y3B1KTtcXG4gODg2OlxcdFxcdFxcdGlmIChyZXQpXFxuIDg4NzpcXHRcXHRcXHRcXHRicmVhaztcXG4gODg4OlxcdFxcdH1cXG4gODg5OlxcdFxcbiA4OTA6XFx0XFx0aWYgKHJldCkge1xcbiA4OTE6XFx0XFx0XFx0LyogVW5kbyBhc3NpZ25tZW50cyBtYWRlIGZyb20gdGhlIHJlZ2lvbiBiZWluZyBhZGRlZC4gKi9cXG4gODkyOlxcdFxcdFxcdGludCBpO1xcbiA4OTM6XFx0XFxuIDg5NDpcXHRcXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgYzsgaSsrKSB7XFxuIDg5NTpcXHRcXHRcXHRcXHR2Y3B1ID0ga3ZtX2dldF92Y3B1KGt2bSwgaSk7XFxuIDg5NjpcXHRcXHRcXHRcXHR2Z2ljX3JvbGxiYWNrX3JlZGlzdF9pb2Rldih2Y3B1LCByZHJlZyk7XFxuIDg5NzpcXHRcXHRcXHR9XFxuIDg5ODpcXHRcXHR9XFxuIDg5OTpcXHRcXG4gOTAwOlxcdFxcdHJldHVybiByZXQ7XFxuIDkwMTpcXHR9XFxuIDkwMjpcXHRcXG4gOTAzOlxcdC8qKlxcbiA5MDQ6XFx0ICogdmdpY192M19hbGxvY19yZWRpc3RfcmVnaW9uIC0gQWxsb2NhdGUgYSBuZXcgcmVkaXN0cmlidXRvciByZWdpb25cXG4gOTA1OlxcdCAqXFxuIDkwNjpcXHQgKiBQZXJmb3JtcyB2YXJpb3VzIGNoZWNrcyBiZWZvcmUgaW5zZXJ0aW5nIHRoZSByZGlzdCByZWdpb24gaW4gdGhlIGxpc3QuXFxuIDkwNzpcXHQgKiBUaG9zZSB0ZXN0cyBkZXBlbmQgb24gd2hldGhlciB0aGUgc2l6ZSBvZiB0aGUgcmRpc3QgcmVnaW9uIGlzIGtub3duXFxuIDkwODpcXHQgKiAoaWUuIGNvdW50ICE9IDApLiBUaGUgbGlzdCBpcyBzb3J0ZWQgYnkgcmRpc3QgcmVnaW9uIGluZGV4LlxcbiA5MDk6XFx0ICpcXG4gOTEwOlxcdCAqIEBrdm06IGt2bSBoYW5kbGVcXG4gOTExOlxcdCAqIEBpbmRleDogcmVkaXN0IHJlZ2lvbiBpbmRleFxcbiA5MTI6XFx0ICogQGJhc2U6IGJhc2Ugb2YgdGhlIG5ldyByZGlzdCByZWdpb25cXG4gOTEzOlxcdCAqIEBjb3VudDogbnVtYmVyIG9mIHJlZGlzdHJpYnV0b3JzIHRoZSByZWdpb24gaXMgbWFkZSBvZiAoMCBpbiB0aGUgb2xkIHN0eWxlXFxuIDkxNDpcXHQgKiBzaW5nbGUgcmVnaW9uLCB3aG9zZSBzaXplIGlzIGluZHVjZWQgZnJvbSB0aGUgbnVtYmVyIG9mIHZjcHVzKVxcbiA5MTU6XFx0ICpcXG4gOTE2OlxcdCAqIFJldHVybiAwIG9uIHN1Y2Nlc3MsIFxcdTAwM2MgMCBvdGhlcndpc2VcXG4gOTE3OlxcdCAqL1xcbiA5MTg6XFx0c3RhdGljIGludCB2Z2ljX3YzX2FsbG9jX3JlZGlzdF9yZWdpb24oc3RydWN0IGt2bSAqa3ZtLCB1aW50MzJfdCBpbmRleCxcXG4gOTE5OlxcdFxcdFxcdFxcdFxcdCAgICAgICBncGFfdCBiYXNlLCB1aW50MzJfdCBjb3VudClcXG4gOTIwOlxcdHtcXG4gOTIxOlxcdFxcdHN0cnVjdCB2Z2ljX2Rpc3QgKmQgPSBcXHUwMDI2a3ZtLVxcdTAwM2VhcmNoLnZnaWM7XFxuIDkyMjpcXHRcXHRzdHJ1Y3QgdmdpY19yZWRpc3RfcmVnaW9uICpyZHJlZztcXG4gOTIzOlxcdFxcdHN0cnVjdCBsaXN0X2hlYWQgKnJkX3JlZ2lvbnMgPSBcXHUwMDI2ZC1cXHUwMDNlcmRfcmVnaW9ucztcXG4gOTI0OlxcdFxcdGludCBucl92Y3B1cyA9IGF0b21pY19yZWFkKFxcdTAwMjZrdm0tXFx1MDAzZW9ubGluZV92Y3B1cyk7XFxuIDkyNTpcXHRcXHRzaXplX3Qgc2l6ZSA9IGNvdW50ID8gY291bnQgKiBLVk1fVkdJQ19WM19SRURJU1RfU0laRVxcbiA5MjY6XFx0XFx0XFx0XFx0ICAgIDogbnJfdmNwdXMgKiBLVk1fVkdJQ19WM19SRURJU1RfU0laRTtcXG4gOTI3OlxcdFxcdGludCByZXQ7XFxuIDkyODpcXHRcXG4gOTI5OlxcdFxcdC8qIGNyb3NzIHRoZSBlbmQgb2YgbWVtb3J5ID8gKi9cXG4gOTMwOlxcdFxcdGlmIChiYXNlICsgc2l6ZSBcXHUwMDNjIGJhc2UpXFxuIDkzMTpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gOTMyOlxcdFxcbiA5MzM6XFx0XFx0aWYgKGxpc3RfZW1wdHkocmRfcmVnaW9ucykpIHtcXG4gOTM0OlxcdFxcdFxcdGlmIChpbmRleCAhPSAwKVxcbiA5MzU6XFx0XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIDkzNjpcXHRcXHR9IGVsc2Uge1xcbiA5Mzc6XFx0XFx0XFx0cmRyZWcgPSBsaXN0X2xhc3RfZW50cnkocmRfcmVnaW9ucyxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMDg6MjY6MzUuMTYzMjk3NTMyWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzExNzA2MjM0OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBhc3N1bWluZyBJJ20gZGVlcGx5IGZhbWlsaWFyIHdpdGggQVJNNjQgS1ZNIGFuZCBWR0M6XG5cbioqRGl2aW5nIGludG8gdGhlIFZnaWMtTU1JTy1WMy5jIENvZGUqKlxuXG5SaWdodCwgbGV0J3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkgbmVlZCB0byB0YWtlIGEgbG9vayBhdCBhIHNwZWNpZmljIHNlY3Rpb24gb2YgdGhlIHZpcnR1YWwgR0lDIE1NSU8gY29kZS4gU3BlY2lmaWNhbGx5LCBsaW5lcyA5ODAgdGhyb3VnaCAxMDMwIHdpdGhpbiB0aGUgYGFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1tbWlvLXYzLmNgIGZpbGUuIFRoaXMgdGVsbHMgbWUgdGhlcmUncyBzb21ldGhpbmcgc3BlY2lmaWMgaW4gdGhlIFYzIE1NSU8gZW11bGF0aW9uIHRoYXQgcmVxdWlyZXMgbXkgYXR0ZW50aW9uLiBJJ20gcHJvYmFibHkgZGVhbGluZyB3aXRoIGFuIGlzc3VlLCBwZXJoYXBzIGEgcGVyZm9ybWFuY2UgYm90dGxlbmVjaywgb3IgZGVidWdnaW5nIGEgcmVwb3J0ZWQgYnVnIHJlbGF0ZWQgdG8gaG93IHRoZSB2aXJ0dWFsIEdJQyBoYW5kbGVzIG1lbW9yeS1tYXBwZWQgSS9PLiBUaGUgbGluZSBudW1iZXJzIG5hcnJvdyB0aGUgc2NvcGUsIHdoaWNoIG1lYW5zIEkgc2hvdWxkIHF1aWNrbHkgaXNvbGF0ZSB0aGUgcmVsZXZhbnQgY29kZSBibG9jayBhbmQgdW5kZXJzdGFuZCBpdHMgZnVuY3Rpb24gd2l0aGluIHRoZSBWMyBNTUlPIGZyYW1ld29yay4gSSdtIGV4cGVjdGluZyB0aGlzIGJsb2NrIHdpbGwgcmV2ZWFsIHRoZSBjcnV4IG9mIHRoZSBwcm9ibGVtLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTI4MywiT3V0cHV0VG9rZW5zIjo1MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMDg6MjY6MzguMjgwMzYxNzYxWiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTI3OTAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1tbWlvLXYzLmNcIixcbiAgXCJGaXJzdExpbmVcIjogOTgwLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgOTgwOlxcdFxcdHJldHVybiAwO1xcbiA5ODE6XFx0ZnJlZTpcXG4gOTgyOlxcdFxcdGtmcmVlKHJkcmVnKTtcXG4gOTgzOlxcdFxcdHJldHVybiByZXQ7XFxuIDk4NDpcXHR9XFxuIDk4NTpcXHRcXG4gOTg2OlxcdHZvaWQgdmdpY192M19mcmVlX3JlZGlzdF9yZWdpb24oc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3QgdmdpY19yZWRpc3RfcmVnaW9uICpyZHJlZylcXG4gOTg3OlxcdHtcXG4gOTg4OlxcdFxcdHN0cnVjdCBrdm1fdmNwdSAqdmNwdTtcXG4gOTg5OlxcdFxcdHVuc2lnbmVkIGxvbmcgYztcXG4gOTkwOlxcdFxcbiA5OTE6XFx0XFx0bG9ja2RlcF9hc3NlcnRfaGVsZChcXHUwMDI2a3ZtLVxcdTAwM2VhcmNoLmNvbmZpZ19sb2NrKTtcXG4gOTkyOlxcdFxcbiA5OTM6XFx0XFx0LyogR2FyYmFnZSBjb2xsZWN0IHRoZSByZWdpb24gKi9cXG4gOTk0OlxcdFxcdGt2bV9mb3JfZWFjaF92Y3B1KGMsIHZjcHUsIGt2bSkge1xcbiA5OTU6XFx0XFx0XFx0aWYgKHZjcHUtXFx1MDAzZWFyY2gudmdpY19jcHUucmRyZWcgPT0gcmRyZWcpXFxuIDk5NjpcXHRcXHRcXHRcXHR2Y3B1LVxcdTAwM2VhcmNoLnZnaWNfY3B1LnJkcmVnID0gTlVMTDtcXG4gOTk3OlxcdFxcdH1cXG4gOTk4OlxcdFxcbiA5OTk6XFx0XFx0bGlzdF9kZWwoXFx1MDAyNnJkcmVnLVxcdTAwM2VsaXN0KTtcXG4xMDAwOlxcdFxcdGtmcmVlKHJkcmVnKTtcXG4xMDAxOlxcdH1cXG4xMDAyOlxcdFxcbjEwMDM6XFx0aW50IHZnaWNfdjNfc2V0X3JlZGlzdF9iYXNlKHN0cnVjdCBrdm0gKmt2bSwgdTMyIGluZGV4LCB1NjQgYWRkciwgdTMyIGNvdW50KVxcbjEwMDQ6XFx0e1xcbjEwMDU6XFx0XFx0c3RydWN0IHZnaWNfcmVkaXN0X3JlZ2lvbiAqcmRyZWc7XFxuMTAwNjpcXHRcXHRpbnQgcmV0O1xcbjEwMDc6XFx0XFxuMTAwODpcXHRcXHRtdXRleF9sb2NrKFxcdTAwMjZrdm0tXFx1MDAzZWFyY2guY29uZmlnX2xvY2spO1xcbjEwMDk6XFx0XFx0cmV0ID0gdmdpY192M19hbGxvY19yZWRpc3RfcmVnaW9uKGt2bSwgaW5kZXgsIGFkZHIsIGNvdW50KTtcXG4xMDEwOlxcdFxcdGlmICghcmV0KVxcbjEwMTE6XFx0XFx0XFx0cmRyZWcgPSB2Z2ljX3YzX3JkaXN0X3JlZ2lvbl9mcm9tX2luZGV4KGt2bSwgaW5kZXgpO1xcbjEwMTI6XFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZrdm0tXFx1MDAzZWFyY2guY29uZmlnX2xvY2spO1xcbjEwMTM6XFx0XFx0aWYgKHJldClcXG4xMDE0OlxcdFxcdFxcdHJldHVybiByZXQ7XFxuMTAxNTpcXHRcXG4xMDE2OlxcdFxcdC8qXFxuMTAxNzpcXHRcXHQgKiBSZWdpc3RlciBpb2RldnMgZm9yIGVhY2ggZXhpc3RpbmcgVkNQVS4gIEFkZGluZyBtb3JlIFZDUFVzXFxuMTAxODpcXHRcXHQgKiBhZnRlcndhcmRzIHdpbGwgcmVnaXN0ZXIgdGhlIGlvZGV2cyB3aGVuIG5lZWRlZC5cXG4xMDE5OlxcdFxcdCAqL1xcbjEwMjA6XFx0XFx0cmV0ID0gdmdpY19yZWdpc3Rlcl9hbGxfcmVkaXN0X2lvZGV2cyhrdm0sIHJkcmVnKTtcXG4xMDIxOlxcdFxcdGlmIChyZXQpIHtcXG4xMDIyOlxcdFxcdFxcdG11dGV4X2xvY2soXFx1MDAyNmt2bS1cXHUwMDNlYXJjaC5jb25maWdfbG9jayk7XFxuMTAyMzpcXHRcXHRcXHR2Z2ljX3YzX2ZyZWVfcmVkaXN0X3JlZ2lvbihrdm0sIHJkcmVnKTtcXG4xMDI0OlxcdFxcdFxcdG11dGV4X3VubG9jayhcXHUwMDI2a3ZtLVxcdTAwM2VhcmNoLmNvbmZpZ19sb2NrKTtcXG4xMDI1OlxcdFxcdFxcdHJldHVybiByZXQ7XFxuMTAyNjpcXHRcXHR9XFxuMTAyNzpcXHRcXG4xMDI4OlxcdFxcdHJldHVybiAwO1xcbjEwMjk6XFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQwODoyNjozOC4yODA0OTE0NDFaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1ODQ3MjcxMDQ1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkRlbHZpbmcgaW50byBBUk02NCBLVk0gYW5kIFZHSUMgQ29uZmlndXJhdGlvbioqXG5cbkFscmlnaHQsIGxldCdzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgS2NvbmZpZyBvcHRpb25zIHRoYXQgZ292ZXJuIHRoZSBiZWhhdmlvciBvZiBBUk02NCBLVk0sIGVzcGVjaWFsbHkgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSBWaXJ0dWFsIEdJQyAoVkdJQykuIFRoaXMgbWVhbnMgSSdtIGdvaW5nIHRvIGRpdmUgcmlnaHQgaW50byB0aGUgaGVhcnQgb2YgdGhlIG1hdHRlciDigJMgdGhlIGBhcmNoL2FybTY0L2t2bS9LY29uZmlnYCBmaWxlLiBUaGF0J3Mgd2hlcmUgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gdmFyaWFibGVzIHNob3VsZCBiZSBkZWZpbmVkIGFuZCBsaW5rZWQuIFRoaXMgaXMgZ29pbmcgdG8gZ2l2ZSBtZSBhIHNvbGlkIGZvdW5kYXRpb24gZm9yIGZ1cnRoZXIgaW52ZXN0aWdhdGlvbnMgaW50byB0aGUga2VybmVsIHNvdXJjZS4gVGltZSB0byBnZXQgdG8gd29yay5cblxuXG4iLCJJbnB1dFRva2VucyI6MTIzNTQsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozOCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDA4OjI2OjQ0LjEyNzc2NTE2NloiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTU1NDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiYXJjaC9hcm02NC9rdm0vS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiAxMDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuICAgMjpcXHQjXFxuICAgMzpcXHQjIEtWTSBjb25maWd1cmF0aW9uXFxuICAgNDpcXHQjXFxuICAgNTpcXHRcXG4gICA2OlxcdHNvdXJjZSBcXFwidmlydC9rdm0vS2NvbmZpZ1xcXCJcXG4gICA3OlxcdFxcbiAgIDg6XFx0bWVudWNvbmZpZyBWSVJUVUFMSVpBVElPTlxcbiAgIDk6XFx0XFx0Ym9vbCBcXFwiVmlydHVhbGl6YXRpb25cXFwiXFxuICAxMDpcXHRcXHRoZWxwXFxuICAxMTpcXHRcXHQgIFNheSBZIGhlcmUgdG8gZ2V0IHRvIHNlZSBvcHRpb25zIGZvciB1c2luZyB5b3VyIExpbnV4IGhvc3QgdG8gcnVuXFxuICAxMjpcXHRcXHQgIG90aGVyIG9wZXJhdGluZyBzeXN0ZW1zIGluc2lkZSB2aXJ0dWFsIG1hY2hpbmVzIChndWVzdHMpLlxcbiAgMTM6XFx0XFx0ICBUaGlzIG9wdGlvbiBhbG9uZSBkb2VzIG5vdCBhZGQgYW55IGtlcm5lbCBjb2RlLlxcbiAgMTQ6XFx0XFxuICAxNTpcXHRcXHQgIElmIHlvdSBzYXkgTiwgYWxsIG9wdGlvbnMgaW4gdGhpcyBzdWJtZW51IHdpbGwgYmUgc2tpcHBlZCBhbmRcXG4gIDE2OlxcdFxcdCAgZGlzYWJsZWQuXFxuICAxNzpcXHRcXG4gIDE4OlxcdGlmIFZJUlRVQUxJWkFUSU9OXFxuICAxOTpcXHRcXG4gIDIwOlxcdG1lbnVjb25maWcgS1ZNXFxuICAyMTpcXHRcXHRib29sIFxcXCJLZXJuZWwtYmFzZWQgVmlydHVhbCBNYWNoaW5lIChLVk0pIHN1cHBvcnRcXFwiXFxuICAyMjpcXHRcXHRzZWxlY3QgS1ZNX0NPTU1PTlxcbiAgMjM6XFx0XFx0c2VsZWN0IEtWTV9HRU5FUklDX0hBUkRXQVJFX0VOQUJMSU5HXFxuICAyNDpcXHRcXHRzZWxlY3QgSEFWRV9LVk1fQ1BVX1JFTEFYX0lOVEVSQ0VQVFxcbiAgMjU6XFx0XFx0c2VsZWN0IEtWTV9NTUlPXFxuICAyNjpcXHRcXHRzZWxlY3QgS1ZNX0dFTkVSSUNfRElSVFlMT0dfUkVBRF9QUk9URUNUXFxuICAyNzpcXHRcXHRzZWxlY3QgVklSVF9YRkVSX1RPX0dVRVNUX1dPUktcXG4gIDI4OlxcdFxcdHNlbGVjdCBLVk1fVkZJT1xcbiAgMjk6XFx0XFx0c2VsZWN0IEhBVkVfS1ZNX0RJUlRZX1JJTkdfQUNRX1JFTFxcbiAgMzA6XFx0XFx0c2VsZWN0IE5FRURfS1ZNX0RJUlRZX1JJTkdfV0lUSF9CSVRNQVBcXG4gIDMxOlxcdFxcdHNlbGVjdCBIQVZFX0tWTV9NU0lcXG4gIDMyOlxcdFxcdHNlbGVjdCBIQVZFX0tWTV9JUlFDSElQXFxuICAzMzpcXHRcXHRzZWxlY3QgSEFWRV9LVk1fSVJRX1JPVVRJTkdcXG4gIDM0OlxcdFxcdHNlbGVjdCBIQVZFX0tWTV9JUlFfQllQQVNTXFxuICAzNTpcXHRcXHRzZWxlY3QgSEFWRV9LVk1fUkVBRE9OTFlfTUVNXFxuICAzNjpcXHRcXHRzZWxlY3QgSEFWRV9LVk1fVkNQVV9SVU5fUElEX0NIQU5HRVxcbiAgMzc6XFx0XFx0c2VsZWN0IFNDSEVEX0lORk9cXG4gIDM4OlxcdFxcdHNlbGVjdCBHVUVTVF9QRVJGX0VWRU5UUyBpZiBQRVJGX0VWRU5UU1xcbiAgMzk6XFx0XFx0c2VsZWN0IEtWTV9HVUVTVF9NRU1GRFxcbiAgNDA6XFx0XFx0aGVscFxcbiAgNDE6XFx0XFx0ICBTdXBwb3J0IGhvc3RpbmcgdmlydHVhbGl6ZWQgZ3Vlc3QgbWFjaGluZXMuXFxuICA0MjpcXHRcXG4gIDQzOlxcdFxcdCAgSWYgdW5zdXJlLCBzYXkgTi5cXG4gIDQ0OlxcdFxcbiAgNDU6XFx0aWYgS1ZNXFxuICA0NjpcXHRcXG4gIDQ3OlxcdGNvbmZpZyBQVERVTVBfU1RBR0UyX0RFQlVHRlNcXG4gIDQ4OlxcdFxcdGJvb2wgXFxcIlByZXNlbnQgdGhlIHN0YWdlLTIgcGFnZXRhYmxlcyB0byBkZWJ1Z2ZzXFxcIlxcbiAgNDk6XFx0XFx0ZGVwZW5kcyBvbiBERUJVR19LRVJORUxcXG4gIDUwOlxcdFxcdGRlcGVuZHMgb24gREVCVUdfRlNcXG4gIDUxOlxcdFxcdGRlcGVuZHMgb24gQVJDSF9IQVNfUFREVU1QXFxuICA1MjpcXHRcXHRzZWxlY3QgUFREVU1QXFxuICA1MzpcXHRcXHRkZWZhdWx0IG5cXG4gIDU0OlxcdFxcdGhlbHBcXG4gIDU1OlxcdFxcdCAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCB0byBzaG93IHRoZSBzdGFnZS0yIGtlcm5lbCBwYWdldGFibGVzXFxuICA1NjpcXHRcXHQgIGxheW91dCBpbiBhIGRlYnVnZnMgZmlsZS4gVGhpcyBpbmZvcm1hdGlvbiBpcyBvbmx5IHVzZWZ1bCBmb3Iga2VybmVsIGRldmVsb3BlcnNcXG4gIDU3OlxcdFxcdCAgd2hvIGFyZSB3b3JraW5nIGluIGFyY2hpdGVjdHVyZSBzcGVjaWZpYyBhcmVhcyBvZiB0aGUga2VybmVsLlxcbiAgNTg6XFx0XFx0ICBJdCBpcyBwcm9iYWJseSBub3QgYSBnb29kIGlkZWEgdG8gZW5hYmxlIHRoaXMgZmVhdHVyZSBpbiBhIHByb2R1Y3Rpb25cXG4gIDU5OlxcdFxcdCAga2VybmVsLlxcbiAgNjA6XFx0XFxuICA2MTpcXHRcXHQgIElmIGluIGRvdWJ0LCBzYXkgTi5cXG4gIDYyOlxcdFxcbiAgNjM6XFx0Y29uZmlnIE5WSEVfRUwyX0RFQlVHXFxuICA2NDpcXHRcXHRib29sIFxcXCJEZWJ1ZyBtb2RlIGZvciBub24tVkhFIEVMMiBvYmplY3RcXFwiXFxuICA2NTpcXHRcXHRkZWZhdWx0IG5cXG4gIDY2OlxcdFxcdGhlbHBcXG4gIDY3OlxcdFxcdCAgU2F5IFkgaGVyZSB0byBlbmFibGUgdGhlIGRlYnVnIG1vZGUgZm9yIHRoZSBub24tVkhFIEtWTSBFTDIgb2JqZWN0LlxcbiAgNjg6XFx0XFx0ICBGYWlsdXJlIHJlcG9ydHMgd2lsbCBCVUcoKSBpbiB0aGUgaHlwZXJ2aXNvci4gVGhpcyBpcyBpbnRlbmRlZCBmb3JcXG4gIDY5OlxcdFxcdCAgbG9jYWwgRUwyIGh5cGVydmlzb3IgZGV2ZWxvcG1lbnQuXFxuICA3MDpcXHRcXG4gIDcxOlxcdFxcdCAgSWYgdW5zdXJlLCBzYXkgTi5cXG4gIDcyOlxcdFxcbiAgNzM6XFx0aWYgTlZIRV9FTDJfREVCVUdcXG4gIDc0OlxcdFxcbiAgNzU6XFx0Y29uZmlnIE5WSEVfRUwyX1RSQUNJTkdcXG4gIDc2OlxcdFxcdGJvb2xcXG4gIDc3OlxcdFxcdGRlcGVuZHMgb24gVFJBQ0lORyBcXHUwMDI2XFx1MDAyNiBGVFJBQ0VcXG4gIDc4OlxcdFxcdHNlbGVjdCBUUkFDRV9SRU1PVEVcXG4gIDc5OlxcdFxcdGRlZmF1bHQgeVxcbiAgODA6XFx0XFxuICA4MTpcXHRjb25maWcgUEtWTV9ESVNBQkxFX1NUQUdFMl9PTl9QQU5JQ1xcbiAgODI6XFx0XFx0Ym9vbCBcXFwiRGlzYWJsZSB0aGUgaG9zdCBzdGFnZS0yIG9uIHBhbmljXFxcIlxcbiAgODM6XFx0XFx0ZGVmYXVsdCBuXFxuICA4NDpcXHRcXHRoZWxwXFxuICA4NTpcXHRcXHQgIFJlbGF4IHRoZSBob3N0IHN0YWdlLTIgb24gaHlwZXJ2aXNvciBwYW5pYyB0byBhbGxvdyB0aGUga2VybmVsIHRvXFxuICA4NjpcXHRcXHQgIHVud2luZCBhbmQgc3ltYm9saXplIHRoZSBoeXBlcnZpc29yIHN0YWNrdHJhY2UuIFRoaXMgaG93ZXZlciB0YW1wZXJzXFxuICA4NzpcXHRcXHQgIHRoZSBzeXN0ZW0gc2VjdXJpdHkuIFRoaXMgaXMgaW50ZW5kZWQgZm9yIGxvY2FsIEVMMiBoeXBlcnZpc29yXFxuICA4ODpcXHRcXHQgIGRldmVsb3BtZW50LlxcbiAgODk6XFx0XFxuICA5MDpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IE4uXFxuICA5MTpcXHRcXG4gIDkyOlxcdGNvbmZpZyBQS1ZNX1NUQUNLVFJBQ0VcXG4gIDkzOlxcdFxcdGJvb2wgXFxcIlByb3RlY3RlZCBLVk0gaHlwZXJ2aXNvciBzdGFja3RyYWNlc1xcXCJcXG4gIDk0OlxcdFxcdGRlcGVuZHMgb24gUEtWTV9ESVNBQkxFX1NUQUdFMl9PTl9QQU5JQ1xcbiAgOTU6XFx0XFx0ZGVmYXVsdCB5XFxuICA5NjpcXHRcXHRoZWxwXFxuICA5NzpcXHRcXHQgIFNheSBZIGhlcmUgdG8gZW5hYmxlIHBLVk0gaHlwZXJ2aXNvciBzdGFja3RyYWNlcyBvbiBoeXBfcGFuaWMoKVxcbiAgOTg6XFx0XFxuICA5OTpcXHRcXHQgIElmIHVzaW5nIHByb3RlY3RlZCBuVkhFIG1vZGUsIGJ1dCBjYW5ub3QgYWZmb3JkIHRoZSBhc3NvY2lhdGVkXFxuIDEwMDpcXHRcXHQgIG1lbW9yeSBjb3N0IChsZXNzIHRoYW4gMC43NSBwYWdlIHBlciBDUFUpIG9mIHBLVk0gc3RhY2t0cmFjZXMsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDA4OjI2OjQ0LjEyNzg4MzQ3NloiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNzE0MTUxODQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhlIHRob3VnaHQgcHJvY2VzcyB5b3UgZGVzY3JpYmVkOlxuXG4qKkV4YW1pbmluZyB0aGUgS1ZNL0FSTTY0IEJ1aWxkIFByb2Nlc3MqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgYHZnaWMtbW1pby12My5jYCBpcyBiZWluZyBjb21waWxlZC4gR2l2ZW4gaXRzIGFzc29jaWF0aW9uIHdpdGggdGhlIFZpcnR1YWwgR0lDIGFuZCBBUk02NCBhcmNoaXRlY3R1cmUsIG15IGZpcnN0IHN0ZXAgaXMgdG8gZGlnIGludG8gdGhlIE1ha2VmaWxlcy4gSSdsbCBzdGFydCBieSBjaGVja2luZyB0aGUgTWFrZWZpbGVzIGluIGBhcmNoL2FybTY0L2t2bS9gIGFuZCB0aGVuIGBhcmNoL2FybTY0L2t2bS92Z2ljL2AuIFRoaXMgc2hvdWxkIHJldmVhbCB0aGUgYnVpbGQgcnVsZXMgYW5kIGRlcGVuZGVuY2llcyBmb3IgdGhhdCBzcGVjaWZpYyBmaWxlLiBIb3BlZnVsbHksIEkgY2FuIHRyYWNlIHRoZSBmbGFncywgaW5jbHVkZXMsIGFuZCBsaW5raW5nIHRvIHNlZSBob3cgaXQgYWxsIGNvbWVzIHRvZ2V0aGVyIGluIHRoZSBvdmVyYWxsIEtWTSBidWlsZCBmb3IgdGhpcyBhcmNoaXRlY3R1cmUuIEl0J3MgdXN1YWxseSBzdHJhaWdodGZvcndhcmQgdG8gc2VlIHRoZSByZWxldmFudCBvYmplY3QgZmlsZSBhbmQgd2hlcmUgaXQgZml0cyBpbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM4ODcsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDA4OjI2OjQ2Ljg0MjAzNzk5NVoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NTkzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJhcmNoL2FybTY0L2t2bS9NYWtlZmlsZVwiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG4gICAyOlxcdCNcXG4gICAzOlxcdCMgTWFrZWZpbGUgZm9yIEtlcm5lbC1iYXNlZCBWaXJ0dWFsIE1hY2hpbmUgbW9kdWxlXFxuICAgNDpcXHQjXFxuICAgNTpcXHRcXG4gICA2OlxcdGNjZmxhZ3MteSArPSAtSSAkKHNyYylcXG4gICA3OlxcdFxcbiAgIDg6XFx0aW5jbHVkZSAkKHNyY3RyZWUpL3ZpcnQva3ZtL01ha2VmaWxlLmt2bVxcbiAgIDk6XFx0XFxuICAxMDpcXHRvYmotJChDT05GSUdfS1ZNKSArPSBrdm0ub1xcbiAgMTE6XFx0b2JqLSQoQ09ORklHX0tWTSkgKz0gaHlwL1xcbiAgMTI6XFx0XFxuICAxMzpcXHRDRkxBR1Nfc3lzX3JlZ3MubyArPSAtV25vLW92ZXJyaWRlLWluaXRcXG4gIDE0OlxcdENGTEFHU19oYW5kbGVfZXhpdC5vICs9IC1Xbm8tb3ZlcnJpZGUtaW5pdFxcbiAgMTU6XFx0XFxuICAxNjpcXHRrdm0teSArPSBhcm0ubyBtbXUubyBtbWlvLm8gcHNjaS5vIGh5cGVyY2FsbHMubyBwdnRpbWUubyBcXFxcXFxuICAxNzpcXHRcXHQgaW5qZWN0X2ZhdWx0Lm8gdmFfbGF5b3V0Lm8gaGFuZGxlX2V4aXQubyBjb25maWcubyBcXFxcXFxuICAxODpcXHRcXHQgZ3Vlc3QubyBkZWJ1Zy5vIHJlc2V0Lm8gc3lzX3JlZ3MubyBzdGFja3RyYWNlLm8gXFxcXFxcbiAgMTk6XFx0XFx0IHZnaWMtc3lzLXJlZy12My5vIGZwc2ltZC5vIHBrdm0ubyBcXFxcXFxuICAyMDpcXHRcXHQgYXJjaF90aW1lci5vIHRybmcubyB2bWlkLm8gZW11bGF0ZS1uZXN0ZWQubyBuZXN0ZWQubyBhdC5vIFxcXFxcXG4gIDIxOlxcdFxcdCB2Z2ljL3ZnaWMubyB2Z2ljL3ZnaWMtaW5pdC5vIFxcXFxcXG4gIDIyOlxcdFxcdCB2Z2ljL3ZnaWMtaXJxZmQubyB2Z2ljL3ZnaWMtdjIubyBcXFxcXFxuICAyMzpcXHRcXHQgdmdpYy92Z2ljLXYzLm8gdmdpYy92Z2ljLXY0Lm8gXFxcXFxcbiAgMjQ6XFx0XFx0IHZnaWMvdmdpYy1tbWlvLm8gdmdpYy92Z2ljLW1taW8tdjIubyBcXFxcXFxuICAyNTpcXHRcXHQgdmdpYy92Z2ljLW1taW8tdjMubyB2Z2ljL3ZnaWMta3ZtLWRldmljZS5vIFxcXFxcXG4gIDI2OlxcdFxcdCB2Z2ljL3ZnaWMtaXRzLm8gdmdpYy92Z2ljLWRlYnVnLm8gdmdpYy92Z2ljLXYzLW5lc3RlZC5vIFxcXFxcXG4gIDI3OlxcdFxcdCB2Z2ljL3ZnaWMtdjUub1xcbiAgMjg6XFx0XFxuICAyOTpcXHRrdm0tJChDT05GSUdfSFdfUEVSRl9FVkVOVFMpICArPSBwbXUtZW11bC5vIHBtdS5vXFxuICAzMDpcXHRrdm0tJChDT05GSUdfQVJNNjRfUFRSX0FVVEgpICArPSBwYXV0aC5vXFxuICAzMTpcXHRrdm0tJChDT05GSUdfUFREVU1QX1NUQUdFMl9ERUJVR0ZTKSArPSBwdGR1bXAub1xcbiAgMzI6XFx0XFxuICAzMzpcXHRrdm0tJChDT05GSUdfTlZIRV9FTDJfVFJBQ0lORykgKz0gaHlwX3RyYWNlLm9cXG4gIDM0OlxcdFxcbiAgMzU6XFx0YWx3YXlzLXkgOj0gaHlwX2NvbnN0YW50cy5oIGh5cC1jb25zdGFudHMuc1xcbiAgMzY6XFx0XFxuICAzNzpcXHRkZWZpbmUgcnVsZV9nZW5faHlwX2NvbnN0YW50c1xcbiAgMzg6XFx0XFx0JChjYWxsIGZpbGVjaGssb2Zmc2V0cyxfX0hZUF9DT05TVEFOVFNfSF9fKVxcbiAgMzk6XFx0ZW5kZWZcXG4gIDQwOlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQwODoyNjo0Ni44NDIxMDUyOTVaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6Nzk5OTkwNDkzNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXNpcyBvZiBWR0lDdjMgUmVkaXN0cmlidXRvciBSZWdpc3RyYXRpb24gaW4gQVJNNjQgS1ZNKipcblxuT2theSwgc28gYHZnaWMvdmdpYy1tbWlvLXYzLm9gIGlzIGJlaW5nIGJ1aWx0IHdoZW4gYENPTkZJR19LVk1gIGlzIGVuYWJsZWQsIGFuZCB3ZSBrbm93IHRoYXQgS1ZNIGl0c2VsZiBvbiBhcm02NCByZXF1aXJlcyBgQ09ORklHX0tWTWAgYW5kIGBDT05GSUdfVklSVFVBTElaQVRJT05gLiBJIHNob3VsZCBkb3VibGUtY2hlY2sgdGhlIEtjb25maWcsIGp1c3QgdG8gYmUgdGhvcm91Z2guLi4geWVwLCBgbWVudWNvbmZpZyBWSVJUVUFMSVpBVElPTmAsIGZvbGxvd2VkIGJ5IGBtZW51Y29uZmlnIEtWTWAuIE5vdywgbGV0J3MgbG9vayBhdCB0aGUgYWN0dWFsIGNvZGUgY2hhbmdlcy5cblxuRXNzZW50aWFsbHksIHRoaXMgaXMgYSBmaXggZm9yIHNvbWUgZXJyb3IgaGFuZGxpbmcgYXJvdW5kIHJlZ2lzdGVyaW5nIHJlZGlzdHJpYnV0b3IgcmVnaW9ucy4gUHJldmlvdXNseSwgaW4gYHZnaWNfcmVnaXN0ZXJfcmVkaXN0X2lvZGV2KClgLCBpZiBga3ZtX2lvX2J1c19yZWdpc3Rlcl9kZXZgIGZhaWxlZCwgdGhlIGNvZGUgZGlkbid0IHVuZG8gdGhlIHJlZGlzdHJpYnV0b3IgYXNzaWdubWVudC4gSXQgaW5jcmVtZW50ZWQgYHJkcmVnLVx1MDAzZWZyZWVfaW5kZXhgIGFuZCBzZXQgYHZnaWNfY3B1LVx1MDAzZXJkcmVnYCwgYnV0IGRpZG4ndCBhY3R1YWxseSB1bnJlZ2lzdGVyIHRoZSBkZXZpY2UsIGxlYWRpbmcgdG8gcG90ZW50aWFsIGNvcnJ1cHRpb24uIE5vdywgaWYgdGhlIHJlZ2lzdHJhdGlvbiBmYWlscywgd2UgY2FsbCBgdmdpY191bmRvX3JlZGlzdF9hc3NpZ25tZW50KHZjcHUpYCB0byBjbGVhbiB0aGluZ3MgdXAuXG5cblRoZSBzYW1lIHByb2JsZW0gZXhpc3RlZCBpbiBgdmdpY19yZWdpc3Rlcl9hbGxfcmVkaXN0X2lvZGV2cygpYC4gSXQgdXNlZCB0byBpdGVyYXRlIGFuZCB1bnJlZ2lzdGVyIHByZXZpb3VzIHJlZGlzdHJpYnV0b3IgaW9kZXZzLCBidXQgZGlkbid0IGhhdmUgYSB0YXJnZXRlZCBtZXRob2QgdG8gZGVhbCB3aXRoIGEgZmFpbGluZyByZWdpc3RyYXRpb247IG5vdyBpdCBwYXNzZXMgYHJkcmVnYCB0byB0aGUgcmVnaXN0cmF0aW9uIGZ1bmN0aW9uLiBJZiBhIHJlZ2lzdHJhdGlvbiBmYWlscywgaXQgbm93IGl0ZXJhdGVzIHRocm91Z2ggdGhlICpwcmV2aW91c2x5KiBwcm9jZXNzZWQgdmNwdXMgYW5kIHJvbGxzIGJhY2sgb25seSB0aGUgcmVsZXZhbnQgaW9kZXZzIGJ5IGNhbGxpbmcgYHZnaWNfcm9sbGJhY2tfcmVkaXN0X2lvZGV2KHZjcHUsIHJkcmVnKWAuIFRoaXMgZnVuY3Rpb24gaXMgdmVyeSBzcGVjaWZpYzogaXQgb25seSBvcGVyYXRlcyBvbiB0aGUgaW9kZXZzIGFzc29jaWF0ZWQgd2l0aCB0aGUgKmN1cnJlbnQqIHJlZGlzdHJpYnV0b3IgcmVnaW9uLiBJdCB0aGVuIHVucmVnaXN0ZXJzIHRoZSBpb2RldiBhbmQgY2xlYXJzIHRoZSB2Y3B1J3MgcmVmZXJlbmNlcy4gQWxzbywgYHZnaWNfdjNfc2V0X3JlZGlzdF9iYXNlKClgIG5vdyBwYXNzZXMgdGhlIGByZHJlZ2AgdG8gYHZnaWNfcmVnaXN0ZXJfYWxsX3JlZGlzdF9pb2RldnMoKWAuXG5cblNvLCBpdCBsb29rcyBsaWtlIGEgcHJvcGVyIGZpeCBmb3IgZXJyb3IgdW53aW5kaW5nIGFuZCByb2xsYmFjayBkdXJpbmcgcmVkaXN0cmlidXRvciByZWdpc3RyYXRpb24gaW4gQVJNNjQgS1ZNJ3MgVkdJQ3YzIGltcGxlbWVudGF0aW9uLiBXZSdyZSBub3cgZW5zdXJpbmcgdGhhdCBpZiBhIGRldmljZSByZWdpc3RyYXRpb24gZmFpbHMgcGFydHdheSB0aHJvdWdoLCB3ZSBwcm9wZXJseSBjbGVhbiB1cCBhbnkgcGFydGlhbGx5LXJlZ2lzdGVyZWQgZGV2aWNlcywgYXZvaWRpbmcgc3RhdGUgY29ycnVwdGlvbi5cblxuTm93LCBpcyB0aGlzIGV2ZW4gYSByZWFjaGFibGUgY29kZSBwYXRoPyBZZXMsIEtWTSBvbiBBUk02NCBpcyBmdXp6YWJsZS4gV2UgY2FuIHVzZSB0b29scyBsaWtlIHN5emthbGxlciB0byBmdXp6IHRoZSBgL2Rldi9rdm1gIGlvY3RscywgaW5jbHVkaW5nIGBLVk1fU0VUX0RFVklDRV9BVFRSYCBmb3IgYEtWTV9ERVZfQVJNX1ZHSUNfR1JQX0FERFJgIGFuZCBgS1ZNX1ZHSUNfVjNfQUREUl9UWVBFX1JFRElTVF9SRUdJT05gLiBUaGlzIGlzIGEgY2xhc3NpYyB0YXJnZXQgZm9yIGZ1enppbmcuIE1lbW9yeSBzYWZldHksIGxvY2sgb3JkZXJpbmcsIGFuZCBzdGF0ZSBjb3JydXB0aW9uIGR1cmluZyBlcnJvciByb2xsYmFjayBpbiBLVk0gYXJlIHByaW1lIHRhcmdldHMgZm9yIHZ1bG5lcmFiaWxpdGllcy5cblxuQWxyaWdodCwgbGV0J3MgbG9vayBhdCB0aGUgbm9uLXN0YXRpYyBmdW5jdGlvbnMgZnJvbSBgYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLW1taW8tdjMuY2A6IGB2Z2ljX3YzX3NldF9yZWRpc3RfYmFzZWAsIGB2Z2ljX3JlZ2lzdGVyX3JlZGlzdF9pb2RldmAsIGFuZCBgdmdpY191bnJlZ2lzdGVyX3JlZGlzdF9pb2RldmAuIFdlIG5lZWQgdG8gZGV0ZXJtaW5lIGhvdyB0aGVzZSBmdW5jdGlvbnMgYXJlIGJlaW5nIHVzZWQgd2l0aGluIEtWTS4gV2Ugc2hvdWxkIHRyYWNlIHRoZWlyIGNhbGxzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDg4NCwiT3V0cHV0VG9rZW5zIjo2NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExMTUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQwODoyNjo1NC44NDIwMTQzMTFaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUxOTIxNDQ2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInZnaWNfdjNfc2V0X3JlZGlzdF9iYXNlfHZnaWNfcmVnaXN0ZXJfcmVkaXN0X2lvZGV2fHZnaWNfdW5yZWdpc3Rlcl9yZWRpc3RfaW9kZXZcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC9hcm02NC9rdm1cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWluaXQuYz0zODE9aW50IGt2bV92Z2ljX3ZjcHVfaW5pdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuLS1cXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtaW5pdC5jLTQwNS1cXHRcXHRtdXRleF9sb2NrKFxcdTAwMjZ2Y3B1LVxcdTAwM2Vrdm0tXFx1MDAzZXNsb3RzX2xvY2spO1xcbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1pbml0LmM6NDA2OlxcdFxcdHJldCA9IHZnaWNfcmVnaXN0ZXJfcmVkaXN0X2lvZGV2KHZjcHUpO1xcbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1pbml0LmMtNDA3LVxcdFxcdG11dGV4X3VubG9jayhcXHUwMDI2dmNwdS1cXHUwMDNla3ZtLVxcdTAwM2VzbG90c19sb2NrKTtcXG4tLVxcbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1pbml0LmM9NTEzPXN0YXRpYyB2b2lkIF9fa3ZtX3ZnaWNfdmNwdV9kZXN0cm95KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4tLVxcbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1pbml0LmMtNTQ0LVxcdFxcdGlmIChrdm1fZ2V0X3ZjcHVfYnlfaWQodmNwdS1cXHUwMDNla3ZtLCB2Y3B1LVxcdTAwM2V2Y3B1X2lkKSAhPSB2Y3B1KVxcbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1pbml0LmM6NTQ1OlxcdFxcdFxcdHZnaWNfdW5yZWdpc3Rlcl9yZWRpc3RfaW9kZXYodmNwdSk7XFxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWluaXQuYy01NDYtXFxuLS1cXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtaW5pdC5jPTU2MD12b2lkIGt2bV92Z2ljX2Rlc3Ryb3koc3RydWN0IGt2bSAqa3ZtKVxcbi0tXFxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWluaXQuYy01NzgtXFx0XFx0a3ZtX2Zvcl9lYWNoX3ZjcHUoaSwgdmNwdSwga3ZtKVxcbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1pbml0LmM6NTc5OlxcdFxcdFxcdHZnaWNfdW5yZWdpc3Rlcl9yZWRpc3RfaW9kZXYodmNwdSk7XFxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWluaXQuYy01ODAtXFxuLS1cXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMta3ZtLWRldmljZS5jPTkzPXN0YXRpYyBpbnQga3ZtX3ZnaWNfYWRkcihzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fZGV2aWNlX2F0dHIgKmF0dHIsIGJvb2wgd3JpdGUpXFxuLS1cXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMta3ZtLWRldmljZS5jLTEzNy1cXHRcXHRpZiAod3JpdGUpIHtcXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMta3ZtLWRldmljZS5jOjEzODpcXHRcXHRcXHRyID0gdmdpY192M19zZXRfcmVkaXN0X2Jhc2Uoa3ZtLCAwLCBhZGRyLCAwKTtcXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMta3ZtLWRldmljZS5jLTEzOS1cXHRcXHRcXHRnb3RvIG91dDtcXG4tLVxcbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1rdm0tZGV2aWNlLmMtMTY3LVxcdFxcdFxcdGVsc2VcXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMta3ZtLWRldmljZS5jOjE2ODpcXHRcXHRcXHRcXHRyID0gdmdpY192M19zZXRfcmVkaXN0X2Jhc2Uoa3ZtLCBpbmRleCxcXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMta3ZtLWRldmljZS5jLTE2OS1cXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgYmFzZSwgY291bnQpO1xcbi0tXFxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLW1taW8tdjMuYz03Njk9c3RhdGljIHZvaWQgdmdpY191bmRvX3JlZGlzdF9hc3NpZ25tZW50KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4tLVxcbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1tbWlvLXYzLmMtNzgyLS8qKlxcbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1tbWlvLXYzLmM6NzgzOiAqIHZnaWNfcmVnaXN0ZXJfcmVkaXN0X2lvZGV2IC0gcmVnaXN0ZXIgYSBzaW5nbGUgcmVkaXN0IGlvZGV2XFxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLW1taW8tdjMuYy03ODQtICogQHZjcHU6ICAgIFRoZSBWQ1BVIHRvIHdoaWNoIHRoZSByZWRpc3RyaWJ1dG9yIGJlbG9uZ3NcXG4tLVxcbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1tbWlvLXYzLmMtNzkwLSAqL1xcbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1tbWlvLXYzLmM6NzkxOmludCB2Z2ljX3JlZ2lzdGVyX3JlZGlzdF9pb2RldihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLW1taW8tdjMuYy03OTIte1xcbi0tXFxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLW1taW8tdjMuYy04NTAtXFxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLW1taW8tdjMuYzo4NTE6dm9pZCB2Z2ljX3VucmVnaXN0ZXJfcmVkaXN0X2lvZGV2KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtbW1pby12My5jLTg1Mi17XFxuLS1cXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtbW1pby12My5jPTg1OD1zdGF0aWMgdm9pZCB2Z2ljX3JvbGxiYWNrX3JlZGlzdF9pb2RldihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXFxuLS1cXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtbW1pby12My5jLTg2Ny1cXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtbW1pby12My5jOjg2ODpcXHR2Z2ljX3VucmVnaXN0ZXJfcmVkaXN0X2lvZGV2KHZjcHUpO1xcbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1tbWlvLXYzLmMtODY5LVxcbi0tXFxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLW1taW8tdjMuYz04NzU9c3RhdGljIGludCB2Z2ljX3JlZ2lzdGVyX2FsbF9yZWRpc3RfaW9kZXZzKHN0cnVjdCBrdm0gKmt2bSxcXG4tLVxcbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1tbWlvLXYzLmMtODg0LVxcdGt2bV9mb3JfZWFjaF92Y3B1KGMsIHZjcHUsIGt2bSkge1xcbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1tbWlvLXYzLmM6ODg1OlxcdFxcdHJldCA9IHZnaWNfcmVnaXN0ZXJfcmVkaXN0X2lvZGV2KHZjcHUpO1xcbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1tbWlvLXYzLmMtODg2LVxcdFxcdGlmIChyZXQpXFxuLS1cXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtbW1pby12My5jPTk4Nj12b2lkIHZnaWNfdjNfZnJlZV9yZWRpc3RfcmVnaW9uKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IHZnaWNfcmVkaXN0X3JlZ2lvbiAqcmRyZWcpXFxuLS1cXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtbW1pby12My5jLTEwMDItXFxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLW1taW8tdjMuYzoxMDAzOmludCB2Z2ljX3YzX3NldF9yZWRpc3RfYmFzZShzdHJ1Y3Qga3ZtICprdm0sIHUzMiBpbmRleCwgdTY0IGFkZHIsIHUzMiBjb3VudClcXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtbW1pby12My5jLTEwMDQte1xcbi0tXFxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLmg9MzQ5PWludCB2Z2ljX3YzX3NhdmVfcGVuZGluZ190YWJsZXMoc3RydWN0IGt2bSAqa3ZtKTtcXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMuaDozNTA6aW50IHZnaWNfdjNfc2V0X3JlZGlzdF9iYXNlKHN0cnVjdCBrdm0gKmt2bSwgdTMyIGluZGV4LCB1NjQgYWRkciwgdTMyIGNvdW50KTtcXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMuaDozNTE6aW50IHZnaWNfcmVnaXN0ZXJfcmVkaXN0X2lvZGV2KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XFxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLmg6MzUyOnZvaWQgdmdpY191bnJlZ2lzdGVyX3JlZGlzdF9pb2RldihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xcbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy5oLTM1My1ib29sIHZnaWNfdjNfY2hlY2tfYmFzZShzdHJ1Y3Qga3ZtICprdm0pO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQwODoyNjo1NC44OTM5NDIxMzdaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDMxMTcyNzY4MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiBBUk02NCBLVk0gQ29uZmlndXJhdGlvbiBhbmQgUGF0Y2ggTG9naWMqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJIG5lZWQgdG8gdmVyaWZ5IHRoZSBuZWNlc3NhcnkgY29uZmlndXJhdGlvbnMgZm9yIGVuYWJsaW5nIEtWTSBvbiBhcm02NC4gSSdtIHN0YXJ0aW5nIHdpdGggdGhlIGBhcmNoL2FybTY0L2t2bS9LY29uZmlnYCBmaWxlLiBJIHNlZSBgbWVudWNvbmZpZyBWSVJUVUFMSVpBVElPTmAgYW5kLCBkZXBlbmRlbnQgb24gdGhhdCwgYG1lbnVjb25maWcgS1ZNYC4gVGhlIGRlcGVuZGVuY3kgbWFrZXMgc2Vuc2UsIG9mIGNvdXJzZS5cblxuTmV4dCwgSSdtIGRvdWJsZS1jaGVja2luZyB0aG9zZSBzeW1ib2xzOiBgS1ZNYCBhbmQgYFZJUlRVQUxJWkFUSU9OYC4gVGhleSdyZSBib3RoIGRlZmluZWQgYXMgYm9vbGVhbiBjb25maWdzLCB3aGljaCBpcyB3aGF0IEknZCBleHBlY3QuIE5vdyBJJ2xsIHF1aWNrbHkgY29uZmlybSB0aGF0IEtWTSBkb2Vzbid0IGhhdmUgYW55IHNwZWNpZmljIGFyY2hpdGVjdHVyYWwgZGVwZW5kZW5jaWVzIHRoYXQgSSd2ZSBtaXNzZWQsIGFuZCB0aGF0IGBLVk1gIGFuZCBgVklSVFVBTElaQVRJT05gIGFyZSBpbmRlZWQgdGhlIGNvcmUgY29uZmlndXJhdGlvbiBzeW1ib2xzLiBUaGUgYEVuYWJsZUNvbmZpZ3NgIGxpc3QgY29uZmlybXMgbXkgdW5kZXJzdGFuZGluZy5cblxuSSdtIG5vdyBzaGlmdGluZyBmb2N1cyB0byB0aGUga2V5IGZ1bmN0aW9uIHN5bWJvbHMgaW1wYWN0ZWQgYnkgdGhlIGNoYW5nZXMgaW4gdGhpcyBwYXRjaC4gU3BlY2lmaWNhbGx5LCBJIHNlZSB0aHJlZSBjcml0aWNhbCBlbnRyeSBwb2ludHMgdGhhdCB3aWxsIGJlIGRpcmVjdGx5IGFmZmVjdGVkLiBOYW1lbHk6IGB2Z2ljX3YzX3NldF9yZWRpc3RfYmFzZWAsIGB2Z2ljX3JlZ2lzdGVyX3JlZGlzdF9pb2RldmAsIGFuZCBgdmdpY191bnJlZ2lzdGVyX3JlZGlzdF9pb2RldmAuXG5cblRoZSByZWFzb25pbmcgYmVoaW5kIHRoZSBwYXRjaCBpcyBmYWlybHkgY2xlYXIuIEl0J3MgYWJvdXQgaW1wcm92ZWQgZXJyb3IgaGFuZGxpbmcgaW4gdGhlIEFSTTY0IEtWTSBWR0lDdjMgcmVkaXN0cmlidXRvciBsb2dpYywgc3BlY2lmaWNhbGx5IHdoZW4gYXNzaWduaW5nIHJlZ2lvbnMgYW5kIHJlZ2lzdGVyaW5nIGlvZGV2cy4gVGhlIHBhdGNoIGFpbXMgdG8gY29ycmVjdGx5IHJvbGwgYmFjayByZWRpc3RyaWJ1dG9yIGFzc2lnbm1lbnRzIHdoZW4gZWl0aGVyIGEgc2luZ2xlIGlvZGV2IHJlZ2lzdHJhdGlvbiBvciB0aGUgcmVnaXN0cmF0aW9uIG9mIGFsbCByZWRpc3RyaWJ1dG9yIGlvZGV2cyBmYWlscy4gVGhlIGdvYWwgaXMgdG8gYXZvaWQgc3RhbGUgc3RhdGVzIGFuZCBwcmV2ZW50IGluY29ycmVjdCBhY2NvdW50aW5nIG9mIFZDUFUncyBhc3NpZ25lZCB0byByZWdpb25zLCB3aGljaCBpcyBhIGNvbW1vbiBzb3VyY2Ugb2YgaW5zdGFiaWxpdHkuIEl0J3MgYWxsIGFib3V0IGVuc3VyaW5nIHRoYXQgd2Ugb25seSB1bmRvIGFzc2lnbm1lbnRzIGZvciB2Q1BVcyBhc3NvY2lhdGVkIHdpdGggdGhlIGZhaWxlZCByZWdpb24sIHdoaWNoIGlzIGEgZ29vZCwgc291bmQgYXBwcm9hY2guIFRoaXMgbWFrZXMgdGhlIEtWTSBWR0lDIGluaXRpYWxpemF0aW9uIGFuZCBkZXZpY2UgY29uZmlndXJhdGlvbiBwYXRocyByZWFjaGFibGUsIHdoaWNoIGhhcyBzb21lIG9idmlvdXMgaW1wbGljYXRpb25zIGZvciBmdXp6aW5nIGFuZCBvdmVyYWxsIHJvYnVzdG5lc3MuXG5cblRoZXJlZm9yZSwgSSdsbCBjYWxsIGBzZXQtcmVzdWx0c2AuIEkgaGF2ZSBhIGdvb2QgZ3Jhc3Agb2YgdGhlIHBhdGNoJ3MgaW1wYWN0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODcyOCwiT3V0cHV0VG9rZW5zIjoxNjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNzEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMDg6MjY6NTkuMjA1NjczMDI3WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzM3ODE0NzQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIktWTVwiLFxuICAgIFwiVklSVFVBTElaQVRJT05cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ2Z2ljX3YzX3NldF9yZWRpc3RfYmFzZVwiLFxuICAgIFwidmdpY19yZWdpc3Rlcl9yZWRpc3RfaW9kZXZcIixcbiAgICBcInZnaWNfdW5yZWdpc3Rlcl9yZWRpc3RfaW9kZXZcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBlcnJvciB1bndpbmRpbmcgYW5kIHJvbGxiYWNrIGhhbmRsaW5nIHdoZW4gcmVnaXN0ZXJpbmcgVkdJQ3YzIHJlZGlzdHJpYnV0b3IgSS9PIGRldmljZXMgaW4gQVJNNjQgS1ZNLiBJdCBlbnN1cmVzIHRoYXQgZmFpbGVkIHJlZGlzdHJpYnV0b3IgcmVnaXN0cmF0aW9uIHByb3Blcmx5IHJvbGxzIGJhY2sgdGhlIGFzc2lnbmVkIHJlZ2lvbiBzdGF0ZSBhbmQgb25seSB0ZWFycyBkb3duIFZDUFVzIGFzc29jaWF0ZWQgd2l0aCB0aGUgZmFpbGluZyByZWdpb24uIFRoZXNlIGNvZGUgcGF0aHMgYXJlIHJlYWNoYWJsZSB2aWEgS1ZNIGlvY3RscyBhbmQgd29ydGggZnV6emluZyBmb3IgY29uY3VycmVuY3kgYW5kIHN0YXRlIG1hbmFnZW1lbnQgYnVncy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJLVk1cIixcbiAgICBcIlZJUlRVQUxJWkFUSU9OXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidmdpY192M19zZXRfcmVkaXN0X2Jhc2VcIixcbiAgICBcInZnaWNfcmVnaXN0ZXJfcmVkaXN0X2lvZGV2XCIsXG4gICAgXCJ2Z2ljX3VucmVnaXN0ZXJfcmVkaXN0X2lvZGV2XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgZXJyb3IgdW53aW5kaW5nIGFuZCByb2xsYmFjayBoYW5kbGluZyB3aGVuIHJlZ2lzdGVyaW5nIFZHSUN2MyByZWRpc3RyaWJ1dG9yIEkvTyBkZXZpY2VzIGluIEFSTTY0IEtWTS4gSXQgZW5zdXJlcyB0aGF0IGZhaWxlZCByZWRpc3RyaWJ1dG9yIHJlZ2lzdHJhdGlvbiBwcm9wZXJseSByb2xscyBiYWNrIHRoZSBhc3NpZ25lZCByZWdpb24gc3RhdGUgYW5kIG9ubHkgdGVhcnMgZG93biBWQ1BVcyBhc3NvY2lhdGVkIHdpdGggdGhlIGZhaWxpbmcgcmVnaW9uLiBUaGVzZSBjb2RlIHBhdGhzIGFyZSByZWFjaGFibGUgdmlhIEtWTSBpb2N0bHMgYW5kIHdvcnRoIGZ1enppbmcgZm9yIGNvbmN1cnJlbmN5IGFuZCBzdGF0ZSBtYW5hZ2VtZW50IGJ1Z3MuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDA4OjI2OjU5LjI3OTQ2MDU4MVoiLCJTZXEiOjE3LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTk1ODgwMzYyMzUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQwODoyNjo1OS4yNzk5MDEzNDFaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjo1OTU4NzU5MjE5NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgZXJyb3Igcm9sbGJhY2sgaGFuZGxpbmcgZHVyaW5nIEtWTSBBUk02NCBWR0lDdjMgcmVkaXN0cmlidXRvciBpb2RldiByZWdpc3RyYXRpb24gKGhhbmRsaW5nIGZhaWxlZCByZWdpc3RyYXRpb24gY2xlYW51cCwgcmVzZXR0aW5nIHZnaWNfY3B1IHJlZGlzdHJpYnV0b3IgcG9pbnRlcnMsIGFuZCBkZWNyZW1lbnRpbmcgZnJlZV9pbmRleCBhcHByb3ByaWF0ZWx5KS4gVGhlIGNoYW5nZXMgZG8gbm90IGludHJvZHVjZSBvciBtb2RpZnkgYW55IG1lbW9yeSBhbGxvY2F0aW9ucywgZGF0YSBzdHJ1Y3R1cmVzIGNvcGllZCB0byB1c2Vyc3BhY2UsIG9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFjY2Vzc2VzLiBBbnkgcG90ZW50aWFsIGNvbmN1cnJlbmN5LCBsb2NrIG9yZGVyaW5nLCBvciBpbnZhbGlkIGRlcmVmZXJlbmNlIGlzc3VlcyBhcmUgY292ZXJlZCBieSBzdGFuZGFyZCBzYW5pdGl6ZXJzIChMT0NLREVQL0tBU0FOKS4gVGhlcmVmb3JlLCB0aGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGluZm9ybWF0aW9uIGxlYWtzIHRoYXQgd291bGQgcmVxdWlyZSBhIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBhYzhmYzdhNTRjZjE3MjIyNzRjODM0MmNmMWYwODYyYTE0NTk5YjY4XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBBdWcgMzEgMDg6MjY6MjMgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtbW1pby12My5jIGIvYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLW1taW8tdjMuY1xuaW5kZXggNTkxM2EyMGQ4MzAxOS4uNzdhYTg0MzM3MDFhMSAxMDA2NDRcbi0tLSBhL2FyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1tbWlvLXYzLmNcbisrKyBiL2FyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1tbWlvLXYzLmNcbkBAIC03NjYsNiArNzY2LDE5IEBAIHVuc2lnbmVkIGludCB2Z2ljX3YzX2luaXRfZGlzdF9pb2RldihzdHJ1Y3QgdmdpY19pb19kZXZpY2UgKmRldilcbiBcdHJldHVybiBTWl82NEs7XG4gfVxuIFxuK3N0YXRpYyB2b2lkIHZnaWNfdW5kb19yZWRpc3RfYXNzaWdubWVudChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4re1xuK1x0c3RydWN0IHZnaWNfY3B1ICp2Z2ljX2NwdSA9IFx1MDAyNnZjcHUtXHUwMDNlYXJjaC52Z2ljX2NwdTtcbitcbitcdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXHUwMDI2dmNwdS1cdTAwM2Vrdm0tXHUwMDNlc2xvdHNfbG9jayk7XG4rXG4rXHRndWFyZChtdXRleCkoXHUwMDI2dmNwdS1cdTAwM2Vrdm0tXHUwMDNlYXJjaC5jb25maWdfbG9jayk7XG4rXG4rXHR2Z2ljX2NwdS1cdTAwM2VyZHJlZy1cdTAwM2VmcmVlX2luZGV4LS07XG4rXHR2Z2ljX2NwdS1cdTAwM2VyZHJlZyA9IE5VTEw7XG4rXHR2Z2ljX2NwdS1cdTAwM2VyZF9pb2Rldi5iYXNlX2FkZHIgPSBWR0lDX0FERFJfVU5ERUY7XG4rfVxuK1xuIC8qKlxuICAqIHZnaWNfcmVnaXN0ZXJfcmVkaXN0X2lvZGV2IC0gcmVnaXN0ZXIgYSBzaW5nbGUgcmVkaXN0IGlvZGV2XG4gICogQHZjcHU6ICAgIFRoZSBWQ1BVIHRvIHdoaWNoIHRoZSByZWRpc3RyaWJ1dG9yIGJlbG9uZ3NcbkBAIC04MTgsMTYgKzgzMSwxNyBAQCBpbnQgdmdpY19yZWdpc3Rlcl9yZWRpc3RfaW9kZXYoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFx0cmRfZGV2LVx1MDAzZW5yX3JlZ2lvbnMgPSBBUlJBWV9TSVpFKHZnaWNfdjNfcmRfcmVnaXN0ZXJzKTtcbiBcdHJkX2Rldi1cdTAwM2VyZWRpc3RfdmNwdSA9IHZjcHU7XG4gXG4rXHQvKiBQcm90ZWN0ZWQgYnkgc2xvdHNfbG9jayAqL1xuK1x0cmRyZWctXHUwMDNlZnJlZV9pbmRleCsrO1xuK1xuIFx0bXV0ZXhfdW5sb2NrKFx1MDAyNmt2bS1cdTAwM2VhcmNoLmNvbmZpZ19sb2NrKTtcbiBcbiBcdHJldCA9IGt2bV9pb19idXNfcmVnaXN0ZXJfZGV2KGt2bSwgS1ZNX01NSU9fQlVTLCByZF9iYXNlLFxuIFx0XHRcdFx0ICAgICAgMiAqIFNaXzY0SywgXHUwMDI2cmRfZGV2LVx1MDAzZWRldik7XG4gXHRpZiAocmV0KVxuLVx0XHRyZXR1cm4gcmV0O1xuK1x0XHR2Z2ljX3VuZG9fcmVkaXN0X2Fzc2lnbm1lbnQodmNwdSk7XG4gXG4tXHQvKiBQcm90ZWN0ZWQgYnkgc2xvdHNfbG9jayAqL1xuLVx0cmRyZWctXHUwMDNlZnJlZV9pbmRleCsrO1xuLVx0cmV0dXJuIDA7XG4rXHRyZXR1cm4gcmV0O1xuIFxuIG91dF91bmxvY2s6XG4gXHRtdXRleF91bmxvY2soXHUwMDI2a3ZtLVx1MDAzZWFyY2guY29uZmlnX2xvY2spO1xuQEAgLTg0MSw3ICs4NTUsMjUgQEAgdm9pZCB2Z2ljX3VucmVnaXN0ZXJfcmVkaXN0X2lvZGV2KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBcdGt2bV9pb19idXNfdW5yZWdpc3Rlcl9kZXYodmNwdS1cdTAwM2Vrdm0sIEtWTV9NTUlPX0JVUywgXHUwMDI2cmRfZGV2LVx1MDAzZWRldik7XG4gfVxuIFxuLXN0YXRpYyBpbnQgdmdpY19yZWdpc3Rlcl9hbGxfcmVkaXN0X2lvZGV2cyhzdHJ1Y3Qga3ZtICprdm0pXG4rc3RhdGljIHZvaWQgdmdpY19yb2xsYmFja19yZWRpc3RfaW9kZXYoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuK1x0XHRcdFx0ICAgICAgIHN0cnVjdCB2Z2ljX3JlZGlzdF9yZWdpb24gKnJkcmVnKVxuK3tcbitcdHN0cnVjdCB2Z2ljX2NwdSAqdmdpY19jcHUgPSBcdTAwMjZ2Y3B1LVx1MDAzZWFyY2gudmdpY19jcHU7XG4rXG4rXHRsb2NrZGVwX2Fzc2VydF9oZWxkKFx1MDAyNnZjcHUtXHUwMDNla3ZtLVx1MDAzZXNsb3RzX2xvY2spO1xuK1xuK1x0aWYgKHZnaWNfY3B1LVx1MDAzZXJkcmVnICE9IHJkcmVnKVxuK1x0XHRyZXR1cm47XG4rXG4rXHR2Z2ljX3VucmVnaXN0ZXJfcmVkaXN0X2lvZGV2KHZjcHUpO1xuK1xuK1x0Z3VhcmQobXV0ZXgpKFx1MDAyNnZjcHUtXHUwMDNla3ZtLVx1MDAzZWFyY2guY29uZmlnX2xvY2spO1xuK1x0dmdpY19jcHUtXHUwMDNlcmRyZWcgPSBOVUxMO1xuK1x0dmdpY19jcHUtXHUwMDNlcmRfaW9kZXYuYmFzZV9hZGRyID0gVkdJQ19BRERSX1VOREVGO1xuK31cbitcbitzdGF0aWMgaW50IHZnaWNfcmVnaXN0ZXJfYWxsX3JlZGlzdF9pb2RldnMoc3RydWN0IGt2bSAqa3ZtLFxuK1x0XHRcdFx0XHQgICBzdHJ1Y3QgdmdpY19yZWRpc3RfcmVnaW9uICpyZHJlZylcbiB7XG4gXHRzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHU7XG4gXHR1bnNpZ25lZCBsb25nIGM7XG5AQCAtODU2LDEyICs4ODgsMTIgQEAgc3RhdGljIGludCB2Z2ljX3JlZ2lzdGVyX2FsbF9yZWRpc3RfaW9kZXZzKHN0cnVjdCBrdm0gKmt2bSlcbiBcdH1cbiBcbiBcdGlmIChyZXQpIHtcbi1cdFx0LyogVGhlIGN1cnJlbnQgYyBmYWlsZWQsIHNvIGl0ZXJhdGUgb3ZlciB0aGUgcHJldmlvdXMgb25lcy4gKi9cbitcdFx0LyogVW5kbyBhc3NpZ25tZW50cyBtYWRlIGZyb20gdGhlIHJlZ2lvbiBiZWluZyBhZGRlZC4gKi9cbiBcdFx0aW50IGk7XG4gXG4gXHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGM7IGkrKykge1xuIFx0XHRcdHZjcHUgPSBrdm1fZ2V0X3ZjcHUoa3ZtLCBpKTtcbi1cdFx0XHR2Z2ljX3VucmVnaXN0ZXJfcmVkaXN0X2lvZGV2KHZjcHUpO1xuK1x0XHRcdHZnaWNfcm9sbGJhY2tfcmVkaXN0X2lvZGV2KHZjcHUsIHJkcmVnKTtcbiBcdFx0fVxuIFx0fVxuIFxuQEAgLTk3MCwxMCArMTAwMiwxMyBAQCB2b2lkIHZnaWNfdjNfZnJlZV9yZWRpc3RfcmVnaW9uKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IHZnaWNfcmVkaXN0X3JlZ2lvbiAqcmRyZVxuIFxuIGludCB2Z2ljX3YzX3NldF9yZWRpc3RfYmFzZShzdHJ1Y3Qga3ZtICprdm0sIHUzMiBpbmRleCwgdTY0IGFkZHIsIHUzMiBjb3VudClcbiB7XG4rXHRzdHJ1Y3QgdmdpY19yZWRpc3RfcmVnaW9uICpyZHJlZztcbiBcdGludCByZXQ7XG4gXG4gXHRtdXRleF9sb2NrKFx1MDAyNmt2bS1cdTAwM2VhcmNoLmNvbmZpZ19sb2NrKTtcbiBcdHJldCA9IHZnaWNfdjNfYWxsb2NfcmVkaXN0X3JlZ2lvbihrdm0sIGluZGV4LCBhZGRyLCBjb3VudCk7XG4rXHRpZiAoIXJldClcbitcdFx0cmRyZWcgPSB2Z2ljX3YzX3JkaXN0X3JlZ2lvbl9mcm9tX2luZGV4KGt2bSwgaW5kZXgpO1xuIFx0bXV0ZXhfdW5sb2NrKFx1MDAyNmt2bS1cdTAwM2VhcmNoLmNvbmZpZ19sb2NrKTtcbiBcdGlmIChyZXQpXG4gXHRcdHJldHVybiByZXQ7XG5AQCAtOTgyLDEyICsxMDE3LDkgQEAgaW50IHZnaWNfdjNfc2V0X3JlZGlzdF9iYXNlKHN0cnVjdCBrdm0gKmt2bSwgdTMyIGluZGV4LCB1NjQgYWRkciwgdTMyIGNvdW50KVxuIFx0ICogUmVnaXN0ZXIgaW9kZXZzIGZvciBlYWNoIGV4aXN0aW5nIFZDUFUuICBBZGRpbmcgbW9yZSBWQ1BVc1xuIFx0ICogYWZ0ZXJ3YXJkcyB3aWxsIHJlZ2lzdGVyIHRoZSBpb2RldnMgd2hlbiBuZWVkZWQuXG4gXHQgKi9cbi1cdHJldCA9IHZnaWNfcmVnaXN0ZXJfYWxsX3JlZGlzdF9pb2RldnMoa3ZtKTtcbitcdHJldCA9IHZnaWNfcmVnaXN0ZXJfYWxsX3JlZGlzdF9pb2RldnMoa3ZtLCByZHJlZyk7XG4gXHRpZiAocmV0KSB7XG4tXHRcdHN0cnVjdCB2Z2ljX3JlZGlzdF9yZWdpb24gKnJkcmVnO1xuLVxuIFx0XHRtdXRleF9sb2NrKFx1MDAyNmt2bS1cdTAwM2VhcmNoLmNvbmZpZ19sb2NrKTtcbi1cdFx0cmRyZWcgPSB2Z2ljX3YzX3JkaXN0X3JlZ2lvbl9mcm9tX2luZGV4KGt2bSwgaW5kZXgpO1xuIFx0XHR2Z2ljX3YzX2ZyZWVfcmVkaXN0X3JlZ2lvbihrdm0sIHJkcmVnKTtcbiBcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNmt2bS1cdTAwM2VhcmNoLmNvbmZpZ19sb2NrKTtcbiBcdFx0cmV0dXJuIHJldDtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vYXJtNjQvdmdpY19pbml0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vYXJtNjQvdmdpY19pbml0LmNcbmluZGV4IDQ3ZTM0YjQzYWZiMjkuLjVhMzBmM2NiMDM5YmUgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vYXJtNjQvdmdpY19pbml0LmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9hcm02NC92Z2ljX2luaXQuY1xuQEAgLTUsNiArNSw3IEBAXG4gICogQ29weXJpZ2h0IChDKSAyMDIwLCBSZWQgSGF0LCBJbmMuXG4gICovXG4gI2luY2x1ZGUgXHUwMDNjbGludXgva2VybmVsLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9zaXplcy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjc3lzL3N5c2NhbGwuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2FzbS9rdm0uaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2FzbS9rdm1fcGFyYS5oXHUwMDNlXG5AQCAtMTMsMTIgKzE0LDIxIEBAXG4gXG4gI2luY2x1ZGUgXCJ0ZXN0X3V0aWwuaFwiXG4gI2luY2x1ZGUgXCJrdm1fdXRpbC5oXCJcbisjaW5jbHVkZSBcImdpYy5oXCJcbiAjaW5jbHVkZSBcInByb2Nlc3Nvci5oXCJcbiAjaW5jbHVkZSBcInZnaWMuaFwiXG4gI2luY2x1ZGUgXCJnaWNfdjMuaFwiXG4gXG4gI2RlZmluZSBOUl9WQ1BVU1x0XHQ0XG4gXG4rI2RlZmluZSBSRURJU1RfUkVUUllfUkVHSU9OMF9CQVNFXHRHSUNSX0JBU0VfR1BBXG4rI2RlZmluZSBSRURJU1RfUkVUUllfUkVHSU9OMV9CQVNFXHRcXFxuK1x0KFJFRElTVF9SRVRSWV9SRUdJT04wX0JBU0UgKyAyICogS1ZNX1ZHSUNfVjNfUkVESVNUX1NJWkUpXG4rI2RlZmluZSBSRURJU1RfUkVUUllfRElTVF9CQVNFXHRcdFxcXG4rXHQoUkVESVNUX1JFVFJZX1JFR0lPTjFfQkFTRSArIEtWTV9WR0lDX1YzX1JFRElTVF9TSVpFKVxuKyNkZWZpbmUgUkVESVNUX1JFVFJZX1JFR0lPTjJfQkFTRVx0XFxcbitcdChSRURJU1RfUkVUUllfRElTVF9CQVNFICsgS1ZNX1ZHSUNfVjNfRElTVF9TSVpFKVxuK1xuICNkZWZpbmUgUkVHX09GRlNFVCh2Y3B1LCBvZmZzZXQpICgoKHU2NCl2Y3B1IFx1MDAzY1x1MDAzYyAzMikgfCBvZmZzZXQpXG4gXG4gI2RlZmluZSBWR0lDX0RFVl9JU19WMihfZCkgKChfZCkgPT0gS1ZNX0RFVl9UWVBFX0FSTV9WR0lDX1YyKVxuQEAgLTY1LDYgKzc1LDIzIEBAIHN0YXRpYyB2b2lkIGd1ZXN0X2NvZGUodm9pZClcbiBcdEdVRVNUX0RPTkUoKTtcbiB9XG4gXG4rc3RhdGljIHZvaWQgZ3Vlc3RfY2hlY2tfcmVkaXN0X3JldHJ5KHZvaWQpXG4re1xuK1x0dW5zaWduZWQgaW50IGk7XG4rXG4rXHQvKiBUaGUgZmlyc3QgdGhyZWUgcmVkaXN0cmlidXRvcnMgc3BhbiBhZGphY2VudCByZWdpb25zIDAgYW5kIDEuICovXG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBOUl9WQ1BVUzsgaSsrKSB7XG4rXHRcdHU2NCBiYXNlID0gaSBcdTAwM2MgMyA/IFJFRElTVF9SRVRSWV9SRUdJT04wX0JBU0UgK1xuK1x0XHRcdFx0ICAgICAgIGkgKiBLVk1fVkdJQ19WM19SRURJU1RfU0laRSA6XG4rXHRcdFx0XHQgICAgICAgUkVESVNUX1JFVFJZX1JFR0lPTjJfQkFTRTtcbitcdFx0dTY0IHR5cGVyID0gcmVhZHEoKHZvaWQgKikodW5zaWduZWQgbG9uZykoYmFzZSArIEdJQ1JfVFlQRVIpKTtcbitcbitcdFx0R1VFU1RfQVNTRVJUX0VRKEdJQ1JfVFlQRVJfQ1BVX05VTUJFUih0eXBlciksIGkpO1xuK1x0fVxuK1xuK1x0R1VFU1RfRE9ORSgpO1xuK31cbitcbiAvKiB3ZSBkb24ndCB3YW50IHRvIGFzc2VydCBvbiBydW4gZXhlY3V0aW9uLCBoZW5jZSB0aGF0IGhlbHBlciAqL1xuIHN0YXRpYyBpbnQgcnVuX3ZjcHUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIHtcbkBAIC03Myw2ICsxMDAsNyBAQCBzdGF0aWMgaW50IHJ1bl92Y3B1KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBcbiBzdGF0aWMgc3RydWN0IHZtX2dpYyB2bV9naWNfY3JlYXRlX3dpdGhfdmNwdXModTMyIGdpY19kZXZfdHlwZSxcbiBcdFx0XHRcdFx0ICAgICAgdTMyIG5yX3ZjcHVzLFxuK1x0XHRcdFx0XHQgICAgICB2b2lkICpndWVzdF9jb2RlLFxuIFx0XHRcdFx0XHQgICAgICBzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHVzW10pXG4ge1xuIFx0c3RydWN0IHZtX2dpYyB2O1xuQEAgLTMzOCw3ICszNjYsNyBAQCBzdGF0aWMgdm9pZCB0ZXN0X3ZnaWNfdGhlbl92Y3B1cyh1MzIgZ2ljX2Rldl90eXBlKVxuIFx0c3RydWN0IHZtX2dpYyB2O1xuIFx0aW50IHJldCwgaTtcbiBcbi1cdHYgPSB2bV9naWNfY3JlYXRlX3dpdGhfdmNwdXMoZ2ljX2Rldl90eXBlLCAxLCB2Y3B1cyk7XG4rXHR2ID0gdm1fZ2ljX2NyZWF0ZV93aXRoX3ZjcHVzKGdpY19kZXZfdHlwZSwgMSwgZ3Vlc3RfY29kZSwgdmNwdXMpO1xuIFxuIFx0c3VidGVzdF9kaXN0X3JkaXN0KFx1MDAyNnYpO1xuIFxuQEAgLTM1OSw3ICszODcsOCBAQCBzdGF0aWMgdm9pZCB0ZXN0X3ZjcHVzX3RoZW5fdmdpYyh1MzIgZ2ljX2Rldl90eXBlKVxuIFx0c3RydWN0IHZtX2dpYyB2O1xuIFx0aW50IHJldDtcbiBcbi1cdHYgPSB2bV9naWNfY3JlYXRlX3dpdGhfdmNwdXMoZ2ljX2Rldl90eXBlLCBOUl9WQ1BVUywgdmNwdXMpO1xuK1x0diA9IHZtX2dpY19jcmVhdGVfd2l0aF92Y3B1cyhnaWNfZGV2X3R5cGUsIE5SX1ZDUFVTLCBndWVzdF9jb2RlLFxuK1x0XHRcdFx0ICAgICB2Y3B1cyk7XG4gXG4gXHRzdWJ0ZXN0X2Rpc3RfcmRpc3QoXHUwMDI2dik7XG4gXG5AQCAtNDExLDcgKzQ0MCw4IEBAIHN0YXRpYyB2b2lkIHRlc3RfdjNfbmV3X3JlZGlzdF9yZWdpb25zKHZvaWQpXG4gXHR1NjQgYWRkcjtcbiBcdGludCByZXQ7XG4gXG4tXHR2ID0gdm1fZ2ljX2NyZWF0ZV93aXRoX3ZjcHVzKEtWTV9ERVZfVFlQRV9BUk1fVkdJQ19WMywgTlJfVkNQVVMsIHZjcHVzKTtcbitcdHYgPSB2bV9naWNfY3JlYXRlX3dpdGhfdmNwdXMoS1ZNX0RFVl9UWVBFX0FSTV9WR0lDX1YzLCBOUl9WQ1BVUyxcbitcdFx0XHRcdCAgICAgZ3Vlc3RfY29kZSwgdmNwdXMpO1xuIFx0c3VidGVzdF92M19yZWRpc3RfcmVnaW9ucyhcdTAwMjZ2KTtcbiBcdGt2bV9kZXZpY2VfYXR0cl9zZXQodi5naWNfZmQsIEtWTV9ERVZfQVJNX1ZHSUNfR1JQX0NUUkwsXG4gXHRcdFx0ICAgIEtWTV9ERVZfQVJNX1ZHSUNfQ1RSTF9JTklULCBOVUxMKTtcbkBAIC00MjIsNyArNDUyLDggQEAgc3RhdGljIHZvaWQgdGVzdF92M19uZXdfcmVkaXN0X3JlZ2lvbnModm9pZClcbiBcbiBcdC8qIHN0ZXAyICovXG4gXG4tXHR2ID0gdm1fZ2ljX2NyZWF0ZV93aXRoX3ZjcHVzKEtWTV9ERVZfVFlQRV9BUk1fVkdJQ19WMywgTlJfVkNQVVMsIHZjcHVzKTtcbitcdHYgPSB2bV9naWNfY3JlYXRlX3dpdGhfdmNwdXMoS1ZNX0RFVl9UWVBFX0FSTV9WR0lDX1YzLCBOUl9WQ1BVUyxcbitcdFx0XHRcdCAgICAgZ3Vlc3RfY29kZSwgdmNwdXMpO1xuIFx0c3VidGVzdF92M19yZWRpc3RfcmVnaW9ucyhcdTAwMjZ2KTtcbiBcbiBcdGFkZHIgPSBSRURJU1RfUkVHSU9OX0FUVFJfQUREUigxLCAweDI4MDAwMCwgMCwgMik7XG5AQCAtNDM2LDcgKzQ2Nyw4IEBAIHN0YXRpYyB2b2lkIHRlc3RfdjNfbmV3X3JlZGlzdF9yZWdpb25zKHZvaWQpXG4gXG4gXHQvKiBzdGVwIDMgKi9cbiBcbi1cdHYgPSB2bV9naWNfY3JlYXRlX3dpdGhfdmNwdXMoS1ZNX0RFVl9UWVBFX0FSTV9WR0lDX1YzLCBOUl9WQ1BVUywgdmNwdXMpO1xuK1x0diA9IHZtX2dpY19jcmVhdGVfd2l0aF92Y3B1cyhLVk1fREVWX1RZUEVfQVJNX1ZHSUNfVjMsIE5SX1ZDUFVTLFxuK1x0XHRcdFx0ICAgICBndWVzdF9jb2RlLCB2Y3B1cyk7XG4gXHRzdWJ0ZXN0X3YzX3JlZGlzdF9yZWdpb25zKFx1MDAyNnYpO1xuIFxuIFx0cmV0ID0gX19rdm1fZGV2aWNlX2F0dHJfc2V0KHYuZ2ljX2ZkLCBLVk1fREVWX0FSTV9WR0lDX0dSUF9BRERSLFxuQEAgLTQ1Nyw2ICs0ODksNzAgQEAgc3RhdGljIHZvaWQgdGVzdF92M19uZXdfcmVkaXN0X3JlZ2lvbnModm9pZClcbiBcdHZtX2dpY19kZXN0cm95KFx1MDAyNnYpO1xuIH1cbiBcbitzdGF0aWMgdm9pZCB0ZXN0X3YzX3JlZGlzdF9yZWdpb25fcmV0cnkodm9pZClcbit7XG4rXHRzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHVzW05SX1ZDUFVTXTtcbitcdHN0cnVjdCB2bV9naWMgdjtcbitcdHN0cnVjdCB1Y2FsbCB1YztcbitcdHU2NCBhZGRyO1xuK1x0aW50IHJldDtcbitcbitcdHYgPSB2bV9naWNfY3JlYXRlX3dpdGhfdmNwdXMoS1ZNX0RFVl9UWVBFX0FSTV9WR0lDX1YzLCBOUl9WQ1BVUyxcbitcdFx0XHRcdCAgICAgZ3Vlc3RfY2hlY2tfcmVkaXN0X3JldHJ5LCB2Y3B1cyk7XG4rXG4rXHRhZGRyID0gUkVESVNUX1JFR0lPTl9BVFRSX0FERFIoMiwgUkVESVNUX1JFVFJZX1JFR0lPTjBfQkFTRSwgMCwgMCk7XG4rXHRrdm1fZGV2aWNlX2F0dHJfc2V0KHYuZ2ljX2ZkLCBLVk1fREVWX0FSTV9WR0lDX0dSUF9BRERSLFxuK1x0XHRcdCAgICBLVk1fVkdJQ19WM19BRERSX1RZUEVfUkVESVNUX1JFR0lPTiwgXHUwMDI2YWRkcik7XG4rXG4rXHRhZGRyID0gUkVESVNUX1JFR0lPTl9BVFRSX0FERFIoMSwgUkVESVNUX1JFVFJZX1JFR0lPTjFfQkFTRSwgMCwgMSk7XG4rXHRrdm1fZGV2aWNlX2F0dHJfc2V0KHYuZ2ljX2ZkLCBLVk1fREVWX0FSTV9WR0lDX0dSUF9BRERSLFxuK1x0XHRcdCAgICBLVk1fVkdJQ19WM19BRERSX1RZUEVfUkVESVNUX1JFR0lPTiwgXHUwMDI2YWRkcik7XG4rXG4rXHRhZGRyID0gUkVESVNUX1JFVFJZX0RJU1RfQkFTRTtcbitcdGt2bV9kZXZpY2VfYXR0cl9zZXQodi5naWNfZmQsIEtWTV9ERVZfQVJNX1ZHSUNfR1JQX0FERFIsXG4rXHRcdFx0ICAgIEtWTV9WR0lDX1YzX0FERFJfVFlQRV9ESVNULCBcdTAwMjZhZGRyKTtcbitcbitcdGFkZHIgPSBSRURJU1RfUkVHSU9OX0FUVFJfQUREUigxLCBSRURJU1RfUkVUUllfRElTVF9CQVNFLCAwLCAyKTtcbitcdHJldCA9IF9fa3ZtX2RldmljZV9hdHRyX3NldCh2LmdpY19mZCwgS1ZNX0RFVl9BUk1fVkdJQ19HUlBfQUREUixcbitcdFx0XHRcdCAgICBLVk1fVkdJQ19WM19BRERSX1RZUEVfUkVESVNUX1JFR0lPTixcbitcdFx0XHRcdCAgICBcdTAwMjZhZGRyKTtcbitcdFRFU1RfQVNTRVJUKHJldCBcdTAwMjZcdTAwMjYgZXJybm8gPT0gRUlOVkFMLFxuK1x0XHQgICAgXCJyZWdpc3RlciByZWRpc3QgcmVnaW9uIGNvbGxpZGluZyB3aXRoIGRpc3RcIik7XG4rXG4rXHRhZGRyID0gUkVESVNUX1JFR0lPTl9BVFRSX0FERFIoMSwgUkVESVNUX1JFVFJZX1JFR0lPTjJfQkFTRSwgMCwgMik7XG4rXHRrdm1fZGV2aWNlX2F0dHJfc2V0KHYuZ2ljX2ZkLCBLVk1fREVWX0FSTV9WR0lDX0dSUF9BRERSLFxuK1x0XHRcdCAgICBLVk1fVkdJQ19WM19BRERSX1RZUEVfUkVESVNUX1JFR0lPTiwgXHUwMDI2YWRkcik7XG4rXG4rXHR2aXJ0X21hcCh2LnZtLCBSRURJU1RfUkVUUllfUkVHSU9OMF9CQVNFLCBSRURJU1RfUkVUUllfUkVHSU9OMF9CQVNFLFxuK1x0XHQgdm1fY2FsY19udW1fZ3Vlc3RfcGFnZXModi52bS1cdTAwM2Vtb2RlLFxuK1x0XHRcdFx0XHQgMyAqIEtWTV9WR0lDX1YzX1JFRElTVF9TSVpFKSk7XG4rXHR2aXJ0X21hcCh2LnZtLCBSRURJU1RfUkVUUllfUkVHSU9OMl9CQVNFLCBSRURJU1RfUkVUUllfUkVHSU9OMl9CQVNFLFxuK1x0XHQgdm1fY2FsY19udW1fZ3Vlc3RfcGFnZXModi52bS1cdTAwM2Vtb2RlLFxuK1x0XHRcdFx0XHQgS1ZNX1ZHSUNfVjNfUkVESVNUX1NJWkUpKTtcbitcbitcdGt2bV9kZXZpY2VfYXR0cl9zZXQodi5naWNfZmQsIEtWTV9ERVZfQVJNX1ZHSUNfR1JQX0NUUkwsXG4rXHRcdFx0ICAgIEtWTV9ERVZfQVJNX1ZHSUNfQ1RSTF9JTklULCBOVUxMKTtcbitcbitcdHZjcHVfcnVuKHZjcHVzWzBdKTtcbitcdHN3aXRjaCAoZ2V0X3VjYWxsKHZjcHVzWzBdLCBcdTAwMjZ1YykpIHtcbitcdGNhc2UgVUNBTExfRE9ORTpcbitcdFx0YnJlYWs7XG4rXHRjYXNlIFVDQUxMX0FCT1JUOlxuK1x0XHRSRVBPUlRfR1VFU1RfQVNTRVJUKHVjKTtcbitcdFx0YnJlYWs7XG4rXHRjYXNlIFVDQUxMX05PTkU6XG4rXHRcdGlmICh2Y3B1c1swXS1cdTAwM2VydW4tXHUwMDNlZXhpdF9yZWFzb24gPT0gS1ZNX0VYSVRfTU1JTylcbitcdFx0XHRURVNUX0ZBSUwoXCJVbmV4cGVjdGVkIE1NSU8gZXhpdCBhdCAweCVsbHhcIixcbitcdFx0XHRcdCAgdmNwdXNbMF0tXHUwMDNlcnVuLVx1MDAzZW1taW8ucGh5c19hZGRyKTtcbitcdFx0ZmFsbHRocm91Z2g7XG4rXHRkZWZhdWx0OlxuK1x0XHRURVNUX0ZBSUwoXCJVbmV4cGVjdGVkIHVjYWxsICVsdSwgZXhpdF9yZWFzb24gJXVcIixcbitcdFx0XHQgIHVjLmNtZCwgdmNwdXNbMF0tXHUwMDNlcnVuLVx1MDAzZWV4aXRfcmVhc29uKTtcbitcdH1cbitcbitcdHZtX2dpY19kZXN0cm95KFx1MDAyNnYpO1xuK31cbitcbiBzdGF0aWMgdm9pZCB0ZXN0X3YzX3R5cGVyX2FjY2Vzc2VzKHZvaWQpXG4ge1xuIFx0c3RydWN0IHZtX2dpYyB2O1xuQEAgLTYwOCw3ICs3MDQsOCBAQCBzdGF0aWMgdm9pZCB0ZXN0X3YzX3JlZGlzdF9pcGFfcmFuZ2VfY2hlY2tfYXRfdmNwdV9ydW4odm9pZClcbiBcdGludCByZXQsIGk7XG4gXHR1NjQgYWRkcjtcbiBcbi1cdHYgPSB2bV9naWNfY3JlYXRlX3dpdGhfdmNwdXMoS1ZNX0RFVl9UWVBFX0FSTV9WR0lDX1YzLCAxLCB2Y3B1cyk7XG4rXHR2ID0gdm1fZ2ljX2NyZWF0ZV93aXRoX3ZjcHVzKEtWTV9ERVZfVFlQRV9BUk1fVkdJQ19WMywgMSwgZ3Vlc3RfY29kZSxcbitcdFx0XHRcdCAgICAgdmNwdXMpO1xuIFxuIFx0LyogU2V0IHNwYWNlIGZvciAzIHJlZGlzdHMsIHdlIGhhdmUgMSB2Y3B1LCBzbyB0aGlzIHN1Y2NlZWRzLiAqL1xuIFx0YWRkciA9IG1heF9waHlzX3NpemUgLSAoMyAqIDIgKiAweDEwMDAwKTtcbkBAIC02NDEsNyArNzM4LDggQEAgc3RhdGljIHZvaWQgdGVzdF92M19pdHNfcmVnaW9uKHZvaWQpXG4gXHR1NjQgYWRkcjtcbiBcdGludCBpdHNfZmQsIHJldDtcbiBcbi1cdHYgPSB2bV9naWNfY3JlYXRlX3dpdGhfdmNwdXMoS1ZNX0RFVl9UWVBFX0FSTV9WR0lDX1YzLCBOUl9WQ1BVUywgdmNwdXMpO1xuK1x0diA9IHZtX2dpY19jcmVhdGVfd2l0aF92Y3B1cyhLVk1fREVWX1RZUEVfQVJNX1ZHSUNfVjMsIE5SX1ZDUFVTLFxuK1x0XHRcdFx0ICAgICBndWVzdF9jb2RlLCB2Y3B1cyk7XG4gXHRpdHNfZmQgPSBrdm1fY3JlYXRlX2RldmljZSh2LnZtLCBLVk1fREVWX1RZUEVfQVJNX1ZHSUNfSVRTKTtcbiBcbiBcdGFkZHIgPSAweDQwMTAwMDtcbkBAIC02ODQsNyArNzgyLDggQEAgc3RhdGljIHZvaWQgdGVzdF92M19uYXNzZ2ljYXAodm9pZClcbiBcdHUzMiB0eXBlcjI7XG4gXHRpbnQgcmV0O1xuIFxuLVx0dm0gPSB2bV9naWNfY3JlYXRlX3dpdGhfdmNwdXMoS1ZNX0RFVl9UWVBFX0FSTV9WR0lDX1YzLCBOUl9WQ1BVUywgdmNwdXMpO1xuK1x0dm0gPSB2bV9naWNfY3JlYXRlX3dpdGhfdmNwdXMoS1ZNX0RFVl9UWVBFX0FSTV9WR0lDX1YzLCBOUl9WQ1BVUyxcbitcdFx0XHRcdCAgICAgIGd1ZXN0X2NvZGUsIHZjcHVzKTtcbiBcdGt2bV9kZXZpY2VfYXR0cl9nZXQodm0uZ2ljX2ZkLCBLVk1fREVWX0FSTV9WR0lDX0dSUF9ESVNUX1JFR1MsXG4gXHRcdFx0ICAgIEdJQ0RfVFlQRVIyLCBcdTAwMjZ0eXBlcjIpO1xuIFx0aGFzX25hc3NnaWNhcCA9IHR5cGVyMiBcdTAwMjYgR0lDRF9UWVBFUjJfbkFTU0dJY2FwO1xuQEAgLTk3OCw2ICsxMDc3LDcgQEAgdm9pZCBydW5fdGVzdHModTMyIGdpY19kZXZfdHlwZSlcbiBcbiBcdGlmIChWR0lDX0RFVl9JU19WMyhnaWNfZGV2X3R5cGUpKSB7XG4gXHRcdHRlc3RfdjNfbmV3X3JlZGlzdF9yZWdpb25zKCk7XG4rXHRcdHRlc3RfdjNfcmVkaXN0X3JlZ2lvbl9yZXRyeSgpO1xuIFx0XHR0ZXN0X3YzX3R5cGVyX2FjY2Vzc2VzKCk7XG4gXHRcdHRlc3RfdjNfbGFzdF9iaXRfcmVkaXN0X3JlZ2lvbnMoKTtcbiBcdFx0dGVzdF92M19sYXN0X2JpdF9zaW5nbGVfcmRpc3QoKTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDA4OjI2OjU5LjI3OTkwMTk3MVoiLCJTZXEiOjE5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyOTAwODUyMTUyNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFBhdGNoIFNlcmllcyBmb3IgS01TQU4gRnV6emluZyBOZWVkcyoqXG5cbk9rYXksIHNvIHRoZSB0YXNrIGlzIHRvIGZpZ3VyZSBvdXQgaWYgdGhpcyBwYXRjaCBzZXJpZXMgaW4gYGFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1tbWlvLXYzLmNgIGFuZCBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2FybTY0L3ZnaWNfaW5pdC5jYCB3YXJyYW50cyBhIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4gSSBuZWVkIHRvIGRldGVybWluZSBpZiBgTmVlZHNLTVNBTiA9IHRydWVgIG9yIGBOZWVkc0tNU0FOID0gZmFsc2VgLiBMZXQncyBkaXZlIGluIGFuZCBzZWUgd2hhdCdzIGNoYW5nZWQuXG5cbkZpcnN0LCBJJ20gemVyb2luZyBpbiBvbiBgYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLW1taW8tdjMuY2AuIEl0IGxvb2tzIGxpa2UgdGhlIGNvcmUgb2YgdGhlIGNoYW5nZXMgcmV2b2x2ZSBhcm91bmQgcmVkaXN0cmlidXRvciBkZXZpY2UgbWFuYWdlbWVudC4gSSBzZWUgc2V2ZXJhbCBmdW5jdGlvbnMgaW52b2x2ZWQ6IGB2Z2ljX3VuZG9fcmVkaXN0X2Fzc2lnbm1lbnRgLCBgdmdpY19yZWdpc3Rlcl9yZWRpc3RfaW9kZXZgLCBgdmdpY19yb2xsYmFja19yZWRpc3RfaW9kZXZgLCBgdmdpY19yZWdpc3Rlcl9hbGxfcmVkaXN0X2lvZGV2c2AsIGFuZCBgdmdpY192M19zZXRfcmVkaXN0X2Jhc2VgLlxuXG5UaGUgZnVuY3Rpb25zIGRlYWxpbmcgd2l0aCB0aGUgcmVkaXN0cmlidXRvciBhc3NpZ25tZW50cyBzZWVtIHRvIGJlIHNldHRpbmcgYW5kIHVuc2V0dGluZyBgdmdpY19jcHUtXHUwMDNlcmRyZWdgLCBhbG9uZyB3aXRoIG90aGVyIHJlbGF0ZWQgbWVtb3J5IGxvY2F0aW9ucy4gSSBuZWVkIHRvIGJlIGNhcmVmdWwgd2l0aCB0aGUgbG9ja2luZyBhbmQgdW5sb2NraW5nIG9wZXJhdGlvbnMuIFNwZWNpZmljYWxseSwgYHZnaWNfdW5kb19yZWRpc3RfYXNzaWdubWVudGAgcmVzZXRzIHRoZSBpbmRleCBhbmQgcG9pbnRlciwgYW5kIGB2Z2ljX3JlZ2lzdGVyX3JlZGlzdF9pb2RldmAgZGVhbHMgd2l0aCBtZW1vcnkgYWxsb2NhdGlvbiAob3IgcmVnaXN0cmF0aW9uIHZpYSBga3ZtX2lvX2J1c19yZWdpc3Rlcl9kZXZgKSBhbmQgY2FsbHMgYHZnaWNfdW5kb19yZWRpc3RfYXNzaWdubWVudGAgb24gZmFpbHVyZS4gYHZnaWNfcm9sbGJhY2tfcmVkaXN0X2lvZGV2YCBhcHBlYXJzIHRvIGJlIGEgY2xlYW51cCBmdW5jdGlvbiB0aGF0IGFsc28gc2V0cyB0aGUgYHJkcmVnYCBwb2ludGVyIHRvIGBOVUxMYC4gVGhlIGB2Z2ljX3JlZ2lzdGVyX2FsbF9yZWRpc3RfaW9kZXZzYCBmdW5jdGlvbiBzZWVtcyB0byBiZSB1c2VkIHRvIHBlcmZvcm0gb3BlcmF0aW9ucyBvbiBhIGNvbGxlY3Rpb24gb2YgcmVkaXN0cmlidXRvciBkZXZpY2VzLCBhbmQgaXMgcGFzc2VkIGByZHJlZ2AuIFRoZSBpbXBvcnRhbnQgdGhpbmcgaGVyZSBpcyB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIGByZHJlZ2AgaXMgdXNlZC4gRmluYWxseSwgYHZnaWNfdjNfc2V0X3JlZGlzdF9iYXNlYCBhcHBlYXJzIHRvIGJlIGEgaGlnaGVyIGxldmVsIGZ1bmN0aW9uIHRoYXQgZmV0Y2hlcyB0aGUgYHJkcmVnYCBhbmQgY2FsbHMgYHZnaWNfcmVnaXN0ZXJfYWxsX3JlZGlzdF9pb2RldnNgLlxuXG5JIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZGF0YSBmbG93IGFuZCBob3cgdGhlc2UgZnVuY3Rpb25zIGludGVyYWN0LiBUbyBkbyB0aGF0IGVmZmVjdGl2ZWx5LCBJJ20gZ29pbmcgdG8gcHVsbCB1cCB0aGUgY29udGV4dCB3aXRoIGByZWFkLWZpbGVgIGFuZCBjYXJlZnVsbHkgaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSB3aXRoaW4gYHZnaWMtbW1pby12My5jYC4gSSBuZWVkIGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2YgdGhlIG92ZXJhbGwgbWVtb3J5IG1hbmFnZW1lbnQgc3RyYXRlZ3kgYW5kIGhvdyB0aGUgcmVkaXN0cmlidXRvciBkZXZpY2UgaXMgaGFuZGxlZC4gSSBuZWVkIHRvIGxvb2sgZm9yIGFueSBwb3RlbnRpYWwgZm9yIHVzZS1hZnRlci1mcmVlLCBkb3VibGUtZnJlZSwgb3IgbWVtb3J5IGxlYWtzIHdpdGhpbiB0aGlzIHNlY3Rpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjcxMTgsIk91dHB1dFRva2VucyI6NTAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NDQsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQwODoyNzoyOC4yODg0MjY5MTZaIiwiU2VxIjoyMCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTkwMzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLW1taW8tdjMuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA3NjAsXG4gIFwiTGluZUNvdW50XCI6IDkwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA3NjA6XFx0e1xcbiA3NjE6XFx0XFx0ZGV2LVxcdTAwM2VyZWdpb25zID0gdmdpY192M19kaXN0X3JlZ2lzdGVycztcXG4gNzYyOlxcdFxcdGRldi1cXHUwMDNlbnJfcmVnaW9ucyA9IEFSUkFZX1NJWkUodmdpY192M19kaXN0X3JlZ2lzdGVycyk7XFxuIDc2MzpcXHRcXG4gNzY0OlxcdFxcdGt2bV9pb2RldmljZV9pbml0KFxcdTAwMjZkZXYtXFx1MDAzZWRldiwgXFx1MDAyNmt2bV9pb19naWNfb3BzKTtcXG4gNzY1OlxcdFxcbiA3NjY6XFx0XFx0cmV0dXJuIFNaXzY0SztcXG4gNzY3OlxcdH1cXG4gNzY4OlxcdFxcbiA3Njk6XFx0c3RhdGljIHZvaWQgdmdpY191bmRvX3JlZGlzdF9hc3NpZ25tZW50KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4gNzcwOlxcdHtcXG4gNzcxOlxcdFxcdHN0cnVjdCB2Z2ljX2NwdSAqdmdpY19jcHUgPSBcXHUwMDI2dmNwdS1cXHUwMDNlYXJjaC52Z2ljX2NwdTtcXG4gNzcyOlxcdFxcbiA3NzM6XFx0XFx0bG9ja2RlcF9hc3NlcnRfaGVsZChcXHUwMDI2dmNwdS1cXHUwMDNla3ZtLVxcdTAwM2VzbG90c19sb2NrKTtcXG4gNzc0OlxcdFxcbiA3NzU6XFx0XFx0Z3VhcmQobXV0ZXgpKFxcdTAwMjZ2Y3B1LVxcdTAwM2Vrdm0tXFx1MDAzZWFyY2guY29uZmlnX2xvY2spO1xcbiA3NzY6XFx0XFxuIDc3NzpcXHRcXHR2Z2ljX2NwdS1cXHUwMDNlcmRyZWctXFx1MDAzZWZyZWVfaW5kZXgtLTtcXG4gNzc4OlxcdFxcdHZnaWNfY3B1LVxcdTAwM2VyZHJlZyA9IE5VTEw7XFxuIDc3OTpcXHRcXHR2Z2ljX2NwdS1cXHUwMDNlcmRfaW9kZXYuYmFzZV9hZGRyID0gVkdJQ19BRERSX1VOREVGO1xcbiA3ODA6XFx0fVxcbiA3ODE6XFx0XFxuIDc4MjpcXHQvKipcXG4gNzgzOlxcdCAqIHZnaWNfcmVnaXN0ZXJfcmVkaXN0X2lvZGV2IC0gcmVnaXN0ZXIgYSBzaW5nbGUgcmVkaXN0IGlvZGV2XFxuIDc4NDpcXHQgKiBAdmNwdTogICAgVGhlIFZDUFUgdG8gd2hpY2ggdGhlIHJlZGlzdHJpYnV0b3IgYmVsb25nc1xcbiA3ODU6XFx0ICpcXG4gNzg2OlxcdCAqIFJlZ2lzdGVyIGEgS1ZNIGlvZGV2IGZvciB0aGlzIFZDUFUncyByZWRpc3RyaWJ1dG9yIHVzaW5nIHRoZSBhZGRyZXNzXFxuIDc4NzpcXHQgKiBwcm92aWRlZC5cXG4gNzg4OlxcdCAqXFxuIDc4OTpcXHQgKiBSZXR1cm4gMCBvbiBzdWNjZXNzLCAtRVJSTk8gb3RoZXJ3aXNlLlxcbiA3OTA6XFx0ICovXFxuIDc5MTpcXHRpbnQgdmdpY19yZWdpc3Rlcl9yZWRpc3RfaW9kZXYoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbiA3OTI6XFx0e1xcbiA3OTM6XFx0XFx0c3RydWN0IGt2bSAqa3ZtID0gdmNwdS1cXHUwMDNla3ZtO1xcbiA3OTQ6XFx0XFx0c3RydWN0IHZnaWNfZGlzdCAqdmdpYyA9IFxcdTAwMjZrdm0tXFx1MDAzZWFyY2gudmdpYztcXG4gNzk1OlxcdFxcdHN0cnVjdCB2Z2ljX2NwdSAqdmdpY19jcHUgPSBcXHUwMDI2dmNwdS1cXHUwMDNlYXJjaC52Z2ljX2NwdTtcXG4gNzk2OlxcdFxcdHN0cnVjdCB2Z2ljX2lvX2RldmljZSAqcmRfZGV2ID0gXFx1MDAyNnZjcHUtXFx1MDAzZWFyY2gudmdpY19jcHUucmRfaW9kZXY7XFxuIDc5NzpcXHRcXHRzdHJ1Y3QgdmdpY19yZWRpc3RfcmVnaW9uICpyZHJlZztcXG4gNzk4OlxcdFxcdGdwYV90IHJkX2Jhc2U7XFxuIDc5OTpcXHRcXHRpbnQgcmV0ID0gMDtcXG4gODAwOlxcdFxcbiA4MDE6XFx0XFx0bG9ja2RlcF9hc3NlcnRfaGVsZChcXHUwMDI2a3ZtLVxcdTAwM2VzbG90c19sb2NrKTtcXG4gODAyOlxcdFxcdG11dGV4X2xvY2soXFx1MDAyNmt2bS1cXHUwMDNlYXJjaC5jb25maWdfbG9jayk7XFxuIDgwMzpcXHRcXG4gODA0OlxcdFxcdGlmICghSVNfVkdJQ19BRERSX1VOREVGKHZnaWNfY3B1LVxcdTAwM2VyZF9pb2Rldi5iYXNlX2FkZHIpKVxcbiA4MDU6XFx0XFx0XFx0Z290byBvdXRfdW5sb2NrO1xcbiA4MDY6XFx0XFxuIDgwNzpcXHRcXHQvKlxcbiA4MDg6XFx0XFx0ICogV2UgbWF5IGJlIGNyZWF0aW5nIFZDUFVzIGJlZm9yZSBoYXZpbmcgc2V0IHRoZSBiYXNlIGFkZHJlc3MgZm9yIHRoZVxcbiA4MDk6XFx0XFx0ICogcmVkaXN0cmlidXRvciByZWdpb24sIGluIHdoaWNoIGNhc2Ugd2Ugd2lsbCBjb21lIGJhY2sgdG8gdGhpc1xcbiA4MTA6XFx0XFx0ICogZnVuY3Rpb24gZm9yIGFsbCBWQ1BVcyB3aGVuIHRoZSBiYXNlIGFkZHJlc3MgaXMgc2V0LiAgSnVzdCByZXR1cm5cXG4gODExOlxcdFxcdCAqIHdpdGhvdXQgZG9pbmcgYW55IHdvcmsgZm9yIG5vdy5cXG4gODEyOlxcdFxcdCAqL1xcbiA4MTM6XFx0XFx0cmRyZWcgPSB2Z2ljX3YzX3JkaXN0X2ZyZWVfc2xvdChcXHUwMDI2dmdpYy1cXHUwMDNlcmRfcmVnaW9ucyk7XFxuIDgxNDpcXHRcXHRpZiAoIXJkcmVnKVxcbiA4MTU6XFx0XFx0XFx0Z290byBvdXRfdW5sb2NrO1xcbiA4MTY6XFx0XFxuIDgxNzpcXHRcXHRpZiAoIXZnaWNfdjNfY2hlY2tfYmFzZShrdm0pKSB7XFxuIDgxODpcXHRcXHRcXHRyZXQgPSAtRUlOVkFMO1xcbiA4MTk6XFx0XFx0XFx0Z290byBvdXRfdW5sb2NrO1xcbiA4MjA6XFx0XFx0fVxcbiA4MjE6XFx0XFxuIDgyMjpcXHRcXHR2Z2ljX2NwdS1cXHUwMDNlcmRyZWcgPSByZHJlZztcXG4gODIzOlxcdFxcdHZnaWNfY3B1LVxcdTAwM2VyZHJlZ19pbmRleCA9IHJkcmVnLVxcdTAwM2VmcmVlX2luZGV4O1xcbiA4MjQ6XFx0XFxuIDgyNTpcXHRcXHRyZF9iYXNlID0gcmRyZWctXFx1MDAzZWJhc2UgKyByZHJlZy1cXHUwMDNlZnJlZV9pbmRleCAqIEtWTV9WR0lDX1YzX1JFRElTVF9TSVpFO1xcbiA4MjY6XFx0XFxuIDgyNzpcXHRcXHRrdm1faW9kZXZpY2VfaW5pdChcXHUwMDI2cmRfZGV2LVxcdTAwM2VkZXYsIFxcdTAwMjZrdm1faW9fZ2ljX29wcyk7XFxuIDgyODpcXHRcXHRyZF9kZXYtXFx1MDAzZWJhc2VfYWRkciA9IHJkX2Jhc2U7XFxuIDgyOTpcXHRcXHRyZF9kZXYtXFx1MDAzZWlvZGV2X3R5cGUgPSBJT0RFVl9SRURJU1Q7XFxuIDgzMDpcXHRcXHRyZF9kZXYtXFx1MDAzZXJlZ2lvbnMgPSB2Z2ljX3YzX3JkX3JlZ2lzdGVycztcXG4gODMxOlxcdFxcdHJkX2Rldi1cXHUwMDNlbnJfcmVnaW9ucyA9IEFSUkFZX1NJWkUodmdpY192M19yZF9yZWdpc3RlcnMpO1xcbiA4MzI6XFx0XFx0cmRfZGV2LVxcdTAwM2VyZWRpc3RfdmNwdSA9IHZjcHU7XFxuIDgzMzpcXHRcXG4gODM0OlxcdFxcdC8qIFByb3RlY3RlZCBieSBzbG90c19sb2NrICovXFxuIDgzNTpcXHRcXHRyZHJlZy1cXHUwMDNlZnJlZV9pbmRleCsrO1xcbiA4MzY6XFx0XFxuIDgzNzpcXHRcXHRtdXRleF91bmxvY2soXFx1MDAyNmt2bS1cXHUwMDNlYXJjaC5jb25maWdfbG9jayk7XFxuIDgzODpcXHRcXG4gODM5OlxcdFxcdHJldCA9IGt2bV9pb19idXNfcmVnaXN0ZXJfZGV2KGt2bSwgS1ZNX01NSU9fQlVTLCByZF9iYXNlLFxcbiA4NDA6XFx0XFx0XFx0XFx0XFx0ICAgICAgMiAqIFNaXzY0SywgXFx1MDAyNnJkX2Rldi1cXHUwMDNlZGV2KTtcXG4gODQxOlxcdFxcdGlmIChyZXQpXFxuIDg0MjpcXHRcXHRcXHR2Z2ljX3VuZG9fcmVkaXN0X2Fzc2lnbm1lbnQodmNwdSk7XFxuIDg0MzpcXHRcXG4gODQ0OlxcdFxcdHJldHVybiByZXQ7XFxuIDg0NTpcXHRcXG4gODQ2OlxcdG91dF91bmxvY2s6XFxuIDg0NzpcXHRcXHRtdXRleF91bmxvY2soXFx1MDAyNmt2bS1cXHUwMDNlYXJjaC5jb25maWdfbG9jayk7XFxuIDg0ODpcXHRcXHRyZXR1cm4gcmV0O1xcbiA4NDk6XFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQwODoyNzoyOC4yODg1Mjc5NjZaIiwiU2VxIjoyMSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTk2MzczOTg4NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHdoYXQgSSB3b3VsZCBiZSB0aGlua2luZywgZ2l2ZW4gdGhhdCBjb250ZXh0LlxuXG4qKkRpdmluZyBpbnRvIHRoZSBWZ2ljLU1NSU8tVjMgSW1wbGVtZW50YXRpb24qKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGRpZyBpbnRvIHRoZSBndXRzIG9mIHRoZSB2aXJ0dWFsIEdJQyAoR2VuZXJpYyBJbnRlcnJ1cHQgQ29udHJvbGxlcikgbWVtb3J5LW1hcHBlZCBJL08gdjMgaW1wbGVtZW50YXRpb24sIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIGBhcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtbW1pby12My5jYCBmaWxlLiBJIG5lZWQgdG8gZ2V0IGEgYmV0dGVyIGhhbmRsZSBvbiBob3cgdGhpcyB2ZXJzaW9uIGhhbmRsZXMgbWVtb3J5LW1hcHBlZCBhY2Nlc3Nlcy4gTGV0J3Mgc3RhcnQgYnkgemVyb2luZyBpbiBvbiBsaW5lcyA4NTAgdGhyb3VnaCA5MzAuIFRoaXMgc2VjdGlvbiBpcyBwcm9iYWJseSBrZXkgdG8gdW5kZXJzdGFuZGluZyBhIHNwZWNpZmljIGNyaXRpY2FsIGZ1bmN0aW9uIG9yIGEgcGFydGljdWxhciBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zLCBtYXliZSByZWxhdGVkIHRvIGludGVycnVwdCBjb25maWd1cmF0aW9uLCBpbmplY3Rpb24sIG9yIGFja25vd2xlZGdlbWVudC4gS25vd2luZyB0aGlzIHdpbGwgZ2l2ZSBtZSBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0aGUgdmlydHVhbCBHSUMgaW50ZXJhY3RzIHdpdGggdGhlIGhvc3QgYW5kIGd1ZXN0LCBzcGVjaWZpY2FsbHkgdGhlIG1lbW9yeS1tYXBwZWQgaW50ZXJmYWNlLiBJJ20gaG9waW5nIHRvIGlkZW50aWZ5IGFueSBwb3RlbnRpYWwgYm90dGxlbmVja3MsIGFyZWFzIGZvciBvcHRpbWl6YXRpb24sIG9yIHBlcmhhcHMgZXZlbiBzdWJ0bGUgYnVncy4gTGV0J3Mgc2VlIHdoYXQgdGhlc2UgbGluZXMgcmV2ZWFsLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5Njg4LCJPdXRwdXRUb2tlbnMiOjUwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQwODoyNzozMC4yNTIyNzEzOVoiLCJTZXEiOjIyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDI3MjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLW1taW8tdjMuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA4NTAsXG4gIFwiTGluZUNvdW50XCI6IDgwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA4NTA6XFx0XFxuIDg1MTpcXHR2b2lkIHZnaWNfdW5yZWdpc3Rlcl9yZWRpc3RfaW9kZXYoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbiA4NTI6XFx0e1xcbiA4NTM6XFx0XFx0c3RydWN0IHZnaWNfaW9fZGV2aWNlICpyZF9kZXYgPSBcXHUwMDI2dmNwdS1cXHUwMDNlYXJjaC52Z2ljX2NwdS5yZF9pb2RldjtcXG4gODU0OlxcdFxcbiA4NTU6XFx0XFx0a3ZtX2lvX2J1c191bnJlZ2lzdGVyX2Rldih2Y3B1LVxcdTAwM2Vrdm0sIEtWTV9NTUlPX0JVUywgXFx1MDAyNnJkX2Rldi1cXHUwMDNlZGV2KTtcXG4gODU2OlxcdH1cXG4gODU3OlxcdFxcbiA4NTg6XFx0c3RhdGljIHZvaWQgdmdpY19yb2xsYmFja19yZWRpc3RfaW9kZXYoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxcbiA4NTk6XFx0XFx0XFx0XFx0XFx0ICAgICAgIHN0cnVjdCB2Z2ljX3JlZGlzdF9yZWdpb24gKnJkcmVnKVxcbiA4NjA6XFx0e1xcbiA4NjE6XFx0XFx0c3RydWN0IHZnaWNfY3B1ICp2Z2ljX2NwdSA9IFxcdTAwMjZ2Y3B1LVxcdTAwM2VhcmNoLnZnaWNfY3B1O1xcbiA4NjI6XFx0XFxuIDg2MzpcXHRcXHRsb2NrZGVwX2Fzc2VydF9oZWxkKFxcdTAwMjZ2Y3B1LVxcdTAwM2Vrdm0tXFx1MDAzZXNsb3RzX2xvY2spO1xcbiA4NjQ6XFx0XFxuIDg2NTpcXHRcXHRpZiAodmdpY19jcHUtXFx1MDAzZXJkcmVnICE9IHJkcmVnKVxcbiA4NjY6XFx0XFx0XFx0cmV0dXJuO1xcbiA4Njc6XFx0XFxuIDg2ODpcXHRcXHR2Z2ljX3VucmVnaXN0ZXJfcmVkaXN0X2lvZGV2KHZjcHUpO1xcbiA4Njk6XFx0XFxuIDg3MDpcXHRcXHRndWFyZChtdXRleCkoXFx1MDAyNnZjcHUtXFx1MDAzZWt2bS1cXHUwMDNlYXJjaC5jb25maWdfbG9jayk7XFxuIDg3MTpcXHRcXHR2Z2ljX2NwdS1cXHUwMDNlcmRyZWcgPSBOVUxMO1xcbiA4NzI6XFx0XFx0dmdpY19jcHUtXFx1MDAzZXJkX2lvZGV2LmJhc2VfYWRkciA9IFZHSUNfQUREUl9VTkRFRjtcXG4gODczOlxcdH1cXG4gODc0OlxcdFxcbiA4NzU6XFx0c3RhdGljIGludCB2Z2ljX3JlZ2lzdGVyX2FsbF9yZWRpc3RfaW9kZXZzKHN0cnVjdCBrdm0gKmt2bSxcXG4gODc2OlxcdFxcdFxcdFxcdFxcdFxcdCAgIHN0cnVjdCB2Z2ljX3JlZGlzdF9yZWdpb24gKnJkcmVnKVxcbiA4Nzc6XFx0e1xcbiA4Nzg6XFx0XFx0c3RydWN0IGt2bV92Y3B1ICp2Y3B1O1xcbiA4Nzk6XFx0XFx0dW5zaWduZWQgbG9uZyBjO1xcbiA4ODA6XFx0XFx0aW50IHJldCA9IDA7XFxuIDg4MTpcXHRcXG4gODgyOlxcdFxcdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXFx1MDAyNmt2bS1cXHUwMDNlc2xvdHNfbG9jayk7XFxuIDg4MzpcXHRcXG4gODg0OlxcdFxcdGt2bV9mb3JfZWFjaF92Y3B1KGMsIHZjcHUsIGt2bSkge1xcbiA4ODU6XFx0XFx0XFx0cmV0ID0gdmdpY19yZWdpc3Rlcl9yZWRpc3RfaW9kZXYodmNwdSk7XFxuIDg4NjpcXHRcXHRcXHRpZiAocmV0KVxcbiA4ODc6XFx0XFx0XFx0XFx0YnJlYWs7XFxuIDg4ODpcXHRcXHR9XFxuIDg4OTpcXHRcXG4gODkwOlxcdFxcdGlmIChyZXQpIHtcXG4gODkxOlxcdFxcdFxcdC8qIFVuZG8gYXNzaWdubWVudHMgbWFkZSBmcm9tIHRoZSByZWdpb24gYmVpbmcgYWRkZWQuICovXFxuIDg5MjpcXHRcXHRcXHRpbnQgaTtcXG4gODkzOlxcdFxcbiA4OTQ6XFx0XFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIGM7IGkrKykge1xcbiA4OTU6XFx0XFx0XFx0XFx0dmNwdSA9IGt2bV9nZXRfdmNwdShrdm0sIGkpO1xcbiA4OTY6XFx0XFx0XFx0XFx0dmdpY19yb2xsYmFja19yZWRpc3RfaW9kZXYodmNwdSwgcmRyZWcpO1xcbiA4OTc6XFx0XFx0XFx0fVxcbiA4OTg6XFx0XFx0fVxcbiA4OTk6XFx0XFxuIDkwMDpcXHRcXHRyZXR1cm4gcmV0O1xcbiA5MDE6XFx0fVxcbiA5MDI6XFx0XFxuIDkwMzpcXHQvKipcXG4gOTA0OlxcdCAqIHZnaWNfdjNfYWxsb2NfcmVkaXN0X3JlZ2lvbiAtIEFsbG9jYXRlIGEgbmV3IHJlZGlzdHJpYnV0b3IgcmVnaW9uXFxuIDkwNTpcXHQgKlxcbiA5MDY6XFx0ICogUGVyZm9ybXMgdmFyaW91cyBjaGVja3MgYmVmb3JlIGluc2VydGluZyB0aGUgcmRpc3QgcmVnaW9uIGluIHRoZSBsaXN0LlxcbiA5MDc6XFx0ICogVGhvc2UgdGVzdHMgZGVwZW5kIG9uIHdoZXRoZXIgdGhlIHNpemUgb2YgdGhlIHJkaXN0IHJlZ2lvbiBpcyBrbm93blxcbiA5MDg6XFx0ICogKGllLiBjb3VudCAhPSAwKS4gVGhlIGxpc3QgaXMgc29ydGVkIGJ5IHJkaXN0IHJlZ2lvbiBpbmRleC5cXG4gOTA5OlxcdCAqXFxuIDkxMDpcXHQgKiBAa3ZtOiBrdm0gaGFuZGxlXFxuIDkxMTpcXHQgKiBAaW5kZXg6IHJlZGlzdCByZWdpb24gaW5kZXhcXG4gOTEyOlxcdCAqIEBiYXNlOiBiYXNlIG9mIHRoZSBuZXcgcmRpc3QgcmVnaW9uXFxuIDkxMzpcXHQgKiBAY291bnQ6IG51bWJlciBvZiByZWRpc3RyaWJ1dG9ycyB0aGUgcmVnaW9uIGlzIG1hZGUgb2YgKDAgaW4gdGhlIG9sZCBzdHlsZVxcbiA5MTQ6XFx0ICogc2luZ2xlIHJlZ2lvbiwgd2hvc2Ugc2l6ZSBpcyBpbmR1Y2VkIGZyb20gdGhlIG51bWJlciBvZiB2Y3B1cylcXG4gOTE1OlxcdCAqXFxuIDkxNjpcXHQgKiBSZXR1cm4gMCBvbiBzdWNjZXNzLCBcXHUwMDNjIDAgb3RoZXJ3aXNlXFxuIDkxNzpcXHQgKi9cXG4gOTE4OlxcdHN0YXRpYyBpbnQgdmdpY192M19hbGxvY19yZWRpc3RfcmVnaW9uKHN0cnVjdCBrdm0gKmt2bSwgdWludDMyX3QgaW5kZXgsXFxuIDkxOTpcXHRcXHRcXHRcXHRcXHQgICAgICAgZ3BhX3QgYmFzZSwgdWludDMyX3QgY291bnQpXFxuIDkyMDpcXHR7XFxuIDkyMTpcXHRcXHRzdHJ1Y3QgdmdpY19kaXN0ICpkID0gXFx1MDAyNmt2bS1cXHUwMDNlYXJjaC52Z2ljO1xcbiA5MjI6XFx0XFx0c3RydWN0IHZnaWNfcmVkaXN0X3JlZ2lvbiAqcmRyZWc7XFxuIDkyMzpcXHRcXHRzdHJ1Y3QgbGlzdF9oZWFkICpyZF9yZWdpb25zID0gXFx1MDAyNmQtXFx1MDAzZXJkX3JlZ2lvbnM7XFxuIDkyNDpcXHRcXHRpbnQgbnJfdmNwdXMgPSBhdG9taWNfcmVhZChcXHUwMDI2a3ZtLVxcdTAwM2VvbmxpbmVfdmNwdXMpO1xcbiA5MjU6XFx0XFx0c2l6ZV90IHNpemUgPSBjb3VudCA/IGNvdW50ICogS1ZNX1ZHSUNfVjNfUkVESVNUX1NJWkVcXG4gOTI2OlxcdFxcdFxcdFxcdCAgICA6IG5yX3ZjcHVzICogS1ZNX1ZHSUNfVjNfUkVESVNUX1NJWkU7XFxuIDkyNzpcXHRcXHRpbnQgcmV0O1xcbiA5Mjg6XFx0XFxuIDkyOTpcXHRcXHQvKiBjcm9zcyB0aGUgZW5kIG9mIG1lbW9yeSA/ICovXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDA4OjI3OjMwLjI1MjM3Nzc5WiIsIlNlcSI6MjMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI4NjE1MDkzMTg2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlBhdGNoIEFuYWx5c2lzOiBWR0lDIFJlZGlzdHJpYnV0b3IgUmVnaXN0cmF0aW9uIEVycm9yIEhhbmRsaW5nKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZ3Jhc3AgdGhlIGNvcmUgY29uY2VwdHVhbCBjaGFuZ2UgdGhpcyBwYXRjaCBpbnRyb2R1Y2VzLiBJdCBsb29rcyBsaWtlIGl0J3MgYWRkcmVzc2luZyBhIGNyaXRpY2FsIGZsYXcgaW4gdGhlIGVycm9yIGhhbmRsaW5nIGZvciByZWdpc3RlcmluZyByZWRpc3RyaWJ1dG9yIE1NSU8gZGV2aWNlcyB3aXRoaW4gdGhlIEtWTSBWR0lDIHYzIGltcGxlbWVudGF0aW9uLCBzcGVjaWZpY2FsbHkgb24gYXJtNjQuIFByZXZpb3VzbHksIHRoZXJlIHdhcyBhIHByb2JsZW0gd2l0aCB0aGUgb3JkZXIgb2Ygb3BlcmF0aW9ucyB3aGVuIHJlZ2lzdGVyaW5nIHRoZXNlIGBpb2RldnNgLiBUaGUgaW5jcmVtZW50IG9mIGByZHJlZy1cdTAwM2VmcmVlX2luZGV4YCB3YXMgaGFwcGVuaW5nICphZnRlciogdGhlIHBvdGVudGlhbGx5IGZhaWxpbmcgYGt2bV9pb19idXNfcmVnaXN0ZXJfZGV2YCBjYWxsLiBUaGlzIGxlZnQgdGhpbmdzIGluIGEgbWVzc3kgc3RhdGUgaWYgdGhlIHJlZ2lzdHJhdGlvbiBmYWlsZWQgb3IgaWYgc29tZXRoaW5nIHdlbnQgd3JvbmcgbGF0ZXIgaW4gdGhlIGB2Z2ljX3JlZ2lzdGVyX2FsbF9yZWRpc3RfaW9kZXZzYCBwcm9jZXNzLlxuXG5UaGUgcGF0Y2ggc2VlbXMgdG8gY2xlYW4gdXAgdGhlIGxvZ2ljIGFyb3VuZCB0aGF0IGZhaWx1cmUsIHdpdGggdGhlc2Uga2V5IGNoYW5nZXM6IGB2Z2ljX3VuZG9fcmVkaXN0X2Fzc2lnbm1lbnRgIG5vdyBjb3JyZWN0bHkgcmVzZXRzIGByZHJlZy1cdTAwM2VmcmVlX2luZGV4YCwgaXQgYWxzbyBjbGVhcnMgYHZnaWNfY3B1LVx1MDAzZXJkcmVnYCBhbmQgYHZnaWNfY3B1LVx1MDAzZXJkX2lvZGV2LmJhc2VfYWRkcmAuIFRoZSBwYXRjaCBhbHNvIGVuc3VyZXMgdGhhdCBgdmdpY19yb2xsYmFja19yZWRpc3RfaW9kZXZgIG9ubHkgdW5yZWdpc3RlcnMgYW5kIHJlc2V0cyBzdGF0ZSBpZiB0aGUgYHZnaWNfY3B1LVx1MDAzZXJkcmVnYCBtYXRjaGVzIHRoZSBjdXJyZW50IGByZHJlZ2AuIFRoZSBjYWxscyB0byBgdmdpY19yZWdpc3Rlcl9hbGxfcmVkaXN0X2lvZGV2c2AgYW5kIGB2Z2ljX3YzX3NldF9yZWRpc3RfYmFzZWAgYXJlIGFsc28gdXBkYXRlZCB0byBwYXNzIGByZHJlZ2AsIHdoaWNoIG1ha2VzIHNlbnNlIGZvciB0aGUgY29ycmVjdCBiZWhhdmlvci5cblxuTm93LCBsZXQncyBnZXQgaW50byB0aGUgbml0dHktZ3JpdHR5LiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoaXMgcGF0Y2ggaXNuJ3QgaW50cm9kdWNpbmcgYW55IG5ldyB2dWxuZXJhYmlsaXRpZXMgb3Igd2Vha25lc3NlcywgZXNwZWNpYWxseSByZWxhdGVkIHRvIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBwb3RlbnRpYWwgaW5mb3JtYXRpb24gbGVha3MsIGFuZCBnZW5lcmFsIG1lbW9yeSBzYWZldHkuIEknbSBmb2N1c2luZyBvbiB1c2VyIHNwYWNlIGludGVyYWN0aW9ucywgZGF0YSBzdHJ1Y3R1cmUgaW5pdGlhbGl6YXRpb24sIGFuZCB0aGUgdXN1YWwgc3VzcGVjdHMuIEkgY2FuIHNlZSB0aGF0IHRoZSBjaGFuZ2VzIGRvbid0IGNvcHkgbWVtb3J5IHRvIHVzZXIgc3BhY2UsIG5vIG5ldyB1bmluaXRpYWxpemVkIHN0cnVjdHVyZXMgb3IgZmllbGRzIGFyZSBpbnRyb2R1Y2VkLCBhbmQgbm8gYnJhbmNoZXMgYXJlIGJhc2VkIG9uIHVuaW5pdGlhbGl6ZWQgZGF0YS4gVGhlc2UgYXJlIGdvb2Qgc2lnbnMuXG5cblRoZSBtYWluIGlzc3VlIGhlcmUgaXMgYSBsb2dpYyBidWcgYW5kIGEgY2xlYW51cCBpc3N1ZS4gSXQncyBhbiBlcnJvciBoYW5kbGluZyBhbmQgc3RhdGUgbWFuYWdlbWVudCBwcm9ibGVtIOKAkyBhIGZhaWxlZCByZWdpc3RyYXRpb24gdGhhdCB3YXMgbGVhZGluZyB0byBhbiBpbmNvbnNpc3RlbnQgc3RhdGUuIE5vIG5ldyBtZW1vcnkgYWxsb2NhdGlvbnMgd2VyZSBpbnRyb2R1Y2VkLCB3aGljaCBmdXJ0aGVyIHJlZHVjZXMgYW55IHdvcnJpZXMgb2YgbWVtb3J5IGlzc3Vlcy5cblxuVGhlIHF1ZXN0aW9uIG9mIEtNU0FOIChLZXJuZWwgTWVtb3J5IFNhbml0aXplcikgaXMgcGFyYW1vdW50LCBvZiBjb3Vyc2UuIEkgbmVlZCB0byBjYXJlZnVsbHkgYXNzZXNzIGlmIHRoaXMgcGF0Y2ggd2FycmFudHMgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLiBUaGUgZ3VpZGVsaW5lcyBhcmUgY2xlYXI6IHVubGVzcyB0aGUgcGF0Y2ggaW50cm9kdWNlcyAqc3BlY2lmaWNhbGx5KiB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyB0aGF0IEtNU0FOIGlzIG5lZWRlZCB0byBkZXRlY3QsIHdlIGRvbid0IG5lZWQgS01TQU4uIEJhc2VkIG9uIG15IHJldmlldywgdGhhdCdzIG5vdCB0aGUgY2FzZSBoZXJlLlxuXG4xLiAgVGhpcyBwYXRjaCBpc24ndCBpbnRyb2R1Y2luZyBhIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cbjIuICBJdOKAmXMgcHJpbWFyaWx5IGZpeGluZyBlcnJvciBoYW5kbGluZyBhbmQgY2xlYW51cCBsb2dpYyBmb3IgdGhlIGV4aXN0aW5nIEtWTSBWR0lDIHJlZGlzdHJpYnV0b3IgcmVnaXN0cmF0aW9uLCBhbmQgaW1wcm92aW5nIHN0YXRlIGNvbnNpc3RlbmN5LlxuMy4gIEV2ZXJ5dGhpbmcgdGhlIHBhdGNoIHRvdWNoZXMgYW5kIG1vZGlmaWVzIGFyZSBpbml0aWFsaXplZCBwb2ludGVycyBhbmQgZmllbGRzIG9uIGV4aXN0aW5nIHN0cnVjdCBrdm0sIGt2bVxcX3ZjcHUsIGFuZCB2Z2ljIHN0cnVjdHVyZXMuXG5cblRoZXJlZm9yZSwgYE5lZWRzS01TQU4gPSBmYWxzZWAuIEkgbmVlZCB0byBkb2N1bWVudCB0aGlzIHJlYXNvbmluZyB0aG9yb3VnaGx5LCB0aG91Z2gsIGFuZCBJIG5lZWQgdG8gZG8gYSB0aG9yb3VnaCBzYW5pdHkgY2hlY2sgdG8gbWFrZSBjZXJ0YWluIEkgaGF2ZW4ndCBtaXNzZWQgYW55dGhpbmcuIEknbSBxdWl0ZSBjb25maWRlbnQgdGhhdCB0aGlzIHBhdGNoIGlzIHNhZmUsIGJ1dCB0aGVyZSdzIG5vIHJlYXNvbiB0byBydXNoIGhlcmUuIEknbGwgdGFrZSBhIGNvbXByZWhlbnNpdmUgbG9vayBhdCB0aGUgb3ZlcmFsbCBjb250ZXh0LCB0aGUgb3JpZ2luYWwgZGVzaWduLCB0aGUgcHJvYmxlbSwgYW5kIHRoZSBzb2x1dGlvbiB0byBlbnN1cmUgSSB1bmRlcnN0YW5kIGl0IGluc2lkZSBhbmQgb3V0LiBUaGVuIEknbGwgd3JpdGUgdXAgYSBkZXRhaWxlZCBleHBsYW5hdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTEzMDYsIk91dHB1dFRva2VucyI6MTQ1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzAwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMDg6Mjc6NTguODY3NDczOTA2WiIsIlNlcSI6MjQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTc3MDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBlcnJvciByb2xsYmFjayBoYW5kbGluZyBkdXJpbmcgS1ZNIEFSTTY0IFZHSUN2MyByZWRpc3RyaWJ1dG9yIGlvZGV2IHJlZ2lzdHJhdGlvbiAoaGFuZGxpbmcgZmFpbGVkIHJlZ2lzdHJhdGlvbiBjbGVhbnVwLCByZXNldHRpbmcgdmdpY19jcHUgcmVkaXN0cmlidXRvciBwb2ludGVycywgYW5kIGRlY3JlbWVudGluZyBmcmVlX2luZGV4IGFwcHJvcHJpYXRlbHkpLiBUaGUgY2hhbmdlcyBkbyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSBhbnkgbWVtb3J5IGFsbG9jYXRpb25zLCBkYXRhIHN0cnVjdHVyZXMgY29waWVkIHRvIHVzZXJzcGFjZSwgb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgYWNjZXNzZXMuIEFueSBwb3RlbnRpYWwgY29uY3VycmVuY3ksIGxvY2sgb3JkZXJpbmcsIG9yIGludmFsaWQgZGVyZWZlcmVuY2UgaXNzdWVzIGFyZSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIHNhbml0aXplcnMgKExPQ0tERVAvS0FTQU4pLiBUaGVyZWZvcmUsIHRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgaW5mb3JtYXRpb24gbGVha3MgdGhhdCB3b3VsZCByZXF1aXJlIGEgS01TQU4gZnV6emluZyBzZXNzaW9uLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGVycm9yIHJvbGxiYWNrIGhhbmRsaW5nIGR1cmluZyBLVk0gQVJNNjQgVkdJQ3YzIHJlZGlzdHJpYnV0b3IgaW9kZXYgcmVnaXN0cmF0aW9uIChoYW5kbGluZyBmYWlsZWQgcmVnaXN0cmF0aW9uIGNsZWFudXAsIHJlc2V0dGluZyB2Z2ljX2NwdSByZWRpc3RyaWJ1dG9yIHBvaW50ZXJzLCBhbmQgZGVjcmVtZW50aW5nIGZyZWVfaW5kZXggYXBwcm9wcmlhdGVseSkuIFRoZSBjaGFuZ2VzIGRvIG5vdCBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IGFueSBtZW1vcnkgYWxsb2NhdGlvbnMsIGRhdGEgc3RydWN0dXJlcyBjb3BpZWQgdG8gdXNlcnNwYWNlLCBvciB1bmluaXRpYWxpemVkIG1lbW9yeSBhY2Nlc3Nlcy4gQW55IHBvdGVudGlhbCBjb25jdXJyZW5jeSwgbG9jayBvcmRlcmluZywgb3IgaW52YWxpZCBkZXJlZmVyZW5jZSBpc3N1ZXMgYXJlIGNvdmVyZWQgYnkgc3RhbmRhcmQgc2FuaXRpemVycyAoTE9DS0RFUC9LQVNBTikuIFRoZXJlZm9yZSwgdGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBpbmZvcm1hdGlvbiBsZWFrcyB0aGF0IHdvdWxkIHJlcXVpcmUgYSBLTVNBTiBmdXp6aW5nIHNlc3Npb24uXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow9nlt2[1] Phase: Succeeded StartedAt: 2026-08-31 08:28:10 +0000 UTC FinishedAt: 2026-08-31 08:28:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9nlt2[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-31 08:28:10 +0000 UTC FinishedAt: 2026-08-31 08:28:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9nlt2[2] Phase: Succeeded StartedAt: 2026-08-31 08:28:10 +0000 UTC FinishedAt: 2026-08-31 09:12:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9nlt2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cf72cbb39da84b6f02f90c07f33b102fc10b16f0","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","VIRTUALIZATION"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["vgic_v3_set_redist_base","vgic_register_redist_iodev","vgic_unregister_redist_iodev"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cf72cbb39da84b6f02f90c07f33b102fc10b16f0","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","VIRTUALIZATION"],"series_id":"b03c2f29-3fac-4960-800e-c9cd7723e89c","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-31 08:28:10 +0000 UTC FinishedAt: 2026-08-31 09:12:02 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"cf72cbb39da84b6f02f90c07f33b102fc10b16f0","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","VIRTUALIZATION"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["vgic_v3_set_redist_base","vgic_register_redist_iodev","vgic_unregister_redist_iodev"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"cf72cbb39da84b6f02f90c07f33b102fc10b16f0","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","VIRTUALIZATION"],"series_id":"b03c2f29-3fac-4960-800e-c9cd7723e89c","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflow9nlt2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cf72cbb39da84b6f02f90c07f33b102fc10b16f0","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","VIRTUALIZATION"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["vgic_v3_set_redist_base","vgic_register_redist_iodev","vgic_unregister_redist_iodev"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cf72cbb39da84b6f02f90c07f33b102fc10b16f0","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","VIRTUALIZATION"],"series_id":"b03c2f29-3fac-4960-800e-c9cd7723e89c","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-31 08:28:10 +0000 UTC FinishedAt: 2026-08-31 08:28:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9nlt2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cf72cbb39da84b6f02f90c07f33b102fc10b16f0","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","VIRTUALIZATION"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["vgic_v3_set_redist_base","vgic_register_redist_iodev","vgic_unregister_redist_iodev"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cf72cbb39da84b6f02f90c07f33b102fc10b16f0","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","VIRTUALIZATION"],"series_id":"b03c2f29-3fac-4960-800e-c9cd7723e89c","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-31 08:28:10 +0000 UTC FinishedAt: 2026-08-31 08:28:15 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"cf72cbb39da84b6f02f90c07f33b102fc10b16f0","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","VIRTUALIZATION"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.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-workflow9nlt2/series-workflow9nlt2-convert-artifact-3626279662/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow9nlt2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cf72cbb39da84b6f02f90c07f33b102fc10b16f0","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","VIRTUALIZATION"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["vgic_v3_set_redist_base","vgic_register_redist_iodev","vgic_unregister_redist_iodev"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cf72cbb39da84b6f02f90c07f33b102fc10b16f0","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","VIRTUALIZATION"],"series_id":"b03c2f29-3fac-4960-800e-c9cd7723e89c","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-31 08:28:20 +0000 UTC FinishedAt: 2026-08-31 08:48:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9nlt2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cf72cbb39da84b6f02f90c07f33b102fc10b16f0","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","VIRTUALIZATION"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["vgic_v3_set_redist_base","vgic_register_redist_iodev","vgic_unregister_redist_iodev"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cf72cbb39da84b6f02f90c07f33b102fc10b16f0","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","VIRTUALIZATION"],"series_id":"b03c2f29-3fac-4960-800e-c9cd7723e89c","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-31 08:28:20 +0000 UTC FinishedAt: 2026-08-31 08:48:25 +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:*905aa93e-42d0-4d18-b798-0249e28154c3,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-workflow9nlt2/series-workflow9nlt2-convert-artifact-3626279662/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": "bf75781c-60dc-404e-910b-5b783a3cde8a", "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-workflow9nlt2/series-workflow9nlt2-build-action-1483008596/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow9nlt2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cf72cbb39da84b6f02f90c07f33b102fc10b16f0","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","VIRTUALIZATION"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["vgic_v3_set_redist_base","vgic_register_redist_iodev","vgic_unregister_redist_iodev"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cf72cbb39da84b6f02f90c07f33b102fc10b16f0","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","VIRTUALIZATION"],"series_id":"b03c2f29-3fac-4960-800e-c9cd7723e89c","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-31 08:28:20 +0000 UTC FinishedAt: 2026-08-31 08:48:15 +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:*905aa93e-42d0-4d18-b798-0249e28154c3,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-workflow9nlt2/series-workflow9nlt2-convert-artifact-3626279662/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": "bf75781c-60dc-404e-910b-5b783a3cde8a", "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-workflow9nlt2/series-workflow9nlt2-build-action-1483008596/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow9nlt2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cf72cbb39da84b6f02f90c07f33b102fc10b16f0","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","VIRTUALIZATION"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["vgic_v3_set_redist_base","vgic_register_redist_iodev","vgic_unregister_redist_iodev"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cf72cbb39da84b6f02f90c07f33b102fc10b16f0","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","VIRTUALIZATION"],"series_id":"b03c2f29-3fac-4960-800e-c9cd7723e89c","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-31 08:48:25 +0000 UTC FinishedAt: 2026-08-31 08:48:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9nlt2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cf72cbb39da84b6f02f90c07f33b102fc10b16f0","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","VIRTUALIZATION"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["vgic_v3_set_redist_base","vgic_register_redist_iodev","vgic_unregister_redist_iodev"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cf72cbb39da84b6f02f90c07f33b102fc10b16f0","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","VIRTUALIZATION"],"series_id":"b03c2f29-3fac-4960-800e-c9cd7723e89c","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-31 08:48:25 +0000 UTC FinishedAt: 2026-08-31 08:48:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9nlt2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cf72cbb39da84b6f02f90c07f33b102fc10b16f0","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","VIRTUALIZATION"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["vgic_v3_set_redist_base","vgic_register_redist_iodev","vgic_unregister_redist_iodev"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cf72cbb39da84b6f02f90c07f33b102fc10b16f0","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","VIRTUALIZATION"],"series_id":"b03c2f29-3fac-4960-800e-c9cd7723e89c","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-31 08:48:25 +0000 UTC FinishedAt: 2026-08-31 08:48:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9nlt2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cf72cbb39da84b6f02f90c07f33b102fc10b16f0","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","VIRTUALIZATION"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["vgic_v3_set_redist_base","vgic_register_redist_iodev","vgic_unregister_redist_iodev"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cf72cbb39da84b6f02f90c07f33b102fc10b16f0","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","VIRTUALIZATION"],"series_id":"b03c2f29-3fac-4960-800e-c9cd7723e89c","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-31 08:48:25 +0000 UTC FinishedAt: 2026-08-31 08:48:29 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"cf72cbb39da84b6f02f90c07f33b102fc10b16f0","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","VIRTUALIZATION"],"series_id":"b03c2f29-3fac-4960-800e-c9cd7723e89c","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.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-workflow9nlt2/series-workflow9nlt2-convert-artifact-3961928417/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow9nlt2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cf72cbb39da84b6f02f90c07f33b102fc10b16f0","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","VIRTUALIZATION"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["vgic_v3_set_redist_base","vgic_register_redist_iodev","vgic_unregister_redist_iodev"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cf72cbb39da84b6f02f90c07f33b102fc10b16f0","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","VIRTUALIZATION"],"series_id":"b03c2f29-3fac-4960-800e-c9cd7723e89c","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-31 08:48:48 +0000 UTC FinishedAt: 2026-08-31 08:50:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9nlt2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cf72cbb39da84b6f02f90c07f33b102fc10b16f0","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","VIRTUALIZATION"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["vgic_v3_set_redist_base","vgic_register_redist_iodev","vgic_unregister_redist_iodev"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cf72cbb39da84b6f02f90c07f33b102fc10b16f0","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","VIRTUALIZATION"],"series_id":"b03c2f29-3fac-4960-800e-c9cd7723e89c","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-31 08:48:48 +0000 UTC FinishedAt: 2026-08-31 08:50:35 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*bf75781c-60dc-404e-910b-5b783a3cde8a,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-workflow9nlt2/series-workflow9nlt2-build-action-1483008596/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-workflow9nlt2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cf72cbb39da84b6f02f90c07f33b102fc10b16f0","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","VIRTUALIZATION"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["vgic_v3_set_redist_base","vgic_register_redist_iodev","vgic_unregister_redist_iodev"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cf72cbb39da84b6f02f90c07f33b102fc10b16f0","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","VIRTUALIZATION"],"series_id":"b03c2f29-3fac-4960-800e-c9cd7723e89c","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-31 08:50:45 +0000 UTC FinishedAt: 2026-08-31 08:50:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9nlt2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cf72cbb39da84b6f02f90c07f33b102fc10b16f0","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","VIRTUALIZATION"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["vgic_v3_set_redist_base","vgic_register_redist_iodev","vgic_unregister_redist_iodev"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cf72cbb39da84b6f02f90c07f33b102fc10b16f0","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","VIRTUALIZATION"],"series_id":"b03c2f29-3fac-4960-800e-c9cd7723e89c","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-31 08:50:45 +0000 UTC FinishedAt: 2026-08-31 08:50:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9nlt2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cf72cbb39da84b6f02f90c07f33b102fc10b16f0","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","VIRTUALIZATION"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["vgic_v3_set_redist_base","vgic_register_redist_iodev","vgic_unregister_redist_iodev"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cf72cbb39da84b6f02f90c07f33b102fc10b16f0","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","VIRTUALIZATION"],"series_id":"b03c2f29-3fac-4960-800e-c9cd7723e89c","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-31 08:50:45 +0000 UTC FinishedAt: 2026-08-31 09:06:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9nlt2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cf72cbb39da84b6f02f90c07f33b102fc10b16f0","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","VIRTUALIZATION"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["vgic_v3_set_redist_base","vgic_register_redist_iodev","vgic_unregister_redist_iodev"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cf72cbb39da84b6f02f90c07f33b102fc10b16f0","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","VIRTUALIZATION"],"series_id":"b03c2f29-3fac-4960-800e-c9cd7723e89c","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-31 08:50:45 +0000 UTC FinishedAt: 2026-08-31 09:06:38 +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:*905aa93e-42d0-4d18-b798-0249e28154c3,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-workflow9nlt2/series-workflow9nlt2-convert-artifact-3961928417/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": "920baa5e-34fb-4060-80fc-26fe0ed24b15", "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-workflow9nlt2/series-workflow9nlt2-build-action-217955309/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow9nlt2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cf72cbb39da84b6f02f90c07f33b102fc10b16f0","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","VIRTUALIZATION"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["vgic_v3_set_redist_base","vgic_register_redist_iodev","vgic_unregister_redist_iodev"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cf72cbb39da84b6f02f90c07f33b102fc10b16f0","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","VIRTUALIZATION"],"series_id":"b03c2f29-3fac-4960-800e-c9cd7723e89c","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-31 08:50:45 +0000 UTC FinishedAt: 2026-08-31 09:06:28 +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:*905aa93e-42d0-4d18-b798-0249e28154c3,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-workflow9nlt2/series-workflow9nlt2-convert-artifact-3961928417/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": "920baa5e-34fb-4060-80fc-26fe0ed24b15", "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-workflow9nlt2/series-workflow9nlt2-build-action-217955309/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow9nlt2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cf72cbb39da84b6f02f90c07f33b102fc10b16f0","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","VIRTUALIZATION"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["vgic_v3_set_redist_base","vgic_register_redist_iodev","vgic_unregister_redist_iodev"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cf72cbb39da84b6f02f90c07f33b102fc10b16f0","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","VIRTUALIZATION"],"series_id":"b03c2f29-3fac-4960-800e-c9cd7723e89c","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-31 09:06:38 +0000 UTC FinishedAt: 2026-08-31 09:06:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9nlt2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cf72cbb39da84b6f02f90c07f33b102fc10b16f0","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","VIRTUALIZATION"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["vgic_v3_set_redist_base","vgic_register_redist_iodev","vgic_unregister_redist_iodev"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cf72cbb39da84b6f02f90c07f33b102fc10b16f0","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","VIRTUALIZATION"],"series_id":"b03c2f29-3fac-4960-800e-c9cd7723e89c","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-31 09:06:38 +0000 UTC FinishedAt: 2026-08-31 09:06:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9nlt2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cf72cbb39da84b6f02f90c07f33b102fc10b16f0","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","VIRTUALIZATION"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["vgic_v3_set_redist_base","vgic_register_redist_iodev","vgic_unregister_redist_iodev"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cf72cbb39da84b6f02f90c07f33b102fc10b16f0","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","VIRTUALIZATION"],"series_id":"b03c2f29-3fac-4960-800e-c9cd7723e89c","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-31 09:06:38 +0000 UTC FinishedAt: 2026-08-31 09:08:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9nlt2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cf72cbb39da84b6f02f90c07f33b102fc10b16f0","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","VIRTUALIZATION"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["vgic_v3_set_redist_base","vgic_register_redist_iodev","vgic_unregister_redist_iodev"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cf72cbb39da84b6f02f90c07f33b102fc10b16f0","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","VIRTUALIZATION"],"series_id":"b03c2f29-3fac-4960-800e-c9cd7723e89c","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-31 09:06:38 +0000 UTC FinishedAt: 2026-08-31 09:08:22 +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:*920baa5e-34fb-4060-80fc-26fe0ed24b15,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-workflow9nlt2/series-workflow9nlt2-build-action-217955309/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-workflow9nlt2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cf72cbb39da84b6f02f90c07f33b102fc10b16f0","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","VIRTUALIZATION"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["vgic_v3_set_redist_base","vgic_register_redist_iodev","vgic_unregister_redist_iodev"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cf72cbb39da84b6f02f90c07f33b102fc10b16f0","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","VIRTUALIZATION"],"series_id":"b03c2f29-3fac-4960-800e-c9cd7723e89c","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-31 09:08:32 +0000 UTC FinishedAt: 2026-08-31 09:12:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9nlt2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cf72cbb39da84b6f02f90c07f33b102fc10b16f0","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","VIRTUALIZATION"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["vgic_v3_set_redist_base","vgic_register_redist_iodev","vgic_unregister_redist_iodev"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cf72cbb39da84b6f02f90c07f33b102fc10b16f0","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","VIRTUALIZATION"],"series_id":"b03c2f29-3fac-4960-800e-c9cd7723e89c","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-31 09:08:32 +0000 UTC FinishedAt: 2026-08-31 09:12:02 +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"],"focus":["kvm"],"focus_symbols":["vgic_v3_set_redist_base","vgic_register_redist_iodev","vgic_unregister_redist_iodev"],"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:*bf75781c-60dc-404e-910b-5b783a3cde8a,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*920baa5e-34fb-4060-80fc-26fe0ed24b15,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-workflow9nlt2/series-workflow9nlt2-build-action-1483008596/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-workflow9nlt2/series-workflow9nlt2-build-action-217955309/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow9nlt2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cf72cbb39da84b6f02f90c07f33b102fc10b16f0","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","VIRTUALIZATION"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["vgic_v3_set_redist_base","vgic_register_redist_iodev","vgic_unregister_redist_iodev"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cf72cbb39da84b6f02f90c07f33b102fc10b16f0","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","VIRTUALIZATION"],"series_id":"b03c2f29-3fac-4960-800e-c9cd7723e89c","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-31 09:08:32 +0000 UTC FinishedAt: 2026-08-31 09:08:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9nlt2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cf72cbb39da84b6f02f90c07f33b102fc10b16f0","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","VIRTUALIZATION"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["vgic_v3_set_redist_base","vgic_register_redist_iodev","vgic_unregister_redist_iodev"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cf72cbb39da84b6f02f90c07f33b102fc10b16f0","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","VIRTUALIZATION"],"series_id":"b03c2f29-3fac-4960-800e-c9cd7723e89c","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-31 09:08:32 +0000 UTC FinishedAt: 2026-08-31 09:08:38 +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"],"focus":["kvm"],"focus_symbols":["vgic_v3_set_redist_base","vgic_register_redist_iodev","vgic_unregister_redist_iodev"],"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-workflow9nlt2/series-workflow9nlt2-convert-artifact-2501785974/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow9nlt2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cf72cbb39da84b6f02f90c07f33b102fc10b16f0","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","VIRTUALIZATION"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["vgic_v3_set_redist_base","vgic_register_redist_iodev","vgic_unregister_redist_iodev"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cf72cbb39da84b6f02f90c07f33b102fc10b16f0","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","VIRTUALIZATION"],"series_id":"b03c2f29-3fac-4960-800e-c9cd7723e89c","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-31 09:08:32 +0000 UTC FinishedAt: 2026-08-31 09:08:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9nlt2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cf72cbb39da84b6f02f90c07f33b102fc10b16f0","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","VIRTUALIZATION"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["vgic_v3_set_redist_base","vgic_register_redist_iodev","vgic_unregister_redist_iodev"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cf72cbb39da84b6f02f90c07f33b102fc10b16f0","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","VIRTUALIZATION"],"series_id":"b03c2f29-3fac-4960-800e-c9cd7723e89c","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-31 09:08:32 +0000 UTC FinishedAt: 2026-08-31 09:08:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9nlt2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cf72cbb39da84b6f02f90c07f33b102fc10b16f0","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","VIRTUALIZATION"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["vgic_v3_set_redist_base","vgic_register_redist_iodev","vgic_unregister_redist_iodev"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cf72cbb39da84b6f02f90c07f33b102fc10b16f0","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","VIRTUALIZATION"],"series_id":"b03c2f29-3fac-4960-800e-c9cd7723e89c","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-31 09:08:33 +0000 UTC FinishedAt: 2026-08-31 09:08:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9nlt2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cf72cbb39da84b6f02f90c07f33b102fc10b16f0","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","VIRTUALIZATION"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["vgic_v3_set_redist_base","vgic_register_redist_iodev","vgic_unregister_redist_iodev"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cf72cbb39da84b6f02f90c07f33b102fc10b16f0","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","VIRTUALIZATION"],"series_id":"b03c2f29-3fac-4960-800e-c9cd7723e89c","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-31 09:08:43 +0000 UTC FinishedAt: 2026-08-31 09:12:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9nlt2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cf72cbb39da84b6f02f90c07f33b102fc10b16f0","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","VIRTUALIZATION"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["vgic_v3_set_redist_base","vgic_register_redist_iodev","vgic_unregister_redist_iodev"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cf72cbb39da84b6f02f90c07f33b102fc10b16f0","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","VIRTUALIZATION"],"series_id":"b03c2f29-3fac-4960-800e-c9cd7723e89c","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-31 09:08:43 +0000 UTC FinishedAt: 2026-08-31 09:11:41 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*bf75781c-60dc-404e-910b-5b783a3cde8a,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*920baa5e-34fb-4060-80fc-26fe0ed24b15,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-workflow9nlt2/series-workflow9nlt2-build-action-1483008596/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-workflow9nlt2/series-workflow9nlt2-build-action-217955309/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-workflow9nlt2/series-workflow9nlt2-convert-artifact-2501785974/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,}