Name: series-workflowkvj5q Phase: Succeeded StartedAt: 2026-06-27 11:33:02 +0000 UTC FinishedAt: 2026-06-27 15:37:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkvj5q[0] Phase: Succeeded StartedAt: 2026-06-27 11:33:02 +0000 UTC FinishedAt: 2026-06-27 11:47:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkvj5q[0].run-triage Phase: Succeeded StartedAt: 2026-06-27 11:33:02 +0000 UTC FinishedAt: 2026-06-27 11:47:27 +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": "8cd9520d35a6c38db6567e97dd93b1f11f185dc6", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NETDEVSIM", "INET_ESP_OFFLOAD", "INET_PSP" ], "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": "8cd9520d35a6c38db6567e97dd93b1f11f185dc6", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NETDEVSIM", "INET_ESP_OFFLOAD", "INET_PSP" ], "series_id": "7490d2b1-d4fd-4131-b5c7-d1040ee92603" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "__nsim_dev_port_add", "__nsim_dev_port_del", "nsim_create", "nsim_destroy", "nsim_ipsec_teardown", "nsim_psp_uninit", "nsim_udp_tunnels_info_destroy" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI3IDExOjM4PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+OG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVERFVlNJTSYjMzQ7LAogICAgJiMzNDtJTkVUX0VTUF9PRkZMT0FEJiMzNDssCiAgICAmIzM0O0lORVRfUFNQJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7X19uc2ltX2Rldl9wb3J0X2FkZCYjMzQ7LAogICAgJiMzNDtfX25zaW1fZGV2X3BvcnRfZGVsJiMzNDssCiAgICAmIzM0O25zaW1fY3JlYXRlJiMzNDssCiAgICAmIzM0O25zaW1fZGVzdHJveSYjMzQ7LAogICAgJiMzNDtuc2ltX2lwc2VjX3RlYXJkb3duJiMzNDssCiAgICAmIzM0O25zaW1fcHNwX3VuaW5pdCYjMzQ7LAogICAgJiMzNDtuc2ltX3VkcF90dW5uZWxzX2luZm9fZGVzdHJveSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgdGVhcmRvd24gc2VxdWVuY2Ugb2YgbmV0ZGV2c2ltIHBvcnRzLCBtb3ZpbmcgdGhlIGRlc3RydWN0aW9uIG9mIHRoZSBuZXRkZXZzaW0gaW5zdGFuY2UgKGBuc2ltX2Rlc3Ryb3lgKSBhZnRlciB0aGUgcmVjdXJzaXZlIHJlbW92YWwgb2YgaXRzIGRlYnVnZnMgZGlyZWN0b3J5LiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdGhhdCBmaXhlcyBwb3RlbnRpYWwgdXNlLWFmdGVyLWZyZWUgaXNzdWVzIHdoZW4gZGVidWdmcyBmaWxlcyBhcmUgYWNjZXNzZWQgY29uY3VycmVudGx5IHdpdGggcG9ydCBkZWxldGlvbi4gRnV6emluZyB0aGUgc2V0dXAgYW5kIHRlYXJkb3duIHBhdGhzIG9mIG5ldGRldnNpbSBwb3J0cyBpcyBpbXBvcnRhbnQgdG8gZW5zdXJlIHRoZSBuZXcgc2VxdWVuY2UgaXMgY29ycmVjdCBhbmQgZG9lc24mIzM5O3QgaW50cm9kdWNlIHJlZ3Jlc3Npb25zLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI3IDExOjM4PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgYjg4OWFiYjgzMGNmNWJmYzRiMGQ4Y2JmYzkxOTM5Yzg2ODE5NTg1NlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTYXQgSnVuIDI3IDExOjM4OjExIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L25ldGRldnNpbS9kZXYuYyBiL2RyaXZlcnMvbmV0L25ldGRldnNpbS9kZXYuY1xuaW5kZXggZjAwZmMyZjllYmRlYzcuLjRjMmM5YWExZWE3ZGMxIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2Rldi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9uZXRkZXZzaW0vZGV2LmNcbkBAIC0xNTE2LDE3ICYjNDM7MTUxNiwxNyBAQCBzdGF0aWMgaW50IF9fbnNpbV9kZXZfcG9ydF9hZGQoc3RydWN0IG5zaW1fZGV2ICpuc2ltX2RldiwgZW51bSBuc2ltX2Rldl9wb3J0X3R5cFxuIFx0XHRlcnIgPSBkZXZsX3JhdGVfbGVhZl9jcmVhdGUoXHUwMDI2bnNpbV9kZXZfcG9ydC1cdTAwM2VkZXZsaW5rX3BvcnQsXG4gXHRcdFx0XHRcdCAgICBuc2ltX2Rldl9wb3J0LCBOVUxMKTtcbiBcdFx0aWYgKGVycilcbi1cdFx0XHRnb3RvIGVycl9uc2ltX2Rlc3Ryb3k7XG4mIzQzO1x0XHRcdGdvdG8gZXJyX3BvcnRfZGVidWdmc19leGl0O1xuIFx0fVxuIFxuIFx0bGlzdF9hZGQoXHUwMDI2bnNpbV9kZXZfcG9ydC1cdTAwM2VsaXN0LCBcdTAwMjZuc2ltX2Rldi1cdTAwM2Vwb3J0X2xpc3QpO1xuIFxuIFx0cmV0dXJuIDA7XG4gXG4tZXJyX25zaW1fZGVzdHJveTpcbi1cdG5zaW1fZGVzdHJveShuc2ltX2Rldl9wb3J0LVx1MDAzZW5zKTtcbiBlcnJfcG9ydF9kZWJ1Z2ZzX2V4aXQ6XG4gXHRuc2ltX2Rldl9wb3J0X2RlYnVnZnNfZXhpdChuc2ltX2Rldl9wb3J0KTtcbiYjNDM7XHRpZiAoIUlTX0VSUl9PUl9OVUxMKG5zaW1fZGV2X3BvcnQtXHUwMDNlbnMpKVxuJiM0MztcdFx0bnNpbV9kZXN0cm95KG5zaW1fZGV2X3BvcnQtXHUwMDNlbnMpO1xuIGVycl9wb3J0X3Jlc291cmNlX3VucmVnaXN0ZXI6XG4gXHRpZiAobnNpbV9kZXZfcG9ydF9pc19wZihuc2ltX2Rldl9wb3J0KSlcbiBcdFx0ZGV2bF9wb3J0X3Jlc291cmNlc191bnJlZ2lzdGVyKGRldmxpbmtfcG9ydCk7XG5AQCAtMTU0NCw4ICYjNDM7MTU0NCw4IEBAIHN0YXRpYyB2b2lkIF9fbnNpbV9kZXZfcG9ydF9kZWwoc3RydWN0IG5zaW1fZGV2X3BvcnQgKm5zaW1fZGV2X3BvcnQpXG4gXHRsaXN0X2RlbChcdTAwMjZuc2ltX2Rldl9wb3J0LVx1MDAzZWxpc3QpO1xuIFx0aWYgKG5zaW1fZGV2X3BvcnRfaXNfdmYobnNpbV9kZXZfcG9ydCkpXG4gXHRcdGRldmxfcmF0ZV9sZWFmX2Rlc3Ryb3koXHUwMDI2bnNpbV9kZXZfcG9ydC1cdTAwM2VkZXZsaW5rX3BvcnQpO1xuLVx0bnNpbV9kZXN0cm95KG5zaW1fZGV2X3BvcnQtXHUwMDNlbnMpO1xuIFx0bnNpbV9kZXZfcG9ydF9kZWJ1Z2ZzX2V4aXQobnNpbV9kZXZfcG9ydCk7XG4mIzQzO1x0bnNpbV9kZXN0cm95KG5zaW1fZGV2X3BvcnQtXHUwMDNlbnMpO1xuIFx0aWYgKG5zaW1fZGV2X3BvcnRfaXNfcGYobnNpbV9kZXZfcG9ydCkpXG4gXHRcdGRldmxfcG9ydF9yZXNvdXJjZXNfdW5yZWdpc3RlcihkZXZsaW5rX3BvcnQpO1xuIFx0ZGV2bF9wb3J0X3VucmVnaXN0ZXIoZGV2bGlua19wb3J0KTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9uZXRkZXZzaW0vaXBzZWMuYyBiL2RyaXZlcnMvbmV0L25ldGRldnNpbS9pcHNlYy5jXG5pbmRleCAzNmExYmU0OTIzZDYxZi4uMGJjOWY0MmE1YTM2NWUgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9uZXRkZXZzaW0vaXBzZWMuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2lwc2VjLmNcbkBAIC0yOTIsNSAmIzQzOzI5Miw0IEBAIHZvaWQgbnNpbV9pcHNlY190ZWFyZG93bihzdHJ1Y3QgbmV0ZGV2c2ltICpucylcbiBcdGlmIChpcHNlYy1cdTAwM2Vjb3VudClcbiBcdFx0bmV0ZGV2X2Vycihucy1cdTAwM2VuZXRkZXYsIFwmIzM0O3RlYXJpbmcgZG93biBJUHNlYyBvZmZsb2FkIHdpdGggJWQgU0FzIGxlZnRcXG5cJiMzNDssXG4gXHRcdFx0ICAgaXBzZWMtXHUwMDNlY291bnQpO1xuLVx0ZGVidWdmc19yZW1vdmVfcmVjdXJzaXZlKGlwc2VjLVx1MDAzZXBmaWxlKTtcbiB9XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldi5jIGIvZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldi5jXG5pbmRleCBhNzUwNzY4OTEyYjVhMS4uMjQwMTA3MzY5MzRjOWUgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXYuY1xuQEAgLTExNTQsMTYgJiM0MzsxMTU0LDE3IEBAIHN0cnVjdCBuZXRkZXZzaW0gKm5zaW1fY3JlYXRlKHN0cnVjdCBuc2ltX2RldiAqbnNpbV9kZXYsXG4gXHRpZiAoZXJyKVxuIFx0XHRnb3RvIGVycl9mcmVlX25ldGRldjtcbiBcbi1cdG5zLVx1MDAzZXBwX2RmcyA9IGRlYnVnZnNfY3JlYXRlX2ZpbGUoXCYjMzQ7cHBfaG9sZFwmIzM0OywgMDYwMCwgbnNpbV9kZXZfcG9ydC1cdTAwM2VkZGlyLFxuLVx0XHRcdFx0XHQgbnMsIFx1MDAyNm5zaW1fcHBfaG9sZF9mb3BzKTtcbi1cdG5zLVx1MDAzZXFyX2RmcyA9IGRlYnVnZnNfY3JlYXRlX2ZpbGUoXCYjMzQ7cXVldWVfcmVzZXRcJiMzNDssIDAyMDAsXG4tXHRcdFx0XHRcdCBuc2ltX2Rldl9wb3J0LVx1MDAzZWRkaXIsIG5zLFxuLVx0XHRcdFx0XHQgXHUwMDI2bnNpbV9xcmVzZXRfZm9wcyk7XG4tXHRucy1cdTAwM2V2bGFuX2RmcyA9IGRlYnVnZnNfY3JlYXRlX2ZpbGUoXCYjMzQ7dmxhblwmIzM0OywgMDQwMCwgbnNpbV9kZXZfcG9ydC1cdTAwM2VkZGlyLFxuLVx0XHRcdFx0XHQgICBucywgXHUwMDI2bnNpbV92bGFuX2ZvcHMpO1xuJiM0MztcdGRlYnVnZnNfY3JlYXRlX2ZpbGUoXCYjMzQ7cHBfaG9sZFwmIzM0OywgMDYwMCwgbnNpbV9kZXZfcG9ydC1cdTAwM2VkZGlyLCBucyxcbiYjNDM7XHRcdFx0ICAgIFx1MDAyNm5zaW1fcHBfaG9sZF9mb3BzKTtcbiYjNDM7XHRkZWJ1Z2ZzX2NyZWF0ZV9maWxlKFwmIzM0O3F1ZXVlX3Jlc2V0XCYjMzQ7LCAwMjAwLCBuc2ltX2Rldl9wb3J0LVx1MDAzZWRkaXIsIG5zLFxuJiM0MztcdFx0XHQgICAgXHUwMDI2bnNpbV9xcmVzZXRfZm9wcyk7XG4mIzQzO1x0ZGVidWdmc19jcmVhdGVfZmlsZShcJiMzNDt2bGFuXCYjMzQ7LCAwNDAwLCBuc2ltX2Rldl9wb3J0LVx1MDAzZWRkaXIsIG5zLFxuJiM0MztcdFx0XHQgICAgXHUwMDI2bnNpbV92bGFuX2ZvcHMpO1xuIFx0cmV0dXJuIG5zO1xuIFxuIGVycl9mcmVlX25ldGRldjpcbiYjNDM7XHRkZWJ1Z2ZzX3JlbW92ZV9yZWN1cnNpdmUobnNpbV9kZXZfcG9ydC1cdTAwM2VkZGlyKTtcbiYjNDM7XHRuc2ltX2Rldl9wb3J0LVx1MDAzZWRkaXIgPSBOVUxMO1xuIFx0ZnJlZV9uZXRkZXYoZGV2KTtcbiBcdHJldHVybiBFUlJfUFRSKGVycik7XG4gfVxuQEAgLTExNzQsMTAgJiM0MzsxMTc1LDYgQEAgdm9pZCBuc2ltX2Rlc3Ryb3koc3RydWN0IG5ldGRldnNpbSAqbnMpXG4gXHRzdHJ1Y3QgbmV0ZGV2c2ltICpwZWVyO1xuIFx0dTE2IHZpZDtcbiBcbi1cdGRlYnVnZnNfcmVtb3ZlKG5zLVx1MDAzZXZsYW5fZGZzKTtcbi1cdGRlYnVnZnNfcmVtb3ZlKG5zLVx1MDAzZXFyX2Rmcyk7XG4tXHRkZWJ1Z2ZzX3JlbW92ZShucy1cdTAwM2VwcF9kZnMpO1xuLVxuIFx0aWYgKG5zLVx1MDAzZW5iLm5vdGlmaWVyX2NhbGwpXG4gXHRcdHVucmVnaXN0ZXJfbmV0ZGV2aWNlX25vdGlmaWVyX2Rldl9uZXQobnMtXHUwMDNlbmV0ZGV2LCBcdTAwMjZucy1cdTAwM2VuYixcbiBcdFx0XHRcdFx0XHQgICAgICBcdTAwMjZucy1cdTAwM2Vubik7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldnNpbS5oIGIvZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldnNpbS5oXG5pbmRleCBkOTA5YzQxNjBlYTFmZS4uMjljYmYwMDRhMzcxOTUgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2c2ltLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXZzaW0uaFxuQEAgLTE1Myw5ICYjNDM7MTUzLDYgQEAgc3RydWN0IG5ldGRldnNpbSB7XG4gXHR9IHVkcF9wb3J0cztcbiBcbiBcdHN0cnVjdCBwYWdlICpwYWdlO1xuLVx0c3RydWN0IGRlbnRyeSAqcHBfZGZzO1xuLVx0c3RydWN0IGRlbnRyeSAqcXJfZGZzO1xuLVx0c3RydWN0IGRlbnRyeSAqdmxhbl9kZnM7XG4gXG4gXHRzdHJ1Y3QgbnNpbV9ldGh0b29sIGV0aHRvb2w7XG4gXHRzdHJ1Y3QgbmV0ZGV2c2ltIF9fcmN1ICpwZWVyO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L25ldGRldnNpbS9wc3AuYyBiL2RyaXZlcnMvbmV0L25ldGRldnNpbS9wc3AuY1xuaW5kZXggNjkzNmVjYjgxNzNlMjAuLjJmMjdhMjExNDkxMmM3IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvbmV0ZGV2c2ltL3BzcC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9uZXRkZXZzaW0vcHNwLmNcbkBAIC0yMjcsNyAmIzQzOzIyNyw2IEBAIHN0YXRpYyB2b2lkIF9fbnNpbV9wc3BfdW5pbml0KHN0cnVjdCBuZXRkZXZzaW0gKm5zLCBib29sIHRlYXJkb3duKVxuIFxuIHZvaWQgbnNpbV9wc3BfdW5pbml0KHN0cnVjdCBuZXRkZXZzaW0gKm5zKVxuIHtcbi1cdGRlYnVnZnNfcmVtb3ZlKG5zLVx1MDAzZXBzcC5yZXJlZyk7XG4gXHRtdXRleF9kZXN0cm95KFx1MDAyNm5zLVx1MDAzZXBzcC5yZXJlZ19sb2NrKTtcbiBcdF9fbnNpbV9wc3BfdW5pbml0KG5zLCB0cnVlKTtcbiB9XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbmV0ZGV2c2ltL3VkcF90dW5uZWxzLmMgYi9kcml2ZXJzL25ldC9uZXRkZXZzaW0vdWRwX3R1bm5lbHMuY1xuaW5kZXggODlmZmY3NmU1MWNmNjQuLmE2OWIxNWYxMjhhYTFkIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvbmV0ZGV2c2ltL3VkcF90dW5uZWxzLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L25ldGRldnNpbS91ZHBfdHVubmVscy5jXG5AQCAtMTg4LDkgJiM0MzsxODgsNiBAQCBpbnQgbnNpbV91ZHBfdHVubmVsc19pbmZvX2NyZWF0ZShzdHJ1Y3QgbnNpbV9kZXYgKm5zaW1fZGV2LFxuIFxuIHZvaWQgbnNpbV91ZHBfdHVubmVsc19pbmZvX2Rlc3Ryb3koc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbiB7XG4tXHRzdHJ1Y3QgbmV0ZGV2c2ltICpucyA9IG5ldGRldl9wcml2KGRldik7XG4tXG4tXHRkZWJ1Z2ZzX3JlbW92ZV9yZWN1cnNpdmUobnMtXHUwMDNldWRwX3BvcnRzLmRkaXIpO1xuIFx0a2ZyZWUoZGV2LVx1MDAzZXVkcF90dW5uZWxfbmljX2luZm8pO1xuIFx0ZGV2LVx1MDAzZXVkcF90dW5uZWxfbmljX2luZm8gPSBOVUxMO1xuIH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNyAxMTozODwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT44bTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtORVRERVZTSU0mIzM0OywKICAgICYjMzQ7SU5FVF9FU1BfT0ZGTE9BRCYjMzQ7LAogICAgJiMzNDtJTkVUX1BTUCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O19fbnNpbV9kZXZfcG9ydF9hZGQmIzM0OywKICAgICYjMzQ7X19uc2ltX2Rldl9wb3J0X2RlbCYjMzQ7LAogICAgJiMzNDtuc2ltX2NyZWF0ZSYjMzQ7LAogICAgJiMzNDtuc2ltX2Rlc3Ryb3kmIzM0OywKICAgICYjMzQ7bnNpbV9pcHNlY190ZWFyZG93biYjMzQ7LAogICAgJiMzNDtuc2ltX3BzcF91bmluaXQmIzM0OywKICAgICYjMzQ7bnNpbV91ZHBfdHVubmVsc19pbmZvX2Rlc3Ryb3kmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHRlYXJkb3duIHNlcXVlbmNlIG9mIG5ldGRldnNpbSBwb3J0cywgbW92aW5nIHRoZSBkZXN0cnVjdGlvbiBvZiB0aGUgbmV0ZGV2c2ltIGluc3RhbmNlIChgbnNpbV9kZXN0cm95YCkgYWZ0ZXIgdGhlIHJlY3Vyc2l2ZSByZW1vdmFsIG9mIGl0cyBkZWJ1Z2ZzIGRpcmVjdG9yeS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgZml4ZXMgcG90ZW50aWFsIHVzZS1hZnRlci1mcmVlIGlzc3VlcyB3aGVuIGRlYnVnZnMgZmlsZXMgYXJlIGFjY2Vzc2VkIGNvbmN1cnJlbnRseSB3aXRoIHBvcnQgZGVsZXRpb24uIEZ1enppbmcgdGhlIHNldHVwIGFuZCB0ZWFyZG93biBwYXRocyBvZiBuZXRkZXZzaW0gcG9ydHMgaXMgaW1wb3J0YW50IHRvIGVuc3VyZSB0aGUgbmV3IHNlcXVlbmNlIGlzIGNvcnJlY3QgYW5kIGRvZXNuJiMzOTt0IGludHJvZHVjZSByZWdyZXNzaW9ucy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLApldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXQKICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LAogICBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgYjg4OWFiYjgzMGNmNWJmYzRiMGQ4Y2JmYzkxOTM5Yzg2ODE5NTg1NgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTYXQgSnVuIDI3IDExOjM4OjExIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2Rldi5jIGIvZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2Rldi5jCmluZGV4IGYwMGZjMmY5ZWJkZWM3Li40YzJjOWFhMWVhN2RjMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2Rldi5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L25ldGRldnNpbS9kZXYuYwpAQCAtMTUxNiwxNyAmIzQzOzE1MTYsMTcgQEAgc3RhdGljIGludCBfX25zaW1fZGV2X3BvcnRfYWRkKHN0cnVjdCBuc2ltX2RldiAqbnNpbV9kZXYsIGVudW0gbnNpbV9kZXZfcG9ydF90eXAKIAkJZXJyID0gZGV2bF9yYXRlX2xlYWZfY3JlYXRlKCZhbXA7bnNpbV9kZXZfcG9ydC0mZ3Q7ZGV2bGlua19wb3J0LAogCQkJCQkgICAgbnNpbV9kZXZfcG9ydCwgTlVMTCk7CiAJCWlmIChlcnIpCi0JCQlnb3RvIGVycl9uc2ltX2Rlc3Ryb3k7CiYjNDM7CQkJZ290byBlcnJfcG9ydF9kZWJ1Z2ZzX2V4aXQ7CiAJfQogCiAJbGlzdF9hZGQoJmFtcDtuc2ltX2Rldl9wb3J0LSZndDtsaXN0LCAmYW1wO25zaW1fZGV2LSZndDtwb3J0X2xpc3QpOwogCiAJcmV0dXJuIDA7CiAKLWVycl9uc2ltX2Rlc3Ryb3k6Ci0JbnNpbV9kZXN0cm95KG5zaW1fZGV2X3BvcnQtJmd0O25zKTsKIGVycl9wb3J0X2RlYnVnZnNfZXhpdDoKIAluc2ltX2Rldl9wb3J0X2RlYnVnZnNfZXhpdChuc2ltX2Rldl9wb3J0KTsKJiM0MzsJaWYgKCFJU19FUlJfT1JfTlVMTChuc2ltX2Rldl9wb3J0LSZndDtucykpCiYjNDM7CQluc2ltX2Rlc3Ryb3kobnNpbV9kZXZfcG9ydC0mZ3Q7bnMpOwogZXJyX3BvcnRfcmVzb3VyY2VfdW5yZWdpc3RlcjoKIAlpZiAobnNpbV9kZXZfcG9ydF9pc19wZihuc2ltX2Rldl9wb3J0KSkKIAkJZGV2bF9wb3J0X3Jlc291cmNlc191bnJlZ2lzdGVyKGRldmxpbmtfcG9ydCk7CkBAIC0xNTQ0LDggJiM0MzsxNTQ0LDggQEAgc3RhdGljIHZvaWQgX19uc2ltX2Rldl9wb3J0X2RlbChzdHJ1Y3QgbnNpbV9kZXZfcG9ydCAqbnNpbV9kZXZfcG9ydCkKIAlsaXN0X2RlbCgmYW1wO25zaW1fZGV2X3BvcnQtJmd0O2xpc3QpOwogCWlmIChuc2ltX2Rldl9wb3J0X2lzX3ZmKG5zaW1fZGV2X3BvcnQpKQogCQlkZXZsX3JhdGVfbGVhZl9kZXN0cm95KCZhbXA7bnNpbV9kZXZfcG9ydC0mZ3Q7ZGV2bGlua19wb3J0KTsKLQluc2ltX2Rlc3Ryb3kobnNpbV9kZXZfcG9ydC0mZ3Q7bnMpOwogCW5zaW1fZGV2X3BvcnRfZGVidWdmc19leGl0KG5zaW1fZGV2X3BvcnQpOwomIzQzOwluc2ltX2Rlc3Ryb3kobnNpbV9kZXZfcG9ydC0mZ3Q7bnMpOwogCWlmIChuc2ltX2Rldl9wb3J0X2lzX3BmKG5zaW1fZGV2X3BvcnQpKQogCQlkZXZsX3BvcnRfcmVzb3VyY2VzX3VucmVnaXN0ZXIoZGV2bGlua19wb3J0KTsKIAlkZXZsX3BvcnRfdW5yZWdpc3RlcihkZXZsaW5rX3BvcnQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2lwc2VjLmMgYi9kcml2ZXJzL25ldC9uZXRkZXZzaW0vaXBzZWMuYwppbmRleCAzNmExYmU0OTIzZDYxZi4uMGJjOWY0MmE1YTM2NWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L25ldGRldnNpbS9pcHNlYy5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L25ldGRldnNpbS9pcHNlYy5jCkBAIC0yOTIsNSAmIzQzOzI5Miw0IEBAIHZvaWQgbnNpbV9pcHNlY190ZWFyZG93bihzdHJ1Y3QgbmV0ZGV2c2ltICpucykKIAlpZiAoaXBzZWMtJmd0O2NvdW50KQogCQluZXRkZXZfZXJyKG5zLSZndDtuZXRkZXYsICYjMzQ7dGVhcmluZyBkb3duIElQc2VjIG9mZmxvYWQgd2l0aCAlZCBTQXMgbGVmdFxuJiMzNDssCiAJCQkgICBpcHNlYy0mZ3Q7Y291bnQpOwotCWRlYnVnZnNfcmVtb3ZlX3JlY3Vyc2l2ZShpcHNlYy0mZ3Q7cGZpbGUpOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldi5jIGIvZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldi5jCmluZGV4IGE3NTA3Njg5MTJiNWExLi4yNDAxMDczNjkzNGM5ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldi5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXYuYwpAQCAtMTE1NCwxNiAmIzQzOzExNTQsMTcgQEAgc3RydWN0IG5ldGRldnNpbSAqbnNpbV9jcmVhdGUoc3RydWN0IG5zaW1fZGV2ICpuc2ltX2RldiwKIAlpZiAoZXJyKQogCQlnb3RvIGVycl9mcmVlX25ldGRldjsKIAotCW5zLSZndDtwcF9kZnMgPSBkZWJ1Z2ZzX2NyZWF0ZV9maWxlKCYjMzQ7cHBfaG9sZCYjMzQ7LCAwNjAwLCBuc2ltX2Rldl9wb3J0LSZndDtkZGlyLAotCQkJCQkgbnMsICZhbXA7bnNpbV9wcF9ob2xkX2ZvcHMpOwotCW5zLSZndDtxcl9kZnMgPSBkZWJ1Z2ZzX2NyZWF0ZV9maWxlKCYjMzQ7cXVldWVfcmVzZXQmIzM0OywgMDIwMCwKLQkJCQkJIG5zaW1fZGV2X3BvcnQtJmd0O2RkaXIsIG5zLAotCQkJCQkgJmFtcDtuc2ltX3FyZXNldF9mb3BzKTsKLQlucy0mZ3Q7dmxhbl9kZnMgPSBkZWJ1Z2ZzX2NyZWF0ZV9maWxlKCYjMzQ7dmxhbiYjMzQ7LCAwNDAwLCBuc2ltX2Rldl9wb3J0LSZndDtkZGlyLAotCQkJCQkgICBucywgJmFtcDtuc2ltX3ZsYW5fZm9wcyk7CiYjNDM7CWRlYnVnZnNfY3JlYXRlX2ZpbGUoJiMzNDtwcF9ob2xkJiMzNDssIDA2MDAsIG5zaW1fZGV2X3BvcnQtJmd0O2RkaXIsIG5zLAomIzQzOwkJCSAgICAmYW1wO25zaW1fcHBfaG9sZF9mb3BzKTsKJiM0MzsJZGVidWdmc19jcmVhdGVfZmlsZSgmIzM0O3F1ZXVlX3Jlc2V0JiMzNDssIDAyMDAsIG5zaW1fZGV2X3BvcnQtJmd0O2RkaXIsIG5zLAomIzQzOwkJCSAgICAmYW1wO25zaW1fcXJlc2V0X2ZvcHMpOwomIzQzOwlkZWJ1Z2ZzX2NyZWF0ZV9maWxlKCYjMzQ7dmxhbiYjMzQ7LCAwNDAwLCBuc2ltX2Rldl9wb3J0LSZndDtkZGlyLCBucywKJiM0MzsJCQkgICAgJmFtcDtuc2ltX3ZsYW5fZm9wcyk7CiAJcmV0dXJuIG5zOwogCiBlcnJfZnJlZV9uZXRkZXY6CiYjNDM7CWRlYnVnZnNfcmVtb3ZlX3JlY3Vyc2l2ZShuc2ltX2Rldl9wb3J0LSZndDtkZGlyKTsKJiM0MzsJbnNpbV9kZXZfcG9ydC0mZ3Q7ZGRpciA9IE5VTEw7CiAJZnJlZV9uZXRkZXYoZGV2KTsKIAlyZXR1cm4gRVJSX1BUUihlcnIpOwogfQpAQCAtMTE3NCwxMCAmIzQzOzExNzUsNiBAQCB2b2lkIG5zaW1fZGVzdHJveShzdHJ1Y3QgbmV0ZGV2c2ltICpucykKIAlzdHJ1Y3QgbmV0ZGV2c2ltICpwZWVyOwogCXUxNiB2aWQ7CiAKLQlkZWJ1Z2ZzX3JlbW92ZShucy0mZ3Q7dmxhbl9kZnMpOwotCWRlYnVnZnNfcmVtb3ZlKG5zLSZndDtxcl9kZnMpOwotCWRlYnVnZnNfcmVtb3ZlKG5zLSZndDtwcF9kZnMpOwotCiAJaWYgKG5zLSZndDtuYi5ub3RpZmllcl9jYWxsKQogCQl1bnJlZ2lzdGVyX25ldGRldmljZV9ub3RpZmllcl9kZXZfbmV0KG5zLSZndDtuZXRkZXYsICZhbXA7bnMtJmd0O25iLAogCQkJCQkJICAgICAgJmFtcDtucy0mZ3Q7bm4pOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldnNpbS5oIGIvZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldnNpbS5oCmluZGV4IGQ5MDljNDE2MGVhMWZlLi4yOWNiZjAwNGEzNzE5NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldnNpbS5oCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXZzaW0uaApAQCAtMTUzLDkgJiM0MzsxNTMsNiBAQCBzdHJ1Y3QgbmV0ZGV2c2ltIHsKIAl9IHVkcF9wb3J0czsKIAogCXN0cnVjdCBwYWdlICpwYWdlOwotCXN0cnVjdCBkZW50cnkgKnBwX2RmczsKLQlzdHJ1Y3QgZGVudHJ5ICpxcl9kZnM7Ci0Jc3RydWN0IGRlbnRyeSAqdmxhbl9kZnM7CiAKIAlzdHJ1Y3QgbnNpbV9ldGh0b29sIGV0aHRvb2w7CiAJc3RydWN0IG5ldGRldnNpbSBfX3JjdSAqcGVlcjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L25ldGRldnNpbS9wc3AuYyBiL2RyaXZlcnMvbmV0L25ldGRldnNpbS9wc3AuYwppbmRleCA2OTM2ZWNiODE3M2UyMC4uMmYyN2EyMTE0OTEyYzcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L25ldGRldnNpbS9wc3AuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9uZXRkZXZzaW0vcHNwLmMKQEAgLTIyNyw3ICYjNDM7MjI3LDYgQEAgc3RhdGljIHZvaWQgX19uc2ltX3BzcF91bmluaXQoc3RydWN0IG5ldGRldnNpbSAqbnMsIGJvb2wgdGVhcmRvd24pCiAKIHZvaWQgbnNpbV9wc3BfdW5pbml0KHN0cnVjdCBuZXRkZXZzaW0gKm5zKQogewotCWRlYnVnZnNfcmVtb3ZlKG5zLSZndDtwc3AucmVyZWcpOwogCW11dGV4X2Rlc3Ryb3koJmFtcDtucy0mZ3Q7cHNwLnJlcmVnX2xvY2spOwogCV9fbnNpbV9wc3BfdW5pbml0KG5zLCB0cnVlKTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L25ldGRldnNpbS91ZHBfdHVubmVscy5jIGIvZHJpdmVycy9uZXQvbmV0ZGV2c2ltL3VkcF90dW5uZWxzLmMKaW5kZXggODlmZmY3NmU1MWNmNjQuLmE2OWIxNWYxMjhhYTFkIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9uZXRkZXZzaW0vdWRwX3R1bm5lbHMuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9uZXRkZXZzaW0vdWRwX3R1bm5lbHMuYwpAQCAtMTg4LDkgJiM0MzsxODgsNiBAQCBpbnQgbnNpbV91ZHBfdHVubmVsc19pbmZvX2NyZWF0ZShzdHJ1Y3QgbnNpbV9kZXYgKm5zaW1fZGV2LAogCiB2b2lkIG5zaW1fdWRwX3R1bm5lbHNfaW5mb19kZXN0cm95KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7Ci0Jc3RydWN0IG5ldGRldnNpbSAqbnMgPSBuZXRkZXZfcHJpdihkZXYpOwotCi0JZGVidWdmc19yZW1vdmVfcmVjdXJzaXZlKG5zLSZndDt1ZHBfcG9ydHMuZGRpcik7CiAJa2ZyZWUoZGV2LSZndDt1ZHBfdHVubmVsX25pY19pbmZvKTsKIAlkZXYtJmd0O3VkcF90dW5uZWxfbmljX2luZm8gPSBOVUxMOwogfQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNyAxMTozODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNzY0CgkJCQkJCQlvdXRwdXQ6IDI1CgkJCQkJCQl0aG91Z2h0czogODc1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIERlYnVnZnMgQ2xlYW51cCBQYXRjaCBpbiBuZXRkZXZzaW0qKgoKT2theSwgc28gSSYjMzk7dmUgZ290IHRoaXMgcGF0Y2ggYWZmZWN0aW5nIGBkcml2ZXJzL25ldC9uZXRkZXZzaW0vYCwgdG91Y2hpbmcgYGRldi5jYCwgYGlwc2VjLmNgLCBgbmV0ZGV2LmNgLCBgbmV0ZGV2c2ltLmhgLCBgcHNwLmNgLCBhbmQgYHVkcF90dW5uZWxzLmNgLiBUaGUgY2hhbmdlcyBhcmUgY2xlYXJseSBjZW50ZXJlZCBhcm91bmQgY2xlYW5pbmcgdXAgdGhlIGRlYnVnZnMgZW50cmllcy4gTGV0JiMzOTtzIGRpZyBpbi4KCkluIGBkZXYuY2AsIHRoZXJlJiMzOTtzIGEgbW9kaWZpY2F0aW9uIHRvIGhvdyBgbnNpbV9kZXN0cm95YCBpcyBjYWxsZWQgd2l0aGluIHRoZSBlcnJvciBoYW5kbGluZyBwYXRocy4gIEl0IGxvb2tzIGxpa2UgdGhlcmUmIzM5O3MgYSBwb3RlbnRpYWwgaXNzdWUgd2hlcmUgYG5zaW1fZGVzdHJveWAgd2FzIGJlaW5nIGNhbGxlZCAqYmVmb3JlKiBgbnNpbV9kZXZfcG9ydF9kZWJ1Z2ZzX2V4aXRgLCBhbmQgbm93IGl0JiMzOTtzIGJlaW5nIGNhbGxlZCAqYWZ0ZXIqLiAgQSBzaW1pbGFyIGNoYW5nZSBhcHBlYXJzIGluIGBfX25zaW1fZGV2X3BvcnRfZGVsYC4gVGhlIGNyaXRpY2FsIGNoYW5nZSBhcHBlYXJzIHRvIGJlIHRoYXQgdGhlIGRlYnVnZnMgZXhpdCBpcyBub3cgKmJlZm9yZSogdGhlIGBuc2ltX2Rlc3Ryb3lgIGNhbGwgaW4gYm90aCBsb2NhdGlvbnMuIFRoaXMgc3VnZ2VzdHMgYSBjYXJlZnVsIHJlLW9yZGVyaW5nLgoKVGhlbiwgdGhlcmUmIzM5O3MgYSByZW1vdmFsIG9mIGBkZWJ1Z2ZzX3JlbW92ZV9yZWN1cnNpdmVgIGNhbGxzIGluIGBpcHNlYy5jYCBhbmQgaW4gYHVkcF90dW5uZWxzLmNgLCBpbXBseWluZyB0aGUgcmVtb3ZhbCBvZiBkZWJ1Z2ZzIGVudHJpZXMgaXMgaGFuZGxlZCBkaWZmZXJlbnRseSBub3cuIExpa2V3aXNlLCBpbiBgbmV0ZGV2LmNgIHRoZSBgZGVidWdmc19jcmVhdGVfZmlsZWAgY2FsbHMgZm9yIGBwcF9ob2xkYCwgYHF1ZXVlX3Jlc2V0YCwgYW5kIGB2bGFuYCBhcmUgc2ltcGxpZmllZC4gIEZpbmFsbHksIGBuc2ltX2Rlc3Ryb3lgIGdldHMgc29tZSBkZWJ1Z2dpbmcgcmVtb3ZlIGNhbGxzIHRvbzogYHZsYW5fZGZzYCwgYHFyX2Rmc2AsIGFuZCBgcHBfZGZzYC4gVGhpcyBzZWVtcyBsaWtlIGEgY29uc2lzdGVudCBwYXR0ZXJuLgoKQWhhISAgSSBzZWUgdGhlIHBhdHRlcm4gbm93LiBCeSBtb3ZpbmcgdGhlIGBuc2ltX2Rlc3Ryb3lgIGNhbGwgKmFmdGVyKiBgbnNpbV9kZXZfcG9ydF9kZWJ1Z2ZzX2V4aXRgLCB0aGUgcmVtb3ZhbCBvZiBgbnNpbV9kZXZfcG9ydC0mZ3Q7ZGRpcmAgYXV0b21hdGljYWxseSByZW1vdmVzIGFsbCBkZWJ1Z2ZzIGZpbGVzIGNyZWF0ZWQgdW5kZXIgdGhhdCBkaXJlY3RvcnkuIFRoZSBwcmV2aW91cyBjb2RlIHdhcyBleHBsaWNpdGx5IHJlbW92aW5nIGluZGl2aWR1YWwgZmlsZXMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSwgYmVjYXVzZSBpdCBjaGFuZ2VzIHRoZSBvcmRlciBvZiBvcGVyYXRpb25zLiBXaGF0IHdhcyB0aGUgKmludGVudCogb2YgdGhpcyBjaGFuZ2U/CgpOb3cgdGhlIHF1ZXN0aW9uIGlzLCAqd2h5KiB0aGlzIGNoYW5nZT8gSXMgdGhpcyBqdXN0IHRpZHlpbmcgdXAgdGhlIGNvZGUsIG9yIGFyZSB3ZSBhZGRyZXNzaW5nIGEgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9uIG9yIGJ1Zz8gV2FzIHRoZXJlIGEgY2hhbmNlIHRoZXNlIGRlYnVnZnMgZmlsZXMgd2VyZSBiZWluZyBhY2Nlc3NlZCAqYWZ0ZXIqIHRoZXkgd2VyZSByZW1vdmVkIHVuZGVyIHRoZSBvbGQgaW1wbGVtZW50YXRpb24/IEkgc2hvdWxkIHJldmlldyB0aGUgYG5zaW1fZGV2X3BvcnRfZGVidWdmc19leGl0YCBmdW5jdGlvbiB0byBiZSBzdXJlLiBJdCBjb3VsZCBiZSB3b3J0aCBmdXp6aW5nIHRoaXMsIHRvIHNlZSBpZiBhbnl0aGluZyBnZXRzIGNhdWdodC4gTXkgZ3V0IHNheXMgdGhpcyBpcyBhIHN1YnRsZSBidWcgZml4LCBvciBhdCBsZWFzdCBhIGNsZWFuZXIgaW1wbGVtZW50YXRpb24uIFRpbWUgdG8gY2hlY2sgYG5zaW1fZGV2X3BvcnRfZGVidWdmc19leGl0YC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNyAxMTozODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuc2ltX2Rldl9wb3J0X2RlYnVnZnNfZXhpdCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9uZXRkZXZzaW0vZGV2LmM9NDA3PXN0YXRpYyBpbnQgbnNpbV9kZXZfcG9ydF9kZWJ1Z2ZzX2luaXQoc3RydWN0IG5zaW1fZGV2ICpuc2ltX2Rldixcbi0tXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vZGV2LmMtNDQxLVxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2Rldi5jOjQ0MjpzdGF0aWMgdm9pZCBuc2ltX2Rldl9wb3J0X2RlYnVnZnNfZXhpdChzdHJ1Y3QgbnNpbV9kZXZfcG9ydCAqbnNpbV9kZXZfcG9ydClcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9kZXYuYy00NDMte1xuLS1cbmRyaXZlcnMvbmV0L25ldGRldnNpbS9kZXYuYz0xNDU1PXN0YXRpYyBpbnQgX19uc2ltX2Rldl9wb3J0X2FkZChzdHJ1Y3QgbnNpbV9kZXYgKm5zaW1fZGV2LCBlbnVtIG5zaW1fZGV2X3BvcnRfdHlwZSB0eXBlLFxuLS1cbmRyaXZlcnMvbmV0L25ldGRldnNpbS9kZXYuYy0xNTI2LWVycl9wb3J0X2RlYnVnZnNfZXhpdDpcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9kZXYuYzoxNTI3Olx0bnNpbV9kZXZfcG9ydF9kZWJ1Z2ZzX2V4aXQobnNpbV9kZXZfcG9ydCk7XG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vZGV2LmMtMTUyOC1cdGlmICghSVNfRVJSX09SX05VTEwobnNpbV9kZXZfcG9ydC1cdTAwM2VucykpXG4tLVxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2Rldi5jPTE1NDA9c3RhdGljIHZvaWQgX19uc2ltX2Rldl9wb3J0X2RlbChzdHJ1Y3QgbnNpbV9kZXZfcG9ydCAqbnNpbV9kZXZfcG9ydClcbi0tXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vZGV2LmMtMTU0Ni1cdFx0ZGV2bF9yYXRlX2xlYWZfZGVzdHJveShcdTAwMjZuc2ltX2Rldl9wb3J0LVx1MDAzZWRldmxpbmtfcG9ydCk7XG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vZGV2LmM6MTU0NzpcdG5zaW1fZGV2X3BvcnRfZGVidWdmc19leGl0KG5zaW1fZGV2X3BvcnQpO1xuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2Rldi5jLTE1NDgtXHRuc2ltX2Rlc3Ryb3kobnNpbV9kZXZfcG9ydC1cdTAwM2Vucyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjcgMTE6Mzk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTY4MgoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBhc3N1bWluZyBJJiMzOTttIGFuIGV4cGVydCBpbiBkZWJ1Z2dpbmcgYW5kIGtlcm5lbC1sZXZlbCBkZXZpY2UgZHJpdmVyIGludGVyYWN0aW9ucy4KCioqbnNpbV9kZXZfcG9ydF9kZWJ1Z2ZzX2V4aXQ6IEEgRGVlcCBEaXZlKioKCkFscmlnaHQsIGBuc2ltX2Rldl9wb3J0X2RlYnVnZnNfZXhpdGAuIFRoYXQgZnVuY3Rpb24gbmFtZSBpbW1lZGlhdGVseSBzY3JlYW1zIGEgZmV3IHRoaW5ncyB0byBtZS4gRmlyc3QsICYjMzQ7bnNpbSYjMzQ7IHN1Z2dlc3RzIHRoaXMgaXMgcmVsYXRlZCB0byBhIG5ldHdvcmsgc2ltdWxhdG9yLCBsaWtlbHkgdXNlZCBmb3IgdGVzdGluZyBhbmQgZGV2ZWxvcG1lbnQuICYjMzQ7ZGV2X3BvcnQmIzM0OyBoaW50cyBhdCBhIGRldmljZSBwb3J0IGFic3RyYWN0aW9uLCBhIGxpa2VseSBwb2ludCBvZiBpbnRlcmFjdGlvbiBvciBjb25maWd1cmF0aW9uLiBBbmQgJiMzNDtkZWJ1Z2ZzJiMzNDsgaXMgdGhlIGtpY2tlciDigJMgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBzb21ldGhpbmcgcmVsYXRlZCB0byBkZWJ1Z2ZzLCB0aGUga2VybmVsJiMzOTtzIGRlYnVnZ2luZyBmaWxlc3lzdGVtLgoKTXkgaW5pdGlhbCB0aG91Z2h0IGlzLCB0aGlzIGZ1bmN0aW9uIGlzIHJlc3BvbnNpYmxlIGZvciB0aGUgY2xlYW51cCBvciB0ZWFyZG93biBwcm9jZWR1cmUgYXNzb2NpYXRlZCB3aXRoIHRoZSBzaW11bGF0ZWQgZGV2aWNlIHBvcnQgYW5kIGl0cyBkZWJ1ZyBpbnRlcmZhY2Ugd2l0aGluIHRoZSBuZXR3b3JrIHNpbXVsYXRpb24gZW52aXJvbm1lbnQuIEnigJltIHBpY3R1cmluZyBhIHNpdHVhdGlvbiB3aGVyZSB0aGUgc2ltdWxhdG9yIGhhcyBiZWVuIGNvbmZpZ3VyZWQsIGEgdmlydHVhbCBuZXR3b3JrIGludGVyZmFjZSBtaWdodCBiZSB1cCwgYW5kIG5vdywgd2UmIzM5O3JlIGV4aXRpbmcsIHdoZXRoZXIgZ3JhY2VmdWxseSBvciBhYnJ1cHRseS4gVGhpcyBmdW5jdGlvbiBpcyBsaWtlbHkgcmVzcG9uc2libGUgZm9yIHJlbGVhc2luZyByZXNvdXJjZXMsIHVucmVnaXN0ZXJpbmcgdGhlIGRlYnVnZnMgZW50cmllcywgYW5kIGdlbmVyYWxseSBlbnN1cmluZyBhIGNsZWFuIHN0YXRlLgoKTXkgbWluZCBpbW1lZGlhdGVseSBzdGFydHMgdGlja2luZyB0aHJvdWdoIHBvdGVudGlhbCBhcmVhcyBvZiBjb25jZXJuOgoKKiAgICoqUmVzb3VyY2UgbGVha3M6KiogSXMgaXQgbWFraW5nIHN1cmUgYWxsIGFsbG9jYXRlZCBtZW1vcnkgaXMgZnJlZWQ/IEFyZSBmaWxlIGRlc2NyaXB0b3JzIHByb3Blcmx5IGNsb3NlZD8KKiAgICoqRGVidWdmcyBlbnRyaWVzOioqIElzIGl0IGNhcmVmdWxseSByZW1vdmluZyB0aGUgZGVidWdmcyBlbnRyaWVzIHRoYXQgd2VyZSBjcmVhdGVkIGZvciB0aGUgZGV2aWNlIHBvcnQ/IExlYXZpbmcgc3RhbGUgZW50cmllcyB3b3VsZCBiZSBhIGh1Z2Ugbm8tbm8uIEkgbmVlZCB0byBsb29rIGZvciB1bnJlZ2lzdHJhdGlvbiBmdW5jdGlvbnMuCiogICAqKlJhY2UgY29uZGl0aW9uczoqKiBJZiB0aGlzIGNhbiBiZSBjYWxsZWQgY29uY3VycmVudGx5IHdpdGggb3RoZXIgcGFydHMgb2YgdGhlIHNpbXVsYXRvciwgYXJlIHRoZXJlIHByb3BlciBsb2NrcyBpbiBwbGFjZSB0byBwcm90ZWN0IHNoYXJlZCBkYXRhIGFuZCBwcmV2ZW50IGNvcnJ1cHRpb24gZHVyaW5nIGNsZWFudXA/CiogICAqKkVycm9yIGhhbmRsaW5nOioqIFdoYXQgaGFwcGVucyBpZiBzb21ldGhpbmcgZ29lcyB3cm9uZyBkdXJpbmcgY2xlYW51cD8gRG9lcyBpdCBoYW5kbGUgZXJyb3JzIGdyYWNlZnVsbHksIGxvZyByZWxldmFudCBpbmZvcm1hdGlvbiwgYW5kIGF2b2lkIGxlYXZpbmcgdGhlIHN5c3RlbSBpbiBhbiB1bnVzYWJsZSBzdGF0ZT8gSXMgaXQgY2hlY2tpbmcgdGhlIHJldHVybiBjb2RlcyBmb3IgdGhlIGZ1bmN0aW9ucyBpdCBjYWxscz8KKiAgICoqUHJvcGVyIG9yZGVyIG9mIG9wZXJhdGlvbnM6KiogV2hhdCYjMzk7cyB0aGUgY29ycmVjdCBzZXF1ZW5jZSBmb3IgdW5yZWdpc3RlcmluZyBkZWJ1Z2ZzIGVudHJpZXM/IEkgbmVlZCB0byBlbnN1cmUgdGhlcmUgYXJlIG5vIGRlcGVuZGVuY2llcyB0aGF0IGNvdWxkIGxlYWQgdG8gY3Jhc2hlcyBvciBkYXRhIGNvcnJ1cHRpb24uCiogICAqKlNpbXVsYXRvciBpbXBhY3Q6KiogSXMgdGhpcyBmdW5jdGlvbiB0cnVseSBpc29sYXRpbmcgdGhlIGVmZmVjdHMgb24gdGhlIGRlYnVnIGZpbGVzeXN0ZW0sIG9yIGRvZXMgaXQgcmlzayBicmVha2luZyBvdGhlciBhc3BlY3RzIG9mIHRoZSBzaW11bGF0b3IgdGhhdCB1c2UgdGhpcyBkZWJ1Z2ZzPwoKRXNzZW50aWFsbHksIEkmIzM5O20gbWVudGFsbHkgYnVpbGRpbmcgYSBjaGVja2xpc3Qgb2Ygd2hhdCBJJiMzOTtkIGV4cGVjdCB0byBzZWUgd2l0aGluIHRoYXQgZnVuY3Rpb24gYW5kIHRoZSBzdXJyb3VuZGluZyBjb2RlLCBmb2N1c2luZyBvbiBwb3RlbnRpYWwgcHJvYmxlbSBhcmVhcyB0aGF0IG9mdGVuIG1hbmlmZXN0IGR1cmluZyBkZWJ1Z2ZzIG9wZXJhdGlvbnMgYW5kIHJlc291cmNlIG1hbmFnZW1lbnQgd2l0aGluIGtlcm5lbC1sZXZlbCBtb2R1bGVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI3IDExOjM5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2Rldi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNDQwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA0NDA6XHR9XG4gNDQxOlx0XG4gNDQyOlx0c3RhdGljIHZvaWQgbnNpbV9kZXZfcG9ydF9kZWJ1Z2ZzX2V4aXQoc3RydWN0IG5zaW1fZGV2X3BvcnQgKm5zaW1fZGV2X3BvcnQpXG4gNDQzOlx0e1xuIDQ0NDpcdFx0ZGVidWdmc19yZW1vdmVfcmVjdXJzaXZlKG5zaW1fZGV2X3BvcnQtXHUwMDNlZGRpcik7XG4gNDQ1Olx0fVxuIDQ0NjpcdFxuIDQ0NzpcdHN0YXRpYyBpbnQgbnNpbV9kZXZfcmVzb3VyY2VzX3JlZ2lzdGVyKHN0cnVjdCBkZXZsaW5rICpkZXZsaW5rKVxuIDQ0ODpcdHtcbiA0NDk6XHRcdHN0cnVjdCBkZXZsaW5rX3Jlc291cmNlX3NpemVfcGFyYW1zIHBhcmFtcyA9IHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNyAxMTozOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2NDIxCgkJCQkJCQlvdXRwdXQ6IDIzCgkJCQkJCQl0aG91Z2h0czogNDM4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgRGVidWdmcyBDbGVhbnVwIE9yZGVyKioKCk9rYXksIHNvIGBuc2ltX2Rldl9wb3J0X2RlYnVnZnNfZXhpdGAgbm93IGp1c3QgZG9lcyBhIHJlY3Vyc2l2ZSBgZGVidWdmc19yZW1vdmVgLiBUaGUgcGF0Y2ggc3RyZWFtbGluZXMgdGhlIHJlbW92YWwgb2YgZGVidWdmcyBlbnRyaWVzLCByZWx5aW5nIG9uIHRoaXMgZnVuY3Rpb24gaW5zdGVhZCBvZiBzY2F0dGVyZWQgYGRlYnVnZnNfcmVtb3ZlYCBjYWxscyB3aXRoaW4gYG5zaW1fZGVzdHJveWAgYW5kIGl0cyBzdWItY29tcG9uZW50cy4gQnV0IGhlcmUmIzM5O3MgdGhlIGtpY2tlcjogYG5zaW1fZGVzdHJveWAgbm93IGV4ZWN1dGVzICphZnRlciogYG5zaW1fZGV2X3BvcnRfZGVidWdmc19leGl0YC4gVGhhdCBtZWFucyB0aGUgZGVidWdmcyBmaWxlcyBhcmUgYmVpbmcgbnVrZWQgKmJlZm9yZSogYG5zaW1fZGVzdHJveWAgZ2V0cyBhIGNoYW5jZSB0byBmcmVlIHRoZSB1bmRlcmx5aW5nIHN0cnVjdHVyZXMuCgpBaGEhIFRoaXMgb3JkZXIgc2hpZnQgaXMgYSB1c2UtYWZ0ZXItZnJlZSBtaXRpZ2F0aW9uLiBJZiBhIGRlYnVnZnMgZmlsZSBpcyBhY2Nlc3NlZCBkdXJpbmcgdGhlIGV4ZWN1dGlvbiBvZiBgbnNpbV9kZXN0cm95YCwgb3IgcG90ZW50aWFsbHkgZXZlbiBhZnRlciBpdCBoYXMgc3RhcnRlZCBmcmVlaW5nIHJlc291cmNlcywgdGhlIHJlbW92YWwgb2YgdGhlIGRlYnVnZnMgZW50cmllcyAqYmVmb3JlKiB0aGF0IHBvaW50IGlzIGEgc2FmZXR5IG5ldC4gVGhpcyBsb29rcyBsaWtlIGEgZGVmaW5pdGUgZml4IGZvciBhIHBvdGVudGlhbCB2dWxuZXJhYmlsaXR5IGluIGhvdyB0aGUgZGVidWdmcyBpbnRlcmZhY2UgaW50ZXJhY3RzIHdpdGggdGhlIG5ldGRldnNpbSB0ZWFyZG93biBzZXF1ZW5jZS4KClRoZSBxdWVzdGlvbiBub3cgaXMgd2hldGhlciB0aGlzIGlzIHdvcnRoIGZ1enppbmcuIEl0JiMzOTtzIG5vdCBhIG5ldyBmZWF0dXJlLCBidXQgYSBidWcgZml4LiBGdXp6aW5nIHdvdWxkIGludm9sdmUgcHJvYmluZyB0aGUgbmV0ZGV2c2ltIGRlYnVnZnMgaW50ZXJmYWNlIHdoaWxlIGNyZWF0aW5nIGFuZCBkZXN0cm95aW5nIG5ldGRldnNpbSBwb3J0cy4gU2luY2UgaXQmIzM5O3MgY2hhbmdpbmcgdGhlIG9yZGVyIG9mIGRlc3RydWN0aW9uIGR1cmluZyB0ZWFyZG93biwgaXQmIzM5O3MgYSBmdW5jdGlvbmFsIGNoYW5nZSwgdGhvdWdoIHN1YnRsZS4gU3l6a2FsbGVyLCB3aXRoIGl0cyBrbm93biBwcm93ZXNzIGluIG5ldGRldnNpbSwgc2hvdWxkIGJlIGFibGUgdG8gZXhlcmNpc2UgdGhpcyBjb2RlIHBhdGggYnkgY29uY3VycmVudGx5IGNyZWF0aW5nLCBkZXN0cm95aW5nLCBhbmQgYWNjZXNzaW5nIGRlYnVnZnMuIE5ldGRldnNpbSBpdHNlbGYsIGJlaW5nIGEgc29mdHdhcmUgc2ltdWxhdG9yLCBpcyBhbHJlYWR5IGEgc3l6a2FsbGVyIHRhcmdldC4gUGVyaGFwcyBpdCYjMzk7cyB3b3J0aCBob25pbmcgaW4gb24gc3BlY2lmaWMgZnVuY3Rpb25zOiBgX19uc2ltX2Rldl9wb3J0X2FkZGAsIGBfX25zaW1fZGV2X3BvcnRfZGVsYCwgYG5zaW1fZGVzdHJveWAsIGFuZCBgbnNpbV9jcmVhdGVgLiBUaGVzZSBhcmUgdGhlIGtleSBmdW5jdGlvbnMgaW52b2x2ZWQgaW4gdGhlIGxpZmVjeWNsZSBvZiBuZXRkZXZzaW0gcG9ydHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjcgMTE6NDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7X19uc2ltX2Rldl9wb3J0X2FkZCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9uZXRkZXZzaW0vZGV2LmM9NjQ4PXN0YXRpYyBpbnRcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9kZXYuYzo2NDk6X19uc2ltX2Rldl9wb3J0X2FkZChzdHJ1Y3QgbnNpbV9kZXYgKm5zaW1fZGV2LCBlbnVtIG5zaW1fZGV2X3BvcnRfdHlwZSB0eXBlLFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2Rldi5jLTY1MC1cdFx0ICAgIHVuc2lnbmVkIGludCBwb3J0X2luZGV4LCB1OCBwZXJtX2FkZHJbRVRIX0FMRU5dKTtcbi0tXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vZGV2LmM9NjY3PXN0YXRpYyBpbnQgbnNpbV9lc3dfc3dpdGNoZGV2X2VuYWJsZShzdHJ1Y3QgbnNpbV9kZXYgKm5zaW1fZGV2LFxuLS1cbmRyaXZlcnMvbmV0L25ldGRldnNpbS9kZXYuYy02NzMtXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBuc2ltX2Rldl9nZXRfdmZzKG5zaW1fZGV2KTsgaSYjNDM7JiM0MzspIHtcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9kZXYuYzo2NzQ6XHRcdGVyciA9IF9fbnNpbV9kZXZfcG9ydF9hZGQobnNpbV9kZXYsIE5TSU1fREVWX1BPUlRfVFlQRV9WRiwgaSwgTlVMTCk7XG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vZGV2LmMtNjc1LVx0XHRpZiAoZXJyKSB7XG4tLVxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2Rldi5jPTE0MjU9c3RhdGljIGNvbnN0IHN0cnVjdCBkZXZsaW5rX29wcyBuc2ltX2Rldl9kZXZsaW5rX29wcyA9IHtcbi0tXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vZGV2LmMtMTQ1NC1cbmRyaXZlcnMvbmV0L25ldGRldnNpbS9kZXYuYzoxNDU1OnN0YXRpYyBpbnQgX19uc2ltX2Rldl9wb3J0X2FkZChzdHJ1Y3QgbnNpbV9kZXYgKm5zaW1fZGV2LCBlbnVtIG5zaW1fZGV2X3BvcnRfdHlwZSB0eXBlLFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2Rldi5jLTE0NTYtXHRcdFx0ICAgICAgIHVuc2lnbmVkIGludCBwb3J0X2luZGV4LCB1OCBwZXJtX2FkZHJbRVRIX0FMRU5dKVxuLS1cbmRyaXZlcnMvbmV0L25ldGRldnNpbS9kZXYuYz0xNTY0PXN0YXRpYyBpbnQgbnNpbV9kZXZfcG9ydF9hZGRfYWxsKHN0cnVjdCBuc2ltX2RldiAqbnNpbV9kZXYsXG4tLVxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2Rldi5jLTE1NjktXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBwb3J0X2NvdW50OyBpJiM0MzsmIzQzOykge1xuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2Rldi5jOjE1NzA6XHRcdGVyciA9IF9fbnNpbV9kZXZfcG9ydF9hZGQobnNpbV9kZXYsIE5TSU1fREVWX1BPUlRfVFlQRV9QRiwgaSwgTlVMTCk7XG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vZGV2LmMtMTU3MS1cdFx0aWYgKGVycilcbi0tXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vZGV2LmM9MTgyOT1pbnQgbnNpbV9kcnZfcG9ydF9hZGQoc3RydWN0IG5zaW1fYnVzX2RldiAqbnNpbV9idXNfZGV2LCBlbnVtIG5zaW1fZGV2X3BvcnRfdHlwZSB0eXBlLFxuLS1cbmRyaXZlcnMvbmV0L25ldGRldnNpbS9kZXYuYy0xODM4LVx0ZWxzZVxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2Rldi5jOjE4Mzk6XHRcdGVyciA9IF9fbnNpbV9kZXZfcG9ydF9hZGQobnNpbV9kZXYsIHR5cGUsIHBvcnRfaW5kZXgsIHBlcm1fYWRkcik7XG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vZGV2LmMtMTg0MC1cdGRldmxfdW5sb2NrKHByaXZfdG9fZGV2bGluayhuc2ltX2RldikpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI3IDExOjQwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgwMjMKCQkJCQkJCW91dHB1dDogMTkKCQkJCQkJCXRob3VnaHRzOiAxNDQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBOZXRkZXZzaW0gUGF0Y2gqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyBzaXR0aW5nIGluIGBkcml2ZXJzL25ldC9uZXRkZXZzaW0vYC4gSSBjYW4gc2VlIHRoZSByZWxldmFudCBjb25maWcgaXMgYE5FVERFVlNJTWAsIHdoaWNoIG1ha2VzIHNlbnNlLiBJIHNob3VsZCBwcm9iYWJseSBmb2N1cyBvbiB0aG9zZSBzeW1ib2xzOiBgX19uc2ltX2Rldl9wb3J0X2FkZGAsIGBfX25zaW1fZGV2X3BvcnRfZGVsYCwgYG5zaW1fY3JlYXRlYCwgYW5kIGBuc2ltX2Rlc3Ryb3lgLiBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIHdoYXQgdGhpcyBwYXRjaCBhY3R1YWxseSAqZG9lcyouCgpXYWl0IGEgc2Vjb25k4oCmIGl0IGxvb2tzIGxpa2UgdGhpcyBpcyBqdXN0IGEgY2xlYW51cCBmb3IgZGVidWdmcz8gQWgsIHllcy4gSXQmIzM5O3MgcmVtb3ZpbmcgdGhvc2UgaW5kaXZpZHVhbCBkZWJ1Z2ZzIHJlbW92YWwgY2FsbHMgYW5kIGlzIGxlYW5pbmcgb24gYGRlYnVnZnNfcmVtb3ZlX3JlY3Vyc2l2ZWAgZm9yIHRoZSBwYXJlbnQgZGlyZWN0b3J5IGluc3RlYWQuIFRoYXQmIzM5O3MgZ29vZCBwcmFjdGljZS4KCklzIHRoaXMgd29ydGggc3BlbmRpbmcgdGltZSBmdXp6aW5nPyBZZXMsIGFic29sdXRlbHkuIEV2ZW4gaWYgaXQgKnNlZW1zKiBtaW5vciwgdGhpcyB0b3VjaGVzIHRoZSB0ZWFyZG93biBzZXF1ZW5jZSwgYW5kIGl0IHNheXMgaXQgZml4ZXMgYSBidWcg4oCTIHBvdGVudGlhbGx5IGEgdXNlLWFmdGVyLWZyZWUgb3Igc29tZXRoaW5nIHNpbWlsYXIuIEFueSBjaGFuZ2UgaW4gdGVhcmRvd24gaXMgd29ydGggc2NydXRpbnksIGVzcGVjaWFsbHkgd2l0aCBtZW1vcnkgbWFuYWdlbWVudCBpbnZvbHZlZC4KCkFscmlnaHQsIGJlZm9yZSBJIGRpdmUgZGVlcGVyLCBsZXQmIzM5O3MgdGFrZSBhIHF1aWNrIGxvb2sgYXQgdGhlIGBkcml2ZXJzL25ldC9uZXRkZXZzaW0vS2NvbmZpZ2AgZmlsZSwgdG8gbWFrZSBzdXJlIEkgdW5kZXJzdGFuZCB0aGUgZGVwZW5kZW5jaWVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNyAxMTo0MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTkVUREVWU0lNJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L0tjb25maWc9NjAyPXNvdXJjZSBcJiMzNDtkcml2ZXJzL25ldC9oeXBlcnYvS2NvbmZpZ1wmIzM0O1xuZHJpdmVycy9uZXQvS2NvbmZpZy02MDMtXG5kcml2ZXJzL25ldC9LY29uZmlnOjYwNDpjb25maWcgTkVUREVWU0lNXG5kcml2ZXJzL25ldC9LY29uZmlnLTYwNS1cdHRyaXN0YXRlIFwmIzM0O1NpbXVsYXRlZCBuZXR3b3JraW5nIGRldmljZVwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNyAxMTo0MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4NTMxCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKkluaXRpYWwgQ29uZmlndXJhdGlvbiBDaGVjayoqCgpBbHJpZ2h0LCBiZWZvcmUgZGl2aW5nIHRvbyBkZWVwLCBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgaGF2ZW4mIzM5O3QgbWlzc2VkIHNvbWV0aGluZyBmdW5kYW1lbnRhbC4gSSYjMzk7bSBnb2luZyB0byBxdWlja2x5IHNjYW4gZm9yIGFsdGVybmF0ZSBvciBleGlzdGluZyBjb25maWd1cmF0aW9ucy4gSXQmIzM5O3MgYSBoYWJpdCwgcmVhbGx5LiBQcmV2ZW50cyBtZSBmcm9tIGdvaW5nIGRvd24gYSByYWJiaXQgaG9sZSBhbmFseXppbmcgYSBwcm9ibGVtIG9ubHkgdG8gcmVhbGl6ZSBJJiMzOTttIHdvcmtpbmcgd2l0aCB0aGUgd3Jvbmcgc2V0dXAgb3IgYW4gb3ZlcnJpZGRlbiBwYXJhbWV0ZXIuIEJldHRlciB0byBlbnN1cmUgSSYjMzk7bSBzdGFydGluZyBmcm9tIGEgZnVsbHkgdW5kZXJzdG9vZCBiYXNlbGluZS4gU28sIGZpcnN0IHRoaW5ncyBmaXJzdCwgbGV0JiMzOTtzIHNlZSBpZiB0aGVyZSBhcmUgYW55IG90aGVyIGNvbmZpZ3VyYXRpb24gZmlsZXMsIGVudmlyb25tZW50IHZhcmlhYmxlcywgb3IgZXZlbiBjb21tYW5kLWxpbmUgYXJndW1lbnRzIHRoYXQgbWlnaHQgYmUgaW5mbHVlbmNpbmcgdGhlIHN5c3RlbSYjMzk7cyBiZWhhdmlvci4gQSBxdWljayBzd2VlcCBpcyBlc3NlbnRpYWwgYmVmb3JlIEkgd2FzdGUgdGltZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjcgMTE6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNjA0LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA2MDQ6XHRjb25maWcgTkVUREVWU0lNXG4gNjA1Olx0XHR0cmlzdGF0ZSBcJiMzNDtTaW11bGF0ZWQgbmV0d29ya2luZyBkZXZpY2VcJiMzNDtcbiA2MDY6XHRcdGRlcGVuZHMgb24gREVCVUdfRlNcbiA2MDc6XHRcdGRlcGVuZHMgb24gSU5FVFxuIDYwODpcdFx0ZGVwZW5kcyBvbiBQU0FNUExFIHx8IFBTQU1QTEU9blxuIDYwOTpcdFx0ZGVwZW5kcyBvbiBQVFBfMTU4OF9DTE9DS19NT0NLIHx8IFBUUF8xNTg4X0NMT0NLX01PQ0s9blxuIDYxMDpcdFx0c2VsZWN0IE5FVF9ERVZMSU5LXG4gNjExOlx0XHRzZWxlY3QgUEFHRV9QT09MXG4gNjEyOlx0XHRzZWxlY3QgTkVUX1NIQVBFUlxuIDYxMzpcdFx0aGVscFxuIDYxNDpcdFx0ICBUaGlzIGRyaXZlciBpcyBhIGRldmVsb3BlciB0ZXN0aW5nIHRvb2wgYW5kIHNvZnR3YXJlIG1vZGVsIHRoYXQgY2FuXG4gNjE1Olx0XHQgIGJlIHVzZWQgdG8gdGVzdCB2YXJpb3VzIGNvbnRyb2wgcGF0aCBuZXR3b3JraW5nIEFQSXMsIGVzcGVjaWFsbHlcbiA2MTY6XHRcdCAgSFctb2ZmbG9hZCByZWxhdGVkLlxuIDYxNzpcdFxuIDYxODpcdFx0ICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlXG4gNjE5Olx0XHQgIHdpbGwgYmUgY2FsbGVkIG5ldGRldnNpbS5cbiA2MjA6XHRcbiA2MjE6XHRjb25maWcgTkVUX0ZBSUxPVkVSXG4gNjIyOlx0XHR0cmlzdGF0ZSBcJiMzNDtGYWlsb3ZlciBkcml2ZXJcJiMzNDtcbiA2MjM6XHRcdHNlbGVjdCBGQUlMT1ZFUlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNyAxMTo0MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5MDM3CgkJCQkJCQlvdXRwdXQ6IDIyCgkJCQkJCQl0aG91Z2h0czogNDUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjoKCioqSW52ZXN0aWdhdGluZyBOZXR3b3JrIERldmljZSBTaW11bGF0aW9uIGFuZCBJUHNlYyoqCgpSaWdodCwgc28gSSBzZWUgYE5FVERFVlNJTWAgYXMgdGhlIGNlbnRyYWwgY29uZmlndXJhdGlvbiBwb2ludCwgdGhlIGh1Yi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHJlbGF0aW9uc2hpcCB0byB0aGUgb3RoZXIgcGFydHMuIEFuZCB0aGVuIEkgaGl0IHNvbWV0aGluZyBpbnRlcmVzdGluZzogYGlwc2VjLmNgIGhhcyBhIGBuc2ltX2lwc2VjX3RlYXJkb3duYCBmdW5jdGlvbi4uLiB0aGF0JiMzOTtzIGEgY2x1ZS4gTXkgbWluZCBpbW1lZGlhdGVseSBqdW1wcyB0byBhIGRlcGVuZGVuY3kgLSBkb2VzIHRoaXMgYG5zaW1faXBzZWNfdGVhcmRvd25gIGZ1bmN0aW9uICpyZXF1aXJlKiB0aGUgYE5FVERFVlNJTV9JUFNFQ2AgY29uZmlndXJhdGlvbiBvcHRpb24gdG8gYmUgZGVmaW5lZD8gVGhhdCBmZWVscyBsaWtlIHRoZSBjcml0aWNhbCBxdWVzdGlvbiB0byBpbnZlc3RpZ2F0ZSBuZXh0LiBVbmRlcnN0YW5kaW5nIHRoYXQgZGVwZW5kZW5jeSB3aWxsIGJlIGtleSB0byBwcm9wZXJseSBjb25maWd1cmluZyBhbmQgd29ya2luZyB3aXRoIHRoaXMgc2ltdWxhdGlvbiBlbnZpcm9ubWVudCwgcGFydGljdWxhcmx5IGluIHJlbGF0aW9uIHRvIElQc2VjLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNyAxMTo0MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBORVRERVZTSU1fSVBTRUMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNyAxMTo0MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5Mjg2CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOgoKKipEaXZpbmcgaW50byB0aGUgTmV0ZGV2c2ltIE1ha2VmaWxlKioKCk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgYnVpbGQgcHJvY2VzcyBmb3IgdGhlIGBuZXRkZXZzaW1gIG1vZHVsZSwgc28gdGhlIGZpcnN0IGxvZ2ljYWwgc3RlcCBpcyB0byBleGFtaW5lIHRoZSBgZHJpdmVycy9uZXQvbmV0ZGV2c2ltL01ha2VmaWxlYC4gVGhpcyBpcyB3aGVyZSBhbGwgdGhlIGNvbXBpbGF0aW9uIGluc3RydWN0aW9ucywgZGVwZW5kZW5jaWVzLCBhbmQgcG90ZW50aWFsIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgdGhlIG5ldGRldnNpbSBkZXZpY2Ugd291bGQgYmUgZGVmaW5lZC4gSSYjMzk7bSBleHBlY3RpbmcgdG8gZmluZCBydWxlcyBmb3IgY29tcGlsaW5nIHRoZSBjb3JlIG5ldGRldnNpbSBjb2RlLCBhbnkgc3VwcG9ydCBsaWJyYXJpZXMgb3IgZHJpdmVycyBpdCByZWxpZXMgb24sIGFuZCBwZXJoYXBzIGV2ZW4gc29tZSBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgc2VjdGlvbnMgaWYgaXQgaGFzIGRpZmZlcmVudCBpbXBsZW1lbnRhdGlvbnMgYWNyb3NzIHBsYXRmb3Jtcy4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgdGhpbmdzIGxpa2Ugb2JqZWN0IGZpbGUgZGVmaW5pdGlvbnMsIGluY2x1ZGUgcGF0aHMsIGxpbmtlciBmbGFncywgbW9kdWxlIGRlcGVuZGVuY2llcyAoZS5nLiwgb3RoZXIgbmV0d29yayBzdGFjayBjb21wb25lbnRzKSwgYW5kIGFueSBjb25kaXRpb25hbCBjb21waWxhdGlvbiBiYXNlZCBvbiBrZXJuZWwgY29uZmlndXJhdGlvbiBvcHRpb25zLiBVbmRlcnN0YW5kaW5nIHRoaXMgTWFrZWZpbGUgd2lsbCBnaXZlIG1lIGEgc29saWQgZm91bmRhdGlvbiBmb3IgZnVydGhlciBpbnZlc3RpZ2F0aW9uLCBlc3BlY2lhbGx5IGlmIEkgbmVlZCB0byBtb2RpZnkgb3IgZGVidWcgdGhlIG5ldGRldnNpbSBkcml2ZXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI3IDExOjQyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvbmV0ZGV2c2ltL01ha2VmaWxlJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuICAgMjpcdFxuICAgMzpcdG9iai0kKENPTkZJR19ORVRERVZTSU0pICYjNDM7PSBuZXRkZXZzaW0ub1xuICAgNDpcdFxuICAgNTpcdG5ldGRldnNpbS1vYmpzIDo9IFxcXG4gICA2Olx0XHRuZXRkZXYubyBkZXYubyBldGh0b29sLm8gZmliLm8gYnVzLm8gaGVhbHRoLm8gaHdzdGF0cy5vIHVkcF90dW5uZWxzLm8gdGMub1xuICAgNzpcdFxuICAgODpcdGlmZXEgKCQoQ09ORklHX0JQRl9TWVNDQUxMKSx5KVxuICAgOTpcdG5ldGRldnNpbS1vYmpzICYjNDM7PSBcXFxuICAxMDpcdFx0YnBmLm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjcgMTE6NDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTY5NwoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDE1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHN1bW1hcnksIHByZXNlbnRlZCBhcyBhIHN0cmVhbSBvZiB0aG91Z2h0OgoKKipJUHNlYyBhbmQgUFNQOiBBIFF1aWNrIENoZWNrLUluKioKClJpZ2h0LCBsZXQmIzM5O3Mgc2VlLi4uIEkmIzM5O20gY3VycmVudGx5IGZvY3VzZWQgb24gYSBicm9hZGVyIGFyY2hpdGVjdHVyYWwgcGllY2UsIGJ1dCBzb21ldGhpbmcmIzM5O3MgbmFnZ2luZyBhdCBtZS4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJiMzOTttIG5vdCBvdmVybG9va2luZyBhbnl0aGluZyBjcml0aWNhbCwgcGFydGljdWxhcmx5IGFyb3VuZCB0aGUgY29yZSBuZXR3b3JraW5nIHNlY3VyaXR5IGFzcGVjdHMuIEhtbS4uLiB3aGF0IGFib3V0IGBpcHNlYy5jYD8gVGhhdCYjMzk7cyBkZWZpbml0ZWx5IGEgY3J1Y2lhbCBjb21wb25lbnQuIEkgbmVlZCB0byBxdWlja2x5IHJ1biB0aHJvdWdoIG15IG1lbnRhbCBjaGVja2xpc3Q6IGVuY3J5cHRpb24sIGF1dGhlbnRpY2F0aW9uLCBrZXkgbWFuYWdlbWVudCwgdHVubmVsIGVzdGFibGlzaG1lbnQg4oCTIGFyZSB0aGVyZSBhbnkgcmVjZW50IGNoYW5nZXMgdGhlcmUgdGhhdCBpbXBhY3QgdGhlIGN1cnJlbnQgZGVzaWduPyBBcmUgdGhlcmUgYW55IHBvdGVudGlhbCBpbnRlZ3JhdGlvbiBwb2ludHMgb3IgY29uZmxpY3RzIEkgbmVlZCB0byByZXZpc2l0IGluIGxpZ2h0IG9mIHRoZSBiaWdnZXIgcGljdHVyZT8KCkFuZCB0aGVuIHRoZXJlJiMzOTtzIGBwc3AuY2AuIFRoYXQgZmlsZSBhbHdheXMgc2VlbXMgdG8gYmUgcmlnaHQgb24gdGhlIGVkZ2Ugb2YgbXkgbWVtb3J5LiBJdCByZWxhdGVzIHRvIHNvbWUgb2YgdGhlIHBlcmZvcm1hbmNlIHN0dWZmLCByaWdodD8gU3BlY2lmaWNhbGx5LCBhbnl0aGluZyByZWxhdGVkIHRvIHBhY2tldCBmaWx0ZXJpbmc/IERpZCB0aGF0IGdldCB1cGRhdGVkIHJlY2VudGx5PyBJIG5lZWQgdG8gcXVpY2tseSByZWNhbGwgdGhlIGltcGxpY2F0aW9ucyBvZiBhbnkgb2YgdGhvc2UgbW9kaWZpY2F0aW9ucywgZXNwZWNpYWxseSBpZiB0aGVyZSYjMzk7cyBhbnkgaW1wYWN0IG9uIHRoZSBvdmVyYWxsIHRocm91Z2hwdXQgb3IgbGF0ZW5jeSBvZiBvdXIgc2VjdXJpdHkgcG9zdHVyZS4gSSBzaG91bGQgcXVpY2tseSByZXZpZXcgdGhvc2UgY2hhbmdlcyB0byBtYWtlIHN1cmUgdGhpcyBmaXRzIHJpZ2h0IGludG8gd2hhdCBJJiMzOTttIGRvaW5nIGFuZCBkb2VzIG5vdCBwcmVzZW50IHNvbWUgc29ydCBvZiBib3R0bGVuZWNrLiBKdXN0IGEgcXVpY2sgc2FuaXR5IGNoZWNrIHRvIGJlIHN1cmUuIEFscmlnaHQsIGxldCYjMzk7cyBqb3QgdGhvc2UgZG93biBhcyBhY3Rpb24gaXRlbXMgdG8gcmV2aXNpdC4gSXQmIzM5O3MgYSBxdWljayBjaGVjay1pbiB0byBlbnN1cmUgSSBoYXZlbiYjMzk7dCBmb3Jnb3R0ZW4gYW55dGhpbmcgY3JpdGljYWwuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI3IDExOjQyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvbmV0ZGV2c2ltL01ha2VmaWxlJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAxMTpcdGVuZGlmXG4gIDEyOlx0XG4gIDEzOlx0aWZuZXEgKCQoQ09ORklHX1hGUk1fT0ZGTE9BRCksKVxuICAxNDpcdG5ldGRldnNpbS1vYmpzICYjNDM7PSBpcHNlYy5vXG4gIDE1Olx0ZW5kaWZcbiAgMTY6XHRcbiAgMTc6XHRpZm5lcSAoJChDT05GSUdfUFNBTVBMRSksKVxuICAxODpcdG5ldGRldnNpbS1vYmpzICYjNDM7PSBwc2FtcGxlLm9cbiAgMTk6XHRlbmRpZlxuICAyMDpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNyAxMTo0MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDE2MgoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCBwcmVzZW50ZWQgYXMgaWYgaXQgd2VyZSBteSBvd24gaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipJbnZlc3RpZ2F0aW5nIGBwc3AuY2AqKgoKQWxyaWdodCwgc28gdGhlIHF1ZXN0aW9uIGltbWVkaWF0ZWx5IHNwcmluZ3MgdG8gbWluZDogKmBwc3AuY2A/KiBXaGF0JiMzOTtzIHRoZSBjb250ZXh0IGhlcmU/IEdpdmVuIHRoZSBuYXR1cmUgb2YgbXkgd29yaywgYW5kIHRoZSBpbXBsaWVkIG5lZWQgZm9yIGRlZXBlciBhbmFseXNpcywgdGhpcyBtdXN0IGJlIHNpZ25pZmljYW50LiBJJiMzOTttIGxpa2VseSBsb29raW5nIGF0IGEgY29yZSBjb21wb25lbnQgb2Ygc29tZXRoaW5nIC0gcG90ZW50aWFsbHkga2VybmVsLWxldmVsLCBtYXliZSBhIGRyaXZlciwgb3IgY3JpdGljYWwgc3lzdGVtIG1vZHVsZS4gVGhlIG5hbWUgJiMzNDtwc3AmIzM0OyBpdHNlbGYgaXMgZXZvY2F0aXZlLiBJcyB0aGlzIHJlbGF0ZWQgdG8gYSBzcGVjaWZpYyBwbGF0Zm9ybSwgbGlrZSBQbGF5U3RhdGlvbiBQb3J0YWJsZSAoUFNQKSwgb3IgaXMgaXQgYW4gYWNyb255bSBJJiMzOTttIGZhbWlsaWFyIHdpdGggaW4gYW5vdGhlciBjb250ZXh0PyBJIG5lZWQgdG8gcXVpY2tseSByZWNhbGwgbXkga25vd2xlZGdlIGJhc2UsIGFuZCBkZXRlcm1pbmUgdGhlIHNjb3BlIG9mIHRoaXMgZmlsZS4gV2hhdCBzeXN0ZW0gYW0gSSB3b3JraW5nIHdpdGg/IFdoYXQgc3BlY2lmaWMgYXJjaGl0ZWN0dXJlIG9yIGZyYW1ld29yayBpcyBpbiB1c2U/IFdoYXQmIzM5O3MgdGhlIHBvdGVudGlhbCBpbXBhY3Qgb2YgaXRzIGJlaGF2aW9yPyBEb2VzIGl0IHBlcnRhaW4gdG8gbWVtb3J5IG1hbmFnZW1lbnQsIHByb2Nlc3Mgc2NoZWR1bGluZywgcG93ZXIgbWFuYWdlbWVudCwgb3Igc29tZXRoaW5nIGVsc2UgZW50aXJlbHk/IEEgY29tcHJlaGVuc2l2ZSB1bmRlcnN0YW5kaW5nIG9mIGBwc3AuY2AgaXMgcGFyYW1vdW50IHRvIHJlc29sdmluZyB3aGF0ZXZlciBpc3N1ZSBJJiMzOTttIGN1cnJlbnRseSBmYWNpbmcuIFRoaXMgaXMgZ29pbmcgdG8gYmUgY3J1Y2lhbC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjcgMTE6NDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9uZXRkZXZzaW0vTWFrZWZpbGUmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDIxOlx0aWZuZXEgKCQoQ09ORklHX0lORVRfUFNQKSwpXG4gIDIyOlx0bmV0ZGV2c2ltLW9ianMgJiM0Mzs9IHBzcC5vXG4gIDIzOlx0ZW5kaWZcbiAgMjQ6XHRcbiAgMjU6XHRpZm5lcSAoJChDT05GSUdfTUFDU0VDKSwpXG4gIDI2Olx0bmV0ZGV2c2ltLW9ianMgJiM0Mzs9IG1hY3NlYy5vXG4gIDI3Olx0ZW5kaWZcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjcgMTE6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA1MzkKCQkJCQkJCW91dHB1dDogMTkKCQkJCQkJCXRob3VnaHRzOiAxMTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQ29uZmlndXJhdGlvbiBDb25zaWRlcmF0aW9ucyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgZW5hYmxpbmcgYE5FVERFVlNJTWAsIGBYRlJNX09GRkxPQURgLCBhbmQgYElORVRfUFNQYC4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJiMzOTttIGRvaW5nIHRoaXMgY29ycmVjdGx5LiBBIHF1aWNrIGNoZWNrIHJldmVhbHMgdGhhdCBgWEZSTV9PRkZMT0FEYCBhbmQgYElORVRfUFNQYCBhcmUgc3BlY2lmaWNhbGx5IGxpbmtlZCB0byBzb21lIGZpbGVzLCBidXQgdGhlIHN1YnN0YW50aWFsIGNoYW5nZXMgc2VlbSB0byBiZSBpbiBgZGV2LmNgIGFuZCBgbmV0ZGV2LmNgLCBzbyBJJiMzOTtsbCBrZWVwIGFuIGV5ZSBvbiB0aG9zZS4gSSYjMzk7bGwgbmVlZCB0byBleHBsaWNpdGx5IGVuYWJsZSBgTkVUREVWU0lNYCwgYFhGUk1fT0ZGTE9BRGAsIGFuZCBgSU5FVF9QU1BgIGluIHRoZSBjb25maWd1cmF0aW9uLiBOb3csIEkgbmVlZCB0byBkb3VibGUtY2hlY2sgbXkgYXNzdW1wdGlvbnMuLi5JIG5lZWQgdG8gY29uZmlybSBgSU5FVF9QU1BgOyBpcyB0aGF0IGEgZGlyZWN0IGNvbmZpZ3VyYXRpb24gb3B0aW9uLCBvciBpcyBpdCBlbmFibGVkIHZpYSBhbm90aGVyIHNldHRpbmc/IExldCBtZSBtYWtlIHN1cmUgSSYjMzk7bSBub3QgbWlzc2luZyBhbnl0aGluZyBjcnVjaWFsIGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI3IDExOjQ0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBJTkVUX1BTUCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvcHNwL0tjb25maWctNC0jXG5uZXQvcHNwL0tjb25maWc6NTpjb25maWcgSU5FVF9QU1Bcbm5ldC9wc3AvS2NvbmZpZy02LVx0Ym9vbCBcJiMzNDtQU1AgU2VjdXJpdHkgUHJvdG9jb2wgc3VwcG9ydFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNyAxMTo0NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDkwNgoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDEwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKk9mZmxvYWQgQ29uc2lkZXJhdGlvbnMgLSBYRlJNKioKCkFscmlnaHQsIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhlIGN1cnJlbnQgc3RhdGUgb2YgdGhpbmdzLiBXZSYjMzk7cmUgY2xlYXJseSBwdXNoaW5nIHBlcmZvcm1hbmNlIHdpdGggdGhpcyBsYXRlc3QgaW1wbGVtZW50YXRpb24sIGJ1dCBJIGtlZXAgY2lyY2xpbmcgYmFjayB0byBwb3RlbnRpYWwgYm90dGxlbmVja3MuIEFuZCB0aGUgYmlnIG9uZSB0aGF0IGtlZXBzIHBva2luZyBhdCBtZSBpcywgJiMzNDtXaGF0IGFib3V0IGBYRlJNX09GRkxPQURgPyYjMzQ7IFdlJiMzOTt2ZSBnb3Qgb3VyIGNvcmUgcHJvY2Vzc2luZyBkaWFsZWQgaW4sIGJ1dCBvZmZsb2FkaW5nIGlzIGEgY3JpdGljYWwgcGllY2UsIGFuZCBJIG5lZWQgdG8gbWFrZSBzdXJlIHdlJiMzOTtyZSBub3QgbmVnbGVjdGluZyB0aGUgaW1wbGljYXRpb25zLgoKV2UgY2FuJiMzOTt0IGp1c3QgYXNzdW1lIHRoZSBjdXJyZW50IHNldHVwIGNvdmVycyBhbGwgb3VyIGJhc2VzLiBXZSBuZWVkIHRvIGFuYWx5emUgdGhpcyBmcm9tIGFsbCBhbmdsZXMgdG8gcHJldmVudCBzbG93ZG93bnMgYW5kIG90aGVyIHBlcmZvcm1hbmNlIGlzc3Vlcy4gSXMgdGhlIGN1cnJlbnQgZGVzaWduIHN0aWxsIHRoZSBiZXN0IHBhdGg/IEFyZSB3ZSBsZWF2aW5nIGFueSB0aHJvdWdocHV0IG9uIHRoZSB0YWJsZT8gV2UgbmVlZCB0byBrZWVwIHRoaXMgb3BlbiBxdWVzdGlvbiBpbiBmcm9udCBvZiB1cyBhcyB3ZSBtb3ZlIGZvcndhcmQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI3IDExOjQ0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBYRlJNX09GRkxPQUQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3hmcm0vS2NvbmZpZz01PWNvbmZpZyBYRlJNXG4tLVxubmV0L3hmcm0vS2NvbmZpZy0xMC1cbm5ldC94ZnJtL0tjb25maWc6MTE6Y29uZmlnIFhGUk1fT0ZGTE9BRFxubmV0L3hmcm0vS2NvbmZpZy0xMi1cdGJvb2xcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjcgMTE6NDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTEyMDMKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiA0OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgcHJlc2VudGVkIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKk5hdmlnYXRpbmcgdGhlIEtlcm5lbCBDb25maWd1cmF0aW9uIExhbmRzY2FwZSoqCgpSaWdodCwgbGV0JiMzOTtzIHNlZS4uLiBJJiMzOTttIGxvb2tpbmcgYXQgYE5FVERFVlNJTWAsIGBYRlJNX09GRkxPQURgLCBhbmQgYElORVRfUFNQYC4gT2theSwgc3RhbmRhcmQgc3VzcGVjdHMgaW4gbmV0d29yayBjb25maWd1cmF0aW9uLiBOb3cgaG9sZCBvbiBhIHNlY29uZC4uLiBgWEZSTV9PRkZMT0FEYC4uLiB0aGF0JiMzOTtzIGEgKmJvb2xlYW4qIHdpdGhvdXQgYW4gYWNjb21wYW55aW5nIHByb21wdD8gQWhhLCB0aGF0IG1lYW5zIGl0JiMzOTtzIG9uZSBvZiAqdGhvc2UqIOKAkyBhdXRvbWF0aWNhbGx5IHNlbGVjdGVkIGJhc2VkIG9uIHRoZSBzdGF0ZXMgb2Ygb3RoZXIgY29uZmlndXJhdGlvbnMuIE5vIGRpcmVjdCB1c2VyIGNvbnRyb2wsIGJ1dCBkZWZpbml0ZWx5IHJlbGV2YW50IGR1ZSB0byBpdHMgZGVwZW5kZW5jaWVzIGFuZCBlZmZlY3RzLiBJIG5lZWQgdG8gdHJhY2UgYmFjayBhbmQgaWRlbnRpZnkgdGhlIHRyaWdnZXJzIGZvciB0aGF0LiBJdCBjb3VsZCBiZSBjcml0aWNhbCB0byBwZXJmb3JtYW5jZSBvciBzZWN1cml0eSBkZXBlbmRpbmcgb24gd2hhdCBlbHNlIGlzIGVuYWJsZWQuIFRoaXMgcmVxdWlyZXMgYSBkZWVwZXIgZGl2ZSBpbnRvIHRoZSBpbnRlcmRlcGVuZGVuY2llcy4gR290dGEgcmVtZW1iZXIgdGhhdCBvbmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI3IDExOjQ0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NlbGVjdCBYRlJNX09GRkxPQUQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjQvS2NvbmZpZz0zNjk9Y29uZmlnIElORVRfRVNQX09GRkxPQURcbi0tXG5uZXQvaXB2NC9LY29uZmlnLTM3MS1cdGRlcGVuZHMgb24gSU5FVF9FU1Bcbm5ldC9pcHY0L0tjb25maWc6MzcyOlx0c2VsZWN0IFhGUk1fT0ZGTE9BRFxubmV0L2lwdjQvS2NvbmZpZy0zNzMtXHRkZWZhdWx0IG5cbi0tXG5uZXQvaXB2Ni9LY29uZmlnPTc3PWNvbmZpZyBJTkVUNl9FU1BfT0ZGTE9BRFxuLS1cbm5ldC9pcHY2L0tjb25maWctNzktXHRkZXBlbmRzIG9uIElORVQ2X0VTUFxubmV0L2lwdjYvS2NvbmZpZzo4MDpcdHNlbGVjdCBYRlJNX09GRkxPQURcbm5ldC9pcHY2L0tjb25maWctODEtXHRkZWZhdWx0IG5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjcgMTE6NDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE2MjUKCQkJCQkJCW91dHB1dDogMTkKCQkJCQkJCXRob3VnaHRzOiAzMDkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgTmV0ZGV2c2ltIE9mZmxvYWQgUGF0Y2gqKgoKT2theSwgc28gSSBzZWUgdGhhdCBgSU5FVF9FU1BfT0ZGTE9BRGAgYW5kIGBJTkVUNl9FU1BfT0ZGTE9BRGAgYXJlIHRoZSBrZXlzIHRvIGVuYWJsaW5nIGBYRlJNX09GRkxPQURgIGhlcmUuIE15IGluaXRpYWwgdGhvdWdodCB3YXMgdG8gc2ltcGx5IGxpc3QgdGhlIHJlbGV2YW50IHN5bWJvbHMgbGlrZSBgTkVUREVWU0lNYCwgYElORVRfRVNQX09GRkxPQURgLCBhbmQgYElORVRfUFNQYCwgYnV0IEkgbmVlZCB0byBkaWcgZGVlcGVyLgoKQSBjbG9zZXIgbG9vayByZXZlYWxzIHRoYXQgdGhpcyBpcyBsYXJnZWx5IGFib3V0IGNsZWFuaW5nIHVwIGRlYnVnZnMgYW5kIHJlb3JkZXJpbmcgY29kZS4gTm93LCB0aGlzIG1ha2VzIG1lIHRoaW5rLiBJcyB0aGlzIHdvcnRoIGZ1enppbmc/IEFic29sdXRlbHkhIFRoZSBjcml0aWNhbCBjaGFuZ2UgaXMgdGhlIHJlb3JkZXJpbmcgb2YgYG5zaW1fZGVzdHJveWAgYW5kIGBuc2ltX2Rldl9wb3J0X2RlYnVnZnNfZXhpdGAuIFRoaXMgc2VxdWVuY2UgbW9kaWZpY2F0aW9uIGlzIGFsbW9zdCBjZXJ0YWlubHkgYWRkcmVzc2luZyBhIHVzZS1hZnRlci1mcmVlIG9yIGEgc2ltaWxhciBtZW1vcnkgc2FmZXR5IHZ1bG5lcmFiaWxpdHkuIEZ1enppbmcgaXMgKmVzc2VudGlhbCogaGVyZS4gV2UgbmVlZCB0byBlbnN1cmUgdGhhdCB0aGUgbmV3IG9yZGVyICpjb3JyZWN0bHkqIGZpeGVzIHRoZSBpZGVudGlmaWVkIGJ1ZyBhbmQgZG9lc24mIzM5O3QgaW5hZHZlcnRlbnRseSBpbnRyb2R1Y2UgKm5ldyogcHJvYmxlbXMuCgpJIG5lZWQgdG8gZm9jdXMgbXkgZnV6emluZyBlZmZvcnRzLiBJJiMzOTt2ZSBpbml0aWFsbHkgaWRlbnRpZmllZCBzb21lIGZvY3VzIHN5bWJvbHM6IGBfX25zaW1fZGV2X3BvcnRfYWRkYCwgYF9fbnNpbV9kZXZfcG9ydF9kZWxgLCBgbnNpbV9jcmVhdGVgLCBgbnNpbV9kZXN0cm95YCwgYG5zaW1faXBzZWNfdGVhcmRvd25gLCBgbnNpbV9wc3BfdW5pbml0YCwgYW5kIGBuc2ltX3VkcF90dW5uZWxzX2luZm9fZGVzdHJveWAuIExldCBtZSByZWZpbmUgdGhhdCBmb2N1cy4gQWZ0ZXIgc29tZSB0aG91Z2h0LCBJJiMzOTttIGdvaW5nIHRvIHRyaW0gaXQgZG93biB0byBgX19uc2ltX2Rldl9wb3J0X2FkZGAsIGBfX25zaW1fZGV2X3BvcnRfZGVsYCwgYG5zaW1fY3JlYXRlYCwgYW5kIGBuc2ltX2Rlc3Ryb3lgLiBUaGVzZSBhcmUgdGhlIGNvcmUgZnVuY3Rpb25zLgoKV2FpdCwgYXJlIHRoZXNlIGV2ZW4gaG90IHBhdGhzPyBObywgdGhleSYjMzk7cmUgdGhlIHNldHVwL3RlYXJkb3duIGZ1bmN0aW9ucyBmb3IgbmV0ZGV2c2ltIHBvcnRzLiBUaGF0IG1ha2VzIHRoZW0gKnBlcmZlY3QqIGZvciBmdXp6aW5nLiBUaGV5JiMzOTtyZSBpZGVhbCB0YXJnZXRzLgoKTGV0IG1lIGp1c3QgZG91YmxlLWNoZWNrIHRoYXQgYG5zaW1fZGVzdHJveWAgZnVuY3Rpb24gYWdhaW4uLi4gdG8gbWFrZSBzdXJlIEkmIzM5O20gbm90IG1pc3NpbmcgYW55dGhpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI3IDExOjQ1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3ZvaWQgbnNpbV9kZXN0cm95JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXYuYz0xMTI1PXN0cnVjdCBuZXRkZXZzaW0gKm5zaW1fY3JlYXRlKHN0cnVjdCBuc2ltX2RldiAqbnNpbV9kZXYsXG4tLVxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldi5jLTExNzEtXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2LmM6MTE3Mjp2b2lkIG5zaW1fZGVzdHJveShzdHJ1Y3QgbmV0ZGV2c2ltICpucylcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXYuYy0xMTczLXtcbi0tXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2c2ltLmg9MTY0PXN0cnVjdCBuZXRkZXZzaW0gKm5zaW1fY3JlYXRlKHN0cnVjdCBuc2ltX2RldiAqbnNpbV9kZXYsXG4tLVxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldnNpbS5oLTE2Ni1cdFx0XHQgICAgICB1OCBwZXJtX2FkZHJbRVRIX0FMRU5dKTtcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXZzaW0uaDoxNjc6dm9pZCBuc2ltX2Rlc3Ryb3koc3RydWN0IG5ldGRldnNpbSAqbnMpO1xuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldnNpbS5oLTE2OC1ib29sIG5ldGRldl9pc19uc2ltKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNyAxMTo0NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjY0NgoJCQkJCQkJb3V0cHV0OiAyNAoJCQkJCQkJdGhvdWdodHM6IDE1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzIG9uIHRoaXM6CgoqKkFuYWx5emluZyB0aGUgYG5zaW1faXBzZWNfdGVhcmRvd25gIFNjcmlwdCoqCgpBbHJpZ2h0LCB0aW1lIHRvIGdldCB0byB3b3JrLiBGaXJzdCB0aGluZyYjMzk7cyBmaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCYjMzk7cyBnb2luZyBvbiB3aXRoIHRoaXMgYG5zaW1faXBzZWNfdGVhcmRvd25gIHNjcmlwdC4gR2l2ZW4gbXkgZXhwZXJ0aXNlLCBJIGFscmVhZHkgaGF2ZSBhIHByZXR0eSBnb29kIGlkZWEsIGJ1dCBpdCYjMzk7cyBpbXBvcnRhbnQgdG8gYXBwcm9hY2ggdGhpcyB3aXRoIGEgY3JpdGljYWwgZXllLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgZ3Jhc3AgdGhlIHNwZWNpZmljcyBvZiB0aGlzIGltcGxlbWVudGF0aW9uLCBlc3BlY2lhbGx5IGNvbnNpZGVyaW5nIHRoZSBjb250ZXh0IG9mIG5ldHdvcmsgc2VjdXJpdHkgYW5kIElQU2VjLiBJJiMzOTttIGdvaW5nIHRvIGxvb2sgZm9yIGtleSBlbGVtZW50czogd2hhdCByZXNvdXJjZXMgaXMgaXQgdGFyZ2V0aW5nICh2aXJ0dWFsIG1hY2hpbmVzLCBzcGVjaWZpYyB0dW5uZWxzLCBldGMuKT8gV2hhdCBhY3Rpb25zIGlzIGl0IHRha2luZyAoZGVsZXRpbmcgY29uZmlndXJhdGlvbnMsIHN0b3BwaW5nIGRhZW1vbnMsIGNsZWFyaW5nIHJvdXRlcyk/IFdoYXQgYXJlIHRoZSBwb3RlbnRpYWwgcG9pbnRzIG9mIGZhaWx1cmUsIGFuZCBob3cgZG9lcyBpdCBoYW5kbGUgdGhlbT8gQXJlIHRoZXJlIGFueSBvYnZpb3VzIHNlY3VyaXR5IHZ1bG5lcmFiaWxpdGllcyBwcmVzZW50IChlLmcuLCBoYXJkY29kZWQgY3JlZGVudGlhbHMsIGluc3VmZmljaWVudCBlcnJvciBoYW5kbGluZyB0aGF0IGNvdWxkIGxlYWQgdG8gYSBkZW5pYWwtb2Ytc2VydmljZSwgdW5pbnRlbmRlZCBhY2Nlc3MgcmlnaHRzKT8gSeKAmWxsIG5lZWQgdG8gYXNzZXNzIHRoZSBpZGVtcG90ZW5jeSBvZiB0aGUgc2NyaXB0IOKAkyBjYW4gSSBydW4gaXQgbXVsdGlwbGUgdGltZXMgc2FmZWx5PyBGaW5hbGx5LCBJJiMzOTtsbCBjb25zaWRlciBob3cgaXQgaW50ZWdyYXRlcyBpbnRvIHRoZSBvdmVyYWxsIG5ldHdvcmsgYXJjaGl0ZWN0dXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNyAxMTo0NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt2b2lkIG5zaW1faXBzZWNfdGVhcmRvd24mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2lwc2VjLmM9MjcxPXZvaWQgbnNpbV9pcHNlY19pbml0KHN0cnVjdCBuZXRkZXZzaW0gKm5zKVxuLS1cbmRyaXZlcnMvbmV0L25ldGRldnNpbS9pcHNlYy5jLTI4Ny1cbmRyaXZlcnMvbmV0L25ldGRldnNpbS9pcHNlYy5jOjI4ODp2b2lkIG5zaW1faXBzZWNfdGVhcmRvd24oc3RydWN0IG5ldGRldnNpbSAqbnMpXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vaXBzZWMuYy0yODkte1xuLS1cbmRyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXZzaW0uaD00MTc9dm9pZCBuc2ltX2lwc2VjX2luaXQoc3RydWN0IG5ldGRldnNpbSAqbnMpO1xuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldnNpbS5oOjQxODp2b2lkIG5zaW1faXBzZWNfdGVhcmRvd24oc3RydWN0IG5ldGRldnNpbSAqbnMpO1xuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldnNpbS5oLTQxOS1ib29sIG5zaW1faXBzZWNfdHgoc3RydWN0IG5ldGRldnNpbSAqbnMsIHN0cnVjdCBza19idWZmICpza2IpO1xuLS1cbmRyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXZzaW0uaD00MjE9c3RhdGljIGlubGluZSB2b2lkIG5zaW1faXBzZWNfaW5pdChzdHJ1Y3QgbmV0ZGV2c2ltICpucylcbi0tXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2c2ltLmgtNDI0LVxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldnNpbS5oOjQyNTpzdGF0aWMgaW5saW5lIHZvaWQgbnNpbV9pcHNlY190ZWFyZG93bihzdHJ1Y3QgbmV0ZGV2c2ltICpucylcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXZzaW0uaC00MjYte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNyAxMTo0NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzI5MQoJCQkJCQkJb3V0cHV0OiAyMgoJCQkJCQkJdGhvdWdodHM6IDEzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCBkZWxpdmVyZWQgYXMgYSBmaXJzdC1wZXJzb24gc3VtbWFyeToKCioqRGlnZ2luZyBpbnRvIGBuc2ltX3BzcF91bmluaXRgKioKCkFscmlnaHQsIGxldCYjMzk7cyBnZXQgZG93biB0byBpdC4gVGltZSB0byBwb2tlIGFyb3VuZCBgbnNpbV9wc3BfdW5pbml0YC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGN1cnJlbnQgc3RhdGUuIE15IGd1dCBmZWVsaW5nIGlzIHRoYXQgdGhpcyBkZXNlcnZlcyBhIGNsb3NlciBsb29rLiBJJiMzOTt2ZSBiZWVuIG1lYW5pbmcgdG8gY2hlY2sgdGhpcyBzcGVjaWZpYyBmdW5jdGlvbiBmb3IgYSB3aGlsZSBub3csIGFuZCBub3cgaXMgYSBnb29kIHRpbWUgdG8gZG8gc28uIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgZWRnZSBjYXNlcyBhbmQgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdGllcy4gSSB3YW50IHRvIHBpbnBvaW50IGFueSBwb3RlbnRpYWwgaW5lZmZpY2llbmNpZXMgb3IgdW5mb3Jlc2VlbiBjb25zZXF1ZW5jZXMgb2YgaXRzIGN1cnJlbnQgaW1wbGVtZW50YXRpb24uIFNwZWNpZmljYWxseSwgSSYjMzk7bSBnb2luZyB0byBsb29rIGZvciBhcmVhcyB3aGVyZSBpbml0aWFsaXphdGlvbiBpcyBiZWluZyBza2lwcGVkLCBvciBpbmNvcnJlY3RseSBoYW5kbGVkLiBJJiMzOTttIGVudmlzaW9uaW5nIHNjZW5hcmlvcyB3aGVyZSB1bmluaXRpYWxpemVkIG1lbW9yeSBvciByZXNvdXJjZXMgY291bGQgbGVhZCB0byBpbnN0YWJpbGl0eSBvciBpbmNvcnJlY3QgYmVoYXZpb3IuIEdvdHRhIG1ha2Ugc3VyZSBpdOKAmXMgcm9idXN0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNyAxMTo0NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt2b2lkIG5zaW1fcHNwX3VuaW5pdCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2c2ltLmg9NDQ5PWludCBuc2ltX3BzcF9pbml0KHN0cnVjdCBuZXRkZXZzaW0gKm5zKTtcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXZzaW0uaDo0NTA6dm9pZCBuc2ltX3BzcF91bmluaXQoc3RydWN0IG5ldGRldnNpbSAqbnMpO1xuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldnNpbS5oLTQ1MS12b2lkIG5zaW1fcHNwX2hhbmRsZV9leHQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHNrYl9leHQgKnBzcF9leHQpO1xuLS1cbmRyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXZzaW0uaD00NTY9c3RhdGljIGlubGluZSBpbnQgbnNpbV9wc3BfaW5pdChzdHJ1Y3QgbmV0ZGV2c2ltICpucykgeyByZXR1cm4gMDsgfVxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldnNpbS5oOjQ1NzpzdGF0aWMgaW5saW5lIHZvaWQgbnNpbV9wc3BfdW5pbml0KHN0cnVjdCBuZXRkZXZzaW0gKm5zKSB7fVxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldnNpbS5oLTQ1OC1zdGF0aWMgaW5saW5lIGVudW0gc2tiX2Ryb3BfcmVhc29uXG4tLVxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL3BzcC5jPTIxMz1zdGF0aWMgdm9pZCBfX25zaW1fcHNwX3VuaW5pdChzdHJ1Y3QgbmV0ZGV2c2ltICpucywgYm9vbCB0ZWFyZG93bilcbi0tXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vcHNwLmMtMjI3LVxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL3BzcC5jOjIyODp2b2lkIG5zaW1fcHNwX3VuaW5pdChzdHJ1Y3QgbmV0ZGV2c2ltICpucylcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9wc3AuYy0yMjkte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNyAxMTo0NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzg1OAoJCQkJCQkJb3V0cHV0OiAyNgoJCQkJCQkJdGhvdWdodHM6IDE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzIG9uIHRoaXM6CgoqKkFuYWx5emluZyBgbnNpbV91ZHBfdHVubmVsc19pbmZvX2Rlc3Ryb3lgKioKCkFscmlnaHQsIHRoZSBmaXJzdCB0aGluZyBJJiMzOTttIGRvaW5nIGlzIG1ha2luZyBzdXJlIEkmIzM5O20gemVyb2luZyBpbiBvbiBgbnNpbV91ZHBfdHVubmVsc19pbmZvX2Rlc3Ryb3lgLiBUaGlzIGZ1bmN0aW9uIG5hbWUgaW1tZWRpYXRlbHkgc2NyZWFtcyAmIzM0O2NsZWFudXAmIzM0OyBvciAmIzM0O2Rlc3RydWN0aW9uJiMzNDsgcmVsYXRlZCB0byBVRFAgdHVubmVsIGluZm9ybWF0aW9uIHdpdGhpbiB0aGUgYG5zaW1gIGNvbnRleHQsIHdoaWNoIEkmIzM5O20gYWxyZWFkeSBmYW1pbGlhciB3aXRoLiBNeSBpbml0aWFsIGFzc3VtcHRpb24gaXMgdGhhdCB0aGlzIGlzIHRoZSBmdW5jdGlvbiByZXNwb25zaWJsZSBmb3IgZnJlZWluZyBhbGxvY2F0ZWQgbWVtb3J5IG9yIHJlc291cmNlcyBhc3NvY2lhdGVkIHdpdGggYSBzdHJ1Y3R1cmUgb3IgZGF0YSBzZXQgdGhhdCByZXByZXNlbnRzIFVEUCB0dW5uZWxzLiBUaGUgJiMzNDtpbmZvJiMzNDsgcGFydCBvZiB0aGUgbmFtZSBtYWtlcyBtZSBsZWFuIHRvd2FyZHMgdGhpcyBiZWluZyBhIGhpZ2gtbGV2ZWwgZnVuY3Rpb24gdGhhdCBwcm9iYWJseSBoYW5kbGVzIHRoZSBmcmVlaW5nIG9mIG9uZSBvciBtb3JlIGxvd2VyLWxldmVsIGRhdGEgc3RydWN0dXJlcy4gSSB3YW50IHRvIG1ha2Ugc3VyZSBJIGFtIGxvb2tpbmcgYXQgdGhlIGNvcnJlY3QgZnVuY3Rpb24gYW5kIG5vdCBzb21lIHNpbWlsYXIgdmFyaWF0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNyAxMTo0NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt2b2lkIG5zaW1fdWRwX3R1bm5lbHNfaW5mb19kZXN0cm95JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXZzaW0uaD0xNzM9aW50IG5zaW1fdWRwX3R1bm5lbHNfaW5mb19jcmVhdGUoc3RydWN0IG5zaW1fZGV2ICpuc2ltX2RldixcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXZzaW0uaC0xNzQtXHRcdFx0XHQgc3RydWN0IG5ldF9kZXZpY2UgKmRldik7XG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2c2ltLmg6MTc1OnZvaWQgbnNpbV91ZHBfdHVubmVsc19pbmZvX2Rlc3Ryb3koc3RydWN0IG5ldF9kZXZpY2UgKmRldik7XG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2c2ltLmgtMTc2LVxuLS1cbmRyaXZlcnMvbmV0L25ldGRldnNpbS91ZHBfdHVubmVscy5jPTEyNT1pbnQgbnNpbV91ZHBfdHVubmVsc19pbmZvX2NyZWF0ZShzdHJ1Y3QgbnNpbV9kZXYgKm5zaW1fZGV2LFxuLS1cbmRyaXZlcnMvbmV0L25ldGRldnNpbS91ZHBfdHVubmVscy5jLTE4OC1cbmRyaXZlcnMvbmV0L25ldGRldnNpbS91ZHBfdHVubmVscy5jOjE4OTp2b2lkIG5zaW1fdWRwX3R1bm5lbHNfaW5mb19kZXN0cm95KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vdWRwX3R1bm5lbHMuYy0xOTAte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNyAxMTo0NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDM1MQoJCQkJCQkJb3V0cHV0OiAyMTgKCQkJCQkJCXRob3VnaHRzOiAxMzUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgTW9kaWZpY2F0aW9uKioKCk9rYXksIHNvIHRoaXMgaXMgaW50ZXJlc3RpbmcuIEZyb20gd2hhdCBJJiMzOTttIHNlZWluZywgdGhlc2UgY2hhbmdlcyBhcmUgY2xlYXJseSBmdW5jdGlvbmFsLCBhbmQgcXVpdGUgaW1wb3J0YW50IGFjdHVhbGx5LiBUaGV5JiMzOTtyZSB0b3VjaGluZyB0aGUgdGVhcmRvd24gc2VxdWVuY2UgZm9yIG5ldGRldnNpbSBwb3J0cywgd2hpY2ggaW1tZWRpYXRlbHkgZmxhZ3MgJiMzNDtwb3RlbnRpYWwgZm9yIGZpeGluZyB1c2UtYWZ0ZXItZnJlZSBidWdzJiMzNDsgaW4gZGVidWdmcy4gR2l2ZW4gdGhlIGluaGVyZW50IHJpc2tzIG9mIHRob3NlIHR5cGVzIG9mIG1lbW9yeSBlcnJvcnMsIHRoaXMgaXMgZGVmaW5pdGVseSBzb21ldGhpbmcgd29ydGggcHVyc3VpbmcuIEkmIzM5O20gZ29pbmcgdG8gbWFyayB0aGlzIGFzIGBXb3J0aEZ1enppbmc9dHJ1ZWA7IGl0IGhhcyBhIGhpZ2ggcHJvYmFiaWxpdHkgb2YgZXhwb3Npbmcgc29tZXRoaW5nLgoKTm93LCBsZXQgbWUgc2VlIHdoYXQgY29uZmlndXJhdGlvbnMgYXJlIHJlbGV2YW50LiBUaGUgcHJpbWFyeSBvbmVzIGhlcmUgYXJlIGBORVRERVZTSU1gLCBuYXR1cmFsbHksIHdoaWNoIGlzIHRoZSBjb3JlIG9mIHRoaXMuIEJleW9uZCB0aGF0LCBJIG5lZWQgdG8ga2VlcCBhbiBleWUgb24gYElORVRfRVNQX09GRkxPQURgIGFuZCBgSU5FVF9QU1BgLCBhcyB0aG9zZSBzZWVtIHRvIGJlIGluZGlyZWN0bHkgaW52b2x2ZWQgaW4gdGhlIGFmZmVjdGVkIGFyZWFzLgoKRmluYWxseSwgSSBuZWVkIHRvIG1ha2UgYSBtZW50YWwgbm90ZSBvZiB0aGUgY3JpdGljYWwgc3ltYm9scyB0byBmb2N1cyBteSBhdHRlbnRpb24gb24gZHVyaW5nIGFuYWx5c2lzLiBJIHNlZSBgX19uc2ltX2Rldl9wb3J0X2FkZGAsIGBfX25zaW1fZGV2X3BvcnRfZGVsYCwgYG5zaW1fY3JlYXRlYCwgYG5zaW1fZGVzdHJveWAsIGBuc2ltX2lwc2VjX3RlYXJkb3duYCwgYG5zaW1fcHNwX3VuaW5pdGAsIGFuZCBgbnNpbV91ZHBfdHVubmVsc19pbmZvX2Rlc3Ryb3lgLiBUaG9zZSBhcmUgdGhlIGVudHJ5IHBvaW50cyBhbmQgdGVhcmRvd24gZnVuY3Rpb25zIHRoYXQgYXJlIGxpa2VseSB0aGUga2V5IHRvIHVuZGVyc3RhbmRpbmcgdGhlIGZ1bGwgaW1wYWN0IG9mIHRoZXNlIGNoYW5nZXMuIEkmIzM5O2xsIG1ha2Ugc3VyZSB0byBwcmlvcml0aXplIHRob3NlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNyAxMTo0NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TkVUREVWU0lNJiMzNDssCiAgICAmIzM0O0lORVRfRVNQX09GRkxPQUQmIzM0OywKICAgICYjMzQ7SU5FVF9QU1AmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtfX25zaW1fZGV2X3BvcnRfYWRkJiMzNDssCiAgICAmIzM0O19fbnNpbV9kZXZfcG9ydF9kZWwmIzM0OywKICAgICYjMzQ7bnNpbV9jcmVhdGUmIzM0OywKICAgICYjMzQ7bnNpbV9kZXN0cm95JiMzNDssCiAgICAmIzM0O25zaW1faXBzZWNfdGVhcmRvd24mIzM0OywKICAgICYjMzQ7bnNpbV9wc3BfdW5pbml0JiMzNDssCiAgICAmIzM0O25zaW1fdWRwX3R1bm5lbHNfaW5mb19kZXN0cm95JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSB0ZWFyZG93biBzZXF1ZW5jZSBvZiBuZXRkZXZzaW0gcG9ydHMsIG1vdmluZyB0aGUgZGVzdHJ1Y3Rpb24gb2YgdGhlIG5ldGRldnNpbSBpbnN0YW5jZSAoYG5zaW1fZGVzdHJveWApIGFmdGVyIHRoZSByZWN1cnNpdmUgcmVtb3ZhbCBvZiBpdHMgZGVidWdmcyBkaXJlY3RvcnkuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IGZpeGVzIHBvdGVudGlhbCB1c2UtYWZ0ZXItZnJlZSBpc3N1ZXMgd2hlbiBkZWJ1Z2ZzIGZpbGVzIGFyZSBhY2Nlc3NlZCBjb25jdXJyZW50bHkgd2l0aCBwb3J0IGRlbGV0aW9uLiBGdXp6aW5nIHRoZSBzZXR1cCBhbmQgdGVhcmRvd24gcGF0aHMgb2YgbmV0ZGV2c2ltIHBvcnRzIGlzIGltcG9ydGFudCB0byBlbnN1cmUgdGhlIG5ldyBzZXF1ZW5jZSBpcyBjb3JyZWN0IGFuZCBkb2VzbiYjMzk7dCBpbnRyb2R1Y2UgcmVncmVzc2lvbnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVERFVlNJTSYjMzQ7LAogICAgJiMzNDtJTkVUX0VTUF9PRkZMT0FEJiMzNDssCiAgICAmIzM0O0lORVRfUFNQJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7X19uc2ltX2Rldl9wb3J0X2FkZCYjMzQ7LAogICAgJiMzNDtfX25zaW1fZGV2X3BvcnRfZGVsJiMzNDssCiAgICAmIzM0O25zaW1fY3JlYXRlJiMzNDssCiAgICAmIzM0O25zaW1fZGVzdHJveSYjMzQ7LAogICAgJiMzNDtuc2ltX2lwc2VjX3RlYXJkb3duJiMzNDssCiAgICAmIzM0O25zaW1fcHNwX3VuaW5pdCYjMzQ7LAogICAgJiMzNDtuc2ltX3VkcF90dW5uZWxzX2luZm9fZGVzdHJveSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgdGVhcmRvd24gc2VxdWVuY2Ugb2YgbmV0ZGV2c2ltIHBvcnRzLCBtb3ZpbmcgdGhlIGRlc3RydWN0aW9uIG9mIHRoZSBuZXRkZXZzaW0gaW5zdGFuY2UgKGBuc2ltX2Rlc3Ryb3lgKSBhZnRlciB0aGUgcmVjdXJzaXZlIHJlbW92YWwgb2YgaXRzIGRlYnVnZnMgZGlyZWN0b3J5LiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdGhhdCBmaXhlcyBwb3RlbnRpYWwgdXNlLWFmdGVyLWZyZWUgaXNzdWVzIHdoZW4gZGVidWdmcyBmaWxlcyBhcmUgYWNjZXNzZWQgY29uY3VycmVudGx5IHdpdGggcG9ydCBkZWxldGlvbi4gRnV6emluZyB0aGUgc2V0dXAgYW5kIHRlYXJkb3duIHBhdGhzIG9mIG5ldGRldnNpbSBwb3J0cyBpcyBpbXBvcnRhbnQgdG8gZW5zdXJlIHRoZSBuZXcgc2VxdWVuY2UgaXMgY29ycmVjdCBhbmQgZG9lc24mIzM5O3QgaW50cm9kdWNlIHJlZ3Jlc3Npb25zLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDYtMjdUMTE6Mzg6MTIuMTc2NTU2ODkyWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTM0MDc1NjUyOTk5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5FVERFVlNJTVwiLFxuICAgIFwiSU5FVF9FU1BfT0ZGTE9BRFwiLFxuICAgIFwiSU5FVF9QU1BcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJfX25zaW1fZGV2X3BvcnRfYWRkXCIsXG4gICAgXCJfX25zaW1fZGV2X3BvcnRfZGVsXCIsXG4gICAgXCJuc2ltX2NyZWF0ZVwiLFxuICAgIFwibnNpbV9kZXN0cm95XCIsXG4gICAgXCJuc2ltX2lwc2VjX3RlYXJkb3duXCIsXG4gICAgXCJuc2ltX3BzcF91bmluaXRcIixcbiAgICBcIm5zaW1fdWRwX3R1bm5lbHNfaW5mb19kZXN0cm95XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHRlYXJkb3duIHNlcXVlbmNlIG9mIG5ldGRldnNpbSBwb3J0cywgbW92aW5nIHRoZSBkZXN0cnVjdGlvbiBvZiB0aGUgbmV0ZGV2c2ltIGluc3RhbmNlIChgbnNpbV9kZXN0cm95YCkgYWZ0ZXIgdGhlIHJlY3Vyc2l2ZSByZW1vdmFsIG9mIGl0cyBkZWJ1Z2ZzIGRpcmVjdG9yeS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgZml4ZXMgcG90ZW50aWFsIHVzZS1hZnRlci1mcmVlIGlzc3VlcyB3aGVuIGRlYnVnZnMgZmlsZXMgYXJlIGFjY2Vzc2VkIGNvbmN1cnJlbnRseSB3aXRoIHBvcnQgZGVsZXRpb24uIEZ1enppbmcgdGhlIHNldHVwIGFuZCB0ZWFyZG93biBwYXRocyBvZiBuZXRkZXZzaW0gcG9ydHMgaXMgaW1wb3J0YW50IHRvIGVuc3VyZSB0aGUgbmV3IHNlcXVlbmNlIGlzIGNvcnJlY3QgYW5kIGRvZXNuJ3QgaW50cm9kdWNlIHJlZ3Jlc3Npb25zLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yN1QxMTozODoxMi4xNzY1NjQ0NjJaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMzNTIwNDc1OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGI4ODlhYmI4MzBjZjViZmM0YjBkOGNiZmM5MTkzOWM4NjgxOTU4NTZcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFNhdCBKdW4gMjcgMTE6Mzg6MTEgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2Rldi5jIGIvZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2Rldi5jXFxuaW5kZXggZjAwZmMyZjllYmRlYzcuLjRjMmM5YWExZWE3ZGMxIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L25ldGRldnNpbS9kZXYuY1xcbisrKyBiL2RyaXZlcnMvbmV0L25ldGRldnNpbS9kZXYuY1xcbkBAIC0xNTE2LDE3ICsxNTE2LDE3IEBAIHN0YXRpYyBpbnQgX19uc2ltX2Rldl9wb3J0X2FkZChzdHJ1Y3QgbnNpbV9kZXYgKm5zaW1fZGV2LCBlbnVtIG5zaW1fZGV2X3BvcnRfdHlwXFxuIFxcdFxcdGVyciA9IGRldmxfcmF0ZV9sZWFmX2NyZWF0ZShcXHUwMDI2bnNpbV9kZXZfcG9ydC1cXHUwMDNlZGV2bGlua19wb3J0LFxcbiBcXHRcXHRcXHRcXHRcXHQgICAgbnNpbV9kZXZfcG9ydCwgTlVMTCk7XFxuIFxcdFxcdGlmIChlcnIpXFxuLVxcdFxcdFxcdGdvdG8gZXJyX25zaW1fZGVzdHJveTtcXG4rXFx0XFx0XFx0Z290byBlcnJfcG9ydF9kZWJ1Z2ZzX2V4aXQ7XFxuIFxcdH1cXG4gXFxuIFxcdGxpc3RfYWRkKFxcdTAwMjZuc2ltX2Rldl9wb3J0LVxcdTAwM2VsaXN0LCBcXHUwMDI2bnNpbV9kZXYtXFx1MDAzZXBvcnRfbGlzdCk7XFxuIFxcbiBcXHRyZXR1cm4gMDtcXG4gXFxuLWVycl9uc2ltX2Rlc3Ryb3k6XFxuLVxcdG5zaW1fZGVzdHJveShuc2ltX2Rldl9wb3J0LVxcdTAwM2Vucyk7XFxuIGVycl9wb3J0X2RlYnVnZnNfZXhpdDpcXG4gXFx0bnNpbV9kZXZfcG9ydF9kZWJ1Z2ZzX2V4aXQobnNpbV9kZXZfcG9ydCk7XFxuK1xcdGlmICghSVNfRVJSX09SX05VTEwobnNpbV9kZXZfcG9ydC1cXHUwMDNlbnMpKVxcbitcXHRcXHRuc2ltX2Rlc3Ryb3kobnNpbV9kZXZfcG9ydC1cXHUwMDNlbnMpO1xcbiBlcnJfcG9ydF9yZXNvdXJjZV91bnJlZ2lzdGVyOlxcbiBcXHRpZiAobnNpbV9kZXZfcG9ydF9pc19wZihuc2ltX2Rldl9wb3J0KSlcXG4gXFx0XFx0ZGV2bF9wb3J0X3Jlc291cmNlc191bnJlZ2lzdGVyKGRldmxpbmtfcG9ydCk7XFxuQEAgLTE1NDQsOCArMTU0NCw4IEBAIHN0YXRpYyB2b2lkIF9fbnNpbV9kZXZfcG9ydF9kZWwoc3RydWN0IG5zaW1fZGV2X3BvcnQgKm5zaW1fZGV2X3BvcnQpXFxuIFxcdGxpc3RfZGVsKFxcdTAwMjZuc2ltX2Rldl9wb3J0LVxcdTAwM2VsaXN0KTtcXG4gXFx0aWYgKG5zaW1fZGV2X3BvcnRfaXNfdmYobnNpbV9kZXZfcG9ydCkpXFxuIFxcdFxcdGRldmxfcmF0ZV9sZWFmX2Rlc3Ryb3koXFx1MDAyNm5zaW1fZGV2X3BvcnQtXFx1MDAzZWRldmxpbmtfcG9ydCk7XFxuLVxcdG5zaW1fZGVzdHJveShuc2ltX2Rldl9wb3J0LVxcdTAwM2Vucyk7XFxuIFxcdG5zaW1fZGV2X3BvcnRfZGVidWdmc19leGl0KG5zaW1fZGV2X3BvcnQpO1xcbitcXHRuc2ltX2Rlc3Ryb3kobnNpbV9kZXZfcG9ydC1cXHUwMDNlbnMpO1xcbiBcXHRpZiAobnNpbV9kZXZfcG9ydF9pc19wZihuc2ltX2Rldl9wb3J0KSlcXG4gXFx0XFx0ZGV2bF9wb3J0X3Jlc291cmNlc191bnJlZ2lzdGVyKGRldmxpbmtfcG9ydCk7XFxuIFxcdGRldmxfcG9ydF91bnJlZ2lzdGVyKGRldmxpbmtfcG9ydCk7XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L25ldGRldnNpbS9pcHNlYy5jIGIvZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2lwc2VjLmNcXG5pbmRleCAzNmExYmU0OTIzZDYxZi4uMGJjOWY0MmE1YTM2NWUgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2lwc2VjLmNcXG4rKysgYi9kcml2ZXJzL25ldC9uZXRkZXZzaW0vaXBzZWMuY1xcbkBAIC0yOTIsNSArMjkyLDQgQEAgdm9pZCBuc2ltX2lwc2VjX3RlYXJkb3duKHN0cnVjdCBuZXRkZXZzaW0gKm5zKVxcbiBcXHRpZiAoaXBzZWMtXFx1MDAzZWNvdW50KVxcbiBcXHRcXHRuZXRkZXZfZXJyKG5zLVxcdTAwM2VuZXRkZXYsIFxcXCJ0ZWFyaW5nIGRvd24gSVBzZWMgb2ZmbG9hZCB3aXRoICVkIFNBcyBsZWZ0XFxcXG5cXFwiLFxcbiBcXHRcXHRcXHQgICBpcHNlYy1cXHUwMDNlY291bnQpO1xcbi1cXHRkZWJ1Z2ZzX3JlbW92ZV9yZWN1cnNpdmUoaXBzZWMtXFx1MDAzZXBmaWxlKTtcXG4gfVxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2LmMgYi9kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2LmNcXG5pbmRleCBhNzUwNzY4OTEyYjVhMS4uMjQwMTA3MzY5MzRjOWUgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldi5jXFxuKysrIGIvZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldi5jXFxuQEAgLTExNTQsMTYgKzExNTQsMTcgQEAgc3RydWN0IG5ldGRldnNpbSAqbnNpbV9jcmVhdGUoc3RydWN0IG5zaW1fZGV2ICpuc2ltX2RldixcXG4gXFx0aWYgKGVycilcXG4gXFx0XFx0Z290byBlcnJfZnJlZV9uZXRkZXY7XFxuIFxcbi1cXHRucy1cXHUwMDNlcHBfZGZzID0gZGVidWdmc19jcmVhdGVfZmlsZShcXFwicHBfaG9sZFxcXCIsIDA2MDAsIG5zaW1fZGV2X3BvcnQtXFx1MDAzZWRkaXIsXFxuLVxcdFxcdFxcdFxcdFxcdCBucywgXFx1MDAyNm5zaW1fcHBfaG9sZF9mb3BzKTtcXG4tXFx0bnMtXFx1MDAzZXFyX2RmcyA9IGRlYnVnZnNfY3JlYXRlX2ZpbGUoXFxcInF1ZXVlX3Jlc2V0XFxcIiwgMDIwMCxcXG4tXFx0XFx0XFx0XFx0XFx0IG5zaW1fZGV2X3BvcnQtXFx1MDAzZWRkaXIsIG5zLFxcbi1cXHRcXHRcXHRcXHRcXHQgXFx1MDAyNm5zaW1fcXJlc2V0X2ZvcHMpO1xcbi1cXHRucy1cXHUwMDNldmxhbl9kZnMgPSBkZWJ1Z2ZzX2NyZWF0ZV9maWxlKFxcXCJ2bGFuXFxcIiwgMDQwMCwgbnNpbV9kZXZfcG9ydC1cXHUwMDNlZGRpcixcXG4tXFx0XFx0XFx0XFx0XFx0ICAgbnMsIFxcdTAwMjZuc2ltX3ZsYW5fZm9wcyk7XFxuK1xcdGRlYnVnZnNfY3JlYXRlX2ZpbGUoXFxcInBwX2hvbGRcXFwiLCAwNjAwLCBuc2ltX2Rldl9wb3J0LVxcdTAwM2VkZGlyLCBucyxcXG4rXFx0XFx0XFx0ICAgIFxcdTAwMjZuc2ltX3BwX2hvbGRfZm9wcyk7XFxuK1xcdGRlYnVnZnNfY3JlYXRlX2ZpbGUoXFxcInF1ZXVlX3Jlc2V0XFxcIiwgMDIwMCwgbnNpbV9kZXZfcG9ydC1cXHUwMDNlZGRpciwgbnMsXFxuK1xcdFxcdFxcdCAgICBcXHUwMDI2bnNpbV9xcmVzZXRfZm9wcyk7XFxuK1xcdGRlYnVnZnNfY3JlYXRlX2ZpbGUoXFxcInZsYW5cXFwiLCAwNDAwLCBuc2ltX2Rldl9wb3J0LVxcdTAwM2VkZGlyLCBucyxcXG4rXFx0XFx0XFx0ICAgIFxcdTAwMjZuc2ltX3ZsYW5fZm9wcyk7XFxuIFxcdHJldHVybiBucztcXG4gXFxuIGVycl9mcmVlX25ldGRldjpcXG4rXFx0ZGVidWdmc19yZW1vdmVfcmVjdXJzaXZlKG5zaW1fZGV2X3BvcnQtXFx1MDAzZWRkaXIpO1xcbitcXHRuc2ltX2Rldl9wb3J0LVxcdTAwM2VkZGlyID0gTlVMTDtcXG4gXFx0ZnJlZV9uZXRkZXYoZGV2KTtcXG4gXFx0cmV0dXJuIEVSUl9QVFIoZXJyKTtcXG4gfVxcbkBAIC0xMTc0LDEwICsxMTc1LDYgQEAgdm9pZCBuc2ltX2Rlc3Ryb3koc3RydWN0IG5ldGRldnNpbSAqbnMpXFxuIFxcdHN0cnVjdCBuZXRkZXZzaW0gKnBlZXI7XFxuIFxcdHUxNiB2aWQ7XFxuIFxcbi1cXHRkZWJ1Z2ZzX3JlbW92ZShucy1cXHUwMDNldmxhbl9kZnMpO1xcbi1cXHRkZWJ1Z2ZzX3JlbW92ZShucy1cXHUwMDNlcXJfZGZzKTtcXG4tXFx0ZGVidWdmc19yZW1vdmUobnMtXFx1MDAzZXBwX2Rmcyk7XFxuLVxcbiBcXHRpZiAobnMtXFx1MDAzZW5iLm5vdGlmaWVyX2NhbGwpXFxuIFxcdFxcdHVucmVnaXN0ZXJfbmV0ZGV2aWNlX25vdGlmaWVyX2Rldl9uZXQobnMtXFx1MDAzZW5ldGRldiwgXFx1MDAyNm5zLVxcdTAwM2VuYixcXG4gXFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgXFx1MDAyNm5zLVxcdTAwM2Vubik7XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXZzaW0uaCBiL2RyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXZzaW0uaFxcbmluZGV4IGQ5MDljNDE2MGVhMWZlLi4yOWNiZjAwNGEzNzE5NSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2c2ltLmhcXG4rKysgYi9kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2c2ltLmhcXG5AQCAtMTUzLDkgKzE1Myw2IEBAIHN0cnVjdCBuZXRkZXZzaW0ge1xcbiBcXHR9IHVkcF9wb3J0cztcXG4gXFxuIFxcdHN0cnVjdCBwYWdlICpwYWdlO1xcbi1cXHRzdHJ1Y3QgZGVudHJ5ICpwcF9kZnM7XFxuLVxcdHN0cnVjdCBkZW50cnkgKnFyX2RmcztcXG4tXFx0c3RydWN0IGRlbnRyeSAqdmxhbl9kZnM7XFxuIFxcbiBcXHRzdHJ1Y3QgbnNpbV9ldGh0b29sIGV0aHRvb2w7XFxuIFxcdHN0cnVjdCBuZXRkZXZzaW0gX19yY3UgKnBlZXI7XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L25ldGRldnNpbS9wc3AuYyBiL2RyaXZlcnMvbmV0L25ldGRldnNpbS9wc3AuY1xcbmluZGV4IDY5MzZlY2I4MTczZTIwLi4yZjI3YTIxMTQ5MTJjNyAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9uZXRkZXZzaW0vcHNwLmNcXG4rKysgYi9kcml2ZXJzL25ldC9uZXRkZXZzaW0vcHNwLmNcXG5AQCAtMjI3LDcgKzIyNyw2IEBAIHN0YXRpYyB2b2lkIF9fbnNpbV9wc3BfdW5pbml0KHN0cnVjdCBuZXRkZXZzaW0gKm5zLCBib29sIHRlYXJkb3duKVxcbiBcXG4gdm9pZCBuc2ltX3BzcF91bmluaXQoc3RydWN0IG5ldGRldnNpbSAqbnMpXFxuIHtcXG4tXFx0ZGVidWdmc19yZW1vdmUobnMtXFx1MDAzZXBzcC5yZXJlZyk7XFxuIFxcdG11dGV4X2Rlc3Ryb3koXFx1MDAyNm5zLVxcdTAwM2Vwc3AucmVyZWdfbG9jayk7XFxuIFxcdF9fbnNpbV9wc3BfdW5pbml0KG5zLCB0cnVlKTtcXG4gfVxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9uZXRkZXZzaW0vdWRwX3R1bm5lbHMuYyBiL2RyaXZlcnMvbmV0L25ldGRldnNpbS91ZHBfdHVubmVscy5jXFxuaW5kZXggODlmZmY3NmU1MWNmNjQuLmE2OWIxNWYxMjhhYTFkIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L25ldGRldnNpbS91ZHBfdHVubmVscy5jXFxuKysrIGIvZHJpdmVycy9uZXQvbmV0ZGV2c2ltL3VkcF90dW5uZWxzLmNcXG5AQCAtMTg4LDkgKzE4OCw2IEBAIGludCBuc2ltX3VkcF90dW5uZWxzX2luZm9fY3JlYXRlKHN0cnVjdCBuc2ltX2RldiAqbnNpbV9kZXYsXFxuIFxcbiB2b2lkIG5zaW1fdWRwX3R1bm5lbHNfaW5mb19kZXN0cm95KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuIHtcXG4tXFx0c3RydWN0IG5ldGRldnNpbSAqbnMgPSBuZXRkZXZfcHJpdihkZXYpO1xcbi1cXG4tXFx0ZGVidWdmc19yZW1vdmVfcmVjdXJzaXZlKG5zLVxcdTAwM2V1ZHBfcG9ydHMuZGRpcik7XFxuIFxcdGtmcmVlKGRldi1cXHUwMDNldWRwX3R1bm5lbF9uaWNfaW5mbyk7XFxuIFxcdGRldi1cXHUwMDNldWRwX3R1bm5lbF9uaWNfaW5mbyA9IE5VTEw7XFxuIH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjdUMTE6Mzg6MTIuNTEyNTE3ODExWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MzM3Mzk2ODA5MDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkVUREVWU0lNXCIsXG4gICAgXCJJTkVUX0VTUF9PRkZMT0FEXCIsXG4gICAgXCJJTkVUX1BTUFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIl9fbnNpbV9kZXZfcG9ydF9hZGRcIixcbiAgICBcIl9fbnNpbV9kZXZfcG9ydF9kZWxcIixcbiAgICBcIm5zaW1fY3JlYXRlXCIsXG4gICAgXCJuc2ltX2Rlc3Ryb3lcIixcbiAgICBcIm5zaW1faXBzZWNfdGVhcmRvd25cIixcbiAgICBcIm5zaW1fcHNwX3VuaW5pdFwiLFxuICAgIFwibnNpbV91ZHBfdHVubmVsc19pbmZvX2Rlc3Ryb3lcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgdGVhcmRvd24gc2VxdWVuY2Ugb2YgbmV0ZGV2c2ltIHBvcnRzLCBtb3ZpbmcgdGhlIGRlc3RydWN0aW9uIG9mIHRoZSBuZXRkZXZzaW0gaW5zdGFuY2UgKGBuc2ltX2Rlc3Ryb3lgKSBhZnRlciB0aGUgcmVjdXJzaXZlIHJlbW92YWwgb2YgaXRzIGRlYnVnZnMgZGlyZWN0b3J5LiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdGhhdCBmaXhlcyBwb3RlbnRpYWwgdXNlLWFmdGVyLWZyZWUgaXNzdWVzIHdoZW4gZGVidWdmcyBmaWxlcyBhcmUgYWNjZXNzZWQgY29uY3VycmVudGx5IHdpdGggcG9ydCBkZWxldGlvbi4gRnV6emluZyB0aGUgc2V0dXAgYW5kIHRlYXJkb3duIHBhdGhzIG9mIG5ldGRldnNpbSBwb3J0cyBpcyBpbXBvcnRhbnQgdG8gZW5zdXJlIHRoZSBuZXcgc2VxdWVuY2UgaXMgY29ycmVjdCBhbmQgZG9lc24ndCBpbnRyb2R1Y2UgcmVncmVzc2lvbnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXRcbiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSxcbiAgIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgYjg4OWFiYjgzMGNmNWJmYzRiMGQ4Y2JmYzkxOTM5Yzg2ODE5NTg1NlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTYXQgSnVuIDI3IDExOjM4OjExIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2Rldi5jIGIvZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2Rldi5jXG5pbmRleCBmMDBmYzJmOWViZGVjNy4uNGMyYzlhYTFlYTdkYzEgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9uZXRkZXZzaW0vZGV2LmNcbisrKyBiL2RyaXZlcnMvbmV0L25ldGRldnNpbS9kZXYuY1xuQEAgLTE1MTYsMTcgKzE1MTYsMTcgQEAgc3RhdGljIGludCBfX25zaW1fZGV2X3BvcnRfYWRkKHN0cnVjdCBuc2ltX2RldiAqbnNpbV9kZXYsIGVudW0gbnNpbV9kZXZfcG9ydF90eXBcbiBcdFx0ZXJyID0gZGV2bF9yYXRlX2xlYWZfY3JlYXRlKFx1MDAyNm5zaW1fZGV2X3BvcnQtXHUwMDNlZGV2bGlua19wb3J0LFxuIFx0XHRcdFx0XHQgICAgbnNpbV9kZXZfcG9ydCwgTlVMTCk7XG4gXHRcdGlmIChlcnIpXG4tXHRcdFx0Z290byBlcnJfbnNpbV9kZXN0cm95O1xuK1x0XHRcdGdvdG8gZXJyX3BvcnRfZGVidWdmc19leGl0O1xuIFx0fVxuIFxuIFx0bGlzdF9hZGQoXHUwMDI2bnNpbV9kZXZfcG9ydC1cdTAwM2VsaXN0LCBcdTAwMjZuc2ltX2Rldi1cdTAwM2Vwb3J0X2xpc3QpO1xuIFxuIFx0cmV0dXJuIDA7XG4gXG4tZXJyX25zaW1fZGVzdHJveTpcbi1cdG5zaW1fZGVzdHJveShuc2ltX2Rldl9wb3J0LVx1MDAzZW5zKTtcbiBlcnJfcG9ydF9kZWJ1Z2ZzX2V4aXQ6XG4gXHRuc2ltX2Rldl9wb3J0X2RlYnVnZnNfZXhpdChuc2ltX2Rldl9wb3J0KTtcbitcdGlmICghSVNfRVJSX09SX05VTEwobnNpbV9kZXZfcG9ydC1cdTAwM2VucykpXG4rXHRcdG5zaW1fZGVzdHJveShuc2ltX2Rldl9wb3J0LVx1MDAzZW5zKTtcbiBlcnJfcG9ydF9yZXNvdXJjZV91bnJlZ2lzdGVyOlxuIFx0aWYgKG5zaW1fZGV2X3BvcnRfaXNfcGYobnNpbV9kZXZfcG9ydCkpXG4gXHRcdGRldmxfcG9ydF9yZXNvdXJjZXNfdW5yZWdpc3RlcihkZXZsaW5rX3BvcnQpO1xuQEAgLTE1NDQsOCArMTU0NCw4IEBAIHN0YXRpYyB2b2lkIF9fbnNpbV9kZXZfcG9ydF9kZWwoc3RydWN0IG5zaW1fZGV2X3BvcnQgKm5zaW1fZGV2X3BvcnQpXG4gXHRsaXN0X2RlbChcdTAwMjZuc2ltX2Rldl9wb3J0LVx1MDAzZWxpc3QpO1xuIFx0aWYgKG5zaW1fZGV2X3BvcnRfaXNfdmYobnNpbV9kZXZfcG9ydCkpXG4gXHRcdGRldmxfcmF0ZV9sZWFmX2Rlc3Ryb3koXHUwMDI2bnNpbV9kZXZfcG9ydC1cdTAwM2VkZXZsaW5rX3BvcnQpO1xuLVx0bnNpbV9kZXN0cm95KG5zaW1fZGV2X3BvcnQtXHUwMDNlbnMpO1xuIFx0bnNpbV9kZXZfcG9ydF9kZWJ1Z2ZzX2V4aXQobnNpbV9kZXZfcG9ydCk7XG4rXHRuc2ltX2Rlc3Ryb3kobnNpbV9kZXZfcG9ydC1cdTAwM2Vucyk7XG4gXHRpZiAobnNpbV9kZXZfcG9ydF9pc19wZihuc2ltX2Rldl9wb3J0KSlcbiBcdFx0ZGV2bF9wb3J0X3Jlc291cmNlc191bnJlZ2lzdGVyKGRldmxpbmtfcG9ydCk7XG4gXHRkZXZsX3BvcnRfdW5yZWdpc3RlcihkZXZsaW5rX3BvcnQpO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L25ldGRldnNpbS9pcHNlYy5jIGIvZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2lwc2VjLmNcbmluZGV4IDM2YTFiZTQ5MjNkNjFmLi4wYmM5ZjQyYTVhMzY1ZSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L25ldGRldnNpbS9pcHNlYy5jXG4rKysgYi9kcml2ZXJzL25ldC9uZXRkZXZzaW0vaXBzZWMuY1xuQEAgLTI5Miw1ICsyOTIsNCBAQCB2b2lkIG5zaW1faXBzZWNfdGVhcmRvd24oc3RydWN0IG5ldGRldnNpbSAqbnMpXG4gXHRpZiAoaXBzZWMtXHUwMDNlY291bnQpXG4gXHRcdG5ldGRldl9lcnIobnMtXHUwMDNlbmV0ZGV2LCBcInRlYXJpbmcgZG93biBJUHNlYyBvZmZsb2FkIHdpdGggJWQgU0FzIGxlZnRcXG5cIixcbiBcdFx0XHQgICBpcHNlYy1cdTAwM2Vjb3VudCk7XG4tXHRkZWJ1Z2ZzX3JlbW92ZV9yZWN1cnNpdmUoaXBzZWMtXHUwMDNlcGZpbGUpO1xuIH1cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2LmMgYi9kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2LmNcbmluZGV4IGE3NTA3Njg5MTJiNWExLi4yNDAxMDczNjkzNGM5ZSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXYuY1xuKysrIGIvZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldi5jXG5AQCAtMTE1NCwxNiArMTE1NCwxNyBAQCBzdHJ1Y3QgbmV0ZGV2c2ltICpuc2ltX2NyZWF0ZShzdHJ1Y3QgbnNpbV9kZXYgKm5zaW1fZGV2LFxuIFx0aWYgKGVycilcbiBcdFx0Z290byBlcnJfZnJlZV9uZXRkZXY7XG4gXG4tXHRucy1cdTAwM2VwcF9kZnMgPSBkZWJ1Z2ZzX2NyZWF0ZV9maWxlKFwicHBfaG9sZFwiLCAwNjAwLCBuc2ltX2Rldl9wb3J0LVx1MDAzZWRkaXIsXG4tXHRcdFx0XHRcdCBucywgXHUwMDI2bnNpbV9wcF9ob2xkX2ZvcHMpO1xuLVx0bnMtXHUwMDNlcXJfZGZzID0gZGVidWdmc19jcmVhdGVfZmlsZShcInF1ZXVlX3Jlc2V0XCIsIDAyMDAsXG4tXHRcdFx0XHRcdCBuc2ltX2Rldl9wb3J0LVx1MDAzZWRkaXIsIG5zLFxuLVx0XHRcdFx0XHQgXHUwMDI2bnNpbV9xcmVzZXRfZm9wcyk7XG4tXHRucy1cdTAwM2V2bGFuX2RmcyA9IGRlYnVnZnNfY3JlYXRlX2ZpbGUoXCJ2bGFuXCIsIDA0MDAsIG5zaW1fZGV2X3BvcnQtXHUwMDNlZGRpcixcbi1cdFx0XHRcdFx0ICAgbnMsIFx1MDAyNm5zaW1fdmxhbl9mb3BzKTtcbitcdGRlYnVnZnNfY3JlYXRlX2ZpbGUoXCJwcF9ob2xkXCIsIDA2MDAsIG5zaW1fZGV2X3BvcnQtXHUwMDNlZGRpciwgbnMsXG4rXHRcdFx0ICAgIFx1MDAyNm5zaW1fcHBfaG9sZF9mb3BzKTtcbitcdGRlYnVnZnNfY3JlYXRlX2ZpbGUoXCJxdWV1ZV9yZXNldFwiLCAwMjAwLCBuc2ltX2Rldl9wb3J0LVx1MDAzZWRkaXIsIG5zLFxuK1x0XHRcdCAgICBcdTAwMjZuc2ltX3FyZXNldF9mb3BzKTtcbitcdGRlYnVnZnNfY3JlYXRlX2ZpbGUoXCJ2bGFuXCIsIDA0MDAsIG5zaW1fZGV2X3BvcnQtXHUwMDNlZGRpciwgbnMsXG4rXHRcdFx0ICAgIFx1MDAyNm5zaW1fdmxhbl9mb3BzKTtcbiBcdHJldHVybiBucztcbiBcbiBlcnJfZnJlZV9uZXRkZXY6XG4rXHRkZWJ1Z2ZzX3JlbW92ZV9yZWN1cnNpdmUobnNpbV9kZXZfcG9ydC1cdTAwM2VkZGlyKTtcbitcdG5zaW1fZGV2X3BvcnQtXHUwMDNlZGRpciA9IE5VTEw7XG4gXHRmcmVlX25ldGRldihkZXYpO1xuIFx0cmV0dXJuIEVSUl9QVFIoZXJyKTtcbiB9XG5AQCAtMTE3NCwxMCArMTE3NSw2IEBAIHZvaWQgbnNpbV9kZXN0cm95KHN0cnVjdCBuZXRkZXZzaW0gKm5zKVxuIFx0c3RydWN0IG5ldGRldnNpbSAqcGVlcjtcbiBcdHUxNiB2aWQ7XG4gXG4tXHRkZWJ1Z2ZzX3JlbW92ZShucy1cdTAwM2V2bGFuX2Rmcyk7XG4tXHRkZWJ1Z2ZzX3JlbW92ZShucy1cdTAwM2Vxcl9kZnMpO1xuLVx0ZGVidWdmc19yZW1vdmUobnMtXHUwMDNlcHBfZGZzKTtcbi1cbiBcdGlmIChucy1cdTAwM2VuYi5ub3RpZmllcl9jYWxsKVxuIFx0XHR1bnJlZ2lzdGVyX25ldGRldmljZV9ub3RpZmllcl9kZXZfbmV0KG5zLVx1MDAzZW5ldGRldiwgXHUwMDI2bnMtXHUwMDNlbmIsXG4gXHRcdFx0XHRcdFx0ICAgICAgXHUwMDI2bnMtXHUwMDNlbm4pO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXZzaW0uaCBiL2RyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXZzaW0uaFxuaW5kZXggZDkwOWM0MTYwZWExZmUuLjI5Y2JmMDA0YTM3MTk1IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldnNpbS5oXG4rKysgYi9kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2c2ltLmhcbkBAIC0xNTMsOSArMTUzLDYgQEAgc3RydWN0IG5ldGRldnNpbSB7XG4gXHR9IHVkcF9wb3J0cztcbiBcbiBcdHN0cnVjdCBwYWdlICpwYWdlO1xuLVx0c3RydWN0IGRlbnRyeSAqcHBfZGZzO1xuLVx0c3RydWN0IGRlbnRyeSAqcXJfZGZzO1xuLVx0c3RydWN0IGRlbnRyeSAqdmxhbl9kZnM7XG4gXG4gXHRzdHJ1Y3QgbnNpbV9ldGh0b29sIGV0aHRvb2w7XG4gXHRzdHJ1Y3QgbmV0ZGV2c2ltIF9fcmN1ICpwZWVyO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L25ldGRldnNpbS9wc3AuYyBiL2RyaXZlcnMvbmV0L25ldGRldnNpbS9wc3AuY1xuaW5kZXggNjkzNmVjYjgxNzNlMjAuLjJmMjdhMjExNDkxMmM3IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvbmV0ZGV2c2ltL3BzcC5jXG4rKysgYi9kcml2ZXJzL25ldC9uZXRkZXZzaW0vcHNwLmNcbkBAIC0yMjcsNyArMjI3LDYgQEAgc3RhdGljIHZvaWQgX19uc2ltX3BzcF91bmluaXQoc3RydWN0IG5ldGRldnNpbSAqbnMsIGJvb2wgdGVhcmRvd24pXG4gXG4gdm9pZCBuc2ltX3BzcF91bmluaXQoc3RydWN0IG5ldGRldnNpbSAqbnMpXG4ge1xuLVx0ZGVidWdmc19yZW1vdmUobnMtXHUwMDNlcHNwLnJlcmVnKTtcbiBcdG11dGV4X2Rlc3Ryb3koXHUwMDI2bnMtXHUwMDNlcHNwLnJlcmVnX2xvY2spO1xuIFx0X19uc2ltX3BzcF91bmluaXQobnMsIHRydWUpO1xuIH1cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9uZXRkZXZzaW0vdWRwX3R1bm5lbHMuYyBiL2RyaXZlcnMvbmV0L25ldGRldnNpbS91ZHBfdHVubmVscy5jXG5pbmRleCA4OWZmZjc2ZTUxY2Y2NC4uYTY5YjE1ZjEyOGFhMWQgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9uZXRkZXZzaW0vdWRwX3R1bm5lbHMuY1xuKysrIGIvZHJpdmVycy9uZXQvbmV0ZGV2c2ltL3VkcF90dW5uZWxzLmNcbkBAIC0xODgsOSArMTg4LDYgQEAgaW50IG5zaW1fdWRwX3R1bm5lbHNfaW5mb19jcmVhdGUoc3RydWN0IG5zaW1fZGV2ICpuc2ltX2RldixcbiBcbiB2b2lkIG5zaW1fdWRwX3R1bm5lbHNfaW5mb19kZXN0cm95KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4ge1xuLVx0c3RydWN0IG5ldGRldnNpbSAqbnMgPSBuZXRkZXZfcHJpdihkZXYpO1xuLVxuLVx0ZGVidWdmc19yZW1vdmVfcmVjdXJzaXZlKG5zLVx1MDAzZXVkcF9wb3J0cy5kZGlyKTtcbiBcdGtmcmVlKGRldi1cdTAwM2V1ZHBfdHVubmVsX25pY19pbmZvKTtcbiBcdGRldi1cdTAwM2V1ZHBfdHVubmVsX25pY19pbmZvID0gTlVMTDtcbiB9XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yN1QxMTozODoxMi41MTI1MjAyMzFaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NTUyNjY1NjU4NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBEZWJ1Z2ZzIENsZWFudXAgUGF0Y2ggaW4gbmV0ZGV2c2ltKipcblxuT2theSwgc28gSSd2ZSBnb3QgdGhpcyBwYXRjaCBhZmZlY3RpbmcgYGRyaXZlcnMvbmV0L25ldGRldnNpbS9gLCB0b3VjaGluZyBgZGV2LmNgLCBgaXBzZWMuY2AsIGBuZXRkZXYuY2AsIGBuZXRkZXZzaW0uaGAsIGBwc3AuY2AsIGFuZCBgdWRwX3R1bm5lbHMuY2AuIFRoZSBjaGFuZ2VzIGFyZSBjbGVhcmx5IGNlbnRlcmVkIGFyb3VuZCBjbGVhbmluZyB1cCB0aGUgZGVidWdmcyBlbnRyaWVzLiBMZXQncyBkaWcgaW4uXG5cbkluIGBkZXYuY2AsIHRoZXJlJ3MgYSBtb2RpZmljYXRpb24gdG8gaG93IGBuc2ltX2Rlc3Ryb3lgIGlzIGNhbGxlZCB3aXRoaW4gdGhlIGVycm9yIGhhbmRsaW5nIHBhdGhzLiAgSXQgbG9va3MgbGlrZSB0aGVyZSdzIGEgcG90ZW50aWFsIGlzc3VlIHdoZXJlIGBuc2ltX2Rlc3Ryb3lgIHdhcyBiZWluZyBjYWxsZWQgKmJlZm9yZSogYG5zaW1fZGV2X3BvcnRfZGVidWdmc19leGl0YCwgYW5kIG5vdyBpdCdzIGJlaW5nIGNhbGxlZCAqYWZ0ZXIqLiAgQSBzaW1pbGFyIGNoYW5nZSBhcHBlYXJzIGluIGBfX25zaW1fZGV2X3BvcnRfZGVsYC4gVGhlIGNyaXRpY2FsIGNoYW5nZSBhcHBlYXJzIHRvIGJlIHRoYXQgdGhlIGRlYnVnZnMgZXhpdCBpcyBub3cgKmJlZm9yZSogdGhlIGBuc2ltX2Rlc3Ryb3lgIGNhbGwgaW4gYm90aCBsb2NhdGlvbnMuIFRoaXMgc3VnZ2VzdHMgYSBjYXJlZnVsIHJlLW9yZGVyaW5nLlxuXG5UaGVuLCB0aGVyZSdzIGEgcmVtb3ZhbCBvZiBgZGVidWdmc19yZW1vdmVfcmVjdXJzaXZlYCBjYWxscyBpbiBgaXBzZWMuY2AgYW5kIGluIGB1ZHBfdHVubmVscy5jYCwgaW1wbHlpbmcgdGhlIHJlbW92YWwgb2YgZGVidWdmcyBlbnRyaWVzIGlzIGhhbmRsZWQgZGlmZmVyZW50bHkgbm93LiBMaWtld2lzZSwgaW4gYG5ldGRldi5jYCB0aGUgYGRlYnVnZnNfY3JlYXRlX2ZpbGVgIGNhbGxzIGZvciBgcHBfaG9sZGAsIGBxdWV1ZV9yZXNldGAsIGFuZCBgdmxhbmAgYXJlIHNpbXBsaWZpZWQuICBGaW5hbGx5LCBgbnNpbV9kZXN0cm95YCBnZXRzIHNvbWUgZGVidWdnaW5nIHJlbW92ZSBjYWxscyB0b286IGB2bGFuX2Rmc2AsIGBxcl9kZnNgLCBhbmQgYHBwX2Rmc2AuIFRoaXMgc2VlbXMgbGlrZSBhIGNvbnNpc3RlbnQgcGF0dGVybi5cblxuQWhhISAgSSBzZWUgdGhlIHBhdHRlcm4gbm93LiBCeSBtb3ZpbmcgdGhlIGBuc2ltX2Rlc3Ryb3lgIGNhbGwgKmFmdGVyKiBgbnNpbV9kZXZfcG9ydF9kZWJ1Z2ZzX2V4aXRgLCB0aGUgcmVtb3ZhbCBvZiBgbnNpbV9kZXZfcG9ydC1cdTAwM2VkZGlyYCBhdXRvbWF0aWNhbGx5IHJlbW92ZXMgYWxsIGRlYnVnZnMgZmlsZXMgY3JlYXRlZCB1bmRlciB0aGF0IGRpcmVjdG9yeS4gVGhlIHByZXZpb3VzIGNvZGUgd2FzIGV4cGxpY2l0bHkgcmVtb3ZpbmcgaW5kaXZpZHVhbCBmaWxlcy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBiZWNhdXNlIGl0IGNoYW5nZXMgdGhlIG9yZGVyIG9mIG9wZXJhdGlvbnMuIFdoYXQgd2FzIHRoZSAqaW50ZW50KiBvZiB0aGlzIGNoYW5nZT9cblxuTm93IHRoZSBxdWVzdGlvbiBpcywgKndoeSogdGhpcyBjaGFuZ2U/IElzIHRoaXMganVzdCB0aWR5aW5nIHVwIHRoZSBjb2RlLCBvciBhcmUgd2UgYWRkcmVzc2luZyBhIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbiBvciBidWc/IFdhcyB0aGVyZSBhIGNoYW5jZSB0aGVzZSBkZWJ1Z2ZzIGZpbGVzIHdlcmUgYmVpbmcgYWNjZXNzZWQgKmFmdGVyKiB0aGV5IHdlcmUgcmVtb3ZlZCB1bmRlciB0aGUgb2xkIGltcGxlbWVudGF0aW9uPyBJIHNob3VsZCByZXZpZXcgdGhlIGBuc2ltX2Rldl9wb3J0X2RlYnVnZnNfZXhpdGAgZnVuY3Rpb24gdG8gYmUgc3VyZS4gSXQgY291bGQgYmUgd29ydGggZnV6emluZyB0aGlzLCB0byBzZWUgaWYgYW55dGhpbmcgZ2V0cyBjYXVnaHQuIE15IGd1dCBzYXlzIHRoaXMgaXMgYSBzdWJ0bGUgYnVnIGZpeCwgb3IgYXQgbGVhc3QgYSBjbGVhbmVyIGltcGxlbWVudGF0aW9uLiBUaW1lIHRvIGNoZWNrIGBuc2ltX2Rldl9wb3J0X2RlYnVnZnNfZXhpdGAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM3NjQsIk91dHB1dFRva2VucyI6MjUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4NzUsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yN1QxMTozODo1OC4wMzkxNzk2ODZaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjA5NDczNTQwNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuc2ltX2Rldl9wb3J0X2RlYnVnZnNfZXhpdFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9uZXRkZXZzaW0vZGV2LmM9NDA3PXN0YXRpYyBpbnQgbnNpbV9kZXZfcG9ydF9kZWJ1Z2ZzX2luaXQoc3RydWN0IG5zaW1fZGV2ICpuc2ltX2RldixcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9kZXYuYy00NDEtXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2Rldi5jOjQ0MjpzdGF0aWMgdm9pZCBuc2ltX2Rldl9wb3J0X2RlYnVnZnNfZXhpdChzdHJ1Y3QgbnNpbV9kZXZfcG9ydCAqbnNpbV9kZXZfcG9ydClcXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vZGV2LmMtNDQzLXtcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9kZXYuYz0xNDU1PXN0YXRpYyBpbnQgX19uc2ltX2Rldl9wb3J0X2FkZChzdHJ1Y3QgbnNpbV9kZXYgKm5zaW1fZGV2LCBlbnVtIG5zaW1fZGV2X3BvcnRfdHlwZSB0eXBlLFxcbi0tXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2Rldi5jLTE1MjYtZXJyX3BvcnRfZGVidWdmc19leGl0OlxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9kZXYuYzoxNTI3OlxcdG5zaW1fZGV2X3BvcnRfZGVidWdmc19leGl0KG5zaW1fZGV2X3BvcnQpO1xcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9kZXYuYy0xNTI4LVxcdGlmICghSVNfRVJSX09SX05VTEwobnNpbV9kZXZfcG9ydC1cXHUwMDNlbnMpKVxcbi0tXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2Rldi5jPTE1NDA9c3RhdGljIHZvaWQgX19uc2ltX2Rldl9wb3J0X2RlbChzdHJ1Y3QgbnNpbV9kZXZfcG9ydCAqbnNpbV9kZXZfcG9ydClcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9kZXYuYy0xNTQ2LVxcdFxcdGRldmxfcmF0ZV9sZWFmX2Rlc3Ryb3koXFx1MDAyNm5zaW1fZGV2X3BvcnQtXFx1MDAzZWRldmxpbmtfcG9ydCk7XFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2Rldi5jOjE1NDc6XFx0bnNpbV9kZXZfcG9ydF9kZWJ1Z2ZzX2V4aXQobnNpbV9kZXZfcG9ydCk7XFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2Rldi5jLTE1NDgtXFx0bnNpbV9kZXN0cm95KG5zaW1fZGV2X3BvcnQtXFx1MDAzZW5zKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjdUMTE6Mzk6MDAuMTMzOTI4NzIzWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTU4NDMxMjU1MzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgYXNzdW1pbmcgSSdtIGFuIGV4cGVydCBpbiBkZWJ1Z2dpbmcgYW5kIGtlcm5lbC1sZXZlbCBkZXZpY2UgZHJpdmVyIGludGVyYWN0aW9ucy5cblxuKipuc2ltX2Rldl9wb3J0X2RlYnVnZnNfZXhpdDogQSBEZWVwIERpdmUqKlxuXG5BbHJpZ2h0LCBgbnNpbV9kZXZfcG9ydF9kZWJ1Z2ZzX2V4aXRgLiBUaGF0IGZ1bmN0aW9uIG5hbWUgaW1tZWRpYXRlbHkgc2NyZWFtcyBhIGZldyB0aGluZ3MgdG8gbWUuIEZpcnN0LCBcIm5zaW1cIiBzdWdnZXN0cyB0aGlzIGlzIHJlbGF0ZWQgdG8gYSBuZXR3b3JrIHNpbXVsYXRvciwgbGlrZWx5IHVzZWQgZm9yIHRlc3RpbmcgYW5kIGRldmVsb3BtZW50LiBcImRldl9wb3J0XCIgaGludHMgYXQgYSBkZXZpY2UgcG9ydCBhYnN0cmFjdGlvbiwgYSBsaWtlbHkgcG9pbnQgb2YgaW50ZXJhY3Rpb24gb3IgY29uZmlndXJhdGlvbi4gQW5kIFwiZGVidWdmc1wiIGlzIHRoZSBraWNrZXIg4oCTIHdlJ3JlIGRlYWxpbmcgd2l0aCBzb21ldGhpbmcgcmVsYXRlZCB0byBkZWJ1Z2ZzLCB0aGUga2VybmVsJ3MgZGVidWdnaW5nIGZpbGVzeXN0ZW0uXG5cbk15IGluaXRpYWwgdGhvdWdodCBpcywgdGhpcyBmdW5jdGlvbiBpcyByZXNwb25zaWJsZSBmb3IgdGhlIGNsZWFudXAgb3IgdGVhcmRvd24gcHJvY2VkdXJlIGFzc29jaWF0ZWQgd2l0aCB0aGUgc2ltdWxhdGVkIGRldmljZSBwb3J0IGFuZCBpdHMgZGVidWcgaW50ZXJmYWNlIHdpdGhpbiB0aGUgbmV0d29yayBzaW11bGF0aW9uIGVudmlyb25tZW50LiBJ4oCZbSBwaWN0dXJpbmcgYSBzaXR1YXRpb24gd2hlcmUgdGhlIHNpbXVsYXRvciBoYXMgYmVlbiBjb25maWd1cmVkLCBhIHZpcnR1YWwgbmV0d29yayBpbnRlcmZhY2UgbWlnaHQgYmUgdXAsIGFuZCBub3csIHdlJ3JlIGV4aXRpbmcsIHdoZXRoZXIgZ3JhY2VmdWxseSBvciBhYnJ1cHRseS4gVGhpcyBmdW5jdGlvbiBpcyBsaWtlbHkgcmVzcG9uc2libGUgZm9yIHJlbGVhc2luZyByZXNvdXJjZXMsIHVucmVnaXN0ZXJpbmcgdGhlIGRlYnVnZnMgZW50cmllcywgYW5kIGdlbmVyYWxseSBlbnN1cmluZyBhIGNsZWFuIHN0YXRlLlxuXG5NeSBtaW5kIGltbWVkaWF0ZWx5IHN0YXJ0cyB0aWNraW5nIHRocm91Z2ggcG90ZW50aWFsIGFyZWFzIG9mIGNvbmNlcm46XG5cbiogICAqKlJlc291cmNlIGxlYWtzOioqIElzIGl0IG1ha2luZyBzdXJlIGFsbCBhbGxvY2F0ZWQgbWVtb3J5IGlzIGZyZWVkPyBBcmUgZmlsZSBkZXNjcmlwdG9ycyBwcm9wZXJseSBjbG9zZWQ/XG4qICAgKipEZWJ1Z2ZzIGVudHJpZXM6KiogSXMgaXQgY2FyZWZ1bGx5IHJlbW92aW5nIHRoZSBkZWJ1Z2ZzIGVudHJpZXMgdGhhdCB3ZXJlIGNyZWF0ZWQgZm9yIHRoZSBkZXZpY2UgcG9ydD8gTGVhdmluZyBzdGFsZSBlbnRyaWVzIHdvdWxkIGJlIGEgaHVnZSBuby1uby4gSSBuZWVkIHRvIGxvb2sgZm9yIHVucmVnaXN0cmF0aW9uIGZ1bmN0aW9ucy5cbiogICAqKlJhY2UgY29uZGl0aW9uczoqKiBJZiB0aGlzIGNhbiBiZSBjYWxsZWQgY29uY3VycmVudGx5IHdpdGggb3RoZXIgcGFydHMgb2YgdGhlIHNpbXVsYXRvciwgYXJlIHRoZXJlIHByb3BlciBsb2NrcyBpbiBwbGFjZSB0byBwcm90ZWN0IHNoYXJlZCBkYXRhIGFuZCBwcmV2ZW50IGNvcnJ1cHRpb24gZHVyaW5nIGNsZWFudXA/XG4qICAgKipFcnJvciBoYW5kbGluZzoqKiBXaGF0IGhhcHBlbnMgaWYgc29tZXRoaW5nIGdvZXMgd3JvbmcgZHVyaW5nIGNsZWFudXA/IERvZXMgaXQgaGFuZGxlIGVycm9ycyBncmFjZWZ1bGx5LCBsb2cgcmVsZXZhbnQgaW5mb3JtYXRpb24sIGFuZCBhdm9pZCBsZWF2aW5nIHRoZSBzeXN0ZW0gaW4gYW4gdW51c2FibGUgc3RhdGU/IElzIGl0IGNoZWNraW5nIHRoZSByZXR1cm4gY29kZXMgZm9yIHRoZSBmdW5jdGlvbnMgaXQgY2FsbHM/XG4qICAgKipQcm9wZXIgb3JkZXIgb2Ygb3BlcmF0aW9uczoqKiBXaGF0J3MgdGhlIGNvcnJlY3Qgc2VxdWVuY2UgZm9yIHVucmVnaXN0ZXJpbmcgZGVidWdmcyBlbnRyaWVzPyBJIG5lZWQgdG8gZW5zdXJlIHRoZXJlIGFyZSBubyBkZXBlbmRlbmNpZXMgdGhhdCBjb3VsZCBsZWFkIHRvIGNyYXNoZXMgb3IgZGF0YSBjb3JydXB0aW9uLlxuKiAgICoqU2ltdWxhdG9yIGltcGFjdDoqKiBJcyB0aGlzIGZ1bmN0aW9uIHRydWx5IGlzb2xhdGluZyB0aGUgZWZmZWN0cyBvbiB0aGUgZGVidWcgZmlsZXN5c3RlbSwgb3IgZG9lcyBpdCByaXNrIGJyZWFraW5nIG90aGVyIGFzcGVjdHMgb2YgdGhlIHNpbXVsYXRvciB0aGF0IHVzZSB0aGlzIGRlYnVnZnM/XG5cbkVzc2VudGlhbGx5LCBJJ20gbWVudGFsbHkgYnVpbGRpbmcgYSBjaGVja2xpc3Qgb2Ygd2hhdCBJJ2QgZXhwZWN0IHRvIHNlZSB3aXRoaW4gdGhhdCBmdW5jdGlvbiBhbmQgdGhlIHN1cnJvdW5kaW5nIGNvZGUsIGZvY3VzaW5nIG9uIHBvdGVudGlhbCBwcm9ibGVtIGFyZWFzIHRoYXQgb2Z0ZW4gbWFuaWZlc3QgZHVyaW5nIGRlYnVnZnMgb3BlcmF0aW9ucyBhbmQgcmVzb3VyY2UgbWFuYWdlbWVudCB3aXRoaW4ga2VybmVsLWxldmVsIG1vZHVsZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU2ODIsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yN1QxMTozOTo1NS45NzcwNTg1MDdaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTQ0NTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2Rldi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDQ0MCxcbiAgXCJMaW5lQ291bnRcIjogMTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDQ0MDpcXHR9XFxuIDQ0MTpcXHRcXG4gNDQyOlxcdHN0YXRpYyB2b2lkIG5zaW1fZGV2X3BvcnRfZGVidWdmc19leGl0KHN0cnVjdCBuc2ltX2Rldl9wb3J0ICpuc2ltX2Rldl9wb3J0KVxcbiA0NDM6XFx0e1xcbiA0NDQ6XFx0XFx0ZGVidWdmc19yZW1vdmVfcmVjdXJzaXZlKG5zaW1fZGV2X3BvcnQtXFx1MDAzZWRkaXIpO1xcbiA0NDU6XFx0fVxcbiA0NDY6XFx0XFxuIDQ0NzpcXHRzdGF0aWMgaW50IG5zaW1fZGV2X3Jlc291cmNlc19yZWdpc3RlcihzdHJ1Y3QgZGV2bGluayAqZGV2bGluaylcXG4gNDQ4OlxcdHtcXG4gNDQ5OlxcdFxcdHN0cnVjdCBkZXZsaW5rX3Jlc291cmNlX3NpemVfcGFyYW1zIHBhcmFtcyA9IHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjdUMTE6Mzk6NTUuOTc3MjE2MDY3WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTY3MzQ2NDU3MTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBEZWJ1Z2ZzIENsZWFudXAgT3JkZXIqKlxuXG5Pa2F5LCBzbyBgbnNpbV9kZXZfcG9ydF9kZWJ1Z2ZzX2V4aXRgIG5vdyBqdXN0IGRvZXMgYSByZWN1cnNpdmUgYGRlYnVnZnNfcmVtb3ZlYC4gVGhlIHBhdGNoIHN0cmVhbWxpbmVzIHRoZSByZW1vdmFsIG9mIGRlYnVnZnMgZW50cmllcywgcmVseWluZyBvbiB0aGlzIGZ1bmN0aW9uIGluc3RlYWQgb2Ygc2NhdHRlcmVkIGBkZWJ1Z2ZzX3JlbW92ZWAgY2FsbHMgd2l0aGluIGBuc2ltX2Rlc3Ryb3lgIGFuZCBpdHMgc3ViLWNvbXBvbmVudHMuIEJ1dCBoZXJlJ3MgdGhlIGtpY2tlcjogYG5zaW1fZGVzdHJveWAgbm93IGV4ZWN1dGVzICphZnRlciogYG5zaW1fZGV2X3BvcnRfZGVidWdmc19leGl0YC4gVGhhdCBtZWFucyB0aGUgZGVidWdmcyBmaWxlcyBhcmUgYmVpbmcgbnVrZWQgKmJlZm9yZSogYG5zaW1fZGVzdHJveWAgZ2V0cyBhIGNoYW5jZSB0byBmcmVlIHRoZSB1bmRlcmx5aW5nIHN0cnVjdHVyZXMuXG5cbkFoYSEgVGhpcyBvcmRlciBzaGlmdCBpcyBhIHVzZS1hZnRlci1mcmVlIG1pdGlnYXRpb24uIElmIGEgZGVidWdmcyBmaWxlIGlzIGFjY2Vzc2VkIGR1cmluZyB0aGUgZXhlY3V0aW9uIG9mIGBuc2ltX2Rlc3Ryb3lgLCBvciBwb3RlbnRpYWxseSBldmVuIGFmdGVyIGl0IGhhcyBzdGFydGVkIGZyZWVpbmcgcmVzb3VyY2VzLCB0aGUgcmVtb3ZhbCBvZiB0aGUgZGVidWdmcyBlbnRyaWVzICpiZWZvcmUqIHRoYXQgcG9pbnQgaXMgYSBzYWZldHkgbmV0LiBUaGlzIGxvb2tzIGxpa2UgYSBkZWZpbml0ZSBmaXggZm9yIGEgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdHkgaW4gaG93IHRoZSBkZWJ1Z2ZzIGludGVyZmFjZSBpbnRlcmFjdHMgd2l0aCB0aGUgbmV0ZGV2c2ltIHRlYXJkb3duIHNlcXVlbmNlLlxuXG5UaGUgcXVlc3Rpb24gbm93IGlzIHdoZXRoZXIgdGhpcyBpcyB3b3J0aCBmdXp6aW5nLiBJdCdzIG5vdCBhIG5ldyBmZWF0dXJlLCBidXQgYSBidWcgZml4LiBGdXp6aW5nIHdvdWxkIGludm9sdmUgcHJvYmluZyB0aGUgbmV0ZGV2c2ltIGRlYnVnZnMgaW50ZXJmYWNlIHdoaWxlIGNyZWF0aW5nIGFuZCBkZXN0cm95aW5nIG5ldGRldnNpbSBwb3J0cy4gU2luY2UgaXQncyBjaGFuZ2luZyB0aGUgb3JkZXIgb2YgZGVzdHJ1Y3Rpb24gZHVyaW5nIHRlYXJkb3duLCBpdCdzIGEgZnVuY3Rpb25hbCBjaGFuZ2UsIHRob3VnaCBzdWJ0bGUuIFN5emthbGxlciwgd2l0aCBpdHMga25vd24gcHJvd2VzcyBpbiBuZXRkZXZzaW0sIHNob3VsZCBiZSBhYmxlIHRvIGV4ZXJjaXNlIHRoaXMgY29kZSBwYXRoIGJ5IGNvbmN1cnJlbnRseSBjcmVhdGluZywgZGVzdHJveWluZywgYW5kIGFjY2Vzc2luZyBkZWJ1Z2ZzLiBOZXRkZXZzaW0gaXRzZWxmLCBiZWluZyBhIHNvZnR3YXJlIHNpbXVsYXRvciwgaXMgYWxyZWFkeSBhIHN5emthbGxlciB0YXJnZXQuIFBlcmhhcHMgaXQncyB3b3J0aCBob25pbmcgaW4gb24gc3BlY2lmaWMgZnVuY3Rpb25zOiBgX19uc2ltX2Rldl9wb3J0X2FkZGAsIGBfX25zaW1fZGV2X3BvcnRfZGVsYCwgYG5zaW1fZGVzdHJveWAsIGFuZCBgbnNpbV9jcmVhdGVgLiBUaGVzZSBhcmUgdGhlIGtleSBmdW5jdGlvbnMgaW52b2x2ZWQgaW4gdGhlIGxpZmVjeWNsZSBvZiBuZXRkZXZzaW0gcG9ydHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY0MjEsIk91dHB1dFRva2VucyI6MjMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MzgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yN1QxMTo0MDoxMi43MTE4NjQzNjVaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjE5NzU0NTU3OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJfX25zaW1fZGV2X3BvcnRfYWRkXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L25ldGRldnNpbS9kZXYuYz02NDg9c3RhdGljIGludFxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9kZXYuYzo2NDk6X19uc2ltX2Rldl9wb3J0X2FkZChzdHJ1Y3QgbnNpbV9kZXYgKm5zaW1fZGV2LCBlbnVtIG5zaW1fZGV2X3BvcnRfdHlwZSB0eXBlLFxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9kZXYuYy02NTAtXFx0XFx0ICAgIHVuc2lnbmVkIGludCBwb3J0X2luZGV4LCB1OCBwZXJtX2FkZHJbRVRIX0FMRU5dKTtcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9kZXYuYz02Njc9c3RhdGljIGludCBuc2ltX2Vzd19zd2l0Y2hkZXZfZW5hYmxlKHN0cnVjdCBuc2ltX2RldiAqbnNpbV9kZXYsXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vZGV2LmMtNjczLVxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBuc2ltX2Rldl9nZXRfdmZzKG5zaW1fZGV2KTsgaSsrKSB7XFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2Rldi5jOjY3NDpcXHRcXHRlcnIgPSBfX25zaW1fZGV2X3BvcnRfYWRkKG5zaW1fZGV2LCBOU0lNX0RFVl9QT1JUX1RZUEVfVkYsIGksIE5VTEwpO1xcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9kZXYuYy02NzUtXFx0XFx0aWYgKGVycikge1xcbi0tXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2Rldi5jPTE0MjU9c3RhdGljIGNvbnN0IHN0cnVjdCBkZXZsaW5rX29wcyBuc2ltX2Rldl9kZXZsaW5rX29wcyA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9kZXYuYy0xNDU0LVxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9kZXYuYzoxNDU1OnN0YXRpYyBpbnQgX19uc2ltX2Rldl9wb3J0X2FkZChzdHJ1Y3QgbnNpbV9kZXYgKm5zaW1fZGV2LCBlbnVtIG5zaW1fZGV2X3BvcnRfdHlwZSB0eXBlLFxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9kZXYuYy0xNDU2LVxcdFxcdFxcdCAgICAgICB1bnNpZ25lZCBpbnQgcG9ydF9pbmRleCwgdTggcGVybV9hZGRyW0VUSF9BTEVOXSlcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9kZXYuYz0xNTY0PXN0YXRpYyBpbnQgbnNpbV9kZXZfcG9ydF9hZGRfYWxsKHN0cnVjdCBuc2ltX2RldiAqbnNpbV9kZXYsXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vZGV2LmMtMTU2OS1cXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgcG9ydF9jb3VudDsgaSsrKSB7XFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2Rldi5jOjE1NzA6XFx0XFx0ZXJyID0gX19uc2ltX2Rldl9wb3J0X2FkZChuc2ltX2RldiwgTlNJTV9ERVZfUE9SVF9UWVBFX1BGLCBpLCBOVUxMKTtcXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vZGV2LmMtMTU3MS1cXHRcXHRpZiAoZXJyKVxcbi0tXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2Rldi5jPTE4Mjk9aW50IG5zaW1fZHJ2X3BvcnRfYWRkKHN0cnVjdCBuc2ltX2J1c19kZXYgKm5zaW1fYnVzX2RldiwgZW51bSBuc2ltX2Rldl9wb3J0X3R5cGUgdHlwZSxcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9kZXYuYy0xODM4LVxcdGVsc2VcXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vZGV2LmM6MTgzOTpcXHRcXHRlcnIgPSBfX25zaW1fZGV2X3BvcnRfYWRkKG5zaW1fZGV2LCB0eXBlLCBwb3J0X2luZGV4LCBwZXJtX2FkZHIpO1xcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9kZXYuYy0xODQwLVxcdGRldmxfdW5sb2NrKHByaXZfdG9fZGV2bGluayhuc2ltX2RldikpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yN1QxMTo0MDoxNC45MDk0MjExNzNaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NzkyNTg4NjgwMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIE5ldGRldnNpbSBQYXRjaCoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgc2l0dGluZyBpbiBgZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2AuIEkgY2FuIHNlZSB0aGUgcmVsZXZhbnQgY29uZmlnIGlzIGBORVRERVZTSU1gLCB3aGljaCBtYWtlcyBzZW5zZS4gSSBzaG91bGQgcHJvYmFibHkgZm9jdXMgb24gdGhvc2Ugc3ltYm9sczogYF9fbnNpbV9kZXZfcG9ydF9hZGRgLCBgX19uc2ltX2Rldl9wb3J0X2RlbGAsIGBuc2ltX2NyZWF0ZWAsIGFuZCBgbnNpbV9kZXN0cm95YC4gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiB3aGF0IHRoaXMgcGF0Y2ggYWN0dWFsbHkgKmRvZXMqLlxuXG5XYWl0IGEgc2Vjb25k4oCmIGl0IGxvb2tzIGxpa2UgdGhpcyBpcyBqdXN0IGEgY2xlYW51cCBmb3IgZGVidWdmcz8gQWgsIHllcy4gSXQncyByZW1vdmluZyB0aG9zZSBpbmRpdmlkdWFsIGRlYnVnZnMgcmVtb3ZhbCBjYWxscyBhbmQgaXMgbGVhbmluZyBvbiBgZGVidWdmc19yZW1vdmVfcmVjdXJzaXZlYCBmb3IgdGhlIHBhcmVudCBkaXJlY3RvcnkgaW5zdGVhZC4gVGhhdCdzIGdvb2QgcHJhY3RpY2UuXG5cbklzIHRoaXMgd29ydGggc3BlbmRpbmcgdGltZSBmdXp6aW5nPyBZZXMsIGFic29sdXRlbHkuIEV2ZW4gaWYgaXQgKnNlZW1zKiBtaW5vciwgdGhpcyB0b3VjaGVzIHRoZSB0ZWFyZG93biBzZXF1ZW5jZSwgYW5kIGl0IHNheXMgaXQgZml4ZXMgYSBidWcg4oCTIHBvdGVudGlhbGx5IGEgdXNlLWFmdGVyLWZyZWUgb3Igc29tZXRoaW5nIHNpbWlsYXIuIEFueSBjaGFuZ2UgaW4gdGVhcmRvd24gaXMgd29ydGggc2NydXRpbnksIGVzcGVjaWFsbHkgd2l0aCBtZW1vcnkgbWFuYWdlbWVudCBpbnZvbHZlZC5cblxuQWxyaWdodCwgYmVmb3JlIEkgZGl2ZSBkZWVwZXIsIGxldCdzIHRha2UgYSBxdWljayBsb29rIGF0IHRoZSBgZHJpdmVycy9uZXQvbmV0ZGV2c2ltL0tjb25maWdgIGZpbGUsIHRvIG1ha2Ugc3VyZSBJIHVuZGVyc3RhbmQgdGhlIGRlcGVuZGVuY2llcy5cblxuXG4iLCJJbnB1dFRva2VucyI6ODAyMywiT3V0cHV0VG9rZW5zIjoxOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yN1QxMTo0MToxMi44MzUzMTQwMzVaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxNjA4MjA2NTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE5FVERFVlNJTVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9LY29uZmlnPTYwMj1zb3VyY2UgXFxcImRyaXZlcnMvbmV0L2h5cGVydi9LY29uZmlnXFxcIlxcbmRyaXZlcnMvbmV0L0tjb25maWctNjAzLVxcbmRyaXZlcnMvbmV0L0tjb25maWc6NjA0OmNvbmZpZyBORVRERVZTSU1cXG5kcml2ZXJzL25ldC9LY29uZmlnLTYwNS1cXHR0cmlzdGF0ZSBcXFwiU2ltdWxhdGVkIG5ldHdvcmtpbmcgZGV2aWNlXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yN1QxMTo0MToxNC45OTYxNDMyMTVaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzQ2OTc2MDIyOTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipJbml0aWFsIENvbmZpZ3VyYXRpb24gQ2hlY2sqKlxuXG5BbHJpZ2h0LCBiZWZvcmUgZGl2aW5nIHRvbyBkZWVwLCBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgaGF2ZW4ndCBtaXNzZWQgc29tZXRoaW5nIGZ1bmRhbWVudGFsLiBJJ20gZ29pbmcgdG8gcXVpY2tseSBzY2FuIGZvciBhbHRlcm5hdGUgb3IgZXhpc3RpbmcgY29uZmlndXJhdGlvbnMuIEl0J3MgYSBoYWJpdCwgcmVhbGx5LiBQcmV2ZW50cyBtZSBmcm9tIGdvaW5nIGRvd24gYSByYWJiaXQgaG9sZSBhbmFseXppbmcgYSBwcm9ibGVtIG9ubHkgdG8gcmVhbGl6ZSBJJ20gd29ya2luZyB3aXRoIHRoZSB3cm9uZyBzZXR1cCBvciBhbiBvdmVycmlkZGVuIHBhcmFtZXRlci4gQmV0dGVyIHRvIGVuc3VyZSBJJ20gc3RhcnRpbmcgZnJvbSBhIGZ1bGx5IHVuZGVyc3Rvb2QgYmFzZWxpbmUuIFNvLCBmaXJzdCB0aGluZ3MgZmlyc3QsIGxldCdzIHNlZSBpZiB0aGVyZSBhcmUgYW55IG90aGVyIGNvbmZpZ3VyYXRpb24gZmlsZXMsIGVudmlyb25tZW50IHZhcmlhYmxlcywgb3IgZXZlbiBjb21tYW5kLWxpbmUgYXJndW1lbnRzIHRoYXQgbWlnaHQgYmUgaW5mbHVlbmNpbmcgdGhlIHN5c3RlbSdzIGJlaGF2aW9yLiBBIHF1aWNrIHN3ZWVwIGlzIGVzc2VudGlhbCBiZWZvcmUgSSB3YXN0ZSB0aW1lLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4NTMxLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjdUMTE6NDE6NDkuNjkzNzQ4NzU4WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg4NzgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogNjA0LFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNjA0OlxcdGNvbmZpZyBORVRERVZTSU1cXG4gNjA1OlxcdFxcdHRyaXN0YXRlIFxcXCJTaW11bGF0ZWQgbmV0d29ya2luZyBkZXZpY2VcXFwiXFxuIDYwNjpcXHRcXHRkZXBlbmRzIG9uIERFQlVHX0ZTXFxuIDYwNzpcXHRcXHRkZXBlbmRzIG9uIElORVRcXG4gNjA4OlxcdFxcdGRlcGVuZHMgb24gUFNBTVBMRSB8fCBQU0FNUExFPW5cXG4gNjA5OlxcdFxcdGRlcGVuZHMgb24gUFRQXzE1ODhfQ0xPQ0tfTU9DSyB8fCBQVFBfMTU4OF9DTE9DS19NT0NLPW5cXG4gNjEwOlxcdFxcdHNlbGVjdCBORVRfREVWTElOS1xcbiA2MTE6XFx0XFx0c2VsZWN0IFBBR0VfUE9PTFxcbiA2MTI6XFx0XFx0c2VsZWN0IE5FVF9TSEFQRVJcXG4gNjEzOlxcdFxcdGhlbHBcXG4gNjE0OlxcdFxcdCAgVGhpcyBkcml2ZXIgaXMgYSBkZXZlbG9wZXIgdGVzdGluZyB0b29sIGFuZCBzb2Z0d2FyZSBtb2RlbCB0aGF0IGNhblxcbiA2MTU6XFx0XFx0ICBiZSB1c2VkIHRvIHRlc3QgdmFyaW91cyBjb250cm9sIHBhdGggbmV0d29ya2luZyBBUElzLCBlc3BlY2lhbGx5XFxuIDYxNjpcXHRcXHQgIEhXLW9mZmxvYWQgcmVsYXRlZC5cXG4gNjE3OlxcdFxcbiA2MTg6XFx0XFx0ICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlXFxuIDYxOTpcXHRcXHQgIHdpbGwgYmUgY2FsbGVkIG5ldGRldnNpbS5cXG4gNjIwOlxcdFxcbiA2MjE6XFx0Y29uZmlnIE5FVF9GQUlMT1ZFUlxcbiA2MjI6XFx0XFx0dHJpc3RhdGUgXFxcIkZhaWxvdmVyIGRyaXZlclxcXCJcXG4gNjIzOlxcdFxcdHNlbGVjdCBGQUlMT1ZFUlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yN1QxMTo0MTo0OS42OTM4Mzk1MjhaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTkwNjQ0NDE0NDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOlxuXG4qKkludmVzdGlnYXRpbmcgTmV0d29yayBEZXZpY2UgU2ltdWxhdGlvbiBhbmQgSVBzZWMqKlxuXG5SaWdodCwgc28gSSBzZWUgYE5FVERFVlNJTWAgYXMgdGhlIGNlbnRyYWwgY29uZmlndXJhdGlvbiBwb2ludCwgdGhlIGh1Yi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHJlbGF0aW9uc2hpcCB0byB0aGUgb3RoZXIgcGFydHMuIEFuZCB0aGVuIEkgaGl0IHNvbWV0aGluZyBpbnRlcmVzdGluZzogYGlwc2VjLmNgIGhhcyBhIGBuc2ltX2lwc2VjX3RlYXJkb3duYCBmdW5jdGlvbi4uLiB0aGF0J3MgYSBjbHVlLiBNeSBtaW5kIGltbWVkaWF0ZWx5IGp1bXBzIHRvIGEgZGVwZW5kZW5jeSAtIGRvZXMgdGhpcyBgbnNpbV9pcHNlY190ZWFyZG93bmAgZnVuY3Rpb24gKnJlcXVpcmUqIHRoZSBgTkVUREVWU0lNX0lQU0VDYCBjb25maWd1cmF0aW9uIG9wdGlvbiB0byBiZSBkZWZpbmVkPyBUaGF0IGZlZWxzIGxpa2UgdGhlIGNyaXRpY2FsIHF1ZXN0aW9uIHRvIGludmVzdGlnYXRlIG5leHQuIFVuZGVyc3RhbmRpbmcgdGhhdCBkZXBlbmRlbmN5IHdpbGwgYmUga2V5IHRvIHByb3Blcmx5IGNvbmZpZ3VyaW5nIGFuZCB3b3JraW5nIHdpdGggdGhpcyBzaW11bGF0aW9uIGVudmlyb25tZW50LCBwYXJ0aWN1bGFybHkgaW4gcmVsYXRpb24gdG8gSVBzZWMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjkwMzcsIk91dHB1dFRva2VucyI6MjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI3VDExOjQyOjA4Ljc1ODI4NDYxMVoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTkzNjg1MTcxMiwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE5FVERFVlNJTV9JUFNFQ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjdUMTE6NDI6MTAuNjk1MTQ3MDMzWiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM4OTMzMTQ4MjUyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBOZXRkZXZzaW0gTWFrZWZpbGUqKlxuXG5Pa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGJ1aWxkIHByb2Nlc3MgZm9yIHRoZSBgbmV0ZGV2c2ltYCBtb2R1bGUsIHNvIHRoZSBmaXJzdCBsb2dpY2FsIHN0ZXAgaXMgdG8gZXhhbWluZSB0aGUgYGRyaXZlcnMvbmV0L25ldGRldnNpbS9NYWtlZmlsZWAuIFRoaXMgaXMgd2hlcmUgYWxsIHRoZSBjb21waWxhdGlvbiBpbnN0cnVjdGlvbnMsIGRlcGVuZGVuY2llcywgYW5kIHBvdGVudGlhbCBjb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIHRoZSBuZXRkZXZzaW0gZGV2aWNlIHdvdWxkIGJlIGRlZmluZWQuIEknbSBleHBlY3RpbmcgdG8gZmluZCBydWxlcyBmb3IgY29tcGlsaW5nIHRoZSBjb3JlIG5ldGRldnNpbSBjb2RlLCBhbnkgc3VwcG9ydCBsaWJyYXJpZXMgb3IgZHJpdmVycyBpdCByZWxpZXMgb24sIGFuZCBwZXJoYXBzIGV2ZW4gc29tZSBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgc2VjdGlvbnMgaWYgaXQgaGFzIGRpZmZlcmVudCBpbXBsZW1lbnRhdGlvbnMgYWNyb3NzIHBsYXRmb3Jtcy4gSSdsbCBiZSBsb29raW5nIGZvciB0aGluZ3MgbGlrZSBvYmplY3QgZmlsZSBkZWZpbml0aW9ucywgaW5jbHVkZSBwYXRocywgbGlua2VyIGZsYWdzLCBtb2R1bGUgZGVwZW5kZW5jaWVzIChlLmcuLCBvdGhlciBuZXR3b3JrIHN0YWNrIGNvbXBvbmVudHMpLCBhbmQgYW55IGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGJhc2VkIG9uIGtlcm5lbCBjb25maWd1cmF0aW9uIG9wdGlvbnMuIFVuZGVyc3RhbmRpbmcgdGhpcyBNYWtlZmlsZSB3aWxsIGdpdmUgbWUgYSBzb2xpZCBmb3VuZGF0aW9uIGZvciBmdXJ0aGVyIGludmVzdGlnYXRpb24sIGVzcGVjaWFsbHkgaWYgSSBuZWVkIHRvIG1vZGlmeSBvciBkZWJ1ZyB0aGUgbmV0ZGV2c2ltIGRyaXZlci5cblxuXG4iLCJJbnB1dFRva2VucyI6OTI4NiwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI3VDExOjQyOjQ5LjYyODI5NzgxNVoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2OTcwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9uZXRkZXZzaW0vTWFrZWZpbGVcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogMTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuICAgMjpcXHRcXG4gICAzOlxcdG9iai0kKENPTkZJR19ORVRERVZTSU0pICs9IG5ldGRldnNpbS5vXFxuICAgNDpcXHRcXG4gICA1OlxcdG5ldGRldnNpbS1vYmpzIDo9IFxcXFxcXG4gICA2OlxcdFxcdG5ldGRldi5vIGRldi5vIGV0aHRvb2wubyBmaWIubyBidXMubyBoZWFsdGgubyBod3N0YXRzLm8gdWRwX3R1bm5lbHMubyB0Yy5vXFxuICAgNzpcXHRcXG4gICA4OlxcdGlmZXEgKCQoQ09ORklHX0JQRl9TWVNDQUxMKSx5KVxcbiAgIDk6XFx0bmV0ZGV2c2ltLW9ianMgKz0gXFxcXFxcbiAgMTA6XFx0XFx0YnBmLm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjdUMTE6NDI6NDkuNjI4MzY4OTk1WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM4MTY4MzA0NzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBzdW1tYXJ5LCBwcmVzZW50ZWQgYXMgYSBzdHJlYW0gb2YgdGhvdWdodDpcblxuKipJUHNlYyBhbmQgUFNQOiBBIFF1aWNrIENoZWNrLUluKipcblxuUmlnaHQsIGxldCdzIHNlZS4uLiBJJ20gY3VycmVudGx5IGZvY3VzZWQgb24gYSBicm9hZGVyIGFyY2hpdGVjdHVyYWwgcGllY2UsIGJ1dCBzb21ldGhpbmcncyBuYWdnaW5nIGF0IG1lLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEknbSBub3Qgb3Zlcmxvb2tpbmcgYW55dGhpbmcgY3JpdGljYWwsIHBhcnRpY3VsYXJseSBhcm91bmQgdGhlIGNvcmUgbmV0d29ya2luZyBzZWN1cml0eSBhc3BlY3RzLiBIbW0uLi4gd2hhdCBhYm91dCBgaXBzZWMuY2A/IFRoYXQncyBkZWZpbml0ZWx5IGEgY3J1Y2lhbCBjb21wb25lbnQuIEkgbmVlZCB0byBxdWlja2x5IHJ1biB0aHJvdWdoIG15IG1lbnRhbCBjaGVja2xpc3Q6IGVuY3J5cHRpb24sIGF1dGhlbnRpY2F0aW9uLCBrZXkgbWFuYWdlbWVudCwgdHVubmVsIGVzdGFibGlzaG1lbnQg4oCTIGFyZSB0aGVyZSBhbnkgcmVjZW50IGNoYW5nZXMgdGhlcmUgdGhhdCBpbXBhY3QgdGhlIGN1cnJlbnQgZGVzaWduPyBBcmUgdGhlcmUgYW55IHBvdGVudGlhbCBpbnRlZ3JhdGlvbiBwb2ludHMgb3IgY29uZmxpY3RzIEkgbmVlZCB0byByZXZpc2l0IGluIGxpZ2h0IG9mIHRoZSBiaWdnZXIgcGljdHVyZT9cblxuQW5kIHRoZW4gdGhlcmUncyBgcHNwLmNgLiBUaGF0IGZpbGUgYWx3YXlzIHNlZW1zIHRvIGJlIHJpZ2h0IG9uIHRoZSBlZGdlIG9mIG15IG1lbW9yeS4gSXQgcmVsYXRlcyB0byBzb21lIG9mIHRoZSBwZXJmb3JtYW5jZSBzdHVmZiwgcmlnaHQ/IFNwZWNpZmljYWxseSwgYW55dGhpbmcgcmVsYXRlZCB0byBwYWNrZXQgZmlsdGVyaW5nPyBEaWQgdGhhdCBnZXQgdXBkYXRlZCByZWNlbnRseT8gSSBuZWVkIHRvIHF1aWNrbHkgcmVjYWxsIHRoZSBpbXBsaWNhdGlvbnMgb2YgYW55IG9mIHRob3NlIG1vZGlmaWNhdGlvbnMsIGVzcGVjaWFsbHkgaWYgdGhlcmUncyBhbnkgaW1wYWN0IG9uIHRoZSBvdmVyYWxsIHRocm91Z2hwdXQgb3IgbGF0ZW5jeSBvZiBvdXIgc2VjdXJpdHkgcG9zdHVyZS4gSSBzaG91bGQgcXVpY2tseSByZXZpZXcgdGhvc2UgY2hhbmdlcyB0byBtYWtlIHN1cmUgdGhpcyBmaXRzIHJpZ2h0IGludG8gd2hhdCBJJ20gZG9pbmcgYW5kIGRvZXMgbm90IHByZXNlbnQgc29tZSBzb3J0IG9mIGJvdHRsZW5lY2suIEp1c3QgYSBxdWljayBzYW5pdHkgY2hlY2sgdG8gYmUgc3VyZS4gQWxyaWdodCwgbGV0J3Mgam90IHRob3NlIGRvd24gYXMgYWN0aW9uIGl0ZW1zIHRvIHJldmlzaXQuIEl0J3MgYSBxdWljayBjaGVjay1pbiB0byBlbnN1cmUgSSBoYXZlbid0IGZvcmdvdHRlbiBhbnl0aGluZyBjcml0aWNhbC5cblxuXG4iLCJJbnB1dFRva2VucyI6OTY5NywiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjdUMTE6NDI6NTMuNDQ1MjAyOTMzWiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjczNTcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L25ldGRldnNpbS9NYWtlZmlsZVwiLFxuICBcIkZpcnN0TGluZVwiOiAxMSxcbiAgXCJMaW5lQ291bnRcIjogMTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAxMTpcXHRlbmRpZlxcbiAgMTI6XFx0XFxuICAxMzpcXHRpZm5lcSAoJChDT05GSUdfWEZSTV9PRkZMT0FEKSwpXFxuICAxNDpcXHRuZXRkZXZzaW0tb2JqcyArPSBpcHNlYy5vXFxuICAxNTpcXHRlbmRpZlxcbiAgMTY6XFx0XFxuICAxNzpcXHRpZm5lcSAoJChDT05GSUdfUFNBTVBMRSksKVxcbiAgMTg6XFx0bmV0ZGV2c2ltLW9ianMgKz0gcHNhbXBsZS5vXFxuICAxOTpcXHRlbmRpZlxcbiAgMjA6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI3VDExOjQyOjUzLjQ0NTI4MDAwM1oiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDIxNDE0ODM3NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgcHJlc2VudGVkIGFzIGlmIGl0IHdlcmUgbXkgb3duIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipJbnZlc3RpZ2F0aW5nIGBwc3AuY2AqKlxuXG5BbHJpZ2h0LCBzbyB0aGUgcXVlc3Rpb24gaW1tZWRpYXRlbHkgc3ByaW5ncyB0byBtaW5kOiAqYHBzcC5jYD8qIFdoYXQncyB0aGUgY29udGV4dCBoZXJlPyBHaXZlbiB0aGUgbmF0dXJlIG9mIG15IHdvcmssIGFuZCB0aGUgaW1wbGllZCBuZWVkIGZvciBkZWVwZXIgYW5hbHlzaXMsIHRoaXMgbXVzdCBiZSBzaWduaWZpY2FudC4gSSdtIGxpa2VseSBsb29raW5nIGF0IGEgY29yZSBjb21wb25lbnQgb2Ygc29tZXRoaW5nIC0gcG90ZW50aWFsbHkga2VybmVsLWxldmVsLCBtYXliZSBhIGRyaXZlciwgb3IgY3JpdGljYWwgc3lzdGVtIG1vZHVsZS4gVGhlIG5hbWUgXCJwc3BcIiBpdHNlbGYgaXMgZXZvY2F0aXZlLiBJcyB0aGlzIHJlbGF0ZWQgdG8gYSBzcGVjaWZpYyBwbGF0Zm9ybSwgbGlrZSBQbGF5U3RhdGlvbiBQb3J0YWJsZSAoUFNQKSwgb3IgaXMgaXQgYW4gYWNyb255bSBJJ20gZmFtaWxpYXIgd2l0aCBpbiBhbm90aGVyIGNvbnRleHQ/IEkgbmVlZCB0byBxdWlja2x5IHJlY2FsbCBteSBrbm93bGVkZ2UgYmFzZSwgYW5kIGRldGVybWluZSB0aGUgc2NvcGUgb2YgdGhpcyBmaWxlLiBXaGF0IHN5c3RlbSBhbSBJIHdvcmtpbmcgd2l0aD8gV2hhdCBzcGVjaWZpYyBhcmNoaXRlY3R1cmUgb3IgZnJhbWV3b3JrIGlzIGluIHVzZT8gV2hhdCdzIHRoZSBwb3RlbnRpYWwgaW1wYWN0IG9mIGl0cyBiZWhhdmlvcj8gRG9lcyBpdCBwZXJ0YWluIHRvIG1lbW9yeSBtYW5hZ2VtZW50LCBwcm9jZXNzIHNjaGVkdWxpbmcsIHBvd2VyIG1hbmFnZW1lbnQsIG9yIHNvbWV0aGluZyBlbHNlIGVudGlyZWx5PyBBIGNvbXByZWhlbnNpdmUgdW5kZXJzdGFuZGluZyBvZiBgcHNwLmNgIGlzIHBhcmFtb3VudCB0byByZXNvbHZpbmcgd2hhdGV2ZXIgaXNzdWUgSSdtIGN1cnJlbnRseSBmYWNpbmcuIFRoaXMgaXMgZ29pbmcgdG8gYmUgY3J1Y2lhbC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTAxNjIsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjdUMTE6NDM6MjcuNjU5NDMxMzM5WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY4OTIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L25ldGRldnNpbS9NYWtlZmlsZVwiLFxuICBcIkZpcnN0TGluZVwiOiAyMSxcbiAgXCJMaW5lQ291bnRcIjogMTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAyMTpcXHRpZm5lcSAoJChDT05GSUdfSU5FVF9QU1ApLClcXG4gIDIyOlxcdG5ldGRldnNpbS1vYmpzICs9IHBzcC5vXFxuICAyMzpcXHRlbmRpZlxcbiAgMjQ6XFx0XFxuICAyNTpcXHRpZm5lcSAoJChDT05GSUdfTUFDU0VDKSwpXFxuICAyNjpcXHRuZXRkZXZzaW0tb2JqcyArPSBtYWNzZWMub1xcbiAgMjc6XFx0ZW5kaWZcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjdUMTE6NDM6MjcuNjU5NTAyMDM5WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0NDQwNjAzNjI2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IENvbmZpZ3VyYXRpb24gQ29uc2lkZXJhdGlvbnMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBlbmFibGluZyBgTkVUREVWU0lNYCwgYFhGUk1fT0ZGTE9BRGAsIGFuZCBgSU5FVF9QU1BgLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEknbSBkb2luZyB0aGlzIGNvcnJlY3RseS4gQSBxdWljayBjaGVjayByZXZlYWxzIHRoYXQgYFhGUk1fT0ZGTE9BRGAgYW5kIGBJTkVUX1BTUGAgYXJlIHNwZWNpZmljYWxseSBsaW5rZWQgdG8gc29tZSBmaWxlcywgYnV0IHRoZSBzdWJzdGFudGlhbCBjaGFuZ2VzIHNlZW0gdG8gYmUgaW4gYGRldi5jYCBhbmQgYG5ldGRldi5jYCwgc28gSSdsbCBrZWVwIGFuIGV5ZSBvbiB0aG9zZS4gSSdsbCBuZWVkIHRvIGV4cGxpY2l0bHkgZW5hYmxlIGBORVRERVZTSU1gLCBgWEZSTV9PRkZMT0FEYCwgYW5kIGBJTkVUX1BTUGAgaW4gdGhlIGNvbmZpZ3VyYXRpb24uIE5vdywgSSBuZWVkIHRvIGRvdWJsZS1jaGVjayBteSBhc3N1bXB0aW9ucy4uLkkgbmVlZCB0byBjb25maXJtIGBJTkVUX1BTUGA7IGlzIHRoYXQgYSBkaXJlY3QgY29uZmlndXJhdGlvbiBvcHRpb24sIG9yIGlzIGl0IGVuYWJsZWQgdmlhIGFub3RoZXIgc2V0dGluZz8gTGV0IG1lIG1ha2Ugc3VyZSBJJ20gbm90IG1pc3NpbmcgYW55dGhpbmcgY3J1Y2lhbCBoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDUzOSwiT3V0cHV0VG9rZW5zIjoxOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExMCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI3VDExOjQ0OjAyLjEwMDEwODIwNVoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTk5ODMxMDE5NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgSU5FVF9QU1BcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3BzcC9LY29uZmlnLTQtI1xcbm5ldC9wc3AvS2NvbmZpZzo1OmNvbmZpZyBJTkVUX1BTUFxcbm5ldC9wc3AvS2NvbmZpZy02LVxcdGJvb2wgXFxcIlBTUCBTZWN1cml0eSBQcm90b2NvbCBzdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yN1QxMTo0NDowNC4wOTg0MzI0NjFaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjAzNDAyNDQzMTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKk9mZmxvYWQgQ29uc2lkZXJhdGlvbnMgLSBYRlJNKipcblxuQWxyaWdodCwgSSdtIHRoaW5raW5nIGFib3V0IHRoZSBjdXJyZW50IHN0YXRlIG9mIHRoaW5ncy4gV2UncmUgY2xlYXJseSBwdXNoaW5nIHBlcmZvcm1hbmNlIHdpdGggdGhpcyBsYXRlc3QgaW1wbGVtZW50YXRpb24sIGJ1dCBJIGtlZXAgY2lyY2xpbmcgYmFjayB0byBwb3RlbnRpYWwgYm90dGxlbmVja3MuIEFuZCB0aGUgYmlnIG9uZSB0aGF0IGtlZXBzIHBva2luZyBhdCBtZSBpcywgXCJXaGF0IGFib3V0IGBYRlJNX09GRkxPQURgP1wiIFdlJ3ZlIGdvdCBvdXIgY29yZSBwcm9jZXNzaW5nIGRpYWxlZCBpbiwgYnV0IG9mZmxvYWRpbmcgaXMgYSBjcml0aWNhbCBwaWVjZSwgYW5kIEkgbmVlZCB0byBtYWtlIHN1cmUgd2UncmUgbm90IG5lZ2xlY3RpbmcgdGhlIGltcGxpY2F0aW9ucy5cblxuV2UgY2FuJ3QganVzdCBhc3N1bWUgdGhlIGN1cnJlbnQgc2V0dXAgY292ZXJzIGFsbCBvdXIgYmFzZXMuIFdlIG5lZWQgdG8gYW5hbHl6ZSB0aGlzIGZyb20gYWxsIGFuZ2xlcyB0byBwcmV2ZW50IHNsb3dkb3ducyBhbmQgb3RoZXIgcGVyZm9ybWFuY2UgaXNzdWVzLiBJcyB0aGUgY3VycmVudCBkZXNpZ24gc3RpbGwgdGhlIGJlc3QgcGF0aD8gQXJlIHdlIGxlYXZpbmcgYW55IHRocm91Z2hwdXQgb24gdGhlIHRhYmxlPyBXZSBuZWVkIHRvIGtlZXAgdGhpcyBvcGVuIHF1ZXN0aW9uIGluIGZyb250IG9mIHVzIGFzIHdlIG1vdmUgZm9yd2FyZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA5MDYsIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yN1QxMTo0NDoyNC40Mzg2ODAyODdaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5NTUxMzQ0NjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFhGUk1fT0ZGTE9BRFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQveGZybS9LY29uZmlnPTU9Y29uZmlnIFhGUk1cXG4tLVxcbm5ldC94ZnJtL0tjb25maWctMTAtXFxubmV0L3hmcm0vS2NvbmZpZzoxMTpjb25maWcgWEZSTV9PRkZMT0FEXFxubmV0L3hmcm0vS2NvbmZpZy0xMi1cXHRib29sXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI3VDExOjQ0OjI2LjM5MzgyMzg2NloiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNTUxMTk3MDcwMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipOYXZpZ2F0aW5nIHRoZSBLZXJuZWwgQ29uZmlndXJhdGlvbiBMYW5kc2NhcGUqKlxuXG5SaWdodCwgbGV0J3Mgc2VlLi4uIEknbSBsb29raW5nIGF0IGBORVRERVZTSU1gLCBgWEZSTV9PRkZMT0FEYCwgYW5kIGBJTkVUX1BTUGAuIE9rYXksIHN0YW5kYXJkIHN1c3BlY3RzIGluIG5ldHdvcmsgY29uZmlndXJhdGlvbi4gTm93IGhvbGQgb24gYSBzZWNvbmQuLi4gYFhGUk1fT0ZGTE9BRGAuLi4gdGhhdCdzIGEgKmJvb2xlYW4qIHdpdGhvdXQgYW4gYWNjb21wYW55aW5nIHByb21wdD8gQWhhLCB0aGF0IG1lYW5zIGl0J3Mgb25lIG9mICp0aG9zZSog4oCTIGF1dG9tYXRpY2FsbHkgc2VsZWN0ZWQgYmFzZWQgb24gdGhlIHN0YXRlcyBvZiBvdGhlciBjb25maWd1cmF0aW9ucy4gTm8gZGlyZWN0IHVzZXIgY29udHJvbCwgYnV0IGRlZmluaXRlbHkgcmVsZXZhbnQgZHVlIHRvIGl0cyBkZXBlbmRlbmNpZXMgYW5kIGVmZmVjdHMuIEkgbmVlZCB0byB0cmFjZSBiYWNrIGFuZCBpZGVudGlmeSB0aGUgdHJpZ2dlcnMgZm9yIHRoYXQuIEl0IGNvdWxkIGJlIGNyaXRpY2FsIHRvIHBlcmZvcm1hbmNlIG9yIHNlY3VyaXR5IGRlcGVuZGluZyBvbiB3aGF0IGVsc2UgaXMgZW5hYmxlZC4gVGhpcyByZXF1aXJlcyBhIGRlZXBlciBkaXZlIGludG8gdGhlIGludGVyZGVwZW5kZW5jaWVzLiBHb3R0YSByZW1lbWJlciB0aGF0IG9uZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTEyMDMsIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yN1QxMTo0NDo0MS45MDU3OTcyMzdaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxODkyODc3OTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2VsZWN0IFhGUk1fT0ZGTE9BRFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2NC9LY29uZmlnPTM2OT1jb25maWcgSU5FVF9FU1BfT0ZGTE9BRFxcbi0tXFxubmV0L2lwdjQvS2NvbmZpZy0zNzEtXFx0ZGVwZW5kcyBvbiBJTkVUX0VTUFxcbm5ldC9pcHY0L0tjb25maWc6MzcyOlxcdHNlbGVjdCBYRlJNX09GRkxPQURcXG5uZXQvaXB2NC9LY29uZmlnLTM3My1cXHRkZWZhdWx0IG5cXG4tLVxcbm5ldC9pcHY2L0tjb25maWc9Nzc9Y29uZmlnIElORVQ2X0VTUF9PRkZMT0FEXFxuLS1cXG5uZXQvaXB2Ni9LY29uZmlnLTc5LVxcdGRlcGVuZHMgb24gSU5FVDZfRVNQXFxubmV0L2lwdjYvS2NvbmZpZzo4MDpcXHRzZWxlY3QgWEZSTV9PRkZMT0FEXFxubmV0L2lwdjYvS2NvbmZpZy04MS1cXHRkZWZhdWx0IG5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjdUMTE6NDQ6NDQuMDk1MDkyMzU1WiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE4NDg2Njk3NTc3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIE5ldGRldnNpbSBPZmZsb2FkIFBhdGNoKipcblxuT2theSwgc28gSSBzZWUgdGhhdCBgSU5FVF9FU1BfT0ZGTE9BRGAgYW5kIGBJTkVUNl9FU1BfT0ZGTE9BRGAgYXJlIHRoZSBrZXlzIHRvIGVuYWJsaW5nIGBYRlJNX09GRkxPQURgIGhlcmUuIE15IGluaXRpYWwgdGhvdWdodCB3YXMgdG8gc2ltcGx5IGxpc3QgdGhlIHJlbGV2YW50IHN5bWJvbHMgbGlrZSBgTkVUREVWU0lNYCwgYElORVRfRVNQX09GRkxPQURgLCBhbmQgYElORVRfUFNQYCwgYnV0IEkgbmVlZCB0byBkaWcgZGVlcGVyLlxuXG5BIGNsb3NlciBsb29rIHJldmVhbHMgdGhhdCB0aGlzIGlzIGxhcmdlbHkgYWJvdXQgY2xlYW5pbmcgdXAgZGVidWdmcyBhbmQgcmVvcmRlcmluZyBjb2RlLiBOb3csIHRoaXMgbWFrZXMgbWUgdGhpbmsuIElzIHRoaXMgd29ydGggZnV6emluZz8gQWJzb2x1dGVseSEgVGhlIGNyaXRpY2FsIGNoYW5nZSBpcyB0aGUgcmVvcmRlcmluZyBvZiBgbnNpbV9kZXN0cm95YCBhbmQgYG5zaW1fZGV2X3BvcnRfZGVidWdmc19leGl0YC4gVGhpcyBzZXF1ZW5jZSBtb2RpZmljYXRpb24gaXMgYWxtb3N0IGNlcnRhaW5seSBhZGRyZXNzaW5nIGEgdXNlLWFmdGVyLWZyZWUgb3IgYSBzaW1pbGFyIG1lbW9yeSBzYWZldHkgdnVsbmVyYWJpbGl0eS4gRnV6emluZyBpcyAqZXNzZW50aWFsKiBoZXJlLiBXZSBuZWVkIHRvIGVuc3VyZSB0aGF0IHRoZSBuZXcgb3JkZXIgKmNvcnJlY3RseSogZml4ZXMgdGhlIGlkZW50aWZpZWQgYnVnIGFuZCBkb2Vzbid0IGluYWR2ZXJ0ZW50bHkgaW50cm9kdWNlICpuZXcqIHByb2JsZW1zLlxuXG5JIG5lZWQgdG8gZm9jdXMgbXkgZnV6emluZyBlZmZvcnRzLiBJJ3ZlIGluaXRpYWxseSBpZGVudGlmaWVkIHNvbWUgZm9jdXMgc3ltYm9sczogYF9fbnNpbV9kZXZfcG9ydF9hZGRgLCBgX19uc2ltX2Rldl9wb3J0X2RlbGAsIGBuc2ltX2NyZWF0ZWAsIGBuc2ltX2Rlc3Ryb3lgLCBgbnNpbV9pcHNlY190ZWFyZG93bmAsIGBuc2ltX3BzcF91bmluaXRgLCBhbmQgYG5zaW1fdWRwX3R1bm5lbHNfaW5mb19kZXN0cm95YC4gTGV0IG1lIHJlZmluZSB0aGF0IGZvY3VzLiBBZnRlciBzb21lIHRob3VnaHQsIEknbSBnb2luZyB0byB0cmltIGl0IGRvd24gdG8gYF9fbnNpbV9kZXZfcG9ydF9hZGRgLCBgX19uc2ltX2Rldl9wb3J0X2RlbGAsIGBuc2ltX2NyZWF0ZWAsIGFuZCBgbnNpbV9kZXN0cm95YC4gVGhlc2UgYXJlIHRoZSBjb3JlIGZ1bmN0aW9ucy5cblxuV2FpdCwgYXJlIHRoZXNlIGV2ZW4gaG90IHBhdGhzPyBObywgdGhleSdyZSB0aGUgc2V0dXAvdGVhcmRvd24gZnVuY3Rpb25zIGZvciBuZXRkZXZzaW0gcG9ydHMuIFRoYXQgbWFrZXMgdGhlbSAqcGVyZmVjdCogZm9yIGZ1enppbmcuIFRoZXkncmUgaWRlYWwgdGFyZ2V0cy5cblxuTGV0IG1lIGp1c3QgZG91YmxlLWNoZWNrIHRoYXQgYG5zaW1fZGVzdHJveWAgZnVuY3Rpb24gYWdhaW4uLi4gdG8gbWFrZSBzdXJlIEknbSBub3QgbWlzc2luZyBhbnl0aGluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE2MjUsIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMDksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjdUMTE6NDU6MDIuNTgxNzkzODMyWiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTEzNDI1NDAzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInZvaWQgbnNpbV9kZXN0cm95XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXYuYz0xMTI1PXN0cnVjdCBuZXRkZXZzaW0gKm5zaW1fY3JlYXRlKHN0cnVjdCBuc2ltX2RldiAqbnNpbV9kZXYsXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2LmMtMTE3MS1cXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2LmM6MTE3Mjp2b2lkIG5zaW1fZGVzdHJveShzdHJ1Y3QgbmV0ZGV2c2ltICpucylcXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2LmMtMTE3My17XFxuLS1cXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2c2ltLmg9MTY0PXN0cnVjdCBuZXRkZXZzaW0gKm5zaW1fY3JlYXRlKHN0cnVjdCBuc2ltX2RldiAqbnNpbV9kZXYsXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2c2ltLmgtMTY2LVxcdFxcdFxcdCAgICAgIHU4IHBlcm1fYWRkcltFVEhfQUxFTl0pO1xcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXZzaW0uaDoxNjc6dm9pZCBuc2ltX2Rlc3Ryb3koc3RydWN0IG5ldGRldnNpbSAqbnMpO1xcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXZzaW0uaC0xNjgtYm9vbCBuZXRkZXZfaXNfbnNpbShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjdUMTE6NDU6MDQuNDk1MjI3MjY1WiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM5NTYxOTQ4Nzc1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcyBvbiB0aGlzOlxuXG4qKkFuYWx5emluZyB0aGUgYG5zaW1faXBzZWNfdGVhcmRvd25gIFNjcmlwdCoqXG5cbkFscmlnaHQsIHRpbWUgdG8gZ2V0IHRvIHdvcmsuIEZpcnN0IHRoaW5nJ3MgZmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQncyBnb2luZyBvbiB3aXRoIHRoaXMgYG5zaW1faXBzZWNfdGVhcmRvd25gIHNjcmlwdC4gR2l2ZW4gbXkgZXhwZXJ0aXNlLCBJIGFscmVhZHkgaGF2ZSBhIHByZXR0eSBnb29kIGlkZWEsIGJ1dCBpdCdzIGltcG9ydGFudCB0byBhcHByb2FjaCB0aGlzIHdpdGggYSBjcml0aWNhbCBleWUuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBncmFzcCB0aGUgc3BlY2lmaWNzIG9mIHRoaXMgaW1wbGVtZW50YXRpb24sIGVzcGVjaWFsbHkgY29uc2lkZXJpbmcgdGhlIGNvbnRleHQgb2YgbmV0d29yayBzZWN1cml0eSBhbmQgSVBTZWMuIEknbSBnb2luZyB0byBsb29rIGZvciBrZXkgZWxlbWVudHM6IHdoYXQgcmVzb3VyY2VzIGlzIGl0IHRhcmdldGluZyAodmlydHVhbCBtYWNoaW5lcywgc3BlY2lmaWMgdHVubmVscywgZXRjLik/IFdoYXQgYWN0aW9ucyBpcyBpdCB0YWtpbmcgKGRlbGV0aW5nIGNvbmZpZ3VyYXRpb25zLCBzdG9wcGluZyBkYWVtb25zLCBjbGVhcmluZyByb3V0ZXMpPyBXaGF0IGFyZSB0aGUgcG90ZW50aWFsIHBvaW50cyBvZiBmYWlsdXJlLCBhbmQgaG93IGRvZXMgaXQgaGFuZGxlIHRoZW0/IEFyZSB0aGVyZSBhbnkgb2J2aW91cyBzZWN1cml0eSB2dWxuZXJhYmlsaXRpZXMgcHJlc2VudCAoZS5nLiwgaGFyZGNvZGVkIGNyZWRlbnRpYWxzLCBpbnN1ZmZpY2llbnQgZXJyb3IgaGFuZGxpbmcgdGhhdCBjb3VsZCBsZWFkIHRvIGEgZGVuaWFsLW9mLXNlcnZpY2UsIHVuaW50ZW5kZWQgYWNjZXNzIHJpZ2h0cyk/IEnigJlsbCBuZWVkIHRvIGFzc2VzcyB0aGUgaWRlbXBvdGVuY3kgb2YgdGhlIHNjcmlwdCDigJMgY2FuIEkgcnVuIGl0IG11bHRpcGxlIHRpbWVzIHNhZmVseT8gRmluYWxseSwgSSdsbCBjb25zaWRlciBob3cgaXQgaW50ZWdyYXRlcyBpbnRvIHRoZSBvdmVyYWxsIG5ldHdvcmsgYXJjaGl0ZWN0dXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjY0NiwiT3V0cHV0VG9rZW5zIjoyNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI3VDExOjQ1OjQ0LjA1NzE3OTg3WiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTM3NzIyMTQxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInZvaWQgbnNpbV9pcHNlY190ZWFyZG93blwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9uZXRkZXZzaW0vaXBzZWMuYz0yNzE9dm9pZCBuc2ltX2lwc2VjX2luaXQoc3RydWN0IG5ldGRldnNpbSAqbnMpXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vaXBzZWMuYy0yODctXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2lwc2VjLmM6Mjg4OnZvaWQgbnNpbV9pcHNlY190ZWFyZG93bihzdHJ1Y3QgbmV0ZGV2c2ltICpucylcXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vaXBzZWMuYy0yODkte1xcbi0tXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldnNpbS5oPTQxNz12b2lkIG5zaW1faXBzZWNfaW5pdChzdHJ1Y3QgbmV0ZGV2c2ltICpucyk7XFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldnNpbS5oOjQxODp2b2lkIG5zaW1faXBzZWNfdGVhcmRvd24oc3RydWN0IG5ldGRldnNpbSAqbnMpO1xcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXZzaW0uaC00MTktYm9vbCBuc2ltX2lwc2VjX3R4KHN0cnVjdCBuZXRkZXZzaW0gKm5zLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTtcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXZzaW0uaD00MjE9c3RhdGljIGlubGluZSB2b2lkIG5zaW1faXBzZWNfaW5pdChzdHJ1Y3QgbmV0ZGV2c2ltICpucylcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXZzaW0uaC00MjQtXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldnNpbS5oOjQyNTpzdGF0aWMgaW5saW5lIHZvaWQgbnNpbV9pcHNlY190ZWFyZG93bihzdHJ1Y3QgbmV0ZGV2c2ltICpucylcXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2c2ltLmgtNDI2LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjdUMTE6NDU6NDUuOTk0OTEwNDQyWiIsIlNlcSI6MzEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI5MDY3OTIzMDMyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIGRlbGl2ZXJlZCBhcyBhIGZpcnN0LXBlcnNvbiBzdW1tYXJ5OlxuXG4qKkRpZ2dpbmcgaW50byBgbnNpbV9wc3BfdW5pbml0YCoqXG5cbkFscmlnaHQsIGxldCdzIGdldCBkb3duIHRvIGl0LiBUaW1lIHRvIHBva2UgYXJvdW5kIGBuc2ltX3BzcF91bmluaXRgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgY3VycmVudCBzdGF0ZS4gTXkgZ3V0IGZlZWxpbmcgaXMgdGhhdCB0aGlzIGRlc2VydmVzIGEgY2xvc2VyIGxvb2suIEkndmUgYmVlbiBtZWFuaW5nIHRvIGNoZWNrIHRoaXMgc3BlY2lmaWMgZnVuY3Rpb24gZm9yIGEgd2hpbGUgbm93LCBhbmQgbm93IGlzIGEgZ29vZCB0aW1lIHRvIGRvIHNvLiBJJ20gdGhpbmtpbmcgYWJvdXQgZWRnZSBjYXNlcyBhbmQgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdGllcy4gSSB3YW50IHRvIHBpbnBvaW50IGFueSBwb3RlbnRpYWwgaW5lZmZpY2llbmNpZXMgb3IgdW5mb3Jlc2VlbiBjb25zZXF1ZW5jZXMgb2YgaXRzIGN1cnJlbnQgaW1wbGVtZW50YXRpb24uIFNwZWNpZmljYWxseSwgSSdtIGdvaW5nIHRvIGxvb2sgZm9yIGFyZWFzIHdoZXJlIGluaXRpYWxpemF0aW9uIGlzIGJlaW5nIHNraXBwZWQsIG9yIGluY29ycmVjdGx5IGhhbmRsZWQuIEknbSBlbnZpc2lvbmluZyBzY2VuYXJpb3Mgd2hlcmUgdW5pbml0aWFsaXplZCBtZW1vcnkgb3IgcmVzb3VyY2VzIGNvdWxkIGxlYWQgdG8gaW5zdGFiaWxpdHkgb3IgaW5jb3JyZWN0IGJlaGF2aW9yLiBHb3R0YSBtYWtlIHN1cmUgaXTigJlzIHJvYnVzdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTMyOTEsIk91dHB1dFRva2VucyI6MjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yN1QxMTo0NjoxNS4wNjI4MzcwMTNaIiwiU2VxIjozMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5NTk3ODIxNjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidm9pZCBuc2ltX3BzcF91bmluaXRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldnNpbS5oPTQ0OT1pbnQgbnNpbV9wc3BfaW5pdChzdHJ1Y3QgbmV0ZGV2c2ltICpucyk7XFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldnNpbS5oOjQ1MDp2b2lkIG5zaW1fcHNwX3VuaW5pdChzdHJ1Y3QgbmV0ZGV2c2ltICpucyk7XFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldnNpbS5oLTQ1MS12b2lkIG5zaW1fcHNwX2hhbmRsZV9leHQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHNrYl9leHQgKnBzcF9leHQpO1xcbi0tXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldnNpbS5oPTQ1Nj1zdGF0aWMgaW5saW5lIGludCBuc2ltX3BzcF9pbml0KHN0cnVjdCBuZXRkZXZzaW0gKm5zKSB7IHJldHVybiAwOyB9XFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldnNpbS5oOjQ1NzpzdGF0aWMgaW5saW5lIHZvaWQgbnNpbV9wc3BfdW5pbml0KHN0cnVjdCBuZXRkZXZzaW0gKm5zKSB7fVxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXZzaW0uaC00NTgtc3RhdGljIGlubGluZSBlbnVtIHNrYl9kcm9wX3JlYXNvblxcbi0tXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL3BzcC5jPTIxMz1zdGF0aWMgdm9pZCBfX25zaW1fcHNwX3VuaW5pdChzdHJ1Y3QgbmV0ZGV2c2ltICpucywgYm9vbCB0ZWFyZG93bilcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9wc3AuYy0yMjctXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL3BzcC5jOjIyODp2b2lkIG5zaW1fcHNwX3VuaW5pdChzdHJ1Y3QgbmV0ZGV2c2ltICpucylcXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vcHNwLmMtMjI5LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjdUMTE6NDY6MTcuMDIyNjMwMjMyWiIsIlNlcSI6MzMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjg0ODcwMTMzODgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzIG9uIHRoaXM6XG5cbioqQW5hbHl6aW5nIGBuc2ltX3VkcF90dW5uZWxzX2luZm9fZGVzdHJveWAqKlxuXG5BbHJpZ2h0LCB0aGUgZmlyc3QgdGhpbmcgSSdtIGRvaW5nIGlzIG1ha2luZyBzdXJlIEknbSB6ZXJvaW5nIGluIG9uIGBuc2ltX3VkcF90dW5uZWxzX2luZm9fZGVzdHJveWAuIFRoaXMgZnVuY3Rpb24gbmFtZSBpbW1lZGlhdGVseSBzY3JlYW1zIFwiY2xlYW51cFwiIG9yIFwiZGVzdHJ1Y3Rpb25cIiByZWxhdGVkIHRvIFVEUCB0dW5uZWwgaW5mb3JtYXRpb24gd2l0aGluIHRoZSBgbnNpbWAgY29udGV4dCwgd2hpY2ggSSdtIGFscmVhZHkgZmFtaWxpYXIgd2l0aC4gTXkgaW5pdGlhbCBhc3N1bXB0aW9uIGlzIHRoYXQgdGhpcyBpcyB0aGUgZnVuY3Rpb24gcmVzcG9uc2libGUgZm9yIGZyZWVpbmcgYWxsb2NhdGVkIG1lbW9yeSBvciByZXNvdXJjZXMgYXNzb2NpYXRlZCB3aXRoIGEgc3RydWN0dXJlIG9yIGRhdGEgc2V0IHRoYXQgcmVwcmVzZW50cyBVRFAgdHVubmVscy4gVGhlIFwiaW5mb1wiIHBhcnQgb2YgdGhlIG5hbWUgbWFrZXMgbWUgbGVhbiB0b3dhcmRzIHRoaXMgYmVpbmcgYSBoaWdoLWxldmVsIGZ1bmN0aW9uIHRoYXQgcHJvYmFibHkgaGFuZGxlcyB0aGUgZnJlZWluZyBvZiBvbmUgb3IgbW9yZSBsb3dlci1sZXZlbCBkYXRhIHN0cnVjdHVyZXMuIEkgd2FudCB0byBtYWtlIHN1cmUgSSBhbSBsb29raW5nIGF0IHRoZSBjb3JyZWN0IGZ1bmN0aW9uIGFuZCBub3Qgc29tZSBzaW1pbGFyIHZhcmlhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM4NTgsIk91dHB1dFRva2VucyI6MjYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yN1QxMTo0NjoyNS41MDk2NDY0N1oiLCJTZXEiOjM0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTkyNDQ1OTU5MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ2b2lkIG5zaW1fdWRwX3R1bm5lbHNfaW5mb19kZXN0cm95XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXZzaW0uaD0xNzM9aW50IG5zaW1fdWRwX3R1bm5lbHNfaW5mb19jcmVhdGUoc3RydWN0IG5zaW1fZGV2ICpuc2ltX2RldixcXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2c2ltLmgtMTc0LVxcdFxcdFxcdFxcdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTtcXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2c2ltLmg6MTc1OnZvaWQgbnNpbV91ZHBfdHVubmVsc19pbmZvX2Rlc3Ryb3koc3RydWN0IG5ldF9kZXZpY2UgKmRldik7XFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldnNpbS5oLTE3Ni1cXG4tLVxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS91ZHBfdHVubmVscy5jPTEyNT1pbnQgbnNpbV91ZHBfdHVubmVsc19pbmZvX2NyZWF0ZShzdHJ1Y3QgbnNpbV9kZXYgKm5zaW1fZGV2LFxcbi0tXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL3VkcF90dW5uZWxzLmMtMTg4LVxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS91ZHBfdHVubmVscy5jOjE4OTp2b2lkIG5zaW1fdWRwX3R1bm5lbHNfaW5mb19kZXN0cm95KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL3VkcF90dW5uZWxzLmMtMTkwLXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjdUMTE6NDY6MjcuNDM0MTQxOTAzWiIsIlNlcSI6MzUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM4NzI5OTQxNzkzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIE1vZGlmaWNhdGlvbioqXG5cbk9rYXksIHNvIHRoaXMgaXMgaW50ZXJlc3RpbmcuIEZyb20gd2hhdCBJJ20gc2VlaW5nLCB0aGVzZSBjaGFuZ2VzIGFyZSBjbGVhcmx5IGZ1bmN0aW9uYWwsIGFuZCBxdWl0ZSBpbXBvcnRhbnQgYWN0dWFsbHkuIFRoZXkncmUgdG91Y2hpbmcgdGhlIHRlYXJkb3duIHNlcXVlbmNlIGZvciBuZXRkZXZzaW0gcG9ydHMsIHdoaWNoIGltbWVkaWF0ZWx5IGZsYWdzIFwicG90ZW50aWFsIGZvciBmaXhpbmcgdXNlLWFmdGVyLWZyZWUgYnVnc1wiIGluIGRlYnVnZnMuIEdpdmVuIHRoZSBpbmhlcmVudCByaXNrcyBvZiB0aG9zZSB0eXBlcyBvZiBtZW1vcnkgZXJyb3JzLCB0aGlzIGlzIGRlZmluaXRlbHkgc29tZXRoaW5nIHdvcnRoIHB1cnN1aW5nLiBJJ20gZ29pbmcgdG8gbWFyayB0aGlzIGFzIGBXb3J0aEZ1enppbmc9dHJ1ZWA7IGl0IGhhcyBhIGhpZ2ggcHJvYmFiaWxpdHkgb2YgZXhwb3Npbmcgc29tZXRoaW5nLlxuXG5Ob3csIGxldCBtZSBzZWUgd2hhdCBjb25maWd1cmF0aW9ucyBhcmUgcmVsZXZhbnQuIFRoZSBwcmltYXJ5IG9uZXMgaGVyZSBhcmUgYE5FVERFVlNJTWAsIG5hdHVyYWxseSwgd2hpY2ggaXMgdGhlIGNvcmUgb2YgdGhpcy4gQmV5b25kIHRoYXQsIEkgbmVlZCB0byBrZWVwIGFuIGV5ZSBvbiBgSU5FVF9FU1BfT0ZGTE9BRGAgYW5kIGBJTkVUX1BTUGAsIGFzIHRob3NlIHNlZW0gdG8gYmUgaW5kaXJlY3RseSBpbnZvbHZlZCBpbiB0aGUgYWZmZWN0ZWQgYXJlYXMuXG5cbkZpbmFsbHksIEkgbmVlZCB0byBtYWtlIGEgbWVudGFsIG5vdGUgb2YgdGhlIGNyaXRpY2FsIHN5bWJvbHMgdG8gZm9jdXMgbXkgYXR0ZW50aW9uIG9uIGR1cmluZyBhbmFseXNpcy4gSSBzZWUgYF9fbnNpbV9kZXZfcG9ydF9hZGRgLCBgX19uc2ltX2Rldl9wb3J0X2RlbGAsIGBuc2ltX2NyZWF0ZWAsIGBuc2ltX2Rlc3Ryb3lgLCBgbnNpbV9pcHNlY190ZWFyZG93bmAsIGBuc2ltX3BzcF91bmluaXRgLCBhbmQgYG5zaW1fdWRwX3R1bm5lbHNfaW5mb19kZXN0cm95YC4gVGhvc2UgYXJlIHRoZSBlbnRyeSBwb2ludHMgYW5kIHRlYXJkb3duIGZ1bmN0aW9ucyB0aGF0IGFyZSBsaWtlbHkgdGhlIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoZSBmdWxsIGltcGFjdCBvZiB0aGVzZSBjaGFuZ2VzLiBJJ2xsIG1ha2Ugc3VyZSB0byBwcmlvcml0aXplIHRob3NlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDM1MSwiT3V0cHV0VG9rZW5zIjoyMTgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMzUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjdUMTE6NDc6MDYuMTY0MDg2OTA2WiIsIlNlcSI6MzYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODgxMDU5MzUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5FVERFVlNJTVwiLFxuICAgIFwiSU5FVF9FU1BfT0ZGTE9BRFwiLFxuICAgIFwiSU5FVF9QU1BcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJfX25zaW1fZGV2X3BvcnRfYWRkXCIsXG4gICAgXCJfX25zaW1fZGV2X3BvcnRfZGVsXCIsXG4gICAgXCJuc2ltX2NyZWF0ZVwiLFxuICAgIFwibnNpbV9kZXN0cm95XCIsXG4gICAgXCJuc2ltX2lwc2VjX3RlYXJkb3duXCIsXG4gICAgXCJuc2ltX3BzcF91bmluaXRcIixcbiAgICBcIm5zaW1fdWRwX3R1bm5lbHNfaW5mb19kZXN0cm95XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHRlYXJkb3duIHNlcXVlbmNlIG9mIG5ldGRldnNpbSBwb3J0cywgbW92aW5nIHRoZSBkZXN0cnVjdGlvbiBvZiB0aGUgbmV0ZGV2c2ltIGluc3RhbmNlIChgbnNpbV9kZXN0cm95YCkgYWZ0ZXIgdGhlIHJlY3Vyc2l2ZSByZW1vdmFsIG9mIGl0cyBkZWJ1Z2ZzIGRpcmVjdG9yeS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgZml4ZXMgcG90ZW50aWFsIHVzZS1hZnRlci1mcmVlIGlzc3VlcyB3aGVuIGRlYnVnZnMgZmlsZXMgYXJlIGFjY2Vzc2VkIGNvbmN1cnJlbnRseSB3aXRoIHBvcnQgZGVsZXRpb24uIEZ1enppbmcgdGhlIHNldHVwIGFuZCB0ZWFyZG93biBwYXRocyBvZiBuZXRkZXZzaW0gcG9ydHMgaXMgaW1wb3J0YW50IHRvIGVuc3VyZSB0aGUgbmV3IHNlcXVlbmNlIGlzIGNvcnJlY3QgYW5kIGRvZXNuJ3QgaW50cm9kdWNlIHJlZ3Jlc3Npb25zLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5FVERFVlNJTVwiLFxuICAgIFwiSU5FVF9FU1BfT0ZGTE9BRFwiLFxuICAgIFwiSU5FVF9QU1BcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJfX25zaW1fZGV2X3BvcnRfYWRkXCIsXG4gICAgXCJfX25zaW1fZGV2X3BvcnRfZGVsXCIsXG4gICAgXCJuc2ltX2NyZWF0ZVwiLFxuICAgIFwibnNpbV9kZXN0cm95XCIsXG4gICAgXCJuc2ltX2lwc2VjX3RlYXJkb3duXCIsXG4gICAgXCJuc2ltX3BzcF91bmluaXRcIixcbiAgICBcIm5zaW1fdWRwX3R1bm5lbHNfaW5mb19kZXN0cm95XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHRlYXJkb3duIHNlcXVlbmNlIG9mIG5ldGRldnNpbSBwb3J0cywgbW92aW5nIHRoZSBkZXN0cnVjdGlvbiBvZiB0aGUgbmV0ZGV2c2ltIGluc3RhbmNlIChgbnNpbV9kZXN0cm95YCkgYWZ0ZXIgdGhlIHJlY3Vyc2l2ZSByZW1vdmFsIG9mIGl0cyBkZWJ1Z2ZzIGRpcmVjdG9yeS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgZml4ZXMgcG90ZW50aWFsIHVzZS1hZnRlci1mcmVlIGlzc3VlcyB3aGVuIGRlYnVnZnMgZmlsZXMgYXJlIGFjY2Vzc2VkIGNvbmN1cnJlbnRseSB3aXRoIHBvcnQgZGVsZXRpb24uIEZ1enppbmcgdGhlIHNldHVwIGFuZCB0ZWFyZG93biBwYXRocyBvZiBuZXRkZXZzaW0gcG9ydHMgaXMgaW1wb3J0YW50IHRvIGVuc3VyZSB0aGUgbmV3IHNlcXVlbmNlIGlzIGNvcnJlY3QgYW5kIGRvZXNuJ3QgaW50cm9kdWNlIHJlZ3Jlc3Npb25zLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowkvj5q[0].run-triage(0) Phase: Succeeded StartedAt: 2026-06-27 11:33:02 +0000 UTC FinishedAt: 2026-06-27 11:47:07 +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": "8cd9520d35a6c38db6567e97dd93b1f11f185dc6", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NETDEVSIM", "INET_ESP_OFFLOAD", "INET_PSP" ], "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": "8cd9520d35a6c38db6567e97dd93b1f11f185dc6", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NETDEVSIM", "INET_ESP_OFFLOAD", "INET_PSP" ], "series_id": "7490d2b1-d4fd-4131-b5c7-d1040ee92603" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "__nsim_dev_port_add", "__nsim_dev_port_del", "nsim_create", "nsim_destroy", "nsim_ipsec_teardown", "nsim_psp_uninit", "nsim_udp_tunnels_info_destroy" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI3IDExOjM4PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+OG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVERFVlNJTSYjMzQ7LAogICAgJiMzNDtJTkVUX0VTUF9PRkZMT0FEJiMzNDssCiAgICAmIzM0O0lORVRfUFNQJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7X19uc2ltX2Rldl9wb3J0X2FkZCYjMzQ7LAogICAgJiMzNDtfX25zaW1fZGV2X3BvcnRfZGVsJiMzNDssCiAgICAmIzM0O25zaW1fY3JlYXRlJiMzNDssCiAgICAmIzM0O25zaW1fZGVzdHJveSYjMzQ7LAogICAgJiMzNDtuc2ltX2lwc2VjX3RlYXJkb3duJiMzNDssCiAgICAmIzM0O25zaW1fcHNwX3VuaW5pdCYjMzQ7LAogICAgJiMzNDtuc2ltX3VkcF90dW5uZWxzX2luZm9fZGVzdHJveSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgdGVhcmRvd24gc2VxdWVuY2Ugb2YgbmV0ZGV2c2ltIHBvcnRzLCBtb3ZpbmcgdGhlIGRlc3RydWN0aW9uIG9mIHRoZSBuZXRkZXZzaW0gaW5zdGFuY2UgKGBuc2ltX2Rlc3Ryb3lgKSBhZnRlciB0aGUgcmVjdXJzaXZlIHJlbW92YWwgb2YgaXRzIGRlYnVnZnMgZGlyZWN0b3J5LiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdGhhdCBmaXhlcyBwb3RlbnRpYWwgdXNlLWFmdGVyLWZyZWUgaXNzdWVzIHdoZW4gZGVidWdmcyBmaWxlcyBhcmUgYWNjZXNzZWQgY29uY3VycmVudGx5IHdpdGggcG9ydCBkZWxldGlvbi4gRnV6emluZyB0aGUgc2V0dXAgYW5kIHRlYXJkb3duIHBhdGhzIG9mIG5ldGRldnNpbSBwb3J0cyBpcyBpbXBvcnRhbnQgdG8gZW5zdXJlIHRoZSBuZXcgc2VxdWVuY2UgaXMgY29ycmVjdCBhbmQgZG9lc24mIzM5O3QgaW50cm9kdWNlIHJlZ3Jlc3Npb25zLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI3IDExOjM4PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgYjg4OWFiYjgzMGNmNWJmYzRiMGQ4Y2JmYzkxOTM5Yzg2ODE5NTg1NlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTYXQgSnVuIDI3IDExOjM4OjExIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L25ldGRldnNpbS9kZXYuYyBiL2RyaXZlcnMvbmV0L25ldGRldnNpbS9kZXYuY1xuaW5kZXggZjAwZmMyZjllYmRlYzcuLjRjMmM5YWExZWE3ZGMxIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2Rldi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9uZXRkZXZzaW0vZGV2LmNcbkBAIC0xNTE2LDE3ICYjNDM7MTUxNiwxNyBAQCBzdGF0aWMgaW50IF9fbnNpbV9kZXZfcG9ydF9hZGQoc3RydWN0IG5zaW1fZGV2ICpuc2ltX2RldiwgZW51bSBuc2ltX2Rldl9wb3J0X3R5cFxuIFx0XHRlcnIgPSBkZXZsX3JhdGVfbGVhZl9jcmVhdGUoXHUwMDI2bnNpbV9kZXZfcG9ydC1cdTAwM2VkZXZsaW5rX3BvcnQsXG4gXHRcdFx0XHRcdCAgICBuc2ltX2Rldl9wb3J0LCBOVUxMKTtcbiBcdFx0aWYgKGVycilcbi1cdFx0XHRnb3RvIGVycl9uc2ltX2Rlc3Ryb3k7XG4mIzQzO1x0XHRcdGdvdG8gZXJyX3BvcnRfZGVidWdmc19leGl0O1xuIFx0fVxuIFxuIFx0bGlzdF9hZGQoXHUwMDI2bnNpbV9kZXZfcG9ydC1cdTAwM2VsaXN0LCBcdTAwMjZuc2ltX2Rldi1cdTAwM2Vwb3J0X2xpc3QpO1xuIFxuIFx0cmV0dXJuIDA7XG4gXG4tZXJyX25zaW1fZGVzdHJveTpcbi1cdG5zaW1fZGVzdHJveShuc2ltX2Rldl9wb3J0LVx1MDAzZW5zKTtcbiBlcnJfcG9ydF9kZWJ1Z2ZzX2V4aXQ6XG4gXHRuc2ltX2Rldl9wb3J0X2RlYnVnZnNfZXhpdChuc2ltX2Rldl9wb3J0KTtcbiYjNDM7XHRpZiAoIUlTX0VSUl9PUl9OVUxMKG5zaW1fZGV2X3BvcnQtXHUwMDNlbnMpKVxuJiM0MztcdFx0bnNpbV9kZXN0cm95KG5zaW1fZGV2X3BvcnQtXHUwMDNlbnMpO1xuIGVycl9wb3J0X3Jlc291cmNlX3VucmVnaXN0ZXI6XG4gXHRpZiAobnNpbV9kZXZfcG9ydF9pc19wZihuc2ltX2Rldl9wb3J0KSlcbiBcdFx0ZGV2bF9wb3J0X3Jlc291cmNlc191bnJlZ2lzdGVyKGRldmxpbmtfcG9ydCk7XG5AQCAtMTU0NCw4ICYjNDM7MTU0NCw4IEBAIHN0YXRpYyB2b2lkIF9fbnNpbV9kZXZfcG9ydF9kZWwoc3RydWN0IG5zaW1fZGV2X3BvcnQgKm5zaW1fZGV2X3BvcnQpXG4gXHRsaXN0X2RlbChcdTAwMjZuc2ltX2Rldl9wb3J0LVx1MDAzZWxpc3QpO1xuIFx0aWYgKG5zaW1fZGV2X3BvcnRfaXNfdmYobnNpbV9kZXZfcG9ydCkpXG4gXHRcdGRldmxfcmF0ZV9sZWFmX2Rlc3Ryb3koXHUwMDI2bnNpbV9kZXZfcG9ydC1cdTAwM2VkZXZsaW5rX3BvcnQpO1xuLVx0bnNpbV9kZXN0cm95KG5zaW1fZGV2X3BvcnQtXHUwMDNlbnMpO1xuIFx0bnNpbV9kZXZfcG9ydF9kZWJ1Z2ZzX2V4aXQobnNpbV9kZXZfcG9ydCk7XG4mIzQzO1x0bnNpbV9kZXN0cm95KG5zaW1fZGV2X3BvcnQtXHUwMDNlbnMpO1xuIFx0aWYgKG5zaW1fZGV2X3BvcnRfaXNfcGYobnNpbV9kZXZfcG9ydCkpXG4gXHRcdGRldmxfcG9ydF9yZXNvdXJjZXNfdW5yZWdpc3RlcihkZXZsaW5rX3BvcnQpO1xuIFx0ZGV2bF9wb3J0X3VucmVnaXN0ZXIoZGV2bGlua19wb3J0KTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9uZXRkZXZzaW0vaXBzZWMuYyBiL2RyaXZlcnMvbmV0L25ldGRldnNpbS9pcHNlYy5jXG5pbmRleCAzNmExYmU0OTIzZDYxZi4uMGJjOWY0MmE1YTM2NWUgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9uZXRkZXZzaW0vaXBzZWMuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2lwc2VjLmNcbkBAIC0yOTIsNSAmIzQzOzI5Miw0IEBAIHZvaWQgbnNpbV9pcHNlY190ZWFyZG93bihzdHJ1Y3QgbmV0ZGV2c2ltICpucylcbiBcdGlmIChpcHNlYy1cdTAwM2Vjb3VudClcbiBcdFx0bmV0ZGV2X2Vycihucy1cdTAwM2VuZXRkZXYsIFwmIzM0O3RlYXJpbmcgZG93biBJUHNlYyBvZmZsb2FkIHdpdGggJWQgU0FzIGxlZnRcXG5cJiMzNDssXG4gXHRcdFx0ICAgaXBzZWMtXHUwMDNlY291bnQpO1xuLVx0ZGVidWdmc19yZW1vdmVfcmVjdXJzaXZlKGlwc2VjLVx1MDAzZXBmaWxlKTtcbiB9XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldi5jIGIvZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldi5jXG5pbmRleCBhNzUwNzY4OTEyYjVhMS4uMjQwMTA3MzY5MzRjOWUgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXYuY1xuQEAgLTExNTQsMTYgJiM0MzsxMTU0LDE3IEBAIHN0cnVjdCBuZXRkZXZzaW0gKm5zaW1fY3JlYXRlKHN0cnVjdCBuc2ltX2RldiAqbnNpbV9kZXYsXG4gXHRpZiAoZXJyKVxuIFx0XHRnb3RvIGVycl9mcmVlX25ldGRldjtcbiBcbi1cdG5zLVx1MDAzZXBwX2RmcyA9IGRlYnVnZnNfY3JlYXRlX2ZpbGUoXCYjMzQ7cHBfaG9sZFwmIzM0OywgMDYwMCwgbnNpbV9kZXZfcG9ydC1cdTAwM2VkZGlyLFxuLVx0XHRcdFx0XHQgbnMsIFx1MDAyNm5zaW1fcHBfaG9sZF9mb3BzKTtcbi1cdG5zLVx1MDAzZXFyX2RmcyA9IGRlYnVnZnNfY3JlYXRlX2ZpbGUoXCYjMzQ7cXVldWVfcmVzZXRcJiMzNDssIDAyMDAsXG4tXHRcdFx0XHRcdCBuc2ltX2Rldl9wb3J0LVx1MDAzZWRkaXIsIG5zLFxuLVx0XHRcdFx0XHQgXHUwMDI2bnNpbV9xcmVzZXRfZm9wcyk7XG4tXHRucy1cdTAwM2V2bGFuX2RmcyA9IGRlYnVnZnNfY3JlYXRlX2ZpbGUoXCYjMzQ7dmxhblwmIzM0OywgMDQwMCwgbnNpbV9kZXZfcG9ydC1cdTAwM2VkZGlyLFxuLVx0XHRcdFx0XHQgICBucywgXHUwMDI2bnNpbV92bGFuX2ZvcHMpO1xuJiM0MztcdGRlYnVnZnNfY3JlYXRlX2ZpbGUoXCYjMzQ7cHBfaG9sZFwmIzM0OywgMDYwMCwgbnNpbV9kZXZfcG9ydC1cdTAwM2VkZGlyLCBucyxcbiYjNDM7XHRcdFx0ICAgIFx1MDAyNm5zaW1fcHBfaG9sZF9mb3BzKTtcbiYjNDM7XHRkZWJ1Z2ZzX2NyZWF0ZV9maWxlKFwmIzM0O3F1ZXVlX3Jlc2V0XCYjMzQ7LCAwMjAwLCBuc2ltX2Rldl9wb3J0LVx1MDAzZWRkaXIsIG5zLFxuJiM0MztcdFx0XHQgICAgXHUwMDI2bnNpbV9xcmVzZXRfZm9wcyk7XG4mIzQzO1x0ZGVidWdmc19jcmVhdGVfZmlsZShcJiMzNDt2bGFuXCYjMzQ7LCAwNDAwLCBuc2ltX2Rldl9wb3J0LVx1MDAzZWRkaXIsIG5zLFxuJiM0MztcdFx0XHQgICAgXHUwMDI2bnNpbV92bGFuX2ZvcHMpO1xuIFx0cmV0dXJuIG5zO1xuIFxuIGVycl9mcmVlX25ldGRldjpcbiYjNDM7XHRkZWJ1Z2ZzX3JlbW92ZV9yZWN1cnNpdmUobnNpbV9kZXZfcG9ydC1cdTAwM2VkZGlyKTtcbiYjNDM7XHRuc2ltX2Rldl9wb3J0LVx1MDAzZWRkaXIgPSBOVUxMO1xuIFx0ZnJlZV9uZXRkZXYoZGV2KTtcbiBcdHJldHVybiBFUlJfUFRSKGVycik7XG4gfVxuQEAgLTExNzQsMTAgJiM0MzsxMTc1LDYgQEAgdm9pZCBuc2ltX2Rlc3Ryb3koc3RydWN0IG5ldGRldnNpbSAqbnMpXG4gXHRzdHJ1Y3QgbmV0ZGV2c2ltICpwZWVyO1xuIFx0dTE2IHZpZDtcbiBcbi1cdGRlYnVnZnNfcmVtb3ZlKG5zLVx1MDAzZXZsYW5fZGZzKTtcbi1cdGRlYnVnZnNfcmVtb3ZlKG5zLVx1MDAzZXFyX2Rmcyk7XG4tXHRkZWJ1Z2ZzX3JlbW92ZShucy1cdTAwM2VwcF9kZnMpO1xuLVxuIFx0aWYgKG5zLVx1MDAzZW5iLm5vdGlmaWVyX2NhbGwpXG4gXHRcdHVucmVnaXN0ZXJfbmV0ZGV2aWNlX25vdGlmaWVyX2Rldl9uZXQobnMtXHUwMDNlbmV0ZGV2LCBcdTAwMjZucy1cdTAwM2VuYixcbiBcdFx0XHRcdFx0XHQgICAgICBcdTAwMjZucy1cdTAwM2Vubik7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldnNpbS5oIGIvZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldnNpbS5oXG5pbmRleCBkOTA5YzQxNjBlYTFmZS4uMjljYmYwMDRhMzcxOTUgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2c2ltLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXZzaW0uaFxuQEAgLTE1Myw5ICYjNDM7MTUzLDYgQEAgc3RydWN0IG5ldGRldnNpbSB7XG4gXHR9IHVkcF9wb3J0cztcbiBcbiBcdHN0cnVjdCBwYWdlICpwYWdlO1xuLVx0c3RydWN0IGRlbnRyeSAqcHBfZGZzO1xuLVx0c3RydWN0IGRlbnRyeSAqcXJfZGZzO1xuLVx0c3RydWN0IGRlbnRyeSAqdmxhbl9kZnM7XG4gXG4gXHRzdHJ1Y3QgbnNpbV9ldGh0b29sIGV0aHRvb2w7XG4gXHRzdHJ1Y3QgbmV0ZGV2c2ltIF9fcmN1ICpwZWVyO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L25ldGRldnNpbS9wc3AuYyBiL2RyaXZlcnMvbmV0L25ldGRldnNpbS9wc3AuY1xuaW5kZXggNjkzNmVjYjgxNzNlMjAuLjJmMjdhMjExNDkxMmM3IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvbmV0ZGV2c2ltL3BzcC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9uZXRkZXZzaW0vcHNwLmNcbkBAIC0yMjcsNyAmIzQzOzIyNyw2IEBAIHN0YXRpYyB2b2lkIF9fbnNpbV9wc3BfdW5pbml0KHN0cnVjdCBuZXRkZXZzaW0gKm5zLCBib29sIHRlYXJkb3duKVxuIFxuIHZvaWQgbnNpbV9wc3BfdW5pbml0KHN0cnVjdCBuZXRkZXZzaW0gKm5zKVxuIHtcbi1cdGRlYnVnZnNfcmVtb3ZlKG5zLVx1MDAzZXBzcC5yZXJlZyk7XG4gXHRtdXRleF9kZXN0cm95KFx1MDAyNm5zLVx1MDAzZXBzcC5yZXJlZ19sb2NrKTtcbiBcdF9fbnNpbV9wc3BfdW5pbml0KG5zLCB0cnVlKTtcbiB9XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbmV0ZGV2c2ltL3VkcF90dW5uZWxzLmMgYi9kcml2ZXJzL25ldC9uZXRkZXZzaW0vdWRwX3R1bm5lbHMuY1xuaW5kZXggODlmZmY3NmU1MWNmNjQuLmE2OWIxNWYxMjhhYTFkIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvbmV0ZGV2c2ltL3VkcF90dW5uZWxzLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L25ldGRldnNpbS91ZHBfdHVubmVscy5jXG5AQCAtMTg4LDkgJiM0MzsxODgsNiBAQCBpbnQgbnNpbV91ZHBfdHVubmVsc19pbmZvX2NyZWF0ZShzdHJ1Y3QgbnNpbV9kZXYgKm5zaW1fZGV2LFxuIFxuIHZvaWQgbnNpbV91ZHBfdHVubmVsc19pbmZvX2Rlc3Ryb3koc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbiB7XG4tXHRzdHJ1Y3QgbmV0ZGV2c2ltICpucyA9IG5ldGRldl9wcml2KGRldik7XG4tXG4tXHRkZWJ1Z2ZzX3JlbW92ZV9yZWN1cnNpdmUobnMtXHUwMDNldWRwX3BvcnRzLmRkaXIpO1xuIFx0a2ZyZWUoZGV2LVx1MDAzZXVkcF90dW5uZWxfbmljX2luZm8pO1xuIFx0ZGV2LVx1MDAzZXVkcF90dW5uZWxfbmljX2luZm8gPSBOVUxMO1xuIH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNyAxMTozODwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT44bTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtORVRERVZTSU0mIzM0OywKICAgICYjMzQ7SU5FVF9FU1BfT0ZGTE9BRCYjMzQ7LAogICAgJiMzNDtJTkVUX1BTUCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O19fbnNpbV9kZXZfcG9ydF9hZGQmIzM0OywKICAgICYjMzQ7X19uc2ltX2Rldl9wb3J0X2RlbCYjMzQ7LAogICAgJiMzNDtuc2ltX2NyZWF0ZSYjMzQ7LAogICAgJiMzNDtuc2ltX2Rlc3Ryb3kmIzM0OywKICAgICYjMzQ7bnNpbV9pcHNlY190ZWFyZG93biYjMzQ7LAogICAgJiMzNDtuc2ltX3BzcF91bmluaXQmIzM0OywKICAgICYjMzQ7bnNpbV91ZHBfdHVubmVsc19pbmZvX2Rlc3Ryb3kmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHRlYXJkb3duIHNlcXVlbmNlIG9mIG5ldGRldnNpbSBwb3J0cywgbW92aW5nIHRoZSBkZXN0cnVjdGlvbiBvZiB0aGUgbmV0ZGV2c2ltIGluc3RhbmNlIChgbnNpbV9kZXN0cm95YCkgYWZ0ZXIgdGhlIHJlY3Vyc2l2ZSByZW1vdmFsIG9mIGl0cyBkZWJ1Z2ZzIGRpcmVjdG9yeS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgZml4ZXMgcG90ZW50aWFsIHVzZS1hZnRlci1mcmVlIGlzc3VlcyB3aGVuIGRlYnVnZnMgZmlsZXMgYXJlIGFjY2Vzc2VkIGNvbmN1cnJlbnRseSB3aXRoIHBvcnQgZGVsZXRpb24uIEZ1enppbmcgdGhlIHNldHVwIGFuZCB0ZWFyZG93biBwYXRocyBvZiBuZXRkZXZzaW0gcG9ydHMgaXMgaW1wb3J0YW50IHRvIGVuc3VyZSB0aGUgbmV3IHNlcXVlbmNlIGlzIGNvcnJlY3QgYW5kIGRvZXNuJiMzOTt0IGludHJvZHVjZSByZWdyZXNzaW9ucy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLApldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXQKICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LAogICBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgYjg4OWFiYjgzMGNmNWJmYzRiMGQ4Y2JmYzkxOTM5Yzg2ODE5NTg1NgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTYXQgSnVuIDI3IDExOjM4OjExIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2Rldi5jIGIvZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2Rldi5jCmluZGV4IGYwMGZjMmY5ZWJkZWM3Li40YzJjOWFhMWVhN2RjMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2Rldi5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L25ldGRldnNpbS9kZXYuYwpAQCAtMTUxNiwxNyAmIzQzOzE1MTYsMTcgQEAgc3RhdGljIGludCBfX25zaW1fZGV2X3BvcnRfYWRkKHN0cnVjdCBuc2ltX2RldiAqbnNpbV9kZXYsIGVudW0gbnNpbV9kZXZfcG9ydF90eXAKIAkJZXJyID0gZGV2bF9yYXRlX2xlYWZfY3JlYXRlKCZhbXA7bnNpbV9kZXZfcG9ydC0mZ3Q7ZGV2bGlua19wb3J0LAogCQkJCQkgICAgbnNpbV9kZXZfcG9ydCwgTlVMTCk7CiAJCWlmIChlcnIpCi0JCQlnb3RvIGVycl9uc2ltX2Rlc3Ryb3k7CiYjNDM7CQkJZ290byBlcnJfcG9ydF9kZWJ1Z2ZzX2V4aXQ7CiAJfQogCiAJbGlzdF9hZGQoJmFtcDtuc2ltX2Rldl9wb3J0LSZndDtsaXN0LCAmYW1wO25zaW1fZGV2LSZndDtwb3J0X2xpc3QpOwogCiAJcmV0dXJuIDA7CiAKLWVycl9uc2ltX2Rlc3Ryb3k6Ci0JbnNpbV9kZXN0cm95KG5zaW1fZGV2X3BvcnQtJmd0O25zKTsKIGVycl9wb3J0X2RlYnVnZnNfZXhpdDoKIAluc2ltX2Rldl9wb3J0X2RlYnVnZnNfZXhpdChuc2ltX2Rldl9wb3J0KTsKJiM0MzsJaWYgKCFJU19FUlJfT1JfTlVMTChuc2ltX2Rldl9wb3J0LSZndDtucykpCiYjNDM7CQluc2ltX2Rlc3Ryb3kobnNpbV9kZXZfcG9ydC0mZ3Q7bnMpOwogZXJyX3BvcnRfcmVzb3VyY2VfdW5yZWdpc3RlcjoKIAlpZiAobnNpbV9kZXZfcG9ydF9pc19wZihuc2ltX2Rldl9wb3J0KSkKIAkJZGV2bF9wb3J0X3Jlc291cmNlc191bnJlZ2lzdGVyKGRldmxpbmtfcG9ydCk7CkBAIC0xNTQ0LDggJiM0MzsxNTQ0LDggQEAgc3RhdGljIHZvaWQgX19uc2ltX2Rldl9wb3J0X2RlbChzdHJ1Y3QgbnNpbV9kZXZfcG9ydCAqbnNpbV9kZXZfcG9ydCkKIAlsaXN0X2RlbCgmYW1wO25zaW1fZGV2X3BvcnQtJmd0O2xpc3QpOwogCWlmIChuc2ltX2Rldl9wb3J0X2lzX3ZmKG5zaW1fZGV2X3BvcnQpKQogCQlkZXZsX3JhdGVfbGVhZl9kZXN0cm95KCZhbXA7bnNpbV9kZXZfcG9ydC0mZ3Q7ZGV2bGlua19wb3J0KTsKLQluc2ltX2Rlc3Ryb3kobnNpbV9kZXZfcG9ydC0mZ3Q7bnMpOwogCW5zaW1fZGV2X3BvcnRfZGVidWdmc19leGl0KG5zaW1fZGV2X3BvcnQpOwomIzQzOwluc2ltX2Rlc3Ryb3kobnNpbV9kZXZfcG9ydC0mZ3Q7bnMpOwogCWlmIChuc2ltX2Rldl9wb3J0X2lzX3BmKG5zaW1fZGV2X3BvcnQpKQogCQlkZXZsX3BvcnRfcmVzb3VyY2VzX3VucmVnaXN0ZXIoZGV2bGlua19wb3J0KTsKIAlkZXZsX3BvcnRfdW5yZWdpc3RlcihkZXZsaW5rX3BvcnQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2lwc2VjLmMgYi9kcml2ZXJzL25ldC9uZXRkZXZzaW0vaXBzZWMuYwppbmRleCAzNmExYmU0OTIzZDYxZi4uMGJjOWY0MmE1YTM2NWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L25ldGRldnNpbS9pcHNlYy5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L25ldGRldnNpbS9pcHNlYy5jCkBAIC0yOTIsNSAmIzQzOzI5Miw0IEBAIHZvaWQgbnNpbV9pcHNlY190ZWFyZG93bihzdHJ1Y3QgbmV0ZGV2c2ltICpucykKIAlpZiAoaXBzZWMtJmd0O2NvdW50KQogCQluZXRkZXZfZXJyKG5zLSZndDtuZXRkZXYsICYjMzQ7dGVhcmluZyBkb3duIElQc2VjIG9mZmxvYWQgd2l0aCAlZCBTQXMgbGVmdFxuJiMzNDssCiAJCQkgICBpcHNlYy0mZ3Q7Y291bnQpOwotCWRlYnVnZnNfcmVtb3ZlX3JlY3Vyc2l2ZShpcHNlYy0mZ3Q7cGZpbGUpOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldi5jIGIvZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldi5jCmluZGV4IGE3NTA3Njg5MTJiNWExLi4yNDAxMDczNjkzNGM5ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldi5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXYuYwpAQCAtMTE1NCwxNiAmIzQzOzExNTQsMTcgQEAgc3RydWN0IG5ldGRldnNpbSAqbnNpbV9jcmVhdGUoc3RydWN0IG5zaW1fZGV2ICpuc2ltX2RldiwKIAlpZiAoZXJyKQogCQlnb3RvIGVycl9mcmVlX25ldGRldjsKIAotCW5zLSZndDtwcF9kZnMgPSBkZWJ1Z2ZzX2NyZWF0ZV9maWxlKCYjMzQ7cHBfaG9sZCYjMzQ7LCAwNjAwLCBuc2ltX2Rldl9wb3J0LSZndDtkZGlyLAotCQkJCQkgbnMsICZhbXA7bnNpbV9wcF9ob2xkX2ZvcHMpOwotCW5zLSZndDtxcl9kZnMgPSBkZWJ1Z2ZzX2NyZWF0ZV9maWxlKCYjMzQ7cXVldWVfcmVzZXQmIzM0OywgMDIwMCwKLQkJCQkJIG5zaW1fZGV2X3BvcnQtJmd0O2RkaXIsIG5zLAotCQkJCQkgJmFtcDtuc2ltX3FyZXNldF9mb3BzKTsKLQlucy0mZ3Q7dmxhbl9kZnMgPSBkZWJ1Z2ZzX2NyZWF0ZV9maWxlKCYjMzQ7dmxhbiYjMzQ7LCAwNDAwLCBuc2ltX2Rldl9wb3J0LSZndDtkZGlyLAotCQkJCQkgICBucywgJmFtcDtuc2ltX3ZsYW5fZm9wcyk7CiYjNDM7CWRlYnVnZnNfY3JlYXRlX2ZpbGUoJiMzNDtwcF9ob2xkJiMzNDssIDA2MDAsIG5zaW1fZGV2X3BvcnQtJmd0O2RkaXIsIG5zLAomIzQzOwkJCSAgICAmYW1wO25zaW1fcHBfaG9sZF9mb3BzKTsKJiM0MzsJZGVidWdmc19jcmVhdGVfZmlsZSgmIzM0O3F1ZXVlX3Jlc2V0JiMzNDssIDAyMDAsIG5zaW1fZGV2X3BvcnQtJmd0O2RkaXIsIG5zLAomIzQzOwkJCSAgICAmYW1wO25zaW1fcXJlc2V0X2ZvcHMpOwomIzQzOwlkZWJ1Z2ZzX2NyZWF0ZV9maWxlKCYjMzQ7dmxhbiYjMzQ7LCAwNDAwLCBuc2ltX2Rldl9wb3J0LSZndDtkZGlyLCBucywKJiM0MzsJCQkgICAgJmFtcDtuc2ltX3ZsYW5fZm9wcyk7CiAJcmV0dXJuIG5zOwogCiBlcnJfZnJlZV9uZXRkZXY6CiYjNDM7CWRlYnVnZnNfcmVtb3ZlX3JlY3Vyc2l2ZShuc2ltX2Rldl9wb3J0LSZndDtkZGlyKTsKJiM0MzsJbnNpbV9kZXZfcG9ydC0mZ3Q7ZGRpciA9IE5VTEw7CiAJZnJlZV9uZXRkZXYoZGV2KTsKIAlyZXR1cm4gRVJSX1BUUihlcnIpOwogfQpAQCAtMTE3NCwxMCAmIzQzOzExNzUsNiBAQCB2b2lkIG5zaW1fZGVzdHJveShzdHJ1Y3QgbmV0ZGV2c2ltICpucykKIAlzdHJ1Y3QgbmV0ZGV2c2ltICpwZWVyOwogCXUxNiB2aWQ7CiAKLQlkZWJ1Z2ZzX3JlbW92ZShucy0mZ3Q7dmxhbl9kZnMpOwotCWRlYnVnZnNfcmVtb3ZlKG5zLSZndDtxcl9kZnMpOwotCWRlYnVnZnNfcmVtb3ZlKG5zLSZndDtwcF9kZnMpOwotCiAJaWYgKG5zLSZndDtuYi5ub3RpZmllcl9jYWxsKQogCQl1bnJlZ2lzdGVyX25ldGRldmljZV9ub3RpZmllcl9kZXZfbmV0KG5zLSZndDtuZXRkZXYsICZhbXA7bnMtJmd0O25iLAogCQkJCQkJICAgICAgJmFtcDtucy0mZ3Q7bm4pOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldnNpbS5oIGIvZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldnNpbS5oCmluZGV4IGQ5MDljNDE2MGVhMWZlLi4yOWNiZjAwNGEzNzE5NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldnNpbS5oCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXZzaW0uaApAQCAtMTUzLDkgJiM0MzsxNTMsNiBAQCBzdHJ1Y3QgbmV0ZGV2c2ltIHsKIAl9IHVkcF9wb3J0czsKIAogCXN0cnVjdCBwYWdlICpwYWdlOwotCXN0cnVjdCBkZW50cnkgKnBwX2RmczsKLQlzdHJ1Y3QgZGVudHJ5ICpxcl9kZnM7Ci0Jc3RydWN0IGRlbnRyeSAqdmxhbl9kZnM7CiAKIAlzdHJ1Y3QgbnNpbV9ldGh0b29sIGV0aHRvb2w7CiAJc3RydWN0IG5ldGRldnNpbSBfX3JjdSAqcGVlcjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L25ldGRldnNpbS9wc3AuYyBiL2RyaXZlcnMvbmV0L25ldGRldnNpbS9wc3AuYwppbmRleCA2OTM2ZWNiODE3M2UyMC4uMmYyN2EyMTE0OTEyYzcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L25ldGRldnNpbS9wc3AuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9uZXRkZXZzaW0vcHNwLmMKQEAgLTIyNyw3ICYjNDM7MjI3LDYgQEAgc3RhdGljIHZvaWQgX19uc2ltX3BzcF91bmluaXQoc3RydWN0IG5ldGRldnNpbSAqbnMsIGJvb2wgdGVhcmRvd24pCiAKIHZvaWQgbnNpbV9wc3BfdW5pbml0KHN0cnVjdCBuZXRkZXZzaW0gKm5zKQogewotCWRlYnVnZnNfcmVtb3ZlKG5zLSZndDtwc3AucmVyZWcpOwogCW11dGV4X2Rlc3Ryb3koJmFtcDtucy0mZ3Q7cHNwLnJlcmVnX2xvY2spOwogCV9fbnNpbV9wc3BfdW5pbml0KG5zLCB0cnVlKTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L25ldGRldnNpbS91ZHBfdHVubmVscy5jIGIvZHJpdmVycy9uZXQvbmV0ZGV2c2ltL3VkcF90dW5uZWxzLmMKaW5kZXggODlmZmY3NmU1MWNmNjQuLmE2OWIxNWYxMjhhYTFkIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9uZXRkZXZzaW0vdWRwX3R1bm5lbHMuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9uZXRkZXZzaW0vdWRwX3R1bm5lbHMuYwpAQCAtMTg4LDkgJiM0MzsxODgsNiBAQCBpbnQgbnNpbV91ZHBfdHVubmVsc19pbmZvX2NyZWF0ZShzdHJ1Y3QgbnNpbV9kZXYgKm5zaW1fZGV2LAogCiB2b2lkIG5zaW1fdWRwX3R1bm5lbHNfaW5mb19kZXN0cm95KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7Ci0Jc3RydWN0IG5ldGRldnNpbSAqbnMgPSBuZXRkZXZfcHJpdihkZXYpOwotCi0JZGVidWdmc19yZW1vdmVfcmVjdXJzaXZlKG5zLSZndDt1ZHBfcG9ydHMuZGRpcik7CiAJa2ZyZWUoZGV2LSZndDt1ZHBfdHVubmVsX25pY19pbmZvKTsKIAlkZXYtJmd0O3VkcF90dW5uZWxfbmljX2luZm8gPSBOVUxMOwogfQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNyAxMTozODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNzY0CgkJCQkJCQlvdXRwdXQ6IDI1CgkJCQkJCQl0aG91Z2h0czogODc1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIERlYnVnZnMgQ2xlYW51cCBQYXRjaCBpbiBuZXRkZXZzaW0qKgoKT2theSwgc28gSSYjMzk7dmUgZ290IHRoaXMgcGF0Y2ggYWZmZWN0aW5nIGBkcml2ZXJzL25ldC9uZXRkZXZzaW0vYCwgdG91Y2hpbmcgYGRldi5jYCwgYGlwc2VjLmNgLCBgbmV0ZGV2LmNgLCBgbmV0ZGV2c2ltLmhgLCBgcHNwLmNgLCBhbmQgYHVkcF90dW5uZWxzLmNgLiBUaGUgY2hhbmdlcyBhcmUgY2xlYXJseSBjZW50ZXJlZCBhcm91bmQgY2xlYW5pbmcgdXAgdGhlIGRlYnVnZnMgZW50cmllcy4gTGV0JiMzOTtzIGRpZyBpbi4KCkluIGBkZXYuY2AsIHRoZXJlJiMzOTtzIGEgbW9kaWZpY2F0aW9uIHRvIGhvdyBgbnNpbV9kZXN0cm95YCBpcyBjYWxsZWQgd2l0aGluIHRoZSBlcnJvciBoYW5kbGluZyBwYXRocy4gIEl0IGxvb2tzIGxpa2UgdGhlcmUmIzM5O3MgYSBwb3RlbnRpYWwgaXNzdWUgd2hlcmUgYG5zaW1fZGVzdHJveWAgd2FzIGJlaW5nIGNhbGxlZCAqYmVmb3JlKiBgbnNpbV9kZXZfcG9ydF9kZWJ1Z2ZzX2V4aXRgLCBhbmQgbm93IGl0JiMzOTtzIGJlaW5nIGNhbGxlZCAqYWZ0ZXIqLiAgQSBzaW1pbGFyIGNoYW5nZSBhcHBlYXJzIGluIGBfX25zaW1fZGV2X3BvcnRfZGVsYC4gVGhlIGNyaXRpY2FsIGNoYW5nZSBhcHBlYXJzIHRvIGJlIHRoYXQgdGhlIGRlYnVnZnMgZXhpdCBpcyBub3cgKmJlZm9yZSogdGhlIGBuc2ltX2Rlc3Ryb3lgIGNhbGwgaW4gYm90aCBsb2NhdGlvbnMuIFRoaXMgc3VnZ2VzdHMgYSBjYXJlZnVsIHJlLW9yZGVyaW5nLgoKVGhlbiwgdGhlcmUmIzM5O3MgYSByZW1vdmFsIG9mIGBkZWJ1Z2ZzX3JlbW92ZV9yZWN1cnNpdmVgIGNhbGxzIGluIGBpcHNlYy5jYCBhbmQgaW4gYHVkcF90dW5uZWxzLmNgLCBpbXBseWluZyB0aGUgcmVtb3ZhbCBvZiBkZWJ1Z2ZzIGVudHJpZXMgaXMgaGFuZGxlZCBkaWZmZXJlbnRseSBub3cuIExpa2V3aXNlLCBpbiBgbmV0ZGV2LmNgIHRoZSBgZGVidWdmc19jcmVhdGVfZmlsZWAgY2FsbHMgZm9yIGBwcF9ob2xkYCwgYHF1ZXVlX3Jlc2V0YCwgYW5kIGB2bGFuYCBhcmUgc2ltcGxpZmllZC4gIEZpbmFsbHksIGBuc2ltX2Rlc3Ryb3lgIGdldHMgc29tZSBkZWJ1Z2dpbmcgcmVtb3ZlIGNhbGxzIHRvbzogYHZsYW5fZGZzYCwgYHFyX2Rmc2AsIGFuZCBgcHBfZGZzYC4gVGhpcyBzZWVtcyBsaWtlIGEgY29uc2lzdGVudCBwYXR0ZXJuLgoKQWhhISAgSSBzZWUgdGhlIHBhdHRlcm4gbm93LiBCeSBtb3ZpbmcgdGhlIGBuc2ltX2Rlc3Ryb3lgIGNhbGwgKmFmdGVyKiBgbnNpbV9kZXZfcG9ydF9kZWJ1Z2ZzX2V4aXRgLCB0aGUgcmVtb3ZhbCBvZiBgbnNpbV9kZXZfcG9ydC0mZ3Q7ZGRpcmAgYXV0b21hdGljYWxseSByZW1vdmVzIGFsbCBkZWJ1Z2ZzIGZpbGVzIGNyZWF0ZWQgdW5kZXIgdGhhdCBkaXJlY3RvcnkuIFRoZSBwcmV2aW91cyBjb2RlIHdhcyBleHBsaWNpdGx5IHJlbW92aW5nIGluZGl2aWR1YWwgZmlsZXMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSwgYmVjYXVzZSBpdCBjaGFuZ2VzIHRoZSBvcmRlciBvZiBvcGVyYXRpb25zLiBXaGF0IHdhcyB0aGUgKmludGVudCogb2YgdGhpcyBjaGFuZ2U/CgpOb3cgdGhlIHF1ZXN0aW9uIGlzLCAqd2h5KiB0aGlzIGNoYW5nZT8gSXMgdGhpcyBqdXN0IHRpZHlpbmcgdXAgdGhlIGNvZGUsIG9yIGFyZSB3ZSBhZGRyZXNzaW5nIGEgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9uIG9yIGJ1Zz8gV2FzIHRoZXJlIGEgY2hhbmNlIHRoZXNlIGRlYnVnZnMgZmlsZXMgd2VyZSBiZWluZyBhY2Nlc3NlZCAqYWZ0ZXIqIHRoZXkgd2VyZSByZW1vdmVkIHVuZGVyIHRoZSBvbGQgaW1wbGVtZW50YXRpb24/IEkgc2hvdWxkIHJldmlldyB0aGUgYG5zaW1fZGV2X3BvcnRfZGVidWdmc19leGl0YCBmdW5jdGlvbiB0byBiZSBzdXJlLiBJdCBjb3VsZCBiZSB3b3J0aCBmdXp6aW5nIHRoaXMsIHRvIHNlZSBpZiBhbnl0aGluZyBnZXRzIGNhdWdodC4gTXkgZ3V0IHNheXMgdGhpcyBpcyBhIHN1YnRsZSBidWcgZml4LCBvciBhdCBsZWFzdCBhIGNsZWFuZXIgaW1wbGVtZW50YXRpb24uIFRpbWUgdG8gY2hlY2sgYG5zaW1fZGV2X3BvcnRfZGVidWdmc19leGl0YC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNyAxMTozODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuc2ltX2Rldl9wb3J0X2RlYnVnZnNfZXhpdCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9uZXRkZXZzaW0vZGV2LmM9NDA3PXN0YXRpYyBpbnQgbnNpbV9kZXZfcG9ydF9kZWJ1Z2ZzX2luaXQoc3RydWN0IG5zaW1fZGV2ICpuc2ltX2Rldixcbi0tXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vZGV2LmMtNDQxLVxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2Rldi5jOjQ0MjpzdGF0aWMgdm9pZCBuc2ltX2Rldl9wb3J0X2RlYnVnZnNfZXhpdChzdHJ1Y3QgbnNpbV9kZXZfcG9ydCAqbnNpbV9kZXZfcG9ydClcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9kZXYuYy00NDMte1xuLS1cbmRyaXZlcnMvbmV0L25ldGRldnNpbS9kZXYuYz0xNDU1PXN0YXRpYyBpbnQgX19uc2ltX2Rldl9wb3J0X2FkZChzdHJ1Y3QgbnNpbV9kZXYgKm5zaW1fZGV2LCBlbnVtIG5zaW1fZGV2X3BvcnRfdHlwZSB0eXBlLFxuLS1cbmRyaXZlcnMvbmV0L25ldGRldnNpbS9kZXYuYy0xNTI2LWVycl9wb3J0X2RlYnVnZnNfZXhpdDpcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9kZXYuYzoxNTI3Olx0bnNpbV9kZXZfcG9ydF9kZWJ1Z2ZzX2V4aXQobnNpbV9kZXZfcG9ydCk7XG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vZGV2LmMtMTUyOC1cdGlmICghSVNfRVJSX09SX05VTEwobnNpbV9kZXZfcG9ydC1cdTAwM2VucykpXG4tLVxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2Rldi5jPTE1NDA9c3RhdGljIHZvaWQgX19uc2ltX2Rldl9wb3J0X2RlbChzdHJ1Y3QgbnNpbV9kZXZfcG9ydCAqbnNpbV9kZXZfcG9ydClcbi0tXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vZGV2LmMtMTU0Ni1cdFx0ZGV2bF9yYXRlX2xlYWZfZGVzdHJveShcdTAwMjZuc2ltX2Rldl9wb3J0LVx1MDAzZWRldmxpbmtfcG9ydCk7XG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vZGV2LmM6MTU0NzpcdG5zaW1fZGV2X3BvcnRfZGVidWdmc19leGl0KG5zaW1fZGV2X3BvcnQpO1xuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2Rldi5jLTE1NDgtXHRuc2ltX2Rlc3Ryb3kobnNpbV9kZXZfcG9ydC1cdTAwM2Vucyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjcgMTE6Mzk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTY4MgoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBhc3N1bWluZyBJJiMzOTttIGFuIGV4cGVydCBpbiBkZWJ1Z2dpbmcgYW5kIGtlcm5lbC1sZXZlbCBkZXZpY2UgZHJpdmVyIGludGVyYWN0aW9ucy4KCioqbnNpbV9kZXZfcG9ydF9kZWJ1Z2ZzX2V4aXQ6IEEgRGVlcCBEaXZlKioKCkFscmlnaHQsIGBuc2ltX2Rldl9wb3J0X2RlYnVnZnNfZXhpdGAuIFRoYXQgZnVuY3Rpb24gbmFtZSBpbW1lZGlhdGVseSBzY3JlYW1zIGEgZmV3IHRoaW5ncyB0byBtZS4gRmlyc3QsICYjMzQ7bnNpbSYjMzQ7IHN1Z2dlc3RzIHRoaXMgaXMgcmVsYXRlZCB0byBhIG5ldHdvcmsgc2ltdWxhdG9yLCBsaWtlbHkgdXNlZCBmb3IgdGVzdGluZyBhbmQgZGV2ZWxvcG1lbnQuICYjMzQ7ZGV2X3BvcnQmIzM0OyBoaW50cyBhdCBhIGRldmljZSBwb3J0IGFic3RyYWN0aW9uLCBhIGxpa2VseSBwb2ludCBvZiBpbnRlcmFjdGlvbiBvciBjb25maWd1cmF0aW9uLiBBbmQgJiMzNDtkZWJ1Z2ZzJiMzNDsgaXMgdGhlIGtpY2tlciDigJMgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBzb21ldGhpbmcgcmVsYXRlZCB0byBkZWJ1Z2ZzLCB0aGUga2VybmVsJiMzOTtzIGRlYnVnZ2luZyBmaWxlc3lzdGVtLgoKTXkgaW5pdGlhbCB0aG91Z2h0IGlzLCB0aGlzIGZ1bmN0aW9uIGlzIHJlc3BvbnNpYmxlIGZvciB0aGUgY2xlYW51cCBvciB0ZWFyZG93biBwcm9jZWR1cmUgYXNzb2NpYXRlZCB3aXRoIHRoZSBzaW11bGF0ZWQgZGV2aWNlIHBvcnQgYW5kIGl0cyBkZWJ1ZyBpbnRlcmZhY2Ugd2l0aGluIHRoZSBuZXR3b3JrIHNpbXVsYXRpb24gZW52aXJvbm1lbnQuIEnigJltIHBpY3R1cmluZyBhIHNpdHVhdGlvbiB3aGVyZSB0aGUgc2ltdWxhdG9yIGhhcyBiZWVuIGNvbmZpZ3VyZWQsIGEgdmlydHVhbCBuZXR3b3JrIGludGVyZmFjZSBtaWdodCBiZSB1cCwgYW5kIG5vdywgd2UmIzM5O3JlIGV4aXRpbmcsIHdoZXRoZXIgZ3JhY2VmdWxseSBvciBhYnJ1cHRseS4gVGhpcyBmdW5jdGlvbiBpcyBsaWtlbHkgcmVzcG9uc2libGUgZm9yIHJlbGVhc2luZyByZXNvdXJjZXMsIHVucmVnaXN0ZXJpbmcgdGhlIGRlYnVnZnMgZW50cmllcywgYW5kIGdlbmVyYWxseSBlbnN1cmluZyBhIGNsZWFuIHN0YXRlLgoKTXkgbWluZCBpbW1lZGlhdGVseSBzdGFydHMgdGlja2luZyB0aHJvdWdoIHBvdGVudGlhbCBhcmVhcyBvZiBjb25jZXJuOgoKKiAgICoqUmVzb3VyY2UgbGVha3M6KiogSXMgaXQgbWFraW5nIHN1cmUgYWxsIGFsbG9jYXRlZCBtZW1vcnkgaXMgZnJlZWQ/IEFyZSBmaWxlIGRlc2NyaXB0b3JzIHByb3Blcmx5IGNsb3NlZD8KKiAgICoqRGVidWdmcyBlbnRyaWVzOioqIElzIGl0IGNhcmVmdWxseSByZW1vdmluZyB0aGUgZGVidWdmcyBlbnRyaWVzIHRoYXQgd2VyZSBjcmVhdGVkIGZvciB0aGUgZGV2aWNlIHBvcnQ/IExlYXZpbmcgc3RhbGUgZW50cmllcyB3b3VsZCBiZSBhIGh1Z2Ugbm8tbm8uIEkgbmVlZCB0byBsb29rIGZvciB1bnJlZ2lzdHJhdGlvbiBmdW5jdGlvbnMuCiogICAqKlJhY2UgY29uZGl0aW9uczoqKiBJZiB0aGlzIGNhbiBiZSBjYWxsZWQgY29uY3VycmVudGx5IHdpdGggb3RoZXIgcGFydHMgb2YgdGhlIHNpbXVsYXRvciwgYXJlIHRoZXJlIHByb3BlciBsb2NrcyBpbiBwbGFjZSB0byBwcm90ZWN0IHNoYXJlZCBkYXRhIGFuZCBwcmV2ZW50IGNvcnJ1cHRpb24gZHVyaW5nIGNsZWFudXA/CiogICAqKkVycm9yIGhhbmRsaW5nOioqIFdoYXQgaGFwcGVucyBpZiBzb21ldGhpbmcgZ29lcyB3cm9uZyBkdXJpbmcgY2xlYW51cD8gRG9lcyBpdCBoYW5kbGUgZXJyb3JzIGdyYWNlZnVsbHksIGxvZyByZWxldmFudCBpbmZvcm1hdGlvbiwgYW5kIGF2b2lkIGxlYXZpbmcgdGhlIHN5c3RlbSBpbiBhbiB1bnVzYWJsZSBzdGF0ZT8gSXMgaXQgY2hlY2tpbmcgdGhlIHJldHVybiBjb2RlcyBmb3IgdGhlIGZ1bmN0aW9ucyBpdCBjYWxscz8KKiAgICoqUHJvcGVyIG9yZGVyIG9mIG9wZXJhdGlvbnM6KiogV2hhdCYjMzk7cyB0aGUgY29ycmVjdCBzZXF1ZW5jZSBmb3IgdW5yZWdpc3RlcmluZyBkZWJ1Z2ZzIGVudHJpZXM/IEkgbmVlZCB0byBlbnN1cmUgdGhlcmUgYXJlIG5vIGRlcGVuZGVuY2llcyB0aGF0IGNvdWxkIGxlYWQgdG8gY3Jhc2hlcyBvciBkYXRhIGNvcnJ1cHRpb24uCiogICAqKlNpbXVsYXRvciBpbXBhY3Q6KiogSXMgdGhpcyBmdW5jdGlvbiB0cnVseSBpc29sYXRpbmcgdGhlIGVmZmVjdHMgb24gdGhlIGRlYnVnIGZpbGVzeXN0ZW0sIG9yIGRvZXMgaXQgcmlzayBicmVha2luZyBvdGhlciBhc3BlY3RzIG9mIHRoZSBzaW11bGF0b3IgdGhhdCB1c2UgdGhpcyBkZWJ1Z2ZzPwoKRXNzZW50aWFsbHksIEkmIzM5O20gbWVudGFsbHkgYnVpbGRpbmcgYSBjaGVja2xpc3Qgb2Ygd2hhdCBJJiMzOTtkIGV4cGVjdCB0byBzZWUgd2l0aGluIHRoYXQgZnVuY3Rpb24gYW5kIHRoZSBzdXJyb3VuZGluZyBjb2RlLCBmb2N1c2luZyBvbiBwb3RlbnRpYWwgcHJvYmxlbSBhcmVhcyB0aGF0IG9mdGVuIG1hbmlmZXN0IGR1cmluZyBkZWJ1Z2ZzIG9wZXJhdGlvbnMgYW5kIHJlc291cmNlIG1hbmFnZW1lbnQgd2l0aGluIGtlcm5lbC1sZXZlbCBtb2R1bGVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI3IDExOjM5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2Rldi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNDQwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA0NDA6XHR9XG4gNDQxOlx0XG4gNDQyOlx0c3RhdGljIHZvaWQgbnNpbV9kZXZfcG9ydF9kZWJ1Z2ZzX2V4aXQoc3RydWN0IG5zaW1fZGV2X3BvcnQgKm5zaW1fZGV2X3BvcnQpXG4gNDQzOlx0e1xuIDQ0NDpcdFx0ZGVidWdmc19yZW1vdmVfcmVjdXJzaXZlKG5zaW1fZGV2X3BvcnQtXHUwMDNlZGRpcik7XG4gNDQ1Olx0fVxuIDQ0NjpcdFxuIDQ0NzpcdHN0YXRpYyBpbnQgbnNpbV9kZXZfcmVzb3VyY2VzX3JlZ2lzdGVyKHN0cnVjdCBkZXZsaW5rICpkZXZsaW5rKVxuIDQ0ODpcdHtcbiA0NDk6XHRcdHN0cnVjdCBkZXZsaW5rX3Jlc291cmNlX3NpemVfcGFyYW1zIHBhcmFtcyA9IHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNyAxMTozOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2NDIxCgkJCQkJCQlvdXRwdXQ6IDIzCgkJCQkJCQl0aG91Z2h0czogNDM4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgRGVidWdmcyBDbGVhbnVwIE9yZGVyKioKCk9rYXksIHNvIGBuc2ltX2Rldl9wb3J0X2RlYnVnZnNfZXhpdGAgbm93IGp1c3QgZG9lcyBhIHJlY3Vyc2l2ZSBgZGVidWdmc19yZW1vdmVgLiBUaGUgcGF0Y2ggc3RyZWFtbGluZXMgdGhlIHJlbW92YWwgb2YgZGVidWdmcyBlbnRyaWVzLCByZWx5aW5nIG9uIHRoaXMgZnVuY3Rpb24gaW5zdGVhZCBvZiBzY2F0dGVyZWQgYGRlYnVnZnNfcmVtb3ZlYCBjYWxscyB3aXRoaW4gYG5zaW1fZGVzdHJveWAgYW5kIGl0cyBzdWItY29tcG9uZW50cy4gQnV0IGhlcmUmIzM5O3MgdGhlIGtpY2tlcjogYG5zaW1fZGVzdHJveWAgbm93IGV4ZWN1dGVzICphZnRlciogYG5zaW1fZGV2X3BvcnRfZGVidWdmc19leGl0YC4gVGhhdCBtZWFucyB0aGUgZGVidWdmcyBmaWxlcyBhcmUgYmVpbmcgbnVrZWQgKmJlZm9yZSogYG5zaW1fZGVzdHJveWAgZ2V0cyBhIGNoYW5jZSB0byBmcmVlIHRoZSB1bmRlcmx5aW5nIHN0cnVjdHVyZXMuCgpBaGEhIFRoaXMgb3JkZXIgc2hpZnQgaXMgYSB1c2UtYWZ0ZXItZnJlZSBtaXRpZ2F0aW9uLiBJZiBhIGRlYnVnZnMgZmlsZSBpcyBhY2Nlc3NlZCBkdXJpbmcgdGhlIGV4ZWN1dGlvbiBvZiBgbnNpbV9kZXN0cm95YCwgb3IgcG90ZW50aWFsbHkgZXZlbiBhZnRlciBpdCBoYXMgc3RhcnRlZCBmcmVlaW5nIHJlc291cmNlcywgdGhlIHJlbW92YWwgb2YgdGhlIGRlYnVnZnMgZW50cmllcyAqYmVmb3JlKiB0aGF0IHBvaW50IGlzIGEgc2FmZXR5IG5ldC4gVGhpcyBsb29rcyBsaWtlIGEgZGVmaW5pdGUgZml4IGZvciBhIHBvdGVudGlhbCB2dWxuZXJhYmlsaXR5IGluIGhvdyB0aGUgZGVidWdmcyBpbnRlcmZhY2UgaW50ZXJhY3RzIHdpdGggdGhlIG5ldGRldnNpbSB0ZWFyZG93biBzZXF1ZW5jZS4KClRoZSBxdWVzdGlvbiBub3cgaXMgd2hldGhlciB0aGlzIGlzIHdvcnRoIGZ1enppbmcuIEl0JiMzOTtzIG5vdCBhIG5ldyBmZWF0dXJlLCBidXQgYSBidWcgZml4LiBGdXp6aW5nIHdvdWxkIGludm9sdmUgcHJvYmluZyB0aGUgbmV0ZGV2c2ltIGRlYnVnZnMgaW50ZXJmYWNlIHdoaWxlIGNyZWF0aW5nIGFuZCBkZXN0cm95aW5nIG5ldGRldnNpbSBwb3J0cy4gU2luY2UgaXQmIzM5O3MgY2hhbmdpbmcgdGhlIG9yZGVyIG9mIGRlc3RydWN0aW9uIGR1cmluZyB0ZWFyZG93biwgaXQmIzM5O3MgYSBmdW5jdGlvbmFsIGNoYW5nZSwgdGhvdWdoIHN1YnRsZS4gU3l6a2FsbGVyLCB3aXRoIGl0cyBrbm93biBwcm93ZXNzIGluIG5ldGRldnNpbSwgc2hvdWxkIGJlIGFibGUgdG8gZXhlcmNpc2UgdGhpcyBjb2RlIHBhdGggYnkgY29uY3VycmVudGx5IGNyZWF0aW5nLCBkZXN0cm95aW5nLCBhbmQgYWNjZXNzaW5nIGRlYnVnZnMuIE5ldGRldnNpbSBpdHNlbGYsIGJlaW5nIGEgc29mdHdhcmUgc2ltdWxhdG9yLCBpcyBhbHJlYWR5IGEgc3l6a2FsbGVyIHRhcmdldC4gUGVyaGFwcyBpdCYjMzk7cyB3b3J0aCBob25pbmcgaW4gb24gc3BlY2lmaWMgZnVuY3Rpb25zOiBgX19uc2ltX2Rldl9wb3J0X2FkZGAsIGBfX25zaW1fZGV2X3BvcnRfZGVsYCwgYG5zaW1fZGVzdHJveWAsIGFuZCBgbnNpbV9jcmVhdGVgLiBUaGVzZSBhcmUgdGhlIGtleSBmdW5jdGlvbnMgaW52b2x2ZWQgaW4gdGhlIGxpZmVjeWNsZSBvZiBuZXRkZXZzaW0gcG9ydHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjcgMTE6NDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7X19uc2ltX2Rldl9wb3J0X2FkZCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9uZXRkZXZzaW0vZGV2LmM9NjQ4PXN0YXRpYyBpbnRcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9kZXYuYzo2NDk6X19uc2ltX2Rldl9wb3J0X2FkZChzdHJ1Y3QgbnNpbV9kZXYgKm5zaW1fZGV2LCBlbnVtIG5zaW1fZGV2X3BvcnRfdHlwZSB0eXBlLFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2Rldi5jLTY1MC1cdFx0ICAgIHVuc2lnbmVkIGludCBwb3J0X2luZGV4LCB1OCBwZXJtX2FkZHJbRVRIX0FMRU5dKTtcbi0tXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vZGV2LmM9NjY3PXN0YXRpYyBpbnQgbnNpbV9lc3dfc3dpdGNoZGV2X2VuYWJsZShzdHJ1Y3QgbnNpbV9kZXYgKm5zaW1fZGV2LFxuLS1cbmRyaXZlcnMvbmV0L25ldGRldnNpbS9kZXYuYy02NzMtXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBuc2ltX2Rldl9nZXRfdmZzKG5zaW1fZGV2KTsgaSYjNDM7JiM0MzspIHtcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9kZXYuYzo2NzQ6XHRcdGVyciA9IF9fbnNpbV9kZXZfcG9ydF9hZGQobnNpbV9kZXYsIE5TSU1fREVWX1BPUlRfVFlQRV9WRiwgaSwgTlVMTCk7XG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vZGV2LmMtNjc1LVx0XHRpZiAoZXJyKSB7XG4tLVxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2Rldi5jPTE0MjU9c3RhdGljIGNvbnN0IHN0cnVjdCBkZXZsaW5rX29wcyBuc2ltX2Rldl9kZXZsaW5rX29wcyA9IHtcbi0tXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vZGV2LmMtMTQ1NC1cbmRyaXZlcnMvbmV0L25ldGRldnNpbS9kZXYuYzoxNDU1OnN0YXRpYyBpbnQgX19uc2ltX2Rldl9wb3J0X2FkZChzdHJ1Y3QgbnNpbV9kZXYgKm5zaW1fZGV2LCBlbnVtIG5zaW1fZGV2X3BvcnRfdHlwZSB0eXBlLFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2Rldi5jLTE0NTYtXHRcdFx0ICAgICAgIHVuc2lnbmVkIGludCBwb3J0X2luZGV4LCB1OCBwZXJtX2FkZHJbRVRIX0FMRU5dKVxuLS1cbmRyaXZlcnMvbmV0L25ldGRldnNpbS9kZXYuYz0xNTY0PXN0YXRpYyBpbnQgbnNpbV9kZXZfcG9ydF9hZGRfYWxsKHN0cnVjdCBuc2ltX2RldiAqbnNpbV9kZXYsXG4tLVxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2Rldi5jLTE1NjktXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBwb3J0X2NvdW50OyBpJiM0MzsmIzQzOykge1xuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2Rldi5jOjE1NzA6XHRcdGVyciA9IF9fbnNpbV9kZXZfcG9ydF9hZGQobnNpbV9kZXYsIE5TSU1fREVWX1BPUlRfVFlQRV9QRiwgaSwgTlVMTCk7XG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vZGV2LmMtMTU3MS1cdFx0aWYgKGVycilcbi0tXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vZGV2LmM9MTgyOT1pbnQgbnNpbV9kcnZfcG9ydF9hZGQoc3RydWN0IG5zaW1fYnVzX2RldiAqbnNpbV9idXNfZGV2LCBlbnVtIG5zaW1fZGV2X3BvcnRfdHlwZSB0eXBlLFxuLS1cbmRyaXZlcnMvbmV0L25ldGRldnNpbS9kZXYuYy0xODM4LVx0ZWxzZVxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2Rldi5jOjE4Mzk6XHRcdGVyciA9IF9fbnNpbV9kZXZfcG9ydF9hZGQobnNpbV9kZXYsIHR5cGUsIHBvcnRfaW5kZXgsIHBlcm1fYWRkcik7XG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vZGV2LmMtMTg0MC1cdGRldmxfdW5sb2NrKHByaXZfdG9fZGV2bGluayhuc2ltX2RldikpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI3IDExOjQwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgwMjMKCQkJCQkJCW91dHB1dDogMTkKCQkJCQkJCXRob3VnaHRzOiAxNDQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBOZXRkZXZzaW0gUGF0Y2gqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyBzaXR0aW5nIGluIGBkcml2ZXJzL25ldC9uZXRkZXZzaW0vYC4gSSBjYW4gc2VlIHRoZSByZWxldmFudCBjb25maWcgaXMgYE5FVERFVlNJTWAsIHdoaWNoIG1ha2VzIHNlbnNlLiBJIHNob3VsZCBwcm9iYWJseSBmb2N1cyBvbiB0aG9zZSBzeW1ib2xzOiBgX19uc2ltX2Rldl9wb3J0X2FkZGAsIGBfX25zaW1fZGV2X3BvcnRfZGVsYCwgYG5zaW1fY3JlYXRlYCwgYW5kIGBuc2ltX2Rlc3Ryb3lgLiBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIHdoYXQgdGhpcyBwYXRjaCBhY3R1YWxseSAqZG9lcyouCgpXYWl0IGEgc2Vjb25k4oCmIGl0IGxvb2tzIGxpa2UgdGhpcyBpcyBqdXN0IGEgY2xlYW51cCBmb3IgZGVidWdmcz8gQWgsIHllcy4gSXQmIzM5O3MgcmVtb3ZpbmcgdGhvc2UgaW5kaXZpZHVhbCBkZWJ1Z2ZzIHJlbW92YWwgY2FsbHMgYW5kIGlzIGxlYW5pbmcgb24gYGRlYnVnZnNfcmVtb3ZlX3JlY3Vyc2l2ZWAgZm9yIHRoZSBwYXJlbnQgZGlyZWN0b3J5IGluc3RlYWQuIFRoYXQmIzM5O3MgZ29vZCBwcmFjdGljZS4KCklzIHRoaXMgd29ydGggc3BlbmRpbmcgdGltZSBmdXp6aW5nPyBZZXMsIGFic29sdXRlbHkuIEV2ZW4gaWYgaXQgKnNlZW1zKiBtaW5vciwgdGhpcyB0b3VjaGVzIHRoZSB0ZWFyZG93biBzZXF1ZW5jZSwgYW5kIGl0IHNheXMgaXQgZml4ZXMgYSBidWcg4oCTIHBvdGVudGlhbGx5IGEgdXNlLWFmdGVyLWZyZWUgb3Igc29tZXRoaW5nIHNpbWlsYXIuIEFueSBjaGFuZ2UgaW4gdGVhcmRvd24gaXMgd29ydGggc2NydXRpbnksIGVzcGVjaWFsbHkgd2l0aCBtZW1vcnkgbWFuYWdlbWVudCBpbnZvbHZlZC4KCkFscmlnaHQsIGJlZm9yZSBJIGRpdmUgZGVlcGVyLCBsZXQmIzM5O3MgdGFrZSBhIHF1aWNrIGxvb2sgYXQgdGhlIGBkcml2ZXJzL25ldC9uZXRkZXZzaW0vS2NvbmZpZ2AgZmlsZSwgdG8gbWFrZSBzdXJlIEkgdW5kZXJzdGFuZCB0aGUgZGVwZW5kZW5jaWVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNyAxMTo0MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTkVUREVWU0lNJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L0tjb25maWc9NjAyPXNvdXJjZSBcJiMzNDtkcml2ZXJzL25ldC9oeXBlcnYvS2NvbmZpZ1wmIzM0O1xuZHJpdmVycy9uZXQvS2NvbmZpZy02MDMtXG5kcml2ZXJzL25ldC9LY29uZmlnOjYwNDpjb25maWcgTkVUREVWU0lNXG5kcml2ZXJzL25ldC9LY29uZmlnLTYwNS1cdHRyaXN0YXRlIFwmIzM0O1NpbXVsYXRlZCBuZXR3b3JraW5nIGRldmljZVwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNyAxMTo0MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4NTMxCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKkluaXRpYWwgQ29uZmlndXJhdGlvbiBDaGVjayoqCgpBbHJpZ2h0LCBiZWZvcmUgZGl2aW5nIHRvbyBkZWVwLCBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgaGF2ZW4mIzM5O3QgbWlzc2VkIHNvbWV0aGluZyBmdW5kYW1lbnRhbC4gSSYjMzk7bSBnb2luZyB0byBxdWlja2x5IHNjYW4gZm9yIGFsdGVybmF0ZSBvciBleGlzdGluZyBjb25maWd1cmF0aW9ucy4gSXQmIzM5O3MgYSBoYWJpdCwgcmVhbGx5LiBQcmV2ZW50cyBtZSBmcm9tIGdvaW5nIGRvd24gYSByYWJiaXQgaG9sZSBhbmFseXppbmcgYSBwcm9ibGVtIG9ubHkgdG8gcmVhbGl6ZSBJJiMzOTttIHdvcmtpbmcgd2l0aCB0aGUgd3Jvbmcgc2V0dXAgb3IgYW4gb3ZlcnJpZGRlbiBwYXJhbWV0ZXIuIEJldHRlciB0byBlbnN1cmUgSSYjMzk7bSBzdGFydGluZyBmcm9tIGEgZnVsbHkgdW5kZXJzdG9vZCBiYXNlbGluZS4gU28sIGZpcnN0IHRoaW5ncyBmaXJzdCwgbGV0JiMzOTtzIHNlZSBpZiB0aGVyZSBhcmUgYW55IG90aGVyIGNvbmZpZ3VyYXRpb24gZmlsZXMsIGVudmlyb25tZW50IHZhcmlhYmxlcywgb3IgZXZlbiBjb21tYW5kLWxpbmUgYXJndW1lbnRzIHRoYXQgbWlnaHQgYmUgaW5mbHVlbmNpbmcgdGhlIHN5c3RlbSYjMzk7cyBiZWhhdmlvci4gQSBxdWljayBzd2VlcCBpcyBlc3NlbnRpYWwgYmVmb3JlIEkgd2FzdGUgdGltZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjcgMTE6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNjA0LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA2MDQ6XHRjb25maWcgTkVUREVWU0lNXG4gNjA1Olx0XHR0cmlzdGF0ZSBcJiMzNDtTaW11bGF0ZWQgbmV0d29ya2luZyBkZXZpY2VcJiMzNDtcbiA2MDY6XHRcdGRlcGVuZHMgb24gREVCVUdfRlNcbiA2MDc6XHRcdGRlcGVuZHMgb24gSU5FVFxuIDYwODpcdFx0ZGVwZW5kcyBvbiBQU0FNUExFIHx8IFBTQU1QTEU9blxuIDYwOTpcdFx0ZGVwZW5kcyBvbiBQVFBfMTU4OF9DTE9DS19NT0NLIHx8IFBUUF8xNTg4X0NMT0NLX01PQ0s9blxuIDYxMDpcdFx0c2VsZWN0IE5FVF9ERVZMSU5LXG4gNjExOlx0XHRzZWxlY3QgUEFHRV9QT09MXG4gNjEyOlx0XHRzZWxlY3QgTkVUX1NIQVBFUlxuIDYxMzpcdFx0aGVscFxuIDYxNDpcdFx0ICBUaGlzIGRyaXZlciBpcyBhIGRldmVsb3BlciB0ZXN0aW5nIHRvb2wgYW5kIHNvZnR3YXJlIG1vZGVsIHRoYXQgY2FuXG4gNjE1Olx0XHQgIGJlIHVzZWQgdG8gdGVzdCB2YXJpb3VzIGNvbnRyb2wgcGF0aCBuZXR3b3JraW5nIEFQSXMsIGVzcGVjaWFsbHlcbiA2MTY6XHRcdCAgSFctb2ZmbG9hZCByZWxhdGVkLlxuIDYxNzpcdFxuIDYxODpcdFx0ICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlXG4gNjE5Olx0XHQgIHdpbGwgYmUgY2FsbGVkIG5ldGRldnNpbS5cbiA2MjA6XHRcbiA2MjE6XHRjb25maWcgTkVUX0ZBSUxPVkVSXG4gNjIyOlx0XHR0cmlzdGF0ZSBcJiMzNDtGYWlsb3ZlciBkcml2ZXJcJiMzNDtcbiA2MjM6XHRcdHNlbGVjdCBGQUlMT1ZFUlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNyAxMTo0MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5MDM3CgkJCQkJCQlvdXRwdXQ6IDIyCgkJCQkJCQl0aG91Z2h0czogNDUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjoKCioqSW52ZXN0aWdhdGluZyBOZXR3b3JrIERldmljZSBTaW11bGF0aW9uIGFuZCBJUHNlYyoqCgpSaWdodCwgc28gSSBzZWUgYE5FVERFVlNJTWAgYXMgdGhlIGNlbnRyYWwgY29uZmlndXJhdGlvbiBwb2ludCwgdGhlIGh1Yi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHJlbGF0aW9uc2hpcCB0byB0aGUgb3RoZXIgcGFydHMuIEFuZCB0aGVuIEkgaGl0IHNvbWV0aGluZyBpbnRlcmVzdGluZzogYGlwc2VjLmNgIGhhcyBhIGBuc2ltX2lwc2VjX3RlYXJkb3duYCBmdW5jdGlvbi4uLiB0aGF0JiMzOTtzIGEgY2x1ZS4gTXkgbWluZCBpbW1lZGlhdGVseSBqdW1wcyB0byBhIGRlcGVuZGVuY3kgLSBkb2VzIHRoaXMgYG5zaW1faXBzZWNfdGVhcmRvd25gIGZ1bmN0aW9uICpyZXF1aXJlKiB0aGUgYE5FVERFVlNJTV9JUFNFQ2AgY29uZmlndXJhdGlvbiBvcHRpb24gdG8gYmUgZGVmaW5lZD8gVGhhdCBmZWVscyBsaWtlIHRoZSBjcml0aWNhbCBxdWVzdGlvbiB0byBpbnZlc3RpZ2F0ZSBuZXh0LiBVbmRlcnN0YW5kaW5nIHRoYXQgZGVwZW5kZW5jeSB3aWxsIGJlIGtleSB0byBwcm9wZXJseSBjb25maWd1cmluZyBhbmQgd29ya2luZyB3aXRoIHRoaXMgc2ltdWxhdGlvbiBlbnZpcm9ubWVudCwgcGFydGljdWxhcmx5IGluIHJlbGF0aW9uIHRvIElQc2VjLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNyAxMTo0MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBORVRERVZTSU1fSVBTRUMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNyAxMTo0MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5Mjg2CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOgoKKipEaXZpbmcgaW50byB0aGUgTmV0ZGV2c2ltIE1ha2VmaWxlKioKCk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgYnVpbGQgcHJvY2VzcyBmb3IgdGhlIGBuZXRkZXZzaW1gIG1vZHVsZSwgc28gdGhlIGZpcnN0IGxvZ2ljYWwgc3RlcCBpcyB0byBleGFtaW5lIHRoZSBgZHJpdmVycy9uZXQvbmV0ZGV2c2ltL01ha2VmaWxlYC4gVGhpcyBpcyB3aGVyZSBhbGwgdGhlIGNvbXBpbGF0aW9uIGluc3RydWN0aW9ucywgZGVwZW5kZW5jaWVzLCBhbmQgcG90ZW50aWFsIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgdGhlIG5ldGRldnNpbSBkZXZpY2Ugd291bGQgYmUgZGVmaW5lZC4gSSYjMzk7bSBleHBlY3RpbmcgdG8gZmluZCBydWxlcyBmb3IgY29tcGlsaW5nIHRoZSBjb3JlIG5ldGRldnNpbSBjb2RlLCBhbnkgc3VwcG9ydCBsaWJyYXJpZXMgb3IgZHJpdmVycyBpdCByZWxpZXMgb24sIGFuZCBwZXJoYXBzIGV2ZW4gc29tZSBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgc2VjdGlvbnMgaWYgaXQgaGFzIGRpZmZlcmVudCBpbXBsZW1lbnRhdGlvbnMgYWNyb3NzIHBsYXRmb3Jtcy4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgdGhpbmdzIGxpa2Ugb2JqZWN0IGZpbGUgZGVmaW5pdGlvbnMsIGluY2x1ZGUgcGF0aHMsIGxpbmtlciBmbGFncywgbW9kdWxlIGRlcGVuZGVuY2llcyAoZS5nLiwgb3RoZXIgbmV0d29yayBzdGFjayBjb21wb25lbnRzKSwgYW5kIGFueSBjb25kaXRpb25hbCBjb21waWxhdGlvbiBiYXNlZCBvbiBrZXJuZWwgY29uZmlndXJhdGlvbiBvcHRpb25zLiBVbmRlcnN0YW5kaW5nIHRoaXMgTWFrZWZpbGUgd2lsbCBnaXZlIG1lIGEgc29saWQgZm91bmRhdGlvbiBmb3IgZnVydGhlciBpbnZlc3RpZ2F0aW9uLCBlc3BlY2lhbGx5IGlmIEkgbmVlZCB0byBtb2RpZnkgb3IgZGVidWcgdGhlIG5ldGRldnNpbSBkcml2ZXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI3IDExOjQyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvbmV0ZGV2c2ltL01ha2VmaWxlJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuICAgMjpcdFxuICAgMzpcdG9iai0kKENPTkZJR19ORVRERVZTSU0pICYjNDM7PSBuZXRkZXZzaW0ub1xuICAgNDpcdFxuICAgNTpcdG5ldGRldnNpbS1vYmpzIDo9IFxcXG4gICA2Olx0XHRuZXRkZXYubyBkZXYubyBldGh0b29sLm8gZmliLm8gYnVzLm8gaGVhbHRoLm8gaHdzdGF0cy5vIHVkcF90dW5uZWxzLm8gdGMub1xuICAgNzpcdFxuICAgODpcdGlmZXEgKCQoQ09ORklHX0JQRl9TWVNDQUxMKSx5KVxuICAgOTpcdG5ldGRldnNpbS1vYmpzICYjNDM7PSBcXFxuICAxMDpcdFx0YnBmLm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjcgMTE6NDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTY5NwoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDE1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHN1bW1hcnksIHByZXNlbnRlZCBhcyBhIHN0cmVhbSBvZiB0aG91Z2h0OgoKKipJUHNlYyBhbmQgUFNQOiBBIFF1aWNrIENoZWNrLUluKioKClJpZ2h0LCBsZXQmIzM5O3Mgc2VlLi4uIEkmIzM5O20gY3VycmVudGx5IGZvY3VzZWQgb24gYSBicm9hZGVyIGFyY2hpdGVjdHVyYWwgcGllY2UsIGJ1dCBzb21ldGhpbmcmIzM5O3MgbmFnZ2luZyBhdCBtZS4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJiMzOTttIG5vdCBvdmVybG9va2luZyBhbnl0aGluZyBjcml0aWNhbCwgcGFydGljdWxhcmx5IGFyb3VuZCB0aGUgY29yZSBuZXR3b3JraW5nIHNlY3VyaXR5IGFzcGVjdHMuIEhtbS4uLiB3aGF0IGFib3V0IGBpcHNlYy5jYD8gVGhhdCYjMzk7cyBkZWZpbml0ZWx5IGEgY3J1Y2lhbCBjb21wb25lbnQuIEkgbmVlZCB0byBxdWlja2x5IHJ1biB0aHJvdWdoIG15IG1lbnRhbCBjaGVja2xpc3Q6IGVuY3J5cHRpb24sIGF1dGhlbnRpY2F0aW9uLCBrZXkgbWFuYWdlbWVudCwgdHVubmVsIGVzdGFibGlzaG1lbnQg4oCTIGFyZSB0aGVyZSBhbnkgcmVjZW50IGNoYW5nZXMgdGhlcmUgdGhhdCBpbXBhY3QgdGhlIGN1cnJlbnQgZGVzaWduPyBBcmUgdGhlcmUgYW55IHBvdGVudGlhbCBpbnRlZ3JhdGlvbiBwb2ludHMgb3IgY29uZmxpY3RzIEkgbmVlZCB0byByZXZpc2l0IGluIGxpZ2h0IG9mIHRoZSBiaWdnZXIgcGljdHVyZT8KCkFuZCB0aGVuIHRoZXJlJiMzOTtzIGBwc3AuY2AuIFRoYXQgZmlsZSBhbHdheXMgc2VlbXMgdG8gYmUgcmlnaHQgb24gdGhlIGVkZ2Ugb2YgbXkgbWVtb3J5LiBJdCByZWxhdGVzIHRvIHNvbWUgb2YgdGhlIHBlcmZvcm1hbmNlIHN0dWZmLCByaWdodD8gU3BlY2lmaWNhbGx5LCBhbnl0aGluZyByZWxhdGVkIHRvIHBhY2tldCBmaWx0ZXJpbmc/IERpZCB0aGF0IGdldCB1cGRhdGVkIHJlY2VudGx5PyBJIG5lZWQgdG8gcXVpY2tseSByZWNhbGwgdGhlIGltcGxpY2F0aW9ucyBvZiBhbnkgb2YgdGhvc2UgbW9kaWZpY2F0aW9ucywgZXNwZWNpYWxseSBpZiB0aGVyZSYjMzk7cyBhbnkgaW1wYWN0IG9uIHRoZSBvdmVyYWxsIHRocm91Z2hwdXQgb3IgbGF0ZW5jeSBvZiBvdXIgc2VjdXJpdHkgcG9zdHVyZS4gSSBzaG91bGQgcXVpY2tseSByZXZpZXcgdGhvc2UgY2hhbmdlcyB0byBtYWtlIHN1cmUgdGhpcyBmaXRzIHJpZ2h0IGludG8gd2hhdCBJJiMzOTttIGRvaW5nIGFuZCBkb2VzIG5vdCBwcmVzZW50IHNvbWUgc29ydCBvZiBib3R0bGVuZWNrLiBKdXN0IGEgcXVpY2sgc2FuaXR5IGNoZWNrIHRvIGJlIHN1cmUuIEFscmlnaHQsIGxldCYjMzk7cyBqb3QgdGhvc2UgZG93biBhcyBhY3Rpb24gaXRlbXMgdG8gcmV2aXNpdC4gSXQmIzM5O3MgYSBxdWljayBjaGVjay1pbiB0byBlbnN1cmUgSSBoYXZlbiYjMzk7dCBmb3Jnb3R0ZW4gYW55dGhpbmcgY3JpdGljYWwuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI3IDExOjQyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvbmV0ZGV2c2ltL01ha2VmaWxlJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAxMTpcdGVuZGlmXG4gIDEyOlx0XG4gIDEzOlx0aWZuZXEgKCQoQ09ORklHX1hGUk1fT0ZGTE9BRCksKVxuICAxNDpcdG5ldGRldnNpbS1vYmpzICYjNDM7PSBpcHNlYy5vXG4gIDE1Olx0ZW5kaWZcbiAgMTY6XHRcbiAgMTc6XHRpZm5lcSAoJChDT05GSUdfUFNBTVBMRSksKVxuICAxODpcdG5ldGRldnNpbS1vYmpzICYjNDM7PSBwc2FtcGxlLm9cbiAgMTk6XHRlbmRpZlxuICAyMDpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNyAxMTo0MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDE2MgoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCBwcmVzZW50ZWQgYXMgaWYgaXQgd2VyZSBteSBvd24gaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipJbnZlc3RpZ2F0aW5nIGBwc3AuY2AqKgoKQWxyaWdodCwgc28gdGhlIHF1ZXN0aW9uIGltbWVkaWF0ZWx5IHNwcmluZ3MgdG8gbWluZDogKmBwc3AuY2A/KiBXaGF0JiMzOTtzIHRoZSBjb250ZXh0IGhlcmU/IEdpdmVuIHRoZSBuYXR1cmUgb2YgbXkgd29yaywgYW5kIHRoZSBpbXBsaWVkIG5lZWQgZm9yIGRlZXBlciBhbmFseXNpcywgdGhpcyBtdXN0IGJlIHNpZ25pZmljYW50LiBJJiMzOTttIGxpa2VseSBsb29raW5nIGF0IGEgY29yZSBjb21wb25lbnQgb2Ygc29tZXRoaW5nIC0gcG90ZW50aWFsbHkga2VybmVsLWxldmVsLCBtYXliZSBhIGRyaXZlciwgb3IgY3JpdGljYWwgc3lzdGVtIG1vZHVsZS4gVGhlIG5hbWUgJiMzNDtwc3AmIzM0OyBpdHNlbGYgaXMgZXZvY2F0aXZlLiBJcyB0aGlzIHJlbGF0ZWQgdG8gYSBzcGVjaWZpYyBwbGF0Zm9ybSwgbGlrZSBQbGF5U3RhdGlvbiBQb3J0YWJsZSAoUFNQKSwgb3IgaXMgaXQgYW4gYWNyb255bSBJJiMzOTttIGZhbWlsaWFyIHdpdGggaW4gYW5vdGhlciBjb250ZXh0PyBJIG5lZWQgdG8gcXVpY2tseSByZWNhbGwgbXkga25vd2xlZGdlIGJhc2UsIGFuZCBkZXRlcm1pbmUgdGhlIHNjb3BlIG9mIHRoaXMgZmlsZS4gV2hhdCBzeXN0ZW0gYW0gSSB3b3JraW5nIHdpdGg/IFdoYXQgc3BlY2lmaWMgYXJjaGl0ZWN0dXJlIG9yIGZyYW1ld29yayBpcyBpbiB1c2U/IFdoYXQmIzM5O3MgdGhlIHBvdGVudGlhbCBpbXBhY3Qgb2YgaXRzIGJlaGF2aW9yPyBEb2VzIGl0IHBlcnRhaW4gdG8gbWVtb3J5IG1hbmFnZW1lbnQsIHByb2Nlc3Mgc2NoZWR1bGluZywgcG93ZXIgbWFuYWdlbWVudCwgb3Igc29tZXRoaW5nIGVsc2UgZW50aXJlbHk/IEEgY29tcHJlaGVuc2l2ZSB1bmRlcnN0YW5kaW5nIG9mIGBwc3AuY2AgaXMgcGFyYW1vdW50IHRvIHJlc29sdmluZyB3aGF0ZXZlciBpc3N1ZSBJJiMzOTttIGN1cnJlbnRseSBmYWNpbmcuIFRoaXMgaXMgZ29pbmcgdG8gYmUgY3J1Y2lhbC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjcgMTE6NDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9uZXRkZXZzaW0vTWFrZWZpbGUmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDIxOlx0aWZuZXEgKCQoQ09ORklHX0lORVRfUFNQKSwpXG4gIDIyOlx0bmV0ZGV2c2ltLW9ianMgJiM0Mzs9IHBzcC5vXG4gIDIzOlx0ZW5kaWZcbiAgMjQ6XHRcbiAgMjU6XHRpZm5lcSAoJChDT05GSUdfTUFDU0VDKSwpXG4gIDI2Olx0bmV0ZGV2c2ltLW9ianMgJiM0Mzs9IG1hY3NlYy5vXG4gIDI3Olx0ZW5kaWZcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjcgMTE6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA1MzkKCQkJCQkJCW91dHB1dDogMTkKCQkJCQkJCXRob3VnaHRzOiAxMTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQ29uZmlndXJhdGlvbiBDb25zaWRlcmF0aW9ucyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgZW5hYmxpbmcgYE5FVERFVlNJTWAsIGBYRlJNX09GRkxPQURgLCBhbmQgYElORVRfUFNQYC4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJiMzOTttIGRvaW5nIHRoaXMgY29ycmVjdGx5LiBBIHF1aWNrIGNoZWNrIHJldmVhbHMgdGhhdCBgWEZSTV9PRkZMT0FEYCBhbmQgYElORVRfUFNQYCBhcmUgc3BlY2lmaWNhbGx5IGxpbmtlZCB0byBzb21lIGZpbGVzLCBidXQgdGhlIHN1YnN0YW50aWFsIGNoYW5nZXMgc2VlbSB0byBiZSBpbiBgZGV2LmNgIGFuZCBgbmV0ZGV2LmNgLCBzbyBJJiMzOTtsbCBrZWVwIGFuIGV5ZSBvbiB0aG9zZS4gSSYjMzk7bGwgbmVlZCB0byBleHBsaWNpdGx5IGVuYWJsZSBgTkVUREVWU0lNYCwgYFhGUk1fT0ZGTE9BRGAsIGFuZCBgSU5FVF9QU1BgIGluIHRoZSBjb25maWd1cmF0aW9uLiBOb3csIEkgbmVlZCB0byBkb3VibGUtY2hlY2sgbXkgYXNzdW1wdGlvbnMuLi5JIG5lZWQgdG8gY29uZmlybSBgSU5FVF9QU1BgOyBpcyB0aGF0IGEgZGlyZWN0IGNvbmZpZ3VyYXRpb24gb3B0aW9uLCBvciBpcyBpdCBlbmFibGVkIHZpYSBhbm90aGVyIHNldHRpbmc/IExldCBtZSBtYWtlIHN1cmUgSSYjMzk7bSBub3QgbWlzc2luZyBhbnl0aGluZyBjcnVjaWFsIGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI3IDExOjQ0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBJTkVUX1BTUCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvcHNwL0tjb25maWctNC0jXG5uZXQvcHNwL0tjb25maWc6NTpjb25maWcgSU5FVF9QU1Bcbm5ldC9wc3AvS2NvbmZpZy02LVx0Ym9vbCBcJiMzNDtQU1AgU2VjdXJpdHkgUHJvdG9jb2wgc3VwcG9ydFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNyAxMTo0NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDkwNgoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDEwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKk9mZmxvYWQgQ29uc2lkZXJhdGlvbnMgLSBYRlJNKioKCkFscmlnaHQsIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhlIGN1cnJlbnQgc3RhdGUgb2YgdGhpbmdzLiBXZSYjMzk7cmUgY2xlYXJseSBwdXNoaW5nIHBlcmZvcm1hbmNlIHdpdGggdGhpcyBsYXRlc3QgaW1wbGVtZW50YXRpb24sIGJ1dCBJIGtlZXAgY2lyY2xpbmcgYmFjayB0byBwb3RlbnRpYWwgYm90dGxlbmVja3MuIEFuZCB0aGUgYmlnIG9uZSB0aGF0IGtlZXBzIHBva2luZyBhdCBtZSBpcywgJiMzNDtXaGF0IGFib3V0IGBYRlJNX09GRkxPQURgPyYjMzQ7IFdlJiMzOTt2ZSBnb3Qgb3VyIGNvcmUgcHJvY2Vzc2luZyBkaWFsZWQgaW4sIGJ1dCBvZmZsb2FkaW5nIGlzIGEgY3JpdGljYWwgcGllY2UsIGFuZCBJIG5lZWQgdG8gbWFrZSBzdXJlIHdlJiMzOTtyZSBub3QgbmVnbGVjdGluZyB0aGUgaW1wbGljYXRpb25zLgoKV2UgY2FuJiMzOTt0IGp1c3QgYXNzdW1lIHRoZSBjdXJyZW50IHNldHVwIGNvdmVycyBhbGwgb3VyIGJhc2VzLiBXZSBuZWVkIHRvIGFuYWx5emUgdGhpcyBmcm9tIGFsbCBhbmdsZXMgdG8gcHJldmVudCBzbG93ZG93bnMgYW5kIG90aGVyIHBlcmZvcm1hbmNlIGlzc3Vlcy4gSXMgdGhlIGN1cnJlbnQgZGVzaWduIHN0aWxsIHRoZSBiZXN0IHBhdGg/IEFyZSB3ZSBsZWF2aW5nIGFueSB0aHJvdWdocHV0IG9uIHRoZSB0YWJsZT8gV2UgbmVlZCB0byBrZWVwIHRoaXMgb3BlbiBxdWVzdGlvbiBpbiBmcm9udCBvZiB1cyBhcyB3ZSBtb3ZlIGZvcndhcmQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI3IDExOjQ0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBYRlJNX09GRkxPQUQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3hmcm0vS2NvbmZpZz01PWNvbmZpZyBYRlJNXG4tLVxubmV0L3hmcm0vS2NvbmZpZy0xMC1cbm5ldC94ZnJtL0tjb25maWc6MTE6Y29uZmlnIFhGUk1fT0ZGTE9BRFxubmV0L3hmcm0vS2NvbmZpZy0xMi1cdGJvb2xcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjcgMTE6NDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTEyMDMKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiA0OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgcHJlc2VudGVkIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKk5hdmlnYXRpbmcgdGhlIEtlcm5lbCBDb25maWd1cmF0aW9uIExhbmRzY2FwZSoqCgpSaWdodCwgbGV0JiMzOTtzIHNlZS4uLiBJJiMzOTttIGxvb2tpbmcgYXQgYE5FVERFVlNJTWAsIGBYRlJNX09GRkxPQURgLCBhbmQgYElORVRfUFNQYC4gT2theSwgc3RhbmRhcmQgc3VzcGVjdHMgaW4gbmV0d29yayBjb25maWd1cmF0aW9uLiBOb3cgaG9sZCBvbiBhIHNlY29uZC4uLiBgWEZSTV9PRkZMT0FEYC4uLiB0aGF0JiMzOTtzIGEgKmJvb2xlYW4qIHdpdGhvdXQgYW4gYWNjb21wYW55aW5nIHByb21wdD8gQWhhLCB0aGF0IG1lYW5zIGl0JiMzOTtzIG9uZSBvZiAqdGhvc2UqIOKAkyBhdXRvbWF0aWNhbGx5IHNlbGVjdGVkIGJhc2VkIG9uIHRoZSBzdGF0ZXMgb2Ygb3RoZXIgY29uZmlndXJhdGlvbnMuIE5vIGRpcmVjdCB1c2VyIGNvbnRyb2wsIGJ1dCBkZWZpbml0ZWx5IHJlbGV2YW50IGR1ZSB0byBpdHMgZGVwZW5kZW5jaWVzIGFuZCBlZmZlY3RzLiBJIG5lZWQgdG8gdHJhY2UgYmFjayBhbmQgaWRlbnRpZnkgdGhlIHRyaWdnZXJzIGZvciB0aGF0LiBJdCBjb3VsZCBiZSBjcml0aWNhbCB0byBwZXJmb3JtYW5jZSBvciBzZWN1cml0eSBkZXBlbmRpbmcgb24gd2hhdCBlbHNlIGlzIGVuYWJsZWQuIFRoaXMgcmVxdWlyZXMgYSBkZWVwZXIgZGl2ZSBpbnRvIHRoZSBpbnRlcmRlcGVuZGVuY2llcy4gR290dGEgcmVtZW1iZXIgdGhhdCBvbmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI3IDExOjQ0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NlbGVjdCBYRlJNX09GRkxPQUQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjQvS2NvbmZpZz0zNjk9Y29uZmlnIElORVRfRVNQX09GRkxPQURcbi0tXG5uZXQvaXB2NC9LY29uZmlnLTM3MS1cdGRlcGVuZHMgb24gSU5FVF9FU1Bcbm5ldC9pcHY0L0tjb25maWc6MzcyOlx0c2VsZWN0IFhGUk1fT0ZGTE9BRFxubmV0L2lwdjQvS2NvbmZpZy0zNzMtXHRkZWZhdWx0IG5cbi0tXG5uZXQvaXB2Ni9LY29uZmlnPTc3PWNvbmZpZyBJTkVUNl9FU1BfT0ZGTE9BRFxuLS1cbm5ldC9pcHY2L0tjb25maWctNzktXHRkZXBlbmRzIG9uIElORVQ2X0VTUFxubmV0L2lwdjYvS2NvbmZpZzo4MDpcdHNlbGVjdCBYRlJNX09GRkxPQURcbm5ldC9pcHY2L0tjb25maWctODEtXHRkZWZhdWx0IG5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjcgMTE6NDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE2MjUKCQkJCQkJCW91dHB1dDogMTkKCQkJCQkJCXRob3VnaHRzOiAzMDkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgTmV0ZGV2c2ltIE9mZmxvYWQgUGF0Y2gqKgoKT2theSwgc28gSSBzZWUgdGhhdCBgSU5FVF9FU1BfT0ZGTE9BRGAgYW5kIGBJTkVUNl9FU1BfT0ZGTE9BRGAgYXJlIHRoZSBrZXlzIHRvIGVuYWJsaW5nIGBYRlJNX09GRkxPQURgIGhlcmUuIE15IGluaXRpYWwgdGhvdWdodCB3YXMgdG8gc2ltcGx5IGxpc3QgdGhlIHJlbGV2YW50IHN5bWJvbHMgbGlrZSBgTkVUREVWU0lNYCwgYElORVRfRVNQX09GRkxPQURgLCBhbmQgYElORVRfUFNQYCwgYnV0IEkgbmVlZCB0byBkaWcgZGVlcGVyLgoKQSBjbG9zZXIgbG9vayByZXZlYWxzIHRoYXQgdGhpcyBpcyBsYXJnZWx5IGFib3V0IGNsZWFuaW5nIHVwIGRlYnVnZnMgYW5kIHJlb3JkZXJpbmcgY29kZS4gTm93LCB0aGlzIG1ha2VzIG1lIHRoaW5rLiBJcyB0aGlzIHdvcnRoIGZ1enppbmc/IEFic29sdXRlbHkhIFRoZSBjcml0aWNhbCBjaGFuZ2UgaXMgdGhlIHJlb3JkZXJpbmcgb2YgYG5zaW1fZGVzdHJveWAgYW5kIGBuc2ltX2Rldl9wb3J0X2RlYnVnZnNfZXhpdGAuIFRoaXMgc2VxdWVuY2UgbW9kaWZpY2F0aW9uIGlzIGFsbW9zdCBjZXJ0YWlubHkgYWRkcmVzc2luZyBhIHVzZS1hZnRlci1mcmVlIG9yIGEgc2ltaWxhciBtZW1vcnkgc2FmZXR5IHZ1bG5lcmFiaWxpdHkuIEZ1enppbmcgaXMgKmVzc2VudGlhbCogaGVyZS4gV2UgbmVlZCB0byBlbnN1cmUgdGhhdCB0aGUgbmV3IG9yZGVyICpjb3JyZWN0bHkqIGZpeGVzIHRoZSBpZGVudGlmaWVkIGJ1ZyBhbmQgZG9lc24mIzM5O3QgaW5hZHZlcnRlbnRseSBpbnRyb2R1Y2UgKm5ldyogcHJvYmxlbXMuCgpJIG5lZWQgdG8gZm9jdXMgbXkgZnV6emluZyBlZmZvcnRzLiBJJiMzOTt2ZSBpbml0aWFsbHkgaWRlbnRpZmllZCBzb21lIGZvY3VzIHN5bWJvbHM6IGBfX25zaW1fZGV2X3BvcnRfYWRkYCwgYF9fbnNpbV9kZXZfcG9ydF9kZWxgLCBgbnNpbV9jcmVhdGVgLCBgbnNpbV9kZXN0cm95YCwgYG5zaW1faXBzZWNfdGVhcmRvd25gLCBgbnNpbV9wc3BfdW5pbml0YCwgYW5kIGBuc2ltX3VkcF90dW5uZWxzX2luZm9fZGVzdHJveWAuIExldCBtZSByZWZpbmUgdGhhdCBmb2N1cy4gQWZ0ZXIgc29tZSB0aG91Z2h0LCBJJiMzOTttIGdvaW5nIHRvIHRyaW0gaXQgZG93biB0byBgX19uc2ltX2Rldl9wb3J0X2FkZGAsIGBfX25zaW1fZGV2X3BvcnRfZGVsYCwgYG5zaW1fY3JlYXRlYCwgYW5kIGBuc2ltX2Rlc3Ryb3lgLiBUaGVzZSBhcmUgdGhlIGNvcmUgZnVuY3Rpb25zLgoKV2FpdCwgYXJlIHRoZXNlIGV2ZW4gaG90IHBhdGhzPyBObywgdGhleSYjMzk7cmUgdGhlIHNldHVwL3RlYXJkb3duIGZ1bmN0aW9ucyBmb3IgbmV0ZGV2c2ltIHBvcnRzLiBUaGF0IG1ha2VzIHRoZW0gKnBlcmZlY3QqIGZvciBmdXp6aW5nLiBUaGV5JiMzOTtyZSBpZGVhbCB0YXJnZXRzLgoKTGV0IG1lIGp1c3QgZG91YmxlLWNoZWNrIHRoYXQgYG5zaW1fZGVzdHJveWAgZnVuY3Rpb24gYWdhaW4uLi4gdG8gbWFrZSBzdXJlIEkmIzM5O20gbm90IG1pc3NpbmcgYW55dGhpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI3IDExOjQ1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3ZvaWQgbnNpbV9kZXN0cm95JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXYuYz0xMTI1PXN0cnVjdCBuZXRkZXZzaW0gKm5zaW1fY3JlYXRlKHN0cnVjdCBuc2ltX2RldiAqbnNpbV9kZXYsXG4tLVxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldi5jLTExNzEtXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2LmM6MTE3Mjp2b2lkIG5zaW1fZGVzdHJveShzdHJ1Y3QgbmV0ZGV2c2ltICpucylcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXYuYy0xMTczLXtcbi0tXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2c2ltLmg9MTY0PXN0cnVjdCBuZXRkZXZzaW0gKm5zaW1fY3JlYXRlKHN0cnVjdCBuc2ltX2RldiAqbnNpbV9kZXYsXG4tLVxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldnNpbS5oLTE2Ni1cdFx0XHQgICAgICB1OCBwZXJtX2FkZHJbRVRIX0FMRU5dKTtcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXZzaW0uaDoxNjc6dm9pZCBuc2ltX2Rlc3Ryb3koc3RydWN0IG5ldGRldnNpbSAqbnMpO1xuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldnNpbS5oLTE2OC1ib29sIG5ldGRldl9pc19uc2ltKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNyAxMTo0NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjY0NgoJCQkJCQkJb3V0cHV0OiAyNAoJCQkJCQkJdGhvdWdodHM6IDE1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzIG9uIHRoaXM6CgoqKkFuYWx5emluZyB0aGUgYG5zaW1faXBzZWNfdGVhcmRvd25gIFNjcmlwdCoqCgpBbHJpZ2h0LCB0aW1lIHRvIGdldCB0byB3b3JrLiBGaXJzdCB0aGluZyYjMzk7cyBmaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCYjMzk7cyBnb2luZyBvbiB3aXRoIHRoaXMgYG5zaW1faXBzZWNfdGVhcmRvd25gIHNjcmlwdC4gR2l2ZW4gbXkgZXhwZXJ0aXNlLCBJIGFscmVhZHkgaGF2ZSBhIHByZXR0eSBnb29kIGlkZWEsIGJ1dCBpdCYjMzk7cyBpbXBvcnRhbnQgdG8gYXBwcm9hY2ggdGhpcyB3aXRoIGEgY3JpdGljYWwgZXllLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgZ3Jhc3AgdGhlIHNwZWNpZmljcyBvZiB0aGlzIGltcGxlbWVudGF0aW9uLCBlc3BlY2lhbGx5IGNvbnNpZGVyaW5nIHRoZSBjb250ZXh0IG9mIG5ldHdvcmsgc2VjdXJpdHkgYW5kIElQU2VjLiBJJiMzOTttIGdvaW5nIHRvIGxvb2sgZm9yIGtleSBlbGVtZW50czogd2hhdCByZXNvdXJjZXMgaXMgaXQgdGFyZ2V0aW5nICh2aXJ0dWFsIG1hY2hpbmVzLCBzcGVjaWZpYyB0dW5uZWxzLCBldGMuKT8gV2hhdCBhY3Rpb25zIGlzIGl0IHRha2luZyAoZGVsZXRpbmcgY29uZmlndXJhdGlvbnMsIHN0b3BwaW5nIGRhZW1vbnMsIGNsZWFyaW5nIHJvdXRlcyk/IFdoYXQgYXJlIHRoZSBwb3RlbnRpYWwgcG9pbnRzIG9mIGZhaWx1cmUsIGFuZCBob3cgZG9lcyBpdCBoYW5kbGUgdGhlbT8gQXJlIHRoZXJlIGFueSBvYnZpb3VzIHNlY3VyaXR5IHZ1bG5lcmFiaWxpdGllcyBwcmVzZW50IChlLmcuLCBoYXJkY29kZWQgY3JlZGVudGlhbHMsIGluc3VmZmljaWVudCBlcnJvciBoYW5kbGluZyB0aGF0IGNvdWxkIGxlYWQgdG8gYSBkZW5pYWwtb2Ytc2VydmljZSwgdW5pbnRlbmRlZCBhY2Nlc3MgcmlnaHRzKT8gSeKAmWxsIG5lZWQgdG8gYXNzZXNzIHRoZSBpZGVtcG90ZW5jeSBvZiB0aGUgc2NyaXB0IOKAkyBjYW4gSSBydW4gaXQgbXVsdGlwbGUgdGltZXMgc2FmZWx5PyBGaW5hbGx5LCBJJiMzOTtsbCBjb25zaWRlciBob3cgaXQgaW50ZWdyYXRlcyBpbnRvIHRoZSBvdmVyYWxsIG5ldHdvcmsgYXJjaGl0ZWN0dXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNyAxMTo0NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt2b2lkIG5zaW1faXBzZWNfdGVhcmRvd24mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2lwc2VjLmM9MjcxPXZvaWQgbnNpbV9pcHNlY19pbml0KHN0cnVjdCBuZXRkZXZzaW0gKm5zKVxuLS1cbmRyaXZlcnMvbmV0L25ldGRldnNpbS9pcHNlYy5jLTI4Ny1cbmRyaXZlcnMvbmV0L25ldGRldnNpbS9pcHNlYy5jOjI4ODp2b2lkIG5zaW1faXBzZWNfdGVhcmRvd24oc3RydWN0IG5ldGRldnNpbSAqbnMpXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vaXBzZWMuYy0yODkte1xuLS1cbmRyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXZzaW0uaD00MTc9dm9pZCBuc2ltX2lwc2VjX2luaXQoc3RydWN0IG5ldGRldnNpbSAqbnMpO1xuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldnNpbS5oOjQxODp2b2lkIG5zaW1faXBzZWNfdGVhcmRvd24oc3RydWN0IG5ldGRldnNpbSAqbnMpO1xuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldnNpbS5oLTQxOS1ib29sIG5zaW1faXBzZWNfdHgoc3RydWN0IG5ldGRldnNpbSAqbnMsIHN0cnVjdCBza19idWZmICpza2IpO1xuLS1cbmRyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXZzaW0uaD00MjE9c3RhdGljIGlubGluZSB2b2lkIG5zaW1faXBzZWNfaW5pdChzdHJ1Y3QgbmV0ZGV2c2ltICpucylcbi0tXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2c2ltLmgtNDI0LVxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldnNpbS5oOjQyNTpzdGF0aWMgaW5saW5lIHZvaWQgbnNpbV9pcHNlY190ZWFyZG93bihzdHJ1Y3QgbmV0ZGV2c2ltICpucylcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXZzaW0uaC00MjYte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNyAxMTo0NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzI5MQoJCQkJCQkJb3V0cHV0OiAyMgoJCQkJCQkJdGhvdWdodHM6IDEzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCBkZWxpdmVyZWQgYXMgYSBmaXJzdC1wZXJzb24gc3VtbWFyeToKCioqRGlnZ2luZyBpbnRvIGBuc2ltX3BzcF91bmluaXRgKioKCkFscmlnaHQsIGxldCYjMzk7cyBnZXQgZG93biB0byBpdC4gVGltZSB0byBwb2tlIGFyb3VuZCBgbnNpbV9wc3BfdW5pbml0YC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGN1cnJlbnQgc3RhdGUuIE15IGd1dCBmZWVsaW5nIGlzIHRoYXQgdGhpcyBkZXNlcnZlcyBhIGNsb3NlciBsb29rLiBJJiMzOTt2ZSBiZWVuIG1lYW5pbmcgdG8gY2hlY2sgdGhpcyBzcGVjaWZpYyBmdW5jdGlvbiBmb3IgYSB3aGlsZSBub3csIGFuZCBub3cgaXMgYSBnb29kIHRpbWUgdG8gZG8gc28uIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgZWRnZSBjYXNlcyBhbmQgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdGllcy4gSSB3YW50IHRvIHBpbnBvaW50IGFueSBwb3RlbnRpYWwgaW5lZmZpY2llbmNpZXMgb3IgdW5mb3Jlc2VlbiBjb25zZXF1ZW5jZXMgb2YgaXRzIGN1cnJlbnQgaW1wbGVtZW50YXRpb24uIFNwZWNpZmljYWxseSwgSSYjMzk7bSBnb2luZyB0byBsb29rIGZvciBhcmVhcyB3aGVyZSBpbml0aWFsaXphdGlvbiBpcyBiZWluZyBza2lwcGVkLCBvciBpbmNvcnJlY3RseSBoYW5kbGVkLiBJJiMzOTttIGVudmlzaW9uaW5nIHNjZW5hcmlvcyB3aGVyZSB1bmluaXRpYWxpemVkIG1lbW9yeSBvciByZXNvdXJjZXMgY291bGQgbGVhZCB0byBpbnN0YWJpbGl0eSBvciBpbmNvcnJlY3QgYmVoYXZpb3IuIEdvdHRhIG1ha2Ugc3VyZSBpdOKAmXMgcm9idXN0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNyAxMTo0NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt2b2lkIG5zaW1fcHNwX3VuaW5pdCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2c2ltLmg9NDQ5PWludCBuc2ltX3BzcF9pbml0KHN0cnVjdCBuZXRkZXZzaW0gKm5zKTtcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXZzaW0uaDo0NTA6dm9pZCBuc2ltX3BzcF91bmluaXQoc3RydWN0IG5ldGRldnNpbSAqbnMpO1xuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldnNpbS5oLTQ1MS12b2lkIG5zaW1fcHNwX2hhbmRsZV9leHQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHNrYl9leHQgKnBzcF9leHQpO1xuLS1cbmRyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXZzaW0uaD00NTY9c3RhdGljIGlubGluZSBpbnQgbnNpbV9wc3BfaW5pdChzdHJ1Y3QgbmV0ZGV2c2ltICpucykgeyByZXR1cm4gMDsgfVxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldnNpbS5oOjQ1NzpzdGF0aWMgaW5saW5lIHZvaWQgbnNpbV9wc3BfdW5pbml0KHN0cnVjdCBuZXRkZXZzaW0gKm5zKSB7fVxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldnNpbS5oLTQ1OC1zdGF0aWMgaW5saW5lIGVudW0gc2tiX2Ryb3BfcmVhc29uXG4tLVxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL3BzcC5jPTIxMz1zdGF0aWMgdm9pZCBfX25zaW1fcHNwX3VuaW5pdChzdHJ1Y3QgbmV0ZGV2c2ltICpucywgYm9vbCB0ZWFyZG93bilcbi0tXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vcHNwLmMtMjI3LVxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL3BzcC5jOjIyODp2b2lkIG5zaW1fcHNwX3VuaW5pdChzdHJ1Y3QgbmV0ZGV2c2ltICpucylcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9wc3AuYy0yMjkte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNyAxMTo0NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzg1OAoJCQkJCQkJb3V0cHV0OiAyNgoJCQkJCQkJdGhvdWdodHM6IDE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzIG9uIHRoaXM6CgoqKkFuYWx5emluZyBgbnNpbV91ZHBfdHVubmVsc19pbmZvX2Rlc3Ryb3lgKioKCkFscmlnaHQsIHRoZSBmaXJzdCB0aGluZyBJJiMzOTttIGRvaW5nIGlzIG1ha2luZyBzdXJlIEkmIzM5O20gemVyb2luZyBpbiBvbiBgbnNpbV91ZHBfdHVubmVsc19pbmZvX2Rlc3Ryb3lgLiBUaGlzIGZ1bmN0aW9uIG5hbWUgaW1tZWRpYXRlbHkgc2NyZWFtcyAmIzM0O2NsZWFudXAmIzM0OyBvciAmIzM0O2Rlc3RydWN0aW9uJiMzNDsgcmVsYXRlZCB0byBVRFAgdHVubmVsIGluZm9ybWF0aW9uIHdpdGhpbiB0aGUgYG5zaW1gIGNvbnRleHQsIHdoaWNoIEkmIzM5O20gYWxyZWFkeSBmYW1pbGlhciB3aXRoLiBNeSBpbml0aWFsIGFzc3VtcHRpb24gaXMgdGhhdCB0aGlzIGlzIHRoZSBmdW5jdGlvbiByZXNwb25zaWJsZSBmb3IgZnJlZWluZyBhbGxvY2F0ZWQgbWVtb3J5IG9yIHJlc291cmNlcyBhc3NvY2lhdGVkIHdpdGggYSBzdHJ1Y3R1cmUgb3IgZGF0YSBzZXQgdGhhdCByZXByZXNlbnRzIFVEUCB0dW5uZWxzLiBUaGUgJiMzNDtpbmZvJiMzNDsgcGFydCBvZiB0aGUgbmFtZSBtYWtlcyBtZSBsZWFuIHRvd2FyZHMgdGhpcyBiZWluZyBhIGhpZ2gtbGV2ZWwgZnVuY3Rpb24gdGhhdCBwcm9iYWJseSBoYW5kbGVzIHRoZSBmcmVlaW5nIG9mIG9uZSBvciBtb3JlIGxvd2VyLWxldmVsIGRhdGEgc3RydWN0dXJlcy4gSSB3YW50IHRvIG1ha2Ugc3VyZSBJIGFtIGxvb2tpbmcgYXQgdGhlIGNvcnJlY3QgZnVuY3Rpb24gYW5kIG5vdCBzb21lIHNpbWlsYXIgdmFyaWF0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNyAxMTo0NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt2b2lkIG5zaW1fdWRwX3R1bm5lbHNfaW5mb19kZXN0cm95JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXZzaW0uaD0xNzM9aW50IG5zaW1fdWRwX3R1bm5lbHNfaW5mb19jcmVhdGUoc3RydWN0IG5zaW1fZGV2ICpuc2ltX2RldixcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXZzaW0uaC0xNzQtXHRcdFx0XHQgc3RydWN0IG5ldF9kZXZpY2UgKmRldik7XG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2c2ltLmg6MTc1OnZvaWQgbnNpbV91ZHBfdHVubmVsc19pbmZvX2Rlc3Ryb3koc3RydWN0IG5ldF9kZXZpY2UgKmRldik7XG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2c2ltLmgtMTc2LVxuLS1cbmRyaXZlcnMvbmV0L25ldGRldnNpbS91ZHBfdHVubmVscy5jPTEyNT1pbnQgbnNpbV91ZHBfdHVubmVsc19pbmZvX2NyZWF0ZShzdHJ1Y3QgbnNpbV9kZXYgKm5zaW1fZGV2LFxuLS1cbmRyaXZlcnMvbmV0L25ldGRldnNpbS91ZHBfdHVubmVscy5jLTE4OC1cbmRyaXZlcnMvbmV0L25ldGRldnNpbS91ZHBfdHVubmVscy5jOjE4OTp2b2lkIG5zaW1fdWRwX3R1bm5lbHNfaW5mb19kZXN0cm95KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vdWRwX3R1bm5lbHMuYy0xOTAte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNyAxMTo0NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDM1MQoJCQkJCQkJb3V0cHV0OiAyMTgKCQkJCQkJCXRob3VnaHRzOiAxMzUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgTW9kaWZpY2F0aW9uKioKCk9rYXksIHNvIHRoaXMgaXMgaW50ZXJlc3RpbmcuIEZyb20gd2hhdCBJJiMzOTttIHNlZWluZywgdGhlc2UgY2hhbmdlcyBhcmUgY2xlYXJseSBmdW5jdGlvbmFsLCBhbmQgcXVpdGUgaW1wb3J0YW50IGFjdHVhbGx5LiBUaGV5JiMzOTtyZSB0b3VjaGluZyB0aGUgdGVhcmRvd24gc2VxdWVuY2UgZm9yIG5ldGRldnNpbSBwb3J0cywgd2hpY2ggaW1tZWRpYXRlbHkgZmxhZ3MgJiMzNDtwb3RlbnRpYWwgZm9yIGZpeGluZyB1c2UtYWZ0ZXItZnJlZSBidWdzJiMzNDsgaW4gZGVidWdmcy4gR2l2ZW4gdGhlIGluaGVyZW50IHJpc2tzIG9mIHRob3NlIHR5cGVzIG9mIG1lbW9yeSBlcnJvcnMsIHRoaXMgaXMgZGVmaW5pdGVseSBzb21ldGhpbmcgd29ydGggcHVyc3VpbmcuIEkmIzM5O20gZ29pbmcgdG8gbWFyayB0aGlzIGFzIGBXb3J0aEZ1enppbmc9dHJ1ZWA7IGl0IGhhcyBhIGhpZ2ggcHJvYmFiaWxpdHkgb2YgZXhwb3Npbmcgc29tZXRoaW5nLgoKTm93LCBsZXQgbWUgc2VlIHdoYXQgY29uZmlndXJhdGlvbnMgYXJlIHJlbGV2YW50LiBUaGUgcHJpbWFyeSBvbmVzIGhlcmUgYXJlIGBORVRERVZTSU1gLCBuYXR1cmFsbHksIHdoaWNoIGlzIHRoZSBjb3JlIG9mIHRoaXMuIEJleW9uZCB0aGF0LCBJIG5lZWQgdG8ga2VlcCBhbiBleWUgb24gYElORVRfRVNQX09GRkxPQURgIGFuZCBgSU5FVF9QU1BgLCBhcyB0aG9zZSBzZWVtIHRvIGJlIGluZGlyZWN0bHkgaW52b2x2ZWQgaW4gdGhlIGFmZmVjdGVkIGFyZWFzLgoKRmluYWxseSwgSSBuZWVkIHRvIG1ha2UgYSBtZW50YWwgbm90ZSBvZiB0aGUgY3JpdGljYWwgc3ltYm9scyB0byBmb2N1cyBteSBhdHRlbnRpb24gb24gZHVyaW5nIGFuYWx5c2lzLiBJIHNlZSBgX19uc2ltX2Rldl9wb3J0X2FkZGAsIGBfX25zaW1fZGV2X3BvcnRfZGVsYCwgYG5zaW1fY3JlYXRlYCwgYG5zaW1fZGVzdHJveWAsIGBuc2ltX2lwc2VjX3RlYXJkb3duYCwgYG5zaW1fcHNwX3VuaW5pdGAsIGFuZCBgbnNpbV91ZHBfdHVubmVsc19pbmZvX2Rlc3Ryb3lgLiBUaG9zZSBhcmUgdGhlIGVudHJ5IHBvaW50cyBhbmQgdGVhcmRvd24gZnVuY3Rpb25zIHRoYXQgYXJlIGxpa2VseSB0aGUga2V5IHRvIHVuZGVyc3RhbmRpbmcgdGhlIGZ1bGwgaW1wYWN0IG9mIHRoZXNlIGNoYW5nZXMuIEkmIzM5O2xsIG1ha2Ugc3VyZSB0byBwcmlvcml0aXplIHRob3NlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNyAxMTo0NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TkVUREVWU0lNJiMzNDssCiAgICAmIzM0O0lORVRfRVNQX09GRkxPQUQmIzM0OywKICAgICYjMzQ7SU5FVF9QU1AmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtfX25zaW1fZGV2X3BvcnRfYWRkJiMzNDssCiAgICAmIzM0O19fbnNpbV9kZXZfcG9ydF9kZWwmIzM0OywKICAgICYjMzQ7bnNpbV9jcmVhdGUmIzM0OywKICAgICYjMzQ7bnNpbV9kZXN0cm95JiMzNDssCiAgICAmIzM0O25zaW1faXBzZWNfdGVhcmRvd24mIzM0OywKICAgICYjMzQ7bnNpbV9wc3BfdW5pbml0JiMzNDssCiAgICAmIzM0O25zaW1fdWRwX3R1bm5lbHNfaW5mb19kZXN0cm95JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSB0ZWFyZG93biBzZXF1ZW5jZSBvZiBuZXRkZXZzaW0gcG9ydHMsIG1vdmluZyB0aGUgZGVzdHJ1Y3Rpb24gb2YgdGhlIG5ldGRldnNpbSBpbnN0YW5jZSAoYG5zaW1fZGVzdHJveWApIGFmdGVyIHRoZSByZWN1cnNpdmUgcmVtb3ZhbCBvZiBpdHMgZGVidWdmcyBkaXJlY3RvcnkuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IGZpeGVzIHBvdGVudGlhbCB1c2UtYWZ0ZXItZnJlZSBpc3N1ZXMgd2hlbiBkZWJ1Z2ZzIGZpbGVzIGFyZSBhY2Nlc3NlZCBjb25jdXJyZW50bHkgd2l0aCBwb3J0IGRlbGV0aW9uLiBGdXp6aW5nIHRoZSBzZXR1cCBhbmQgdGVhcmRvd24gcGF0aHMgb2YgbmV0ZGV2c2ltIHBvcnRzIGlzIGltcG9ydGFudCB0byBlbnN1cmUgdGhlIG5ldyBzZXF1ZW5jZSBpcyBjb3JyZWN0IGFuZCBkb2VzbiYjMzk7dCBpbnRyb2R1Y2UgcmVncmVzc2lvbnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVERFVlNJTSYjMzQ7LAogICAgJiMzNDtJTkVUX0VTUF9PRkZMT0FEJiMzNDssCiAgICAmIzM0O0lORVRfUFNQJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7X19uc2ltX2Rldl9wb3J0X2FkZCYjMzQ7LAogICAgJiMzNDtfX25zaW1fZGV2X3BvcnRfZGVsJiMzNDssCiAgICAmIzM0O25zaW1fY3JlYXRlJiMzNDssCiAgICAmIzM0O25zaW1fZGVzdHJveSYjMzQ7LAogICAgJiMzNDtuc2ltX2lwc2VjX3RlYXJkb3duJiMzNDssCiAgICAmIzM0O25zaW1fcHNwX3VuaW5pdCYjMzQ7LAogICAgJiMzNDtuc2ltX3VkcF90dW5uZWxzX2luZm9fZGVzdHJveSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgdGVhcmRvd24gc2VxdWVuY2Ugb2YgbmV0ZGV2c2ltIHBvcnRzLCBtb3ZpbmcgdGhlIGRlc3RydWN0aW9uIG9mIHRoZSBuZXRkZXZzaW0gaW5zdGFuY2UgKGBuc2ltX2Rlc3Ryb3lgKSBhZnRlciB0aGUgcmVjdXJzaXZlIHJlbW92YWwgb2YgaXRzIGRlYnVnZnMgZGlyZWN0b3J5LiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdGhhdCBmaXhlcyBwb3RlbnRpYWwgdXNlLWFmdGVyLWZyZWUgaXNzdWVzIHdoZW4gZGVidWdmcyBmaWxlcyBhcmUgYWNjZXNzZWQgY29uY3VycmVudGx5IHdpdGggcG9ydCBkZWxldGlvbi4gRnV6emluZyB0aGUgc2V0dXAgYW5kIHRlYXJkb3duIHBhdGhzIG9mIG5ldGRldnNpbSBwb3J0cyBpcyBpbXBvcnRhbnQgdG8gZW5zdXJlIHRoZSBuZXcgc2VxdWVuY2UgaXMgY29ycmVjdCBhbmQgZG9lc24mIzM5O3QgaW50cm9kdWNlIHJlZ3Jlc3Npb25zLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDYtMjdUMTE6Mzg6MTIuMTc2NTU2ODkyWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTM0MDc1NjUyOTk5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5FVERFVlNJTVwiLFxuICAgIFwiSU5FVF9FU1BfT0ZGTE9BRFwiLFxuICAgIFwiSU5FVF9QU1BcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJfX25zaW1fZGV2X3BvcnRfYWRkXCIsXG4gICAgXCJfX25zaW1fZGV2X3BvcnRfZGVsXCIsXG4gICAgXCJuc2ltX2NyZWF0ZVwiLFxuICAgIFwibnNpbV9kZXN0cm95XCIsXG4gICAgXCJuc2ltX2lwc2VjX3RlYXJkb3duXCIsXG4gICAgXCJuc2ltX3BzcF91bmluaXRcIixcbiAgICBcIm5zaW1fdWRwX3R1bm5lbHNfaW5mb19kZXN0cm95XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHRlYXJkb3duIHNlcXVlbmNlIG9mIG5ldGRldnNpbSBwb3J0cywgbW92aW5nIHRoZSBkZXN0cnVjdGlvbiBvZiB0aGUgbmV0ZGV2c2ltIGluc3RhbmNlIChgbnNpbV9kZXN0cm95YCkgYWZ0ZXIgdGhlIHJlY3Vyc2l2ZSByZW1vdmFsIG9mIGl0cyBkZWJ1Z2ZzIGRpcmVjdG9yeS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgZml4ZXMgcG90ZW50aWFsIHVzZS1hZnRlci1mcmVlIGlzc3VlcyB3aGVuIGRlYnVnZnMgZmlsZXMgYXJlIGFjY2Vzc2VkIGNvbmN1cnJlbnRseSB3aXRoIHBvcnQgZGVsZXRpb24uIEZ1enppbmcgdGhlIHNldHVwIGFuZCB0ZWFyZG93biBwYXRocyBvZiBuZXRkZXZzaW0gcG9ydHMgaXMgaW1wb3J0YW50IHRvIGVuc3VyZSB0aGUgbmV3IHNlcXVlbmNlIGlzIGNvcnJlY3QgYW5kIGRvZXNuJ3QgaW50cm9kdWNlIHJlZ3Jlc3Npb25zLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yN1QxMTozODoxMi4xNzY1NjQ0NjJaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMzNTIwNDc1OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGI4ODlhYmI4MzBjZjViZmM0YjBkOGNiZmM5MTkzOWM4NjgxOTU4NTZcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFNhdCBKdW4gMjcgMTE6Mzg6MTEgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2Rldi5jIGIvZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2Rldi5jXFxuaW5kZXggZjAwZmMyZjllYmRlYzcuLjRjMmM5YWExZWE3ZGMxIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L25ldGRldnNpbS9kZXYuY1xcbisrKyBiL2RyaXZlcnMvbmV0L25ldGRldnNpbS9kZXYuY1xcbkBAIC0xNTE2LDE3ICsxNTE2LDE3IEBAIHN0YXRpYyBpbnQgX19uc2ltX2Rldl9wb3J0X2FkZChzdHJ1Y3QgbnNpbV9kZXYgKm5zaW1fZGV2LCBlbnVtIG5zaW1fZGV2X3BvcnRfdHlwXFxuIFxcdFxcdGVyciA9IGRldmxfcmF0ZV9sZWFmX2NyZWF0ZShcXHUwMDI2bnNpbV9kZXZfcG9ydC1cXHUwMDNlZGV2bGlua19wb3J0LFxcbiBcXHRcXHRcXHRcXHRcXHQgICAgbnNpbV9kZXZfcG9ydCwgTlVMTCk7XFxuIFxcdFxcdGlmIChlcnIpXFxuLVxcdFxcdFxcdGdvdG8gZXJyX25zaW1fZGVzdHJveTtcXG4rXFx0XFx0XFx0Z290byBlcnJfcG9ydF9kZWJ1Z2ZzX2V4aXQ7XFxuIFxcdH1cXG4gXFxuIFxcdGxpc3RfYWRkKFxcdTAwMjZuc2ltX2Rldl9wb3J0LVxcdTAwM2VsaXN0LCBcXHUwMDI2bnNpbV9kZXYtXFx1MDAzZXBvcnRfbGlzdCk7XFxuIFxcbiBcXHRyZXR1cm4gMDtcXG4gXFxuLWVycl9uc2ltX2Rlc3Ryb3k6XFxuLVxcdG5zaW1fZGVzdHJveShuc2ltX2Rldl9wb3J0LVxcdTAwM2Vucyk7XFxuIGVycl9wb3J0X2RlYnVnZnNfZXhpdDpcXG4gXFx0bnNpbV9kZXZfcG9ydF9kZWJ1Z2ZzX2V4aXQobnNpbV9kZXZfcG9ydCk7XFxuK1xcdGlmICghSVNfRVJSX09SX05VTEwobnNpbV9kZXZfcG9ydC1cXHUwMDNlbnMpKVxcbitcXHRcXHRuc2ltX2Rlc3Ryb3kobnNpbV9kZXZfcG9ydC1cXHUwMDNlbnMpO1xcbiBlcnJfcG9ydF9yZXNvdXJjZV91bnJlZ2lzdGVyOlxcbiBcXHRpZiAobnNpbV9kZXZfcG9ydF9pc19wZihuc2ltX2Rldl9wb3J0KSlcXG4gXFx0XFx0ZGV2bF9wb3J0X3Jlc291cmNlc191bnJlZ2lzdGVyKGRldmxpbmtfcG9ydCk7XFxuQEAgLTE1NDQsOCArMTU0NCw4IEBAIHN0YXRpYyB2b2lkIF9fbnNpbV9kZXZfcG9ydF9kZWwoc3RydWN0IG5zaW1fZGV2X3BvcnQgKm5zaW1fZGV2X3BvcnQpXFxuIFxcdGxpc3RfZGVsKFxcdTAwMjZuc2ltX2Rldl9wb3J0LVxcdTAwM2VsaXN0KTtcXG4gXFx0aWYgKG5zaW1fZGV2X3BvcnRfaXNfdmYobnNpbV9kZXZfcG9ydCkpXFxuIFxcdFxcdGRldmxfcmF0ZV9sZWFmX2Rlc3Ryb3koXFx1MDAyNm5zaW1fZGV2X3BvcnQtXFx1MDAzZWRldmxpbmtfcG9ydCk7XFxuLVxcdG5zaW1fZGVzdHJveShuc2ltX2Rldl9wb3J0LVxcdTAwM2Vucyk7XFxuIFxcdG5zaW1fZGV2X3BvcnRfZGVidWdmc19leGl0KG5zaW1fZGV2X3BvcnQpO1xcbitcXHRuc2ltX2Rlc3Ryb3kobnNpbV9kZXZfcG9ydC1cXHUwMDNlbnMpO1xcbiBcXHRpZiAobnNpbV9kZXZfcG9ydF9pc19wZihuc2ltX2Rldl9wb3J0KSlcXG4gXFx0XFx0ZGV2bF9wb3J0X3Jlc291cmNlc191bnJlZ2lzdGVyKGRldmxpbmtfcG9ydCk7XFxuIFxcdGRldmxfcG9ydF91bnJlZ2lzdGVyKGRldmxpbmtfcG9ydCk7XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L25ldGRldnNpbS9pcHNlYy5jIGIvZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2lwc2VjLmNcXG5pbmRleCAzNmExYmU0OTIzZDYxZi4uMGJjOWY0MmE1YTM2NWUgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2lwc2VjLmNcXG4rKysgYi9kcml2ZXJzL25ldC9uZXRkZXZzaW0vaXBzZWMuY1xcbkBAIC0yOTIsNSArMjkyLDQgQEAgdm9pZCBuc2ltX2lwc2VjX3RlYXJkb3duKHN0cnVjdCBuZXRkZXZzaW0gKm5zKVxcbiBcXHRpZiAoaXBzZWMtXFx1MDAzZWNvdW50KVxcbiBcXHRcXHRuZXRkZXZfZXJyKG5zLVxcdTAwM2VuZXRkZXYsIFxcXCJ0ZWFyaW5nIGRvd24gSVBzZWMgb2ZmbG9hZCB3aXRoICVkIFNBcyBsZWZ0XFxcXG5cXFwiLFxcbiBcXHRcXHRcXHQgICBpcHNlYy1cXHUwMDNlY291bnQpO1xcbi1cXHRkZWJ1Z2ZzX3JlbW92ZV9yZWN1cnNpdmUoaXBzZWMtXFx1MDAzZXBmaWxlKTtcXG4gfVxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2LmMgYi9kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2LmNcXG5pbmRleCBhNzUwNzY4OTEyYjVhMS4uMjQwMTA3MzY5MzRjOWUgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldi5jXFxuKysrIGIvZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldi5jXFxuQEAgLTExNTQsMTYgKzExNTQsMTcgQEAgc3RydWN0IG5ldGRldnNpbSAqbnNpbV9jcmVhdGUoc3RydWN0IG5zaW1fZGV2ICpuc2ltX2RldixcXG4gXFx0aWYgKGVycilcXG4gXFx0XFx0Z290byBlcnJfZnJlZV9uZXRkZXY7XFxuIFxcbi1cXHRucy1cXHUwMDNlcHBfZGZzID0gZGVidWdmc19jcmVhdGVfZmlsZShcXFwicHBfaG9sZFxcXCIsIDA2MDAsIG5zaW1fZGV2X3BvcnQtXFx1MDAzZWRkaXIsXFxuLVxcdFxcdFxcdFxcdFxcdCBucywgXFx1MDAyNm5zaW1fcHBfaG9sZF9mb3BzKTtcXG4tXFx0bnMtXFx1MDAzZXFyX2RmcyA9IGRlYnVnZnNfY3JlYXRlX2ZpbGUoXFxcInF1ZXVlX3Jlc2V0XFxcIiwgMDIwMCxcXG4tXFx0XFx0XFx0XFx0XFx0IG5zaW1fZGV2X3BvcnQtXFx1MDAzZWRkaXIsIG5zLFxcbi1cXHRcXHRcXHRcXHRcXHQgXFx1MDAyNm5zaW1fcXJlc2V0X2ZvcHMpO1xcbi1cXHRucy1cXHUwMDNldmxhbl9kZnMgPSBkZWJ1Z2ZzX2NyZWF0ZV9maWxlKFxcXCJ2bGFuXFxcIiwgMDQwMCwgbnNpbV9kZXZfcG9ydC1cXHUwMDNlZGRpcixcXG4tXFx0XFx0XFx0XFx0XFx0ICAgbnMsIFxcdTAwMjZuc2ltX3ZsYW5fZm9wcyk7XFxuK1xcdGRlYnVnZnNfY3JlYXRlX2ZpbGUoXFxcInBwX2hvbGRcXFwiLCAwNjAwLCBuc2ltX2Rldl9wb3J0LVxcdTAwM2VkZGlyLCBucyxcXG4rXFx0XFx0XFx0ICAgIFxcdTAwMjZuc2ltX3BwX2hvbGRfZm9wcyk7XFxuK1xcdGRlYnVnZnNfY3JlYXRlX2ZpbGUoXFxcInF1ZXVlX3Jlc2V0XFxcIiwgMDIwMCwgbnNpbV9kZXZfcG9ydC1cXHUwMDNlZGRpciwgbnMsXFxuK1xcdFxcdFxcdCAgICBcXHUwMDI2bnNpbV9xcmVzZXRfZm9wcyk7XFxuK1xcdGRlYnVnZnNfY3JlYXRlX2ZpbGUoXFxcInZsYW5cXFwiLCAwNDAwLCBuc2ltX2Rldl9wb3J0LVxcdTAwM2VkZGlyLCBucyxcXG4rXFx0XFx0XFx0ICAgIFxcdTAwMjZuc2ltX3ZsYW5fZm9wcyk7XFxuIFxcdHJldHVybiBucztcXG4gXFxuIGVycl9mcmVlX25ldGRldjpcXG4rXFx0ZGVidWdmc19yZW1vdmVfcmVjdXJzaXZlKG5zaW1fZGV2X3BvcnQtXFx1MDAzZWRkaXIpO1xcbitcXHRuc2ltX2Rldl9wb3J0LVxcdTAwM2VkZGlyID0gTlVMTDtcXG4gXFx0ZnJlZV9uZXRkZXYoZGV2KTtcXG4gXFx0cmV0dXJuIEVSUl9QVFIoZXJyKTtcXG4gfVxcbkBAIC0xMTc0LDEwICsxMTc1LDYgQEAgdm9pZCBuc2ltX2Rlc3Ryb3koc3RydWN0IG5ldGRldnNpbSAqbnMpXFxuIFxcdHN0cnVjdCBuZXRkZXZzaW0gKnBlZXI7XFxuIFxcdHUxNiB2aWQ7XFxuIFxcbi1cXHRkZWJ1Z2ZzX3JlbW92ZShucy1cXHUwMDNldmxhbl9kZnMpO1xcbi1cXHRkZWJ1Z2ZzX3JlbW92ZShucy1cXHUwMDNlcXJfZGZzKTtcXG4tXFx0ZGVidWdmc19yZW1vdmUobnMtXFx1MDAzZXBwX2Rmcyk7XFxuLVxcbiBcXHRpZiAobnMtXFx1MDAzZW5iLm5vdGlmaWVyX2NhbGwpXFxuIFxcdFxcdHVucmVnaXN0ZXJfbmV0ZGV2aWNlX25vdGlmaWVyX2Rldl9uZXQobnMtXFx1MDAzZW5ldGRldiwgXFx1MDAyNm5zLVxcdTAwM2VuYixcXG4gXFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgXFx1MDAyNm5zLVxcdTAwM2Vubik7XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXZzaW0uaCBiL2RyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXZzaW0uaFxcbmluZGV4IGQ5MDljNDE2MGVhMWZlLi4yOWNiZjAwNGEzNzE5NSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2c2ltLmhcXG4rKysgYi9kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2c2ltLmhcXG5AQCAtMTUzLDkgKzE1Myw2IEBAIHN0cnVjdCBuZXRkZXZzaW0ge1xcbiBcXHR9IHVkcF9wb3J0cztcXG4gXFxuIFxcdHN0cnVjdCBwYWdlICpwYWdlO1xcbi1cXHRzdHJ1Y3QgZGVudHJ5ICpwcF9kZnM7XFxuLVxcdHN0cnVjdCBkZW50cnkgKnFyX2RmcztcXG4tXFx0c3RydWN0IGRlbnRyeSAqdmxhbl9kZnM7XFxuIFxcbiBcXHRzdHJ1Y3QgbnNpbV9ldGh0b29sIGV0aHRvb2w7XFxuIFxcdHN0cnVjdCBuZXRkZXZzaW0gX19yY3UgKnBlZXI7XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L25ldGRldnNpbS9wc3AuYyBiL2RyaXZlcnMvbmV0L25ldGRldnNpbS9wc3AuY1xcbmluZGV4IDY5MzZlY2I4MTczZTIwLi4yZjI3YTIxMTQ5MTJjNyAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9uZXRkZXZzaW0vcHNwLmNcXG4rKysgYi9kcml2ZXJzL25ldC9uZXRkZXZzaW0vcHNwLmNcXG5AQCAtMjI3LDcgKzIyNyw2IEBAIHN0YXRpYyB2b2lkIF9fbnNpbV9wc3BfdW5pbml0KHN0cnVjdCBuZXRkZXZzaW0gKm5zLCBib29sIHRlYXJkb3duKVxcbiBcXG4gdm9pZCBuc2ltX3BzcF91bmluaXQoc3RydWN0IG5ldGRldnNpbSAqbnMpXFxuIHtcXG4tXFx0ZGVidWdmc19yZW1vdmUobnMtXFx1MDAzZXBzcC5yZXJlZyk7XFxuIFxcdG11dGV4X2Rlc3Ryb3koXFx1MDAyNm5zLVxcdTAwM2Vwc3AucmVyZWdfbG9jayk7XFxuIFxcdF9fbnNpbV9wc3BfdW5pbml0KG5zLCB0cnVlKTtcXG4gfVxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9uZXRkZXZzaW0vdWRwX3R1bm5lbHMuYyBiL2RyaXZlcnMvbmV0L25ldGRldnNpbS91ZHBfdHVubmVscy5jXFxuaW5kZXggODlmZmY3NmU1MWNmNjQuLmE2OWIxNWYxMjhhYTFkIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L25ldGRldnNpbS91ZHBfdHVubmVscy5jXFxuKysrIGIvZHJpdmVycy9uZXQvbmV0ZGV2c2ltL3VkcF90dW5uZWxzLmNcXG5AQCAtMTg4LDkgKzE4OCw2IEBAIGludCBuc2ltX3VkcF90dW5uZWxzX2luZm9fY3JlYXRlKHN0cnVjdCBuc2ltX2RldiAqbnNpbV9kZXYsXFxuIFxcbiB2b2lkIG5zaW1fdWRwX3R1bm5lbHNfaW5mb19kZXN0cm95KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuIHtcXG4tXFx0c3RydWN0IG5ldGRldnNpbSAqbnMgPSBuZXRkZXZfcHJpdihkZXYpO1xcbi1cXG4tXFx0ZGVidWdmc19yZW1vdmVfcmVjdXJzaXZlKG5zLVxcdTAwM2V1ZHBfcG9ydHMuZGRpcik7XFxuIFxcdGtmcmVlKGRldi1cXHUwMDNldWRwX3R1bm5lbF9uaWNfaW5mbyk7XFxuIFxcdGRldi1cXHUwMDNldWRwX3R1bm5lbF9uaWNfaW5mbyA9IE5VTEw7XFxuIH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjdUMTE6Mzg6MTIuNTEyNTE3ODExWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MzM3Mzk2ODA5MDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkVUREVWU0lNXCIsXG4gICAgXCJJTkVUX0VTUF9PRkZMT0FEXCIsXG4gICAgXCJJTkVUX1BTUFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIl9fbnNpbV9kZXZfcG9ydF9hZGRcIixcbiAgICBcIl9fbnNpbV9kZXZfcG9ydF9kZWxcIixcbiAgICBcIm5zaW1fY3JlYXRlXCIsXG4gICAgXCJuc2ltX2Rlc3Ryb3lcIixcbiAgICBcIm5zaW1faXBzZWNfdGVhcmRvd25cIixcbiAgICBcIm5zaW1fcHNwX3VuaW5pdFwiLFxuICAgIFwibnNpbV91ZHBfdHVubmVsc19pbmZvX2Rlc3Ryb3lcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgdGVhcmRvd24gc2VxdWVuY2Ugb2YgbmV0ZGV2c2ltIHBvcnRzLCBtb3ZpbmcgdGhlIGRlc3RydWN0aW9uIG9mIHRoZSBuZXRkZXZzaW0gaW5zdGFuY2UgKGBuc2ltX2Rlc3Ryb3lgKSBhZnRlciB0aGUgcmVjdXJzaXZlIHJlbW92YWwgb2YgaXRzIGRlYnVnZnMgZGlyZWN0b3J5LiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdGhhdCBmaXhlcyBwb3RlbnRpYWwgdXNlLWFmdGVyLWZyZWUgaXNzdWVzIHdoZW4gZGVidWdmcyBmaWxlcyBhcmUgYWNjZXNzZWQgY29uY3VycmVudGx5IHdpdGggcG9ydCBkZWxldGlvbi4gRnV6emluZyB0aGUgc2V0dXAgYW5kIHRlYXJkb3duIHBhdGhzIG9mIG5ldGRldnNpbSBwb3J0cyBpcyBpbXBvcnRhbnQgdG8gZW5zdXJlIHRoZSBuZXcgc2VxdWVuY2UgaXMgY29ycmVjdCBhbmQgZG9lc24ndCBpbnRyb2R1Y2UgcmVncmVzc2lvbnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXRcbiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSxcbiAgIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgYjg4OWFiYjgzMGNmNWJmYzRiMGQ4Y2JmYzkxOTM5Yzg2ODE5NTg1NlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTYXQgSnVuIDI3IDExOjM4OjExIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2Rldi5jIGIvZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2Rldi5jXG5pbmRleCBmMDBmYzJmOWViZGVjNy4uNGMyYzlhYTFlYTdkYzEgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9uZXRkZXZzaW0vZGV2LmNcbisrKyBiL2RyaXZlcnMvbmV0L25ldGRldnNpbS9kZXYuY1xuQEAgLTE1MTYsMTcgKzE1MTYsMTcgQEAgc3RhdGljIGludCBfX25zaW1fZGV2X3BvcnRfYWRkKHN0cnVjdCBuc2ltX2RldiAqbnNpbV9kZXYsIGVudW0gbnNpbV9kZXZfcG9ydF90eXBcbiBcdFx0ZXJyID0gZGV2bF9yYXRlX2xlYWZfY3JlYXRlKFx1MDAyNm5zaW1fZGV2X3BvcnQtXHUwMDNlZGV2bGlua19wb3J0LFxuIFx0XHRcdFx0XHQgICAgbnNpbV9kZXZfcG9ydCwgTlVMTCk7XG4gXHRcdGlmIChlcnIpXG4tXHRcdFx0Z290byBlcnJfbnNpbV9kZXN0cm95O1xuK1x0XHRcdGdvdG8gZXJyX3BvcnRfZGVidWdmc19leGl0O1xuIFx0fVxuIFxuIFx0bGlzdF9hZGQoXHUwMDI2bnNpbV9kZXZfcG9ydC1cdTAwM2VsaXN0LCBcdTAwMjZuc2ltX2Rldi1cdTAwM2Vwb3J0X2xpc3QpO1xuIFxuIFx0cmV0dXJuIDA7XG4gXG4tZXJyX25zaW1fZGVzdHJveTpcbi1cdG5zaW1fZGVzdHJveShuc2ltX2Rldl9wb3J0LVx1MDAzZW5zKTtcbiBlcnJfcG9ydF9kZWJ1Z2ZzX2V4aXQ6XG4gXHRuc2ltX2Rldl9wb3J0X2RlYnVnZnNfZXhpdChuc2ltX2Rldl9wb3J0KTtcbitcdGlmICghSVNfRVJSX09SX05VTEwobnNpbV9kZXZfcG9ydC1cdTAwM2VucykpXG4rXHRcdG5zaW1fZGVzdHJveShuc2ltX2Rldl9wb3J0LVx1MDAzZW5zKTtcbiBlcnJfcG9ydF9yZXNvdXJjZV91bnJlZ2lzdGVyOlxuIFx0aWYgKG5zaW1fZGV2X3BvcnRfaXNfcGYobnNpbV9kZXZfcG9ydCkpXG4gXHRcdGRldmxfcG9ydF9yZXNvdXJjZXNfdW5yZWdpc3RlcihkZXZsaW5rX3BvcnQpO1xuQEAgLTE1NDQsOCArMTU0NCw4IEBAIHN0YXRpYyB2b2lkIF9fbnNpbV9kZXZfcG9ydF9kZWwoc3RydWN0IG5zaW1fZGV2X3BvcnQgKm5zaW1fZGV2X3BvcnQpXG4gXHRsaXN0X2RlbChcdTAwMjZuc2ltX2Rldl9wb3J0LVx1MDAzZWxpc3QpO1xuIFx0aWYgKG5zaW1fZGV2X3BvcnRfaXNfdmYobnNpbV9kZXZfcG9ydCkpXG4gXHRcdGRldmxfcmF0ZV9sZWFmX2Rlc3Ryb3koXHUwMDI2bnNpbV9kZXZfcG9ydC1cdTAwM2VkZXZsaW5rX3BvcnQpO1xuLVx0bnNpbV9kZXN0cm95KG5zaW1fZGV2X3BvcnQtXHUwMDNlbnMpO1xuIFx0bnNpbV9kZXZfcG9ydF9kZWJ1Z2ZzX2V4aXQobnNpbV9kZXZfcG9ydCk7XG4rXHRuc2ltX2Rlc3Ryb3kobnNpbV9kZXZfcG9ydC1cdTAwM2Vucyk7XG4gXHRpZiAobnNpbV9kZXZfcG9ydF9pc19wZihuc2ltX2Rldl9wb3J0KSlcbiBcdFx0ZGV2bF9wb3J0X3Jlc291cmNlc191bnJlZ2lzdGVyKGRldmxpbmtfcG9ydCk7XG4gXHRkZXZsX3BvcnRfdW5yZWdpc3RlcihkZXZsaW5rX3BvcnQpO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L25ldGRldnNpbS9pcHNlYy5jIGIvZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2lwc2VjLmNcbmluZGV4IDM2YTFiZTQ5MjNkNjFmLi4wYmM5ZjQyYTVhMzY1ZSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L25ldGRldnNpbS9pcHNlYy5jXG4rKysgYi9kcml2ZXJzL25ldC9uZXRkZXZzaW0vaXBzZWMuY1xuQEAgLTI5Miw1ICsyOTIsNCBAQCB2b2lkIG5zaW1faXBzZWNfdGVhcmRvd24oc3RydWN0IG5ldGRldnNpbSAqbnMpXG4gXHRpZiAoaXBzZWMtXHUwMDNlY291bnQpXG4gXHRcdG5ldGRldl9lcnIobnMtXHUwMDNlbmV0ZGV2LCBcInRlYXJpbmcgZG93biBJUHNlYyBvZmZsb2FkIHdpdGggJWQgU0FzIGxlZnRcXG5cIixcbiBcdFx0XHQgICBpcHNlYy1cdTAwM2Vjb3VudCk7XG4tXHRkZWJ1Z2ZzX3JlbW92ZV9yZWN1cnNpdmUoaXBzZWMtXHUwMDNlcGZpbGUpO1xuIH1cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2LmMgYi9kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2LmNcbmluZGV4IGE3NTA3Njg5MTJiNWExLi4yNDAxMDczNjkzNGM5ZSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXYuY1xuKysrIGIvZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldi5jXG5AQCAtMTE1NCwxNiArMTE1NCwxNyBAQCBzdHJ1Y3QgbmV0ZGV2c2ltICpuc2ltX2NyZWF0ZShzdHJ1Y3QgbnNpbV9kZXYgKm5zaW1fZGV2LFxuIFx0aWYgKGVycilcbiBcdFx0Z290byBlcnJfZnJlZV9uZXRkZXY7XG4gXG4tXHRucy1cdTAwM2VwcF9kZnMgPSBkZWJ1Z2ZzX2NyZWF0ZV9maWxlKFwicHBfaG9sZFwiLCAwNjAwLCBuc2ltX2Rldl9wb3J0LVx1MDAzZWRkaXIsXG4tXHRcdFx0XHRcdCBucywgXHUwMDI2bnNpbV9wcF9ob2xkX2ZvcHMpO1xuLVx0bnMtXHUwMDNlcXJfZGZzID0gZGVidWdmc19jcmVhdGVfZmlsZShcInF1ZXVlX3Jlc2V0XCIsIDAyMDAsXG4tXHRcdFx0XHRcdCBuc2ltX2Rldl9wb3J0LVx1MDAzZWRkaXIsIG5zLFxuLVx0XHRcdFx0XHQgXHUwMDI2bnNpbV9xcmVzZXRfZm9wcyk7XG4tXHRucy1cdTAwM2V2bGFuX2RmcyA9IGRlYnVnZnNfY3JlYXRlX2ZpbGUoXCJ2bGFuXCIsIDA0MDAsIG5zaW1fZGV2X3BvcnQtXHUwMDNlZGRpcixcbi1cdFx0XHRcdFx0ICAgbnMsIFx1MDAyNm5zaW1fdmxhbl9mb3BzKTtcbitcdGRlYnVnZnNfY3JlYXRlX2ZpbGUoXCJwcF9ob2xkXCIsIDA2MDAsIG5zaW1fZGV2X3BvcnQtXHUwMDNlZGRpciwgbnMsXG4rXHRcdFx0ICAgIFx1MDAyNm5zaW1fcHBfaG9sZF9mb3BzKTtcbitcdGRlYnVnZnNfY3JlYXRlX2ZpbGUoXCJxdWV1ZV9yZXNldFwiLCAwMjAwLCBuc2ltX2Rldl9wb3J0LVx1MDAzZWRkaXIsIG5zLFxuK1x0XHRcdCAgICBcdTAwMjZuc2ltX3FyZXNldF9mb3BzKTtcbitcdGRlYnVnZnNfY3JlYXRlX2ZpbGUoXCJ2bGFuXCIsIDA0MDAsIG5zaW1fZGV2X3BvcnQtXHUwMDNlZGRpciwgbnMsXG4rXHRcdFx0ICAgIFx1MDAyNm5zaW1fdmxhbl9mb3BzKTtcbiBcdHJldHVybiBucztcbiBcbiBlcnJfZnJlZV9uZXRkZXY6XG4rXHRkZWJ1Z2ZzX3JlbW92ZV9yZWN1cnNpdmUobnNpbV9kZXZfcG9ydC1cdTAwM2VkZGlyKTtcbitcdG5zaW1fZGV2X3BvcnQtXHUwMDNlZGRpciA9IE5VTEw7XG4gXHRmcmVlX25ldGRldihkZXYpO1xuIFx0cmV0dXJuIEVSUl9QVFIoZXJyKTtcbiB9XG5AQCAtMTE3NCwxMCArMTE3NSw2IEBAIHZvaWQgbnNpbV9kZXN0cm95KHN0cnVjdCBuZXRkZXZzaW0gKm5zKVxuIFx0c3RydWN0IG5ldGRldnNpbSAqcGVlcjtcbiBcdHUxNiB2aWQ7XG4gXG4tXHRkZWJ1Z2ZzX3JlbW92ZShucy1cdTAwM2V2bGFuX2Rmcyk7XG4tXHRkZWJ1Z2ZzX3JlbW92ZShucy1cdTAwM2Vxcl9kZnMpO1xuLVx0ZGVidWdmc19yZW1vdmUobnMtXHUwMDNlcHBfZGZzKTtcbi1cbiBcdGlmIChucy1cdTAwM2VuYi5ub3RpZmllcl9jYWxsKVxuIFx0XHR1bnJlZ2lzdGVyX25ldGRldmljZV9ub3RpZmllcl9kZXZfbmV0KG5zLVx1MDAzZW5ldGRldiwgXHUwMDI2bnMtXHUwMDNlbmIsXG4gXHRcdFx0XHRcdFx0ICAgICAgXHUwMDI2bnMtXHUwMDNlbm4pO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXZzaW0uaCBiL2RyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXZzaW0uaFxuaW5kZXggZDkwOWM0MTYwZWExZmUuLjI5Y2JmMDA0YTM3MTk1IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldnNpbS5oXG4rKysgYi9kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2c2ltLmhcbkBAIC0xNTMsOSArMTUzLDYgQEAgc3RydWN0IG5ldGRldnNpbSB7XG4gXHR9IHVkcF9wb3J0cztcbiBcbiBcdHN0cnVjdCBwYWdlICpwYWdlO1xuLVx0c3RydWN0IGRlbnRyeSAqcHBfZGZzO1xuLVx0c3RydWN0IGRlbnRyeSAqcXJfZGZzO1xuLVx0c3RydWN0IGRlbnRyeSAqdmxhbl9kZnM7XG4gXG4gXHRzdHJ1Y3QgbnNpbV9ldGh0b29sIGV0aHRvb2w7XG4gXHRzdHJ1Y3QgbmV0ZGV2c2ltIF9fcmN1ICpwZWVyO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L25ldGRldnNpbS9wc3AuYyBiL2RyaXZlcnMvbmV0L25ldGRldnNpbS9wc3AuY1xuaW5kZXggNjkzNmVjYjgxNzNlMjAuLjJmMjdhMjExNDkxMmM3IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvbmV0ZGV2c2ltL3BzcC5jXG4rKysgYi9kcml2ZXJzL25ldC9uZXRkZXZzaW0vcHNwLmNcbkBAIC0yMjcsNyArMjI3LDYgQEAgc3RhdGljIHZvaWQgX19uc2ltX3BzcF91bmluaXQoc3RydWN0IG5ldGRldnNpbSAqbnMsIGJvb2wgdGVhcmRvd24pXG4gXG4gdm9pZCBuc2ltX3BzcF91bmluaXQoc3RydWN0IG5ldGRldnNpbSAqbnMpXG4ge1xuLVx0ZGVidWdmc19yZW1vdmUobnMtXHUwMDNlcHNwLnJlcmVnKTtcbiBcdG11dGV4X2Rlc3Ryb3koXHUwMDI2bnMtXHUwMDNlcHNwLnJlcmVnX2xvY2spO1xuIFx0X19uc2ltX3BzcF91bmluaXQobnMsIHRydWUpO1xuIH1cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9uZXRkZXZzaW0vdWRwX3R1bm5lbHMuYyBiL2RyaXZlcnMvbmV0L25ldGRldnNpbS91ZHBfdHVubmVscy5jXG5pbmRleCA4OWZmZjc2ZTUxY2Y2NC4uYTY5YjE1ZjEyOGFhMWQgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9uZXRkZXZzaW0vdWRwX3R1bm5lbHMuY1xuKysrIGIvZHJpdmVycy9uZXQvbmV0ZGV2c2ltL3VkcF90dW5uZWxzLmNcbkBAIC0xODgsOSArMTg4LDYgQEAgaW50IG5zaW1fdWRwX3R1bm5lbHNfaW5mb19jcmVhdGUoc3RydWN0IG5zaW1fZGV2ICpuc2ltX2RldixcbiBcbiB2b2lkIG5zaW1fdWRwX3R1bm5lbHNfaW5mb19kZXN0cm95KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4ge1xuLVx0c3RydWN0IG5ldGRldnNpbSAqbnMgPSBuZXRkZXZfcHJpdihkZXYpO1xuLVxuLVx0ZGVidWdmc19yZW1vdmVfcmVjdXJzaXZlKG5zLVx1MDAzZXVkcF9wb3J0cy5kZGlyKTtcbiBcdGtmcmVlKGRldi1cdTAwM2V1ZHBfdHVubmVsX25pY19pbmZvKTtcbiBcdGRldi1cdTAwM2V1ZHBfdHVubmVsX25pY19pbmZvID0gTlVMTDtcbiB9XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yN1QxMTozODoxMi41MTI1MjAyMzFaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NTUyNjY1NjU4NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBEZWJ1Z2ZzIENsZWFudXAgUGF0Y2ggaW4gbmV0ZGV2c2ltKipcblxuT2theSwgc28gSSd2ZSBnb3QgdGhpcyBwYXRjaCBhZmZlY3RpbmcgYGRyaXZlcnMvbmV0L25ldGRldnNpbS9gLCB0b3VjaGluZyBgZGV2LmNgLCBgaXBzZWMuY2AsIGBuZXRkZXYuY2AsIGBuZXRkZXZzaW0uaGAsIGBwc3AuY2AsIGFuZCBgdWRwX3R1bm5lbHMuY2AuIFRoZSBjaGFuZ2VzIGFyZSBjbGVhcmx5IGNlbnRlcmVkIGFyb3VuZCBjbGVhbmluZyB1cCB0aGUgZGVidWdmcyBlbnRyaWVzLiBMZXQncyBkaWcgaW4uXG5cbkluIGBkZXYuY2AsIHRoZXJlJ3MgYSBtb2RpZmljYXRpb24gdG8gaG93IGBuc2ltX2Rlc3Ryb3lgIGlzIGNhbGxlZCB3aXRoaW4gdGhlIGVycm9yIGhhbmRsaW5nIHBhdGhzLiAgSXQgbG9va3MgbGlrZSB0aGVyZSdzIGEgcG90ZW50aWFsIGlzc3VlIHdoZXJlIGBuc2ltX2Rlc3Ryb3lgIHdhcyBiZWluZyBjYWxsZWQgKmJlZm9yZSogYG5zaW1fZGV2X3BvcnRfZGVidWdmc19leGl0YCwgYW5kIG5vdyBpdCdzIGJlaW5nIGNhbGxlZCAqYWZ0ZXIqLiAgQSBzaW1pbGFyIGNoYW5nZSBhcHBlYXJzIGluIGBfX25zaW1fZGV2X3BvcnRfZGVsYC4gVGhlIGNyaXRpY2FsIGNoYW5nZSBhcHBlYXJzIHRvIGJlIHRoYXQgdGhlIGRlYnVnZnMgZXhpdCBpcyBub3cgKmJlZm9yZSogdGhlIGBuc2ltX2Rlc3Ryb3lgIGNhbGwgaW4gYm90aCBsb2NhdGlvbnMuIFRoaXMgc3VnZ2VzdHMgYSBjYXJlZnVsIHJlLW9yZGVyaW5nLlxuXG5UaGVuLCB0aGVyZSdzIGEgcmVtb3ZhbCBvZiBgZGVidWdmc19yZW1vdmVfcmVjdXJzaXZlYCBjYWxscyBpbiBgaXBzZWMuY2AgYW5kIGluIGB1ZHBfdHVubmVscy5jYCwgaW1wbHlpbmcgdGhlIHJlbW92YWwgb2YgZGVidWdmcyBlbnRyaWVzIGlzIGhhbmRsZWQgZGlmZmVyZW50bHkgbm93LiBMaWtld2lzZSwgaW4gYG5ldGRldi5jYCB0aGUgYGRlYnVnZnNfY3JlYXRlX2ZpbGVgIGNhbGxzIGZvciBgcHBfaG9sZGAsIGBxdWV1ZV9yZXNldGAsIGFuZCBgdmxhbmAgYXJlIHNpbXBsaWZpZWQuICBGaW5hbGx5LCBgbnNpbV9kZXN0cm95YCBnZXRzIHNvbWUgZGVidWdnaW5nIHJlbW92ZSBjYWxscyB0b286IGB2bGFuX2Rmc2AsIGBxcl9kZnNgLCBhbmQgYHBwX2Rmc2AuIFRoaXMgc2VlbXMgbGlrZSBhIGNvbnNpc3RlbnQgcGF0dGVybi5cblxuQWhhISAgSSBzZWUgdGhlIHBhdHRlcm4gbm93LiBCeSBtb3ZpbmcgdGhlIGBuc2ltX2Rlc3Ryb3lgIGNhbGwgKmFmdGVyKiBgbnNpbV9kZXZfcG9ydF9kZWJ1Z2ZzX2V4aXRgLCB0aGUgcmVtb3ZhbCBvZiBgbnNpbV9kZXZfcG9ydC1cdTAwM2VkZGlyYCBhdXRvbWF0aWNhbGx5IHJlbW92ZXMgYWxsIGRlYnVnZnMgZmlsZXMgY3JlYXRlZCB1bmRlciB0aGF0IGRpcmVjdG9yeS4gVGhlIHByZXZpb3VzIGNvZGUgd2FzIGV4cGxpY2l0bHkgcmVtb3ZpbmcgaW5kaXZpZHVhbCBmaWxlcy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBiZWNhdXNlIGl0IGNoYW5nZXMgdGhlIG9yZGVyIG9mIG9wZXJhdGlvbnMuIFdoYXQgd2FzIHRoZSAqaW50ZW50KiBvZiB0aGlzIGNoYW5nZT9cblxuTm93IHRoZSBxdWVzdGlvbiBpcywgKndoeSogdGhpcyBjaGFuZ2U/IElzIHRoaXMganVzdCB0aWR5aW5nIHVwIHRoZSBjb2RlLCBvciBhcmUgd2UgYWRkcmVzc2luZyBhIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbiBvciBidWc/IFdhcyB0aGVyZSBhIGNoYW5jZSB0aGVzZSBkZWJ1Z2ZzIGZpbGVzIHdlcmUgYmVpbmcgYWNjZXNzZWQgKmFmdGVyKiB0aGV5IHdlcmUgcmVtb3ZlZCB1bmRlciB0aGUgb2xkIGltcGxlbWVudGF0aW9uPyBJIHNob3VsZCByZXZpZXcgdGhlIGBuc2ltX2Rldl9wb3J0X2RlYnVnZnNfZXhpdGAgZnVuY3Rpb24gdG8gYmUgc3VyZS4gSXQgY291bGQgYmUgd29ydGggZnV6emluZyB0aGlzLCB0byBzZWUgaWYgYW55dGhpbmcgZ2V0cyBjYXVnaHQuIE15IGd1dCBzYXlzIHRoaXMgaXMgYSBzdWJ0bGUgYnVnIGZpeCwgb3IgYXQgbGVhc3QgYSBjbGVhbmVyIGltcGxlbWVudGF0aW9uLiBUaW1lIHRvIGNoZWNrIGBuc2ltX2Rldl9wb3J0X2RlYnVnZnNfZXhpdGAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM3NjQsIk91dHB1dFRva2VucyI6MjUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4NzUsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yN1QxMTozODo1OC4wMzkxNzk2ODZaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjA5NDczNTQwNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuc2ltX2Rldl9wb3J0X2RlYnVnZnNfZXhpdFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9uZXRkZXZzaW0vZGV2LmM9NDA3PXN0YXRpYyBpbnQgbnNpbV9kZXZfcG9ydF9kZWJ1Z2ZzX2luaXQoc3RydWN0IG5zaW1fZGV2ICpuc2ltX2RldixcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9kZXYuYy00NDEtXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2Rldi5jOjQ0MjpzdGF0aWMgdm9pZCBuc2ltX2Rldl9wb3J0X2RlYnVnZnNfZXhpdChzdHJ1Y3QgbnNpbV9kZXZfcG9ydCAqbnNpbV9kZXZfcG9ydClcXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vZGV2LmMtNDQzLXtcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9kZXYuYz0xNDU1PXN0YXRpYyBpbnQgX19uc2ltX2Rldl9wb3J0X2FkZChzdHJ1Y3QgbnNpbV9kZXYgKm5zaW1fZGV2LCBlbnVtIG5zaW1fZGV2X3BvcnRfdHlwZSB0eXBlLFxcbi0tXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2Rldi5jLTE1MjYtZXJyX3BvcnRfZGVidWdmc19leGl0OlxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9kZXYuYzoxNTI3OlxcdG5zaW1fZGV2X3BvcnRfZGVidWdmc19leGl0KG5zaW1fZGV2X3BvcnQpO1xcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9kZXYuYy0xNTI4LVxcdGlmICghSVNfRVJSX09SX05VTEwobnNpbV9kZXZfcG9ydC1cXHUwMDNlbnMpKVxcbi0tXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2Rldi5jPTE1NDA9c3RhdGljIHZvaWQgX19uc2ltX2Rldl9wb3J0X2RlbChzdHJ1Y3QgbnNpbV9kZXZfcG9ydCAqbnNpbV9kZXZfcG9ydClcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9kZXYuYy0xNTQ2LVxcdFxcdGRldmxfcmF0ZV9sZWFmX2Rlc3Ryb3koXFx1MDAyNm5zaW1fZGV2X3BvcnQtXFx1MDAzZWRldmxpbmtfcG9ydCk7XFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2Rldi5jOjE1NDc6XFx0bnNpbV9kZXZfcG9ydF9kZWJ1Z2ZzX2V4aXQobnNpbV9kZXZfcG9ydCk7XFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2Rldi5jLTE1NDgtXFx0bnNpbV9kZXN0cm95KG5zaW1fZGV2X3BvcnQtXFx1MDAzZW5zKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjdUMTE6Mzk6MDAuMTMzOTI4NzIzWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTU4NDMxMjU1MzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgYXNzdW1pbmcgSSdtIGFuIGV4cGVydCBpbiBkZWJ1Z2dpbmcgYW5kIGtlcm5lbC1sZXZlbCBkZXZpY2UgZHJpdmVyIGludGVyYWN0aW9ucy5cblxuKipuc2ltX2Rldl9wb3J0X2RlYnVnZnNfZXhpdDogQSBEZWVwIERpdmUqKlxuXG5BbHJpZ2h0LCBgbnNpbV9kZXZfcG9ydF9kZWJ1Z2ZzX2V4aXRgLiBUaGF0IGZ1bmN0aW9uIG5hbWUgaW1tZWRpYXRlbHkgc2NyZWFtcyBhIGZldyB0aGluZ3MgdG8gbWUuIEZpcnN0LCBcIm5zaW1cIiBzdWdnZXN0cyB0aGlzIGlzIHJlbGF0ZWQgdG8gYSBuZXR3b3JrIHNpbXVsYXRvciwgbGlrZWx5IHVzZWQgZm9yIHRlc3RpbmcgYW5kIGRldmVsb3BtZW50LiBcImRldl9wb3J0XCIgaGludHMgYXQgYSBkZXZpY2UgcG9ydCBhYnN0cmFjdGlvbiwgYSBsaWtlbHkgcG9pbnQgb2YgaW50ZXJhY3Rpb24gb3IgY29uZmlndXJhdGlvbi4gQW5kIFwiZGVidWdmc1wiIGlzIHRoZSBraWNrZXIg4oCTIHdlJ3JlIGRlYWxpbmcgd2l0aCBzb21ldGhpbmcgcmVsYXRlZCB0byBkZWJ1Z2ZzLCB0aGUga2VybmVsJ3MgZGVidWdnaW5nIGZpbGVzeXN0ZW0uXG5cbk15IGluaXRpYWwgdGhvdWdodCBpcywgdGhpcyBmdW5jdGlvbiBpcyByZXNwb25zaWJsZSBmb3IgdGhlIGNsZWFudXAgb3IgdGVhcmRvd24gcHJvY2VkdXJlIGFzc29jaWF0ZWQgd2l0aCB0aGUgc2ltdWxhdGVkIGRldmljZSBwb3J0IGFuZCBpdHMgZGVidWcgaW50ZXJmYWNlIHdpdGhpbiB0aGUgbmV0d29yayBzaW11bGF0aW9uIGVudmlyb25tZW50LiBJ4oCZbSBwaWN0dXJpbmcgYSBzaXR1YXRpb24gd2hlcmUgdGhlIHNpbXVsYXRvciBoYXMgYmVlbiBjb25maWd1cmVkLCBhIHZpcnR1YWwgbmV0d29yayBpbnRlcmZhY2UgbWlnaHQgYmUgdXAsIGFuZCBub3csIHdlJ3JlIGV4aXRpbmcsIHdoZXRoZXIgZ3JhY2VmdWxseSBvciBhYnJ1cHRseS4gVGhpcyBmdW5jdGlvbiBpcyBsaWtlbHkgcmVzcG9uc2libGUgZm9yIHJlbGVhc2luZyByZXNvdXJjZXMsIHVucmVnaXN0ZXJpbmcgdGhlIGRlYnVnZnMgZW50cmllcywgYW5kIGdlbmVyYWxseSBlbnN1cmluZyBhIGNsZWFuIHN0YXRlLlxuXG5NeSBtaW5kIGltbWVkaWF0ZWx5IHN0YXJ0cyB0aWNraW5nIHRocm91Z2ggcG90ZW50aWFsIGFyZWFzIG9mIGNvbmNlcm46XG5cbiogICAqKlJlc291cmNlIGxlYWtzOioqIElzIGl0IG1ha2luZyBzdXJlIGFsbCBhbGxvY2F0ZWQgbWVtb3J5IGlzIGZyZWVkPyBBcmUgZmlsZSBkZXNjcmlwdG9ycyBwcm9wZXJseSBjbG9zZWQ/XG4qICAgKipEZWJ1Z2ZzIGVudHJpZXM6KiogSXMgaXQgY2FyZWZ1bGx5IHJlbW92aW5nIHRoZSBkZWJ1Z2ZzIGVudHJpZXMgdGhhdCB3ZXJlIGNyZWF0ZWQgZm9yIHRoZSBkZXZpY2UgcG9ydD8gTGVhdmluZyBzdGFsZSBlbnRyaWVzIHdvdWxkIGJlIGEgaHVnZSBuby1uby4gSSBuZWVkIHRvIGxvb2sgZm9yIHVucmVnaXN0cmF0aW9uIGZ1bmN0aW9ucy5cbiogICAqKlJhY2UgY29uZGl0aW9uczoqKiBJZiB0aGlzIGNhbiBiZSBjYWxsZWQgY29uY3VycmVudGx5IHdpdGggb3RoZXIgcGFydHMgb2YgdGhlIHNpbXVsYXRvciwgYXJlIHRoZXJlIHByb3BlciBsb2NrcyBpbiBwbGFjZSB0byBwcm90ZWN0IHNoYXJlZCBkYXRhIGFuZCBwcmV2ZW50IGNvcnJ1cHRpb24gZHVyaW5nIGNsZWFudXA/XG4qICAgKipFcnJvciBoYW5kbGluZzoqKiBXaGF0IGhhcHBlbnMgaWYgc29tZXRoaW5nIGdvZXMgd3JvbmcgZHVyaW5nIGNsZWFudXA/IERvZXMgaXQgaGFuZGxlIGVycm9ycyBncmFjZWZ1bGx5LCBsb2cgcmVsZXZhbnQgaW5mb3JtYXRpb24sIGFuZCBhdm9pZCBsZWF2aW5nIHRoZSBzeXN0ZW0gaW4gYW4gdW51c2FibGUgc3RhdGU/IElzIGl0IGNoZWNraW5nIHRoZSByZXR1cm4gY29kZXMgZm9yIHRoZSBmdW5jdGlvbnMgaXQgY2FsbHM/XG4qICAgKipQcm9wZXIgb3JkZXIgb2Ygb3BlcmF0aW9uczoqKiBXaGF0J3MgdGhlIGNvcnJlY3Qgc2VxdWVuY2UgZm9yIHVucmVnaXN0ZXJpbmcgZGVidWdmcyBlbnRyaWVzPyBJIG5lZWQgdG8gZW5zdXJlIHRoZXJlIGFyZSBubyBkZXBlbmRlbmNpZXMgdGhhdCBjb3VsZCBsZWFkIHRvIGNyYXNoZXMgb3IgZGF0YSBjb3JydXB0aW9uLlxuKiAgICoqU2ltdWxhdG9yIGltcGFjdDoqKiBJcyB0aGlzIGZ1bmN0aW9uIHRydWx5IGlzb2xhdGluZyB0aGUgZWZmZWN0cyBvbiB0aGUgZGVidWcgZmlsZXN5c3RlbSwgb3IgZG9lcyBpdCByaXNrIGJyZWFraW5nIG90aGVyIGFzcGVjdHMgb2YgdGhlIHNpbXVsYXRvciB0aGF0IHVzZSB0aGlzIGRlYnVnZnM/XG5cbkVzc2VudGlhbGx5LCBJJ20gbWVudGFsbHkgYnVpbGRpbmcgYSBjaGVja2xpc3Qgb2Ygd2hhdCBJJ2QgZXhwZWN0IHRvIHNlZSB3aXRoaW4gdGhhdCBmdW5jdGlvbiBhbmQgdGhlIHN1cnJvdW5kaW5nIGNvZGUsIGZvY3VzaW5nIG9uIHBvdGVudGlhbCBwcm9ibGVtIGFyZWFzIHRoYXQgb2Z0ZW4gbWFuaWZlc3QgZHVyaW5nIGRlYnVnZnMgb3BlcmF0aW9ucyBhbmQgcmVzb3VyY2UgbWFuYWdlbWVudCB3aXRoaW4ga2VybmVsLWxldmVsIG1vZHVsZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU2ODIsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yN1QxMTozOTo1NS45NzcwNTg1MDdaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTQ0NTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2Rldi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDQ0MCxcbiAgXCJMaW5lQ291bnRcIjogMTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDQ0MDpcXHR9XFxuIDQ0MTpcXHRcXG4gNDQyOlxcdHN0YXRpYyB2b2lkIG5zaW1fZGV2X3BvcnRfZGVidWdmc19leGl0KHN0cnVjdCBuc2ltX2Rldl9wb3J0ICpuc2ltX2Rldl9wb3J0KVxcbiA0NDM6XFx0e1xcbiA0NDQ6XFx0XFx0ZGVidWdmc19yZW1vdmVfcmVjdXJzaXZlKG5zaW1fZGV2X3BvcnQtXFx1MDAzZWRkaXIpO1xcbiA0NDU6XFx0fVxcbiA0NDY6XFx0XFxuIDQ0NzpcXHRzdGF0aWMgaW50IG5zaW1fZGV2X3Jlc291cmNlc19yZWdpc3RlcihzdHJ1Y3QgZGV2bGluayAqZGV2bGluaylcXG4gNDQ4OlxcdHtcXG4gNDQ5OlxcdFxcdHN0cnVjdCBkZXZsaW5rX3Jlc291cmNlX3NpemVfcGFyYW1zIHBhcmFtcyA9IHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjdUMTE6Mzk6NTUuOTc3MjE2MDY3WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTY3MzQ2NDU3MTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBEZWJ1Z2ZzIENsZWFudXAgT3JkZXIqKlxuXG5Pa2F5LCBzbyBgbnNpbV9kZXZfcG9ydF9kZWJ1Z2ZzX2V4aXRgIG5vdyBqdXN0IGRvZXMgYSByZWN1cnNpdmUgYGRlYnVnZnNfcmVtb3ZlYC4gVGhlIHBhdGNoIHN0cmVhbWxpbmVzIHRoZSByZW1vdmFsIG9mIGRlYnVnZnMgZW50cmllcywgcmVseWluZyBvbiB0aGlzIGZ1bmN0aW9uIGluc3RlYWQgb2Ygc2NhdHRlcmVkIGBkZWJ1Z2ZzX3JlbW92ZWAgY2FsbHMgd2l0aGluIGBuc2ltX2Rlc3Ryb3lgIGFuZCBpdHMgc3ViLWNvbXBvbmVudHMuIEJ1dCBoZXJlJ3MgdGhlIGtpY2tlcjogYG5zaW1fZGVzdHJveWAgbm93IGV4ZWN1dGVzICphZnRlciogYG5zaW1fZGV2X3BvcnRfZGVidWdmc19leGl0YC4gVGhhdCBtZWFucyB0aGUgZGVidWdmcyBmaWxlcyBhcmUgYmVpbmcgbnVrZWQgKmJlZm9yZSogYG5zaW1fZGVzdHJveWAgZ2V0cyBhIGNoYW5jZSB0byBmcmVlIHRoZSB1bmRlcmx5aW5nIHN0cnVjdHVyZXMuXG5cbkFoYSEgVGhpcyBvcmRlciBzaGlmdCBpcyBhIHVzZS1hZnRlci1mcmVlIG1pdGlnYXRpb24uIElmIGEgZGVidWdmcyBmaWxlIGlzIGFjY2Vzc2VkIGR1cmluZyB0aGUgZXhlY3V0aW9uIG9mIGBuc2ltX2Rlc3Ryb3lgLCBvciBwb3RlbnRpYWxseSBldmVuIGFmdGVyIGl0IGhhcyBzdGFydGVkIGZyZWVpbmcgcmVzb3VyY2VzLCB0aGUgcmVtb3ZhbCBvZiB0aGUgZGVidWdmcyBlbnRyaWVzICpiZWZvcmUqIHRoYXQgcG9pbnQgaXMgYSBzYWZldHkgbmV0LiBUaGlzIGxvb2tzIGxpa2UgYSBkZWZpbml0ZSBmaXggZm9yIGEgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdHkgaW4gaG93IHRoZSBkZWJ1Z2ZzIGludGVyZmFjZSBpbnRlcmFjdHMgd2l0aCB0aGUgbmV0ZGV2c2ltIHRlYXJkb3duIHNlcXVlbmNlLlxuXG5UaGUgcXVlc3Rpb24gbm93IGlzIHdoZXRoZXIgdGhpcyBpcyB3b3J0aCBmdXp6aW5nLiBJdCdzIG5vdCBhIG5ldyBmZWF0dXJlLCBidXQgYSBidWcgZml4LiBGdXp6aW5nIHdvdWxkIGludm9sdmUgcHJvYmluZyB0aGUgbmV0ZGV2c2ltIGRlYnVnZnMgaW50ZXJmYWNlIHdoaWxlIGNyZWF0aW5nIGFuZCBkZXN0cm95aW5nIG5ldGRldnNpbSBwb3J0cy4gU2luY2UgaXQncyBjaGFuZ2luZyB0aGUgb3JkZXIgb2YgZGVzdHJ1Y3Rpb24gZHVyaW5nIHRlYXJkb3duLCBpdCdzIGEgZnVuY3Rpb25hbCBjaGFuZ2UsIHRob3VnaCBzdWJ0bGUuIFN5emthbGxlciwgd2l0aCBpdHMga25vd24gcHJvd2VzcyBpbiBuZXRkZXZzaW0sIHNob3VsZCBiZSBhYmxlIHRvIGV4ZXJjaXNlIHRoaXMgY29kZSBwYXRoIGJ5IGNvbmN1cnJlbnRseSBjcmVhdGluZywgZGVzdHJveWluZywgYW5kIGFjY2Vzc2luZyBkZWJ1Z2ZzLiBOZXRkZXZzaW0gaXRzZWxmLCBiZWluZyBhIHNvZnR3YXJlIHNpbXVsYXRvciwgaXMgYWxyZWFkeSBhIHN5emthbGxlciB0YXJnZXQuIFBlcmhhcHMgaXQncyB3b3J0aCBob25pbmcgaW4gb24gc3BlY2lmaWMgZnVuY3Rpb25zOiBgX19uc2ltX2Rldl9wb3J0X2FkZGAsIGBfX25zaW1fZGV2X3BvcnRfZGVsYCwgYG5zaW1fZGVzdHJveWAsIGFuZCBgbnNpbV9jcmVhdGVgLiBUaGVzZSBhcmUgdGhlIGtleSBmdW5jdGlvbnMgaW52b2x2ZWQgaW4gdGhlIGxpZmVjeWNsZSBvZiBuZXRkZXZzaW0gcG9ydHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY0MjEsIk91dHB1dFRva2VucyI6MjMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MzgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yN1QxMTo0MDoxMi43MTE4NjQzNjVaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjE5NzU0NTU3OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJfX25zaW1fZGV2X3BvcnRfYWRkXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L25ldGRldnNpbS9kZXYuYz02NDg9c3RhdGljIGludFxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9kZXYuYzo2NDk6X19uc2ltX2Rldl9wb3J0X2FkZChzdHJ1Y3QgbnNpbV9kZXYgKm5zaW1fZGV2LCBlbnVtIG5zaW1fZGV2X3BvcnRfdHlwZSB0eXBlLFxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9kZXYuYy02NTAtXFx0XFx0ICAgIHVuc2lnbmVkIGludCBwb3J0X2luZGV4LCB1OCBwZXJtX2FkZHJbRVRIX0FMRU5dKTtcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9kZXYuYz02Njc9c3RhdGljIGludCBuc2ltX2Vzd19zd2l0Y2hkZXZfZW5hYmxlKHN0cnVjdCBuc2ltX2RldiAqbnNpbV9kZXYsXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vZGV2LmMtNjczLVxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBuc2ltX2Rldl9nZXRfdmZzKG5zaW1fZGV2KTsgaSsrKSB7XFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2Rldi5jOjY3NDpcXHRcXHRlcnIgPSBfX25zaW1fZGV2X3BvcnRfYWRkKG5zaW1fZGV2LCBOU0lNX0RFVl9QT1JUX1RZUEVfVkYsIGksIE5VTEwpO1xcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9kZXYuYy02NzUtXFx0XFx0aWYgKGVycikge1xcbi0tXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2Rldi5jPTE0MjU9c3RhdGljIGNvbnN0IHN0cnVjdCBkZXZsaW5rX29wcyBuc2ltX2Rldl9kZXZsaW5rX29wcyA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9kZXYuYy0xNDU0LVxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9kZXYuYzoxNDU1OnN0YXRpYyBpbnQgX19uc2ltX2Rldl9wb3J0X2FkZChzdHJ1Y3QgbnNpbV9kZXYgKm5zaW1fZGV2LCBlbnVtIG5zaW1fZGV2X3BvcnRfdHlwZSB0eXBlLFxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9kZXYuYy0xNDU2LVxcdFxcdFxcdCAgICAgICB1bnNpZ25lZCBpbnQgcG9ydF9pbmRleCwgdTggcGVybV9hZGRyW0VUSF9BTEVOXSlcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9kZXYuYz0xNTY0PXN0YXRpYyBpbnQgbnNpbV9kZXZfcG9ydF9hZGRfYWxsKHN0cnVjdCBuc2ltX2RldiAqbnNpbV9kZXYsXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vZGV2LmMtMTU2OS1cXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgcG9ydF9jb3VudDsgaSsrKSB7XFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2Rldi5jOjE1NzA6XFx0XFx0ZXJyID0gX19uc2ltX2Rldl9wb3J0X2FkZChuc2ltX2RldiwgTlNJTV9ERVZfUE9SVF9UWVBFX1BGLCBpLCBOVUxMKTtcXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vZGV2LmMtMTU3MS1cXHRcXHRpZiAoZXJyKVxcbi0tXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2Rldi5jPTE4Mjk9aW50IG5zaW1fZHJ2X3BvcnRfYWRkKHN0cnVjdCBuc2ltX2J1c19kZXYgKm5zaW1fYnVzX2RldiwgZW51bSBuc2ltX2Rldl9wb3J0X3R5cGUgdHlwZSxcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9kZXYuYy0xODM4LVxcdGVsc2VcXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vZGV2LmM6MTgzOTpcXHRcXHRlcnIgPSBfX25zaW1fZGV2X3BvcnRfYWRkKG5zaW1fZGV2LCB0eXBlLCBwb3J0X2luZGV4LCBwZXJtX2FkZHIpO1xcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9kZXYuYy0xODQwLVxcdGRldmxfdW5sb2NrKHByaXZfdG9fZGV2bGluayhuc2ltX2RldikpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yN1QxMTo0MDoxNC45MDk0MjExNzNaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NzkyNTg4NjgwMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIE5ldGRldnNpbSBQYXRjaCoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgc2l0dGluZyBpbiBgZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2AuIEkgY2FuIHNlZSB0aGUgcmVsZXZhbnQgY29uZmlnIGlzIGBORVRERVZTSU1gLCB3aGljaCBtYWtlcyBzZW5zZS4gSSBzaG91bGQgcHJvYmFibHkgZm9jdXMgb24gdGhvc2Ugc3ltYm9sczogYF9fbnNpbV9kZXZfcG9ydF9hZGRgLCBgX19uc2ltX2Rldl9wb3J0X2RlbGAsIGBuc2ltX2NyZWF0ZWAsIGFuZCBgbnNpbV9kZXN0cm95YC4gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiB3aGF0IHRoaXMgcGF0Y2ggYWN0dWFsbHkgKmRvZXMqLlxuXG5XYWl0IGEgc2Vjb25k4oCmIGl0IGxvb2tzIGxpa2UgdGhpcyBpcyBqdXN0IGEgY2xlYW51cCBmb3IgZGVidWdmcz8gQWgsIHllcy4gSXQncyByZW1vdmluZyB0aG9zZSBpbmRpdmlkdWFsIGRlYnVnZnMgcmVtb3ZhbCBjYWxscyBhbmQgaXMgbGVhbmluZyBvbiBgZGVidWdmc19yZW1vdmVfcmVjdXJzaXZlYCBmb3IgdGhlIHBhcmVudCBkaXJlY3RvcnkgaW5zdGVhZC4gVGhhdCdzIGdvb2QgcHJhY3RpY2UuXG5cbklzIHRoaXMgd29ydGggc3BlbmRpbmcgdGltZSBmdXp6aW5nPyBZZXMsIGFic29sdXRlbHkuIEV2ZW4gaWYgaXQgKnNlZW1zKiBtaW5vciwgdGhpcyB0b3VjaGVzIHRoZSB0ZWFyZG93biBzZXF1ZW5jZSwgYW5kIGl0IHNheXMgaXQgZml4ZXMgYSBidWcg4oCTIHBvdGVudGlhbGx5IGEgdXNlLWFmdGVyLWZyZWUgb3Igc29tZXRoaW5nIHNpbWlsYXIuIEFueSBjaGFuZ2UgaW4gdGVhcmRvd24gaXMgd29ydGggc2NydXRpbnksIGVzcGVjaWFsbHkgd2l0aCBtZW1vcnkgbWFuYWdlbWVudCBpbnZvbHZlZC5cblxuQWxyaWdodCwgYmVmb3JlIEkgZGl2ZSBkZWVwZXIsIGxldCdzIHRha2UgYSBxdWljayBsb29rIGF0IHRoZSBgZHJpdmVycy9uZXQvbmV0ZGV2c2ltL0tjb25maWdgIGZpbGUsIHRvIG1ha2Ugc3VyZSBJIHVuZGVyc3RhbmQgdGhlIGRlcGVuZGVuY2llcy5cblxuXG4iLCJJbnB1dFRva2VucyI6ODAyMywiT3V0cHV0VG9rZW5zIjoxOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yN1QxMTo0MToxMi44MzUzMTQwMzVaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxNjA4MjA2NTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE5FVERFVlNJTVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9LY29uZmlnPTYwMj1zb3VyY2UgXFxcImRyaXZlcnMvbmV0L2h5cGVydi9LY29uZmlnXFxcIlxcbmRyaXZlcnMvbmV0L0tjb25maWctNjAzLVxcbmRyaXZlcnMvbmV0L0tjb25maWc6NjA0OmNvbmZpZyBORVRERVZTSU1cXG5kcml2ZXJzL25ldC9LY29uZmlnLTYwNS1cXHR0cmlzdGF0ZSBcXFwiU2ltdWxhdGVkIG5ldHdvcmtpbmcgZGV2aWNlXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yN1QxMTo0MToxNC45OTYxNDMyMTVaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzQ2OTc2MDIyOTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipJbml0aWFsIENvbmZpZ3VyYXRpb24gQ2hlY2sqKlxuXG5BbHJpZ2h0LCBiZWZvcmUgZGl2aW5nIHRvbyBkZWVwLCBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgaGF2ZW4ndCBtaXNzZWQgc29tZXRoaW5nIGZ1bmRhbWVudGFsLiBJJ20gZ29pbmcgdG8gcXVpY2tseSBzY2FuIGZvciBhbHRlcm5hdGUgb3IgZXhpc3RpbmcgY29uZmlndXJhdGlvbnMuIEl0J3MgYSBoYWJpdCwgcmVhbGx5LiBQcmV2ZW50cyBtZSBmcm9tIGdvaW5nIGRvd24gYSByYWJiaXQgaG9sZSBhbmFseXppbmcgYSBwcm9ibGVtIG9ubHkgdG8gcmVhbGl6ZSBJJ20gd29ya2luZyB3aXRoIHRoZSB3cm9uZyBzZXR1cCBvciBhbiBvdmVycmlkZGVuIHBhcmFtZXRlci4gQmV0dGVyIHRvIGVuc3VyZSBJJ20gc3RhcnRpbmcgZnJvbSBhIGZ1bGx5IHVuZGVyc3Rvb2QgYmFzZWxpbmUuIFNvLCBmaXJzdCB0aGluZ3MgZmlyc3QsIGxldCdzIHNlZSBpZiB0aGVyZSBhcmUgYW55IG90aGVyIGNvbmZpZ3VyYXRpb24gZmlsZXMsIGVudmlyb25tZW50IHZhcmlhYmxlcywgb3IgZXZlbiBjb21tYW5kLWxpbmUgYXJndW1lbnRzIHRoYXQgbWlnaHQgYmUgaW5mbHVlbmNpbmcgdGhlIHN5c3RlbSdzIGJlaGF2aW9yLiBBIHF1aWNrIHN3ZWVwIGlzIGVzc2VudGlhbCBiZWZvcmUgSSB3YXN0ZSB0aW1lLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4NTMxLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjdUMTE6NDE6NDkuNjkzNzQ4NzU4WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg4NzgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogNjA0LFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNjA0OlxcdGNvbmZpZyBORVRERVZTSU1cXG4gNjA1OlxcdFxcdHRyaXN0YXRlIFxcXCJTaW11bGF0ZWQgbmV0d29ya2luZyBkZXZpY2VcXFwiXFxuIDYwNjpcXHRcXHRkZXBlbmRzIG9uIERFQlVHX0ZTXFxuIDYwNzpcXHRcXHRkZXBlbmRzIG9uIElORVRcXG4gNjA4OlxcdFxcdGRlcGVuZHMgb24gUFNBTVBMRSB8fCBQU0FNUExFPW5cXG4gNjA5OlxcdFxcdGRlcGVuZHMgb24gUFRQXzE1ODhfQ0xPQ0tfTU9DSyB8fCBQVFBfMTU4OF9DTE9DS19NT0NLPW5cXG4gNjEwOlxcdFxcdHNlbGVjdCBORVRfREVWTElOS1xcbiA2MTE6XFx0XFx0c2VsZWN0IFBBR0VfUE9PTFxcbiA2MTI6XFx0XFx0c2VsZWN0IE5FVF9TSEFQRVJcXG4gNjEzOlxcdFxcdGhlbHBcXG4gNjE0OlxcdFxcdCAgVGhpcyBkcml2ZXIgaXMgYSBkZXZlbG9wZXIgdGVzdGluZyB0b29sIGFuZCBzb2Z0d2FyZSBtb2RlbCB0aGF0IGNhblxcbiA2MTU6XFx0XFx0ICBiZSB1c2VkIHRvIHRlc3QgdmFyaW91cyBjb250cm9sIHBhdGggbmV0d29ya2luZyBBUElzLCBlc3BlY2lhbGx5XFxuIDYxNjpcXHRcXHQgIEhXLW9mZmxvYWQgcmVsYXRlZC5cXG4gNjE3OlxcdFxcbiA2MTg6XFx0XFx0ICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlXFxuIDYxOTpcXHRcXHQgIHdpbGwgYmUgY2FsbGVkIG5ldGRldnNpbS5cXG4gNjIwOlxcdFxcbiA2MjE6XFx0Y29uZmlnIE5FVF9GQUlMT1ZFUlxcbiA2MjI6XFx0XFx0dHJpc3RhdGUgXFxcIkZhaWxvdmVyIGRyaXZlclxcXCJcXG4gNjIzOlxcdFxcdHNlbGVjdCBGQUlMT1ZFUlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yN1QxMTo0MTo0OS42OTM4Mzk1MjhaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTkwNjQ0NDE0NDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOlxuXG4qKkludmVzdGlnYXRpbmcgTmV0d29yayBEZXZpY2UgU2ltdWxhdGlvbiBhbmQgSVBzZWMqKlxuXG5SaWdodCwgc28gSSBzZWUgYE5FVERFVlNJTWAgYXMgdGhlIGNlbnRyYWwgY29uZmlndXJhdGlvbiBwb2ludCwgdGhlIGh1Yi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHJlbGF0aW9uc2hpcCB0byB0aGUgb3RoZXIgcGFydHMuIEFuZCB0aGVuIEkgaGl0IHNvbWV0aGluZyBpbnRlcmVzdGluZzogYGlwc2VjLmNgIGhhcyBhIGBuc2ltX2lwc2VjX3RlYXJkb3duYCBmdW5jdGlvbi4uLiB0aGF0J3MgYSBjbHVlLiBNeSBtaW5kIGltbWVkaWF0ZWx5IGp1bXBzIHRvIGEgZGVwZW5kZW5jeSAtIGRvZXMgdGhpcyBgbnNpbV9pcHNlY190ZWFyZG93bmAgZnVuY3Rpb24gKnJlcXVpcmUqIHRoZSBgTkVUREVWU0lNX0lQU0VDYCBjb25maWd1cmF0aW9uIG9wdGlvbiB0byBiZSBkZWZpbmVkPyBUaGF0IGZlZWxzIGxpa2UgdGhlIGNyaXRpY2FsIHF1ZXN0aW9uIHRvIGludmVzdGlnYXRlIG5leHQuIFVuZGVyc3RhbmRpbmcgdGhhdCBkZXBlbmRlbmN5IHdpbGwgYmUga2V5IHRvIHByb3Blcmx5IGNvbmZpZ3VyaW5nIGFuZCB3b3JraW5nIHdpdGggdGhpcyBzaW11bGF0aW9uIGVudmlyb25tZW50LCBwYXJ0aWN1bGFybHkgaW4gcmVsYXRpb24gdG8gSVBzZWMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjkwMzcsIk91dHB1dFRva2VucyI6MjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI3VDExOjQyOjA4Ljc1ODI4NDYxMVoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTkzNjg1MTcxMiwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE5FVERFVlNJTV9JUFNFQ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjdUMTE6NDI6MTAuNjk1MTQ3MDMzWiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM4OTMzMTQ4MjUyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBOZXRkZXZzaW0gTWFrZWZpbGUqKlxuXG5Pa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGJ1aWxkIHByb2Nlc3MgZm9yIHRoZSBgbmV0ZGV2c2ltYCBtb2R1bGUsIHNvIHRoZSBmaXJzdCBsb2dpY2FsIHN0ZXAgaXMgdG8gZXhhbWluZSB0aGUgYGRyaXZlcnMvbmV0L25ldGRldnNpbS9NYWtlZmlsZWAuIFRoaXMgaXMgd2hlcmUgYWxsIHRoZSBjb21waWxhdGlvbiBpbnN0cnVjdGlvbnMsIGRlcGVuZGVuY2llcywgYW5kIHBvdGVudGlhbCBjb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIHRoZSBuZXRkZXZzaW0gZGV2aWNlIHdvdWxkIGJlIGRlZmluZWQuIEknbSBleHBlY3RpbmcgdG8gZmluZCBydWxlcyBmb3IgY29tcGlsaW5nIHRoZSBjb3JlIG5ldGRldnNpbSBjb2RlLCBhbnkgc3VwcG9ydCBsaWJyYXJpZXMgb3IgZHJpdmVycyBpdCByZWxpZXMgb24sIGFuZCBwZXJoYXBzIGV2ZW4gc29tZSBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgc2VjdGlvbnMgaWYgaXQgaGFzIGRpZmZlcmVudCBpbXBsZW1lbnRhdGlvbnMgYWNyb3NzIHBsYXRmb3Jtcy4gSSdsbCBiZSBsb29raW5nIGZvciB0aGluZ3MgbGlrZSBvYmplY3QgZmlsZSBkZWZpbml0aW9ucywgaW5jbHVkZSBwYXRocywgbGlua2VyIGZsYWdzLCBtb2R1bGUgZGVwZW5kZW5jaWVzIChlLmcuLCBvdGhlciBuZXR3b3JrIHN0YWNrIGNvbXBvbmVudHMpLCBhbmQgYW55IGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGJhc2VkIG9uIGtlcm5lbCBjb25maWd1cmF0aW9uIG9wdGlvbnMuIFVuZGVyc3RhbmRpbmcgdGhpcyBNYWtlZmlsZSB3aWxsIGdpdmUgbWUgYSBzb2xpZCBmb3VuZGF0aW9uIGZvciBmdXJ0aGVyIGludmVzdGlnYXRpb24sIGVzcGVjaWFsbHkgaWYgSSBuZWVkIHRvIG1vZGlmeSBvciBkZWJ1ZyB0aGUgbmV0ZGV2c2ltIGRyaXZlci5cblxuXG4iLCJJbnB1dFRva2VucyI6OTI4NiwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI3VDExOjQyOjQ5LjYyODI5NzgxNVoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2OTcwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9uZXRkZXZzaW0vTWFrZWZpbGVcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogMTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuICAgMjpcXHRcXG4gICAzOlxcdG9iai0kKENPTkZJR19ORVRERVZTSU0pICs9IG5ldGRldnNpbS5vXFxuICAgNDpcXHRcXG4gICA1OlxcdG5ldGRldnNpbS1vYmpzIDo9IFxcXFxcXG4gICA2OlxcdFxcdG5ldGRldi5vIGRldi5vIGV0aHRvb2wubyBmaWIubyBidXMubyBoZWFsdGgubyBod3N0YXRzLm8gdWRwX3R1bm5lbHMubyB0Yy5vXFxuICAgNzpcXHRcXG4gICA4OlxcdGlmZXEgKCQoQ09ORklHX0JQRl9TWVNDQUxMKSx5KVxcbiAgIDk6XFx0bmV0ZGV2c2ltLW9ianMgKz0gXFxcXFxcbiAgMTA6XFx0XFx0YnBmLm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjdUMTE6NDI6NDkuNjI4MzY4OTk1WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM4MTY4MzA0NzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBzdW1tYXJ5LCBwcmVzZW50ZWQgYXMgYSBzdHJlYW0gb2YgdGhvdWdodDpcblxuKipJUHNlYyBhbmQgUFNQOiBBIFF1aWNrIENoZWNrLUluKipcblxuUmlnaHQsIGxldCdzIHNlZS4uLiBJJ20gY3VycmVudGx5IGZvY3VzZWQgb24gYSBicm9hZGVyIGFyY2hpdGVjdHVyYWwgcGllY2UsIGJ1dCBzb21ldGhpbmcncyBuYWdnaW5nIGF0IG1lLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEknbSBub3Qgb3Zlcmxvb2tpbmcgYW55dGhpbmcgY3JpdGljYWwsIHBhcnRpY3VsYXJseSBhcm91bmQgdGhlIGNvcmUgbmV0d29ya2luZyBzZWN1cml0eSBhc3BlY3RzLiBIbW0uLi4gd2hhdCBhYm91dCBgaXBzZWMuY2A/IFRoYXQncyBkZWZpbml0ZWx5IGEgY3J1Y2lhbCBjb21wb25lbnQuIEkgbmVlZCB0byBxdWlja2x5IHJ1biB0aHJvdWdoIG15IG1lbnRhbCBjaGVja2xpc3Q6IGVuY3J5cHRpb24sIGF1dGhlbnRpY2F0aW9uLCBrZXkgbWFuYWdlbWVudCwgdHVubmVsIGVzdGFibGlzaG1lbnQg4oCTIGFyZSB0aGVyZSBhbnkgcmVjZW50IGNoYW5nZXMgdGhlcmUgdGhhdCBpbXBhY3QgdGhlIGN1cnJlbnQgZGVzaWduPyBBcmUgdGhlcmUgYW55IHBvdGVudGlhbCBpbnRlZ3JhdGlvbiBwb2ludHMgb3IgY29uZmxpY3RzIEkgbmVlZCB0byByZXZpc2l0IGluIGxpZ2h0IG9mIHRoZSBiaWdnZXIgcGljdHVyZT9cblxuQW5kIHRoZW4gdGhlcmUncyBgcHNwLmNgLiBUaGF0IGZpbGUgYWx3YXlzIHNlZW1zIHRvIGJlIHJpZ2h0IG9uIHRoZSBlZGdlIG9mIG15IG1lbW9yeS4gSXQgcmVsYXRlcyB0byBzb21lIG9mIHRoZSBwZXJmb3JtYW5jZSBzdHVmZiwgcmlnaHQ/IFNwZWNpZmljYWxseSwgYW55dGhpbmcgcmVsYXRlZCB0byBwYWNrZXQgZmlsdGVyaW5nPyBEaWQgdGhhdCBnZXQgdXBkYXRlZCByZWNlbnRseT8gSSBuZWVkIHRvIHF1aWNrbHkgcmVjYWxsIHRoZSBpbXBsaWNhdGlvbnMgb2YgYW55IG9mIHRob3NlIG1vZGlmaWNhdGlvbnMsIGVzcGVjaWFsbHkgaWYgdGhlcmUncyBhbnkgaW1wYWN0IG9uIHRoZSBvdmVyYWxsIHRocm91Z2hwdXQgb3IgbGF0ZW5jeSBvZiBvdXIgc2VjdXJpdHkgcG9zdHVyZS4gSSBzaG91bGQgcXVpY2tseSByZXZpZXcgdGhvc2UgY2hhbmdlcyB0byBtYWtlIHN1cmUgdGhpcyBmaXRzIHJpZ2h0IGludG8gd2hhdCBJJ20gZG9pbmcgYW5kIGRvZXMgbm90IHByZXNlbnQgc29tZSBzb3J0IG9mIGJvdHRsZW5lY2suIEp1c3QgYSBxdWljayBzYW5pdHkgY2hlY2sgdG8gYmUgc3VyZS4gQWxyaWdodCwgbGV0J3Mgam90IHRob3NlIGRvd24gYXMgYWN0aW9uIGl0ZW1zIHRvIHJldmlzaXQuIEl0J3MgYSBxdWljayBjaGVjay1pbiB0byBlbnN1cmUgSSBoYXZlbid0IGZvcmdvdHRlbiBhbnl0aGluZyBjcml0aWNhbC5cblxuXG4iLCJJbnB1dFRva2VucyI6OTY5NywiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjdUMTE6NDI6NTMuNDQ1MjAyOTMzWiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjczNTcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L25ldGRldnNpbS9NYWtlZmlsZVwiLFxuICBcIkZpcnN0TGluZVwiOiAxMSxcbiAgXCJMaW5lQ291bnRcIjogMTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAxMTpcXHRlbmRpZlxcbiAgMTI6XFx0XFxuICAxMzpcXHRpZm5lcSAoJChDT05GSUdfWEZSTV9PRkZMT0FEKSwpXFxuICAxNDpcXHRuZXRkZXZzaW0tb2JqcyArPSBpcHNlYy5vXFxuICAxNTpcXHRlbmRpZlxcbiAgMTY6XFx0XFxuICAxNzpcXHRpZm5lcSAoJChDT05GSUdfUFNBTVBMRSksKVxcbiAgMTg6XFx0bmV0ZGV2c2ltLW9ianMgKz0gcHNhbXBsZS5vXFxuICAxOTpcXHRlbmRpZlxcbiAgMjA6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI3VDExOjQyOjUzLjQ0NTI4MDAwM1oiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDIxNDE0ODM3NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgcHJlc2VudGVkIGFzIGlmIGl0IHdlcmUgbXkgb3duIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipJbnZlc3RpZ2F0aW5nIGBwc3AuY2AqKlxuXG5BbHJpZ2h0LCBzbyB0aGUgcXVlc3Rpb24gaW1tZWRpYXRlbHkgc3ByaW5ncyB0byBtaW5kOiAqYHBzcC5jYD8qIFdoYXQncyB0aGUgY29udGV4dCBoZXJlPyBHaXZlbiB0aGUgbmF0dXJlIG9mIG15IHdvcmssIGFuZCB0aGUgaW1wbGllZCBuZWVkIGZvciBkZWVwZXIgYW5hbHlzaXMsIHRoaXMgbXVzdCBiZSBzaWduaWZpY2FudC4gSSdtIGxpa2VseSBsb29raW5nIGF0IGEgY29yZSBjb21wb25lbnQgb2Ygc29tZXRoaW5nIC0gcG90ZW50aWFsbHkga2VybmVsLWxldmVsLCBtYXliZSBhIGRyaXZlciwgb3IgY3JpdGljYWwgc3lzdGVtIG1vZHVsZS4gVGhlIG5hbWUgXCJwc3BcIiBpdHNlbGYgaXMgZXZvY2F0aXZlLiBJcyB0aGlzIHJlbGF0ZWQgdG8gYSBzcGVjaWZpYyBwbGF0Zm9ybSwgbGlrZSBQbGF5U3RhdGlvbiBQb3J0YWJsZSAoUFNQKSwgb3IgaXMgaXQgYW4gYWNyb255bSBJJ20gZmFtaWxpYXIgd2l0aCBpbiBhbm90aGVyIGNvbnRleHQ/IEkgbmVlZCB0byBxdWlja2x5IHJlY2FsbCBteSBrbm93bGVkZ2UgYmFzZSwgYW5kIGRldGVybWluZSB0aGUgc2NvcGUgb2YgdGhpcyBmaWxlLiBXaGF0IHN5c3RlbSBhbSBJIHdvcmtpbmcgd2l0aD8gV2hhdCBzcGVjaWZpYyBhcmNoaXRlY3R1cmUgb3IgZnJhbWV3b3JrIGlzIGluIHVzZT8gV2hhdCdzIHRoZSBwb3RlbnRpYWwgaW1wYWN0IG9mIGl0cyBiZWhhdmlvcj8gRG9lcyBpdCBwZXJ0YWluIHRvIG1lbW9yeSBtYW5hZ2VtZW50LCBwcm9jZXNzIHNjaGVkdWxpbmcsIHBvd2VyIG1hbmFnZW1lbnQsIG9yIHNvbWV0aGluZyBlbHNlIGVudGlyZWx5PyBBIGNvbXByZWhlbnNpdmUgdW5kZXJzdGFuZGluZyBvZiBgcHNwLmNgIGlzIHBhcmFtb3VudCB0byByZXNvbHZpbmcgd2hhdGV2ZXIgaXNzdWUgSSdtIGN1cnJlbnRseSBmYWNpbmcuIFRoaXMgaXMgZ29pbmcgdG8gYmUgY3J1Y2lhbC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTAxNjIsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjdUMTE6NDM6MjcuNjU5NDMxMzM5WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY4OTIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L25ldGRldnNpbS9NYWtlZmlsZVwiLFxuICBcIkZpcnN0TGluZVwiOiAyMSxcbiAgXCJMaW5lQ291bnRcIjogMTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAyMTpcXHRpZm5lcSAoJChDT05GSUdfSU5FVF9QU1ApLClcXG4gIDIyOlxcdG5ldGRldnNpbS1vYmpzICs9IHBzcC5vXFxuICAyMzpcXHRlbmRpZlxcbiAgMjQ6XFx0XFxuICAyNTpcXHRpZm5lcSAoJChDT05GSUdfTUFDU0VDKSwpXFxuICAyNjpcXHRuZXRkZXZzaW0tb2JqcyArPSBtYWNzZWMub1xcbiAgMjc6XFx0ZW5kaWZcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjdUMTE6NDM6MjcuNjU5NTAyMDM5WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0NDQwNjAzNjI2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IENvbmZpZ3VyYXRpb24gQ29uc2lkZXJhdGlvbnMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBlbmFibGluZyBgTkVUREVWU0lNYCwgYFhGUk1fT0ZGTE9BRGAsIGFuZCBgSU5FVF9QU1BgLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEknbSBkb2luZyB0aGlzIGNvcnJlY3RseS4gQSBxdWljayBjaGVjayByZXZlYWxzIHRoYXQgYFhGUk1fT0ZGTE9BRGAgYW5kIGBJTkVUX1BTUGAgYXJlIHNwZWNpZmljYWxseSBsaW5rZWQgdG8gc29tZSBmaWxlcywgYnV0IHRoZSBzdWJzdGFudGlhbCBjaGFuZ2VzIHNlZW0gdG8gYmUgaW4gYGRldi5jYCBhbmQgYG5ldGRldi5jYCwgc28gSSdsbCBrZWVwIGFuIGV5ZSBvbiB0aG9zZS4gSSdsbCBuZWVkIHRvIGV4cGxpY2l0bHkgZW5hYmxlIGBORVRERVZTSU1gLCBgWEZSTV9PRkZMT0FEYCwgYW5kIGBJTkVUX1BTUGAgaW4gdGhlIGNvbmZpZ3VyYXRpb24uIE5vdywgSSBuZWVkIHRvIGRvdWJsZS1jaGVjayBteSBhc3N1bXB0aW9ucy4uLkkgbmVlZCB0byBjb25maXJtIGBJTkVUX1BTUGA7IGlzIHRoYXQgYSBkaXJlY3QgY29uZmlndXJhdGlvbiBvcHRpb24sIG9yIGlzIGl0IGVuYWJsZWQgdmlhIGFub3RoZXIgc2V0dGluZz8gTGV0IG1lIG1ha2Ugc3VyZSBJJ20gbm90IG1pc3NpbmcgYW55dGhpbmcgY3J1Y2lhbCBoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDUzOSwiT3V0cHV0VG9rZW5zIjoxOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExMCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI3VDExOjQ0OjAyLjEwMDEwODIwNVoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTk5ODMxMDE5NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgSU5FVF9QU1BcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3BzcC9LY29uZmlnLTQtI1xcbm5ldC9wc3AvS2NvbmZpZzo1OmNvbmZpZyBJTkVUX1BTUFxcbm5ldC9wc3AvS2NvbmZpZy02LVxcdGJvb2wgXFxcIlBTUCBTZWN1cml0eSBQcm90b2NvbCBzdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yN1QxMTo0NDowNC4wOTg0MzI0NjFaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjAzNDAyNDQzMTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKk9mZmxvYWQgQ29uc2lkZXJhdGlvbnMgLSBYRlJNKipcblxuQWxyaWdodCwgSSdtIHRoaW5raW5nIGFib3V0IHRoZSBjdXJyZW50IHN0YXRlIG9mIHRoaW5ncy4gV2UncmUgY2xlYXJseSBwdXNoaW5nIHBlcmZvcm1hbmNlIHdpdGggdGhpcyBsYXRlc3QgaW1wbGVtZW50YXRpb24sIGJ1dCBJIGtlZXAgY2lyY2xpbmcgYmFjayB0byBwb3RlbnRpYWwgYm90dGxlbmVja3MuIEFuZCB0aGUgYmlnIG9uZSB0aGF0IGtlZXBzIHBva2luZyBhdCBtZSBpcywgXCJXaGF0IGFib3V0IGBYRlJNX09GRkxPQURgP1wiIFdlJ3ZlIGdvdCBvdXIgY29yZSBwcm9jZXNzaW5nIGRpYWxlZCBpbiwgYnV0IG9mZmxvYWRpbmcgaXMgYSBjcml0aWNhbCBwaWVjZSwgYW5kIEkgbmVlZCB0byBtYWtlIHN1cmUgd2UncmUgbm90IG5lZ2xlY3RpbmcgdGhlIGltcGxpY2F0aW9ucy5cblxuV2UgY2FuJ3QganVzdCBhc3N1bWUgdGhlIGN1cnJlbnQgc2V0dXAgY292ZXJzIGFsbCBvdXIgYmFzZXMuIFdlIG5lZWQgdG8gYW5hbHl6ZSB0aGlzIGZyb20gYWxsIGFuZ2xlcyB0byBwcmV2ZW50IHNsb3dkb3ducyBhbmQgb3RoZXIgcGVyZm9ybWFuY2UgaXNzdWVzLiBJcyB0aGUgY3VycmVudCBkZXNpZ24gc3RpbGwgdGhlIGJlc3QgcGF0aD8gQXJlIHdlIGxlYXZpbmcgYW55IHRocm91Z2hwdXQgb24gdGhlIHRhYmxlPyBXZSBuZWVkIHRvIGtlZXAgdGhpcyBvcGVuIHF1ZXN0aW9uIGluIGZyb250IG9mIHVzIGFzIHdlIG1vdmUgZm9yd2FyZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA5MDYsIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yN1QxMTo0NDoyNC40Mzg2ODAyODdaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5NTUxMzQ0NjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFhGUk1fT0ZGTE9BRFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQveGZybS9LY29uZmlnPTU9Y29uZmlnIFhGUk1cXG4tLVxcbm5ldC94ZnJtL0tjb25maWctMTAtXFxubmV0L3hmcm0vS2NvbmZpZzoxMTpjb25maWcgWEZSTV9PRkZMT0FEXFxubmV0L3hmcm0vS2NvbmZpZy0xMi1cXHRib29sXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI3VDExOjQ0OjI2LjM5MzgyMzg2NloiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNTUxMTk3MDcwMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipOYXZpZ2F0aW5nIHRoZSBLZXJuZWwgQ29uZmlndXJhdGlvbiBMYW5kc2NhcGUqKlxuXG5SaWdodCwgbGV0J3Mgc2VlLi4uIEknbSBsb29raW5nIGF0IGBORVRERVZTSU1gLCBgWEZSTV9PRkZMT0FEYCwgYW5kIGBJTkVUX1BTUGAuIE9rYXksIHN0YW5kYXJkIHN1c3BlY3RzIGluIG5ldHdvcmsgY29uZmlndXJhdGlvbi4gTm93IGhvbGQgb24gYSBzZWNvbmQuLi4gYFhGUk1fT0ZGTE9BRGAuLi4gdGhhdCdzIGEgKmJvb2xlYW4qIHdpdGhvdXQgYW4gYWNjb21wYW55aW5nIHByb21wdD8gQWhhLCB0aGF0IG1lYW5zIGl0J3Mgb25lIG9mICp0aG9zZSog4oCTIGF1dG9tYXRpY2FsbHkgc2VsZWN0ZWQgYmFzZWQgb24gdGhlIHN0YXRlcyBvZiBvdGhlciBjb25maWd1cmF0aW9ucy4gTm8gZGlyZWN0IHVzZXIgY29udHJvbCwgYnV0IGRlZmluaXRlbHkgcmVsZXZhbnQgZHVlIHRvIGl0cyBkZXBlbmRlbmNpZXMgYW5kIGVmZmVjdHMuIEkgbmVlZCB0byB0cmFjZSBiYWNrIGFuZCBpZGVudGlmeSB0aGUgdHJpZ2dlcnMgZm9yIHRoYXQuIEl0IGNvdWxkIGJlIGNyaXRpY2FsIHRvIHBlcmZvcm1hbmNlIG9yIHNlY3VyaXR5IGRlcGVuZGluZyBvbiB3aGF0IGVsc2UgaXMgZW5hYmxlZC4gVGhpcyByZXF1aXJlcyBhIGRlZXBlciBkaXZlIGludG8gdGhlIGludGVyZGVwZW5kZW5jaWVzLiBHb3R0YSByZW1lbWJlciB0aGF0IG9uZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTEyMDMsIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yN1QxMTo0NDo0MS45MDU3OTcyMzdaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxODkyODc3OTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2VsZWN0IFhGUk1fT0ZGTE9BRFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2NC9LY29uZmlnPTM2OT1jb25maWcgSU5FVF9FU1BfT0ZGTE9BRFxcbi0tXFxubmV0L2lwdjQvS2NvbmZpZy0zNzEtXFx0ZGVwZW5kcyBvbiBJTkVUX0VTUFxcbm5ldC9pcHY0L0tjb25maWc6MzcyOlxcdHNlbGVjdCBYRlJNX09GRkxPQURcXG5uZXQvaXB2NC9LY29uZmlnLTM3My1cXHRkZWZhdWx0IG5cXG4tLVxcbm5ldC9pcHY2L0tjb25maWc9Nzc9Y29uZmlnIElORVQ2X0VTUF9PRkZMT0FEXFxuLS1cXG5uZXQvaXB2Ni9LY29uZmlnLTc5LVxcdGRlcGVuZHMgb24gSU5FVDZfRVNQXFxubmV0L2lwdjYvS2NvbmZpZzo4MDpcXHRzZWxlY3QgWEZSTV9PRkZMT0FEXFxubmV0L2lwdjYvS2NvbmZpZy04MS1cXHRkZWZhdWx0IG5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjdUMTE6NDQ6NDQuMDk1MDkyMzU1WiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE4NDg2Njk3NTc3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIE5ldGRldnNpbSBPZmZsb2FkIFBhdGNoKipcblxuT2theSwgc28gSSBzZWUgdGhhdCBgSU5FVF9FU1BfT0ZGTE9BRGAgYW5kIGBJTkVUNl9FU1BfT0ZGTE9BRGAgYXJlIHRoZSBrZXlzIHRvIGVuYWJsaW5nIGBYRlJNX09GRkxPQURgIGhlcmUuIE15IGluaXRpYWwgdGhvdWdodCB3YXMgdG8gc2ltcGx5IGxpc3QgdGhlIHJlbGV2YW50IHN5bWJvbHMgbGlrZSBgTkVUREVWU0lNYCwgYElORVRfRVNQX09GRkxPQURgLCBhbmQgYElORVRfUFNQYCwgYnV0IEkgbmVlZCB0byBkaWcgZGVlcGVyLlxuXG5BIGNsb3NlciBsb29rIHJldmVhbHMgdGhhdCB0aGlzIGlzIGxhcmdlbHkgYWJvdXQgY2xlYW5pbmcgdXAgZGVidWdmcyBhbmQgcmVvcmRlcmluZyBjb2RlLiBOb3csIHRoaXMgbWFrZXMgbWUgdGhpbmsuIElzIHRoaXMgd29ydGggZnV6emluZz8gQWJzb2x1dGVseSEgVGhlIGNyaXRpY2FsIGNoYW5nZSBpcyB0aGUgcmVvcmRlcmluZyBvZiBgbnNpbV9kZXN0cm95YCBhbmQgYG5zaW1fZGV2X3BvcnRfZGVidWdmc19leGl0YC4gVGhpcyBzZXF1ZW5jZSBtb2RpZmljYXRpb24gaXMgYWxtb3N0IGNlcnRhaW5seSBhZGRyZXNzaW5nIGEgdXNlLWFmdGVyLWZyZWUgb3IgYSBzaW1pbGFyIG1lbW9yeSBzYWZldHkgdnVsbmVyYWJpbGl0eS4gRnV6emluZyBpcyAqZXNzZW50aWFsKiBoZXJlLiBXZSBuZWVkIHRvIGVuc3VyZSB0aGF0IHRoZSBuZXcgb3JkZXIgKmNvcnJlY3RseSogZml4ZXMgdGhlIGlkZW50aWZpZWQgYnVnIGFuZCBkb2Vzbid0IGluYWR2ZXJ0ZW50bHkgaW50cm9kdWNlICpuZXcqIHByb2JsZW1zLlxuXG5JIG5lZWQgdG8gZm9jdXMgbXkgZnV6emluZyBlZmZvcnRzLiBJJ3ZlIGluaXRpYWxseSBpZGVudGlmaWVkIHNvbWUgZm9jdXMgc3ltYm9sczogYF9fbnNpbV9kZXZfcG9ydF9hZGRgLCBgX19uc2ltX2Rldl9wb3J0X2RlbGAsIGBuc2ltX2NyZWF0ZWAsIGBuc2ltX2Rlc3Ryb3lgLCBgbnNpbV9pcHNlY190ZWFyZG93bmAsIGBuc2ltX3BzcF91bmluaXRgLCBhbmQgYG5zaW1fdWRwX3R1bm5lbHNfaW5mb19kZXN0cm95YC4gTGV0IG1lIHJlZmluZSB0aGF0IGZvY3VzLiBBZnRlciBzb21lIHRob3VnaHQsIEknbSBnb2luZyB0byB0cmltIGl0IGRvd24gdG8gYF9fbnNpbV9kZXZfcG9ydF9hZGRgLCBgX19uc2ltX2Rldl9wb3J0X2RlbGAsIGBuc2ltX2NyZWF0ZWAsIGFuZCBgbnNpbV9kZXN0cm95YC4gVGhlc2UgYXJlIHRoZSBjb3JlIGZ1bmN0aW9ucy5cblxuV2FpdCwgYXJlIHRoZXNlIGV2ZW4gaG90IHBhdGhzPyBObywgdGhleSdyZSB0aGUgc2V0dXAvdGVhcmRvd24gZnVuY3Rpb25zIGZvciBuZXRkZXZzaW0gcG9ydHMuIFRoYXQgbWFrZXMgdGhlbSAqcGVyZmVjdCogZm9yIGZ1enppbmcuIFRoZXkncmUgaWRlYWwgdGFyZ2V0cy5cblxuTGV0IG1lIGp1c3QgZG91YmxlLWNoZWNrIHRoYXQgYG5zaW1fZGVzdHJveWAgZnVuY3Rpb24gYWdhaW4uLi4gdG8gbWFrZSBzdXJlIEknbSBub3QgbWlzc2luZyBhbnl0aGluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE2MjUsIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMDksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjdUMTE6NDU6MDIuNTgxNzkzODMyWiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTEzNDI1NDAzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInZvaWQgbnNpbV9kZXN0cm95XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXYuYz0xMTI1PXN0cnVjdCBuZXRkZXZzaW0gKm5zaW1fY3JlYXRlKHN0cnVjdCBuc2ltX2RldiAqbnNpbV9kZXYsXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2LmMtMTE3MS1cXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2LmM6MTE3Mjp2b2lkIG5zaW1fZGVzdHJveShzdHJ1Y3QgbmV0ZGV2c2ltICpucylcXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2LmMtMTE3My17XFxuLS1cXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2c2ltLmg9MTY0PXN0cnVjdCBuZXRkZXZzaW0gKm5zaW1fY3JlYXRlKHN0cnVjdCBuc2ltX2RldiAqbnNpbV9kZXYsXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2c2ltLmgtMTY2LVxcdFxcdFxcdCAgICAgIHU4IHBlcm1fYWRkcltFVEhfQUxFTl0pO1xcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXZzaW0uaDoxNjc6dm9pZCBuc2ltX2Rlc3Ryb3koc3RydWN0IG5ldGRldnNpbSAqbnMpO1xcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXZzaW0uaC0xNjgtYm9vbCBuZXRkZXZfaXNfbnNpbShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjdUMTE6NDU6MDQuNDk1MjI3MjY1WiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM5NTYxOTQ4Nzc1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcyBvbiB0aGlzOlxuXG4qKkFuYWx5emluZyB0aGUgYG5zaW1faXBzZWNfdGVhcmRvd25gIFNjcmlwdCoqXG5cbkFscmlnaHQsIHRpbWUgdG8gZ2V0IHRvIHdvcmsuIEZpcnN0IHRoaW5nJ3MgZmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQncyBnb2luZyBvbiB3aXRoIHRoaXMgYG5zaW1faXBzZWNfdGVhcmRvd25gIHNjcmlwdC4gR2l2ZW4gbXkgZXhwZXJ0aXNlLCBJIGFscmVhZHkgaGF2ZSBhIHByZXR0eSBnb29kIGlkZWEsIGJ1dCBpdCdzIGltcG9ydGFudCB0byBhcHByb2FjaCB0aGlzIHdpdGggYSBjcml0aWNhbCBleWUuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBncmFzcCB0aGUgc3BlY2lmaWNzIG9mIHRoaXMgaW1wbGVtZW50YXRpb24sIGVzcGVjaWFsbHkgY29uc2lkZXJpbmcgdGhlIGNvbnRleHQgb2YgbmV0d29yayBzZWN1cml0eSBhbmQgSVBTZWMuIEknbSBnb2luZyB0byBsb29rIGZvciBrZXkgZWxlbWVudHM6IHdoYXQgcmVzb3VyY2VzIGlzIGl0IHRhcmdldGluZyAodmlydHVhbCBtYWNoaW5lcywgc3BlY2lmaWMgdHVubmVscywgZXRjLik/IFdoYXQgYWN0aW9ucyBpcyBpdCB0YWtpbmcgKGRlbGV0aW5nIGNvbmZpZ3VyYXRpb25zLCBzdG9wcGluZyBkYWVtb25zLCBjbGVhcmluZyByb3V0ZXMpPyBXaGF0IGFyZSB0aGUgcG90ZW50aWFsIHBvaW50cyBvZiBmYWlsdXJlLCBhbmQgaG93IGRvZXMgaXQgaGFuZGxlIHRoZW0/IEFyZSB0aGVyZSBhbnkgb2J2aW91cyBzZWN1cml0eSB2dWxuZXJhYmlsaXRpZXMgcHJlc2VudCAoZS5nLiwgaGFyZGNvZGVkIGNyZWRlbnRpYWxzLCBpbnN1ZmZpY2llbnQgZXJyb3IgaGFuZGxpbmcgdGhhdCBjb3VsZCBsZWFkIHRvIGEgZGVuaWFsLW9mLXNlcnZpY2UsIHVuaW50ZW5kZWQgYWNjZXNzIHJpZ2h0cyk/IEnigJlsbCBuZWVkIHRvIGFzc2VzcyB0aGUgaWRlbXBvdGVuY3kgb2YgdGhlIHNjcmlwdCDigJMgY2FuIEkgcnVuIGl0IG11bHRpcGxlIHRpbWVzIHNhZmVseT8gRmluYWxseSwgSSdsbCBjb25zaWRlciBob3cgaXQgaW50ZWdyYXRlcyBpbnRvIHRoZSBvdmVyYWxsIG5ldHdvcmsgYXJjaGl0ZWN0dXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjY0NiwiT3V0cHV0VG9rZW5zIjoyNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI3VDExOjQ1OjQ0LjA1NzE3OTg3WiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTM3NzIyMTQxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInZvaWQgbnNpbV9pcHNlY190ZWFyZG93blwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9uZXRkZXZzaW0vaXBzZWMuYz0yNzE9dm9pZCBuc2ltX2lwc2VjX2luaXQoc3RydWN0IG5ldGRldnNpbSAqbnMpXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vaXBzZWMuYy0yODctXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2lwc2VjLmM6Mjg4OnZvaWQgbnNpbV9pcHNlY190ZWFyZG93bihzdHJ1Y3QgbmV0ZGV2c2ltICpucylcXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vaXBzZWMuYy0yODkte1xcbi0tXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldnNpbS5oPTQxNz12b2lkIG5zaW1faXBzZWNfaW5pdChzdHJ1Y3QgbmV0ZGV2c2ltICpucyk7XFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldnNpbS5oOjQxODp2b2lkIG5zaW1faXBzZWNfdGVhcmRvd24oc3RydWN0IG5ldGRldnNpbSAqbnMpO1xcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXZzaW0uaC00MTktYm9vbCBuc2ltX2lwc2VjX3R4KHN0cnVjdCBuZXRkZXZzaW0gKm5zLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTtcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXZzaW0uaD00MjE9c3RhdGljIGlubGluZSB2b2lkIG5zaW1faXBzZWNfaW5pdChzdHJ1Y3QgbmV0ZGV2c2ltICpucylcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXZzaW0uaC00MjQtXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldnNpbS5oOjQyNTpzdGF0aWMgaW5saW5lIHZvaWQgbnNpbV9pcHNlY190ZWFyZG93bihzdHJ1Y3QgbmV0ZGV2c2ltICpucylcXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2c2ltLmgtNDI2LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjdUMTE6NDU6NDUuOTk0OTEwNDQyWiIsIlNlcSI6MzEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI5MDY3OTIzMDMyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIGRlbGl2ZXJlZCBhcyBhIGZpcnN0LXBlcnNvbiBzdW1tYXJ5OlxuXG4qKkRpZ2dpbmcgaW50byBgbnNpbV9wc3BfdW5pbml0YCoqXG5cbkFscmlnaHQsIGxldCdzIGdldCBkb3duIHRvIGl0LiBUaW1lIHRvIHBva2UgYXJvdW5kIGBuc2ltX3BzcF91bmluaXRgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgY3VycmVudCBzdGF0ZS4gTXkgZ3V0IGZlZWxpbmcgaXMgdGhhdCB0aGlzIGRlc2VydmVzIGEgY2xvc2VyIGxvb2suIEkndmUgYmVlbiBtZWFuaW5nIHRvIGNoZWNrIHRoaXMgc3BlY2lmaWMgZnVuY3Rpb24gZm9yIGEgd2hpbGUgbm93LCBhbmQgbm93IGlzIGEgZ29vZCB0aW1lIHRvIGRvIHNvLiBJJ20gdGhpbmtpbmcgYWJvdXQgZWRnZSBjYXNlcyBhbmQgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdGllcy4gSSB3YW50IHRvIHBpbnBvaW50IGFueSBwb3RlbnRpYWwgaW5lZmZpY2llbmNpZXMgb3IgdW5mb3Jlc2VlbiBjb25zZXF1ZW5jZXMgb2YgaXRzIGN1cnJlbnQgaW1wbGVtZW50YXRpb24uIFNwZWNpZmljYWxseSwgSSdtIGdvaW5nIHRvIGxvb2sgZm9yIGFyZWFzIHdoZXJlIGluaXRpYWxpemF0aW9uIGlzIGJlaW5nIHNraXBwZWQsIG9yIGluY29ycmVjdGx5IGhhbmRsZWQuIEknbSBlbnZpc2lvbmluZyBzY2VuYXJpb3Mgd2hlcmUgdW5pbml0aWFsaXplZCBtZW1vcnkgb3IgcmVzb3VyY2VzIGNvdWxkIGxlYWQgdG8gaW5zdGFiaWxpdHkgb3IgaW5jb3JyZWN0IGJlaGF2aW9yLiBHb3R0YSBtYWtlIHN1cmUgaXTigJlzIHJvYnVzdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTMyOTEsIk91dHB1dFRva2VucyI6MjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yN1QxMTo0NjoxNS4wNjI4MzcwMTNaIiwiU2VxIjozMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5NTk3ODIxNjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidm9pZCBuc2ltX3BzcF91bmluaXRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldnNpbS5oPTQ0OT1pbnQgbnNpbV9wc3BfaW5pdChzdHJ1Y3QgbmV0ZGV2c2ltICpucyk7XFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldnNpbS5oOjQ1MDp2b2lkIG5zaW1fcHNwX3VuaW5pdChzdHJ1Y3QgbmV0ZGV2c2ltICpucyk7XFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldnNpbS5oLTQ1MS12b2lkIG5zaW1fcHNwX2hhbmRsZV9leHQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHNrYl9leHQgKnBzcF9leHQpO1xcbi0tXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldnNpbS5oPTQ1Nj1zdGF0aWMgaW5saW5lIGludCBuc2ltX3BzcF9pbml0KHN0cnVjdCBuZXRkZXZzaW0gKm5zKSB7IHJldHVybiAwOyB9XFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldnNpbS5oOjQ1NzpzdGF0aWMgaW5saW5lIHZvaWQgbnNpbV9wc3BfdW5pbml0KHN0cnVjdCBuZXRkZXZzaW0gKm5zKSB7fVxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXZzaW0uaC00NTgtc3RhdGljIGlubGluZSBlbnVtIHNrYl9kcm9wX3JlYXNvblxcbi0tXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL3BzcC5jPTIxMz1zdGF0aWMgdm9pZCBfX25zaW1fcHNwX3VuaW5pdChzdHJ1Y3QgbmV0ZGV2c2ltICpucywgYm9vbCB0ZWFyZG93bilcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9wc3AuYy0yMjctXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL3BzcC5jOjIyODp2b2lkIG5zaW1fcHNwX3VuaW5pdChzdHJ1Y3QgbmV0ZGV2c2ltICpucylcXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vcHNwLmMtMjI5LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjdUMTE6NDY6MTcuMDIyNjMwMjMyWiIsIlNlcSI6MzMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjg0ODcwMTMzODgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzIG9uIHRoaXM6XG5cbioqQW5hbHl6aW5nIGBuc2ltX3VkcF90dW5uZWxzX2luZm9fZGVzdHJveWAqKlxuXG5BbHJpZ2h0LCB0aGUgZmlyc3QgdGhpbmcgSSdtIGRvaW5nIGlzIG1ha2luZyBzdXJlIEknbSB6ZXJvaW5nIGluIG9uIGBuc2ltX3VkcF90dW5uZWxzX2luZm9fZGVzdHJveWAuIFRoaXMgZnVuY3Rpb24gbmFtZSBpbW1lZGlhdGVseSBzY3JlYW1zIFwiY2xlYW51cFwiIG9yIFwiZGVzdHJ1Y3Rpb25cIiByZWxhdGVkIHRvIFVEUCB0dW5uZWwgaW5mb3JtYXRpb24gd2l0aGluIHRoZSBgbnNpbWAgY29udGV4dCwgd2hpY2ggSSdtIGFscmVhZHkgZmFtaWxpYXIgd2l0aC4gTXkgaW5pdGlhbCBhc3N1bXB0aW9uIGlzIHRoYXQgdGhpcyBpcyB0aGUgZnVuY3Rpb24gcmVzcG9uc2libGUgZm9yIGZyZWVpbmcgYWxsb2NhdGVkIG1lbW9yeSBvciByZXNvdXJjZXMgYXNzb2NpYXRlZCB3aXRoIGEgc3RydWN0dXJlIG9yIGRhdGEgc2V0IHRoYXQgcmVwcmVzZW50cyBVRFAgdHVubmVscy4gVGhlIFwiaW5mb1wiIHBhcnQgb2YgdGhlIG5hbWUgbWFrZXMgbWUgbGVhbiB0b3dhcmRzIHRoaXMgYmVpbmcgYSBoaWdoLWxldmVsIGZ1bmN0aW9uIHRoYXQgcHJvYmFibHkgaGFuZGxlcyB0aGUgZnJlZWluZyBvZiBvbmUgb3IgbW9yZSBsb3dlci1sZXZlbCBkYXRhIHN0cnVjdHVyZXMuIEkgd2FudCB0byBtYWtlIHN1cmUgSSBhbSBsb29raW5nIGF0IHRoZSBjb3JyZWN0IGZ1bmN0aW9uIGFuZCBub3Qgc29tZSBzaW1pbGFyIHZhcmlhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM4NTgsIk91dHB1dFRva2VucyI6MjYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yN1QxMTo0NjoyNS41MDk2NDY0N1oiLCJTZXEiOjM0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTkyNDQ1OTU5MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ2b2lkIG5zaW1fdWRwX3R1bm5lbHNfaW5mb19kZXN0cm95XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXZzaW0uaD0xNzM9aW50IG5zaW1fdWRwX3R1bm5lbHNfaW5mb19jcmVhdGUoc3RydWN0IG5zaW1fZGV2ICpuc2ltX2RldixcXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2c2ltLmgtMTc0LVxcdFxcdFxcdFxcdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTtcXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2c2ltLmg6MTc1OnZvaWQgbnNpbV91ZHBfdHVubmVsc19pbmZvX2Rlc3Ryb3koc3RydWN0IG5ldF9kZXZpY2UgKmRldik7XFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldnNpbS5oLTE3Ni1cXG4tLVxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS91ZHBfdHVubmVscy5jPTEyNT1pbnQgbnNpbV91ZHBfdHVubmVsc19pbmZvX2NyZWF0ZShzdHJ1Y3QgbnNpbV9kZXYgKm5zaW1fZGV2LFxcbi0tXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL3VkcF90dW5uZWxzLmMtMTg4LVxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS91ZHBfdHVubmVscy5jOjE4OTp2b2lkIG5zaW1fdWRwX3R1bm5lbHNfaW5mb19kZXN0cm95KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL3VkcF90dW5uZWxzLmMtMTkwLXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjdUMTE6NDY6MjcuNDM0MTQxOTAzWiIsIlNlcSI6MzUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM4NzI5OTQxNzkzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIE1vZGlmaWNhdGlvbioqXG5cbk9rYXksIHNvIHRoaXMgaXMgaW50ZXJlc3RpbmcuIEZyb20gd2hhdCBJJ20gc2VlaW5nLCB0aGVzZSBjaGFuZ2VzIGFyZSBjbGVhcmx5IGZ1bmN0aW9uYWwsIGFuZCBxdWl0ZSBpbXBvcnRhbnQgYWN0dWFsbHkuIFRoZXkncmUgdG91Y2hpbmcgdGhlIHRlYXJkb3duIHNlcXVlbmNlIGZvciBuZXRkZXZzaW0gcG9ydHMsIHdoaWNoIGltbWVkaWF0ZWx5IGZsYWdzIFwicG90ZW50aWFsIGZvciBmaXhpbmcgdXNlLWFmdGVyLWZyZWUgYnVnc1wiIGluIGRlYnVnZnMuIEdpdmVuIHRoZSBpbmhlcmVudCByaXNrcyBvZiB0aG9zZSB0eXBlcyBvZiBtZW1vcnkgZXJyb3JzLCB0aGlzIGlzIGRlZmluaXRlbHkgc29tZXRoaW5nIHdvcnRoIHB1cnN1aW5nLiBJJ20gZ29pbmcgdG8gbWFyayB0aGlzIGFzIGBXb3J0aEZ1enppbmc9dHJ1ZWA7IGl0IGhhcyBhIGhpZ2ggcHJvYmFiaWxpdHkgb2YgZXhwb3Npbmcgc29tZXRoaW5nLlxuXG5Ob3csIGxldCBtZSBzZWUgd2hhdCBjb25maWd1cmF0aW9ucyBhcmUgcmVsZXZhbnQuIFRoZSBwcmltYXJ5IG9uZXMgaGVyZSBhcmUgYE5FVERFVlNJTWAsIG5hdHVyYWxseSwgd2hpY2ggaXMgdGhlIGNvcmUgb2YgdGhpcy4gQmV5b25kIHRoYXQsIEkgbmVlZCB0byBrZWVwIGFuIGV5ZSBvbiBgSU5FVF9FU1BfT0ZGTE9BRGAgYW5kIGBJTkVUX1BTUGAsIGFzIHRob3NlIHNlZW0gdG8gYmUgaW5kaXJlY3RseSBpbnZvbHZlZCBpbiB0aGUgYWZmZWN0ZWQgYXJlYXMuXG5cbkZpbmFsbHksIEkgbmVlZCB0byBtYWtlIGEgbWVudGFsIG5vdGUgb2YgdGhlIGNyaXRpY2FsIHN5bWJvbHMgdG8gZm9jdXMgbXkgYXR0ZW50aW9uIG9uIGR1cmluZyBhbmFseXNpcy4gSSBzZWUgYF9fbnNpbV9kZXZfcG9ydF9hZGRgLCBgX19uc2ltX2Rldl9wb3J0X2RlbGAsIGBuc2ltX2NyZWF0ZWAsIGBuc2ltX2Rlc3Ryb3lgLCBgbnNpbV9pcHNlY190ZWFyZG93bmAsIGBuc2ltX3BzcF91bmluaXRgLCBhbmQgYG5zaW1fdWRwX3R1bm5lbHNfaW5mb19kZXN0cm95YC4gVGhvc2UgYXJlIHRoZSBlbnRyeSBwb2ludHMgYW5kIHRlYXJkb3duIGZ1bmN0aW9ucyB0aGF0IGFyZSBsaWtlbHkgdGhlIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoZSBmdWxsIGltcGFjdCBvZiB0aGVzZSBjaGFuZ2VzLiBJJ2xsIG1ha2Ugc3VyZSB0byBwcmlvcml0aXplIHRob3NlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDM1MSwiT3V0cHV0VG9rZW5zIjoyMTgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMzUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjdUMTE6NDc6MDYuMTY0MDg2OTA2WiIsIlNlcSI6MzYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODgxMDU5MzUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5FVERFVlNJTVwiLFxuICAgIFwiSU5FVF9FU1BfT0ZGTE9BRFwiLFxuICAgIFwiSU5FVF9QU1BcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJfX25zaW1fZGV2X3BvcnRfYWRkXCIsXG4gICAgXCJfX25zaW1fZGV2X3BvcnRfZGVsXCIsXG4gICAgXCJuc2ltX2NyZWF0ZVwiLFxuICAgIFwibnNpbV9kZXN0cm95XCIsXG4gICAgXCJuc2ltX2lwc2VjX3RlYXJkb3duXCIsXG4gICAgXCJuc2ltX3BzcF91bmluaXRcIixcbiAgICBcIm5zaW1fdWRwX3R1bm5lbHNfaW5mb19kZXN0cm95XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHRlYXJkb3duIHNlcXVlbmNlIG9mIG5ldGRldnNpbSBwb3J0cywgbW92aW5nIHRoZSBkZXN0cnVjdGlvbiBvZiB0aGUgbmV0ZGV2c2ltIGluc3RhbmNlIChgbnNpbV9kZXN0cm95YCkgYWZ0ZXIgdGhlIHJlY3Vyc2l2ZSByZW1vdmFsIG9mIGl0cyBkZWJ1Z2ZzIGRpcmVjdG9yeS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgZml4ZXMgcG90ZW50aWFsIHVzZS1hZnRlci1mcmVlIGlzc3VlcyB3aGVuIGRlYnVnZnMgZmlsZXMgYXJlIGFjY2Vzc2VkIGNvbmN1cnJlbnRseSB3aXRoIHBvcnQgZGVsZXRpb24uIEZ1enppbmcgdGhlIHNldHVwIGFuZCB0ZWFyZG93biBwYXRocyBvZiBuZXRkZXZzaW0gcG9ydHMgaXMgaW1wb3J0YW50IHRvIGVuc3VyZSB0aGUgbmV3IHNlcXVlbmNlIGlzIGNvcnJlY3QgYW5kIGRvZXNuJ3QgaW50cm9kdWNlIHJlZ3Jlc3Npb25zLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5FVERFVlNJTVwiLFxuICAgIFwiSU5FVF9FU1BfT0ZGTE9BRFwiLFxuICAgIFwiSU5FVF9QU1BcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJfX25zaW1fZGV2X3BvcnRfYWRkXCIsXG4gICAgXCJfX25zaW1fZGV2X3BvcnRfZGVsXCIsXG4gICAgXCJuc2ltX2NyZWF0ZVwiLFxuICAgIFwibnNpbV9kZXN0cm95XCIsXG4gICAgXCJuc2ltX2lwc2VjX3RlYXJkb3duXCIsXG4gICAgXCJuc2ltX3BzcF91bmluaXRcIixcbiAgICBcIm5zaW1fdWRwX3R1bm5lbHNfaW5mb19kZXN0cm95XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHRlYXJkb3duIHNlcXVlbmNlIG9mIG5ldGRldnNpbSBwb3J0cywgbW92aW5nIHRoZSBkZXN0cnVjdGlvbiBvZiB0aGUgbmV0ZGV2c2ltIGluc3RhbmNlIChgbnNpbV9kZXN0cm95YCkgYWZ0ZXIgdGhlIHJlY3Vyc2l2ZSByZW1vdmFsIG9mIGl0cyBkZWJ1Z2ZzIGRpcmVjdG9yeS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgZml4ZXMgcG90ZW50aWFsIHVzZS1hZnRlci1mcmVlIGlzc3VlcyB3aGVuIGRlYnVnZnMgZmlsZXMgYXJlIGFjY2Vzc2VkIGNvbmN1cnJlbnRseSB3aXRoIHBvcnQgZGVsZXRpb24uIEZ1enppbmcgdGhlIHNldHVwIGFuZCB0ZWFyZG93biBwYXRocyBvZiBuZXRkZXZzaW0gcG9ydHMgaXMgaW1wb3J0YW50IHRvIGVuc3VyZSB0aGUgbmV3IHNlcXVlbmNlIGlzIGNvcnJlY3QgYW5kIGRvZXNuJ3QgaW50cm9kdWNlIHJlZ3Jlc3Npb25zLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowkvj5q[1] Phase: Succeeded StartedAt: 2026-06-27 11:47:27 +0000 UTC FinishedAt: 2026-06-27 11:47:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkvj5q[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-06-27 11:47:27 +0000 UTC FinishedAt: 2026-06-27 11:47:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkvj5q[2] Phase: Succeeded StartedAt: 2026-06-27 11:47:27 +0000 UTC FinishedAt: 2026-06-27 15:37:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkvj5q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8cd9520d35a6c38db6567e97dd93b1f11f185dc6","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","INET_ESP_OFFLOAD","INET_PSP"],"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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["__nsim_dev_port_add","__nsim_dev_port_del","nsim_create","nsim_destroy","nsim_ipsec_teardown","nsim_psp_uninit","nsim_udp_tunnels_info_destroy"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8cd9520d35a6c38db6567e97dd93b1f11f185dc6","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","INET_ESP_OFFLOAD","INET_PSP"],"series_id":"7490d2b1-d4fd-4131-b5c7-d1040ee92603","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-27 11:47:27 +0000 UTC FinishedAt: 2026-06-27 15:37:18 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"8cd9520d35a6c38db6567e97dd93b1f11f185dc6","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","INET_ESP_OFFLOAD","INET_PSP"],"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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["__nsim_dev_port_add","__nsim_dev_port_del","nsim_create","nsim_destroy","nsim_ipsec_teardown","nsim_psp_uninit","nsim_udp_tunnels_info_destroy"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"8cd9520d35a6c38db6567e97dd93b1f11f185dc6","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","INET_ESP_OFFLOAD","INET_PSP"],"series_id":"7490d2b1-d4fd-4131-b5c7-d1040ee92603","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-workflowkvj5q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8cd9520d35a6c38db6567e97dd93b1f11f185dc6","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","INET_ESP_OFFLOAD","INET_PSP"],"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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["__nsim_dev_port_add","__nsim_dev_port_del","nsim_create","nsim_destroy","nsim_ipsec_teardown","nsim_psp_uninit","nsim_udp_tunnels_info_destroy"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8cd9520d35a6c38db6567e97dd93b1f11f185dc6","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","INET_ESP_OFFLOAD","INET_PSP"],"series_id":"7490d2b1-d4fd-4131-b5c7-d1040ee92603","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-27 11:47:27 +0000 UTC FinishedAt: 2026-06-27 11:47:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkvj5q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8cd9520d35a6c38db6567e97dd93b1f11f185dc6","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","INET_ESP_OFFLOAD","INET_PSP"],"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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["__nsim_dev_port_add","__nsim_dev_port_del","nsim_create","nsim_destroy","nsim_ipsec_teardown","nsim_psp_uninit","nsim_udp_tunnels_info_destroy"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8cd9520d35a6c38db6567e97dd93b1f11f185dc6","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","INET_ESP_OFFLOAD","INET_PSP"],"series_id":"7490d2b1-d4fd-4131-b5c7-d1040ee92603","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-27 11:47:27 +0000 UTC FinishedAt: 2026-06-27 11:47:34 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"8cd9520d35a6c38db6567e97dd93b1f11f185dc6","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","INET_ESP_OFFLOAD","INET_PSP"],"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-workflowkvj5q/series-workflowkvj5q-convert-artifact-880759009/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowkvj5q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8cd9520d35a6c38db6567e97dd93b1f11f185dc6","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","INET_ESP_OFFLOAD","INET_PSP"],"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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["__nsim_dev_port_add","__nsim_dev_port_del","nsim_create","nsim_destroy","nsim_ipsec_teardown","nsim_psp_uninit","nsim_udp_tunnels_info_destroy"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8cd9520d35a6c38db6567e97dd93b1f11f185dc6","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","INET_ESP_OFFLOAD","INET_PSP"],"series_id":"7490d2b1-d4fd-4131-b5c7-d1040ee92603","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-27 11:47:38 +0000 UTC FinishedAt: 2026-06-27 12:09:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkvj5q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8cd9520d35a6c38db6567e97dd93b1f11f185dc6","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","INET_ESP_OFFLOAD","INET_PSP"],"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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["__nsim_dev_port_add","__nsim_dev_port_del","nsim_create","nsim_destroy","nsim_ipsec_teardown","nsim_psp_uninit","nsim_udp_tunnels_info_destroy"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8cd9520d35a6c38db6567e97dd93b1f11f185dc6","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","INET_ESP_OFFLOAD","INET_PSP"],"series_id":"7490d2b1-d4fd-4131-b5c7-d1040ee92603","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-27 11:47:38 +0000 UTC FinishedAt: 2026-06-27 12:09:32 +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:*ae04ab9d-9bb6-4aa8-ae84-f29c85274dbd,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-workflowkvj5q/series-workflowkvj5q-convert-artifact-880759009/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": "80e51fe8-2c7e-4af5-aab2-e4737734335d", "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-workflowkvj5q/series-workflowkvj5q-build-action-1967070735/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowkvj5q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8cd9520d35a6c38db6567e97dd93b1f11f185dc6","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","INET_ESP_OFFLOAD","INET_PSP"],"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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["__nsim_dev_port_add","__nsim_dev_port_del","nsim_create","nsim_destroy","nsim_ipsec_teardown","nsim_psp_uninit","nsim_udp_tunnels_info_destroy"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8cd9520d35a6c38db6567e97dd93b1f11f185dc6","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","INET_ESP_OFFLOAD","INET_PSP"],"series_id":"7490d2b1-d4fd-4131-b5c7-d1040ee92603","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-27 11:47:38 +0000 UTC FinishedAt: 2026-06-27 12:09:22 +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:*ae04ab9d-9bb6-4aa8-ae84-f29c85274dbd,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-workflowkvj5q/series-workflowkvj5q-convert-artifact-880759009/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": "80e51fe8-2c7e-4af5-aab2-e4737734335d", "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-workflowkvj5q/series-workflowkvj5q-build-action-1967070735/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowkvj5q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8cd9520d35a6c38db6567e97dd93b1f11f185dc6","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","INET_ESP_OFFLOAD","INET_PSP"],"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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["__nsim_dev_port_add","__nsim_dev_port_del","nsim_create","nsim_destroy","nsim_ipsec_teardown","nsim_psp_uninit","nsim_udp_tunnels_info_destroy"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8cd9520d35a6c38db6567e97dd93b1f11f185dc6","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","INET_ESP_OFFLOAD","INET_PSP"],"series_id":"7490d2b1-d4fd-4131-b5c7-d1040ee92603","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-27 12:09:32 +0000 UTC FinishedAt: 2026-06-27 12:09:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkvj5q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8cd9520d35a6c38db6567e97dd93b1f11f185dc6","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","INET_ESP_OFFLOAD","INET_PSP"],"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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["__nsim_dev_port_add","__nsim_dev_port_del","nsim_create","nsim_destroy","nsim_ipsec_teardown","nsim_psp_uninit","nsim_udp_tunnels_info_destroy"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8cd9520d35a6c38db6567e97dd93b1f11f185dc6","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","INET_ESP_OFFLOAD","INET_PSP"],"series_id":"7490d2b1-d4fd-4131-b5c7-d1040ee92603","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-27 12:09:32 +0000 UTC FinishedAt: 2026-06-27 12:09:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkvj5q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8cd9520d35a6c38db6567e97dd93b1f11f185dc6","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","INET_ESP_OFFLOAD","INET_PSP"],"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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["__nsim_dev_port_add","__nsim_dev_port_del","nsim_create","nsim_destroy","nsim_ipsec_teardown","nsim_psp_uninit","nsim_udp_tunnels_info_destroy"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8cd9520d35a6c38db6567e97dd93b1f11f185dc6","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","INET_ESP_OFFLOAD","INET_PSP"],"series_id":"7490d2b1-d4fd-4131-b5c7-d1040ee92603","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-27 12:09:32 +0000 UTC FinishedAt: 2026-06-27 12:09:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkvj5q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8cd9520d35a6c38db6567e97dd93b1f11f185dc6","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","INET_ESP_OFFLOAD","INET_PSP"],"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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["__nsim_dev_port_add","__nsim_dev_port_del","nsim_create","nsim_destroy","nsim_ipsec_teardown","nsim_psp_uninit","nsim_udp_tunnels_info_destroy"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8cd9520d35a6c38db6567e97dd93b1f11f185dc6","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","INET_ESP_OFFLOAD","INET_PSP"],"series_id":"7490d2b1-d4fd-4131-b5c7-d1040ee92603","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-27 12:09:32 +0000 UTC FinishedAt: 2026-06-27 12:09:38 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"8cd9520d35a6c38db6567e97dd93b1f11f185dc6","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","INET_ESP_OFFLOAD","INET_PSP"],"series_id":"7490d2b1-d4fd-4131-b5c7-d1040ee92603","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-workflowkvj5q/series-workflowkvj5q-convert-artifact-494623028/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowkvj5q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8cd9520d35a6c38db6567e97dd93b1f11f185dc6","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","INET_ESP_OFFLOAD","INET_PSP"],"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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["__nsim_dev_port_add","__nsim_dev_port_del","nsim_create","nsim_destroy","nsim_ipsec_teardown","nsim_psp_uninit","nsim_udp_tunnels_info_destroy"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8cd9520d35a6c38db6567e97dd93b1f11f185dc6","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","INET_ESP_OFFLOAD","INET_PSP"],"series_id":"7490d2b1-d4fd-4131-b5c7-d1040ee92603","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-27 12:09:42 +0000 UTC FinishedAt: 2026-06-27 12:11:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkvj5q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8cd9520d35a6c38db6567e97dd93b1f11f185dc6","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","INET_ESP_OFFLOAD","INET_PSP"],"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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["__nsim_dev_port_add","__nsim_dev_port_del","nsim_create","nsim_destroy","nsim_ipsec_teardown","nsim_psp_uninit","nsim_udp_tunnels_info_destroy"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8cd9520d35a6c38db6567e97dd93b1f11f185dc6","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","INET_ESP_OFFLOAD","INET_PSP"],"series_id":"7490d2b1-d4fd-4131-b5c7-d1040ee92603","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-27 12:09:42 +0000 UTC FinishedAt: 2026-06-27 12:11:29 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*80e51fe8-2c7e-4af5-aab2-e4737734335d,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-workflowkvj5q/series-workflowkvj5q-build-action-1967070735/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-workflowkvj5q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8cd9520d35a6c38db6567e97dd93b1f11f185dc6","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","INET_ESP_OFFLOAD","INET_PSP"],"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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["__nsim_dev_port_add","__nsim_dev_port_del","nsim_create","nsim_destroy","nsim_ipsec_teardown","nsim_psp_uninit","nsim_udp_tunnels_info_destroy"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8cd9520d35a6c38db6567e97dd93b1f11f185dc6","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","INET_ESP_OFFLOAD","INET_PSP"],"series_id":"7490d2b1-d4fd-4131-b5c7-d1040ee92603","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-27 12:11:39 +0000 UTC FinishedAt: 2026-06-27 12:11:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkvj5q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8cd9520d35a6c38db6567e97dd93b1f11f185dc6","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","INET_ESP_OFFLOAD","INET_PSP"],"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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["__nsim_dev_port_add","__nsim_dev_port_del","nsim_create","nsim_destroy","nsim_ipsec_teardown","nsim_psp_uninit","nsim_udp_tunnels_info_destroy"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8cd9520d35a6c38db6567e97dd93b1f11f185dc6","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","INET_ESP_OFFLOAD","INET_PSP"],"series_id":"7490d2b1-d4fd-4131-b5c7-d1040ee92603","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-27 12:11:39 +0000 UTC FinishedAt: 2026-06-27 12:11:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkvj5q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8cd9520d35a6c38db6567e97dd93b1f11f185dc6","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","INET_ESP_OFFLOAD","INET_PSP"],"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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["__nsim_dev_port_add","__nsim_dev_port_del","nsim_create","nsim_destroy","nsim_ipsec_teardown","nsim_psp_uninit","nsim_udp_tunnels_info_destroy"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8cd9520d35a6c38db6567e97dd93b1f11f185dc6","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","INET_ESP_OFFLOAD","INET_PSP"],"series_id":"7490d2b1-d4fd-4131-b5c7-d1040ee92603","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-27 12:11:39 +0000 UTC FinishedAt: 2026-06-27 12:33:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkvj5q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8cd9520d35a6c38db6567e97dd93b1f11f185dc6","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","INET_ESP_OFFLOAD","INET_PSP"],"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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["__nsim_dev_port_add","__nsim_dev_port_del","nsim_create","nsim_destroy","nsim_ipsec_teardown","nsim_psp_uninit","nsim_udp_tunnels_info_destroy"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8cd9520d35a6c38db6567e97dd93b1f11f185dc6","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","INET_ESP_OFFLOAD","INET_PSP"],"series_id":"7490d2b1-d4fd-4131-b5c7-d1040ee92603","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-27 12:11:39 +0000 UTC FinishedAt: 2026-06-27 12:33:48 +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:*ae04ab9d-9bb6-4aa8-ae84-f29c85274dbd,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-workflowkvj5q/series-workflowkvj5q-convert-artifact-494623028/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": "df638374-b008-45eb-8990-92421d9e59bd", "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-workflowkvj5q/series-workflowkvj5q-build-action-2378545920/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowkvj5q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8cd9520d35a6c38db6567e97dd93b1f11f185dc6","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","INET_ESP_OFFLOAD","INET_PSP"],"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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["__nsim_dev_port_add","__nsim_dev_port_del","nsim_create","nsim_destroy","nsim_ipsec_teardown","nsim_psp_uninit","nsim_udp_tunnels_info_destroy"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8cd9520d35a6c38db6567e97dd93b1f11f185dc6","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","INET_ESP_OFFLOAD","INET_PSP"],"series_id":"7490d2b1-d4fd-4131-b5c7-d1040ee92603","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-27 12:11:39 +0000 UTC FinishedAt: 2026-06-27 12:33:38 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*ae04ab9d-9bb6-4aa8-ae84-f29c85274dbd,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-workflowkvj5q/series-workflowkvj5q-convert-artifact-494623028/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": "df638374-b008-45eb-8990-92421d9e59bd", "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-workflowkvj5q/series-workflowkvj5q-build-action-2378545920/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowkvj5q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8cd9520d35a6c38db6567e97dd93b1f11f185dc6","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","INET_ESP_OFFLOAD","INET_PSP"],"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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["__nsim_dev_port_add","__nsim_dev_port_del","nsim_create","nsim_destroy","nsim_ipsec_teardown","nsim_psp_uninit","nsim_udp_tunnels_info_destroy"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8cd9520d35a6c38db6567e97dd93b1f11f185dc6","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","INET_ESP_OFFLOAD","INET_PSP"],"series_id":"7490d2b1-d4fd-4131-b5c7-d1040ee92603","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-27 12:33:48 +0000 UTC FinishedAt: 2026-06-27 12:33:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkvj5q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8cd9520d35a6c38db6567e97dd93b1f11f185dc6","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","INET_ESP_OFFLOAD","INET_PSP"],"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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["__nsim_dev_port_add","__nsim_dev_port_del","nsim_create","nsim_destroy","nsim_ipsec_teardown","nsim_psp_uninit","nsim_udp_tunnels_info_destroy"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8cd9520d35a6c38db6567e97dd93b1f11f185dc6","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","INET_ESP_OFFLOAD","INET_PSP"],"series_id":"7490d2b1-d4fd-4131-b5c7-d1040ee92603","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-27 12:33:48 +0000 UTC FinishedAt: 2026-06-27 12:33:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkvj5q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8cd9520d35a6c38db6567e97dd93b1f11f185dc6","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","INET_ESP_OFFLOAD","INET_PSP"],"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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["__nsim_dev_port_add","__nsim_dev_port_del","nsim_create","nsim_destroy","nsim_ipsec_teardown","nsim_psp_uninit","nsim_udp_tunnels_info_destroy"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8cd9520d35a6c38db6567e97dd93b1f11f185dc6","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","INET_ESP_OFFLOAD","INET_PSP"],"series_id":"7490d2b1-d4fd-4131-b5c7-d1040ee92603","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-27 12:33:48 +0000 UTC FinishedAt: 2026-06-27 12:35:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkvj5q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8cd9520d35a6c38db6567e97dd93b1f11f185dc6","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","INET_ESP_OFFLOAD","INET_PSP"],"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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["__nsim_dev_port_add","__nsim_dev_port_del","nsim_create","nsim_destroy","nsim_ipsec_teardown","nsim_psp_uninit","nsim_udp_tunnels_info_destroy"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8cd9520d35a6c38db6567e97dd93b1f11f185dc6","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","INET_ESP_OFFLOAD","INET_PSP"],"series_id":"7490d2b1-d4fd-4131-b5c7-d1040ee92603","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-27 12:33:48 +0000 UTC FinishedAt: 2026-06-27 12:35:36 +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:*df638374-b008-45eb-8990-92421d9e59bd,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-workflowkvj5q/series-workflowkvj5q-build-action-2378545920/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-workflowkvj5q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8cd9520d35a6c38db6567e97dd93b1f11f185dc6","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","INET_ESP_OFFLOAD","INET_PSP"],"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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["__nsim_dev_port_add","__nsim_dev_port_del","nsim_create","nsim_destroy","nsim_ipsec_teardown","nsim_psp_uninit","nsim_udp_tunnels_info_destroy"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8cd9520d35a6c38db6567e97dd93b1f11f185dc6","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","INET_ESP_OFFLOAD","INET_PSP"],"series_id":"7490d2b1-d4fd-4131-b5c7-d1040ee92603","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-27 12:35:46 +0000 UTC FinishedAt: 2026-06-27 15:37:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkvj5q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8cd9520d35a6c38db6567e97dd93b1f11f185dc6","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","INET_ESP_OFFLOAD","INET_PSP"],"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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["__nsim_dev_port_add","__nsim_dev_port_del","nsim_create","nsim_destroy","nsim_ipsec_teardown","nsim_psp_uninit","nsim_udp_tunnels_info_destroy"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8cd9520d35a6c38db6567e97dd93b1f11f185dc6","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","INET_ESP_OFFLOAD","INET_PSP"],"series_id":"7490d2b1-d4fd-4131-b5c7-d1040ee92603","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-27 12:35:46 +0000 UTC FinishedAt: 2026-06-27 15:37:18 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["__nsim_dev_port_add","__nsim_dev_port_del","nsim_create","nsim_destroy","nsim_ipsec_teardown","nsim_psp_uninit","nsim_udp_tunnels_info_destroy"],"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:*80e51fe8-2c7e-4af5-aab2-e4737734335d,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*df638374-b008-45eb-8990-92421d9e59bd,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-workflowkvj5q/series-workflowkvj5q-build-action-1967070735/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-workflowkvj5q/series-workflowkvj5q-build-action-2378545920/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowkvj5q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8cd9520d35a6c38db6567e97dd93b1f11f185dc6","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","INET_ESP_OFFLOAD","INET_PSP"],"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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["__nsim_dev_port_add","__nsim_dev_port_del","nsim_create","nsim_destroy","nsim_ipsec_teardown","nsim_psp_uninit","nsim_udp_tunnels_info_destroy"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8cd9520d35a6c38db6567e97dd93b1f11f185dc6","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","INET_ESP_OFFLOAD","INET_PSP"],"series_id":"7490d2b1-d4fd-4131-b5c7-d1040ee92603","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-27 12:35:46 +0000 UTC FinishedAt: 2026-06-27 12:35:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkvj5q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8cd9520d35a6c38db6567e97dd93b1f11f185dc6","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","INET_ESP_OFFLOAD","INET_PSP"],"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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["__nsim_dev_port_add","__nsim_dev_port_del","nsim_create","nsim_destroy","nsim_ipsec_teardown","nsim_psp_uninit","nsim_udp_tunnels_info_destroy"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8cd9520d35a6c38db6567e97dd93b1f11f185dc6","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","INET_ESP_OFFLOAD","INET_PSP"],"series_id":"7490d2b1-d4fd-4131-b5c7-d1040ee92603","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-27 12:35:46 +0000 UTC FinishedAt: 2026-06-27 12:35:52 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["__nsim_dev_port_add","__nsim_dev_port_del","nsim_create","nsim_destroy","nsim_ipsec_teardown","nsim_psp_uninit","nsim_udp_tunnels_info_destroy"],"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-workflowkvj5q/series-workflowkvj5q-convert-artifact-2992155485/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowkvj5q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8cd9520d35a6c38db6567e97dd93b1f11f185dc6","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","INET_ESP_OFFLOAD","INET_PSP"],"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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["__nsim_dev_port_add","__nsim_dev_port_del","nsim_create","nsim_destroy","nsim_ipsec_teardown","nsim_psp_uninit","nsim_udp_tunnels_info_destroy"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8cd9520d35a6c38db6567e97dd93b1f11f185dc6","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","INET_ESP_OFFLOAD","INET_PSP"],"series_id":"7490d2b1-d4fd-4131-b5c7-d1040ee92603","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-27 12:35:46 +0000 UTC FinishedAt: 2026-06-27 12:35:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkvj5q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8cd9520d35a6c38db6567e97dd93b1f11f185dc6","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","INET_ESP_OFFLOAD","INET_PSP"],"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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["__nsim_dev_port_add","__nsim_dev_port_del","nsim_create","nsim_destroy","nsim_ipsec_teardown","nsim_psp_uninit","nsim_udp_tunnels_info_destroy"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8cd9520d35a6c38db6567e97dd93b1f11f185dc6","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","INET_ESP_OFFLOAD","INET_PSP"],"series_id":"7490d2b1-d4fd-4131-b5c7-d1040ee92603","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-27 12:35:46 +0000 UTC FinishedAt: 2026-06-27 12:35:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkvj5q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8cd9520d35a6c38db6567e97dd93b1f11f185dc6","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","INET_ESP_OFFLOAD","INET_PSP"],"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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["__nsim_dev_port_add","__nsim_dev_port_del","nsim_create","nsim_destroy","nsim_ipsec_teardown","nsim_psp_uninit","nsim_udp_tunnels_info_destroy"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8cd9520d35a6c38db6567e97dd93b1f11f185dc6","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","INET_ESP_OFFLOAD","INET_PSP"],"series_id":"7490d2b1-d4fd-4131-b5c7-d1040ee92603","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-27 12:35:46 +0000 UTC FinishedAt: 2026-06-27 12:35:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkvj5q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8cd9520d35a6c38db6567e97dd93b1f11f185dc6","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","INET_ESP_OFFLOAD","INET_PSP"],"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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["__nsim_dev_port_add","__nsim_dev_port_del","nsim_create","nsim_destroy","nsim_ipsec_teardown","nsim_psp_uninit","nsim_udp_tunnels_info_destroy"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8cd9520d35a6c38db6567e97dd93b1f11f185dc6","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","INET_ESP_OFFLOAD","INET_PSP"],"series_id":"7490d2b1-d4fd-4131-b5c7-d1040ee92603","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-27 12:35:56 +0000 UTC FinishedAt: 2026-06-27 15:37:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkvj5q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8cd9520d35a6c38db6567e97dd93b1f11f185dc6","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","INET_ESP_OFFLOAD","INET_PSP"],"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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["__nsim_dev_port_add","__nsim_dev_port_del","nsim_create","nsim_destroy","nsim_ipsec_teardown","nsim_psp_uninit","nsim_udp_tunnels_info_destroy"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8cd9520d35a6c38db6567e97dd93b1f11f185dc6","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","INET_ESP_OFFLOAD","INET_PSP"],"series_id":"7490d2b1-d4fd-4131-b5c7-d1040ee92603","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-27 12:35:56 +0000 UTC FinishedAt: 2026-06-27 15:37:09 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*80e51fe8-2c7e-4af5-aab2-e4737734335d,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*df638374-b008-45eb-8990-92421d9e59bd,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-workflowkvj5q/series-workflowkvj5q-build-action-1967070735/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-workflowkvj5q/series-workflowkvj5q-build-action-2378545920/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-workflowkvj5q/series-workflowkvj5q-convert-artifact-2992155485/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,}