Name: series-workflowhvdgn Phase: Succeeded StartedAt: 2026-08-12 05:54:50 +0000 UTC FinishedAt: 2026-08-12 07:06:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhvdgn[0] Phase: Succeeded StartedAt: 2026-08-12 05:54:50 +0000 UTC FinishedAt: 2026-08-12 06:20:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhvdgn[0].run-triage Phase: Succeeded StartedAt: 2026-08-12 05:54:50 +0000 UTC FinishedAt: 2026-08-12 06:20:26 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "5e6de6a2b522f659defacb1551d0465ba6ce13cf", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "5e6de6a2b522f659defacb1551d0465ba6ce13cf", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM" ], "series_id": "0d7440a9-770e-4182-84df-d9760416f363" }, "track": "KASAN", "fuzz": { "focus": [ "kvm" ], "focus_symbols": [ "kvm_vm_ioctl_enable_cap" ], "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+CgkJCTx0ZD4yMDI2LzA4LzEyIDA2OjE5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2t2bV92bV9pb2N0bF9lbmFibGVfY2FwJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBib3VuZHMgY2hlY2tpbmcsIG92ZXJmbG93IHByZXZlbnRpb24sIGFuZCBzdGF0ZSB2YWxpZGF0aW9uIGZvciBSSVNDLVYgS1ZNIEFJQSAoQWR2YW5jZWQgSW50ZXJydXB0IEFyY2hpdGVjdHVyZSkgZGV2aWNlIGFkZHJlc3NlcyAoQVBMSUMgYW5kIElNU0lDKS4gSXQgZW5zdXJlcyB0aGF0IHRoZSBjb25maWd1cmVkIGd1ZXN0IHBoeXNpY2FsIGFkZHJlc3NlcyBkbyBub3Qgb3ZlcmZsb3cgYW5kIGZpdCB3aXRoaW4gdGhlIGd1ZXN0IHN0YWdlIHBhZ2UgdGFibGUgc2l6ZS4gVGhlc2UgY2hhbmdlcyBhZGRyZXNzIHBvdGVudGlhbCBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzIG9yIGludmFsaWQgY29uZmlndXJhdGlvbnMsIHdoaWNoIGFyZSB0eXBpY2FsbHkgY2F1Z2h0IGJ5IEtBU0FOIG9yIHN0YW5kYXJkIGtlcm5lbCBjaGVja3MuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBzdHJ1Y3R1cmVzIGNvcGllZCB0byB1c2VyIHNwYWNlLCBub3IgZG9lcyBpdCBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IG9yIGluZm8tbGVha3MuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBhZGRyZXNzIHJhbmdlIHZhbGlkYXRpb24gZm9yIHRoZSBSSVNDLVYgQUlBIChBZHZhbmNlZCBJbnRlcnJ1cHQgQXJjaGl0ZWN0dXJlKSBLVk0gZGV2aWNlIGFuZCBwcmV2ZW50cyBjaGFuZ2luZyB0aGUgVk0mIzM5O3MgcGdkX2xldmVscyBhZnRlciB0aGUgQUlBIGRldmljZSBoYXMgYmVlbiBpbml0aWFsaXplZC4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byByZWFjaGFibGUgS1ZNIGlvY3RsIGhhbmRsZXJzIChLVk1fU0VUX0RFVklDRV9BVFRSIGFuZCBLVk1fRU5BQkxFX0NBUCkgYW5kIHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIHRoZSBuZXcgdmFsaWRhdGlvbiBsb2dpYyBoYW5kbGVzIGFsbCBlZGdlIGNhc2VzIGNvcnJlY3RseS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAwNjoxOTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGIwNjQxYzc3YmFhM2RlZDAzOTRhMzg2NjA2YTZiZThhM2I5Zjc1ODZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIEF1ZyAxMiAwNjoxOTowNyAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9hcmNoL3Jpc2N2L2t2bS9haWFfZGV2aWNlLmMgYi9hcmNoL3Jpc2N2L2t2bS9haWFfZGV2aWNlLmNcbmluZGV4IGVmYzdjMGJjZmJhOTIuLmU5NjlkYmRjNGI5NzEgMTAwNjQ0XG4tLS0gYS9hcmNoL3Jpc2N2L2t2bS9haWFfZGV2aWNlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvcmlzY3Yva3ZtL2FpYV9kZXZpY2UuY1xuQEAgLTEwLDcgJiM0MzsxMCw5IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvYml0cy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvaXJxY2hpcC9yaXNjdi1pbXNpYy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgva3ZtX2hvc3QuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9vdmVyZmxvdy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvdWFjY2Vzcy5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2FzbS9rdm1fZ3N0YWdlLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2Nhc20va3ZtX2lzYS5oXHUwMDNlXG4gXG4gc3RhdGljIGludCBhaWFfY3JlYXRlKHN0cnVjdCBrdm1fZGV2aWNlICpkZXYsIHUzMiB0eXBlKVxuQEAgLTE0MiwxNyAmIzQzOzE0NCwzNyBAQCBzdGF0aWMgaW50IGFpYV9jb25maWcoc3RydWN0IGt2bSAqa3ZtLCB1bnNpZ25lZCBsb25nIHR5cGUsXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4mIzQzO3N0YXRpYyBpbnQgYWlhX2NoZWNrX2FkZHJfcmFuZ2Uoc3RydWN0IGt2bSAqa3ZtLCB1NjQgYWRkciwgdTY0IGFsaWdubWVudCxcbiYjNDM7XHRcdFx0XHR1NjQgc2l6ZSlcbiYjNDM7e1xuJiM0MztcdHU2NCBlbmQ7XG4mIzQzO1xuJiM0MztcdGlmICghSVNfQUxJR05FRChhZGRyLCBhbGlnbm1lbnQpKVxuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1xuJiM0MztcdGlmIChjaGVja19hZGRfb3ZlcmZsb3coYWRkciwgc2l6ZSwgXHUwMDI2ZW5kKSlcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcbiYjNDM7XHRpZiAoZW5kIFx1MDAzZSBrdm1fcmlzY3ZfZ3N0YWdlX2dwYV9zaXplKGt2bS1cdTAwM2VhcmNoLnBnZF9sZXZlbHMpKVxuJiM0MztcdFx0cmV0dXJuIC1FMkJJRztcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIGludCBhaWFfYXBsaWNfYWRkcihzdHJ1Y3Qga3ZtICprdm0sIHU2NCAqYWRkciwgYm9vbCB3cml0ZSlcbiB7XG4gXHRzdHJ1Y3Qga3ZtX2FpYSAqYWlhID0gXHUwMDI2a3ZtLVx1MDAzZWFyY2guYWlhO1xuJiM0MztcdGludCByZXQ7XG4gXG4gXHRpZiAod3JpdGUpIHtcbiBcdFx0LyogV3JpdGVzIGNhbiBvbmx5IGJlIGRvbmUgYmVmb3JlIGlycWNoaXAgaXMgaW5pdGlhbGl6ZWQgKi9cbiBcdFx0aWYgKGt2bV9yaXNjdl9haWFfaW5pdGlhbGl6ZWQoa3ZtKSlcbiBcdFx0XHRyZXR1cm4gLUVCVVNZO1xuIFxuLVx0XHRpZiAoKmFkZHIgXHUwMDI2IChLVk1fREVWX1JJU0NWX0FQTElDX0FMSUdOIC0gMSkpXG4tXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1x0XHRyZXQgPSBhaWFfY2hlY2tfYWRkcl9yYW5nZShrdm0sICphZGRyLCBLVk1fREVWX1JJU0NWX0FQTElDX0FMSUdOLFxuJiM0MztcdFx0XHRcdFx0ICAgS1ZNX0RFVl9SSVNDVl9BUExJQ19TSVpFKTtcbiYjNDM7XHRcdGlmIChyZXQpXG4mIzQzO1x0XHRcdHJldHVybiByZXQ7XG4gXG4gXHRcdGFpYS1cdTAwM2VhcGxpY19hZGRyID0gKmFkZHI7XG4gXHR9IGVsc2VcbkBAIC0xNjYsNiAmIzQzOzE4OCw3IEBAIHN0YXRpYyBpbnQgYWlhX2ltc2ljX2FkZHIoc3RydWN0IGt2bSAqa3ZtLCB1NjQgKmFkZHIsXG4ge1xuIFx0c3RydWN0IGt2bV92Y3B1ICp2Y3B1O1xuIFx0c3RydWN0IGt2bV92Y3B1X2FpYSAqdmNwdV9haWE7XG4mIzQzO1x0aW50IHJldDtcbiBcbiBcdHZjcHUgPSBrdm1fZ2V0X3ZjcHUoa3ZtLCB2Y3B1X2lkeCk7XG4gXHRpZiAoIXZjcHUpXG5AQCAtMTc3LDggJiM0MzsyMDAsMTAgQEAgc3RhdGljIGludCBhaWFfaW1zaWNfYWRkcihzdHJ1Y3Qga3ZtICprdm0sIHU2NCAqYWRkcixcbiBcdFx0aWYgKGt2bV9yaXNjdl9haWFfaW5pdGlhbGl6ZWQoa3ZtKSlcbiBcdFx0XHRyZXR1cm4gLUVCVVNZO1xuIFxuLVx0XHRpZiAoKmFkZHIgXHUwMDI2IChLVk1fREVWX1JJU0NWX0lNU0lDX0FMSUdOIC0gMSkpXG4tXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1x0XHRyZXQgPSBhaWFfY2hlY2tfYWRkcl9yYW5nZShrdm0sICphZGRyLCBLVk1fREVWX1JJU0NWX0lNU0lDX0FMSUdOLFxuJiM0MztcdFx0XHRcdFx0ICAgS1ZNX0RFVl9SSVNDVl9JTVNJQ19TSVpFKTtcbiYjNDM7XHRcdGlmIChyZXQpXG4mIzQzO1x0XHRcdHJldHVybiByZXQ7XG4gXHR9XG4gXG4gXHRtdXRleF9sb2NrKFx1MDAyNnZjcHUtXHUwMDNlbXV0ZXgpO1xuQEAgLTE5MSw2ICYjNDM7MjE2LDQwIEBAIHN0YXRpYyBpbnQgYWlhX2ltc2ljX2FkZHIoc3RydWN0IGt2bSAqa3ZtLCB1NjQgKmFkZHIsXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4mIzQzO3N0YXRpYyBpbnQgYWlhX3ZhbGlkYXRlX2FkZHJfcmFuZ2VzKHN0cnVjdCBrdm0gKmt2bSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBrdm1fYWlhICphaWEgPSBcdTAwMjZrdm0tXHUwMDNlYXJjaC5haWE7XG4mIzQzO1x0c3RydWN0IGt2bV92Y3B1X2FpYSAqdmFpYTtcbiYjNDM7XHRzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHU7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBpZHg7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0aWYgKGFpYS1cdTAwM2Vucl9zb3VyY2VzKSB7XG4mIzQzO1x0XHRpZiAoYWlhLVx1MDAzZWFwbGljX2FkZHIgPT0gS1ZNX1JJU0NWX0FJQV9VTkRFRl9BRERSKVxuJiM0MztcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XG4mIzQzO1x0XHRyZXQgPSBhaWFfY2hlY2tfYWRkcl9yYW5nZShrdm0sIGFpYS1cdTAwM2VhcGxpY19hZGRyLFxuJiM0MztcdFx0XHRcdFx0ICAgS1ZNX0RFVl9SSVNDVl9BUExJQ19BTElHTixcbiYjNDM7XHRcdFx0XHRcdCAgIEtWTV9ERVZfUklTQ1ZfQVBMSUNfU0laRSk7XG4mIzQzO1x0XHRpZiAocmV0KVxuJiM0MztcdFx0XHRyZXR1cm4gcmV0O1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0a3ZtX2Zvcl9lYWNoX3ZjcHUoaWR4LCB2Y3B1LCBrdm0pIHtcbiYjNDM7XHRcdHZhaWEgPSBcdTAwMjZ2Y3B1LVx1MDAzZWFyY2guYWlhX2NvbnRleHQ7XG4mIzQzO1x0XHRpZiAodmFpYS1cdTAwM2VpbXNpY19hZGRyID09IEtWTV9SSVNDVl9BSUFfVU5ERUZfQUREUilcbiYjNDM7XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1xuJiM0MztcdFx0cmV0ID0gYWlhX2NoZWNrX2FkZHJfcmFuZ2Uoa3ZtLCB2YWlhLVx1MDAzZWltc2ljX2FkZHIsXG4mIzQzO1x0XHRcdFx0XHQgICBLVk1fREVWX1JJU0NWX0lNU0lDX0FMSUdOLFxuJiM0MztcdFx0XHRcdFx0ICAgS1ZNX0RFVl9SSVNDVl9JTVNJQ19TSVpFKTtcbiYjNDM7XHRcdGlmIChyZXQpXG4mIzQzO1x0XHRcdHJldHVybiByZXQ7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgZ3BhX3QgYWlhX2ltc2ljX3BwbihzdHJ1Y3Qga3ZtX2FpYSAqYWlhLCBncGFfdCBhZGRyKVxuIHtcbiBcdHUzMiBoLCBsO1xuQEAgLTI0NCw5ICYjNDM7MzAzLDkgQEAgc3RhdGljIGludCBhaWFfaW5pdChzdHJ1Y3Qga3ZtICprdm0pXG4gXHRpZiAoYWlhLVx1MDAzZW5yX2lkcyBcdTAwM2MgYWlhLVx1MDAzZW5yX3NvdXJjZXMpXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFxuLVx0LyogQVBMSUMgYmFzZSBpcyByZXF1aXJlZCBmb3Igbm9uLXplcm8gbnVtYmVyIG9mIHNvdXJjZXMgKi9cbi1cdGlmIChhaWEtXHUwMDNlbnJfc291cmNlcyBcdTAwMjZcdTAwMjYgYWlhLVx1MDAzZWFwbGljX2FkZHIgPT0gS1ZNX1JJU0NWX0FJQV9VTkRFRl9BRERSKVxuLVx0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XHRyZXQgPSBhaWFfdmFsaWRhdGVfYWRkcl9yYW5nZXMoa3ZtKTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiBcbiBcdC8qIEdyb3VwIGluZGV4IGJpdHMgbXVzdCBub3Qgb3ZlcmxhcCBndWVzdCBhbmQgSEFSVCBpbmRleCBiaXRzLiAqL1xuIFx0aWYgKGFpYS1cdTAwM2Vucl9ncm91cF9iaXRzIFx1MDAyNlx1MDAyNlxuQEAgLTI2MywxMiAmIzQzOzMyMiw2IEBAIHN0YXRpYyBpbnQgYWlhX2luaXQoc3RydWN0IGt2bSAqa3ZtKVxuIFx0a3ZtX2Zvcl9lYWNoX3ZjcHUoaWR4LCB2Y3B1LCBrdm0pIHtcbiBcdFx0dmFpYSA9IFx1MDAyNnZjcHUtXHUwMDNlYXJjaC5haWFfY29udGV4dDtcbiBcbi1cdFx0LyogSU1TSUMgYmFzZSBpcyByZXF1aXJlZCAqL1xuLVx0XHRpZiAodmFpYS1cdTAwM2VpbXNpY19hZGRyID09IEtWTV9SSVNDVl9BSUFfVU5ERUZfQUREUikge1xuLVx0XHRcdHJldCA9IC1FSU5WQUw7XG4tXHRcdFx0Z290byBmYWlsX2NsZWFudXBfaW1zaWNzO1xuLVx0XHR9XG4tXG4gXHRcdC8qIEFsbCBJTVNJQ3Mgc2hvdWxkIGhhdmUgbWF0Y2hpbmcgYmFzZSBQUE4gKi9cbiBcdFx0aWYgKGJhc2VfcHBuID09IEtWTV9SSVNDVl9BSUFfVU5ERUZfQUREUilcbiBcdFx0XHRiYXNlX3BwbiA9IGFpYV9pbXNpY19wcG4oYWlhLCB2YWlhLVx1MDAzZWltc2ljX2FkZHIpO1xuZGlmZiAtLWdpdCBhL2FyY2gvcmlzY3Yva3ZtL3ZtLmMgYi9hcmNoL3Jpc2N2L2t2bS92bS5jXG5pbmRleCBhOWYwODNmZWViNzY3Li42NmVkZmFhODYyNDM1IDEwMDY0NFxuLS0tIGEvYXJjaC9yaXNjdi9rdm0vdm0uY1xuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9yaXNjdi9rdm0vdm0uY1xuQEAgLTI1MCw3ICYjNDM7MjUwLDggQEAgaW50IGt2bV92bV9pb2N0bF9lbmFibGVfY2FwKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9lbmFibGVfY2FwICpjYXApXG4gXHRcdG11dGV4X2xvY2soXHUwMDI2a3ZtLVx1MDAzZWxvY2spO1xuIFx0XHRtdXRleF9sb2NrKFx1MDAyNmt2bS1cdTAwM2VzbG90c19sb2NrKTtcbiBcbi1cdFx0aWYgKGt2bS1cdTAwM2VjcmVhdGVkX3ZjcHVzIHx8ICFrdm1fYXJlX2FsbF9tZW1zbG90c19lbXB0eShrdm0pKVxuJiM0MztcdFx0aWYgKGt2bS1cdTAwM2VjcmVhdGVkX3ZjcHVzIHx8ICFrdm1fYXJlX2FsbF9tZW1zbG90c19lbXB0eShrdm0pIHx8XG4mIzQzO1x0XHQgICAga3ZtX3Jpc2N2X2FpYV9pbml0aWFsaXplZChrdm0pKVxuIFx0XHRcdHIgPSAtRUJVU1k7XG4gXHRcdGVsc2VcbiBcdFx0XHRrdm0tXHUwMDNlYXJjaC5wZ2RfbGV2ZWxzID0gbmV3X2xldmVscztcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAwNjoxOTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7S1ZNJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7a3ZtX3ZtX2lvY3RsX2VuYWJsZV9jYXAmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBhZGRyZXNzIHJhbmdlIHZhbGlkYXRpb24gZm9yIHRoZSBSSVNDLVYgQUlBIChBZHZhbmNlZCBJbnRlcnJ1cHQgQXJjaGl0ZWN0dXJlKSBLVk0gZGV2aWNlIGFuZCBwcmV2ZW50cyBjaGFuZ2luZyB0aGUgVk0mIzM5O3MgcGdkX2xldmVscyBhZnRlciB0aGUgQUlBIGRldmljZSBoYXMgYmVlbiBpbml0aWFsaXplZC4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byByZWFjaGFibGUgS1ZNIGlvY3RsIGhhbmRsZXJzIChLVk1fU0VUX0RFVklDRV9BVFRSIGFuZCBLVk1fRU5BQkxFX0NBUCkgYW5kIHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIHRoZSBuZXcgdmFsaWRhdGlvbiBsb2dpYyBoYW5kbGVzIGFsbCBlZGdlIGNhc2VzIGNvcnJlY3RseS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGIwNjQxYzc3YmFhM2RlZDAzOTRhMzg2NjA2YTZiZThhM2I5Zjc1ODYKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgV2VkIEF1ZyAxMiAwNjoxOTowNyAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2FyY2gvcmlzY3Yva3ZtL2FpYV9kZXZpY2UuYyBiL2FyY2gvcmlzY3Yva3ZtL2FpYV9kZXZpY2UuYwppbmRleCBlZmM3YzBiY2ZiYTkyLi5lOTY5ZGJkYzRiOTcxIDEwMDY0NAotLS0gYS9hcmNoL3Jpc2N2L2t2bS9haWFfZGV2aWNlLmMKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9yaXNjdi9rdm0vYWlhX2RldmljZS5jCkBAIC0xMCw3ICYjNDM7MTAsOSBAQAogI2luY2x1ZGUgJmx0O2xpbnV4L2JpdHMuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9pcnFjaGlwL3Jpc2N2LWltc2ljLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgva3ZtX2hvc3QuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvb3ZlcmZsb3cuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC91YWNjZXNzLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2FzbS9rdm1fZ3N0YWdlLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7YXNtL2t2bV9pc2EuaCZndDsKIAogc3RhdGljIGludCBhaWFfY3JlYXRlKHN0cnVjdCBrdm1fZGV2aWNlICpkZXYsIHUzMiB0eXBlKQpAQCAtMTQyLDE3ICYjNDM7MTQ0LDM3IEBAIHN0YXRpYyBpbnQgYWlhX2NvbmZpZyhzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGxvbmcgdHlwZSwKIAlyZXR1cm4gMDsKIH0KIAomIzQzO3N0YXRpYyBpbnQgYWlhX2NoZWNrX2FkZHJfcmFuZ2Uoc3RydWN0IGt2bSAqa3ZtLCB1NjQgYWRkciwgdTY0IGFsaWdubWVudCwKJiM0MzsJCQkJdTY0IHNpemUpCiYjNDM7ewomIzQzOwl1NjQgZW5kOwomIzQzOwomIzQzOwlpZiAoIUlTX0FMSUdORUQoYWRkciwgYWxpZ25tZW50KSkKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwomIzQzOwlpZiAoY2hlY2tfYWRkX292ZXJmbG93KGFkZHIsIHNpemUsICZhbXA7ZW5kKSkKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwomIzQzOwlpZiAoZW5kICZndDsga3ZtX3Jpc2N2X2dzdGFnZV9ncGFfc2l6ZShrdm0tJmd0O2FyY2gucGdkX2xldmVscykpCiYjNDM7CQlyZXR1cm4gLUUyQklHOwomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgaW50IGFpYV9hcGxpY19hZGRyKHN0cnVjdCBrdm0gKmt2bSwgdTY0ICphZGRyLCBib29sIHdyaXRlKQogewogCXN0cnVjdCBrdm1fYWlhICphaWEgPSAmYW1wO2t2bS0mZ3Q7YXJjaC5haWE7CiYjNDM7CWludCByZXQ7CiAKIAlpZiAod3JpdGUpIHsKIAkJLyogV3JpdGVzIGNhbiBvbmx5IGJlIGRvbmUgYmVmb3JlIGlycWNoaXAgaXMgaW5pdGlhbGl6ZWQgKi8KIAkJaWYgKGt2bV9yaXNjdl9haWFfaW5pdGlhbGl6ZWQoa3ZtKSkKIAkJCXJldHVybiAtRUJVU1k7CiAKLQkJaWYgKCphZGRyICZhbXA7IChLVk1fREVWX1JJU0NWX0FQTElDX0FMSUdOIC0gMSkpCi0JCQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJCXJldCA9IGFpYV9jaGVja19hZGRyX3JhbmdlKGt2bSwgKmFkZHIsIEtWTV9ERVZfUklTQ1ZfQVBMSUNfQUxJR04sCiYjNDM7CQkJCQkgICBLVk1fREVWX1JJU0NWX0FQTElDX1NJWkUpOwomIzQzOwkJaWYgKHJldCkKJiM0MzsJCQlyZXR1cm4gcmV0OwogCiAJCWFpYS0mZ3Q7YXBsaWNfYWRkciA9ICphZGRyOwogCX0gZWxzZQpAQCAtMTY2LDYgJiM0MzsxODgsNyBAQCBzdGF0aWMgaW50IGFpYV9pbXNpY19hZGRyKHN0cnVjdCBrdm0gKmt2bSwgdTY0ICphZGRyLAogewogCXN0cnVjdCBrdm1fdmNwdSAqdmNwdTsKIAlzdHJ1Y3Qga3ZtX3ZjcHVfYWlhICp2Y3B1X2FpYTsKJiM0MzsJaW50IHJldDsKIAogCXZjcHUgPSBrdm1fZ2V0X3ZjcHUoa3ZtLCB2Y3B1X2lkeCk7CiAJaWYgKCF2Y3B1KQpAQCAtMTc3LDggJiM0MzsyMDAsMTAgQEAgc3RhdGljIGludCBhaWFfaW1zaWNfYWRkcihzdHJ1Y3Qga3ZtICprdm0sIHU2NCAqYWRkciwKIAkJaWYgKGt2bV9yaXNjdl9haWFfaW5pdGlhbGl6ZWQoa3ZtKSkKIAkJCXJldHVybiAtRUJVU1k7CiAKLQkJaWYgKCphZGRyICZhbXA7IChLVk1fREVWX1JJU0NWX0lNU0lDX0FMSUdOIC0gMSkpCi0JCQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJCXJldCA9IGFpYV9jaGVja19hZGRyX3JhbmdlKGt2bSwgKmFkZHIsIEtWTV9ERVZfUklTQ1ZfSU1TSUNfQUxJR04sCiYjNDM7CQkJCQkgICBLVk1fREVWX1JJU0NWX0lNU0lDX1NJWkUpOwomIzQzOwkJaWYgKHJldCkKJiM0MzsJCQlyZXR1cm4gcmV0OwogCX0KIAogCW11dGV4X2xvY2soJmFtcDt2Y3B1LSZndDttdXRleCk7CkBAIC0xOTEsNiAmIzQzOzIxNiw0MCBAQCBzdGF0aWMgaW50IGFpYV9pbXNpY19hZGRyKHN0cnVjdCBrdm0gKmt2bSwgdTY0ICphZGRyLAogCXJldHVybiAwOwogfQogCiYjNDM7c3RhdGljIGludCBhaWFfdmFsaWRhdGVfYWRkcl9yYW5nZXMoc3RydWN0IGt2bSAqa3ZtKQomIzQzO3sKJiM0MzsJc3RydWN0IGt2bV9haWEgKmFpYSA9ICZhbXA7a3ZtLSZndDthcmNoLmFpYTsKJiM0MzsJc3RydWN0IGt2bV92Y3B1X2FpYSAqdmFpYTsKJiM0MzsJc3RydWN0IGt2bV92Y3B1ICp2Y3B1OwomIzQzOwl1bnNpZ25lZCBsb25nIGlkeDsKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJaWYgKGFpYS0mZ3Q7bnJfc291cmNlcykgewomIzQzOwkJaWYgKGFpYS0mZ3Q7YXBsaWNfYWRkciA9PSBLVk1fUklTQ1ZfQUlBX1VOREVGX0FERFIpCiYjNDM7CQkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CiYjNDM7CQlyZXQgPSBhaWFfY2hlY2tfYWRkcl9yYW5nZShrdm0sIGFpYS0mZ3Q7YXBsaWNfYWRkciwKJiM0MzsJCQkJCSAgIEtWTV9ERVZfUklTQ1ZfQVBMSUNfQUxJR04sCiYjNDM7CQkJCQkgICBLVk1fREVWX1JJU0NWX0FQTElDX1NJWkUpOwomIzQzOwkJaWYgKHJldCkKJiM0MzsJCQlyZXR1cm4gcmV0OwomIzQzOwl9CiYjNDM7CiYjNDM7CWt2bV9mb3JfZWFjaF92Y3B1KGlkeCwgdmNwdSwga3ZtKSB7CiYjNDM7CQl2YWlhID0gJmFtcDt2Y3B1LSZndDthcmNoLmFpYV9jb250ZXh0OwomIzQzOwkJaWYgKHZhaWEtJmd0O2ltc2ljX2FkZHIgPT0gS1ZNX1JJU0NWX0FJQV9VTkRFRl9BRERSKQomIzQzOwkJCXJldHVybiAtRUlOVkFMOwomIzQzOwomIzQzOwkJcmV0ID0gYWlhX2NoZWNrX2FkZHJfcmFuZ2Uoa3ZtLCB2YWlhLSZndDtpbXNpY19hZGRyLAomIzQzOwkJCQkJICAgS1ZNX0RFVl9SSVNDVl9JTVNJQ19BTElHTiwKJiM0MzsJCQkJCSAgIEtWTV9ERVZfUklTQ1ZfSU1TSUNfU0laRSk7CiYjNDM7CQlpZiAocmV0KQomIzQzOwkJCXJldHVybiByZXQ7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwogc3RhdGljIGdwYV90IGFpYV9pbXNpY19wcG4oc3RydWN0IGt2bV9haWEgKmFpYSwgZ3BhX3QgYWRkcikKIHsKIAl1MzIgaCwgbDsKQEAgLTI0NCw5ICYjNDM7MzAzLDkgQEAgc3RhdGljIGludCBhaWFfaW5pdChzdHJ1Y3Qga3ZtICprdm0pCiAJaWYgKGFpYS0mZ3Q7bnJfaWRzICZsdDsgYWlhLSZndDtucl9zb3VyY2VzKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCS8qIEFQTElDIGJhc2UgaXMgcmVxdWlyZWQgZm9yIG5vbi16ZXJvIG51bWJlciBvZiBzb3VyY2VzICovCi0JaWYgKGFpYS0mZ3Q7bnJfc291cmNlcyAmYW1wOyZhbXA7IGFpYS0mZ3Q7YXBsaWNfYWRkciA9PSBLVk1fUklTQ1ZfQUlBX1VOREVGX0FERFIpCi0JCXJldHVybiAtRUlOVkFMOwomIzQzOwlyZXQgPSBhaWFfdmFsaWRhdGVfYWRkcl9yYW5nZXMoa3ZtKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCXJldHVybiByZXQ7CiAKIAkvKiBHcm91cCBpbmRleCBiaXRzIG11c3Qgbm90IG92ZXJsYXAgZ3Vlc3QgYW5kIEhBUlQgaW5kZXggYml0cy4gKi8KIAlpZiAoYWlhLSZndDtucl9ncm91cF9iaXRzICZhbXA7JmFtcDsKQEAgLTI2MywxMiAmIzQzOzMyMiw2IEBAIHN0YXRpYyBpbnQgYWlhX2luaXQoc3RydWN0IGt2bSAqa3ZtKQogCWt2bV9mb3JfZWFjaF92Y3B1KGlkeCwgdmNwdSwga3ZtKSB7CiAJCXZhaWEgPSAmYW1wO3ZjcHUtJmd0O2FyY2guYWlhX2NvbnRleHQ7CiAKLQkJLyogSU1TSUMgYmFzZSBpcyByZXF1aXJlZCAqLwotCQlpZiAodmFpYS0mZ3Q7aW1zaWNfYWRkciA9PSBLVk1fUklTQ1ZfQUlBX1VOREVGX0FERFIpIHsKLQkJCXJldCA9IC1FSU5WQUw7Ci0JCQlnb3RvIGZhaWxfY2xlYW51cF9pbXNpY3M7Ci0JCX0KLQogCQkvKiBBbGwgSU1TSUNzIHNob3VsZCBoYXZlIG1hdGNoaW5nIGJhc2UgUFBOICovCiAJCWlmIChiYXNlX3BwbiA9PSBLVk1fUklTQ1ZfQUlBX1VOREVGX0FERFIpCiAJCQliYXNlX3BwbiA9IGFpYV9pbXNpY19wcG4oYWlhLCB2YWlhLSZndDtpbXNpY19hZGRyKTsKZGlmZiAtLWdpdCBhL2FyY2gvcmlzY3Yva3ZtL3ZtLmMgYi9hcmNoL3Jpc2N2L2t2bS92bS5jCmluZGV4IGE5ZjA4M2ZlZWI3NjcuLjY2ZWRmYWE4NjI0MzUgMTAwNjQ0Ci0tLSBhL2FyY2gvcmlzY3Yva3ZtL3ZtLmMKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9yaXNjdi9rdm0vdm0uYwpAQCAtMjUwLDcgJiM0MzsyNTAsOCBAQCBpbnQga3ZtX3ZtX2lvY3RsX2VuYWJsZV9jYXAoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX2VuYWJsZV9jYXAgKmNhcCkKIAkJbXV0ZXhfbG9jaygmYW1wO2t2bS0mZ3Q7bG9jayk7CiAJCW11dGV4X2xvY2soJmFtcDtrdm0tJmd0O3Nsb3RzX2xvY2spOwogCi0JCWlmIChrdm0tJmd0O2NyZWF0ZWRfdmNwdXMgfHwgIWt2bV9hcmVfYWxsX21lbXNsb3RzX2VtcHR5KGt2bSkpCiYjNDM7CQlpZiAoa3ZtLSZndDtjcmVhdGVkX3ZjcHVzIHx8ICFrdm1fYXJlX2FsbF9tZW1zbG90c19lbXB0eShrdm0pIHx8CiYjNDM7CQkgICAga3ZtX3Jpc2N2X2FpYV9pbml0aWFsaXplZChrdm0pKQogCQkJciA9IC1FQlVTWTsKIAkJZWxzZQogCQkJa3ZtLSZndDthcmNoLnBnZF9sZXZlbHMgPSBuZXdfbGV2ZWxzOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAwNjoxOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzODI2CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMjY0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIFBvdGVudGlhbCBSSVNDLVYgS1ZNIFZ1bG5lcmFiaWxpdHkqKgoKT2theSwgc28gSSYjMzk7dmUgZ290IHRoaXMgcGF0Y2gg4oCTIHNlZW1zIGxpa2UgaXTigJlzIHR3ZWFraW5nIGBhaWFfZGV2aWNlLmNgIGFuZCBgdm0uY2Agd2l0aGluIHRoZSBSSVNDLVYgS1ZNIGNvZGUuIExvb2tzIGxpa2UgYWRkcmVzcyByYW5nZSB2YWxpZGF0aW9uIGlzIHRoZSBmb2N1cywgYWRkaW5nIHRoZXNlIG5ldyBmdW5jdGlvbnMsIGBhaWFfY2hlY2tfYWRkcl9yYW5nZWAgYW5kIGBhaWFfdmFsaWRhdGVfYWRkcl9yYW5nZXNgLiBJdCBhbHNvIGxvb2tzIGxpa2UgaXQmIzM5O3MgbWFraW5nIGNoYW5nZXMgdG8gYGt2bV92bV9pb2N0bF9lbmFibGVfY2FwYCB0byBlbnN1cmUgYGt2bV9yaXNjdl9haWFfaW5pdGlhbGl6ZWQoa3ZtKWAgaXMgY2hlY2tlZCBiZWZvcmUgYWxsb3dpbmcgYW55IGBwZ2RfbGV2ZWxzYCBtb2RpZmljYXRpb25zLgoKTXkgaW5pdGlhbCB0aG91Z2h0IGlzLCAmIzM0O0lzIHRoaXMgYWN0dWFsbHkgc29tZXRoaW5nIHRoYXQmIzM5O3MgZXZlbiAqcmVhY2hhYmxlKiBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50PyYjMzQ7IFdlbGwsIEtWTSBvbiBSSVNDLVYgaXMgYSBmdW5kYW1lbnRhbCBmZWF0dXJlLCBzbyBpdCBzZWVtcyBsaWtlIGEgcmVhc29uYWJsZSBhc3N1bXB0aW9uLiBIbW0sIGJ1dCB0aGVuIEkgcmVtZW1iZXIsIHN5emthbGxlciBkb2VzIGEgbG90IG9mIGZ1enppbmcgYWNyb3NzIGRpZmZlcmVudCBhcmNoaXRlY3R1cmVzLiBJdCBwcmltYXJpbHkgd29ya3Mgd2l0aCB4ODZfNjQgYW5kIGFybTY0LCBidXQgb2NjYXNpb25hbGx5IGl0IGRvZXMgUklTQy1WLiBJZiB0aGlzIGlzIFJJU0MtViBLVk0tc3BlY2lmaWMsIGl0JiMzOTtzIG9ubHkgZXhwbG9pdGFibGUgb24gUklTQy1WIGhvc3RzLgoKVGhlIHJlYWwgcXVlc3Rpb24gaXMsIGRvZXMgc3l6a2FsbGVyIGFjdHVhbGx5ICpydW4qIG9uIFJJU0MtVj8gQWgsIHllcywgaXQgZG9lcyEgU3l6a2FsbGVyIHN1cHBvcnRzIHJpc2N2NjQsIHNvIGl0JiMzOTtzIGRlZmluaXRlbHkgd29ydGh3aGlsZSB0byBpbnZlc3RpZ2F0ZSB0aGlzIGZ1cnRoZXIuCgpOb3csIGxldCYjMzk7cyBuYWlsIGRvd24gdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBuZWVkZWQgdG8gdHJpZ2dlciB0aGlzIGNvZGUgcGF0aC4gT2J2aW91c2x5LCBgQ09ORklHX0tWTWAgaXMgYSBnaXZlbi4gVGltZSB0byBkaWcgaW50byBgYXJjaC9yaXNjdi9rdm0vS2NvbmZpZ2AgYW5kIHNlZSB3aGF0IGVsc2Ugd2UgbmVlZCB0byBlbmFibGUgdG8gZ2V0IHRoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDA2OjE5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBLVk0mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3Jpc2N2L2t2bS9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvcmlzY3Yva3ZtL0tjb25maWc9MTg9aWYgVklSVFVBTElaQVRJT05cbmFyY2gvcmlzY3Yva3ZtL0tjb25maWctMTktXG5hcmNoL3Jpc2N2L2t2bS9LY29uZmlnOjIwOmNvbmZpZyBLVk1cbmFyY2gvcmlzY3Yva3ZtL0tjb25maWctMjEtXHR0cmlzdGF0ZSBcJiMzNDtLZXJuZWwtYmFzZWQgVmlydHVhbCBNYWNoaW5lIChLVk0pIHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAwNjoxOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NTc3CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIEtWTSYjMzk7cyBEZXBlbmRlbmNpZXMqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgYXJjaGl0ZWN0dXJhbCB1bmRlcnBpbm5pbmcgb2YgYEtWTWAuIFRoaW5raW5nIGFib3V0IGl0LCBiZWZvcmUgSSBldmVuIHN0YXJ0IHRvIGRpdmUgaW50byBhIHNwZWNpZmljIGlzc3VlIG9yIGNvbmZpZ3VyYXRpb24sIHRoZSBmaXJzdCB0aGluZyBJIGRvIGlzIG1lbnRhbGx5IG1hcCBvdXQgaXRzIGRlcGVuZGVuY2llcy4gSXQmIzM5O3MgY3J1Y2lhbCBmb3IgdW5kZXJzdGFuZGluZyBob3cgaXQgZnVuY3Rpb25zIGFuZCBob3cgY2hhbmdlcyB3aWxsIHJpcHBsZSB0aHJvdWdoIHRoZSBzeXN0ZW0uIEkmIzM5O20gbm90IGdvaW5nIHRvIGp1c3QgYmxpbmRseSBzdGFydCB0cm91Ymxlc2hvb3Rpbmcgb3Igb3B0aW1pemluZyB3aXRob3V0IGEgc29saWQgZ3Jhc3Agb2Ygd2hhdCBLVk0gaXMgYnVpbHQgdXBvbi4gV2hhdCBhcmUgdGhlIGtleSBjb21wb25lbnRzLCB0aGUga2VybmVsIG1vZHVsZXMsIHRoZSB1c2Vyc3BhY2UgdG9vbHM/IFdoZXJlIGFyZSB0aGUgcG90ZW50aWFsIGJvdHRsZW5lY2tzIG9yIGZhaWx1cmUgcG9pbnRzPyBVbmRlcnN0YW5kaW5nIHRoZSBpbnRyaWNhdGUgd2ViIG9mIGRlcGVuZGVuY2llcyB3aWxsIGd1aWRlIG1lIHRvIHRoZSBtb3N0IHJlbGV2YW50IGFyZWFzIG9mIHRoZSBjb2RlIGJhc2Ugb3IgdGhlIGRvY3VtZW50YXRpb24uIFRoaXMgaXMgd2hlcmUgSSBzdGFydC4gTGV0JiMzOTtzIHNlZSB3aGF0IHdlIGZpbmQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMDY6MTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDthcmNoL3Jpc2N2L2t2bS9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuICAgMjpcdCNcbiAgIDM6XHQjIEtWTSBjb25maWd1cmF0aW9uXG4gICA0Olx0I1xuICAgNTpcdFxuICAgNjpcdHNvdXJjZSBcJiMzNDt2aXJ0L2t2bS9LY29uZmlnXCYjMzQ7XG4gICA3Olx0XG4gICA4Olx0bWVudWNvbmZpZyBWSVJUVUFMSVpBVElPTlxuICAgOTpcdFx0Ym9vbCBcJiMzNDtWaXJ0dWFsaXphdGlvblwmIzM0O1xuICAxMDpcdFx0aGVscFxuICAxMTpcdFx0ICBTYXkgWSBoZXJlIHRvIGdldCB0byBzZWUgb3B0aW9ucyBmb3IgdXNpbmcgeW91ciBMaW51eCBob3N0IHRvIHJ1blxuICAxMjpcdFx0ICBvdGhlciBvcGVyYXRpbmcgc3lzdGVtcyBpbnNpZGUgdmlydHVhbCBtYWNoaW5lcyAoZ3Vlc3RzKS5cbiAgMTM6XHRcdCAgVGhpcyBvcHRpb24gYWxvbmUgZG9lcyBub3QgYWRkIGFueSBrZXJuZWwgY29kZS5cbiAgMTQ6XHRcbiAgMTU6XHRcdCAgSWYgeW91IHNheSBOLCBhbGwgb3B0aW9ucyBpbiB0aGlzIHN1Ym1lbnUgd2lsbCBiZSBza2lwcGVkIGFuZFxuICAxNjpcdFx0ICBkaXNhYmxlZC5cbiAgMTc6XHRcbiAgMTg6XHRpZiBWSVJUVUFMSVpBVElPTlxuICAxOTpcdFxuICAyMDpcdGNvbmZpZyBLVk1cbiAgMjE6XHRcdHRyaXN0YXRlIFwmIzM0O0tlcm5lbC1iYXNlZCBWaXJ0dWFsIE1hY2hpbmUgKEtWTSkgc3VwcG9ydFwmIzM0O1xuICAyMjpcdFx0ZGVwZW5kcyBvbiBSSVNDVl9TQkkgXHUwMDI2XHUwMDI2IE1NVVxuICAyMzpcdFx0c2VsZWN0IEhBVkVfS1ZNX0lSUUNISVBcbiAgMjQ6XHRcdHNlbGVjdCBIQVZFX0tWTV9JUlFfUk9VVElOR1xuICAyNTpcdFx0c2VsZWN0IEhBVkVfS1ZNX01TSVxuICAyNjpcdFx0c2VsZWN0IEhBVkVfS1ZNX1JFQURPTkxZX01FTVxuICAyNzpcdFx0c2VsZWN0IEhBVkVfS1ZNX0RJUlRZX1JJTkdfQUNRX1JFTFxuICAyODpcdFx0c2VsZWN0IEtWTV9DT01NT05cbiAgMjk6XHRcdHNlbGVjdCBLVk1fR0VORVJJQ19ESVJUWUxPR19SRUFEX1BST1RFQ1RcbiAgMzA6XHRcdHNlbGVjdCBLVk1fR0VORVJJQ19IQVJEV0FSRV9FTkFCTElOR1xuICAzMTpcdFx0c2VsZWN0IEtWTV9NTUlPXG4gIDMyOlx0XHRzZWxlY3QgVklSVF9YRkVSX1RPX0dVRVNUX1dPUktcbiAgMzM6XHRcdHNlbGVjdCBTQ0hFRF9JTkZPXG4gIDM0Olx0XHRzZWxlY3QgR1VFU1RfUEVSRl9FVkVOVFMgaWYgUEVSRl9FVkVOVFNcbiAgMzU6XHRcdGhlbHBcbiAgMzY6XHRcdCAgU3VwcG9ydCBob3N0aW5nIHZpcnR1YWxpemVkIGd1ZXN0IG1hY2hpbmVzLlxuICAzNzpcdFxuICAzODpcdFx0ICBJZiB1bnN1cmUsIHNheSBOLlxuICAzOTpcdFxuICA0MDpcdGVuZGlmICMgVklSVFVBTElaQVRJT05cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAwNjoxOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MzI0CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMzQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqS1ZNIENvbmZpZ3VyYXRpb24gRGVlcCBEaXZlKioKCkFscmlnaHQsIHNvIHRoZSBpbml0aWFsIGZvY3VzIGlzICpjbGVhcmx5KiBLVk0g4oCTIGl0JiMzOTtzIHRoZSBhbmNob3IgcG9pbnQsIHRoZSBjZW50cmFsIGNvbmZpZ3VyYXRpb24gd2UmIzM5O3JlIHdvcmtpbmcgd2l0aCBoZXJlLiBUaGF0JiMzOTtzIHRoZSBmb3VuZGF0aW9uLiBOb3csIGdpdmVuIHRoYXQsIG15IG5leHQgbGluZSBvZiBpbnF1aXJ5IGhhcyB0byBiZSB0YXJnZXRlZC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaWYgdGhlcmUgYXJlIGFueSAqc3BlY2lmaWMqIGNvbmZpZ3VyYXRpb25zIG9yIGhvb2tzIHJlbGV2YW50IHRvIHRoZSBBSUEgKEFkdmFuY2VkIEludGVycnVwdCBBcmNoaXRlY3R1cmUpIHN1YnN5c3RlbSB3aXRoaW4gdGhlIEtWTSBmcmFtZXdvcmsuIEkgc2hvdWxkIGltbWVkaWF0ZWx5IHplcm8gaW4gb24gYGFpYV9kZXZpY2UuY2AuIElmIEFJQSBoYXMgYW55IGN1c3RvbSBkZXZpY2Utc3BlY2lmaWMgY29uZmlndXJhdGlvbiBpdCB3b3VsZCBtb3N0IGxpa2VseSBiZSBpbiB0aGF0IGZpbGUuIEkmIzM5O20gbG9va2luZyBmb3IgYW55dGhpbmcgYmV5b25kIHRoZSBiYXNlIEtWTSBzZXR1cCDigJMgc3BlY2lmaWMgcmVnaXN0ZXIgYXNzaWdubWVudHMsIGludGVycnVwdCBoYW5kbGluZywgYW55dGhpbmcgdGhhdCBkaXZlcmdlcyBmcm9tIHRoZSBzdGFuZGFyZCBLVk0gZGV2aWNlIGltcGxlbWVudGF0aW9uIGFuZCBpcyBBSUEtcmVsYXRlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAwNjoxOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDthaWFfZGV2aWNlLm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3Jpc2N2L2t2bS9NYWtlZmlsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3Jpc2N2L2t2bS9NYWtlZmlsZT0xND1rdm0teSAmIzQzOz0gYWlhX2FwbGljLm9cbmFyY2gvcmlzY3Yva3ZtL01ha2VmaWxlOjE1Omt2bS15ICYjNDM7PSBhaWFfZGV2aWNlLm9cbmFyY2gvcmlzY3Yva3ZtL01ha2VmaWxlLTE2LWt2bS15ICYjNDM7PSBhaWFfaW1zaWMub1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDA2OjE5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU2NTUKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAxNDcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIEtWTSBBSUEgQ29tcGlsYXRpb24qKgoKT2theSwgc28gdGhpcyBjb2RlIGlzIGRlZmluaXRlbHkgYmVpbmcgY29tcGlsZWQgdW5jb25kaXRpb25hbGx5IHdoZW4gS1ZNIChLZXJuZWwtYmFzZWQgVmlydHVhbCBNYWNoaW5lKSBpcyBlbmFibGVkLiBUaGF0JiMzOTtzIHRoZSBzdGFydGluZyBwb2ludC4gTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gZGlnIGludG8gKndoYXQqIGlzIGJlaW5nIG1vZGlmaWVkIG9yIGluY2x1ZGVkIGdpdmVuIHRoZSBLVk0gZGVwZW5kZW5jeS4gTGV0JiMzOTtzIHNlZS4uLiB0aGUgZnVuY3Rpb25zIHRoYXQgc2VlbSB0byBiZSBpbXBhY3RlZCBpbmNsdWRlOiBgYWlhX2NoZWNrX2FkZHJfcmFuZ2VgLCBgYWlhX2FwbGljX2FkZHJgLCBgYWlhX2ltc2ljX2FkZHJgLCBgYWlhX3ZhbGlkYXRlX2FkZHJfcmFuZ2VzYCwgYW5kIGBhaWFfaW5pdGAuIEhtbSwgdGhvc2UgYXJlIGFsbCAqc3RhdGljKiBmdW5jdGlvbnMsIHdoaWNoIGlzIHR5cGljYWwgZm9yIGludGVybmFsIGhlbHBlcnMuIEFuZCB0aGVuIHRoZXJlJiMzOTtzIGBrdm1fdm1faW9jdGxfZW5hYmxlX2NhcGAsIHdoaWNoIGlzICpub24tc3RhdGljKiwgYW5kIHJlc2lkaW5nIGluIGBhcmNoL3Jpc2N2L2t2bS92bS5jYC4gVGhhdCBmdW5jdGlvbiYjMzk7cyBkZWZpbml0ZWx5IGludGVyZXN0aW5nIGJlY2F1c2UgaXQmIzM5O3MgKm5vdCogc3RhdGljLCBzbyBpdCYjMzk7cyBsaWtlbHkgYSBwdWJsaWMgZW50cnkgcG9pbnQuCgpCdXQgdGhlIHBsb3QgdGhpY2tlbnMuLi4gaXMgYGFpYV9pbml0YCBwYXJ0IG9mIHRoZSBLVk0gaW5pdGlhbGl6YXRpb24gc2VxdWVuY2U/IExldCBtZSBzZWUuIEkgcmVjYWxsIGEgZnVuY3Rpb24gaW4gdGhlIGNvZGUgdGhhdCBoYW5kbGVzIGluaXRpYWxpemF0aW9uLCBsaWtlIGBrdm1fcmlzY3ZfYWlhX2luaXRgLiBOZWVkIHRvIGNoZWNrIGBhaWFfZGV2aWNlLmNgIHRvIHNlZSBpZiB0aGVyZSYjMzk7cyBhIGxpbmsgdGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDA2OjE5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2FpYV9pbml0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC9yaXNjdi9rdm0vYWlhX2RldmljZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvcmlzY3Yva3ZtL2FpYV9kZXZpY2UuYz01Mz1zdGF0aWMgaW50IGFpYV9jb25maWcoc3RydWN0IGt2bSAqa3ZtLCB1bnNpZ25lZCBsb25nIHR5cGUsXG4tLVxuYXJjaC9yaXNjdi9rdm0vYWlhX2RldmljZS5jLTU4LVx0LyogV3JpdGVzIGNhbiBvbmx5IGJlIGRvbmUgYmVmb3JlIGlycWNoaXAgaXMgaW5pdGlhbGl6ZWQgKi9cbmFyY2gvcmlzY3Yva3ZtL2FpYV9kZXZpY2UuYzo1OTpcdGlmICh3cml0ZSBcdTAwMjZcdTAwMjYga3ZtX3Jpc2N2X2FpYV9pbml0aWFsaXplZChrdm0pKVxuYXJjaC9yaXNjdi9rdm0vYWlhX2RldmljZS5jLTYwLVx0XHRyZXR1cm4gLUVCVVNZO1xuLS1cbmFyY2gvcmlzY3Yva3ZtL2FpYV9kZXZpY2UuYz0xNjQ9c3RhdGljIGludCBhaWFfYXBsaWNfYWRkcihzdHJ1Y3Qga3ZtICprdm0sIHU2NCAqYWRkciwgYm9vbCB3cml0ZSlcbi0tXG5hcmNoL3Jpc2N2L2t2bS9haWFfZGV2aWNlLmMtMTcwLVx0XHQvKiBXcml0ZXMgY2FuIG9ubHkgYmUgZG9uZSBiZWZvcmUgaXJxY2hpcCBpcyBpbml0aWFsaXplZCAqL1xuYXJjaC9yaXNjdi9rdm0vYWlhX2RldmljZS5jOjE3MTpcdFx0aWYgKGt2bV9yaXNjdl9haWFfaW5pdGlhbGl6ZWQoa3ZtKSlcbmFyY2gvcmlzY3Yva3ZtL2FpYV9kZXZpY2UuYy0xNzItXHRcdFx0cmV0dXJuIC1FQlVTWTtcbi0tXG5hcmNoL3Jpc2N2L2t2bS9haWFfZGV2aWNlLmM9MTg2PXN0YXRpYyBpbnQgYWlhX2ltc2ljX2FkZHIoc3RydWN0IGt2bSAqa3ZtLCB1NjQgKmFkZHIsXG4tLVxuYXJjaC9yaXNjdi9rdm0vYWlhX2RldmljZS5jLTE5OS1cdFx0LyogV3JpdGVzIGNhbiBvbmx5IGJlIGRvbmUgYmVmb3JlIGlycWNoaXAgaXMgaW5pdGlhbGl6ZWQgKi9cbmFyY2gvcmlzY3Yva3ZtL2FpYV9kZXZpY2UuYzoyMDA6XHRcdGlmIChrdm1fcmlzY3ZfYWlhX2luaXRpYWxpemVkKGt2bSkpXG5hcmNoL3Jpc2N2L2t2bS9haWFfZGV2aWNlLmMtMjAxLVx0XHRcdHJldHVybiAtRUJVU1k7XG4tLVxuYXJjaC9yaXNjdi9rdm0vYWlhX2RldmljZS5jPTI3MT1zdGF0aWMgdTMyIGFpYV9pbXNpY19oYXJ0X2luZGV4KHN0cnVjdCBrdm1fYWlhICphaWEsIGdwYV90IGFkZHIpXG4tLVxuYXJjaC9yaXNjdi9rdm0vYWlhX2RldmljZS5jLTI4NC1cbmFyY2gvcmlzY3Yva3ZtL2FpYV9kZXZpY2UuYzoyODU6c3RhdGljIGludCBhaWFfaW5pdChzdHJ1Y3Qga3ZtICprdm0pXG5hcmNoL3Jpc2N2L2t2bS9haWFfZGV2aWNlLmMtMjg2LXtcbi0tXG5hcmNoL3Jpc2N2L2t2bS9haWFfZGV2aWNlLmMtMjk0LVx0LyogSXJxY2hpcCBjYW4gYmUgaW5pdGlhbGl6ZWQgb25seSBvbmNlICovXG5hcmNoL3Jpc2N2L2t2bS9haWFfZGV2aWNlLmM6Mjk1Olx0aWYgKGt2bV9yaXNjdl9haWFfaW5pdGlhbGl6ZWQoa3ZtKSlcbmFyY2gvcmlzY3Yva3ZtL2FpYV9kZXZpY2UuYy0yOTYtXHRcdHJldHVybiAtRUJVU1k7XG4tLVxuYXJjaC9yaXNjdi9rdm0vYWlhX2RldmljZS5jPTM1OT1zdGF0aWMgaW50IGFpYV9zZXRfYXR0cihzdHJ1Y3Qga3ZtX2RldmljZSAqZGV2LCBzdHJ1Y3Qga3ZtX2RldmljZV9hdHRyICphdHRyKVxuLS1cbmFyY2gvcmlzY3Yva3ZtL2FpYV9kZXZpY2UuYy0zOTYtXHRcdFx0bXV0ZXhfbG9jayhcdTAwMjZkZXYtXHUwMDNla3ZtLVx1MDAzZWxvY2spO1xuYXJjaC9yaXNjdi9rdm0vYWlhX2RldmljZS5jOjM5NzpcdFx0XHRyID0gYWlhX2luaXQoZGV2LVx1MDAzZWt2bSk7XG5hcmNoL3Jpc2N2L2t2bS9haWFfZGV2aWNlLmMtMzk4LVx0XHRcdG11dGV4X3VubG9jayhcdTAwMjZkZXYtXHUwMDNla3ZtLVx1MDAzZWxvY2spO1xuLS1cbmFyY2gvcmlzY3Yva3ZtL2FpYV9kZXZpY2UuYz01NTU9aW50IGt2bV9yaXNjdl92Y3B1X2FpYV91cGRhdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuLS1cbmFyY2gvcmlzY3Yva3ZtL2FpYV9kZXZpY2UuYy01NTctXHQvKiBQcm9jZWVkIG9ubHkgaWYgQUlBIHdhcyBpbml0aWFsaXplZCBzdWNjZXNzZnVsbHkgKi9cbmFyY2gvcmlzY3Yva3ZtL2FpYV9kZXZpY2UuYzo1NTg6XHRpZiAoIWt2bV9yaXNjdl9haWFfaW5pdGlhbGl6ZWQodmNwdS1cdTAwM2Vrdm0pKVxuYXJjaC9yaXNjdi9rdm0vYWlhX2RldmljZS5jLTU1OS1cdFx0cmV0dXJuIDE7XG4tLVxuYXJjaC9yaXNjdi9rdm0vYWlhX2RldmljZS5jPTU2NT12b2lkIGt2bV9yaXNjdl92Y3B1X2FpYV9yZXNldChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4tLVxuYXJjaC9yaXNjdi9rdm0vYWlhX2RldmljZS5jLTU3My1cdC8qIFByb2NlZWQgb25seSBpZiBBSUEgd2FzIGluaXRpYWxpemVkIHN1Y2Nlc3NmdWxseSAqL1xuYXJjaC9yaXNjdi9rdm0vYWlhX2RldmljZS5jOjU3NDpcdGlmICgha3ZtX3Jpc2N2X2FpYV9pbml0aWFsaXplZCh2Y3B1LVx1MDAzZWt2bSkpXG5hcmNoL3Jpc2N2L2t2bS9haWFfZGV2aWNlLmMtNTc1LVx0XHRyZXR1cm47XG4tLVxuYXJjaC9yaXNjdi9rdm0vYWlhX2RldmljZS5jLTU4MC1cbmFyY2gvcmlzY3Yva3ZtL2FpYV9kZXZpY2UuYzo1ODE6dm9pZCBrdm1fcmlzY3ZfdmNwdV9haWFfaW5pdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG5hcmNoL3Jpc2N2L2t2bS9haWFfZGV2aWNlLmMtNTgyLXtcbi0tXG5hcmNoL3Jpc2N2L2t2bS9haWFfZGV2aWNlLmMtNTkxLVx0ICpcbmFyY2gvcmlzY3Yva3ZtL2FpYV9kZXZpY2UuYzo1OTI6XHQgKiBSZWZlciwgYWlhX2luaXQoKSBpbXBsZW1lbnRhdGlvbiBmb3IgbW9yZSBkZXRhaWxzLlxuYXJjaC9yaXNjdi9rdm0vYWlhX2RldmljZS5jLTU5My1cdCAqL1xuLS1cbmFyY2gvcmlzY3Yva3ZtL2FpYV9kZXZpY2UuYz02MDA9dm9pZCBrdm1fcmlzY3ZfdmNwdV9haWFfZGVpbml0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbi0tXG5hcmNoL3Jpc2N2L2t2bS9haWFfZGV2aWNlLmMtNjAyLVx0LyogUHJvY2VlZCBvbmx5IGlmIEFJQSB3YXMgaW5pdGlhbGl6ZWQgc3VjY2Vzc2Z1bGx5ICovXG5hcmNoL3Jpc2N2L2t2bS9haWFfZGV2aWNlLmM6NjAzOlx0aWYgKCFrdm1fcmlzY3ZfYWlhX2luaXRpYWxpemVkKHZjcHUtXHUwMDNla3ZtKSlcbmFyY2gvcmlzY3Yva3ZtL2FpYV9kZXZpY2UuYy02MDQtXHRcdHJldHVybjtcbi0tXG5hcmNoL3Jpc2N2L2t2bS9haWFfZGV2aWNlLmM9NjEwPWludCBrdm1fcmlzY3ZfYWlhX2luamVjdF9tc2lfYnlfaWQoc3RydWN0IGt2bSAqa3ZtLCB1MzIgaGFydF9pbmRleCxcbi0tXG5hcmNoL3Jpc2N2L2t2bS9haWFfZGV2aWNlLmMtNjE2LVx0LyogUHJvY2VlZCBvbmx5IGlmIEFJQSB3YXMgaW5pdGlhbGl6ZWQgc3VjY2Vzc2Z1bGx5ICovXG5hcmNoL3Jpc2N2L2t2bS9haWFfZGV2aWNlLmM6NjE3Olx0aWYgKCFrdm1fcmlzY3ZfYWlhX2luaXRpYWxpemVkKGt2bSkpXG5hcmNoL3Jpc2N2L2t2bS9haWFfZGV2aWNlLmMtNjE4LVx0XHRyZXR1cm4gLUVCVVNZO1xuLS1cbmFyY2gvcmlzY3Yva3ZtL2FpYV9kZXZpY2UuYz02MzE9aW50IGt2bV9yaXNjdl9haWFfaW5qZWN0X21zaShzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fbXNpICptc2kpXG4tLVxuYXJjaC9yaXNjdi9rdm0vYWlhX2RldmljZS5jLTY0MC1cdC8qIFByb2NlZWQgb25seSBpZiBBSUEgd2FzIGluaXRpYWxpemVkIHN1Y2Nlc3NmdWxseSAqL1xuYXJjaC9yaXNjdi9rdm0vYWlhX2RldmljZS5jOjY0MTpcdGlmICgha3ZtX3Jpc2N2X2FpYV9pbml0aWFsaXplZChrdm0pKVxuYXJjaC9yaXNjdi9rdm0vYWlhX2RldmljZS5jLTY0Mi1cdFx0cmV0dXJuIC1FQlVTWTtcbi0tXG5hcmNoL3Jpc2N2L2t2bS9haWFfZGV2aWNlLmM9NjY1PWludCBrdm1fcmlzY3ZfYWlhX2luamVjdF9pcnEoc3RydWN0IGt2bSAqa3ZtLCB1bnNpZ25lZCBpbnQgaXJxLCBib29sIGxldmVsKVxuLS1cbmFyY2gvcmlzY3Yva3ZtL2FpYV9kZXZpY2UuYy02NjctXHQvKiBQcm9jZWVkIG9ubHkgaWYgQUlBIHdhcyBpbml0aWFsaXplZCBzdWNjZXNzZnVsbHkgKi9cbmFyY2gvcmlzY3Yva3ZtL2FpYV9kZXZpY2UuYzo2Njg6XHRpZiAoIWt2bV9yaXNjdl9haWFfaW5pdGlhbGl6ZWQoa3ZtKSlcbmFyY2gvcmlzY3Yva3ZtL2FpYV9kZXZpY2UuYy02NjktXHRcdHJldHVybiAtRUJVU1k7XG4tLVxuYXJjaC9yaXNjdi9rdm0vYWlhX2RldmljZS5jLTY3NC1cbmFyY2gvcmlzY3Yva3ZtL2FpYV9kZXZpY2UuYzo2NzU6dm9pZCBrdm1fcmlzY3ZfYWlhX2luaXRfdm0oc3RydWN0IGt2bSAqa3ZtKVxuYXJjaC9yaXNjdi9rdm0vYWlhX2RldmljZS5jLTY3Ni17XG4tLVxuYXJjaC9yaXNjdi9rdm0vYWlhX2RldmljZS5jLTY4NS1cdCAqXG5hcmNoL3Jpc2N2L2t2bS9haWFfZGV2aWNlLmM6Njg2Olx0ICogUmVmZXIsIGFpYV9pbml0KCkgaW1wbGVtZW50YXRpb24gZm9yIG1vcmUgZGV0YWlscy5cbmFyY2gvcmlzY3Yva3ZtL2FpYV9kZXZpY2UuYy02ODctXHQgKi9cbi0tXG5hcmNoL3Jpc2N2L2t2bS9haWFfZGV2aWNlLmM9NzAxPXZvaWQga3ZtX3Jpc2N2X2FpYV9kZXN0cm95X3ZtKHN0cnVjdCBrdm0gKmt2bSlcbi0tXG5hcmNoL3Jpc2N2L2t2bS9haWFfZGV2aWNlLmMtNzAzLVx0LyogUHJvY2VlZCBvbmx5IGlmIEFJQSB3YXMgaW5pdGlhbGl6ZWQgc3VjY2Vzc2Z1bGx5ICovXG5hcmNoL3Jpc2N2L2t2bS9haWFfZGV2aWNlLmM6NzA0Olx0aWYgKCFrdm1fcmlzY3ZfYWlhX2luaXRpYWxpemVkKGt2bSkpXG5hcmNoL3Jpc2N2L2t2bS9haWFfZGV2aWNlLmMtNzA1LVx0XHRyZXR1cm47XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDA2OjE5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgxNzIKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiA1NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIHNlZSB3aGF0IHdlJiMzOTt2ZSBnb3QgaGVyZS4KCioqRGVjb25zdHJ1Y3RpbmcgdGhlIEFJQSBBdHRyaWJ1dGUgU2V0dGluZyBQcm9jZXNzKioKCkFscmlnaHQsIHNvIGBhaWFfc2V0X2F0dHJgIGlzIHRoZSBrZXkgZnVuY3Rpb24gdG8gbG9vayBhdC4gU2VlbXMgbGlrZSBpdOKAmXMgYSBjYWxsYmFjaywgc3BlY2lmaWNhbGx5IGZvciBLVk0gZGV2aWNlIGF0dHJpYnV0ZXMuIFRoYXQgaW1tZWRpYXRlbHkgbWFrZXMgbWUgdGhpbmsgYWJvdXQgaG93IHRoZSBBSUEgZGV2aWNlIGlzIG1hbmFnZWQgd2l0aGluIHRoZSBLVk0gZnJhbWV3b3JrLiBUaGUgY29ubmVjdGlvbiB0byBgYWlhX2luaXRgIGZyb20gd2l0aGluIGBhaWFfc2V0X2F0dHJgIHN1Z2dlc3RzIHRoYXQgdGhpcyBpcyB3aGVyZSB0aGUgQUlBIGRldmljZSBpcyBiZWluZyBpbml0aWFsaXplZCBhdCBzb21lIHN0YWdlLiBBbmQgbG9va2luZyBiYWNrLCBpdCBhbGwgc3RhcnRzIHdpdGggdGhlIGRldmljZSBjcmVhdGlvbiB2aWEgYGFpYV9jcmVhdGVgLiBUaGUgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gcGlucG9pbnQgdGhlIEtWTSBkZXZpY2Ugb3BlcmF0aW9ucyBhc3NvY2lhdGVkIHdpdGggdGhlIEFJQSBkZXZpY2UuIEkgbmVlZCB0byBkaWcgaW50byB0aGUgS1ZNIGRldmljZSBvcHMgZm9yIEFJQSB0byBmdWxseSB1bmRlcnN0YW5kIHRoZSBhdHRyaWJ1dGUgc2V0dGluZyBmbG93LiBUaW1lIHRvIGZpbmQgdGhvc2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDA2OjE5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2FpYV9zZXRfYXR0ciYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gvcmlzY3Yva3ZtL2FpYV9kZXZpY2UuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3Jpc2N2L2t2bS9haWFfZGV2aWNlLmM9Mjg1PXN0YXRpYyBpbnQgYWlhX2luaXQoc3RydWN0IGt2bSAqa3ZtKVxuLS1cbmFyY2gvcmlzY3Yva3ZtL2FpYV9kZXZpY2UuYy0zNTgtXG5hcmNoL3Jpc2N2L2t2bS9haWFfZGV2aWNlLmM6MzU5OnN0YXRpYyBpbnQgYWlhX3NldF9hdHRyKHN0cnVjdCBrdm1fZGV2aWNlICpkZXYsIHN0cnVjdCBrdm1fZGV2aWNlX2F0dHIgKmF0dHIpXG5hcmNoL3Jpc2N2L2t2bS9haWFfZGV2aWNlLmMtMzYwLXtcbi0tXG5hcmNoL3Jpc2N2L2t2bS9haWFfZGV2aWNlLmM9NTQ2PXN0cnVjdCBrdm1fZGV2aWNlX29wcyBrdm1fcmlzY3ZfYWlhX2RldmljZV9vcHMgPSB7XG4tLVxuYXJjaC9yaXNjdi9rdm0vYWlhX2RldmljZS5jLTU0OS1cdC5kZXN0cm95ID0gYWlhX2Rlc3Ryb3ksXG5hcmNoL3Jpc2N2L2t2bS9haWFfZGV2aWNlLmM6NTUwOlx0LnNldF9hdHRyID0gYWlhX3NldF9hdHRyLFxuYXJjaC9yaXNjdi9rdm0vYWlhX2RldmljZS5jLTU1MS1cdC5nZXRfYXR0ciA9IGFpYV9nZXRfYXR0cixcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMDY6MTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODcwMAoJCQkJCQkJb3V0cHV0OiA0MQoJCQkJCQkJdGhvdWdodHM6IDIxNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipEaXNzZWN0aW5nIHRoZSBSSVNDLVYgQUlBIEluaXRpYWxpemF0aW9uIEZsb3cqKgoKT2theSwgc28gSSYjMzk7bSB0cnlpbmcgdG8gdHJhY2UgdGhlIGluaXRpYWxpemF0aW9uIHBhdGggZm9yIHRoZSBBSUEgKEFkdmFuY2VkIEludGVycnVwdCBBcmNoaXRlY3R1cmUpIHdpdGhpbiB0aGUgS1ZNIFJJU0MtViBpbXBsZW1lbnRhdGlvbi4gTXkgaW5pdGlhbCB0aG91Z2h0IHdhcyB0aGF0IGBhaWFfc2V0X2F0dHJgIHdhcyB0aGUgcHJpbWFyeSBlbnRyeSBwb2ludCwgcmVtZW1iZXJpbmcgaXQgY2FsbHMgYGFpYV9pbml0YCB1bmRlciB0aGUgYEtWTV9ERVZfUklTQ1ZfQUlBX0NUUkxfSU5JVGAgY29uZGl0aW9uLiBBbmQsIHJpZ2h0LCBgYWlhX3NldF9hdHRyYCBjYW4gYWxzbyBjYWxsIGBhaWFfY29uZmlnYCwgaW4gdHVybiB0cmlnZ2VyaW5nIGNhbGxzIHRvIGBhaWFfYXBsaWNfYWRkcmAgYW5kIGBhaWFfaW1zaWNfYWRkcmAuIEhvd2V2ZXIsIEkganVzdCBjYXVnaHQgbXlzZWxm4oCUYGFpYV9zZXRfYXR0cmAgaXMgYWN0dWFsbHkgYSBzdGF0aWMgZnVuY3Rpb24uIFRoYXQmIzM5O3MgYSBrZXkgZGV0YWlsISBUaGUgKnRydWUqIGVudHJ5IHBvaW50IGlzIGBrdm1fcmlzY3ZfYWlhX2RldmljZV9vcHMuc2V0X2F0dHJgLgoKTm93LCBJIG5lZWQgdG8gem9vbSBvdXQgYSBiaXQgYW5kIGZpZ3VyZSBvdXQgaG93IHRoaXMgaXMgYWxsIGNvbm5lY3RlZCB0byB0aGUgbGFyZ2VyIEtWTSBpbmZyYXN0cnVjdHVyZS4gR2l2ZW4gdGhlIGNvbnRleHQsIEkgc2hvdWxkIHByb2JhYmx5IGJlIGxvb2tpbmcgYXQgYGt2bV92bV9pb2N0bF9lbmFibGVfY2FwYCwgY29uc2lkZXJpbmcgdGhlIHJlY2VudCBjaGFuZ2VzIGluIGBhcmNoL3Jpc2N2L2t2bS92bS5jYC4gQnV0IGhvbGQgb24sIGBrdm1fdm1faW9jdGxfZW5hYmxlX2NhcGAgaXMgYSBnZW5lcmljIEtWTSBBUEkgZnVuY3Rpb24uIFNvLCBJIGhhdmUgdG8gZ28gZGVlcGVyLiBJcyB0aGVyZSBhIHNwZWNpZmljIFJJU0MtViBLVk0gaW9jdGwgb3IgZnVuY3Rpb24gdGhhdCYjMzk7cyByZWxldmFudCBoZXJlPyBMZXQmIzM5O3MgZ28gYmFjayB0byBgYXJjaC9yaXNjdi9rdm0vdm0uY2AgYW5kIGZvY3VzIG9uIGhvdyBga3ZtX3ZtX2lvY3RsX2VuYWJsZV9jYXBgIGlzIGltcGxlbWVudGVkIHdpdGhpbiB0aGUgUklTQy1WIGNvbnRleHQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDA2OjE5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2t2bV92bV9pb2N0bF9lbmFibGVfY2FwJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC9yaXNjdi9rdm0vdm0uYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3Jpc2N2L2t2bS92bS5jPTE3ND1pbnQga3ZtX3ZtX2lvY3RsX2NoZWNrX2V4dGVuc2lvbihzdHJ1Y3Qga3ZtICprdm0sIGxvbmcgZXh0KVxuLS1cbmFyY2gvcmlzY3Yva3ZtL3ZtLmMtMjE0LVxuYXJjaC9yaXNjdi9rdm0vdm0uYzoyMTU6aW50IGt2bV92bV9pb2N0bF9lbmFibGVfY2FwKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9lbmFibGVfY2FwICpjYXApXG5hcmNoL3Jpc2N2L2t2bS92bS5jLTIxNi17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDA2OjE5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk0MzUKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAxNTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIEtWTSBBSUEgRGV2aWNlIEluaXRpYWxpemF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBga3ZtX3ZtX2lvY3RsX2VuYWJsZV9jYXBgIGFzIGEgZ29vZCBqdW1waW5nLW9mZiBwb2ludDsgaXQmIzM5O3MgdGhlIHN0YW5kYXJkIEtWTSBpb2N0bCBoYW5kbGVyIGZvciBgS1ZNX0VOQUJMRV9DQVBgLCB0aGF0IG1ha2VzIHNlbnNlLiBMZXQmIzM5O3Mgc2VlIGlmIEkgY2FuIGdldCBzb21lIGNvbnRleHQgYnkgbG9va2luZyBhdCBBSUEgZGV2aWNlIGluaXRpYWxpemF0aW9uIGFzIGEgd2hvbGUuIGBhaWFfc2V0X2F0dHJgIGNvbWVzIHRvIG1pbmQgYXMgaXQmIzM5O3Mgc29tZXRoaW5nIEkmIzM5O3ZlIHNlZW4gYmVmb3JlLiBBaCwgYnV0IGl0JiMzOTtzIHN0YXRpYyDigJMgdGhhdCBtZWFucyBpdCB3b24mIzM5O3QgaGF2ZSBhIHVuaXF1ZSBzeW1ib2wgYWRkcmVzcyBpZiBpdCYjMzk7cyBpbmxpbmVkLi4uIHVubGVzcyBpdCYjMzk7cyAqbm90KiBpbmxpbmVkLCBhbmQgaXQgc2hvdWxkbiYjMzk7dCBiZSwgYmVjYXVzZSBpdCYjMzk7cyBhc3NpZ25lZCB0byBhIHN0cnVjdCBvZiBmdW5jdGlvbiBwb2ludGVycy4gUmlnaHQuIEhtbSwgYnV0IHRoYXQgJiMzNDtzdGF0aWMmIzM0OyBpcyBzdGlsbCBhIHByb2JsZW0sIEkgbmVlZCBhIG5vbi1zdGF0aWMgZnVuY3Rpb24uCgpPa2F5LCBsZXQmIzM5O3Mgc2VlLi4uIGBrdm1fcmlzY3ZfYWlhX2RldmljZV9vcHNgIGxvb2tzIHByb21pc2luZzsgaXQmIzM5O3MgYSBzdHJ1Y3QgYW5kIHRoYXQgc3VnZ2VzdHMgaXQgbWlnaHQgaGF2ZSBhc3NvY2lhdGVkIG5vbi1zdGF0aWMgZnVuY3Rpb25zLiBUaW1lIHRvIGRpZyBhIGJpdCBkZWVwZXIgYW5kIHNlZSBpZiBJIGNhbiBpZGVudGlmeSBhbnkgb3RoZXIgcmVsYXRlZCBub24tc3RhdGljIGZ1bmN0aW9ucyBpbnZvbHZlZCBpbiBBSUEgZGV2aWNlIGNyZWF0aW9uIHdpdGhpbiB0aGUgS1ZNIGZyYW1ld29yay4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMDY6MTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7a3ZtX3Jpc2N2X2FpYV9kZXZpY2Vfb3BzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC9yaXNjdi9rdm0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvcmlzY3Yva3ZtL2FpYS5jPTY3Mj1pbnQga3ZtX3Jpc2N2X2FpYV9pbml0KHZvaWQpXG4tLVxuYXJjaC9yaXNjdi9rdm0vYWlhLmMtNjk3LVx0LyogUmVnaXN0ZXIgZGV2aWNlIG9wZXJhdGlvbnMgKi9cbmFyY2gvcmlzY3Yva3ZtL2FpYS5jOjY5ODpcdHJjID0ga3ZtX3JlZ2lzdGVyX2RldmljZV9vcHMoXHUwMDI2a3ZtX3Jpc2N2X2FpYV9kZXZpY2Vfb3BzLFxuYXJjaC9yaXNjdi9rdm0vYWlhLmMtNjk5LVx0XHRcdFx0ICAgICBLVk1fREVWX1RZUEVfUklTQ1ZfQUlBKTtcbi0tXG5hcmNoL3Jpc2N2L2t2bS9haWFfZGV2aWNlLmM9NTAxPXN0YXRpYyBpbnQgYWlhX2hhc19hdHRyKHN0cnVjdCBrdm1fZGV2aWNlICpkZXYsIHN0cnVjdCBrdm1fZGV2aWNlX2F0dHIgKmF0dHIpXG4tLVxuYXJjaC9yaXNjdi9rdm0vYWlhX2RldmljZS5jLTU0NS1cbmFyY2gvcmlzY3Yva3ZtL2FpYV9kZXZpY2UuYzo1NDY6c3RydWN0IGt2bV9kZXZpY2Vfb3BzIGt2bV9yaXNjdl9haWFfZGV2aWNlX29wcyA9IHtcbmFyY2gvcmlzY3Yva3ZtL2FpYV9kZXZpY2UuYy01NDctXHQubmFtZSA9IFwmIzM0O2t2bS1yaXNjdi1haWFcJiMzNDssXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDA2OjE5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwMTU3CgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMTk0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBLVk0gRGV2aWNlIFJlZ2lzdHJhdGlvbiBhbmQgQXR0cmlidXRlIFNldHRpbmcqKgoKT2theSwgc28gSSYjMzk7bSB0cmFjaW5nIHRoaXMgS1ZNIGRldmljZSByZWdpc3RyYXRpb24gcHJvY2Vzcy4gSXQgbG9va3MgbGlrZSBga3ZtX3JlZ2lzdGVyX2RldmljZV9vcHNgIGlzIHdoZXJlIHRoZSBjb3JlIHJlZ2lzdHJhdGlvbiBoYXBwZW5zLCBhcyBleHBlY3RlZC4gVGhlIGFjdHVhbCB1c2VyLWZhY2luZyBlbnRyeSBwb2ludCBhcHBlYXJzIHRvIGJlIHRoZSBgS1ZNX0NSRUFURV9ERVZJQ0VgIGlvY3RsLCB3aGljaCB0aGVuIGNhbGxzIGBrdm1faW9jdGxfY3JlYXRlX2RldmljZWAg4oCTIHJpZ2h0LCBpbiBgdmlydC9rdm0va3ZtX21haW4uY2AuIFRoYXQsIGluIHR1cm4sIGludm9rZXMgdGhlIGBjcmVhdGVgIG9wZXJhdGlvbi4gQW5kLCB0aGUgYEtWTV9TRVRfREVWSUNFX0FUVFJgIGlvY3RsIHRoZW4gdXNlcyB0aGUgYHNldF9hdHRyYCBmdW5jdGlvbi4KCkkgc2VlIHRoYXQgYGFpYV9zZXRfYXR0cmAgaXMgZGVmaW5lZCBhcyBgc3RhdGljYCwgYnV0IGl0cyBhZGRyZXNzIGlzIHN0aWxsIHRha2VuLiBJdCYjMzk7cyBwcm9iYWJseSB2aXNpYmxlIGluIGthbGxzeW1zLCBidXQgaXQmIzM5O3MgcHJvYmFibHkgYmV0dGVyIHRvIGZvY3VzIG9uIHRoZSBga3ZtX3ZtX2lvY3RsX2VuYWJsZV9jYXBgIGZ1bmN0aW9uLCB3aGljaCBpcyBleHBsaWNpdGx5IG1vZGlmaWVkIGFuZCBpc24mIzM5O3QgYHN0YXRpY2AsIHdoaWNoIG1ha2VzIG1vcmUgc2Vuc2UgZm9yIGEgZnVuY3Rpb24gdGhhdCYjMzk7cyBsaWtlbHkgZXhwb3NlZCBvciBpbnRlbmRlZCBmb3IgbWFuaXB1bGF0aW9uLgoKV2FpdCwgYGt2bV92bV9pb2N0bF9lbmFibGVfY2FwYCBpcyBpbiBgYXJjaC9yaXNjdi9rdm0vdm0uY2A/IFRoYXQmIzM5O3MgaW50ZXJlc3RpbmcsIEkgbmVlZCB0byBjaGVjayB0aGUgcmlzY3Ytc3BlY2lmaWMgaW1wbGVtZW50YXRpb24gdG8gdW5kZXJzdGFuZCBob3cgdGhpcyBpcyBoYW5kbGVkLiBMZXQmIzM5O3MgZGVsdmUgaW50byBgYXJjaC9yaXNjdi9rdm0vdm0uY2AgYW5kIHNlZSB3aGF0IGVsc2UgaXMgcHJlc2VudCB0aGVyZSwgdGhlcmUgbWlnaHQgYmUgb3RoZXIgUklTQy1WIHNwZWNpZmljIGltcGxlbWVudGF0aW9ucyB0byBleGFtaW5lLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAwNjoxOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2FyY2gvcmlzY3Yva3ZtL3ZtLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyMTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDIxMDpcdFx0fVxuIDIxMTpcdFxuIDIxMjpcdFx0cmV0dXJuIHI7XG4gMjEzOlx0fVxuIDIxNDpcdFxuIDIxNTpcdGludCBrdm1fdm1faW9jdGxfZW5hYmxlX2NhcChzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fZW5hYmxlX2NhcCAqY2FwKVxuIDIxNjpcdHtcbiAyMTc6XHRcdGlmIChjYXAtXHUwMDNlZmxhZ3MpXG4gMjE4Olx0XHRcdHJldHVybiAtRUlOVkFMO1xuIDIxOTpcdFxuIDIyMDpcdFx0c3dpdGNoIChjYXAtXHUwMDNlY2FwKSB7XG4gMjIxOlx0XHRjYXNlIEtWTV9DQVBfUklTQ1ZfTVBfU1RBVEVfUkVTRVQ6XG4gMjIyOlx0XHRcdGt2bS1cdTAwM2VhcmNoLm1wX3N0YXRlX3Jlc2V0ID0gdHJ1ZTtcbiAyMjM6XHRcdFx0cmV0dXJuIDA7XG4gMjI0Olx0XHRjYXNlIEtWTV9DQVBfVk1fR1BBX0JJVFM6IHtcbiAyMjU6XHRcdFx0dW5zaWduZWQgbG9uZyBncGFfYml0cyA9IGNhcC1cdTAwM2VhcmdzWzBdO1xuIDIyNjpcdFx0XHR1bnNpZ25lZCBsb25nIG5ld19sZXZlbHM7XG4gMjI3Olx0XHRcdGludCByID0gMDtcbiAyMjg6XHRcbiAyMjk6XHRcdFx0LyogRGVjaWRlIHRhcmdldCBwZ2QgbGV2ZWxzIGZyb20gcmVxdWVzdGVkIGdwYV9iaXRzICovXG4gMjMwOlx0I2lmZGVmIENPTkZJR182NEJJVFxuIDIzMTpcdFx0XHRpZiAoZ3BhX2JpdHMgXHUwMDNjPSA0MSlcbiAyMzI6XHRcdFx0XHRuZXdfbGV2ZWxzID0gMzsgICAgICAgIC8qIFN2Mzl4NCAqL1xuIDIzMzpcdFx0XHRlbHNlIGlmIChncGFfYml0cyBcdTAwM2M9IDUwKVxuIDIzNDpcdFx0XHRcdG5ld19sZXZlbHMgPSA0OyAgICAgICAgLyogU3Y0OHg0ICovXG4gMjM1Olx0XHRcdGVsc2UgaWYgKGdwYV9iaXRzIFx1MDAzYz0gNTkpXG4gMjM2Olx0XHRcdFx0bmV3X2xldmVscyA9IDU7ICAgICAgICAvKiBTdjU3eDQgKi9cbiAyMzc6XHRcdFx0ZWxzZVxuIDIzODpcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuIDIzOTpcdCNlbHNlXG4gMjQwOlx0XHRcdC8qIDMyLWJpdDogb25seSBTdjMyeDQqL1xuIDI0MTpcdFx0XHRpZiAoZ3BhX2JpdHMgXHUwMDNjPSAzNClcbiAyNDI6XHRcdFx0XHRuZXdfbGV2ZWxzID0gMjtcbiAyNDM6XHRcdFx0ZWxzZVxuIDI0NDpcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuIDI0NTpcdCNlbmRpZlxuIDI0NjpcdFx0XHRpZiAobmV3X2xldmVscyBcdTAwM2Uga3ZtX3Jpc2N2X2dzdGFnZV9tYXhfcGdkX2xldmVscylcbiAyNDc6XHRcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiAyNDg6XHRcbiAyNDk6XHRcdFx0LyogRm9sbG93IEtWTSYjMzk7cyBsb2NrIG9yZGVyaW5nOiBrdm0tXHUwMDNlbG9jayAtXHUwMDNlIGt2bS1cdTAwM2VzbG90c19sb2NrLiAqL1xuIDI1MDpcdFx0XHRtdXRleF9sb2NrKFx1MDAyNmt2bS1cdTAwM2Vsb2NrKTtcbiAyNTE6XHRcdFx0bXV0ZXhfbG9jayhcdTAwMjZrdm0tXHUwMDNlc2xvdHNfbG9jayk7XG4gMjUyOlx0XG4gMjUzOlx0XHRcdGlmIChrdm0tXHUwMDNlY3JlYXRlZF92Y3B1cyB8fCAha3ZtX2FyZV9hbGxfbWVtc2xvdHNfZW1wdHkoa3ZtKSB8fFxuIDI1NDpcdFx0XHQgICAga3ZtX3Jpc2N2X2FpYV9pbml0aWFsaXplZChrdm0pKVxuIDI1NTpcdFx0XHRcdHIgPSAtRUJVU1k7XG4gMjU2Olx0XHRcdGVsc2VcbiAyNTc6XHRcdFx0XHRrdm0tXHUwMDNlYXJjaC5wZ2RfbGV2ZWxzID0gbmV3X2xldmVscztcbiAyNTg6XHRcbiAyNTk6XHRcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNmt2bS1cdTAwM2VzbG90c19sb2NrKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMDY6MTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE0ODYKCQkJCQkJCW91dHB1dDogNTYKCQkJCQkJCXRob3VnaHRzOiAxNjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBBSUEgSW5pdGlhbGl6YXRpb24gQ2hhbmdlcyoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIG1ha2luZyBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBzcGVjaWZpY2FsbHkgYWRkaW5nIGEgYGt2bV9yaXNjdl9haWFfaW5pdGlhbGl6ZWQoa3ZtKWAgY2hlY2sgd2l0aGluIGBrdm1fdm1faW9jdGxfZW5hYmxlX2NhcGAuIFRoZSBrZXkgdGFrZWF3YXkgaXMgcHJldmVudGluZyBtb2RpZmljYXRpb25zIHRvIGBwZ2RfbGV2ZWxzYCBvbmNlIHRoZSBBSUEgKEFkdmFuY2VkIEludGVycnVwdCBBcmNoaXRlY3R1cmUpIGhhcyBiZWVuIGluaXRpYWxpemVkLiBUaGF0JiMzOTtzIGEgc29saWQsIHRhcmdldGVkIGFwcHJvYWNoIHRvIG1haW50YWluIHN5c3RlbSBpbnRlZ3JpdHkgYWZ0ZXIgYSBjcml0aWNhbCBwb2ludC4KCkJleW9uZCB0aGF0LCBJIHNlZSB0aGUgYWRkaXRpb24gb2YgYGFpYV9jaGVja19hZGRyX3JhbmdlYCBhbmQgYGFpYV92YWxpZGF0ZV9hZGRyX3Jhbmdlc2AgaW4gYGFpYV9kZXZpY2UuY2AuIFRoZXNlIGFyZSBjcnVjaWFsLCBvYnZpb3VzbHksIGZvciBhZGRyZXNzIHJhbmdlIHZhbGlkYXRpb24gYW5kIGFyZSBzdWJzZXF1ZW50bHkgYmVpbmcgY2FsbGVkIGZyb20gc2V2ZXJhbCBvdGhlciBmdW5jdGlvbnMsIG5hbWVseSBgYWlhX2FwbGljX2FkZHJgLCBgYWlhX2ltc2ljX2FkZHJgLCBhbmQgYGFpYV9pbml0YC4gU2luY2UgdGhleSBhcmUgc3RhdGljLCB0aGV5IHdvbiYjMzk7dCBzaG93IHVwIGluIHRoZSBgRm9jdXNTeW1ib2xzYCwgYnV0IHRoYXQgaXMgZXhwZWN0ZWQuCgpIbW0sIGxldCYjMzk7cyBzZWUsIGBrdm1fdm1faW9jdGxfZW5hYmxlX2NhcGAgaXMgYSBnb29kIHNwb3QgZm9yIGluc3BlY3Rpb24uIEFyZSB0aGVyZSBhbnkgb3RoZXIgbm9uLXN0YXRpYyBmdW5jdGlvbnMgd2l0aGluIGBhaWFfZGV2aWNlLmNgIHRoYXQgbWlnaHQgYmUgd29ydGggY29uc2lkZXJpbmc/IEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgdGhlIGNvZGViYXNlIHRvIHZlcmlmeS4gSSBuZWVkIHRvIGJlIHN1cmUgdGhhdCBJIGFtIG5vdCBtaXNzaW5nIGFueXRoaW5nIHRoYXQgbWlnaHQgYWxzbyBpbXBhY3QgaG93IHRoaXMgY2hhbmdlIG9wZXJhdGVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAwNjoxOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDteW2EtekEtWjAtOV9dJiM0MzsgW2EtekEtWjAtOV9dJiM0MztcXCgmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3Jpc2N2L2t2bS9haWFfZGV2aWNlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9yaXNjdi9rdm0vYWlhX2RldmljZS5jPTU0Nj1zdHJ1Y3Qga3ZtX2RldmljZV9vcHMga3ZtX3Jpc2N2X2FpYV9kZXZpY2Vfb3BzID0ge1xuLS1cbmFyY2gvcmlzY3Yva3ZtL2FpYV9kZXZpY2UuYy01NTQtXG5hcmNoL3Jpc2N2L2t2bS9haWFfZGV2aWNlLmM6NTU1OmludCBrdm1fcmlzY3ZfdmNwdV9haWFfdXBkYXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbmFyY2gvcmlzY3Yva3ZtL2FpYV9kZXZpY2UuYy01NTYte1xuLS1cbmFyY2gvcmlzY3Yva3ZtL2FpYV9kZXZpY2UuYy01NjQtXG5hcmNoL3Jpc2N2L2t2bS9haWFfZGV2aWNlLmM6NTY1OnZvaWQga3ZtX3Jpc2N2X3ZjcHVfYWlhX3Jlc2V0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbmFyY2gvcmlzY3Yva3ZtL2FpYV9kZXZpY2UuYy01NjYte1xuLS1cbmFyY2gvcmlzY3Yva3ZtL2FpYV9kZXZpY2UuYy01ODAtXG5hcmNoL3Jpc2N2L2t2bS9haWFfZGV2aWNlLmM6NTgxOnZvaWQga3ZtX3Jpc2N2X3ZjcHVfYWlhX2luaXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuYXJjaC9yaXNjdi9rdm0vYWlhX2RldmljZS5jLTU4Mi17XG4tLVxuYXJjaC9yaXNjdi9rdm0vYWlhX2RldmljZS5jLTU5OS1cbmFyY2gvcmlzY3Yva3ZtL2FpYV9kZXZpY2UuYzo2MDA6dm9pZCBrdm1fcmlzY3ZfdmNwdV9haWFfZGVpbml0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbmFyY2gvcmlzY3Yva3ZtL2FpYV9kZXZpY2UuYy02MDEte1xuLS1cbmFyY2gvcmlzY3Yva3ZtL2FpYV9kZXZpY2UuYy02MDktXG5hcmNoL3Jpc2N2L2t2bS9haWFfZGV2aWNlLmM6NjEwOmludCBrdm1fcmlzY3ZfYWlhX2luamVjdF9tc2lfYnlfaWQoc3RydWN0IGt2bSAqa3ZtLCB1MzIgaGFydF9pbmRleCxcbmFyY2gvcmlzY3Yva3ZtL2FpYV9kZXZpY2UuYy02MTEtXHRcdFx0XHQgICB1MzIgZ3Vlc3RfaW5kZXgsIHUzMiBpaWQpXG4tLVxuYXJjaC9yaXNjdi9rdm0vYWlhX2RldmljZS5jLTYzMC1cbmFyY2gvcmlzY3Yva3ZtL2FpYV9kZXZpY2UuYzo2MzE6aW50IGt2bV9yaXNjdl9haWFfaW5qZWN0X21zaShzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fbXNpICptc2kpXG5hcmNoL3Jpc2N2L2t2bS9haWFfZGV2aWNlLmMtNjMyLXtcbi0tXG5hcmNoL3Jpc2N2L2t2bS9haWFfZGV2aWNlLmMtNjY0LVxuYXJjaC9yaXNjdi9rdm0vYWlhX2RldmljZS5jOjY2NTppbnQga3ZtX3Jpc2N2X2FpYV9pbmplY3RfaXJxKHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgaW50IGlycSwgYm9vbCBsZXZlbClcbmFyY2gvcmlzY3Yva3ZtL2FpYV9kZXZpY2UuYy02NjYte1xuLS1cbmFyY2gvcmlzY3Yva3ZtL2FpYV9kZXZpY2UuYy02NzQtXG5hcmNoL3Jpc2N2L2t2bS9haWFfZGV2aWNlLmM6Njc1OnZvaWQga3ZtX3Jpc2N2X2FpYV9pbml0X3ZtKHN0cnVjdCBrdm0gKmt2bSlcbmFyY2gvcmlzY3Yva3ZtL2FpYV9kZXZpY2UuYy02NzYte1xuLS1cbmFyY2gvcmlzY3Yva3ZtL2FpYV9kZXZpY2UuYy03MDAtXG5hcmNoL3Jpc2N2L2t2bS9haWFfZGV2aWNlLmM6NzAxOnZvaWQga3ZtX3Jpc2N2X2FpYV9kZXN0cm95X3ZtKHN0cnVjdCBrdm0gKmt2bSlcbmFyY2gvcmlzY3Yva3ZtL2FpYV9kZXZpY2UuYy03MDIte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAwNjoxOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjgwNAoJCQkJCQkJb3V0cHV0OiA0MgoJCQkJCQkJdGhvdWdodHM6IDM0NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiBBSUEgRGV2aWNlIEluaXRpYWxpemF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gdHJhY2luZyB0aGUgaW5pdGlhbGl6YXRpb24gYW5kIGF0dHJpYnV0ZSBzZXR0aW5nIGZvciB0aGUgQUlBIGRldmljZSwgYW5kIGl0IHNlZW1zIGxpa2UgdGhlIGtleSBpcyByZWFsbHkgYnVyaWVkIHdpdGhpbiB0aGUgYGFpYV9kZXZpY2UuY2AgZmlsZS4gTm9uZSBvZiB0aGUgZnVuY3Rpb25zICp3aXRoaW4qIHRoYXQgZmlsZSBhcmUgZGlyZWN0bHkgY2FsbGVkIGZyb20gb3V0c2lkZSwgd2hpY2ggaXMgYWx3YXlzIGEgcGFpbi4gVGhleSBhcmUgc3RhdGljLiBCdXQgSSYjMzk7dmUgZ290IGl0LgoKYGFpYV9pbml0YCBzZWVtcyB0byBiZSB0aGUgY3JpdGljYWwgZW50cnkgcG9pbnQgd2l0aGluIGBhaWFfZGV2aWNlLmNgLCBhbmQgdGhhdCYjMzk7cyB0cmlnZ2VyZWQgZnJvbSBgYWlhX3NldF9hdHRyYC4gQW5kICp0aGF0KiBmdW5jdGlvbiwgaW4gdHVybiwgaXMgaW52b2tlZCB3aGVuIGEgYEtWTV9TRVRfREVWSUNFX0FUVFJgIGlvY3RsIGlzIGlzc3VlZC4gVGhpcyBpcyB0aGUgcm9vdCEgVGhlIHNhbWUgZ29lcyBmb3IgYGFpYV9hcGxpY19hZGRyYCBhbmQgYGFpYV9pbXNpY19hZGRyYCwgd2hpY2ggYXJlIGludm9rZWQgd2l0aGluIGBhaWFfY29uZmlnYC4gVGhpcyBhbGwgdHJhY2tzIGJhY2sgdG8gdGhhdCBgS1ZNX1NFVF9ERVZJQ0VfQVRUUmAgaW9jdGwgb24gdGhlIEFJQSBkZXZpY2UuCgpTbyB0aGUgZ2VuZXJpYyBLVk0gZnVuY3Rpb24gdGhhdCBoYW5kbGVzIGBLVk1fU0VUX0RFVklDRV9BVFRSYCBpcyBga3ZtX2RldmljZV9pb2N0bF9hdHRyYCBpbiBgdmlydC9rdm0va3ZtX21haW4uY2AuIEJ1dCBga3ZtX2RldmljZV9pb2N0bF9hdHRyYCBpcyB0b28gZ2VuZXJpYywgd2hpY2ggaXMgdGhlIHByb2JsZW0gd2l0aCB0aGVzZSBnZW5lcmljIGVudHJ5IHBvaW50cy4gU28gSSYjMzk7bSBub3QgZ29pbmcgdG8gYWRkIGl0LgoKU2luY2UgdGhlIGZ1bmN0aW9ucyBtb2RpZmllZCBpbiBgYWlhX2RldmljZS5jYCBhcmUgYWxsIHN0YXRpYywgSSBjYW4mIzM5O3QganVzdCBsaXN0IHRoZW0gZGlyZWN0bHkuIFRoZXkgYXJlIGludGVybmFsIGFuZCBoaWRkZW4uIE5vdGhpbmcgZWxzZSBpbiBgYWlhX2RldmljZS5jYCBjYW4gYmUgbGlzdGVkLiBIb3dldmVyLCBhIGtleSBwb2ludCBvZiBpbml0aWFsaXphdGlvbiBpcyBga3ZtX3ZtX2lvY3RsX2VuYWJsZV9jYXBgLiBJJiMzOTttIHByZXR0eSBzdXJlIHRoYXQgd2lsbCBnaXZlIG1lIGEgZ29vZCBlbnRyeSBwb2ludC4KCkp1c3QgdG8gYmUgc3VyZSwgSSBuZWVkIHRvIGRvdWJsZS1jaGVjayB0aGUgbmVjZXNzYXJ5IEtWTSBjb25maWd1cmF0aW9uLiBUaGUgYmFzZSBLVk0gY29uZmlndXJhdGlvbiB3aWxsIGJlIGVub3VnaCwgc2luY2UgYEtWTWAgaXRzZWxmIGRlcGVuZHMgb24gYFJJU0NWX1NCSWAgYW5kIGBNTVVgLiBKdXN0IHRvIGJlIHNhZmUsIEkmIzM5O20gZ29pbmcgdG8gbG9vayBmb3Igb3RoZXIgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMuIERvZXMgYEtWTV9ERVZfUklTQ1ZfQUlBX0NUUkxfSU5JVGAgaGF2ZSBhbnkgZGVwZW5kZW5jaWVzPwoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAwNjoxOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtLVk1fREVWX1JJU0NWX0FJQV9DVFJMX0lOSVQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3Jpc2N2L2t2bS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9yaXNjdi9rdm0vYWlhX2RldmljZS5jPTM1OT1zdGF0aWMgaW50IGFpYV9zZXRfYXR0cihzdHJ1Y3Qga3ZtX2RldmljZSAqZGV2LCBzdHJ1Y3Qga3ZtX2RldmljZV9hdHRyICphdHRyKVxuLS1cbmFyY2gvcmlzY3Yva3ZtL2FpYV9kZXZpY2UuYy0zOTQtXHRcdHN3aXRjaCAodHlwZSkge1xuYXJjaC9yaXNjdi9rdm0vYWlhX2RldmljZS5jOjM5NTpcdFx0Y2FzZSBLVk1fREVWX1JJU0NWX0FJQV9DVFJMX0lOSVQ6XG5hcmNoL3Jpc2N2L2t2bS9haWFfZGV2aWNlLmMtMzk2LVx0XHRcdG11dGV4X2xvY2soXHUwMDI2ZGV2LVx1MDAzZWt2bS1cdTAwM2Vsb2NrKTtcbi0tXG5hcmNoL3Jpc2N2L2t2bS9haWFfZGV2aWNlLmM9NTAxPXN0YXRpYyBpbnQgYWlhX2hhc19hdHRyKHN0cnVjdCBrdm1fZGV2aWNlICpkZXYsIHN0cnVjdCBrdm1fZGV2aWNlX2F0dHIgKmF0dHIpXG4tLVxuYXJjaC9yaXNjdi9rdm0vYWlhX2RldmljZS5jLTUyNi1cdFx0c3dpdGNoIChhdHRyLVx1MDAzZWF0dHIpIHtcbmFyY2gvcmlzY3Yva3ZtL2FpYV9kZXZpY2UuYzo1Mjc6XHRcdGNhc2UgS1ZNX0RFVl9SSVNDVl9BSUFfQ1RSTF9JTklUOlxuYXJjaC9yaXNjdi9rdm0vYWlhX2RldmljZS5jLTUyOC1cdFx0XHRyZXR1cm4gMDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMDY6MTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM5MjIKCQkJCQkJCW91dHB1dDogMTMzCgkJCQkJCQl0aG91Z2h0czogMzIzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIEtWTSBSSVNDLVYgQUlBIERldmljZSBDb25maWd1cmF0aW9uIENoYW5nZXMqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gSXQgc2VlbXMgd2UmIzM5O3JlIGxvb2tpbmcgYXQgbW9kaWZpY2F0aW9ucyB3aXRoaW4gYGFpYV9kZXZpY2UuY2AuIEZyb20gd2hhdCBJIGdhdGhlciwgdGhpcyBpcyBkaXJlY3RseSByZWxhdGVkIHRvIEtWTSBjb25maWd1cmF0aW9ucywgc3BlY2lmaWNhbGx5IGNvbmNlcm5pbmcgdGhlIEFJQSBhcmNoaXRlY3R1cmUgZm9yIFJJU0MtVi4KCk15IGFuYWx5c2lzIHJldmVhbHMgYSBzZXJpZXMgb2YgY3J1Y2lhbCBjaGFuZ2VzOgoKMS4gIEEgbmV3IGZ1bmN0aW9uLCBgYWlhX2NoZWNrX2FkZHJfcmFuZ2VgLCBoYXMgYmVlbiBpbnRyb2R1Y2VkLgoyLiAgYGFpYV9hcGxpY19hZGRyYCBoYXMgYmVlbiB1cGRhdGVkIHRvIHV0aWxpemUgdGhpcyBuZXcgdmFsaWRhdGlvbiBjaGVjay4KMy4gIFNpbWlsYXJseSwgYGFpYV9pbXNpY19hZGRyYCBub3cgYWxzbyBsZXZlcmFnZXMgYGFpYV9jaGVja19hZGRyX3JhbmdlYC4KNC4gIEFub3RoZXIgZnVuY3Rpb24sIGBhaWFfdmFsaWRhdGVfYWRkcl9yYW5nZXNgLCBoYXMgYmVlbiBhZGRlZCB0byB0aGUgbWl4Lgo1LiAgYGFpYV9pbml0YCBoYXMgYmVlbiBtb2RpZmllZCB0byBpbmNvcnBvcmF0ZSB0aGUgZnVuY3Rpb25hbGl0eSBvZiBgYWlhX3ZhbGlkYXRlX2FkZHJfcmFuZ2VzYC4KNi4gIEFuZCBpbXBvcnRhbnRseSwgYGt2bV92bV9pb2N0bF9lbmFibGVfY2FwYCBub3cgaW5jbHVkZXMgYSBjaGVjayBmb3IgYGt2bV9yaXNjdl9haWFfaW5pdGlhbGl6ZWQoa3ZtKWAuCgpFc3NlbnRpYWxseSwgdGhlc2UgYXJlIGZ1bmN0aW9uYWwgaW1wcm92ZW1lbnRzIHRvIHRoZSBLVk0gUklTQy1WIEFJQSBkZXZpY2UgY29uZmlndXJhdGlvbiwgcHJpbWFyaWx5IGFpbWVkIGF0IHByZXZlbnRpbmcgaXNzdWVzLiBTcGVjaWZpY2FsbHksIHRoZXkmIzM5O3JlIGRlc2lnbmVkIHRvIHN0b3AgaW52YWxpZCBhZGRyZXNzIHJhbmdlcyBmcm9tIGJlaW5nIHNldCBhbmQgdG8gcHJldmVudCB0aGUgbW9kaWZpY2F0aW9uIG9mIGBwZ2RfbGV2ZWxzYCBhZnRlciBBSUEgaW5pdGlhbGl6YXRpb24uIFRoaXMgaXMgYSB2ZXJ5IHRhcmdldGVkIHNldCBvZiBjaGFuZ2VzLgoKVGhlc2UgY2hhbmdlcyBhcmUgY2xlYXJseSBjcml0aWNhbCBmcm9tIGEgc2VjdXJpdHkgc3RhbmRwb2ludC4gR2l2ZW4gdGhhdCB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIEtWTSwgd2hpY2ggaXMgYSBrZXkgY29tcG9uZW50IGZvciB2aXJ0dWFsaXphdGlvbiwgdGhlc2UgZnVuY3Rpb25hbCBjaGFuZ2VzIHdhcnJhbnQgdGhvcm91Z2ggZnV6emluZy4gTXkgcHJpbWFyeSBmb2N1cyB3aWxsIGJlIG9uIGBrdm1fdm1faW9jdGxfZW5hYmxlX2NhcGAuIFRoZSBjb25maWd1cmF0aW9uIGNvbnRleHQgaXMgYEtWTWAuIEkgbmVlZCB0byBlbnN1cmUgdGhhdCB0aGUgbmV3IHZhbGlkYXRpb24gbG9naWMgaGFuZGxlcyBhbGwgcG9zc2libGUgZWRnZSBjYXNlcyB3aGVuIGludGVyYWN0aW5nIHdpdGggdGhlc2UgaW9jdGwgaGFuZGxlcnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDA2OjIwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtLVk0mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtrdm1fdm1faW9jdGxfZW5hYmxlX2NhcCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGFkZHJlc3MgcmFuZ2UgdmFsaWRhdGlvbiBmb3IgdGhlIFJJU0MtViBBSUEgKEFkdmFuY2VkIEludGVycnVwdCBBcmNoaXRlY3R1cmUpIEtWTSBkZXZpY2UgYW5kIHByZXZlbnRzIGNoYW5naW5nIHRoZSBWTSYjMzk7cyBwZ2RfbGV2ZWxzIGFmdGVyIHRoZSBBSUEgZGV2aWNlIGhhcyBiZWVuIGluaXRpYWxpemVkLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHJlYWNoYWJsZSBLVk0gaW9jdGwgaGFuZGxlcnMgKEtWTV9TRVRfREVWSUNFX0FUVFIgYW5kIEtWTV9FTkFCTEVfQ0FQKSBhbmQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgdGhlIG5ldyB2YWxpZGF0aW9uIGxvZ2ljIGhhbmRsZXMgYWxsIGVkZ2UgY2FzZXMgY29ycmVjdGx5LiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtLVk0mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtrdm1fdm1faW9jdGxfZW5hYmxlX2NhcCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGFkZHJlc3MgcmFuZ2UgdmFsaWRhdGlvbiBmb3IgdGhlIFJJU0MtViBBSUEgKEFkdmFuY2VkIEludGVycnVwdCBBcmNoaXRlY3R1cmUpIEtWTSBkZXZpY2UgYW5kIHByZXZlbnRzIGNoYW5naW5nIHRoZSBWTSYjMzk7cyBwZ2RfbGV2ZWxzIGFmdGVyIHRoZSBBSUEgZGV2aWNlIGhhcyBiZWVuIGluaXRpYWxpemVkLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHJlYWNoYWJsZSBLVk0gaW9jdGwgaGFuZGxlcnMgKEtWTV9TRVRfREVWSUNFX0FUVFIgYW5kIEtWTV9FTkFCTEVfQ0FQKSBhbmQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgdGhlIG5ldyB2YWxpZGF0aW9uIGxvZ2ljIGhhbmRsZXMgYWxsIGVkZ2UgY2FzZXMgY29ycmVjdGx5LiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAwNjoyMDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDA2OjIwPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYm91bmRzIGNoZWNraW5nLCBvdmVyZmxvdyBwcmV2ZW50aW9uLCBhbmQgc3RhdGUgdmFsaWRhdGlvbiBmb3IgUklTQy1WIEtWTSBBSUEgKEFkdmFuY2VkIEludGVycnVwdCBBcmNoaXRlY3R1cmUpIGRldmljZSBhZGRyZXNzZXMgKEFQTElDIGFuZCBJTVNJQykuIEl0IGVuc3VyZXMgdGhhdCB0aGUgY29uZmlndXJlZCBndWVzdCBwaHlzaWNhbCBhZGRyZXNzZXMgZG8gbm90IG92ZXJmbG93IGFuZCBmaXQgd2l0aGluIHRoZSBndWVzdCBzdGFnZSBwYWdlIHRhYmxlIHNpemUuIFRoZXNlIGNoYW5nZXMgYWRkcmVzcyBwb3RlbnRpYWwgb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyBvciBpbnZhbGlkIGNvbmZpZ3VyYXRpb25zLCB3aGljaCBhcmUgdHlwaWNhbGx5IGNhdWdodCBieSBLQVNBTiBvciBzdGFuZGFyZCBrZXJuZWwgY2hlY2tzLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgc3RydWN0dXJlcyBjb3BpZWQgdG8gdXNlciBzcGFjZSwgbm9yIGRvZXMgaXQgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSBvciBpbmZvLWxlYWtzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGIwNjQxYzc3YmFhM2RlZDAzOTRhMzg2NjA2YTZiZThhM2I5Zjc1ODYKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgV2VkIEF1ZyAxMiAwNjoxOTowNyAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2FyY2gvcmlzY3Yva3ZtL2FpYV9kZXZpY2UuYyBiL2FyY2gvcmlzY3Yva3ZtL2FpYV9kZXZpY2UuYwppbmRleCBlZmM3YzBiY2ZiYTkyLi5lOTY5ZGJkYzRiOTcxIDEwMDY0NAotLS0gYS9hcmNoL3Jpc2N2L2t2bS9haWFfZGV2aWNlLmMKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9yaXNjdi9rdm0vYWlhX2RldmljZS5jCkBAIC0xMCw3ICYjNDM7MTAsOSBAQAogI2luY2x1ZGUgJmx0O2xpbnV4L2JpdHMuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9pcnFjaGlwL3Jpc2N2LWltc2ljLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgva3ZtX2hvc3QuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvb3ZlcmZsb3cuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC91YWNjZXNzLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2FzbS9rdm1fZ3N0YWdlLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7YXNtL2t2bV9pc2EuaCZndDsKIAogc3RhdGljIGludCBhaWFfY3JlYXRlKHN0cnVjdCBrdm1fZGV2aWNlICpkZXYsIHUzMiB0eXBlKQpAQCAtMTQyLDE3ICYjNDM7MTQ0LDM3IEBAIHN0YXRpYyBpbnQgYWlhX2NvbmZpZyhzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGxvbmcgdHlwZSwKIAlyZXR1cm4gMDsKIH0KIAomIzQzO3N0YXRpYyBpbnQgYWlhX2NoZWNrX2FkZHJfcmFuZ2Uoc3RydWN0IGt2bSAqa3ZtLCB1NjQgYWRkciwgdTY0IGFsaWdubWVudCwKJiM0MzsJCQkJdTY0IHNpemUpCiYjNDM7ewomIzQzOwl1NjQgZW5kOwomIzQzOwomIzQzOwlpZiAoIUlTX0FMSUdORUQoYWRkciwgYWxpZ25tZW50KSkKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwomIzQzOwlpZiAoY2hlY2tfYWRkX292ZXJmbG93KGFkZHIsIHNpemUsICZhbXA7ZW5kKSkKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwomIzQzOwlpZiAoZW5kICZndDsga3ZtX3Jpc2N2X2dzdGFnZV9ncGFfc2l6ZShrdm0tJmd0O2FyY2gucGdkX2xldmVscykpCiYjNDM7CQlyZXR1cm4gLUUyQklHOwomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgaW50IGFpYV9hcGxpY19hZGRyKHN0cnVjdCBrdm0gKmt2bSwgdTY0ICphZGRyLCBib29sIHdyaXRlKQogewogCXN0cnVjdCBrdm1fYWlhICphaWEgPSAmYW1wO2t2bS0mZ3Q7YXJjaC5haWE7CiYjNDM7CWludCByZXQ7CiAKIAlpZiAod3JpdGUpIHsKIAkJLyogV3JpdGVzIGNhbiBvbmx5IGJlIGRvbmUgYmVmb3JlIGlycWNoaXAgaXMgaW5pdGlhbGl6ZWQgKi8KIAkJaWYgKGt2bV9yaXNjdl9haWFfaW5pdGlhbGl6ZWQoa3ZtKSkKIAkJCXJldHVybiAtRUJVU1k7CiAKLQkJaWYgKCphZGRyICZhbXA7IChLVk1fREVWX1JJU0NWX0FQTElDX0FMSUdOIC0gMSkpCi0JCQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJCXJldCA9IGFpYV9jaGVja19hZGRyX3JhbmdlKGt2bSwgKmFkZHIsIEtWTV9ERVZfUklTQ1ZfQVBMSUNfQUxJR04sCiYjNDM7CQkJCQkgICBLVk1fREVWX1JJU0NWX0FQTElDX1NJWkUpOwomIzQzOwkJaWYgKHJldCkKJiM0MzsJCQlyZXR1cm4gcmV0OwogCiAJCWFpYS0mZ3Q7YXBsaWNfYWRkciA9ICphZGRyOwogCX0gZWxzZQpAQCAtMTY2LDYgJiM0MzsxODgsNyBAQCBzdGF0aWMgaW50IGFpYV9pbXNpY19hZGRyKHN0cnVjdCBrdm0gKmt2bSwgdTY0ICphZGRyLAogewogCXN0cnVjdCBrdm1fdmNwdSAqdmNwdTsKIAlzdHJ1Y3Qga3ZtX3ZjcHVfYWlhICp2Y3B1X2FpYTsKJiM0MzsJaW50IHJldDsKIAogCXZjcHUgPSBrdm1fZ2V0X3ZjcHUoa3ZtLCB2Y3B1X2lkeCk7CiAJaWYgKCF2Y3B1KQpAQCAtMTc3LDggJiM0MzsyMDAsMTAgQEAgc3RhdGljIGludCBhaWFfaW1zaWNfYWRkcihzdHJ1Y3Qga3ZtICprdm0sIHU2NCAqYWRkciwKIAkJaWYgKGt2bV9yaXNjdl9haWFfaW5pdGlhbGl6ZWQoa3ZtKSkKIAkJCXJldHVybiAtRUJVU1k7CiAKLQkJaWYgKCphZGRyICZhbXA7IChLVk1fREVWX1JJU0NWX0lNU0lDX0FMSUdOIC0gMSkpCi0JCQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJCXJldCA9IGFpYV9jaGVja19hZGRyX3JhbmdlKGt2bSwgKmFkZHIsIEtWTV9ERVZfUklTQ1ZfSU1TSUNfQUxJR04sCiYjNDM7CQkJCQkgICBLVk1fREVWX1JJU0NWX0lNU0lDX1NJWkUpOwomIzQzOwkJaWYgKHJldCkKJiM0MzsJCQlyZXR1cm4gcmV0OwogCX0KIAogCW11dGV4X2xvY2soJmFtcDt2Y3B1LSZndDttdXRleCk7CkBAIC0xOTEsNiAmIzQzOzIxNiw0MCBAQCBzdGF0aWMgaW50IGFpYV9pbXNpY19hZGRyKHN0cnVjdCBrdm0gKmt2bSwgdTY0ICphZGRyLAogCXJldHVybiAwOwogfQogCiYjNDM7c3RhdGljIGludCBhaWFfdmFsaWRhdGVfYWRkcl9yYW5nZXMoc3RydWN0IGt2bSAqa3ZtKQomIzQzO3sKJiM0MzsJc3RydWN0IGt2bV9haWEgKmFpYSA9ICZhbXA7a3ZtLSZndDthcmNoLmFpYTsKJiM0MzsJc3RydWN0IGt2bV92Y3B1X2FpYSAqdmFpYTsKJiM0MzsJc3RydWN0IGt2bV92Y3B1ICp2Y3B1OwomIzQzOwl1bnNpZ25lZCBsb25nIGlkeDsKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJaWYgKGFpYS0mZ3Q7bnJfc291cmNlcykgewomIzQzOwkJaWYgKGFpYS0mZ3Q7YXBsaWNfYWRkciA9PSBLVk1fUklTQ1ZfQUlBX1VOREVGX0FERFIpCiYjNDM7CQkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CiYjNDM7CQlyZXQgPSBhaWFfY2hlY2tfYWRkcl9yYW5nZShrdm0sIGFpYS0mZ3Q7YXBsaWNfYWRkciwKJiM0MzsJCQkJCSAgIEtWTV9ERVZfUklTQ1ZfQVBMSUNfQUxJR04sCiYjNDM7CQkJCQkgICBLVk1fREVWX1JJU0NWX0FQTElDX1NJWkUpOwomIzQzOwkJaWYgKHJldCkKJiM0MzsJCQlyZXR1cm4gcmV0OwomIzQzOwl9CiYjNDM7CiYjNDM7CWt2bV9mb3JfZWFjaF92Y3B1KGlkeCwgdmNwdSwga3ZtKSB7CiYjNDM7CQl2YWlhID0gJmFtcDt2Y3B1LSZndDthcmNoLmFpYV9jb250ZXh0OwomIzQzOwkJaWYgKHZhaWEtJmd0O2ltc2ljX2FkZHIgPT0gS1ZNX1JJU0NWX0FJQV9VTkRFRl9BRERSKQomIzQzOwkJCXJldHVybiAtRUlOVkFMOwomIzQzOwomIzQzOwkJcmV0ID0gYWlhX2NoZWNrX2FkZHJfcmFuZ2Uoa3ZtLCB2YWlhLSZndDtpbXNpY19hZGRyLAomIzQzOwkJCQkJICAgS1ZNX0RFVl9SSVNDVl9JTVNJQ19BTElHTiwKJiM0MzsJCQkJCSAgIEtWTV9ERVZfUklTQ1ZfSU1TSUNfU0laRSk7CiYjNDM7CQlpZiAocmV0KQomIzQzOwkJCXJldHVybiByZXQ7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwogc3RhdGljIGdwYV90IGFpYV9pbXNpY19wcG4oc3RydWN0IGt2bV9haWEgKmFpYSwgZ3BhX3QgYWRkcikKIHsKIAl1MzIgaCwgbDsKQEAgLTI0NCw5ICYjNDM7MzAzLDkgQEAgc3RhdGljIGludCBhaWFfaW5pdChzdHJ1Y3Qga3ZtICprdm0pCiAJaWYgKGFpYS0mZ3Q7bnJfaWRzICZsdDsgYWlhLSZndDtucl9zb3VyY2VzKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCS8qIEFQTElDIGJhc2UgaXMgcmVxdWlyZWQgZm9yIG5vbi16ZXJvIG51bWJlciBvZiBzb3VyY2VzICovCi0JaWYgKGFpYS0mZ3Q7bnJfc291cmNlcyAmYW1wOyZhbXA7IGFpYS0mZ3Q7YXBsaWNfYWRkciA9PSBLVk1fUklTQ1ZfQUlBX1VOREVGX0FERFIpCi0JCXJldHVybiAtRUlOVkFMOwomIzQzOwlyZXQgPSBhaWFfdmFsaWRhdGVfYWRkcl9yYW5nZXMoa3ZtKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCXJldHVybiByZXQ7CiAKIAkvKiBHcm91cCBpbmRleCBiaXRzIG11c3Qgbm90IG92ZXJsYXAgZ3Vlc3QgYW5kIEhBUlQgaW5kZXggYml0cy4gKi8KIAlpZiAoYWlhLSZndDtucl9ncm91cF9iaXRzICZhbXA7JmFtcDsKQEAgLTI2MywxMiAmIzQzOzMyMiw2IEBAIHN0YXRpYyBpbnQgYWlhX2luaXQoc3RydWN0IGt2bSAqa3ZtKQogCWt2bV9mb3JfZWFjaF92Y3B1KGlkeCwgdmNwdSwga3ZtKSB7CiAJCXZhaWEgPSAmYW1wO3ZjcHUtJmd0O2FyY2guYWlhX2NvbnRleHQ7CiAKLQkJLyogSU1TSUMgYmFzZSBpcyByZXF1aXJlZCAqLwotCQlpZiAodmFpYS0mZ3Q7aW1zaWNfYWRkciA9PSBLVk1fUklTQ1ZfQUlBX1VOREVGX0FERFIpIHsKLQkJCXJldCA9IC1FSU5WQUw7Ci0JCQlnb3RvIGZhaWxfY2xlYW51cF9pbXNpY3M7Ci0JCX0KLQogCQkvKiBBbGwgSU1TSUNzIHNob3VsZCBoYXZlIG1hdGNoaW5nIGJhc2UgUFBOICovCiAJCWlmIChiYXNlX3BwbiA9PSBLVk1fUklTQ1ZfQUlBX1VOREVGX0FERFIpCiAJCQliYXNlX3BwbiA9IGFpYV9pbXNpY19wcG4oYWlhLCB2YWlhLSZndDtpbXNpY19hZGRyKTsKZGlmZiAtLWdpdCBhL2FyY2gvcmlzY3Yva3ZtL3ZtLmMgYi9hcmNoL3Jpc2N2L2t2bS92bS5jCmluZGV4IGE5ZjA4M2ZlZWI3NjcuLjY2ZWRmYWE4NjI0MzUgMTAwNjQ0Ci0tLSBhL2FyY2gvcmlzY3Yva3ZtL3ZtLmMKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9yaXNjdi9rdm0vdm0uYwpAQCAtMjUwLDcgJiM0MzsyNTAsOCBAQCBpbnQga3ZtX3ZtX2lvY3RsX2VuYWJsZV9jYXAoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX2VuYWJsZV9jYXAgKmNhcCkKIAkJbXV0ZXhfbG9jaygmYW1wO2t2bS0mZ3Q7bG9jayk7CiAJCW11dGV4X2xvY2soJmFtcDtrdm0tJmd0O3Nsb3RzX2xvY2spOwogCi0JCWlmIChrdm0tJmd0O2NyZWF0ZWRfdmNwdXMgfHwgIWt2bV9hcmVfYWxsX21lbXNsb3RzX2VtcHR5KGt2bSkpCiYjNDM7CQlpZiAoa3ZtLSZndDtjcmVhdGVkX3ZjcHVzIHx8ICFrdm1fYXJlX2FsbF9tZW1zbG90c19lbXB0eShrdm0pIHx8CiYjNDM7CQkgICAga3ZtX3Jpc2N2X2FpYV9pbml0aWFsaXplZChrdm0pKQogCQkJciA9IC1FQlVTWTsKIAkJZWxzZQogCQkJa3ZtLSZndDthcmNoLnBnZF9sZXZlbHMgPSBuZXdfbGV2ZWxzOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMDY6MjA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzgyMwoJCQkJCQkJb3V0cHV0OiAxNDgKCQkJCQkJCXRob3VnaHRzOiAzNjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgUklTQy1WIEtWTSBBSUEgUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gVGhpcyBwYXRjaCBpcyBmb2N1c2VkIG9uIGhhcmRlbmluZyB0aGUgUklTQy1WIEtWTSBBSUEgZGV2aWNlIGNvZGUsIHNwZWNpZmljYWxseSBieSBhZGRpbmcgcmlnb3JvdXMgYWRkcmVzcyByYW5nZSB2YWxpZGF0aW9uLiBNeSBpbml0aWFsIHJlYWQgdGVsbHMgbWUgaXQmIzM5O3MgYWxsIGFib3V0IGJvdW5kcyBjaGVja2luZywgb3ZlcmZsb3cgcHJvdGVjdGlvbiwgYW5kIGVuc3VyaW5nIHRoZSBpbnRlcm5hbCBzdGF0ZSBpcyBjb25zaXN0ZW50LgoKSSBzZWUgdGhhdCBgYWlhX2NoZWNrX2FkZHJfcmFuZ2VgIGlzIGludHJvZHVjZWQgdG8gdmFsaWRhdGUgYWRkcmVzcyByYW5nZXMgZm9yIGJvdGggdGhlIEFQTElDIGFuZCBJTVNJQyBjb21wb25lbnRzLiBJdCBtZXRpY3Vsb3VzbHkgY2hlY2tzIGZvciBhbGlnbm1lbnQsIHBvdGVudGlhbCBvdmVyZmxvd3MgZHVyaW5nIGNhbGN1bGF0aW9ucywgYW5kIGNydWNpYWxseSwgZW5zdXJlcyB0aGUgZW5kIGFkZHJlc3MgZG9lc24mIzM5O3QgZXhjZWVkIHRoZSBga3ZtX3Jpc2N2X2dzdGFnZV9ncGFfc2l6ZWAuIEkgYWxzbyBub3RpY2UgYGFpYV92YWxpZGF0ZV9hZGRyX3Jhbmdlc2AgaXMgaW1wbGVtZW50ZWQgdG8gaGFuZGxlIHZhbGlkYXRpb24gb2YgKmFsbCogQVBMSUMgYW5kIElNU0lDIGFkZHJlc3NlcyBkdXJpbmcgYGFpYV9pbml0YCwgYWRkaW5nIGZ1cnRoZXIgcHJvYWN0aXZlIG1lYXN1cmVzLiBUaGUgYGt2bV92bV9pb2N0bF9lbmFibGVfY2FwYCBjb2RlIGhhcyBhbHNvIGJlZW4gdXBkYXRlZCB0byByZXR1cm4gYW4gYC1FQlVTWWAgZXJyb3IgaWYgd2UmIzM5O3JlIHRyeWluZyB0byBzZXQgYHBnZF9sZXZlbHNgIHdoaWxlIHRoZSBBSUEgaXMgYWxyZWFkeSBpbml0aWFsaXplZC4KCkFsbCBvZiB0aGVzZSBjaGFuZ2VzIHNjcmVhbSBkZWZlbnNlLWluLWRlcHRoIHRvIG1lLiBUaGUgb2JqZWN0aXZlIGlzIHRvIG1ha2UgS1ZNIGlvY3RscyBtb3JlIHJvYnVzdCBieSBwcmV2ZW50aW5nIGFueSBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzIG9yIGludmFsaWQgY29uZmlndXJhdGlvbnMuIFRoZSB0ZXh0IHNwZWNpZmljYWxseSBzdGF0ZXMgdGhlcmUgYXJlIG5vIG5ldyB1c2VyLXNwYWNlIHN0cnVjdHVyZXMgYW5kIHRoYXQgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLiBFc3NlbnRpYWxseSwgdGhpcyBwYXRjaCBpcyBhYm91dCBzdG9wcGluZyBiYWQgZGF0YSBmcm9tIGNvcnJ1cHRpbmcgdGhlIHZpcnR1YWxpemF0aW9uIGVudmlyb25tZW50LgoKTm93LCBnaXZlbiB0aGUgbmF0dXJlIG9mIHRoZXNlIGNoYW5nZXMsIHRoZSB0ZXh0IHNheXMgdGhhdCBLQVNBTiBhbmQgc3RhbmRhcmQgY2hlY2tzIHNob3VsZCBjYXRjaCB0aGVzZSB0eXBlcyBvZiBidWdzLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgJiMzNDtPa2F5LCB0aGF0IHNlZW1zIGxvZ2ljYWwuJiMzNDsgQnV0LCBJIG5lZWQgdG8gbWFrZSBzdXJlLCBsZXQmIzM5O3MgY29uZmlybSB0aGUgbGFjayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeS4gTGV0JiMzOTtzIGRlbHZlIGluLgoKYGFpYV9jaGVja19hZGRyX3JhbmdlYCBpcyB0aGUgY3JpdGljYWwgZnVuY3Rpb24sIGFuZCBpdCYjMzk7cyB0YWtpbmcgYW4gYGFkZHJgLCBgYWxpZ25tZW50YCwgYW5kIGBzaXplYC4gR29vZCwgaXQgdXNlcyBgY2hlY2tfYWRkX292ZXJmbG93YC4gSXQmIzM5O3MgdXNlZCBieSBgYWlhX2FwbGljX2FkZHJgIGFuZCBgYWlhX2ltc2ljX2FkZHJgIGNhbGxlZCBmcm9tIGlvY3RscyAoS1ZNX1NFVF9ERVZJQ0VfQVRUUi9LVk1fR0VUX0RFVklDRV9BVFRSKS4gVGhlIGBhZGRyYCBhcmd1bWVudCBpcyBwYXNzZWQgYXMgYSBzaW1wbGUgdTY0LiBPa2F5LCBzbyBubyBwb2ludGVycyB0byB1bmluaXRpYWxpemVkIG1lbW9yeSBiZWluZyBsZWFrZWQgdG8gdXNlciBzcGFjZS4KClNvLCBhZnRlciB0aGlzIGRlZXBlciBkaXZlLCBJIGNhbiBjb25jbHVkZSB3aXRoIGNvbmZpZGVuY2UgdGhhdCwgYmFzZWQgb24gbXkgdW5kZXJzdGFuZGluZywgdGhpcyBwYXRjaCBkb2VzICpub3QqIHJlcXVpcmUgTmVlZHNLTVNBTiB0byBiZSB0cnVlLiBJdCYjMzk7cyBhYm91dCBkYXRhIHZhbGlkYXRpb24sIG5vdCBtZW1vcnkgaW5pdGlhbGl6YXRpb24gdnVsbmVyYWJpbGl0aWVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAwNjoyMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGJvdW5kcyBjaGVja2luZywgb3ZlcmZsb3cgcHJldmVudGlvbiwgYW5kIHN0YXRlIHZhbGlkYXRpb24gZm9yIFJJU0MtViBLVk0gQUlBIChBZHZhbmNlZCBJbnRlcnJ1cHQgQXJjaGl0ZWN0dXJlKSBkZXZpY2UgYWRkcmVzc2VzIChBUExJQyBhbmQgSU1TSUMpLiBJdCBlbnN1cmVzIHRoYXQgdGhlIGNvbmZpZ3VyZWQgZ3Vlc3QgcGh5c2ljYWwgYWRkcmVzc2VzIGRvIG5vdCBvdmVyZmxvdyBhbmQgZml0IHdpdGhpbiB0aGUgZ3Vlc3Qgc3RhZ2UgcGFnZSB0YWJsZSBzaXplLiBUaGVzZSBjaGFuZ2VzIGFkZHJlc3MgcG90ZW50aWFsIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMgb3IgaW52YWxpZCBjb25maWd1cmF0aW9ucywgd2hpY2ggYXJlIHR5cGljYWxseSBjYXVnaHQgYnkgS0FTQU4gb3Igc3RhbmRhcmQga2VybmVsIGNoZWNrcy4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IHN0cnVjdHVyZXMgY29waWVkIHRvIHVzZXIgc3BhY2UsIG5vciBkb2VzIGl0IGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgb3IgaW5mby1sZWFrcy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBib3VuZHMgY2hlY2tpbmcsIG92ZXJmbG93IHByZXZlbnRpb24sIGFuZCBzdGF0ZSB2YWxpZGF0aW9uIGZvciBSSVNDLVYgS1ZNIEFJQSAoQWR2YW5jZWQgSW50ZXJydXB0IEFyY2hpdGVjdHVyZSkgZGV2aWNlIGFkZHJlc3NlcyAoQVBMSUMgYW5kIElNU0lDKS4gSXQgZW5zdXJlcyB0aGF0IHRoZSBjb25maWd1cmVkIGd1ZXN0IHBoeXNpY2FsIGFkZHJlc3NlcyBkbyBub3Qgb3ZlcmZsb3cgYW5kIGZpdCB3aXRoaW4gdGhlIGd1ZXN0IHN0YWdlIHBhZ2UgdGFibGUgc2l6ZS4gVGhlc2UgY2hhbmdlcyBhZGRyZXNzIHBvdGVudGlhbCBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzIG9yIGludmFsaWQgY29uZmlndXJhdGlvbnMsIHdoaWNoIGFyZSB0eXBpY2FsbHkgY2F1Z2h0IGJ5IEtBU0FOIG9yIHN0YW5kYXJkIGtlcm5lbCBjaGVja3MuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBzdHJ1Y3R1cmVzIGNvcGllZCB0byB1c2VyIHNwYWNlLCBub3IgZG9lcyBpdCBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IG9yIGluZm8tbGVha3MuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMTJUMDY6MTk6MDguMDU4OTA2NTY1WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjcyNzAzNjA2MTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiS1ZNXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwia3ZtX3ZtX2lvY3RsX2VuYWJsZV9jYXBcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYm91bmRzIGNoZWNraW5nLCBvdmVyZmxvdyBwcmV2ZW50aW9uLCBhbmQgc3RhdGUgdmFsaWRhdGlvbiBmb3IgUklTQy1WIEtWTSBBSUEgKEFkdmFuY2VkIEludGVycnVwdCBBcmNoaXRlY3R1cmUpIGRldmljZSBhZGRyZXNzZXMgKEFQTElDIGFuZCBJTVNJQykuIEl0IGVuc3VyZXMgdGhhdCB0aGUgY29uZmlndXJlZCBndWVzdCBwaHlzaWNhbCBhZGRyZXNzZXMgZG8gbm90IG92ZXJmbG93IGFuZCBmaXQgd2l0aGluIHRoZSBndWVzdCBzdGFnZSBwYWdlIHRhYmxlIHNpemUuIFRoZXNlIGNoYW5nZXMgYWRkcmVzcyBwb3RlbnRpYWwgb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyBvciBpbnZhbGlkIGNvbmZpZ3VyYXRpb25zLCB3aGljaCBhcmUgdHlwaWNhbGx5IGNhdWdodCBieSBLQVNBTiBvciBzdGFuZGFyZCBrZXJuZWwgY2hlY2tzLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgc3RydWN0dXJlcyBjb3BpZWQgdG8gdXNlciBzcGFjZSwgbm9yIGRvZXMgaXQgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSBvciBpbmZvLWxlYWtzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhZGRyZXNzIHJhbmdlIHZhbGlkYXRpb24gZm9yIHRoZSBSSVNDLVYgQUlBIChBZHZhbmNlZCBJbnRlcnJ1cHQgQXJjaGl0ZWN0dXJlKSBLVk0gZGV2aWNlIGFuZCBwcmV2ZW50cyBjaGFuZ2luZyB0aGUgVk0ncyBwZ2RfbGV2ZWxzIGFmdGVyIHRoZSBBSUEgZGV2aWNlIGhhcyBiZWVuIGluaXRpYWxpemVkLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHJlYWNoYWJsZSBLVk0gaW9jdGwgaGFuZGxlcnMgKEtWTV9TRVRfREVWSUNFX0FUVFIgYW5kIEtWTV9FTkFCTEVfQ0FQKSBhbmQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgdGhlIG5ldyB2YWxpZGF0aW9uIGxvZ2ljIGhhbmRsZXMgYWxsIGVkZ2UgY2FzZXMgY29ycmVjdGx5LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQwNjoxOTowOC4wNTg5MTM5OTVaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM4MTM2MDUxMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGIwNjQxYzc3YmFhM2RlZDAzOTRhMzg2NjA2YTZiZThhM2I5Zjc1ODZcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFdlZCBBdWcgMTIgMDY6MTk6MDcgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvYXJjaC9yaXNjdi9rdm0vYWlhX2RldmljZS5jIGIvYXJjaC9yaXNjdi9rdm0vYWlhX2RldmljZS5jXFxuaW5kZXggZWZjN2MwYmNmYmE5Mi4uZTk2OWRiZGM0Yjk3MSAxMDA2NDRcXG4tLS0gYS9hcmNoL3Jpc2N2L2t2bS9haWFfZGV2aWNlLmNcXG4rKysgYi9hcmNoL3Jpc2N2L2t2bS9haWFfZGV2aWNlLmNcXG5AQCAtMTAsNyArMTAsOSBAQFxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvYml0cy5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvaXJxY2hpcC9yaXNjdi1pbXNpYy5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgva3ZtX2hvc3QuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L292ZXJmbG93LmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC91YWNjZXNzLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2Nhc20va3ZtX2dzdGFnZS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjYXNtL2t2bV9pc2EuaFxcdTAwM2VcXG4gXFxuIHN0YXRpYyBpbnQgYWlhX2NyZWF0ZShzdHJ1Y3Qga3ZtX2RldmljZSAqZGV2LCB1MzIgdHlwZSlcXG5AQCAtMTQyLDE3ICsxNDQsMzcgQEAgc3RhdGljIGludCBhaWFfY29uZmlnKHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgbG9uZyB0eXBlLFxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4rc3RhdGljIGludCBhaWFfY2hlY2tfYWRkcl9yYW5nZShzdHJ1Y3Qga3ZtICprdm0sIHU2NCBhZGRyLCB1NjQgYWxpZ25tZW50LFxcbitcXHRcXHRcXHRcXHR1NjQgc2l6ZSlcXG4re1xcbitcXHR1NjQgZW5kO1xcbitcXG4rXFx0aWYgKCFJU19BTElHTkVEKGFkZHIsIGFsaWdubWVudCkpXFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXG4rXFx0aWYgKGNoZWNrX2FkZF9vdmVyZmxvdyhhZGRyLCBzaXplLCBcXHUwMDI2ZW5kKSlcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcbitcXHRpZiAoZW5kIFxcdTAwM2Uga3ZtX3Jpc2N2X2dzdGFnZV9ncGFfc2l6ZShrdm0tXFx1MDAzZWFyY2gucGdkX2xldmVscykpXFxuK1xcdFxcdHJldHVybiAtRTJCSUc7XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4gc3RhdGljIGludCBhaWFfYXBsaWNfYWRkcihzdHJ1Y3Qga3ZtICprdm0sIHU2NCAqYWRkciwgYm9vbCB3cml0ZSlcXG4ge1xcbiBcXHRzdHJ1Y3Qga3ZtX2FpYSAqYWlhID0gXFx1MDAyNmt2bS1cXHUwMDNlYXJjaC5haWE7XFxuK1xcdGludCByZXQ7XFxuIFxcbiBcXHRpZiAod3JpdGUpIHtcXG4gXFx0XFx0LyogV3JpdGVzIGNhbiBvbmx5IGJlIGRvbmUgYmVmb3JlIGlycWNoaXAgaXMgaW5pdGlhbGl6ZWQgKi9cXG4gXFx0XFx0aWYgKGt2bV9yaXNjdl9haWFfaW5pdGlhbGl6ZWQoa3ZtKSlcXG4gXFx0XFx0XFx0cmV0dXJuIC1FQlVTWTtcXG4gXFxuLVxcdFxcdGlmICgqYWRkciBcXHUwMDI2IChLVk1fREVWX1JJU0NWX0FQTElDX0FMSUdOIC0gMSkpXFxuLVxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXHRcXHRyZXQgPSBhaWFfY2hlY2tfYWRkcl9yYW5nZShrdm0sICphZGRyLCBLVk1fREVWX1JJU0NWX0FQTElDX0FMSUdOLFxcbitcXHRcXHRcXHRcXHRcXHQgICBLVk1fREVWX1JJU0NWX0FQTElDX1NJWkUpO1xcbitcXHRcXHRpZiAocmV0KVxcbitcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbiBcXG4gXFx0XFx0YWlhLVxcdTAwM2VhcGxpY19hZGRyID0gKmFkZHI7XFxuIFxcdH0gZWxzZVxcbkBAIC0xNjYsNiArMTg4LDcgQEAgc3RhdGljIGludCBhaWFfaW1zaWNfYWRkcihzdHJ1Y3Qga3ZtICprdm0sIHU2NCAqYWRkcixcXG4ge1xcbiBcXHRzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHU7XFxuIFxcdHN0cnVjdCBrdm1fdmNwdV9haWEgKnZjcHVfYWlhO1xcbitcXHRpbnQgcmV0O1xcbiBcXG4gXFx0dmNwdSA9IGt2bV9nZXRfdmNwdShrdm0sIHZjcHVfaWR4KTtcXG4gXFx0aWYgKCF2Y3B1KVxcbkBAIC0xNzcsOCArMjAwLDEwIEBAIHN0YXRpYyBpbnQgYWlhX2ltc2ljX2FkZHIoc3RydWN0IGt2bSAqa3ZtLCB1NjQgKmFkZHIsXFxuIFxcdFxcdGlmIChrdm1fcmlzY3ZfYWlhX2luaXRpYWxpemVkKGt2bSkpXFxuIFxcdFxcdFxcdHJldHVybiAtRUJVU1k7XFxuIFxcbi1cXHRcXHRpZiAoKmFkZHIgXFx1MDAyNiAoS1ZNX0RFVl9SSVNDVl9JTVNJQ19BTElHTiAtIDEpKVxcbi1cXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFx0XFx0cmV0ID0gYWlhX2NoZWNrX2FkZHJfcmFuZ2Uoa3ZtLCAqYWRkciwgS1ZNX0RFVl9SSVNDVl9JTVNJQ19BTElHTixcXG4rXFx0XFx0XFx0XFx0XFx0ICAgS1ZNX0RFVl9SSVNDVl9JTVNJQ19TSVpFKTtcXG4rXFx0XFx0aWYgKHJldClcXG4rXFx0XFx0XFx0cmV0dXJuIHJldDtcXG4gXFx0fVxcbiBcXG4gXFx0bXV0ZXhfbG9jayhcXHUwMDI2dmNwdS1cXHUwMDNlbXV0ZXgpO1xcbkBAIC0xOTEsNiArMjE2LDQwIEBAIHN0YXRpYyBpbnQgYWlhX2ltc2ljX2FkZHIoc3RydWN0IGt2bSAqa3ZtLCB1NjQgKmFkZHIsXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbitzdGF0aWMgaW50IGFpYV92YWxpZGF0ZV9hZGRyX3JhbmdlcyhzdHJ1Y3Qga3ZtICprdm0pXFxuK3tcXG4rXFx0c3RydWN0IGt2bV9haWEgKmFpYSA9IFxcdTAwMjZrdm0tXFx1MDAzZWFyY2guYWlhO1xcbitcXHRzdHJ1Y3Qga3ZtX3ZjcHVfYWlhICp2YWlhO1xcbitcXHRzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHU7XFxuK1xcdHVuc2lnbmVkIGxvbmcgaWR4O1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0aWYgKGFpYS1cXHUwMDNlbnJfc291cmNlcykge1xcbitcXHRcXHRpZiAoYWlhLVxcdTAwM2VhcGxpY19hZGRyID09IEtWTV9SSVNDVl9BSUFfVU5ERUZfQUREUilcXG4rXFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcbitcXHRcXHRyZXQgPSBhaWFfY2hlY2tfYWRkcl9yYW5nZShrdm0sIGFpYS1cXHUwMDNlYXBsaWNfYWRkcixcXG4rXFx0XFx0XFx0XFx0XFx0ICAgS1ZNX0RFVl9SSVNDVl9BUExJQ19BTElHTixcXG4rXFx0XFx0XFx0XFx0XFx0ICAgS1ZNX0RFVl9SSVNDVl9BUExJQ19TSVpFKTtcXG4rXFx0XFx0aWYgKHJldClcXG4rXFx0XFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0fVxcbitcXG4rXFx0a3ZtX2Zvcl9lYWNoX3ZjcHUoaWR4LCB2Y3B1LCBrdm0pIHtcXG4rXFx0XFx0dmFpYSA9IFxcdTAwMjZ2Y3B1LVxcdTAwM2VhcmNoLmFpYV9jb250ZXh0O1xcbitcXHRcXHRpZiAodmFpYS1cXHUwMDNlaW1zaWNfYWRkciA9PSBLVk1fUklTQ1ZfQUlBX1VOREVGX0FERFIpXFxuK1xcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXG4rXFx0XFx0cmV0ID0gYWlhX2NoZWNrX2FkZHJfcmFuZ2Uoa3ZtLCB2YWlhLVxcdTAwM2VpbXNpY19hZGRyLFxcbitcXHRcXHRcXHRcXHRcXHQgICBLVk1fREVWX1JJU0NWX0lNU0lDX0FMSUdOLFxcbitcXHRcXHRcXHRcXHRcXHQgICBLVk1fREVWX1JJU0NWX0lNU0lDX1NJWkUpO1xcbitcXHRcXHRpZiAocmV0KVxcbitcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4gc3RhdGljIGdwYV90IGFpYV9pbXNpY19wcG4oc3RydWN0IGt2bV9haWEgKmFpYSwgZ3BhX3QgYWRkcilcXG4ge1xcbiBcXHR1MzIgaCwgbDtcXG5AQCAtMjQ0LDkgKzMwMyw5IEBAIHN0YXRpYyBpbnQgYWlhX2luaXQoc3RydWN0IGt2bSAqa3ZtKVxcbiBcXHRpZiAoYWlhLVxcdTAwM2Vucl9pZHMgXFx1MDAzYyBhaWEtXFx1MDAzZW5yX3NvdXJjZXMpXFxuIFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiBcXG4tXFx0LyogQVBMSUMgYmFzZSBpcyByZXF1aXJlZCBmb3Igbm9uLXplcm8gbnVtYmVyIG9mIHNvdXJjZXMgKi9cXG4tXFx0aWYgKGFpYS1cXHUwMDNlbnJfc291cmNlcyBcXHUwMDI2XFx1MDAyNiBhaWEtXFx1MDAzZWFwbGljX2FkZHIgPT0gS1ZNX1JJU0NWX0FJQV9VTkRFRl9BRERSKVxcbi1cXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFx0cmV0ID0gYWlhX3ZhbGlkYXRlX2FkZHJfcmFuZ2VzKGt2bSk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuIFxcbiBcXHQvKiBHcm91cCBpbmRleCBiaXRzIG11c3Qgbm90IG92ZXJsYXAgZ3Vlc3QgYW5kIEhBUlQgaW5kZXggYml0cy4gKi9cXG4gXFx0aWYgKGFpYS1cXHUwMDNlbnJfZ3JvdXBfYml0cyBcXHUwMDI2XFx1MDAyNlxcbkBAIC0yNjMsMTIgKzMyMiw2IEBAIHN0YXRpYyBpbnQgYWlhX2luaXQoc3RydWN0IGt2bSAqa3ZtKVxcbiBcXHRrdm1fZm9yX2VhY2hfdmNwdShpZHgsIHZjcHUsIGt2bSkge1xcbiBcXHRcXHR2YWlhID0gXFx1MDAyNnZjcHUtXFx1MDAzZWFyY2guYWlhX2NvbnRleHQ7XFxuIFxcbi1cXHRcXHQvKiBJTVNJQyBiYXNlIGlzIHJlcXVpcmVkICovXFxuLVxcdFxcdGlmICh2YWlhLVxcdTAwM2VpbXNpY19hZGRyID09IEtWTV9SSVNDVl9BSUFfVU5ERUZfQUREUikge1xcbi1cXHRcXHRcXHRyZXQgPSAtRUlOVkFMO1xcbi1cXHRcXHRcXHRnb3RvIGZhaWxfY2xlYW51cF9pbXNpY3M7XFxuLVxcdFxcdH1cXG4tXFxuIFxcdFxcdC8qIEFsbCBJTVNJQ3Mgc2hvdWxkIGhhdmUgbWF0Y2hpbmcgYmFzZSBQUE4gKi9cXG4gXFx0XFx0aWYgKGJhc2VfcHBuID09IEtWTV9SSVNDVl9BSUFfVU5ERUZfQUREUilcXG4gXFx0XFx0XFx0YmFzZV9wcG4gPSBhaWFfaW1zaWNfcHBuKGFpYSwgdmFpYS1cXHUwMDNlaW1zaWNfYWRkcik7XFxuZGlmZiAtLWdpdCBhL2FyY2gvcmlzY3Yva3ZtL3ZtLmMgYi9hcmNoL3Jpc2N2L2t2bS92bS5jXFxuaW5kZXggYTlmMDgzZmVlYjc2Ny4uNjZlZGZhYTg2MjQzNSAxMDA2NDRcXG4tLS0gYS9hcmNoL3Jpc2N2L2t2bS92bS5jXFxuKysrIGIvYXJjaC9yaXNjdi9rdm0vdm0uY1xcbkBAIC0yNTAsNyArMjUwLDggQEAgaW50IGt2bV92bV9pb2N0bF9lbmFibGVfY2FwKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9lbmFibGVfY2FwICpjYXApXFxuIFxcdFxcdG11dGV4X2xvY2soXFx1MDAyNmt2bS1cXHUwMDNlbG9jayk7XFxuIFxcdFxcdG11dGV4X2xvY2soXFx1MDAyNmt2bS1cXHUwMDNlc2xvdHNfbG9jayk7XFxuIFxcbi1cXHRcXHRpZiAoa3ZtLVxcdTAwM2VjcmVhdGVkX3ZjcHVzIHx8ICFrdm1fYXJlX2FsbF9tZW1zbG90c19lbXB0eShrdm0pKVxcbitcXHRcXHRpZiAoa3ZtLVxcdTAwM2VjcmVhdGVkX3ZjcHVzIHx8ICFrdm1fYXJlX2FsbF9tZW1zbG90c19lbXB0eShrdm0pIHx8XFxuK1xcdFxcdCAgICBrdm1fcmlzY3ZfYWlhX2luaXRpYWxpemVkKGt2bSkpXFxuIFxcdFxcdFxcdHIgPSAtRUJVU1k7XFxuIFxcdFxcdGVsc2VcXG4gXFx0XFx0XFx0a3ZtLVxcdTAwM2VhcmNoLnBnZF9sZXZlbHMgPSBuZXdfbGV2ZWxzO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQwNjoxOTowOC40NDA5MjUwMjVaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo1ODE1ODE4MjI4NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJLVk1cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJrdm1fdm1faW9jdGxfZW5hYmxlX2NhcFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYWRkcmVzcyByYW5nZSB2YWxpZGF0aW9uIGZvciB0aGUgUklTQy1WIEFJQSAoQWR2YW5jZWQgSW50ZXJydXB0IEFyY2hpdGVjdHVyZSkgS1ZNIGRldmljZSBhbmQgcHJldmVudHMgY2hhbmdpbmcgdGhlIFZNJ3MgcGdkX2xldmVscyBhZnRlciB0aGUgQUlBIGRldmljZSBoYXMgYmVlbiBpbml0aWFsaXplZC4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byByZWFjaGFibGUgS1ZNIGlvY3RsIGhhbmRsZXJzIChLVk1fU0VUX0RFVklDRV9BVFRSIGFuZCBLVk1fRU5BQkxFX0NBUCkgYW5kIHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIHRoZSBuZXcgdmFsaWRhdGlvbiBsb2dpYyBoYW5kbGVzIGFsbCBlZGdlIGNhc2VzIGNvcnJlY3RseS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgYjA2NDFjNzdiYWEzZGVkMDM5NGEzODY2MDZhNmJlOGEzYjlmNzU4NlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgQXVnIDEyIDA2OjE5OjA3IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvYXJjaC9yaXNjdi9rdm0vYWlhX2RldmljZS5jIGIvYXJjaC9yaXNjdi9rdm0vYWlhX2RldmljZS5jXG5pbmRleCBlZmM3YzBiY2ZiYTkyLi5lOTY5ZGJkYzRiOTcxIDEwMDY0NFxuLS0tIGEvYXJjaC9yaXNjdi9rdm0vYWlhX2RldmljZS5jXG4rKysgYi9hcmNoL3Jpc2N2L2t2bS9haWFfZGV2aWNlLmNcbkBAIC0xMCw3ICsxMCw5IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvYml0cy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvaXJxY2hpcC9yaXNjdi1pbXNpYy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgva3ZtX2hvc3QuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L292ZXJmbG93LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC91YWNjZXNzLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2Nhc20va3ZtX2dzdGFnZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjYXNtL2t2bV9pc2EuaFx1MDAzZVxuIFxuIHN0YXRpYyBpbnQgYWlhX2NyZWF0ZShzdHJ1Y3Qga3ZtX2RldmljZSAqZGV2LCB1MzIgdHlwZSlcbkBAIC0xNDIsMTcgKzE0NCwzNyBAQCBzdGF0aWMgaW50IGFpYV9jb25maWcoc3RydWN0IGt2bSAqa3ZtLCB1bnNpZ25lZCBsb25nIHR5cGUsXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4rc3RhdGljIGludCBhaWFfY2hlY2tfYWRkcl9yYW5nZShzdHJ1Y3Qga3ZtICprdm0sIHU2NCBhZGRyLCB1NjQgYWxpZ25tZW50LFxuK1x0XHRcdFx0dTY0IHNpemUpXG4re1xuK1x0dTY0IGVuZDtcbitcbitcdGlmICghSVNfQUxJR05FRChhZGRyLCBhbGlnbm1lbnQpKVxuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcbitcdGlmIChjaGVja19hZGRfb3ZlcmZsb3coYWRkciwgc2l6ZSwgXHUwMDI2ZW5kKSlcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXG4rXHRpZiAoZW5kIFx1MDAzZSBrdm1fcmlzY3ZfZ3N0YWdlX2dwYV9zaXplKGt2bS1cdTAwM2VhcmNoLnBnZF9sZXZlbHMpKVxuK1x0XHRyZXR1cm4gLUUyQklHO1xuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuIHN0YXRpYyBpbnQgYWlhX2FwbGljX2FkZHIoc3RydWN0IGt2bSAqa3ZtLCB1NjQgKmFkZHIsIGJvb2wgd3JpdGUpXG4ge1xuIFx0c3RydWN0IGt2bV9haWEgKmFpYSA9IFx1MDAyNmt2bS1cdTAwM2VhcmNoLmFpYTtcbitcdGludCByZXQ7XG4gXG4gXHRpZiAod3JpdGUpIHtcbiBcdFx0LyogV3JpdGVzIGNhbiBvbmx5IGJlIGRvbmUgYmVmb3JlIGlycWNoaXAgaXMgaW5pdGlhbGl6ZWQgKi9cbiBcdFx0aWYgKGt2bV9yaXNjdl9haWFfaW5pdGlhbGl6ZWQoa3ZtKSlcbiBcdFx0XHRyZXR1cm4gLUVCVVNZO1xuIFxuLVx0XHRpZiAoKmFkZHIgXHUwMDI2IChLVk1fREVWX1JJU0NWX0FQTElDX0FMSUdOIC0gMSkpXG4tXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHRcdHJldCA9IGFpYV9jaGVja19hZGRyX3JhbmdlKGt2bSwgKmFkZHIsIEtWTV9ERVZfUklTQ1ZfQVBMSUNfQUxJR04sXG4rXHRcdFx0XHRcdCAgIEtWTV9ERVZfUklTQ1ZfQVBMSUNfU0laRSk7XG4rXHRcdGlmIChyZXQpXG4rXHRcdFx0cmV0dXJuIHJldDtcbiBcbiBcdFx0YWlhLVx1MDAzZWFwbGljX2FkZHIgPSAqYWRkcjtcbiBcdH0gZWxzZVxuQEAgLTE2Niw2ICsxODgsNyBAQCBzdGF0aWMgaW50IGFpYV9pbXNpY19hZGRyKHN0cnVjdCBrdm0gKmt2bSwgdTY0ICphZGRyLFxuIHtcbiBcdHN0cnVjdCBrdm1fdmNwdSAqdmNwdTtcbiBcdHN0cnVjdCBrdm1fdmNwdV9haWEgKnZjcHVfYWlhO1xuK1x0aW50IHJldDtcbiBcbiBcdHZjcHUgPSBrdm1fZ2V0X3ZjcHUoa3ZtLCB2Y3B1X2lkeCk7XG4gXHRpZiAoIXZjcHUpXG5AQCAtMTc3LDggKzIwMCwxMCBAQCBzdGF0aWMgaW50IGFpYV9pbXNpY19hZGRyKHN0cnVjdCBrdm0gKmt2bSwgdTY0ICphZGRyLFxuIFx0XHRpZiAoa3ZtX3Jpc2N2X2FpYV9pbml0aWFsaXplZChrdm0pKVxuIFx0XHRcdHJldHVybiAtRUJVU1k7XG4gXG4tXHRcdGlmICgqYWRkciBcdTAwMjYgKEtWTV9ERVZfUklTQ1ZfSU1TSUNfQUxJR04gLSAxKSlcbi1cdFx0XHRyZXR1cm4gLUVJTlZBTDtcbitcdFx0cmV0ID0gYWlhX2NoZWNrX2FkZHJfcmFuZ2Uoa3ZtLCAqYWRkciwgS1ZNX0RFVl9SSVNDVl9JTVNJQ19BTElHTixcbitcdFx0XHRcdFx0ICAgS1ZNX0RFVl9SSVNDVl9JTVNJQ19TSVpFKTtcbitcdFx0aWYgKHJldClcbitcdFx0XHRyZXR1cm4gcmV0O1xuIFx0fVxuIFxuIFx0bXV0ZXhfbG9jayhcdTAwMjZ2Y3B1LVx1MDAzZW11dGV4KTtcbkBAIC0xOTEsNiArMjE2LDQwIEBAIHN0YXRpYyBpbnQgYWlhX2ltc2ljX2FkZHIoc3RydWN0IGt2bSAqa3ZtLCB1NjQgKmFkZHIsXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4rc3RhdGljIGludCBhaWFfdmFsaWRhdGVfYWRkcl9yYW5nZXMoc3RydWN0IGt2bSAqa3ZtKVxuK3tcbitcdHN0cnVjdCBrdm1fYWlhICphaWEgPSBcdTAwMjZrdm0tXHUwMDNlYXJjaC5haWE7XG4rXHRzdHJ1Y3Qga3ZtX3ZjcHVfYWlhICp2YWlhO1xuK1x0c3RydWN0IGt2bV92Y3B1ICp2Y3B1O1xuK1x0dW5zaWduZWQgbG9uZyBpZHg7XG4rXHRpbnQgcmV0O1xuK1xuK1x0aWYgKGFpYS1cdTAwM2Vucl9zb3VyY2VzKSB7XG4rXHRcdGlmIChhaWEtXHUwMDNlYXBsaWNfYWRkciA9PSBLVk1fUklTQ1ZfQUlBX1VOREVGX0FERFIpXG4rXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXG4rXHRcdHJldCA9IGFpYV9jaGVja19hZGRyX3JhbmdlKGt2bSwgYWlhLVx1MDAzZWFwbGljX2FkZHIsXG4rXHRcdFx0XHRcdCAgIEtWTV9ERVZfUklTQ1ZfQVBMSUNfQUxJR04sXG4rXHRcdFx0XHRcdCAgIEtWTV9ERVZfUklTQ1ZfQVBMSUNfU0laRSk7XG4rXHRcdGlmIChyZXQpXG4rXHRcdFx0cmV0dXJuIHJldDtcbitcdH1cbitcbitcdGt2bV9mb3JfZWFjaF92Y3B1KGlkeCwgdmNwdSwga3ZtKSB7XG4rXHRcdHZhaWEgPSBcdTAwMjZ2Y3B1LVx1MDAzZWFyY2guYWlhX2NvbnRleHQ7XG4rXHRcdGlmICh2YWlhLVx1MDAzZWltc2ljX2FkZHIgPT0gS1ZNX1JJU0NWX0FJQV9VTkRFRl9BRERSKVxuK1x0XHRcdHJldHVybiAtRUlOVkFMO1xuK1xuK1x0XHRyZXQgPSBhaWFfY2hlY2tfYWRkcl9yYW5nZShrdm0sIHZhaWEtXHUwMDNlaW1zaWNfYWRkcixcbitcdFx0XHRcdFx0ICAgS1ZNX0RFVl9SSVNDVl9JTVNJQ19BTElHTixcbitcdFx0XHRcdFx0ICAgS1ZNX0RFVl9SSVNDVl9JTVNJQ19TSVpFKTtcbitcdFx0aWYgKHJldClcbitcdFx0XHRyZXR1cm4gcmV0O1xuK1x0fVxuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuIHN0YXRpYyBncGFfdCBhaWFfaW1zaWNfcHBuKHN0cnVjdCBrdm1fYWlhICphaWEsIGdwYV90IGFkZHIpXG4ge1xuIFx0dTMyIGgsIGw7XG5AQCAtMjQ0LDkgKzMwMyw5IEBAIHN0YXRpYyBpbnQgYWlhX2luaXQoc3RydWN0IGt2bSAqa3ZtKVxuIFx0aWYgKGFpYS1cdTAwM2Vucl9pZHMgXHUwMDNjIGFpYS1cdTAwM2Vucl9zb3VyY2VzKVxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcbi1cdC8qIEFQTElDIGJhc2UgaXMgcmVxdWlyZWQgZm9yIG5vbi16ZXJvIG51bWJlciBvZiBzb3VyY2VzICovXG4tXHRpZiAoYWlhLVx1MDAzZW5yX3NvdXJjZXMgXHUwMDI2XHUwMDI2IGFpYS1cdTAwM2VhcGxpY19hZGRyID09IEtWTV9SSVNDVl9BSUFfVU5ERUZfQUREUilcbi1cdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHRyZXQgPSBhaWFfdmFsaWRhdGVfYWRkcl9yYW5nZXMoa3ZtKTtcbitcdGlmIChyZXQpXG4rXHRcdHJldHVybiByZXQ7XG4gXG4gXHQvKiBHcm91cCBpbmRleCBiaXRzIG11c3Qgbm90IG92ZXJsYXAgZ3Vlc3QgYW5kIEhBUlQgaW5kZXggYml0cy4gKi9cbiBcdGlmIChhaWEtXHUwMDNlbnJfZ3JvdXBfYml0cyBcdTAwMjZcdTAwMjZcbkBAIC0yNjMsMTIgKzMyMiw2IEBAIHN0YXRpYyBpbnQgYWlhX2luaXQoc3RydWN0IGt2bSAqa3ZtKVxuIFx0a3ZtX2Zvcl9lYWNoX3ZjcHUoaWR4LCB2Y3B1LCBrdm0pIHtcbiBcdFx0dmFpYSA9IFx1MDAyNnZjcHUtXHUwMDNlYXJjaC5haWFfY29udGV4dDtcbiBcbi1cdFx0LyogSU1TSUMgYmFzZSBpcyByZXF1aXJlZCAqL1xuLVx0XHRpZiAodmFpYS1cdTAwM2VpbXNpY19hZGRyID09IEtWTV9SSVNDVl9BSUFfVU5ERUZfQUREUikge1xuLVx0XHRcdHJldCA9IC1FSU5WQUw7XG4tXHRcdFx0Z290byBmYWlsX2NsZWFudXBfaW1zaWNzO1xuLVx0XHR9XG4tXG4gXHRcdC8qIEFsbCBJTVNJQ3Mgc2hvdWxkIGhhdmUgbWF0Y2hpbmcgYmFzZSBQUE4gKi9cbiBcdFx0aWYgKGJhc2VfcHBuID09IEtWTV9SSVNDVl9BSUFfVU5ERUZfQUREUilcbiBcdFx0XHRiYXNlX3BwbiA9IGFpYV9pbXNpY19wcG4oYWlhLCB2YWlhLVx1MDAzZWltc2ljX2FkZHIpO1xuZGlmZiAtLWdpdCBhL2FyY2gvcmlzY3Yva3ZtL3ZtLmMgYi9hcmNoL3Jpc2N2L2t2bS92bS5jXG5pbmRleCBhOWYwODNmZWViNzY3Li42NmVkZmFhODYyNDM1IDEwMDY0NFxuLS0tIGEvYXJjaC9yaXNjdi9rdm0vdm0uY1xuKysrIGIvYXJjaC9yaXNjdi9rdm0vdm0uY1xuQEAgLTI1MCw3ICsyNTAsOCBAQCBpbnQga3ZtX3ZtX2lvY3RsX2VuYWJsZV9jYXAoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX2VuYWJsZV9jYXAgKmNhcClcbiBcdFx0bXV0ZXhfbG9jayhcdTAwMjZrdm0tXHUwMDNlbG9jayk7XG4gXHRcdG11dGV4X2xvY2soXHUwMDI2a3ZtLVx1MDAzZXNsb3RzX2xvY2spO1xuIFxuLVx0XHRpZiAoa3ZtLVx1MDAzZWNyZWF0ZWRfdmNwdXMgfHwgIWt2bV9hcmVfYWxsX21lbXNsb3RzX2VtcHR5KGt2bSkpXG4rXHRcdGlmIChrdm0tXHUwMDNlY3JlYXRlZF92Y3B1cyB8fCAha3ZtX2FyZV9hbGxfbWVtc2xvdHNfZW1wdHkoa3ZtKSB8fFxuK1x0XHQgICAga3ZtX3Jpc2N2X2FpYV9pbml0aWFsaXplZChrdm0pKVxuIFx0XHRcdHIgPSAtRUJVU1k7XG4gXHRcdGVsc2VcbiBcdFx0XHRrdm0tXHUwMDNlYXJjaC5wZ2RfbGV2ZWxzID0gbmV3X2xldmVscztcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDA2OjE5OjA4LjQ0MDkyNjIyNVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYwNTAyOTk4OTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgUG90ZW50aWFsIFJJU0MtViBLVk0gVnVsbmVyYWJpbGl0eSoqXG5cbk9rYXksIHNvIEkndmUgZ290IHRoaXMgcGF0Y2gg4oCTIHNlZW1zIGxpa2UgaXTigJlzIHR3ZWFraW5nIGBhaWFfZGV2aWNlLmNgIGFuZCBgdm0uY2Agd2l0aGluIHRoZSBSSVNDLVYgS1ZNIGNvZGUuIExvb2tzIGxpa2UgYWRkcmVzcyByYW5nZSB2YWxpZGF0aW9uIGlzIHRoZSBmb2N1cywgYWRkaW5nIHRoZXNlIG5ldyBmdW5jdGlvbnMsIGBhaWFfY2hlY2tfYWRkcl9yYW5nZWAgYW5kIGBhaWFfdmFsaWRhdGVfYWRkcl9yYW5nZXNgLiBJdCBhbHNvIGxvb2tzIGxpa2UgaXQncyBtYWtpbmcgY2hhbmdlcyB0byBga3ZtX3ZtX2lvY3RsX2VuYWJsZV9jYXBgIHRvIGVuc3VyZSBga3ZtX3Jpc2N2X2FpYV9pbml0aWFsaXplZChrdm0pYCBpcyBjaGVja2VkIGJlZm9yZSBhbGxvd2luZyBhbnkgYHBnZF9sZXZlbHNgIG1vZGlmaWNhdGlvbnMuXG5cbk15IGluaXRpYWwgdGhvdWdodCBpcywgXCJJcyB0aGlzIGFjdHVhbGx5IHNvbWV0aGluZyB0aGF0J3MgZXZlbiAqcmVhY2hhYmxlKiBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50P1wiIFdlbGwsIEtWTSBvbiBSSVNDLVYgaXMgYSBmdW5kYW1lbnRhbCBmZWF0dXJlLCBzbyBpdCBzZWVtcyBsaWtlIGEgcmVhc29uYWJsZSBhc3N1bXB0aW9uLiBIbW0sIGJ1dCB0aGVuIEkgcmVtZW1iZXIsIHN5emthbGxlciBkb2VzIGEgbG90IG9mIGZ1enppbmcgYWNyb3NzIGRpZmZlcmVudCBhcmNoaXRlY3R1cmVzLiBJdCBwcmltYXJpbHkgd29ya3Mgd2l0aCB4ODZfNjQgYW5kIGFybTY0LCBidXQgb2NjYXNpb25hbGx5IGl0IGRvZXMgUklTQy1WLiBJZiB0aGlzIGlzIFJJU0MtViBLVk0tc3BlY2lmaWMsIGl0J3Mgb25seSBleHBsb2l0YWJsZSBvbiBSSVNDLVYgaG9zdHMuXG5cblRoZSByZWFsIHF1ZXN0aW9uIGlzLCBkb2VzIHN5emthbGxlciBhY3R1YWxseSAqcnVuKiBvbiBSSVNDLVY/IEFoLCB5ZXMsIGl0IGRvZXMhIFN5emthbGxlciBzdXBwb3J0cyByaXNjdjY0LCBzbyBpdCdzIGRlZmluaXRlbHkgd29ydGh3aGlsZSB0byBpbnZlc3RpZ2F0ZSB0aGlzIGZ1cnRoZXIuXG5cbk5vdywgbGV0J3MgbmFpbCBkb3duIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgbmVlZGVkIHRvIHRyaWdnZXIgdGhpcyBjb2RlIHBhdGguIE9idmlvdXNseSwgYENPTkZJR19LVk1gIGlzIGEgZ2l2ZW4uIFRpbWUgdG8gZGlnIGludG8gYGFyY2gvcmlzY3Yva3ZtL0tjb25maWdgIGFuZCBzZWUgd2hhdCBlbHNlIHdlIG5lZWQgdG8gZW5hYmxlIHRvIGdldCB0aGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzgyNiwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI2NCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDA2OjE5OjE0LjQ5MTIyODYxNFoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTUxMjcwMzcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEtWTVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3Jpc2N2L2t2bS9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvcmlzY3Yva3ZtL0tjb25maWc9MTg9aWYgVklSVFVBTElaQVRJT05cXG5hcmNoL3Jpc2N2L2t2bS9LY29uZmlnLTE5LVxcbmFyY2gvcmlzY3Yva3ZtL0tjb25maWc6MjA6Y29uZmlnIEtWTVxcbmFyY2gvcmlzY3Yva3ZtL0tjb25maWctMjEtXFx0dHJpc3RhdGUgXFxcIktlcm5lbC1iYXNlZCBWaXJ0dWFsIE1hY2hpbmUgKEtWTSkgc3VwcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMDY6MTk6MTQuNzA2MzYwNTYxWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzE4Nzk5NTQ2MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIEtWTSdzIERlcGVuZGVuY2llcyoqXG5cbkFscmlnaHQsIGxldCdzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgYXJjaGl0ZWN0dXJhbCB1bmRlcnBpbm5pbmcgb2YgYEtWTWAuIFRoaW5raW5nIGFib3V0IGl0LCBiZWZvcmUgSSBldmVuIHN0YXJ0IHRvIGRpdmUgaW50byBhIHNwZWNpZmljIGlzc3VlIG9yIGNvbmZpZ3VyYXRpb24sIHRoZSBmaXJzdCB0aGluZyBJIGRvIGlzIG1lbnRhbGx5IG1hcCBvdXQgaXRzIGRlcGVuZGVuY2llcy4gSXQncyBjcnVjaWFsIGZvciB1bmRlcnN0YW5kaW5nIGhvdyBpdCBmdW5jdGlvbnMgYW5kIGhvdyBjaGFuZ2VzIHdpbGwgcmlwcGxlIHRocm91Z2ggdGhlIHN5c3RlbS4gSSdtIG5vdCBnb2luZyB0byBqdXN0IGJsaW5kbHkgc3RhcnQgdHJvdWJsZXNob290aW5nIG9yIG9wdGltaXppbmcgd2l0aG91dCBhIHNvbGlkIGdyYXNwIG9mIHdoYXQgS1ZNIGlzIGJ1aWx0IHVwb24uIFdoYXQgYXJlIHRoZSBrZXkgY29tcG9uZW50cywgdGhlIGtlcm5lbCBtb2R1bGVzLCB0aGUgdXNlcnNwYWNlIHRvb2xzPyBXaGVyZSBhcmUgdGhlIHBvdGVudGlhbCBib3R0bGVuZWNrcyBvciBmYWlsdXJlIHBvaW50cz8gVW5kZXJzdGFuZGluZyB0aGUgaW50cmljYXRlIHdlYiBvZiBkZXBlbmRlbmNpZXMgd2lsbCBndWlkZSBtZSB0byB0aGUgbW9zdCByZWxldmFudCBhcmVhcyBvZiB0aGUgY29kZSBiYXNlIG9yIHRoZSBkb2N1bWVudGF0aW9uLiBUaGlzIGlzIHdoZXJlIEkgc3RhcnQuIExldCdzIHNlZSB3aGF0IHdlIGZpbmQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ1NzcsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQwNjoxOToxNy44OTQzNTg0NzJaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2ODQzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJhcmNoL3Jpc2N2L2t2bS9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxcbiAgIDI6XFx0I1xcbiAgIDM6XFx0IyBLVk0gY29uZmlndXJhdGlvblxcbiAgIDQ6XFx0I1xcbiAgIDU6XFx0XFxuICAgNjpcXHRzb3VyY2UgXFxcInZpcnQva3ZtL0tjb25maWdcXFwiXFxuICAgNzpcXHRcXG4gICA4OlxcdG1lbnVjb25maWcgVklSVFVBTElaQVRJT05cXG4gICA5OlxcdFxcdGJvb2wgXFxcIlZpcnR1YWxpemF0aW9uXFxcIlxcbiAgMTA6XFx0XFx0aGVscFxcbiAgMTE6XFx0XFx0ICBTYXkgWSBoZXJlIHRvIGdldCB0byBzZWUgb3B0aW9ucyBmb3IgdXNpbmcgeW91ciBMaW51eCBob3N0IHRvIHJ1blxcbiAgMTI6XFx0XFx0ICBvdGhlciBvcGVyYXRpbmcgc3lzdGVtcyBpbnNpZGUgdmlydHVhbCBtYWNoaW5lcyAoZ3Vlc3RzKS5cXG4gIDEzOlxcdFxcdCAgVGhpcyBvcHRpb24gYWxvbmUgZG9lcyBub3QgYWRkIGFueSBrZXJuZWwgY29kZS5cXG4gIDE0OlxcdFxcbiAgMTU6XFx0XFx0ICBJZiB5b3Ugc2F5IE4sIGFsbCBvcHRpb25zIGluIHRoaXMgc3VibWVudSB3aWxsIGJlIHNraXBwZWQgYW5kXFxuICAxNjpcXHRcXHQgIGRpc2FibGVkLlxcbiAgMTc6XFx0XFxuICAxODpcXHRpZiBWSVJUVUFMSVpBVElPTlxcbiAgMTk6XFx0XFxuICAyMDpcXHRjb25maWcgS1ZNXFxuICAyMTpcXHRcXHR0cmlzdGF0ZSBcXFwiS2VybmVsLWJhc2VkIFZpcnR1YWwgTWFjaGluZSAoS1ZNKSBzdXBwb3J0XFxcIlxcbiAgMjI6XFx0XFx0ZGVwZW5kcyBvbiBSSVNDVl9TQkkgXFx1MDAyNlxcdTAwMjYgTU1VXFxuICAyMzpcXHRcXHRzZWxlY3QgSEFWRV9LVk1fSVJRQ0hJUFxcbiAgMjQ6XFx0XFx0c2VsZWN0IEhBVkVfS1ZNX0lSUV9ST1VUSU5HXFxuICAyNTpcXHRcXHRzZWxlY3QgSEFWRV9LVk1fTVNJXFxuICAyNjpcXHRcXHRzZWxlY3QgSEFWRV9LVk1fUkVBRE9OTFlfTUVNXFxuICAyNzpcXHRcXHRzZWxlY3QgSEFWRV9LVk1fRElSVFlfUklOR19BQ1FfUkVMXFxuICAyODpcXHRcXHRzZWxlY3QgS1ZNX0NPTU1PTlxcbiAgMjk6XFx0XFx0c2VsZWN0IEtWTV9HRU5FUklDX0RJUlRZTE9HX1JFQURfUFJPVEVDVFxcbiAgMzA6XFx0XFx0c2VsZWN0IEtWTV9HRU5FUklDX0hBUkRXQVJFX0VOQUJMSU5HXFxuICAzMTpcXHRcXHRzZWxlY3QgS1ZNX01NSU9cXG4gIDMyOlxcdFxcdHNlbGVjdCBWSVJUX1hGRVJfVE9fR1VFU1RfV09SS1xcbiAgMzM6XFx0XFx0c2VsZWN0IFNDSEVEX0lORk9cXG4gIDM0OlxcdFxcdHNlbGVjdCBHVUVTVF9QRVJGX0VWRU5UUyBpZiBQRVJGX0VWRU5UU1xcbiAgMzU6XFx0XFx0aGVscFxcbiAgMzY6XFx0XFx0ICBTdXBwb3J0IGhvc3RpbmcgdmlydHVhbGl6ZWQgZ3Vlc3QgbWFjaGluZXMuXFxuICAzNzpcXHRcXG4gIDM4OlxcdFxcdCAgSWYgdW5zdXJlLCBzYXkgTi5cXG4gIDM5OlxcdFxcbiAgNDA6XFx0ZW5kaWYgIyBWSVJUVUFMSVpBVElPTlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQwNjoxOToxNy44OTQ0MjkwMjJaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozOTY4MTQwMTg1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipLVk0gQ29uZmlndXJhdGlvbiBEZWVwIERpdmUqKlxuXG5BbHJpZ2h0LCBzbyB0aGUgaW5pdGlhbCBmb2N1cyBpcyAqY2xlYXJseSogS1ZNIOKAkyBpdCdzIHRoZSBhbmNob3IgcG9pbnQsIHRoZSBjZW50cmFsIGNvbmZpZ3VyYXRpb24gd2UncmUgd29ya2luZyB3aXRoIGhlcmUuIFRoYXQncyB0aGUgZm91bmRhdGlvbi4gTm93LCBnaXZlbiB0aGF0LCBteSBuZXh0IGxpbmUgb2YgaW5xdWlyeSBoYXMgdG8gYmUgdGFyZ2V0ZWQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGlmIHRoZXJlIGFyZSBhbnkgKnNwZWNpZmljKiBjb25maWd1cmF0aW9ucyBvciBob29rcyByZWxldmFudCB0byB0aGUgQUlBIChBZHZhbmNlZCBJbnRlcnJ1cHQgQXJjaGl0ZWN0dXJlKSBzdWJzeXN0ZW0gd2l0aGluIHRoZSBLVk0gZnJhbWV3b3JrLiBJIHNob3VsZCBpbW1lZGlhdGVseSB6ZXJvIGluIG9uIGBhaWFfZGV2aWNlLmNgLiBJZiBBSUEgaGFzIGFueSBjdXN0b20gZGV2aWNlLXNwZWNpZmljIGNvbmZpZ3VyYXRpb24gaXQgd291bGQgbW9zdCBsaWtlbHkgYmUgaW4gdGhhdCBmaWxlLiBJJ20gbG9va2luZyBmb3IgYW55dGhpbmcgYmV5b25kIHRoZSBiYXNlIEtWTSBzZXR1cCDigJMgc3BlY2lmaWMgcmVnaXN0ZXIgYXNzaWdubWVudHMsIGludGVycnVwdCBoYW5kbGluZywgYW55dGhpbmcgdGhhdCBkaXZlcmdlcyBmcm9tIHRoZSBzdGFuZGFyZCBLVk0gZGV2aWNlIGltcGxlbWVudGF0aW9uIGFuZCBpcyBBSUEtcmVsYXRlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6NTMyNCwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMDY6MTk6MjEuODYyNTcyNDM3WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU1NDgwMDg0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImFpYV9kZXZpY2Uub1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3Jpc2N2L2t2bS9NYWtlZmlsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3Jpc2N2L2t2bS9NYWtlZmlsZT0xND1rdm0teSArPSBhaWFfYXBsaWMub1xcbmFyY2gvcmlzY3Yva3ZtL01ha2VmaWxlOjE1Omt2bS15ICs9IGFpYV9kZXZpY2Uub1xcbmFyY2gvcmlzY3Yva3ZtL01ha2VmaWxlLTE2LWt2bS15ICs9IGFpYV9pbXNpYy5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDA2OjE5OjIxLjkxODA1NjcxMVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQxMzUxMjQwNjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIEtWTSBBSUEgQ29tcGlsYXRpb24qKlxuXG5Pa2F5LCBzbyB0aGlzIGNvZGUgaXMgZGVmaW5pdGVseSBiZWluZyBjb21waWxlZCB1bmNvbmRpdGlvbmFsbHkgd2hlbiBLVk0gKEtlcm5lbC1iYXNlZCBWaXJ0dWFsIE1hY2hpbmUpIGlzIGVuYWJsZWQuIFRoYXQncyB0aGUgc3RhcnRpbmcgcG9pbnQuIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIGRpZyBpbnRvICp3aGF0KiBpcyBiZWluZyBtb2RpZmllZCBvciBpbmNsdWRlZCBnaXZlbiB0aGUgS1ZNIGRlcGVuZGVuY3kuIExldCdzIHNlZS4uLiB0aGUgZnVuY3Rpb25zIHRoYXQgc2VlbSB0byBiZSBpbXBhY3RlZCBpbmNsdWRlOiBgYWlhX2NoZWNrX2FkZHJfcmFuZ2VgLCBgYWlhX2FwbGljX2FkZHJgLCBgYWlhX2ltc2ljX2FkZHJgLCBgYWlhX3ZhbGlkYXRlX2FkZHJfcmFuZ2VzYCwgYW5kIGBhaWFfaW5pdGAuIEhtbSwgdGhvc2UgYXJlIGFsbCAqc3RhdGljKiBmdW5jdGlvbnMsIHdoaWNoIGlzIHR5cGljYWwgZm9yIGludGVybmFsIGhlbHBlcnMuIEFuZCB0aGVuIHRoZXJlJ3MgYGt2bV92bV9pb2N0bF9lbmFibGVfY2FwYCwgd2hpY2ggaXMgKm5vbi1zdGF0aWMqLCBhbmQgcmVzaWRpbmcgaW4gYGFyY2gvcmlzY3Yva3ZtL3ZtLmNgLiBUaGF0IGZ1bmN0aW9uJ3MgZGVmaW5pdGVseSBpbnRlcmVzdGluZyBiZWNhdXNlIGl0J3MgKm5vdCogc3RhdGljLCBzbyBpdCdzIGxpa2VseSBhIHB1YmxpYyBlbnRyeSBwb2ludC5cblxuQnV0IHRoZSBwbG90IHRoaWNrZW5zLi4uIGlzIGBhaWFfaW5pdGAgcGFydCBvZiB0aGUgS1ZNIGluaXRpYWxpemF0aW9uIHNlcXVlbmNlPyBMZXQgbWUgc2VlLiBJIHJlY2FsbCBhIGZ1bmN0aW9uIGluIHRoZSBjb2RlIHRoYXQgaGFuZGxlcyBpbml0aWFsaXphdGlvbiwgbGlrZSBga3ZtX3Jpc2N2X2FpYV9pbml0YC4gTmVlZCB0byBjaGVjayBgYWlhX2RldmljZS5jYCB0byBzZWUgaWYgdGhlcmUncyBhIGxpbmsgdGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU2NTUsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNDcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMDY6MTk6MjYuMDUzMTgyOTJaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU2NzMzNzM0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImFpYV9pbml0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gvcmlzY3Yva3ZtL2FpYV9kZXZpY2UuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3Jpc2N2L2t2bS9haWFfZGV2aWNlLmM9NTM9c3RhdGljIGludCBhaWFfY29uZmlnKHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgbG9uZyB0eXBlLFxcbi0tXFxuYXJjaC9yaXNjdi9rdm0vYWlhX2RldmljZS5jLTU4LVxcdC8qIFdyaXRlcyBjYW4gb25seSBiZSBkb25lIGJlZm9yZSBpcnFjaGlwIGlzIGluaXRpYWxpemVkICovXFxuYXJjaC9yaXNjdi9rdm0vYWlhX2RldmljZS5jOjU5OlxcdGlmICh3cml0ZSBcXHUwMDI2XFx1MDAyNiBrdm1fcmlzY3ZfYWlhX2luaXRpYWxpemVkKGt2bSkpXFxuYXJjaC9yaXNjdi9rdm0vYWlhX2RldmljZS5jLTYwLVxcdFxcdHJldHVybiAtRUJVU1k7XFxuLS1cXG5hcmNoL3Jpc2N2L2t2bS9haWFfZGV2aWNlLmM9MTY0PXN0YXRpYyBpbnQgYWlhX2FwbGljX2FkZHIoc3RydWN0IGt2bSAqa3ZtLCB1NjQgKmFkZHIsIGJvb2wgd3JpdGUpXFxuLS1cXG5hcmNoL3Jpc2N2L2t2bS9haWFfZGV2aWNlLmMtMTcwLVxcdFxcdC8qIFdyaXRlcyBjYW4gb25seSBiZSBkb25lIGJlZm9yZSBpcnFjaGlwIGlzIGluaXRpYWxpemVkICovXFxuYXJjaC9yaXNjdi9rdm0vYWlhX2RldmljZS5jOjE3MTpcXHRcXHRpZiAoa3ZtX3Jpc2N2X2FpYV9pbml0aWFsaXplZChrdm0pKVxcbmFyY2gvcmlzY3Yva3ZtL2FpYV9kZXZpY2UuYy0xNzItXFx0XFx0XFx0cmV0dXJuIC1FQlVTWTtcXG4tLVxcbmFyY2gvcmlzY3Yva3ZtL2FpYV9kZXZpY2UuYz0xODY9c3RhdGljIGludCBhaWFfaW1zaWNfYWRkcihzdHJ1Y3Qga3ZtICprdm0sIHU2NCAqYWRkcixcXG4tLVxcbmFyY2gvcmlzY3Yva3ZtL2FpYV9kZXZpY2UuYy0xOTktXFx0XFx0LyogV3JpdGVzIGNhbiBvbmx5IGJlIGRvbmUgYmVmb3JlIGlycWNoaXAgaXMgaW5pdGlhbGl6ZWQgKi9cXG5hcmNoL3Jpc2N2L2t2bS9haWFfZGV2aWNlLmM6MjAwOlxcdFxcdGlmIChrdm1fcmlzY3ZfYWlhX2luaXRpYWxpemVkKGt2bSkpXFxuYXJjaC9yaXNjdi9rdm0vYWlhX2RldmljZS5jLTIwMS1cXHRcXHRcXHRyZXR1cm4gLUVCVVNZO1xcbi0tXFxuYXJjaC9yaXNjdi9rdm0vYWlhX2RldmljZS5jPTI3MT1zdGF0aWMgdTMyIGFpYV9pbXNpY19oYXJ0X2luZGV4KHN0cnVjdCBrdm1fYWlhICphaWEsIGdwYV90IGFkZHIpXFxuLS1cXG5hcmNoL3Jpc2N2L2t2bS9haWFfZGV2aWNlLmMtMjg0LVxcbmFyY2gvcmlzY3Yva3ZtL2FpYV9kZXZpY2UuYzoyODU6c3RhdGljIGludCBhaWFfaW5pdChzdHJ1Y3Qga3ZtICprdm0pXFxuYXJjaC9yaXNjdi9rdm0vYWlhX2RldmljZS5jLTI4Ni17XFxuLS1cXG5hcmNoL3Jpc2N2L2t2bS9haWFfZGV2aWNlLmMtMjk0LVxcdC8qIElycWNoaXAgY2FuIGJlIGluaXRpYWxpemVkIG9ubHkgb25jZSAqL1xcbmFyY2gvcmlzY3Yva3ZtL2FpYV9kZXZpY2UuYzoyOTU6XFx0aWYgKGt2bV9yaXNjdl9haWFfaW5pdGlhbGl6ZWQoa3ZtKSlcXG5hcmNoL3Jpc2N2L2t2bS9haWFfZGV2aWNlLmMtMjk2LVxcdFxcdHJldHVybiAtRUJVU1k7XFxuLS1cXG5hcmNoL3Jpc2N2L2t2bS9haWFfZGV2aWNlLmM9MzU5PXN0YXRpYyBpbnQgYWlhX3NldF9hdHRyKHN0cnVjdCBrdm1fZGV2aWNlICpkZXYsIHN0cnVjdCBrdm1fZGV2aWNlX2F0dHIgKmF0dHIpXFxuLS1cXG5hcmNoL3Jpc2N2L2t2bS9haWFfZGV2aWNlLmMtMzk2LVxcdFxcdFxcdG11dGV4X2xvY2soXFx1MDAyNmRldi1cXHUwMDNla3ZtLVxcdTAwM2Vsb2NrKTtcXG5hcmNoL3Jpc2N2L2t2bS9haWFfZGV2aWNlLmM6Mzk3OlxcdFxcdFxcdHIgPSBhaWFfaW5pdChkZXYtXFx1MDAzZWt2bSk7XFxuYXJjaC9yaXNjdi9rdm0vYWlhX2RldmljZS5jLTM5OC1cXHRcXHRcXHRtdXRleF91bmxvY2soXFx1MDAyNmRldi1cXHUwMDNla3ZtLVxcdTAwM2Vsb2NrKTtcXG4tLVxcbmFyY2gvcmlzY3Yva3ZtL2FpYV9kZXZpY2UuYz01NTU9aW50IGt2bV9yaXNjdl92Y3B1X2FpYV91cGRhdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbi0tXFxuYXJjaC9yaXNjdi9rdm0vYWlhX2RldmljZS5jLTU1Ny1cXHQvKiBQcm9jZWVkIG9ubHkgaWYgQUlBIHdhcyBpbml0aWFsaXplZCBzdWNjZXNzZnVsbHkgKi9cXG5hcmNoL3Jpc2N2L2t2bS9haWFfZGV2aWNlLmM6NTU4OlxcdGlmICgha3ZtX3Jpc2N2X2FpYV9pbml0aWFsaXplZCh2Y3B1LVxcdTAwM2Vrdm0pKVxcbmFyY2gvcmlzY3Yva3ZtL2FpYV9kZXZpY2UuYy01NTktXFx0XFx0cmV0dXJuIDE7XFxuLS1cXG5hcmNoL3Jpc2N2L2t2bS9haWFfZGV2aWNlLmM9NTY1PXZvaWQga3ZtX3Jpc2N2X3ZjcHVfYWlhX3Jlc2V0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4tLVxcbmFyY2gvcmlzY3Yva3ZtL2FpYV9kZXZpY2UuYy01NzMtXFx0LyogUHJvY2VlZCBvbmx5IGlmIEFJQSB3YXMgaW5pdGlhbGl6ZWQgc3VjY2Vzc2Z1bGx5ICovXFxuYXJjaC9yaXNjdi9rdm0vYWlhX2RldmljZS5jOjU3NDpcXHRpZiAoIWt2bV9yaXNjdl9haWFfaW5pdGlhbGl6ZWQodmNwdS1cXHUwMDNla3ZtKSlcXG5hcmNoL3Jpc2N2L2t2bS9haWFfZGV2aWNlLmMtNTc1LVxcdFxcdHJldHVybjtcXG4tLVxcbmFyY2gvcmlzY3Yva3ZtL2FpYV9kZXZpY2UuYy01ODAtXFxuYXJjaC9yaXNjdi9rdm0vYWlhX2RldmljZS5jOjU4MTp2b2lkIGt2bV9yaXNjdl92Y3B1X2FpYV9pbml0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG5hcmNoL3Jpc2N2L2t2bS9haWFfZGV2aWNlLmMtNTgyLXtcXG4tLVxcbmFyY2gvcmlzY3Yva3ZtL2FpYV9kZXZpY2UuYy01OTEtXFx0ICpcXG5hcmNoL3Jpc2N2L2t2bS9haWFfZGV2aWNlLmM6NTkyOlxcdCAqIFJlZmVyLCBhaWFfaW5pdCgpIGltcGxlbWVudGF0aW9uIGZvciBtb3JlIGRldGFpbHMuXFxuYXJjaC9yaXNjdi9rdm0vYWlhX2RldmljZS5jLTU5My1cXHQgKi9cXG4tLVxcbmFyY2gvcmlzY3Yva3ZtL2FpYV9kZXZpY2UuYz02MDA9dm9pZCBrdm1fcmlzY3ZfdmNwdV9haWFfZGVpbml0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4tLVxcbmFyY2gvcmlzY3Yva3ZtL2FpYV9kZXZpY2UuYy02MDItXFx0LyogUHJvY2VlZCBvbmx5IGlmIEFJQSB3YXMgaW5pdGlhbGl6ZWQgc3VjY2Vzc2Z1bGx5ICovXFxuYXJjaC9yaXNjdi9rdm0vYWlhX2RldmljZS5jOjYwMzpcXHRpZiAoIWt2bV9yaXNjdl9haWFfaW5pdGlhbGl6ZWQodmNwdS1cXHUwMDNla3ZtKSlcXG5hcmNoL3Jpc2N2L2t2bS9haWFfZGV2aWNlLmMtNjA0LVxcdFxcdHJldHVybjtcXG4tLVxcbmFyY2gvcmlzY3Yva3ZtL2FpYV9kZXZpY2UuYz02MTA9aW50IGt2bV9yaXNjdl9haWFfaW5qZWN0X21zaV9ieV9pZChzdHJ1Y3Qga3ZtICprdm0sIHUzMiBoYXJ0X2luZGV4LFxcbi0tXFxuYXJjaC9yaXNjdi9rdm0vYWlhX2RldmljZS5jLTYxNi1cXHQvKiBQcm9jZWVkIG9ubHkgaWYgQUlBIHdhcyBpbml0aWFsaXplZCBzdWNjZXNzZnVsbHkgKi9cXG5hcmNoL3Jpc2N2L2t2bS9haWFfZGV2aWNlLmM6NjE3OlxcdGlmICgha3ZtX3Jpc2N2X2FpYV9pbml0aWFsaXplZChrdm0pKVxcbmFyY2gvcmlzY3Yva3ZtL2FpYV9kZXZpY2UuYy02MTgtXFx0XFx0cmV0dXJuIC1FQlVTWTtcXG4tLVxcbmFyY2gvcmlzY3Yva3ZtL2FpYV9kZXZpY2UuYz02MzE9aW50IGt2bV9yaXNjdl9haWFfaW5qZWN0X21zaShzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fbXNpICptc2kpXFxuLS1cXG5hcmNoL3Jpc2N2L2t2bS9haWFfZGV2aWNlLmMtNjQwLVxcdC8qIFByb2NlZWQgb25seSBpZiBBSUEgd2FzIGluaXRpYWxpemVkIHN1Y2Nlc3NmdWxseSAqL1xcbmFyY2gvcmlzY3Yva3ZtL2FpYV9kZXZpY2UuYzo2NDE6XFx0aWYgKCFrdm1fcmlzY3ZfYWlhX2luaXRpYWxpemVkKGt2bSkpXFxuYXJjaC9yaXNjdi9rdm0vYWlhX2RldmljZS5jLTY0Mi1cXHRcXHRyZXR1cm4gLUVCVVNZO1xcbi0tXFxuYXJjaC9yaXNjdi9rdm0vYWlhX2RldmljZS5jPTY2NT1pbnQga3ZtX3Jpc2N2X2FpYV9pbmplY3RfaXJxKHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgaW50IGlycSwgYm9vbCBsZXZlbClcXG4tLVxcbmFyY2gvcmlzY3Yva3ZtL2FpYV9kZXZpY2UuYy02NjctXFx0LyogUHJvY2VlZCBvbmx5IGlmIEFJQSB3YXMgaW5pdGlhbGl6ZWQgc3VjY2Vzc2Z1bGx5ICovXFxuYXJjaC9yaXNjdi9rdm0vYWlhX2RldmljZS5jOjY2ODpcXHRpZiAoIWt2bV9yaXNjdl9haWFfaW5pdGlhbGl6ZWQoa3ZtKSlcXG5hcmNoL3Jpc2N2L2t2bS9haWFfZGV2aWNlLmMtNjY5LVxcdFxcdHJldHVybiAtRUJVU1k7XFxuLS1cXG5hcmNoL3Jpc2N2L2t2bS9haWFfZGV2aWNlLmMtNjc0LVxcbmFyY2gvcmlzY3Yva3ZtL2FpYV9kZXZpY2UuYzo2NzU6dm9pZCBrdm1fcmlzY3ZfYWlhX2luaXRfdm0oc3RydWN0IGt2bSAqa3ZtKVxcbmFyY2gvcmlzY3Yva3ZtL2FpYV9kZXZpY2UuYy02NzYte1xcbi0tXFxuYXJjaC9yaXNjdi9rdm0vYWlhX2RldmljZS5jLTY4NS1cXHQgKlxcbmFyY2gvcmlzY3Yva3ZtL2FpYV9kZXZpY2UuYzo2ODY6XFx0ICogUmVmZXIsIGFpYV9pbml0KCkgaW1wbGVtZW50YXRpb24gZm9yIG1vcmUgZGV0YWlscy5cXG5hcmNoL3Jpc2N2L2t2bS9haWFfZGV2aWNlLmMtNjg3LVxcdCAqL1xcbi0tXFxuYXJjaC9yaXNjdi9rdm0vYWlhX2RldmljZS5jPTcwMT12b2lkIGt2bV9yaXNjdl9haWFfZGVzdHJveV92bShzdHJ1Y3Qga3ZtICprdm0pXFxuLS1cXG5hcmNoL3Jpc2N2L2t2bS9haWFfZGV2aWNlLmMtNzAzLVxcdC8qIFByb2NlZWQgb25seSBpZiBBSUEgd2FzIGluaXRpYWxpemVkIHN1Y2Nlc3NmdWxseSAqL1xcbmFyY2gvcmlzY3Yva3ZtL2FpYV9kZXZpY2UuYzo3MDQ6XFx0aWYgKCFrdm1fcmlzY3ZfYWlhX2luaXRpYWxpemVkKGt2bSkpXFxuYXJjaC9yaXNjdi9rdm0vYWlhX2RldmljZS5jLTcwNS1cXHRcXHRyZXR1cm47XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDA2OjE5OjI2LjEwOTkyNDk4NFoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozOTUwNDAzMzg4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBzZWUgd2hhdCB3ZSd2ZSBnb3QgaGVyZS5cblxuKipEZWNvbnN0cnVjdGluZyB0aGUgQUlBIEF0dHJpYnV0ZSBTZXR0aW5nIFByb2Nlc3MqKlxuXG5BbHJpZ2h0LCBzbyBgYWlhX3NldF9hdHRyYCBpcyB0aGUga2V5IGZ1bmN0aW9uIHRvIGxvb2sgYXQuIFNlZW1zIGxpa2UgaXTigJlzIGEgY2FsbGJhY2ssIHNwZWNpZmljYWxseSBmb3IgS1ZNIGRldmljZSBhdHRyaWJ1dGVzLiBUaGF0IGltbWVkaWF0ZWx5IG1ha2VzIG1lIHRoaW5rIGFib3V0IGhvdyB0aGUgQUlBIGRldmljZSBpcyBtYW5hZ2VkIHdpdGhpbiB0aGUgS1ZNIGZyYW1ld29yay4gVGhlIGNvbm5lY3Rpb24gdG8gYGFpYV9pbml0YCBmcm9tIHdpdGhpbiBgYWlhX3NldF9hdHRyYCBzdWdnZXN0cyB0aGF0IHRoaXMgaXMgd2hlcmUgdGhlIEFJQSBkZXZpY2UgaXMgYmVpbmcgaW5pdGlhbGl6ZWQgYXQgc29tZSBzdGFnZS4gQW5kIGxvb2tpbmcgYmFjaywgaXQgYWxsIHN0YXJ0cyB3aXRoIHRoZSBkZXZpY2UgY3JlYXRpb24gdmlhIGBhaWFfY3JlYXRlYC4gVGhlIG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIHBpbnBvaW50IHRoZSBLVk0gZGV2aWNlIG9wZXJhdGlvbnMgYXNzb2NpYXRlZCB3aXRoIHRoZSBBSUEgZGV2aWNlLiBJIG5lZWQgdG8gZGlnIGludG8gdGhlIEtWTSBkZXZpY2Ugb3BzIGZvciBBSUEgdG8gZnVsbHkgdW5kZXJzdGFuZCB0aGUgYXR0cmlidXRlIHNldHRpbmcgZmxvdy4gVGltZSB0byBmaW5kIHRob3NlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4MTcyLCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMDY6MTk6MzAuMDYwMzMyNDQyWiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1Mjg5NTA0NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJhaWFfc2V0X2F0dHJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC9yaXNjdi9rdm0vYWlhX2RldmljZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvcmlzY3Yva3ZtL2FpYV9kZXZpY2UuYz0yODU9c3RhdGljIGludCBhaWFfaW5pdChzdHJ1Y3Qga3ZtICprdm0pXFxuLS1cXG5hcmNoL3Jpc2N2L2t2bS9haWFfZGV2aWNlLmMtMzU4LVxcbmFyY2gvcmlzY3Yva3ZtL2FpYV9kZXZpY2UuYzozNTk6c3RhdGljIGludCBhaWFfc2V0X2F0dHIoc3RydWN0IGt2bV9kZXZpY2UgKmRldiwgc3RydWN0IGt2bV9kZXZpY2VfYXR0ciAqYXR0cilcXG5hcmNoL3Jpc2N2L2t2bS9haWFfZGV2aWNlLmMtMzYwLXtcXG4tLVxcbmFyY2gvcmlzY3Yva3ZtL2FpYV9kZXZpY2UuYz01NDY9c3RydWN0IGt2bV9kZXZpY2Vfb3BzIGt2bV9yaXNjdl9haWFfZGV2aWNlX29wcyA9IHtcXG4tLVxcbmFyY2gvcmlzY3Yva3ZtL2FpYV9kZXZpY2UuYy01NDktXFx0LmRlc3Ryb3kgPSBhaWFfZGVzdHJveSxcXG5hcmNoL3Jpc2N2L2t2bS9haWFfZGV2aWNlLmM6NTUwOlxcdC5zZXRfYXR0ciA9IGFpYV9zZXRfYXR0cixcXG5hcmNoL3Jpc2N2L2t2bS9haWFfZGV2aWNlLmMtNTUxLVxcdC5nZXRfYXR0ciA9IGFpYV9nZXRfYXR0cixcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMDY6MTk6MzAuMTEzMjMyNjA2WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU0Njk2Nzg4NzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRGlzc2VjdGluZyB0aGUgUklTQy1WIEFJQSBJbml0aWFsaXphdGlvbiBGbG93KipcblxuT2theSwgc28gSSdtIHRyeWluZyB0byB0cmFjZSB0aGUgaW5pdGlhbGl6YXRpb24gcGF0aCBmb3IgdGhlIEFJQSAoQWR2YW5jZWQgSW50ZXJydXB0IEFyY2hpdGVjdHVyZSkgd2l0aGluIHRoZSBLVk0gUklTQy1WIGltcGxlbWVudGF0aW9uLiBNeSBpbml0aWFsIHRob3VnaHQgd2FzIHRoYXQgYGFpYV9zZXRfYXR0cmAgd2FzIHRoZSBwcmltYXJ5IGVudHJ5IHBvaW50LCByZW1lbWJlcmluZyBpdCBjYWxscyBgYWlhX2luaXRgIHVuZGVyIHRoZSBgS1ZNX0RFVl9SSVNDVl9BSUFfQ1RSTF9JTklUYCBjb25kaXRpb24uIEFuZCwgcmlnaHQsIGBhaWFfc2V0X2F0dHJgIGNhbiBhbHNvIGNhbGwgYGFpYV9jb25maWdgLCBpbiB0dXJuIHRyaWdnZXJpbmcgY2FsbHMgdG8gYGFpYV9hcGxpY19hZGRyYCBhbmQgYGFpYV9pbXNpY19hZGRyYC4gSG93ZXZlciwgSSBqdXN0IGNhdWdodCBteXNlbGbigJRgYWlhX3NldF9hdHRyYCBpcyBhY3R1YWxseSBhIHN0YXRpYyBmdW5jdGlvbi4gVGhhdCdzIGEga2V5IGRldGFpbCEgVGhlICp0cnVlKiBlbnRyeSBwb2ludCBpcyBga3ZtX3Jpc2N2X2FpYV9kZXZpY2Vfb3BzLnNldF9hdHRyYC5cblxuTm93LCBJIG5lZWQgdG8gem9vbSBvdXQgYSBiaXQgYW5kIGZpZ3VyZSBvdXQgaG93IHRoaXMgaXMgYWxsIGNvbm5lY3RlZCB0byB0aGUgbGFyZ2VyIEtWTSBpbmZyYXN0cnVjdHVyZS4gR2l2ZW4gdGhlIGNvbnRleHQsIEkgc2hvdWxkIHByb2JhYmx5IGJlIGxvb2tpbmcgYXQgYGt2bV92bV9pb2N0bF9lbmFibGVfY2FwYCwgY29uc2lkZXJpbmcgdGhlIHJlY2VudCBjaGFuZ2VzIGluIGBhcmNoL3Jpc2N2L2t2bS92bS5jYC4gQnV0IGhvbGQgb24sIGBrdm1fdm1faW9jdGxfZW5hYmxlX2NhcGAgaXMgYSBnZW5lcmljIEtWTSBBUEkgZnVuY3Rpb24uIFNvLCBJIGhhdmUgdG8gZ28gZGVlcGVyLiBJcyB0aGVyZSBhIHNwZWNpZmljIFJJU0MtViBLVk0gaW9jdGwgb3IgZnVuY3Rpb24gdGhhdCdzIHJlbGV2YW50IGhlcmU/IExldCdzIGdvIGJhY2sgdG8gYGFyY2gvcmlzY3Yva3ZtL3ZtLmNgIGFuZCBmb2N1cyBvbiBob3cgYGt2bV92bV9pb2N0bF9lbmFibGVfY2FwYCBpcyBpbXBsZW1lbnRlZCB3aXRoaW4gdGhlIFJJU0MtViBjb250ZXh0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo4NzAwLCJPdXRwdXRUb2tlbnMiOjQxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjE3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDA2OjE5OjM1LjU4MjkxNDEwM1oiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTI5MjkyNDQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwia3ZtX3ZtX2lvY3RsX2VuYWJsZV9jYXBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC9yaXNjdi9rdm0vdm0uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3Jpc2N2L2t2bS92bS5jPTE3ND1pbnQga3ZtX3ZtX2lvY3RsX2NoZWNrX2V4dGVuc2lvbihzdHJ1Y3Qga3ZtICprdm0sIGxvbmcgZXh0KVxcbi0tXFxuYXJjaC9yaXNjdi9rdm0vdm0uYy0yMTQtXFxuYXJjaC9yaXNjdi9rdm0vdm0uYzoyMTU6aW50IGt2bV92bV9pb2N0bF9lbmFibGVfY2FwKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9lbmFibGVfY2FwICpjYXApXFxuYXJjaC9yaXNjdi9rdm0vdm0uYy0yMTYte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQwNjoxOTozNS42MzU4NDk0MjhaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTI1NTY1ODkzMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgS1ZNIEFJQSBEZXZpY2UgSW5pdGlhbGl6YXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBga3ZtX3ZtX2lvY3RsX2VuYWJsZV9jYXBgIGFzIGEgZ29vZCBqdW1waW5nLW9mZiBwb2ludDsgaXQncyB0aGUgc3RhbmRhcmQgS1ZNIGlvY3RsIGhhbmRsZXIgZm9yIGBLVk1fRU5BQkxFX0NBUGAsIHRoYXQgbWFrZXMgc2Vuc2UuIExldCdzIHNlZSBpZiBJIGNhbiBnZXQgc29tZSBjb250ZXh0IGJ5IGxvb2tpbmcgYXQgQUlBIGRldmljZSBpbml0aWFsaXphdGlvbiBhcyBhIHdob2xlLiBgYWlhX3NldF9hdHRyYCBjb21lcyB0byBtaW5kIGFzIGl0J3Mgc29tZXRoaW5nIEkndmUgc2VlbiBiZWZvcmUuIEFoLCBidXQgaXQncyBzdGF0aWMg4oCTIHRoYXQgbWVhbnMgaXQgd29uJ3QgaGF2ZSBhIHVuaXF1ZSBzeW1ib2wgYWRkcmVzcyBpZiBpdCdzIGlubGluZWQuLi4gdW5sZXNzIGl0J3MgKm5vdCogaW5saW5lZCwgYW5kIGl0IHNob3VsZG4ndCBiZSwgYmVjYXVzZSBpdCdzIGFzc2lnbmVkIHRvIGEgc3RydWN0IG9mIGZ1bmN0aW9uIHBvaW50ZXJzLiBSaWdodC4gSG1tLCBidXQgdGhhdCBcInN0YXRpY1wiIGlzIHN0aWxsIGEgcHJvYmxlbSwgSSBuZWVkIGEgbm9uLXN0YXRpYyBmdW5jdGlvbi5cblxuT2theSwgbGV0J3Mgc2VlLi4uIGBrdm1fcmlzY3ZfYWlhX2RldmljZV9vcHNgIGxvb2tzIHByb21pc2luZzsgaXQncyBhIHN0cnVjdCBhbmQgdGhhdCBzdWdnZXN0cyBpdCBtaWdodCBoYXZlIGFzc29jaWF0ZWQgbm9uLXN0YXRpYyBmdW5jdGlvbnMuIFRpbWUgdG8gZGlnIGEgYml0IGRlZXBlciBhbmQgc2VlIGlmIEkgY2FuIGlkZW50aWZ5IGFueSBvdGhlciByZWxhdGVkIG5vbi1zdGF0aWMgZnVuY3Rpb25zIGludm9sdmVkIGluIEFJQSBkZXZpY2UgY3JlYXRpb24gd2l0aGluIHRoZSBLVk0gZnJhbWV3b3JrLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5NDM1LCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTUzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDA2OjE5OjQwLjg5MTUxMDYyOFoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTA4OTUxMTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwia3ZtX3Jpc2N2X2FpYV9kZXZpY2Vfb3BzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gvcmlzY3Yva3ZtL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3Jpc2N2L2t2bS9haWEuYz02NzI9aW50IGt2bV9yaXNjdl9haWFfaW5pdCh2b2lkKVxcbi0tXFxuYXJjaC9yaXNjdi9rdm0vYWlhLmMtNjk3LVxcdC8qIFJlZ2lzdGVyIGRldmljZSBvcGVyYXRpb25zICovXFxuYXJjaC9yaXNjdi9rdm0vYWlhLmM6Njk4OlxcdHJjID0ga3ZtX3JlZ2lzdGVyX2RldmljZV9vcHMoXFx1MDAyNmt2bV9yaXNjdl9haWFfZGV2aWNlX29wcyxcXG5hcmNoL3Jpc2N2L2t2bS9haWEuYy02OTktXFx0XFx0XFx0XFx0ICAgICBLVk1fREVWX1RZUEVfUklTQ1ZfQUlBKTtcXG4tLVxcbmFyY2gvcmlzY3Yva3ZtL2FpYV9kZXZpY2UuYz01MDE9c3RhdGljIGludCBhaWFfaGFzX2F0dHIoc3RydWN0IGt2bV9kZXZpY2UgKmRldiwgc3RydWN0IGt2bV9kZXZpY2VfYXR0ciAqYXR0cilcXG4tLVxcbmFyY2gvcmlzY3Yva3ZtL2FpYV9kZXZpY2UuYy01NDUtXFxuYXJjaC9yaXNjdi9rdm0vYWlhX2RldmljZS5jOjU0NjpzdHJ1Y3Qga3ZtX2RldmljZV9vcHMga3ZtX3Jpc2N2X2FpYV9kZXZpY2Vfb3BzID0ge1xcbmFyY2gvcmlzY3Yva3ZtL2FpYV9kZXZpY2UuYy01NDctXFx0Lm5hbWUgPSBcXFwia3ZtLXJpc2N2LWFpYVxcXCIsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDA2OjE5OjQwLjk0MjQxMjMxM1oiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NzExNDg2ODc4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBLVk0gRGV2aWNlIFJlZ2lzdHJhdGlvbiBhbmQgQXR0cmlidXRlIFNldHRpbmcqKlxuXG5Pa2F5LCBzbyBJJ20gdHJhY2luZyB0aGlzIEtWTSBkZXZpY2UgcmVnaXN0cmF0aW9uIHByb2Nlc3MuIEl0IGxvb2tzIGxpa2UgYGt2bV9yZWdpc3Rlcl9kZXZpY2Vfb3BzYCBpcyB3aGVyZSB0aGUgY29yZSByZWdpc3RyYXRpb24gaGFwcGVucywgYXMgZXhwZWN0ZWQuIFRoZSBhY3R1YWwgdXNlci1mYWNpbmcgZW50cnkgcG9pbnQgYXBwZWFycyB0byBiZSB0aGUgYEtWTV9DUkVBVEVfREVWSUNFYCBpb2N0bCwgd2hpY2ggdGhlbiBjYWxscyBga3ZtX2lvY3RsX2NyZWF0ZV9kZXZpY2VgIOKAkyByaWdodCwgaW4gYHZpcnQva3ZtL2t2bV9tYWluLmNgLiBUaGF0LCBpbiB0dXJuLCBpbnZva2VzIHRoZSBgY3JlYXRlYCBvcGVyYXRpb24uIEFuZCwgdGhlIGBLVk1fU0VUX0RFVklDRV9BVFRSYCBpb2N0bCB0aGVuIHVzZXMgdGhlIGBzZXRfYXR0cmAgZnVuY3Rpb24uXG5cbkkgc2VlIHRoYXQgYGFpYV9zZXRfYXR0cmAgaXMgZGVmaW5lZCBhcyBgc3RhdGljYCwgYnV0IGl0cyBhZGRyZXNzIGlzIHN0aWxsIHRha2VuLiBJdCdzIHByb2JhYmx5IHZpc2libGUgaW4ga2FsbHN5bXMsIGJ1dCBpdCdzIHByb2JhYmx5IGJldHRlciB0byBmb2N1cyBvbiB0aGUgYGt2bV92bV9pb2N0bF9lbmFibGVfY2FwYCBmdW5jdGlvbiwgd2hpY2ggaXMgZXhwbGljaXRseSBtb2RpZmllZCBhbmQgaXNuJ3QgYHN0YXRpY2AsIHdoaWNoIG1ha2VzIG1vcmUgc2Vuc2UgZm9yIGEgZnVuY3Rpb24gdGhhdCdzIGxpa2VseSBleHBvc2VkIG9yIGludGVuZGVkIGZvciBtYW5pcHVsYXRpb24uXG5cbldhaXQsIGBrdm1fdm1faW9jdGxfZW5hYmxlX2NhcGAgaXMgaW4gYGFyY2gvcmlzY3Yva3ZtL3ZtLmNgPyBUaGF0J3MgaW50ZXJlc3RpbmcsIEkgbmVlZCB0byBjaGVjayB0aGUgcmlzY3Ytc3BlY2lmaWMgaW1wbGVtZW50YXRpb24gdG8gdW5kZXJzdGFuZCBob3cgdGhpcyBpcyBoYW5kbGVkLiBMZXQncyBkZWx2ZSBpbnRvIGBhcmNoL3Jpc2N2L2t2bS92bS5jYCBhbmQgc2VlIHdoYXQgZWxzZSBpcyBwcmVzZW50IHRoZXJlLCB0aGVyZSBtaWdodCBiZSBvdGhlciBSSVNDLVYgc3BlY2lmaWMgaW1wbGVtZW50YXRpb25zIHRvIGV4YW1pbmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwMTU3LCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTk0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDA2OjE5OjQ2LjY1MzkwMjgzMVoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NzAwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJhcmNoL3Jpc2N2L2t2bS92bS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDIxMCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDIxMDpcXHRcXHR9XFxuIDIxMTpcXHRcXG4gMjEyOlxcdFxcdHJldHVybiByO1xcbiAyMTM6XFx0fVxcbiAyMTQ6XFx0XFxuIDIxNTpcXHRpbnQga3ZtX3ZtX2lvY3RsX2VuYWJsZV9jYXAoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX2VuYWJsZV9jYXAgKmNhcClcXG4gMjE2OlxcdHtcXG4gMjE3OlxcdFxcdGlmIChjYXAtXFx1MDAzZWZsYWdzKVxcbiAyMTg6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIDIxOTpcXHRcXG4gMjIwOlxcdFxcdHN3aXRjaCAoY2FwLVxcdTAwM2VjYXApIHtcXG4gMjIxOlxcdFxcdGNhc2UgS1ZNX0NBUF9SSVNDVl9NUF9TVEFURV9SRVNFVDpcXG4gMjIyOlxcdFxcdFxcdGt2bS1cXHUwMDNlYXJjaC5tcF9zdGF0ZV9yZXNldCA9IHRydWU7XFxuIDIyMzpcXHRcXHRcXHRyZXR1cm4gMDtcXG4gMjI0OlxcdFxcdGNhc2UgS1ZNX0NBUF9WTV9HUEFfQklUUzoge1xcbiAyMjU6XFx0XFx0XFx0dW5zaWduZWQgbG9uZyBncGFfYml0cyA9IGNhcC1cXHUwMDNlYXJnc1swXTtcXG4gMjI2OlxcdFxcdFxcdHVuc2lnbmVkIGxvbmcgbmV3X2xldmVscztcXG4gMjI3OlxcdFxcdFxcdGludCByID0gMDtcXG4gMjI4OlxcdFxcbiAyMjk6XFx0XFx0XFx0LyogRGVjaWRlIHRhcmdldCBwZ2QgbGV2ZWxzIGZyb20gcmVxdWVzdGVkIGdwYV9iaXRzICovXFxuIDIzMDpcXHQjaWZkZWYgQ09ORklHXzY0QklUXFxuIDIzMTpcXHRcXHRcXHRpZiAoZ3BhX2JpdHMgXFx1MDAzYz0gNDEpXFxuIDIzMjpcXHRcXHRcXHRcXHRuZXdfbGV2ZWxzID0gMzsgICAgICAgIC8qIFN2Mzl4NCAqL1xcbiAyMzM6XFx0XFx0XFx0ZWxzZSBpZiAoZ3BhX2JpdHMgXFx1MDAzYz0gNTApXFxuIDIzNDpcXHRcXHRcXHRcXHRuZXdfbGV2ZWxzID0gNDsgICAgICAgIC8qIFN2NDh4NCAqL1xcbiAyMzU6XFx0XFx0XFx0ZWxzZSBpZiAoZ3BhX2JpdHMgXFx1MDAzYz0gNTkpXFxuIDIzNjpcXHRcXHRcXHRcXHRuZXdfbGV2ZWxzID0gNTsgICAgICAgIC8qIFN2NTd4NCAqL1xcbiAyMzc6XFx0XFx0XFx0ZWxzZVxcbiAyMzg6XFx0XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIDIzOTpcXHQjZWxzZVxcbiAyNDA6XFx0XFx0XFx0LyogMzItYml0OiBvbmx5IFN2MzJ4NCovXFxuIDI0MTpcXHRcXHRcXHRpZiAoZ3BhX2JpdHMgXFx1MDAzYz0gMzQpXFxuIDI0MjpcXHRcXHRcXHRcXHRuZXdfbGV2ZWxzID0gMjtcXG4gMjQzOlxcdFxcdFxcdGVsc2VcXG4gMjQ0OlxcdFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiAyNDU6XFx0I2VuZGlmXFxuIDI0NjpcXHRcXHRcXHRpZiAobmV3X2xldmVscyBcXHUwMDNlIGt2bV9yaXNjdl9nc3RhZ2VfbWF4X3BnZF9sZXZlbHMpXFxuIDI0NzpcXHRcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gMjQ4OlxcdFxcbiAyNDk6XFx0XFx0XFx0LyogRm9sbG93IEtWTSdzIGxvY2sgb3JkZXJpbmc6IGt2bS1cXHUwMDNlbG9jayAtXFx1MDAzZSBrdm0tXFx1MDAzZXNsb3RzX2xvY2suICovXFxuIDI1MDpcXHRcXHRcXHRtdXRleF9sb2NrKFxcdTAwMjZrdm0tXFx1MDAzZWxvY2spO1xcbiAyNTE6XFx0XFx0XFx0bXV0ZXhfbG9jayhcXHUwMDI2a3ZtLVxcdTAwM2VzbG90c19sb2NrKTtcXG4gMjUyOlxcdFxcbiAyNTM6XFx0XFx0XFx0aWYgKGt2bS1cXHUwMDNlY3JlYXRlZF92Y3B1cyB8fCAha3ZtX2FyZV9hbGxfbWVtc2xvdHNfZW1wdHkoa3ZtKSB8fFxcbiAyNTQ6XFx0XFx0XFx0ICAgIGt2bV9yaXNjdl9haWFfaW5pdGlhbGl6ZWQoa3ZtKSlcXG4gMjU1OlxcdFxcdFxcdFxcdHIgPSAtRUJVU1k7XFxuIDI1NjpcXHRcXHRcXHRlbHNlXFxuIDI1NzpcXHRcXHRcXHRcXHRrdm0tXFx1MDAzZWFyY2gucGdkX2xldmVscyA9IG5ld19sZXZlbHM7XFxuIDI1ODpcXHRcXG4gMjU5OlxcdFxcdFxcdG11dGV4X3VubG9jayhcXHUwMDI2a3ZtLVxcdTAwM2VzbG90c19sb2NrKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMDY6MTk6NDYuNjUzOTgyNDkxWiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYwMDUwMDU3MjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBBSUEgSW5pdGlhbGl6YXRpb24gQ2hhbmdlcyoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgbWFraW5nIGEgZnVuY3Rpb25hbCBjaGFuZ2UsIHNwZWNpZmljYWxseSBhZGRpbmcgYSBga3ZtX3Jpc2N2X2FpYV9pbml0aWFsaXplZChrdm0pYCBjaGVjayB3aXRoaW4gYGt2bV92bV9pb2N0bF9lbmFibGVfY2FwYC4gVGhlIGtleSB0YWtlYXdheSBpcyBwcmV2ZW50aW5nIG1vZGlmaWNhdGlvbnMgdG8gYHBnZF9sZXZlbHNgIG9uY2UgdGhlIEFJQSAoQWR2YW5jZWQgSW50ZXJydXB0IEFyY2hpdGVjdHVyZSkgaGFzIGJlZW4gaW5pdGlhbGl6ZWQuIFRoYXQncyBhIHNvbGlkLCB0YXJnZXRlZCBhcHByb2FjaCB0byBtYWludGFpbiBzeXN0ZW0gaW50ZWdyaXR5IGFmdGVyIGEgY3JpdGljYWwgcG9pbnQuXG5cbkJleW9uZCB0aGF0LCBJIHNlZSB0aGUgYWRkaXRpb24gb2YgYGFpYV9jaGVja19hZGRyX3JhbmdlYCBhbmQgYGFpYV92YWxpZGF0ZV9hZGRyX3Jhbmdlc2AgaW4gYGFpYV9kZXZpY2UuY2AuIFRoZXNlIGFyZSBjcnVjaWFsLCBvYnZpb3VzbHksIGZvciBhZGRyZXNzIHJhbmdlIHZhbGlkYXRpb24gYW5kIGFyZSBzdWJzZXF1ZW50bHkgYmVpbmcgY2FsbGVkIGZyb20gc2V2ZXJhbCBvdGhlciBmdW5jdGlvbnMsIG5hbWVseSBgYWlhX2FwbGljX2FkZHJgLCBgYWlhX2ltc2ljX2FkZHJgLCBhbmQgYGFpYV9pbml0YC4gU2luY2UgdGhleSBhcmUgc3RhdGljLCB0aGV5IHdvbid0IHNob3cgdXAgaW4gdGhlIGBGb2N1c1N5bWJvbHNgLCBidXQgdGhhdCBpcyBleHBlY3RlZC5cblxuSG1tLCBsZXQncyBzZWUsIGBrdm1fdm1faW9jdGxfZW5hYmxlX2NhcGAgaXMgYSBnb29kIHNwb3QgZm9yIGluc3BlY3Rpb24uIEFyZSB0aGVyZSBhbnkgb3RoZXIgbm9uLXN0YXRpYyBmdW5jdGlvbnMgd2l0aGluIGBhaWFfZGV2aWNlLmNgIHRoYXQgbWlnaHQgYmUgd29ydGggY29uc2lkZXJpbmc/IEknbGwgbmVlZCB0byBjaGVjayB0aGUgY29kZWJhc2UgdG8gdmVyaWZ5LiBJIG5lZWQgdG8gYmUgc3VyZSB0aGF0IEkgYW0gbm90IG1pc3NpbmcgYW55dGhpbmcgdGhhdCBtaWdodCBhbHNvIGltcGFjdCBob3cgdGhpcyBjaGFuZ2Ugb3BlcmF0ZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExNDg2LCJPdXRwdXRUb2tlbnMiOjU2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTYzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMDY6MTk6NTIuNjU4OTkwODY0WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjA0NzM1MDMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiXlthLXpBLVowLTlfXSsgW2EtekEtWjAtOV9dK1xcXFwoXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gvcmlzY3Yva3ZtL2FpYV9kZXZpY2UuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3Jpc2N2L2t2bS9haWFfZGV2aWNlLmM9NTQ2PXN0cnVjdCBrdm1fZGV2aWNlX29wcyBrdm1fcmlzY3ZfYWlhX2RldmljZV9vcHMgPSB7XFxuLS1cXG5hcmNoL3Jpc2N2L2t2bS9haWFfZGV2aWNlLmMtNTU0LVxcbmFyY2gvcmlzY3Yva3ZtL2FpYV9kZXZpY2UuYzo1NTU6aW50IGt2bV9yaXNjdl92Y3B1X2FpYV91cGRhdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbmFyY2gvcmlzY3Yva3ZtL2FpYV9kZXZpY2UuYy01NTYte1xcbi0tXFxuYXJjaC9yaXNjdi9rdm0vYWlhX2RldmljZS5jLTU2NC1cXG5hcmNoL3Jpc2N2L2t2bS9haWFfZGV2aWNlLmM6NTY1OnZvaWQga3ZtX3Jpc2N2X3ZjcHVfYWlhX3Jlc2V0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG5hcmNoL3Jpc2N2L2t2bS9haWFfZGV2aWNlLmMtNTY2LXtcXG4tLVxcbmFyY2gvcmlzY3Yva3ZtL2FpYV9kZXZpY2UuYy01ODAtXFxuYXJjaC9yaXNjdi9rdm0vYWlhX2RldmljZS5jOjU4MTp2b2lkIGt2bV9yaXNjdl92Y3B1X2FpYV9pbml0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG5hcmNoL3Jpc2N2L2t2bS9haWFfZGV2aWNlLmMtNTgyLXtcXG4tLVxcbmFyY2gvcmlzY3Yva3ZtL2FpYV9kZXZpY2UuYy01OTktXFxuYXJjaC9yaXNjdi9rdm0vYWlhX2RldmljZS5jOjYwMDp2b2lkIGt2bV9yaXNjdl92Y3B1X2FpYV9kZWluaXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbmFyY2gvcmlzY3Yva3ZtL2FpYV9kZXZpY2UuYy02MDEte1xcbi0tXFxuYXJjaC9yaXNjdi9rdm0vYWlhX2RldmljZS5jLTYwOS1cXG5hcmNoL3Jpc2N2L2t2bS9haWFfZGV2aWNlLmM6NjEwOmludCBrdm1fcmlzY3ZfYWlhX2luamVjdF9tc2lfYnlfaWQoc3RydWN0IGt2bSAqa3ZtLCB1MzIgaGFydF9pbmRleCxcXG5hcmNoL3Jpc2N2L2t2bS9haWFfZGV2aWNlLmMtNjExLVxcdFxcdFxcdFxcdCAgIHUzMiBndWVzdF9pbmRleCwgdTMyIGlpZClcXG4tLVxcbmFyY2gvcmlzY3Yva3ZtL2FpYV9kZXZpY2UuYy02MzAtXFxuYXJjaC9yaXNjdi9rdm0vYWlhX2RldmljZS5jOjYzMTppbnQga3ZtX3Jpc2N2X2FpYV9pbmplY3RfbXNpKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9tc2kgKm1zaSlcXG5hcmNoL3Jpc2N2L2t2bS9haWFfZGV2aWNlLmMtNjMyLXtcXG4tLVxcbmFyY2gvcmlzY3Yva3ZtL2FpYV9kZXZpY2UuYy02NjQtXFxuYXJjaC9yaXNjdi9rdm0vYWlhX2RldmljZS5jOjY2NTppbnQga3ZtX3Jpc2N2X2FpYV9pbmplY3RfaXJxKHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgaW50IGlycSwgYm9vbCBsZXZlbClcXG5hcmNoL3Jpc2N2L2t2bS9haWFfZGV2aWNlLmMtNjY2LXtcXG4tLVxcbmFyY2gvcmlzY3Yva3ZtL2FpYV9kZXZpY2UuYy02NzQtXFxuYXJjaC9yaXNjdi9rdm0vYWlhX2RldmljZS5jOjY3NTp2b2lkIGt2bV9yaXNjdl9haWFfaW5pdF92bShzdHJ1Y3Qga3ZtICprdm0pXFxuYXJjaC9yaXNjdi9rdm0vYWlhX2RldmljZS5jLTY3Ni17XFxuLS1cXG5hcmNoL3Jpc2N2L2t2bS9haWFfZGV2aWNlLmMtNzAwLVxcbmFyY2gvcmlzY3Yva3ZtL2FpYV9kZXZpY2UuYzo3MDE6dm9pZCBrdm1fcmlzY3ZfYWlhX2Rlc3Ryb3lfdm0oc3RydWN0IGt2bSAqa3ZtKVxcbmFyY2gvcmlzY3Yva3ZtL2FpYV9kZXZpY2UuYy03MDIte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQwNjoxOTo1Mi44MTk0ODY1NThaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjQxNDY5MTY3MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiBBSUEgRGV2aWNlIEluaXRpYWxpemF0aW9uKipcblxuT2theSwgc28gSSdtIHRyYWNpbmcgdGhlIGluaXRpYWxpemF0aW9uIGFuZCBhdHRyaWJ1dGUgc2V0dGluZyBmb3IgdGhlIEFJQSBkZXZpY2UsIGFuZCBpdCBzZWVtcyBsaWtlIHRoZSBrZXkgaXMgcmVhbGx5IGJ1cmllZCB3aXRoaW4gdGhlIGBhaWFfZGV2aWNlLmNgIGZpbGUuIE5vbmUgb2YgdGhlIGZ1bmN0aW9ucyAqd2l0aGluKiB0aGF0IGZpbGUgYXJlIGRpcmVjdGx5IGNhbGxlZCBmcm9tIG91dHNpZGUsIHdoaWNoIGlzIGFsd2F5cyBhIHBhaW4uIFRoZXkgYXJlIHN0YXRpYy4gQnV0IEkndmUgZ290IGl0LlxuXG5gYWlhX2luaXRgIHNlZW1zIHRvIGJlIHRoZSBjcml0aWNhbCBlbnRyeSBwb2ludCB3aXRoaW4gYGFpYV9kZXZpY2UuY2AsIGFuZCB0aGF0J3MgdHJpZ2dlcmVkIGZyb20gYGFpYV9zZXRfYXR0cmAuIEFuZCAqdGhhdCogZnVuY3Rpb24sIGluIHR1cm4sIGlzIGludm9rZWQgd2hlbiBhIGBLVk1fU0VUX0RFVklDRV9BVFRSYCBpb2N0bCBpcyBpc3N1ZWQuIFRoaXMgaXMgdGhlIHJvb3QhIFRoZSBzYW1lIGdvZXMgZm9yIGBhaWFfYXBsaWNfYWRkcmAgYW5kIGBhaWFfaW1zaWNfYWRkcmAsIHdoaWNoIGFyZSBpbnZva2VkIHdpdGhpbiBgYWlhX2NvbmZpZ2AuIFRoaXMgYWxsIHRyYWNrcyBiYWNrIHRvIHRoYXQgYEtWTV9TRVRfREVWSUNFX0FUVFJgIGlvY3RsIG9uIHRoZSBBSUEgZGV2aWNlLlxuXG5TbyB0aGUgZ2VuZXJpYyBLVk0gZnVuY3Rpb24gdGhhdCBoYW5kbGVzIGBLVk1fU0VUX0RFVklDRV9BVFRSYCBpcyBga3ZtX2RldmljZV9pb2N0bF9hdHRyYCBpbiBgdmlydC9rdm0va3ZtX21haW4uY2AuIEJ1dCBga3ZtX2RldmljZV9pb2N0bF9hdHRyYCBpcyB0b28gZ2VuZXJpYywgd2hpY2ggaXMgdGhlIHByb2JsZW0gd2l0aCB0aGVzZSBnZW5lcmljIGVudHJ5IHBvaW50cy4gU28gSSdtIG5vdCBnb2luZyB0byBhZGQgaXQuXG5cblNpbmNlIHRoZSBmdW5jdGlvbnMgbW9kaWZpZWQgaW4gYGFpYV9kZXZpY2UuY2AgYXJlIGFsbCBzdGF0aWMsIEkgY2FuJ3QganVzdCBsaXN0IHRoZW0gZGlyZWN0bHkuIFRoZXkgYXJlIGludGVybmFsIGFuZCBoaWRkZW4uIE5vdGhpbmcgZWxzZSBpbiBgYWlhX2RldmljZS5jYCBjYW4gYmUgbGlzdGVkLiBIb3dldmVyLCBhIGtleSBwb2ludCBvZiBpbml0aWFsaXphdGlvbiBpcyBga3ZtX3ZtX2lvY3RsX2VuYWJsZV9jYXBgLiBJJ20gcHJldHR5IHN1cmUgdGhhdCB3aWxsIGdpdmUgbWUgYSBnb29kIGVudHJ5IHBvaW50LlxuXG5KdXN0IHRvIGJlIHN1cmUsIEkgbmVlZCB0byBkb3VibGUtY2hlY2sgdGhlIG5lY2Vzc2FyeSBLVk0gY29uZmlndXJhdGlvbi4gVGhlIGJhc2UgS1ZNIGNvbmZpZ3VyYXRpb24gd2lsbCBiZSBlbm91Z2gsIHNpbmNlIGBLVk1gIGl0c2VsZiBkZXBlbmRzIG9uIGBSSVNDVl9TQklgIGFuZCBgTU1VYC4gSnVzdCB0byBiZSBzYWZlLCBJJ20gZ29pbmcgdG8gbG9vayBmb3Igb3RoZXIgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMuIERvZXMgYEtWTV9ERVZfUklTQ1ZfQUlBX0NUUkxfSU5JVGAgaGF2ZSBhbnkgZGVwZW5kZW5jaWVzP1xuXG5cbiIsIklucHV0VG9rZW5zIjoxMjgwNCwiT3V0cHV0VG9rZW5zIjo0MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM0NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQwNjoxOTo1OS4yMzQxODAzNDFaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUwMDg4MDk1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIktWTV9ERVZfUklTQ1ZfQUlBX0NUUkxfSU5JVFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3Jpc2N2L2t2bS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9yaXNjdi9rdm0vYWlhX2RldmljZS5jPTM1OT1zdGF0aWMgaW50IGFpYV9zZXRfYXR0cihzdHJ1Y3Qga3ZtX2RldmljZSAqZGV2LCBzdHJ1Y3Qga3ZtX2RldmljZV9hdHRyICphdHRyKVxcbi0tXFxuYXJjaC9yaXNjdi9rdm0vYWlhX2RldmljZS5jLTM5NC1cXHRcXHRzd2l0Y2ggKHR5cGUpIHtcXG5hcmNoL3Jpc2N2L2t2bS9haWFfZGV2aWNlLmM6Mzk1OlxcdFxcdGNhc2UgS1ZNX0RFVl9SSVNDVl9BSUFfQ1RSTF9JTklUOlxcbmFyY2gvcmlzY3Yva3ZtL2FpYV9kZXZpY2UuYy0zOTYtXFx0XFx0XFx0bXV0ZXhfbG9jayhcXHUwMDI2ZGV2LVxcdTAwM2Vrdm0tXFx1MDAzZWxvY2spO1xcbi0tXFxuYXJjaC9yaXNjdi9rdm0vYWlhX2RldmljZS5jPTUwMT1zdGF0aWMgaW50IGFpYV9oYXNfYXR0cihzdHJ1Y3Qga3ZtX2RldmljZSAqZGV2LCBzdHJ1Y3Qga3ZtX2RldmljZV9hdHRyICphdHRyKVxcbi0tXFxuYXJjaC9yaXNjdi9rdm0vYWlhX2RldmljZS5jLTUyNi1cXHRcXHRzd2l0Y2ggKGF0dHItXFx1MDAzZWF0dHIpIHtcXG5hcmNoL3Jpc2N2L2t2bS9haWFfZGV2aWNlLmM6NTI3OlxcdFxcdGNhc2UgS1ZNX0RFVl9SSVNDVl9BSUFfQ1RSTF9JTklUOlxcbmFyY2gvcmlzY3Yva3ZtL2FpYV9kZXZpY2UuYy01MjgtXFx0XFx0XFx0cmV0dXJuIDA7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDA2OjE5OjU5LjI4NDI3NjUxNVoiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3MjI4ODE4NzM0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIEtWTSBSSVNDLVYgQUlBIERldmljZSBDb25maWd1cmF0aW9uIENoYW5nZXMqKlxuXG5BbHJpZ2h0LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEl0IHNlZW1zIHdlJ3JlIGxvb2tpbmcgYXQgbW9kaWZpY2F0aW9ucyB3aXRoaW4gYGFpYV9kZXZpY2UuY2AuIEZyb20gd2hhdCBJIGdhdGhlciwgdGhpcyBpcyBkaXJlY3RseSByZWxhdGVkIHRvIEtWTSBjb25maWd1cmF0aW9ucywgc3BlY2lmaWNhbGx5IGNvbmNlcm5pbmcgdGhlIEFJQSBhcmNoaXRlY3R1cmUgZm9yIFJJU0MtVi5cblxuTXkgYW5hbHlzaXMgcmV2ZWFscyBhIHNlcmllcyBvZiBjcnVjaWFsIGNoYW5nZXM6XG5cbjEuICBBIG5ldyBmdW5jdGlvbiwgYGFpYV9jaGVja19hZGRyX3JhbmdlYCwgaGFzIGJlZW4gaW50cm9kdWNlZC5cbjIuICBgYWlhX2FwbGljX2FkZHJgIGhhcyBiZWVuIHVwZGF0ZWQgdG8gdXRpbGl6ZSB0aGlzIG5ldyB2YWxpZGF0aW9uIGNoZWNrLlxuMy4gIFNpbWlsYXJseSwgYGFpYV9pbXNpY19hZGRyYCBub3cgYWxzbyBsZXZlcmFnZXMgYGFpYV9jaGVja19hZGRyX3JhbmdlYC5cbjQuICBBbm90aGVyIGZ1bmN0aW9uLCBgYWlhX3ZhbGlkYXRlX2FkZHJfcmFuZ2VzYCwgaGFzIGJlZW4gYWRkZWQgdG8gdGhlIG1peC5cbjUuICBgYWlhX2luaXRgIGhhcyBiZWVuIG1vZGlmaWVkIHRvIGluY29ycG9yYXRlIHRoZSBmdW5jdGlvbmFsaXR5IG9mIGBhaWFfdmFsaWRhdGVfYWRkcl9yYW5nZXNgLlxuNi4gIEFuZCBpbXBvcnRhbnRseSwgYGt2bV92bV9pb2N0bF9lbmFibGVfY2FwYCBub3cgaW5jbHVkZXMgYSBjaGVjayBmb3IgYGt2bV9yaXNjdl9haWFfaW5pdGlhbGl6ZWQoa3ZtKWAuXG5cbkVzc2VudGlhbGx5LCB0aGVzZSBhcmUgZnVuY3Rpb25hbCBpbXByb3ZlbWVudHMgdG8gdGhlIEtWTSBSSVNDLVYgQUlBIGRldmljZSBjb25maWd1cmF0aW9uLCBwcmltYXJpbHkgYWltZWQgYXQgcHJldmVudGluZyBpc3N1ZXMuIFNwZWNpZmljYWxseSwgdGhleSdyZSBkZXNpZ25lZCB0byBzdG9wIGludmFsaWQgYWRkcmVzcyByYW5nZXMgZnJvbSBiZWluZyBzZXQgYW5kIHRvIHByZXZlbnQgdGhlIG1vZGlmaWNhdGlvbiBvZiBgcGdkX2xldmVsc2AgYWZ0ZXIgQUlBIGluaXRpYWxpemF0aW9uLiBUaGlzIGlzIGEgdmVyeSB0YXJnZXRlZCBzZXQgb2YgY2hhbmdlcy5cblxuVGhlc2UgY2hhbmdlcyBhcmUgY2xlYXJseSBjcml0aWNhbCBmcm9tIGEgc2VjdXJpdHkgc3RhbmRwb2ludC4gR2l2ZW4gdGhhdCB3ZSdyZSBkZWFsaW5nIHdpdGggS1ZNLCB3aGljaCBpcyBhIGtleSBjb21wb25lbnQgZm9yIHZpcnR1YWxpemF0aW9uLCB0aGVzZSBmdW5jdGlvbmFsIGNoYW5nZXMgd2FycmFudCB0aG9yb3VnaCBmdXp6aW5nLiBNeSBwcmltYXJ5IGZvY3VzIHdpbGwgYmUgb24gYGt2bV92bV9pb2N0bF9lbmFibGVfY2FwYC4gVGhlIGNvbmZpZ3VyYXRpb24gY29udGV4dCBpcyBgS1ZNYC4gSSBuZWVkIHRvIGVuc3VyZSB0aGF0IHRoZSBuZXcgdmFsaWRhdGlvbiBsb2dpYyBoYW5kbGVzIGFsbCBwb3NzaWJsZSBlZGdlIGNhc2VzIHdoZW4gaW50ZXJhY3Rpbmcgd2l0aCB0aGVzZSBpb2N0bCBoYW5kbGVycy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM5MjIsIk91dHB1dFRva2VucyI6MTMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzIzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDA2OjIwOjA2LjUxMzA5ODA5MVoiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg2MDA2ODIyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJLVk1cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJrdm1fdm1faW9jdGxfZW5hYmxlX2NhcFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYWRkcmVzcyByYW5nZSB2YWxpZGF0aW9uIGZvciB0aGUgUklTQy1WIEFJQSAoQWR2YW5jZWQgSW50ZXJydXB0IEFyY2hpdGVjdHVyZSkgS1ZNIGRldmljZSBhbmQgcHJldmVudHMgY2hhbmdpbmcgdGhlIFZNJ3MgcGdkX2xldmVscyBhZnRlciB0aGUgQUlBIGRldmljZSBoYXMgYmVlbiBpbml0aWFsaXplZC4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byByZWFjaGFibGUgS1ZNIGlvY3RsIGhhbmRsZXJzIChLVk1fU0VUX0RFVklDRV9BVFRSIGFuZCBLVk1fRU5BQkxFX0NBUCkgYW5kIHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIHRoZSBuZXcgdmFsaWRhdGlvbiBsb2dpYyBoYW5kbGVzIGFsbCBlZGdlIGNhc2VzIGNvcnJlY3RseS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJLVk1cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJrdm1fdm1faW9jdGxfZW5hYmxlX2NhcFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYWRkcmVzcyByYW5nZSB2YWxpZGF0aW9uIGZvciB0aGUgUklTQy1WIEFJQSAoQWR2YW5jZWQgSW50ZXJydXB0IEFyY2hpdGVjdHVyZSkgS1ZNIGRldmljZSBhbmQgcHJldmVudHMgY2hhbmdpbmcgdGhlIFZNJ3MgcGdkX2xldmVscyBhZnRlciB0aGUgQUlBIGRldmljZSBoYXMgYmVlbiBpbml0aWFsaXplZC4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byByZWFjaGFibGUgS1ZNIGlvY3RsIGhhbmRsZXJzIChLVk1fU0VUX0RFVklDRV9BVFRSIGFuZCBLVk1fRU5BQkxFX0NBUCkgYW5kIHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIHRoZSBuZXcgdmFsaWRhdGlvbiBsb2dpYyBoYW5kbGVzIGFsbCBlZGdlIGNhc2VzIGNvcnJlY3RseS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMDY6MjA6MDYuNTk5MTExMTQyWiIsIlNlcSI6MjUsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4NzMwMTQ1OTE5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMDY6MjA6MDYuNTk5NzA2NTYyWiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjg3Mjk1NDU3MzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYm91bmRzIGNoZWNraW5nLCBvdmVyZmxvdyBwcmV2ZW50aW9uLCBhbmQgc3RhdGUgdmFsaWRhdGlvbiBmb3IgUklTQy1WIEtWTSBBSUEgKEFkdmFuY2VkIEludGVycnVwdCBBcmNoaXRlY3R1cmUpIGRldmljZSBhZGRyZXNzZXMgKEFQTElDIGFuZCBJTVNJQykuIEl0IGVuc3VyZXMgdGhhdCB0aGUgY29uZmlndXJlZCBndWVzdCBwaHlzaWNhbCBhZGRyZXNzZXMgZG8gbm90IG92ZXJmbG93IGFuZCBmaXQgd2l0aGluIHRoZSBndWVzdCBzdGFnZSBwYWdlIHRhYmxlIHNpemUuIFRoZXNlIGNoYW5nZXMgYWRkcmVzcyBwb3RlbnRpYWwgb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyBvciBpbnZhbGlkIGNvbmZpZ3VyYXRpb25zLCB3aGljaCBhcmUgdHlwaWNhbGx5IGNhdWdodCBieSBLQVNBTiBvciBzdGFuZGFyZCBrZXJuZWwgY2hlY2tzLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgc3RydWN0dXJlcyBjb3BpZWQgdG8gdXNlciBzcGFjZSwgbm9yIGRvZXMgaXQgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSBvciBpbmZvLWxlYWtzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgYjA2NDFjNzdiYWEzZGVkMDM5NGEzODY2MDZhNmJlOGEzYjlmNzU4NlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgQXVnIDEyIDA2OjE5OjA3IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvYXJjaC9yaXNjdi9rdm0vYWlhX2RldmljZS5jIGIvYXJjaC9yaXNjdi9rdm0vYWlhX2RldmljZS5jXG5pbmRleCBlZmM3YzBiY2ZiYTkyLi5lOTY5ZGJkYzRiOTcxIDEwMDY0NFxuLS0tIGEvYXJjaC9yaXNjdi9rdm0vYWlhX2RldmljZS5jXG4rKysgYi9hcmNoL3Jpc2N2L2t2bS9haWFfZGV2aWNlLmNcbkBAIC0xMCw3ICsxMCw5IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvYml0cy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvaXJxY2hpcC9yaXNjdi1pbXNpYy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgva3ZtX2hvc3QuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L292ZXJmbG93LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC91YWNjZXNzLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2Nhc20va3ZtX2dzdGFnZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjYXNtL2t2bV9pc2EuaFx1MDAzZVxuIFxuIHN0YXRpYyBpbnQgYWlhX2NyZWF0ZShzdHJ1Y3Qga3ZtX2RldmljZSAqZGV2LCB1MzIgdHlwZSlcbkBAIC0xNDIsMTcgKzE0NCwzNyBAQCBzdGF0aWMgaW50IGFpYV9jb25maWcoc3RydWN0IGt2bSAqa3ZtLCB1bnNpZ25lZCBsb25nIHR5cGUsXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4rc3RhdGljIGludCBhaWFfY2hlY2tfYWRkcl9yYW5nZShzdHJ1Y3Qga3ZtICprdm0sIHU2NCBhZGRyLCB1NjQgYWxpZ25tZW50LFxuK1x0XHRcdFx0dTY0IHNpemUpXG4re1xuK1x0dTY0IGVuZDtcbitcbitcdGlmICghSVNfQUxJR05FRChhZGRyLCBhbGlnbm1lbnQpKVxuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcbitcdGlmIChjaGVja19hZGRfb3ZlcmZsb3coYWRkciwgc2l6ZSwgXHUwMDI2ZW5kKSlcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXG4rXHRpZiAoZW5kIFx1MDAzZSBrdm1fcmlzY3ZfZ3N0YWdlX2dwYV9zaXplKGt2bS1cdTAwM2VhcmNoLnBnZF9sZXZlbHMpKVxuK1x0XHRyZXR1cm4gLUUyQklHO1xuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuIHN0YXRpYyBpbnQgYWlhX2FwbGljX2FkZHIoc3RydWN0IGt2bSAqa3ZtLCB1NjQgKmFkZHIsIGJvb2wgd3JpdGUpXG4ge1xuIFx0c3RydWN0IGt2bV9haWEgKmFpYSA9IFx1MDAyNmt2bS1cdTAwM2VhcmNoLmFpYTtcbitcdGludCByZXQ7XG4gXG4gXHRpZiAod3JpdGUpIHtcbiBcdFx0LyogV3JpdGVzIGNhbiBvbmx5IGJlIGRvbmUgYmVmb3JlIGlycWNoaXAgaXMgaW5pdGlhbGl6ZWQgKi9cbiBcdFx0aWYgKGt2bV9yaXNjdl9haWFfaW5pdGlhbGl6ZWQoa3ZtKSlcbiBcdFx0XHRyZXR1cm4gLUVCVVNZO1xuIFxuLVx0XHRpZiAoKmFkZHIgXHUwMDI2IChLVk1fREVWX1JJU0NWX0FQTElDX0FMSUdOIC0gMSkpXG4tXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHRcdHJldCA9IGFpYV9jaGVja19hZGRyX3JhbmdlKGt2bSwgKmFkZHIsIEtWTV9ERVZfUklTQ1ZfQVBMSUNfQUxJR04sXG4rXHRcdFx0XHRcdCAgIEtWTV9ERVZfUklTQ1ZfQVBMSUNfU0laRSk7XG4rXHRcdGlmIChyZXQpXG4rXHRcdFx0cmV0dXJuIHJldDtcbiBcbiBcdFx0YWlhLVx1MDAzZWFwbGljX2FkZHIgPSAqYWRkcjtcbiBcdH0gZWxzZVxuQEAgLTE2Niw2ICsxODgsNyBAQCBzdGF0aWMgaW50IGFpYV9pbXNpY19hZGRyKHN0cnVjdCBrdm0gKmt2bSwgdTY0ICphZGRyLFxuIHtcbiBcdHN0cnVjdCBrdm1fdmNwdSAqdmNwdTtcbiBcdHN0cnVjdCBrdm1fdmNwdV9haWEgKnZjcHVfYWlhO1xuK1x0aW50IHJldDtcbiBcbiBcdHZjcHUgPSBrdm1fZ2V0X3ZjcHUoa3ZtLCB2Y3B1X2lkeCk7XG4gXHRpZiAoIXZjcHUpXG5AQCAtMTc3LDggKzIwMCwxMCBAQCBzdGF0aWMgaW50IGFpYV9pbXNpY19hZGRyKHN0cnVjdCBrdm0gKmt2bSwgdTY0ICphZGRyLFxuIFx0XHRpZiAoa3ZtX3Jpc2N2X2FpYV9pbml0aWFsaXplZChrdm0pKVxuIFx0XHRcdHJldHVybiAtRUJVU1k7XG4gXG4tXHRcdGlmICgqYWRkciBcdTAwMjYgKEtWTV9ERVZfUklTQ1ZfSU1TSUNfQUxJR04gLSAxKSlcbi1cdFx0XHRyZXR1cm4gLUVJTlZBTDtcbitcdFx0cmV0ID0gYWlhX2NoZWNrX2FkZHJfcmFuZ2Uoa3ZtLCAqYWRkciwgS1ZNX0RFVl9SSVNDVl9JTVNJQ19BTElHTixcbitcdFx0XHRcdFx0ICAgS1ZNX0RFVl9SSVNDVl9JTVNJQ19TSVpFKTtcbitcdFx0aWYgKHJldClcbitcdFx0XHRyZXR1cm4gcmV0O1xuIFx0fVxuIFxuIFx0bXV0ZXhfbG9jayhcdTAwMjZ2Y3B1LVx1MDAzZW11dGV4KTtcbkBAIC0xOTEsNiArMjE2LDQwIEBAIHN0YXRpYyBpbnQgYWlhX2ltc2ljX2FkZHIoc3RydWN0IGt2bSAqa3ZtLCB1NjQgKmFkZHIsXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4rc3RhdGljIGludCBhaWFfdmFsaWRhdGVfYWRkcl9yYW5nZXMoc3RydWN0IGt2bSAqa3ZtKVxuK3tcbitcdHN0cnVjdCBrdm1fYWlhICphaWEgPSBcdTAwMjZrdm0tXHUwMDNlYXJjaC5haWE7XG4rXHRzdHJ1Y3Qga3ZtX3ZjcHVfYWlhICp2YWlhO1xuK1x0c3RydWN0IGt2bV92Y3B1ICp2Y3B1O1xuK1x0dW5zaWduZWQgbG9uZyBpZHg7XG4rXHRpbnQgcmV0O1xuK1xuK1x0aWYgKGFpYS1cdTAwM2Vucl9zb3VyY2VzKSB7XG4rXHRcdGlmIChhaWEtXHUwMDNlYXBsaWNfYWRkciA9PSBLVk1fUklTQ1ZfQUlBX1VOREVGX0FERFIpXG4rXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXG4rXHRcdHJldCA9IGFpYV9jaGVja19hZGRyX3JhbmdlKGt2bSwgYWlhLVx1MDAzZWFwbGljX2FkZHIsXG4rXHRcdFx0XHRcdCAgIEtWTV9ERVZfUklTQ1ZfQVBMSUNfQUxJR04sXG4rXHRcdFx0XHRcdCAgIEtWTV9ERVZfUklTQ1ZfQVBMSUNfU0laRSk7XG4rXHRcdGlmIChyZXQpXG4rXHRcdFx0cmV0dXJuIHJldDtcbitcdH1cbitcbitcdGt2bV9mb3JfZWFjaF92Y3B1KGlkeCwgdmNwdSwga3ZtKSB7XG4rXHRcdHZhaWEgPSBcdTAwMjZ2Y3B1LVx1MDAzZWFyY2guYWlhX2NvbnRleHQ7XG4rXHRcdGlmICh2YWlhLVx1MDAzZWltc2ljX2FkZHIgPT0gS1ZNX1JJU0NWX0FJQV9VTkRFRl9BRERSKVxuK1x0XHRcdHJldHVybiAtRUlOVkFMO1xuK1xuK1x0XHRyZXQgPSBhaWFfY2hlY2tfYWRkcl9yYW5nZShrdm0sIHZhaWEtXHUwMDNlaW1zaWNfYWRkcixcbitcdFx0XHRcdFx0ICAgS1ZNX0RFVl9SSVNDVl9JTVNJQ19BTElHTixcbitcdFx0XHRcdFx0ICAgS1ZNX0RFVl9SSVNDVl9JTVNJQ19TSVpFKTtcbitcdFx0aWYgKHJldClcbitcdFx0XHRyZXR1cm4gcmV0O1xuK1x0fVxuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuIHN0YXRpYyBncGFfdCBhaWFfaW1zaWNfcHBuKHN0cnVjdCBrdm1fYWlhICphaWEsIGdwYV90IGFkZHIpXG4ge1xuIFx0dTMyIGgsIGw7XG5AQCAtMjQ0LDkgKzMwMyw5IEBAIHN0YXRpYyBpbnQgYWlhX2luaXQoc3RydWN0IGt2bSAqa3ZtKVxuIFx0aWYgKGFpYS1cdTAwM2Vucl9pZHMgXHUwMDNjIGFpYS1cdTAwM2Vucl9zb3VyY2VzKVxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcbi1cdC8qIEFQTElDIGJhc2UgaXMgcmVxdWlyZWQgZm9yIG5vbi16ZXJvIG51bWJlciBvZiBzb3VyY2VzICovXG4tXHRpZiAoYWlhLVx1MDAzZW5yX3NvdXJjZXMgXHUwMDI2XHUwMDI2IGFpYS1cdTAwM2VhcGxpY19hZGRyID09IEtWTV9SSVNDVl9BSUFfVU5ERUZfQUREUilcbi1cdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHRyZXQgPSBhaWFfdmFsaWRhdGVfYWRkcl9yYW5nZXMoa3ZtKTtcbitcdGlmIChyZXQpXG4rXHRcdHJldHVybiByZXQ7XG4gXG4gXHQvKiBHcm91cCBpbmRleCBiaXRzIG11c3Qgbm90IG92ZXJsYXAgZ3Vlc3QgYW5kIEhBUlQgaW5kZXggYml0cy4gKi9cbiBcdGlmIChhaWEtXHUwMDNlbnJfZ3JvdXBfYml0cyBcdTAwMjZcdTAwMjZcbkBAIC0yNjMsMTIgKzMyMiw2IEBAIHN0YXRpYyBpbnQgYWlhX2luaXQoc3RydWN0IGt2bSAqa3ZtKVxuIFx0a3ZtX2Zvcl9lYWNoX3ZjcHUoaWR4LCB2Y3B1LCBrdm0pIHtcbiBcdFx0dmFpYSA9IFx1MDAyNnZjcHUtXHUwMDNlYXJjaC5haWFfY29udGV4dDtcbiBcbi1cdFx0LyogSU1TSUMgYmFzZSBpcyByZXF1aXJlZCAqL1xuLVx0XHRpZiAodmFpYS1cdTAwM2VpbXNpY19hZGRyID09IEtWTV9SSVNDVl9BSUFfVU5ERUZfQUREUikge1xuLVx0XHRcdHJldCA9IC1FSU5WQUw7XG4tXHRcdFx0Z290byBmYWlsX2NsZWFudXBfaW1zaWNzO1xuLVx0XHR9XG4tXG4gXHRcdC8qIEFsbCBJTVNJQ3Mgc2hvdWxkIGhhdmUgbWF0Y2hpbmcgYmFzZSBQUE4gKi9cbiBcdFx0aWYgKGJhc2VfcHBuID09IEtWTV9SSVNDVl9BSUFfVU5ERUZfQUREUilcbiBcdFx0XHRiYXNlX3BwbiA9IGFpYV9pbXNpY19wcG4oYWlhLCB2YWlhLVx1MDAzZWltc2ljX2FkZHIpO1xuZGlmZiAtLWdpdCBhL2FyY2gvcmlzY3Yva3ZtL3ZtLmMgYi9hcmNoL3Jpc2N2L2t2bS92bS5jXG5pbmRleCBhOWYwODNmZWViNzY3Li42NmVkZmFhODYyNDM1IDEwMDY0NFxuLS0tIGEvYXJjaC9yaXNjdi9rdm0vdm0uY1xuKysrIGIvYXJjaC9yaXNjdi9rdm0vdm0uY1xuQEAgLTI1MCw3ICsyNTAsOCBAQCBpbnQga3ZtX3ZtX2lvY3RsX2VuYWJsZV9jYXAoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX2VuYWJsZV9jYXAgKmNhcClcbiBcdFx0bXV0ZXhfbG9jayhcdTAwMjZrdm0tXHUwMDNlbG9jayk7XG4gXHRcdG11dGV4X2xvY2soXHUwMDI2a3ZtLVx1MDAzZXNsb3RzX2xvY2spO1xuIFxuLVx0XHRpZiAoa3ZtLVx1MDAzZWNyZWF0ZWRfdmNwdXMgfHwgIWt2bV9hcmVfYWxsX21lbXNsb3RzX2VtcHR5KGt2bSkpXG4rXHRcdGlmIChrdm0tXHUwMDNlY3JlYXRlZF92Y3B1cyB8fCAha3ZtX2FyZV9hbGxfbWVtc2xvdHNfZW1wdHkoa3ZtKSB8fFxuK1x0XHQgICAga3ZtX3Jpc2N2X2FpYV9pbml0aWFsaXplZChrdm0pKVxuIFx0XHRcdHIgPSAtRUJVU1k7XG4gXHRcdGVsc2VcbiBcdFx0XHRrdm0tXHUwMDNlYXJjaC5wZ2RfbGV2ZWxzID0gbmV3X2xldmVscztcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDA2OjIwOjA2LjU5OTcwNzQ4MloiLCJTZXEiOjI3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4NzI5NTExODU4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIFJJU0MtViBLVk0gQUlBIFBhdGNoKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBUaGlzIHBhdGNoIGlzIGZvY3VzZWQgb24gaGFyZGVuaW5nIHRoZSBSSVNDLVYgS1ZNIEFJQSBkZXZpY2UgY29kZSwgc3BlY2lmaWNhbGx5IGJ5IGFkZGluZyByaWdvcm91cyBhZGRyZXNzIHJhbmdlIHZhbGlkYXRpb24uIE15IGluaXRpYWwgcmVhZCB0ZWxscyBtZSBpdCdzIGFsbCBhYm91dCBib3VuZHMgY2hlY2tpbmcsIG92ZXJmbG93IHByb3RlY3Rpb24sIGFuZCBlbnN1cmluZyB0aGUgaW50ZXJuYWwgc3RhdGUgaXMgY29uc2lzdGVudC5cblxuSSBzZWUgdGhhdCBgYWlhX2NoZWNrX2FkZHJfcmFuZ2VgIGlzIGludHJvZHVjZWQgdG8gdmFsaWRhdGUgYWRkcmVzcyByYW5nZXMgZm9yIGJvdGggdGhlIEFQTElDIGFuZCBJTVNJQyBjb21wb25lbnRzLiBJdCBtZXRpY3Vsb3VzbHkgY2hlY2tzIGZvciBhbGlnbm1lbnQsIHBvdGVudGlhbCBvdmVyZmxvd3MgZHVyaW5nIGNhbGN1bGF0aW9ucywgYW5kIGNydWNpYWxseSwgZW5zdXJlcyB0aGUgZW5kIGFkZHJlc3MgZG9lc24ndCBleGNlZWQgdGhlIGBrdm1fcmlzY3ZfZ3N0YWdlX2dwYV9zaXplYC4gSSBhbHNvIG5vdGljZSBgYWlhX3ZhbGlkYXRlX2FkZHJfcmFuZ2VzYCBpcyBpbXBsZW1lbnRlZCB0byBoYW5kbGUgdmFsaWRhdGlvbiBvZiAqYWxsKiBBUExJQyBhbmQgSU1TSUMgYWRkcmVzc2VzIGR1cmluZyBgYWlhX2luaXRgLCBhZGRpbmcgZnVydGhlciBwcm9hY3RpdmUgbWVhc3VyZXMuIFRoZSBga3ZtX3ZtX2lvY3RsX2VuYWJsZV9jYXBgIGNvZGUgaGFzIGFsc28gYmVlbiB1cGRhdGVkIHRvIHJldHVybiBhbiBgLUVCVVNZYCBlcnJvciBpZiB3ZSdyZSB0cnlpbmcgdG8gc2V0IGBwZ2RfbGV2ZWxzYCB3aGlsZSB0aGUgQUlBIGlzIGFscmVhZHkgaW5pdGlhbGl6ZWQuXG5cbkFsbCBvZiB0aGVzZSBjaGFuZ2VzIHNjcmVhbSBkZWZlbnNlLWluLWRlcHRoIHRvIG1lLiBUaGUgb2JqZWN0aXZlIGlzIHRvIG1ha2UgS1ZNIGlvY3RscyBtb3JlIHJvYnVzdCBieSBwcmV2ZW50aW5nIGFueSBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzIG9yIGludmFsaWQgY29uZmlndXJhdGlvbnMuIFRoZSB0ZXh0IHNwZWNpZmljYWxseSBzdGF0ZXMgdGhlcmUgYXJlIG5vIG5ldyB1c2VyLXNwYWNlIHN0cnVjdHVyZXMgYW5kIHRoYXQgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLiBFc3NlbnRpYWxseSwgdGhpcyBwYXRjaCBpcyBhYm91dCBzdG9wcGluZyBiYWQgZGF0YSBmcm9tIGNvcnJ1cHRpbmcgdGhlIHZpcnR1YWxpemF0aW9uIGVudmlyb25tZW50LlxuXG5Ob3csIGdpdmVuIHRoZSBuYXR1cmUgb2YgdGhlc2UgY2hhbmdlcywgdGhlIHRleHQgc2F5cyB0aGF0IEtBU0FOIGFuZCBzdGFuZGFyZCBjaGVja3Mgc2hvdWxkIGNhdGNoIHRoZXNlIHR5cGVzIG9mIGJ1Z3MuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBcIk9rYXksIHRoYXQgc2VlbXMgbG9naWNhbC5cIiBCdXQsIEkgbmVlZCB0byBtYWtlIHN1cmUsIGxldCdzIGNvbmZpcm0gdGhlIGxhY2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkuIExldCdzIGRlbHZlIGluLlxuXG5gYWlhX2NoZWNrX2FkZHJfcmFuZ2VgIGlzIHRoZSBjcml0aWNhbCBmdW5jdGlvbiwgYW5kIGl0J3MgdGFraW5nIGFuIGBhZGRyYCwgYGFsaWdubWVudGAsIGFuZCBgc2l6ZWAuIEdvb2QsIGl0IHVzZXMgYGNoZWNrX2FkZF9vdmVyZmxvd2AuIEl0J3MgdXNlZCBieSBgYWlhX2FwbGljX2FkZHJgIGFuZCBgYWlhX2ltc2ljX2FkZHJgIGNhbGxlZCBmcm9tIGlvY3RscyAoS1ZNX1NFVF9ERVZJQ0VfQVRUUi9LVk1fR0VUX0RFVklDRV9BVFRSKS4gVGhlIGBhZGRyYCBhcmd1bWVudCBpcyBwYXNzZWQgYXMgYSBzaW1wbGUgdTY0LiBPa2F5LCBzbyBubyBwb2ludGVycyB0byB1bmluaXRpYWxpemVkIG1lbW9yeSBiZWluZyBsZWFrZWQgdG8gdXNlciBzcGFjZS5cblxuU28sIGFmdGVyIHRoaXMgZGVlcGVyIGRpdmUsIEkgY2FuIGNvbmNsdWRlIHdpdGggY29uZmlkZW5jZSB0aGF0LCBiYXNlZCBvbiBteSB1bmRlcnN0YW5kaW5nLCB0aGlzIHBhdGNoIGRvZXMgKm5vdCogcmVxdWlyZSBOZWVkc0tNU0FOIHRvIGJlIHRydWUuIEl0J3MgYWJvdXQgZGF0YSB2YWxpZGF0aW9uLCBub3QgbWVtb3J5IGluaXRpYWxpemF0aW9uIHZ1bG5lcmFiaWxpdGllcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MzgyMywiT3V0cHV0VG9rZW5zIjoxNDgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNjcsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQwNjoyMDoxNS4zMjkyMjM1M1oiLCJTZXEiOjI4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwMDYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBib3VuZHMgY2hlY2tpbmcsIG92ZXJmbG93IHByZXZlbnRpb24sIGFuZCBzdGF0ZSB2YWxpZGF0aW9uIGZvciBSSVNDLVYgS1ZNIEFJQSAoQWR2YW5jZWQgSW50ZXJydXB0IEFyY2hpdGVjdHVyZSkgZGV2aWNlIGFkZHJlc3NlcyAoQVBMSUMgYW5kIElNU0lDKS4gSXQgZW5zdXJlcyB0aGF0IHRoZSBjb25maWd1cmVkIGd1ZXN0IHBoeXNpY2FsIGFkZHJlc3NlcyBkbyBub3Qgb3ZlcmZsb3cgYW5kIGZpdCB3aXRoaW4gdGhlIGd1ZXN0IHN0YWdlIHBhZ2UgdGFibGUgc2l6ZS4gVGhlc2UgY2hhbmdlcyBhZGRyZXNzIHBvdGVudGlhbCBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzIG9yIGludmFsaWQgY29uZmlndXJhdGlvbnMsIHdoaWNoIGFyZSB0eXBpY2FsbHkgY2F1Z2h0IGJ5IEtBU0FOIG9yIHN0YW5kYXJkIGtlcm5lbCBjaGVja3MuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBzdHJ1Y3R1cmVzIGNvcGllZCB0byB1c2VyIHNwYWNlLCBub3IgZG9lcyBpdCBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IG9yIGluZm8tbGVha3MuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGJvdW5kcyBjaGVja2luZywgb3ZlcmZsb3cgcHJldmVudGlvbiwgYW5kIHN0YXRlIHZhbGlkYXRpb24gZm9yIFJJU0MtViBLVk0gQUlBIChBZHZhbmNlZCBJbnRlcnJ1cHQgQXJjaGl0ZWN0dXJlKSBkZXZpY2UgYWRkcmVzc2VzIChBUExJQyBhbmQgSU1TSUMpLiBJdCBlbnN1cmVzIHRoYXQgdGhlIGNvbmZpZ3VyZWQgZ3Vlc3QgcGh5c2ljYWwgYWRkcmVzc2VzIGRvIG5vdCBvdmVyZmxvdyBhbmQgZml0IHdpdGhpbiB0aGUgZ3Vlc3Qgc3RhZ2UgcGFnZSB0YWJsZSBzaXplLiBUaGVzZSBjaGFuZ2VzIGFkZHJlc3MgcG90ZW50aWFsIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMgb3IgaW52YWxpZCBjb25maWd1cmF0aW9ucywgd2hpY2ggYXJlIHR5cGljYWxseSBjYXVnaHQgYnkgS0FTQU4gb3Igc3RhbmRhcmQga2VybmVsIGNoZWNrcy4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IHN0cnVjdHVyZXMgY29waWVkIHRvIHVzZXIgc3BhY2UsIG5vciBkb2VzIGl0IGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgb3IgaW5mby1sZWFrcy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowhvdgn[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-12 05:54:50 +0000 UTC FinishedAt: 2026-08-12 06:20:15 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "5e6de6a2b522f659defacb1551d0465ba6ce13cf", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "5e6de6a2b522f659defacb1551d0465ba6ce13cf", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM" ], "series_id": "0d7440a9-770e-4182-84df-d9760416f363" }, "track": "KASAN", "fuzz": { "focus": [ "kvm" ], "focus_symbols": [ "kvm_vm_ioctl_enable_cap" ], "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+CgkJCTx0ZD4yMDI2LzA4LzEyIDA2OjE5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2t2bV92bV9pb2N0bF9lbmFibGVfY2FwJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBib3VuZHMgY2hlY2tpbmcsIG92ZXJmbG93IHByZXZlbnRpb24sIGFuZCBzdGF0ZSB2YWxpZGF0aW9uIGZvciBSSVNDLVYgS1ZNIEFJQSAoQWR2YW5jZWQgSW50ZXJydXB0IEFyY2hpdGVjdHVyZSkgZGV2aWNlIGFkZHJlc3NlcyAoQVBMSUMgYW5kIElNU0lDKS4gSXQgZW5zdXJlcyB0aGF0IHRoZSBjb25maWd1cmVkIGd1ZXN0IHBoeXNpY2FsIGFkZHJlc3NlcyBkbyBub3Qgb3ZlcmZsb3cgYW5kIGZpdCB3aXRoaW4gdGhlIGd1ZXN0IHN0YWdlIHBhZ2UgdGFibGUgc2l6ZS4gVGhlc2UgY2hhbmdlcyBhZGRyZXNzIHBvdGVudGlhbCBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzIG9yIGludmFsaWQgY29uZmlndXJhdGlvbnMsIHdoaWNoIGFyZSB0eXBpY2FsbHkgY2F1Z2h0IGJ5IEtBU0FOIG9yIHN0YW5kYXJkIGtlcm5lbCBjaGVja3MuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBzdHJ1Y3R1cmVzIGNvcGllZCB0byB1c2VyIHNwYWNlLCBub3IgZG9lcyBpdCBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IG9yIGluZm8tbGVha3MuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBhZGRyZXNzIHJhbmdlIHZhbGlkYXRpb24gZm9yIHRoZSBSSVNDLVYgQUlBIChBZHZhbmNlZCBJbnRlcnJ1cHQgQXJjaGl0ZWN0dXJlKSBLVk0gZGV2aWNlIGFuZCBwcmV2ZW50cyBjaGFuZ2luZyB0aGUgVk0mIzM5O3MgcGdkX2xldmVscyBhZnRlciB0aGUgQUlBIGRldmljZSBoYXMgYmVlbiBpbml0aWFsaXplZC4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byByZWFjaGFibGUgS1ZNIGlvY3RsIGhhbmRsZXJzIChLVk1fU0VUX0RFVklDRV9BVFRSIGFuZCBLVk1fRU5BQkxFX0NBUCkgYW5kIHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIHRoZSBuZXcgdmFsaWRhdGlvbiBsb2dpYyBoYW5kbGVzIGFsbCBlZGdlIGNhc2VzIGNvcnJlY3RseS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAwNjoxOTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGIwNjQxYzc3YmFhM2RlZDAzOTRhMzg2NjA2YTZiZThhM2I5Zjc1ODZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIEF1ZyAxMiAwNjoxOTowNyAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9hcmNoL3Jpc2N2L2t2bS9haWFfZGV2aWNlLmMgYi9hcmNoL3Jpc2N2L2t2bS9haWFfZGV2aWNlLmNcbmluZGV4IGVmYzdjMGJjZmJhOTIuLmU5NjlkYmRjNGI5NzEgMTAwNjQ0XG4tLS0gYS9hcmNoL3Jpc2N2L2t2bS9haWFfZGV2aWNlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvcmlzY3Yva3ZtL2FpYV9kZXZpY2UuY1xuQEAgLTEwLDcgJiM0MzsxMCw5IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvYml0cy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvaXJxY2hpcC9yaXNjdi1pbXNpYy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgva3ZtX2hvc3QuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9vdmVyZmxvdy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvdWFjY2Vzcy5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2FzbS9rdm1fZ3N0YWdlLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2Nhc20va3ZtX2lzYS5oXHUwMDNlXG4gXG4gc3RhdGljIGludCBhaWFfY3JlYXRlKHN0cnVjdCBrdm1fZGV2aWNlICpkZXYsIHUzMiB0eXBlKVxuQEAgLTE0MiwxNyAmIzQzOzE0NCwzNyBAQCBzdGF0aWMgaW50IGFpYV9jb25maWcoc3RydWN0IGt2bSAqa3ZtLCB1bnNpZ25lZCBsb25nIHR5cGUsXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4mIzQzO3N0YXRpYyBpbnQgYWlhX2NoZWNrX2FkZHJfcmFuZ2Uoc3RydWN0IGt2bSAqa3ZtLCB1NjQgYWRkciwgdTY0IGFsaWdubWVudCxcbiYjNDM7XHRcdFx0XHR1NjQgc2l6ZSlcbiYjNDM7e1xuJiM0MztcdHU2NCBlbmQ7XG4mIzQzO1xuJiM0MztcdGlmICghSVNfQUxJR05FRChhZGRyLCBhbGlnbm1lbnQpKVxuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1xuJiM0MztcdGlmIChjaGVja19hZGRfb3ZlcmZsb3coYWRkciwgc2l6ZSwgXHUwMDI2ZW5kKSlcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcbiYjNDM7XHRpZiAoZW5kIFx1MDAzZSBrdm1fcmlzY3ZfZ3N0YWdlX2dwYV9zaXplKGt2bS1cdTAwM2VhcmNoLnBnZF9sZXZlbHMpKVxuJiM0MztcdFx0cmV0dXJuIC1FMkJJRztcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIGludCBhaWFfYXBsaWNfYWRkcihzdHJ1Y3Qga3ZtICprdm0sIHU2NCAqYWRkciwgYm9vbCB3cml0ZSlcbiB7XG4gXHRzdHJ1Y3Qga3ZtX2FpYSAqYWlhID0gXHUwMDI2a3ZtLVx1MDAzZWFyY2guYWlhO1xuJiM0MztcdGludCByZXQ7XG4gXG4gXHRpZiAod3JpdGUpIHtcbiBcdFx0LyogV3JpdGVzIGNhbiBvbmx5IGJlIGRvbmUgYmVmb3JlIGlycWNoaXAgaXMgaW5pdGlhbGl6ZWQgKi9cbiBcdFx0aWYgKGt2bV9yaXNjdl9haWFfaW5pdGlhbGl6ZWQoa3ZtKSlcbiBcdFx0XHRyZXR1cm4gLUVCVVNZO1xuIFxuLVx0XHRpZiAoKmFkZHIgXHUwMDI2IChLVk1fREVWX1JJU0NWX0FQTElDX0FMSUdOIC0gMSkpXG4tXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1x0XHRyZXQgPSBhaWFfY2hlY2tfYWRkcl9yYW5nZShrdm0sICphZGRyLCBLVk1fREVWX1JJU0NWX0FQTElDX0FMSUdOLFxuJiM0MztcdFx0XHRcdFx0ICAgS1ZNX0RFVl9SSVNDVl9BUExJQ19TSVpFKTtcbiYjNDM7XHRcdGlmIChyZXQpXG4mIzQzO1x0XHRcdHJldHVybiByZXQ7XG4gXG4gXHRcdGFpYS1cdTAwM2VhcGxpY19hZGRyID0gKmFkZHI7XG4gXHR9IGVsc2VcbkBAIC0xNjYsNiAmIzQzOzE4OCw3IEBAIHN0YXRpYyBpbnQgYWlhX2ltc2ljX2FkZHIoc3RydWN0IGt2bSAqa3ZtLCB1NjQgKmFkZHIsXG4ge1xuIFx0c3RydWN0IGt2bV92Y3B1ICp2Y3B1O1xuIFx0c3RydWN0IGt2bV92Y3B1X2FpYSAqdmNwdV9haWE7XG4mIzQzO1x0aW50IHJldDtcbiBcbiBcdHZjcHUgPSBrdm1fZ2V0X3ZjcHUoa3ZtLCB2Y3B1X2lkeCk7XG4gXHRpZiAoIXZjcHUpXG5AQCAtMTc3LDggJiM0MzsyMDAsMTAgQEAgc3RhdGljIGludCBhaWFfaW1zaWNfYWRkcihzdHJ1Y3Qga3ZtICprdm0sIHU2NCAqYWRkcixcbiBcdFx0aWYgKGt2bV9yaXNjdl9haWFfaW5pdGlhbGl6ZWQoa3ZtKSlcbiBcdFx0XHRyZXR1cm4gLUVCVVNZO1xuIFxuLVx0XHRpZiAoKmFkZHIgXHUwMDI2IChLVk1fREVWX1JJU0NWX0lNU0lDX0FMSUdOIC0gMSkpXG4tXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1x0XHRyZXQgPSBhaWFfY2hlY2tfYWRkcl9yYW5nZShrdm0sICphZGRyLCBLVk1fREVWX1JJU0NWX0lNU0lDX0FMSUdOLFxuJiM0MztcdFx0XHRcdFx0ICAgS1ZNX0RFVl9SSVNDVl9JTVNJQ19TSVpFKTtcbiYjNDM7XHRcdGlmIChyZXQpXG4mIzQzO1x0XHRcdHJldHVybiByZXQ7XG4gXHR9XG4gXG4gXHRtdXRleF9sb2NrKFx1MDAyNnZjcHUtXHUwMDNlbXV0ZXgpO1xuQEAgLTE5MSw2ICYjNDM7MjE2LDQwIEBAIHN0YXRpYyBpbnQgYWlhX2ltc2ljX2FkZHIoc3RydWN0IGt2bSAqa3ZtLCB1NjQgKmFkZHIsXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4mIzQzO3N0YXRpYyBpbnQgYWlhX3ZhbGlkYXRlX2FkZHJfcmFuZ2VzKHN0cnVjdCBrdm0gKmt2bSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBrdm1fYWlhICphaWEgPSBcdTAwMjZrdm0tXHUwMDNlYXJjaC5haWE7XG4mIzQzO1x0c3RydWN0IGt2bV92Y3B1X2FpYSAqdmFpYTtcbiYjNDM7XHRzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHU7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBpZHg7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0aWYgKGFpYS1cdTAwM2Vucl9zb3VyY2VzKSB7XG4mIzQzO1x0XHRpZiAoYWlhLVx1MDAzZWFwbGljX2FkZHIgPT0gS1ZNX1JJU0NWX0FJQV9VTkRFRl9BRERSKVxuJiM0MztcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XG4mIzQzO1x0XHRyZXQgPSBhaWFfY2hlY2tfYWRkcl9yYW5nZShrdm0sIGFpYS1cdTAwM2VhcGxpY19hZGRyLFxuJiM0MztcdFx0XHRcdFx0ICAgS1ZNX0RFVl9SSVNDVl9BUExJQ19BTElHTixcbiYjNDM7XHRcdFx0XHRcdCAgIEtWTV9ERVZfUklTQ1ZfQVBMSUNfU0laRSk7XG4mIzQzO1x0XHRpZiAocmV0KVxuJiM0MztcdFx0XHRyZXR1cm4gcmV0O1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0a3ZtX2Zvcl9lYWNoX3ZjcHUoaWR4LCB2Y3B1LCBrdm0pIHtcbiYjNDM7XHRcdHZhaWEgPSBcdTAwMjZ2Y3B1LVx1MDAzZWFyY2guYWlhX2NvbnRleHQ7XG4mIzQzO1x0XHRpZiAodmFpYS1cdTAwM2VpbXNpY19hZGRyID09IEtWTV9SSVNDVl9BSUFfVU5ERUZfQUREUilcbiYjNDM7XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1xuJiM0MztcdFx0cmV0ID0gYWlhX2NoZWNrX2FkZHJfcmFuZ2Uoa3ZtLCB2YWlhLVx1MDAzZWltc2ljX2FkZHIsXG4mIzQzO1x0XHRcdFx0XHQgICBLVk1fREVWX1JJU0NWX0lNU0lDX0FMSUdOLFxuJiM0MztcdFx0XHRcdFx0ICAgS1ZNX0RFVl9SSVNDVl9JTVNJQ19TSVpFKTtcbiYjNDM7XHRcdGlmIChyZXQpXG4mIzQzO1x0XHRcdHJldHVybiByZXQ7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgZ3BhX3QgYWlhX2ltc2ljX3BwbihzdHJ1Y3Qga3ZtX2FpYSAqYWlhLCBncGFfdCBhZGRyKVxuIHtcbiBcdHUzMiBoLCBsO1xuQEAgLTI0NCw5ICYjNDM7MzAzLDkgQEAgc3RhdGljIGludCBhaWFfaW5pdChzdHJ1Y3Qga3ZtICprdm0pXG4gXHRpZiAoYWlhLVx1MDAzZW5yX2lkcyBcdTAwM2MgYWlhLVx1MDAzZW5yX3NvdXJjZXMpXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFxuLVx0LyogQVBMSUMgYmFzZSBpcyByZXF1aXJlZCBmb3Igbm9uLXplcm8gbnVtYmVyIG9mIHNvdXJjZXMgKi9cbi1cdGlmIChhaWEtXHUwMDNlbnJfc291cmNlcyBcdTAwMjZcdTAwMjYgYWlhLVx1MDAzZWFwbGljX2FkZHIgPT0gS1ZNX1JJU0NWX0FJQV9VTkRFRl9BRERSKVxuLVx0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XHRyZXQgPSBhaWFfdmFsaWRhdGVfYWRkcl9yYW5nZXMoa3ZtKTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiBcbiBcdC8qIEdyb3VwIGluZGV4IGJpdHMgbXVzdCBub3Qgb3ZlcmxhcCBndWVzdCBhbmQgSEFSVCBpbmRleCBiaXRzLiAqL1xuIFx0aWYgKGFpYS1cdTAwM2Vucl9ncm91cF9iaXRzIFx1MDAyNlx1MDAyNlxuQEAgLTI2MywxMiAmIzQzOzMyMiw2IEBAIHN0YXRpYyBpbnQgYWlhX2luaXQoc3RydWN0IGt2bSAqa3ZtKVxuIFx0a3ZtX2Zvcl9lYWNoX3ZjcHUoaWR4LCB2Y3B1LCBrdm0pIHtcbiBcdFx0dmFpYSA9IFx1MDAyNnZjcHUtXHUwMDNlYXJjaC5haWFfY29udGV4dDtcbiBcbi1cdFx0LyogSU1TSUMgYmFzZSBpcyByZXF1aXJlZCAqL1xuLVx0XHRpZiAodmFpYS1cdTAwM2VpbXNpY19hZGRyID09IEtWTV9SSVNDVl9BSUFfVU5ERUZfQUREUikge1xuLVx0XHRcdHJldCA9IC1FSU5WQUw7XG4tXHRcdFx0Z290byBmYWlsX2NsZWFudXBfaW1zaWNzO1xuLVx0XHR9XG4tXG4gXHRcdC8qIEFsbCBJTVNJQ3Mgc2hvdWxkIGhhdmUgbWF0Y2hpbmcgYmFzZSBQUE4gKi9cbiBcdFx0aWYgKGJhc2VfcHBuID09IEtWTV9SSVNDVl9BSUFfVU5ERUZfQUREUilcbiBcdFx0XHRiYXNlX3BwbiA9IGFpYV9pbXNpY19wcG4oYWlhLCB2YWlhLVx1MDAzZWltc2ljX2FkZHIpO1xuZGlmZiAtLWdpdCBhL2FyY2gvcmlzY3Yva3ZtL3ZtLmMgYi9hcmNoL3Jpc2N2L2t2bS92bS5jXG5pbmRleCBhOWYwODNmZWViNzY3Li42NmVkZmFhODYyNDM1IDEwMDY0NFxuLS0tIGEvYXJjaC9yaXNjdi9rdm0vdm0uY1xuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9yaXNjdi9rdm0vdm0uY1xuQEAgLTI1MCw3ICYjNDM7MjUwLDggQEAgaW50IGt2bV92bV9pb2N0bF9lbmFibGVfY2FwKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9lbmFibGVfY2FwICpjYXApXG4gXHRcdG11dGV4X2xvY2soXHUwMDI2a3ZtLVx1MDAzZWxvY2spO1xuIFx0XHRtdXRleF9sb2NrKFx1MDAyNmt2bS1cdTAwM2VzbG90c19sb2NrKTtcbiBcbi1cdFx0aWYgKGt2bS1cdTAwM2VjcmVhdGVkX3ZjcHVzIHx8ICFrdm1fYXJlX2FsbF9tZW1zbG90c19lbXB0eShrdm0pKVxuJiM0MztcdFx0aWYgKGt2bS1cdTAwM2VjcmVhdGVkX3ZjcHVzIHx8ICFrdm1fYXJlX2FsbF9tZW1zbG90c19lbXB0eShrdm0pIHx8XG4mIzQzO1x0XHQgICAga3ZtX3Jpc2N2X2FpYV9pbml0aWFsaXplZChrdm0pKVxuIFx0XHRcdHIgPSAtRUJVU1k7XG4gXHRcdGVsc2VcbiBcdFx0XHRrdm0tXHUwMDNlYXJjaC5wZ2RfbGV2ZWxzID0gbmV3X2xldmVscztcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAwNjoxOTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7S1ZNJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7a3ZtX3ZtX2lvY3RsX2VuYWJsZV9jYXAmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBhZGRyZXNzIHJhbmdlIHZhbGlkYXRpb24gZm9yIHRoZSBSSVNDLVYgQUlBIChBZHZhbmNlZCBJbnRlcnJ1cHQgQXJjaGl0ZWN0dXJlKSBLVk0gZGV2aWNlIGFuZCBwcmV2ZW50cyBjaGFuZ2luZyB0aGUgVk0mIzM5O3MgcGdkX2xldmVscyBhZnRlciB0aGUgQUlBIGRldmljZSBoYXMgYmVlbiBpbml0aWFsaXplZC4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byByZWFjaGFibGUgS1ZNIGlvY3RsIGhhbmRsZXJzIChLVk1fU0VUX0RFVklDRV9BVFRSIGFuZCBLVk1fRU5BQkxFX0NBUCkgYW5kIHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIHRoZSBuZXcgdmFsaWRhdGlvbiBsb2dpYyBoYW5kbGVzIGFsbCBlZGdlIGNhc2VzIGNvcnJlY3RseS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGIwNjQxYzc3YmFhM2RlZDAzOTRhMzg2NjA2YTZiZThhM2I5Zjc1ODYKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgV2VkIEF1ZyAxMiAwNjoxOTowNyAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2FyY2gvcmlzY3Yva3ZtL2FpYV9kZXZpY2UuYyBiL2FyY2gvcmlzY3Yva3ZtL2FpYV9kZXZpY2UuYwppbmRleCBlZmM3YzBiY2ZiYTkyLi5lOTY5ZGJkYzRiOTcxIDEwMDY0NAotLS0gYS9hcmNoL3Jpc2N2L2t2bS9haWFfZGV2aWNlLmMKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9yaXNjdi9rdm0vYWlhX2RldmljZS5jCkBAIC0xMCw3ICYjNDM7MTAsOSBAQAogI2luY2x1ZGUgJmx0O2xpbnV4L2JpdHMuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9pcnFjaGlwL3Jpc2N2LWltc2ljLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgva3ZtX2hvc3QuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvb3ZlcmZsb3cuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC91YWNjZXNzLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2FzbS9rdm1fZ3N0YWdlLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7YXNtL2t2bV9pc2EuaCZndDsKIAogc3RhdGljIGludCBhaWFfY3JlYXRlKHN0cnVjdCBrdm1fZGV2aWNlICpkZXYsIHUzMiB0eXBlKQpAQCAtMTQyLDE3ICYjNDM7MTQ0LDM3IEBAIHN0YXRpYyBpbnQgYWlhX2NvbmZpZyhzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGxvbmcgdHlwZSwKIAlyZXR1cm4gMDsKIH0KIAomIzQzO3N0YXRpYyBpbnQgYWlhX2NoZWNrX2FkZHJfcmFuZ2Uoc3RydWN0IGt2bSAqa3ZtLCB1NjQgYWRkciwgdTY0IGFsaWdubWVudCwKJiM0MzsJCQkJdTY0IHNpemUpCiYjNDM7ewomIzQzOwl1NjQgZW5kOwomIzQzOwomIzQzOwlpZiAoIUlTX0FMSUdORUQoYWRkciwgYWxpZ25tZW50KSkKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwomIzQzOwlpZiAoY2hlY2tfYWRkX292ZXJmbG93KGFkZHIsIHNpemUsICZhbXA7ZW5kKSkKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwomIzQzOwlpZiAoZW5kICZndDsga3ZtX3Jpc2N2X2dzdGFnZV9ncGFfc2l6ZShrdm0tJmd0O2FyY2gucGdkX2xldmVscykpCiYjNDM7CQlyZXR1cm4gLUUyQklHOwomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgaW50IGFpYV9hcGxpY19hZGRyKHN0cnVjdCBrdm0gKmt2bSwgdTY0ICphZGRyLCBib29sIHdyaXRlKQogewogCXN0cnVjdCBrdm1fYWlhICphaWEgPSAmYW1wO2t2bS0mZ3Q7YXJjaC5haWE7CiYjNDM7CWludCByZXQ7CiAKIAlpZiAod3JpdGUpIHsKIAkJLyogV3JpdGVzIGNhbiBvbmx5IGJlIGRvbmUgYmVmb3JlIGlycWNoaXAgaXMgaW5pdGlhbGl6ZWQgKi8KIAkJaWYgKGt2bV9yaXNjdl9haWFfaW5pdGlhbGl6ZWQoa3ZtKSkKIAkJCXJldHVybiAtRUJVU1k7CiAKLQkJaWYgKCphZGRyICZhbXA7IChLVk1fREVWX1JJU0NWX0FQTElDX0FMSUdOIC0gMSkpCi0JCQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJCXJldCA9IGFpYV9jaGVja19hZGRyX3JhbmdlKGt2bSwgKmFkZHIsIEtWTV9ERVZfUklTQ1ZfQVBMSUNfQUxJR04sCiYjNDM7CQkJCQkgICBLVk1fREVWX1JJU0NWX0FQTElDX1NJWkUpOwomIzQzOwkJaWYgKHJldCkKJiM0MzsJCQlyZXR1cm4gcmV0OwogCiAJCWFpYS0mZ3Q7YXBsaWNfYWRkciA9ICphZGRyOwogCX0gZWxzZQpAQCAtMTY2LDYgJiM0MzsxODgsNyBAQCBzdGF0aWMgaW50IGFpYV9pbXNpY19hZGRyKHN0cnVjdCBrdm0gKmt2bSwgdTY0ICphZGRyLAogewogCXN0cnVjdCBrdm1fdmNwdSAqdmNwdTsKIAlzdHJ1Y3Qga3ZtX3ZjcHVfYWlhICp2Y3B1X2FpYTsKJiM0MzsJaW50IHJldDsKIAogCXZjcHUgPSBrdm1fZ2V0X3ZjcHUoa3ZtLCB2Y3B1X2lkeCk7CiAJaWYgKCF2Y3B1KQpAQCAtMTc3LDggJiM0MzsyMDAsMTAgQEAgc3RhdGljIGludCBhaWFfaW1zaWNfYWRkcihzdHJ1Y3Qga3ZtICprdm0sIHU2NCAqYWRkciwKIAkJaWYgKGt2bV9yaXNjdl9haWFfaW5pdGlhbGl6ZWQoa3ZtKSkKIAkJCXJldHVybiAtRUJVU1k7CiAKLQkJaWYgKCphZGRyICZhbXA7IChLVk1fREVWX1JJU0NWX0lNU0lDX0FMSUdOIC0gMSkpCi0JCQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJCXJldCA9IGFpYV9jaGVja19hZGRyX3JhbmdlKGt2bSwgKmFkZHIsIEtWTV9ERVZfUklTQ1ZfSU1TSUNfQUxJR04sCiYjNDM7CQkJCQkgICBLVk1fREVWX1JJU0NWX0lNU0lDX1NJWkUpOwomIzQzOwkJaWYgKHJldCkKJiM0MzsJCQlyZXR1cm4gcmV0OwogCX0KIAogCW11dGV4X2xvY2soJmFtcDt2Y3B1LSZndDttdXRleCk7CkBAIC0xOTEsNiAmIzQzOzIxNiw0MCBAQCBzdGF0aWMgaW50IGFpYV9pbXNpY19hZGRyKHN0cnVjdCBrdm0gKmt2bSwgdTY0ICphZGRyLAogCXJldHVybiAwOwogfQogCiYjNDM7c3RhdGljIGludCBhaWFfdmFsaWRhdGVfYWRkcl9yYW5nZXMoc3RydWN0IGt2bSAqa3ZtKQomIzQzO3sKJiM0MzsJc3RydWN0IGt2bV9haWEgKmFpYSA9ICZhbXA7a3ZtLSZndDthcmNoLmFpYTsKJiM0MzsJc3RydWN0IGt2bV92Y3B1X2FpYSAqdmFpYTsKJiM0MzsJc3RydWN0IGt2bV92Y3B1ICp2Y3B1OwomIzQzOwl1bnNpZ25lZCBsb25nIGlkeDsKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJaWYgKGFpYS0mZ3Q7bnJfc291cmNlcykgewomIzQzOwkJaWYgKGFpYS0mZ3Q7YXBsaWNfYWRkciA9PSBLVk1fUklTQ1ZfQUlBX1VOREVGX0FERFIpCiYjNDM7CQkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CiYjNDM7CQlyZXQgPSBhaWFfY2hlY2tfYWRkcl9yYW5nZShrdm0sIGFpYS0mZ3Q7YXBsaWNfYWRkciwKJiM0MzsJCQkJCSAgIEtWTV9ERVZfUklTQ1ZfQVBMSUNfQUxJR04sCiYjNDM7CQkJCQkgICBLVk1fREVWX1JJU0NWX0FQTElDX1NJWkUpOwomIzQzOwkJaWYgKHJldCkKJiM0MzsJCQlyZXR1cm4gcmV0OwomIzQzOwl9CiYjNDM7CiYjNDM7CWt2bV9mb3JfZWFjaF92Y3B1KGlkeCwgdmNwdSwga3ZtKSB7CiYjNDM7CQl2YWlhID0gJmFtcDt2Y3B1LSZndDthcmNoLmFpYV9jb250ZXh0OwomIzQzOwkJaWYgKHZhaWEtJmd0O2ltc2ljX2FkZHIgPT0gS1ZNX1JJU0NWX0FJQV9VTkRFRl9BRERSKQomIzQzOwkJCXJldHVybiAtRUlOVkFMOwomIzQzOwomIzQzOwkJcmV0ID0gYWlhX2NoZWNrX2FkZHJfcmFuZ2Uoa3ZtLCB2YWlhLSZndDtpbXNpY19hZGRyLAomIzQzOwkJCQkJICAgS1ZNX0RFVl9SSVNDVl9JTVNJQ19BTElHTiwKJiM0MzsJCQkJCSAgIEtWTV9ERVZfUklTQ1ZfSU1TSUNfU0laRSk7CiYjNDM7CQlpZiAocmV0KQomIzQzOwkJCXJldHVybiByZXQ7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwogc3RhdGljIGdwYV90IGFpYV9pbXNpY19wcG4oc3RydWN0IGt2bV9haWEgKmFpYSwgZ3BhX3QgYWRkcikKIHsKIAl1MzIgaCwgbDsKQEAgLTI0NCw5ICYjNDM7MzAzLDkgQEAgc3RhdGljIGludCBhaWFfaW5pdChzdHJ1Y3Qga3ZtICprdm0pCiAJaWYgKGFpYS0mZ3Q7bnJfaWRzICZsdDsgYWlhLSZndDtucl9zb3VyY2VzKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCS8qIEFQTElDIGJhc2UgaXMgcmVxdWlyZWQgZm9yIG5vbi16ZXJvIG51bWJlciBvZiBzb3VyY2VzICovCi0JaWYgKGFpYS0mZ3Q7bnJfc291cmNlcyAmYW1wOyZhbXA7IGFpYS0mZ3Q7YXBsaWNfYWRkciA9PSBLVk1fUklTQ1ZfQUlBX1VOREVGX0FERFIpCi0JCXJldHVybiAtRUlOVkFMOwomIzQzOwlyZXQgPSBhaWFfdmFsaWRhdGVfYWRkcl9yYW5nZXMoa3ZtKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCXJldHVybiByZXQ7CiAKIAkvKiBHcm91cCBpbmRleCBiaXRzIG11c3Qgbm90IG92ZXJsYXAgZ3Vlc3QgYW5kIEhBUlQgaW5kZXggYml0cy4gKi8KIAlpZiAoYWlhLSZndDtucl9ncm91cF9iaXRzICZhbXA7JmFtcDsKQEAgLTI2MywxMiAmIzQzOzMyMiw2IEBAIHN0YXRpYyBpbnQgYWlhX2luaXQoc3RydWN0IGt2bSAqa3ZtKQogCWt2bV9mb3JfZWFjaF92Y3B1KGlkeCwgdmNwdSwga3ZtKSB7CiAJCXZhaWEgPSAmYW1wO3ZjcHUtJmd0O2FyY2guYWlhX2NvbnRleHQ7CiAKLQkJLyogSU1TSUMgYmFzZSBpcyByZXF1aXJlZCAqLwotCQlpZiAodmFpYS0mZ3Q7aW1zaWNfYWRkciA9PSBLVk1fUklTQ1ZfQUlBX1VOREVGX0FERFIpIHsKLQkJCXJldCA9IC1FSU5WQUw7Ci0JCQlnb3RvIGZhaWxfY2xlYW51cF9pbXNpY3M7Ci0JCX0KLQogCQkvKiBBbGwgSU1TSUNzIHNob3VsZCBoYXZlIG1hdGNoaW5nIGJhc2UgUFBOICovCiAJCWlmIChiYXNlX3BwbiA9PSBLVk1fUklTQ1ZfQUlBX1VOREVGX0FERFIpCiAJCQliYXNlX3BwbiA9IGFpYV9pbXNpY19wcG4oYWlhLCB2YWlhLSZndDtpbXNpY19hZGRyKTsKZGlmZiAtLWdpdCBhL2FyY2gvcmlzY3Yva3ZtL3ZtLmMgYi9hcmNoL3Jpc2N2L2t2bS92bS5jCmluZGV4IGE5ZjA4M2ZlZWI3NjcuLjY2ZWRmYWE4NjI0MzUgMTAwNjQ0Ci0tLSBhL2FyY2gvcmlzY3Yva3ZtL3ZtLmMKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9yaXNjdi9rdm0vdm0uYwpAQCAtMjUwLDcgJiM0MzsyNTAsOCBAQCBpbnQga3ZtX3ZtX2lvY3RsX2VuYWJsZV9jYXAoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX2VuYWJsZV9jYXAgKmNhcCkKIAkJbXV0ZXhfbG9jaygmYW1wO2t2bS0mZ3Q7bG9jayk7CiAJCW11dGV4X2xvY2soJmFtcDtrdm0tJmd0O3Nsb3RzX2xvY2spOwogCi0JCWlmIChrdm0tJmd0O2NyZWF0ZWRfdmNwdXMgfHwgIWt2bV9hcmVfYWxsX21lbXNsb3RzX2VtcHR5KGt2bSkpCiYjNDM7CQlpZiAoa3ZtLSZndDtjcmVhdGVkX3ZjcHVzIHx8ICFrdm1fYXJlX2FsbF9tZW1zbG90c19lbXB0eShrdm0pIHx8CiYjNDM7CQkgICAga3ZtX3Jpc2N2X2FpYV9pbml0aWFsaXplZChrdm0pKQogCQkJciA9IC1FQlVTWTsKIAkJZWxzZQogCQkJa3ZtLSZndDthcmNoLnBnZF9sZXZlbHMgPSBuZXdfbGV2ZWxzOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAwNjoxOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzODI2CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMjY0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIFBvdGVudGlhbCBSSVNDLVYgS1ZNIFZ1bG5lcmFiaWxpdHkqKgoKT2theSwgc28gSSYjMzk7dmUgZ290IHRoaXMgcGF0Y2gg4oCTIHNlZW1zIGxpa2UgaXTigJlzIHR3ZWFraW5nIGBhaWFfZGV2aWNlLmNgIGFuZCBgdm0uY2Agd2l0aGluIHRoZSBSSVNDLVYgS1ZNIGNvZGUuIExvb2tzIGxpa2UgYWRkcmVzcyByYW5nZSB2YWxpZGF0aW9uIGlzIHRoZSBmb2N1cywgYWRkaW5nIHRoZXNlIG5ldyBmdW5jdGlvbnMsIGBhaWFfY2hlY2tfYWRkcl9yYW5nZWAgYW5kIGBhaWFfdmFsaWRhdGVfYWRkcl9yYW5nZXNgLiBJdCBhbHNvIGxvb2tzIGxpa2UgaXQmIzM5O3MgbWFraW5nIGNoYW5nZXMgdG8gYGt2bV92bV9pb2N0bF9lbmFibGVfY2FwYCB0byBlbnN1cmUgYGt2bV9yaXNjdl9haWFfaW5pdGlhbGl6ZWQoa3ZtKWAgaXMgY2hlY2tlZCBiZWZvcmUgYWxsb3dpbmcgYW55IGBwZ2RfbGV2ZWxzYCBtb2RpZmljYXRpb25zLgoKTXkgaW5pdGlhbCB0aG91Z2h0IGlzLCAmIzM0O0lzIHRoaXMgYWN0dWFsbHkgc29tZXRoaW5nIHRoYXQmIzM5O3MgZXZlbiAqcmVhY2hhYmxlKiBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50PyYjMzQ7IFdlbGwsIEtWTSBvbiBSSVNDLVYgaXMgYSBmdW5kYW1lbnRhbCBmZWF0dXJlLCBzbyBpdCBzZWVtcyBsaWtlIGEgcmVhc29uYWJsZSBhc3N1bXB0aW9uLiBIbW0sIGJ1dCB0aGVuIEkgcmVtZW1iZXIsIHN5emthbGxlciBkb2VzIGEgbG90IG9mIGZ1enppbmcgYWNyb3NzIGRpZmZlcmVudCBhcmNoaXRlY3R1cmVzLiBJdCBwcmltYXJpbHkgd29ya3Mgd2l0aCB4ODZfNjQgYW5kIGFybTY0LCBidXQgb2NjYXNpb25hbGx5IGl0IGRvZXMgUklTQy1WLiBJZiB0aGlzIGlzIFJJU0MtViBLVk0tc3BlY2lmaWMsIGl0JiMzOTtzIG9ubHkgZXhwbG9pdGFibGUgb24gUklTQy1WIGhvc3RzLgoKVGhlIHJlYWwgcXVlc3Rpb24gaXMsIGRvZXMgc3l6a2FsbGVyIGFjdHVhbGx5ICpydW4qIG9uIFJJU0MtVj8gQWgsIHllcywgaXQgZG9lcyEgU3l6a2FsbGVyIHN1cHBvcnRzIHJpc2N2NjQsIHNvIGl0JiMzOTtzIGRlZmluaXRlbHkgd29ydGh3aGlsZSB0byBpbnZlc3RpZ2F0ZSB0aGlzIGZ1cnRoZXIuCgpOb3csIGxldCYjMzk7cyBuYWlsIGRvd24gdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBuZWVkZWQgdG8gdHJpZ2dlciB0aGlzIGNvZGUgcGF0aC4gT2J2aW91c2x5LCBgQ09ORklHX0tWTWAgaXMgYSBnaXZlbi4gVGltZSB0byBkaWcgaW50byBgYXJjaC9yaXNjdi9rdm0vS2NvbmZpZ2AgYW5kIHNlZSB3aGF0IGVsc2Ugd2UgbmVlZCB0byBlbmFibGUgdG8gZ2V0IHRoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDA2OjE5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBLVk0mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3Jpc2N2L2t2bS9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvcmlzY3Yva3ZtL0tjb25maWc9MTg9aWYgVklSVFVBTElaQVRJT05cbmFyY2gvcmlzY3Yva3ZtL0tjb25maWctMTktXG5hcmNoL3Jpc2N2L2t2bS9LY29uZmlnOjIwOmNvbmZpZyBLVk1cbmFyY2gvcmlzY3Yva3ZtL0tjb25maWctMjEtXHR0cmlzdGF0ZSBcJiMzNDtLZXJuZWwtYmFzZWQgVmlydHVhbCBNYWNoaW5lIChLVk0pIHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAwNjoxOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NTc3CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIEtWTSYjMzk7cyBEZXBlbmRlbmNpZXMqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgYXJjaGl0ZWN0dXJhbCB1bmRlcnBpbm5pbmcgb2YgYEtWTWAuIFRoaW5raW5nIGFib3V0IGl0LCBiZWZvcmUgSSBldmVuIHN0YXJ0IHRvIGRpdmUgaW50byBhIHNwZWNpZmljIGlzc3VlIG9yIGNvbmZpZ3VyYXRpb24sIHRoZSBmaXJzdCB0aGluZyBJIGRvIGlzIG1lbnRhbGx5IG1hcCBvdXQgaXRzIGRlcGVuZGVuY2llcy4gSXQmIzM5O3MgY3J1Y2lhbCBmb3IgdW5kZXJzdGFuZGluZyBob3cgaXQgZnVuY3Rpb25zIGFuZCBob3cgY2hhbmdlcyB3aWxsIHJpcHBsZSB0aHJvdWdoIHRoZSBzeXN0ZW0uIEkmIzM5O20gbm90IGdvaW5nIHRvIGp1c3QgYmxpbmRseSBzdGFydCB0cm91Ymxlc2hvb3Rpbmcgb3Igb3B0aW1pemluZyB3aXRob3V0IGEgc29saWQgZ3Jhc3Agb2Ygd2hhdCBLVk0gaXMgYnVpbHQgdXBvbi4gV2hhdCBhcmUgdGhlIGtleSBjb21wb25lbnRzLCB0aGUga2VybmVsIG1vZHVsZXMsIHRoZSB1c2Vyc3BhY2UgdG9vbHM/IFdoZXJlIGFyZSB0aGUgcG90ZW50aWFsIGJvdHRsZW5lY2tzIG9yIGZhaWx1cmUgcG9pbnRzPyBVbmRlcnN0YW5kaW5nIHRoZSBpbnRyaWNhdGUgd2ViIG9mIGRlcGVuZGVuY2llcyB3aWxsIGd1aWRlIG1lIHRvIHRoZSBtb3N0IHJlbGV2YW50IGFyZWFzIG9mIHRoZSBjb2RlIGJhc2Ugb3IgdGhlIGRvY3VtZW50YXRpb24uIFRoaXMgaXMgd2hlcmUgSSBzdGFydC4gTGV0JiMzOTtzIHNlZSB3aGF0IHdlIGZpbmQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMDY6MTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDthcmNoL3Jpc2N2L2t2bS9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuICAgMjpcdCNcbiAgIDM6XHQjIEtWTSBjb25maWd1cmF0aW9uXG4gICA0Olx0I1xuICAgNTpcdFxuICAgNjpcdHNvdXJjZSBcJiMzNDt2aXJ0L2t2bS9LY29uZmlnXCYjMzQ7XG4gICA3Olx0XG4gICA4Olx0bWVudWNvbmZpZyBWSVJUVUFMSVpBVElPTlxuICAgOTpcdFx0Ym9vbCBcJiMzNDtWaXJ0dWFsaXphdGlvblwmIzM0O1xuICAxMDpcdFx0aGVscFxuICAxMTpcdFx0ICBTYXkgWSBoZXJlIHRvIGdldCB0byBzZWUgb3B0aW9ucyBmb3IgdXNpbmcgeW91ciBMaW51eCBob3N0IHRvIHJ1blxuICAxMjpcdFx0ICBvdGhlciBvcGVyYXRpbmcgc3lzdGVtcyBpbnNpZGUgdmlydHVhbCBtYWNoaW5lcyAoZ3Vlc3RzKS5cbiAgMTM6XHRcdCAgVGhpcyBvcHRpb24gYWxvbmUgZG9lcyBub3QgYWRkIGFueSBrZXJuZWwgY29kZS5cbiAgMTQ6XHRcbiAgMTU6XHRcdCAgSWYgeW91IHNheSBOLCBhbGwgb3B0aW9ucyBpbiB0aGlzIHN1Ym1lbnUgd2lsbCBiZSBza2lwcGVkIGFuZFxuICAxNjpcdFx0ICBkaXNhYmxlZC5cbiAgMTc6XHRcbiAgMTg6XHRpZiBWSVJUVUFMSVpBVElPTlxuICAxOTpcdFxuICAyMDpcdGNvbmZpZyBLVk1cbiAgMjE6XHRcdHRyaXN0YXRlIFwmIzM0O0tlcm5lbC1iYXNlZCBWaXJ0dWFsIE1hY2hpbmUgKEtWTSkgc3VwcG9ydFwmIzM0O1xuICAyMjpcdFx0ZGVwZW5kcyBvbiBSSVNDVl9TQkkgXHUwMDI2XHUwMDI2IE1NVVxuICAyMzpcdFx0c2VsZWN0IEhBVkVfS1ZNX0lSUUNISVBcbiAgMjQ6XHRcdHNlbGVjdCBIQVZFX0tWTV9JUlFfUk9VVElOR1xuICAyNTpcdFx0c2VsZWN0IEhBVkVfS1ZNX01TSVxuICAyNjpcdFx0c2VsZWN0IEhBVkVfS1ZNX1JFQURPTkxZX01FTVxuICAyNzpcdFx0c2VsZWN0IEhBVkVfS1ZNX0RJUlRZX1JJTkdfQUNRX1JFTFxuICAyODpcdFx0c2VsZWN0IEtWTV9DT01NT05cbiAgMjk6XHRcdHNlbGVjdCBLVk1fR0VORVJJQ19ESVJUWUxPR19SRUFEX1BST1RFQ1RcbiAgMzA6XHRcdHNlbGVjdCBLVk1fR0VORVJJQ19IQVJEV0FSRV9FTkFCTElOR1xuICAzMTpcdFx0c2VsZWN0IEtWTV9NTUlPXG4gIDMyOlx0XHRzZWxlY3QgVklSVF9YRkVSX1RPX0dVRVNUX1dPUktcbiAgMzM6XHRcdHNlbGVjdCBTQ0hFRF9JTkZPXG4gIDM0Olx0XHRzZWxlY3QgR1VFU1RfUEVSRl9FVkVOVFMgaWYgUEVSRl9FVkVOVFNcbiAgMzU6XHRcdGhlbHBcbiAgMzY6XHRcdCAgU3VwcG9ydCBob3N0aW5nIHZpcnR1YWxpemVkIGd1ZXN0IG1hY2hpbmVzLlxuICAzNzpcdFxuICAzODpcdFx0ICBJZiB1bnN1cmUsIHNheSBOLlxuICAzOTpcdFxuICA0MDpcdGVuZGlmICMgVklSVFVBTElaQVRJT05cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAwNjoxOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MzI0CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMzQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqS1ZNIENvbmZpZ3VyYXRpb24gRGVlcCBEaXZlKioKCkFscmlnaHQsIHNvIHRoZSBpbml0aWFsIGZvY3VzIGlzICpjbGVhcmx5KiBLVk0g4oCTIGl0JiMzOTtzIHRoZSBhbmNob3IgcG9pbnQsIHRoZSBjZW50cmFsIGNvbmZpZ3VyYXRpb24gd2UmIzM5O3JlIHdvcmtpbmcgd2l0aCBoZXJlLiBUaGF0JiMzOTtzIHRoZSBmb3VuZGF0aW9uLiBOb3csIGdpdmVuIHRoYXQsIG15IG5leHQgbGluZSBvZiBpbnF1aXJ5IGhhcyB0byBiZSB0YXJnZXRlZC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaWYgdGhlcmUgYXJlIGFueSAqc3BlY2lmaWMqIGNvbmZpZ3VyYXRpb25zIG9yIGhvb2tzIHJlbGV2YW50IHRvIHRoZSBBSUEgKEFkdmFuY2VkIEludGVycnVwdCBBcmNoaXRlY3R1cmUpIHN1YnN5c3RlbSB3aXRoaW4gdGhlIEtWTSBmcmFtZXdvcmsuIEkgc2hvdWxkIGltbWVkaWF0ZWx5IHplcm8gaW4gb24gYGFpYV9kZXZpY2UuY2AuIElmIEFJQSBoYXMgYW55IGN1c3RvbSBkZXZpY2Utc3BlY2lmaWMgY29uZmlndXJhdGlvbiBpdCB3b3VsZCBtb3N0IGxpa2VseSBiZSBpbiB0aGF0IGZpbGUuIEkmIzM5O20gbG9va2luZyBmb3IgYW55dGhpbmcgYmV5b25kIHRoZSBiYXNlIEtWTSBzZXR1cCDigJMgc3BlY2lmaWMgcmVnaXN0ZXIgYXNzaWdubWVudHMsIGludGVycnVwdCBoYW5kbGluZywgYW55dGhpbmcgdGhhdCBkaXZlcmdlcyBmcm9tIHRoZSBzdGFuZGFyZCBLVk0gZGV2aWNlIGltcGxlbWVudGF0aW9uIGFuZCBpcyBBSUEtcmVsYXRlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAwNjoxOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDthaWFfZGV2aWNlLm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3Jpc2N2L2t2bS9NYWtlZmlsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3Jpc2N2L2t2bS9NYWtlZmlsZT0xND1rdm0teSAmIzQzOz0gYWlhX2FwbGljLm9cbmFyY2gvcmlzY3Yva3ZtL01ha2VmaWxlOjE1Omt2bS15ICYjNDM7PSBhaWFfZGV2aWNlLm9cbmFyY2gvcmlzY3Yva3ZtL01ha2VmaWxlLTE2LWt2bS15ICYjNDM7PSBhaWFfaW1zaWMub1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDA2OjE5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU2NTUKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAxNDcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIEtWTSBBSUEgQ29tcGlsYXRpb24qKgoKT2theSwgc28gdGhpcyBjb2RlIGlzIGRlZmluaXRlbHkgYmVpbmcgY29tcGlsZWQgdW5jb25kaXRpb25hbGx5IHdoZW4gS1ZNIChLZXJuZWwtYmFzZWQgVmlydHVhbCBNYWNoaW5lKSBpcyBlbmFibGVkLiBUaGF0JiMzOTtzIHRoZSBzdGFydGluZyBwb2ludC4gTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gZGlnIGludG8gKndoYXQqIGlzIGJlaW5nIG1vZGlmaWVkIG9yIGluY2x1ZGVkIGdpdmVuIHRoZSBLVk0gZGVwZW5kZW5jeS4gTGV0JiMzOTtzIHNlZS4uLiB0aGUgZnVuY3Rpb25zIHRoYXQgc2VlbSB0byBiZSBpbXBhY3RlZCBpbmNsdWRlOiBgYWlhX2NoZWNrX2FkZHJfcmFuZ2VgLCBgYWlhX2FwbGljX2FkZHJgLCBgYWlhX2ltc2ljX2FkZHJgLCBgYWlhX3ZhbGlkYXRlX2FkZHJfcmFuZ2VzYCwgYW5kIGBhaWFfaW5pdGAuIEhtbSwgdGhvc2UgYXJlIGFsbCAqc3RhdGljKiBmdW5jdGlvbnMsIHdoaWNoIGlzIHR5cGljYWwgZm9yIGludGVybmFsIGhlbHBlcnMuIEFuZCB0aGVuIHRoZXJlJiMzOTtzIGBrdm1fdm1faW9jdGxfZW5hYmxlX2NhcGAsIHdoaWNoIGlzICpub24tc3RhdGljKiwgYW5kIHJlc2lkaW5nIGluIGBhcmNoL3Jpc2N2L2t2bS92bS5jYC4gVGhhdCBmdW5jdGlvbiYjMzk7cyBkZWZpbml0ZWx5IGludGVyZXN0aW5nIGJlY2F1c2UgaXQmIzM5O3MgKm5vdCogc3RhdGljLCBzbyBpdCYjMzk7cyBsaWtlbHkgYSBwdWJsaWMgZW50cnkgcG9pbnQuCgpCdXQgdGhlIHBsb3QgdGhpY2tlbnMuLi4gaXMgYGFpYV9pbml0YCBwYXJ0IG9mIHRoZSBLVk0gaW5pdGlhbGl6YXRpb24gc2VxdWVuY2U/IExldCBtZSBzZWUuIEkgcmVjYWxsIGEgZnVuY3Rpb24gaW4gdGhlIGNvZGUgdGhhdCBoYW5kbGVzIGluaXRpYWxpemF0aW9uLCBsaWtlIGBrdm1fcmlzY3ZfYWlhX2luaXRgLiBOZWVkIHRvIGNoZWNrIGBhaWFfZGV2aWNlLmNgIHRvIHNlZSBpZiB0aGVyZSYjMzk7cyBhIGxpbmsgdGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDA2OjE5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2FpYV9pbml0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC9yaXNjdi9rdm0vYWlhX2RldmljZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvcmlzY3Yva3ZtL2FpYV9kZXZpY2UuYz01Mz1zdGF0aWMgaW50IGFpYV9jb25maWcoc3RydWN0IGt2bSAqa3ZtLCB1bnNpZ25lZCBsb25nIHR5cGUsXG4tLVxuYXJjaC9yaXNjdi9rdm0vYWlhX2RldmljZS5jLTU4LVx0LyogV3JpdGVzIGNhbiBvbmx5IGJlIGRvbmUgYmVmb3JlIGlycWNoaXAgaXMgaW5pdGlhbGl6ZWQgKi9cbmFyY2gvcmlzY3Yva3ZtL2FpYV9kZXZpY2UuYzo1OTpcdGlmICh3cml0ZSBcdTAwMjZcdTAwMjYga3ZtX3Jpc2N2X2FpYV9pbml0aWFsaXplZChrdm0pKVxuYXJjaC9yaXNjdi9rdm0vYWlhX2RldmljZS5jLTYwLVx0XHRyZXR1cm4gLUVCVVNZO1xuLS1cbmFyY2gvcmlzY3Yva3ZtL2FpYV9kZXZpY2UuYz0xNjQ9c3RhdGljIGludCBhaWFfYXBsaWNfYWRkcihzdHJ1Y3Qga3ZtICprdm0sIHU2NCAqYWRkciwgYm9vbCB3cml0ZSlcbi0tXG5hcmNoL3Jpc2N2L2t2bS9haWFfZGV2aWNlLmMtMTcwLVx0XHQvKiBXcml0ZXMgY2FuIG9ubHkgYmUgZG9uZSBiZWZvcmUgaXJxY2hpcCBpcyBpbml0aWFsaXplZCAqL1xuYXJjaC9yaXNjdi9rdm0vYWlhX2RldmljZS5jOjE3MTpcdFx0aWYgKGt2bV9yaXNjdl9haWFfaW5pdGlhbGl6ZWQoa3ZtKSlcbmFyY2gvcmlzY3Yva3ZtL2FpYV9kZXZpY2UuYy0xNzItXHRcdFx0cmV0dXJuIC1FQlVTWTtcbi0tXG5hcmNoL3Jpc2N2L2t2bS9haWFfZGV2aWNlLmM9MTg2PXN0YXRpYyBpbnQgYWlhX2ltc2ljX2FkZHIoc3RydWN0IGt2bSAqa3ZtLCB1NjQgKmFkZHIsXG4tLVxuYXJjaC9yaXNjdi9rdm0vYWlhX2RldmljZS5jLTE5OS1cdFx0LyogV3JpdGVzIGNhbiBvbmx5IGJlIGRvbmUgYmVmb3JlIGlycWNoaXAgaXMgaW5pdGlhbGl6ZWQgKi9cbmFyY2gvcmlzY3Yva3ZtL2FpYV9kZXZpY2UuYzoyMDA6XHRcdGlmIChrdm1fcmlzY3ZfYWlhX2luaXRpYWxpemVkKGt2bSkpXG5hcmNoL3Jpc2N2L2t2bS9haWFfZGV2aWNlLmMtMjAxLVx0XHRcdHJldHVybiAtRUJVU1k7XG4tLVxuYXJjaC9yaXNjdi9rdm0vYWlhX2RldmljZS5jPTI3MT1zdGF0aWMgdTMyIGFpYV9pbXNpY19oYXJ0X2luZGV4KHN0cnVjdCBrdm1fYWlhICphaWEsIGdwYV90IGFkZHIpXG4tLVxuYXJjaC9yaXNjdi9rdm0vYWlhX2RldmljZS5jLTI4NC1cbmFyY2gvcmlzY3Yva3ZtL2FpYV9kZXZpY2UuYzoyODU6c3RhdGljIGludCBhaWFfaW5pdChzdHJ1Y3Qga3ZtICprdm0pXG5hcmNoL3Jpc2N2L2t2bS9haWFfZGV2aWNlLmMtMjg2LXtcbi0tXG5hcmNoL3Jpc2N2L2t2bS9haWFfZGV2aWNlLmMtMjk0LVx0LyogSXJxY2hpcCBjYW4gYmUgaW5pdGlhbGl6ZWQgb25seSBvbmNlICovXG5hcmNoL3Jpc2N2L2t2bS9haWFfZGV2aWNlLmM6Mjk1Olx0aWYgKGt2bV9yaXNjdl9haWFfaW5pdGlhbGl6ZWQoa3ZtKSlcbmFyY2gvcmlzY3Yva3ZtL2FpYV9kZXZpY2UuYy0yOTYtXHRcdHJldHVybiAtRUJVU1k7XG4tLVxuYXJjaC9yaXNjdi9rdm0vYWlhX2RldmljZS5jPTM1OT1zdGF0aWMgaW50IGFpYV9zZXRfYXR0cihzdHJ1Y3Qga3ZtX2RldmljZSAqZGV2LCBzdHJ1Y3Qga3ZtX2RldmljZV9hdHRyICphdHRyKVxuLS1cbmFyY2gvcmlzY3Yva3ZtL2FpYV9kZXZpY2UuYy0zOTYtXHRcdFx0bXV0ZXhfbG9jayhcdTAwMjZkZXYtXHUwMDNla3ZtLVx1MDAzZWxvY2spO1xuYXJjaC9yaXNjdi9rdm0vYWlhX2RldmljZS5jOjM5NzpcdFx0XHRyID0gYWlhX2luaXQoZGV2LVx1MDAzZWt2bSk7XG5hcmNoL3Jpc2N2L2t2bS9haWFfZGV2aWNlLmMtMzk4LVx0XHRcdG11dGV4X3VubG9jayhcdTAwMjZkZXYtXHUwMDNla3ZtLVx1MDAzZWxvY2spO1xuLS1cbmFyY2gvcmlzY3Yva3ZtL2FpYV9kZXZpY2UuYz01NTU9aW50IGt2bV9yaXNjdl92Y3B1X2FpYV91cGRhdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuLS1cbmFyY2gvcmlzY3Yva3ZtL2FpYV9kZXZpY2UuYy01NTctXHQvKiBQcm9jZWVkIG9ubHkgaWYgQUlBIHdhcyBpbml0aWFsaXplZCBzdWNjZXNzZnVsbHkgKi9cbmFyY2gvcmlzY3Yva3ZtL2FpYV9kZXZpY2UuYzo1NTg6XHRpZiAoIWt2bV9yaXNjdl9haWFfaW5pdGlhbGl6ZWQodmNwdS1cdTAwM2Vrdm0pKVxuYXJjaC9yaXNjdi9rdm0vYWlhX2RldmljZS5jLTU1OS1cdFx0cmV0dXJuIDE7XG4tLVxuYXJjaC9yaXNjdi9rdm0vYWlhX2RldmljZS5jPTU2NT12b2lkIGt2bV9yaXNjdl92Y3B1X2FpYV9yZXNldChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4tLVxuYXJjaC9yaXNjdi9rdm0vYWlhX2RldmljZS5jLTU3My1cdC8qIFByb2NlZWQgb25seSBpZiBBSUEgd2FzIGluaXRpYWxpemVkIHN1Y2Nlc3NmdWxseSAqL1xuYXJjaC9yaXNjdi9rdm0vYWlhX2RldmljZS5jOjU3NDpcdGlmICgha3ZtX3Jpc2N2X2FpYV9pbml0aWFsaXplZCh2Y3B1LVx1MDAzZWt2bSkpXG5hcmNoL3Jpc2N2L2t2bS9haWFfZGV2aWNlLmMtNTc1LVx0XHRyZXR1cm47XG4tLVxuYXJjaC9yaXNjdi9rdm0vYWlhX2RldmljZS5jLTU4MC1cbmFyY2gvcmlzY3Yva3ZtL2FpYV9kZXZpY2UuYzo1ODE6dm9pZCBrdm1fcmlzY3ZfdmNwdV9haWFfaW5pdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG5hcmNoL3Jpc2N2L2t2bS9haWFfZGV2aWNlLmMtNTgyLXtcbi0tXG5hcmNoL3Jpc2N2L2t2bS9haWFfZGV2aWNlLmMtNTkxLVx0ICpcbmFyY2gvcmlzY3Yva3ZtL2FpYV9kZXZpY2UuYzo1OTI6XHQgKiBSZWZlciwgYWlhX2luaXQoKSBpbXBsZW1lbnRhdGlvbiBmb3IgbW9yZSBkZXRhaWxzLlxuYXJjaC9yaXNjdi9rdm0vYWlhX2RldmljZS5jLTU5My1cdCAqL1xuLS1cbmFyY2gvcmlzY3Yva3ZtL2FpYV9kZXZpY2UuYz02MDA9dm9pZCBrdm1fcmlzY3ZfdmNwdV9haWFfZGVpbml0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbi0tXG5hcmNoL3Jpc2N2L2t2bS9haWFfZGV2aWNlLmMtNjAyLVx0LyogUHJvY2VlZCBvbmx5IGlmIEFJQSB3YXMgaW5pdGlhbGl6ZWQgc3VjY2Vzc2Z1bGx5ICovXG5hcmNoL3Jpc2N2L2t2bS9haWFfZGV2aWNlLmM6NjAzOlx0aWYgKCFrdm1fcmlzY3ZfYWlhX2luaXRpYWxpemVkKHZjcHUtXHUwMDNla3ZtKSlcbmFyY2gvcmlzY3Yva3ZtL2FpYV9kZXZpY2UuYy02MDQtXHRcdHJldHVybjtcbi0tXG5hcmNoL3Jpc2N2L2t2bS9haWFfZGV2aWNlLmM9NjEwPWludCBrdm1fcmlzY3ZfYWlhX2luamVjdF9tc2lfYnlfaWQoc3RydWN0IGt2bSAqa3ZtLCB1MzIgaGFydF9pbmRleCxcbi0tXG5hcmNoL3Jpc2N2L2t2bS9haWFfZGV2aWNlLmMtNjE2LVx0LyogUHJvY2VlZCBvbmx5IGlmIEFJQSB3YXMgaW5pdGlhbGl6ZWQgc3VjY2Vzc2Z1bGx5ICovXG5hcmNoL3Jpc2N2L2t2bS9haWFfZGV2aWNlLmM6NjE3Olx0aWYgKCFrdm1fcmlzY3ZfYWlhX2luaXRpYWxpemVkKGt2bSkpXG5hcmNoL3Jpc2N2L2t2bS9haWFfZGV2aWNlLmMtNjE4LVx0XHRyZXR1cm4gLUVCVVNZO1xuLS1cbmFyY2gvcmlzY3Yva3ZtL2FpYV9kZXZpY2UuYz02MzE9aW50IGt2bV9yaXNjdl9haWFfaW5qZWN0X21zaShzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fbXNpICptc2kpXG4tLVxuYXJjaC9yaXNjdi9rdm0vYWlhX2RldmljZS5jLTY0MC1cdC8qIFByb2NlZWQgb25seSBpZiBBSUEgd2FzIGluaXRpYWxpemVkIHN1Y2Nlc3NmdWxseSAqL1xuYXJjaC9yaXNjdi9rdm0vYWlhX2RldmljZS5jOjY0MTpcdGlmICgha3ZtX3Jpc2N2X2FpYV9pbml0aWFsaXplZChrdm0pKVxuYXJjaC9yaXNjdi9rdm0vYWlhX2RldmljZS5jLTY0Mi1cdFx0cmV0dXJuIC1FQlVTWTtcbi0tXG5hcmNoL3Jpc2N2L2t2bS9haWFfZGV2aWNlLmM9NjY1PWludCBrdm1fcmlzY3ZfYWlhX2luamVjdF9pcnEoc3RydWN0IGt2bSAqa3ZtLCB1bnNpZ25lZCBpbnQgaXJxLCBib29sIGxldmVsKVxuLS1cbmFyY2gvcmlzY3Yva3ZtL2FpYV9kZXZpY2UuYy02NjctXHQvKiBQcm9jZWVkIG9ubHkgaWYgQUlBIHdhcyBpbml0aWFsaXplZCBzdWNjZXNzZnVsbHkgKi9cbmFyY2gvcmlzY3Yva3ZtL2FpYV9kZXZpY2UuYzo2Njg6XHRpZiAoIWt2bV9yaXNjdl9haWFfaW5pdGlhbGl6ZWQoa3ZtKSlcbmFyY2gvcmlzY3Yva3ZtL2FpYV9kZXZpY2UuYy02NjktXHRcdHJldHVybiAtRUJVU1k7XG4tLVxuYXJjaC9yaXNjdi9rdm0vYWlhX2RldmljZS5jLTY3NC1cbmFyY2gvcmlzY3Yva3ZtL2FpYV9kZXZpY2UuYzo2NzU6dm9pZCBrdm1fcmlzY3ZfYWlhX2luaXRfdm0oc3RydWN0IGt2bSAqa3ZtKVxuYXJjaC9yaXNjdi9rdm0vYWlhX2RldmljZS5jLTY3Ni17XG4tLVxuYXJjaC9yaXNjdi9rdm0vYWlhX2RldmljZS5jLTY4NS1cdCAqXG5hcmNoL3Jpc2N2L2t2bS9haWFfZGV2aWNlLmM6Njg2Olx0ICogUmVmZXIsIGFpYV9pbml0KCkgaW1wbGVtZW50YXRpb24gZm9yIG1vcmUgZGV0YWlscy5cbmFyY2gvcmlzY3Yva3ZtL2FpYV9kZXZpY2UuYy02ODctXHQgKi9cbi0tXG5hcmNoL3Jpc2N2L2t2bS9haWFfZGV2aWNlLmM9NzAxPXZvaWQga3ZtX3Jpc2N2X2FpYV9kZXN0cm95X3ZtKHN0cnVjdCBrdm0gKmt2bSlcbi0tXG5hcmNoL3Jpc2N2L2t2bS9haWFfZGV2aWNlLmMtNzAzLVx0LyogUHJvY2VlZCBvbmx5IGlmIEFJQSB3YXMgaW5pdGlhbGl6ZWQgc3VjY2Vzc2Z1bGx5ICovXG5hcmNoL3Jpc2N2L2t2bS9haWFfZGV2aWNlLmM6NzA0Olx0aWYgKCFrdm1fcmlzY3ZfYWlhX2luaXRpYWxpemVkKGt2bSkpXG5hcmNoL3Jpc2N2L2t2bS9haWFfZGV2aWNlLmMtNzA1LVx0XHRyZXR1cm47XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDA2OjE5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgxNzIKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiA1NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIHNlZSB3aGF0IHdlJiMzOTt2ZSBnb3QgaGVyZS4KCioqRGVjb25zdHJ1Y3RpbmcgdGhlIEFJQSBBdHRyaWJ1dGUgU2V0dGluZyBQcm9jZXNzKioKCkFscmlnaHQsIHNvIGBhaWFfc2V0X2F0dHJgIGlzIHRoZSBrZXkgZnVuY3Rpb24gdG8gbG9vayBhdC4gU2VlbXMgbGlrZSBpdOKAmXMgYSBjYWxsYmFjaywgc3BlY2lmaWNhbGx5IGZvciBLVk0gZGV2aWNlIGF0dHJpYnV0ZXMuIFRoYXQgaW1tZWRpYXRlbHkgbWFrZXMgbWUgdGhpbmsgYWJvdXQgaG93IHRoZSBBSUEgZGV2aWNlIGlzIG1hbmFnZWQgd2l0aGluIHRoZSBLVk0gZnJhbWV3b3JrLiBUaGUgY29ubmVjdGlvbiB0byBgYWlhX2luaXRgIGZyb20gd2l0aGluIGBhaWFfc2V0X2F0dHJgIHN1Z2dlc3RzIHRoYXQgdGhpcyBpcyB3aGVyZSB0aGUgQUlBIGRldmljZSBpcyBiZWluZyBpbml0aWFsaXplZCBhdCBzb21lIHN0YWdlLiBBbmQgbG9va2luZyBiYWNrLCBpdCBhbGwgc3RhcnRzIHdpdGggdGhlIGRldmljZSBjcmVhdGlvbiB2aWEgYGFpYV9jcmVhdGVgLiBUaGUgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gcGlucG9pbnQgdGhlIEtWTSBkZXZpY2Ugb3BlcmF0aW9ucyBhc3NvY2lhdGVkIHdpdGggdGhlIEFJQSBkZXZpY2UuIEkgbmVlZCB0byBkaWcgaW50byB0aGUgS1ZNIGRldmljZSBvcHMgZm9yIEFJQSB0byBmdWxseSB1bmRlcnN0YW5kIHRoZSBhdHRyaWJ1dGUgc2V0dGluZyBmbG93LiBUaW1lIHRvIGZpbmQgdGhvc2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDA2OjE5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2FpYV9zZXRfYXR0ciYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gvcmlzY3Yva3ZtL2FpYV9kZXZpY2UuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3Jpc2N2L2t2bS9haWFfZGV2aWNlLmM9Mjg1PXN0YXRpYyBpbnQgYWlhX2luaXQoc3RydWN0IGt2bSAqa3ZtKVxuLS1cbmFyY2gvcmlzY3Yva3ZtL2FpYV9kZXZpY2UuYy0zNTgtXG5hcmNoL3Jpc2N2L2t2bS9haWFfZGV2aWNlLmM6MzU5OnN0YXRpYyBpbnQgYWlhX3NldF9hdHRyKHN0cnVjdCBrdm1fZGV2aWNlICpkZXYsIHN0cnVjdCBrdm1fZGV2aWNlX2F0dHIgKmF0dHIpXG5hcmNoL3Jpc2N2L2t2bS9haWFfZGV2aWNlLmMtMzYwLXtcbi0tXG5hcmNoL3Jpc2N2L2t2bS9haWFfZGV2aWNlLmM9NTQ2PXN0cnVjdCBrdm1fZGV2aWNlX29wcyBrdm1fcmlzY3ZfYWlhX2RldmljZV9vcHMgPSB7XG4tLVxuYXJjaC9yaXNjdi9rdm0vYWlhX2RldmljZS5jLTU0OS1cdC5kZXN0cm95ID0gYWlhX2Rlc3Ryb3ksXG5hcmNoL3Jpc2N2L2t2bS9haWFfZGV2aWNlLmM6NTUwOlx0LnNldF9hdHRyID0gYWlhX3NldF9hdHRyLFxuYXJjaC9yaXNjdi9rdm0vYWlhX2RldmljZS5jLTU1MS1cdC5nZXRfYXR0ciA9IGFpYV9nZXRfYXR0cixcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMDY6MTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODcwMAoJCQkJCQkJb3V0cHV0OiA0MQoJCQkJCQkJdGhvdWdodHM6IDIxNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipEaXNzZWN0aW5nIHRoZSBSSVNDLVYgQUlBIEluaXRpYWxpemF0aW9uIEZsb3cqKgoKT2theSwgc28gSSYjMzk7bSB0cnlpbmcgdG8gdHJhY2UgdGhlIGluaXRpYWxpemF0aW9uIHBhdGggZm9yIHRoZSBBSUEgKEFkdmFuY2VkIEludGVycnVwdCBBcmNoaXRlY3R1cmUpIHdpdGhpbiB0aGUgS1ZNIFJJU0MtViBpbXBsZW1lbnRhdGlvbi4gTXkgaW5pdGlhbCB0aG91Z2h0IHdhcyB0aGF0IGBhaWFfc2V0X2F0dHJgIHdhcyB0aGUgcHJpbWFyeSBlbnRyeSBwb2ludCwgcmVtZW1iZXJpbmcgaXQgY2FsbHMgYGFpYV9pbml0YCB1bmRlciB0aGUgYEtWTV9ERVZfUklTQ1ZfQUlBX0NUUkxfSU5JVGAgY29uZGl0aW9uLiBBbmQsIHJpZ2h0LCBgYWlhX3NldF9hdHRyYCBjYW4gYWxzbyBjYWxsIGBhaWFfY29uZmlnYCwgaW4gdHVybiB0cmlnZ2VyaW5nIGNhbGxzIHRvIGBhaWFfYXBsaWNfYWRkcmAgYW5kIGBhaWFfaW1zaWNfYWRkcmAuIEhvd2V2ZXIsIEkganVzdCBjYXVnaHQgbXlzZWxm4oCUYGFpYV9zZXRfYXR0cmAgaXMgYWN0dWFsbHkgYSBzdGF0aWMgZnVuY3Rpb24uIFRoYXQmIzM5O3MgYSBrZXkgZGV0YWlsISBUaGUgKnRydWUqIGVudHJ5IHBvaW50IGlzIGBrdm1fcmlzY3ZfYWlhX2RldmljZV9vcHMuc2V0X2F0dHJgLgoKTm93LCBJIG5lZWQgdG8gem9vbSBvdXQgYSBiaXQgYW5kIGZpZ3VyZSBvdXQgaG93IHRoaXMgaXMgYWxsIGNvbm5lY3RlZCB0byB0aGUgbGFyZ2VyIEtWTSBpbmZyYXN0cnVjdHVyZS4gR2l2ZW4gdGhlIGNvbnRleHQsIEkgc2hvdWxkIHByb2JhYmx5IGJlIGxvb2tpbmcgYXQgYGt2bV92bV9pb2N0bF9lbmFibGVfY2FwYCwgY29uc2lkZXJpbmcgdGhlIHJlY2VudCBjaGFuZ2VzIGluIGBhcmNoL3Jpc2N2L2t2bS92bS5jYC4gQnV0IGhvbGQgb24sIGBrdm1fdm1faW9jdGxfZW5hYmxlX2NhcGAgaXMgYSBnZW5lcmljIEtWTSBBUEkgZnVuY3Rpb24uIFNvLCBJIGhhdmUgdG8gZ28gZGVlcGVyLiBJcyB0aGVyZSBhIHNwZWNpZmljIFJJU0MtViBLVk0gaW9jdGwgb3IgZnVuY3Rpb24gdGhhdCYjMzk7cyByZWxldmFudCBoZXJlPyBMZXQmIzM5O3MgZ28gYmFjayB0byBgYXJjaC9yaXNjdi9rdm0vdm0uY2AgYW5kIGZvY3VzIG9uIGhvdyBga3ZtX3ZtX2lvY3RsX2VuYWJsZV9jYXBgIGlzIGltcGxlbWVudGVkIHdpdGhpbiB0aGUgUklTQy1WIGNvbnRleHQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDA2OjE5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2t2bV92bV9pb2N0bF9lbmFibGVfY2FwJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC9yaXNjdi9rdm0vdm0uYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3Jpc2N2L2t2bS92bS5jPTE3ND1pbnQga3ZtX3ZtX2lvY3RsX2NoZWNrX2V4dGVuc2lvbihzdHJ1Y3Qga3ZtICprdm0sIGxvbmcgZXh0KVxuLS1cbmFyY2gvcmlzY3Yva3ZtL3ZtLmMtMjE0LVxuYXJjaC9yaXNjdi9rdm0vdm0uYzoyMTU6aW50IGt2bV92bV9pb2N0bF9lbmFibGVfY2FwKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9lbmFibGVfY2FwICpjYXApXG5hcmNoL3Jpc2N2L2t2bS92bS5jLTIxNi17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDA2OjE5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk0MzUKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAxNTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIEtWTSBBSUEgRGV2aWNlIEluaXRpYWxpemF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBga3ZtX3ZtX2lvY3RsX2VuYWJsZV9jYXBgIGFzIGEgZ29vZCBqdW1waW5nLW9mZiBwb2ludDsgaXQmIzM5O3MgdGhlIHN0YW5kYXJkIEtWTSBpb2N0bCBoYW5kbGVyIGZvciBgS1ZNX0VOQUJMRV9DQVBgLCB0aGF0IG1ha2VzIHNlbnNlLiBMZXQmIzM5O3Mgc2VlIGlmIEkgY2FuIGdldCBzb21lIGNvbnRleHQgYnkgbG9va2luZyBhdCBBSUEgZGV2aWNlIGluaXRpYWxpemF0aW9uIGFzIGEgd2hvbGUuIGBhaWFfc2V0X2F0dHJgIGNvbWVzIHRvIG1pbmQgYXMgaXQmIzM5O3Mgc29tZXRoaW5nIEkmIzM5O3ZlIHNlZW4gYmVmb3JlLiBBaCwgYnV0IGl0JiMzOTtzIHN0YXRpYyDigJMgdGhhdCBtZWFucyBpdCB3b24mIzM5O3QgaGF2ZSBhIHVuaXF1ZSBzeW1ib2wgYWRkcmVzcyBpZiBpdCYjMzk7cyBpbmxpbmVkLi4uIHVubGVzcyBpdCYjMzk7cyAqbm90KiBpbmxpbmVkLCBhbmQgaXQgc2hvdWxkbiYjMzk7dCBiZSwgYmVjYXVzZSBpdCYjMzk7cyBhc3NpZ25lZCB0byBhIHN0cnVjdCBvZiBmdW5jdGlvbiBwb2ludGVycy4gUmlnaHQuIEhtbSwgYnV0IHRoYXQgJiMzNDtzdGF0aWMmIzM0OyBpcyBzdGlsbCBhIHByb2JsZW0sIEkgbmVlZCBhIG5vbi1zdGF0aWMgZnVuY3Rpb24uCgpPa2F5LCBsZXQmIzM5O3Mgc2VlLi4uIGBrdm1fcmlzY3ZfYWlhX2RldmljZV9vcHNgIGxvb2tzIHByb21pc2luZzsgaXQmIzM5O3MgYSBzdHJ1Y3QgYW5kIHRoYXQgc3VnZ2VzdHMgaXQgbWlnaHQgaGF2ZSBhc3NvY2lhdGVkIG5vbi1zdGF0aWMgZnVuY3Rpb25zLiBUaW1lIHRvIGRpZyBhIGJpdCBkZWVwZXIgYW5kIHNlZSBpZiBJIGNhbiBpZGVudGlmeSBhbnkgb3RoZXIgcmVsYXRlZCBub24tc3RhdGljIGZ1bmN0aW9ucyBpbnZvbHZlZCBpbiBBSUEgZGV2aWNlIGNyZWF0aW9uIHdpdGhpbiB0aGUgS1ZNIGZyYW1ld29yay4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMDY6MTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7a3ZtX3Jpc2N2X2FpYV9kZXZpY2Vfb3BzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC9yaXNjdi9rdm0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvcmlzY3Yva3ZtL2FpYS5jPTY3Mj1pbnQga3ZtX3Jpc2N2X2FpYV9pbml0KHZvaWQpXG4tLVxuYXJjaC9yaXNjdi9rdm0vYWlhLmMtNjk3LVx0LyogUmVnaXN0ZXIgZGV2aWNlIG9wZXJhdGlvbnMgKi9cbmFyY2gvcmlzY3Yva3ZtL2FpYS5jOjY5ODpcdHJjID0ga3ZtX3JlZ2lzdGVyX2RldmljZV9vcHMoXHUwMDI2a3ZtX3Jpc2N2X2FpYV9kZXZpY2Vfb3BzLFxuYXJjaC9yaXNjdi9rdm0vYWlhLmMtNjk5LVx0XHRcdFx0ICAgICBLVk1fREVWX1RZUEVfUklTQ1ZfQUlBKTtcbi0tXG5hcmNoL3Jpc2N2L2t2bS9haWFfZGV2aWNlLmM9NTAxPXN0YXRpYyBpbnQgYWlhX2hhc19hdHRyKHN0cnVjdCBrdm1fZGV2aWNlICpkZXYsIHN0cnVjdCBrdm1fZGV2aWNlX2F0dHIgKmF0dHIpXG4tLVxuYXJjaC9yaXNjdi9rdm0vYWlhX2RldmljZS5jLTU0NS1cbmFyY2gvcmlzY3Yva3ZtL2FpYV9kZXZpY2UuYzo1NDY6c3RydWN0IGt2bV9kZXZpY2Vfb3BzIGt2bV9yaXNjdl9haWFfZGV2aWNlX29wcyA9IHtcbmFyY2gvcmlzY3Yva3ZtL2FpYV9kZXZpY2UuYy01NDctXHQubmFtZSA9IFwmIzM0O2t2bS1yaXNjdi1haWFcJiMzNDssXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDA2OjE5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwMTU3CgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMTk0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBLVk0gRGV2aWNlIFJlZ2lzdHJhdGlvbiBhbmQgQXR0cmlidXRlIFNldHRpbmcqKgoKT2theSwgc28gSSYjMzk7bSB0cmFjaW5nIHRoaXMgS1ZNIGRldmljZSByZWdpc3RyYXRpb24gcHJvY2Vzcy4gSXQgbG9va3MgbGlrZSBga3ZtX3JlZ2lzdGVyX2RldmljZV9vcHNgIGlzIHdoZXJlIHRoZSBjb3JlIHJlZ2lzdHJhdGlvbiBoYXBwZW5zLCBhcyBleHBlY3RlZC4gVGhlIGFjdHVhbCB1c2VyLWZhY2luZyBlbnRyeSBwb2ludCBhcHBlYXJzIHRvIGJlIHRoZSBgS1ZNX0NSRUFURV9ERVZJQ0VgIGlvY3RsLCB3aGljaCB0aGVuIGNhbGxzIGBrdm1faW9jdGxfY3JlYXRlX2RldmljZWAg4oCTIHJpZ2h0LCBpbiBgdmlydC9rdm0va3ZtX21haW4uY2AuIFRoYXQsIGluIHR1cm4sIGludm9rZXMgdGhlIGBjcmVhdGVgIG9wZXJhdGlvbi4gQW5kLCB0aGUgYEtWTV9TRVRfREVWSUNFX0FUVFJgIGlvY3RsIHRoZW4gdXNlcyB0aGUgYHNldF9hdHRyYCBmdW5jdGlvbi4KCkkgc2VlIHRoYXQgYGFpYV9zZXRfYXR0cmAgaXMgZGVmaW5lZCBhcyBgc3RhdGljYCwgYnV0IGl0cyBhZGRyZXNzIGlzIHN0aWxsIHRha2VuLiBJdCYjMzk7cyBwcm9iYWJseSB2aXNpYmxlIGluIGthbGxzeW1zLCBidXQgaXQmIzM5O3MgcHJvYmFibHkgYmV0dGVyIHRvIGZvY3VzIG9uIHRoZSBga3ZtX3ZtX2lvY3RsX2VuYWJsZV9jYXBgIGZ1bmN0aW9uLCB3aGljaCBpcyBleHBsaWNpdGx5IG1vZGlmaWVkIGFuZCBpc24mIzM5O3QgYHN0YXRpY2AsIHdoaWNoIG1ha2VzIG1vcmUgc2Vuc2UgZm9yIGEgZnVuY3Rpb24gdGhhdCYjMzk7cyBsaWtlbHkgZXhwb3NlZCBvciBpbnRlbmRlZCBmb3IgbWFuaXB1bGF0aW9uLgoKV2FpdCwgYGt2bV92bV9pb2N0bF9lbmFibGVfY2FwYCBpcyBpbiBgYXJjaC9yaXNjdi9rdm0vdm0uY2A/IFRoYXQmIzM5O3MgaW50ZXJlc3RpbmcsIEkgbmVlZCB0byBjaGVjayB0aGUgcmlzY3Ytc3BlY2lmaWMgaW1wbGVtZW50YXRpb24gdG8gdW5kZXJzdGFuZCBob3cgdGhpcyBpcyBoYW5kbGVkLiBMZXQmIzM5O3MgZGVsdmUgaW50byBgYXJjaC9yaXNjdi9rdm0vdm0uY2AgYW5kIHNlZSB3aGF0IGVsc2UgaXMgcHJlc2VudCB0aGVyZSwgdGhlcmUgbWlnaHQgYmUgb3RoZXIgUklTQy1WIHNwZWNpZmljIGltcGxlbWVudGF0aW9ucyB0byBleGFtaW5lLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAwNjoxOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2FyY2gvcmlzY3Yva3ZtL3ZtLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyMTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDIxMDpcdFx0fVxuIDIxMTpcdFxuIDIxMjpcdFx0cmV0dXJuIHI7XG4gMjEzOlx0fVxuIDIxNDpcdFxuIDIxNTpcdGludCBrdm1fdm1faW9jdGxfZW5hYmxlX2NhcChzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fZW5hYmxlX2NhcCAqY2FwKVxuIDIxNjpcdHtcbiAyMTc6XHRcdGlmIChjYXAtXHUwMDNlZmxhZ3MpXG4gMjE4Olx0XHRcdHJldHVybiAtRUlOVkFMO1xuIDIxOTpcdFxuIDIyMDpcdFx0c3dpdGNoIChjYXAtXHUwMDNlY2FwKSB7XG4gMjIxOlx0XHRjYXNlIEtWTV9DQVBfUklTQ1ZfTVBfU1RBVEVfUkVTRVQ6XG4gMjIyOlx0XHRcdGt2bS1cdTAwM2VhcmNoLm1wX3N0YXRlX3Jlc2V0ID0gdHJ1ZTtcbiAyMjM6XHRcdFx0cmV0dXJuIDA7XG4gMjI0Olx0XHRjYXNlIEtWTV9DQVBfVk1fR1BBX0JJVFM6IHtcbiAyMjU6XHRcdFx0dW5zaWduZWQgbG9uZyBncGFfYml0cyA9IGNhcC1cdTAwM2VhcmdzWzBdO1xuIDIyNjpcdFx0XHR1bnNpZ25lZCBsb25nIG5ld19sZXZlbHM7XG4gMjI3Olx0XHRcdGludCByID0gMDtcbiAyMjg6XHRcbiAyMjk6XHRcdFx0LyogRGVjaWRlIHRhcmdldCBwZ2QgbGV2ZWxzIGZyb20gcmVxdWVzdGVkIGdwYV9iaXRzICovXG4gMjMwOlx0I2lmZGVmIENPTkZJR182NEJJVFxuIDIzMTpcdFx0XHRpZiAoZ3BhX2JpdHMgXHUwMDNjPSA0MSlcbiAyMzI6XHRcdFx0XHRuZXdfbGV2ZWxzID0gMzsgICAgICAgIC8qIFN2Mzl4NCAqL1xuIDIzMzpcdFx0XHRlbHNlIGlmIChncGFfYml0cyBcdTAwM2M9IDUwKVxuIDIzNDpcdFx0XHRcdG5ld19sZXZlbHMgPSA0OyAgICAgICAgLyogU3Y0OHg0ICovXG4gMjM1Olx0XHRcdGVsc2UgaWYgKGdwYV9iaXRzIFx1MDAzYz0gNTkpXG4gMjM2Olx0XHRcdFx0bmV3X2xldmVscyA9IDU7ICAgICAgICAvKiBTdjU3eDQgKi9cbiAyMzc6XHRcdFx0ZWxzZVxuIDIzODpcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuIDIzOTpcdCNlbHNlXG4gMjQwOlx0XHRcdC8qIDMyLWJpdDogb25seSBTdjMyeDQqL1xuIDI0MTpcdFx0XHRpZiAoZ3BhX2JpdHMgXHUwMDNjPSAzNClcbiAyNDI6XHRcdFx0XHRuZXdfbGV2ZWxzID0gMjtcbiAyNDM6XHRcdFx0ZWxzZVxuIDI0NDpcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuIDI0NTpcdCNlbmRpZlxuIDI0NjpcdFx0XHRpZiAobmV3X2xldmVscyBcdTAwM2Uga3ZtX3Jpc2N2X2dzdGFnZV9tYXhfcGdkX2xldmVscylcbiAyNDc6XHRcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiAyNDg6XHRcbiAyNDk6XHRcdFx0LyogRm9sbG93IEtWTSYjMzk7cyBsb2NrIG9yZGVyaW5nOiBrdm0tXHUwMDNlbG9jayAtXHUwMDNlIGt2bS1cdTAwM2VzbG90c19sb2NrLiAqL1xuIDI1MDpcdFx0XHRtdXRleF9sb2NrKFx1MDAyNmt2bS1cdTAwM2Vsb2NrKTtcbiAyNTE6XHRcdFx0bXV0ZXhfbG9jayhcdTAwMjZrdm0tXHUwMDNlc2xvdHNfbG9jayk7XG4gMjUyOlx0XG4gMjUzOlx0XHRcdGlmIChrdm0tXHUwMDNlY3JlYXRlZF92Y3B1cyB8fCAha3ZtX2FyZV9hbGxfbWVtc2xvdHNfZW1wdHkoa3ZtKSB8fFxuIDI1NDpcdFx0XHQgICAga3ZtX3Jpc2N2X2FpYV9pbml0aWFsaXplZChrdm0pKVxuIDI1NTpcdFx0XHRcdHIgPSAtRUJVU1k7XG4gMjU2Olx0XHRcdGVsc2VcbiAyNTc6XHRcdFx0XHRrdm0tXHUwMDNlYXJjaC5wZ2RfbGV2ZWxzID0gbmV3X2xldmVscztcbiAyNTg6XHRcbiAyNTk6XHRcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNmt2bS1cdTAwM2VzbG90c19sb2NrKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMDY6MTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE0ODYKCQkJCQkJCW91dHB1dDogNTYKCQkJCQkJCXRob3VnaHRzOiAxNjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBBSUEgSW5pdGlhbGl6YXRpb24gQ2hhbmdlcyoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIG1ha2luZyBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBzcGVjaWZpY2FsbHkgYWRkaW5nIGEgYGt2bV9yaXNjdl9haWFfaW5pdGlhbGl6ZWQoa3ZtKWAgY2hlY2sgd2l0aGluIGBrdm1fdm1faW9jdGxfZW5hYmxlX2NhcGAuIFRoZSBrZXkgdGFrZWF3YXkgaXMgcHJldmVudGluZyBtb2RpZmljYXRpb25zIHRvIGBwZ2RfbGV2ZWxzYCBvbmNlIHRoZSBBSUEgKEFkdmFuY2VkIEludGVycnVwdCBBcmNoaXRlY3R1cmUpIGhhcyBiZWVuIGluaXRpYWxpemVkLiBUaGF0JiMzOTtzIGEgc29saWQsIHRhcmdldGVkIGFwcHJvYWNoIHRvIG1haW50YWluIHN5c3RlbSBpbnRlZ3JpdHkgYWZ0ZXIgYSBjcml0aWNhbCBwb2ludC4KCkJleW9uZCB0aGF0LCBJIHNlZSB0aGUgYWRkaXRpb24gb2YgYGFpYV9jaGVja19hZGRyX3JhbmdlYCBhbmQgYGFpYV92YWxpZGF0ZV9hZGRyX3Jhbmdlc2AgaW4gYGFpYV9kZXZpY2UuY2AuIFRoZXNlIGFyZSBjcnVjaWFsLCBvYnZpb3VzbHksIGZvciBhZGRyZXNzIHJhbmdlIHZhbGlkYXRpb24gYW5kIGFyZSBzdWJzZXF1ZW50bHkgYmVpbmcgY2FsbGVkIGZyb20gc2V2ZXJhbCBvdGhlciBmdW5jdGlvbnMsIG5hbWVseSBgYWlhX2FwbGljX2FkZHJgLCBgYWlhX2ltc2ljX2FkZHJgLCBhbmQgYGFpYV9pbml0YC4gU2luY2UgdGhleSBhcmUgc3RhdGljLCB0aGV5IHdvbiYjMzk7dCBzaG93IHVwIGluIHRoZSBgRm9jdXNTeW1ib2xzYCwgYnV0IHRoYXQgaXMgZXhwZWN0ZWQuCgpIbW0sIGxldCYjMzk7cyBzZWUsIGBrdm1fdm1faW9jdGxfZW5hYmxlX2NhcGAgaXMgYSBnb29kIHNwb3QgZm9yIGluc3BlY3Rpb24uIEFyZSB0aGVyZSBhbnkgb3RoZXIgbm9uLXN0YXRpYyBmdW5jdGlvbnMgd2l0aGluIGBhaWFfZGV2aWNlLmNgIHRoYXQgbWlnaHQgYmUgd29ydGggY29uc2lkZXJpbmc/IEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgdGhlIGNvZGViYXNlIHRvIHZlcmlmeS4gSSBuZWVkIHRvIGJlIHN1cmUgdGhhdCBJIGFtIG5vdCBtaXNzaW5nIGFueXRoaW5nIHRoYXQgbWlnaHQgYWxzbyBpbXBhY3QgaG93IHRoaXMgY2hhbmdlIG9wZXJhdGVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAwNjoxOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDteW2EtekEtWjAtOV9dJiM0MzsgW2EtekEtWjAtOV9dJiM0MztcXCgmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3Jpc2N2L2t2bS9haWFfZGV2aWNlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9yaXNjdi9rdm0vYWlhX2RldmljZS5jPTU0Nj1zdHJ1Y3Qga3ZtX2RldmljZV9vcHMga3ZtX3Jpc2N2X2FpYV9kZXZpY2Vfb3BzID0ge1xuLS1cbmFyY2gvcmlzY3Yva3ZtL2FpYV9kZXZpY2UuYy01NTQtXG5hcmNoL3Jpc2N2L2t2bS9haWFfZGV2aWNlLmM6NTU1OmludCBrdm1fcmlzY3ZfdmNwdV9haWFfdXBkYXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbmFyY2gvcmlzY3Yva3ZtL2FpYV9kZXZpY2UuYy01NTYte1xuLS1cbmFyY2gvcmlzY3Yva3ZtL2FpYV9kZXZpY2UuYy01NjQtXG5hcmNoL3Jpc2N2L2t2bS9haWFfZGV2aWNlLmM6NTY1OnZvaWQga3ZtX3Jpc2N2X3ZjcHVfYWlhX3Jlc2V0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbmFyY2gvcmlzY3Yva3ZtL2FpYV9kZXZpY2UuYy01NjYte1xuLS1cbmFyY2gvcmlzY3Yva3ZtL2FpYV9kZXZpY2UuYy01ODAtXG5hcmNoL3Jpc2N2L2t2bS9haWFfZGV2aWNlLmM6NTgxOnZvaWQga3ZtX3Jpc2N2X3ZjcHVfYWlhX2luaXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuYXJjaC9yaXNjdi9rdm0vYWlhX2RldmljZS5jLTU4Mi17XG4tLVxuYXJjaC9yaXNjdi9rdm0vYWlhX2RldmljZS5jLTU5OS1cbmFyY2gvcmlzY3Yva3ZtL2FpYV9kZXZpY2UuYzo2MDA6dm9pZCBrdm1fcmlzY3ZfdmNwdV9haWFfZGVpbml0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbmFyY2gvcmlzY3Yva3ZtL2FpYV9kZXZpY2UuYy02MDEte1xuLS1cbmFyY2gvcmlzY3Yva3ZtL2FpYV9kZXZpY2UuYy02MDktXG5hcmNoL3Jpc2N2L2t2bS9haWFfZGV2aWNlLmM6NjEwOmludCBrdm1fcmlzY3ZfYWlhX2luamVjdF9tc2lfYnlfaWQoc3RydWN0IGt2bSAqa3ZtLCB1MzIgaGFydF9pbmRleCxcbmFyY2gvcmlzY3Yva3ZtL2FpYV9kZXZpY2UuYy02MTEtXHRcdFx0XHQgICB1MzIgZ3Vlc3RfaW5kZXgsIHUzMiBpaWQpXG4tLVxuYXJjaC9yaXNjdi9rdm0vYWlhX2RldmljZS5jLTYzMC1cbmFyY2gvcmlzY3Yva3ZtL2FpYV9kZXZpY2UuYzo2MzE6aW50IGt2bV9yaXNjdl9haWFfaW5qZWN0X21zaShzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fbXNpICptc2kpXG5hcmNoL3Jpc2N2L2t2bS9haWFfZGV2aWNlLmMtNjMyLXtcbi0tXG5hcmNoL3Jpc2N2L2t2bS9haWFfZGV2aWNlLmMtNjY0LVxuYXJjaC9yaXNjdi9rdm0vYWlhX2RldmljZS5jOjY2NTppbnQga3ZtX3Jpc2N2X2FpYV9pbmplY3RfaXJxKHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgaW50IGlycSwgYm9vbCBsZXZlbClcbmFyY2gvcmlzY3Yva3ZtL2FpYV9kZXZpY2UuYy02NjYte1xuLS1cbmFyY2gvcmlzY3Yva3ZtL2FpYV9kZXZpY2UuYy02NzQtXG5hcmNoL3Jpc2N2L2t2bS9haWFfZGV2aWNlLmM6Njc1OnZvaWQga3ZtX3Jpc2N2X2FpYV9pbml0X3ZtKHN0cnVjdCBrdm0gKmt2bSlcbmFyY2gvcmlzY3Yva3ZtL2FpYV9kZXZpY2UuYy02NzYte1xuLS1cbmFyY2gvcmlzY3Yva3ZtL2FpYV9kZXZpY2UuYy03MDAtXG5hcmNoL3Jpc2N2L2t2bS9haWFfZGV2aWNlLmM6NzAxOnZvaWQga3ZtX3Jpc2N2X2FpYV9kZXN0cm95X3ZtKHN0cnVjdCBrdm0gKmt2bSlcbmFyY2gvcmlzY3Yva3ZtL2FpYV9kZXZpY2UuYy03MDIte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAwNjoxOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjgwNAoJCQkJCQkJb3V0cHV0OiA0MgoJCQkJCQkJdGhvdWdodHM6IDM0NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiBBSUEgRGV2aWNlIEluaXRpYWxpemF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gdHJhY2luZyB0aGUgaW5pdGlhbGl6YXRpb24gYW5kIGF0dHJpYnV0ZSBzZXR0aW5nIGZvciB0aGUgQUlBIGRldmljZSwgYW5kIGl0IHNlZW1zIGxpa2UgdGhlIGtleSBpcyByZWFsbHkgYnVyaWVkIHdpdGhpbiB0aGUgYGFpYV9kZXZpY2UuY2AgZmlsZS4gTm9uZSBvZiB0aGUgZnVuY3Rpb25zICp3aXRoaW4qIHRoYXQgZmlsZSBhcmUgZGlyZWN0bHkgY2FsbGVkIGZyb20gb3V0c2lkZSwgd2hpY2ggaXMgYWx3YXlzIGEgcGFpbi4gVGhleSBhcmUgc3RhdGljLiBCdXQgSSYjMzk7dmUgZ290IGl0LgoKYGFpYV9pbml0YCBzZWVtcyB0byBiZSB0aGUgY3JpdGljYWwgZW50cnkgcG9pbnQgd2l0aGluIGBhaWFfZGV2aWNlLmNgLCBhbmQgdGhhdCYjMzk7cyB0cmlnZ2VyZWQgZnJvbSBgYWlhX3NldF9hdHRyYC4gQW5kICp0aGF0KiBmdW5jdGlvbiwgaW4gdHVybiwgaXMgaW52b2tlZCB3aGVuIGEgYEtWTV9TRVRfREVWSUNFX0FUVFJgIGlvY3RsIGlzIGlzc3VlZC4gVGhpcyBpcyB0aGUgcm9vdCEgVGhlIHNhbWUgZ29lcyBmb3IgYGFpYV9hcGxpY19hZGRyYCBhbmQgYGFpYV9pbXNpY19hZGRyYCwgd2hpY2ggYXJlIGludm9rZWQgd2l0aGluIGBhaWFfY29uZmlnYC4gVGhpcyBhbGwgdHJhY2tzIGJhY2sgdG8gdGhhdCBgS1ZNX1NFVF9ERVZJQ0VfQVRUUmAgaW9jdGwgb24gdGhlIEFJQSBkZXZpY2UuCgpTbyB0aGUgZ2VuZXJpYyBLVk0gZnVuY3Rpb24gdGhhdCBoYW5kbGVzIGBLVk1fU0VUX0RFVklDRV9BVFRSYCBpcyBga3ZtX2RldmljZV9pb2N0bF9hdHRyYCBpbiBgdmlydC9rdm0va3ZtX21haW4uY2AuIEJ1dCBga3ZtX2RldmljZV9pb2N0bF9hdHRyYCBpcyB0b28gZ2VuZXJpYywgd2hpY2ggaXMgdGhlIHByb2JsZW0gd2l0aCB0aGVzZSBnZW5lcmljIGVudHJ5IHBvaW50cy4gU28gSSYjMzk7bSBub3QgZ29pbmcgdG8gYWRkIGl0LgoKU2luY2UgdGhlIGZ1bmN0aW9ucyBtb2RpZmllZCBpbiBgYWlhX2RldmljZS5jYCBhcmUgYWxsIHN0YXRpYywgSSBjYW4mIzM5O3QganVzdCBsaXN0IHRoZW0gZGlyZWN0bHkuIFRoZXkgYXJlIGludGVybmFsIGFuZCBoaWRkZW4uIE5vdGhpbmcgZWxzZSBpbiBgYWlhX2RldmljZS5jYCBjYW4gYmUgbGlzdGVkLiBIb3dldmVyLCBhIGtleSBwb2ludCBvZiBpbml0aWFsaXphdGlvbiBpcyBga3ZtX3ZtX2lvY3RsX2VuYWJsZV9jYXBgLiBJJiMzOTttIHByZXR0eSBzdXJlIHRoYXQgd2lsbCBnaXZlIG1lIGEgZ29vZCBlbnRyeSBwb2ludC4KCkp1c3QgdG8gYmUgc3VyZSwgSSBuZWVkIHRvIGRvdWJsZS1jaGVjayB0aGUgbmVjZXNzYXJ5IEtWTSBjb25maWd1cmF0aW9uLiBUaGUgYmFzZSBLVk0gY29uZmlndXJhdGlvbiB3aWxsIGJlIGVub3VnaCwgc2luY2UgYEtWTWAgaXRzZWxmIGRlcGVuZHMgb24gYFJJU0NWX1NCSWAgYW5kIGBNTVVgLiBKdXN0IHRvIGJlIHNhZmUsIEkmIzM5O20gZ29pbmcgdG8gbG9vayBmb3Igb3RoZXIgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMuIERvZXMgYEtWTV9ERVZfUklTQ1ZfQUlBX0NUUkxfSU5JVGAgaGF2ZSBhbnkgZGVwZW5kZW5jaWVzPwoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAwNjoxOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtLVk1fREVWX1JJU0NWX0FJQV9DVFJMX0lOSVQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3Jpc2N2L2t2bS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9yaXNjdi9rdm0vYWlhX2RldmljZS5jPTM1OT1zdGF0aWMgaW50IGFpYV9zZXRfYXR0cihzdHJ1Y3Qga3ZtX2RldmljZSAqZGV2LCBzdHJ1Y3Qga3ZtX2RldmljZV9hdHRyICphdHRyKVxuLS1cbmFyY2gvcmlzY3Yva3ZtL2FpYV9kZXZpY2UuYy0zOTQtXHRcdHN3aXRjaCAodHlwZSkge1xuYXJjaC9yaXNjdi9rdm0vYWlhX2RldmljZS5jOjM5NTpcdFx0Y2FzZSBLVk1fREVWX1JJU0NWX0FJQV9DVFJMX0lOSVQ6XG5hcmNoL3Jpc2N2L2t2bS9haWFfZGV2aWNlLmMtMzk2LVx0XHRcdG11dGV4X2xvY2soXHUwMDI2ZGV2LVx1MDAzZWt2bS1cdTAwM2Vsb2NrKTtcbi0tXG5hcmNoL3Jpc2N2L2t2bS9haWFfZGV2aWNlLmM9NTAxPXN0YXRpYyBpbnQgYWlhX2hhc19hdHRyKHN0cnVjdCBrdm1fZGV2aWNlICpkZXYsIHN0cnVjdCBrdm1fZGV2aWNlX2F0dHIgKmF0dHIpXG4tLVxuYXJjaC9yaXNjdi9rdm0vYWlhX2RldmljZS5jLTUyNi1cdFx0c3dpdGNoIChhdHRyLVx1MDAzZWF0dHIpIHtcbmFyY2gvcmlzY3Yva3ZtL2FpYV9kZXZpY2UuYzo1Mjc6XHRcdGNhc2UgS1ZNX0RFVl9SSVNDVl9BSUFfQ1RSTF9JTklUOlxuYXJjaC9yaXNjdi9rdm0vYWlhX2RldmljZS5jLTUyOC1cdFx0XHRyZXR1cm4gMDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMDY6MTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM5MjIKCQkJCQkJCW91dHB1dDogMTMzCgkJCQkJCQl0aG91Z2h0czogMzIzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIEtWTSBSSVNDLVYgQUlBIERldmljZSBDb25maWd1cmF0aW9uIENoYW5nZXMqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gSXQgc2VlbXMgd2UmIzM5O3JlIGxvb2tpbmcgYXQgbW9kaWZpY2F0aW9ucyB3aXRoaW4gYGFpYV9kZXZpY2UuY2AuIEZyb20gd2hhdCBJIGdhdGhlciwgdGhpcyBpcyBkaXJlY3RseSByZWxhdGVkIHRvIEtWTSBjb25maWd1cmF0aW9ucywgc3BlY2lmaWNhbGx5IGNvbmNlcm5pbmcgdGhlIEFJQSBhcmNoaXRlY3R1cmUgZm9yIFJJU0MtVi4KCk15IGFuYWx5c2lzIHJldmVhbHMgYSBzZXJpZXMgb2YgY3J1Y2lhbCBjaGFuZ2VzOgoKMS4gIEEgbmV3IGZ1bmN0aW9uLCBgYWlhX2NoZWNrX2FkZHJfcmFuZ2VgLCBoYXMgYmVlbiBpbnRyb2R1Y2VkLgoyLiAgYGFpYV9hcGxpY19hZGRyYCBoYXMgYmVlbiB1cGRhdGVkIHRvIHV0aWxpemUgdGhpcyBuZXcgdmFsaWRhdGlvbiBjaGVjay4KMy4gIFNpbWlsYXJseSwgYGFpYV9pbXNpY19hZGRyYCBub3cgYWxzbyBsZXZlcmFnZXMgYGFpYV9jaGVja19hZGRyX3JhbmdlYC4KNC4gIEFub3RoZXIgZnVuY3Rpb24sIGBhaWFfdmFsaWRhdGVfYWRkcl9yYW5nZXNgLCBoYXMgYmVlbiBhZGRlZCB0byB0aGUgbWl4Lgo1LiAgYGFpYV9pbml0YCBoYXMgYmVlbiBtb2RpZmllZCB0byBpbmNvcnBvcmF0ZSB0aGUgZnVuY3Rpb25hbGl0eSBvZiBgYWlhX3ZhbGlkYXRlX2FkZHJfcmFuZ2VzYC4KNi4gIEFuZCBpbXBvcnRhbnRseSwgYGt2bV92bV9pb2N0bF9lbmFibGVfY2FwYCBub3cgaW5jbHVkZXMgYSBjaGVjayBmb3IgYGt2bV9yaXNjdl9haWFfaW5pdGlhbGl6ZWQoa3ZtKWAuCgpFc3NlbnRpYWxseSwgdGhlc2UgYXJlIGZ1bmN0aW9uYWwgaW1wcm92ZW1lbnRzIHRvIHRoZSBLVk0gUklTQy1WIEFJQSBkZXZpY2UgY29uZmlndXJhdGlvbiwgcHJpbWFyaWx5IGFpbWVkIGF0IHByZXZlbnRpbmcgaXNzdWVzLiBTcGVjaWZpY2FsbHksIHRoZXkmIzM5O3JlIGRlc2lnbmVkIHRvIHN0b3AgaW52YWxpZCBhZGRyZXNzIHJhbmdlcyBmcm9tIGJlaW5nIHNldCBhbmQgdG8gcHJldmVudCB0aGUgbW9kaWZpY2F0aW9uIG9mIGBwZ2RfbGV2ZWxzYCBhZnRlciBBSUEgaW5pdGlhbGl6YXRpb24uIFRoaXMgaXMgYSB2ZXJ5IHRhcmdldGVkIHNldCBvZiBjaGFuZ2VzLgoKVGhlc2UgY2hhbmdlcyBhcmUgY2xlYXJseSBjcml0aWNhbCBmcm9tIGEgc2VjdXJpdHkgc3RhbmRwb2ludC4gR2l2ZW4gdGhhdCB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIEtWTSwgd2hpY2ggaXMgYSBrZXkgY29tcG9uZW50IGZvciB2aXJ0dWFsaXphdGlvbiwgdGhlc2UgZnVuY3Rpb25hbCBjaGFuZ2VzIHdhcnJhbnQgdGhvcm91Z2ggZnV6emluZy4gTXkgcHJpbWFyeSBmb2N1cyB3aWxsIGJlIG9uIGBrdm1fdm1faW9jdGxfZW5hYmxlX2NhcGAuIFRoZSBjb25maWd1cmF0aW9uIGNvbnRleHQgaXMgYEtWTWAuIEkgbmVlZCB0byBlbnN1cmUgdGhhdCB0aGUgbmV3IHZhbGlkYXRpb24gbG9naWMgaGFuZGxlcyBhbGwgcG9zc2libGUgZWRnZSBjYXNlcyB3aGVuIGludGVyYWN0aW5nIHdpdGggdGhlc2UgaW9jdGwgaGFuZGxlcnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDA2OjIwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtLVk0mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtrdm1fdm1faW9jdGxfZW5hYmxlX2NhcCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGFkZHJlc3MgcmFuZ2UgdmFsaWRhdGlvbiBmb3IgdGhlIFJJU0MtViBBSUEgKEFkdmFuY2VkIEludGVycnVwdCBBcmNoaXRlY3R1cmUpIEtWTSBkZXZpY2UgYW5kIHByZXZlbnRzIGNoYW5naW5nIHRoZSBWTSYjMzk7cyBwZ2RfbGV2ZWxzIGFmdGVyIHRoZSBBSUEgZGV2aWNlIGhhcyBiZWVuIGluaXRpYWxpemVkLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHJlYWNoYWJsZSBLVk0gaW9jdGwgaGFuZGxlcnMgKEtWTV9TRVRfREVWSUNFX0FUVFIgYW5kIEtWTV9FTkFCTEVfQ0FQKSBhbmQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgdGhlIG5ldyB2YWxpZGF0aW9uIGxvZ2ljIGhhbmRsZXMgYWxsIGVkZ2UgY2FzZXMgY29ycmVjdGx5LiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtLVk0mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtrdm1fdm1faW9jdGxfZW5hYmxlX2NhcCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGFkZHJlc3MgcmFuZ2UgdmFsaWRhdGlvbiBmb3IgdGhlIFJJU0MtViBBSUEgKEFkdmFuY2VkIEludGVycnVwdCBBcmNoaXRlY3R1cmUpIEtWTSBkZXZpY2UgYW5kIHByZXZlbnRzIGNoYW5naW5nIHRoZSBWTSYjMzk7cyBwZ2RfbGV2ZWxzIGFmdGVyIHRoZSBBSUEgZGV2aWNlIGhhcyBiZWVuIGluaXRpYWxpemVkLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHJlYWNoYWJsZSBLVk0gaW9jdGwgaGFuZGxlcnMgKEtWTV9TRVRfREVWSUNFX0FUVFIgYW5kIEtWTV9FTkFCTEVfQ0FQKSBhbmQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgdGhlIG5ldyB2YWxpZGF0aW9uIGxvZ2ljIGhhbmRsZXMgYWxsIGVkZ2UgY2FzZXMgY29ycmVjdGx5LiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAwNjoyMDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDA2OjIwPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYm91bmRzIGNoZWNraW5nLCBvdmVyZmxvdyBwcmV2ZW50aW9uLCBhbmQgc3RhdGUgdmFsaWRhdGlvbiBmb3IgUklTQy1WIEtWTSBBSUEgKEFkdmFuY2VkIEludGVycnVwdCBBcmNoaXRlY3R1cmUpIGRldmljZSBhZGRyZXNzZXMgKEFQTElDIGFuZCBJTVNJQykuIEl0IGVuc3VyZXMgdGhhdCB0aGUgY29uZmlndXJlZCBndWVzdCBwaHlzaWNhbCBhZGRyZXNzZXMgZG8gbm90IG92ZXJmbG93IGFuZCBmaXQgd2l0aGluIHRoZSBndWVzdCBzdGFnZSBwYWdlIHRhYmxlIHNpemUuIFRoZXNlIGNoYW5nZXMgYWRkcmVzcyBwb3RlbnRpYWwgb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyBvciBpbnZhbGlkIGNvbmZpZ3VyYXRpb25zLCB3aGljaCBhcmUgdHlwaWNhbGx5IGNhdWdodCBieSBLQVNBTiBvciBzdGFuZGFyZCBrZXJuZWwgY2hlY2tzLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgc3RydWN0dXJlcyBjb3BpZWQgdG8gdXNlciBzcGFjZSwgbm9yIGRvZXMgaXQgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSBvciBpbmZvLWxlYWtzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGIwNjQxYzc3YmFhM2RlZDAzOTRhMzg2NjA2YTZiZThhM2I5Zjc1ODYKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgV2VkIEF1ZyAxMiAwNjoxOTowNyAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2FyY2gvcmlzY3Yva3ZtL2FpYV9kZXZpY2UuYyBiL2FyY2gvcmlzY3Yva3ZtL2FpYV9kZXZpY2UuYwppbmRleCBlZmM3YzBiY2ZiYTkyLi5lOTY5ZGJkYzRiOTcxIDEwMDY0NAotLS0gYS9hcmNoL3Jpc2N2L2t2bS9haWFfZGV2aWNlLmMKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9yaXNjdi9rdm0vYWlhX2RldmljZS5jCkBAIC0xMCw3ICYjNDM7MTAsOSBAQAogI2luY2x1ZGUgJmx0O2xpbnV4L2JpdHMuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9pcnFjaGlwL3Jpc2N2LWltc2ljLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgva3ZtX2hvc3QuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvb3ZlcmZsb3cuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC91YWNjZXNzLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2FzbS9rdm1fZ3N0YWdlLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7YXNtL2t2bV9pc2EuaCZndDsKIAogc3RhdGljIGludCBhaWFfY3JlYXRlKHN0cnVjdCBrdm1fZGV2aWNlICpkZXYsIHUzMiB0eXBlKQpAQCAtMTQyLDE3ICYjNDM7MTQ0LDM3IEBAIHN0YXRpYyBpbnQgYWlhX2NvbmZpZyhzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGxvbmcgdHlwZSwKIAlyZXR1cm4gMDsKIH0KIAomIzQzO3N0YXRpYyBpbnQgYWlhX2NoZWNrX2FkZHJfcmFuZ2Uoc3RydWN0IGt2bSAqa3ZtLCB1NjQgYWRkciwgdTY0IGFsaWdubWVudCwKJiM0MzsJCQkJdTY0IHNpemUpCiYjNDM7ewomIzQzOwl1NjQgZW5kOwomIzQzOwomIzQzOwlpZiAoIUlTX0FMSUdORUQoYWRkciwgYWxpZ25tZW50KSkKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwomIzQzOwlpZiAoY2hlY2tfYWRkX292ZXJmbG93KGFkZHIsIHNpemUsICZhbXA7ZW5kKSkKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwomIzQzOwlpZiAoZW5kICZndDsga3ZtX3Jpc2N2X2dzdGFnZV9ncGFfc2l6ZShrdm0tJmd0O2FyY2gucGdkX2xldmVscykpCiYjNDM7CQlyZXR1cm4gLUUyQklHOwomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgaW50IGFpYV9hcGxpY19hZGRyKHN0cnVjdCBrdm0gKmt2bSwgdTY0ICphZGRyLCBib29sIHdyaXRlKQogewogCXN0cnVjdCBrdm1fYWlhICphaWEgPSAmYW1wO2t2bS0mZ3Q7YXJjaC5haWE7CiYjNDM7CWludCByZXQ7CiAKIAlpZiAod3JpdGUpIHsKIAkJLyogV3JpdGVzIGNhbiBvbmx5IGJlIGRvbmUgYmVmb3JlIGlycWNoaXAgaXMgaW5pdGlhbGl6ZWQgKi8KIAkJaWYgKGt2bV9yaXNjdl9haWFfaW5pdGlhbGl6ZWQoa3ZtKSkKIAkJCXJldHVybiAtRUJVU1k7CiAKLQkJaWYgKCphZGRyICZhbXA7IChLVk1fREVWX1JJU0NWX0FQTElDX0FMSUdOIC0gMSkpCi0JCQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJCXJldCA9IGFpYV9jaGVja19hZGRyX3JhbmdlKGt2bSwgKmFkZHIsIEtWTV9ERVZfUklTQ1ZfQVBMSUNfQUxJR04sCiYjNDM7CQkJCQkgICBLVk1fREVWX1JJU0NWX0FQTElDX1NJWkUpOwomIzQzOwkJaWYgKHJldCkKJiM0MzsJCQlyZXR1cm4gcmV0OwogCiAJCWFpYS0mZ3Q7YXBsaWNfYWRkciA9ICphZGRyOwogCX0gZWxzZQpAQCAtMTY2LDYgJiM0MzsxODgsNyBAQCBzdGF0aWMgaW50IGFpYV9pbXNpY19hZGRyKHN0cnVjdCBrdm0gKmt2bSwgdTY0ICphZGRyLAogewogCXN0cnVjdCBrdm1fdmNwdSAqdmNwdTsKIAlzdHJ1Y3Qga3ZtX3ZjcHVfYWlhICp2Y3B1X2FpYTsKJiM0MzsJaW50IHJldDsKIAogCXZjcHUgPSBrdm1fZ2V0X3ZjcHUoa3ZtLCB2Y3B1X2lkeCk7CiAJaWYgKCF2Y3B1KQpAQCAtMTc3LDggJiM0MzsyMDAsMTAgQEAgc3RhdGljIGludCBhaWFfaW1zaWNfYWRkcihzdHJ1Y3Qga3ZtICprdm0sIHU2NCAqYWRkciwKIAkJaWYgKGt2bV9yaXNjdl9haWFfaW5pdGlhbGl6ZWQoa3ZtKSkKIAkJCXJldHVybiAtRUJVU1k7CiAKLQkJaWYgKCphZGRyICZhbXA7IChLVk1fREVWX1JJU0NWX0lNU0lDX0FMSUdOIC0gMSkpCi0JCQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJCXJldCA9IGFpYV9jaGVja19hZGRyX3JhbmdlKGt2bSwgKmFkZHIsIEtWTV9ERVZfUklTQ1ZfSU1TSUNfQUxJR04sCiYjNDM7CQkJCQkgICBLVk1fREVWX1JJU0NWX0lNU0lDX1NJWkUpOwomIzQzOwkJaWYgKHJldCkKJiM0MzsJCQlyZXR1cm4gcmV0OwogCX0KIAogCW11dGV4X2xvY2soJmFtcDt2Y3B1LSZndDttdXRleCk7CkBAIC0xOTEsNiAmIzQzOzIxNiw0MCBAQCBzdGF0aWMgaW50IGFpYV9pbXNpY19hZGRyKHN0cnVjdCBrdm0gKmt2bSwgdTY0ICphZGRyLAogCXJldHVybiAwOwogfQogCiYjNDM7c3RhdGljIGludCBhaWFfdmFsaWRhdGVfYWRkcl9yYW5nZXMoc3RydWN0IGt2bSAqa3ZtKQomIzQzO3sKJiM0MzsJc3RydWN0IGt2bV9haWEgKmFpYSA9ICZhbXA7a3ZtLSZndDthcmNoLmFpYTsKJiM0MzsJc3RydWN0IGt2bV92Y3B1X2FpYSAqdmFpYTsKJiM0MzsJc3RydWN0IGt2bV92Y3B1ICp2Y3B1OwomIzQzOwl1bnNpZ25lZCBsb25nIGlkeDsKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJaWYgKGFpYS0mZ3Q7bnJfc291cmNlcykgewomIzQzOwkJaWYgKGFpYS0mZ3Q7YXBsaWNfYWRkciA9PSBLVk1fUklTQ1ZfQUlBX1VOREVGX0FERFIpCiYjNDM7CQkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CiYjNDM7CQlyZXQgPSBhaWFfY2hlY2tfYWRkcl9yYW5nZShrdm0sIGFpYS0mZ3Q7YXBsaWNfYWRkciwKJiM0MzsJCQkJCSAgIEtWTV9ERVZfUklTQ1ZfQVBMSUNfQUxJR04sCiYjNDM7CQkJCQkgICBLVk1fREVWX1JJU0NWX0FQTElDX1NJWkUpOwomIzQzOwkJaWYgKHJldCkKJiM0MzsJCQlyZXR1cm4gcmV0OwomIzQzOwl9CiYjNDM7CiYjNDM7CWt2bV9mb3JfZWFjaF92Y3B1KGlkeCwgdmNwdSwga3ZtKSB7CiYjNDM7CQl2YWlhID0gJmFtcDt2Y3B1LSZndDthcmNoLmFpYV9jb250ZXh0OwomIzQzOwkJaWYgKHZhaWEtJmd0O2ltc2ljX2FkZHIgPT0gS1ZNX1JJU0NWX0FJQV9VTkRFRl9BRERSKQomIzQzOwkJCXJldHVybiAtRUlOVkFMOwomIzQzOwomIzQzOwkJcmV0ID0gYWlhX2NoZWNrX2FkZHJfcmFuZ2Uoa3ZtLCB2YWlhLSZndDtpbXNpY19hZGRyLAomIzQzOwkJCQkJICAgS1ZNX0RFVl9SSVNDVl9JTVNJQ19BTElHTiwKJiM0MzsJCQkJCSAgIEtWTV9ERVZfUklTQ1ZfSU1TSUNfU0laRSk7CiYjNDM7CQlpZiAocmV0KQomIzQzOwkJCXJldHVybiByZXQ7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwogc3RhdGljIGdwYV90IGFpYV9pbXNpY19wcG4oc3RydWN0IGt2bV9haWEgKmFpYSwgZ3BhX3QgYWRkcikKIHsKIAl1MzIgaCwgbDsKQEAgLTI0NCw5ICYjNDM7MzAzLDkgQEAgc3RhdGljIGludCBhaWFfaW5pdChzdHJ1Y3Qga3ZtICprdm0pCiAJaWYgKGFpYS0mZ3Q7bnJfaWRzICZsdDsgYWlhLSZndDtucl9zb3VyY2VzKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCS8qIEFQTElDIGJhc2UgaXMgcmVxdWlyZWQgZm9yIG5vbi16ZXJvIG51bWJlciBvZiBzb3VyY2VzICovCi0JaWYgKGFpYS0mZ3Q7bnJfc291cmNlcyAmYW1wOyZhbXA7IGFpYS0mZ3Q7YXBsaWNfYWRkciA9PSBLVk1fUklTQ1ZfQUlBX1VOREVGX0FERFIpCi0JCXJldHVybiAtRUlOVkFMOwomIzQzOwlyZXQgPSBhaWFfdmFsaWRhdGVfYWRkcl9yYW5nZXMoa3ZtKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCXJldHVybiByZXQ7CiAKIAkvKiBHcm91cCBpbmRleCBiaXRzIG11c3Qgbm90IG92ZXJsYXAgZ3Vlc3QgYW5kIEhBUlQgaW5kZXggYml0cy4gKi8KIAlpZiAoYWlhLSZndDtucl9ncm91cF9iaXRzICZhbXA7JmFtcDsKQEAgLTI2MywxMiAmIzQzOzMyMiw2IEBAIHN0YXRpYyBpbnQgYWlhX2luaXQoc3RydWN0IGt2bSAqa3ZtKQogCWt2bV9mb3JfZWFjaF92Y3B1KGlkeCwgdmNwdSwga3ZtKSB7CiAJCXZhaWEgPSAmYW1wO3ZjcHUtJmd0O2FyY2guYWlhX2NvbnRleHQ7CiAKLQkJLyogSU1TSUMgYmFzZSBpcyByZXF1aXJlZCAqLwotCQlpZiAodmFpYS0mZ3Q7aW1zaWNfYWRkciA9PSBLVk1fUklTQ1ZfQUlBX1VOREVGX0FERFIpIHsKLQkJCXJldCA9IC1FSU5WQUw7Ci0JCQlnb3RvIGZhaWxfY2xlYW51cF9pbXNpY3M7Ci0JCX0KLQogCQkvKiBBbGwgSU1TSUNzIHNob3VsZCBoYXZlIG1hdGNoaW5nIGJhc2UgUFBOICovCiAJCWlmIChiYXNlX3BwbiA9PSBLVk1fUklTQ1ZfQUlBX1VOREVGX0FERFIpCiAJCQliYXNlX3BwbiA9IGFpYV9pbXNpY19wcG4oYWlhLCB2YWlhLSZndDtpbXNpY19hZGRyKTsKZGlmZiAtLWdpdCBhL2FyY2gvcmlzY3Yva3ZtL3ZtLmMgYi9hcmNoL3Jpc2N2L2t2bS92bS5jCmluZGV4IGE5ZjA4M2ZlZWI3NjcuLjY2ZWRmYWE4NjI0MzUgMTAwNjQ0Ci0tLSBhL2FyY2gvcmlzY3Yva3ZtL3ZtLmMKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9yaXNjdi9rdm0vdm0uYwpAQCAtMjUwLDcgJiM0MzsyNTAsOCBAQCBpbnQga3ZtX3ZtX2lvY3RsX2VuYWJsZV9jYXAoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX2VuYWJsZV9jYXAgKmNhcCkKIAkJbXV0ZXhfbG9jaygmYW1wO2t2bS0mZ3Q7bG9jayk7CiAJCW11dGV4X2xvY2soJmFtcDtrdm0tJmd0O3Nsb3RzX2xvY2spOwogCi0JCWlmIChrdm0tJmd0O2NyZWF0ZWRfdmNwdXMgfHwgIWt2bV9hcmVfYWxsX21lbXNsb3RzX2VtcHR5KGt2bSkpCiYjNDM7CQlpZiAoa3ZtLSZndDtjcmVhdGVkX3ZjcHVzIHx8ICFrdm1fYXJlX2FsbF9tZW1zbG90c19lbXB0eShrdm0pIHx8CiYjNDM7CQkgICAga3ZtX3Jpc2N2X2FpYV9pbml0aWFsaXplZChrdm0pKQogCQkJciA9IC1FQlVTWTsKIAkJZWxzZQogCQkJa3ZtLSZndDthcmNoLnBnZF9sZXZlbHMgPSBuZXdfbGV2ZWxzOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMDY6MjA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzgyMwoJCQkJCQkJb3V0cHV0OiAxNDgKCQkJCQkJCXRob3VnaHRzOiAzNjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgUklTQy1WIEtWTSBBSUEgUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gVGhpcyBwYXRjaCBpcyBmb2N1c2VkIG9uIGhhcmRlbmluZyB0aGUgUklTQy1WIEtWTSBBSUEgZGV2aWNlIGNvZGUsIHNwZWNpZmljYWxseSBieSBhZGRpbmcgcmlnb3JvdXMgYWRkcmVzcyByYW5nZSB2YWxpZGF0aW9uLiBNeSBpbml0aWFsIHJlYWQgdGVsbHMgbWUgaXQmIzM5O3MgYWxsIGFib3V0IGJvdW5kcyBjaGVja2luZywgb3ZlcmZsb3cgcHJvdGVjdGlvbiwgYW5kIGVuc3VyaW5nIHRoZSBpbnRlcm5hbCBzdGF0ZSBpcyBjb25zaXN0ZW50LgoKSSBzZWUgdGhhdCBgYWlhX2NoZWNrX2FkZHJfcmFuZ2VgIGlzIGludHJvZHVjZWQgdG8gdmFsaWRhdGUgYWRkcmVzcyByYW5nZXMgZm9yIGJvdGggdGhlIEFQTElDIGFuZCBJTVNJQyBjb21wb25lbnRzLiBJdCBtZXRpY3Vsb3VzbHkgY2hlY2tzIGZvciBhbGlnbm1lbnQsIHBvdGVudGlhbCBvdmVyZmxvd3MgZHVyaW5nIGNhbGN1bGF0aW9ucywgYW5kIGNydWNpYWxseSwgZW5zdXJlcyB0aGUgZW5kIGFkZHJlc3MgZG9lc24mIzM5O3QgZXhjZWVkIHRoZSBga3ZtX3Jpc2N2X2dzdGFnZV9ncGFfc2l6ZWAuIEkgYWxzbyBub3RpY2UgYGFpYV92YWxpZGF0ZV9hZGRyX3Jhbmdlc2AgaXMgaW1wbGVtZW50ZWQgdG8gaGFuZGxlIHZhbGlkYXRpb24gb2YgKmFsbCogQVBMSUMgYW5kIElNU0lDIGFkZHJlc3NlcyBkdXJpbmcgYGFpYV9pbml0YCwgYWRkaW5nIGZ1cnRoZXIgcHJvYWN0aXZlIG1lYXN1cmVzLiBUaGUgYGt2bV92bV9pb2N0bF9lbmFibGVfY2FwYCBjb2RlIGhhcyBhbHNvIGJlZW4gdXBkYXRlZCB0byByZXR1cm4gYW4gYC1FQlVTWWAgZXJyb3IgaWYgd2UmIzM5O3JlIHRyeWluZyB0byBzZXQgYHBnZF9sZXZlbHNgIHdoaWxlIHRoZSBBSUEgaXMgYWxyZWFkeSBpbml0aWFsaXplZC4KCkFsbCBvZiB0aGVzZSBjaGFuZ2VzIHNjcmVhbSBkZWZlbnNlLWluLWRlcHRoIHRvIG1lLiBUaGUgb2JqZWN0aXZlIGlzIHRvIG1ha2UgS1ZNIGlvY3RscyBtb3JlIHJvYnVzdCBieSBwcmV2ZW50aW5nIGFueSBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzIG9yIGludmFsaWQgY29uZmlndXJhdGlvbnMuIFRoZSB0ZXh0IHNwZWNpZmljYWxseSBzdGF0ZXMgdGhlcmUgYXJlIG5vIG5ldyB1c2VyLXNwYWNlIHN0cnVjdHVyZXMgYW5kIHRoYXQgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLiBFc3NlbnRpYWxseSwgdGhpcyBwYXRjaCBpcyBhYm91dCBzdG9wcGluZyBiYWQgZGF0YSBmcm9tIGNvcnJ1cHRpbmcgdGhlIHZpcnR1YWxpemF0aW9uIGVudmlyb25tZW50LgoKTm93LCBnaXZlbiB0aGUgbmF0dXJlIG9mIHRoZXNlIGNoYW5nZXMsIHRoZSB0ZXh0IHNheXMgdGhhdCBLQVNBTiBhbmQgc3RhbmRhcmQgY2hlY2tzIHNob3VsZCBjYXRjaCB0aGVzZSB0eXBlcyBvZiBidWdzLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgJiMzNDtPa2F5LCB0aGF0IHNlZW1zIGxvZ2ljYWwuJiMzNDsgQnV0LCBJIG5lZWQgdG8gbWFrZSBzdXJlLCBsZXQmIzM5O3MgY29uZmlybSB0aGUgbGFjayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeS4gTGV0JiMzOTtzIGRlbHZlIGluLgoKYGFpYV9jaGVja19hZGRyX3JhbmdlYCBpcyB0aGUgY3JpdGljYWwgZnVuY3Rpb24sIGFuZCBpdCYjMzk7cyB0YWtpbmcgYW4gYGFkZHJgLCBgYWxpZ25tZW50YCwgYW5kIGBzaXplYC4gR29vZCwgaXQgdXNlcyBgY2hlY2tfYWRkX292ZXJmbG93YC4gSXQmIzM5O3MgdXNlZCBieSBgYWlhX2FwbGljX2FkZHJgIGFuZCBgYWlhX2ltc2ljX2FkZHJgIGNhbGxlZCBmcm9tIGlvY3RscyAoS1ZNX1NFVF9ERVZJQ0VfQVRUUi9LVk1fR0VUX0RFVklDRV9BVFRSKS4gVGhlIGBhZGRyYCBhcmd1bWVudCBpcyBwYXNzZWQgYXMgYSBzaW1wbGUgdTY0LiBPa2F5LCBzbyBubyBwb2ludGVycyB0byB1bmluaXRpYWxpemVkIG1lbW9yeSBiZWluZyBsZWFrZWQgdG8gdXNlciBzcGFjZS4KClNvLCBhZnRlciB0aGlzIGRlZXBlciBkaXZlLCBJIGNhbiBjb25jbHVkZSB3aXRoIGNvbmZpZGVuY2UgdGhhdCwgYmFzZWQgb24gbXkgdW5kZXJzdGFuZGluZywgdGhpcyBwYXRjaCBkb2VzICpub3QqIHJlcXVpcmUgTmVlZHNLTVNBTiB0byBiZSB0cnVlLiBJdCYjMzk7cyBhYm91dCBkYXRhIHZhbGlkYXRpb24sIG5vdCBtZW1vcnkgaW5pdGlhbGl6YXRpb24gdnVsbmVyYWJpbGl0aWVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAwNjoyMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGJvdW5kcyBjaGVja2luZywgb3ZlcmZsb3cgcHJldmVudGlvbiwgYW5kIHN0YXRlIHZhbGlkYXRpb24gZm9yIFJJU0MtViBLVk0gQUlBIChBZHZhbmNlZCBJbnRlcnJ1cHQgQXJjaGl0ZWN0dXJlKSBkZXZpY2UgYWRkcmVzc2VzIChBUExJQyBhbmQgSU1TSUMpLiBJdCBlbnN1cmVzIHRoYXQgdGhlIGNvbmZpZ3VyZWQgZ3Vlc3QgcGh5c2ljYWwgYWRkcmVzc2VzIGRvIG5vdCBvdmVyZmxvdyBhbmQgZml0IHdpdGhpbiB0aGUgZ3Vlc3Qgc3RhZ2UgcGFnZSB0YWJsZSBzaXplLiBUaGVzZSBjaGFuZ2VzIGFkZHJlc3MgcG90ZW50aWFsIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMgb3IgaW52YWxpZCBjb25maWd1cmF0aW9ucywgd2hpY2ggYXJlIHR5cGljYWxseSBjYXVnaHQgYnkgS0FTQU4gb3Igc3RhbmRhcmQga2VybmVsIGNoZWNrcy4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IHN0cnVjdHVyZXMgY29waWVkIHRvIHVzZXIgc3BhY2UsIG5vciBkb2VzIGl0IGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgb3IgaW5mby1sZWFrcy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBib3VuZHMgY2hlY2tpbmcsIG92ZXJmbG93IHByZXZlbnRpb24sIGFuZCBzdGF0ZSB2YWxpZGF0aW9uIGZvciBSSVNDLVYgS1ZNIEFJQSAoQWR2YW5jZWQgSW50ZXJydXB0IEFyY2hpdGVjdHVyZSkgZGV2aWNlIGFkZHJlc3NlcyAoQVBMSUMgYW5kIElNU0lDKS4gSXQgZW5zdXJlcyB0aGF0IHRoZSBjb25maWd1cmVkIGd1ZXN0IHBoeXNpY2FsIGFkZHJlc3NlcyBkbyBub3Qgb3ZlcmZsb3cgYW5kIGZpdCB3aXRoaW4gdGhlIGd1ZXN0IHN0YWdlIHBhZ2UgdGFibGUgc2l6ZS4gVGhlc2UgY2hhbmdlcyBhZGRyZXNzIHBvdGVudGlhbCBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzIG9yIGludmFsaWQgY29uZmlndXJhdGlvbnMsIHdoaWNoIGFyZSB0eXBpY2FsbHkgY2F1Z2h0IGJ5IEtBU0FOIG9yIHN0YW5kYXJkIGtlcm5lbCBjaGVja3MuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBzdHJ1Y3R1cmVzIGNvcGllZCB0byB1c2VyIHNwYWNlLCBub3IgZG9lcyBpdCBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IG9yIGluZm8tbGVha3MuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMTJUMDY6MTk6MDguMDU4OTA2NTY1WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjcyNzAzNjA2MTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiS1ZNXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwia3ZtX3ZtX2lvY3RsX2VuYWJsZV9jYXBcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYm91bmRzIGNoZWNraW5nLCBvdmVyZmxvdyBwcmV2ZW50aW9uLCBhbmQgc3RhdGUgdmFsaWRhdGlvbiBmb3IgUklTQy1WIEtWTSBBSUEgKEFkdmFuY2VkIEludGVycnVwdCBBcmNoaXRlY3R1cmUpIGRldmljZSBhZGRyZXNzZXMgKEFQTElDIGFuZCBJTVNJQykuIEl0IGVuc3VyZXMgdGhhdCB0aGUgY29uZmlndXJlZCBndWVzdCBwaHlzaWNhbCBhZGRyZXNzZXMgZG8gbm90IG92ZXJmbG93IGFuZCBmaXQgd2l0aGluIHRoZSBndWVzdCBzdGFnZSBwYWdlIHRhYmxlIHNpemUuIFRoZXNlIGNoYW5nZXMgYWRkcmVzcyBwb3RlbnRpYWwgb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyBvciBpbnZhbGlkIGNvbmZpZ3VyYXRpb25zLCB3aGljaCBhcmUgdHlwaWNhbGx5IGNhdWdodCBieSBLQVNBTiBvciBzdGFuZGFyZCBrZXJuZWwgY2hlY2tzLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgc3RydWN0dXJlcyBjb3BpZWQgdG8gdXNlciBzcGFjZSwgbm9yIGRvZXMgaXQgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSBvciBpbmZvLWxlYWtzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhZGRyZXNzIHJhbmdlIHZhbGlkYXRpb24gZm9yIHRoZSBSSVNDLVYgQUlBIChBZHZhbmNlZCBJbnRlcnJ1cHQgQXJjaGl0ZWN0dXJlKSBLVk0gZGV2aWNlIGFuZCBwcmV2ZW50cyBjaGFuZ2luZyB0aGUgVk0ncyBwZ2RfbGV2ZWxzIGFmdGVyIHRoZSBBSUEgZGV2aWNlIGhhcyBiZWVuIGluaXRpYWxpemVkLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHJlYWNoYWJsZSBLVk0gaW9jdGwgaGFuZGxlcnMgKEtWTV9TRVRfREVWSUNFX0FUVFIgYW5kIEtWTV9FTkFCTEVfQ0FQKSBhbmQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgdGhlIG5ldyB2YWxpZGF0aW9uIGxvZ2ljIGhhbmRsZXMgYWxsIGVkZ2UgY2FzZXMgY29ycmVjdGx5LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQwNjoxOTowOC4wNTg5MTM5OTVaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM4MTM2MDUxMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGIwNjQxYzc3YmFhM2RlZDAzOTRhMzg2NjA2YTZiZThhM2I5Zjc1ODZcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFdlZCBBdWcgMTIgMDY6MTk6MDcgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvYXJjaC9yaXNjdi9rdm0vYWlhX2RldmljZS5jIGIvYXJjaC9yaXNjdi9rdm0vYWlhX2RldmljZS5jXFxuaW5kZXggZWZjN2MwYmNmYmE5Mi4uZTk2OWRiZGM0Yjk3MSAxMDA2NDRcXG4tLS0gYS9hcmNoL3Jpc2N2L2t2bS9haWFfZGV2aWNlLmNcXG4rKysgYi9hcmNoL3Jpc2N2L2t2bS9haWFfZGV2aWNlLmNcXG5AQCAtMTAsNyArMTAsOSBAQFxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvYml0cy5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvaXJxY2hpcC9yaXNjdi1pbXNpYy5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgva3ZtX2hvc3QuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L292ZXJmbG93LmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC91YWNjZXNzLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2Nhc20va3ZtX2dzdGFnZS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjYXNtL2t2bV9pc2EuaFxcdTAwM2VcXG4gXFxuIHN0YXRpYyBpbnQgYWlhX2NyZWF0ZShzdHJ1Y3Qga3ZtX2RldmljZSAqZGV2LCB1MzIgdHlwZSlcXG5AQCAtMTQyLDE3ICsxNDQsMzcgQEAgc3RhdGljIGludCBhaWFfY29uZmlnKHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgbG9uZyB0eXBlLFxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4rc3RhdGljIGludCBhaWFfY2hlY2tfYWRkcl9yYW5nZShzdHJ1Y3Qga3ZtICprdm0sIHU2NCBhZGRyLCB1NjQgYWxpZ25tZW50LFxcbitcXHRcXHRcXHRcXHR1NjQgc2l6ZSlcXG4re1xcbitcXHR1NjQgZW5kO1xcbitcXG4rXFx0aWYgKCFJU19BTElHTkVEKGFkZHIsIGFsaWdubWVudCkpXFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXG4rXFx0aWYgKGNoZWNrX2FkZF9vdmVyZmxvdyhhZGRyLCBzaXplLCBcXHUwMDI2ZW5kKSlcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcbitcXHRpZiAoZW5kIFxcdTAwM2Uga3ZtX3Jpc2N2X2dzdGFnZV9ncGFfc2l6ZShrdm0tXFx1MDAzZWFyY2gucGdkX2xldmVscykpXFxuK1xcdFxcdHJldHVybiAtRTJCSUc7XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4gc3RhdGljIGludCBhaWFfYXBsaWNfYWRkcihzdHJ1Y3Qga3ZtICprdm0sIHU2NCAqYWRkciwgYm9vbCB3cml0ZSlcXG4ge1xcbiBcXHRzdHJ1Y3Qga3ZtX2FpYSAqYWlhID0gXFx1MDAyNmt2bS1cXHUwMDNlYXJjaC5haWE7XFxuK1xcdGludCByZXQ7XFxuIFxcbiBcXHRpZiAod3JpdGUpIHtcXG4gXFx0XFx0LyogV3JpdGVzIGNhbiBvbmx5IGJlIGRvbmUgYmVmb3JlIGlycWNoaXAgaXMgaW5pdGlhbGl6ZWQgKi9cXG4gXFx0XFx0aWYgKGt2bV9yaXNjdl9haWFfaW5pdGlhbGl6ZWQoa3ZtKSlcXG4gXFx0XFx0XFx0cmV0dXJuIC1FQlVTWTtcXG4gXFxuLVxcdFxcdGlmICgqYWRkciBcXHUwMDI2IChLVk1fREVWX1JJU0NWX0FQTElDX0FMSUdOIC0gMSkpXFxuLVxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXHRcXHRyZXQgPSBhaWFfY2hlY2tfYWRkcl9yYW5nZShrdm0sICphZGRyLCBLVk1fREVWX1JJU0NWX0FQTElDX0FMSUdOLFxcbitcXHRcXHRcXHRcXHRcXHQgICBLVk1fREVWX1JJU0NWX0FQTElDX1NJWkUpO1xcbitcXHRcXHRpZiAocmV0KVxcbitcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbiBcXG4gXFx0XFx0YWlhLVxcdTAwM2VhcGxpY19hZGRyID0gKmFkZHI7XFxuIFxcdH0gZWxzZVxcbkBAIC0xNjYsNiArMTg4LDcgQEAgc3RhdGljIGludCBhaWFfaW1zaWNfYWRkcihzdHJ1Y3Qga3ZtICprdm0sIHU2NCAqYWRkcixcXG4ge1xcbiBcXHRzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHU7XFxuIFxcdHN0cnVjdCBrdm1fdmNwdV9haWEgKnZjcHVfYWlhO1xcbitcXHRpbnQgcmV0O1xcbiBcXG4gXFx0dmNwdSA9IGt2bV9nZXRfdmNwdShrdm0sIHZjcHVfaWR4KTtcXG4gXFx0aWYgKCF2Y3B1KVxcbkBAIC0xNzcsOCArMjAwLDEwIEBAIHN0YXRpYyBpbnQgYWlhX2ltc2ljX2FkZHIoc3RydWN0IGt2bSAqa3ZtLCB1NjQgKmFkZHIsXFxuIFxcdFxcdGlmIChrdm1fcmlzY3ZfYWlhX2luaXRpYWxpemVkKGt2bSkpXFxuIFxcdFxcdFxcdHJldHVybiAtRUJVU1k7XFxuIFxcbi1cXHRcXHRpZiAoKmFkZHIgXFx1MDAyNiAoS1ZNX0RFVl9SSVNDVl9JTVNJQ19BTElHTiAtIDEpKVxcbi1cXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFx0XFx0cmV0ID0gYWlhX2NoZWNrX2FkZHJfcmFuZ2Uoa3ZtLCAqYWRkciwgS1ZNX0RFVl9SSVNDVl9JTVNJQ19BTElHTixcXG4rXFx0XFx0XFx0XFx0XFx0ICAgS1ZNX0RFVl9SSVNDVl9JTVNJQ19TSVpFKTtcXG4rXFx0XFx0aWYgKHJldClcXG4rXFx0XFx0XFx0cmV0dXJuIHJldDtcXG4gXFx0fVxcbiBcXG4gXFx0bXV0ZXhfbG9jayhcXHUwMDI2dmNwdS1cXHUwMDNlbXV0ZXgpO1xcbkBAIC0xOTEsNiArMjE2LDQwIEBAIHN0YXRpYyBpbnQgYWlhX2ltc2ljX2FkZHIoc3RydWN0IGt2bSAqa3ZtLCB1NjQgKmFkZHIsXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbitzdGF0aWMgaW50IGFpYV92YWxpZGF0ZV9hZGRyX3JhbmdlcyhzdHJ1Y3Qga3ZtICprdm0pXFxuK3tcXG4rXFx0c3RydWN0IGt2bV9haWEgKmFpYSA9IFxcdTAwMjZrdm0tXFx1MDAzZWFyY2guYWlhO1xcbitcXHRzdHJ1Y3Qga3ZtX3ZjcHVfYWlhICp2YWlhO1xcbitcXHRzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHU7XFxuK1xcdHVuc2lnbmVkIGxvbmcgaWR4O1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0aWYgKGFpYS1cXHUwMDNlbnJfc291cmNlcykge1xcbitcXHRcXHRpZiAoYWlhLVxcdTAwM2VhcGxpY19hZGRyID09IEtWTV9SSVNDVl9BSUFfVU5ERUZfQUREUilcXG4rXFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcbitcXHRcXHRyZXQgPSBhaWFfY2hlY2tfYWRkcl9yYW5nZShrdm0sIGFpYS1cXHUwMDNlYXBsaWNfYWRkcixcXG4rXFx0XFx0XFx0XFx0XFx0ICAgS1ZNX0RFVl9SSVNDVl9BUExJQ19BTElHTixcXG4rXFx0XFx0XFx0XFx0XFx0ICAgS1ZNX0RFVl9SSVNDVl9BUExJQ19TSVpFKTtcXG4rXFx0XFx0aWYgKHJldClcXG4rXFx0XFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0fVxcbitcXG4rXFx0a3ZtX2Zvcl9lYWNoX3ZjcHUoaWR4LCB2Y3B1LCBrdm0pIHtcXG4rXFx0XFx0dmFpYSA9IFxcdTAwMjZ2Y3B1LVxcdTAwM2VhcmNoLmFpYV9jb250ZXh0O1xcbitcXHRcXHRpZiAodmFpYS1cXHUwMDNlaW1zaWNfYWRkciA9PSBLVk1fUklTQ1ZfQUlBX1VOREVGX0FERFIpXFxuK1xcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXG4rXFx0XFx0cmV0ID0gYWlhX2NoZWNrX2FkZHJfcmFuZ2Uoa3ZtLCB2YWlhLVxcdTAwM2VpbXNpY19hZGRyLFxcbitcXHRcXHRcXHRcXHRcXHQgICBLVk1fREVWX1JJU0NWX0lNU0lDX0FMSUdOLFxcbitcXHRcXHRcXHRcXHRcXHQgICBLVk1fREVWX1JJU0NWX0lNU0lDX1NJWkUpO1xcbitcXHRcXHRpZiAocmV0KVxcbitcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4gc3RhdGljIGdwYV90IGFpYV9pbXNpY19wcG4oc3RydWN0IGt2bV9haWEgKmFpYSwgZ3BhX3QgYWRkcilcXG4ge1xcbiBcXHR1MzIgaCwgbDtcXG5AQCAtMjQ0LDkgKzMwMyw5IEBAIHN0YXRpYyBpbnQgYWlhX2luaXQoc3RydWN0IGt2bSAqa3ZtKVxcbiBcXHRpZiAoYWlhLVxcdTAwM2Vucl9pZHMgXFx1MDAzYyBhaWEtXFx1MDAzZW5yX3NvdXJjZXMpXFxuIFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiBcXG4tXFx0LyogQVBMSUMgYmFzZSBpcyByZXF1aXJlZCBmb3Igbm9uLXplcm8gbnVtYmVyIG9mIHNvdXJjZXMgKi9cXG4tXFx0aWYgKGFpYS1cXHUwMDNlbnJfc291cmNlcyBcXHUwMDI2XFx1MDAyNiBhaWEtXFx1MDAzZWFwbGljX2FkZHIgPT0gS1ZNX1JJU0NWX0FJQV9VTkRFRl9BRERSKVxcbi1cXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFx0cmV0ID0gYWlhX3ZhbGlkYXRlX2FkZHJfcmFuZ2VzKGt2bSk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuIFxcbiBcXHQvKiBHcm91cCBpbmRleCBiaXRzIG11c3Qgbm90IG92ZXJsYXAgZ3Vlc3QgYW5kIEhBUlQgaW5kZXggYml0cy4gKi9cXG4gXFx0aWYgKGFpYS1cXHUwMDNlbnJfZ3JvdXBfYml0cyBcXHUwMDI2XFx1MDAyNlxcbkBAIC0yNjMsMTIgKzMyMiw2IEBAIHN0YXRpYyBpbnQgYWlhX2luaXQoc3RydWN0IGt2bSAqa3ZtKVxcbiBcXHRrdm1fZm9yX2VhY2hfdmNwdShpZHgsIHZjcHUsIGt2bSkge1xcbiBcXHRcXHR2YWlhID0gXFx1MDAyNnZjcHUtXFx1MDAzZWFyY2guYWlhX2NvbnRleHQ7XFxuIFxcbi1cXHRcXHQvKiBJTVNJQyBiYXNlIGlzIHJlcXVpcmVkICovXFxuLVxcdFxcdGlmICh2YWlhLVxcdTAwM2VpbXNpY19hZGRyID09IEtWTV9SSVNDVl9BSUFfVU5ERUZfQUREUikge1xcbi1cXHRcXHRcXHRyZXQgPSAtRUlOVkFMO1xcbi1cXHRcXHRcXHRnb3RvIGZhaWxfY2xlYW51cF9pbXNpY3M7XFxuLVxcdFxcdH1cXG4tXFxuIFxcdFxcdC8qIEFsbCBJTVNJQ3Mgc2hvdWxkIGhhdmUgbWF0Y2hpbmcgYmFzZSBQUE4gKi9cXG4gXFx0XFx0aWYgKGJhc2VfcHBuID09IEtWTV9SSVNDVl9BSUFfVU5ERUZfQUREUilcXG4gXFx0XFx0XFx0YmFzZV9wcG4gPSBhaWFfaW1zaWNfcHBuKGFpYSwgdmFpYS1cXHUwMDNlaW1zaWNfYWRkcik7XFxuZGlmZiAtLWdpdCBhL2FyY2gvcmlzY3Yva3ZtL3ZtLmMgYi9hcmNoL3Jpc2N2L2t2bS92bS5jXFxuaW5kZXggYTlmMDgzZmVlYjc2Ny4uNjZlZGZhYTg2MjQzNSAxMDA2NDRcXG4tLS0gYS9hcmNoL3Jpc2N2L2t2bS92bS5jXFxuKysrIGIvYXJjaC9yaXNjdi9rdm0vdm0uY1xcbkBAIC0yNTAsNyArMjUwLDggQEAgaW50IGt2bV92bV9pb2N0bF9lbmFibGVfY2FwKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9lbmFibGVfY2FwICpjYXApXFxuIFxcdFxcdG11dGV4X2xvY2soXFx1MDAyNmt2bS1cXHUwMDNlbG9jayk7XFxuIFxcdFxcdG11dGV4X2xvY2soXFx1MDAyNmt2bS1cXHUwMDNlc2xvdHNfbG9jayk7XFxuIFxcbi1cXHRcXHRpZiAoa3ZtLVxcdTAwM2VjcmVhdGVkX3ZjcHVzIHx8ICFrdm1fYXJlX2FsbF9tZW1zbG90c19lbXB0eShrdm0pKVxcbitcXHRcXHRpZiAoa3ZtLVxcdTAwM2VjcmVhdGVkX3ZjcHVzIHx8ICFrdm1fYXJlX2FsbF9tZW1zbG90c19lbXB0eShrdm0pIHx8XFxuK1xcdFxcdCAgICBrdm1fcmlzY3ZfYWlhX2luaXRpYWxpemVkKGt2bSkpXFxuIFxcdFxcdFxcdHIgPSAtRUJVU1k7XFxuIFxcdFxcdGVsc2VcXG4gXFx0XFx0XFx0a3ZtLVxcdTAwM2VhcmNoLnBnZF9sZXZlbHMgPSBuZXdfbGV2ZWxzO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQwNjoxOTowOC40NDA5MjUwMjVaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo1ODE1ODE4MjI4NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJLVk1cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJrdm1fdm1faW9jdGxfZW5hYmxlX2NhcFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYWRkcmVzcyByYW5nZSB2YWxpZGF0aW9uIGZvciB0aGUgUklTQy1WIEFJQSAoQWR2YW5jZWQgSW50ZXJydXB0IEFyY2hpdGVjdHVyZSkgS1ZNIGRldmljZSBhbmQgcHJldmVudHMgY2hhbmdpbmcgdGhlIFZNJ3MgcGdkX2xldmVscyBhZnRlciB0aGUgQUlBIGRldmljZSBoYXMgYmVlbiBpbml0aWFsaXplZC4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byByZWFjaGFibGUgS1ZNIGlvY3RsIGhhbmRsZXJzIChLVk1fU0VUX0RFVklDRV9BVFRSIGFuZCBLVk1fRU5BQkxFX0NBUCkgYW5kIHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIHRoZSBuZXcgdmFsaWRhdGlvbiBsb2dpYyBoYW5kbGVzIGFsbCBlZGdlIGNhc2VzIGNvcnJlY3RseS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgYjA2NDFjNzdiYWEzZGVkMDM5NGEzODY2MDZhNmJlOGEzYjlmNzU4NlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgQXVnIDEyIDA2OjE5OjA3IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvYXJjaC9yaXNjdi9rdm0vYWlhX2RldmljZS5jIGIvYXJjaC9yaXNjdi9rdm0vYWlhX2RldmljZS5jXG5pbmRleCBlZmM3YzBiY2ZiYTkyLi5lOTY5ZGJkYzRiOTcxIDEwMDY0NFxuLS0tIGEvYXJjaC9yaXNjdi9rdm0vYWlhX2RldmljZS5jXG4rKysgYi9hcmNoL3Jpc2N2L2t2bS9haWFfZGV2aWNlLmNcbkBAIC0xMCw3ICsxMCw5IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvYml0cy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvaXJxY2hpcC9yaXNjdi1pbXNpYy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgva3ZtX2hvc3QuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L292ZXJmbG93LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC91YWNjZXNzLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2Nhc20va3ZtX2dzdGFnZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjYXNtL2t2bV9pc2EuaFx1MDAzZVxuIFxuIHN0YXRpYyBpbnQgYWlhX2NyZWF0ZShzdHJ1Y3Qga3ZtX2RldmljZSAqZGV2LCB1MzIgdHlwZSlcbkBAIC0xNDIsMTcgKzE0NCwzNyBAQCBzdGF0aWMgaW50IGFpYV9jb25maWcoc3RydWN0IGt2bSAqa3ZtLCB1bnNpZ25lZCBsb25nIHR5cGUsXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4rc3RhdGljIGludCBhaWFfY2hlY2tfYWRkcl9yYW5nZShzdHJ1Y3Qga3ZtICprdm0sIHU2NCBhZGRyLCB1NjQgYWxpZ25tZW50LFxuK1x0XHRcdFx0dTY0IHNpemUpXG4re1xuK1x0dTY0IGVuZDtcbitcbitcdGlmICghSVNfQUxJR05FRChhZGRyLCBhbGlnbm1lbnQpKVxuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcbitcdGlmIChjaGVja19hZGRfb3ZlcmZsb3coYWRkciwgc2l6ZSwgXHUwMDI2ZW5kKSlcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXG4rXHRpZiAoZW5kIFx1MDAzZSBrdm1fcmlzY3ZfZ3N0YWdlX2dwYV9zaXplKGt2bS1cdTAwM2VhcmNoLnBnZF9sZXZlbHMpKVxuK1x0XHRyZXR1cm4gLUUyQklHO1xuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuIHN0YXRpYyBpbnQgYWlhX2FwbGljX2FkZHIoc3RydWN0IGt2bSAqa3ZtLCB1NjQgKmFkZHIsIGJvb2wgd3JpdGUpXG4ge1xuIFx0c3RydWN0IGt2bV9haWEgKmFpYSA9IFx1MDAyNmt2bS1cdTAwM2VhcmNoLmFpYTtcbitcdGludCByZXQ7XG4gXG4gXHRpZiAod3JpdGUpIHtcbiBcdFx0LyogV3JpdGVzIGNhbiBvbmx5IGJlIGRvbmUgYmVmb3JlIGlycWNoaXAgaXMgaW5pdGlhbGl6ZWQgKi9cbiBcdFx0aWYgKGt2bV9yaXNjdl9haWFfaW5pdGlhbGl6ZWQoa3ZtKSlcbiBcdFx0XHRyZXR1cm4gLUVCVVNZO1xuIFxuLVx0XHRpZiAoKmFkZHIgXHUwMDI2IChLVk1fREVWX1JJU0NWX0FQTElDX0FMSUdOIC0gMSkpXG4tXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHRcdHJldCA9IGFpYV9jaGVja19hZGRyX3JhbmdlKGt2bSwgKmFkZHIsIEtWTV9ERVZfUklTQ1ZfQVBMSUNfQUxJR04sXG4rXHRcdFx0XHRcdCAgIEtWTV9ERVZfUklTQ1ZfQVBMSUNfU0laRSk7XG4rXHRcdGlmIChyZXQpXG4rXHRcdFx0cmV0dXJuIHJldDtcbiBcbiBcdFx0YWlhLVx1MDAzZWFwbGljX2FkZHIgPSAqYWRkcjtcbiBcdH0gZWxzZVxuQEAgLTE2Niw2ICsxODgsNyBAQCBzdGF0aWMgaW50IGFpYV9pbXNpY19hZGRyKHN0cnVjdCBrdm0gKmt2bSwgdTY0ICphZGRyLFxuIHtcbiBcdHN0cnVjdCBrdm1fdmNwdSAqdmNwdTtcbiBcdHN0cnVjdCBrdm1fdmNwdV9haWEgKnZjcHVfYWlhO1xuK1x0aW50IHJldDtcbiBcbiBcdHZjcHUgPSBrdm1fZ2V0X3ZjcHUoa3ZtLCB2Y3B1X2lkeCk7XG4gXHRpZiAoIXZjcHUpXG5AQCAtMTc3LDggKzIwMCwxMCBAQCBzdGF0aWMgaW50IGFpYV9pbXNpY19hZGRyKHN0cnVjdCBrdm0gKmt2bSwgdTY0ICphZGRyLFxuIFx0XHRpZiAoa3ZtX3Jpc2N2X2FpYV9pbml0aWFsaXplZChrdm0pKVxuIFx0XHRcdHJldHVybiAtRUJVU1k7XG4gXG4tXHRcdGlmICgqYWRkciBcdTAwMjYgKEtWTV9ERVZfUklTQ1ZfSU1TSUNfQUxJR04gLSAxKSlcbi1cdFx0XHRyZXR1cm4gLUVJTlZBTDtcbitcdFx0cmV0ID0gYWlhX2NoZWNrX2FkZHJfcmFuZ2Uoa3ZtLCAqYWRkciwgS1ZNX0RFVl9SSVNDVl9JTVNJQ19BTElHTixcbitcdFx0XHRcdFx0ICAgS1ZNX0RFVl9SSVNDVl9JTVNJQ19TSVpFKTtcbitcdFx0aWYgKHJldClcbitcdFx0XHRyZXR1cm4gcmV0O1xuIFx0fVxuIFxuIFx0bXV0ZXhfbG9jayhcdTAwMjZ2Y3B1LVx1MDAzZW11dGV4KTtcbkBAIC0xOTEsNiArMjE2LDQwIEBAIHN0YXRpYyBpbnQgYWlhX2ltc2ljX2FkZHIoc3RydWN0IGt2bSAqa3ZtLCB1NjQgKmFkZHIsXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4rc3RhdGljIGludCBhaWFfdmFsaWRhdGVfYWRkcl9yYW5nZXMoc3RydWN0IGt2bSAqa3ZtKVxuK3tcbitcdHN0cnVjdCBrdm1fYWlhICphaWEgPSBcdTAwMjZrdm0tXHUwMDNlYXJjaC5haWE7XG4rXHRzdHJ1Y3Qga3ZtX3ZjcHVfYWlhICp2YWlhO1xuK1x0c3RydWN0IGt2bV92Y3B1ICp2Y3B1O1xuK1x0dW5zaWduZWQgbG9uZyBpZHg7XG4rXHRpbnQgcmV0O1xuK1xuK1x0aWYgKGFpYS1cdTAwM2Vucl9zb3VyY2VzKSB7XG4rXHRcdGlmIChhaWEtXHUwMDNlYXBsaWNfYWRkciA9PSBLVk1fUklTQ1ZfQUlBX1VOREVGX0FERFIpXG4rXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXG4rXHRcdHJldCA9IGFpYV9jaGVja19hZGRyX3JhbmdlKGt2bSwgYWlhLVx1MDAzZWFwbGljX2FkZHIsXG4rXHRcdFx0XHRcdCAgIEtWTV9ERVZfUklTQ1ZfQVBMSUNfQUxJR04sXG4rXHRcdFx0XHRcdCAgIEtWTV9ERVZfUklTQ1ZfQVBMSUNfU0laRSk7XG4rXHRcdGlmIChyZXQpXG4rXHRcdFx0cmV0dXJuIHJldDtcbitcdH1cbitcbitcdGt2bV9mb3JfZWFjaF92Y3B1KGlkeCwgdmNwdSwga3ZtKSB7XG4rXHRcdHZhaWEgPSBcdTAwMjZ2Y3B1LVx1MDAzZWFyY2guYWlhX2NvbnRleHQ7XG4rXHRcdGlmICh2YWlhLVx1MDAzZWltc2ljX2FkZHIgPT0gS1ZNX1JJU0NWX0FJQV9VTkRFRl9BRERSKVxuK1x0XHRcdHJldHVybiAtRUlOVkFMO1xuK1xuK1x0XHRyZXQgPSBhaWFfY2hlY2tfYWRkcl9yYW5nZShrdm0sIHZhaWEtXHUwMDNlaW1zaWNfYWRkcixcbitcdFx0XHRcdFx0ICAgS1ZNX0RFVl9SSVNDVl9JTVNJQ19BTElHTixcbitcdFx0XHRcdFx0ICAgS1ZNX0RFVl9SSVNDVl9JTVNJQ19TSVpFKTtcbitcdFx0aWYgKHJldClcbitcdFx0XHRyZXR1cm4gcmV0O1xuK1x0fVxuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuIHN0YXRpYyBncGFfdCBhaWFfaW1zaWNfcHBuKHN0cnVjdCBrdm1fYWlhICphaWEsIGdwYV90IGFkZHIpXG4ge1xuIFx0dTMyIGgsIGw7XG5AQCAtMjQ0LDkgKzMwMyw5IEBAIHN0YXRpYyBpbnQgYWlhX2luaXQoc3RydWN0IGt2bSAqa3ZtKVxuIFx0aWYgKGFpYS1cdTAwM2Vucl9pZHMgXHUwMDNjIGFpYS1cdTAwM2Vucl9zb3VyY2VzKVxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcbi1cdC8qIEFQTElDIGJhc2UgaXMgcmVxdWlyZWQgZm9yIG5vbi16ZXJvIG51bWJlciBvZiBzb3VyY2VzICovXG4tXHRpZiAoYWlhLVx1MDAzZW5yX3NvdXJjZXMgXHUwMDI2XHUwMDI2IGFpYS1cdTAwM2VhcGxpY19hZGRyID09IEtWTV9SSVNDVl9BSUFfVU5ERUZfQUREUilcbi1cdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHRyZXQgPSBhaWFfdmFsaWRhdGVfYWRkcl9yYW5nZXMoa3ZtKTtcbitcdGlmIChyZXQpXG4rXHRcdHJldHVybiByZXQ7XG4gXG4gXHQvKiBHcm91cCBpbmRleCBiaXRzIG11c3Qgbm90IG92ZXJsYXAgZ3Vlc3QgYW5kIEhBUlQgaW5kZXggYml0cy4gKi9cbiBcdGlmIChhaWEtXHUwMDNlbnJfZ3JvdXBfYml0cyBcdTAwMjZcdTAwMjZcbkBAIC0yNjMsMTIgKzMyMiw2IEBAIHN0YXRpYyBpbnQgYWlhX2luaXQoc3RydWN0IGt2bSAqa3ZtKVxuIFx0a3ZtX2Zvcl9lYWNoX3ZjcHUoaWR4LCB2Y3B1LCBrdm0pIHtcbiBcdFx0dmFpYSA9IFx1MDAyNnZjcHUtXHUwMDNlYXJjaC5haWFfY29udGV4dDtcbiBcbi1cdFx0LyogSU1TSUMgYmFzZSBpcyByZXF1aXJlZCAqL1xuLVx0XHRpZiAodmFpYS1cdTAwM2VpbXNpY19hZGRyID09IEtWTV9SSVNDVl9BSUFfVU5ERUZfQUREUikge1xuLVx0XHRcdHJldCA9IC1FSU5WQUw7XG4tXHRcdFx0Z290byBmYWlsX2NsZWFudXBfaW1zaWNzO1xuLVx0XHR9XG4tXG4gXHRcdC8qIEFsbCBJTVNJQ3Mgc2hvdWxkIGhhdmUgbWF0Y2hpbmcgYmFzZSBQUE4gKi9cbiBcdFx0aWYgKGJhc2VfcHBuID09IEtWTV9SSVNDVl9BSUFfVU5ERUZfQUREUilcbiBcdFx0XHRiYXNlX3BwbiA9IGFpYV9pbXNpY19wcG4oYWlhLCB2YWlhLVx1MDAzZWltc2ljX2FkZHIpO1xuZGlmZiAtLWdpdCBhL2FyY2gvcmlzY3Yva3ZtL3ZtLmMgYi9hcmNoL3Jpc2N2L2t2bS92bS5jXG5pbmRleCBhOWYwODNmZWViNzY3Li42NmVkZmFhODYyNDM1IDEwMDY0NFxuLS0tIGEvYXJjaC9yaXNjdi9rdm0vdm0uY1xuKysrIGIvYXJjaC9yaXNjdi9rdm0vdm0uY1xuQEAgLTI1MCw3ICsyNTAsOCBAQCBpbnQga3ZtX3ZtX2lvY3RsX2VuYWJsZV9jYXAoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX2VuYWJsZV9jYXAgKmNhcClcbiBcdFx0bXV0ZXhfbG9jayhcdTAwMjZrdm0tXHUwMDNlbG9jayk7XG4gXHRcdG11dGV4X2xvY2soXHUwMDI2a3ZtLVx1MDAzZXNsb3RzX2xvY2spO1xuIFxuLVx0XHRpZiAoa3ZtLVx1MDAzZWNyZWF0ZWRfdmNwdXMgfHwgIWt2bV9hcmVfYWxsX21lbXNsb3RzX2VtcHR5KGt2bSkpXG4rXHRcdGlmIChrdm0tXHUwMDNlY3JlYXRlZF92Y3B1cyB8fCAha3ZtX2FyZV9hbGxfbWVtc2xvdHNfZW1wdHkoa3ZtKSB8fFxuK1x0XHQgICAga3ZtX3Jpc2N2X2FpYV9pbml0aWFsaXplZChrdm0pKVxuIFx0XHRcdHIgPSAtRUJVU1k7XG4gXHRcdGVsc2VcbiBcdFx0XHRrdm0tXHUwMDNlYXJjaC5wZ2RfbGV2ZWxzID0gbmV3X2xldmVscztcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDA2OjE5OjA4LjQ0MDkyNjIyNVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYwNTAyOTk4OTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgUG90ZW50aWFsIFJJU0MtViBLVk0gVnVsbmVyYWJpbGl0eSoqXG5cbk9rYXksIHNvIEkndmUgZ290IHRoaXMgcGF0Y2gg4oCTIHNlZW1zIGxpa2UgaXTigJlzIHR3ZWFraW5nIGBhaWFfZGV2aWNlLmNgIGFuZCBgdm0uY2Agd2l0aGluIHRoZSBSSVNDLVYgS1ZNIGNvZGUuIExvb2tzIGxpa2UgYWRkcmVzcyByYW5nZSB2YWxpZGF0aW9uIGlzIHRoZSBmb2N1cywgYWRkaW5nIHRoZXNlIG5ldyBmdW5jdGlvbnMsIGBhaWFfY2hlY2tfYWRkcl9yYW5nZWAgYW5kIGBhaWFfdmFsaWRhdGVfYWRkcl9yYW5nZXNgLiBJdCBhbHNvIGxvb2tzIGxpa2UgaXQncyBtYWtpbmcgY2hhbmdlcyB0byBga3ZtX3ZtX2lvY3RsX2VuYWJsZV9jYXBgIHRvIGVuc3VyZSBga3ZtX3Jpc2N2X2FpYV9pbml0aWFsaXplZChrdm0pYCBpcyBjaGVja2VkIGJlZm9yZSBhbGxvd2luZyBhbnkgYHBnZF9sZXZlbHNgIG1vZGlmaWNhdGlvbnMuXG5cbk15IGluaXRpYWwgdGhvdWdodCBpcywgXCJJcyB0aGlzIGFjdHVhbGx5IHNvbWV0aGluZyB0aGF0J3MgZXZlbiAqcmVhY2hhYmxlKiBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50P1wiIFdlbGwsIEtWTSBvbiBSSVNDLVYgaXMgYSBmdW5kYW1lbnRhbCBmZWF0dXJlLCBzbyBpdCBzZWVtcyBsaWtlIGEgcmVhc29uYWJsZSBhc3N1bXB0aW9uLiBIbW0sIGJ1dCB0aGVuIEkgcmVtZW1iZXIsIHN5emthbGxlciBkb2VzIGEgbG90IG9mIGZ1enppbmcgYWNyb3NzIGRpZmZlcmVudCBhcmNoaXRlY3R1cmVzLiBJdCBwcmltYXJpbHkgd29ya3Mgd2l0aCB4ODZfNjQgYW5kIGFybTY0LCBidXQgb2NjYXNpb25hbGx5IGl0IGRvZXMgUklTQy1WLiBJZiB0aGlzIGlzIFJJU0MtViBLVk0tc3BlY2lmaWMsIGl0J3Mgb25seSBleHBsb2l0YWJsZSBvbiBSSVNDLVYgaG9zdHMuXG5cblRoZSByZWFsIHF1ZXN0aW9uIGlzLCBkb2VzIHN5emthbGxlciBhY3R1YWxseSAqcnVuKiBvbiBSSVNDLVY/IEFoLCB5ZXMsIGl0IGRvZXMhIFN5emthbGxlciBzdXBwb3J0cyByaXNjdjY0LCBzbyBpdCdzIGRlZmluaXRlbHkgd29ydGh3aGlsZSB0byBpbnZlc3RpZ2F0ZSB0aGlzIGZ1cnRoZXIuXG5cbk5vdywgbGV0J3MgbmFpbCBkb3duIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgbmVlZGVkIHRvIHRyaWdnZXIgdGhpcyBjb2RlIHBhdGguIE9idmlvdXNseSwgYENPTkZJR19LVk1gIGlzIGEgZ2l2ZW4uIFRpbWUgdG8gZGlnIGludG8gYGFyY2gvcmlzY3Yva3ZtL0tjb25maWdgIGFuZCBzZWUgd2hhdCBlbHNlIHdlIG5lZWQgdG8gZW5hYmxlIHRvIGdldCB0aGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzgyNiwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI2NCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDA2OjE5OjE0LjQ5MTIyODYxNFoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTUxMjcwMzcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEtWTVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3Jpc2N2L2t2bS9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvcmlzY3Yva3ZtL0tjb25maWc9MTg9aWYgVklSVFVBTElaQVRJT05cXG5hcmNoL3Jpc2N2L2t2bS9LY29uZmlnLTE5LVxcbmFyY2gvcmlzY3Yva3ZtL0tjb25maWc6MjA6Y29uZmlnIEtWTVxcbmFyY2gvcmlzY3Yva3ZtL0tjb25maWctMjEtXFx0dHJpc3RhdGUgXFxcIktlcm5lbC1iYXNlZCBWaXJ0dWFsIE1hY2hpbmUgKEtWTSkgc3VwcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMDY6MTk6MTQuNzA2MzYwNTYxWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzE4Nzk5NTQ2MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIEtWTSdzIERlcGVuZGVuY2llcyoqXG5cbkFscmlnaHQsIGxldCdzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgYXJjaGl0ZWN0dXJhbCB1bmRlcnBpbm5pbmcgb2YgYEtWTWAuIFRoaW5raW5nIGFib3V0IGl0LCBiZWZvcmUgSSBldmVuIHN0YXJ0IHRvIGRpdmUgaW50byBhIHNwZWNpZmljIGlzc3VlIG9yIGNvbmZpZ3VyYXRpb24sIHRoZSBmaXJzdCB0aGluZyBJIGRvIGlzIG1lbnRhbGx5IG1hcCBvdXQgaXRzIGRlcGVuZGVuY2llcy4gSXQncyBjcnVjaWFsIGZvciB1bmRlcnN0YW5kaW5nIGhvdyBpdCBmdW5jdGlvbnMgYW5kIGhvdyBjaGFuZ2VzIHdpbGwgcmlwcGxlIHRocm91Z2ggdGhlIHN5c3RlbS4gSSdtIG5vdCBnb2luZyB0byBqdXN0IGJsaW5kbHkgc3RhcnQgdHJvdWJsZXNob290aW5nIG9yIG9wdGltaXppbmcgd2l0aG91dCBhIHNvbGlkIGdyYXNwIG9mIHdoYXQgS1ZNIGlzIGJ1aWx0IHVwb24uIFdoYXQgYXJlIHRoZSBrZXkgY29tcG9uZW50cywgdGhlIGtlcm5lbCBtb2R1bGVzLCB0aGUgdXNlcnNwYWNlIHRvb2xzPyBXaGVyZSBhcmUgdGhlIHBvdGVudGlhbCBib3R0bGVuZWNrcyBvciBmYWlsdXJlIHBvaW50cz8gVW5kZXJzdGFuZGluZyB0aGUgaW50cmljYXRlIHdlYiBvZiBkZXBlbmRlbmNpZXMgd2lsbCBndWlkZSBtZSB0byB0aGUgbW9zdCByZWxldmFudCBhcmVhcyBvZiB0aGUgY29kZSBiYXNlIG9yIHRoZSBkb2N1bWVudGF0aW9uLiBUaGlzIGlzIHdoZXJlIEkgc3RhcnQuIExldCdzIHNlZSB3aGF0IHdlIGZpbmQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ1NzcsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQwNjoxOToxNy44OTQzNTg0NzJaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2ODQzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJhcmNoL3Jpc2N2L2t2bS9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxcbiAgIDI6XFx0I1xcbiAgIDM6XFx0IyBLVk0gY29uZmlndXJhdGlvblxcbiAgIDQ6XFx0I1xcbiAgIDU6XFx0XFxuICAgNjpcXHRzb3VyY2UgXFxcInZpcnQva3ZtL0tjb25maWdcXFwiXFxuICAgNzpcXHRcXG4gICA4OlxcdG1lbnVjb25maWcgVklSVFVBTElaQVRJT05cXG4gICA5OlxcdFxcdGJvb2wgXFxcIlZpcnR1YWxpemF0aW9uXFxcIlxcbiAgMTA6XFx0XFx0aGVscFxcbiAgMTE6XFx0XFx0ICBTYXkgWSBoZXJlIHRvIGdldCB0byBzZWUgb3B0aW9ucyBmb3IgdXNpbmcgeW91ciBMaW51eCBob3N0IHRvIHJ1blxcbiAgMTI6XFx0XFx0ICBvdGhlciBvcGVyYXRpbmcgc3lzdGVtcyBpbnNpZGUgdmlydHVhbCBtYWNoaW5lcyAoZ3Vlc3RzKS5cXG4gIDEzOlxcdFxcdCAgVGhpcyBvcHRpb24gYWxvbmUgZG9lcyBub3QgYWRkIGFueSBrZXJuZWwgY29kZS5cXG4gIDE0OlxcdFxcbiAgMTU6XFx0XFx0ICBJZiB5b3Ugc2F5IE4sIGFsbCBvcHRpb25zIGluIHRoaXMgc3VibWVudSB3aWxsIGJlIHNraXBwZWQgYW5kXFxuICAxNjpcXHRcXHQgIGRpc2FibGVkLlxcbiAgMTc6XFx0XFxuICAxODpcXHRpZiBWSVJUVUFMSVpBVElPTlxcbiAgMTk6XFx0XFxuICAyMDpcXHRjb25maWcgS1ZNXFxuICAyMTpcXHRcXHR0cmlzdGF0ZSBcXFwiS2VybmVsLWJhc2VkIFZpcnR1YWwgTWFjaGluZSAoS1ZNKSBzdXBwb3J0XFxcIlxcbiAgMjI6XFx0XFx0ZGVwZW5kcyBvbiBSSVNDVl9TQkkgXFx1MDAyNlxcdTAwMjYgTU1VXFxuICAyMzpcXHRcXHRzZWxlY3QgSEFWRV9LVk1fSVJRQ0hJUFxcbiAgMjQ6XFx0XFx0c2VsZWN0IEhBVkVfS1ZNX0lSUV9ST1VUSU5HXFxuICAyNTpcXHRcXHRzZWxlY3QgSEFWRV9LVk1fTVNJXFxuICAyNjpcXHRcXHRzZWxlY3QgSEFWRV9LVk1fUkVBRE9OTFlfTUVNXFxuICAyNzpcXHRcXHRzZWxlY3QgSEFWRV9LVk1fRElSVFlfUklOR19BQ1FfUkVMXFxuICAyODpcXHRcXHRzZWxlY3QgS1ZNX0NPTU1PTlxcbiAgMjk6XFx0XFx0c2VsZWN0IEtWTV9HRU5FUklDX0RJUlRZTE9HX1JFQURfUFJPVEVDVFxcbiAgMzA6XFx0XFx0c2VsZWN0IEtWTV9HRU5FUklDX0hBUkRXQVJFX0VOQUJMSU5HXFxuICAzMTpcXHRcXHRzZWxlY3QgS1ZNX01NSU9cXG4gIDMyOlxcdFxcdHNlbGVjdCBWSVJUX1hGRVJfVE9fR1VFU1RfV09SS1xcbiAgMzM6XFx0XFx0c2VsZWN0IFNDSEVEX0lORk9cXG4gIDM0OlxcdFxcdHNlbGVjdCBHVUVTVF9QRVJGX0VWRU5UUyBpZiBQRVJGX0VWRU5UU1xcbiAgMzU6XFx0XFx0aGVscFxcbiAgMzY6XFx0XFx0ICBTdXBwb3J0IGhvc3RpbmcgdmlydHVhbGl6ZWQgZ3Vlc3QgbWFjaGluZXMuXFxuICAzNzpcXHRcXG4gIDM4OlxcdFxcdCAgSWYgdW5zdXJlLCBzYXkgTi5cXG4gIDM5OlxcdFxcbiAgNDA6XFx0ZW5kaWYgIyBWSVJUVUFMSVpBVElPTlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQwNjoxOToxNy44OTQ0MjkwMjJaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozOTY4MTQwMTg1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipLVk0gQ29uZmlndXJhdGlvbiBEZWVwIERpdmUqKlxuXG5BbHJpZ2h0LCBzbyB0aGUgaW5pdGlhbCBmb2N1cyBpcyAqY2xlYXJseSogS1ZNIOKAkyBpdCdzIHRoZSBhbmNob3IgcG9pbnQsIHRoZSBjZW50cmFsIGNvbmZpZ3VyYXRpb24gd2UncmUgd29ya2luZyB3aXRoIGhlcmUuIFRoYXQncyB0aGUgZm91bmRhdGlvbi4gTm93LCBnaXZlbiB0aGF0LCBteSBuZXh0IGxpbmUgb2YgaW5xdWlyeSBoYXMgdG8gYmUgdGFyZ2V0ZWQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGlmIHRoZXJlIGFyZSBhbnkgKnNwZWNpZmljKiBjb25maWd1cmF0aW9ucyBvciBob29rcyByZWxldmFudCB0byB0aGUgQUlBIChBZHZhbmNlZCBJbnRlcnJ1cHQgQXJjaGl0ZWN0dXJlKSBzdWJzeXN0ZW0gd2l0aGluIHRoZSBLVk0gZnJhbWV3b3JrLiBJIHNob3VsZCBpbW1lZGlhdGVseSB6ZXJvIGluIG9uIGBhaWFfZGV2aWNlLmNgLiBJZiBBSUEgaGFzIGFueSBjdXN0b20gZGV2aWNlLXNwZWNpZmljIGNvbmZpZ3VyYXRpb24gaXQgd291bGQgbW9zdCBsaWtlbHkgYmUgaW4gdGhhdCBmaWxlLiBJJ20gbG9va2luZyBmb3IgYW55dGhpbmcgYmV5b25kIHRoZSBiYXNlIEtWTSBzZXR1cCDigJMgc3BlY2lmaWMgcmVnaXN0ZXIgYXNzaWdubWVudHMsIGludGVycnVwdCBoYW5kbGluZywgYW55dGhpbmcgdGhhdCBkaXZlcmdlcyBmcm9tIHRoZSBzdGFuZGFyZCBLVk0gZGV2aWNlIGltcGxlbWVudGF0aW9uIGFuZCBpcyBBSUEtcmVsYXRlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6NTMyNCwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMDY6MTk6MjEuODYyNTcyNDM3WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU1NDgwMDg0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImFpYV9kZXZpY2Uub1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3Jpc2N2L2t2bS9NYWtlZmlsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3Jpc2N2L2t2bS9NYWtlZmlsZT0xND1rdm0teSArPSBhaWFfYXBsaWMub1xcbmFyY2gvcmlzY3Yva3ZtL01ha2VmaWxlOjE1Omt2bS15ICs9IGFpYV9kZXZpY2Uub1xcbmFyY2gvcmlzY3Yva3ZtL01ha2VmaWxlLTE2LWt2bS15ICs9IGFpYV9pbXNpYy5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDA2OjE5OjIxLjkxODA1NjcxMVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQxMzUxMjQwNjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIEtWTSBBSUEgQ29tcGlsYXRpb24qKlxuXG5Pa2F5LCBzbyB0aGlzIGNvZGUgaXMgZGVmaW5pdGVseSBiZWluZyBjb21waWxlZCB1bmNvbmRpdGlvbmFsbHkgd2hlbiBLVk0gKEtlcm5lbC1iYXNlZCBWaXJ0dWFsIE1hY2hpbmUpIGlzIGVuYWJsZWQuIFRoYXQncyB0aGUgc3RhcnRpbmcgcG9pbnQuIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIGRpZyBpbnRvICp3aGF0KiBpcyBiZWluZyBtb2RpZmllZCBvciBpbmNsdWRlZCBnaXZlbiB0aGUgS1ZNIGRlcGVuZGVuY3kuIExldCdzIHNlZS4uLiB0aGUgZnVuY3Rpb25zIHRoYXQgc2VlbSB0byBiZSBpbXBhY3RlZCBpbmNsdWRlOiBgYWlhX2NoZWNrX2FkZHJfcmFuZ2VgLCBgYWlhX2FwbGljX2FkZHJgLCBgYWlhX2ltc2ljX2FkZHJgLCBgYWlhX3ZhbGlkYXRlX2FkZHJfcmFuZ2VzYCwgYW5kIGBhaWFfaW5pdGAuIEhtbSwgdGhvc2UgYXJlIGFsbCAqc3RhdGljKiBmdW5jdGlvbnMsIHdoaWNoIGlzIHR5cGljYWwgZm9yIGludGVybmFsIGhlbHBlcnMuIEFuZCB0aGVuIHRoZXJlJ3MgYGt2bV92bV9pb2N0bF9lbmFibGVfY2FwYCwgd2hpY2ggaXMgKm5vbi1zdGF0aWMqLCBhbmQgcmVzaWRpbmcgaW4gYGFyY2gvcmlzY3Yva3ZtL3ZtLmNgLiBUaGF0IGZ1bmN0aW9uJ3MgZGVmaW5pdGVseSBpbnRlcmVzdGluZyBiZWNhdXNlIGl0J3MgKm5vdCogc3RhdGljLCBzbyBpdCdzIGxpa2VseSBhIHB1YmxpYyBlbnRyeSBwb2ludC5cblxuQnV0IHRoZSBwbG90IHRoaWNrZW5zLi4uIGlzIGBhaWFfaW5pdGAgcGFydCBvZiB0aGUgS1ZNIGluaXRpYWxpemF0aW9uIHNlcXVlbmNlPyBMZXQgbWUgc2VlLiBJIHJlY2FsbCBhIGZ1bmN0aW9uIGluIHRoZSBjb2RlIHRoYXQgaGFuZGxlcyBpbml0aWFsaXphdGlvbiwgbGlrZSBga3ZtX3Jpc2N2X2FpYV9pbml0YC4gTmVlZCB0byBjaGVjayBgYWlhX2RldmljZS5jYCB0byBzZWUgaWYgdGhlcmUncyBhIGxpbmsgdGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU2NTUsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNDcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMDY6MTk6MjYuMDUzMTgyOTJaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU2NzMzNzM0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImFpYV9pbml0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gvcmlzY3Yva3ZtL2FpYV9kZXZpY2UuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3Jpc2N2L2t2bS9haWFfZGV2aWNlLmM9NTM9c3RhdGljIGludCBhaWFfY29uZmlnKHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgbG9uZyB0eXBlLFxcbi0tXFxuYXJjaC9yaXNjdi9rdm0vYWlhX2RldmljZS5jLTU4LVxcdC8qIFdyaXRlcyBjYW4gb25seSBiZSBkb25lIGJlZm9yZSBpcnFjaGlwIGlzIGluaXRpYWxpemVkICovXFxuYXJjaC9yaXNjdi9rdm0vYWlhX2RldmljZS5jOjU5OlxcdGlmICh3cml0ZSBcXHUwMDI2XFx1MDAyNiBrdm1fcmlzY3ZfYWlhX2luaXRpYWxpemVkKGt2bSkpXFxuYXJjaC9yaXNjdi9rdm0vYWlhX2RldmljZS5jLTYwLVxcdFxcdHJldHVybiAtRUJVU1k7XFxuLS1cXG5hcmNoL3Jpc2N2L2t2bS9haWFfZGV2aWNlLmM9MTY0PXN0YXRpYyBpbnQgYWlhX2FwbGljX2FkZHIoc3RydWN0IGt2bSAqa3ZtLCB1NjQgKmFkZHIsIGJvb2wgd3JpdGUpXFxuLS1cXG5hcmNoL3Jpc2N2L2t2bS9haWFfZGV2aWNlLmMtMTcwLVxcdFxcdC8qIFdyaXRlcyBjYW4gb25seSBiZSBkb25lIGJlZm9yZSBpcnFjaGlwIGlzIGluaXRpYWxpemVkICovXFxuYXJjaC9yaXNjdi9rdm0vYWlhX2RldmljZS5jOjE3MTpcXHRcXHRpZiAoa3ZtX3Jpc2N2X2FpYV9pbml0aWFsaXplZChrdm0pKVxcbmFyY2gvcmlzY3Yva3ZtL2FpYV9kZXZpY2UuYy0xNzItXFx0XFx0XFx0cmV0dXJuIC1FQlVTWTtcXG4tLVxcbmFyY2gvcmlzY3Yva3ZtL2FpYV9kZXZpY2UuYz0xODY9c3RhdGljIGludCBhaWFfaW1zaWNfYWRkcihzdHJ1Y3Qga3ZtICprdm0sIHU2NCAqYWRkcixcXG4tLVxcbmFyY2gvcmlzY3Yva3ZtL2FpYV9kZXZpY2UuYy0xOTktXFx0XFx0LyogV3JpdGVzIGNhbiBvbmx5IGJlIGRvbmUgYmVmb3JlIGlycWNoaXAgaXMgaW5pdGlhbGl6ZWQgKi9cXG5hcmNoL3Jpc2N2L2t2bS9haWFfZGV2aWNlLmM6MjAwOlxcdFxcdGlmIChrdm1fcmlzY3ZfYWlhX2luaXRpYWxpemVkKGt2bSkpXFxuYXJjaC9yaXNjdi9rdm0vYWlhX2RldmljZS5jLTIwMS1cXHRcXHRcXHRyZXR1cm4gLUVCVVNZO1xcbi0tXFxuYXJjaC9yaXNjdi9rdm0vYWlhX2RldmljZS5jPTI3MT1zdGF0aWMgdTMyIGFpYV9pbXNpY19oYXJ0X2luZGV4KHN0cnVjdCBrdm1fYWlhICphaWEsIGdwYV90IGFkZHIpXFxuLS1cXG5hcmNoL3Jpc2N2L2t2bS9haWFfZGV2aWNlLmMtMjg0LVxcbmFyY2gvcmlzY3Yva3ZtL2FpYV9kZXZpY2UuYzoyODU6c3RhdGljIGludCBhaWFfaW5pdChzdHJ1Y3Qga3ZtICprdm0pXFxuYXJjaC9yaXNjdi9rdm0vYWlhX2RldmljZS5jLTI4Ni17XFxuLS1cXG5hcmNoL3Jpc2N2L2t2bS9haWFfZGV2aWNlLmMtMjk0LVxcdC8qIElycWNoaXAgY2FuIGJlIGluaXRpYWxpemVkIG9ubHkgb25jZSAqL1xcbmFyY2gvcmlzY3Yva3ZtL2FpYV9kZXZpY2UuYzoyOTU6XFx0aWYgKGt2bV9yaXNjdl9haWFfaW5pdGlhbGl6ZWQoa3ZtKSlcXG5hcmNoL3Jpc2N2L2t2bS9haWFfZGV2aWNlLmMtMjk2LVxcdFxcdHJldHVybiAtRUJVU1k7XFxuLS1cXG5hcmNoL3Jpc2N2L2t2bS9haWFfZGV2aWNlLmM9MzU5PXN0YXRpYyBpbnQgYWlhX3NldF9hdHRyKHN0cnVjdCBrdm1fZGV2aWNlICpkZXYsIHN0cnVjdCBrdm1fZGV2aWNlX2F0dHIgKmF0dHIpXFxuLS1cXG5hcmNoL3Jpc2N2L2t2bS9haWFfZGV2aWNlLmMtMzk2LVxcdFxcdFxcdG11dGV4X2xvY2soXFx1MDAyNmRldi1cXHUwMDNla3ZtLVxcdTAwM2Vsb2NrKTtcXG5hcmNoL3Jpc2N2L2t2bS9haWFfZGV2aWNlLmM6Mzk3OlxcdFxcdFxcdHIgPSBhaWFfaW5pdChkZXYtXFx1MDAzZWt2bSk7XFxuYXJjaC9yaXNjdi9rdm0vYWlhX2RldmljZS5jLTM5OC1cXHRcXHRcXHRtdXRleF91bmxvY2soXFx1MDAyNmRldi1cXHUwMDNla3ZtLVxcdTAwM2Vsb2NrKTtcXG4tLVxcbmFyY2gvcmlzY3Yva3ZtL2FpYV9kZXZpY2UuYz01NTU9aW50IGt2bV9yaXNjdl92Y3B1X2FpYV91cGRhdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbi0tXFxuYXJjaC9yaXNjdi9rdm0vYWlhX2RldmljZS5jLTU1Ny1cXHQvKiBQcm9jZWVkIG9ubHkgaWYgQUlBIHdhcyBpbml0aWFsaXplZCBzdWNjZXNzZnVsbHkgKi9cXG5hcmNoL3Jpc2N2L2t2bS9haWFfZGV2aWNlLmM6NTU4OlxcdGlmICgha3ZtX3Jpc2N2X2FpYV9pbml0aWFsaXplZCh2Y3B1LVxcdTAwM2Vrdm0pKVxcbmFyY2gvcmlzY3Yva3ZtL2FpYV9kZXZpY2UuYy01NTktXFx0XFx0cmV0dXJuIDE7XFxuLS1cXG5hcmNoL3Jpc2N2L2t2bS9haWFfZGV2aWNlLmM9NTY1PXZvaWQga3ZtX3Jpc2N2X3ZjcHVfYWlhX3Jlc2V0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4tLVxcbmFyY2gvcmlzY3Yva3ZtL2FpYV9kZXZpY2UuYy01NzMtXFx0LyogUHJvY2VlZCBvbmx5IGlmIEFJQSB3YXMgaW5pdGlhbGl6ZWQgc3VjY2Vzc2Z1bGx5ICovXFxuYXJjaC9yaXNjdi9rdm0vYWlhX2RldmljZS5jOjU3NDpcXHRpZiAoIWt2bV9yaXNjdl9haWFfaW5pdGlhbGl6ZWQodmNwdS1cXHUwMDNla3ZtKSlcXG5hcmNoL3Jpc2N2L2t2bS9haWFfZGV2aWNlLmMtNTc1LVxcdFxcdHJldHVybjtcXG4tLVxcbmFyY2gvcmlzY3Yva3ZtL2FpYV9kZXZpY2UuYy01ODAtXFxuYXJjaC9yaXNjdi9rdm0vYWlhX2RldmljZS5jOjU4MTp2b2lkIGt2bV9yaXNjdl92Y3B1X2FpYV9pbml0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG5hcmNoL3Jpc2N2L2t2bS9haWFfZGV2aWNlLmMtNTgyLXtcXG4tLVxcbmFyY2gvcmlzY3Yva3ZtL2FpYV9kZXZpY2UuYy01OTEtXFx0ICpcXG5hcmNoL3Jpc2N2L2t2bS9haWFfZGV2aWNlLmM6NTkyOlxcdCAqIFJlZmVyLCBhaWFfaW5pdCgpIGltcGxlbWVudGF0aW9uIGZvciBtb3JlIGRldGFpbHMuXFxuYXJjaC9yaXNjdi9rdm0vYWlhX2RldmljZS5jLTU5My1cXHQgKi9cXG4tLVxcbmFyY2gvcmlzY3Yva3ZtL2FpYV9kZXZpY2UuYz02MDA9dm9pZCBrdm1fcmlzY3ZfdmNwdV9haWFfZGVpbml0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4tLVxcbmFyY2gvcmlzY3Yva3ZtL2FpYV9kZXZpY2UuYy02MDItXFx0LyogUHJvY2VlZCBvbmx5IGlmIEFJQSB3YXMgaW5pdGlhbGl6ZWQgc3VjY2Vzc2Z1bGx5ICovXFxuYXJjaC9yaXNjdi9rdm0vYWlhX2RldmljZS5jOjYwMzpcXHRpZiAoIWt2bV9yaXNjdl9haWFfaW5pdGlhbGl6ZWQodmNwdS1cXHUwMDNla3ZtKSlcXG5hcmNoL3Jpc2N2L2t2bS9haWFfZGV2aWNlLmMtNjA0LVxcdFxcdHJldHVybjtcXG4tLVxcbmFyY2gvcmlzY3Yva3ZtL2FpYV9kZXZpY2UuYz02MTA9aW50IGt2bV9yaXNjdl9haWFfaW5qZWN0X21zaV9ieV9pZChzdHJ1Y3Qga3ZtICprdm0sIHUzMiBoYXJ0X2luZGV4LFxcbi0tXFxuYXJjaC9yaXNjdi9rdm0vYWlhX2RldmljZS5jLTYxNi1cXHQvKiBQcm9jZWVkIG9ubHkgaWYgQUlBIHdhcyBpbml0aWFsaXplZCBzdWNjZXNzZnVsbHkgKi9cXG5hcmNoL3Jpc2N2L2t2bS9haWFfZGV2aWNlLmM6NjE3OlxcdGlmICgha3ZtX3Jpc2N2X2FpYV9pbml0aWFsaXplZChrdm0pKVxcbmFyY2gvcmlzY3Yva3ZtL2FpYV9kZXZpY2UuYy02MTgtXFx0XFx0cmV0dXJuIC1FQlVTWTtcXG4tLVxcbmFyY2gvcmlzY3Yva3ZtL2FpYV9kZXZpY2UuYz02MzE9aW50IGt2bV9yaXNjdl9haWFfaW5qZWN0X21zaShzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fbXNpICptc2kpXFxuLS1cXG5hcmNoL3Jpc2N2L2t2bS9haWFfZGV2aWNlLmMtNjQwLVxcdC8qIFByb2NlZWQgb25seSBpZiBBSUEgd2FzIGluaXRpYWxpemVkIHN1Y2Nlc3NmdWxseSAqL1xcbmFyY2gvcmlzY3Yva3ZtL2FpYV9kZXZpY2UuYzo2NDE6XFx0aWYgKCFrdm1fcmlzY3ZfYWlhX2luaXRpYWxpemVkKGt2bSkpXFxuYXJjaC9yaXNjdi9rdm0vYWlhX2RldmljZS5jLTY0Mi1cXHRcXHRyZXR1cm4gLUVCVVNZO1xcbi0tXFxuYXJjaC9yaXNjdi9rdm0vYWlhX2RldmljZS5jPTY2NT1pbnQga3ZtX3Jpc2N2X2FpYV9pbmplY3RfaXJxKHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgaW50IGlycSwgYm9vbCBsZXZlbClcXG4tLVxcbmFyY2gvcmlzY3Yva3ZtL2FpYV9kZXZpY2UuYy02NjctXFx0LyogUHJvY2VlZCBvbmx5IGlmIEFJQSB3YXMgaW5pdGlhbGl6ZWQgc3VjY2Vzc2Z1bGx5ICovXFxuYXJjaC9yaXNjdi9rdm0vYWlhX2RldmljZS5jOjY2ODpcXHRpZiAoIWt2bV9yaXNjdl9haWFfaW5pdGlhbGl6ZWQoa3ZtKSlcXG5hcmNoL3Jpc2N2L2t2bS9haWFfZGV2aWNlLmMtNjY5LVxcdFxcdHJldHVybiAtRUJVU1k7XFxuLS1cXG5hcmNoL3Jpc2N2L2t2bS9haWFfZGV2aWNlLmMtNjc0LVxcbmFyY2gvcmlzY3Yva3ZtL2FpYV9kZXZpY2UuYzo2NzU6dm9pZCBrdm1fcmlzY3ZfYWlhX2luaXRfdm0oc3RydWN0IGt2bSAqa3ZtKVxcbmFyY2gvcmlzY3Yva3ZtL2FpYV9kZXZpY2UuYy02NzYte1xcbi0tXFxuYXJjaC9yaXNjdi9rdm0vYWlhX2RldmljZS5jLTY4NS1cXHQgKlxcbmFyY2gvcmlzY3Yva3ZtL2FpYV9kZXZpY2UuYzo2ODY6XFx0ICogUmVmZXIsIGFpYV9pbml0KCkgaW1wbGVtZW50YXRpb24gZm9yIG1vcmUgZGV0YWlscy5cXG5hcmNoL3Jpc2N2L2t2bS9haWFfZGV2aWNlLmMtNjg3LVxcdCAqL1xcbi0tXFxuYXJjaC9yaXNjdi9rdm0vYWlhX2RldmljZS5jPTcwMT12b2lkIGt2bV9yaXNjdl9haWFfZGVzdHJveV92bShzdHJ1Y3Qga3ZtICprdm0pXFxuLS1cXG5hcmNoL3Jpc2N2L2t2bS9haWFfZGV2aWNlLmMtNzAzLVxcdC8qIFByb2NlZWQgb25seSBpZiBBSUEgd2FzIGluaXRpYWxpemVkIHN1Y2Nlc3NmdWxseSAqL1xcbmFyY2gvcmlzY3Yva3ZtL2FpYV9kZXZpY2UuYzo3MDQ6XFx0aWYgKCFrdm1fcmlzY3ZfYWlhX2luaXRpYWxpemVkKGt2bSkpXFxuYXJjaC9yaXNjdi9rdm0vYWlhX2RldmljZS5jLTcwNS1cXHRcXHRyZXR1cm47XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDA2OjE5OjI2LjEwOTkyNDk4NFoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozOTUwNDAzMzg4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBzZWUgd2hhdCB3ZSd2ZSBnb3QgaGVyZS5cblxuKipEZWNvbnN0cnVjdGluZyB0aGUgQUlBIEF0dHJpYnV0ZSBTZXR0aW5nIFByb2Nlc3MqKlxuXG5BbHJpZ2h0LCBzbyBgYWlhX3NldF9hdHRyYCBpcyB0aGUga2V5IGZ1bmN0aW9uIHRvIGxvb2sgYXQuIFNlZW1zIGxpa2UgaXTigJlzIGEgY2FsbGJhY2ssIHNwZWNpZmljYWxseSBmb3IgS1ZNIGRldmljZSBhdHRyaWJ1dGVzLiBUaGF0IGltbWVkaWF0ZWx5IG1ha2VzIG1lIHRoaW5rIGFib3V0IGhvdyB0aGUgQUlBIGRldmljZSBpcyBtYW5hZ2VkIHdpdGhpbiB0aGUgS1ZNIGZyYW1ld29yay4gVGhlIGNvbm5lY3Rpb24gdG8gYGFpYV9pbml0YCBmcm9tIHdpdGhpbiBgYWlhX3NldF9hdHRyYCBzdWdnZXN0cyB0aGF0IHRoaXMgaXMgd2hlcmUgdGhlIEFJQSBkZXZpY2UgaXMgYmVpbmcgaW5pdGlhbGl6ZWQgYXQgc29tZSBzdGFnZS4gQW5kIGxvb2tpbmcgYmFjaywgaXQgYWxsIHN0YXJ0cyB3aXRoIHRoZSBkZXZpY2UgY3JlYXRpb24gdmlhIGBhaWFfY3JlYXRlYC4gVGhlIG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIHBpbnBvaW50IHRoZSBLVk0gZGV2aWNlIG9wZXJhdGlvbnMgYXNzb2NpYXRlZCB3aXRoIHRoZSBBSUEgZGV2aWNlLiBJIG5lZWQgdG8gZGlnIGludG8gdGhlIEtWTSBkZXZpY2Ugb3BzIGZvciBBSUEgdG8gZnVsbHkgdW5kZXJzdGFuZCB0aGUgYXR0cmlidXRlIHNldHRpbmcgZmxvdy4gVGltZSB0byBmaW5kIHRob3NlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4MTcyLCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMDY6MTk6MzAuMDYwMzMyNDQyWiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1Mjg5NTA0NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJhaWFfc2V0X2F0dHJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC9yaXNjdi9rdm0vYWlhX2RldmljZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvcmlzY3Yva3ZtL2FpYV9kZXZpY2UuYz0yODU9c3RhdGljIGludCBhaWFfaW5pdChzdHJ1Y3Qga3ZtICprdm0pXFxuLS1cXG5hcmNoL3Jpc2N2L2t2bS9haWFfZGV2aWNlLmMtMzU4LVxcbmFyY2gvcmlzY3Yva3ZtL2FpYV9kZXZpY2UuYzozNTk6c3RhdGljIGludCBhaWFfc2V0X2F0dHIoc3RydWN0IGt2bV9kZXZpY2UgKmRldiwgc3RydWN0IGt2bV9kZXZpY2VfYXR0ciAqYXR0cilcXG5hcmNoL3Jpc2N2L2t2bS9haWFfZGV2aWNlLmMtMzYwLXtcXG4tLVxcbmFyY2gvcmlzY3Yva3ZtL2FpYV9kZXZpY2UuYz01NDY9c3RydWN0IGt2bV9kZXZpY2Vfb3BzIGt2bV9yaXNjdl9haWFfZGV2aWNlX29wcyA9IHtcXG4tLVxcbmFyY2gvcmlzY3Yva3ZtL2FpYV9kZXZpY2UuYy01NDktXFx0LmRlc3Ryb3kgPSBhaWFfZGVzdHJveSxcXG5hcmNoL3Jpc2N2L2t2bS9haWFfZGV2aWNlLmM6NTUwOlxcdC5zZXRfYXR0ciA9IGFpYV9zZXRfYXR0cixcXG5hcmNoL3Jpc2N2L2t2bS9haWFfZGV2aWNlLmMtNTUxLVxcdC5nZXRfYXR0ciA9IGFpYV9nZXRfYXR0cixcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMDY6MTk6MzAuMTEzMjMyNjA2WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU0Njk2Nzg4NzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRGlzc2VjdGluZyB0aGUgUklTQy1WIEFJQSBJbml0aWFsaXphdGlvbiBGbG93KipcblxuT2theSwgc28gSSdtIHRyeWluZyB0byB0cmFjZSB0aGUgaW5pdGlhbGl6YXRpb24gcGF0aCBmb3IgdGhlIEFJQSAoQWR2YW5jZWQgSW50ZXJydXB0IEFyY2hpdGVjdHVyZSkgd2l0aGluIHRoZSBLVk0gUklTQy1WIGltcGxlbWVudGF0aW9uLiBNeSBpbml0aWFsIHRob3VnaHQgd2FzIHRoYXQgYGFpYV9zZXRfYXR0cmAgd2FzIHRoZSBwcmltYXJ5IGVudHJ5IHBvaW50LCByZW1lbWJlcmluZyBpdCBjYWxscyBgYWlhX2luaXRgIHVuZGVyIHRoZSBgS1ZNX0RFVl9SSVNDVl9BSUFfQ1RSTF9JTklUYCBjb25kaXRpb24uIEFuZCwgcmlnaHQsIGBhaWFfc2V0X2F0dHJgIGNhbiBhbHNvIGNhbGwgYGFpYV9jb25maWdgLCBpbiB0dXJuIHRyaWdnZXJpbmcgY2FsbHMgdG8gYGFpYV9hcGxpY19hZGRyYCBhbmQgYGFpYV9pbXNpY19hZGRyYC4gSG93ZXZlciwgSSBqdXN0IGNhdWdodCBteXNlbGbigJRgYWlhX3NldF9hdHRyYCBpcyBhY3R1YWxseSBhIHN0YXRpYyBmdW5jdGlvbi4gVGhhdCdzIGEga2V5IGRldGFpbCEgVGhlICp0cnVlKiBlbnRyeSBwb2ludCBpcyBga3ZtX3Jpc2N2X2FpYV9kZXZpY2Vfb3BzLnNldF9hdHRyYC5cblxuTm93LCBJIG5lZWQgdG8gem9vbSBvdXQgYSBiaXQgYW5kIGZpZ3VyZSBvdXQgaG93IHRoaXMgaXMgYWxsIGNvbm5lY3RlZCB0byB0aGUgbGFyZ2VyIEtWTSBpbmZyYXN0cnVjdHVyZS4gR2l2ZW4gdGhlIGNvbnRleHQsIEkgc2hvdWxkIHByb2JhYmx5IGJlIGxvb2tpbmcgYXQgYGt2bV92bV9pb2N0bF9lbmFibGVfY2FwYCwgY29uc2lkZXJpbmcgdGhlIHJlY2VudCBjaGFuZ2VzIGluIGBhcmNoL3Jpc2N2L2t2bS92bS5jYC4gQnV0IGhvbGQgb24sIGBrdm1fdm1faW9jdGxfZW5hYmxlX2NhcGAgaXMgYSBnZW5lcmljIEtWTSBBUEkgZnVuY3Rpb24uIFNvLCBJIGhhdmUgdG8gZ28gZGVlcGVyLiBJcyB0aGVyZSBhIHNwZWNpZmljIFJJU0MtViBLVk0gaW9jdGwgb3IgZnVuY3Rpb24gdGhhdCdzIHJlbGV2YW50IGhlcmU/IExldCdzIGdvIGJhY2sgdG8gYGFyY2gvcmlzY3Yva3ZtL3ZtLmNgIGFuZCBmb2N1cyBvbiBob3cgYGt2bV92bV9pb2N0bF9lbmFibGVfY2FwYCBpcyBpbXBsZW1lbnRlZCB3aXRoaW4gdGhlIFJJU0MtViBjb250ZXh0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo4NzAwLCJPdXRwdXRUb2tlbnMiOjQxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjE3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDA2OjE5OjM1LjU4MjkxNDEwM1oiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTI5MjkyNDQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwia3ZtX3ZtX2lvY3RsX2VuYWJsZV9jYXBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC9yaXNjdi9rdm0vdm0uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3Jpc2N2L2t2bS92bS5jPTE3ND1pbnQga3ZtX3ZtX2lvY3RsX2NoZWNrX2V4dGVuc2lvbihzdHJ1Y3Qga3ZtICprdm0sIGxvbmcgZXh0KVxcbi0tXFxuYXJjaC9yaXNjdi9rdm0vdm0uYy0yMTQtXFxuYXJjaC9yaXNjdi9rdm0vdm0uYzoyMTU6aW50IGt2bV92bV9pb2N0bF9lbmFibGVfY2FwKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9lbmFibGVfY2FwICpjYXApXFxuYXJjaC9yaXNjdi9rdm0vdm0uYy0yMTYte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQwNjoxOTozNS42MzU4NDk0MjhaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTI1NTY1ODkzMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgS1ZNIEFJQSBEZXZpY2UgSW5pdGlhbGl6YXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBga3ZtX3ZtX2lvY3RsX2VuYWJsZV9jYXBgIGFzIGEgZ29vZCBqdW1waW5nLW9mZiBwb2ludDsgaXQncyB0aGUgc3RhbmRhcmQgS1ZNIGlvY3RsIGhhbmRsZXIgZm9yIGBLVk1fRU5BQkxFX0NBUGAsIHRoYXQgbWFrZXMgc2Vuc2UuIExldCdzIHNlZSBpZiBJIGNhbiBnZXQgc29tZSBjb250ZXh0IGJ5IGxvb2tpbmcgYXQgQUlBIGRldmljZSBpbml0aWFsaXphdGlvbiBhcyBhIHdob2xlLiBgYWlhX3NldF9hdHRyYCBjb21lcyB0byBtaW5kIGFzIGl0J3Mgc29tZXRoaW5nIEkndmUgc2VlbiBiZWZvcmUuIEFoLCBidXQgaXQncyBzdGF0aWMg4oCTIHRoYXQgbWVhbnMgaXQgd29uJ3QgaGF2ZSBhIHVuaXF1ZSBzeW1ib2wgYWRkcmVzcyBpZiBpdCdzIGlubGluZWQuLi4gdW5sZXNzIGl0J3MgKm5vdCogaW5saW5lZCwgYW5kIGl0IHNob3VsZG4ndCBiZSwgYmVjYXVzZSBpdCdzIGFzc2lnbmVkIHRvIGEgc3RydWN0IG9mIGZ1bmN0aW9uIHBvaW50ZXJzLiBSaWdodC4gSG1tLCBidXQgdGhhdCBcInN0YXRpY1wiIGlzIHN0aWxsIGEgcHJvYmxlbSwgSSBuZWVkIGEgbm9uLXN0YXRpYyBmdW5jdGlvbi5cblxuT2theSwgbGV0J3Mgc2VlLi4uIGBrdm1fcmlzY3ZfYWlhX2RldmljZV9vcHNgIGxvb2tzIHByb21pc2luZzsgaXQncyBhIHN0cnVjdCBhbmQgdGhhdCBzdWdnZXN0cyBpdCBtaWdodCBoYXZlIGFzc29jaWF0ZWQgbm9uLXN0YXRpYyBmdW5jdGlvbnMuIFRpbWUgdG8gZGlnIGEgYml0IGRlZXBlciBhbmQgc2VlIGlmIEkgY2FuIGlkZW50aWZ5IGFueSBvdGhlciByZWxhdGVkIG5vbi1zdGF0aWMgZnVuY3Rpb25zIGludm9sdmVkIGluIEFJQSBkZXZpY2UgY3JlYXRpb24gd2l0aGluIHRoZSBLVk0gZnJhbWV3b3JrLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5NDM1LCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTUzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDA2OjE5OjQwLjg5MTUxMDYyOFoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTA4OTUxMTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwia3ZtX3Jpc2N2X2FpYV9kZXZpY2Vfb3BzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gvcmlzY3Yva3ZtL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3Jpc2N2L2t2bS9haWEuYz02NzI9aW50IGt2bV9yaXNjdl9haWFfaW5pdCh2b2lkKVxcbi0tXFxuYXJjaC9yaXNjdi9rdm0vYWlhLmMtNjk3LVxcdC8qIFJlZ2lzdGVyIGRldmljZSBvcGVyYXRpb25zICovXFxuYXJjaC9yaXNjdi9rdm0vYWlhLmM6Njk4OlxcdHJjID0ga3ZtX3JlZ2lzdGVyX2RldmljZV9vcHMoXFx1MDAyNmt2bV9yaXNjdl9haWFfZGV2aWNlX29wcyxcXG5hcmNoL3Jpc2N2L2t2bS9haWEuYy02OTktXFx0XFx0XFx0XFx0ICAgICBLVk1fREVWX1RZUEVfUklTQ1ZfQUlBKTtcXG4tLVxcbmFyY2gvcmlzY3Yva3ZtL2FpYV9kZXZpY2UuYz01MDE9c3RhdGljIGludCBhaWFfaGFzX2F0dHIoc3RydWN0IGt2bV9kZXZpY2UgKmRldiwgc3RydWN0IGt2bV9kZXZpY2VfYXR0ciAqYXR0cilcXG4tLVxcbmFyY2gvcmlzY3Yva3ZtL2FpYV9kZXZpY2UuYy01NDUtXFxuYXJjaC9yaXNjdi9rdm0vYWlhX2RldmljZS5jOjU0NjpzdHJ1Y3Qga3ZtX2RldmljZV9vcHMga3ZtX3Jpc2N2X2FpYV9kZXZpY2Vfb3BzID0ge1xcbmFyY2gvcmlzY3Yva3ZtL2FpYV9kZXZpY2UuYy01NDctXFx0Lm5hbWUgPSBcXFwia3ZtLXJpc2N2LWFpYVxcXCIsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDA2OjE5OjQwLjk0MjQxMjMxM1oiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NzExNDg2ODc4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBLVk0gRGV2aWNlIFJlZ2lzdHJhdGlvbiBhbmQgQXR0cmlidXRlIFNldHRpbmcqKlxuXG5Pa2F5LCBzbyBJJ20gdHJhY2luZyB0aGlzIEtWTSBkZXZpY2UgcmVnaXN0cmF0aW9uIHByb2Nlc3MuIEl0IGxvb2tzIGxpa2UgYGt2bV9yZWdpc3Rlcl9kZXZpY2Vfb3BzYCBpcyB3aGVyZSB0aGUgY29yZSByZWdpc3RyYXRpb24gaGFwcGVucywgYXMgZXhwZWN0ZWQuIFRoZSBhY3R1YWwgdXNlci1mYWNpbmcgZW50cnkgcG9pbnQgYXBwZWFycyB0byBiZSB0aGUgYEtWTV9DUkVBVEVfREVWSUNFYCBpb2N0bCwgd2hpY2ggdGhlbiBjYWxscyBga3ZtX2lvY3RsX2NyZWF0ZV9kZXZpY2VgIOKAkyByaWdodCwgaW4gYHZpcnQva3ZtL2t2bV9tYWluLmNgLiBUaGF0LCBpbiB0dXJuLCBpbnZva2VzIHRoZSBgY3JlYXRlYCBvcGVyYXRpb24uIEFuZCwgdGhlIGBLVk1fU0VUX0RFVklDRV9BVFRSYCBpb2N0bCB0aGVuIHVzZXMgdGhlIGBzZXRfYXR0cmAgZnVuY3Rpb24uXG5cbkkgc2VlIHRoYXQgYGFpYV9zZXRfYXR0cmAgaXMgZGVmaW5lZCBhcyBgc3RhdGljYCwgYnV0IGl0cyBhZGRyZXNzIGlzIHN0aWxsIHRha2VuLiBJdCdzIHByb2JhYmx5IHZpc2libGUgaW4ga2FsbHN5bXMsIGJ1dCBpdCdzIHByb2JhYmx5IGJldHRlciB0byBmb2N1cyBvbiB0aGUgYGt2bV92bV9pb2N0bF9lbmFibGVfY2FwYCBmdW5jdGlvbiwgd2hpY2ggaXMgZXhwbGljaXRseSBtb2RpZmllZCBhbmQgaXNuJ3QgYHN0YXRpY2AsIHdoaWNoIG1ha2VzIG1vcmUgc2Vuc2UgZm9yIGEgZnVuY3Rpb24gdGhhdCdzIGxpa2VseSBleHBvc2VkIG9yIGludGVuZGVkIGZvciBtYW5pcHVsYXRpb24uXG5cbldhaXQsIGBrdm1fdm1faW9jdGxfZW5hYmxlX2NhcGAgaXMgaW4gYGFyY2gvcmlzY3Yva3ZtL3ZtLmNgPyBUaGF0J3MgaW50ZXJlc3RpbmcsIEkgbmVlZCB0byBjaGVjayB0aGUgcmlzY3Ytc3BlY2lmaWMgaW1wbGVtZW50YXRpb24gdG8gdW5kZXJzdGFuZCBob3cgdGhpcyBpcyBoYW5kbGVkLiBMZXQncyBkZWx2ZSBpbnRvIGBhcmNoL3Jpc2N2L2t2bS92bS5jYCBhbmQgc2VlIHdoYXQgZWxzZSBpcyBwcmVzZW50IHRoZXJlLCB0aGVyZSBtaWdodCBiZSBvdGhlciBSSVNDLVYgc3BlY2lmaWMgaW1wbGVtZW50YXRpb25zIHRvIGV4YW1pbmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwMTU3LCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTk0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDA2OjE5OjQ2LjY1MzkwMjgzMVoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NzAwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJhcmNoL3Jpc2N2L2t2bS92bS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDIxMCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDIxMDpcXHRcXHR9XFxuIDIxMTpcXHRcXG4gMjEyOlxcdFxcdHJldHVybiByO1xcbiAyMTM6XFx0fVxcbiAyMTQ6XFx0XFxuIDIxNTpcXHRpbnQga3ZtX3ZtX2lvY3RsX2VuYWJsZV9jYXAoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX2VuYWJsZV9jYXAgKmNhcClcXG4gMjE2OlxcdHtcXG4gMjE3OlxcdFxcdGlmIChjYXAtXFx1MDAzZWZsYWdzKVxcbiAyMTg6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIDIxOTpcXHRcXG4gMjIwOlxcdFxcdHN3aXRjaCAoY2FwLVxcdTAwM2VjYXApIHtcXG4gMjIxOlxcdFxcdGNhc2UgS1ZNX0NBUF9SSVNDVl9NUF9TVEFURV9SRVNFVDpcXG4gMjIyOlxcdFxcdFxcdGt2bS1cXHUwMDNlYXJjaC5tcF9zdGF0ZV9yZXNldCA9IHRydWU7XFxuIDIyMzpcXHRcXHRcXHRyZXR1cm4gMDtcXG4gMjI0OlxcdFxcdGNhc2UgS1ZNX0NBUF9WTV9HUEFfQklUUzoge1xcbiAyMjU6XFx0XFx0XFx0dW5zaWduZWQgbG9uZyBncGFfYml0cyA9IGNhcC1cXHUwMDNlYXJnc1swXTtcXG4gMjI2OlxcdFxcdFxcdHVuc2lnbmVkIGxvbmcgbmV3X2xldmVscztcXG4gMjI3OlxcdFxcdFxcdGludCByID0gMDtcXG4gMjI4OlxcdFxcbiAyMjk6XFx0XFx0XFx0LyogRGVjaWRlIHRhcmdldCBwZ2QgbGV2ZWxzIGZyb20gcmVxdWVzdGVkIGdwYV9iaXRzICovXFxuIDIzMDpcXHQjaWZkZWYgQ09ORklHXzY0QklUXFxuIDIzMTpcXHRcXHRcXHRpZiAoZ3BhX2JpdHMgXFx1MDAzYz0gNDEpXFxuIDIzMjpcXHRcXHRcXHRcXHRuZXdfbGV2ZWxzID0gMzsgICAgICAgIC8qIFN2Mzl4NCAqL1xcbiAyMzM6XFx0XFx0XFx0ZWxzZSBpZiAoZ3BhX2JpdHMgXFx1MDAzYz0gNTApXFxuIDIzNDpcXHRcXHRcXHRcXHRuZXdfbGV2ZWxzID0gNDsgICAgICAgIC8qIFN2NDh4NCAqL1xcbiAyMzU6XFx0XFx0XFx0ZWxzZSBpZiAoZ3BhX2JpdHMgXFx1MDAzYz0gNTkpXFxuIDIzNjpcXHRcXHRcXHRcXHRuZXdfbGV2ZWxzID0gNTsgICAgICAgIC8qIFN2NTd4NCAqL1xcbiAyMzc6XFx0XFx0XFx0ZWxzZVxcbiAyMzg6XFx0XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIDIzOTpcXHQjZWxzZVxcbiAyNDA6XFx0XFx0XFx0LyogMzItYml0OiBvbmx5IFN2MzJ4NCovXFxuIDI0MTpcXHRcXHRcXHRpZiAoZ3BhX2JpdHMgXFx1MDAzYz0gMzQpXFxuIDI0MjpcXHRcXHRcXHRcXHRuZXdfbGV2ZWxzID0gMjtcXG4gMjQzOlxcdFxcdFxcdGVsc2VcXG4gMjQ0OlxcdFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiAyNDU6XFx0I2VuZGlmXFxuIDI0NjpcXHRcXHRcXHRpZiAobmV3X2xldmVscyBcXHUwMDNlIGt2bV9yaXNjdl9nc3RhZ2VfbWF4X3BnZF9sZXZlbHMpXFxuIDI0NzpcXHRcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gMjQ4OlxcdFxcbiAyNDk6XFx0XFx0XFx0LyogRm9sbG93IEtWTSdzIGxvY2sgb3JkZXJpbmc6IGt2bS1cXHUwMDNlbG9jayAtXFx1MDAzZSBrdm0tXFx1MDAzZXNsb3RzX2xvY2suICovXFxuIDI1MDpcXHRcXHRcXHRtdXRleF9sb2NrKFxcdTAwMjZrdm0tXFx1MDAzZWxvY2spO1xcbiAyNTE6XFx0XFx0XFx0bXV0ZXhfbG9jayhcXHUwMDI2a3ZtLVxcdTAwM2VzbG90c19sb2NrKTtcXG4gMjUyOlxcdFxcbiAyNTM6XFx0XFx0XFx0aWYgKGt2bS1cXHUwMDNlY3JlYXRlZF92Y3B1cyB8fCAha3ZtX2FyZV9hbGxfbWVtc2xvdHNfZW1wdHkoa3ZtKSB8fFxcbiAyNTQ6XFx0XFx0XFx0ICAgIGt2bV9yaXNjdl9haWFfaW5pdGlhbGl6ZWQoa3ZtKSlcXG4gMjU1OlxcdFxcdFxcdFxcdHIgPSAtRUJVU1k7XFxuIDI1NjpcXHRcXHRcXHRlbHNlXFxuIDI1NzpcXHRcXHRcXHRcXHRrdm0tXFx1MDAzZWFyY2gucGdkX2xldmVscyA9IG5ld19sZXZlbHM7XFxuIDI1ODpcXHRcXG4gMjU5OlxcdFxcdFxcdG11dGV4X3VubG9jayhcXHUwMDI2a3ZtLVxcdTAwM2VzbG90c19sb2NrKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMDY6MTk6NDYuNjUzOTgyNDkxWiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYwMDUwMDU3MjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBBSUEgSW5pdGlhbGl6YXRpb24gQ2hhbmdlcyoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgbWFraW5nIGEgZnVuY3Rpb25hbCBjaGFuZ2UsIHNwZWNpZmljYWxseSBhZGRpbmcgYSBga3ZtX3Jpc2N2X2FpYV9pbml0aWFsaXplZChrdm0pYCBjaGVjayB3aXRoaW4gYGt2bV92bV9pb2N0bF9lbmFibGVfY2FwYC4gVGhlIGtleSB0YWtlYXdheSBpcyBwcmV2ZW50aW5nIG1vZGlmaWNhdGlvbnMgdG8gYHBnZF9sZXZlbHNgIG9uY2UgdGhlIEFJQSAoQWR2YW5jZWQgSW50ZXJydXB0IEFyY2hpdGVjdHVyZSkgaGFzIGJlZW4gaW5pdGlhbGl6ZWQuIFRoYXQncyBhIHNvbGlkLCB0YXJnZXRlZCBhcHByb2FjaCB0byBtYWludGFpbiBzeXN0ZW0gaW50ZWdyaXR5IGFmdGVyIGEgY3JpdGljYWwgcG9pbnQuXG5cbkJleW9uZCB0aGF0LCBJIHNlZSB0aGUgYWRkaXRpb24gb2YgYGFpYV9jaGVja19hZGRyX3JhbmdlYCBhbmQgYGFpYV92YWxpZGF0ZV9hZGRyX3Jhbmdlc2AgaW4gYGFpYV9kZXZpY2UuY2AuIFRoZXNlIGFyZSBjcnVjaWFsLCBvYnZpb3VzbHksIGZvciBhZGRyZXNzIHJhbmdlIHZhbGlkYXRpb24gYW5kIGFyZSBzdWJzZXF1ZW50bHkgYmVpbmcgY2FsbGVkIGZyb20gc2V2ZXJhbCBvdGhlciBmdW5jdGlvbnMsIG5hbWVseSBgYWlhX2FwbGljX2FkZHJgLCBgYWlhX2ltc2ljX2FkZHJgLCBhbmQgYGFpYV9pbml0YC4gU2luY2UgdGhleSBhcmUgc3RhdGljLCB0aGV5IHdvbid0IHNob3cgdXAgaW4gdGhlIGBGb2N1c1N5bWJvbHNgLCBidXQgdGhhdCBpcyBleHBlY3RlZC5cblxuSG1tLCBsZXQncyBzZWUsIGBrdm1fdm1faW9jdGxfZW5hYmxlX2NhcGAgaXMgYSBnb29kIHNwb3QgZm9yIGluc3BlY3Rpb24uIEFyZSB0aGVyZSBhbnkgb3RoZXIgbm9uLXN0YXRpYyBmdW5jdGlvbnMgd2l0aGluIGBhaWFfZGV2aWNlLmNgIHRoYXQgbWlnaHQgYmUgd29ydGggY29uc2lkZXJpbmc/IEknbGwgbmVlZCB0byBjaGVjayB0aGUgY29kZWJhc2UgdG8gdmVyaWZ5LiBJIG5lZWQgdG8gYmUgc3VyZSB0aGF0IEkgYW0gbm90IG1pc3NpbmcgYW55dGhpbmcgdGhhdCBtaWdodCBhbHNvIGltcGFjdCBob3cgdGhpcyBjaGFuZ2Ugb3BlcmF0ZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExNDg2LCJPdXRwdXRUb2tlbnMiOjU2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTYzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMDY6MTk6NTIuNjU4OTkwODY0WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjA0NzM1MDMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiXlthLXpBLVowLTlfXSsgW2EtekEtWjAtOV9dK1xcXFwoXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gvcmlzY3Yva3ZtL2FpYV9kZXZpY2UuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3Jpc2N2L2t2bS9haWFfZGV2aWNlLmM9NTQ2PXN0cnVjdCBrdm1fZGV2aWNlX29wcyBrdm1fcmlzY3ZfYWlhX2RldmljZV9vcHMgPSB7XFxuLS1cXG5hcmNoL3Jpc2N2L2t2bS9haWFfZGV2aWNlLmMtNTU0LVxcbmFyY2gvcmlzY3Yva3ZtL2FpYV9kZXZpY2UuYzo1NTU6aW50IGt2bV9yaXNjdl92Y3B1X2FpYV91cGRhdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbmFyY2gvcmlzY3Yva3ZtL2FpYV9kZXZpY2UuYy01NTYte1xcbi0tXFxuYXJjaC9yaXNjdi9rdm0vYWlhX2RldmljZS5jLTU2NC1cXG5hcmNoL3Jpc2N2L2t2bS9haWFfZGV2aWNlLmM6NTY1OnZvaWQga3ZtX3Jpc2N2X3ZjcHVfYWlhX3Jlc2V0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG5hcmNoL3Jpc2N2L2t2bS9haWFfZGV2aWNlLmMtNTY2LXtcXG4tLVxcbmFyY2gvcmlzY3Yva3ZtL2FpYV9kZXZpY2UuYy01ODAtXFxuYXJjaC9yaXNjdi9rdm0vYWlhX2RldmljZS5jOjU4MTp2b2lkIGt2bV9yaXNjdl92Y3B1X2FpYV9pbml0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG5hcmNoL3Jpc2N2L2t2bS9haWFfZGV2aWNlLmMtNTgyLXtcXG4tLVxcbmFyY2gvcmlzY3Yva3ZtL2FpYV9kZXZpY2UuYy01OTktXFxuYXJjaC9yaXNjdi9rdm0vYWlhX2RldmljZS5jOjYwMDp2b2lkIGt2bV9yaXNjdl92Y3B1X2FpYV9kZWluaXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbmFyY2gvcmlzY3Yva3ZtL2FpYV9kZXZpY2UuYy02MDEte1xcbi0tXFxuYXJjaC9yaXNjdi9rdm0vYWlhX2RldmljZS5jLTYwOS1cXG5hcmNoL3Jpc2N2L2t2bS9haWFfZGV2aWNlLmM6NjEwOmludCBrdm1fcmlzY3ZfYWlhX2luamVjdF9tc2lfYnlfaWQoc3RydWN0IGt2bSAqa3ZtLCB1MzIgaGFydF9pbmRleCxcXG5hcmNoL3Jpc2N2L2t2bS9haWFfZGV2aWNlLmMtNjExLVxcdFxcdFxcdFxcdCAgIHUzMiBndWVzdF9pbmRleCwgdTMyIGlpZClcXG4tLVxcbmFyY2gvcmlzY3Yva3ZtL2FpYV9kZXZpY2UuYy02MzAtXFxuYXJjaC9yaXNjdi9rdm0vYWlhX2RldmljZS5jOjYzMTppbnQga3ZtX3Jpc2N2X2FpYV9pbmplY3RfbXNpKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9tc2kgKm1zaSlcXG5hcmNoL3Jpc2N2L2t2bS9haWFfZGV2aWNlLmMtNjMyLXtcXG4tLVxcbmFyY2gvcmlzY3Yva3ZtL2FpYV9kZXZpY2UuYy02NjQtXFxuYXJjaC9yaXNjdi9rdm0vYWlhX2RldmljZS5jOjY2NTppbnQga3ZtX3Jpc2N2X2FpYV9pbmplY3RfaXJxKHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgaW50IGlycSwgYm9vbCBsZXZlbClcXG5hcmNoL3Jpc2N2L2t2bS9haWFfZGV2aWNlLmMtNjY2LXtcXG4tLVxcbmFyY2gvcmlzY3Yva3ZtL2FpYV9kZXZpY2UuYy02NzQtXFxuYXJjaC9yaXNjdi9rdm0vYWlhX2RldmljZS5jOjY3NTp2b2lkIGt2bV9yaXNjdl9haWFfaW5pdF92bShzdHJ1Y3Qga3ZtICprdm0pXFxuYXJjaC9yaXNjdi9rdm0vYWlhX2RldmljZS5jLTY3Ni17XFxuLS1cXG5hcmNoL3Jpc2N2L2t2bS9haWFfZGV2aWNlLmMtNzAwLVxcbmFyY2gvcmlzY3Yva3ZtL2FpYV9kZXZpY2UuYzo3MDE6dm9pZCBrdm1fcmlzY3ZfYWlhX2Rlc3Ryb3lfdm0oc3RydWN0IGt2bSAqa3ZtKVxcbmFyY2gvcmlzY3Yva3ZtL2FpYV9kZXZpY2UuYy03MDIte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQwNjoxOTo1Mi44MTk0ODY1NThaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjQxNDY5MTY3MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiBBSUEgRGV2aWNlIEluaXRpYWxpemF0aW9uKipcblxuT2theSwgc28gSSdtIHRyYWNpbmcgdGhlIGluaXRpYWxpemF0aW9uIGFuZCBhdHRyaWJ1dGUgc2V0dGluZyBmb3IgdGhlIEFJQSBkZXZpY2UsIGFuZCBpdCBzZWVtcyBsaWtlIHRoZSBrZXkgaXMgcmVhbGx5IGJ1cmllZCB3aXRoaW4gdGhlIGBhaWFfZGV2aWNlLmNgIGZpbGUuIE5vbmUgb2YgdGhlIGZ1bmN0aW9ucyAqd2l0aGluKiB0aGF0IGZpbGUgYXJlIGRpcmVjdGx5IGNhbGxlZCBmcm9tIG91dHNpZGUsIHdoaWNoIGlzIGFsd2F5cyBhIHBhaW4uIFRoZXkgYXJlIHN0YXRpYy4gQnV0IEkndmUgZ290IGl0LlxuXG5gYWlhX2luaXRgIHNlZW1zIHRvIGJlIHRoZSBjcml0aWNhbCBlbnRyeSBwb2ludCB3aXRoaW4gYGFpYV9kZXZpY2UuY2AsIGFuZCB0aGF0J3MgdHJpZ2dlcmVkIGZyb20gYGFpYV9zZXRfYXR0cmAuIEFuZCAqdGhhdCogZnVuY3Rpb24sIGluIHR1cm4sIGlzIGludm9rZWQgd2hlbiBhIGBLVk1fU0VUX0RFVklDRV9BVFRSYCBpb2N0bCBpcyBpc3N1ZWQuIFRoaXMgaXMgdGhlIHJvb3QhIFRoZSBzYW1lIGdvZXMgZm9yIGBhaWFfYXBsaWNfYWRkcmAgYW5kIGBhaWFfaW1zaWNfYWRkcmAsIHdoaWNoIGFyZSBpbnZva2VkIHdpdGhpbiBgYWlhX2NvbmZpZ2AuIFRoaXMgYWxsIHRyYWNrcyBiYWNrIHRvIHRoYXQgYEtWTV9TRVRfREVWSUNFX0FUVFJgIGlvY3RsIG9uIHRoZSBBSUEgZGV2aWNlLlxuXG5TbyB0aGUgZ2VuZXJpYyBLVk0gZnVuY3Rpb24gdGhhdCBoYW5kbGVzIGBLVk1fU0VUX0RFVklDRV9BVFRSYCBpcyBga3ZtX2RldmljZV9pb2N0bF9hdHRyYCBpbiBgdmlydC9rdm0va3ZtX21haW4uY2AuIEJ1dCBga3ZtX2RldmljZV9pb2N0bF9hdHRyYCBpcyB0b28gZ2VuZXJpYywgd2hpY2ggaXMgdGhlIHByb2JsZW0gd2l0aCB0aGVzZSBnZW5lcmljIGVudHJ5IHBvaW50cy4gU28gSSdtIG5vdCBnb2luZyB0byBhZGQgaXQuXG5cblNpbmNlIHRoZSBmdW5jdGlvbnMgbW9kaWZpZWQgaW4gYGFpYV9kZXZpY2UuY2AgYXJlIGFsbCBzdGF0aWMsIEkgY2FuJ3QganVzdCBsaXN0IHRoZW0gZGlyZWN0bHkuIFRoZXkgYXJlIGludGVybmFsIGFuZCBoaWRkZW4uIE5vdGhpbmcgZWxzZSBpbiBgYWlhX2RldmljZS5jYCBjYW4gYmUgbGlzdGVkLiBIb3dldmVyLCBhIGtleSBwb2ludCBvZiBpbml0aWFsaXphdGlvbiBpcyBga3ZtX3ZtX2lvY3RsX2VuYWJsZV9jYXBgLiBJJ20gcHJldHR5IHN1cmUgdGhhdCB3aWxsIGdpdmUgbWUgYSBnb29kIGVudHJ5IHBvaW50LlxuXG5KdXN0IHRvIGJlIHN1cmUsIEkgbmVlZCB0byBkb3VibGUtY2hlY2sgdGhlIG5lY2Vzc2FyeSBLVk0gY29uZmlndXJhdGlvbi4gVGhlIGJhc2UgS1ZNIGNvbmZpZ3VyYXRpb24gd2lsbCBiZSBlbm91Z2gsIHNpbmNlIGBLVk1gIGl0c2VsZiBkZXBlbmRzIG9uIGBSSVNDVl9TQklgIGFuZCBgTU1VYC4gSnVzdCB0byBiZSBzYWZlLCBJJ20gZ29pbmcgdG8gbG9vayBmb3Igb3RoZXIgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMuIERvZXMgYEtWTV9ERVZfUklTQ1ZfQUlBX0NUUkxfSU5JVGAgaGF2ZSBhbnkgZGVwZW5kZW5jaWVzP1xuXG5cbiIsIklucHV0VG9rZW5zIjoxMjgwNCwiT3V0cHV0VG9rZW5zIjo0MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM0NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQwNjoxOTo1OS4yMzQxODAzNDFaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUwMDg4MDk1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIktWTV9ERVZfUklTQ1ZfQUlBX0NUUkxfSU5JVFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3Jpc2N2L2t2bS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9yaXNjdi9rdm0vYWlhX2RldmljZS5jPTM1OT1zdGF0aWMgaW50IGFpYV9zZXRfYXR0cihzdHJ1Y3Qga3ZtX2RldmljZSAqZGV2LCBzdHJ1Y3Qga3ZtX2RldmljZV9hdHRyICphdHRyKVxcbi0tXFxuYXJjaC9yaXNjdi9rdm0vYWlhX2RldmljZS5jLTM5NC1cXHRcXHRzd2l0Y2ggKHR5cGUpIHtcXG5hcmNoL3Jpc2N2L2t2bS9haWFfZGV2aWNlLmM6Mzk1OlxcdFxcdGNhc2UgS1ZNX0RFVl9SSVNDVl9BSUFfQ1RSTF9JTklUOlxcbmFyY2gvcmlzY3Yva3ZtL2FpYV9kZXZpY2UuYy0zOTYtXFx0XFx0XFx0bXV0ZXhfbG9jayhcXHUwMDI2ZGV2LVxcdTAwM2Vrdm0tXFx1MDAzZWxvY2spO1xcbi0tXFxuYXJjaC9yaXNjdi9rdm0vYWlhX2RldmljZS5jPTUwMT1zdGF0aWMgaW50IGFpYV9oYXNfYXR0cihzdHJ1Y3Qga3ZtX2RldmljZSAqZGV2LCBzdHJ1Y3Qga3ZtX2RldmljZV9hdHRyICphdHRyKVxcbi0tXFxuYXJjaC9yaXNjdi9rdm0vYWlhX2RldmljZS5jLTUyNi1cXHRcXHRzd2l0Y2ggKGF0dHItXFx1MDAzZWF0dHIpIHtcXG5hcmNoL3Jpc2N2L2t2bS9haWFfZGV2aWNlLmM6NTI3OlxcdFxcdGNhc2UgS1ZNX0RFVl9SSVNDVl9BSUFfQ1RSTF9JTklUOlxcbmFyY2gvcmlzY3Yva3ZtL2FpYV9kZXZpY2UuYy01MjgtXFx0XFx0XFx0cmV0dXJuIDA7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDA2OjE5OjU5LjI4NDI3NjUxNVoiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3MjI4ODE4NzM0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIEtWTSBSSVNDLVYgQUlBIERldmljZSBDb25maWd1cmF0aW9uIENoYW5nZXMqKlxuXG5BbHJpZ2h0LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEl0IHNlZW1zIHdlJ3JlIGxvb2tpbmcgYXQgbW9kaWZpY2F0aW9ucyB3aXRoaW4gYGFpYV9kZXZpY2UuY2AuIEZyb20gd2hhdCBJIGdhdGhlciwgdGhpcyBpcyBkaXJlY3RseSByZWxhdGVkIHRvIEtWTSBjb25maWd1cmF0aW9ucywgc3BlY2lmaWNhbGx5IGNvbmNlcm5pbmcgdGhlIEFJQSBhcmNoaXRlY3R1cmUgZm9yIFJJU0MtVi5cblxuTXkgYW5hbHlzaXMgcmV2ZWFscyBhIHNlcmllcyBvZiBjcnVjaWFsIGNoYW5nZXM6XG5cbjEuICBBIG5ldyBmdW5jdGlvbiwgYGFpYV9jaGVja19hZGRyX3JhbmdlYCwgaGFzIGJlZW4gaW50cm9kdWNlZC5cbjIuICBgYWlhX2FwbGljX2FkZHJgIGhhcyBiZWVuIHVwZGF0ZWQgdG8gdXRpbGl6ZSB0aGlzIG5ldyB2YWxpZGF0aW9uIGNoZWNrLlxuMy4gIFNpbWlsYXJseSwgYGFpYV9pbXNpY19hZGRyYCBub3cgYWxzbyBsZXZlcmFnZXMgYGFpYV9jaGVja19hZGRyX3JhbmdlYC5cbjQuICBBbm90aGVyIGZ1bmN0aW9uLCBgYWlhX3ZhbGlkYXRlX2FkZHJfcmFuZ2VzYCwgaGFzIGJlZW4gYWRkZWQgdG8gdGhlIG1peC5cbjUuICBgYWlhX2luaXRgIGhhcyBiZWVuIG1vZGlmaWVkIHRvIGluY29ycG9yYXRlIHRoZSBmdW5jdGlvbmFsaXR5IG9mIGBhaWFfdmFsaWRhdGVfYWRkcl9yYW5nZXNgLlxuNi4gIEFuZCBpbXBvcnRhbnRseSwgYGt2bV92bV9pb2N0bF9lbmFibGVfY2FwYCBub3cgaW5jbHVkZXMgYSBjaGVjayBmb3IgYGt2bV9yaXNjdl9haWFfaW5pdGlhbGl6ZWQoa3ZtKWAuXG5cbkVzc2VudGlhbGx5LCB0aGVzZSBhcmUgZnVuY3Rpb25hbCBpbXByb3ZlbWVudHMgdG8gdGhlIEtWTSBSSVNDLVYgQUlBIGRldmljZSBjb25maWd1cmF0aW9uLCBwcmltYXJpbHkgYWltZWQgYXQgcHJldmVudGluZyBpc3N1ZXMuIFNwZWNpZmljYWxseSwgdGhleSdyZSBkZXNpZ25lZCB0byBzdG9wIGludmFsaWQgYWRkcmVzcyByYW5nZXMgZnJvbSBiZWluZyBzZXQgYW5kIHRvIHByZXZlbnQgdGhlIG1vZGlmaWNhdGlvbiBvZiBgcGdkX2xldmVsc2AgYWZ0ZXIgQUlBIGluaXRpYWxpemF0aW9uLiBUaGlzIGlzIGEgdmVyeSB0YXJnZXRlZCBzZXQgb2YgY2hhbmdlcy5cblxuVGhlc2UgY2hhbmdlcyBhcmUgY2xlYXJseSBjcml0aWNhbCBmcm9tIGEgc2VjdXJpdHkgc3RhbmRwb2ludC4gR2l2ZW4gdGhhdCB3ZSdyZSBkZWFsaW5nIHdpdGggS1ZNLCB3aGljaCBpcyBhIGtleSBjb21wb25lbnQgZm9yIHZpcnR1YWxpemF0aW9uLCB0aGVzZSBmdW5jdGlvbmFsIGNoYW5nZXMgd2FycmFudCB0aG9yb3VnaCBmdXp6aW5nLiBNeSBwcmltYXJ5IGZvY3VzIHdpbGwgYmUgb24gYGt2bV92bV9pb2N0bF9lbmFibGVfY2FwYC4gVGhlIGNvbmZpZ3VyYXRpb24gY29udGV4dCBpcyBgS1ZNYC4gSSBuZWVkIHRvIGVuc3VyZSB0aGF0IHRoZSBuZXcgdmFsaWRhdGlvbiBsb2dpYyBoYW5kbGVzIGFsbCBwb3NzaWJsZSBlZGdlIGNhc2VzIHdoZW4gaW50ZXJhY3Rpbmcgd2l0aCB0aGVzZSBpb2N0bCBoYW5kbGVycy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM5MjIsIk91dHB1dFRva2VucyI6MTMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzIzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDA2OjIwOjA2LjUxMzA5ODA5MVoiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg2MDA2ODIyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJLVk1cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJrdm1fdm1faW9jdGxfZW5hYmxlX2NhcFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYWRkcmVzcyByYW5nZSB2YWxpZGF0aW9uIGZvciB0aGUgUklTQy1WIEFJQSAoQWR2YW5jZWQgSW50ZXJydXB0IEFyY2hpdGVjdHVyZSkgS1ZNIGRldmljZSBhbmQgcHJldmVudHMgY2hhbmdpbmcgdGhlIFZNJ3MgcGdkX2xldmVscyBhZnRlciB0aGUgQUlBIGRldmljZSBoYXMgYmVlbiBpbml0aWFsaXplZC4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byByZWFjaGFibGUgS1ZNIGlvY3RsIGhhbmRsZXJzIChLVk1fU0VUX0RFVklDRV9BVFRSIGFuZCBLVk1fRU5BQkxFX0NBUCkgYW5kIHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIHRoZSBuZXcgdmFsaWRhdGlvbiBsb2dpYyBoYW5kbGVzIGFsbCBlZGdlIGNhc2VzIGNvcnJlY3RseS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJLVk1cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJrdm1fdm1faW9jdGxfZW5hYmxlX2NhcFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYWRkcmVzcyByYW5nZSB2YWxpZGF0aW9uIGZvciB0aGUgUklTQy1WIEFJQSAoQWR2YW5jZWQgSW50ZXJydXB0IEFyY2hpdGVjdHVyZSkgS1ZNIGRldmljZSBhbmQgcHJldmVudHMgY2hhbmdpbmcgdGhlIFZNJ3MgcGdkX2xldmVscyBhZnRlciB0aGUgQUlBIGRldmljZSBoYXMgYmVlbiBpbml0aWFsaXplZC4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byByZWFjaGFibGUgS1ZNIGlvY3RsIGhhbmRsZXJzIChLVk1fU0VUX0RFVklDRV9BVFRSIGFuZCBLVk1fRU5BQkxFX0NBUCkgYW5kIHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIHRoZSBuZXcgdmFsaWRhdGlvbiBsb2dpYyBoYW5kbGVzIGFsbCBlZGdlIGNhc2VzIGNvcnJlY3RseS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMDY6MjA6MDYuNTk5MTExMTQyWiIsIlNlcSI6MjUsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4NzMwMTQ1OTE5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMDY6MjA6MDYuNTk5NzA2NTYyWiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjg3Mjk1NDU3MzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYm91bmRzIGNoZWNraW5nLCBvdmVyZmxvdyBwcmV2ZW50aW9uLCBhbmQgc3RhdGUgdmFsaWRhdGlvbiBmb3IgUklTQy1WIEtWTSBBSUEgKEFkdmFuY2VkIEludGVycnVwdCBBcmNoaXRlY3R1cmUpIGRldmljZSBhZGRyZXNzZXMgKEFQTElDIGFuZCBJTVNJQykuIEl0IGVuc3VyZXMgdGhhdCB0aGUgY29uZmlndXJlZCBndWVzdCBwaHlzaWNhbCBhZGRyZXNzZXMgZG8gbm90IG92ZXJmbG93IGFuZCBmaXQgd2l0aGluIHRoZSBndWVzdCBzdGFnZSBwYWdlIHRhYmxlIHNpemUuIFRoZXNlIGNoYW5nZXMgYWRkcmVzcyBwb3RlbnRpYWwgb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyBvciBpbnZhbGlkIGNvbmZpZ3VyYXRpb25zLCB3aGljaCBhcmUgdHlwaWNhbGx5IGNhdWdodCBieSBLQVNBTiBvciBzdGFuZGFyZCBrZXJuZWwgY2hlY2tzLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgc3RydWN0dXJlcyBjb3BpZWQgdG8gdXNlciBzcGFjZSwgbm9yIGRvZXMgaXQgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSBvciBpbmZvLWxlYWtzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgYjA2NDFjNzdiYWEzZGVkMDM5NGEzODY2MDZhNmJlOGEzYjlmNzU4NlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgQXVnIDEyIDA2OjE5OjA3IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvYXJjaC9yaXNjdi9rdm0vYWlhX2RldmljZS5jIGIvYXJjaC9yaXNjdi9rdm0vYWlhX2RldmljZS5jXG5pbmRleCBlZmM3YzBiY2ZiYTkyLi5lOTY5ZGJkYzRiOTcxIDEwMDY0NFxuLS0tIGEvYXJjaC9yaXNjdi9rdm0vYWlhX2RldmljZS5jXG4rKysgYi9hcmNoL3Jpc2N2L2t2bS9haWFfZGV2aWNlLmNcbkBAIC0xMCw3ICsxMCw5IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvYml0cy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvaXJxY2hpcC9yaXNjdi1pbXNpYy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgva3ZtX2hvc3QuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L292ZXJmbG93LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC91YWNjZXNzLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2Nhc20va3ZtX2dzdGFnZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjYXNtL2t2bV9pc2EuaFx1MDAzZVxuIFxuIHN0YXRpYyBpbnQgYWlhX2NyZWF0ZShzdHJ1Y3Qga3ZtX2RldmljZSAqZGV2LCB1MzIgdHlwZSlcbkBAIC0xNDIsMTcgKzE0NCwzNyBAQCBzdGF0aWMgaW50IGFpYV9jb25maWcoc3RydWN0IGt2bSAqa3ZtLCB1bnNpZ25lZCBsb25nIHR5cGUsXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4rc3RhdGljIGludCBhaWFfY2hlY2tfYWRkcl9yYW5nZShzdHJ1Y3Qga3ZtICprdm0sIHU2NCBhZGRyLCB1NjQgYWxpZ25tZW50LFxuK1x0XHRcdFx0dTY0IHNpemUpXG4re1xuK1x0dTY0IGVuZDtcbitcbitcdGlmICghSVNfQUxJR05FRChhZGRyLCBhbGlnbm1lbnQpKVxuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcbitcdGlmIChjaGVja19hZGRfb3ZlcmZsb3coYWRkciwgc2l6ZSwgXHUwMDI2ZW5kKSlcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXG4rXHRpZiAoZW5kIFx1MDAzZSBrdm1fcmlzY3ZfZ3N0YWdlX2dwYV9zaXplKGt2bS1cdTAwM2VhcmNoLnBnZF9sZXZlbHMpKVxuK1x0XHRyZXR1cm4gLUUyQklHO1xuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuIHN0YXRpYyBpbnQgYWlhX2FwbGljX2FkZHIoc3RydWN0IGt2bSAqa3ZtLCB1NjQgKmFkZHIsIGJvb2wgd3JpdGUpXG4ge1xuIFx0c3RydWN0IGt2bV9haWEgKmFpYSA9IFx1MDAyNmt2bS1cdTAwM2VhcmNoLmFpYTtcbitcdGludCByZXQ7XG4gXG4gXHRpZiAod3JpdGUpIHtcbiBcdFx0LyogV3JpdGVzIGNhbiBvbmx5IGJlIGRvbmUgYmVmb3JlIGlycWNoaXAgaXMgaW5pdGlhbGl6ZWQgKi9cbiBcdFx0aWYgKGt2bV9yaXNjdl9haWFfaW5pdGlhbGl6ZWQoa3ZtKSlcbiBcdFx0XHRyZXR1cm4gLUVCVVNZO1xuIFxuLVx0XHRpZiAoKmFkZHIgXHUwMDI2IChLVk1fREVWX1JJU0NWX0FQTElDX0FMSUdOIC0gMSkpXG4tXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHRcdHJldCA9IGFpYV9jaGVja19hZGRyX3JhbmdlKGt2bSwgKmFkZHIsIEtWTV9ERVZfUklTQ1ZfQVBMSUNfQUxJR04sXG4rXHRcdFx0XHRcdCAgIEtWTV9ERVZfUklTQ1ZfQVBMSUNfU0laRSk7XG4rXHRcdGlmIChyZXQpXG4rXHRcdFx0cmV0dXJuIHJldDtcbiBcbiBcdFx0YWlhLVx1MDAzZWFwbGljX2FkZHIgPSAqYWRkcjtcbiBcdH0gZWxzZVxuQEAgLTE2Niw2ICsxODgsNyBAQCBzdGF0aWMgaW50IGFpYV9pbXNpY19hZGRyKHN0cnVjdCBrdm0gKmt2bSwgdTY0ICphZGRyLFxuIHtcbiBcdHN0cnVjdCBrdm1fdmNwdSAqdmNwdTtcbiBcdHN0cnVjdCBrdm1fdmNwdV9haWEgKnZjcHVfYWlhO1xuK1x0aW50IHJldDtcbiBcbiBcdHZjcHUgPSBrdm1fZ2V0X3ZjcHUoa3ZtLCB2Y3B1X2lkeCk7XG4gXHRpZiAoIXZjcHUpXG5AQCAtMTc3LDggKzIwMCwxMCBAQCBzdGF0aWMgaW50IGFpYV9pbXNpY19hZGRyKHN0cnVjdCBrdm0gKmt2bSwgdTY0ICphZGRyLFxuIFx0XHRpZiAoa3ZtX3Jpc2N2X2FpYV9pbml0aWFsaXplZChrdm0pKVxuIFx0XHRcdHJldHVybiAtRUJVU1k7XG4gXG4tXHRcdGlmICgqYWRkciBcdTAwMjYgKEtWTV9ERVZfUklTQ1ZfSU1TSUNfQUxJR04gLSAxKSlcbi1cdFx0XHRyZXR1cm4gLUVJTlZBTDtcbitcdFx0cmV0ID0gYWlhX2NoZWNrX2FkZHJfcmFuZ2Uoa3ZtLCAqYWRkciwgS1ZNX0RFVl9SSVNDVl9JTVNJQ19BTElHTixcbitcdFx0XHRcdFx0ICAgS1ZNX0RFVl9SSVNDVl9JTVNJQ19TSVpFKTtcbitcdFx0aWYgKHJldClcbitcdFx0XHRyZXR1cm4gcmV0O1xuIFx0fVxuIFxuIFx0bXV0ZXhfbG9jayhcdTAwMjZ2Y3B1LVx1MDAzZW11dGV4KTtcbkBAIC0xOTEsNiArMjE2LDQwIEBAIHN0YXRpYyBpbnQgYWlhX2ltc2ljX2FkZHIoc3RydWN0IGt2bSAqa3ZtLCB1NjQgKmFkZHIsXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4rc3RhdGljIGludCBhaWFfdmFsaWRhdGVfYWRkcl9yYW5nZXMoc3RydWN0IGt2bSAqa3ZtKVxuK3tcbitcdHN0cnVjdCBrdm1fYWlhICphaWEgPSBcdTAwMjZrdm0tXHUwMDNlYXJjaC5haWE7XG4rXHRzdHJ1Y3Qga3ZtX3ZjcHVfYWlhICp2YWlhO1xuK1x0c3RydWN0IGt2bV92Y3B1ICp2Y3B1O1xuK1x0dW5zaWduZWQgbG9uZyBpZHg7XG4rXHRpbnQgcmV0O1xuK1xuK1x0aWYgKGFpYS1cdTAwM2Vucl9zb3VyY2VzKSB7XG4rXHRcdGlmIChhaWEtXHUwMDNlYXBsaWNfYWRkciA9PSBLVk1fUklTQ1ZfQUlBX1VOREVGX0FERFIpXG4rXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXG4rXHRcdHJldCA9IGFpYV9jaGVja19hZGRyX3JhbmdlKGt2bSwgYWlhLVx1MDAzZWFwbGljX2FkZHIsXG4rXHRcdFx0XHRcdCAgIEtWTV9ERVZfUklTQ1ZfQVBMSUNfQUxJR04sXG4rXHRcdFx0XHRcdCAgIEtWTV9ERVZfUklTQ1ZfQVBMSUNfU0laRSk7XG4rXHRcdGlmIChyZXQpXG4rXHRcdFx0cmV0dXJuIHJldDtcbitcdH1cbitcbitcdGt2bV9mb3JfZWFjaF92Y3B1KGlkeCwgdmNwdSwga3ZtKSB7XG4rXHRcdHZhaWEgPSBcdTAwMjZ2Y3B1LVx1MDAzZWFyY2guYWlhX2NvbnRleHQ7XG4rXHRcdGlmICh2YWlhLVx1MDAzZWltc2ljX2FkZHIgPT0gS1ZNX1JJU0NWX0FJQV9VTkRFRl9BRERSKVxuK1x0XHRcdHJldHVybiAtRUlOVkFMO1xuK1xuK1x0XHRyZXQgPSBhaWFfY2hlY2tfYWRkcl9yYW5nZShrdm0sIHZhaWEtXHUwMDNlaW1zaWNfYWRkcixcbitcdFx0XHRcdFx0ICAgS1ZNX0RFVl9SSVNDVl9JTVNJQ19BTElHTixcbitcdFx0XHRcdFx0ICAgS1ZNX0RFVl9SSVNDVl9JTVNJQ19TSVpFKTtcbitcdFx0aWYgKHJldClcbitcdFx0XHRyZXR1cm4gcmV0O1xuK1x0fVxuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuIHN0YXRpYyBncGFfdCBhaWFfaW1zaWNfcHBuKHN0cnVjdCBrdm1fYWlhICphaWEsIGdwYV90IGFkZHIpXG4ge1xuIFx0dTMyIGgsIGw7XG5AQCAtMjQ0LDkgKzMwMyw5IEBAIHN0YXRpYyBpbnQgYWlhX2luaXQoc3RydWN0IGt2bSAqa3ZtKVxuIFx0aWYgKGFpYS1cdTAwM2Vucl9pZHMgXHUwMDNjIGFpYS1cdTAwM2Vucl9zb3VyY2VzKVxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcbi1cdC8qIEFQTElDIGJhc2UgaXMgcmVxdWlyZWQgZm9yIG5vbi16ZXJvIG51bWJlciBvZiBzb3VyY2VzICovXG4tXHRpZiAoYWlhLVx1MDAzZW5yX3NvdXJjZXMgXHUwMDI2XHUwMDI2IGFpYS1cdTAwM2VhcGxpY19hZGRyID09IEtWTV9SSVNDVl9BSUFfVU5ERUZfQUREUilcbi1cdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHRyZXQgPSBhaWFfdmFsaWRhdGVfYWRkcl9yYW5nZXMoa3ZtKTtcbitcdGlmIChyZXQpXG4rXHRcdHJldHVybiByZXQ7XG4gXG4gXHQvKiBHcm91cCBpbmRleCBiaXRzIG11c3Qgbm90IG92ZXJsYXAgZ3Vlc3QgYW5kIEhBUlQgaW5kZXggYml0cy4gKi9cbiBcdGlmIChhaWEtXHUwMDNlbnJfZ3JvdXBfYml0cyBcdTAwMjZcdTAwMjZcbkBAIC0yNjMsMTIgKzMyMiw2IEBAIHN0YXRpYyBpbnQgYWlhX2luaXQoc3RydWN0IGt2bSAqa3ZtKVxuIFx0a3ZtX2Zvcl9lYWNoX3ZjcHUoaWR4LCB2Y3B1LCBrdm0pIHtcbiBcdFx0dmFpYSA9IFx1MDAyNnZjcHUtXHUwMDNlYXJjaC5haWFfY29udGV4dDtcbiBcbi1cdFx0LyogSU1TSUMgYmFzZSBpcyByZXF1aXJlZCAqL1xuLVx0XHRpZiAodmFpYS1cdTAwM2VpbXNpY19hZGRyID09IEtWTV9SSVNDVl9BSUFfVU5ERUZfQUREUikge1xuLVx0XHRcdHJldCA9IC1FSU5WQUw7XG4tXHRcdFx0Z290byBmYWlsX2NsZWFudXBfaW1zaWNzO1xuLVx0XHR9XG4tXG4gXHRcdC8qIEFsbCBJTVNJQ3Mgc2hvdWxkIGhhdmUgbWF0Y2hpbmcgYmFzZSBQUE4gKi9cbiBcdFx0aWYgKGJhc2VfcHBuID09IEtWTV9SSVNDVl9BSUFfVU5ERUZfQUREUilcbiBcdFx0XHRiYXNlX3BwbiA9IGFpYV9pbXNpY19wcG4oYWlhLCB2YWlhLVx1MDAzZWltc2ljX2FkZHIpO1xuZGlmZiAtLWdpdCBhL2FyY2gvcmlzY3Yva3ZtL3ZtLmMgYi9hcmNoL3Jpc2N2L2t2bS92bS5jXG5pbmRleCBhOWYwODNmZWViNzY3Li42NmVkZmFhODYyNDM1IDEwMDY0NFxuLS0tIGEvYXJjaC9yaXNjdi9rdm0vdm0uY1xuKysrIGIvYXJjaC9yaXNjdi9rdm0vdm0uY1xuQEAgLTI1MCw3ICsyNTAsOCBAQCBpbnQga3ZtX3ZtX2lvY3RsX2VuYWJsZV9jYXAoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX2VuYWJsZV9jYXAgKmNhcClcbiBcdFx0bXV0ZXhfbG9jayhcdTAwMjZrdm0tXHUwMDNlbG9jayk7XG4gXHRcdG11dGV4X2xvY2soXHUwMDI2a3ZtLVx1MDAzZXNsb3RzX2xvY2spO1xuIFxuLVx0XHRpZiAoa3ZtLVx1MDAzZWNyZWF0ZWRfdmNwdXMgfHwgIWt2bV9hcmVfYWxsX21lbXNsb3RzX2VtcHR5KGt2bSkpXG4rXHRcdGlmIChrdm0tXHUwMDNlY3JlYXRlZF92Y3B1cyB8fCAha3ZtX2FyZV9hbGxfbWVtc2xvdHNfZW1wdHkoa3ZtKSB8fFxuK1x0XHQgICAga3ZtX3Jpc2N2X2FpYV9pbml0aWFsaXplZChrdm0pKVxuIFx0XHRcdHIgPSAtRUJVU1k7XG4gXHRcdGVsc2VcbiBcdFx0XHRrdm0tXHUwMDNlYXJjaC5wZ2RfbGV2ZWxzID0gbmV3X2xldmVscztcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDA2OjIwOjA2LjU5OTcwNzQ4MloiLCJTZXEiOjI3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4NzI5NTExODU4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIFJJU0MtViBLVk0gQUlBIFBhdGNoKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBUaGlzIHBhdGNoIGlzIGZvY3VzZWQgb24gaGFyZGVuaW5nIHRoZSBSSVNDLVYgS1ZNIEFJQSBkZXZpY2UgY29kZSwgc3BlY2lmaWNhbGx5IGJ5IGFkZGluZyByaWdvcm91cyBhZGRyZXNzIHJhbmdlIHZhbGlkYXRpb24uIE15IGluaXRpYWwgcmVhZCB0ZWxscyBtZSBpdCdzIGFsbCBhYm91dCBib3VuZHMgY2hlY2tpbmcsIG92ZXJmbG93IHByb3RlY3Rpb24sIGFuZCBlbnN1cmluZyB0aGUgaW50ZXJuYWwgc3RhdGUgaXMgY29uc2lzdGVudC5cblxuSSBzZWUgdGhhdCBgYWlhX2NoZWNrX2FkZHJfcmFuZ2VgIGlzIGludHJvZHVjZWQgdG8gdmFsaWRhdGUgYWRkcmVzcyByYW5nZXMgZm9yIGJvdGggdGhlIEFQTElDIGFuZCBJTVNJQyBjb21wb25lbnRzLiBJdCBtZXRpY3Vsb3VzbHkgY2hlY2tzIGZvciBhbGlnbm1lbnQsIHBvdGVudGlhbCBvdmVyZmxvd3MgZHVyaW5nIGNhbGN1bGF0aW9ucywgYW5kIGNydWNpYWxseSwgZW5zdXJlcyB0aGUgZW5kIGFkZHJlc3MgZG9lc24ndCBleGNlZWQgdGhlIGBrdm1fcmlzY3ZfZ3N0YWdlX2dwYV9zaXplYC4gSSBhbHNvIG5vdGljZSBgYWlhX3ZhbGlkYXRlX2FkZHJfcmFuZ2VzYCBpcyBpbXBsZW1lbnRlZCB0byBoYW5kbGUgdmFsaWRhdGlvbiBvZiAqYWxsKiBBUExJQyBhbmQgSU1TSUMgYWRkcmVzc2VzIGR1cmluZyBgYWlhX2luaXRgLCBhZGRpbmcgZnVydGhlciBwcm9hY3RpdmUgbWVhc3VyZXMuIFRoZSBga3ZtX3ZtX2lvY3RsX2VuYWJsZV9jYXBgIGNvZGUgaGFzIGFsc28gYmVlbiB1cGRhdGVkIHRvIHJldHVybiBhbiBgLUVCVVNZYCBlcnJvciBpZiB3ZSdyZSB0cnlpbmcgdG8gc2V0IGBwZ2RfbGV2ZWxzYCB3aGlsZSB0aGUgQUlBIGlzIGFscmVhZHkgaW5pdGlhbGl6ZWQuXG5cbkFsbCBvZiB0aGVzZSBjaGFuZ2VzIHNjcmVhbSBkZWZlbnNlLWluLWRlcHRoIHRvIG1lLiBUaGUgb2JqZWN0aXZlIGlzIHRvIG1ha2UgS1ZNIGlvY3RscyBtb3JlIHJvYnVzdCBieSBwcmV2ZW50aW5nIGFueSBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzIG9yIGludmFsaWQgY29uZmlndXJhdGlvbnMuIFRoZSB0ZXh0IHNwZWNpZmljYWxseSBzdGF0ZXMgdGhlcmUgYXJlIG5vIG5ldyB1c2VyLXNwYWNlIHN0cnVjdHVyZXMgYW5kIHRoYXQgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLiBFc3NlbnRpYWxseSwgdGhpcyBwYXRjaCBpcyBhYm91dCBzdG9wcGluZyBiYWQgZGF0YSBmcm9tIGNvcnJ1cHRpbmcgdGhlIHZpcnR1YWxpemF0aW9uIGVudmlyb25tZW50LlxuXG5Ob3csIGdpdmVuIHRoZSBuYXR1cmUgb2YgdGhlc2UgY2hhbmdlcywgdGhlIHRleHQgc2F5cyB0aGF0IEtBU0FOIGFuZCBzdGFuZGFyZCBjaGVja3Mgc2hvdWxkIGNhdGNoIHRoZXNlIHR5cGVzIG9mIGJ1Z3MuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBcIk9rYXksIHRoYXQgc2VlbXMgbG9naWNhbC5cIiBCdXQsIEkgbmVlZCB0byBtYWtlIHN1cmUsIGxldCdzIGNvbmZpcm0gdGhlIGxhY2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkuIExldCdzIGRlbHZlIGluLlxuXG5gYWlhX2NoZWNrX2FkZHJfcmFuZ2VgIGlzIHRoZSBjcml0aWNhbCBmdW5jdGlvbiwgYW5kIGl0J3MgdGFraW5nIGFuIGBhZGRyYCwgYGFsaWdubWVudGAsIGFuZCBgc2l6ZWAuIEdvb2QsIGl0IHVzZXMgYGNoZWNrX2FkZF9vdmVyZmxvd2AuIEl0J3MgdXNlZCBieSBgYWlhX2FwbGljX2FkZHJgIGFuZCBgYWlhX2ltc2ljX2FkZHJgIGNhbGxlZCBmcm9tIGlvY3RscyAoS1ZNX1NFVF9ERVZJQ0VfQVRUUi9LVk1fR0VUX0RFVklDRV9BVFRSKS4gVGhlIGBhZGRyYCBhcmd1bWVudCBpcyBwYXNzZWQgYXMgYSBzaW1wbGUgdTY0LiBPa2F5LCBzbyBubyBwb2ludGVycyB0byB1bmluaXRpYWxpemVkIG1lbW9yeSBiZWluZyBsZWFrZWQgdG8gdXNlciBzcGFjZS5cblxuU28sIGFmdGVyIHRoaXMgZGVlcGVyIGRpdmUsIEkgY2FuIGNvbmNsdWRlIHdpdGggY29uZmlkZW5jZSB0aGF0LCBiYXNlZCBvbiBteSB1bmRlcnN0YW5kaW5nLCB0aGlzIHBhdGNoIGRvZXMgKm5vdCogcmVxdWlyZSBOZWVkc0tNU0FOIHRvIGJlIHRydWUuIEl0J3MgYWJvdXQgZGF0YSB2YWxpZGF0aW9uLCBub3QgbWVtb3J5IGluaXRpYWxpemF0aW9uIHZ1bG5lcmFiaWxpdGllcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MzgyMywiT3V0cHV0VG9rZW5zIjoxNDgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNjcsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQwNjoyMDoxNS4zMjkyMjM1M1oiLCJTZXEiOjI4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwMDYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBib3VuZHMgY2hlY2tpbmcsIG92ZXJmbG93IHByZXZlbnRpb24sIGFuZCBzdGF0ZSB2YWxpZGF0aW9uIGZvciBSSVNDLVYgS1ZNIEFJQSAoQWR2YW5jZWQgSW50ZXJydXB0IEFyY2hpdGVjdHVyZSkgZGV2aWNlIGFkZHJlc3NlcyAoQVBMSUMgYW5kIElNU0lDKS4gSXQgZW5zdXJlcyB0aGF0IHRoZSBjb25maWd1cmVkIGd1ZXN0IHBoeXNpY2FsIGFkZHJlc3NlcyBkbyBub3Qgb3ZlcmZsb3cgYW5kIGZpdCB3aXRoaW4gdGhlIGd1ZXN0IHN0YWdlIHBhZ2UgdGFibGUgc2l6ZS4gVGhlc2UgY2hhbmdlcyBhZGRyZXNzIHBvdGVudGlhbCBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzIG9yIGludmFsaWQgY29uZmlndXJhdGlvbnMsIHdoaWNoIGFyZSB0eXBpY2FsbHkgY2F1Z2h0IGJ5IEtBU0FOIG9yIHN0YW5kYXJkIGtlcm5lbCBjaGVja3MuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBzdHJ1Y3R1cmVzIGNvcGllZCB0byB1c2VyIHNwYWNlLCBub3IgZG9lcyBpdCBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IG9yIGluZm8tbGVha3MuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGJvdW5kcyBjaGVja2luZywgb3ZlcmZsb3cgcHJldmVudGlvbiwgYW5kIHN0YXRlIHZhbGlkYXRpb24gZm9yIFJJU0MtViBLVk0gQUlBIChBZHZhbmNlZCBJbnRlcnJ1cHQgQXJjaGl0ZWN0dXJlKSBkZXZpY2UgYWRkcmVzc2VzIChBUExJQyBhbmQgSU1TSUMpLiBJdCBlbnN1cmVzIHRoYXQgdGhlIGNvbmZpZ3VyZWQgZ3Vlc3QgcGh5c2ljYWwgYWRkcmVzc2VzIGRvIG5vdCBvdmVyZmxvdyBhbmQgZml0IHdpdGhpbiB0aGUgZ3Vlc3Qgc3RhZ2UgcGFnZSB0YWJsZSBzaXplLiBUaGVzZSBjaGFuZ2VzIGFkZHJlc3MgcG90ZW50aWFsIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMgb3IgaW52YWxpZCBjb25maWd1cmF0aW9ucywgd2hpY2ggYXJlIHR5cGljYWxseSBjYXVnaHQgYnkgS0FTQU4gb3Igc3RhbmRhcmQga2VybmVsIGNoZWNrcy4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IHN0cnVjdHVyZXMgY29waWVkIHRvIHVzZXIgc3BhY2UsIG5vciBkb2VzIGl0IGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgb3IgaW5mby1sZWFrcy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowhvdgn[1] Phase: Succeeded StartedAt: 2026-08-12 06:20:26 +0000 UTC FinishedAt: 2026-08-12 06:20:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhvdgn[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-12 06:20:26 +0000 UTC FinishedAt: 2026-08-12 06:20:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhvdgn[2] Phase: Succeeded StartedAt: 2026-08-12 06:20:26 +0000 UTC FinishedAt: 2026-08-12 07:06:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhvdgn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5e6de6a2b522f659defacb1551d0465ba6ce13cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_vm_ioctl_enable_cap"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5e6de6a2b522f659defacb1551d0465ba6ce13cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"0d7440a9-770e-4182-84df-d9760416f363","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-12 06:20:26 +0000 UTC FinishedAt: 2026-08-12 07:06:24 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"5e6de6a2b522f659defacb1551d0465ba6ce13cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_vm_ioctl_enable_cap"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"5e6de6a2b522f659defacb1551d0465ba6ce13cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"0d7440a9-770e-4182-84df-d9760416f363","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowhvdgn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5e6de6a2b522f659defacb1551d0465ba6ce13cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_vm_ioctl_enable_cap"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5e6de6a2b522f659defacb1551d0465ba6ce13cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"0d7440a9-770e-4182-84df-d9760416f363","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-12 06:20:26 +0000 UTC FinishedAt: 2026-08-12 06:20:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhvdgn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5e6de6a2b522f659defacb1551d0465ba6ce13cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_vm_ioctl_enable_cap"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5e6de6a2b522f659defacb1551d0465ba6ce13cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"0d7440a9-770e-4182-84df-d9760416f363","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-12 06:20:26 +0000 UTC FinishedAt: 2026-08-12 06:20:31 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"5e6de6a2b522f659defacb1551d0465ba6ce13cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},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-workflowhvdgn/series-workflowhvdgn-convert-artifact-4229392947/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowhvdgn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5e6de6a2b522f659defacb1551d0465ba6ce13cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_vm_ioctl_enable_cap"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5e6de6a2b522f659defacb1551d0465ba6ce13cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"0d7440a9-770e-4182-84df-d9760416f363","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-12 06:20:36 +0000 UTC FinishedAt: 2026-08-12 06:39:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhvdgn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5e6de6a2b522f659defacb1551d0465ba6ce13cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_vm_ioctl_enable_cap"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5e6de6a2b522f659defacb1551d0465ba6ce13cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"0d7440a9-770e-4182-84df-d9760416f363","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-12 06:20:36 +0000 UTC FinishedAt: 2026-08-12 06:39:08 +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:*8cfd80ca-abe5-4814-b5cb-2945d7b0f262,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-workflowhvdgn/series-workflowhvdgn-convert-artifact-4229392947/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": "90186d14-809f-4b41-af6e-36af7bfad421", "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-workflowhvdgn/series-workflowhvdgn-build-action-3078460641/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowhvdgn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5e6de6a2b522f659defacb1551d0465ba6ce13cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_vm_ioctl_enable_cap"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5e6de6a2b522f659defacb1551d0465ba6ce13cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"0d7440a9-770e-4182-84df-d9760416f363","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-12 06:20:36 +0000 UTC FinishedAt: 2026-08-12 06:38:58 +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:*8cfd80ca-abe5-4814-b5cb-2945d7b0f262,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-workflowhvdgn/series-workflowhvdgn-convert-artifact-4229392947/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": "90186d14-809f-4b41-af6e-36af7bfad421", "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-workflowhvdgn/series-workflowhvdgn-build-action-3078460641/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowhvdgn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5e6de6a2b522f659defacb1551d0465ba6ce13cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_vm_ioctl_enable_cap"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5e6de6a2b522f659defacb1551d0465ba6ce13cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"0d7440a9-770e-4182-84df-d9760416f363","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-12 06:39:08 +0000 UTC FinishedAt: 2026-08-12 06:39:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhvdgn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5e6de6a2b522f659defacb1551d0465ba6ce13cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_vm_ioctl_enable_cap"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5e6de6a2b522f659defacb1551d0465ba6ce13cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"0d7440a9-770e-4182-84df-d9760416f363","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-12 06:39:08 +0000 UTC FinishedAt: 2026-08-12 06:39:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhvdgn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5e6de6a2b522f659defacb1551d0465ba6ce13cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_vm_ioctl_enable_cap"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5e6de6a2b522f659defacb1551d0465ba6ce13cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"0d7440a9-770e-4182-84df-d9760416f363","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-12 06:39:08 +0000 UTC FinishedAt: 2026-08-12 06:39:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhvdgn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5e6de6a2b522f659defacb1551d0465ba6ce13cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_vm_ioctl_enable_cap"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5e6de6a2b522f659defacb1551d0465ba6ce13cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"0d7440a9-770e-4182-84df-d9760416f363","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-12 06:39:08 +0000 UTC FinishedAt: 2026-08-12 06:39:15 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"5e6de6a2b522f659defacb1551d0465ba6ce13cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"0d7440a9-770e-4182-84df-d9760416f363","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},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-workflowhvdgn/series-workflowhvdgn-convert-artifact-686694186/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowhvdgn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5e6de6a2b522f659defacb1551d0465ba6ce13cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_vm_ioctl_enable_cap"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5e6de6a2b522f659defacb1551d0465ba6ce13cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"0d7440a9-770e-4182-84df-d9760416f363","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-12 06:39:19 +0000 UTC FinishedAt: 2026-08-12 06:41:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhvdgn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5e6de6a2b522f659defacb1551d0465ba6ce13cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_vm_ioctl_enable_cap"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5e6de6a2b522f659defacb1551d0465ba6ce13cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"0d7440a9-770e-4182-84df-d9760416f363","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-12 06:39:19 +0000 UTC FinishedAt: 2026-08-12 06:41:05 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*90186d14-809f-4b41-af6e-36af7bfad421,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-workflowhvdgn/series-workflowhvdgn-build-action-3078460641/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-workflowhvdgn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5e6de6a2b522f659defacb1551d0465ba6ce13cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_vm_ioctl_enable_cap"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5e6de6a2b522f659defacb1551d0465ba6ce13cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"0d7440a9-770e-4182-84df-d9760416f363","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-12 06:41:15 +0000 UTC FinishedAt: 2026-08-12 06:41:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhvdgn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5e6de6a2b522f659defacb1551d0465ba6ce13cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_vm_ioctl_enable_cap"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5e6de6a2b522f659defacb1551d0465ba6ce13cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"0d7440a9-770e-4182-84df-d9760416f363","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-12 06:41:15 +0000 UTC FinishedAt: 2026-08-12 06:41:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhvdgn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5e6de6a2b522f659defacb1551d0465ba6ce13cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_vm_ioctl_enable_cap"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5e6de6a2b522f659defacb1551d0465ba6ce13cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"0d7440a9-770e-4182-84df-d9760416f363","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-12 06:41:15 +0000 UTC FinishedAt: 2026-08-12 06:59:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhvdgn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5e6de6a2b522f659defacb1551d0465ba6ce13cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_vm_ioctl_enable_cap"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5e6de6a2b522f659defacb1551d0465ba6ce13cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"0d7440a9-770e-4182-84df-d9760416f363","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-12 06:41:15 +0000 UTC FinishedAt: 2026-08-12 06:59:15 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*8cfd80ca-abe5-4814-b5cb-2945d7b0f262,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-workflowhvdgn/series-workflowhvdgn-convert-artifact-686694186/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": "294c7a06-7d57-4734-829c-67ab3df6601c", "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-workflowhvdgn/series-workflowhvdgn-build-action-3002283598/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowhvdgn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5e6de6a2b522f659defacb1551d0465ba6ce13cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_vm_ioctl_enable_cap"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5e6de6a2b522f659defacb1551d0465ba6ce13cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"0d7440a9-770e-4182-84df-d9760416f363","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-12 06:41:15 +0000 UTC FinishedAt: 2026-08-12 06:59:05 +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:*8cfd80ca-abe5-4814-b5cb-2945d7b0f262,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-workflowhvdgn/series-workflowhvdgn-convert-artifact-686694186/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": "294c7a06-7d57-4734-829c-67ab3df6601c", "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-workflowhvdgn/series-workflowhvdgn-build-action-3002283598/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowhvdgn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5e6de6a2b522f659defacb1551d0465ba6ce13cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_vm_ioctl_enable_cap"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5e6de6a2b522f659defacb1551d0465ba6ce13cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"0d7440a9-770e-4182-84df-d9760416f363","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-12 06:59:15 +0000 UTC FinishedAt: 2026-08-12 06:59:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhvdgn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5e6de6a2b522f659defacb1551d0465ba6ce13cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_vm_ioctl_enable_cap"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5e6de6a2b522f659defacb1551d0465ba6ce13cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"0d7440a9-770e-4182-84df-d9760416f363","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-12 06:59:15 +0000 UTC FinishedAt: 2026-08-12 06:59:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhvdgn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5e6de6a2b522f659defacb1551d0465ba6ce13cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_vm_ioctl_enable_cap"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5e6de6a2b522f659defacb1551d0465ba6ce13cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"0d7440a9-770e-4182-84df-d9760416f363","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-12 06:59:15 +0000 UTC FinishedAt: 2026-08-12 07:01:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhvdgn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5e6de6a2b522f659defacb1551d0465ba6ce13cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_vm_ioctl_enable_cap"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5e6de6a2b522f659defacb1551d0465ba6ce13cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"0d7440a9-770e-4182-84df-d9760416f363","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-12 06:59:15 +0000 UTC FinishedAt: 2026-08-12 07:01:01 +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:*294c7a06-7d57-4734-829c-67ab3df6601c,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-workflowhvdgn/series-workflowhvdgn-build-action-3002283598/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-workflowhvdgn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5e6de6a2b522f659defacb1551d0465ba6ce13cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_vm_ioctl_enable_cap"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5e6de6a2b522f659defacb1551d0465ba6ce13cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"0d7440a9-770e-4182-84df-d9760416f363","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-12 07:01:11 +0000 UTC FinishedAt: 2026-08-12 07:06:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhvdgn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5e6de6a2b522f659defacb1551d0465ba6ce13cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_vm_ioctl_enable_cap"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5e6de6a2b522f659defacb1551d0465ba6ce13cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"0d7440a9-770e-4182-84df-d9760416f363","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-12 07:01:11 +0000 UTC FinishedAt: 2026-08-12 07:06:24 +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":["kvm_vm_ioctl_enable_cap"],"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:*90186d14-809f-4b41-af6e-36af7bfad421,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*294c7a06-7d57-4734-829c-67ab3df6601c,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-workflowhvdgn/series-workflowhvdgn-build-action-3078460641/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-workflowhvdgn/series-workflowhvdgn-build-action-3002283598/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowhvdgn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5e6de6a2b522f659defacb1551d0465ba6ce13cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_vm_ioctl_enable_cap"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5e6de6a2b522f659defacb1551d0465ba6ce13cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"0d7440a9-770e-4182-84df-d9760416f363","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-12 07:01:11 +0000 UTC FinishedAt: 2026-08-12 07:01:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhvdgn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5e6de6a2b522f659defacb1551d0465ba6ce13cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_vm_ioctl_enable_cap"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5e6de6a2b522f659defacb1551d0465ba6ce13cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"0d7440a9-770e-4182-84df-d9760416f363","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-12 07:01:11 +0000 UTC FinishedAt: 2026-08-12 07:01:16 +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":["kvm_vm_ioctl_enable_cap"],"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-workflowhvdgn/series-workflowhvdgn-convert-artifact-840497087/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowhvdgn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5e6de6a2b522f659defacb1551d0465ba6ce13cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_vm_ioctl_enable_cap"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5e6de6a2b522f659defacb1551d0465ba6ce13cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"0d7440a9-770e-4182-84df-d9760416f363","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-12 07:01:11 +0000 UTC FinishedAt: 2026-08-12 07:01:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhvdgn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5e6de6a2b522f659defacb1551d0465ba6ce13cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_vm_ioctl_enable_cap"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5e6de6a2b522f659defacb1551d0465ba6ce13cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"0d7440a9-770e-4182-84df-d9760416f363","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-12 07:01:11 +0000 UTC FinishedAt: 2026-08-12 07:01:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhvdgn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5e6de6a2b522f659defacb1551d0465ba6ce13cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_vm_ioctl_enable_cap"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5e6de6a2b522f659defacb1551d0465ba6ce13cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"0d7440a9-770e-4182-84df-d9760416f363","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-12 07:01:11 +0000 UTC FinishedAt: 2026-08-12 07:01:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhvdgn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5e6de6a2b522f659defacb1551d0465ba6ce13cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_vm_ioctl_enable_cap"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5e6de6a2b522f659defacb1551d0465ba6ce13cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"0d7440a9-770e-4182-84df-d9760416f363","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-12 07:01:22 +0000 UTC FinishedAt: 2026-08-12 07:06:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhvdgn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5e6de6a2b522f659defacb1551d0465ba6ce13cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_vm_ioctl_enable_cap"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5e6de6a2b522f659defacb1551d0465ba6ce13cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"0d7440a9-770e-4182-84df-d9760416f363","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-12 07:01:22 +0000 UTC FinishedAt: 2026-08-12 07:06:02 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*90186d14-809f-4b41-af6e-36af7bfad421,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*294c7a06-7d57-4734-829c-67ab3df6601c,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-workflowhvdgn/series-workflowhvdgn-build-action-3078460641/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-workflowhvdgn/series-workflowhvdgn-build-action-3002283598/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-workflowhvdgn/series-workflowhvdgn-convert-artifact-840497087/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,}