Name: series-workflowzdh5z Phase: Succeeded StartedAt: 2026-06-24 03:19:49 +0000 UTC FinishedAt: 2026-06-24 07:23:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzdh5z[0] Phase: Succeeded StartedAt: 2026-06-24 03:19:49 +0000 UTC FinishedAt: 2026-06-24 03:27:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzdh5z[0].run-triage Phase: Succeeded StartedAt: 2026-06-24 03:19:49 +0000 UTC FinishedAt: 2026-06-24 03:27:42 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "bpf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git", "commit_hash": "a975094bf98ca97be9146f9d3b5681a6f9cf5ce3", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "VLAN_8021Q" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "bpf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git", "commit_hash": "a975094bf98ca97be9146f9d3b5681a6f9cf5ce3", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "VLAN_8021Q" ], "series_id": "89510d8e-b944-4377-a5b8-7fbad6539b44" }, "track": "KASAN", "fuzz": { "focus": [ "bpf", "net" ], "focus_symbols": [ "bpf_ipv4_fib_lookup", "bpf_ipv6_fib_lookup", "bpf_xdp_fib_lookup", "bpf_skb_fib_lookup", "bpf_fib_set_fwd_params", "bpf_fib_vlan_input_dev" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db", "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI0IDAzOjI1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1ZMQU5fODAyMVEmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDticGZfaXB2NF9maWJfbG9va3VwJiMzNDssCiAgICAmIzM0O2JwZl9pcHY2X2ZpYl9sb29rdXAmIzM0OywKICAgICYjMzQ7YnBmX3hkcF9maWJfbG9va3VwJiMzNDssCiAgICAmIzM0O2JwZl9za2JfZmliX2xvb2t1cCYjMzQ7LAogICAgJiMzNDticGZfZmliX3NldF9md2RfcGFyYW1zJiMzNDssCiAgICAmIzM0O2JwZl9maWJfdmxhbl9pbnB1dF9kZXYmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIEJQRiBGSUIgbG9va3VwIGhlbHBlciAoYGJwZl9maWJfbG9va3VwYCksIGFkZGluZyBzdXBwb3J0IGZvciBWTEFOcyB2aWEgYEJQRl9GSUJfTE9PS1VQX1ZMQU5gIGFuZCBgQlBGX0ZJQl9MT09LVVBfVkxBTl9JTlBVVGAgZmxhZ3MuIFRoaXMgbW9kaWZpZXMgY29yZSByb3V0aW5nIGxvb2t1cCBsb2dpYyB3aXRoaW4gQlBGIHByb2dyYW1zLCB3aGljaCBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgYnkgbG9hZGluZyBhbmQgZXhlY3V0aW5nIEJQRiBwcm9ncmFtcyAoWERQIG9yIFRDKS4gRnV6emluZyBpcyByZXF1aXJlZCB0byBlbnN1cmUgdGhlIG5ldyBWTEFOIHJlc29sdXRpb24gbG9naWMgYW5kIGl0cyBpbnRlcmFjdGlvbiB3aXRoIHRoZSBuZXR3b3JraW5nIHN0YWNrIGlzIHJvYnVzdC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNCAwMzoyNTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDM1MzM3MWNkYTliN2U5YzcyN2U4OGEwYjlmN2RmMTVkNTBmZWViOGVcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIEp1biAyNCAwMzoyNTo1MSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmggYi9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmhcbmluZGV4IDg5YjM2ZGU1ZmRiYjZkLi5kNDIxODk1NGM1MGY1MyAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oXG5AQCAtMzUzMiw2ICYjNDM7MzUzMiw0NSBAQCB1bmlvbiBicGZfYXR0ciB7XG4gICpcdFx0XHRVc2UgdGhlIG1hcmsgcHJlc2VudCBpbiAqcGFyYW1zKi1cdTAwM2VtYXJrIGZvciB0aGUgZmliIGxvb2t1cC5cbiAgKlx0XHRcdFRoaXMgb3B0aW9uIHNob3VsZCBub3QgYmUgdXNlZCB3aXRoIEJQRl9GSUJfTE9PS1VQX0RJUkVDVCxcbiAgKlx0XHRcdGFzIGl0IG9ubHkgaGFzIG1lYW5pbmcgZm9yIGZ1bGwgbG9va3Vwcy5cbiYjNDM7ICpcdFx0KipCUEZfRklCX0xPT0tVUF9WTEFOKipcbiYjNDM7ICpcdFx0XHRJZiB0aGUgZmliIGxvb2t1cCByZXNvbHZlcyB0byBhIFZMQU4gZGV2aWNlIHdob3NlXG4mIzQzOyAqXHRcdFx0cGFyZW50IGlzIGEgcmVhbCAobm9uLVZMQU4pIGRldmljZSwgc2V0XG4mIzQzOyAqXHRcdFx0KnBhcmFtcyotXHUwMDNlaF92bGFuX3Byb3RvIGFuZCAqcGFyYW1zKi1cdTAwM2VoX3ZsYW5fVENJIGZyb21cbiYjNDM7ICpcdFx0XHR0aGUgVkxBTiBkZXZpY2UgYW5kIHJlcGxhY2UgKnBhcmFtcyotXHUwMDNlaWZpbmRleCB3aXRoIHRoZVxuJiM0MzsgKlx0XHRcdHBhcmVudCYjMzk7cyBpZmluZGV4LiAqcGFyYW1zKi1cdTAwM2VoX3ZsYW5fVENJIGNhcnJpZXMgdGhlIFZJRFxuJiM0MzsgKlx0XHRcdG9ubHksIHdpdGggUENQIGFuZCBERUkgYml0cyB6ZXJvOyBhIGNvbnN1bWVyIHdhbnRpbmcgdG9cbiYjNDM7ICpcdFx0XHRzZXQgZWdyZXNzIHByaW9yaXR5IHdyaXRlcyBQQ1AgaXRzZWxmLiAqcGFyYW1zKi1cdTAwM2VzbWFjIGlzXG4mIzQzOyAqXHRcdFx0dGhlIFZMQU4gZGV2aWNlJiMzOTtzIG93biBhZGRyZXNzLCB3aGljaCBjYW4gZGlmZmVyIGZyb20gdGhlXG4mIzQzOyAqXHRcdFx0cGFyZW50JiMzOTtzLiBPbmx5IHRoZSBpbW1lZGlhdGUgcGFyZW50IGlzIHJlc29sdmVkOyBpZiBpdFxuJiM0MzsgKlx0XHRcdGlzIGl0c2VsZiBhIFZMQU4gZGV2aWNlIChRaW5RKSBvciBpbiBhbm90aGVyIG5hbWVzcGFjZSxcbiYjNDM7ICpcdFx0XHR0aGUgZWdyZXNzIGNhbm5vdCBiZSByZWR1Y2VkIHRvIGEgcGh5c2ljYWwgZGV2aWNlIHBsdXNcbiYjNDM7ICpcdFx0XHRvbmUgdGFnIGFuZCB0aGUgbG9va3VwIHJldHVybnNcbiYjNDM7ICpcdFx0XHQqKkJQRl9GSUJfTEtVUF9SRVRfVkxBTl9GQUlMVVJFKiogd2l0aCAqcGFyYW1zKi1cdTAwM2VpZmluZGV4XG4mIzQzOyAqXHRcdFx0bGVmdCBhdCB0aGUgaW5wdXQuIFJlLWlzc3VlIHdpdGhvdXRcbiYjNDM7ICpcdFx0XHQqKkJQRl9GSUJfTE9PS1VQX1ZMQU4qKiB0byBvYnRhaW4gdGhlIFZMQU4gZGV2aWNlJiMzOTtzIG93blxuJiM0MzsgKlx0XHRcdGlmaW5kZXguIFRoZSBzd2FwIGFuZCB0aGUgdmxhbiBmaWVsZHNcbiYjNDM7ICpcdFx0XHRhcmUgd3JpdHRlbiBvbmx5IG9uIHN1Y2Nlc3M7IG90aGVyIG91dHB1dCBmaWVsZHMga2VlcFxuJiM0MzsgKlx0XHRcdHRoZSBoZWxwZXImIzM5O3MgZXhpc3RpbmcgYmVoYXZpb3VyLCBzbyBhIGZyYWctbmVlZGVkIHJlc3VsdFxuJiM0MzsgKlx0XHRcdHN0aWxsIHJlcG9ydHMgdGhlIHJvdXRlIG10dSBpbiAqcGFyYW1zKi1cdTAwM2VtdHVfcmVzdWx0LlxuJiM0MzsgKlx0XHRcdFRoaXMgZmxhZyBpcyBvbmx5IHZhbGlkIGZvciBYRFAgcHJvZ3JhbXM7IHRjIHByb2dyYW1zXG4mIzQzOyAqXHRcdFx0cmVjZWl2ZSAtRUlOVkFMIHNpbmNlIHRoZXkgY2FuIHJlZGlyZWN0IHRvIHRoZSBWTEFOXG4mIzQzOyAqXHRcdFx0ZGV2aWNlIGRpcmVjdGx5LlxuJiM0MzsgKlx0XHQqKkJQRl9GSUJfTE9PS1VQX1ZMQU5fSU5QVVQqKlxuJiM0MzsgKlx0XHRcdFRyZWF0ICpwYXJhbXMqLVx1MDAzZWhfdmxhbl9wcm90byBhbmQgKnBhcmFtcyotXHUwMDNlaF92bGFuX1RDSVxuJiM0MzsgKlx0XHRcdGFzIGFuIGlucHV0IFZMQU4gdGFnIGFuZCBydW4gdGhlIGxvb2t1cCBhcyBpZiBpbmdyZXNzXG4mIzQzOyAqXHRcdFx0aGFkIGhhcHBlbmVkIG9uIHRoZSBWTEFOIHN1YmludGVyZmFjZSBjYXJyeWluZyB0aGF0IHRhZ1xuJiM0MzsgKlx0XHRcdG9uICpwYXJhbXMqLVx1MDAzZWlmaW5kZXguIFRoZSBWSUQgaXMgdGhlIGxvdyAxMiBiaXRzIG9mXG4mIzQzOyAqXHRcdFx0KnBhcmFtcyotXHUwMDNlaF92bGFuX1RDSTsgKnBhcmFtcyotXHUwMDNlaF92bGFuX3Byb3RvIG11c3QgYmVcbiYjNDM7ICpcdFx0XHRFVEhfUF84MDIxUSBvciBFVEhfUF84MDIxQUQgaW4gbmV0d29yayBieXRlIG9yZGVyLCBlbHNlXG4mIzQzOyAqXHRcdFx0KiotRUlOVkFMKiouIElmICpwYXJhbXMqLVx1MDAzZWlmaW5kZXggaXMgaXRzZWxmIGEgVkxBTlxuJiM0MzsgKlx0XHRcdGRldmljZSwgaXRzIGlubmVyIChRaW5RKSBzdWJpbnRlcmZhY2UgaXMgbWF0Y2hlZDsgZm9yIGFcbiYjNDM7ICpcdFx0XHRib25kIG9yIHRlYW0sIHBhc3MgdGhlIG1hc3RlciYjMzk7cyBpZmluZGV4LiBBbiB1bm1hdGNoZWRcbiYjNDM7ICpcdFx0XHR0YWcsIGEgZG93biBkZXZpY2UsIG9yIG9uZSBpbiBhbm90aGVyIG5hbWVzcGFjZSByZXR1cm5zXG4mIzQzOyAqXHRcdFx0KipCUEZfRklCX0xLVVBfUkVUX05PVF9GV0RFRCoqLCBtaXJyb3JpbmcgcmVhbCBpbmdyZXNzLlxuJiM0MzsgKlx0XHRcdEEgVklEIG9mIDAgaXMgbG9va2VkIHVwIGxpdGVyYWxseSwgc28gZG8gbm90IHNldCB0aGlzXG4mIzQzOyAqXHRcdFx0ZmxhZyBmb3IgcHJpb3JpdHktdGFnZ2VkIGZyYW1lcy4gQ2Fubm90IGJlIGNvbWJpbmVkIHdpdGhcbiYjNDM7ICpcdFx0XHQqKkJQRl9GSUJfTE9PS1VQX1RCSUQqKiBvciAqKkJQRl9GSUJfTE9PS1VQX09VVFBVVCoqXG4mIzQzOyAqXHRcdFx0KHJldHVybnMgKiotRUlOVkFMKiopLlxuICAqXG4gICpcdFx0KmN0eCogaXMgZWl0aGVyICoqc3RydWN0IHhkcF9tZCoqIGZvciBYRFAgcHJvZ3JhbXMgb3JcbiAgKlx0XHQqKnN0cnVjdCBza19idWZmKiogdGMgY2xzX2FjdCBwcm9ncmFtcy5cbkBAIC03MzI3LDYgJiM0Mzs3MzY2LDggQEAgZW51bSB7XG4gXHRCUEZfRklCX0xPT0tVUF9UQklEICAgID0gKDFVIFx1MDAzY1x1MDAzYyAzKSxcbiBcdEJQRl9GSUJfTE9PS1VQX1NSQyAgICAgPSAoMVUgXHUwMDNjXHUwMDNjIDQpLFxuIFx0QlBGX0ZJQl9MT09LVVBfTUFSSyAgICA9ICgxVSBcdTAwM2NcdTAwM2MgNSksXG4mIzQzO1x0QlBGX0ZJQl9MT09LVVBfVkxBTiAgICA9ICgxVSBcdTAwM2NcdTAwM2MgNiksXG4mIzQzO1x0QlBGX0ZJQl9MT09LVVBfVkxBTl9JTlBVVCA9ICgxVSBcdTAwM2NcdTAwM2MgNyksXG4gfTtcbiBcbiBlbnVtIHtcbkBAIC03MzQwLDYgJiM0Mzs3MzgxLDcgQEAgZW51bSB7XG4gXHRCUEZfRklCX0xLVVBfUkVUX05PX05FSUdILCAgICAgLyogbm8gbmVpZ2hib3IgZW50cnkgZm9yIG5oICovXG4gXHRCUEZfRklCX0xLVVBfUkVUX0ZSQUdfTkVFREVELCAgLyogZnJhZ21lbnRhdGlvbiByZXF1aXJlZCB0byBmd2QgKi9cbiBcdEJQRl9GSUJfTEtVUF9SRVRfTk9fU1JDX0FERFIsICAvKiBmYWlsZWQgdG8gZGVyaXZlIElQIHNyYyBhZGRyICovXG4mIzQzO1x0QlBGX0ZJQl9MS1VQX1JFVF9WTEFOX0ZBSUxVUkUsIC8qIFZMQU4gZWdyZXNzLCBwYXJlbnQgdW5yZXNvbHZhYmxlICovXG4gfTtcbiBcbiBzdHJ1Y3QgYnBmX2ZpYl9sb29rdXAge1xuQEAgLTczOTMsNyAmIzQzOzc0MzUsMTMgQEAgc3RydWN0IGJwZl9maWJfbG9va3VwIHtcbiBcbiBcdHVuaW9uIHtcbiBcdFx0c3RydWN0IHtcbi1cdFx0XHQvKiBvdXRwdXQgKi9cbiYjNDM7XHRcdFx0LypcbiYjNDM7XHRcdFx0ICogb3V0cHV0IHdpdGggQlBGX0ZJQl9MT09LVVBfVkxBTjogc2V0IGZyb20gdGhlXG4mIzQzO1x0XHRcdCAqIHJlc29sdmVkIGVncmVzcyBWTEFOIGRldmljZSAoc2VlIHRoZSBmbGFnKTsgemVyb2VkXG4mIzQzO1x0XHRcdCAqIG9uIG90aGVyIHN1Y2Nlc3NmdWwgbG9va3Vwcy4gaW5wdXQgd2l0aFxuJiM0MztcdFx0XHQgKiBCUEZfRklCX0xPT0tVUF9WTEFOX0lOUFVUOiB0aGUgVkxBTiB0YWcgdG8gc2NvcGVcbiYjNDM7XHRcdFx0ICogdGhlIGxvb2t1cCBieS5cbiYjNDM7XHRcdFx0ICovXG4gXHRcdFx0X19iZTE2XHRoX3ZsYW5fcHJvdG87XG4gXHRcdFx0X19iZTE2XHRoX3ZsYW5fVENJO1xuIFx0XHR9O1xuZGlmZiAtLWdpdCBhL25ldC9jb3JlL2ZpbHRlci5jIGIvbmV0L2NvcmUvZmlsdGVyLmNcbmluZGV4IDJlOTZiNGI4NDdjZTEyLi4wZWEzNjJmYTQyODdlMyAxMDA2NDRcbi0tLSBhL25ldC9jb3JlL2ZpbHRlci5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvY29yZS9maWx0ZXIuY1xuQEAgLTYyMDEsMjEgJiM0Mzs2MjAxLDYwIEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3NrYl9nZXRfeGZybV9zdGF0ZV9wcm90byA9IHtcbiAjZW5kaWZcbiBcbiAjaWYgSVNfRU5BQkxFRChDT05GSUdfSU5FVCkgfHwgSVNfRU5BQkxFRChDT05GSUdfSVBWNilcbi1zdGF0aWMgaW50IGJwZl9maWJfc2V0X2Z3ZF9wYXJhbXMoc3RydWN0IGJwZl9maWJfbG9va3VwICpwYXJhbXMsIHUzMiBtdHUpXG4mIzQzO3N0YXRpYyBpbnQgYnBmX2ZpYl9zZXRfZndkX3BhcmFtcyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuJiM0MztcdFx0XHRcdCAgc3RydWN0IGJwZl9maWJfbG9va3VwICpwYXJhbXMsXG4mIzQzO1x0XHRcdFx0ICB1MzIgZmxhZ3MsIHUzMiBtdHUsIHUzMiBpbl9pZmluZGV4KVxuIHtcbiBcdHBhcmFtcy1cdTAwM2VoX3ZsYW5fVENJID0gMDtcbiBcdHBhcmFtcy1cdTAwM2VoX3ZsYW5fcHJvdG8gPSAwO1xuJiM0MztcbiYjNDM7I2lmIElTX0VOQUJMRUQoQ09ORklHX1ZMQU5fODAyMVEpXG4mIzQzO1x0aWYgKChmbGFncyBcdTAwMjYgQlBGX0ZJQl9MT09LVVBfVkxBTikgXHUwMDI2XHUwMDI2IGlzX3ZsYW5fZGV2KGRldikpIHtcbiYjNDM7XHRcdHN0cnVjdCBuZXRfZGV2aWNlICpyZWFsX2RldiA9IHZsYW5fZGV2X3ByaXYoZGV2KS1cdTAwM2VyZWFsX2RldjtcbiYjNDM7XG4mIzQzO1x0XHRpZiAoIWlzX3ZsYW5fZGV2KHJlYWxfZGV2KSBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdCAgICBuZXRfZXEoZGV2X25ldChyZWFsX2RldiksIGRldl9uZXQoZGV2KSkpIHtcbiYjNDM7XHRcdFx0cGFyYW1zLVx1MDAzZWhfdmxhbl9wcm90byA9IHZsYW5fZGV2X3ZsYW5fcHJvdG8oZGV2KTtcbiYjNDM7XHRcdFx0cGFyYW1zLVx1MDAzZWhfdmxhbl9UQ0kgPSBodG9ucyh2bGFuX2Rldl92bGFuX2lkKGRldikpO1xuJiM0MztcdFx0XHRwYXJhbXMtXHUwMDNlaWZpbmRleCA9IHJlYWxfZGV2LVx1MDAzZWlmaW5kZXg7XG4mIzQzO1x0XHR9IGVsc2Uge1xuJiM0MztcdFx0XHRwYXJhbXMtXHUwMDNlaWZpbmRleCA9IGluX2lmaW5kZXg7XG4mIzQzO1x0XHRcdHJldHVybiBCUEZfRklCX0xLVVBfUkVUX1ZMQU5fRkFJTFVSRTtcbiYjNDM7XHRcdH1cbiYjNDM7XHR9XG4mIzQzOyNlbmRpZlxuJiM0MztcbiBcdGlmIChtdHUpXG4gXHRcdHBhcmFtcy1cdTAwM2VtdHVfcmVzdWx0ID0gbXR1OyAvKiB1bmlvbiB3aXRoIHRvdF9sZW4gKi9cbiBcbiBcdHJldHVybiAwO1xuIH1cbiYjNDM7XG4mIzQzO3N0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZSAqYnBmX2ZpYl92bGFuX2lucHV0X2RldihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuJiM0MztcdFx0XHRcdFx0XHQgY29uc3Qgc3RydWN0IGJwZl9maWJfbG9va3VwICpwYXJhbXMpXG4mIzQzO3tcbiYjNDM7XHRfX2JlMTYgcHJvdG8gPSBwYXJhbXMtXHUwMDNlaF92bGFuX3Byb3RvO1xuJiM0MztcdHN0cnVjdCBuZXRfZGV2aWNlICp2bGFuX2RldjtcbiYjNDM7XHR1MTYgdmlkO1xuJiM0MztcbiYjNDM7XHRpZiAocHJvdG8gIT0gaHRvbnMoRVRIX1BfODAyMVEpIFx1MDAyNlx1MDAyNiBwcm90byAhPSBodG9ucyhFVEhfUF84MDIxQUQpKVxuJiM0MztcdFx0cmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7XG4mIzQzO1xuJiM0MztcdHZpZCA9IG50b2hzKHBhcmFtcy1cdTAwM2VoX3ZsYW5fVENJKSBcdTAwMjYgVkxBTl9WSURfTUFTSztcbiYjNDM7XHR2bGFuX2RldiA9IF9fdmxhbl9maW5kX2Rldl9kZWVwX3JjdShkZXYsIHByb3RvLCB2aWQpO1xuJiM0MztcdGlmICghdmxhbl9kZXYgfHwgISh2bGFuX2Rldi1cdTAwM2VmbGFncyBcdTAwMjYgSUZGX1VQKSB8fFxuJiM0MztcdCAgICAhbmV0X2VxKGRldl9uZXQodmxhbl9kZXYpLCBkZXZfbmV0KGRldikpKVxuJiM0MztcdFx0cmV0dXJuIE5VTEw7XG4mIzQzO1xuJiM0MztcdHJldHVybiB2bGFuX2RldjtcbiYjNDM7fVxuICNlbmRpZlxuIFxuICNpZiBJU19FTkFCTEVEKENPTkZJR19JTkVUKVxuIHN0YXRpYyBpbnQgYnBmX2lwdjRfZmliX2xvb2t1cChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBicGZfZmliX2xvb2t1cCAqcGFyYW1zLFxuIFx0XHRcdCAgICAgICB1MzIgZmxhZ3MsIGJvb2wgY2hlY2tfbXR1KVxuIHtcbiYjNDM7XHR1MzIgaW5faWZpbmRleCA9IHBhcmFtcy1cdTAwM2VpZmluZGV4O1xuIFx0c3RydWN0IG5laWdoYm91ciAqbmVpZ2ggPSBOVUxMO1xuIFx0c3RydWN0IGZpYl9uaF9jb21tb24gKm5oYztcbiBcdHN0cnVjdCBpbl9kZXZpY2UgKmluX2RldjtcbkBAIC02MjI5LDYgJiM0Mzs2MjY4LDE0IEBAIHN0YXRpYyBpbnQgYnBmX2lwdjRfZmliX2xvb2t1cChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBicGZfZmliX2xvb2t1cCAqcGFyYW1zLFxuIFx0aWYgKHVubGlrZWx5KCFkZXYpKVxuIFx0XHRyZXR1cm4gLUVOT0RFVjtcbiBcbiYjNDM7XHRpZiAoZmxhZ3MgXHUwMDI2IEJQRl9GSUJfTE9PS1VQX1ZMQU5fSU5QVVQpIHtcbiYjNDM7XHRcdGRldiA9IGJwZl9maWJfdmxhbl9pbnB1dF9kZXYoZGV2LCBwYXJhbXMpO1xuJiM0MztcdFx0aWYgKElTX0VSUihkZXYpKVxuJiM0MztcdFx0XHRyZXR1cm4gUFRSX0VSUihkZXYpO1xuJiM0MztcdFx0aWYgKCFkZXYpXG4mIzQzO1x0XHRcdHJldHVybiBCUEZfRklCX0xLVVBfUkVUX05PVF9GV0RFRDtcbiYjNDM7XHR9XG4mIzQzO1xuIFx0LyogdmVyaWZ5IGZvcndhcmRpbmcgaXMgZW5hYmxlZCBvbiB0aGlzIGludGVyZmFjZSAqL1xuIFx0aW5fZGV2ID0gX19pbl9kZXZfZ2V0X3JjdShkZXYpO1xuIFx0aWYgKHVubGlrZWx5KCFpbl9kZXYgfHwgIUlOX0RFVl9GT1JXQVJEKGluX2RldikpKVxuQEAgLTYyMzgsNyAmIzQzOzYyODUsMTEgQEAgc3RhdGljIGludCBicGZfaXB2NF9maWJfbG9va3VwKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGJwZl9maWJfbG9va3VwICpwYXJhbXMsXG4gXHRcdGZsNC5mbG93aTRfaWlmID0gMTtcbiBcdFx0Zmw0LmZsb3dpNF9vaWYgPSBwYXJhbXMtXHUwMDNlaWZpbmRleDtcbiBcdH0gZWxzZSB7XG4tXHRcdGZsNC5mbG93aTRfaWlmID0gcGFyYW1zLVx1MDAzZWlmaW5kZXg7XG4mIzQzO1x0XHQvKlxuJiM0MztcdFx0ICogZGV2LVx1MDAzZWlmaW5kZXgsIG5vdCBwYXJhbXMtXHUwMDNlaWZpbmRleDogVkxBTl9JTlBVVCBtYXkgaGF2ZVxuJiM0MztcdFx0ICogcmVzb2x2ZWQgZGV2IHRvIGEgc3ViaW50ZXJmYWNlIGFib3ZlLlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRmbDQuZmxvd2k0X2lpZiA9IGRldi1cdTAwM2VpZmluZGV4O1xuIFx0XHRmbDQuZmxvd2k0X29pZiA9IDA7XG4gXHR9XG4gXHRmbDQuZmxvd2k0X2RzY3AgPSBpbmV0X2RzZmllbGRfdG9fZHNjcChwYXJhbXMtXHUwMDNldG9zKTtcbkBAIC02MzQ3LDcgJiM0Mzs2Mzk4LDcgQEAgc3RhdGljIGludCBicGZfaXB2NF9maWJfbG9va3VwKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGJwZl9maWJfbG9va3VwICpwYXJhbXMsXG4gXHRtZW1jcHkocGFyYW1zLVx1MDAzZXNtYWMsIGRldi1cdTAwM2VkZXZfYWRkciwgRVRIX0FMRU4pO1xuIFxuIHNldF9md2RfcGFyYW1zOlxuLVx0cmV0dXJuIGJwZl9maWJfc2V0X2Z3ZF9wYXJhbXMocGFyYW1zLCBtdHUpO1xuJiM0MztcdHJldHVybiBicGZfZmliX3NldF9md2RfcGFyYW1zKGRldiwgcGFyYW1zLCBmbGFncywgbXR1LCBpbl9pZmluZGV4KTtcbiB9XG4gI2VuZGlmXG4gXG5AQCAtNjM1Nyw2ICYjNDM7NjQwOCw3IEBAIHN0YXRpYyBpbnQgYnBmX2lwdjZfZmliX2xvb2t1cChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBicGZfZmliX2xvb2t1cCAqcGFyYW1zLFxuIHtcbiBcdHN0cnVjdCBpbjZfYWRkciAqc3JjID0gKHN0cnVjdCBpbjZfYWRkciAqKSBwYXJhbXMtXHUwMDNlaXB2Nl9zcmM7XG4gXHRzdHJ1Y3QgaW42X2FkZHIgKmRzdCA9IChzdHJ1Y3QgaW42X2FkZHIgKikgcGFyYW1zLVx1MDAzZWlwdjZfZHN0O1xuJiM0MztcdHUzMiBpbl9pZmluZGV4ID0gcGFyYW1zLVx1MDAzZWlmaW5kZXg7XG4gXHRzdHJ1Y3QgZmliNl9yZXN1bHQgcmVzID0ge307XG4gXHRzdHJ1Y3QgbmVpZ2hib3VyICpuZWlnaDtcbiBcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXY7XG5AQCAtNjM3NCw2ICYjNDM7NjQyNiwxNCBAQCBzdGF0aWMgaW50IGJwZl9pcHY2X2ZpYl9sb29rdXAoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgYnBmX2ZpYl9sb29rdXAgKnBhcmFtcyxcbiBcdGlmICh1bmxpa2VseSghZGV2KSlcbiBcdFx0cmV0dXJuIC1FTk9ERVY7XG4gXG4mIzQzO1x0aWYgKGZsYWdzIFx1MDAyNiBCUEZfRklCX0xPT0tVUF9WTEFOX0lOUFVUKSB7XG4mIzQzO1x0XHRkZXYgPSBicGZfZmliX3ZsYW5faW5wdXRfZGV2KGRldiwgcGFyYW1zKTtcbiYjNDM7XHRcdGlmIChJU19FUlIoZGV2KSlcbiYjNDM7XHRcdFx0cmV0dXJuIFBUUl9FUlIoZGV2KTtcbiYjNDM7XHRcdGlmICghZGV2KVxuJiM0MztcdFx0XHRyZXR1cm4gQlBGX0ZJQl9MS1VQX1JFVF9OT1RfRldERUQ7XG4mIzQzO1x0fVxuJiM0MztcbiBcdGlkZXYgPSBfX2luNl9kZXZfZ2V0X3NhZmVseShkZXYpO1xuIFx0aWYgKHVubGlrZWx5KCFpZGV2IHx8ICFSRUFEX09OQ0UoaWRldi1cdTAwM2VjbmYuZm9yd2FyZGluZykpKVxuIFx0XHRyZXR1cm4gQlBGX0ZJQl9MS1VQX1JFVF9GV0RfRElTQUJMRUQ7XG5AQCAtNjM4Miw3ICYjNDM7NjQ0MiwxMiBAQCBzdGF0aWMgaW50IGJwZl9pcHY2X2ZpYl9sb29rdXAoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgYnBmX2ZpYl9sb29rdXAgKnBhcmFtcyxcbiBcdFx0Zmw2LmZsb3dpNl9paWYgPSAxO1xuIFx0XHRvaWYgPSBmbDYuZmxvd2k2X29pZiA9IHBhcmFtcy1cdTAwM2VpZmluZGV4O1xuIFx0fSBlbHNlIHtcbi1cdFx0b2lmID0gZmw2LmZsb3dpNl9paWYgPSBwYXJhbXMtXHUwMDNlaWZpbmRleDtcbiYjNDM7XHRcdC8qXG4mIzQzO1x0XHQgKiBkZXYtXHUwMDNlaWZpbmRleCwgbm90IHBhcmFtcy1cdTAwM2VpZmluZGV4OiBWTEFOX0lOUFVUIG1heSBoYXZlXG4mIzQzO1x0XHQgKiByZXNvbHZlZCBkZXYgdG8gYSBzdWJpbnRlcmZhY2UgYWJvdmUuXG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdG9pZiA9IGRldi1cdTAwM2VpZmluZGV4O1xuJiM0MztcdFx0Zmw2LmZsb3dpNl9paWYgPSBvaWY7XG4gXHRcdGZsNi5mbG93aTZfb2lmID0gMDtcbiBcdFx0c3RyaWN0ID0gUlQ2X0xPT0tVUF9GX0hBU19TQUREUjtcbiBcdH1cbkBAIC02NDg2LDEzICYjNDM7NjU1MSwyNiBAQCBzdGF0aWMgaW50IGJwZl9pcHY2X2ZpYl9sb29rdXAoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgYnBmX2ZpYl9sb29rdXAgKnBhcmFtcyxcbiBcdG1lbWNweShwYXJhbXMtXHUwMDNlc21hYywgZGV2LVx1MDAzZWRldl9hZGRyLCBFVEhfQUxFTik7XG4gXG4gc2V0X2Z3ZF9wYXJhbXM6XG4tXHRyZXR1cm4gYnBmX2ZpYl9zZXRfZndkX3BhcmFtcyhwYXJhbXMsIG10dSk7XG4mIzQzO1x0cmV0dXJuIGJwZl9maWJfc2V0X2Z3ZF9wYXJhbXMoZGV2LCBwYXJhbXMsIGZsYWdzLCBtdHUsIGluX2lmaW5kZXgpO1xuIH1cbiAjZW5kaWZcbiBcbiAjZGVmaW5lIEJQRl9GSUJfTE9PS1VQX01BU0sgKEJQRl9GSUJfTE9PS1VQX0RJUkVDVCB8IEJQRl9GSUJfTE9PS1VQX09VVFBVVCB8IFxcXG4gXHRcdFx0ICAgICBCUEZfRklCX0xPT0tVUF9TS0lQX05FSUdIIHwgQlBGX0ZJQl9MT09LVVBfVEJJRCB8IFxcXG4tXHRcdFx0ICAgICBCUEZfRklCX0xPT0tVUF9TUkMgfCBCUEZfRklCX0xPT0tVUF9NQVJLKVxuJiM0MztcdFx0XHQgICAgIEJQRl9GSUJfTE9PS1VQX1NSQyB8IEJQRl9GSUJfTE9PS1VQX01BUksgfCBcXFxuJiM0MztcdFx0XHQgICAgIEJQRl9GSUJfTE9PS1VQX1ZMQU4gfCBCUEZfRklCX0xPT0tVUF9WTEFOX0lOUFVUKVxuJiM0MztcbiYjNDM7c3RhdGljIGJvb2wgYnBmX2ZpYl9sb29rdXBfZmxhZ3Nfb2sodTMyIGZsYWdzKVxuJiM0Mzt7XG4mIzQzO1x0aWYgKGZsYWdzIFx1MDAyNiB+QlBGX0ZJQl9MT09LVVBfTUFTSylcbiYjNDM7XHRcdHJldHVybiBmYWxzZTtcbiYjNDM7XG4mIzQzO1x0aWYgKChmbGFncyBcdTAwMjYgQlBGX0ZJQl9MT09LVVBfVkxBTl9JTlBVVCkgXHUwMDI2XHUwMDI2XG4mIzQzO1x0ICAgIChmbGFncyBcdTAwMjYgKEJQRl9GSUJfTE9PS1VQX1RCSUQgfCBCUEZfRklCX0xPT0tVUF9PVVRQVVQpKSlcbiYjNDM7XHRcdHJldHVybiBmYWxzZTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHRydWU7XG4mIzQzO31cbiBcbiBCUEZfQ0FMTF80KGJwZl94ZHBfZmliX2xvb2t1cCwgc3RydWN0IHhkcF9idWZmICosIGN0eCxcbiBcdCAgIHN0cnVjdCBicGZfZmliX2xvb2t1cCAqLCBwYXJhbXMsIGludCwgcGxlbiwgdTMyLCBmbGFncylcbkBAIC02NTAwLDcgJiM0Mzs2NTc4LDcgQEAgQlBGX0NBTExfNChicGZfeGRwX2ZpYl9sb29rdXAsIHN0cnVjdCB4ZHBfYnVmZiAqLCBjdHgsXG4gXHRpZiAocGxlbiBcdTAwM2Mgc2l6ZW9mKCpwYXJhbXMpKVxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcbi1cdGlmIChmbGFncyBcdTAwMjYgfkJQRl9GSUJfTE9PS1VQX01BU0spXG4mIzQzO1x0aWYgKCFicGZfZmliX2xvb2t1cF9mbGFnc19vayhmbGFncykpXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFxuIFx0c3dpdGNoIChwYXJhbXMtXHUwMDNlZmFtaWx5KSB7XG5AQCAtNjUzOCw3ICYjNDM7NjYxNiwxMCBAQCBCUEZfQ0FMTF80KGJwZl9za2JfZmliX2xvb2t1cCwgc3RydWN0IHNrX2J1ZmYgKiwgc2tiLFxuIFx0aWYgKHBsZW4gXHUwMDNjIHNpemVvZigqcGFyYW1zKSlcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXG4tXHRpZiAoZmxhZ3MgXHUwMDI2IH5CUEZfRklCX0xPT0tVUF9NQVNLKVxuJiM0MztcdGlmICghYnBmX2ZpYl9sb29rdXBfZmxhZ3Nfb2soZmxhZ3MpKVxuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1xuJiM0MztcdGlmIChmbGFncyBcdTAwMjYgQlBGX0ZJQl9MT09LVVBfVkxBTilcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXG4gXHRpZiAocGFyYW1zLVx1MDAzZXRvdF9sZW4pXG5kaWZmIC0tZ2l0IGEvdG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oIGIvdG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oXG5pbmRleCA4OWIzNmRlNWZkYmI2ZC4uZDQyMTg5NTRjNTBmNTMgMTAwNjQ0XG4tLS0gYS90b29scy9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmhcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaFxuQEAgLTM1MzIsNiAmIzQzOzM1MzIsNDUgQEAgdW5pb24gYnBmX2F0dHIge1xuICAqXHRcdFx0VXNlIHRoZSBtYXJrIHByZXNlbnQgaW4gKnBhcmFtcyotXHUwMDNlbWFyayBmb3IgdGhlIGZpYiBsb29rdXAuXG4gICpcdFx0XHRUaGlzIG9wdGlvbiBzaG91bGQgbm90IGJlIHVzZWQgd2l0aCBCUEZfRklCX0xPT0tVUF9ESVJFQ1QsXG4gICpcdFx0XHRhcyBpdCBvbmx5IGhhcyBtZWFuaW5nIGZvciBmdWxsIGxvb2t1cHMuXG4mIzQzOyAqXHRcdCoqQlBGX0ZJQl9MT09LVVBfVkxBTioqXG4mIzQzOyAqXHRcdFx0SWYgdGhlIGZpYiBsb29rdXAgcmVzb2x2ZXMgdG8gYSBWTEFOIGRldmljZSB3aG9zZVxuJiM0MzsgKlx0XHRcdHBhcmVudCBpcyBhIHJlYWwgKG5vbi1WTEFOKSBkZXZpY2UsIHNldFxuJiM0MzsgKlx0XHRcdCpwYXJhbXMqLVx1MDAzZWhfdmxhbl9wcm90byBhbmQgKnBhcmFtcyotXHUwMDNlaF92bGFuX1RDSSBmcm9tXG4mIzQzOyAqXHRcdFx0dGhlIFZMQU4gZGV2aWNlIGFuZCByZXBsYWNlICpwYXJhbXMqLVx1MDAzZWlmaW5kZXggd2l0aCB0aGVcbiYjNDM7ICpcdFx0XHRwYXJlbnQmIzM5O3MgaWZpbmRleC4gKnBhcmFtcyotXHUwMDNlaF92bGFuX1RDSSBjYXJyaWVzIHRoZSBWSURcbiYjNDM7ICpcdFx0XHRvbmx5LCB3aXRoIFBDUCBhbmQgREVJIGJpdHMgemVybzsgYSBjb25zdW1lciB3YW50aW5nIHRvXG4mIzQzOyAqXHRcdFx0c2V0IGVncmVzcyBwcmlvcml0eSB3cml0ZXMgUENQIGl0c2VsZi4gKnBhcmFtcyotXHUwMDNlc21hYyBpc1xuJiM0MzsgKlx0XHRcdHRoZSBWTEFOIGRldmljZSYjMzk7cyBvd24gYWRkcmVzcywgd2hpY2ggY2FuIGRpZmZlciBmcm9tIHRoZVxuJiM0MzsgKlx0XHRcdHBhcmVudCYjMzk7cy4gT25seSB0aGUgaW1tZWRpYXRlIHBhcmVudCBpcyByZXNvbHZlZDsgaWYgaXRcbiYjNDM7ICpcdFx0XHRpcyBpdHNlbGYgYSBWTEFOIGRldmljZSAoUWluUSkgb3IgaW4gYW5vdGhlciBuYW1lc3BhY2UsXG4mIzQzOyAqXHRcdFx0dGhlIGVncmVzcyBjYW5ub3QgYmUgcmVkdWNlZCB0byBhIHBoeXNpY2FsIGRldmljZSBwbHVzXG4mIzQzOyAqXHRcdFx0b25lIHRhZyBhbmQgdGhlIGxvb2t1cCByZXR1cm5zXG4mIzQzOyAqXHRcdFx0KipCUEZfRklCX0xLVVBfUkVUX1ZMQU5fRkFJTFVSRSoqIHdpdGggKnBhcmFtcyotXHUwMDNlaWZpbmRleFxuJiM0MzsgKlx0XHRcdGxlZnQgYXQgdGhlIGlucHV0LiBSZS1pc3N1ZSB3aXRob3V0XG4mIzQzOyAqXHRcdFx0KipCUEZfRklCX0xPT0tVUF9WTEFOKiogdG8gb2J0YWluIHRoZSBWTEFOIGRldmljZSYjMzk7cyBvd25cbiYjNDM7ICpcdFx0XHRpZmluZGV4LiBUaGUgc3dhcCBhbmQgdGhlIHZsYW4gZmllbGRzXG4mIzQzOyAqXHRcdFx0YXJlIHdyaXR0ZW4gb25seSBvbiBzdWNjZXNzOyBvdGhlciBvdXRwdXQgZmllbGRzIGtlZXBcbiYjNDM7ICpcdFx0XHR0aGUgaGVscGVyJiMzOTtzIGV4aXN0aW5nIGJlaGF2aW91ciwgc28gYSBmcmFnLW5lZWRlZCByZXN1bHRcbiYjNDM7ICpcdFx0XHRzdGlsbCByZXBvcnRzIHRoZSByb3V0ZSBtdHUgaW4gKnBhcmFtcyotXHUwMDNlbXR1X3Jlc3VsdC5cbiYjNDM7ICpcdFx0XHRUaGlzIGZsYWcgaXMgb25seSB2YWxpZCBmb3IgWERQIHByb2dyYW1zOyB0YyBwcm9ncmFtc1xuJiM0MzsgKlx0XHRcdHJlY2VpdmUgLUVJTlZBTCBzaW5jZSB0aGV5IGNhbiByZWRpcmVjdCB0byB0aGUgVkxBTlxuJiM0MzsgKlx0XHRcdGRldmljZSBkaXJlY3RseS5cbiYjNDM7ICpcdFx0KipCUEZfRklCX0xPT0tVUF9WTEFOX0lOUFVUKipcbiYjNDM7ICpcdFx0XHRUcmVhdCAqcGFyYW1zKi1cdTAwM2VoX3ZsYW5fcHJvdG8gYW5kICpwYXJhbXMqLVx1MDAzZWhfdmxhbl9UQ0lcbiYjNDM7ICpcdFx0XHRhcyBhbiBpbnB1dCBWTEFOIHRhZyBhbmQgcnVuIHRoZSBsb29rdXAgYXMgaWYgaW5ncmVzc1xuJiM0MzsgKlx0XHRcdGhhZCBoYXBwZW5lZCBvbiB0aGUgVkxBTiBzdWJpbnRlcmZhY2UgY2FycnlpbmcgdGhhdCB0YWdcbiYjNDM7ICpcdFx0XHRvbiAqcGFyYW1zKi1cdTAwM2VpZmluZGV4LiBUaGUgVklEIGlzIHRoZSBsb3cgMTIgYml0cyBvZlxuJiM0MzsgKlx0XHRcdCpwYXJhbXMqLVx1MDAzZWhfdmxhbl9UQ0k7ICpwYXJhbXMqLVx1MDAzZWhfdmxhbl9wcm90byBtdXN0IGJlXG4mIzQzOyAqXHRcdFx0RVRIX1BfODAyMVEgb3IgRVRIX1BfODAyMUFEIGluIG5ldHdvcmsgYnl0ZSBvcmRlciwgZWxzZVxuJiM0MzsgKlx0XHRcdCoqLUVJTlZBTCoqLiBJZiAqcGFyYW1zKi1cdTAwM2VpZmluZGV4IGlzIGl0c2VsZiBhIFZMQU5cbiYjNDM7ICpcdFx0XHRkZXZpY2UsIGl0cyBpbm5lciAoUWluUSkgc3ViaW50ZXJmYWNlIGlzIG1hdGNoZWQ7IGZvciBhXG4mIzQzOyAqXHRcdFx0Ym9uZCBvciB0ZWFtLCBwYXNzIHRoZSBtYXN0ZXImIzM5O3MgaWZpbmRleC4gQW4gdW5tYXRjaGVkXG4mIzQzOyAqXHRcdFx0dGFnLCBhIGRvd24gZGV2aWNlLCBvciBvbmUgaW4gYW5vdGhlciBuYW1lc3BhY2UgcmV0dXJuc1xuJiM0MzsgKlx0XHRcdCoqQlBGX0ZJQl9MS1VQX1JFVF9OT1RfRldERUQqKiwgbWlycm9yaW5nIHJlYWwgaW5ncmVzcy5cbiYjNDM7ICpcdFx0XHRBIFZJRCBvZiAwIGlzIGxvb2tlZCB1cCBsaXRlcmFsbHksIHNvIGRvIG5vdCBzZXQgdGhpc1xuJiM0MzsgKlx0XHRcdGZsYWcgZm9yIHByaW9yaXR5LXRhZ2dlZCBmcmFtZXMuIENhbm5vdCBiZSBjb21iaW5lZCB3aXRoXG4mIzQzOyAqXHRcdFx0KipCUEZfRklCX0xPT0tVUF9UQklEKiogb3IgKipCUEZfRklCX0xPT0tVUF9PVVRQVVQqKlxuJiM0MzsgKlx0XHRcdChyZXR1cm5zICoqLUVJTlZBTCoqKS5cbiAgKlxuICAqXHRcdCpjdHgqIGlzIGVpdGhlciAqKnN0cnVjdCB4ZHBfbWQqKiBmb3IgWERQIHByb2dyYW1zIG9yXG4gICpcdFx0KipzdHJ1Y3Qgc2tfYnVmZioqIHRjIGNsc19hY3QgcHJvZ3JhbXMuXG5AQCAtNzMyNyw2ICYjNDM7NzM2Niw4IEBAIGVudW0ge1xuIFx0QlBGX0ZJQl9MT09LVVBfVEJJRCAgICA9ICgxVSBcdTAwM2NcdTAwM2MgMyksXG4gXHRCUEZfRklCX0xPT0tVUF9TUkMgICAgID0gKDFVIFx1MDAzY1x1MDAzYyA0KSxcbiBcdEJQRl9GSUJfTE9PS1VQX01BUksgICAgPSAoMVUgXHUwMDNjXHUwMDNjIDUpLFxuJiM0MztcdEJQRl9GSUJfTE9PS1VQX1ZMQU4gICAgPSAoMVUgXHUwMDNjXHUwMDNjIDYpLFxuJiM0MztcdEJQRl9GSUJfTE9PS1VQX1ZMQU5fSU5QVVQgPSAoMVUgXHUwMDNjXHUwMDNjIDcpLFxuIH07XG4gXG4gZW51bSB7XG5AQCAtNzM0MCw2ICYjNDM7NzM4MSw3IEBAIGVudW0ge1xuIFx0QlBGX0ZJQl9MS1VQX1JFVF9OT19ORUlHSCwgICAgIC8qIG5vIG5laWdoYm9yIGVudHJ5IGZvciBuaCAqL1xuIFx0QlBGX0ZJQl9MS1VQX1JFVF9GUkFHX05FRURFRCwgIC8qIGZyYWdtZW50YXRpb24gcmVxdWlyZWQgdG8gZndkICovXG4gXHRCUEZfRklCX0xLVVBfUkVUX05PX1NSQ19BRERSLCAgLyogZmFpbGVkIHRvIGRlcml2ZSBJUCBzcmMgYWRkciAqL1xuJiM0MztcdEJQRl9GSUJfTEtVUF9SRVRfVkxBTl9GQUlMVVJFLCAvKiBWTEFOIGVncmVzcywgcGFyZW50IHVucmVzb2x2YWJsZSAqL1xuIH07XG4gXG4gc3RydWN0IGJwZl9maWJfbG9va3VwIHtcbkBAIC03MzkzLDcgJiM0Mzs3NDM1LDEzIEBAIHN0cnVjdCBicGZfZmliX2xvb2t1cCB7XG4gXG4gXHR1bmlvbiB7XG4gXHRcdHN0cnVjdCB7XG4tXHRcdFx0Lyogb3V0cHV0ICovXG4mIzQzO1x0XHRcdC8qXG4mIzQzO1x0XHRcdCAqIG91dHB1dCB3aXRoIEJQRl9GSUJfTE9PS1VQX1ZMQU46IHNldCBmcm9tIHRoZVxuJiM0MztcdFx0XHQgKiByZXNvbHZlZCBlZ3Jlc3MgVkxBTiBkZXZpY2UgKHNlZSB0aGUgZmxhZyk7IHplcm9lZFxuJiM0MztcdFx0XHQgKiBvbiBvdGhlciBzdWNjZXNzZnVsIGxvb2t1cHMuIGlucHV0IHdpdGhcbiYjNDM7XHRcdFx0ICogQlBGX0ZJQl9MT09LVVBfVkxBTl9JTlBVVDogdGhlIFZMQU4gdGFnIHRvIHNjb3BlXG4mIzQzO1x0XHRcdCAqIHRoZSBsb29rdXAgYnkuXG4mIzQzO1x0XHRcdCAqL1xuIFx0XHRcdF9fYmUxNlx0aF92bGFuX3Byb3RvO1xuIFx0XHRcdF9fYmUxNlx0aF92bGFuX1RDSTtcbiBcdFx0fTtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9maWJfbG9va3VwLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9maWJfbG9va3VwLmNcbmluZGV4IGJkNzY1ODk1ODAwNDFmLi44Y2FlZDlkNDNiOTgxMSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2ZpYl9sb29rdXAuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvZmliX2xvb2t1cC5jXG5AQCAtMiw2ICYjNDM7Miw3IEBAXG4gLyogQ29weXJpZ2h0IChjKSAyMDIzIE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLiAqL1xuIFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3J0bmV0bGluay5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2lmX2V0aGVyLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NzeXMvdHlwZXMuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY25ldC9pZi5oXHUwMDNlXG4gXG5AQCAtMjMsNiAmIzQzOzI0LDcgQEBcbiAjZGVmaW5lIElQVjRfVEJJRF9BRERSXHRcdFwmIzM0OzE3Mi4wLjAuMjU0XCYjMzQ7XG4gI2RlZmluZSBJUFY0X1RCSURfTkVUXHRcdFwmIzM0OzE3Mi4wLjAuMFwmIzM0O1xuICNkZWZpbmUgSVBWNF9UQklEX0RTVFx0XHRcJiMzNDsxNzIuMC4wLjJcJiMzNDtcbiYjNDM7I2RlZmluZSBJUFY0X1RCSURfTk9ORUlHSF9EU1RcdFwmIzM0OzE3Mi4wLjAuNVwmIzM0O1xuICNkZWZpbmUgSVBWNl9UQklEX0FERFJcdFx0XCYjMzQ7ZmQwMDo6RkZGRlwmIzM0O1xuICNkZWZpbmUgSVBWNl9UQklEX05FVFx0XHRcJiMzNDtmZDAwOjpcJiMzNDtcbiAjZGVmaW5lIElQVjZfVEJJRF9EU1RcdFx0XCYjMzQ7ZmQwMDo6MlwmIzM0O1xuQEAgLTM3LDYgJiM0MzszOSw0MSBAQFxuICNkZWZpbmUgSVBWNl9MT0NBTFx0XHRcJiMzNDtmZDAxOjozXCYjMzQ7XG4gI2RlZmluZSBJUFY2X0dXMVx0XHRcJiMzNDtmZDAxOjoxXCYjMzQ7XG4gI2RlZmluZSBJUFY2X0dXMlx0XHRcJiMzNDtmZDAxOjoyXCYjMzQ7XG4mIzQzOyNkZWZpbmUgVkxBTl9JRFx0XHRcdDEwMFxuJiM0MzsjZGVmaW5lIFZMQU5fSUZBQ0VcdFx0XCYjMzQ7dmV0aDEuMTAwXCYjMzQ7XG4mIzQzOyNkZWZpbmUgVkxBTl9JRF9ET1dOXHRcdDEwMlxuJiM0MzsjZGVmaW5lIFZMQU5fSUZBQ0VfRE9XTlx0XHRcJiMzNDt2ZXRoMS4xMDJcJiMzNDtcbiYjNDM7I2RlZmluZSBRSU5RX09VVEVSX0lGQUNFXHRcJiMzNDt2ZXRoMS4yMDBcJiMzNDtcbiYjNDM7I2RlZmluZSBRSU5RX0lOTkVSX0lGQUNFXHRcJiMzNDt2ZXRoMS4yMDAuMzAwXCYjMzQ7XG4mIzQzOyNkZWZpbmUgVkxBTl9UQUJMRVx0XHRcJiMzNDszMDBcJiMzNDtcbiYjNDM7I2RlZmluZSBJUFY0X1ZMQU5fSUZBQ0VfQUREUlx0XCYjMzQ7MTAuNS4wLjI1NFwmIzM0O1xuJiM0MzsjZGVmaW5lIElQVjRfVkxBTl9FR1JFU1NfRFNUXHRcJiMzNDsxMC41LjAuMlwmIzM0O1xuJiM0MzsjZGVmaW5lIElQVjRfUUlOUV9EU1RcdFx0XCYjMzQ7MTAuNy4wLjJcJiMzNDtcbiYjNDM7I2RlZmluZSBJUFY0X1ZMQU5fRFNUXHRcdFwmIzM0OzEwLjYuMC4yXCYjMzQ7XG4mIzQzOyNkZWZpbmUgSVBWNF9WTEFOX0dXXHRcdFwmIzM0OzEwLjUuMC4xXCYjMzQ7XG4mIzQzOyNkZWZpbmUgSVBWNl9WTEFOX0lGQUNFX0FERFJcdFwmIzM0O2ZkMDI6OjI1NFwmIzM0O1xuJiM0MzsjZGVmaW5lIElQVjZfVkxBTl9FR1JFU1NfRFNUXHRcJiMzNDtmZDAyOjoyXCYjMzQ7XG4mIzQzOyNkZWZpbmUgSVBWNl9WTEFOX0RTVFx0XHRcJiMzNDtmZDAzOjoyXCYjMzQ7XG4mIzQzOyNkZWZpbmUgSVBWNl9WTEFOX0dXXHRcdFwmIzM0O2ZkMDI6OjFcJiMzNDtcbiYjNDM7I2RlZmluZSBWTEFOX1ZJRF9VTlVTRURcdFx0OTk5XG4mIzQzOyNkZWZpbmUgVlJGX0lGQUNFXHRcdFwmIzM0O3ZyZi1ibHVlXCYjMzQ7XG4mIzQzOyNkZWZpbmUgVlJGX1RBQkxFXHRcdFwmIzM0OzEwMDBcJiMzNDtcbiYjNDM7I2RlZmluZSBWUkZfVkxBTl9JRFx0XHQxMDFcbiYjNDM7I2RlZmluZSBWUkZfVkxBTl9JRkFDRVx0XHRcJiMzNDt2ZXRoMS4xMDFcJiMzNDtcbiYjNDM7I2RlZmluZSBJUFY0X1ZSRl9JRkFDRV9BRERSXHRcJiMzNDsxMC44LjAuMjU0XCYjMzQ7XG4mIzQzOyNkZWZpbmUgSVBWNF9WUkZfR1dcdFx0XCYjMzQ7MTAuOC4wLjFcJiMzNDtcbiYjNDM7I2RlZmluZSBJUFY0X1ZSRl9EU1RcdFx0XCYjMzQ7MTAuOS4wLjJcJiMzNDtcbiYjNDM7I2RlZmluZSBUQklEX1ZMQU5fSURcdFx0NTBcbiYjNDM7I2RlZmluZSBUQklEX1ZMQU5fSUZBQ0VcdFx0XCYjMzQ7dmV0aDIuNTBcJiMzNDtcbiYjNDM7I2RlZmluZSBJUFY0X1RCSURfVkxBTl9EU1RcdFwmIzM0OzE3Mi4yLjAuMlwmIzM0O1xuJiM0MzsjZGVmaW5lIElQVjRfQk9ORF9WTEFOX0RTVFx0XCYjMzQ7MTAuMTEuMC4yXCYjMzQ7XG4mIzQzOyNkZWZpbmUgSVBWNF9WTEFOX01UVV9EU1RcdFwmIzM0OzEwLjUuOS4yXCYjMzQ7XG4mIzQzOyNkZWZpbmUgUUlOUV9BRF9WTEFOX0lEXHRcdDIwMFxuJiM0MzsjZGVmaW5lIFFJTlFfSU5ORVJfVkxBTl9JRFx0MzAwXG4mIzQzOyNkZWZpbmUgQk9ORF9JRkFDRVx0XHRcJiMzNDtib25kOTlcJiMzNDtcbiYjNDM7I2RlZmluZSBCT05EX1BPUlRcdFx0XCYjMzQ7dmV0aDNcJiMzNDtcbiYjNDM7I2RlZmluZSBCT05EX1BPUlRfUEVFUlx0XHRcJiMzNDt2ZXRoNFwmIzM0O1xuJiM0MzsjZGVmaW5lIEJPTkRfVkxBTl9JRFx0XHQ1MDBcbiAjZGVmaW5lIERNQUNcdFx0XHRcJiMzNDsxMToxMToxMToxMToxMToxMVwmIzM0O1xuICNkZWZpbmUgRE1BQ19JTklUIHsgMHgxMSwgMHgxMSwgMHgxMSwgMHgxMSwgMHgxMSwgMHgxMSwgfVxuICNkZWZpbmUgRE1BQzJcdFx0XHRcJiMzNDswMTowMTowMTowMTowMTowMVwmIzM0O1xuQEAgLTUyLDYgJiM0Mzs4OSwxNyBAQCBzdHJ1Y3QgZmliX2xvb2t1cF90ZXN0IHtcbiBcdF9fdTMyIHRiaWQ7XG4gXHRfX3U4IGRtYWNbNl07XG4gXHRfX3UzMiBtYXJrO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogaW5wdXQgdGFnIHdpdGggQlBGX0ZJQl9MT09LVVBfVkxBTl9JTlBVVDsgZXhwZWN0ZWQgb3V0cHV0IHRhZ1xuJiM0MztcdCAqIHdpdGggQlBGX0ZJQl9MT09LVVBfVkxBTiAoY2hlY2tlZCB3aGVuIGNoZWNrX3ZsYW4gaXMgc2V0KVxuJiM0MztcdCAqL1xuJiM0MztcdF9fdTE2IHZsYW5fcHJvdG87XG4mIzQzO1x0X191MTYgdmxhbl9pZDtcbiYjNDM7XHRib29sIGNoZWNrX3ZsYW47XG4mIzQzO1x0Y29uc3QgY2hhciAqZXhwZWN0ZWRfZGV2OyAvKiBleHBlY3RlZCBwYXJhbXMtXHUwMDNlaWZpbmRleCBhZnRlciBsb29rdXAgKi9cbiYjNDM7XHRjb25zdCBjaGFyICppaWY7XHQgIC8qIG92ZXJyaWRlIHRoZSBkZWZhdWx0IHZldGgxIGlucHV0IGRldmljZSAqL1xuJiM0MztcdF9fdTE2IHRvdF9sZW47XHRcdCAgLyogdHJpZ2dlcnMgdGhlIGluLWxvb2t1cCBtdHUgY2hlY2sgd2hlbiBzZXQgKi9cbiYjNDM7XHRfX3UxNiBleHBlY3RlZF9tdHU7XHQgIC8qIGV4cGVjdGVkIG10dV9yZXN1bHQgKHVuaW9uIHdpdGggdG90X2xlbikgKi9cbiB9O1xuIFxuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZmliX2xvb2t1cF90ZXN0IHRlc3RzW10gPSB7XG5AQCAtNzksNiAmIzQzOzEyNywxNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGZpYl9sb29rdXBfdGVzdCB0ZXN0c1tdID0ge1xuIFx0ICAuZGFkZHIgPSBJUFY0X1RCSURfRFNULCAuZXhwZWN0ZWRfcmV0ID0gQlBGX0ZJQl9MS1VQX1JFVF9TVUNDRVNTLFxuIFx0ICAubG9va3VwX2ZsYWdzID0gQlBGX0ZJQl9MT09LVVBfRElSRUNUIHwgQlBGX0ZJQl9MT09LVVBfVEJJRCwgLnRiaWQgPSAxMDAsXG4gXHQgIC5kbWFjID0gRE1BQ19JTklUMiwgfSxcbiYjNDM7XHQvKlxuJiM0MztcdCAqIEFuIGVycm9yIHRoYXQgcmV0dXJucyBhZnRlciB0aGUgZWdyZXNzIGRldmljZSBpcyByZXNvbHZlZCBtdXN0XG4mIzQzO1x0ICogcmVwb3J0IHRoZSBlZ3Jlc3MgaWZpbmRleCwgbm90IHRoZSBpbnB1dC4gVGhpcyByb3V0ZXMgZnJvbSBpbnB1dFxuJiM0MztcdCAqIHZldGgxIHZpYSB2ZXRoMiAodGFibGUgMTAwKSB0byBhIGRzdCB3aXRoIG5vIG5laWdoYm91ciwgc29cbiYjNDM7XHQgKiBpbnB1dCAhPSBlZ3Jlc3MsIHBpbm5pbmcgTk9fTkVJR0ggdG8gdGhlIGVncmVzcyBkZXZpY2UuXG4mIzQzO1x0ICovXG4mIzQzO1x0eyAuZGVzYyA9IFwmIzM0O0lQdjQgTk9fTkVJR0ggcmVwb3J0cyB0aGUgZWdyZXNzIGlmaW5kZXgsIG5vdCB0aGUgaW5wdXRcJiMzNDssXG4mIzQzO1x0ICAuZGFkZHIgPSBJUFY0X1RCSURfTk9ORUlHSF9EU1QsXG4mIzQzO1x0ICAuZXhwZWN0ZWRfcmV0ID0gQlBGX0ZJQl9MS1VQX1JFVF9OT19ORUlHSCxcbiYjNDM7XHQgIC5sb29rdXBfZmxhZ3MgPSBCUEZfRklCX0xPT0tVUF9ESVJFQ1QgfCBCUEZfRklCX0xPT0tVUF9UQklELCAudGJpZCA9IDEwMCxcbiYjNDM7XHQgIC5leHBlY3RlZF9kZXYgPSBcJiMzNDt2ZXRoMlwmIzM0OywgfSxcbiBcdHsgLmRlc2MgPSBcJiMzNDtJUHY2IFRCSUQgbG9va3VwIGZhaWx1cmVcJiMzNDssXG4gXHQgIC5kYWRkciA9IElQVjZfVEJJRF9EU1QsIC5leHBlY3RlZF9yZXQgPSBCUEZfRklCX0xLVVBfUkVUX05PVF9GV0RFRCxcbiBcdCAgLmxvb2t1cF9mbGFncyA9IEJQRl9GSUJfTE9PS1VQX0RJUkVDVCB8IEJQRl9GSUJfTE9PS1VQX1RCSUQsXG5AQCAtMTQyLDYgJiM0MzsyMDEsMjE4IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZmliX2xvb2t1cF90ZXN0IHRlc3RzW10gPSB7XG4gXHQgIC5leHBlY3RlZF9kc3QgPSBJUFY2X0dXMSxcbiBcdCAgLmxvb2t1cF9mbGFncyA9IEJQRl9GSUJfTE9PS1VQX1NLSVBfTkVJR0gsXG4gXHQgIC5tYXJrID0gTUFSSywgfSxcbiYjNDM7XHQvKiB2bGFuIGVncmVzcyByZXNvbHV0aW9uICovXG4mIzQzO1x0LypcbiYjNDM7XHQgKiBJbnZhcmlhbnQgdGhlIFZMQU4tZWdyZXNzIGFybXMgam9pbnRseSBlbmZvcmNlOiBhXG4mIzQzO1x0ICogQlBGX0ZJQl9MT09LVVBfVkxBTiBTVUNDRVNTIGFsd2F5cyBjYXJyaWVzIGEgcGh5c2ljYWwsXG4mIzQzO1x0ICogeG1pdC1jYXBhYmxlIGlmaW5kZXggLS0gbm8gU1VDQ0VTUyBldmVyIHJldHVybnMgYSBWTEFOLWRldmljZVxuJiM0MztcdCAqIGlmaW5kZXguIFJlZHVjaWJsZSBhcm1zIHBpbiBpZmluZGV4ID09IHRoZSBwaHlzaWNhbCBwYXJlbnQ7IHRoZVxuJiM0MztcdCAqIFFpblEgYW5kIGZvcmVpZ24tbmV0bnMgYXJtcyBwaW4gVkxBTl9GQUlMVVJFIHdpdGggcGFyYW1zLVx1MDAzZWlmaW5kZXhcbiYjNDM7XHQgKiBsZWZ0IGF0IHRoZSBpbnB1dCwgc28gYSByZWdyZXNzaW9uIHRvIGJlc3QtZWZmb3J0IChTVUNDRVNTICYjNDM7IHRoZVxuJiM0MztcdCAqIFZMQU4gaWZpbmRleCkgZmFpbHMgb25lLlxuJiM0MztcdCAqL1xuJiM0MztcdHsgLmRlc2MgPSBcJiMzNDtJUHY0IFZMQU4gZWdyZXNzLCBubyBmbGFnXCYjMzQ7LFxuJiM0MztcdCAgLmRhZGRyID0gSVBWNF9WTEFOX0VHUkVTU19EU1QsIC5leHBlY3RlZF9yZXQgPSBCUEZfRklCX0xLVVBfUkVUX1NVQ0NFU1MsXG4mIzQzO1x0ICAubG9va3VwX2ZsYWdzID0gQlBGX0ZJQl9MT09LVVBfU0tJUF9ORUlHSCxcbiYjNDM7XHQgIC5leHBlY3RlZF9kZXYgPSBWTEFOX0lGQUNFLCAuY2hlY2tfdmxhbiA9IHRydWUsIH0sXG4mIzQzO1x0eyAuZGVzYyA9IFwmIzM0O0lQdjQgVkxBTiBlZ3Jlc3MsIHNpbmdsZSBWTEFOXCYjMzQ7LFxuJiM0MztcdCAgLmRhZGRyID0gSVBWNF9WTEFOX0VHUkVTU19EU1QsIC5leHBlY3RlZF9yZXQgPSBCUEZfRklCX0xLVVBfUkVUX1NVQ0NFU1MsXG4mIzQzO1x0ICAubG9va3VwX2ZsYWdzID0gQlBGX0ZJQl9MT09LVVBfVkxBTiB8IEJQRl9GSUJfTE9PS1VQX1NLSVBfTkVJR0gsXG4mIzQzO1x0ICAuZXhwZWN0ZWRfZGV2ID0gXCYjMzQ7dmV0aDFcJiMzNDssIC5jaGVja192bGFuID0gdHJ1ZSxcbiYjNDM7XHQgIC52bGFuX3Byb3RvID0gRVRIX1BfODAyMVEsIC52bGFuX2lkID0gVkxBTl9JRCwgfSxcbiYjNDM7XHQvKlxuJiM0MztcdCAqIHNrYiBwYXRoIHdpdGhvdXQgdG90X2xlbjogbXR1X3Jlc3VsdCBpcyB0aGUgVkxBTiBkZXZpY2UmIzM5O3MgbXR1XG4mIzQzO1x0ICogKDE0MDApLCBub3QgdGhlIHBhcmVudCYjMzk7cyAoMTUwMClcbiYjNDM7XHQgKi9cbiYjNDM7XHR7IC5kZXNjID0gXCYjMzQ7SVB2NCBWTEFOIGVncmVzcywgc2tiLXBhdGggbXR1IGlzIHRoZSBWTEFOIGRldmljZSYjMzk7cyB3aXRob3V0IHRoZSBmbGFnXCYjMzQ7LFxuJiM0MztcdCAgLmRhZGRyID0gSVBWNF9WTEFOX0VHUkVTU19EU1QsIC5leHBlY3RlZF9yZXQgPSBCUEZfRklCX0xLVVBfUkVUX1NVQ0NFU1MsXG4mIzQzO1x0ICAubG9va3VwX2ZsYWdzID0gQlBGX0ZJQl9MT09LVVBfU0tJUF9ORUlHSCxcbiYjNDM7XHQgIC5leHBlY3RlZF9kZXYgPSBWTEFOX0lGQUNFLCAuY2hlY2tfdmxhbiA9IHRydWUsIC5leHBlY3RlZF9tdHUgPSAxNDAwLCB9LFxuJiM0MztcdHsgLmRlc2MgPSBcJiMzNDtJUHY0IFZMQU4gZWdyZXNzLCBmbGFnIHNldCBidXQgZWdyZXNzIGlzIG5vdCBhIFZMQU5cJiMzNDssXG4mIzQzO1x0ICAuZGFkZHIgPSBJUFY0X05VRF9GQUlMRURfQUREUiwgLmV4cGVjdGVkX3JldCA9IEJQRl9GSUJfTEtVUF9SRVRfU1VDQ0VTUyxcbiYjNDM7XHQgIC5sb29rdXBfZmxhZ3MgPSBCUEZfRklCX0xPT0tVUF9WTEFOIHwgQlBGX0ZJQl9MT09LVVBfU0tJUF9ORUlHSCxcbiYjNDM7XHQgIC5leHBlY3RlZF9kZXYgPSBcJiMzNDt2ZXRoMVwmIzM0OywgLmNoZWNrX3ZsYW4gPSB0cnVlLCB9LFxuJiM0MztcdHsgLmRlc2MgPSBcJiMzNDtJUHY0IFZMQU4gZWdyZXNzLCBRaW5RIG5vdCByZWR1Y2libGUgKFZMQU5fRkFJTFVSRSlcJiMzNDssXG4mIzQzO1x0ICAuZGFkZHIgPSBJUFY0X1FJTlFfRFNULFxuJiM0MztcdCAgLmV4cGVjdGVkX3JldCA9IEJQRl9GSUJfTEtVUF9SRVRfVkxBTl9GQUlMVVJFLFxuJiM0MztcdCAgLmxvb2t1cF9mbGFncyA9IEJQRl9GSUJfTE9PS1VQX1ZMQU4gfCBCUEZfRklCX0xPT0tVUF9TS0lQX05FSUdILFxuJiM0MztcdCAgLmV4cGVjdGVkX2RldiA9IFwmIzM0O3ZldGgxXCYjMzQ7LCAuY2hlY2tfdmxhbiA9IHRydWUsIH0sXG4mIzQzO1x0eyAuZGVzYyA9IFwmIzM0O0lQdjQgUWluUSBlZ3Jlc3Mgd2l0aG91dCB0aGUgZmxhZyAoZXNjYXBlIGhhdGNoKVwmIzM0OyxcbiYjNDM7XHQgIC5kYWRkciA9IElQVjRfUUlOUV9EU1QsIC5leHBlY3RlZF9yZXQgPSBCUEZfRklCX0xLVVBfUkVUX1NVQ0NFU1MsXG4mIzQzO1x0ICAubG9va3VwX2ZsYWdzID0gQlBGX0ZJQl9MT09LVVBfU0tJUF9ORUlHSCxcbiYjNDM7XHQgIC5leHBlY3RlZF9kZXYgPSBRSU5RX0lOTkVSX0lGQUNFLCB9LFxuJiM0MztcdHsgLmRlc2MgPSBcJiMzNDtJUHY2IFZMQU4gZWdyZXNzLCBzaW5nbGUgVkxBTlwmIzM0OyxcbiYjNDM7XHQgIC5kYWRkciA9IElQVjZfVkxBTl9FR1JFU1NfRFNULCAuZXhwZWN0ZWRfcmV0ID0gQlBGX0ZJQl9MS1VQX1JFVF9TVUNDRVNTLFxuJiM0MztcdCAgLmxvb2t1cF9mbGFncyA9IEJQRl9GSUJfTE9PS1VQX1ZMQU4gfCBCUEZfRklCX0xPT0tVUF9TS0lQX05FSUdILFxuJiM0MztcdCAgLmV4cGVjdGVkX2RldiA9IFwmIzM0O3ZldGgxXCYjMzQ7LCAuY2hlY2tfdmxhbiA9IHRydWUsXG4mIzQzO1x0ICAudmxhbl9wcm90byA9IEVUSF9QXzgwMjFRLCAudmxhbl9pZCA9IFZMQU5fSUQsIH0sXG4mIzQzO1x0eyAuZGVzYyA9IFwmIzM0O0lQdjQgVkxBTiBlZ3Jlc3MsIG5laWdoYm91ciBvbiB0aGUgVkxBTiBkZXZpY2VcJiMzNDssXG4mIzQzO1x0ICAuZGFkZHIgPSBJUFY0X1ZMQU5fRUdSRVNTX0RTVCwgLmV4cGVjdGVkX3JldCA9IEJQRl9GSUJfTEtVUF9SRVRfU1VDQ0VTUyxcbiYjNDM7XHQgIC5sb29rdXBfZmxhZ3MgPSBCUEZfRklCX0xPT0tVUF9WTEFOLFxuJiM0MztcdCAgLmV4cGVjdGVkX2RldiA9IFwmIzM0O3ZldGgxXCYjMzQ7LCAuY2hlY2tfdmxhbiA9IHRydWUsXG4mIzQzO1x0ICAudmxhbl9wcm90byA9IEVUSF9QXzgwMjFRLCAudmxhbl9pZCA9IFZMQU5fSUQsIC5kbWFjID0gRE1BQ19JTklULCB9LFxuJiM0MztcdHsgLmRlc2MgPSBcJiMzNDtJUHY0IFZMQU4gZWdyZXNzIGluIE9VVFBVVCBtb2RlXCYjMzQ7LFxuJiM0MztcdCAgLmRhZGRyID0gSVBWNF9WTEFOX0VHUkVTU19EU1QsIC5leHBlY3RlZF9yZXQgPSBCUEZfRklCX0xLVVBfUkVUX1NVQ0NFU1MsXG4mIzQzO1x0ICAuaWlmID0gVkxBTl9JRkFDRSxcbiYjNDM7XHQgIC5sb29rdXBfZmxhZ3MgPSBCUEZfRklCX0xPT0tVUF9PVVRQVVQgfCBCUEZfRklCX0xPT0tVUF9WTEFOIHxcbiYjNDM7XHRcdFx0ICBCUEZfRklCX0xPT0tVUF9TS0lQX05FSUdILFxuJiM0MztcdCAgLmV4cGVjdGVkX2RldiA9IFwmIzM0O3ZldGgxXCYjMzQ7LCAuY2hlY2tfdmxhbiA9IHRydWUsXG4mIzQzO1x0ICAudmxhbl9wcm90byA9IEVUSF9QXzgwMjFRLCAudmxhbl9pZCA9IFZMQU5fSUQsIH0sXG4mIzQzO1x0eyAuZGVzYyA9IFwmIzM0O0lQdjQgVkxBTiBlZ3Jlc3Mgb3ZlciBhIGJvbmRcJiMzNDssXG4mIzQzO1x0ICAuZGFkZHIgPSBJUFY0X0JPTkRfVkxBTl9EU1QsIC5leHBlY3RlZF9yZXQgPSBCUEZfRklCX0xLVVBfUkVUX1NVQ0NFU1MsXG4mIzQzO1x0ICAubG9va3VwX2ZsYWdzID0gQlBGX0ZJQl9MT09LVVBfVkxBTiB8IEJQRl9GSUJfTE9PS1VQX1NLSVBfTkVJR0gsXG4mIzQzO1x0ICAuZXhwZWN0ZWRfZGV2ID0gQk9ORF9JRkFDRSwgLmNoZWNrX3ZsYW4gPSB0cnVlLFxuJiM0MztcdCAgLnZsYW5fcHJvdG8gPSBFVEhfUF84MDIxUSwgLnZsYW5faWQgPSBCT05EX1ZMQU5fSUQsIH0sXG4mIzQzO1x0eyAuZGVzYyA9IFwmIzM0O0lQdjQgVkxBTiBlZ3Jlc3MgdmlhIFRCSUQgdGFibGVcJiMzNDssXG4mIzQzO1x0ICAuZGFkZHIgPSBJUFY0X1RCSURfVkxBTl9EU1QsIC5leHBlY3RlZF9yZXQgPSBCUEZfRklCX0xLVVBfUkVUX1NVQ0NFU1MsXG4mIzQzO1x0ICAubG9va3VwX2ZsYWdzID0gQlBGX0ZJQl9MT09LVVBfRElSRUNUIHwgQlBGX0ZJQl9MT09LVVBfVEJJRCB8XG4mIzQzO1x0XHRcdCAgQlBGX0ZJQl9MT09LVVBfVkxBTiB8IEJQRl9GSUJfTE9PS1VQX1NLSVBfTkVJR0gsXG4mIzQzO1x0ICAudGJpZCA9IDEwMCxcbiYjNDM7XHQgIC5leHBlY3RlZF9kZXYgPSBcJiMzNDt2ZXRoMlwmIzM0OywgLmNoZWNrX3ZsYW4gPSB0cnVlLFxuJiM0MztcdCAgLnZsYW5fcHJvdG8gPSBFVEhfUF84MDIxUSwgLnZsYW5faWQgPSBUQklEX1ZMQU5fSUQsIH0sXG4mIzQzO1x0eyAuZGVzYyA9IFwmIzM0O0lQdjQgVkxBTiBlZ3Jlc3MsIHN1Y2Nlc3Mgd3JpdGVzIG10dV9yZXN1bHQgd2l0aCB0aGUgc3dhcFwmIzM0OyxcbiYjNDM7XHQgIC5kYWRkciA9IElQVjRfVkxBTl9NVFVfRFNULCAuZXhwZWN0ZWRfcmV0ID0gQlBGX0ZJQl9MS1VQX1JFVF9TVUNDRVNTLFxuJiM0MztcdCAgLnRvdF9sZW4gPSA1MDAsIC5leHBlY3RlZF9tdHUgPSAxMDAwLFxuJiM0MztcdCAgLmxvb2t1cF9mbGFncyA9IEJQRl9GSUJfTE9PS1VQX1ZMQU4gfCBCUEZfRklCX0xPT0tVUF9TS0lQX05FSUdILFxuJiM0MztcdCAgLmV4cGVjdGVkX2RldiA9IFwmIzM0O3ZldGgxXCYjMzQ7LCAuY2hlY2tfdmxhbiA9IHRydWUsXG4mIzQzO1x0ICAudmxhbl9wcm90byA9IEVUSF9QXzgwMjFRLCAudmxhbl9pZCA9IFZMQU5fSUQsIH0sXG4mIzQzO1x0eyAuZGVzYyA9IFwmIzM0O0lQdjQgVkxBTiBlZ3Jlc3MsIEZSQUdfTkVFREVEIHJlcG9ydHMgbXR1LCBzd2FwIHVud3JpdHRlblwmIzM0OyxcbiYjNDM7XHQgIC5kYWRkciA9IElQVjRfVkxBTl9NVFVfRFNULCAuZXhwZWN0ZWRfcmV0ID0gQlBGX0ZJQl9MS1VQX1JFVF9GUkFHX05FRURFRCxcbiYjNDM7XHQgIC50b3RfbGVuID0gMTQwMCwgLmV4cGVjdGVkX210dSA9IDEwMDAsXG4mIzQzO1x0ICAubG9va3VwX2ZsYWdzID0gQlBGX0ZJQl9MT09LVVBfVkxBTiB8IEJQRl9GSUJfTE9PS1VQX1NLSVBfTkVJR0gsXG4mIzQzO1x0ICAuZXhwZWN0ZWRfZGV2ID0gXCYjMzQ7dmV0aDFcJiMzNDssIC5jaGVja192bGFuID0gdHJ1ZSwgfSxcbiYjNDM7XHQvKiB2bGFuIHRhZyBhcyBsb29rdXAgaW5wdXQgKi9cbiYjNDM7XHR7IC5kZXNjID0gXCYjMzQ7SVB2NCBWTEFOIGlucHV0LCBubyBmbGFnXCYjMzQ7LFxuJiM0MztcdCAgLmRhZGRyID0gSVBWNF9WTEFOX0RTVCwgLmV4cGVjdGVkX3JldCA9IEJQRl9GSUJfTEtVUF9SRVRfU1VDQ0VTUyxcbiYjNDM7XHQgIC5leHBlY3RlZF9kc3QgPSBJUFY0X0dXMSxcbiYjNDM7XHQgIC5sb29rdXBfZmxhZ3MgPSBCUEZfRklCX0xPT0tVUF9TS0lQX05FSUdILCB9LFxuJiM0MztcdHsgLmRlc2MgPSBcJiMzNDtJUHY0IFZMQU4gaW5wdXQsIHRhZyBzZWxlY3RzIHN1YmludGVyZmFjZSByb3V0ZVwmIzM0OyxcbiYjNDM7XHQgIC5kYWRkciA9IElQVjRfVkxBTl9EU1QsIC5leHBlY3RlZF9yZXQgPSBCUEZfRklCX0xLVVBfUkVUX1NVQ0NFU1MsXG4mIzQzO1x0ICAuZXhwZWN0ZWRfZHN0ID0gSVBWNF9WTEFOX0dXLCAuZXhwZWN0ZWRfZGV2ID0gVkxBTl9JRkFDRSxcbiYjNDM7XHQgIC5sb29rdXBfZmxhZ3MgPSBCUEZfRklCX0xPT0tVUF9WTEFOX0lOUFVUIHwgQlBGX0ZJQl9MT09LVVBfU0tJUF9ORUlHSCxcbiYjNDM7XHQgIC52bGFuX3Byb3RvID0gRVRIX1BfODAyMVEsIC52bGFuX2lkID0gVkxBTl9JRCwgfSxcbiYjNDM7XHR7IC5kZXNjID0gXCYjMzQ7SVB2NiBWTEFOIGlucHV0LCB0YWcgc2VsZWN0cyBzdWJpbnRlcmZhY2Ugcm91dGVcJiMzNDssXG4mIzQzO1x0ICAuZGFkZHIgPSBJUFY2X1ZMQU5fRFNULCAuZXhwZWN0ZWRfcmV0ID0gQlBGX0ZJQl9MS1VQX1JFVF9TVUNDRVNTLFxuJiM0MztcdCAgLmV4cGVjdGVkX2RzdCA9IElQVjZfVkxBTl9HVywgLmV4cGVjdGVkX2RldiA9IFZMQU5fSUZBQ0UsXG4mIzQzO1x0ICAubG9va3VwX2ZsYWdzID0gQlBGX0ZJQl9MT09LVVBfVkxBTl9JTlBVVCB8IEJQRl9GSUJfTE9PS1VQX1NLSVBfTkVJR0gsXG4mIzQzO1x0ICAudmxhbl9wcm90byA9IEVUSF9QXzgwMjFRLCAudmxhbl9pZCA9IFZMQU5fSUQsIH0sXG4mIzQzO1x0eyAuZGVzYyA9IFwmIzM0O0lQdjQgVkxBTiBpbnB1dCBhbmQgZWdyZXNzIGNvbWJpbmVkXCYjMzQ7LFxuJiM0MztcdCAgLmRhZGRyID0gSVBWNF9WTEFOX0RTVCwgLmV4cGVjdGVkX3JldCA9IEJQRl9GSUJfTEtVUF9SRVRfU1VDQ0VTUyxcbiYjNDM7XHQgIC5leHBlY3RlZF9kc3QgPSBJUFY0X1ZMQU5fR1csIC5leHBlY3RlZF9kZXYgPSBcJiMzNDt2ZXRoMVwmIzM0OyxcbiYjNDM7XHQgIC5jaGVja192bGFuID0gdHJ1ZSxcbiYjNDM7XHQgIC5sb29rdXBfZmxhZ3MgPSBCUEZfRklCX0xPT0tVUF9WTEFOX0lOUFVUIHwgQlBGX0ZJQl9MT09LVVBfVkxBTiB8XG4mIzQzO1x0XHRcdCAgQlBGX0ZJQl9MT09LVVBfU0tJUF9ORUlHSCxcbiYjNDM7XHQgIC52bGFuX3Byb3RvID0gRVRIX1BfODAyMVEsIC52bGFuX2lkID0gVkxBTl9JRCwgfSxcbiYjNDM7XHR7IC5kZXNjID0gXCYjMzQ7SVB2NCBWTEFOIGlucHV0LCBuZWlnaGJvdXIgcmVzb2x2ZWQgb24gdGhlIHJvdXRlXCYjMzQ7LFxuJiM0MztcdCAgLmRhZGRyID0gSVBWNF9WTEFOX0RTVCwgLmV4cGVjdGVkX3JldCA9IEJQRl9GSUJfTEtVUF9SRVRfU1VDQ0VTUyxcbiYjNDM7XHQgIC5leHBlY3RlZF9kc3QgPSBJUFY0X1ZMQU5fR1csIC5leHBlY3RlZF9kZXYgPSBWTEFOX0lGQUNFLFxuJiM0MztcdCAgLmxvb2t1cF9mbGFncyA9IEJQRl9GSUJfTE9PS1VQX1ZMQU5fSU5QVVQsXG4mIzQzO1x0ICAudmxhbl9wcm90byA9IEVUSF9QXzgwMjFRLCAudmxhbl9pZCA9IFZMQU5fSUQsIC5kbWFjID0gRE1BQ19JTklUMiwgfSxcbiYjNDM7XHR7IC5kZXNjID0gXCYjMzQ7SVB2NCBWTEFOIGlucHV0LCBzb3VyY2UgYWRkcmVzcyBmcm9tIHRoZSBzdWJpbnRlcmZhY2VcJiMzNDssXG4mIzQzO1x0ICAuZGFkZHIgPSBJUFY0X1ZMQU5fRFNULCAuZXhwZWN0ZWRfcmV0ID0gQlBGX0ZJQl9MS1VQX1JFVF9TVUNDRVNTLFxuJiM0MztcdCAgLmV4cGVjdGVkX3NyYyA9IElQVjRfVkxBTl9JRkFDRV9BRERSLFxuJiM0MztcdCAgLmxvb2t1cF9mbGFncyA9IEJQRl9GSUJfTE9PS1VQX1ZMQU5fSU5QVVQgfCBCUEZfRklCX0xPT0tVUF9TUkMgfFxuJiM0MztcdFx0XHQgIEJQRl9GSUJfTE9PS1VQX1NLSVBfTkVJR0gsXG4mIzQzO1x0ICAudmxhbl9wcm90byA9IEVUSF9QXzgwMjFRLCAudmxhbl9pZCA9IFZMQU5fSUQsIH0sXG4mIzQzO1x0LypcbiYjNDM7XHQgKiBWUkY6IHRoZSByZXNvbHZlZCBzdWJpbnRlcmZhY2UgaXMgZW5zbGF2ZWQsIHNvIHRoZSBsM21kZXYgcnVsZVxuJiM0MztcdCAqIChmdWxsIGxvb2t1cCkgYW5kIGwzbWRldl9maWJfdGFibGVfcmN1KCkgKERJUkVDVCkgbXVzdCBzZWxlY3RcbiYjNDM7XHQgKiB0aGUgVlJGIHRhYmxlIGZyb20gdGhlIHJlc29sdmVkIGluZ3Jlc3NcbiYjNDM7XHQgKi9cbiYjNDM7XHR7IC5kZXNjID0gXCYjMzQ7SVB2NCBWTEFOIGlucHV0LCBWUkYgc3ViaW50ZXJmYWNlLCBubyBmbGFnXCYjMzQ7LFxuJiM0MztcdCAgLmRhZGRyID0gSVBWNF9WUkZfRFNULCAuZXhwZWN0ZWRfcmV0ID0gQlBGX0ZJQl9MS1VQX1JFVF9TVUNDRVNTLFxuJiM0MztcdCAgLmV4cGVjdGVkX2RzdCA9IElQVjRfR1cxLFxuJiM0MztcdCAgLmxvb2t1cF9mbGFncyA9IEJQRl9GSUJfTE9PS1VQX1NLSVBfTkVJR0gsIH0sXG4mIzQzO1x0eyAuZGVzYyA9IFwmIzM0O0lQdjQgVkxBTiBpbnB1dCwgdGFnIHNlbGVjdHMgVlJGIHRhYmxlXCYjMzQ7LFxuJiM0MztcdCAgLmRhZGRyID0gSVBWNF9WUkZfRFNULCAuZXhwZWN0ZWRfcmV0ID0gQlBGX0ZJQl9MS1VQX1JFVF9TVUNDRVNTLFxuJiM0MztcdCAgLmV4cGVjdGVkX2RzdCA9IElQVjRfVlJGX0dXLCAuZXhwZWN0ZWRfZGV2ID0gVlJGX1ZMQU5fSUZBQ0UsXG4mIzQzO1x0ICAubG9va3VwX2ZsYWdzID0gQlBGX0ZJQl9MT09LVVBfVkxBTl9JTlBVVCB8IEJQRl9GSUJfTE9PS1VQX1NLSVBfTkVJR0gsXG4mIzQzO1x0ICAudmxhbl9wcm90byA9IEVUSF9QXzgwMjFRLCAudmxhbl9pZCA9IFZSRl9WTEFOX0lELCB9LFxuJiM0MztcdHsgLmRlc2MgPSBcJiMzNDtJUHY0IFZMQU4gaW5wdXQsIERJUkVDVCB1c2VzIFZSRiB0YWJsZSBmcm9tIHJlc29sdmVkIGluZ3Jlc3NcJiMzNDssXG4mIzQzO1x0ICAuZGFkZHIgPSBJUFY0X1ZSRl9EU1QsIC5leHBlY3RlZF9yZXQgPSBCUEZfRklCX0xLVVBfUkVUX1NVQ0NFU1MsXG4mIzQzO1x0ICAuZXhwZWN0ZWRfZHN0ID0gSVBWNF9WUkZfR1csIC5leHBlY3RlZF9kZXYgPSBWUkZfVkxBTl9JRkFDRSxcbiYjNDM7XHQgIC5sb29rdXBfZmxhZ3MgPSBCUEZfRklCX0xPT0tVUF9WTEFOX0lOUFVUIHwgQlBGX0ZJQl9MT09LVVBfRElSRUNUIHxcbiYjNDM7XHRcdFx0ICBCUEZfRklCX0xPT0tVUF9TS0lQX05FSUdILFxuJiM0MztcdCAgLnZsYW5fcHJvdG8gPSBFVEhfUF84MDIxUSwgLnZsYW5faWQgPSBWUkZfVkxBTl9JRCwgfSxcbiYjNDM7XHQvKlxuJiM0MztcdCAqIGZhaWx1cmUgYXJtcyBhbHNvIGFzc2VydCBwYXJhbXMgaXMgbGVmdCB1bnRvdWNoZWQ6IGlmaW5kZXggc3RpbGxcbiYjNDM7XHQgKiBuYW1lcyB0aGUgcGh5c2ljYWwgZGV2aWNlIGFuZCB0aGUgaW5wdXQgdGFnIGJ5dGVzIHN1cnZpdmVcbiYjNDM7XHQgKi9cbiYjNDM7XHR7IC5kZXNjID0gXCYjMzQ7SVB2NCBWTEFOIGlucHV0LCBpbnZhbGlkIHByb3RvXCYjMzQ7LFxuJiM0MztcdCAgLmRhZGRyID0gSVBWNF9WTEFOX0RTVCwgLmV4cGVjdGVkX3JldCA9IC1FSU5WQUwsXG4mIzQzO1x0ICAuZXhwZWN0ZWRfZGV2ID0gXCYjMzQ7dmV0aDFcJiMzNDssIC5jaGVja192bGFuID0gdHJ1ZSxcbiYjNDM7XHQgIC5sb29rdXBfZmxhZ3MgPSBCUEZfRklCX0xPT0tVUF9WTEFOX0lOUFVUIHwgQlBGX0ZJQl9MT09LVVBfU0tJUF9ORUlHSCxcbiYjNDM7XHQgIC52bGFuX3Byb3RvID0gMHgxMjM0LCAudmxhbl9pZCA9IFZMQU5fSUQsIH0sXG4mIzQzO1x0eyAuZGVzYyA9IFwmIzM0O0lQdjQgVkxBTiBpbnB1dCwgdW5tYXRjaGVkIFZJRFwmIzM0OyxcbiYjNDM7XHQgIC5kYWRkciA9IElQVjRfVkxBTl9EU1QsIC5leHBlY3RlZF9yZXQgPSBCUEZfRklCX0xLVVBfUkVUX05PVF9GV0RFRCxcbiYjNDM7XHQgIC5leHBlY3RlZF9kZXYgPSBcJiMzNDt2ZXRoMVwmIzM0OywgLmNoZWNrX3ZsYW4gPSB0cnVlLFxuJiM0MztcdCAgLmxvb2t1cF9mbGFncyA9IEJQRl9GSUJfTE9PS1VQX1ZMQU5fSU5QVVQgfCBCUEZfRklCX0xPT0tVUF9TS0lQX05FSUdILFxuJiM0MztcdCAgLnZsYW5fcHJvdG8gPSBFVEhfUF84MDIxUSwgLnZsYW5faWQgPSBWTEFOX1ZJRF9VTlVTRUQsIH0sXG4mIzQzO1x0eyAuZGVzYyA9IFwmIzM0O0lQdjQgVkxBTiBpbnB1dCwgc3ViaW50ZXJmYWNlIGRvd25cJiMzNDssXG4mIzQzO1x0ICAuZGFkZHIgPSBJUFY0X1ZMQU5fRFNULCAuZXhwZWN0ZWRfcmV0ID0gQlBGX0ZJQl9MS1VQX1JFVF9OT1RfRldERUQsXG4mIzQzO1x0ICAuZXhwZWN0ZWRfZGV2ID0gXCYjMzQ7dmV0aDFcJiMzNDssIC5jaGVja192bGFuID0gdHJ1ZSxcbiYjNDM7XHQgIC5sb29rdXBfZmxhZ3MgPSBCUEZfRklCX0xPT0tVUF9WTEFOX0lOUFVUIHwgQlBGX0ZJQl9MT09LVVBfU0tJUF9ORUlHSCxcbiYjNDM7XHQgIC52bGFuX3Byb3RvID0gRVRIX1BfODAyMVEsIC52bGFuX2lkID0gVkxBTl9JRF9ET1dOLCB9LFxuJiM0MztcdC8qXG4mIzQzO1x0ICogdGhlIHJlc29sdmVyIHJ1bnMgYmVmb3JlIHRoZSBmb3J3YXJkaW5nIGNoZWNrLCBzbyBvbiBkZXZpY2VzXG4mIzQzO1x0ICogd2l0aCBmb3J3YXJkaW5nIG9mZiBGV0RfRElTQUJMRUQgKG5vdCBOT1RfRldERUQpIHByb3ZlcyB0aGUgdGFnXG4mIzQzO1x0ICogcmVzb2x2ZWQgdG8gdGhhdCBkZXZpY2UgYW5kIHRoZSBsb29rdXAgdXNlZCBpdCBhcyBpbmdyZXNzXG4mIzQzO1x0ICovXG4mIzQzO1x0eyAuZGVzYyA9IFwmIzM0O0lQdjQgVkxBTiBpbnB1dCwgODAyLjFhZCB0YWdcJiMzNDssXG4mIzQzO1x0ICAuZGFkZHIgPSBJUFY0X1ZMQU5fRFNULCAuZXhwZWN0ZWRfcmV0ID0gQlBGX0ZJQl9MS1VQX1JFVF9GV0RfRElTQUJMRUQsXG4mIzQzO1x0ICAubG9va3VwX2ZsYWdzID0gQlBGX0ZJQl9MT09LVVBfVkxBTl9JTlBVVCB8IEJQRl9GSUJfTE9PS1VQX1NLSVBfTkVJR0gsXG4mIzQzO1x0ICAudmxhbl9wcm90byA9IEVUSF9QXzgwMjFBRCwgLnZsYW5faWQgPSBRSU5RX0FEX1ZMQU5fSUQsIH0sXG4mIzQzO1x0eyAuZGVzYyA9IFwmIzM0O0lQdjQgVkxBTiBpbnB1dCwgUENQIGFuZCBERUkgYml0cyBpZ25vcmVkIGluIFRDSVwmIzM0OyxcbiYjNDM7XHQgIC5kYWRkciA9IElQVjRfVkxBTl9EU1QsIC5leHBlY3RlZF9yZXQgPSBCUEZfRklCX0xLVVBfUkVUX1NVQ0NFU1MsXG4mIzQzO1x0ICAuZXhwZWN0ZWRfZHN0ID0gSVBWNF9WTEFOX0dXLFxuJiM0MztcdCAgLmxvb2t1cF9mbGFncyA9IEJQRl9GSUJfTE9PS1VQX1ZMQU5fSU5QVVQgfCBCUEZfRklCX0xPT0tVUF9TS0lQX05FSUdILFxuJiM0MztcdCAgLnZsYW5fcHJvdG8gPSBFVEhfUF84MDIxUSwgLnZsYW5faWQgPSAweGUwMDAgfCBWTEFOX0lELCB9LFxuJiM0MztcdHsgLmRlc2MgPSBcJiMzNDtJUHY0IFZMQU4gaW5wdXQsIGlubmVyIFFpblEgZGV2aWNlIGZyb20gVkxBTiBpZmluZGV4XCYjMzQ7LFxuJiM0MztcdCAgLmRhZGRyID0gSVBWNF9WTEFOX0RTVCwgLmV4cGVjdGVkX3JldCA9IEJQRl9GSUJfTEtVUF9SRVRfRldEX0RJU0FCTEVELFxuJiM0MztcdCAgLmlpZiA9IFFJTlFfT1VURVJfSUZBQ0UsXG4mIzQzO1x0ICAubG9va3VwX2ZsYWdzID0gQlBGX0ZJQl9MT09LVVBfVkxBTl9JTlBVVCB8IEJQRl9GSUJfTE9PS1VQX1NLSVBfTkVJR0gsXG4mIzQzO1x0ICAudmxhbl9wcm90byA9IEVUSF9QXzgwMjFRLCAudmxhbl9pZCA9IFFJTlFfSU5ORVJfVkxBTl9JRCwgfSxcbiYjNDM7XHQvKlxuJiM0MztcdCAqIGJvbmRpbmc6IHRoZSBWTEFOcyBsaXZlIG9uIHRoZSBtYXN0ZXIsIGFzIG9uIHJlY2VpdmUsIHdoZXJlIHRoZVxuJiM0MztcdCAqIGZyYW1lIGlzIHN0ZWVyZWQgdG8gdGhlIG1hc3RlciBiZWZvcmUgVkxBTiBwcm9jZXNzaW5nOyBhIHBvcnRcbiYjNDM7XHQgKiBpZmluZGV4IGRvZXMgbm90IG1hdGNoIChwb3J0cyBjYXJyeSB2aWQgc3RhdGUgYnV0IG5vIFZMQU4gZGV2cylcbiYjNDM7XHQgKi9cbiYjNDM7XHR7IC5kZXNjID0gXCYjMzQ7SVB2NCBWTEFOIGlucHV0LCB0YWcgb24gYm9uZCBtYXN0ZXIgcmVzb2x2ZXNcJiMzNDssXG4mIzQzO1x0ICAuZGFkZHIgPSBJUFY0X1ZMQU5fRFNULCAuZXhwZWN0ZWRfcmV0ID0gQlBGX0ZJQl9MS1VQX1JFVF9GV0RfRElTQUJMRUQsXG4mIzQzO1x0ICAuaWlmID0gQk9ORF9JRkFDRSxcbiYjNDM7XHQgIC5sb29rdXBfZmxhZ3MgPSBCUEZfRklCX0xPT0tVUF9WTEFOX0lOUFVUIHwgQlBGX0ZJQl9MT09LVVBfU0tJUF9ORUlHSCxcbiYjNDM7XHQgIC52bGFuX3Byb3RvID0gRVRIX1BfODAyMVEsIC52bGFuX2lkID0gQk9ORF9WTEFOX0lELCB9LFxuJiM0MztcdHsgLmRlc2MgPSBcJiMzNDtJUHY0IFZMQU4gaW5wdXQsIHRhZyBvbiBib25kIHBvcnQgZG9lcyBub3QgbWF0Y2hcJiMzNDssXG4mIzQzO1x0ICAuZGFkZHIgPSBJUFY0X1ZMQU5fRFNULCAuZXhwZWN0ZWRfcmV0ID0gQlBGX0ZJQl9MS1VQX1JFVF9OT1RfRldERUQsXG4mIzQzO1x0ICAuaWlmID0gQk9ORF9QT1JULCAuZXhwZWN0ZWRfZGV2ID0gQk9ORF9QT1JULCAuY2hlY2tfdmxhbiA9IHRydWUsXG4mIzQzO1x0ICAubG9va3VwX2ZsYWdzID0gQlBGX0ZJQl9MT09LVVBfVkxBTl9JTlBVVCB8IEJQRl9GSUJfTE9PS1VQX1NLSVBfTkVJR0gsXG4mIzQzO1x0ICAudmxhbl9wcm90byA9IEVUSF9QXzgwMjFRLCAudmxhbl9pZCA9IEJPTkRfVkxBTl9JRCwgfSxcbiYjNDM7XHR7IC5kZXNjID0gXCYjMzQ7SVB2NiBWTEFOIGlucHV0LCBpbnZhbGlkIHByb3RvXCYjMzQ7LFxuJiM0MztcdCAgLmRhZGRyID0gSVBWNl9WTEFOX0RTVCwgLmV4cGVjdGVkX3JldCA9IC1FSU5WQUwsXG4mIzQzO1x0ICAuZXhwZWN0ZWRfZGV2ID0gXCYjMzQ7dmV0aDFcJiMzNDssIC5jaGVja192bGFuID0gdHJ1ZSxcbiYjNDM7XHQgIC5sb29rdXBfZmxhZ3MgPSBCUEZfRklCX0xPT0tVUF9WTEFOX0lOUFVUIHwgQlBGX0ZJQl9MT09LVVBfU0tJUF9ORUlHSCxcbiYjNDM7XHQgIC52bGFuX3Byb3RvID0gMHgxMjM0LCAudmxhbl9pZCA9IFZMQU5fSUQsIH0sXG4mIzQzO1x0eyAuZGVzYyA9IFwmIzM0O0lQdjQgVkxBTiBpbnB1dCwgVklEIDAgcHJpb3JpdHkgdGFnIGZhaWxzIGNsb3NlZFwmIzM0OyxcbiYjNDM7XHQgIC5kYWRkciA9IElQVjRfVkxBTl9EU1QsIC5leHBlY3RlZF9yZXQgPSBCUEZfRklCX0xLVVBfUkVUX05PVF9GV0RFRCxcbiYjNDM7XHQgIC5leHBlY3RlZF9kZXYgPSBcJiMzNDt2ZXRoMVwmIzM0OywgLmNoZWNrX3ZsYW4gPSB0cnVlLFxuJiM0MztcdCAgLmxvb2t1cF9mbGFncyA9IEJQRl9GSUJfTE9PS1VQX1ZMQU5fSU5QVVQgfCBCUEZfRklCX0xPT0tVUF9TS0lQX05FSUdILFxuJiM0MztcdCAgLnZsYW5fcHJvdG8gPSBFVEhfUF84MDIxUSwgLnZsYW5faWQgPSAwLCB9LFxuJiM0MztcdHsgLmRlc2MgPSBcJiMzNDtJUHY2IFZMQU4gaW5wdXQsIHVubWF0Y2hlZCBWSURcJiMzNDssXG4mIzQzO1x0ICAuZGFkZHIgPSBJUFY2X1ZMQU5fRFNULCAuZXhwZWN0ZWRfcmV0ID0gQlBGX0ZJQl9MS1VQX1JFVF9OT1RfRldERUQsXG4mIzQzO1x0ICAuZXhwZWN0ZWRfZGV2ID0gXCYjMzQ7dmV0aDFcJiMzNDssIC5jaGVja192bGFuID0gdHJ1ZSxcbiYjNDM7XHQgIC5sb29rdXBfZmxhZ3MgPSBCUEZfRklCX0xPT0tVUF9WTEFOX0lOUFVUIHwgQlBGX0ZJQl9MT09LVVBfU0tJUF9ORUlHSCxcbiYjNDM7XHQgIC52bGFuX3Byb3RvID0gRVRIX1BfODAyMVEsIC52bGFuX2lkID0gVkxBTl9WSURfVU5VU0VELCB9LFxuJiM0MztcdHsgLmRlc2MgPSBcJiMzNDt1bmtub3duIGZsYWcgYml0IHJlamVjdGVkXCYjMzQ7LFxuJiM0MztcdCAgLmRhZGRyID0gSVBWNF9WTEFOX0RTVCwgLmV4cGVjdGVkX3JldCA9IC1FSU5WQUwsXG4mIzQzO1x0ICAubG9va3VwX2ZsYWdzID0gKDEgXHUwMDNjXHUwMDNjIDE0KSB8IEJQRl9GSUJfTE9PS1VQX1NLSVBfTkVJR0gsIH0sXG4mIzQzO1x0eyAuZGVzYyA9IFwmIzM0O0lQdjQgVkxBTiBpbnB1dCByZWplY3RlZCB3aXRoIFRCSURcJiMzNDssXG4mIzQzO1x0ICAuZGFkZHIgPSBJUFY0X1ZMQU5fRFNULCAuZXhwZWN0ZWRfcmV0ID0gLUVJTlZBTCxcbiYjNDM7XHQgIC5sb29rdXBfZmxhZ3MgPSBCUEZfRklCX0xPT0tVUF9WTEFOX0lOUFVUIHwgQlBGX0ZJQl9MT09LVVBfVEJJRCxcbiYjNDM7XHQgIC52bGFuX3Byb3RvID0gRVRIX1BfODAyMVEsIC52bGFuX2lkID0gVkxBTl9JRCwgfSxcbiYjNDM7XHR7IC5kZXNjID0gXCYjMzQ7SVB2NCBWTEFOIGlucHV0IHJlamVjdGVkIHdpdGggT1VUUFVUXCYjMzQ7LFxuJiM0MztcdCAgLmRhZGRyID0gSVBWNF9WTEFOX0RTVCwgLmV4cGVjdGVkX3JldCA9IC1FSU5WQUwsXG4mIzQzO1x0ICAubG9va3VwX2ZsYWdzID0gQlBGX0ZJQl9MT09LVVBfVkxBTl9JTlBVVCB8IEJQRl9GSUJfTE9PS1VQX09VVFBVVCxcbiYjNDM7XHQgIC52bGFuX3Byb3RvID0gRVRIX1BfODAyMVEsIC52bGFuX2lkID0gVkxBTl9JRCwgfSxcbiB9O1xuIFxuIHN0YXRpYyBpbnQgc2V0dXBfbmV0bnModm9pZClcbkBAIC0yMDQsNiAmIzQzOzQ3NSwxMTAgQEAgc3RhdGljIGludCBzZXR1cF9uZXRucyh2b2lkKVxuIFx0U1lTKGZhaWwsIFwmIzM0O2lwIHJ1bGUgYWRkIHByaW8gMiBmd21hcmsgJWQgbG9va3VwICVzXCYjMzQ7LCBNQVJLLCBNQVJLX1RBQkxFKTtcbiBcdFNZUyhmYWlsLCBcJiMzNDtpcCAtNiBydWxlIGFkZCBwcmlvIDIgZndtYXJrICVkIGxvb2t1cCAlc1wmIzM0OywgTUFSSywgTUFSS19UQUJMRSk7XG4gXG4mIzQzO1x0LypcbiYjNDM7XHQgKiBTZXR1cCBmb3IgdmxhbiB0ZXN0czogYSBzdWJpbnRlcmZhY2UgZm9yIGVncmVzcyByZXNvbHV0aW9uIGFuZFxuJiM0MztcdCAqIHRhZy1hcy1pbnB1dCwgYSBRaW5RIHN0YWNrLCBhbmQgYW4gaWlmIHJ1bGUgc28gdGhlIGlucHV0IHRlc3RzXG4mIzQzO1x0ICogb2JzZXJ2ZSB3aGljaCBkZXZpY2UgdGhlIGxvb2t1cCB1c2VkIGFzIGluZ3Jlc3MuXG4mIzQzO1x0ICovXG4mIzQzO1x0U1lTKGZhaWwsIFwmIzM0O2lwIGxpbmsgYWRkIGxpbmsgdmV0aDEgbmFtZSAlcyB0eXBlIHZsYW4gaWQgJWRcJiMzNDssXG4mIzQzO1x0ICAgIFZMQU5fSUZBQ0UsIFZMQU5fSUQpO1xuJiM0MztcdFNZUyhmYWlsLCBcJiMzNDtpcCBsaW5rIHNldCBkZXYgJXMgdXBcJiMzNDssIFZMQU5fSUZBQ0UpO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogbG93ZXIgdGhhbiB0aGUgdmV0aDEgcGFyZW50ICgxNTAwKTogdGhlIHNrYi1wYXRoIG10dSBjaGVjayB1c2VzIHRoZVxuJiM0MztcdCAqIEZJQiByZXN1bHQgKFZMQU4pIGRldmljZSwgc28gbXR1X3Jlc3VsdCBpcyB0aGlzIHZhbHVlIHdpdGggb3JcbiYjNDM7XHQgKiB3aXRob3V0IHRoZSBlZ3Jlc3Mgc3dhcCwgd2hpY2ggdHdvIGFybXMgYmVsb3cgcGluXG4mIzQzO1x0ICovXG4mIzQzO1x0U1lTKGZhaWwsIFwmIzM0O2lwIGxpbmsgc2V0IGRldiAlcyBtdHUgMTQwMFwmIzM0OywgVkxBTl9JRkFDRSk7XG4mIzQzO1x0U1lTKGZhaWwsIFwmIzM0O2lwIGFkZHIgYWRkICVzLzI0IGRldiAlc1wmIzM0OywgSVBWNF9WTEFOX0lGQUNFX0FERFIsIFZMQU5fSUZBQ0UpO1xuJiM0MztcdFNZUyhmYWlsLCBcJiMzNDtpcCBhZGRyIGFkZCAlcy82NCBkZXYgJXMgbm9kYWRcJiMzNDssIElQVjZfVkxBTl9JRkFDRV9BRERSLCBWTEFOX0lGQUNFKTtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBzdGF5cyBkb3duOiB0aGUgaW5wdXQgZmxhZyBtdXN0IHRyZWF0IGl0cyB0YWcgdGhlIHdheSByZWFsXG4mIzQzO1x0ICogaW5ncmVzcyB0cmVhdHMgYSBmcmFtZSBhcnJpdmluZyBvbiBhIGRvd24gVkxBTiBkZXZpY2UgKGRyb3ApXG4mIzQzO1x0ICovXG4mIzQzO1x0U1lTKGZhaWwsIFwmIzM0O2lwIGxpbmsgYWRkIGxpbmsgdmV0aDEgbmFtZSAlcyB0eXBlIHZsYW4gaWQgJWRcJiMzNDssXG4mIzQzO1x0ICAgIFZMQU5fSUZBQ0VfRE9XTiwgVkxBTl9JRF9ET1dOKTtcbiYjNDM7XG4mIzQzO1x0ZXJyID0gd3JpdGVfc3lzY3RsKFwmIzM0Oy9wcm9jL3N5cy9uZXQvaXB2NC9jb25mL1wmIzM0OyBWTEFOX0lGQUNFIFwmIzM0Oy9mb3J3YXJkaW5nXCYjMzQ7LCBcJiMzNDsxXCYjMzQ7KTtcbiYjNDM7XHRpZiAoIUFTU0VSVF9PSyhlcnIsIFwmIzM0O3dyaXRlX3N5c2N0bChuZXQuaXB2NC5jb25mLlwmIzM0OyBWTEFOX0lGQUNFIFwmIzM0Oy5mb3J3YXJkaW5nKVwmIzM0OykpXG4mIzQzO1x0XHRnb3RvIGZhaWw7XG4mIzQzO1xuJiM0MztcdGVyciA9IHdyaXRlX3N5c2N0bChcJiMzNDsvcHJvYy9zeXMvbmV0L2lwdjYvY29uZi9cJiMzNDsgVkxBTl9JRkFDRSBcJiMzNDsvZm9yd2FyZGluZ1wmIzM0OywgXCYjMzQ7MVwmIzM0Oyk7XG4mIzQzO1x0aWYgKCFBU1NFUlRfT0soZXJyLCBcJiMzNDt3cml0ZV9zeXNjdGwobmV0LmlwdjYuY29uZi5cJiMzNDsgVkxBTl9JRkFDRSBcJiMzNDsuZm9yd2FyZGluZylcJiMzNDspKVxuJiM0MztcdFx0Z290byBmYWlsO1xuJiM0MztcbiYjNDM7XHRTWVMoZmFpbCwgXCYjMzQ7aXAgbGluayBhZGQgbGluayB2ZXRoMSBuYW1lICVzIHR5cGUgdmxhbiBwcm90byA4MDIuMWFkIGlkIDIwMFwmIzM0OyxcbiYjNDM7XHQgICAgUUlOUV9PVVRFUl9JRkFDRSk7XG4mIzQzO1x0U1lTKGZhaWwsIFwmIzM0O2lwIGxpbmsgYWRkIGxpbmsgJXMgbmFtZSAlcyB0eXBlIHZsYW4gaWQgMzAwXCYjMzQ7LFxuJiM0MztcdCAgICBRSU5RX09VVEVSX0lGQUNFLCBRSU5RX0lOTkVSX0lGQUNFKTtcbiYjNDM7XHRTWVMoZmFpbCwgXCYjMzQ7aXAgbGluayBzZXQgZGV2ICVzIHVwXCYjMzQ7LCBRSU5RX09VVEVSX0lGQUNFKTtcbiYjNDM7XHRTWVMoZmFpbCwgXCYjMzQ7aXAgbGluayBzZXQgZGV2ICVzIHVwXCYjMzQ7LCBRSU5RX0lOTkVSX0lGQUNFKTtcbiYjNDM7XHRTWVMoZmFpbCwgXCYjMzQ7aXAgcm91dGUgYWRkICVzLzMyIGRldiAlc1wmIzM0OywgSVBWNF9RSU5RX0RTVCwgUUlOUV9JTk5FUl9JRkFDRSk7XG4mIzQzO1xuJiM0MztcdFNZUyhmYWlsLCBcJiMzNDtpcCByb3V0ZSBhZGQgJXMvMzIgdmlhICVzXCYjMzQ7LCBJUFY0X1ZMQU5fRFNULCBJUFY0X0dXMSk7XG4mIzQzO1x0U1lTKGZhaWwsIFwmIzM0O2lwIHJvdXRlIGFkZCB0YWJsZSAlcyAlcy8zMiB2aWEgJXNcJiMzNDssXG4mIzQzO1x0ICAgIFZMQU5fVEFCTEUsIElQVjRfVkxBTl9EU1QsIElQVjRfVkxBTl9HVyk7XG4mIzQzO1x0U1lTKGZhaWwsIFwmIzM0O2lwIHJ1bGUgYWRkIHByaW8gMyBpaWYgJXMgbG9va3VwICVzXCYjMzQ7LCBWTEFOX0lGQUNFLCBWTEFOX1RBQkxFKTtcbiYjNDM7XHRTWVMoZmFpbCwgXCYjMzQ7aXAgLTYgcm91dGUgYWRkICVzLzEyOCB2aWEgJXNcJiMzNDssIElQVjZfVkxBTl9EU1QsIElQVjZfR1cxKTtcbiYjNDM7XHRTWVMoZmFpbCwgXCYjMzQ7aXAgLTYgcm91dGUgYWRkIHRhYmxlICVzICVzLzEyOCB2aWEgJXNcJiMzNDssXG4mIzQzO1x0ICAgIFZMQU5fVEFCTEUsIElQVjZfVkxBTl9EU1QsIElQVjZfVkxBTl9HVyk7XG4mIzQzO1x0U1lTKGZhaWwsIFwmIzM0O2lwIC02IHJ1bGUgYWRkIHByaW8gMyBpaWYgJXMgbG9va3VwICVzXCYjMzQ7LCBWTEFOX0lGQUNFLCBWTEFOX1RBQkxFKTtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBhIGJvbmQgd2l0aCBvbmUgcG9ydCBhbmQgYSBWTEFOIG9uIHRoZSBib25kOiBWTEFOcyBvbiBhIGJvbmRcbiYjNDM7XHQgKiBsaXZlIG9uIHRoZSBtYXN0ZXIsIHNvIHJlc29sdXRpb24gc3VjY2VlZHMgZm9yIHRoZSBtYXN0ZXImIzM5O3NcbiYjNDM7XHQgKiBpZmluZGV4IGFuZCBmYWlscyBjbG9zZWQgZm9yIGEgcG9ydCYjMzk7cywgbWF0Y2hpbmcgcmVjZWl2ZSwgd2hpY2hcbiYjNDM7XHQgKiBzdGVlcnMgdGhlIGZyYW1lIHRvIHRoZSBtYXN0ZXIgYmVmb3JlIFZMQU4gcHJvY2Vzc2luZ1xuJiM0MztcdCAqL1xuJiM0MztcdFNZUyhmYWlsLCBcJiMzNDtpcCBsaW5rIGFkZCAlcyB0eXBlIGJvbmRcJiMzNDssIEJPTkRfSUZBQ0UpO1xuJiM0MztcdFNZUyhmYWlsLCBcJiMzNDtpcCBsaW5rIGFkZCAlcyB0eXBlIHZldGggcGVlciBuYW1lICVzXCYjMzQ7LCBCT05EX1BPUlQsIEJPTkRfUE9SVF9QRUVSKTtcbiYjNDM7XHRTWVMoZmFpbCwgXCYjMzQ7aXAgbGluayBzZXQgJXMgbWFzdGVyICVzXCYjMzQ7LCBCT05EX1BPUlQsIEJPTkRfSUZBQ0UpO1xuJiM0MztcdFNZUyhmYWlsLCBcJiMzNDtpcCBsaW5rIHNldCBkZXYgJXMgdXBcJiMzNDssIEJPTkRfSUZBQ0UpO1xuJiM0MztcdFNZUyhmYWlsLCBcJiMzNDtpcCBsaW5rIHNldCBkZXYgJXMgdXBcJiMzNDssIEJPTkRfUE9SVCk7XG4mIzQzO1x0U1lTKGZhaWwsIFwmIzM0O2lwIGxpbmsgYWRkIGxpbmsgJXMgbmFtZSAlcy4lZCB0eXBlIHZsYW4gaWQgJWRcJiMzNDssXG4mIzQzO1x0ICAgIEJPTkRfSUZBQ0UsIEJPTkRfSUZBQ0UsIEJPTkRfVkxBTl9JRCwgQk9ORF9WTEFOX0lEKTtcbiYjNDM7XHRTWVMoZmFpbCwgXCYjMzQ7aXAgbGluayBzZXQgZGV2ICVzLiVkIHVwXCYjMzQ7LCBCT05EX0lGQUNFLCBCT05EX1ZMQU5fSUQpO1xuJiM0MztcdFNZUyhmYWlsLCBcJiMzNDtpcCByb3V0ZSBhZGQgJXMvMzIgZGV2ICVzLiVkXCYjMzQ7LFxuJiM0MztcdCAgICBJUFY0X0JPTkRfVkxBTl9EU1QsIEJPTkRfSUZBQ0UsIEJPTkRfVkxBTl9JRCk7XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogYSBWUkYgd2l0aCBpdHMgb3duIGRlZGljYXRlZCBzdWJpbnRlcmZhY2UgKHRoZSBpaWYgcnVsZXMgYWJvdmVcbiYjNDM7XHQgKiBtdXN0IG5vdCBzZWUgaXQpLCBmb3IgdGhlIHRhYmxlLXNlbGVjdGlvbi1ieS1pbmdyZXNzIGNhc2VzXG4mIzQzO1x0ICovXG4mIzQzO1x0U1lTKGZhaWwsIFwmIzM0O2lwIGxpbmsgYWRkICVzIHR5cGUgdnJmIHRhYmxlICVzXCYjMzQ7LCBWUkZfSUZBQ0UsIFZSRl9UQUJMRSk7XG4mIzQzO1x0U1lTKGZhaWwsIFwmIzM0O2lwIGxpbmsgc2V0IGRldiAlcyB1cFwmIzM0OywgVlJGX0lGQUNFKTtcbiYjNDM7XHRTWVMoZmFpbCwgXCYjMzQ7aXAgbGluayBhZGQgbGluayB2ZXRoMSBuYW1lICVzIHR5cGUgdmxhbiBpZCAlZFwmIzM0OyxcbiYjNDM7XHQgICAgVlJGX1ZMQU5fSUZBQ0UsIFZSRl9WTEFOX0lEKTtcbiYjNDM7XHRTWVMoZmFpbCwgXCYjMzQ7aXAgbGluayBzZXQgJXMgbWFzdGVyICVzXCYjMzQ7LCBWUkZfVkxBTl9JRkFDRSwgVlJGX0lGQUNFKTtcbiYjNDM7XHRTWVMoZmFpbCwgXCYjMzQ7aXAgbGluayBzZXQgZGV2ICVzIHVwXCYjMzQ7LCBWUkZfVkxBTl9JRkFDRSk7XG4mIzQzO1x0U1lTKGZhaWwsIFwmIzM0O2lwIGFkZHIgYWRkICVzLzI0IGRldiAlc1wmIzM0OywgSVBWNF9WUkZfSUZBQ0VfQUREUiwgVlJGX1ZMQU5fSUZBQ0UpO1xuJiM0MztcdGVyciA9IHdyaXRlX3N5c2N0bChcJiMzNDsvcHJvYy9zeXMvbmV0L2lwdjQvY29uZi9cJiMzNDsgVlJGX1ZMQU5fSUZBQ0UgXCYjMzQ7L2ZvcndhcmRpbmdcJiMzNDssIFwmIzM0OzFcJiMzNDspO1xuJiM0MztcdGlmICghQVNTRVJUX09LKGVyciwgXCYjMzQ7d3JpdGVfc3lzY3RsKG5ldC5pcHY0LmNvbmYuXCYjMzQ7IFZSRl9WTEFOX0lGQUNFIFwmIzM0Oy5mb3J3YXJkaW5nKVwmIzM0OykpXG4mIzQzO1x0XHRnb3RvIGZhaWw7XG4mIzQzO1x0U1lTKGZhaWwsIFwmIzM0O2lwIHJvdXRlIGFkZCAlcy8zMiB2aWEgJXNcJiMzNDssIElQVjRfVlJGX0RTVCwgSVBWNF9HVzEpO1xuJiM0MztcdFNZUyhmYWlsLCBcJiMzNDtpcCByb3V0ZSBhZGQgdGFibGUgJXMgJXMvMzIgdmlhICVzXCYjMzQ7LFxuJiM0MztcdCAgICBWUkZfVEFCTEUsIElQVjRfVlJGX0RTVCwgSVBWNF9WUkZfR1cpO1xuJiM0MztcbiYjNDM7XHQvKiBuZWlnaGJvdXJzIG9uIHRoZSBWTEFOIHN1YmludGVyZmFjZSBmb3IgdGhlIG5vbi1TS0lQX05FSUdIIGNhc2VzICovXG4mIzQzO1x0ZXJyID0gd3JpdGVfc3lzY3RsKFwmIzM0Oy9wcm9jL3N5cy9uZXQvaXB2NC9uZWlnaC9cJiMzNDsgVkxBTl9JRkFDRSBcJiMzNDsvZ2Nfc3RhbGVfdGltZVwmIzM0OywgXCYjMzQ7OTAwXCYjMzQ7KTtcbiYjNDM7XHRpZiAoIUFTU0VSVF9PSyhlcnIsIFwmIzM0O3dyaXRlX3N5c2N0bChuZXQuaXB2NC5uZWlnaC5cJiMzNDsgVkxBTl9JRkFDRSBcJiMzNDsuZ2Nfc3RhbGVfdGltZSlcJiMzNDspKVxuJiM0MztcdFx0Z290byBmYWlsO1xuJiM0MztcdFNZUyhmYWlsLCBcJiMzNDtpcCBuZWlnaCBhZGQgJXMgZGV2ICVzIGxsYWRkciAlcyBudWQgc3RhbGVcJiMzNDssXG4mIzQzO1x0ICAgIElQVjRfVkxBTl9FR1JFU1NfRFNULCBWTEFOX0lGQUNFLCBETUFDKTtcbiYjNDM7XHRTWVMoZmFpbCwgXCYjMzQ7aXAgbmVpZ2ggYWRkICVzIGRldiAlcyBsbGFkZHIgJXMgbnVkIHN0YWxlXCYjMzQ7LFxuJiM0MztcdCAgICBJUFY0X1ZMQU5fR1csIFZMQU5fSUZBQ0UsIERNQUMyKTtcbiYjNDM7XG4mIzQzO1x0LyogYSBWTEFOIG9uIHZldGgyIHdpdGggYSByb3V0ZSBpbiB0aGUgdGJpZCB0ZXN0IHRhYmxlICovXG4mIzQzO1x0U1lTKGZhaWwsIFwmIzM0O2lwIGxpbmsgYWRkIGxpbmsgdmV0aDIgbmFtZSAlcyB0eXBlIHZsYW4gaWQgJWRcJiMzNDssXG4mIzQzO1x0ICAgIFRCSURfVkxBTl9JRkFDRSwgVEJJRF9WTEFOX0lEKTtcbiYjNDM7XHRTWVMoZmFpbCwgXCYjMzQ7aXAgbGluayBzZXQgZGV2ICVzIHVwXCYjMzQ7LCBUQklEX1ZMQU5fSUZBQ0UpO1xuJiM0MztcdFNZUyhmYWlsLCBcJiMzNDtpcCByb3V0ZSBhZGQgdGFibGUgMTAwICVzLzMyIGRldiAlc1wmIzM0OyxcbiYjNDM7XHQgICAgSVBWNF9UQklEX1ZMQU5fRFNULCBUQklEX1ZMQU5fSUZBQ0UpO1xuJiM0MztcbiYjNDM7XHQvKiBhIGxvY2tlZC1tdHUgcm91dGUgdmlhIHRoZSBzdWJpbnRlcmZhY2UgZm9yIHRoZSBGUkFHX05FRURFRCBjYXNlICovXG4mIzQzO1x0U1lTKGZhaWwsIFwmIzM0O2lwIHJvdXRlIGFkZCAlcy8zMiBkZXYgJXMgbXR1IGxvY2sgMTAwMFwmIzM0OyxcbiYjNDM7XHQgICAgSVBWNF9WTEFOX01UVV9EU1QsIFZMQU5fSUZBQ0UpO1xuJiM0MztcbiBcdHJldHVybiAwO1xuIGZhaWw6XG4gXHRyZXR1cm4gLTE7XG5AQCAtMjE4LDkgJiM0Mzs1OTMsMTYgQEAgc3RhdGljIGludCBzZXRfbG9va3VwX3BhcmFtcyhzdHJ1Y3QgYnBmX2ZpYl9sb29rdXAgKnBhcmFtcyxcbiBcdG1lbXNldChwYXJhbXMsIDAsIHNpemVvZigqcGFyYW1zKSk7XG4gXG4gXHRwYXJhbXMtXHUwMDNlbDRfcHJvdG9jb2wgPSBJUFBST1RPX1RDUDtcbi1cdHBhcmFtcy1cdTAwM2VpZmluZGV4ID0gaWZpbmRleDtcbiYjNDM7XHRwYXJhbXMtXHUwMDNlaWZpbmRleCA9IHRlc3QtXHUwMDNlaWlmID8gaWZfbmFtZXRvaW5kZXgodGVzdC1cdTAwM2VpaWYpIDogaWZpbmRleDtcbiBcdHBhcmFtcy1cdTAwM2V0YmlkID0gdGVzdC1cdTAwM2V0YmlkO1xuIFx0cGFyYW1zLVx1MDAzZW1hcmsgPSB0ZXN0LVx1MDAzZW1hcms7XG4mIzQzO1x0cGFyYW1zLVx1MDAzZXRvdF9sZW4gPSB0ZXN0LVx1MDAzZXRvdF9sZW47XG4mIzQzO1xuJiM0MztcdC8qIGhfdmxhbl9wcm90by9oX3ZsYW5fVENJIHVuaW9uIHdpdGggdGJpZCAqL1xuJiM0MztcdGlmICh0ZXN0LVx1MDAzZWxvb2t1cF9mbGFncyBcdTAwMjYgQlBGX0ZJQl9MT09LVVBfVkxBTl9JTlBVVCkge1xuJiM0MztcdFx0cGFyYW1zLVx1MDAzZWhfdmxhbl9wcm90byA9IGh0b25zKHRlc3QtXHUwMDNldmxhbl9wcm90byk7XG4mIzQzO1x0XHRwYXJhbXMtXHUwMDNlaF92bGFuX1RDSSA9IGh0b25zKHRlc3QtXHUwMDNldmxhbl9pZCk7XG4mIzQzO1x0fVxuIFxuIFx0aWYgKGluZXRfcHRvbihBRl9JTkVUNiwgdGVzdC1cdTAwM2VkYWRkciwgcGFyYW1zLVx1MDAzZWlwdjZfZHN0KSA9PSAxKSB7XG4gXHRcdHBhcmFtcy1cdTAwM2VmYW1pbHkgPSBBRl9JTkVUNjtcbkBAIC0yOTgsNyAmIzQzOzY4MCw3IEBAIHZvaWQgdGVzdF9maWJfbG9va3VwKHZvaWQpXG4gXHRzdHJ1Y3QgbnN0b2tlbiAqbnN0b2tlbiA9IE5VTEw7XG4gXHRzdHJ1Y3QgX19za19idWZmIHNrYiA9IHsgfTtcbiBcdHN0cnVjdCBmaWJfbG9va3VwICpza2VsO1xuLVx0aW50IHByb2dfZmQsIGVyciwgcmV0LCBpO1xuJiM0MztcdGludCBwcm9nX2ZkLCB4ZHBfZmQsIGVyciwgcmV0LCBpO1xuIFxuIFx0LyogVGhlIHRlc3QgZG9lcyBub3QgdXNlIHRoZSBza2ItXHUwMDNlZGF0YSwgc29cbiBcdCAqIHVzZSBwa3RfdjYgZm9yIGJvdGggdjYgYW5kIHY0IHRlc3QuXG5AQCAtMzA5LDExICYjNDM7NjkxLDE2IEBAIHZvaWQgdGVzdF9maWJfbG9va3VwKHZvaWQpXG4gXHRcdCAgICAuY3R4X2luID0gXHUwMDI2c2tiLFxuIFx0XHQgICAgLmN0eF9zaXplX2luID0gc2l6ZW9mKHNrYiksXG4gXHQpO1xuJiM0MztcdExJQkJQRl9PUFRTKGJwZl90ZXN0X3J1bl9vcHRzLCB4ZHBfb3B0cyxcbiYjNDM7XHRcdCAgICAuZGF0YV9pbiA9IFx1MDAyNnBrdF92NixcbiYjNDM7XHRcdCAgICAuZGF0YV9zaXplX2luID0gc2l6ZW9mKHBrdF92NiksXG4mIzQzO1x0KTtcbiBcbiBcdHNrZWwgPSBmaWJfbG9va3VwX19vcGVuX2FuZF9sb2FkKCk7XG4gXHRpZiAoIUFTU0VSVF9PS19QVFIoc2tlbCwgXCYjMzQ7c2tlbCBvcGVuX2FuZF9sb2FkXCYjMzQ7KSlcbiBcdFx0cmV0dXJuO1xuIFx0cHJvZ19mZCA9IGJwZl9wcm9ncmFtX19mZChza2VsLVx1MDAzZXByb2dzLmZpYl9sb29rdXApO1xuJiM0MztcdHhkcF9mZCA9IGJwZl9wcm9ncmFtX19mZChza2VsLVx1MDAzZXByb2dzLmZpYl9sb29rdXBfeGRwKTtcbiBcbiBcdFNZUyhmYWlsLCBcJiMzNDtpcCBuZXRucyBhZGQgJXNcJiMzNDssIE5TX1RFU1QpO1xuIFxuQEAgLTM0Myw2ICYjNDM7NzMwLDE1IEBAIHZvaWQgdGVzdF9maWJfbG9va3VwKHZvaWQpXG4gXHRcdGlmICghQVNTRVJUX09LKGVyciwgXCYjMzQ7YnBmX3Byb2dfdGVzdF9ydW5fb3B0c1wmIzM0OykpXG4gXHRcdFx0Y29udGludWU7XG4gXG4mIzQzO1x0XHQvKiBCUEZfRklCX0xPT0tVUF9WTEFOIGlzIFhEUC1vbmx5OyB0aGUgdGMgaGVscGVyIHJlamVjdHMgaXQuXG4mIzQzO1x0XHQgKiBUaGVzZSBjYXNlcyBhcmUgZXhlcmNpc2VkIG9uIHRoZSBYRFAgcGF0aCBiZWxvdy5cbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0aWYgKHRlc3RzW2ldLmxvb2t1cF9mbGFncyBcdTAwMjYgQlBGX0ZJQl9MT09LVVBfVkxBTikge1xuJiM0MztcdFx0XHRBU1NFUlRfRVEoc2tlbC1cdTAwM2Vic3MtXHUwMDNlZmliX2xvb2t1cF9yZXQsIC1FSU5WQUwsXG4mIzQzO1x0XHRcdFx0ICBcJiMzNDt0YyByZWplY3RzIEJQRl9GSUJfTE9PS1VQX1ZMQU5cJiMzNDspO1xuJiM0MztcdFx0XHRjb250aW51ZTtcbiYjNDM7XHRcdH1cbiYjNDM7XG4gXHRcdEFTU0VSVF9FUShza2VsLVx1MDAzZWJzcy1cdTAwM2VmaWJfbG9va3VwX3JldCwgdGVzdHNbaV0uZXhwZWN0ZWRfcmV0LFxuIFx0XHRcdCAgXCYjMzQ7ZmliX2xvb2t1cF9yZXRcJiMzNDspO1xuIFxuQEAgLTM1Miw2ICYjNDM7NzQ4LDIxIEBAIHZvaWQgdGVzdF9maWJfbG9va3VwKHZvaWQpXG4gXHRcdGlmICh0ZXN0c1tpXS5leHBlY3RlZF9kc3QpXG4gXHRcdFx0YXNzZXJ0X2RzdF9pcChmaWJfcGFyYW1zLCB0ZXN0c1tpXS5leHBlY3RlZF9kc3QpO1xuIFxuJiM0MztcdFx0aWYgKHRlc3RzW2ldLmV4cGVjdGVkX2RldilcbiYjNDM7XHRcdFx0QVNTRVJUX0VRKGZpYl9wYXJhbXMtXHUwMDNlaWZpbmRleCxcbiYjNDM7XHRcdFx0XHQgIGlmX25hbWV0b2luZGV4KHRlc3RzW2ldLmV4cGVjdGVkX2RldiksIFwmIzM0O2lmaW5kZXhcJiMzNDspO1xuJiM0MztcbiYjNDM7XHRcdGlmICh0ZXN0c1tpXS5leHBlY3RlZF9tdHUpXG4mIzQzO1x0XHRcdEFTU0VSVF9FUShmaWJfcGFyYW1zLVx1MDAzZW10dV9yZXN1bHQsIHRlc3RzW2ldLmV4cGVjdGVkX210dSxcbiYjNDM7XHRcdFx0XHQgIFwmIzM0O210dV9yZXN1bHRcJiMzNDspO1xuJiM0MztcbiYjNDM7XHRcdGlmICh0ZXN0c1tpXS5jaGVja192bGFuKSB7XG4mIzQzO1x0XHRcdEFTU0VSVF9FUShmaWJfcGFyYW1zLVx1MDAzZWhfdmxhbl9wcm90byxcbiYjNDM7XHRcdFx0XHQgIGh0b25zKHRlc3RzW2ldLnZsYW5fcHJvdG8pLCBcJiMzNDtoX3ZsYW5fcHJvdG9cJiMzNDspO1xuJiM0MztcdFx0XHRBU1NFUlRfRVEoZmliX3BhcmFtcy1cdTAwM2VoX3ZsYW5fVENJLFxuJiM0MztcdFx0XHRcdCAgaHRvbnModGVzdHNbaV0udmxhbl9pZCksIFwmIzM0O2hfdmxhbl9UQ0lcJiMzNDspO1xuJiM0MztcdFx0fVxuJiM0MztcbiBcdFx0cmV0ID0gbWVtY21wKHRlc3RzW2ldLmRtYWMsIGZpYl9wYXJhbXMtXHUwMDNlZG1hYywgc2l6ZW9mKHRlc3RzW2ldLmRtYWMpKTtcbiBcdFx0aWYgKCFBU1NFUlRfRVEocmV0LCAwLCBcJiMzNDtkbWFjIG5vdCBtYXRjaFwmIzM0OykpIHtcbiBcdFx0XHRjaGFyIGV4cGVjdGVkWzE4XSwgYWN0dWFsWzE4XTtcbkBAIC0zNjEsMTUgJiM0Mzs3NzIsMzEzIEBAIHZvaWQgdGVzdF9maWJfbG9va3VwKHZvaWQpXG4gXHRcdFx0cHJpbnRmKFwmIzM0O2RtYWMgZXhwZWN0ZWQgJXMgYWN0dWFsICVzIFwmIzM0OywgZXhwZWN0ZWQsIGFjdHVhbCk7XG4gXHRcdH1cbiBcbi1cdFx0Ly8gZW5zdXJlIHRiaWQgaXMgemVybyYjMzk7ZCBvdXQgYWZ0ZXIgZmliIGxvb2t1cC5cbi1cdFx0aWYgKHRlc3RzW2ldLmxvb2t1cF9mbGFncyBcdTAwMjYgQlBGX0ZJQl9MT09LVVBfRElSRUNUKSB7XG4mIzQzO1x0XHQvKlxuJiM0MztcdFx0ICogZW5zdXJlIHRiaWQgaXMgemVybyYjMzk7ZCBvdXQgYWZ0ZXIgZmliIGxvb2t1cC4gV2l0aFxuJiM0MztcdFx0ICogQlBGX0ZJQl9MT09LVVBfVkxBTiB0aGUgdW5pb24gaG9sZHMgdGhlIHBhY2tlZCB2bGFuXG4mIzQzO1x0XHQgKiBmaWVsZHMgaW5zdGVhZCwgc28gc2tpcCB0aGUgY2hlY2sgZm9yIHRob3NlLlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRpZiAoKHRlc3RzW2ldLmxvb2t1cF9mbGFncyBcdTAwMjYgQlBGX0ZJQl9MT09LVVBfRElSRUNUKSBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdCAgICAhKHRlc3RzW2ldLmxvb2t1cF9mbGFncyBcdTAwMjYgQlBGX0ZJQl9MT09LVVBfVkxBTikpIHtcbiBcdFx0XHRpZiAoIUFTU0VSVF9FUShza2VsLVx1MDAzZWJzcy1cdTAwM2VmaWJfcGFyYW1zLnRiaWQsIDAsXG4gXHRcdFx0XHRcdFwmIzM0O2V4cGVjdGVkIGZpYl9wYXJhbXMudGJpZCB0byBiZSB6ZXJvXCYjMzQ7KSlcbiBcdFx0XHRcdGdvdG8gZmFpbDtcbiBcdFx0fVxuIFx0fVxuIFxuJiM0MztcdC8qXG4mIzQzO1x0ICogUmUtcnVuIHRoZSBjYXNlcyB0aHJvdWdoIGJwZl94ZHBfZmliX2xvb2t1cCgpLiB0ZXN0X3J1biB1c2VzIHRoZVxuJiM0MztcdCAqIGN1cnJlbnQgbmV0bnMmIzM5OyBsb29wYmFjayBmb3IgY3R4LVx1MDAzZXJ4cS1cdTAwM2VkZXYsIHNvIGRldl9uZXQoKSBpcyBOU19URVNUXG4mIzQzO1x0ICogYW5kIHRoZSBsb29rdXAgcnVucyBhZ2FpbnN0IGl0cyBGSUIuIFRoZSBwYXRoLWluZGVwZW5kZW50IHJlc3VsdHNcbiYjNDM7XHQgKiAocmV0dXJuIGNvZGUsIHN3YXBwZWQgaWZpbmRleCwgdmxhbiB0YWcsIGdhdGV3YXkpIG11c3QgbWF0Y2ggdGhlIHNrYlxuJiM0MztcdCAqIHBhdGg7IHRoZSBuby10b3RfbGVuIG10dV9yZXN1bHQgaXMgc2tiLXNwZWNpZmljIGFuZCBub3QgcmVjaGVja2VkLlxuJiM0MztcdCAqL1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIEFSUkFZX1NJWkUodGVzdHMpOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0aWYgKHNldF9sb29rdXBfcGFyYW1zKGZpYl9wYXJhbXMsIFx1MDAyNnRlc3RzW2ldLCBza2IuaWZpbmRleCkpXG4mIzQzO1x0XHRcdGNvbnRpbnVlO1xuJiM0MztcbiYjNDM7XHRcdHNrZWwtXHUwMDNlYnNzLVx1MDAzZWZpYl9sb29rdXBfcmV0ID0gLTE7XG4mIzQzO1x0XHRza2VsLVx1MDAzZWJzcy1cdTAwM2Vsb29rdXBfZmxhZ3MgPSB0ZXN0c1tpXS5sb29rdXBfZmxhZ3M7XG4mIzQzO1xuJiM0MztcdFx0ZXJyID0gYnBmX3Byb2dfdGVzdF9ydW5fb3B0cyh4ZHBfZmQsIFx1MDAyNnhkcF9vcHRzKTtcbiYjNDM7XHRcdGlmICghQVNTRVJUX09LKGVyciwgXCYjMzQ7eGRwIHRlc3RfcnVuXCYjMzQ7KSlcbiYjNDM7XHRcdFx0Y29udGludWU7XG4mIzQzO1xuJiM0MztcdFx0aWYgKCFBU1NFUlRfRVEoc2tlbC1cdTAwM2Vic3MtXHUwMDNlZmliX2xvb2t1cF9yZXQsIHRlc3RzW2ldLmV4cGVjdGVkX3JldCxcbiYjNDM7XHRcdFx0ICAgICAgIFwmIzM0O3hkcCBmaWJfbG9va3VwX3JldFwmIzM0OykpXG4mIzQzO1x0XHRcdHByaW50ZihcJiMzNDsoeGRwKSAlc1xcblwmIzM0OywgdGVzdHNbaV0uZGVzYyk7XG4mIzQzO1xuJiM0MztcdFx0aWYgKHRlc3RzW2ldLmV4cGVjdGVkX2RldilcbiYjNDM7XHRcdFx0QVNTRVJUX0VRKGZpYl9wYXJhbXMtXHUwMDNlaWZpbmRleCxcbiYjNDM7XHRcdFx0XHQgIGlmX25hbWV0b2luZGV4KHRlc3RzW2ldLmV4cGVjdGVkX2RldiksXG4mIzQzO1x0XHRcdFx0ICBcJiMzNDt4ZHAgaWZpbmRleFwmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdFx0aWYgKHRlc3RzW2ldLmV4cGVjdGVkX2RzdClcbiYjNDM7XHRcdFx0YXNzZXJ0X2RzdF9pcChmaWJfcGFyYW1zLCB0ZXN0c1tpXS5leHBlY3RlZF9kc3QpO1xuJiM0MztcbiYjNDM7XHRcdGlmICh0ZXN0c1tpXS5jaGVja192bGFuKSB7XG4mIzQzO1x0XHRcdEFTU0VSVF9FUShmaWJfcGFyYW1zLVx1MDAzZWhfdmxhbl9wcm90byxcbiYjNDM7XHRcdFx0XHQgIGh0b25zKHRlc3RzW2ldLnZsYW5fcHJvdG8pLCBcJiMzNDt4ZHAgaF92bGFuX3Byb3RvXCYjMzQ7KTtcbiYjNDM7XHRcdFx0QVNTRVJUX0VRKGZpYl9wYXJhbXMtXHUwMDNlaF92bGFuX1RDSSxcbiYjNDM7XHRcdFx0XHQgIGh0b25zKHRlc3RzW2ldLnZsYW5faWQpLCBcJiMzNDt4ZHAgaF92bGFuX1RDSVwmIzM0Oyk7XG4mIzQzO1x0XHR9XG4mIzQzO1xuJiM0MztcdFx0cmV0ID0gbWVtY21wKHRlc3RzW2ldLmRtYWMsIGZpYl9wYXJhbXMtXHUwMDNlZG1hYywgc2l6ZW9mKHRlc3RzW2ldLmRtYWMpKTtcbiYjNDM7XHRcdEFTU0VSVF9FUShyZXQsIDAsIFwmIzM0O3hkcCBkbWFjXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO1x0XHQvKlxuJiM0MztcdFx0ICogbXR1X3Jlc3VsdCBmcm9tIGEgdG90X2xlbiBsb29rdXAgaXMgdGhlIHJvdXRlIG10dSBhbmQgaXNcbiYjNDM7XHRcdCAqIHBhdGgtaW5kZXBlbmRlbnQ7IHRoZSBuby10b3RfbGVuIGFybSByZWFkcyBkZXYtXHUwMDNlbXR1IGFuZCBpc1xuJiM0MztcdFx0ICogc2tiLW9ubHksIHNvIGdhdGUgb24gdG90X2xlblxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRpZiAodGVzdHNbaV0uZXhwZWN0ZWRfbXR1IFx1MDAyNlx1MDAyNiB0ZXN0c1tpXS50b3RfbGVuKVxuJiM0MztcdFx0XHRBU1NFUlRfRVEoZmliX3BhcmFtcy1cdTAwM2VtdHVfcmVzdWx0LCB0ZXN0c1tpXS5leHBlY3RlZF9tdHUsXG4mIzQzO1x0XHRcdFx0ICBcJiMzNDt4ZHAgbXR1X3Jlc3VsdFwmIzM0Oyk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7ZmFpbDpcbiYjNDM7XHRpZiAobnN0b2tlbilcbiYjNDM7XHRcdGNsb3NlX25ldG5zKG5zdG9rZW4pO1xuJiM0MztcdFNZU19OT0ZBSUwoXCYjMzQ7aXAgbmV0bnMgZGVsIFwmIzM0OyBOU19URVNUKTtcbiYjNDM7XHRmaWJfbG9va3VwX19kZXN0cm95KHNrZWwpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsjZGVmaW5lIE5TX1ZMQU5fQVx0XCYjMzQ7ZmliX2xvb2t1cF92bGFuX25zX2FcJiMzNDtcbiYjNDM7I2RlZmluZSBOU19WTEFOX0JcdFwmIzM0O2ZpYl9sb29rdXBfdmxhbl9uc19iXCYjMzQ7XG4mIzQzO1xuJiM0MzsvKlxuJiM0MzsgKiBBIFZMQU4gZGV2aWNlIGNhbiBiZSBtb3ZlZCB0byBhbm90aGVyIG5ldG5zIHdoaWxlIHN0YXlpbmcgcmVnaXN0ZXJlZFxuJiM0MzsgKiBvbiBpdHMgcGFyZW50LiBOZWl0aGVyIGRpcmVjdGlvbiBtYXkgdGhlbiBjcm9zcyB0aGUgYm91bmRhcnk6IHRoZVxuJiM0MzsgKiBlZ3Jlc3MgZmxhZyBtdXN0IG5vdCBwdWJsaXNoIHRoZSBmb3JlaWduIHBhcmVudCYjMzk7cyBpZmluZGV4LCBhbmQgdGhlXG4mIzQzOyAqIGlucHV0IGZsYWcgbXVzdCBmYWlsIGNsb3NlZCByYXRoZXIgdGhhbiB1c2UgYSBmb3JlaWduIGluZ3Jlc3MuXG4mIzQzOyAqL1xuJiM0Mzt2b2lkIHRlc3RfZmliX2xvb2t1cF92bGFuX25ldG5zKHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgYnBmX2ZpYl9sb29rdXAgKmZpYl9wYXJhbXM7XG4mIzQzO1x0c3RydWN0IG5zdG9rZW4gKm5zdG9rZW4gPSBOVUxMO1xuJiM0MztcdHN0cnVjdCBfX3NrX2J1ZmYgc2tiID0geyB9O1xuJiM0MztcdHN0cnVjdCBmaWJfbG9va3VwICpza2VsID0gTlVMTDtcbiYjNDM7XHRpbnQgcHJvZ19mZCwgeGRwX2ZkLCBlcnIsIHBhcmVudF9pZHgsIHZsYW5faWR4O1xuJiM0MztcbiYjNDM7XHRMSUJCUEZfT1BUUyhicGZfdGVzdF9ydW5fb3B0cywgcnVuX29wdHMsXG4mIzQzO1x0XHQgICAgLmRhdGFfaW4gPSBcdTAwMjZwa3RfdjYsXG4mIzQzO1x0XHQgICAgLmRhdGFfc2l6ZV9pbiA9IHNpemVvZihwa3RfdjYpLFxuJiM0MztcdFx0ICAgIC5jdHhfaW4gPSBcdTAwMjZza2IsXG4mIzQzO1x0XHQgICAgLmN0eF9zaXplX2luID0gc2l6ZW9mKHNrYiksXG4mIzQzO1x0KTtcbiYjNDM7XHRMSUJCUEZfT1BUUyhicGZfdGVzdF9ydW5fb3B0cywgeGRwX29wdHMsXG4mIzQzO1x0XHQgICAgLmRhdGFfaW4gPSBcdTAwMjZwa3RfdjYsXG4mIzQzO1x0XHQgICAgLmRhdGFfc2l6ZV9pbiA9IHNpemVvZihwa3RfdjYpLFxuJiM0MztcdCk7XG4mIzQzO1xuJiM0MztcdHNrZWwgPSBmaWJfbG9va3VwX19vcGVuX2FuZF9sb2FkKCk7XG4mIzQzO1x0aWYgKCFBU1NFUlRfT0tfUFRSKHNrZWwsIFwmIzM0O3NrZWwgb3Blbl9hbmRfbG9hZFwmIzM0OykpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1x0cHJvZ19mZCA9IGJwZl9wcm9ncmFtX19mZChza2VsLVx1MDAzZXByb2dzLmZpYl9sb29rdXApO1xuJiM0MztcdHhkcF9mZCA9IGJwZl9wcm9ncmFtX19mZChza2VsLVx1MDAzZXByb2dzLmZpYl9sb29rdXBfeGRwKTtcbiYjNDM7XHRmaWJfcGFyYW1zID0gXHUwMDI2c2tlbC1cdTAwM2Vic3MtXHUwMDNlZmliX3BhcmFtcztcbiYjNDM7XG4mIzQzO1x0U1lTKGZhaWwsIFwmIzM0O2lwIG5ldG5zIGFkZCAlc1wmIzM0OywgTlNfVkxBTl9BKTtcbiYjNDM7XHRTWVMoZmFpbCwgXCYjMzQ7aXAgbmV0bnMgYWRkICVzXCYjMzQ7LCBOU19WTEFOX0IpO1xuJiM0MztcbiYjNDM7XHRuc3Rva2VuID0gb3Blbl9uZXRucyhOU19WTEFOX0EpO1xuJiM0MztcdGlmICghQVNTRVJUX09LX1BUUihuc3Rva2VuLCBcJiMzNDtvcGVuX25ldG5zKGEpXCYjMzQ7KSlcbiYjNDM7XHRcdGdvdG8gZmFpbDtcbiYjNDM7XG4mIzQzO1x0U1lTKGZhaWwsIFwmIzM0O2lwIGxpbmsgYWRkIHZldGg3IHR5cGUgdmV0aCBwZWVyIG5hbWUgdmV0aDhcJiMzNDspO1xuJiM0MztcdFNZUyhmYWlsLCBcJiMzNDtpcCBsaW5rIHNldCBkZXYgdmV0aDcgdXBcJiMzNDspO1xuJiM0MztcdFNZUyhmYWlsLCBcJiMzNDtpcCBsaW5rIGFkZCBsaW5rIHZldGg3IG5hbWUgdmV0aDcuNjYgdHlwZSB2bGFuIGlkIDY2XCYjMzQ7KTtcbiYjNDM7XHRTWVMoZmFpbCwgXCYjMzQ7aXAgbGluayBzZXQgdmV0aDcuNjYgbmV0bnMgJXNcJiMzNDssIE5TX1ZMQU5fQik7XG4mIzQzO1xuJiM0MztcdHBhcmVudF9pZHggPSBpZl9uYW1ldG9pbmRleChcJiMzNDt2ZXRoN1wmIzM0Oyk7XG4mIzQzO1x0aWYgKCFBU1NFUlRfTkVRKHBhcmVudF9pZHgsIDAsIFwmIzM0O2lmX25hbWV0b2luZGV4KHZldGg3KVwmIzM0OykpXG4mIzQzO1x0XHRnb3RvIGZhaWw7XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogaW5wdXQ6IHRoZSBtb3ZlZCBkZXZpY2UgaXMgc3RpbGwgaW4gdmV0aDcmIzM5O3MgVkxBTiBncm91cCwgYnV0IGl0XG4mIzQzO1x0ICogbGl2ZXMgaW4gYW5vdGhlciBuZXRucywgc28gdGhlIGxvb2t1cCBtdXN0IGZhaWwgY2xvc2VkXG4mIzQzO1x0ICovXG4mIzQzO1x0c2tiLmlmaW5kZXggPSBwYXJlbnRfaWR4O1xuJiM0MztcdG1lbXNldChmaWJfcGFyYW1zLCAwLCBzaXplb2YoKmZpYl9wYXJhbXMpKTtcbiYjNDM7XHRmaWJfcGFyYW1zLVx1MDAzZWZhbWlseSA9IEFGX0lORVQ7XG4mIzQzO1x0ZmliX3BhcmFtcy1cdTAwM2VsNF9wcm90b2NvbCA9IElQUFJPVE9fVENQO1xuJiM0MztcdGZpYl9wYXJhbXMtXHUwMDNlaWZpbmRleCA9IHBhcmVudF9pZHg7XG4mIzQzO1x0ZmliX3BhcmFtcy1cdTAwM2VoX3ZsYW5fcHJvdG8gPSBodG9ucyhFVEhfUF84MDIxUSk7XG4mIzQzO1x0ZmliX3BhcmFtcy1cdTAwM2VoX3ZsYW5fVENJID0gaHRvbnMoNjYpO1xuJiM0MztcdGlmICghQVNTRVJUX0VRKGluZXRfcHRvbihBRl9JTkVULCBcJiMzNDsxMC42Ni4wLjJcJiMzNDssIFx1MDAyNmZpYl9wYXJhbXMtXHUwMDNlaXB2NF9kc3QpLFxuJiM0MztcdFx0ICAgICAgIDEsIFwmIzM0O2luZXRfcHRvbihkc3QpXCYjMzQ7KSlcbiYjNDM7XHRcdGdvdG8gZmFpbDtcbiYjNDM7XG4mIzQzO1x0c2tlbC1cdTAwM2Vic3MtXHUwMDNlZmliX2xvb2t1cF9yZXQgPSAtMTtcbiYjNDM7XHRza2VsLVx1MDAzZWJzcy1cdTAwM2Vsb29rdXBfZmxhZ3MgPSBCUEZfRklCX0xPT0tVUF9WTEFOX0lOUFVUIHxcbiYjNDM7XHRcdFx0XHQgIEJQRl9GSUJfTE9PS1VQX1NLSVBfTkVJR0g7XG4mIzQzO1x0ZXJyID0gYnBmX3Byb2dfdGVzdF9ydW5fb3B0cyhwcm9nX2ZkLCBcdTAwMjZydW5fb3B0cyk7XG4mIzQzO1x0aWYgKCFBU1NFUlRfT0soZXJyLCBcJiMzNDt0ZXN0X3J1bihpbnB1dClcJiMzNDspKVxuJiM0MztcdFx0Z290byBmYWlsO1xuJiM0MztcdEFTU0VSVF9FUShza2VsLVx1MDAzZWJzcy1cdTAwM2VmaWJfbG9va3VwX3JldCwgQlBGX0ZJQl9MS1VQX1JFVF9OT1RfRldERUQsXG4mIzQzO1x0XHQgIFwmIzM0O2lucHV0IGFjcm9zcyBuZXRucyBmYWlscyBjbG9zZWRcJiMzNDspO1xuJiM0MztcdEFTU0VSVF9FUShmaWJfcGFyYW1zLVx1MDAzZWlmaW5kZXgsIHBhcmVudF9pZHgsIFwmIzM0O2lmaW5kZXggdW50b3VjaGVkXCYjMzQ7KTtcbiYjNDM7XHRBU1NFUlRfRVEoZmliX3BhcmFtcy1cdTAwM2VoX3ZsYW5fVENJLCBodG9ucyg2NiksIFwmIzM0O3RhZyB1bnRvdWNoZWRcJiMzNDspO1xuJiM0MztcbiYjNDM7XHRjbG9zZV9uZXRucyhuc3Rva2VuKTtcbiYjNDM7XHRuc3Rva2VuID0gb3Blbl9uZXRucyhOU19WTEFOX0IpO1xuJiM0MztcdGlmICghQVNTRVJUX09LX1BUUihuc3Rva2VuLCBcJiMzNDtvcGVuX25ldG5zKGIpXCYjMzQ7KSlcbiYjNDM7XHRcdGdvdG8gZmFpbDtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBlZ3Jlc3M6IHRoZSBmaWIgcmVzdWx0IGlzIHRoZSBWTEFOIGRldmljZSBoZXJlLCBidXQgaXRzIHBhcmVudFxuJiM0MztcdCAqIGlzIGluIHRoZSBvdGhlciBuZXRucywgc28gdGhlIHN3YXAgbXVzdCBub3QgaGFwcGVuXG4mIzQzO1x0ICovXG4mIzQzO1x0U1lTKGZhaWwsIFwmIzM0O2lwIGxpbmsgc2V0IGRldiB2ZXRoNy42NiB1cFwmIzM0Oyk7XG4mIzQzO1x0U1lTKGZhaWwsIFwmIzM0O2lwIGFkZHIgYWRkIDEwLjY2LjAuMS8yNCBkZXYgdmV0aDcuNjZcJiMzNDspO1xuJiM0MztcdGVyciA9IHdyaXRlX3N5c2N0bChcJiMzNDsvcHJvYy9zeXMvbmV0L2lwdjQvY29uZi92ZXRoNy42Ni9mb3J3YXJkaW5nXCYjMzQ7LCBcJiMzNDsxXCYjMzQ7KTtcbiYjNDM7XHRpZiAoIUFTU0VSVF9PSyhlcnIsIFwmIzM0O3dyaXRlX3N5c2N0bChmb3J3YXJkaW5nKVwmIzM0OykpXG4mIzQzO1x0XHRnb3RvIGZhaWw7XG4mIzQzO1xuJiM0MztcdHZsYW5faWR4ID0gaWZfbmFtZXRvaW5kZXgoXCYjMzQ7dmV0aDcuNjZcJiMzNDspO1xuJiM0MztcdGlmICghQVNTRVJUX05FUSh2bGFuX2lkeCwgMCwgXCYjMzQ7aWZfbmFtZXRvaW5kZXgodmV0aDcuNjYpXCYjMzQ7KSlcbiYjNDM7XHRcdGdvdG8gZmFpbDtcbiYjNDM7XG4mIzQzO1x0c2tiLmlmaW5kZXggPSB2bGFuX2lkeDtcbiYjNDM7XHRtZW1zZXQoZmliX3BhcmFtcywgMCwgc2l6ZW9mKCpmaWJfcGFyYW1zKSk7XG4mIzQzO1x0ZmliX3BhcmFtcy1cdTAwM2VmYW1pbHkgPSBBRl9JTkVUO1xuJiM0MztcdGZpYl9wYXJhbXMtXHUwMDNlbDRfcHJvdG9jb2wgPSBJUFBST1RPX1RDUDtcbiYjNDM7XHRmaWJfcGFyYW1zLVx1MDAzZWlmaW5kZXggPSB2bGFuX2lkeDtcbiYjNDM7XHRpZiAoIUFTU0VSVF9FUShpbmV0X3B0b24oQUZfSU5FVCwgXCYjMzQ7MTAuNjYuMC4yXCYjMzQ7LCBcdTAwMjZmaWJfcGFyYW1zLVx1MDAzZWlwdjRfZHN0KSxcbiYjNDM7XHRcdCAgICAgICAxLCBcJiMzNDtpbmV0X3B0b24oZHN0KVwmIzM0OykgfHxcbiYjNDM7XHQgICAgIUFTU0VSVF9FUShpbmV0X3B0b24oQUZfSU5FVCwgXCYjMzQ7MTAuNjYuMC4xXCYjMzQ7LCBcdTAwMjZmaWJfcGFyYW1zLVx1MDAzZWlwdjRfc3JjKSxcbiYjNDM7XHRcdCAgICAgICAxLCBcJiMzNDtpbmV0X3B0b24oc3JjKVwmIzM0OykpXG4mIzQzO1x0XHRnb3RvIGZhaWw7XG4mIzQzO1xuJiM0MztcdHNrZWwtXHUwMDNlYnNzLVx1MDAzZWZpYl9sb29rdXBfcmV0ID0gLTE7XG4mIzQzO1x0c2tlbC1cdTAwM2Vic3MtXHUwMDNlbG9va3VwX2ZsYWdzID0gQlBGX0ZJQl9MT09LVVBfVkxBTiB8XG4mIzQzO1x0XHRcdFx0ICBCUEZfRklCX0xPT0tVUF9TS0lQX05FSUdIO1xuJiM0MztcdGVyciA9IGJwZl9wcm9nX3Rlc3RfcnVuX29wdHMoeGRwX2ZkLCBcdTAwMjZ4ZHBfb3B0cyk7XG4mIzQzO1x0aWYgKCFBU1NFUlRfT0soZXJyLCBcJiMzNDt0ZXN0X3J1bihlZ3Jlc3MpXCYjMzQ7KSlcbiYjNDM7XHRcdGdvdG8gZmFpbDtcbiYjNDM7XHRBU1NFUlRfRVEoc2tlbC1cdTAwM2Vic3MtXHUwMDNlZmliX2xvb2t1cF9yZXQsIEJQRl9GSUJfTEtVUF9SRVRfVkxBTl9GQUlMVVJFLFxuJiM0MztcdFx0ICBcJiMzNDtlZ3Jlc3MgcmV0dXJucyBWTEFOX0ZBSUxVUkVcJiMzNDspO1xuJiM0MztcdEFTU0VSVF9FUShmaWJfcGFyYW1zLVx1MDAzZWlmaW5kZXgsIHZsYW5faWR4LFxuJiM0MztcdFx0ICBcJiMzNDtmb3JlaWduIHBhcmVudCBub3QgcHVibGlzaGVkXCYjMzQ7KTtcbiYjNDM7XHRBU1NFUlRfRVEoZmliX3BhcmFtcy1cdTAwM2VoX3ZsYW5fVENJLCAwLCBcJiMzNDt2bGFuIGZpZWxkcyB6ZXJvXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO2ZhaWw6XG4mIzQzO1x0aWYgKG5zdG9rZW4pXG4mIzQzO1x0XHRjbG9zZV9uZXRucyhuc3Rva2VuKTtcbiYjNDM7XHRTWVNfTk9GQUlMKFwmIzM0O2lwIG5ldG5zIGRlbCBcJiMzNDsgTlNfVkxBTl9BKTtcbiYjNDM7XHRTWVNfTk9GQUlMKFwmIzM0O2lwIG5ldG5zIGRlbCBcJiMzNDsgTlNfVkxBTl9CKTtcbiYjNDM7XHRmaWJfbG9va3VwX19kZXN0cm95KHNrZWwpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsjZGVmaW5lIFJFRElSRUNUX05QS1RTIDEwMDBcbiYjNDM7XG4mIzQzOy8qXG4mIzQzOyAqIFRoZSBlZ3Jlc3MgZmxhZyBleGlzdHMgc28gYW4gWERQIHByb2dyYW0gY2FuIHJlZGlyZWN0IHRvIHRoZSBwaHlzaWNhbFxuJiM0MzsgKiBwYXJlbnQuIEEgcmVkaXJlY3QgdGhhdCBsYW5kcyBvbiBhIFZMQU4gZGV2aWNlIGlzIGRyb3BwZWQgYXRcbiYjNDM7ICogeGRwX2RvX2ZsdXNoKCksIGJlY2F1c2UgYSBWTEFOIGRldmljZSBoYXMgbm8gbmRvX3hkcF94bWl0LiBEcml2ZSByZWFsXG4mIzQzOyAqIGZyYW1lcyB3aXRoIEJQRl9GX1RFU1RfWERQX0xJVkVfRlJBTUVTLCB3aGljaCBydW5zIHRoZSBuYXRpdmVcbiYjNDM7ICogeGRwX2RvX3JlZGlyZWN0KCkgJiM0MzsgeGRwX2RvX2ZsdXNoKCkgcGF0aDogYSByZWR1Y2libGUgVkxBTiBlZ3Jlc3NcbiYjNDM7ICogcmVzb2x2ZXMgdG8gdmV0aDEgYW5kIGlzIGRlbGl2ZXJlZCB0byBpdHMgcGVlciB2ZXRoMiwgd2hpbGUgYSBRaW5RXG4mIzQzOyAqIGVncmVzcyByZXR1cm5zIFZMQU5fRkFJTFVSRSBhbmQgaXMgcGFzc2VkIHRvIHRoZSBzdGFjayBpbnN0ZWFkIG9mXG4mIzQzOyAqIHJlZGlyZWN0ZWQgdG8gYSBkZXZpY2UgdGhhdCB3b3VsZCBzaWxlbnRseSBkcm9wIGl0LlxuJiM0MzsgKi9cbiYjNDM7dm9pZCB0ZXN0X2ZpYl9sb29rdXBfdmxhbl9yZWRpcmVjdCh2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0aW50IHJlZGlyZWN0X2ZkLCBlcnIsIHZldGgxX2lkeCwgdmV0aDJfaWR4ID0gLTE7XG4mIzQzO1x0c3RydWN0IGJwZl9maWJfbG9va3VwICpmaWJfcGFyYW1zO1xuJiM0MztcdHN0cnVjdCBuc3Rva2VuICpuc3Rva2VuID0gTlVMTDtcbiYjNDM7XHRzdHJ1Y3QgZmliX2xvb2t1cCAqc2tlbCA9IE5VTEw7XG4mIzQzO1x0Ym9vbCB4ZHBfYXR0YWNoZWQgPSBmYWxzZTtcbiYjNDM7XG4mIzQzO1x0TElCQlBGX09QVFMoYnBmX3Rlc3RfcnVuX29wdHMsIGxmX29wdHMsXG4mIzQzO1x0XHQgICAgLmRhdGFfaW4gPSBcdTAwMjZwa3RfdjQsXG4mIzQzO1x0XHQgICAgLmRhdGFfc2l6ZV9pbiA9IHNpemVvZihwa3RfdjQpLFxuJiM0MztcdFx0ICAgIC5mbGFncyA9IEJQRl9GX1RFU1RfWERQX0xJVkVfRlJBTUVTLFxuJiM0MztcdFx0ICAgIC5yZXBlYXQgPSBSRURJUkVDVF9OUEtUUyxcbiYjNDM7XHQpO1xuJiM0MztcbiYjNDM7XHRza2VsID0gZmliX2xvb2t1cF9fb3Blbl9hbmRfbG9hZCgpO1xuJiM0MztcdGlmICghQVNTRVJUX09LX1BUUihza2VsLCBcJiMzNDtza2VsIG9wZW5fYW5kX2xvYWRcJiMzNDspKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcdHJlZGlyZWN0X2ZkID0gYnBmX3Byb2dyYW1fX2ZkKHNrZWwtXHUwMDNlcHJvZ3MuZmliX2xvb2t1cF9yZWRpcmVjdCk7XG4mIzQzO1x0ZmliX3BhcmFtcyA9IFx1MDAyNnNrZWwtXHUwMDNlYnNzLVx1MDAzZWZpYl9wYXJhbXM7XG4mIzQzO1xuJiM0MztcdFNZUyhmYWlsLCBcJiMzNDtpcCBuZXRucyBhZGQgJXNcJiMzNDssIE5TX1RFU1QpO1xuJiM0MztcdG5zdG9rZW4gPSBvcGVuX25ldG5zKE5TX1RFU1QpO1xuJiM0MztcdGlmICghQVNTRVJUX09LX1BUUihuc3Rva2VuLCBcJiMzNDtvcGVuX25ldG5zXCYjMzQ7KSlcbiYjNDM7XHRcdGdvdG8gZmFpbDtcbiYjNDM7XHRpZiAoc2V0dXBfbmV0bnMoKSlcbiYjNDM7XHRcdGdvdG8gZmFpbDtcbiYjNDM7XG4mIzQzO1x0dmV0aDFfaWR4ID0gaWZfbmFtZXRvaW5kZXgoXCYjMzQ7dmV0aDFcJiMzNDspO1xuJiM0MztcdHZldGgyX2lkeCA9IGlmX25hbWV0b2luZGV4KFwmIzM0O3ZldGgyXCYjMzQ7KTtcbiYjNDM7XHRpZiAoIUFTU0VSVF9ORVEodmV0aDFfaWR4LCAwLCBcJiMzNDtpZl9uYW1ldG9pbmRleCh2ZXRoMSlcJiMzNDspIHx8XG4mIzQzO1x0ICAgICFBU1NFUlRfTkVRKHZldGgyX2lkeCwgMCwgXCYjMzQ7aWZfbmFtZXRvaW5kZXgodmV0aDIpXCYjMzQ7KSlcbiYjNDM7XHRcdGdvdG8gZmFpbDtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBBIHJlZGlyZWN0IHRvIHZldGgxIGlzIGRlbGl2ZXJlZCB0byBpdHMgcGVlciB2ZXRoMi4gdmV0aF94ZHBfeG1pdCgpXG4mIzQzO1x0ICogb25seSBhY2NlcHRzIHRoZSBmcmFtZSBpZiB2ZXRoMiYjMzk7cyBOQVBJIGlzIHVwLCB3aGljaCBvbiB2ZXRoIG1lYW5zXG4mIzQzO1x0ICogdmV0aDIgY2FycmllcyBhbiBYRFAgcHJvZ3JhbTsgeGRwX2NvdW50IHRhbGxpZXMgd2hhdCBhcnJpdmVzLlxuJiM0MztcdCAqL1xuJiM0MztcdGVyciA9IGJwZl94ZHBfYXR0YWNoKHZldGgyX2lkeCwgYnBmX3Byb2dyYW1fX2ZkKHNrZWwtXHUwMDNlcHJvZ3MueGRwX2NvdW50KSxcbiYjNDM7XHRcdFx0ICAgICBYRFBfRkxBR1NfRFJWX01PREUsIE5VTEwpO1xuJiM0MztcdGlmICghQVNTRVJUX09LKGVyciwgXCYjMzQ7YXR0YWNoIHhkcF9jb3VudCBvbiB2ZXRoMlwmIzM0OykpXG4mIzQzO1x0XHRnb3RvIGZhaWw7XG4mIzQzO1x0eGRwX2F0dGFjaGVkID0gdHJ1ZTtcbiYjNDM7XG4mIzQzO1x0LyogcmVkdWNpYmxlIFZMQU4gZWdyZXNzOiByZXNvbHZlcyB0byB0aGUgcGh5c2ljYWwgcGFyZW50IHZldGgxICovXG4mIzQzO1x0bWVtc2V0KGZpYl9wYXJhbXMsIDAsIHNpemVvZigqZmliX3BhcmFtcykpO1xuJiM0MztcdGZpYl9wYXJhbXMtXHUwMDNlZmFtaWx5ID0gQUZfSU5FVDtcbiYjNDM7XHRmaWJfcGFyYW1zLVx1MDAzZWw0X3Byb3RvY29sID0gSVBQUk9UT19UQ1A7XG4mIzQzO1x0ZmliX3BhcmFtcy1cdTAwM2VpZmluZGV4ID0gdmV0aDFfaWR4O1xuJiM0MztcdGlmICghQVNTRVJUX0VRKGluZXRfcHRvbihBRl9JTkVULCBJUFY0X0lGQUNFX0FERFIsIFx1MDAyNmZpYl9wYXJhbXMtXHUwMDNlaXB2NF9zcmMpLFxuJiM0MztcdFx0ICAgICAgIDEsIFwmIzM0O2luZXRfcHRvbihzcmMpXCYjMzQ7KSB8fFxuJiM0MztcdCAgICAhQVNTRVJUX0VRKGluZXRfcHRvbihBRl9JTkVULCBJUFY0X1ZMQU5fRUdSRVNTX0RTVCwgXHUwMDI2ZmliX3BhcmFtcy1cdTAwM2VpcHY0X2RzdCksXG4mIzQzO1x0XHQgICAgICAgMSwgXCYjMzQ7aW5ldF9wdG9uKHJlZHVjaWJsZSBkc3QpXCYjMzQ7KSlcbiYjNDM7XHRcdGdvdG8gZmFpbDtcbiYjNDM7XHRza2VsLVx1MDAzZWJzcy1cdTAwM2Vsb29rdXBfZmxhZ3MgPSBCUEZfRklCX0xPT0tVUF9WTEFOIHwgQlBGX0ZJQl9MT09LVVBfU0tJUF9ORUlHSDtcbiYjNDM7XHRza2VsLVx1MDAzZWJzcy1cdTAwM2VyZWRpcmVjdGVkID0gMDtcbiYjNDM7XHRza2VsLVx1MDAzZWJzcy1cdTAwM2VwYXNzZWQgPSAwO1xuJiM0MztcdHNrZWwtXHUwMDNlYnNzLVx1MDAzZWRlbGl2ZXJlZCA9IDA7XG4mIzQzO1xuJiM0MztcdGVyciA9IGJwZl9wcm9nX3Rlc3RfcnVuX29wdHMocmVkaXJlY3RfZmQsIFx1MDAyNmxmX29wdHMpO1xuJiM0MztcdGlmICghQVNTRVJUX09LKGVyciwgXCYjMzQ7dGVzdF9ydW4ocmVkdWNpYmxlIGVncmVzcylcJiMzNDspKVxuJiM0MztcdFx0Z290byBmYWlsO1xuJiM0MztcdEFTU0VSVF9FUShza2VsLVx1MDAzZWJzcy1cdTAwM2VyZWRpcmVjdGVkLCBSRURJUkVDVF9OUEtUUywgXCYjMzQ7cmVkdWNpYmxlIGVncmVzcyByZWRpcmVjdGVkXCYjMzQ7KTtcbiYjNDM7XHRBU1NFUlRfRVEoc2tlbC1cdTAwM2Vic3MtXHUwMDNlcGFzc2VkLCAwLCBcJiMzNDtyZWR1Y2libGUgZWdyZXNzIG5vdCBwYXNzZWRcJiMzNDspO1xuJiM0MztcdEFTU0VSVF9HVChza2VsLVx1MDAzZWJzcy1cdTAwM2VkZWxpdmVyZWQsIDAsIFwmIzM0O3JlZHVjaWJsZSBlZ3Jlc3MgZGVsaXZlcmVkIHRvIHZldGgyXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBRaW5RIGVncmVzczogbm90IHJlZHVjaWJsZSwgc28gdGhlIGxvb2t1cCByZXR1cm5zIFZMQU5fRkFJTFVSRSBhbmRcbiYjNDM7XHQgKiB0aGUgcHJvZ3JhbSBwYXNzZXMgdGhlIGZyYW1lIGluc3RlYWQgb2YgcmVkaXJlY3RpbmcgdG8gdGhlIGlubmVyXG4mIzQzO1x0ICogVkxBTiBkZXZpY2UuIHJlZGlyZWN0ZWQgPT0gMCBpcyB0aGUgYXNzZXJ0aW9uIHRoYXQgbWF0dGVyczogdGhlXG4mIzQzO1x0ICogcHJvZ3JhbSBkaWQgbm90IHJlZGlyZWN0IHRvIGEgZGV2aWNlIHRoYXQgd291bGQgZHJvcCB0aGUgZnJhbWUgYXRcbiYjNDM7XHQgKiB4ZHBfZG9fZmx1c2goKS4gdmV0aDImIzM5O3MgZGVsaXZlcmVkIGNvdW50IGlzIG5vdCBjaGVja2VkIGhlcmUsIHNpbmNlXG4mIzQzO1x0ICogYSBwYXNzZWQgZnJhbWUgY2FuIHN0aWxsIHJlYWNoIHZldGgyIHRocm91Z2ggdGhlIHN0YWNrJiMzOTtzIGZvcndhcmRpbmdcbiYjNDM7XHQgKiBwYXRoLCB3aGljaCBpcyB1bnJlbGF0ZWQgdG8gdGhlIHJlZGlyZWN0IHVuZGVyIHRlc3QuXG4mIzQzO1x0ICovXG4mIzQzO1x0bWVtc2V0KGZpYl9wYXJhbXMsIDAsIHNpemVvZigqZmliX3BhcmFtcykpO1xuJiM0MztcdGZpYl9wYXJhbXMtXHUwMDNlZmFtaWx5ID0gQUZfSU5FVDtcbiYjNDM7XHRmaWJfcGFyYW1zLVx1MDAzZWw0X3Byb3RvY29sID0gSVBQUk9UT19UQ1A7XG4mIzQzO1x0ZmliX3BhcmFtcy1cdTAwM2VpZmluZGV4ID0gdmV0aDFfaWR4O1xuJiM0MztcdGlmICghQVNTRVJUX0VRKGluZXRfcHRvbihBRl9JTkVULCBJUFY0X0lGQUNFX0FERFIsIFx1MDAyNmZpYl9wYXJhbXMtXHUwMDNlaXB2NF9zcmMpLFxuJiM0MztcdFx0ICAgICAgIDEsIFwmIzM0O2luZXRfcHRvbihzcmMpXCYjMzQ7KSB8fFxuJiM0MztcdCAgICAhQVNTRVJUX0VRKGluZXRfcHRvbihBRl9JTkVULCBJUFY0X1FJTlFfRFNULCBcdTAwMjZmaWJfcGFyYW1zLVx1MDAzZWlwdjRfZHN0KSxcbiYjNDM7XHRcdCAgICAgICAxLCBcJiMzNDtpbmV0X3B0b24ocWlucSBkc3QpXCYjMzQ7KSlcbiYjNDM7XHRcdGdvdG8gZmFpbDtcbiYjNDM7XHRza2VsLVx1MDAzZWJzcy1cdTAwM2Vsb29rdXBfZmxhZ3MgPSBCUEZfRklCX0xPT0tVUF9WTEFOIHwgQlBGX0ZJQl9MT09LVVBfU0tJUF9ORUlHSDtcbiYjNDM7XHRza2VsLVx1MDAzZWJzcy1cdTAwM2VyZWRpcmVjdGVkID0gMDtcbiYjNDM7XHRza2VsLVx1MDAzZWJzcy1cdTAwM2VwYXNzZWQgPSAwO1xuJiM0MztcbiYjNDM7XHRlcnIgPSBicGZfcHJvZ190ZXN0X3J1bl9vcHRzKHJlZGlyZWN0X2ZkLCBcdTAwMjZsZl9vcHRzKTtcbiYjNDM7XHRpZiAoIUFTU0VSVF9PSyhlcnIsIFwmIzM0O3Rlc3RfcnVuKHFpbnEgZWdyZXNzKVwmIzM0OykpXG4mIzQzO1x0XHRnb3RvIGZhaWw7XG4mIzQzO1x0QVNTRVJUX0VRKHNrZWwtXHUwMDNlYnNzLVx1MDAzZXBhc3NlZCwgUkVESVJFQ1RfTlBLVFMsIFwmIzM0O3FpbnEgZWdyZXNzIHBhc3NlZFwmIzM0Oyk7XG4mIzQzO1x0QVNTRVJUX0VRKHNrZWwtXHUwMDNlYnNzLVx1MDAzZXJlZGlyZWN0ZWQsIDAsIFwmIzM0O3FpbnEgZWdyZXNzIG5vdCByZWRpcmVjdGVkXCYjMzQ7KTtcbiYjNDM7XG4gZmFpbDpcbiYjNDM7XHRpZiAoeGRwX2F0dGFjaGVkKVxuJiM0MztcdFx0YnBmX3hkcF9kZXRhY2godmV0aDJfaWR4LCBYRFBfRkxBR1NfRFJWX01PREUsIE5VTEwpO1xuIFx0aWYgKG5zdG9rZW4pXG4gXHRcdGNsb3NlX25ldG5zKG5zdG9rZW4pO1xuIFx0U1lTX05PRkFJTChcJiMzNDtpcCBuZXRucyBkZWwgXCYjMzQ7IE5TX1RFU1QpO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9maWJfbG9va3VwLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvZmliX2xvb2t1cC5jXG5pbmRleCA3YjVkZDIyMTRmZjQ2YS4uODYyYTFlOTQ1N2I0ZTAgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvZmliX2xvb2t1cC5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvZmliX2xvb2t1cC5jXG5AQCAtMTksNCAmIzQzOzE5LDQwIEBAIGludCBmaWJfbG9va3VwKHN0cnVjdCBfX3NrX2J1ZmYgKnNrYilcbiBcdHJldHVybiBUQ19BQ1RfU0hPVDtcbiB9XG4gXG4mIzQzO1NFQyhcJiMzNDt4ZHBcJiMzNDspXG4mIzQzO2ludCBmaWJfbG9va3VwX3hkcChzdHJ1Y3QgeGRwX21kICpjdHgpXG4mIzQzO3tcbiYjNDM7XHRmaWJfbG9va3VwX3JldCA9IGJwZl9maWJfbG9va3VwKGN0eCwgXHUwMDI2ZmliX3BhcmFtcywgc2l6ZW9mKGZpYl9wYXJhbXMpLFxuJiM0MztcdFx0XHRcdFx0bG9va3VwX2ZsYWdzKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIFhEUF9EUk9QO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztpbnQgcmVkaXJlY3RlZCA9IDA7XG4mIzQzO2ludCBwYXNzZWQgPSAwO1xuJiM0MztpbnQgZGVsaXZlcmVkID0gMDtcbiYjNDM7XG4mIzQzO1NFQyhcJiMzNDt4ZHBcJiMzNDspXG4mIzQzO2ludCBmaWJfbG9va3VwX3JlZGlyZWN0KHN0cnVjdCB4ZHBfbWQgKmN0eClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBicGZfZmliX2xvb2t1cCBwYXJhbXMgPSBmaWJfcGFyYW1zO1xuJiM0MztcdGxvbmcgcmV0O1xuJiM0MztcbiYjNDM7XHRyZXQgPSBicGZfZmliX2xvb2t1cChjdHgsIFx1MDAyNnBhcmFtcywgc2l6ZW9mKHBhcmFtcyksIGxvb2t1cF9mbGFncyk7XG4mIzQzO1x0aWYgKHJldCA9PSBCUEZfRklCX0xLVVBfUkVUX1NVQ0NFU1MpIHtcbiYjNDM7XHRcdHJlZGlyZWN0ZWQmIzQzOyYjNDM7O1xuJiM0MztcdFx0cmV0dXJuIGJwZl9yZWRpcmVjdChwYXJhbXMuaWZpbmRleCwgMCk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRwYXNzZWQmIzQzOyYjNDM7O1xuJiM0MztcdHJldHVybiBYRFBfUEFTUztcbiYjNDM7fVxuJiM0MztcbiYjNDM7U0VDKFwmIzM0O3hkcFwmIzM0OylcbiYjNDM7aW50IHhkcF9jb3VudChzdHJ1Y3QgeGRwX21kICpjdHgpXG4mIzQzO3tcbiYjNDM7XHRkZWxpdmVyZWQmIzQzOyYjNDM7O1xuJiM0MztcdHJldHVybiBYRFBfRFJPUDtcbiYjNDM7fVxuJiM0MztcbiBjaGFyIF9saWNlbnNlW10gU0VDKFwmIzM0O2xpY2Vuc2VcJiMzNDspID0gXCYjMzQ7R1BMXCYjMzQ7O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI0IDAzOjI1PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1ZMQU5fODAyMVEmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDticGZfaXB2NF9maWJfbG9va3VwJiMzNDssCiAgICAmIzM0O2JwZl9pcHY2X2ZpYl9sb29rdXAmIzM0OywKICAgICYjMzQ7YnBmX3hkcF9maWJfbG9va3VwJiMzNDssCiAgICAmIzM0O2JwZl9za2JfZmliX2xvb2t1cCYjMzQ7LAogICAgJiMzNDticGZfZmliX3NldF9md2RfcGFyYW1zJiMzNDssCiAgICAmIzM0O2JwZl9maWJfdmxhbl9pbnB1dF9kZXYmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIEJQRiBGSUIgbG9va3VwIGhlbHBlciAoYGJwZl9maWJfbG9va3VwYCksIGFkZGluZyBzdXBwb3J0IGZvciBWTEFOcyB2aWEgYEJQRl9GSUJfTE9PS1VQX1ZMQU5gIGFuZCBgQlBGX0ZJQl9MT09LVVBfVkxBTl9JTlBVVGAgZmxhZ3MuIFRoaXMgbW9kaWZpZXMgY29yZSByb3V0aW5nIGxvb2t1cCBsb2dpYyB3aXRoaW4gQlBGIHByb2dyYW1zLCB3aGljaCBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgYnkgbG9hZGluZyBhbmQgZXhlY3V0aW5nIEJQRiBwcm9ncmFtcyAoWERQIG9yIFRDKS4gRnV6emluZyBpcyByZXF1aXJlZCB0byBlbnN1cmUgdGhlIG5ldyBWTEFOIHJlc29sdXRpb24gbG9naWMgYW5kIGl0cyBpbnRlcmFjdGlvbiB3aXRoIHRoZSBuZXR3b3JraW5nIHN0YWNrIGlzIHJvYnVzdC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLApldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXQKICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LAogICBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMzUzMzcxY2RhOWI3ZTljNzI3ZTg4YTBiOWY3ZGYxNWQ1MGZlZWI4ZQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBXZWQgSnVuIDI0IDAzOjI1OjUxIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oIGIvaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oCmluZGV4IDg5YjM2ZGU1ZmRiYjZkLi5kNDIxODk1NGM1MGY1MyAxMDA2NDQKLS0tIGEvaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaApAQCAtMzUzMiw2ICYjNDM7MzUzMiw0NSBAQCB1bmlvbiBicGZfYXR0ciB7CiAgKgkJCVVzZSB0aGUgbWFyayBwcmVzZW50IGluICpwYXJhbXMqLSZndDttYXJrIGZvciB0aGUgZmliIGxvb2t1cC4KICAqCQkJVGhpcyBvcHRpb24gc2hvdWxkIG5vdCBiZSB1c2VkIHdpdGggQlBGX0ZJQl9MT09LVVBfRElSRUNULAogICoJCQlhcyBpdCBvbmx5IGhhcyBtZWFuaW5nIGZvciBmdWxsIGxvb2t1cHMuCiYjNDM7ICoJCSoqQlBGX0ZJQl9MT09LVVBfVkxBTioqCiYjNDM7ICoJCQlJZiB0aGUgZmliIGxvb2t1cCByZXNvbHZlcyB0byBhIFZMQU4gZGV2aWNlIHdob3NlCiYjNDM7ICoJCQlwYXJlbnQgaXMgYSByZWFsIChub24tVkxBTikgZGV2aWNlLCBzZXQKJiM0MzsgKgkJCSpwYXJhbXMqLSZndDtoX3ZsYW5fcHJvdG8gYW5kICpwYXJhbXMqLSZndDtoX3ZsYW5fVENJIGZyb20KJiM0MzsgKgkJCXRoZSBWTEFOIGRldmljZSBhbmQgcmVwbGFjZSAqcGFyYW1zKi0mZ3Q7aWZpbmRleCB3aXRoIHRoZQomIzQzOyAqCQkJcGFyZW50JiMzOTtzIGlmaW5kZXguICpwYXJhbXMqLSZndDtoX3ZsYW5fVENJIGNhcnJpZXMgdGhlIFZJRAomIzQzOyAqCQkJb25seSwgd2l0aCBQQ1AgYW5kIERFSSBiaXRzIHplcm87IGEgY29uc3VtZXIgd2FudGluZyB0bwomIzQzOyAqCQkJc2V0IGVncmVzcyBwcmlvcml0eSB3cml0ZXMgUENQIGl0c2VsZi4gKnBhcmFtcyotJmd0O3NtYWMgaXMKJiM0MzsgKgkJCXRoZSBWTEFOIGRldmljZSYjMzk7cyBvd24gYWRkcmVzcywgd2hpY2ggY2FuIGRpZmZlciBmcm9tIHRoZQomIzQzOyAqCQkJcGFyZW50JiMzOTtzLiBPbmx5IHRoZSBpbW1lZGlhdGUgcGFyZW50IGlzIHJlc29sdmVkOyBpZiBpdAomIzQzOyAqCQkJaXMgaXRzZWxmIGEgVkxBTiBkZXZpY2UgKFFpblEpIG9yIGluIGFub3RoZXIgbmFtZXNwYWNlLAomIzQzOyAqCQkJdGhlIGVncmVzcyBjYW5ub3QgYmUgcmVkdWNlZCB0byBhIHBoeXNpY2FsIGRldmljZSBwbHVzCiYjNDM7ICoJCQlvbmUgdGFnIGFuZCB0aGUgbG9va3VwIHJldHVybnMKJiM0MzsgKgkJCSoqQlBGX0ZJQl9MS1VQX1JFVF9WTEFOX0ZBSUxVUkUqKiB3aXRoICpwYXJhbXMqLSZndDtpZmluZGV4CiYjNDM7ICoJCQlsZWZ0IGF0IHRoZSBpbnB1dC4gUmUtaXNzdWUgd2l0aG91dAomIzQzOyAqCQkJKipCUEZfRklCX0xPT0tVUF9WTEFOKiogdG8gb2J0YWluIHRoZSBWTEFOIGRldmljZSYjMzk7cyBvd24KJiM0MzsgKgkJCWlmaW5kZXguIFRoZSBzd2FwIGFuZCB0aGUgdmxhbiBmaWVsZHMKJiM0MzsgKgkJCWFyZSB3cml0dGVuIG9ubHkgb24gc3VjY2Vzczsgb3RoZXIgb3V0cHV0IGZpZWxkcyBrZWVwCiYjNDM7ICoJCQl0aGUgaGVscGVyJiMzOTtzIGV4aXN0aW5nIGJlaGF2aW91ciwgc28gYSBmcmFnLW5lZWRlZCByZXN1bHQKJiM0MzsgKgkJCXN0aWxsIHJlcG9ydHMgdGhlIHJvdXRlIG10dSBpbiAqcGFyYW1zKi0mZ3Q7bXR1X3Jlc3VsdC4KJiM0MzsgKgkJCVRoaXMgZmxhZyBpcyBvbmx5IHZhbGlkIGZvciBYRFAgcHJvZ3JhbXM7IHRjIHByb2dyYW1zCiYjNDM7ICoJCQlyZWNlaXZlIC1FSU5WQUwgc2luY2UgdGhleSBjYW4gcmVkaXJlY3QgdG8gdGhlIFZMQU4KJiM0MzsgKgkJCWRldmljZSBkaXJlY3RseS4KJiM0MzsgKgkJKipCUEZfRklCX0xPT0tVUF9WTEFOX0lOUFVUKioKJiM0MzsgKgkJCVRyZWF0ICpwYXJhbXMqLSZndDtoX3ZsYW5fcHJvdG8gYW5kICpwYXJhbXMqLSZndDtoX3ZsYW5fVENJCiYjNDM7ICoJCQlhcyBhbiBpbnB1dCBWTEFOIHRhZyBhbmQgcnVuIHRoZSBsb29rdXAgYXMgaWYgaW5ncmVzcwomIzQzOyAqCQkJaGFkIGhhcHBlbmVkIG9uIHRoZSBWTEFOIHN1YmludGVyZmFjZSBjYXJyeWluZyB0aGF0IHRhZwomIzQzOyAqCQkJb24gKnBhcmFtcyotJmd0O2lmaW5kZXguIFRoZSBWSUQgaXMgdGhlIGxvdyAxMiBiaXRzIG9mCiYjNDM7ICoJCQkqcGFyYW1zKi0mZ3Q7aF92bGFuX1RDSTsgKnBhcmFtcyotJmd0O2hfdmxhbl9wcm90byBtdXN0IGJlCiYjNDM7ICoJCQlFVEhfUF84MDIxUSBvciBFVEhfUF84MDIxQUQgaW4gbmV0d29yayBieXRlIG9yZGVyLCBlbHNlCiYjNDM7ICoJCQkqKi1FSU5WQUwqKi4gSWYgKnBhcmFtcyotJmd0O2lmaW5kZXggaXMgaXRzZWxmIGEgVkxBTgomIzQzOyAqCQkJZGV2aWNlLCBpdHMgaW5uZXIgKFFpblEpIHN1YmludGVyZmFjZSBpcyBtYXRjaGVkOyBmb3IgYQomIzQzOyAqCQkJYm9uZCBvciB0ZWFtLCBwYXNzIHRoZSBtYXN0ZXImIzM5O3MgaWZpbmRleC4gQW4gdW5tYXRjaGVkCiYjNDM7ICoJCQl0YWcsIGEgZG93biBkZXZpY2UsIG9yIG9uZSBpbiBhbm90aGVyIG5hbWVzcGFjZSByZXR1cm5zCiYjNDM7ICoJCQkqKkJQRl9GSUJfTEtVUF9SRVRfTk9UX0ZXREVEKiosIG1pcnJvcmluZyByZWFsIGluZ3Jlc3MuCiYjNDM7ICoJCQlBIFZJRCBvZiAwIGlzIGxvb2tlZCB1cCBsaXRlcmFsbHksIHNvIGRvIG5vdCBzZXQgdGhpcwomIzQzOyAqCQkJZmxhZyBmb3IgcHJpb3JpdHktdGFnZ2VkIGZyYW1lcy4gQ2Fubm90IGJlIGNvbWJpbmVkIHdpdGgKJiM0MzsgKgkJCSoqQlBGX0ZJQl9MT09LVVBfVEJJRCoqIG9yICoqQlBGX0ZJQl9MT09LVVBfT1VUUFVUKioKJiM0MzsgKgkJCShyZXR1cm5zICoqLUVJTlZBTCoqKS4KICAqCiAgKgkJKmN0eCogaXMgZWl0aGVyICoqc3RydWN0IHhkcF9tZCoqIGZvciBYRFAgcHJvZ3JhbXMgb3IKICAqCQkqKnN0cnVjdCBza19idWZmKiogdGMgY2xzX2FjdCBwcm9ncmFtcy4KQEAgLTczMjcsNiAmIzQzOzczNjYsOCBAQCBlbnVtIHsKIAlCUEZfRklCX0xPT0tVUF9UQklEICAgID0gKDFVICZsdDsmbHQ7IDMpLAogCUJQRl9GSUJfTE9PS1VQX1NSQyAgICAgPSAoMVUgJmx0OyZsdDsgNCksCiAJQlBGX0ZJQl9MT09LVVBfTUFSSyAgICA9ICgxVSAmbHQ7Jmx0OyA1KSwKJiM0MzsJQlBGX0ZJQl9MT09LVVBfVkxBTiAgICA9ICgxVSAmbHQ7Jmx0OyA2KSwKJiM0MzsJQlBGX0ZJQl9MT09LVVBfVkxBTl9JTlBVVCA9ICgxVSAmbHQ7Jmx0OyA3KSwKIH07CiAKIGVudW0gewpAQCAtNzM0MCw2ICYjNDM7NzM4MSw3IEBAIGVudW0gewogCUJQRl9GSUJfTEtVUF9SRVRfTk9fTkVJR0gsICAgICAvKiBubyBuZWlnaGJvciBlbnRyeSBmb3IgbmggKi8KIAlCUEZfRklCX0xLVVBfUkVUX0ZSQUdfTkVFREVELCAgLyogZnJhZ21lbnRhdGlvbiByZXF1aXJlZCB0byBmd2QgKi8KIAlCUEZfRklCX0xLVVBfUkVUX05PX1NSQ19BRERSLCAgLyogZmFpbGVkIHRvIGRlcml2ZSBJUCBzcmMgYWRkciAqLwomIzQzOwlCUEZfRklCX0xLVVBfUkVUX1ZMQU5fRkFJTFVSRSwgLyogVkxBTiBlZ3Jlc3MsIHBhcmVudCB1bnJlc29sdmFibGUgKi8KIH07CiAKIHN0cnVjdCBicGZfZmliX2xvb2t1cCB7CkBAIC03MzkzLDcgJiM0Mzs3NDM1LDEzIEBAIHN0cnVjdCBicGZfZmliX2xvb2t1cCB7CiAKIAl1bmlvbiB7CiAJCXN0cnVjdCB7Ci0JCQkvKiBvdXRwdXQgKi8KJiM0MzsJCQkvKgomIzQzOwkJCSAqIG91dHB1dCB3aXRoIEJQRl9GSUJfTE9PS1VQX1ZMQU46IHNldCBmcm9tIHRoZQomIzQzOwkJCSAqIHJlc29sdmVkIGVncmVzcyBWTEFOIGRldmljZSAoc2VlIHRoZSBmbGFnKTsgemVyb2VkCiYjNDM7CQkJICogb24gb3RoZXIgc3VjY2Vzc2Z1bCBsb29rdXBzLiBpbnB1dCB3aXRoCiYjNDM7CQkJICogQlBGX0ZJQl9MT09LVVBfVkxBTl9JTlBVVDogdGhlIFZMQU4gdGFnIHRvIHNjb3BlCiYjNDM7CQkJICogdGhlIGxvb2t1cCBieS4KJiM0MzsJCQkgKi8KIAkJCV9fYmUxNgloX3ZsYW5fcHJvdG87CiAJCQlfX2JlMTYJaF92bGFuX1RDSTsKIAkJfTsKZGlmZiAtLWdpdCBhL25ldC9jb3JlL2ZpbHRlci5jIGIvbmV0L2NvcmUvZmlsdGVyLmMKaW5kZXggMmU5NmI0Yjg0N2NlMTIuLjBlYTM2MmZhNDI4N2UzIDEwMDY0NAotLS0gYS9uZXQvY29yZS9maWx0ZXIuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvY29yZS9maWx0ZXIuYwpAQCAtNjIwMSwyMSAmIzQzOzYyMDEsNjAgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfc2tiX2dldF94ZnJtX3N0YXRlX3Byb3RvID0gewogI2VuZGlmCiAKICNpZiBJU19FTkFCTEVEKENPTkZJR19JTkVUKSB8fCBJU19FTkFCTEVEKENPTkZJR19JUFY2KQotc3RhdGljIGludCBicGZfZmliX3NldF9md2RfcGFyYW1zKHN0cnVjdCBicGZfZmliX2xvb2t1cCAqcGFyYW1zLCB1MzIgbXR1KQomIzQzO3N0YXRpYyBpbnQgYnBmX2ZpYl9zZXRfZndkX3BhcmFtcyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAomIzQzOwkJCQkgIHN0cnVjdCBicGZfZmliX2xvb2t1cCAqcGFyYW1zLAomIzQzOwkJCQkgIHUzMiBmbGFncywgdTMyIG10dSwgdTMyIGluX2lmaW5kZXgpCiB7CiAJcGFyYW1zLSZndDtoX3ZsYW5fVENJID0gMDsKIAlwYXJhbXMtJmd0O2hfdmxhbl9wcm90byA9IDA7CiYjNDM7CiYjNDM7I2lmIElTX0VOQUJMRUQoQ09ORklHX1ZMQU5fODAyMVEpCiYjNDM7CWlmICgoZmxhZ3MgJmFtcDsgQlBGX0ZJQl9MT09LVVBfVkxBTikgJmFtcDsmYW1wOyBpc192bGFuX2RldihkZXYpKSB7CiYjNDM7CQlzdHJ1Y3QgbmV0X2RldmljZSAqcmVhbF9kZXYgPSB2bGFuX2Rldl9wcml2KGRldiktJmd0O3JlYWxfZGV2OwomIzQzOwomIzQzOwkJaWYgKCFpc192bGFuX2RldihyZWFsX2RldikgJmFtcDsmYW1wOwomIzQzOwkJICAgIG5ldF9lcShkZXZfbmV0KHJlYWxfZGV2KSwgZGV2X25ldChkZXYpKSkgewomIzQzOwkJCXBhcmFtcy0mZ3Q7aF92bGFuX3Byb3RvID0gdmxhbl9kZXZfdmxhbl9wcm90byhkZXYpOwomIzQzOwkJCXBhcmFtcy0mZ3Q7aF92bGFuX1RDSSA9IGh0b25zKHZsYW5fZGV2X3ZsYW5faWQoZGV2KSk7CiYjNDM7CQkJcGFyYW1zLSZndDtpZmluZGV4ID0gcmVhbF9kZXYtJmd0O2lmaW5kZXg7CiYjNDM7CQl9IGVsc2UgewomIzQzOwkJCXBhcmFtcy0mZ3Q7aWZpbmRleCA9IGluX2lmaW5kZXg7CiYjNDM7CQkJcmV0dXJuIEJQRl9GSUJfTEtVUF9SRVRfVkxBTl9GQUlMVVJFOwomIzQzOwkJfQomIzQzOwl9CiYjNDM7I2VuZGlmCiYjNDM7CiAJaWYgKG10dSkKIAkJcGFyYW1zLSZndDttdHVfcmVzdWx0ID0gbXR1OyAvKiB1bmlvbiB3aXRoIHRvdF9sZW4gKi8KIAogCXJldHVybiAwOwogfQomIzQzOwomIzQzO3N0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZSAqYnBmX2ZpYl92bGFuX2lucHV0X2RldihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAomIzQzOwkJCQkJCSBjb25zdCBzdHJ1Y3QgYnBmX2ZpYl9sb29rdXAgKnBhcmFtcykKJiM0Mzt7CiYjNDM7CV9fYmUxNiBwcm90byA9IHBhcmFtcy0mZ3Q7aF92bGFuX3Byb3RvOwomIzQzOwlzdHJ1Y3QgbmV0X2RldmljZSAqdmxhbl9kZXY7CiYjNDM7CXUxNiB2aWQ7CiYjNDM7CiYjNDM7CWlmIChwcm90byAhPSBodG9ucyhFVEhfUF84MDIxUSkgJmFtcDsmYW1wOyBwcm90byAhPSBodG9ucyhFVEhfUF84MDIxQUQpKQomIzQzOwkJcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7CiYjNDM7CiYjNDM7CXZpZCA9IG50b2hzKHBhcmFtcy0mZ3Q7aF92bGFuX1RDSSkgJmFtcDsgVkxBTl9WSURfTUFTSzsKJiM0MzsJdmxhbl9kZXYgPSBfX3ZsYW5fZmluZF9kZXZfZGVlcF9yY3UoZGV2LCBwcm90bywgdmlkKTsKJiM0MzsJaWYgKCF2bGFuX2RldiB8fCAhKHZsYW5fZGV2LSZndDtmbGFncyAmYW1wOyBJRkZfVVApIHx8CiYjNDM7CSAgICAhbmV0X2VxKGRldl9uZXQodmxhbl9kZXYpLCBkZXZfbmV0KGRldikpKQomIzQzOwkJcmV0dXJuIE5VTEw7CiYjNDM7CiYjNDM7CXJldHVybiB2bGFuX2RldjsKJiM0Mzt9CiAjZW5kaWYKIAogI2lmIElTX0VOQUJMRUQoQ09ORklHX0lORVQpCiBzdGF0aWMgaW50IGJwZl9pcHY0X2ZpYl9sb29rdXAoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgYnBmX2ZpYl9sb29rdXAgKnBhcmFtcywKIAkJCSAgICAgICB1MzIgZmxhZ3MsIGJvb2wgY2hlY2tfbXR1KQogewomIzQzOwl1MzIgaW5faWZpbmRleCA9IHBhcmFtcy0mZ3Q7aWZpbmRleDsKIAlzdHJ1Y3QgbmVpZ2hib3VyICpuZWlnaCA9IE5VTEw7CiAJc3RydWN0IGZpYl9uaF9jb21tb24gKm5oYzsKIAlzdHJ1Y3QgaW5fZGV2aWNlICppbl9kZXY7CkBAIC02MjI5LDYgJiM0Mzs2MjY4LDE0IEBAIHN0YXRpYyBpbnQgYnBmX2lwdjRfZmliX2xvb2t1cChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBicGZfZmliX2xvb2t1cCAqcGFyYW1zLAogCWlmICh1bmxpa2VseSghZGV2KSkKIAkJcmV0dXJuIC1FTk9ERVY7CiAKJiM0MzsJaWYgKGZsYWdzICZhbXA7IEJQRl9GSUJfTE9PS1VQX1ZMQU5fSU5QVVQpIHsKJiM0MzsJCWRldiA9IGJwZl9maWJfdmxhbl9pbnB1dF9kZXYoZGV2LCBwYXJhbXMpOwomIzQzOwkJaWYgKElTX0VSUihkZXYpKQomIzQzOwkJCXJldHVybiBQVFJfRVJSKGRldik7CiYjNDM7CQlpZiAoIWRldikKJiM0MzsJCQlyZXR1cm4gQlBGX0ZJQl9MS1VQX1JFVF9OT1RfRldERUQ7CiYjNDM7CX0KJiM0MzsKIAkvKiB2ZXJpZnkgZm9yd2FyZGluZyBpcyBlbmFibGVkIG9uIHRoaXMgaW50ZXJmYWNlICovCiAJaW5fZGV2ID0gX19pbl9kZXZfZ2V0X3JjdShkZXYpOwogCWlmICh1bmxpa2VseSghaW5fZGV2IHx8ICFJTl9ERVZfRk9SV0FSRChpbl9kZXYpKSkKQEAgLTYyMzgsNyAmIzQzOzYyODUsMTEgQEAgc3RhdGljIGludCBicGZfaXB2NF9maWJfbG9va3VwKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGJwZl9maWJfbG9va3VwICpwYXJhbXMsCiAJCWZsNC5mbG93aTRfaWlmID0gMTsKIAkJZmw0LmZsb3dpNF9vaWYgPSBwYXJhbXMtJmd0O2lmaW5kZXg7CiAJfSBlbHNlIHsKLQkJZmw0LmZsb3dpNF9paWYgPSBwYXJhbXMtJmd0O2lmaW5kZXg7CiYjNDM7CQkvKgomIzQzOwkJICogZGV2LSZndDtpZmluZGV4LCBub3QgcGFyYW1zLSZndDtpZmluZGV4OiBWTEFOX0lOUFVUIG1heSBoYXZlCiYjNDM7CQkgKiByZXNvbHZlZCBkZXYgdG8gYSBzdWJpbnRlcmZhY2UgYWJvdmUuCiYjNDM7CQkgKi8KJiM0MzsJCWZsNC5mbG93aTRfaWlmID0gZGV2LSZndDtpZmluZGV4OwogCQlmbDQuZmxvd2k0X29pZiA9IDA7CiAJfQogCWZsNC5mbG93aTRfZHNjcCA9IGluZXRfZHNmaWVsZF90b19kc2NwKHBhcmFtcy0mZ3Q7dG9zKTsKQEAgLTYzNDcsNyAmIzQzOzYzOTgsNyBAQCBzdGF0aWMgaW50IGJwZl9pcHY0X2ZpYl9sb29rdXAoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgYnBmX2ZpYl9sb29rdXAgKnBhcmFtcywKIAltZW1jcHkocGFyYW1zLSZndDtzbWFjLCBkZXYtJmd0O2Rldl9hZGRyLCBFVEhfQUxFTik7CiAKIHNldF9md2RfcGFyYW1zOgotCXJldHVybiBicGZfZmliX3NldF9md2RfcGFyYW1zKHBhcmFtcywgbXR1KTsKJiM0MzsJcmV0dXJuIGJwZl9maWJfc2V0X2Z3ZF9wYXJhbXMoZGV2LCBwYXJhbXMsIGZsYWdzLCBtdHUsIGluX2lmaW5kZXgpOwogfQogI2VuZGlmCiAKQEAgLTYzNTcsNiAmIzQzOzY0MDgsNyBAQCBzdGF0aWMgaW50IGJwZl9pcHY2X2ZpYl9sb29rdXAoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgYnBmX2ZpYl9sb29rdXAgKnBhcmFtcywKIHsKIAlzdHJ1Y3QgaW42X2FkZHIgKnNyYyA9IChzdHJ1Y3QgaW42X2FkZHIgKikgcGFyYW1zLSZndDtpcHY2X3NyYzsKIAlzdHJ1Y3QgaW42X2FkZHIgKmRzdCA9IChzdHJ1Y3QgaW42X2FkZHIgKikgcGFyYW1zLSZndDtpcHY2X2RzdDsKJiM0MzsJdTMyIGluX2lmaW5kZXggPSBwYXJhbXMtJmd0O2lmaW5kZXg7CiAJc3RydWN0IGZpYjZfcmVzdWx0IHJlcyA9IHt9OwogCXN0cnVjdCBuZWlnaGJvdXIgKm5laWdoOwogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7CkBAIC02Mzc0LDYgJiM0Mzs2NDI2LDE0IEBAIHN0YXRpYyBpbnQgYnBmX2lwdjZfZmliX2xvb2t1cChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBicGZfZmliX2xvb2t1cCAqcGFyYW1zLAogCWlmICh1bmxpa2VseSghZGV2KSkKIAkJcmV0dXJuIC1FTk9ERVY7CiAKJiM0MzsJaWYgKGZsYWdzICZhbXA7IEJQRl9GSUJfTE9PS1VQX1ZMQU5fSU5QVVQpIHsKJiM0MzsJCWRldiA9IGJwZl9maWJfdmxhbl9pbnB1dF9kZXYoZGV2LCBwYXJhbXMpOwomIzQzOwkJaWYgKElTX0VSUihkZXYpKQomIzQzOwkJCXJldHVybiBQVFJfRVJSKGRldik7CiYjNDM7CQlpZiAoIWRldikKJiM0MzsJCQlyZXR1cm4gQlBGX0ZJQl9MS1VQX1JFVF9OT1RfRldERUQ7CiYjNDM7CX0KJiM0MzsKIAlpZGV2ID0gX19pbjZfZGV2X2dldF9zYWZlbHkoZGV2KTsKIAlpZiAodW5saWtlbHkoIWlkZXYgfHwgIVJFQURfT05DRShpZGV2LSZndDtjbmYuZm9yd2FyZGluZykpKQogCQlyZXR1cm4gQlBGX0ZJQl9MS1VQX1JFVF9GV0RfRElTQUJMRUQ7CkBAIC02MzgyLDcgJiM0Mzs2NDQyLDEyIEBAIHN0YXRpYyBpbnQgYnBmX2lwdjZfZmliX2xvb2t1cChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBicGZfZmliX2xvb2t1cCAqcGFyYW1zLAogCQlmbDYuZmxvd2k2X2lpZiA9IDE7CiAJCW9pZiA9IGZsNi5mbG93aTZfb2lmID0gcGFyYW1zLSZndDtpZmluZGV4OwogCX0gZWxzZSB7Ci0JCW9pZiA9IGZsNi5mbG93aTZfaWlmID0gcGFyYW1zLSZndDtpZmluZGV4OwomIzQzOwkJLyoKJiM0MzsJCSAqIGRldi0mZ3Q7aWZpbmRleCwgbm90IHBhcmFtcy0mZ3Q7aWZpbmRleDogVkxBTl9JTlBVVCBtYXkgaGF2ZQomIzQzOwkJICogcmVzb2x2ZWQgZGV2IHRvIGEgc3ViaW50ZXJmYWNlIGFib3ZlLgomIzQzOwkJICovCiYjNDM7CQlvaWYgPSBkZXYtJmd0O2lmaW5kZXg7CiYjNDM7CQlmbDYuZmxvd2k2X2lpZiA9IG9pZjsKIAkJZmw2LmZsb3dpNl9vaWYgPSAwOwogCQlzdHJpY3QgPSBSVDZfTE9PS1VQX0ZfSEFTX1NBRERSOwogCX0KQEAgLTY0ODYsMTMgJiM0Mzs2NTUxLDI2IEBAIHN0YXRpYyBpbnQgYnBmX2lwdjZfZmliX2xvb2t1cChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBicGZfZmliX2xvb2t1cCAqcGFyYW1zLAogCW1lbWNweShwYXJhbXMtJmd0O3NtYWMsIGRldi0mZ3Q7ZGV2X2FkZHIsIEVUSF9BTEVOKTsKIAogc2V0X2Z3ZF9wYXJhbXM6Ci0JcmV0dXJuIGJwZl9maWJfc2V0X2Z3ZF9wYXJhbXMocGFyYW1zLCBtdHUpOwomIzQzOwlyZXR1cm4gYnBmX2ZpYl9zZXRfZndkX3BhcmFtcyhkZXYsIHBhcmFtcywgZmxhZ3MsIG10dSwgaW5faWZpbmRleCk7CiB9CiAjZW5kaWYKIAogI2RlZmluZSBCUEZfRklCX0xPT0tVUF9NQVNLIChCUEZfRklCX0xPT0tVUF9ESVJFQ1QgfCBCUEZfRklCX0xPT0tVUF9PVVRQVVQgfCBcCiAJCQkgICAgIEJQRl9GSUJfTE9PS1VQX1NLSVBfTkVJR0ggfCBCUEZfRklCX0xPT0tVUF9UQklEIHwgXAotCQkJICAgICBCUEZfRklCX0xPT0tVUF9TUkMgfCBCUEZfRklCX0xPT0tVUF9NQVJLKQomIzQzOwkJCSAgICAgQlBGX0ZJQl9MT09LVVBfU1JDIHwgQlBGX0ZJQl9MT09LVVBfTUFSSyB8IFwKJiM0MzsJCQkgICAgIEJQRl9GSUJfTE9PS1VQX1ZMQU4gfCBCUEZfRklCX0xPT0tVUF9WTEFOX0lOUFVUKQomIzQzOwomIzQzO3N0YXRpYyBib29sIGJwZl9maWJfbG9va3VwX2ZsYWdzX29rKHUzMiBmbGFncykKJiM0Mzt7CiYjNDM7CWlmIChmbGFncyAmYW1wOyB+QlBGX0ZJQl9MT09LVVBfTUFTSykKJiM0MzsJCXJldHVybiBmYWxzZTsKJiM0MzsKJiM0MzsJaWYgKChmbGFncyAmYW1wOyBCUEZfRklCX0xPT0tVUF9WTEFOX0lOUFVUKSAmYW1wOyZhbXA7CiYjNDM7CSAgICAoZmxhZ3MgJmFtcDsgKEJQRl9GSUJfTE9PS1VQX1RCSUQgfCBCUEZfRklCX0xPT0tVUF9PVVRQVVQpKSkKJiM0MzsJCXJldHVybiBmYWxzZTsKJiM0MzsKJiM0MzsJcmV0dXJuIHRydWU7CiYjNDM7fQogCiBCUEZfQ0FMTF80KGJwZl94ZHBfZmliX2xvb2t1cCwgc3RydWN0IHhkcF9idWZmICosIGN0eCwKIAkgICBzdHJ1Y3QgYnBmX2ZpYl9sb29rdXAgKiwgcGFyYW1zLCBpbnQsIHBsZW4sIHUzMiwgZmxhZ3MpCkBAIC02NTAwLDcgJiM0Mzs2NTc4LDcgQEAgQlBGX0NBTExfNChicGZfeGRwX2ZpYl9sb29rdXAsIHN0cnVjdCB4ZHBfYnVmZiAqLCBjdHgsCiAJaWYgKHBsZW4gJmx0OyBzaXplb2YoKnBhcmFtcykpCiAJCXJldHVybiAtRUlOVkFMOwogCi0JaWYgKGZsYWdzICZhbXA7IH5CUEZfRklCX0xPT0tVUF9NQVNLKQomIzQzOwlpZiAoIWJwZl9maWJfbG9va3VwX2ZsYWdzX29rKGZsYWdzKSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAlzd2l0Y2ggKHBhcmFtcy0mZ3Q7ZmFtaWx5KSB7CkBAIC02NTM4LDcgJiM0Mzs2NjE2LDEwIEBAIEJQRl9DQUxMXzQoYnBmX3NrYl9maWJfbG9va3VwLCBzdHJ1Y3Qgc2tfYnVmZiAqLCBza2IsCiAJaWYgKHBsZW4gJmx0OyBzaXplb2YoKnBhcmFtcykpCiAJCXJldHVybiAtRUlOVkFMOwogCi0JaWYgKGZsYWdzICZhbXA7IH5CUEZfRklCX0xPT0tVUF9NQVNLKQomIzQzOwlpZiAoIWJwZl9maWJfbG9va3VwX2ZsYWdzX29rKGZsYWdzKSkKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwomIzQzOwlpZiAoZmxhZ3MgJmFtcDsgQlBGX0ZJQl9MT09LVVBfVkxBTikKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAlpZiAocGFyYW1zLSZndDt0b3RfbGVuKQpkaWZmIC0tZ2l0IGEvdG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oIGIvdG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oCmluZGV4IDg5YjM2ZGU1ZmRiYjZkLi5kNDIxODk1NGM1MGY1MyAxMDA2NDQKLS0tIGEvdG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaApAQCAtMzUzMiw2ICYjNDM7MzUzMiw0NSBAQCB1bmlvbiBicGZfYXR0ciB7CiAgKgkJCVVzZSB0aGUgbWFyayBwcmVzZW50IGluICpwYXJhbXMqLSZndDttYXJrIGZvciB0aGUgZmliIGxvb2t1cC4KICAqCQkJVGhpcyBvcHRpb24gc2hvdWxkIG5vdCBiZSB1c2VkIHdpdGggQlBGX0ZJQl9MT09LVVBfRElSRUNULAogICoJCQlhcyBpdCBvbmx5IGhhcyBtZWFuaW5nIGZvciBmdWxsIGxvb2t1cHMuCiYjNDM7ICoJCSoqQlBGX0ZJQl9MT09LVVBfVkxBTioqCiYjNDM7ICoJCQlJZiB0aGUgZmliIGxvb2t1cCByZXNvbHZlcyB0byBhIFZMQU4gZGV2aWNlIHdob3NlCiYjNDM7ICoJCQlwYXJlbnQgaXMgYSByZWFsIChub24tVkxBTikgZGV2aWNlLCBzZXQKJiM0MzsgKgkJCSpwYXJhbXMqLSZndDtoX3ZsYW5fcHJvdG8gYW5kICpwYXJhbXMqLSZndDtoX3ZsYW5fVENJIGZyb20KJiM0MzsgKgkJCXRoZSBWTEFOIGRldmljZSBhbmQgcmVwbGFjZSAqcGFyYW1zKi0mZ3Q7aWZpbmRleCB3aXRoIHRoZQomIzQzOyAqCQkJcGFyZW50JiMzOTtzIGlmaW5kZXguICpwYXJhbXMqLSZndDtoX3ZsYW5fVENJIGNhcnJpZXMgdGhlIFZJRAomIzQzOyAqCQkJb25seSwgd2l0aCBQQ1AgYW5kIERFSSBiaXRzIHplcm87IGEgY29uc3VtZXIgd2FudGluZyB0bwomIzQzOyAqCQkJc2V0IGVncmVzcyBwcmlvcml0eSB3cml0ZXMgUENQIGl0c2VsZi4gKnBhcmFtcyotJmd0O3NtYWMgaXMKJiM0MzsgKgkJCXRoZSBWTEFOIGRldmljZSYjMzk7cyBvd24gYWRkcmVzcywgd2hpY2ggY2FuIGRpZmZlciBmcm9tIHRoZQomIzQzOyAqCQkJcGFyZW50JiMzOTtzLiBPbmx5IHRoZSBpbW1lZGlhdGUgcGFyZW50IGlzIHJlc29sdmVkOyBpZiBpdAomIzQzOyAqCQkJaXMgaXRzZWxmIGEgVkxBTiBkZXZpY2UgKFFpblEpIG9yIGluIGFub3RoZXIgbmFtZXNwYWNlLAomIzQzOyAqCQkJdGhlIGVncmVzcyBjYW5ub3QgYmUgcmVkdWNlZCB0byBhIHBoeXNpY2FsIGRldmljZSBwbHVzCiYjNDM7ICoJCQlvbmUgdGFnIGFuZCB0aGUgbG9va3VwIHJldHVybnMKJiM0MzsgKgkJCSoqQlBGX0ZJQl9MS1VQX1JFVF9WTEFOX0ZBSUxVUkUqKiB3aXRoICpwYXJhbXMqLSZndDtpZmluZGV4CiYjNDM7ICoJCQlsZWZ0IGF0IHRoZSBpbnB1dC4gUmUtaXNzdWUgd2l0aG91dAomIzQzOyAqCQkJKipCUEZfRklCX0xPT0tVUF9WTEFOKiogdG8gb2J0YWluIHRoZSBWTEFOIGRldmljZSYjMzk7cyBvd24KJiM0MzsgKgkJCWlmaW5kZXguIFRoZSBzd2FwIGFuZCB0aGUgdmxhbiBmaWVsZHMKJiM0MzsgKgkJCWFyZSB3cml0dGVuIG9ubHkgb24gc3VjY2Vzczsgb3RoZXIgb3V0cHV0IGZpZWxkcyBrZWVwCiYjNDM7ICoJCQl0aGUgaGVscGVyJiMzOTtzIGV4aXN0aW5nIGJlaGF2aW91ciwgc28gYSBmcmFnLW5lZWRlZCByZXN1bHQKJiM0MzsgKgkJCXN0aWxsIHJlcG9ydHMgdGhlIHJvdXRlIG10dSBpbiAqcGFyYW1zKi0mZ3Q7bXR1X3Jlc3VsdC4KJiM0MzsgKgkJCVRoaXMgZmxhZyBpcyBvbmx5IHZhbGlkIGZvciBYRFAgcHJvZ3JhbXM7IHRjIHByb2dyYW1zCiYjNDM7ICoJCQlyZWNlaXZlIC1FSU5WQUwgc2luY2UgdGhleSBjYW4gcmVkaXJlY3QgdG8gdGhlIFZMQU4KJiM0MzsgKgkJCWRldmljZSBkaXJlY3RseS4KJiM0MzsgKgkJKipCUEZfRklCX0xPT0tVUF9WTEFOX0lOUFVUKioKJiM0MzsgKgkJCVRyZWF0ICpwYXJhbXMqLSZndDtoX3ZsYW5fcHJvdG8gYW5kICpwYXJhbXMqLSZndDtoX3ZsYW5fVENJCiYjNDM7ICoJCQlhcyBhbiBpbnB1dCBWTEFOIHRhZyBhbmQgcnVuIHRoZSBsb29rdXAgYXMgaWYgaW5ncmVzcwomIzQzOyAqCQkJaGFkIGhhcHBlbmVkIG9uIHRoZSBWTEFOIHN1YmludGVyZmFjZSBjYXJyeWluZyB0aGF0IHRhZwomIzQzOyAqCQkJb24gKnBhcmFtcyotJmd0O2lmaW5kZXguIFRoZSBWSUQgaXMgdGhlIGxvdyAxMiBiaXRzIG9mCiYjNDM7ICoJCQkqcGFyYW1zKi0mZ3Q7aF92bGFuX1RDSTsgKnBhcmFtcyotJmd0O2hfdmxhbl9wcm90byBtdXN0IGJlCiYjNDM7ICoJCQlFVEhfUF84MDIxUSBvciBFVEhfUF84MDIxQUQgaW4gbmV0d29yayBieXRlIG9yZGVyLCBlbHNlCiYjNDM7ICoJCQkqKi1FSU5WQUwqKi4gSWYgKnBhcmFtcyotJmd0O2lmaW5kZXggaXMgaXRzZWxmIGEgVkxBTgomIzQzOyAqCQkJZGV2aWNlLCBpdHMgaW5uZXIgKFFpblEpIHN1YmludGVyZmFjZSBpcyBtYXRjaGVkOyBmb3IgYQomIzQzOyAqCQkJYm9uZCBvciB0ZWFtLCBwYXNzIHRoZSBtYXN0ZXImIzM5O3MgaWZpbmRleC4gQW4gdW5tYXRjaGVkCiYjNDM7ICoJCQl0YWcsIGEgZG93biBkZXZpY2UsIG9yIG9uZSBpbiBhbm90aGVyIG5hbWVzcGFjZSByZXR1cm5zCiYjNDM7ICoJCQkqKkJQRl9GSUJfTEtVUF9SRVRfTk9UX0ZXREVEKiosIG1pcnJvcmluZyByZWFsIGluZ3Jlc3MuCiYjNDM7ICoJCQlBIFZJRCBvZiAwIGlzIGxvb2tlZCB1cCBsaXRlcmFsbHksIHNvIGRvIG5vdCBzZXQgdGhpcwomIzQzOyAqCQkJZmxhZyBmb3IgcHJpb3JpdHktdGFnZ2VkIGZyYW1lcy4gQ2Fubm90IGJlIGNvbWJpbmVkIHdpdGgKJiM0MzsgKgkJCSoqQlBGX0ZJQl9MT09LVVBfVEJJRCoqIG9yICoqQlBGX0ZJQl9MT09LVVBfT1VUUFVUKioKJiM0MzsgKgkJCShyZXR1cm5zICoqLUVJTlZBTCoqKS4KICAqCiAgKgkJKmN0eCogaXMgZWl0aGVyICoqc3RydWN0IHhkcF9tZCoqIGZvciBYRFAgcHJvZ3JhbXMgb3IKICAqCQkqKnN0cnVjdCBza19idWZmKiogdGMgY2xzX2FjdCBwcm9ncmFtcy4KQEAgLTczMjcsNiAmIzQzOzczNjYsOCBAQCBlbnVtIHsKIAlCUEZfRklCX0xPT0tVUF9UQklEICAgID0gKDFVICZsdDsmbHQ7IDMpLAogCUJQRl9GSUJfTE9PS1VQX1NSQyAgICAgPSAoMVUgJmx0OyZsdDsgNCksCiAJQlBGX0ZJQl9MT09LVVBfTUFSSyAgICA9ICgxVSAmbHQ7Jmx0OyA1KSwKJiM0MzsJQlBGX0ZJQl9MT09LVVBfVkxBTiAgICA9ICgxVSAmbHQ7Jmx0OyA2KSwKJiM0MzsJQlBGX0ZJQl9MT09LVVBfVkxBTl9JTlBVVCA9ICgxVSAmbHQ7Jmx0OyA3KSwKIH07CiAKIGVudW0gewpAQCAtNzM0MCw2ICYjNDM7NzM4MSw3IEBAIGVudW0gewogCUJQRl9GSUJfTEtVUF9SRVRfTk9fTkVJR0gsICAgICAvKiBubyBuZWlnaGJvciBlbnRyeSBmb3IgbmggKi8KIAlCUEZfRklCX0xLVVBfUkVUX0ZSQUdfTkVFREVELCAgLyogZnJhZ21lbnRhdGlvbiByZXF1aXJlZCB0byBmd2QgKi8KIAlCUEZfRklCX0xLVVBfUkVUX05PX1NSQ19BRERSLCAgLyogZmFpbGVkIHRvIGRlcml2ZSBJUCBzcmMgYWRkciAqLwomIzQzOwlCUEZfRklCX0xLVVBfUkVUX1ZMQU5fRkFJTFVSRSwgLyogVkxBTiBlZ3Jlc3MsIHBhcmVudCB1bnJlc29sdmFibGUgKi8KIH07CiAKIHN0cnVjdCBicGZfZmliX2xvb2t1cCB7CkBAIC03MzkzLDcgJiM0Mzs3NDM1LDEzIEBAIHN0cnVjdCBicGZfZmliX2xvb2t1cCB7CiAKIAl1bmlvbiB7CiAJCXN0cnVjdCB7Ci0JCQkvKiBvdXRwdXQgKi8KJiM0MzsJCQkvKgomIzQzOwkJCSAqIG91dHB1dCB3aXRoIEJQRl9GSUJfTE9PS1VQX1ZMQU46IHNldCBmcm9tIHRoZQomIzQzOwkJCSAqIHJlc29sdmVkIGVncmVzcyBWTEFOIGRldmljZSAoc2VlIHRoZSBmbGFnKTsgemVyb2VkCiYjNDM7CQkJICogb24gb3RoZXIgc3VjY2Vzc2Z1bCBsb29rdXBzLiBpbnB1dCB3aXRoCiYjNDM7CQkJICogQlBGX0ZJQl9MT09LVVBfVkxBTl9JTlBVVDogdGhlIFZMQU4gdGFnIHRvIHNjb3BlCiYjNDM7CQkJICogdGhlIGxvb2t1cCBieS4KJiM0MzsJCQkgKi8KIAkJCV9fYmUxNgloX3ZsYW5fcHJvdG87CiAJCQlfX2JlMTYJaF92bGFuX1RDSTsKIAkJfTsKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2ZpYl9sb29rdXAuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2ZpYl9sb29rdXAuYwppbmRleCBiZDc2NTg5NTgwMDQxZi4uOGNhZWQ5ZDQzYjk4MTEgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2ZpYl9sb29rdXAuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9maWJfbG9va3VwLmMKQEAgLTIsNiAmIzQzOzIsNyBAQAogLyogQ29weXJpZ2h0IChjKSAyMDIzIE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLiAqLwogCiAjaW5jbHVkZSAmbHQ7bGludXgvcnRuZXRsaW5rLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2lmX2V0aGVyLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7c3lzL3R5cGVzLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bmV0L2lmLmgmZ3Q7CiAKQEAgLTIzLDYgJiM0MzsyNCw3IEBACiAjZGVmaW5lIElQVjRfVEJJRF9BRERSCQkmIzM0OzE3Mi4wLjAuMjU0JiMzNDsKICNkZWZpbmUgSVBWNF9UQklEX05FVAkJJiMzNDsxNzIuMC4wLjAmIzM0OwogI2RlZmluZSBJUFY0X1RCSURfRFNUCQkmIzM0OzE3Mi4wLjAuMiYjMzQ7CiYjNDM7I2RlZmluZSBJUFY0X1RCSURfTk9ORUlHSF9EU1QJJiMzNDsxNzIuMC4wLjUmIzM0OwogI2RlZmluZSBJUFY2X1RCSURfQUREUgkJJiMzNDtmZDAwOjpGRkZGJiMzNDsKICNkZWZpbmUgSVBWNl9UQklEX05FVAkJJiMzNDtmZDAwOjomIzM0OwogI2RlZmluZSBJUFY2X1RCSURfRFNUCQkmIzM0O2ZkMDA6OjImIzM0OwpAQCAtMzcsNiAmIzQzOzM5LDQxIEBACiAjZGVmaW5lIElQVjZfTE9DQUwJCSYjMzQ7ZmQwMTo6MyYjMzQ7CiAjZGVmaW5lIElQVjZfR1cxCQkmIzM0O2ZkMDE6OjEmIzM0OwogI2RlZmluZSBJUFY2X0dXMgkJJiMzNDtmZDAxOjoyJiMzNDsKJiM0MzsjZGVmaW5lIFZMQU5fSUQJCQkxMDAKJiM0MzsjZGVmaW5lIFZMQU5fSUZBQ0UJCSYjMzQ7dmV0aDEuMTAwJiMzNDsKJiM0MzsjZGVmaW5lIFZMQU5fSURfRE9XTgkJMTAyCiYjNDM7I2RlZmluZSBWTEFOX0lGQUNFX0RPV04JCSYjMzQ7dmV0aDEuMTAyJiMzNDsKJiM0MzsjZGVmaW5lIFFJTlFfT1VURVJfSUZBQ0UJJiMzNDt2ZXRoMS4yMDAmIzM0OwomIzQzOyNkZWZpbmUgUUlOUV9JTk5FUl9JRkFDRQkmIzM0O3ZldGgxLjIwMC4zMDAmIzM0OwomIzQzOyNkZWZpbmUgVkxBTl9UQUJMRQkJJiMzNDszMDAmIzM0OwomIzQzOyNkZWZpbmUgSVBWNF9WTEFOX0lGQUNFX0FERFIJJiMzNDsxMC41LjAuMjU0JiMzNDsKJiM0MzsjZGVmaW5lIElQVjRfVkxBTl9FR1JFU1NfRFNUCSYjMzQ7MTAuNS4wLjImIzM0OwomIzQzOyNkZWZpbmUgSVBWNF9RSU5RX0RTVAkJJiMzNDsxMC43LjAuMiYjMzQ7CiYjNDM7I2RlZmluZSBJUFY0X1ZMQU5fRFNUCQkmIzM0OzEwLjYuMC4yJiMzNDsKJiM0MzsjZGVmaW5lIElQVjRfVkxBTl9HVwkJJiMzNDsxMC41LjAuMSYjMzQ7CiYjNDM7I2RlZmluZSBJUFY2X1ZMQU5fSUZBQ0VfQUREUgkmIzM0O2ZkMDI6OjI1NCYjMzQ7CiYjNDM7I2RlZmluZSBJUFY2X1ZMQU5fRUdSRVNTX0RTVAkmIzM0O2ZkMDI6OjImIzM0OwomIzQzOyNkZWZpbmUgSVBWNl9WTEFOX0RTVAkJJiMzNDtmZDAzOjoyJiMzNDsKJiM0MzsjZGVmaW5lIElQVjZfVkxBTl9HVwkJJiMzNDtmZDAyOjoxJiMzNDsKJiM0MzsjZGVmaW5lIFZMQU5fVklEX1VOVVNFRAkJOTk5CiYjNDM7I2RlZmluZSBWUkZfSUZBQ0UJCSYjMzQ7dnJmLWJsdWUmIzM0OwomIzQzOyNkZWZpbmUgVlJGX1RBQkxFCQkmIzM0OzEwMDAmIzM0OwomIzQzOyNkZWZpbmUgVlJGX1ZMQU5fSUQJCTEwMQomIzQzOyNkZWZpbmUgVlJGX1ZMQU5fSUZBQ0UJCSYjMzQ7dmV0aDEuMTAxJiMzNDsKJiM0MzsjZGVmaW5lIElQVjRfVlJGX0lGQUNFX0FERFIJJiMzNDsxMC44LjAuMjU0JiMzNDsKJiM0MzsjZGVmaW5lIElQVjRfVlJGX0dXCQkmIzM0OzEwLjguMC4xJiMzNDsKJiM0MzsjZGVmaW5lIElQVjRfVlJGX0RTVAkJJiMzNDsxMC45LjAuMiYjMzQ7CiYjNDM7I2RlZmluZSBUQklEX1ZMQU5fSUQJCTUwCiYjNDM7I2RlZmluZSBUQklEX1ZMQU5fSUZBQ0UJCSYjMzQ7dmV0aDIuNTAmIzM0OwomIzQzOyNkZWZpbmUgSVBWNF9UQklEX1ZMQU5fRFNUCSYjMzQ7MTcyLjIuMC4yJiMzNDsKJiM0MzsjZGVmaW5lIElQVjRfQk9ORF9WTEFOX0RTVAkmIzM0OzEwLjExLjAuMiYjMzQ7CiYjNDM7I2RlZmluZSBJUFY0X1ZMQU5fTVRVX0RTVAkmIzM0OzEwLjUuOS4yJiMzNDsKJiM0MzsjZGVmaW5lIFFJTlFfQURfVkxBTl9JRAkJMjAwCiYjNDM7I2RlZmluZSBRSU5RX0lOTkVSX1ZMQU5fSUQJMzAwCiYjNDM7I2RlZmluZSBCT05EX0lGQUNFCQkmIzM0O2JvbmQ5OSYjMzQ7CiYjNDM7I2RlZmluZSBCT05EX1BPUlQJCSYjMzQ7dmV0aDMmIzM0OwomIzQzOyNkZWZpbmUgQk9ORF9QT1JUX1BFRVIJCSYjMzQ7dmV0aDQmIzM0OwomIzQzOyNkZWZpbmUgQk9ORF9WTEFOX0lECQk1MDAKICNkZWZpbmUgRE1BQwkJCSYjMzQ7MTE6MTE6MTE6MTE6MTE6MTEmIzM0OwogI2RlZmluZSBETUFDX0lOSVQgeyAweDExLCAweDExLCAweDExLCAweDExLCAweDExLCAweDExLCB9CiAjZGVmaW5lIERNQUMyCQkJJiMzNDswMTowMTowMTowMTowMTowMSYjMzQ7CkBAIC01Miw2ICYjNDM7ODksMTcgQEAgc3RydWN0IGZpYl9sb29rdXBfdGVzdCB7CiAJX191MzIgdGJpZDsKIAlfX3U4IGRtYWNbNl07CiAJX191MzIgbWFyazsKJiM0MzsJLyoKJiM0MzsJICogaW5wdXQgdGFnIHdpdGggQlBGX0ZJQl9MT09LVVBfVkxBTl9JTlBVVDsgZXhwZWN0ZWQgb3V0cHV0IHRhZwomIzQzOwkgKiB3aXRoIEJQRl9GSUJfTE9PS1VQX1ZMQU4gKGNoZWNrZWQgd2hlbiBjaGVja192bGFuIGlzIHNldCkKJiM0MzsJICovCiYjNDM7CV9fdTE2IHZsYW5fcHJvdG87CiYjNDM7CV9fdTE2IHZsYW5faWQ7CiYjNDM7CWJvb2wgY2hlY2tfdmxhbjsKJiM0MzsJY29uc3QgY2hhciAqZXhwZWN0ZWRfZGV2OyAvKiBleHBlY3RlZCBwYXJhbXMtJmd0O2lmaW5kZXggYWZ0ZXIgbG9va3VwICovCiYjNDM7CWNvbnN0IGNoYXIgKmlpZjsJICAvKiBvdmVycmlkZSB0aGUgZGVmYXVsdCB2ZXRoMSBpbnB1dCBkZXZpY2UgKi8KJiM0MzsJX191MTYgdG90X2xlbjsJCSAgLyogdHJpZ2dlcnMgdGhlIGluLWxvb2t1cCBtdHUgY2hlY2sgd2hlbiBzZXQgKi8KJiM0MzsJX191MTYgZXhwZWN0ZWRfbXR1OwkgIC8qIGV4cGVjdGVkIG10dV9yZXN1bHQgKHVuaW9uIHdpdGggdG90X2xlbikgKi8KIH07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZmliX2xvb2t1cF90ZXN0IHRlc3RzW10gPSB7CkBAIC03OSw2ICYjNDM7MTI3LDE3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZmliX2xvb2t1cF90ZXN0IHRlc3RzW10gPSB7CiAJICAuZGFkZHIgPSBJUFY0X1RCSURfRFNULCAuZXhwZWN0ZWRfcmV0ID0gQlBGX0ZJQl9MS1VQX1JFVF9TVUNDRVNTLAogCSAgLmxvb2t1cF9mbGFncyA9IEJQRl9GSUJfTE9PS1VQX0RJUkVDVCB8IEJQRl9GSUJfTE9PS1VQX1RCSUQsIC50YmlkID0gMTAwLAogCSAgLmRtYWMgPSBETUFDX0lOSVQyLCB9LAomIzQzOwkvKgomIzQzOwkgKiBBbiBlcnJvciB0aGF0IHJldHVybnMgYWZ0ZXIgdGhlIGVncmVzcyBkZXZpY2UgaXMgcmVzb2x2ZWQgbXVzdAomIzQzOwkgKiByZXBvcnQgdGhlIGVncmVzcyBpZmluZGV4LCBub3QgdGhlIGlucHV0LiBUaGlzIHJvdXRlcyBmcm9tIGlucHV0CiYjNDM7CSAqIHZldGgxIHZpYSB2ZXRoMiAodGFibGUgMTAwKSB0byBhIGRzdCB3aXRoIG5vIG5laWdoYm91ciwgc28KJiM0MzsJICogaW5wdXQgIT0gZWdyZXNzLCBwaW5uaW5nIE5PX05FSUdIIHRvIHRoZSBlZ3Jlc3MgZGV2aWNlLgomIzQzOwkgKi8KJiM0MzsJeyAuZGVzYyA9ICYjMzQ7SVB2NCBOT19ORUlHSCByZXBvcnRzIHRoZSBlZ3Jlc3MgaWZpbmRleCwgbm90IHRoZSBpbnB1dCYjMzQ7LAomIzQzOwkgIC5kYWRkciA9IElQVjRfVEJJRF9OT05FSUdIX0RTVCwKJiM0MzsJICAuZXhwZWN0ZWRfcmV0ID0gQlBGX0ZJQl9MS1VQX1JFVF9OT19ORUlHSCwKJiM0MzsJICAubG9va3VwX2ZsYWdzID0gQlBGX0ZJQl9MT09LVVBfRElSRUNUIHwgQlBGX0ZJQl9MT09LVVBfVEJJRCwgLnRiaWQgPSAxMDAsCiYjNDM7CSAgLmV4cGVjdGVkX2RldiA9ICYjMzQ7dmV0aDImIzM0OywgfSwKIAl7IC5kZXNjID0gJiMzNDtJUHY2IFRCSUQgbG9va3VwIGZhaWx1cmUmIzM0OywKIAkgIC5kYWRkciA9IElQVjZfVEJJRF9EU1QsIC5leHBlY3RlZF9yZXQgPSBCUEZfRklCX0xLVVBfUkVUX05PVF9GV0RFRCwKIAkgIC5sb29rdXBfZmxhZ3MgPSBCUEZfRklCX0xPT0tVUF9ESVJFQ1QgfCBCUEZfRklCX0xPT0tVUF9UQklELApAQCAtMTQyLDYgJiM0MzsyMDEsMjE4IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZmliX2xvb2t1cF90ZXN0IHRlc3RzW10gPSB7CiAJICAuZXhwZWN0ZWRfZHN0ID0gSVBWNl9HVzEsCiAJICAubG9va3VwX2ZsYWdzID0gQlBGX0ZJQl9MT09LVVBfU0tJUF9ORUlHSCwKIAkgIC5tYXJrID0gTUFSSywgfSwKJiM0MzsJLyogdmxhbiBlZ3Jlc3MgcmVzb2x1dGlvbiAqLwomIzQzOwkvKgomIzQzOwkgKiBJbnZhcmlhbnQgdGhlIFZMQU4tZWdyZXNzIGFybXMgam9pbnRseSBlbmZvcmNlOiBhCiYjNDM7CSAqIEJQRl9GSUJfTE9PS1VQX1ZMQU4gU1VDQ0VTUyBhbHdheXMgY2FycmllcyBhIHBoeXNpY2FsLAomIzQzOwkgKiB4bWl0LWNhcGFibGUgaWZpbmRleCAtLSBubyBTVUNDRVNTIGV2ZXIgcmV0dXJucyBhIFZMQU4tZGV2aWNlCiYjNDM7CSAqIGlmaW5kZXguIFJlZHVjaWJsZSBhcm1zIHBpbiBpZmluZGV4ID09IHRoZSBwaHlzaWNhbCBwYXJlbnQ7IHRoZQomIzQzOwkgKiBRaW5RIGFuZCBmb3JlaWduLW5ldG5zIGFybXMgcGluIFZMQU5fRkFJTFVSRSB3aXRoIHBhcmFtcy0mZ3Q7aWZpbmRleAomIzQzOwkgKiBsZWZ0IGF0IHRoZSBpbnB1dCwgc28gYSByZWdyZXNzaW9uIHRvIGJlc3QtZWZmb3J0IChTVUNDRVNTICYjNDM7IHRoZQomIzQzOwkgKiBWTEFOIGlmaW5kZXgpIGZhaWxzIG9uZS4KJiM0MzsJICovCiYjNDM7CXsgLmRlc2MgPSAmIzM0O0lQdjQgVkxBTiBlZ3Jlc3MsIG5vIGZsYWcmIzM0OywKJiM0MzsJICAuZGFkZHIgPSBJUFY0X1ZMQU5fRUdSRVNTX0RTVCwgLmV4cGVjdGVkX3JldCA9IEJQRl9GSUJfTEtVUF9SRVRfU1VDQ0VTUywKJiM0MzsJICAubG9va3VwX2ZsYWdzID0gQlBGX0ZJQl9MT09LVVBfU0tJUF9ORUlHSCwKJiM0MzsJICAuZXhwZWN0ZWRfZGV2ID0gVkxBTl9JRkFDRSwgLmNoZWNrX3ZsYW4gPSB0cnVlLCB9LAomIzQzOwl7IC5kZXNjID0gJiMzNDtJUHY0IFZMQU4gZWdyZXNzLCBzaW5nbGUgVkxBTiYjMzQ7LAomIzQzOwkgIC5kYWRkciA9IElQVjRfVkxBTl9FR1JFU1NfRFNULCAuZXhwZWN0ZWRfcmV0ID0gQlBGX0ZJQl9MS1VQX1JFVF9TVUNDRVNTLAomIzQzOwkgIC5sb29rdXBfZmxhZ3MgPSBCUEZfRklCX0xPT0tVUF9WTEFOIHwgQlBGX0ZJQl9MT09LVVBfU0tJUF9ORUlHSCwKJiM0MzsJICAuZXhwZWN0ZWRfZGV2ID0gJiMzNDt2ZXRoMSYjMzQ7LCAuY2hlY2tfdmxhbiA9IHRydWUsCiYjNDM7CSAgLnZsYW5fcHJvdG8gPSBFVEhfUF84MDIxUSwgLnZsYW5faWQgPSBWTEFOX0lELCB9LAomIzQzOwkvKgomIzQzOwkgKiBza2IgcGF0aCB3aXRob3V0IHRvdF9sZW46IG10dV9yZXN1bHQgaXMgdGhlIFZMQU4gZGV2aWNlJiMzOTtzIG10dQomIzQzOwkgKiAoMTQwMCksIG5vdCB0aGUgcGFyZW50JiMzOTtzICgxNTAwKQomIzQzOwkgKi8KJiM0MzsJeyAuZGVzYyA9ICYjMzQ7SVB2NCBWTEFOIGVncmVzcywgc2tiLXBhdGggbXR1IGlzIHRoZSBWTEFOIGRldmljZSYjMzk7cyB3aXRob3V0IHRoZSBmbGFnJiMzNDssCiYjNDM7CSAgLmRhZGRyID0gSVBWNF9WTEFOX0VHUkVTU19EU1QsIC5leHBlY3RlZF9yZXQgPSBCUEZfRklCX0xLVVBfUkVUX1NVQ0NFU1MsCiYjNDM7CSAgLmxvb2t1cF9mbGFncyA9IEJQRl9GSUJfTE9PS1VQX1NLSVBfTkVJR0gsCiYjNDM7CSAgLmV4cGVjdGVkX2RldiA9IFZMQU5fSUZBQ0UsIC5jaGVja192bGFuID0gdHJ1ZSwgLmV4cGVjdGVkX210dSA9IDE0MDAsIH0sCiYjNDM7CXsgLmRlc2MgPSAmIzM0O0lQdjQgVkxBTiBlZ3Jlc3MsIGZsYWcgc2V0IGJ1dCBlZ3Jlc3MgaXMgbm90IGEgVkxBTiYjMzQ7LAomIzQzOwkgIC5kYWRkciA9IElQVjRfTlVEX0ZBSUxFRF9BRERSLCAuZXhwZWN0ZWRfcmV0ID0gQlBGX0ZJQl9MS1VQX1JFVF9TVUNDRVNTLAomIzQzOwkgIC5sb29rdXBfZmxhZ3MgPSBCUEZfRklCX0xPT0tVUF9WTEFOIHwgQlBGX0ZJQl9MT09LVVBfU0tJUF9ORUlHSCwKJiM0MzsJICAuZXhwZWN0ZWRfZGV2ID0gJiMzNDt2ZXRoMSYjMzQ7LCAuY2hlY2tfdmxhbiA9IHRydWUsIH0sCiYjNDM7CXsgLmRlc2MgPSAmIzM0O0lQdjQgVkxBTiBlZ3Jlc3MsIFFpblEgbm90IHJlZHVjaWJsZSAoVkxBTl9GQUlMVVJFKSYjMzQ7LAomIzQzOwkgIC5kYWRkciA9IElQVjRfUUlOUV9EU1QsCiYjNDM7CSAgLmV4cGVjdGVkX3JldCA9IEJQRl9GSUJfTEtVUF9SRVRfVkxBTl9GQUlMVVJFLAomIzQzOwkgIC5sb29rdXBfZmxhZ3MgPSBCUEZfRklCX0xPT0tVUF9WTEFOIHwgQlBGX0ZJQl9MT09LVVBfU0tJUF9ORUlHSCwKJiM0MzsJICAuZXhwZWN0ZWRfZGV2ID0gJiMzNDt2ZXRoMSYjMzQ7LCAuY2hlY2tfdmxhbiA9IHRydWUsIH0sCiYjNDM7CXsgLmRlc2MgPSAmIzM0O0lQdjQgUWluUSBlZ3Jlc3Mgd2l0aG91dCB0aGUgZmxhZyAoZXNjYXBlIGhhdGNoKSYjMzQ7LAomIzQzOwkgIC5kYWRkciA9IElQVjRfUUlOUV9EU1QsIC5leHBlY3RlZF9yZXQgPSBCUEZfRklCX0xLVVBfUkVUX1NVQ0NFU1MsCiYjNDM7CSAgLmxvb2t1cF9mbGFncyA9IEJQRl9GSUJfTE9PS1VQX1NLSVBfTkVJR0gsCiYjNDM7CSAgLmV4cGVjdGVkX2RldiA9IFFJTlFfSU5ORVJfSUZBQ0UsIH0sCiYjNDM7CXsgLmRlc2MgPSAmIzM0O0lQdjYgVkxBTiBlZ3Jlc3MsIHNpbmdsZSBWTEFOJiMzNDssCiYjNDM7CSAgLmRhZGRyID0gSVBWNl9WTEFOX0VHUkVTU19EU1QsIC5leHBlY3RlZF9yZXQgPSBCUEZfRklCX0xLVVBfUkVUX1NVQ0NFU1MsCiYjNDM7CSAgLmxvb2t1cF9mbGFncyA9IEJQRl9GSUJfTE9PS1VQX1ZMQU4gfCBCUEZfRklCX0xPT0tVUF9TS0lQX05FSUdILAomIzQzOwkgIC5leHBlY3RlZF9kZXYgPSAmIzM0O3ZldGgxJiMzNDssIC5jaGVja192bGFuID0gdHJ1ZSwKJiM0MzsJICAudmxhbl9wcm90byA9IEVUSF9QXzgwMjFRLCAudmxhbl9pZCA9IFZMQU5fSUQsIH0sCiYjNDM7CXsgLmRlc2MgPSAmIzM0O0lQdjQgVkxBTiBlZ3Jlc3MsIG5laWdoYm91ciBvbiB0aGUgVkxBTiBkZXZpY2UmIzM0OywKJiM0MzsJICAuZGFkZHIgPSBJUFY0X1ZMQU5fRUdSRVNTX0RTVCwgLmV4cGVjdGVkX3JldCA9IEJQRl9GSUJfTEtVUF9SRVRfU1VDQ0VTUywKJiM0MzsJICAubG9va3VwX2ZsYWdzID0gQlBGX0ZJQl9MT09LVVBfVkxBTiwKJiM0MzsJICAuZXhwZWN0ZWRfZGV2ID0gJiMzNDt2ZXRoMSYjMzQ7LCAuY2hlY2tfdmxhbiA9IHRydWUsCiYjNDM7CSAgLnZsYW5fcHJvdG8gPSBFVEhfUF84MDIxUSwgLnZsYW5faWQgPSBWTEFOX0lELCAuZG1hYyA9IERNQUNfSU5JVCwgfSwKJiM0MzsJeyAuZGVzYyA9ICYjMzQ7SVB2NCBWTEFOIGVncmVzcyBpbiBPVVRQVVQgbW9kZSYjMzQ7LAomIzQzOwkgIC5kYWRkciA9IElQVjRfVkxBTl9FR1JFU1NfRFNULCAuZXhwZWN0ZWRfcmV0ID0gQlBGX0ZJQl9MS1VQX1JFVF9TVUNDRVNTLAomIzQzOwkgIC5paWYgPSBWTEFOX0lGQUNFLAomIzQzOwkgIC5sb29rdXBfZmxhZ3MgPSBCUEZfRklCX0xPT0tVUF9PVVRQVVQgfCBCUEZfRklCX0xPT0tVUF9WTEFOIHwKJiM0MzsJCQkgIEJQRl9GSUJfTE9PS1VQX1NLSVBfTkVJR0gsCiYjNDM7CSAgLmV4cGVjdGVkX2RldiA9ICYjMzQ7dmV0aDEmIzM0OywgLmNoZWNrX3ZsYW4gPSB0cnVlLAomIzQzOwkgIC52bGFuX3Byb3RvID0gRVRIX1BfODAyMVEsIC52bGFuX2lkID0gVkxBTl9JRCwgfSwKJiM0MzsJeyAuZGVzYyA9ICYjMzQ7SVB2NCBWTEFOIGVncmVzcyBvdmVyIGEgYm9uZCYjMzQ7LAomIzQzOwkgIC5kYWRkciA9IElQVjRfQk9ORF9WTEFOX0RTVCwgLmV4cGVjdGVkX3JldCA9IEJQRl9GSUJfTEtVUF9SRVRfU1VDQ0VTUywKJiM0MzsJICAubG9va3VwX2ZsYWdzID0gQlBGX0ZJQl9MT09LVVBfVkxBTiB8IEJQRl9GSUJfTE9PS1VQX1NLSVBfTkVJR0gsCiYjNDM7CSAgLmV4cGVjdGVkX2RldiA9IEJPTkRfSUZBQ0UsIC5jaGVja192bGFuID0gdHJ1ZSwKJiM0MzsJICAudmxhbl9wcm90byA9IEVUSF9QXzgwMjFRLCAudmxhbl9pZCA9IEJPTkRfVkxBTl9JRCwgfSwKJiM0MzsJeyAuZGVzYyA9ICYjMzQ7SVB2NCBWTEFOIGVncmVzcyB2aWEgVEJJRCB0YWJsZSYjMzQ7LAomIzQzOwkgIC5kYWRkciA9IElQVjRfVEJJRF9WTEFOX0RTVCwgLmV4cGVjdGVkX3JldCA9IEJQRl9GSUJfTEtVUF9SRVRfU1VDQ0VTUywKJiM0MzsJICAubG9va3VwX2ZsYWdzID0gQlBGX0ZJQl9MT09LVVBfRElSRUNUIHwgQlBGX0ZJQl9MT09LVVBfVEJJRCB8CiYjNDM7CQkJICBCUEZfRklCX0xPT0tVUF9WTEFOIHwgQlBGX0ZJQl9MT09LVVBfU0tJUF9ORUlHSCwKJiM0MzsJICAudGJpZCA9IDEwMCwKJiM0MzsJICAuZXhwZWN0ZWRfZGV2ID0gJiMzNDt2ZXRoMiYjMzQ7LCAuY2hlY2tfdmxhbiA9IHRydWUsCiYjNDM7CSAgLnZsYW5fcHJvdG8gPSBFVEhfUF84MDIxUSwgLnZsYW5faWQgPSBUQklEX1ZMQU5fSUQsIH0sCiYjNDM7CXsgLmRlc2MgPSAmIzM0O0lQdjQgVkxBTiBlZ3Jlc3MsIHN1Y2Nlc3Mgd3JpdGVzIG10dV9yZXN1bHQgd2l0aCB0aGUgc3dhcCYjMzQ7LAomIzQzOwkgIC5kYWRkciA9IElQVjRfVkxBTl9NVFVfRFNULCAuZXhwZWN0ZWRfcmV0ID0gQlBGX0ZJQl9MS1VQX1JFVF9TVUNDRVNTLAomIzQzOwkgIC50b3RfbGVuID0gNTAwLCAuZXhwZWN0ZWRfbXR1ID0gMTAwMCwKJiM0MzsJICAubG9va3VwX2ZsYWdzID0gQlBGX0ZJQl9MT09LVVBfVkxBTiB8IEJQRl9GSUJfTE9PS1VQX1NLSVBfTkVJR0gsCiYjNDM7CSAgLmV4cGVjdGVkX2RldiA9ICYjMzQ7dmV0aDEmIzM0OywgLmNoZWNrX3ZsYW4gPSB0cnVlLAomIzQzOwkgIC52bGFuX3Byb3RvID0gRVRIX1BfODAyMVEsIC52bGFuX2lkID0gVkxBTl9JRCwgfSwKJiM0MzsJeyAuZGVzYyA9ICYjMzQ7SVB2NCBWTEFOIGVncmVzcywgRlJBR19ORUVERUQgcmVwb3J0cyBtdHUsIHN3YXAgdW53cml0dGVuJiMzNDssCiYjNDM7CSAgLmRhZGRyID0gSVBWNF9WTEFOX01UVV9EU1QsIC5leHBlY3RlZF9yZXQgPSBCUEZfRklCX0xLVVBfUkVUX0ZSQUdfTkVFREVELAomIzQzOwkgIC50b3RfbGVuID0gMTQwMCwgLmV4cGVjdGVkX210dSA9IDEwMDAsCiYjNDM7CSAgLmxvb2t1cF9mbGFncyA9IEJQRl9GSUJfTE9PS1VQX1ZMQU4gfCBCUEZfRklCX0xPT0tVUF9TS0lQX05FSUdILAomIzQzOwkgIC5leHBlY3RlZF9kZXYgPSAmIzM0O3ZldGgxJiMzNDssIC5jaGVja192bGFuID0gdHJ1ZSwgfSwKJiM0MzsJLyogdmxhbiB0YWcgYXMgbG9va3VwIGlucHV0ICovCiYjNDM7CXsgLmRlc2MgPSAmIzM0O0lQdjQgVkxBTiBpbnB1dCwgbm8gZmxhZyYjMzQ7LAomIzQzOwkgIC5kYWRkciA9IElQVjRfVkxBTl9EU1QsIC5leHBlY3RlZF9yZXQgPSBCUEZfRklCX0xLVVBfUkVUX1NVQ0NFU1MsCiYjNDM7CSAgLmV4cGVjdGVkX2RzdCA9IElQVjRfR1cxLAomIzQzOwkgIC5sb29rdXBfZmxhZ3MgPSBCUEZfRklCX0xPT0tVUF9TS0lQX05FSUdILCB9LAomIzQzOwl7IC5kZXNjID0gJiMzNDtJUHY0IFZMQU4gaW5wdXQsIHRhZyBzZWxlY3RzIHN1YmludGVyZmFjZSByb3V0ZSYjMzQ7LAomIzQzOwkgIC5kYWRkciA9IElQVjRfVkxBTl9EU1QsIC5leHBlY3RlZF9yZXQgPSBCUEZfRklCX0xLVVBfUkVUX1NVQ0NFU1MsCiYjNDM7CSAgLmV4cGVjdGVkX2RzdCA9IElQVjRfVkxBTl9HVywgLmV4cGVjdGVkX2RldiA9IFZMQU5fSUZBQ0UsCiYjNDM7CSAgLmxvb2t1cF9mbGFncyA9IEJQRl9GSUJfTE9PS1VQX1ZMQU5fSU5QVVQgfCBCUEZfRklCX0xPT0tVUF9TS0lQX05FSUdILAomIzQzOwkgIC52bGFuX3Byb3RvID0gRVRIX1BfODAyMVEsIC52bGFuX2lkID0gVkxBTl9JRCwgfSwKJiM0MzsJeyAuZGVzYyA9ICYjMzQ7SVB2NiBWTEFOIGlucHV0LCB0YWcgc2VsZWN0cyBzdWJpbnRlcmZhY2Ugcm91dGUmIzM0OywKJiM0MzsJICAuZGFkZHIgPSBJUFY2X1ZMQU5fRFNULCAuZXhwZWN0ZWRfcmV0ID0gQlBGX0ZJQl9MS1VQX1JFVF9TVUNDRVNTLAomIzQzOwkgIC5leHBlY3RlZF9kc3QgPSBJUFY2X1ZMQU5fR1csIC5leHBlY3RlZF9kZXYgPSBWTEFOX0lGQUNFLAomIzQzOwkgIC5sb29rdXBfZmxhZ3MgPSBCUEZfRklCX0xPT0tVUF9WTEFOX0lOUFVUIHwgQlBGX0ZJQl9MT09LVVBfU0tJUF9ORUlHSCwKJiM0MzsJICAudmxhbl9wcm90byA9IEVUSF9QXzgwMjFRLCAudmxhbl9pZCA9IFZMQU5fSUQsIH0sCiYjNDM7CXsgLmRlc2MgPSAmIzM0O0lQdjQgVkxBTiBpbnB1dCBhbmQgZWdyZXNzIGNvbWJpbmVkJiMzNDssCiYjNDM7CSAgLmRhZGRyID0gSVBWNF9WTEFOX0RTVCwgLmV4cGVjdGVkX3JldCA9IEJQRl9GSUJfTEtVUF9SRVRfU1VDQ0VTUywKJiM0MzsJICAuZXhwZWN0ZWRfZHN0ID0gSVBWNF9WTEFOX0dXLCAuZXhwZWN0ZWRfZGV2ID0gJiMzNDt2ZXRoMSYjMzQ7LAomIzQzOwkgIC5jaGVja192bGFuID0gdHJ1ZSwKJiM0MzsJICAubG9va3VwX2ZsYWdzID0gQlBGX0ZJQl9MT09LVVBfVkxBTl9JTlBVVCB8IEJQRl9GSUJfTE9PS1VQX1ZMQU4gfAomIzQzOwkJCSAgQlBGX0ZJQl9MT09LVVBfU0tJUF9ORUlHSCwKJiM0MzsJICAudmxhbl9wcm90byA9IEVUSF9QXzgwMjFRLCAudmxhbl9pZCA9IFZMQU5fSUQsIH0sCiYjNDM7CXsgLmRlc2MgPSAmIzM0O0lQdjQgVkxBTiBpbnB1dCwgbmVpZ2hib3VyIHJlc29sdmVkIG9uIHRoZSByb3V0ZSYjMzQ7LAomIzQzOwkgIC5kYWRkciA9IElQVjRfVkxBTl9EU1QsIC5leHBlY3RlZF9yZXQgPSBCUEZfRklCX0xLVVBfUkVUX1NVQ0NFU1MsCiYjNDM7CSAgLmV4cGVjdGVkX2RzdCA9IElQVjRfVkxBTl9HVywgLmV4cGVjdGVkX2RldiA9IFZMQU5fSUZBQ0UsCiYjNDM7CSAgLmxvb2t1cF9mbGFncyA9IEJQRl9GSUJfTE9PS1VQX1ZMQU5fSU5QVVQsCiYjNDM7CSAgLnZsYW5fcHJvdG8gPSBFVEhfUF84MDIxUSwgLnZsYW5faWQgPSBWTEFOX0lELCAuZG1hYyA9IERNQUNfSU5JVDIsIH0sCiYjNDM7CXsgLmRlc2MgPSAmIzM0O0lQdjQgVkxBTiBpbnB1dCwgc291cmNlIGFkZHJlc3MgZnJvbSB0aGUgc3ViaW50ZXJmYWNlJiMzNDssCiYjNDM7CSAgLmRhZGRyID0gSVBWNF9WTEFOX0RTVCwgLmV4cGVjdGVkX3JldCA9IEJQRl9GSUJfTEtVUF9SRVRfU1VDQ0VTUywKJiM0MzsJICAuZXhwZWN0ZWRfc3JjID0gSVBWNF9WTEFOX0lGQUNFX0FERFIsCiYjNDM7CSAgLmxvb2t1cF9mbGFncyA9IEJQRl9GSUJfTE9PS1VQX1ZMQU5fSU5QVVQgfCBCUEZfRklCX0xPT0tVUF9TUkMgfAomIzQzOwkJCSAgQlBGX0ZJQl9MT09LVVBfU0tJUF9ORUlHSCwKJiM0MzsJICAudmxhbl9wcm90byA9IEVUSF9QXzgwMjFRLCAudmxhbl9pZCA9IFZMQU5fSUQsIH0sCiYjNDM7CS8qCiYjNDM7CSAqIFZSRjogdGhlIHJlc29sdmVkIHN1YmludGVyZmFjZSBpcyBlbnNsYXZlZCwgc28gdGhlIGwzbWRldiBydWxlCiYjNDM7CSAqIChmdWxsIGxvb2t1cCkgYW5kIGwzbWRldl9maWJfdGFibGVfcmN1KCkgKERJUkVDVCkgbXVzdCBzZWxlY3QKJiM0MzsJICogdGhlIFZSRiB0YWJsZSBmcm9tIHRoZSByZXNvbHZlZCBpbmdyZXNzCiYjNDM7CSAqLwomIzQzOwl7IC5kZXNjID0gJiMzNDtJUHY0IFZMQU4gaW5wdXQsIFZSRiBzdWJpbnRlcmZhY2UsIG5vIGZsYWcmIzM0OywKJiM0MzsJICAuZGFkZHIgPSBJUFY0X1ZSRl9EU1QsIC5leHBlY3RlZF9yZXQgPSBCUEZfRklCX0xLVVBfUkVUX1NVQ0NFU1MsCiYjNDM7CSAgLmV4cGVjdGVkX2RzdCA9IElQVjRfR1cxLAomIzQzOwkgIC5sb29rdXBfZmxhZ3MgPSBCUEZfRklCX0xPT0tVUF9TS0lQX05FSUdILCB9LAomIzQzOwl7IC5kZXNjID0gJiMzNDtJUHY0IFZMQU4gaW5wdXQsIHRhZyBzZWxlY3RzIFZSRiB0YWJsZSYjMzQ7LAomIzQzOwkgIC5kYWRkciA9IElQVjRfVlJGX0RTVCwgLmV4cGVjdGVkX3JldCA9IEJQRl9GSUJfTEtVUF9SRVRfU1VDQ0VTUywKJiM0MzsJICAuZXhwZWN0ZWRfZHN0ID0gSVBWNF9WUkZfR1csIC5leHBlY3RlZF9kZXYgPSBWUkZfVkxBTl9JRkFDRSwKJiM0MzsJICAubG9va3VwX2ZsYWdzID0gQlBGX0ZJQl9MT09LVVBfVkxBTl9JTlBVVCB8IEJQRl9GSUJfTE9PS1VQX1NLSVBfTkVJR0gsCiYjNDM7CSAgLnZsYW5fcHJvdG8gPSBFVEhfUF84MDIxUSwgLnZsYW5faWQgPSBWUkZfVkxBTl9JRCwgfSwKJiM0MzsJeyAuZGVzYyA9ICYjMzQ7SVB2NCBWTEFOIGlucHV0LCBESVJFQ1QgdXNlcyBWUkYgdGFibGUgZnJvbSByZXNvbHZlZCBpbmdyZXNzJiMzNDssCiYjNDM7CSAgLmRhZGRyID0gSVBWNF9WUkZfRFNULCAuZXhwZWN0ZWRfcmV0ID0gQlBGX0ZJQl9MS1VQX1JFVF9TVUNDRVNTLAomIzQzOwkgIC5leHBlY3RlZF9kc3QgPSBJUFY0X1ZSRl9HVywgLmV4cGVjdGVkX2RldiA9IFZSRl9WTEFOX0lGQUNFLAomIzQzOwkgIC5sb29rdXBfZmxhZ3MgPSBCUEZfRklCX0xPT0tVUF9WTEFOX0lOUFVUIHwgQlBGX0ZJQl9MT09LVVBfRElSRUNUIHwKJiM0MzsJCQkgIEJQRl9GSUJfTE9PS1VQX1NLSVBfTkVJR0gsCiYjNDM7CSAgLnZsYW5fcHJvdG8gPSBFVEhfUF84MDIxUSwgLnZsYW5faWQgPSBWUkZfVkxBTl9JRCwgfSwKJiM0MzsJLyoKJiM0MzsJICogZmFpbHVyZSBhcm1zIGFsc28gYXNzZXJ0IHBhcmFtcyBpcyBsZWZ0IHVudG91Y2hlZDogaWZpbmRleCBzdGlsbAomIzQzOwkgKiBuYW1lcyB0aGUgcGh5c2ljYWwgZGV2aWNlIGFuZCB0aGUgaW5wdXQgdGFnIGJ5dGVzIHN1cnZpdmUKJiM0MzsJICovCiYjNDM7CXsgLmRlc2MgPSAmIzM0O0lQdjQgVkxBTiBpbnB1dCwgaW52YWxpZCBwcm90byYjMzQ7LAomIzQzOwkgIC5kYWRkciA9IElQVjRfVkxBTl9EU1QsIC5leHBlY3RlZF9yZXQgPSAtRUlOVkFMLAomIzQzOwkgIC5leHBlY3RlZF9kZXYgPSAmIzM0O3ZldGgxJiMzNDssIC5jaGVja192bGFuID0gdHJ1ZSwKJiM0MzsJICAubG9va3VwX2ZsYWdzID0gQlBGX0ZJQl9MT09LVVBfVkxBTl9JTlBVVCB8IEJQRl9GSUJfTE9PS1VQX1NLSVBfTkVJR0gsCiYjNDM7CSAgLnZsYW5fcHJvdG8gPSAweDEyMzQsIC52bGFuX2lkID0gVkxBTl9JRCwgfSwKJiM0MzsJeyAuZGVzYyA9ICYjMzQ7SVB2NCBWTEFOIGlucHV0LCB1bm1hdGNoZWQgVklEJiMzNDssCiYjNDM7CSAgLmRhZGRyID0gSVBWNF9WTEFOX0RTVCwgLmV4cGVjdGVkX3JldCA9IEJQRl9GSUJfTEtVUF9SRVRfTk9UX0ZXREVELAomIzQzOwkgIC5leHBlY3RlZF9kZXYgPSAmIzM0O3ZldGgxJiMzNDssIC5jaGVja192bGFuID0gdHJ1ZSwKJiM0MzsJICAubG9va3VwX2ZsYWdzID0gQlBGX0ZJQl9MT09LVVBfVkxBTl9JTlBVVCB8IEJQRl9GSUJfTE9PS1VQX1NLSVBfTkVJR0gsCiYjNDM7CSAgLnZsYW5fcHJvdG8gPSBFVEhfUF84MDIxUSwgLnZsYW5faWQgPSBWTEFOX1ZJRF9VTlVTRUQsIH0sCiYjNDM7CXsgLmRlc2MgPSAmIzM0O0lQdjQgVkxBTiBpbnB1dCwgc3ViaW50ZXJmYWNlIGRvd24mIzM0OywKJiM0MzsJICAuZGFkZHIgPSBJUFY0X1ZMQU5fRFNULCAuZXhwZWN0ZWRfcmV0ID0gQlBGX0ZJQl9MS1VQX1JFVF9OT1RfRldERUQsCiYjNDM7CSAgLmV4cGVjdGVkX2RldiA9ICYjMzQ7dmV0aDEmIzM0OywgLmNoZWNrX3ZsYW4gPSB0cnVlLAomIzQzOwkgIC5sb29rdXBfZmxhZ3MgPSBCUEZfRklCX0xPT0tVUF9WTEFOX0lOUFVUIHwgQlBGX0ZJQl9MT09LVVBfU0tJUF9ORUlHSCwKJiM0MzsJICAudmxhbl9wcm90byA9IEVUSF9QXzgwMjFRLCAudmxhbl9pZCA9IFZMQU5fSURfRE9XTiwgfSwKJiM0MzsJLyoKJiM0MzsJICogdGhlIHJlc29sdmVyIHJ1bnMgYmVmb3JlIHRoZSBmb3J3YXJkaW5nIGNoZWNrLCBzbyBvbiBkZXZpY2VzCiYjNDM7CSAqIHdpdGggZm9yd2FyZGluZyBvZmYgRldEX0RJU0FCTEVEIChub3QgTk9UX0ZXREVEKSBwcm92ZXMgdGhlIHRhZwomIzQzOwkgKiByZXNvbHZlZCB0byB0aGF0IGRldmljZSBhbmQgdGhlIGxvb2t1cCB1c2VkIGl0IGFzIGluZ3Jlc3MKJiM0MzsJICovCiYjNDM7CXsgLmRlc2MgPSAmIzM0O0lQdjQgVkxBTiBpbnB1dCwgODAyLjFhZCB0YWcmIzM0OywKJiM0MzsJICAuZGFkZHIgPSBJUFY0X1ZMQU5fRFNULCAuZXhwZWN0ZWRfcmV0ID0gQlBGX0ZJQl9MS1VQX1JFVF9GV0RfRElTQUJMRUQsCiYjNDM7CSAgLmxvb2t1cF9mbGFncyA9IEJQRl9GSUJfTE9PS1VQX1ZMQU5fSU5QVVQgfCBCUEZfRklCX0xPT0tVUF9TS0lQX05FSUdILAomIzQzOwkgIC52bGFuX3Byb3RvID0gRVRIX1BfODAyMUFELCAudmxhbl9pZCA9IFFJTlFfQURfVkxBTl9JRCwgfSwKJiM0MzsJeyAuZGVzYyA9ICYjMzQ7SVB2NCBWTEFOIGlucHV0LCBQQ1AgYW5kIERFSSBiaXRzIGlnbm9yZWQgaW4gVENJJiMzNDssCiYjNDM7CSAgLmRhZGRyID0gSVBWNF9WTEFOX0RTVCwgLmV4cGVjdGVkX3JldCA9IEJQRl9GSUJfTEtVUF9SRVRfU1VDQ0VTUywKJiM0MzsJICAuZXhwZWN0ZWRfZHN0ID0gSVBWNF9WTEFOX0dXLAomIzQzOwkgIC5sb29rdXBfZmxhZ3MgPSBCUEZfRklCX0xPT0tVUF9WTEFOX0lOUFVUIHwgQlBGX0ZJQl9MT09LVVBfU0tJUF9ORUlHSCwKJiM0MzsJICAudmxhbl9wcm90byA9IEVUSF9QXzgwMjFRLCAudmxhbl9pZCA9IDB4ZTAwMCB8IFZMQU5fSUQsIH0sCiYjNDM7CXsgLmRlc2MgPSAmIzM0O0lQdjQgVkxBTiBpbnB1dCwgaW5uZXIgUWluUSBkZXZpY2UgZnJvbSBWTEFOIGlmaW5kZXgmIzM0OywKJiM0MzsJICAuZGFkZHIgPSBJUFY0X1ZMQU5fRFNULCAuZXhwZWN0ZWRfcmV0ID0gQlBGX0ZJQl9MS1VQX1JFVF9GV0RfRElTQUJMRUQsCiYjNDM7CSAgLmlpZiA9IFFJTlFfT1VURVJfSUZBQ0UsCiYjNDM7CSAgLmxvb2t1cF9mbGFncyA9IEJQRl9GSUJfTE9PS1VQX1ZMQU5fSU5QVVQgfCBCUEZfRklCX0xPT0tVUF9TS0lQX05FSUdILAomIzQzOwkgIC52bGFuX3Byb3RvID0gRVRIX1BfODAyMVEsIC52bGFuX2lkID0gUUlOUV9JTk5FUl9WTEFOX0lELCB9LAomIzQzOwkvKgomIzQzOwkgKiBib25kaW5nOiB0aGUgVkxBTnMgbGl2ZSBvbiB0aGUgbWFzdGVyLCBhcyBvbiByZWNlaXZlLCB3aGVyZSB0aGUKJiM0MzsJICogZnJhbWUgaXMgc3RlZXJlZCB0byB0aGUgbWFzdGVyIGJlZm9yZSBWTEFOIHByb2Nlc3Npbmc7IGEgcG9ydAomIzQzOwkgKiBpZmluZGV4IGRvZXMgbm90IG1hdGNoIChwb3J0cyBjYXJyeSB2aWQgc3RhdGUgYnV0IG5vIFZMQU4gZGV2cykKJiM0MzsJICovCiYjNDM7CXsgLmRlc2MgPSAmIzM0O0lQdjQgVkxBTiBpbnB1dCwgdGFnIG9uIGJvbmQgbWFzdGVyIHJlc29sdmVzJiMzNDssCiYjNDM7CSAgLmRhZGRyID0gSVBWNF9WTEFOX0RTVCwgLmV4cGVjdGVkX3JldCA9IEJQRl9GSUJfTEtVUF9SRVRfRldEX0RJU0FCTEVELAomIzQzOwkgIC5paWYgPSBCT05EX0lGQUNFLAomIzQzOwkgIC5sb29rdXBfZmxhZ3MgPSBCUEZfRklCX0xPT0tVUF9WTEFOX0lOUFVUIHwgQlBGX0ZJQl9MT09LVVBfU0tJUF9ORUlHSCwKJiM0MzsJICAudmxhbl9wcm90byA9IEVUSF9QXzgwMjFRLCAudmxhbl9pZCA9IEJPTkRfVkxBTl9JRCwgfSwKJiM0MzsJeyAuZGVzYyA9ICYjMzQ7SVB2NCBWTEFOIGlucHV0LCB0YWcgb24gYm9uZCBwb3J0IGRvZXMgbm90IG1hdGNoJiMzNDssCiYjNDM7CSAgLmRhZGRyID0gSVBWNF9WTEFOX0RTVCwgLmV4cGVjdGVkX3JldCA9IEJQRl9GSUJfTEtVUF9SRVRfTk9UX0ZXREVELAomIzQzOwkgIC5paWYgPSBCT05EX1BPUlQsIC5leHBlY3RlZF9kZXYgPSBCT05EX1BPUlQsIC5jaGVja192bGFuID0gdHJ1ZSwKJiM0MzsJICAubG9va3VwX2ZsYWdzID0gQlBGX0ZJQl9MT09LVVBfVkxBTl9JTlBVVCB8IEJQRl9GSUJfTE9PS1VQX1NLSVBfTkVJR0gsCiYjNDM7CSAgLnZsYW5fcHJvdG8gPSBFVEhfUF84MDIxUSwgLnZsYW5faWQgPSBCT05EX1ZMQU5fSUQsIH0sCiYjNDM7CXsgLmRlc2MgPSAmIzM0O0lQdjYgVkxBTiBpbnB1dCwgaW52YWxpZCBwcm90byYjMzQ7LAomIzQzOwkgIC5kYWRkciA9IElQVjZfVkxBTl9EU1QsIC5leHBlY3RlZF9yZXQgPSAtRUlOVkFMLAomIzQzOwkgIC5leHBlY3RlZF9kZXYgPSAmIzM0O3ZldGgxJiMzNDssIC5jaGVja192bGFuID0gdHJ1ZSwKJiM0MzsJICAubG9va3VwX2ZsYWdzID0gQlBGX0ZJQl9MT09LVVBfVkxBTl9JTlBVVCB8IEJQRl9GSUJfTE9PS1VQX1NLSVBfTkVJR0gsCiYjNDM7CSAgLnZsYW5fcHJvdG8gPSAweDEyMzQsIC52bGFuX2lkID0gVkxBTl9JRCwgfSwKJiM0MzsJeyAuZGVzYyA9ICYjMzQ7SVB2NCBWTEFOIGlucHV0LCBWSUQgMCBwcmlvcml0eSB0YWcgZmFpbHMgY2xvc2VkJiMzNDssCiYjNDM7CSAgLmRhZGRyID0gSVBWNF9WTEFOX0RTVCwgLmV4cGVjdGVkX3JldCA9IEJQRl9GSUJfTEtVUF9SRVRfTk9UX0ZXREVELAomIzQzOwkgIC5leHBlY3RlZF9kZXYgPSAmIzM0O3ZldGgxJiMzNDssIC5jaGVja192bGFuID0gdHJ1ZSwKJiM0MzsJICAubG9va3VwX2ZsYWdzID0gQlBGX0ZJQl9MT09LVVBfVkxBTl9JTlBVVCB8IEJQRl9GSUJfTE9PS1VQX1NLSVBfTkVJR0gsCiYjNDM7CSAgLnZsYW5fcHJvdG8gPSBFVEhfUF84MDIxUSwgLnZsYW5faWQgPSAwLCB9LAomIzQzOwl7IC5kZXNjID0gJiMzNDtJUHY2IFZMQU4gaW5wdXQsIHVubWF0Y2hlZCBWSUQmIzM0OywKJiM0MzsJICAuZGFkZHIgPSBJUFY2X1ZMQU5fRFNULCAuZXhwZWN0ZWRfcmV0ID0gQlBGX0ZJQl9MS1VQX1JFVF9OT1RfRldERUQsCiYjNDM7CSAgLmV4cGVjdGVkX2RldiA9ICYjMzQ7dmV0aDEmIzM0OywgLmNoZWNrX3ZsYW4gPSB0cnVlLAomIzQzOwkgIC5sb29rdXBfZmxhZ3MgPSBCUEZfRklCX0xPT0tVUF9WTEFOX0lOUFVUIHwgQlBGX0ZJQl9MT09LVVBfU0tJUF9ORUlHSCwKJiM0MzsJICAudmxhbl9wcm90byA9IEVUSF9QXzgwMjFRLCAudmxhbl9pZCA9IFZMQU5fVklEX1VOVVNFRCwgfSwKJiM0MzsJeyAuZGVzYyA9ICYjMzQ7dW5rbm93biBmbGFnIGJpdCByZWplY3RlZCYjMzQ7LAomIzQzOwkgIC5kYWRkciA9IElQVjRfVkxBTl9EU1QsIC5leHBlY3RlZF9yZXQgPSAtRUlOVkFMLAomIzQzOwkgIC5sb29rdXBfZmxhZ3MgPSAoMSAmbHQ7Jmx0OyAxNCkgfCBCUEZfRklCX0xPT0tVUF9TS0lQX05FSUdILCB9LAomIzQzOwl7IC5kZXNjID0gJiMzNDtJUHY0IFZMQU4gaW5wdXQgcmVqZWN0ZWQgd2l0aCBUQklEJiMzNDssCiYjNDM7CSAgLmRhZGRyID0gSVBWNF9WTEFOX0RTVCwgLmV4cGVjdGVkX3JldCA9IC1FSU5WQUwsCiYjNDM7CSAgLmxvb2t1cF9mbGFncyA9IEJQRl9GSUJfTE9PS1VQX1ZMQU5fSU5QVVQgfCBCUEZfRklCX0xPT0tVUF9UQklELAomIzQzOwkgIC52bGFuX3Byb3RvID0gRVRIX1BfODAyMVEsIC52bGFuX2lkID0gVkxBTl9JRCwgfSwKJiM0MzsJeyAuZGVzYyA9ICYjMzQ7SVB2NCBWTEFOIGlucHV0IHJlamVjdGVkIHdpdGggT1VUUFVUJiMzNDssCiYjNDM7CSAgLmRhZGRyID0gSVBWNF9WTEFOX0RTVCwgLmV4cGVjdGVkX3JldCA9IC1FSU5WQUwsCiYjNDM7CSAgLmxvb2t1cF9mbGFncyA9IEJQRl9GSUJfTE9PS1VQX1ZMQU5fSU5QVVQgfCBCUEZfRklCX0xPT0tVUF9PVVRQVVQsCiYjNDM7CSAgLnZsYW5fcHJvdG8gPSBFVEhfUF84MDIxUSwgLnZsYW5faWQgPSBWTEFOX0lELCB9LAogfTsKIAogc3RhdGljIGludCBzZXR1cF9uZXRucyh2b2lkKQpAQCAtMjA0LDYgJiM0Mzs0NzUsMTEwIEBAIHN0YXRpYyBpbnQgc2V0dXBfbmV0bnModm9pZCkKIAlTWVMoZmFpbCwgJiMzNDtpcCBydWxlIGFkZCBwcmlvIDIgZndtYXJrICVkIGxvb2t1cCAlcyYjMzQ7LCBNQVJLLCBNQVJLX1RBQkxFKTsKIAlTWVMoZmFpbCwgJiMzNDtpcCAtNiBydWxlIGFkZCBwcmlvIDIgZndtYXJrICVkIGxvb2t1cCAlcyYjMzQ7LCBNQVJLLCBNQVJLX1RBQkxFKTsKIAomIzQzOwkvKgomIzQzOwkgKiBTZXR1cCBmb3IgdmxhbiB0ZXN0czogYSBzdWJpbnRlcmZhY2UgZm9yIGVncmVzcyByZXNvbHV0aW9uIGFuZAomIzQzOwkgKiB0YWctYXMtaW5wdXQsIGEgUWluUSBzdGFjaywgYW5kIGFuIGlpZiBydWxlIHNvIHRoZSBpbnB1dCB0ZXN0cwomIzQzOwkgKiBvYnNlcnZlIHdoaWNoIGRldmljZSB0aGUgbG9va3VwIHVzZWQgYXMgaW5ncmVzcy4KJiM0MzsJICovCiYjNDM7CVNZUyhmYWlsLCAmIzM0O2lwIGxpbmsgYWRkIGxpbmsgdmV0aDEgbmFtZSAlcyB0eXBlIHZsYW4gaWQgJWQmIzM0OywKJiM0MzsJICAgIFZMQU5fSUZBQ0UsIFZMQU5fSUQpOwomIzQzOwlTWVMoZmFpbCwgJiMzNDtpcCBsaW5rIHNldCBkZXYgJXMgdXAmIzM0OywgVkxBTl9JRkFDRSk7CiYjNDM7CS8qCiYjNDM7CSAqIGxvd2VyIHRoYW4gdGhlIHZldGgxIHBhcmVudCAoMTUwMCk6IHRoZSBza2ItcGF0aCBtdHUgY2hlY2sgdXNlcyB0aGUKJiM0MzsJICogRklCIHJlc3VsdCAoVkxBTikgZGV2aWNlLCBzbyBtdHVfcmVzdWx0IGlzIHRoaXMgdmFsdWUgd2l0aCBvcgomIzQzOwkgKiB3aXRob3V0IHRoZSBlZ3Jlc3Mgc3dhcCwgd2hpY2ggdHdvIGFybXMgYmVsb3cgcGluCiYjNDM7CSAqLwomIzQzOwlTWVMoZmFpbCwgJiMzNDtpcCBsaW5rIHNldCBkZXYgJXMgbXR1IDE0MDAmIzM0OywgVkxBTl9JRkFDRSk7CiYjNDM7CVNZUyhmYWlsLCAmIzM0O2lwIGFkZHIgYWRkICVzLzI0IGRldiAlcyYjMzQ7LCBJUFY0X1ZMQU5fSUZBQ0VfQUREUiwgVkxBTl9JRkFDRSk7CiYjNDM7CVNZUyhmYWlsLCAmIzM0O2lwIGFkZHIgYWRkICVzLzY0IGRldiAlcyBub2RhZCYjMzQ7LCBJUFY2X1ZMQU5fSUZBQ0VfQUREUiwgVkxBTl9JRkFDRSk7CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIHN0YXlzIGRvd246IHRoZSBpbnB1dCBmbGFnIG11c3QgdHJlYXQgaXRzIHRhZyB0aGUgd2F5IHJlYWwKJiM0MzsJICogaW5ncmVzcyB0cmVhdHMgYSBmcmFtZSBhcnJpdmluZyBvbiBhIGRvd24gVkxBTiBkZXZpY2UgKGRyb3ApCiYjNDM7CSAqLwomIzQzOwlTWVMoZmFpbCwgJiMzNDtpcCBsaW5rIGFkZCBsaW5rIHZldGgxIG5hbWUgJXMgdHlwZSB2bGFuIGlkICVkJiMzNDssCiYjNDM7CSAgICBWTEFOX0lGQUNFX0RPV04sIFZMQU5fSURfRE9XTik7CiYjNDM7CiYjNDM7CWVyciA9IHdyaXRlX3N5c2N0bCgmIzM0Oy9wcm9jL3N5cy9uZXQvaXB2NC9jb25mLyYjMzQ7IFZMQU5fSUZBQ0UgJiMzNDsvZm9yd2FyZGluZyYjMzQ7LCAmIzM0OzEmIzM0Oyk7CiYjNDM7CWlmICghQVNTRVJUX09LKGVyciwgJiMzNDt3cml0ZV9zeXNjdGwobmV0LmlwdjQuY29uZi4mIzM0OyBWTEFOX0lGQUNFICYjMzQ7LmZvcndhcmRpbmcpJiMzNDspKQomIzQzOwkJZ290byBmYWlsOwomIzQzOwomIzQzOwllcnIgPSB3cml0ZV9zeXNjdGwoJiMzNDsvcHJvYy9zeXMvbmV0L2lwdjYvY29uZi8mIzM0OyBWTEFOX0lGQUNFICYjMzQ7L2ZvcndhcmRpbmcmIzM0OywgJiMzNDsxJiMzNDspOwomIzQzOwlpZiAoIUFTU0VSVF9PSyhlcnIsICYjMzQ7d3JpdGVfc3lzY3RsKG5ldC5pcHY2LmNvbmYuJiMzNDsgVkxBTl9JRkFDRSAmIzM0Oy5mb3J3YXJkaW5nKSYjMzQ7KSkKJiM0MzsJCWdvdG8gZmFpbDsKJiM0MzsKJiM0MzsJU1lTKGZhaWwsICYjMzQ7aXAgbGluayBhZGQgbGluayB2ZXRoMSBuYW1lICVzIHR5cGUgdmxhbiBwcm90byA4MDIuMWFkIGlkIDIwMCYjMzQ7LAomIzQzOwkgICAgUUlOUV9PVVRFUl9JRkFDRSk7CiYjNDM7CVNZUyhmYWlsLCAmIzM0O2lwIGxpbmsgYWRkIGxpbmsgJXMgbmFtZSAlcyB0eXBlIHZsYW4gaWQgMzAwJiMzNDssCiYjNDM7CSAgICBRSU5RX09VVEVSX0lGQUNFLCBRSU5RX0lOTkVSX0lGQUNFKTsKJiM0MzsJU1lTKGZhaWwsICYjMzQ7aXAgbGluayBzZXQgZGV2ICVzIHVwJiMzNDssIFFJTlFfT1VURVJfSUZBQ0UpOwomIzQzOwlTWVMoZmFpbCwgJiMzNDtpcCBsaW5rIHNldCBkZXYgJXMgdXAmIzM0OywgUUlOUV9JTk5FUl9JRkFDRSk7CiYjNDM7CVNZUyhmYWlsLCAmIzM0O2lwIHJvdXRlIGFkZCAlcy8zMiBkZXYgJXMmIzM0OywgSVBWNF9RSU5RX0RTVCwgUUlOUV9JTk5FUl9JRkFDRSk7CiYjNDM7CiYjNDM7CVNZUyhmYWlsLCAmIzM0O2lwIHJvdXRlIGFkZCAlcy8zMiB2aWEgJXMmIzM0OywgSVBWNF9WTEFOX0RTVCwgSVBWNF9HVzEpOwomIzQzOwlTWVMoZmFpbCwgJiMzNDtpcCByb3V0ZSBhZGQgdGFibGUgJXMgJXMvMzIgdmlhICVzJiMzNDssCiYjNDM7CSAgICBWTEFOX1RBQkxFLCBJUFY0X1ZMQU5fRFNULCBJUFY0X1ZMQU5fR1cpOwomIzQzOwlTWVMoZmFpbCwgJiMzNDtpcCBydWxlIGFkZCBwcmlvIDMgaWlmICVzIGxvb2t1cCAlcyYjMzQ7LCBWTEFOX0lGQUNFLCBWTEFOX1RBQkxFKTsKJiM0MzsJU1lTKGZhaWwsICYjMzQ7aXAgLTYgcm91dGUgYWRkICVzLzEyOCB2aWEgJXMmIzM0OywgSVBWNl9WTEFOX0RTVCwgSVBWNl9HVzEpOwomIzQzOwlTWVMoZmFpbCwgJiMzNDtpcCAtNiByb3V0ZSBhZGQgdGFibGUgJXMgJXMvMTI4IHZpYSAlcyYjMzQ7LAomIzQzOwkgICAgVkxBTl9UQUJMRSwgSVBWNl9WTEFOX0RTVCwgSVBWNl9WTEFOX0dXKTsKJiM0MzsJU1lTKGZhaWwsICYjMzQ7aXAgLTYgcnVsZSBhZGQgcHJpbyAzIGlpZiAlcyBsb29rdXAgJXMmIzM0OywgVkxBTl9JRkFDRSwgVkxBTl9UQUJMRSk7CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIGEgYm9uZCB3aXRoIG9uZSBwb3J0IGFuZCBhIFZMQU4gb24gdGhlIGJvbmQ6IFZMQU5zIG9uIGEgYm9uZAomIzQzOwkgKiBsaXZlIG9uIHRoZSBtYXN0ZXIsIHNvIHJlc29sdXRpb24gc3VjY2VlZHMgZm9yIHRoZSBtYXN0ZXImIzM5O3MKJiM0MzsJICogaWZpbmRleCBhbmQgZmFpbHMgY2xvc2VkIGZvciBhIHBvcnQmIzM5O3MsIG1hdGNoaW5nIHJlY2VpdmUsIHdoaWNoCiYjNDM7CSAqIHN0ZWVycyB0aGUgZnJhbWUgdG8gdGhlIG1hc3RlciBiZWZvcmUgVkxBTiBwcm9jZXNzaW5nCiYjNDM7CSAqLwomIzQzOwlTWVMoZmFpbCwgJiMzNDtpcCBsaW5rIGFkZCAlcyB0eXBlIGJvbmQmIzM0OywgQk9ORF9JRkFDRSk7CiYjNDM7CVNZUyhmYWlsLCAmIzM0O2lwIGxpbmsgYWRkICVzIHR5cGUgdmV0aCBwZWVyIG5hbWUgJXMmIzM0OywgQk9ORF9QT1JULCBCT05EX1BPUlRfUEVFUik7CiYjNDM7CVNZUyhmYWlsLCAmIzM0O2lwIGxpbmsgc2V0ICVzIG1hc3RlciAlcyYjMzQ7LCBCT05EX1BPUlQsIEJPTkRfSUZBQ0UpOwomIzQzOwlTWVMoZmFpbCwgJiMzNDtpcCBsaW5rIHNldCBkZXYgJXMgdXAmIzM0OywgQk9ORF9JRkFDRSk7CiYjNDM7CVNZUyhmYWlsLCAmIzM0O2lwIGxpbmsgc2V0IGRldiAlcyB1cCYjMzQ7LCBCT05EX1BPUlQpOwomIzQzOwlTWVMoZmFpbCwgJiMzNDtpcCBsaW5rIGFkZCBsaW5rICVzIG5hbWUgJXMuJWQgdHlwZSB2bGFuIGlkICVkJiMzNDssCiYjNDM7CSAgICBCT05EX0lGQUNFLCBCT05EX0lGQUNFLCBCT05EX1ZMQU5fSUQsIEJPTkRfVkxBTl9JRCk7CiYjNDM7CVNZUyhmYWlsLCAmIzM0O2lwIGxpbmsgc2V0IGRldiAlcy4lZCB1cCYjMzQ7LCBCT05EX0lGQUNFLCBCT05EX1ZMQU5fSUQpOwomIzQzOwlTWVMoZmFpbCwgJiMzNDtpcCByb3V0ZSBhZGQgJXMvMzIgZGV2ICVzLiVkJiMzNDssCiYjNDM7CSAgICBJUFY0X0JPTkRfVkxBTl9EU1QsIEJPTkRfSUZBQ0UsIEJPTkRfVkxBTl9JRCk7CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIGEgVlJGIHdpdGggaXRzIG93biBkZWRpY2F0ZWQgc3ViaW50ZXJmYWNlICh0aGUgaWlmIHJ1bGVzIGFib3ZlCiYjNDM7CSAqIG11c3Qgbm90IHNlZSBpdCksIGZvciB0aGUgdGFibGUtc2VsZWN0aW9uLWJ5LWluZ3Jlc3MgY2FzZXMKJiM0MzsJICovCiYjNDM7CVNZUyhmYWlsLCAmIzM0O2lwIGxpbmsgYWRkICVzIHR5cGUgdnJmIHRhYmxlICVzJiMzNDssIFZSRl9JRkFDRSwgVlJGX1RBQkxFKTsKJiM0MzsJU1lTKGZhaWwsICYjMzQ7aXAgbGluayBzZXQgZGV2ICVzIHVwJiMzNDssIFZSRl9JRkFDRSk7CiYjNDM7CVNZUyhmYWlsLCAmIzM0O2lwIGxpbmsgYWRkIGxpbmsgdmV0aDEgbmFtZSAlcyB0eXBlIHZsYW4gaWQgJWQmIzM0OywKJiM0MzsJICAgIFZSRl9WTEFOX0lGQUNFLCBWUkZfVkxBTl9JRCk7CiYjNDM7CVNZUyhmYWlsLCAmIzM0O2lwIGxpbmsgc2V0ICVzIG1hc3RlciAlcyYjMzQ7LCBWUkZfVkxBTl9JRkFDRSwgVlJGX0lGQUNFKTsKJiM0MzsJU1lTKGZhaWwsICYjMzQ7aXAgbGluayBzZXQgZGV2ICVzIHVwJiMzNDssIFZSRl9WTEFOX0lGQUNFKTsKJiM0MzsJU1lTKGZhaWwsICYjMzQ7aXAgYWRkciBhZGQgJXMvMjQgZGV2ICVzJiMzNDssIElQVjRfVlJGX0lGQUNFX0FERFIsIFZSRl9WTEFOX0lGQUNFKTsKJiM0MzsJZXJyID0gd3JpdGVfc3lzY3RsKCYjMzQ7L3Byb2Mvc3lzL25ldC9pcHY0L2NvbmYvJiMzNDsgVlJGX1ZMQU5fSUZBQ0UgJiMzNDsvZm9yd2FyZGluZyYjMzQ7LCAmIzM0OzEmIzM0Oyk7CiYjNDM7CWlmICghQVNTRVJUX09LKGVyciwgJiMzNDt3cml0ZV9zeXNjdGwobmV0LmlwdjQuY29uZi4mIzM0OyBWUkZfVkxBTl9JRkFDRSAmIzM0Oy5mb3J3YXJkaW5nKSYjMzQ7KSkKJiM0MzsJCWdvdG8gZmFpbDsKJiM0MzsJU1lTKGZhaWwsICYjMzQ7aXAgcm91dGUgYWRkICVzLzMyIHZpYSAlcyYjMzQ7LCBJUFY0X1ZSRl9EU1QsIElQVjRfR1cxKTsKJiM0MzsJU1lTKGZhaWwsICYjMzQ7aXAgcm91dGUgYWRkIHRhYmxlICVzICVzLzMyIHZpYSAlcyYjMzQ7LAomIzQzOwkgICAgVlJGX1RBQkxFLCBJUFY0X1ZSRl9EU1QsIElQVjRfVlJGX0dXKTsKJiM0MzsKJiM0MzsJLyogbmVpZ2hib3VycyBvbiB0aGUgVkxBTiBzdWJpbnRlcmZhY2UgZm9yIHRoZSBub24tU0tJUF9ORUlHSCBjYXNlcyAqLwomIzQzOwllcnIgPSB3cml0ZV9zeXNjdGwoJiMzNDsvcHJvYy9zeXMvbmV0L2lwdjQvbmVpZ2gvJiMzNDsgVkxBTl9JRkFDRSAmIzM0Oy9nY19zdGFsZV90aW1lJiMzNDssICYjMzQ7OTAwJiMzNDspOwomIzQzOwlpZiAoIUFTU0VSVF9PSyhlcnIsICYjMzQ7d3JpdGVfc3lzY3RsKG5ldC5pcHY0Lm5laWdoLiYjMzQ7IFZMQU5fSUZBQ0UgJiMzNDsuZ2Nfc3RhbGVfdGltZSkmIzM0OykpCiYjNDM7CQlnb3RvIGZhaWw7CiYjNDM7CVNZUyhmYWlsLCAmIzM0O2lwIG5laWdoIGFkZCAlcyBkZXYgJXMgbGxhZGRyICVzIG51ZCBzdGFsZSYjMzQ7LAomIzQzOwkgICAgSVBWNF9WTEFOX0VHUkVTU19EU1QsIFZMQU5fSUZBQ0UsIERNQUMpOwomIzQzOwlTWVMoZmFpbCwgJiMzNDtpcCBuZWlnaCBhZGQgJXMgZGV2ICVzIGxsYWRkciAlcyBudWQgc3RhbGUmIzM0OywKJiM0MzsJICAgIElQVjRfVkxBTl9HVywgVkxBTl9JRkFDRSwgRE1BQzIpOwomIzQzOwomIzQzOwkvKiBhIFZMQU4gb24gdmV0aDIgd2l0aCBhIHJvdXRlIGluIHRoZSB0YmlkIHRlc3QgdGFibGUgKi8KJiM0MzsJU1lTKGZhaWwsICYjMzQ7aXAgbGluayBhZGQgbGluayB2ZXRoMiBuYW1lICVzIHR5cGUgdmxhbiBpZCAlZCYjMzQ7LAomIzQzOwkgICAgVEJJRF9WTEFOX0lGQUNFLCBUQklEX1ZMQU5fSUQpOwomIzQzOwlTWVMoZmFpbCwgJiMzNDtpcCBsaW5rIHNldCBkZXYgJXMgdXAmIzM0OywgVEJJRF9WTEFOX0lGQUNFKTsKJiM0MzsJU1lTKGZhaWwsICYjMzQ7aXAgcm91dGUgYWRkIHRhYmxlIDEwMCAlcy8zMiBkZXYgJXMmIzM0OywKJiM0MzsJICAgIElQVjRfVEJJRF9WTEFOX0RTVCwgVEJJRF9WTEFOX0lGQUNFKTsKJiM0MzsKJiM0MzsJLyogYSBsb2NrZWQtbXR1IHJvdXRlIHZpYSB0aGUgc3ViaW50ZXJmYWNlIGZvciB0aGUgRlJBR19ORUVERUQgY2FzZSAqLwomIzQzOwlTWVMoZmFpbCwgJiMzNDtpcCByb3V0ZSBhZGQgJXMvMzIgZGV2ICVzIG10dSBsb2NrIDEwMDAmIzM0OywKJiM0MzsJICAgIElQVjRfVkxBTl9NVFVfRFNULCBWTEFOX0lGQUNFKTsKJiM0MzsKIAlyZXR1cm4gMDsKIGZhaWw6CiAJcmV0dXJuIC0xOwpAQCAtMjE4LDkgJiM0Mzs1OTMsMTYgQEAgc3RhdGljIGludCBzZXRfbG9va3VwX3BhcmFtcyhzdHJ1Y3QgYnBmX2ZpYl9sb29rdXAgKnBhcmFtcywKIAltZW1zZXQocGFyYW1zLCAwLCBzaXplb2YoKnBhcmFtcykpOwogCiAJcGFyYW1zLSZndDtsNF9wcm90b2NvbCA9IElQUFJPVE9fVENQOwotCXBhcmFtcy0mZ3Q7aWZpbmRleCA9IGlmaW5kZXg7CiYjNDM7CXBhcmFtcy0mZ3Q7aWZpbmRleCA9IHRlc3QtJmd0O2lpZiA/IGlmX25hbWV0b2luZGV4KHRlc3QtJmd0O2lpZikgOiBpZmluZGV4OwogCXBhcmFtcy0mZ3Q7dGJpZCA9IHRlc3QtJmd0O3RiaWQ7CiAJcGFyYW1zLSZndDttYXJrID0gdGVzdC0mZ3Q7bWFyazsKJiM0MzsJcGFyYW1zLSZndDt0b3RfbGVuID0gdGVzdC0mZ3Q7dG90X2xlbjsKJiM0MzsKJiM0MzsJLyogaF92bGFuX3Byb3RvL2hfdmxhbl9UQ0kgdW5pb24gd2l0aCB0YmlkICovCiYjNDM7CWlmICh0ZXN0LSZndDtsb29rdXBfZmxhZ3MgJmFtcDsgQlBGX0ZJQl9MT09LVVBfVkxBTl9JTlBVVCkgewomIzQzOwkJcGFyYW1zLSZndDtoX3ZsYW5fcHJvdG8gPSBodG9ucyh0ZXN0LSZndDt2bGFuX3Byb3RvKTsKJiM0MzsJCXBhcmFtcy0mZ3Q7aF92bGFuX1RDSSA9IGh0b25zKHRlc3QtJmd0O3ZsYW5faWQpOwomIzQzOwl9CiAKIAlpZiAoaW5ldF9wdG9uKEFGX0lORVQ2LCB0ZXN0LSZndDtkYWRkciwgcGFyYW1zLSZndDtpcHY2X2RzdCkgPT0gMSkgewogCQlwYXJhbXMtJmd0O2ZhbWlseSA9IEFGX0lORVQ2OwpAQCAtMjk4LDcgJiM0Mzs2ODAsNyBAQCB2b2lkIHRlc3RfZmliX2xvb2t1cCh2b2lkKQogCXN0cnVjdCBuc3Rva2VuICpuc3Rva2VuID0gTlVMTDsKIAlzdHJ1Y3QgX19za19idWZmIHNrYiA9IHsgfTsKIAlzdHJ1Y3QgZmliX2xvb2t1cCAqc2tlbDsKLQlpbnQgcHJvZ19mZCwgZXJyLCByZXQsIGk7CiYjNDM7CWludCBwcm9nX2ZkLCB4ZHBfZmQsIGVyciwgcmV0LCBpOwogCiAJLyogVGhlIHRlc3QgZG9lcyBub3QgdXNlIHRoZSBza2ItJmd0O2RhdGEsIHNvCiAJICogdXNlIHBrdF92NiBmb3IgYm90aCB2NiBhbmQgdjQgdGVzdC4KQEAgLTMwOSwxMSAmIzQzOzY5MSwxNiBAQCB2b2lkIHRlc3RfZmliX2xvb2t1cCh2b2lkKQogCQkgICAgLmN0eF9pbiA9ICZhbXA7c2tiLAogCQkgICAgLmN0eF9zaXplX2luID0gc2l6ZW9mKHNrYiksCiAJKTsKJiM0MzsJTElCQlBGX09QVFMoYnBmX3Rlc3RfcnVuX29wdHMsIHhkcF9vcHRzLAomIzQzOwkJICAgIC5kYXRhX2luID0gJmFtcDtwa3RfdjYsCiYjNDM7CQkgICAgLmRhdGFfc2l6ZV9pbiA9IHNpemVvZihwa3RfdjYpLAomIzQzOwkpOwogCiAJc2tlbCA9IGZpYl9sb29rdXBfX29wZW5fYW5kX2xvYWQoKTsKIAlpZiAoIUFTU0VSVF9PS19QVFIoc2tlbCwgJiMzNDtza2VsIG9wZW5fYW5kX2xvYWQmIzM0OykpCiAJCXJldHVybjsKIAlwcm9nX2ZkID0gYnBmX3Byb2dyYW1fX2ZkKHNrZWwtJmd0O3Byb2dzLmZpYl9sb29rdXApOwomIzQzOwl4ZHBfZmQgPSBicGZfcHJvZ3JhbV9fZmQoc2tlbC0mZ3Q7cHJvZ3MuZmliX2xvb2t1cF94ZHApOwogCiAJU1lTKGZhaWwsICYjMzQ7aXAgbmV0bnMgYWRkICVzJiMzNDssIE5TX1RFU1QpOwogCkBAIC0zNDMsNiAmIzQzOzczMCwxNSBAQCB2b2lkIHRlc3RfZmliX2xvb2t1cCh2b2lkKQogCQlpZiAoIUFTU0VSVF9PSyhlcnIsICYjMzQ7YnBmX3Byb2dfdGVzdF9ydW5fb3B0cyYjMzQ7KSkKIAkJCWNvbnRpbnVlOwogCiYjNDM7CQkvKiBCUEZfRklCX0xPT0tVUF9WTEFOIGlzIFhEUC1vbmx5OyB0aGUgdGMgaGVscGVyIHJlamVjdHMgaXQuCiYjNDM7CQkgKiBUaGVzZSBjYXNlcyBhcmUgZXhlcmNpc2VkIG9uIHRoZSBYRFAgcGF0aCBiZWxvdy4KJiM0MzsJCSAqLwomIzQzOwkJaWYgKHRlc3RzW2ldLmxvb2t1cF9mbGFncyAmYW1wOyBCUEZfRklCX0xPT0tVUF9WTEFOKSB7CiYjNDM7CQkJQVNTRVJUX0VRKHNrZWwtJmd0O2Jzcy0mZ3Q7ZmliX2xvb2t1cF9yZXQsIC1FSU5WQUwsCiYjNDM7CQkJCSAgJiMzNDt0YyByZWplY3RzIEJQRl9GSUJfTE9PS1VQX1ZMQU4mIzM0Oyk7CiYjNDM7CQkJY29udGludWU7CiYjNDM7CQl9CiYjNDM7CiAJCUFTU0VSVF9FUShza2VsLSZndDtic3MtJmd0O2ZpYl9sb29rdXBfcmV0LCB0ZXN0c1tpXS5leHBlY3RlZF9yZXQsCiAJCQkgICYjMzQ7ZmliX2xvb2t1cF9yZXQmIzM0Oyk7CiAKQEAgLTM1Miw2ICYjNDM7NzQ4LDIxIEBAIHZvaWQgdGVzdF9maWJfbG9va3VwKHZvaWQpCiAJCWlmICh0ZXN0c1tpXS5leHBlY3RlZF9kc3QpCiAJCQlhc3NlcnRfZHN0X2lwKGZpYl9wYXJhbXMsIHRlc3RzW2ldLmV4cGVjdGVkX2RzdCk7CiAKJiM0MzsJCWlmICh0ZXN0c1tpXS5leHBlY3RlZF9kZXYpCiYjNDM7CQkJQVNTRVJUX0VRKGZpYl9wYXJhbXMtJmd0O2lmaW5kZXgsCiYjNDM7CQkJCSAgaWZfbmFtZXRvaW5kZXgodGVzdHNbaV0uZXhwZWN0ZWRfZGV2KSwgJiMzNDtpZmluZGV4JiMzNDspOwomIzQzOwomIzQzOwkJaWYgKHRlc3RzW2ldLmV4cGVjdGVkX210dSkKJiM0MzsJCQlBU1NFUlRfRVEoZmliX3BhcmFtcy0mZ3Q7bXR1X3Jlc3VsdCwgdGVzdHNbaV0uZXhwZWN0ZWRfbXR1LAomIzQzOwkJCQkgICYjMzQ7bXR1X3Jlc3VsdCYjMzQ7KTsKJiM0MzsKJiM0MzsJCWlmICh0ZXN0c1tpXS5jaGVja192bGFuKSB7CiYjNDM7CQkJQVNTRVJUX0VRKGZpYl9wYXJhbXMtJmd0O2hfdmxhbl9wcm90bywKJiM0MzsJCQkJICBodG9ucyh0ZXN0c1tpXS52bGFuX3Byb3RvKSwgJiMzNDtoX3ZsYW5fcHJvdG8mIzM0Oyk7CiYjNDM7CQkJQVNTRVJUX0VRKGZpYl9wYXJhbXMtJmd0O2hfdmxhbl9UQ0ksCiYjNDM7CQkJCSAgaHRvbnModGVzdHNbaV0udmxhbl9pZCksICYjMzQ7aF92bGFuX1RDSSYjMzQ7KTsKJiM0MzsJCX0KJiM0MzsKIAkJcmV0ID0gbWVtY21wKHRlc3RzW2ldLmRtYWMsIGZpYl9wYXJhbXMtJmd0O2RtYWMsIHNpemVvZih0ZXN0c1tpXS5kbWFjKSk7CiAJCWlmICghQVNTRVJUX0VRKHJldCwgMCwgJiMzNDtkbWFjIG5vdCBtYXRjaCYjMzQ7KSkgewogCQkJY2hhciBleHBlY3RlZFsxOF0sIGFjdHVhbFsxOF07CkBAIC0zNjEsMTUgJiM0Mzs3NzIsMzEzIEBAIHZvaWQgdGVzdF9maWJfbG9va3VwKHZvaWQpCiAJCQlwcmludGYoJiMzNDtkbWFjIGV4cGVjdGVkICVzIGFjdHVhbCAlcyAmIzM0OywgZXhwZWN0ZWQsIGFjdHVhbCk7CiAJCX0KIAotCQkvLyBlbnN1cmUgdGJpZCBpcyB6ZXJvJiMzOTtkIG91dCBhZnRlciBmaWIgbG9va3VwLgotCQlpZiAodGVzdHNbaV0ubG9va3VwX2ZsYWdzICZhbXA7IEJQRl9GSUJfTE9PS1VQX0RJUkVDVCkgewomIzQzOwkJLyoKJiM0MzsJCSAqIGVuc3VyZSB0YmlkIGlzIHplcm8mIzM5O2Qgb3V0IGFmdGVyIGZpYiBsb29rdXAuIFdpdGgKJiM0MzsJCSAqIEJQRl9GSUJfTE9PS1VQX1ZMQU4gdGhlIHVuaW9uIGhvbGRzIHRoZSBwYWNrZWQgdmxhbgomIzQzOwkJICogZmllbGRzIGluc3RlYWQsIHNvIHNraXAgdGhlIGNoZWNrIGZvciB0aG9zZS4KJiM0MzsJCSAqLwomIzQzOwkJaWYgKCh0ZXN0c1tpXS5sb29rdXBfZmxhZ3MgJmFtcDsgQlBGX0ZJQl9MT09LVVBfRElSRUNUKSAmYW1wOyZhbXA7CiYjNDM7CQkgICAgISh0ZXN0c1tpXS5sb29rdXBfZmxhZ3MgJmFtcDsgQlBGX0ZJQl9MT09LVVBfVkxBTikpIHsKIAkJCWlmICghQVNTRVJUX0VRKHNrZWwtJmd0O2Jzcy0mZ3Q7ZmliX3BhcmFtcy50YmlkLCAwLAogCQkJCQkmIzM0O2V4cGVjdGVkIGZpYl9wYXJhbXMudGJpZCB0byBiZSB6ZXJvJiMzNDspKQogCQkJCWdvdG8gZmFpbDsKIAkJfQogCX0KIAomIzQzOwkvKgomIzQzOwkgKiBSZS1ydW4gdGhlIGNhc2VzIHRocm91Z2ggYnBmX3hkcF9maWJfbG9va3VwKCkuIHRlc3RfcnVuIHVzZXMgdGhlCiYjNDM7CSAqIGN1cnJlbnQgbmV0bnMmIzM5OyBsb29wYmFjayBmb3IgY3R4LSZndDtyeHEtJmd0O2Rldiwgc28gZGV2X25ldCgpIGlzIE5TX1RFU1QKJiM0MzsJICogYW5kIHRoZSBsb29rdXAgcnVucyBhZ2FpbnN0IGl0cyBGSUIuIFRoZSBwYXRoLWluZGVwZW5kZW50IHJlc3VsdHMKJiM0MzsJICogKHJldHVybiBjb2RlLCBzd2FwcGVkIGlmaW5kZXgsIHZsYW4gdGFnLCBnYXRld2F5KSBtdXN0IG1hdGNoIHRoZSBza2IKJiM0MzsJICogcGF0aDsgdGhlIG5vLXRvdF9sZW4gbXR1X3Jlc3VsdCBpcyBza2Itc3BlY2lmaWMgYW5kIG5vdCByZWNoZWNrZWQuCiYjNDM7CSAqLwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgQVJSQVlfU0laRSh0ZXN0cyk7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQlpZiAoc2V0X2xvb2t1cF9wYXJhbXMoZmliX3BhcmFtcywgJmFtcDt0ZXN0c1tpXSwgc2tiLmlmaW5kZXgpKQomIzQzOwkJCWNvbnRpbnVlOwomIzQzOwomIzQzOwkJc2tlbC0mZ3Q7YnNzLSZndDtmaWJfbG9va3VwX3JldCA9IC0xOwomIzQzOwkJc2tlbC0mZ3Q7YnNzLSZndDtsb29rdXBfZmxhZ3MgPSB0ZXN0c1tpXS5sb29rdXBfZmxhZ3M7CiYjNDM7CiYjNDM7CQllcnIgPSBicGZfcHJvZ190ZXN0X3J1bl9vcHRzKHhkcF9mZCwgJmFtcDt4ZHBfb3B0cyk7CiYjNDM7CQlpZiAoIUFTU0VSVF9PSyhlcnIsICYjMzQ7eGRwIHRlc3RfcnVuJiMzNDspKQomIzQzOwkJCWNvbnRpbnVlOwomIzQzOwomIzQzOwkJaWYgKCFBU1NFUlRfRVEoc2tlbC0mZ3Q7YnNzLSZndDtmaWJfbG9va3VwX3JldCwgdGVzdHNbaV0uZXhwZWN0ZWRfcmV0LAomIzQzOwkJCSAgICAgICAmIzM0O3hkcCBmaWJfbG9va3VwX3JldCYjMzQ7KSkKJiM0MzsJCQlwcmludGYoJiMzNDsoeGRwKSAlc1xuJiMzNDssIHRlc3RzW2ldLmRlc2MpOwomIzQzOwomIzQzOwkJaWYgKHRlc3RzW2ldLmV4cGVjdGVkX2RldikKJiM0MzsJCQlBU1NFUlRfRVEoZmliX3BhcmFtcy0mZ3Q7aWZpbmRleCwKJiM0MzsJCQkJICBpZl9uYW1ldG9pbmRleCh0ZXN0c1tpXS5leHBlY3RlZF9kZXYpLAomIzQzOwkJCQkgICYjMzQ7eGRwIGlmaW5kZXgmIzM0Oyk7CiYjNDM7CiYjNDM7CQlpZiAodGVzdHNbaV0uZXhwZWN0ZWRfZHN0KQomIzQzOwkJCWFzc2VydF9kc3RfaXAoZmliX3BhcmFtcywgdGVzdHNbaV0uZXhwZWN0ZWRfZHN0KTsKJiM0MzsKJiM0MzsJCWlmICh0ZXN0c1tpXS5jaGVja192bGFuKSB7CiYjNDM7CQkJQVNTRVJUX0VRKGZpYl9wYXJhbXMtJmd0O2hfdmxhbl9wcm90bywKJiM0MzsJCQkJICBodG9ucyh0ZXN0c1tpXS52bGFuX3Byb3RvKSwgJiMzNDt4ZHAgaF92bGFuX3Byb3RvJiMzNDspOwomIzQzOwkJCUFTU0VSVF9FUShmaWJfcGFyYW1zLSZndDtoX3ZsYW5fVENJLAomIzQzOwkJCQkgIGh0b25zKHRlc3RzW2ldLnZsYW5faWQpLCAmIzM0O3hkcCBoX3ZsYW5fVENJJiMzNDspOwomIzQzOwkJfQomIzQzOwomIzQzOwkJcmV0ID0gbWVtY21wKHRlc3RzW2ldLmRtYWMsIGZpYl9wYXJhbXMtJmd0O2RtYWMsIHNpemVvZih0ZXN0c1tpXS5kbWFjKSk7CiYjNDM7CQlBU1NFUlRfRVEocmV0LCAwLCAmIzM0O3hkcCBkbWFjJiMzNDspOwomIzQzOwomIzQzOwkJLyoKJiM0MzsJCSAqIG10dV9yZXN1bHQgZnJvbSBhIHRvdF9sZW4gbG9va3VwIGlzIHRoZSByb3V0ZSBtdHUgYW5kIGlzCiYjNDM7CQkgKiBwYXRoLWluZGVwZW5kZW50OyB0aGUgbm8tdG90X2xlbiBhcm0gcmVhZHMgZGV2LSZndDttdHUgYW5kIGlzCiYjNDM7CQkgKiBza2Itb25seSwgc28gZ2F0ZSBvbiB0b3RfbGVuCiYjNDM7CQkgKi8KJiM0MzsJCWlmICh0ZXN0c1tpXS5leHBlY3RlZF9tdHUgJmFtcDsmYW1wOyB0ZXN0c1tpXS50b3RfbGVuKQomIzQzOwkJCUFTU0VSVF9FUShmaWJfcGFyYW1zLSZndDttdHVfcmVzdWx0LCB0ZXN0c1tpXS5leHBlY3RlZF9tdHUsCiYjNDM7CQkJCSAgJiMzNDt4ZHAgbXR1X3Jlc3VsdCYjMzQ7KTsKJiM0MzsJfQomIzQzOwomIzQzO2ZhaWw6CiYjNDM7CWlmIChuc3Rva2VuKQomIzQzOwkJY2xvc2VfbmV0bnMobnN0b2tlbik7CiYjNDM7CVNZU19OT0ZBSUwoJiMzNDtpcCBuZXRucyBkZWwgJiMzNDsgTlNfVEVTVCk7CiYjNDM7CWZpYl9sb29rdXBfX2Rlc3Ryb3koc2tlbCk7CiYjNDM7fQomIzQzOwomIzQzOyNkZWZpbmUgTlNfVkxBTl9BCSYjMzQ7ZmliX2xvb2t1cF92bGFuX25zX2EmIzM0OwomIzQzOyNkZWZpbmUgTlNfVkxBTl9CCSYjMzQ7ZmliX2xvb2t1cF92bGFuX25zX2ImIzM0OwomIzQzOwomIzQzOy8qCiYjNDM7ICogQSBWTEFOIGRldmljZSBjYW4gYmUgbW92ZWQgdG8gYW5vdGhlciBuZXRucyB3aGlsZSBzdGF5aW5nIHJlZ2lzdGVyZWQKJiM0MzsgKiBvbiBpdHMgcGFyZW50LiBOZWl0aGVyIGRpcmVjdGlvbiBtYXkgdGhlbiBjcm9zcyB0aGUgYm91bmRhcnk6IHRoZQomIzQzOyAqIGVncmVzcyBmbGFnIG11c3Qgbm90IHB1Ymxpc2ggdGhlIGZvcmVpZ24gcGFyZW50JiMzOTtzIGlmaW5kZXgsIGFuZCB0aGUKJiM0MzsgKiBpbnB1dCBmbGFnIG11c3QgZmFpbCBjbG9zZWQgcmF0aGVyIHRoYW4gdXNlIGEgZm9yZWlnbiBpbmdyZXNzLgomIzQzOyAqLwomIzQzO3ZvaWQgdGVzdF9maWJfbG9va3VwX3ZsYW5fbmV0bnModm9pZCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBicGZfZmliX2xvb2t1cCAqZmliX3BhcmFtczsKJiM0MzsJc3RydWN0IG5zdG9rZW4gKm5zdG9rZW4gPSBOVUxMOwomIzQzOwlzdHJ1Y3QgX19za19idWZmIHNrYiA9IHsgfTsKJiM0MzsJc3RydWN0IGZpYl9sb29rdXAgKnNrZWwgPSBOVUxMOwomIzQzOwlpbnQgcHJvZ19mZCwgeGRwX2ZkLCBlcnIsIHBhcmVudF9pZHgsIHZsYW5faWR4OwomIzQzOwomIzQzOwlMSUJCUEZfT1BUUyhicGZfdGVzdF9ydW5fb3B0cywgcnVuX29wdHMsCiYjNDM7CQkgICAgLmRhdGFfaW4gPSAmYW1wO3BrdF92NiwKJiM0MzsJCSAgICAuZGF0YV9zaXplX2luID0gc2l6ZW9mKHBrdF92NiksCiYjNDM7CQkgICAgLmN0eF9pbiA9ICZhbXA7c2tiLAomIzQzOwkJICAgIC5jdHhfc2l6ZV9pbiA9IHNpemVvZihza2IpLAomIzQzOwkpOwomIzQzOwlMSUJCUEZfT1BUUyhicGZfdGVzdF9ydW5fb3B0cywgeGRwX29wdHMsCiYjNDM7CQkgICAgLmRhdGFfaW4gPSAmYW1wO3BrdF92NiwKJiM0MzsJCSAgICAuZGF0YV9zaXplX2luID0gc2l6ZW9mKHBrdF92NiksCiYjNDM7CSk7CiYjNDM7CiYjNDM7CXNrZWwgPSBmaWJfbG9va3VwX19vcGVuX2FuZF9sb2FkKCk7CiYjNDM7CWlmICghQVNTRVJUX09LX1BUUihza2VsLCAmIzM0O3NrZWwgb3Blbl9hbmRfbG9hZCYjMzQ7KSkKJiM0MzsJCXJldHVybjsKJiM0MzsJcHJvZ19mZCA9IGJwZl9wcm9ncmFtX19mZChza2VsLSZndDtwcm9ncy5maWJfbG9va3VwKTsKJiM0MzsJeGRwX2ZkID0gYnBmX3Byb2dyYW1fX2ZkKHNrZWwtJmd0O3Byb2dzLmZpYl9sb29rdXBfeGRwKTsKJiM0MzsJZmliX3BhcmFtcyA9ICZhbXA7c2tlbC0mZ3Q7YnNzLSZndDtmaWJfcGFyYW1zOwomIzQzOwomIzQzOwlTWVMoZmFpbCwgJiMzNDtpcCBuZXRucyBhZGQgJXMmIzM0OywgTlNfVkxBTl9BKTsKJiM0MzsJU1lTKGZhaWwsICYjMzQ7aXAgbmV0bnMgYWRkICVzJiMzNDssIE5TX1ZMQU5fQik7CiYjNDM7CiYjNDM7CW5zdG9rZW4gPSBvcGVuX25ldG5zKE5TX1ZMQU5fQSk7CiYjNDM7CWlmICghQVNTRVJUX09LX1BUUihuc3Rva2VuLCAmIzM0O29wZW5fbmV0bnMoYSkmIzM0OykpCiYjNDM7CQlnb3RvIGZhaWw7CiYjNDM7CiYjNDM7CVNZUyhmYWlsLCAmIzM0O2lwIGxpbmsgYWRkIHZldGg3IHR5cGUgdmV0aCBwZWVyIG5hbWUgdmV0aDgmIzM0Oyk7CiYjNDM7CVNZUyhmYWlsLCAmIzM0O2lwIGxpbmsgc2V0IGRldiB2ZXRoNyB1cCYjMzQ7KTsKJiM0MzsJU1lTKGZhaWwsICYjMzQ7aXAgbGluayBhZGQgbGluayB2ZXRoNyBuYW1lIHZldGg3LjY2IHR5cGUgdmxhbiBpZCA2NiYjMzQ7KTsKJiM0MzsJU1lTKGZhaWwsICYjMzQ7aXAgbGluayBzZXQgdmV0aDcuNjYgbmV0bnMgJXMmIzM0OywgTlNfVkxBTl9CKTsKJiM0MzsKJiM0MzsJcGFyZW50X2lkeCA9IGlmX25hbWV0b2luZGV4KCYjMzQ7dmV0aDcmIzM0Oyk7CiYjNDM7CWlmICghQVNTRVJUX05FUShwYXJlbnRfaWR4LCAwLCAmIzM0O2lmX25hbWV0b2luZGV4KHZldGg3KSYjMzQ7KSkKJiM0MzsJCWdvdG8gZmFpbDsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogaW5wdXQ6IHRoZSBtb3ZlZCBkZXZpY2UgaXMgc3RpbGwgaW4gdmV0aDcmIzM5O3MgVkxBTiBncm91cCwgYnV0IGl0CiYjNDM7CSAqIGxpdmVzIGluIGFub3RoZXIgbmV0bnMsIHNvIHRoZSBsb29rdXAgbXVzdCBmYWlsIGNsb3NlZAomIzQzOwkgKi8KJiM0MzsJc2tiLmlmaW5kZXggPSBwYXJlbnRfaWR4OwomIzQzOwltZW1zZXQoZmliX3BhcmFtcywgMCwgc2l6ZW9mKCpmaWJfcGFyYW1zKSk7CiYjNDM7CWZpYl9wYXJhbXMtJmd0O2ZhbWlseSA9IEFGX0lORVQ7CiYjNDM7CWZpYl9wYXJhbXMtJmd0O2w0X3Byb3RvY29sID0gSVBQUk9UT19UQ1A7CiYjNDM7CWZpYl9wYXJhbXMtJmd0O2lmaW5kZXggPSBwYXJlbnRfaWR4OwomIzQzOwlmaWJfcGFyYW1zLSZndDtoX3ZsYW5fcHJvdG8gPSBodG9ucyhFVEhfUF84MDIxUSk7CiYjNDM7CWZpYl9wYXJhbXMtJmd0O2hfdmxhbl9UQ0kgPSBodG9ucyg2Nik7CiYjNDM7CWlmICghQVNTRVJUX0VRKGluZXRfcHRvbihBRl9JTkVULCAmIzM0OzEwLjY2LjAuMiYjMzQ7LCAmYW1wO2ZpYl9wYXJhbXMtJmd0O2lwdjRfZHN0KSwKJiM0MzsJCSAgICAgICAxLCAmIzM0O2luZXRfcHRvbihkc3QpJiMzNDspKQomIzQzOwkJZ290byBmYWlsOwomIzQzOwomIzQzOwlza2VsLSZndDtic3MtJmd0O2ZpYl9sb29rdXBfcmV0ID0gLTE7CiYjNDM7CXNrZWwtJmd0O2Jzcy0mZ3Q7bG9va3VwX2ZsYWdzID0gQlBGX0ZJQl9MT09LVVBfVkxBTl9JTlBVVCB8CiYjNDM7CQkJCSAgQlBGX0ZJQl9MT09LVVBfU0tJUF9ORUlHSDsKJiM0MzsJZXJyID0gYnBmX3Byb2dfdGVzdF9ydW5fb3B0cyhwcm9nX2ZkLCAmYW1wO3J1bl9vcHRzKTsKJiM0MzsJaWYgKCFBU1NFUlRfT0soZXJyLCAmIzM0O3Rlc3RfcnVuKGlucHV0KSYjMzQ7KSkKJiM0MzsJCWdvdG8gZmFpbDsKJiM0MzsJQVNTRVJUX0VRKHNrZWwtJmd0O2Jzcy0mZ3Q7ZmliX2xvb2t1cF9yZXQsIEJQRl9GSUJfTEtVUF9SRVRfTk9UX0ZXREVELAomIzQzOwkJICAmIzM0O2lucHV0IGFjcm9zcyBuZXRucyBmYWlscyBjbG9zZWQmIzM0Oyk7CiYjNDM7CUFTU0VSVF9FUShmaWJfcGFyYW1zLSZndDtpZmluZGV4LCBwYXJlbnRfaWR4LCAmIzM0O2lmaW5kZXggdW50b3VjaGVkJiMzNDspOwomIzQzOwlBU1NFUlRfRVEoZmliX3BhcmFtcy0mZ3Q7aF92bGFuX1RDSSwgaHRvbnMoNjYpLCAmIzM0O3RhZyB1bnRvdWNoZWQmIzM0Oyk7CiYjNDM7CiYjNDM7CWNsb3NlX25ldG5zKG5zdG9rZW4pOwomIzQzOwluc3Rva2VuID0gb3Blbl9uZXRucyhOU19WTEFOX0IpOwomIzQzOwlpZiAoIUFTU0VSVF9PS19QVFIobnN0b2tlbiwgJiMzNDtvcGVuX25ldG5zKGIpJiMzNDspKQomIzQzOwkJZ290byBmYWlsOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBlZ3Jlc3M6IHRoZSBmaWIgcmVzdWx0IGlzIHRoZSBWTEFOIGRldmljZSBoZXJlLCBidXQgaXRzIHBhcmVudAomIzQzOwkgKiBpcyBpbiB0aGUgb3RoZXIgbmV0bnMsIHNvIHRoZSBzd2FwIG11c3Qgbm90IGhhcHBlbgomIzQzOwkgKi8KJiM0MzsJU1lTKGZhaWwsICYjMzQ7aXAgbGluayBzZXQgZGV2IHZldGg3LjY2IHVwJiMzNDspOwomIzQzOwlTWVMoZmFpbCwgJiMzNDtpcCBhZGRyIGFkZCAxMC42Ni4wLjEvMjQgZGV2IHZldGg3LjY2JiMzNDspOwomIzQzOwllcnIgPSB3cml0ZV9zeXNjdGwoJiMzNDsvcHJvYy9zeXMvbmV0L2lwdjQvY29uZi92ZXRoNy42Ni9mb3J3YXJkaW5nJiMzNDssICYjMzQ7MSYjMzQ7KTsKJiM0MzsJaWYgKCFBU1NFUlRfT0soZXJyLCAmIzM0O3dyaXRlX3N5c2N0bChmb3J3YXJkaW5nKSYjMzQ7KSkKJiM0MzsJCWdvdG8gZmFpbDsKJiM0MzsKJiM0MzsJdmxhbl9pZHggPSBpZl9uYW1ldG9pbmRleCgmIzM0O3ZldGg3LjY2JiMzNDspOwomIzQzOwlpZiAoIUFTU0VSVF9ORVEodmxhbl9pZHgsIDAsICYjMzQ7aWZfbmFtZXRvaW5kZXgodmV0aDcuNjYpJiMzNDspKQomIzQzOwkJZ290byBmYWlsOwomIzQzOwomIzQzOwlza2IuaWZpbmRleCA9IHZsYW5faWR4OwomIzQzOwltZW1zZXQoZmliX3BhcmFtcywgMCwgc2l6ZW9mKCpmaWJfcGFyYW1zKSk7CiYjNDM7CWZpYl9wYXJhbXMtJmd0O2ZhbWlseSA9IEFGX0lORVQ7CiYjNDM7CWZpYl9wYXJhbXMtJmd0O2w0X3Byb3RvY29sID0gSVBQUk9UT19UQ1A7CiYjNDM7CWZpYl9wYXJhbXMtJmd0O2lmaW5kZXggPSB2bGFuX2lkeDsKJiM0MzsJaWYgKCFBU1NFUlRfRVEoaW5ldF9wdG9uKEFGX0lORVQsICYjMzQ7MTAuNjYuMC4yJiMzNDssICZhbXA7ZmliX3BhcmFtcy0mZ3Q7aXB2NF9kc3QpLAomIzQzOwkJICAgICAgIDEsICYjMzQ7aW5ldF9wdG9uKGRzdCkmIzM0OykgfHwKJiM0MzsJICAgICFBU1NFUlRfRVEoaW5ldF9wdG9uKEFGX0lORVQsICYjMzQ7MTAuNjYuMC4xJiMzNDssICZhbXA7ZmliX3BhcmFtcy0mZ3Q7aXB2NF9zcmMpLAomIzQzOwkJICAgICAgIDEsICYjMzQ7aW5ldF9wdG9uKHNyYykmIzM0OykpCiYjNDM7CQlnb3RvIGZhaWw7CiYjNDM7CiYjNDM7CXNrZWwtJmd0O2Jzcy0mZ3Q7ZmliX2xvb2t1cF9yZXQgPSAtMTsKJiM0MzsJc2tlbC0mZ3Q7YnNzLSZndDtsb29rdXBfZmxhZ3MgPSBCUEZfRklCX0xPT0tVUF9WTEFOIHwKJiM0MzsJCQkJICBCUEZfRklCX0xPT0tVUF9TS0lQX05FSUdIOwomIzQzOwllcnIgPSBicGZfcHJvZ190ZXN0X3J1bl9vcHRzKHhkcF9mZCwgJmFtcDt4ZHBfb3B0cyk7CiYjNDM7CWlmICghQVNTRVJUX09LKGVyciwgJiMzNDt0ZXN0X3J1bihlZ3Jlc3MpJiMzNDspKQomIzQzOwkJZ290byBmYWlsOwomIzQzOwlBU1NFUlRfRVEoc2tlbC0mZ3Q7YnNzLSZndDtmaWJfbG9va3VwX3JldCwgQlBGX0ZJQl9MS1VQX1JFVF9WTEFOX0ZBSUxVUkUsCiYjNDM7CQkgICYjMzQ7ZWdyZXNzIHJldHVybnMgVkxBTl9GQUlMVVJFJiMzNDspOwomIzQzOwlBU1NFUlRfRVEoZmliX3BhcmFtcy0mZ3Q7aWZpbmRleCwgdmxhbl9pZHgsCiYjNDM7CQkgICYjMzQ7Zm9yZWlnbiBwYXJlbnQgbm90IHB1Ymxpc2hlZCYjMzQ7KTsKJiM0MzsJQVNTRVJUX0VRKGZpYl9wYXJhbXMtJmd0O2hfdmxhbl9UQ0ksIDAsICYjMzQ7dmxhbiBmaWVsZHMgemVybyYjMzQ7KTsKJiM0MzsKJiM0MztmYWlsOgomIzQzOwlpZiAobnN0b2tlbikKJiM0MzsJCWNsb3NlX25ldG5zKG5zdG9rZW4pOwomIzQzOwlTWVNfTk9GQUlMKCYjMzQ7aXAgbmV0bnMgZGVsICYjMzQ7IE5TX1ZMQU5fQSk7CiYjNDM7CVNZU19OT0ZBSUwoJiMzNDtpcCBuZXRucyBkZWwgJiMzNDsgTlNfVkxBTl9CKTsKJiM0MzsJZmliX2xvb2t1cF9fZGVzdHJveShza2VsKTsKJiM0Mzt9CiYjNDM7CiYjNDM7I2RlZmluZSBSRURJUkVDVF9OUEtUUyAxMDAwCiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBUaGUgZWdyZXNzIGZsYWcgZXhpc3RzIHNvIGFuIFhEUCBwcm9ncmFtIGNhbiByZWRpcmVjdCB0byB0aGUgcGh5c2ljYWwKJiM0MzsgKiBwYXJlbnQuIEEgcmVkaXJlY3QgdGhhdCBsYW5kcyBvbiBhIFZMQU4gZGV2aWNlIGlzIGRyb3BwZWQgYXQKJiM0MzsgKiB4ZHBfZG9fZmx1c2goKSwgYmVjYXVzZSBhIFZMQU4gZGV2aWNlIGhhcyBubyBuZG9feGRwX3htaXQuIERyaXZlIHJlYWwKJiM0MzsgKiBmcmFtZXMgd2l0aCBCUEZfRl9URVNUX1hEUF9MSVZFX0ZSQU1FUywgd2hpY2ggcnVucyB0aGUgbmF0aXZlCiYjNDM7ICogeGRwX2RvX3JlZGlyZWN0KCkgJiM0MzsgeGRwX2RvX2ZsdXNoKCkgcGF0aDogYSByZWR1Y2libGUgVkxBTiBlZ3Jlc3MKJiM0MzsgKiByZXNvbHZlcyB0byB2ZXRoMSBhbmQgaXMgZGVsaXZlcmVkIHRvIGl0cyBwZWVyIHZldGgyLCB3aGlsZSBhIFFpblEKJiM0MzsgKiBlZ3Jlc3MgcmV0dXJucyBWTEFOX0ZBSUxVUkUgYW5kIGlzIHBhc3NlZCB0byB0aGUgc3RhY2sgaW5zdGVhZCBvZgomIzQzOyAqIHJlZGlyZWN0ZWQgdG8gYSBkZXZpY2UgdGhhdCB3b3VsZCBzaWxlbnRseSBkcm9wIGl0LgomIzQzOyAqLwomIzQzO3ZvaWQgdGVzdF9maWJfbG9va3VwX3ZsYW5fcmVkaXJlY3Qodm9pZCkKJiM0Mzt7CiYjNDM7CWludCByZWRpcmVjdF9mZCwgZXJyLCB2ZXRoMV9pZHgsIHZldGgyX2lkeCA9IC0xOwomIzQzOwlzdHJ1Y3QgYnBmX2ZpYl9sb29rdXAgKmZpYl9wYXJhbXM7CiYjNDM7CXN0cnVjdCBuc3Rva2VuICpuc3Rva2VuID0gTlVMTDsKJiM0MzsJc3RydWN0IGZpYl9sb29rdXAgKnNrZWwgPSBOVUxMOwomIzQzOwlib29sIHhkcF9hdHRhY2hlZCA9IGZhbHNlOwomIzQzOwomIzQzOwlMSUJCUEZfT1BUUyhicGZfdGVzdF9ydW5fb3B0cywgbGZfb3B0cywKJiM0MzsJCSAgICAuZGF0YV9pbiA9ICZhbXA7cGt0X3Y0LAomIzQzOwkJICAgIC5kYXRhX3NpemVfaW4gPSBzaXplb2YocGt0X3Y0KSwKJiM0MzsJCSAgICAuZmxhZ3MgPSBCUEZfRl9URVNUX1hEUF9MSVZFX0ZSQU1FUywKJiM0MzsJCSAgICAucmVwZWF0ID0gUkVESVJFQ1RfTlBLVFMsCiYjNDM7CSk7CiYjNDM7CiYjNDM7CXNrZWwgPSBmaWJfbG9va3VwX19vcGVuX2FuZF9sb2FkKCk7CiYjNDM7CWlmICghQVNTRVJUX09LX1BUUihza2VsLCAmIzM0O3NrZWwgb3Blbl9hbmRfbG9hZCYjMzQ7KSkKJiM0MzsJCXJldHVybjsKJiM0MzsJcmVkaXJlY3RfZmQgPSBicGZfcHJvZ3JhbV9fZmQoc2tlbC0mZ3Q7cHJvZ3MuZmliX2xvb2t1cF9yZWRpcmVjdCk7CiYjNDM7CWZpYl9wYXJhbXMgPSAmYW1wO3NrZWwtJmd0O2Jzcy0mZ3Q7ZmliX3BhcmFtczsKJiM0MzsKJiM0MzsJU1lTKGZhaWwsICYjMzQ7aXAgbmV0bnMgYWRkICVzJiMzNDssIE5TX1RFU1QpOwomIzQzOwluc3Rva2VuID0gb3Blbl9uZXRucyhOU19URVNUKTsKJiM0MzsJaWYgKCFBU1NFUlRfT0tfUFRSKG5zdG9rZW4sICYjMzQ7b3Blbl9uZXRucyYjMzQ7KSkKJiM0MzsJCWdvdG8gZmFpbDsKJiM0MzsJaWYgKHNldHVwX25ldG5zKCkpCiYjNDM7CQlnb3RvIGZhaWw7CiYjNDM7CiYjNDM7CXZldGgxX2lkeCA9IGlmX25hbWV0b2luZGV4KCYjMzQ7dmV0aDEmIzM0Oyk7CiYjNDM7CXZldGgyX2lkeCA9IGlmX25hbWV0b2luZGV4KCYjMzQ7dmV0aDImIzM0Oyk7CiYjNDM7CWlmICghQVNTRVJUX05FUSh2ZXRoMV9pZHgsIDAsICYjMzQ7aWZfbmFtZXRvaW5kZXgodmV0aDEpJiMzNDspIHx8CiYjNDM7CSAgICAhQVNTRVJUX05FUSh2ZXRoMl9pZHgsIDAsICYjMzQ7aWZfbmFtZXRvaW5kZXgodmV0aDIpJiMzNDspKQomIzQzOwkJZ290byBmYWlsOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBBIHJlZGlyZWN0IHRvIHZldGgxIGlzIGRlbGl2ZXJlZCB0byBpdHMgcGVlciB2ZXRoMi4gdmV0aF94ZHBfeG1pdCgpCiYjNDM7CSAqIG9ubHkgYWNjZXB0cyB0aGUgZnJhbWUgaWYgdmV0aDImIzM5O3MgTkFQSSBpcyB1cCwgd2hpY2ggb24gdmV0aCBtZWFucwomIzQzOwkgKiB2ZXRoMiBjYXJyaWVzIGFuIFhEUCBwcm9ncmFtOyB4ZHBfY291bnQgdGFsbGllcyB3aGF0IGFycml2ZXMuCiYjNDM7CSAqLwomIzQzOwllcnIgPSBicGZfeGRwX2F0dGFjaCh2ZXRoMl9pZHgsIGJwZl9wcm9ncmFtX19mZChza2VsLSZndDtwcm9ncy54ZHBfY291bnQpLAomIzQzOwkJCSAgICAgWERQX0ZMQUdTX0RSVl9NT0RFLCBOVUxMKTsKJiM0MzsJaWYgKCFBU1NFUlRfT0soZXJyLCAmIzM0O2F0dGFjaCB4ZHBfY291bnQgb24gdmV0aDImIzM0OykpCiYjNDM7CQlnb3RvIGZhaWw7CiYjNDM7CXhkcF9hdHRhY2hlZCA9IHRydWU7CiYjNDM7CiYjNDM7CS8qIHJlZHVjaWJsZSBWTEFOIGVncmVzczogcmVzb2x2ZXMgdG8gdGhlIHBoeXNpY2FsIHBhcmVudCB2ZXRoMSAqLwomIzQzOwltZW1zZXQoZmliX3BhcmFtcywgMCwgc2l6ZW9mKCpmaWJfcGFyYW1zKSk7CiYjNDM7CWZpYl9wYXJhbXMtJmd0O2ZhbWlseSA9IEFGX0lORVQ7CiYjNDM7CWZpYl9wYXJhbXMtJmd0O2w0X3Byb3RvY29sID0gSVBQUk9UT19UQ1A7CiYjNDM7CWZpYl9wYXJhbXMtJmd0O2lmaW5kZXggPSB2ZXRoMV9pZHg7CiYjNDM7CWlmICghQVNTRVJUX0VRKGluZXRfcHRvbihBRl9JTkVULCBJUFY0X0lGQUNFX0FERFIsICZhbXA7ZmliX3BhcmFtcy0mZ3Q7aXB2NF9zcmMpLAomIzQzOwkJICAgICAgIDEsICYjMzQ7aW5ldF9wdG9uKHNyYykmIzM0OykgfHwKJiM0MzsJICAgICFBU1NFUlRfRVEoaW5ldF9wdG9uKEFGX0lORVQsIElQVjRfVkxBTl9FR1JFU1NfRFNULCAmYW1wO2ZpYl9wYXJhbXMtJmd0O2lwdjRfZHN0KSwKJiM0MzsJCSAgICAgICAxLCAmIzM0O2luZXRfcHRvbihyZWR1Y2libGUgZHN0KSYjMzQ7KSkKJiM0MzsJCWdvdG8gZmFpbDsKJiM0MzsJc2tlbC0mZ3Q7YnNzLSZndDtsb29rdXBfZmxhZ3MgPSBCUEZfRklCX0xPT0tVUF9WTEFOIHwgQlBGX0ZJQl9MT09LVVBfU0tJUF9ORUlHSDsKJiM0MzsJc2tlbC0mZ3Q7YnNzLSZndDtyZWRpcmVjdGVkID0gMDsKJiM0MzsJc2tlbC0mZ3Q7YnNzLSZndDtwYXNzZWQgPSAwOwomIzQzOwlza2VsLSZndDtic3MtJmd0O2RlbGl2ZXJlZCA9IDA7CiYjNDM7CiYjNDM7CWVyciA9IGJwZl9wcm9nX3Rlc3RfcnVuX29wdHMocmVkaXJlY3RfZmQsICZhbXA7bGZfb3B0cyk7CiYjNDM7CWlmICghQVNTRVJUX09LKGVyciwgJiMzNDt0ZXN0X3J1bihyZWR1Y2libGUgZWdyZXNzKSYjMzQ7KSkKJiM0MzsJCWdvdG8gZmFpbDsKJiM0MzsJQVNTRVJUX0VRKHNrZWwtJmd0O2Jzcy0mZ3Q7cmVkaXJlY3RlZCwgUkVESVJFQ1RfTlBLVFMsICYjMzQ7cmVkdWNpYmxlIGVncmVzcyByZWRpcmVjdGVkJiMzNDspOwomIzQzOwlBU1NFUlRfRVEoc2tlbC0mZ3Q7YnNzLSZndDtwYXNzZWQsIDAsICYjMzQ7cmVkdWNpYmxlIGVncmVzcyBub3QgcGFzc2VkJiMzNDspOwomIzQzOwlBU1NFUlRfR1Qoc2tlbC0mZ3Q7YnNzLSZndDtkZWxpdmVyZWQsIDAsICYjMzQ7cmVkdWNpYmxlIGVncmVzcyBkZWxpdmVyZWQgdG8gdmV0aDImIzM0Oyk7CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIFFpblEgZWdyZXNzOiBub3QgcmVkdWNpYmxlLCBzbyB0aGUgbG9va3VwIHJldHVybnMgVkxBTl9GQUlMVVJFIGFuZAomIzQzOwkgKiB0aGUgcHJvZ3JhbSBwYXNzZXMgdGhlIGZyYW1lIGluc3RlYWQgb2YgcmVkaXJlY3RpbmcgdG8gdGhlIGlubmVyCiYjNDM7CSAqIFZMQU4gZGV2aWNlLiByZWRpcmVjdGVkID09IDAgaXMgdGhlIGFzc2VydGlvbiB0aGF0IG1hdHRlcnM6IHRoZQomIzQzOwkgKiBwcm9ncmFtIGRpZCBub3QgcmVkaXJlY3QgdG8gYSBkZXZpY2UgdGhhdCB3b3VsZCBkcm9wIHRoZSBmcmFtZSBhdAomIzQzOwkgKiB4ZHBfZG9fZmx1c2goKS4gdmV0aDImIzM5O3MgZGVsaXZlcmVkIGNvdW50IGlzIG5vdCBjaGVja2VkIGhlcmUsIHNpbmNlCiYjNDM7CSAqIGEgcGFzc2VkIGZyYW1lIGNhbiBzdGlsbCByZWFjaCB2ZXRoMiB0aHJvdWdoIHRoZSBzdGFjayYjMzk7cyBmb3J3YXJkaW5nCiYjNDM7CSAqIHBhdGgsIHdoaWNoIGlzIHVucmVsYXRlZCB0byB0aGUgcmVkaXJlY3QgdW5kZXIgdGVzdC4KJiM0MzsJICovCiYjNDM7CW1lbXNldChmaWJfcGFyYW1zLCAwLCBzaXplb2YoKmZpYl9wYXJhbXMpKTsKJiM0MzsJZmliX3BhcmFtcy0mZ3Q7ZmFtaWx5ID0gQUZfSU5FVDsKJiM0MzsJZmliX3BhcmFtcy0mZ3Q7bDRfcHJvdG9jb2wgPSBJUFBST1RPX1RDUDsKJiM0MzsJZmliX3BhcmFtcy0mZ3Q7aWZpbmRleCA9IHZldGgxX2lkeDsKJiM0MzsJaWYgKCFBU1NFUlRfRVEoaW5ldF9wdG9uKEFGX0lORVQsIElQVjRfSUZBQ0VfQUREUiwgJmFtcDtmaWJfcGFyYW1zLSZndDtpcHY0X3NyYyksCiYjNDM7CQkgICAgICAgMSwgJiMzNDtpbmV0X3B0b24oc3JjKSYjMzQ7KSB8fAomIzQzOwkgICAgIUFTU0VSVF9FUShpbmV0X3B0b24oQUZfSU5FVCwgSVBWNF9RSU5RX0RTVCwgJmFtcDtmaWJfcGFyYW1zLSZndDtpcHY0X2RzdCksCiYjNDM7CQkgICAgICAgMSwgJiMzNDtpbmV0X3B0b24ocWlucSBkc3QpJiMzNDspKQomIzQzOwkJZ290byBmYWlsOwomIzQzOwlza2VsLSZndDtic3MtJmd0O2xvb2t1cF9mbGFncyA9IEJQRl9GSUJfTE9PS1VQX1ZMQU4gfCBCUEZfRklCX0xPT0tVUF9TS0lQX05FSUdIOwomIzQzOwlza2VsLSZndDtic3MtJmd0O3JlZGlyZWN0ZWQgPSAwOwomIzQzOwlza2VsLSZndDtic3MtJmd0O3Bhc3NlZCA9IDA7CiYjNDM7CiYjNDM7CWVyciA9IGJwZl9wcm9nX3Rlc3RfcnVuX29wdHMocmVkaXJlY3RfZmQsICZhbXA7bGZfb3B0cyk7CiYjNDM7CWlmICghQVNTRVJUX09LKGVyciwgJiMzNDt0ZXN0X3J1bihxaW5xIGVncmVzcykmIzM0OykpCiYjNDM7CQlnb3RvIGZhaWw7CiYjNDM7CUFTU0VSVF9FUShza2VsLSZndDtic3MtJmd0O3Bhc3NlZCwgUkVESVJFQ1RfTlBLVFMsICYjMzQ7cWlucSBlZ3Jlc3MgcGFzc2VkJiMzNDspOwomIzQzOwlBU1NFUlRfRVEoc2tlbC0mZ3Q7YnNzLSZndDtyZWRpcmVjdGVkLCAwLCAmIzM0O3FpbnEgZWdyZXNzIG5vdCByZWRpcmVjdGVkJiMzNDspOwomIzQzOwogZmFpbDoKJiM0MzsJaWYgKHhkcF9hdHRhY2hlZCkKJiM0MzsJCWJwZl94ZHBfZGV0YWNoKHZldGgyX2lkeCwgWERQX0ZMQUdTX0RSVl9NT0RFLCBOVUxMKTsKIAlpZiAobnN0b2tlbikKIAkJY2xvc2VfbmV0bnMobnN0b2tlbik7CiAJU1lTX05PRkFJTCgmIzM0O2lwIG5ldG5zIGRlbCAmIzM0OyBOU19URVNUKTsKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9maWJfbG9va3VwLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvZmliX2xvb2t1cC5jCmluZGV4IDdiNWRkMjIxNGZmNDZhLi44NjJhMWU5NDU3YjRlMCAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2ZpYl9sb29rdXAuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvZmliX2xvb2t1cC5jCkBAIC0xOSw0ICYjNDM7MTksNDAgQEAgaW50IGZpYl9sb29rdXAoc3RydWN0IF9fc2tfYnVmZiAqc2tiKQogCXJldHVybiBUQ19BQ1RfU0hPVDsKIH0KIAomIzQzO1NFQygmIzM0O3hkcCYjMzQ7KQomIzQzO2ludCBmaWJfbG9va3VwX3hkcChzdHJ1Y3QgeGRwX21kICpjdHgpCiYjNDM7ewomIzQzOwlmaWJfbG9va3VwX3JldCA9IGJwZl9maWJfbG9va3VwKGN0eCwgJmFtcDtmaWJfcGFyYW1zLCBzaXplb2YoZmliX3BhcmFtcyksCiYjNDM7CQkJCQlsb29rdXBfZmxhZ3MpOwomIzQzOwomIzQzOwlyZXR1cm4gWERQX0RST1A7CiYjNDM7fQomIzQzOwomIzQzO2ludCByZWRpcmVjdGVkID0gMDsKJiM0MztpbnQgcGFzc2VkID0gMDsKJiM0MztpbnQgZGVsaXZlcmVkID0gMDsKJiM0MzsKJiM0MztTRUMoJiMzNDt4ZHAmIzM0OykKJiM0MztpbnQgZmliX2xvb2t1cF9yZWRpcmVjdChzdHJ1Y3QgeGRwX21kICpjdHgpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgYnBmX2ZpYl9sb29rdXAgcGFyYW1zID0gZmliX3BhcmFtczsKJiM0MzsJbG9uZyByZXQ7CiYjNDM7CiYjNDM7CXJldCA9IGJwZl9maWJfbG9va3VwKGN0eCwgJmFtcDtwYXJhbXMsIHNpemVvZihwYXJhbXMpLCBsb29rdXBfZmxhZ3MpOwomIzQzOwlpZiAocmV0ID09IEJQRl9GSUJfTEtVUF9SRVRfU1VDQ0VTUykgewomIzQzOwkJcmVkaXJlY3RlZCYjNDM7JiM0Mzs7CiYjNDM7CQlyZXR1cm4gYnBmX3JlZGlyZWN0KHBhcmFtcy5pZmluZGV4LCAwKTsKJiM0MzsJfQomIzQzOwomIzQzOwlwYXNzZWQmIzQzOyYjNDM7OwomIzQzOwlyZXR1cm4gWERQX1BBU1M7CiYjNDM7fQomIzQzOwomIzQzO1NFQygmIzM0O3hkcCYjMzQ7KQomIzQzO2ludCB4ZHBfY291bnQoc3RydWN0IHhkcF9tZCAqY3R4KQomIzQzO3sKJiM0MzsJZGVsaXZlcmVkJiM0MzsmIzQzOzsKJiM0MzsJcmV0dXJuIFhEUF9EUk9QOwomIzQzO30KJiM0MzsKIGNoYXIgX2xpY2Vuc2VbXSBTRUMoJiMzNDtsaWNlbnNlJiMzNDspID0gJiMzNDtHUEwmIzM0OzsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjQgMDM6MjU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjMyMTIKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiA3NzYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQlBGIEZJQiBMb29rdXAgVkxBTiBQYXRjaCBBbmFseXNpcyBhbmQgRnV6emluZyBTdHJhdGVneSoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCB0aGF0IGFkZHMgVkxBTiBzdXBwb3J0IHRvIHRoZSBgYnBmX2ZpYl9sb29rdXBgIGZ1bmN0aW9uYWxpdHkuICBNeSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgdGhhdCB0aGlzIGlzIGEgc2lnbmlmaWNhbnQgY2hhbmdlLCB0b3VjaGluZyBzZXZlcmFsIGtleSBhcmVhcy4gU3BlY2lmaWNhbGx5LCB0aGUgcGF0Y2ggaGFzIHRvdWNoZWQgYGluY2x1ZGUvdWFwaS9saW51eC9icGYuaGAsIGBuZXQvY29yZS9maWx0ZXIuY2AsIGB0b29scy9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmhgLCBhbmQgdGhlIEJQRiBzZWxmdGVzdHMuCgpUaGUgY29yZSBvZiB0aGlzIG1vZGlmaWNhdGlvbiBzZWVtcyB0byByZXNpZGUgaW4gYG5ldC9jb3JlL2ZpbHRlci5jYC4gIEkgc2VlIG5ldyBmdW5jdGlvbnM6IGBicGZfZmliX3NldF9md2RfcGFyYW1zYCBhbmQgYGJwZl9maWJfdmxhbl9pbnB1dF9kZXZgLiAgSXQgYWxzbyBsb29rcyBsaWtlIHRoZSBleGlzdGluZyBsb29rdXAgZnVuY3Rpb25zLCBgYnBmX2lwdjRfZmliX2xvb2t1cGAsIGBicGZfaXB2Nl9maWJfbG9va3VwYCwgYGJwZl94ZHBfZmliX2xvb2t1cGAsIGFuZCBgYnBmX3NrYl9maWJfbG9va3VwYCBoYXZlIGJlZW4gdXBkYXRlZC4gVGhlIHVwZGF0ZSBpbmNsdWRlcyBjaGVja3MgZm9yIGBCUEZfRklCX0xPT0tVUF9WTEFOYCBhbmQgYEJQRl9GSUJfTE9PS1VQX1ZMQU5fSU5QVVRgIGZsYWdzLCBhbmQgdGhhdCYjMzk7cyB0aGUgYXJlYSBJIG5lZWQgdG8gcGF5IHRoZSBtb3N0IGF0dGVudGlvbiB0byB3aGVuIGdlbmVyYXRpbmcgYSBmdXp6aW5nIHRlc3QgcGxhbi4KCkkgbmVlZCB0byBmb2N1cyBteSBmdXp6aW5nIGVmZm9ydHMgb24gdGhvc2UgY29yZSBsb29rdXAgZnVuY3Rpb25zOiBgYnBmX2lwdjRfZmliX2xvb2t1cGAsIGBicGZfaXB2Nl9maWJfbG9va3VwYCwgYGJwZl94ZHBfZmliX2xvb2t1cGAsIGFuZCBgYnBmX3NrYl9maWJfbG9va3VwYC4gIEkmIzM5O2xsIGNvbnNpZGVyIHRoZSBzdGF0aWMgZnVuY3Rpb25zIGBicGZfZmliX3NldF9md2RfcGFyYW1zYCBhbmQgYGJwZl9maWJfdmxhbl9pbnB1dF9kZXZgIHRvIGJlIGNvdmVyZWQgYXMgcGFydCBvZiBmdXp6aW5nIHRoZSBsb29rdXAgZnVuY3Rpb25zLCBhcyBJJiMzOTttIGFzc3VtaW5nIHRoZXJlJiMzOTtzIG5vIHdheSB0byBjYWxsIHRoZW0gaW5kZXBlbmRlbnRseSAodW5sZXNzIEkgbWlzcyBzb21ldGhpbmcgZHVyaW5nIG15IHJldmlldykuCgpMZXQmIzM5O3MgbG9vayBhdCB0aGUgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMuICBJIHNlZSBgQ09ORklHX1ZMQU5fODAyMVFgIGlzIHVzZWQgd2l0aGluIGBicGZfZmliX3NldF9md2RfcGFyYW1zYCB1bmRlciBhIGNvbmRpdGlvbmFsLgoKYGBgYwojaWYgSVNfRU5BQkxFRChDT05GSUdfVkxBTl84MDIxUSkKCWlmICgoZmxhZ3MgJmFtcDsgQlBGX0ZJQl9MT09LVVBfVkxBTikgJmFtcDsmYW1wOyBpc192bGFuX2RldihkZXYpKSB7CmBgYAoKU28sIHRvIGZ1bGx5IGV4ZXJjaXNlIGBCUEZfRklCX0xPT0tVUF9WTEFOYCwgSSYjMzk7bGwgKmRlZmluaXRlbHkqIG5lZWQgdG8gZW5zdXJlIGBDT05GSUdfVkxBTl84MDIxUWAgaXMgZW5hYmxlZCBkdXJpbmcgdGVzdGluZy4gIEkmIzM5O2xsIGFsc28gaGF2ZSB0byBiZSBjYXJlZnVsIHdoZW4gY3JhZnRpbmcgdGhlIGZ1enppbmcgaW5wdXQgdG8gY29ycmVjdGx5IHNldCB0aGUgYXBwcm9wcmlhdGUgZmxhZ3MgdG8gaGl0IHRoYXQgY29kZSBwYXRoLiAgVGhlIHVzdWFsIHN1c3BlY3RzLCBgQ09ORklHX0lORVRgIGFuZCBgQ09ORklHX0lQVjZgIGFyZSBhbHNvIGluIHVzZS4KCknigJlsbCBkb3VibGUtY2hlY2sgdGhpcyBhZ2FpbiB3aXRoIGEgYGdyZXBwZXJgIHBhc3MgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMuIE15IGZ1enppbmcgdGVzdCBwbGFuIHdpbGwgbmVlZCB0byByZWZsZWN0IHRoZSBuZWNlc3NhcnkgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMgc28gSSBhbSBhcyB0aG9yb3VnaCBhcyBwb3NzaWJsZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNCAwMzoyNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDticGZfZmliX3NldF9md2RfcGFyYW1zJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2NvcmUvZmlsdGVyLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2NvcmUvZmlsdGVyLmM9NjE5MT1zdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9za2JfZ2V0X3hmcm1fc3RhdGVfcHJvdG8gPSB7XG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtNjIwMy0jaWYgSVNfRU5BQkxFRChDT05GSUdfSU5FVCkgfHwgSVNfRU5BQkxFRChDT05GSUdfSVBWNilcbm5ldC9jb3JlL2ZpbHRlci5jOjYyMDQ6c3RhdGljIGludCBicGZfZmliX3NldF9md2RfcGFyYW1zKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG5uZXQvY29yZS9maWx0ZXIuYy02MjA1LVx0XHRcdFx0ICBzdHJ1Y3QgYnBmX2ZpYl9sb29rdXAgKnBhcmFtcyxcbi0tXG5uZXQvY29yZS9maWx0ZXIuYz02MjU0PXN0YXRpYyBpbnQgYnBmX2lwdjRfZmliX2xvb2t1cChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBicGZfZmliX2xvb2t1cCAqcGFyYW1zLFxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTY0MDAtc2V0X2Z3ZF9wYXJhbXM6XG5uZXQvY29yZS9maWx0ZXIuYzo2NDAxOlx0cmV0dXJuIGJwZl9maWJfc2V0X2Z3ZF9wYXJhbXMoZGV2LCBwYXJhbXMsIGZsYWdzLCBtdHUsIGluX2lmaW5kZXgpO1xubmV0L2NvcmUvZmlsdGVyLmMtNjQwMi19XG4tLVxubmV0L2NvcmUvZmlsdGVyLmM9NjQwNj1zdGF0aWMgaW50IGJwZl9pcHY2X2ZpYl9sb29rdXAoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgYnBmX2ZpYl9sb29rdXAgKnBhcmFtcyxcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy02NTUzLXNldF9md2RfcGFyYW1zOlxubmV0L2NvcmUvZmlsdGVyLmM6NjU1NDpcdHJldHVybiBicGZfZmliX3NldF9md2RfcGFyYW1zKGRldiwgcGFyYW1zLCBmbGFncywgbXR1LCBpbl9pZmluZGV4KTtcbm5ldC9jb3JlL2ZpbHRlci5jLTY1NTUtfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI0IDAzOjI2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI1MDYzCgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHN1bW1hcml6ZWQgYXMgeW91IHJlcXVlc3RlZDoKCioqRGVjb25zdHJ1Y3RpbmcgYnBmX2ZpYl92bGFuX2lucHV0X2RldjogQSBEZWVwIERpdmUqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgbWluZCBpbW1lZGlhdGVseSBnb2VzIHRvIHRoZSBwb3RlbnRpYWwgaW1wYWN0IG9mIGBicGZfZmliX3ZsYW5faW5wdXRfZGV2YC4gV2UmIzM5O3JlIHRhbGtpbmcgYWJvdXQgYSBCUEYgaG9vaywgcHJlc3VtYWJseSB3aXRoaW4gdGhlIGNvbnRleHQgb2YgYSBmb3J3YXJkaW5nIEluZm9ybWF0aW9uIEJhc2UgKEZJQikgbG9va3VwLCBhbmQgaXQmIzM5O3Mgc3BlY2lmaWNhbGx5IGRlYWxpbmcgd2l0aCBWTEFOIGluZ3Jlc3MgcHJvY2Vzc2luZy4gJiMzNDtJbnB1dCBkZXYmIzM0OyBzdHJvbmdseSBzdWdnZXN0cyBpdCYjMzk7cyBpbnZvbHZlZCBpbiBoYW5kbGluZyB0aGUgaW5ncmVzcyBpbnRlcmZhY2Ugb3IgZGV2aWNlLgoKSSYjMzk7bSBzdGFydGluZyB0byB0aGluayBhYm91dCB0aGUgaW1wbGljYXRpb25zIGZvciBuZXR3b3JrIHBlcmZvcm1hbmNlLiBUaGlzIEJQRiBob29rIGxpa2VseSBhbGxvd3MgZm9yIGluLWtlcm5lbCB0cmFmZmljIHN0ZWVyaW5nIGJhc2VkIG9uIFZMQU4gaW5mb3JtYXRpb24gKmJlZm9yZSogdGhlIHN0YW5kYXJkIHJvdXRpbmcgcHJvY2Vzcy4gVGhpcyBpcyBwb3dlcmZ1bC4KCk15IGltbWVkaWF0ZSBxdWVzdGlvbnMgYXJlOgoKKiAgIEhvdyBpcyB0aGlzIGludGVncmF0ZWQgd2l0aCB0aGUgdW5kZXJseWluZyBGSUIgc3RydWN0dXJlPyBJcyBpdCBwcmUtbG9va3VwIGZpbHRlcmluZyBvciBzb21ldGhpbmcgbW9yZSBjb21wbGV4PwoqICAgV2hhdCYjMzk7cyB0aGUgcGVyZm9ybWFuY2Ugb3ZlcmhlYWQ/IERvZXMgdGhpcyBhZGQgc2lnbmlmaWNhbnQgbGF0ZW5jeSBjb21wYXJlZCB0byBwdXJlIGhhcmR3YXJlIGZvcndhcmRpbmc/CiogICBXaGF0JiMzOTtzIHRoZSBpbnRlcmFjdGlvbiB3aXRoIG90aGVyIEJQRiBwcm9ncmFtcz8gQ291bGQgaXQgYmUgY2hhaW5lZCB3aXRoIGV4aXN0aW5nIGVCUEYgZmlsdGVycyBmb3IgaW5jcmVhc2VkIGZsZXhpYmlsaXR5PwoqICAgSG93IGlzIFZMQU4gaW5mb3JtYXRpb24gZXh0cmFjdGVkIChlLmcuLCBmcm9tIHRoZSBoZWFkZXIsIHNwZWNpZmljIG1ldGFkYXRhKT8gQW5kLCBob3cgZG9lcyB0aGlzIGludGVyYWN0IHdpdGggdGhlIG5ldHdvcmsgc3RhY2smIzM5O3MgaGFuZGxpbmcgb2YgVkxBTiB0YWdnZWQgZnJhbWVzPwoKSSBhbHNvIHdvbmRlciBhYm91dCB0aGUgdXNlIGNhc2VzIGhlcmUuIEl0IHByb2JhYmx5IGVuYWJsZXMgVkxBTi1hd2FyZSB0cmFmZmljIGVuZ2luZWVyaW5nLCBwb2xpY3kgZW5mb3JjZW1lbnQsIG9yIGV2ZW4gbW9yZSBhZHZhbmNlZCBzY2VuYXJpb3MuIEkmIzM5O20gaW1hZ2luaW5nIHNjZW5hcmlvcyBpbnZvbHZpbmcgc3BlY2lmaWMgVkxBTnMsIHBlcmhhcHMgb24gYSBzZXJ2aWNlIHByb3ZpZGVyIGVkZ2UsIGJlaW5nIHJvdXRlZCBkaWZmZXJlbnRseSBiYXNlZCBvbiBzb21lIGNvbmRpdGlvbi4gVGhpcyBjb3VsZCBiZSB1c2VmdWwgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIHdpdGggYSBsb3Qgb2YgdGVuYW50IG5ldHdvcmtzLgoKSSYjMzk7bSBpbnRyaWd1ZWQuIEkmIzM5O20gZ29pbmcgdG8gaGF2ZSB0byBkaXZlIGludG8gdGhlIGtlcm5lbCBzb3VyY2UgYW5kIHRoZSByZWxldmFudCBkb2N1bWVudGF0aW9uIHRvIGdldCBhIGhhbmRsZSBvbiB0aGUgYWN0dWFsIGltcGxlbWVudGF0aW9uIGRldGFpbHMgYW5kIGV4cGxvcmUgaG93IHRoaXMgZml0cyBpbnRvIG15IG92ZXJhbGwgbmV0d29yayBkZXNpZ24gc3RyYXRlZ2llcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNCAwMzoyNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDticGZfZmliX3ZsYW5faW5wdXRfZGV2JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2NvcmUvZmlsdGVyLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2NvcmUvZmlsdGVyLmM9NjIwND1zdGF0aWMgaW50IGJwZl9maWJfc2V0X2Z3ZF9wYXJhbXMoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy02MjMyLVxubmV0L2NvcmUvZmlsdGVyLmM6NjIzMzpzdGF0aWMgc3RydWN0IG5ldF9kZXZpY2UgKmJwZl9maWJfdmxhbl9pbnB1dF9kZXYoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbm5ldC9jb3JlL2ZpbHRlci5jLTYyMzQtXHRcdFx0XHRcdFx0IGNvbnN0IHN0cnVjdCBicGZfZmliX2xvb2t1cCAqcGFyYW1zKVxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jPTYyNTQ9c3RhdGljIGludCBicGZfaXB2NF9maWJfbG9va3VwKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGJwZl9maWJfbG9va3VwICpwYXJhbXMsXG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtNjI3MS1cdGlmIChmbGFncyBcdTAwMjYgQlBGX0ZJQl9MT09LVVBfVkxBTl9JTlBVVCkge1xubmV0L2NvcmUvZmlsdGVyLmM6NjI3MjpcdFx0ZGV2ID0gYnBmX2ZpYl92bGFuX2lucHV0X2RldihkZXYsIHBhcmFtcyk7XG5uZXQvY29yZS9maWx0ZXIuYy02MjczLVx0XHRpZiAoSVNfRVJSKGRldikpXG4tLVxubmV0L2NvcmUvZmlsdGVyLmM9NjQwNj1zdGF0aWMgaW50IGJwZl9pcHY2X2ZpYl9sb29rdXAoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgYnBmX2ZpYl9sb29rdXAgKnBhcmFtcyxcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy02NDI5LVx0aWYgKGZsYWdzIFx1MDAyNiBCUEZfRklCX0xPT0tVUF9WTEFOX0lOUFVUKSB7XG5uZXQvY29yZS9maWx0ZXIuYzo2NDMwOlx0XHRkZXYgPSBicGZfZmliX3ZsYW5faW5wdXRfZGV2KGRldiwgcGFyYW1zKTtcbm5ldC9jb3JlL2ZpbHRlci5jLTY0MzEtXHRcdGlmIChJU19FUlIoZGV2KSlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNCAwMzoyNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNTkwNwoJCQkJCQkJb3V0cHV0OiAyMjUKCQkJCQkJCXRob3VnaHRzOiA0NTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyB0aGUgQlBGIEZJQiBMb29rdXAgSGVscGVyIHdpdGggVkxBTiBTdXBwb3J0KioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaW50cm9kdWNlcyBzb21lIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUgQlBGIEZJQiBsb29rdXAgaGVscGVyLCBzcGVjaWZpY2FsbHkgYWRkaW5nIFZMQU4gaGFuZGxpbmcuIFJpZ2h0IGF3YXksIHRoaXMgc2NyZWFtcyAmIzM0O2Z1enppbmcgdGFyZ2V0LiYjMzQ7IFRoZSBjb3JlIG9mIHJvdXRpbmcgbG9naWMgaW4gQlBGIGlzIGJlaW5nIG1vZGlmaWVkLCBhbmQgdGhhdCYjMzk7cyBhbHdheXMgYSBwb3RlbnRpYWwgYXJlYSBmb3IgdnVsbmVyYWJpbGl0aWVzLCBlc3BlY2lhbGx5IHNpbmNlIHVzZXJzcGFjZSBCUEYgcHJvZ3JhbXMgY2FuIG5vdyBpbmZsdWVuY2UgdGhlIFZMQU4gcmVzb2x1dGlvbiBwcm9jZXNzIHRocm91Z2ggWERQIG9yIFRDLiBXZSBuZWVkIHRvIGJlIHRob3JvdWdoLgoKTXkgaW5pdGlhbCBmb2N1cyBuZWVkcyB0byBiZSBvbiB0aGVzZSBmdW5jdGlvbnM6IGBicGZfaXB2NF9maWJfbG9va3VwYCwgYGJwZl9pcHY2X2ZpYl9sb29rdXBgLCBgYnBmX3hkcF9maWJfbG9va3VwYCwgYGJwZl9za2JfZmliX2xvb2t1cGAsIGBicGZfZmliX3NldF9md2RfcGFyYW1zYCwgYW5kIGBicGZfZmliX3ZsYW5faW5wdXRfZGV2YC4gVGhlc2UgYXJlIHRoZSBrZXkgZW50cnkgcG9pbnRzIGFuZCBzdXBwb3J0aW5nIGZ1bmN0aW9ucyB0aGF0IGxpa2VseSBjb250YWluIHRoZSBuZXcgVkxBTi1yZWxhdGVkIGxvZ2ljLgoKSSBuZWVkIHRvIG1ha2Ugc3VyZSBgVkxBTl84MDIxUWAgaXMgZW5hYmxlZCBpbiB0aGUgY29uZmlndXJhdGlvbiB0byBleGVyY2lzZSB0aGUgY2hhbmdlcywgYnV0IGxldCYjMzk7cyBxdWlja2x5IHZlcmlmeSB0aGF0IHRoZSBzdGFuZGFyZCBuZXR3b3JraW5nIGNvbmZpZyBvcHRpb25zIGxpa2UgYENPTkZJR19JTkVUYCwgYENPTkZJR19JUFY2YCwgYENPTkZJR19CUEZfU1lTQ0FMTGAsIGFuZCBgQ09ORklHX05FVGAgYXJlIGVuYWJsZWQuIEdvb2QuCgpJJiMzOTttIHRoaW5raW5nIGFib3V0IHRoZSByYXRpb25hbGUgYmVoaW5kIHRoaXMgcGF0Y2guIFRoZSBwYXRjaCBpcyBhZGRpbmcgVkxBTiBzdXBwb3J0IHRocm91Z2ggdGhlIGBCUEZfRklCX0xPT0tVUF9WTEFOYCBhbmQgYEJQRl9GSUJfTE9PS1VQX1ZMQU5fSU5QVVRgIGZsYWdzIHRvIGBicGZfZmliX2xvb2t1cGAuIFRoaXMgaXMgY29yZSwgc28gZnV6emluZyBpcyAqZXNzZW50aWFsKiB0byBtYWtlIHN1cmUgbm90aGluZyBnb2VzIHdyb25nIHdpdGggdGhpcyBuZXcgcmVzb2x1dGlvbi4KCkFuZCBhcyBJIHJlLXJldmlldyBteSBmb2N1cyBzeW1ib2xzLCBJJiMzOTttIGp1c3QgcXVpY2tseSBjb25maXJtaW5nIHRoYXQgYGJwZl9maWJfdmxhbl9pbnB1dF9kZXZgIGFuZCBgYnBmX2ZpYl9zZXRfZndkX3BhcmFtc2AgYXJlIGluZGVlZCBpbmNsdWRlZC4gVGhleSBhcmUgc3RhdGljLCBidXQgbm90IGlubGluZSwgc28gdGhleSYjMzk7cmUgdmFsaWQgdGFyZ2V0cy4KClJpZ2h0LCBJJiMzOTttIHJlYWR5IHRvIHNldCB1cCB0aGUgZnV6emluZyBlbnZpcm9ubWVudCBhbmQgZ2V0IHRvIHdvcmsuIExldCYjMzk7cyBzdGFydCB3aXRoIHRoZSBiYXNlIGNvbmZpZ3VyYXRpb24gYW5kIGJ1aWxkIGZyb20gdGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjQgMDM6MjY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1ZMQU5fODAyMVEmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDticGZfaXB2NF9maWJfbG9va3VwJiMzNDssCiAgICAmIzM0O2JwZl9pcHY2X2ZpYl9sb29rdXAmIzM0OywKICAgICYjMzQ7YnBmX3hkcF9maWJfbG9va3VwJiMzNDssCiAgICAmIzM0O2JwZl9za2JfZmliX2xvb2t1cCYjMzQ7LAogICAgJiMzNDticGZfZmliX3NldF9md2RfcGFyYW1zJiMzNDssCiAgICAmIzM0O2JwZl9maWJfdmxhbl9pbnB1dF9kZXYmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIEJQRiBGSUIgbG9va3VwIGhlbHBlciAoYGJwZl9maWJfbG9va3VwYCksIGFkZGluZyBzdXBwb3J0IGZvciBWTEFOcyB2aWEgYEJQRl9GSUJfTE9PS1VQX1ZMQU5gIGFuZCBgQlBGX0ZJQl9MT09LVVBfVkxBTl9JTlBVVGAgZmxhZ3MuIFRoaXMgbW9kaWZpZXMgY29yZSByb3V0aW5nIGxvb2t1cCBsb2dpYyB3aXRoaW4gQlBGIHByb2dyYW1zLCB3aGljaCBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgYnkgbG9hZGluZyBhbmQgZXhlY3V0aW5nIEJQRiBwcm9ncmFtcyAoWERQIG9yIFRDKS4gRnV6emluZyBpcyByZXF1aXJlZCB0byBlbnN1cmUgdGhlIG5ldyBWTEFOIHJlc29sdXRpb24gbG9naWMgYW5kIGl0cyBpbnRlcmFjdGlvbiB3aXRoIHRoZSBuZXR3b3JraW5nIHN0YWNrIGlzIHJvYnVzdC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7VkxBTl84MDIxUSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2JwZl9pcHY0X2ZpYl9sb29rdXAmIzM0OywKICAgICYjMzQ7YnBmX2lwdjZfZmliX2xvb2t1cCYjMzQ7LAogICAgJiMzNDticGZfeGRwX2ZpYl9sb29rdXAmIzM0OywKICAgICYjMzQ7YnBmX3NrYl9maWJfbG9va3VwJiMzNDssCiAgICAmIzM0O2JwZl9maWJfc2V0X2Z3ZF9wYXJhbXMmIzM0OywKICAgICYjMzQ7YnBmX2ZpYl92bGFuX2lucHV0X2RldiYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUgQlBGIEZJQiBsb29rdXAgaGVscGVyIChgYnBmX2ZpYl9sb29rdXBgKSwgYWRkaW5nIHN1cHBvcnQgZm9yIFZMQU5zIHZpYSBgQlBGX0ZJQl9MT09LVVBfVkxBTmAgYW5kIGBCUEZfRklCX0xPT0tVUF9WTEFOX0lOUFVUYCBmbGFncy4gVGhpcyBtb2RpZmllcyBjb3JlIHJvdXRpbmcgbG9va3VwIGxvZ2ljIHdpdGhpbiBCUEYgcHJvZ3JhbXMsIHdoaWNoIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSBieSBsb2FkaW5nIGFuZCBleGVjdXRpbmcgQlBGIHByb2dyYW1zIChYRFAgb3IgVEMpLiBGdXp6aW5nIGlzIHJlcXVpcmVkIHRvIGVuc3VyZSB0aGUgbmV3IFZMQU4gcmVzb2x1dGlvbiBsb2dpYyBhbmQgaXRzIGludGVyYWN0aW9uIHdpdGggdGhlIG5ldHdvcmtpbmcgc3RhY2sgaXMgcm9idXN0LiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDYtMjRUMDM6MjU6NTMuMTQwNDA5NDI4WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjUzNDMwMDg2MjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVkxBTl84MDIxUVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJwZl9pcHY0X2ZpYl9sb29rdXBcIixcbiAgICBcImJwZl9pcHY2X2ZpYl9sb29rdXBcIixcbiAgICBcImJwZl94ZHBfZmliX2xvb2t1cFwiLFxuICAgIFwiYnBmX3NrYl9maWJfbG9va3VwXCIsXG4gICAgXCJicGZfZmliX3NldF9md2RfcGFyYW1zXCIsXG4gICAgXCJicGZfZmliX3ZsYW5faW5wdXRfZGV2XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIEJQRiBGSUIgbG9va3VwIGhlbHBlciAoYGJwZl9maWJfbG9va3VwYCksIGFkZGluZyBzdXBwb3J0IGZvciBWTEFOcyB2aWEgYEJQRl9GSUJfTE9PS1VQX1ZMQU5gIGFuZCBgQlBGX0ZJQl9MT09LVVBfVkxBTl9JTlBVVGAgZmxhZ3MuIFRoaXMgbW9kaWZpZXMgY29yZSByb3V0aW5nIGxvb2t1cCBsb2dpYyB3aXRoaW4gQlBGIHByb2dyYW1zLCB3aGljaCBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgYnkgbG9hZGluZyBhbmQgZXhlY3V0aW5nIEJQRiBwcm9ncmFtcyAoWERQIG9yIFRDKS4gRnV6emluZyBpcyByZXF1aXJlZCB0byBlbnN1cmUgdGhlIG5ldyBWTEFOIHJlc29sdXRpb24gbG9naWMgYW5kIGl0cyBpbnRlcmFjdGlvbiB3aXRoIHRoZSBuZXR3b3JraW5nIHN0YWNrIGlzIHJvYnVzdC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjRUMDM6MjU6NTMuMTQwNDE0NTY4WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NTYxMjY2MjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCAzNTMzNzFjZGE5YjdlOWM3MjdlODhhMGI5ZjdkZjE1ZDUwZmVlYjhlXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBXZWQgSnVuIDI0IDAzOjI1OjUxIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaCBiL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaFxcbmluZGV4IDg5YjM2ZGU1ZmRiYjZkLi5kNDIxODk1NGM1MGY1MyAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmhcXG4rKysgYi9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmhcXG5AQCAtMzUzMiw2ICszNTMyLDQ1IEBAIHVuaW9uIGJwZl9hdHRyIHtcXG4gICpcXHRcXHRcXHRVc2UgdGhlIG1hcmsgcHJlc2VudCBpbiAqcGFyYW1zKi1cXHUwMDNlbWFyayBmb3IgdGhlIGZpYiBsb29rdXAuXFxuICAqXFx0XFx0XFx0VGhpcyBvcHRpb24gc2hvdWxkIG5vdCBiZSB1c2VkIHdpdGggQlBGX0ZJQl9MT09LVVBfRElSRUNULFxcbiAgKlxcdFxcdFxcdGFzIGl0IG9ubHkgaGFzIG1lYW5pbmcgZm9yIGZ1bGwgbG9va3Vwcy5cXG4rICpcXHRcXHQqKkJQRl9GSUJfTE9PS1VQX1ZMQU4qKlxcbisgKlxcdFxcdFxcdElmIHRoZSBmaWIgbG9va3VwIHJlc29sdmVzIHRvIGEgVkxBTiBkZXZpY2Ugd2hvc2VcXG4rICpcXHRcXHRcXHRwYXJlbnQgaXMgYSByZWFsIChub24tVkxBTikgZGV2aWNlLCBzZXRcXG4rICpcXHRcXHRcXHQqcGFyYW1zKi1cXHUwMDNlaF92bGFuX3Byb3RvIGFuZCAqcGFyYW1zKi1cXHUwMDNlaF92bGFuX1RDSSBmcm9tXFxuKyAqXFx0XFx0XFx0dGhlIFZMQU4gZGV2aWNlIGFuZCByZXBsYWNlICpwYXJhbXMqLVxcdTAwM2VpZmluZGV4IHdpdGggdGhlXFxuKyAqXFx0XFx0XFx0cGFyZW50J3MgaWZpbmRleC4gKnBhcmFtcyotXFx1MDAzZWhfdmxhbl9UQ0kgY2FycmllcyB0aGUgVklEXFxuKyAqXFx0XFx0XFx0b25seSwgd2l0aCBQQ1AgYW5kIERFSSBiaXRzIHplcm87IGEgY29uc3VtZXIgd2FudGluZyB0b1xcbisgKlxcdFxcdFxcdHNldCBlZ3Jlc3MgcHJpb3JpdHkgd3JpdGVzIFBDUCBpdHNlbGYuICpwYXJhbXMqLVxcdTAwM2VzbWFjIGlzXFxuKyAqXFx0XFx0XFx0dGhlIFZMQU4gZGV2aWNlJ3Mgb3duIGFkZHJlc3MsIHdoaWNoIGNhbiBkaWZmZXIgZnJvbSB0aGVcXG4rICpcXHRcXHRcXHRwYXJlbnQncy4gT25seSB0aGUgaW1tZWRpYXRlIHBhcmVudCBpcyByZXNvbHZlZDsgaWYgaXRcXG4rICpcXHRcXHRcXHRpcyBpdHNlbGYgYSBWTEFOIGRldmljZSAoUWluUSkgb3IgaW4gYW5vdGhlciBuYW1lc3BhY2UsXFxuKyAqXFx0XFx0XFx0dGhlIGVncmVzcyBjYW5ub3QgYmUgcmVkdWNlZCB0byBhIHBoeXNpY2FsIGRldmljZSBwbHVzXFxuKyAqXFx0XFx0XFx0b25lIHRhZyBhbmQgdGhlIGxvb2t1cCByZXR1cm5zXFxuKyAqXFx0XFx0XFx0KipCUEZfRklCX0xLVVBfUkVUX1ZMQU5fRkFJTFVSRSoqIHdpdGggKnBhcmFtcyotXFx1MDAzZWlmaW5kZXhcXG4rICpcXHRcXHRcXHRsZWZ0IGF0IHRoZSBpbnB1dC4gUmUtaXNzdWUgd2l0aG91dFxcbisgKlxcdFxcdFxcdCoqQlBGX0ZJQl9MT09LVVBfVkxBTioqIHRvIG9idGFpbiB0aGUgVkxBTiBkZXZpY2UncyBvd25cXG4rICpcXHRcXHRcXHRpZmluZGV4LiBUaGUgc3dhcCBhbmQgdGhlIHZsYW4gZmllbGRzXFxuKyAqXFx0XFx0XFx0YXJlIHdyaXR0ZW4gb25seSBvbiBzdWNjZXNzOyBvdGhlciBvdXRwdXQgZmllbGRzIGtlZXBcXG4rICpcXHRcXHRcXHR0aGUgaGVscGVyJ3MgZXhpc3RpbmcgYmVoYXZpb3VyLCBzbyBhIGZyYWctbmVlZGVkIHJlc3VsdFxcbisgKlxcdFxcdFxcdHN0aWxsIHJlcG9ydHMgdGhlIHJvdXRlIG10dSBpbiAqcGFyYW1zKi1cXHUwMDNlbXR1X3Jlc3VsdC5cXG4rICpcXHRcXHRcXHRUaGlzIGZsYWcgaXMgb25seSB2YWxpZCBmb3IgWERQIHByb2dyYW1zOyB0YyBwcm9ncmFtc1xcbisgKlxcdFxcdFxcdHJlY2VpdmUgLUVJTlZBTCBzaW5jZSB0aGV5IGNhbiByZWRpcmVjdCB0byB0aGUgVkxBTlxcbisgKlxcdFxcdFxcdGRldmljZSBkaXJlY3RseS5cXG4rICpcXHRcXHQqKkJQRl9GSUJfTE9PS1VQX1ZMQU5fSU5QVVQqKlxcbisgKlxcdFxcdFxcdFRyZWF0ICpwYXJhbXMqLVxcdTAwM2VoX3ZsYW5fcHJvdG8gYW5kICpwYXJhbXMqLVxcdTAwM2VoX3ZsYW5fVENJXFxuKyAqXFx0XFx0XFx0YXMgYW4gaW5wdXQgVkxBTiB0YWcgYW5kIHJ1biB0aGUgbG9va3VwIGFzIGlmIGluZ3Jlc3NcXG4rICpcXHRcXHRcXHRoYWQgaGFwcGVuZWQgb24gdGhlIFZMQU4gc3ViaW50ZXJmYWNlIGNhcnJ5aW5nIHRoYXQgdGFnXFxuKyAqXFx0XFx0XFx0b24gKnBhcmFtcyotXFx1MDAzZWlmaW5kZXguIFRoZSBWSUQgaXMgdGhlIGxvdyAxMiBiaXRzIG9mXFxuKyAqXFx0XFx0XFx0KnBhcmFtcyotXFx1MDAzZWhfdmxhbl9UQ0k7ICpwYXJhbXMqLVxcdTAwM2VoX3ZsYW5fcHJvdG8gbXVzdCBiZVxcbisgKlxcdFxcdFxcdEVUSF9QXzgwMjFRIG9yIEVUSF9QXzgwMjFBRCBpbiBuZXR3b3JrIGJ5dGUgb3JkZXIsIGVsc2VcXG4rICpcXHRcXHRcXHQqKi1FSU5WQUwqKi4gSWYgKnBhcmFtcyotXFx1MDAzZWlmaW5kZXggaXMgaXRzZWxmIGEgVkxBTlxcbisgKlxcdFxcdFxcdGRldmljZSwgaXRzIGlubmVyIChRaW5RKSBzdWJpbnRlcmZhY2UgaXMgbWF0Y2hlZDsgZm9yIGFcXG4rICpcXHRcXHRcXHRib25kIG9yIHRlYW0sIHBhc3MgdGhlIG1hc3RlcidzIGlmaW5kZXguIEFuIHVubWF0Y2hlZFxcbisgKlxcdFxcdFxcdHRhZywgYSBkb3duIGRldmljZSwgb3Igb25lIGluIGFub3RoZXIgbmFtZXNwYWNlIHJldHVybnNcXG4rICpcXHRcXHRcXHQqKkJQRl9GSUJfTEtVUF9SRVRfTk9UX0ZXREVEKiosIG1pcnJvcmluZyByZWFsIGluZ3Jlc3MuXFxuKyAqXFx0XFx0XFx0QSBWSUQgb2YgMCBpcyBsb29rZWQgdXAgbGl0ZXJhbGx5LCBzbyBkbyBub3Qgc2V0IHRoaXNcXG4rICpcXHRcXHRcXHRmbGFnIGZvciBwcmlvcml0eS10YWdnZWQgZnJhbWVzLiBDYW5ub3QgYmUgY29tYmluZWQgd2l0aFxcbisgKlxcdFxcdFxcdCoqQlBGX0ZJQl9MT09LVVBfVEJJRCoqIG9yICoqQlBGX0ZJQl9MT09LVVBfT1VUUFVUKipcXG4rICpcXHRcXHRcXHQocmV0dXJucyAqKi1FSU5WQUwqKikuXFxuICAqXFxuICAqXFx0XFx0KmN0eCogaXMgZWl0aGVyICoqc3RydWN0IHhkcF9tZCoqIGZvciBYRFAgcHJvZ3JhbXMgb3JcXG4gICpcXHRcXHQqKnN0cnVjdCBza19idWZmKiogdGMgY2xzX2FjdCBwcm9ncmFtcy5cXG5AQCAtNzMyNyw2ICs3MzY2LDggQEAgZW51bSB7XFxuIFxcdEJQRl9GSUJfTE9PS1VQX1RCSUQgICAgPSAoMVUgXFx1MDAzY1xcdTAwM2MgMyksXFxuIFxcdEJQRl9GSUJfTE9PS1VQX1NSQyAgICAgPSAoMVUgXFx1MDAzY1xcdTAwM2MgNCksXFxuIFxcdEJQRl9GSUJfTE9PS1VQX01BUksgICAgPSAoMVUgXFx1MDAzY1xcdTAwM2MgNSksXFxuK1xcdEJQRl9GSUJfTE9PS1VQX1ZMQU4gICAgPSAoMVUgXFx1MDAzY1xcdTAwM2MgNiksXFxuK1xcdEJQRl9GSUJfTE9PS1VQX1ZMQU5fSU5QVVQgPSAoMVUgXFx1MDAzY1xcdTAwM2MgNyksXFxuIH07XFxuIFxcbiBlbnVtIHtcXG5AQCAtNzM0MCw2ICs3MzgxLDcgQEAgZW51bSB7XFxuIFxcdEJQRl9GSUJfTEtVUF9SRVRfTk9fTkVJR0gsICAgICAvKiBubyBuZWlnaGJvciBlbnRyeSBmb3IgbmggKi9cXG4gXFx0QlBGX0ZJQl9MS1VQX1JFVF9GUkFHX05FRURFRCwgIC8qIGZyYWdtZW50YXRpb24gcmVxdWlyZWQgdG8gZndkICovXFxuIFxcdEJQRl9GSUJfTEtVUF9SRVRfTk9fU1JDX0FERFIsICAvKiBmYWlsZWQgdG8gZGVyaXZlIElQIHNyYyBhZGRyICovXFxuK1xcdEJQRl9GSUJfTEtVUF9SRVRfVkxBTl9GQUlMVVJFLCAvKiBWTEFOIGVncmVzcywgcGFyZW50IHVucmVzb2x2YWJsZSAqL1xcbiB9O1xcbiBcXG4gc3RydWN0IGJwZl9maWJfbG9va3VwIHtcXG5AQCAtNzM5Myw3ICs3NDM1LDEzIEBAIHN0cnVjdCBicGZfZmliX2xvb2t1cCB7XFxuIFxcbiBcXHR1bmlvbiB7XFxuIFxcdFxcdHN0cnVjdCB7XFxuLVxcdFxcdFxcdC8qIG91dHB1dCAqL1xcbitcXHRcXHRcXHQvKlxcbitcXHRcXHRcXHQgKiBvdXRwdXQgd2l0aCBCUEZfRklCX0xPT0tVUF9WTEFOOiBzZXQgZnJvbSB0aGVcXG4rXFx0XFx0XFx0ICogcmVzb2x2ZWQgZWdyZXNzIFZMQU4gZGV2aWNlIChzZWUgdGhlIGZsYWcpOyB6ZXJvZWRcXG4rXFx0XFx0XFx0ICogb24gb3RoZXIgc3VjY2Vzc2Z1bCBsb29rdXBzLiBpbnB1dCB3aXRoXFxuK1xcdFxcdFxcdCAqIEJQRl9GSUJfTE9PS1VQX1ZMQU5fSU5QVVQ6IHRoZSBWTEFOIHRhZyB0byBzY29wZVxcbitcXHRcXHRcXHQgKiB0aGUgbG9va3VwIGJ5LlxcbitcXHRcXHRcXHQgKi9cXG4gXFx0XFx0XFx0X19iZTE2XFx0aF92bGFuX3Byb3RvO1xcbiBcXHRcXHRcXHRfX2JlMTZcXHRoX3ZsYW5fVENJO1xcbiBcXHRcXHR9O1xcbmRpZmYgLS1naXQgYS9uZXQvY29yZS9maWx0ZXIuYyBiL25ldC9jb3JlL2ZpbHRlci5jXFxuaW5kZXggMmU5NmI0Yjg0N2NlMTIuLjBlYTM2MmZhNDI4N2UzIDEwMDY0NFxcbi0tLSBhL25ldC9jb3JlL2ZpbHRlci5jXFxuKysrIGIvbmV0L2NvcmUvZmlsdGVyLmNcXG5AQCAtNjIwMSwyMSArNjIwMSw2MCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9za2JfZ2V0X3hmcm1fc3RhdGVfcHJvdG8gPSB7XFxuICNlbmRpZlxcbiBcXG4gI2lmIElTX0VOQUJMRUQoQ09ORklHX0lORVQpIHx8IElTX0VOQUJMRUQoQ09ORklHX0lQVjYpXFxuLXN0YXRpYyBpbnQgYnBmX2ZpYl9zZXRfZndkX3BhcmFtcyhzdHJ1Y3QgYnBmX2ZpYl9sb29rdXAgKnBhcmFtcywgdTMyIG10dSlcXG4rc3RhdGljIGludCBicGZfZmliX3NldF9md2RfcGFyYW1zKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuK1xcdFxcdFxcdFxcdCAgc3RydWN0IGJwZl9maWJfbG9va3VwICpwYXJhbXMsXFxuK1xcdFxcdFxcdFxcdCAgdTMyIGZsYWdzLCB1MzIgbXR1LCB1MzIgaW5faWZpbmRleClcXG4ge1xcbiBcXHRwYXJhbXMtXFx1MDAzZWhfdmxhbl9UQ0kgPSAwO1xcbiBcXHRwYXJhbXMtXFx1MDAzZWhfdmxhbl9wcm90byA9IDA7XFxuK1xcbisjaWYgSVNfRU5BQkxFRChDT05GSUdfVkxBTl84MDIxUSlcXG4rXFx0aWYgKChmbGFncyBcXHUwMDI2IEJQRl9GSUJfTE9PS1VQX1ZMQU4pIFxcdTAwMjZcXHUwMDI2IGlzX3ZsYW5fZGV2KGRldikpIHtcXG4rXFx0XFx0c3RydWN0IG5ldF9kZXZpY2UgKnJlYWxfZGV2ID0gdmxhbl9kZXZfcHJpdihkZXYpLVxcdTAwM2VyZWFsX2RldjtcXG4rXFxuK1xcdFxcdGlmICghaXNfdmxhbl9kZXYocmVhbF9kZXYpIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdCAgICBuZXRfZXEoZGV2X25ldChyZWFsX2RldiksIGRldl9uZXQoZGV2KSkpIHtcXG4rXFx0XFx0XFx0cGFyYW1zLVxcdTAwM2VoX3ZsYW5fcHJvdG8gPSB2bGFuX2Rldl92bGFuX3Byb3RvKGRldik7XFxuK1xcdFxcdFxcdHBhcmFtcy1cXHUwMDNlaF92bGFuX1RDSSA9IGh0b25zKHZsYW5fZGV2X3ZsYW5faWQoZGV2KSk7XFxuK1xcdFxcdFxcdHBhcmFtcy1cXHUwMDNlaWZpbmRleCA9IHJlYWxfZGV2LVxcdTAwM2VpZmluZGV4O1xcbitcXHRcXHR9IGVsc2Uge1xcbitcXHRcXHRcXHRwYXJhbXMtXFx1MDAzZWlmaW5kZXggPSBpbl9pZmluZGV4O1xcbitcXHRcXHRcXHRyZXR1cm4gQlBGX0ZJQl9MS1VQX1JFVF9WTEFOX0ZBSUxVUkU7XFxuK1xcdFxcdH1cXG4rXFx0fVxcbisjZW5kaWZcXG4rXFxuIFxcdGlmIChtdHUpXFxuIFxcdFxcdHBhcmFtcy1cXHUwMDNlbXR1X3Jlc3VsdCA9IG10dTsgLyogdW5pb24gd2l0aCB0b3RfbGVuICovXFxuIFxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbitcXG4rc3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlICpicGZfZmliX3ZsYW5faW5wdXRfZGV2KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCBjb25zdCBzdHJ1Y3QgYnBmX2ZpYl9sb29rdXAgKnBhcmFtcylcXG4re1xcbitcXHRfX2JlMTYgcHJvdG8gPSBwYXJhbXMtXFx1MDAzZWhfdmxhbl9wcm90bztcXG4rXFx0c3RydWN0IG5ldF9kZXZpY2UgKnZsYW5fZGV2O1xcbitcXHR1MTYgdmlkO1xcbitcXG4rXFx0aWYgKHByb3RvICE9IGh0b25zKEVUSF9QXzgwMjFRKSBcXHUwMDI2XFx1MDAyNiBwcm90byAhPSBodG9ucyhFVEhfUF84MDIxQUQpKVxcbitcXHRcXHRyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTtcXG4rXFxuK1xcdHZpZCA9IG50b2hzKHBhcmFtcy1cXHUwMDNlaF92bGFuX1RDSSkgXFx1MDAyNiBWTEFOX1ZJRF9NQVNLO1xcbitcXHR2bGFuX2RldiA9IF9fdmxhbl9maW5kX2Rldl9kZWVwX3JjdShkZXYsIHByb3RvLCB2aWQpO1xcbitcXHRpZiAoIXZsYW5fZGV2IHx8ICEodmxhbl9kZXYtXFx1MDAzZWZsYWdzIFxcdTAwMjYgSUZGX1VQKSB8fFxcbitcXHQgICAgIW5ldF9lcShkZXZfbmV0KHZsYW5fZGV2KSwgZGV2X25ldChkZXYpKSlcXG4rXFx0XFx0cmV0dXJuIE5VTEw7XFxuK1xcbitcXHRyZXR1cm4gdmxhbl9kZXY7XFxuK31cXG4gI2VuZGlmXFxuIFxcbiAjaWYgSVNfRU5BQkxFRChDT05GSUdfSU5FVClcXG4gc3RhdGljIGludCBicGZfaXB2NF9maWJfbG9va3VwKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGJwZl9maWJfbG9va3VwICpwYXJhbXMsXFxuIFxcdFxcdFxcdCAgICAgICB1MzIgZmxhZ3MsIGJvb2wgY2hlY2tfbXR1KVxcbiB7XFxuK1xcdHUzMiBpbl9pZmluZGV4ID0gcGFyYW1zLVxcdTAwM2VpZmluZGV4O1xcbiBcXHRzdHJ1Y3QgbmVpZ2hib3VyICpuZWlnaCA9IE5VTEw7XFxuIFxcdHN0cnVjdCBmaWJfbmhfY29tbW9uICpuaGM7XFxuIFxcdHN0cnVjdCBpbl9kZXZpY2UgKmluX2RldjtcXG5AQCAtNjIyOSw2ICs2MjY4LDE0IEBAIHN0YXRpYyBpbnQgYnBmX2lwdjRfZmliX2xvb2t1cChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBicGZfZmliX2xvb2t1cCAqcGFyYW1zLFxcbiBcXHRpZiAodW5saWtlbHkoIWRldikpXFxuIFxcdFxcdHJldHVybiAtRU5PREVWO1xcbiBcXG4rXFx0aWYgKGZsYWdzIFxcdTAwMjYgQlBGX0ZJQl9MT09LVVBfVkxBTl9JTlBVVCkge1xcbitcXHRcXHRkZXYgPSBicGZfZmliX3ZsYW5faW5wdXRfZGV2KGRldiwgcGFyYW1zKTtcXG4rXFx0XFx0aWYgKElTX0VSUihkZXYpKVxcbitcXHRcXHRcXHRyZXR1cm4gUFRSX0VSUihkZXYpO1xcbitcXHRcXHRpZiAoIWRldilcXG4rXFx0XFx0XFx0cmV0dXJuIEJQRl9GSUJfTEtVUF9SRVRfTk9UX0ZXREVEO1xcbitcXHR9XFxuK1xcbiBcXHQvKiB2ZXJpZnkgZm9yd2FyZGluZyBpcyBlbmFibGVkIG9uIHRoaXMgaW50ZXJmYWNlICovXFxuIFxcdGluX2RldiA9IF9faW5fZGV2X2dldF9yY3UoZGV2KTtcXG4gXFx0aWYgKHVubGlrZWx5KCFpbl9kZXYgfHwgIUlOX0RFVl9GT1JXQVJEKGluX2RldikpKVxcbkBAIC02MjM4LDcgKzYyODUsMTEgQEAgc3RhdGljIGludCBicGZfaXB2NF9maWJfbG9va3VwKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGJwZl9maWJfbG9va3VwICpwYXJhbXMsXFxuIFxcdFxcdGZsNC5mbG93aTRfaWlmID0gMTtcXG4gXFx0XFx0Zmw0LmZsb3dpNF9vaWYgPSBwYXJhbXMtXFx1MDAzZWlmaW5kZXg7XFxuIFxcdH0gZWxzZSB7XFxuLVxcdFxcdGZsNC5mbG93aTRfaWlmID0gcGFyYW1zLVxcdTAwM2VpZmluZGV4O1xcbitcXHRcXHQvKlxcbitcXHRcXHQgKiBkZXYtXFx1MDAzZWlmaW5kZXgsIG5vdCBwYXJhbXMtXFx1MDAzZWlmaW5kZXg6IFZMQU5fSU5QVVQgbWF5IGhhdmVcXG4rXFx0XFx0ICogcmVzb2x2ZWQgZGV2IHRvIGEgc3ViaW50ZXJmYWNlIGFib3ZlLlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0Zmw0LmZsb3dpNF9paWYgPSBkZXYtXFx1MDAzZWlmaW5kZXg7XFxuIFxcdFxcdGZsNC5mbG93aTRfb2lmID0gMDtcXG4gXFx0fVxcbiBcXHRmbDQuZmxvd2k0X2RzY3AgPSBpbmV0X2RzZmllbGRfdG9fZHNjcChwYXJhbXMtXFx1MDAzZXRvcyk7XFxuQEAgLTYzNDcsNyArNjM5OCw3IEBAIHN0YXRpYyBpbnQgYnBmX2lwdjRfZmliX2xvb2t1cChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBicGZfZmliX2xvb2t1cCAqcGFyYW1zLFxcbiBcXHRtZW1jcHkocGFyYW1zLVxcdTAwM2VzbWFjLCBkZXYtXFx1MDAzZWRldl9hZGRyLCBFVEhfQUxFTik7XFxuIFxcbiBzZXRfZndkX3BhcmFtczpcXG4tXFx0cmV0dXJuIGJwZl9maWJfc2V0X2Z3ZF9wYXJhbXMocGFyYW1zLCBtdHUpO1xcbitcXHRyZXR1cm4gYnBmX2ZpYl9zZXRfZndkX3BhcmFtcyhkZXYsIHBhcmFtcywgZmxhZ3MsIG10dSwgaW5faWZpbmRleCk7XFxuIH1cXG4gI2VuZGlmXFxuIFxcbkBAIC02MzU3LDYgKzY0MDgsNyBAQCBzdGF0aWMgaW50IGJwZl9pcHY2X2ZpYl9sb29rdXAoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgYnBmX2ZpYl9sb29rdXAgKnBhcmFtcyxcXG4ge1xcbiBcXHRzdHJ1Y3QgaW42X2FkZHIgKnNyYyA9IChzdHJ1Y3QgaW42X2FkZHIgKikgcGFyYW1zLVxcdTAwM2VpcHY2X3NyYztcXG4gXFx0c3RydWN0IGluNl9hZGRyICpkc3QgPSAoc3RydWN0IGluNl9hZGRyICopIHBhcmFtcy1cXHUwMDNlaXB2Nl9kc3Q7XFxuK1xcdHUzMiBpbl9pZmluZGV4ID0gcGFyYW1zLVxcdTAwM2VpZmluZGV4O1xcbiBcXHRzdHJ1Y3QgZmliNl9yZXN1bHQgcmVzID0ge307XFxuIFxcdHN0cnVjdCBuZWlnaGJvdXIgKm5laWdoO1xcbiBcXHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2O1xcbkBAIC02Mzc0LDYgKzY0MjYsMTQgQEAgc3RhdGljIGludCBicGZfaXB2Nl9maWJfbG9va3VwKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGJwZl9maWJfbG9va3VwICpwYXJhbXMsXFxuIFxcdGlmICh1bmxpa2VseSghZGV2KSlcXG4gXFx0XFx0cmV0dXJuIC1FTk9ERVY7XFxuIFxcbitcXHRpZiAoZmxhZ3MgXFx1MDAyNiBCUEZfRklCX0xPT0tVUF9WTEFOX0lOUFVUKSB7XFxuK1xcdFxcdGRldiA9IGJwZl9maWJfdmxhbl9pbnB1dF9kZXYoZGV2LCBwYXJhbXMpO1xcbitcXHRcXHRpZiAoSVNfRVJSKGRldikpXFxuK1xcdFxcdFxcdHJldHVybiBQVFJfRVJSKGRldik7XFxuK1xcdFxcdGlmICghZGV2KVxcbitcXHRcXHRcXHRyZXR1cm4gQlBGX0ZJQl9MS1VQX1JFVF9OT1RfRldERUQ7XFxuK1xcdH1cXG4rXFxuIFxcdGlkZXYgPSBfX2luNl9kZXZfZ2V0X3NhZmVseShkZXYpO1xcbiBcXHRpZiAodW5saWtlbHkoIWlkZXYgfHwgIVJFQURfT05DRShpZGV2LVxcdTAwM2VjbmYuZm9yd2FyZGluZykpKVxcbiBcXHRcXHRyZXR1cm4gQlBGX0ZJQl9MS1VQX1JFVF9GV0RfRElTQUJMRUQ7XFxuQEAgLTYzODIsNyArNjQ0MiwxMiBAQCBzdGF0aWMgaW50IGJwZl9pcHY2X2ZpYl9sb29rdXAoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgYnBmX2ZpYl9sb29rdXAgKnBhcmFtcyxcXG4gXFx0XFx0Zmw2LmZsb3dpNl9paWYgPSAxO1xcbiBcXHRcXHRvaWYgPSBmbDYuZmxvd2k2X29pZiA9IHBhcmFtcy1cXHUwMDNlaWZpbmRleDtcXG4gXFx0fSBlbHNlIHtcXG4tXFx0XFx0b2lmID0gZmw2LmZsb3dpNl9paWYgPSBwYXJhbXMtXFx1MDAzZWlmaW5kZXg7XFxuK1xcdFxcdC8qXFxuK1xcdFxcdCAqIGRldi1cXHUwMDNlaWZpbmRleCwgbm90IHBhcmFtcy1cXHUwMDNlaWZpbmRleDogVkxBTl9JTlBVVCBtYXkgaGF2ZVxcbitcXHRcXHQgKiByZXNvbHZlZCBkZXYgdG8gYSBzdWJpbnRlcmZhY2UgYWJvdmUuXFxuK1xcdFxcdCAqL1xcbitcXHRcXHRvaWYgPSBkZXYtXFx1MDAzZWlmaW5kZXg7XFxuK1xcdFxcdGZsNi5mbG93aTZfaWlmID0gb2lmO1xcbiBcXHRcXHRmbDYuZmxvd2k2X29pZiA9IDA7XFxuIFxcdFxcdHN0cmljdCA9IFJUNl9MT09LVVBfRl9IQVNfU0FERFI7XFxuIFxcdH1cXG5AQCAtNjQ4NiwxMyArNjU1MSwyNiBAQCBzdGF0aWMgaW50IGJwZl9pcHY2X2ZpYl9sb29rdXAoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgYnBmX2ZpYl9sb29rdXAgKnBhcmFtcyxcXG4gXFx0bWVtY3B5KHBhcmFtcy1cXHUwMDNlc21hYywgZGV2LVxcdTAwM2VkZXZfYWRkciwgRVRIX0FMRU4pO1xcbiBcXG4gc2V0X2Z3ZF9wYXJhbXM6XFxuLVxcdHJldHVybiBicGZfZmliX3NldF9md2RfcGFyYW1zKHBhcmFtcywgbXR1KTtcXG4rXFx0cmV0dXJuIGJwZl9maWJfc2V0X2Z3ZF9wYXJhbXMoZGV2LCBwYXJhbXMsIGZsYWdzLCBtdHUsIGluX2lmaW5kZXgpO1xcbiB9XFxuICNlbmRpZlxcbiBcXG4gI2RlZmluZSBCUEZfRklCX0xPT0tVUF9NQVNLIChCUEZfRklCX0xPT0tVUF9ESVJFQ1QgfCBCUEZfRklCX0xPT0tVUF9PVVRQVVQgfCBcXFxcXFxuIFxcdFxcdFxcdCAgICAgQlBGX0ZJQl9MT09LVVBfU0tJUF9ORUlHSCB8IEJQRl9GSUJfTE9PS1VQX1RCSUQgfCBcXFxcXFxuLVxcdFxcdFxcdCAgICAgQlBGX0ZJQl9MT09LVVBfU1JDIHwgQlBGX0ZJQl9MT09LVVBfTUFSSylcXG4rXFx0XFx0XFx0ICAgICBCUEZfRklCX0xPT0tVUF9TUkMgfCBCUEZfRklCX0xPT0tVUF9NQVJLIHwgXFxcXFxcbitcXHRcXHRcXHQgICAgIEJQRl9GSUJfTE9PS1VQX1ZMQU4gfCBCUEZfRklCX0xPT0tVUF9WTEFOX0lOUFVUKVxcbitcXG4rc3RhdGljIGJvb2wgYnBmX2ZpYl9sb29rdXBfZmxhZ3Nfb2sodTMyIGZsYWdzKVxcbit7XFxuK1xcdGlmIChmbGFncyBcXHUwMDI2IH5CUEZfRklCX0xPT0tVUF9NQVNLKVxcbitcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcbitcXHRpZiAoKGZsYWdzIFxcdTAwMjYgQlBGX0ZJQl9MT09LVVBfVkxBTl9JTlBVVCkgXFx1MDAyNlxcdTAwMjZcXG4rXFx0ICAgIChmbGFncyBcXHUwMDI2IChCUEZfRklCX0xPT0tVUF9UQklEIHwgQlBGX0ZJQl9MT09LVVBfT1VUUFVUKSkpXFxuK1xcdFxcdHJldHVybiBmYWxzZTtcXG4rXFxuK1xcdHJldHVybiB0cnVlO1xcbit9XFxuIFxcbiBCUEZfQ0FMTF80KGJwZl94ZHBfZmliX2xvb2t1cCwgc3RydWN0IHhkcF9idWZmICosIGN0eCxcXG4gXFx0ICAgc3RydWN0IGJwZl9maWJfbG9va3VwICosIHBhcmFtcywgaW50LCBwbGVuLCB1MzIsIGZsYWdzKVxcbkBAIC02NTAwLDcgKzY1NzgsNyBAQCBCUEZfQ0FMTF80KGJwZl94ZHBfZmliX2xvb2t1cCwgc3RydWN0IHhkcF9idWZmICosIGN0eCxcXG4gXFx0aWYgKHBsZW4gXFx1MDAzYyBzaXplb2YoKnBhcmFtcykpXFxuIFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiBcXG4tXFx0aWYgKGZsYWdzIFxcdTAwMjYgfkJQRl9GSUJfTE9PS1VQX01BU0spXFxuK1xcdGlmICghYnBmX2ZpYl9sb29rdXBfZmxhZ3Nfb2soZmxhZ3MpKVxcbiBcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gXFxuIFxcdHN3aXRjaCAocGFyYW1zLVxcdTAwM2VmYW1pbHkpIHtcXG5AQCAtNjUzOCw3ICs2NjE2LDEwIEBAIEJQRl9DQUxMXzQoYnBmX3NrYl9maWJfbG9va3VwLCBzdHJ1Y3Qgc2tfYnVmZiAqLCBza2IsXFxuIFxcdGlmIChwbGVuIFxcdTAwM2Mgc2l6ZW9mKCpwYXJhbXMpKVxcbiBcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gXFxuLVxcdGlmIChmbGFncyBcXHUwMDI2IH5CUEZfRklCX0xPT0tVUF9NQVNLKVxcbitcXHRpZiAoIWJwZl9maWJfbG9va3VwX2ZsYWdzX29rKGZsYWdzKSlcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcbitcXHRpZiAoZmxhZ3MgXFx1MDAyNiBCUEZfRklCX0xPT0tVUF9WTEFOKVxcbiBcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gXFxuIFxcdGlmIChwYXJhbXMtXFx1MDAzZXRvdF9sZW4pXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaCBiL3Rvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaFxcbmluZGV4IDg5YjM2ZGU1ZmRiYjZkLi5kNDIxODk1NGM1MGY1MyAxMDA2NDRcXG4tLS0gYS90b29scy9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmhcXG4rKysgYi90b29scy9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmhcXG5AQCAtMzUzMiw2ICszNTMyLDQ1IEBAIHVuaW9uIGJwZl9hdHRyIHtcXG4gICpcXHRcXHRcXHRVc2UgdGhlIG1hcmsgcHJlc2VudCBpbiAqcGFyYW1zKi1cXHUwMDNlbWFyayBmb3IgdGhlIGZpYiBsb29rdXAuXFxuICAqXFx0XFx0XFx0VGhpcyBvcHRpb24gc2hvdWxkIG5vdCBiZSB1c2VkIHdpdGggQlBGX0ZJQl9MT09LVVBfRElSRUNULFxcbiAgKlxcdFxcdFxcdGFzIGl0IG9ubHkgaGFzIG1lYW5pbmcgZm9yIGZ1bGwgbG9va3Vwcy5cXG4rICpcXHRcXHQqKkJQRl9GSUJfTE9PS1VQX1ZMQU4qKlxcbisgKlxcdFxcdFxcdElmIHRoZSBmaWIgbG9va3VwIHJlc29sdmVzIHRvIGEgVkxBTiBkZXZpY2Ugd2hvc2VcXG4rICpcXHRcXHRcXHRwYXJlbnQgaXMgYSByZWFsIChub24tVkxBTikgZGV2aWNlLCBzZXRcXG4rICpcXHRcXHRcXHQqcGFyYW1zKi1cXHUwMDNlaF92bGFuX3Byb3RvIGFuZCAqcGFyYW1zKi1cXHUwMDNlaF92bGFuX1RDSSBmcm9tXFxuKyAqXFx0XFx0XFx0dGhlIFZMQU4gZGV2aWNlIGFuZCByZXBsYWNlICpwYXJhbXMqLVxcdTAwM2VpZmluZGV4IHdpdGggdGhlXFxuKyAqXFx0XFx0XFx0cGFyZW50J3MgaWZpbmRleC4gKnBhcmFtcyotXFx1MDAzZWhfdmxhbl9UQ0kgY2FycmllcyB0aGUgVklEXFxuKyAqXFx0XFx0XFx0b25seSwgd2l0aCBQQ1AgYW5kIERFSSBiaXRzIHplcm87IGEgY29uc3VtZXIgd2FudGluZyB0b1xcbisgKlxcdFxcdFxcdHNldCBlZ3Jlc3MgcHJpb3JpdHkgd3JpdGVzIFBDUCBpdHNlbGYuICpwYXJhbXMqLVxcdTAwM2VzbWFjIGlzXFxuKyAqXFx0XFx0XFx0dGhlIFZMQU4gZGV2aWNlJ3Mgb3duIGFkZHJlc3MsIHdoaWNoIGNhbiBkaWZmZXIgZnJvbSB0aGVcXG4rICpcXHRcXHRcXHRwYXJlbnQncy4gT25seSB0aGUgaW1tZWRpYXRlIHBhcmVudCBpcyByZXNvbHZlZDsgaWYgaXRcXG4rICpcXHRcXHRcXHRpcyBpdHNlbGYgYSBWTEFOIGRldmljZSAoUWluUSkgb3IgaW4gYW5vdGhlciBuYW1lc3BhY2UsXFxuKyAqXFx0XFx0XFx0dGhlIGVncmVzcyBjYW5ub3QgYmUgcmVkdWNlZCB0byBhIHBoeXNpY2FsIGRldmljZSBwbHVzXFxuKyAqXFx0XFx0XFx0b25lIHRhZyBhbmQgdGhlIGxvb2t1cCByZXR1cm5zXFxuKyAqXFx0XFx0XFx0KipCUEZfRklCX0xLVVBfUkVUX1ZMQU5fRkFJTFVSRSoqIHdpdGggKnBhcmFtcyotXFx1MDAzZWlmaW5kZXhcXG4rICpcXHRcXHRcXHRsZWZ0IGF0IHRoZSBpbnB1dC4gUmUtaXNzdWUgd2l0aG91dFxcbisgKlxcdFxcdFxcdCoqQlBGX0ZJQl9MT09LVVBfVkxBTioqIHRvIG9idGFpbiB0aGUgVkxBTiBkZXZpY2UncyBvd25cXG4rICpcXHRcXHRcXHRpZmluZGV4LiBUaGUgc3dhcCBhbmQgdGhlIHZsYW4gZmllbGRzXFxuKyAqXFx0XFx0XFx0YXJlIHdyaXR0ZW4gb25seSBvbiBzdWNjZXNzOyBvdGhlciBvdXRwdXQgZmllbGRzIGtlZXBcXG4rICpcXHRcXHRcXHR0aGUgaGVscGVyJ3MgZXhpc3RpbmcgYmVoYXZpb3VyLCBzbyBhIGZyYWctbmVlZGVkIHJlc3VsdFxcbisgKlxcdFxcdFxcdHN0aWxsIHJlcG9ydHMgdGhlIHJvdXRlIG10dSBpbiAqcGFyYW1zKi1cXHUwMDNlbXR1X3Jlc3VsdC5cXG4rICpcXHRcXHRcXHRUaGlzIGZsYWcgaXMgb25seSB2YWxpZCBmb3IgWERQIHByb2dyYW1zOyB0YyBwcm9ncmFtc1xcbisgKlxcdFxcdFxcdHJlY2VpdmUgLUVJTlZBTCBzaW5jZSB0aGV5IGNhbiByZWRpcmVjdCB0byB0aGUgVkxBTlxcbisgKlxcdFxcdFxcdGRldmljZSBkaXJlY3RseS5cXG4rICpcXHRcXHQqKkJQRl9GSUJfTE9PS1VQX1ZMQU5fSU5QVVQqKlxcbisgKlxcdFxcdFxcdFRyZWF0ICpwYXJhbXMqLVxcdTAwM2VoX3ZsYW5fcHJvdG8gYW5kICpwYXJhbXMqLVxcdTAwM2VoX3ZsYW5fVENJXFxuKyAqXFx0XFx0XFx0YXMgYW4gaW5wdXQgVkxBTiB0YWcgYW5kIHJ1biB0aGUgbG9va3VwIGFzIGlmIGluZ3Jlc3NcXG4rICpcXHRcXHRcXHRoYWQgaGFwcGVuZWQgb24gdGhlIFZMQU4gc3ViaW50ZXJmYWNlIGNhcnJ5aW5nIHRoYXQgdGFnXFxuKyAqXFx0XFx0XFx0b24gKnBhcmFtcyotXFx1MDAzZWlmaW5kZXguIFRoZSBWSUQgaXMgdGhlIGxvdyAxMiBiaXRzIG9mXFxuKyAqXFx0XFx0XFx0KnBhcmFtcyotXFx1MDAzZWhfdmxhbl9UQ0k7ICpwYXJhbXMqLVxcdTAwM2VoX3ZsYW5fcHJvdG8gbXVzdCBiZVxcbisgKlxcdFxcdFxcdEVUSF9QXzgwMjFRIG9yIEVUSF9QXzgwMjFBRCBpbiBuZXR3b3JrIGJ5dGUgb3JkZXIsIGVsc2VcXG4rICpcXHRcXHRcXHQqKi1FSU5WQUwqKi4gSWYgKnBhcmFtcyotXFx1MDAzZWlmaW5kZXggaXMgaXRzZWxmIGEgVkxBTlxcbisgKlxcdFxcdFxcdGRldmljZSwgaXRzIGlubmVyIChRaW5RKSBzdWJpbnRlcmZhY2UgaXMgbWF0Y2hlZDsgZm9yIGFcXG4rICpcXHRcXHRcXHRib25kIG9yIHRlYW0sIHBhc3MgdGhlIG1hc3RlcidzIGlmaW5kZXguIEFuIHVubWF0Y2hlZFxcbisgKlxcdFxcdFxcdHRhZywgYSBkb3duIGRldmljZSwgb3Igb25lIGluIGFub3RoZXIgbmFtZXNwYWNlIHJldHVybnNcXG4rICpcXHRcXHRcXHQqKkJQRl9GSUJfTEtVUF9SRVRfTk9UX0ZXREVEKiosIG1pcnJvcmluZyByZWFsIGluZ3Jlc3MuXFxuKyAqXFx0XFx0XFx0QSBWSUQgb2YgMCBpcyBsb29rZWQgdXAgbGl0ZXJhbGx5LCBzbyBkbyBub3Qgc2V0IHRoaXNcXG4rICpcXHRcXHRcXHRmbGFnIGZvciBwcmlvcml0eS10YWdnZWQgZnJhbWVzLiBDYW5ub3QgYmUgY29tYmluZWQgd2l0aFxcbisgKlxcdFxcdFxcdCoqQlBGX0ZJQl9MT09LVVBfVEJJRCoqIG9yICoqQlBGX0ZJQl9MT09LVVBfT1VUUFVUKipcXG4rICpcXHRcXHRcXHQocmV0dXJucyAqKi1FSU5WQUwqKikuXFxuICAqXFxuICAqXFx0XFx0KmN0eCogaXMgZWl0aGVyICoqc3RydWN0IHhkcF9tZCoqIGZvciBYRFAgcHJvZ3JhbXMgb3JcXG4gICpcXHRcXHQqKnN0cnVjdCBza19idWZmKiogdGMgY2xzX2FjdCBwcm9ncmFtcy5cXG5AQCAtNzMyNyw2ICs3MzY2LDggQEAgZW51bSB7XFxuIFxcdEJQRl9GSUJfTE9PS1VQX1RCSUQgICAgPSAoMVUgXFx1MDAzY1xcdTAwM2MgMyksXFxuIFxcdEJQRl9GSUJfTE9PS1VQX1NSQyAgICAgPSAoMVUgXFx1MDAzY1xcdTAwM2MgNCksXFxuIFxcdEJQRl9GSUJfTE9PS1VQX01BUksgICAgPSAoMVUgXFx1MDAzY1xcdTAwM2MgNSksXFxuK1xcdEJQRl9GSUJfTE9PS1VQX1ZMQU4gICAgPSAoMVUgXFx1MDAzY1xcdTAwM2MgNiksXFxuK1xcdEJQRl9GSUJfTE9PS1VQX1ZMQU5fSU5QVVQgPSAoMVUgXFx1MDAzY1xcdTAwM2MgNyksXFxuIH07XFxuIFxcbiBlbnVtIHtcXG5AQCAtNzM0MCw2ICs3MzgxLDcgQEAgZW51bSB7XFxuIFxcdEJQRl9GSUJfTEtVUF9SRVRfTk9fTkVJR0gsICAgICAvKiBubyBuZWlnaGJvciBlbnRyeSBmb3IgbmggKi9cXG4gXFx0QlBGX0ZJQl9MS1VQX1JFVF9GUkFHX05FRURFRCwgIC8qIGZyYWdtZW50YXRpb24gcmVxdWlyZWQgdG8gZndkICovXFxuIFxcdEJQRl9GSUJfTEtVUF9SRVRfTk9fU1JDX0FERFIsICAvKiBmYWlsZWQgdG8gZGVyaXZlIElQIHNyYyBhZGRyICovXFxuK1xcdEJQRl9GSUJfTEtVUF9SRVRfVkxBTl9GQUlMVVJFLCAvKiBWTEFOIGVncmVzcywgcGFyZW50IHVucmVzb2x2YWJsZSAqL1xcbiB9O1xcbiBcXG4gc3RydWN0IGJwZl9maWJfbG9va3VwIHtcXG5AQCAtNzM5Myw3ICs3NDM1LDEzIEBAIHN0cnVjdCBicGZfZmliX2xvb2t1cCB7XFxuIFxcbiBcXHR1bmlvbiB7XFxuIFxcdFxcdHN0cnVjdCB7XFxuLVxcdFxcdFxcdC8qIG91dHB1dCAqL1xcbitcXHRcXHRcXHQvKlxcbitcXHRcXHRcXHQgKiBvdXRwdXQgd2l0aCBCUEZfRklCX0xPT0tVUF9WTEFOOiBzZXQgZnJvbSB0aGVcXG4rXFx0XFx0XFx0ICogcmVzb2x2ZWQgZWdyZXNzIFZMQU4gZGV2aWNlIChzZWUgdGhlIGZsYWcpOyB6ZXJvZWRcXG4rXFx0XFx0XFx0ICogb24gb3RoZXIgc3VjY2Vzc2Z1bCBsb29rdXBzLiBpbnB1dCB3aXRoXFxuK1xcdFxcdFxcdCAqIEJQRl9GSUJfTE9PS1VQX1ZMQU5fSU5QVVQ6IHRoZSBWTEFOIHRhZyB0byBzY29wZVxcbitcXHRcXHRcXHQgKiB0aGUgbG9va3VwIGJ5LlxcbitcXHRcXHRcXHQgKi9cXG4gXFx0XFx0XFx0X19iZTE2XFx0aF92bGFuX3Byb3RvO1xcbiBcXHRcXHRcXHRfX2JlMTZcXHRoX3ZsYW5fVENJO1xcbiBcXHRcXHR9O1xcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9maWJfbG9va3VwLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9maWJfbG9va3VwLmNcXG5pbmRleCBiZDc2NTg5NTgwMDQxZi4uOGNhZWQ5ZDQzYjk4MTEgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvZmliX2xvb2t1cC5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvZmliX2xvb2t1cC5jXFxuQEAgLTIsNiArMiw3IEBAXFxuIC8qIENvcHlyaWdodCAoYykgMjAyMyBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy4gKi9cXG4gXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9ydG5ldGxpbmsuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2lmX2V0aGVyLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NzeXMvdHlwZXMuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY25ldC9pZi5oXFx1MDAzZVxcbiBcXG5AQCAtMjMsNiArMjQsNyBAQFxcbiAjZGVmaW5lIElQVjRfVEJJRF9BRERSXFx0XFx0XFxcIjE3Mi4wLjAuMjU0XFxcIlxcbiAjZGVmaW5lIElQVjRfVEJJRF9ORVRcXHRcXHRcXFwiMTcyLjAuMC4wXFxcIlxcbiAjZGVmaW5lIElQVjRfVEJJRF9EU1RcXHRcXHRcXFwiMTcyLjAuMC4yXFxcIlxcbisjZGVmaW5lIElQVjRfVEJJRF9OT05FSUdIX0RTVFxcdFxcXCIxNzIuMC4wLjVcXFwiXFxuICNkZWZpbmUgSVBWNl9UQklEX0FERFJcXHRcXHRcXFwiZmQwMDo6RkZGRlxcXCJcXG4gI2RlZmluZSBJUFY2X1RCSURfTkVUXFx0XFx0XFxcImZkMDA6OlxcXCJcXG4gI2RlZmluZSBJUFY2X1RCSURfRFNUXFx0XFx0XFxcImZkMDA6OjJcXFwiXFxuQEAgLTM3LDYgKzM5LDQxIEBAXFxuICNkZWZpbmUgSVBWNl9MT0NBTFxcdFxcdFxcXCJmZDAxOjozXFxcIlxcbiAjZGVmaW5lIElQVjZfR1cxXFx0XFx0XFxcImZkMDE6OjFcXFwiXFxuICNkZWZpbmUgSVBWNl9HVzJcXHRcXHRcXFwiZmQwMTo6MlxcXCJcXG4rI2RlZmluZSBWTEFOX0lEXFx0XFx0XFx0MTAwXFxuKyNkZWZpbmUgVkxBTl9JRkFDRVxcdFxcdFxcXCJ2ZXRoMS4xMDBcXFwiXFxuKyNkZWZpbmUgVkxBTl9JRF9ET1dOXFx0XFx0MTAyXFxuKyNkZWZpbmUgVkxBTl9JRkFDRV9ET1dOXFx0XFx0XFxcInZldGgxLjEwMlxcXCJcXG4rI2RlZmluZSBRSU5RX09VVEVSX0lGQUNFXFx0XFxcInZldGgxLjIwMFxcXCJcXG4rI2RlZmluZSBRSU5RX0lOTkVSX0lGQUNFXFx0XFxcInZldGgxLjIwMC4zMDBcXFwiXFxuKyNkZWZpbmUgVkxBTl9UQUJMRVxcdFxcdFxcXCIzMDBcXFwiXFxuKyNkZWZpbmUgSVBWNF9WTEFOX0lGQUNFX0FERFJcXHRcXFwiMTAuNS4wLjI1NFxcXCJcXG4rI2RlZmluZSBJUFY0X1ZMQU5fRUdSRVNTX0RTVFxcdFxcXCIxMC41LjAuMlxcXCJcXG4rI2RlZmluZSBJUFY0X1FJTlFfRFNUXFx0XFx0XFxcIjEwLjcuMC4yXFxcIlxcbisjZGVmaW5lIElQVjRfVkxBTl9EU1RcXHRcXHRcXFwiMTAuNi4wLjJcXFwiXFxuKyNkZWZpbmUgSVBWNF9WTEFOX0dXXFx0XFx0XFxcIjEwLjUuMC4xXFxcIlxcbisjZGVmaW5lIElQVjZfVkxBTl9JRkFDRV9BRERSXFx0XFxcImZkMDI6OjI1NFxcXCJcXG4rI2RlZmluZSBJUFY2X1ZMQU5fRUdSRVNTX0RTVFxcdFxcXCJmZDAyOjoyXFxcIlxcbisjZGVmaW5lIElQVjZfVkxBTl9EU1RcXHRcXHRcXFwiZmQwMzo6MlxcXCJcXG4rI2RlZmluZSBJUFY2X1ZMQU5fR1dcXHRcXHRcXFwiZmQwMjo6MVxcXCJcXG4rI2RlZmluZSBWTEFOX1ZJRF9VTlVTRURcXHRcXHQ5OTlcXG4rI2RlZmluZSBWUkZfSUZBQ0VcXHRcXHRcXFwidnJmLWJsdWVcXFwiXFxuKyNkZWZpbmUgVlJGX1RBQkxFXFx0XFx0XFxcIjEwMDBcXFwiXFxuKyNkZWZpbmUgVlJGX1ZMQU5fSURcXHRcXHQxMDFcXG4rI2RlZmluZSBWUkZfVkxBTl9JRkFDRVxcdFxcdFxcXCJ2ZXRoMS4xMDFcXFwiXFxuKyNkZWZpbmUgSVBWNF9WUkZfSUZBQ0VfQUREUlxcdFxcXCIxMC44LjAuMjU0XFxcIlxcbisjZGVmaW5lIElQVjRfVlJGX0dXXFx0XFx0XFxcIjEwLjguMC4xXFxcIlxcbisjZGVmaW5lIElQVjRfVlJGX0RTVFxcdFxcdFxcXCIxMC45LjAuMlxcXCJcXG4rI2RlZmluZSBUQklEX1ZMQU5fSURcXHRcXHQ1MFxcbisjZGVmaW5lIFRCSURfVkxBTl9JRkFDRVxcdFxcdFxcXCJ2ZXRoMi41MFxcXCJcXG4rI2RlZmluZSBJUFY0X1RCSURfVkxBTl9EU1RcXHRcXFwiMTcyLjIuMC4yXFxcIlxcbisjZGVmaW5lIElQVjRfQk9ORF9WTEFOX0RTVFxcdFxcXCIxMC4xMS4wLjJcXFwiXFxuKyNkZWZpbmUgSVBWNF9WTEFOX01UVV9EU1RcXHRcXFwiMTAuNS45LjJcXFwiXFxuKyNkZWZpbmUgUUlOUV9BRF9WTEFOX0lEXFx0XFx0MjAwXFxuKyNkZWZpbmUgUUlOUV9JTk5FUl9WTEFOX0lEXFx0MzAwXFxuKyNkZWZpbmUgQk9ORF9JRkFDRVxcdFxcdFxcXCJib25kOTlcXFwiXFxuKyNkZWZpbmUgQk9ORF9QT1JUXFx0XFx0XFxcInZldGgzXFxcIlxcbisjZGVmaW5lIEJPTkRfUE9SVF9QRUVSXFx0XFx0XFxcInZldGg0XFxcIlxcbisjZGVmaW5lIEJPTkRfVkxBTl9JRFxcdFxcdDUwMFxcbiAjZGVmaW5lIERNQUNcXHRcXHRcXHRcXFwiMTE6MTE6MTE6MTE6MTE6MTFcXFwiXFxuICNkZWZpbmUgRE1BQ19JTklUIHsgMHgxMSwgMHgxMSwgMHgxMSwgMHgxMSwgMHgxMSwgMHgxMSwgfVxcbiAjZGVmaW5lIERNQUMyXFx0XFx0XFx0XFxcIjAxOjAxOjAxOjAxOjAxOjAxXFxcIlxcbkBAIC01Miw2ICs4OSwxNyBAQCBzdHJ1Y3QgZmliX2xvb2t1cF90ZXN0IHtcXG4gXFx0X191MzIgdGJpZDtcXG4gXFx0X191OCBkbWFjWzZdO1xcbiBcXHRfX3UzMiBtYXJrO1xcbitcXHQvKlxcbitcXHQgKiBpbnB1dCB0YWcgd2l0aCBCUEZfRklCX0xPT0tVUF9WTEFOX0lOUFVUOyBleHBlY3RlZCBvdXRwdXQgdGFnXFxuK1xcdCAqIHdpdGggQlBGX0ZJQl9MT09LVVBfVkxBTiAoY2hlY2tlZCB3aGVuIGNoZWNrX3ZsYW4gaXMgc2V0KVxcbitcXHQgKi9cXG4rXFx0X191MTYgdmxhbl9wcm90bztcXG4rXFx0X191MTYgdmxhbl9pZDtcXG4rXFx0Ym9vbCBjaGVja192bGFuO1xcbitcXHRjb25zdCBjaGFyICpleHBlY3RlZF9kZXY7IC8qIGV4cGVjdGVkIHBhcmFtcy1cXHUwMDNlaWZpbmRleCBhZnRlciBsb29rdXAgKi9cXG4rXFx0Y29uc3QgY2hhciAqaWlmO1xcdCAgLyogb3ZlcnJpZGUgdGhlIGRlZmF1bHQgdmV0aDEgaW5wdXQgZGV2aWNlICovXFxuK1xcdF9fdTE2IHRvdF9sZW47XFx0XFx0ICAvKiB0cmlnZ2VycyB0aGUgaW4tbG9va3VwIG10dSBjaGVjayB3aGVuIHNldCAqL1xcbitcXHRfX3UxNiBleHBlY3RlZF9tdHU7XFx0ICAvKiBleHBlY3RlZCBtdHVfcmVzdWx0ICh1bmlvbiB3aXRoIHRvdF9sZW4pICovXFxuIH07XFxuIFxcbiBzdGF0aWMgY29uc3Qgc3RydWN0IGZpYl9sb29rdXBfdGVzdCB0ZXN0c1tdID0ge1xcbkBAIC03OSw2ICsxMjcsMTcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBmaWJfbG9va3VwX3Rlc3QgdGVzdHNbXSA9IHtcXG4gXFx0ICAuZGFkZHIgPSBJUFY0X1RCSURfRFNULCAuZXhwZWN0ZWRfcmV0ID0gQlBGX0ZJQl9MS1VQX1JFVF9TVUNDRVNTLFxcbiBcXHQgIC5sb29rdXBfZmxhZ3MgPSBCUEZfRklCX0xPT0tVUF9ESVJFQ1QgfCBCUEZfRklCX0xPT0tVUF9UQklELCAudGJpZCA9IDEwMCxcXG4gXFx0ICAuZG1hYyA9IERNQUNfSU5JVDIsIH0sXFxuK1xcdC8qXFxuK1xcdCAqIEFuIGVycm9yIHRoYXQgcmV0dXJucyBhZnRlciB0aGUgZWdyZXNzIGRldmljZSBpcyByZXNvbHZlZCBtdXN0XFxuK1xcdCAqIHJlcG9ydCB0aGUgZWdyZXNzIGlmaW5kZXgsIG5vdCB0aGUgaW5wdXQuIFRoaXMgcm91dGVzIGZyb20gaW5wdXRcXG4rXFx0ICogdmV0aDEgdmlhIHZldGgyICh0YWJsZSAxMDApIHRvIGEgZHN0IHdpdGggbm8gbmVpZ2hib3VyLCBzb1xcbitcXHQgKiBpbnB1dCAhPSBlZ3Jlc3MsIHBpbm5pbmcgTk9fTkVJR0ggdG8gdGhlIGVncmVzcyBkZXZpY2UuXFxuK1xcdCAqL1xcbitcXHR7IC5kZXNjID0gXFxcIklQdjQgTk9fTkVJR0ggcmVwb3J0cyB0aGUgZWdyZXNzIGlmaW5kZXgsIG5vdCB0aGUgaW5wdXRcXFwiLFxcbitcXHQgIC5kYWRkciA9IElQVjRfVEJJRF9OT05FSUdIX0RTVCxcXG4rXFx0ICAuZXhwZWN0ZWRfcmV0ID0gQlBGX0ZJQl9MS1VQX1JFVF9OT19ORUlHSCxcXG4rXFx0ICAubG9va3VwX2ZsYWdzID0gQlBGX0ZJQl9MT09LVVBfRElSRUNUIHwgQlBGX0ZJQl9MT09LVVBfVEJJRCwgLnRiaWQgPSAxMDAsXFxuK1xcdCAgLmV4cGVjdGVkX2RldiA9IFxcXCJ2ZXRoMlxcXCIsIH0sXFxuIFxcdHsgLmRlc2MgPSBcXFwiSVB2NiBUQklEIGxvb2t1cCBmYWlsdXJlXFxcIixcXG4gXFx0ICAuZGFkZHIgPSBJUFY2X1RCSURfRFNULCAuZXhwZWN0ZWRfcmV0ID0gQlBGX0ZJQl9MS1VQX1JFVF9OT1RfRldERUQsXFxuIFxcdCAgLmxvb2t1cF9mbGFncyA9IEJQRl9GSUJfTE9PS1VQX0RJUkVDVCB8IEJQRl9GSUJfTE9PS1VQX1RCSUQsXFxuQEAgLTE0Miw2ICsyMDEsMjE4IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZmliX2xvb2t1cF90ZXN0IHRlc3RzW10gPSB7XFxuIFxcdCAgLmV4cGVjdGVkX2RzdCA9IElQVjZfR1cxLFxcbiBcXHQgIC5sb29rdXBfZmxhZ3MgPSBCUEZfRklCX0xPT0tVUF9TS0lQX05FSUdILFxcbiBcXHQgIC5tYXJrID0gTUFSSywgfSxcXG4rXFx0LyogdmxhbiBlZ3Jlc3MgcmVzb2x1dGlvbiAqL1xcbitcXHQvKlxcbitcXHQgKiBJbnZhcmlhbnQgdGhlIFZMQU4tZWdyZXNzIGFybXMgam9pbnRseSBlbmZvcmNlOiBhXFxuK1xcdCAqIEJQRl9GSUJfTE9PS1VQX1ZMQU4gU1VDQ0VTUyBhbHdheXMgY2FycmllcyBhIHBoeXNpY2FsLFxcbitcXHQgKiB4bWl0LWNhcGFibGUgaWZpbmRleCAtLSBubyBTVUNDRVNTIGV2ZXIgcmV0dXJucyBhIFZMQU4tZGV2aWNlXFxuK1xcdCAqIGlmaW5kZXguIFJlZHVjaWJsZSBhcm1zIHBpbiBpZmluZGV4ID09IHRoZSBwaHlzaWNhbCBwYXJlbnQ7IHRoZVxcbitcXHQgKiBRaW5RIGFuZCBmb3JlaWduLW5ldG5zIGFybXMgcGluIFZMQU5fRkFJTFVSRSB3aXRoIHBhcmFtcy1cXHUwMDNlaWZpbmRleFxcbitcXHQgKiBsZWZ0IGF0IHRoZSBpbnB1dCwgc28gYSByZWdyZXNzaW9uIHRvIGJlc3QtZWZmb3J0IChTVUNDRVNTICsgdGhlXFxuK1xcdCAqIFZMQU4gaWZpbmRleCkgZmFpbHMgb25lLlxcbitcXHQgKi9cXG4rXFx0eyAuZGVzYyA9IFxcXCJJUHY0IFZMQU4gZWdyZXNzLCBubyBmbGFnXFxcIixcXG4rXFx0ICAuZGFkZHIgPSBJUFY0X1ZMQU5fRUdSRVNTX0RTVCwgLmV4cGVjdGVkX3JldCA9IEJQRl9GSUJfTEtVUF9SRVRfU1VDQ0VTUyxcXG4rXFx0ICAubG9va3VwX2ZsYWdzID0gQlBGX0ZJQl9MT09LVVBfU0tJUF9ORUlHSCxcXG4rXFx0ICAuZXhwZWN0ZWRfZGV2ID0gVkxBTl9JRkFDRSwgLmNoZWNrX3ZsYW4gPSB0cnVlLCB9LFxcbitcXHR7IC5kZXNjID0gXFxcIklQdjQgVkxBTiBlZ3Jlc3MsIHNpbmdsZSBWTEFOXFxcIixcXG4rXFx0ICAuZGFkZHIgPSBJUFY0X1ZMQU5fRUdSRVNTX0RTVCwgLmV4cGVjdGVkX3JldCA9IEJQRl9GSUJfTEtVUF9SRVRfU1VDQ0VTUyxcXG4rXFx0ICAubG9va3VwX2ZsYWdzID0gQlBGX0ZJQl9MT09LVVBfVkxBTiB8IEJQRl9GSUJfTE9PS1VQX1NLSVBfTkVJR0gsXFxuK1xcdCAgLmV4cGVjdGVkX2RldiA9IFxcXCJ2ZXRoMVxcXCIsIC5jaGVja192bGFuID0gdHJ1ZSxcXG4rXFx0ICAudmxhbl9wcm90byA9IEVUSF9QXzgwMjFRLCAudmxhbl9pZCA9IFZMQU5fSUQsIH0sXFxuK1xcdC8qXFxuK1xcdCAqIHNrYiBwYXRoIHdpdGhvdXQgdG90X2xlbjogbXR1X3Jlc3VsdCBpcyB0aGUgVkxBTiBkZXZpY2UncyBtdHVcXG4rXFx0ICogKDE0MDApLCBub3QgdGhlIHBhcmVudCdzICgxNTAwKVxcbitcXHQgKi9cXG4rXFx0eyAuZGVzYyA9IFxcXCJJUHY0IFZMQU4gZWdyZXNzLCBza2ItcGF0aCBtdHUgaXMgdGhlIFZMQU4gZGV2aWNlJ3Mgd2l0aG91dCB0aGUgZmxhZ1xcXCIsXFxuK1xcdCAgLmRhZGRyID0gSVBWNF9WTEFOX0VHUkVTU19EU1QsIC5leHBlY3RlZF9yZXQgPSBCUEZfRklCX0xLVVBfUkVUX1NVQ0NFU1MsXFxuK1xcdCAgLmxvb2t1cF9mbGFncyA9IEJQRl9GSUJfTE9PS1VQX1NLSVBfTkVJR0gsXFxuK1xcdCAgLmV4cGVjdGVkX2RldiA9IFZMQU5fSUZBQ0UsIC5jaGVja192bGFuID0gdHJ1ZSwgLmV4cGVjdGVkX210dSA9IDE0MDAsIH0sXFxuK1xcdHsgLmRlc2MgPSBcXFwiSVB2NCBWTEFOIGVncmVzcywgZmxhZyBzZXQgYnV0IGVncmVzcyBpcyBub3QgYSBWTEFOXFxcIixcXG4rXFx0ICAuZGFkZHIgPSBJUFY0X05VRF9GQUlMRURfQUREUiwgLmV4cGVjdGVkX3JldCA9IEJQRl9GSUJfTEtVUF9SRVRfU1VDQ0VTUyxcXG4rXFx0ICAubG9va3VwX2ZsYWdzID0gQlBGX0ZJQl9MT09LVVBfVkxBTiB8IEJQRl9GSUJfTE9PS1VQX1NLSVBfTkVJR0gsXFxuK1xcdCAgLmV4cGVjdGVkX2RldiA9IFxcXCJ2ZXRoMVxcXCIsIC5jaGVja192bGFuID0gdHJ1ZSwgfSxcXG4rXFx0eyAuZGVzYyA9IFxcXCJJUHY0IFZMQU4gZWdyZXNzLCBRaW5RIG5vdCByZWR1Y2libGUgKFZMQU5fRkFJTFVSRSlcXFwiLFxcbitcXHQgIC5kYWRkciA9IElQVjRfUUlOUV9EU1QsXFxuK1xcdCAgLmV4cGVjdGVkX3JldCA9IEJQRl9GSUJfTEtVUF9SRVRfVkxBTl9GQUlMVVJFLFxcbitcXHQgIC5sb29rdXBfZmxhZ3MgPSBCUEZfRklCX0xPT0tVUF9WTEFOIHwgQlBGX0ZJQl9MT09LVVBfU0tJUF9ORUlHSCxcXG4rXFx0ICAuZXhwZWN0ZWRfZGV2ID0gXFxcInZldGgxXFxcIiwgLmNoZWNrX3ZsYW4gPSB0cnVlLCB9LFxcbitcXHR7IC5kZXNjID0gXFxcIklQdjQgUWluUSBlZ3Jlc3Mgd2l0aG91dCB0aGUgZmxhZyAoZXNjYXBlIGhhdGNoKVxcXCIsXFxuK1xcdCAgLmRhZGRyID0gSVBWNF9RSU5RX0RTVCwgLmV4cGVjdGVkX3JldCA9IEJQRl9GSUJfTEtVUF9SRVRfU1VDQ0VTUyxcXG4rXFx0ICAubG9va3VwX2ZsYWdzID0gQlBGX0ZJQl9MT09LVVBfU0tJUF9ORUlHSCxcXG4rXFx0ICAuZXhwZWN0ZWRfZGV2ID0gUUlOUV9JTk5FUl9JRkFDRSwgfSxcXG4rXFx0eyAuZGVzYyA9IFxcXCJJUHY2IFZMQU4gZWdyZXNzLCBzaW5nbGUgVkxBTlxcXCIsXFxuK1xcdCAgLmRhZGRyID0gSVBWNl9WTEFOX0VHUkVTU19EU1QsIC5leHBlY3RlZF9yZXQgPSBCUEZfRklCX0xLVVBfUkVUX1NVQ0NFU1MsXFxuK1xcdCAgLmxvb2t1cF9mbGFncyA9IEJQRl9GSUJfTE9PS1VQX1ZMQU4gfCBCUEZfRklCX0xPT0tVUF9TS0lQX05FSUdILFxcbitcXHQgIC5leHBlY3RlZF9kZXYgPSBcXFwidmV0aDFcXFwiLCAuY2hlY2tfdmxhbiA9IHRydWUsXFxuK1xcdCAgLnZsYW5fcHJvdG8gPSBFVEhfUF84MDIxUSwgLnZsYW5faWQgPSBWTEFOX0lELCB9LFxcbitcXHR7IC5kZXNjID0gXFxcIklQdjQgVkxBTiBlZ3Jlc3MsIG5laWdoYm91ciBvbiB0aGUgVkxBTiBkZXZpY2VcXFwiLFxcbitcXHQgIC5kYWRkciA9IElQVjRfVkxBTl9FR1JFU1NfRFNULCAuZXhwZWN0ZWRfcmV0ID0gQlBGX0ZJQl9MS1VQX1JFVF9TVUNDRVNTLFxcbitcXHQgIC5sb29rdXBfZmxhZ3MgPSBCUEZfRklCX0xPT0tVUF9WTEFOLFxcbitcXHQgIC5leHBlY3RlZF9kZXYgPSBcXFwidmV0aDFcXFwiLCAuY2hlY2tfdmxhbiA9IHRydWUsXFxuK1xcdCAgLnZsYW5fcHJvdG8gPSBFVEhfUF84MDIxUSwgLnZsYW5faWQgPSBWTEFOX0lELCAuZG1hYyA9IERNQUNfSU5JVCwgfSxcXG4rXFx0eyAuZGVzYyA9IFxcXCJJUHY0IFZMQU4gZWdyZXNzIGluIE9VVFBVVCBtb2RlXFxcIixcXG4rXFx0ICAuZGFkZHIgPSBJUFY0X1ZMQU5fRUdSRVNTX0RTVCwgLmV4cGVjdGVkX3JldCA9IEJQRl9GSUJfTEtVUF9SRVRfU1VDQ0VTUyxcXG4rXFx0ICAuaWlmID0gVkxBTl9JRkFDRSxcXG4rXFx0ICAubG9va3VwX2ZsYWdzID0gQlBGX0ZJQl9MT09LVVBfT1VUUFVUIHwgQlBGX0ZJQl9MT09LVVBfVkxBTiB8XFxuK1xcdFxcdFxcdCAgQlBGX0ZJQl9MT09LVVBfU0tJUF9ORUlHSCxcXG4rXFx0ICAuZXhwZWN0ZWRfZGV2ID0gXFxcInZldGgxXFxcIiwgLmNoZWNrX3ZsYW4gPSB0cnVlLFxcbitcXHQgIC52bGFuX3Byb3RvID0gRVRIX1BfODAyMVEsIC52bGFuX2lkID0gVkxBTl9JRCwgfSxcXG4rXFx0eyAuZGVzYyA9IFxcXCJJUHY0IFZMQU4gZWdyZXNzIG92ZXIgYSBib25kXFxcIixcXG4rXFx0ICAuZGFkZHIgPSBJUFY0X0JPTkRfVkxBTl9EU1QsIC5leHBlY3RlZF9yZXQgPSBCUEZfRklCX0xLVVBfUkVUX1NVQ0NFU1MsXFxuK1xcdCAgLmxvb2t1cF9mbGFncyA9IEJQRl9GSUJfTE9PS1VQX1ZMQU4gfCBCUEZfRklCX0xPT0tVUF9TS0lQX05FSUdILFxcbitcXHQgIC5leHBlY3RlZF9kZXYgPSBCT05EX0lGQUNFLCAuY2hlY2tfdmxhbiA9IHRydWUsXFxuK1xcdCAgLnZsYW5fcHJvdG8gPSBFVEhfUF84MDIxUSwgLnZsYW5faWQgPSBCT05EX1ZMQU5fSUQsIH0sXFxuK1xcdHsgLmRlc2MgPSBcXFwiSVB2NCBWTEFOIGVncmVzcyB2aWEgVEJJRCB0YWJsZVxcXCIsXFxuK1xcdCAgLmRhZGRyID0gSVBWNF9UQklEX1ZMQU5fRFNULCAuZXhwZWN0ZWRfcmV0ID0gQlBGX0ZJQl9MS1VQX1JFVF9TVUNDRVNTLFxcbitcXHQgIC5sb29rdXBfZmxhZ3MgPSBCUEZfRklCX0xPT0tVUF9ESVJFQ1QgfCBCUEZfRklCX0xPT0tVUF9UQklEIHxcXG4rXFx0XFx0XFx0ICBCUEZfRklCX0xPT0tVUF9WTEFOIHwgQlBGX0ZJQl9MT09LVVBfU0tJUF9ORUlHSCxcXG4rXFx0ICAudGJpZCA9IDEwMCxcXG4rXFx0ICAuZXhwZWN0ZWRfZGV2ID0gXFxcInZldGgyXFxcIiwgLmNoZWNrX3ZsYW4gPSB0cnVlLFxcbitcXHQgIC52bGFuX3Byb3RvID0gRVRIX1BfODAyMVEsIC52bGFuX2lkID0gVEJJRF9WTEFOX0lELCB9LFxcbitcXHR7IC5kZXNjID0gXFxcIklQdjQgVkxBTiBlZ3Jlc3MsIHN1Y2Nlc3Mgd3JpdGVzIG10dV9yZXN1bHQgd2l0aCB0aGUgc3dhcFxcXCIsXFxuK1xcdCAgLmRhZGRyID0gSVBWNF9WTEFOX01UVV9EU1QsIC5leHBlY3RlZF9yZXQgPSBCUEZfRklCX0xLVVBfUkVUX1NVQ0NFU1MsXFxuK1xcdCAgLnRvdF9sZW4gPSA1MDAsIC5leHBlY3RlZF9tdHUgPSAxMDAwLFxcbitcXHQgIC5sb29rdXBfZmxhZ3MgPSBCUEZfRklCX0xPT0tVUF9WTEFOIHwgQlBGX0ZJQl9MT09LVVBfU0tJUF9ORUlHSCxcXG4rXFx0ICAuZXhwZWN0ZWRfZGV2ID0gXFxcInZldGgxXFxcIiwgLmNoZWNrX3ZsYW4gPSB0cnVlLFxcbitcXHQgIC52bGFuX3Byb3RvID0gRVRIX1BfODAyMVEsIC52bGFuX2lkID0gVkxBTl9JRCwgfSxcXG4rXFx0eyAuZGVzYyA9IFxcXCJJUHY0IFZMQU4gZWdyZXNzLCBGUkFHX05FRURFRCByZXBvcnRzIG10dSwgc3dhcCB1bndyaXR0ZW5cXFwiLFxcbitcXHQgIC5kYWRkciA9IElQVjRfVkxBTl9NVFVfRFNULCAuZXhwZWN0ZWRfcmV0ID0gQlBGX0ZJQl9MS1VQX1JFVF9GUkFHX05FRURFRCxcXG4rXFx0ICAudG90X2xlbiA9IDE0MDAsIC5leHBlY3RlZF9tdHUgPSAxMDAwLFxcbitcXHQgIC5sb29rdXBfZmxhZ3MgPSBCUEZfRklCX0xPT0tVUF9WTEFOIHwgQlBGX0ZJQl9MT09LVVBfU0tJUF9ORUlHSCxcXG4rXFx0ICAuZXhwZWN0ZWRfZGV2ID0gXFxcInZldGgxXFxcIiwgLmNoZWNrX3ZsYW4gPSB0cnVlLCB9LFxcbitcXHQvKiB2bGFuIHRhZyBhcyBsb29rdXAgaW5wdXQgKi9cXG4rXFx0eyAuZGVzYyA9IFxcXCJJUHY0IFZMQU4gaW5wdXQsIG5vIGZsYWdcXFwiLFxcbitcXHQgIC5kYWRkciA9IElQVjRfVkxBTl9EU1QsIC5leHBlY3RlZF9yZXQgPSBCUEZfRklCX0xLVVBfUkVUX1NVQ0NFU1MsXFxuK1xcdCAgLmV4cGVjdGVkX2RzdCA9IElQVjRfR1cxLFxcbitcXHQgIC5sb29rdXBfZmxhZ3MgPSBCUEZfRklCX0xPT0tVUF9TS0lQX05FSUdILCB9LFxcbitcXHR7IC5kZXNjID0gXFxcIklQdjQgVkxBTiBpbnB1dCwgdGFnIHNlbGVjdHMgc3ViaW50ZXJmYWNlIHJvdXRlXFxcIixcXG4rXFx0ICAuZGFkZHIgPSBJUFY0X1ZMQU5fRFNULCAuZXhwZWN0ZWRfcmV0ID0gQlBGX0ZJQl9MS1VQX1JFVF9TVUNDRVNTLFxcbitcXHQgIC5leHBlY3RlZF9kc3QgPSBJUFY0X1ZMQU5fR1csIC5leHBlY3RlZF9kZXYgPSBWTEFOX0lGQUNFLFxcbitcXHQgIC5sb29rdXBfZmxhZ3MgPSBCUEZfRklCX0xPT0tVUF9WTEFOX0lOUFVUIHwgQlBGX0ZJQl9MT09LVVBfU0tJUF9ORUlHSCxcXG4rXFx0ICAudmxhbl9wcm90byA9IEVUSF9QXzgwMjFRLCAudmxhbl9pZCA9IFZMQU5fSUQsIH0sXFxuK1xcdHsgLmRlc2MgPSBcXFwiSVB2NiBWTEFOIGlucHV0LCB0YWcgc2VsZWN0cyBzdWJpbnRlcmZhY2Ugcm91dGVcXFwiLFxcbitcXHQgIC5kYWRkciA9IElQVjZfVkxBTl9EU1QsIC5leHBlY3RlZF9yZXQgPSBCUEZfRklCX0xLVVBfUkVUX1NVQ0NFU1MsXFxuK1xcdCAgLmV4cGVjdGVkX2RzdCA9IElQVjZfVkxBTl9HVywgLmV4cGVjdGVkX2RldiA9IFZMQU5fSUZBQ0UsXFxuK1xcdCAgLmxvb2t1cF9mbGFncyA9IEJQRl9GSUJfTE9PS1VQX1ZMQU5fSU5QVVQgfCBCUEZfRklCX0xPT0tVUF9TS0lQX05FSUdILFxcbitcXHQgIC52bGFuX3Byb3RvID0gRVRIX1BfODAyMVEsIC52bGFuX2lkID0gVkxBTl9JRCwgfSxcXG4rXFx0eyAuZGVzYyA9IFxcXCJJUHY0IFZMQU4gaW5wdXQgYW5kIGVncmVzcyBjb21iaW5lZFxcXCIsXFxuK1xcdCAgLmRhZGRyID0gSVBWNF9WTEFOX0RTVCwgLmV4cGVjdGVkX3JldCA9IEJQRl9GSUJfTEtVUF9SRVRfU1VDQ0VTUyxcXG4rXFx0ICAuZXhwZWN0ZWRfZHN0ID0gSVBWNF9WTEFOX0dXLCAuZXhwZWN0ZWRfZGV2ID0gXFxcInZldGgxXFxcIixcXG4rXFx0ICAuY2hlY2tfdmxhbiA9IHRydWUsXFxuK1xcdCAgLmxvb2t1cF9mbGFncyA9IEJQRl9GSUJfTE9PS1VQX1ZMQU5fSU5QVVQgfCBCUEZfRklCX0xPT0tVUF9WTEFOIHxcXG4rXFx0XFx0XFx0ICBCUEZfRklCX0xPT0tVUF9TS0lQX05FSUdILFxcbitcXHQgIC52bGFuX3Byb3RvID0gRVRIX1BfODAyMVEsIC52bGFuX2lkID0gVkxBTl9JRCwgfSxcXG4rXFx0eyAuZGVzYyA9IFxcXCJJUHY0IFZMQU4gaW5wdXQsIG5laWdoYm91ciByZXNvbHZlZCBvbiB0aGUgcm91dGVcXFwiLFxcbitcXHQgIC5kYWRkciA9IElQVjRfVkxBTl9EU1QsIC5leHBlY3RlZF9yZXQgPSBCUEZfRklCX0xLVVBfUkVUX1NVQ0NFU1MsXFxuK1xcdCAgLmV4cGVjdGVkX2RzdCA9IElQVjRfVkxBTl9HVywgLmV4cGVjdGVkX2RldiA9IFZMQU5fSUZBQ0UsXFxuK1xcdCAgLmxvb2t1cF9mbGFncyA9IEJQRl9GSUJfTE9PS1VQX1ZMQU5fSU5QVVQsXFxuK1xcdCAgLnZsYW5fcHJvdG8gPSBFVEhfUF84MDIxUSwgLnZsYW5faWQgPSBWTEFOX0lELCAuZG1hYyA9IERNQUNfSU5JVDIsIH0sXFxuK1xcdHsgLmRlc2MgPSBcXFwiSVB2NCBWTEFOIGlucHV0LCBzb3VyY2UgYWRkcmVzcyBmcm9tIHRoZSBzdWJpbnRlcmZhY2VcXFwiLFxcbitcXHQgIC5kYWRkciA9IElQVjRfVkxBTl9EU1QsIC5leHBlY3RlZF9yZXQgPSBCUEZfRklCX0xLVVBfUkVUX1NVQ0NFU1MsXFxuK1xcdCAgLmV4cGVjdGVkX3NyYyA9IElQVjRfVkxBTl9JRkFDRV9BRERSLFxcbitcXHQgIC5sb29rdXBfZmxhZ3MgPSBCUEZfRklCX0xPT0tVUF9WTEFOX0lOUFVUIHwgQlBGX0ZJQl9MT09LVVBfU1JDIHxcXG4rXFx0XFx0XFx0ICBCUEZfRklCX0xPT0tVUF9TS0lQX05FSUdILFxcbitcXHQgIC52bGFuX3Byb3RvID0gRVRIX1BfODAyMVEsIC52bGFuX2lkID0gVkxBTl9JRCwgfSxcXG4rXFx0LypcXG4rXFx0ICogVlJGOiB0aGUgcmVzb2x2ZWQgc3ViaW50ZXJmYWNlIGlzIGVuc2xhdmVkLCBzbyB0aGUgbDNtZGV2IHJ1bGVcXG4rXFx0ICogKGZ1bGwgbG9va3VwKSBhbmQgbDNtZGV2X2ZpYl90YWJsZV9yY3UoKSAoRElSRUNUKSBtdXN0IHNlbGVjdFxcbitcXHQgKiB0aGUgVlJGIHRhYmxlIGZyb20gdGhlIHJlc29sdmVkIGluZ3Jlc3NcXG4rXFx0ICovXFxuK1xcdHsgLmRlc2MgPSBcXFwiSVB2NCBWTEFOIGlucHV0LCBWUkYgc3ViaW50ZXJmYWNlLCBubyBmbGFnXFxcIixcXG4rXFx0ICAuZGFkZHIgPSBJUFY0X1ZSRl9EU1QsIC5leHBlY3RlZF9yZXQgPSBCUEZfRklCX0xLVVBfUkVUX1NVQ0NFU1MsXFxuK1xcdCAgLmV4cGVjdGVkX2RzdCA9IElQVjRfR1cxLFxcbitcXHQgIC5sb29rdXBfZmxhZ3MgPSBCUEZfRklCX0xPT0tVUF9TS0lQX05FSUdILCB9LFxcbitcXHR7IC5kZXNjID0gXFxcIklQdjQgVkxBTiBpbnB1dCwgdGFnIHNlbGVjdHMgVlJGIHRhYmxlXFxcIixcXG4rXFx0ICAuZGFkZHIgPSBJUFY0X1ZSRl9EU1QsIC5leHBlY3RlZF9yZXQgPSBCUEZfRklCX0xLVVBfUkVUX1NVQ0NFU1MsXFxuK1xcdCAgLmV4cGVjdGVkX2RzdCA9IElQVjRfVlJGX0dXLCAuZXhwZWN0ZWRfZGV2ID0gVlJGX1ZMQU5fSUZBQ0UsXFxuK1xcdCAgLmxvb2t1cF9mbGFncyA9IEJQRl9GSUJfTE9PS1VQX1ZMQU5fSU5QVVQgfCBCUEZfRklCX0xPT0tVUF9TS0lQX05FSUdILFxcbitcXHQgIC52bGFuX3Byb3RvID0gRVRIX1BfODAyMVEsIC52bGFuX2lkID0gVlJGX1ZMQU5fSUQsIH0sXFxuK1xcdHsgLmRlc2MgPSBcXFwiSVB2NCBWTEFOIGlucHV0LCBESVJFQ1QgdXNlcyBWUkYgdGFibGUgZnJvbSByZXNvbHZlZCBpbmdyZXNzXFxcIixcXG4rXFx0ICAuZGFkZHIgPSBJUFY0X1ZSRl9EU1QsIC5leHBlY3RlZF9yZXQgPSBCUEZfRklCX0xLVVBfUkVUX1NVQ0NFU1MsXFxuK1xcdCAgLmV4cGVjdGVkX2RzdCA9IElQVjRfVlJGX0dXLCAuZXhwZWN0ZWRfZGV2ID0gVlJGX1ZMQU5fSUZBQ0UsXFxuK1xcdCAgLmxvb2t1cF9mbGFncyA9IEJQRl9GSUJfTE9PS1VQX1ZMQU5fSU5QVVQgfCBCUEZfRklCX0xPT0tVUF9ESVJFQ1QgfFxcbitcXHRcXHRcXHQgIEJQRl9GSUJfTE9PS1VQX1NLSVBfTkVJR0gsXFxuK1xcdCAgLnZsYW5fcHJvdG8gPSBFVEhfUF84MDIxUSwgLnZsYW5faWQgPSBWUkZfVkxBTl9JRCwgfSxcXG4rXFx0LypcXG4rXFx0ICogZmFpbHVyZSBhcm1zIGFsc28gYXNzZXJ0IHBhcmFtcyBpcyBsZWZ0IHVudG91Y2hlZDogaWZpbmRleCBzdGlsbFxcbitcXHQgKiBuYW1lcyB0aGUgcGh5c2ljYWwgZGV2aWNlIGFuZCB0aGUgaW5wdXQgdGFnIGJ5dGVzIHN1cnZpdmVcXG4rXFx0ICovXFxuK1xcdHsgLmRlc2MgPSBcXFwiSVB2NCBWTEFOIGlucHV0LCBpbnZhbGlkIHByb3RvXFxcIixcXG4rXFx0ICAuZGFkZHIgPSBJUFY0X1ZMQU5fRFNULCAuZXhwZWN0ZWRfcmV0ID0gLUVJTlZBTCxcXG4rXFx0ICAuZXhwZWN0ZWRfZGV2ID0gXFxcInZldGgxXFxcIiwgLmNoZWNrX3ZsYW4gPSB0cnVlLFxcbitcXHQgIC5sb29rdXBfZmxhZ3MgPSBCUEZfRklCX0xPT0tVUF9WTEFOX0lOUFVUIHwgQlBGX0ZJQl9MT09LVVBfU0tJUF9ORUlHSCxcXG4rXFx0ICAudmxhbl9wcm90byA9IDB4MTIzNCwgLnZsYW5faWQgPSBWTEFOX0lELCB9LFxcbitcXHR7IC5kZXNjID0gXFxcIklQdjQgVkxBTiBpbnB1dCwgdW5tYXRjaGVkIFZJRFxcXCIsXFxuK1xcdCAgLmRhZGRyID0gSVBWNF9WTEFOX0RTVCwgLmV4cGVjdGVkX3JldCA9IEJQRl9GSUJfTEtVUF9SRVRfTk9UX0ZXREVELFxcbitcXHQgIC5leHBlY3RlZF9kZXYgPSBcXFwidmV0aDFcXFwiLCAuY2hlY2tfdmxhbiA9IHRydWUsXFxuK1xcdCAgLmxvb2t1cF9mbGFncyA9IEJQRl9GSUJfTE9PS1VQX1ZMQU5fSU5QVVQgfCBCUEZfRklCX0xPT0tVUF9TS0lQX05FSUdILFxcbitcXHQgIC52bGFuX3Byb3RvID0gRVRIX1BfODAyMVEsIC52bGFuX2lkID0gVkxBTl9WSURfVU5VU0VELCB9LFxcbitcXHR7IC5kZXNjID0gXFxcIklQdjQgVkxBTiBpbnB1dCwgc3ViaW50ZXJmYWNlIGRvd25cXFwiLFxcbitcXHQgIC5kYWRkciA9IElQVjRfVkxBTl9EU1QsIC5leHBlY3RlZF9yZXQgPSBCUEZfRklCX0xLVVBfUkVUX05PVF9GV0RFRCxcXG4rXFx0ICAuZXhwZWN0ZWRfZGV2ID0gXFxcInZldGgxXFxcIiwgLmNoZWNrX3ZsYW4gPSB0cnVlLFxcbitcXHQgIC5sb29rdXBfZmxhZ3MgPSBCUEZfRklCX0xPT0tVUF9WTEFOX0lOUFVUIHwgQlBGX0ZJQl9MT09LVVBfU0tJUF9ORUlHSCxcXG4rXFx0ICAudmxhbl9wcm90byA9IEVUSF9QXzgwMjFRLCAudmxhbl9pZCA9IFZMQU5fSURfRE9XTiwgfSxcXG4rXFx0LypcXG4rXFx0ICogdGhlIHJlc29sdmVyIHJ1bnMgYmVmb3JlIHRoZSBmb3J3YXJkaW5nIGNoZWNrLCBzbyBvbiBkZXZpY2VzXFxuK1xcdCAqIHdpdGggZm9yd2FyZGluZyBvZmYgRldEX0RJU0FCTEVEIChub3QgTk9UX0ZXREVEKSBwcm92ZXMgdGhlIHRhZ1xcbitcXHQgKiByZXNvbHZlZCB0byB0aGF0IGRldmljZSBhbmQgdGhlIGxvb2t1cCB1c2VkIGl0IGFzIGluZ3Jlc3NcXG4rXFx0ICovXFxuK1xcdHsgLmRlc2MgPSBcXFwiSVB2NCBWTEFOIGlucHV0LCA4MDIuMWFkIHRhZ1xcXCIsXFxuK1xcdCAgLmRhZGRyID0gSVBWNF9WTEFOX0RTVCwgLmV4cGVjdGVkX3JldCA9IEJQRl9GSUJfTEtVUF9SRVRfRldEX0RJU0FCTEVELFxcbitcXHQgIC5sb29rdXBfZmxhZ3MgPSBCUEZfRklCX0xPT0tVUF9WTEFOX0lOUFVUIHwgQlBGX0ZJQl9MT09LVVBfU0tJUF9ORUlHSCxcXG4rXFx0ICAudmxhbl9wcm90byA9IEVUSF9QXzgwMjFBRCwgLnZsYW5faWQgPSBRSU5RX0FEX1ZMQU5fSUQsIH0sXFxuK1xcdHsgLmRlc2MgPSBcXFwiSVB2NCBWTEFOIGlucHV0LCBQQ1AgYW5kIERFSSBiaXRzIGlnbm9yZWQgaW4gVENJXFxcIixcXG4rXFx0ICAuZGFkZHIgPSBJUFY0X1ZMQU5fRFNULCAuZXhwZWN0ZWRfcmV0ID0gQlBGX0ZJQl9MS1VQX1JFVF9TVUNDRVNTLFxcbitcXHQgIC5leHBlY3RlZF9kc3QgPSBJUFY0X1ZMQU5fR1csXFxuK1xcdCAgLmxvb2t1cF9mbGFncyA9IEJQRl9GSUJfTE9PS1VQX1ZMQU5fSU5QVVQgfCBCUEZfRklCX0xPT0tVUF9TS0lQX05FSUdILFxcbitcXHQgIC52bGFuX3Byb3RvID0gRVRIX1BfODAyMVEsIC52bGFuX2lkID0gMHhlMDAwIHwgVkxBTl9JRCwgfSxcXG4rXFx0eyAuZGVzYyA9IFxcXCJJUHY0IFZMQU4gaW5wdXQsIGlubmVyIFFpblEgZGV2aWNlIGZyb20gVkxBTiBpZmluZGV4XFxcIixcXG4rXFx0ICAuZGFkZHIgPSBJUFY0X1ZMQU5fRFNULCAuZXhwZWN0ZWRfcmV0ID0gQlBGX0ZJQl9MS1VQX1JFVF9GV0RfRElTQUJMRUQsXFxuK1xcdCAgLmlpZiA9IFFJTlFfT1VURVJfSUZBQ0UsXFxuK1xcdCAgLmxvb2t1cF9mbGFncyA9IEJQRl9GSUJfTE9PS1VQX1ZMQU5fSU5QVVQgfCBCUEZfRklCX0xPT0tVUF9TS0lQX05FSUdILFxcbitcXHQgIC52bGFuX3Byb3RvID0gRVRIX1BfODAyMVEsIC52bGFuX2lkID0gUUlOUV9JTk5FUl9WTEFOX0lELCB9LFxcbitcXHQvKlxcbitcXHQgKiBib25kaW5nOiB0aGUgVkxBTnMgbGl2ZSBvbiB0aGUgbWFzdGVyLCBhcyBvbiByZWNlaXZlLCB3aGVyZSB0aGVcXG4rXFx0ICogZnJhbWUgaXMgc3RlZXJlZCB0byB0aGUgbWFzdGVyIGJlZm9yZSBWTEFOIHByb2Nlc3Npbmc7IGEgcG9ydFxcbitcXHQgKiBpZmluZGV4IGRvZXMgbm90IG1hdGNoIChwb3J0cyBjYXJyeSB2aWQgc3RhdGUgYnV0IG5vIFZMQU4gZGV2cylcXG4rXFx0ICovXFxuK1xcdHsgLmRlc2MgPSBcXFwiSVB2NCBWTEFOIGlucHV0LCB0YWcgb24gYm9uZCBtYXN0ZXIgcmVzb2x2ZXNcXFwiLFxcbitcXHQgIC5kYWRkciA9IElQVjRfVkxBTl9EU1QsIC5leHBlY3RlZF9yZXQgPSBCUEZfRklCX0xLVVBfUkVUX0ZXRF9ESVNBQkxFRCxcXG4rXFx0ICAuaWlmID0gQk9ORF9JRkFDRSxcXG4rXFx0ICAubG9va3VwX2ZsYWdzID0gQlBGX0ZJQl9MT09LVVBfVkxBTl9JTlBVVCB8IEJQRl9GSUJfTE9PS1VQX1NLSVBfTkVJR0gsXFxuK1xcdCAgLnZsYW5fcHJvdG8gPSBFVEhfUF84MDIxUSwgLnZsYW5faWQgPSBCT05EX1ZMQU5fSUQsIH0sXFxuK1xcdHsgLmRlc2MgPSBcXFwiSVB2NCBWTEFOIGlucHV0LCB0YWcgb24gYm9uZCBwb3J0IGRvZXMgbm90IG1hdGNoXFxcIixcXG4rXFx0ICAuZGFkZHIgPSBJUFY0X1ZMQU5fRFNULCAuZXhwZWN0ZWRfcmV0ID0gQlBGX0ZJQl9MS1VQX1JFVF9OT1RfRldERUQsXFxuK1xcdCAgLmlpZiA9IEJPTkRfUE9SVCwgLmV4cGVjdGVkX2RldiA9IEJPTkRfUE9SVCwgLmNoZWNrX3ZsYW4gPSB0cnVlLFxcbitcXHQgIC5sb29rdXBfZmxhZ3MgPSBCUEZfRklCX0xPT0tVUF9WTEFOX0lOUFVUIHwgQlBGX0ZJQl9MT09LVVBfU0tJUF9ORUlHSCxcXG4rXFx0ICAudmxhbl9wcm90byA9IEVUSF9QXzgwMjFRLCAudmxhbl9pZCA9IEJPTkRfVkxBTl9JRCwgfSxcXG4rXFx0eyAuZGVzYyA9IFxcXCJJUHY2IFZMQU4gaW5wdXQsIGludmFsaWQgcHJvdG9cXFwiLFxcbitcXHQgIC5kYWRkciA9IElQVjZfVkxBTl9EU1QsIC5leHBlY3RlZF9yZXQgPSAtRUlOVkFMLFxcbitcXHQgIC5leHBlY3RlZF9kZXYgPSBcXFwidmV0aDFcXFwiLCAuY2hlY2tfdmxhbiA9IHRydWUsXFxuK1xcdCAgLmxvb2t1cF9mbGFncyA9IEJQRl9GSUJfTE9PS1VQX1ZMQU5fSU5QVVQgfCBCUEZfRklCX0xPT0tVUF9TS0lQX05FSUdILFxcbitcXHQgIC52bGFuX3Byb3RvID0gMHgxMjM0LCAudmxhbl9pZCA9IFZMQU5fSUQsIH0sXFxuK1xcdHsgLmRlc2MgPSBcXFwiSVB2NCBWTEFOIGlucHV0LCBWSUQgMCBwcmlvcml0eSB0YWcgZmFpbHMgY2xvc2VkXFxcIixcXG4rXFx0ICAuZGFkZHIgPSBJUFY0X1ZMQU5fRFNULCAuZXhwZWN0ZWRfcmV0ID0gQlBGX0ZJQl9MS1VQX1JFVF9OT1RfRldERUQsXFxuK1xcdCAgLmV4cGVjdGVkX2RldiA9IFxcXCJ2ZXRoMVxcXCIsIC5jaGVja192bGFuID0gdHJ1ZSxcXG4rXFx0ICAubG9va3VwX2ZsYWdzID0gQlBGX0ZJQl9MT09LVVBfVkxBTl9JTlBVVCB8IEJQRl9GSUJfTE9PS1VQX1NLSVBfTkVJR0gsXFxuK1xcdCAgLnZsYW5fcHJvdG8gPSBFVEhfUF84MDIxUSwgLnZsYW5faWQgPSAwLCB9LFxcbitcXHR7IC5kZXNjID0gXFxcIklQdjYgVkxBTiBpbnB1dCwgdW5tYXRjaGVkIFZJRFxcXCIsXFxuK1xcdCAgLmRhZGRyID0gSVBWNl9WTEFOX0RTVCwgLmV4cGVjdGVkX3JldCA9IEJQRl9GSUJfTEtVUF9SRVRfTk9UX0ZXREVELFxcbitcXHQgIC5leHBlY3RlZF9kZXYgPSBcXFwidmV0aDFcXFwiLCAuY2hlY2tfdmxhbiA9IHRydWUsXFxuK1xcdCAgLmxvb2t1cF9mbGFncyA9IEJQRl9GSUJfTE9PS1VQX1ZMQU5fSU5QVVQgfCBCUEZfRklCX0xPT0tVUF9TS0lQX05FSUdILFxcbitcXHQgIC52bGFuX3Byb3RvID0gRVRIX1BfODAyMVEsIC52bGFuX2lkID0gVkxBTl9WSURfVU5VU0VELCB9LFxcbitcXHR7IC5kZXNjID0gXFxcInVua25vd24gZmxhZyBiaXQgcmVqZWN0ZWRcXFwiLFxcbitcXHQgIC5kYWRkciA9IElQVjRfVkxBTl9EU1QsIC5leHBlY3RlZF9yZXQgPSAtRUlOVkFMLFxcbitcXHQgIC5sb29rdXBfZmxhZ3MgPSAoMSBcXHUwMDNjXFx1MDAzYyAxNCkgfCBCUEZfRklCX0xPT0tVUF9TS0lQX05FSUdILCB9LFxcbitcXHR7IC5kZXNjID0gXFxcIklQdjQgVkxBTiBpbnB1dCByZWplY3RlZCB3aXRoIFRCSURcXFwiLFxcbitcXHQgIC5kYWRkciA9IElQVjRfVkxBTl9EU1QsIC5leHBlY3RlZF9yZXQgPSAtRUlOVkFMLFxcbitcXHQgIC5sb29rdXBfZmxhZ3MgPSBCUEZfRklCX0xPT0tVUF9WTEFOX0lOUFVUIHwgQlBGX0ZJQl9MT09LVVBfVEJJRCxcXG4rXFx0ICAudmxhbl9wcm90byA9IEVUSF9QXzgwMjFRLCAudmxhbl9pZCA9IFZMQU5fSUQsIH0sXFxuK1xcdHsgLmRlc2MgPSBcXFwiSVB2NCBWTEFOIGlucHV0IHJlamVjdGVkIHdpdGggT1VUUFVUXFxcIixcXG4rXFx0ICAuZGFkZHIgPSBJUFY0X1ZMQU5fRFNULCAuZXhwZWN0ZWRfcmV0ID0gLUVJTlZBTCxcXG4rXFx0ICAubG9va3VwX2ZsYWdzID0gQlBGX0ZJQl9MT09LVVBfVkxBTl9JTlBVVCB8IEJQRl9GSUJfTE9PS1VQX09VVFBVVCxcXG4rXFx0ICAudmxhbl9wcm90byA9IEVUSF9QXzgwMjFRLCAudmxhbl9pZCA9IFZMQU5fSUQsIH0sXFxuIH07XFxuIFxcbiBzdGF0aWMgaW50IHNldHVwX25ldG5zKHZvaWQpXFxuQEAgLTIwNCw2ICs0NzUsMTEwIEBAIHN0YXRpYyBpbnQgc2V0dXBfbmV0bnModm9pZClcXG4gXFx0U1lTKGZhaWwsIFxcXCJpcCBydWxlIGFkZCBwcmlvIDIgZndtYXJrICVkIGxvb2t1cCAlc1xcXCIsIE1BUkssIE1BUktfVEFCTEUpO1xcbiBcXHRTWVMoZmFpbCwgXFxcImlwIC02IHJ1bGUgYWRkIHByaW8gMiBmd21hcmsgJWQgbG9va3VwICVzXFxcIiwgTUFSSywgTUFSS19UQUJMRSk7XFxuIFxcbitcXHQvKlxcbitcXHQgKiBTZXR1cCBmb3IgdmxhbiB0ZXN0czogYSBzdWJpbnRlcmZhY2UgZm9yIGVncmVzcyByZXNvbHV0aW9uIGFuZFxcbitcXHQgKiB0YWctYXMtaW5wdXQsIGEgUWluUSBzdGFjaywgYW5kIGFuIGlpZiBydWxlIHNvIHRoZSBpbnB1dCB0ZXN0c1xcbitcXHQgKiBvYnNlcnZlIHdoaWNoIGRldmljZSB0aGUgbG9va3VwIHVzZWQgYXMgaW5ncmVzcy5cXG4rXFx0ICovXFxuK1xcdFNZUyhmYWlsLCBcXFwiaXAgbGluayBhZGQgbGluayB2ZXRoMSBuYW1lICVzIHR5cGUgdmxhbiBpZCAlZFxcXCIsXFxuK1xcdCAgICBWTEFOX0lGQUNFLCBWTEFOX0lEKTtcXG4rXFx0U1lTKGZhaWwsIFxcXCJpcCBsaW5rIHNldCBkZXYgJXMgdXBcXFwiLCBWTEFOX0lGQUNFKTtcXG4rXFx0LypcXG4rXFx0ICogbG93ZXIgdGhhbiB0aGUgdmV0aDEgcGFyZW50ICgxNTAwKTogdGhlIHNrYi1wYXRoIG10dSBjaGVjayB1c2VzIHRoZVxcbitcXHQgKiBGSUIgcmVzdWx0IChWTEFOKSBkZXZpY2UsIHNvIG10dV9yZXN1bHQgaXMgdGhpcyB2YWx1ZSB3aXRoIG9yXFxuK1xcdCAqIHdpdGhvdXQgdGhlIGVncmVzcyBzd2FwLCB3aGljaCB0d28gYXJtcyBiZWxvdyBwaW5cXG4rXFx0ICovXFxuK1xcdFNZUyhmYWlsLCBcXFwiaXAgbGluayBzZXQgZGV2ICVzIG10dSAxNDAwXFxcIiwgVkxBTl9JRkFDRSk7XFxuK1xcdFNZUyhmYWlsLCBcXFwiaXAgYWRkciBhZGQgJXMvMjQgZGV2ICVzXFxcIiwgSVBWNF9WTEFOX0lGQUNFX0FERFIsIFZMQU5fSUZBQ0UpO1xcbitcXHRTWVMoZmFpbCwgXFxcImlwIGFkZHIgYWRkICVzLzY0IGRldiAlcyBub2RhZFxcXCIsIElQVjZfVkxBTl9JRkFDRV9BRERSLCBWTEFOX0lGQUNFKTtcXG4rXFxuK1xcdC8qXFxuK1xcdCAqIHN0YXlzIGRvd246IHRoZSBpbnB1dCBmbGFnIG11c3QgdHJlYXQgaXRzIHRhZyB0aGUgd2F5IHJlYWxcXG4rXFx0ICogaW5ncmVzcyB0cmVhdHMgYSBmcmFtZSBhcnJpdmluZyBvbiBhIGRvd24gVkxBTiBkZXZpY2UgKGRyb3ApXFxuK1xcdCAqL1xcbitcXHRTWVMoZmFpbCwgXFxcImlwIGxpbmsgYWRkIGxpbmsgdmV0aDEgbmFtZSAlcyB0eXBlIHZsYW4gaWQgJWRcXFwiLFxcbitcXHQgICAgVkxBTl9JRkFDRV9ET1dOLCBWTEFOX0lEX0RPV04pO1xcbitcXG4rXFx0ZXJyID0gd3JpdGVfc3lzY3RsKFxcXCIvcHJvYy9zeXMvbmV0L2lwdjQvY29uZi9cXFwiIFZMQU5fSUZBQ0UgXFxcIi9mb3J3YXJkaW5nXFxcIiwgXFxcIjFcXFwiKTtcXG4rXFx0aWYgKCFBU1NFUlRfT0soZXJyLCBcXFwid3JpdGVfc3lzY3RsKG5ldC5pcHY0LmNvbmYuXFxcIiBWTEFOX0lGQUNFIFxcXCIuZm9yd2FyZGluZylcXFwiKSlcXG4rXFx0XFx0Z290byBmYWlsO1xcbitcXG4rXFx0ZXJyID0gd3JpdGVfc3lzY3RsKFxcXCIvcHJvYy9zeXMvbmV0L2lwdjYvY29uZi9cXFwiIFZMQU5fSUZBQ0UgXFxcIi9mb3J3YXJkaW5nXFxcIiwgXFxcIjFcXFwiKTtcXG4rXFx0aWYgKCFBU1NFUlRfT0soZXJyLCBcXFwid3JpdGVfc3lzY3RsKG5ldC5pcHY2LmNvbmYuXFxcIiBWTEFOX0lGQUNFIFxcXCIuZm9yd2FyZGluZylcXFwiKSlcXG4rXFx0XFx0Z290byBmYWlsO1xcbitcXG4rXFx0U1lTKGZhaWwsIFxcXCJpcCBsaW5rIGFkZCBsaW5rIHZldGgxIG5hbWUgJXMgdHlwZSB2bGFuIHByb3RvIDgwMi4xYWQgaWQgMjAwXFxcIixcXG4rXFx0ICAgIFFJTlFfT1VURVJfSUZBQ0UpO1xcbitcXHRTWVMoZmFpbCwgXFxcImlwIGxpbmsgYWRkIGxpbmsgJXMgbmFtZSAlcyB0eXBlIHZsYW4gaWQgMzAwXFxcIixcXG4rXFx0ICAgIFFJTlFfT1VURVJfSUZBQ0UsIFFJTlFfSU5ORVJfSUZBQ0UpO1xcbitcXHRTWVMoZmFpbCwgXFxcImlwIGxpbmsgc2V0IGRldiAlcyB1cFxcXCIsIFFJTlFfT1VURVJfSUZBQ0UpO1xcbitcXHRTWVMoZmFpbCwgXFxcImlwIGxpbmsgc2V0IGRldiAlcyB1cFxcXCIsIFFJTlFfSU5ORVJfSUZBQ0UpO1xcbitcXHRTWVMoZmFpbCwgXFxcImlwIHJvdXRlIGFkZCAlcy8zMiBkZXYgJXNcXFwiLCBJUFY0X1FJTlFfRFNULCBRSU5RX0lOTkVSX0lGQUNFKTtcXG4rXFxuK1xcdFNZUyhmYWlsLCBcXFwiaXAgcm91dGUgYWRkICVzLzMyIHZpYSAlc1xcXCIsIElQVjRfVkxBTl9EU1QsIElQVjRfR1cxKTtcXG4rXFx0U1lTKGZhaWwsIFxcXCJpcCByb3V0ZSBhZGQgdGFibGUgJXMgJXMvMzIgdmlhICVzXFxcIixcXG4rXFx0ICAgIFZMQU5fVEFCTEUsIElQVjRfVkxBTl9EU1QsIElQVjRfVkxBTl9HVyk7XFxuK1xcdFNZUyhmYWlsLCBcXFwiaXAgcnVsZSBhZGQgcHJpbyAzIGlpZiAlcyBsb29rdXAgJXNcXFwiLCBWTEFOX0lGQUNFLCBWTEFOX1RBQkxFKTtcXG4rXFx0U1lTKGZhaWwsIFxcXCJpcCAtNiByb3V0ZSBhZGQgJXMvMTI4IHZpYSAlc1xcXCIsIElQVjZfVkxBTl9EU1QsIElQVjZfR1cxKTtcXG4rXFx0U1lTKGZhaWwsIFxcXCJpcCAtNiByb3V0ZSBhZGQgdGFibGUgJXMgJXMvMTI4IHZpYSAlc1xcXCIsXFxuK1xcdCAgICBWTEFOX1RBQkxFLCBJUFY2X1ZMQU5fRFNULCBJUFY2X1ZMQU5fR1cpO1xcbitcXHRTWVMoZmFpbCwgXFxcImlwIC02IHJ1bGUgYWRkIHByaW8gMyBpaWYgJXMgbG9va3VwICVzXFxcIiwgVkxBTl9JRkFDRSwgVkxBTl9UQUJMRSk7XFxuK1xcbitcXHQvKlxcbitcXHQgKiBhIGJvbmQgd2l0aCBvbmUgcG9ydCBhbmQgYSBWTEFOIG9uIHRoZSBib25kOiBWTEFOcyBvbiBhIGJvbmRcXG4rXFx0ICogbGl2ZSBvbiB0aGUgbWFzdGVyLCBzbyByZXNvbHV0aW9uIHN1Y2NlZWRzIGZvciB0aGUgbWFzdGVyJ3NcXG4rXFx0ICogaWZpbmRleCBhbmQgZmFpbHMgY2xvc2VkIGZvciBhIHBvcnQncywgbWF0Y2hpbmcgcmVjZWl2ZSwgd2hpY2hcXG4rXFx0ICogc3RlZXJzIHRoZSBmcmFtZSB0byB0aGUgbWFzdGVyIGJlZm9yZSBWTEFOIHByb2Nlc3NpbmdcXG4rXFx0ICovXFxuK1xcdFNZUyhmYWlsLCBcXFwiaXAgbGluayBhZGQgJXMgdHlwZSBib25kXFxcIiwgQk9ORF9JRkFDRSk7XFxuK1xcdFNZUyhmYWlsLCBcXFwiaXAgbGluayBhZGQgJXMgdHlwZSB2ZXRoIHBlZXIgbmFtZSAlc1xcXCIsIEJPTkRfUE9SVCwgQk9ORF9QT1JUX1BFRVIpO1xcbitcXHRTWVMoZmFpbCwgXFxcImlwIGxpbmsgc2V0ICVzIG1hc3RlciAlc1xcXCIsIEJPTkRfUE9SVCwgQk9ORF9JRkFDRSk7XFxuK1xcdFNZUyhmYWlsLCBcXFwiaXAgbGluayBzZXQgZGV2ICVzIHVwXFxcIiwgQk9ORF9JRkFDRSk7XFxuK1xcdFNZUyhmYWlsLCBcXFwiaXAgbGluayBzZXQgZGV2ICVzIHVwXFxcIiwgQk9ORF9QT1JUKTtcXG4rXFx0U1lTKGZhaWwsIFxcXCJpcCBsaW5rIGFkZCBsaW5rICVzIG5hbWUgJXMuJWQgdHlwZSB2bGFuIGlkICVkXFxcIixcXG4rXFx0ICAgIEJPTkRfSUZBQ0UsIEJPTkRfSUZBQ0UsIEJPTkRfVkxBTl9JRCwgQk9ORF9WTEFOX0lEKTtcXG4rXFx0U1lTKGZhaWwsIFxcXCJpcCBsaW5rIHNldCBkZXYgJXMuJWQgdXBcXFwiLCBCT05EX0lGQUNFLCBCT05EX1ZMQU5fSUQpO1xcbitcXHRTWVMoZmFpbCwgXFxcImlwIHJvdXRlIGFkZCAlcy8zMiBkZXYgJXMuJWRcXFwiLFxcbitcXHQgICAgSVBWNF9CT05EX1ZMQU5fRFNULCBCT05EX0lGQUNFLCBCT05EX1ZMQU5fSUQpO1xcbitcXG4rXFx0LypcXG4rXFx0ICogYSBWUkYgd2l0aCBpdHMgb3duIGRlZGljYXRlZCBzdWJpbnRlcmZhY2UgKHRoZSBpaWYgcnVsZXMgYWJvdmVcXG4rXFx0ICogbXVzdCBub3Qgc2VlIGl0KSwgZm9yIHRoZSB0YWJsZS1zZWxlY3Rpb24tYnktaW5ncmVzcyBjYXNlc1xcbitcXHQgKi9cXG4rXFx0U1lTKGZhaWwsIFxcXCJpcCBsaW5rIGFkZCAlcyB0eXBlIHZyZiB0YWJsZSAlc1xcXCIsIFZSRl9JRkFDRSwgVlJGX1RBQkxFKTtcXG4rXFx0U1lTKGZhaWwsIFxcXCJpcCBsaW5rIHNldCBkZXYgJXMgdXBcXFwiLCBWUkZfSUZBQ0UpO1xcbitcXHRTWVMoZmFpbCwgXFxcImlwIGxpbmsgYWRkIGxpbmsgdmV0aDEgbmFtZSAlcyB0eXBlIHZsYW4gaWQgJWRcXFwiLFxcbitcXHQgICAgVlJGX1ZMQU5fSUZBQ0UsIFZSRl9WTEFOX0lEKTtcXG4rXFx0U1lTKGZhaWwsIFxcXCJpcCBsaW5rIHNldCAlcyBtYXN0ZXIgJXNcXFwiLCBWUkZfVkxBTl9JRkFDRSwgVlJGX0lGQUNFKTtcXG4rXFx0U1lTKGZhaWwsIFxcXCJpcCBsaW5rIHNldCBkZXYgJXMgdXBcXFwiLCBWUkZfVkxBTl9JRkFDRSk7XFxuK1xcdFNZUyhmYWlsLCBcXFwiaXAgYWRkciBhZGQgJXMvMjQgZGV2ICVzXFxcIiwgSVBWNF9WUkZfSUZBQ0VfQUREUiwgVlJGX1ZMQU5fSUZBQ0UpO1xcbitcXHRlcnIgPSB3cml0ZV9zeXNjdGwoXFxcIi9wcm9jL3N5cy9uZXQvaXB2NC9jb25mL1xcXCIgVlJGX1ZMQU5fSUZBQ0UgXFxcIi9mb3J3YXJkaW5nXFxcIiwgXFxcIjFcXFwiKTtcXG4rXFx0aWYgKCFBU1NFUlRfT0soZXJyLCBcXFwid3JpdGVfc3lzY3RsKG5ldC5pcHY0LmNvbmYuXFxcIiBWUkZfVkxBTl9JRkFDRSBcXFwiLmZvcndhcmRpbmcpXFxcIikpXFxuK1xcdFxcdGdvdG8gZmFpbDtcXG4rXFx0U1lTKGZhaWwsIFxcXCJpcCByb3V0ZSBhZGQgJXMvMzIgdmlhICVzXFxcIiwgSVBWNF9WUkZfRFNULCBJUFY0X0dXMSk7XFxuK1xcdFNZUyhmYWlsLCBcXFwiaXAgcm91dGUgYWRkIHRhYmxlICVzICVzLzMyIHZpYSAlc1xcXCIsXFxuK1xcdCAgICBWUkZfVEFCTEUsIElQVjRfVlJGX0RTVCwgSVBWNF9WUkZfR1cpO1xcbitcXG4rXFx0LyogbmVpZ2hib3VycyBvbiB0aGUgVkxBTiBzdWJpbnRlcmZhY2UgZm9yIHRoZSBub24tU0tJUF9ORUlHSCBjYXNlcyAqL1xcbitcXHRlcnIgPSB3cml0ZV9zeXNjdGwoXFxcIi9wcm9jL3N5cy9uZXQvaXB2NC9uZWlnaC9cXFwiIFZMQU5fSUZBQ0UgXFxcIi9nY19zdGFsZV90aW1lXFxcIiwgXFxcIjkwMFxcXCIpO1xcbitcXHRpZiAoIUFTU0VSVF9PSyhlcnIsIFxcXCJ3cml0ZV9zeXNjdGwobmV0LmlwdjQubmVpZ2guXFxcIiBWTEFOX0lGQUNFIFxcXCIuZ2Nfc3RhbGVfdGltZSlcXFwiKSlcXG4rXFx0XFx0Z290byBmYWlsO1xcbitcXHRTWVMoZmFpbCwgXFxcImlwIG5laWdoIGFkZCAlcyBkZXYgJXMgbGxhZGRyICVzIG51ZCBzdGFsZVxcXCIsXFxuK1xcdCAgICBJUFY0X1ZMQU5fRUdSRVNTX0RTVCwgVkxBTl9JRkFDRSwgRE1BQyk7XFxuK1xcdFNZUyhmYWlsLCBcXFwiaXAgbmVpZ2ggYWRkICVzIGRldiAlcyBsbGFkZHIgJXMgbnVkIHN0YWxlXFxcIixcXG4rXFx0ICAgIElQVjRfVkxBTl9HVywgVkxBTl9JRkFDRSwgRE1BQzIpO1xcbitcXG4rXFx0LyogYSBWTEFOIG9uIHZldGgyIHdpdGggYSByb3V0ZSBpbiB0aGUgdGJpZCB0ZXN0IHRhYmxlICovXFxuK1xcdFNZUyhmYWlsLCBcXFwiaXAgbGluayBhZGQgbGluayB2ZXRoMiBuYW1lICVzIHR5cGUgdmxhbiBpZCAlZFxcXCIsXFxuK1xcdCAgICBUQklEX1ZMQU5fSUZBQ0UsIFRCSURfVkxBTl9JRCk7XFxuK1xcdFNZUyhmYWlsLCBcXFwiaXAgbGluayBzZXQgZGV2ICVzIHVwXFxcIiwgVEJJRF9WTEFOX0lGQUNFKTtcXG4rXFx0U1lTKGZhaWwsIFxcXCJpcCByb3V0ZSBhZGQgdGFibGUgMTAwICVzLzMyIGRldiAlc1xcXCIsXFxuK1xcdCAgICBJUFY0X1RCSURfVkxBTl9EU1QsIFRCSURfVkxBTl9JRkFDRSk7XFxuK1xcbitcXHQvKiBhIGxvY2tlZC1tdHUgcm91dGUgdmlhIHRoZSBzdWJpbnRlcmZhY2UgZm9yIHRoZSBGUkFHX05FRURFRCBjYXNlICovXFxuK1xcdFNZUyhmYWlsLCBcXFwiaXAgcm91dGUgYWRkICVzLzMyIGRldiAlcyBtdHUgbG9jayAxMDAwXFxcIixcXG4rXFx0ICAgIElQVjRfVkxBTl9NVFVfRFNULCBWTEFOX0lGQUNFKTtcXG4rXFxuIFxcdHJldHVybiAwO1xcbiBmYWlsOlxcbiBcXHRyZXR1cm4gLTE7XFxuQEAgLTIxOCw5ICs1OTMsMTYgQEAgc3RhdGljIGludCBzZXRfbG9va3VwX3BhcmFtcyhzdHJ1Y3QgYnBmX2ZpYl9sb29rdXAgKnBhcmFtcyxcXG4gXFx0bWVtc2V0KHBhcmFtcywgMCwgc2l6ZW9mKCpwYXJhbXMpKTtcXG4gXFxuIFxcdHBhcmFtcy1cXHUwMDNlbDRfcHJvdG9jb2wgPSBJUFBST1RPX1RDUDtcXG4tXFx0cGFyYW1zLVxcdTAwM2VpZmluZGV4ID0gaWZpbmRleDtcXG4rXFx0cGFyYW1zLVxcdTAwM2VpZmluZGV4ID0gdGVzdC1cXHUwMDNlaWlmID8gaWZfbmFtZXRvaW5kZXgodGVzdC1cXHUwMDNlaWlmKSA6IGlmaW5kZXg7XFxuIFxcdHBhcmFtcy1cXHUwMDNldGJpZCA9IHRlc3QtXFx1MDAzZXRiaWQ7XFxuIFxcdHBhcmFtcy1cXHUwMDNlbWFyayA9IHRlc3QtXFx1MDAzZW1hcms7XFxuK1xcdHBhcmFtcy1cXHUwMDNldG90X2xlbiA9IHRlc3QtXFx1MDAzZXRvdF9sZW47XFxuK1xcbitcXHQvKiBoX3ZsYW5fcHJvdG8vaF92bGFuX1RDSSB1bmlvbiB3aXRoIHRiaWQgKi9cXG4rXFx0aWYgKHRlc3QtXFx1MDAzZWxvb2t1cF9mbGFncyBcXHUwMDI2IEJQRl9GSUJfTE9PS1VQX1ZMQU5fSU5QVVQpIHtcXG4rXFx0XFx0cGFyYW1zLVxcdTAwM2VoX3ZsYW5fcHJvdG8gPSBodG9ucyh0ZXN0LVxcdTAwM2V2bGFuX3Byb3RvKTtcXG4rXFx0XFx0cGFyYW1zLVxcdTAwM2VoX3ZsYW5fVENJID0gaHRvbnModGVzdC1cXHUwMDNldmxhbl9pZCk7XFxuK1xcdH1cXG4gXFxuIFxcdGlmIChpbmV0X3B0b24oQUZfSU5FVDYsIHRlc3QtXFx1MDAzZWRhZGRyLCBwYXJhbXMtXFx1MDAzZWlwdjZfZHN0KSA9PSAxKSB7XFxuIFxcdFxcdHBhcmFtcy1cXHUwMDNlZmFtaWx5ID0gQUZfSU5FVDY7XFxuQEAgLTI5OCw3ICs2ODAsNyBAQCB2b2lkIHRlc3RfZmliX2xvb2t1cCh2b2lkKVxcbiBcXHRzdHJ1Y3QgbnN0b2tlbiAqbnN0b2tlbiA9IE5VTEw7XFxuIFxcdHN0cnVjdCBfX3NrX2J1ZmYgc2tiID0geyB9O1xcbiBcXHRzdHJ1Y3QgZmliX2xvb2t1cCAqc2tlbDtcXG4tXFx0aW50IHByb2dfZmQsIGVyciwgcmV0LCBpO1xcbitcXHRpbnQgcHJvZ19mZCwgeGRwX2ZkLCBlcnIsIHJldCwgaTtcXG4gXFxuIFxcdC8qIFRoZSB0ZXN0IGRvZXMgbm90IHVzZSB0aGUgc2tiLVxcdTAwM2VkYXRhLCBzb1xcbiBcXHQgKiB1c2UgcGt0X3Y2IGZvciBib3RoIHY2IGFuZCB2NCB0ZXN0LlxcbkBAIC0zMDksMTEgKzY5MSwxNiBAQCB2b2lkIHRlc3RfZmliX2xvb2t1cCh2b2lkKVxcbiBcXHRcXHQgICAgLmN0eF9pbiA9IFxcdTAwMjZza2IsXFxuIFxcdFxcdCAgICAuY3R4X3NpemVfaW4gPSBzaXplb2Yoc2tiKSxcXG4gXFx0KTtcXG4rXFx0TElCQlBGX09QVFMoYnBmX3Rlc3RfcnVuX29wdHMsIHhkcF9vcHRzLFxcbitcXHRcXHQgICAgLmRhdGFfaW4gPSBcXHUwMDI2cGt0X3Y2LFxcbitcXHRcXHQgICAgLmRhdGFfc2l6ZV9pbiA9IHNpemVvZihwa3RfdjYpLFxcbitcXHQpO1xcbiBcXG4gXFx0c2tlbCA9IGZpYl9sb29rdXBfX29wZW5fYW5kX2xvYWQoKTtcXG4gXFx0aWYgKCFBU1NFUlRfT0tfUFRSKHNrZWwsIFxcXCJza2VsIG9wZW5fYW5kX2xvYWRcXFwiKSlcXG4gXFx0XFx0cmV0dXJuO1xcbiBcXHRwcm9nX2ZkID0gYnBmX3Byb2dyYW1fX2ZkKHNrZWwtXFx1MDAzZXByb2dzLmZpYl9sb29rdXApO1xcbitcXHR4ZHBfZmQgPSBicGZfcHJvZ3JhbV9fZmQoc2tlbC1cXHUwMDNlcHJvZ3MuZmliX2xvb2t1cF94ZHApO1xcbiBcXG4gXFx0U1lTKGZhaWwsIFxcXCJpcCBuZXRucyBhZGQgJXNcXFwiLCBOU19URVNUKTtcXG4gXFxuQEAgLTM0Myw2ICs3MzAsMTUgQEAgdm9pZCB0ZXN0X2ZpYl9sb29rdXAodm9pZClcXG4gXFx0XFx0aWYgKCFBU1NFUlRfT0soZXJyLCBcXFwiYnBmX3Byb2dfdGVzdF9ydW5fb3B0c1xcXCIpKVxcbiBcXHRcXHRcXHRjb250aW51ZTtcXG4gXFxuK1xcdFxcdC8qIEJQRl9GSUJfTE9PS1VQX1ZMQU4gaXMgWERQLW9ubHk7IHRoZSB0YyBoZWxwZXIgcmVqZWN0cyBpdC5cXG4rXFx0XFx0ICogVGhlc2UgY2FzZXMgYXJlIGV4ZXJjaXNlZCBvbiB0aGUgWERQIHBhdGggYmVsb3cuXFxuK1xcdFxcdCAqL1xcbitcXHRcXHRpZiAodGVzdHNbaV0ubG9va3VwX2ZsYWdzIFxcdTAwMjYgQlBGX0ZJQl9MT09LVVBfVkxBTikge1xcbitcXHRcXHRcXHRBU1NFUlRfRVEoc2tlbC1cXHUwMDNlYnNzLVxcdTAwM2VmaWJfbG9va3VwX3JldCwgLUVJTlZBTCxcXG4rXFx0XFx0XFx0XFx0ICBcXFwidGMgcmVqZWN0cyBCUEZfRklCX0xPT0tVUF9WTEFOXFxcIik7XFxuK1xcdFxcdFxcdGNvbnRpbnVlO1xcbitcXHRcXHR9XFxuK1xcbiBcXHRcXHRBU1NFUlRfRVEoc2tlbC1cXHUwMDNlYnNzLVxcdTAwM2VmaWJfbG9va3VwX3JldCwgdGVzdHNbaV0uZXhwZWN0ZWRfcmV0LFxcbiBcXHRcXHRcXHQgIFxcXCJmaWJfbG9va3VwX3JldFxcXCIpO1xcbiBcXG5AQCAtMzUyLDYgKzc0OCwyMSBAQCB2b2lkIHRlc3RfZmliX2xvb2t1cCh2b2lkKVxcbiBcXHRcXHRpZiAodGVzdHNbaV0uZXhwZWN0ZWRfZHN0KVxcbiBcXHRcXHRcXHRhc3NlcnRfZHN0X2lwKGZpYl9wYXJhbXMsIHRlc3RzW2ldLmV4cGVjdGVkX2RzdCk7XFxuIFxcbitcXHRcXHRpZiAodGVzdHNbaV0uZXhwZWN0ZWRfZGV2KVxcbitcXHRcXHRcXHRBU1NFUlRfRVEoZmliX3BhcmFtcy1cXHUwMDNlaWZpbmRleCxcXG4rXFx0XFx0XFx0XFx0ICBpZl9uYW1ldG9pbmRleCh0ZXN0c1tpXS5leHBlY3RlZF9kZXYpLCBcXFwiaWZpbmRleFxcXCIpO1xcbitcXG4rXFx0XFx0aWYgKHRlc3RzW2ldLmV4cGVjdGVkX210dSlcXG4rXFx0XFx0XFx0QVNTRVJUX0VRKGZpYl9wYXJhbXMtXFx1MDAzZW10dV9yZXN1bHQsIHRlc3RzW2ldLmV4cGVjdGVkX210dSxcXG4rXFx0XFx0XFx0XFx0ICBcXFwibXR1X3Jlc3VsdFxcXCIpO1xcbitcXG4rXFx0XFx0aWYgKHRlc3RzW2ldLmNoZWNrX3ZsYW4pIHtcXG4rXFx0XFx0XFx0QVNTRVJUX0VRKGZpYl9wYXJhbXMtXFx1MDAzZWhfdmxhbl9wcm90byxcXG4rXFx0XFx0XFx0XFx0ICBodG9ucyh0ZXN0c1tpXS52bGFuX3Byb3RvKSwgXFxcImhfdmxhbl9wcm90b1xcXCIpO1xcbitcXHRcXHRcXHRBU1NFUlRfRVEoZmliX3BhcmFtcy1cXHUwMDNlaF92bGFuX1RDSSxcXG4rXFx0XFx0XFx0XFx0ICBodG9ucyh0ZXN0c1tpXS52bGFuX2lkKSwgXFxcImhfdmxhbl9UQ0lcXFwiKTtcXG4rXFx0XFx0fVxcbitcXG4gXFx0XFx0cmV0ID0gbWVtY21wKHRlc3RzW2ldLmRtYWMsIGZpYl9wYXJhbXMtXFx1MDAzZWRtYWMsIHNpemVvZih0ZXN0c1tpXS5kbWFjKSk7XFxuIFxcdFxcdGlmICghQVNTRVJUX0VRKHJldCwgMCwgXFxcImRtYWMgbm90IG1hdGNoXFxcIikpIHtcXG4gXFx0XFx0XFx0Y2hhciBleHBlY3RlZFsxOF0sIGFjdHVhbFsxOF07XFxuQEAgLTM2MSwxNSArNzcyLDMxMyBAQCB2b2lkIHRlc3RfZmliX2xvb2t1cCh2b2lkKVxcbiBcXHRcXHRcXHRwcmludGYoXFxcImRtYWMgZXhwZWN0ZWQgJXMgYWN0dWFsICVzIFxcXCIsIGV4cGVjdGVkLCBhY3R1YWwpO1xcbiBcXHRcXHR9XFxuIFxcbi1cXHRcXHQvLyBlbnN1cmUgdGJpZCBpcyB6ZXJvJ2Qgb3V0IGFmdGVyIGZpYiBsb29rdXAuXFxuLVxcdFxcdGlmICh0ZXN0c1tpXS5sb29rdXBfZmxhZ3MgXFx1MDAyNiBCUEZfRklCX0xPT0tVUF9ESVJFQ1QpIHtcXG4rXFx0XFx0LypcXG4rXFx0XFx0ICogZW5zdXJlIHRiaWQgaXMgemVybydkIG91dCBhZnRlciBmaWIgbG9va3VwLiBXaXRoXFxuK1xcdFxcdCAqIEJQRl9GSUJfTE9PS1VQX1ZMQU4gdGhlIHVuaW9uIGhvbGRzIHRoZSBwYWNrZWQgdmxhblxcbitcXHRcXHQgKiBmaWVsZHMgaW5zdGVhZCwgc28gc2tpcCB0aGUgY2hlY2sgZm9yIHRob3NlLlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0aWYgKCh0ZXN0c1tpXS5sb29rdXBfZmxhZ3MgXFx1MDAyNiBCUEZfRklCX0xPT0tVUF9ESVJFQ1QpIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdCAgICAhKHRlc3RzW2ldLmxvb2t1cF9mbGFncyBcXHUwMDI2IEJQRl9GSUJfTE9PS1VQX1ZMQU4pKSB7XFxuIFxcdFxcdFxcdGlmICghQVNTRVJUX0VRKHNrZWwtXFx1MDAzZWJzcy1cXHUwMDNlZmliX3BhcmFtcy50YmlkLCAwLFxcbiBcXHRcXHRcXHRcXHRcXHRcXFwiZXhwZWN0ZWQgZmliX3BhcmFtcy50YmlkIHRvIGJlIHplcm9cXFwiKSlcXG4gXFx0XFx0XFx0XFx0Z290byBmYWlsO1xcbiBcXHRcXHR9XFxuIFxcdH1cXG4gXFxuK1xcdC8qXFxuK1xcdCAqIFJlLXJ1biB0aGUgY2FzZXMgdGhyb3VnaCBicGZfeGRwX2ZpYl9sb29rdXAoKS4gdGVzdF9ydW4gdXNlcyB0aGVcXG4rXFx0ICogY3VycmVudCBuZXRucycgbG9vcGJhY2sgZm9yIGN0eC1cXHUwMDNlcnhxLVxcdTAwM2VkZXYsIHNvIGRldl9uZXQoKSBpcyBOU19URVNUXFxuK1xcdCAqIGFuZCB0aGUgbG9va3VwIHJ1bnMgYWdhaW5zdCBpdHMgRklCLiBUaGUgcGF0aC1pbmRlcGVuZGVudCByZXN1bHRzXFxuK1xcdCAqIChyZXR1cm4gY29kZSwgc3dhcHBlZCBpZmluZGV4LCB2bGFuIHRhZywgZ2F0ZXdheSkgbXVzdCBtYXRjaCB0aGUgc2tiXFxuK1xcdCAqIHBhdGg7IHRoZSBuby10b3RfbGVuIG10dV9yZXN1bHQgaXMgc2tiLXNwZWNpZmljIGFuZCBub3QgcmVjaGVja2VkLlxcbitcXHQgKi9cXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIEFSUkFZX1NJWkUodGVzdHMpOyBpKyspIHtcXG4rXFx0XFx0aWYgKHNldF9sb29rdXBfcGFyYW1zKGZpYl9wYXJhbXMsIFxcdTAwMjZ0ZXN0c1tpXSwgc2tiLmlmaW5kZXgpKVxcbitcXHRcXHRcXHRjb250aW51ZTtcXG4rXFxuK1xcdFxcdHNrZWwtXFx1MDAzZWJzcy1cXHUwMDNlZmliX2xvb2t1cF9yZXQgPSAtMTtcXG4rXFx0XFx0c2tlbC1cXHUwMDNlYnNzLVxcdTAwM2Vsb29rdXBfZmxhZ3MgPSB0ZXN0c1tpXS5sb29rdXBfZmxhZ3M7XFxuK1xcbitcXHRcXHRlcnIgPSBicGZfcHJvZ190ZXN0X3J1bl9vcHRzKHhkcF9mZCwgXFx1MDAyNnhkcF9vcHRzKTtcXG4rXFx0XFx0aWYgKCFBU1NFUlRfT0soZXJyLCBcXFwieGRwIHRlc3RfcnVuXFxcIikpXFxuK1xcdFxcdFxcdGNvbnRpbnVlO1xcbitcXG4rXFx0XFx0aWYgKCFBU1NFUlRfRVEoc2tlbC1cXHUwMDNlYnNzLVxcdTAwM2VmaWJfbG9va3VwX3JldCwgdGVzdHNbaV0uZXhwZWN0ZWRfcmV0LFxcbitcXHRcXHRcXHQgICAgICAgXFxcInhkcCBmaWJfbG9va3VwX3JldFxcXCIpKVxcbitcXHRcXHRcXHRwcmludGYoXFxcIih4ZHApICVzXFxcXG5cXFwiLCB0ZXN0c1tpXS5kZXNjKTtcXG4rXFxuK1xcdFxcdGlmICh0ZXN0c1tpXS5leHBlY3RlZF9kZXYpXFxuK1xcdFxcdFxcdEFTU0VSVF9FUShmaWJfcGFyYW1zLVxcdTAwM2VpZmluZGV4LFxcbitcXHRcXHRcXHRcXHQgIGlmX25hbWV0b2luZGV4KHRlc3RzW2ldLmV4cGVjdGVkX2RldiksXFxuK1xcdFxcdFxcdFxcdCAgXFxcInhkcCBpZmluZGV4XFxcIik7XFxuK1xcbitcXHRcXHRpZiAodGVzdHNbaV0uZXhwZWN0ZWRfZHN0KVxcbitcXHRcXHRcXHRhc3NlcnRfZHN0X2lwKGZpYl9wYXJhbXMsIHRlc3RzW2ldLmV4cGVjdGVkX2RzdCk7XFxuK1xcbitcXHRcXHRpZiAodGVzdHNbaV0uY2hlY2tfdmxhbikge1xcbitcXHRcXHRcXHRBU1NFUlRfRVEoZmliX3BhcmFtcy1cXHUwMDNlaF92bGFuX3Byb3RvLFxcbitcXHRcXHRcXHRcXHQgIGh0b25zKHRlc3RzW2ldLnZsYW5fcHJvdG8pLCBcXFwieGRwIGhfdmxhbl9wcm90b1xcXCIpO1xcbitcXHRcXHRcXHRBU1NFUlRfRVEoZmliX3BhcmFtcy1cXHUwMDNlaF92bGFuX1RDSSxcXG4rXFx0XFx0XFx0XFx0ICBodG9ucyh0ZXN0c1tpXS52bGFuX2lkKSwgXFxcInhkcCBoX3ZsYW5fVENJXFxcIik7XFxuK1xcdFxcdH1cXG4rXFxuK1xcdFxcdHJldCA9IG1lbWNtcCh0ZXN0c1tpXS5kbWFjLCBmaWJfcGFyYW1zLVxcdTAwM2VkbWFjLCBzaXplb2YodGVzdHNbaV0uZG1hYykpO1xcbitcXHRcXHRBU1NFUlRfRVEocmV0LCAwLCBcXFwieGRwIGRtYWNcXFwiKTtcXG4rXFxuK1xcdFxcdC8qXFxuK1xcdFxcdCAqIG10dV9yZXN1bHQgZnJvbSBhIHRvdF9sZW4gbG9va3VwIGlzIHRoZSByb3V0ZSBtdHUgYW5kIGlzXFxuK1xcdFxcdCAqIHBhdGgtaW5kZXBlbmRlbnQ7IHRoZSBuby10b3RfbGVuIGFybSByZWFkcyBkZXYtXFx1MDAzZW10dSBhbmQgaXNcXG4rXFx0XFx0ICogc2tiLW9ubHksIHNvIGdhdGUgb24gdG90X2xlblxcbitcXHRcXHQgKi9cXG4rXFx0XFx0aWYgKHRlc3RzW2ldLmV4cGVjdGVkX210dSBcXHUwMDI2XFx1MDAyNiB0ZXN0c1tpXS50b3RfbGVuKVxcbitcXHRcXHRcXHRBU1NFUlRfRVEoZmliX3BhcmFtcy1cXHUwMDNlbXR1X3Jlc3VsdCwgdGVzdHNbaV0uZXhwZWN0ZWRfbXR1LFxcbitcXHRcXHRcXHRcXHQgIFxcXCJ4ZHAgbXR1X3Jlc3VsdFxcXCIpO1xcbitcXHR9XFxuK1xcbitmYWlsOlxcbitcXHRpZiAobnN0b2tlbilcXG4rXFx0XFx0Y2xvc2VfbmV0bnMobnN0b2tlbik7XFxuK1xcdFNZU19OT0ZBSUwoXFxcImlwIG5ldG5zIGRlbCBcXFwiIE5TX1RFU1QpO1xcbitcXHRmaWJfbG9va3VwX19kZXN0cm95KHNrZWwpO1xcbit9XFxuK1xcbisjZGVmaW5lIE5TX1ZMQU5fQVxcdFxcXCJmaWJfbG9va3VwX3ZsYW5fbnNfYVxcXCJcXG4rI2RlZmluZSBOU19WTEFOX0JcXHRcXFwiZmliX2xvb2t1cF92bGFuX25zX2JcXFwiXFxuK1xcbisvKlxcbisgKiBBIFZMQU4gZGV2aWNlIGNhbiBiZSBtb3ZlZCB0byBhbm90aGVyIG5ldG5zIHdoaWxlIHN0YXlpbmcgcmVnaXN0ZXJlZFxcbisgKiBvbiBpdHMgcGFyZW50LiBOZWl0aGVyIGRpcmVjdGlvbiBtYXkgdGhlbiBjcm9zcyB0aGUgYm91bmRhcnk6IHRoZVxcbisgKiBlZ3Jlc3MgZmxhZyBtdXN0IG5vdCBwdWJsaXNoIHRoZSBmb3JlaWduIHBhcmVudCdzIGlmaW5kZXgsIGFuZCB0aGVcXG4rICogaW5wdXQgZmxhZyBtdXN0IGZhaWwgY2xvc2VkIHJhdGhlciB0aGFuIHVzZSBhIGZvcmVpZ24gaW5ncmVzcy5cXG4rICovXFxuK3ZvaWQgdGVzdF9maWJfbG9va3VwX3ZsYW5fbmV0bnModm9pZClcXG4re1xcbitcXHRzdHJ1Y3QgYnBmX2ZpYl9sb29rdXAgKmZpYl9wYXJhbXM7XFxuK1xcdHN0cnVjdCBuc3Rva2VuICpuc3Rva2VuID0gTlVMTDtcXG4rXFx0c3RydWN0IF9fc2tfYnVmZiBza2IgPSB7IH07XFxuK1xcdHN0cnVjdCBmaWJfbG9va3VwICpza2VsID0gTlVMTDtcXG4rXFx0aW50IHByb2dfZmQsIHhkcF9mZCwgZXJyLCBwYXJlbnRfaWR4LCB2bGFuX2lkeDtcXG4rXFxuK1xcdExJQkJQRl9PUFRTKGJwZl90ZXN0X3J1bl9vcHRzLCBydW5fb3B0cyxcXG4rXFx0XFx0ICAgIC5kYXRhX2luID0gXFx1MDAyNnBrdF92NixcXG4rXFx0XFx0ICAgIC5kYXRhX3NpemVfaW4gPSBzaXplb2YocGt0X3Y2KSxcXG4rXFx0XFx0ICAgIC5jdHhfaW4gPSBcXHUwMDI2c2tiLFxcbitcXHRcXHQgICAgLmN0eF9zaXplX2luID0gc2l6ZW9mKHNrYiksXFxuK1xcdCk7XFxuK1xcdExJQkJQRl9PUFRTKGJwZl90ZXN0X3J1bl9vcHRzLCB4ZHBfb3B0cyxcXG4rXFx0XFx0ICAgIC5kYXRhX2luID0gXFx1MDAyNnBrdF92NixcXG4rXFx0XFx0ICAgIC5kYXRhX3NpemVfaW4gPSBzaXplb2YocGt0X3Y2KSxcXG4rXFx0KTtcXG4rXFxuK1xcdHNrZWwgPSBmaWJfbG9va3VwX19vcGVuX2FuZF9sb2FkKCk7XFxuK1xcdGlmICghQVNTRVJUX09LX1BUUihza2VsLCBcXFwic2tlbCBvcGVuX2FuZF9sb2FkXFxcIikpXFxuK1xcdFxcdHJldHVybjtcXG4rXFx0cHJvZ19mZCA9IGJwZl9wcm9ncmFtX19mZChza2VsLVxcdTAwM2Vwcm9ncy5maWJfbG9va3VwKTtcXG4rXFx0eGRwX2ZkID0gYnBmX3Byb2dyYW1fX2ZkKHNrZWwtXFx1MDAzZXByb2dzLmZpYl9sb29rdXBfeGRwKTtcXG4rXFx0ZmliX3BhcmFtcyA9IFxcdTAwMjZza2VsLVxcdTAwM2Vic3MtXFx1MDAzZWZpYl9wYXJhbXM7XFxuK1xcbitcXHRTWVMoZmFpbCwgXFxcImlwIG5ldG5zIGFkZCAlc1xcXCIsIE5TX1ZMQU5fQSk7XFxuK1xcdFNZUyhmYWlsLCBcXFwiaXAgbmV0bnMgYWRkICVzXFxcIiwgTlNfVkxBTl9CKTtcXG4rXFxuK1xcdG5zdG9rZW4gPSBvcGVuX25ldG5zKE5TX1ZMQU5fQSk7XFxuK1xcdGlmICghQVNTRVJUX09LX1BUUihuc3Rva2VuLCBcXFwib3Blbl9uZXRucyhhKVxcXCIpKVxcbitcXHRcXHRnb3RvIGZhaWw7XFxuK1xcbitcXHRTWVMoZmFpbCwgXFxcImlwIGxpbmsgYWRkIHZldGg3IHR5cGUgdmV0aCBwZWVyIG5hbWUgdmV0aDhcXFwiKTtcXG4rXFx0U1lTKGZhaWwsIFxcXCJpcCBsaW5rIHNldCBkZXYgdmV0aDcgdXBcXFwiKTtcXG4rXFx0U1lTKGZhaWwsIFxcXCJpcCBsaW5rIGFkZCBsaW5rIHZldGg3IG5hbWUgdmV0aDcuNjYgdHlwZSB2bGFuIGlkIDY2XFxcIik7XFxuK1xcdFNZUyhmYWlsLCBcXFwiaXAgbGluayBzZXQgdmV0aDcuNjYgbmV0bnMgJXNcXFwiLCBOU19WTEFOX0IpO1xcbitcXG4rXFx0cGFyZW50X2lkeCA9IGlmX25hbWV0b2luZGV4KFxcXCJ2ZXRoN1xcXCIpO1xcbitcXHRpZiAoIUFTU0VSVF9ORVEocGFyZW50X2lkeCwgMCwgXFxcImlmX25hbWV0b2luZGV4KHZldGg3KVxcXCIpKVxcbitcXHRcXHRnb3RvIGZhaWw7XFxuK1xcbitcXHQvKlxcbitcXHQgKiBpbnB1dDogdGhlIG1vdmVkIGRldmljZSBpcyBzdGlsbCBpbiB2ZXRoNydzIFZMQU4gZ3JvdXAsIGJ1dCBpdFxcbitcXHQgKiBsaXZlcyBpbiBhbm90aGVyIG5ldG5zLCBzbyB0aGUgbG9va3VwIG11c3QgZmFpbCBjbG9zZWRcXG4rXFx0ICovXFxuK1xcdHNrYi5pZmluZGV4ID0gcGFyZW50X2lkeDtcXG4rXFx0bWVtc2V0KGZpYl9wYXJhbXMsIDAsIHNpemVvZigqZmliX3BhcmFtcykpO1xcbitcXHRmaWJfcGFyYW1zLVxcdTAwM2VmYW1pbHkgPSBBRl9JTkVUO1xcbitcXHRmaWJfcGFyYW1zLVxcdTAwM2VsNF9wcm90b2NvbCA9IElQUFJPVE9fVENQO1xcbitcXHRmaWJfcGFyYW1zLVxcdTAwM2VpZmluZGV4ID0gcGFyZW50X2lkeDtcXG4rXFx0ZmliX3BhcmFtcy1cXHUwMDNlaF92bGFuX3Byb3RvID0gaHRvbnMoRVRIX1BfODAyMVEpO1xcbitcXHRmaWJfcGFyYW1zLVxcdTAwM2VoX3ZsYW5fVENJID0gaHRvbnMoNjYpO1xcbitcXHRpZiAoIUFTU0VSVF9FUShpbmV0X3B0b24oQUZfSU5FVCwgXFxcIjEwLjY2LjAuMlxcXCIsIFxcdTAwMjZmaWJfcGFyYW1zLVxcdTAwM2VpcHY0X2RzdCksXFxuK1xcdFxcdCAgICAgICAxLCBcXFwiaW5ldF9wdG9uKGRzdClcXFwiKSlcXG4rXFx0XFx0Z290byBmYWlsO1xcbitcXG4rXFx0c2tlbC1cXHUwMDNlYnNzLVxcdTAwM2VmaWJfbG9va3VwX3JldCA9IC0xO1xcbitcXHRza2VsLVxcdTAwM2Vic3MtXFx1MDAzZWxvb2t1cF9mbGFncyA9IEJQRl9GSUJfTE9PS1VQX1ZMQU5fSU5QVVQgfFxcbitcXHRcXHRcXHRcXHQgIEJQRl9GSUJfTE9PS1VQX1NLSVBfTkVJR0g7XFxuK1xcdGVyciA9IGJwZl9wcm9nX3Rlc3RfcnVuX29wdHMocHJvZ19mZCwgXFx1MDAyNnJ1bl9vcHRzKTtcXG4rXFx0aWYgKCFBU1NFUlRfT0soZXJyLCBcXFwidGVzdF9ydW4oaW5wdXQpXFxcIikpXFxuK1xcdFxcdGdvdG8gZmFpbDtcXG4rXFx0QVNTRVJUX0VRKHNrZWwtXFx1MDAzZWJzcy1cXHUwMDNlZmliX2xvb2t1cF9yZXQsIEJQRl9GSUJfTEtVUF9SRVRfTk9UX0ZXREVELFxcbitcXHRcXHQgIFxcXCJpbnB1dCBhY3Jvc3MgbmV0bnMgZmFpbHMgY2xvc2VkXFxcIik7XFxuK1xcdEFTU0VSVF9FUShmaWJfcGFyYW1zLVxcdTAwM2VpZmluZGV4LCBwYXJlbnRfaWR4LCBcXFwiaWZpbmRleCB1bnRvdWNoZWRcXFwiKTtcXG4rXFx0QVNTRVJUX0VRKGZpYl9wYXJhbXMtXFx1MDAzZWhfdmxhbl9UQ0ksIGh0b25zKDY2KSwgXFxcInRhZyB1bnRvdWNoZWRcXFwiKTtcXG4rXFxuK1xcdGNsb3NlX25ldG5zKG5zdG9rZW4pO1xcbitcXHRuc3Rva2VuID0gb3Blbl9uZXRucyhOU19WTEFOX0IpO1xcbitcXHRpZiAoIUFTU0VSVF9PS19QVFIobnN0b2tlbiwgXFxcIm9wZW5fbmV0bnMoYilcXFwiKSlcXG4rXFx0XFx0Z290byBmYWlsO1xcbitcXG4rXFx0LypcXG4rXFx0ICogZWdyZXNzOiB0aGUgZmliIHJlc3VsdCBpcyB0aGUgVkxBTiBkZXZpY2UgaGVyZSwgYnV0IGl0cyBwYXJlbnRcXG4rXFx0ICogaXMgaW4gdGhlIG90aGVyIG5ldG5zLCBzbyB0aGUgc3dhcCBtdXN0IG5vdCBoYXBwZW5cXG4rXFx0ICovXFxuK1xcdFNZUyhmYWlsLCBcXFwiaXAgbGluayBzZXQgZGV2IHZldGg3LjY2IHVwXFxcIik7XFxuK1xcdFNZUyhmYWlsLCBcXFwiaXAgYWRkciBhZGQgMTAuNjYuMC4xLzI0IGRldiB2ZXRoNy42NlxcXCIpO1xcbitcXHRlcnIgPSB3cml0ZV9zeXNjdGwoXFxcIi9wcm9jL3N5cy9uZXQvaXB2NC9jb25mL3ZldGg3LjY2L2ZvcndhcmRpbmdcXFwiLCBcXFwiMVxcXCIpO1xcbitcXHRpZiAoIUFTU0VSVF9PSyhlcnIsIFxcXCJ3cml0ZV9zeXNjdGwoZm9yd2FyZGluZylcXFwiKSlcXG4rXFx0XFx0Z290byBmYWlsO1xcbitcXG4rXFx0dmxhbl9pZHggPSBpZl9uYW1ldG9pbmRleChcXFwidmV0aDcuNjZcXFwiKTtcXG4rXFx0aWYgKCFBU1NFUlRfTkVRKHZsYW5faWR4LCAwLCBcXFwiaWZfbmFtZXRvaW5kZXgodmV0aDcuNjYpXFxcIikpXFxuK1xcdFxcdGdvdG8gZmFpbDtcXG4rXFxuK1xcdHNrYi5pZmluZGV4ID0gdmxhbl9pZHg7XFxuK1xcdG1lbXNldChmaWJfcGFyYW1zLCAwLCBzaXplb2YoKmZpYl9wYXJhbXMpKTtcXG4rXFx0ZmliX3BhcmFtcy1cXHUwMDNlZmFtaWx5ID0gQUZfSU5FVDtcXG4rXFx0ZmliX3BhcmFtcy1cXHUwMDNlbDRfcHJvdG9jb2wgPSBJUFBST1RPX1RDUDtcXG4rXFx0ZmliX3BhcmFtcy1cXHUwMDNlaWZpbmRleCA9IHZsYW5faWR4O1xcbitcXHRpZiAoIUFTU0VSVF9FUShpbmV0X3B0b24oQUZfSU5FVCwgXFxcIjEwLjY2LjAuMlxcXCIsIFxcdTAwMjZmaWJfcGFyYW1zLVxcdTAwM2VpcHY0X2RzdCksXFxuK1xcdFxcdCAgICAgICAxLCBcXFwiaW5ldF9wdG9uKGRzdClcXFwiKSB8fFxcbitcXHQgICAgIUFTU0VSVF9FUShpbmV0X3B0b24oQUZfSU5FVCwgXFxcIjEwLjY2LjAuMVxcXCIsIFxcdTAwMjZmaWJfcGFyYW1zLVxcdTAwM2VpcHY0X3NyYyksXFxuK1xcdFxcdCAgICAgICAxLCBcXFwiaW5ldF9wdG9uKHNyYylcXFwiKSlcXG4rXFx0XFx0Z290byBmYWlsO1xcbitcXG4rXFx0c2tlbC1cXHUwMDNlYnNzLVxcdTAwM2VmaWJfbG9va3VwX3JldCA9IC0xO1xcbitcXHRza2VsLVxcdTAwM2Vic3MtXFx1MDAzZWxvb2t1cF9mbGFncyA9IEJQRl9GSUJfTE9PS1VQX1ZMQU4gfFxcbitcXHRcXHRcXHRcXHQgIEJQRl9GSUJfTE9PS1VQX1NLSVBfTkVJR0g7XFxuK1xcdGVyciA9IGJwZl9wcm9nX3Rlc3RfcnVuX29wdHMoeGRwX2ZkLCBcXHUwMDI2eGRwX29wdHMpO1xcbitcXHRpZiAoIUFTU0VSVF9PSyhlcnIsIFxcXCJ0ZXN0X3J1bihlZ3Jlc3MpXFxcIikpXFxuK1xcdFxcdGdvdG8gZmFpbDtcXG4rXFx0QVNTRVJUX0VRKHNrZWwtXFx1MDAzZWJzcy1cXHUwMDNlZmliX2xvb2t1cF9yZXQsIEJQRl9GSUJfTEtVUF9SRVRfVkxBTl9GQUlMVVJFLFxcbitcXHRcXHQgIFxcXCJlZ3Jlc3MgcmV0dXJucyBWTEFOX0ZBSUxVUkVcXFwiKTtcXG4rXFx0QVNTRVJUX0VRKGZpYl9wYXJhbXMtXFx1MDAzZWlmaW5kZXgsIHZsYW5faWR4LFxcbitcXHRcXHQgIFxcXCJmb3JlaWduIHBhcmVudCBub3QgcHVibGlzaGVkXFxcIik7XFxuK1xcdEFTU0VSVF9FUShmaWJfcGFyYW1zLVxcdTAwM2VoX3ZsYW5fVENJLCAwLCBcXFwidmxhbiBmaWVsZHMgemVyb1xcXCIpO1xcbitcXG4rZmFpbDpcXG4rXFx0aWYgKG5zdG9rZW4pXFxuK1xcdFxcdGNsb3NlX25ldG5zKG5zdG9rZW4pO1xcbitcXHRTWVNfTk9GQUlMKFxcXCJpcCBuZXRucyBkZWwgXFxcIiBOU19WTEFOX0EpO1xcbitcXHRTWVNfTk9GQUlMKFxcXCJpcCBuZXRucyBkZWwgXFxcIiBOU19WTEFOX0IpO1xcbitcXHRmaWJfbG9va3VwX19kZXN0cm95KHNrZWwpO1xcbit9XFxuK1xcbisjZGVmaW5lIFJFRElSRUNUX05QS1RTIDEwMDBcXG4rXFxuKy8qXFxuKyAqIFRoZSBlZ3Jlc3MgZmxhZyBleGlzdHMgc28gYW4gWERQIHByb2dyYW0gY2FuIHJlZGlyZWN0IHRvIHRoZSBwaHlzaWNhbFxcbisgKiBwYXJlbnQuIEEgcmVkaXJlY3QgdGhhdCBsYW5kcyBvbiBhIFZMQU4gZGV2aWNlIGlzIGRyb3BwZWQgYXRcXG4rICogeGRwX2RvX2ZsdXNoKCksIGJlY2F1c2UgYSBWTEFOIGRldmljZSBoYXMgbm8gbmRvX3hkcF94bWl0LiBEcml2ZSByZWFsXFxuKyAqIGZyYW1lcyB3aXRoIEJQRl9GX1RFU1RfWERQX0xJVkVfRlJBTUVTLCB3aGljaCBydW5zIHRoZSBuYXRpdmVcXG4rICogeGRwX2RvX3JlZGlyZWN0KCkgKyB4ZHBfZG9fZmx1c2goKSBwYXRoOiBhIHJlZHVjaWJsZSBWTEFOIGVncmVzc1xcbisgKiByZXNvbHZlcyB0byB2ZXRoMSBhbmQgaXMgZGVsaXZlcmVkIHRvIGl0cyBwZWVyIHZldGgyLCB3aGlsZSBhIFFpblFcXG4rICogZWdyZXNzIHJldHVybnMgVkxBTl9GQUlMVVJFIGFuZCBpcyBwYXNzZWQgdG8gdGhlIHN0YWNrIGluc3RlYWQgb2ZcXG4rICogcmVkaXJlY3RlZCB0byBhIGRldmljZSB0aGF0IHdvdWxkIHNpbGVudGx5IGRyb3AgaXQuXFxuKyAqL1xcbit2b2lkIHRlc3RfZmliX2xvb2t1cF92bGFuX3JlZGlyZWN0KHZvaWQpXFxuK3tcXG4rXFx0aW50IHJlZGlyZWN0X2ZkLCBlcnIsIHZldGgxX2lkeCwgdmV0aDJfaWR4ID0gLTE7XFxuK1xcdHN0cnVjdCBicGZfZmliX2xvb2t1cCAqZmliX3BhcmFtcztcXG4rXFx0c3RydWN0IG5zdG9rZW4gKm5zdG9rZW4gPSBOVUxMO1xcbitcXHRzdHJ1Y3QgZmliX2xvb2t1cCAqc2tlbCA9IE5VTEw7XFxuK1xcdGJvb2wgeGRwX2F0dGFjaGVkID0gZmFsc2U7XFxuK1xcbitcXHRMSUJCUEZfT1BUUyhicGZfdGVzdF9ydW5fb3B0cywgbGZfb3B0cyxcXG4rXFx0XFx0ICAgIC5kYXRhX2luID0gXFx1MDAyNnBrdF92NCxcXG4rXFx0XFx0ICAgIC5kYXRhX3NpemVfaW4gPSBzaXplb2YocGt0X3Y0KSxcXG4rXFx0XFx0ICAgIC5mbGFncyA9IEJQRl9GX1RFU1RfWERQX0xJVkVfRlJBTUVTLFxcbitcXHRcXHQgICAgLnJlcGVhdCA9IFJFRElSRUNUX05QS1RTLFxcbitcXHQpO1xcbitcXG4rXFx0c2tlbCA9IGZpYl9sb29rdXBfX29wZW5fYW5kX2xvYWQoKTtcXG4rXFx0aWYgKCFBU1NFUlRfT0tfUFRSKHNrZWwsIFxcXCJza2VsIG9wZW5fYW5kX2xvYWRcXFwiKSlcXG4rXFx0XFx0cmV0dXJuO1xcbitcXHRyZWRpcmVjdF9mZCA9IGJwZl9wcm9ncmFtX19mZChza2VsLVxcdTAwM2Vwcm9ncy5maWJfbG9va3VwX3JlZGlyZWN0KTtcXG4rXFx0ZmliX3BhcmFtcyA9IFxcdTAwMjZza2VsLVxcdTAwM2Vic3MtXFx1MDAzZWZpYl9wYXJhbXM7XFxuK1xcbitcXHRTWVMoZmFpbCwgXFxcImlwIG5ldG5zIGFkZCAlc1xcXCIsIE5TX1RFU1QpO1xcbitcXHRuc3Rva2VuID0gb3Blbl9uZXRucyhOU19URVNUKTtcXG4rXFx0aWYgKCFBU1NFUlRfT0tfUFRSKG5zdG9rZW4sIFxcXCJvcGVuX25ldG5zXFxcIikpXFxuK1xcdFxcdGdvdG8gZmFpbDtcXG4rXFx0aWYgKHNldHVwX25ldG5zKCkpXFxuK1xcdFxcdGdvdG8gZmFpbDtcXG4rXFxuK1xcdHZldGgxX2lkeCA9IGlmX25hbWV0b2luZGV4KFxcXCJ2ZXRoMVxcXCIpO1xcbitcXHR2ZXRoMl9pZHggPSBpZl9uYW1ldG9pbmRleChcXFwidmV0aDJcXFwiKTtcXG4rXFx0aWYgKCFBU1NFUlRfTkVRKHZldGgxX2lkeCwgMCwgXFxcImlmX25hbWV0b2luZGV4KHZldGgxKVxcXCIpIHx8XFxuK1xcdCAgICAhQVNTRVJUX05FUSh2ZXRoMl9pZHgsIDAsIFxcXCJpZl9uYW1ldG9pbmRleCh2ZXRoMilcXFwiKSlcXG4rXFx0XFx0Z290byBmYWlsO1xcbitcXG4rXFx0LypcXG4rXFx0ICogQSByZWRpcmVjdCB0byB2ZXRoMSBpcyBkZWxpdmVyZWQgdG8gaXRzIHBlZXIgdmV0aDIuIHZldGhfeGRwX3htaXQoKVxcbitcXHQgKiBvbmx5IGFjY2VwdHMgdGhlIGZyYW1lIGlmIHZldGgyJ3MgTkFQSSBpcyB1cCwgd2hpY2ggb24gdmV0aCBtZWFuc1xcbitcXHQgKiB2ZXRoMiBjYXJyaWVzIGFuIFhEUCBwcm9ncmFtOyB4ZHBfY291bnQgdGFsbGllcyB3aGF0IGFycml2ZXMuXFxuK1xcdCAqL1xcbitcXHRlcnIgPSBicGZfeGRwX2F0dGFjaCh2ZXRoMl9pZHgsIGJwZl9wcm9ncmFtX19mZChza2VsLVxcdTAwM2Vwcm9ncy54ZHBfY291bnQpLFxcbitcXHRcXHRcXHQgICAgIFhEUF9GTEFHU19EUlZfTU9ERSwgTlVMTCk7XFxuK1xcdGlmICghQVNTRVJUX09LKGVyciwgXFxcImF0dGFjaCB4ZHBfY291bnQgb24gdmV0aDJcXFwiKSlcXG4rXFx0XFx0Z290byBmYWlsO1xcbitcXHR4ZHBfYXR0YWNoZWQgPSB0cnVlO1xcbitcXG4rXFx0LyogcmVkdWNpYmxlIFZMQU4gZWdyZXNzOiByZXNvbHZlcyB0byB0aGUgcGh5c2ljYWwgcGFyZW50IHZldGgxICovXFxuK1xcdG1lbXNldChmaWJfcGFyYW1zLCAwLCBzaXplb2YoKmZpYl9wYXJhbXMpKTtcXG4rXFx0ZmliX3BhcmFtcy1cXHUwMDNlZmFtaWx5ID0gQUZfSU5FVDtcXG4rXFx0ZmliX3BhcmFtcy1cXHUwMDNlbDRfcHJvdG9jb2wgPSBJUFBST1RPX1RDUDtcXG4rXFx0ZmliX3BhcmFtcy1cXHUwMDNlaWZpbmRleCA9IHZldGgxX2lkeDtcXG4rXFx0aWYgKCFBU1NFUlRfRVEoaW5ldF9wdG9uKEFGX0lORVQsIElQVjRfSUZBQ0VfQUREUiwgXFx1MDAyNmZpYl9wYXJhbXMtXFx1MDAzZWlwdjRfc3JjKSxcXG4rXFx0XFx0ICAgICAgIDEsIFxcXCJpbmV0X3B0b24oc3JjKVxcXCIpIHx8XFxuK1xcdCAgICAhQVNTRVJUX0VRKGluZXRfcHRvbihBRl9JTkVULCBJUFY0X1ZMQU5fRUdSRVNTX0RTVCwgXFx1MDAyNmZpYl9wYXJhbXMtXFx1MDAzZWlwdjRfZHN0KSxcXG4rXFx0XFx0ICAgICAgIDEsIFxcXCJpbmV0X3B0b24ocmVkdWNpYmxlIGRzdClcXFwiKSlcXG4rXFx0XFx0Z290byBmYWlsO1xcbitcXHRza2VsLVxcdTAwM2Vic3MtXFx1MDAzZWxvb2t1cF9mbGFncyA9IEJQRl9GSUJfTE9PS1VQX1ZMQU4gfCBCUEZfRklCX0xPT0tVUF9TS0lQX05FSUdIO1xcbitcXHRza2VsLVxcdTAwM2Vic3MtXFx1MDAzZXJlZGlyZWN0ZWQgPSAwO1xcbitcXHRza2VsLVxcdTAwM2Vic3MtXFx1MDAzZXBhc3NlZCA9IDA7XFxuK1xcdHNrZWwtXFx1MDAzZWJzcy1cXHUwMDNlZGVsaXZlcmVkID0gMDtcXG4rXFxuK1xcdGVyciA9IGJwZl9wcm9nX3Rlc3RfcnVuX29wdHMocmVkaXJlY3RfZmQsIFxcdTAwMjZsZl9vcHRzKTtcXG4rXFx0aWYgKCFBU1NFUlRfT0soZXJyLCBcXFwidGVzdF9ydW4ocmVkdWNpYmxlIGVncmVzcylcXFwiKSlcXG4rXFx0XFx0Z290byBmYWlsO1xcbitcXHRBU1NFUlRfRVEoc2tlbC1cXHUwMDNlYnNzLVxcdTAwM2VyZWRpcmVjdGVkLCBSRURJUkVDVF9OUEtUUywgXFxcInJlZHVjaWJsZSBlZ3Jlc3MgcmVkaXJlY3RlZFxcXCIpO1xcbitcXHRBU1NFUlRfRVEoc2tlbC1cXHUwMDNlYnNzLVxcdTAwM2VwYXNzZWQsIDAsIFxcXCJyZWR1Y2libGUgZWdyZXNzIG5vdCBwYXNzZWRcXFwiKTtcXG4rXFx0QVNTRVJUX0dUKHNrZWwtXFx1MDAzZWJzcy1cXHUwMDNlZGVsaXZlcmVkLCAwLCBcXFwicmVkdWNpYmxlIGVncmVzcyBkZWxpdmVyZWQgdG8gdmV0aDJcXFwiKTtcXG4rXFxuK1xcdC8qXFxuK1xcdCAqIFFpblEgZWdyZXNzOiBub3QgcmVkdWNpYmxlLCBzbyB0aGUgbG9va3VwIHJldHVybnMgVkxBTl9GQUlMVVJFIGFuZFxcbitcXHQgKiB0aGUgcHJvZ3JhbSBwYXNzZXMgdGhlIGZyYW1lIGluc3RlYWQgb2YgcmVkaXJlY3RpbmcgdG8gdGhlIGlubmVyXFxuK1xcdCAqIFZMQU4gZGV2aWNlLiByZWRpcmVjdGVkID09IDAgaXMgdGhlIGFzc2VydGlvbiB0aGF0IG1hdHRlcnM6IHRoZVxcbitcXHQgKiBwcm9ncmFtIGRpZCBub3QgcmVkaXJlY3QgdG8gYSBkZXZpY2UgdGhhdCB3b3VsZCBkcm9wIHRoZSBmcmFtZSBhdFxcbitcXHQgKiB4ZHBfZG9fZmx1c2goKS4gdmV0aDIncyBkZWxpdmVyZWQgY291bnQgaXMgbm90IGNoZWNrZWQgaGVyZSwgc2luY2VcXG4rXFx0ICogYSBwYXNzZWQgZnJhbWUgY2FuIHN0aWxsIHJlYWNoIHZldGgyIHRocm91Z2ggdGhlIHN0YWNrJ3MgZm9yd2FyZGluZ1xcbitcXHQgKiBwYXRoLCB3aGljaCBpcyB1bnJlbGF0ZWQgdG8gdGhlIHJlZGlyZWN0IHVuZGVyIHRlc3QuXFxuK1xcdCAqL1xcbitcXHRtZW1zZXQoZmliX3BhcmFtcywgMCwgc2l6ZW9mKCpmaWJfcGFyYW1zKSk7XFxuK1xcdGZpYl9wYXJhbXMtXFx1MDAzZWZhbWlseSA9IEFGX0lORVQ7XFxuK1xcdGZpYl9wYXJhbXMtXFx1MDAzZWw0X3Byb3RvY29sID0gSVBQUk9UT19UQ1A7XFxuK1xcdGZpYl9wYXJhbXMtXFx1MDAzZWlmaW5kZXggPSB2ZXRoMV9pZHg7XFxuK1xcdGlmICghQVNTRVJUX0VRKGluZXRfcHRvbihBRl9JTkVULCBJUFY0X0lGQUNFX0FERFIsIFxcdTAwMjZmaWJfcGFyYW1zLVxcdTAwM2VpcHY0X3NyYyksXFxuK1xcdFxcdCAgICAgICAxLCBcXFwiaW5ldF9wdG9uKHNyYylcXFwiKSB8fFxcbitcXHQgICAgIUFTU0VSVF9FUShpbmV0X3B0b24oQUZfSU5FVCwgSVBWNF9RSU5RX0RTVCwgXFx1MDAyNmZpYl9wYXJhbXMtXFx1MDAzZWlwdjRfZHN0KSxcXG4rXFx0XFx0ICAgICAgIDEsIFxcXCJpbmV0X3B0b24ocWlucSBkc3QpXFxcIikpXFxuK1xcdFxcdGdvdG8gZmFpbDtcXG4rXFx0c2tlbC1cXHUwMDNlYnNzLVxcdTAwM2Vsb29rdXBfZmxhZ3MgPSBCUEZfRklCX0xPT0tVUF9WTEFOIHwgQlBGX0ZJQl9MT09LVVBfU0tJUF9ORUlHSDtcXG4rXFx0c2tlbC1cXHUwMDNlYnNzLVxcdTAwM2VyZWRpcmVjdGVkID0gMDtcXG4rXFx0c2tlbC1cXHUwMDNlYnNzLVxcdTAwM2VwYXNzZWQgPSAwO1xcbitcXG4rXFx0ZXJyID0gYnBmX3Byb2dfdGVzdF9ydW5fb3B0cyhyZWRpcmVjdF9mZCwgXFx1MDAyNmxmX29wdHMpO1xcbitcXHRpZiAoIUFTU0VSVF9PSyhlcnIsIFxcXCJ0ZXN0X3J1bihxaW5xIGVncmVzcylcXFwiKSlcXG4rXFx0XFx0Z290byBmYWlsO1xcbitcXHRBU1NFUlRfRVEoc2tlbC1cXHUwMDNlYnNzLVxcdTAwM2VwYXNzZWQsIFJFRElSRUNUX05QS1RTLCBcXFwicWlucSBlZ3Jlc3MgcGFzc2VkXFxcIik7XFxuK1xcdEFTU0VSVF9FUShza2VsLVxcdTAwM2Vic3MtXFx1MDAzZXJlZGlyZWN0ZWQsIDAsIFxcXCJxaW5xIGVncmVzcyBub3QgcmVkaXJlY3RlZFxcXCIpO1xcbitcXG4gZmFpbDpcXG4rXFx0aWYgKHhkcF9hdHRhY2hlZClcXG4rXFx0XFx0YnBmX3hkcF9kZXRhY2godmV0aDJfaWR4LCBYRFBfRkxBR1NfRFJWX01PREUsIE5VTEwpO1xcbiBcXHRpZiAobnN0b2tlbilcXG4gXFx0XFx0Y2xvc2VfbmV0bnMobnN0b2tlbik7XFxuIFxcdFNZU19OT0ZBSUwoXFxcImlwIG5ldG5zIGRlbCBcXFwiIE5TX1RFU1QpO1xcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvZmliX2xvb2t1cC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2ZpYl9sb29rdXAuY1xcbmluZGV4IDdiNWRkMjIxNGZmNDZhLi44NjJhMWU5NDU3YjRlMCAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvZmliX2xvb2t1cC5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2ZpYl9sb29rdXAuY1xcbkBAIC0xOSw0ICsxOSw0MCBAQCBpbnQgZmliX2xvb2t1cChzdHJ1Y3QgX19za19idWZmICpza2IpXFxuIFxcdHJldHVybiBUQ19BQ1RfU0hPVDtcXG4gfVxcbiBcXG4rU0VDKFxcXCJ4ZHBcXFwiKVxcbitpbnQgZmliX2xvb2t1cF94ZHAoc3RydWN0IHhkcF9tZCAqY3R4KVxcbit7XFxuK1xcdGZpYl9sb29rdXBfcmV0ID0gYnBmX2ZpYl9sb29rdXAoY3R4LCBcXHUwMDI2ZmliX3BhcmFtcywgc2l6ZW9mKGZpYl9wYXJhbXMpLFxcbitcXHRcXHRcXHRcXHRcXHRsb29rdXBfZmxhZ3MpO1xcbitcXG4rXFx0cmV0dXJuIFhEUF9EUk9QO1xcbit9XFxuK1xcbitpbnQgcmVkaXJlY3RlZCA9IDA7XFxuK2ludCBwYXNzZWQgPSAwO1xcbitpbnQgZGVsaXZlcmVkID0gMDtcXG4rXFxuK1NFQyhcXFwieGRwXFxcIilcXG4raW50IGZpYl9sb29rdXBfcmVkaXJlY3Qoc3RydWN0IHhkcF9tZCAqY3R4KVxcbit7XFxuK1xcdHN0cnVjdCBicGZfZmliX2xvb2t1cCBwYXJhbXMgPSBmaWJfcGFyYW1zO1xcbitcXHRsb25nIHJldDtcXG4rXFxuK1xcdHJldCA9IGJwZl9maWJfbG9va3VwKGN0eCwgXFx1MDAyNnBhcmFtcywgc2l6ZW9mKHBhcmFtcyksIGxvb2t1cF9mbGFncyk7XFxuK1xcdGlmIChyZXQgPT0gQlBGX0ZJQl9MS1VQX1JFVF9TVUNDRVNTKSB7XFxuK1xcdFxcdHJlZGlyZWN0ZWQrKztcXG4rXFx0XFx0cmV0dXJuIGJwZl9yZWRpcmVjdChwYXJhbXMuaWZpbmRleCwgMCk7XFxuK1xcdH1cXG4rXFxuK1xcdHBhc3NlZCsrO1xcbitcXHRyZXR1cm4gWERQX1BBU1M7XFxuK31cXG4rXFxuK1NFQyhcXFwieGRwXFxcIilcXG4raW50IHhkcF9jb3VudChzdHJ1Y3QgeGRwX21kICpjdHgpXFxuK3tcXG4rXFx0ZGVsaXZlcmVkKys7XFxuK1xcdHJldHVybiBYRFBfRFJPUDtcXG4rfVxcbitcXG4gY2hhciBfbGljZW5zZVtdIFNFQyhcXFwibGljZW5zZVxcXCIpID0gXFxcIkdQTFxcXCI7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI0VDAzOjI1OjUzLjY5NzI3ODMwN1oiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjQ3ODYxMjY3ODcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVkxBTl84MDIxUVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJwZl9pcHY0X2ZpYl9sb29rdXBcIixcbiAgICBcImJwZl9pcHY2X2ZpYl9sb29rdXBcIixcbiAgICBcImJwZl94ZHBfZmliX2xvb2t1cFwiLFxuICAgIFwiYnBmX3NrYl9maWJfbG9va3VwXCIsXG4gICAgXCJicGZfZmliX3NldF9md2RfcGFyYW1zXCIsXG4gICAgXCJicGZfZmliX3ZsYW5faW5wdXRfZGV2XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIEJQRiBGSUIgbG9va3VwIGhlbHBlciAoYGJwZl9maWJfbG9va3VwYCksIGFkZGluZyBzdXBwb3J0IGZvciBWTEFOcyB2aWEgYEJQRl9GSUJfTE9PS1VQX1ZMQU5gIGFuZCBgQlBGX0ZJQl9MT09LVVBfVkxBTl9JTlBVVGAgZmxhZ3MuIFRoaXMgbW9kaWZpZXMgY29yZSByb3V0aW5nIGxvb2t1cCBsb2dpYyB3aXRoaW4gQlBGIHByb2dyYW1zLCB3aGljaCBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgYnkgbG9hZGluZyBhbmQgZXhlY3V0aW5nIEJQRiBwcm9ncmFtcyAoWERQIG9yIFRDKS4gRnV6emluZyBpcyByZXF1aXJlZCB0byBlbnN1cmUgdGhlIG5ldyBWTEFOIHJlc29sdXRpb24gbG9naWMgYW5kIGl0cyBpbnRlcmFjdGlvbiB3aXRoIHRoZSBuZXR3b3JraW5nIHN0YWNrIGlzIHJvYnVzdC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdFxuICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LFxuICAgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAzNTMzNzFjZGE5YjdlOWM3MjdlODhhMGI5ZjdkZjE1ZDUwZmVlYjhlXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBKdW4gMjQgMDM6MjU6NTEgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmggYi9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmhcbmluZGV4IDg5YjM2ZGU1ZmRiYjZkLi5kNDIxODk1NGM1MGY1MyAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaFxuKysrIGIvaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oXG5AQCAtMzUzMiw2ICszNTMyLDQ1IEBAIHVuaW9uIGJwZl9hdHRyIHtcbiAgKlx0XHRcdFVzZSB0aGUgbWFyayBwcmVzZW50IGluICpwYXJhbXMqLVx1MDAzZW1hcmsgZm9yIHRoZSBmaWIgbG9va3VwLlxuICAqXHRcdFx0VGhpcyBvcHRpb24gc2hvdWxkIG5vdCBiZSB1c2VkIHdpdGggQlBGX0ZJQl9MT09LVVBfRElSRUNULFxuICAqXHRcdFx0YXMgaXQgb25seSBoYXMgbWVhbmluZyBmb3IgZnVsbCBsb29rdXBzLlxuKyAqXHRcdCoqQlBGX0ZJQl9MT09LVVBfVkxBTioqXG4rICpcdFx0XHRJZiB0aGUgZmliIGxvb2t1cCByZXNvbHZlcyB0byBhIFZMQU4gZGV2aWNlIHdob3NlXG4rICpcdFx0XHRwYXJlbnQgaXMgYSByZWFsIChub24tVkxBTikgZGV2aWNlLCBzZXRcbisgKlx0XHRcdCpwYXJhbXMqLVx1MDAzZWhfdmxhbl9wcm90byBhbmQgKnBhcmFtcyotXHUwMDNlaF92bGFuX1RDSSBmcm9tXG4rICpcdFx0XHR0aGUgVkxBTiBkZXZpY2UgYW5kIHJlcGxhY2UgKnBhcmFtcyotXHUwMDNlaWZpbmRleCB3aXRoIHRoZVxuKyAqXHRcdFx0cGFyZW50J3MgaWZpbmRleC4gKnBhcmFtcyotXHUwMDNlaF92bGFuX1RDSSBjYXJyaWVzIHRoZSBWSURcbisgKlx0XHRcdG9ubHksIHdpdGggUENQIGFuZCBERUkgYml0cyB6ZXJvOyBhIGNvbnN1bWVyIHdhbnRpbmcgdG9cbisgKlx0XHRcdHNldCBlZ3Jlc3MgcHJpb3JpdHkgd3JpdGVzIFBDUCBpdHNlbGYuICpwYXJhbXMqLVx1MDAzZXNtYWMgaXNcbisgKlx0XHRcdHRoZSBWTEFOIGRldmljZSdzIG93biBhZGRyZXNzLCB3aGljaCBjYW4gZGlmZmVyIGZyb20gdGhlXG4rICpcdFx0XHRwYXJlbnQncy4gT25seSB0aGUgaW1tZWRpYXRlIHBhcmVudCBpcyByZXNvbHZlZDsgaWYgaXRcbisgKlx0XHRcdGlzIGl0c2VsZiBhIFZMQU4gZGV2aWNlIChRaW5RKSBvciBpbiBhbm90aGVyIG5hbWVzcGFjZSxcbisgKlx0XHRcdHRoZSBlZ3Jlc3MgY2Fubm90IGJlIHJlZHVjZWQgdG8gYSBwaHlzaWNhbCBkZXZpY2UgcGx1c1xuKyAqXHRcdFx0b25lIHRhZyBhbmQgdGhlIGxvb2t1cCByZXR1cm5zXG4rICpcdFx0XHQqKkJQRl9GSUJfTEtVUF9SRVRfVkxBTl9GQUlMVVJFKiogd2l0aCAqcGFyYW1zKi1cdTAwM2VpZmluZGV4XG4rICpcdFx0XHRsZWZ0IGF0IHRoZSBpbnB1dC4gUmUtaXNzdWUgd2l0aG91dFxuKyAqXHRcdFx0KipCUEZfRklCX0xPT0tVUF9WTEFOKiogdG8gb2J0YWluIHRoZSBWTEFOIGRldmljZSdzIG93blxuKyAqXHRcdFx0aWZpbmRleC4gVGhlIHN3YXAgYW5kIHRoZSB2bGFuIGZpZWxkc1xuKyAqXHRcdFx0YXJlIHdyaXR0ZW4gb25seSBvbiBzdWNjZXNzOyBvdGhlciBvdXRwdXQgZmllbGRzIGtlZXBcbisgKlx0XHRcdHRoZSBoZWxwZXIncyBleGlzdGluZyBiZWhhdmlvdXIsIHNvIGEgZnJhZy1uZWVkZWQgcmVzdWx0XG4rICpcdFx0XHRzdGlsbCByZXBvcnRzIHRoZSByb3V0ZSBtdHUgaW4gKnBhcmFtcyotXHUwMDNlbXR1X3Jlc3VsdC5cbisgKlx0XHRcdFRoaXMgZmxhZyBpcyBvbmx5IHZhbGlkIGZvciBYRFAgcHJvZ3JhbXM7IHRjIHByb2dyYW1zXG4rICpcdFx0XHRyZWNlaXZlIC1FSU5WQUwgc2luY2UgdGhleSBjYW4gcmVkaXJlY3QgdG8gdGhlIFZMQU5cbisgKlx0XHRcdGRldmljZSBkaXJlY3RseS5cbisgKlx0XHQqKkJQRl9GSUJfTE9PS1VQX1ZMQU5fSU5QVVQqKlxuKyAqXHRcdFx0VHJlYXQgKnBhcmFtcyotXHUwMDNlaF92bGFuX3Byb3RvIGFuZCAqcGFyYW1zKi1cdTAwM2VoX3ZsYW5fVENJXG4rICpcdFx0XHRhcyBhbiBpbnB1dCBWTEFOIHRhZyBhbmQgcnVuIHRoZSBsb29rdXAgYXMgaWYgaW5ncmVzc1xuKyAqXHRcdFx0aGFkIGhhcHBlbmVkIG9uIHRoZSBWTEFOIHN1YmludGVyZmFjZSBjYXJyeWluZyB0aGF0IHRhZ1xuKyAqXHRcdFx0b24gKnBhcmFtcyotXHUwMDNlaWZpbmRleC4gVGhlIFZJRCBpcyB0aGUgbG93IDEyIGJpdHMgb2ZcbisgKlx0XHRcdCpwYXJhbXMqLVx1MDAzZWhfdmxhbl9UQ0k7ICpwYXJhbXMqLVx1MDAzZWhfdmxhbl9wcm90byBtdXN0IGJlXG4rICpcdFx0XHRFVEhfUF84MDIxUSBvciBFVEhfUF84MDIxQUQgaW4gbmV0d29yayBieXRlIG9yZGVyLCBlbHNlXG4rICpcdFx0XHQqKi1FSU5WQUwqKi4gSWYgKnBhcmFtcyotXHUwMDNlaWZpbmRleCBpcyBpdHNlbGYgYSBWTEFOXG4rICpcdFx0XHRkZXZpY2UsIGl0cyBpbm5lciAoUWluUSkgc3ViaW50ZXJmYWNlIGlzIG1hdGNoZWQ7IGZvciBhXG4rICpcdFx0XHRib25kIG9yIHRlYW0sIHBhc3MgdGhlIG1hc3RlcidzIGlmaW5kZXguIEFuIHVubWF0Y2hlZFxuKyAqXHRcdFx0dGFnLCBhIGRvd24gZGV2aWNlLCBvciBvbmUgaW4gYW5vdGhlciBuYW1lc3BhY2UgcmV0dXJuc1xuKyAqXHRcdFx0KipCUEZfRklCX0xLVVBfUkVUX05PVF9GV0RFRCoqLCBtaXJyb3JpbmcgcmVhbCBpbmdyZXNzLlxuKyAqXHRcdFx0QSBWSUQgb2YgMCBpcyBsb29rZWQgdXAgbGl0ZXJhbGx5LCBzbyBkbyBub3Qgc2V0IHRoaXNcbisgKlx0XHRcdGZsYWcgZm9yIHByaW9yaXR5LXRhZ2dlZCBmcmFtZXMuIENhbm5vdCBiZSBjb21iaW5lZCB3aXRoXG4rICpcdFx0XHQqKkJQRl9GSUJfTE9PS1VQX1RCSUQqKiBvciAqKkJQRl9GSUJfTE9PS1VQX09VVFBVVCoqXG4rICpcdFx0XHQocmV0dXJucyAqKi1FSU5WQUwqKikuXG4gICpcbiAgKlx0XHQqY3R4KiBpcyBlaXRoZXIgKipzdHJ1Y3QgeGRwX21kKiogZm9yIFhEUCBwcm9ncmFtcyBvclxuICAqXHRcdCoqc3RydWN0IHNrX2J1ZmYqKiB0YyBjbHNfYWN0IHByb2dyYW1zLlxuQEAgLTczMjcsNiArNzM2Niw4IEBAIGVudW0ge1xuIFx0QlBGX0ZJQl9MT09LVVBfVEJJRCAgICA9ICgxVSBcdTAwM2NcdTAwM2MgMyksXG4gXHRCUEZfRklCX0xPT0tVUF9TUkMgICAgID0gKDFVIFx1MDAzY1x1MDAzYyA0KSxcbiBcdEJQRl9GSUJfTE9PS1VQX01BUksgICAgPSAoMVUgXHUwMDNjXHUwMDNjIDUpLFxuK1x0QlBGX0ZJQl9MT09LVVBfVkxBTiAgICA9ICgxVSBcdTAwM2NcdTAwM2MgNiksXG4rXHRCUEZfRklCX0xPT0tVUF9WTEFOX0lOUFVUID0gKDFVIFx1MDAzY1x1MDAzYyA3KSxcbiB9O1xuIFxuIGVudW0ge1xuQEAgLTczNDAsNiArNzM4MSw3IEBAIGVudW0ge1xuIFx0QlBGX0ZJQl9MS1VQX1JFVF9OT19ORUlHSCwgICAgIC8qIG5vIG5laWdoYm9yIGVudHJ5IGZvciBuaCAqL1xuIFx0QlBGX0ZJQl9MS1VQX1JFVF9GUkFHX05FRURFRCwgIC8qIGZyYWdtZW50YXRpb24gcmVxdWlyZWQgdG8gZndkICovXG4gXHRCUEZfRklCX0xLVVBfUkVUX05PX1NSQ19BRERSLCAgLyogZmFpbGVkIHRvIGRlcml2ZSBJUCBzcmMgYWRkciAqL1xuK1x0QlBGX0ZJQl9MS1VQX1JFVF9WTEFOX0ZBSUxVUkUsIC8qIFZMQU4gZWdyZXNzLCBwYXJlbnQgdW5yZXNvbHZhYmxlICovXG4gfTtcbiBcbiBzdHJ1Y3QgYnBmX2ZpYl9sb29rdXAge1xuQEAgLTczOTMsNyArNzQzNSwxMyBAQCBzdHJ1Y3QgYnBmX2ZpYl9sb29rdXAge1xuIFxuIFx0dW5pb24ge1xuIFx0XHRzdHJ1Y3Qge1xuLVx0XHRcdC8qIG91dHB1dCAqL1xuK1x0XHRcdC8qXG4rXHRcdFx0ICogb3V0cHV0IHdpdGggQlBGX0ZJQl9MT09LVVBfVkxBTjogc2V0IGZyb20gdGhlXG4rXHRcdFx0ICogcmVzb2x2ZWQgZWdyZXNzIFZMQU4gZGV2aWNlIChzZWUgdGhlIGZsYWcpOyB6ZXJvZWRcbitcdFx0XHQgKiBvbiBvdGhlciBzdWNjZXNzZnVsIGxvb2t1cHMuIGlucHV0IHdpdGhcbitcdFx0XHQgKiBCUEZfRklCX0xPT0tVUF9WTEFOX0lOUFVUOiB0aGUgVkxBTiB0YWcgdG8gc2NvcGVcbitcdFx0XHQgKiB0aGUgbG9va3VwIGJ5LlxuK1x0XHRcdCAqL1xuIFx0XHRcdF9fYmUxNlx0aF92bGFuX3Byb3RvO1xuIFx0XHRcdF9fYmUxNlx0aF92bGFuX1RDSTtcbiBcdFx0fTtcbmRpZmYgLS1naXQgYS9uZXQvY29yZS9maWx0ZXIuYyBiL25ldC9jb3JlL2ZpbHRlci5jXG5pbmRleCAyZTk2YjRiODQ3Y2UxMi4uMGVhMzYyZmE0Mjg3ZTMgMTAwNjQ0XG4tLS0gYS9uZXQvY29yZS9maWx0ZXIuY1xuKysrIGIvbmV0L2NvcmUvZmlsdGVyLmNcbkBAIC02MjAxLDIxICs2MjAxLDYwIEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3NrYl9nZXRfeGZybV9zdGF0ZV9wcm90byA9IHtcbiAjZW5kaWZcbiBcbiAjaWYgSVNfRU5BQkxFRChDT05GSUdfSU5FVCkgfHwgSVNfRU5BQkxFRChDT05GSUdfSVBWNilcbi1zdGF0aWMgaW50IGJwZl9maWJfc2V0X2Z3ZF9wYXJhbXMoc3RydWN0IGJwZl9maWJfbG9va3VwICpwYXJhbXMsIHUzMiBtdHUpXG4rc3RhdGljIGludCBicGZfZmliX3NldF9md2RfcGFyYW1zKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4rXHRcdFx0XHQgIHN0cnVjdCBicGZfZmliX2xvb2t1cCAqcGFyYW1zLFxuK1x0XHRcdFx0ICB1MzIgZmxhZ3MsIHUzMiBtdHUsIHUzMiBpbl9pZmluZGV4KVxuIHtcbiBcdHBhcmFtcy1cdTAwM2VoX3ZsYW5fVENJID0gMDtcbiBcdHBhcmFtcy1cdTAwM2VoX3ZsYW5fcHJvdG8gPSAwO1xuK1xuKyNpZiBJU19FTkFCTEVEKENPTkZJR19WTEFOXzgwMjFRKVxuK1x0aWYgKChmbGFncyBcdTAwMjYgQlBGX0ZJQl9MT09LVVBfVkxBTikgXHUwMDI2XHUwMDI2IGlzX3ZsYW5fZGV2KGRldikpIHtcbitcdFx0c3RydWN0IG5ldF9kZXZpY2UgKnJlYWxfZGV2ID0gdmxhbl9kZXZfcHJpdihkZXYpLVx1MDAzZXJlYWxfZGV2O1xuK1xuK1x0XHRpZiAoIWlzX3ZsYW5fZGV2KHJlYWxfZGV2KSBcdTAwMjZcdTAwMjZcbitcdFx0ICAgIG5ldF9lcShkZXZfbmV0KHJlYWxfZGV2KSwgZGV2X25ldChkZXYpKSkge1xuK1x0XHRcdHBhcmFtcy1cdTAwM2VoX3ZsYW5fcHJvdG8gPSB2bGFuX2Rldl92bGFuX3Byb3RvKGRldik7XG4rXHRcdFx0cGFyYW1zLVx1MDAzZWhfdmxhbl9UQ0kgPSBodG9ucyh2bGFuX2Rldl92bGFuX2lkKGRldikpO1xuK1x0XHRcdHBhcmFtcy1cdTAwM2VpZmluZGV4ID0gcmVhbF9kZXYtXHUwMDNlaWZpbmRleDtcbitcdFx0fSBlbHNlIHtcbitcdFx0XHRwYXJhbXMtXHUwMDNlaWZpbmRleCA9IGluX2lmaW5kZXg7XG4rXHRcdFx0cmV0dXJuIEJQRl9GSUJfTEtVUF9SRVRfVkxBTl9GQUlMVVJFO1xuK1x0XHR9XG4rXHR9XG4rI2VuZGlmXG4rXG4gXHRpZiAobXR1KVxuIFx0XHRwYXJhbXMtXHUwMDNlbXR1X3Jlc3VsdCA9IG10dTsgLyogdW5pb24gd2l0aCB0b3RfbGVuICovXG4gXG4gXHRyZXR1cm4gMDtcbiB9XG4rXG4rc3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlICpicGZfZmliX3ZsYW5faW5wdXRfZGV2KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4rXHRcdFx0XHRcdFx0IGNvbnN0IHN0cnVjdCBicGZfZmliX2xvb2t1cCAqcGFyYW1zKVxuK3tcbitcdF9fYmUxNiBwcm90byA9IHBhcmFtcy1cdTAwM2VoX3ZsYW5fcHJvdG87XG4rXHRzdHJ1Y3QgbmV0X2RldmljZSAqdmxhbl9kZXY7XG4rXHR1MTYgdmlkO1xuK1xuK1x0aWYgKHByb3RvICE9IGh0b25zKEVUSF9QXzgwMjFRKSBcdTAwMjZcdTAwMjYgcHJvdG8gIT0gaHRvbnMoRVRIX1BfODAyMUFEKSlcbitcdFx0cmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7XG4rXG4rXHR2aWQgPSBudG9ocyhwYXJhbXMtXHUwMDNlaF92bGFuX1RDSSkgXHUwMDI2IFZMQU5fVklEX01BU0s7XG4rXHR2bGFuX2RldiA9IF9fdmxhbl9maW5kX2Rldl9kZWVwX3JjdShkZXYsIHByb3RvLCB2aWQpO1xuK1x0aWYgKCF2bGFuX2RldiB8fCAhKHZsYW5fZGV2LVx1MDAzZWZsYWdzIFx1MDAyNiBJRkZfVVApIHx8XG4rXHQgICAgIW5ldF9lcShkZXZfbmV0KHZsYW5fZGV2KSwgZGV2X25ldChkZXYpKSlcbitcdFx0cmV0dXJuIE5VTEw7XG4rXG4rXHRyZXR1cm4gdmxhbl9kZXY7XG4rfVxuICNlbmRpZlxuIFxuICNpZiBJU19FTkFCTEVEKENPTkZJR19JTkVUKVxuIHN0YXRpYyBpbnQgYnBmX2lwdjRfZmliX2xvb2t1cChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBicGZfZmliX2xvb2t1cCAqcGFyYW1zLFxuIFx0XHRcdCAgICAgICB1MzIgZmxhZ3MsIGJvb2wgY2hlY2tfbXR1KVxuIHtcbitcdHUzMiBpbl9pZmluZGV4ID0gcGFyYW1zLVx1MDAzZWlmaW5kZXg7XG4gXHRzdHJ1Y3QgbmVpZ2hib3VyICpuZWlnaCA9IE5VTEw7XG4gXHRzdHJ1Y3QgZmliX25oX2NvbW1vbiAqbmhjO1xuIFx0c3RydWN0IGluX2RldmljZSAqaW5fZGV2O1xuQEAgLTYyMjksNiArNjI2OCwxNCBAQCBzdGF0aWMgaW50IGJwZl9pcHY0X2ZpYl9sb29rdXAoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgYnBmX2ZpYl9sb29rdXAgKnBhcmFtcyxcbiBcdGlmICh1bmxpa2VseSghZGV2KSlcbiBcdFx0cmV0dXJuIC1FTk9ERVY7XG4gXG4rXHRpZiAoZmxhZ3MgXHUwMDI2IEJQRl9GSUJfTE9PS1VQX1ZMQU5fSU5QVVQpIHtcbitcdFx0ZGV2ID0gYnBmX2ZpYl92bGFuX2lucHV0X2RldihkZXYsIHBhcmFtcyk7XG4rXHRcdGlmIChJU19FUlIoZGV2KSlcbitcdFx0XHRyZXR1cm4gUFRSX0VSUihkZXYpO1xuK1x0XHRpZiAoIWRldilcbitcdFx0XHRyZXR1cm4gQlBGX0ZJQl9MS1VQX1JFVF9OT1RfRldERUQ7XG4rXHR9XG4rXG4gXHQvKiB2ZXJpZnkgZm9yd2FyZGluZyBpcyBlbmFibGVkIG9uIHRoaXMgaW50ZXJmYWNlICovXG4gXHRpbl9kZXYgPSBfX2luX2Rldl9nZXRfcmN1KGRldik7XG4gXHRpZiAodW5saWtlbHkoIWluX2RldiB8fCAhSU5fREVWX0ZPUldBUkQoaW5fZGV2KSkpXG5AQCAtNjIzOCw3ICs2Mjg1LDExIEBAIHN0YXRpYyBpbnQgYnBmX2lwdjRfZmliX2xvb2t1cChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBicGZfZmliX2xvb2t1cCAqcGFyYW1zLFxuIFx0XHRmbDQuZmxvd2k0X2lpZiA9IDE7XG4gXHRcdGZsNC5mbG93aTRfb2lmID0gcGFyYW1zLVx1MDAzZWlmaW5kZXg7XG4gXHR9IGVsc2Uge1xuLVx0XHRmbDQuZmxvd2k0X2lpZiA9IHBhcmFtcy1cdTAwM2VpZmluZGV4O1xuK1x0XHQvKlxuK1x0XHQgKiBkZXYtXHUwMDNlaWZpbmRleCwgbm90IHBhcmFtcy1cdTAwM2VpZmluZGV4OiBWTEFOX0lOUFVUIG1heSBoYXZlXG4rXHRcdCAqIHJlc29sdmVkIGRldiB0byBhIHN1YmludGVyZmFjZSBhYm92ZS5cbitcdFx0ICovXG4rXHRcdGZsNC5mbG93aTRfaWlmID0gZGV2LVx1MDAzZWlmaW5kZXg7XG4gXHRcdGZsNC5mbG93aTRfb2lmID0gMDtcbiBcdH1cbiBcdGZsNC5mbG93aTRfZHNjcCA9IGluZXRfZHNmaWVsZF90b19kc2NwKHBhcmFtcy1cdTAwM2V0b3MpO1xuQEAgLTYzNDcsNyArNjM5OCw3IEBAIHN0YXRpYyBpbnQgYnBmX2lwdjRfZmliX2xvb2t1cChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBicGZfZmliX2xvb2t1cCAqcGFyYW1zLFxuIFx0bWVtY3B5KHBhcmFtcy1cdTAwM2VzbWFjLCBkZXYtXHUwMDNlZGV2X2FkZHIsIEVUSF9BTEVOKTtcbiBcbiBzZXRfZndkX3BhcmFtczpcbi1cdHJldHVybiBicGZfZmliX3NldF9md2RfcGFyYW1zKHBhcmFtcywgbXR1KTtcbitcdHJldHVybiBicGZfZmliX3NldF9md2RfcGFyYW1zKGRldiwgcGFyYW1zLCBmbGFncywgbXR1LCBpbl9pZmluZGV4KTtcbiB9XG4gI2VuZGlmXG4gXG5AQCAtNjM1Nyw2ICs2NDA4LDcgQEAgc3RhdGljIGludCBicGZfaXB2Nl9maWJfbG9va3VwKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGJwZl9maWJfbG9va3VwICpwYXJhbXMsXG4ge1xuIFx0c3RydWN0IGluNl9hZGRyICpzcmMgPSAoc3RydWN0IGluNl9hZGRyICopIHBhcmFtcy1cdTAwM2VpcHY2X3NyYztcbiBcdHN0cnVjdCBpbjZfYWRkciAqZHN0ID0gKHN0cnVjdCBpbjZfYWRkciAqKSBwYXJhbXMtXHUwMDNlaXB2Nl9kc3Q7XG4rXHR1MzIgaW5faWZpbmRleCA9IHBhcmFtcy1cdTAwM2VpZmluZGV4O1xuIFx0c3RydWN0IGZpYjZfcmVzdWx0IHJlcyA9IHt9O1xuIFx0c3RydWN0IG5laWdoYm91ciAqbmVpZ2g7XG4gXHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2O1xuQEAgLTYzNzQsNiArNjQyNiwxNCBAQCBzdGF0aWMgaW50IGJwZl9pcHY2X2ZpYl9sb29rdXAoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgYnBmX2ZpYl9sb29rdXAgKnBhcmFtcyxcbiBcdGlmICh1bmxpa2VseSghZGV2KSlcbiBcdFx0cmV0dXJuIC1FTk9ERVY7XG4gXG4rXHRpZiAoZmxhZ3MgXHUwMDI2IEJQRl9GSUJfTE9PS1VQX1ZMQU5fSU5QVVQpIHtcbitcdFx0ZGV2ID0gYnBmX2ZpYl92bGFuX2lucHV0X2RldihkZXYsIHBhcmFtcyk7XG4rXHRcdGlmIChJU19FUlIoZGV2KSlcbitcdFx0XHRyZXR1cm4gUFRSX0VSUihkZXYpO1xuK1x0XHRpZiAoIWRldilcbitcdFx0XHRyZXR1cm4gQlBGX0ZJQl9MS1VQX1JFVF9OT1RfRldERUQ7XG4rXHR9XG4rXG4gXHRpZGV2ID0gX19pbjZfZGV2X2dldF9zYWZlbHkoZGV2KTtcbiBcdGlmICh1bmxpa2VseSghaWRldiB8fCAhUkVBRF9PTkNFKGlkZXYtXHUwMDNlY25mLmZvcndhcmRpbmcpKSlcbiBcdFx0cmV0dXJuIEJQRl9GSUJfTEtVUF9SRVRfRldEX0RJU0FCTEVEO1xuQEAgLTYzODIsNyArNjQ0MiwxMiBAQCBzdGF0aWMgaW50IGJwZl9pcHY2X2ZpYl9sb29rdXAoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgYnBmX2ZpYl9sb29rdXAgKnBhcmFtcyxcbiBcdFx0Zmw2LmZsb3dpNl9paWYgPSAxO1xuIFx0XHRvaWYgPSBmbDYuZmxvd2k2X29pZiA9IHBhcmFtcy1cdTAwM2VpZmluZGV4O1xuIFx0fSBlbHNlIHtcbi1cdFx0b2lmID0gZmw2LmZsb3dpNl9paWYgPSBwYXJhbXMtXHUwMDNlaWZpbmRleDtcbitcdFx0LypcbitcdFx0ICogZGV2LVx1MDAzZWlmaW5kZXgsIG5vdCBwYXJhbXMtXHUwMDNlaWZpbmRleDogVkxBTl9JTlBVVCBtYXkgaGF2ZVxuK1x0XHQgKiByZXNvbHZlZCBkZXYgdG8gYSBzdWJpbnRlcmZhY2UgYWJvdmUuXG4rXHRcdCAqL1xuK1x0XHRvaWYgPSBkZXYtXHUwMDNlaWZpbmRleDtcbitcdFx0Zmw2LmZsb3dpNl9paWYgPSBvaWY7XG4gXHRcdGZsNi5mbG93aTZfb2lmID0gMDtcbiBcdFx0c3RyaWN0ID0gUlQ2X0xPT0tVUF9GX0hBU19TQUREUjtcbiBcdH1cbkBAIC02NDg2LDEzICs2NTUxLDI2IEBAIHN0YXRpYyBpbnQgYnBmX2lwdjZfZmliX2xvb2t1cChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBicGZfZmliX2xvb2t1cCAqcGFyYW1zLFxuIFx0bWVtY3B5KHBhcmFtcy1cdTAwM2VzbWFjLCBkZXYtXHUwMDNlZGV2X2FkZHIsIEVUSF9BTEVOKTtcbiBcbiBzZXRfZndkX3BhcmFtczpcbi1cdHJldHVybiBicGZfZmliX3NldF9md2RfcGFyYW1zKHBhcmFtcywgbXR1KTtcbitcdHJldHVybiBicGZfZmliX3NldF9md2RfcGFyYW1zKGRldiwgcGFyYW1zLCBmbGFncywgbXR1LCBpbl9pZmluZGV4KTtcbiB9XG4gI2VuZGlmXG4gXG4gI2RlZmluZSBCUEZfRklCX0xPT0tVUF9NQVNLIChCUEZfRklCX0xPT0tVUF9ESVJFQ1QgfCBCUEZfRklCX0xPT0tVUF9PVVRQVVQgfCBcXFxuIFx0XHRcdCAgICAgQlBGX0ZJQl9MT09LVVBfU0tJUF9ORUlHSCB8IEJQRl9GSUJfTE9PS1VQX1RCSUQgfCBcXFxuLVx0XHRcdCAgICAgQlBGX0ZJQl9MT09LVVBfU1JDIHwgQlBGX0ZJQl9MT09LVVBfTUFSSylcbitcdFx0XHQgICAgIEJQRl9GSUJfTE9PS1VQX1NSQyB8IEJQRl9GSUJfTE9PS1VQX01BUksgfCBcXFxuK1x0XHRcdCAgICAgQlBGX0ZJQl9MT09LVVBfVkxBTiB8IEJQRl9GSUJfTE9PS1VQX1ZMQU5fSU5QVVQpXG4rXG4rc3RhdGljIGJvb2wgYnBmX2ZpYl9sb29rdXBfZmxhZ3Nfb2sodTMyIGZsYWdzKVxuK3tcbitcdGlmIChmbGFncyBcdTAwMjYgfkJQRl9GSUJfTE9PS1VQX01BU0spXG4rXHRcdHJldHVybiBmYWxzZTtcbitcbitcdGlmICgoZmxhZ3MgXHUwMDI2IEJQRl9GSUJfTE9PS1VQX1ZMQU5fSU5QVVQpIFx1MDAyNlx1MDAyNlxuK1x0ICAgIChmbGFncyBcdTAwMjYgKEJQRl9GSUJfTE9PS1VQX1RCSUQgfCBCUEZfRklCX0xPT0tVUF9PVVRQVVQpKSlcbitcdFx0cmV0dXJuIGZhbHNlO1xuK1xuK1x0cmV0dXJuIHRydWU7XG4rfVxuIFxuIEJQRl9DQUxMXzQoYnBmX3hkcF9maWJfbG9va3VwLCBzdHJ1Y3QgeGRwX2J1ZmYgKiwgY3R4LFxuIFx0ICAgc3RydWN0IGJwZl9maWJfbG9va3VwICosIHBhcmFtcywgaW50LCBwbGVuLCB1MzIsIGZsYWdzKVxuQEAgLTY1MDAsNyArNjU3OCw3IEBAIEJQRl9DQUxMXzQoYnBmX3hkcF9maWJfbG9va3VwLCBzdHJ1Y3QgeGRwX2J1ZmYgKiwgY3R4LFxuIFx0aWYgKHBsZW4gXHUwMDNjIHNpemVvZigqcGFyYW1zKSlcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXG4tXHRpZiAoZmxhZ3MgXHUwMDI2IH5CUEZfRklCX0xPT0tVUF9NQVNLKVxuK1x0aWYgKCFicGZfZmliX2xvb2t1cF9mbGFnc19vayhmbGFncykpXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFxuIFx0c3dpdGNoIChwYXJhbXMtXHUwMDNlZmFtaWx5KSB7XG5AQCAtNjUzOCw3ICs2NjE2LDEwIEBAIEJQRl9DQUxMXzQoYnBmX3NrYl9maWJfbG9va3VwLCBzdHJ1Y3Qgc2tfYnVmZiAqLCBza2IsXG4gXHRpZiAocGxlbiBcdTAwM2Mgc2l6ZW9mKCpwYXJhbXMpKVxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcbi1cdGlmIChmbGFncyBcdTAwMjYgfkJQRl9GSUJfTE9PS1VQX01BU0spXG4rXHRpZiAoIWJwZl9maWJfbG9va3VwX2ZsYWdzX29rKGZsYWdzKSlcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXG4rXHRpZiAoZmxhZ3MgXHUwMDI2IEJQRl9GSUJfTE9PS1VQX1ZMQU4pXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFxuIFx0aWYgKHBhcmFtcy1cdTAwM2V0b3RfbGVuKVxuZGlmZiAtLWdpdCBhL3Rvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaCBiL3Rvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaFxuaW5kZXggODliMzZkZTVmZGJiNmQuLmQ0MjE4OTU0YzUwZjUzIDEwMDY0NFxuLS0tIGEvdG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oXG4rKysgYi90b29scy9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmhcbkBAIC0zNTMyLDYgKzM1MzIsNDUgQEAgdW5pb24gYnBmX2F0dHIge1xuICAqXHRcdFx0VXNlIHRoZSBtYXJrIHByZXNlbnQgaW4gKnBhcmFtcyotXHUwMDNlbWFyayBmb3IgdGhlIGZpYiBsb29rdXAuXG4gICpcdFx0XHRUaGlzIG9wdGlvbiBzaG91bGQgbm90IGJlIHVzZWQgd2l0aCBCUEZfRklCX0xPT0tVUF9ESVJFQ1QsXG4gICpcdFx0XHRhcyBpdCBvbmx5IGhhcyBtZWFuaW5nIGZvciBmdWxsIGxvb2t1cHMuXG4rICpcdFx0KipCUEZfRklCX0xPT0tVUF9WTEFOKipcbisgKlx0XHRcdElmIHRoZSBmaWIgbG9va3VwIHJlc29sdmVzIHRvIGEgVkxBTiBkZXZpY2Ugd2hvc2VcbisgKlx0XHRcdHBhcmVudCBpcyBhIHJlYWwgKG5vbi1WTEFOKSBkZXZpY2UsIHNldFxuKyAqXHRcdFx0KnBhcmFtcyotXHUwMDNlaF92bGFuX3Byb3RvIGFuZCAqcGFyYW1zKi1cdTAwM2VoX3ZsYW5fVENJIGZyb21cbisgKlx0XHRcdHRoZSBWTEFOIGRldmljZSBhbmQgcmVwbGFjZSAqcGFyYW1zKi1cdTAwM2VpZmluZGV4IHdpdGggdGhlXG4rICpcdFx0XHRwYXJlbnQncyBpZmluZGV4LiAqcGFyYW1zKi1cdTAwM2VoX3ZsYW5fVENJIGNhcnJpZXMgdGhlIFZJRFxuKyAqXHRcdFx0b25seSwgd2l0aCBQQ1AgYW5kIERFSSBiaXRzIHplcm87IGEgY29uc3VtZXIgd2FudGluZyB0b1xuKyAqXHRcdFx0c2V0IGVncmVzcyBwcmlvcml0eSB3cml0ZXMgUENQIGl0c2VsZi4gKnBhcmFtcyotXHUwMDNlc21hYyBpc1xuKyAqXHRcdFx0dGhlIFZMQU4gZGV2aWNlJ3Mgb3duIGFkZHJlc3MsIHdoaWNoIGNhbiBkaWZmZXIgZnJvbSB0aGVcbisgKlx0XHRcdHBhcmVudCdzLiBPbmx5IHRoZSBpbW1lZGlhdGUgcGFyZW50IGlzIHJlc29sdmVkOyBpZiBpdFxuKyAqXHRcdFx0aXMgaXRzZWxmIGEgVkxBTiBkZXZpY2UgKFFpblEpIG9yIGluIGFub3RoZXIgbmFtZXNwYWNlLFxuKyAqXHRcdFx0dGhlIGVncmVzcyBjYW5ub3QgYmUgcmVkdWNlZCB0byBhIHBoeXNpY2FsIGRldmljZSBwbHVzXG4rICpcdFx0XHRvbmUgdGFnIGFuZCB0aGUgbG9va3VwIHJldHVybnNcbisgKlx0XHRcdCoqQlBGX0ZJQl9MS1VQX1JFVF9WTEFOX0ZBSUxVUkUqKiB3aXRoICpwYXJhbXMqLVx1MDAzZWlmaW5kZXhcbisgKlx0XHRcdGxlZnQgYXQgdGhlIGlucHV0LiBSZS1pc3N1ZSB3aXRob3V0XG4rICpcdFx0XHQqKkJQRl9GSUJfTE9PS1VQX1ZMQU4qKiB0byBvYnRhaW4gdGhlIFZMQU4gZGV2aWNlJ3Mgb3duXG4rICpcdFx0XHRpZmluZGV4LiBUaGUgc3dhcCBhbmQgdGhlIHZsYW4gZmllbGRzXG4rICpcdFx0XHRhcmUgd3JpdHRlbiBvbmx5IG9uIHN1Y2Nlc3M7IG90aGVyIG91dHB1dCBmaWVsZHMga2VlcFxuKyAqXHRcdFx0dGhlIGhlbHBlcidzIGV4aXN0aW5nIGJlaGF2aW91ciwgc28gYSBmcmFnLW5lZWRlZCByZXN1bHRcbisgKlx0XHRcdHN0aWxsIHJlcG9ydHMgdGhlIHJvdXRlIG10dSBpbiAqcGFyYW1zKi1cdTAwM2VtdHVfcmVzdWx0LlxuKyAqXHRcdFx0VGhpcyBmbGFnIGlzIG9ubHkgdmFsaWQgZm9yIFhEUCBwcm9ncmFtczsgdGMgcHJvZ3JhbXNcbisgKlx0XHRcdHJlY2VpdmUgLUVJTlZBTCBzaW5jZSB0aGV5IGNhbiByZWRpcmVjdCB0byB0aGUgVkxBTlxuKyAqXHRcdFx0ZGV2aWNlIGRpcmVjdGx5LlxuKyAqXHRcdCoqQlBGX0ZJQl9MT09LVVBfVkxBTl9JTlBVVCoqXG4rICpcdFx0XHRUcmVhdCAqcGFyYW1zKi1cdTAwM2VoX3ZsYW5fcHJvdG8gYW5kICpwYXJhbXMqLVx1MDAzZWhfdmxhbl9UQ0lcbisgKlx0XHRcdGFzIGFuIGlucHV0IFZMQU4gdGFnIGFuZCBydW4gdGhlIGxvb2t1cCBhcyBpZiBpbmdyZXNzXG4rICpcdFx0XHRoYWQgaGFwcGVuZWQgb24gdGhlIFZMQU4gc3ViaW50ZXJmYWNlIGNhcnJ5aW5nIHRoYXQgdGFnXG4rICpcdFx0XHRvbiAqcGFyYW1zKi1cdTAwM2VpZmluZGV4LiBUaGUgVklEIGlzIHRoZSBsb3cgMTIgYml0cyBvZlxuKyAqXHRcdFx0KnBhcmFtcyotXHUwMDNlaF92bGFuX1RDSTsgKnBhcmFtcyotXHUwMDNlaF92bGFuX3Byb3RvIG11c3QgYmVcbisgKlx0XHRcdEVUSF9QXzgwMjFRIG9yIEVUSF9QXzgwMjFBRCBpbiBuZXR3b3JrIGJ5dGUgb3JkZXIsIGVsc2VcbisgKlx0XHRcdCoqLUVJTlZBTCoqLiBJZiAqcGFyYW1zKi1cdTAwM2VpZmluZGV4IGlzIGl0c2VsZiBhIFZMQU5cbisgKlx0XHRcdGRldmljZSwgaXRzIGlubmVyIChRaW5RKSBzdWJpbnRlcmZhY2UgaXMgbWF0Y2hlZDsgZm9yIGFcbisgKlx0XHRcdGJvbmQgb3IgdGVhbSwgcGFzcyB0aGUgbWFzdGVyJ3MgaWZpbmRleC4gQW4gdW5tYXRjaGVkXG4rICpcdFx0XHR0YWcsIGEgZG93biBkZXZpY2UsIG9yIG9uZSBpbiBhbm90aGVyIG5hbWVzcGFjZSByZXR1cm5zXG4rICpcdFx0XHQqKkJQRl9GSUJfTEtVUF9SRVRfTk9UX0ZXREVEKiosIG1pcnJvcmluZyByZWFsIGluZ3Jlc3MuXG4rICpcdFx0XHRBIFZJRCBvZiAwIGlzIGxvb2tlZCB1cCBsaXRlcmFsbHksIHNvIGRvIG5vdCBzZXQgdGhpc1xuKyAqXHRcdFx0ZmxhZyBmb3IgcHJpb3JpdHktdGFnZ2VkIGZyYW1lcy4gQ2Fubm90IGJlIGNvbWJpbmVkIHdpdGhcbisgKlx0XHRcdCoqQlBGX0ZJQl9MT09LVVBfVEJJRCoqIG9yICoqQlBGX0ZJQl9MT09LVVBfT1VUUFVUKipcbisgKlx0XHRcdChyZXR1cm5zICoqLUVJTlZBTCoqKS5cbiAgKlxuICAqXHRcdCpjdHgqIGlzIGVpdGhlciAqKnN0cnVjdCB4ZHBfbWQqKiBmb3IgWERQIHByb2dyYW1zIG9yXG4gICpcdFx0KipzdHJ1Y3Qgc2tfYnVmZioqIHRjIGNsc19hY3QgcHJvZ3JhbXMuXG5AQCAtNzMyNyw2ICs3MzY2LDggQEAgZW51bSB7XG4gXHRCUEZfRklCX0xPT0tVUF9UQklEICAgID0gKDFVIFx1MDAzY1x1MDAzYyAzKSxcbiBcdEJQRl9GSUJfTE9PS1VQX1NSQyAgICAgPSAoMVUgXHUwMDNjXHUwMDNjIDQpLFxuIFx0QlBGX0ZJQl9MT09LVVBfTUFSSyAgICA9ICgxVSBcdTAwM2NcdTAwM2MgNSksXG4rXHRCUEZfRklCX0xPT0tVUF9WTEFOICAgID0gKDFVIFx1MDAzY1x1MDAzYyA2KSxcbitcdEJQRl9GSUJfTE9PS1VQX1ZMQU5fSU5QVVQgPSAoMVUgXHUwMDNjXHUwMDNjIDcpLFxuIH07XG4gXG4gZW51bSB7XG5AQCAtNzM0MCw2ICs3MzgxLDcgQEAgZW51bSB7XG4gXHRCUEZfRklCX0xLVVBfUkVUX05PX05FSUdILCAgICAgLyogbm8gbmVpZ2hib3IgZW50cnkgZm9yIG5oICovXG4gXHRCUEZfRklCX0xLVVBfUkVUX0ZSQUdfTkVFREVELCAgLyogZnJhZ21lbnRhdGlvbiByZXF1aXJlZCB0byBmd2QgKi9cbiBcdEJQRl9GSUJfTEtVUF9SRVRfTk9fU1JDX0FERFIsICAvKiBmYWlsZWQgdG8gZGVyaXZlIElQIHNyYyBhZGRyICovXG4rXHRCUEZfRklCX0xLVVBfUkVUX1ZMQU5fRkFJTFVSRSwgLyogVkxBTiBlZ3Jlc3MsIHBhcmVudCB1bnJlc29sdmFibGUgKi9cbiB9O1xuIFxuIHN0cnVjdCBicGZfZmliX2xvb2t1cCB7XG5AQCAtNzM5Myw3ICs3NDM1LDEzIEBAIHN0cnVjdCBicGZfZmliX2xvb2t1cCB7XG4gXG4gXHR1bmlvbiB7XG4gXHRcdHN0cnVjdCB7XG4tXHRcdFx0Lyogb3V0cHV0ICovXG4rXHRcdFx0LypcbitcdFx0XHQgKiBvdXRwdXQgd2l0aCBCUEZfRklCX0xPT0tVUF9WTEFOOiBzZXQgZnJvbSB0aGVcbitcdFx0XHQgKiByZXNvbHZlZCBlZ3Jlc3MgVkxBTiBkZXZpY2UgKHNlZSB0aGUgZmxhZyk7IHplcm9lZFxuK1x0XHRcdCAqIG9uIG90aGVyIHN1Y2Nlc3NmdWwgbG9va3Vwcy4gaW5wdXQgd2l0aFxuK1x0XHRcdCAqIEJQRl9GSUJfTE9PS1VQX1ZMQU5fSU5QVVQ6IHRoZSBWTEFOIHRhZyB0byBzY29wZVxuK1x0XHRcdCAqIHRoZSBsb29rdXAgYnkuXG4rXHRcdFx0ICovXG4gXHRcdFx0X19iZTE2XHRoX3ZsYW5fcHJvdG87XG4gXHRcdFx0X19iZTE2XHRoX3ZsYW5fVENJO1xuIFx0XHR9O1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2ZpYl9sb29rdXAuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2ZpYl9sb29rdXAuY1xuaW5kZXggYmQ3NjU4OTU4MDA0MWYuLjhjYWVkOWQ0M2I5ODExIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvZmliX2xvb2t1cC5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9maWJfbG9va3VwLmNcbkBAIC0yLDYgKzIsNyBAQFxuIC8qIENvcHlyaWdodCAoYykgMjAyMyBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy4gKi9cbiBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9ydG5ldGxpbmsuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2lmX2V0aGVyLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NzeXMvdHlwZXMuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY25ldC9pZi5oXHUwMDNlXG4gXG5AQCAtMjMsNiArMjQsNyBAQFxuICNkZWZpbmUgSVBWNF9UQklEX0FERFJcdFx0XCIxNzIuMC4wLjI1NFwiXG4gI2RlZmluZSBJUFY0X1RCSURfTkVUXHRcdFwiMTcyLjAuMC4wXCJcbiAjZGVmaW5lIElQVjRfVEJJRF9EU1RcdFx0XCIxNzIuMC4wLjJcIlxuKyNkZWZpbmUgSVBWNF9UQklEX05PTkVJR0hfRFNUXHRcIjE3Mi4wLjAuNVwiXG4gI2RlZmluZSBJUFY2X1RCSURfQUREUlx0XHRcImZkMDA6OkZGRkZcIlxuICNkZWZpbmUgSVBWNl9UQklEX05FVFx0XHRcImZkMDA6OlwiXG4gI2RlZmluZSBJUFY2X1RCSURfRFNUXHRcdFwiZmQwMDo6MlwiXG5AQCAtMzcsNiArMzksNDEgQEBcbiAjZGVmaW5lIElQVjZfTE9DQUxcdFx0XCJmZDAxOjozXCJcbiAjZGVmaW5lIElQVjZfR1cxXHRcdFwiZmQwMTo6MVwiXG4gI2RlZmluZSBJUFY2X0dXMlx0XHRcImZkMDE6OjJcIlxuKyNkZWZpbmUgVkxBTl9JRFx0XHRcdDEwMFxuKyNkZWZpbmUgVkxBTl9JRkFDRVx0XHRcInZldGgxLjEwMFwiXG4rI2RlZmluZSBWTEFOX0lEX0RPV05cdFx0MTAyXG4rI2RlZmluZSBWTEFOX0lGQUNFX0RPV05cdFx0XCJ2ZXRoMS4xMDJcIlxuKyNkZWZpbmUgUUlOUV9PVVRFUl9JRkFDRVx0XCJ2ZXRoMS4yMDBcIlxuKyNkZWZpbmUgUUlOUV9JTk5FUl9JRkFDRVx0XCJ2ZXRoMS4yMDAuMzAwXCJcbisjZGVmaW5lIFZMQU5fVEFCTEVcdFx0XCIzMDBcIlxuKyNkZWZpbmUgSVBWNF9WTEFOX0lGQUNFX0FERFJcdFwiMTAuNS4wLjI1NFwiXG4rI2RlZmluZSBJUFY0X1ZMQU5fRUdSRVNTX0RTVFx0XCIxMC41LjAuMlwiXG4rI2RlZmluZSBJUFY0X1FJTlFfRFNUXHRcdFwiMTAuNy4wLjJcIlxuKyNkZWZpbmUgSVBWNF9WTEFOX0RTVFx0XHRcIjEwLjYuMC4yXCJcbisjZGVmaW5lIElQVjRfVkxBTl9HV1x0XHRcIjEwLjUuMC4xXCJcbisjZGVmaW5lIElQVjZfVkxBTl9JRkFDRV9BRERSXHRcImZkMDI6OjI1NFwiXG4rI2RlZmluZSBJUFY2X1ZMQU5fRUdSRVNTX0RTVFx0XCJmZDAyOjoyXCJcbisjZGVmaW5lIElQVjZfVkxBTl9EU1RcdFx0XCJmZDAzOjoyXCJcbisjZGVmaW5lIElQVjZfVkxBTl9HV1x0XHRcImZkMDI6OjFcIlxuKyNkZWZpbmUgVkxBTl9WSURfVU5VU0VEXHRcdDk5OVxuKyNkZWZpbmUgVlJGX0lGQUNFXHRcdFwidnJmLWJsdWVcIlxuKyNkZWZpbmUgVlJGX1RBQkxFXHRcdFwiMTAwMFwiXG4rI2RlZmluZSBWUkZfVkxBTl9JRFx0XHQxMDFcbisjZGVmaW5lIFZSRl9WTEFOX0lGQUNFXHRcdFwidmV0aDEuMTAxXCJcbisjZGVmaW5lIElQVjRfVlJGX0lGQUNFX0FERFJcdFwiMTAuOC4wLjI1NFwiXG4rI2RlZmluZSBJUFY0X1ZSRl9HV1x0XHRcIjEwLjguMC4xXCJcbisjZGVmaW5lIElQVjRfVlJGX0RTVFx0XHRcIjEwLjkuMC4yXCJcbisjZGVmaW5lIFRCSURfVkxBTl9JRFx0XHQ1MFxuKyNkZWZpbmUgVEJJRF9WTEFOX0lGQUNFXHRcdFwidmV0aDIuNTBcIlxuKyNkZWZpbmUgSVBWNF9UQklEX1ZMQU5fRFNUXHRcIjE3Mi4yLjAuMlwiXG4rI2RlZmluZSBJUFY0X0JPTkRfVkxBTl9EU1RcdFwiMTAuMTEuMC4yXCJcbisjZGVmaW5lIElQVjRfVkxBTl9NVFVfRFNUXHRcIjEwLjUuOS4yXCJcbisjZGVmaW5lIFFJTlFfQURfVkxBTl9JRFx0XHQyMDBcbisjZGVmaW5lIFFJTlFfSU5ORVJfVkxBTl9JRFx0MzAwXG4rI2RlZmluZSBCT05EX0lGQUNFXHRcdFwiYm9uZDk5XCJcbisjZGVmaW5lIEJPTkRfUE9SVFx0XHRcInZldGgzXCJcbisjZGVmaW5lIEJPTkRfUE9SVF9QRUVSXHRcdFwidmV0aDRcIlxuKyNkZWZpbmUgQk9ORF9WTEFOX0lEXHRcdDUwMFxuICNkZWZpbmUgRE1BQ1x0XHRcdFwiMTE6MTE6MTE6MTE6MTE6MTFcIlxuICNkZWZpbmUgRE1BQ19JTklUIHsgMHgxMSwgMHgxMSwgMHgxMSwgMHgxMSwgMHgxMSwgMHgxMSwgfVxuICNkZWZpbmUgRE1BQzJcdFx0XHRcIjAxOjAxOjAxOjAxOjAxOjAxXCJcbkBAIC01Miw2ICs4OSwxNyBAQCBzdHJ1Y3QgZmliX2xvb2t1cF90ZXN0IHtcbiBcdF9fdTMyIHRiaWQ7XG4gXHRfX3U4IGRtYWNbNl07XG4gXHRfX3UzMiBtYXJrO1xuK1x0LypcbitcdCAqIGlucHV0IHRhZyB3aXRoIEJQRl9GSUJfTE9PS1VQX1ZMQU5fSU5QVVQ7IGV4cGVjdGVkIG91dHB1dCB0YWdcbitcdCAqIHdpdGggQlBGX0ZJQl9MT09LVVBfVkxBTiAoY2hlY2tlZCB3aGVuIGNoZWNrX3ZsYW4gaXMgc2V0KVxuK1x0ICovXG4rXHRfX3UxNiB2bGFuX3Byb3RvO1xuK1x0X191MTYgdmxhbl9pZDtcbitcdGJvb2wgY2hlY2tfdmxhbjtcbitcdGNvbnN0IGNoYXIgKmV4cGVjdGVkX2RldjsgLyogZXhwZWN0ZWQgcGFyYW1zLVx1MDAzZWlmaW5kZXggYWZ0ZXIgbG9va3VwICovXG4rXHRjb25zdCBjaGFyICppaWY7XHQgIC8qIG92ZXJyaWRlIHRoZSBkZWZhdWx0IHZldGgxIGlucHV0IGRldmljZSAqL1xuK1x0X191MTYgdG90X2xlbjtcdFx0ICAvKiB0cmlnZ2VycyB0aGUgaW4tbG9va3VwIG10dSBjaGVjayB3aGVuIHNldCAqL1xuK1x0X191MTYgZXhwZWN0ZWRfbXR1O1x0ICAvKiBleHBlY3RlZCBtdHVfcmVzdWx0ICh1bmlvbiB3aXRoIHRvdF9sZW4pICovXG4gfTtcbiBcbiBzdGF0aWMgY29uc3Qgc3RydWN0IGZpYl9sb29rdXBfdGVzdCB0ZXN0c1tdID0ge1xuQEAgLTc5LDYgKzEyNywxNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGZpYl9sb29rdXBfdGVzdCB0ZXN0c1tdID0ge1xuIFx0ICAuZGFkZHIgPSBJUFY0X1RCSURfRFNULCAuZXhwZWN0ZWRfcmV0ID0gQlBGX0ZJQl9MS1VQX1JFVF9TVUNDRVNTLFxuIFx0ICAubG9va3VwX2ZsYWdzID0gQlBGX0ZJQl9MT09LVVBfRElSRUNUIHwgQlBGX0ZJQl9MT09LVVBfVEJJRCwgLnRiaWQgPSAxMDAsXG4gXHQgIC5kbWFjID0gRE1BQ19JTklUMiwgfSxcbitcdC8qXG4rXHQgKiBBbiBlcnJvciB0aGF0IHJldHVybnMgYWZ0ZXIgdGhlIGVncmVzcyBkZXZpY2UgaXMgcmVzb2x2ZWQgbXVzdFxuK1x0ICogcmVwb3J0IHRoZSBlZ3Jlc3MgaWZpbmRleCwgbm90IHRoZSBpbnB1dC4gVGhpcyByb3V0ZXMgZnJvbSBpbnB1dFxuK1x0ICogdmV0aDEgdmlhIHZldGgyICh0YWJsZSAxMDApIHRvIGEgZHN0IHdpdGggbm8gbmVpZ2hib3VyLCBzb1xuK1x0ICogaW5wdXQgIT0gZWdyZXNzLCBwaW5uaW5nIE5PX05FSUdIIHRvIHRoZSBlZ3Jlc3MgZGV2aWNlLlxuK1x0ICovXG4rXHR7IC5kZXNjID0gXCJJUHY0IE5PX05FSUdIIHJlcG9ydHMgdGhlIGVncmVzcyBpZmluZGV4LCBub3QgdGhlIGlucHV0XCIsXG4rXHQgIC5kYWRkciA9IElQVjRfVEJJRF9OT05FSUdIX0RTVCxcbitcdCAgLmV4cGVjdGVkX3JldCA9IEJQRl9GSUJfTEtVUF9SRVRfTk9fTkVJR0gsXG4rXHQgIC5sb29rdXBfZmxhZ3MgPSBCUEZfRklCX0xPT0tVUF9ESVJFQ1QgfCBCUEZfRklCX0xPT0tVUF9UQklELCAudGJpZCA9IDEwMCxcbitcdCAgLmV4cGVjdGVkX2RldiA9IFwidmV0aDJcIiwgfSxcbiBcdHsgLmRlc2MgPSBcIklQdjYgVEJJRCBsb29rdXAgZmFpbHVyZVwiLFxuIFx0ICAuZGFkZHIgPSBJUFY2X1RCSURfRFNULCAuZXhwZWN0ZWRfcmV0ID0gQlBGX0ZJQl9MS1VQX1JFVF9OT1RfRldERUQsXG4gXHQgIC5sb29rdXBfZmxhZ3MgPSBCUEZfRklCX0xPT0tVUF9ESVJFQ1QgfCBCUEZfRklCX0xPT0tVUF9UQklELFxuQEAgLTE0Miw2ICsyMDEsMjE4IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZmliX2xvb2t1cF90ZXN0IHRlc3RzW10gPSB7XG4gXHQgIC5leHBlY3RlZF9kc3QgPSBJUFY2X0dXMSxcbiBcdCAgLmxvb2t1cF9mbGFncyA9IEJQRl9GSUJfTE9PS1VQX1NLSVBfTkVJR0gsXG4gXHQgIC5tYXJrID0gTUFSSywgfSxcbitcdC8qIHZsYW4gZWdyZXNzIHJlc29sdXRpb24gKi9cbitcdC8qXG4rXHQgKiBJbnZhcmlhbnQgdGhlIFZMQU4tZWdyZXNzIGFybXMgam9pbnRseSBlbmZvcmNlOiBhXG4rXHQgKiBCUEZfRklCX0xPT0tVUF9WTEFOIFNVQ0NFU1MgYWx3YXlzIGNhcnJpZXMgYSBwaHlzaWNhbCxcbitcdCAqIHhtaXQtY2FwYWJsZSBpZmluZGV4IC0tIG5vIFNVQ0NFU1MgZXZlciByZXR1cm5zIGEgVkxBTi1kZXZpY2VcbitcdCAqIGlmaW5kZXguIFJlZHVjaWJsZSBhcm1zIHBpbiBpZmluZGV4ID09IHRoZSBwaHlzaWNhbCBwYXJlbnQ7IHRoZVxuK1x0ICogUWluUSBhbmQgZm9yZWlnbi1uZXRucyBhcm1zIHBpbiBWTEFOX0ZBSUxVUkUgd2l0aCBwYXJhbXMtXHUwMDNlaWZpbmRleFxuK1x0ICogbGVmdCBhdCB0aGUgaW5wdXQsIHNvIGEgcmVncmVzc2lvbiB0byBiZXN0LWVmZm9ydCAoU1VDQ0VTUyArIHRoZVxuK1x0ICogVkxBTiBpZmluZGV4KSBmYWlscyBvbmUuXG4rXHQgKi9cbitcdHsgLmRlc2MgPSBcIklQdjQgVkxBTiBlZ3Jlc3MsIG5vIGZsYWdcIixcbitcdCAgLmRhZGRyID0gSVBWNF9WTEFOX0VHUkVTU19EU1QsIC5leHBlY3RlZF9yZXQgPSBCUEZfRklCX0xLVVBfUkVUX1NVQ0NFU1MsXG4rXHQgIC5sb29rdXBfZmxhZ3MgPSBCUEZfRklCX0xPT0tVUF9TS0lQX05FSUdILFxuK1x0ICAuZXhwZWN0ZWRfZGV2ID0gVkxBTl9JRkFDRSwgLmNoZWNrX3ZsYW4gPSB0cnVlLCB9LFxuK1x0eyAuZGVzYyA9IFwiSVB2NCBWTEFOIGVncmVzcywgc2luZ2xlIFZMQU5cIixcbitcdCAgLmRhZGRyID0gSVBWNF9WTEFOX0VHUkVTU19EU1QsIC5leHBlY3RlZF9yZXQgPSBCUEZfRklCX0xLVVBfUkVUX1NVQ0NFU1MsXG4rXHQgIC5sb29rdXBfZmxhZ3MgPSBCUEZfRklCX0xPT0tVUF9WTEFOIHwgQlBGX0ZJQl9MT09LVVBfU0tJUF9ORUlHSCxcbitcdCAgLmV4cGVjdGVkX2RldiA9IFwidmV0aDFcIiwgLmNoZWNrX3ZsYW4gPSB0cnVlLFxuK1x0ICAudmxhbl9wcm90byA9IEVUSF9QXzgwMjFRLCAudmxhbl9pZCA9IFZMQU5fSUQsIH0sXG4rXHQvKlxuK1x0ICogc2tiIHBhdGggd2l0aG91dCB0b3RfbGVuOiBtdHVfcmVzdWx0IGlzIHRoZSBWTEFOIGRldmljZSdzIG10dVxuK1x0ICogKDE0MDApLCBub3QgdGhlIHBhcmVudCdzICgxNTAwKVxuK1x0ICovXG4rXHR7IC5kZXNjID0gXCJJUHY0IFZMQU4gZWdyZXNzLCBza2ItcGF0aCBtdHUgaXMgdGhlIFZMQU4gZGV2aWNlJ3Mgd2l0aG91dCB0aGUgZmxhZ1wiLFxuK1x0ICAuZGFkZHIgPSBJUFY0X1ZMQU5fRUdSRVNTX0RTVCwgLmV4cGVjdGVkX3JldCA9IEJQRl9GSUJfTEtVUF9SRVRfU1VDQ0VTUyxcbitcdCAgLmxvb2t1cF9mbGFncyA9IEJQRl9GSUJfTE9PS1VQX1NLSVBfTkVJR0gsXG4rXHQgIC5leHBlY3RlZF9kZXYgPSBWTEFOX0lGQUNFLCAuY2hlY2tfdmxhbiA9IHRydWUsIC5leHBlY3RlZF9tdHUgPSAxNDAwLCB9LFxuK1x0eyAuZGVzYyA9IFwiSVB2NCBWTEFOIGVncmVzcywgZmxhZyBzZXQgYnV0IGVncmVzcyBpcyBub3QgYSBWTEFOXCIsXG4rXHQgIC5kYWRkciA9IElQVjRfTlVEX0ZBSUxFRF9BRERSLCAuZXhwZWN0ZWRfcmV0ID0gQlBGX0ZJQl9MS1VQX1JFVF9TVUNDRVNTLFxuK1x0ICAubG9va3VwX2ZsYWdzID0gQlBGX0ZJQl9MT09LVVBfVkxBTiB8IEJQRl9GSUJfTE9PS1VQX1NLSVBfTkVJR0gsXG4rXHQgIC5leHBlY3RlZF9kZXYgPSBcInZldGgxXCIsIC5jaGVja192bGFuID0gdHJ1ZSwgfSxcbitcdHsgLmRlc2MgPSBcIklQdjQgVkxBTiBlZ3Jlc3MsIFFpblEgbm90IHJlZHVjaWJsZSAoVkxBTl9GQUlMVVJFKVwiLFxuK1x0ICAuZGFkZHIgPSBJUFY0X1FJTlFfRFNULFxuK1x0ICAuZXhwZWN0ZWRfcmV0ID0gQlBGX0ZJQl9MS1VQX1JFVF9WTEFOX0ZBSUxVUkUsXG4rXHQgIC5sb29rdXBfZmxhZ3MgPSBCUEZfRklCX0xPT0tVUF9WTEFOIHwgQlBGX0ZJQl9MT09LVVBfU0tJUF9ORUlHSCxcbitcdCAgLmV4cGVjdGVkX2RldiA9IFwidmV0aDFcIiwgLmNoZWNrX3ZsYW4gPSB0cnVlLCB9LFxuK1x0eyAuZGVzYyA9IFwiSVB2NCBRaW5RIGVncmVzcyB3aXRob3V0IHRoZSBmbGFnIChlc2NhcGUgaGF0Y2gpXCIsXG4rXHQgIC5kYWRkciA9IElQVjRfUUlOUV9EU1QsIC5leHBlY3RlZF9yZXQgPSBCUEZfRklCX0xLVVBfUkVUX1NVQ0NFU1MsXG4rXHQgIC5sb29rdXBfZmxhZ3MgPSBCUEZfRklCX0xPT0tVUF9TS0lQX05FSUdILFxuK1x0ICAuZXhwZWN0ZWRfZGV2ID0gUUlOUV9JTk5FUl9JRkFDRSwgfSxcbitcdHsgLmRlc2MgPSBcIklQdjYgVkxBTiBlZ3Jlc3MsIHNpbmdsZSBWTEFOXCIsXG4rXHQgIC5kYWRkciA9IElQVjZfVkxBTl9FR1JFU1NfRFNULCAuZXhwZWN0ZWRfcmV0ID0gQlBGX0ZJQl9MS1VQX1JFVF9TVUNDRVNTLFxuK1x0ICAubG9va3VwX2ZsYWdzID0gQlBGX0ZJQl9MT09LVVBfVkxBTiB8IEJQRl9GSUJfTE9PS1VQX1NLSVBfTkVJR0gsXG4rXHQgIC5leHBlY3RlZF9kZXYgPSBcInZldGgxXCIsIC5jaGVja192bGFuID0gdHJ1ZSxcbitcdCAgLnZsYW5fcHJvdG8gPSBFVEhfUF84MDIxUSwgLnZsYW5faWQgPSBWTEFOX0lELCB9LFxuK1x0eyAuZGVzYyA9IFwiSVB2NCBWTEFOIGVncmVzcywgbmVpZ2hib3VyIG9uIHRoZSBWTEFOIGRldmljZVwiLFxuK1x0ICAuZGFkZHIgPSBJUFY0X1ZMQU5fRUdSRVNTX0RTVCwgLmV4cGVjdGVkX3JldCA9IEJQRl9GSUJfTEtVUF9SRVRfU1VDQ0VTUyxcbitcdCAgLmxvb2t1cF9mbGFncyA9IEJQRl9GSUJfTE9PS1VQX1ZMQU4sXG4rXHQgIC5leHBlY3RlZF9kZXYgPSBcInZldGgxXCIsIC5jaGVja192bGFuID0gdHJ1ZSxcbitcdCAgLnZsYW5fcHJvdG8gPSBFVEhfUF84MDIxUSwgLnZsYW5faWQgPSBWTEFOX0lELCAuZG1hYyA9IERNQUNfSU5JVCwgfSxcbitcdHsgLmRlc2MgPSBcIklQdjQgVkxBTiBlZ3Jlc3MgaW4gT1VUUFVUIG1vZGVcIixcbitcdCAgLmRhZGRyID0gSVBWNF9WTEFOX0VHUkVTU19EU1QsIC5leHBlY3RlZF9yZXQgPSBCUEZfRklCX0xLVVBfUkVUX1NVQ0NFU1MsXG4rXHQgIC5paWYgPSBWTEFOX0lGQUNFLFxuK1x0ICAubG9va3VwX2ZsYWdzID0gQlBGX0ZJQl9MT09LVVBfT1VUUFVUIHwgQlBGX0ZJQl9MT09LVVBfVkxBTiB8XG4rXHRcdFx0ICBCUEZfRklCX0xPT0tVUF9TS0lQX05FSUdILFxuK1x0ICAuZXhwZWN0ZWRfZGV2ID0gXCJ2ZXRoMVwiLCAuY2hlY2tfdmxhbiA9IHRydWUsXG4rXHQgIC52bGFuX3Byb3RvID0gRVRIX1BfODAyMVEsIC52bGFuX2lkID0gVkxBTl9JRCwgfSxcbitcdHsgLmRlc2MgPSBcIklQdjQgVkxBTiBlZ3Jlc3Mgb3ZlciBhIGJvbmRcIixcbitcdCAgLmRhZGRyID0gSVBWNF9CT05EX1ZMQU5fRFNULCAuZXhwZWN0ZWRfcmV0ID0gQlBGX0ZJQl9MS1VQX1JFVF9TVUNDRVNTLFxuK1x0ICAubG9va3VwX2ZsYWdzID0gQlBGX0ZJQl9MT09LVVBfVkxBTiB8IEJQRl9GSUJfTE9PS1VQX1NLSVBfTkVJR0gsXG4rXHQgIC5leHBlY3RlZF9kZXYgPSBCT05EX0lGQUNFLCAuY2hlY2tfdmxhbiA9IHRydWUsXG4rXHQgIC52bGFuX3Byb3RvID0gRVRIX1BfODAyMVEsIC52bGFuX2lkID0gQk9ORF9WTEFOX0lELCB9LFxuK1x0eyAuZGVzYyA9IFwiSVB2NCBWTEFOIGVncmVzcyB2aWEgVEJJRCB0YWJsZVwiLFxuK1x0ICAuZGFkZHIgPSBJUFY0X1RCSURfVkxBTl9EU1QsIC5leHBlY3RlZF9yZXQgPSBCUEZfRklCX0xLVVBfUkVUX1NVQ0NFU1MsXG4rXHQgIC5sb29rdXBfZmxhZ3MgPSBCUEZfRklCX0xPT0tVUF9ESVJFQ1QgfCBCUEZfRklCX0xPT0tVUF9UQklEIHxcbitcdFx0XHQgIEJQRl9GSUJfTE9PS1VQX1ZMQU4gfCBCUEZfRklCX0xPT0tVUF9TS0lQX05FSUdILFxuK1x0ICAudGJpZCA9IDEwMCxcbitcdCAgLmV4cGVjdGVkX2RldiA9IFwidmV0aDJcIiwgLmNoZWNrX3ZsYW4gPSB0cnVlLFxuK1x0ICAudmxhbl9wcm90byA9IEVUSF9QXzgwMjFRLCAudmxhbl9pZCA9IFRCSURfVkxBTl9JRCwgfSxcbitcdHsgLmRlc2MgPSBcIklQdjQgVkxBTiBlZ3Jlc3MsIHN1Y2Nlc3Mgd3JpdGVzIG10dV9yZXN1bHQgd2l0aCB0aGUgc3dhcFwiLFxuK1x0ICAuZGFkZHIgPSBJUFY0X1ZMQU5fTVRVX0RTVCwgLmV4cGVjdGVkX3JldCA9IEJQRl9GSUJfTEtVUF9SRVRfU1VDQ0VTUyxcbitcdCAgLnRvdF9sZW4gPSA1MDAsIC5leHBlY3RlZF9tdHUgPSAxMDAwLFxuK1x0ICAubG9va3VwX2ZsYWdzID0gQlBGX0ZJQl9MT09LVVBfVkxBTiB8IEJQRl9GSUJfTE9PS1VQX1NLSVBfTkVJR0gsXG4rXHQgIC5leHBlY3RlZF9kZXYgPSBcInZldGgxXCIsIC5jaGVja192bGFuID0gdHJ1ZSxcbitcdCAgLnZsYW5fcHJvdG8gPSBFVEhfUF84MDIxUSwgLnZsYW5faWQgPSBWTEFOX0lELCB9LFxuK1x0eyAuZGVzYyA9IFwiSVB2NCBWTEFOIGVncmVzcywgRlJBR19ORUVERUQgcmVwb3J0cyBtdHUsIHN3YXAgdW53cml0dGVuXCIsXG4rXHQgIC5kYWRkciA9IElQVjRfVkxBTl9NVFVfRFNULCAuZXhwZWN0ZWRfcmV0ID0gQlBGX0ZJQl9MS1VQX1JFVF9GUkFHX05FRURFRCxcbitcdCAgLnRvdF9sZW4gPSAxNDAwLCAuZXhwZWN0ZWRfbXR1ID0gMTAwMCxcbitcdCAgLmxvb2t1cF9mbGFncyA9IEJQRl9GSUJfTE9PS1VQX1ZMQU4gfCBCUEZfRklCX0xPT0tVUF9TS0lQX05FSUdILFxuK1x0ICAuZXhwZWN0ZWRfZGV2ID0gXCJ2ZXRoMVwiLCAuY2hlY2tfdmxhbiA9IHRydWUsIH0sXG4rXHQvKiB2bGFuIHRhZyBhcyBsb29rdXAgaW5wdXQgKi9cbitcdHsgLmRlc2MgPSBcIklQdjQgVkxBTiBpbnB1dCwgbm8gZmxhZ1wiLFxuK1x0ICAuZGFkZHIgPSBJUFY0X1ZMQU5fRFNULCAuZXhwZWN0ZWRfcmV0ID0gQlBGX0ZJQl9MS1VQX1JFVF9TVUNDRVNTLFxuK1x0ICAuZXhwZWN0ZWRfZHN0ID0gSVBWNF9HVzEsXG4rXHQgIC5sb29rdXBfZmxhZ3MgPSBCUEZfRklCX0xPT0tVUF9TS0lQX05FSUdILCB9LFxuK1x0eyAuZGVzYyA9IFwiSVB2NCBWTEFOIGlucHV0LCB0YWcgc2VsZWN0cyBzdWJpbnRlcmZhY2Ugcm91dGVcIixcbitcdCAgLmRhZGRyID0gSVBWNF9WTEFOX0RTVCwgLmV4cGVjdGVkX3JldCA9IEJQRl9GSUJfTEtVUF9SRVRfU1VDQ0VTUyxcbitcdCAgLmV4cGVjdGVkX2RzdCA9IElQVjRfVkxBTl9HVywgLmV4cGVjdGVkX2RldiA9IFZMQU5fSUZBQ0UsXG4rXHQgIC5sb29rdXBfZmxhZ3MgPSBCUEZfRklCX0xPT0tVUF9WTEFOX0lOUFVUIHwgQlBGX0ZJQl9MT09LVVBfU0tJUF9ORUlHSCxcbitcdCAgLnZsYW5fcHJvdG8gPSBFVEhfUF84MDIxUSwgLnZsYW5faWQgPSBWTEFOX0lELCB9LFxuK1x0eyAuZGVzYyA9IFwiSVB2NiBWTEFOIGlucHV0LCB0YWcgc2VsZWN0cyBzdWJpbnRlcmZhY2Ugcm91dGVcIixcbitcdCAgLmRhZGRyID0gSVBWNl9WTEFOX0RTVCwgLmV4cGVjdGVkX3JldCA9IEJQRl9GSUJfTEtVUF9SRVRfU1VDQ0VTUyxcbitcdCAgLmV4cGVjdGVkX2RzdCA9IElQVjZfVkxBTl9HVywgLmV4cGVjdGVkX2RldiA9IFZMQU5fSUZBQ0UsXG4rXHQgIC5sb29rdXBfZmxhZ3MgPSBCUEZfRklCX0xPT0tVUF9WTEFOX0lOUFVUIHwgQlBGX0ZJQl9MT09LVVBfU0tJUF9ORUlHSCxcbitcdCAgLnZsYW5fcHJvdG8gPSBFVEhfUF84MDIxUSwgLnZsYW5faWQgPSBWTEFOX0lELCB9LFxuK1x0eyAuZGVzYyA9IFwiSVB2NCBWTEFOIGlucHV0IGFuZCBlZ3Jlc3MgY29tYmluZWRcIixcbitcdCAgLmRhZGRyID0gSVBWNF9WTEFOX0RTVCwgLmV4cGVjdGVkX3JldCA9IEJQRl9GSUJfTEtVUF9SRVRfU1VDQ0VTUyxcbitcdCAgLmV4cGVjdGVkX2RzdCA9IElQVjRfVkxBTl9HVywgLmV4cGVjdGVkX2RldiA9IFwidmV0aDFcIixcbitcdCAgLmNoZWNrX3ZsYW4gPSB0cnVlLFxuK1x0ICAubG9va3VwX2ZsYWdzID0gQlBGX0ZJQl9MT09LVVBfVkxBTl9JTlBVVCB8IEJQRl9GSUJfTE9PS1VQX1ZMQU4gfFxuK1x0XHRcdCAgQlBGX0ZJQl9MT09LVVBfU0tJUF9ORUlHSCxcbitcdCAgLnZsYW5fcHJvdG8gPSBFVEhfUF84MDIxUSwgLnZsYW5faWQgPSBWTEFOX0lELCB9LFxuK1x0eyAuZGVzYyA9IFwiSVB2NCBWTEFOIGlucHV0LCBuZWlnaGJvdXIgcmVzb2x2ZWQgb24gdGhlIHJvdXRlXCIsXG4rXHQgIC5kYWRkciA9IElQVjRfVkxBTl9EU1QsIC5leHBlY3RlZF9yZXQgPSBCUEZfRklCX0xLVVBfUkVUX1NVQ0NFU1MsXG4rXHQgIC5leHBlY3RlZF9kc3QgPSBJUFY0X1ZMQU5fR1csIC5leHBlY3RlZF9kZXYgPSBWTEFOX0lGQUNFLFxuK1x0ICAubG9va3VwX2ZsYWdzID0gQlBGX0ZJQl9MT09LVVBfVkxBTl9JTlBVVCxcbitcdCAgLnZsYW5fcHJvdG8gPSBFVEhfUF84MDIxUSwgLnZsYW5faWQgPSBWTEFOX0lELCAuZG1hYyA9IERNQUNfSU5JVDIsIH0sXG4rXHR7IC5kZXNjID0gXCJJUHY0IFZMQU4gaW5wdXQsIHNvdXJjZSBhZGRyZXNzIGZyb20gdGhlIHN1YmludGVyZmFjZVwiLFxuK1x0ICAuZGFkZHIgPSBJUFY0X1ZMQU5fRFNULCAuZXhwZWN0ZWRfcmV0ID0gQlBGX0ZJQl9MS1VQX1JFVF9TVUNDRVNTLFxuK1x0ICAuZXhwZWN0ZWRfc3JjID0gSVBWNF9WTEFOX0lGQUNFX0FERFIsXG4rXHQgIC5sb29rdXBfZmxhZ3MgPSBCUEZfRklCX0xPT0tVUF9WTEFOX0lOUFVUIHwgQlBGX0ZJQl9MT09LVVBfU1JDIHxcbitcdFx0XHQgIEJQRl9GSUJfTE9PS1VQX1NLSVBfTkVJR0gsXG4rXHQgIC52bGFuX3Byb3RvID0gRVRIX1BfODAyMVEsIC52bGFuX2lkID0gVkxBTl9JRCwgfSxcbitcdC8qXG4rXHQgKiBWUkY6IHRoZSByZXNvbHZlZCBzdWJpbnRlcmZhY2UgaXMgZW5zbGF2ZWQsIHNvIHRoZSBsM21kZXYgcnVsZVxuK1x0ICogKGZ1bGwgbG9va3VwKSBhbmQgbDNtZGV2X2ZpYl90YWJsZV9yY3UoKSAoRElSRUNUKSBtdXN0IHNlbGVjdFxuK1x0ICogdGhlIFZSRiB0YWJsZSBmcm9tIHRoZSByZXNvbHZlZCBpbmdyZXNzXG4rXHQgKi9cbitcdHsgLmRlc2MgPSBcIklQdjQgVkxBTiBpbnB1dCwgVlJGIHN1YmludGVyZmFjZSwgbm8gZmxhZ1wiLFxuK1x0ICAuZGFkZHIgPSBJUFY0X1ZSRl9EU1QsIC5leHBlY3RlZF9yZXQgPSBCUEZfRklCX0xLVVBfUkVUX1NVQ0NFU1MsXG4rXHQgIC5leHBlY3RlZF9kc3QgPSBJUFY0X0dXMSxcbitcdCAgLmxvb2t1cF9mbGFncyA9IEJQRl9GSUJfTE9PS1VQX1NLSVBfTkVJR0gsIH0sXG4rXHR7IC5kZXNjID0gXCJJUHY0IFZMQU4gaW5wdXQsIHRhZyBzZWxlY3RzIFZSRiB0YWJsZVwiLFxuK1x0ICAuZGFkZHIgPSBJUFY0X1ZSRl9EU1QsIC5leHBlY3RlZF9yZXQgPSBCUEZfRklCX0xLVVBfUkVUX1NVQ0NFU1MsXG4rXHQgIC5leHBlY3RlZF9kc3QgPSBJUFY0X1ZSRl9HVywgLmV4cGVjdGVkX2RldiA9IFZSRl9WTEFOX0lGQUNFLFxuK1x0ICAubG9va3VwX2ZsYWdzID0gQlBGX0ZJQl9MT09LVVBfVkxBTl9JTlBVVCB8IEJQRl9GSUJfTE9PS1VQX1NLSVBfTkVJR0gsXG4rXHQgIC52bGFuX3Byb3RvID0gRVRIX1BfODAyMVEsIC52bGFuX2lkID0gVlJGX1ZMQU5fSUQsIH0sXG4rXHR7IC5kZXNjID0gXCJJUHY0IFZMQU4gaW5wdXQsIERJUkVDVCB1c2VzIFZSRiB0YWJsZSBmcm9tIHJlc29sdmVkIGluZ3Jlc3NcIixcbitcdCAgLmRhZGRyID0gSVBWNF9WUkZfRFNULCAuZXhwZWN0ZWRfcmV0ID0gQlBGX0ZJQl9MS1VQX1JFVF9TVUNDRVNTLFxuK1x0ICAuZXhwZWN0ZWRfZHN0ID0gSVBWNF9WUkZfR1csIC5leHBlY3RlZF9kZXYgPSBWUkZfVkxBTl9JRkFDRSxcbitcdCAgLmxvb2t1cF9mbGFncyA9IEJQRl9GSUJfTE9PS1VQX1ZMQU5fSU5QVVQgfCBCUEZfRklCX0xPT0tVUF9ESVJFQ1QgfFxuK1x0XHRcdCAgQlBGX0ZJQl9MT09LVVBfU0tJUF9ORUlHSCxcbitcdCAgLnZsYW5fcHJvdG8gPSBFVEhfUF84MDIxUSwgLnZsYW5faWQgPSBWUkZfVkxBTl9JRCwgfSxcbitcdC8qXG4rXHQgKiBmYWlsdXJlIGFybXMgYWxzbyBhc3NlcnQgcGFyYW1zIGlzIGxlZnQgdW50b3VjaGVkOiBpZmluZGV4IHN0aWxsXG4rXHQgKiBuYW1lcyB0aGUgcGh5c2ljYWwgZGV2aWNlIGFuZCB0aGUgaW5wdXQgdGFnIGJ5dGVzIHN1cnZpdmVcbitcdCAqL1xuK1x0eyAuZGVzYyA9IFwiSVB2NCBWTEFOIGlucHV0LCBpbnZhbGlkIHByb3RvXCIsXG4rXHQgIC5kYWRkciA9IElQVjRfVkxBTl9EU1QsIC5leHBlY3RlZF9yZXQgPSAtRUlOVkFMLFxuK1x0ICAuZXhwZWN0ZWRfZGV2ID0gXCJ2ZXRoMVwiLCAuY2hlY2tfdmxhbiA9IHRydWUsXG4rXHQgIC5sb29rdXBfZmxhZ3MgPSBCUEZfRklCX0xPT0tVUF9WTEFOX0lOUFVUIHwgQlBGX0ZJQl9MT09LVVBfU0tJUF9ORUlHSCxcbitcdCAgLnZsYW5fcHJvdG8gPSAweDEyMzQsIC52bGFuX2lkID0gVkxBTl9JRCwgfSxcbitcdHsgLmRlc2MgPSBcIklQdjQgVkxBTiBpbnB1dCwgdW5tYXRjaGVkIFZJRFwiLFxuK1x0ICAuZGFkZHIgPSBJUFY0X1ZMQU5fRFNULCAuZXhwZWN0ZWRfcmV0ID0gQlBGX0ZJQl9MS1VQX1JFVF9OT1RfRldERUQsXG4rXHQgIC5leHBlY3RlZF9kZXYgPSBcInZldGgxXCIsIC5jaGVja192bGFuID0gdHJ1ZSxcbitcdCAgLmxvb2t1cF9mbGFncyA9IEJQRl9GSUJfTE9PS1VQX1ZMQU5fSU5QVVQgfCBCUEZfRklCX0xPT0tVUF9TS0lQX05FSUdILFxuK1x0ICAudmxhbl9wcm90byA9IEVUSF9QXzgwMjFRLCAudmxhbl9pZCA9IFZMQU5fVklEX1VOVVNFRCwgfSxcbitcdHsgLmRlc2MgPSBcIklQdjQgVkxBTiBpbnB1dCwgc3ViaW50ZXJmYWNlIGRvd25cIixcbitcdCAgLmRhZGRyID0gSVBWNF9WTEFOX0RTVCwgLmV4cGVjdGVkX3JldCA9IEJQRl9GSUJfTEtVUF9SRVRfTk9UX0ZXREVELFxuK1x0ICAuZXhwZWN0ZWRfZGV2ID0gXCJ2ZXRoMVwiLCAuY2hlY2tfdmxhbiA9IHRydWUsXG4rXHQgIC5sb29rdXBfZmxhZ3MgPSBCUEZfRklCX0xPT0tVUF9WTEFOX0lOUFVUIHwgQlBGX0ZJQl9MT09LVVBfU0tJUF9ORUlHSCxcbitcdCAgLnZsYW5fcHJvdG8gPSBFVEhfUF84MDIxUSwgLnZsYW5faWQgPSBWTEFOX0lEX0RPV04sIH0sXG4rXHQvKlxuK1x0ICogdGhlIHJlc29sdmVyIHJ1bnMgYmVmb3JlIHRoZSBmb3J3YXJkaW5nIGNoZWNrLCBzbyBvbiBkZXZpY2VzXG4rXHQgKiB3aXRoIGZvcndhcmRpbmcgb2ZmIEZXRF9ESVNBQkxFRCAobm90IE5PVF9GV0RFRCkgcHJvdmVzIHRoZSB0YWdcbitcdCAqIHJlc29sdmVkIHRvIHRoYXQgZGV2aWNlIGFuZCB0aGUgbG9va3VwIHVzZWQgaXQgYXMgaW5ncmVzc1xuK1x0ICovXG4rXHR7IC5kZXNjID0gXCJJUHY0IFZMQU4gaW5wdXQsIDgwMi4xYWQgdGFnXCIsXG4rXHQgIC5kYWRkciA9IElQVjRfVkxBTl9EU1QsIC5leHBlY3RlZF9yZXQgPSBCUEZfRklCX0xLVVBfUkVUX0ZXRF9ESVNBQkxFRCxcbitcdCAgLmxvb2t1cF9mbGFncyA9IEJQRl9GSUJfTE9PS1VQX1ZMQU5fSU5QVVQgfCBCUEZfRklCX0xPT0tVUF9TS0lQX05FSUdILFxuK1x0ICAudmxhbl9wcm90byA9IEVUSF9QXzgwMjFBRCwgLnZsYW5faWQgPSBRSU5RX0FEX1ZMQU5fSUQsIH0sXG4rXHR7IC5kZXNjID0gXCJJUHY0IFZMQU4gaW5wdXQsIFBDUCBhbmQgREVJIGJpdHMgaWdub3JlZCBpbiBUQ0lcIixcbitcdCAgLmRhZGRyID0gSVBWNF9WTEFOX0RTVCwgLmV4cGVjdGVkX3JldCA9IEJQRl9GSUJfTEtVUF9SRVRfU1VDQ0VTUyxcbitcdCAgLmV4cGVjdGVkX2RzdCA9IElQVjRfVkxBTl9HVyxcbitcdCAgLmxvb2t1cF9mbGFncyA9IEJQRl9GSUJfTE9PS1VQX1ZMQU5fSU5QVVQgfCBCUEZfRklCX0xPT0tVUF9TS0lQX05FSUdILFxuK1x0ICAudmxhbl9wcm90byA9IEVUSF9QXzgwMjFRLCAudmxhbl9pZCA9IDB4ZTAwMCB8IFZMQU5fSUQsIH0sXG4rXHR7IC5kZXNjID0gXCJJUHY0IFZMQU4gaW5wdXQsIGlubmVyIFFpblEgZGV2aWNlIGZyb20gVkxBTiBpZmluZGV4XCIsXG4rXHQgIC5kYWRkciA9IElQVjRfVkxBTl9EU1QsIC5leHBlY3RlZF9yZXQgPSBCUEZfRklCX0xLVVBfUkVUX0ZXRF9ESVNBQkxFRCxcbitcdCAgLmlpZiA9IFFJTlFfT1VURVJfSUZBQ0UsXG4rXHQgIC5sb29rdXBfZmxhZ3MgPSBCUEZfRklCX0xPT0tVUF9WTEFOX0lOUFVUIHwgQlBGX0ZJQl9MT09LVVBfU0tJUF9ORUlHSCxcbitcdCAgLnZsYW5fcHJvdG8gPSBFVEhfUF84MDIxUSwgLnZsYW5faWQgPSBRSU5RX0lOTkVSX1ZMQU5fSUQsIH0sXG4rXHQvKlxuK1x0ICogYm9uZGluZzogdGhlIFZMQU5zIGxpdmUgb24gdGhlIG1hc3RlciwgYXMgb24gcmVjZWl2ZSwgd2hlcmUgdGhlXG4rXHQgKiBmcmFtZSBpcyBzdGVlcmVkIHRvIHRoZSBtYXN0ZXIgYmVmb3JlIFZMQU4gcHJvY2Vzc2luZzsgYSBwb3J0XG4rXHQgKiBpZmluZGV4IGRvZXMgbm90IG1hdGNoIChwb3J0cyBjYXJyeSB2aWQgc3RhdGUgYnV0IG5vIFZMQU4gZGV2cylcbitcdCAqL1xuK1x0eyAuZGVzYyA9IFwiSVB2NCBWTEFOIGlucHV0LCB0YWcgb24gYm9uZCBtYXN0ZXIgcmVzb2x2ZXNcIixcbitcdCAgLmRhZGRyID0gSVBWNF9WTEFOX0RTVCwgLmV4cGVjdGVkX3JldCA9IEJQRl9GSUJfTEtVUF9SRVRfRldEX0RJU0FCTEVELFxuK1x0ICAuaWlmID0gQk9ORF9JRkFDRSxcbitcdCAgLmxvb2t1cF9mbGFncyA9IEJQRl9GSUJfTE9PS1VQX1ZMQU5fSU5QVVQgfCBCUEZfRklCX0xPT0tVUF9TS0lQX05FSUdILFxuK1x0ICAudmxhbl9wcm90byA9IEVUSF9QXzgwMjFRLCAudmxhbl9pZCA9IEJPTkRfVkxBTl9JRCwgfSxcbitcdHsgLmRlc2MgPSBcIklQdjQgVkxBTiBpbnB1dCwgdGFnIG9uIGJvbmQgcG9ydCBkb2VzIG5vdCBtYXRjaFwiLFxuK1x0ICAuZGFkZHIgPSBJUFY0X1ZMQU5fRFNULCAuZXhwZWN0ZWRfcmV0ID0gQlBGX0ZJQl9MS1VQX1JFVF9OT1RfRldERUQsXG4rXHQgIC5paWYgPSBCT05EX1BPUlQsIC5leHBlY3RlZF9kZXYgPSBCT05EX1BPUlQsIC5jaGVja192bGFuID0gdHJ1ZSxcbitcdCAgLmxvb2t1cF9mbGFncyA9IEJQRl9GSUJfTE9PS1VQX1ZMQU5fSU5QVVQgfCBCUEZfRklCX0xPT0tVUF9TS0lQX05FSUdILFxuK1x0ICAudmxhbl9wcm90byA9IEVUSF9QXzgwMjFRLCAudmxhbl9pZCA9IEJPTkRfVkxBTl9JRCwgfSxcbitcdHsgLmRlc2MgPSBcIklQdjYgVkxBTiBpbnB1dCwgaW52YWxpZCBwcm90b1wiLFxuK1x0ICAuZGFkZHIgPSBJUFY2X1ZMQU5fRFNULCAuZXhwZWN0ZWRfcmV0ID0gLUVJTlZBTCxcbitcdCAgLmV4cGVjdGVkX2RldiA9IFwidmV0aDFcIiwgLmNoZWNrX3ZsYW4gPSB0cnVlLFxuK1x0ICAubG9va3VwX2ZsYWdzID0gQlBGX0ZJQl9MT09LVVBfVkxBTl9JTlBVVCB8IEJQRl9GSUJfTE9PS1VQX1NLSVBfTkVJR0gsXG4rXHQgIC52bGFuX3Byb3RvID0gMHgxMjM0LCAudmxhbl9pZCA9IFZMQU5fSUQsIH0sXG4rXHR7IC5kZXNjID0gXCJJUHY0IFZMQU4gaW5wdXQsIFZJRCAwIHByaW9yaXR5IHRhZyBmYWlscyBjbG9zZWRcIixcbitcdCAgLmRhZGRyID0gSVBWNF9WTEFOX0RTVCwgLmV4cGVjdGVkX3JldCA9IEJQRl9GSUJfTEtVUF9SRVRfTk9UX0ZXREVELFxuK1x0ICAuZXhwZWN0ZWRfZGV2ID0gXCJ2ZXRoMVwiLCAuY2hlY2tfdmxhbiA9IHRydWUsXG4rXHQgIC5sb29rdXBfZmxhZ3MgPSBCUEZfRklCX0xPT0tVUF9WTEFOX0lOUFVUIHwgQlBGX0ZJQl9MT09LVVBfU0tJUF9ORUlHSCxcbitcdCAgLnZsYW5fcHJvdG8gPSBFVEhfUF84MDIxUSwgLnZsYW5faWQgPSAwLCB9LFxuK1x0eyAuZGVzYyA9IFwiSVB2NiBWTEFOIGlucHV0LCB1bm1hdGNoZWQgVklEXCIsXG4rXHQgIC5kYWRkciA9IElQVjZfVkxBTl9EU1QsIC5leHBlY3RlZF9yZXQgPSBCUEZfRklCX0xLVVBfUkVUX05PVF9GV0RFRCxcbitcdCAgLmV4cGVjdGVkX2RldiA9IFwidmV0aDFcIiwgLmNoZWNrX3ZsYW4gPSB0cnVlLFxuK1x0ICAubG9va3VwX2ZsYWdzID0gQlBGX0ZJQl9MT09LVVBfVkxBTl9JTlBVVCB8IEJQRl9GSUJfTE9PS1VQX1NLSVBfTkVJR0gsXG4rXHQgIC52bGFuX3Byb3RvID0gRVRIX1BfODAyMVEsIC52bGFuX2lkID0gVkxBTl9WSURfVU5VU0VELCB9LFxuK1x0eyAuZGVzYyA9IFwidW5rbm93biBmbGFnIGJpdCByZWplY3RlZFwiLFxuK1x0ICAuZGFkZHIgPSBJUFY0X1ZMQU5fRFNULCAuZXhwZWN0ZWRfcmV0ID0gLUVJTlZBTCxcbitcdCAgLmxvb2t1cF9mbGFncyA9ICgxIFx1MDAzY1x1MDAzYyAxNCkgfCBCUEZfRklCX0xPT0tVUF9TS0lQX05FSUdILCB9LFxuK1x0eyAuZGVzYyA9IFwiSVB2NCBWTEFOIGlucHV0IHJlamVjdGVkIHdpdGggVEJJRFwiLFxuK1x0ICAuZGFkZHIgPSBJUFY0X1ZMQU5fRFNULCAuZXhwZWN0ZWRfcmV0ID0gLUVJTlZBTCxcbitcdCAgLmxvb2t1cF9mbGFncyA9IEJQRl9GSUJfTE9PS1VQX1ZMQU5fSU5QVVQgfCBCUEZfRklCX0xPT0tVUF9UQklELFxuK1x0ICAudmxhbl9wcm90byA9IEVUSF9QXzgwMjFRLCAudmxhbl9pZCA9IFZMQU5fSUQsIH0sXG4rXHR7IC5kZXNjID0gXCJJUHY0IFZMQU4gaW5wdXQgcmVqZWN0ZWQgd2l0aCBPVVRQVVRcIixcbitcdCAgLmRhZGRyID0gSVBWNF9WTEFOX0RTVCwgLmV4cGVjdGVkX3JldCA9IC1FSU5WQUwsXG4rXHQgIC5sb29rdXBfZmxhZ3MgPSBCUEZfRklCX0xPT0tVUF9WTEFOX0lOUFVUIHwgQlBGX0ZJQl9MT09LVVBfT1VUUFVULFxuK1x0ICAudmxhbl9wcm90byA9IEVUSF9QXzgwMjFRLCAudmxhbl9pZCA9IFZMQU5fSUQsIH0sXG4gfTtcbiBcbiBzdGF0aWMgaW50IHNldHVwX25ldG5zKHZvaWQpXG5AQCAtMjA0LDYgKzQ3NSwxMTAgQEAgc3RhdGljIGludCBzZXR1cF9uZXRucyh2b2lkKVxuIFx0U1lTKGZhaWwsIFwiaXAgcnVsZSBhZGQgcHJpbyAyIGZ3bWFyayAlZCBsb29rdXAgJXNcIiwgTUFSSywgTUFSS19UQUJMRSk7XG4gXHRTWVMoZmFpbCwgXCJpcCAtNiBydWxlIGFkZCBwcmlvIDIgZndtYXJrICVkIGxvb2t1cCAlc1wiLCBNQVJLLCBNQVJLX1RBQkxFKTtcbiBcbitcdC8qXG4rXHQgKiBTZXR1cCBmb3IgdmxhbiB0ZXN0czogYSBzdWJpbnRlcmZhY2UgZm9yIGVncmVzcyByZXNvbHV0aW9uIGFuZFxuK1x0ICogdGFnLWFzLWlucHV0LCBhIFFpblEgc3RhY2ssIGFuZCBhbiBpaWYgcnVsZSBzbyB0aGUgaW5wdXQgdGVzdHNcbitcdCAqIG9ic2VydmUgd2hpY2ggZGV2aWNlIHRoZSBsb29rdXAgdXNlZCBhcyBpbmdyZXNzLlxuK1x0ICovXG4rXHRTWVMoZmFpbCwgXCJpcCBsaW5rIGFkZCBsaW5rIHZldGgxIG5hbWUgJXMgdHlwZSB2bGFuIGlkICVkXCIsXG4rXHQgICAgVkxBTl9JRkFDRSwgVkxBTl9JRCk7XG4rXHRTWVMoZmFpbCwgXCJpcCBsaW5rIHNldCBkZXYgJXMgdXBcIiwgVkxBTl9JRkFDRSk7XG4rXHQvKlxuK1x0ICogbG93ZXIgdGhhbiB0aGUgdmV0aDEgcGFyZW50ICgxNTAwKTogdGhlIHNrYi1wYXRoIG10dSBjaGVjayB1c2VzIHRoZVxuK1x0ICogRklCIHJlc3VsdCAoVkxBTikgZGV2aWNlLCBzbyBtdHVfcmVzdWx0IGlzIHRoaXMgdmFsdWUgd2l0aCBvclxuK1x0ICogd2l0aG91dCB0aGUgZWdyZXNzIHN3YXAsIHdoaWNoIHR3byBhcm1zIGJlbG93IHBpblxuK1x0ICovXG4rXHRTWVMoZmFpbCwgXCJpcCBsaW5rIHNldCBkZXYgJXMgbXR1IDE0MDBcIiwgVkxBTl9JRkFDRSk7XG4rXHRTWVMoZmFpbCwgXCJpcCBhZGRyIGFkZCAlcy8yNCBkZXYgJXNcIiwgSVBWNF9WTEFOX0lGQUNFX0FERFIsIFZMQU5fSUZBQ0UpO1xuK1x0U1lTKGZhaWwsIFwiaXAgYWRkciBhZGQgJXMvNjQgZGV2ICVzIG5vZGFkXCIsIElQVjZfVkxBTl9JRkFDRV9BRERSLCBWTEFOX0lGQUNFKTtcbitcbitcdC8qXG4rXHQgKiBzdGF5cyBkb3duOiB0aGUgaW5wdXQgZmxhZyBtdXN0IHRyZWF0IGl0cyB0YWcgdGhlIHdheSByZWFsXG4rXHQgKiBpbmdyZXNzIHRyZWF0cyBhIGZyYW1lIGFycml2aW5nIG9uIGEgZG93biBWTEFOIGRldmljZSAoZHJvcClcbitcdCAqL1xuK1x0U1lTKGZhaWwsIFwiaXAgbGluayBhZGQgbGluayB2ZXRoMSBuYW1lICVzIHR5cGUgdmxhbiBpZCAlZFwiLFxuK1x0ICAgIFZMQU5fSUZBQ0VfRE9XTiwgVkxBTl9JRF9ET1dOKTtcbitcbitcdGVyciA9IHdyaXRlX3N5c2N0bChcIi9wcm9jL3N5cy9uZXQvaXB2NC9jb25mL1wiIFZMQU5fSUZBQ0UgXCIvZm9yd2FyZGluZ1wiLCBcIjFcIik7XG4rXHRpZiAoIUFTU0VSVF9PSyhlcnIsIFwid3JpdGVfc3lzY3RsKG5ldC5pcHY0LmNvbmYuXCIgVkxBTl9JRkFDRSBcIi5mb3J3YXJkaW5nKVwiKSlcbitcdFx0Z290byBmYWlsO1xuK1xuK1x0ZXJyID0gd3JpdGVfc3lzY3RsKFwiL3Byb2Mvc3lzL25ldC9pcHY2L2NvbmYvXCIgVkxBTl9JRkFDRSBcIi9mb3J3YXJkaW5nXCIsIFwiMVwiKTtcbitcdGlmICghQVNTRVJUX09LKGVyciwgXCJ3cml0ZV9zeXNjdGwobmV0LmlwdjYuY29uZi5cIiBWTEFOX0lGQUNFIFwiLmZvcndhcmRpbmcpXCIpKVxuK1x0XHRnb3RvIGZhaWw7XG4rXG4rXHRTWVMoZmFpbCwgXCJpcCBsaW5rIGFkZCBsaW5rIHZldGgxIG5hbWUgJXMgdHlwZSB2bGFuIHByb3RvIDgwMi4xYWQgaWQgMjAwXCIsXG4rXHQgICAgUUlOUV9PVVRFUl9JRkFDRSk7XG4rXHRTWVMoZmFpbCwgXCJpcCBsaW5rIGFkZCBsaW5rICVzIG5hbWUgJXMgdHlwZSB2bGFuIGlkIDMwMFwiLFxuK1x0ICAgIFFJTlFfT1VURVJfSUZBQ0UsIFFJTlFfSU5ORVJfSUZBQ0UpO1xuK1x0U1lTKGZhaWwsIFwiaXAgbGluayBzZXQgZGV2ICVzIHVwXCIsIFFJTlFfT1VURVJfSUZBQ0UpO1xuK1x0U1lTKGZhaWwsIFwiaXAgbGluayBzZXQgZGV2ICVzIHVwXCIsIFFJTlFfSU5ORVJfSUZBQ0UpO1xuK1x0U1lTKGZhaWwsIFwiaXAgcm91dGUgYWRkICVzLzMyIGRldiAlc1wiLCBJUFY0X1FJTlFfRFNULCBRSU5RX0lOTkVSX0lGQUNFKTtcbitcbitcdFNZUyhmYWlsLCBcImlwIHJvdXRlIGFkZCAlcy8zMiB2aWEgJXNcIiwgSVBWNF9WTEFOX0RTVCwgSVBWNF9HVzEpO1xuK1x0U1lTKGZhaWwsIFwiaXAgcm91dGUgYWRkIHRhYmxlICVzICVzLzMyIHZpYSAlc1wiLFxuK1x0ICAgIFZMQU5fVEFCTEUsIElQVjRfVkxBTl9EU1QsIElQVjRfVkxBTl9HVyk7XG4rXHRTWVMoZmFpbCwgXCJpcCBydWxlIGFkZCBwcmlvIDMgaWlmICVzIGxvb2t1cCAlc1wiLCBWTEFOX0lGQUNFLCBWTEFOX1RBQkxFKTtcbitcdFNZUyhmYWlsLCBcImlwIC02IHJvdXRlIGFkZCAlcy8xMjggdmlhICVzXCIsIElQVjZfVkxBTl9EU1QsIElQVjZfR1cxKTtcbitcdFNZUyhmYWlsLCBcImlwIC02IHJvdXRlIGFkZCB0YWJsZSAlcyAlcy8xMjggdmlhICVzXCIsXG4rXHQgICAgVkxBTl9UQUJMRSwgSVBWNl9WTEFOX0RTVCwgSVBWNl9WTEFOX0dXKTtcbitcdFNZUyhmYWlsLCBcImlwIC02IHJ1bGUgYWRkIHByaW8gMyBpaWYgJXMgbG9va3VwICVzXCIsIFZMQU5fSUZBQ0UsIFZMQU5fVEFCTEUpO1xuK1xuK1x0LypcbitcdCAqIGEgYm9uZCB3aXRoIG9uZSBwb3J0IGFuZCBhIFZMQU4gb24gdGhlIGJvbmQ6IFZMQU5zIG9uIGEgYm9uZFxuK1x0ICogbGl2ZSBvbiB0aGUgbWFzdGVyLCBzbyByZXNvbHV0aW9uIHN1Y2NlZWRzIGZvciB0aGUgbWFzdGVyJ3NcbitcdCAqIGlmaW5kZXggYW5kIGZhaWxzIGNsb3NlZCBmb3IgYSBwb3J0J3MsIG1hdGNoaW5nIHJlY2VpdmUsIHdoaWNoXG4rXHQgKiBzdGVlcnMgdGhlIGZyYW1lIHRvIHRoZSBtYXN0ZXIgYmVmb3JlIFZMQU4gcHJvY2Vzc2luZ1xuK1x0ICovXG4rXHRTWVMoZmFpbCwgXCJpcCBsaW5rIGFkZCAlcyB0eXBlIGJvbmRcIiwgQk9ORF9JRkFDRSk7XG4rXHRTWVMoZmFpbCwgXCJpcCBsaW5rIGFkZCAlcyB0eXBlIHZldGggcGVlciBuYW1lICVzXCIsIEJPTkRfUE9SVCwgQk9ORF9QT1JUX1BFRVIpO1xuK1x0U1lTKGZhaWwsIFwiaXAgbGluayBzZXQgJXMgbWFzdGVyICVzXCIsIEJPTkRfUE9SVCwgQk9ORF9JRkFDRSk7XG4rXHRTWVMoZmFpbCwgXCJpcCBsaW5rIHNldCBkZXYgJXMgdXBcIiwgQk9ORF9JRkFDRSk7XG4rXHRTWVMoZmFpbCwgXCJpcCBsaW5rIHNldCBkZXYgJXMgdXBcIiwgQk9ORF9QT1JUKTtcbitcdFNZUyhmYWlsLCBcImlwIGxpbmsgYWRkIGxpbmsgJXMgbmFtZSAlcy4lZCB0eXBlIHZsYW4gaWQgJWRcIixcbitcdCAgICBCT05EX0lGQUNFLCBCT05EX0lGQUNFLCBCT05EX1ZMQU5fSUQsIEJPTkRfVkxBTl9JRCk7XG4rXHRTWVMoZmFpbCwgXCJpcCBsaW5rIHNldCBkZXYgJXMuJWQgdXBcIiwgQk9ORF9JRkFDRSwgQk9ORF9WTEFOX0lEKTtcbitcdFNZUyhmYWlsLCBcImlwIHJvdXRlIGFkZCAlcy8zMiBkZXYgJXMuJWRcIixcbitcdCAgICBJUFY0X0JPTkRfVkxBTl9EU1QsIEJPTkRfSUZBQ0UsIEJPTkRfVkxBTl9JRCk7XG4rXG4rXHQvKlxuK1x0ICogYSBWUkYgd2l0aCBpdHMgb3duIGRlZGljYXRlZCBzdWJpbnRlcmZhY2UgKHRoZSBpaWYgcnVsZXMgYWJvdmVcbitcdCAqIG11c3Qgbm90IHNlZSBpdCksIGZvciB0aGUgdGFibGUtc2VsZWN0aW9uLWJ5LWluZ3Jlc3MgY2FzZXNcbitcdCAqL1xuK1x0U1lTKGZhaWwsIFwiaXAgbGluayBhZGQgJXMgdHlwZSB2cmYgdGFibGUgJXNcIiwgVlJGX0lGQUNFLCBWUkZfVEFCTEUpO1xuK1x0U1lTKGZhaWwsIFwiaXAgbGluayBzZXQgZGV2ICVzIHVwXCIsIFZSRl9JRkFDRSk7XG4rXHRTWVMoZmFpbCwgXCJpcCBsaW5rIGFkZCBsaW5rIHZldGgxIG5hbWUgJXMgdHlwZSB2bGFuIGlkICVkXCIsXG4rXHQgICAgVlJGX1ZMQU5fSUZBQ0UsIFZSRl9WTEFOX0lEKTtcbitcdFNZUyhmYWlsLCBcImlwIGxpbmsgc2V0ICVzIG1hc3RlciAlc1wiLCBWUkZfVkxBTl9JRkFDRSwgVlJGX0lGQUNFKTtcbitcdFNZUyhmYWlsLCBcImlwIGxpbmsgc2V0IGRldiAlcyB1cFwiLCBWUkZfVkxBTl9JRkFDRSk7XG4rXHRTWVMoZmFpbCwgXCJpcCBhZGRyIGFkZCAlcy8yNCBkZXYgJXNcIiwgSVBWNF9WUkZfSUZBQ0VfQUREUiwgVlJGX1ZMQU5fSUZBQ0UpO1xuK1x0ZXJyID0gd3JpdGVfc3lzY3RsKFwiL3Byb2Mvc3lzL25ldC9pcHY0L2NvbmYvXCIgVlJGX1ZMQU5fSUZBQ0UgXCIvZm9yd2FyZGluZ1wiLCBcIjFcIik7XG4rXHRpZiAoIUFTU0VSVF9PSyhlcnIsIFwid3JpdGVfc3lzY3RsKG5ldC5pcHY0LmNvbmYuXCIgVlJGX1ZMQU5fSUZBQ0UgXCIuZm9yd2FyZGluZylcIikpXG4rXHRcdGdvdG8gZmFpbDtcbitcdFNZUyhmYWlsLCBcImlwIHJvdXRlIGFkZCAlcy8zMiB2aWEgJXNcIiwgSVBWNF9WUkZfRFNULCBJUFY0X0dXMSk7XG4rXHRTWVMoZmFpbCwgXCJpcCByb3V0ZSBhZGQgdGFibGUgJXMgJXMvMzIgdmlhICVzXCIsXG4rXHQgICAgVlJGX1RBQkxFLCBJUFY0X1ZSRl9EU1QsIElQVjRfVlJGX0dXKTtcbitcbitcdC8qIG5laWdoYm91cnMgb24gdGhlIFZMQU4gc3ViaW50ZXJmYWNlIGZvciB0aGUgbm9uLVNLSVBfTkVJR0ggY2FzZXMgKi9cbitcdGVyciA9IHdyaXRlX3N5c2N0bChcIi9wcm9jL3N5cy9uZXQvaXB2NC9uZWlnaC9cIiBWTEFOX0lGQUNFIFwiL2djX3N0YWxlX3RpbWVcIiwgXCI5MDBcIik7XG4rXHRpZiAoIUFTU0VSVF9PSyhlcnIsIFwid3JpdGVfc3lzY3RsKG5ldC5pcHY0Lm5laWdoLlwiIFZMQU5fSUZBQ0UgXCIuZ2Nfc3RhbGVfdGltZSlcIikpXG4rXHRcdGdvdG8gZmFpbDtcbitcdFNZUyhmYWlsLCBcImlwIG5laWdoIGFkZCAlcyBkZXYgJXMgbGxhZGRyICVzIG51ZCBzdGFsZVwiLFxuK1x0ICAgIElQVjRfVkxBTl9FR1JFU1NfRFNULCBWTEFOX0lGQUNFLCBETUFDKTtcbitcdFNZUyhmYWlsLCBcImlwIG5laWdoIGFkZCAlcyBkZXYgJXMgbGxhZGRyICVzIG51ZCBzdGFsZVwiLFxuK1x0ICAgIElQVjRfVkxBTl9HVywgVkxBTl9JRkFDRSwgRE1BQzIpO1xuK1xuK1x0LyogYSBWTEFOIG9uIHZldGgyIHdpdGggYSByb3V0ZSBpbiB0aGUgdGJpZCB0ZXN0IHRhYmxlICovXG4rXHRTWVMoZmFpbCwgXCJpcCBsaW5rIGFkZCBsaW5rIHZldGgyIG5hbWUgJXMgdHlwZSB2bGFuIGlkICVkXCIsXG4rXHQgICAgVEJJRF9WTEFOX0lGQUNFLCBUQklEX1ZMQU5fSUQpO1xuK1x0U1lTKGZhaWwsIFwiaXAgbGluayBzZXQgZGV2ICVzIHVwXCIsIFRCSURfVkxBTl9JRkFDRSk7XG4rXHRTWVMoZmFpbCwgXCJpcCByb3V0ZSBhZGQgdGFibGUgMTAwICVzLzMyIGRldiAlc1wiLFxuK1x0ICAgIElQVjRfVEJJRF9WTEFOX0RTVCwgVEJJRF9WTEFOX0lGQUNFKTtcbitcbitcdC8qIGEgbG9ja2VkLW10dSByb3V0ZSB2aWEgdGhlIHN1YmludGVyZmFjZSBmb3IgdGhlIEZSQUdfTkVFREVEIGNhc2UgKi9cbitcdFNZUyhmYWlsLCBcImlwIHJvdXRlIGFkZCAlcy8zMiBkZXYgJXMgbXR1IGxvY2sgMTAwMFwiLFxuK1x0ICAgIElQVjRfVkxBTl9NVFVfRFNULCBWTEFOX0lGQUNFKTtcbitcbiBcdHJldHVybiAwO1xuIGZhaWw6XG4gXHRyZXR1cm4gLTE7XG5AQCAtMjE4LDkgKzU5MywxNiBAQCBzdGF0aWMgaW50IHNldF9sb29rdXBfcGFyYW1zKHN0cnVjdCBicGZfZmliX2xvb2t1cCAqcGFyYW1zLFxuIFx0bWVtc2V0KHBhcmFtcywgMCwgc2l6ZW9mKCpwYXJhbXMpKTtcbiBcbiBcdHBhcmFtcy1cdTAwM2VsNF9wcm90b2NvbCA9IElQUFJPVE9fVENQO1xuLVx0cGFyYW1zLVx1MDAzZWlmaW5kZXggPSBpZmluZGV4O1xuK1x0cGFyYW1zLVx1MDAzZWlmaW5kZXggPSB0ZXN0LVx1MDAzZWlpZiA/IGlmX25hbWV0b2luZGV4KHRlc3QtXHUwMDNlaWlmKSA6IGlmaW5kZXg7XG4gXHRwYXJhbXMtXHUwMDNldGJpZCA9IHRlc3QtXHUwMDNldGJpZDtcbiBcdHBhcmFtcy1cdTAwM2VtYXJrID0gdGVzdC1cdTAwM2VtYXJrO1xuK1x0cGFyYW1zLVx1MDAzZXRvdF9sZW4gPSB0ZXN0LVx1MDAzZXRvdF9sZW47XG4rXG4rXHQvKiBoX3ZsYW5fcHJvdG8vaF92bGFuX1RDSSB1bmlvbiB3aXRoIHRiaWQgKi9cbitcdGlmICh0ZXN0LVx1MDAzZWxvb2t1cF9mbGFncyBcdTAwMjYgQlBGX0ZJQl9MT09LVVBfVkxBTl9JTlBVVCkge1xuK1x0XHRwYXJhbXMtXHUwMDNlaF92bGFuX3Byb3RvID0gaHRvbnModGVzdC1cdTAwM2V2bGFuX3Byb3RvKTtcbitcdFx0cGFyYW1zLVx1MDAzZWhfdmxhbl9UQ0kgPSBodG9ucyh0ZXN0LVx1MDAzZXZsYW5faWQpO1xuK1x0fVxuIFxuIFx0aWYgKGluZXRfcHRvbihBRl9JTkVUNiwgdGVzdC1cdTAwM2VkYWRkciwgcGFyYW1zLVx1MDAzZWlwdjZfZHN0KSA9PSAxKSB7XG4gXHRcdHBhcmFtcy1cdTAwM2VmYW1pbHkgPSBBRl9JTkVUNjtcbkBAIC0yOTgsNyArNjgwLDcgQEAgdm9pZCB0ZXN0X2ZpYl9sb29rdXAodm9pZClcbiBcdHN0cnVjdCBuc3Rva2VuICpuc3Rva2VuID0gTlVMTDtcbiBcdHN0cnVjdCBfX3NrX2J1ZmYgc2tiID0geyB9O1xuIFx0c3RydWN0IGZpYl9sb29rdXAgKnNrZWw7XG4tXHRpbnQgcHJvZ19mZCwgZXJyLCByZXQsIGk7XG4rXHRpbnQgcHJvZ19mZCwgeGRwX2ZkLCBlcnIsIHJldCwgaTtcbiBcbiBcdC8qIFRoZSB0ZXN0IGRvZXMgbm90IHVzZSB0aGUgc2tiLVx1MDAzZWRhdGEsIHNvXG4gXHQgKiB1c2UgcGt0X3Y2IGZvciBib3RoIHY2IGFuZCB2NCB0ZXN0LlxuQEAgLTMwOSwxMSArNjkxLDE2IEBAIHZvaWQgdGVzdF9maWJfbG9va3VwKHZvaWQpXG4gXHRcdCAgICAuY3R4X2luID0gXHUwMDI2c2tiLFxuIFx0XHQgICAgLmN0eF9zaXplX2luID0gc2l6ZW9mKHNrYiksXG4gXHQpO1xuK1x0TElCQlBGX09QVFMoYnBmX3Rlc3RfcnVuX29wdHMsIHhkcF9vcHRzLFxuK1x0XHQgICAgLmRhdGFfaW4gPSBcdTAwMjZwa3RfdjYsXG4rXHRcdCAgICAuZGF0YV9zaXplX2luID0gc2l6ZW9mKHBrdF92NiksXG4rXHQpO1xuIFxuIFx0c2tlbCA9IGZpYl9sb29rdXBfX29wZW5fYW5kX2xvYWQoKTtcbiBcdGlmICghQVNTRVJUX09LX1BUUihza2VsLCBcInNrZWwgb3Blbl9hbmRfbG9hZFwiKSlcbiBcdFx0cmV0dXJuO1xuIFx0cHJvZ19mZCA9IGJwZl9wcm9ncmFtX19mZChza2VsLVx1MDAzZXByb2dzLmZpYl9sb29rdXApO1xuK1x0eGRwX2ZkID0gYnBmX3Byb2dyYW1fX2ZkKHNrZWwtXHUwMDNlcHJvZ3MuZmliX2xvb2t1cF94ZHApO1xuIFxuIFx0U1lTKGZhaWwsIFwiaXAgbmV0bnMgYWRkICVzXCIsIE5TX1RFU1QpO1xuIFxuQEAgLTM0Myw2ICs3MzAsMTUgQEAgdm9pZCB0ZXN0X2ZpYl9sb29rdXAodm9pZClcbiBcdFx0aWYgKCFBU1NFUlRfT0soZXJyLCBcImJwZl9wcm9nX3Rlc3RfcnVuX29wdHNcIikpXG4gXHRcdFx0Y29udGludWU7XG4gXG4rXHRcdC8qIEJQRl9GSUJfTE9PS1VQX1ZMQU4gaXMgWERQLW9ubHk7IHRoZSB0YyBoZWxwZXIgcmVqZWN0cyBpdC5cbitcdFx0ICogVGhlc2UgY2FzZXMgYXJlIGV4ZXJjaXNlZCBvbiB0aGUgWERQIHBhdGggYmVsb3cuXG4rXHRcdCAqL1xuK1x0XHRpZiAodGVzdHNbaV0ubG9va3VwX2ZsYWdzIFx1MDAyNiBCUEZfRklCX0xPT0tVUF9WTEFOKSB7XG4rXHRcdFx0QVNTRVJUX0VRKHNrZWwtXHUwMDNlYnNzLVx1MDAzZWZpYl9sb29rdXBfcmV0LCAtRUlOVkFMLFxuK1x0XHRcdFx0ICBcInRjIHJlamVjdHMgQlBGX0ZJQl9MT09LVVBfVkxBTlwiKTtcbitcdFx0XHRjb250aW51ZTtcbitcdFx0fVxuK1xuIFx0XHRBU1NFUlRfRVEoc2tlbC1cdTAwM2Vic3MtXHUwMDNlZmliX2xvb2t1cF9yZXQsIHRlc3RzW2ldLmV4cGVjdGVkX3JldCxcbiBcdFx0XHQgIFwiZmliX2xvb2t1cF9yZXRcIik7XG4gXG5AQCAtMzUyLDYgKzc0OCwyMSBAQCB2b2lkIHRlc3RfZmliX2xvb2t1cCh2b2lkKVxuIFx0XHRpZiAodGVzdHNbaV0uZXhwZWN0ZWRfZHN0KVxuIFx0XHRcdGFzc2VydF9kc3RfaXAoZmliX3BhcmFtcywgdGVzdHNbaV0uZXhwZWN0ZWRfZHN0KTtcbiBcbitcdFx0aWYgKHRlc3RzW2ldLmV4cGVjdGVkX2RldilcbitcdFx0XHRBU1NFUlRfRVEoZmliX3BhcmFtcy1cdTAwM2VpZmluZGV4LFxuK1x0XHRcdFx0ICBpZl9uYW1ldG9pbmRleCh0ZXN0c1tpXS5leHBlY3RlZF9kZXYpLCBcImlmaW5kZXhcIik7XG4rXG4rXHRcdGlmICh0ZXN0c1tpXS5leHBlY3RlZF9tdHUpXG4rXHRcdFx0QVNTRVJUX0VRKGZpYl9wYXJhbXMtXHUwMDNlbXR1X3Jlc3VsdCwgdGVzdHNbaV0uZXhwZWN0ZWRfbXR1LFxuK1x0XHRcdFx0ICBcIm10dV9yZXN1bHRcIik7XG4rXG4rXHRcdGlmICh0ZXN0c1tpXS5jaGVja192bGFuKSB7XG4rXHRcdFx0QVNTRVJUX0VRKGZpYl9wYXJhbXMtXHUwMDNlaF92bGFuX3Byb3RvLFxuK1x0XHRcdFx0ICBodG9ucyh0ZXN0c1tpXS52bGFuX3Byb3RvKSwgXCJoX3ZsYW5fcHJvdG9cIik7XG4rXHRcdFx0QVNTRVJUX0VRKGZpYl9wYXJhbXMtXHUwMDNlaF92bGFuX1RDSSxcbitcdFx0XHRcdCAgaHRvbnModGVzdHNbaV0udmxhbl9pZCksIFwiaF92bGFuX1RDSVwiKTtcbitcdFx0fVxuK1xuIFx0XHRyZXQgPSBtZW1jbXAodGVzdHNbaV0uZG1hYywgZmliX3BhcmFtcy1cdTAwM2VkbWFjLCBzaXplb2YodGVzdHNbaV0uZG1hYykpO1xuIFx0XHRpZiAoIUFTU0VSVF9FUShyZXQsIDAsIFwiZG1hYyBub3QgbWF0Y2hcIikpIHtcbiBcdFx0XHRjaGFyIGV4cGVjdGVkWzE4XSwgYWN0dWFsWzE4XTtcbkBAIC0zNjEsMTUgKzc3MiwzMTMgQEAgdm9pZCB0ZXN0X2ZpYl9sb29rdXAodm9pZClcbiBcdFx0XHRwcmludGYoXCJkbWFjIGV4cGVjdGVkICVzIGFjdHVhbCAlcyBcIiwgZXhwZWN0ZWQsIGFjdHVhbCk7XG4gXHRcdH1cbiBcbi1cdFx0Ly8gZW5zdXJlIHRiaWQgaXMgemVybydkIG91dCBhZnRlciBmaWIgbG9va3VwLlxuLVx0XHRpZiAodGVzdHNbaV0ubG9va3VwX2ZsYWdzIFx1MDAyNiBCUEZfRklCX0xPT0tVUF9ESVJFQ1QpIHtcbitcdFx0LypcbitcdFx0ICogZW5zdXJlIHRiaWQgaXMgemVybydkIG91dCBhZnRlciBmaWIgbG9va3VwLiBXaXRoXG4rXHRcdCAqIEJQRl9GSUJfTE9PS1VQX1ZMQU4gdGhlIHVuaW9uIGhvbGRzIHRoZSBwYWNrZWQgdmxhblxuK1x0XHQgKiBmaWVsZHMgaW5zdGVhZCwgc28gc2tpcCB0aGUgY2hlY2sgZm9yIHRob3NlLlxuK1x0XHQgKi9cbitcdFx0aWYgKCh0ZXN0c1tpXS5sb29rdXBfZmxhZ3MgXHUwMDI2IEJQRl9GSUJfTE9PS1VQX0RJUkVDVCkgXHUwMDI2XHUwMDI2XG4rXHRcdCAgICAhKHRlc3RzW2ldLmxvb2t1cF9mbGFncyBcdTAwMjYgQlBGX0ZJQl9MT09LVVBfVkxBTikpIHtcbiBcdFx0XHRpZiAoIUFTU0VSVF9FUShza2VsLVx1MDAzZWJzcy1cdTAwM2VmaWJfcGFyYW1zLnRiaWQsIDAsXG4gXHRcdFx0XHRcdFwiZXhwZWN0ZWQgZmliX3BhcmFtcy50YmlkIHRvIGJlIHplcm9cIikpXG4gXHRcdFx0XHRnb3RvIGZhaWw7XG4gXHRcdH1cbiBcdH1cbiBcbitcdC8qXG4rXHQgKiBSZS1ydW4gdGhlIGNhc2VzIHRocm91Z2ggYnBmX3hkcF9maWJfbG9va3VwKCkuIHRlc3RfcnVuIHVzZXMgdGhlXG4rXHQgKiBjdXJyZW50IG5ldG5zJyBsb29wYmFjayBmb3IgY3R4LVx1MDAzZXJ4cS1cdTAwM2VkZXYsIHNvIGRldl9uZXQoKSBpcyBOU19URVNUXG4rXHQgKiBhbmQgdGhlIGxvb2t1cCBydW5zIGFnYWluc3QgaXRzIEZJQi4gVGhlIHBhdGgtaW5kZXBlbmRlbnQgcmVzdWx0c1xuK1x0ICogKHJldHVybiBjb2RlLCBzd2FwcGVkIGlmaW5kZXgsIHZsYW4gdGFnLCBnYXRld2F5KSBtdXN0IG1hdGNoIHRoZSBza2JcbitcdCAqIHBhdGg7IHRoZSBuby10b3RfbGVuIG10dV9yZXN1bHQgaXMgc2tiLXNwZWNpZmljIGFuZCBub3QgcmVjaGVja2VkLlxuK1x0ICovXG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBBUlJBWV9TSVpFKHRlc3RzKTsgaSsrKSB7XG4rXHRcdGlmIChzZXRfbG9va3VwX3BhcmFtcyhmaWJfcGFyYW1zLCBcdTAwMjZ0ZXN0c1tpXSwgc2tiLmlmaW5kZXgpKVxuK1x0XHRcdGNvbnRpbnVlO1xuK1xuK1x0XHRza2VsLVx1MDAzZWJzcy1cdTAwM2VmaWJfbG9va3VwX3JldCA9IC0xO1xuK1x0XHRza2VsLVx1MDAzZWJzcy1cdTAwM2Vsb29rdXBfZmxhZ3MgPSB0ZXN0c1tpXS5sb29rdXBfZmxhZ3M7XG4rXG4rXHRcdGVyciA9IGJwZl9wcm9nX3Rlc3RfcnVuX29wdHMoeGRwX2ZkLCBcdTAwMjZ4ZHBfb3B0cyk7XG4rXHRcdGlmICghQVNTRVJUX09LKGVyciwgXCJ4ZHAgdGVzdF9ydW5cIikpXG4rXHRcdFx0Y29udGludWU7XG4rXG4rXHRcdGlmICghQVNTRVJUX0VRKHNrZWwtXHUwMDNlYnNzLVx1MDAzZWZpYl9sb29rdXBfcmV0LCB0ZXN0c1tpXS5leHBlY3RlZF9yZXQsXG4rXHRcdFx0ICAgICAgIFwieGRwIGZpYl9sb29rdXBfcmV0XCIpKVxuK1x0XHRcdHByaW50ZihcIih4ZHApICVzXFxuXCIsIHRlc3RzW2ldLmRlc2MpO1xuK1xuK1x0XHRpZiAodGVzdHNbaV0uZXhwZWN0ZWRfZGV2KVxuK1x0XHRcdEFTU0VSVF9FUShmaWJfcGFyYW1zLVx1MDAzZWlmaW5kZXgsXG4rXHRcdFx0XHQgIGlmX25hbWV0b2luZGV4KHRlc3RzW2ldLmV4cGVjdGVkX2RldiksXG4rXHRcdFx0XHQgIFwieGRwIGlmaW5kZXhcIik7XG4rXG4rXHRcdGlmICh0ZXN0c1tpXS5leHBlY3RlZF9kc3QpXG4rXHRcdFx0YXNzZXJ0X2RzdF9pcChmaWJfcGFyYW1zLCB0ZXN0c1tpXS5leHBlY3RlZF9kc3QpO1xuK1xuK1x0XHRpZiAodGVzdHNbaV0uY2hlY2tfdmxhbikge1xuK1x0XHRcdEFTU0VSVF9FUShmaWJfcGFyYW1zLVx1MDAzZWhfdmxhbl9wcm90byxcbitcdFx0XHRcdCAgaHRvbnModGVzdHNbaV0udmxhbl9wcm90byksIFwieGRwIGhfdmxhbl9wcm90b1wiKTtcbitcdFx0XHRBU1NFUlRfRVEoZmliX3BhcmFtcy1cdTAwM2VoX3ZsYW5fVENJLFxuK1x0XHRcdFx0ICBodG9ucyh0ZXN0c1tpXS52bGFuX2lkKSwgXCJ4ZHAgaF92bGFuX1RDSVwiKTtcbitcdFx0fVxuK1xuK1x0XHRyZXQgPSBtZW1jbXAodGVzdHNbaV0uZG1hYywgZmliX3BhcmFtcy1cdTAwM2VkbWFjLCBzaXplb2YodGVzdHNbaV0uZG1hYykpO1xuK1x0XHRBU1NFUlRfRVEocmV0LCAwLCBcInhkcCBkbWFjXCIpO1xuK1xuK1x0XHQvKlxuK1x0XHQgKiBtdHVfcmVzdWx0IGZyb20gYSB0b3RfbGVuIGxvb2t1cCBpcyB0aGUgcm91dGUgbXR1IGFuZCBpc1xuK1x0XHQgKiBwYXRoLWluZGVwZW5kZW50OyB0aGUgbm8tdG90X2xlbiBhcm0gcmVhZHMgZGV2LVx1MDAzZW10dSBhbmQgaXNcbitcdFx0ICogc2tiLW9ubHksIHNvIGdhdGUgb24gdG90X2xlblxuK1x0XHQgKi9cbitcdFx0aWYgKHRlc3RzW2ldLmV4cGVjdGVkX210dSBcdTAwMjZcdTAwMjYgdGVzdHNbaV0udG90X2xlbilcbitcdFx0XHRBU1NFUlRfRVEoZmliX3BhcmFtcy1cdTAwM2VtdHVfcmVzdWx0LCB0ZXN0c1tpXS5leHBlY3RlZF9tdHUsXG4rXHRcdFx0XHQgIFwieGRwIG10dV9yZXN1bHRcIik7XG4rXHR9XG4rXG4rZmFpbDpcbitcdGlmIChuc3Rva2VuKVxuK1x0XHRjbG9zZV9uZXRucyhuc3Rva2VuKTtcbitcdFNZU19OT0ZBSUwoXCJpcCBuZXRucyBkZWwgXCIgTlNfVEVTVCk7XG4rXHRmaWJfbG9va3VwX19kZXN0cm95KHNrZWwpO1xuK31cbitcbisjZGVmaW5lIE5TX1ZMQU5fQVx0XCJmaWJfbG9va3VwX3ZsYW5fbnNfYVwiXG4rI2RlZmluZSBOU19WTEFOX0JcdFwiZmliX2xvb2t1cF92bGFuX25zX2JcIlxuK1xuKy8qXG4rICogQSBWTEFOIGRldmljZSBjYW4gYmUgbW92ZWQgdG8gYW5vdGhlciBuZXRucyB3aGlsZSBzdGF5aW5nIHJlZ2lzdGVyZWRcbisgKiBvbiBpdHMgcGFyZW50LiBOZWl0aGVyIGRpcmVjdGlvbiBtYXkgdGhlbiBjcm9zcyB0aGUgYm91bmRhcnk6IHRoZVxuKyAqIGVncmVzcyBmbGFnIG11c3Qgbm90IHB1Ymxpc2ggdGhlIGZvcmVpZ24gcGFyZW50J3MgaWZpbmRleCwgYW5kIHRoZVxuKyAqIGlucHV0IGZsYWcgbXVzdCBmYWlsIGNsb3NlZCByYXRoZXIgdGhhbiB1c2UgYSBmb3JlaWduIGluZ3Jlc3MuXG4rICovXG4rdm9pZCB0ZXN0X2ZpYl9sb29rdXBfdmxhbl9uZXRucyh2b2lkKVxuK3tcbitcdHN0cnVjdCBicGZfZmliX2xvb2t1cCAqZmliX3BhcmFtcztcbitcdHN0cnVjdCBuc3Rva2VuICpuc3Rva2VuID0gTlVMTDtcbitcdHN0cnVjdCBfX3NrX2J1ZmYgc2tiID0geyB9O1xuK1x0c3RydWN0IGZpYl9sb29rdXAgKnNrZWwgPSBOVUxMO1xuK1x0aW50IHByb2dfZmQsIHhkcF9mZCwgZXJyLCBwYXJlbnRfaWR4LCB2bGFuX2lkeDtcbitcbitcdExJQkJQRl9PUFRTKGJwZl90ZXN0X3J1bl9vcHRzLCBydW5fb3B0cyxcbitcdFx0ICAgIC5kYXRhX2luID0gXHUwMDI2cGt0X3Y2LFxuK1x0XHQgICAgLmRhdGFfc2l6ZV9pbiA9IHNpemVvZihwa3RfdjYpLFxuK1x0XHQgICAgLmN0eF9pbiA9IFx1MDAyNnNrYixcbitcdFx0ICAgIC5jdHhfc2l6ZV9pbiA9IHNpemVvZihza2IpLFxuK1x0KTtcbitcdExJQkJQRl9PUFRTKGJwZl90ZXN0X3J1bl9vcHRzLCB4ZHBfb3B0cyxcbitcdFx0ICAgIC5kYXRhX2luID0gXHUwMDI2cGt0X3Y2LFxuK1x0XHQgICAgLmRhdGFfc2l6ZV9pbiA9IHNpemVvZihwa3RfdjYpLFxuK1x0KTtcbitcbitcdHNrZWwgPSBmaWJfbG9va3VwX19vcGVuX2FuZF9sb2FkKCk7XG4rXHRpZiAoIUFTU0VSVF9PS19QVFIoc2tlbCwgXCJza2VsIG9wZW5fYW5kX2xvYWRcIikpXG4rXHRcdHJldHVybjtcbitcdHByb2dfZmQgPSBicGZfcHJvZ3JhbV9fZmQoc2tlbC1cdTAwM2Vwcm9ncy5maWJfbG9va3VwKTtcbitcdHhkcF9mZCA9IGJwZl9wcm9ncmFtX19mZChza2VsLVx1MDAzZXByb2dzLmZpYl9sb29rdXBfeGRwKTtcbitcdGZpYl9wYXJhbXMgPSBcdTAwMjZza2VsLVx1MDAzZWJzcy1cdTAwM2VmaWJfcGFyYW1zO1xuK1xuK1x0U1lTKGZhaWwsIFwiaXAgbmV0bnMgYWRkICVzXCIsIE5TX1ZMQU5fQSk7XG4rXHRTWVMoZmFpbCwgXCJpcCBuZXRucyBhZGQgJXNcIiwgTlNfVkxBTl9CKTtcbitcbitcdG5zdG9rZW4gPSBvcGVuX25ldG5zKE5TX1ZMQU5fQSk7XG4rXHRpZiAoIUFTU0VSVF9PS19QVFIobnN0b2tlbiwgXCJvcGVuX25ldG5zKGEpXCIpKVxuK1x0XHRnb3RvIGZhaWw7XG4rXG4rXHRTWVMoZmFpbCwgXCJpcCBsaW5rIGFkZCB2ZXRoNyB0eXBlIHZldGggcGVlciBuYW1lIHZldGg4XCIpO1xuK1x0U1lTKGZhaWwsIFwiaXAgbGluayBzZXQgZGV2IHZldGg3IHVwXCIpO1xuK1x0U1lTKGZhaWwsIFwiaXAgbGluayBhZGQgbGluayB2ZXRoNyBuYW1lIHZldGg3LjY2IHR5cGUgdmxhbiBpZCA2NlwiKTtcbitcdFNZUyhmYWlsLCBcImlwIGxpbmsgc2V0IHZldGg3LjY2IG5ldG5zICVzXCIsIE5TX1ZMQU5fQik7XG4rXG4rXHRwYXJlbnRfaWR4ID0gaWZfbmFtZXRvaW5kZXgoXCJ2ZXRoN1wiKTtcbitcdGlmICghQVNTRVJUX05FUShwYXJlbnRfaWR4LCAwLCBcImlmX25hbWV0b2luZGV4KHZldGg3KVwiKSlcbitcdFx0Z290byBmYWlsO1xuK1xuK1x0LypcbitcdCAqIGlucHV0OiB0aGUgbW92ZWQgZGV2aWNlIGlzIHN0aWxsIGluIHZldGg3J3MgVkxBTiBncm91cCwgYnV0IGl0XG4rXHQgKiBsaXZlcyBpbiBhbm90aGVyIG5ldG5zLCBzbyB0aGUgbG9va3VwIG11c3QgZmFpbCBjbG9zZWRcbitcdCAqL1xuK1x0c2tiLmlmaW5kZXggPSBwYXJlbnRfaWR4O1xuK1x0bWVtc2V0KGZpYl9wYXJhbXMsIDAsIHNpemVvZigqZmliX3BhcmFtcykpO1xuK1x0ZmliX3BhcmFtcy1cdTAwM2VmYW1pbHkgPSBBRl9JTkVUO1xuK1x0ZmliX3BhcmFtcy1cdTAwM2VsNF9wcm90b2NvbCA9IElQUFJPVE9fVENQO1xuK1x0ZmliX3BhcmFtcy1cdTAwM2VpZmluZGV4ID0gcGFyZW50X2lkeDtcbitcdGZpYl9wYXJhbXMtXHUwMDNlaF92bGFuX3Byb3RvID0gaHRvbnMoRVRIX1BfODAyMVEpO1xuK1x0ZmliX3BhcmFtcy1cdTAwM2VoX3ZsYW5fVENJID0gaHRvbnMoNjYpO1xuK1x0aWYgKCFBU1NFUlRfRVEoaW5ldF9wdG9uKEFGX0lORVQsIFwiMTAuNjYuMC4yXCIsIFx1MDAyNmZpYl9wYXJhbXMtXHUwMDNlaXB2NF9kc3QpLFxuK1x0XHQgICAgICAgMSwgXCJpbmV0X3B0b24oZHN0KVwiKSlcbitcdFx0Z290byBmYWlsO1xuK1xuK1x0c2tlbC1cdTAwM2Vic3MtXHUwMDNlZmliX2xvb2t1cF9yZXQgPSAtMTtcbitcdHNrZWwtXHUwMDNlYnNzLVx1MDAzZWxvb2t1cF9mbGFncyA9IEJQRl9GSUJfTE9PS1VQX1ZMQU5fSU5QVVQgfFxuK1x0XHRcdFx0ICBCUEZfRklCX0xPT0tVUF9TS0lQX05FSUdIO1xuK1x0ZXJyID0gYnBmX3Byb2dfdGVzdF9ydW5fb3B0cyhwcm9nX2ZkLCBcdTAwMjZydW5fb3B0cyk7XG4rXHRpZiAoIUFTU0VSVF9PSyhlcnIsIFwidGVzdF9ydW4oaW5wdXQpXCIpKVxuK1x0XHRnb3RvIGZhaWw7XG4rXHRBU1NFUlRfRVEoc2tlbC1cdTAwM2Vic3MtXHUwMDNlZmliX2xvb2t1cF9yZXQsIEJQRl9GSUJfTEtVUF9SRVRfTk9UX0ZXREVELFxuK1x0XHQgIFwiaW5wdXQgYWNyb3NzIG5ldG5zIGZhaWxzIGNsb3NlZFwiKTtcbitcdEFTU0VSVF9FUShmaWJfcGFyYW1zLVx1MDAzZWlmaW5kZXgsIHBhcmVudF9pZHgsIFwiaWZpbmRleCB1bnRvdWNoZWRcIik7XG4rXHRBU1NFUlRfRVEoZmliX3BhcmFtcy1cdTAwM2VoX3ZsYW5fVENJLCBodG9ucyg2NiksIFwidGFnIHVudG91Y2hlZFwiKTtcbitcbitcdGNsb3NlX25ldG5zKG5zdG9rZW4pO1xuK1x0bnN0b2tlbiA9IG9wZW5fbmV0bnMoTlNfVkxBTl9CKTtcbitcdGlmICghQVNTRVJUX09LX1BUUihuc3Rva2VuLCBcIm9wZW5fbmV0bnMoYilcIikpXG4rXHRcdGdvdG8gZmFpbDtcbitcbitcdC8qXG4rXHQgKiBlZ3Jlc3M6IHRoZSBmaWIgcmVzdWx0IGlzIHRoZSBWTEFOIGRldmljZSBoZXJlLCBidXQgaXRzIHBhcmVudFxuK1x0ICogaXMgaW4gdGhlIG90aGVyIG5ldG5zLCBzbyB0aGUgc3dhcCBtdXN0IG5vdCBoYXBwZW5cbitcdCAqL1xuK1x0U1lTKGZhaWwsIFwiaXAgbGluayBzZXQgZGV2IHZldGg3LjY2IHVwXCIpO1xuK1x0U1lTKGZhaWwsIFwiaXAgYWRkciBhZGQgMTAuNjYuMC4xLzI0IGRldiB2ZXRoNy42NlwiKTtcbitcdGVyciA9IHdyaXRlX3N5c2N0bChcIi9wcm9jL3N5cy9uZXQvaXB2NC9jb25mL3ZldGg3LjY2L2ZvcndhcmRpbmdcIiwgXCIxXCIpO1xuK1x0aWYgKCFBU1NFUlRfT0soZXJyLCBcIndyaXRlX3N5c2N0bChmb3J3YXJkaW5nKVwiKSlcbitcdFx0Z290byBmYWlsO1xuK1xuK1x0dmxhbl9pZHggPSBpZl9uYW1ldG9pbmRleChcInZldGg3LjY2XCIpO1xuK1x0aWYgKCFBU1NFUlRfTkVRKHZsYW5faWR4LCAwLCBcImlmX25hbWV0b2luZGV4KHZldGg3LjY2KVwiKSlcbitcdFx0Z290byBmYWlsO1xuK1xuK1x0c2tiLmlmaW5kZXggPSB2bGFuX2lkeDtcbitcdG1lbXNldChmaWJfcGFyYW1zLCAwLCBzaXplb2YoKmZpYl9wYXJhbXMpKTtcbitcdGZpYl9wYXJhbXMtXHUwMDNlZmFtaWx5ID0gQUZfSU5FVDtcbitcdGZpYl9wYXJhbXMtXHUwMDNlbDRfcHJvdG9jb2wgPSBJUFBST1RPX1RDUDtcbitcdGZpYl9wYXJhbXMtXHUwMDNlaWZpbmRleCA9IHZsYW5faWR4O1xuK1x0aWYgKCFBU1NFUlRfRVEoaW5ldF9wdG9uKEFGX0lORVQsIFwiMTAuNjYuMC4yXCIsIFx1MDAyNmZpYl9wYXJhbXMtXHUwMDNlaXB2NF9kc3QpLFxuK1x0XHQgICAgICAgMSwgXCJpbmV0X3B0b24oZHN0KVwiKSB8fFxuK1x0ICAgICFBU1NFUlRfRVEoaW5ldF9wdG9uKEFGX0lORVQsIFwiMTAuNjYuMC4xXCIsIFx1MDAyNmZpYl9wYXJhbXMtXHUwMDNlaXB2NF9zcmMpLFxuK1x0XHQgICAgICAgMSwgXCJpbmV0X3B0b24oc3JjKVwiKSlcbitcdFx0Z290byBmYWlsO1xuK1xuK1x0c2tlbC1cdTAwM2Vic3MtXHUwMDNlZmliX2xvb2t1cF9yZXQgPSAtMTtcbitcdHNrZWwtXHUwMDNlYnNzLVx1MDAzZWxvb2t1cF9mbGFncyA9IEJQRl9GSUJfTE9PS1VQX1ZMQU4gfFxuK1x0XHRcdFx0ICBCUEZfRklCX0xPT0tVUF9TS0lQX05FSUdIO1xuK1x0ZXJyID0gYnBmX3Byb2dfdGVzdF9ydW5fb3B0cyh4ZHBfZmQsIFx1MDAyNnhkcF9vcHRzKTtcbitcdGlmICghQVNTRVJUX09LKGVyciwgXCJ0ZXN0X3J1bihlZ3Jlc3MpXCIpKVxuK1x0XHRnb3RvIGZhaWw7XG4rXHRBU1NFUlRfRVEoc2tlbC1cdTAwM2Vic3MtXHUwMDNlZmliX2xvb2t1cF9yZXQsIEJQRl9GSUJfTEtVUF9SRVRfVkxBTl9GQUlMVVJFLFxuK1x0XHQgIFwiZWdyZXNzIHJldHVybnMgVkxBTl9GQUlMVVJFXCIpO1xuK1x0QVNTRVJUX0VRKGZpYl9wYXJhbXMtXHUwMDNlaWZpbmRleCwgdmxhbl9pZHgsXG4rXHRcdCAgXCJmb3JlaWduIHBhcmVudCBub3QgcHVibGlzaGVkXCIpO1xuK1x0QVNTRVJUX0VRKGZpYl9wYXJhbXMtXHUwMDNlaF92bGFuX1RDSSwgMCwgXCJ2bGFuIGZpZWxkcyB6ZXJvXCIpO1xuK1xuK2ZhaWw6XG4rXHRpZiAobnN0b2tlbilcbitcdFx0Y2xvc2VfbmV0bnMobnN0b2tlbik7XG4rXHRTWVNfTk9GQUlMKFwiaXAgbmV0bnMgZGVsIFwiIE5TX1ZMQU5fQSk7XG4rXHRTWVNfTk9GQUlMKFwiaXAgbmV0bnMgZGVsIFwiIE5TX1ZMQU5fQik7XG4rXHRmaWJfbG9va3VwX19kZXN0cm95KHNrZWwpO1xuK31cbitcbisjZGVmaW5lIFJFRElSRUNUX05QS1RTIDEwMDBcbitcbisvKlxuKyAqIFRoZSBlZ3Jlc3MgZmxhZyBleGlzdHMgc28gYW4gWERQIHByb2dyYW0gY2FuIHJlZGlyZWN0IHRvIHRoZSBwaHlzaWNhbFxuKyAqIHBhcmVudC4gQSByZWRpcmVjdCB0aGF0IGxhbmRzIG9uIGEgVkxBTiBkZXZpY2UgaXMgZHJvcHBlZCBhdFxuKyAqIHhkcF9kb19mbHVzaCgpLCBiZWNhdXNlIGEgVkxBTiBkZXZpY2UgaGFzIG5vIG5kb194ZHBfeG1pdC4gRHJpdmUgcmVhbFxuKyAqIGZyYW1lcyB3aXRoIEJQRl9GX1RFU1RfWERQX0xJVkVfRlJBTUVTLCB3aGljaCBydW5zIHRoZSBuYXRpdmVcbisgKiB4ZHBfZG9fcmVkaXJlY3QoKSArIHhkcF9kb19mbHVzaCgpIHBhdGg6IGEgcmVkdWNpYmxlIFZMQU4gZWdyZXNzXG4rICogcmVzb2x2ZXMgdG8gdmV0aDEgYW5kIGlzIGRlbGl2ZXJlZCB0byBpdHMgcGVlciB2ZXRoMiwgd2hpbGUgYSBRaW5RXG4rICogZWdyZXNzIHJldHVybnMgVkxBTl9GQUlMVVJFIGFuZCBpcyBwYXNzZWQgdG8gdGhlIHN0YWNrIGluc3RlYWQgb2ZcbisgKiByZWRpcmVjdGVkIHRvIGEgZGV2aWNlIHRoYXQgd291bGQgc2lsZW50bHkgZHJvcCBpdC5cbisgKi9cbit2b2lkIHRlc3RfZmliX2xvb2t1cF92bGFuX3JlZGlyZWN0KHZvaWQpXG4re1xuK1x0aW50IHJlZGlyZWN0X2ZkLCBlcnIsIHZldGgxX2lkeCwgdmV0aDJfaWR4ID0gLTE7XG4rXHRzdHJ1Y3QgYnBmX2ZpYl9sb29rdXAgKmZpYl9wYXJhbXM7XG4rXHRzdHJ1Y3QgbnN0b2tlbiAqbnN0b2tlbiA9IE5VTEw7XG4rXHRzdHJ1Y3QgZmliX2xvb2t1cCAqc2tlbCA9IE5VTEw7XG4rXHRib29sIHhkcF9hdHRhY2hlZCA9IGZhbHNlO1xuK1xuK1x0TElCQlBGX09QVFMoYnBmX3Rlc3RfcnVuX29wdHMsIGxmX29wdHMsXG4rXHRcdCAgICAuZGF0YV9pbiA9IFx1MDAyNnBrdF92NCxcbitcdFx0ICAgIC5kYXRhX3NpemVfaW4gPSBzaXplb2YocGt0X3Y0KSxcbitcdFx0ICAgIC5mbGFncyA9IEJQRl9GX1RFU1RfWERQX0xJVkVfRlJBTUVTLFxuK1x0XHQgICAgLnJlcGVhdCA9IFJFRElSRUNUX05QS1RTLFxuK1x0KTtcbitcbitcdHNrZWwgPSBmaWJfbG9va3VwX19vcGVuX2FuZF9sb2FkKCk7XG4rXHRpZiAoIUFTU0VSVF9PS19QVFIoc2tlbCwgXCJza2VsIG9wZW5fYW5kX2xvYWRcIikpXG4rXHRcdHJldHVybjtcbitcdHJlZGlyZWN0X2ZkID0gYnBmX3Byb2dyYW1fX2ZkKHNrZWwtXHUwMDNlcHJvZ3MuZmliX2xvb2t1cF9yZWRpcmVjdCk7XG4rXHRmaWJfcGFyYW1zID0gXHUwMDI2c2tlbC1cdTAwM2Vic3MtXHUwMDNlZmliX3BhcmFtcztcbitcbitcdFNZUyhmYWlsLCBcImlwIG5ldG5zIGFkZCAlc1wiLCBOU19URVNUKTtcbitcdG5zdG9rZW4gPSBvcGVuX25ldG5zKE5TX1RFU1QpO1xuK1x0aWYgKCFBU1NFUlRfT0tfUFRSKG5zdG9rZW4sIFwib3Blbl9uZXRuc1wiKSlcbitcdFx0Z290byBmYWlsO1xuK1x0aWYgKHNldHVwX25ldG5zKCkpXG4rXHRcdGdvdG8gZmFpbDtcbitcbitcdHZldGgxX2lkeCA9IGlmX25hbWV0b2luZGV4KFwidmV0aDFcIik7XG4rXHR2ZXRoMl9pZHggPSBpZl9uYW1ldG9pbmRleChcInZldGgyXCIpO1xuK1x0aWYgKCFBU1NFUlRfTkVRKHZldGgxX2lkeCwgMCwgXCJpZl9uYW1ldG9pbmRleCh2ZXRoMSlcIikgfHxcbitcdCAgICAhQVNTRVJUX05FUSh2ZXRoMl9pZHgsIDAsIFwiaWZfbmFtZXRvaW5kZXgodmV0aDIpXCIpKVxuK1x0XHRnb3RvIGZhaWw7XG4rXG4rXHQvKlxuK1x0ICogQSByZWRpcmVjdCB0byB2ZXRoMSBpcyBkZWxpdmVyZWQgdG8gaXRzIHBlZXIgdmV0aDIuIHZldGhfeGRwX3htaXQoKVxuK1x0ICogb25seSBhY2NlcHRzIHRoZSBmcmFtZSBpZiB2ZXRoMidzIE5BUEkgaXMgdXAsIHdoaWNoIG9uIHZldGggbWVhbnNcbitcdCAqIHZldGgyIGNhcnJpZXMgYW4gWERQIHByb2dyYW07IHhkcF9jb3VudCB0YWxsaWVzIHdoYXQgYXJyaXZlcy5cbitcdCAqL1xuK1x0ZXJyID0gYnBmX3hkcF9hdHRhY2godmV0aDJfaWR4LCBicGZfcHJvZ3JhbV9fZmQoc2tlbC1cdTAwM2Vwcm9ncy54ZHBfY291bnQpLFxuK1x0XHRcdCAgICAgWERQX0ZMQUdTX0RSVl9NT0RFLCBOVUxMKTtcbitcdGlmICghQVNTRVJUX09LKGVyciwgXCJhdHRhY2ggeGRwX2NvdW50IG9uIHZldGgyXCIpKVxuK1x0XHRnb3RvIGZhaWw7XG4rXHR4ZHBfYXR0YWNoZWQgPSB0cnVlO1xuK1xuK1x0LyogcmVkdWNpYmxlIFZMQU4gZWdyZXNzOiByZXNvbHZlcyB0byB0aGUgcGh5c2ljYWwgcGFyZW50IHZldGgxICovXG4rXHRtZW1zZXQoZmliX3BhcmFtcywgMCwgc2l6ZW9mKCpmaWJfcGFyYW1zKSk7XG4rXHRmaWJfcGFyYW1zLVx1MDAzZWZhbWlseSA9IEFGX0lORVQ7XG4rXHRmaWJfcGFyYW1zLVx1MDAzZWw0X3Byb3RvY29sID0gSVBQUk9UT19UQ1A7XG4rXHRmaWJfcGFyYW1zLVx1MDAzZWlmaW5kZXggPSB2ZXRoMV9pZHg7XG4rXHRpZiAoIUFTU0VSVF9FUShpbmV0X3B0b24oQUZfSU5FVCwgSVBWNF9JRkFDRV9BRERSLCBcdTAwMjZmaWJfcGFyYW1zLVx1MDAzZWlwdjRfc3JjKSxcbitcdFx0ICAgICAgIDEsIFwiaW5ldF9wdG9uKHNyYylcIikgfHxcbitcdCAgICAhQVNTRVJUX0VRKGluZXRfcHRvbihBRl9JTkVULCBJUFY0X1ZMQU5fRUdSRVNTX0RTVCwgXHUwMDI2ZmliX3BhcmFtcy1cdTAwM2VpcHY0X2RzdCksXG4rXHRcdCAgICAgICAxLCBcImluZXRfcHRvbihyZWR1Y2libGUgZHN0KVwiKSlcbitcdFx0Z290byBmYWlsO1xuK1x0c2tlbC1cdTAwM2Vic3MtXHUwMDNlbG9va3VwX2ZsYWdzID0gQlBGX0ZJQl9MT09LVVBfVkxBTiB8IEJQRl9GSUJfTE9PS1VQX1NLSVBfTkVJR0g7XG4rXHRza2VsLVx1MDAzZWJzcy1cdTAwM2VyZWRpcmVjdGVkID0gMDtcbitcdHNrZWwtXHUwMDNlYnNzLVx1MDAzZXBhc3NlZCA9IDA7XG4rXHRza2VsLVx1MDAzZWJzcy1cdTAwM2VkZWxpdmVyZWQgPSAwO1xuK1xuK1x0ZXJyID0gYnBmX3Byb2dfdGVzdF9ydW5fb3B0cyhyZWRpcmVjdF9mZCwgXHUwMDI2bGZfb3B0cyk7XG4rXHRpZiAoIUFTU0VSVF9PSyhlcnIsIFwidGVzdF9ydW4ocmVkdWNpYmxlIGVncmVzcylcIikpXG4rXHRcdGdvdG8gZmFpbDtcbitcdEFTU0VSVF9FUShza2VsLVx1MDAzZWJzcy1cdTAwM2VyZWRpcmVjdGVkLCBSRURJUkVDVF9OUEtUUywgXCJyZWR1Y2libGUgZWdyZXNzIHJlZGlyZWN0ZWRcIik7XG4rXHRBU1NFUlRfRVEoc2tlbC1cdTAwM2Vic3MtXHUwMDNlcGFzc2VkLCAwLCBcInJlZHVjaWJsZSBlZ3Jlc3Mgbm90IHBhc3NlZFwiKTtcbitcdEFTU0VSVF9HVChza2VsLVx1MDAzZWJzcy1cdTAwM2VkZWxpdmVyZWQsIDAsIFwicmVkdWNpYmxlIGVncmVzcyBkZWxpdmVyZWQgdG8gdmV0aDJcIik7XG4rXG4rXHQvKlxuK1x0ICogUWluUSBlZ3Jlc3M6IG5vdCByZWR1Y2libGUsIHNvIHRoZSBsb29rdXAgcmV0dXJucyBWTEFOX0ZBSUxVUkUgYW5kXG4rXHQgKiB0aGUgcHJvZ3JhbSBwYXNzZXMgdGhlIGZyYW1lIGluc3RlYWQgb2YgcmVkaXJlY3RpbmcgdG8gdGhlIGlubmVyXG4rXHQgKiBWTEFOIGRldmljZS4gcmVkaXJlY3RlZCA9PSAwIGlzIHRoZSBhc3NlcnRpb24gdGhhdCBtYXR0ZXJzOiB0aGVcbitcdCAqIHByb2dyYW0gZGlkIG5vdCByZWRpcmVjdCB0byBhIGRldmljZSB0aGF0IHdvdWxkIGRyb3AgdGhlIGZyYW1lIGF0XG4rXHQgKiB4ZHBfZG9fZmx1c2goKS4gdmV0aDIncyBkZWxpdmVyZWQgY291bnQgaXMgbm90IGNoZWNrZWQgaGVyZSwgc2luY2VcbitcdCAqIGEgcGFzc2VkIGZyYW1lIGNhbiBzdGlsbCByZWFjaCB2ZXRoMiB0aHJvdWdoIHRoZSBzdGFjaydzIGZvcndhcmRpbmdcbitcdCAqIHBhdGgsIHdoaWNoIGlzIHVucmVsYXRlZCB0byB0aGUgcmVkaXJlY3QgdW5kZXIgdGVzdC5cbitcdCAqL1xuK1x0bWVtc2V0KGZpYl9wYXJhbXMsIDAsIHNpemVvZigqZmliX3BhcmFtcykpO1xuK1x0ZmliX3BhcmFtcy1cdTAwM2VmYW1pbHkgPSBBRl9JTkVUO1xuK1x0ZmliX3BhcmFtcy1cdTAwM2VsNF9wcm90b2NvbCA9IElQUFJPVE9fVENQO1xuK1x0ZmliX3BhcmFtcy1cdTAwM2VpZmluZGV4ID0gdmV0aDFfaWR4O1xuK1x0aWYgKCFBU1NFUlRfRVEoaW5ldF9wdG9uKEFGX0lORVQsIElQVjRfSUZBQ0VfQUREUiwgXHUwMDI2ZmliX3BhcmFtcy1cdTAwM2VpcHY0X3NyYyksXG4rXHRcdCAgICAgICAxLCBcImluZXRfcHRvbihzcmMpXCIpIHx8XG4rXHQgICAgIUFTU0VSVF9FUShpbmV0X3B0b24oQUZfSU5FVCwgSVBWNF9RSU5RX0RTVCwgXHUwMDI2ZmliX3BhcmFtcy1cdTAwM2VpcHY0X2RzdCksXG4rXHRcdCAgICAgICAxLCBcImluZXRfcHRvbihxaW5xIGRzdClcIikpXG4rXHRcdGdvdG8gZmFpbDtcbitcdHNrZWwtXHUwMDNlYnNzLVx1MDAzZWxvb2t1cF9mbGFncyA9IEJQRl9GSUJfTE9PS1VQX1ZMQU4gfCBCUEZfRklCX0xPT0tVUF9TS0lQX05FSUdIO1xuK1x0c2tlbC1cdTAwM2Vic3MtXHUwMDNlcmVkaXJlY3RlZCA9IDA7XG4rXHRza2VsLVx1MDAzZWJzcy1cdTAwM2VwYXNzZWQgPSAwO1xuK1xuK1x0ZXJyID0gYnBmX3Byb2dfdGVzdF9ydW5fb3B0cyhyZWRpcmVjdF9mZCwgXHUwMDI2bGZfb3B0cyk7XG4rXHRpZiAoIUFTU0VSVF9PSyhlcnIsIFwidGVzdF9ydW4ocWlucSBlZ3Jlc3MpXCIpKVxuK1x0XHRnb3RvIGZhaWw7XG4rXHRBU1NFUlRfRVEoc2tlbC1cdTAwM2Vic3MtXHUwMDNlcGFzc2VkLCBSRURJUkVDVF9OUEtUUywgXCJxaW5xIGVncmVzcyBwYXNzZWRcIik7XG4rXHRBU1NFUlRfRVEoc2tlbC1cdTAwM2Vic3MtXHUwMDNlcmVkaXJlY3RlZCwgMCwgXCJxaW5xIGVncmVzcyBub3QgcmVkaXJlY3RlZFwiKTtcbitcbiBmYWlsOlxuK1x0aWYgKHhkcF9hdHRhY2hlZClcbitcdFx0YnBmX3hkcF9kZXRhY2godmV0aDJfaWR4LCBYRFBfRkxBR1NfRFJWX01PREUsIE5VTEwpO1xuIFx0aWYgKG5zdG9rZW4pXG4gXHRcdGNsb3NlX25ldG5zKG5zdG9rZW4pO1xuIFx0U1lTX05PRkFJTChcImlwIG5ldG5zIGRlbCBcIiBOU19URVNUKTtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvZmliX2xvb2t1cC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2ZpYl9sb29rdXAuY1xuaW5kZXggN2I1ZGQyMjE0ZmY0NmEuLjg2MmExZTk0NTdiNGUwIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2ZpYl9sb29rdXAuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2ZpYl9sb29rdXAuY1xuQEAgLTE5LDQgKzE5LDQwIEBAIGludCBmaWJfbG9va3VwKHN0cnVjdCBfX3NrX2J1ZmYgKnNrYilcbiBcdHJldHVybiBUQ19BQ1RfU0hPVDtcbiB9XG4gXG4rU0VDKFwieGRwXCIpXG4raW50IGZpYl9sb29rdXBfeGRwKHN0cnVjdCB4ZHBfbWQgKmN0eClcbit7XG4rXHRmaWJfbG9va3VwX3JldCA9IGJwZl9maWJfbG9va3VwKGN0eCwgXHUwMDI2ZmliX3BhcmFtcywgc2l6ZW9mKGZpYl9wYXJhbXMpLFxuK1x0XHRcdFx0XHRsb29rdXBfZmxhZ3MpO1xuK1xuK1x0cmV0dXJuIFhEUF9EUk9QO1xuK31cbitcbitpbnQgcmVkaXJlY3RlZCA9IDA7XG4raW50IHBhc3NlZCA9IDA7XG4raW50IGRlbGl2ZXJlZCA9IDA7XG4rXG4rU0VDKFwieGRwXCIpXG4raW50IGZpYl9sb29rdXBfcmVkaXJlY3Qoc3RydWN0IHhkcF9tZCAqY3R4KVxuK3tcbitcdHN0cnVjdCBicGZfZmliX2xvb2t1cCBwYXJhbXMgPSBmaWJfcGFyYW1zO1xuK1x0bG9uZyByZXQ7XG4rXG4rXHRyZXQgPSBicGZfZmliX2xvb2t1cChjdHgsIFx1MDAyNnBhcmFtcywgc2l6ZW9mKHBhcmFtcyksIGxvb2t1cF9mbGFncyk7XG4rXHRpZiAocmV0ID09IEJQRl9GSUJfTEtVUF9SRVRfU1VDQ0VTUykge1xuK1x0XHRyZWRpcmVjdGVkKys7XG4rXHRcdHJldHVybiBicGZfcmVkaXJlY3QocGFyYW1zLmlmaW5kZXgsIDApO1xuK1x0fVxuK1xuK1x0cGFzc2VkKys7XG4rXHRyZXR1cm4gWERQX1BBU1M7XG4rfVxuK1xuK1NFQyhcInhkcFwiKVxuK2ludCB4ZHBfY291bnQoc3RydWN0IHhkcF9tZCAqY3R4KVxuK3tcbitcdGRlbGl2ZXJlZCsrO1xuK1x0cmV0dXJuIFhEUF9EUk9QO1xuK31cbitcbiBjaGFyIF9saWNlbnNlW10gU0VDKFwibGljZW5zZVwiKSA9IFwiR1BMXCI7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNFQwMzoyNTo1My42OTcyNzk1NzZaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMTA2Mzk0NjM1MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipCUEYgRklCIExvb2t1cCBWTEFOIFBhdGNoIEFuYWx5c2lzIGFuZCBGdXp6aW5nIFN0cmF0ZWd5KipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCB0aGF0IGFkZHMgVkxBTiBzdXBwb3J0IHRvIHRoZSBgYnBmX2ZpYl9sb29rdXBgIGZ1bmN0aW9uYWxpdHkuICBNeSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgdGhhdCB0aGlzIGlzIGEgc2lnbmlmaWNhbnQgY2hhbmdlLCB0b3VjaGluZyBzZXZlcmFsIGtleSBhcmVhcy4gU3BlY2lmaWNhbGx5LCB0aGUgcGF0Y2ggaGFzIHRvdWNoZWQgYGluY2x1ZGUvdWFwaS9saW51eC9icGYuaGAsIGBuZXQvY29yZS9maWx0ZXIuY2AsIGB0b29scy9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmhgLCBhbmQgdGhlIEJQRiBzZWxmdGVzdHMuXG5cblRoZSBjb3JlIG9mIHRoaXMgbW9kaWZpY2F0aW9uIHNlZW1zIHRvIHJlc2lkZSBpbiBgbmV0L2NvcmUvZmlsdGVyLmNgLiAgSSBzZWUgbmV3IGZ1bmN0aW9uczogYGJwZl9maWJfc2V0X2Z3ZF9wYXJhbXNgIGFuZCBgYnBmX2ZpYl92bGFuX2lucHV0X2RldmAuICBJdCBhbHNvIGxvb2tzIGxpa2UgdGhlIGV4aXN0aW5nIGxvb2t1cCBmdW5jdGlvbnMsIGBicGZfaXB2NF9maWJfbG9va3VwYCwgYGJwZl9pcHY2X2ZpYl9sb29rdXBgLCBgYnBmX3hkcF9maWJfbG9va3VwYCwgYW5kIGBicGZfc2tiX2ZpYl9sb29rdXBgIGhhdmUgYmVlbiB1cGRhdGVkLiBUaGUgdXBkYXRlIGluY2x1ZGVzIGNoZWNrcyBmb3IgYEJQRl9GSUJfTE9PS1VQX1ZMQU5gIGFuZCBgQlBGX0ZJQl9MT09LVVBfVkxBTl9JTlBVVGAgZmxhZ3MsIGFuZCB0aGF0J3MgdGhlIGFyZWEgSSBuZWVkIHRvIHBheSB0aGUgbW9zdCBhdHRlbnRpb24gdG8gd2hlbiBnZW5lcmF0aW5nIGEgZnV6emluZyB0ZXN0IHBsYW4uXG5cbkkgbmVlZCB0byBmb2N1cyBteSBmdXp6aW5nIGVmZm9ydHMgb24gdGhvc2UgY29yZSBsb29rdXAgZnVuY3Rpb25zOiBgYnBmX2lwdjRfZmliX2xvb2t1cGAsIGBicGZfaXB2Nl9maWJfbG9va3VwYCwgYGJwZl94ZHBfZmliX2xvb2t1cGAsIGFuZCBgYnBmX3NrYl9maWJfbG9va3VwYC4gIEknbGwgY29uc2lkZXIgdGhlIHN0YXRpYyBmdW5jdGlvbnMgYGJwZl9maWJfc2V0X2Z3ZF9wYXJhbXNgIGFuZCBgYnBmX2ZpYl92bGFuX2lucHV0X2RldmAgdG8gYmUgY292ZXJlZCBhcyBwYXJ0IG9mIGZ1enppbmcgdGhlIGxvb2t1cCBmdW5jdGlvbnMsIGFzIEknbSBhc3N1bWluZyB0aGVyZSdzIG5vIHdheSB0byBjYWxsIHRoZW0gaW5kZXBlbmRlbnRseSAodW5sZXNzIEkgbWlzcyBzb21ldGhpbmcgZHVyaW5nIG15IHJldmlldykuXG5cbkxldCdzIGxvb2sgYXQgdGhlIGNvbmZpZ3VyYXRpb24gZGVwZW5kZW5jaWVzLiAgSSBzZWUgYENPTkZJR19WTEFOXzgwMjFRYCBpcyB1c2VkIHdpdGhpbiBgYnBmX2ZpYl9zZXRfZndkX3BhcmFtc2AgdW5kZXIgYSBjb25kaXRpb25hbC5cblxuYGBgY1xuI2lmIElTX0VOQUJMRUQoQ09ORklHX1ZMQU5fODAyMVEpXG5cdGlmICgoZmxhZ3MgXHUwMDI2IEJQRl9GSUJfTE9PS1VQX1ZMQU4pIFx1MDAyNlx1MDAyNiBpc192bGFuX2RldihkZXYpKSB7XG5gYGBcblxuU28sIHRvIGZ1bGx5IGV4ZXJjaXNlIGBCUEZfRklCX0xPT0tVUF9WTEFOYCwgSSdsbCAqZGVmaW5pdGVseSogbmVlZCB0byBlbnN1cmUgYENPTkZJR19WTEFOXzgwMjFRYCBpcyBlbmFibGVkIGR1cmluZyB0ZXN0aW5nLiAgSSdsbCBhbHNvIGhhdmUgdG8gYmUgY2FyZWZ1bCB3aGVuIGNyYWZ0aW5nIHRoZSBmdXp6aW5nIGlucHV0IHRvIGNvcnJlY3RseSBzZXQgdGhlIGFwcHJvcHJpYXRlIGZsYWdzIHRvIGhpdCB0aGF0IGNvZGUgcGF0aC4gIFRoZSB1c3VhbCBzdXNwZWN0cywgYENPTkZJR19JTkVUYCBhbmQgYENPTkZJR19JUFY2YCBhcmUgYWxzbyBpbiB1c2UuXG5cbknigJlsbCBkb3VibGUtY2hlY2sgdGhpcyBhZ2FpbiB3aXRoIGEgYGdyZXBwZXJgIHBhc3MgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMuIE15IGZ1enppbmcgdGVzdCBwbGFuIHdpbGwgbmVlZCB0byByZWZsZWN0IHRoZSBuZWNlc3NhcnkgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMgc28gSSBhbSBhcyB0aG9yb3VnaCBhcyBwb3NzaWJsZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjMyMTIsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3NzYsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNFQwMzoyNjowNC43NjEyMjkxODlaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU2MTQyMjU3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJwZl9maWJfc2V0X2Z3ZF9wYXJhbXNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2NvcmUvZmlsdGVyLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2NvcmUvZmlsdGVyLmM9NjE5MT1zdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9za2JfZ2V0X3hmcm1fc3RhdGVfcHJvdG8gPSB7XFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy02MjAzLSNpZiBJU19FTkFCTEVEKENPTkZJR19JTkVUKSB8fCBJU19FTkFCTEVEKENPTkZJR19JUFY2KVxcbm5ldC9jb3JlL2ZpbHRlci5jOjYyMDQ6c3RhdGljIGludCBicGZfZmliX3NldF9md2RfcGFyYW1zKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxubmV0L2NvcmUvZmlsdGVyLmMtNjIwNS1cXHRcXHRcXHRcXHQgIHN0cnVjdCBicGZfZmliX2xvb2t1cCAqcGFyYW1zLFxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmM9NjI1ND1zdGF0aWMgaW50IGJwZl9pcHY0X2ZpYl9sb29rdXAoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgYnBmX2ZpYl9sb29rdXAgKnBhcmFtcyxcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTY0MDAtc2V0X2Z3ZF9wYXJhbXM6XFxubmV0L2NvcmUvZmlsdGVyLmM6NjQwMTpcXHRyZXR1cm4gYnBmX2ZpYl9zZXRfZndkX3BhcmFtcyhkZXYsIHBhcmFtcywgZmxhZ3MsIG10dSwgaW5faWZpbmRleCk7XFxubmV0L2NvcmUvZmlsdGVyLmMtNjQwMi19XFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYz02NDA2PXN0YXRpYyBpbnQgYnBmX2lwdjZfZmliX2xvb2t1cChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBicGZfZmliX2xvb2t1cCAqcGFyYW1zLFxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtNjU1My1zZXRfZndkX3BhcmFtczpcXG5uZXQvY29yZS9maWx0ZXIuYzo2NTU0OlxcdHJldHVybiBicGZfZmliX3NldF9md2RfcGFyYW1zKGRldiwgcGFyYW1zLCBmbGFncywgbXR1LCBpbl9pZmluZGV4KTtcXG5uZXQvY29yZS9maWx0ZXIuYy02NTU1LX1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjRUMDM6MjY6MDQuOTE3Mzc4MTA1WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDQ1MDkwMDUzNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGFzIHlvdSByZXF1ZXN0ZWQ6XG5cbioqRGVjb25zdHJ1Y3RpbmcgYnBmX2ZpYl92bGFuX2lucHV0X2RldjogQSBEZWVwIERpdmUqKlxuXG5BbHJpZ2h0LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IG1pbmQgaW1tZWRpYXRlbHkgZ29lcyB0byB0aGUgcG90ZW50aWFsIGltcGFjdCBvZiBgYnBmX2ZpYl92bGFuX2lucHV0X2RldmAuIFdlJ3JlIHRhbGtpbmcgYWJvdXQgYSBCUEYgaG9vaywgcHJlc3VtYWJseSB3aXRoaW4gdGhlIGNvbnRleHQgb2YgYSBmb3J3YXJkaW5nIEluZm9ybWF0aW9uIEJhc2UgKEZJQikgbG9va3VwLCBhbmQgaXQncyBzcGVjaWZpY2FsbHkgZGVhbGluZyB3aXRoIFZMQU4gaW5ncmVzcyBwcm9jZXNzaW5nLiBcIklucHV0IGRldlwiIHN0cm9uZ2x5IHN1Z2dlc3RzIGl0J3MgaW52b2x2ZWQgaW4gaGFuZGxpbmcgdGhlIGluZ3Jlc3MgaW50ZXJmYWNlIG9yIGRldmljZS5cblxuSSdtIHN0YXJ0aW5nIHRvIHRoaW5rIGFib3V0IHRoZSBpbXBsaWNhdGlvbnMgZm9yIG5ldHdvcmsgcGVyZm9ybWFuY2UuIFRoaXMgQlBGIGhvb2sgbGlrZWx5IGFsbG93cyBmb3IgaW4ta2VybmVsIHRyYWZmaWMgc3RlZXJpbmcgYmFzZWQgb24gVkxBTiBpbmZvcm1hdGlvbiAqYmVmb3JlKiB0aGUgc3RhbmRhcmQgcm91dGluZyBwcm9jZXNzLiBUaGlzIGlzIHBvd2VyZnVsLlxuXG5NeSBpbW1lZGlhdGUgcXVlc3Rpb25zIGFyZTpcblxuKiAgIEhvdyBpcyB0aGlzIGludGVncmF0ZWQgd2l0aCB0aGUgdW5kZXJseWluZyBGSUIgc3RydWN0dXJlPyBJcyBpdCBwcmUtbG9va3VwIGZpbHRlcmluZyBvciBzb21ldGhpbmcgbW9yZSBjb21wbGV4P1xuKiAgIFdoYXQncyB0aGUgcGVyZm9ybWFuY2Ugb3ZlcmhlYWQ/IERvZXMgdGhpcyBhZGQgc2lnbmlmaWNhbnQgbGF0ZW5jeSBjb21wYXJlZCB0byBwdXJlIGhhcmR3YXJlIGZvcndhcmRpbmc/XG4qICAgV2hhdCdzIHRoZSBpbnRlcmFjdGlvbiB3aXRoIG90aGVyIEJQRiBwcm9ncmFtcz8gQ291bGQgaXQgYmUgY2hhaW5lZCB3aXRoIGV4aXN0aW5nIGVCUEYgZmlsdGVycyBmb3IgaW5jcmVhc2VkIGZsZXhpYmlsaXR5P1xuKiAgIEhvdyBpcyBWTEFOIGluZm9ybWF0aW9uIGV4dHJhY3RlZCAoZS5nLiwgZnJvbSB0aGUgaGVhZGVyLCBzcGVjaWZpYyBtZXRhZGF0YSk/IEFuZCwgaG93IGRvZXMgdGhpcyBpbnRlcmFjdCB3aXRoIHRoZSBuZXR3b3JrIHN0YWNrJ3MgaGFuZGxpbmcgb2YgVkxBTiB0YWdnZWQgZnJhbWVzP1xuXG5JIGFsc28gd29uZGVyIGFib3V0IHRoZSB1c2UgY2FzZXMgaGVyZS4gSXQgcHJvYmFibHkgZW5hYmxlcyBWTEFOLWF3YXJlIHRyYWZmaWMgZW5naW5lZXJpbmcsIHBvbGljeSBlbmZvcmNlbWVudCwgb3IgZXZlbiBtb3JlIGFkdmFuY2VkIHNjZW5hcmlvcy4gSSdtIGltYWdpbmluZyBzY2VuYXJpb3MgaW52b2x2aW5nIHNwZWNpZmljIFZMQU5zLCBwZXJoYXBzIG9uIGEgc2VydmljZSBwcm92aWRlciBlZGdlLCBiZWluZyByb3V0ZWQgZGlmZmVyZW50bHkgYmFzZWQgb24gc29tZSBjb25kaXRpb24uIFRoaXMgY291bGQgYmUgdXNlZnVsIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyB3aXRoIGEgbG90IG9mIHRlbmFudCBuZXR3b3Jrcy5cblxuSSdtIGludHJpZ3VlZC4gSSdtIGdvaW5nIHRvIGhhdmUgdG8gZGl2ZSBpbnRvIHRoZSBrZXJuZWwgc291cmNlIGFuZCB0aGUgcmVsZXZhbnQgZG9jdW1lbnRhdGlvbiB0byBnZXQgYSBoYW5kbGUgb24gdGhlIGFjdHVhbCBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzIGFuZCBleHBsb3JlIGhvdyB0aGlzIGZpdHMgaW50byBteSBvdmVyYWxsIG5ldHdvcmsgZGVzaWduIHN0cmF0ZWdpZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI1MDYzLCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjRUMDM6MjY6MDkuMzY4MjgyMzU5WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk2MDMyNTQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJwZl9maWJfdmxhbl9pbnB1dF9kZXZcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2NvcmUvZmlsdGVyLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2NvcmUvZmlsdGVyLmM9NjIwND1zdGF0aWMgaW50IGJwZl9maWJfc2V0X2Z3ZF9wYXJhbXMoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTYyMzItXFxubmV0L2NvcmUvZmlsdGVyLmM6NjIzMzpzdGF0aWMgc3RydWN0IG5ldF9kZXZpY2UgKmJwZl9maWJfdmxhbl9pbnB1dF9kZXYoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG5uZXQvY29yZS9maWx0ZXIuYy02MjM0LVxcdFxcdFxcdFxcdFxcdFxcdCBjb25zdCBzdHJ1Y3QgYnBmX2ZpYl9sb29rdXAgKnBhcmFtcylcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jPTYyNTQ9c3RhdGljIGludCBicGZfaXB2NF9maWJfbG9va3VwKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGJwZl9maWJfbG9va3VwICpwYXJhbXMsXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy02MjcxLVxcdGlmIChmbGFncyBcXHUwMDI2IEJQRl9GSUJfTE9PS1VQX1ZMQU5fSU5QVVQpIHtcXG5uZXQvY29yZS9maWx0ZXIuYzo2MjcyOlxcdFxcdGRldiA9IGJwZl9maWJfdmxhbl9pbnB1dF9kZXYoZGV2LCBwYXJhbXMpO1xcbm5ldC9jb3JlL2ZpbHRlci5jLTYyNzMtXFx0XFx0aWYgKElTX0VSUihkZXYpKVxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmM9NjQwNj1zdGF0aWMgaW50IGJwZl9pcHY2X2ZpYl9sb29rdXAoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgYnBmX2ZpYl9sb29rdXAgKnBhcmFtcyxcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTY0MjktXFx0aWYgKGZsYWdzIFxcdTAwMjYgQlBGX0ZJQl9MT09LVVBfVkxBTl9JTlBVVCkge1xcbm5ldC9jb3JlL2ZpbHRlci5jOjY0MzA6XFx0XFx0ZGV2ID0gYnBmX2ZpYl92bGFuX2lucHV0X2RldihkZXYsIHBhcmFtcyk7XFxubmV0L2NvcmUvZmlsdGVyLmMtNjQzMS1cXHRcXHRpZiAoSVNfRVJSKGRldikpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI0VDAzOjI2OjA5LjQ2NDMyMDI5N1oiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjg5MTE1MTkwNDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyB0aGUgQlBGIEZJQiBMb29rdXAgSGVscGVyIHdpdGggVkxBTiBTdXBwb3J0KipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpbnRyb2R1Y2VzIHNvbWUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBCUEYgRklCIGxvb2t1cCBoZWxwZXIsIHNwZWNpZmljYWxseSBhZGRpbmcgVkxBTiBoYW5kbGluZy4gUmlnaHQgYXdheSwgdGhpcyBzY3JlYW1zIFwiZnV6emluZyB0YXJnZXQuXCIgVGhlIGNvcmUgb2Ygcm91dGluZyBsb2dpYyBpbiBCUEYgaXMgYmVpbmcgbW9kaWZpZWQsIGFuZCB0aGF0J3MgYWx3YXlzIGEgcG90ZW50aWFsIGFyZWEgZm9yIHZ1bG5lcmFiaWxpdGllcywgZXNwZWNpYWxseSBzaW5jZSB1c2Vyc3BhY2UgQlBGIHByb2dyYW1zIGNhbiBub3cgaW5mbHVlbmNlIHRoZSBWTEFOIHJlc29sdXRpb24gcHJvY2VzcyB0aHJvdWdoIFhEUCBvciBUQy4gV2UgbmVlZCB0byBiZSB0aG9yb3VnaC5cblxuTXkgaW5pdGlhbCBmb2N1cyBuZWVkcyB0byBiZSBvbiB0aGVzZSBmdW5jdGlvbnM6IGBicGZfaXB2NF9maWJfbG9va3VwYCwgYGJwZl9pcHY2X2ZpYl9sb29rdXBgLCBgYnBmX3hkcF9maWJfbG9va3VwYCwgYGJwZl9za2JfZmliX2xvb2t1cGAsIGBicGZfZmliX3NldF9md2RfcGFyYW1zYCwgYW5kIGBicGZfZmliX3ZsYW5faW5wdXRfZGV2YC4gVGhlc2UgYXJlIHRoZSBrZXkgZW50cnkgcG9pbnRzIGFuZCBzdXBwb3J0aW5nIGZ1bmN0aW9ucyB0aGF0IGxpa2VseSBjb250YWluIHRoZSBuZXcgVkxBTi1yZWxhdGVkIGxvZ2ljLlxuXG5JIG5lZWQgdG8gbWFrZSBzdXJlIGBWTEFOXzgwMjFRYCBpcyBlbmFibGVkIGluIHRoZSBjb25maWd1cmF0aW9uIHRvIGV4ZXJjaXNlIHRoZSBjaGFuZ2VzLCBidXQgbGV0J3MgcXVpY2tseSB2ZXJpZnkgdGhhdCB0aGUgc3RhbmRhcmQgbmV0d29ya2luZyBjb25maWcgb3B0aW9ucyBsaWtlIGBDT05GSUdfSU5FVGAsIGBDT05GSUdfSVBWNmAsIGBDT05GSUdfQlBGX1NZU0NBTExgLCBhbmQgYENPTkZJR19ORVRgIGFyZSBlbmFibGVkLiBHb29kLlxuXG5JJ20gdGhpbmtpbmcgYWJvdXQgdGhlIHJhdGlvbmFsZSBiZWhpbmQgdGhpcyBwYXRjaC4gVGhlIHBhdGNoIGlzIGFkZGluZyBWTEFOIHN1cHBvcnQgdGhyb3VnaCB0aGUgYEJQRl9GSUJfTE9PS1VQX1ZMQU5gIGFuZCBgQlBGX0ZJQl9MT09LVVBfVkxBTl9JTlBVVGAgZmxhZ3MgdG8gYGJwZl9maWJfbG9va3VwYC4gVGhpcyBpcyBjb3JlLCBzbyBmdXp6aW5nIGlzICplc3NlbnRpYWwqIHRvIG1ha2Ugc3VyZSBub3RoaW5nIGdvZXMgd3Jvbmcgd2l0aCB0aGlzIG5ldyByZXNvbHV0aW9uLlxuXG5BbmQgYXMgSSByZS1yZXZpZXcgbXkgZm9jdXMgc3ltYm9scywgSSdtIGp1c3QgcXVpY2tseSBjb25maXJtaW5nIHRoYXQgYGJwZl9maWJfdmxhbl9pbnB1dF9kZXZgIGFuZCBgYnBmX2ZpYl9zZXRfZndkX3BhcmFtc2AgYXJlIGluZGVlZCBpbmNsdWRlZC4gVGhleSBhcmUgc3RhdGljLCBidXQgbm90IGlubGluZSwgc28gdGhleSdyZSB2YWxpZCB0YXJnZXRzLlxuXG5SaWdodCwgSSdtIHJlYWR5IHRvIHNldCB1cCB0aGUgZnV6emluZyBlbnZpcm9ubWVudCBhbmQgZ2V0IHRvIHdvcmsuIExldCdzIHN0YXJ0IHdpdGggdGhlIGJhc2UgY29uZmlndXJhdGlvbiBhbmQgYnVpbGQgZnJvbSB0aGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjU5MDcsIk91dHB1dFRva2VucyI6MjI1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDU1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI0VDAzOjI2OjE4LjM3NTg0MTQwNVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA3NTU4OTU4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJWTEFOXzgwMjFRXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYnBmX2lwdjRfZmliX2xvb2t1cFwiLFxuICAgIFwiYnBmX2lwdjZfZmliX2xvb2t1cFwiLFxuICAgIFwiYnBmX3hkcF9maWJfbG9va3VwXCIsXG4gICAgXCJicGZfc2tiX2ZpYl9sb29rdXBcIixcbiAgICBcImJwZl9maWJfc2V0X2Z3ZF9wYXJhbXNcIixcbiAgICBcImJwZl9maWJfdmxhbl9pbnB1dF9kZXZcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUgQlBGIEZJQiBsb29rdXAgaGVscGVyIChgYnBmX2ZpYl9sb29rdXBgKSwgYWRkaW5nIHN1cHBvcnQgZm9yIFZMQU5zIHZpYSBgQlBGX0ZJQl9MT09LVVBfVkxBTmAgYW5kIGBCUEZfRklCX0xPT0tVUF9WTEFOX0lOUFVUYCBmbGFncy4gVGhpcyBtb2RpZmllcyBjb3JlIHJvdXRpbmcgbG9va3VwIGxvZ2ljIHdpdGhpbiBCUEYgcHJvZ3JhbXMsIHdoaWNoIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSBieSBsb2FkaW5nIGFuZCBleGVjdXRpbmcgQlBGIHByb2dyYW1zIChYRFAgb3IgVEMpLiBGdXp6aW5nIGlzIHJlcXVpcmVkIHRvIGVuc3VyZSB0aGUgbmV3IFZMQU4gcmVzb2x1dGlvbiBsb2dpYyBhbmQgaXRzIGludGVyYWN0aW9uIHdpdGggdGhlIG5ldHdvcmtpbmcgc3RhY2sgaXMgcm9idXN0LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlZMQU5fODAyMVFcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJicGZfaXB2NF9maWJfbG9va3VwXCIsXG4gICAgXCJicGZfaXB2Nl9maWJfbG9va3VwXCIsXG4gICAgXCJicGZfeGRwX2ZpYl9sb29rdXBcIixcbiAgICBcImJwZl9za2JfZmliX2xvb2t1cFwiLFxuICAgIFwiYnBmX2ZpYl9zZXRfZndkX3BhcmFtc1wiLFxuICAgIFwiYnBmX2ZpYl92bGFuX2lucHV0X2RldlwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBCUEYgRklCIGxvb2t1cCBoZWxwZXIgKGBicGZfZmliX2xvb2t1cGApLCBhZGRpbmcgc3VwcG9ydCBmb3IgVkxBTnMgdmlhIGBCUEZfRklCX0xPT0tVUF9WTEFOYCBhbmQgYEJQRl9GSUJfTE9PS1VQX1ZMQU5fSU5QVVRgIGZsYWdzLiBUaGlzIG1vZGlmaWVzIGNvcmUgcm91dGluZyBsb29rdXAgbG9naWMgd2l0aGluIEJQRiBwcm9ncmFtcywgd2hpY2ggaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIGJ5IGxvYWRpbmcgYW5kIGV4ZWN1dGluZyBCUEYgcHJvZ3JhbXMgKFhEUCBvciBUQykuIEZ1enppbmcgaXMgcmVxdWlyZWQgdG8gZW5zdXJlIHRoZSBuZXcgVkxBTiByZXNvbHV0aW9uIGxvZ2ljIGFuZCBpdHMgaW50ZXJhY3Rpb24gd2l0aCB0aGUgbmV0d29ya2luZyBzdGFjayBpcyByb2J1c3QuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflowzdh5z[0].run-triage(0) Phase: Succeeded StartedAt: 2026-06-24 03:19:49 +0000 UTC FinishedAt: 2026-06-24 03:26:20 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "bpf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git", "commit_hash": "a975094bf98ca97be9146f9d3b5681a6f9cf5ce3", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "VLAN_8021Q" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "bpf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git", "commit_hash": "a975094bf98ca97be9146f9d3b5681a6f9cf5ce3", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "VLAN_8021Q" ], "series_id": "89510d8e-b944-4377-a5b8-7fbad6539b44" }, "track": "KASAN", "fuzz": { "focus": [ "bpf", "net" ], "focus_symbols": [ "bpf_ipv4_fib_lookup", "bpf_ipv6_fib_lookup", "bpf_xdp_fib_lookup", "bpf_skb_fib_lookup", "bpf_fib_set_fwd_params", "bpf_fib_vlan_input_dev" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db", "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI0IDAzOjI1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1ZMQU5fODAyMVEmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDticGZfaXB2NF9maWJfbG9va3VwJiMzNDssCiAgICAmIzM0O2JwZl9pcHY2X2ZpYl9sb29rdXAmIzM0OywKICAgICYjMzQ7YnBmX3hkcF9maWJfbG9va3VwJiMzNDssCiAgICAmIzM0O2JwZl9za2JfZmliX2xvb2t1cCYjMzQ7LAogICAgJiMzNDticGZfZmliX3NldF9md2RfcGFyYW1zJiMzNDssCiAgICAmIzM0O2JwZl9maWJfdmxhbl9pbnB1dF9kZXYmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIEJQRiBGSUIgbG9va3VwIGhlbHBlciAoYGJwZl9maWJfbG9va3VwYCksIGFkZGluZyBzdXBwb3J0IGZvciBWTEFOcyB2aWEgYEJQRl9GSUJfTE9PS1VQX1ZMQU5gIGFuZCBgQlBGX0ZJQl9MT09LVVBfVkxBTl9JTlBVVGAgZmxhZ3MuIFRoaXMgbW9kaWZpZXMgY29yZSByb3V0aW5nIGxvb2t1cCBsb2dpYyB3aXRoaW4gQlBGIHByb2dyYW1zLCB3aGljaCBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgYnkgbG9hZGluZyBhbmQgZXhlY3V0aW5nIEJQRiBwcm9ncmFtcyAoWERQIG9yIFRDKS4gRnV6emluZyBpcyByZXF1aXJlZCB0byBlbnN1cmUgdGhlIG5ldyBWTEFOIHJlc29sdXRpb24gbG9naWMgYW5kIGl0cyBpbnRlcmFjdGlvbiB3aXRoIHRoZSBuZXR3b3JraW5nIHN0YWNrIGlzIHJvYnVzdC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNCAwMzoyNTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDM1MzM3MWNkYTliN2U5YzcyN2U4OGEwYjlmN2RmMTVkNTBmZWViOGVcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIEp1biAyNCAwMzoyNTo1MSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmggYi9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmhcbmluZGV4IDg5YjM2ZGU1ZmRiYjZkLi5kNDIxODk1NGM1MGY1MyAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oXG5AQCAtMzUzMiw2ICYjNDM7MzUzMiw0NSBAQCB1bmlvbiBicGZfYXR0ciB7XG4gICpcdFx0XHRVc2UgdGhlIG1hcmsgcHJlc2VudCBpbiAqcGFyYW1zKi1cdTAwM2VtYXJrIGZvciB0aGUgZmliIGxvb2t1cC5cbiAgKlx0XHRcdFRoaXMgb3B0aW9uIHNob3VsZCBub3QgYmUgdXNlZCB3aXRoIEJQRl9GSUJfTE9PS1VQX0RJUkVDVCxcbiAgKlx0XHRcdGFzIGl0IG9ubHkgaGFzIG1lYW5pbmcgZm9yIGZ1bGwgbG9va3Vwcy5cbiYjNDM7ICpcdFx0KipCUEZfRklCX0xPT0tVUF9WTEFOKipcbiYjNDM7ICpcdFx0XHRJZiB0aGUgZmliIGxvb2t1cCByZXNvbHZlcyB0byBhIFZMQU4gZGV2aWNlIHdob3NlXG4mIzQzOyAqXHRcdFx0cGFyZW50IGlzIGEgcmVhbCAobm9uLVZMQU4pIGRldmljZSwgc2V0XG4mIzQzOyAqXHRcdFx0KnBhcmFtcyotXHUwMDNlaF92bGFuX3Byb3RvIGFuZCAqcGFyYW1zKi1cdTAwM2VoX3ZsYW5fVENJIGZyb21cbiYjNDM7ICpcdFx0XHR0aGUgVkxBTiBkZXZpY2UgYW5kIHJlcGxhY2UgKnBhcmFtcyotXHUwMDNlaWZpbmRleCB3aXRoIHRoZVxuJiM0MzsgKlx0XHRcdHBhcmVudCYjMzk7cyBpZmluZGV4LiAqcGFyYW1zKi1cdTAwM2VoX3ZsYW5fVENJIGNhcnJpZXMgdGhlIFZJRFxuJiM0MzsgKlx0XHRcdG9ubHksIHdpdGggUENQIGFuZCBERUkgYml0cyB6ZXJvOyBhIGNvbnN1bWVyIHdhbnRpbmcgdG9cbiYjNDM7ICpcdFx0XHRzZXQgZWdyZXNzIHByaW9yaXR5IHdyaXRlcyBQQ1AgaXRzZWxmLiAqcGFyYW1zKi1cdTAwM2VzbWFjIGlzXG4mIzQzOyAqXHRcdFx0dGhlIFZMQU4gZGV2aWNlJiMzOTtzIG93biBhZGRyZXNzLCB3aGljaCBjYW4gZGlmZmVyIGZyb20gdGhlXG4mIzQzOyAqXHRcdFx0cGFyZW50JiMzOTtzLiBPbmx5IHRoZSBpbW1lZGlhdGUgcGFyZW50IGlzIHJlc29sdmVkOyBpZiBpdFxuJiM0MzsgKlx0XHRcdGlzIGl0c2VsZiBhIFZMQU4gZGV2aWNlIChRaW5RKSBvciBpbiBhbm90aGVyIG5hbWVzcGFjZSxcbiYjNDM7ICpcdFx0XHR0aGUgZWdyZXNzIGNhbm5vdCBiZSByZWR1Y2VkIHRvIGEgcGh5c2ljYWwgZGV2aWNlIHBsdXNcbiYjNDM7ICpcdFx0XHRvbmUgdGFnIGFuZCB0aGUgbG9va3VwIHJldHVybnNcbiYjNDM7ICpcdFx0XHQqKkJQRl9GSUJfTEtVUF9SRVRfVkxBTl9GQUlMVVJFKiogd2l0aCAqcGFyYW1zKi1cdTAwM2VpZmluZGV4XG4mIzQzOyAqXHRcdFx0bGVmdCBhdCB0aGUgaW5wdXQuIFJlLWlzc3VlIHdpdGhvdXRcbiYjNDM7ICpcdFx0XHQqKkJQRl9GSUJfTE9PS1VQX1ZMQU4qKiB0byBvYnRhaW4gdGhlIFZMQU4gZGV2aWNlJiMzOTtzIG93blxuJiM0MzsgKlx0XHRcdGlmaW5kZXguIFRoZSBzd2FwIGFuZCB0aGUgdmxhbiBmaWVsZHNcbiYjNDM7ICpcdFx0XHRhcmUgd3JpdHRlbiBvbmx5IG9uIHN1Y2Nlc3M7IG90aGVyIG91dHB1dCBmaWVsZHMga2VlcFxuJiM0MzsgKlx0XHRcdHRoZSBoZWxwZXImIzM5O3MgZXhpc3RpbmcgYmVoYXZpb3VyLCBzbyBhIGZyYWctbmVlZGVkIHJlc3VsdFxuJiM0MzsgKlx0XHRcdHN0aWxsIHJlcG9ydHMgdGhlIHJvdXRlIG10dSBpbiAqcGFyYW1zKi1cdTAwM2VtdHVfcmVzdWx0LlxuJiM0MzsgKlx0XHRcdFRoaXMgZmxhZyBpcyBvbmx5IHZhbGlkIGZvciBYRFAgcHJvZ3JhbXM7IHRjIHByb2dyYW1zXG4mIzQzOyAqXHRcdFx0cmVjZWl2ZSAtRUlOVkFMIHNpbmNlIHRoZXkgY2FuIHJlZGlyZWN0IHRvIHRoZSBWTEFOXG4mIzQzOyAqXHRcdFx0ZGV2aWNlIGRpcmVjdGx5LlxuJiM0MzsgKlx0XHQqKkJQRl9GSUJfTE9PS1VQX1ZMQU5fSU5QVVQqKlxuJiM0MzsgKlx0XHRcdFRyZWF0ICpwYXJhbXMqLVx1MDAzZWhfdmxhbl9wcm90byBhbmQgKnBhcmFtcyotXHUwMDNlaF92bGFuX1RDSVxuJiM0MzsgKlx0XHRcdGFzIGFuIGlucHV0IFZMQU4gdGFnIGFuZCBydW4gdGhlIGxvb2t1cCBhcyBpZiBpbmdyZXNzXG4mIzQzOyAqXHRcdFx0aGFkIGhhcHBlbmVkIG9uIHRoZSBWTEFOIHN1YmludGVyZmFjZSBjYXJyeWluZyB0aGF0IHRhZ1xuJiM0MzsgKlx0XHRcdG9uICpwYXJhbXMqLVx1MDAzZWlmaW5kZXguIFRoZSBWSUQgaXMgdGhlIGxvdyAxMiBiaXRzIG9mXG4mIzQzOyAqXHRcdFx0KnBhcmFtcyotXHUwMDNlaF92bGFuX1RDSTsgKnBhcmFtcyotXHUwMDNlaF92bGFuX3Byb3RvIG11c3QgYmVcbiYjNDM7ICpcdFx0XHRFVEhfUF84MDIxUSBvciBFVEhfUF84MDIxQUQgaW4gbmV0d29yayBieXRlIG9yZGVyLCBlbHNlXG4mIzQzOyAqXHRcdFx0KiotRUlOVkFMKiouIElmICpwYXJhbXMqLVx1MDAzZWlmaW5kZXggaXMgaXRzZWxmIGEgVkxBTlxuJiM0MzsgKlx0XHRcdGRldmljZSwgaXRzIGlubmVyIChRaW5RKSBzdWJpbnRlcmZhY2UgaXMgbWF0Y2hlZDsgZm9yIGFcbiYjNDM7ICpcdFx0XHRib25kIG9yIHRlYW0sIHBhc3MgdGhlIG1hc3RlciYjMzk7cyBpZmluZGV4LiBBbiB1bm1hdGNoZWRcbiYjNDM7ICpcdFx0XHR0YWcsIGEgZG93biBkZXZpY2UsIG9yIG9uZSBpbiBhbm90aGVyIG5hbWVzcGFjZSByZXR1cm5zXG4mIzQzOyAqXHRcdFx0KipCUEZfRklCX0xLVVBfUkVUX05PVF9GV0RFRCoqLCBtaXJyb3JpbmcgcmVhbCBpbmdyZXNzLlxuJiM0MzsgKlx0XHRcdEEgVklEIG9mIDAgaXMgbG9va2VkIHVwIGxpdGVyYWxseSwgc28gZG8gbm90IHNldCB0aGlzXG4mIzQzOyAqXHRcdFx0ZmxhZyBmb3IgcHJpb3JpdHktdGFnZ2VkIGZyYW1lcy4gQ2Fubm90IGJlIGNvbWJpbmVkIHdpdGhcbiYjNDM7ICpcdFx0XHQqKkJQRl9GSUJfTE9PS1VQX1RCSUQqKiBvciAqKkJQRl9GSUJfTE9PS1VQX09VVFBVVCoqXG4mIzQzOyAqXHRcdFx0KHJldHVybnMgKiotRUlOVkFMKiopLlxuICAqXG4gICpcdFx0KmN0eCogaXMgZWl0aGVyICoqc3RydWN0IHhkcF9tZCoqIGZvciBYRFAgcHJvZ3JhbXMgb3JcbiAgKlx0XHQqKnN0cnVjdCBza19idWZmKiogdGMgY2xzX2FjdCBwcm9ncmFtcy5cbkBAIC03MzI3LDYgJiM0Mzs3MzY2LDggQEAgZW51bSB7XG4gXHRCUEZfRklCX0xPT0tVUF9UQklEICAgID0gKDFVIFx1MDAzY1x1MDAzYyAzKSxcbiBcdEJQRl9GSUJfTE9PS1VQX1NSQyAgICAgPSAoMVUgXHUwMDNjXHUwMDNjIDQpLFxuIFx0QlBGX0ZJQl9MT09LVVBfTUFSSyAgICA9ICgxVSBcdTAwM2NcdTAwM2MgNSksXG4mIzQzO1x0QlBGX0ZJQl9MT09LVVBfVkxBTiAgICA9ICgxVSBcdTAwM2NcdTAwM2MgNiksXG4mIzQzO1x0QlBGX0ZJQl9MT09LVVBfVkxBTl9JTlBVVCA9ICgxVSBcdTAwM2NcdTAwM2MgNyksXG4gfTtcbiBcbiBlbnVtIHtcbkBAIC03MzQwLDYgJiM0Mzs3MzgxLDcgQEAgZW51bSB7XG4gXHRCUEZfRklCX0xLVVBfUkVUX05PX05FSUdILCAgICAgLyogbm8gbmVpZ2hib3IgZW50cnkgZm9yIG5oICovXG4gXHRCUEZfRklCX0xLVVBfUkVUX0ZSQUdfTkVFREVELCAgLyogZnJhZ21lbnRhdGlvbiByZXF1aXJlZCB0byBmd2QgKi9cbiBcdEJQRl9GSUJfTEtVUF9SRVRfTk9fU1JDX0FERFIsICAvKiBmYWlsZWQgdG8gZGVyaXZlIElQIHNyYyBhZGRyICovXG4mIzQzO1x0QlBGX0ZJQl9MS1VQX1JFVF9WTEFOX0ZBSUxVUkUsIC8qIFZMQU4gZWdyZXNzLCBwYXJlbnQgdW5yZXNvbHZhYmxlICovXG4gfTtcbiBcbiBzdHJ1Y3QgYnBmX2ZpYl9sb29rdXAge1xuQEAgLTczOTMsNyAmIzQzOzc0MzUsMTMgQEAgc3RydWN0IGJwZl9maWJfbG9va3VwIHtcbiBcbiBcdHVuaW9uIHtcbiBcdFx0c3RydWN0IHtcbi1cdFx0XHQvKiBvdXRwdXQgKi9cbiYjNDM7XHRcdFx0LypcbiYjNDM7XHRcdFx0ICogb3V0cHV0IHdpdGggQlBGX0ZJQl9MT09LVVBfVkxBTjogc2V0IGZyb20gdGhlXG4mIzQzO1x0XHRcdCAqIHJlc29sdmVkIGVncmVzcyBWTEFOIGRldmljZSAoc2VlIHRoZSBmbGFnKTsgemVyb2VkXG4mIzQzO1x0XHRcdCAqIG9uIG90aGVyIHN1Y2Nlc3NmdWwgbG9va3Vwcy4gaW5wdXQgd2l0aFxuJiM0MztcdFx0XHQgKiBCUEZfRklCX0xPT0tVUF9WTEFOX0lOUFVUOiB0aGUgVkxBTiB0YWcgdG8gc2NvcGVcbiYjNDM7XHRcdFx0ICogdGhlIGxvb2t1cCBieS5cbiYjNDM7XHRcdFx0ICovXG4gXHRcdFx0X19iZTE2XHRoX3ZsYW5fcHJvdG87XG4gXHRcdFx0X19iZTE2XHRoX3ZsYW5fVENJO1xuIFx0XHR9O1xuZGlmZiAtLWdpdCBhL25ldC9jb3JlL2ZpbHRlci5jIGIvbmV0L2NvcmUvZmlsdGVyLmNcbmluZGV4IDJlOTZiNGI4NDdjZTEyLi4wZWEzNjJmYTQyODdlMyAxMDA2NDRcbi0tLSBhL25ldC9jb3JlL2ZpbHRlci5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvY29yZS9maWx0ZXIuY1xuQEAgLTYyMDEsMjEgJiM0Mzs2MjAxLDYwIEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3NrYl9nZXRfeGZybV9zdGF0ZV9wcm90byA9IHtcbiAjZW5kaWZcbiBcbiAjaWYgSVNfRU5BQkxFRChDT05GSUdfSU5FVCkgfHwgSVNfRU5BQkxFRChDT05GSUdfSVBWNilcbi1zdGF0aWMgaW50IGJwZl9maWJfc2V0X2Z3ZF9wYXJhbXMoc3RydWN0IGJwZl9maWJfbG9va3VwICpwYXJhbXMsIHUzMiBtdHUpXG4mIzQzO3N0YXRpYyBpbnQgYnBmX2ZpYl9zZXRfZndkX3BhcmFtcyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuJiM0MztcdFx0XHRcdCAgc3RydWN0IGJwZl9maWJfbG9va3VwICpwYXJhbXMsXG4mIzQzO1x0XHRcdFx0ICB1MzIgZmxhZ3MsIHUzMiBtdHUsIHUzMiBpbl9pZmluZGV4KVxuIHtcbiBcdHBhcmFtcy1cdTAwM2VoX3ZsYW5fVENJID0gMDtcbiBcdHBhcmFtcy1cdTAwM2VoX3ZsYW5fcHJvdG8gPSAwO1xuJiM0MztcbiYjNDM7I2lmIElTX0VOQUJMRUQoQ09ORklHX1ZMQU5fODAyMVEpXG4mIzQzO1x0aWYgKChmbGFncyBcdTAwMjYgQlBGX0ZJQl9MT09LVVBfVkxBTikgXHUwMDI2XHUwMDI2IGlzX3ZsYW5fZGV2KGRldikpIHtcbiYjNDM7XHRcdHN0cnVjdCBuZXRfZGV2aWNlICpyZWFsX2RldiA9IHZsYW5fZGV2X3ByaXYoZGV2KS1cdTAwM2VyZWFsX2RldjtcbiYjNDM7XG4mIzQzO1x0XHRpZiAoIWlzX3ZsYW5fZGV2KHJlYWxfZGV2KSBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdCAgICBuZXRfZXEoZGV2X25ldChyZWFsX2RldiksIGRldl9uZXQoZGV2KSkpIHtcbiYjNDM7XHRcdFx0cGFyYW1zLVx1MDAzZWhfdmxhbl9wcm90byA9IHZsYW5fZGV2X3ZsYW5fcHJvdG8oZGV2KTtcbiYjNDM7XHRcdFx0cGFyYW1zLVx1MDAzZWhfdmxhbl9UQ0kgPSBodG9ucyh2bGFuX2Rldl92bGFuX2lkKGRldikpO1xuJiM0MztcdFx0XHRwYXJhbXMtXHUwMDNlaWZpbmRleCA9IHJlYWxfZGV2LVx1MDAzZWlmaW5kZXg7XG4mIzQzO1x0XHR9IGVsc2Uge1xuJiM0MztcdFx0XHRwYXJhbXMtXHUwMDNlaWZpbmRleCA9IGluX2lmaW5kZXg7XG4mIzQzO1x0XHRcdHJldHVybiBCUEZfRklCX0xLVVBfUkVUX1ZMQU5fRkFJTFVSRTtcbiYjNDM7XHRcdH1cbiYjNDM7XHR9XG4mIzQzOyNlbmRpZlxuJiM0MztcbiBcdGlmIChtdHUpXG4gXHRcdHBhcmFtcy1cdTAwM2VtdHVfcmVzdWx0ID0gbXR1OyAvKiB1bmlvbiB3aXRoIHRvdF9sZW4gKi9cbiBcbiBcdHJldHVybiAwO1xuIH1cbiYjNDM7XG4mIzQzO3N0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZSAqYnBmX2ZpYl92bGFuX2lucHV0X2RldihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuJiM0MztcdFx0XHRcdFx0XHQgY29uc3Qgc3RydWN0IGJwZl9maWJfbG9va3VwICpwYXJhbXMpXG4mIzQzO3tcbiYjNDM7XHRfX2JlMTYgcHJvdG8gPSBwYXJhbXMtXHUwMDNlaF92bGFuX3Byb3RvO1xuJiM0MztcdHN0cnVjdCBuZXRfZGV2aWNlICp2bGFuX2RldjtcbiYjNDM7XHR1MTYgdmlkO1xuJiM0MztcbiYjNDM7XHRpZiAocHJvdG8gIT0gaHRvbnMoRVRIX1BfODAyMVEpIFx1MDAyNlx1MDAyNiBwcm90byAhPSBodG9ucyhFVEhfUF84MDIxQUQpKVxuJiM0MztcdFx0cmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7XG4mIzQzO1xuJiM0MztcdHZpZCA9IG50b2hzKHBhcmFtcy1cdTAwM2VoX3ZsYW5fVENJKSBcdTAwMjYgVkxBTl9WSURfTUFTSztcbiYjNDM7XHR2bGFuX2RldiA9IF9fdmxhbl9maW5kX2Rldl9kZWVwX3JjdShkZXYsIHByb3RvLCB2aWQpO1xuJiM0MztcdGlmICghdmxhbl9kZXYgfHwgISh2bGFuX2Rldi1cdTAwM2VmbGFncyBcdTAwMjYgSUZGX1VQKSB8fFxuJiM0MztcdCAgICAhbmV0X2VxKGRldl9uZXQodmxhbl9kZXYpLCBkZXZfbmV0KGRldikpKVxuJiM0MztcdFx0cmV0dXJuIE5VTEw7XG4mIzQzO1xuJiM0MztcdHJldHVybiB2bGFuX2RldjtcbiYjNDM7fVxuICNlbmRpZlxuIFxuICNpZiBJU19FTkFCTEVEKENPTkZJR19JTkVUKVxuIHN0YXRpYyBpbnQgYnBmX2lwdjRfZmliX2xvb2t1cChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBicGZfZmliX2xvb2t1cCAqcGFyYW1zLFxuIFx0XHRcdCAgICAgICB1MzIgZmxhZ3MsIGJvb2wgY2hlY2tfbXR1KVxuIHtcbiYjNDM7XHR1MzIgaW5faWZpbmRleCA9IHBhcmFtcy1cdTAwM2VpZmluZGV4O1xuIFx0c3RydWN0IG5laWdoYm91ciAqbmVpZ2ggPSBOVUxMO1xuIFx0c3RydWN0IGZpYl9uaF9jb21tb24gKm5oYztcbiBcdHN0cnVjdCBpbl9kZXZpY2UgKmluX2RldjtcbkBAIC02MjI5LDYgJiM0Mzs2MjY4LDE0IEBAIHN0YXRpYyBpbnQgYnBmX2lwdjRfZmliX2xvb2t1cChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBicGZfZmliX2xvb2t1cCAqcGFyYW1zLFxuIFx0aWYgKHVubGlrZWx5KCFkZXYpKVxuIFx0XHRyZXR1cm4gLUVOT0RFVjtcbiBcbiYjNDM7XHRpZiAoZmxhZ3MgXHUwMDI2IEJQRl9GSUJfTE9PS1VQX1ZMQU5fSU5QVVQpIHtcbiYjNDM7XHRcdGRldiA9IGJwZl9maWJfdmxhbl9pbnB1dF9kZXYoZGV2LCBwYXJhbXMpO1xuJiM0MztcdFx0aWYgKElTX0VSUihkZXYpKVxuJiM0MztcdFx0XHRyZXR1cm4gUFRSX0VSUihkZXYpO1xuJiM0MztcdFx0aWYgKCFkZXYpXG4mIzQzO1x0XHRcdHJldHVybiBCUEZfRklCX0xLVVBfUkVUX05PVF9GV0RFRDtcbiYjNDM7XHR9XG4mIzQzO1xuIFx0LyogdmVyaWZ5IGZvcndhcmRpbmcgaXMgZW5hYmxlZCBvbiB0aGlzIGludGVyZmFjZSAqL1xuIFx0aW5fZGV2ID0gX19pbl9kZXZfZ2V0X3JjdShkZXYpO1xuIFx0aWYgKHVubGlrZWx5KCFpbl9kZXYgfHwgIUlOX0RFVl9GT1JXQVJEKGluX2RldikpKVxuQEAgLTYyMzgsNyAmIzQzOzYyODUsMTEgQEAgc3RhdGljIGludCBicGZfaXB2NF9maWJfbG9va3VwKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGJwZl9maWJfbG9va3VwICpwYXJhbXMsXG4gXHRcdGZsNC5mbG93aTRfaWlmID0gMTtcbiBcdFx0Zmw0LmZsb3dpNF9vaWYgPSBwYXJhbXMtXHUwMDNlaWZpbmRleDtcbiBcdH0gZWxzZSB7XG4tXHRcdGZsNC5mbG93aTRfaWlmID0gcGFyYW1zLVx1MDAzZWlmaW5kZXg7XG4mIzQzO1x0XHQvKlxuJiM0MztcdFx0ICogZGV2LVx1MDAzZWlmaW5kZXgsIG5vdCBwYXJhbXMtXHUwMDNlaWZpbmRleDogVkxBTl9JTlBVVCBtYXkgaGF2ZVxuJiM0MztcdFx0ICogcmVzb2x2ZWQgZGV2IHRvIGEgc3ViaW50ZXJmYWNlIGFib3ZlLlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRmbDQuZmxvd2k0X2lpZiA9IGRldi1cdTAwM2VpZmluZGV4O1xuIFx0XHRmbDQuZmxvd2k0X29pZiA9IDA7XG4gXHR9XG4gXHRmbDQuZmxvd2k0X2RzY3AgPSBpbmV0X2RzZmllbGRfdG9fZHNjcChwYXJhbXMtXHUwMDNldG9zKTtcbkBAIC02MzQ3LDcgJiM0Mzs2Mzk4LDcgQEAgc3RhdGljIGludCBicGZfaXB2NF9maWJfbG9va3VwKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGJwZl9maWJfbG9va3VwICpwYXJhbXMsXG4gXHRtZW1jcHkocGFyYW1zLVx1MDAzZXNtYWMsIGRldi1cdTAwM2VkZXZfYWRkciwgRVRIX0FMRU4pO1xuIFxuIHNldF9md2RfcGFyYW1zOlxuLVx0cmV0dXJuIGJwZl9maWJfc2V0X2Z3ZF9wYXJhbXMocGFyYW1zLCBtdHUpO1xuJiM0MztcdHJldHVybiBicGZfZmliX3NldF9md2RfcGFyYW1zKGRldiwgcGFyYW1zLCBmbGFncywgbXR1LCBpbl9pZmluZGV4KTtcbiB9XG4gI2VuZGlmXG4gXG5AQCAtNjM1Nyw2ICYjNDM7NjQwOCw3IEBAIHN0YXRpYyBpbnQgYnBmX2lwdjZfZmliX2xvb2t1cChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBicGZfZmliX2xvb2t1cCAqcGFyYW1zLFxuIHtcbiBcdHN0cnVjdCBpbjZfYWRkciAqc3JjID0gKHN0cnVjdCBpbjZfYWRkciAqKSBwYXJhbXMtXHUwMDNlaXB2Nl9zcmM7XG4gXHRzdHJ1Y3QgaW42X2FkZHIgKmRzdCA9IChzdHJ1Y3QgaW42X2FkZHIgKikgcGFyYW1zLVx1MDAzZWlwdjZfZHN0O1xuJiM0MztcdHUzMiBpbl9pZmluZGV4ID0gcGFyYW1zLVx1MDAzZWlmaW5kZXg7XG4gXHRzdHJ1Y3QgZmliNl9yZXN1bHQgcmVzID0ge307XG4gXHRzdHJ1Y3QgbmVpZ2hib3VyICpuZWlnaDtcbiBcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXY7XG5AQCAtNjM3NCw2ICYjNDM7NjQyNiwxNCBAQCBzdGF0aWMgaW50IGJwZl9pcHY2X2ZpYl9sb29rdXAoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgYnBmX2ZpYl9sb29rdXAgKnBhcmFtcyxcbiBcdGlmICh1bmxpa2VseSghZGV2KSlcbiBcdFx0cmV0dXJuIC1FTk9ERVY7XG4gXG4mIzQzO1x0aWYgKGZsYWdzIFx1MDAyNiBCUEZfRklCX0xPT0tVUF9WTEFOX0lOUFVUKSB7XG4mIzQzO1x0XHRkZXYgPSBicGZfZmliX3ZsYW5faW5wdXRfZGV2KGRldiwgcGFyYW1zKTtcbiYjNDM7XHRcdGlmIChJU19FUlIoZGV2KSlcbiYjNDM7XHRcdFx0cmV0dXJuIFBUUl9FUlIoZGV2KTtcbiYjNDM7XHRcdGlmICghZGV2KVxuJiM0MztcdFx0XHRyZXR1cm4gQlBGX0ZJQl9MS1VQX1JFVF9OT1RfRldERUQ7XG4mIzQzO1x0fVxuJiM0MztcbiBcdGlkZXYgPSBfX2luNl9kZXZfZ2V0X3NhZmVseShkZXYpO1xuIFx0aWYgKHVubGlrZWx5KCFpZGV2IHx8ICFSRUFEX09OQ0UoaWRldi1cdTAwM2VjbmYuZm9yd2FyZGluZykpKVxuIFx0XHRyZXR1cm4gQlBGX0ZJQl9MS1VQX1JFVF9GV0RfRElTQUJMRUQ7XG5AQCAtNjM4Miw3ICYjNDM7NjQ0MiwxMiBAQCBzdGF0aWMgaW50IGJwZl9pcHY2X2ZpYl9sb29rdXAoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgYnBmX2ZpYl9sb29rdXAgKnBhcmFtcyxcbiBcdFx0Zmw2LmZsb3dpNl9paWYgPSAxO1xuIFx0XHRvaWYgPSBmbDYuZmxvd2k2X29pZiA9IHBhcmFtcy1cdTAwM2VpZmluZGV4O1xuIFx0fSBlbHNlIHtcbi1cdFx0b2lmID0gZmw2LmZsb3dpNl9paWYgPSBwYXJhbXMtXHUwMDNlaWZpbmRleDtcbiYjNDM7XHRcdC8qXG4mIzQzO1x0XHQgKiBkZXYtXHUwMDNlaWZpbmRleCwgbm90IHBhcmFtcy1cdTAwM2VpZmluZGV4OiBWTEFOX0lOUFVUIG1heSBoYXZlXG4mIzQzO1x0XHQgKiByZXNvbHZlZCBkZXYgdG8gYSBzdWJpbnRlcmZhY2UgYWJvdmUuXG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdG9pZiA9IGRldi1cdTAwM2VpZmluZGV4O1xuJiM0MztcdFx0Zmw2LmZsb3dpNl9paWYgPSBvaWY7XG4gXHRcdGZsNi5mbG93aTZfb2lmID0gMDtcbiBcdFx0c3RyaWN0ID0gUlQ2X0xPT0tVUF9GX0hBU19TQUREUjtcbiBcdH1cbkBAIC02NDg2LDEzICYjNDM7NjU1MSwyNiBAQCBzdGF0aWMgaW50IGJwZl9pcHY2X2ZpYl9sb29rdXAoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgYnBmX2ZpYl9sb29rdXAgKnBhcmFtcyxcbiBcdG1lbWNweShwYXJhbXMtXHUwMDNlc21hYywgZGV2LVx1MDAzZWRldl9hZGRyLCBFVEhfQUxFTik7XG4gXG4gc2V0X2Z3ZF9wYXJhbXM6XG4tXHRyZXR1cm4gYnBmX2ZpYl9zZXRfZndkX3BhcmFtcyhwYXJhbXMsIG10dSk7XG4mIzQzO1x0cmV0dXJuIGJwZl9maWJfc2V0X2Z3ZF9wYXJhbXMoZGV2LCBwYXJhbXMsIGZsYWdzLCBtdHUsIGluX2lmaW5kZXgpO1xuIH1cbiAjZW5kaWZcbiBcbiAjZGVmaW5lIEJQRl9GSUJfTE9PS1VQX01BU0sgKEJQRl9GSUJfTE9PS1VQX0RJUkVDVCB8IEJQRl9GSUJfTE9PS1VQX09VVFBVVCB8IFxcXG4gXHRcdFx0ICAgICBCUEZfRklCX0xPT0tVUF9TS0lQX05FSUdIIHwgQlBGX0ZJQl9MT09LVVBfVEJJRCB8IFxcXG4tXHRcdFx0ICAgICBCUEZfRklCX0xPT0tVUF9TUkMgfCBCUEZfRklCX0xPT0tVUF9NQVJLKVxuJiM0MztcdFx0XHQgICAgIEJQRl9GSUJfTE9PS1VQX1NSQyB8IEJQRl9GSUJfTE9PS1VQX01BUksgfCBcXFxuJiM0MztcdFx0XHQgICAgIEJQRl9GSUJfTE9PS1VQX1ZMQU4gfCBCUEZfRklCX0xPT0tVUF9WTEFOX0lOUFVUKVxuJiM0MztcbiYjNDM7c3RhdGljIGJvb2wgYnBmX2ZpYl9sb29rdXBfZmxhZ3Nfb2sodTMyIGZsYWdzKVxuJiM0Mzt7XG4mIzQzO1x0aWYgKGZsYWdzIFx1MDAyNiB+QlBGX0ZJQl9MT09LVVBfTUFTSylcbiYjNDM7XHRcdHJldHVybiBmYWxzZTtcbiYjNDM7XG4mIzQzO1x0aWYgKChmbGFncyBcdTAwMjYgQlBGX0ZJQl9MT09LVVBfVkxBTl9JTlBVVCkgXHUwMDI2XHUwMDI2XG4mIzQzO1x0ICAgIChmbGFncyBcdTAwMjYgKEJQRl9GSUJfTE9PS1VQX1RCSUQgfCBCUEZfRklCX0xPT0tVUF9PVVRQVVQpKSlcbiYjNDM7XHRcdHJldHVybiBmYWxzZTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHRydWU7XG4mIzQzO31cbiBcbiBCUEZfQ0FMTF80KGJwZl94ZHBfZmliX2xvb2t1cCwgc3RydWN0IHhkcF9idWZmICosIGN0eCxcbiBcdCAgIHN0cnVjdCBicGZfZmliX2xvb2t1cCAqLCBwYXJhbXMsIGludCwgcGxlbiwgdTMyLCBmbGFncylcbkBAIC02NTAwLDcgJiM0Mzs2NTc4LDcgQEAgQlBGX0NBTExfNChicGZfeGRwX2ZpYl9sb29rdXAsIHN0cnVjdCB4ZHBfYnVmZiAqLCBjdHgsXG4gXHRpZiAocGxlbiBcdTAwM2Mgc2l6ZW9mKCpwYXJhbXMpKVxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcbi1cdGlmIChmbGFncyBcdTAwMjYgfkJQRl9GSUJfTE9PS1VQX01BU0spXG4mIzQzO1x0aWYgKCFicGZfZmliX2xvb2t1cF9mbGFnc19vayhmbGFncykpXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFxuIFx0c3dpdGNoIChwYXJhbXMtXHUwMDNlZmFtaWx5KSB7XG5AQCAtNjUzOCw3ICYjNDM7NjYxNiwxMCBAQCBCUEZfQ0FMTF80KGJwZl9za2JfZmliX2xvb2t1cCwgc3RydWN0IHNrX2J1ZmYgKiwgc2tiLFxuIFx0aWYgKHBsZW4gXHUwMDNjIHNpemVvZigqcGFyYW1zKSlcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXG4tXHRpZiAoZmxhZ3MgXHUwMDI2IH5CUEZfRklCX0xPT0tVUF9NQVNLKVxuJiM0MztcdGlmICghYnBmX2ZpYl9sb29rdXBfZmxhZ3Nfb2soZmxhZ3MpKVxuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1xuJiM0MztcdGlmIChmbGFncyBcdTAwMjYgQlBGX0ZJQl9MT09LVVBfVkxBTilcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXG4gXHRpZiAocGFyYW1zLVx1MDAzZXRvdF9sZW4pXG5kaWZmIC0tZ2l0IGEvdG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oIGIvdG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oXG5pbmRleCA4OWIzNmRlNWZkYmI2ZC4uZDQyMTg5NTRjNTBmNTMgMTAwNjQ0XG4tLS0gYS90b29scy9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmhcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaFxuQEAgLTM1MzIsNiAmIzQzOzM1MzIsNDUgQEAgdW5pb24gYnBmX2F0dHIge1xuICAqXHRcdFx0VXNlIHRoZSBtYXJrIHByZXNlbnQgaW4gKnBhcmFtcyotXHUwMDNlbWFyayBmb3IgdGhlIGZpYiBsb29rdXAuXG4gICpcdFx0XHRUaGlzIG9wdGlvbiBzaG91bGQgbm90IGJlIHVzZWQgd2l0aCBCUEZfRklCX0xPT0tVUF9ESVJFQ1QsXG4gICpcdFx0XHRhcyBpdCBvbmx5IGhhcyBtZWFuaW5nIGZvciBmdWxsIGxvb2t1cHMuXG4mIzQzOyAqXHRcdCoqQlBGX0ZJQl9MT09LVVBfVkxBTioqXG4mIzQzOyAqXHRcdFx0SWYgdGhlIGZpYiBsb29rdXAgcmVzb2x2ZXMgdG8gYSBWTEFOIGRldmljZSB3aG9zZVxuJiM0MzsgKlx0XHRcdHBhcmVudCBpcyBhIHJlYWwgKG5vbi1WTEFOKSBkZXZpY2UsIHNldFxuJiM0MzsgKlx0XHRcdCpwYXJhbXMqLVx1MDAzZWhfdmxhbl9wcm90byBhbmQgKnBhcmFtcyotXHUwMDNlaF92bGFuX1RDSSBmcm9tXG4mIzQzOyAqXHRcdFx0dGhlIFZMQU4gZGV2aWNlIGFuZCByZXBsYWNlICpwYXJhbXMqLVx1MDAzZWlmaW5kZXggd2l0aCB0aGVcbiYjNDM7ICpcdFx0XHRwYXJlbnQmIzM5O3MgaWZpbmRleC4gKnBhcmFtcyotXHUwMDNlaF92bGFuX1RDSSBjYXJyaWVzIHRoZSBWSURcbiYjNDM7ICpcdFx0XHRvbmx5LCB3aXRoIFBDUCBhbmQgREVJIGJpdHMgemVybzsgYSBjb25zdW1lciB3YW50aW5nIHRvXG4mIzQzOyAqXHRcdFx0c2V0IGVncmVzcyBwcmlvcml0eSB3cml0ZXMgUENQIGl0c2VsZi4gKnBhcmFtcyotXHUwMDNlc21hYyBpc1xuJiM0MzsgKlx0XHRcdHRoZSBWTEFOIGRldmljZSYjMzk7cyBvd24gYWRkcmVzcywgd2hpY2ggY2FuIGRpZmZlciBmcm9tIHRoZVxuJiM0MzsgKlx0XHRcdHBhcmVudCYjMzk7cy4gT25seSB0aGUgaW1tZWRpYXRlIHBhcmVudCBpcyByZXNvbHZlZDsgaWYgaXRcbiYjNDM7ICpcdFx0XHRpcyBpdHNlbGYgYSBWTEFOIGRldmljZSAoUWluUSkgb3IgaW4gYW5vdGhlciBuYW1lc3BhY2UsXG4mIzQzOyAqXHRcdFx0dGhlIGVncmVzcyBjYW5ub3QgYmUgcmVkdWNlZCB0byBhIHBoeXNpY2FsIGRldmljZSBwbHVzXG4mIzQzOyAqXHRcdFx0b25lIHRhZyBhbmQgdGhlIGxvb2t1cCByZXR1cm5zXG4mIzQzOyAqXHRcdFx0KipCUEZfRklCX0xLVVBfUkVUX1ZMQU5fRkFJTFVSRSoqIHdpdGggKnBhcmFtcyotXHUwMDNlaWZpbmRleFxuJiM0MzsgKlx0XHRcdGxlZnQgYXQgdGhlIGlucHV0LiBSZS1pc3N1ZSB3aXRob3V0XG4mIzQzOyAqXHRcdFx0KipCUEZfRklCX0xPT0tVUF9WTEFOKiogdG8gb2J0YWluIHRoZSBWTEFOIGRldmljZSYjMzk7cyBvd25cbiYjNDM7ICpcdFx0XHRpZmluZGV4LiBUaGUgc3dhcCBhbmQgdGhlIHZsYW4gZmllbGRzXG4mIzQzOyAqXHRcdFx0YXJlIHdyaXR0ZW4gb25seSBvbiBzdWNjZXNzOyBvdGhlciBvdXRwdXQgZmllbGRzIGtlZXBcbiYjNDM7ICpcdFx0XHR0aGUgaGVscGVyJiMzOTtzIGV4aXN0aW5nIGJlaGF2aW91ciwgc28gYSBmcmFnLW5lZWRlZCByZXN1bHRcbiYjNDM7ICpcdFx0XHRzdGlsbCByZXBvcnRzIHRoZSByb3V0ZSBtdHUgaW4gKnBhcmFtcyotXHUwMDNlbXR1X3Jlc3VsdC5cbiYjNDM7ICpcdFx0XHRUaGlzIGZsYWcgaXMgb25seSB2YWxpZCBmb3IgWERQIHByb2dyYW1zOyB0YyBwcm9ncmFtc1xuJiM0MzsgKlx0XHRcdHJlY2VpdmUgLUVJTlZBTCBzaW5jZSB0aGV5IGNhbiByZWRpcmVjdCB0byB0aGUgVkxBTlxuJiM0MzsgKlx0XHRcdGRldmljZSBkaXJlY3RseS5cbiYjNDM7ICpcdFx0KipCUEZfRklCX0xPT0tVUF9WTEFOX0lOUFVUKipcbiYjNDM7ICpcdFx0XHRUcmVhdCAqcGFyYW1zKi1cdTAwM2VoX3ZsYW5fcHJvdG8gYW5kICpwYXJhbXMqLVx1MDAzZWhfdmxhbl9UQ0lcbiYjNDM7ICpcdFx0XHRhcyBhbiBpbnB1dCBWTEFOIHRhZyBhbmQgcnVuIHRoZSBsb29rdXAgYXMgaWYgaW5ncmVzc1xuJiM0MzsgKlx0XHRcdGhhZCBoYXBwZW5lZCBvbiB0aGUgVkxBTiBzdWJpbnRlcmZhY2UgY2FycnlpbmcgdGhhdCB0YWdcbiYjNDM7ICpcdFx0XHRvbiAqcGFyYW1zKi1cdTAwM2VpZmluZGV4LiBUaGUgVklEIGlzIHRoZSBsb3cgMTIgYml0cyBvZlxuJiM0MzsgKlx0XHRcdCpwYXJhbXMqLVx1MDAzZWhfdmxhbl9UQ0k7ICpwYXJhbXMqLVx1MDAzZWhfdmxhbl9wcm90byBtdXN0IGJlXG4mIzQzOyAqXHRcdFx0RVRIX1BfODAyMVEgb3IgRVRIX1BfODAyMUFEIGluIG5ldHdvcmsgYnl0ZSBvcmRlciwgZWxzZVxuJiM0MzsgKlx0XHRcdCoqLUVJTlZBTCoqLiBJZiAqcGFyYW1zKi1cdTAwM2VpZmluZGV4IGlzIGl0c2VsZiBhIFZMQU5cbiYjNDM7ICpcdFx0XHRkZXZpY2UsIGl0cyBpbm5lciAoUWluUSkgc3ViaW50ZXJmYWNlIGlzIG1hdGNoZWQ7IGZvciBhXG4mIzQzOyAqXHRcdFx0Ym9uZCBvciB0ZWFtLCBwYXNzIHRoZSBtYXN0ZXImIzM5O3MgaWZpbmRleC4gQW4gdW5tYXRjaGVkXG4mIzQzOyAqXHRcdFx0dGFnLCBhIGRvd24gZGV2aWNlLCBvciBvbmUgaW4gYW5vdGhlciBuYW1lc3BhY2UgcmV0dXJuc1xuJiM0MzsgKlx0XHRcdCoqQlBGX0ZJQl9MS1VQX1JFVF9OT1RfRldERUQqKiwgbWlycm9yaW5nIHJlYWwgaW5ncmVzcy5cbiYjNDM7ICpcdFx0XHRBIFZJRCBvZiAwIGlzIGxvb2tlZCB1cCBsaXRlcmFsbHksIHNvIGRvIG5vdCBzZXQgdGhpc1xuJiM0MzsgKlx0XHRcdGZsYWcgZm9yIHByaW9yaXR5LXRhZ2dlZCBmcmFtZXMuIENhbm5vdCBiZSBjb21iaW5lZCB3aXRoXG4mIzQzOyAqXHRcdFx0KipCUEZfRklCX0xPT0tVUF9UQklEKiogb3IgKipCUEZfRklCX0xPT0tVUF9PVVRQVVQqKlxuJiM0MzsgKlx0XHRcdChyZXR1cm5zICoqLUVJTlZBTCoqKS5cbiAgKlxuICAqXHRcdCpjdHgqIGlzIGVpdGhlciAqKnN0cnVjdCB4ZHBfbWQqKiBmb3IgWERQIHByb2dyYW1zIG9yXG4gICpcdFx0KipzdHJ1Y3Qgc2tfYnVmZioqIHRjIGNsc19hY3QgcHJvZ3JhbXMuXG5AQCAtNzMyNyw2ICYjNDM7NzM2Niw4IEBAIGVudW0ge1xuIFx0QlBGX0ZJQl9MT09LVVBfVEJJRCAgICA9ICgxVSBcdTAwM2NcdTAwM2MgMyksXG4gXHRCUEZfRklCX0xPT0tVUF9TUkMgICAgID0gKDFVIFx1MDAzY1x1MDAzYyA0KSxcbiBcdEJQRl9GSUJfTE9PS1VQX01BUksgICAgPSAoMVUgXHUwMDNjXHUwMDNjIDUpLFxuJiM0MztcdEJQRl9GSUJfTE9PS1VQX1ZMQU4gICAgPSAoMVUgXHUwMDNjXHUwMDNjIDYpLFxuJiM0MztcdEJQRl9GSUJfTE9PS1VQX1ZMQU5fSU5QVVQgPSAoMVUgXHUwMDNjXHUwMDNjIDcpLFxuIH07XG4gXG4gZW51bSB7XG5AQCAtNzM0MCw2ICYjNDM7NzM4MSw3IEBAIGVudW0ge1xuIFx0QlBGX0ZJQl9MS1VQX1JFVF9OT19ORUlHSCwgICAgIC8qIG5vIG5laWdoYm9yIGVudHJ5IGZvciBuaCAqL1xuIFx0QlBGX0ZJQl9MS1VQX1JFVF9GUkFHX05FRURFRCwgIC8qIGZyYWdtZW50YXRpb24gcmVxdWlyZWQgdG8gZndkICovXG4gXHRCUEZfRklCX0xLVVBfUkVUX05PX1NSQ19BRERSLCAgLyogZmFpbGVkIHRvIGRlcml2ZSBJUCBzcmMgYWRkciAqL1xuJiM0MztcdEJQRl9GSUJfTEtVUF9SRVRfVkxBTl9GQUlMVVJFLCAvKiBWTEFOIGVncmVzcywgcGFyZW50IHVucmVzb2x2YWJsZSAqL1xuIH07XG4gXG4gc3RydWN0IGJwZl9maWJfbG9va3VwIHtcbkBAIC03MzkzLDcgJiM0Mzs3NDM1LDEzIEBAIHN0cnVjdCBicGZfZmliX2xvb2t1cCB7XG4gXG4gXHR1bmlvbiB7XG4gXHRcdHN0cnVjdCB7XG4tXHRcdFx0Lyogb3V0cHV0ICovXG4mIzQzO1x0XHRcdC8qXG4mIzQzO1x0XHRcdCAqIG91dHB1dCB3aXRoIEJQRl9GSUJfTE9PS1VQX1ZMQU46IHNldCBmcm9tIHRoZVxuJiM0MztcdFx0XHQgKiByZXNvbHZlZCBlZ3Jlc3MgVkxBTiBkZXZpY2UgKHNlZSB0aGUgZmxhZyk7IHplcm9lZFxuJiM0MztcdFx0XHQgKiBvbiBvdGhlciBzdWNjZXNzZnVsIGxvb2t1cHMuIGlucHV0IHdpdGhcbiYjNDM7XHRcdFx0ICogQlBGX0ZJQl9MT09LVVBfVkxBTl9JTlBVVDogdGhlIFZMQU4gdGFnIHRvIHNjb3BlXG4mIzQzO1x0XHRcdCAqIHRoZSBsb29rdXAgYnkuXG4mIzQzO1x0XHRcdCAqL1xuIFx0XHRcdF9fYmUxNlx0aF92bGFuX3Byb3RvO1xuIFx0XHRcdF9fYmUxNlx0aF92bGFuX1RDSTtcbiBcdFx0fTtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9maWJfbG9va3VwLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9maWJfbG9va3VwLmNcbmluZGV4IGJkNzY1ODk1ODAwNDFmLi44Y2FlZDlkNDNiOTgxMSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2ZpYl9sb29rdXAuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvZmliX2xvb2t1cC5jXG5AQCAtMiw2ICYjNDM7Miw3IEBAXG4gLyogQ29weXJpZ2h0IChjKSAyMDIzIE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLiAqL1xuIFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3J0bmV0bGluay5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2lmX2V0aGVyLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NzeXMvdHlwZXMuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY25ldC9pZi5oXHUwMDNlXG4gXG5AQCAtMjMsNiAmIzQzOzI0LDcgQEBcbiAjZGVmaW5lIElQVjRfVEJJRF9BRERSXHRcdFwmIzM0OzE3Mi4wLjAuMjU0XCYjMzQ7XG4gI2RlZmluZSBJUFY0X1RCSURfTkVUXHRcdFwmIzM0OzE3Mi4wLjAuMFwmIzM0O1xuICNkZWZpbmUgSVBWNF9UQklEX0RTVFx0XHRcJiMzNDsxNzIuMC4wLjJcJiMzNDtcbiYjNDM7I2RlZmluZSBJUFY0X1RCSURfTk9ORUlHSF9EU1RcdFwmIzM0OzE3Mi4wLjAuNVwmIzM0O1xuICNkZWZpbmUgSVBWNl9UQklEX0FERFJcdFx0XCYjMzQ7ZmQwMDo6RkZGRlwmIzM0O1xuICNkZWZpbmUgSVBWNl9UQklEX05FVFx0XHRcJiMzNDtmZDAwOjpcJiMzNDtcbiAjZGVmaW5lIElQVjZfVEJJRF9EU1RcdFx0XCYjMzQ7ZmQwMDo6MlwmIzM0O1xuQEAgLTM3LDYgJiM0MzszOSw0MSBAQFxuICNkZWZpbmUgSVBWNl9MT0NBTFx0XHRcJiMzNDtmZDAxOjozXCYjMzQ7XG4gI2RlZmluZSBJUFY2X0dXMVx0XHRcJiMzNDtmZDAxOjoxXCYjMzQ7XG4gI2RlZmluZSBJUFY2X0dXMlx0XHRcJiMzNDtmZDAxOjoyXCYjMzQ7XG4mIzQzOyNkZWZpbmUgVkxBTl9JRFx0XHRcdDEwMFxuJiM0MzsjZGVmaW5lIFZMQU5fSUZBQ0VcdFx0XCYjMzQ7dmV0aDEuMTAwXCYjMzQ7XG4mIzQzOyNkZWZpbmUgVkxBTl9JRF9ET1dOXHRcdDEwMlxuJiM0MzsjZGVmaW5lIFZMQU5fSUZBQ0VfRE9XTlx0XHRcJiMzNDt2ZXRoMS4xMDJcJiMzNDtcbiYjNDM7I2RlZmluZSBRSU5RX09VVEVSX0lGQUNFXHRcJiMzNDt2ZXRoMS4yMDBcJiMzNDtcbiYjNDM7I2RlZmluZSBRSU5RX0lOTkVSX0lGQUNFXHRcJiMzNDt2ZXRoMS4yMDAuMzAwXCYjMzQ7XG4mIzQzOyNkZWZpbmUgVkxBTl9UQUJMRVx0XHRcJiMzNDszMDBcJiMzNDtcbiYjNDM7I2RlZmluZSBJUFY0X1ZMQU5fSUZBQ0VfQUREUlx0XCYjMzQ7MTAuNS4wLjI1NFwmIzM0O1xuJiM0MzsjZGVmaW5lIElQVjRfVkxBTl9FR1JFU1NfRFNUXHRcJiMzNDsxMC41LjAuMlwmIzM0O1xuJiM0MzsjZGVmaW5lIElQVjRfUUlOUV9EU1RcdFx0XCYjMzQ7MTAuNy4wLjJcJiMzNDtcbiYjNDM7I2RlZmluZSBJUFY0X1ZMQU5fRFNUXHRcdFwmIzM0OzEwLjYuMC4yXCYjMzQ7XG4mIzQzOyNkZWZpbmUgSVBWNF9WTEFOX0dXXHRcdFwmIzM0OzEwLjUuMC4xXCYjMzQ7XG4mIzQzOyNkZWZpbmUgSVBWNl9WTEFOX0lGQUNFX0FERFJcdFwmIzM0O2ZkMDI6OjI1NFwmIzM0O1xuJiM0MzsjZGVmaW5lIElQVjZfVkxBTl9FR1JFU1NfRFNUXHRcJiMzNDtmZDAyOjoyXCYjMzQ7XG4mIzQzOyNkZWZpbmUgSVBWNl9WTEFOX0RTVFx0XHRcJiMzNDtmZDAzOjoyXCYjMzQ7XG4mIzQzOyNkZWZpbmUgSVBWNl9WTEFOX0dXXHRcdFwmIzM0O2ZkMDI6OjFcJiMzNDtcbiYjNDM7I2RlZmluZSBWTEFOX1ZJRF9VTlVTRURcdFx0OTk5XG4mIzQzOyNkZWZpbmUgVlJGX0lGQUNFXHRcdFwmIzM0O3ZyZi1ibHVlXCYjMzQ7XG4mIzQzOyNkZWZpbmUgVlJGX1RBQkxFXHRcdFwmIzM0OzEwMDBcJiMzNDtcbiYjNDM7I2RlZmluZSBWUkZfVkxBTl9JRFx0XHQxMDFcbiYjNDM7I2RlZmluZSBWUkZfVkxBTl9JRkFDRVx0XHRcJiMzNDt2ZXRoMS4xMDFcJiMzNDtcbiYjNDM7I2RlZmluZSBJUFY0X1ZSRl9JRkFDRV9BRERSXHRcJiMzNDsxMC44LjAuMjU0XCYjMzQ7XG4mIzQzOyNkZWZpbmUgSVBWNF9WUkZfR1dcdFx0XCYjMzQ7MTAuOC4wLjFcJiMzNDtcbiYjNDM7I2RlZmluZSBJUFY0X1ZSRl9EU1RcdFx0XCYjMzQ7MTAuOS4wLjJcJiMzNDtcbiYjNDM7I2RlZmluZSBUQklEX1ZMQU5fSURcdFx0NTBcbiYjNDM7I2RlZmluZSBUQklEX1ZMQU5fSUZBQ0VcdFx0XCYjMzQ7dmV0aDIuNTBcJiMzNDtcbiYjNDM7I2RlZmluZSBJUFY0X1RCSURfVkxBTl9EU1RcdFwmIzM0OzE3Mi4yLjAuMlwmIzM0O1xuJiM0MzsjZGVmaW5lIElQVjRfQk9ORF9WTEFOX0RTVFx0XCYjMzQ7MTAuMTEuMC4yXCYjMzQ7XG4mIzQzOyNkZWZpbmUgSVBWNF9WTEFOX01UVV9EU1RcdFwmIzM0OzEwLjUuOS4yXCYjMzQ7XG4mIzQzOyNkZWZpbmUgUUlOUV9BRF9WTEFOX0lEXHRcdDIwMFxuJiM0MzsjZGVmaW5lIFFJTlFfSU5ORVJfVkxBTl9JRFx0MzAwXG4mIzQzOyNkZWZpbmUgQk9ORF9JRkFDRVx0XHRcJiMzNDtib25kOTlcJiMzNDtcbiYjNDM7I2RlZmluZSBCT05EX1BPUlRcdFx0XCYjMzQ7dmV0aDNcJiMzNDtcbiYjNDM7I2RlZmluZSBCT05EX1BPUlRfUEVFUlx0XHRcJiMzNDt2ZXRoNFwmIzM0O1xuJiM0MzsjZGVmaW5lIEJPTkRfVkxBTl9JRFx0XHQ1MDBcbiAjZGVmaW5lIERNQUNcdFx0XHRcJiMzNDsxMToxMToxMToxMToxMToxMVwmIzM0O1xuICNkZWZpbmUgRE1BQ19JTklUIHsgMHgxMSwgMHgxMSwgMHgxMSwgMHgxMSwgMHgxMSwgMHgxMSwgfVxuICNkZWZpbmUgRE1BQzJcdFx0XHRcJiMzNDswMTowMTowMTowMTowMTowMVwmIzM0O1xuQEAgLTUyLDYgJiM0Mzs4OSwxNyBAQCBzdHJ1Y3QgZmliX2xvb2t1cF90ZXN0IHtcbiBcdF9fdTMyIHRiaWQ7XG4gXHRfX3U4IGRtYWNbNl07XG4gXHRfX3UzMiBtYXJrO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogaW5wdXQgdGFnIHdpdGggQlBGX0ZJQl9MT09LVVBfVkxBTl9JTlBVVDsgZXhwZWN0ZWQgb3V0cHV0IHRhZ1xuJiM0MztcdCAqIHdpdGggQlBGX0ZJQl9MT09LVVBfVkxBTiAoY2hlY2tlZCB3aGVuIGNoZWNrX3ZsYW4gaXMgc2V0KVxuJiM0MztcdCAqL1xuJiM0MztcdF9fdTE2IHZsYW5fcHJvdG87XG4mIzQzO1x0X191MTYgdmxhbl9pZDtcbiYjNDM7XHRib29sIGNoZWNrX3ZsYW47XG4mIzQzO1x0Y29uc3QgY2hhciAqZXhwZWN0ZWRfZGV2OyAvKiBleHBlY3RlZCBwYXJhbXMtXHUwMDNlaWZpbmRleCBhZnRlciBsb29rdXAgKi9cbiYjNDM7XHRjb25zdCBjaGFyICppaWY7XHQgIC8qIG92ZXJyaWRlIHRoZSBkZWZhdWx0IHZldGgxIGlucHV0IGRldmljZSAqL1xuJiM0MztcdF9fdTE2IHRvdF9sZW47XHRcdCAgLyogdHJpZ2dlcnMgdGhlIGluLWxvb2t1cCBtdHUgY2hlY2sgd2hlbiBzZXQgKi9cbiYjNDM7XHRfX3UxNiBleHBlY3RlZF9tdHU7XHQgIC8qIGV4cGVjdGVkIG10dV9yZXN1bHQgKHVuaW9uIHdpdGggdG90X2xlbikgKi9cbiB9O1xuIFxuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZmliX2xvb2t1cF90ZXN0IHRlc3RzW10gPSB7XG5AQCAtNzksNiAmIzQzOzEyNywxNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGZpYl9sb29rdXBfdGVzdCB0ZXN0c1tdID0ge1xuIFx0ICAuZGFkZHIgPSBJUFY0X1RCSURfRFNULCAuZXhwZWN0ZWRfcmV0ID0gQlBGX0ZJQl9MS1VQX1JFVF9TVUNDRVNTLFxuIFx0ICAubG9va3VwX2ZsYWdzID0gQlBGX0ZJQl9MT09LVVBfRElSRUNUIHwgQlBGX0ZJQl9MT09LVVBfVEJJRCwgLnRiaWQgPSAxMDAsXG4gXHQgIC5kbWFjID0gRE1BQ19JTklUMiwgfSxcbiYjNDM7XHQvKlxuJiM0MztcdCAqIEFuIGVycm9yIHRoYXQgcmV0dXJucyBhZnRlciB0aGUgZWdyZXNzIGRldmljZSBpcyByZXNvbHZlZCBtdXN0XG4mIzQzO1x0ICogcmVwb3J0IHRoZSBlZ3Jlc3MgaWZpbmRleCwgbm90IHRoZSBpbnB1dC4gVGhpcyByb3V0ZXMgZnJvbSBpbnB1dFxuJiM0MztcdCAqIHZldGgxIHZpYSB2ZXRoMiAodGFibGUgMTAwKSB0byBhIGRzdCB3aXRoIG5vIG5laWdoYm91ciwgc29cbiYjNDM7XHQgKiBpbnB1dCAhPSBlZ3Jlc3MsIHBpbm5pbmcgTk9fTkVJR0ggdG8gdGhlIGVncmVzcyBkZXZpY2UuXG4mIzQzO1x0ICovXG4mIzQzO1x0eyAuZGVzYyA9IFwmIzM0O0lQdjQgTk9fTkVJR0ggcmVwb3J0cyB0aGUgZWdyZXNzIGlmaW5kZXgsIG5vdCB0aGUgaW5wdXRcJiMzNDssXG4mIzQzO1x0ICAuZGFkZHIgPSBJUFY0X1RCSURfTk9ORUlHSF9EU1QsXG4mIzQzO1x0ICAuZXhwZWN0ZWRfcmV0ID0gQlBGX0ZJQl9MS1VQX1JFVF9OT19ORUlHSCxcbiYjNDM7XHQgIC5sb29rdXBfZmxhZ3MgPSBCUEZfRklCX0xPT0tVUF9ESVJFQ1QgfCBCUEZfRklCX0xPT0tVUF9UQklELCAudGJpZCA9IDEwMCxcbiYjNDM7XHQgIC5leHBlY3RlZF9kZXYgPSBcJiMzNDt2ZXRoMlwmIzM0OywgfSxcbiBcdHsgLmRlc2MgPSBcJiMzNDtJUHY2IFRCSUQgbG9va3VwIGZhaWx1cmVcJiMzNDssXG4gXHQgIC5kYWRkciA9IElQVjZfVEJJRF9EU1QsIC5leHBlY3RlZF9yZXQgPSBCUEZfRklCX0xLVVBfUkVUX05PVF9GV0RFRCxcbiBcdCAgLmxvb2t1cF9mbGFncyA9IEJQRl9GSUJfTE9PS1VQX0RJUkVDVCB8IEJQRl9GSUJfTE9PS1VQX1RCSUQsXG5AQCAtMTQyLDYgJiM0MzsyMDEsMjE4IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZmliX2xvb2t1cF90ZXN0IHRlc3RzW10gPSB7XG4gXHQgIC5leHBlY3RlZF9kc3QgPSBJUFY2X0dXMSxcbiBcdCAgLmxvb2t1cF9mbGFncyA9IEJQRl9GSUJfTE9PS1VQX1NLSVBfTkVJR0gsXG4gXHQgIC5tYXJrID0gTUFSSywgfSxcbiYjNDM7XHQvKiB2bGFuIGVncmVzcyByZXNvbHV0aW9uICovXG4mIzQzO1x0LypcbiYjNDM7XHQgKiBJbnZhcmlhbnQgdGhlIFZMQU4tZWdyZXNzIGFybXMgam9pbnRseSBlbmZvcmNlOiBhXG4mIzQzO1x0ICogQlBGX0ZJQl9MT09LVVBfVkxBTiBTVUNDRVNTIGFsd2F5cyBjYXJyaWVzIGEgcGh5c2ljYWwsXG4mIzQzO1x0ICogeG1pdC1jYXBhYmxlIGlmaW5kZXggLS0gbm8gU1VDQ0VTUyBldmVyIHJldHVybnMgYSBWTEFOLWRldmljZVxuJiM0MztcdCAqIGlmaW5kZXguIFJlZHVjaWJsZSBhcm1zIHBpbiBpZmluZGV4ID09IHRoZSBwaHlzaWNhbCBwYXJlbnQ7IHRoZVxuJiM0MztcdCAqIFFpblEgYW5kIGZvcmVpZ24tbmV0bnMgYXJtcyBwaW4gVkxBTl9GQUlMVVJFIHdpdGggcGFyYW1zLVx1MDAzZWlmaW5kZXhcbiYjNDM7XHQgKiBsZWZ0IGF0IHRoZSBpbnB1dCwgc28gYSByZWdyZXNzaW9uIHRvIGJlc3QtZWZmb3J0IChTVUNDRVNTICYjNDM7IHRoZVxuJiM0MztcdCAqIFZMQU4gaWZpbmRleCkgZmFpbHMgb25lLlxuJiM0MztcdCAqL1xuJiM0MztcdHsgLmRlc2MgPSBcJiMzNDtJUHY0IFZMQU4gZWdyZXNzLCBubyBmbGFnXCYjMzQ7LFxuJiM0MztcdCAgLmRhZGRyID0gSVBWNF9WTEFOX0VHUkVTU19EU1QsIC5leHBlY3RlZF9yZXQgPSBCUEZfRklCX0xLVVBfUkVUX1NVQ0NFU1MsXG4mIzQzO1x0ICAubG9va3VwX2ZsYWdzID0gQlBGX0ZJQl9MT09LVVBfU0tJUF9ORUlHSCxcbiYjNDM7XHQgIC5leHBlY3RlZF9kZXYgPSBWTEFOX0lGQUNFLCAuY2hlY2tfdmxhbiA9IHRydWUsIH0sXG4mIzQzO1x0eyAuZGVzYyA9IFwmIzM0O0lQdjQgVkxBTiBlZ3Jlc3MsIHNpbmdsZSBWTEFOXCYjMzQ7LFxuJiM0MztcdCAgLmRhZGRyID0gSVBWNF9WTEFOX0VHUkVTU19EU1QsIC5leHBlY3RlZF9yZXQgPSBCUEZfRklCX0xLVVBfUkVUX1NVQ0NFU1MsXG4mIzQzO1x0ICAubG9va3VwX2ZsYWdzID0gQlBGX0ZJQl9MT09LVVBfVkxBTiB8IEJQRl9GSUJfTE9PS1VQX1NLSVBfTkVJR0gsXG4mIzQzO1x0ICAuZXhwZWN0ZWRfZGV2ID0gXCYjMzQ7dmV0aDFcJiMzNDssIC5jaGVja192bGFuID0gdHJ1ZSxcbiYjNDM7XHQgIC52bGFuX3Byb3RvID0gRVRIX1BfODAyMVEsIC52bGFuX2lkID0gVkxBTl9JRCwgfSxcbiYjNDM7XHQvKlxuJiM0MztcdCAqIHNrYiBwYXRoIHdpdGhvdXQgdG90X2xlbjogbXR1X3Jlc3VsdCBpcyB0aGUgVkxBTiBkZXZpY2UmIzM5O3MgbXR1XG4mIzQzO1x0ICogKDE0MDApLCBub3QgdGhlIHBhcmVudCYjMzk7cyAoMTUwMClcbiYjNDM7XHQgKi9cbiYjNDM7XHR7IC5kZXNjID0gXCYjMzQ7SVB2NCBWTEFOIGVncmVzcywgc2tiLXBhdGggbXR1IGlzIHRoZSBWTEFOIGRldmljZSYjMzk7cyB3aXRob3V0IHRoZSBmbGFnXCYjMzQ7LFxuJiM0MztcdCAgLmRhZGRyID0gSVBWNF9WTEFOX0VHUkVTU19EU1QsIC5leHBlY3RlZF9yZXQgPSBCUEZfRklCX0xLVVBfUkVUX1NVQ0NFU1MsXG4mIzQzO1x0ICAubG9va3VwX2ZsYWdzID0gQlBGX0ZJQl9MT09LVVBfU0tJUF9ORUlHSCxcbiYjNDM7XHQgIC5leHBlY3RlZF9kZXYgPSBWTEFOX0lGQUNFLCAuY2hlY2tfdmxhbiA9IHRydWUsIC5leHBlY3RlZF9tdHUgPSAxNDAwLCB9LFxuJiM0MztcdHsgLmRlc2MgPSBcJiMzNDtJUHY0IFZMQU4gZWdyZXNzLCBmbGFnIHNldCBidXQgZWdyZXNzIGlzIG5vdCBhIFZMQU5cJiMzNDssXG4mIzQzO1x0ICAuZGFkZHIgPSBJUFY0X05VRF9GQUlMRURfQUREUiwgLmV4cGVjdGVkX3JldCA9IEJQRl9GSUJfTEtVUF9SRVRfU1VDQ0VTUyxcbiYjNDM7XHQgIC5sb29rdXBfZmxhZ3MgPSBCUEZfRklCX0xPT0tVUF9WTEFOIHwgQlBGX0ZJQl9MT09LVVBfU0tJUF9ORUlHSCxcbiYjNDM7XHQgIC5leHBlY3RlZF9kZXYgPSBcJiMzNDt2ZXRoMVwmIzM0OywgLmNoZWNrX3ZsYW4gPSB0cnVlLCB9LFxuJiM0MztcdHsgLmRlc2MgPSBcJiMzNDtJUHY0IFZMQU4gZWdyZXNzLCBRaW5RIG5vdCByZWR1Y2libGUgKFZMQU5fRkFJTFVSRSlcJiMzNDssXG4mIzQzO1x0ICAuZGFkZHIgPSBJUFY0X1FJTlFfRFNULFxuJiM0MztcdCAgLmV4cGVjdGVkX3JldCA9IEJQRl9GSUJfTEtVUF9SRVRfVkxBTl9GQUlMVVJFLFxuJiM0MztcdCAgLmxvb2t1cF9mbGFncyA9IEJQRl9GSUJfTE9PS1VQX1ZMQU4gfCBCUEZfRklCX0xPT0tVUF9TS0lQX05FSUdILFxuJiM0MztcdCAgLmV4cGVjdGVkX2RldiA9IFwmIzM0O3ZldGgxXCYjMzQ7LCAuY2hlY2tfdmxhbiA9IHRydWUsIH0sXG4mIzQzO1x0eyAuZGVzYyA9IFwmIzM0O0lQdjQgUWluUSBlZ3Jlc3Mgd2l0aG91dCB0aGUgZmxhZyAoZXNjYXBlIGhhdGNoKVwmIzM0OyxcbiYjNDM7XHQgIC5kYWRkciA9IElQVjRfUUlOUV9EU1QsIC5leHBlY3RlZF9yZXQgPSBCUEZfRklCX0xLVVBfUkVUX1NVQ0NFU1MsXG4mIzQzO1x0ICAubG9va3VwX2ZsYWdzID0gQlBGX0ZJQl9MT09LVVBfU0tJUF9ORUlHSCxcbiYjNDM7XHQgIC5leHBlY3RlZF9kZXYgPSBRSU5RX0lOTkVSX0lGQUNFLCB9LFxuJiM0MztcdHsgLmRlc2MgPSBcJiMzNDtJUHY2IFZMQU4gZWdyZXNzLCBzaW5nbGUgVkxBTlwmIzM0OyxcbiYjNDM7XHQgIC5kYWRkciA9IElQVjZfVkxBTl9FR1JFU1NfRFNULCAuZXhwZWN0ZWRfcmV0ID0gQlBGX0ZJQl9MS1VQX1JFVF9TVUNDRVNTLFxuJiM0MztcdCAgLmxvb2t1cF9mbGFncyA9IEJQRl9GSUJfTE9PS1VQX1ZMQU4gfCBCUEZfRklCX0xPT0tVUF9TS0lQX05FSUdILFxuJiM0MztcdCAgLmV4cGVjdGVkX2RldiA9IFwmIzM0O3ZldGgxXCYjMzQ7LCAuY2hlY2tfdmxhbiA9IHRydWUsXG4mIzQzO1x0ICAudmxhbl9wcm90byA9IEVUSF9QXzgwMjFRLCAudmxhbl9pZCA9IFZMQU5fSUQsIH0sXG4mIzQzO1x0eyAuZGVzYyA9IFwmIzM0O0lQdjQgVkxBTiBlZ3Jlc3MsIG5laWdoYm91ciBvbiB0aGUgVkxBTiBkZXZpY2VcJiMzNDssXG4mIzQzO1x0ICAuZGFkZHIgPSBJUFY0X1ZMQU5fRUdSRVNTX0RTVCwgLmV4cGVjdGVkX3JldCA9IEJQRl9GSUJfTEtVUF9SRVRfU1VDQ0VTUyxcbiYjNDM7XHQgIC5sb29rdXBfZmxhZ3MgPSBCUEZfRklCX0xPT0tVUF9WTEFOLFxuJiM0MztcdCAgLmV4cGVjdGVkX2RldiA9IFwmIzM0O3ZldGgxXCYjMzQ7LCAuY2hlY2tfdmxhbiA9IHRydWUsXG4mIzQzO1x0ICAudmxhbl9wcm90byA9IEVUSF9QXzgwMjFRLCAudmxhbl9pZCA9IFZMQU5fSUQsIC5kbWFjID0gRE1BQ19JTklULCB9LFxuJiM0MztcdHsgLmRlc2MgPSBcJiMzNDtJUHY0IFZMQU4gZWdyZXNzIGluIE9VVFBVVCBtb2RlXCYjMzQ7LFxuJiM0MztcdCAgLmRhZGRyID0gSVBWNF9WTEFOX0VHUkVTU19EU1QsIC5leHBlY3RlZF9yZXQgPSBCUEZfRklCX0xLVVBfUkVUX1NVQ0NFU1MsXG4mIzQzO1x0ICAuaWlmID0gVkxBTl9JRkFDRSxcbiYjNDM7XHQgIC5sb29rdXBfZmxhZ3MgPSBCUEZfRklCX0xPT0tVUF9PVVRQVVQgfCBCUEZfRklCX0xPT0tVUF9WTEFOIHxcbiYjNDM7XHRcdFx0ICBCUEZfRklCX0xPT0tVUF9TS0lQX05FSUdILFxuJiM0MztcdCAgLmV4cGVjdGVkX2RldiA9IFwmIzM0O3ZldGgxXCYjMzQ7LCAuY2hlY2tfdmxhbiA9IHRydWUsXG4mIzQzO1x0ICAudmxhbl9wcm90byA9IEVUSF9QXzgwMjFRLCAudmxhbl9pZCA9IFZMQU5fSUQsIH0sXG4mIzQzO1x0eyAuZGVzYyA9IFwmIzM0O0lQdjQgVkxBTiBlZ3Jlc3Mgb3ZlciBhIGJvbmRcJiMzNDssXG4mIzQzO1x0ICAuZGFkZHIgPSBJUFY0X0JPTkRfVkxBTl9EU1QsIC5leHBlY3RlZF9yZXQgPSBCUEZfRklCX0xLVVBfUkVUX1NVQ0NFU1MsXG4mIzQzO1x0ICAubG9va3VwX2ZsYWdzID0gQlBGX0ZJQl9MT09LVVBfVkxBTiB8IEJQRl9GSUJfTE9PS1VQX1NLSVBfTkVJR0gsXG4mIzQzO1x0ICAuZXhwZWN0ZWRfZGV2ID0gQk9ORF9JRkFDRSwgLmNoZWNrX3ZsYW4gPSB0cnVlLFxuJiM0MztcdCAgLnZsYW5fcHJvdG8gPSBFVEhfUF84MDIxUSwgLnZsYW5faWQgPSBCT05EX1ZMQU5fSUQsIH0sXG4mIzQzO1x0eyAuZGVzYyA9IFwmIzM0O0lQdjQgVkxBTiBlZ3Jlc3MgdmlhIFRCSUQgdGFibGVcJiMzNDssXG4mIzQzO1x0ICAuZGFkZHIgPSBJUFY0X1RCSURfVkxBTl9EU1QsIC5leHBlY3RlZF9yZXQgPSBCUEZfRklCX0xLVVBfUkVUX1NVQ0NFU1MsXG4mIzQzO1x0ICAubG9va3VwX2ZsYWdzID0gQlBGX0ZJQl9MT09LVVBfRElSRUNUIHwgQlBGX0ZJQl9MT09LVVBfVEJJRCB8XG4mIzQzO1x0XHRcdCAgQlBGX0ZJQl9MT09LVVBfVkxBTiB8IEJQRl9GSUJfTE9PS1VQX1NLSVBfTkVJR0gsXG4mIzQzO1x0ICAudGJpZCA9IDEwMCxcbiYjNDM7XHQgIC5leHBlY3RlZF9kZXYgPSBcJiMzNDt2ZXRoMlwmIzM0OywgLmNoZWNrX3ZsYW4gPSB0cnVlLFxuJiM0MztcdCAgLnZsYW5fcHJvdG8gPSBFVEhfUF84MDIxUSwgLnZsYW5faWQgPSBUQklEX1ZMQU5fSUQsIH0sXG4mIzQzO1x0eyAuZGVzYyA9IFwmIzM0O0lQdjQgVkxBTiBlZ3Jlc3MsIHN1Y2Nlc3Mgd3JpdGVzIG10dV9yZXN1bHQgd2l0aCB0aGUgc3dhcFwmIzM0OyxcbiYjNDM7XHQgIC5kYWRkciA9IElQVjRfVkxBTl9NVFVfRFNULCAuZXhwZWN0ZWRfcmV0ID0gQlBGX0ZJQl9MS1VQX1JFVF9TVUNDRVNTLFxuJiM0MztcdCAgLnRvdF9sZW4gPSA1MDAsIC5leHBlY3RlZF9tdHUgPSAxMDAwLFxuJiM0MztcdCAgLmxvb2t1cF9mbGFncyA9IEJQRl9GSUJfTE9PS1VQX1ZMQU4gfCBCUEZfRklCX0xPT0tVUF9TS0lQX05FSUdILFxuJiM0MztcdCAgLmV4cGVjdGVkX2RldiA9IFwmIzM0O3ZldGgxXCYjMzQ7LCAuY2hlY2tfdmxhbiA9IHRydWUsXG4mIzQzO1x0ICAudmxhbl9wcm90byA9IEVUSF9QXzgwMjFRLCAudmxhbl9pZCA9IFZMQU5fSUQsIH0sXG4mIzQzO1x0eyAuZGVzYyA9IFwmIzM0O0lQdjQgVkxBTiBlZ3Jlc3MsIEZSQUdfTkVFREVEIHJlcG9ydHMgbXR1LCBzd2FwIHVud3JpdHRlblwmIzM0OyxcbiYjNDM7XHQgIC5kYWRkciA9IElQVjRfVkxBTl9NVFVfRFNULCAuZXhwZWN0ZWRfcmV0ID0gQlBGX0ZJQl9MS1VQX1JFVF9GUkFHX05FRURFRCxcbiYjNDM7XHQgIC50b3RfbGVuID0gMTQwMCwgLmV4cGVjdGVkX210dSA9IDEwMDAsXG4mIzQzO1x0ICAubG9va3VwX2ZsYWdzID0gQlBGX0ZJQl9MT09LVVBfVkxBTiB8IEJQRl9GSUJfTE9PS1VQX1NLSVBfTkVJR0gsXG4mIzQzO1x0ICAuZXhwZWN0ZWRfZGV2ID0gXCYjMzQ7dmV0aDFcJiMzNDssIC5jaGVja192bGFuID0gdHJ1ZSwgfSxcbiYjNDM7XHQvKiB2bGFuIHRhZyBhcyBsb29rdXAgaW5wdXQgKi9cbiYjNDM7XHR7IC5kZXNjID0gXCYjMzQ7SVB2NCBWTEFOIGlucHV0LCBubyBmbGFnXCYjMzQ7LFxuJiM0MztcdCAgLmRhZGRyID0gSVBWNF9WTEFOX0RTVCwgLmV4cGVjdGVkX3JldCA9IEJQRl9GSUJfTEtVUF9SRVRfU1VDQ0VTUyxcbiYjNDM7XHQgIC5leHBlY3RlZF9kc3QgPSBJUFY0X0dXMSxcbiYjNDM7XHQgIC5sb29rdXBfZmxhZ3MgPSBCUEZfRklCX0xPT0tVUF9TS0lQX05FSUdILCB9LFxuJiM0MztcdHsgLmRlc2MgPSBcJiMzNDtJUHY0IFZMQU4gaW5wdXQsIHRhZyBzZWxlY3RzIHN1YmludGVyZmFjZSByb3V0ZVwmIzM0OyxcbiYjNDM7XHQgIC5kYWRkciA9IElQVjRfVkxBTl9EU1QsIC5leHBlY3RlZF9yZXQgPSBCUEZfRklCX0xLVVBfUkVUX1NVQ0NFU1MsXG4mIzQzO1x0ICAuZXhwZWN0ZWRfZHN0ID0gSVBWNF9WTEFOX0dXLCAuZXhwZWN0ZWRfZGV2ID0gVkxBTl9JRkFDRSxcbiYjNDM7XHQgIC5sb29rdXBfZmxhZ3MgPSBCUEZfRklCX0xPT0tVUF9WTEFOX0lOUFVUIHwgQlBGX0ZJQl9MT09LVVBfU0tJUF9ORUlHSCxcbiYjNDM7XHQgIC52bGFuX3Byb3RvID0gRVRIX1BfODAyMVEsIC52bGFuX2lkID0gVkxBTl9JRCwgfSxcbiYjNDM7XHR7IC5kZXNjID0gXCYjMzQ7SVB2NiBWTEFOIGlucHV0LCB0YWcgc2VsZWN0cyBzdWJpbnRlcmZhY2Ugcm91dGVcJiMzNDssXG4mIzQzO1x0ICAuZGFkZHIgPSBJUFY2X1ZMQU5fRFNULCAuZXhwZWN0ZWRfcmV0ID0gQlBGX0ZJQl9MS1VQX1JFVF9TVUNDRVNTLFxuJiM0MztcdCAgLmV4cGVjdGVkX2RzdCA9IElQVjZfVkxBTl9HVywgLmV4cGVjdGVkX2RldiA9IFZMQU5fSUZBQ0UsXG4mIzQzO1x0ICAubG9va3VwX2ZsYWdzID0gQlBGX0ZJQl9MT09LVVBfVkxBTl9JTlBVVCB8IEJQRl9GSUJfTE9PS1VQX1NLSVBfTkVJR0gsXG4mIzQzO1x0ICAudmxhbl9wcm90byA9IEVUSF9QXzgwMjFRLCAudmxhbl9pZCA9IFZMQU5fSUQsIH0sXG4mIzQzO1x0eyAuZGVzYyA9IFwmIzM0O0lQdjQgVkxBTiBpbnB1dCBhbmQgZWdyZXNzIGNvbWJpbmVkXCYjMzQ7LFxuJiM0MztcdCAgLmRhZGRyID0gSVBWNF9WTEFOX0RTVCwgLmV4cGVjdGVkX3JldCA9IEJQRl9GSUJfTEtVUF9SRVRfU1VDQ0VTUyxcbiYjNDM7XHQgIC5leHBlY3RlZF9kc3QgPSBJUFY0X1ZMQU5fR1csIC5leHBlY3RlZF9kZXYgPSBcJiMzNDt2ZXRoMVwmIzM0OyxcbiYjNDM7XHQgIC5jaGVja192bGFuID0gdHJ1ZSxcbiYjNDM7XHQgIC5sb29rdXBfZmxhZ3MgPSBCUEZfRklCX0xPT0tVUF9WTEFOX0lOUFVUIHwgQlBGX0ZJQl9MT09LVVBfVkxBTiB8XG4mIzQzO1x0XHRcdCAgQlBGX0ZJQl9MT09LVVBfU0tJUF9ORUlHSCxcbiYjNDM7XHQgIC52bGFuX3Byb3RvID0gRVRIX1BfODAyMVEsIC52bGFuX2lkID0gVkxBTl9JRCwgfSxcbiYjNDM7XHR7IC5kZXNjID0gXCYjMzQ7SVB2NCBWTEFOIGlucHV0LCBuZWlnaGJvdXIgcmVzb2x2ZWQgb24gdGhlIHJvdXRlXCYjMzQ7LFxuJiM0MztcdCAgLmRhZGRyID0gSVBWNF9WTEFOX0RTVCwgLmV4cGVjdGVkX3JldCA9IEJQRl9GSUJfTEtVUF9SRVRfU1VDQ0VTUyxcbiYjNDM7XHQgIC5leHBlY3RlZF9kc3QgPSBJUFY0X1ZMQU5fR1csIC5leHBlY3RlZF9kZXYgPSBWTEFOX0lGQUNFLFxuJiM0MztcdCAgLmxvb2t1cF9mbGFncyA9IEJQRl9GSUJfTE9PS1VQX1ZMQU5fSU5QVVQsXG4mIzQzO1x0ICAudmxhbl9wcm90byA9IEVUSF9QXzgwMjFRLCAudmxhbl9pZCA9IFZMQU5fSUQsIC5kbWFjID0gRE1BQ19JTklUMiwgfSxcbiYjNDM7XHR7IC5kZXNjID0gXCYjMzQ7SVB2NCBWTEFOIGlucHV0LCBzb3VyY2UgYWRkcmVzcyBmcm9tIHRoZSBzdWJpbnRlcmZhY2VcJiMzNDssXG4mIzQzO1x0ICAuZGFkZHIgPSBJUFY0X1ZMQU5fRFNULCAuZXhwZWN0ZWRfcmV0ID0gQlBGX0ZJQl9MS1VQX1JFVF9TVUNDRVNTLFxuJiM0MztcdCAgLmV4cGVjdGVkX3NyYyA9IElQVjRfVkxBTl9JRkFDRV9BRERSLFxuJiM0MztcdCAgLmxvb2t1cF9mbGFncyA9IEJQRl9GSUJfTE9PS1VQX1ZMQU5fSU5QVVQgfCBCUEZfRklCX0xPT0tVUF9TUkMgfFxuJiM0MztcdFx0XHQgIEJQRl9GSUJfTE9PS1VQX1NLSVBfTkVJR0gsXG4mIzQzO1x0ICAudmxhbl9wcm90byA9IEVUSF9QXzgwMjFRLCAudmxhbl9pZCA9IFZMQU5fSUQsIH0sXG4mIzQzO1x0LypcbiYjNDM7XHQgKiBWUkY6IHRoZSByZXNvbHZlZCBzdWJpbnRlcmZhY2UgaXMgZW5zbGF2ZWQsIHNvIHRoZSBsM21kZXYgcnVsZVxuJiM0MztcdCAqIChmdWxsIGxvb2t1cCkgYW5kIGwzbWRldl9maWJfdGFibGVfcmN1KCkgKERJUkVDVCkgbXVzdCBzZWxlY3RcbiYjNDM7XHQgKiB0aGUgVlJGIHRhYmxlIGZyb20gdGhlIHJlc29sdmVkIGluZ3Jlc3NcbiYjNDM7XHQgKi9cbiYjNDM7XHR7IC5kZXNjID0gXCYjMzQ7SVB2NCBWTEFOIGlucHV0LCBWUkYgc3ViaW50ZXJmYWNlLCBubyBmbGFnXCYjMzQ7LFxuJiM0MztcdCAgLmRhZGRyID0gSVBWNF9WUkZfRFNULCAuZXhwZWN0ZWRfcmV0ID0gQlBGX0ZJQl9MS1VQX1JFVF9TVUNDRVNTLFxuJiM0MztcdCAgLmV4cGVjdGVkX2RzdCA9IElQVjRfR1cxLFxuJiM0MztcdCAgLmxvb2t1cF9mbGFncyA9IEJQRl9GSUJfTE9PS1VQX1NLSVBfTkVJR0gsIH0sXG4mIzQzO1x0eyAuZGVzYyA9IFwmIzM0O0lQdjQgVkxBTiBpbnB1dCwgdGFnIHNlbGVjdHMgVlJGIHRhYmxlXCYjMzQ7LFxuJiM0MztcdCAgLmRhZGRyID0gSVBWNF9WUkZfRFNULCAuZXhwZWN0ZWRfcmV0ID0gQlBGX0ZJQl9MS1VQX1JFVF9TVUNDRVNTLFxuJiM0MztcdCAgLmV4cGVjdGVkX2RzdCA9IElQVjRfVlJGX0dXLCAuZXhwZWN0ZWRfZGV2ID0gVlJGX1ZMQU5fSUZBQ0UsXG4mIzQzO1x0ICAubG9va3VwX2ZsYWdzID0gQlBGX0ZJQl9MT09LVVBfVkxBTl9JTlBVVCB8IEJQRl9GSUJfTE9PS1VQX1NLSVBfTkVJR0gsXG4mIzQzO1x0ICAudmxhbl9wcm90byA9IEVUSF9QXzgwMjFRLCAudmxhbl9pZCA9IFZSRl9WTEFOX0lELCB9LFxuJiM0MztcdHsgLmRlc2MgPSBcJiMzNDtJUHY0IFZMQU4gaW5wdXQsIERJUkVDVCB1c2VzIFZSRiB0YWJsZSBmcm9tIHJlc29sdmVkIGluZ3Jlc3NcJiMzNDssXG4mIzQzO1x0ICAuZGFkZHIgPSBJUFY0X1ZSRl9EU1QsIC5leHBlY3RlZF9yZXQgPSBCUEZfRklCX0xLVVBfUkVUX1NVQ0NFU1MsXG4mIzQzO1x0ICAuZXhwZWN0ZWRfZHN0ID0gSVBWNF9WUkZfR1csIC5leHBlY3RlZF9kZXYgPSBWUkZfVkxBTl9JRkFDRSxcbiYjNDM7XHQgIC5sb29rdXBfZmxhZ3MgPSBCUEZfRklCX0xPT0tVUF9WTEFOX0lOUFVUIHwgQlBGX0ZJQl9MT09LVVBfRElSRUNUIHxcbiYjNDM7XHRcdFx0ICBCUEZfRklCX0xPT0tVUF9TS0lQX05FSUdILFxuJiM0MztcdCAgLnZsYW5fcHJvdG8gPSBFVEhfUF84MDIxUSwgLnZsYW5faWQgPSBWUkZfVkxBTl9JRCwgfSxcbiYjNDM7XHQvKlxuJiM0MztcdCAqIGZhaWx1cmUgYXJtcyBhbHNvIGFzc2VydCBwYXJhbXMgaXMgbGVmdCB1bnRvdWNoZWQ6IGlmaW5kZXggc3RpbGxcbiYjNDM7XHQgKiBuYW1lcyB0aGUgcGh5c2ljYWwgZGV2aWNlIGFuZCB0aGUgaW5wdXQgdGFnIGJ5dGVzIHN1cnZpdmVcbiYjNDM7XHQgKi9cbiYjNDM7XHR7IC5kZXNjID0gXCYjMzQ7SVB2NCBWTEFOIGlucHV0LCBpbnZhbGlkIHByb3RvXCYjMzQ7LFxuJiM0MztcdCAgLmRhZGRyID0gSVBWNF9WTEFOX0RTVCwgLmV4cGVjdGVkX3JldCA9IC1FSU5WQUwsXG4mIzQzO1x0ICAuZXhwZWN0ZWRfZGV2ID0gXCYjMzQ7dmV0aDFcJiMzNDssIC5jaGVja192bGFuID0gdHJ1ZSxcbiYjNDM7XHQgIC5sb29rdXBfZmxhZ3MgPSBCUEZfRklCX0xPT0tVUF9WTEFOX0lOUFVUIHwgQlBGX0ZJQl9MT09LVVBfU0tJUF9ORUlHSCxcbiYjNDM7XHQgIC52bGFuX3Byb3RvID0gMHgxMjM0LCAudmxhbl9pZCA9IFZMQU5fSUQsIH0sXG4mIzQzO1x0eyAuZGVzYyA9IFwmIzM0O0lQdjQgVkxBTiBpbnB1dCwgdW5tYXRjaGVkIFZJRFwmIzM0OyxcbiYjNDM7XHQgIC5kYWRkciA9IElQVjRfVkxBTl9EU1QsIC5leHBlY3RlZF9yZXQgPSBCUEZfRklCX0xLVVBfUkVUX05PVF9GV0RFRCxcbiYjNDM7XHQgIC5leHBlY3RlZF9kZXYgPSBcJiMzNDt2ZXRoMVwmIzM0OywgLmNoZWNrX3ZsYW4gPSB0cnVlLFxuJiM0MztcdCAgLmxvb2t1cF9mbGFncyA9IEJQRl9GSUJfTE9PS1VQX1ZMQU5fSU5QVVQgfCBCUEZfRklCX0xPT0tVUF9TS0lQX05FSUdILFxuJiM0MztcdCAgLnZsYW5fcHJvdG8gPSBFVEhfUF84MDIxUSwgLnZsYW5faWQgPSBWTEFOX1ZJRF9VTlVTRUQsIH0sXG4mIzQzO1x0eyAuZGVzYyA9IFwmIzM0O0lQdjQgVkxBTiBpbnB1dCwgc3ViaW50ZXJmYWNlIGRvd25cJiMzNDssXG4mIzQzO1x0ICAuZGFkZHIgPSBJUFY0X1ZMQU5fRFNULCAuZXhwZWN0ZWRfcmV0ID0gQlBGX0ZJQl9MS1VQX1JFVF9OT1RfRldERUQsXG4mIzQzO1x0ICAuZXhwZWN0ZWRfZGV2ID0gXCYjMzQ7dmV0aDFcJiMzNDssIC5jaGVja192bGFuID0gdHJ1ZSxcbiYjNDM7XHQgIC5sb29rdXBfZmxhZ3MgPSBCUEZfRklCX0xPT0tVUF9WTEFOX0lOUFVUIHwgQlBGX0ZJQl9MT09LVVBfU0tJUF9ORUlHSCxcbiYjNDM7XHQgIC52bGFuX3Byb3RvID0gRVRIX1BfODAyMVEsIC52bGFuX2lkID0gVkxBTl9JRF9ET1dOLCB9LFxuJiM0MztcdC8qXG4mIzQzO1x0ICogdGhlIHJlc29sdmVyIHJ1bnMgYmVmb3JlIHRoZSBmb3J3YXJkaW5nIGNoZWNrLCBzbyBvbiBkZXZpY2VzXG4mIzQzO1x0ICogd2l0aCBmb3J3YXJkaW5nIG9mZiBGV0RfRElTQUJMRUQgKG5vdCBOT1RfRldERUQpIHByb3ZlcyB0aGUgdGFnXG4mIzQzO1x0ICogcmVzb2x2ZWQgdG8gdGhhdCBkZXZpY2UgYW5kIHRoZSBsb29rdXAgdXNlZCBpdCBhcyBpbmdyZXNzXG4mIzQzO1x0ICovXG4mIzQzO1x0eyAuZGVzYyA9IFwmIzM0O0lQdjQgVkxBTiBpbnB1dCwgODAyLjFhZCB0YWdcJiMzNDssXG4mIzQzO1x0ICAuZGFkZHIgPSBJUFY0X1ZMQU5fRFNULCAuZXhwZWN0ZWRfcmV0ID0gQlBGX0ZJQl9MS1VQX1JFVF9GV0RfRElTQUJMRUQsXG4mIzQzO1x0ICAubG9va3VwX2ZsYWdzID0gQlBGX0ZJQl9MT09LVVBfVkxBTl9JTlBVVCB8IEJQRl9GSUJfTE9PS1VQX1NLSVBfTkVJR0gsXG4mIzQzO1x0ICAudmxhbl9wcm90byA9IEVUSF9QXzgwMjFBRCwgLnZsYW5faWQgPSBRSU5RX0FEX1ZMQU5fSUQsIH0sXG4mIzQzO1x0eyAuZGVzYyA9IFwmIzM0O0lQdjQgVkxBTiBpbnB1dCwgUENQIGFuZCBERUkgYml0cyBpZ25vcmVkIGluIFRDSVwmIzM0OyxcbiYjNDM7XHQgIC5kYWRkciA9IElQVjRfVkxBTl9EU1QsIC5leHBlY3RlZF9yZXQgPSBCUEZfRklCX0xLVVBfUkVUX1NVQ0NFU1MsXG4mIzQzO1x0ICAuZXhwZWN0ZWRfZHN0ID0gSVBWNF9WTEFOX0dXLFxuJiM0MztcdCAgLmxvb2t1cF9mbGFncyA9IEJQRl9GSUJfTE9PS1VQX1ZMQU5fSU5QVVQgfCBCUEZfRklCX0xPT0tVUF9TS0lQX05FSUdILFxuJiM0MztcdCAgLnZsYW5fcHJvdG8gPSBFVEhfUF84MDIxUSwgLnZsYW5faWQgPSAweGUwMDAgfCBWTEFOX0lELCB9LFxuJiM0MztcdHsgLmRlc2MgPSBcJiMzNDtJUHY0IFZMQU4gaW5wdXQsIGlubmVyIFFpblEgZGV2aWNlIGZyb20gVkxBTiBpZmluZGV4XCYjMzQ7LFxuJiM0MztcdCAgLmRhZGRyID0gSVBWNF9WTEFOX0RTVCwgLmV4cGVjdGVkX3JldCA9IEJQRl9GSUJfTEtVUF9SRVRfRldEX0RJU0FCTEVELFxuJiM0MztcdCAgLmlpZiA9IFFJTlFfT1VURVJfSUZBQ0UsXG4mIzQzO1x0ICAubG9va3VwX2ZsYWdzID0gQlBGX0ZJQl9MT09LVVBfVkxBTl9JTlBVVCB8IEJQRl9GSUJfTE9PS1VQX1NLSVBfTkVJR0gsXG4mIzQzO1x0ICAudmxhbl9wcm90byA9IEVUSF9QXzgwMjFRLCAudmxhbl9pZCA9IFFJTlFfSU5ORVJfVkxBTl9JRCwgfSxcbiYjNDM7XHQvKlxuJiM0MztcdCAqIGJvbmRpbmc6IHRoZSBWTEFOcyBsaXZlIG9uIHRoZSBtYXN0ZXIsIGFzIG9uIHJlY2VpdmUsIHdoZXJlIHRoZVxuJiM0MztcdCAqIGZyYW1lIGlzIHN0ZWVyZWQgdG8gdGhlIG1hc3RlciBiZWZvcmUgVkxBTiBwcm9jZXNzaW5nOyBhIHBvcnRcbiYjNDM7XHQgKiBpZmluZGV4IGRvZXMgbm90IG1hdGNoIChwb3J0cyBjYXJyeSB2aWQgc3RhdGUgYnV0IG5vIFZMQU4gZGV2cylcbiYjNDM7XHQgKi9cbiYjNDM7XHR7IC5kZXNjID0gXCYjMzQ7SVB2NCBWTEFOIGlucHV0LCB0YWcgb24gYm9uZCBtYXN0ZXIgcmVzb2x2ZXNcJiMzNDssXG4mIzQzO1x0ICAuZGFkZHIgPSBJUFY0X1ZMQU5fRFNULCAuZXhwZWN0ZWRfcmV0ID0gQlBGX0ZJQl9MS1VQX1JFVF9GV0RfRElTQUJMRUQsXG4mIzQzO1x0ICAuaWlmID0gQk9ORF9JRkFDRSxcbiYjNDM7XHQgIC5sb29rdXBfZmxhZ3MgPSBCUEZfRklCX0xPT0tVUF9WTEFOX0lOUFVUIHwgQlBGX0ZJQl9MT09LVVBfU0tJUF9ORUlHSCxcbiYjNDM7XHQgIC52bGFuX3Byb3RvID0gRVRIX1BfODAyMVEsIC52bGFuX2lkID0gQk9ORF9WTEFOX0lELCB9LFxuJiM0MztcdHsgLmRlc2MgPSBcJiMzNDtJUHY0IFZMQU4gaW5wdXQsIHRhZyBvbiBib25kIHBvcnQgZG9lcyBub3QgbWF0Y2hcJiMzNDssXG4mIzQzO1x0ICAuZGFkZHIgPSBJUFY0X1ZMQU5fRFNULCAuZXhwZWN0ZWRfcmV0ID0gQlBGX0ZJQl9MS1VQX1JFVF9OT1RfRldERUQsXG4mIzQzO1x0ICAuaWlmID0gQk9ORF9QT1JULCAuZXhwZWN0ZWRfZGV2ID0gQk9ORF9QT1JULCAuY2hlY2tfdmxhbiA9IHRydWUsXG4mIzQzO1x0ICAubG9va3VwX2ZsYWdzID0gQlBGX0ZJQl9MT09LVVBfVkxBTl9JTlBVVCB8IEJQRl9GSUJfTE9PS1VQX1NLSVBfTkVJR0gsXG4mIzQzO1x0ICAudmxhbl9wcm90byA9IEVUSF9QXzgwMjFRLCAudmxhbl9pZCA9IEJPTkRfVkxBTl9JRCwgfSxcbiYjNDM7XHR7IC5kZXNjID0gXCYjMzQ7SVB2NiBWTEFOIGlucHV0LCBpbnZhbGlkIHByb3RvXCYjMzQ7LFxuJiM0MztcdCAgLmRhZGRyID0gSVBWNl9WTEFOX0RTVCwgLmV4cGVjdGVkX3JldCA9IC1FSU5WQUwsXG4mIzQzO1x0ICAuZXhwZWN0ZWRfZGV2ID0gXCYjMzQ7dmV0aDFcJiMzNDssIC5jaGVja192bGFuID0gdHJ1ZSxcbiYjNDM7XHQgIC5sb29rdXBfZmxhZ3MgPSBCUEZfRklCX0xPT0tVUF9WTEFOX0lOUFVUIHwgQlBGX0ZJQl9MT09LVVBfU0tJUF9ORUlHSCxcbiYjNDM7XHQgIC52bGFuX3Byb3RvID0gMHgxMjM0LCAudmxhbl9pZCA9IFZMQU5fSUQsIH0sXG4mIzQzO1x0eyAuZGVzYyA9IFwmIzM0O0lQdjQgVkxBTiBpbnB1dCwgVklEIDAgcHJpb3JpdHkgdGFnIGZhaWxzIGNsb3NlZFwmIzM0OyxcbiYjNDM7XHQgIC5kYWRkciA9IElQVjRfVkxBTl9EU1QsIC5leHBlY3RlZF9yZXQgPSBCUEZfRklCX0xLVVBfUkVUX05PVF9GV0RFRCxcbiYjNDM7XHQgIC5leHBlY3RlZF9kZXYgPSBcJiMzNDt2ZXRoMVwmIzM0OywgLmNoZWNrX3ZsYW4gPSB0cnVlLFxuJiM0MztcdCAgLmxvb2t1cF9mbGFncyA9IEJQRl9GSUJfTE9PS1VQX1ZMQU5fSU5QVVQgfCBCUEZfRklCX0xPT0tVUF9TS0lQX05FSUdILFxuJiM0MztcdCAgLnZsYW5fcHJvdG8gPSBFVEhfUF84MDIxUSwgLnZsYW5faWQgPSAwLCB9LFxuJiM0MztcdHsgLmRlc2MgPSBcJiMzNDtJUHY2IFZMQU4gaW5wdXQsIHVubWF0Y2hlZCBWSURcJiMzNDssXG4mIzQzO1x0ICAuZGFkZHIgPSBJUFY2X1ZMQU5fRFNULCAuZXhwZWN0ZWRfcmV0ID0gQlBGX0ZJQl9MS1VQX1JFVF9OT1RfRldERUQsXG4mIzQzO1x0ICAuZXhwZWN0ZWRfZGV2ID0gXCYjMzQ7dmV0aDFcJiMzNDssIC5jaGVja192bGFuID0gdHJ1ZSxcbiYjNDM7XHQgIC5sb29rdXBfZmxhZ3MgPSBCUEZfRklCX0xPT0tVUF9WTEFOX0lOUFVUIHwgQlBGX0ZJQl9MT09LVVBfU0tJUF9ORUlHSCxcbiYjNDM7XHQgIC52bGFuX3Byb3RvID0gRVRIX1BfODAyMVEsIC52bGFuX2lkID0gVkxBTl9WSURfVU5VU0VELCB9LFxuJiM0MztcdHsgLmRlc2MgPSBcJiMzNDt1bmtub3duIGZsYWcgYml0IHJlamVjdGVkXCYjMzQ7LFxuJiM0MztcdCAgLmRhZGRyID0gSVBWNF9WTEFOX0RTVCwgLmV4cGVjdGVkX3JldCA9IC1FSU5WQUwsXG4mIzQzO1x0ICAubG9va3VwX2ZsYWdzID0gKDEgXHUwMDNjXHUwMDNjIDE0KSB8IEJQRl9GSUJfTE9PS1VQX1NLSVBfTkVJR0gsIH0sXG4mIzQzO1x0eyAuZGVzYyA9IFwmIzM0O0lQdjQgVkxBTiBpbnB1dCByZWplY3RlZCB3aXRoIFRCSURcJiMzNDssXG4mIzQzO1x0ICAuZGFkZHIgPSBJUFY0X1ZMQU5fRFNULCAuZXhwZWN0ZWRfcmV0ID0gLUVJTlZBTCxcbiYjNDM7XHQgIC5sb29rdXBfZmxhZ3MgPSBCUEZfRklCX0xPT0tVUF9WTEFOX0lOUFVUIHwgQlBGX0ZJQl9MT09LVVBfVEJJRCxcbiYjNDM7XHQgIC52bGFuX3Byb3RvID0gRVRIX1BfODAyMVEsIC52bGFuX2lkID0gVkxBTl9JRCwgfSxcbiYjNDM7XHR7IC5kZXNjID0gXCYjMzQ7SVB2NCBWTEFOIGlucHV0IHJlamVjdGVkIHdpdGggT1VUUFVUXCYjMzQ7LFxuJiM0MztcdCAgLmRhZGRyID0gSVBWNF9WTEFOX0RTVCwgLmV4cGVjdGVkX3JldCA9IC1FSU5WQUwsXG4mIzQzO1x0ICAubG9va3VwX2ZsYWdzID0gQlBGX0ZJQl9MT09LVVBfVkxBTl9JTlBVVCB8IEJQRl9GSUJfTE9PS1VQX09VVFBVVCxcbiYjNDM7XHQgIC52bGFuX3Byb3RvID0gRVRIX1BfODAyMVEsIC52bGFuX2lkID0gVkxBTl9JRCwgfSxcbiB9O1xuIFxuIHN0YXRpYyBpbnQgc2V0dXBfbmV0bnModm9pZClcbkBAIC0yMDQsNiAmIzQzOzQ3NSwxMTAgQEAgc3RhdGljIGludCBzZXR1cF9uZXRucyh2b2lkKVxuIFx0U1lTKGZhaWwsIFwmIzM0O2lwIHJ1bGUgYWRkIHByaW8gMiBmd21hcmsgJWQgbG9va3VwICVzXCYjMzQ7LCBNQVJLLCBNQVJLX1RBQkxFKTtcbiBcdFNZUyhmYWlsLCBcJiMzNDtpcCAtNiBydWxlIGFkZCBwcmlvIDIgZndtYXJrICVkIGxvb2t1cCAlc1wmIzM0OywgTUFSSywgTUFSS19UQUJMRSk7XG4gXG4mIzQzO1x0LypcbiYjNDM7XHQgKiBTZXR1cCBmb3IgdmxhbiB0ZXN0czogYSBzdWJpbnRlcmZhY2UgZm9yIGVncmVzcyByZXNvbHV0aW9uIGFuZFxuJiM0MztcdCAqIHRhZy1hcy1pbnB1dCwgYSBRaW5RIHN0YWNrLCBhbmQgYW4gaWlmIHJ1bGUgc28gdGhlIGlucHV0IHRlc3RzXG4mIzQzO1x0ICogb2JzZXJ2ZSB3aGljaCBkZXZpY2UgdGhlIGxvb2t1cCB1c2VkIGFzIGluZ3Jlc3MuXG4mIzQzO1x0ICovXG4mIzQzO1x0U1lTKGZhaWwsIFwmIzM0O2lwIGxpbmsgYWRkIGxpbmsgdmV0aDEgbmFtZSAlcyB0eXBlIHZsYW4gaWQgJWRcJiMzNDssXG4mIzQzO1x0ICAgIFZMQU5fSUZBQ0UsIFZMQU5fSUQpO1xuJiM0MztcdFNZUyhmYWlsLCBcJiMzNDtpcCBsaW5rIHNldCBkZXYgJXMgdXBcJiMzNDssIFZMQU5fSUZBQ0UpO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogbG93ZXIgdGhhbiB0aGUgdmV0aDEgcGFyZW50ICgxNTAwKTogdGhlIHNrYi1wYXRoIG10dSBjaGVjayB1c2VzIHRoZVxuJiM0MztcdCAqIEZJQiByZXN1bHQgKFZMQU4pIGRldmljZSwgc28gbXR1X3Jlc3VsdCBpcyB0aGlzIHZhbHVlIHdpdGggb3JcbiYjNDM7XHQgKiB3aXRob3V0IHRoZSBlZ3Jlc3Mgc3dhcCwgd2hpY2ggdHdvIGFybXMgYmVsb3cgcGluXG4mIzQzO1x0ICovXG4mIzQzO1x0U1lTKGZhaWwsIFwmIzM0O2lwIGxpbmsgc2V0IGRldiAlcyBtdHUgMTQwMFwmIzM0OywgVkxBTl9JRkFDRSk7XG4mIzQzO1x0U1lTKGZhaWwsIFwmIzM0O2lwIGFkZHIgYWRkICVzLzI0IGRldiAlc1wmIzM0OywgSVBWNF9WTEFOX0lGQUNFX0FERFIsIFZMQU5fSUZBQ0UpO1xuJiM0MztcdFNZUyhmYWlsLCBcJiMzNDtpcCBhZGRyIGFkZCAlcy82NCBkZXYgJXMgbm9kYWRcJiMzNDssIElQVjZfVkxBTl9JRkFDRV9BRERSLCBWTEFOX0lGQUNFKTtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBzdGF5cyBkb3duOiB0aGUgaW5wdXQgZmxhZyBtdXN0IHRyZWF0IGl0cyB0YWcgdGhlIHdheSByZWFsXG4mIzQzO1x0ICogaW5ncmVzcyB0cmVhdHMgYSBmcmFtZSBhcnJpdmluZyBvbiBhIGRvd24gVkxBTiBkZXZpY2UgKGRyb3ApXG4mIzQzO1x0ICovXG4mIzQzO1x0U1lTKGZhaWwsIFwmIzM0O2lwIGxpbmsgYWRkIGxpbmsgdmV0aDEgbmFtZSAlcyB0eXBlIHZsYW4gaWQgJWRcJiMzNDssXG4mIzQzO1x0ICAgIFZMQU5fSUZBQ0VfRE9XTiwgVkxBTl9JRF9ET1dOKTtcbiYjNDM7XG4mIzQzO1x0ZXJyID0gd3JpdGVfc3lzY3RsKFwmIzM0Oy9wcm9jL3N5cy9uZXQvaXB2NC9jb25mL1wmIzM0OyBWTEFOX0lGQUNFIFwmIzM0Oy9mb3J3YXJkaW5nXCYjMzQ7LCBcJiMzNDsxXCYjMzQ7KTtcbiYjNDM7XHRpZiAoIUFTU0VSVF9PSyhlcnIsIFwmIzM0O3dyaXRlX3N5c2N0bChuZXQuaXB2NC5jb25mLlwmIzM0OyBWTEFOX0lGQUNFIFwmIzM0Oy5mb3J3YXJkaW5nKVwmIzM0OykpXG4mIzQzO1x0XHRnb3RvIGZhaWw7XG4mIzQzO1xuJiM0MztcdGVyciA9IHdyaXRlX3N5c2N0bChcJiMzNDsvcHJvYy9zeXMvbmV0L2lwdjYvY29uZi9cJiMzNDsgVkxBTl9JRkFDRSBcJiMzNDsvZm9yd2FyZGluZ1wmIzM0OywgXCYjMzQ7MVwmIzM0Oyk7XG4mIzQzO1x0aWYgKCFBU1NFUlRfT0soZXJyLCBcJiMzNDt3cml0ZV9zeXNjdGwobmV0LmlwdjYuY29uZi5cJiMzNDsgVkxBTl9JRkFDRSBcJiMzNDsuZm9yd2FyZGluZylcJiMzNDspKVxuJiM0MztcdFx0Z290byBmYWlsO1xuJiM0MztcbiYjNDM7XHRTWVMoZmFpbCwgXCYjMzQ7aXAgbGluayBhZGQgbGluayB2ZXRoMSBuYW1lICVzIHR5cGUgdmxhbiBwcm90byA4MDIuMWFkIGlkIDIwMFwmIzM0OyxcbiYjNDM7XHQgICAgUUlOUV9PVVRFUl9JRkFDRSk7XG4mIzQzO1x0U1lTKGZhaWwsIFwmIzM0O2lwIGxpbmsgYWRkIGxpbmsgJXMgbmFtZSAlcyB0eXBlIHZsYW4gaWQgMzAwXCYjMzQ7LFxuJiM0MztcdCAgICBRSU5RX09VVEVSX0lGQUNFLCBRSU5RX0lOTkVSX0lGQUNFKTtcbiYjNDM7XHRTWVMoZmFpbCwgXCYjMzQ7aXAgbGluayBzZXQgZGV2ICVzIHVwXCYjMzQ7LCBRSU5RX09VVEVSX0lGQUNFKTtcbiYjNDM7XHRTWVMoZmFpbCwgXCYjMzQ7aXAgbGluayBzZXQgZGV2ICVzIHVwXCYjMzQ7LCBRSU5RX0lOTkVSX0lGQUNFKTtcbiYjNDM7XHRTWVMoZmFpbCwgXCYjMzQ7aXAgcm91dGUgYWRkICVzLzMyIGRldiAlc1wmIzM0OywgSVBWNF9RSU5RX0RTVCwgUUlOUV9JTk5FUl9JRkFDRSk7XG4mIzQzO1xuJiM0MztcdFNZUyhmYWlsLCBcJiMzNDtpcCByb3V0ZSBhZGQgJXMvMzIgdmlhICVzXCYjMzQ7LCBJUFY0X1ZMQU5fRFNULCBJUFY0X0dXMSk7XG4mIzQzO1x0U1lTKGZhaWwsIFwmIzM0O2lwIHJvdXRlIGFkZCB0YWJsZSAlcyAlcy8zMiB2aWEgJXNcJiMzNDssXG4mIzQzO1x0ICAgIFZMQU5fVEFCTEUsIElQVjRfVkxBTl9EU1QsIElQVjRfVkxBTl9HVyk7XG4mIzQzO1x0U1lTKGZhaWwsIFwmIzM0O2lwIHJ1bGUgYWRkIHByaW8gMyBpaWYgJXMgbG9va3VwICVzXCYjMzQ7LCBWTEFOX0lGQUNFLCBWTEFOX1RBQkxFKTtcbiYjNDM7XHRTWVMoZmFpbCwgXCYjMzQ7aXAgLTYgcm91dGUgYWRkICVzLzEyOCB2aWEgJXNcJiMzNDssIElQVjZfVkxBTl9EU1QsIElQVjZfR1cxKTtcbiYjNDM7XHRTWVMoZmFpbCwgXCYjMzQ7aXAgLTYgcm91dGUgYWRkIHRhYmxlICVzICVzLzEyOCB2aWEgJXNcJiMzNDssXG4mIzQzO1x0ICAgIFZMQU5fVEFCTEUsIElQVjZfVkxBTl9EU1QsIElQVjZfVkxBTl9HVyk7XG4mIzQzO1x0U1lTKGZhaWwsIFwmIzM0O2lwIC02IHJ1bGUgYWRkIHByaW8gMyBpaWYgJXMgbG9va3VwICVzXCYjMzQ7LCBWTEFOX0lGQUNFLCBWTEFOX1RBQkxFKTtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBhIGJvbmQgd2l0aCBvbmUgcG9ydCBhbmQgYSBWTEFOIG9uIHRoZSBib25kOiBWTEFOcyBvbiBhIGJvbmRcbiYjNDM7XHQgKiBsaXZlIG9uIHRoZSBtYXN0ZXIsIHNvIHJlc29sdXRpb24gc3VjY2VlZHMgZm9yIHRoZSBtYXN0ZXImIzM5O3NcbiYjNDM7XHQgKiBpZmluZGV4IGFuZCBmYWlscyBjbG9zZWQgZm9yIGEgcG9ydCYjMzk7cywgbWF0Y2hpbmcgcmVjZWl2ZSwgd2hpY2hcbiYjNDM7XHQgKiBzdGVlcnMgdGhlIGZyYW1lIHRvIHRoZSBtYXN0ZXIgYmVmb3JlIFZMQU4gcHJvY2Vzc2luZ1xuJiM0MztcdCAqL1xuJiM0MztcdFNZUyhmYWlsLCBcJiMzNDtpcCBsaW5rIGFkZCAlcyB0eXBlIGJvbmRcJiMzNDssIEJPTkRfSUZBQ0UpO1xuJiM0MztcdFNZUyhmYWlsLCBcJiMzNDtpcCBsaW5rIGFkZCAlcyB0eXBlIHZldGggcGVlciBuYW1lICVzXCYjMzQ7LCBCT05EX1BPUlQsIEJPTkRfUE9SVF9QRUVSKTtcbiYjNDM7XHRTWVMoZmFpbCwgXCYjMzQ7aXAgbGluayBzZXQgJXMgbWFzdGVyICVzXCYjMzQ7LCBCT05EX1BPUlQsIEJPTkRfSUZBQ0UpO1xuJiM0MztcdFNZUyhmYWlsLCBcJiMzNDtpcCBsaW5rIHNldCBkZXYgJXMgdXBcJiMzNDssIEJPTkRfSUZBQ0UpO1xuJiM0MztcdFNZUyhmYWlsLCBcJiMzNDtpcCBsaW5rIHNldCBkZXYgJXMgdXBcJiMzNDssIEJPTkRfUE9SVCk7XG4mIzQzO1x0U1lTKGZhaWwsIFwmIzM0O2lwIGxpbmsgYWRkIGxpbmsgJXMgbmFtZSAlcy4lZCB0eXBlIHZsYW4gaWQgJWRcJiMzNDssXG4mIzQzO1x0ICAgIEJPTkRfSUZBQ0UsIEJPTkRfSUZBQ0UsIEJPTkRfVkxBTl9JRCwgQk9ORF9WTEFOX0lEKTtcbiYjNDM7XHRTWVMoZmFpbCwgXCYjMzQ7aXAgbGluayBzZXQgZGV2ICVzLiVkIHVwXCYjMzQ7LCBCT05EX0lGQUNFLCBCT05EX1ZMQU5fSUQpO1xuJiM0MztcdFNZUyhmYWlsLCBcJiMzNDtpcCByb3V0ZSBhZGQgJXMvMzIgZGV2ICVzLiVkXCYjMzQ7LFxuJiM0MztcdCAgICBJUFY0X0JPTkRfVkxBTl9EU1QsIEJPTkRfSUZBQ0UsIEJPTkRfVkxBTl9JRCk7XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogYSBWUkYgd2l0aCBpdHMgb3duIGRlZGljYXRlZCBzdWJpbnRlcmZhY2UgKHRoZSBpaWYgcnVsZXMgYWJvdmVcbiYjNDM7XHQgKiBtdXN0IG5vdCBzZWUgaXQpLCBmb3IgdGhlIHRhYmxlLXNlbGVjdGlvbi1ieS1pbmdyZXNzIGNhc2VzXG4mIzQzO1x0ICovXG4mIzQzO1x0U1lTKGZhaWwsIFwmIzM0O2lwIGxpbmsgYWRkICVzIHR5cGUgdnJmIHRhYmxlICVzXCYjMzQ7LCBWUkZfSUZBQ0UsIFZSRl9UQUJMRSk7XG4mIzQzO1x0U1lTKGZhaWwsIFwmIzM0O2lwIGxpbmsgc2V0IGRldiAlcyB1cFwmIzM0OywgVlJGX0lGQUNFKTtcbiYjNDM7XHRTWVMoZmFpbCwgXCYjMzQ7aXAgbGluayBhZGQgbGluayB2ZXRoMSBuYW1lICVzIHR5cGUgdmxhbiBpZCAlZFwmIzM0OyxcbiYjNDM7XHQgICAgVlJGX1ZMQU5fSUZBQ0UsIFZSRl9WTEFOX0lEKTtcbiYjNDM7XHRTWVMoZmFpbCwgXCYjMzQ7aXAgbGluayBzZXQgJXMgbWFzdGVyICVzXCYjMzQ7LCBWUkZfVkxBTl9JRkFDRSwgVlJGX0lGQUNFKTtcbiYjNDM7XHRTWVMoZmFpbCwgXCYjMzQ7aXAgbGluayBzZXQgZGV2ICVzIHVwXCYjMzQ7LCBWUkZfVkxBTl9JRkFDRSk7XG4mIzQzO1x0U1lTKGZhaWwsIFwmIzM0O2lwIGFkZHIgYWRkICVzLzI0IGRldiAlc1wmIzM0OywgSVBWNF9WUkZfSUZBQ0VfQUREUiwgVlJGX1ZMQU5fSUZBQ0UpO1xuJiM0MztcdGVyciA9IHdyaXRlX3N5c2N0bChcJiMzNDsvcHJvYy9zeXMvbmV0L2lwdjQvY29uZi9cJiMzNDsgVlJGX1ZMQU5fSUZBQ0UgXCYjMzQ7L2ZvcndhcmRpbmdcJiMzNDssIFwmIzM0OzFcJiMzNDspO1xuJiM0MztcdGlmICghQVNTRVJUX09LKGVyciwgXCYjMzQ7d3JpdGVfc3lzY3RsKG5ldC5pcHY0LmNvbmYuXCYjMzQ7IFZSRl9WTEFOX0lGQUNFIFwmIzM0Oy5mb3J3YXJkaW5nKVwmIzM0OykpXG4mIzQzO1x0XHRnb3RvIGZhaWw7XG4mIzQzO1x0U1lTKGZhaWwsIFwmIzM0O2lwIHJvdXRlIGFkZCAlcy8zMiB2aWEgJXNcJiMzNDssIElQVjRfVlJGX0RTVCwgSVBWNF9HVzEpO1xuJiM0MztcdFNZUyhmYWlsLCBcJiMzNDtpcCByb3V0ZSBhZGQgdGFibGUgJXMgJXMvMzIgdmlhICVzXCYjMzQ7LFxuJiM0MztcdCAgICBWUkZfVEFCTEUsIElQVjRfVlJGX0RTVCwgSVBWNF9WUkZfR1cpO1xuJiM0MztcbiYjNDM7XHQvKiBuZWlnaGJvdXJzIG9uIHRoZSBWTEFOIHN1YmludGVyZmFjZSBmb3IgdGhlIG5vbi1TS0lQX05FSUdIIGNhc2VzICovXG4mIzQzO1x0ZXJyID0gd3JpdGVfc3lzY3RsKFwmIzM0Oy9wcm9jL3N5cy9uZXQvaXB2NC9uZWlnaC9cJiMzNDsgVkxBTl9JRkFDRSBcJiMzNDsvZ2Nfc3RhbGVfdGltZVwmIzM0OywgXCYjMzQ7OTAwXCYjMzQ7KTtcbiYjNDM7XHRpZiAoIUFTU0VSVF9PSyhlcnIsIFwmIzM0O3dyaXRlX3N5c2N0bChuZXQuaXB2NC5uZWlnaC5cJiMzNDsgVkxBTl9JRkFDRSBcJiMzNDsuZ2Nfc3RhbGVfdGltZSlcJiMzNDspKVxuJiM0MztcdFx0Z290byBmYWlsO1xuJiM0MztcdFNZUyhmYWlsLCBcJiMzNDtpcCBuZWlnaCBhZGQgJXMgZGV2ICVzIGxsYWRkciAlcyBudWQgc3RhbGVcJiMzNDssXG4mIzQzO1x0ICAgIElQVjRfVkxBTl9FR1JFU1NfRFNULCBWTEFOX0lGQUNFLCBETUFDKTtcbiYjNDM7XHRTWVMoZmFpbCwgXCYjMzQ7aXAgbmVpZ2ggYWRkICVzIGRldiAlcyBsbGFkZHIgJXMgbnVkIHN0YWxlXCYjMzQ7LFxuJiM0MztcdCAgICBJUFY0X1ZMQU5fR1csIFZMQU5fSUZBQ0UsIERNQUMyKTtcbiYjNDM7XG4mIzQzO1x0LyogYSBWTEFOIG9uIHZldGgyIHdpdGggYSByb3V0ZSBpbiB0aGUgdGJpZCB0ZXN0IHRhYmxlICovXG4mIzQzO1x0U1lTKGZhaWwsIFwmIzM0O2lwIGxpbmsgYWRkIGxpbmsgdmV0aDIgbmFtZSAlcyB0eXBlIHZsYW4gaWQgJWRcJiMzNDssXG4mIzQzO1x0ICAgIFRCSURfVkxBTl9JRkFDRSwgVEJJRF9WTEFOX0lEKTtcbiYjNDM7XHRTWVMoZmFpbCwgXCYjMzQ7aXAgbGluayBzZXQgZGV2ICVzIHVwXCYjMzQ7LCBUQklEX1ZMQU5fSUZBQ0UpO1xuJiM0MztcdFNZUyhmYWlsLCBcJiMzNDtpcCByb3V0ZSBhZGQgdGFibGUgMTAwICVzLzMyIGRldiAlc1wmIzM0OyxcbiYjNDM7XHQgICAgSVBWNF9UQklEX1ZMQU5fRFNULCBUQklEX1ZMQU5fSUZBQ0UpO1xuJiM0MztcbiYjNDM7XHQvKiBhIGxvY2tlZC1tdHUgcm91dGUgdmlhIHRoZSBzdWJpbnRlcmZhY2UgZm9yIHRoZSBGUkFHX05FRURFRCBjYXNlICovXG4mIzQzO1x0U1lTKGZhaWwsIFwmIzM0O2lwIHJvdXRlIGFkZCAlcy8zMiBkZXYgJXMgbXR1IGxvY2sgMTAwMFwmIzM0OyxcbiYjNDM7XHQgICAgSVBWNF9WTEFOX01UVV9EU1QsIFZMQU5fSUZBQ0UpO1xuJiM0MztcbiBcdHJldHVybiAwO1xuIGZhaWw6XG4gXHRyZXR1cm4gLTE7XG5AQCAtMjE4LDkgJiM0Mzs1OTMsMTYgQEAgc3RhdGljIGludCBzZXRfbG9va3VwX3BhcmFtcyhzdHJ1Y3QgYnBmX2ZpYl9sb29rdXAgKnBhcmFtcyxcbiBcdG1lbXNldChwYXJhbXMsIDAsIHNpemVvZigqcGFyYW1zKSk7XG4gXG4gXHRwYXJhbXMtXHUwMDNlbDRfcHJvdG9jb2wgPSBJUFBST1RPX1RDUDtcbi1cdHBhcmFtcy1cdTAwM2VpZmluZGV4ID0gaWZpbmRleDtcbiYjNDM7XHRwYXJhbXMtXHUwMDNlaWZpbmRleCA9IHRlc3QtXHUwMDNlaWlmID8gaWZfbmFtZXRvaW5kZXgodGVzdC1cdTAwM2VpaWYpIDogaWZpbmRleDtcbiBcdHBhcmFtcy1cdTAwM2V0YmlkID0gdGVzdC1cdTAwM2V0YmlkO1xuIFx0cGFyYW1zLVx1MDAzZW1hcmsgPSB0ZXN0LVx1MDAzZW1hcms7XG4mIzQzO1x0cGFyYW1zLVx1MDAzZXRvdF9sZW4gPSB0ZXN0LVx1MDAzZXRvdF9sZW47XG4mIzQzO1xuJiM0MztcdC8qIGhfdmxhbl9wcm90by9oX3ZsYW5fVENJIHVuaW9uIHdpdGggdGJpZCAqL1xuJiM0MztcdGlmICh0ZXN0LVx1MDAzZWxvb2t1cF9mbGFncyBcdTAwMjYgQlBGX0ZJQl9MT09LVVBfVkxBTl9JTlBVVCkge1xuJiM0MztcdFx0cGFyYW1zLVx1MDAzZWhfdmxhbl9wcm90byA9IGh0b25zKHRlc3QtXHUwMDNldmxhbl9wcm90byk7XG4mIzQzO1x0XHRwYXJhbXMtXHUwMDNlaF92bGFuX1RDSSA9IGh0b25zKHRlc3QtXHUwMDNldmxhbl9pZCk7XG4mIzQzO1x0fVxuIFxuIFx0aWYgKGluZXRfcHRvbihBRl9JTkVUNiwgdGVzdC1cdTAwM2VkYWRkciwgcGFyYW1zLVx1MDAzZWlwdjZfZHN0KSA9PSAxKSB7XG4gXHRcdHBhcmFtcy1cdTAwM2VmYW1pbHkgPSBBRl9JTkVUNjtcbkBAIC0yOTgsNyAmIzQzOzY4MCw3IEBAIHZvaWQgdGVzdF9maWJfbG9va3VwKHZvaWQpXG4gXHRzdHJ1Y3QgbnN0b2tlbiAqbnN0b2tlbiA9IE5VTEw7XG4gXHRzdHJ1Y3QgX19za19idWZmIHNrYiA9IHsgfTtcbiBcdHN0cnVjdCBmaWJfbG9va3VwICpza2VsO1xuLVx0aW50IHByb2dfZmQsIGVyciwgcmV0LCBpO1xuJiM0MztcdGludCBwcm9nX2ZkLCB4ZHBfZmQsIGVyciwgcmV0LCBpO1xuIFxuIFx0LyogVGhlIHRlc3QgZG9lcyBub3QgdXNlIHRoZSBza2ItXHUwMDNlZGF0YSwgc29cbiBcdCAqIHVzZSBwa3RfdjYgZm9yIGJvdGggdjYgYW5kIHY0IHRlc3QuXG5AQCAtMzA5LDExICYjNDM7NjkxLDE2IEBAIHZvaWQgdGVzdF9maWJfbG9va3VwKHZvaWQpXG4gXHRcdCAgICAuY3R4X2luID0gXHUwMDI2c2tiLFxuIFx0XHQgICAgLmN0eF9zaXplX2luID0gc2l6ZW9mKHNrYiksXG4gXHQpO1xuJiM0MztcdExJQkJQRl9PUFRTKGJwZl90ZXN0X3J1bl9vcHRzLCB4ZHBfb3B0cyxcbiYjNDM7XHRcdCAgICAuZGF0YV9pbiA9IFx1MDAyNnBrdF92NixcbiYjNDM7XHRcdCAgICAuZGF0YV9zaXplX2luID0gc2l6ZW9mKHBrdF92NiksXG4mIzQzO1x0KTtcbiBcbiBcdHNrZWwgPSBmaWJfbG9va3VwX19vcGVuX2FuZF9sb2FkKCk7XG4gXHRpZiAoIUFTU0VSVF9PS19QVFIoc2tlbCwgXCYjMzQ7c2tlbCBvcGVuX2FuZF9sb2FkXCYjMzQ7KSlcbiBcdFx0cmV0dXJuO1xuIFx0cHJvZ19mZCA9IGJwZl9wcm9ncmFtX19mZChza2VsLVx1MDAzZXByb2dzLmZpYl9sb29rdXApO1xuJiM0MztcdHhkcF9mZCA9IGJwZl9wcm9ncmFtX19mZChza2VsLVx1MDAzZXByb2dzLmZpYl9sb29rdXBfeGRwKTtcbiBcbiBcdFNZUyhmYWlsLCBcJiMzNDtpcCBuZXRucyBhZGQgJXNcJiMzNDssIE5TX1RFU1QpO1xuIFxuQEAgLTM0Myw2ICYjNDM7NzMwLDE1IEBAIHZvaWQgdGVzdF9maWJfbG9va3VwKHZvaWQpXG4gXHRcdGlmICghQVNTRVJUX09LKGVyciwgXCYjMzQ7YnBmX3Byb2dfdGVzdF9ydW5fb3B0c1wmIzM0OykpXG4gXHRcdFx0Y29udGludWU7XG4gXG4mIzQzO1x0XHQvKiBCUEZfRklCX0xPT0tVUF9WTEFOIGlzIFhEUC1vbmx5OyB0aGUgdGMgaGVscGVyIHJlamVjdHMgaXQuXG4mIzQzO1x0XHQgKiBUaGVzZSBjYXNlcyBhcmUgZXhlcmNpc2VkIG9uIHRoZSBYRFAgcGF0aCBiZWxvdy5cbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0aWYgKHRlc3RzW2ldLmxvb2t1cF9mbGFncyBcdTAwMjYgQlBGX0ZJQl9MT09LVVBfVkxBTikge1xuJiM0MztcdFx0XHRBU1NFUlRfRVEoc2tlbC1cdTAwM2Vic3MtXHUwMDNlZmliX2xvb2t1cF9yZXQsIC1FSU5WQUwsXG4mIzQzO1x0XHRcdFx0ICBcJiMzNDt0YyByZWplY3RzIEJQRl9GSUJfTE9PS1VQX1ZMQU5cJiMzNDspO1xuJiM0MztcdFx0XHRjb250aW51ZTtcbiYjNDM7XHRcdH1cbiYjNDM7XG4gXHRcdEFTU0VSVF9FUShza2VsLVx1MDAzZWJzcy1cdTAwM2VmaWJfbG9va3VwX3JldCwgdGVzdHNbaV0uZXhwZWN0ZWRfcmV0LFxuIFx0XHRcdCAgXCYjMzQ7ZmliX2xvb2t1cF9yZXRcJiMzNDspO1xuIFxuQEAgLTM1Miw2ICYjNDM7NzQ4LDIxIEBAIHZvaWQgdGVzdF9maWJfbG9va3VwKHZvaWQpXG4gXHRcdGlmICh0ZXN0c1tpXS5leHBlY3RlZF9kc3QpXG4gXHRcdFx0YXNzZXJ0X2RzdF9pcChmaWJfcGFyYW1zLCB0ZXN0c1tpXS5leHBlY3RlZF9kc3QpO1xuIFxuJiM0MztcdFx0aWYgKHRlc3RzW2ldLmV4cGVjdGVkX2RldilcbiYjNDM7XHRcdFx0QVNTRVJUX0VRKGZpYl9wYXJhbXMtXHUwMDNlaWZpbmRleCxcbiYjNDM7XHRcdFx0XHQgIGlmX25hbWV0b2luZGV4KHRlc3RzW2ldLmV4cGVjdGVkX2RldiksIFwmIzM0O2lmaW5kZXhcJiMzNDspO1xuJiM0MztcbiYjNDM7XHRcdGlmICh0ZXN0c1tpXS5leHBlY3RlZF9tdHUpXG4mIzQzO1x0XHRcdEFTU0VSVF9FUShmaWJfcGFyYW1zLVx1MDAzZW10dV9yZXN1bHQsIHRlc3RzW2ldLmV4cGVjdGVkX210dSxcbiYjNDM7XHRcdFx0XHQgIFwmIzM0O210dV9yZXN1bHRcJiMzNDspO1xuJiM0MztcbiYjNDM7XHRcdGlmICh0ZXN0c1tpXS5jaGVja192bGFuKSB7XG4mIzQzO1x0XHRcdEFTU0VSVF9FUShmaWJfcGFyYW1zLVx1MDAzZWhfdmxhbl9wcm90byxcbiYjNDM7XHRcdFx0XHQgIGh0b25zKHRlc3RzW2ldLnZsYW5fcHJvdG8pLCBcJiMzNDtoX3ZsYW5fcHJvdG9cJiMzNDspO1xuJiM0MztcdFx0XHRBU1NFUlRfRVEoZmliX3BhcmFtcy1cdTAwM2VoX3ZsYW5fVENJLFxuJiM0MztcdFx0XHRcdCAgaHRvbnModGVzdHNbaV0udmxhbl9pZCksIFwmIzM0O2hfdmxhbl9UQ0lcJiMzNDspO1xuJiM0MztcdFx0fVxuJiM0MztcbiBcdFx0cmV0ID0gbWVtY21wKHRlc3RzW2ldLmRtYWMsIGZpYl9wYXJhbXMtXHUwMDNlZG1hYywgc2l6ZW9mKHRlc3RzW2ldLmRtYWMpKTtcbiBcdFx0aWYgKCFBU1NFUlRfRVEocmV0LCAwLCBcJiMzNDtkbWFjIG5vdCBtYXRjaFwmIzM0OykpIHtcbiBcdFx0XHRjaGFyIGV4cGVjdGVkWzE4XSwgYWN0dWFsWzE4XTtcbkBAIC0zNjEsMTUgJiM0Mzs3NzIsMzEzIEBAIHZvaWQgdGVzdF9maWJfbG9va3VwKHZvaWQpXG4gXHRcdFx0cHJpbnRmKFwmIzM0O2RtYWMgZXhwZWN0ZWQgJXMgYWN0dWFsICVzIFwmIzM0OywgZXhwZWN0ZWQsIGFjdHVhbCk7XG4gXHRcdH1cbiBcbi1cdFx0Ly8gZW5zdXJlIHRiaWQgaXMgemVybyYjMzk7ZCBvdXQgYWZ0ZXIgZmliIGxvb2t1cC5cbi1cdFx0aWYgKHRlc3RzW2ldLmxvb2t1cF9mbGFncyBcdTAwMjYgQlBGX0ZJQl9MT09LVVBfRElSRUNUKSB7XG4mIzQzO1x0XHQvKlxuJiM0MztcdFx0ICogZW5zdXJlIHRiaWQgaXMgemVybyYjMzk7ZCBvdXQgYWZ0ZXIgZmliIGxvb2t1cC4gV2l0aFxuJiM0MztcdFx0ICogQlBGX0ZJQl9MT09LVVBfVkxBTiB0aGUgdW5pb24gaG9sZHMgdGhlIHBhY2tlZCB2bGFuXG4mIzQzO1x0XHQgKiBmaWVsZHMgaW5zdGVhZCwgc28gc2tpcCB0aGUgY2hlY2sgZm9yIHRob3NlLlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRpZiAoKHRlc3RzW2ldLmxvb2t1cF9mbGFncyBcdTAwMjYgQlBGX0ZJQl9MT09LVVBfRElSRUNUKSBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdCAgICAhKHRlc3RzW2ldLmxvb2t1cF9mbGFncyBcdTAwMjYgQlBGX0ZJQl9MT09LVVBfVkxBTikpIHtcbiBcdFx0XHRpZiAoIUFTU0VSVF9FUShza2VsLVx1MDAzZWJzcy1cdTAwM2VmaWJfcGFyYW1zLnRiaWQsIDAsXG4gXHRcdFx0XHRcdFwmIzM0O2V4cGVjdGVkIGZpYl9wYXJhbXMudGJpZCB0byBiZSB6ZXJvXCYjMzQ7KSlcbiBcdFx0XHRcdGdvdG8gZmFpbDtcbiBcdFx0fVxuIFx0fVxuIFxuJiM0MztcdC8qXG4mIzQzO1x0ICogUmUtcnVuIHRoZSBjYXNlcyB0aHJvdWdoIGJwZl94ZHBfZmliX2xvb2t1cCgpLiB0ZXN0X3J1biB1c2VzIHRoZVxuJiM0MztcdCAqIGN1cnJlbnQgbmV0bnMmIzM5OyBsb29wYmFjayBmb3IgY3R4LVx1MDAzZXJ4cS1cdTAwM2VkZXYsIHNvIGRldl9uZXQoKSBpcyBOU19URVNUXG4mIzQzO1x0ICogYW5kIHRoZSBsb29rdXAgcnVucyBhZ2FpbnN0IGl0cyBGSUIuIFRoZSBwYXRoLWluZGVwZW5kZW50IHJlc3VsdHNcbiYjNDM7XHQgKiAocmV0dXJuIGNvZGUsIHN3YXBwZWQgaWZpbmRleCwgdmxhbiB0YWcsIGdhdGV3YXkpIG11c3QgbWF0Y2ggdGhlIHNrYlxuJiM0MztcdCAqIHBhdGg7IHRoZSBuby10b3RfbGVuIG10dV9yZXN1bHQgaXMgc2tiLXNwZWNpZmljIGFuZCBub3QgcmVjaGVja2VkLlxuJiM0MztcdCAqL1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIEFSUkFZX1NJWkUodGVzdHMpOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0aWYgKHNldF9sb29rdXBfcGFyYW1zKGZpYl9wYXJhbXMsIFx1MDAyNnRlc3RzW2ldLCBza2IuaWZpbmRleCkpXG4mIzQzO1x0XHRcdGNvbnRpbnVlO1xuJiM0MztcbiYjNDM7XHRcdHNrZWwtXHUwMDNlYnNzLVx1MDAzZWZpYl9sb29rdXBfcmV0ID0gLTE7XG4mIzQzO1x0XHRza2VsLVx1MDAzZWJzcy1cdTAwM2Vsb29rdXBfZmxhZ3MgPSB0ZXN0c1tpXS5sb29rdXBfZmxhZ3M7XG4mIzQzO1xuJiM0MztcdFx0ZXJyID0gYnBmX3Byb2dfdGVzdF9ydW5fb3B0cyh4ZHBfZmQsIFx1MDAyNnhkcF9vcHRzKTtcbiYjNDM7XHRcdGlmICghQVNTRVJUX09LKGVyciwgXCYjMzQ7eGRwIHRlc3RfcnVuXCYjMzQ7KSlcbiYjNDM7XHRcdFx0Y29udGludWU7XG4mIzQzO1xuJiM0MztcdFx0aWYgKCFBU1NFUlRfRVEoc2tlbC1cdTAwM2Vic3MtXHUwMDNlZmliX2xvb2t1cF9yZXQsIHRlc3RzW2ldLmV4cGVjdGVkX3JldCxcbiYjNDM7XHRcdFx0ICAgICAgIFwmIzM0O3hkcCBmaWJfbG9va3VwX3JldFwmIzM0OykpXG4mIzQzO1x0XHRcdHByaW50ZihcJiMzNDsoeGRwKSAlc1xcblwmIzM0OywgdGVzdHNbaV0uZGVzYyk7XG4mIzQzO1xuJiM0MztcdFx0aWYgKHRlc3RzW2ldLmV4cGVjdGVkX2RldilcbiYjNDM7XHRcdFx0QVNTRVJUX0VRKGZpYl9wYXJhbXMtXHUwMDNlaWZpbmRleCxcbiYjNDM7XHRcdFx0XHQgIGlmX25hbWV0b2luZGV4KHRlc3RzW2ldLmV4cGVjdGVkX2RldiksXG4mIzQzO1x0XHRcdFx0ICBcJiMzNDt4ZHAgaWZpbmRleFwmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdFx0aWYgKHRlc3RzW2ldLmV4cGVjdGVkX2RzdClcbiYjNDM7XHRcdFx0YXNzZXJ0X2RzdF9pcChmaWJfcGFyYW1zLCB0ZXN0c1tpXS5leHBlY3RlZF9kc3QpO1xuJiM0MztcbiYjNDM7XHRcdGlmICh0ZXN0c1tpXS5jaGVja192bGFuKSB7XG4mIzQzO1x0XHRcdEFTU0VSVF9FUShmaWJfcGFyYW1zLVx1MDAzZWhfdmxhbl9wcm90byxcbiYjNDM7XHRcdFx0XHQgIGh0b25zKHRlc3RzW2ldLnZsYW5fcHJvdG8pLCBcJiMzNDt4ZHAgaF92bGFuX3Byb3RvXCYjMzQ7KTtcbiYjNDM7XHRcdFx0QVNTRVJUX0VRKGZpYl9wYXJhbXMtXHUwMDNlaF92bGFuX1RDSSxcbiYjNDM7XHRcdFx0XHQgIGh0b25zKHRlc3RzW2ldLnZsYW5faWQpLCBcJiMzNDt4ZHAgaF92bGFuX1RDSVwmIzM0Oyk7XG4mIzQzO1x0XHR9XG4mIzQzO1xuJiM0MztcdFx0cmV0ID0gbWVtY21wKHRlc3RzW2ldLmRtYWMsIGZpYl9wYXJhbXMtXHUwMDNlZG1hYywgc2l6ZW9mKHRlc3RzW2ldLmRtYWMpKTtcbiYjNDM7XHRcdEFTU0VSVF9FUShyZXQsIDAsIFwmIzM0O3hkcCBkbWFjXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO1x0XHQvKlxuJiM0MztcdFx0ICogbXR1X3Jlc3VsdCBmcm9tIGEgdG90X2xlbiBsb29rdXAgaXMgdGhlIHJvdXRlIG10dSBhbmQgaXNcbiYjNDM7XHRcdCAqIHBhdGgtaW5kZXBlbmRlbnQ7IHRoZSBuby10b3RfbGVuIGFybSByZWFkcyBkZXYtXHUwMDNlbXR1IGFuZCBpc1xuJiM0MztcdFx0ICogc2tiLW9ubHksIHNvIGdhdGUgb24gdG90X2xlblxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRpZiAodGVzdHNbaV0uZXhwZWN0ZWRfbXR1IFx1MDAyNlx1MDAyNiB0ZXN0c1tpXS50b3RfbGVuKVxuJiM0MztcdFx0XHRBU1NFUlRfRVEoZmliX3BhcmFtcy1cdTAwM2VtdHVfcmVzdWx0LCB0ZXN0c1tpXS5leHBlY3RlZF9tdHUsXG4mIzQzO1x0XHRcdFx0ICBcJiMzNDt4ZHAgbXR1X3Jlc3VsdFwmIzM0Oyk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7ZmFpbDpcbiYjNDM7XHRpZiAobnN0b2tlbilcbiYjNDM7XHRcdGNsb3NlX25ldG5zKG5zdG9rZW4pO1xuJiM0MztcdFNZU19OT0ZBSUwoXCYjMzQ7aXAgbmV0bnMgZGVsIFwmIzM0OyBOU19URVNUKTtcbiYjNDM7XHRmaWJfbG9va3VwX19kZXN0cm95KHNrZWwpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsjZGVmaW5lIE5TX1ZMQU5fQVx0XCYjMzQ7ZmliX2xvb2t1cF92bGFuX25zX2FcJiMzNDtcbiYjNDM7I2RlZmluZSBOU19WTEFOX0JcdFwmIzM0O2ZpYl9sb29rdXBfdmxhbl9uc19iXCYjMzQ7XG4mIzQzO1xuJiM0MzsvKlxuJiM0MzsgKiBBIFZMQU4gZGV2aWNlIGNhbiBiZSBtb3ZlZCB0byBhbm90aGVyIG5ldG5zIHdoaWxlIHN0YXlpbmcgcmVnaXN0ZXJlZFxuJiM0MzsgKiBvbiBpdHMgcGFyZW50LiBOZWl0aGVyIGRpcmVjdGlvbiBtYXkgdGhlbiBjcm9zcyB0aGUgYm91bmRhcnk6IHRoZVxuJiM0MzsgKiBlZ3Jlc3MgZmxhZyBtdXN0IG5vdCBwdWJsaXNoIHRoZSBmb3JlaWduIHBhcmVudCYjMzk7cyBpZmluZGV4LCBhbmQgdGhlXG4mIzQzOyAqIGlucHV0IGZsYWcgbXVzdCBmYWlsIGNsb3NlZCByYXRoZXIgdGhhbiB1c2UgYSBmb3JlaWduIGluZ3Jlc3MuXG4mIzQzOyAqL1xuJiM0Mzt2b2lkIHRlc3RfZmliX2xvb2t1cF92bGFuX25ldG5zKHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgYnBmX2ZpYl9sb29rdXAgKmZpYl9wYXJhbXM7XG4mIzQzO1x0c3RydWN0IG5zdG9rZW4gKm5zdG9rZW4gPSBOVUxMO1xuJiM0MztcdHN0cnVjdCBfX3NrX2J1ZmYgc2tiID0geyB9O1xuJiM0MztcdHN0cnVjdCBmaWJfbG9va3VwICpza2VsID0gTlVMTDtcbiYjNDM7XHRpbnQgcHJvZ19mZCwgeGRwX2ZkLCBlcnIsIHBhcmVudF9pZHgsIHZsYW5faWR4O1xuJiM0MztcbiYjNDM7XHRMSUJCUEZfT1BUUyhicGZfdGVzdF9ydW5fb3B0cywgcnVuX29wdHMsXG4mIzQzO1x0XHQgICAgLmRhdGFfaW4gPSBcdTAwMjZwa3RfdjYsXG4mIzQzO1x0XHQgICAgLmRhdGFfc2l6ZV9pbiA9IHNpemVvZihwa3RfdjYpLFxuJiM0MztcdFx0ICAgIC5jdHhfaW4gPSBcdTAwMjZza2IsXG4mIzQzO1x0XHQgICAgLmN0eF9zaXplX2luID0gc2l6ZW9mKHNrYiksXG4mIzQzO1x0KTtcbiYjNDM7XHRMSUJCUEZfT1BUUyhicGZfdGVzdF9ydW5fb3B0cywgeGRwX29wdHMsXG4mIzQzO1x0XHQgICAgLmRhdGFfaW4gPSBcdTAwMjZwa3RfdjYsXG4mIzQzO1x0XHQgICAgLmRhdGFfc2l6ZV9pbiA9IHNpemVvZihwa3RfdjYpLFxuJiM0MztcdCk7XG4mIzQzO1xuJiM0MztcdHNrZWwgPSBmaWJfbG9va3VwX19vcGVuX2FuZF9sb2FkKCk7XG4mIzQzO1x0aWYgKCFBU1NFUlRfT0tfUFRSKHNrZWwsIFwmIzM0O3NrZWwgb3Blbl9hbmRfbG9hZFwmIzM0OykpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1x0cHJvZ19mZCA9IGJwZl9wcm9ncmFtX19mZChza2VsLVx1MDAzZXByb2dzLmZpYl9sb29rdXApO1xuJiM0MztcdHhkcF9mZCA9IGJwZl9wcm9ncmFtX19mZChza2VsLVx1MDAzZXByb2dzLmZpYl9sb29rdXBfeGRwKTtcbiYjNDM7XHRmaWJfcGFyYW1zID0gXHUwMDI2c2tlbC1cdTAwM2Vic3MtXHUwMDNlZmliX3BhcmFtcztcbiYjNDM7XG4mIzQzO1x0U1lTKGZhaWwsIFwmIzM0O2lwIG5ldG5zIGFkZCAlc1wmIzM0OywgTlNfVkxBTl9BKTtcbiYjNDM7XHRTWVMoZmFpbCwgXCYjMzQ7aXAgbmV0bnMgYWRkICVzXCYjMzQ7LCBOU19WTEFOX0IpO1xuJiM0MztcbiYjNDM7XHRuc3Rva2VuID0gb3Blbl9uZXRucyhOU19WTEFOX0EpO1xuJiM0MztcdGlmICghQVNTRVJUX09LX1BUUihuc3Rva2VuLCBcJiMzNDtvcGVuX25ldG5zKGEpXCYjMzQ7KSlcbiYjNDM7XHRcdGdvdG8gZmFpbDtcbiYjNDM7XG4mIzQzO1x0U1lTKGZhaWwsIFwmIzM0O2lwIGxpbmsgYWRkIHZldGg3IHR5cGUgdmV0aCBwZWVyIG5hbWUgdmV0aDhcJiMzNDspO1xuJiM0MztcdFNZUyhmYWlsLCBcJiMzNDtpcCBsaW5rIHNldCBkZXYgdmV0aDcgdXBcJiMzNDspO1xuJiM0MztcdFNZUyhmYWlsLCBcJiMzNDtpcCBsaW5rIGFkZCBsaW5rIHZldGg3IG5hbWUgdmV0aDcuNjYgdHlwZSB2bGFuIGlkIDY2XCYjMzQ7KTtcbiYjNDM7XHRTWVMoZmFpbCwgXCYjMzQ7aXAgbGluayBzZXQgdmV0aDcuNjYgbmV0bnMgJXNcJiMzNDssIE5TX1ZMQU5fQik7XG4mIzQzO1xuJiM0MztcdHBhcmVudF9pZHggPSBpZl9uYW1ldG9pbmRleChcJiMzNDt2ZXRoN1wmIzM0Oyk7XG4mIzQzO1x0aWYgKCFBU1NFUlRfTkVRKHBhcmVudF9pZHgsIDAsIFwmIzM0O2lmX25hbWV0b2luZGV4KHZldGg3KVwmIzM0OykpXG4mIzQzO1x0XHRnb3RvIGZhaWw7XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogaW5wdXQ6IHRoZSBtb3ZlZCBkZXZpY2UgaXMgc3RpbGwgaW4gdmV0aDcmIzM5O3MgVkxBTiBncm91cCwgYnV0IGl0XG4mIzQzO1x0ICogbGl2ZXMgaW4gYW5vdGhlciBuZXRucywgc28gdGhlIGxvb2t1cCBtdXN0IGZhaWwgY2xvc2VkXG4mIzQzO1x0ICovXG4mIzQzO1x0c2tiLmlmaW5kZXggPSBwYXJlbnRfaWR4O1xuJiM0MztcdG1lbXNldChmaWJfcGFyYW1zLCAwLCBzaXplb2YoKmZpYl9wYXJhbXMpKTtcbiYjNDM7XHRmaWJfcGFyYW1zLVx1MDAzZWZhbWlseSA9IEFGX0lORVQ7XG4mIzQzO1x0ZmliX3BhcmFtcy1cdTAwM2VsNF9wcm90b2NvbCA9IElQUFJPVE9fVENQO1xuJiM0MztcdGZpYl9wYXJhbXMtXHUwMDNlaWZpbmRleCA9IHBhcmVudF9pZHg7XG4mIzQzO1x0ZmliX3BhcmFtcy1cdTAwM2VoX3ZsYW5fcHJvdG8gPSBodG9ucyhFVEhfUF84MDIxUSk7XG4mIzQzO1x0ZmliX3BhcmFtcy1cdTAwM2VoX3ZsYW5fVENJID0gaHRvbnMoNjYpO1xuJiM0MztcdGlmICghQVNTRVJUX0VRKGluZXRfcHRvbihBRl9JTkVULCBcJiMzNDsxMC42Ni4wLjJcJiMzNDssIFx1MDAyNmZpYl9wYXJhbXMtXHUwMDNlaXB2NF9kc3QpLFxuJiM0MztcdFx0ICAgICAgIDEsIFwmIzM0O2luZXRfcHRvbihkc3QpXCYjMzQ7KSlcbiYjNDM7XHRcdGdvdG8gZmFpbDtcbiYjNDM7XG4mIzQzO1x0c2tlbC1cdTAwM2Vic3MtXHUwMDNlZmliX2xvb2t1cF9yZXQgPSAtMTtcbiYjNDM7XHRza2VsLVx1MDAzZWJzcy1cdTAwM2Vsb29rdXBfZmxhZ3MgPSBCUEZfRklCX0xPT0tVUF9WTEFOX0lOUFVUIHxcbiYjNDM7XHRcdFx0XHQgIEJQRl9GSUJfTE9PS1VQX1NLSVBfTkVJR0g7XG4mIzQzO1x0ZXJyID0gYnBmX3Byb2dfdGVzdF9ydW5fb3B0cyhwcm9nX2ZkLCBcdTAwMjZydW5fb3B0cyk7XG4mIzQzO1x0aWYgKCFBU1NFUlRfT0soZXJyLCBcJiMzNDt0ZXN0X3J1bihpbnB1dClcJiMzNDspKVxuJiM0MztcdFx0Z290byBmYWlsO1xuJiM0MztcdEFTU0VSVF9FUShza2VsLVx1MDAzZWJzcy1cdTAwM2VmaWJfbG9va3VwX3JldCwgQlBGX0ZJQl9MS1VQX1JFVF9OT1RfRldERUQsXG4mIzQzO1x0XHQgIFwmIzM0O2lucHV0IGFjcm9zcyBuZXRucyBmYWlscyBjbG9zZWRcJiMzNDspO1xuJiM0MztcdEFTU0VSVF9FUShmaWJfcGFyYW1zLVx1MDAzZWlmaW5kZXgsIHBhcmVudF9pZHgsIFwmIzM0O2lmaW5kZXggdW50b3VjaGVkXCYjMzQ7KTtcbiYjNDM7XHRBU1NFUlRfRVEoZmliX3BhcmFtcy1cdTAwM2VoX3ZsYW5fVENJLCBodG9ucyg2NiksIFwmIzM0O3RhZyB1bnRvdWNoZWRcJiMzNDspO1xuJiM0MztcbiYjNDM7XHRjbG9zZV9uZXRucyhuc3Rva2VuKTtcbiYjNDM7XHRuc3Rva2VuID0gb3Blbl9uZXRucyhOU19WTEFOX0IpO1xuJiM0MztcdGlmICghQVNTRVJUX09LX1BUUihuc3Rva2VuLCBcJiMzNDtvcGVuX25ldG5zKGIpXCYjMzQ7KSlcbiYjNDM7XHRcdGdvdG8gZmFpbDtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBlZ3Jlc3M6IHRoZSBmaWIgcmVzdWx0IGlzIHRoZSBWTEFOIGRldmljZSBoZXJlLCBidXQgaXRzIHBhcmVudFxuJiM0MztcdCAqIGlzIGluIHRoZSBvdGhlciBuZXRucywgc28gdGhlIHN3YXAgbXVzdCBub3QgaGFwcGVuXG4mIzQzO1x0ICovXG4mIzQzO1x0U1lTKGZhaWwsIFwmIzM0O2lwIGxpbmsgc2V0IGRldiB2ZXRoNy42NiB1cFwmIzM0Oyk7XG4mIzQzO1x0U1lTKGZhaWwsIFwmIzM0O2lwIGFkZHIgYWRkIDEwLjY2LjAuMS8yNCBkZXYgdmV0aDcuNjZcJiMzNDspO1xuJiM0MztcdGVyciA9IHdyaXRlX3N5c2N0bChcJiMzNDsvcHJvYy9zeXMvbmV0L2lwdjQvY29uZi92ZXRoNy42Ni9mb3J3YXJkaW5nXCYjMzQ7LCBcJiMzNDsxXCYjMzQ7KTtcbiYjNDM7XHRpZiAoIUFTU0VSVF9PSyhlcnIsIFwmIzM0O3dyaXRlX3N5c2N0bChmb3J3YXJkaW5nKVwmIzM0OykpXG4mIzQzO1x0XHRnb3RvIGZhaWw7XG4mIzQzO1xuJiM0MztcdHZsYW5faWR4ID0gaWZfbmFtZXRvaW5kZXgoXCYjMzQ7dmV0aDcuNjZcJiMzNDspO1xuJiM0MztcdGlmICghQVNTRVJUX05FUSh2bGFuX2lkeCwgMCwgXCYjMzQ7aWZfbmFtZXRvaW5kZXgodmV0aDcuNjYpXCYjMzQ7KSlcbiYjNDM7XHRcdGdvdG8gZmFpbDtcbiYjNDM7XG4mIzQzO1x0c2tiLmlmaW5kZXggPSB2bGFuX2lkeDtcbiYjNDM7XHRtZW1zZXQoZmliX3BhcmFtcywgMCwgc2l6ZW9mKCpmaWJfcGFyYW1zKSk7XG4mIzQzO1x0ZmliX3BhcmFtcy1cdTAwM2VmYW1pbHkgPSBBRl9JTkVUO1xuJiM0MztcdGZpYl9wYXJhbXMtXHUwMDNlbDRfcHJvdG9jb2wgPSBJUFBST1RPX1RDUDtcbiYjNDM7XHRmaWJfcGFyYW1zLVx1MDAzZWlmaW5kZXggPSB2bGFuX2lkeDtcbiYjNDM7XHRpZiAoIUFTU0VSVF9FUShpbmV0X3B0b24oQUZfSU5FVCwgXCYjMzQ7MTAuNjYuMC4yXCYjMzQ7LCBcdTAwMjZmaWJfcGFyYW1zLVx1MDAzZWlwdjRfZHN0KSxcbiYjNDM7XHRcdCAgICAgICAxLCBcJiMzNDtpbmV0X3B0b24oZHN0KVwmIzM0OykgfHxcbiYjNDM7XHQgICAgIUFTU0VSVF9FUShpbmV0X3B0b24oQUZfSU5FVCwgXCYjMzQ7MTAuNjYuMC4xXCYjMzQ7LCBcdTAwMjZmaWJfcGFyYW1zLVx1MDAzZWlwdjRfc3JjKSxcbiYjNDM7XHRcdCAgICAgICAxLCBcJiMzNDtpbmV0X3B0b24oc3JjKVwmIzM0OykpXG4mIzQzO1x0XHRnb3RvIGZhaWw7XG4mIzQzO1xuJiM0MztcdHNrZWwtXHUwMDNlYnNzLVx1MDAzZWZpYl9sb29rdXBfcmV0ID0gLTE7XG4mIzQzO1x0c2tlbC1cdTAwM2Vic3MtXHUwMDNlbG9va3VwX2ZsYWdzID0gQlBGX0ZJQl9MT09LVVBfVkxBTiB8XG4mIzQzO1x0XHRcdFx0ICBCUEZfRklCX0xPT0tVUF9TS0lQX05FSUdIO1xuJiM0MztcdGVyciA9IGJwZl9wcm9nX3Rlc3RfcnVuX29wdHMoeGRwX2ZkLCBcdTAwMjZ4ZHBfb3B0cyk7XG4mIzQzO1x0aWYgKCFBU1NFUlRfT0soZXJyLCBcJiMzNDt0ZXN0X3J1bihlZ3Jlc3MpXCYjMzQ7KSlcbiYjNDM7XHRcdGdvdG8gZmFpbDtcbiYjNDM7XHRBU1NFUlRfRVEoc2tlbC1cdTAwM2Vic3MtXHUwMDNlZmliX2xvb2t1cF9yZXQsIEJQRl9GSUJfTEtVUF9SRVRfVkxBTl9GQUlMVVJFLFxuJiM0MztcdFx0ICBcJiMzNDtlZ3Jlc3MgcmV0dXJucyBWTEFOX0ZBSUxVUkVcJiMzNDspO1xuJiM0MztcdEFTU0VSVF9FUShmaWJfcGFyYW1zLVx1MDAzZWlmaW5kZXgsIHZsYW5faWR4LFxuJiM0MztcdFx0ICBcJiMzNDtmb3JlaWduIHBhcmVudCBub3QgcHVibGlzaGVkXCYjMzQ7KTtcbiYjNDM7XHRBU1NFUlRfRVEoZmliX3BhcmFtcy1cdTAwM2VoX3ZsYW5fVENJLCAwLCBcJiMzNDt2bGFuIGZpZWxkcyB6ZXJvXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO2ZhaWw6XG4mIzQzO1x0aWYgKG5zdG9rZW4pXG4mIzQzO1x0XHRjbG9zZV9uZXRucyhuc3Rva2VuKTtcbiYjNDM7XHRTWVNfTk9GQUlMKFwmIzM0O2lwIG5ldG5zIGRlbCBcJiMzNDsgTlNfVkxBTl9BKTtcbiYjNDM7XHRTWVNfTk9GQUlMKFwmIzM0O2lwIG5ldG5zIGRlbCBcJiMzNDsgTlNfVkxBTl9CKTtcbiYjNDM7XHRmaWJfbG9va3VwX19kZXN0cm95KHNrZWwpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsjZGVmaW5lIFJFRElSRUNUX05QS1RTIDEwMDBcbiYjNDM7XG4mIzQzOy8qXG4mIzQzOyAqIFRoZSBlZ3Jlc3MgZmxhZyBleGlzdHMgc28gYW4gWERQIHByb2dyYW0gY2FuIHJlZGlyZWN0IHRvIHRoZSBwaHlzaWNhbFxuJiM0MzsgKiBwYXJlbnQuIEEgcmVkaXJlY3QgdGhhdCBsYW5kcyBvbiBhIFZMQU4gZGV2aWNlIGlzIGRyb3BwZWQgYXRcbiYjNDM7ICogeGRwX2RvX2ZsdXNoKCksIGJlY2F1c2UgYSBWTEFOIGRldmljZSBoYXMgbm8gbmRvX3hkcF94bWl0LiBEcml2ZSByZWFsXG4mIzQzOyAqIGZyYW1lcyB3aXRoIEJQRl9GX1RFU1RfWERQX0xJVkVfRlJBTUVTLCB3aGljaCBydW5zIHRoZSBuYXRpdmVcbiYjNDM7ICogeGRwX2RvX3JlZGlyZWN0KCkgJiM0MzsgeGRwX2RvX2ZsdXNoKCkgcGF0aDogYSByZWR1Y2libGUgVkxBTiBlZ3Jlc3NcbiYjNDM7ICogcmVzb2x2ZXMgdG8gdmV0aDEgYW5kIGlzIGRlbGl2ZXJlZCB0byBpdHMgcGVlciB2ZXRoMiwgd2hpbGUgYSBRaW5RXG4mIzQzOyAqIGVncmVzcyByZXR1cm5zIFZMQU5fRkFJTFVSRSBhbmQgaXMgcGFzc2VkIHRvIHRoZSBzdGFjayBpbnN0ZWFkIG9mXG4mIzQzOyAqIHJlZGlyZWN0ZWQgdG8gYSBkZXZpY2UgdGhhdCB3b3VsZCBzaWxlbnRseSBkcm9wIGl0LlxuJiM0MzsgKi9cbiYjNDM7dm9pZCB0ZXN0X2ZpYl9sb29rdXBfdmxhbl9yZWRpcmVjdCh2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0aW50IHJlZGlyZWN0X2ZkLCBlcnIsIHZldGgxX2lkeCwgdmV0aDJfaWR4ID0gLTE7XG4mIzQzO1x0c3RydWN0IGJwZl9maWJfbG9va3VwICpmaWJfcGFyYW1zO1xuJiM0MztcdHN0cnVjdCBuc3Rva2VuICpuc3Rva2VuID0gTlVMTDtcbiYjNDM7XHRzdHJ1Y3QgZmliX2xvb2t1cCAqc2tlbCA9IE5VTEw7XG4mIzQzO1x0Ym9vbCB4ZHBfYXR0YWNoZWQgPSBmYWxzZTtcbiYjNDM7XG4mIzQzO1x0TElCQlBGX09QVFMoYnBmX3Rlc3RfcnVuX29wdHMsIGxmX29wdHMsXG4mIzQzO1x0XHQgICAgLmRhdGFfaW4gPSBcdTAwMjZwa3RfdjQsXG4mIzQzO1x0XHQgICAgLmRhdGFfc2l6ZV9pbiA9IHNpemVvZihwa3RfdjQpLFxuJiM0MztcdFx0ICAgIC5mbGFncyA9IEJQRl9GX1RFU1RfWERQX0xJVkVfRlJBTUVTLFxuJiM0MztcdFx0ICAgIC5yZXBlYXQgPSBSRURJUkVDVF9OUEtUUyxcbiYjNDM7XHQpO1xuJiM0MztcbiYjNDM7XHRza2VsID0gZmliX2xvb2t1cF9fb3Blbl9hbmRfbG9hZCgpO1xuJiM0MztcdGlmICghQVNTRVJUX09LX1BUUihza2VsLCBcJiMzNDtza2VsIG9wZW5fYW5kX2xvYWRcJiMzNDspKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcdHJlZGlyZWN0X2ZkID0gYnBmX3Byb2dyYW1fX2ZkKHNrZWwtXHUwMDNlcHJvZ3MuZmliX2xvb2t1cF9yZWRpcmVjdCk7XG4mIzQzO1x0ZmliX3BhcmFtcyA9IFx1MDAyNnNrZWwtXHUwMDNlYnNzLVx1MDAzZWZpYl9wYXJhbXM7XG4mIzQzO1xuJiM0MztcdFNZUyhmYWlsLCBcJiMzNDtpcCBuZXRucyBhZGQgJXNcJiMzNDssIE5TX1RFU1QpO1xuJiM0MztcdG5zdG9rZW4gPSBvcGVuX25ldG5zKE5TX1RFU1QpO1xuJiM0MztcdGlmICghQVNTRVJUX09LX1BUUihuc3Rva2VuLCBcJiMzNDtvcGVuX25ldG5zXCYjMzQ7KSlcbiYjNDM7XHRcdGdvdG8gZmFpbDtcbiYjNDM7XHRpZiAoc2V0dXBfbmV0bnMoKSlcbiYjNDM7XHRcdGdvdG8gZmFpbDtcbiYjNDM7XG4mIzQzO1x0dmV0aDFfaWR4ID0gaWZfbmFtZXRvaW5kZXgoXCYjMzQ7dmV0aDFcJiMzNDspO1xuJiM0MztcdHZldGgyX2lkeCA9IGlmX25hbWV0b2luZGV4KFwmIzM0O3ZldGgyXCYjMzQ7KTtcbiYjNDM7XHRpZiAoIUFTU0VSVF9ORVEodmV0aDFfaWR4LCAwLCBcJiMzNDtpZl9uYW1ldG9pbmRleCh2ZXRoMSlcJiMzNDspIHx8XG4mIzQzO1x0ICAgICFBU1NFUlRfTkVRKHZldGgyX2lkeCwgMCwgXCYjMzQ7aWZfbmFtZXRvaW5kZXgodmV0aDIpXCYjMzQ7KSlcbiYjNDM7XHRcdGdvdG8gZmFpbDtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBBIHJlZGlyZWN0IHRvIHZldGgxIGlzIGRlbGl2ZXJlZCB0byBpdHMgcGVlciB2ZXRoMi4gdmV0aF94ZHBfeG1pdCgpXG4mIzQzO1x0ICogb25seSBhY2NlcHRzIHRoZSBmcmFtZSBpZiB2ZXRoMiYjMzk7cyBOQVBJIGlzIHVwLCB3aGljaCBvbiB2ZXRoIG1lYW5zXG4mIzQzO1x0ICogdmV0aDIgY2FycmllcyBhbiBYRFAgcHJvZ3JhbTsgeGRwX2NvdW50IHRhbGxpZXMgd2hhdCBhcnJpdmVzLlxuJiM0MztcdCAqL1xuJiM0MztcdGVyciA9IGJwZl94ZHBfYXR0YWNoKHZldGgyX2lkeCwgYnBmX3Byb2dyYW1fX2ZkKHNrZWwtXHUwMDNlcHJvZ3MueGRwX2NvdW50KSxcbiYjNDM7XHRcdFx0ICAgICBYRFBfRkxBR1NfRFJWX01PREUsIE5VTEwpO1xuJiM0MztcdGlmICghQVNTRVJUX09LKGVyciwgXCYjMzQ7YXR0YWNoIHhkcF9jb3VudCBvbiB2ZXRoMlwmIzM0OykpXG4mIzQzO1x0XHRnb3RvIGZhaWw7XG4mIzQzO1x0eGRwX2F0dGFjaGVkID0gdHJ1ZTtcbiYjNDM7XG4mIzQzO1x0LyogcmVkdWNpYmxlIFZMQU4gZWdyZXNzOiByZXNvbHZlcyB0byB0aGUgcGh5c2ljYWwgcGFyZW50IHZldGgxICovXG4mIzQzO1x0bWVtc2V0KGZpYl9wYXJhbXMsIDAsIHNpemVvZigqZmliX3BhcmFtcykpO1xuJiM0MztcdGZpYl9wYXJhbXMtXHUwMDNlZmFtaWx5ID0gQUZfSU5FVDtcbiYjNDM7XHRmaWJfcGFyYW1zLVx1MDAzZWw0X3Byb3RvY29sID0gSVBQUk9UT19UQ1A7XG4mIzQzO1x0ZmliX3BhcmFtcy1cdTAwM2VpZmluZGV4ID0gdmV0aDFfaWR4O1xuJiM0MztcdGlmICghQVNTRVJUX0VRKGluZXRfcHRvbihBRl9JTkVULCBJUFY0X0lGQUNFX0FERFIsIFx1MDAyNmZpYl9wYXJhbXMtXHUwMDNlaXB2NF9zcmMpLFxuJiM0MztcdFx0ICAgICAgIDEsIFwmIzM0O2luZXRfcHRvbihzcmMpXCYjMzQ7KSB8fFxuJiM0MztcdCAgICAhQVNTRVJUX0VRKGluZXRfcHRvbihBRl9JTkVULCBJUFY0X1ZMQU5fRUdSRVNTX0RTVCwgXHUwMDI2ZmliX3BhcmFtcy1cdTAwM2VpcHY0X2RzdCksXG4mIzQzO1x0XHQgICAgICAgMSwgXCYjMzQ7aW5ldF9wdG9uKHJlZHVjaWJsZSBkc3QpXCYjMzQ7KSlcbiYjNDM7XHRcdGdvdG8gZmFpbDtcbiYjNDM7XHRza2VsLVx1MDAzZWJzcy1cdTAwM2Vsb29rdXBfZmxhZ3MgPSBCUEZfRklCX0xPT0tVUF9WTEFOIHwgQlBGX0ZJQl9MT09LVVBfU0tJUF9ORUlHSDtcbiYjNDM7XHRza2VsLVx1MDAzZWJzcy1cdTAwM2VyZWRpcmVjdGVkID0gMDtcbiYjNDM7XHRza2VsLVx1MDAzZWJzcy1cdTAwM2VwYXNzZWQgPSAwO1xuJiM0MztcdHNrZWwtXHUwMDNlYnNzLVx1MDAzZWRlbGl2ZXJlZCA9IDA7XG4mIzQzO1xuJiM0MztcdGVyciA9IGJwZl9wcm9nX3Rlc3RfcnVuX29wdHMocmVkaXJlY3RfZmQsIFx1MDAyNmxmX29wdHMpO1xuJiM0MztcdGlmICghQVNTRVJUX09LKGVyciwgXCYjMzQ7dGVzdF9ydW4ocmVkdWNpYmxlIGVncmVzcylcJiMzNDspKVxuJiM0MztcdFx0Z290byBmYWlsO1xuJiM0MztcdEFTU0VSVF9FUShza2VsLVx1MDAzZWJzcy1cdTAwM2VyZWRpcmVjdGVkLCBSRURJUkVDVF9OUEtUUywgXCYjMzQ7cmVkdWNpYmxlIGVncmVzcyByZWRpcmVjdGVkXCYjMzQ7KTtcbiYjNDM7XHRBU1NFUlRfRVEoc2tlbC1cdTAwM2Vic3MtXHUwMDNlcGFzc2VkLCAwLCBcJiMzNDtyZWR1Y2libGUgZWdyZXNzIG5vdCBwYXNzZWRcJiMzNDspO1xuJiM0MztcdEFTU0VSVF9HVChza2VsLVx1MDAzZWJzcy1cdTAwM2VkZWxpdmVyZWQsIDAsIFwmIzM0O3JlZHVjaWJsZSBlZ3Jlc3MgZGVsaXZlcmVkIHRvIHZldGgyXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBRaW5RIGVncmVzczogbm90IHJlZHVjaWJsZSwgc28gdGhlIGxvb2t1cCByZXR1cm5zIFZMQU5fRkFJTFVSRSBhbmRcbiYjNDM7XHQgKiB0aGUgcHJvZ3JhbSBwYXNzZXMgdGhlIGZyYW1lIGluc3RlYWQgb2YgcmVkaXJlY3RpbmcgdG8gdGhlIGlubmVyXG4mIzQzO1x0ICogVkxBTiBkZXZpY2UuIHJlZGlyZWN0ZWQgPT0gMCBpcyB0aGUgYXNzZXJ0aW9uIHRoYXQgbWF0dGVyczogdGhlXG4mIzQzO1x0ICogcHJvZ3JhbSBkaWQgbm90IHJlZGlyZWN0IHRvIGEgZGV2aWNlIHRoYXQgd291bGQgZHJvcCB0aGUgZnJhbWUgYXRcbiYjNDM7XHQgKiB4ZHBfZG9fZmx1c2goKS4gdmV0aDImIzM5O3MgZGVsaXZlcmVkIGNvdW50IGlzIG5vdCBjaGVja2VkIGhlcmUsIHNpbmNlXG4mIzQzO1x0ICogYSBwYXNzZWQgZnJhbWUgY2FuIHN0aWxsIHJlYWNoIHZldGgyIHRocm91Z2ggdGhlIHN0YWNrJiMzOTtzIGZvcndhcmRpbmdcbiYjNDM7XHQgKiBwYXRoLCB3aGljaCBpcyB1bnJlbGF0ZWQgdG8gdGhlIHJlZGlyZWN0IHVuZGVyIHRlc3QuXG4mIzQzO1x0ICovXG4mIzQzO1x0bWVtc2V0KGZpYl9wYXJhbXMsIDAsIHNpemVvZigqZmliX3BhcmFtcykpO1xuJiM0MztcdGZpYl9wYXJhbXMtXHUwMDNlZmFtaWx5ID0gQUZfSU5FVDtcbiYjNDM7XHRmaWJfcGFyYW1zLVx1MDAzZWw0X3Byb3RvY29sID0gSVBQUk9UT19UQ1A7XG4mIzQzO1x0ZmliX3BhcmFtcy1cdTAwM2VpZmluZGV4ID0gdmV0aDFfaWR4O1xuJiM0MztcdGlmICghQVNTRVJUX0VRKGluZXRfcHRvbihBRl9JTkVULCBJUFY0X0lGQUNFX0FERFIsIFx1MDAyNmZpYl9wYXJhbXMtXHUwMDNlaXB2NF9zcmMpLFxuJiM0MztcdFx0ICAgICAgIDEsIFwmIzM0O2luZXRfcHRvbihzcmMpXCYjMzQ7KSB8fFxuJiM0MztcdCAgICAhQVNTRVJUX0VRKGluZXRfcHRvbihBRl9JTkVULCBJUFY0X1FJTlFfRFNULCBcdTAwMjZmaWJfcGFyYW1zLVx1MDAzZWlwdjRfZHN0KSxcbiYjNDM7XHRcdCAgICAgICAxLCBcJiMzNDtpbmV0X3B0b24ocWlucSBkc3QpXCYjMzQ7KSlcbiYjNDM7XHRcdGdvdG8gZmFpbDtcbiYjNDM7XHRza2VsLVx1MDAzZWJzcy1cdTAwM2Vsb29rdXBfZmxhZ3MgPSBCUEZfRklCX0xPT0tVUF9WTEFOIHwgQlBGX0ZJQl9MT09LVVBfU0tJUF9ORUlHSDtcbiYjNDM7XHRza2VsLVx1MDAzZWJzcy1cdTAwM2VyZWRpcmVjdGVkID0gMDtcbiYjNDM7XHRza2VsLVx1MDAzZWJzcy1cdTAwM2VwYXNzZWQgPSAwO1xuJiM0MztcbiYjNDM7XHRlcnIgPSBicGZfcHJvZ190ZXN0X3J1bl9vcHRzKHJlZGlyZWN0X2ZkLCBcdTAwMjZsZl9vcHRzKTtcbiYjNDM7XHRpZiAoIUFTU0VSVF9PSyhlcnIsIFwmIzM0O3Rlc3RfcnVuKHFpbnEgZWdyZXNzKVwmIzM0OykpXG4mIzQzO1x0XHRnb3RvIGZhaWw7XG4mIzQzO1x0QVNTRVJUX0VRKHNrZWwtXHUwMDNlYnNzLVx1MDAzZXBhc3NlZCwgUkVESVJFQ1RfTlBLVFMsIFwmIzM0O3FpbnEgZWdyZXNzIHBhc3NlZFwmIzM0Oyk7XG4mIzQzO1x0QVNTRVJUX0VRKHNrZWwtXHUwMDNlYnNzLVx1MDAzZXJlZGlyZWN0ZWQsIDAsIFwmIzM0O3FpbnEgZWdyZXNzIG5vdCByZWRpcmVjdGVkXCYjMzQ7KTtcbiYjNDM7XG4gZmFpbDpcbiYjNDM7XHRpZiAoeGRwX2F0dGFjaGVkKVxuJiM0MztcdFx0YnBmX3hkcF9kZXRhY2godmV0aDJfaWR4LCBYRFBfRkxBR1NfRFJWX01PREUsIE5VTEwpO1xuIFx0aWYgKG5zdG9rZW4pXG4gXHRcdGNsb3NlX25ldG5zKG5zdG9rZW4pO1xuIFx0U1lTX05PRkFJTChcJiMzNDtpcCBuZXRucyBkZWwgXCYjMzQ7IE5TX1RFU1QpO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9maWJfbG9va3VwLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvZmliX2xvb2t1cC5jXG5pbmRleCA3YjVkZDIyMTRmZjQ2YS4uODYyYTFlOTQ1N2I0ZTAgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvZmliX2xvb2t1cC5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvZmliX2xvb2t1cC5jXG5AQCAtMTksNCAmIzQzOzE5LDQwIEBAIGludCBmaWJfbG9va3VwKHN0cnVjdCBfX3NrX2J1ZmYgKnNrYilcbiBcdHJldHVybiBUQ19BQ1RfU0hPVDtcbiB9XG4gXG4mIzQzO1NFQyhcJiMzNDt4ZHBcJiMzNDspXG4mIzQzO2ludCBmaWJfbG9va3VwX3hkcChzdHJ1Y3QgeGRwX21kICpjdHgpXG4mIzQzO3tcbiYjNDM7XHRmaWJfbG9va3VwX3JldCA9IGJwZl9maWJfbG9va3VwKGN0eCwgXHUwMDI2ZmliX3BhcmFtcywgc2l6ZW9mKGZpYl9wYXJhbXMpLFxuJiM0MztcdFx0XHRcdFx0bG9va3VwX2ZsYWdzKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIFhEUF9EUk9QO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztpbnQgcmVkaXJlY3RlZCA9IDA7XG4mIzQzO2ludCBwYXNzZWQgPSAwO1xuJiM0MztpbnQgZGVsaXZlcmVkID0gMDtcbiYjNDM7XG4mIzQzO1NFQyhcJiMzNDt4ZHBcJiMzNDspXG4mIzQzO2ludCBmaWJfbG9va3VwX3JlZGlyZWN0KHN0cnVjdCB4ZHBfbWQgKmN0eClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBicGZfZmliX2xvb2t1cCBwYXJhbXMgPSBmaWJfcGFyYW1zO1xuJiM0MztcdGxvbmcgcmV0O1xuJiM0MztcbiYjNDM7XHRyZXQgPSBicGZfZmliX2xvb2t1cChjdHgsIFx1MDAyNnBhcmFtcywgc2l6ZW9mKHBhcmFtcyksIGxvb2t1cF9mbGFncyk7XG4mIzQzO1x0aWYgKHJldCA9PSBCUEZfRklCX0xLVVBfUkVUX1NVQ0NFU1MpIHtcbiYjNDM7XHRcdHJlZGlyZWN0ZWQmIzQzOyYjNDM7O1xuJiM0MztcdFx0cmV0dXJuIGJwZl9yZWRpcmVjdChwYXJhbXMuaWZpbmRleCwgMCk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRwYXNzZWQmIzQzOyYjNDM7O1xuJiM0MztcdHJldHVybiBYRFBfUEFTUztcbiYjNDM7fVxuJiM0MztcbiYjNDM7U0VDKFwmIzM0O3hkcFwmIzM0OylcbiYjNDM7aW50IHhkcF9jb3VudChzdHJ1Y3QgeGRwX21kICpjdHgpXG4mIzQzO3tcbiYjNDM7XHRkZWxpdmVyZWQmIzQzOyYjNDM7O1xuJiM0MztcdHJldHVybiBYRFBfRFJPUDtcbiYjNDM7fVxuJiM0MztcbiBjaGFyIF9saWNlbnNlW10gU0VDKFwmIzM0O2xpY2Vuc2VcJiMzNDspID0gXCYjMzQ7R1BMXCYjMzQ7O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI0IDAzOjI1PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1ZMQU5fODAyMVEmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDticGZfaXB2NF9maWJfbG9va3VwJiMzNDssCiAgICAmIzM0O2JwZl9pcHY2X2ZpYl9sb29rdXAmIzM0OywKICAgICYjMzQ7YnBmX3hkcF9maWJfbG9va3VwJiMzNDssCiAgICAmIzM0O2JwZl9za2JfZmliX2xvb2t1cCYjMzQ7LAogICAgJiMzNDticGZfZmliX3NldF9md2RfcGFyYW1zJiMzNDssCiAgICAmIzM0O2JwZl9maWJfdmxhbl9pbnB1dF9kZXYmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIEJQRiBGSUIgbG9va3VwIGhlbHBlciAoYGJwZl9maWJfbG9va3VwYCksIGFkZGluZyBzdXBwb3J0IGZvciBWTEFOcyB2aWEgYEJQRl9GSUJfTE9PS1VQX1ZMQU5gIGFuZCBgQlBGX0ZJQl9MT09LVVBfVkxBTl9JTlBVVGAgZmxhZ3MuIFRoaXMgbW9kaWZpZXMgY29yZSByb3V0aW5nIGxvb2t1cCBsb2dpYyB3aXRoaW4gQlBGIHByb2dyYW1zLCB3aGljaCBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgYnkgbG9hZGluZyBhbmQgZXhlY3V0aW5nIEJQRiBwcm9ncmFtcyAoWERQIG9yIFRDKS4gRnV6emluZyBpcyByZXF1aXJlZCB0byBlbnN1cmUgdGhlIG5ldyBWTEFOIHJlc29sdXRpb24gbG9naWMgYW5kIGl0cyBpbnRlcmFjdGlvbiB3aXRoIHRoZSBuZXR3b3JraW5nIHN0YWNrIGlzIHJvYnVzdC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLApldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXQKICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LAogICBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMzUzMzcxY2RhOWI3ZTljNzI3ZTg4YTBiOWY3ZGYxNWQ1MGZlZWI4ZQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBXZWQgSnVuIDI0IDAzOjI1OjUxIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oIGIvaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oCmluZGV4IDg5YjM2ZGU1ZmRiYjZkLi5kNDIxODk1NGM1MGY1MyAxMDA2NDQKLS0tIGEvaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaApAQCAtMzUzMiw2ICYjNDM7MzUzMiw0NSBAQCB1bmlvbiBicGZfYXR0ciB7CiAgKgkJCVVzZSB0aGUgbWFyayBwcmVzZW50IGluICpwYXJhbXMqLSZndDttYXJrIGZvciB0aGUgZmliIGxvb2t1cC4KICAqCQkJVGhpcyBvcHRpb24gc2hvdWxkIG5vdCBiZSB1c2VkIHdpdGggQlBGX0ZJQl9MT09LVVBfRElSRUNULAogICoJCQlhcyBpdCBvbmx5IGhhcyBtZWFuaW5nIGZvciBmdWxsIGxvb2t1cHMuCiYjNDM7ICoJCSoqQlBGX0ZJQl9MT09LVVBfVkxBTioqCiYjNDM7ICoJCQlJZiB0aGUgZmliIGxvb2t1cCByZXNvbHZlcyB0byBhIFZMQU4gZGV2aWNlIHdob3NlCiYjNDM7ICoJCQlwYXJlbnQgaXMgYSByZWFsIChub24tVkxBTikgZGV2aWNlLCBzZXQKJiM0MzsgKgkJCSpwYXJhbXMqLSZndDtoX3ZsYW5fcHJvdG8gYW5kICpwYXJhbXMqLSZndDtoX3ZsYW5fVENJIGZyb20KJiM0MzsgKgkJCXRoZSBWTEFOIGRldmljZSBhbmQgcmVwbGFjZSAqcGFyYW1zKi0mZ3Q7aWZpbmRleCB3aXRoIHRoZQomIzQzOyAqCQkJcGFyZW50JiMzOTtzIGlmaW5kZXguICpwYXJhbXMqLSZndDtoX3ZsYW5fVENJIGNhcnJpZXMgdGhlIFZJRAomIzQzOyAqCQkJb25seSwgd2l0aCBQQ1AgYW5kIERFSSBiaXRzIHplcm87IGEgY29uc3VtZXIgd2FudGluZyB0bwomIzQzOyAqCQkJc2V0IGVncmVzcyBwcmlvcml0eSB3cml0ZXMgUENQIGl0c2VsZi4gKnBhcmFtcyotJmd0O3NtYWMgaXMKJiM0MzsgKgkJCXRoZSBWTEFOIGRldmljZSYjMzk7cyBvd24gYWRkcmVzcywgd2hpY2ggY2FuIGRpZmZlciBmcm9tIHRoZQomIzQzOyAqCQkJcGFyZW50JiMzOTtzLiBPbmx5IHRoZSBpbW1lZGlhdGUgcGFyZW50IGlzIHJlc29sdmVkOyBpZiBpdAomIzQzOyAqCQkJaXMgaXRzZWxmIGEgVkxBTiBkZXZpY2UgKFFpblEpIG9yIGluIGFub3RoZXIgbmFtZXNwYWNlLAomIzQzOyAqCQkJdGhlIGVncmVzcyBjYW5ub3QgYmUgcmVkdWNlZCB0byBhIHBoeXNpY2FsIGRldmljZSBwbHVzCiYjNDM7ICoJCQlvbmUgdGFnIGFuZCB0aGUgbG9va3VwIHJldHVybnMKJiM0MzsgKgkJCSoqQlBGX0ZJQl9MS1VQX1JFVF9WTEFOX0ZBSUxVUkUqKiB3aXRoICpwYXJhbXMqLSZndDtpZmluZGV4CiYjNDM7ICoJCQlsZWZ0IGF0IHRoZSBpbnB1dC4gUmUtaXNzdWUgd2l0aG91dAomIzQzOyAqCQkJKipCUEZfRklCX0xPT0tVUF9WTEFOKiogdG8gb2J0YWluIHRoZSBWTEFOIGRldmljZSYjMzk7cyBvd24KJiM0MzsgKgkJCWlmaW5kZXguIFRoZSBzd2FwIGFuZCB0aGUgdmxhbiBmaWVsZHMKJiM0MzsgKgkJCWFyZSB3cml0dGVuIG9ubHkgb24gc3VjY2Vzczsgb3RoZXIgb3V0cHV0IGZpZWxkcyBrZWVwCiYjNDM7ICoJCQl0aGUgaGVscGVyJiMzOTtzIGV4aXN0aW5nIGJlaGF2aW91ciwgc28gYSBmcmFnLW5lZWRlZCByZXN1bHQKJiM0MzsgKgkJCXN0aWxsIHJlcG9ydHMgdGhlIHJvdXRlIG10dSBpbiAqcGFyYW1zKi0mZ3Q7bXR1X3Jlc3VsdC4KJiM0MzsgKgkJCVRoaXMgZmxhZyBpcyBvbmx5IHZhbGlkIGZvciBYRFAgcHJvZ3JhbXM7IHRjIHByb2dyYW1zCiYjNDM7ICoJCQlyZWNlaXZlIC1FSU5WQUwgc2luY2UgdGhleSBjYW4gcmVkaXJlY3QgdG8gdGhlIFZMQU4KJiM0MzsgKgkJCWRldmljZSBkaXJlY3RseS4KJiM0MzsgKgkJKipCUEZfRklCX0xPT0tVUF9WTEFOX0lOUFVUKioKJiM0MzsgKgkJCVRyZWF0ICpwYXJhbXMqLSZndDtoX3ZsYW5fcHJvdG8gYW5kICpwYXJhbXMqLSZndDtoX3ZsYW5fVENJCiYjNDM7ICoJCQlhcyBhbiBpbnB1dCBWTEFOIHRhZyBhbmQgcnVuIHRoZSBsb29rdXAgYXMgaWYgaW5ncmVzcwomIzQzOyAqCQkJaGFkIGhhcHBlbmVkIG9uIHRoZSBWTEFOIHN1YmludGVyZmFjZSBjYXJyeWluZyB0aGF0IHRhZwomIzQzOyAqCQkJb24gKnBhcmFtcyotJmd0O2lmaW5kZXguIFRoZSBWSUQgaXMgdGhlIGxvdyAxMiBiaXRzIG9mCiYjNDM7ICoJCQkqcGFyYW1zKi0mZ3Q7aF92bGFuX1RDSTsgKnBhcmFtcyotJmd0O2hfdmxhbl9wcm90byBtdXN0IGJlCiYjNDM7ICoJCQlFVEhfUF84MDIxUSBvciBFVEhfUF84MDIxQUQgaW4gbmV0d29yayBieXRlIG9yZGVyLCBlbHNlCiYjNDM7ICoJCQkqKi1FSU5WQUwqKi4gSWYgKnBhcmFtcyotJmd0O2lmaW5kZXggaXMgaXRzZWxmIGEgVkxBTgomIzQzOyAqCQkJZGV2aWNlLCBpdHMgaW5uZXIgKFFpblEpIHN1YmludGVyZmFjZSBpcyBtYXRjaGVkOyBmb3IgYQomIzQzOyAqCQkJYm9uZCBvciB0ZWFtLCBwYXNzIHRoZSBtYXN0ZXImIzM5O3MgaWZpbmRleC4gQW4gdW5tYXRjaGVkCiYjNDM7ICoJCQl0YWcsIGEgZG93biBkZXZpY2UsIG9yIG9uZSBpbiBhbm90aGVyIG5hbWVzcGFjZSByZXR1cm5zCiYjNDM7ICoJCQkqKkJQRl9GSUJfTEtVUF9SRVRfTk9UX0ZXREVEKiosIG1pcnJvcmluZyByZWFsIGluZ3Jlc3MuCiYjNDM7ICoJCQlBIFZJRCBvZiAwIGlzIGxvb2tlZCB1cCBsaXRlcmFsbHksIHNvIGRvIG5vdCBzZXQgdGhpcwomIzQzOyAqCQkJZmxhZyBmb3IgcHJpb3JpdHktdGFnZ2VkIGZyYW1lcy4gQ2Fubm90IGJlIGNvbWJpbmVkIHdpdGgKJiM0MzsgKgkJCSoqQlBGX0ZJQl9MT09LVVBfVEJJRCoqIG9yICoqQlBGX0ZJQl9MT09LVVBfT1VUUFVUKioKJiM0MzsgKgkJCShyZXR1cm5zICoqLUVJTlZBTCoqKS4KICAqCiAgKgkJKmN0eCogaXMgZWl0aGVyICoqc3RydWN0IHhkcF9tZCoqIGZvciBYRFAgcHJvZ3JhbXMgb3IKICAqCQkqKnN0cnVjdCBza19idWZmKiogdGMgY2xzX2FjdCBwcm9ncmFtcy4KQEAgLTczMjcsNiAmIzQzOzczNjYsOCBAQCBlbnVtIHsKIAlCUEZfRklCX0xPT0tVUF9UQklEICAgID0gKDFVICZsdDsmbHQ7IDMpLAogCUJQRl9GSUJfTE9PS1VQX1NSQyAgICAgPSAoMVUgJmx0OyZsdDsgNCksCiAJQlBGX0ZJQl9MT09LVVBfTUFSSyAgICA9ICgxVSAmbHQ7Jmx0OyA1KSwKJiM0MzsJQlBGX0ZJQl9MT09LVVBfVkxBTiAgICA9ICgxVSAmbHQ7Jmx0OyA2KSwKJiM0MzsJQlBGX0ZJQl9MT09LVVBfVkxBTl9JTlBVVCA9ICgxVSAmbHQ7Jmx0OyA3KSwKIH07CiAKIGVudW0gewpAQCAtNzM0MCw2ICYjNDM7NzM4MSw3IEBAIGVudW0gewogCUJQRl9GSUJfTEtVUF9SRVRfTk9fTkVJR0gsICAgICAvKiBubyBuZWlnaGJvciBlbnRyeSBmb3IgbmggKi8KIAlCUEZfRklCX0xLVVBfUkVUX0ZSQUdfTkVFREVELCAgLyogZnJhZ21lbnRhdGlvbiByZXF1aXJlZCB0byBmd2QgKi8KIAlCUEZfRklCX0xLVVBfUkVUX05PX1NSQ19BRERSLCAgLyogZmFpbGVkIHRvIGRlcml2ZSBJUCBzcmMgYWRkciAqLwomIzQzOwlCUEZfRklCX0xLVVBfUkVUX1ZMQU5fRkFJTFVSRSwgLyogVkxBTiBlZ3Jlc3MsIHBhcmVudCB1bnJlc29sdmFibGUgKi8KIH07CiAKIHN0cnVjdCBicGZfZmliX2xvb2t1cCB7CkBAIC03MzkzLDcgJiM0Mzs3NDM1LDEzIEBAIHN0cnVjdCBicGZfZmliX2xvb2t1cCB7CiAKIAl1bmlvbiB7CiAJCXN0cnVjdCB7Ci0JCQkvKiBvdXRwdXQgKi8KJiM0MzsJCQkvKgomIzQzOwkJCSAqIG91dHB1dCB3aXRoIEJQRl9GSUJfTE9PS1VQX1ZMQU46IHNldCBmcm9tIHRoZQomIzQzOwkJCSAqIHJlc29sdmVkIGVncmVzcyBWTEFOIGRldmljZSAoc2VlIHRoZSBmbGFnKTsgemVyb2VkCiYjNDM7CQkJICogb24gb3RoZXIgc3VjY2Vzc2Z1bCBsb29rdXBzLiBpbnB1dCB3aXRoCiYjNDM7CQkJICogQlBGX0ZJQl9MT09LVVBfVkxBTl9JTlBVVDogdGhlIFZMQU4gdGFnIHRvIHNjb3BlCiYjNDM7CQkJICogdGhlIGxvb2t1cCBieS4KJiM0MzsJCQkgKi8KIAkJCV9fYmUxNgloX3ZsYW5fcHJvdG87CiAJCQlfX2JlMTYJaF92bGFuX1RDSTsKIAkJfTsKZGlmZiAtLWdpdCBhL25ldC9jb3JlL2ZpbHRlci5jIGIvbmV0L2NvcmUvZmlsdGVyLmMKaW5kZXggMmU5NmI0Yjg0N2NlMTIuLjBlYTM2MmZhNDI4N2UzIDEwMDY0NAotLS0gYS9uZXQvY29yZS9maWx0ZXIuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvY29yZS9maWx0ZXIuYwpAQCAtNjIwMSwyMSAmIzQzOzYyMDEsNjAgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfc2tiX2dldF94ZnJtX3N0YXRlX3Byb3RvID0gewogI2VuZGlmCiAKICNpZiBJU19FTkFCTEVEKENPTkZJR19JTkVUKSB8fCBJU19FTkFCTEVEKENPTkZJR19JUFY2KQotc3RhdGljIGludCBicGZfZmliX3NldF9md2RfcGFyYW1zKHN0cnVjdCBicGZfZmliX2xvb2t1cCAqcGFyYW1zLCB1MzIgbXR1KQomIzQzO3N0YXRpYyBpbnQgYnBmX2ZpYl9zZXRfZndkX3BhcmFtcyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAomIzQzOwkJCQkgIHN0cnVjdCBicGZfZmliX2xvb2t1cCAqcGFyYW1zLAomIzQzOwkJCQkgIHUzMiBmbGFncywgdTMyIG10dSwgdTMyIGluX2lmaW5kZXgpCiB7CiAJcGFyYW1zLSZndDtoX3ZsYW5fVENJID0gMDsKIAlwYXJhbXMtJmd0O2hfdmxhbl9wcm90byA9IDA7CiYjNDM7CiYjNDM7I2lmIElTX0VOQUJMRUQoQ09ORklHX1ZMQU5fODAyMVEpCiYjNDM7CWlmICgoZmxhZ3MgJmFtcDsgQlBGX0ZJQl9MT09LVVBfVkxBTikgJmFtcDsmYW1wOyBpc192bGFuX2RldihkZXYpKSB7CiYjNDM7CQlzdHJ1Y3QgbmV0X2RldmljZSAqcmVhbF9kZXYgPSB2bGFuX2Rldl9wcml2KGRldiktJmd0O3JlYWxfZGV2OwomIzQzOwomIzQzOwkJaWYgKCFpc192bGFuX2RldihyZWFsX2RldikgJmFtcDsmYW1wOwomIzQzOwkJICAgIG5ldF9lcShkZXZfbmV0KHJlYWxfZGV2KSwgZGV2X25ldChkZXYpKSkgewomIzQzOwkJCXBhcmFtcy0mZ3Q7aF92bGFuX3Byb3RvID0gdmxhbl9kZXZfdmxhbl9wcm90byhkZXYpOwomIzQzOwkJCXBhcmFtcy0mZ3Q7aF92bGFuX1RDSSA9IGh0b25zKHZsYW5fZGV2X3ZsYW5faWQoZGV2KSk7CiYjNDM7CQkJcGFyYW1zLSZndDtpZmluZGV4ID0gcmVhbF9kZXYtJmd0O2lmaW5kZXg7CiYjNDM7CQl9IGVsc2UgewomIzQzOwkJCXBhcmFtcy0mZ3Q7aWZpbmRleCA9IGluX2lmaW5kZXg7CiYjNDM7CQkJcmV0dXJuIEJQRl9GSUJfTEtVUF9SRVRfVkxBTl9GQUlMVVJFOwomIzQzOwkJfQomIzQzOwl9CiYjNDM7I2VuZGlmCiYjNDM7CiAJaWYgKG10dSkKIAkJcGFyYW1zLSZndDttdHVfcmVzdWx0ID0gbXR1OyAvKiB1bmlvbiB3aXRoIHRvdF9sZW4gKi8KIAogCXJldHVybiAwOwogfQomIzQzOwomIzQzO3N0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZSAqYnBmX2ZpYl92bGFuX2lucHV0X2RldihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAomIzQzOwkJCQkJCSBjb25zdCBzdHJ1Y3QgYnBmX2ZpYl9sb29rdXAgKnBhcmFtcykKJiM0Mzt7CiYjNDM7CV9fYmUxNiBwcm90byA9IHBhcmFtcy0mZ3Q7aF92bGFuX3Byb3RvOwomIzQzOwlzdHJ1Y3QgbmV0X2RldmljZSAqdmxhbl9kZXY7CiYjNDM7CXUxNiB2aWQ7CiYjNDM7CiYjNDM7CWlmIChwcm90byAhPSBodG9ucyhFVEhfUF84MDIxUSkgJmFtcDsmYW1wOyBwcm90byAhPSBodG9ucyhFVEhfUF84MDIxQUQpKQomIzQzOwkJcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7CiYjNDM7CiYjNDM7CXZpZCA9IG50b2hzKHBhcmFtcy0mZ3Q7aF92bGFuX1RDSSkgJmFtcDsgVkxBTl9WSURfTUFTSzsKJiM0MzsJdmxhbl9kZXYgPSBfX3ZsYW5fZmluZF9kZXZfZGVlcF9yY3UoZGV2LCBwcm90bywgdmlkKTsKJiM0MzsJaWYgKCF2bGFuX2RldiB8fCAhKHZsYW5fZGV2LSZndDtmbGFncyAmYW1wOyBJRkZfVVApIHx8CiYjNDM7CSAgICAhbmV0X2VxKGRldl9uZXQodmxhbl9kZXYpLCBkZXZfbmV0KGRldikpKQomIzQzOwkJcmV0dXJuIE5VTEw7CiYjNDM7CiYjNDM7CXJldHVybiB2bGFuX2RldjsKJiM0Mzt9CiAjZW5kaWYKIAogI2lmIElTX0VOQUJMRUQoQ09ORklHX0lORVQpCiBzdGF0aWMgaW50IGJwZl9pcHY0X2ZpYl9sb29rdXAoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgYnBmX2ZpYl9sb29rdXAgKnBhcmFtcywKIAkJCSAgICAgICB1MzIgZmxhZ3MsIGJvb2wgY2hlY2tfbXR1KQogewomIzQzOwl1MzIgaW5faWZpbmRleCA9IHBhcmFtcy0mZ3Q7aWZpbmRleDsKIAlzdHJ1Y3QgbmVpZ2hib3VyICpuZWlnaCA9IE5VTEw7CiAJc3RydWN0IGZpYl9uaF9jb21tb24gKm5oYzsKIAlzdHJ1Y3QgaW5fZGV2aWNlICppbl9kZXY7CkBAIC02MjI5LDYgJiM0Mzs2MjY4LDE0IEBAIHN0YXRpYyBpbnQgYnBmX2lwdjRfZmliX2xvb2t1cChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBicGZfZmliX2xvb2t1cCAqcGFyYW1zLAogCWlmICh1bmxpa2VseSghZGV2KSkKIAkJcmV0dXJuIC1FTk9ERVY7CiAKJiM0MzsJaWYgKGZsYWdzICZhbXA7IEJQRl9GSUJfTE9PS1VQX1ZMQU5fSU5QVVQpIHsKJiM0MzsJCWRldiA9IGJwZl9maWJfdmxhbl9pbnB1dF9kZXYoZGV2LCBwYXJhbXMpOwomIzQzOwkJaWYgKElTX0VSUihkZXYpKQomIzQzOwkJCXJldHVybiBQVFJfRVJSKGRldik7CiYjNDM7CQlpZiAoIWRldikKJiM0MzsJCQlyZXR1cm4gQlBGX0ZJQl9MS1VQX1JFVF9OT1RfRldERUQ7CiYjNDM7CX0KJiM0MzsKIAkvKiB2ZXJpZnkgZm9yd2FyZGluZyBpcyBlbmFibGVkIG9uIHRoaXMgaW50ZXJmYWNlICovCiAJaW5fZGV2ID0gX19pbl9kZXZfZ2V0X3JjdShkZXYpOwogCWlmICh1bmxpa2VseSghaW5fZGV2IHx8ICFJTl9ERVZfRk9SV0FSRChpbl9kZXYpKSkKQEAgLTYyMzgsNyAmIzQzOzYyODUsMTEgQEAgc3RhdGljIGludCBicGZfaXB2NF9maWJfbG9va3VwKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGJwZl9maWJfbG9va3VwICpwYXJhbXMsCiAJCWZsNC5mbG93aTRfaWlmID0gMTsKIAkJZmw0LmZsb3dpNF9vaWYgPSBwYXJhbXMtJmd0O2lmaW5kZXg7CiAJfSBlbHNlIHsKLQkJZmw0LmZsb3dpNF9paWYgPSBwYXJhbXMtJmd0O2lmaW5kZXg7CiYjNDM7CQkvKgomIzQzOwkJICogZGV2LSZndDtpZmluZGV4LCBub3QgcGFyYW1zLSZndDtpZmluZGV4OiBWTEFOX0lOUFVUIG1heSBoYXZlCiYjNDM7CQkgKiByZXNvbHZlZCBkZXYgdG8gYSBzdWJpbnRlcmZhY2UgYWJvdmUuCiYjNDM7CQkgKi8KJiM0MzsJCWZsNC5mbG93aTRfaWlmID0gZGV2LSZndDtpZmluZGV4OwogCQlmbDQuZmxvd2k0X29pZiA9IDA7CiAJfQogCWZsNC5mbG93aTRfZHNjcCA9IGluZXRfZHNmaWVsZF90b19kc2NwKHBhcmFtcy0mZ3Q7dG9zKTsKQEAgLTYzNDcsNyAmIzQzOzYzOTgsNyBAQCBzdGF0aWMgaW50IGJwZl9pcHY0X2ZpYl9sb29rdXAoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgYnBmX2ZpYl9sb29rdXAgKnBhcmFtcywKIAltZW1jcHkocGFyYW1zLSZndDtzbWFjLCBkZXYtJmd0O2Rldl9hZGRyLCBFVEhfQUxFTik7CiAKIHNldF9md2RfcGFyYW1zOgotCXJldHVybiBicGZfZmliX3NldF9md2RfcGFyYW1zKHBhcmFtcywgbXR1KTsKJiM0MzsJcmV0dXJuIGJwZl9maWJfc2V0X2Z3ZF9wYXJhbXMoZGV2LCBwYXJhbXMsIGZsYWdzLCBtdHUsIGluX2lmaW5kZXgpOwogfQogI2VuZGlmCiAKQEAgLTYzNTcsNiAmIzQzOzY0MDgsNyBAQCBzdGF0aWMgaW50IGJwZl9pcHY2X2ZpYl9sb29rdXAoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgYnBmX2ZpYl9sb29rdXAgKnBhcmFtcywKIHsKIAlzdHJ1Y3QgaW42X2FkZHIgKnNyYyA9IChzdHJ1Y3QgaW42X2FkZHIgKikgcGFyYW1zLSZndDtpcHY2X3NyYzsKIAlzdHJ1Y3QgaW42X2FkZHIgKmRzdCA9IChzdHJ1Y3QgaW42X2FkZHIgKikgcGFyYW1zLSZndDtpcHY2X2RzdDsKJiM0MzsJdTMyIGluX2lmaW5kZXggPSBwYXJhbXMtJmd0O2lmaW5kZXg7CiAJc3RydWN0IGZpYjZfcmVzdWx0IHJlcyA9IHt9OwogCXN0cnVjdCBuZWlnaGJvdXIgKm5laWdoOwogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7CkBAIC02Mzc0LDYgJiM0Mzs2NDI2LDE0IEBAIHN0YXRpYyBpbnQgYnBmX2lwdjZfZmliX2xvb2t1cChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBicGZfZmliX2xvb2t1cCAqcGFyYW1zLAogCWlmICh1bmxpa2VseSghZGV2KSkKIAkJcmV0dXJuIC1FTk9ERVY7CiAKJiM0MzsJaWYgKGZsYWdzICZhbXA7IEJQRl9GSUJfTE9PS1VQX1ZMQU5fSU5QVVQpIHsKJiM0MzsJCWRldiA9IGJwZl9maWJfdmxhbl9pbnB1dF9kZXYoZGV2LCBwYXJhbXMpOwomIzQzOwkJaWYgKElTX0VSUihkZXYpKQomIzQzOwkJCXJldHVybiBQVFJfRVJSKGRldik7CiYjNDM7CQlpZiAoIWRldikKJiM0MzsJCQlyZXR1cm4gQlBGX0ZJQl9MS1VQX1JFVF9OT1RfRldERUQ7CiYjNDM7CX0KJiM0MzsKIAlpZGV2ID0gX19pbjZfZGV2X2dldF9zYWZlbHkoZGV2KTsKIAlpZiAodW5saWtlbHkoIWlkZXYgfHwgIVJFQURfT05DRShpZGV2LSZndDtjbmYuZm9yd2FyZGluZykpKQogCQlyZXR1cm4gQlBGX0ZJQl9MS1VQX1JFVF9GV0RfRElTQUJMRUQ7CkBAIC02MzgyLDcgJiM0Mzs2NDQyLDEyIEBAIHN0YXRpYyBpbnQgYnBmX2lwdjZfZmliX2xvb2t1cChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBicGZfZmliX2xvb2t1cCAqcGFyYW1zLAogCQlmbDYuZmxvd2k2X2lpZiA9IDE7CiAJCW9pZiA9IGZsNi5mbG93aTZfb2lmID0gcGFyYW1zLSZndDtpZmluZGV4OwogCX0gZWxzZSB7Ci0JCW9pZiA9IGZsNi5mbG93aTZfaWlmID0gcGFyYW1zLSZndDtpZmluZGV4OwomIzQzOwkJLyoKJiM0MzsJCSAqIGRldi0mZ3Q7aWZpbmRleCwgbm90IHBhcmFtcy0mZ3Q7aWZpbmRleDogVkxBTl9JTlBVVCBtYXkgaGF2ZQomIzQzOwkJICogcmVzb2x2ZWQgZGV2IHRvIGEgc3ViaW50ZXJmYWNlIGFib3ZlLgomIzQzOwkJICovCiYjNDM7CQlvaWYgPSBkZXYtJmd0O2lmaW5kZXg7CiYjNDM7CQlmbDYuZmxvd2k2X2lpZiA9IG9pZjsKIAkJZmw2LmZsb3dpNl9vaWYgPSAwOwogCQlzdHJpY3QgPSBSVDZfTE9PS1VQX0ZfSEFTX1NBRERSOwogCX0KQEAgLTY0ODYsMTMgJiM0Mzs2NTUxLDI2IEBAIHN0YXRpYyBpbnQgYnBmX2lwdjZfZmliX2xvb2t1cChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBicGZfZmliX2xvb2t1cCAqcGFyYW1zLAogCW1lbWNweShwYXJhbXMtJmd0O3NtYWMsIGRldi0mZ3Q7ZGV2X2FkZHIsIEVUSF9BTEVOKTsKIAogc2V0X2Z3ZF9wYXJhbXM6Ci0JcmV0dXJuIGJwZl9maWJfc2V0X2Z3ZF9wYXJhbXMocGFyYW1zLCBtdHUpOwomIzQzOwlyZXR1cm4gYnBmX2ZpYl9zZXRfZndkX3BhcmFtcyhkZXYsIHBhcmFtcywgZmxhZ3MsIG10dSwgaW5faWZpbmRleCk7CiB9CiAjZW5kaWYKIAogI2RlZmluZSBCUEZfRklCX0xPT0tVUF9NQVNLIChCUEZfRklCX0xPT0tVUF9ESVJFQ1QgfCBCUEZfRklCX0xPT0tVUF9PVVRQVVQgfCBcCiAJCQkgICAgIEJQRl9GSUJfTE9PS1VQX1NLSVBfTkVJR0ggfCBCUEZfRklCX0xPT0tVUF9UQklEIHwgXAotCQkJICAgICBCUEZfRklCX0xPT0tVUF9TUkMgfCBCUEZfRklCX0xPT0tVUF9NQVJLKQomIzQzOwkJCSAgICAgQlBGX0ZJQl9MT09LVVBfU1JDIHwgQlBGX0ZJQl9MT09LVVBfTUFSSyB8IFwKJiM0MzsJCQkgICAgIEJQRl9GSUJfTE9PS1VQX1ZMQU4gfCBCUEZfRklCX0xPT0tVUF9WTEFOX0lOUFVUKQomIzQzOwomIzQzO3N0YXRpYyBib29sIGJwZl9maWJfbG9va3VwX2ZsYWdzX29rKHUzMiBmbGFncykKJiM0Mzt7CiYjNDM7CWlmIChmbGFncyAmYW1wOyB+QlBGX0ZJQl9MT09LVVBfTUFTSykKJiM0MzsJCXJldHVybiBmYWxzZTsKJiM0MzsKJiM0MzsJaWYgKChmbGFncyAmYW1wOyBCUEZfRklCX0xPT0tVUF9WTEFOX0lOUFVUKSAmYW1wOyZhbXA7CiYjNDM7CSAgICAoZmxhZ3MgJmFtcDsgKEJQRl9GSUJfTE9PS1VQX1RCSUQgfCBCUEZfRklCX0xPT0tVUF9PVVRQVVQpKSkKJiM0MzsJCXJldHVybiBmYWxzZTsKJiM0MzsKJiM0MzsJcmV0dXJuIHRydWU7CiYjNDM7fQogCiBCUEZfQ0FMTF80KGJwZl94ZHBfZmliX2xvb2t1cCwgc3RydWN0IHhkcF9idWZmICosIGN0eCwKIAkgICBzdHJ1Y3QgYnBmX2ZpYl9sb29rdXAgKiwgcGFyYW1zLCBpbnQsIHBsZW4sIHUzMiwgZmxhZ3MpCkBAIC02NTAwLDcgJiM0Mzs2NTc4LDcgQEAgQlBGX0NBTExfNChicGZfeGRwX2ZpYl9sb29rdXAsIHN0cnVjdCB4ZHBfYnVmZiAqLCBjdHgsCiAJaWYgKHBsZW4gJmx0OyBzaXplb2YoKnBhcmFtcykpCiAJCXJldHVybiAtRUlOVkFMOwogCi0JaWYgKGZsYWdzICZhbXA7IH5CUEZfRklCX0xPT0tVUF9NQVNLKQomIzQzOwlpZiAoIWJwZl9maWJfbG9va3VwX2ZsYWdzX29rKGZsYWdzKSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAlzd2l0Y2ggKHBhcmFtcy0mZ3Q7ZmFtaWx5KSB7CkBAIC02NTM4LDcgJiM0Mzs2NjE2LDEwIEBAIEJQRl9DQUxMXzQoYnBmX3NrYl9maWJfbG9va3VwLCBzdHJ1Y3Qgc2tfYnVmZiAqLCBza2IsCiAJaWYgKHBsZW4gJmx0OyBzaXplb2YoKnBhcmFtcykpCiAJCXJldHVybiAtRUlOVkFMOwogCi0JaWYgKGZsYWdzICZhbXA7IH5CUEZfRklCX0xPT0tVUF9NQVNLKQomIzQzOwlpZiAoIWJwZl9maWJfbG9va3VwX2ZsYWdzX29rKGZsYWdzKSkKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwomIzQzOwlpZiAoZmxhZ3MgJmFtcDsgQlBGX0ZJQl9MT09LVVBfVkxBTikKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAlpZiAocGFyYW1zLSZndDt0b3RfbGVuKQpkaWZmIC0tZ2l0IGEvdG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oIGIvdG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oCmluZGV4IDg5YjM2ZGU1ZmRiYjZkLi5kNDIxODk1NGM1MGY1MyAxMDA2NDQKLS0tIGEvdG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaApAQCAtMzUzMiw2ICYjNDM7MzUzMiw0NSBAQCB1bmlvbiBicGZfYXR0ciB7CiAgKgkJCVVzZSB0aGUgbWFyayBwcmVzZW50IGluICpwYXJhbXMqLSZndDttYXJrIGZvciB0aGUgZmliIGxvb2t1cC4KICAqCQkJVGhpcyBvcHRpb24gc2hvdWxkIG5vdCBiZSB1c2VkIHdpdGggQlBGX0ZJQl9MT09LVVBfRElSRUNULAogICoJCQlhcyBpdCBvbmx5IGhhcyBtZWFuaW5nIGZvciBmdWxsIGxvb2t1cHMuCiYjNDM7ICoJCSoqQlBGX0ZJQl9MT09LVVBfVkxBTioqCiYjNDM7ICoJCQlJZiB0aGUgZmliIGxvb2t1cCByZXNvbHZlcyB0byBhIFZMQU4gZGV2aWNlIHdob3NlCiYjNDM7ICoJCQlwYXJlbnQgaXMgYSByZWFsIChub24tVkxBTikgZGV2aWNlLCBzZXQKJiM0MzsgKgkJCSpwYXJhbXMqLSZndDtoX3ZsYW5fcHJvdG8gYW5kICpwYXJhbXMqLSZndDtoX3ZsYW5fVENJIGZyb20KJiM0MzsgKgkJCXRoZSBWTEFOIGRldmljZSBhbmQgcmVwbGFjZSAqcGFyYW1zKi0mZ3Q7aWZpbmRleCB3aXRoIHRoZQomIzQzOyAqCQkJcGFyZW50JiMzOTtzIGlmaW5kZXguICpwYXJhbXMqLSZndDtoX3ZsYW5fVENJIGNhcnJpZXMgdGhlIFZJRAomIzQzOyAqCQkJb25seSwgd2l0aCBQQ1AgYW5kIERFSSBiaXRzIHplcm87IGEgY29uc3VtZXIgd2FudGluZyB0bwomIzQzOyAqCQkJc2V0IGVncmVzcyBwcmlvcml0eSB3cml0ZXMgUENQIGl0c2VsZi4gKnBhcmFtcyotJmd0O3NtYWMgaXMKJiM0MzsgKgkJCXRoZSBWTEFOIGRldmljZSYjMzk7cyBvd24gYWRkcmVzcywgd2hpY2ggY2FuIGRpZmZlciBmcm9tIHRoZQomIzQzOyAqCQkJcGFyZW50JiMzOTtzLiBPbmx5IHRoZSBpbW1lZGlhdGUgcGFyZW50IGlzIHJlc29sdmVkOyBpZiBpdAomIzQzOyAqCQkJaXMgaXRzZWxmIGEgVkxBTiBkZXZpY2UgKFFpblEpIG9yIGluIGFub3RoZXIgbmFtZXNwYWNlLAomIzQzOyAqCQkJdGhlIGVncmVzcyBjYW5ub3QgYmUgcmVkdWNlZCB0byBhIHBoeXNpY2FsIGRldmljZSBwbHVzCiYjNDM7ICoJCQlvbmUgdGFnIGFuZCB0aGUgbG9va3VwIHJldHVybnMKJiM0MzsgKgkJCSoqQlBGX0ZJQl9MS1VQX1JFVF9WTEFOX0ZBSUxVUkUqKiB3aXRoICpwYXJhbXMqLSZndDtpZmluZGV4CiYjNDM7ICoJCQlsZWZ0IGF0IHRoZSBpbnB1dC4gUmUtaXNzdWUgd2l0aG91dAomIzQzOyAqCQkJKipCUEZfRklCX0xPT0tVUF9WTEFOKiogdG8gb2J0YWluIHRoZSBWTEFOIGRldmljZSYjMzk7cyBvd24KJiM0MzsgKgkJCWlmaW5kZXguIFRoZSBzd2FwIGFuZCB0aGUgdmxhbiBmaWVsZHMKJiM0MzsgKgkJCWFyZSB3cml0dGVuIG9ubHkgb24gc3VjY2Vzczsgb3RoZXIgb3V0cHV0IGZpZWxkcyBrZWVwCiYjNDM7ICoJCQl0aGUgaGVscGVyJiMzOTtzIGV4aXN0aW5nIGJlaGF2aW91ciwgc28gYSBmcmFnLW5lZWRlZCByZXN1bHQKJiM0MzsgKgkJCXN0aWxsIHJlcG9ydHMgdGhlIHJvdXRlIG10dSBpbiAqcGFyYW1zKi0mZ3Q7bXR1X3Jlc3VsdC4KJiM0MzsgKgkJCVRoaXMgZmxhZyBpcyBvbmx5IHZhbGlkIGZvciBYRFAgcHJvZ3JhbXM7IHRjIHByb2dyYW1zCiYjNDM7ICoJCQlyZWNlaXZlIC1FSU5WQUwgc2luY2UgdGhleSBjYW4gcmVkaXJlY3QgdG8gdGhlIFZMQU4KJiM0MzsgKgkJCWRldmljZSBkaXJlY3RseS4KJiM0MzsgKgkJKipCUEZfRklCX0xPT0tVUF9WTEFOX0lOUFVUKioKJiM0MzsgKgkJCVRyZWF0ICpwYXJhbXMqLSZndDtoX3ZsYW5fcHJvdG8gYW5kICpwYXJhbXMqLSZndDtoX3ZsYW5fVENJCiYjNDM7ICoJCQlhcyBhbiBpbnB1dCBWTEFOIHRhZyBhbmQgcnVuIHRoZSBsb29rdXAgYXMgaWYgaW5ncmVzcwomIzQzOyAqCQkJaGFkIGhhcHBlbmVkIG9uIHRoZSBWTEFOIHN1YmludGVyZmFjZSBjYXJyeWluZyB0aGF0IHRhZwomIzQzOyAqCQkJb24gKnBhcmFtcyotJmd0O2lmaW5kZXguIFRoZSBWSUQgaXMgdGhlIGxvdyAxMiBiaXRzIG9mCiYjNDM7ICoJCQkqcGFyYW1zKi0mZ3Q7aF92bGFuX1RDSTsgKnBhcmFtcyotJmd0O2hfdmxhbl9wcm90byBtdXN0IGJlCiYjNDM7ICoJCQlFVEhfUF84MDIxUSBvciBFVEhfUF84MDIxQUQgaW4gbmV0d29yayBieXRlIG9yZGVyLCBlbHNlCiYjNDM7ICoJCQkqKi1FSU5WQUwqKi4gSWYgKnBhcmFtcyotJmd0O2lmaW5kZXggaXMgaXRzZWxmIGEgVkxBTgomIzQzOyAqCQkJZGV2aWNlLCBpdHMgaW5uZXIgKFFpblEpIHN1YmludGVyZmFjZSBpcyBtYXRjaGVkOyBmb3IgYQomIzQzOyAqCQkJYm9uZCBvciB0ZWFtLCBwYXNzIHRoZSBtYXN0ZXImIzM5O3MgaWZpbmRleC4gQW4gdW5tYXRjaGVkCiYjNDM7ICoJCQl0YWcsIGEgZG93biBkZXZpY2UsIG9yIG9uZSBpbiBhbm90aGVyIG5hbWVzcGFjZSByZXR1cm5zCiYjNDM7ICoJCQkqKkJQRl9GSUJfTEtVUF9SRVRfTk9UX0ZXREVEKiosIG1pcnJvcmluZyByZWFsIGluZ3Jlc3MuCiYjNDM7ICoJCQlBIFZJRCBvZiAwIGlzIGxvb2tlZCB1cCBsaXRlcmFsbHksIHNvIGRvIG5vdCBzZXQgdGhpcwomIzQzOyAqCQkJZmxhZyBmb3IgcHJpb3JpdHktdGFnZ2VkIGZyYW1lcy4gQ2Fubm90IGJlIGNvbWJpbmVkIHdpdGgKJiM0MzsgKgkJCSoqQlBGX0ZJQl9MT09LVVBfVEJJRCoqIG9yICoqQlBGX0ZJQl9MT09LVVBfT1VUUFVUKioKJiM0MzsgKgkJCShyZXR1cm5zICoqLUVJTlZBTCoqKS4KICAqCiAgKgkJKmN0eCogaXMgZWl0aGVyICoqc3RydWN0IHhkcF9tZCoqIGZvciBYRFAgcHJvZ3JhbXMgb3IKICAqCQkqKnN0cnVjdCBza19idWZmKiogdGMgY2xzX2FjdCBwcm9ncmFtcy4KQEAgLTczMjcsNiAmIzQzOzczNjYsOCBAQCBlbnVtIHsKIAlCUEZfRklCX0xPT0tVUF9UQklEICAgID0gKDFVICZsdDsmbHQ7IDMpLAogCUJQRl9GSUJfTE9PS1VQX1NSQyAgICAgPSAoMVUgJmx0OyZsdDsgNCksCiAJQlBGX0ZJQl9MT09LVVBfTUFSSyAgICA9ICgxVSAmbHQ7Jmx0OyA1KSwKJiM0MzsJQlBGX0ZJQl9MT09LVVBfVkxBTiAgICA9ICgxVSAmbHQ7Jmx0OyA2KSwKJiM0MzsJQlBGX0ZJQl9MT09LVVBfVkxBTl9JTlBVVCA9ICgxVSAmbHQ7Jmx0OyA3KSwKIH07CiAKIGVudW0gewpAQCAtNzM0MCw2ICYjNDM7NzM4MSw3IEBAIGVudW0gewogCUJQRl9GSUJfTEtVUF9SRVRfTk9fTkVJR0gsICAgICAvKiBubyBuZWlnaGJvciBlbnRyeSBmb3IgbmggKi8KIAlCUEZfRklCX0xLVVBfUkVUX0ZSQUdfTkVFREVELCAgLyogZnJhZ21lbnRhdGlvbiByZXF1aXJlZCB0byBmd2QgKi8KIAlCUEZfRklCX0xLVVBfUkVUX05PX1NSQ19BRERSLCAgLyogZmFpbGVkIHRvIGRlcml2ZSBJUCBzcmMgYWRkciAqLwomIzQzOwlCUEZfRklCX0xLVVBfUkVUX1ZMQU5fRkFJTFVSRSwgLyogVkxBTiBlZ3Jlc3MsIHBhcmVudCB1bnJlc29sdmFibGUgKi8KIH07CiAKIHN0cnVjdCBicGZfZmliX2xvb2t1cCB7CkBAIC03MzkzLDcgJiM0Mzs3NDM1LDEzIEBAIHN0cnVjdCBicGZfZmliX2xvb2t1cCB7CiAKIAl1bmlvbiB7CiAJCXN0cnVjdCB7Ci0JCQkvKiBvdXRwdXQgKi8KJiM0MzsJCQkvKgomIzQzOwkJCSAqIG91dHB1dCB3aXRoIEJQRl9GSUJfTE9PS1VQX1ZMQU46IHNldCBmcm9tIHRoZQomIzQzOwkJCSAqIHJlc29sdmVkIGVncmVzcyBWTEFOIGRldmljZSAoc2VlIHRoZSBmbGFnKTsgemVyb2VkCiYjNDM7CQkJICogb24gb3RoZXIgc3VjY2Vzc2Z1bCBsb29rdXBzLiBpbnB1dCB3aXRoCiYjNDM7CQkJICogQlBGX0ZJQl9MT09LVVBfVkxBTl9JTlBVVDogdGhlIFZMQU4gdGFnIHRvIHNjb3BlCiYjNDM7CQkJICogdGhlIGxvb2t1cCBieS4KJiM0MzsJCQkgKi8KIAkJCV9fYmUxNgloX3ZsYW5fcHJvdG87CiAJCQlfX2JlMTYJaF92bGFuX1RDSTsKIAkJfTsKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2ZpYl9sb29rdXAuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2ZpYl9sb29rdXAuYwppbmRleCBiZDc2NTg5NTgwMDQxZi4uOGNhZWQ5ZDQzYjk4MTEgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2ZpYl9sb29rdXAuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9maWJfbG9va3VwLmMKQEAgLTIsNiAmIzQzOzIsNyBAQAogLyogQ29weXJpZ2h0IChjKSAyMDIzIE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLiAqLwogCiAjaW5jbHVkZSAmbHQ7bGludXgvcnRuZXRsaW5rLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2lmX2V0aGVyLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7c3lzL3R5cGVzLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bmV0L2lmLmgmZ3Q7CiAKQEAgLTIzLDYgJiM0MzsyNCw3IEBACiAjZGVmaW5lIElQVjRfVEJJRF9BRERSCQkmIzM0OzE3Mi4wLjAuMjU0JiMzNDsKICNkZWZpbmUgSVBWNF9UQklEX05FVAkJJiMzNDsxNzIuMC4wLjAmIzM0OwogI2RlZmluZSBJUFY0X1RCSURfRFNUCQkmIzM0OzE3Mi4wLjAuMiYjMzQ7CiYjNDM7I2RlZmluZSBJUFY0X1RCSURfTk9ORUlHSF9EU1QJJiMzNDsxNzIuMC4wLjUmIzM0OwogI2RlZmluZSBJUFY2X1RCSURfQUREUgkJJiMzNDtmZDAwOjpGRkZGJiMzNDsKICNkZWZpbmUgSVBWNl9UQklEX05FVAkJJiMzNDtmZDAwOjomIzM0OwogI2RlZmluZSBJUFY2X1RCSURfRFNUCQkmIzM0O2ZkMDA6OjImIzM0OwpAQCAtMzcsNiAmIzQzOzM5LDQxIEBACiAjZGVmaW5lIElQVjZfTE9DQUwJCSYjMzQ7ZmQwMTo6MyYjMzQ7CiAjZGVmaW5lIElQVjZfR1cxCQkmIzM0O2ZkMDE6OjEmIzM0OwogI2RlZmluZSBJUFY2X0dXMgkJJiMzNDtmZDAxOjoyJiMzNDsKJiM0MzsjZGVmaW5lIFZMQU5fSUQJCQkxMDAKJiM0MzsjZGVmaW5lIFZMQU5fSUZBQ0UJCSYjMzQ7dmV0aDEuMTAwJiMzNDsKJiM0MzsjZGVmaW5lIFZMQU5fSURfRE9XTgkJMTAyCiYjNDM7I2RlZmluZSBWTEFOX0lGQUNFX0RPV04JCSYjMzQ7dmV0aDEuMTAyJiMzNDsKJiM0MzsjZGVmaW5lIFFJTlFfT1VURVJfSUZBQ0UJJiMzNDt2ZXRoMS4yMDAmIzM0OwomIzQzOyNkZWZpbmUgUUlOUV9JTk5FUl9JRkFDRQkmIzM0O3ZldGgxLjIwMC4zMDAmIzM0OwomIzQzOyNkZWZpbmUgVkxBTl9UQUJMRQkJJiMzNDszMDAmIzM0OwomIzQzOyNkZWZpbmUgSVBWNF9WTEFOX0lGQUNFX0FERFIJJiMzNDsxMC41LjAuMjU0JiMzNDsKJiM0MzsjZGVmaW5lIElQVjRfVkxBTl9FR1JFU1NfRFNUCSYjMzQ7MTAuNS4wLjImIzM0OwomIzQzOyNkZWZpbmUgSVBWNF9RSU5RX0RTVAkJJiMzNDsxMC43LjAuMiYjMzQ7CiYjNDM7I2RlZmluZSBJUFY0X1ZMQU5fRFNUCQkmIzM0OzEwLjYuMC4yJiMzNDsKJiM0MzsjZGVmaW5lIElQVjRfVkxBTl9HVwkJJiMzNDsxMC41LjAuMSYjMzQ7CiYjNDM7I2RlZmluZSBJUFY2X1ZMQU5fSUZBQ0VfQUREUgkmIzM0O2ZkMDI6OjI1NCYjMzQ7CiYjNDM7I2RlZmluZSBJUFY2X1ZMQU5fRUdSRVNTX0RTVAkmIzM0O2ZkMDI6OjImIzM0OwomIzQzOyNkZWZpbmUgSVBWNl9WTEFOX0RTVAkJJiMzNDtmZDAzOjoyJiMzNDsKJiM0MzsjZGVmaW5lIElQVjZfVkxBTl9HVwkJJiMzNDtmZDAyOjoxJiMzNDsKJiM0MzsjZGVmaW5lIFZMQU5fVklEX1VOVVNFRAkJOTk5CiYjNDM7I2RlZmluZSBWUkZfSUZBQ0UJCSYjMzQ7dnJmLWJsdWUmIzM0OwomIzQzOyNkZWZpbmUgVlJGX1RBQkxFCQkmIzM0OzEwMDAmIzM0OwomIzQzOyNkZWZpbmUgVlJGX1ZMQU5fSUQJCTEwMQomIzQzOyNkZWZpbmUgVlJGX1ZMQU5fSUZBQ0UJCSYjMzQ7dmV0aDEuMTAxJiMzNDsKJiM0MzsjZGVmaW5lIElQVjRfVlJGX0lGQUNFX0FERFIJJiMzNDsxMC44LjAuMjU0JiMzNDsKJiM0MzsjZGVmaW5lIElQVjRfVlJGX0dXCQkmIzM0OzEwLjguMC4xJiMzNDsKJiM0MzsjZGVmaW5lIElQVjRfVlJGX0RTVAkJJiMzNDsxMC45LjAuMiYjMzQ7CiYjNDM7I2RlZmluZSBUQklEX1ZMQU5fSUQJCTUwCiYjNDM7I2RlZmluZSBUQklEX1ZMQU5fSUZBQ0UJCSYjMzQ7dmV0aDIuNTAmIzM0OwomIzQzOyNkZWZpbmUgSVBWNF9UQklEX1ZMQU5fRFNUCSYjMzQ7MTcyLjIuMC4yJiMzNDsKJiM0MzsjZGVmaW5lIElQVjRfQk9ORF9WTEFOX0RTVAkmIzM0OzEwLjExLjAuMiYjMzQ7CiYjNDM7I2RlZmluZSBJUFY0X1ZMQU5fTVRVX0RTVAkmIzM0OzEwLjUuOS4yJiMzNDsKJiM0MzsjZGVmaW5lIFFJTlFfQURfVkxBTl9JRAkJMjAwCiYjNDM7I2RlZmluZSBRSU5RX0lOTkVSX1ZMQU5fSUQJMzAwCiYjNDM7I2RlZmluZSBCT05EX0lGQUNFCQkmIzM0O2JvbmQ5OSYjMzQ7CiYjNDM7I2RlZmluZSBCT05EX1BPUlQJCSYjMzQ7dmV0aDMmIzM0OwomIzQzOyNkZWZpbmUgQk9ORF9QT1JUX1BFRVIJCSYjMzQ7dmV0aDQmIzM0OwomIzQzOyNkZWZpbmUgQk9ORF9WTEFOX0lECQk1MDAKICNkZWZpbmUgRE1BQwkJCSYjMzQ7MTE6MTE6MTE6MTE6MTE6MTEmIzM0OwogI2RlZmluZSBETUFDX0lOSVQgeyAweDExLCAweDExLCAweDExLCAweDExLCAweDExLCAweDExLCB9CiAjZGVmaW5lIERNQUMyCQkJJiMzNDswMTowMTowMTowMTowMTowMSYjMzQ7CkBAIC01Miw2ICYjNDM7ODksMTcgQEAgc3RydWN0IGZpYl9sb29rdXBfdGVzdCB7CiAJX191MzIgdGJpZDsKIAlfX3U4IGRtYWNbNl07CiAJX191MzIgbWFyazsKJiM0MzsJLyoKJiM0MzsJICogaW5wdXQgdGFnIHdpdGggQlBGX0ZJQl9MT09LVVBfVkxBTl9JTlBVVDsgZXhwZWN0ZWQgb3V0cHV0IHRhZwomIzQzOwkgKiB3aXRoIEJQRl9GSUJfTE9PS1VQX1ZMQU4gKGNoZWNrZWQgd2hlbiBjaGVja192bGFuIGlzIHNldCkKJiM0MzsJICovCiYjNDM7CV9fdTE2IHZsYW5fcHJvdG87CiYjNDM7CV9fdTE2IHZsYW5faWQ7CiYjNDM7CWJvb2wgY2hlY2tfdmxhbjsKJiM0MzsJY29uc3QgY2hhciAqZXhwZWN0ZWRfZGV2OyAvKiBleHBlY3RlZCBwYXJhbXMtJmd0O2lmaW5kZXggYWZ0ZXIgbG9va3VwICovCiYjNDM7CWNvbnN0IGNoYXIgKmlpZjsJICAvKiBvdmVycmlkZSB0aGUgZGVmYXVsdCB2ZXRoMSBpbnB1dCBkZXZpY2UgKi8KJiM0MzsJX191MTYgdG90X2xlbjsJCSAgLyogdHJpZ2dlcnMgdGhlIGluLWxvb2t1cCBtdHUgY2hlY2sgd2hlbiBzZXQgKi8KJiM0MzsJX191MTYgZXhwZWN0ZWRfbXR1OwkgIC8qIGV4cGVjdGVkIG10dV9yZXN1bHQgKHVuaW9uIHdpdGggdG90X2xlbikgKi8KIH07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZmliX2xvb2t1cF90ZXN0IHRlc3RzW10gPSB7CkBAIC03OSw2ICYjNDM7MTI3LDE3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZmliX2xvb2t1cF90ZXN0IHRlc3RzW10gPSB7CiAJICAuZGFkZHIgPSBJUFY0X1RCSURfRFNULCAuZXhwZWN0ZWRfcmV0ID0gQlBGX0ZJQl9MS1VQX1JFVF9TVUNDRVNTLAogCSAgLmxvb2t1cF9mbGFncyA9IEJQRl9GSUJfTE9PS1VQX0RJUkVDVCB8IEJQRl9GSUJfTE9PS1VQX1RCSUQsIC50YmlkID0gMTAwLAogCSAgLmRtYWMgPSBETUFDX0lOSVQyLCB9LAomIzQzOwkvKgomIzQzOwkgKiBBbiBlcnJvciB0aGF0IHJldHVybnMgYWZ0ZXIgdGhlIGVncmVzcyBkZXZpY2UgaXMgcmVzb2x2ZWQgbXVzdAomIzQzOwkgKiByZXBvcnQgdGhlIGVncmVzcyBpZmluZGV4LCBub3QgdGhlIGlucHV0LiBUaGlzIHJvdXRlcyBmcm9tIGlucHV0CiYjNDM7CSAqIHZldGgxIHZpYSB2ZXRoMiAodGFibGUgMTAwKSB0byBhIGRzdCB3aXRoIG5vIG5laWdoYm91ciwgc28KJiM0MzsJICogaW5wdXQgIT0gZWdyZXNzLCBwaW5uaW5nIE5PX05FSUdIIHRvIHRoZSBlZ3Jlc3MgZGV2aWNlLgomIzQzOwkgKi8KJiM0MzsJeyAuZGVzYyA9ICYjMzQ7SVB2NCBOT19ORUlHSCByZXBvcnRzIHRoZSBlZ3Jlc3MgaWZpbmRleCwgbm90IHRoZSBpbnB1dCYjMzQ7LAomIzQzOwkgIC5kYWRkciA9IElQVjRfVEJJRF9OT05FSUdIX0RTVCwKJiM0MzsJICAuZXhwZWN0ZWRfcmV0ID0gQlBGX0ZJQl9MS1VQX1JFVF9OT19ORUlHSCwKJiM0MzsJICAubG9va3VwX2ZsYWdzID0gQlBGX0ZJQl9MT09LVVBfRElSRUNUIHwgQlBGX0ZJQl9MT09LVVBfVEJJRCwgLnRiaWQgPSAxMDAsCiYjNDM7CSAgLmV4cGVjdGVkX2RldiA9ICYjMzQ7dmV0aDImIzM0OywgfSwKIAl7IC5kZXNjID0gJiMzNDtJUHY2IFRCSUQgbG9va3VwIGZhaWx1cmUmIzM0OywKIAkgIC5kYWRkciA9IElQVjZfVEJJRF9EU1QsIC5leHBlY3RlZF9yZXQgPSBCUEZfRklCX0xLVVBfUkVUX05PVF9GV0RFRCwKIAkgIC5sb29rdXBfZmxhZ3MgPSBCUEZfRklCX0xPT0tVUF9ESVJFQ1QgfCBCUEZfRklCX0xPT0tVUF9UQklELApAQCAtMTQyLDYgJiM0MzsyMDEsMjE4IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZmliX2xvb2t1cF90ZXN0IHRlc3RzW10gPSB7CiAJICAuZXhwZWN0ZWRfZHN0ID0gSVBWNl9HVzEsCiAJICAubG9va3VwX2ZsYWdzID0gQlBGX0ZJQl9MT09LVVBfU0tJUF9ORUlHSCwKIAkgIC5tYXJrID0gTUFSSywgfSwKJiM0MzsJLyogdmxhbiBlZ3Jlc3MgcmVzb2x1dGlvbiAqLwomIzQzOwkvKgomIzQzOwkgKiBJbnZhcmlhbnQgdGhlIFZMQU4tZWdyZXNzIGFybXMgam9pbnRseSBlbmZvcmNlOiBhCiYjNDM7CSAqIEJQRl9GSUJfTE9PS1VQX1ZMQU4gU1VDQ0VTUyBhbHdheXMgY2FycmllcyBhIHBoeXNpY2FsLAomIzQzOwkgKiB4bWl0LWNhcGFibGUgaWZpbmRleCAtLSBubyBTVUNDRVNTIGV2ZXIgcmV0dXJucyBhIFZMQU4tZGV2aWNlCiYjNDM7CSAqIGlmaW5kZXguIFJlZHVjaWJsZSBhcm1zIHBpbiBpZmluZGV4ID09IHRoZSBwaHlzaWNhbCBwYXJlbnQ7IHRoZQomIzQzOwkgKiBRaW5RIGFuZCBmb3JlaWduLW5ldG5zIGFybXMgcGluIFZMQU5fRkFJTFVSRSB3aXRoIHBhcmFtcy0mZ3Q7aWZpbmRleAomIzQzOwkgKiBsZWZ0IGF0IHRoZSBpbnB1dCwgc28gYSByZWdyZXNzaW9uIHRvIGJlc3QtZWZmb3J0IChTVUNDRVNTICYjNDM7IHRoZQomIzQzOwkgKiBWTEFOIGlmaW5kZXgpIGZhaWxzIG9uZS4KJiM0MzsJICovCiYjNDM7CXsgLmRlc2MgPSAmIzM0O0lQdjQgVkxBTiBlZ3Jlc3MsIG5vIGZsYWcmIzM0OywKJiM0MzsJICAuZGFkZHIgPSBJUFY0X1ZMQU5fRUdSRVNTX0RTVCwgLmV4cGVjdGVkX3JldCA9IEJQRl9GSUJfTEtVUF9SRVRfU1VDQ0VTUywKJiM0MzsJICAubG9va3VwX2ZsYWdzID0gQlBGX0ZJQl9MT09LVVBfU0tJUF9ORUlHSCwKJiM0MzsJICAuZXhwZWN0ZWRfZGV2ID0gVkxBTl9JRkFDRSwgLmNoZWNrX3ZsYW4gPSB0cnVlLCB9LAomIzQzOwl7IC5kZXNjID0gJiMzNDtJUHY0IFZMQU4gZWdyZXNzLCBzaW5nbGUgVkxBTiYjMzQ7LAomIzQzOwkgIC5kYWRkciA9IElQVjRfVkxBTl9FR1JFU1NfRFNULCAuZXhwZWN0ZWRfcmV0ID0gQlBGX0ZJQl9MS1VQX1JFVF9TVUNDRVNTLAomIzQzOwkgIC5sb29rdXBfZmxhZ3MgPSBCUEZfRklCX0xPT0tVUF9WTEFOIHwgQlBGX0ZJQl9MT09LVVBfU0tJUF9ORUlHSCwKJiM0MzsJICAuZXhwZWN0ZWRfZGV2ID0gJiMzNDt2ZXRoMSYjMzQ7LCAuY2hlY2tfdmxhbiA9IHRydWUsCiYjNDM7CSAgLnZsYW5fcHJvdG8gPSBFVEhfUF84MDIxUSwgLnZsYW5faWQgPSBWTEFOX0lELCB9LAomIzQzOwkvKgomIzQzOwkgKiBza2IgcGF0aCB3aXRob3V0IHRvdF9sZW46IG10dV9yZXN1bHQgaXMgdGhlIFZMQU4gZGV2aWNlJiMzOTtzIG10dQomIzQzOwkgKiAoMTQwMCksIG5vdCB0aGUgcGFyZW50JiMzOTtzICgxNTAwKQomIzQzOwkgKi8KJiM0MzsJeyAuZGVzYyA9ICYjMzQ7SVB2NCBWTEFOIGVncmVzcywgc2tiLXBhdGggbXR1IGlzIHRoZSBWTEFOIGRldmljZSYjMzk7cyB3aXRob3V0IHRoZSBmbGFnJiMzNDssCiYjNDM7CSAgLmRhZGRyID0gSVBWNF9WTEFOX0VHUkVTU19EU1QsIC5leHBlY3RlZF9yZXQgPSBCUEZfRklCX0xLVVBfUkVUX1NVQ0NFU1MsCiYjNDM7CSAgLmxvb2t1cF9mbGFncyA9IEJQRl9GSUJfTE9PS1VQX1NLSVBfTkVJR0gsCiYjNDM7CSAgLmV4cGVjdGVkX2RldiA9IFZMQU5fSUZBQ0UsIC5jaGVja192bGFuID0gdHJ1ZSwgLmV4cGVjdGVkX210dSA9IDE0MDAsIH0sCiYjNDM7CXsgLmRlc2MgPSAmIzM0O0lQdjQgVkxBTiBlZ3Jlc3MsIGZsYWcgc2V0IGJ1dCBlZ3Jlc3MgaXMgbm90IGEgVkxBTiYjMzQ7LAomIzQzOwkgIC5kYWRkciA9IElQVjRfTlVEX0ZBSUxFRF9BRERSLCAuZXhwZWN0ZWRfcmV0ID0gQlBGX0ZJQl9MS1VQX1JFVF9TVUNDRVNTLAomIzQzOwkgIC5sb29rdXBfZmxhZ3MgPSBCUEZfRklCX0xPT0tVUF9WTEFOIHwgQlBGX0ZJQl9MT09LVVBfU0tJUF9ORUlHSCwKJiM0MzsJICAuZXhwZWN0ZWRfZGV2ID0gJiMzNDt2ZXRoMSYjMzQ7LCAuY2hlY2tfdmxhbiA9IHRydWUsIH0sCiYjNDM7CXsgLmRlc2MgPSAmIzM0O0lQdjQgVkxBTiBlZ3Jlc3MsIFFpblEgbm90IHJlZHVjaWJsZSAoVkxBTl9GQUlMVVJFKSYjMzQ7LAomIzQzOwkgIC5kYWRkciA9IElQVjRfUUlOUV9EU1QsCiYjNDM7CSAgLmV4cGVjdGVkX3JldCA9IEJQRl9GSUJfTEtVUF9SRVRfVkxBTl9GQUlMVVJFLAomIzQzOwkgIC5sb29rdXBfZmxhZ3MgPSBCUEZfRklCX0xPT0tVUF9WTEFOIHwgQlBGX0ZJQl9MT09LVVBfU0tJUF9ORUlHSCwKJiM0MzsJICAuZXhwZWN0ZWRfZGV2ID0gJiMzNDt2ZXRoMSYjMzQ7LCAuY2hlY2tfdmxhbiA9IHRydWUsIH0sCiYjNDM7CXsgLmRlc2MgPSAmIzM0O0lQdjQgUWluUSBlZ3Jlc3Mgd2l0aG91dCB0aGUgZmxhZyAoZXNjYXBlIGhhdGNoKSYjMzQ7LAomIzQzOwkgIC5kYWRkciA9IElQVjRfUUlOUV9EU1QsIC5leHBlY3RlZF9yZXQgPSBCUEZfRklCX0xLVVBfUkVUX1NVQ0NFU1MsCiYjNDM7CSAgLmxvb2t1cF9mbGFncyA9IEJQRl9GSUJfTE9PS1VQX1NLSVBfTkVJR0gsCiYjNDM7CSAgLmV4cGVjdGVkX2RldiA9IFFJTlFfSU5ORVJfSUZBQ0UsIH0sCiYjNDM7CXsgLmRlc2MgPSAmIzM0O0lQdjYgVkxBTiBlZ3Jlc3MsIHNpbmdsZSBWTEFOJiMzNDssCiYjNDM7CSAgLmRhZGRyID0gSVBWNl9WTEFOX0VHUkVTU19EU1QsIC5leHBlY3RlZF9yZXQgPSBCUEZfRklCX0xLVVBfUkVUX1NVQ0NFU1MsCiYjNDM7CSAgLmxvb2t1cF9mbGFncyA9IEJQRl9GSUJfTE9PS1VQX1ZMQU4gfCBCUEZfRklCX0xPT0tVUF9TS0lQX05FSUdILAomIzQzOwkgIC5leHBlY3RlZF9kZXYgPSAmIzM0O3ZldGgxJiMzNDssIC5jaGVja192bGFuID0gdHJ1ZSwKJiM0MzsJICAudmxhbl9wcm90byA9IEVUSF9QXzgwMjFRLCAudmxhbl9pZCA9IFZMQU5fSUQsIH0sCiYjNDM7CXsgLmRlc2MgPSAmIzM0O0lQdjQgVkxBTiBlZ3Jlc3MsIG5laWdoYm91ciBvbiB0aGUgVkxBTiBkZXZpY2UmIzM0OywKJiM0MzsJICAuZGFkZHIgPSBJUFY0X1ZMQU5fRUdSRVNTX0RTVCwgLmV4cGVjdGVkX3JldCA9IEJQRl9GSUJfTEtVUF9SRVRfU1VDQ0VTUywKJiM0MzsJICAubG9va3VwX2ZsYWdzID0gQlBGX0ZJQl9MT09LVVBfVkxBTiwKJiM0MzsJICAuZXhwZWN0ZWRfZGV2ID0gJiMzNDt2ZXRoMSYjMzQ7LCAuY2hlY2tfdmxhbiA9IHRydWUsCiYjNDM7CSAgLnZsYW5fcHJvdG8gPSBFVEhfUF84MDIxUSwgLnZsYW5faWQgPSBWTEFOX0lELCAuZG1hYyA9IERNQUNfSU5JVCwgfSwKJiM0MzsJeyAuZGVzYyA9ICYjMzQ7SVB2NCBWTEFOIGVncmVzcyBpbiBPVVRQVVQgbW9kZSYjMzQ7LAomIzQzOwkgIC5kYWRkciA9IElQVjRfVkxBTl9FR1JFU1NfRFNULCAuZXhwZWN0ZWRfcmV0ID0gQlBGX0ZJQl9MS1VQX1JFVF9TVUNDRVNTLAomIzQzOwkgIC5paWYgPSBWTEFOX0lGQUNFLAomIzQzOwkgIC5sb29rdXBfZmxhZ3MgPSBCUEZfRklCX0xPT0tVUF9PVVRQVVQgfCBCUEZfRklCX0xPT0tVUF9WTEFOIHwKJiM0MzsJCQkgIEJQRl9GSUJfTE9PS1VQX1NLSVBfTkVJR0gsCiYjNDM7CSAgLmV4cGVjdGVkX2RldiA9ICYjMzQ7dmV0aDEmIzM0OywgLmNoZWNrX3ZsYW4gPSB0cnVlLAomIzQzOwkgIC52bGFuX3Byb3RvID0gRVRIX1BfODAyMVEsIC52bGFuX2lkID0gVkxBTl9JRCwgfSwKJiM0MzsJeyAuZGVzYyA9ICYjMzQ7SVB2NCBWTEFOIGVncmVzcyBvdmVyIGEgYm9uZCYjMzQ7LAomIzQzOwkgIC5kYWRkciA9IElQVjRfQk9ORF9WTEFOX0RTVCwgLmV4cGVjdGVkX3JldCA9IEJQRl9GSUJfTEtVUF9SRVRfU1VDQ0VTUywKJiM0MzsJICAubG9va3VwX2ZsYWdzID0gQlBGX0ZJQl9MT09LVVBfVkxBTiB8IEJQRl9GSUJfTE9PS1VQX1NLSVBfTkVJR0gsCiYjNDM7CSAgLmV4cGVjdGVkX2RldiA9IEJPTkRfSUZBQ0UsIC5jaGVja192bGFuID0gdHJ1ZSwKJiM0MzsJICAudmxhbl9wcm90byA9IEVUSF9QXzgwMjFRLCAudmxhbl9pZCA9IEJPTkRfVkxBTl9JRCwgfSwKJiM0MzsJeyAuZGVzYyA9ICYjMzQ7SVB2NCBWTEFOIGVncmVzcyB2aWEgVEJJRCB0YWJsZSYjMzQ7LAomIzQzOwkgIC5kYWRkciA9IElQVjRfVEJJRF9WTEFOX0RTVCwgLmV4cGVjdGVkX3JldCA9IEJQRl9GSUJfTEtVUF9SRVRfU1VDQ0VTUywKJiM0MzsJICAubG9va3VwX2ZsYWdzID0gQlBGX0ZJQl9MT09LVVBfRElSRUNUIHwgQlBGX0ZJQl9MT09LVVBfVEJJRCB8CiYjNDM7CQkJICBCUEZfRklCX0xPT0tVUF9WTEFOIHwgQlBGX0ZJQl9MT09LVVBfU0tJUF9ORUlHSCwKJiM0MzsJICAudGJpZCA9IDEwMCwKJiM0MzsJICAuZXhwZWN0ZWRfZGV2ID0gJiMzNDt2ZXRoMiYjMzQ7LCAuY2hlY2tfdmxhbiA9IHRydWUsCiYjNDM7CSAgLnZsYW5fcHJvdG8gPSBFVEhfUF84MDIxUSwgLnZsYW5faWQgPSBUQklEX1ZMQU5fSUQsIH0sCiYjNDM7CXsgLmRlc2MgPSAmIzM0O0lQdjQgVkxBTiBlZ3Jlc3MsIHN1Y2Nlc3Mgd3JpdGVzIG10dV9yZXN1bHQgd2l0aCB0aGUgc3dhcCYjMzQ7LAomIzQzOwkgIC5kYWRkciA9IElQVjRfVkxBTl9NVFVfRFNULCAuZXhwZWN0ZWRfcmV0ID0gQlBGX0ZJQl9MS1VQX1JFVF9TVUNDRVNTLAomIzQzOwkgIC50b3RfbGVuID0gNTAwLCAuZXhwZWN0ZWRfbXR1ID0gMTAwMCwKJiM0MzsJICAubG9va3VwX2ZsYWdzID0gQlBGX0ZJQl9MT09LVVBfVkxBTiB8IEJQRl9GSUJfTE9PS1VQX1NLSVBfTkVJR0gsCiYjNDM7CSAgLmV4cGVjdGVkX2RldiA9ICYjMzQ7dmV0aDEmIzM0OywgLmNoZWNrX3ZsYW4gPSB0cnVlLAomIzQzOwkgIC52bGFuX3Byb3RvID0gRVRIX1BfODAyMVEsIC52bGFuX2lkID0gVkxBTl9JRCwgfSwKJiM0MzsJeyAuZGVzYyA9ICYjMzQ7SVB2NCBWTEFOIGVncmVzcywgRlJBR19ORUVERUQgcmVwb3J0cyBtdHUsIHN3YXAgdW53cml0dGVuJiMzNDssCiYjNDM7CSAgLmRhZGRyID0gSVBWNF9WTEFOX01UVV9EU1QsIC5leHBlY3RlZF9yZXQgPSBCUEZfRklCX0xLVVBfUkVUX0ZSQUdfTkVFREVELAomIzQzOwkgIC50b3RfbGVuID0gMTQwMCwgLmV4cGVjdGVkX210dSA9IDEwMDAsCiYjNDM7CSAgLmxvb2t1cF9mbGFncyA9IEJQRl9GSUJfTE9PS1VQX1ZMQU4gfCBCUEZfRklCX0xPT0tVUF9TS0lQX05FSUdILAomIzQzOwkgIC5leHBlY3RlZF9kZXYgPSAmIzM0O3ZldGgxJiMzNDssIC5jaGVja192bGFuID0gdHJ1ZSwgfSwKJiM0MzsJLyogdmxhbiB0YWcgYXMgbG9va3VwIGlucHV0ICovCiYjNDM7CXsgLmRlc2MgPSAmIzM0O0lQdjQgVkxBTiBpbnB1dCwgbm8gZmxhZyYjMzQ7LAomIzQzOwkgIC5kYWRkciA9IElQVjRfVkxBTl9EU1QsIC5leHBlY3RlZF9yZXQgPSBCUEZfRklCX0xLVVBfUkVUX1NVQ0NFU1MsCiYjNDM7CSAgLmV4cGVjdGVkX2RzdCA9IElQVjRfR1cxLAomIzQzOwkgIC5sb29rdXBfZmxhZ3MgPSBCUEZfRklCX0xPT0tVUF9TS0lQX05FSUdILCB9LAomIzQzOwl7IC5kZXNjID0gJiMzNDtJUHY0IFZMQU4gaW5wdXQsIHRhZyBzZWxlY3RzIHN1YmludGVyZmFjZSByb3V0ZSYjMzQ7LAomIzQzOwkgIC5kYWRkciA9IElQVjRfVkxBTl9EU1QsIC5leHBlY3RlZF9yZXQgPSBCUEZfRklCX0xLVVBfUkVUX1NVQ0NFU1MsCiYjNDM7CSAgLmV4cGVjdGVkX2RzdCA9IElQVjRfVkxBTl9HVywgLmV4cGVjdGVkX2RldiA9IFZMQU5fSUZBQ0UsCiYjNDM7CSAgLmxvb2t1cF9mbGFncyA9IEJQRl9GSUJfTE9PS1VQX1ZMQU5fSU5QVVQgfCBCUEZfRklCX0xPT0tVUF9TS0lQX05FSUdILAomIzQzOwkgIC52bGFuX3Byb3RvID0gRVRIX1BfODAyMVEsIC52bGFuX2lkID0gVkxBTl9JRCwgfSwKJiM0MzsJeyAuZGVzYyA9ICYjMzQ7SVB2NiBWTEFOIGlucHV0LCB0YWcgc2VsZWN0cyBzdWJpbnRlcmZhY2Ugcm91dGUmIzM0OywKJiM0MzsJICAuZGFkZHIgPSBJUFY2X1ZMQU5fRFNULCAuZXhwZWN0ZWRfcmV0ID0gQlBGX0ZJQl9MS1VQX1JFVF9TVUNDRVNTLAomIzQzOwkgIC5leHBlY3RlZF9kc3QgPSBJUFY2X1ZMQU5fR1csIC5leHBlY3RlZF9kZXYgPSBWTEFOX0lGQUNFLAomIzQzOwkgIC5sb29rdXBfZmxhZ3MgPSBCUEZfRklCX0xPT0tVUF9WTEFOX0lOUFVUIHwgQlBGX0ZJQl9MT09LVVBfU0tJUF9ORUlHSCwKJiM0MzsJICAudmxhbl9wcm90byA9IEVUSF9QXzgwMjFRLCAudmxhbl9pZCA9IFZMQU5fSUQsIH0sCiYjNDM7CXsgLmRlc2MgPSAmIzM0O0lQdjQgVkxBTiBpbnB1dCBhbmQgZWdyZXNzIGNvbWJpbmVkJiMzNDssCiYjNDM7CSAgLmRhZGRyID0gSVBWNF9WTEFOX0RTVCwgLmV4cGVjdGVkX3JldCA9IEJQRl9GSUJfTEtVUF9SRVRfU1VDQ0VTUywKJiM0MzsJICAuZXhwZWN0ZWRfZHN0ID0gSVBWNF9WTEFOX0dXLCAuZXhwZWN0ZWRfZGV2ID0gJiMzNDt2ZXRoMSYjMzQ7LAomIzQzOwkgIC5jaGVja192bGFuID0gdHJ1ZSwKJiM0MzsJICAubG9va3VwX2ZsYWdzID0gQlBGX0ZJQl9MT09LVVBfVkxBTl9JTlBVVCB8IEJQRl9GSUJfTE9PS1VQX1ZMQU4gfAomIzQzOwkJCSAgQlBGX0ZJQl9MT09LVVBfU0tJUF9ORUlHSCwKJiM0MzsJICAudmxhbl9wcm90byA9IEVUSF9QXzgwMjFRLCAudmxhbl9pZCA9IFZMQU5fSUQsIH0sCiYjNDM7CXsgLmRlc2MgPSAmIzM0O0lQdjQgVkxBTiBpbnB1dCwgbmVpZ2hib3VyIHJlc29sdmVkIG9uIHRoZSByb3V0ZSYjMzQ7LAomIzQzOwkgIC5kYWRkciA9IElQVjRfVkxBTl9EU1QsIC5leHBlY3RlZF9yZXQgPSBCUEZfRklCX0xLVVBfUkVUX1NVQ0NFU1MsCiYjNDM7CSAgLmV4cGVjdGVkX2RzdCA9IElQVjRfVkxBTl9HVywgLmV4cGVjdGVkX2RldiA9IFZMQU5fSUZBQ0UsCiYjNDM7CSAgLmxvb2t1cF9mbGFncyA9IEJQRl9GSUJfTE9PS1VQX1ZMQU5fSU5QVVQsCiYjNDM7CSAgLnZsYW5fcHJvdG8gPSBFVEhfUF84MDIxUSwgLnZsYW5faWQgPSBWTEFOX0lELCAuZG1hYyA9IERNQUNfSU5JVDIsIH0sCiYjNDM7CXsgLmRlc2MgPSAmIzM0O0lQdjQgVkxBTiBpbnB1dCwgc291cmNlIGFkZHJlc3MgZnJvbSB0aGUgc3ViaW50ZXJmYWNlJiMzNDssCiYjNDM7CSAgLmRhZGRyID0gSVBWNF9WTEFOX0RTVCwgLmV4cGVjdGVkX3JldCA9IEJQRl9GSUJfTEtVUF9SRVRfU1VDQ0VTUywKJiM0MzsJICAuZXhwZWN0ZWRfc3JjID0gSVBWNF9WTEFOX0lGQUNFX0FERFIsCiYjNDM7CSAgLmxvb2t1cF9mbGFncyA9IEJQRl9GSUJfTE9PS1VQX1ZMQU5fSU5QVVQgfCBCUEZfRklCX0xPT0tVUF9TUkMgfAomIzQzOwkJCSAgQlBGX0ZJQl9MT09LVVBfU0tJUF9ORUlHSCwKJiM0MzsJICAudmxhbl9wcm90byA9IEVUSF9QXzgwMjFRLCAudmxhbl9pZCA9IFZMQU5fSUQsIH0sCiYjNDM7CS8qCiYjNDM7CSAqIFZSRjogdGhlIHJlc29sdmVkIHN1YmludGVyZmFjZSBpcyBlbnNsYXZlZCwgc28gdGhlIGwzbWRldiBydWxlCiYjNDM7CSAqIChmdWxsIGxvb2t1cCkgYW5kIGwzbWRldl9maWJfdGFibGVfcmN1KCkgKERJUkVDVCkgbXVzdCBzZWxlY3QKJiM0MzsJICogdGhlIFZSRiB0YWJsZSBmcm9tIHRoZSByZXNvbHZlZCBpbmdyZXNzCiYjNDM7CSAqLwomIzQzOwl7IC5kZXNjID0gJiMzNDtJUHY0IFZMQU4gaW5wdXQsIFZSRiBzdWJpbnRlcmZhY2UsIG5vIGZsYWcmIzM0OywKJiM0MzsJICAuZGFkZHIgPSBJUFY0X1ZSRl9EU1QsIC5leHBlY3RlZF9yZXQgPSBCUEZfRklCX0xLVVBfUkVUX1NVQ0NFU1MsCiYjNDM7CSAgLmV4cGVjdGVkX2RzdCA9IElQVjRfR1cxLAomIzQzOwkgIC5sb29rdXBfZmxhZ3MgPSBCUEZfRklCX0xPT0tVUF9TS0lQX05FSUdILCB9LAomIzQzOwl7IC5kZXNjID0gJiMzNDtJUHY0IFZMQU4gaW5wdXQsIHRhZyBzZWxlY3RzIFZSRiB0YWJsZSYjMzQ7LAomIzQzOwkgIC5kYWRkciA9IElQVjRfVlJGX0RTVCwgLmV4cGVjdGVkX3JldCA9IEJQRl9GSUJfTEtVUF9SRVRfU1VDQ0VTUywKJiM0MzsJICAuZXhwZWN0ZWRfZHN0ID0gSVBWNF9WUkZfR1csIC5leHBlY3RlZF9kZXYgPSBWUkZfVkxBTl9JRkFDRSwKJiM0MzsJICAubG9va3VwX2ZsYWdzID0gQlBGX0ZJQl9MT09LVVBfVkxBTl9JTlBVVCB8IEJQRl9GSUJfTE9PS1VQX1NLSVBfTkVJR0gsCiYjNDM7CSAgLnZsYW5fcHJvdG8gPSBFVEhfUF84MDIxUSwgLnZsYW5faWQgPSBWUkZfVkxBTl9JRCwgfSwKJiM0MzsJeyAuZGVzYyA9ICYjMzQ7SVB2NCBWTEFOIGlucHV0LCBESVJFQ1QgdXNlcyBWUkYgdGFibGUgZnJvbSByZXNvbHZlZCBpbmdyZXNzJiMzNDssCiYjNDM7CSAgLmRhZGRyID0gSVBWNF9WUkZfRFNULCAuZXhwZWN0ZWRfcmV0ID0gQlBGX0ZJQl9MS1VQX1JFVF9TVUNDRVNTLAomIzQzOwkgIC5leHBlY3RlZF9kc3QgPSBJUFY0X1ZSRl9HVywgLmV4cGVjdGVkX2RldiA9IFZSRl9WTEFOX0lGQUNFLAomIzQzOwkgIC5sb29rdXBfZmxhZ3MgPSBCUEZfRklCX0xPT0tVUF9WTEFOX0lOUFVUIHwgQlBGX0ZJQl9MT09LVVBfRElSRUNUIHwKJiM0MzsJCQkgIEJQRl9GSUJfTE9PS1VQX1NLSVBfTkVJR0gsCiYjNDM7CSAgLnZsYW5fcHJvdG8gPSBFVEhfUF84MDIxUSwgLnZsYW5faWQgPSBWUkZfVkxBTl9JRCwgfSwKJiM0MzsJLyoKJiM0MzsJICogZmFpbHVyZSBhcm1zIGFsc28gYXNzZXJ0IHBhcmFtcyBpcyBsZWZ0IHVudG91Y2hlZDogaWZpbmRleCBzdGlsbAomIzQzOwkgKiBuYW1lcyB0aGUgcGh5c2ljYWwgZGV2aWNlIGFuZCB0aGUgaW5wdXQgdGFnIGJ5dGVzIHN1cnZpdmUKJiM0MzsJICovCiYjNDM7CXsgLmRlc2MgPSAmIzM0O0lQdjQgVkxBTiBpbnB1dCwgaW52YWxpZCBwcm90byYjMzQ7LAomIzQzOwkgIC5kYWRkciA9IElQVjRfVkxBTl9EU1QsIC5leHBlY3RlZF9yZXQgPSAtRUlOVkFMLAomIzQzOwkgIC5leHBlY3RlZF9kZXYgPSAmIzM0O3ZldGgxJiMzNDssIC5jaGVja192bGFuID0gdHJ1ZSwKJiM0MzsJICAubG9va3VwX2ZsYWdzID0gQlBGX0ZJQl9MT09LVVBfVkxBTl9JTlBVVCB8IEJQRl9GSUJfTE9PS1VQX1NLSVBfTkVJR0gsCiYjNDM7CSAgLnZsYW5fcHJvdG8gPSAweDEyMzQsIC52bGFuX2lkID0gVkxBTl9JRCwgfSwKJiM0MzsJeyAuZGVzYyA9ICYjMzQ7SVB2NCBWTEFOIGlucHV0LCB1bm1hdGNoZWQgVklEJiMzNDssCiYjNDM7CSAgLmRhZGRyID0gSVBWNF9WTEFOX0RTVCwgLmV4cGVjdGVkX3JldCA9IEJQRl9GSUJfTEtVUF9SRVRfTk9UX0ZXREVELAomIzQzOwkgIC5leHBlY3RlZF9kZXYgPSAmIzM0O3ZldGgxJiMzNDssIC5jaGVja192bGFuID0gdHJ1ZSwKJiM0MzsJICAubG9va3VwX2ZsYWdzID0gQlBGX0ZJQl9MT09LVVBfVkxBTl9JTlBVVCB8IEJQRl9GSUJfTE9PS1VQX1NLSVBfTkVJR0gsCiYjNDM7CSAgLnZsYW5fcHJvdG8gPSBFVEhfUF84MDIxUSwgLnZsYW5faWQgPSBWTEFOX1ZJRF9VTlVTRUQsIH0sCiYjNDM7CXsgLmRlc2MgPSAmIzM0O0lQdjQgVkxBTiBpbnB1dCwgc3ViaW50ZXJmYWNlIGRvd24mIzM0OywKJiM0MzsJICAuZGFkZHIgPSBJUFY0X1ZMQU5fRFNULCAuZXhwZWN0ZWRfcmV0ID0gQlBGX0ZJQl9MS1VQX1JFVF9OT1RfRldERUQsCiYjNDM7CSAgLmV4cGVjdGVkX2RldiA9ICYjMzQ7dmV0aDEmIzM0OywgLmNoZWNrX3ZsYW4gPSB0cnVlLAomIzQzOwkgIC5sb29rdXBfZmxhZ3MgPSBCUEZfRklCX0xPT0tVUF9WTEFOX0lOUFVUIHwgQlBGX0ZJQl9MT09LVVBfU0tJUF9ORUlHSCwKJiM0MzsJICAudmxhbl9wcm90byA9IEVUSF9QXzgwMjFRLCAudmxhbl9pZCA9IFZMQU5fSURfRE9XTiwgfSwKJiM0MzsJLyoKJiM0MzsJICogdGhlIHJlc29sdmVyIHJ1bnMgYmVmb3JlIHRoZSBmb3J3YXJkaW5nIGNoZWNrLCBzbyBvbiBkZXZpY2VzCiYjNDM7CSAqIHdpdGggZm9yd2FyZGluZyBvZmYgRldEX0RJU0FCTEVEIChub3QgTk9UX0ZXREVEKSBwcm92ZXMgdGhlIHRhZwomIzQzOwkgKiByZXNvbHZlZCB0byB0aGF0IGRldmljZSBhbmQgdGhlIGxvb2t1cCB1c2VkIGl0IGFzIGluZ3Jlc3MKJiM0MzsJICovCiYjNDM7CXsgLmRlc2MgPSAmIzM0O0lQdjQgVkxBTiBpbnB1dCwgODAyLjFhZCB0YWcmIzM0OywKJiM0MzsJICAuZGFkZHIgPSBJUFY0X1ZMQU5fRFNULCAuZXhwZWN0ZWRfcmV0ID0gQlBGX0ZJQl9MS1VQX1JFVF9GV0RfRElTQUJMRUQsCiYjNDM7CSAgLmxvb2t1cF9mbGFncyA9IEJQRl9GSUJfTE9PS1VQX1ZMQU5fSU5QVVQgfCBCUEZfRklCX0xPT0tVUF9TS0lQX05FSUdILAomIzQzOwkgIC52bGFuX3Byb3RvID0gRVRIX1BfODAyMUFELCAudmxhbl9pZCA9IFFJTlFfQURfVkxBTl9JRCwgfSwKJiM0MzsJeyAuZGVzYyA9ICYjMzQ7SVB2NCBWTEFOIGlucHV0LCBQQ1AgYW5kIERFSSBiaXRzIGlnbm9yZWQgaW4gVENJJiMzNDssCiYjNDM7CSAgLmRhZGRyID0gSVBWNF9WTEFOX0RTVCwgLmV4cGVjdGVkX3JldCA9IEJQRl9GSUJfTEtVUF9SRVRfU1VDQ0VTUywKJiM0MzsJICAuZXhwZWN0ZWRfZHN0ID0gSVBWNF9WTEFOX0dXLAomIzQzOwkgIC5sb29rdXBfZmxhZ3MgPSBCUEZfRklCX0xPT0tVUF9WTEFOX0lOUFVUIHwgQlBGX0ZJQl9MT09LVVBfU0tJUF9ORUlHSCwKJiM0MzsJICAudmxhbl9wcm90byA9IEVUSF9QXzgwMjFRLCAudmxhbl9pZCA9IDB4ZTAwMCB8IFZMQU5fSUQsIH0sCiYjNDM7CXsgLmRlc2MgPSAmIzM0O0lQdjQgVkxBTiBpbnB1dCwgaW5uZXIgUWluUSBkZXZpY2UgZnJvbSBWTEFOIGlmaW5kZXgmIzM0OywKJiM0MzsJICAuZGFkZHIgPSBJUFY0X1ZMQU5fRFNULCAuZXhwZWN0ZWRfcmV0ID0gQlBGX0ZJQl9MS1VQX1JFVF9GV0RfRElTQUJMRUQsCiYjNDM7CSAgLmlpZiA9IFFJTlFfT1VURVJfSUZBQ0UsCiYjNDM7CSAgLmxvb2t1cF9mbGFncyA9IEJQRl9GSUJfTE9PS1VQX1ZMQU5fSU5QVVQgfCBCUEZfRklCX0xPT0tVUF9TS0lQX05FSUdILAomIzQzOwkgIC52bGFuX3Byb3RvID0gRVRIX1BfODAyMVEsIC52bGFuX2lkID0gUUlOUV9JTk5FUl9WTEFOX0lELCB9LAomIzQzOwkvKgomIzQzOwkgKiBib25kaW5nOiB0aGUgVkxBTnMgbGl2ZSBvbiB0aGUgbWFzdGVyLCBhcyBvbiByZWNlaXZlLCB3aGVyZSB0aGUKJiM0MzsJICogZnJhbWUgaXMgc3RlZXJlZCB0byB0aGUgbWFzdGVyIGJlZm9yZSBWTEFOIHByb2Nlc3Npbmc7IGEgcG9ydAomIzQzOwkgKiBpZmluZGV4IGRvZXMgbm90IG1hdGNoIChwb3J0cyBjYXJyeSB2aWQgc3RhdGUgYnV0IG5vIFZMQU4gZGV2cykKJiM0MzsJICovCiYjNDM7CXsgLmRlc2MgPSAmIzM0O0lQdjQgVkxBTiBpbnB1dCwgdGFnIG9uIGJvbmQgbWFzdGVyIHJlc29sdmVzJiMzNDssCiYjNDM7CSAgLmRhZGRyID0gSVBWNF9WTEFOX0RTVCwgLmV4cGVjdGVkX3JldCA9IEJQRl9GSUJfTEtVUF9SRVRfRldEX0RJU0FCTEVELAomIzQzOwkgIC5paWYgPSBCT05EX0lGQUNFLAomIzQzOwkgIC5sb29rdXBfZmxhZ3MgPSBCUEZfRklCX0xPT0tVUF9WTEFOX0lOUFVUIHwgQlBGX0ZJQl9MT09LVVBfU0tJUF9ORUlHSCwKJiM0MzsJICAudmxhbl9wcm90byA9IEVUSF9QXzgwMjFRLCAudmxhbl9pZCA9IEJPTkRfVkxBTl9JRCwgfSwKJiM0MzsJeyAuZGVzYyA9ICYjMzQ7SVB2NCBWTEFOIGlucHV0LCB0YWcgb24gYm9uZCBwb3J0IGRvZXMgbm90IG1hdGNoJiMzNDssCiYjNDM7CSAgLmRhZGRyID0gSVBWNF9WTEFOX0RTVCwgLmV4cGVjdGVkX3JldCA9IEJQRl9GSUJfTEtVUF9SRVRfTk9UX0ZXREVELAomIzQzOwkgIC5paWYgPSBCT05EX1BPUlQsIC5leHBlY3RlZF9kZXYgPSBCT05EX1BPUlQsIC5jaGVja192bGFuID0gdHJ1ZSwKJiM0MzsJICAubG9va3VwX2ZsYWdzID0gQlBGX0ZJQl9MT09LVVBfVkxBTl9JTlBVVCB8IEJQRl9GSUJfTE9PS1VQX1NLSVBfTkVJR0gsCiYjNDM7CSAgLnZsYW5fcHJvdG8gPSBFVEhfUF84MDIxUSwgLnZsYW5faWQgPSBCT05EX1ZMQU5fSUQsIH0sCiYjNDM7CXsgLmRlc2MgPSAmIzM0O0lQdjYgVkxBTiBpbnB1dCwgaW52YWxpZCBwcm90byYjMzQ7LAomIzQzOwkgIC5kYWRkciA9IElQVjZfVkxBTl9EU1QsIC5leHBlY3RlZF9yZXQgPSAtRUlOVkFMLAomIzQzOwkgIC5leHBlY3RlZF9kZXYgPSAmIzM0O3ZldGgxJiMzNDssIC5jaGVja192bGFuID0gdHJ1ZSwKJiM0MzsJICAubG9va3VwX2ZsYWdzID0gQlBGX0ZJQl9MT09LVVBfVkxBTl9JTlBVVCB8IEJQRl9GSUJfTE9PS1VQX1NLSVBfTkVJR0gsCiYjNDM7CSAgLnZsYW5fcHJvdG8gPSAweDEyMzQsIC52bGFuX2lkID0gVkxBTl9JRCwgfSwKJiM0MzsJeyAuZGVzYyA9ICYjMzQ7SVB2NCBWTEFOIGlucHV0LCBWSUQgMCBwcmlvcml0eSB0YWcgZmFpbHMgY2xvc2VkJiMzNDssCiYjNDM7CSAgLmRhZGRyID0gSVBWNF9WTEFOX0RTVCwgLmV4cGVjdGVkX3JldCA9IEJQRl9GSUJfTEtVUF9SRVRfTk9UX0ZXREVELAomIzQzOwkgIC5leHBlY3RlZF9kZXYgPSAmIzM0O3ZldGgxJiMzNDssIC5jaGVja192bGFuID0gdHJ1ZSwKJiM0MzsJICAubG9va3VwX2ZsYWdzID0gQlBGX0ZJQl9MT09LVVBfVkxBTl9JTlBVVCB8IEJQRl9GSUJfTE9PS1VQX1NLSVBfTkVJR0gsCiYjNDM7CSAgLnZsYW5fcHJvdG8gPSBFVEhfUF84MDIxUSwgLnZsYW5faWQgPSAwLCB9LAomIzQzOwl7IC5kZXNjID0gJiMzNDtJUHY2IFZMQU4gaW5wdXQsIHVubWF0Y2hlZCBWSUQmIzM0OywKJiM0MzsJICAuZGFkZHIgPSBJUFY2X1ZMQU5fRFNULCAuZXhwZWN0ZWRfcmV0ID0gQlBGX0ZJQl9MS1VQX1JFVF9OT1RfRldERUQsCiYjNDM7CSAgLmV4cGVjdGVkX2RldiA9ICYjMzQ7dmV0aDEmIzM0OywgLmNoZWNrX3ZsYW4gPSB0cnVlLAomIzQzOwkgIC5sb29rdXBfZmxhZ3MgPSBCUEZfRklCX0xPT0tVUF9WTEFOX0lOUFVUIHwgQlBGX0ZJQl9MT09LVVBfU0tJUF9ORUlHSCwKJiM0MzsJICAudmxhbl9wcm90byA9IEVUSF9QXzgwMjFRLCAudmxhbl9pZCA9IFZMQU5fVklEX1VOVVNFRCwgfSwKJiM0MzsJeyAuZGVzYyA9ICYjMzQ7dW5rbm93biBmbGFnIGJpdCByZWplY3RlZCYjMzQ7LAomIzQzOwkgIC5kYWRkciA9IElQVjRfVkxBTl9EU1QsIC5leHBlY3RlZF9yZXQgPSAtRUlOVkFMLAomIzQzOwkgIC5sb29rdXBfZmxhZ3MgPSAoMSAmbHQ7Jmx0OyAxNCkgfCBCUEZfRklCX0xPT0tVUF9TS0lQX05FSUdILCB9LAomIzQzOwl7IC5kZXNjID0gJiMzNDtJUHY0IFZMQU4gaW5wdXQgcmVqZWN0ZWQgd2l0aCBUQklEJiMzNDssCiYjNDM7CSAgLmRhZGRyID0gSVBWNF9WTEFOX0RTVCwgLmV4cGVjdGVkX3JldCA9IC1FSU5WQUwsCiYjNDM7CSAgLmxvb2t1cF9mbGFncyA9IEJQRl9GSUJfTE9PS1VQX1ZMQU5fSU5QVVQgfCBCUEZfRklCX0xPT0tVUF9UQklELAomIzQzOwkgIC52bGFuX3Byb3RvID0gRVRIX1BfODAyMVEsIC52bGFuX2lkID0gVkxBTl9JRCwgfSwKJiM0MzsJeyAuZGVzYyA9ICYjMzQ7SVB2NCBWTEFOIGlucHV0IHJlamVjdGVkIHdpdGggT1VUUFVUJiMzNDssCiYjNDM7CSAgLmRhZGRyID0gSVBWNF9WTEFOX0RTVCwgLmV4cGVjdGVkX3JldCA9IC1FSU5WQUwsCiYjNDM7CSAgLmxvb2t1cF9mbGFncyA9IEJQRl9GSUJfTE9PS1VQX1ZMQU5fSU5QVVQgfCBCUEZfRklCX0xPT0tVUF9PVVRQVVQsCiYjNDM7CSAgLnZsYW5fcHJvdG8gPSBFVEhfUF84MDIxUSwgLnZsYW5faWQgPSBWTEFOX0lELCB9LAogfTsKIAogc3RhdGljIGludCBzZXR1cF9uZXRucyh2b2lkKQpAQCAtMjA0LDYgJiM0Mzs0NzUsMTEwIEBAIHN0YXRpYyBpbnQgc2V0dXBfbmV0bnModm9pZCkKIAlTWVMoZmFpbCwgJiMzNDtpcCBydWxlIGFkZCBwcmlvIDIgZndtYXJrICVkIGxvb2t1cCAlcyYjMzQ7LCBNQVJLLCBNQVJLX1RBQkxFKTsKIAlTWVMoZmFpbCwgJiMzNDtpcCAtNiBydWxlIGFkZCBwcmlvIDIgZndtYXJrICVkIGxvb2t1cCAlcyYjMzQ7LCBNQVJLLCBNQVJLX1RBQkxFKTsKIAomIzQzOwkvKgomIzQzOwkgKiBTZXR1cCBmb3IgdmxhbiB0ZXN0czogYSBzdWJpbnRlcmZhY2UgZm9yIGVncmVzcyByZXNvbHV0aW9uIGFuZAomIzQzOwkgKiB0YWctYXMtaW5wdXQsIGEgUWluUSBzdGFjaywgYW5kIGFuIGlpZiBydWxlIHNvIHRoZSBpbnB1dCB0ZXN0cwomIzQzOwkgKiBvYnNlcnZlIHdoaWNoIGRldmljZSB0aGUgbG9va3VwIHVzZWQgYXMgaW5ncmVzcy4KJiM0MzsJICovCiYjNDM7CVNZUyhmYWlsLCAmIzM0O2lwIGxpbmsgYWRkIGxpbmsgdmV0aDEgbmFtZSAlcyB0eXBlIHZsYW4gaWQgJWQmIzM0OywKJiM0MzsJICAgIFZMQU5fSUZBQ0UsIFZMQU5fSUQpOwomIzQzOwlTWVMoZmFpbCwgJiMzNDtpcCBsaW5rIHNldCBkZXYgJXMgdXAmIzM0OywgVkxBTl9JRkFDRSk7CiYjNDM7CS8qCiYjNDM7CSAqIGxvd2VyIHRoYW4gdGhlIHZldGgxIHBhcmVudCAoMTUwMCk6IHRoZSBza2ItcGF0aCBtdHUgY2hlY2sgdXNlcyB0aGUKJiM0MzsJICogRklCIHJlc3VsdCAoVkxBTikgZGV2aWNlLCBzbyBtdHVfcmVzdWx0IGlzIHRoaXMgdmFsdWUgd2l0aCBvcgomIzQzOwkgKiB3aXRob3V0IHRoZSBlZ3Jlc3Mgc3dhcCwgd2hpY2ggdHdvIGFybXMgYmVsb3cgcGluCiYjNDM7CSAqLwomIzQzOwlTWVMoZmFpbCwgJiMzNDtpcCBsaW5rIHNldCBkZXYgJXMgbXR1IDE0MDAmIzM0OywgVkxBTl9JRkFDRSk7CiYjNDM7CVNZUyhmYWlsLCAmIzM0O2lwIGFkZHIgYWRkICVzLzI0IGRldiAlcyYjMzQ7LCBJUFY0X1ZMQU5fSUZBQ0VfQUREUiwgVkxBTl9JRkFDRSk7CiYjNDM7CVNZUyhmYWlsLCAmIzM0O2lwIGFkZHIgYWRkICVzLzY0IGRldiAlcyBub2RhZCYjMzQ7LCBJUFY2X1ZMQU5fSUZBQ0VfQUREUiwgVkxBTl9JRkFDRSk7CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIHN0YXlzIGRvd246IHRoZSBpbnB1dCBmbGFnIG11c3QgdHJlYXQgaXRzIHRhZyB0aGUgd2F5IHJlYWwKJiM0MzsJICogaW5ncmVzcyB0cmVhdHMgYSBmcmFtZSBhcnJpdmluZyBvbiBhIGRvd24gVkxBTiBkZXZpY2UgKGRyb3ApCiYjNDM7CSAqLwomIzQzOwlTWVMoZmFpbCwgJiMzNDtpcCBsaW5rIGFkZCBsaW5rIHZldGgxIG5hbWUgJXMgdHlwZSB2bGFuIGlkICVkJiMzNDssCiYjNDM7CSAgICBWTEFOX0lGQUNFX0RPV04sIFZMQU5fSURfRE9XTik7CiYjNDM7CiYjNDM7CWVyciA9IHdyaXRlX3N5c2N0bCgmIzM0Oy9wcm9jL3N5cy9uZXQvaXB2NC9jb25mLyYjMzQ7IFZMQU5fSUZBQ0UgJiMzNDsvZm9yd2FyZGluZyYjMzQ7LCAmIzM0OzEmIzM0Oyk7CiYjNDM7CWlmICghQVNTRVJUX09LKGVyciwgJiMzNDt3cml0ZV9zeXNjdGwobmV0LmlwdjQuY29uZi4mIzM0OyBWTEFOX0lGQUNFICYjMzQ7LmZvcndhcmRpbmcpJiMzNDspKQomIzQzOwkJZ290byBmYWlsOwomIzQzOwomIzQzOwllcnIgPSB3cml0ZV9zeXNjdGwoJiMzNDsvcHJvYy9zeXMvbmV0L2lwdjYvY29uZi8mIzM0OyBWTEFOX0lGQUNFICYjMzQ7L2ZvcndhcmRpbmcmIzM0OywgJiMzNDsxJiMzNDspOwomIzQzOwlpZiAoIUFTU0VSVF9PSyhlcnIsICYjMzQ7d3JpdGVfc3lzY3RsKG5ldC5pcHY2LmNvbmYuJiMzNDsgVkxBTl9JRkFDRSAmIzM0Oy5mb3J3YXJkaW5nKSYjMzQ7KSkKJiM0MzsJCWdvdG8gZmFpbDsKJiM0MzsKJiM0MzsJU1lTKGZhaWwsICYjMzQ7aXAgbGluayBhZGQgbGluayB2ZXRoMSBuYW1lICVzIHR5cGUgdmxhbiBwcm90byA4MDIuMWFkIGlkIDIwMCYjMzQ7LAomIzQzOwkgICAgUUlOUV9PVVRFUl9JRkFDRSk7CiYjNDM7CVNZUyhmYWlsLCAmIzM0O2lwIGxpbmsgYWRkIGxpbmsgJXMgbmFtZSAlcyB0eXBlIHZsYW4gaWQgMzAwJiMzNDssCiYjNDM7CSAgICBRSU5RX09VVEVSX0lGQUNFLCBRSU5RX0lOTkVSX0lGQUNFKTsKJiM0MzsJU1lTKGZhaWwsICYjMzQ7aXAgbGluayBzZXQgZGV2ICVzIHVwJiMzNDssIFFJTlFfT1VURVJfSUZBQ0UpOwomIzQzOwlTWVMoZmFpbCwgJiMzNDtpcCBsaW5rIHNldCBkZXYgJXMgdXAmIzM0OywgUUlOUV9JTk5FUl9JRkFDRSk7CiYjNDM7CVNZUyhmYWlsLCAmIzM0O2lwIHJvdXRlIGFkZCAlcy8zMiBkZXYgJXMmIzM0OywgSVBWNF9RSU5RX0RTVCwgUUlOUV9JTk5FUl9JRkFDRSk7CiYjNDM7CiYjNDM7CVNZUyhmYWlsLCAmIzM0O2lwIHJvdXRlIGFkZCAlcy8zMiB2aWEgJXMmIzM0OywgSVBWNF9WTEFOX0RTVCwgSVBWNF9HVzEpOwomIzQzOwlTWVMoZmFpbCwgJiMzNDtpcCByb3V0ZSBhZGQgdGFibGUgJXMgJXMvMzIgdmlhICVzJiMzNDssCiYjNDM7CSAgICBWTEFOX1RBQkxFLCBJUFY0X1ZMQU5fRFNULCBJUFY0X1ZMQU5fR1cpOwomIzQzOwlTWVMoZmFpbCwgJiMzNDtpcCBydWxlIGFkZCBwcmlvIDMgaWlmICVzIGxvb2t1cCAlcyYjMzQ7LCBWTEFOX0lGQUNFLCBWTEFOX1RBQkxFKTsKJiM0MzsJU1lTKGZhaWwsICYjMzQ7aXAgLTYgcm91dGUgYWRkICVzLzEyOCB2aWEgJXMmIzM0OywgSVBWNl9WTEFOX0RTVCwgSVBWNl9HVzEpOwomIzQzOwlTWVMoZmFpbCwgJiMzNDtpcCAtNiByb3V0ZSBhZGQgdGFibGUgJXMgJXMvMTI4IHZpYSAlcyYjMzQ7LAomIzQzOwkgICAgVkxBTl9UQUJMRSwgSVBWNl9WTEFOX0RTVCwgSVBWNl9WTEFOX0dXKTsKJiM0MzsJU1lTKGZhaWwsICYjMzQ7aXAgLTYgcnVsZSBhZGQgcHJpbyAzIGlpZiAlcyBsb29rdXAgJXMmIzM0OywgVkxBTl9JRkFDRSwgVkxBTl9UQUJMRSk7CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIGEgYm9uZCB3aXRoIG9uZSBwb3J0IGFuZCBhIFZMQU4gb24gdGhlIGJvbmQ6IFZMQU5zIG9uIGEgYm9uZAomIzQzOwkgKiBsaXZlIG9uIHRoZSBtYXN0ZXIsIHNvIHJlc29sdXRpb24gc3VjY2VlZHMgZm9yIHRoZSBtYXN0ZXImIzM5O3MKJiM0MzsJICogaWZpbmRleCBhbmQgZmFpbHMgY2xvc2VkIGZvciBhIHBvcnQmIzM5O3MsIG1hdGNoaW5nIHJlY2VpdmUsIHdoaWNoCiYjNDM7CSAqIHN0ZWVycyB0aGUgZnJhbWUgdG8gdGhlIG1hc3RlciBiZWZvcmUgVkxBTiBwcm9jZXNzaW5nCiYjNDM7CSAqLwomIzQzOwlTWVMoZmFpbCwgJiMzNDtpcCBsaW5rIGFkZCAlcyB0eXBlIGJvbmQmIzM0OywgQk9ORF9JRkFDRSk7CiYjNDM7CVNZUyhmYWlsLCAmIzM0O2lwIGxpbmsgYWRkICVzIHR5cGUgdmV0aCBwZWVyIG5hbWUgJXMmIzM0OywgQk9ORF9QT1JULCBCT05EX1BPUlRfUEVFUik7CiYjNDM7CVNZUyhmYWlsLCAmIzM0O2lwIGxpbmsgc2V0ICVzIG1hc3RlciAlcyYjMzQ7LCBCT05EX1BPUlQsIEJPTkRfSUZBQ0UpOwomIzQzOwlTWVMoZmFpbCwgJiMzNDtpcCBsaW5rIHNldCBkZXYgJXMgdXAmIzM0OywgQk9ORF9JRkFDRSk7CiYjNDM7CVNZUyhmYWlsLCAmIzM0O2lwIGxpbmsgc2V0IGRldiAlcyB1cCYjMzQ7LCBCT05EX1BPUlQpOwomIzQzOwlTWVMoZmFpbCwgJiMzNDtpcCBsaW5rIGFkZCBsaW5rICVzIG5hbWUgJXMuJWQgdHlwZSB2bGFuIGlkICVkJiMzNDssCiYjNDM7CSAgICBCT05EX0lGQUNFLCBCT05EX0lGQUNFLCBCT05EX1ZMQU5fSUQsIEJPTkRfVkxBTl9JRCk7CiYjNDM7CVNZUyhmYWlsLCAmIzM0O2lwIGxpbmsgc2V0IGRldiAlcy4lZCB1cCYjMzQ7LCBCT05EX0lGQUNFLCBCT05EX1ZMQU5fSUQpOwomIzQzOwlTWVMoZmFpbCwgJiMzNDtpcCByb3V0ZSBhZGQgJXMvMzIgZGV2ICVzLiVkJiMzNDssCiYjNDM7CSAgICBJUFY0X0JPTkRfVkxBTl9EU1QsIEJPTkRfSUZBQ0UsIEJPTkRfVkxBTl9JRCk7CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIGEgVlJGIHdpdGggaXRzIG93biBkZWRpY2F0ZWQgc3ViaW50ZXJmYWNlICh0aGUgaWlmIHJ1bGVzIGFib3ZlCiYjNDM7CSAqIG11c3Qgbm90IHNlZSBpdCksIGZvciB0aGUgdGFibGUtc2VsZWN0aW9uLWJ5LWluZ3Jlc3MgY2FzZXMKJiM0MzsJICovCiYjNDM7CVNZUyhmYWlsLCAmIzM0O2lwIGxpbmsgYWRkICVzIHR5cGUgdnJmIHRhYmxlICVzJiMzNDssIFZSRl9JRkFDRSwgVlJGX1RBQkxFKTsKJiM0MzsJU1lTKGZhaWwsICYjMzQ7aXAgbGluayBzZXQgZGV2ICVzIHVwJiMzNDssIFZSRl9JRkFDRSk7CiYjNDM7CVNZUyhmYWlsLCAmIzM0O2lwIGxpbmsgYWRkIGxpbmsgdmV0aDEgbmFtZSAlcyB0eXBlIHZsYW4gaWQgJWQmIzM0OywKJiM0MzsJICAgIFZSRl9WTEFOX0lGQUNFLCBWUkZfVkxBTl9JRCk7CiYjNDM7CVNZUyhmYWlsLCAmIzM0O2lwIGxpbmsgc2V0ICVzIG1hc3RlciAlcyYjMzQ7LCBWUkZfVkxBTl9JRkFDRSwgVlJGX0lGQUNFKTsKJiM0MzsJU1lTKGZhaWwsICYjMzQ7aXAgbGluayBzZXQgZGV2ICVzIHVwJiMzNDssIFZSRl9WTEFOX0lGQUNFKTsKJiM0MzsJU1lTKGZhaWwsICYjMzQ7aXAgYWRkciBhZGQgJXMvMjQgZGV2ICVzJiMzNDssIElQVjRfVlJGX0lGQUNFX0FERFIsIFZSRl9WTEFOX0lGQUNFKTsKJiM0MzsJZXJyID0gd3JpdGVfc3lzY3RsKCYjMzQ7L3Byb2Mvc3lzL25ldC9pcHY0L2NvbmYvJiMzNDsgVlJGX1ZMQU5fSUZBQ0UgJiMzNDsvZm9yd2FyZGluZyYjMzQ7LCAmIzM0OzEmIzM0Oyk7CiYjNDM7CWlmICghQVNTRVJUX09LKGVyciwgJiMzNDt3cml0ZV9zeXNjdGwobmV0LmlwdjQuY29uZi4mIzM0OyBWUkZfVkxBTl9JRkFDRSAmIzM0Oy5mb3J3YXJkaW5nKSYjMzQ7KSkKJiM0MzsJCWdvdG8gZmFpbDsKJiM0MzsJU1lTKGZhaWwsICYjMzQ7aXAgcm91dGUgYWRkICVzLzMyIHZpYSAlcyYjMzQ7LCBJUFY0X1ZSRl9EU1QsIElQVjRfR1cxKTsKJiM0MzsJU1lTKGZhaWwsICYjMzQ7aXAgcm91dGUgYWRkIHRhYmxlICVzICVzLzMyIHZpYSAlcyYjMzQ7LAomIzQzOwkgICAgVlJGX1RBQkxFLCBJUFY0X1ZSRl9EU1QsIElQVjRfVlJGX0dXKTsKJiM0MzsKJiM0MzsJLyogbmVpZ2hib3VycyBvbiB0aGUgVkxBTiBzdWJpbnRlcmZhY2UgZm9yIHRoZSBub24tU0tJUF9ORUlHSCBjYXNlcyAqLwomIzQzOwllcnIgPSB3cml0ZV9zeXNjdGwoJiMzNDsvcHJvYy9zeXMvbmV0L2lwdjQvbmVpZ2gvJiMzNDsgVkxBTl9JRkFDRSAmIzM0Oy9nY19zdGFsZV90aW1lJiMzNDssICYjMzQ7OTAwJiMzNDspOwomIzQzOwlpZiAoIUFTU0VSVF9PSyhlcnIsICYjMzQ7d3JpdGVfc3lzY3RsKG5ldC5pcHY0Lm5laWdoLiYjMzQ7IFZMQU5fSUZBQ0UgJiMzNDsuZ2Nfc3RhbGVfdGltZSkmIzM0OykpCiYjNDM7CQlnb3RvIGZhaWw7CiYjNDM7CVNZUyhmYWlsLCAmIzM0O2lwIG5laWdoIGFkZCAlcyBkZXYgJXMgbGxhZGRyICVzIG51ZCBzdGFsZSYjMzQ7LAomIzQzOwkgICAgSVBWNF9WTEFOX0VHUkVTU19EU1QsIFZMQU5fSUZBQ0UsIERNQUMpOwomIzQzOwlTWVMoZmFpbCwgJiMzNDtpcCBuZWlnaCBhZGQgJXMgZGV2ICVzIGxsYWRkciAlcyBudWQgc3RhbGUmIzM0OywKJiM0MzsJICAgIElQVjRfVkxBTl9HVywgVkxBTl9JRkFDRSwgRE1BQzIpOwomIzQzOwomIzQzOwkvKiBhIFZMQU4gb24gdmV0aDIgd2l0aCBhIHJvdXRlIGluIHRoZSB0YmlkIHRlc3QgdGFibGUgKi8KJiM0MzsJU1lTKGZhaWwsICYjMzQ7aXAgbGluayBhZGQgbGluayB2ZXRoMiBuYW1lICVzIHR5cGUgdmxhbiBpZCAlZCYjMzQ7LAomIzQzOwkgICAgVEJJRF9WTEFOX0lGQUNFLCBUQklEX1ZMQU5fSUQpOwomIzQzOwlTWVMoZmFpbCwgJiMzNDtpcCBsaW5rIHNldCBkZXYgJXMgdXAmIzM0OywgVEJJRF9WTEFOX0lGQUNFKTsKJiM0MzsJU1lTKGZhaWwsICYjMzQ7aXAgcm91dGUgYWRkIHRhYmxlIDEwMCAlcy8zMiBkZXYgJXMmIzM0OywKJiM0MzsJICAgIElQVjRfVEJJRF9WTEFOX0RTVCwgVEJJRF9WTEFOX0lGQUNFKTsKJiM0MzsKJiM0MzsJLyogYSBsb2NrZWQtbXR1IHJvdXRlIHZpYSB0aGUgc3ViaW50ZXJmYWNlIGZvciB0aGUgRlJBR19ORUVERUQgY2FzZSAqLwomIzQzOwlTWVMoZmFpbCwgJiMzNDtpcCByb3V0ZSBhZGQgJXMvMzIgZGV2ICVzIG10dSBsb2NrIDEwMDAmIzM0OywKJiM0MzsJICAgIElQVjRfVkxBTl9NVFVfRFNULCBWTEFOX0lGQUNFKTsKJiM0MzsKIAlyZXR1cm4gMDsKIGZhaWw6CiAJcmV0dXJuIC0xOwpAQCAtMjE4LDkgJiM0Mzs1OTMsMTYgQEAgc3RhdGljIGludCBzZXRfbG9va3VwX3BhcmFtcyhzdHJ1Y3QgYnBmX2ZpYl9sb29rdXAgKnBhcmFtcywKIAltZW1zZXQocGFyYW1zLCAwLCBzaXplb2YoKnBhcmFtcykpOwogCiAJcGFyYW1zLSZndDtsNF9wcm90b2NvbCA9IElQUFJPVE9fVENQOwotCXBhcmFtcy0mZ3Q7aWZpbmRleCA9IGlmaW5kZXg7CiYjNDM7CXBhcmFtcy0mZ3Q7aWZpbmRleCA9IHRlc3QtJmd0O2lpZiA/IGlmX25hbWV0b2luZGV4KHRlc3QtJmd0O2lpZikgOiBpZmluZGV4OwogCXBhcmFtcy0mZ3Q7dGJpZCA9IHRlc3QtJmd0O3RiaWQ7CiAJcGFyYW1zLSZndDttYXJrID0gdGVzdC0mZ3Q7bWFyazsKJiM0MzsJcGFyYW1zLSZndDt0b3RfbGVuID0gdGVzdC0mZ3Q7dG90X2xlbjsKJiM0MzsKJiM0MzsJLyogaF92bGFuX3Byb3RvL2hfdmxhbl9UQ0kgdW5pb24gd2l0aCB0YmlkICovCiYjNDM7CWlmICh0ZXN0LSZndDtsb29rdXBfZmxhZ3MgJmFtcDsgQlBGX0ZJQl9MT09LVVBfVkxBTl9JTlBVVCkgewomIzQzOwkJcGFyYW1zLSZndDtoX3ZsYW5fcHJvdG8gPSBodG9ucyh0ZXN0LSZndDt2bGFuX3Byb3RvKTsKJiM0MzsJCXBhcmFtcy0mZ3Q7aF92bGFuX1RDSSA9IGh0b25zKHRlc3QtJmd0O3ZsYW5faWQpOwomIzQzOwl9CiAKIAlpZiAoaW5ldF9wdG9uKEFGX0lORVQ2LCB0ZXN0LSZndDtkYWRkciwgcGFyYW1zLSZndDtpcHY2X2RzdCkgPT0gMSkgewogCQlwYXJhbXMtJmd0O2ZhbWlseSA9IEFGX0lORVQ2OwpAQCAtMjk4LDcgJiM0Mzs2ODAsNyBAQCB2b2lkIHRlc3RfZmliX2xvb2t1cCh2b2lkKQogCXN0cnVjdCBuc3Rva2VuICpuc3Rva2VuID0gTlVMTDsKIAlzdHJ1Y3QgX19za19idWZmIHNrYiA9IHsgfTsKIAlzdHJ1Y3QgZmliX2xvb2t1cCAqc2tlbDsKLQlpbnQgcHJvZ19mZCwgZXJyLCByZXQsIGk7CiYjNDM7CWludCBwcm9nX2ZkLCB4ZHBfZmQsIGVyciwgcmV0LCBpOwogCiAJLyogVGhlIHRlc3QgZG9lcyBub3QgdXNlIHRoZSBza2ItJmd0O2RhdGEsIHNvCiAJICogdXNlIHBrdF92NiBmb3IgYm90aCB2NiBhbmQgdjQgdGVzdC4KQEAgLTMwOSwxMSAmIzQzOzY5MSwxNiBAQCB2b2lkIHRlc3RfZmliX2xvb2t1cCh2b2lkKQogCQkgICAgLmN0eF9pbiA9ICZhbXA7c2tiLAogCQkgICAgLmN0eF9zaXplX2luID0gc2l6ZW9mKHNrYiksCiAJKTsKJiM0MzsJTElCQlBGX09QVFMoYnBmX3Rlc3RfcnVuX29wdHMsIHhkcF9vcHRzLAomIzQzOwkJICAgIC5kYXRhX2luID0gJmFtcDtwa3RfdjYsCiYjNDM7CQkgICAgLmRhdGFfc2l6ZV9pbiA9IHNpemVvZihwa3RfdjYpLAomIzQzOwkpOwogCiAJc2tlbCA9IGZpYl9sb29rdXBfX29wZW5fYW5kX2xvYWQoKTsKIAlpZiAoIUFTU0VSVF9PS19QVFIoc2tlbCwgJiMzNDtza2VsIG9wZW5fYW5kX2xvYWQmIzM0OykpCiAJCXJldHVybjsKIAlwcm9nX2ZkID0gYnBmX3Byb2dyYW1fX2ZkKHNrZWwtJmd0O3Byb2dzLmZpYl9sb29rdXApOwomIzQzOwl4ZHBfZmQgPSBicGZfcHJvZ3JhbV9fZmQoc2tlbC0mZ3Q7cHJvZ3MuZmliX2xvb2t1cF94ZHApOwogCiAJU1lTKGZhaWwsICYjMzQ7aXAgbmV0bnMgYWRkICVzJiMzNDssIE5TX1RFU1QpOwogCkBAIC0zNDMsNiAmIzQzOzczMCwxNSBAQCB2b2lkIHRlc3RfZmliX2xvb2t1cCh2b2lkKQogCQlpZiAoIUFTU0VSVF9PSyhlcnIsICYjMzQ7YnBmX3Byb2dfdGVzdF9ydW5fb3B0cyYjMzQ7KSkKIAkJCWNvbnRpbnVlOwogCiYjNDM7CQkvKiBCUEZfRklCX0xPT0tVUF9WTEFOIGlzIFhEUC1vbmx5OyB0aGUgdGMgaGVscGVyIHJlamVjdHMgaXQuCiYjNDM7CQkgKiBUaGVzZSBjYXNlcyBhcmUgZXhlcmNpc2VkIG9uIHRoZSBYRFAgcGF0aCBiZWxvdy4KJiM0MzsJCSAqLwomIzQzOwkJaWYgKHRlc3RzW2ldLmxvb2t1cF9mbGFncyAmYW1wOyBCUEZfRklCX0xPT0tVUF9WTEFOKSB7CiYjNDM7CQkJQVNTRVJUX0VRKHNrZWwtJmd0O2Jzcy0mZ3Q7ZmliX2xvb2t1cF9yZXQsIC1FSU5WQUwsCiYjNDM7CQkJCSAgJiMzNDt0YyByZWplY3RzIEJQRl9GSUJfTE9PS1VQX1ZMQU4mIzM0Oyk7CiYjNDM7CQkJY29udGludWU7CiYjNDM7CQl9CiYjNDM7CiAJCUFTU0VSVF9FUShza2VsLSZndDtic3MtJmd0O2ZpYl9sb29rdXBfcmV0LCB0ZXN0c1tpXS5leHBlY3RlZF9yZXQsCiAJCQkgICYjMzQ7ZmliX2xvb2t1cF9yZXQmIzM0Oyk7CiAKQEAgLTM1Miw2ICYjNDM7NzQ4LDIxIEBAIHZvaWQgdGVzdF9maWJfbG9va3VwKHZvaWQpCiAJCWlmICh0ZXN0c1tpXS5leHBlY3RlZF9kc3QpCiAJCQlhc3NlcnRfZHN0X2lwKGZpYl9wYXJhbXMsIHRlc3RzW2ldLmV4cGVjdGVkX2RzdCk7CiAKJiM0MzsJCWlmICh0ZXN0c1tpXS5leHBlY3RlZF9kZXYpCiYjNDM7CQkJQVNTRVJUX0VRKGZpYl9wYXJhbXMtJmd0O2lmaW5kZXgsCiYjNDM7CQkJCSAgaWZfbmFtZXRvaW5kZXgodGVzdHNbaV0uZXhwZWN0ZWRfZGV2KSwgJiMzNDtpZmluZGV4JiMzNDspOwomIzQzOwomIzQzOwkJaWYgKHRlc3RzW2ldLmV4cGVjdGVkX210dSkKJiM0MzsJCQlBU1NFUlRfRVEoZmliX3BhcmFtcy0mZ3Q7bXR1X3Jlc3VsdCwgdGVzdHNbaV0uZXhwZWN0ZWRfbXR1LAomIzQzOwkJCQkgICYjMzQ7bXR1X3Jlc3VsdCYjMzQ7KTsKJiM0MzsKJiM0MzsJCWlmICh0ZXN0c1tpXS5jaGVja192bGFuKSB7CiYjNDM7CQkJQVNTRVJUX0VRKGZpYl9wYXJhbXMtJmd0O2hfdmxhbl9wcm90bywKJiM0MzsJCQkJICBodG9ucyh0ZXN0c1tpXS52bGFuX3Byb3RvKSwgJiMzNDtoX3ZsYW5fcHJvdG8mIzM0Oyk7CiYjNDM7CQkJQVNTRVJUX0VRKGZpYl9wYXJhbXMtJmd0O2hfdmxhbl9UQ0ksCiYjNDM7CQkJCSAgaHRvbnModGVzdHNbaV0udmxhbl9pZCksICYjMzQ7aF92bGFuX1RDSSYjMzQ7KTsKJiM0MzsJCX0KJiM0MzsKIAkJcmV0ID0gbWVtY21wKHRlc3RzW2ldLmRtYWMsIGZpYl9wYXJhbXMtJmd0O2RtYWMsIHNpemVvZih0ZXN0c1tpXS5kbWFjKSk7CiAJCWlmICghQVNTRVJUX0VRKHJldCwgMCwgJiMzNDtkbWFjIG5vdCBtYXRjaCYjMzQ7KSkgewogCQkJY2hhciBleHBlY3RlZFsxOF0sIGFjdHVhbFsxOF07CkBAIC0zNjEsMTUgJiM0Mzs3NzIsMzEzIEBAIHZvaWQgdGVzdF9maWJfbG9va3VwKHZvaWQpCiAJCQlwcmludGYoJiMzNDtkbWFjIGV4cGVjdGVkICVzIGFjdHVhbCAlcyAmIzM0OywgZXhwZWN0ZWQsIGFjdHVhbCk7CiAJCX0KIAotCQkvLyBlbnN1cmUgdGJpZCBpcyB6ZXJvJiMzOTtkIG91dCBhZnRlciBmaWIgbG9va3VwLgotCQlpZiAodGVzdHNbaV0ubG9va3VwX2ZsYWdzICZhbXA7IEJQRl9GSUJfTE9PS1VQX0RJUkVDVCkgewomIzQzOwkJLyoKJiM0MzsJCSAqIGVuc3VyZSB0YmlkIGlzIHplcm8mIzM5O2Qgb3V0IGFmdGVyIGZpYiBsb29rdXAuIFdpdGgKJiM0MzsJCSAqIEJQRl9GSUJfTE9PS1VQX1ZMQU4gdGhlIHVuaW9uIGhvbGRzIHRoZSBwYWNrZWQgdmxhbgomIzQzOwkJICogZmllbGRzIGluc3RlYWQsIHNvIHNraXAgdGhlIGNoZWNrIGZvciB0aG9zZS4KJiM0MzsJCSAqLwomIzQzOwkJaWYgKCh0ZXN0c1tpXS5sb29rdXBfZmxhZ3MgJmFtcDsgQlBGX0ZJQl9MT09LVVBfRElSRUNUKSAmYW1wOyZhbXA7CiYjNDM7CQkgICAgISh0ZXN0c1tpXS5sb29rdXBfZmxhZ3MgJmFtcDsgQlBGX0ZJQl9MT09LVVBfVkxBTikpIHsKIAkJCWlmICghQVNTRVJUX0VRKHNrZWwtJmd0O2Jzcy0mZ3Q7ZmliX3BhcmFtcy50YmlkLCAwLAogCQkJCQkmIzM0O2V4cGVjdGVkIGZpYl9wYXJhbXMudGJpZCB0byBiZSB6ZXJvJiMzNDspKQogCQkJCWdvdG8gZmFpbDsKIAkJfQogCX0KIAomIzQzOwkvKgomIzQzOwkgKiBSZS1ydW4gdGhlIGNhc2VzIHRocm91Z2ggYnBmX3hkcF9maWJfbG9va3VwKCkuIHRlc3RfcnVuIHVzZXMgdGhlCiYjNDM7CSAqIGN1cnJlbnQgbmV0bnMmIzM5OyBsb29wYmFjayBmb3IgY3R4LSZndDtyeHEtJmd0O2Rldiwgc28gZGV2X25ldCgpIGlzIE5TX1RFU1QKJiM0MzsJICogYW5kIHRoZSBsb29rdXAgcnVucyBhZ2FpbnN0IGl0cyBGSUIuIFRoZSBwYXRoLWluZGVwZW5kZW50IHJlc3VsdHMKJiM0MzsJICogKHJldHVybiBjb2RlLCBzd2FwcGVkIGlmaW5kZXgsIHZsYW4gdGFnLCBnYXRld2F5KSBtdXN0IG1hdGNoIHRoZSBza2IKJiM0MzsJICogcGF0aDsgdGhlIG5vLXRvdF9sZW4gbXR1X3Jlc3VsdCBpcyBza2Itc3BlY2lmaWMgYW5kIG5vdCByZWNoZWNrZWQuCiYjNDM7CSAqLwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgQVJSQVlfU0laRSh0ZXN0cyk7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQlpZiAoc2V0X2xvb2t1cF9wYXJhbXMoZmliX3BhcmFtcywgJmFtcDt0ZXN0c1tpXSwgc2tiLmlmaW5kZXgpKQomIzQzOwkJCWNvbnRpbnVlOwomIzQzOwomIzQzOwkJc2tlbC0mZ3Q7YnNzLSZndDtmaWJfbG9va3VwX3JldCA9IC0xOwomIzQzOwkJc2tlbC0mZ3Q7YnNzLSZndDtsb29rdXBfZmxhZ3MgPSB0ZXN0c1tpXS5sb29rdXBfZmxhZ3M7CiYjNDM7CiYjNDM7CQllcnIgPSBicGZfcHJvZ190ZXN0X3J1bl9vcHRzKHhkcF9mZCwgJmFtcDt4ZHBfb3B0cyk7CiYjNDM7CQlpZiAoIUFTU0VSVF9PSyhlcnIsICYjMzQ7eGRwIHRlc3RfcnVuJiMzNDspKQomIzQzOwkJCWNvbnRpbnVlOwomIzQzOwomIzQzOwkJaWYgKCFBU1NFUlRfRVEoc2tlbC0mZ3Q7YnNzLSZndDtmaWJfbG9va3VwX3JldCwgdGVzdHNbaV0uZXhwZWN0ZWRfcmV0LAomIzQzOwkJCSAgICAgICAmIzM0O3hkcCBmaWJfbG9va3VwX3JldCYjMzQ7KSkKJiM0MzsJCQlwcmludGYoJiMzNDsoeGRwKSAlc1xuJiMzNDssIHRlc3RzW2ldLmRlc2MpOwomIzQzOwomIzQzOwkJaWYgKHRlc3RzW2ldLmV4cGVjdGVkX2RldikKJiM0MzsJCQlBU1NFUlRfRVEoZmliX3BhcmFtcy0mZ3Q7aWZpbmRleCwKJiM0MzsJCQkJICBpZl9uYW1ldG9pbmRleCh0ZXN0c1tpXS5leHBlY3RlZF9kZXYpLAomIzQzOwkJCQkgICYjMzQ7eGRwIGlmaW5kZXgmIzM0Oyk7CiYjNDM7CiYjNDM7CQlpZiAodGVzdHNbaV0uZXhwZWN0ZWRfZHN0KQomIzQzOwkJCWFzc2VydF9kc3RfaXAoZmliX3BhcmFtcywgdGVzdHNbaV0uZXhwZWN0ZWRfZHN0KTsKJiM0MzsKJiM0MzsJCWlmICh0ZXN0c1tpXS5jaGVja192bGFuKSB7CiYjNDM7CQkJQVNTRVJUX0VRKGZpYl9wYXJhbXMtJmd0O2hfdmxhbl9wcm90bywKJiM0MzsJCQkJICBodG9ucyh0ZXN0c1tpXS52bGFuX3Byb3RvKSwgJiMzNDt4ZHAgaF92bGFuX3Byb3RvJiMzNDspOwomIzQzOwkJCUFTU0VSVF9FUShmaWJfcGFyYW1zLSZndDtoX3ZsYW5fVENJLAomIzQzOwkJCQkgIGh0b25zKHRlc3RzW2ldLnZsYW5faWQpLCAmIzM0O3hkcCBoX3ZsYW5fVENJJiMzNDspOwomIzQzOwkJfQomIzQzOwomIzQzOwkJcmV0ID0gbWVtY21wKHRlc3RzW2ldLmRtYWMsIGZpYl9wYXJhbXMtJmd0O2RtYWMsIHNpemVvZih0ZXN0c1tpXS5kbWFjKSk7CiYjNDM7CQlBU1NFUlRfRVEocmV0LCAwLCAmIzM0O3hkcCBkbWFjJiMzNDspOwomIzQzOwomIzQzOwkJLyoKJiM0MzsJCSAqIG10dV9yZXN1bHQgZnJvbSBhIHRvdF9sZW4gbG9va3VwIGlzIHRoZSByb3V0ZSBtdHUgYW5kIGlzCiYjNDM7CQkgKiBwYXRoLWluZGVwZW5kZW50OyB0aGUgbm8tdG90X2xlbiBhcm0gcmVhZHMgZGV2LSZndDttdHUgYW5kIGlzCiYjNDM7CQkgKiBza2Itb25seSwgc28gZ2F0ZSBvbiB0b3RfbGVuCiYjNDM7CQkgKi8KJiM0MzsJCWlmICh0ZXN0c1tpXS5leHBlY3RlZF9tdHUgJmFtcDsmYW1wOyB0ZXN0c1tpXS50b3RfbGVuKQomIzQzOwkJCUFTU0VSVF9FUShmaWJfcGFyYW1zLSZndDttdHVfcmVzdWx0LCB0ZXN0c1tpXS5leHBlY3RlZF9tdHUsCiYjNDM7CQkJCSAgJiMzNDt4ZHAgbXR1X3Jlc3VsdCYjMzQ7KTsKJiM0MzsJfQomIzQzOwomIzQzO2ZhaWw6CiYjNDM7CWlmIChuc3Rva2VuKQomIzQzOwkJY2xvc2VfbmV0bnMobnN0b2tlbik7CiYjNDM7CVNZU19OT0ZBSUwoJiMzNDtpcCBuZXRucyBkZWwgJiMzNDsgTlNfVEVTVCk7CiYjNDM7CWZpYl9sb29rdXBfX2Rlc3Ryb3koc2tlbCk7CiYjNDM7fQomIzQzOwomIzQzOyNkZWZpbmUgTlNfVkxBTl9BCSYjMzQ7ZmliX2xvb2t1cF92bGFuX25zX2EmIzM0OwomIzQzOyNkZWZpbmUgTlNfVkxBTl9CCSYjMzQ7ZmliX2xvb2t1cF92bGFuX25zX2ImIzM0OwomIzQzOwomIzQzOy8qCiYjNDM7ICogQSBWTEFOIGRldmljZSBjYW4gYmUgbW92ZWQgdG8gYW5vdGhlciBuZXRucyB3aGlsZSBzdGF5aW5nIHJlZ2lzdGVyZWQKJiM0MzsgKiBvbiBpdHMgcGFyZW50LiBOZWl0aGVyIGRpcmVjdGlvbiBtYXkgdGhlbiBjcm9zcyB0aGUgYm91bmRhcnk6IHRoZQomIzQzOyAqIGVncmVzcyBmbGFnIG11c3Qgbm90IHB1Ymxpc2ggdGhlIGZvcmVpZ24gcGFyZW50JiMzOTtzIGlmaW5kZXgsIGFuZCB0aGUKJiM0MzsgKiBpbnB1dCBmbGFnIG11c3QgZmFpbCBjbG9zZWQgcmF0aGVyIHRoYW4gdXNlIGEgZm9yZWlnbiBpbmdyZXNzLgomIzQzOyAqLwomIzQzO3ZvaWQgdGVzdF9maWJfbG9va3VwX3ZsYW5fbmV0bnModm9pZCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBicGZfZmliX2xvb2t1cCAqZmliX3BhcmFtczsKJiM0MzsJc3RydWN0IG5zdG9rZW4gKm5zdG9rZW4gPSBOVUxMOwomIzQzOwlzdHJ1Y3QgX19za19idWZmIHNrYiA9IHsgfTsKJiM0MzsJc3RydWN0IGZpYl9sb29rdXAgKnNrZWwgPSBOVUxMOwomIzQzOwlpbnQgcHJvZ19mZCwgeGRwX2ZkLCBlcnIsIHBhcmVudF9pZHgsIHZsYW5faWR4OwomIzQzOwomIzQzOwlMSUJCUEZfT1BUUyhicGZfdGVzdF9ydW5fb3B0cywgcnVuX29wdHMsCiYjNDM7CQkgICAgLmRhdGFfaW4gPSAmYW1wO3BrdF92NiwKJiM0MzsJCSAgICAuZGF0YV9zaXplX2luID0gc2l6ZW9mKHBrdF92NiksCiYjNDM7CQkgICAgLmN0eF9pbiA9ICZhbXA7c2tiLAomIzQzOwkJICAgIC5jdHhfc2l6ZV9pbiA9IHNpemVvZihza2IpLAomIzQzOwkpOwomIzQzOwlMSUJCUEZfT1BUUyhicGZfdGVzdF9ydW5fb3B0cywgeGRwX29wdHMsCiYjNDM7CQkgICAgLmRhdGFfaW4gPSAmYW1wO3BrdF92NiwKJiM0MzsJCSAgICAuZGF0YV9zaXplX2luID0gc2l6ZW9mKHBrdF92NiksCiYjNDM7CSk7CiYjNDM7CiYjNDM7CXNrZWwgPSBmaWJfbG9va3VwX19vcGVuX2FuZF9sb2FkKCk7CiYjNDM7CWlmICghQVNTRVJUX09LX1BUUihza2VsLCAmIzM0O3NrZWwgb3Blbl9hbmRfbG9hZCYjMzQ7KSkKJiM0MzsJCXJldHVybjsKJiM0MzsJcHJvZ19mZCA9IGJwZl9wcm9ncmFtX19mZChza2VsLSZndDtwcm9ncy5maWJfbG9va3VwKTsKJiM0MzsJeGRwX2ZkID0gYnBmX3Byb2dyYW1fX2ZkKHNrZWwtJmd0O3Byb2dzLmZpYl9sb29rdXBfeGRwKTsKJiM0MzsJZmliX3BhcmFtcyA9ICZhbXA7c2tlbC0mZ3Q7YnNzLSZndDtmaWJfcGFyYW1zOwomIzQzOwomIzQzOwlTWVMoZmFpbCwgJiMzNDtpcCBuZXRucyBhZGQgJXMmIzM0OywgTlNfVkxBTl9BKTsKJiM0MzsJU1lTKGZhaWwsICYjMzQ7aXAgbmV0bnMgYWRkICVzJiMzNDssIE5TX1ZMQU5fQik7CiYjNDM7CiYjNDM7CW5zdG9rZW4gPSBvcGVuX25ldG5zKE5TX1ZMQU5fQSk7CiYjNDM7CWlmICghQVNTRVJUX09LX1BUUihuc3Rva2VuLCAmIzM0O29wZW5fbmV0bnMoYSkmIzM0OykpCiYjNDM7CQlnb3RvIGZhaWw7CiYjNDM7CiYjNDM7CVNZUyhmYWlsLCAmIzM0O2lwIGxpbmsgYWRkIHZldGg3IHR5cGUgdmV0aCBwZWVyIG5hbWUgdmV0aDgmIzM0Oyk7CiYjNDM7CVNZUyhmYWlsLCAmIzM0O2lwIGxpbmsgc2V0IGRldiB2ZXRoNyB1cCYjMzQ7KTsKJiM0MzsJU1lTKGZhaWwsICYjMzQ7aXAgbGluayBhZGQgbGluayB2ZXRoNyBuYW1lIHZldGg3LjY2IHR5cGUgdmxhbiBpZCA2NiYjMzQ7KTsKJiM0MzsJU1lTKGZhaWwsICYjMzQ7aXAgbGluayBzZXQgdmV0aDcuNjYgbmV0bnMgJXMmIzM0OywgTlNfVkxBTl9CKTsKJiM0MzsKJiM0MzsJcGFyZW50X2lkeCA9IGlmX25hbWV0b2luZGV4KCYjMzQ7dmV0aDcmIzM0Oyk7CiYjNDM7CWlmICghQVNTRVJUX05FUShwYXJlbnRfaWR4LCAwLCAmIzM0O2lmX25hbWV0b2luZGV4KHZldGg3KSYjMzQ7KSkKJiM0MzsJCWdvdG8gZmFpbDsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogaW5wdXQ6IHRoZSBtb3ZlZCBkZXZpY2UgaXMgc3RpbGwgaW4gdmV0aDcmIzM5O3MgVkxBTiBncm91cCwgYnV0IGl0CiYjNDM7CSAqIGxpdmVzIGluIGFub3RoZXIgbmV0bnMsIHNvIHRoZSBsb29rdXAgbXVzdCBmYWlsIGNsb3NlZAomIzQzOwkgKi8KJiM0MzsJc2tiLmlmaW5kZXggPSBwYXJlbnRfaWR4OwomIzQzOwltZW1zZXQoZmliX3BhcmFtcywgMCwgc2l6ZW9mKCpmaWJfcGFyYW1zKSk7CiYjNDM7CWZpYl9wYXJhbXMtJmd0O2ZhbWlseSA9IEFGX0lORVQ7CiYjNDM7CWZpYl9wYXJhbXMtJmd0O2w0X3Byb3RvY29sID0gSVBQUk9UT19UQ1A7CiYjNDM7CWZpYl9wYXJhbXMtJmd0O2lmaW5kZXggPSBwYXJlbnRfaWR4OwomIzQzOwlmaWJfcGFyYW1zLSZndDtoX3ZsYW5fcHJvdG8gPSBodG9ucyhFVEhfUF84MDIxUSk7CiYjNDM7CWZpYl9wYXJhbXMtJmd0O2hfdmxhbl9UQ0kgPSBodG9ucyg2Nik7CiYjNDM7CWlmICghQVNTRVJUX0VRKGluZXRfcHRvbihBRl9JTkVULCAmIzM0OzEwLjY2LjAuMiYjMzQ7LCAmYW1wO2ZpYl9wYXJhbXMtJmd0O2lwdjRfZHN0KSwKJiM0MzsJCSAgICAgICAxLCAmIzM0O2luZXRfcHRvbihkc3QpJiMzNDspKQomIzQzOwkJZ290byBmYWlsOwomIzQzOwomIzQzOwlza2VsLSZndDtic3MtJmd0O2ZpYl9sb29rdXBfcmV0ID0gLTE7CiYjNDM7CXNrZWwtJmd0O2Jzcy0mZ3Q7bG9va3VwX2ZsYWdzID0gQlBGX0ZJQl9MT09LVVBfVkxBTl9JTlBVVCB8CiYjNDM7CQkJCSAgQlBGX0ZJQl9MT09LVVBfU0tJUF9ORUlHSDsKJiM0MzsJZXJyID0gYnBmX3Byb2dfdGVzdF9ydW5fb3B0cyhwcm9nX2ZkLCAmYW1wO3J1bl9vcHRzKTsKJiM0MzsJaWYgKCFBU1NFUlRfT0soZXJyLCAmIzM0O3Rlc3RfcnVuKGlucHV0KSYjMzQ7KSkKJiM0MzsJCWdvdG8gZmFpbDsKJiM0MzsJQVNTRVJUX0VRKHNrZWwtJmd0O2Jzcy0mZ3Q7ZmliX2xvb2t1cF9yZXQsIEJQRl9GSUJfTEtVUF9SRVRfTk9UX0ZXREVELAomIzQzOwkJICAmIzM0O2lucHV0IGFjcm9zcyBuZXRucyBmYWlscyBjbG9zZWQmIzM0Oyk7CiYjNDM7CUFTU0VSVF9FUShmaWJfcGFyYW1zLSZndDtpZmluZGV4LCBwYXJlbnRfaWR4LCAmIzM0O2lmaW5kZXggdW50b3VjaGVkJiMzNDspOwomIzQzOwlBU1NFUlRfRVEoZmliX3BhcmFtcy0mZ3Q7aF92bGFuX1RDSSwgaHRvbnMoNjYpLCAmIzM0O3RhZyB1bnRvdWNoZWQmIzM0Oyk7CiYjNDM7CiYjNDM7CWNsb3NlX25ldG5zKG5zdG9rZW4pOwomIzQzOwluc3Rva2VuID0gb3Blbl9uZXRucyhOU19WTEFOX0IpOwomIzQzOwlpZiAoIUFTU0VSVF9PS19QVFIobnN0b2tlbiwgJiMzNDtvcGVuX25ldG5zKGIpJiMzNDspKQomIzQzOwkJZ290byBmYWlsOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBlZ3Jlc3M6IHRoZSBmaWIgcmVzdWx0IGlzIHRoZSBWTEFOIGRldmljZSBoZXJlLCBidXQgaXRzIHBhcmVudAomIzQzOwkgKiBpcyBpbiB0aGUgb3RoZXIgbmV0bnMsIHNvIHRoZSBzd2FwIG11c3Qgbm90IGhhcHBlbgomIzQzOwkgKi8KJiM0MzsJU1lTKGZhaWwsICYjMzQ7aXAgbGluayBzZXQgZGV2IHZldGg3LjY2IHVwJiMzNDspOwomIzQzOwlTWVMoZmFpbCwgJiMzNDtpcCBhZGRyIGFkZCAxMC42Ni4wLjEvMjQgZGV2IHZldGg3LjY2JiMzNDspOwomIzQzOwllcnIgPSB3cml0ZV9zeXNjdGwoJiMzNDsvcHJvYy9zeXMvbmV0L2lwdjQvY29uZi92ZXRoNy42Ni9mb3J3YXJkaW5nJiMzNDssICYjMzQ7MSYjMzQ7KTsKJiM0MzsJaWYgKCFBU1NFUlRfT0soZXJyLCAmIzM0O3dyaXRlX3N5c2N0bChmb3J3YXJkaW5nKSYjMzQ7KSkKJiM0MzsJCWdvdG8gZmFpbDsKJiM0MzsKJiM0MzsJdmxhbl9pZHggPSBpZl9uYW1ldG9pbmRleCgmIzM0O3ZldGg3LjY2JiMzNDspOwomIzQzOwlpZiAoIUFTU0VSVF9ORVEodmxhbl9pZHgsIDAsICYjMzQ7aWZfbmFtZXRvaW5kZXgodmV0aDcuNjYpJiMzNDspKQomIzQzOwkJZ290byBmYWlsOwomIzQzOwomIzQzOwlza2IuaWZpbmRleCA9IHZsYW5faWR4OwomIzQzOwltZW1zZXQoZmliX3BhcmFtcywgMCwgc2l6ZW9mKCpmaWJfcGFyYW1zKSk7CiYjNDM7CWZpYl9wYXJhbXMtJmd0O2ZhbWlseSA9IEFGX0lORVQ7CiYjNDM7CWZpYl9wYXJhbXMtJmd0O2w0X3Byb3RvY29sID0gSVBQUk9UT19UQ1A7CiYjNDM7CWZpYl9wYXJhbXMtJmd0O2lmaW5kZXggPSB2bGFuX2lkeDsKJiM0MzsJaWYgKCFBU1NFUlRfRVEoaW5ldF9wdG9uKEFGX0lORVQsICYjMzQ7MTAuNjYuMC4yJiMzNDssICZhbXA7ZmliX3BhcmFtcy0mZ3Q7aXB2NF9kc3QpLAomIzQzOwkJICAgICAgIDEsICYjMzQ7aW5ldF9wdG9uKGRzdCkmIzM0OykgfHwKJiM0MzsJICAgICFBU1NFUlRfRVEoaW5ldF9wdG9uKEFGX0lORVQsICYjMzQ7MTAuNjYuMC4xJiMzNDssICZhbXA7ZmliX3BhcmFtcy0mZ3Q7aXB2NF9zcmMpLAomIzQzOwkJICAgICAgIDEsICYjMzQ7aW5ldF9wdG9uKHNyYykmIzM0OykpCiYjNDM7CQlnb3RvIGZhaWw7CiYjNDM7CiYjNDM7CXNrZWwtJmd0O2Jzcy0mZ3Q7ZmliX2xvb2t1cF9yZXQgPSAtMTsKJiM0MzsJc2tlbC0mZ3Q7YnNzLSZndDtsb29rdXBfZmxhZ3MgPSBCUEZfRklCX0xPT0tVUF9WTEFOIHwKJiM0MzsJCQkJICBCUEZfRklCX0xPT0tVUF9TS0lQX05FSUdIOwomIzQzOwllcnIgPSBicGZfcHJvZ190ZXN0X3J1bl9vcHRzKHhkcF9mZCwgJmFtcDt4ZHBfb3B0cyk7CiYjNDM7CWlmICghQVNTRVJUX09LKGVyciwgJiMzNDt0ZXN0X3J1bihlZ3Jlc3MpJiMzNDspKQomIzQzOwkJZ290byBmYWlsOwomIzQzOwlBU1NFUlRfRVEoc2tlbC0mZ3Q7YnNzLSZndDtmaWJfbG9va3VwX3JldCwgQlBGX0ZJQl9MS1VQX1JFVF9WTEFOX0ZBSUxVUkUsCiYjNDM7CQkgICYjMzQ7ZWdyZXNzIHJldHVybnMgVkxBTl9GQUlMVVJFJiMzNDspOwomIzQzOwlBU1NFUlRfRVEoZmliX3BhcmFtcy0mZ3Q7aWZpbmRleCwgdmxhbl9pZHgsCiYjNDM7CQkgICYjMzQ7Zm9yZWlnbiBwYXJlbnQgbm90IHB1Ymxpc2hlZCYjMzQ7KTsKJiM0MzsJQVNTRVJUX0VRKGZpYl9wYXJhbXMtJmd0O2hfdmxhbl9UQ0ksIDAsICYjMzQ7dmxhbiBmaWVsZHMgemVybyYjMzQ7KTsKJiM0MzsKJiM0MztmYWlsOgomIzQzOwlpZiAobnN0b2tlbikKJiM0MzsJCWNsb3NlX25ldG5zKG5zdG9rZW4pOwomIzQzOwlTWVNfTk9GQUlMKCYjMzQ7aXAgbmV0bnMgZGVsICYjMzQ7IE5TX1ZMQU5fQSk7CiYjNDM7CVNZU19OT0ZBSUwoJiMzNDtpcCBuZXRucyBkZWwgJiMzNDsgTlNfVkxBTl9CKTsKJiM0MzsJZmliX2xvb2t1cF9fZGVzdHJveShza2VsKTsKJiM0Mzt9CiYjNDM7CiYjNDM7I2RlZmluZSBSRURJUkVDVF9OUEtUUyAxMDAwCiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBUaGUgZWdyZXNzIGZsYWcgZXhpc3RzIHNvIGFuIFhEUCBwcm9ncmFtIGNhbiByZWRpcmVjdCB0byB0aGUgcGh5c2ljYWwKJiM0MzsgKiBwYXJlbnQuIEEgcmVkaXJlY3QgdGhhdCBsYW5kcyBvbiBhIFZMQU4gZGV2aWNlIGlzIGRyb3BwZWQgYXQKJiM0MzsgKiB4ZHBfZG9fZmx1c2goKSwgYmVjYXVzZSBhIFZMQU4gZGV2aWNlIGhhcyBubyBuZG9feGRwX3htaXQuIERyaXZlIHJlYWwKJiM0MzsgKiBmcmFtZXMgd2l0aCBCUEZfRl9URVNUX1hEUF9MSVZFX0ZSQU1FUywgd2hpY2ggcnVucyB0aGUgbmF0aXZlCiYjNDM7ICogeGRwX2RvX3JlZGlyZWN0KCkgJiM0MzsgeGRwX2RvX2ZsdXNoKCkgcGF0aDogYSByZWR1Y2libGUgVkxBTiBlZ3Jlc3MKJiM0MzsgKiByZXNvbHZlcyB0byB2ZXRoMSBhbmQgaXMgZGVsaXZlcmVkIHRvIGl0cyBwZWVyIHZldGgyLCB3aGlsZSBhIFFpblEKJiM0MzsgKiBlZ3Jlc3MgcmV0dXJucyBWTEFOX0ZBSUxVUkUgYW5kIGlzIHBhc3NlZCB0byB0aGUgc3RhY2sgaW5zdGVhZCBvZgomIzQzOyAqIHJlZGlyZWN0ZWQgdG8gYSBkZXZpY2UgdGhhdCB3b3VsZCBzaWxlbnRseSBkcm9wIGl0LgomIzQzOyAqLwomIzQzO3ZvaWQgdGVzdF9maWJfbG9va3VwX3ZsYW5fcmVkaXJlY3Qodm9pZCkKJiM0Mzt7CiYjNDM7CWludCByZWRpcmVjdF9mZCwgZXJyLCB2ZXRoMV9pZHgsIHZldGgyX2lkeCA9IC0xOwomIzQzOwlzdHJ1Y3QgYnBmX2ZpYl9sb29rdXAgKmZpYl9wYXJhbXM7CiYjNDM7CXN0cnVjdCBuc3Rva2VuICpuc3Rva2VuID0gTlVMTDsKJiM0MzsJc3RydWN0IGZpYl9sb29rdXAgKnNrZWwgPSBOVUxMOwomIzQzOwlib29sIHhkcF9hdHRhY2hlZCA9IGZhbHNlOwomIzQzOwomIzQzOwlMSUJCUEZfT1BUUyhicGZfdGVzdF9ydW5fb3B0cywgbGZfb3B0cywKJiM0MzsJCSAgICAuZGF0YV9pbiA9ICZhbXA7cGt0X3Y0LAomIzQzOwkJICAgIC5kYXRhX3NpemVfaW4gPSBzaXplb2YocGt0X3Y0KSwKJiM0MzsJCSAgICAuZmxhZ3MgPSBCUEZfRl9URVNUX1hEUF9MSVZFX0ZSQU1FUywKJiM0MzsJCSAgICAucmVwZWF0ID0gUkVESVJFQ1RfTlBLVFMsCiYjNDM7CSk7CiYjNDM7CiYjNDM7CXNrZWwgPSBmaWJfbG9va3VwX19vcGVuX2FuZF9sb2FkKCk7CiYjNDM7CWlmICghQVNTRVJUX09LX1BUUihza2VsLCAmIzM0O3NrZWwgb3Blbl9hbmRfbG9hZCYjMzQ7KSkKJiM0MzsJCXJldHVybjsKJiM0MzsJcmVkaXJlY3RfZmQgPSBicGZfcHJvZ3JhbV9fZmQoc2tlbC0mZ3Q7cHJvZ3MuZmliX2xvb2t1cF9yZWRpcmVjdCk7CiYjNDM7CWZpYl9wYXJhbXMgPSAmYW1wO3NrZWwtJmd0O2Jzcy0mZ3Q7ZmliX3BhcmFtczsKJiM0MzsKJiM0MzsJU1lTKGZhaWwsICYjMzQ7aXAgbmV0bnMgYWRkICVzJiMzNDssIE5TX1RFU1QpOwomIzQzOwluc3Rva2VuID0gb3Blbl9uZXRucyhOU19URVNUKTsKJiM0MzsJaWYgKCFBU1NFUlRfT0tfUFRSKG5zdG9rZW4sICYjMzQ7b3Blbl9uZXRucyYjMzQ7KSkKJiM0MzsJCWdvdG8gZmFpbDsKJiM0MzsJaWYgKHNldHVwX25ldG5zKCkpCiYjNDM7CQlnb3RvIGZhaWw7CiYjNDM7CiYjNDM7CXZldGgxX2lkeCA9IGlmX25hbWV0b2luZGV4KCYjMzQ7dmV0aDEmIzM0Oyk7CiYjNDM7CXZldGgyX2lkeCA9IGlmX25hbWV0b2luZGV4KCYjMzQ7dmV0aDImIzM0Oyk7CiYjNDM7CWlmICghQVNTRVJUX05FUSh2ZXRoMV9pZHgsIDAsICYjMzQ7aWZfbmFtZXRvaW5kZXgodmV0aDEpJiMzNDspIHx8CiYjNDM7CSAgICAhQVNTRVJUX05FUSh2ZXRoMl9pZHgsIDAsICYjMzQ7aWZfbmFtZXRvaW5kZXgodmV0aDIpJiMzNDspKQomIzQzOwkJZ290byBmYWlsOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBBIHJlZGlyZWN0IHRvIHZldGgxIGlzIGRlbGl2ZXJlZCB0byBpdHMgcGVlciB2ZXRoMi4gdmV0aF94ZHBfeG1pdCgpCiYjNDM7CSAqIG9ubHkgYWNjZXB0cyB0aGUgZnJhbWUgaWYgdmV0aDImIzM5O3MgTkFQSSBpcyB1cCwgd2hpY2ggb24gdmV0aCBtZWFucwomIzQzOwkgKiB2ZXRoMiBjYXJyaWVzIGFuIFhEUCBwcm9ncmFtOyB4ZHBfY291bnQgdGFsbGllcyB3aGF0IGFycml2ZXMuCiYjNDM7CSAqLwomIzQzOwllcnIgPSBicGZfeGRwX2F0dGFjaCh2ZXRoMl9pZHgsIGJwZl9wcm9ncmFtX19mZChza2VsLSZndDtwcm9ncy54ZHBfY291bnQpLAomIzQzOwkJCSAgICAgWERQX0ZMQUdTX0RSVl9NT0RFLCBOVUxMKTsKJiM0MzsJaWYgKCFBU1NFUlRfT0soZXJyLCAmIzM0O2F0dGFjaCB4ZHBfY291bnQgb24gdmV0aDImIzM0OykpCiYjNDM7CQlnb3RvIGZhaWw7CiYjNDM7CXhkcF9hdHRhY2hlZCA9IHRydWU7CiYjNDM7CiYjNDM7CS8qIHJlZHVjaWJsZSBWTEFOIGVncmVzczogcmVzb2x2ZXMgdG8gdGhlIHBoeXNpY2FsIHBhcmVudCB2ZXRoMSAqLwomIzQzOwltZW1zZXQoZmliX3BhcmFtcywgMCwgc2l6ZW9mKCpmaWJfcGFyYW1zKSk7CiYjNDM7CWZpYl9wYXJhbXMtJmd0O2ZhbWlseSA9IEFGX0lORVQ7CiYjNDM7CWZpYl9wYXJhbXMtJmd0O2w0X3Byb3RvY29sID0gSVBQUk9UT19UQ1A7CiYjNDM7CWZpYl9wYXJhbXMtJmd0O2lmaW5kZXggPSB2ZXRoMV9pZHg7CiYjNDM7CWlmICghQVNTRVJUX0VRKGluZXRfcHRvbihBRl9JTkVULCBJUFY0X0lGQUNFX0FERFIsICZhbXA7ZmliX3BhcmFtcy0mZ3Q7aXB2NF9zcmMpLAomIzQzOwkJICAgICAgIDEsICYjMzQ7aW5ldF9wdG9uKHNyYykmIzM0OykgfHwKJiM0MzsJICAgICFBU1NFUlRfRVEoaW5ldF9wdG9uKEFGX0lORVQsIElQVjRfVkxBTl9FR1JFU1NfRFNULCAmYW1wO2ZpYl9wYXJhbXMtJmd0O2lwdjRfZHN0KSwKJiM0MzsJCSAgICAgICAxLCAmIzM0O2luZXRfcHRvbihyZWR1Y2libGUgZHN0KSYjMzQ7KSkKJiM0MzsJCWdvdG8gZmFpbDsKJiM0MzsJc2tlbC0mZ3Q7YnNzLSZndDtsb29rdXBfZmxhZ3MgPSBCUEZfRklCX0xPT0tVUF9WTEFOIHwgQlBGX0ZJQl9MT09LVVBfU0tJUF9ORUlHSDsKJiM0MzsJc2tlbC0mZ3Q7YnNzLSZndDtyZWRpcmVjdGVkID0gMDsKJiM0MzsJc2tlbC0mZ3Q7YnNzLSZndDtwYXNzZWQgPSAwOwomIzQzOwlza2VsLSZndDtic3MtJmd0O2RlbGl2ZXJlZCA9IDA7CiYjNDM7CiYjNDM7CWVyciA9IGJwZl9wcm9nX3Rlc3RfcnVuX29wdHMocmVkaXJlY3RfZmQsICZhbXA7bGZfb3B0cyk7CiYjNDM7CWlmICghQVNTRVJUX09LKGVyciwgJiMzNDt0ZXN0X3J1bihyZWR1Y2libGUgZWdyZXNzKSYjMzQ7KSkKJiM0MzsJCWdvdG8gZmFpbDsKJiM0MzsJQVNTRVJUX0VRKHNrZWwtJmd0O2Jzcy0mZ3Q7cmVkaXJlY3RlZCwgUkVESVJFQ1RfTlBLVFMsICYjMzQ7cmVkdWNpYmxlIGVncmVzcyByZWRpcmVjdGVkJiMzNDspOwomIzQzOwlBU1NFUlRfRVEoc2tlbC0mZ3Q7YnNzLSZndDtwYXNzZWQsIDAsICYjMzQ7cmVkdWNpYmxlIGVncmVzcyBub3QgcGFzc2VkJiMzNDspOwomIzQzOwlBU1NFUlRfR1Qoc2tlbC0mZ3Q7YnNzLSZndDtkZWxpdmVyZWQsIDAsICYjMzQ7cmVkdWNpYmxlIGVncmVzcyBkZWxpdmVyZWQgdG8gdmV0aDImIzM0Oyk7CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIFFpblEgZWdyZXNzOiBub3QgcmVkdWNpYmxlLCBzbyB0aGUgbG9va3VwIHJldHVybnMgVkxBTl9GQUlMVVJFIGFuZAomIzQzOwkgKiB0aGUgcHJvZ3JhbSBwYXNzZXMgdGhlIGZyYW1lIGluc3RlYWQgb2YgcmVkaXJlY3RpbmcgdG8gdGhlIGlubmVyCiYjNDM7CSAqIFZMQU4gZGV2aWNlLiByZWRpcmVjdGVkID09IDAgaXMgdGhlIGFzc2VydGlvbiB0aGF0IG1hdHRlcnM6IHRoZQomIzQzOwkgKiBwcm9ncmFtIGRpZCBub3QgcmVkaXJlY3QgdG8gYSBkZXZpY2UgdGhhdCB3b3VsZCBkcm9wIHRoZSBmcmFtZSBhdAomIzQzOwkgKiB4ZHBfZG9fZmx1c2goKS4gdmV0aDImIzM5O3MgZGVsaXZlcmVkIGNvdW50IGlzIG5vdCBjaGVja2VkIGhlcmUsIHNpbmNlCiYjNDM7CSAqIGEgcGFzc2VkIGZyYW1lIGNhbiBzdGlsbCByZWFjaCB2ZXRoMiB0aHJvdWdoIHRoZSBzdGFjayYjMzk7cyBmb3J3YXJkaW5nCiYjNDM7CSAqIHBhdGgsIHdoaWNoIGlzIHVucmVsYXRlZCB0byB0aGUgcmVkaXJlY3QgdW5kZXIgdGVzdC4KJiM0MzsJICovCiYjNDM7CW1lbXNldChmaWJfcGFyYW1zLCAwLCBzaXplb2YoKmZpYl9wYXJhbXMpKTsKJiM0MzsJZmliX3BhcmFtcy0mZ3Q7ZmFtaWx5ID0gQUZfSU5FVDsKJiM0MzsJZmliX3BhcmFtcy0mZ3Q7bDRfcHJvdG9jb2wgPSBJUFBST1RPX1RDUDsKJiM0MzsJZmliX3BhcmFtcy0mZ3Q7aWZpbmRleCA9IHZldGgxX2lkeDsKJiM0MzsJaWYgKCFBU1NFUlRfRVEoaW5ldF9wdG9uKEFGX0lORVQsIElQVjRfSUZBQ0VfQUREUiwgJmFtcDtmaWJfcGFyYW1zLSZndDtpcHY0X3NyYyksCiYjNDM7CQkgICAgICAgMSwgJiMzNDtpbmV0X3B0b24oc3JjKSYjMzQ7KSB8fAomIzQzOwkgICAgIUFTU0VSVF9FUShpbmV0X3B0b24oQUZfSU5FVCwgSVBWNF9RSU5RX0RTVCwgJmFtcDtmaWJfcGFyYW1zLSZndDtpcHY0X2RzdCksCiYjNDM7CQkgICAgICAgMSwgJiMzNDtpbmV0X3B0b24ocWlucSBkc3QpJiMzNDspKQomIzQzOwkJZ290byBmYWlsOwomIzQzOwlza2VsLSZndDtic3MtJmd0O2xvb2t1cF9mbGFncyA9IEJQRl9GSUJfTE9PS1VQX1ZMQU4gfCBCUEZfRklCX0xPT0tVUF9TS0lQX05FSUdIOwomIzQzOwlza2VsLSZndDtic3MtJmd0O3JlZGlyZWN0ZWQgPSAwOwomIzQzOwlza2VsLSZndDtic3MtJmd0O3Bhc3NlZCA9IDA7CiYjNDM7CiYjNDM7CWVyciA9IGJwZl9wcm9nX3Rlc3RfcnVuX29wdHMocmVkaXJlY3RfZmQsICZhbXA7bGZfb3B0cyk7CiYjNDM7CWlmICghQVNTRVJUX09LKGVyciwgJiMzNDt0ZXN0X3J1bihxaW5xIGVncmVzcykmIzM0OykpCiYjNDM7CQlnb3RvIGZhaWw7CiYjNDM7CUFTU0VSVF9FUShza2VsLSZndDtic3MtJmd0O3Bhc3NlZCwgUkVESVJFQ1RfTlBLVFMsICYjMzQ7cWlucSBlZ3Jlc3MgcGFzc2VkJiMzNDspOwomIzQzOwlBU1NFUlRfRVEoc2tlbC0mZ3Q7YnNzLSZndDtyZWRpcmVjdGVkLCAwLCAmIzM0O3FpbnEgZWdyZXNzIG5vdCByZWRpcmVjdGVkJiMzNDspOwomIzQzOwogZmFpbDoKJiM0MzsJaWYgKHhkcF9hdHRhY2hlZCkKJiM0MzsJCWJwZl94ZHBfZGV0YWNoKHZldGgyX2lkeCwgWERQX0ZMQUdTX0RSVl9NT0RFLCBOVUxMKTsKIAlpZiAobnN0b2tlbikKIAkJY2xvc2VfbmV0bnMobnN0b2tlbik7CiAJU1lTX05PRkFJTCgmIzM0O2lwIG5ldG5zIGRlbCAmIzM0OyBOU19URVNUKTsKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9maWJfbG9va3VwLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvZmliX2xvb2t1cC5jCmluZGV4IDdiNWRkMjIxNGZmNDZhLi44NjJhMWU5NDU3YjRlMCAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2ZpYl9sb29rdXAuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvZmliX2xvb2t1cC5jCkBAIC0xOSw0ICYjNDM7MTksNDAgQEAgaW50IGZpYl9sb29rdXAoc3RydWN0IF9fc2tfYnVmZiAqc2tiKQogCXJldHVybiBUQ19BQ1RfU0hPVDsKIH0KIAomIzQzO1NFQygmIzM0O3hkcCYjMzQ7KQomIzQzO2ludCBmaWJfbG9va3VwX3hkcChzdHJ1Y3QgeGRwX21kICpjdHgpCiYjNDM7ewomIzQzOwlmaWJfbG9va3VwX3JldCA9IGJwZl9maWJfbG9va3VwKGN0eCwgJmFtcDtmaWJfcGFyYW1zLCBzaXplb2YoZmliX3BhcmFtcyksCiYjNDM7CQkJCQlsb29rdXBfZmxhZ3MpOwomIzQzOwomIzQzOwlyZXR1cm4gWERQX0RST1A7CiYjNDM7fQomIzQzOwomIzQzO2ludCByZWRpcmVjdGVkID0gMDsKJiM0MztpbnQgcGFzc2VkID0gMDsKJiM0MztpbnQgZGVsaXZlcmVkID0gMDsKJiM0MzsKJiM0MztTRUMoJiMzNDt4ZHAmIzM0OykKJiM0MztpbnQgZmliX2xvb2t1cF9yZWRpcmVjdChzdHJ1Y3QgeGRwX21kICpjdHgpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgYnBmX2ZpYl9sb29rdXAgcGFyYW1zID0gZmliX3BhcmFtczsKJiM0MzsJbG9uZyByZXQ7CiYjNDM7CiYjNDM7CXJldCA9IGJwZl9maWJfbG9va3VwKGN0eCwgJmFtcDtwYXJhbXMsIHNpemVvZihwYXJhbXMpLCBsb29rdXBfZmxhZ3MpOwomIzQzOwlpZiAocmV0ID09IEJQRl9GSUJfTEtVUF9SRVRfU1VDQ0VTUykgewomIzQzOwkJcmVkaXJlY3RlZCYjNDM7JiM0Mzs7CiYjNDM7CQlyZXR1cm4gYnBmX3JlZGlyZWN0KHBhcmFtcy5pZmluZGV4LCAwKTsKJiM0MzsJfQomIzQzOwomIzQzOwlwYXNzZWQmIzQzOyYjNDM7OwomIzQzOwlyZXR1cm4gWERQX1BBU1M7CiYjNDM7fQomIzQzOwomIzQzO1NFQygmIzM0O3hkcCYjMzQ7KQomIzQzO2ludCB4ZHBfY291bnQoc3RydWN0IHhkcF9tZCAqY3R4KQomIzQzO3sKJiM0MzsJZGVsaXZlcmVkJiM0MzsmIzQzOzsKJiM0MzsJcmV0dXJuIFhEUF9EUk9QOwomIzQzO30KJiM0MzsKIGNoYXIgX2xpY2Vuc2VbXSBTRUMoJiMzNDtsaWNlbnNlJiMzNDspID0gJiMzNDtHUEwmIzM0OzsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjQgMDM6MjU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjMyMTIKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiA3NzYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQlBGIEZJQiBMb29rdXAgVkxBTiBQYXRjaCBBbmFseXNpcyBhbmQgRnV6emluZyBTdHJhdGVneSoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCB0aGF0IGFkZHMgVkxBTiBzdXBwb3J0IHRvIHRoZSBgYnBmX2ZpYl9sb29rdXBgIGZ1bmN0aW9uYWxpdHkuICBNeSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgdGhhdCB0aGlzIGlzIGEgc2lnbmlmaWNhbnQgY2hhbmdlLCB0b3VjaGluZyBzZXZlcmFsIGtleSBhcmVhcy4gU3BlY2lmaWNhbGx5LCB0aGUgcGF0Y2ggaGFzIHRvdWNoZWQgYGluY2x1ZGUvdWFwaS9saW51eC9icGYuaGAsIGBuZXQvY29yZS9maWx0ZXIuY2AsIGB0b29scy9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmhgLCBhbmQgdGhlIEJQRiBzZWxmdGVzdHMuCgpUaGUgY29yZSBvZiB0aGlzIG1vZGlmaWNhdGlvbiBzZWVtcyB0byByZXNpZGUgaW4gYG5ldC9jb3JlL2ZpbHRlci5jYC4gIEkgc2VlIG5ldyBmdW5jdGlvbnM6IGBicGZfZmliX3NldF9md2RfcGFyYW1zYCBhbmQgYGJwZl9maWJfdmxhbl9pbnB1dF9kZXZgLiAgSXQgYWxzbyBsb29rcyBsaWtlIHRoZSBleGlzdGluZyBsb29rdXAgZnVuY3Rpb25zLCBgYnBmX2lwdjRfZmliX2xvb2t1cGAsIGBicGZfaXB2Nl9maWJfbG9va3VwYCwgYGJwZl94ZHBfZmliX2xvb2t1cGAsIGFuZCBgYnBmX3NrYl9maWJfbG9va3VwYCBoYXZlIGJlZW4gdXBkYXRlZC4gVGhlIHVwZGF0ZSBpbmNsdWRlcyBjaGVja3MgZm9yIGBCUEZfRklCX0xPT0tVUF9WTEFOYCBhbmQgYEJQRl9GSUJfTE9PS1VQX1ZMQU5fSU5QVVRgIGZsYWdzLCBhbmQgdGhhdCYjMzk7cyB0aGUgYXJlYSBJIG5lZWQgdG8gcGF5IHRoZSBtb3N0IGF0dGVudGlvbiB0byB3aGVuIGdlbmVyYXRpbmcgYSBmdXp6aW5nIHRlc3QgcGxhbi4KCkkgbmVlZCB0byBmb2N1cyBteSBmdXp6aW5nIGVmZm9ydHMgb24gdGhvc2UgY29yZSBsb29rdXAgZnVuY3Rpb25zOiBgYnBmX2lwdjRfZmliX2xvb2t1cGAsIGBicGZfaXB2Nl9maWJfbG9va3VwYCwgYGJwZl94ZHBfZmliX2xvb2t1cGAsIGFuZCBgYnBmX3NrYl9maWJfbG9va3VwYC4gIEkmIzM5O2xsIGNvbnNpZGVyIHRoZSBzdGF0aWMgZnVuY3Rpb25zIGBicGZfZmliX3NldF9md2RfcGFyYW1zYCBhbmQgYGJwZl9maWJfdmxhbl9pbnB1dF9kZXZgIHRvIGJlIGNvdmVyZWQgYXMgcGFydCBvZiBmdXp6aW5nIHRoZSBsb29rdXAgZnVuY3Rpb25zLCBhcyBJJiMzOTttIGFzc3VtaW5nIHRoZXJlJiMzOTtzIG5vIHdheSB0byBjYWxsIHRoZW0gaW5kZXBlbmRlbnRseSAodW5sZXNzIEkgbWlzcyBzb21ldGhpbmcgZHVyaW5nIG15IHJldmlldykuCgpMZXQmIzM5O3MgbG9vayBhdCB0aGUgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMuICBJIHNlZSBgQ09ORklHX1ZMQU5fODAyMVFgIGlzIHVzZWQgd2l0aGluIGBicGZfZmliX3NldF9md2RfcGFyYW1zYCB1bmRlciBhIGNvbmRpdGlvbmFsLgoKYGBgYwojaWYgSVNfRU5BQkxFRChDT05GSUdfVkxBTl84MDIxUSkKCWlmICgoZmxhZ3MgJmFtcDsgQlBGX0ZJQl9MT09LVVBfVkxBTikgJmFtcDsmYW1wOyBpc192bGFuX2RldihkZXYpKSB7CmBgYAoKU28sIHRvIGZ1bGx5IGV4ZXJjaXNlIGBCUEZfRklCX0xPT0tVUF9WTEFOYCwgSSYjMzk7bGwgKmRlZmluaXRlbHkqIG5lZWQgdG8gZW5zdXJlIGBDT05GSUdfVkxBTl84MDIxUWAgaXMgZW5hYmxlZCBkdXJpbmcgdGVzdGluZy4gIEkmIzM5O2xsIGFsc28gaGF2ZSB0byBiZSBjYXJlZnVsIHdoZW4gY3JhZnRpbmcgdGhlIGZ1enppbmcgaW5wdXQgdG8gY29ycmVjdGx5IHNldCB0aGUgYXBwcm9wcmlhdGUgZmxhZ3MgdG8gaGl0IHRoYXQgY29kZSBwYXRoLiAgVGhlIHVzdWFsIHN1c3BlY3RzLCBgQ09ORklHX0lORVRgIGFuZCBgQ09ORklHX0lQVjZgIGFyZSBhbHNvIGluIHVzZS4KCknigJlsbCBkb3VibGUtY2hlY2sgdGhpcyBhZ2FpbiB3aXRoIGEgYGdyZXBwZXJgIHBhc3MgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMuIE15IGZ1enppbmcgdGVzdCBwbGFuIHdpbGwgbmVlZCB0byByZWZsZWN0IHRoZSBuZWNlc3NhcnkgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMgc28gSSBhbSBhcyB0aG9yb3VnaCBhcyBwb3NzaWJsZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNCAwMzoyNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDticGZfZmliX3NldF9md2RfcGFyYW1zJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2NvcmUvZmlsdGVyLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2NvcmUvZmlsdGVyLmM9NjE5MT1zdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9za2JfZ2V0X3hmcm1fc3RhdGVfcHJvdG8gPSB7XG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtNjIwMy0jaWYgSVNfRU5BQkxFRChDT05GSUdfSU5FVCkgfHwgSVNfRU5BQkxFRChDT05GSUdfSVBWNilcbm5ldC9jb3JlL2ZpbHRlci5jOjYyMDQ6c3RhdGljIGludCBicGZfZmliX3NldF9md2RfcGFyYW1zKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG5uZXQvY29yZS9maWx0ZXIuYy02MjA1LVx0XHRcdFx0ICBzdHJ1Y3QgYnBmX2ZpYl9sb29rdXAgKnBhcmFtcyxcbi0tXG5uZXQvY29yZS9maWx0ZXIuYz02MjU0PXN0YXRpYyBpbnQgYnBmX2lwdjRfZmliX2xvb2t1cChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBicGZfZmliX2xvb2t1cCAqcGFyYW1zLFxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTY0MDAtc2V0X2Z3ZF9wYXJhbXM6XG5uZXQvY29yZS9maWx0ZXIuYzo2NDAxOlx0cmV0dXJuIGJwZl9maWJfc2V0X2Z3ZF9wYXJhbXMoZGV2LCBwYXJhbXMsIGZsYWdzLCBtdHUsIGluX2lmaW5kZXgpO1xubmV0L2NvcmUvZmlsdGVyLmMtNjQwMi19XG4tLVxubmV0L2NvcmUvZmlsdGVyLmM9NjQwNj1zdGF0aWMgaW50IGJwZl9pcHY2X2ZpYl9sb29rdXAoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgYnBmX2ZpYl9sb29rdXAgKnBhcmFtcyxcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy02NTUzLXNldF9md2RfcGFyYW1zOlxubmV0L2NvcmUvZmlsdGVyLmM6NjU1NDpcdHJldHVybiBicGZfZmliX3NldF9md2RfcGFyYW1zKGRldiwgcGFyYW1zLCBmbGFncywgbXR1LCBpbl9pZmluZGV4KTtcbm5ldC9jb3JlL2ZpbHRlci5jLTY1NTUtfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI0IDAzOjI2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI1MDYzCgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHN1bW1hcml6ZWQgYXMgeW91IHJlcXVlc3RlZDoKCioqRGVjb25zdHJ1Y3RpbmcgYnBmX2ZpYl92bGFuX2lucHV0X2RldjogQSBEZWVwIERpdmUqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgbWluZCBpbW1lZGlhdGVseSBnb2VzIHRvIHRoZSBwb3RlbnRpYWwgaW1wYWN0IG9mIGBicGZfZmliX3ZsYW5faW5wdXRfZGV2YC4gV2UmIzM5O3JlIHRhbGtpbmcgYWJvdXQgYSBCUEYgaG9vaywgcHJlc3VtYWJseSB3aXRoaW4gdGhlIGNvbnRleHQgb2YgYSBmb3J3YXJkaW5nIEluZm9ybWF0aW9uIEJhc2UgKEZJQikgbG9va3VwLCBhbmQgaXQmIzM5O3Mgc3BlY2lmaWNhbGx5IGRlYWxpbmcgd2l0aCBWTEFOIGluZ3Jlc3MgcHJvY2Vzc2luZy4gJiMzNDtJbnB1dCBkZXYmIzM0OyBzdHJvbmdseSBzdWdnZXN0cyBpdCYjMzk7cyBpbnZvbHZlZCBpbiBoYW5kbGluZyB0aGUgaW5ncmVzcyBpbnRlcmZhY2Ugb3IgZGV2aWNlLgoKSSYjMzk7bSBzdGFydGluZyB0byB0aGluayBhYm91dCB0aGUgaW1wbGljYXRpb25zIGZvciBuZXR3b3JrIHBlcmZvcm1hbmNlLiBUaGlzIEJQRiBob29rIGxpa2VseSBhbGxvd3MgZm9yIGluLWtlcm5lbCB0cmFmZmljIHN0ZWVyaW5nIGJhc2VkIG9uIFZMQU4gaW5mb3JtYXRpb24gKmJlZm9yZSogdGhlIHN0YW5kYXJkIHJvdXRpbmcgcHJvY2Vzcy4gVGhpcyBpcyBwb3dlcmZ1bC4KCk15IGltbWVkaWF0ZSBxdWVzdGlvbnMgYXJlOgoKKiAgIEhvdyBpcyB0aGlzIGludGVncmF0ZWQgd2l0aCB0aGUgdW5kZXJseWluZyBGSUIgc3RydWN0dXJlPyBJcyBpdCBwcmUtbG9va3VwIGZpbHRlcmluZyBvciBzb21ldGhpbmcgbW9yZSBjb21wbGV4PwoqICAgV2hhdCYjMzk7cyB0aGUgcGVyZm9ybWFuY2Ugb3ZlcmhlYWQ/IERvZXMgdGhpcyBhZGQgc2lnbmlmaWNhbnQgbGF0ZW5jeSBjb21wYXJlZCB0byBwdXJlIGhhcmR3YXJlIGZvcndhcmRpbmc/CiogICBXaGF0JiMzOTtzIHRoZSBpbnRlcmFjdGlvbiB3aXRoIG90aGVyIEJQRiBwcm9ncmFtcz8gQ291bGQgaXQgYmUgY2hhaW5lZCB3aXRoIGV4aXN0aW5nIGVCUEYgZmlsdGVycyBmb3IgaW5jcmVhc2VkIGZsZXhpYmlsaXR5PwoqICAgSG93IGlzIFZMQU4gaW5mb3JtYXRpb24gZXh0cmFjdGVkIChlLmcuLCBmcm9tIHRoZSBoZWFkZXIsIHNwZWNpZmljIG1ldGFkYXRhKT8gQW5kLCBob3cgZG9lcyB0aGlzIGludGVyYWN0IHdpdGggdGhlIG5ldHdvcmsgc3RhY2smIzM5O3MgaGFuZGxpbmcgb2YgVkxBTiB0YWdnZWQgZnJhbWVzPwoKSSBhbHNvIHdvbmRlciBhYm91dCB0aGUgdXNlIGNhc2VzIGhlcmUuIEl0IHByb2JhYmx5IGVuYWJsZXMgVkxBTi1hd2FyZSB0cmFmZmljIGVuZ2luZWVyaW5nLCBwb2xpY3kgZW5mb3JjZW1lbnQsIG9yIGV2ZW4gbW9yZSBhZHZhbmNlZCBzY2VuYXJpb3MuIEkmIzM5O20gaW1hZ2luaW5nIHNjZW5hcmlvcyBpbnZvbHZpbmcgc3BlY2lmaWMgVkxBTnMsIHBlcmhhcHMgb24gYSBzZXJ2aWNlIHByb3ZpZGVyIGVkZ2UsIGJlaW5nIHJvdXRlZCBkaWZmZXJlbnRseSBiYXNlZCBvbiBzb21lIGNvbmRpdGlvbi4gVGhpcyBjb3VsZCBiZSB1c2VmdWwgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIHdpdGggYSBsb3Qgb2YgdGVuYW50IG5ldHdvcmtzLgoKSSYjMzk7bSBpbnRyaWd1ZWQuIEkmIzM5O20gZ29pbmcgdG8gaGF2ZSB0byBkaXZlIGludG8gdGhlIGtlcm5lbCBzb3VyY2UgYW5kIHRoZSByZWxldmFudCBkb2N1bWVudGF0aW9uIHRvIGdldCBhIGhhbmRsZSBvbiB0aGUgYWN0dWFsIGltcGxlbWVudGF0aW9uIGRldGFpbHMgYW5kIGV4cGxvcmUgaG93IHRoaXMgZml0cyBpbnRvIG15IG92ZXJhbGwgbmV0d29yayBkZXNpZ24gc3RyYXRlZ2llcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNCAwMzoyNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDticGZfZmliX3ZsYW5faW5wdXRfZGV2JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2NvcmUvZmlsdGVyLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2NvcmUvZmlsdGVyLmM9NjIwND1zdGF0aWMgaW50IGJwZl9maWJfc2V0X2Z3ZF9wYXJhbXMoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy02MjMyLVxubmV0L2NvcmUvZmlsdGVyLmM6NjIzMzpzdGF0aWMgc3RydWN0IG5ldF9kZXZpY2UgKmJwZl9maWJfdmxhbl9pbnB1dF9kZXYoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbm5ldC9jb3JlL2ZpbHRlci5jLTYyMzQtXHRcdFx0XHRcdFx0IGNvbnN0IHN0cnVjdCBicGZfZmliX2xvb2t1cCAqcGFyYW1zKVxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jPTYyNTQ9c3RhdGljIGludCBicGZfaXB2NF9maWJfbG9va3VwKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGJwZl9maWJfbG9va3VwICpwYXJhbXMsXG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtNjI3MS1cdGlmIChmbGFncyBcdTAwMjYgQlBGX0ZJQl9MT09LVVBfVkxBTl9JTlBVVCkge1xubmV0L2NvcmUvZmlsdGVyLmM6NjI3MjpcdFx0ZGV2ID0gYnBmX2ZpYl92bGFuX2lucHV0X2RldihkZXYsIHBhcmFtcyk7XG5uZXQvY29yZS9maWx0ZXIuYy02MjczLVx0XHRpZiAoSVNfRVJSKGRldikpXG4tLVxubmV0L2NvcmUvZmlsdGVyLmM9NjQwNj1zdGF0aWMgaW50IGJwZl9pcHY2X2ZpYl9sb29rdXAoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgYnBmX2ZpYl9sb29rdXAgKnBhcmFtcyxcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy02NDI5LVx0aWYgKGZsYWdzIFx1MDAyNiBCUEZfRklCX0xPT0tVUF9WTEFOX0lOUFVUKSB7XG5uZXQvY29yZS9maWx0ZXIuYzo2NDMwOlx0XHRkZXYgPSBicGZfZmliX3ZsYW5faW5wdXRfZGV2KGRldiwgcGFyYW1zKTtcbm5ldC9jb3JlL2ZpbHRlci5jLTY0MzEtXHRcdGlmIChJU19FUlIoZGV2KSlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNCAwMzoyNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNTkwNwoJCQkJCQkJb3V0cHV0OiAyMjUKCQkJCQkJCXRob3VnaHRzOiA0NTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyB0aGUgQlBGIEZJQiBMb29rdXAgSGVscGVyIHdpdGggVkxBTiBTdXBwb3J0KioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaW50cm9kdWNlcyBzb21lIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUgQlBGIEZJQiBsb29rdXAgaGVscGVyLCBzcGVjaWZpY2FsbHkgYWRkaW5nIFZMQU4gaGFuZGxpbmcuIFJpZ2h0IGF3YXksIHRoaXMgc2NyZWFtcyAmIzM0O2Z1enppbmcgdGFyZ2V0LiYjMzQ7IFRoZSBjb3JlIG9mIHJvdXRpbmcgbG9naWMgaW4gQlBGIGlzIGJlaW5nIG1vZGlmaWVkLCBhbmQgdGhhdCYjMzk7cyBhbHdheXMgYSBwb3RlbnRpYWwgYXJlYSBmb3IgdnVsbmVyYWJpbGl0aWVzLCBlc3BlY2lhbGx5IHNpbmNlIHVzZXJzcGFjZSBCUEYgcHJvZ3JhbXMgY2FuIG5vdyBpbmZsdWVuY2UgdGhlIFZMQU4gcmVzb2x1dGlvbiBwcm9jZXNzIHRocm91Z2ggWERQIG9yIFRDLiBXZSBuZWVkIHRvIGJlIHRob3JvdWdoLgoKTXkgaW5pdGlhbCBmb2N1cyBuZWVkcyB0byBiZSBvbiB0aGVzZSBmdW5jdGlvbnM6IGBicGZfaXB2NF9maWJfbG9va3VwYCwgYGJwZl9pcHY2X2ZpYl9sb29rdXBgLCBgYnBmX3hkcF9maWJfbG9va3VwYCwgYGJwZl9za2JfZmliX2xvb2t1cGAsIGBicGZfZmliX3NldF9md2RfcGFyYW1zYCwgYW5kIGBicGZfZmliX3ZsYW5faW5wdXRfZGV2YC4gVGhlc2UgYXJlIHRoZSBrZXkgZW50cnkgcG9pbnRzIGFuZCBzdXBwb3J0aW5nIGZ1bmN0aW9ucyB0aGF0IGxpa2VseSBjb250YWluIHRoZSBuZXcgVkxBTi1yZWxhdGVkIGxvZ2ljLgoKSSBuZWVkIHRvIG1ha2Ugc3VyZSBgVkxBTl84MDIxUWAgaXMgZW5hYmxlZCBpbiB0aGUgY29uZmlndXJhdGlvbiB0byBleGVyY2lzZSB0aGUgY2hhbmdlcywgYnV0IGxldCYjMzk7cyBxdWlja2x5IHZlcmlmeSB0aGF0IHRoZSBzdGFuZGFyZCBuZXR3b3JraW5nIGNvbmZpZyBvcHRpb25zIGxpa2UgYENPTkZJR19JTkVUYCwgYENPTkZJR19JUFY2YCwgYENPTkZJR19CUEZfU1lTQ0FMTGAsIGFuZCBgQ09ORklHX05FVGAgYXJlIGVuYWJsZWQuIEdvb2QuCgpJJiMzOTttIHRoaW5raW5nIGFib3V0IHRoZSByYXRpb25hbGUgYmVoaW5kIHRoaXMgcGF0Y2guIFRoZSBwYXRjaCBpcyBhZGRpbmcgVkxBTiBzdXBwb3J0IHRocm91Z2ggdGhlIGBCUEZfRklCX0xPT0tVUF9WTEFOYCBhbmQgYEJQRl9GSUJfTE9PS1VQX1ZMQU5fSU5QVVRgIGZsYWdzIHRvIGBicGZfZmliX2xvb2t1cGAuIFRoaXMgaXMgY29yZSwgc28gZnV6emluZyBpcyAqZXNzZW50aWFsKiB0byBtYWtlIHN1cmUgbm90aGluZyBnb2VzIHdyb25nIHdpdGggdGhpcyBuZXcgcmVzb2x1dGlvbi4KCkFuZCBhcyBJIHJlLXJldmlldyBteSBmb2N1cyBzeW1ib2xzLCBJJiMzOTttIGp1c3QgcXVpY2tseSBjb25maXJtaW5nIHRoYXQgYGJwZl9maWJfdmxhbl9pbnB1dF9kZXZgIGFuZCBgYnBmX2ZpYl9zZXRfZndkX3BhcmFtc2AgYXJlIGluZGVlZCBpbmNsdWRlZC4gVGhleSBhcmUgc3RhdGljLCBidXQgbm90IGlubGluZSwgc28gdGhleSYjMzk7cmUgdmFsaWQgdGFyZ2V0cy4KClJpZ2h0LCBJJiMzOTttIHJlYWR5IHRvIHNldCB1cCB0aGUgZnV6emluZyBlbnZpcm9ubWVudCBhbmQgZ2V0IHRvIHdvcmsuIExldCYjMzk7cyBzdGFydCB3aXRoIHRoZSBiYXNlIGNvbmZpZ3VyYXRpb24gYW5kIGJ1aWxkIGZyb20gdGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjQgMDM6MjY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1ZMQU5fODAyMVEmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDticGZfaXB2NF9maWJfbG9va3VwJiMzNDssCiAgICAmIzM0O2JwZl9pcHY2X2ZpYl9sb29rdXAmIzM0OywKICAgICYjMzQ7YnBmX3hkcF9maWJfbG9va3VwJiMzNDssCiAgICAmIzM0O2JwZl9za2JfZmliX2xvb2t1cCYjMzQ7LAogICAgJiMzNDticGZfZmliX3NldF9md2RfcGFyYW1zJiMzNDssCiAgICAmIzM0O2JwZl9maWJfdmxhbl9pbnB1dF9kZXYmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIEJQRiBGSUIgbG9va3VwIGhlbHBlciAoYGJwZl9maWJfbG9va3VwYCksIGFkZGluZyBzdXBwb3J0IGZvciBWTEFOcyB2aWEgYEJQRl9GSUJfTE9PS1VQX1ZMQU5gIGFuZCBgQlBGX0ZJQl9MT09LVVBfVkxBTl9JTlBVVGAgZmxhZ3MuIFRoaXMgbW9kaWZpZXMgY29yZSByb3V0aW5nIGxvb2t1cCBsb2dpYyB3aXRoaW4gQlBGIHByb2dyYW1zLCB3aGljaCBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgYnkgbG9hZGluZyBhbmQgZXhlY3V0aW5nIEJQRiBwcm9ncmFtcyAoWERQIG9yIFRDKS4gRnV6emluZyBpcyByZXF1aXJlZCB0byBlbnN1cmUgdGhlIG5ldyBWTEFOIHJlc29sdXRpb24gbG9naWMgYW5kIGl0cyBpbnRlcmFjdGlvbiB3aXRoIHRoZSBuZXR3b3JraW5nIHN0YWNrIGlzIHJvYnVzdC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7VkxBTl84MDIxUSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2JwZl9pcHY0X2ZpYl9sb29rdXAmIzM0OywKICAgICYjMzQ7YnBmX2lwdjZfZmliX2xvb2t1cCYjMzQ7LAogICAgJiMzNDticGZfeGRwX2ZpYl9sb29rdXAmIzM0OywKICAgICYjMzQ7YnBmX3NrYl9maWJfbG9va3VwJiMzNDssCiAgICAmIzM0O2JwZl9maWJfc2V0X2Z3ZF9wYXJhbXMmIzM0OywKICAgICYjMzQ7YnBmX2ZpYl92bGFuX2lucHV0X2RldiYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUgQlBGIEZJQiBsb29rdXAgaGVscGVyIChgYnBmX2ZpYl9sb29rdXBgKSwgYWRkaW5nIHN1cHBvcnQgZm9yIFZMQU5zIHZpYSBgQlBGX0ZJQl9MT09LVVBfVkxBTmAgYW5kIGBCUEZfRklCX0xPT0tVUF9WTEFOX0lOUFVUYCBmbGFncy4gVGhpcyBtb2RpZmllcyBjb3JlIHJvdXRpbmcgbG9va3VwIGxvZ2ljIHdpdGhpbiBCUEYgcHJvZ3JhbXMsIHdoaWNoIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSBieSBsb2FkaW5nIGFuZCBleGVjdXRpbmcgQlBGIHByb2dyYW1zIChYRFAgb3IgVEMpLiBGdXp6aW5nIGlzIHJlcXVpcmVkIHRvIGVuc3VyZSB0aGUgbmV3IFZMQU4gcmVzb2x1dGlvbiBsb2dpYyBhbmQgaXRzIGludGVyYWN0aW9uIHdpdGggdGhlIG5ldHdvcmtpbmcgc3RhY2sgaXMgcm9idXN0LiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDYtMjRUMDM6MjU6NTMuMTQwNDA5NDI4WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjUzNDMwMDg2MjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVkxBTl84MDIxUVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJwZl9pcHY0X2ZpYl9sb29rdXBcIixcbiAgICBcImJwZl9pcHY2X2ZpYl9sb29rdXBcIixcbiAgICBcImJwZl94ZHBfZmliX2xvb2t1cFwiLFxuICAgIFwiYnBmX3NrYl9maWJfbG9va3VwXCIsXG4gICAgXCJicGZfZmliX3NldF9md2RfcGFyYW1zXCIsXG4gICAgXCJicGZfZmliX3ZsYW5faW5wdXRfZGV2XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIEJQRiBGSUIgbG9va3VwIGhlbHBlciAoYGJwZl9maWJfbG9va3VwYCksIGFkZGluZyBzdXBwb3J0IGZvciBWTEFOcyB2aWEgYEJQRl9GSUJfTE9PS1VQX1ZMQU5gIGFuZCBgQlBGX0ZJQl9MT09LVVBfVkxBTl9JTlBVVGAgZmxhZ3MuIFRoaXMgbW9kaWZpZXMgY29yZSByb3V0aW5nIGxvb2t1cCBsb2dpYyB3aXRoaW4gQlBGIHByb2dyYW1zLCB3aGljaCBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgYnkgbG9hZGluZyBhbmQgZXhlY3V0aW5nIEJQRiBwcm9ncmFtcyAoWERQIG9yIFRDKS4gRnV6emluZyBpcyByZXF1aXJlZCB0byBlbnN1cmUgdGhlIG5ldyBWTEFOIHJlc29sdXRpb24gbG9naWMgYW5kIGl0cyBpbnRlcmFjdGlvbiB3aXRoIHRoZSBuZXR3b3JraW5nIHN0YWNrIGlzIHJvYnVzdC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjRUMDM6MjU6NTMuMTQwNDE0NTY4WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NTYxMjY2MjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCAzNTMzNzFjZGE5YjdlOWM3MjdlODhhMGI5ZjdkZjE1ZDUwZmVlYjhlXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBXZWQgSnVuIDI0IDAzOjI1OjUxIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaCBiL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaFxcbmluZGV4IDg5YjM2ZGU1ZmRiYjZkLi5kNDIxODk1NGM1MGY1MyAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmhcXG4rKysgYi9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmhcXG5AQCAtMzUzMiw2ICszNTMyLDQ1IEBAIHVuaW9uIGJwZl9hdHRyIHtcXG4gICpcXHRcXHRcXHRVc2UgdGhlIG1hcmsgcHJlc2VudCBpbiAqcGFyYW1zKi1cXHUwMDNlbWFyayBmb3IgdGhlIGZpYiBsb29rdXAuXFxuICAqXFx0XFx0XFx0VGhpcyBvcHRpb24gc2hvdWxkIG5vdCBiZSB1c2VkIHdpdGggQlBGX0ZJQl9MT09LVVBfRElSRUNULFxcbiAgKlxcdFxcdFxcdGFzIGl0IG9ubHkgaGFzIG1lYW5pbmcgZm9yIGZ1bGwgbG9va3Vwcy5cXG4rICpcXHRcXHQqKkJQRl9GSUJfTE9PS1VQX1ZMQU4qKlxcbisgKlxcdFxcdFxcdElmIHRoZSBmaWIgbG9va3VwIHJlc29sdmVzIHRvIGEgVkxBTiBkZXZpY2Ugd2hvc2VcXG4rICpcXHRcXHRcXHRwYXJlbnQgaXMgYSByZWFsIChub24tVkxBTikgZGV2aWNlLCBzZXRcXG4rICpcXHRcXHRcXHQqcGFyYW1zKi1cXHUwMDNlaF92bGFuX3Byb3RvIGFuZCAqcGFyYW1zKi1cXHUwMDNlaF92bGFuX1RDSSBmcm9tXFxuKyAqXFx0XFx0XFx0dGhlIFZMQU4gZGV2aWNlIGFuZCByZXBsYWNlICpwYXJhbXMqLVxcdTAwM2VpZmluZGV4IHdpdGggdGhlXFxuKyAqXFx0XFx0XFx0cGFyZW50J3MgaWZpbmRleC4gKnBhcmFtcyotXFx1MDAzZWhfdmxhbl9UQ0kgY2FycmllcyB0aGUgVklEXFxuKyAqXFx0XFx0XFx0b25seSwgd2l0aCBQQ1AgYW5kIERFSSBiaXRzIHplcm87IGEgY29uc3VtZXIgd2FudGluZyB0b1xcbisgKlxcdFxcdFxcdHNldCBlZ3Jlc3MgcHJpb3JpdHkgd3JpdGVzIFBDUCBpdHNlbGYuICpwYXJhbXMqLVxcdTAwM2VzbWFjIGlzXFxuKyAqXFx0XFx0XFx0dGhlIFZMQU4gZGV2aWNlJ3Mgb3duIGFkZHJlc3MsIHdoaWNoIGNhbiBkaWZmZXIgZnJvbSB0aGVcXG4rICpcXHRcXHRcXHRwYXJlbnQncy4gT25seSB0aGUgaW1tZWRpYXRlIHBhcmVudCBpcyByZXNvbHZlZDsgaWYgaXRcXG4rICpcXHRcXHRcXHRpcyBpdHNlbGYgYSBWTEFOIGRldmljZSAoUWluUSkgb3IgaW4gYW5vdGhlciBuYW1lc3BhY2UsXFxuKyAqXFx0XFx0XFx0dGhlIGVncmVzcyBjYW5ub3QgYmUgcmVkdWNlZCB0byBhIHBoeXNpY2FsIGRldmljZSBwbHVzXFxuKyAqXFx0XFx0XFx0b25lIHRhZyBhbmQgdGhlIGxvb2t1cCByZXR1cm5zXFxuKyAqXFx0XFx0XFx0KipCUEZfRklCX0xLVVBfUkVUX1ZMQU5fRkFJTFVSRSoqIHdpdGggKnBhcmFtcyotXFx1MDAzZWlmaW5kZXhcXG4rICpcXHRcXHRcXHRsZWZ0IGF0IHRoZSBpbnB1dC4gUmUtaXNzdWUgd2l0aG91dFxcbisgKlxcdFxcdFxcdCoqQlBGX0ZJQl9MT09LVVBfVkxBTioqIHRvIG9idGFpbiB0aGUgVkxBTiBkZXZpY2UncyBvd25cXG4rICpcXHRcXHRcXHRpZmluZGV4LiBUaGUgc3dhcCBhbmQgdGhlIHZsYW4gZmllbGRzXFxuKyAqXFx0XFx0XFx0YXJlIHdyaXR0ZW4gb25seSBvbiBzdWNjZXNzOyBvdGhlciBvdXRwdXQgZmllbGRzIGtlZXBcXG4rICpcXHRcXHRcXHR0aGUgaGVscGVyJ3MgZXhpc3RpbmcgYmVoYXZpb3VyLCBzbyBhIGZyYWctbmVlZGVkIHJlc3VsdFxcbisgKlxcdFxcdFxcdHN0aWxsIHJlcG9ydHMgdGhlIHJvdXRlIG10dSBpbiAqcGFyYW1zKi1cXHUwMDNlbXR1X3Jlc3VsdC5cXG4rICpcXHRcXHRcXHRUaGlzIGZsYWcgaXMgb25seSB2YWxpZCBmb3IgWERQIHByb2dyYW1zOyB0YyBwcm9ncmFtc1xcbisgKlxcdFxcdFxcdHJlY2VpdmUgLUVJTlZBTCBzaW5jZSB0aGV5IGNhbiByZWRpcmVjdCB0byB0aGUgVkxBTlxcbisgKlxcdFxcdFxcdGRldmljZSBkaXJlY3RseS5cXG4rICpcXHRcXHQqKkJQRl9GSUJfTE9PS1VQX1ZMQU5fSU5QVVQqKlxcbisgKlxcdFxcdFxcdFRyZWF0ICpwYXJhbXMqLVxcdTAwM2VoX3ZsYW5fcHJvdG8gYW5kICpwYXJhbXMqLVxcdTAwM2VoX3ZsYW5fVENJXFxuKyAqXFx0XFx0XFx0YXMgYW4gaW5wdXQgVkxBTiB0YWcgYW5kIHJ1biB0aGUgbG9va3VwIGFzIGlmIGluZ3Jlc3NcXG4rICpcXHRcXHRcXHRoYWQgaGFwcGVuZWQgb24gdGhlIFZMQU4gc3ViaW50ZXJmYWNlIGNhcnJ5aW5nIHRoYXQgdGFnXFxuKyAqXFx0XFx0XFx0b24gKnBhcmFtcyotXFx1MDAzZWlmaW5kZXguIFRoZSBWSUQgaXMgdGhlIGxvdyAxMiBiaXRzIG9mXFxuKyAqXFx0XFx0XFx0KnBhcmFtcyotXFx1MDAzZWhfdmxhbl9UQ0k7ICpwYXJhbXMqLVxcdTAwM2VoX3ZsYW5fcHJvdG8gbXVzdCBiZVxcbisgKlxcdFxcdFxcdEVUSF9QXzgwMjFRIG9yIEVUSF9QXzgwMjFBRCBpbiBuZXR3b3JrIGJ5dGUgb3JkZXIsIGVsc2VcXG4rICpcXHRcXHRcXHQqKi1FSU5WQUwqKi4gSWYgKnBhcmFtcyotXFx1MDAzZWlmaW5kZXggaXMgaXRzZWxmIGEgVkxBTlxcbisgKlxcdFxcdFxcdGRldmljZSwgaXRzIGlubmVyIChRaW5RKSBzdWJpbnRlcmZhY2UgaXMgbWF0Y2hlZDsgZm9yIGFcXG4rICpcXHRcXHRcXHRib25kIG9yIHRlYW0sIHBhc3MgdGhlIG1hc3RlcidzIGlmaW5kZXguIEFuIHVubWF0Y2hlZFxcbisgKlxcdFxcdFxcdHRhZywgYSBkb3duIGRldmljZSwgb3Igb25lIGluIGFub3RoZXIgbmFtZXNwYWNlIHJldHVybnNcXG4rICpcXHRcXHRcXHQqKkJQRl9GSUJfTEtVUF9SRVRfTk9UX0ZXREVEKiosIG1pcnJvcmluZyByZWFsIGluZ3Jlc3MuXFxuKyAqXFx0XFx0XFx0QSBWSUQgb2YgMCBpcyBsb29rZWQgdXAgbGl0ZXJhbGx5LCBzbyBkbyBub3Qgc2V0IHRoaXNcXG4rICpcXHRcXHRcXHRmbGFnIGZvciBwcmlvcml0eS10YWdnZWQgZnJhbWVzLiBDYW5ub3QgYmUgY29tYmluZWQgd2l0aFxcbisgKlxcdFxcdFxcdCoqQlBGX0ZJQl9MT09LVVBfVEJJRCoqIG9yICoqQlBGX0ZJQl9MT09LVVBfT1VUUFVUKipcXG4rICpcXHRcXHRcXHQocmV0dXJucyAqKi1FSU5WQUwqKikuXFxuICAqXFxuICAqXFx0XFx0KmN0eCogaXMgZWl0aGVyICoqc3RydWN0IHhkcF9tZCoqIGZvciBYRFAgcHJvZ3JhbXMgb3JcXG4gICpcXHRcXHQqKnN0cnVjdCBza19idWZmKiogdGMgY2xzX2FjdCBwcm9ncmFtcy5cXG5AQCAtNzMyNyw2ICs3MzY2LDggQEAgZW51bSB7XFxuIFxcdEJQRl9GSUJfTE9PS1VQX1RCSUQgICAgPSAoMVUgXFx1MDAzY1xcdTAwM2MgMyksXFxuIFxcdEJQRl9GSUJfTE9PS1VQX1NSQyAgICAgPSAoMVUgXFx1MDAzY1xcdTAwM2MgNCksXFxuIFxcdEJQRl9GSUJfTE9PS1VQX01BUksgICAgPSAoMVUgXFx1MDAzY1xcdTAwM2MgNSksXFxuK1xcdEJQRl9GSUJfTE9PS1VQX1ZMQU4gICAgPSAoMVUgXFx1MDAzY1xcdTAwM2MgNiksXFxuK1xcdEJQRl9GSUJfTE9PS1VQX1ZMQU5fSU5QVVQgPSAoMVUgXFx1MDAzY1xcdTAwM2MgNyksXFxuIH07XFxuIFxcbiBlbnVtIHtcXG5AQCAtNzM0MCw2ICs3MzgxLDcgQEAgZW51bSB7XFxuIFxcdEJQRl9GSUJfTEtVUF9SRVRfTk9fTkVJR0gsICAgICAvKiBubyBuZWlnaGJvciBlbnRyeSBmb3IgbmggKi9cXG4gXFx0QlBGX0ZJQl9MS1VQX1JFVF9GUkFHX05FRURFRCwgIC8qIGZyYWdtZW50YXRpb24gcmVxdWlyZWQgdG8gZndkICovXFxuIFxcdEJQRl9GSUJfTEtVUF9SRVRfTk9fU1JDX0FERFIsICAvKiBmYWlsZWQgdG8gZGVyaXZlIElQIHNyYyBhZGRyICovXFxuK1xcdEJQRl9GSUJfTEtVUF9SRVRfVkxBTl9GQUlMVVJFLCAvKiBWTEFOIGVncmVzcywgcGFyZW50IHVucmVzb2x2YWJsZSAqL1xcbiB9O1xcbiBcXG4gc3RydWN0IGJwZl9maWJfbG9va3VwIHtcXG5AQCAtNzM5Myw3ICs3NDM1LDEzIEBAIHN0cnVjdCBicGZfZmliX2xvb2t1cCB7XFxuIFxcbiBcXHR1bmlvbiB7XFxuIFxcdFxcdHN0cnVjdCB7XFxuLVxcdFxcdFxcdC8qIG91dHB1dCAqL1xcbitcXHRcXHRcXHQvKlxcbitcXHRcXHRcXHQgKiBvdXRwdXQgd2l0aCBCUEZfRklCX0xPT0tVUF9WTEFOOiBzZXQgZnJvbSB0aGVcXG4rXFx0XFx0XFx0ICogcmVzb2x2ZWQgZWdyZXNzIFZMQU4gZGV2aWNlIChzZWUgdGhlIGZsYWcpOyB6ZXJvZWRcXG4rXFx0XFx0XFx0ICogb24gb3RoZXIgc3VjY2Vzc2Z1bCBsb29rdXBzLiBpbnB1dCB3aXRoXFxuK1xcdFxcdFxcdCAqIEJQRl9GSUJfTE9PS1VQX1ZMQU5fSU5QVVQ6IHRoZSBWTEFOIHRhZyB0byBzY29wZVxcbitcXHRcXHRcXHQgKiB0aGUgbG9va3VwIGJ5LlxcbitcXHRcXHRcXHQgKi9cXG4gXFx0XFx0XFx0X19iZTE2XFx0aF92bGFuX3Byb3RvO1xcbiBcXHRcXHRcXHRfX2JlMTZcXHRoX3ZsYW5fVENJO1xcbiBcXHRcXHR9O1xcbmRpZmYgLS1naXQgYS9uZXQvY29yZS9maWx0ZXIuYyBiL25ldC9jb3JlL2ZpbHRlci5jXFxuaW5kZXggMmU5NmI0Yjg0N2NlMTIuLjBlYTM2MmZhNDI4N2UzIDEwMDY0NFxcbi0tLSBhL25ldC9jb3JlL2ZpbHRlci5jXFxuKysrIGIvbmV0L2NvcmUvZmlsdGVyLmNcXG5AQCAtNjIwMSwyMSArNjIwMSw2MCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9za2JfZ2V0X3hmcm1fc3RhdGVfcHJvdG8gPSB7XFxuICNlbmRpZlxcbiBcXG4gI2lmIElTX0VOQUJMRUQoQ09ORklHX0lORVQpIHx8IElTX0VOQUJMRUQoQ09ORklHX0lQVjYpXFxuLXN0YXRpYyBpbnQgYnBmX2ZpYl9zZXRfZndkX3BhcmFtcyhzdHJ1Y3QgYnBmX2ZpYl9sb29rdXAgKnBhcmFtcywgdTMyIG10dSlcXG4rc3RhdGljIGludCBicGZfZmliX3NldF9md2RfcGFyYW1zKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuK1xcdFxcdFxcdFxcdCAgc3RydWN0IGJwZl9maWJfbG9va3VwICpwYXJhbXMsXFxuK1xcdFxcdFxcdFxcdCAgdTMyIGZsYWdzLCB1MzIgbXR1LCB1MzIgaW5faWZpbmRleClcXG4ge1xcbiBcXHRwYXJhbXMtXFx1MDAzZWhfdmxhbl9UQ0kgPSAwO1xcbiBcXHRwYXJhbXMtXFx1MDAzZWhfdmxhbl9wcm90byA9IDA7XFxuK1xcbisjaWYgSVNfRU5BQkxFRChDT05GSUdfVkxBTl84MDIxUSlcXG4rXFx0aWYgKChmbGFncyBcXHUwMDI2IEJQRl9GSUJfTE9PS1VQX1ZMQU4pIFxcdTAwMjZcXHUwMDI2IGlzX3ZsYW5fZGV2KGRldikpIHtcXG4rXFx0XFx0c3RydWN0IG5ldF9kZXZpY2UgKnJlYWxfZGV2ID0gdmxhbl9kZXZfcHJpdihkZXYpLVxcdTAwM2VyZWFsX2RldjtcXG4rXFxuK1xcdFxcdGlmICghaXNfdmxhbl9kZXYocmVhbF9kZXYpIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdCAgICBuZXRfZXEoZGV2X25ldChyZWFsX2RldiksIGRldl9uZXQoZGV2KSkpIHtcXG4rXFx0XFx0XFx0cGFyYW1zLVxcdTAwM2VoX3ZsYW5fcHJvdG8gPSB2bGFuX2Rldl92bGFuX3Byb3RvKGRldik7XFxuK1xcdFxcdFxcdHBhcmFtcy1cXHUwMDNlaF92bGFuX1RDSSA9IGh0b25zKHZsYW5fZGV2X3ZsYW5faWQoZGV2KSk7XFxuK1xcdFxcdFxcdHBhcmFtcy1cXHUwMDNlaWZpbmRleCA9IHJlYWxfZGV2LVxcdTAwM2VpZmluZGV4O1xcbitcXHRcXHR9IGVsc2Uge1xcbitcXHRcXHRcXHRwYXJhbXMtXFx1MDAzZWlmaW5kZXggPSBpbl9pZmluZGV4O1xcbitcXHRcXHRcXHRyZXR1cm4gQlBGX0ZJQl9MS1VQX1JFVF9WTEFOX0ZBSUxVUkU7XFxuK1xcdFxcdH1cXG4rXFx0fVxcbisjZW5kaWZcXG4rXFxuIFxcdGlmIChtdHUpXFxuIFxcdFxcdHBhcmFtcy1cXHUwMDNlbXR1X3Jlc3VsdCA9IG10dTsgLyogdW5pb24gd2l0aCB0b3RfbGVuICovXFxuIFxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbitcXG4rc3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlICpicGZfZmliX3ZsYW5faW5wdXRfZGV2KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCBjb25zdCBzdHJ1Y3QgYnBmX2ZpYl9sb29rdXAgKnBhcmFtcylcXG4re1xcbitcXHRfX2JlMTYgcHJvdG8gPSBwYXJhbXMtXFx1MDAzZWhfdmxhbl9wcm90bztcXG4rXFx0c3RydWN0IG5ldF9kZXZpY2UgKnZsYW5fZGV2O1xcbitcXHR1MTYgdmlkO1xcbitcXG4rXFx0aWYgKHByb3RvICE9IGh0b25zKEVUSF9QXzgwMjFRKSBcXHUwMDI2XFx1MDAyNiBwcm90byAhPSBodG9ucyhFVEhfUF84MDIxQUQpKVxcbitcXHRcXHRyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTtcXG4rXFxuK1xcdHZpZCA9IG50b2hzKHBhcmFtcy1cXHUwMDNlaF92bGFuX1RDSSkgXFx1MDAyNiBWTEFOX1ZJRF9NQVNLO1xcbitcXHR2bGFuX2RldiA9IF9fdmxhbl9maW5kX2Rldl9kZWVwX3JjdShkZXYsIHByb3RvLCB2aWQpO1xcbitcXHRpZiAoIXZsYW5fZGV2IHx8ICEodmxhbl9kZXYtXFx1MDAzZWZsYWdzIFxcdTAwMjYgSUZGX1VQKSB8fFxcbitcXHQgICAgIW5ldF9lcShkZXZfbmV0KHZsYW5fZGV2KSwgZGV2X25ldChkZXYpKSlcXG4rXFx0XFx0cmV0dXJuIE5VTEw7XFxuK1xcbitcXHRyZXR1cm4gdmxhbl9kZXY7XFxuK31cXG4gI2VuZGlmXFxuIFxcbiAjaWYgSVNfRU5BQkxFRChDT05GSUdfSU5FVClcXG4gc3RhdGljIGludCBicGZfaXB2NF9maWJfbG9va3VwKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGJwZl9maWJfbG9va3VwICpwYXJhbXMsXFxuIFxcdFxcdFxcdCAgICAgICB1MzIgZmxhZ3MsIGJvb2wgY2hlY2tfbXR1KVxcbiB7XFxuK1xcdHUzMiBpbl9pZmluZGV4ID0gcGFyYW1zLVxcdTAwM2VpZmluZGV4O1xcbiBcXHRzdHJ1Y3QgbmVpZ2hib3VyICpuZWlnaCA9IE5VTEw7XFxuIFxcdHN0cnVjdCBmaWJfbmhfY29tbW9uICpuaGM7XFxuIFxcdHN0cnVjdCBpbl9kZXZpY2UgKmluX2RldjtcXG5AQCAtNjIyOSw2ICs2MjY4LDE0IEBAIHN0YXRpYyBpbnQgYnBmX2lwdjRfZmliX2xvb2t1cChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBicGZfZmliX2xvb2t1cCAqcGFyYW1zLFxcbiBcXHRpZiAodW5saWtlbHkoIWRldikpXFxuIFxcdFxcdHJldHVybiAtRU5PREVWO1xcbiBcXG4rXFx0aWYgKGZsYWdzIFxcdTAwMjYgQlBGX0ZJQl9MT09LVVBfVkxBTl9JTlBVVCkge1xcbitcXHRcXHRkZXYgPSBicGZfZmliX3ZsYW5faW5wdXRfZGV2KGRldiwgcGFyYW1zKTtcXG4rXFx0XFx0aWYgKElTX0VSUihkZXYpKVxcbitcXHRcXHRcXHRyZXR1cm4gUFRSX0VSUihkZXYpO1xcbitcXHRcXHRpZiAoIWRldilcXG4rXFx0XFx0XFx0cmV0dXJuIEJQRl9GSUJfTEtVUF9SRVRfTk9UX0ZXREVEO1xcbitcXHR9XFxuK1xcbiBcXHQvKiB2ZXJpZnkgZm9yd2FyZGluZyBpcyBlbmFibGVkIG9uIHRoaXMgaW50ZXJmYWNlICovXFxuIFxcdGluX2RldiA9IF9faW5fZGV2X2dldF9yY3UoZGV2KTtcXG4gXFx0aWYgKHVubGlrZWx5KCFpbl9kZXYgfHwgIUlOX0RFVl9GT1JXQVJEKGluX2RldikpKVxcbkBAIC02MjM4LDcgKzYyODUsMTEgQEAgc3RhdGljIGludCBicGZfaXB2NF9maWJfbG9va3VwKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGJwZl9maWJfbG9va3VwICpwYXJhbXMsXFxuIFxcdFxcdGZsNC5mbG93aTRfaWlmID0gMTtcXG4gXFx0XFx0Zmw0LmZsb3dpNF9vaWYgPSBwYXJhbXMtXFx1MDAzZWlmaW5kZXg7XFxuIFxcdH0gZWxzZSB7XFxuLVxcdFxcdGZsNC5mbG93aTRfaWlmID0gcGFyYW1zLVxcdTAwM2VpZmluZGV4O1xcbitcXHRcXHQvKlxcbitcXHRcXHQgKiBkZXYtXFx1MDAzZWlmaW5kZXgsIG5vdCBwYXJhbXMtXFx1MDAzZWlmaW5kZXg6IFZMQU5fSU5QVVQgbWF5IGhhdmVcXG4rXFx0XFx0ICogcmVzb2x2ZWQgZGV2IHRvIGEgc3ViaW50ZXJmYWNlIGFib3ZlLlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0Zmw0LmZsb3dpNF9paWYgPSBkZXYtXFx1MDAzZWlmaW5kZXg7XFxuIFxcdFxcdGZsNC5mbG93aTRfb2lmID0gMDtcXG4gXFx0fVxcbiBcXHRmbDQuZmxvd2k0X2RzY3AgPSBpbmV0X2RzZmllbGRfdG9fZHNjcChwYXJhbXMtXFx1MDAzZXRvcyk7XFxuQEAgLTYzNDcsNyArNjM5OCw3IEBAIHN0YXRpYyBpbnQgYnBmX2lwdjRfZmliX2xvb2t1cChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBicGZfZmliX2xvb2t1cCAqcGFyYW1zLFxcbiBcXHRtZW1jcHkocGFyYW1zLVxcdTAwM2VzbWFjLCBkZXYtXFx1MDAzZWRldl9hZGRyLCBFVEhfQUxFTik7XFxuIFxcbiBzZXRfZndkX3BhcmFtczpcXG4tXFx0cmV0dXJuIGJwZl9maWJfc2V0X2Z3ZF9wYXJhbXMocGFyYW1zLCBtdHUpO1xcbitcXHRyZXR1cm4gYnBmX2ZpYl9zZXRfZndkX3BhcmFtcyhkZXYsIHBhcmFtcywgZmxhZ3MsIG10dSwgaW5faWZpbmRleCk7XFxuIH1cXG4gI2VuZGlmXFxuIFxcbkBAIC02MzU3LDYgKzY0MDgsNyBAQCBzdGF0aWMgaW50IGJwZl9pcHY2X2ZpYl9sb29rdXAoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgYnBmX2ZpYl9sb29rdXAgKnBhcmFtcyxcXG4ge1xcbiBcXHRzdHJ1Y3QgaW42X2FkZHIgKnNyYyA9IChzdHJ1Y3QgaW42X2FkZHIgKikgcGFyYW1zLVxcdTAwM2VpcHY2X3NyYztcXG4gXFx0c3RydWN0IGluNl9hZGRyICpkc3QgPSAoc3RydWN0IGluNl9hZGRyICopIHBhcmFtcy1cXHUwMDNlaXB2Nl9kc3Q7XFxuK1xcdHUzMiBpbl9pZmluZGV4ID0gcGFyYW1zLVxcdTAwM2VpZmluZGV4O1xcbiBcXHRzdHJ1Y3QgZmliNl9yZXN1bHQgcmVzID0ge307XFxuIFxcdHN0cnVjdCBuZWlnaGJvdXIgKm5laWdoO1xcbiBcXHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2O1xcbkBAIC02Mzc0LDYgKzY0MjYsMTQgQEAgc3RhdGljIGludCBicGZfaXB2Nl9maWJfbG9va3VwKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGJwZl9maWJfbG9va3VwICpwYXJhbXMsXFxuIFxcdGlmICh1bmxpa2VseSghZGV2KSlcXG4gXFx0XFx0cmV0dXJuIC1FTk9ERVY7XFxuIFxcbitcXHRpZiAoZmxhZ3MgXFx1MDAyNiBCUEZfRklCX0xPT0tVUF9WTEFOX0lOUFVUKSB7XFxuK1xcdFxcdGRldiA9IGJwZl9maWJfdmxhbl9pbnB1dF9kZXYoZGV2LCBwYXJhbXMpO1xcbitcXHRcXHRpZiAoSVNfRVJSKGRldikpXFxuK1xcdFxcdFxcdHJldHVybiBQVFJfRVJSKGRldik7XFxuK1xcdFxcdGlmICghZGV2KVxcbitcXHRcXHRcXHRyZXR1cm4gQlBGX0ZJQl9MS1VQX1JFVF9OT1RfRldERUQ7XFxuK1xcdH1cXG4rXFxuIFxcdGlkZXYgPSBfX2luNl9kZXZfZ2V0X3NhZmVseShkZXYpO1xcbiBcXHRpZiAodW5saWtlbHkoIWlkZXYgfHwgIVJFQURfT05DRShpZGV2LVxcdTAwM2VjbmYuZm9yd2FyZGluZykpKVxcbiBcXHRcXHRyZXR1cm4gQlBGX0ZJQl9MS1VQX1JFVF9GV0RfRElTQUJMRUQ7XFxuQEAgLTYzODIsNyArNjQ0MiwxMiBAQCBzdGF0aWMgaW50IGJwZl9pcHY2X2ZpYl9sb29rdXAoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgYnBmX2ZpYl9sb29rdXAgKnBhcmFtcyxcXG4gXFx0XFx0Zmw2LmZsb3dpNl9paWYgPSAxO1xcbiBcXHRcXHRvaWYgPSBmbDYuZmxvd2k2X29pZiA9IHBhcmFtcy1cXHUwMDNlaWZpbmRleDtcXG4gXFx0fSBlbHNlIHtcXG4tXFx0XFx0b2lmID0gZmw2LmZsb3dpNl9paWYgPSBwYXJhbXMtXFx1MDAzZWlmaW5kZXg7XFxuK1xcdFxcdC8qXFxuK1xcdFxcdCAqIGRldi1cXHUwMDNlaWZpbmRleCwgbm90IHBhcmFtcy1cXHUwMDNlaWZpbmRleDogVkxBTl9JTlBVVCBtYXkgaGF2ZVxcbitcXHRcXHQgKiByZXNvbHZlZCBkZXYgdG8gYSBzdWJpbnRlcmZhY2UgYWJvdmUuXFxuK1xcdFxcdCAqL1xcbitcXHRcXHRvaWYgPSBkZXYtXFx1MDAzZWlmaW5kZXg7XFxuK1xcdFxcdGZsNi5mbG93aTZfaWlmID0gb2lmO1xcbiBcXHRcXHRmbDYuZmxvd2k2X29pZiA9IDA7XFxuIFxcdFxcdHN0cmljdCA9IFJUNl9MT09LVVBfRl9IQVNfU0FERFI7XFxuIFxcdH1cXG5AQCAtNjQ4NiwxMyArNjU1MSwyNiBAQCBzdGF0aWMgaW50IGJwZl9pcHY2X2ZpYl9sb29rdXAoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgYnBmX2ZpYl9sb29rdXAgKnBhcmFtcyxcXG4gXFx0bWVtY3B5KHBhcmFtcy1cXHUwMDNlc21hYywgZGV2LVxcdTAwM2VkZXZfYWRkciwgRVRIX0FMRU4pO1xcbiBcXG4gc2V0X2Z3ZF9wYXJhbXM6XFxuLVxcdHJldHVybiBicGZfZmliX3NldF9md2RfcGFyYW1zKHBhcmFtcywgbXR1KTtcXG4rXFx0cmV0dXJuIGJwZl9maWJfc2V0X2Z3ZF9wYXJhbXMoZGV2LCBwYXJhbXMsIGZsYWdzLCBtdHUsIGluX2lmaW5kZXgpO1xcbiB9XFxuICNlbmRpZlxcbiBcXG4gI2RlZmluZSBCUEZfRklCX0xPT0tVUF9NQVNLIChCUEZfRklCX0xPT0tVUF9ESVJFQ1QgfCBCUEZfRklCX0xPT0tVUF9PVVRQVVQgfCBcXFxcXFxuIFxcdFxcdFxcdCAgICAgQlBGX0ZJQl9MT09LVVBfU0tJUF9ORUlHSCB8IEJQRl9GSUJfTE9PS1VQX1RCSUQgfCBcXFxcXFxuLVxcdFxcdFxcdCAgICAgQlBGX0ZJQl9MT09LVVBfU1JDIHwgQlBGX0ZJQl9MT09LVVBfTUFSSylcXG4rXFx0XFx0XFx0ICAgICBCUEZfRklCX0xPT0tVUF9TUkMgfCBCUEZfRklCX0xPT0tVUF9NQVJLIHwgXFxcXFxcbitcXHRcXHRcXHQgICAgIEJQRl9GSUJfTE9PS1VQX1ZMQU4gfCBCUEZfRklCX0xPT0tVUF9WTEFOX0lOUFVUKVxcbitcXG4rc3RhdGljIGJvb2wgYnBmX2ZpYl9sb29rdXBfZmxhZ3Nfb2sodTMyIGZsYWdzKVxcbit7XFxuK1xcdGlmIChmbGFncyBcXHUwMDI2IH5CUEZfRklCX0xPT0tVUF9NQVNLKVxcbitcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcbitcXHRpZiAoKGZsYWdzIFxcdTAwMjYgQlBGX0ZJQl9MT09LVVBfVkxBTl9JTlBVVCkgXFx1MDAyNlxcdTAwMjZcXG4rXFx0ICAgIChmbGFncyBcXHUwMDI2IChCUEZfRklCX0xPT0tVUF9UQklEIHwgQlBGX0ZJQl9MT09LVVBfT1VUUFVUKSkpXFxuK1xcdFxcdHJldHVybiBmYWxzZTtcXG4rXFxuK1xcdHJldHVybiB0cnVlO1xcbit9XFxuIFxcbiBCUEZfQ0FMTF80KGJwZl94ZHBfZmliX2xvb2t1cCwgc3RydWN0IHhkcF9idWZmICosIGN0eCxcXG4gXFx0ICAgc3RydWN0IGJwZl9maWJfbG9va3VwICosIHBhcmFtcywgaW50LCBwbGVuLCB1MzIsIGZsYWdzKVxcbkBAIC02NTAwLDcgKzY1NzgsNyBAQCBCUEZfQ0FMTF80KGJwZl94ZHBfZmliX2xvb2t1cCwgc3RydWN0IHhkcF9idWZmICosIGN0eCxcXG4gXFx0aWYgKHBsZW4gXFx1MDAzYyBzaXplb2YoKnBhcmFtcykpXFxuIFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiBcXG4tXFx0aWYgKGZsYWdzIFxcdTAwMjYgfkJQRl9GSUJfTE9PS1VQX01BU0spXFxuK1xcdGlmICghYnBmX2ZpYl9sb29rdXBfZmxhZ3Nfb2soZmxhZ3MpKVxcbiBcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gXFxuIFxcdHN3aXRjaCAocGFyYW1zLVxcdTAwM2VmYW1pbHkpIHtcXG5AQCAtNjUzOCw3ICs2NjE2LDEwIEBAIEJQRl9DQUxMXzQoYnBmX3NrYl9maWJfbG9va3VwLCBzdHJ1Y3Qgc2tfYnVmZiAqLCBza2IsXFxuIFxcdGlmIChwbGVuIFxcdTAwM2Mgc2l6ZW9mKCpwYXJhbXMpKVxcbiBcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gXFxuLVxcdGlmIChmbGFncyBcXHUwMDI2IH5CUEZfRklCX0xPT0tVUF9NQVNLKVxcbitcXHRpZiAoIWJwZl9maWJfbG9va3VwX2ZsYWdzX29rKGZsYWdzKSlcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcbitcXHRpZiAoZmxhZ3MgXFx1MDAyNiBCUEZfRklCX0xPT0tVUF9WTEFOKVxcbiBcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gXFxuIFxcdGlmIChwYXJhbXMtXFx1MDAzZXRvdF9sZW4pXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaCBiL3Rvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaFxcbmluZGV4IDg5YjM2ZGU1ZmRiYjZkLi5kNDIxODk1NGM1MGY1MyAxMDA2NDRcXG4tLS0gYS90b29scy9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmhcXG4rKysgYi90b29scy9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmhcXG5AQCAtMzUzMiw2ICszNTMyLDQ1IEBAIHVuaW9uIGJwZl9hdHRyIHtcXG4gICpcXHRcXHRcXHRVc2UgdGhlIG1hcmsgcHJlc2VudCBpbiAqcGFyYW1zKi1cXHUwMDNlbWFyayBmb3IgdGhlIGZpYiBsb29rdXAuXFxuICAqXFx0XFx0XFx0VGhpcyBvcHRpb24gc2hvdWxkIG5vdCBiZSB1c2VkIHdpdGggQlBGX0ZJQl9MT09LVVBfRElSRUNULFxcbiAgKlxcdFxcdFxcdGFzIGl0IG9ubHkgaGFzIG1lYW5pbmcgZm9yIGZ1bGwgbG9va3Vwcy5cXG4rICpcXHRcXHQqKkJQRl9GSUJfTE9PS1VQX1ZMQU4qKlxcbisgKlxcdFxcdFxcdElmIHRoZSBmaWIgbG9va3VwIHJlc29sdmVzIHRvIGEgVkxBTiBkZXZpY2Ugd2hvc2VcXG4rICpcXHRcXHRcXHRwYXJlbnQgaXMgYSByZWFsIChub24tVkxBTikgZGV2aWNlLCBzZXRcXG4rICpcXHRcXHRcXHQqcGFyYW1zKi1cXHUwMDNlaF92bGFuX3Byb3RvIGFuZCAqcGFyYW1zKi1cXHUwMDNlaF92bGFuX1RDSSBmcm9tXFxuKyAqXFx0XFx0XFx0dGhlIFZMQU4gZGV2aWNlIGFuZCByZXBsYWNlICpwYXJhbXMqLVxcdTAwM2VpZmluZGV4IHdpdGggdGhlXFxuKyAqXFx0XFx0XFx0cGFyZW50J3MgaWZpbmRleC4gKnBhcmFtcyotXFx1MDAzZWhfdmxhbl9UQ0kgY2FycmllcyB0aGUgVklEXFxuKyAqXFx0XFx0XFx0b25seSwgd2l0aCBQQ1AgYW5kIERFSSBiaXRzIHplcm87IGEgY29uc3VtZXIgd2FudGluZyB0b1xcbisgKlxcdFxcdFxcdHNldCBlZ3Jlc3MgcHJpb3JpdHkgd3JpdGVzIFBDUCBpdHNlbGYuICpwYXJhbXMqLVxcdTAwM2VzbWFjIGlzXFxuKyAqXFx0XFx0XFx0dGhlIFZMQU4gZGV2aWNlJ3Mgb3duIGFkZHJlc3MsIHdoaWNoIGNhbiBkaWZmZXIgZnJvbSB0aGVcXG4rICpcXHRcXHRcXHRwYXJlbnQncy4gT25seSB0aGUgaW1tZWRpYXRlIHBhcmVudCBpcyByZXNvbHZlZDsgaWYgaXRcXG4rICpcXHRcXHRcXHRpcyBpdHNlbGYgYSBWTEFOIGRldmljZSAoUWluUSkgb3IgaW4gYW5vdGhlciBuYW1lc3BhY2UsXFxuKyAqXFx0XFx0XFx0dGhlIGVncmVzcyBjYW5ub3QgYmUgcmVkdWNlZCB0byBhIHBoeXNpY2FsIGRldmljZSBwbHVzXFxuKyAqXFx0XFx0XFx0b25lIHRhZyBhbmQgdGhlIGxvb2t1cCByZXR1cm5zXFxuKyAqXFx0XFx0XFx0KipCUEZfRklCX0xLVVBfUkVUX1ZMQU5fRkFJTFVSRSoqIHdpdGggKnBhcmFtcyotXFx1MDAzZWlmaW5kZXhcXG4rICpcXHRcXHRcXHRsZWZ0IGF0IHRoZSBpbnB1dC4gUmUtaXNzdWUgd2l0aG91dFxcbisgKlxcdFxcdFxcdCoqQlBGX0ZJQl9MT09LVVBfVkxBTioqIHRvIG9idGFpbiB0aGUgVkxBTiBkZXZpY2UncyBvd25cXG4rICpcXHRcXHRcXHRpZmluZGV4LiBUaGUgc3dhcCBhbmQgdGhlIHZsYW4gZmllbGRzXFxuKyAqXFx0XFx0XFx0YXJlIHdyaXR0ZW4gb25seSBvbiBzdWNjZXNzOyBvdGhlciBvdXRwdXQgZmllbGRzIGtlZXBcXG4rICpcXHRcXHRcXHR0aGUgaGVscGVyJ3MgZXhpc3RpbmcgYmVoYXZpb3VyLCBzbyBhIGZyYWctbmVlZGVkIHJlc3VsdFxcbisgKlxcdFxcdFxcdHN0aWxsIHJlcG9ydHMgdGhlIHJvdXRlIG10dSBpbiAqcGFyYW1zKi1cXHUwMDNlbXR1X3Jlc3VsdC5cXG4rICpcXHRcXHRcXHRUaGlzIGZsYWcgaXMgb25seSB2YWxpZCBmb3IgWERQIHByb2dyYW1zOyB0YyBwcm9ncmFtc1xcbisgKlxcdFxcdFxcdHJlY2VpdmUgLUVJTlZBTCBzaW5jZSB0aGV5IGNhbiByZWRpcmVjdCB0byB0aGUgVkxBTlxcbisgKlxcdFxcdFxcdGRldmljZSBkaXJlY3RseS5cXG4rICpcXHRcXHQqKkJQRl9GSUJfTE9PS1VQX1ZMQU5fSU5QVVQqKlxcbisgKlxcdFxcdFxcdFRyZWF0ICpwYXJhbXMqLVxcdTAwM2VoX3ZsYW5fcHJvdG8gYW5kICpwYXJhbXMqLVxcdTAwM2VoX3ZsYW5fVENJXFxuKyAqXFx0XFx0XFx0YXMgYW4gaW5wdXQgVkxBTiB0YWcgYW5kIHJ1biB0aGUgbG9va3VwIGFzIGlmIGluZ3Jlc3NcXG4rICpcXHRcXHRcXHRoYWQgaGFwcGVuZWQgb24gdGhlIFZMQU4gc3ViaW50ZXJmYWNlIGNhcnJ5aW5nIHRoYXQgdGFnXFxuKyAqXFx0XFx0XFx0b24gKnBhcmFtcyotXFx1MDAzZWlmaW5kZXguIFRoZSBWSUQgaXMgdGhlIGxvdyAxMiBiaXRzIG9mXFxuKyAqXFx0XFx0XFx0KnBhcmFtcyotXFx1MDAzZWhfdmxhbl9UQ0k7ICpwYXJhbXMqLVxcdTAwM2VoX3ZsYW5fcHJvdG8gbXVzdCBiZVxcbisgKlxcdFxcdFxcdEVUSF9QXzgwMjFRIG9yIEVUSF9QXzgwMjFBRCBpbiBuZXR3b3JrIGJ5dGUgb3JkZXIsIGVsc2VcXG4rICpcXHRcXHRcXHQqKi1FSU5WQUwqKi4gSWYgKnBhcmFtcyotXFx1MDAzZWlmaW5kZXggaXMgaXRzZWxmIGEgVkxBTlxcbisgKlxcdFxcdFxcdGRldmljZSwgaXRzIGlubmVyIChRaW5RKSBzdWJpbnRlcmZhY2UgaXMgbWF0Y2hlZDsgZm9yIGFcXG4rICpcXHRcXHRcXHRib25kIG9yIHRlYW0sIHBhc3MgdGhlIG1hc3RlcidzIGlmaW5kZXguIEFuIHVubWF0Y2hlZFxcbisgKlxcdFxcdFxcdHRhZywgYSBkb3duIGRldmljZSwgb3Igb25lIGluIGFub3RoZXIgbmFtZXNwYWNlIHJldHVybnNcXG4rICpcXHRcXHRcXHQqKkJQRl9GSUJfTEtVUF9SRVRfTk9UX0ZXREVEKiosIG1pcnJvcmluZyByZWFsIGluZ3Jlc3MuXFxuKyAqXFx0XFx0XFx0QSBWSUQgb2YgMCBpcyBsb29rZWQgdXAgbGl0ZXJhbGx5LCBzbyBkbyBub3Qgc2V0IHRoaXNcXG4rICpcXHRcXHRcXHRmbGFnIGZvciBwcmlvcml0eS10YWdnZWQgZnJhbWVzLiBDYW5ub3QgYmUgY29tYmluZWQgd2l0aFxcbisgKlxcdFxcdFxcdCoqQlBGX0ZJQl9MT09LVVBfVEJJRCoqIG9yICoqQlBGX0ZJQl9MT09LVVBfT1VUUFVUKipcXG4rICpcXHRcXHRcXHQocmV0dXJucyAqKi1FSU5WQUwqKikuXFxuICAqXFxuICAqXFx0XFx0KmN0eCogaXMgZWl0aGVyICoqc3RydWN0IHhkcF9tZCoqIGZvciBYRFAgcHJvZ3JhbXMgb3JcXG4gICpcXHRcXHQqKnN0cnVjdCBza19idWZmKiogdGMgY2xzX2FjdCBwcm9ncmFtcy5cXG5AQCAtNzMyNyw2ICs3MzY2LDggQEAgZW51bSB7XFxuIFxcdEJQRl9GSUJfTE9PS1VQX1RCSUQgICAgPSAoMVUgXFx1MDAzY1xcdTAwM2MgMyksXFxuIFxcdEJQRl9GSUJfTE9PS1VQX1NSQyAgICAgPSAoMVUgXFx1MDAzY1xcdTAwM2MgNCksXFxuIFxcdEJQRl9GSUJfTE9PS1VQX01BUksgICAgPSAoMVUgXFx1MDAzY1xcdTAwM2MgNSksXFxuK1xcdEJQRl9GSUJfTE9PS1VQX1ZMQU4gICAgPSAoMVUgXFx1MDAzY1xcdTAwM2MgNiksXFxuK1xcdEJQRl9GSUJfTE9PS1VQX1ZMQU5fSU5QVVQgPSAoMVUgXFx1MDAzY1xcdTAwM2MgNyksXFxuIH07XFxuIFxcbiBlbnVtIHtcXG5AQCAtNzM0MCw2ICs3MzgxLDcgQEAgZW51bSB7XFxuIFxcdEJQRl9GSUJfTEtVUF9SRVRfTk9fTkVJR0gsICAgICAvKiBubyBuZWlnaGJvciBlbnRyeSBmb3IgbmggKi9cXG4gXFx0QlBGX0ZJQl9MS1VQX1JFVF9GUkFHX05FRURFRCwgIC8qIGZyYWdtZW50YXRpb24gcmVxdWlyZWQgdG8gZndkICovXFxuIFxcdEJQRl9GSUJfTEtVUF9SRVRfTk9fU1JDX0FERFIsICAvKiBmYWlsZWQgdG8gZGVyaXZlIElQIHNyYyBhZGRyICovXFxuK1xcdEJQRl9GSUJfTEtVUF9SRVRfVkxBTl9GQUlMVVJFLCAvKiBWTEFOIGVncmVzcywgcGFyZW50IHVucmVzb2x2YWJsZSAqL1xcbiB9O1xcbiBcXG4gc3RydWN0IGJwZl9maWJfbG9va3VwIHtcXG5AQCAtNzM5Myw3ICs3NDM1LDEzIEBAIHN0cnVjdCBicGZfZmliX2xvb2t1cCB7XFxuIFxcbiBcXHR1bmlvbiB7XFxuIFxcdFxcdHN0cnVjdCB7XFxuLVxcdFxcdFxcdC8qIG91dHB1dCAqL1xcbitcXHRcXHRcXHQvKlxcbitcXHRcXHRcXHQgKiBvdXRwdXQgd2l0aCBCUEZfRklCX0xPT0tVUF9WTEFOOiBzZXQgZnJvbSB0aGVcXG4rXFx0XFx0XFx0ICogcmVzb2x2ZWQgZWdyZXNzIFZMQU4gZGV2aWNlIChzZWUgdGhlIGZsYWcpOyB6ZXJvZWRcXG4rXFx0XFx0XFx0ICogb24gb3RoZXIgc3VjY2Vzc2Z1bCBsb29rdXBzLiBpbnB1dCB3aXRoXFxuK1xcdFxcdFxcdCAqIEJQRl9GSUJfTE9PS1VQX1ZMQU5fSU5QVVQ6IHRoZSBWTEFOIHRhZyB0byBzY29wZVxcbitcXHRcXHRcXHQgKiB0aGUgbG9va3VwIGJ5LlxcbitcXHRcXHRcXHQgKi9cXG4gXFx0XFx0XFx0X19iZTE2XFx0aF92bGFuX3Byb3RvO1xcbiBcXHRcXHRcXHRfX2JlMTZcXHRoX3ZsYW5fVENJO1xcbiBcXHRcXHR9O1xcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9maWJfbG9va3VwLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9maWJfbG9va3VwLmNcXG5pbmRleCBiZDc2NTg5NTgwMDQxZi4uOGNhZWQ5ZDQzYjk4MTEgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvZmliX2xvb2t1cC5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvZmliX2xvb2t1cC5jXFxuQEAgLTIsNiArMiw3IEBAXFxuIC8qIENvcHlyaWdodCAoYykgMjAyMyBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy4gKi9cXG4gXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9ydG5ldGxpbmsuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2lmX2V0aGVyLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NzeXMvdHlwZXMuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY25ldC9pZi5oXFx1MDAzZVxcbiBcXG5AQCAtMjMsNiArMjQsNyBAQFxcbiAjZGVmaW5lIElQVjRfVEJJRF9BRERSXFx0XFx0XFxcIjE3Mi4wLjAuMjU0XFxcIlxcbiAjZGVmaW5lIElQVjRfVEJJRF9ORVRcXHRcXHRcXFwiMTcyLjAuMC4wXFxcIlxcbiAjZGVmaW5lIElQVjRfVEJJRF9EU1RcXHRcXHRcXFwiMTcyLjAuMC4yXFxcIlxcbisjZGVmaW5lIElQVjRfVEJJRF9OT05FSUdIX0RTVFxcdFxcXCIxNzIuMC4wLjVcXFwiXFxuICNkZWZpbmUgSVBWNl9UQklEX0FERFJcXHRcXHRcXFwiZmQwMDo6RkZGRlxcXCJcXG4gI2RlZmluZSBJUFY2X1RCSURfTkVUXFx0XFx0XFxcImZkMDA6OlxcXCJcXG4gI2RlZmluZSBJUFY2X1RCSURfRFNUXFx0XFx0XFxcImZkMDA6OjJcXFwiXFxuQEAgLTM3LDYgKzM5LDQxIEBAXFxuICNkZWZpbmUgSVBWNl9MT0NBTFxcdFxcdFxcXCJmZDAxOjozXFxcIlxcbiAjZGVmaW5lIElQVjZfR1cxXFx0XFx0XFxcImZkMDE6OjFcXFwiXFxuICNkZWZpbmUgSVBWNl9HVzJcXHRcXHRcXFwiZmQwMTo6MlxcXCJcXG4rI2RlZmluZSBWTEFOX0lEXFx0XFx0XFx0MTAwXFxuKyNkZWZpbmUgVkxBTl9JRkFDRVxcdFxcdFxcXCJ2ZXRoMS4xMDBcXFwiXFxuKyNkZWZpbmUgVkxBTl9JRF9ET1dOXFx0XFx0MTAyXFxuKyNkZWZpbmUgVkxBTl9JRkFDRV9ET1dOXFx0XFx0XFxcInZldGgxLjEwMlxcXCJcXG4rI2RlZmluZSBRSU5RX09VVEVSX0lGQUNFXFx0XFxcInZldGgxLjIwMFxcXCJcXG4rI2RlZmluZSBRSU5RX0lOTkVSX0lGQUNFXFx0XFxcInZldGgxLjIwMC4zMDBcXFwiXFxuKyNkZWZpbmUgVkxBTl9UQUJMRVxcdFxcdFxcXCIzMDBcXFwiXFxuKyNkZWZpbmUgSVBWNF9WTEFOX0lGQUNFX0FERFJcXHRcXFwiMTAuNS4wLjI1NFxcXCJcXG4rI2RlZmluZSBJUFY0X1ZMQU5fRUdSRVNTX0RTVFxcdFxcXCIxMC41LjAuMlxcXCJcXG4rI2RlZmluZSBJUFY0X1FJTlFfRFNUXFx0XFx0XFxcIjEwLjcuMC4yXFxcIlxcbisjZGVmaW5lIElQVjRfVkxBTl9EU1RcXHRcXHRcXFwiMTAuNi4wLjJcXFwiXFxuKyNkZWZpbmUgSVBWNF9WTEFOX0dXXFx0XFx0XFxcIjEwLjUuMC4xXFxcIlxcbisjZGVmaW5lIElQVjZfVkxBTl9JRkFDRV9BRERSXFx0XFxcImZkMDI6OjI1NFxcXCJcXG4rI2RlZmluZSBJUFY2X1ZMQU5fRUdSRVNTX0RTVFxcdFxcXCJmZDAyOjoyXFxcIlxcbisjZGVmaW5lIElQVjZfVkxBTl9EU1RcXHRcXHRcXFwiZmQwMzo6MlxcXCJcXG4rI2RlZmluZSBJUFY2X1ZMQU5fR1dcXHRcXHRcXFwiZmQwMjo6MVxcXCJcXG4rI2RlZmluZSBWTEFOX1ZJRF9VTlVTRURcXHRcXHQ5OTlcXG4rI2RlZmluZSBWUkZfSUZBQ0VcXHRcXHRcXFwidnJmLWJsdWVcXFwiXFxuKyNkZWZpbmUgVlJGX1RBQkxFXFx0XFx0XFxcIjEwMDBcXFwiXFxuKyNkZWZpbmUgVlJGX1ZMQU5fSURcXHRcXHQxMDFcXG4rI2RlZmluZSBWUkZfVkxBTl9JRkFDRVxcdFxcdFxcXCJ2ZXRoMS4xMDFcXFwiXFxuKyNkZWZpbmUgSVBWNF9WUkZfSUZBQ0VfQUREUlxcdFxcXCIxMC44LjAuMjU0XFxcIlxcbisjZGVmaW5lIElQVjRfVlJGX0dXXFx0XFx0XFxcIjEwLjguMC4xXFxcIlxcbisjZGVmaW5lIElQVjRfVlJGX0RTVFxcdFxcdFxcXCIxMC45LjAuMlxcXCJcXG4rI2RlZmluZSBUQklEX1ZMQU5fSURcXHRcXHQ1MFxcbisjZGVmaW5lIFRCSURfVkxBTl9JRkFDRVxcdFxcdFxcXCJ2ZXRoMi41MFxcXCJcXG4rI2RlZmluZSBJUFY0X1RCSURfVkxBTl9EU1RcXHRcXFwiMTcyLjIuMC4yXFxcIlxcbisjZGVmaW5lIElQVjRfQk9ORF9WTEFOX0RTVFxcdFxcXCIxMC4xMS4wLjJcXFwiXFxuKyNkZWZpbmUgSVBWNF9WTEFOX01UVV9EU1RcXHRcXFwiMTAuNS45LjJcXFwiXFxuKyNkZWZpbmUgUUlOUV9BRF9WTEFOX0lEXFx0XFx0MjAwXFxuKyNkZWZpbmUgUUlOUV9JTk5FUl9WTEFOX0lEXFx0MzAwXFxuKyNkZWZpbmUgQk9ORF9JRkFDRVxcdFxcdFxcXCJib25kOTlcXFwiXFxuKyNkZWZpbmUgQk9ORF9QT1JUXFx0XFx0XFxcInZldGgzXFxcIlxcbisjZGVmaW5lIEJPTkRfUE9SVF9QRUVSXFx0XFx0XFxcInZldGg0XFxcIlxcbisjZGVmaW5lIEJPTkRfVkxBTl9JRFxcdFxcdDUwMFxcbiAjZGVmaW5lIERNQUNcXHRcXHRcXHRcXFwiMTE6MTE6MTE6MTE6MTE6MTFcXFwiXFxuICNkZWZpbmUgRE1BQ19JTklUIHsgMHgxMSwgMHgxMSwgMHgxMSwgMHgxMSwgMHgxMSwgMHgxMSwgfVxcbiAjZGVmaW5lIERNQUMyXFx0XFx0XFx0XFxcIjAxOjAxOjAxOjAxOjAxOjAxXFxcIlxcbkBAIC01Miw2ICs4OSwxNyBAQCBzdHJ1Y3QgZmliX2xvb2t1cF90ZXN0IHtcXG4gXFx0X191MzIgdGJpZDtcXG4gXFx0X191OCBkbWFjWzZdO1xcbiBcXHRfX3UzMiBtYXJrO1xcbitcXHQvKlxcbitcXHQgKiBpbnB1dCB0YWcgd2l0aCBCUEZfRklCX0xPT0tVUF9WTEFOX0lOUFVUOyBleHBlY3RlZCBvdXRwdXQgdGFnXFxuK1xcdCAqIHdpdGggQlBGX0ZJQl9MT09LVVBfVkxBTiAoY2hlY2tlZCB3aGVuIGNoZWNrX3ZsYW4gaXMgc2V0KVxcbitcXHQgKi9cXG4rXFx0X191MTYgdmxhbl9wcm90bztcXG4rXFx0X191MTYgdmxhbl9pZDtcXG4rXFx0Ym9vbCBjaGVja192bGFuO1xcbitcXHRjb25zdCBjaGFyICpleHBlY3RlZF9kZXY7IC8qIGV4cGVjdGVkIHBhcmFtcy1cXHUwMDNlaWZpbmRleCBhZnRlciBsb29rdXAgKi9cXG4rXFx0Y29uc3QgY2hhciAqaWlmO1xcdCAgLyogb3ZlcnJpZGUgdGhlIGRlZmF1bHQgdmV0aDEgaW5wdXQgZGV2aWNlICovXFxuK1xcdF9fdTE2IHRvdF9sZW47XFx0XFx0ICAvKiB0cmlnZ2VycyB0aGUgaW4tbG9va3VwIG10dSBjaGVjayB3aGVuIHNldCAqL1xcbitcXHRfX3UxNiBleHBlY3RlZF9tdHU7XFx0ICAvKiBleHBlY3RlZCBtdHVfcmVzdWx0ICh1bmlvbiB3aXRoIHRvdF9sZW4pICovXFxuIH07XFxuIFxcbiBzdGF0aWMgY29uc3Qgc3RydWN0IGZpYl9sb29rdXBfdGVzdCB0ZXN0c1tdID0ge1xcbkBAIC03OSw2ICsxMjcsMTcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBmaWJfbG9va3VwX3Rlc3QgdGVzdHNbXSA9IHtcXG4gXFx0ICAuZGFkZHIgPSBJUFY0X1RCSURfRFNULCAuZXhwZWN0ZWRfcmV0ID0gQlBGX0ZJQl9MS1VQX1JFVF9TVUNDRVNTLFxcbiBcXHQgIC5sb29rdXBfZmxhZ3MgPSBCUEZfRklCX0xPT0tVUF9ESVJFQ1QgfCBCUEZfRklCX0xPT0tVUF9UQklELCAudGJpZCA9IDEwMCxcXG4gXFx0ICAuZG1hYyA9IERNQUNfSU5JVDIsIH0sXFxuK1xcdC8qXFxuK1xcdCAqIEFuIGVycm9yIHRoYXQgcmV0dXJucyBhZnRlciB0aGUgZWdyZXNzIGRldmljZSBpcyByZXNvbHZlZCBtdXN0XFxuK1xcdCAqIHJlcG9ydCB0aGUgZWdyZXNzIGlmaW5kZXgsIG5vdCB0aGUgaW5wdXQuIFRoaXMgcm91dGVzIGZyb20gaW5wdXRcXG4rXFx0ICogdmV0aDEgdmlhIHZldGgyICh0YWJsZSAxMDApIHRvIGEgZHN0IHdpdGggbm8gbmVpZ2hib3VyLCBzb1xcbitcXHQgKiBpbnB1dCAhPSBlZ3Jlc3MsIHBpbm5pbmcgTk9fTkVJR0ggdG8gdGhlIGVncmVzcyBkZXZpY2UuXFxuK1xcdCAqL1xcbitcXHR7IC5kZXNjID0gXFxcIklQdjQgTk9fTkVJR0ggcmVwb3J0cyB0aGUgZWdyZXNzIGlmaW5kZXgsIG5vdCB0aGUgaW5wdXRcXFwiLFxcbitcXHQgIC5kYWRkciA9IElQVjRfVEJJRF9OT05FSUdIX0RTVCxcXG4rXFx0ICAuZXhwZWN0ZWRfcmV0ID0gQlBGX0ZJQl9MS1VQX1JFVF9OT19ORUlHSCxcXG4rXFx0ICAubG9va3VwX2ZsYWdzID0gQlBGX0ZJQl9MT09LVVBfRElSRUNUIHwgQlBGX0ZJQl9MT09LVVBfVEJJRCwgLnRiaWQgPSAxMDAsXFxuK1xcdCAgLmV4cGVjdGVkX2RldiA9IFxcXCJ2ZXRoMlxcXCIsIH0sXFxuIFxcdHsgLmRlc2MgPSBcXFwiSVB2NiBUQklEIGxvb2t1cCBmYWlsdXJlXFxcIixcXG4gXFx0ICAuZGFkZHIgPSBJUFY2X1RCSURfRFNULCAuZXhwZWN0ZWRfcmV0ID0gQlBGX0ZJQl9MS1VQX1JFVF9OT1RfRldERUQsXFxuIFxcdCAgLmxvb2t1cF9mbGFncyA9IEJQRl9GSUJfTE9PS1VQX0RJUkVDVCB8IEJQRl9GSUJfTE9PS1VQX1RCSUQsXFxuQEAgLTE0Miw2ICsyMDEsMjE4IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZmliX2xvb2t1cF90ZXN0IHRlc3RzW10gPSB7XFxuIFxcdCAgLmV4cGVjdGVkX2RzdCA9IElQVjZfR1cxLFxcbiBcXHQgIC5sb29rdXBfZmxhZ3MgPSBCUEZfRklCX0xPT0tVUF9TS0lQX05FSUdILFxcbiBcXHQgIC5tYXJrID0gTUFSSywgfSxcXG4rXFx0LyogdmxhbiBlZ3Jlc3MgcmVzb2x1dGlvbiAqL1xcbitcXHQvKlxcbitcXHQgKiBJbnZhcmlhbnQgdGhlIFZMQU4tZWdyZXNzIGFybXMgam9pbnRseSBlbmZvcmNlOiBhXFxuK1xcdCAqIEJQRl9GSUJfTE9PS1VQX1ZMQU4gU1VDQ0VTUyBhbHdheXMgY2FycmllcyBhIHBoeXNpY2FsLFxcbitcXHQgKiB4bWl0LWNhcGFibGUgaWZpbmRleCAtLSBubyBTVUNDRVNTIGV2ZXIgcmV0dXJucyBhIFZMQU4tZGV2aWNlXFxuK1xcdCAqIGlmaW5kZXguIFJlZHVjaWJsZSBhcm1zIHBpbiBpZmluZGV4ID09IHRoZSBwaHlzaWNhbCBwYXJlbnQ7IHRoZVxcbitcXHQgKiBRaW5RIGFuZCBmb3JlaWduLW5ldG5zIGFybXMgcGluIFZMQU5fRkFJTFVSRSB3aXRoIHBhcmFtcy1cXHUwMDNlaWZpbmRleFxcbitcXHQgKiBsZWZ0IGF0IHRoZSBpbnB1dCwgc28gYSByZWdyZXNzaW9uIHRvIGJlc3QtZWZmb3J0IChTVUNDRVNTICsgdGhlXFxuK1xcdCAqIFZMQU4gaWZpbmRleCkgZmFpbHMgb25lLlxcbitcXHQgKi9cXG4rXFx0eyAuZGVzYyA9IFxcXCJJUHY0IFZMQU4gZWdyZXNzLCBubyBmbGFnXFxcIixcXG4rXFx0ICAuZGFkZHIgPSBJUFY0X1ZMQU5fRUdSRVNTX0RTVCwgLmV4cGVjdGVkX3JldCA9IEJQRl9GSUJfTEtVUF9SRVRfU1VDQ0VTUyxcXG4rXFx0ICAubG9va3VwX2ZsYWdzID0gQlBGX0ZJQl9MT09LVVBfU0tJUF9ORUlHSCxcXG4rXFx0ICAuZXhwZWN0ZWRfZGV2ID0gVkxBTl9JRkFDRSwgLmNoZWNrX3ZsYW4gPSB0cnVlLCB9LFxcbitcXHR7IC5kZXNjID0gXFxcIklQdjQgVkxBTiBlZ3Jlc3MsIHNpbmdsZSBWTEFOXFxcIixcXG4rXFx0ICAuZGFkZHIgPSBJUFY0X1ZMQU5fRUdSRVNTX0RTVCwgLmV4cGVjdGVkX3JldCA9IEJQRl9GSUJfTEtVUF9SRVRfU1VDQ0VTUyxcXG4rXFx0ICAubG9va3VwX2ZsYWdzID0gQlBGX0ZJQl9MT09LVVBfVkxBTiB8IEJQRl9GSUJfTE9PS1VQX1NLSVBfTkVJR0gsXFxuK1xcdCAgLmV4cGVjdGVkX2RldiA9IFxcXCJ2ZXRoMVxcXCIsIC5jaGVja192bGFuID0gdHJ1ZSxcXG4rXFx0ICAudmxhbl9wcm90byA9IEVUSF9QXzgwMjFRLCAudmxhbl9pZCA9IFZMQU5fSUQsIH0sXFxuK1xcdC8qXFxuK1xcdCAqIHNrYiBwYXRoIHdpdGhvdXQgdG90X2xlbjogbXR1X3Jlc3VsdCBpcyB0aGUgVkxBTiBkZXZpY2UncyBtdHVcXG4rXFx0ICogKDE0MDApLCBub3QgdGhlIHBhcmVudCdzICgxNTAwKVxcbitcXHQgKi9cXG4rXFx0eyAuZGVzYyA9IFxcXCJJUHY0IFZMQU4gZWdyZXNzLCBza2ItcGF0aCBtdHUgaXMgdGhlIFZMQU4gZGV2aWNlJ3Mgd2l0aG91dCB0aGUgZmxhZ1xcXCIsXFxuK1xcdCAgLmRhZGRyID0gSVBWNF9WTEFOX0VHUkVTU19EU1QsIC5leHBlY3RlZF9yZXQgPSBCUEZfRklCX0xLVVBfUkVUX1NVQ0NFU1MsXFxuK1xcdCAgLmxvb2t1cF9mbGFncyA9IEJQRl9GSUJfTE9PS1VQX1NLSVBfTkVJR0gsXFxuK1xcdCAgLmV4cGVjdGVkX2RldiA9IFZMQU5fSUZBQ0UsIC5jaGVja192bGFuID0gdHJ1ZSwgLmV4cGVjdGVkX210dSA9IDE0MDAsIH0sXFxuK1xcdHsgLmRlc2MgPSBcXFwiSVB2NCBWTEFOIGVncmVzcywgZmxhZyBzZXQgYnV0IGVncmVzcyBpcyBub3QgYSBWTEFOXFxcIixcXG4rXFx0ICAuZGFkZHIgPSBJUFY0X05VRF9GQUlMRURfQUREUiwgLmV4cGVjdGVkX3JldCA9IEJQRl9GSUJfTEtVUF9SRVRfU1VDQ0VTUyxcXG4rXFx0ICAubG9va3VwX2ZsYWdzID0gQlBGX0ZJQl9MT09LVVBfVkxBTiB8IEJQRl9GSUJfTE9PS1VQX1NLSVBfTkVJR0gsXFxuK1xcdCAgLmV4cGVjdGVkX2RldiA9IFxcXCJ2ZXRoMVxcXCIsIC5jaGVja192bGFuID0gdHJ1ZSwgfSxcXG4rXFx0eyAuZGVzYyA9IFxcXCJJUHY0IFZMQU4gZWdyZXNzLCBRaW5RIG5vdCByZWR1Y2libGUgKFZMQU5fRkFJTFVSRSlcXFwiLFxcbitcXHQgIC5kYWRkciA9IElQVjRfUUlOUV9EU1QsXFxuK1xcdCAgLmV4cGVjdGVkX3JldCA9IEJQRl9GSUJfTEtVUF9SRVRfVkxBTl9GQUlMVVJFLFxcbitcXHQgIC5sb29rdXBfZmxhZ3MgPSBCUEZfRklCX0xPT0tVUF9WTEFOIHwgQlBGX0ZJQl9MT09LVVBfU0tJUF9ORUlHSCxcXG4rXFx0ICAuZXhwZWN0ZWRfZGV2ID0gXFxcInZldGgxXFxcIiwgLmNoZWNrX3ZsYW4gPSB0cnVlLCB9LFxcbitcXHR7IC5kZXNjID0gXFxcIklQdjQgUWluUSBlZ3Jlc3Mgd2l0aG91dCB0aGUgZmxhZyAoZXNjYXBlIGhhdGNoKVxcXCIsXFxuK1xcdCAgLmRhZGRyID0gSVBWNF9RSU5RX0RTVCwgLmV4cGVjdGVkX3JldCA9IEJQRl9GSUJfTEtVUF9SRVRfU1VDQ0VTUyxcXG4rXFx0ICAubG9va3VwX2ZsYWdzID0gQlBGX0ZJQl9MT09LVVBfU0tJUF9ORUlHSCxcXG4rXFx0ICAuZXhwZWN0ZWRfZGV2ID0gUUlOUV9JTk5FUl9JRkFDRSwgfSxcXG4rXFx0eyAuZGVzYyA9IFxcXCJJUHY2IFZMQU4gZWdyZXNzLCBzaW5nbGUgVkxBTlxcXCIsXFxuK1xcdCAgLmRhZGRyID0gSVBWNl9WTEFOX0VHUkVTU19EU1QsIC5leHBlY3RlZF9yZXQgPSBCUEZfRklCX0xLVVBfUkVUX1NVQ0NFU1MsXFxuK1xcdCAgLmxvb2t1cF9mbGFncyA9IEJQRl9GSUJfTE9PS1VQX1ZMQU4gfCBCUEZfRklCX0xPT0tVUF9TS0lQX05FSUdILFxcbitcXHQgIC5leHBlY3RlZF9kZXYgPSBcXFwidmV0aDFcXFwiLCAuY2hlY2tfdmxhbiA9IHRydWUsXFxuK1xcdCAgLnZsYW5fcHJvdG8gPSBFVEhfUF84MDIxUSwgLnZsYW5faWQgPSBWTEFOX0lELCB9LFxcbitcXHR7IC5kZXNjID0gXFxcIklQdjQgVkxBTiBlZ3Jlc3MsIG5laWdoYm91ciBvbiB0aGUgVkxBTiBkZXZpY2VcXFwiLFxcbitcXHQgIC5kYWRkciA9IElQVjRfVkxBTl9FR1JFU1NfRFNULCAuZXhwZWN0ZWRfcmV0ID0gQlBGX0ZJQl9MS1VQX1JFVF9TVUNDRVNTLFxcbitcXHQgIC5sb29rdXBfZmxhZ3MgPSBCUEZfRklCX0xPT0tVUF9WTEFOLFxcbitcXHQgIC5leHBlY3RlZF9kZXYgPSBcXFwidmV0aDFcXFwiLCAuY2hlY2tfdmxhbiA9IHRydWUsXFxuK1xcdCAgLnZsYW5fcHJvdG8gPSBFVEhfUF84MDIxUSwgLnZsYW5faWQgPSBWTEFOX0lELCAuZG1hYyA9IERNQUNfSU5JVCwgfSxcXG4rXFx0eyAuZGVzYyA9IFxcXCJJUHY0IFZMQU4gZWdyZXNzIGluIE9VVFBVVCBtb2RlXFxcIixcXG4rXFx0ICAuZGFkZHIgPSBJUFY0X1ZMQU5fRUdSRVNTX0RTVCwgLmV4cGVjdGVkX3JldCA9IEJQRl9GSUJfTEtVUF9SRVRfU1VDQ0VTUyxcXG4rXFx0ICAuaWlmID0gVkxBTl9JRkFDRSxcXG4rXFx0ICAubG9va3VwX2ZsYWdzID0gQlBGX0ZJQl9MT09LVVBfT1VUUFVUIHwgQlBGX0ZJQl9MT09LVVBfVkxBTiB8XFxuK1xcdFxcdFxcdCAgQlBGX0ZJQl9MT09LVVBfU0tJUF9ORUlHSCxcXG4rXFx0ICAuZXhwZWN0ZWRfZGV2ID0gXFxcInZldGgxXFxcIiwgLmNoZWNrX3ZsYW4gPSB0cnVlLFxcbitcXHQgIC52bGFuX3Byb3RvID0gRVRIX1BfODAyMVEsIC52bGFuX2lkID0gVkxBTl9JRCwgfSxcXG4rXFx0eyAuZGVzYyA9IFxcXCJJUHY0IFZMQU4gZWdyZXNzIG92ZXIgYSBib25kXFxcIixcXG4rXFx0ICAuZGFkZHIgPSBJUFY0X0JPTkRfVkxBTl9EU1QsIC5leHBlY3RlZF9yZXQgPSBCUEZfRklCX0xLVVBfUkVUX1NVQ0NFU1MsXFxuK1xcdCAgLmxvb2t1cF9mbGFncyA9IEJQRl9GSUJfTE9PS1VQX1ZMQU4gfCBCUEZfRklCX0xPT0tVUF9TS0lQX05FSUdILFxcbitcXHQgIC5leHBlY3RlZF9kZXYgPSBCT05EX0lGQUNFLCAuY2hlY2tfdmxhbiA9IHRydWUsXFxuK1xcdCAgLnZsYW5fcHJvdG8gPSBFVEhfUF84MDIxUSwgLnZsYW5faWQgPSBCT05EX1ZMQU5fSUQsIH0sXFxuK1xcdHsgLmRlc2MgPSBcXFwiSVB2NCBWTEFOIGVncmVzcyB2aWEgVEJJRCB0YWJsZVxcXCIsXFxuK1xcdCAgLmRhZGRyID0gSVBWNF9UQklEX1ZMQU5fRFNULCAuZXhwZWN0ZWRfcmV0ID0gQlBGX0ZJQl9MS1VQX1JFVF9TVUNDRVNTLFxcbitcXHQgIC5sb29rdXBfZmxhZ3MgPSBCUEZfRklCX0xPT0tVUF9ESVJFQ1QgfCBCUEZfRklCX0xPT0tVUF9UQklEIHxcXG4rXFx0XFx0XFx0ICBCUEZfRklCX0xPT0tVUF9WTEFOIHwgQlBGX0ZJQl9MT09LVVBfU0tJUF9ORUlHSCxcXG4rXFx0ICAudGJpZCA9IDEwMCxcXG4rXFx0ICAuZXhwZWN0ZWRfZGV2ID0gXFxcInZldGgyXFxcIiwgLmNoZWNrX3ZsYW4gPSB0cnVlLFxcbitcXHQgIC52bGFuX3Byb3RvID0gRVRIX1BfODAyMVEsIC52bGFuX2lkID0gVEJJRF9WTEFOX0lELCB9LFxcbitcXHR7IC5kZXNjID0gXFxcIklQdjQgVkxBTiBlZ3Jlc3MsIHN1Y2Nlc3Mgd3JpdGVzIG10dV9yZXN1bHQgd2l0aCB0aGUgc3dhcFxcXCIsXFxuK1xcdCAgLmRhZGRyID0gSVBWNF9WTEFOX01UVV9EU1QsIC5leHBlY3RlZF9yZXQgPSBCUEZfRklCX0xLVVBfUkVUX1NVQ0NFU1MsXFxuK1xcdCAgLnRvdF9sZW4gPSA1MDAsIC5leHBlY3RlZF9tdHUgPSAxMDAwLFxcbitcXHQgIC5sb29rdXBfZmxhZ3MgPSBCUEZfRklCX0xPT0tVUF9WTEFOIHwgQlBGX0ZJQl9MT09LVVBfU0tJUF9ORUlHSCxcXG4rXFx0ICAuZXhwZWN0ZWRfZGV2ID0gXFxcInZldGgxXFxcIiwgLmNoZWNrX3ZsYW4gPSB0cnVlLFxcbitcXHQgIC52bGFuX3Byb3RvID0gRVRIX1BfODAyMVEsIC52bGFuX2lkID0gVkxBTl9JRCwgfSxcXG4rXFx0eyAuZGVzYyA9IFxcXCJJUHY0IFZMQU4gZWdyZXNzLCBGUkFHX05FRURFRCByZXBvcnRzIG10dSwgc3dhcCB1bndyaXR0ZW5cXFwiLFxcbitcXHQgIC5kYWRkciA9IElQVjRfVkxBTl9NVFVfRFNULCAuZXhwZWN0ZWRfcmV0ID0gQlBGX0ZJQl9MS1VQX1JFVF9GUkFHX05FRURFRCxcXG4rXFx0ICAudG90X2xlbiA9IDE0MDAsIC5leHBlY3RlZF9tdHUgPSAxMDAwLFxcbitcXHQgIC5sb29rdXBfZmxhZ3MgPSBCUEZfRklCX0xPT0tVUF9WTEFOIHwgQlBGX0ZJQl9MT09LVVBfU0tJUF9ORUlHSCxcXG4rXFx0ICAuZXhwZWN0ZWRfZGV2ID0gXFxcInZldGgxXFxcIiwgLmNoZWNrX3ZsYW4gPSB0cnVlLCB9LFxcbitcXHQvKiB2bGFuIHRhZyBhcyBsb29rdXAgaW5wdXQgKi9cXG4rXFx0eyAuZGVzYyA9IFxcXCJJUHY0IFZMQU4gaW5wdXQsIG5vIGZsYWdcXFwiLFxcbitcXHQgIC5kYWRkciA9IElQVjRfVkxBTl9EU1QsIC5leHBlY3RlZF9yZXQgPSBCUEZfRklCX0xLVVBfUkVUX1NVQ0NFU1MsXFxuK1xcdCAgLmV4cGVjdGVkX2RzdCA9IElQVjRfR1cxLFxcbitcXHQgIC5sb29rdXBfZmxhZ3MgPSBCUEZfRklCX0xPT0tVUF9TS0lQX05FSUdILCB9LFxcbitcXHR7IC5kZXNjID0gXFxcIklQdjQgVkxBTiBpbnB1dCwgdGFnIHNlbGVjdHMgc3ViaW50ZXJmYWNlIHJvdXRlXFxcIixcXG4rXFx0ICAuZGFkZHIgPSBJUFY0X1ZMQU5fRFNULCAuZXhwZWN0ZWRfcmV0ID0gQlBGX0ZJQl9MS1VQX1JFVF9TVUNDRVNTLFxcbitcXHQgIC5leHBlY3RlZF9kc3QgPSBJUFY0X1ZMQU5fR1csIC5leHBlY3RlZF9kZXYgPSBWTEFOX0lGQUNFLFxcbitcXHQgIC5sb29rdXBfZmxhZ3MgPSBCUEZfRklCX0xPT0tVUF9WTEFOX0lOUFVUIHwgQlBGX0ZJQl9MT09LVVBfU0tJUF9ORUlHSCxcXG4rXFx0ICAudmxhbl9wcm90byA9IEVUSF9QXzgwMjFRLCAudmxhbl9pZCA9IFZMQU5fSUQsIH0sXFxuK1xcdHsgLmRlc2MgPSBcXFwiSVB2NiBWTEFOIGlucHV0LCB0YWcgc2VsZWN0cyBzdWJpbnRlcmZhY2Ugcm91dGVcXFwiLFxcbitcXHQgIC5kYWRkciA9IElQVjZfVkxBTl9EU1QsIC5leHBlY3RlZF9yZXQgPSBCUEZfRklCX0xLVVBfUkVUX1NVQ0NFU1MsXFxuK1xcdCAgLmV4cGVjdGVkX2RzdCA9IElQVjZfVkxBTl9HVywgLmV4cGVjdGVkX2RldiA9IFZMQU5fSUZBQ0UsXFxuK1xcdCAgLmxvb2t1cF9mbGFncyA9IEJQRl9GSUJfTE9PS1VQX1ZMQU5fSU5QVVQgfCBCUEZfRklCX0xPT0tVUF9TS0lQX05FSUdILFxcbitcXHQgIC52bGFuX3Byb3RvID0gRVRIX1BfODAyMVEsIC52bGFuX2lkID0gVkxBTl9JRCwgfSxcXG4rXFx0eyAuZGVzYyA9IFxcXCJJUHY0IFZMQU4gaW5wdXQgYW5kIGVncmVzcyBjb21iaW5lZFxcXCIsXFxuK1xcdCAgLmRhZGRyID0gSVBWNF9WTEFOX0RTVCwgLmV4cGVjdGVkX3JldCA9IEJQRl9GSUJfTEtVUF9SRVRfU1VDQ0VTUyxcXG4rXFx0ICAuZXhwZWN0ZWRfZHN0ID0gSVBWNF9WTEFOX0dXLCAuZXhwZWN0ZWRfZGV2ID0gXFxcInZldGgxXFxcIixcXG4rXFx0ICAuY2hlY2tfdmxhbiA9IHRydWUsXFxuK1xcdCAgLmxvb2t1cF9mbGFncyA9IEJQRl9GSUJfTE9PS1VQX1ZMQU5fSU5QVVQgfCBCUEZfRklCX0xPT0tVUF9WTEFOIHxcXG4rXFx0XFx0XFx0ICBCUEZfRklCX0xPT0tVUF9TS0lQX05FSUdILFxcbitcXHQgIC52bGFuX3Byb3RvID0gRVRIX1BfODAyMVEsIC52bGFuX2lkID0gVkxBTl9JRCwgfSxcXG4rXFx0eyAuZGVzYyA9IFxcXCJJUHY0IFZMQU4gaW5wdXQsIG5laWdoYm91ciByZXNvbHZlZCBvbiB0aGUgcm91dGVcXFwiLFxcbitcXHQgIC5kYWRkciA9IElQVjRfVkxBTl9EU1QsIC5leHBlY3RlZF9yZXQgPSBCUEZfRklCX0xLVVBfUkVUX1NVQ0NFU1MsXFxuK1xcdCAgLmV4cGVjdGVkX2RzdCA9IElQVjRfVkxBTl9HVywgLmV4cGVjdGVkX2RldiA9IFZMQU5fSUZBQ0UsXFxuK1xcdCAgLmxvb2t1cF9mbGFncyA9IEJQRl9GSUJfTE9PS1VQX1ZMQU5fSU5QVVQsXFxuK1xcdCAgLnZsYW5fcHJvdG8gPSBFVEhfUF84MDIxUSwgLnZsYW5faWQgPSBWTEFOX0lELCAuZG1hYyA9IERNQUNfSU5JVDIsIH0sXFxuK1xcdHsgLmRlc2MgPSBcXFwiSVB2NCBWTEFOIGlucHV0LCBzb3VyY2UgYWRkcmVzcyBmcm9tIHRoZSBzdWJpbnRlcmZhY2VcXFwiLFxcbitcXHQgIC5kYWRkciA9IElQVjRfVkxBTl9EU1QsIC5leHBlY3RlZF9yZXQgPSBCUEZfRklCX0xLVVBfUkVUX1NVQ0NFU1MsXFxuK1xcdCAgLmV4cGVjdGVkX3NyYyA9IElQVjRfVkxBTl9JRkFDRV9BRERSLFxcbitcXHQgIC5sb29rdXBfZmxhZ3MgPSBCUEZfRklCX0xPT0tVUF9WTEFOX0lOUFVUIHwgQlBGX0ZJQl9MT09LVVBfU1JDIHxcXG4rXFx0XFx0XFx0ICBCUEZfRklCX0xPT0tVUF9TS0lQX05FSUdILFxcbitcXHQgIC52bGFuX3Byb3RvID0gRVRIX1BfODAyMVEsIC52bGFuX2lkID0gVkxBTl9JRCwgfSxcXG4rXFx0LypcXG4rXFx0ICogVlJGOiB0aGUgcmVzb2x2ZWQgc3ViaW50ZXJmYWNlIGlzIGVuc2xhdmVkLCBzbyB0aGUgbDNtZGV2IHJ1bGVcXG4rXFx0ICogKGZ1bGwgbG9va3VwKSBhbmQgbDNtZGV2X2ZpYl90YWJsZV9yY3UoKSAoRElSRUNUKSBtdXN0IHNlbGVjdFxcbitcXHQgKiB0aGUgVlJGIHRhYmxlIGZyb20gdGhlIHJlc29sdmVkIGluZ3Jlc3NcXG4rXFx0ICovXFxuK1xcdHsgLmRlc2MgPSBcXFwiSVB2NCBWTEFOIGlucHV0LCBWUkYgc3ViaW50ZXJmYWNlLCBubyBmbGFnXFxcIixcXG4rXFx0ICAuZGFkZHIgPSBJUFY0X1ZSRl9EU1QsIC5leHBlY3RlZF9yZXQgPSBCUEZfRklCX0xLVVBfUkVUX1NVQ0NFU1MsXFxuK1xcdCAgLmV4cGVjdGVkX2RzdCA9IElQVjRfR1cxLFxcbitcXHQgIC5sb29rdXBfZmxhZ3MgPSBCUEZfRklCX0xPT0tVUF9TS0lQX05FSUdILCB9LFxcbitcXHR7IC5kZXNjID0gXFxcIklQdjQgVkxBTiBpbnB1dCwgdGFnIHNlbGVjdHMgVlJGIHRhYmxlXFxcIixcXG4rXFx0ICAuZGFkZHIgPSBJUFY0X1ZSRl9EU1QsIC5leHBlY3RlZF9yZXQgPSBCUEZfRklCX0xLVVBfUkVUX1NVQ0NFU1MsXFxuK1xcdCAgLmV4cGVjdGVkX2RzdCA9IElQVjRfVlJGX0dXLCAuZXhwZWN0ZWRfZGV2ID0gVlJGX1ZMQU5fSUZBQ0UsXFxuK1xcdCAgLmxvb2t1cF9mbGFncyA9IEJQRl9GSUJfTE9PS1VQX1ZMQU5fSU5QVVQgfCBCUEZfRklCX0xPT0tVUF9TS0lQX05FSUdILFxcbitcXHQgIC52bGFuX3Byb3RvID0gRVRIX1BfODAyMVEsIC52bGFuX2lkID0gVlJGX1ZMQU5fSUQsIH0sXFxuK1xcdHsgLmRlc2MgPSBcXFwiSVB2NCBWTEFOIGlucHV0LCBESVJFQ1QgdXNlcyBWUkYgdGFibGUgZnJvbSByZXNvbHZlZCBpbmdyZXNzXFxcIixcXG4rXFx0ICAuZGFkZHIgPSBJUFY0X1ZSRl9EU1QsIC5leHBlY3RlZF9yZXQgPSBCUEZfRklCX0xLVVBfUkVUX1NVQ0NFU1MsXFxuK1xcdCAgLmV4cGVjdGVkX2RzdCA9IElQVjRfVlJGX0dXLCAuZXhwZWN0ZWRfZGV2ID0gVlJGX1ZMQU5fSUZBQ0UsXFxuK1xcdCAgLmxvb2t1cF9mbGFncyA9IEJQRl9GSUJfTE9PS1VQX1ZMQU5fSU5QVVQgfCBCUEZfRklCX0xPT0tVUF9ESVJFQ1QgfFxcbitcXHRcXHRcXHQgIEJQRl9GSUJfTE9PS1VQX1NLSVBfTkVJR0gsXFxuK1xcdCAgLnZsYW5fcHJvdG8gPSBFVEhfUF84MDIxUSwgLnZsYW5faWQgPSBWUkZfVkxBTl9JRCwgfSxcXG4rXFx0LypcXG4rXFx0ICogZmFpbHVyZSBhcm1zIGFsc28gYXNzZXJ0IHBhcmFtcyBpcyBsZWZ0IHVudG91Y2hlZDogaWZpbmRleCBzdGlsbFxcbitcXHQgKiBuYW1lcyB0aGUgcGh5c2ljYWwgZGV2aWNlIGFuZCB0aGUgaW5wdXQgdGFnIGJ5dGVzIHN1cnZpdmVcXG4rXFx0ICovXFxuK1xcdHsgLmRlc2MgPSBcXFwiSVB2NCBWTEFOIGlucHV0LCBpbnZhbGlkIHByb3RvXFxcIixcXG4rXFx0ICAuZGFkZHIgPSBJUFY0X1ZMQU5fRFNULCAuZXhwZWN0ZWRfcmV0ID0gLUVJTlZBTCxcXG4rXFx0ICAuZXhwZWN0ZWRfZGV2ID0gXFxcInZldGgxXFxcIiwgLmNoZWNrX3ZsYW4gPSB0cnVlLFxcbitcXHQgIC5sb29rdXBfZmxhZ3MgPSBCUEZfRklCX0xPT0tVUF9WTEFOX0lOUFVUIHwgQlBGX0ZJQl9MT09LVVBfU0tJUF9ORUlHSCxcXG4rXFx0ICAudmxhbl9wcm90byA9IDB4MTIzNCwgLnZsYW5faWQgPSBWTEFOX0lELCB9LFxcbitcXHR7IC5kZXNjID0gXFxcIklQdjQgVkxBTiBpbnB1dCwgdW5tYXRjaGVkIFZJRFxcXCIsXFxuK1xcdCAgLmRhZGRyID0gSVBWNF9WTEFOX0RTVCwgLmV4cGVjdGVkX3JldCA9IEJQRl9GSUJfTEtVUF9SRVRfTk9UX0ZXREVELFxcbitcXHQgIC5leHBlY3RlZF9kZXYgPSBcXFwidmV0aDFcXFwiLCAuY2hlY2tfdmxhbiA9IHRydWUsXFxuK1xcdCAgLmxvb2t1cF9mbGFncyA9IEJQRl9GSUJfTE9PS1VQX1ZMQU5fSU5QVVQgfCBCUEZfRklCX0xPT0tVUF9TS0lQX05FSUdILFxcbitcXHQgIC52bGFuX3Byb3RvID0gRVRIX1BfODAyMVEsIC52bGFuX2lkID0gVkxBTl9WSURfVU5VU0VELCB9LFxcbitcXHR7IC5kZXNjID0gXFxcIklQdjQgVkxBTiBpbnB1dCwgc3ViaW50ZXJmYWNlIGRvd25cXFwiLFxcbitcXHQgIC5kYWRkciA9IElQVjRfVkxBTl9EU1QsIC5leHBlY3RlZF9yZXQgPSBCUEZfRklCX0xLVVBfUkVUX05PVF9GV0RFRCxcXG4rXFx0ICAuZXhwZWN0ZWRfZGV2ID0gXFxcInZldGgxXFxcIiwgLmNoZWNrX3ZsYW4gPSB0cnVlLFxcbitcXHQgIC5sb29rdXBfZmxhZ3MgPSBCUEZfRklCX0xPT0tVUF9WTEFOX0lOUFVUIHwgQlBGX0ZJQl9MT09LVVBfU0tJUF9ORUlHSCxcXG4rXFx0ICAudmxhbl9wcm90byA9IEVUSF9QXzgwMjFRLCAudmxhbl9pZCA9IFZMQU5fSURfRE9XTiwgfSxcXG4rXFx0LypcXG4rXFx0ICogdGhlIHJlc29sdmVyIHJ1bnMgYmVmb3JlIHRoZSBmb3J3YXJkaW5nIGNoZWNrLCBzbyBvbiBkZXZpY2VzXFxuK1xcdCAqIHdpdGggZm9yd2FyZGluZyBvZmYgRldEX0RJU0FCTEVEIChub3QgTk9UX0ZXREVEKSBwcm92ZXMgdGhlIHRhZ1xcbitcXHQgKiByZXNvbHZlZCB0byB0aGF0IGRldmljZSBhbmQgdGhlIGxvb2t1cCB1c2VkIGl0IGFzIGluZ3Jlc3NcXG4rXFx0ICovXFxuK1xcdHsgLmRlc2MgPSBcXFwiSVB2NCBWTEFOIGlucHV0LCA4MDIuMWFkIHRhZ1xcXCIsXFxuK1xcdCAgLmRhZGRyID0gSVBWNF9WTEFOX0RTVCwgLmV4cGVjdGVkX3JldCA9IEJQRl9GSUJfTEtVUF9SRVRfRldEX0RJU0FCTEVELFxcbitcXHQgIC5sb29rdXBfZmxhZ3MgPSBCUEZfRklCX0xPT0tVUF9WTEFOX0lOUFVUIHwgQlBGX0ZJQl9MT09LVVBfU0tJUF9ORUlHSCxcXG4rXFx0ICAudmxhbl9wcm90byA9IEVUSF9QXzgwMjFBRCwgLnZsYW5faWQgPSBRSU5RX0FEX1ZMQU5fSUQsIH0sXFxuK1xcdHsgLmRlc2MgPSBcXFwiSVB2NCBWTEFOIGlucHV0LCBQQ1AgYW5kIERFSSBiaXRzIGlnbm9yZWQgaW4gVENJXFxcIixcXG4rXFx0ICAuZGFkZHIgPSBJUFY0X1ZMQU5fRFNULCAuZXhwZWN0ZWRfcmV0ID0gQlBGX0ZJQl9MS1VQX1JFVF9TVUNDRVNTLFxcbitcXHQgIC5leHBlY3RlZF9kc3QgPSBJUFY0X1ZMQU5fR1csXFxuK1xcdCAgLmxvb2t1cF9mbGFncyA9IEJQRl9GSUJfTE9PS1VQX1ZMQU5fSU5QVVQgfCBCUEZfRklCX0xPT0tVUF9TS0lQX05FSUdILFxcbitcXHQgIC52bGFuX3Byb3RvID0gRVRIX1BfODAyMVEsIC52bGFuX2lkID0gMHhlMDAwIHwgVkxBTl9JRCwgfSxcXG4rXFx0eyAuZGVzYyA9IFxcXCJJUHY0IFZMQU4gaW5wdXQsIGlubmVyIFFpblEgZGV2aWNlIGZyb20gVkxBTiBpZmluZGV4XFxcIixcXG4rXFx0ICAuZGFkZHIgPSBJUFY0X1ZMQU5fRFNULCAuZXhwZWN0ZWRfcmV0ID0gQlBGX0ZJQl9MS1VQX1JFVF9GV0RfRElTQUJMRUQsXFxuK1xcdCAgLmlpZiA9IFFJTlFfT1VURVJfSUZBQ0UsXFxuK1xcdCAgLmxvb2t1cF9mbGFncyA9IEJQRl9GSUJfTE9PS1VQX1ZMQU5fSU5QVVQgfCBCUEZfRklCX0xPT0tVUF9TS0lQX05FSUdILFxcbitcXHQgIC52bGFuX3Byb3RvID0gRVRIX1BfODAyMVEsIC52bGFuX2lkID0gUUlOUV9JTk5FUl9WTEFOX0lELCB9LFxcbitcXHQvKlxcbitcXHQgKiBib25kaW5nOiB0aGUgVkxBTnMgbGl2ZSBvbiB0aGUgbWFzdGVyLCBhcyBvbiByZWNlaXZlLCB3aGVyZSB0aGVcXG4rXFx0ICogZnJhbWUgaXMgc3RlZXJlZCB0byB0aGUgbWFzdGVyIGJlZm9yZSBWTEFOIHByb2Nlc3Npbmc7IGEgcG9ydFxcbitcXHQgKiBpZmluZGV4IGRvZXMgbm90IG1hdGNoIChwb3J0cyBjYXJyeSB2aWQgc3RhdGUgYnV0IG5vIFZMQU4gZGV2cylcXG4rXFx0ICovXFxuK1xcdHsgLmRlc2MgPSBcXFwiSVB2NCBWTEFOIGlucHV0LCB0YWcgb24gYm9uZCBtYXN0ZXIgcmVzb2x2ZXNcXFwiLFxcbitcXHQgIC5kYWRkciA9IElQVjRfVkxBTl9EU1QsIC5leHBlY3RlZF9yZXQgPSBCUEZfRklCX0xLVVBfUkVUX0ZXRF9ESVNBQkxFRCxcXG4rXFx0ICAuaWlmID0gQk9ORF9JRkFDRSxcXG4rXFx0ICAubG9va3VwX2ZsYWdzID0gQlBGX0ZJQl9MT09LVVBfVkxBTl9JTlBVVCB8IEJQRl9GSUJfTE9PS1VQX1NLSVBfTkVJR0gsXFxuK1xcdCAgLnZsYW5fcHJvdG8gPSBFVEhfUF84MDIxUSwgLnZsYW5faWQgPSBCT05EX1ZMQU5fSUQsIH0sXFxuK1xcdHsgLmRlc2MgPSBcXFwiSVB2NCBWTEFOIGlucHV0LCB0YWcgb24gYm9uZCBwb3J0IGRvZXMgbm90IG1hdGNoXFxcIixcXG4rXFx0ICAuZGFkZHIgPSBJUFY0X1ZMQU5fRFNULCAuZXhwZWN0ZWRfcmV0ID0gQlBGX0ZJQl9MS1VQX1JFVF9OT1RfRldERUQsXFxuK1xcdCAgLmlpZiA9IEJPTkRfUE9SVCwgLmV4cGVjdGVkX2RldiA9IEJPTkRfUE9SVCwgLmNoZWNrX3ZsYW4gPSB0cnVlLFxcbitcXHQgIC5sb29rdXBfZmxhZ3MgPSBCUEZfRklCX0xPT0tVUF9WTEFOX0lOUFVUIHwgQlBGX0ZJQl9MT09LVVBfU0tJUF9ORUlHSCxcXG4rXFx0ICAudmxhbl9wcm90byA9IEVUSF9QXzgwMjFRLCAudmxhbl9pZCA9IEJPTkRfVkxBTl9JRCwgfSxcXG4rXFx0eyAuZGVzYyA9IFxcXCJJUHY2IFZMQU4gaW5wdXQsIGludmFsaWQgcHJvdG9cXFwiLFxcbitcXHQgIC5kYWRkciA9IElQVjZfVkxBTl9EU1QsIC5leHBlY3RlZF9yZXQgPSAtRUlOVkFMLFxcbitcXHQgIC5leHBlY3RlZF9kZXYgPSBcXFwidmV0aDFcXFwiLCAuY2hlY2tfdmxhbiA9IHRydWUsXFxuK1xcdCAgLmxvb2t1cF9mbGFncyA9IEJQRl9GSUJfTE9PS1VQX1ZMQU5fSU5QVVQgfCBCUEZfRklCX0xPT0tVUF9TS0lQX05FSUdILFxcbitcXHQgIC52bGFuX3Byb3RvID0gMHgxMjM0LCAudmxhbl9pZCA9IFZMQU5fSUQsIH0sXFxuK1xcdHsgLmRlc2MgPSBcXFwiSVB2NCBWTEFOIGlucHV0LCBWSUQgMCBwcmlvcml0eSB0YWcgZmFpbHMgY2xvc2VkXFxcIixcXG4rXFx0ICAuZGFkZHIgPSBJUFY0X1ZMQU5fRFNULCAuZXhwZWN0ZWRfcmV0ID0gQlBGX0ZJQl9MS1VQX1JFVF9OT1RfRldERUQsXFxuK1xcdCAgLmV4cGVjdGVkX2RldiA9IFxcXCJ2ZXRoMVxcXCIsIC5jaGVja192bGFuID0gdHJ1ZSxcXG4rXFx0ICAubG9va3VwX2ZsYWdzID0gQlBGX0ZJQl9MT09LVVBfVkxBTl9JTlBVVCB8IEJQRl9GSUJfTE9PS1VQX1NLSVBfTkVJR0gsXFxuK1xcdCAgLnZsYW5fcHJvdG8gPSBFVEhfUF84MDIxUSwgLnZsYW5faWQgPSAwLCB9LFxcbitcXHR7IC5kZXNjID0gXFxcIklQdjYgVkxBTiBpbnB1dCwgdW5tYXRjaGVkIFZJRFxcXCIsXFxuK1xcdCAgLmRhZGRyID0gSVBWNl9WTEFOX0RTVCwgLmV4cGVjdGVkX3JldCA9IEJQRl9GSUJfTEtVUF9SRVRfTk9UX0ZXREVELFxcbitcXHQgIC5leHBlY3RlZF9kZXYgPSBcXFwidmV0aDFcXFwiLCAuY2hlY2tfdmxhbiA9IHRydWUsXFxuK1xcdCAgLmxvb2t1cF9mbGFncyA9IEJQRl9GSUJfTE9PS1VQX1ZMQU5fSU5QVVQgfCBCUEZfRklCX0xPT0tVUF9TS0lQX05FSUdILFxcbitcXHQgIC52bGFuX3Byb3RvID0gRVRIX1BfODAyMVEsIC52bGFuX2lkID0gVkxBTl9WSURfVU5VU0VELCB9LFxcbitcXHR7IC5kZXNjID0gXFxcInVua25vd24gZmxhZyBiaXQgcmVqZWN0ZWRcXFwiLFxcbitcXHQgIC5kYWRkciA9IElQVjRfVkxBTl9EU1QsIC5leHBlY3RlZF9yZXQgPSAtRUlOVkFMLFxcbitcXHQgIC5sb29rdXBfZmxhZ3MgPSAoMSBcXHUwMDNjXFx1MDAzYyAxNCkgfCBCUEZfRklCX0xPT0tVUF9TS0lQX05FSUdILCB9LFxcbitcXHR7IC5kZXNjID0gXFxcIklQdjQgVkxBTiBpbnB1dCByZWplY3RlZCB3aXRoIFRCSURcXFwiLFxcbitcXHQgIC5kYWRkciA9IElQVjRfVkxBTl9EU1QsIC5leHBlY3RlZF9yZXQgPSAtRUlOVkFMLFxcbitcXHQgIC5sb29rdXBfZmxhZ3MgPSBCUEZfRklCX0xPT0tVUF9WTEFOX0lOUFVUIHwgQlBGX0ZJQl9MT09LVVBfVEJJRCxcXG4rXFx0ICAudmxhbl9wcm90byA9IEVUSF9QXzgwMjFRLCAudmxhbl9pZCA9IFZMQU5fSUQsIH0sXFxuK1xcdHsgLmRlc2MgPSBcXFwiSVB2NCBWTEFOIGlucHV0IHJlamVjdGVkIHdpdGggT1VUUFVUXFxcIixcXG4rXFx0ICAuZGFkZHIgPSBJUFY0X1ZMQU5fRFNULCAuZXhwZWN0ZWRfcmV0ID0gLUVJTlZBTCxcXG4rXFx0ICAubG9va3VwX2ZsYWdzID0gQlBGX0ZJQl9MT09LVVBfVkxBTl9JTlBVVCB8IEJQRl9GSUJfTE9PS1VQX09VVFBVVCxcXG4rXFx0ICAudmxhbl9wcm90byA9IEVUSF9QXzgwMjFRLCAudmxhbl9pZCA9IFZMQU5fSUQsIH0sXFxuIH07XFxuIFxcbiBzdGF0aWMgaW50IHNldHVwX25ldG5zKHZvaWQpXFxuQEAgLTIwNCw2ICs0NzUsMTEwIEBAIHN0YXRpYyBpbnQgc2V0dXBfbmV0bnModm9pZClcXG4gXFx0U1lTKGZhaWwsIFxcXCJpcCBydWxlIGFkZCBwcmlvIDIgZndtYXJrICVkIGxvb2t1cCAlc1xcXCIsIE1BUkssIE1BUktfVEFCTEUpO1xcbiBcXHRTWVMoZmFpbCwgXFxcImlwIC02IHJ1bGUgYWRkIHByaW8gMiBmd21hcmsgJWQgbG9va3VwICVzXFxcIiwgTUFSSywgTUFSS19UQUJMRSk7XFxuIFxcbitcXHQvKlxcbitcXHQgKiBTZXR1cCBmb3IgdmxhbiB0ZXN0czogYSBzdWJpbnRlcmZhY2UgZm9yIGVncmVzcyByZXNvbHV0aW9uIGFuZFxcbitcXHQgKiB0YWctYXMtaW5wdXQsIGEgUWluUSBzdGFjaywgYW5kIGFuIGlpZiBydWxlIHNvIHRoZSBpbnB1dCB0ZXN0c1xcbitcXHQgKiBvYnNlcnZlIHdoaWNoIGRldmljZSB0aGUgbG9va3VwIHVzZWQgYXMgaW5ncmVzcy5cXG4rXFx0ICovXFxuK1xcdFNZUyhmYWlsLCBcXFwiaXAgbGluayBhZGQgbGluayB2ZXRoMSBuYW1lICVzIHR5cGUgdmxhbiBpZCAlZFxcXCIsXFxuK1xcdCAgICBWTEFOX0lGQUNFLCBWTEFOX0lEKTtcXG4rXFx0U1lTKGZhaWwsIFxcXCJpcCBsaW5rIHNldCBkZXYgJXMgdXBcXFwiLCBWTEFOX0lGQUNFKTtcXG4rXFx0LypcXG4rXFx0ICogbG93ZXIgdGhhbiB0aGUgdmV0aDEgcGFyZW50ICgxNTAwKTogdGhlIHNrYi1wYXRoIG10dSBjaGVjayB1c2VzIHRoZVxcbitcXHQgKiBGSUIgcmVzdWx0IChWTEFOKSBkZXZpY2UsIHNvIG10dV9yZXN1bHQgaXMgdGhpcyB2YWx1ZSB3aXRoIG9yXFxuK1xcdCAqIHdpdGhvdXQgdGhlIGVncmVzcyBzd2FwLCB3aGljaCB0d28gYXJtcyBiZWxvdyBwaW5cXG4rXFx0ICovXFxuK1xcdFNZUyhmYWlsLCBcXFwiaXAgbGluayBzZXQgZGV2ICVzIG10dSAxNDAwXFxcIiwgVkxBTl9JRkFDRSk7XFxuK1xcdFNZUyhmYWlsLCBcXFwiaXAgYWRkciBhZGQgJXMvMjQgZGV2ICVzXFxcIiwgSVBWNF9WTEFOX0lGQUNFX0FERFIsIFZMQU5fSUZBQ0UpO1xcbitcXHRTWVMoZmFpbCwgXFxcImlwIGFkZHIgYWRkICVzLzY0IGRldiAlcyBub2RhZFxcXCIsIElQVjZfVkxBTl9JRkFDRV9BRERSLCBWTEFOX0lGQUNFKTtcXG4rXFxuK1xcdC8qXFxuK1xcdCAqIHN0YXlzIGRvd246IHRoZSBpbnB1dCBmbGFnIG11c3QgdHJlYXQgaXRzIHRhZyB0aGUgd2F5IHJlYWxcXG4rXFx0ICogaW5ncmVzcyB0cmVhdHMgYSBmcmFtZSBhcnJpdmluZyBvbiBhIGRvd24gVkxBTiBkZXZpY2UgKGRyb3ApXFxuK1xcdCAqL1xcbitcXHRTWVMoZmFpbCwgXFxcImlwIGxpbmsgYWRkIGxpbmsgdmV0aDEgbmFtZSAlcyB0eXBlIHZsYW4gaWQgJWRcXFwiLFxcbitcXHQgICAgVkxBTl9JRkFDRV9ET1dOLCBWTEFOX0lEX0RPV04pO1xcbitcXG4rXFx0ZXJyID0gd3JpdGVfc3lzY3RsKFxcXCIvcHJvYy9zeXMvbmV0L2lwdjQvY29uZi9cXFwiIFZMQU5fSUZBQ0UgXFxcIi9mb3J3YXJkaW5nXFxcIiwgXFxcIjFcXFwiKTtcXG4rXFx0aWYgKCFBU1NFUlRfT0soZXJyLCBcXFwid3JpdGVfc3lzY3RsKG5ldC5pcHY0LmNvbmYuXFxcIiBWTEFOX0lGQUNFIFxcXCIuZm9yd2FyZGluZylcXFwiKSlcXG4rXFx0XFx0Z290byBmYWlsO1xcbitcXG4rXFx0ZXJyID0gd3JpdGVfc3lzY3RsKFxcXCIvcHJvYy9zeXMvbmV0L2lwdjYvY29uZi9cXFwiIFZMQU5fSUZBQ0UgXFxcIi9mb3J3YXJkaW5nXFxcIiwgXFxcIjFcXFwiKTtcXG4rXFx0aWYgKCFBU1NFUlRfT0soZXJyLCBcXFwid3JpdGVfc3lzY3RsKG5ldC5pcHY2LmNvbmYuXFxcIiBWTEFOX0lGQUNFIFxcXCIuZm9yd2FyZGluZylcXFwiKSlcXG4rXFx0XFx0Z290byBmYWlsO1xcbitcXG4rXFx0U1lTKGZhaWwsIFxcXCJpcCBsaW5rIGFkZCBsaW5rIHZldGgxIG5hbWUgJXMgdHlwZSB2bGFuIHByb3RvIDgwMi4xYWQgaWQgMjAwXFxcIixcXG4rXFx0ICAgIFFJTlFfT1VURVJfSUZBQ0UpO1xcbitcXHRTWVMoZmFpbCwgXFxcImlwIGxpbmsgYWRkIGxpbmsgJXMgbmFtZSAlcyB0eXBlIHZsYW4gaWQgMzAwXFxcIixcXG4rXFx0ICAgIFFJTlFfT1VURVJfSUZBQ0UsIFFJTlFfSU5ORVJfSUZBQ0UpO1xcbitcXHRTWVMoZmFpbCwgXFxcImlwIGxpbmsgc2V0IGRldiAlcyB1cFxcXCIsIFFJTlFfT1VURVJfSUZBQ0UpO1xcbitcXHRTWVMoZmFpbCwgXFxcImlwIGxpbmsgc2V0IGRldiAlcyB1cFxcXCIsIFFJTlFfSU5ORVJfSUZBQ0UpO1xcbitcXHRTWVMoZmFpbCwgXFxcImlwIHJvdXRlIGFkZCAlcy8zMiBkZXYgJXNcXFwiLCBJUFY0X1FJTlFfRFNULCBRSU5RX0lOTkVSX0lGQUNFKTtcXG4rXFxuK1xcdFNZUyhmYWlsLCBcXFwiaXAgcm91dGUgYWRkICVzLzMyIHZpYSAlc1xcXCIsIElQVjRfVkxBTl9EU1QsIElQVjRfR1cxKTtcXG4rXFx0U1lTKGZhaWwsIFxcXCJpcCByb3V0ZSBhZGQgdGFibGUgJXMgJXMvMzIgdmlhICVzXFxcIixcXG4rXFx0ICAgIFZMQU5fVEFCTEUsIElQVjRfVkxBTl9EU1QsIElQVjRfVkxBTl9HVyk7XFxuK1xcdFNZUyhmYWlsLCBcXFwiaXAgcnVsZSBhZGQgcHJpbyAzIGlpZiAlcyBsb29rdXAgJXNcXFwiLCBWTEFOX0lGQUNFLCBWTEFOX1RBQkxFKTtcXG4rXFx0U1lTKGZhaWwsIFxcXCJpcCAtNiByb3V0ZSBhZGQgJXMvMTI4IHZpYSAlc1xcXCIsIElQVjZfVkxBTl9EU1QsIElQVjZfR1cxKTtcXG4rXFx0U1lTKGZhaWwsIFxcXCJpcCAtNiByb3V0ZSBhZGQgdGFibGUgJXMgJXMvMTI4IHZpYSAlc1xcXCIsXFxuK1xcdCAgICBWTEFOX1RBQkxFLCBJUFY2X1ZMQU5fRFNULCBJUFY2X1ZMQU5fR1cpO1xcbitcXHRTWVMoZmFpbCwgXFxcImlwIC02IHJ1bGUgYWRkIHByaW8gMyBpaWYgJXMgbG9va3VwICVzXFxcIiwgVkxBTl9JRkFDRSwgVkxBTl9UQUJMRSk7XFxuK1xcbitcXHQvKlxcbitcXHQgKiBhIGJvbmQgd2l0aCBvbmUgcG9ydCBhbmQgYSBWTEFOIG9uIHRoZSBib25kOiBWTEFOcyBvbiBhIGJvbmRcXG4rXFx0ICogbGl2ZSBvbiB0aGUgbWFzdGVyLCBzbyByZXNvbHV0aW9uIHN1Y2NlZWRzIGZvciB0aGUgbWFzdGVyJ3NcXG4rXFx0ICogaWZpbmRleCBhbmQgZmFpbHMgY2xvc2VkIGZvciBhIHBvcnQncywgbWF0Y2hpbmcgcmVjZWl2ZSwgd2hpY2hcXG4rXFx0ICogc3RlZXJzIHRoZSBmcmFtZSB0byB0aGUgbWFzdGVyIGJlZm9yZSBWTEFOIHByb2Nlc3NpbmdcXG4rXFx0ICovXFxuK1xcdFNZUyhmYWlsLCBcXFwiaXAgbGluayBhZGQgJXMgdHlwZSBib25kXFxcIiwgQk9ORF9JRkFDRSk7XFxuK1xcdFNZUyhmYWlsLCBcXFwiaXAgbGluayBhZGQgJXMgdHlwZSB2ZXRoIHBlZXIgbmFtZSAlc1xcXCIsIEJPTkRfUE9SVCwgQk9ORF9QT1JUX1BFRVIpO1xcbitcXHRTWVMoZmFpbCwgXFxcImlwIGxpbmsgc2V0ICVzIG1hc3RlciAlc1xcXCIsIEJPTkRfUE9SVCwgQk9ORF9JRkFDRSk7XFxuK1xcdFNZUyhmYWlsLCBcXFwiaXAgbGluayBzZXQgZGV2ICVzIHVwXFxcIiwgQk9ORF9JRkFDRSk7XFxuK1xcdFNZUyhmYWlsLCBcXFwiaXAgbGluayBzZXQgZGV2ICVzIHVwXFxcIiwgQk9ORF9QT1JUKTtcXG4rXFx0U1lTKGZhaWwsIFxcXCJpcCBsaW5rIGFkZCBsaW5rICVzIG5hbWUgJXMuJWQgdHlwZSB2bGFuIGlkICVkXFxcIixcXG4rXFx0ICAgIEJPTkRfSUZBQ0UsIEJPTkRfSUZBQ0UsIEJPTkRfVkxBTl9JRCwgQk9ORF9WTEFOX0lEKTtcXG4rXFx0U1lTKGZhaWwsIFxcXCJpcCBsaW5rIHNldCBkZXYgJXMuJWQgdXBcXFwiLCBCT05EX0lGQUNFLCBCT05EX1ZMQU5fSUQpO1xcbitcXHRTWVMoZmFpbCwgXFxcImlwIHJvdXRlIGFkZCAlcy8zMiBkZXYgJXMuJWRcXFwiLFxcbitcXHQgICAgSVBWNF9CT05EX1ZMQU5fRFNULCBCT05EX0lGQUNFLCBCT05EX1ZMQU5fSUQpO1xcbitcXG4rXFx0LypcXG4rXFx0ICogYSBWUkYgd2l0aCBpdHMgb3duIGRlZGljYXRlZCBzdWJpbnRlcmZhY2UgKHRoZSBpaWYgcnVsZXMgYWJvdmVcXG4rXFx0ICogbXVzdCBub3Qgc2VlIGl0KSwgZm9yIHRoZSB0YWJsZS1zZWxlY3Rpb24tYnktaW5ncmVzcyBjYXNlc1xcbitcXHQgKi9cXG4rXFx0U1lTKGZhaWwsIFxcXCJpcCBsaW5rIGFkZCAlcyB0eXBlIHZyZiB0YWJsZSAlc1xcXCIsIFZSRl9JRkFDRSwgVlJGX1RBQkxFKTtcXG4rXFx0U1lTKGZhaWwsIFxcXCJpcCBsaW5rIHNldCBkZXYgJXMgdXBcXFwiLCBWUkZfSUZBQ0UpO1xcbitcXHRTWVMoZmFpbCwgXFxcImlwIGxpbmsgYWRkIGxpbmsgdmV0aDEgbmFtZSAlcyB0eXBlIHZsYW4gaWQgJWRcXFwiLFxcbitcXHQgICAgVlJGX1ZMQU5fSUZBQ0UsIFZSRl9WTEFOX0lEKTtcXG4rXFx0U1lTKGZhaWwsIFxcXCJpcCBsaW5rIHNldCAlcyBtYXN0ZXIgJXNcXFwiLCBWUkZfVkxBTl9JRkFDRSwgVlJGX0lGQUNFKTtcXG4rXFx0U1lTKGZhaWwsIFxcXCJpcCBsaW5rIHNldCBkZXYgJXMgdXBcXFwiLCBWUkZfVkxBTl9JRkFDRSk7XFxuK1xcdFNZUyhmYWlsLCBcXFwiaXAgYWRkciBhZGQgJXMvMjQgZGV2ICVzXFxcIiwgSVBWNF9WUkZfSUZBQ0VfQUREUiwgVlJGX1ZMQU5fSUZBQ0UpO1xcbitcXHRlcnIgPSB3cml0ZV9zeXNjdGwoXFxcIi9wcm9jL3N5cy9uZXQvaXB2NC9jb25mL1xcXCIgVlJGX1ZMQU5fSUZBQ0UgXFxcIi9mb3J3YXJkaW5nXFxcIiwgXFxcIjFcXFwiKTtcXG4rXFx0aWYgKCFBU1NFUlRfT0soZXJyLCBcXFwid3JpdGVfc3lzY3RsKG5ldC5pcHY0LmNvbmYuXFxcIiBWUkZfVkxBTl9JRkFDRSBcXFwiLmZvcndhcmRpbmcpXFxcIikpXFxuK1xcdFxcdGdvdG8gZmFpbDtcXG4rXFx0U1lTKGZhaWwsIFxcXCJpcCByb3V0ZSBhZGQgJXMvMzIgdmlhICVzXFxcIiwgSVBWNF9WUkZfRFNULCBJUFY0X0dXMSk7XFxuK1xcdFNZUyhmYWlsLCBcXFwiaXAgcm91dGUgYWRkIHRhYmxlICVzICVzLzMyIHZpYSAlc1xcXCIsXFxuK1xcdCAgICBWUkZfVEFCTEUsIElQVjRfVlJGX0RTVCwgSVBWNF9WUkZfR1cpO1xcbitcXG4rXFx0LyogbmVpZ2hib3VycyBvbiB0aGUgVkxBTiBzdWJpbnRlcmZhY2UgZm9yIHRoZSBub24tU0tJUF9ORUlHSCBjYXNlcyAqL1xcbitcXHRlcnIgPSB3cml0ZV9zeXNjdGwoXFxcIi9wcm9jL3N5cy9uZXQvaXB2NC9uZWlnaC9cXFwiIFZMQU5fSUZBQ0UgXFxcIi9nY19zdGFsZV90aW1lXFxcIiwgXFxcIjkwMFxcXCIpO1xcbitcXHRpZiAoIUFTU0VSVF9PSyhlcnIsIFxcXCJ3cml0ZV9zeXNjdGwobmV0LmlwdjQubmVpZ2guXFxcIiBWTEFOX0lGQUNFIFxcXCIuZ2Nfc3RhbGVfdGltZSlcXFwiKSlcXG4rXFx0XFx0Z290byBmYWlsO1xcbitcXHRTWVMoZmFpbCwgXFxcImlwIG5laWdoIGFkZCAlcyBkZXYgJXMgbGxhZGRyICVzIG51ZCBzdGFsZVxcXCIsXFxuK1xcdCAgICBJUFY0X1ZMQU5fRUdSRVNTX0RTVCwgVkxBTl9JRkFDRSwgRE1BQyk7XFxuK1xcdFNZUyhmYWlsLCBcXFwiaXAgbmVpZ2ggYWRkICVzIGRldiAlcyBsbGFkZHIgJXMgbnVkIHN0YWxlXFxcIixcXG4rXFx0ICAgIElQVjRfVkxBTl9HVywgVkxBTl9JRkFDRSwgRE1BQzIpO1xcbitcXG4rXFx0LyogYSBWTEFOIG9uIHZldGgyIHdpdGggYSByb3V0ZSBpbiB0aGUgdGJpZCB0ZXN0IHRhYmxlICovXFxuK1xcdFNZUyhmYWlsLCBcXFwiaXAgbGluayBhZGQgbGluayB2ZXRoMiBuYW1lICVzIHR5cGUgdmxhbiBpZCAlZFxcXCIsXFxuK1xcdCAgICBUQklEX1ZMQU5fSUZBQ0UsIFRCSURfVkxBTl9JRCk7XFxuK1xcdFNZUyhmYWlsLCBcXFwiaXAgbGluayBzZXQgZGV2ICVzIHVwXFxcIiwgVEJJRF9WTEFOX0lGQUNFKTtcXG4rXFx0U1lTKGZhaWwsIFxcXCJpcCByb3V0ZSBhZGQgdGFibGUgMTAwICVzLzMyIGRldiAlc1xcXCIsXFxuK1xcdCAgICBJUFY0X1RCSURfVkxBTl9EU1QsIFRCSURfVkxBTl9JRkFDRSk7XFxuK1xcbitcXHQvKiBhIGxvY2tlZC1tdHUgcm91dGUgdmlhIHRoZSBzdWJpbnRlcmZhY2UgZm9yIHRoZSBGUkFHX05FRURFRCBjYXNlICovXFxuK1xcdFNZUyhmYWlsLCBcXFwiaXAgcm91dGUgYWRkICVzLzMyIGRldiAlcyBtdHUgbG9jayAxMDAwXFxcIixcXG4rXFx0ICAgIElQVjRfVkxBTl9NVFVfRFNULCBWTEFOX0lGQUNFKTtcXG4rXFxuIFxcdHJldHVybiAwO1xcbiBmYWlsOlxcbiBcXHRyZXR1cm4gLTE7XFxuQEAgLTIxOCw5ICs1OTMsMTYgQEAgc3RhdGljIGludCBzZXRfbG9va3VwX3BhcmFtcyhzdHJ1Y3QgYnBmX2ZpYl9sb29rdXAgKnBhcmFtcyxcXG4gXFx0bWVtc2V0KHBhcmFtcywgMCwgc2l6ZW9mKCpwYXJhbXMpKTtcXG4gXFxuIFxcdHBhcmFtcy1cXHUwMDNlbDRfcHJvdG9jb2wgPSBJUFBST1RPX1RDUDtcXG4tXFx0cGFyYW1zLVxcdTAwM2VpZmluZGV4ID0gaWZpbmRleDtcXG4rXFx0cGFyYW1zLVxcdTAwM2VpZmluZGV4ID0gdGVzdC1cXHUwMDNlaWlmID8gaWZfbmFtZXRvaW5kZXgodGVzdC1cXHUwMDNlaWlmKSA6IGlmaW5kZXg7XFxuIFxcdHBhcmFtcy1cXHUwMDNldGJpZCA9IHRlc3QtXFx1MDAzZXRiaWQ7XFxuIFxcdHBhcmFtcy1cXHUwMDNlbWFyayA9IHRlc3QtXFx1MDAzZW1hcms7XFxuK1xcdHBhcmFtcy1cXHUwMDNldG90X2xlbiA9IHRlc3QtXFx1MDAzZXRvdF9sZW47XFxuK1xcbitcXHQvKiBoX3ZsYW5fcHJvdG8vaF92bGFuX1RDSSB1bmlvbiB3aXRoIHRiaWQgKi9cXG4rXFx0aWYgKHRlc3QtXFx1MDAzZWxvb2t1cF9mbGFncyBcXHUwMDI2IEJQRl9GSUJfTE9PS1VQX1ZMQU5fSU5QVVQpIHtcXG4rXFx0XFx0cGFyYW1zLVxcdTAwM2VoX3ZsYW5fcHJvdG8gPSBodG9ucyh0ZXN0LVxcdTAwM2V2bGFuX3Byb3RvKTtcXG4rXFx0XFx0cGFyYW1zLVxcdTAwM2VoX3ZsYW5fVENJID0gaHRvbnModGVzdC1cXHUwMDNldmxhbl9pZCk7XFxuK1xcdH1cXG4gXFxuIFxcdGlmIChpbmV0X3B0b24oQUZfSU5FVDYsIHRlc3QtXFx1MDAzZWRhZGRyLCBwYXJhbXMtXFx1MDAzZWlwdjZfZHN0KSA9PSAxKSB7XFxuIFxcdFxcdHBhcmFtcy1cXHUwMDNlZmFtaWx5ID0gQUZfSU5FVDY7XFxuQEAgLTI5OCw3ICs2ODAsNyBAQCB2b2lkIHRlc3RfZmliX2xvb2t1cCh2b2lkKVxcbiBcXHRzdHJ1Y3QgbnN0b2tlbiAqbnN0b2tlbiA9IE5VTEw7XFxuIFxcdHN0cnVjdCBfX3NrX2J1ZmYgc2tiID0geyB9O1xcbiBcXHRzdHJ1Y3QgZmliX2xvb2t1cCAqc2tlbDtcXG4tXFx0aW50IHByb2dfZmQsIGVyciwgcmV0LCBpO1xcbitcXHRpbnQgcHJvZ19mZCwgeGRwX2ZkLCBlcnIsIHJldCwgaTtcXG4gXFxuIFxcdC8qIFRoZSB0ZXN0IGRvZXMgbm90IHVzZSB0aGUgc2tiLVxcdTAwM2VkYXRhLCBzb1xcbiBcXHQgKiB1c2UgcGt0X3Y2IGZvciBib3RoIHY2IGFuZCB2NCB0ZXN0LlxcbkBAIC0zMDksMTEgKzY5MSwxNiBAQCB2b2lkIHRlc3RfZmliX2xvb2t1cCh2b2lkKVxcbiBcXHRcXHQgICAgLmN0eF9pbiA9IFxcdTAwMjZza2IsXFxuIFxcdFxcdCAgICAuY3R4X3NpemVfaW4gPSBzaXplb2Yoc2tiKSxcXG4gXFx0KTtcXG4rXFx0TElCQlBGX09QVFMoYnBmX3Rlc3RfcnVuX29wdHMsIHhkcF9vcHRzLFxcbitcXHRcXHQgICAgLmRhdGFfaW4gPSBcXHUwMDI2cGt0X3Y2LFxcbitcXHRcXHQgICAgLmRhdGFfc2l6ZV9pbiA9IHNpemVvZihwa3RfdjYpLFxcbitcXHQpO1xcbiBcXG4gXFx0c2tlbCA9IGZpYl9sb29rdXBfX29wZW5fYW5kX2xvYWQoKTtcXG4gXFx0aWYgKCFBU1NFUlRfT0tfUFRSKHNrZWwsIFxcXCJza2VsIG9wZW5fYW5kX2xvYWRcXFwiKSlcXG4gXFx0XFx0cmV0dXJuO1xcbiBcXHRwcm9nX2ZkID0gYnBmX3Byb2dyYW1fX2ZkKHNrZWwtXFx1MDAzZXByb2dzLmZpYl9sb29rdXApO1xcbitcXHR4ZHBfZmQgPSBicGZfcHJvZ3JhbV9fZmQoc2tlbC1cXHUwMDNlcHJvZ3MuZmliX2xvb2t1cF94ZHApO1xcbiBcXG4gXFx0U1lTKGZhaWwsIFxcXCJpcCBuZXRucyBhZGQgJXNcXFwiLCBOU19URVNUKTtcXG4gXFxuQEAgLTM0Myw2ICs3MzAsMTUgQEAgdm9pZCB0ZXN0X2ZpYl9sb29rdXAodm9pZClcXG4gXFx0XFx0aWYgKCFBU1NFUlRfT0soZXJyLCBcXFwiYnBmX3Byb2dfdGVzdF9ydW5fb3B0c1xcXCIpKVxcbiBcXHRcXHRcXHRjb250aW51ZTtcXG4gXFxuK1xcdFxcdC8qIEJQRl9GSUJfTE9PS1VQX1ZMQU4gaXMgWERQLW9ubHk7IHRoZSB0YyBoZWxwZXIgcmVqZWN0cyBpdC5cXG4rXFx0XFx0ICogVGhlc2UgY2FzZXMgYXJlIGV4ZXJjaXNlZCBvbiB0aGUgWERQIHBhdGggYmVsb3cuXFxuK1xcdFxcdCAqL1xcbitcXHRcXHRpZiAodGVzdHNbaV0ubG9va3VwX2ZsYWdzIFxcdTAwMjYgQlBGX0ZJQl9MT09LVVBfVkxBTikge1xcbitcXHRcXHRcXHRBU1NFUlRfRVEoc2tlbC1cXHUwMDNlYnNzLVxcdTAwM2VmaWJfbG9va3VwX3JldCwgLUVJTlZBTCxcXG4rXFx0XFx0XFx0XFx0ICBcXFwidGMgcmVqZWN0cyBCUEZfRklCX0xPT0tVUF9WTEFOXFxcIik7XFxuK1xcdFxcdFxcdGNvbnRpbnVlO1xcbitcXHRcXHR9XFxuK1xcbiBcXHRcXHRBU1NFUlRfRVEoc2tlbC1cXHUwMDNlYnNzLVxcdTAwM2VmaWJfbG9va3VwX3JldCwgdGVzdHNbaV0uZXhwZWN0ZWRfcmV0LFxcbiBcXHRcXHRcXHQgIFxcXCJmaWJfbG9va3VwX3JldFxcXCIpO1xcbiBcXG5AQCAtMzUyLDYgKzc0OCwyMSBAQCB2b2lkIHRlc3RfZmliX2xvb2t1cCh2b2lkKVxcbiBcXHRcXHRpZiAodGVzdHNbaV0uZXhwZWN0ZWRfZHN0KVxcbiBcXHRcXHRcXHRhc3NlcnRfZHN0X2lwKGZpYl9wYXJhbXMsIHRlc3RzW2ldLmV4cGVjdGVkX2RzdCk7XFxuIFxcbitcXHRcXHRpZiAodGVzdHNbaV0uZXhwZWN0ZWRfZGV2KVxcbitcXHRcXHRcXHRBU1NFUlRfRVEoZmliX3BhcmFtcy1cXHUwMDNlaWZpbmRleCxcXG4rXFx0XFx0XFx0XFx0ICBpZl9uYW1ldG9pbmRleCh0ZXN0c1tpXS5leHBlY3RlZF9kZXYpLCBcXFwiaWZpbmRleFxcXCIpO1xcbitcXG4rXFx0XFx0aWYgKHRlc3RzW2ldLmV4cGVjdGVkX210dSlcXG4rXFx0XFx0XFx0QVNTRVJUX0VRKGZpYl9wYXJhbXMtXFx1MDAzZW10dV9yZXN1bHQsIHRlc3RzW2ldLmV4cGVjdGVkX210dSxcXG4rXFx0XFx0XFx0XFx0ICBcXFwibXR1X3Jlc3VsdFxcXCIpO1xcbitcXG4rXFx0XFx0aWYgKHRlc3RzW2ldLmNoZWNrX3ZsYW4pIHtcXG4rXFx0XFx0XFx0QVNTRVJUX0VRKGZpYl9wYXJhbXMtXFx1MDAzZWhfdmxhbl9wcm90byxcXG4rXFx0XFx0XFx0XFx0ICBodG9ucyh0ZXN0c1tpXS52bGFuX3Byb3RvKSwgXFxcImhfdmxhbl9wcm90b1xcXCIpO1xcbitcXHRcXHRcXHRBU1NFUlRfRVEoZmliX3BhcmFtcy1cXHUwMDNlaF92bGFuX1RDSSxcXG4rXFx0XFx0XFx0XFx0ICBodG9ucyh0ZXN0c1tpXS52bGFuX2lkKSwgXFxcImhfdmxhbl9UQ0lcXFwiKTtcXG4rXFx0XFx0fVxcbitcXG4gXFx0XFx0cmV0ID0gbWVtY21wKHRlc3RzW2ldLmRtYWMsIGZpYl9wYXJhbXMtXFx1MDAzZWRtYWMsIHNpemVvZih0ZXN0c1tpXS5kbWFjKSk7XFxuIFxcdFxcdGlmICghQVNTRVJUX0VRKHJldCwgMCwgXFxcImRtYWMgbm90IG1hdGNoXFxcIikpIHtcXG4gXFx0XFx0XFx0Y2hhciBleHBlY3RlZFsxOF0sIGFjdHVhbFsxOF07XFxuQEAgLTM2MSwxNSArNzcyLDMxMyBAQCB2b2lkIHRlc3RfZmliX2xvb2t1cCh2b2lkKVxcbiBcXHRcXHRcXHRwcmludGYoXFxcImRtYWMgZXhwZWN0ZWQgJXMgYWN0dWFsICVzIFxcXCIsIGV4cGVjdGVkLCBhY3R1YWwpO1xcbiBcXHRcXHR9XFxuIFxcbi1cXHRcXHQvLyBlbnN1cmUgdGJpZCBpcyB6ZXJvJ2Qgb3V0IGFmdGVyIGZpYiBsb29rdXAuXFxuLVxcdFxcdGlmICh0ZXN0c1tpXS5sb29rdXBfZmxhZ3MgXFx1MDAyNiBCUEZfRklCX0xPT0tVUF9ESVJFQ1QpIHtcXG4rXFx0XFx0LypcXG4rXFx0XFx0ICogZW5zdXJlIHRiaWQgaXMgemVybydkIG91dCBhZnRlciBmaWIgbG9va3VwLiBXaXRoXFxuK1xcdFxcdCAqIEJQRl9GSUJfTE9PS1VQX1ZMQU4gdGhlIHVuaW9uIGhvbGRzIHRoZSBwYWNrZWQgdmxhblxcbitcXHRcXHQgKiBmaWVsZHMgaW5zdGVhZCwgc28gc2tpcCB0aGUgY2hlY2sgZm9yIHRob3NlLlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0aWYgKCh0ZXN0c1tpXS5sb29rdXBfZmxhZ3MgXFx1MDAyNiBCUEZfRklCX0xPT0tVUF9ESVJFQ1QpIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdCAgICAhKHRlc3RzW2ldLmxvb2t1cF9mbGFncyBcXHUwMDI2IEJQRl9GSUJfTE9PS1VQX1ZMQU4pKSB7XFxuIFxcdFxcdFxcdGlmICghQVNTRVJUX0VRKHNrZWwtXFx1MDAzZWJzcy1cXHUwMDNlZmliX3BhcmFtcy50YmlkLCAwLFxcbiBcXHRcXHRcXHRcXHRcXHRcXFwiZXhwZWN0ZWQgZmliX3BhcmFtcy50YmlkIHRvIGJlIHplcm9cXFwiKSlcXG4gXFx0XFx0XFx0XFx0Z290byBmYWlsO1xcbiBcXHRcXHR9XFxuIFxcdH1cXG4gXFxuK1xcdC8qXFxuK1xcdCAqIFJlLXJ1biB0aGUgY2FzZXMgdGhyb3VnaCBicGZfeGRwX2ZpYl9sb29rdXAoKS4gdGVzdF9ydW4gdXNlcyB0aGVcXG4rXFx0ICogY3VycmVudCBuZXRucycgbG9vcGJhY2sgZm9yIGN0eC1cXHUwMDNlcnhxLVxcdTAwM2VkZXYsIHNvIGRldl9uZXQoKSBpcyBOU19URVNUXFxuK1xcdCAqIGFuZCB0aGUgbG9va3VwIHJ1bnMgYWdhaW5zdCBpdHMgRklCLiBUaGUgcGF0aC1pbmRlcGVuZGVudCByZXN1bHRzXFxuK1xcdCAqIChyZXR1cm4gY29kZSwgc3dhcHBlZCBpZmluZGV4LCB2bGFuIHRhZywgZ2F0ZXdheSkgbXVzdCBtYXRjaCB0aGUgc2tiXFxuK1xcdCAqIHBhdGg7IHRoZSBuby10b3RfbGVuIG10dV9yZXN1bHQgaXMgc2tiLXNwZWNpZmljIGFuZCBub3QgcmVjaGVja2VkLlxcbitcXHQgKi9cXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIEFSUkFZX1NJWkUodGVzdHMpOyBpKyspIHtcXG4rXFx0XFx0aWYgKHNldF9sb29rdXBfcGFyYW1zKGZpYl9wYXJhbXMsIFxcdTAwMjZ0ZXN0c1tpXSwgc2tiLmlmaW5kZXgpKVxcbitcXHRcXHRcXHRjb250aW51ZTtcXG4rXFxuK1xcdFxcdHNrZWwtXFx1MDAzZWJzcy1cXHUwMDNlZmliX2xvb2t1cF9yZXQgPSAtMTtcXG4rXFx0XFx0c2tlbC1cXHUwMDNlYnNzLVxcdTAwM2Vsb29rdXBfZmxhZ3MgPSB0ZXN0c1tpXS5sb29rdXBfZmxhZ3M7XFxuK1xcbitcXHRcXHRlcnIgPSBicGZfcHJvZ190ZXN0X3J1bl9vcHRzKHhkcF9mZCwgXFx1MDAyNnhkcF9vcHRzKTtcXG4rXFx0XFx0aWYgKCFBU1NFUlRfT0soZXJyLCBcXFwieGRwIHRlc3RfcnVuXFxcIikpXFxuK1xcdFxcdFxcdGNvbnRpbnVlO1xcbitcXG4rXFx0XFx0aWYgKCFBU1NFUlRfRVEoc2tlbC1cXHUwMDNlYnNzLVxcdTAwM2VmaWJfbG9va3VwX3JldCwgdGVzdHNbaV0uZXhwZWN0ZWRfcmV0LFxcbitcXHRcXHRcXHQgICAgICAgXFxcInhkcCBmaWJfbG9va3VwX3JldFxcXCIpKVxcbitcXHRcXHRcXHRwcmludGYoXFxcIih4ZHApICVzXFxcXG5cXFwiLCB0ZXN0c1tpXS5kZXNjKTtcXG4rXFxuK1xcdFxcdGlmICh0ZXN0c1tpXS5leHBlY3RlZF9kZXYpXFxuK1xcdFxcdFxcdEFTU0VSVF9FUShmaWJfcGFyYW1zLVxcdTAwM2VpZmluZGV4LFxcbitcXHRcXHRcXHRcXHQgIGlmX25hbWV0b2luZGV4KHRlc3RzW2ldLmV4cGVjdGVkX2RldiksXFxuK1xcdFxcdFxcdFxcdCAgXFxcInhkcCBpZmluZGV4XFxcIik7XFxuK1xcbitcXHRcXHRpZiAodGVzdHNbaV0uZXhwZWN0ZWRfZHN0KVxcbitcXHRcXHRcXHRhc3NlcnRfZHN0X2lwKGZpYl9wYXJhbXMsIHRlc3RzW2ldLmV4cGVjdGVkX2RzdCk7XFxuK1xcbitcXHRcXHRpZiAodGVzdHNbaV0uY2hlY2tfdmxhbikge1xcbitcXHRcXHRcXHRBU1NFUlRfRVEoZmliX3BhcmFtcy1cXHUwMDNlaF92bGFuX3Byb3RvLFxcbitcXHRcXHRcXHRcXHQgIGh0b25zKHRlc3RzW2ldLnZsYW5fcHJvdG8pLCBcXFwieGRwIGhfdmxhbl9wcm90b1xcXCIpO1xcbitcXHRcXHRcXHRBU1NFUlRfRVEoZmliX3BhcmFtcy1cXHUwMDNlaF92bGFuX1RDSSxcXG4rXFx0XFx0XFx0XFx0ICBodG9ucyh0ZXN0c1tpXS52bGFuX2lkKSwgXFxcInhkcCBoX3ZsYW5fVENJXFxcIik7XFxuK1xcdFxcdH1cXG4rXFxuK1xcdFxcdHJldCA9IG1lbWNtcCh0ZXN0c1tpXS5kbWFjLCBmaWJfcGFyYW1zLVxcdTAwM2VkbWFjLCBzaXplb2YodGVzdHNbaV0uZG1hYykpO1xcbitcXHRcXHRBU1NFUlRfRVEocmV0LCAwLCBcXFwieGRwIGRtYWNcXFwiKTtcXG4rXFxuK1xcdFxcdC8qXFxuK1xcdFxcdCAqIG10dV9yZXN1bHQgZnJvbSBhIHRvdF9sZW4gbG9va3VwIGlzIHRoZSByb3V0ZSBtdHUgYW5kIGlzXFxuK1xcdFxcdCAqIHBhdGgtaW5kZXBlbmRlbnQ7IHRoZSBuby10b3RfbGVuIGFybSByZWFkcyBkZXYtXFx1MDAzZW10dSBhbmQgaXNcXG4rXFx0XFx0ICogc2tiLW9ubHksIHNvIGdhdGUgb24gdG90X2xlblxcbitcXHRcXHQgKi9cXG4rXFx0XFx0aWYgKHRlc3RzW2ldLmV4cGVjdGVkX210dSBcXHUwMDI2XFx1MDAyNiB0ZXN0c1tpXS50b3RfbGVuKVxcbitcXHRcXHRcXHRBU1NFUlRfRVEoZmliX3BhcmFtcy1cXHUwMDNlbXR1X3Jlc3VsdCwgdGVzdHNbaV0uZXhwZWN0ZWRfbXR1LFxcbitcXHRcXHRcXHRcXHQgIFxcXCJ4ZHAgbXR1X3Jlc3VsdFxcXCIpO1xcbitcXHR9XFxuK1xcbitmYWlsOlxcbitcXHRpZiAobnN0b2tlbilcXG4rXFx0XFx0Y2xvc2VfbmV0bnMobnN0b2tlbik7XFxuK1xcdFNZU19OT0ZBSUwoXFxcImlwIG5ldG5zIGRlbCBcXFwiIE5TX1RFU1QpO1xcbitcXHRmaWJfbG9va3VwX19kZXN0cm95KHNrZWwpO1xcbit9XFxuK1xcbisjZGVmaW5lIE5TX1ZMQU5fQVxcdFxcXCJmaWJfbG9va3VwX3ZsYW5fbnNfYVxcXCJcXG4rI2RlZmluZSBOU19WTEFOX0JcXHRcXFwiZmliX2xvb2t1cF92bGFuX25zX2JcXFwiXFxuK1xcbisvKlxcbisgKiBBIFZMQU4gZGV2aWNlIGNhbiBiZSBtb3ZlZCB0byBhbm90aGVyIG5ldG5zIHdoaWxlIHN0YXlpbmcgcmVnaXN0ZXJlZFxcbisgKiBvbiBpdHMgcGFyZW50LiBOZWl0aGVyIGRpcmVjdGlvbiBtYXkgdGhlbiBjcm9zcyB0aGUgYm91bmRhcnk6IHRoZVxcbisgKiBlZ3Jlc3MgZmxhZyBtdXN0IG5vdCBwdWJsaXNoIHRoZSBmb3JlaWduIHBhcmVudCdzIGlmaW5kZXgsIGFuZCB0aGVcXG4rICogaW5wdXQgZmxhZyBtdXN0IGZhaWwgY2xvc2VkIHJhdGhlciB0aGFuIHVzZSBhIGZvcmVpZ24gaW5ncmVzcy5cXG4rICovXFxuK3ZvaWQgdGVzdF9maWJfbG9va3VwX3ZsYW5fbmV0bnModm9pZClcXG4re1xcbitcXHRzdHJ1Y3QgYnBmX2ZpYl9sb29rdXAgKmZpYl9wYXJhbXM7XFxuK1xcdHN0cnVjdCBuc3Rva2VuICpuc3Rva2VuID0gTlVMTDtcXG4rXFx0c3RydWN0IF9fc2tfYnVmZiBza2IgPSB7IH07XFxuK1xcdHN0cnVjdCBmaWJfbG9va3VwICpza2VsID0gTlVMTDtcXG4rXFx0aW50IHByb2dfZmQsIHhkcF9mZCwgZXJyLCBwYXJlbnRfaWR4LCB2bGFuX2lkeDtcXG4rXFxuK1xcdExJQkJQRl9PUFRTKGJwZl90ZXN0X3J1bl9vcHRzLCBydW5fb3B0cyxcXG4rXFx0XFx0ICAgIC5kYXRhX2luID0gXFx1MDAyNnBrdF92NixcXG4rXFx0XFx0ICAgIC5kYXRhX3NpemVfaW4gPSBzaXplb2YocGt0X3Y2KSxcXG4rXFx0XFx0ICAgIC5jdHhfaW4gPSBcXHUwMDI2c2tiLFxcbitcXHRcXHQgICAgLmN0eF9zaXplX2luID0gc2l6ZW9mKHNrYiksXFxuK1xcdCk7XFxuK1xcdExJQkJQRl9PUFRTKGJwZl90ZXN0X3J1bl9vcHRzLCB4ZHBfb3B0cyxcXG4rXFx0XFx0ICAgIC5kYXRhX2luID0gXFx1MDAyNnBrdF92NixcXG4rXFx0XFx0ICAgIC5kYXRhX3NpemVfaW4gPSBzaXplb2YocGt0X3Y2KSxcXG4rXFx0KTtcXG4rXFxuK1xcdHNrZWwgPSBmaWJfbG9va3VwX19vcGVuX2FuZF9sb2FkKCk7XFxuK1xcdGlmICghQVNTRVJUX09LX1BUUihza2VsLCBcXFwic2tlbCBvcGVuX2FuZF9sb2FkXFxcIikpXFxuK1xcdFxcdHJldHVybjtcXG4rXFx0cHJvZ19mZCA9IGJwZl9wcm9ncmFtX19mZChza2VsLVxcdTAwM2Vwcm9ncy5maWJfbG9va3VwKTtcXG4rXFx0eGRwX2ZkID0gYnBmX3Byb2dyYW1fX2ZkKHNrZWwtXFx1MDAzZXByb2dzLmZpYl9sb29rdXBfeGRwKTtcXG4rXFx0ZmliX3BhcmFtcyA9IFxcdTAwMjZza2VsLVxcdTAwM2Vic3MtXFx1MDAzZWZpYl9wYXJhbXM7XFxuK1xcbitcXHRTWVMoZmFpbCwgXFxcImlwIG5ldG5zIGFkZCAlc1xcXCIsIE5TX1ZMQU5fQSk7XFxuK1xcdFNZUyhmYWlsLCBcXFwiaXAgbmV0bnMgYWRkICVzXFxcIiwgTlNfVkxBTl9CKTtcXG4rXFxuK1xcdG5zdG9rZW4gPSBvcGVuX25ldG5zKE5TX1ZMQU5fQSk7XFxuK1xcdGlmICghQVNTRVJUX09LX1BUUihuc3Rva2VuLCBcXFwib3Blbl9uZXRucyhhKVxcXCIpKVxcbitcXHRcXHRnb3RvIGZhaWw7XFxuK1xcbitcXHRTWVMoZmFpbCwgXFxcImlwIGxpbmsgYWRkIHZldGg3IHR5cGUgdmV0aCBwZWVyIG5hbWUgdmV0aDhcXFwiKTtcXG4rXFx0U1lTKGZhaWwsIFxcXCJpcCBsaW5rIHNldCBkZXYgdmV0aDcgdXBcXFwiKTtcXG4rXFx0U1lTKGZhaWwsIFxcXCJpcCBsaW5rIGFkZCBsaW5rIHZldGg3IG5hbWUgdmV0aDcuNjYgdHlwZSB2bGFuIGlkIDY2XFxcIik7XFxuK1xcdFNZUyhmYWlsLCBcXFwiaXAgbGluayBzZXQgdmV0aDcuNjYgbmV0bnMgJXNcXFwiLCBOU19WTEFOX0IpO1xcbitcXG4rXFx0cGFyZW50X2lkeCA9IGlmX25hbWV0b2luZGV4KFxcXCJ2ZXRoN1xcXCIpO1xcbitcXHRpZiAoIUFTU0VSVF9ORVEocGFyZW50X2lkeCwgMCwgXFxcImlmX25hbWV0b2luZGV4KHZldGg3KVxcXCIpKVxcbitcXHRcXHRnb3RvIGZhaWw7XFxuK1xcbitcXHQvKlxcbitcXHQgKiBpbnB1dDogdGhlIG1vdmVkIGRldmljZSBpcyBzdGlsbCBpbiB2ZXRoNydzIFZMQU4gZ3JvdXAsIGJ1dCBpdFxcbitcXHQgKiBsaXZlcyBpbiBhbm90aGVyIG5ldG5zLCBzbyB0aGUgbG9va3VwIG11c3QgZmFpbCBjbG9zZWRcXG4rXFx0ICovXFxuK1xcdHNrYi5pZmluZGV4ID0gcGFyZW50X2lkeDtcXG4rXFx0bWVtc2V0KGZpYl9wYXJhbXMsIDAsIHNpemVvZigqZmliX3BhcmFtcykpO1xcbitcXHRmaWJfcGFyYW1zLVxcdTAwM2VmYW1pbHkgPSBBRl9JTkVUO1xcbitcXHRmaWJfcGFyYW1zLVxcdTAwM2VsNF9wcm90b2NvbCA9IElQUFJPVE9fVENQO1xcbitcXHRmaWJfcGFyYW1zLVxcdTAwM2VpZmluZGV4ID0gcGFyZW50X2lkeDtcXG4rXFx0ZmliX3BhcmFtcy1cXHUwMDNlaF92bGFuX3Byb3RvID0gaHRvbnMoRVRIX1BfODAyMVEpO1xcbitcXHRmaWJfcGFyYW1zLVxcdTAwM2VoX3ZsYW5fVENJID0gaHRvbnMoNjYpO1xcbitcXHRpZiAoIUFTU0VSVF9FUShpbmV0X3B0b24oQUZfSU5FVCwgXFxcIjEwLjY2LjAuMlxcXCIsIFxcdTAwMjZmaWJfcGFyYW1zLVxcdTAwM2VpcHY0X2RzdCksXFxuK1xcdFxcdCAgICAgICAxLCBcXFwiaW5ldF9wdG9uKGRzdClcXFwiKSlcXG4rXFx0XFx0Z290byBmYWlsO1xcbitcXG4rXFx0c2tlbC1cXHUwMDNlYnNzLVxcdTAwM2VmaWJfbG9va3VwX3JldCA9IC0xO1xcbitcXHRza2VsLVxcdTAwM2Vic3MtXFx1MDAzZWxvb2t1cF9mbGFncyA9IEJQRl9GSUJfTE9PS1VQX1ZMQU5fSU5QVVQgfFxcbitcXHRcXHRcXHRcXHQgIEJQRl9GSUJfTE9PS1VQX1NLSVBfTkVJR0g7XFxuK1xcdGVyciA9IGJwZl9wcm9nX3Rlc3RfcnVuX29wdHMocHJvZ19mZCwgXFx1MDAyNnJ1bl9vcHRzKTtcXG4rXFx0aWYgKCFBU1NFUlRfT0soZXJyLCBcXFwidGVzdF9ydW4oaW5wdXQpXFxcIikpXFxuK1xcdFxcdGdvdG8gZmFpbDtcXG4rXFx0QVNTRVJUX0VRKHNrZWwtXFx1MDAzZWJzcy1cXHUwMDNlZmliX2xvb2t1cF9yZXQsIEJQRl9GSUJfTEtVUF9SRVRfTk9UX0ZXREVELFxcbitcXHRcXHQgIFxcXCJpbnB1dCBhY3Jvc3MgbmV0bnMgZmFpbHMgY2xvc2VkXFxcIik7XFxuK1xcdEFTU0VSVF9FUShmaWJfcGFyYW1zLVxcdTAwM2VpZmluZGV4LCBwYXJlbnRfaWR4LCBcXFwiaWZpbmRleCB1bnRvdWNoZWRcXFwiKTtcXG4rXFx0QVNTRVJUX0VRKGZpYl9wYXJhbXMtXFx1MDAzZWhfdmxhbl9UQ0ksIGh0b25zKDY2KSwgXFxcInRhZyB1bnRvdWNoZWRcXFwiKTtcXG4rXFxuK1xcdGNsb3NlX25ldG5zKG5zdG9rZW4pO1xcbitcXHRuc3Rva2VuID0gb3Blbl9uZXRucyhOU19WTEFOX0IpO1xcbitcXHRpZiAoIUFTU0VSVF9PS19QVFIobnN0b2tlbiwgXFxcIm9wZW5fbmV0bnMoYilcXFwiKSlcXG4rXFx0XFx0Z290byBmYWlsO1xcbitcXG4rXFx0LypcXG4rXFx0ICogZWdyZXNzOiB0aGUgZmliIHJlc3VsdCBpcyB0aGUgVkxBTiBkZXZpY2UgaGVyZSwgYnV0IGl0cyBwYXJlbnRcXG4rXFx0ICogaXMgaW4gdGhlIG90aGVyIG5ldG5zLCBzbyB0aGUgc3dhcCBtdXN0IG5vdCBoYXBwZW5cXG4rXFx0ICovXFxuK1xcdFNZUyhmYWlsLCBcXFwiaXAgbGluayBzZXQgZGV2IHZldGg3LjY2IHVwXFxcIik7XFxuK1xcdFNZUyhmYWlsLCBcXFwiaXAgYWRkciBhZGQgMTAuNjYuMC4xLzI0IGRldiB2ZXRoNy42NlxcXCIpO1xcbitcXHRlcnIgPSB3cml0ZV9zeXNjdGwoXFxcIi9wcm9jL3N5cy9uZXQvaXB2NC9jb25mL3ZldGg3LjY2L2ZvcndhcmRpbmdcXFwiLCBcXFwiMVxcXCIpO1xcbitcXHRpZiAoIUFTU0VSVF9PSyhlcnIsIFxcXCJ3cml0ZV9zeXNjdGwoZm9yd2FyZGluZylcXFwiKSlcXG4rXFx0XFx0Z290byBmYWlsO1xcbitcXG4rXFx0dmxhbl9pZHggPSBpZl9uYW1ldG9pbmRleChcXFwidmV0aDcuNjZcXFwiKTtcXG4rXFx0aWYgKCFBU1NFUlRfTkVRKHZsYW5faWR4LCAwLCBcXFwiaWZfbmFtZXRvaW5kZXgodmV0aDcuNjYpXFxcIikpXFxuK1xcdFxcdGdvdG8gZmFpbDtcXG4rXFxuK1xcdHNrYi5pZmluZGV4ID0gdmxhbl9pZHg7XFxuK1xcdG1lbXNldChmaWJfcGFyYW1zLCAwLCBzaXplb2YoKmZpYl9wYXJhbXMpKTtcXG4rXFx0ZmliX3BhcmFtcy1cXHUwMDNlZmFtaWx5ID0gQUZfSU5FVDtcXG4rXFx0ZmliX3BhcmFtcy1cXHUwMDNlbDRfcHJvdG9jb2wgPSBJUFBST1RPX1RDUDtcXG4rXFx0ZmliX3BhcmFtcy1cXHUwMDNlaWZpbmRleCA9IHZsYW5faWR4O1xcbitcXHRpZiAoIUFTU0VSVF9FUShpbmV0X3B0b24oQUZfSU5FVCwgXFxcIjEwLjY2LjAuMlxcXCIsIFxcdTAwMjZmaWJfcGFyYW1zLVxcdTAwM2VpcHY0X2RzdCksXFxuK1xcdFxcdCAgICAgICAxLCBcXFwiaW5ldF9wdG9uKGRzdClcXFwiKSB8fFxcbitcXHQgICAgIUFTU0VSVF9FUShpbmV0X3B0b24oQUZfSU5FVCwgXFxcIjEwLjY2LjAuMVxcXCIsIFxcdTAwMjZmaWJfcGFyYW1zLVxcdTAwM2VpcHY0X3NyYyksXFxuK1xcdFxcdCAgICAgICAxLCBcXFwiaW5ldF9wdG9uKHNyYylcXFwiKSlcXG4rXFx0XFx0Z290byBmYWlsO1xcbitcXG4rXFx0c2tlbC1cXHUwMDNlYnNzLVxcdTAwM2VmaWJfbG9va3VwX3JldCA9IC0xO1xcbitcXHRza2VsLVxcdTAwM2Vic3MtXFx1MDAzZWxvb2t1cF9mbGFncyA9IEJQRl9GSUJfTE9PS1VQX1ZMQU4gfFxcbitcXHRcXHRcXHRcXHQgIEJQRl9GSUJfTE9PS1VQX1NLSVBfTkVJR0g7XFxuK1xcdGVyciA9IGJwZl9wcm9nX3Rlc3RfcnVuX29wdHMoeGRwX2ZkLCBcXHUwMDI2eGRwX29wdHMpO1xcbitcXHRpZiAoIUFTU0VSVF9PSyhlcnIsIFxcXCJ0ZXN0X3J1bihlZ3Jlc3MpXFxcIikpXFxuK1xcdFxcdGdvdG8gZmFpbDtcXG4rXFx0QVNTRVJUX0VRKHNrZWwtXFx1MDAzZWJzcy1cXHUwMDNlZmliX2xvb2t1cF9yZXQsIEJQRl9GSUJfTEtVUF9SRVRfVkxBTl9GQUlMVVJFLFxcbitcXHRcXHQgIFxcXCJlZ3Jlc3MgcmV0dXJucyBWTEFOX0ZBSUxVUkVcXFwiKTtcXG4rXFx0QVNTRVJUX0VRKGZpYl9wYXJhbXMtXFx1MDAzZWlmaW5kZXgsIHZsYW5faWR4LFxcbitcXHRcXHQgIFxcXCJmb3JlaWduIHBhcmVudCBub3QgcHVibGlzaGVkXFxcIik7XFxuK1xcdEFTU0VSVF9FUShmaWJfcGFyYW1zLVxcdTAwM2VoX3ZsYW5fVENJLCAwLCBcXFwidmxhbiBmaWVsZHMgemVyb1xcXCIpO1xcbitcXG4rZmFpbDpcXG4rXFx0aWYgKG5zdG9rZW4pXFxuK1xcdFxcdGNsb3NlX25ldG5zKG5zdG9rZW4pO1xcbitcXHRTWVNfTk9GQUlMKFxcXCJpcCBuZXRucyBkZWwgXFxcIiBOU19WTEFOX0EpO1xcbitcXHRTWVNfTk9GQUlMKFxcXCJpcCBuZXRucyBkZWwgXFxcIiBOU19WTEFOX0IpO1xcbitcXHRmaWJfbG9va3VwX19kZXN0cm95KHNrZWwpO1xcbit9XFxuK1xcbisjZGVmaW5lIFJFRElSRUNUX05QS1RTIDEwMDBcXG4rXFxuKy8qXFxuKyAqIFRoZSBlZ3Jlc3MgZmxhZyBleGlzdHMgc28gYW4gWERQIHByb2dyYW0gY2FuIHJlZGlyZWN0IHRvIHRoZSBwaHlzaWNhbFxcbisgKiBwYXJlbnQuIEEgcmVkaXJlY3QgdGhhdCBsYW5kcyBvbiBhIFZMQU4gZGV2aWNlIGlzIGRyb3BwZWQgYXRcXG4rICogeGRwX2RvX2ZsdXNoKCksIGJlY2F1c2UgYSBWTEFOIGRldmljZSBoYXMgbm8gbmRvX3hkcF94bWl0LiBEcml2ZSByZWFsXFxuKyAqIGZyYW1lcyB3aXRoIEJQRl9GX1RFU1RfWERQX0xJVkVfRlJBTUVTLCB3aGljaCBydW5zIHRoZSBuYXRpdmVcXG4rICogeGRwX2RvX3JlZGlyZWN0KCkgKyB4ZHBfZG9fZmx1c2goKSBwYXRoOiBhIHJlZHVjaWJsZSBWTEFOIGVncmVzc1xcbisgKiByZXNvbHZlcyB0byB2ZXRoMSBhbmQgaXMgZGVsaXZlcmVkIHRvIGl0cyBwZWVyIHZldGgyLCB3aGlsZSBhIFFpblFcXG4rICogZWdyZXNzIHJldHVybnMgVkxBTl9GQUlMVVJFIGFuZCBpcyBwYXNzZWQgdG8gdGhlIHN0YWNrIGluc3RlYWQgb2ZcXG4rICogcmVkaXJlY3RlZCB0byBhIGRldmljZSB0aGF0IHdvdWxkIHNpbGVudGx5IGRyb3AgaXQuXFxuKyAqL1xcbit2b2lkIHRlc3RfZmliX2xvb2t1cF92bGFuX3JlZGlyZWN0KHZvaWQpXFxuK3tcXG4rXFx0aW50IHJlZGlyZWN0X2ZkLCBlcnIsIHZldGgxX2lkeCwgdmV0aDJfaWR4ID0gLTE7XFxuK1xcdHN0cnVjdCBicGZfZmliX2xvb2t1cCAqZmliX3BhcmFtcztcXG4rXFx0c3RydWN0IG5zdG9rZW4gKm5zdG9rZW4gPSBOVUxMO1xcbitcXHRzdHJ1Y3QgZmliX2xvb2t1cCAqc2tlbCA9IE5VTEw7XFxuK1xcdGJvb2wgeGRwX2F0dGFjaGVkID0gZmFsc2U7XFxuK1xcbitcXHRMSUJCUEZfT1BUUyhicGZfdGVzdF9ydW5fb3B0cywgbGZfb3B0cyxcXG4rXFx0XFx0ICAgIC5kYXRhX2luID0gXFx1MDAyNnBrdF92NCxcXG4rXFx0XFx0ICAgIC5kYXRhX3NpemVfaW4gPSBzaXplb2YocGt0X3Y0KSxcXG4rXFx0XFx0ICAgIC5mbGFncyA9IEJQRl9GX1RFU1RfWERQX0xJVkVfRlJBTUVTLFxcbitcXHRcXHQgICAgLnJlcGVhdCA9IFJFRElSRUNUX05QS1RTLFxcbitcXHQpO1xcbitcXG4rXFx0c2tlbCA9IGZpYl9sb29rdXBfX29wZW5fYW5kX2xvYWQoKTtcXG4rXFx0aWYgKCFBU1NFUlRfT0tfUFRSKHNrZWwsIFxcXCJza2VsIG9wZW5fYW5kX2xvYWRcXFwiKSlcXG4rXFx0XFx0cmV0dXJuO1xcbitcXHRyZWRpcmVjdF9mZCA9IGJwZl9wcm9ncmFtX19mZChza2VsLVxcdTAwM2Vwcm9ncy5maWJfbG9va3VwX3JlZGlyZWN0KTtcXG4rXFx0ZmliX3BhcmFtcyA9IFxcdTAwMjZza2VsLVxcdTAwM2Vic3MtXFx1MDAzZWZpYl9wYXJhbXM7XFxuK1xcbitcXHRTWVMoZmFpbCwgXFxcImlwIG5ldG5zIGFkZCAlc1xcXCIsIE5TX1RFU1QpO1xcbitcXHRuc3Rva2VuID0gb3Blbl9uZXRucyhOU19URVNUKTtcXG4rXFx0aWYgKCFBU1NFUlRfT0tfUFRSKG5zdG9rZW4sIFxcXCJvcGVuX25ldG5zXFxcIikpXFxuK1xcdFxcdGdvdG8gZmFpbDtcXG4rXFx0aWYgKHNldHVwX25ldG5zKCkpXFxuK1xcdFxcdGdvdG8gZmFpbDtcXG4rXFxuK1xcdHZldGgxX2lkeCA9IGlmX25hbWV0b2luZGV4KFxcXCJ2ZXRoMVxcXCIpO1xcbitcXHR2ZXRoMl9pZHggPSBpZl9uYW1ldG9pbmRleChcXFwidmV0aDJcXFwiKTtcXG4rXFx0aWYgKCFBU1NFUlRfTkVRKHZldGgxX2lkeCwgMCwgXFxcImlmX25hbWV0b2luZGV4KHZldGgxKVxcXCIpIHx8XFxuK1xcdCAgICAhQVNTRVJUX05FUSh2ZXRoMl9pZHgsIDAsIFxcXCJpZl9uYW1ldG9pbmRleCh2ZXRoMilcXFwiKSlcXG4rXFx0XFx0Z290byBmYWlsO1xcbitcXG4rXFx0LypcXG4rXFx0ICogQSByZWRpcmVjdCB0byB2ZXRoMSBpcyBkZWxpdmVyZWQgdG8gaXRzIHBlZXIgdmV0aDIuIHZldGhfeGRwX3htaXQoKVxcbitcXHQgKiBvbmx5IGFjY2VwdHMgdGhlIGZyYW1lIGlmIHZldGgyJ3MgTkFQSSBpcyB1cCwgd2hpY2ggb24gdmV0aCBtZWFuc1xcbitcXHQgKiB2ZXRoMiBjYXJyaWVzIGFuIFhEUCBwcm9ncmFtOyB4ZHBfY291bnQgdGFsbGllcyB3aGF0IGFycml2ZXMuXFxuK1xcdCAqL1xcbitcXHRlcnIgPSBicGZfeGRwX2F0dGFjaCh2ZXRoMl9pZHgsIGJwZl9wcm9ncmFtX19mZChza2VsLVxcdTAwM2Vwcm9ncy54ZHBfY291bnQpLFxcbitcXHRcXHRcXHQgICAgIFhEUF9GTEFHU19EUlZfTU9ERSwgTlVMTCk7XFxuK1xcdGlmICghQVNTRVJUX09LKGVyciwgXFxcImF0dGFjaCB4ZHBfY291bnQgb24gdmV0aDJcXFwiKSlcXG4rXFx0XFx0Z290byBmYWlsO1xcbitcXHR4ZHBfYXR0YWNoZWQgPSB0cnVlO1xcbitcXG4rXFx0LyogcmVkdWNpYmxlIFZMQU4gZWdyZXNzOiByZXNvbHZlcyB0byB0aGUgcGh5c2ljYWwgcGFyZW50IHZldGgxICovXFxuK1xcdG1lbXNldChmaWJfcGFyYW1zLCAwLCBzaXplb2YoKmZpYl9wYXJhbXMpKTtcXG4rXFx0ZmliX3BhcmFtcy1cXHUwMDNlZmFtaWx5ID0gQUZfSU5FVDtcXG4rXFx0ZmliX3BhcmFtcy1cXHUwMDNlbDRfcHJvdG9jb2wgPSBJUFBST1RPX1RDUDtcXG4rXFx0ZmliX3BhcmFtcy1cXHUwMDNlaWZpbmRleCA9IHZldGgxX2lkeDtcXG4rXFx0aWYgKCFBU1NFUlRfRVEoaW5ldF9wdG9uKEFGX0lORVQsIElQVjRfSUZBQ0VfQUREUiwgXFx1MDAyNmZpYl9wYXJhbXMtXFx1MDAzZWlwdjRfc3JjKSxcXG4rXFx0XFx0ICAgICAgIDEsIFxcXCJpbmV0X3B0b24oc3JjKVxcXCIpIHx8XFxuK1xcdCAgICAhQVNTRVJUX0VRKGluZXRfcHRvbihBRl9JTkVULCBJUFY0X1ZMQU5fRUdSRVNTX0RTVCwgXFx1MDAyNmZpYl9wYXJhbXMtXFx1MDAzZWlwdjRfZHN0KSxcXG4rXFx0XFx0ICAgICAgIDEsIFxcXCJpbmV0X3B0b24ocmVkdWNpYmxlIGRzdClcXFwiKSlcXG4rXFx0XFx0Z290byBmYWlsO1xcbitcXHRza2VsLVxcdTAwM2Vic3MtXFx1MDAzZWxvb2t1cF9mbGFncyA9IEJQRl9GSUJfTE9PS1VQX1ZMQU4gfCBCUEZfRklCX0xPT0tVUF9TS0lQX05FSUdIO1xcbitcXHRza2VsLVxcdTAwM2Vic3MtXFx1MDAzZXJlZGlyZWN0ZWQgPSAwO1xcbitcXHRza2VsLVxcdTAwM2Vic3MtXFx1MDAzZXBhc3NlZCA9IDA7XFxuK1xcdHNrZWwtXFx1MDAzZWJzcy1cXHUwMDNlZGVsaXZlcmVkID0gMDtcXG4rXFxuK1xcdGVyciA9IGJwZl9wcm9nX3Rlc3RfcnVuX29wdHMocmVkaXJlY3RfZmQsIFxcdTAwMjZsZl9vcHRzKTtcXG4rXFx0aWYgKCFBU1NFUlRfT0soZXJyLCBcXFwidGVzdF9ydW4ocmVkdWNpYmxlIGVncmVzcylcXFwiKSlcXG4rXFx0XFx0Z290byBmYWlsO1xcbitcXHRBU1NFUlRfRVEoc2tlbC1cXHUwMDNlYnNzLVxcdTAwM2VyZWRpcmVjdGVkLCBSRURJUkVDVF9OUEtUUywgXFxcInJlZHVjaWJsZSBlZ3Jlc3MgcmVkaXJlY3RlZFxcXCIpO1xcbitcXHRBU1NFUlRfRVEoc2tlbC1cXHUwMDNlYnNzLVxcdTAwM2VwYXNzZWQsIDAsIFxcXCJyZWR1Y2libGUgZWdyZXNzIG5vdCBwYXNzZWRcXFwiKTtcXG4rXFx0QVNTRVJUX0dUKHNrZWwtXFx1MDAzZWJzcy1cXHUwMDNlZGVsaXZlcmVkLCAwLCBcXFwicmVkdWNpYmxlIGVncmVzcyBkZWxpdmVyZWQgdG8gdmV0aDJcXFwiKTtcXG4rXFxuK1xcdC8qXFxuK1xcdCAqIFFpblEgZWdyZXNzOiBub3QgcmVkdWNpYmxlLCBzbyB0aGUgbG9va3VwIHJldHVybnMgVkxBTl9GQUlMVVJFIGFuZFxcbitcXHQgKiB0aGUgcHJvZ3JhbSBwYXNzZXMgdGhlIGZyYW1lIGluc3RlYWQgb2YgcmVkaXJlY3RpbmcgdG8gdGhlIGlubmVyXFxuK1xcdCAqIFZMQU4gZGV2aWNlLiByZWRpcmVjdGVkID09IDAgaXMgdGhlIGFzc2VydGlvbiB0aGF0IG1hdHRlcnM6IHRoZVxcbitcXHQgKiBwcm9ncmFtIGRpZCBub3QgcmVkaXJlY3QgdG8gYSBkZXZpY2UgdGhhdCB3b3VsZCBkcm9wIHRoZSBmcmFtZSBhdFxcbitcXHQgKiB4ZHBfZG9fZmx1c2goKS4gdmV0aDIncyBkZWxpdmVyZWQgY291bnQgaXMgbm90IGNoZWNrZWQgaGVyZSwgc2luY2VcXG4rXFx0ICogYSBwYXNzZWQgZnJhbWUgY2FuIHN0aWxsIHJlYWNoIHZldGgyIHRocm91Z2ggdGhlIHN0YWNrJ3MgZm9yd2FyZGluZ1xcbitcXHQgKiBwYXRoLCB3aGljaCBpcyB1bnJlbGF0ZWQgdG8gdGhlIHJlZGlyZWN0IHVuZGVyIHRlc3QuXFxuK1xcdCAqL1xcbitcXHRtZW1zZXQoZmliX3BhcmFtcywgMCwgc2l6ZW9mKCpmaWJfcGFyYW1zKSk7XFxuK1xcdGZpYl9wYXJhbXMtXFx1MDAzZWZhbWlseSA9IEFGX0lORVQ7XFxuK1xcdGZpYl9wYXJhbXMtXFx1MDAzZWw0X3Byb3RvY29sID0gSVBQUk9UT19UQ1A7XFxuK1xcdGZpYl9wYXJhbXMtXFx1MDAzZWlmaW5kZXggPSB2ZXRoMV9pZHg7XFxuK1xcdGlmICghQVNTRVJUX0VRKGluZXRfcHRvbihBRl9JTkVULCBJUFY0X0lGQUNFX0FERFIsIFxcdTAwMjZmaWJfcGFyYW1zLVxcdTAwM2VpcHY0X3NyYyksXFxuK1xcdFxcdCAgICAgICAxLCBcXFwiaW5ldF9wdG9uKHNyYylcXFwiKSB8fFxcbitcXHQgICAgIUFTU0VSVF9FUShpbmV0X3B0b24oQUZfSU5FVCwgSVBWNF9RSU5RX0RTVCwgXFx1MDAyNmZpYl9wYXJhbXMtXFx1MDAzZWlwdjRfZHN0KSxcXG4rXFx0XFx0ICAgICAgIDEsIFxcXCJpbmV0X3B0b24ocWlucSBkc3QpXFxcIikpXFxuK1xcdFxcdGdvdG8gZmFpbDtcXG4rXFx0c2tlbC1cXHUwMDNlYnNzLVxcdTAwM2Vsb29rdXBfZmxhZ3MgPSBCUEZfRklCX0xPT0tVUF9WTEFOIHwgQlBGX0ZJQl9MT09LVVBfU0tJUF9ORUlHSDtcXG4rXFx0c2tlbC1cXHUwMDNlYnNzLVxcdTAwM2VyZWRpcmVjdGVkID0gMDtcXG4rXFx0c2tlbC1cXHUwMDNlYnNzLVxcdTAwM2VwYXNzZWQgPSAwO1xcbitcXG4rXFx0ZXJyID0gYnBmX3Byb2dfdGVzdF9ydW5fb3B0cyhyZWRpcmVjdF9mZCwgXFx1MDAyNmxmX29wdHMpO1xcbitcXHRpZiAoIUFTU0VSVF9PSyhlcnIsIFxcXCJ0ZXN0X3J1bihxaW5xIGVncmVzcylcXFwiKSlcXG4rXFx0XFx0Z290byBmYWlsO1xcbitcXHRBU1NFUlRfRVEoc2tlbC1cXHUwMDNlYnNzLVxcdTAwM2VwYXNzZWQsIFJFRElSRUNUX05QS1RTLCBcXFwicWlucSBlZ3Jlc3MgcGFzc2VkXFxcIik7XFxuK1xcdEFTU0VSVF9FUShza2VsLVxcdTAwM2Vic3MtXFx1MDAzZXJlZGlyZWN0ZWQsIDAsIFxcXCJxaW5xIGVncmVzcyBub3QgcmVkaXJlY3RlZFxcXCIpO1xcbitcXG4gZmFpbDpcXG4rXFx0aWYgKHhkcF9hdHRhY2hlZClcXG4rXFx0XFx0YnBmX3hkcF9kZXRhY2godmV0aDJfaWR4LCBYRFBfRkxBR1NfRFJWX01PREUsIE5VTEwpO1xcbiBcXHRpZiAobnN0b2tlbilcXG4gXFx0XFx0Y2xvc2VfbmV0bnMobnN0b2tlbik7XFxuIFxcdFNZU19OT0ZBSUwoXFxcImlwIG5ldG5zIGRlbCBcXFwiIE5TX1RFU1QpO1xcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvZmliX2xvb2t1cC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2ZpYl9sb29rdXAuY1xcbmluZGV4IDdiNWRkMjIxNGZmNDZhLi44NjJhMWU5NDU3YjRlMCAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvZmliX2xvb2t1cC5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2ZpYl9sb29rdXAuY1xcbkBAIC0xOSw0ICsxOSw0MCBAQCBpbnQgZmliX2xvb2t1cChzdHJ1Y3QgX19za19idWZmICpza2IpXFxuIFxcdHJldHVybiBUQ19BQ1RfU0hPVDtcXG4gfVxcbiBcXG4rU0VDKFxcXCJ4ZHBcXFwiKVxcbitpbnQgZmliX2xvb2t1cF94ZHAoc3RydWN0IHhkcF9tZCAqY3R4KVxcbit7XFxuK1xcdGZpYl9sb29rdXBfcmV0ID0gYnBmX2ZpYl9sb29rdXAoY3R4LCBcXHUwMDI2ZmliX3BhcmFtcywgc2l6ZW9mKGZpYl9wYXJhbXMpLFxcbitcXHRcXHRcXHRcXHRcXHRsb29rdXBfZmxhZ3MpO1xcbitcXG4rXFx0cmV0dXJuIFhEUF9EUk9QO1xcbit9XFxuK1xcbitpbnQgcmVkaXJlY3RlZCA9IDA7XFxuK2ludCBwYXNzZWQgPSAwO1xcbitpbnQgZGVsaXZlcmVkID0gMDtcXG4rXFxuK1NFQyhcXFwieGRwXFxcIilcXG4raW50IGZpYl9sb29rdXBfcmVkaXJlY3Qoc3RydWN0IHhkcF9tZCAqY3R4KVxcbit7XFxuK1xcdHN0cnVjdCBicGZfZmliX2xvb2t1cCBwYXJhbXMgPSBmaWJfcGFyYW1zO1xcbitcXHRsb25nIHJldDtcXG4rXFxuK1xcdHJldCA9IGJwZl9maWJfbG9va3VwKGN0eCwgXFx1MDAyNnBhcmFtcywgc2l6ZW9mKHBhcmFtcyksIGxvb2t1cF9mbGFncyk7XFxuK1xcdGlmIChyZXQgPT0gQlBGX0ZJQl9MS1VQX1JFVF9TVUNDRVNTKSB7XFxuK1xcdFxcdHJlZGlyZWN0ZWQrKztcXG4rXFx0XFx0cmV0dXJuIGJwZl9yZWRpcmVjdChwYXJhbXMuaWZpbmRleCwgMCk7XFxuK1xcdH1cXG4rXFxuK1xcdHBhc3NlZCsrO1xcbitcXHRyZXR1cm4gWERQX1BBU1M7XFxuK31cXG4rXFxuK1NFQyhcXFwieGRwXFxcIilcXG4raW50IHhkcF9jb3VudChzdHJ1Y3QgeGRwX21kICpjdHgpXFxuK3tcXG4rXFx0ZGVsaXZlcmVkKys7XFxuK1xcdHJldHVybiBYRFBfRFJPUDtcXG4rfVxcbitcXG4gY2hhciBfbGljZW5zZVtdIFNFQyhcXFwibGljZW5zZVxcXCIpID0gXFxcIkdQTFxcXCI7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI0VDAzOjI1OjUzLjY5NzI3ODMwN1oiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjQ3ODYxMjY3ODcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVkxBTl84MDIxUVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJwZl9pcHY0X2ZpYl9sb29rdXBcIixcbiAgICBcImJwZl9pcHY2X2ZpYl9sb29rdXBcIixcbiAgICBcImJwZl94ZHBfZmliX2xvb2t1cFwiLFxuICAgIFwiYnBmX3NrYl9maWJfbG9va3VwXCIsXG4gICAgXCJicGZfZmliX3NldF9md2RfcGFyYW1zXCIsXG4gICAgXCJicGZfZmliX3ZsYW5faW5wdXRfZGV2XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIEJQRiBGSUIgbG9va3VwIGhlbHBlciAoYGJwZl9maWJfbG9va3VwYCksIGFkZGluZyBzdXBwb3J0IGZvciBWTEFOcyB2aWEgYEJQRl9GSUJfTE9PS1VQX1ZMQU5gIGFuZCBgQlBGX0ZJQl9MT09LVVBfVkxBTl9JTlBVVGAgZmxhZ3MuIFRoaXMgbW9kaWZpZXMgY29yZSByb3V0aW5nIGxvb2t1cCBsb2dpYyB3aXRoaW4gQlBGIHByb2dyYW1zLCB3aGljaCBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgYnkgbG9hZGluZyBhbmQgZXhlY3V0aW5nIEJQRiBwcm9ncmFtcyAoWERQIG9yIFRDKS4gRnV6emluZyBpcyByZXF1aXJlZCB0byBlbnN1cmUgdGhlIG5ldyBWTEFOIHJlc29sdXRpb24gbG9naWMgYW5kIGl0cyBpbnRlcmFjdGlvbiB3aXRoIHRoZSBuZXR3b3JraW5nIHN0YWNrIGlzIHJvYnVzdC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdFxuICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LFxuICAgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAzNTMzNzFjZGE5YjdlOWM3MjdlODhhMGI5ZjdkZjE1ZDUwZmVlYjhlXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBKdW4gMjQgMDM6MjU6NTEgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmggYi9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmhcbmluZGV4IDg5YjM2ZGU1ZmRiYjZkLi5kNDIxODk1NGM1MGY1MyAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaFxuKysrIGIvaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oXG5AQCAtMzUzMiw2ICszNTMyLDQ1IEBAIHVuaW9uIGJwZl9hdHRyIHtcbiAgKlx0XHRcdFVzZSB0aGUgbWFyayBwcmVzZW50IGluICpwYXJhbXMqLVx1MDAzZW1hcmsgZm9yIHRoZSBmaWIgbG9va3VwLlxuICAqXHRcdFx0VGhpcyBvcHRpb24gc2hvdWxkIG5vdCBiZSB1c2VkIHdpdGggQlBGX0ZJQl9MT09LVVBfRElSRUNULFxuICAqXHRcdFx0YXMgaXQgb25seSBoYXMgbWVhbmluZyBmb3IgZnVsbCBsb29rdXBzLlxuKyAqXHRcdCoqQlBGX0ZJQl9MT09LVVBfVkxBTioqXG4rICpcdFx0XHRJZiB0aGUgZmliIGxvb2t1cCByZXNvbHZlcyB0byBhIFZMQU4gZGV2aWNlIHdob3NlXG4rICpcdFx0XHRwYXJlbnQgaXMgYSByZWFsIChub24tVkxBTikgZGV2aWNlLCBzZXRcbisgKlx0XHRcdCpwYXJhbXMqLVx1MDAzZWhfdmxhbl9wcm90byBhbmQgKnBhcmFtcyotXHUwMDNlaF92bGFuX1RDSSBmcm9tXG4rICpcdFx0XHR0aGUgVkxBTiBkZXZpY2UgYW5kIHJlcGxhY2UgKnBhcmFtcyotXHUwMDNlaWZpbmRleCB3aXRoIHRoZVxuKyAqXHRcdFx0cGFyZW50J3MgaWZpbmRleC4gKnBhcmFtcyotXHUwMDNlaF92bGFuX1RDSSBjYXJyaWVzIHRoZSBWSURcbisgKlx0XHRcdG9ubHksIHdpdGggUENQIGFuZCBERUkgYml0cyB6ZXJvOyBhIGNvbnN1bWVyIHdhbnRpbmcgdG9cbisgKlx0XHRcdHNldCBlZ3Jlc3MgcHJpb3JpdHkgd3JpdGVzIFBDUCBpdHNlbGYuICpwYXJhbXMqLVx1MDAzZXNtYWMgaXNcbisgKlx0XHRcdHRoZSBWTEFOIGRldmljZSdzIG93biBhZGRyZXNzLCB3aGljaCBjYW4gZGlmZmVyIGZyb20gdGhlXG4rICpcdFx0XHRwYXJlbnQncy4gT25seSB0aGUgaW1tZWRpYXRlIHBhcmVudCBpcyByZXNvbHZlZDsgaWYgaXRcbisgKlx0XHRcdGlzIGl0c2VsZiBhIFZMQU4gZGV2aWNlIChRaW5RKSBvciBpbiBhbm90aGVyIG5hbWVzcGFjZSxcbisgKlx0XHRcdHRoZSBlZ3Jlc3MgY2Fubm90IGJlIHJlZHVjZWQgdG8gYSBwaHlzaWNhbCBkZXZpY2UgcGx1c1xuKyAqXHRcdFx0b25lIHRhZyBhbmQgdGhlIGxvb2t1cCByZXR1cm5zXG4rICpcdFx0XHQqKkJQRl9GSUJfTEtVUF9SRVRfVkxBTl9GQUlMVVJFKiogd2l0aCAqcGFyYW1zKi1cdTAwM2VpZmluZGV4XG4rICpcdFx0XHRsZWZ0IGF0IHRoZSBpbnB1dC4gUmUtaXNzdWUgd2l0aG91dFxuKyAqXHRcdFx0KipCUEZfRklCX0xPT0tVUF9WTEFOKiogdG8gb2J0YWluIHRoZSBWTEFOIGRldmljZSdzIG93blxuKyAqXHRcdFx0aWZpbmRleC4gVGhlIHN3YXAgYW5kIHRoZSB2bGFuIGZpZWxkc1xuKyAqXHRcdFx0YXJlIHdyaXR0ZW4gb25seSBvbiBzdWNjZXNzOyBvdGhlciBvdXRwdXQgZmllbGRzIGtlZXBcbisgKlx0XHRcdHRoZSBoZWxwZXIncyBleGlzdGluZyBiZWhhdmlvdXIsIHNvIGEgZnJhZy1uZWVkZWQgcmVzdWx0XG4rICpcdFx0XHRzdGlsbCByZXBvcnRzIHRoZSByb3V0ZSBtdHUgaW4gKnBhcmFtcyotXHUwMDNlbXR1X3Jlc3VsdC5cbisgKlx0XHRcdFRoaXMgZmxhZyBpcyBvbmx5IHZhbGlkIGZvciBYRFAgcHJvZ3JhbXM7IHRjIHByb2dyYW1zXG4rICpcdFx0XHRyZWNlaXZlIC1FSU5WQUwgc2luY2UgdGhleSBjYW4gcmVkaXJlY3QgdG8gdGhlIFZMQU5cbisgKlx0XHRcdGRldmljZSBkaXJlY3RseS5cbisgKlx0XHQqKkJQRl9GSUJfTE9PS1VQX1ZMQU5fSU5QVVQqKlxuKyAqXHRcdFx0VHJlYXQgKnBhcmFtcyotXHUwMDNlaF92bGFuX3Byb3RvIGFuZCAqcGFyYW1zKi1cdTAwM2VoX3ZsYW5fVENJXG4rICpcdFx0XHRhcyBhbiBpbnB1dCBWTEFOIHRhZyBhbmQgcnVuIHRoZSBsb29rdXAgYXMgaWYgaW5ncmVzc1xuKyAqXHRcdFx0aGFkIGhhcHBlbmVkIG9uIHRoZSBWTEFOIHN1YmludGVyZmFjZSBjYXJyeWluZyB0aGF0IHRhZ1xuKyAqXHRcdFx0b24gKnBhcmFtcyotXHUwMDNlaWZpbmRleC4gVGhlIFZJRCBpcyB0aGUgbG93IDEyIGJpdHMgb2ZcbisgKlx0XHRcdCpwYXJhbXMqLVx1MDAzZWhfdmxhbl9UQ0k7ICpwYXJhbXMqLVx1MDAzZWhfdmxhbl9wcm90byBtdXN0IGJlXG4rICpcdFx0XHRFVEhfUF84MDIxUSBvciBFVEhfUF84MDIxQUQgaW4gbmV0d29yayBieXRlIG9yZGVyLCBlbHNlXG4rICpcdFx0XHQqKi1FSU5WQUwqKi4gSWYgKnBhcmFtcyotXHUwMDNlaWZpbmRleCBpcyBpdHNlbGYgYSBWTEFOXG4rICpcdFx0XHRkZXZpY2UsIGl0cyBpbm5lciAoUWluUSkgc3ViaW50ZXJmYWNlIGlzIG1hdGNoZWQ7IGZvciBhXG4rICpcdFx0XHRib25kIG9yIHRlYW0sIHBhc3MgdGhlIG1hc3RlcidzIGlmaW5kZXguIEFuIHVubWF0Y2hlZFxuKyAqXHRcdFx0dGFnLCBhIGRvd24gZGV2aWNlLCBvciBvbmUgaW4gYW5vdGhlciBuYW1lc3BhY2UgcmV0dXJuc1xuKyAqXHRcdFx0KipCUEZfRklCX0xLVVBfUkVUX05PVF9GV0RFRCoqLCBtaXJyb3JpbmcgcmVhbCBpbmdyZXNzLlxuKyAqXHRcdFx0QSBWSUQgb2YgMCBpcyBsb29rZWQgdXAgbGl0ZXJhbGx5LCBzbyBkbyBub3Qgc2V0IHRoaXNcbisgKlx0XHRcdGZsYWcgZm9yIHByaW9yaXR5LXRhZ2dlZCBmcmFtZXMuIENhbm5vdCBiZSBjb21iaW5lZCB3aXRoXG4rICpcdFx0XHQqKkJQRl9GSUJfTE9PS1VQX1RCSUQqKiBvciAqKkJQRl9GSUJfTE9PS1VQX09VVFBVVCoqXG4rICpcdFx0XHQocmV0dXJucyAqKi1FSU5WQUwqKikuXG4gICpcbiAgKlx0XHQqY3R4KiBpcyBlaXRoZXIgKipzdHJ1Y3QgeGRwX21kKiogZm9yIFhEUCBwcm9ncmFtcyBvclxuICAqXHRcdCoqc3RydWN0IHNrX2J1ZmYqKiB0YyBjbHNfYWN0IHByb2dyYW1zLlxuQEAgLTczMjcsNiArNzM2Niw4IEBAIGVudW0ge1xuIFx0QlBGX0ZJQl9MT09LVVBfVEJJRCAgICA9ICgxVSBcdTAwM2NcdTAwM2MgMyksXG4gXHRCUEZfRklCX0xPT0tVUF9TUkMgICAgID0gKDFVIFx1MDAzY1x1MDAzYyA0KSxcbiBcdEJQRl9GSUJfTE9PS1VQX01BUksgICAgPSAoMVUgXHUwMDNjXHUwMDNjIDUpLFxuK1x0QlBGX0ZJQl9MT09LVVBfVkxBTiAgICA9ICgxVSBcdTAwM2NcdTAwM2MgNiksXG4rXHRCUEZfRklCX0xPT0tVUF9WTEFOX0lOUFVUID0gKDFVIFx1MDAzY1x1MDAzYyA3KSxcbiB9O1xuIFxuIGVudW0ge1xuQEAgLTczNDAsNiArNzM4MSw3IEBAIGVudW0ge1xuIFx0QlBGX0ZJQl9MS1VQX1JFVF9OT19ORUlHSCwgICAgIC8qIG5vIG5laWdoYm9yIGVudHJ5IGZvciBuaCAqL1xuIFx0QlBGX0ZJQl9MS1VQX1JFVF9GUkFHX05FRURFRCwgIC8qIGZyYWdtZW50YXRpb24gcmVxdWlyZWQgdG8gZndkICovXG4gXHRCUEZfRklCX0xLVVBfUkVUX05PX1NSQ19BRERSLCAgLyogZmFpbGVkIHRvIGRlcml2ZSBJUCBzcmMgYWRkciAqL1xuK1x0QlBGX0ZJQl9MS1VQX1JFVF9WTEFOX0ZBSUxVUkUsIC8qIFZMQU4gZWdyZXNzLCBwYXJlbnQgdW5yZXNvbHZhYmxlICovXG4gfTtcbiBcbiBzdHJ1Y3QgYnBmX2ZpYl9sb29rdXAge1xuQEAgLTczOTMsNyArNzQzNSwxMyBAQCBzdHJ1Y3QgYnBmX2ZpYl9sb29rdXAge1xuIFxuIFx0dW5pb24ge1xuIFx0XHRzdHJ1Y3Qge1xuLVx0XHRcdC8qIG91dHB1dCAqL1xuK1x0XHRcdC8qXG4rXHRcdFx0ICogb3V0cHV0IHdpdGggQlBGX0ZJQl9MT09LVVBfVkxBTjogc2V0IGZyb20gdGhlXG4rXHRcdFx0ICogcmVzb2x2ZWQgZWdyZXNzIFZMQU4gZGV2aWNlIChzZWUgdGhlIGZsYWcpOyB6ZXJvZWRcbitcdFx0XHQgKiBvbiBvdGhlciBzdWNjZXNzZnVsIGxvb2t1cHMuIGlucHV0IHdpdGhcbitcdFx0XHQgKiBCUEZfRklCX0xPT0tVUF9WTEFOX0lOUFVUOiB0aGUgVkxBTiB0YWcgdG8gc2NvcGVcbitcdFx0XHQgKiB0aGUgbG9va3VwIGJ5LlxuK1x0XHRcdCAqL1xuIFx0XHRcdF9fYmUxNlx0aF92bGFuX3Byb3RvO1xuIFx0XHRcdF9fYmUxNlx0aF92bGFuX1RDSTtcbiBcdFx0fTtcbmRpZmYgLS1naXQgYS9uZXQvY29yZS9maWx0ZXIuYyBiL25ldC9jb3JlL2ZpbHRlci5jXG5pbmRleCAyZTk2YjRiODQ3Y2UxMi4uMGVhMzYyZmE0Mjg3ZTMgMTAwNjQ0XG4tLS0gYS9uZXQvY29yZS9maWx0ZXIuY1xuKysrIGIvbmV0L2NvcmUvZmlsdGVyLmNcbkBAIC02MjAxLDIxICs2MjAxLDYwIEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3NrYl9nZXRfeGZybV9zdGF0ZV9wcm90byA9IHtcbiAjZW5kaWZcbiBcbiAjaWYgSVNfRU5BQkxFRChDT05GSUdfSU5FVCkgfHwgSVNfRU5BQkxFRChDT05GSUdfSVBWNilcbi1zdGF0aWMgaW50IGJwZl9maWJfc2V0X2Z3ZF9wYXJhbXMoc3RydWN0IGJwZl9maWJfbG9va3VwICpwYXJhbXMsIHUzMiBtdHUpXG4rc3RhdGljIGludCBicGZfZmliX3NldF9md2RfcGFyYW1zKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4rXHRcdFx0XHQgIHN0cnVjdCBicGZfZmliX2xvb2t1cCAqcGFyYW1zLFxuK1x0XHRcdFx0ICB1MzIgZmxhZ3MsIHUzMiBtdHUsIHUzMiBpbl9pZmluZGV4KVxuIHtcbiBcdHBhcmFtcy1cdTAwM2VoX3ZsYW5fVENJID0gMDtcbiBcdHBhcmFtcy1cdTAwM2VoX3ZsYW5fcHJvdG8gPSAwO1xuK1xuKyNpZiBJU19FTkFCTEVEKENPTkZJR19WTEFOXzgwMjFRKVxuK1x0aWYgKChmbGFncyBcdTAwMjYgQlBGX0ZJQl9MT09LVVBfVkxBTikgXHUwMDI2XHUwMDI2IGlzX3ZsYW5fZGV2KGRldikpIHtcbitcdFx0c3RydWN0IG5ldF9kZXZpY2UgKnJlYWxfZGV2ID0gdmxhbl9kZXZfcHJpdihkZXYpLVx1MDAzZXJlYWxfZGV2O1xuK1xuK1x0XHRpZiAoIWlzX3ZsYW5fZGV2KHJlYWxfZGV2KSBcdTAwMjZcdTAwMjZcbitcdFx0ICAgIG5ldF9lcShkZXZfbmV0KHJlYWxfZGV2KSwgZGV2X25ldChkZXYpKSkge1xuK1x0XHRcdHBhcmFtcy1cdTAwM2VoX3ZsYW5fcHJvdG8gPSB2bGFuX2Rldl92bGFuX3Byb3RvKGRldik7XG4rXHRcdFx0cGFyYW1zLVx1MDAzZWhfdmxhbl9UQ0kgPSBodG9ucyh2bGFuX2Rldl92bGFuX2lkKGRldikpO1xuK1x0XHRcdHBhcmFtcy1cdTAwM2VpZmluZGV4ID0gcmVhbF9kZXYtXHUwMDNlaWZpbmRleDtcbitcdFx0fSBlbHNlIHtcbitcdFx0XHRwYXJhbXMtXHUwMDNlaWZpbmRleCA9IGluX2lmaW5kZXg7XG4rXHRcdFx0cmV0dXJuIEJQRl9GSUJfTEtVUF9SRVRfVkxBTl9GQUlMVVJFO1xuK1x0XHR9XG4rXHR9XG4rI2VuZGlmXG4rXG4gXHRpZiAobXR1KVxuIFx0XHRwYXJhbXMtXHUwMDNlbXR1X3Jlc3VsdCA9IG10dTsgLyogdW5pb24gd2l0aCB0b3RfbGVuICovXG4gXG4gXHRyZXR1cm4gMDtcbiB9XG4rXG4rc3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlICpicGZfZmliX3ZsYW5faW5wdXRfZGV2KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4rXHRcdFx0XHRcdFx0IGNvbnN0IHN0cnVjdCBicGZfZmliX2xvb2t1cCAqcGFyYW1zKVxuK3tcbitcdF9fYmUxNiBwcm90byA9IHBhcmFtcy1cdTAwM2VoX3ZsYW5fcHJvdG87XG4rXHRzdHJ1Y3QgbmV0X2RldmljZSAqdmxhbl9kZXY7XG4rXHR1MTYgdmlkO1xuK1xuK1x0aWYgKHByb3RvICE9IGh0b25zKEVUSF9QXzgwMjFRKSBcdTAwMjZcdTAwMjYgcHJvdG8gIT0gaHRvbnMoRVRIX1BfODAyMUFEKSlcbitcdFx0cmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7XG4rXG4rXHR2aWQgPSBudG9ocyhwYXJhbXMtXHUwMDNlaF92bGFuX1RDSSkgXHUwMDI2IFZMQU5fVklEX01BU0s7XG4rXHR2bGFuX2RldiA9IF9fdmxhbl9maW5kX2Rldl9kZWVwX3JjdShkZXYsIHByb3RvLCB2aWQpO1xuK1x0aWYgKCF2bGFuX2RldiB8fCAhKHZsYW5fZGV2LVx1MDAzZWZsYWdzIFx1MDAyNiBJRkZfVVApIHx8XG4rXHQgICAgIW5ldF9lcShkZXZfbmV0KHZsYW5fZGV2KSwgZGV2X25ldChkZXYpKSlcbitcdFx0cmV0dXJuIE5VTEw7XG4rXG4rXHRyZXR1cm4gdmxhbl9kZXY7XG4rfVxuICNlbmRpZlxuIFxuICNpZiBJU19FTkFCTEVEKENPTkZJR19JTkVUKVxuIHN0YXRpYyBpbnQgYnBmX2lwdjRfZmliX2xvb2t1cChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBicGZfZmliX2xvb2t1cCAqcGFyYW1zLFxuIFx0XHRcdCAgICAgICB1MzIgZmxhZ3MsIGJvb2wgY2hlY2tfbXR1KVxuIHtcbitcdHUzMiBpbl9pZmluZGV4ID0gcGFyYW1zLVx1MDAzZWlmaW5kZXg7XG4gXHRzdHJ1Y3QgbmVpZ2hib3VyICpuZWlnaCA9IE5VTEw7XG4gXHRzdHJ1Y3QgZmliX25oX2NvbW1vbiAqbmhjO1xuIFx0c3RydWN0IGluX2RldmljZSAqaW5fZGV2O1xuQEAgLTYyMjksNiArNjI2OCwxNCBAQCBzdGF0aWMgaW50IGJwZl9pcHY0X2ZpYl9sb29rdXAoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgYnBmX2ZpYl9sb29rdXAgKnBhcmFtcyxcbiBcdGlmICh1bmxpa2VseSghZGV2KSlcbiBcdFx0cmV0dXJuIC1FTk9ERVY7XG4gXG4rXHRpZiAoZmxhZ3MgXHUwMDI2IEJQRl9GSUJfTE9PS1VQX1ZMQU5fSU5QVVQpIHtcbitcdFx0ZGV2ID0gYnBmX2ZpYl92bGFuX2lucHV0X2RldihkZXYsIHBhcmFtcyk7XG4rXHRcdGlmIChJU19FUlIoZGV2KSlcbitcdFx0XHRyZXR1cm4gUFRSX0VSUihkZXYpO1xuK1x0XHRpZiAoIWRldilcbitcdFx0XHRyZXR1cm4gQlBGX0ZJQl9MS1VQX1JFVF9OT1RfRldERUQ7XG4rXHR9XG4rXG4gXHQvKiB2ZXJpZnkgZm9yd2FyZGluZyBpcyBlbmFibGVkIG9uIHRoaXMgaW50ZXJmYWNlICovXG4gXHRpbl9kZXYgPSBfX2luX2Rldl9nZXRfcmN1KGRldik7XG4gXHRpZiAodW5saWtlbHkoIWluX2RldiB8fCAhSU5fREVWX0ZPUldBUkQoaW5fZGV2KSkpXG5AQCAtNjIzOCw3ICs2Mjg1LDExIEBAIHN0YXRpYyBpbnQgYnBmX2lwdjRfZmliX2xvb2t1cChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBicGZfZmliX2xvb2t1cCAqcGFyYW1zLFxuIFx0XHRmbDQuZmxvd2k0X2lpZiA9IDE7XG4gXHRcdGZsNC5mbG93aTRfb2lmID0gcGFyYW1zLVx1MDAzZWlmaW5kZXg7XG4gXHR9IGVsc2Uge1xuLVx0XHRmbDQuZmxvd2k0X2lpZiA9IHBhcmFtcy1cdTAwM2VpZmluZGV4O1xuK1x0XHQvKlxuK1x0XHQgKiBkZXYtXHUwMDNlaWZpbmRleCwgbm90IHBhcmFtcy1cdTAwM2VpZmluZGV4OiBWTEFOX0lOUFVUIG1heSBoYXZlXG4rXHRcdCAqIHJlc29sdmVkIGRldiB0byBhIHN1YmludGVyZmFjZSBhYm92ZS5cbitcdFx0ICovXG4rXHRcdGZsNC5mbG93aTRfaWlmID0gZGV2LVx1MDAzZWlmaW5kZXg7XG4gXHRcdGZsNC5mbG93aTRfb2lmID0gMDtcbiBcdH1cbiBcdGZsNC5mbG93aTRfZHNjcCA9IGluZXRfZHNmaWVsZF90b19kc2NwKHBhcmFtcy1cdTAwM2V0b3MpO1xuQEAgLTYzNDcsNyArNjM5OCw3IEBAIHN0YXRpYyBpbnQgYnBmX2lwdjRfZmliX2xvb2t1cChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBicGZfZmliX2xvb2t1cCAqcGFyYW1zLFxuIFx0bWVtY3B5KHBhcmFtcy1cdTAwM2VzbWFjLCBkZXYtXHUwMDNlZGV2X2FkZHIsIEVUSF9BTEVOKTtcbiBcbiBzZXRfZndkX3BhcmFtczpcbi1cdHJldHVybiBicGZfZmliX3NldF9md2RfcGFyYW1zKHBhcmFtcywgbXR1KTtcbitcdHJldHVybiBicGZfZmliX3NldF9md2RfcGFyYW1zKGRldiwgcGFyYW1zLCBmbGFncywgbXR1LCBpbl9pZmluZGV4KTtcbiB9XG4gI2VuZGlmXG4gXG5AQCAtNjM1Nyw2ICs2NDA4LDcgQEAgc3RhdGljIGludCBicGZfaXB2Nl9maWJfbG9va3VwKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGJwZl9maWJfbG9va3VwICpwYXJhbXMsXG4ge1xuIFx0c3RydWN0IGluNl9hZGRyICpzcmMgPSAoc3RydWN0IGluNl9hZGRyICopIHBhcmFtcy1cdTAwM2VpcHY2X3NyYztcbiBcdHN0cnVjdCBpbjZfYWRkciAqZHN0ID0gKHN0cnVjdCBpbjZfYWRkciAqKSBwYXJhbXMtXHUwMDNlaXB2Nl9kc3Q7XG4rXHR1MzIgaW5faWZpbmRleCA9IHBhcmFtcy1cdTAwM2VpZmluZGV4O1xuIFx0c3RydWN0IGZpYjZfcmVzdWx0IHJlcyA9IHt9O1xuIFx0c3RydWN0IG5laWdoYm91ciAqbmVpZ2g7XG4gXHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2O1xuQEAgLTYzNzQsNiArNjQyNiwxNCBAQCBzdGF0aWMgaW50IGJwZl9pcHY2X2ZpYl9sb29rdXAoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgYnBmX2ZpYl9sb29rdXAgKnBhcmFtcyxcbiBcdGlmICh1bmxpa2VseSghZGV2KSlcbiBcdFx0cmV0dXJuIC1FTk9ERVY7XG4gXG4rXHRpZiAoZmxhZ3MgXHUwMDI2IEJQRl9GSUJfTE9PS1VQX1ZMQU5fSU5QVVQpIHtcbitcdFx0ZGV2ID0gYnBmX2ZpYl92bGFuX2lucHV0X2RldihkZXYsIHBhcmFtcyk7XG4rXHRcdGlmIChJU19FUlIoZGV2KSlcbitcdFx0XHRyZXR1cm4gUFRSX0VSUihkZXYpO1xuK1x0XHRpZiAoIWRldilcbitcdFx0XHRyZXR1cm4gQlBGX0ZJQl9MS1VQX1JFVF9OT1RfRldERUQ7XG4rXHR9XG4rXG4gXHRpZGV2ID0gX19pbjZfZGV2X2dldF9zYWZlbHkoZGV2KTtcbiBcdGlmICh1bmxpa2VseSghaWRldiB8fCAhUkVBRF9PTkNFKGlkZXYtXHUwMDNlY25mLmZvcndhcmRpbmcpKSlcbiBcdFx0cmV0dXJuIEJQRl9GSUJfTEtVUF9SRVRfRldEX0RJU0FCTEVEO1xuQEAgLTYzODIsNyArNjQ0MiwxMiBAQCBzdGF0aWMgaW50IGJwZl9pcHY2X2ZpYl9sb29rdXAoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgYnBmX2ZpYl9sb29rdXAgKnBhcmFtcyxcbiBcdFx0Zmw2LmZsb3dpNl9paWYgPSAxO1xuIFx0XHRvaWYgPSBmbDYuZmxvd2k2X29pZiA9IHBhcmFtcy1cdTAwM2VpZmluZGV4O1xuIFx0fSBlbHNlIHtcbi1cdFx0b2lmID0gZmw2LmZsb3dpNl9paWYgPSBwYXJhbXMtXHUwMDNlaWZpbmRleDtcbitcdFx0LypcbitcdFx0ICogZGV2LVx1MDAzZWlmaW5kZXgsIG5vdCBwYXJhbXMtXHUwMDNlaWZpbmRleDogVkxBTl9JTlBVVCBtYXkgaGF2ZVxuK1x0XHQgKiByZXNvbHZlZCBkZXYgdG8gYSBzdWJpbnRlcmZhY2UgYWJvdmUuXG4rXHRcdCAqL1xuK1x0XHRvaWYgPSBkZXYtXHUwMDNlaWZpbmRleDtcbitcdFx0Zmw2LmZsb3dpNl9paWYgPSBvaWY7XG4gXHRcdGZsNi5mbG93aTZfb2lmID0gMDtcbiBcdFx0c3RyaWN0ID0gUlQ2X0xPT0tVUF9GX0hBU19TQUREUjtcbiBcdH1cbkBAIC02NDg2LDEzICs2NTUxLDI2IEBAIHN0YXRpYyBpbnQgYnBmX2lwdjZfZmliX2xvb2t1cChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBicGZfZmliX2xvb2t1cCAqcGFyYW1zLFxuIFx0bWVtY3B5KHBhcmFtcy1cdTAwM2VzbWFjLCBkZXYtXHUwMDNlZGV2X2FkZHIsIEVUSF9BTEVOKTtcbiBcbiBzZXRfZndkX3BhcmFtczpcbi1cdHJldHVybiBicGZfZmliX3NldF9md2RfcGFyYW1zKHBhcmFtcywgbXR1KTtcbitcdHJldHVybiBicGZfZmliX3NldF9md2RfcGFyYW1zKGRldiwgcGFyYW1zLCBmbGFncywgbXR1LCBpbl9pZmluZGV4KTtcbiB9XG4gI2VuZGlmXG4gXG4gI2RlZmluZSBCUEZfRklCX0xPT0tVUF9NQVNLIChCUEZfRklCX0xPT0tVUF9ESVJFQ1QgfCBCUEZfRklCX0xPT0tVUF9PVVRQVVQgfCBcXFxuIFx0XHRcdCAgICAgQlBGX0ZJQl9MT09LVVBfU0tJUF9ORUlHSCB8IEJQRl9GSUJfTE9PS1VQX1RCSUQgfCBcXFxuLVx0XHRcdCAgICAgQlBGX0ZJQl9MT09LVVBfU1JDIHwgQlBGX0ZJQl9MT09LVVBfTUFSSylcbitcdFx0XHQgICAgIEJQRl9GSUJfTE9PS1VQX1NSQyB8IEJQRl9GSUJfTE9PS1VQX01BUksgfCBcXFxuK1x0XHRcdCAgICAgQlBGX0ZJQl9MT09LVVBfVkxBTiB8IEJQRl9GSUJfTE9PS1VQX1ZMQU5fSU5QVVQpXG4rXG4rc3RhdGljIGJvb2wgYnBmX2ZpYl9sb29rdXBfZmxhZ3Nfb2sodTMyIGZsYWdzKVxuK3tcbitcdGlmIChmbGFncyBcdTAwMjYgfkJQRl9GSUJfTE9PS1VQX01BU0spXG4rXHRcdHJldHVybiBmYWxzZTtcbitcbitcdGlmICgoZmxhZ3MgXHUwMDI2IEJQRl9GSUJfTE9PS1VQX1ZMQU5fSU5QVVQpIFx1MDAyNlx1MDAyNlxuK1x0ICAgIChmbGFncyBcdTAwMjYgKEJQRl9GSUJfTE9PS1VQX1RCSUQgfCBCUEZfRklCX0xPT0tVUF9PVVRQVVQpKSlcbitcdFx0cmV0dXJuIGZhbHNlO1xuK1xuK1x0cmV0dXJuIHRydWU7XG4rfVxuIFxuIEJQRl9DQUxMXzQoYnBmX3hkcF9maWJfbG9va3VwLCBzdHJ1Y3QgeGRwX2J1ZmYgKiwgY3R4LFxuIFx0ICAgc3RydWN0IGJwZl9maWJfbG9va3VwICosIHBhcmFtcywgaW50LCBwbGVuLCB1MzIsIGZsYWdzKVxuQEAgLTY1MDAsNyArNjU3OCw3IEBAIEJQRl9DQUxMXzQoYnBmX3hkcF9maWJfbG9va3VwLCBzdHJ1Y3QgeGRwX2J1ZmYgKiwgY3R4LFxuIFx0aWYgKHBsZW4gXHUwMDNjIHNpemVvZigqcGFyYW1zKSlcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXG4tXHRpZiAoZmxhZ3MgXHUwMDI2IH5CUEZfRklCX0xPT0tVUF9NQVNLKVxuK1x0aWYgKCFicGZfZmliX2xvb2t1cF9mbGFnc19vayhmbGFncykpXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFxuIFx0c3dpdGNoIChwYXJhbXMtXHUwMDNlZmFtaWx5KSB7XG5AQCAtNjUzOCw3ICs2NjE2LDEwIEBAIEJQRl9DQUxMXzQoYnBmX3NrYl9maWJfbG9va3VwLCBzdHJ1Y3Qgc2tfYnVmZiAqLCBza2IsXG4gXHRpZiAocGxlbiBcdTAwM2Mgc2l6ZW9mKCpwYXJhbXMpKVxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcbi1cdGlmIChmbGFncyBcdTAwMjYgfkJQRl9GSUJfTE9PS1VQX01BU0spXG4rXHRpZiAoIWJwZl9maWJfbG9va3VwX2ZsYWdzX29rKGZsYWdzKSlcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXG4rXHRpZiAoZmxhZ3MgXHUwMDI2IEJQRl9GSUJfTE9PS1VQX1ZMQU4pXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFxuIFx0aWYgKHBhcmFtcy1cdTAwM2V0b3RfbGVuKVxuZGlmZiAtLWdpdCBhL3Rvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaCBiL3Rvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaFxuaW5kZXggODliMzZkZTVmZGJiNmQuLmQ0MjE4OTU0YzUwZjUzIDEwMDY0NFxuLS0tIGEvdG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oXG4rKysgYi90b29scy9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmhcbkBAIC0zNTMyLDYgKzM1MzIsNDUgQEAgdW5pb24gYnBmX2F0dHIge1xuICAqXHRcdFx0VXNlIHRoZSBtYXJrIHByZXNlbnQgaW4gKnBhcmFtcyotXHUwMDNlbWFyayBmb3IgdGhlIGZpYiBsb29rdXAuXG4gICpcdFx0XHRUaGlzIG9wdGlvbiBzaG91bGQgbm90IGJlIHVzZWQgd2l0aCBCUEZfRklCX0xPT0tVUF9ESVJFQ1QsXG4gICpcdFx0XHRhcyBpdCBvbmx5IGhhcyBtZWFuaW5nIGZvciBmdWxsIGxvb2t1cHMuXG4rICpcdFx0KipCUEZfRklCX0xPT0tVUF9WTEFOKipcbisgKlx0XHRcdElmIHRoZSBmaWIgbG9va3VwIHJlc29sdmVzIHRvIGEgVkxBTiBkZXZpY2Ugd2hvc2VcbisgKlx0XHRcdHBhcmVudCBpcyBhIHJlYWwgKG5vbi1WTEFOKSBkZXZpY2UsIHNldFxuKyAqXHRcdFx0KnBhcmFtcyotXHUwMDNlaF92bGFuX3Byb3RvIGFuZCAqcGFyYW1zKi1cdTAwM2VoX3ZsYW5fVENJIGZyb21cbisgKlx0XHRcdHRoZSBWTEFOIGRldmljZSBhbmQgcmVwbGFjZSAqcGFyYW1zKi1cdTAwM2VpZmluZGV4IHdpdGggdGhlXG4rICpcdFx0XHRwYXJlbnQncyBpZmluZGV4LiAqcGFyYW1zKi1cdTAwM2VoX3ZsYW5fVENJIGNhcnJpZXMgdGhlIFZJRFxuKyAqXHRcdFx0b25seSwgd2l0aCBQQ1AgYW5kIERFSSBiaXRzIHplcm87IGEgY29uc3VtZXIgd2FudGluZyB0b1xuKyAqXHRcdFx0c2V0IGVncmVzcyBwcmlvcml0eSB3cml0ZXMgUENQIGl0c2VsZi4gKnBhcmFtcyotXHUwMDNlc21hYyBpc1xuKyAqXHRcdFx0dGhlIFZMQU4gZGV2aWNlJ3Mgb3duIGFkZHJlc3MsIHdoaWNoIGNhbiBkaWZmZXIgZnJvbSB0aGVcbisgKlx0XHRcdHBhcmVudCdzLiBPbmx5IHRoZSBpbW1lZGlhdGUgcGFyZW50IGlzIHJlc29sdmVkOyBpZiBpdFxuKyAqXHRcdFx0aXMgaXRzZWxmIGEgVkxBTiBkZXZpY2UgKFFpblEpIG9yIGluIGFub3RoZXIgbmFtZXNwYWNlLFxuKyAqXHRcdFx0dGhlIGVncmVzcyBjYW5ub3QgYmUgcmVkdWNlZCB0byBhIHBoeXNpY2FsIGRldmljZSBwbHVzXG4rICpcdFx0XHRvbmUgdGFnIGFuZCB0aGUgbG9va3VwIHJldHVybnNcbisgKlx0XHRcdCoqQlBGX0ZJQl9MS1VQX1JFVF9WTEFOX0ZBSUxVUkUqKiB3aXRoICpwYXJhbXMqLVx1MDAzZWlmaW5kZXhcbisgKlx0XHRcdGxlZnQgYXQgdGhlIGlucHV0LiBSZS1pc3N1ZSB3aXRob3V0XG4rICpcdFx0XHQqKkJQRl9GSUJfTE9PS1VQX1ZMQU4qKiB0byBvYnRhaW4gdGhlIFZMQU4gZGV2aWNlJ3Mgb3duXG4rICpcdFx0XHRpZmluZGV4LiBUaGUgc3dhcCBhbmQgdGhlIHZsYW4gZmllbGRzXG4rICpcdFx0XHRhcmUgd3JpdHRlbiBvbmx5IG9uIHN1Y2Nlc3M7IG90aGVyIG91dHB1dCBmaWVsZHMga2VlcFxuKyAqXHRcdFx0dGhlIGhlbHBlcidzIGV4aXN0aW5nIGJlaGF2aW91ciwgc28gYSBmcmFnLW5lZWRlZCByZXN1bHRcbisgKlx0XHRcdHN0aWxsIHJlcG9ydHMgdGhlIHJvdXRlIG10dSBpbiAqcGFyYW1zKi1cdTAwM2VtdHVfcmVzdWx0LlxuKyAqXHRcdFx0VGhpcyBmbGFnIGlzIG9ubHkgdmFsaWQgZm9yIFhEUCBwcm9ncmFtczsgdGMgcHJvZ3JhbXNcbisgKlx0XHRcdHJlY2VpdmUgLUVJTlZBTCBzaW5jZSB0aGV5IGNhbiByZWRpcmVjdCB0byB0aGUgVkxBTlxuKyAqXHRcdFx0ZGV2aWNlIGRpcmVjdGx5LlxuKyAqXHRcdCoqQlBGX0ZJQl9MT09LVVBfVkxBTl9JTlBVVCoqXG4rICpcdFx0XHRUcmVhdCAqcGFyYW1zKi1cdTAwM2VoX3ZsYW5fcHJvdG8gYW5kICpwYXJhbXMqLVx1MDAzZWhfdmxhbl9UQ0lcbisgKlx0XHRcdGFzIGFuIGlucHV0IFZMQU4gdGFnIGFuZCBydW4gdGhlIGxvb2t1cCBhcyBpZiBpbmdyZXNzXG4rICpcdFx0XHRoYWQgaGFwcGVuZWQgb24gdGhlIFZMQU4gc3ViaW50ZXJmYWNlIGNhcnJ5aW5nIHRoYXQgdGFnXG4rICpcdFx0XHRvbiAqcGFyYW1zKi1cdTAwM2VpZmluZGV4LiBUaGUgVklEIGlzIHRoZSBsb3cgMTIgYml0cyBvZlxuKyAqXHRcdFx0KnBhcmFtcyotXHUwMDNlaF92bGFuX1RDSTsgKnBhcmFtcyotXHUwMDNlaF92bGFuX3Byb3RvIG11c3QgYmVcbisgKlx0XHRcdEVUSF9QXzgwMjFRIG9yIEVUSF9QXzgwMjFBRCBpbiBuZXR3b3JrIGJ5dGUgb3JkZXIsIGVsc2VcbisgKlx0XHRcdCoqLUVJTlZBTCoqLiBJZiAqcGFyYW1zKi1cdTAwM2VpZmluZGV4IGlzIGl0c2VsZiBhIFZMQU5cbisgKlx0XHRcdGRldmljZSwgaXRzIGlubmVyIChRaW5RKSBzdWJpbnRlcmZhY2UgaXMgbWF0Y2hlZDsgZm9yIGFcbisgKlx0XHRcdGJvbmQgb3IgdGVhbSwgcGFzcyB0aGUgbWFzdGVyJ3MgaWZpbmRleC4gQW4gdW5tYXRjaGVkXG4rICpcdFx0XHR0YWcsIGEgZG93biBkZXZpY2UsIG9yIG9uZSBpbiBhbm90aGVyIG5hbWVzcGFjZSByZXR1cm5zXG4rICpcdFx0XHQqKkJQRl9GSUJfTEtVUF9SRVRfTk9UX0ZXREVEKiosIG1pcnJvcmluZyByZWFsIGluZ3Jlc3MuXG4rICpcdFx0XHRBIFZJRCBvZiAwIGlzIGxvb2tlZCB1cCBsaXRlcmFsbHksIHNvIGRvIG5vdCBzZXQgdGhpc1xuKyAqXHRcdFx0ZmxhZyBmb3IgcHJpb3JpdHktdGFnZ2VkIGZyYW1lcy4gQ2Fubm90IGJlIGNvbWJpbmVkIHdpdGhcbisgKlx0XHRcdCoqQlBGX0ZJQl9MT09LVVBfVEJJRCoqIG9yICoqQlBGX0ZJQl9MT09LVVBfT1VUUFVUKipcbisgKlx0XHRcdChyZXR1cm5zICoqLUVJTlZBTCoqKS5cbiAgKlxuICAqXHRcdCpjdHgqIGlzIGVpdGhlciAqKnN0cnVjdCB4ZHBfbWQqKiBmb3IgWERQIHByb2dyYW1zIG9yXG4gICpcdFx0KipzdHJ1Y3Qgc2tfYnVmZioqIHRjIGNsc19hY3QgcHJvZ3JhbXMuXG5AQCAtNzMyNyw2ICs3MzY2LDggQEAgZW51bSB7XG4gXHRCUEZfRklCX0xPT0tVUF9UQklEICAgID0gKDFVIFx1MDAzY1x1MDAzYyAzKSxcbiBcdEJQRl9GSUJfTE9PS1VQX1NSQyAgICAgPSAoMVUgXHUwMDNjXHUwMDNjIDQpLFxuIFx0QlBGX0ZJQl9MT09LVVBfTUFSSyAgICA9ICgxVSBcdTAwM2NcdTAwM2MgNSksXG4rXHRCUEZfRklCX0xPT0tVUF9WTEFOICAgID0gKDFVIFx1MDAzY1x1MDAzYyA2KSxcbitcdEJQRl9GSUJfTE9PS1VQX1ZMQU5fSU5QVVQgPSAoMVUgXHUwMDNjXHUwMDNjIDcpLFxuIH07XG4gXG4gZW51bSB7XG5AQCAtNzM0MCw2ICs3MzgxLDcgQEAgZW51bSB7XG4gXHRCUEZfRklCX0xLVVBfUkVUX05PX05FSUdILCAgICAgLyogbm8gbmVpZ2hib3IgZW50cnkgZm9yIG5oICovXG4gXHRCUEZfRklCX0xLVVBfUkVUX0ZSQUdfTkVFREVELCAgLyogZnJhZ21lbnRhdGlvbiByZXF1aXJlZCB0byBmd2QgKi9cbiBcdEJQRl9GSUJfTEtVUF9SRVRfTk9fU1JDX0FERFIsICAvKiBmYWlsZWQgdG8gZGVyaXZlIElQIHNyYyBhZGRyICovXG4rXHRCUEZfRklCX0xLVVBfUkVUX1ZMQU5fRkFJTFVSRSwgLyogVkxBTiBlZ3Jlc3MsIHBhcmVudCB1bnJlc29sdmFibGUgKi9cbiB9O1xuIFxuIHN0cnVjdCBicGZfZmliX2xvb2t1cCB7XG5AQCAtNzM5Myw3ICs3NDM1LDEzIEBAIHN0cnVjdCBicGZfZmliX2xvb2t1cCB7XG4gXG4gXHR1bmlvbiB7XG4gXHRcdHN0cnVjdCB7XG4tXHRcdFx0Lyogb3V0cHV0ICovXG4rXHRcdFx0LypcbitcdFx0XHQgKiBvdXRwdXQgd2l0aCBCUEZfRklCX0xPT0tVUF9WTEFOOiBzZXQgZnJvbSB0aGVcbitcdFx0XHQgKiByZXNvbHZlZCBlZ3Jlc3MgVkxBTiBkZXZpY2UgKHNlZSB0aGUgZmxhZyk7IHplcm9lZFxuK1x0XHRcdCAqIG9uIG90aGVyIHN1Y2Nlc3NmdWwgbG9va3Vwcy4gaW5wdXQgd2l0aFxuK1x0XHRcdCAqIEJQRl9GSUJfTE9PS1VQX1ZMQU5fSU5QVVQ6IHRoZSBWTEFOIHRhZyB0byBzY29wZVxuK1x0XHRcdCAqIHRoZSBsb29rdXAgYnkuXG4rXHRcdFx0ICovXG4gXHRcdFx0X19iZTE2XHRoX3ZsYW5fcHJvdG87XG4gXHRcdFx0X19iZTE2XHRoX3ZsYW5fVENJO1xuIFx0XHR9O1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2ZpYl9sb29rdXAuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2ZpYl9sb29rdXAuY1xuaW5kZXggYmQ3NjU4OTU4MDA0MWYuLjhjYWVkOWQ0M2I5ODExIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvZmliX2xvb2t1cC5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9maWJfbG9va3VwLmNcbkBAIC0yLDYgKzIsNyBAQFxuIC8qIENvcHlyaWdodCAoYykgMjAyMyBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy4gKi9cbiBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9ydG5ldGxpbmsuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2lmX2V0aGVyLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NzeXMvdHlwZXMuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY25ldC9pZi5oXHUwMDNlXG4gXG5AQCAtMjMsNiArMjQsNyBAQFxuICNkZWZpbmUgSVBWNF9UQklEX0FERFJcdFx0XCIxNzIuMC4wLjI1NFwiXG4gI2RlZmluZSBJUFY0X1RCSURfTkVUXHRcdFwiMTcyLjAuMC4wXCJcbiAjZGVmaW5lIElQVjRfVEJJRF9EU1RcdFx0XCIxNzIuMC4wLjJcIlxuKyNkZWZpbmUgSVBWNF9UQklEX05PTkVJR0hfRFNUXHRcIjE3Mi4wLjAuNVwiXG4gI2RlZmluZSBJUFY2X1RCSURfQUREUlx0XHRcImZkMDA6OkZGRkZcIlxuICNkZWZpbmUgSVBWNl9UQklEX05FVFx0XHRcImZkMDA6OlwiXG4gI2RlZmluZSBJUFY2X1RCSURfRFNUXHRcdFwiZmQwMDo6MlwiXG5AQCAtMzcsNiArMzksNDEgQEBcbiAjZGVmaW5lIElQVjZfTE9DQUxcdFx0XCJmZDAxOjozXCJcbiAjZGVmaW5lIElQVjZfR1cxXHRcdFwiZmQwMTo6MVwiXG4gI2RlZmluZSBJUFY2X0dXMlx0XHRcImZkMDE6OjJcIlxuKyNkZWZpbmUgVkxBTl9JRFx0XHRcdDEwMFxuKyNkZWZpbmUgVkxBTl9JRkFDRVx0XHRcInZldGgxLjEwMFwiXG4rI2RlZmluZSBWTEFOX0lEX0RPV05cdFx0MTAyXG4rI2RlZmluZSBWTEFOX0lGQUNFX0RPV05cdFx0XCJ2ZXRoMS4xMDJcIlxuKyNkZWZpbmUgUUlOUV9PVVRFUl9JRkFDRVx0XCJ2ZXRoMS4yMDBcIlxuKyNkZWZpbmUgUUlOUV9JTk5FUl9JRkFDRVx0XCJ2ZXRoMS4yMDAuMzAwXCJcbisjZGVmaW5lIFZMQU5fVEFCTEVcdFx0XCIzMDBcIlxuKyNkZWZpbmUgSVBWNF9WTEFOX0lGQUNFX0FERFJcdFwiMTAuNS4wLjI1NFwiXG4rI2RlZmluZSBJUFY0X1ZMQU5fRUdSRVNTX0RTVFx0XCIxMC41LjAuMlwiXG4rI2RlZmluZSBJUFY0X1FJTlFfRFNUXHRcdFwiMTAuNy4wLjJcIlxuKyNkZWZpbmUgSVBWNF9WTEFOX0RTVFx0XHRcIjEwLjYuMC4yXCJcbisjZGVmaW5lIElQVjRfVkxBTl9HV1x0XHRcIjEwLjUuMC4xXCJcbisjZGVmaW5lIElQVjZfVkxBTl9JRkFDRV9BRERSXHRcImZkMDI6OjI1NFwiXG4rI2RlZmluZSBJUFY2X1ZMQU5fRUdSRVNTX0RTVFx0XCJmZDAyOjoyXCJcbisjZGVmaW5lIElQVjZfVkxBTl9EU1RcdFx0XCJmZDAzOjoyXCJcbisjZGVmaW5lIElQVjZfVkxBTl9HV1x0XHRcImZkMDI6OjFcIlxuKyNkZWZpbmUgVkxBTl9WSURfVU5VU0VEXHRcdDk5OVxuKyNkZWZpbmUgVlJGX0lGQUNFXHRcdFwidnJmLWJsdWVcIlxuKyNkZWZpbmUgVlJGX1RBQkxFXHRcdFwiMTAwMFwiXG4rI2RlZmluZSBWUkZfVkxBTl9JRFx0XHQxMDFcbisjZGVmaW5lIFZSRl9WTEFOX0lGQUNFXHRcdFwidmV0aDEuMTAxXCJcbisjZGVmaW5lIElQVjRfVlJGX0lGQUNFX0FERFJcdFwiMTAuOC4wLjI1NFwiXG4rI2RlZmluZSBJUFY0X1ZSRl9HV1x0XHRcIjEwLjguMC4xXCJcbisjZGVmaW5lIElQVjRfVlJGX0RTVFx0XHRcIjEwLjkuMC4yXCJcbisjZGVmaW5lIFRCSURfVkxBTl9JRFx0XHQ1MFxuKyNkZWZpbmUgVEJJRF9WTEFOX0lGQUNFXHRcdFwidmV0aDIuNTBcIlxuKyNkZWZpbmUgSVBWNF9UQklEX1ZMQU5fRFNUXHRcIjE3Mi4yLjAuMlwiXG4rI2RlZmluZSBJUFY0X0JPTkRfVkxBTl9EU1RcdFwiMTAuMTEuMC4yXCJcbisjZGVmaW5lIElQVjRfVkxBTl9NVFVfRFNUXHRcIjEwLjUuOS4yXCJcbisjZGVmaW5lIFFJTlFfQURfVkxBTl9JRFx0XHQyMDBcbisjZGVmaW5lIFFJTlFfSU5ORVJfVkxBTl9JRFx0MzAwXG4rI2RlZmluZSBCT05EX0lGQUNFXHRcdFwiYm9uZDk5XCJcbisjZGVmaW5lIEJPTkRfUE9SVFx0XHRcInZldGgzXCJcbisjZGVmaW5lIEJPTkRfUE9SVF9QRUVSXHRcdFwidmV0aDRcIlxuKyNkZWZpbmUgQk9ORF9WTEFOX0lEXHRcdDUwMFxuICNkZWZpbmUgRE1BQ1x0XHRcdFwiMTE6MTE6MTE6MTE6MTE6MTFcIlxuICNkZWZpbmUgRE1BQ19JTklUIHsgMHgxMSwgMHgxMSwgMHgxMSwgMHgxMSwgMHgxMSwgMHgxMSwgfVxuICNkZWZpbmUgRE1BQzJcdFx0XHRcIjAxOjAxOjAxOjAxOjAxOjAxXCJcbkBAIC01Miw2ICs4OSwxNyBAQCBzdHJ1Y3QgZmliX2xvb2t1cF90ZXN0IHtcbiBcdF9fdTMyIHRiaWQ7XG4gXHRfX3U4IGRtYWNbNl07XG4gXHRfX3UzMiBtYXJrO1xuK1x0LypcbitcdCAqIGlucHV0IHRhZyB3aXRoIEJQRl9GSUJfTE9PS1VQX1ZMQU5fSU5QVVQ7IGV4cGVjdGVkIG91dHB1dCB0YWdcbitcdCAqIHdpdGggQlBGX0ZJQl9MT09LVVBfVkxBTiAoY2hlY2tlZCB3aGVuIGNoZWNrX3ZsYW4gaXMgc2V0KVxuK1x0ICovXG4rXHRfX3UxNiB2bGFuX3Byb3RvO1xuK1x0X191MTYgdmxhbl9pZDtcbitcdGJvb2wgY2hlY2tfdmxhbjtcbitcdGNvbnN0IGNoYXIgKmV4cGVjdGVkX2RldjsgLyogZXhwZWN0ZWQgcGFyYW1zLVx1MDAzZWlmaW5kZXggYWZ0ZXIgbG9va3VwICovXG4rXHRjb25zdCBjaGFyICppaWY7XHQgIC8qIG92ZXJyaWRlIHRoZSBkZWZhdWx0IHZldGgxIGlucHV0IGRldmljZSAqL1xuK1x0X191MTYgdG90X2xlbjtcdFx0ICAvKiB0cmlnZ2VycyB0aGUgaW4tbG9va3VwIG10dSBjaGVjayB3aGVuIHNldCAqL1xuK1x0X191MTYgZXhwZWN0ZWRfbXR1O1x0ICAvKiBleHBlY3RlZCBtdHVfcmVzdWx0ICh1bmlvbiB3aXRoIHRvdF9sZW4pICovXG4gfTtcbiBcbiBzdGF0aWMgY29uc3Qgc3RydWN0IGZpYl9sb29rdXBfdGVzdCB0ZXN0c1tdID0ge1xuQEAgLTc5LDYgKzEyNywxNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGZpYl9sb29rdXBfdGVzdCB0ZXN0c1tdID0ge1xuIFx0ICAuZGFkZHIgPSBJUFY0X1RCSURfRFNULCAuZXhwZWN0ZWRfcmV0ID0gQlBGX0ZJQl9MS1VQX1JFVF9TVUNDRVNTLFxuIFx0ICAubG9va3VwX2ZsYWdzID0gQlBGX0ZJQl9MT09LVVBfRElSRUNUIHwgQlBGX0ZJQl9MT09LVVBfVEJJRCwgLnRiaWQgPSAxMDAsXG4gXHQgIC5kbWFjID0gRE1BQ19JTklUMiwgfSxcbitcdC8qXG4rXHQgKiBBbiBlcnJvciB0aGF0IHJldHVybnMgYWZ0ZXIgdGhlIGVncmVzcyBkZXZpY2UgaXMgcmVzb2x2ZWQgbXVzdFxuK1x0ICogcmVwb3J0IHRoZSBlZ3Jlc3MgaWZpbmRleCwgbm90IHRoZSBpbnB1dC4gVGhpcyByb3V0ZXMgZnJvbSBpbnB1dFxuK1x0ICogdmV0aDEgdmlhIHZldGgyICh0YWJsZSAxMDApIHRvIGEgZHN0IHdpdGggbm8gbmVpZ2hib3VyLCBzb1xuK1x0ICogaW5wdXQgIT0gZWdyZXNzLCBwaW5uaW5nIE5PX05FSUdIIHRvIHRoZSBlZ3Jlc3MgZGV2aWNlLlxuK1x0ICovXG4rXHR7IC5kZXNjID0gXCJJUHY0IE5PX05FSUdIIHJlcG9ydHMgdGhlIGVncmVzcyBpZmluZGV4LCBub3QgdGhlIGlucHV0XCIsXG4rXHQgIC5kYWRkciA9IElQVjRfVEJJRF9OT05FSUdIX0RTVCxcbitcdCAgLmV4cGVjdGVkX3JldCA9IEJQRl9GSUJfTEtVUF9SRVRfTk9fTkVJR0gsXG4rXHQgIC5sb29rdXBfZmxhZ3MgPSBCUEZfRklCX0xPT0tVUF9ESVJFQ1QgfCBCUEZfRklCX0xPT0tVUF9UQklELCAudGJpZCA9IDEwMCxcbitcdCAgLmV4cGVjdGVkX2RldiA9IFwidmV0aDJcIiwgfSxcbiBcdHsgLmRlc2MgPSBcIklQdjYgVEJJRCBsb29rdXAgZmFpbHVyZVwiLFxuIFx0ICAuZGFkZHIgPSBJUFY2X1RCSURfRFNULCAuZXhwZWN0ZWRfcmV0ID0gQlBGX0ZJQl9MS1VQX1JFVF9OT1RfRldERUQsXG4gXHQgIC5sb29rdXBfZmxhZ3MgPSBCUEZfRklCX0xPT0tVUF9ESVJFQ1QgfCBCUEZfRklCX0xPT0tVUF9UQklELFxuQEAgLTE0Miw2ICsyMDEsMjE4IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZmliX2xvb2t1cF90ZXN0IHRlc3RzW10gPSB7XG4gXHQgIC5leHBlY3RlZF9kc3QgPSBJUFY2X0dXMSxcbiBcdCAgLmxvb2t1cF9mbGFncyA9IEJQRl9GSUJfTE9PS1VQX1NLSVBfTkVJR0gsXG4gXHQgIC5tYXJrID0gTUFSSywgfSxcbitcdC8qIHZsYW4gZWdyZXNzIHJlc29sdXRpb24gKi9cbitcdC8qXG4rXHQgKiBJbnZhcmlhbnQgdGhlIFZMQU4tZWdyZXNzIGFybXMgam9pbnRseSBlbmZvcmNlOiBhXG4rXHQgKiBCUEZfRklCX0xPT0tVUF9WTEFOIFNVQ0NFU1MgYWx3YXlzIGNhcnJpZXMgYSBwaHlzaWNhbCxcbitcdCAqIHhtaXQtY2FwYWJsZSBpZmluZGV4IC0tIG5vIFNVQ0NFU1MgZXZlciByZXR1cm5zIGEgVkxBTi1kZXZpY2VcbitcdCAqIGlmaW5kZXguIFJlZHVjaWJsZSBhcm1zIHBpbiBpZmluZGV4ID09IHRoZSBwaHlzaWNhbCBwYXJlbnQ7IHRoZVxuK1x0ICogUWluUSBhbmQgZm9yZWlnbi1uZXRucyBhcm1zIHBpbiBWTEFOX0ZBSUxVUkUgd2l0aCBwYXJhbXMtXHUwMDNlaWZpbmRleFxuK1x0ICogbGVmdCBhdCB0aGUgaW5wdXQsIHNvIGEgcmVncmVzc2lvbiB0byBiZXN0LWVmZm9ydCAoU1VDQ0VTUyArIHRoZVxuK1x0ICogVkxBTiBpZmluZGV4KSBmYWlscyBvbmUuXG4rXHQgKi9cbitcdHsgLmRlc2MgPSBcIklQdjQgVkxBTiBlZ3Jlc3MsIG5vIGZsYWdcIixcbitcdCAgLmRhZGRyID0gSVBWNF9WTEFOX0VHUkVTU19EU1QsIC5leHBlY3RlZF9yZXQgPSBCUEZfRklCX0xLVVBfUkVUX1NVQ0NFU1MsXG4rXHQgIC5sb29rdXBfZmxhZ3MgPSBCUEZfRklCX0xPT0tVUF9TS0lQX05FSUdILFxuK1x0ICAuZXhwZWN0ZWRfZGV2ID0gVkxBTl9JRkFDRSwgLmNoZWNrX3ZsYW4gPSB0cnVlLCB9LFxuK1x0eyAuZGVzYyA9IFwiSVB2NCBWTEFOIGVncmVzcywgc2luZ2xlIFZMQU5cIixcbitcdCAgLmRhZGRyID0gSVBWNF9WTEFOX0VHUkVTU19EU1QsIC5leHBlY3RlZF9yZXQgPSBCUEZfRklCX0xLVVBfUkVUX1NVQ0NFU1MsXG4rXHQgIC5sb29rdXBfZmxhZ3MgPSBCUEZfRklCX0xPT0tVUF9WTEFOIHwgQlBGX0ZJQl9MT09LVVBfU0tJUF9ORUlHSCxcbitcdCAgLmV4cGVjdGVkX2RldiA9IFwidmV0aDFcIiwgLmNoZWNrX3ZsYW4gPSB0cnVlLFxuK1x0ICAudmxhbl9wcm90byA9IEVUSF9QXzgwMjFRLCAudmxhbl9pZCA9IFZMQU5fSUQsIH0sXG4rXHQvKlxuK1x0ICogc2tiIHBhdGggd2l0aG91dCB0b3RfbGVuOiBtdHVfcmVzdWx0IGlzIHRoZSBWTEFOIGRldmljZSdzIG10dVxuK1x0ICogKDE0MDApLCBub3QgdGhlIHBhcmVudCdzICgxNTAwKVxuK1x0ICovXG4rXHR7IC5kZXNjID0gXCJJUHY0IFZMQU4gZWdyZXNzLCBza2ItcGF0aCBtdHUgaXMgdGhlIFZMQU4gZGV2aWNlJ3Mgd2l0aG91dCB0aGUgZmxhZ1wiLFxuK1x0ICAuZGFkZHIgPSBJUFY0X1ZMQU5fRUdSRVNTX0RTVCwgLmV4cGVjdGVkX3JldCA9IEJQRl9GSUJfTEtVUF9SRVRfU1VDQ0VTUyxcbitcdCAgLmxvb2t1cF9mbGFncyA9IEJQRl9GSUJfTE9PS1VQX1NLSVBfTkVJR0gsXG4rXHQgIC5leHBlY3RlZF9kZXYgPSBWTEFOX0lGQUNFLCAuY2hlY2tfdmxhbiA9IHRydWUsIC5leHBlY3RlZF9tdHUgPSAxNDAwLCB9LFxuK1x0eyAuZGVzYyA9IFwiSVB2NCBWTEFOIGVncmVzcywgZmxhZyBzZXQgYnV0IGVncmVzcyBpcyBub3QgYSBWTEFOXCIsXG4rXHQgIC5kYWRkciA9IElQVjRfTlVEX0ZBSUxFRF9BRERSLCAuZXhwZWN0ZWRfcmV0ID0gQlBGX0ZJQl9MS1VQX1JFVF9TVUNDRVNTLFxuK1x0ICAubG9va3VwX2ZsYWdzID0gQlBGX0ZJQl9MT09LVVBfVkxBTiB8IEJQRl9GSUJfTE9PS1VQX1NLSVBfTkVJR0gsXG4rXHQgIC5leHBlY3RlZF9kZXYgPSBcInZldGgxXCIsIC5jaGVja192bGFuID0gdHJ1ZSwgfSxcbitcdHsgLmRlc2MgPSBcIklQdjQgVkxBTiBlZ3Jlc3MsIFFpblEgbm90IHJlZHVjaWJsZSAoVkxBTl9GQUlMVVJFKVwiLFxuK1x0ICAuZGFkZHIgPSBJUFY0X1FJTlFfRFNULFxuK1x0ICAuZXhwZWN0ZWRfcmV0ID0gQlBGX0ZJQl9MS1VQX1JFVF9WTEFOX0ZBSUxVUkUsXG4rXHQgIC5sb29rdXBfZmxhZ3MgPSBCUEZfRklCX0xPT0tVUF9WTEFOIHwgQlBGX0ZJQl9MT09LVVBfU0tJUF9ORUlHSCxcbitcdCAgLmV4cGVjdGVkX2RldiA9IFwidmV0aDFcIiwgLmNoZWNrX3ZsYW4gPSB0cnVlLCB9LFxuK1x0eyAuZGVzYyA9IFwiSVB2NCBRaW5RIGVncmVzcyB3aXRob3V0IHRoZSBmbGFnIChlc2NhcGUgaGF0Y2gpXCIsXG4rXHQgIC5kYWRkciA9IElQVjRfUUlOUV9EU1QsIC5leHBlY3RlZF9yZXQgPSBCUEZfRklCX0xLVVBfUkVUX1NVQ0NFU1MsXG4rXHQgIC5sb29rdXBfZmxhZ3MgPSBCUEZfRklCX0xPT0tVUF9TS0lQX05FSUdILFxuK1x0ICAuZXhwZWN0ZWRfZGV2ID0gUUlOUV9JTk5FUl9JRkFDRSwgfSxcbitcdHsgLmRlc2MgPSBcIklQdjYgVkxBTiBlZ3Jlc3MsIHNpbmdsZSBWTEFOXCIsXG4rXHQgIC5kYWRkciA9IElQVjZfVkxBTl9FR1JFU1NfRFNULCAuZXhwZWN0ZWRfcmV0ID0gQlBGX0ZJQl9MS1VQX1JFVF9TVUNDRVNTLFxuK1x0ICAubG9va3VwX2ZsYWdzID0gQlBGX0ZJQl9MT09LVVBfVkxBTiB8IEJQRl9GSUJfTE9PS1VQX1NLSVBfTkVJR0gsXG4rXHQgIC5leHBlY3RlZF9kZXYgPSBcInZldGgxXCIsIC5jaGVja192bGFuID0gdHJ1ZSxcbitcdCAgLnZsYW5fcHJvdG8gPSBFVEhfUF84MDIxUSwgLnZsYW5faWQgPSBWTEFOX0lELCB9LFxuK1x0eyAuZGVzYyA9IFwiSVB2NCBWTEFOIGVncmVzcywgbmVpZ2hib3VyIG9uIHRoZSBWTEFOIGRldmljZVwiLFxuK1x0ICAuZGFkZHIgPSBJUFY0X1ZMQU5fRUdSRVNTX0RTVCwgLmV4cGVjdGVkX3JldCA9IEJQRl9GSUJfTEtVUF9SRVRfU1VDQ0VTUyxcbitcdCAgLmxvb2t1cF9mbGFncyA9IEJQRl9GSUJfTE9PS1VQX1ZMQU4sXG4rXHQgIC5leHBlY3RlZF9kZXYgPSBcInZldGgxXCIsIC5jaGVja192bGFuID0gdHJ1ZSxcbitcdCAgLnZsYW5fcHJvdG8gPSBFVEhfUF84MDIxUSwgLnZsYW5faWQgPSBWTEFOX0lELCAuZG1hYyA9IERNQUNfSU5JVCwgfSxcbitcdHsgLmRlc2MgPSBcIklQdjQgVkxBTiBlZ3Jlc3MgaW4gT1VUUFVUIG1vZGVcIixcbitcdCAgLmRhZGRyID0gSVBWNF9WTEFOX0VHUkVTU19EU1QsIC5leHBlY3RlZF9yZXQgPSBCUEZfRklCX0xLVVBfUkVUX1NVQ0NFU1MsXG4rXHQgIC5paWYgPSBWTEFOX0lGQUNFLFxuK1x0ICAubG9va3VwX2ZsYWdzID0gQlBGX0ZJQl9MT09LVVBfT1VUUFVUIHwgQlBGX0ZJQl9MT09LVVBfVkxBTiB8XG4rXHRcdFx0ICBCUEZfRklCX0xPT0tVUF9TS0lQX05FSUdILFxuK1x0ICAuZXhwZWN0ZWRfZGV2ID0gXCJ2ZXRoMVwiLCAuY2hlY2tfdmxhbiA9IHRydWUsXG4rXHQgIC52bGFuX3Byb3RvID0gRVRIX1BfODAyMVEsIC52bGFuX2lkID0gVkxBTl9JRCwgfSxcbitcdHsgLmRlc2MgPSBcIklQdjQgVkxBTiBlZ3Jlc3Mgb3ZlciBhIGJvbmRcIixcbitcdCAgLmRhZGRyID0gSVBWNF9CT05EX1ZMQU5fRFNULCAuZXhwZWN0ZWRfcmV0ID0gQlBGX0ZJQl9MS1VQX1JFVF9TVUNDRVNTLFxuK1x0ICAubG9va3VwX2ZsYWdzID0gQlBGX0ZJQl9MT09LVVBfVkxBTiB8IEJQRl9GSUJfTE9PS1VQX1NLSVBfTkVJR0gsXG4rXHQgIC5leHBlY3RlZF9kZXYgPSBCT05EX0lGQUNFLCAuY2hlY2tfdmxhbiA9IHRydWUsXG4rXHQgIC52bGFuX3Byb3RvID0gRVRIX1BfODAyMVEsIC52bGFuX2lkID0gQk9ORF9WTEFOX0lELCB9LFxuK1x0eyAuZGVzYyA9IFwiSVB2NCBWTEFOIGVncmVzcyB2aWEgVEJJRCB0YWJsZVwiLFxuK1x0ICAuZGFkZHIgPSBJUFY0X1RCSURfVkxBTl9EU1QsIC5leHBlY3RlZF9yZXQgPSBCUEZfRklCX0xLVVBfUkVUX1NVQ0NFU1MsXG4rXHQgIC5sb29rdXBfZmxhZ3MgPSBCUEZfRklCX0xPT0tVUF9ESVJFQ1QgfCBCUEZfRklCX0xPT0tVUF9UQklEIHxcbitcdFx0XHQgIEJQRl9GSUJfTE9PS1VQX1ZMQU4gfCBCUEZfRklCX0xPT0tVUF9TS0lQX05FSUdILFxuK1x0ICAudGJpZCA9IDEwMCxcbitcdCAgLmV4cGVjdGVkX2RldiA9IFwidmV0aDJcIiwgLmNoZWNrX3ZsYW4gPSB0cnVlLFxuK1x0ICAudmxhbl9wcm90byA9IEVUSF9QXzgwMjFRLCAudmxhbl9pZCA9IFRCSURfVkxBTl9JRCwgfSxcbitcdHsgLmRlc2MgPSBcIklQdjQgVkxBTiBlZ3Jlc3MsIHN1Y2Nlc3Mgd3JpdGVzIG10dV9yZXN1bHQgd2l0aCB0aGUgc3dhcFwiLFxuK1x0ICAuZGFkZHIgPSBJUFY0X1ZMQU5fTVRVX0RTVCwgLmV4cGVjdGVkX3JldCA9IEJQRl9GSUJfTEtVUF9SRVRfU1VDQ0VTUyxcbitcdCAgLnRvdF9sZW4gPSA1MDAsIC5leHBlY3RlZF9tdHUgPSAxMDAwLFxuK1x0ICAubG9va3VwX2ZsYWdzID0gQlBGX0ZJQl9MT09LVVBfVkxBTiB8IEJQRl9GSUJfTE9PS1VQX1NLSVBfTkVJR0gsXG4rXHQgIC5leHBlY3RlZF9kZXYgPSBcInZldGgxXCIsIC5jaGVja192bGFuID0gdHJ1ZSxcbitcdCAgLnZsYW5fcHJvdG8gPSBFVEhfUF84MDIxUSwgLnZsYW5faWQgPSBWTEFOX0lELCB9LFxuK1x0eyAuZGVzYyA9IFwiSVB2NCBWTEFOIGVncmVzcywgRlJBR19ORUVERUQgcmVwb3J0cyBtdHUsIHN3YXAgdW53cml0dGVuXCIsXG4rXHQgIC5kYWRkciA9IElQVjRfVkxBTl9NVFVfRFNULCAuZXhwZWN0ZWRfcmV0ID0gQlBGX0ZJQl9MS1VQX1JFVF9GUkFHX05FRURFRCxcbitcdCAgLnRvdF9sZW4gPSAxNDAwLCAuZXhwZWN0ZWRfbXR1ID0gMTAwMCxcbitcdCAgLmxvb2t1cF9mbGFncyA9IEJQRl9GSUJfTE9PS1VQX1ZMQU4gfCBCUEZfRklCX0xPT0tVUF9TS0lQX05FSUdILFxuK1x0ICAuZXhwZWN0ZWRfZGV2ID0gXCJ2ZXRoMVwiLCAuY2hlY2tfdmxhbiA9IHRydWUsIH0sXG4rXHQvKiB2bGFuIHRhZyBhcyBsb29rdXAgaW5wdXQgKi9cbitcdHsgLmRlc2MgPSBcIklQdjQgVkxBTiBpbnB1dCwgbm8gZmxhZ1wiLFxuK1x0ICAuZGFkZHIgPSBJUFY0X1ZMQU5fRFNULCAuZXhwZWN0ZWRfcmV0ID0gQlBGX0ZJQl9MS1VQX1JFVF9TVUNDRVNTLFxuK1x0ICAuZXhwZWN0ZWRfZHN0ID0gSVBWNF9HVzEsXG4rXHQgIC5sb29rdXBfZmxhZ3MgPSBCUEZfRklCX0xPT0tVUF9TS0lQX05FSUdILCB9LFxuK1x0eyAuZGVzYyA9IFwiSVB2NCBWTEFOIGlucHV0LCB0YWcgc2VsZWN0cyBzdWJpbnRlcmZhY2Ugcm91dGVcIixcbitcdCAgLmRhZGRyID0gSVBWNF9WTEFOX0RTVCwgLmV4cGVjdGVkX3JldCA9IEJQRl9GSUJfTEtVUF9SRVRfU1VDQ0VTUyxcbitcdCAgLmV4cGVjdGVkX2RzdCA9IElQVjRfVkxBTl9HVywgLmV4cGVjdGVkX2RldiA9IFZMQU5fSUZBQ0UsXG4rXHQgIC5sb29rdXBfZmxhZ3MgPSBCUEZfRklCX0xPT0tVUF9WTEFOX0lOUFVUIHwgQlBGX0ZJQl9MT09LVVBfU0tJUF9ORUlHSCxcbitcdCAgLnZsYW5fcHJvdG8gPSBFVEhfUF84MDIxUSwgLnZsYW5faWQgPSBWTEFOX0lELCB9LFxuK1x0eyAuZGVzYyA9IFwiSVB2NiBWTEFOIGlucHV0LCB0YWcgc2VsZWN0cyBzdWJpbnRlcmZhY2Ugcm91dGVcIixcbitcdCAgLmRhZGRyID0gSVBWNl9WTEFOX0RTVCwgLmV4cGVjdGVkX3JldCA9IEJQRl9GSUJfTEtVUF9SRVRfU1VDQ0VTUyxcbitcdCAgLmV4cGVjdGVkX2RzdCA9IElQVjZfVkxBTl9HVywgLmV4cGVjdGVkX2RldiA9IFZMQU5fSUZBQ0UsXG4rXHQgIC5sb29rdXBfZmxhZ3MgPSBCUEZfRklCX0xPT0tVUF9WTEFOX0lOUFVUIHwgQlBGX0ZJQl9MT09LVVBfU0tJUF9ORUlHSCxcbitcdCAgLnZsYW5fcHJvdG8gPSBFVEhfUF84MDIxUSwgLnZsYW5faWQgPSBWTEFOX0lELCB9LFxuK1x0eyAuZGVzYyA9IFwiSVB2NCBWTEFOIGlucHV0IGFuZCBlZ3Jlc3MgY29tYmluZWRcIixcbitcdCAgLmRhZGRyID0gSVBWNF9WTEFOX0RTVCwgLmV4cGVjdGVkX3JldCA9IEJQRl9GSUJfTEtVUF9SRVRfU1VDQ0VTUyxcbitcdCAgLmV4cGVjdGVkX2RzdCA9IElQVjRfVkxBTl9HVywgLmV4cGVjdGVkX2RldiA9IFwidmV0aDFcIixcbitcdCAgLmNoZWNrX3ZsYW4gPSB0cnVlLFxuK1x0ICAubG9va3VwX2ZsYWdzID0gQlBGX0ZJQl9MT09LVVBfVkxBTl9JTlBVVCB8IEJQRl9GSUJfTE9PS1VQX1ZMQU4gfFxuK1x0XHRcdCAgQlBGX0ZJQl9MT09LVVBfU0tJUF9ORUlHSCxcbitcdCAgLnZsYW5fcHJvdG8gPSBFVEhfUF84MDIxUSwgLnZsYW5faWQgPSBWTEFOX0lELCB9LFxuK1x0eyAuZGVzYyA9IFwiSVB2NCBWTEFOIGlucHV0LCBuZWlnaGJvdXIgcmVzb2x2ZWQgb24gdGhlIHJvdXRlXCIsXG4rXHQgIC5kYWRkciA9IElQVjRfVkxBTl9EU1QsIC5leHBlY3RlZF9yZXQgPSBCUEZfRklCX0xLVVBfUkVUX1NVQ0NFU1MsXG4rXHQgIC5leHBlY3RlZF9kc3QgPSBJUFY0X1ZMQU5fR1csIC5leHBlY3RlZF9kZXYgPSBWTEFOX0lGQUNFLFxuK1x0ICAubG9va3VwX2ZsYWdzID0gQlBGX0ZJQl9MT09LVVBfVkxBTl9JTlBVVCxcbitcdCAgLnZsYW5fcHJvdG8gPSBFVEhfUF84MDIxUSwgLnZsYW5faWQgPSBWTEFOX0lELCAuZG1hYyA9IERNQUNfSU5JVDIsIH0sXG4rXHR7IC5kZXNjID0gXCJJUHY0IFZMQU4gaW5wdXQsIHNvdXJjZSBhZGRyZXNzIGZyb20gdGhlIHN1YmludGVyZmFjZVwiLFxuK1x0ICAuZGFkZHIgPSBJUFY0X1ZMQU5fRFNULCAuZXhwZWN0ZWRfcmV0ID0gQlBGX0ZJQl9MS1VQX1JFVF9TVUNDRVNTLFxuK1x0ICAuZXhwZWN0ZWRfc3JjID0gSVBWNF9WTEFOX0lGQUNFX0FERFIsXG4rXHQgIC5sb29rdXBfZmxhZ3MgPSBCUEZfRklCX0xPT0tVUF9WTEFOX0lOUFVUIHwgQlBGX0ZJQl9MT09LVVBfU1JDIHxcbitcdFx0XHQgIEJQRl9GSUJfTE9PS1VQX1NLSVBfTkVJR0gsXG4rXHQgIC52bGFuX3Byb3RvID0gRVRIX1BfODAyMVEsIC52bGFuX2lkID0gVkxBTl9JRCwgfSxcbitcdC8qXG4rXHQgKiBWUkY6IHRoZSByZXNvbHZlZCBzdWJpbnRlcmZhY2UgaXMgZW5zbGF2ZWQsIHNvIHRoZSBsM21kZXYgcnVsZVxuK1x0ICogKGZ1bGwgbG9va3VwKSBhbmQgbDNtZGV2X2ZpYl90YWJsZV9yY3UoKSAoRElSRUNUKSBtdXN0IHNlbGVjdFxuK1x0ICogdGhlIFZSRiB0YWJsZSBmcm9tIHRoZSByZXNvbHZlZCBpbmdyZXNzXG4rXHQgKi9cbitcdHsgLmRlc2MgPSBcIklQdjQgVkxBTiBpbnB1dCwgVlJGIHN1YmludGVyZmFjZSwgbm8gZmxhZ1wiLFxuK1x0ICAuZGFkZHIgPSBJUFY0X1ZSRl9EU1QsIC5leHBlY3RlZF9yZXQgPSBCUEZfRklCX0xLVVBfUkVUX1NVQ0NFU1MsXG4rXHQgIC5leHBlY3RlZF9kc3QgPSBJUFY0X0dXMSxcbitcdCAgLmxvb2t1cF9mbGFncyA9IEJQRl9GSUJfTE9PS1VQX1NLSVBfTkVJR0gsIH0sXG4rXHR7IC5kZXNjID0gXCJJUHY0IFZMQU4gaW5wdXQsIHRhZyBzZWxlY3RzIFZSRiB0YWJsZVwiLFxuK1x0ICAuZGFkZHIgPSBJUFY0X1ZSRl9EU1QsIC5leHBlY3RlZF9yZXQgPSBCUEZfRklCX0xLVVBfUkVUX1NVQ0NFU1MsXG4rXHQgIC5leHBlY3RlZF9kc3QgPSBJUFY0X1ZSRl9HVywgLmV4cGVjdGVkX2RldiA9IFZSRl9WTEFOX0lGQUNFLFxuK1x0ICAubG9va3VwX2ZsYWdzID0gQlBGX0ZJQl9MT09LVVBfVkxBTl9JTlBVVCB8IEJQRl9GSUJfTE9PS1VQX1NLSVBfTkVJR0gsXG4rXHQgIC52bGFuX3Byb3RvID0gRVRIX1BfODAyMVEsIC52bGFuX2lkID0gVlJGX1ZMQU5fSUQsIH0sXG4rXHR7IC5kZXNjID0gXCJJUHY0IFZMQU4gaW5wdXQsIERJUkVDVCB1c2VzIFZSRiB0YWJsZSBmcm9tIHJlc29sdmVkIGluZ3Jlc3NcIixcbitcdCAgLmRhZGRyID0gSVBWNF9WUkZfRFNULCAuZXhwZWN0ZWRfcmV0ID0gQlBGX0ZJQl9MS1VQX1JFVF9TVUNDRVNTLFxuK1x0ICAuZXhwZWN0ZWRfZHN0ID0gSVBWNF9WUkZfR1csIC5leHBlY3RlZF9kZXYgPSBWUkZfVkxBTl9JRkFDRSxcbitcdCAgLmxvb2t1cF9mbGFncyA9IEJQRl9GSUJfTE9PS1VQX1ZMQU5fSU5QVVQgfCBCUEZfRklCX0xPT0tVUF9ESVJFQ1QgfFxuK1x0XHRcdCAgQlBGX0ZJQl9MT09LVVBfU0tJUF9ORUlHSCxcbitcdCAgLnZsYW5fcHJvdG8gPSBFVEhfUF84MDIxUSwgLnZsYW5faWQgPSBWUkZfVkxBTl9JRCwgfSxcbitcdC8qXG4rXHQgKiBmYWlsdXJlIGFybXMgYWxzbyBhc3NlcnQgcGFyYW1zIGlzIGxlZnQgdW50b3VjaGVkOiBpZmluZGV4IHN0aWxsXG4rXHQgKiBuYW1lcyB0aGUgcGh5c2ljYWwgZGV2aWNlIGFuZCB0aGUgaW5wdXQgdGFnIGJ5dGVzIHN1cnZpdmVcbitcdCAqL1xuK1x0eyAuZGVzYyA9IFwiSVB2NCBWTEFOIGlucHV0LCBpbnZhbGlkIHByb3RvXCIsXG4rXHQgIC5kYWRkciA9IElQVjRfVkxBTl9EU1QsIC5leHBlY3RlZF9yZXQgPSAtRUlOVkFMLFxuK1x0ICAuZXhwZWN0ZWRfZGV2ID0gXCJ2ZXRoMVwiLCAuY2hlY2tfdmxhbiA9IHRydWUsXG4rXHQgIC5sb29rdXBfZmxhZ3MgPSBCUEZfRklCX0xPT0tVUF9WTEFOX0lOUFVUIHwgQlBGX0ZJQl9MT09LVVBfU0tJUF9ORUlHSCxcbitcdCAgLnZsYW5fcHJvdG8gPSAweDEyMzQsIC52bGFuX2lkID0gVkxBTl9JRCwgfSxcbitcdHsgLmRlc2MgPSBcIklQdjQgVkxBTiBpbnB1dCwgdW5tYXRjaGVkIFZJRFwiLFxuK1x0ICAuZGFkZHIgPSBJUFY0X1ZMQU5fRFNULCAuZXhwZWN0ZWRfcmV0ID0gQlBGX0ZJQl9MS1VQX1JFVF9OT1RfRldERUQsXG4rXHQgIC5leHBlY3RlZF9kZXYgPSBcInZldGgxXCIsIC5jaGVja192bGFuID0gdHJ1ZSxcbitcdCAgLmxvb2t1cF9mbGFncyA9IEJQRl9GSUJfTE9PS1VQX1ZMQU5fSU5QVVQgfCBCUEZfRklCX0xPT0tVUF9TS0lQX05FSUdILFxuK1x0ICAudmxhbl9wcm90byA9IEVUSF9QXzgwMjFRLCAudmxhbl9pZCA9IFZMQU5fVklEX1VOVVNFRCwgfSxcbitcdHsgLmRlc2MgPSBcIklQdjQgVkxBTiBpbnB1dCwgc3ViaW50ZXJmYWNlIGRvd25cIixcbitcdCAgLmRhZGRyID0gSVBWNF9WTEFOX0RTVCwgLmV4cGVjdGVkX3JldCA9IEJQRl9GSUJfTEtVUF9SRVRfTk9UX0ZXREVELFxuK1x0ICAuZXhwZWN0ZWRfZGV2ID0gXCJ2ZXRoMVwiLCAuY2hlY2tfdmxhbiA9IHRydWUsXG4rXHQgIC5sb29rdXBfZmxhZ3MgPSBCUEZfRklCX0xPT0tVUF9WTEFOX0lOUFVUIHwgQlBGX0ZJQl9MT09LVVBfU0tJUF9ORUlHSCxcbitcdCAgLnZsYW5fcHJvdG8gPSBFVEhfUF84MDIxUSwgLnZsYW5faWQgPSBWTEFOX0lEX0RPV04sIH0sXG4rXHQvKlxuK1x0ICogdGhlIHJlc29sdmVyIHJ1bnMgYmVmb3JlIHRoZSBmb3J3YXJkaW5nIGNoZWNrLCBzbyBvbiBkZXZpY2VzXG4rXHQgKiB3aXRoIGZvcndhcmRpbmcgb2ZmIEZXRF9ESVNBQkxFRCAobm90IE5PVF9GV0RFRCkgcHJvdmVzIHRoZSB0YWdcbitcdCAqIHJlc29sdmVkIHRvIHRoYXQgZGV2aWNlIGFuZCB0aGUgbG9va3VwIHVzZWQgaXQgYXMgaW5ncmVzc1xuK1x0ICovXG4rXHR7IC5kZXNjID0gXCJJUHY0IFZMQU4gaW5wdXQsIDgwMi4xYWQgdGFnXCIsXG4rXHQgIC5kYWRkciA9IElQVjRfVkxBTl9EU1QsIC5leHBlY3RlZF9yZXQgPSBCUEZfRklCX0xLVVBfUkVUX0ZXRF9ESVNBQkxFRCxcbitcdCAgLmxvb2t1cF9mbGFncyA9IEJQRl9GSUJfTE9PS1VQX1ZMQU5fSU5QVVQgfCBCUEZfRklCX0xPT0tVUF9TS0lQX05FSUdILFxuK1x0ICAudmxhbl9wcm90byA9IEVUSF9QXzgwMjFBRCwgLnZsYW5faWQgPSBRSU5RX0FEX1ZMQU5fSUQsIH0sXG4rXHR7IC5kZXNjID0gXCJJUHY0IFZMQU4gaW5wdXQsIFBDUCBhbmQgREVJIGJpdHMgaWdub3JlZCBpbiBUQ0lcIixcbitcdCAgLmRhZGRyID0gSVBWNF9WTEFOX0RTVCwgLmV4cGVjdGVkX3JldCA9IEJQRl9GSUJfTEtVUF9SRVRfU1VDQ0VTUyxcbitcdCAgLmV4cGVjdGVkX2RzdCA9IElQVjRfVkxBTl9HVyxcbitcdCAgLmxvb2t1cF9mbGFncyA9IEJQRl9GSUJfTE9PS1VQX1ZMQU5fSU5QVVQgfCBCUEZfRklCX0xPT0tVUF9TS0lQX05FSUdILFxuK1x0ICAudmxhbl9wcm90byA9IEVUSF9QXzgwMjFRLCAudmxhbl9pZCA9IDB4ZTAwMCB8IFZMQU5fSUQsIH0sXG4rXHR7IC5kZXNjID0gXCJJUHY0IFZMQU4gaW5wdXQsIGlubmVyIFFpblEgZGV2aWNlIGZyb20gVkxBTiBpZmluZGV4XCIsXG4rXHQgIC5kYWRkciA9IElQVjRfVkxBTl9EU1QsIC5leHBlY3RlZF9yZXQgPSBCUEZfRklCX0xLVVBfUkVUX0ZXRF9ESVNBQkxFRCxcbitcdCAgLmlpZiA9IFFJTlFfT1VURVJfSUZBQ0UsXG4rXHQgIC5sb29rdXBfZmxhZ3MgPSBCUEZfRklCX0xPT0tVUF9WTEFOX0lOUFVUIHwgQlBGX0ZJQl9MT09LVVBfU0tJUF9ORUlHSCxcbitcdCAgLnZsYW5fcHJvdG8gPSBFVEhfUF84MDIxUSwgLnZsYW5faWQgPSBRSU5RX0lOTkVSX1ZMQU5fSUQsIH0sXG4rXHQvKlxuK1x0ICogYm9uZGluZzogdGhlIFZMQU5zIGxpdmUgb24gdGhlIG1hc3RlciwgYXMgb24gcmVjZWl2ZSwgd2hlcmUgdGhlXG4rXHQgKiBmcmFtZSBpcyBzdGVlcmVkIHRvIHRoZSBtYXN0ZXIgYmVmb3JlIFZMQU4gcHJvY2Vzc2luZzsgYSBwb3J0XG4rXHQgKiBpZmluZGV4IGRvZXMgbm90IG1hdGNoIChwb3J0cyBjYXJyeSB2aWQgc3RhdGUgYnV0IG5vIFZMQU4gZGV2cylcbitcdCAqL1xuK1x0eyAuZGVzYyA9IFwiSVB2NCBWTEFOIGlucHV0LCB0YWcgb24gYm9uZCBtYXN0ZXIgcmVzb2x2ZXNcIixcbitcdCAgLmRhZGRyID0gSVBWNF9WTEFOX0RTVCwgLmV4cGVjdGVkX3JldCA9IEJQRl9GSUJfTEtVUF9SRVRfRldEX0RJU0FCTEVELFxuK1x0ICAuaWlmID0gQk9ORF9JRkFDRSxcbitcdCAgLmxvb2t1cF9mbGFncyA9IEJQRl9GSUJfTE9PS1VQX1ZMQU5fSU5QVVQgfCBCUEZfRklCX0xPT0tVUF9TS0lQX05FSUdILFxuK1x0ICAudmxhbl9wcm90byA9IEVUSF9QXzgwMjFRLCAudmxhbl9pZCA9IEJPTkRfVkxBTl9JRCwgfSxcbitcdHsgLmRlc2MgPSBcIklQdjQgVkxBTiBpbnB1dCwgdGFnIG9uIGJvbmQgcG9ydCBkb2VzIG5vdCBtYXRjaFwiLFxuK1x0ICAuZGFkZHIgPSBJUFY0X1ZMQU5fRFNULCAuZXhwZWN0ZWRfcmV0ID0gQlBGX0ZJQl9MS1VQX1JFVF9OT1RfRldERUQsXG4rXHQgIC5paWYgPSBCT05EX1BPUlQsIC5leHBlY3RlZF9kZXYgPSBCT05EX1BPUlQsIC5jaGVja192bGFuID0gdHJ1ZSxcbitcdCAgLmxvb2t1cF9mbGFncyA9IEJQRl9GSUJfTE9PS1VQX1ZMQU5fSU5QVVQgfCBCUEZfRklCX0xPT0tVUF9TS0lQX05FSUdILFxuK1x0ICAudmxhbl9wcm90byA9IEVUSF9QXzgwMjFRLCAudmxhbl9pZCA9IEJPTkRfVkxBTl9JRCwgfSxcbitcdHsgLmRlc2MgPSBcIklQdjYgVkxBTiBpbnB1dCwgaW52YWxpZCBwcm90b1wiLFxuK1x0ICAuZGFkZHIgPSBJUFY2X1ZMQU5fRFNULCAuZXhwZWN0ZWRfcmV0ID0gLUVJTlZBTCxcbitcdCAgLmV4cGVjdGVkX2RldiA9IFwidmV0aDFcIiwgLmNoZWNrX3ZsYW4gPSB0cnVlLFxuK1x0ICAubG9va3VwX2ZsYWdzID0gQlBGX0ZJQl9MT09LVVBfVkxBTl9JTlBVVCB8IEJQRl9GSUJfTE9PS1VQX1NLSVBfTkVJR0gsXG4rXHQgIC52bGFuX3Byb3RvID0gMHgxMjM0LCAudmxhbl9pZCA9IFZMQU5fSUQsIH0sXG4rXHR7IC5kZXNjID0gXCJJUHY0IFZMQU4gaW5wdXQsIFZJRCAwIHByaW9yaXR5IHRhZyBmYWlscyBjbG9zZWRcIixcbitcdCAgLmRhZGRyID0gSVBWNF9WTEFOX0RTVCwgLmV4cGVjdGVkX3JldCA9IEJQRl9GSUJfTEtVUF9SRVRfTk9UX0ZXREVELFxuK1x0ICAuZXhwZWN0ZWRfZGV2ID0gXCJ2ZXRoMVwiLCAuY2hlY2tfdmxhbiA9IHRydWUsXG4rXHQgIC5sb29rdXBfZmxhZ3MgPSBCUEZfRklCX0xPT0tVUF9WTEFOX0lOUFVUIHwgQlBGX0ZJQl9MT09LVVBfU0tJUF9ORUlHSCxcbitcdCAgLnZsYW5fcHJvdG8gPSBFVEhfUF84MDIxUSwgLnZsYW5faWQgPSAwLCB9LFxuK1x0eyAuZGVzYyA9IFwiSVB2NiBWTEFOIGlucHV0LCB1bm1hdGNoZWQgVklEXCIsXG4rXHQgIC5kYWRkciA9IElQVjZfVkxBTl9EU1QsIC5leHBlY3RlZF9yZXQgPSBCUEZfRklCX0xLVVBfUkVUX05PVF9GV0RFRCxcbitcdCAgLmV4cGVjdGVkX2RldiA9IFwidmV0aDFcIiwgLmNoZWNrX3ZsYW4gPSB0cnVlLFxuK1x0ICAubG9va3VwX2ZsYWdzID0gQlBGX0ZJQl9MT09LVVBfVkxBTl9JTlBVVCB8IEJQRl9GSUJfTE9PS1VQX1NLSVBfTkVJR0gsXG4rXHQgIC52bGFuX3Byb3RvID0gRVRIX1BfODAyMVEsIC52bGFuX2lkID0gVkxBTl9WSURfVU5VU0VELCB9LFxuK1x0eyAuZGVzYyA9IFwidW5rbm93biBmbGFnIGJpdCByZWplY3RlZFwiLFxuK1x0ICAuZGFkZHIgPSBJUFY0X1ZMQU5fRFNULCAuZXhwZWN0ZWRfcmV0ID0gLUVJTlZBTCxcbitcdCAgLmxvb2t1cF9mbGFncyA9ICgxIFx1MDAzY1x1MDAzYyAxNCkgfCBCUEZfRklCX0xPT0tVUF9TS0lQX05FSUdILCB9LFxuK1x0eyAuZGVzYyA9IFwiSVB2NCBWTEFOIGlucHV0IHJlamVjdGVkIHdpdGggVEJJRFwiLFxuK1x0ICAuZGFkZHIgPSBJUFY0X1ZMQU5fRFNULCAuZXhwZWN0ZWRfcmV0ID0gLUVJTlZBTCxcbitcdCAgLmxvb2t1cF9mbGFncyA9IEJQRl9GSUJfTE9PS1VQX1ZMQU5fSU5QVVQgfCBCUEZfRklCX0xPT0tVUF9UQklELFxuK1x0ICAudmxhbl9wcm90byA9IEVUSF9QXzgwMjFRLCAudmxhbl9pZCA9IFZMQU5fSUQsIH0sXG4rXHR7IC5kZXNjID0gXCJJUHY0IFZMQU4gaW5wdXQgcmVqZWN0ZWQgd2l0aCBPVVRQVVRcIixcbitcdCAgLmRhZGRyID0gSVBWNF9WTEFOX0RTVCwgLmV4cGVjdGVkX3JldCA9IC1FSU5WQUwsXG4rXHQgIC5sb29rdXBfZmxhZ3MgPSBCUEZfRklCX0xPT0tVUF9WTEFOX0lOUFVUIHwgQlBGX0ZJQl9MT09LVVBfT1VUUFVULFxuK1x0ICAudmxhbl9wcm90byA9IEVUSF9QXzgwMjFRLCAudmxhbl9pZCA9IFZMQU5fSUQsIH0sXG4gfTtcbiBcbiBzdGF0aWMgaW50IHNldHVwX25ldG5zKHZvaWQpXG5AQCAtMjA0LDYgKzQ3NSwxMTAgQEAgc3RhdGljIGludCBzZXR1cF9uZXRucyh2b2lkKVxuIFx0U1lTKGZhaWwsIFwiaXAgcnVsZSBhZGQgcHJpbyAyIGZ3bWFyayAlZCBsb29rdXAgJXNcIiwgTUFSSywgTUFSS19UQUJMRSk7XG4gXHRTWVMoZmFpbCwgXCJpcCAtNiBydWxlIGFkZCBwcmlvIDIgZndtYXJrICVkIGxvb2t1cCAlc1wiLCBNQVJLLCBNQVJLX1RBQkxFKTtcbiBcbitcdC8qXG4rXHQgKiBTZXR1cCBmb3IgdmxhbiB0ZXN0czogYSBzdWJpbnRlcmZhY2UgZm9yIGVncmVzcyByZXNvbHV0aW9uIGFuZFxuK1x0ICogdGFnLWFzLWlucHV0LCBhIFFpblEgc3RhY2ssIGFuZCBhbiBpaWYgcnVsZSBzbyB0aGUgaW5wdXQgdGVzdHNcbitcdCAqIG9ic2VydmUgd2hpY2ggZGV2aWNlIHRoZSBsb29rdXAgdXNlZCBhcyBpbmdyZXNzLlxuK1x0ICovXG4rXHRTWVMoZmFpbCwgXCJpcCBsaW5rIGFkZCBsaW5rIHZldGgxIG5hbWUgJXMgdHlwZSB2bGFuIGlkICVkXCIsXG4rXHQgICAgVkxBTl9JRkFDRSwgVkxBTl9JRCk7XG4rXHRTWVMoZmFpbCwgXCJpcCBsaW5rIHNldCBkZXYgJXMgdXBcIiwgVkxBTl9JRkFDRSk7XG4rXHQvKlxuK1x0ICogbG93ZXIgdGhhbiB0aGUgdmV0aDEgcGFyZW50ICgxNTAwKTogdGhlIHNrYi1wYXRoIG10dSBjaGVjayB1c2VzIHRoZVxuK1x0ICogRklCIHJlc3VsdCAoVkxBTikgZGV2aWNlLCBzbyBtdHVfcmVzdWx0IGlzIHRoaXMgdmFsdWUgd2l0aCBvclxuK1x0ICogd2l0aG91dCB0aGUgZWdyZXNzIHN3YXAsIHdoaWNoIHR3byBhcm1zIGJlbG93IHBpblxuK1x0ICovXG4rXHRTWVMoZmFpbCwgXCJpcCBsaW5rIHNldCBkZXYgJXMgbXR1IDE0MDBcIiwgVkxBTl9JRkFDRSk7XG4rXHRTWVMoZmFpbCwgXCJpcCBhZGRyIGFkZCAlcy8yNCBkZXYgJXNcIiwgSVBWNF9WTEFOX0lGQUNFX0FERFIsIFZMQU5fSUZBQ0UpO1xuK1x0U1lTKGZhaWwsIFwiaXAgYWRkciBhZGQgJXMvNjQgZGV2ICVzIG5vZGFkXCIsIElQVjZfVkxBTl9JRkFDRV9BRERSLCBWTEFOX0lGQUNFKTtcbitcbitcdC8qXG4rXHQgKiBzdGF5cyBkb3duOiB0aGUgaW5wdXQgZmxhZyBtdXN0IHRyZWF0IGl0cyB0YWcgdGhlIHdheSByZWFsXG4rXHQgKiBpbmdyZXNzIHRyZWF0cyBhIGZyYW1lIGFycml2aW5nIG9uIGEgZG93biBWTEFOIGRldmljZSAoZHJvcClcbitcdCAqL1xuK1x0U1lTKGZhaWwsIFwiaXAgbGluayBhZGQgbGluayB2ZXRoMSBuYW1lICVzIHR5cGUgdmxhbiBpZCAlZFwiLFxuK1x0ICAgIFZMQU5fSUZBQ0VfRE9XTiwgVkxBTl9JRF9ET1dOKTtcbitcbitcdGVyciA9IHdyaXRlX3N5c2N0bChcIi9wcm9jL3N5cy9uZXQvaXB2NC9jb25mL1wiIFZMQU5fSUZBQ0UgXCIvZm9yd2FyZGluZ1wiLCBcIjFcIik7XG4rXHRpZiAoIUFTU0VSVF9PSyhlcnIsIFwid3JpdGVfc3lzY3RsKG5ldC5pcHY0LmNvbmYuXCIgVkxBTl9JRkFDRSBcIi5mb3J3YXJkaW5nKVwiKSlcbitcdFx0Z290byBmYWlsO1xuK1xuK1x0ZXJyID0gd3JpdGVfc3lzY3RsKFwiL3Byb2Mvc3lzL25ldC9pcHY2L2NvbmYvXCIgVkxBTl9JRkFDRSBcIi9mb3J3YXJkaW5nXCIsIFwiMVwiKTtcbitcdGlmICghQVNTRVJUX09LKGVyciwgXCJ3cml0ZV9zeXNjdGwobmV0LmlwdjYuY29uZi5cIiBWTEFOX0lGQUNFIFwiLmZvcndhcmRpbmcpXCIpKVxuK1x0XHRnb3RvIGZhaWw7XG4rXG4rXHRTWVMoZmFpbCwgXCJpcCBsaW5rIGFkZCBsaW5rIHZldGgxIG5hbWUgJXMgdHlwZSB2bGFuIHByb3RvIDgwMi4xYWQgaWQgMjAwXCIsXG4rXHQgICAgUUlOUV9PVVRFUl9JRkFDRSk7XG4rXHRTWVMoZmFpbCwgXCJpcCBsaW5rIGFkZCBsaW5rICVzIG5hbWUgJXMgdHlwZSB2bGFuIGlkIDMwMFwiLFxuK1x0ICAgIFFJTlFfT1VURVJfSUZBQ0UsIFFJTlFfSU5ORVJfSUZBQ0UpO1xuK1x0U1lTKGZhaWwsIFwiaXAgbGluayBzZXQgZGV2ICVzIHVwXCIsIFFJTlFfT1VURVJfSUZBQ0UpO1xuK1x0U1lTKGZhaWwsIFwiaXAgbGluayBzZXQgZGV2ICVzIHVwXCIsIFFJTlFfSU5ORVJfSUZBQ0UpO1xuK1x0U1lTKGZhaWwsIFwiaXAgcm91dGUgYWRkICVzLzMyIGRldiAlc1wiLCBJUFY0X1FJTlFfRFNULCBRSU5RX0lOTkVSX0lGQUNFKTtcbitcbitcdFNZUyhmYWlsLCBcImlwIHJvdXRlIGFkZCAlcy8zMiB2aWEgJXNcIiwgSVBWNF9WTEFOX0RTVCwgSVBWNF9HVzEpO1xuK1x0U1lTKGZhaWwsIFwiaXAgcm91dGUgYWRkIHRhYmxlICVzICVzLzMyIHZpYSAlc1wiLFxuK1x0ICAgIFZMQU5fVEFCTEUsIElQVjRfVkxBTl9EU1QsIElQVjRfVkxBTl9HVyk7XG4rXHRTWVMoZmFpbCwgXCJpcCBydWxlIGFkZCBwcmlvIDMgaWlmICVzIGxvb2t1cCAlc1wiLCBWTEFOX0lGQUNFLCBWTEFOX1RBQkxFKTtcbitcdFNZUyhmYWlsLCBcImlwIC02IHJvdXRlIGFkZCAlcy8xMjggdmlhICVzXCIsIElQVjZfVkxBTl9EU1QsIElQVjZfR1cxKTtcbitcdFNZUyhmYWlsLCBcImlwIC02IHJvdXRlIGFkZCB0YWJsZSAlcyAlcy8xMjggdmlhICVzXCIsXG4rXHQgICAgVkxBTl9UQUJMRSwgSVBWNl9WTEFOX0RTVCwgSVBWNl9WTEFOX0dXKTtcbitcdFNZUyhmYWlsLCBcImlwIC02IHJ1bGUgYWRkIHByaW8gMyBpaWYgJXMgbG9va3VwICVzXCIsIFZMQU5fSUZBQ0UsIFZMQU5fVEFCTEUpO1xuK1xuK1x0LypcbitcdCAqIGEgYm9uZCB3aXRoIG9uZSBwb3J0IGFuZCBhIFZMQU4gb24gdGhlIGJvbmQ6IFZMQU5zIG9uIGEgYm9uZFxuK1x0ICogbGl2ZSBvbiB0aGUgbWFzdGVyLCBzbyByZXNvbHV0aW9uIHN1Y2NlZWRzIGZvciB0aGUgbWFzdGVyJ3NcbitcdCAqIGlmaW5kZXggYW5kIGZhaWxzIGNsb3NlZCBmb3IgYSBwb3J0J3MsIG1hdGNoaW5nIHJlY2VpdmUsIHdoaWNoXG4rXHQgKiBzdGVlcnMgdGhlIGZyYW1lIHRvIHRoZSBtYXN0ZXIgYmVmb3JlIFZMQU4gcHJvY2Vzc2luZ1xuK1x0ICovXG4rXHRTWVMoZmFpbCwgXCJpcCBsaW5rIGFkZCAlcyB0eXBlIGJvbmRcIiwgQk9ORF9JRkFDRSk7XG4rXHRTWVMoZmFpbCwgXCJpcCBsaW5rIGFkZCAlcyB0eXBlIHZldGggcGVlciBuYW1lICVzXCIsIEJPTkRfUE9SVCwgQk9ORF9QT1JUX1BFRVIpO1xuK1x0U1lTKGZhaWwsIFwiaXAgbGluayBzZXQgJXMgbWFzdGVyICVzXCIsIEJPTkRfUE9SVCwgQk9ORF9JRkFDRSk7XG4rXHRTWVMoZmFpbCwgXCJpcCBsaW5rIHNldCBkZXYgJXMgdXBcIiwgQk9ORF9JRkFDRSk7XG4rXHRTWVMoZmFpbCwgXCJpcCBsaW5rIHNldCBkZXYgJXMgdXBcIiwgQk9ORF9QT1JUKTtcbitcdFNZUyhmYWlsLCBcImlwIGxpbmsgYWRkIGxpbmsgJXMgbmFtZSAlcy4lZCB0eXBlIHZsYW4gaWQgJWRcIixcbitcdCAgICBCT05EX0lGQUNFLCBCT05EX0lGQUNFLCBCT05EX1ZMQU5fSUQsIEJPTkRfVkxBTl9JRCk7XG4rXHRTWVMoZmFpbCwgXCJpcCBsaW5rIHNldCBkZXYgJXMuJWQgdXBcIiwgQk9ORF9JRkFDRSwgQk9ORF9WTEFOX0lEKTtcbitcdFNZUyhmYWlsLCBcImlwIHJvdXRlIGFkZCAlcy8zMiBkZXYgJXMuJWRcIixcbitcdCAgICBJUFY0X0JPTkRfVkxBTl9EU1QsIEJPTkRfSUZBQ0UsIEJPTkRfVkxBTl9JRCk7XG4rXG4rXHQvKlxuK1x0ICogYSBWUkYgd2l0aCBpdHMgb3duIGRlZGljYXRlZCBzdWJpbnRlcmZhY2UgKHRoZSBpaWYgcnVsZXMgYWJvdmVcbitcdCAqIG11c3Qgbm90IHNlZSBpdCksIGZvciB0aGUgdGFibGUtc2VsZWN0aW9uLWJ5LWluZ3Jlc3MgY2FzZXNcbitcdCAqL1xuK1x0U1lTKGZhaWwsIFwiaXAgbGluayBhZGQgJXMgdHlwZSB2cmYgdGFibGUgJXNcIiwgVlJGX0lGQUNFLCBWUkZfVEFCTEUpO1xuK1x0U1lTKGZhaWwsIFwiaXAgbGluayBzZXQgZGV2ICVzIHVwXCIsIFZSRl9JRkFDRSk7XG4rXHRTWVMoZmFpbCwgXCJpcCBsaW5rIGFkZCBsaW5rIHZldGgxIG5hbWUgJXMgdHlwZSB2bGFuIGlkICVkXCIsXG4rXHQgICAgVlJGX1ZMQU5fSUZBQ0UsIFZSRl9WTEFOX0lEKTtcbitcdFNZUyhmYWlsLCBcImlwIGxpbmsgc2V0ICVzIG1hc3RlciAlc1wiLCBWUkZfVkxBTl9JRkFDRSwgVlJGX0lGQUNFKTtcbitcdFNZUyhmYWlsLCBcImlwIGxpbmsgc2V0IGRldiAlcyB1cFwiLCBWUkZfVkxBTl9JRkFDRSk7XG4rXHRTWVMoZmFpbCwgXCJpcCBhZGRyIGFkZCAlcy8yNCBkZXYgJXNcIiwgSVBWNF9WUkZfSUZBQ0VfQUREUiwgVlJGX1ZMQU5fSUZBQ0UpO1xuK1x0ZXJyID0gd3JpdGVfc3lzY3RsKFwiL3Byb2Mvc3lzL25ldC9pcHY0L2NvbmYvXCIgVlJGX1ZMQU5fSUZBQ0UgXCIvZm9yd2FyZGluZ1wiLCBcIjFcIik7XG4rXHRpZiAoIUFTU0VSVF9PSyhlcnIsIFwid3JpdGVfc3lzY3RsKG5ldC5pcHY0LmNvbmYuXCIgVlJGX1ZMQU5fSUZBQ0UgXCIuZm9yd2FyZGluZylcIikpXG4rXHRcdGdvdG8gZmFpbDtcbitcdFNZUyhmYWlsLCBcImlwIHJvdXRlIGFkZCAlcy8zMiB2aWEgJXNcIiwgSVBWNF9WUkZfRFNULCBJUFY0X0dXMSk7XG4rXHRTWVMoZmFpbCwgXCJpcCByb3V0ZSBhZGQgdGFibGUgJXMgJXMvMzIgdmlhICVzXCIsXG4rXHQgICAgVlJGX1RBQkxFLCBJUFY0X1ZSRl9EU1QsIElQVjRfVlJGX0dXKTtcbitcbitcdC8qIG5laWdoYm91cnMgb24gdGhlIFZMQU4gc3ViaW50ZXJmYWNlIGZvciB0aGUgbm9uLVNLSVBfTkVJR0ggY2FzZXMgKi9cbitcdGVyciA9IHdyaXRlX3N5c2N0bChcIi9wcm9jL3N5cy9uZXQvaXB2NC9uZWlnaC9cIiBWTEFOX0lGQUNFIFwiL2djX3N0YWxlX3RpbWVcIiwgXCI5MDBcIik7XG4rXHRpZiAoIUFTU0VSVF9PSyhlcnIsIFwid3JpdGVfc3lzY3RsKG5ldC5pcHY0Lm5laWdoLlwiIFZMQU5fSUZBQ0UgXCIuZ2Nfc3RhbGVfdGltZSlcIikpXG4rXHRcdGdvdG8gZmFpbDtcbitcdFNZUyhmYWlsLCBcImlwIG5laWdoIGFkZCAlcyBkZXYgJXMgbGxhZGRyICVzIG51ZCBzdGFsZVwiLFxuK1x0ICAgIElQVjRfVkxBTl9FR1JFU1NfRFNULCBWTEFOX0lGQUNFLCBETUFDKTtcbitcdFNZUyhmYWlsLCBcImlwIG5laWdoIGFkZCAlcyBkZXYgJXMgbGxhZGRyICVzIG51ZCBzdGFsZVwiLFxuK1x0ICAgIElQVjRfVkxBTl9HVywgVkxBTl9JRkFDRSwgRE1BQzIpO1xuK1xuK1x0LyogYSBWTEFOIG9uIHZldGgyIHdpdGggYSByb3V0ZSBpbiB0aGUgdGJpZCB0ZXN0IHRhYmxlICovXG4rXHRTWVMoZmFpbCwgXCJpcCBsaW5rIGFkZCBsaW5rIHZldGgyIG5hbWUgJXMgdHlwZSB2bGFuIGlkICVkXCIsXG4rXHQgICAgVEJJRF9WTEFOX0lGQUNFLCBUQklEX1ZMQU5fSUQpO1xuK1x0U1lTKGZhaWwsIFwiaXAgbGluayBzZXQgZGV2ICVzIHVwXCIsIFRCSURfVkxBTl9JRkFDRSk7XG4rXHRTWVMoZmFpbCwgXCJpcCByb3V0ZSBhZGQgdGFibGUgMTAwICVzLzMyIGRldiAlc1wiLFxuK1x0ICAgIElQVjRfVEJJRF9WTEFOX0RTVCwgVEJJRF9WTEFOX0lGQUNFKTtcbitcbitcdC8qIGEgbG9ja2VkLW10dSByb3V0ZSB2aWEgdGhlIHN1YmludGVyZmFjZSBmb3IgdGhlIEZSQUdfTkVFREVEIGNhc2UgKi9cbitcdFNZUyhmYWlsLCBcImlwIHJvdXRlIGFkZCAlcy8zMiBkZXYgJXMgbXR1IGxvY2sgMTAwMFwiLFxuK1x0ICAgIElQVjRfVkxBTl9NVFVfRFNULCBWTEFOX0lGQUNFKTtcbitcbiBcdHJldHVybiAwO1xuIGZhaWw6XG4gXHRyZXR1cm4gLTE7XG5AQCAtMjE4LDkgKzU5MywxNiBAQCBzdGF0aWMgaW50IHNldF9sb29rdXBfcGFyYW1zKHN0cnVjdCBicGZfZmliX2xvb2t1cCAqcGFyYW1zLFxuIFx0bWVtc2V0KHBhcmFtcywgMCwgc2l6ZW9mKCpwYXJhbXMpKTtcbiBcbiBcdHBhcmFtcy1cdTAwM2VsNF9wcm90b2NvbCA9IElQUFJPVE9fVENQO1xuLVx0cGFyYW1zLVx1MDAzZWlmaW5kZXggPSBpZmluZGV4O1xuK1x0cGFyYW1zLVx1MDAzZWlmaW5kZXggPSB0ZXN0LVx1MDAzZWlpZiA/IGlmX25hbWV0b2luZGV4KHRlc3QtXHUwMDNlaWlmKSA6IGlmaW5kZXg7XG4gXHRwYXJhbXMtXHUwMDNldGJpZCA9IHRlc3QtXHUwMDNldGJpZDtcbiBcdHBhcmFtcy1cdTAwM2VtYXJrID0gdGVzdC1cdTAwM2VtYXJrO1xuK1x0cGFyYW1zLVx1MDAzZXRvdF9sZW4gPSB0ZXN0LVx1MDAzZXRvdF9sZW47XG4rXG4rXHQvKiBoX3ZsYW5fcHJvdG8vaF92bGFuX1RDSSB1bmlvbiB3aXRoIHRiaWQgKi9cbitcdGlmICh0ZXN0LVx1MDAzZWxvb2t1cF9mbGFncyBcdTAwMjYgQlBGX0ZJQl9MT09LVVBfVkxBTl9JTlBVVCkge1xuK1x0XHRwYXJhbXMtXHUwMDNlaF92bGFuX3Byb3RvID0gaHRvbnModGVzdC1cdTAwM2V2bGFuX3Byb3RvKTtcbitcdFx0cGFyYW1zLVx1MDAzZWhfdmxhbl9UQ0kgPSBodG9ucyh0ZXN0LVx1MDAzZXZsYW5faWQpO1xuK1x0fVxuIFxuIFx0aWYgKGluZXRfcHRvbihBRl9JTkVUNiwgdGVzdC1cdTAwM2VkYWRkciwgcGFyYW1zLVx1MDAzZWlwdjZfZHN0KSA9PSAxKSB7XG4gXHRcdHBhcmFtcy1cdTAwM2VmYW1pbHkgPSBBRl9JTkVUNjtcbkBAIC0yOTgsNyArNjgwLDcgQEAgdm9pZCB0ZXN0X2ZpYl9sb29rdXAodm9pZClcbiBcdHN0cnVjdCBuc3Rva2VuICpuc3Rva2VuID0gTlVMTDtcbiBcdHN0cnVjdCBfX3NrX2J1ZmYgc2tiID0geyB9O1xuIFx0c3RydWN0IGZpYl9sb29rdXAgKnNrZWw7XG4tXHRpbnQgcHJvZ19mZCwgZXJyLCByZXQsIGk7XG4rXHRpbnQgcHJvZ19mZCwgeGRwX2ZkLCBlcnIsIHJldCwgaTtcbiBcbiBcdC8qIFRoZSB0ZXN0IGRvZXMgbm90IHVzZSB0aGUgc2tiLVx1MDAzZWRhdGEsIHNvXG4gXHQgKiB1c2UgcGt0X3Y2IGZvciBib3RoIHY2IGFuZCB2NCB0ZXN0LlxuQEAgLTMwOSwxMSArNjkxLDE2IEBAIHZvaWQgdGVzdF9maWJfbG9va3VwKHZvaWQpXG4gXHRcdCAgICAuY3R4X2luID0gXHUwMDI2c2tiLFxuIFx0XHQgICAgLmN0eF9zaXplX2luID0gc2l6ZW9mKHNrYiksXG4gXHQpO1xuK1x0TElCQlBGX09QVFMoYnBmX3Rlc3RfcnVuX29wdHMsIHhkcF9vcHRzLFxuK1x0XHQgICAgLmRhdGFfaW4gPSBcdTAwMjZwa3RfdjYsXG4rXHRcdCAgICAuZGF0YV9zaXplX2luID0gc2l6ZW9mKHBrdF92NiksXG4rXHQpO1xuIFxuIFx0c2tlbCA9IGZpYl9sb29rdXBfX29wZW5fYW5kX2xvYWQoKTtcbiBcdGlmICghQVNTRVJUX09LX1BUUihza2VsLCBcInNrZWwgb3Blbl9hbmRfbG9hZFwiKSlcbiBcdFx0cmV0dXJuO1xuIFx0cHJvZ19mZCA9IGJwZl9wcm9ncmFtX19mZChza2VsLVx1MDAzZXByb2dzLmZpYl9sb29rdXApO1xuK1x0eGRwX2ZkID0gYnBmX3Byb2dyYW1fX2ZkKHNrZWwtXHUwMDNlcHJvZ3MuZmliX2xvb2t1cF94ZHApO1xuIFxuIFx0U1lTKGZhaWwsIFwiaXAgbmV0bnMgYWRkICVzXCIsIE5TX1RFU1QpO1xuIFxuQEAgLTM0Myw2ICs3MzAsMTUgQEAgdm9pZCB0ZXN0X2ZpYl9sb29rdXAodm9pZClcbiBcdFx0aWYgKCFBU1NFUlRfT0soZXJyLCBcImJwZl9wcm9nX3Rlc3RfcnVuX29wdHNcIikpXG4gXHRcdFx0Y29udGludWU7XG4gXG4rXHRcdC8qIEJQRl9GSUJfTE9PS1VQX1ZMQU4gaXMgWERQLW9ubHk7IHRoZSB0YyBoZWxwZXIgcmVqZWN0cyBpdC5cbitcdFx0ICogVGhlc2UgY2FzZXMgYXJlIGV4ZXJjaXNlZCBvbiB0aGUgWERQIHBhdGggYmVsb3cuXG4rXHRcdCAqL1xuK1x0XHRpZiAodGVzdHNbaV0ubG9va3VwX2ZsYWdzIFx1MDAyNiBCUEZfRklCX0xPT0tVUF9WTEFOKSB7XG4rXHRcdFx0QVNTRVJUX0VRKHNrZWwtXHUwMDNlYnNzLVx1MDAzZWZpYl9sb29rdXBfcmV0LCAtRUlOVkFMLFxuK1x0XHRcdFx0ICBcInRjIHJlamVjdHMgQlBGX0ZJQl9MT09LVVBfVkxBTlwiKTtcbitcdFx0XHRjb250aW51ZTtcbitcdFx0fVxuK1xuIFx0XHRBU1NFUlRfRVEoc2tlbC1cdTAwM2Vic3MtXHUwMDNlZmliX2xvb2t1cF9yZXQsIHRlc3RzW2ldLmV4cGVjdGVkX3JldCxcbiBcdFx0XHQgIFwiZmliX2xvb2t1cF9yZXRcIik7XG4gXG5AQCAtMzUyLDYgKzc0OCwyMSBAQCB2b2lkIHRlc3RfZmliX2xvb2t1cCh2b2lkKVxuIFx0XHRpZiAodGVzdHNbaV0uZXhwZWN0ZWRfZHN0KVxuIFx0XHRcdGFzc2VydF9kc3RfaXAoZmliX3BhcmFtcywgdGVzdHNbaV0uZXhwZWN0ZWRfZHN0KTtcbiBcbitcdFx0aWYgKHRlc3RzW2ldLmV4cGVjdGVkX2RldilcbitcdFx0XHRBU1NFUlRfRVEoZmliX3BhcmFtcy1cdTAwM2VpZmluZGV4LFxuK1x0XHRcdFx0ICBpZl9uYW1ldG9pbmRleCh0ZXN0c1tpXS5leHBlY3RlZF9kZXYpLCBcImlmaW5kZXhcIik7XG4rXG4rXHRcdGlmICh0ZXN0c1tpXS5leHBlY3RlZF9tdHUpXG4rXHRcdFx0QVNTRVJUX0VRKGZpYl9wYXJhbXMtXHUwMDNlbXR1X3Jlc3VsdCwgdGVzdHNbaV0uZXhwZWN0ZWRfbXR1LFxuK1x0XHRcdFx0ICBcIm10dV9yZXN1bHRcIik7XG4rXG4rXHRcdGlmICh0ZXN0c1tpXS5jaGVja192bGFuKSB7XG4rXHRcdFx0QVNTRVJUX0VRKGZpYl9wYXJhbXMtXHUwMDNlaF92bGFuX3Byb3RvLFxuK1x0XHRcdFx0ICBodG9ucyh0ZXN0c1tpXS52bGFuX3Byb3RvKSwgXCJoX3ZsYW5fcHJvdG9cIik7XG4rXHRcdFx0QVNTRVJUX0VRKGZpYl9wYXJhbXMtXHUwMDNlaF92bGFuX1RDSSxcbitcdFx0XHRcdCAgaHRvbnModGVzdHNbaV0udmxhbl9pZCksIFwiaF92bGFuX1RDSVwiKTtcbitcdFx0fVxuK1xuIFx0XHRyZXQgPSBtZW1jbXAodGVzdHNbaV0uZG1hYywgZmliX3BhcmFtcy1cdTAwM2VkbWFjLCBzaXplb2YodGVzdHNbaV0uZG1hYykpO1xuIFx0XHRpZiAoIUFTU0VSVF9FUShyZXQsIDAsIFwiZG1hYyBub3QgbWF0Y2hcIikpIHtcbiBcdFx0XHRjaGFyIGV4cGVjdGVkWzE4XSwgYWN0dWFsWzE4XTtcbkBAIC0zNjEsMTUgKzc3MiwzMTMgQEAgdm9pZCB0ZXN0X2ZpYl9sb29rdXAodm9pZClcbiBcdFx0XHRwcmludGYoXCJkbWFjIGV4cGVjdGVkICVzIGFjdHVhbCAlcyBcIiwgZXhwZWN0ZWQsIGFjdHVhbCk7XG4gXHRcdH1cbiBcbi1cdFx0Ly8gZW5zdXJlIHRiaWQgaXMgemVybydkIG91dCBhZnRlciBmaWIgbG9va3VwLlxuLVx0XHRpZiAodGVzdHNbaV0ubG9va3VwX2ZsYWdzIFx1MDAyNiBCUEZfRklCX0xPT0tVUF9ESVJFQ1QpIHtcbitcdFx0LypcbitcdFx0ICogZW5zdXJlIHRiaWQgaXMgemVybydkIG91dCBhZnRlciBmaWIgbG9va3VwLiBXaXRoXG4rXHRcdCAqIEJQRl9GSUJfTE9PS1VQX1ZMQU4gdGhlIHVuaW9uIGhvbGRzIHRoZSBwYWNrZWQgdmxhblxuK1x0XHQgKiBmaWVsZHMgaW5zdGVhZCwgc28gc2tpcCB0aGUgY2hlY2sgZm9yIHRob3NlLlxuK1x0XHQgKi9cbitcdFx0aWYgKCh0ZXN0c1tpXS5sb29rdXBfZmxhZ3MgXHUwMDI2IEJQRl9GSUJfTE9PS1VQX0RJUkVDVCkgXHUwMDI2XHUwMDI2XG4rXHRcdCAgICAhKHRlc3RzW2ldLmxvb2t1cF9mbGFncyBcdTAwMjYgQlBGX0ZJQl9MT09LVVBfVkxBTikpIHtcbiBcdFx0XHRpZiAoIUFTU0VSVF9FUShza2VsLVx1MDAzZWJzcy1cdTAwM2VmaWJfcGFyYW1zLnRiaWQsIDAsXG4gXHRcdFx0XHRcdFwiZXhwZWN0ZWQgZmliX3BhcmFtcy50YmlkIHRvIGJlIHplcm9cIikpXG4gXHRcdFx0XHRnb3RvIGZhaWw7XG4gXHRcdH1cbiBcdH1cbiBcbitcdC8qXG4rXHQgKiBSZS1ydW4gdGhlIGNhc2VzIHRocm91Z2ggYnBmX3hkcF9maWJfbG9va3VwKCkuIHRlc3RfcnVuIHVzZXMgdGhlXG4rXHQgKiBjdXJyZW50IG5ldG5zJyBsb29wYmFjayBmb3IgY3R4LVx1MDAzZXJ4cS1cdTAwM2VkZXYsIHNvIGRldl9uZXQoKSBpcyBOU19URVNUXG4rXHQgKiBhbmQgdGhlIGxvb2t1cCBydW5zIGFnYWluc3QgaXRzIEZJQi4gVGhlIHBhdGgtaW5kZXBlbmRlbnQgcmVzdWx0c1xuK1x0ICogKHJldHVybiBjb2RlLCBzd2FwcGVkIGlmaW5kZXgsIHZsYW4gdGFnLCBnYXRld2F5KSBtdXN0IG1hdGNoIHRoZSBza2JcbitcdCAqIHBhdGg7IHRoZSBuby10b3RfbGVuIG10dV9yZXN1bHQgaXMgc2tiLXNwZWNpZmljIGFuZCBub3QgcmVjaGVja2VkLlxuK1x0ICovXG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBBUlJBWV9TSVpFKHRlc3RzKTsgaSsrKSB7XG4rXHRcdGlmIChzZXRfbG9va3VwX3BhcmFtcyhmaWJfcGFyYW1zLCBcdTAwMjZ0ZXN0c1tpXSwgc2tiLmlmaW5kZXgpKVxuK1x0XHRcdGNvbnRpbnVlO1xuK1xuK1x0XHRza2VsLVx1MDAzZWJzcy1cdTAwM2VmaWJfbG9va3VwX3JldCA9IC0xO1xuK1x0XHRza2VsLVx1MDAzZWJzcy1cdTAwM2Vsb29rdXBfZmxhZ3MgPSB0ZXN0c1tpXS5sb29rdXBfZmxhZ3M7XG4rXG4rXHRcdGVyciA9IGJwZl9wcm9nX3Rlc3RfcnVuX29wdHMoeGRwX2ZkLCBcdTAwMjZ4ZHBfb3B0cyk7XG4rXHRcdGlmICghQVNTRVJUX09LKGVyciwgXCJ4ZHAgdGVzdF9ydW5cIikpXG4rXHRcdFx0Y29udGludWU7XG4rXG4rXHRcdGlmICghQVNTRVJUX0VRKHNrZWwtXHUwMDNlYnNzLVx1MDAzZWZpYl9sb29rdXBfcmV0LCB0ZXN0c1tpXS5leHBlY3RlZF9yZXQsXG4rXHRcdFx0ICAgICAgIFwieGRwIGZpYl9sb29rdXBfcmV0XCIpKVxuK1x0XHRcdHByaW50ZihcIih4ZHApICVzXFxuXCIsIHRlc3RzW2ldLmRlc2MpO1xuK1xuK1x0XHRpZiAodGVzdHNbaV0uZXhwZWN0ZWRfZGV2KVxuK1x0XHRcdEFTU0VSVF9FUShmaWJfcGFyYW1zLVx1MDAzZWlmaW5kZXgsXG4rXHRcdFx0XHQgIGlmX25hbWV0b2luZGV4KHRlc3RzW2ldLmV4cGVjdGVkX2RldiksXG4rXHRcdFx0XHQgIFwieGRwIGlmaW5kZXhcIik7XG4rXG4rXHRcdGlmICh0ZXN0c1tpXS5leHBlY3RlZF9kc3QpXG4rXHRcdFx0YXNzZXJ0X2RzdF9pcChmaWJfcGFyYW1zLCB0ZXN0c1tpXS5leHBlY3RlZF9kc3QpO1xuK1xuK1x0XHRpZiAodGVzdHNbaV0uY2hlY2tfdmxhbikge1xuK1x0XHRcdEFTU0VSVF9FUShmaWJfcGFyYW1zLVx1MDAzZWhfdmxhbl9wcm90byxcbitcdFx0XHRcdCAgaHRvbnModGVzdHNbaV0udmxhbl9wcm90byksIFwieGRwIGhfdmxhbl9wcm90b1wiKTtcbitcdFx0XHRBU1NFUlRfRVEoZmliX3BhcmFtcy1cdTAwM2VoX3ZsYW5fVENJLFxuK1x0XHRcdFx0ICBodG9ucyh0ZXN0c1tpXS52bGFuX2lkKSwgXCJ4ZHAgaF92bGFuX1RDSVwiKTtcbitcdFx0fVxuK1xuK1x0XHRyZXQgPSBtZW1jbXAodGVzdHNbaV0uZG1hYywgZmliX3BhcmFtcy1cdTAwM2VkbWFjLCBzaXplb2YodGVzdHNbaV0uZG1hYykpO1xuK1x0XHRBU1NFUlRfRVEocmV0LCAwLCBcInhkcCBkbWFjXCIpO1xuK1xuK1x0XHQvKlxuK1x0XHQgKiBtdHVfcmVzdWx0IGZyb20gYSB0b3RfbGVuIGxvb2t1cCBpcyB0aGUgcm91dGUgbXR1IGFuZCBpc1xuK1x0XHQgKiBwYXRoLWluZGVwZW5kZW50OyB0aGUgbm8tdG90X2xlbiBhcm0gcmVhZHMgZGV2LVx1MDAzZW10dSBhbmQgaXNcbitcdFx0ICogc2tiLW9ubHksIHNvIGdhdGUgb24gdG90X2xlblxuK1x0XHQgKi9cbitcdFx0aWYgKHRlc3RzW2ldLmV4cGVjdGVkX210dSBcdTAwMjZcdTAwMjYgdGVzdHNbaV0udG90X2xlbilcbitcdFx0XHRBU1NFUlRfRVEoZmliX3BhcmFtcy1cdTAwM2VtdHVfcmVzdWx0LCB0ZXN0c1tpXS5leHBlY3RlZF9tdHUsXG4rXHRcdFx0XHQgIFwieGRwIG10dV9yZXN1bHRcIik7XG4rXHR9XG4rXG4rZmFpbDpcbitcdGlmIChuc3Rva2VuKVxuK1x0XHRjbG9zZV9uZXRucyhuc3Rva2VuKTtcbitcdFNZU19OT0ZBSUwoXCJpcCBuZXRucyBkZWwgXCIgTlNfVEVTVCk7XG4rXHRmaWJfbG9va3VwX19kZXN0cm95KHNrZWwpO1xuK31cbitcbisjZGVmaW5lIE5TX1ZMQU5fQVx0XCJmaWJfbG9va3VwX3ZsYW5fbnNfYVwiXG4rI2RlZmluZSBOU19WTEFOX0JcdFwiZmliX2xvb2t1cF92bGFuX25zX2JcIlxuK1xuKy8qXG4rICogQSBWTEFOIGRldmljZSBjYW4gYmUgbW92ZWQgdG8gYW5vdGhlciBuZXRucyB3aGlsZSBzdGF5aW5nIHJlZ2lzdGVyZWRcbisgKiBvbiBpdHMgcGFyZW50LiBOZWl0aGVyIGRpcmVjdGlvbiBtYXkgdGhlbiBjcm9zcyB0aGUgYm91bmRhcnk6IHRoZVxuKyAqIGVncmVzcyBmbGFnIG11c3Qgbm90IHB1Ymxpc2ggdGhlIGZvcmVpZ24gcGFyZW50J3MgaWZpbmRleCwgYW5kIHRoZVxuKyAqIGlucHV0IGZsYWcgbXVzdCBmYWlsIGNsb3NlZCByYXRoZXIgdGhhbiB1c2UgYSBmb3JlaWduIGluZ3Jlc3MuXG4rICovXG4rdm9pZCB0ZXN0X2ZpYl9sb29rdXBfdmxhbl9uZXRucyh2b2lkKVxuK3tcbitcdHN0cnVjdCBicGZfZmliX2xvb2t1cCAqZmliX3BhcmFtcztcbitcdHN0cnVjdCBuc3Rva2VuICpuc3Rva2VuID0gTlVMTDtcbitcdHN0cnVjdCBfX3NrX2J1ZmYgc2tiID0geyB9O1xuK1x0c3RydWN0IGZpYl9sb29rdXAgKnNrZWwgPSBOVUxMO1xuK1x0aW50IHByb2dfZmQsIHhkcF9mZCwgZXJyLCBwYXJlbnRfaWR4LCB2bGFuX2lkeDtcbitcbitcdExJQkJQRl9PUFRTKGJwZl90ZXN0X3J1bl9vcHRzLCBydW5fb3B0cyxcbitcdFx0ICAgIC5kYXRhX2luID0gXHUwMDI2cGt0X3Y2LFxuK1x0XHQgICAgLmRhdGFfc2l6ZV9pbiA9IHNpemVvZihwa3RfdjYpLFxuK1x0XHQgICAgLmN0eF9pbiA9IFx1MDAyNnNrYixcbitcdFx0ICAgIC5jdHhfc2l6ZV9pbiA9IHNpemVvZihza2IpLFxuK1x0KTtcbitcdExJQkJQRl9PUFRTKGJwZl90ZXN0X3J1bl9vcHRzLCB4ZHBfb3B0cyxcbitcdFx0ICAgIC5kYXRhX2luID0gXHUwMDI2cGt0X3Y2LFxuK1x0XHQgICAgLmRhdGFfc2l6ZV9pbiA9IHNpemVvZihwa3RfdjYpLFxuK1x0KTtcbitcbitcdHNrZWwgPSBmaWJfbG9va3VwX19vcGVuX2FuZF9sb2FkKCk7XG4rXHRpZiAoIUFTU0VSVF9PS19QVFIoc2tlbCwgXCJza2VsIG9wZW5fYW5kX2xvYWRcIikpXG4rXHRcdHJldHVybjtcbitcdHByb2dfZmQgPSBicGZfcHJvZ3JhbV9fZmQoc2tlbC1cdTAwM2Vwcm9ncy5maWJfbG9va3VwKTtcbitcdHhkcF9mZCA9IGJwZl9wcm9ncmFtX19mZChza2VsLVx1MDAzZXByb2dzLmZpYl9sb29rdXBfeGRwKTtcbitcdGZpYl9wYXJhbXMgPSBcdTAwMjZza2VsLVx1MDAzZWJzcy1cdTAwM2VmaWJfcGFyYW1zO1xuK1xuK1x0U1lTKGZhaWwsIFwiaXAgbmV0bnMgYWRkICVzXCIsIE5TX1ZMQU5fQSk7XG4rXHRTWVMoZmFpbCwgXCJpcCBuZXRucyBhZGQgJXNcIiwgTlNfVkxBTl9CKTtcbitcbitcdG5zdG9rZW4gPSBvcGVuX25ldG5zKE5TX1ZMQU5fQSk7XG4rXHRpZiAoIUFTU0VSVF9PS19QVFIobnN0b2tlbiwgXCJvcGVuX25ldG5zKGEpXCIpKVxuK1x0XHRnb3RvIGZhaWw7XG4rXG4rXHRTWVMoZmFpbCwgXCJpcCBsaW5rIGFkZCB2ZXRoNyB0eXBlIHZldGggcGVlciBuYW1lIHZldGg4XCIpO1xuK1x0U1lTKGZhaWwsIFwiaXAgbGluayBzZXQgZGV2IHZldGg3IHVwXCIpO1xuK1x0U1lTKGZhaWwsIFwiaXAgbGluayBhZGQgbGluayB2ZXRoNyBuYW1lIHZldGg3LjY2IHR5cGUgdmxhbiBpZCA2NlwiKTtcbitcdFNZUyhmYWlsLCBcImlwIGxpbmsgc2V0IHZldGg3LjY2IG5ldG5zICVzXCIsIE5TX1ZMQU5fQik7XG4rXG4rXHRwYXJlbnRfaWR4ID0gaWZfbmFtZXRvaW5kZXgoXCJ2ZXRoN1wiKTtcbitcdGlmICghQVNTRVJUX05FUShwYXJlbnRfaWR4LCAwLCBcImlmX25hbWV0b2luZGV4KHZldGg3KVwiKSlcbitcdFx0Z290byBmYWlsO1xuK1xuK1x0LypcbitcdCAqIGlucHV0OiB0aGUgbW92ZWQgZGV2aWNlIGlzIHN0aWxsIGluIHZldGg3J3MgVkxBTiBncm91cCwgYnV0IGl0XG4rXHQgKiBsaXZlcyBpbiBhbm90aGVyIG5ldG5zLCBzbyB0aGUgbG9va3VwIG11c3QgZmFpbCBjbG9zZWRcbitcdCAqL1xuK1x0c2tiLmlmaW5kZXggPSBwYXJlbnRfaWR4O1xuK1x0bWVtc2V0KGZpYl9wYXJhbXMsIDAsIHNpemVvZigqZmliX3BhcmFtcykpO1xuK1x0ZmliX3BhcmFtcy1cdTAwM2VmYW1pbHkgPSBBRl9JTkVUO1xuK1x0ZmliX3BhcmFtcy1cdTAwM2VsNF9wcm90b2NvbCA9IElQUFJPVE9fVENQO1xuK1x0ZmliX3BhcmFtcy1cdTAwM2VpZmluZGV4ID0gcGFyZW50X2lkeDtcbitcdGZpYl9wYXJhbXMtXHUwMDNlaF92bGFuX3Byb3RvID0gaHRvbnMoRVRIX1BfODAyMVEpO1xuK1x0ZmliX3BhcmFtcy1cdTAwM2VoX3ZsYW5fVENJID0gaHRvbnMoNjYpO1xuK1x0aWYgKCFBU1NFUlRfRVEoaW5ldF9wdG9uKEFGX0lORVQsIFwiMTAuNjYuMC4yXCIsIFx1MDAyNmZpYl9wYXJhbXMtXHUwMDNlaXB2NF9kc3QpLFxuK1x0XHQgICAgICAgMSwgXCJpbmV0X3B0b24oZHN0KVwiKSlcbitcdFx0Z290byBmYWlsO1xuK1xuK1x0c2tlbC1cdTAwM2Vic3MtXHUwMDNlZmliX2xvb2t1cF9yZXQgPSAtMTtcbitcdHNrZWwtXHUwMDNlYnNzLVx1MDAzZWxvb2t1cF9mbGFncyA9IEJQRl9GSUJfTE9PS1VQX1ZMQU5fSU5QVVQgfFxuK1x0XHRcdFx0ICBCUEZfRklCX0xPT0tVUF9TS0lQX05FSUdIO1xuK1x0ZXJyID0gYnBmX3Byb2dfdGVzdF9ydW5fb3B0cyhwcm9nX2ZkLCBcdTAwMjZydW5fb3B0cyk7XG4rXHRpZiAoIUFTU0VSVF9PSyhlcnIsIFwidGVzdF9ydW4oaW5wdXQpXCIpKVxuK1x0XHRnb3RvIGZhaWw7XG4rXHRBU1NFUlRfRVEoc2tlbC1cdTAwM2Vic3MtXHUwMDNlZmliX2xvb2t1cF9yZXQsIEJQRl9GSUJfTEtVUF9SRVRfTk9UX0ZXREVELFxuK1x0XHQgIFwiaW5wdXQgYWNyb3NzIG5ldG5zIGZhaWxzIGNsb3NlZFwiKTtcbitcdEFTU0VSVF9FUShmaWJfcGFyYW1zLVx1MDAzZWlmaW5kZXgsIHBhcmVudF9pZHgsIFwiaWZpbmRleCB1bnRvdWNoZWRcIik7XG4rXHRBU1NFUlRfRVEoZmliX3BhcmFtcy1cdTAwM2VoX3ZsYW5fVENJLCBodG9ucyg2NiksIFwidGFnIHVudG91Y2hlZFwiKTtcbitcbitcdGNsb3NlX25ldG5zKG5zdG9rZW4pO1xuK1x0bnN0b2tlbiA9IG9wZW5fbmV0bnMoTlNfVkxBTl9CKTtcbitcdGlmICghQVNTRVJUX09LX1BUUihuc3Rva2VuLCBcIm9wZW5fbmV0bnMoYilcIikpXG4rXHRcdGdvdG8gZmFpbDtcbitcbitcdC8qXG4rXHQgKiBlZ3Jlc3M6IHRoZSBmaWIgcmVzdWx0IGlzIHRoZSBWTEFOIGRldmljZSBoZXJlLCBidXQgaXRzIHBhcmVudFxuK1x0ICogaXMgaW4gdGhlIG90aGVyIG5ldG5zLCBzbyB0aGUgc3dhcCBtdXN0IG5vdCBoYXBwZW5cbitcdCAqL1xuK1x0U1lTKGZhaWwsIFwiaXAgbGluayBzZXQgZGV2IHZldGg3LjY2IHVwXCIpO1xuK1x0U1lTKGZhaWwsIFwiaXAgYWRkciBhZGQgMTAuNjYuMC4xLzI0IGRldiB2ZXRoNy42NlwiKTtcbitcdGVyciA9IHdyaXRlX3N5c2N0bChcIi9wcm9jL3N5cy9uZXQvaXB2NC9jb25mL3ZldGg3LjY2L2ZvcndhcmRpbmdcIiwgXCIxXCIpO1xuK1x0aWYgKCFBU1NFUlRfT0soZXJyLCBcIndyaXRlX3N5c2N0bChmb3J3YXJkaW5nKVwiKSlcbitcdFx0Z290byBmYWlsO1xuK1xuK1x0dmxhbl9pZHggPSBpZl9uYW1ldG9pbmRleChcInZldGg3LjY2XCIpO1xuK1x0aWYgKCFBU1NFUlRfTkVRKHZsYW5faWR4LCAwLCBcImlmX25hbWV0b2luZGV4KHZldGg3LjY2KVwiKSlcbitcdFx0Z290byBmYWlsO1xuK1xuK1x0c2tiLmlmaW5kZXggPSB2bGFuX2lkeDtcbitcdG1lbXNldChmaWJfcGFyYW1zLCAwLCBzaXplb2YoKmZpYl9wYXJhbXMpKTtcbitcdGZpYl9wYXJhbXMtXHUwMDNlZmFtaWx5ID0gQUZfSU5FVDtcbitcdGZpYl9wYXJhbXMtXHUwMDNlbDRfcHJvdG9jb2wgPSBJUFBST1RPX1RDUDtcbitcdGZpYl9wYXJhbXMtXHUwMDNlaWZpbmRleCA9IHZsYW5faWR4O1xuK1x0aWYgKCFBU1NFUlRfRVEoaW5ldF9wdG9uKEFGX0lORVQsIFwiMTAuNjYuMC4yXCIsIFx1MDAyNmZpYl9wYXJhbXMtXHUwMDNlaXB2NF9kc3QpLFxuK1x0XHQgICAgICAgMSwgXCJpbmV0X3B0b24oZHN0KVwiKSB8fFxuK1x0ICAgICFBU1NFUlRfRVEoaW5ldF9wdG9uKEFGX0lORVQsIFwiMTAuNjYuMC4xXCIsIFx1MDAyNmZpYl9wYXJhbXMtXHUwMDNlaXB2NF9zcmMpLFxuK1x0XHQgICAgICAgMSwgXCJpbmV0X3B0b24oc3JjKVwiKSlcbitcdFx0Z290byBmYWlsO1xuK1xuK1x0c2tlbC1cdTAwM2Vic3MtXHUwMDNlZmliX2xvb2t1cF9yZXQgPSAtMTtcbitcdHNrZWwtXHUwMDNlYnNzLVx1MDAzZWxvb2t1cF9mbGFncyA9IEJQRl9GSUJfTE9PS1VQX1ZMQU4gfFxuK1x0XHRcdFx0ICBCUEZfRklCX0xPT0tVUF9TS0lQX05FSUdIO1xuK1x0ZXJyID0gYnBmX3Byb2dfdGVzdF9ydW5fb3B0cyh4ZHBfZmQsIFx1MDAyNnhkcF9vcHRzKTtcbitcdGlmICghQVNTRVJUX09LKGVyciwgXCJ0ZXN0X3J1bihlZ3Jlc3MpXCIpKVxuK1x0XHRnb3RvIGZhaWw7XG4rXHRBU1NFUlRfRVEoc2tlbC1cdTAwM2Vic3MtXHUwMDNlZmliX2xvb2t1cF9yZXQsIEJQRl9GSUJfTEtVUF9SRVRfVkxBTl9GQUlMVVJFLFxuK1x0XHQgIFwiZWdyZXNzIHJldHVybnMgVkxBTl9GQUlMVVJFXCIpO1xuK1x0QVNTRVJUX0VRKGZpYl9wYXJhbXMtXHUwMDNlaWZpbmRleCwgdmxhbl9pZHgsXG4rXHRcdCAgXCJmb3JlaWduIHBhcmVudCBub3QgcHVibGlzaGVkXCIpO1xuK1x0QVNTRVJUX0VRKGZpYl9wYXJhbXMtXHUwMDNlaF92bGFuX1RDSSwgMCwgXCJ2bGFuIGZpZWxkcyB6ZXJvXCIpO1xuK1xuK2ZhaWw6XG4rXHRpZiAobnN0b2tlbilcbitcdFx0Y2xvc2VfbmV0bnMobnN0b2tlbik7XG4rXHRTWVNfTk9GQUlMKFwiaXAgbmV0bnMgZGVsIFwiIE5TX1ZMQU5fQSk7XG4rXHRTWVNfTk9GQUlMKFwiaXAgbmV0bnMgZGVsIFwiIE5TX1ZMQU5fQik7XG4rXHRmaWJfbG9va3VwX19kZXN0cm95KHNrZWwpO1xuK31cbitcbisjZGVmaW5lIFJFRElSRUNUX05QS1RTIDEwMDBcbitcbisvKlxuKyAqIFRoZSBlZ3Jlc3MgZmxhZyBleGlzdHMgc28gYW4gWERQIHByb2dyYW0gY2FuIHJlZGlyZWN0IHRvIHRoZSBwaHlzaWNhbFxuKyAqIHBhcmVudC4gQSByZWRpcmVjdCB0aGF0IGxhbmRzIG9uIGEgVkxBTiBkZXZpY2UgaXMgZHJvcHBlZCBhdFxuKyAqIHhkcF9kb19mbHVzaCgpLCBiZWNhdXNlIGEgVkxBTiBkZXZpY2UgaGFzIG5vIG5kb194ZHBfeG1pdC4gRHJpdmUgcmVhbFxuKyAqIGZyYW1lcyB3aXRoIEJQRl9GX1RFU1RfWERQX0xJVkVfRlJBTUVTLCB3aGljaCBydW5zIHRoZSBuYXRpdmVcbisgKiB4ZHBfZG9fcmVkaXJlY3QoKSArIHhkcF9kb19mbHVzaCgpIHBhdGg6IGEgcmVkdWNpYmxlIFZMQU4gZWdyZXNzXG4rICogcmVzb2x2ZXMgdG8gdmV0aDEgYW5kIGlzIGRlbGl2ZXJlZCB0byBpdHMgcGVlciB2ZXRoMiwgd2hpbGUgYSBRaW5RXG4rICogZWdyZXNzIHJldHVybnMgVkxBTl9GQUlMVVJFIGFuZCBpcyBwYXNzZWQgdG8gdGhlIHN0YWNrIGluc3RlYWQgb2ZcbisgKiByZWRpcmVjdGVkIHRvIGEgZGV2aWNlIHRoYXQgd291bGQgc2lsZW50bHkgZHJvcCBpdC5cbisgKi9cbit2b2lkIHRlc3RfZmliX2xvb2t1cF92bGFuX3JlZGlyZWN0KHZvaWQpXG4re1xuK1x0aW50IHJlZGlyZWN0X2ZkLCBlcnIsIHZldGgxX2lkeCwgdmV0aDJfaWR4ID0gLTE7XG4rXHRzdHJ1Y3QgYnBmX2ZpYl9sb29rdXAgKmZpYl9wYXJhbXM7XG4rXHRzdHJ1Y3QgbnN0b2tlbiAqbnN0b2tlbiA9IE5VTEw7XG4rXHRzdHJ1Y3QgZmliX2xvb2t1cCAqc2tlbCA9IE5VTEw7XG4rXHRib29sIHhkcF9hdHRhY2hlZCA9IGZhbHNlO1xuK1xuK1x0TElCQlBGX09QVFMoYnBmX3Rlc3RfcnVuX29wdHMsIGxmX29wdHMsXG4rXHRcdCAgICAuZGF0YV9pbiA9IFx1MDAyNnBrdF92NCxcbitcdFx0ICAgIC5kYXRhX3NpemVfaW4gPSBzaXplb2YocGt0X3Y0KSxcbitcdFx0ICAgIC5mbGFncyA9IEJQRl9GX1RFU1RfWERQX0xJVkVfRlJBTUVTLFxuK1x0XHQgICAgLnJlcGVhdCA9IFJFRElSRUNUX05QS1RTLFxuK1x0KTtcbitcbitcdHNrZWwgPSBmaWJfbG9va3VwX19vcGVuX2FuZF9sb2FkKCk7XG4rXHRpZiAoIUFTU0VSVF9PS19QVFIoc2tlbCwgXCJza2VsIG9wZW5fYW5kX2xvYWRcIikpXG4rXHRcdHJldHVybjtcbitcdHJlZGlyZWN0X2ZkID0gYnBmX3Byb2dyYW1fX2ZkKHNrZWwtXHUwMDNlcHJvZ3MuZmliX2xvb2t1cF9yZWRpcmVjdCk7XG4rXHRmaWJfcGFyYW1zID0gXHUwMDI2c2tlbC1cdTAwM2Vic3MtXHUwMDNlZmliX3BhcmFtcztcbitcbitcdFNZUyhmYWlsLCBcImlwIG5ldG5zIGFkZCAlc1wiLCBOU19URVNUKTtcbitcdG5zdG9rZW4gPSBvcGVuX25ldG5zKE5TX1RFU1QpO1xuK1x0aWYgKCFBU1NFUlRfT0tfUFRSKG5zdG9rZW4sIFwib3Blbl9uZXRuc1wiKSlcbitcdFx0Z290byBmYWlsO1xuK1x0aWYgKHNldHVwX25ldG5zKCkpXG4rXHRcdGdvdG8gZmFpbDtcbitcbitcdHZldGgxX2lkeCA9IGlmX25hbWV0b2luZGV4KFwidmV0aDFcIik7XG4rXHR2ZXRoMl9pZHggPSBpZl9uYW1ldG9pbmRleChcInZldGgyXCIpO1xuK1x0aWYgKCFBU1NFUlRfTkVRKHZldGgxX2lkeCwgMCwgXCJpZl9uYW1ldG9pbmRleCh2ZXRoMSlcIikgfHxcbitcdCAgICAhQVNTRVJUX05FUSh2ZXRoMl9pZHgsIDAsIFwiaWZfbmFtZXRvaW5kZXgodmV0aDIpXCIpKVxuK1x0XHRnb3RvIGZhaWw7XG4rXG4rXHQvKlxuK1x0ICogQSByZWRpcmVjdCB0byB2ZXRoMSBpcyBkZWxpdmVyZWQgdG8gaXRzIHBlZXIgdmV0aDIuIHZldGhfeGRwX3htaXQoKVxuK1x0ICogb25seSBhY2NlcHRzIHRoZSBmcmFtZSBpZiB2ZXRoMidzIE5BUEkgaXMgdXAsIHdoaWNoIG9uIHZldGggbWVhbnNcbitcdCAqIHZldGgyIGNhcnJpZXMgYW4gWERQIHByb2dyYW07IHhkcF9jb3VudCB0YWxsaWVzIHdoYXQgYXJyaXZlcy5cbitcdCAqL1xuK1x0ZXJyID0gYnBmX3hkcF9hdHRhY2godmV0aDJfaWR4LCBicGZfcHJvZ3JhbV9fZmQoc2tlbC1cdTAwM2Vwcm9ncy54ZHBfY291bnQpLFxuK1x0XHRcdCAgICAgWERQX0ZMQUdTX0RSVl9NT0RFLCBOVUxMKTtcbitcdGlmICghQVNTRVJUX09LKGVyciwgXCJhdHRhY2ggeGRwX2NvdW50IG9uIHZldGgyXCIpKVxuK1x0XHRnb3RvIGZhaWw7XG4rXHR4ZHBfYXR0YWNoZWQgPSB0cnVlO1xuK1xuK1x0LyogcmVkdWNpYmxlIFZMQU4gZWdyZXNzOiByZXNvbHZlcyB0byB0aGUgcGh5c2ljYWwgcGFyZW50IHZldGgxICovXG4rXHRtZW1zZXQoZmliX3BhcmFtcywgMCwgc2l6ZW9mKCpmaWJfcGFyYW1zKSk7XG4rXHRmaWJfcGFyYW1zLVx1MDAzZWZhbWlseSA9IEFGX0lORVQ7XG4rXHRmaWJfcGFyYW1zLVx1MDAzZWw0X3Byb3RvY29sID0gSVBQUk9UT19UQ1A7XG4rXHRmaWJfcGFyYW1zLVx1MDAzZWlmaW5kZXggPSB2ZXRoMV9pZHg7XG4rXHRpZiAoIUFTU0VSVF9FUShpbmV0X3B0b24oQUZfSU5FVCwgSVBWNF9JRkFDRV9BRERSLCBcdTAwMjZmaWJfcGFyYW1zLVx1MDAzZWlwdjRfc3JjKSxcbitcdFx0ICAgICAgIDEsIFwiaW5ldF9wdG9uKHNyYylcIikgfHxcbitcdCAgICAhQVNTRVJUX0VRKGluZXRfcHRvbihBRl9JTkVULCBJUFY0X1ZMQU5fRUdSRVNTX0RTVCwgXHUwMDI2ZmliX3BhcmFtcy1cdTAwM2VpcHY0X2RzdCksXG4rXHRcdCAgICAgICAxLCBcImluZXRfcHRvbihyZWR1Y2libGUgZHN0KVwiKSlcbitcdFx0Z290byBmYWlsO1xuK1x0c2tlbC1cdTAwM2Vic3MtXHUwMDNlbG9va3VwX2ZsYWdzID0gQlBGX0ZJQl9MT09LVVBfVkxBTiB8IEJQRl9GSUJfTE9PS1VQX1NLSVBfTkVJR0g7XG4rXHRza2VsLVx1MDAzZWJzcy1cdTAwM2VyZWRpcmVjdGVkID0gMDtcbitcdHNrZWwtXHUwMDNlYnNzLVx1MDAzZXBhc3NlZCA9IDA7XG4rXHRza2VsLVx1MDAzZWJzcy1cdTAwM2VkZWxpdmVyZWQgPSAwO1xuK1xuK1x0ZXJyID0gYnBmX3Byb2dfdGVzdF9ydW5fb3B0cyhyZWRpcmVjdF9mZCwgXHUwMDI2bGZfb3B0cyk7XG4rXHRpZiAoIUFTU0VSVF9PSyhlcnIsIFwidGVzdF9ydW4ocmVkdWNpYmxlIGVncmVzcylcIikpXG4rXHRcdGdvdG8gZmFpbDtcbitcdEFTU0VSVF9FUShza2VsLVx1MDAzZWJzcy1cdTAwM2VyZWRpcmVjdGVkLCBSRURJUkVDVF9OUEtUUywgXCJyZWR1Y2libGUgZWdyZXNzIHJlZGlyZWN0ZWRcIik7XG4rXHRBU1NFUlRfRVEoc2tlbC1cdTAwM2Vic3MtXHUwMDNlcGFzc2VkLCAwLCBcInJlZHVjaWJsZSBlZ3Jlc3Mgbm90IHBhc3NlZFwiKTtcbitcdEFTU0VSVF9HVChza2VsLVx1MDAzZWJzcy1cdTAwM2VkZWxpdmVyZWQsIDAsIFwicmVkdWNpYmxlIGVncmVzcyBkZWxpdmVyZWQgdG8gdmV0aDJcIik7XG4rXG4rXHQvKlxuK1x0ICogUWluUSBlZ3Jlc3M6IG5vdCByZWR1Y2libGUsIHNvIHRoZSBsb29rdXAgcmV0dXJucyBWTEFOX0ZBSUxVUkUgYW5kXG4rXHQgKiB0aGUgcHJvZ3JhbSBwYXNzZXMgdGhlIGZyYW1lIGluc3RlYWQgb2YgcmVkaXJlY3RpbmcgdG8gdGhlIGlubmVyXG4rXHQgKiBWTEFOIGRldmljZS4gcmVkaXJlY3RlZCA9PSAwIGlzIHRoZSBhc3NlcnRpb24gdGhhdCBtYXR0ZXJzOiB0aGVcbitcdCAqIHByb2dyYW0gZGlkIG5vdCByZWRpcmVjdCB0byBhIGRldmljZSB0aGF0IHdvdWxkIGRyb3AgdGhlIGZyYW1lIGF0XG4rXHQgKiB4ZHBfZG9fZmx1c2goKS4gdmV0aDIncyBkZWxpdmVyZWQgY291bnQgaXMgbm90IGNoZWNrZWQgaGVyZSwgc2luY2VcbitcdCAqIGEgcGFzc2VkIGZyYW1lIGNhbiBzdGlsbCByZWFjaCB2ZXRoMiB0aHJvdWdoIHRoZSBzdGFjaydzIGZvcndhcmRpbmdcbitcdCAqIHBhdGgsIHdoaWNoIGlzIHVucmVsYXRlZCB0byB0aGUgcmVkaXJlY3QgdW5kZXIgdGVzdC5cbitcdCAqL1xuK1x0bWVtc2V0KGZpYl9wYXJhbXMsIDAsIHNpemVvZigqZmliX3BhcmFtcykpO1xuK1x0ZmliX3BhcmFtcy1cdTAwM2VmYW1pbHkgPSBBRl9JTkVUO1xuK1x0ZmliX3BhcmFtcy1cdTAwM2VsNF9wcm90b2NvbCA9IElQUFJPVE9fVENQO1xuK1x0ZmliX3BhcmFtcy1cdTAwM2VpZmluZGV4ID0gdmV0aDFfaWR4O1xuK1x0aWYgKCFBU1NFUlRfRVEoaW5ldF9wdG9uKEFGX0lORVQsIElQVjRfSUZBQ0VfQUREUiwgXHUwMDI2ZmliX3BhcmFtcy1cdTAwM2VpcHY0X3NyYyksXG4rXHRcdCAgICAgICAxLCBcImluZXRfcHRvbihzcmMpXCIpIHx8XG4rXHQgICAgIUFTU0VSVF9FUShpbmV0X3B0b24oQUZfSU5FVCwgSVBWNF9RSU5RX0RTVCwgXHUwMDI2ZmliX3BhcmFtcy1cdTAwM2VpcHY0X2RzdCksXG4rXHRcdCAgICAgICAxLCBcImluZXRfcHRvbihxaW5xIGRzdClcIikpXG4rXHRcdGdvdG8gZmFpbDtcbitcdHNrZWwtXHUwMDNlYnNzLVx1MDAzZWxvb2t1cF9mbGFncyA9IEJQRl9GSUJfTE9PS1VQX1ZMQU4gfCBCUEZfRklCX0xPT0tVUF9TS0lQX05FSUdIO1xuK1x0c2tlbC1cdTAwM2Vic3MtXHUwMDNlcmVkaXJlY3RlZCA9IDA7XG4rXHRza2VsLVx1MDAzZWJzcy1cdTAwM2VwYXNzZWQgPSAwO1xuK1xuK1x0ZXJyID0gYnBmX3Byb2dfdGVzdF9ydW5fb3B0cyhyZWRpcmVjdF9mZCwgXHUwMDI2bGZfb3B0cyk7XG4rXHRpZiAoIUFTU0VSVF9PSyhlcnIsIFwidGVzdF9ydW4ocWlucSBlZ3Jlc3MpXCIpKVxuK1x0XHRnb3RvIGZhaWw7XG4rXHRBU1NFUlRfRVEoc2tlbC1cdTAwM2Vic3MtXHUwMDNlcGFzc2VkLCBSRURJUkVDVF9OUEtUUywgXCJxaW5xIGVncmVzcyBwYXNzZWRcIik7XG4rXHRBU1NFUlRfRVEoc2tlbC1cdTAwM2Vic3MtXHUwMDNlcmVkaXJlY3RlZCwgMCwgXCJxaW5xIGVncmVzcyBub3QgcmVkaXJlY3RlZFwiKTtcbitcbiBmYWlsOlxuK1x0aWYgKHhkcF9hdHRhY2hlZClcbitcdFx0YnBmX3hkcF9kZXRhY2godmV0aDJfaWR4LCBYRFBfRkxBR1NfRFJWX01PREUsIE5VTEwpO1xuIFx0aWYgKG5zdG9rZW4pXG4gXHRcdGNsb3NlX25ldG5zKG5zdG9rZW4pO1xuIFx0U1lTX05PRkFJTChcImlwIG5ldG5zIGRlbCBcIiBOU19URVNUKTtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvZmliX2xvb2t1cC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2ZpYl9sb29rdXAuY1xuaW5kZXggN2I1ZGQyMjE0ZmY0NmEuLjg2MmExZTk0NTdiNGUwIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2ZpYl9sb29rdXAuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2ZpYl9sb29rdXAuY1xuQEAgLTE5LDQgKzE5LDQwIEBAIGludCBmaWJfbG9va3VwKHN0cnVjdCBfX3NrX2J1ZmYgKnNrYilcbiBcdHJldHVybiBUQ19BQ1RfU0hPVDtcbiB9XG4gXG4rU0VDKFwieGRwXCIpXG4raW50IGZpYl9sb29rdXBfeGRwKHN0cnVjdCB4ZHBfbWQgKmN0eClcbit7XG4rXHRmaWJfbG9va3VwX3JldCA9IGJwZl9maWJfbG9va3VwKGN0eCwgXHUwMDI2ZmliX3BhcmFtcywgc2l6ZW9mKGZpYl9wYXJhbXMpLFxuK1x0XHRcdFx0XHRsb29rdXBfZmxhZ3MpO1xuK1xuK1x0cmV0dXJuIFhEUF9EUk9QO1xuK31cbitcbitpbnQgcmVkaXJlY3RlZCA9IDA7XG4raW50IHBhc3NlZCA9IDA7XG4raW50IGRlbGl2ZXJlZCA9IDA7XG4rXG4rU0VDKFwieGRwXCIpXG4raW50IGZpYl9sb29rdXBfcmVkaXJlY3Qoc3RydWN0IHhkcF9tZCAqY3R4KVxuK3tcbitcdHN0cnVjdCBicGZfZmliX2xvb2t1cCBwYXJhbXMgPSBmaWJfcGFyYW1zO1xuK1x0bG9uZyByZXQ7XG4rXG4rXHRyZXQgPSBicGZfZmliX2xvb2t1cChjdHgsIFx1MDAyNnBhcmFtcywgc2l6ZW9mKHBhcmFtcyksIGxvb2t1cF9mbGFncyk7XG4rXHRpZiAocmV0ID09IEJQRl9GSUJfTEtVUF9SRVRfU1VDQ0VTUykge1xuK1x0XHRyZWRpcmVjdGVkKys7XG4rXHRcdHJldHVybiBicGZfcmVkaXJlY3QocGFyYW1zLmlmaW5kZXgsIDApO1xuK1x0fVxuK1xuK1x0cGFzc2VkKys7XG4rXHRyZXR1cm4gWERQX1BBU1M7XG4rfVxuK1xuK1NFQyhcInhkcFwiKVxuK2ludCB4ZHBfY291bnQoc3RydWN0IHhkcF9tZCAqY3R4KVxuK3tcbitcdGRlbGl2ZXJlZCsrO1xuK1x0cmV0dXJuIFhEUF9EUk9QO1xuK31cbitcbiBjaGFyIF9saWNlbnNlW10gU0VDKFwibGljZW5zZVwiKSA9IFwiR1BMXCI7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNFQwMzoyNTo1My42OTcyNzk1NzZaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMTA2Mzk0NjM1MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipCUEYgRklCIExvb2t1cCBWTEFOIFBhdGNoIEFuYWx5c2lzIGFuZCBGdXp6aW5nIFN0cmF0ZWd5KipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCB0aGF0IGFkZHMgVkxBTiBzdXBwb3J0IHRvIHRoZSBgYnBmX2ZpYl9sb29rdXBgIGZ1bmN0aW9uYWxpdHkuICBNeSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgdGhhdCB0aGlzIGlzIGEgc2lnbmlmaWNhbnQgY2hhbmdlLCB0b3VjaGluZyBzZXZlcmFsIGtleSBhcmVhcy4gU3BlY2lmaWNhbGx5LCB0aGUgcGF0Y2ggaGFzIHRvdWNoZWQgYGluY2x1ZGUvdWFwaS9saW51eC9icGYuaGAsIGBuZXQvY29yZS9maWx0ZXIuY2AsIGB0b29scy9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmhgLCBhbmQgdGhlIEJQRiBzZWxmdGVzdHMuXG5cblRoZSBjb3JlIG9mIHRoaXMgbW9kaWZpY2F0aW9uIHNlZW1zIHRvIHJlc2lkZSBpbiBgbmV0L2NvcmUvZmlsdGVyLmNgLiAgSSBzZWUgbmV3IGZ1bmN0aW9uczogYGJwZl9maWJfc2V0X2Z3ZF9wYXJhbXNgIGFuZCBgYnBmX2ZpYl92bGFuX2lucHV0X2RldmAuICBJdCBhbHNvIGxvb2tzIGxpa2UgdGhlIGV4aXN0aW5nIGxvb2t1cCBmdW5jdGlvbnMsIGBicGZfaXB2NF9maWJfbG9va3VwYCwgYGJwZl9pcHY2X2ZpYl9sb29rdXBgLCBgYnBmX3hkcF9maWJfbG9va3VwYCwgYW5kIGBicGZfc2tiX2ZpYl9sb29rdXBgIGhhdmUgYmVlbiB1cGRhdGVkLiBUaGUgdXBkYXRlIGluY2x1ZGVzIGNoZWNrcyBmb3IgYEJQRl9GSUJfTE9PS1VQX1ZMQU5gIGFuZCBgQlBGX0ZJQl9MT09LVVBfVkxBTl9JTlBVVGAgZmxhZ3MsIGFuZCB0aGF0J3MgdGhlIGFyZWEgSSBuZWVkIHRvIHBheSB0aGUgbW9zdCBhdHRlbnRpb24gdG8gd2hlbiBnZW5lcmF0aW5nIGEgZnV6emluZyB0ZXN0IHBsYW4uXG5cbkkgbmVlZCB0byBmb2N1cyBteSBmdXp6aW5nIGVmZm9ydHMgb24gdGhvc2UgY29yZSBsb29rdXAgZnVuY3Rpb25zOiBgYnBmX2lwdjRfZmliX2xvb2t1cGAsIGBicGZfaXB2Nl9maWJfbG9va3VwYCwgYGJwZl94ZHBfZmliX2xvb2t1cGAsIGFuZCBgYnBmX3NrYl9maWJfbG9va3VwYC4gIEknbGwgY29uc2lkZXIgdGhlIHN0YXRpYyBmdW5jdGlvbnMgYGJwZl9maWJfc2V0X2Z3ZF9wYXJhbXNgIGFuZCBgYnBmX2ZpYl92bGFuX2lucHV0X2RldmAgdG8gYmUgY292ZXJlZCBhcyBwYXJ0IG9mIGZ1enppbmcgdGhlIGxvb2t1cCBmdW5jdGlvbnMsIGFzIEknbSBhc3N1bWluZyB0aGVyZSdzIG5vIHdheSB0byBjYWxsIHRoZW0gaW5kZXBlbmRlbnRseSAodW5sZXNzIEkgbWlzcyBzb21ldGhpbmcgZHVyaW5nIG15IHJldmlldykuXG5cbkxldCdzIGxvb2sgYXQgdGhlIGNvbmZpZ3VyYXRpb24gZGVwZW5kZW5jaWVzLiAgSSBzZWUgYENPTkZJR19WTEFOXzgwMjFRYCBpcyB1c2VkIHdpdGhpbiBgYnBmX2ZpYl9zZXRfZndkX3BhcmFtc2AgdW5kZXIgYSBjb25kaXRpb25hbC5cblxuYGBgY1xuI2lmIElTX0VOQUJMRUQoQ09ORklHX1ZMQU5fODAyMVEpXG5cdGlmICgoZmxhZ3MgXHUwMDI2IEJQRl9GSUJfTE9PS1VQX1ZMQU4pIFx1MDAyNlx1MDAyNiBpc192bGFuX2RldihkZXYpKSB7XG5gYGBcblxuU28sIHRvIGZ1bGx5IGV4ZXJjaXNlIGBCUEZfRklCX0xPT0tVUF9WTEFOYCwgSSdsbCAqZGVmaW5pdGVseSogbmVlZCB0byBlbnN1cmUgYENPTkZJR19WTEFOXzgwMjFRYCBpcyBlbmFibGVkIGR1cmluZyB0ZXN0aW5nLiAgSSdsbCBhbHNvIGhhdmUgdG8gYmUgY2FyZWZ1bCB3aGVuIGNyYWZ0aW5nIHRoZSBmdXp6aW5nIGlucHV0IHRvIGNvcnJlY3RseSBzZXQgdGhlIGFwcHJvcHJpYXRlIGZsYWdzIHRvIGhpdCB0aGF0IGNvZGUgcGF0aC4gIFRoZSB1c3VhbCBzdXNwZWN0cywgYENPTkZJR19JTkVUYCBhbmQgYENPTkZJR19JUFY2YCBhcmUgYWxzbyBpbiB1c2UuXG5cbknigJlsbCBkb3VibGUtY2hlY2sgdGhpcyBhZ2FpbiB3aXRoIGEgYGdyZXBwZXJgIHBhc3MgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMuIE15IGZ1enppbmcgdGVzdCBwbGFuIHdpbGwgbmVlZCB0byByZWZsZWN0IHRoZSBuZWNlc3NhcnkgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMgc28gSSBhbSBhcyB0aG9yb3VnaCBhcyBwb3NzaWJsZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjMyMTIsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3NzYsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNFQwMzoyNjowNC43NjEyMjkxODlaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU2MTQyMjU3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJwZl9maWJfc2V0X2Z3ZF9wYXJhbXNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2NvcmUvZmlsdGVyLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2NvcmUvZmlsdGVyLmM9NjE5MT1zdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9za2JfZ2V0X3hmcm1fc3RhdGVfcHJvdG8gPSB7XFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy02MjAzLSNpZiBJU19FTkFCTEVEKENPTkZJR19JTkVUKSB8fCBJU19FTkFCTEVEKENPTkZJR19JUFY2KVxcbm5ldC9jb3JlL2ZpbHRlci5jOjYyMDQ6c3RhdGljIGludCBicGZfZmliX3NldF9md2RfcGFyYW1zKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxubmV0L2NvcmUvZmlsdGVyLmMtNjIwNS1cXHRcXHRcXHRcXHQgIHN0cnVjdCBicGZfZmliX2xvb2t1cCAqcGFyYW1zLFxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmM9NjI1ND1zdGF0aWMgaW50IGJwZl9pcHY0X2ZpYl9sb29rdXAoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgYnBmX2ZpYl9sb29rdXAgKnBhcmFtcyxcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTY0MDAtc2V0X2Z3ZF9wYXJhbXM6XFxubmV0L2NvcmUvZmlsdGVyLmM6NjQwMTpcXHRyZXR1cm4gYnBmX2ZpYl9zZXRfZndkX3BhcmFtcyhkZXYsIHBhcmFtcywgZmxhZ3MsIG10dSwgaW5faWZpbmRleCk7XFxubmV0L2NvcmUvZmlsdGVyLmMtNjQwMi19XFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYz02NDA2PXN0YXRpYyBpbnQgYnBmX2lwdjZfZmliX2xvb2t1cChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBicGZfZmliX2xvb2t1cCAqcGFyYW1zLFxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtNjU1My1zZXRfZndkX3BhcmFtczpcXG5uZXQvY29yZS9maWx0ZXIuYzo2NTU0OlxcdHJldHVybiBicGZfZmliX3NldF9md2RfcGFyYW1zKGRldiwgcGFyYW1zLCBmbGFncywgbXR1LCBpbl9pZmluZGV4KTtcXG5uZXQvY29yZS9maWx0ZXIuYy02NTU1LX1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjRUMDM6MjY6MDQuOTE3Mzc4MTA1WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDQ1MDkwMDUzNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGFzIHlvdSByZXF1ZXN0ZWQ6XG5cbioqRGVjb25zdHJ1Y3RpbmcgYnBmX2ZpYl92bGFuX2lucHV0X2RldjogQSBEZWVwIERpdmUqKlxuXG5BbHJpZ2h0LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IG1pbmQgaW1tZWRpYXRlbHkgZ29lcyB0byB0aGUgcG90ZW50aWFsIGltcGFjdCBvZiBgYnBmX2ZpYl92bGFuX2lucHV0X2RldmAuIFdlJ3JlIHRhbGtpbmcgYWJvdXQgYSBCUEYgaG9vaywgcHJlc3VtYWJseSB3aXRoaW4gdGhlIGNvbnRleHQgb2YgYSBmb3J3YXJkaW5nIEluZm9ybWF0aW9uIEJhc2UgKEZJQikgbG9va3VwLCBhbmQgaXQncyBzcGVjaWZpY2FsbHkgZGVhbGluZyB3aXRoIFZMQU4gaW5ncmVzcyBwcm9jZXNzaW5nLiBcIklucHV0IGRldlwiIHN0cm9uZ2x5IHN1Z2dlc3RzIGl0J3MgaW52b2x2ZWQgaW4gaGFuZGxpbmcgdGhlIGluZ3Jlc3MgaW50ZXJmYWNlIG9yIGRldmljZS5cblxuSSdtIHN0YXJ0aW5nIHRvIHRoaW5rIGFib3V0IHRoZSBpbXBsaWNhdGlvbnMgZm9yIG5ldHdvcmsgcGVyZm9ybWFuY2UuIFRoaXMgQlBGIGhvb2sgbGlrZWx5IGFsbG93cyBmb3IgaW4ta2VybmVsIHRyYWZmaWMgc3RlZXJpbmcgYmFzZWQgb24gVkxBTiBpbmZvcm1hdGlvbiAqYmVmb3JlKiB0aGUgc3RhbmRhcmQgcm91dGluZyBwcm9jZXNzLiBUaGlzIGlzIHBvd2VyZnVsLlxuXG5NeSBpbW1lZGlhdGUgcXVlc3Rpb25zIGFyZTpcblxuKiAgIEhvdyBpcyB0aGlzIGludGVncmF0ZWQgd2l0aCB0aGUgdW5kZXJseWluZyBGSUIgc3RydWN0dXJlPyBJcyBpdCBwcmUtbG9va3VwIGZpbHRlcmluZyBvciBzb21ldGhpbmcgbW9yZSBjb21wbGV4P1xuKiAgIFdoYXQncyB0aGUgcGVyZm9ybWFuY2Ugb3ZlcmhlYWQ/IERvZXMgdGhpcyBhZGQgc2lnbmlmaWNhbnQgbGF0ZW5jeSBjb21wYXJlZCB0byBwdXJlIGhhcmR3YXJlIGZvcndhcmRpbmc/XG4qICAgV2hhdCdzIHRoZSBpbnRlcmFjdGlvbiB3aXRoIG90aGVyIEJQRiBwcm9ncmFtcz8gQ291bGQgaXQgYmUgY2hhaW5lZCB3aXRoIGV4aXN0aW5nIGVCUEYgZmlsdGVycyBmb3IgaW5jcmVhc2VkIGZsZXhpYmlsaXR5P1xuKiAgIEhvdyBpcyBWTEFOIGluZm9ybWF0aW9uIGV4dHJhY3RlZCAoZS5nLiwgZnJvbSB0aGUgaGVhZGVyLCBzcGVjaWZpYyBtZXRhZGF0YSk/IEFuZCwgaG93IGRvZXMgdGhpcyBpbnRlcmFjdCB3aXRoIHRoZSBuZXR3b3JrIHN0YWNrJ3MgaGFuZGxpbmcgb2YgVkxBTiB0YWdnZWQgZnJhbWVzP1xuXG5JIGFsc28gd29uZGVyIGFib3V0IHRoZSB1c2UgY2FzZXMgaGVyZS4gSXQgcHJvYmFibHkgZW5hYmxlcyBWTEFOLWF3YXJlIHRyYWZmaWMgZW5naW5lZXJpbmcsIHBvbGljeSBlbmZvcmNlbWVudCwgb3IgZXZlbiBtb3JlIGFkdmFuY2VkIHNjZW5hcmlvcy4gSSdtIGltYWdpbmluZyBzY2VuYXJpb3MgaW52b2x2aW5nIHNwZWNpZmljIFZMQU5zLCBwZXJoYXBzIG9uIGEgc2VydmljZSBwcm92aWRlciBlZGdlLCBiZWluZyByb3V0ZWQgZGlmZmVyZW50bHkgYmFzZWQgb24gc29tZSBjb25kaXRpb24uIFRoaXMgY291bGQgYmUgdXNlZnVsIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyB3aXRoIGEgbG90IG9mIHRlbmFudCBuZXR3b3Jrcy5cblxuSSdtIGludHJpZ3VlZC4gSSdtIGdvaW5nIHRvIGhhdmUgdG8gZGl2ZSBpbnRvIHRoZSBrZXJuZWwgc291cmNlIGFuZCB0aGUgcmVsZXZhbnQgZG9jdW1lbnRhdGlvbiB0byBnZXQgYSBoYW5kbGUgb24gdGhlIGFjdHVhbCBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzIGFuZCBleHBsb3JlIGhvdyB0aGlzIGZpdHMgaW50byBteSBvdmVyYWxsIG5ldHdvcmsgZGVzaWduIHN0cmF0ZWdpZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI1MDYzLCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjRUMDM6MjY6MDkuMzY4MjgyMzU5WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk2MDMyNTQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJwZl9maWJfdmxhbl9pbnB1dF9kZXZcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2NvcmUvZmlsdGVyLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2NvcmUvZmlsdGVyLmM9NjIwND1zdGF0aWMgaW50IGJwZl9maWJfc2V0X2Z3ZF9wYXJhbXMoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTYyMzItXFxubmV0L2NvcmUvZmlsdGVyLmM6NjIzMzpzdGF0aWMgc3RydWN0IG5ldF9kZXZpY2UgKmJwZl9maWJfdmxhbl9pbnB1dF9kZXYoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG5uZXQvY29yZS9maWx0ZXIuYy02MjM0LVxcdFxcdFxcdFxcdFxcdFxcdCBjb25zdCBzdHJ1Y3QgYnBmX2ZpYl9sb29rdXAgKnBhcmFtcylcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jPTYyNTQ9c3RhdGljIGludCBicGZfaXB2NF9maWJfbG9va3VwKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGJwZl9maWJfbG9va3VwICpwYXJhbXMsXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy02MjcxLVxcdGlmIChmbGFncyBcXHUwMDI2IEJQRl9GSUJfTE9PS1VQX1ZMQU5fSU5QVVQpIHtcXG5uZXQvY29yZS9maWx0ZXIuYzo2MjcyOlxcdFxcdGRldiA9IGJwZl9maWJfdmxhbl9pbnB1dF9kZXYoZGV2LCBwYXJhbXMpO1xcbm5ldC9jb3JlL2ZpbHRlci5jLTYyNzMtXFx0XFx0aWYgKElTX0VSUihkZXYpKVxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmM9NjQwNj1zdGF0aWMgaW50IGJwZl9pcHY2X2ZpYl9sb29rdXAoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgYnBmX2ZpYl9sb29rdXAgKnBhcmFtcyxcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTY0MjktXFx0aWYgKGZsYWdzIFxcdTAwMjYgQlBGX0ZJQl9MT09LVVBfVkxBTl9JTlBVVCkge1xcbm5ldC9jb3JlL2ZpbHRlci5jOjY0MzA6XFx0XFx0ZGV2ID0gYnBmX2ZpYl92bGFuX2lucHV0X2RldihkZXYsIHBhcmFtcyk7XFxubmV0L2NvcmUvZmlsdGVyLmMtNjQzMS1cXHRcXHRpZiAoSVNfRVJSKGRldikpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI0VDAzOjI2OjA5LjQ2NDMyMDI5N1oiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjg5MTE1MTkwNDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyB0aGUgQlBGIEZJQiBMb29rdXAgSGVscGVyIHdpdGggVkxBTiBTdXBwb3J0KipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpbnRyb2R1Y2VzIHNvbWUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBCUEYgRklCIGxvb2t1cCBoZWxwZXIsIHNwZWNpZmljYWxseSBhZGRpbmcgVkxBTiBoYW5kbGluZy4gUmlnaHQgYXdheSwgdGhpcyBzY3JlYW1zIFwiZnV6emluZyB0YXJnZXQuXCIgVGhlIGNvcmUgb2Ygcm91dGluZyBsb2dpYyBpbiBCUEYgaXMgYmVpbmcgbW9kaWZpZWQsIGFuZCB0aGF0J3MgYWx3YXlzIGEgcG90ZW50aWFsIGFyZWEgZm9yIHZ1bG5lcmFiaWxpdGllcywgZXNwZWNpYWxseSBzaW5jZSB1c2Vyc3BhY2UgQlBGIHByb2dyYW1zIGNhbiBub3cgaW5mbHVlbmNlIHRoZSBWTEFOIHJlc29sdXRpb24gcHJvY2VzcyB0aHJvdWdoIFhEUCBvciBUQy4gV2UgbmVlZCB0byBiZSB0aG9yb3VnaC5cblxuTXkgaW5pdGlhbCBmb2N1cyBuZWVkcyB0byBiZSBvbiB0aGVzZSBmdW5jdGlvbnM6IGBicGZfaXB2NF9maWJfbG9va3VwYCwgYGJwZl9pcHY2X2ZpYl9sb29rdXBgLCBgYnBmX3hkcF9maWJfbG9va3VwYCwgYGJwZl9za2JfZmliX2xvb2t1cGAsIGBicGZfZmliX3NldF9md2RfcGFyYW1zYCwgYW5kIGBicGZfZmliX3ZsYW5faW5wdXRfZGV2YC4gVGhlc2UgYXJlIHRoZSBrZXkgZW50cnkgcG9pbnRzIGFuZCBzdXBwb3J0aW5nIGZ1bmN0aW9ucyB0aGF0IGxpa2VseSBjb250YWluIHRoZSBuZXcgVkxBTi1yZWxhdGVkIGxvZ2ljLlxuXG5JIG5lZWQgdG8gbWFrZSBzdXJlIGBWTEFOXzgwMjFRYCBpcyBlbmFibGVkIGluIHRoZSBjb25maWd1cmF0aW9uIHRvIGV4ZXJjaXNlIHRoZSBjaGFuZ2VzLCBidXQgbGV0J3MgcXVpY2tseSB2ZXJpZnkgdGhhdCB0aGUgc3RhbmRhcmQgbmV0d29ya2luZyBjb25maWcgb3B0aW9ucyBsaWtlIGBDT05GSUdfSU5FVGAsIGBDT05GSUdfSVBWNmAsIGBDT05GSUdfQlBGX1NZU0NBTExgLCBhbmQgYENPTkZJR19ORVRgIGFyZSBlbmFibGVkLiBHb29kLlxuXG5JJ20gdGhpbmtpbmcgYWJvdXQgdGhlIHJhdGlvbmFsZSBiZWhpbmQgdGhpcyBwYXRjaC4gVGhlIHBhdGNoIGlzIGFkZGluZyBWTEFOIHN1cHBvcnQgdGhyb3VnaCB0aGUgYEJQRl9GSUJfTE9PS1VQX1ZMQU5gIGFuZCBgQlBGX0ZJQl9MT09LVVBfVkxBTl9JTlBVVGAgZmxhZ3MgdG8gYGJwZl9maWJfbG9va3VwYC4gVGhpcyBpcyBjb3JlLCBzbyBmdXp6aW5nIGlzICplc3NlbnRpYWwqIHRvIG1ha2Ugc3VyZSBub3RoaW5nIGdvZXMgd3Jvbmcgd2l0aCB0aGlzIG5ldyByZXNvbHV0aW9uLlxuXG5BbmQgYXMgSSByZS1yZXZpZXcgbXkgZm9jdXMgc3ltYm9scywgSSdtIGp1c3QgcXVpY2tseSBjb25maXJtaW5nIHRoYXQgYGJwZl9maWJfdmxhbl9pbnB1dF9kZXZgIGFuZCBgYnBmX2ZpYl9zZXRfZndkX3BhcmFtc2AgYXJlIGluZGVlZCBpbmNsdWRlZC4gVGhleSBhcmUgc3RhdGljLCBidXQgbm90IGlubGluZSwgc28gdGhleSdyZSB2YWxpZCB0YXJnZXRzLlxuXG5SaWdodCwgSSdtIHJlYWR5IHRvIHNldCB1cCB0aGUgZnV6emluZyBlbnZpcm9ubWVudCBhbmQgZ2V0IHRvIHdvcmsuIExldCdzIHN0YXJ0IHdpdGggdGhlIGJhc2UgY29uZmlndXJhdGlvbiBhbmQgYnVpbGQgZnJvbSB0aGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjU5MDcsIk91dHB1dFRva2VucyI6MjI1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDU1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI0VDAzOjI2OjE4LjM3NTg0MTQwNVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA3NTU4OTU4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJWTEFOXzgwMjFRXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYnBmX2lwdjRfZmliX2xvb2t1cFwiLFxuICAgIFwiYnBmX2lwdjZfZmliX2xvb2t1cFwiLFxuICAgIFwiYnBmX3hkcF9maWJfbG9va3VwXCIsXG4gICAgXCJicGZfc2tiX2ZpYl9sb29rdXBcIixcbiAgICBcImJwZl9maWJfc2V0X2Z3ZF9wYXJhbXNcIixcbiAgICBcImJwZl9maWJfdmxhbl9pbnB1dF9kZXZcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUgQlBGIEZJQiBsb29rdXAgaGVscGVyIChgYnBmX2ZpYl9sb29rdXBgKSwgYWRkaW5nIHN1cHBvcnQgZm9yIFZMQU5zIHZpYSBgQlBGX0ZJQl9MT09LVVBfVkxBTmAgYW5kIGBCUEZfRklCX0xPT0tVUF9WTEFOX0lOUFVUYCBmbGFncy4gVGhpcyBtb2RpZmllcyBjb3JlIHJvdXRpbmcgbG9va3VwIGxvZ2ljIHdpdGhpbiBCUEYgcHJvZ3JhbXMsIHdoaWNoIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSBieSBsb2FkaW5nIGFuZCBleGVjdXRpbmcgQlBGIHByb2dyYW1zIChYRFAgb3IgVEMpLiBGdXp6aW5nIGlzIHJlcXVpcmVkIHRvIGVuc3VyZSB0aGUgbmV3IFZMQU4gcmVzb2x1dGlvbiBsb2dpYyBhbmQgaXRzIGludGVyYWN0aW9uIHdpdGggdGhlIG5ldHdvcmtpbmcgc3RhY2sgaXMgcm9idXN0LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlZMQU5fODAyMVFcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJicGZfaXB2NF9maWJfbG9va3VwXCIsXG4gICAgXCJicGZfaXB2Nl9maWJfbG9va3VwXCIsXG4gICAgXCJicGZfeGRwX2ZpYl9sb29rdXBcIixcbiAgICBcImJwZl9za2JfZmliX2xvb2t1cFwiLFxuICAgIFwiYnBmX2ZpYl9zZXRfZndkX3BhcmFtc1wiLFxuICAgIFwiYnBmX2ZpYl92bGFuX2lucHV0X2RldlwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBCUEYgRklCIGxvb2t1cCBoZWxwZXIgKGBicGZfZmliX2xvb2t1cGApLCBhZGRpbmcgc3VwcG9ydCBmb3IgVkxBTnMgdmlhIGBCUEZfRklCX0xPT0tVUF9WTEFOYCBhbmQgYEJQRl9GSUJfTE9PS1VQX1ZMQU5fSU5QVVRgIGZsYWdzLiBUaGlzIG1vZGlmaWVzIGNvcmUgcm91dGluZyBsb29rdXAgbG9naWMgd2l0aGluIEJQRiBwcm9ncmFtcywgd2hpY2ggaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIGJ5IGxvYWRpbmcgYW5kIGV4ZWN1dGluZyBCUEYgcHJvZ3JhbXMgKFhEUCBvciBUQykuIEZ1enppbmcgaXMgcmVxdWlyZWQgdG8gZW5zdXJlIHRoZSBuZXcgVkxBTiByZXNvbHV0aW9uIGxvZ2ljIGFuZCBpdHMgaW50ZXJhY3Rpb24gd2l0aCB0aGUgbmV0d29ya2luZyBzdGFjayBpcyByb2J1c3QuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflowzdh5z[1] Phase: Succeeded StartedAt: 2026-06-24 03:27:42 +0000 UTC FinishedAt: 2026-06-24 03:27:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzdh5z[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-06-24 03:27:42 +0000 UTC FinishedAt: 2026-06-24 03:27:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzdh5z[2] Phase: Succeeded StartedAt: 2026-06-24 03:27:42 +0000 UTC FinishedAt: 2026-06-24 07:23:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzdh5z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["VLAN_8021Q"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_ipv4_fib_lookup","bpf_ipv6_fib_lookup","bpf_xdp_fib_lookup","bpf_skb_fib_lookup","bpf_fib_set_fwd_params","bpf_fib_vlan_input_dev"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["VLAN_8021Q"],"series_id":"89510d8e-b944-4377-a5b8-7fbad6539b44","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-06-24 03:27:42 +0000 UTC FinishedAt: 2026-06-24 07:23:14 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["VLAN_8021Q"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_ipv4_fib_lookup","bpf_ipv6_fib_lookup","bpf_xdp_fib_lookup","bpf_skb_fib_lookup","bpf_fib_set_fwd_params","bpf_fib_vlan_input_dev"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["VLAN_8021Q"],"series_id":"89510d8e-b944-4377-a5b8-7fbad6539b44","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowzdh5z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["VLAN_8021Q"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_ipv4_fib_lookup","bpf_ipv6_fib_lookup","bpf_xdp_fib_lookup","bpf_skb_fib_lookup","bpf_fib_set_fwd_params","bpf_fib_vlan_input_dev"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["VLAN_8021Q"],"series_id":"89510d8e-b944-4377-a5b8-7fbad6539b44","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-06-24 03:27:42 +0000 UTC FinishedAt: 2026-06-24 03:27:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzdh5z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["VLAN_8021Q"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_ipv4_fib_lookup","bpf_ipv6_fib_lookup","bpf_xdp_fib_lookup","bpf_skb_fib_lookup","bpf_fib_set_fwd_params","bpf_fib_vlan_input_dev"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["VLAN_8021Q"],"series_id":"89510d8e-b944-4377-a5b8-7fbad6539b44","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-06-24 03:27:42 +0000 UTC FinishedAt: 2026-06-24 03:27:48 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["VLAN_8021Q"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowzdh5z/series-workflowzdh5z-convert-artifact-3152370918/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowzdh5z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["VLAN_8021Q"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_ipv4_fib_lookup","bpf_ipv6_fib_lookup","bpf_xdp_fib_lookup","bpf_skb_fib_lookup","bpf_fib_set_fwd_params","bpf_fib_vlan_input_dev"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["VLAN_8021Q"],"series_id":"89510d8e-b944-4377-a5b8-7fbad6539b44","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-06-24 03:27:52 +0000 UTC FinishedAt: 2026-06-24 03:49:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzdh5z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["VLAN_8021Q"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_ipv4_fib_lookup","bpf_ipv6_fib_lookup","bpf_xdp_fib_lookup","bpf_skb_fib_lookup","bpf_fib_set_fwd_params","bpf_fib_vlan_input_dev"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["VLAN_8021Q"],"series_id":"89510d8e-b944-4377-a5b8-7fbad6539b44","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-06-24 03:27:52 +0000 UTC FinishedAt: 2026-06-24 03:49:46 +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:*31f7bdfa-84fa-4e13-824d-8012acd0d72b,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-workflowzdh5z/series-workflowzdh5z-convert-artifact-3152370918/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": "057b2ce3-ccfc-4848-a894-d7f9bbaa63a3", "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-workflowzdh5z/series-workflowzdh5z-build-action-2481323132/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowzdh5z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["VLAN_8021Q"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_ipv4_fib_lookup","bpf_ipv6_fib_lookup","bpf_xdp_fib_lookup","bpf_skb_fib_lookup","bpf_fib_set_fwd_params","bpf_fib_vlan_input_dev"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["VLAN_8021Q"],"series_id":"89510d8e-b944-4377-a5b8-7fbad6539b44","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-06-24 03:27:52 +0000 UTC FinishedAt: 2026-06-24 03:49:36 +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:*31f7bdfa-84fa-4e13-824d-8012acd0d72b,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-workflowzdh5z/series-workflowzdh5z-convert-artifact-3152370918/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": "057b2ce3-ccfc-4848-a894-d7f9bbaa63a3", "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-workflowzdh5z/series-workflowzdh5z-build-action-2481323132/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowzdh5z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["VLAN_8021Q"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_ipv4_fib_lookup","bpf_ipv6_fib_lookup","bpf_xdp_fib_lookup","bpf_skb_fib_lookup","bpf_fib_set_fwd_params","bpf_fib_vlan_input_dev"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["VLAN_8021Q"],"series_id":"89510d8e-b944-4377-a5b8-7fbad6539b44","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-06-24 03:49:46 +0000 UTC FinishedAt: 2026-06-24 03:49:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzdh5z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["VLAN_8021Q"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_ipv4_fib_lookup","bpf_ipv6_fib_lookup","bpf_xdp_fib_lookup","bpf_skb_fib_lookup","bpf_fib_set_fwd_params","bpf_fib_vlan_input_dev"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["VLAN_8021Q"],"series_id":"89510d8e-b944-4377-a5b8-7fbad6539b44","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-06-24 03:49:46 +0000 UTC FinishedAt: 2026-06-24 03:49:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzdh5z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["VLAN_8021Q"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_ipv4_fib_lookup","bpf_ipv6_fib_lookup","bpf_xdp_fib_lookup","bpf_skb_fib_lookup","bpf_fib_set_fwd_params","bpf_fib_vlan_input_dev"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["VLAN_8021Q"],"series_id":"89510d8e-b944-4377-a5b8-7fbad6539b44","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-06-24 03:49:46 +0000 UTC FinishedAt: 2026-06-24 03:49:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzdh5z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["VLAN_8021Q"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_ipv4_fib_lookup","bpf_ipv6_fib_lookup","bpf_xdp_fib_lookup","bpf_skb_fib_lookup","bpf_fib_set_fwd_params","bpf_fib_vlan_input_dev"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["VLAN_8021Q"],"series_id":"89510d8e-b944-4377-a5b8-7fbad6539b44","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-06-24 03:49:46 +0000 UTC FinishedAt: 2026-06-24 03:49:52 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["VLAN_8021Q"],"series_id":"89510d8e-b944-4377-a5b8-7fbad6539b44","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowzdh5z/series-workflowzdh5z-convert-artifact-2176524857/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowzdh5z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["VLAN_8021Q"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_ipv4_fib_lookup","bpf_ipv6_fib_lookup","bpf_xdp_fib_lookup","bpf_skb_fib_lookup","bpf_fib_set_fwd_params","bpf_fib_vlan_input_dev"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["VLAN_8021Q"],"series_id":"89510d8e-b944-4377-a5b8-7fbad6539b44","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-06-24 03:49:56 +0000 UTC FinishedAt: 2026-06-24 03:51:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzdh5z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["VLAN_8021Q"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_ipv4_fib_lookup","bpf_ipv6_fib_lookup","bpf_xdp_fib_lookup","bpf_skb_fib_lookup","bpf_fib_set_fwd_params","bpf_fib_vlan_input_dev"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["VLAN_8021Q"],"series_id":"89510d8e-b944-4377-a5b8-7fbad6539b44","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-06-24 03:49:56 +0000 UTC FinishedAt: 2026-06-24 03:51:38 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*057b2ce3-ccfc-4848-a894-d7f9bbaa63a3,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-workflowzdh5z/series-workflowzdh5z-build-action-2481323132/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-workflowzdh5z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["VLAN_8021Q"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_ipv4_fib_lookup","bpf_ipv6_fib_lookup","bpf_xdp_fib_lookup","bpf_skb_fib_lookup","bpf_fib_set_fwd_params","bpf_fib_vlan_input_dev"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["VLAN_8021Q"],"series_id":"89510d8e-b944-4377-a5b8-7fbad6539b44","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-06-24 03:51:48 +0000 UTC FinishedAt: 2026-06-24 03:51:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzdh5z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["VLAN_8021Q"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_ipv4_fib_lookup","bpf_ipv6_fib_lookup","bpf_xdp_fib_lookup","bpf_skb_fib_lookup","bpf_fib_set_fwd_params","bpf_fib_vlan_input_dev"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["VLAN_8021Q"],"series_id":"89510d8e-b944-4377-a5b8-7fbad6539b44","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-06-24 03:51:48 +0000 UTC FinishedAt: 2026-06-24 03:51:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzdh5z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["VLAN_8021Q"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_ipv4_fib_lookup","bpf_ipv6_fib_lookup","bpf_xdp_fib_lookup","bpf_skb_fib_lookup","bpf_fib_set_fwd_params","bpf_fib_vlan_input_dev"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["VLAN_8021Q"],"series_id":"89510d8e-b944-4377-a5b8-7fbad6539b44","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-06-24 03:51:48 +0000 UTC FinishedAt: 2026-06-24 04:18:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzdh5z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["VLAN_8021Q"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_ipv4_fib_lookup","bpf_ipv6_fib_lookup","bpf_xdp_fib_lookup","bpf_skb_fib_lookup","bpf_fib_set_fwd_params","bpf_fib_vlan_input_dev"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["VLAN_8021Q"],"series_id":"89510d8e-b944-4377-a5b8-7fbad6539b44","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-06-24 03:51:48 +0000 UTC FinishedAt: 2026-06-24 04:18:43 +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:*31f7bdfa-84fa-4e13-824d-8012acd0d72b,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-workflowzdh5z/series-workflowzdh5z-convert-artifact-2176524857/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": "fbeb9e80-8cf5-49a2-8f73-7207de399f4f", "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-workflowzdh5z/series-workflowzdh5z-build-action-1182202645/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowzdh5z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["VLAN_8021Q"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_ipv4_fib_lookup","bpf_ipv6_fib_lookup","bpf_xdp_fib_lookup","bpf_skb_fib_lookup","bpf_fib_set_fwd_params","bpf_fib_vlan_input_dev"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["VLAN_8021Q"],"series_id":"89510d8e-b944-4377-a5b8-7fbad6539b44","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-06-24 03:51:48 +0000 UTC FinishedAt: 2026-06-24 04:18:33 +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:*31f7bdfa-84fa-4e13-824d-8012acd0d72b,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-workflowzdh5z/series-workflowzdh5z-convert-artifact-2176524857/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": "fbeb9e80-8cf5-49a2-8f73-7207de399f4f", "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-workflowzdh5z/series-workflowzdh5z-build-action-1182202645/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowzdh5z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["VLAN_8021Q"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_ipv4_fib_lookup","bpf_ipv6_fib_lookup","bpf_xdp_fib_lookup","bpf_skb_fib_lookup","bpf_fib_set_fwd_params","bpf_fib_vlan_input_dev"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["VLAN_8021Q"],"series_id":"89510d8e-b944-4377-a5b8-7fbad6539b44","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-06-24 04:18:43 +0000 UTC FinishedAt: 2026-06-24 04:18:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzdh5z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["VLAN_8021Q"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_ipv4_fib_lookup","bpf_ipv6_fib_lookup","bpf_xdp_fib_lookup","bpf_skb_fib_lookup","bpf_fib_set_fwd_params","bpf_fib_vlan_input_dev"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["VLAN_8021Q"],"series_id":"89510d8e-b944-4377-a5b8-7fbad6539b44","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-06-24 04:18:43 +0000 UTC FinishedAt: 2026-06-24 04:18:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzdh5z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["VLAN_8021Q"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_ipv4_fib_lookup","bpf_ipv6_fib_lookup","bpf_xdp_fib_lookup","bpf_skb_fib_lookup","bpf_fib_set_fwd_params","bpf_fib_vlan_input_dev"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["VLAN_8021Q"],"series_id":"89510d8e-b944-4377-a5b8-7fbad6539b44","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-06-24 04:18:43 +0000 UTC FinishedAt: 2026-06-24 04:21:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzdh5z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["VLAN_8021Q"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_ipv4_fib_lookup","bpf_ipv6_fib_lookup","bpf_xdp_fib_lookup","bpf_skb_fib_lookup","bpf_fib_set_fwd_params","bpf_fib_vlan_input_dev"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["VLAN_8021Q"],"series_id":"89510d8e-b944-4377-a5b8-7fbad6539b44","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-06-24 04:18:43 +0000 UTC FinishedAt: 2026-06-24 04:21:05 +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:*fbeb9e80-8cf5-49a2-8f73-7207de399f4f,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-workflowzdh5z/series-workflowzdh5z-build-action-1182202645/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-workflowzdh5z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["VLAN_8021Q"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_ipv4_fib_lookup","bpf_ipv6_fib_lookup","bpf_xdp_fib_lookup","bpf_skb_fib_lookup","bpf_fib_set_fwd_params","bpf_fib_vlan_input_dev"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["VLAN_8021Q"],"series_id":"89510d8e-b944-4377-a5b8-7fbad6539b44","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-06-24 04:21:15 +0000 UTC FinishedAt: 2026-06-24 07:23:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzdh5z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["VLAN_8021Q"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_ipv4_fib_lookup","bpf_ipv6_fib_lookup","bpf_xdp_fib_lookup","bpf_skb_fib_lookup","bpf_fib_set_fwd_params","bpf_fib_vlan_input_dev"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["VLAN_8021Q"],"series_id":"89510d8e-b944-4377-a5b8-7fbad6539b44","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-06-24 04:21:15 +0000 UTC FinishedAt: 2026-06-24 07:23:14 +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-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_ipv4_fib_lookup","bpf_ipv6_fib_lookup","bpf_xdp_fib_lookup","bpf_skb_fib_lookup","bpf_fib_set_fwd_params","bpf_fib_vlan_input_dev"],"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:*057b2ce3-ccfc-4848-a894-d7f9bbaa63a3,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*fbeb9e80-8cf5-49a2-8f73-7207de399f4f,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-workflowzdh5z/series-workflowzdh5z-build-action-2481323132/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-workflowzdh5z/series-workflowzdh5z-build-action-1182202645/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowzdh5z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["VLAN_8021Q"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_ipv4_fib_lookup","bpf_ipv6_fib_lookup","bpf_xdp_fib_lookup","bpf_skb_fib_lookup","bpf_fib_set_fwd_params","bpf_fib_vlan_input_dev"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["VLAN_8021Q"],"series_id":"89510d8e-b944-4377-a5b8-7fbad6539b44","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-06-24 04:21:15 +0000 UTC FinishedAt: 2026-06-24 04:21:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzdh5z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["VLAN_8021Q"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_ipv4_fib_lookup","bpf_ipv6_fib_lookup","bpf_xdp_fib_lookup","bpf_skb_fib_lookup","bpf_fib_set_fwd_params","bpf_fib_vlan_input_dev"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["VLAN_8021Q"],"series_id":"89510d8e-b944-4377-a5b8-7fbad6539b44","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-06-24 04:21:15 +0000 UTC FinishedAt: 2026-06-24 04:21:32 +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-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_ipv4_fib_lookup","bpf_ipv6_fib_lookup","bpf_xdp_fib_lookup","bpf_skb_fib_lookup","bpf_fib_set_fwd_params","bpf_fib_vlan_input_dev"],"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-workflowzdh5z/series-workflowzdh5z-convert-artifact-2871106222/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowzdh5z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["VLAN_8021Q"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_ipv4_fib_lookup","bpf_ipv6_fib_lookup","bpf_xdp_fib_lookup","bpf_skb_fib_lookup","bpf_fib_set_fwd_params","bpf_fib_vlan_input_dev"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["VLAN_8021Q"],"series_id":"89510d8e-b944-4377-a5b8-7fbad6539b44","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-06-24 04:21:15 +0000 UTC FinishedAt: 2026-06-24 04:21:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzdh5z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["VLAN_8021Q"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_ipv4_fib_lookup","bpf_ipv6_fib_lookup","bpf_xdp_fib_lookup","bpf_skb_fib_lookup","bpf_fib_set_fwd_params","bpf_fib_vlan_input_dev"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["VLAN_8021Q"],"series_id":"89510d8e-b944-4377-a5b8-7fbad6539b44","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-06-24 04:21:15 +0000 UTC FinishedAt: 2026-06-24 04:21:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzdh5z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["VLAN_8021Q"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_ipv4_fib_lookup","bpf_ipv6_fib_lookup","bpf_xdp_fib_lookup","bpf_skb_fib_lookup","bpf_fib_set_fwd_params","bpf_fib_vlan_input_dev"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["VLAN_8021Q"],"series_id":"89510d8e-b944-4377-a5b8-7fbad6539b44","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-06-24 04:21:15 +0000 UTC FinishedAt: 2026-06-24 04:21:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzdh5z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["VLAN_8021Q"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_ipv4_fib_lookup","bpf_ipv6_fib_lookup","bpf_xdp_fib_lookup","bpf_skb_fib_lookup","bpf_fib_set_fwd_params","bpf_fib_vlan_input_dev"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["VLAN_8021Q"],"series_id":"89510d8e-b944-4377-a5b8-7fbad6539b44","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-06-24 04:21:40 +0000 UTC FinishedAt: 2026-06-24 07:23:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzdh5z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["VLAN_8021Q"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_ipv4_fib_lookup","bpf_ipv6_fib_lookup","bpf_xdp_fib_lookup","bpf_skb_fib_lookup","bpf_fib_set_fwd_params","bpf_fib_vlan_input_dev"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["VLAN_8021Q"],"series_id":"89510d8e-b944-4377-a5b8-7fbad6539b44","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-06-24 04:21:40 +0000 UTC FinishedAt: 2026-06-24 07:23:04 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*057b2ce3-ccfc-4848-a894-d7f9bbaa63a3,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*fbeb9e80-8cf5-49a2-8f73-7207de399f4f,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-workflowzdh5z/series-workflowzdh5z-build-action-2481323132/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-workflowzdh5z/series-workflowzdh5z-build-action-1182202645/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-workflowzdh5z/series-workflowzdh5z-convert-artifact-2871106222/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,}