Name: series-workflowctgr6 Phase: Succeeded StartedAt: 2026-07-25 22:18:30 +0000 UTC FinishedAt: 2026-07-26 02:41:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowctgr6[0] Phase: Succeeded StartedAt: 2026-07-25 22:18:30 +0000 UTC FinishedAt: 2026-07-25 22:38:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowctgr6[0].run-triage Phase: Succeeded StartedAt: 2026-07-25 22:18:30 +0000 UTC FinishedAt: 2026-07-25 22:38:01 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "ed6dc972c19ff9ffca504f5739848da4275219e3", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "IPV6", "IPV6_ROUTER_PREF", "IPV6_ROUTE_INFO" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "ed6dc972c19ff9ffca504f5739848da4275219e3", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "IPV6", "IPV6_ROUTER_PREF", "IPV6_ROUTE_INFO" ], "series_id": "8b675e05-5e2a-4eda-b427-9920c5ddb3f9" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "ip6_del_rt_reason", "fib6_del", "inet6_rt_notify", "rt6_route_rcv", "addrconf_prefix_rcv", "ndisc_rcv" ], "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+CgkJCTx0ZD4yMDI2LzA3LzI1IDIyOjM2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lQVjYmIzM0OywKICAgICYjMzQ7SVBWNl9ST1VURVJfUFJFRiYjMzQ7LAogICAgJiMzNDtJUFY2X1JPVVRFX0lORk8mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtpcDZfZGVsX3J0X3JlYXNvbiYjMzQ7LAogICAgJiMzNDtmaWI2X2RlbCYjMzQ7LAogICAgJiMzNDtpbmV0Nl9ydF9ub3RpZnkmIzM0OywKICAgICYjMzQ7cnQ2X3JvdXRlX3JjdiYjMzQ7LAogICAgJiMzNDthZGRyY29uZl9wcmVmaXhfcmN2JiMzNDssCiAgICAmIzM0O25kaXNjX3JjdiYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGEgbmV3IG5ldGxpbmsgYXR0cmlidXRlIGBSVEFfREVMX1JFQVNPTmAgdG8gSVB2NiByb3V0ZSBkZWxldGlvbiBub3RpZmljYXRpb25zIChgUlRNX0RFTFJPVVRFYCkuIEl0IG1vZGlmaWVzIGNvcmUgSVB2NiByb3V0aW5nIGFuZCBuZWlnaGJvciBkaXNjb3ZlcnkgZnVuY3Rpb25zIHRvIHBvcHVsYXRlIHRoaXMgYXR0cmlidXRlIHdoZW4gcm91dGVzIGFyZSBkZWxldGVkIGR1ZSB0byBleHBpcmF0aW9uIG9yIFJvdXRlciBBZHZlcnRpc2VtZW50IChSQSkgd2l0aGRyYXdhbC4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMgdGhhdCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDIyOjM2PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgNGMyYmVmNWVmYTI4YWE2YWZhYjYzMTI1MTUwMWY4YTE2ODhhMTMxNVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTYXQgSnVsIDI1IDIyOjM1OjU4IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0bGluay9zcGVjcy9ydC1yb3V0ZS55YW1sIGIvRG9jdW1lbnRhdGlvbi9uZXRsaW5rL3NwZWNzL3J0LXJvdXRlLnlhbWxcbmluZGV4IDMzMTk1ZGI5Njc0NmM2Li4yMzRmNTAyZmIzNWQ5YyAxMDA2NDRcbi0tLSBhL0RvY3VtZW50YXRpb24vbmV0bGluay9zcGVjcy9ydC1yb3V0ZS55YW1sXG4mIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL25ldGxpbmsvc3BlY3MvcnQtcm91dGUueWFtbFxuQEAgLTc4LDYgJiM0Mzs3OCwxNSBAQCBkZWZpbml0aW9uczpcbiAgICAgICAtXG4gICAgICAgICBuYW1lOiBydGEtdXNlZFxuICAgICAgICAgdHlwZTogdTMyXG4mIzQzOyAgLVxuJiM0MzsgICAgbmFtZTogZGVsLXJlYXNvblxuJiM0MzsgICAgdHlwZTogZW51bVxuJiM0MzsgICAgbmFtZS1wcmVmaXg6IHJ0YS1kZWwtcmVhc29uLVxuJiM0MzsgICAgZW51bS1uYW1lOiBydGEtZGVsLXJlYXNvblxuJiM0MzsgICAgZW50cmllczpcbiYjNDM7ICAgICAgLSB1bnNwZWNcbiYjNDM7ICAgICAgLSBleHBpcmVkXG4mIzQzOyAgICAgIC0gcmEtd2l0aGRyYXduXG4gXG4gYXR0cmlidXRlLXNldHM6XG4gICAtXG5AQCAtMTg1LDYgJiM0MzsxOTQsMTAgQEAgYXR0cmlidXRlLXNldHM6XG4gICAgICAgICB0eXBlOiB1MzJcbiAgICAgICAgIGJ5dGUtb3JkZXI6IGJpZy1lbmRpYW5cbiAgICAgICAgIGRpc3BsYXktaGludDogaGV4XG4mIzQzOyAgICAgIC1cbiYjNDM7ICAgICAgICBuYW1lOiBkZWwtcmVhc29uXG4mIzQzOyAgICAgICAgdHlwZTogdTMyXG4mIzQzOyAgICAgICAgZW51bTogZGVsLXJlYXNvblxuICAgLVxuICAgICBuYW1lOiBtZXRyaWNzXG4gICAgIG5hbWUtcHJlZml4OiBydGF4LVxuQEAgLTI5OSw2ICYjNDM7MzEyLDcgQEAgb3BlcmF0aW9uczpcbiAgICAgICAgICAgICAtIGRwb3J0XG4gICAgICAgICAgICAgLSBuaC1pZFxuICAgICAgICAgICAgIC0gZmxvd2xhYmVsXG4mIzQzOyAgICAgICAgICAgIC0gZGVsLXJlYXNvblxuICAgICAgIGR1bXA6XG4gICAgICAgICByZXF1ZXN0OlxuICAgICAgICAgICB2YWx1ZTogMjZcbkBAIC0zMjIsMyAmIzQzOzMzNiwyMiBAQCBvcGVyYXRpb25zOlxuICAgICAgICAgcmVxdWVzdDpcbiAgICAgICAgICAgdmFsdWU6IDI1XG4gICAgICAgICAgIGF0dHJpYnV0ZXM6ICphbGwtcm91dGUtYXR0cnNcbiYjNDM7ICAgIC1cbiYjNDM7ICAgICAgbmFtZTogbmV3cm91dGUtbnRmXG4mIzQzOyAgICAgIGRvYzogTm90aWZpY2F0aW9uIGFib3V0IGEgY3JlYXRlZCByb3V0ZS5cbiYjNDM7ICAgICAgdmFsdWU6IDI0XG4mIzQzOyAgICAgIG5vdGlmeTogZ2V0cm91dGVcbiYjNDM7ICAgIC1cbiYjNDM7ICAgICAgbmFtZTogZGVscm91dGUtbnRmXG4mIzQzOyAgICAgIGRvYzogTm90aWZpY2F0aW9uIGFib3V0IGEgZGVsZXRlZCByb3V0ZS5cbiYjNDM7ICAgICAgdmFsdWU6IDI1XG4mIzQzOyAgICAgIG5vdGlmeTogZ2V0cm91dGVcbiYjNDM7XG4mIzQzO21jYXN0LWdyb3VwczpcbiYjNDM7ICBsaXN0OlxuJiM0MzsgICAgLVxuJiM0MzsgICAgICBuYW1lOiBydG5sZ3JwLWlwdjQtcm91dGVcbiYjNDM7ICAgICAgdmFsdWU6IDdcbiYjNDM7ICAgIC1cbiYjNDM7ICAgICAgbmFtZTogcnRubGdycC1pcHY2LXJvdXRlXG4mIzQzOyAgICAgIHZhbHVlOiAxMVxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2lwNl9maWIuaCBiL2luY2x1ZGUvbmV0L2lwNl9maWIuaFxuaW5kZXggOWNkMjdlMWI5YjY5MjMuLjdjYTBlMjEyNGU3OTYzIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9uZXQvaXA2X2ZpYi5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL25ldC9pcDZfZmliLmhcbkBAIC00NjgsNyAmIzQzOzQ2OCw3IEBAIHZvaWQgZmliNl9jbGVhbl9hbGxfc2tpcF9ub3RpZnkoc3RydWN0IG5ldCAqbmV0LFxuIFxuIGludCBmaWI2X2FkZChzdHJ1Y3QgZmliNl9ub2RlICpyb290LCBzdHJ1Y3QgZmliNl9pbmZvICpydCxcbiBcdCAgICAgc3RydWN0IG5sX2luZm8gKmluZm8sIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjayk7XG4taW50IGZpYjZfZGVsKHN0cnVjdCBmaWI2X2luZm8gKnJ0LCBzdHJ1Y3QgbmxfaW5mbyAqaW5mbyk7XG4mIzQzO2ludCBmaWI2X2RlbChzdHJ1Y3QgZmliNl9pbmZvICpydCwgc3RydWN0IG5sX2luZm8gKmluZm8sIHUzMiBkZWxfcmVhc29uKTtcbiBcbiBzdGF0aWMgaW5saW5lXG4gdm9pZCBydDZfZ2V0X3ByZWZzcmMoY29uc3Qgc3RydWN0IHJ0Nl9pbmZvICpydCwgc3RydWN0IGluNl9hZGRyICphZGRyKVxuQEAgLTUzMSw3ICYjNDM7NTMxLDcgQEAgc3RhdGljIGlubGluZSB2b2lkIGZpYjZfcnRfdXBkYXRlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZpYjZfaW5mbyAqcnQsXG4gfVxuICNlbmRpZlxuIHZvaWQgaW5ldDZfcnRfbm90aWZ5KGludCBldmVudCwgc3RydWN0IGZpYjZfaW5mbyAqcnQsIHN0cnVjdCBubF9pbmZvICppbmZvLFxuLVx0XHQgICAgIHVuc2lnbmVkIGludCBmbGFncyk7XG4mIzQzO1x0XHQgICAgIHVuc2lnbmVkIGludCBmbGFncywgdTMyIGRlbF9yZWFzb24pO1xuIFxuIHZvaWQgZmliNl9hZ2VfZXhjZXB0aW9ucyhzdHJ1Y3QgZmliNl9pbmZvICpydCwgc3RydWN0IGZpYjZfZ2NfYXJncyAqZ2NfYXJncyxcbiBcdFx0XHQgdW5zaWduZWQgbG9uZyBub3cpO1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2lwNl9yb3V0ZS5oIGIvaW5jbHVkZS9uZXQvaXA2X3JvdXRlLmhcbmluZGV4IDA5ZmZlMGYxM2NlNzUyLi45OGYxNjg0ZmUzNzhjYyAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbmV0L2lwNl9yb3V0ZS5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL25ldC9pcDZfcm91dGUuaFxuQEAgLTEyOCw2ICYjNDM7MTI4LDggQEAgaW50IGlwNl9yb3V0ZV9hZGQoc3RydWN0IGZpYjZfY29uZmlnICpjZmcsIGdmcF90IGdmcF9mbGFncyxcbiBpbnQgaXA2X2luc19ydChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBmaWI2X2luZm8gKmY2aSk7XG4gI2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVjYpXG4gaW50IGlwNl9kZWxfcnQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZmliNl9pbmZvICpmNmksIGJvb2wgc2tpcF9ub3RpZnkpO1xuJiM0MztpbnQgaXA2X2RlbF9ydF9yZWFzb24oc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZmliNl9pbmZvICpmNmksIGJvb2wgc2tpcF9ub3RpZnksXG4mIzQzO1x0XHQgICAgICB1MzIgZGVsX3JlYXNvbik7XG4gI2Vsc2VcbiBzdGF0aWMgaW5saW5lIGludCBpcDZfZGVsX3J0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZpYjZfaW5mbyAqZjZpLFxuIFx0XHRcdCAgICAgYm9vbCBza2lwX25vdGlmeSlcbmRpZmYgLS1naXQgYS9pbmNsdWRlL3VhcGkvbGludXgvcnRuZXRsaW5rLmggYi9pbmNsdWRlL3VhcGkvbGludXgvcnRuZXRsaW5rLmhcbmluZGV4IDI3MjY1ZmQzMWU1ZmM5Li5mZTAwZTYyNGYzYzNhYSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvdWFwaS9saW51eC9ydG5ldGxpbmsuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS91YXBpL2xpbnV4L3J0bmV0bGluay5oXG5AQCAtMzk5LDYgJiM0MzszOTksNyBAQCBlbnVtIHJ0YXR0cl90eXBlX3Qge1xuIFx0UlRBX0RQT1JULFxuIFx0UlRBX05IX0lELFxuIFx0UlRBX0ZMT1dMQUJFTCxcbiYjNDM7XHRSVEFfREVMX1JFQVNPTixcbiBcdF9fUlRBX01BWFxuIH07XG4gXG5AQCAtNDA3LDYgJiM0Mzs0MDgsMjIgQEAgZW51bSBydGF0dHJfdHlwZV90IHtcbiAjZGVmaW5lIFJUTV9SVEEocikgICgoc3RydWN0IHJ0YXR0ciopKCgoY2hhciopKHIpKSAmIzQzOyBOTE1TR19BTElHTihzaXplb2Yoc3RydWN0IHJ0bXNnKSkpKVxuICNkZWZpbmUgUlRNX1BBWUxPQUQobikgTkxNU0dfUEFZTE9BRChuLHNpemVvZihzdHJ1Y3QgcnRtc2cpKVxuIFxuJiM0MzsvKiBSVEFfREVMX1JFQVNPTjogd2h5IHRoZSBrZXJuZWwgZGVsZXRlZCB0aGUgcm91dGUuIHUzMi5cbiYjNDM7ICogRW1pdHRlZCBvbmx5IG9uIFJUTV9ERUxST1VURSBub3RpZmljYXRpb25zLCBhbmQgb25seSB3aGVuIHRoZSBkZWxldGlvblxuJiM0MzsgKiBwYXRoIHJlY29yZHMgYSBjYXVzZS4gQWJzZW5jZSBtZWFucyBlaXRoZXIgYW4gb2xkZXIga2VybmVsIG9yIGFcbiYjNDM7ICogZGVsZXRpb24gcGF0aCB0aGF0IGRvZXMgbm90ICh5ZXQpIHJlY29yZCBpdHMgY2F1c2UgLSBjb25zdW1lcnMgbXVzdFxuJiM0MzsgKiB0cmVhdCBcJiMzNDthYnNlbnRcJiMzNDsgYW5kIFwmIzM0O3Vuc3BlY1wmIzM0OyBpZGVudGljYWxseS4gTmV3IGNhdXNlcyBtYXkgYmUgYXBwZW5kZWQuXG4mIzQzOyAqIEN1cnJlbnRseSBvbmx5IElQdjYgZGVsZXRpb24gcGF0aHMgcmVjb3JkIGEgY2F1c2UuXG4mIzQzOyAqL1xuJiM0MztlbnVtIHJ0YV9kZWxfcmVhc29uIHtcbiYjNDM7XHRSVEFfREVMX1JFQVNPTl9VTlNQRUMsXHRcdC8qIGNhdXNlIG5vdCByZWNvcmRlZCAqL1xuJiM0MztcdFJUQV9ERUxfUkVBU09OX0VYUElSRUQsXHRcdC8qIFJURl9FWFBJUkVTIGxpZmV0aW1lIHJhbiBvdXQgKEdDKSAqL1xuJiM0MztcdFJUQV9ERUxfUkVBU09OX1JBX1dJVEhEUkFXTixcdC8qIHplcm8tbGlmZXRpbWUgUkEgLyBQSU8gLyBSSU8gKi9cbiYjNDM7XHRfX1JUQV9ERUxfUkVBU09OX01BWFxuJiM0Mzt9O1xuJiM0MztcbiYjNDM7I2RlZmluZSBSVEFfREVMX1JFQVNPTl9NQVggKF9fUlRBX0RFTF9SRUFTT05fTUFYIC0gMSlcbiYjNDM7XG4gLyogUlRNX01VTFRJUEFUSCAtLS0gYXJyYXkgb2Ygc3RydWN0IHJ0bmV4dGhvcC5cbiAgKlxuICAqIFwmIzM0O3N0cnVjdCBydG5leHRob3BcJiMzNDsgZGVzY3JpYmVzIGFsbCBuZWNlc3NhcnkgbmV4dGhvcCBpbmZvcm1hdGlvbixcbmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9hZGRyY29uZi5jIGIvbmV0L2lwdjYvYWRkcmNvbmYuY1xuaW5kZXggZjFmZTllZGUxZWRiMzcuLjFjYTlkODJiNTcyMWU2IDEwMDY0NFxuLS0tIGEvbmV0L2lwdjYvYWRkcmNvbmYuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjYvYWRkcmNvbmYuY1xuQEAgLTI4NzQsNyAmIzQzOzI4NzQsOCBAQCB2b2lkIGFkZHJjb25mX3ByZWZpeF9yY3Yoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTggKm9wdCwgaW50IGxlbiwgYm9vbCBzbGxhbylcbiBcdFx0aWYgKHJ0KSB7XG4gXHRcdFx0LyogQXV0b2NvbmYgcHJlZml4IHJvdXRlICovXG4gXHRcdFx0aWYgKHZhbGlkX2xmdCA9PSAwKSB7XG4tXHRcdFx0XHRpcDZfZGVsX3J0KG5ldCwgcnQsIGZhbHNlKTtcbiYjNDM7XHRcdFx0XHRpcDZfZGVsX3J0X3JlYXNvbihuZXQsIHJ0LCBmYWxzZSxcbiYjNDM7XHRcdFx0XHRcdFx0ICBSVEFfREVMX1JFQVNPTl9SQV9XSVRIRFJBV04pO1xuIFx0XHRcdFx0cnQgPSBOVUxMO1xuIFx0XHRcdH0gZWxzZSB7XG4gXHRcdFx0XHR0YWJsZSA9IHJ0LVx1MDAzZWZpYjZfdGFibGU7XG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjYvaXA2X2ZpYi5jIGIvbmV0L2lwdjYvaXA2X2ZpYi5jXG5pbmRleCBhMTMwY2RmYWViZmJlZS4uMzJiOWEwMDk1NmEwOTIgMTAwNjQ0XG4tLS0gYS9uZXQvaXB2Ni9pcDZfZmliLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY2L2lwNl9maWIuY1xuQEAgLTEyODYsNyAmIzQzOzEyODYsOCBAQCBzdGF0aWMgaW50IGZpYjZfYWRkX3J0Mm5vZGUoc3RydWN0IGZpYjZfbm9kZSAqZm4sIHN0cnVjdCBmaWI2X2luZm8gKnJ0LFxuIFx0XHRyY3VfYXNzaWduX3BvaW50ZXIocnQtXHUwMDNlZmliNl9ub2RlLCBmbik7XG4gXHRcdHJjdV9hc3NpZ25fcG9pbnRlcigqaW5zLCBydCk7XG4gXHRcdGlmICghaW5mby1cdTAwM2Vza2lwX25vdGlmeSlcbi1cdFx0XHRpbmV0Nl9ydF9ub3RpZnkoUlRNX05FV1JPVVRFLCBydCwgaW5mbywgbmxmbGFncyk7XG4mIzQzO1x0XHRcdGluZXQ2X3J0X25vdGlmeShSVE1fTkVXUk9VVEUsIHJ0LCBpbmZvLCBubGZsYWdzLFxuJiM0MztcdFx0XHRcdFx0UlRBX0RFTF9SRUFTT05fVU5TUEVDKTtcbiBcdFx0aW5mby1cdTAwM2VubF9uZXQtXHUwMDNlaXB2Ni5ydDZfc3RhdHMtXHUwMDNlZmliX3J0X2VudHJpZXMmIzQzOyYjNDM7O1xuIFxuIFx0XHRpZiAoIShmbi1cdTAwM2Vmbl9mbGFncyBcdTAwMjYgUlROX1JUSU5GTykpIHtcbkBAIC0xMzE3LDcgJiM0MzsxMzE4LDggQEAgc3RhdGljIGludCBmaWI2X2FkZF9ydDJub2RlKHN0cnVjdCBmaWI2X25vZGUgKmZuLCBzdHJ1Y3QgZmliNl9pbmZvICpydCxcbiBcdFx0cnQtXHUwMDNlZmliNl9uZXh0ID0gaXRlci1cdTAwM2VmaWI2X25leHQ7XG4gXHRcdHJjdV9hc3NpZ25fcG9pbnRlcigqaW5zLCBydCk7XG4gXHRcdGlmICghaW5mby1cdTAwM2Vza2lwX25vdGlmeSlcbi1cdFx0XHRpbmV0Nl9ydF9ub3RpZnkoUlRNX05FV1JPVVRFLCBydCwgaW5mbywgTkxNX0ZfUkVQTEFDRSk7XG4mIzQzO1x0XHRcdGluZXQ2X3J0X25vdGlmeShSVE1fTkVXUk9VVEUsIHJ0LCBpbmZvLCBOTE1fRl9SRVBMQUNFLFxuJiM0MztcdFx0XHRcdFx0UlRBX0RFTF9SRUFTT05fVU5TUEVDKTtcbiBcdFx0aWYgKCEoZm4tXHUwMDNlZm5fZmxhZ3MgXHUwMDI2IFJUTl9SVElORk8pKSB7XG4gXHRcdFx0aW5mby1cdTAwM2VubF9uZXQtXHUwMDNlaXB2Ni5ydDZfc3RhdHMtXHUwMDNlZmliX3JvdXRlX25vZGVzJiM0MzsmIzQzOztcbiBcdFx0XHRmbi1cdTAwM2Vmbl9mbGFncyB8PSBSVE5fUlRJTkZPO1xuQEAgLTE5NjYsNyAmIzQzOzE5NjgsOCBAQCBzdGF0aWMgc3RydWN0IGZpYjZfbm9kZSAqZmliNl9yZXBhaXJfdHJlZShzdHJ1Y3QgbmV0ICpuZXQsXG4gfVxuIFxuIHN0YXRpYyB2b2lkIGZpYjZfZGVsX3JvdXRlKHN0cnVjdCBmaWI2X3RhYmxlICp0YWJsZSwgc3RydWN0IGZpYjZfbm9kZSAqZm4sXG4tXHRcdFx0ICAgc3RydWN0IGZpYjZfaW5mbyBfX3JjdSAqKnJ0cCwgc3RydWN0IG5sX2luZm8gKmluZm8pXG4mIzQzO1x0XHRcdCAgIHN0cnVjdCBmaWI2X2luZm8gX19yY3UgKipydHAsIHN0cnVjdCBubF9pbmZvICppbmZvLFxuJiM0MztcdFx0XHQgICB1MzIgZGVsX3JlYXNvbilcbiB7XG4gXHRzdHJ1Y3QgZmliNl9pbmZvICpsZWFmLCAqcmVwbGFjZV9ydCA9IE5VTEw7XG4gXHRzdHJ1Y3QgZmliNl93YWxrZXIgKnc7XG5AQCAtMjA1NSwxMyAmIzQzOzIwNTgsMTMgQEAgc3RhdGljIHZvaWQgZmliNl9kZWxfcm91dGUoc3RydWN0IGZpYjZfdGFibGUgKnRhYmxlLCBzdHJ1Y3QgZmliNl9ub2RlICpmbixcbiBcdFx0XHRjYWxsX2ZpYjZfZW50cnlfbm90aWZpZXJzX3JlcGxhY2UobmV0LCByZXBsYWNlX3J0KTtcbiBcdH1cbiBcdGlmICghaW5mby1cdTAwM2Vza2lwX25vdGlmeSlcbi1cdFx0aW5ldDZfcnRfbm90aWZ5KFJUTV9ERUxST1VURSwgcnQsIGluZm8sIDApO1xuJiM0MztcdFx0aW5ldDZfcnRfbm90aWZ5KFJUTV9ERUxST1VURSwgcnQsIGluZm8sIDAsIGRlbF9yZWFzb24pO1xuIFxuIFx0ZmliNl9pbmZvX3JlbGVhc2UocnQpO1xuIH1cbiBcbiAvKiBOZWVkIHRvIG93biB0YWJsZS1cdTAwM2V0YjZfbG9jayAqL1xuLWludCBmaWI2X2RlbChzdHJ1Y3QgZmliNl9pbmZvICpydCwgc3RydWN0IG5sX2luZm8gKmluZm8pXG4mIzQzO2ludCBmaWI2X2RlbChzdHJ1Y3QgZmliNl9pbmZvICpydCwgc3RydWN0IG5sX2luZm8gKmluZm8sIHUzMiBkZWxfcmVhc29uKVxuIHtcbiBcdHN0cnVjdCBuZXQgKm5ldCA9IGluZm8tXHUwMDNlbmxfbmV0O1xuIFx0c3RydWN0IGZpYjZfaW5mbyBfX3JjdSAqKnJ0cDtcbkBAIC0yMDkwLDcgJiM0MzsyMDkzLDcgQEAgaW50IGZpYjZfZGVsKHN0cnVjdCBmaWI2X2luZm8gKnJ0LCBzdHJ1Y3QgbmxfaW5mbyAqaW5mbylcbiBcdFx0aWYgKHJ0ID09IGN1cikge1xuIFx0XHRcdGlmIChmaWI2X3JlcXVpcmVzX3NyYyhjdXIpKVxuIFx0XHRcdFx0ZmliNl9yb3V0ZXNfcmVxdWlyZV9zcmNfZGVjKGluZm8tXHUwMDNlbmxfbmV0KTtcbi1cdFx0XHRmaWI2X2RlbF9yb3V0ZSh0YWJsZSwgZm4sIHJ0cCwgaW5mbyk7XG4mIzQzO1x0XHRcdGZpYjZfZGVsX3JvdXRlKHRhYmxlLCBmbiwgcnRwLCBpbmZvLCBkZWxfcmVhc29uKTtcbiBcdFx0XHRyZXR1cm4gMDtcbiBcdFx0fVxuIFx0XHRydHBfbmV4dCA9IFx1MDAyNmN1ci1cdTAwM2VmaWI2X25leHQ7XG5AQCAtMjI1Miw3ICYjNDM7MjI1NSw3IEBAIHN0YXRpYyBpbnQgZmliNl9jbGVhbl9ub2RlKHN0cnVjdCBmaWI2X3dhbGtlciAqdylcbiBcdFx0cmVzID0gYy1cdTAwM2VmdW5jKHJ0LCBjLVx1MDAzZWFyZyk7XG4gXHRcdGlmIChyZXMgPT0gLTEpIHtcbiBcdFx0XHR3LVx1MDAzZWxlYWYgPSBydDtcbi1cdFx0XHRyZXMgPSBmaWI2X2RlbChydCwgXHUwMDI2aW5mbyk7XG4mIzQzO1x0XHRcdHJlcyA9IGZpYjZfZGVsKHJ0LCBcdTAwMjZpbmZvLCBSVEFfREVMX1JFQVNPTl9VTlNQRUMpO1xuIFx0XHRcdGlmIChyZXMpIHtcbiAjaWYgUlQ2X0RFQlVHIFx1MDAzZT0gMlxuIFx0XHRcdFx0cHJfZGVidWcoXCYjMzQ7JXM6IGRlbCBmYWlsZWQ6IHJ0PSVwQCVwIGVycj0lZFxcblwmIzM0OyxcbkBAIC0yNDAwLDcgJiM0MzsyNDAzLDcgQEAgc3RhdGljIHZvaWQgZmliNl9nY190YWJsZShzdHJ1Y3QgbmV0ICpuZXQsXG4gXG4gXHRobGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHJ0LCBuLCBcdTAwMjZ0YjYtXHUwMDNldGI2X2djX2hsaXN0LCBnY19saW5rKVxuIFx0XHRpZiAoZmliNl9hZ2UocnQsIGdjX2FyZ3MpID09IC0xKVxuLVx0XHRcdGZpYjZfZGVsKHJ0LCBcdTAwMjZpbmZvKTtcbiYjNDM7XHRcdFx0ZmliNl9kZWwocnQsIFx1MDAyNmluZm8sIFJUQV9ERUxfUkVBU09OX0VYUElSRUQpO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCBmaWI2X2djX2FsbChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBmaWI2X2djX2FyZ3MgKmdjX2FyZ3MpXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjYvbmRpc2MuYyBiL25ldC9pcHY2L25kaXNjLmNcbmluZGV4IGY4NjdlYzhkM2Q5MDUxLi5jMzUzN2ZjMGVjNjNiMSAxMDA2NDRcbi0tLSBhL25ldC9pcHY2L25kaXNjLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY2L25kaXNjLmNcbkBAIC0xMzYxLDcgJiM0MzsxMzYxLDkgQEAgc3RhdGljIGVudW0gc2tiX2Ryb3BfcmVhc29uIG5kaXNjX3JvdXRlcl9kaXNjb3Zlcnkoc3RydWN0IHNrX2J1ZmYgKnNrYilcbiBcdGRlZnJ0cl91c3JfbWV0cmljID0gaW42X2Rldi1cdTAwM2VjbmYucmFfZGVmcnRyX21ldHJpYztcbiBcdC8qIGRlbGV0ZSB0aGUgcm91dGUgaWYgbGlmZXRpbWUgaXMgMCBvciBpZiBtZXRyaWMgbmVlZHMgY2hhbmdlICovXG4gXHRpZiAocnQgXHUwMDI2XHUwMDI2IChsaWZldGltZSA9PSAwIHx8IHJ0LVx1MDAzZWZpYjZfbWV0cmljICE9IGRlZnJ0cl91c3JfbWV0cmljKSkge1xuLVx0XHRpcDZfZGVsX3J0KG5ldCwgcnQsIGZhbHNlKTtcbiYjNDM7XHRcdGlwNl9kZWxfcnRfcmVhc29uKG5ldCwgcnQsIGZhbHNlLFxuJiM0MztcdFx0XHRcdCAgbGlmZXRpbWUgPT0gMCA/IFJUQV9ERUxfUkVBU09OX1JBX1dJVEhEUkFXTiA6XG4mIzQzO1x0XHRcdFx0XHRcdCAgUlRBX0RFTF9SRUFTT05fVU5TUEVDKTtcbiBcdFx0cnQgPSBOVUxMO1xuIFx0fVxuIFxuQEAgLTEzOTYsNyAmIzQzOzEzOTgsOCBAQCBzdGF0aWMgZW51bSBza2JfZHJvcF9yZWFzb24gbmRpc2Nfcm91dGVyX2Rpc2NvdmVyeShzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIFx0XHRcdC5ubF9uZXQgPSBuZXQsXG4gXHRcdH07XG4gXHRcdHJ0LVx1MDAzZWZpYjZfZmxhZ3MgPSAocnQtXHUwMDNlZmliNl9mbGFncyBcdTAwMjYgflJURl9QUkVGX01BU0spIHwgUlRGX1BSRUYocHJlZik7XG4tXHRcdGluZXQ2X3J0X25vdGlmeShSVE1fTkVXUk9VVEUsIHJ0LCBcdTAwMjZubGluZm8sIE5MTV9GX1JFUExBQ0UpO1xuJiM0MztcdFx0aW5ldDZfcnRfbm90aWZ5KFJUTV9ORVdST1VURSwgcnQsIFx1MDAyNm5saW5mbywgTkxNX0ZfUkVQTEFDRSxcbiYjNDM7XHRcdFx0XHRSVEFfREVMX1JFQVNPTl9VTlNQRUMpO1xuIFx0fVxuIFxuIFx0aWYgKHJ0KSB7XG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjYvcm91dGUuYyBiL25ldC9pcHY2L3JvdXRlLmNcbmluZGV4IGExMzAxMzM0ZGE0OGMwLi5lOGVkOTVkYzU2NjVlZSAxMDA2NDRcbi0tLSBhL25ldC9pcHY2L3JvdXRlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY2L3JvdXRlLmNcbkBAIC0xMTEsNyAmIzQzOzExMSw3IEBAIHN0YXRpYyBpbnQgcnQ2X2ZpbGxfbm9kZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICpza2IsXG4gXHRcdFx0IHN0cnVjdCBmaWI2X2luZm8gKnJ0LCBzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QsXG4gXHRcdFx0IHN0cnVjdCBpbjZfYWRkciAqZGVzdCwgc3RydWN0IGluNl9hZGRyICpzcmMsXG4gXHRcdFx0IGludCBpaWYsIGludCB0eXBlLCB1MzIgcG9ydGlkLCB1MzIgc2VxLFxuLVx0XHRcdCB1bnNpZ25lZCBpbnQgZmxhZ3MpO1xuJiM0MztcdFx0XHQgdW5zaWduZWQgaW50IGZsYWdzLCB1MzIgZGVsX3JlYXNvbik7XG4gc3RhdGljIHN0cnVjdCBydDZfaW5mbyAqcnQ2X2ZpbmRfY2FjaGVkX3J0KGNvbnN0IHN0cnVjdCBmaWI2X3Jlc3VsdCAqcmVzLFxuIFx0XHRcdFx0XHQgICBjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKmRhZGRyLFxuIFx0XHRcdFx0XHQgICBjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKnNhZGRyKTtcbkBAIC0xMDIwLDcgJiM0MzsxMDIwLDcgQEAgaW50IHJ0Nl9yb3V0ZV9yY3Yoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTggKm9wdCwgaW50IGxlbixcbiBcdFx0XHRcdFx0Z3dhZGRyLCBkZXYpO1xuIFxuIFx0aWYgKHJ0IFx1MDAyNlx1MDAyNiAhbGlmZXRpbWUpIHtcbi1cdFx0aXA2X2RlbF9ydChuZXQsIHJ0LCBmYWxzZSk7XG4mIzQzO1x0XHRpcDZfZGVsX3J0X3JlYXNvbihuZXQsIHJ0LCBmYWxzZSwgUlRBX0RFTF9SRUFTT05fUkFfV0lUSERSQVdOKTtcbiBcdFx0cnQgPSBOVUxMO1xuIFx0fVxuIFxuQEAgLTM5NzMsNyAmIzQzOzM5NzMsOCBAQCBpbnQgaXA2X3JvdXRlX2FkZChzdHJ1Y3QgZmliNl9jb25maWcgKmNmZywgZ2ZwX3QgZ2ZwX2ZsYWdzLFxuIFx0cmV0dXJuIGVycjtcbiB9XG4gXG4tc3RhdGljIGludCBfX2lwNl9kZWxfcnQoc3RydWN0IGZpYjZfaW5mbyAqcnQsIHN0cnVjdCBubF9pbmZvICppbmZvKVxuJiM0MztzdGF0aWMgaW50IF9faXA2X2RlbF9ydChzdHJ1Y3QgZmliNl9pbmZvICpydCwgc3RydWN0IG5sX2luZm8gKmluZm8sXG4mIzQzO1x0XHRcdHUzMiBkZWxfcmVhc29uKVxuIHtcbiBcdHN0cnVjdCBuZXQgKm5ldCA9IGluZm8tXHUwMDNlbmxfbmV0O1xuIFx0c3RydWN0IGZpYjZfdGFibGUgKnRhYmxlO1xuQEAgLTM5ODYsNyAmIzQzOzM5ODcsNyBAQCBzdGF0aWMgaW50IF9faXA2X2RlbF9ydChzdHJ1Y3QgZmliNl9pbmZvICpydCwgc3RydWN0IG5sX2luZm8gKmluZm8pXG4gXG4gXHR0YWJsZSA9IHJ0LVx1MDAzZWZpYjZfdGFibGU7XG4gXHRzcGluX2xvY2tfYmgoXHUwMDI2dGFibGUtXHUwMDNldGI2X2xvY2spO1xuLVx0ZXJyID0gZmliNl9kZWwocnQsIGluZm8pO1xuJiM0MztcdGVyciA9IGZpYjZfZGVsKHJ0LCBpbmZvLCBkZWxfcmVhc29uKTtcbiBcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNnRhYmxlLVx1MDAzZXRiNl9sb2NrKTtcbiBcbiBvdXQ6XG5AQCAtMzk5NCwxNCAmIzQzOzM5OTUsMjAgQEAgc3RhdGljIGludCBfX2lwNl9kZWxfcnQoc3RydWN0IGZpYjZfaW5mbyAqcnQsIHN0cnVjdCBubF9pbmZvICppbmZvKVxuIFx0cmV0dXJuIGVycjtcbiB9XG4gXG4taW50IGlwNl9kZWxfcnQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZmliNl9pbmZvICpydCwgYm9vbCBza2lwX25vdGlmeSlcbiYjNDM7aW50IGlwNl9kZWxfcnRfcmVhc29uKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZpYjZfaW5mbyAqcnQsIGJvb2wgc2tpcF9ub3RpZnksXG4mIzQzO1x0XHQgICAgICB1MzIgZGVsX3JlYXNvbilcbiB7XG4gXHRzdHJ1Y3QgbmxfaW5mbyBpbmZvID0ge1xuIFx0XHQubmxfbmV0ID0gbmV0LFxuLVx0XHQuc2tpcF9ub3RpZnkgPSBza2lwX25vdGlmeVxuJiM0MztcdFx0LnNraXBfbm90aWZ5ID0gc2tpcF9ub3RpZnksXG4gXHR9O1xuIFxuLVx0cmV0dXJuIF9faXA2X2RlbF9ydChydCwgXHUwMDI2aW5mbyk7XG4mIzQzO1x0cmV0dXJuIF9faXA2X2RlbF9ydChydCwgXHUwMDI2aW5mbywgZGVsX3JlYXNvbik7XG4mIzQzO31cbiYjNDM7XG4mIzQzO2ludCBpcDZfZGVsX3J0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZpYjZfaW5mbyAqcnQsIGJvb2wgc2tpcF9ub3RpZnkpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gaXA2X2RlbF9ydF9yZWFzb24obmV0LCBydCwgc2tpcF9ub3RpZnksIFJUQV9ERUxfUkVBU09OX1VOU1BFQyk7XG4gfVxuIFxuIHN0YXRpYyBpbnQgX19pcDZfZGVsX3J0X3NpYmxpbmdzKHN0cnVjdCBmaWI2X2luZm8gKnJ0LCBzdHJ1Y3QgZmliNl9jb25maWcgKmNmZylcbkBAIC00MDI4LDcgJiM0Mzs0MDM1LDggQEAgc3RhdGljIGludCBfX2lwNl9kZWxfcnRfc2libGluZ3Moc3RydWN0IGZpYjZfaW5mbyAqcnQsIHN0cnVjdCBmaWI2X2NvbmZpZyAqY2ZnKVxuIFxuIFx0XHRcdGlmIChydDZfZmlsbF9ub2RlKG5ldCwgc2tiLCBydCwgTlVMTCxcbiBcdFx0XHRcdFx0ICBOVUxMLCBOVUxMLCAwLCBSVE1fREVMUk9VVEUsXG4tXHRcdFx0XHRcdCAgaW5mby1cdTAwM2Vwb3J0aWQsIHNlcSwgMCkgXHUwMDNjIDApIHtcbiYjNDM7XHRcdFx0XHRcdCAgaW5mby1cdTAwM2Vwb3J0aWQsIHNlcSwgMCxcbiYjNDM7XHRcdFx0XHRcdCAgUlRBX0RFTF9SRUFTT05fVU5TUEVDKSBcdTAwM2MgMCkge1xuIFx0XHRcdFx0a2ZyZWVfc2tiKHNrYik7XG4gXHRcdFx0XHRza2IgPSBOVUxMO1xuIFx0XHRcdH0gZWxzZVxuQEAgLTQwNjQsMTMgJiM0Mzs0MDcyLDEzIEBAIHN0YXRpYyBpbnQgX19pcDZfZGVsX3J0X3NpYmxpbmdzKHN0cnVjdCBmaWI2X2luZm8gKnJ0LCBzdHJ1Y3QgZmliNl9jb25maWcgKmNmZylcbiBcdFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHNpYmxpbmcsIG5leHRfc2libGluZyxcbiBcdFx0XHRcdFx0IFx1MDAyNnJ0LVx1MDAzZWZpYjZfc2libGluZ3MsXG4gXHRcdFx0XHRcdCBmaWI2X3NpYmxpbmdzKSB7XG4tXHRcdFx0ZXJyID0gZmliNl9kZWwoc2libGluZywgaW5mbyk7XG4mIzQzO1x0XHRcdGVyciA9IGZpYjZfZGVsKHNpYmxpbmcsIGluZm8sIFJUQV9ERUxfUkVBU09OX1VOU1BFQyk7XG4gXHRcdFx0aWYgKGVycilcbiBcdFx0XHRcdGdvdG8gb3V0X3VubG9jaztcbiBcdFx0fVxuIFx0fVxuIFxuLVx0ZXJyID0gZmliNl9kZWwocnQsIGluZm8pO1xuJiM0MztcdGVyciA9IGZpYjZfZGVsKHJ0LCBpbmZvLCBSVEFfREVMX1JFQVNPTl9VTlNQRUMpO1xuIG91dF91bmxvY2s6XG4gXHRzcGluX3VubG9ja19iaChcdTAwMjZ0YWJsZS1cdTAwM2V0YjZfbG9jayk7XG4gb3V0X3B1dDpcbkBAIC00MTk2LDcgJiM0Mzs0MjA0LDggQEAgc3RhdGljIGludCBpcDZfcm91dGVfZGVsKHN0cnVjdCBmaWI2X2NvbmZpZyAqY2ZnLFxuIFx0XHRcdFx0aWYgKCFmaWI2X2luZm9faG9sZF9zYWZlKHJ0KSlcbiBcdFx0XHRcdFx0Y29udGludWU7XG4gXG4tXHRcdFx0XHRlcnIgPSAgX19pcDZfZGVsX3J0KHJ0LCBcdTAwMjZjZmctXHUwMDNlZmNfbmxpbmZvKTtcbiYjNDM7XHRcdFx0XHRlcnIgPSBfX2lwNl9kZWxfcnQocnQsIFx1MDAyNmNmZy1cdTAwM2VmY19ubGluZm8sXG4mIzQzO1x0XHRcdFx0XHRcdCAgIFJUQV9ERUxfUkVBU09OX1VOU1BFQyk7XG4gXHRcdFx0XHRicmVhaztcbiBcdFx0XHR9XG4gXHRcdFx0aWYgKGNmZy1cdTAwM2VmY19uaF9pZClcbkBAIC00MjE1LDcgJiM0Mzs0MjI0LDggQEAgc3RhdGljIGludCBpcDZfcm91dGVfZGVsKHN0cnVjdCBmaWI2X2NvbmZpZyAqY2ZnLFxuIFxuIFx0XHRcdC8qIGlmIGdhdGV3YXkgd2FzIHNwZWNpZmllZCBvbmx5IGRlbGV0ZSB0aGUgb25lIGhvcCAqL1xuIFx0XHRcdGlmIChjZmctXHUwMDNlZmNfZmxhZ3MgXHUwMDI2IFJURl9HQVRFV0FZKVxuLVx0XHRcdFx0ZXJyID0gX19pcDZfZGVsX3J0KHJ0LCBcdTAwMjZjZmctXHUwMDNlZmNfbmxpbmZvKTtcbiYjNDM7XHRcdFx0XHRlcnIgPSBfX2lwNl9kZWxfcnQocnQsIFx1MDAyNmNmZy1cdTAwM2VmY19ubGluZm8sXG4mIzQzO1x0XHRcdFx0XHRcdCAgIFJUQV9ERUxfUkVBU09OX1VOU1BFQyk7XG4gXHRcdFx0ZWxzZVxuIFx0XHRcdFx0ZXJyID0gX19pcDZfZGVsX3J0X3NpYmxpbmdzKHJ0LCBjZmcpO1xuIFx0XHRcdGJyZWFrO1xuQEAgLTUzODEsNyAmIzQzOzUzOTEsOCBAQCBzdGF0aWMgdm9pZCBpcDZfcm91dGVfbXBhdGhfbm90aWZ5KHN0cnVjdCBmaWI2X2luZm8gKnJ0LFxuIFx0fVxuIFxuIFx0aWYgKHJ0KVxuLVx0XHRpbmV0Nl9ydF9ub3RpZnkoUlRNX05FV1JPVVRFLCBydCwgaW5mbywgbmxmbGFncyk7XG4mIzQzO1x0XHRpbmV0Nl9ydF9ub3RpZnkoUlRNX05FV1JPVVRFLCBydCwgaW5mbywgbmxmbGFncyxcbiYjNDM7XHRcdFx0XHRSVEFfREVMX1JFQVNPTl9VTlNQRUMpO1xuIFxuIFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4gfVxuQEAgLTU3MzksNiAmIzQzOzU3NTAsNyBAQCBzdGF0aWMgc2l6ZV90IHJ0Nl9ubG1zZ19zaXplKHN0cnVjdCBmaWI2X2luZm8gKmY2aSlcbiBcdCAgICAgICAmIzQzOyBubGFfdG90YWxfc2l6ZShzaXplb2Yoc3RydWN0IHJ0YV9jYWNoZWluZm8pKVxuIFx0ICAgICAgICYjNDM7IG5sYV90b3RhbF9zaXplKFRDUF9DQV9OQU1FX01BWCkgLyogUlRBWF9DQ19BTEdPICovXG4gXHQgICAgICAgJiM0MzsgbmxhX3RvdGFsX3NpemUoMSkgLyogUlRBX1BSRUYgKi9cbiYjNDM7XHQgICAgICAgJiM0MzsgbmxhX3RvdGFsX3NpemUoNCkgLyogUlRBX0RFTF9SRUFTT04gKi9cbiBcdCAgICAgICAmIzQzOyBuZXh0aG9wX2xlbjtcbiB9XG4gXG5AQCAtNTc3NSw3ICYjNDM7NTc4Nyw3IEBAIHN0YXRpYyBpbnQgcnQ2X2ZpbGxfbm9kZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICpza2IsXG4gXHRcdFx0IHN0cnVjdCBmaWI2X2luZm8gKnJ0LCBzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QsXG4gXHRcdFx0IHN0cnVjdCBpbjZfYWRkciAqZGVzdCwgc3RydWN0IGluNl9hZGRyICpzcmMsXG4gXHRcdFx0IGludCBpaWYsIGludCB0eXBlLCB1MzIgcG9ydGlkLCB1MzIgc2VxLFxuLVx0XHRcdCB1bnNpZ25lZCBpbnQgZmxhZ3MpXG4mIzQzO1x0XHRcdCB1bnNpZ25lZCBpbnQgZmxhZ3MsIHUzMiBkZWxfcmVhc29uKVxuIHtcbiBcdHN0cnVjdCBydDZfaW5mbyAqcnQ2ID0gZHN0X3J0Nl9pbmZvKGRzdCk7XG4gXHRzdHJ1Y3QgcnQ2a2V5ICpydDZfZHN0LCAqcnQ2X3NyYztcbkBAIC01OTU0LDYgJiM0Mzs1OTY2LDEwIEBAIHN0YXRpYyBpbnQgcnQ2X2ZpbGxfbm9kZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICpza2IsXG4gXHRpZiAocnRubF9wdXRfY2FjaGVpbmZvKHNrYiwgZHN0LCAwLCBleHBpcmVzLCBkc3QgPyBkc3QtXHUwMDNlZXJyb3IgOiAwKSBcdTAwM2MgMClcbiBcdFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XG4gXG4mIzQzO1x0aWYgKHR5cGUgPT0gUlRNX0RFTFJPVVRFIFx1MDAyNlx1MDAyNiBkZWxfcmVhc29uICE9IFJUQV9ERUxfUkVBU09OX1VOU1BFQyBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAgbmxhX3B1dF91MzIoc2tiLCBSVEFfREVMX1JFQVNPTiwgZGVsX3JlYXNvbikpXG4mIzQzO1x0XHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcbiYjNDM7XG4gXHRpZiAobmxhX3B1dF91OChza2IsIFJUQV9QUkVGLCBJUFY2X0VYVFJBQ1RfUFJFRihydDZfZmxhZ3MpKSlcbiBcdFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XG4gXG5AQCAtNjA1NSw3ICYjNDM7NjA3MSw4IEBAIHN0YXRpYyBpbnQgcnQ2X25oX2R1bXBfZXhjZXB0aW9ucyhzdHJ1Y3QgZmliNl9uaCAqbmgsIHZvaWQgKmFyZylcbiBcdFx0XHRcdFx0ICAgIFx1MDAyNnJ0Nl9leC1cdTAwM2VydDZpLVx1MDAzZWRzdCwgTlVMTCwgTlVMTCwgMCxcbiBcdFx0XHRcdFx0ICAgIFJUTV9ORVdST1VURSxcbiBcdFx0XHRcdFx0ICAgIE5FVExJTktfQ0IoZHVtcC1cdTAwM2VjYi1cdTAwM2Vza2IpLnBvcnRpZCxcbi1cdFx0XHRcdFx0ICAgIGR1bXAtXHUwMDNlY2ItXHUwMDNlbmxoLVx1MDAzZW5sbXNnX3NlcSwgdy1cdTAwM2VmbGFncyk7XG4mIzQzO1x0XHRcdFx0XHQgICAgZHVtcC1cdTAwM2VjYi1cdTAwM2VubGgtXHUwMDNlbmxtc2dfc2VxLCB3LVx1MDAzZWZsYWdzLFxuJiM0MztcdFx0XHRcdFx0ICAgIFJUQV9ERUxfUkVBU09OX1VOU1BFQyk7XG4gXHRcdFx0aWYgKGVycilcbiBcdFx0XHRcdHJldHVybiBlcnI7XG4gXG5AQCAtNjEwMyw3ICYjNDM7NjEyMCw4IEBAIGludCBydDZfZHVtcF9yb3V0ZShzdHJ1Y3QgZmliNl9pbmZvICpydCwgdm9pZCAqcF9hcmcsIHVuc2lnbmVkIGludCBza2lwKVxuIFx0XHRcdGlmIChydDZfZmlsbF9ub2RlKG5ldCwgYXJnLVx1MDAzZXNrYiwgcnQsIE5VTEwsIE5VTEwsIE5VTEwsXG4gXHRcdFx0XHRcdCAgMCwgUlRNX05FV1JPVVRFLFxuIFx0XHRcdFx0XHQgIE5FVExJTktfQ0IoYXJnLVx1MDAzZWNiLVx1MDAzZXNrYikucG9ydGlkLFxuLVx0XHRcdFx0XHQgIGFyZy1cdTAwM2VjYi1cdTAwM2VubGgtXHUwMDNlbmxtc2dfc2VxLCBmbGFncykpIHtcbiYjNDM7XHRcdFx0XHRcdCAgYXJnLVx1MDAzZWNiLVx1MDAzZW5saC1cdTAwM2VubG1zZ19zZXEsIGZsYWdzLFxuJiM0MztcdFx0XHRcdFx0ICBSVEFfREVMX1JFQVNPTl9VTlNQRUMpKSB7XG4gXHRcdFx0XHRyZXR1cm4gMDtcbiBcdFx0XHR9XG4gXHRcdFx0Y291bnQmIzQzOyYjNDM7O1xuQEAgLTYzMzYsMTIgJiM0Mzs2MzU0LDE0IEBAIHN0YXRpYyBpbnQgaW5ldDZfcnRtX2dldHJvdXRlKHN0cnVjdCBza19idWZmICppbl9za2IsIHN0cnVjdCBubG1zZ2hkciAqbmxoLFxuIFx0XHRcdGVyciA9IHJ0Nl9maWxsX25vZGUobmV0LCBza2IsIGZyb20sIE5VTEwsIE5VTEwsIE5VTEwsXG4gXHRcdFx0XHRcdCAgICBpaWYsIFJUTV9ORVdST1VURSxcbiBcdFx0XHRcdFx0ICAgIE5FVExJTktfQ0IoaW5fc2tiKS5wb3J0aWQsXG4tXHRcdFx0XHRcdCAgICBubGgtXHUwMDNlbmxtc2dfc2VxLCAwKTtcbiYjNDM7XHRcdFx0XHRcdCAgICBubGgtXHUwMDNlbmxtc2dfc2VxLCAwLFxuJiM0MztcdFx0XHRcdFx0ICAgIFJUQV9ERUxfUkVBU09OX1VOU1BFQyk7XG4gXHRcdGVsc2VcbiBcdFx0XHRlcnIgPSBydDZfZmlsbF9ub2RlKG5ldCwgc2tiLCBmcm9tLCBkc3QsIFx1MDAyNmZsNi5kYWRkcixcbiBcdFx0XHRcdFx0ICAgIFx1MDAyNmZsNi5zYWRkciwgaWlmLCBSVE1fTkVXUk9VVEUsXG4gXHRcdFx0XHRcdCAgICBORVRMSU5LX0NCKGluX3NrYikucG9ydGlkLFxuLVx0XHRcdFx0XHQgICAgbmxoLVx1MDAzZW5sbXNnX3NlcSwgMCk7XG4mIzQzO1x0XHRcdFx0XHQgICAgbmxoLVx1MDAzZW5sbXNnX3NlcSwgMCxcbiYjNDM7XHRcdFx0XHRcdCAgICBSVEFfREVMX1JFQVNPTl9VTlNQRUMpO1xuIFx0fSBlbHNlIHtcbiBcdFx0ZXJyID0gLUVORVRVTlJFQUNIO1xuIFx0fVxuQEAgLTYzNTgsNyAmIzQzOzYzNzgsNyBAQCBzdGF0aWMgaW50IGluZXQ2X3J0bV9nZXRyb3V0ZShzdHJ1Y3Qgc2tfYnVmZiAqaW5fc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCxcbiB9XG4gXG4gdm9pZCBpbmV0Nl9ydF9ub3RpZnkoaW50IGV2ZW50LCBzdHJ1Y3QgZmliNl9pbmZvICpydCwgc3RydWN0IG5sX2luZm8gKmluZm8sXG4tXHRcdCAgICAgdW5zaWduZWQgaW50IG5sbV9mbGFncylcbiYjNDM7XHRcdCAgICAgdW5zaWduZWQgaW50IG5sbV9mbGFncywgdTMyIGRlbF9yZWFzb24pXG4ge1xuIFx0c3RydWN0IG5ldCAqbmV0ID0gaW5mby1cdTAwM2VubF9uZXQ7XG4gXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xuQEAgLTYzNzcsNyAmIzQzOzYzOTcsOCBAQCB2b2lkIGluZXQ2X3J0X25vdGlmeShpbnQgZXZlbnQsIHN0cnVjdCBmaWI2X2luZm8gKnJ0LCBzdHJ1Y3QgbmxfaW5mbyAqaW5mbyxcbiBcdFx0Z290byBlcnJvdXQ7XG4gXG4gXHRlcnIgPSBydDZfZmlsbF9ub2RlKG5ldCwgc2tiLCBydCwgTlVMTCwgTlVMTCwgTlVMTCwgMCxcbi1cdFx0XHQgICAgZXZlbnQsIGluZm8tXHUwMDNlcG9ydGlkLCBzZXEsIG5sbV9mbGFncyk7XG4mIzQzO1x0XHRcdCAgICBldmVudCwgaW5mby1cdTAwM2Vwb3J0aWQsIHNlcSwgbmxtX2ZsYWdzLFxuJiM0MztcdFx0XHQgICAgZGVsX3JlYXNvbik7XG4gXHRpZiAoZXJyIFx1MDAzYyAwKSB7XG4gXHRcdGtmcmVlX3NrYihza2IpO1xuIFx0XHQvKiAtRU1TR1NJWkUgaW1wbGllcyBuZWVkZWQgc3BhY2UgZ3JldyB1bmRlciB1cy4gKi9cbkBAIC02NDEwLDcgJiM0Mzs2NDMxLDggQEAgdm9pZCBmaWI2X3J0X3VwZGF0ZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBmaWI2X2luZm8gKnJ0LFxuIFx0XHRnb3RvIGVycm91dDtcbiBcbiBcdGVyciA9IHJ0Nl9maWxsX25vZGUobmV0LCBza2IsIHJ0LCBOVUxMLCBOVUxMLCBOVUxMLCAwLFxuLVx0XHRcdCAgICBSVE1fTkVXUk9VVEUsIGluZm8tXHUwMDNlcG9ydGlkLCBzZXEsIE5MTV9GX1JFUExBQ0UpO1xuJiM0MztcdFx0XHQgICAgUlRNX05FV1JPVVRFLCBpbmZvLVx1MDAzZXBvcnRpZCwgc2VxLCBOTE1fRl9SRVBMQUNFLFxuJiM0MztcdFx0XHQgICAgUlRBX0RFTF9SRUFTT05fVU5TUEVDKTtcbiBcdGlmIChlcnIgXHUwMDNjIDApIHtcbiBcdFx0LyogLUVNU0dTSVpFIGltcGxpZXMgQlVHIGluIHJ0Nl9ubG1zZ19zaXplKCkgKi9cbiBcdFx0V0FSTl9PTihlcnIgPT0gLUVNU0dTSVpFKTtcbkBAIC02NDYzLDcgJiM0Mzs2NDg1LDcgQEAgdm9pZCBmaWI2X2luZm9faHdfZmxhZ3Nfc2V0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZpYjZfaW5mbyAqZjZpLFxuIFx0fVxuIFxuIFx0ZXJyID0gcnQ2X2ZpbGxfbm9kZShuZXQsIHNrYiwgZjZpLCBOVUxMLCBOVUxMLCBOVUxMLCAwLCBSVE1fTkVXUk9VVEUsIDAsXG4tXHRcdFx0ICAgIDAsIDApO1xuJiM0MztcdFx0XHQgICAgMCwgMCwgUlRBX0RFTF9SRUFTT05fVU5TUEVDKTtcbiBcdGlmIChlcnIgXHUwMDNjIDApIHtcbiBcdFx0LyogLUVNU0dTSVpFIGltcGxpZXMgQlVHIGluIHJ0Nl9ubG1zZ19zaXplKCkgKi9cbiBcdFx0V0FSTl9PTihlcnIgPT0gLUVNU0dTSVpFKTtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbGliL3B5L19faW5pdF9fLnB5IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2xpYi9weS9fX2luaXRfXy5weVxuaW5kZXggZTU4YmRiZGM1OGVlYWQuLjM0OTM1ODg2YjZhZGZlIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2xpYi9weS9fX2luaXRfXy5weVxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2xpYi9weS9fX2luaXRfXy5weVxuQEAgLTE3LDcgJiM0MzsxNyw3IEBAIGZyb20gLnV0aWxzIGltcG9ydCBDbWRFeGl0RmFpbHVyZSwgZmRfcmVhZF90aW1lb3V0LCBjbWQsIGJrZywgZGVmZXIsIFxcXG4gICAgIHdhaXRfZmlsZSwgdG9vbCwgdGNcbiBmcm9tIC5icGYgaW1wb3J0IGJwZl9tYXBfc2V0LCBicGZfbWFwX2R1bXAsIGJwZl9wcm9nX21hcF9pZHNcbiBmcm9tIC55bmwgaW1wb3J0IE5sRXJyb3IsIE5sY3RybEZhbWlseSwgWW5sRmFtaWx5LCBcXFxuLSAgICBFdGh0b29sRmFtaWx5LCBOZXRkZXZGYW1pbHksIFJ0bmxGYW1pbHksIFJ0bmxBZGRyRmFtaWx5XG4mIzQzOyAgICBFdGh0b29sRmFtaWx5LCBOZXRkZXZGYW1pbHksIFJ0bmxGYW1pbHksIFJ0bmxBZGRyRmFtaWx5LCBSdG5sUm91dGVGYW1pbHlcbiBmcm9tIC55bmwgaW1wb3J0IE5ldHNoYXBlckZhbWlseSwgRGV2bGlua0ZhbWlseSwgUFNQRmFtaWx5LCBOZXRsaW5rXG4gXG4gX19hbGxfXyA9IFtcJiMzNDtLU1JDXCYjMzQ7LFxuQEAgLTM0LDQgJiM0MzszNCw0IEBAIF9fYWxsX18gPSBbXCYjMzQ7S1NSQ1wmIzM0OyxcbiAgICAgICAgICAgIFwmIzM0O05ldGRldlNpbVwmIzM0OywgXCYjMzQ7TmV0ZGV2U2ltRGV2XCYjMzQ7LFxuICAgICAgICAgICAgXCYjMzQ7TmV0c2hhcGVyRmFtaWx5XCYjMzQ7LCBcJiMzNDtEZXZsaW5rRmFtaWx5XCYjMzQ7LCBcJiMzNDtQU1BGYW1pbHlcJiMzNDssIFwmIzM0O05sRXJyb3JcJiMzNDssXG4gICAgICAgICAgICBcJiMzNDtZbmxGYW1pbHlcJiMzNDssIFwmIzM0O0V0aHRvb2xGYW1pbHlcJiMzNDssIFwmIzM0O05ldGRldkZhbWlseVwmIzM0OywgXCYjMzQ7UnRubEZhbWlseVwmIzM0Oyxcbi0gICAgICAgICAgIFwmIzM0O05sY3RybEZhbWlseVwmIzM0OywgXCYjMzQ7UnRubEFkZHJGYW1pbHlcJiMzNDssIFwmIzM0O05ldGxpbmtcJiMzNDtdXG4mIzQzOyAgICAgICAgICAgXCYjMzQ7TmxjdHJsRmFtaWx5XCYjMzQ7LCBcJiMzNDtSdG5sQWRkckZhbWlseVwmIzM0OywgXCYjMzQ7UnRubFJvdXRlRmFtaWx5XCYjMzQ7LCBcJiMzNDtOZXRsaW5rXCYjMzQ7XVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9saWIvcHkveW5sLnB5IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2xpYi9weS95bmwucHlcbmluZGV4IDJlNTY3MDYyYWE2Y2NlLi4wOGRlZmY3NTZmMjliMCAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9saWIvcHkveW5sLnB5XG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbGliL3B5L3lubC5weVxuQEAgLTI5LDcgJiM0MzsyOSw3IEBAIGV4Y2VwdCBNb2R1bGVOb3RGb3VuZEVycm9yIGFzIGU6XG4gXG4gX19hbGxfXyA9IFtcbiAgICAgXCYjMzQ7TmxFcnJvclwmIzM0OywgXCYjMzQ7TmxQb2xpY3lcJiMzNDssIFwmIzM0O05ldGxpbmtcJiMzNDssIFwmIzM0O1lubEZhbWlseVwmIzM0OywgXCYjMzQ7U1BFQ19QQVRIXCYjMzQ7LFxuLSAgICBcJiMzNDtFdGh0b29sRmFtaWx5XCYjMzQ7LCBcJiMzNDtSdG5sRmFtaWx5XCYjMzQ7LCBcJiMzNDtSdG5sQWRkckZhbWlseVwmIzM0OyxcbiYjNDM7ICAgIFwmIzM0O0V0aHRvb2xGYW1pbHlcJiMzNDssIFwmIzM0O1J0bmxGYW1pbHlcJiMzNDssIFwmIzM0O1J0bmxBZGRyRmFtaWx5XCYjMzQ7LCBcJiMzNDtSdG5sUm91dGVGYW1pbHlcJiMzNDssXG4gICAgIFwmIzM0O05ldGRldkZhbWlseVwmIzM0OywgXCYjMzQ7TmV0c2hhcGVyRmFtaWx5XCYjMzQ7LCBcJiMzNDtObGN0cmxGYW1pbHlcJiMzNDssIFwmIzM0O0RldmxpbmtGYW1pbHlcJiMzNDssXG4gICAgIFwmIzM0O1BTUEZhbWlseVwmIzM0OyxcbiBdXG5AQCAtNTQsNiAmIzQzOzU0LDExIEBAIGNsYXNzIFJ0bmxBZGRyRmFtaWx5KFlubEZhbWlseSk6XG4gICAgICAgICBzdXBlcigpLl9faW5pdF9fKChTUEVDX1BBVEggLyBQYXRoKCYjMzk7cnQtYWRkci55YW1sJiMzOTspKS5hc19wb3NpeCgpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBzY2hlbWE9JiMzOTsmIzM5OywgcmVjdl9zaXplPXJlY3Zfc2l6ZSlcbiBcbiYjNDM7Y2xhc3MgUnRubFJvdXRlRmFtaWx5KFlubEZhbWlseSk6XG4mIzQzOyAgICBkZWYgX19pbml0X18oc2VsZiwgcmVjdl9zaXplPTApOlxuJiM0MzsgICAgICAgIHN1cGVyKCkuX19pbml0X18oKFNQRUNfUEFUSCAvIFBhdGgoJiMzOTtydC1yb3V0ZS55YW1sJiMzOTspKS5hc19wb3NpeCgpLFxuJiM0MzsgICAgICAgICAgICAgICAgICAgICAgICAgc2NoZW1hPSYjMzk7JiMzOTssIHJlY3Zfc2l6ZT1yZWN2X3NpemUpXG4mIzQzO1xuIGNsYXNzIE5ldGRldkZhbWlseShZbmxGYW1pbHkpOlxuICAgICBkZWYgX19pbml0X18oc2VsZiwgcmVjdl9zaXplPTApOlxuICAgICAgICAgc3VwZXIoKS5fX2luaXRfXygoU1BFQ19QQVRIIC8gUGF0aCgmIzM5O25ldGRldi55YW1sJiMzOTspKS5hc19wb3NpeCgpLFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9ydG5ldGxpbmsucHkgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvcnRuZXRsaW5rLnB5XG5pbmRleCAwYzY3YzdjMDBkODQxYy4uZjc0Y2NkNWMyZDEzYWEgMTAwNzU1XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvcnRuZXRsaW5rLnB5XG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvcnRuZXRsaW5rLnB5XG5AQCAtNSw3ICYjNDM7NSw4IEBAIGltcG9ydCBzb2NrZXRcbiBpbXBvcnQgc3RydWN0XG4gaW1wb3J0IHRpbWVcbiBmcm9tIGxpYi5weSBpbXBvcnQgYmtnLCBpcCwga3NmdF9leGl0LCBrc2Z0X3J1biwga3NmdF9lcSwga3NmdF9nZSwga3NmdF90cnVlLCBLc2Z0U2tpcEV4XG4tZnJvbSBsaWIucHkgaW1wb3J0IENtZEV4aXRGYWlsdXJlLCBOZXROUywgTmV0TlNFbnRlciwgUnRubEFkZHJGYW1pbHlcbiYjNDM7ZnJvbSBsaWIucHkgaW1wb3J0IGtzZnRfbm90X2luLCBrc2Z0X25vdF9ub25lXG4mIzQzO2Zyb20gbGliLnB5IGltcG9ydCBDbWRFeGl0RmFpbHVyZSwgTmV0TlMsIE5ldE5TRW50ZXIsIFJ0bmxBZGRyRmFtaWx5LCBSdG5sUm91dGVGYW1pbHlcbiBcbiBJUFY0X0FMTF9IT1NUU19NVUxUSUNBU1QgPSBiJiMzOTtcXHhlMFxceDAwXFx4MDBcXHgwMSYjMzk7XG4gSVBWNF9URVNUX01VTFRJQ0FTVCA9IGImIzM5O1xceGVmXFx4MDFcXHgwMVxceDAxJiMzOTtcbkBAIC0xMzQsOCAmIzQzOzEzNSwxODQgQEAgZGVmIGlwdjRfZGV2Y29uZl9ub3RpZnkoKSAtXHUwMDNlIE5vbmU6XG4gICAgIGtzZnRfdHJ1ZShmXCYjMzQ7aW5ldCB7aWZuYW1lfSBmb3J3YXJkaW5nIG9uXCYjMzQ7IGluIGNtZF9vYmouc3Rkb3V0LFxuICAgICAgICAgICAgICAgZlwmIzM0O05vICYjMzk7Zm9yd2FyZGluZyBvbiYjMzk7IG5vdGlmaWNpYXRpb24gZm91bmQgZm9yIGludGVyZmFjZSB7aWZuYW1lfVwmIzM0OylcbiBcbiYjNDM7ZGVmIF9ydG5sX3JvdXRlX3N1YnNjcmliZShucyk6XG4mIzQzOyAgICB3aXRoIE5ldE5TRW50ZXIoc3RyKG5zKSk6XG4mIzQzOyAgICAgICAgcnRubCA9IFJ0bmxSb3V0ZUZhbWlseSgpXG4mIzQzOyAgICBydG5sLm50Zl9zdWJzY3JpYmUoXCYjMzQ7cnRubGdycC1pcHY2LXJvdXRlXCYjMzQ7KVxuJiM0MzsgICAgcmV0dXJuIHJ0bmxcbiYjNDM7XG4mIzQzO1xuJiM0MztkZWYgX3dhaXRfcm91dGVfbnRmKHJ0bmwsIG5hbWUsIGRzdF9sZW4sIGRzdD1Ob25lLCBkZWFkbGluZT0xMCk6XG4mIzQzOyAgICBcJiMzNDtcJiMzNDtcJiMzNDtSZXR1cm4gdGhlIGF0dHJzIG9mIHRoZSBmaXJzdCBtYXRjaGluZyBub3RpZmljYXRpb24sIE5vbmUgb24gdGltZW91dC5cJiMzNDtcJiMzNDtcJiMzNDtcbiYjNDM7XG4mIzQzOyAgICBmb3IgbXNnIGluIHJ0bmwucG9sbF9udGYoZHVyYXRpb249ZGVhZGxpbmUpOlxuJiM0MzsgICAgICAgIGlmIG1zZ1smIzM5O25hbWUmIzM5O10gIT0gbmFtZTpcbiYjNDM7ICAgICAgICAgICAgY29udGludWVcbiYjNDM7ICAgICAgICBhdHRycyA9IG1zZ1smIzM5O21zZyYjMzk7XVxuJiM0MzsgICAgICAgIGlmIGF0dHJzWyYjMzk7cnRtLWRzdC1sZW4mIzM5O10gIT0gZHN0X2xlbjpcbiYjNDM7ICAgICAgICAgICAgY29udGludWVcbiYjNDM7ICAgICAgICBpZiBkc3QgaXMgbm90IE5vbmUgYW5kIGF0dHJzLmdldCgmIzM5O2RzdCYjMzk7KSAhPSBkc3Q6XG4mIzQzOyAgICAgICAgICAgIGNvbnRpbnVlXG4mIzQzOyAgICAgICAgcmV0dXJuIGF0dHJzXG4mIzQzOyAgICByZXR1cm4gTm9uZVxuJiM0MztcbiYjNDM7XG4mIzQzO2RlZiBfY29sbGVjdF9yb3V0ZV9udGZzKHJ0bmwsIG5hbWUsIHdhbnQsIGRlYWRsaW5lPTEwKTpcbiYjNDM7ICAgIFwmIzM0O1wmIzM0O1wmIzM0O0dhdGhlciBhdHRycyBvZiBtYXRjaGluZyBub3RpZmljYXRpb25zLCBrZXllZCBieSAoZHN0X2xlbiwgZHN0KS5cJiMzNDtcJiMzNDtcJiMzNDtcbiYjNDM7XG4mIzQzOyAgICBzZWVuID0ge31cbiYjNDM7ICAgIGZvciBtc2cgaW4gcnRubC5wb2xsX250ZihkdXJhdGlvbj1kZWFkbGluZSk6XG4mIzQzOyAgICAgICAgaWYgbXNnWyYjMzk7bmFtZSYjMzk7XSAhPSBuYW1lOlxuJiM0MzsgICAgICAgICAgICBjb250aW51ZVxuJiM0MzsgICAgICAgIGF0dHJzID0gbXNnWyYjMzk7bXNnJiMzOTtdXG4mIzQzOyAgICAgICAga2V5ID0gKGF0dHJzWyYjMzk7cnRtLWRzdC1sZW4mIzM5O10sIGF0dHJzLmdldCgmIzM5O2RzdCYjMzk7KSlcbiYjNDM7ICAgICAgICBpZiBrZXkgaW4gd2FudDpcbiYjNDM7ICAgICAgICAgICAgc2VlbltrZXldID0gYXR0cnNcbiYjNDM7ICAgICAgICAgICAgaWYgbGVuKHNlZW4pID09IGxlbih3YW50KTpcbiYjNDM7ICAgICAgICAgICAgICAgIGJyZWFrXG4mIzQzOyAgICByZXR1cm4gc2VlblxuJiM0MztcbiYjNDM7XG4mIzQzO2RlZiBfd3JpdGVfaXB2Nl9zeXNjdGwobmFtZSwgdmFsdWUpOlxuJiM0MzsgICAgd2l0aCBvcGVuKGZcJiMzNDsvcHJvYy9zeXMvbmV0L2lwdjYve25hbWV9XCYjMzQ7LCBcJiMzNDt3XCYjMzQ7KSBhcyBmOlxuJiM0MzsgICAgICAgIGYud3JpdGUoZlwmIzM0O3t2YWx1ZX1cXG5cJiMzNDspXG4mIzQzO1xuJiM0MztcbiYjNDM7ZGVmIGlwdjZfcm91dGVfZGVsX3JlYXNvbl9leHBpcmVkKCkgLVx1MDAzZSBOb25lOlxuJiM0MzsgICAgXCYjMzQ7XCYjMzQ7XCYjMzQ7QW4gZXhwaXJlZCByb3V0ZSByZXBvcnRzIFJUQV9ERUxfUkVBU09OID09IGV4cGlyZWQuXCYjMzQ7XCYjMzQ7XCYjMzQ7XG4mIzQzO1xuJiM0MzsgICAgd2l0aCBOZXROUygpIGFzIG5zOlxuJiM0MzsgICAgICAgIHJ0bmwgPSBfcnRubF9yb3V0ZV9zdWJzY3JpYmUobnMpXG4mIzQzOyAgICAgICAgd2l0aCBOZXROU0VudGVyKHN0cihucykpOlxuJiM0MzsgICAgICAgICAgICBfd3JpdGVfaXB2Nl9zeXNjdGwoXCYjMzQ7cm91dGUvZ2NfaW50ZXJ2YWxcJiMzNDssIDIpXG4mIzQzOyAgICAgICAgaXAoXCYjMzQ7bGluayBhZGQgbmFtZSBkdW1teTEgdHlwZSBkdW1teVwmIzM0OywgbnM9c3RyKG5zKSlcbiYjNDM7ICAgICAgICBpcChcJiMzNDtsaW5rIHNldCBkZXYgZHVtbXkxIHVwXCYjMzQ7LCBucz1zdHIobnMpKVxuJiM0MzsgICAgICAgIGlwKFwmIzM0Oy02IHJvdXRlIGFkZCAyMDAxOmRiODoyOjovNjQgZGV2IGR1bW15MSBleHBpcmVzIDJcJiMzNDssIG5zPXN0cihucykpXG4mIzQzO1xuJiM0MzsgICAgICAgIGF0dHJzID0gX3dhaXRfcm91dGVfbnRmKHJ0bmwsICYjMzk7ZGVscm91dGUtbnRmJiMzOTssIDY0LCAmIzM5OzIwMDE6ZGI4OjI6OiYjMzk7LFxuJiM0MzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlYWRsaW5lPTE1KVxuJiM0MzsgICAgICAgIGtzZnRfbm90X25vbmUoYXR0cnMsIFwmIzM0O25vIFJUTV9ERUxST1VURSBmb3IgdGhlIGV4cGlyZWQgcm91dGVcJiMzNDspXG4mIzQzOyAgICAgICAgaWYgYXR0cnMgaXMgbm90IE5vbmU6XG4mIzQzOyAgICAgICAgICAgIGtzZnRfZXEoYXR0cnMuZ2V0KCYjMzk7ZGVsLXJlYXNvbiYjMzk7KSwgJiMzOTtleHBpcmVkJiMzOTspXG4mIzQzO1xuJiM0MztcbiYjNDM7ZGVmIF9zZW5kX3JhKHNvY2ssIGlmaW5kZXgsIGxpZmV0aW1lLCByaW89Tm9uZSwgcGlvPU5vbmUpOlxuJiM0MzsgICAgXCYjMzQ7XCYjMzQ7XCYjMzQ7VGhlIGtlcm5lbCBmaWxscyBpbiB0aGUgSUNNUHY2IGNoZWNrc3VtIG9uIHJhdyBJQ01QdjYgc29ja2V0cy5cJiMzNDtcJiMzNDtcJiMzNDtcbiYjNDM7XG4mIzQzOyAgICAjIHR5cGUsIGNvZGUsIGNrc3VtLCBob3AgbGltaXQsIGZsYWdzLCByb3V0ZXIgbGlmZXRpbWUsXG4mIzQzOyAgICAjIHJlYWNoYWJsZSB0aW1lLCByZXRyYW5zIHRpbWVyXG4mIzQzOyAgICByYSA9IHN0cnVjdC5wYWNrKCYjMzk7IUJCSEJCSElJJiMzOTssIDEzNCwgMCwgMCwgNjQsIDAsIGxpZmV0aW1lLCAwLCAwKVxuJiM0MzsgICAgaWYgcmlvIGlzIG5vdCBOb25lOlxuJiM0MzsgICAgICAgIHByZWZpeCwgcGxlbiwgcmlvX2xpZmV0aW1lID0gcmlvXG4mIzQzOyAgICAgICAgIyBSRkMgNDE5MSByb3V0ZSBpbmZvcm1hdGlvbiBvcHRpb24sIC82NCBwcmVmaXggKDggYnl0ZXMpXG4mIzQzOyAgICAgICAgcmEgJiM0Mzs9IHN0cnVjdC5wYWNrKCYjMzk7IUJCQkJJJiMzOTssIDI0LCAyLCBwbGVuLCAwLCByaW9fbGlmZXRpbWUpXG4mIzQzOyAgICAgICAgcmEgJiM0Mzs9IHNvY2tldC5pbmV0X3B0b24oc29ja2V0LkFGX0lORVQ2LCBwcmVmaXgpWzo4XVxuJiM0MzsgICAgaWYgcGlvIGlzIG5vdCBOb25lOlxuJiM0MzsgICAgICAgIHByZWZpeCwgcGxlbiwgdmFsaWRfbGZ0ID0gcGlvXG4mIzQzOyAgICAgICAgIyBSRkMgNDg2MSBwcmVmaXggaW5mb3JtYXRpb24gb3B0aW9uLCBvbi1saW5rIG9ubHkgKEwgc2V0LCBBIGNsZWFyKVxuJiM0MzsgICAgICAgIHJhICYjNDM7PSBzdHJ1Y3QucGFjaygmIzM5OyFCQkJCSUlJJiMzOTssIDMsIDQsIHBsZW4sIDB4ODAsIHZhbGlkX2xmdCwgMCwgMClcbiYjNDM7ICAgICAgICByYSAmIzQzOz0gc29ja2V0LmluZXRfcHRvbihzb2NrZXQuQUZfSU5FVDYsIHByZWZpeClcbiYjNDM7ICAgIHNvY2suc2VuZHRvKHJhLCAoJiMzOTtmZjAyOjoxJiMzOTssIDAsIDAsIGlmaW5kZXgpKVxuJiM0MztcbiYjNDM7XG4mIzQzO2RlZiBfcmFfcm91dGVyX3NvY2sobnNfciwgaWZuYW1lKTpcbiYjNDM7ICAgIHdpdGggTmV0TlNFbnRlcihzdHIobnNfcikpOlxuJiM0MzsgICAgICAgIHNvY2sgPSBzb2NrZXQuc29ja2V0KHNvY2tldC5BRl9JTkVUNiwgc29ja2V0LlNPQ0tfUkFXLFxuJiM0MzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvY2tldC5JUFBST1RPX0lDTVBWNilcbiYjNDM7ICAgICAgICBzb2NrLnNldHNvY2tvcHQoc29ja2V0LklQUFJPVE9fSVBWNiwgc29ja2V0LklQVjZfTVVMVElDQVNUX0hPUFMsIDI1NSlcbiYjNDM7ICAgICAgICByZXR1cm4gc29jaywgc29ja2V0LmlmX25hbWV0b2luZGV4KGlmbmFtZSlcbiYjNDM7XG4mIzQzO1xuJiM0MztkZWYgX3JhX2FkdmVydGlzZV9yb3V0ZXMocnRubCwgc29jaywgaWZpbmRleCwgd2FudCwgKipyYV9vcHRzKTpcbiYjNDM7ICAgIFwmIzM0O1wmIzM0O1wmIzM0O1xuJiM0MzsgICAgU2VuZGluZyBmYWlscyB3aXRoIEVBRERSTk9UQVZBSUwgdW50aWwgdGhlIHJvdXRlciYjMzk7cyBsaW5rLWxvY2FsXG4mIzQzOyAgICBhZGRyZXNzIHBhc3NlcyBEQUQsIHNvIHJldHJ5LlxuJiM0MzsgICAgXCYjMzQ7XCYjMzQ7XCYjMzQ7XG4mIzQzO1xuJiM0MzsgICAgc2VlbiA9IHt9XG4mIzQzOyAgICBmb3IgXyBpbiByYW5nZSgxMCk6XG4mIzQzOyAgICAgICAgdHJ5OlxuJiM0MzsgICAgICAgICAgICBfc2VuZF9yYShzb2NrLCBpZmluZGV4LCAqKnJhX29wdHMpXG4mIzQzOyAgICAgICAgZXhjZXB0IE9TRXJyb3I6XG4mIzQzOyAgICAgICAgICAgIHRpbWUuc2xlZXAoMC4yKVxuJiM0MzsgICAgICAgICAgICBjb250aW51ZVxuJiM0MzsgICAgICAgIHNlZW4udXBkYXRlKF9jb2xsZWN0X3JvdXRlX250ZnMocnRubCwgJiMzOTtuZXdyb3V0ZS1udGYmIzM5OyxcbiYjNDM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdhbnQgLSBzZXQoc2Vlbi5rZXlzKCkpLCBkZWFkbGluZT0yKSlcbiYjNDM7ICAgICAgICBpZiBsZW4oc2VlbikgPT0gbGVuKHdhbnQpOlxuJiM0MzsgICAgICAgICAgICBicmVha1xuJiM0MzsgICAgcmV0dXJuIHNlZW5cbiYjNDM7XG4mIzQzO1xuJiM0MztkZWYgaXB2Nl9yb3V0ZV9kZWxfcmVhc29uX3JhX3dpdGhkcmF3bigpIC1cdTAwM2UgTm9uZTpcbiYjNDM7ICAgIFwmIzM0O1wmIzM0O1wmIzM0O1xuJiM0MzsgICAgUm91dGVzIHdpdGhkcmF3biBieSBhIHplcm8tbGlmZXRpbWUgUkEgKHJvdXRlciBsaWZldGltZSwgUkZDIDQ4NjFcbiYjNDM7ICAgIFBJTywgUkZDIDQxOTEgUklPKSByZXBvcnQgUlRBX0RFTF9SRUFTT04gPT0gcmEtd2l0aGRyYXduLlxuJiM0MzsgICAgXCYjMzQ7XCYjMzQ7XCYjMzQ7XG4mIzQzO1xuJiM0MzsgICAgIyAocnRtLWRzdC1sZW4sIGRzdCk7IHRoZSBkZWZhdWx0IHJvdXRlIGNhcnJpZXMgbm8gUlRBX0RTVFxuJiM0MzsgICAgcm91dGVzID0geygwLCBOb25lKSwgKDY0LCAmIzM5OzIwMDE6ZGI4OjY6OiYjMzk7KSwgKDY0LCAmIzM5OzIwMDE6ZGI4OjU6OiYjMzk7KX1cbiYjNDM7XG4mIzQzOyAgICB3aXRoIE5ldE5TKCkgYXMgbnNfaCwgTmV0TlMoKSBhcyBuc19yOlxuJiM0MzsgICAgICAgIGlwKGZcJiMzNDtsaW5rIGFkZCB2ZXRoMCBuZXRucyB7bnNfaH0gdHlwZSB2ZXRoIHBlZXIgbmFtZSB2ZXRoMSBuZXRucyB7bnNfcn1cJiMzNDspXG4mIzQzOyAgICAgICAgd2l0aCBOZXROU0VudGVyKHN0cihuc19oKSk6XG4mIzQzOyAgICAgICAgICAgIF93cml0ZV9pcHY2X3N5c2N0bChcJiMzNDtjb25mL3ZldGgwL2FjY2VwdF9yYVwmIzM0OywgMilcbiYjNDM7ICAgICAgICAgICAgX3dyaXRlX2lwdjZfc3lzY3RsKFwmIzM0O2NvbmYvdmV0aDAvZm9yd2FyZGluZ1wmIzM0OywgMClcbiYjNDM7ICAgICAgICAgICAgdHJ5OlxuJiM0MzsgICAgICAgICAgICAgICAgX3dyaXRlX2lwdjZfc3lzY3RsKFwmIzM0O2NvbmYvdmV0aDAvYWNjZXB0X3JhX3J0X2luZm9fbWF4X3BsZW5cJiMzNDssIDY0KVxuJiM0MzsgICAgICAgICAgICBleGNlcHQgRmlsZU5vdEZvdW5kRXJyb3I6XG4mIzQzOyAgICAgICAgICAgICAgICByYWlzZSBLc2Z0U2tpcEV4KFwmIzM0O25vIENPTkZJR19JUFY2X1JPVVRFX0lORk9cJiMzNDspXG4mIzQzOyAgICAgICAgd2l0aCBOZXROU0VudGVyKHN0cihuc19yKSk6XG4mIzQzOyAgICAgICAgICAgICMgc2tpcCBEQUQgc28gdGhlIHJvdXRlciYjMzk7cyBsaW5rLWxvY2FsIHNvdXJjZSBpcyB1c2FibGUgcmlnaHQgYXdheVxuJiM0MzsgICAgICAgICAgICBfd3JpdGVfaXB2Nl9zeXNjdGwoXCYjMzQ7Y29uZi92ZXRoMS9hY2NlcHRfZGFkXCYjMzQ7LCAwKVxuJiM0MzsgICAgICAgIGlwKFwmIzM0O2xpbmsgc2V0IGRldiB2ZXRoMCB1cFwmIzM0OywgbnM9c3RyKG5zX2gpKVxuJiM0MzsgICAgICAgIGlwKFwmIzM0O2xpbmsgc2V0IGRldiB2ZXRoMSB1cFwmIzM0OywgbnM9c3RyKG5zX3IpKVxuJiM0MztcbiYjNDM7ICAgICAgICBydG5sID0gX3J0bmxfcm91dGVfc3Vic2NyaWJlKG5zX2gpXG4mIzQzOyAgICAgICAgc29jaywgaWZpbmRleCA9IF9yYV9yb3V0ZXJfc29jayhuc19yLCBcJiMzNDt2ZXRoMVwmIzM0OylcbiYjNDM7XG4mIzQzOyAgICAgICAgc2VlbiA9IF9yYV9hZHZlcnRpc2Vfcm91dGVzKHJ0bmwsIHNvY2ssIGlmaW5kZXgsIHJvdXRlcyxcbiYjNDM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlmZXRpbWU9MTgwMCxcbiYjNDM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmlvPSgmIzM5OzIwMDE6ZGI4OjU6OiYjMzk7LCA2NCwgNjAwKSxcbiYjNDM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGlvPSgmIzM5OzIwMDE6ZGI4OjY6OiYjMzk7LCA2NCwgNjAwKSlcbiYjNDM7ICAgICAgICBrc2Z0X2VxKHNldChzZWVuKSwgcm91dGVzLCBcJiMzNDtub3QgYWxsIFJBIHJvdXRlcyB3ZXJlIGluc3RhbGxlZFwmIzM0OylcbiYjNDM7ICAgICAgICBpZiBzZXQoc2VlbikgIT0gcm91dGVzOlxuJiM0MzsgICAgICAgICAgICByZXR1cm5cbiYjNDM7XG4mIzQzOyAgICAgICAgX3NlbmRfcmEoc29jaywgaWZpbmRleCwgMCwgcmlvPSgmIzM5OzIwMDE6ZGI4OjU6OiYjMzk7LCA2NCwgMCksXG4mIzQzOyAgICAgICAgICAgICAgICAgcGlvPSgmIzM5OzIwMDE6ZGI4OjY6OiYjMzk7LCA2NCwgMCkpXG4mIzQzOyAgICAgICAgc2VlbiA9IF9jb2xsZWN0X3JvdXRlX250ZnMocnRubCwgJiMzOTtkZWxyb3V0ZS1udGYmIzM5Oywgcm91dGVzKVxuJiM0MzsgICAgICAgIGZvciBrZXkgaW4gcm91dGVzOlxuJiM0MzsgICAgICAgICAgICBhdHRycyA9IHNlZW4uZ2V0KGtleSlcbiYjNDM7ICAgICAgICAgICAga3NmdF9ub3Rfbm9uZShhdHRycywgZlwmIzM0O25vIFJUTV9ERUxST1VURSBmb3Ige2tleX1cJiMzNDspXG4mIzQzOyAgICAgICAgICAgIGlmIGF0dHJzIGlzIG5vdCBOb25lOlxuJiM0MzsgICAgICAgICAgICAgICAga3NmdF9lcShhdHRycy5nZXQoJiMzOTtkZWwtcmVhc29uJiMzOTspLCAmIzM5O3JhLXdpdGhkcmF3biYjMzk7KVxuJiM0MztcbiYjNDM7XG4mIzQzO2RlZiBpcHY2X3JvdXRlX2RlbF9yZWFzb25fYWJzZW50KCkgLVx1MDAzZSBOb25lOlxuJiM0MzsgICAgXCYjMzQ7XCYjMzQ7XCYjMzQ7XG4mIzQzOyAgICBBIGRlbGV0aW9uIHBhdGggdGhhdCByZWNvcmRzIG5vIGNhdXNlIChoZXJlIGEgdXNlcnNwYWNlIHJlcXVlc3QpXG4mIzQzOyAgICBtdXN0IG5vdCBjYXJyeSBSVEFfREVMX1JFQVNPTiBhdCBhbGwuXG4mIzQzOyAgICBcJiMzNDtcJiMzNDtcJiMzNDtcbiYjNDM7XG4mIzQzOyAgICB3aXRoIE5ldE5TKCkgYXMgbnM6XG4mIzQzOyAgICAgICAgcnRubCA9IF9ydG5sX3JvdXRlX3N1YnNjcmliZShucylcbiYjNDM7ICAgICAgICBpcChcJiMzNDtsaW5rIGFkZCBuYW1lIGR1bW15MSB0eXBlIGR1bW15XCYjMzQ7LCBucz1zdHIobnMpKVxuJiM0MzsgICAgICAgIGlwKFwmIzM0O2xpbmsgc2V0IGRldiBkdW1teTEgdXBcJiMzNDssIG5zPXN0cihucykpXG4mIzQzOyAgICAgICAgaXAoXCYjMzQ7LTYgcm91dGUgYWRkIDIwMDE6ZGI4OjE6Oi82NCBkZXYgZHVtbXkxXCYjMzQ7LCBucz1zdHIobnMpKVxuJiM0MzsgICAgICAgIGlwKFwmIzM0Oy02IHJvdXRlIGRlbCAyMDAxOmRiODoxOjovNjQgZGV2IGR1bW15MVwmIzM0OywgbnM9c3RyKG5zKSlcbiYjNDM7XG4mIzQzOyAgICAgICAgYXR0cnMgPSBfd2FpdF9yb3V0ZV9udGYocnRubCwgJiMzOTtkZWxyb3V0ZS1udGYmIzM5OywgNjQsICYjMzk7MjAwMTpkYjg6MTo6JiMzOTspXG4mIzQzOyAgICAgICAga3NmdF9ub3Rfbm9uZShhdHRycywgXCYjMzQ7bm8gUlRNX0RFTFJPVVRFIGZvciAyMDAxOmRiODoxOjovNjRcJiMzNDspXG4mIzQzOyAgICAgICAgaWYgYXR0cnMgaXMgbm90IE5vbmU6XG4mIzQzOyAgICAgICAgICAgIGtzZnRfbm90X2luKCYjMzk7ZGVsLXJlYXNvbiYjMzk7LCBhdHRycyxcbiYjNDM7ICAgICAgICAgICAgICAgICAgICAgICAgXCYjMzQ7dXNlciBkZWxldGlvbiBtdXN0IG5vdCBjYXJyeSBkZWwtcmVhc29uXCYjMzQ7KVxuJiM0MztcbiYjNDM7XG4gZGVmIG1haW4oKSAtXHUwMDNlIE5vbmU6XG4tICAgIGtzZnRfcnVuKFtkdW1wX21jYWRkcl9jaGVjaywgZHVtcF9tY2FkZHI2X2NoZWNrLCBpcHY0X2RldmNvbmZfbm90aWZ5XSlcbiYjNDM7ICAgIGtzZnRfcnVuKFtkdW1wX21jYWRkcl9jaGVjaywgZHVtcF9tY2FkZHI2X2NoZWNrLCBpcHY0X2RldmNvbmZfbm90aWZ5LFxuJiM0MzsgICAgICAgICAgICAgIGlwdjZfcm91dGVfZGVsX3JlYXNvbl9leHBpcmVkLFxuJiM0MzsgICAgICAgICAgICAgIGlwdjZfcm91dGVfZGVsX3JlYXNvbl9yYV93aXRoZHJhd24sXG4mIzQzOyAgICAgICAgICAgICAgaXB2Nl9yb3V0ZV9kZWxfcmVhc29uX2Fic2VudF0pXG4gICAgIGtzZnRfZXhpdCgpXG4gXG4gaWYgX19uYW1lX18gPT0gXCYjMzQ7X19tYWluX19cJiMzNDs6XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMjI6MzY8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lQVjYmIzM0OywKICAgICYjMzQ7SVBWNl9ST1VURVJfUFJFRiYjMzQ7LAogICAgJiMzNDtJUFY2X1JPVVRFX0lORk8mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtpcDZfZGVsX3J0X3JlYXNvbiYjMzQ7LAogICAgJiMzNDtmaWI2X2RlbCYjMzQ7LAogICAgJiMzNDtpbmV0Nl9ydF9ub3RpZnkmIzM0OywKICAgICYjMzQ7cnQ2X3JvdXRlX3JjdiYjMzQ7LAogICAgJiMzNDthZGRyY29uZl9wcmVmaXhfcmN2JiMzNDssCiAgICAmIzM0O25kaXNjX3JjdiYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGEgbmV3IG5ldGxpbmsgYXR0cmlidXRlIGBSVEFfREVMX1JFQVNPTmAgdG8gSVB2NiByb3V0ZSBkZWxldGlvbiBub3RpZmljYXRpb25zIChgUlRNX0RFTFJPVVRFYCkuIEl0IG1vZGlmaWVzIGNvcmUgSVB2NiByb3V0aW5nIGFuZCBuZWlnaGJvciBkaXNjb3ZlcnkgZnVuY3Rpb25zIHRvIHBvcHVsYXRlIHRoaXMgYXR0cmlidXRlIHdoZW4gcm91dGVzIGFyZSBkZWxldGVkIGR1ZSB0byBleHBpcmF0aW9uIG9yIFJvdXRlciBBZHZlcnRpc2VtZW50IChSQSkgd2l0aGRyYXdhbC4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMgdGhhdCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNGMyYmVmNWVmYTI4YWE2YWZhYjYzMTI1MTUwMWY4YTE2ODhhMTMxNQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTYXQgSnVsIDI1IDIyOjM1OjU4IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXRsaW5rL3NwZWNzL3J0LXJvdXRlLnlhbWwgYi9Eb2N1bWVudGF0aW9uL25ldGxpbmsvc3BlY3MvcnQtcm91dGUueWFtbAppbmRleCAzMzE5NWRiOTY3NDZjNi4uMjM0ZjUwMmZiMzVkOWMgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vbmV0bGluay9zcGVjcy9ydC1yb3V0ZS55YW1sCiYjNDM7JiM0MzsmIzQzOyBiL0RvY3VtZW50YXRpb24vbmV0bGluay9zcGVjcy9ydC1yb3V0ZS55YW1sCkBAIC03OCw2ICYjNDM7NzgsMTUgQEAgZGVmaW5pdGlvbnM6CiAgICAgICAtCiAgICAgICAgIG5hbWU6IHJ0YS11c2VkCiAgICAgICAgIHR5cGU6IHUzMgomIzQzOyAgLQomIzQzOyAgICBuYW1lOiBkZWwtcmVhc29uCiYjNDM7ICAgIHR5cGU6IGVudW0KJiM0MzsgICAgbmFtZS1wcmVmaXg6IHJ0YS1kZWwtcmVhc29uLQomIzQzOyAgICBlbnVtLW5hbWU6IHJ0YS1kZWwtcmVhc29uCiYjNDM7ICAgIGVudHJpZXM6CiYjNDM7ICAgICAgLSB1bnNwZWMKJiM0MzsgICAgICAtIGV4cGlyZWQKJiM0MzsgICAgICAtIHJhLXdpdGhkcmF3bgogCiBhdHRyaWJ1dGUtc2V0czoKICAgLQpAQCAtMTg1LDYgJiM0MzsxOTQsMTAgQEAgYXR0cmlidXRlLXNldHM6CiAgICAgICAgIHR5cGU6IHUzMgogICAgICAgICBieXRlLW9yZGVyOiBiaWctZW5kaWFuCiAgICAgICAgIGRpc3BsYXktaGludDogaGV4CiYjNDM7ICAgICAgLQomIzQzOyAgICAgICAgbmFtZTogZGVsLXJlYXNvbgomIzQzOyAgICAgICAgdHlwZTogdTMyCiYjNDM7ICAgICAgICBlbnVtOiBkZWwtcmVhc29uCiAgIC0KICAgICBuYW1lOiBtZXRyaWNzCiAgICAgbmFtZS1wcmVmaXg6IHJ0YXgtCkBAIC0yOTksNiAmIzQzOzMxMiw3IEBAIG9wZXJhdGlvbnM6CiAgICAgICAgICAgICAtIGRwb3J0CiAgICAgICAgICAgICAtIG5oLWlkCiAgICAgICAgICAgICAtIGZsb3dsYWJlbAomIzQzOyAgICAgICAgICAgIC0gZGVsLXJlYXNvbgogICAgICAgZHVtcDoKICAgICAgICAgcmVxdWVzdDoKICAgICAgICAgICB2YWx1ZTogMjYKQEAgLTMyMiwzICYjNDM7MzM2LDIyIEBAIG9wZXJhdGlvbnM6CiAgICAgICAgIHJlcXVlc3Q6CiAgICAgICAgICAgdmFsdWU6IDI1CiAgICAgICAgICAgYXR0cmlidXRlczogKmFsbC1yb3V0ZS1hdHRycwomIzQzOyAgICAtCiYjNDM7ICAgICAgbmFtZTogbmV3cm91dGUtbnRmCiYjNDM7ICAgICAgZG9jOiBOb3RpZmljYXRpb24gYWJvdXQgYSBjcmVhdGVkIHJvdXRlLgomIzQzOyAgICAgIHZhbHVlOiAyNAomIzQzOyAgICAgIG5vdGlmeTogZ2V0cm91dGUKJiM0MzsgICAgLQomIzQzOyAgICAgIG5hbWU6IGRlbHJvdXRlLW50ZgomIzQzOyAgICAgIGRvYzogTm90aWZpY2F0aW9uIGFib3V0IGEgZGVsZXRlZCByb3V0ZS4KJiM0MzsgICAgICB2YWx1ZTogMjUKJiM0MzsgICAgICBub3RpZnk6IGdldHJvdXRlCiYjNDM7CiYjNDM7bWNhc3QtZ3JvdXBzOgomIzQzOyAgbGlzdDoKJiM0MzsgICAgLQomIzQzOyAgICAgIG5hbWU6IHJ0bmxncnAtaXB2NC1yb3V0ZQomIzQzOyAgICAgIHZhbHVlOiA3CiYjNDM7ICAgIC0KJiM0MzsgICAgICBuYW1lOiBydG5sZ3JwLWlwdjYtcm91dGUKJiM0MzsgICAgICB2YWx1ZTogMTEKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2lwNl9maWIuaCBiL2luY2x1ZGUvbmV0L2lwNl9maWIuaAppbmRleCA5Y2QyN2UxYjliNjkyMy4uN2NhMGUyMTI0ZTc5NjMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L2lwNl9maWIuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL25ldC9pcDZfZmliLmgKQEAgLTQ2OCw3ICYjNDM7NDY4LDcgQEAgdm9pZCBmaWI2X2NsZWFuX2FsbF9za2lwX25vdGlmeShzdHJ1Y3QgbmV0ICpuZXQsCiAKIGludCBmaWI2X2FkZChzdHJ1Y3QgZmliNl9ub2RlICpyb290LCBzdHJ1Y3QgZmliNl9pbmZvICpydCwKIAkgICAgIHN0cnVjdCBubF9pbmZvICppbmZvLCBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spOwotaW50IGZpYjZfZGVsKHN0cnVjdCBmaWI2X2luZm8gKnJ0LCBzdHJ1Y3QgbmxfaW5mbyAqaW5mbyk7CiYjNDM7aW50IGZpYjZfZGVsKHN0cnVjdCBmaWI2X2luZm8gKnJ0LCBzdHJ1Y3QgbmxfaW5mbyAqaW5mbywgdTMyIGRlbF9yZWFzb24pOwogCiBzdGF0aWMgaW5saW5lCiB2b2lkIHJ0Nl9nZXRfcHJlZnNyYyhjb25zdCBzdHJ1Y3QgcnQ2X2luZm8gKnJ0LCBzdHJ1Y3QgaW42X2FkZHIgKmFkZHIpCkBAIC01MzEsNyAmIzQzOzUzMSw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBmaWI2X3J0X3VwZGF0ZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBmaWI2X2luZm8gKnJ0LAogfQogI2VuZGlmCiB2b2lkIGluZXQ2X3J0X25vdGlmeShpbnQgZXZlbnQsIHN0cnVjdCBmaWI2X2luZm8gKnJ0LCBzdHJ1Y3QgbmxfaW5mbyAqaW5mbywKLQkJICAgICB1bnNpZ25lZCBpbnQgZmxhZ3MpOwomIzQzOwkJICAgICB1bnNpZ25lZCBpbnQgZmxhZ3MsIHUzMiBkZWxfcmVhc29uKTsKIAogdm9pZCBmaWI2X2FnZV9leGNlcHRpb25zKHN0cnVjdCBmaWI2X2luZm8gKnJ0LCBzdHJ1Y3QgZmliNl9nY19hcmdzICpnY19hcmdzLAogCQkJIHVuc2lnbmVkIGxvbmcgbm93KTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2lwNl9yb3V0ZS5oIGIvaW5jbHVkZS9uZXQvaXA2X3JvdXRlLmgKaW5kZXggMDlmZmUwZjEzY2U3NTIuLjk4ZjE2ODRmZTM3OGNjIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9pcDZfcm91dGUuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL25ldC9pcDZfcm91dGUuaApAQCAtMTI4LDYgJiM0MzsxMjgsOCBAQCBpbnQgaXA2X3JvdXRlX2FkZChzdHJ1Y3QgZmliNl9jb25maWcgKmNmZywgZ2ZwX3QgZ2ZwX2ZsYWdzLAogaW50IGlwNl9pbnNfcnQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZmliNl9pbmZvICpmNmkpOwogI2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVjYpCiBpbnQgaXA2X2RlbF9ydChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBmaWI2X2luZm8gKmY2aSwgYm9vbCBza2lwX25vdGlmeSk7CiYjNDM7aW50IGlwNl9kZWxfcnRfcmVhc29uKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZpYjZfaW5mbyAqZjZpLCBib29sIHNraXBfbm90aWZ5LAomIzQzOwkJICAgICAgdTMyIGRlbF9yZWFzb24pOwogI2Vsc2UKIHN0YXRpYyBpbmxpbmUgaW50IGlwNl9kZWxfcnQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZmliNl9pbmZvICpmNmksCiAJCQkgICAgIGJvb2wgc2tpcF9ub3RpZnkpCmRpZmYgLS1naXQgYS9pbmNsdWRlL3VhcGkvbGludXgvcnRuZXRsaW5rLmggYi9pbmNsdWRlL3VhcGkvbGludXgvcnRuZXRsaW5rLmgKaW5kZXggMjcyNjVmZDMxZTVmYzkuLmZlMDBlNjI0ZjNjM2FhIDEwMDY0NAotLS0gYS9pbmNsdWRlL3VhcGkvbGludXgvcnRuZXRsaW5rLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS91YXBpL2xpbnV4L3J0bmV0bGluay5oCkBAIC0zOTksNiAmIzQzOzM5OSw3IEBAIGVudW0gcnRhdHRyX3R5cGVfdCB7CiAJUlRBX0RQT1JULAogCVJUQV9OSF9JRCwKIAlSVEFfRkxPV0xBQkVMLAomIzQzOwlSVEFfREVMX1JFQVNPTiwKIAlfX1JUQV9NQVgKIH07CiAKQEAgLTQwNyw2ICYjNDM7NDA4LDIyIEBAIGVudW0gcnRhdHRyX3R5cGVfdCB7CiAjZGVmaW5lIFJUTV9SVEEocikgICgoc3RydWN0IHJ0YXR0ciopKCgoY2hhciopKHIpKSAmIzQzOyBOTE1TR19BTElHTihzaXplb2Yoc3RydWN0IHJ0bXNnKSkpKQogI2RlZmluZSBSVE1fUEFZTE9BRChuKSBOTE1TR19QQVlMT0FEKG4sc2l6ZW9mKHN0cnVjdCBydG1zZykpCiAKJiM0MzsvKiBSVEFfREVMX1JFQVNPTjogd2h5IHRoZSBrZXJuZWwgZGVsZXRlZCB0aGUgcm91dGUuIHUzMi4KJiM0MzsgKiBFbWl0dGVkIG9ubHkgb24gUlRNX0RFTFJPVVRFIG5vdGlmaWNhdGlvbnMsIGFuZCBvbmx5IHdoZW4gdGhlIGRlbGV0aW9uCiYjNDM7ICogcGF0aCByZWNvcmRzIGEgY2F1c2UuIEFic2VuY2UgbWVhbnMgZWl0aGVyIGFuIG9sZGVyIGtlcm5lbCBvciBhCiYjNDM7ICogZGVsZXRpb24gcGF0aCB0aGF0IGRvZXMgbm90ICh5ZXQpIHJlY29yZCBpdHMgY2F1c2UgLSBjb25zdW1lcnMgbXVzdAomIzQzOyAqIHRyZWF0ICYjMzQ7YWJzZW50JiMzNDsgYW5kICYjMzQ7dW5zcGVjJiMzNDsgaWRlbnRpY2FsbHkuIE5ldyBjYXVzZXMgbWF5IGJlIGFwcGVuZGVkLgomIzQzOyAqIEN1cnJlbnRseSBvbmx5IElQdjYgZGVsZXRpb24gcGF0aHMgcmVjb3JkIGEgY2F1c2UuCiYjNDM7ICovCiYjNDM7ZW51bSBydGFfZGVsX3JlYXNvbiB7CiYjNDM7CVJUQV9ERUxfUkVBU09OX1VOU1BFQywJCS8qIGNhdXNlIG5vdCByZWNvcmRlZCAqLwomIzQzOwlSVEFfREVMX1JFQVNPTl9FWFBJUkVELAkJLyogUlRGX0VYUElSRVMgbGlmZXRpbWUgcmFuIG91dCAoR0MpICovCiYjNDM7CVJUQV9ERUxfUkVBU09OX1JBX1dJVEhEUkFXTiwJLyogemVyby1saWZldGltZSBSQSAvIFBJTyAvIFJJTyAqLwomIzQzOwlfX1JUQV9ERUxfUkVBU09OX01BWAomIzQzO307CiYjNDM7CiYjNDM7I2RlZmluZSBSVEFfREVMX1JFQVNPTl9NQVggKF9fUlRBX0RFTF9SRUFTT05fTUFYIC0gMSkKJiM0MzsKIC8qIFJUTV9NVUxUSVBBVEggLS0tIGFycmF5IG9mIHN0cnVjdCBydG5leHRob3AuCiAgKgogICogJiMzNDtzdHJ1Y3QgcnRuZXh0aG9wJiMzNDsgZGVzY3JpYmVzIGFsbCBuZWNlc3NhcnkgbmV4dGhvcCBpbmZvcm1hdGlvbiwKZGlmZiAtLWdpdCBhL25ldC9pcHY2L2FkZHJjb25mLmMgYi9uZXQvaXB2Ni9hZGRyY29uZi5jCmluZGV4IGYxZmU5ZWRlMWVkYjM3Li4xY2E5ZDgyYjU3MjFlNiAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvYWRkcmNvbmYuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2Ni9hZGRyY29uZi5jCkBAIC0yODc0LDcgJiM0MzsyODc0LDggQEAgdm9pZCBhZGRyY29uZl9wcmVmaXhfcmN2KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHU4ICpvcHQsIGludCBsZW4sIGJvb2wgc2xsYW8pCiAJCWlmIChydCkgewogCQkJLyogQXV0b2NvbmYgcHJlZml4IHJvdXRlICovCiAJCQlpZiAodmFsaWRfbGZ0ID09IDApIHsKLQkJCQlpcDZfZGVsX3J0KG5ldCwgcnQsIGZhbHNlKTsKJiM0MzsJCQkJaXA2X2RlbF9ydF9yZWFzb24obmV0LCBydCwgZmFsc2UsCiYjNDM7CQkJCQkJICBSVEFfREVMX1JFQVNPTl9SQV9XSVRIRFJBV04pOwogCQkJCXJ0ID0gTlVMTDsKIAkJCX0gZWxzZSB7CiAJCQkJdGFibGUgPSBydC0mZ3Q7ZmliNl90YWJsZTsKZGlmZiAtLWdpdCBhL25ldC9pcHY2L2lwNl9maWIuYyBiL25ldC9pcHY2L2lwNl9maWIuYwppbmRleCBhMTMwY2RmYWViZmJlZS4uMzJiOWEwMDk1NmEwOTIgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L2lwNl9maWIuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2Ni9pcDZfZmliLmMKQEAgLTEyODYsNyAmIzQzOzEyODYsOCBAQCBzdGF0aWMgaW50IGZpYjZfYWRkX3J0Mm5vZGUoc3RydWN0IGZpYjZfbm9kZSAqZm4sIHN0cnVjdCBmaWI2X2luZm8gKnJ0LAogCQlyY3VfYXNzaWduX3BvaW50ZXIocnQtJmd0O2ZpYjZfbm9kZSwgZm4pOwogCQlyY3VfYXNzaWduX3BvaW50ZXIoKmlucywgcnQpOwogCQlpZiAoIWluZm8tJmd0O3NraXBfbm90aWZ5KQotCQkJaW5ldDZfcnRfbm90aWZ5KFJUTV9ORVdST1VURSwgcnQsIGluZm8sIG5sZmxhZ3MpOwomIzQzOwkJCWluZXQ2X3J0X25vdGlmeShSVE1fTkVXUk9VVEUsIHJ0LCBpbmZvLCBubGZsYWdzLAomIzQzOwkJCQkJUlRBX0RFTF9SRUFTT05fVU5TUEVDKTsKIAkJaW5mby0mZ3Q7bmxfbmV0LSZndDtpcHY2LnJ0Nl9zdGF0cy0mZ3Q7ZmliX3J0X2VudHJpZXMmIzQzOyYjNDM7OwogCiAJCWlmICghKGZuLSZndDtmbl9mbGFncyAmYW1wOyBSVE5fUlRJTkZPKSkgewpAQCAtMTMxNyw3ICYjNDM7MTMxOCw4IEBAIHN0YXRpYyBpbnQgZmliNl9hZGRfcnQybm9kZShzdHJ1Y3QgZmliNl9ub2RlICpmbiwgc3RydWN0IGZpYjZfaW5mbyAqcnQsCiAJCXJ0LSZndDtmaWI2X25leHQgPSBpdGVyLSZndDtmaWI2X25leHQ7CiAJCXJjdV9hc3NpZ25fcG9pbnRlcigqaW5zLCBydCk7CiAJCWlmICghaW5mby0mZ3Q7c2tpcF9ub3RpZnkpCi0JCQlpbmV0Nl9ydF9ub3RpZnkoUlRNX05FV1JPVVRFLCBydCwgaW5mbywgTkxNX0ZfUkVQTEFDRSk7CiYjNDM7CQkJaW5ldDZfcnRfbm90aWZ5KFJUTV9ORVdST1VURSwgcnQsIGluZm8sIE5MTV9GX1JFUExBQ0UsCiYjNDM7CQkJCQlSVEFfREVMX1JFQVNPTl9VTlNQRUMpOwogCQlpZiAoIShmbi0mZ3Q7Zm5fZmxhZ3MgJmFtcDsgUlROX1JUSU5GTykpIHsKIAkJCWluZm8tJmd0O25sX25ldC0mZ3Q7aXB2Ni5ydDZfc3RhdHMtJmd0O2ZpYl9yb3V0ZV9ub2RlcyYjNDM7JiM0Mzs7CiAJCQlmbi0mZ3Q7Zm5fZmxhZ3MgfD0gUlROX1JUSU5GTzsKQEAgLTE5NjYsNyAmIzQzOzE5NjgsOCBAQCBzdGF0aWMgc3RydWN0IGZpYjZfbm9kZSAqZmliNl9yZXBhaXJfdHJlZShzdHJ1Y3QgbmV0ICpuZXQsCiB9CiAKIHN0YXRpYyB2b2lkIGZpYjZfZGVsX3JvdXRlKHN0cnVjdCBmaWI2X3RhYmxlICp0YWJsZSwgc3RydWN0IGZpYjZfbm9kZSAqZm4sCi0JCQkgICBzdHJ1Y3QgZmliNl9pbmZvIF9fcmN1ICoqcnRwLCBzdHJ1Y3QgbmxfaW5mbyAqaW5mbykKJiM0MzsJCQkgICBzdHJ1Y3QgZmliNl9pbmZvIF9fcmN1ICoqcnRwLCBzdHJ1Y3QgbmxfaW5mbyAqaW5mbywKJiM0MzsJCQkgICB1MzIgZGVsX3JlYXNvbikKIHsKIAlzdHJ1Y3QgZmliNl9pbmZvICpsZWFmLCAqcmVwbGFjZV9ydCA9IE5VTEw7CiAJc3RydWN0IGZpYjZfd2Fsa2VyICp3OwpAQCAtMjA1NSwxMyAmIzQzOzIwNTgsMTMgQEAgc3RhdGljIHZvaWQgZmliNl9kZWxfcm91dGUoc3RydWN0IGZpYjZfdGFibGUgKnRhYmxlLCBzdHJ1Y3QgZmliNl9ub2RlICpmbiwKIAkJCWNhbGxfZmliNl9lbnRyeV9ub3RpZmllcnNfcmVwbGFjZShuZXQsIHJlcGxhY2VfcnQpOwogCX0KIAlpZiAoIWluZm8tJmd0O3NraXBfbm90aWZ5KQotCQlpbmV0Nl9ydF9ub3RpZnkoUlRNX0RFTFJPVVRFLCBydCwgaW5mbywgMCk7CiYjNDM7CQlpbmV0Nl9ydF9ub3RpZnkoUlRNX0RFTFJPVVRFLCBydCwgaW5mbywgMCwgZGVsX3JlYXNvbik7CiAKIAlmaWI2X2luZm9fcmVsZWFzZShydCk7CiB9CiAKIC8qIE5lZWQgdG8gb3duIHRhYmxlLSZndDt0YjZfbG9jayAqLwotaW50IGZpYjZfZGVsKHN0cnVjdCBmaWI2X2luZm8gKnJ0LCBzdHJ1Y3QgbmxfaW5mbyAqaW5mbykKJiM0MztpbnQgZmliNl9kZWwoc3RydWN0IGZpYjZfaW5mbyAqcnQsIHN0cnVjdCBubF9pbmZvICppbmZvLCB1MzIgZGVsX3JlYXNvbikKIHsKIAlzdHJ1Y3QgbmV0ICpuZXQgPSBpbmZvLSZndDtubF9uZXQ7CiAJc3RydWN0IGZpYjZfaW5mbyBfX3JjdSAqKnJ0cDsKQEAgLTIwOTAsNyAmIzQzOzIwOTMsNyBAQCBpbnQgZmliNl9kZWwoc3RydWN0IGZpYjZfaW5mbyAqcnQsIHN0cnVjdCBubF9pbmZvICppbmZvKQogCQlpZiAocnQgPT0gY3VyKSB7CiAJCQlpZiAoZmliNl9yZXF1aXJlc19zcmMoY3VyKSkKIAkJCQlmaWI2X3JvdXRlc19yZXF1aXJlX3NyY19kZWMoaW5mby0mZ3Q7bmxfbmV0KTsKLQkJCWZpYjZfZGVsX3JvdXRlKHRhYmxlLCBmbiwgcnRwLCBpbmZvKTsKJiM0MzsJCQlmaWI2X2RlbF9yb3V0ZSh0YWJsZSwgZm4sIHJ0cCwgaW5mbywgZGVsX3JlYXNvbik7CiAJCQlyZXR1cm4gMDsKIAkJfQogCQlydHBfbmV4dCA9ICZhbXA7Y3VyLSZndDtmaWI2X25leHQ7CkBAIC0yMjUyLDcgJiM0MzsyMjU1LDcgQEAgc3RhdGljIGludCBmaWI2X2NsZWFuX25vZGUoc3RydWN0IGZpYjZfd2Fsa2VyICp3KQogCQlyZXMgPSBjLSZndDtmdW5jKHJ0LCBjLSZndDthcmcpOwogCQlpZiAocmVzID09IC0xKSB7CiAJCQl3LSZndDtsZWFmID0gcnQ7Ci0JCQlyZXMgPSBmaWI2X2RlbChydCwgJmFtcDtpbmZvKTsKJiM0MzsJCQlyZXMgPSBmaWI2X2RlbChydCwgJmFtcDtpbmZvLCBSVEFfREVMX1JFQVNPTl9VTlNQRUMpOwogCQkJaWYgKHJlcykgewogI2lmIFJUNl9ERUJVRyAmZ3Q7PSAyCiAJCQkJcHJfZGVidWcoJiMzNDslczogZGVsIGZhaWxlZDogcnQ9JXBAJXAgZXJyPSVkXG4mIzM0OywKQEAgLTI0MDAsNyAmIzQzOzI0MDMsNyBAQCBzdGF0aWMgdm9pZCBmaWI2X2djX3RhYmxlKHN0cnVjdCBuZXQgKm5ldCwKIAogCWhsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocnQsIG4sICZhbXA7dGI2LSZndDt0YjZfZ2NfaGxpc3QsIGdjX2xpbmspCiAJCWlmIChmaWI2X2FnZShydCwgZ2NfYXJncykgPT0gLTEpCi0JCQlmaWI2X2RlbChydCwgJmFtcDtpbmZvKTsKJiM0MzsJCQlmaWI2X2RlbChydCwgJmFtcDtpbmZvLCBSVEFfREVMX1JFQVNPTl9FWFBJUkVEKTsKIH0KIAogc3RhdGljIHZvaWQgZmliNl9nY19hbGwoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZmliNl9nY19hcmdzICpnY19hcmdzKQpkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvbmRpc2MuYyBiL25ldC9pcHY2L25kaXNjLmMKaW5kZXggZjg2N2VjOGQzZDkwNTEuLmMzNTM3ZmMwZWM2M2IxIDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9uZGlzYy5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY2L25kaXNjLmMKQEAgLTEzNjEsNyAmIzQzOzEzNjEsOSBAQCBzdGF0aWMgZW51bSBza2JfZHJvcF9yZWFzb24gbmRpc2Nfcm91dGVyX2Rpc2NvdmVyeShzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogCWRlZnJ0cl91c3JfbWV0cmljID0gaW42X2Rldi0mZ3Q7Y25mLnJhX2RlZnJ0cl9tZXRyaWM7CiAJLyogZGVsZXRlIHRoZSByb3V0ZSBpZiBsaWZldGltZSBpcyAwIG9yIGlmIG1ldHJpYyBuZWVkcyBjaGFuZ2UgKi8KIAlpZiAocnQgJmFtcDsmYW1wOyAobGlmZXRpbWUgPT0gMCB8fCBydC0mZ3Q7ZmliNl9tZXRyaWMgIT0gZGVmcnRyX3Vzcl9tZXRyaWMpKSB7Ci0JCWlwNl9kZWxfcnQobmV0LCBydCwgZmFsc2UpOwomIzQzOwkJaXA2X2RlbF9ydF9yZWFzb24obmV0LCBydCwgZmFsc2UsCiYjNDM7CQkJCSAgbGlmZXRpbWUgPT0gMCA/IFJUQV9ERUxfUkVBU09OX1JBX1dJVEhEUkFXTiA6CiYjNDM7CQkJCQkJICBSVEFfREVMX1JFQVNPTl9VTlNQRUMpOwogCQlydCA9IE5VTEw7CiAJfQogCkBAIC0xMzk2LDcgJiM0MzsxMzk4LDggQEAgc3RhdGljIGVudW0gc2tiX2Ryb3BfcmVhc29uIG5kaXNjX3JvdXRlcl9kaXNjb3Zlcnkoc3RydWN0IHNrX2J1ZmYgKnNrYikKIAkJCS5ubF9uZXQgPSBuZXQsCiAJCX07CiAJCXJ0LSZndDtmaWI2X2ZsYWdzID0gKHJ0LSZndDtmaWI2X2ZsYWdzICZhbXA7IH5SVEZfUFJFRl9NQVNLKSB8IFJURl9QUkVGKHByZWYpOwotCQlpbmV0Nl9ydF9ub3RpZnkoUlRNX05FV1JPVVRFLCBydCwgJmFtcDtubGluZm8sIE5MTV9GX1JFUExBQ0UpOwomIzQzOwkJaW5ldDZfcnRfbm90aWZ5KFJUTV9ORVdST1VURSwgcnQsICZhbXA7bmxpbmZvLCBOTE1fRl9SRVBMQUNFLAomIzQzOwkJCQlSVEFfREVMX1JFQVNPTl9VTlNQRUMpOwogCX0KIAogCWlmIChydCkgewpkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvcm91dGUuYyBiL25ldC9pcHY2L3JvdXRlLmMKaW5kZXggYTEzMDEzMzRkYTQ4YzAuLmU4ZWQ5NWRjNTY2NWVlIDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9yb3V0ZS5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY2L3JvdXRlLmMKQEAgLTExMSw3ICYjNDM7MTExLDcgQEAgc3RhdGljIGludCBydDZfZmlsbF9ub2RlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkJCSBzdHJ1Y3QgZmliNl9pbmZvICpydCwgc3RydWN0IGRzdF9lbnRyeSAqZHN0LAogCQkJIHN0cnVjdCBpbjZfYWRkciAqZGVzdCwgc3RydWN0IGluNl9hZGRyICpzcmMsCiAJCQkgaW50IGlpZiwgaW50IHR5cGUsIHUzMiBwb3J0aWQsIHUzMiBzZXEsCi0JCQkgdW5zaWduZWQgaW50IGZsYWdzKTsKJiM0MzsJCQkgdW5zaWduZWQgaW50IGZsYWdzLCB1MzIgZGVsX3JlYXNvbik7CiBzdGF0aWMgc3RydWN0IHJ0Nl9pbmZvICpydDZfZmluZF9jYWNoZWRfcnQoY29uc3Qgc3RydWN0IGZpYjZfcmVzdWx0ICpyZXMsCiAJCQkJCSAgIGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqZGFkZHIsCiAJCQkJCSAgIGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqc2FkZHIpOwpAQCAtMTAyMCw3ICYjNDM7MTAyMCw3IEBAIGludCBydDZfcm91dGVfcmN2KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHU4ICpvcHQsIGludCBsZW4sCiAJCQkJCWd3YWRkciwgZGV2KTsKIAogCWlmIChydCAmYW1wOyZhbXA7ICFsaWZldGltZSkgewotCQlpcDZfZGVsX3J0KG5ldCwgcnQsIGZhbHNlKTsKJiM0MzsJCWlwNl9kZWxfcnRfcmVhc29uKG5ldCwgcnQsIGZhbHNlLCBSVEFfREVMX1JFQVNPTl9SQV9XSVRIRFJBV04pOwogCQlydCA9IE5VTEw7CiAJfQogCkBAIC0zOTczLDcgJiM0MzszOTczLDggQEAgaW50IGlwNl9yb3V0ZV9hZGQoc3RydWN0IGZpYjZfY29uZmlnICpjZmcsIGdmcF90IGdmcF9mbGFncywKIAlyZXR1cm4gZXJyOwogfQogCi1zdGF0aWMgaW50IF9faXA2X2RlbF9ydChzdHJ1Y3QgZmliNl9pbmZvICpydCwgc3RydWN0IG5sX2luZm8gKmluZm8pCiYjNDM7c3RhdGljIGludCBfX2lwNl9kZWxfcnQoc3RydWN0IGZpYjZfaW5mbyAqcnQsIHN0cnVjdCBubF9pbmZvICppbmZvLAomIzQzOwkJCXUzMiBkZWxfcmVhc29uKQogewogCXN0cnVjdCBuZXQgKm5ldCA9IGluZm8tJmd0O25sX25ldDsKIAlzdHJ1Y3QgZmliNl90YWJsZSAqdGFibGU7CkBAIC0zOTg2LDcgJiM0MzszOTg3LDcgQEAgc3RhdGljIGludCBfX2lwNl9kZWxfcnQoc3RydWN0IGZpYjZfaW5mbyAqcnQsIHN0cnVjdCBubF9pbmZvICppbmZvKQogCiAJdGFibGUgPSBydC0mZ3Q7ZmliNl90YWJsZTsKIAlzcGluX2xvY2tfYmgoJmFtcDt0YWJsZS0mZ3Q7dGI2X2xvY2spOwotCWVyciA9IGZpYjZfZGVsKHJ0LCBpbmZvKTsKJiM0MzsJZXJyID0gZmliNl9kZWwocnQsIGluZm8sIGRlbF9yZWFzb24pOwogCXNwaW5fdW5sb2NrX2JoKCZhbXA7dGFibGUtJmd0O3RiNl9sb2NrKTsKIAogb3V0OgpAQCAtMzk5NCwxNCAmIzQzOzM5OTUsMjAgQEAgc3RhdGljIGludCBfX2lwNl9kZWxfcnQoc3RydWN0IGZpYjZfaW5mbyAqcnQsIHN0cnVjdCBubF9pbmZvICppbmZvKQogCXJldHVybiBlcnI7CiB9CiAKLWludCBpcDZfZGVsX3J0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZpYjZfaW5mbyAqcnQsIGJvb2wgc2tpcF9ub3RpZnkpCiYjNDM7aW50IGlwNl9kZWxfcnRfcmVhc29uKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZpYjZfaW5mbyAqcnQsIGJvb2wgc2tpcF9ub3RpZnksCiYjNDM7CQkgICAgICB1MzIgZGVsX3JlYXNvbikKIHsKIAlzdHJ1Y3QgbmxfaW5mbyBpbmZvID0gewogCQkubmxfbmV0ID0gbmV0LAotCQkuc2tpcF9ub3RpZnkgPSBza2lwX25vdGlmeQomIzQzOwkJLnNraXBfbm90aWZ5ID0gc2tpcF9ub3RpZnksCiAJfTsKIAotCXJldHVybiBfX2lwNl9kZWxfcnQocnQsICZhbXA7aW5mbyk7CiYjNDM7CXJldHVybiBfX2lwNl9kZWxfcnQocnQsICZhbXA7aW5mbywgZGVsX3JlYXNvbik7CiYjNDM7fQomIzQzOwomIzQzO2ludCBpcDZfZGVsX3J0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZpYjZfaW5mbyAqcnQsIGJvb2wgc2tpcF9ub3RpZnkpCiYjNDM7ewomIzQzOwlyZXR1cm4gaXA2X2RlbF9ydF9yZWFzb24obmV0LCBydCwgc2tpcF9ub3RpZnksIFJUQV9ERUxfUkVBU09OX1VOU1BFQyk7CiB9CiAKIHN0YXRpYyBpbnQgX19pcDZfZGVsX3J0X3NpYmxpbmdzKHN0cnVjdCBmaWI2X2luZm8gKnJ0LCBzdHJ1Y3QgZmliNl9jb25maWcgKmNmZykKQEAgLTQwMjgsNyAmIzQzOzQwMzUsOCBAQCBzdGF0aWMgaW50IF9faXA2X2RlbF9ydF9zaWJsaW5ncyhzdHJ1Y3QgZmliNl9pbmZvICpydCwgc3RydWN0IGZpYjZfY29uZmlnICpjZmcpCiAKIAkJCWlmIChydDZfZmlsbF9ub2RlKG5ldCwgc2tiLCBydCwgTlVMTCwKIAkJCQkJICBOVUxMLCBOVUxMLCAwLCBSVE1fREVMUk9VVEUsCi0JCQkJCSAgaW5mby0mZ3Q7cG9ydGlkLCBzZXEsIDApICZsdDsgMCkgewomIzQzOwkJCQkJICBpbmZvLSZndDtwb3J0aWQsIHNlcSwgMCwKJiM0MzsJCQkJCSAgUlRBX0RFTF9SRUFTT05fVU5TUEVDKSAmbHQ7IDApIHsKIAkJCQlrZnJlZV9za2Ioc2tiKTsKIAkJCQlza2IgPSBOVUxMOwogCQkJfSBlbHNlCkBAIC00MDY0LDEzICYjNDM7NDA3MiwxMyBAQCBzdGF0aWMgaW50IF9faXA2X2RlbF9ydF9zaWJsaW5ncyhzdHJ1Y3QgZmliNl9pbmZvICpydCwgc3RydWN0IGZpYjZfY29uZmlnICpjZmcpCiAJCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShzaWJsaW5nLCBuZXh0X3NpYmxpbmcsCiAJCQkJCSAmYW1wO3J0LSZndDtmaWI2X3NpYmxpbmdzLAogCQkJCQkgZmliNl9zaWJsaW5ncykgewotCQkJZXJyID0gZmliNl9kZWwoc2libGluZywgaW5mbyk7CiYjNDM7CQkJZXJyID0gZmliNl9kZWwoc2libGluZywgaW5mbywgUlRBX0RFTF9SRUFTT05fVU5TUEVDKTsKIAkJCWlmIChlcnIpCiAJCQkJZ290byBvdXRfdW5sb2NrOwogCQl9CiAJfQogCi0JZXJyID0gZmliNl9kZWwocnQsIGluZm8pOwomIzQzOwllcnIgPSBmaWI2X2RlbChydCwgaW5mbywgUlRBX0RFTF9SRUFTT05fVU5TUEVDKTsKIG91dF91bmxvY2s6CiAJc3Bpbl91bmxvY2tfYmgoJmFtcDt0YWJsZS0mZ3Q7dGI2X2xvY2spOwogb3V0X3B1dDoKQEAgLTQxOTYsNyAmIzQzOzQyMDQsOCBAQCBzdGF0aWMgaW50IGlwNl9yb3V0ZV9kZWwoc3RydWN0IGZpYjZfY29uZmlnICpjZmcsCiAJCQkJaWYgKCFmaWI2X2luZm9faG9sZF9zYWZlKHJ0KSkKIAkJCQkJY29udGludWU7CiAKLQkJCQllcnIgPSAgX19pcDZfZGVsX3J0KHJ0LCAmYW1wO2NmZy0mZ3Q7ZmNfbmxpbmZvKTsKJiM0MzsJCQkJZXJyID0gX19pcDZfZGVsX3J0KHJ0LCAmYW1wO2NmZy0mZ3Q7ZmNfbmxpbmZvLAomIzQzOwkJCQkJCSAgIFJUQV9ERUxfUkVBU09OX1VOU1BFQyk7CiAJCQkJYnJlYWs7CiAJCQl9CiAJCQlpZiAoY2ZnLSZndDtmY19uaF9pZCkKQEAgLTQyMTUsNyAmIzQzOzQyMjQsOCBAQCBzdGF0aWMgaW50IGlwNl9yb3V0ZV9kZWwoc3RydWN0IGZpYjZfY29uZmlnICpjZmcsCiAKIAkJCS8qIGlmIGdhdGV3YXkgd2FzIHNwZWNpZmllZCBvbmx5IGRlbGV0ZSB0aGUgb25lIGhvcCAqLwogCQkJaWYgKGNmZy0mZ3Q7ZmNfZmxhZ3MgJmFtcDsgUlRGX0dBVEVXQVkpCi0JCQkJZXJyID0gX19pcDZfZGVsX3J0KHJ0LCAmYW1wO2NmZy0mZ3Q7ZmNfbmxpbmZvKTsKJiM0MzsJCQkJZXJyID0gX19pcDZfZGVsX3J0KHJ0LCAmYW1wO2NmZy0mZ3Q7ZmNfbmxpbmZvLAomIzQzOwkJCQkJCSAgIFJUQV9ERUxfUkVBU09OX1VOU1BFQyk7CiAJCQllbHNlCiAJCQkJZXJyID0gX19pcDZfZGVsX3J0X3NpYmxpbmdzKHJ0LCBjZmcpOwogCQkJYnJlYWs7CkBAIC01MzgxLDcgJiM0Mzs1MzkxLDggQEAgc3RhdGljIHZvaWQgaXA2X3JvdXRlX21wYXRoX25vdGlmeShzdHJ1Y3QgZmliNl9pbmZvICpydCwKIAl9CiAKIAlpZiAocnQpCi0JCWluZXQ2X3J0X25vdGlmeShSVE1fTkVXUk9VVEUsIHJ0LCBpbmZvLCBubGZsYWdzKTsKJiM0MzsJCWluZXQ2X3J0X25vdGlmeShSVE1fTkVXUk9VVEUsIHJ0LCBpbmZvLCBubGZsYWdzLAomIzQzOwkJCQlSVEFfREVMX1JFQVNPTl9VTlNQRUMpOwogCiAJcmN1X3JlYWRfdW5sb2NrKCk7CiB9CkBAIC01NzM5LDYgJiM0Mzs1NzUwLDcgQEAgc3RhdGljIHNpemVfdCBydDZfbmxtc2dfc2l6ZShzdHJ1Y3QgZmliNl9pbmZvICpmNmkpCiAJICAgICAgICYjNDM7IG5sYV90b3RhbF9zaXplKHNpemVvZihzdHJ1Y3QgcnRhX2NhY2hlaW5mbykpCiAJICAgICAgICYjNDM7IG5sYV90b3RhbF9zaXplKFRDUF9DQV9OQU1FX01BWCkgLyogUlRBWF9DQ19BTEdPICovCiAJICAgICAgICYjNDM7IG5sYV90b3RhbF9zaXplKDEpIC8qIFJUQV9QUkVGICovCiYjNDM7CSAgICAgICAmIzQzOyBubGFfdG90YWxfc2l6ZSg0KSAvKiBSVEFfREVMX1JFQVNPTiAqLwogCSAgICAgICAmIzQzOyBuZXh0aG9wX2xlbjsKIH0KIApAQCAtNTc3NSw3ICYjNDM7NTc4Nyw3IEBAIHN0YXRpYyBpbnQgcnQ2X2ZpbGxfbm9kZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICpza2IsCiAJCQkgc3RydWN0IGZpYjZfaW5mbyAqcnQsIHN0cnVjdCBkc3RfZW50cnkgKmRzdCwKIAkJCSBzdHJ1Y3QgaW42X2FkZHIgKmRlc3QsIHN0cnVjdCBpbjZfYWRkciAqc3JjLAogCQkJIGludCBpaWYsIGludCB0eXBlLCB1MzIgcG9ydGlkLCB1MzIgc2VxLAotCQkJIHVuc2lnbmVkIGludCBmbGFncykKJiM0MzsJCQkgdW5zaWduZWQgaW50IGZsYWdzLCB1MzIgZGVsX3JlYXNvbikKIHsKIAlzdHJ1Y3QgcnQ2X2luZm8gKnJ0NiA9IGRzdF9ydDZfaW5mbyhkc3QpOwogCXN0cnVjdCBydDZrZXkgKnJ0Nl9kc3QsICpydDZfc3JjOwpAQCAtNTk1NCw2ICYjNDM7NTk2NiwxMCBAQCBzdGF0aWMgaW50IHJ0Nl9maWxsX25vZGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCWlmIChydG5sX3B1dF9jYWNoZWluZm8oc2tiLCBkc3QsIDAsIGV4cGlyZXMsIGRzdCA/IGRzdC0mZ3Q7ZXJyb3IgOiAwKSAmbHQ7IDApCiAJCWdvdG8gbmxhX3B1dF9mYWlsdXJlOwogCiYjNDM7CWlmICh0eXBlID09IFJUTV9ERUxST1VURSAmYW1wOyZhbXA7IGRlbF9yZWFzb24gIT0gUlRBX0RFTF9SRUFTT05fVU5TUEVDICZhbXA7JmFtcDsKJiM0MzsJICAgIG5sYV9wdXRfdTMyKHNrYiwgUlRBX0RFTF9SRUFTT04sIGRlbF9yZWFzb24pKQomIzQzOwkJZ290byBubGFfcHV0X2ZhaWx1cmU7CiYjNDM7CiAJaWYgKG5sYV9wdXRfdTgoc2tiLCBSVEFfUFJFRiwgSVBWNl9FWFRSQUNUX1BSRUYocnQ2X2ZsYWdzKSkpCiAJCWdvdG8gbmxhX3B1dF9mYWlsdXJlOwogCkBAIC02MDU1LDcgJiM0Mzs2MDcxLDggQEAgc3RhdGljIGludCBydDZfbmhfZHVtcF9leGNlcHRpb25zKHN0cnVjdCBmaWI2X25oICpuaCwgdm9pZCAqYXJnKQogCQkJCQkgICAgJmFtcDtydDZfZXgtJmd0O3J0NmktJmd0O2RzdCwgTlVMTCwgTlVMTCwgMCwKIAkJCQkJICAgIFJUTV9ORVdST1VURSwKIAkJCQkJICAgIE5FVExJTktfQ0IoZHVtcC0mZ3Q7Y2ItJmd0O3NrYikucG9ydGlkLAotCQkJCQkgICAgZHVtcC0mZ3Q7Y2ItJmd0O25saC0mZ3Q7bmxtc2dfc2VxLCB3LSZndDtmbGFncyk7CiYjNDM7CQkJCQkgICAgZHVtcC0mZ3Q7Y2ItJmd0O25saC0mZ3Q7bmxtc2dfc2VxLCB3LSZndDtmbGFncywKJiM0MzsJCQkJCSAgICBSVEFfREVMX1JFQVNPTl9VTlNQRUMpOwogCQkJaWYgKGVycikKIAkJCQlyZXR1cm4gZXJyOwogCkBAIC02MTAzLDcgJiM0Mzs2MTIwLDggQEAgaW50IHJ0Nl9kdW1wX3JvdXRlKHN0cnVjdCBmaWI2X2luZm8gKnJ0LCB2b2lkICpwX2FyZywgdW5zaWduZWQgaW50IHNraXApCiAJCQlpZiAocnQ2X2ZpbGxfbm9kZShuZXQsIGFyZy0mZ3Q7c2tiLCBydCwgTlVMTCwgTlVMTCwgTlVMTCwKIAkJCQkJICAwLCBSVE1fTkVXUk9VVEUsCiAJCQkJCSAgTkVUTElOS19DQihhcmctJmd0O2NiLSZndDtza2IpLnBvcnRpZCwKLQkJCQkJICBhcmctJmd0O2NiLSZndDtubGgtJmd0O25sbXNnX3NlcSwgZmxhZ3MpKSB7CiYjNDM7CQkJCQkgIGFyZy0mZ3Q7Y2ItJmd0O25saC0mZ3Q7bmxtc2dfc2VxLCBmbGFncywKJiM0MzsJCQkJCSAgUlRBX0RFTF9SRUFTT05fVU5TUEVDKSkgewogCQkJCXJldHVybiAwOwogCQkJfQogCQkJY291bnQmIzQzOyYjNDM7OwpAQCAtNjMzNiwxMiAmIzQzOzYzNTQsMTQgQEAgc3RhdGljIGludCBpbmV0Nl9ydG1fZ2V0cm91dGUoc3RydWN0IHNrX2J1ZmYgKmluX3NrYiwgc3RydWN0IG5sbXNnaGRyICpubGgsCiAJCQllcnIgPSBydDZfZmlsbF9ub2RlKG5ldCwgc2tiLCBmcm9tLCBOVUxMLCBOVUxMLCBOVUxMLAogCQkJCQkgICAgaWlmLCBSVE1fTkVXUk9VVEUsCiAJCQkJCSAgICBORVRMSU5LX0NCKGluX3NrYikucG9ydGlkLAotCQkJCQkgICAgbmxoLSZndDtubG1zZ19zZXEsIDApOwomIzQzOwkJCQkJICAgIG5saC0mZ3Q7bmxtc2dfc2VxLCAwLAomIzQzOwkJCQkJICAgIFJUQV9ERUxfUkVBU09OX1VOU1BFQyk7CiAJCWVsc2UKIAkJCWVyciA9IHJ0Nl9maWxsX25vZGUobmV0LCBza2IsIGZyb20sIGRzdCwgJmFtcDtmbDYuZGFkZHIsCiAJCQkJCSAgICAmYW1wO2ZsNi5zYWRkciwgaWlmLCBSVE1fTkVXUk9VVEUsCiAJCQkJCSAgICBORVRMSU5LX0NCKGluX3NrYikucG9ydGlkLAotCQkJCQkgICAgbmxoLSZndDtubG1zZ19zZXEsIDApOwomIzQzOwkJCQkJICAgIG5saC0mZ3Q7bmxtc2dfc2VxLCAwLAomIzQzOwkJCQkJICAgIFJUQV9ERUxfUkVBU09OX1VOU1BFQyk7CiAJfSBlbHNlIHsKIAkJZXJyID0gLUVORVRVTlJFQUNIOwogCX0KQEAgLTYzNTgsNyAmIzQzOzYzNzgsNyBAQCBzdGF0aWMgaW50IGluZXQ2X3J0bV9nZXRyb3V0ZShzdHJ1Y3Qgc2tfYnVmZiAqaW5fc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCwKIH0KIAogdm9pZCBpbmV0Nl9ydF9ub3RpZnkoaW50IGV2ZW50LCBzdHJ1Y3QgZmliNl9pbmZvICpydCwgc3RydWN0IG5sX2luZm8gKmluZm8sCi0JCSAgICAgdW5zaWduZWQgaW50IG5sbV9mbGFncykKJiM0MzsJCSAgICAgdW5zaWduZWQgaW50IG5sbV9mbGFncywgdTMyIGRlbF9yZWFzb24pCiB7CiAJc3RydWN0IG5ldCAqbmV0ID0gaW5mby0mZ3Q7bmxfbmV0OwogCXN0cnVjdCBza19idWZmICpza2I7CkBAIC02Mzc3LDcgJiM0Mzs2Mzk3LDggQEAgdm9pZCBpbmV0Nl9ydF9ub3RpZnkoaW50IGV2ZW50LCBzdHJ1Y3QgZmliNl9pbmZvICpydCwgc3RydWN0IG5sX2luZm8gKmluZm8sCiAJCWdvdG8gZXJyb3V0OwogCiAJZXJyID0gcnQ2X2ZpbGxfbm9kZShuZXQsIHNrYiwgcnQsIE5VTEwsIE5VTEwsIE5VTEwsIDAsCi0JCQkgICAgZXZlbnQsIGluZm8tJmd0O3BvcnRpZCwgc2VxLCBubG1fZmxhZ3MpOwomIzQzOwkJCSAgICBldmVudCwgaW5mby0mZ3Q7cG9ydGlkLCBzZXEsIG5sbV9mbGFncywKJiM0MzsJCQkgICAgZGVsX3JlYXNvbik7CiAJaWYgKGVyciAmbHQ7IDApIHsKIAkJa2ZyZWVfc2tiKHNrYik7CiAJCS8qIC1FTVNHU0laRSBpbXBsaWVzIG5lZWRlZCBzcGFjZSBncmV3IHVuZGVyIHVzLiAqLwpAQCAtNjQxMCw3ICYjNDM7NjQzMSw4IEBAIHZvaWQgZmliNl9ydF91cGRhdGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZmliNl9pbmZvICpydCwKIAkJZ290byBlcnJvdXQ7CiAKIAllcnIgPSBydDZfZmlsbF9ub2RlKG5ldCwgc2tiLCBydCwgTlVMTCwgTlVMTCwgTlVMTCwgMCwKLQkJCSAgICBSVE1fTkVXUk9VVEUsIGluZm8tJmd0O3BvcnRpZCwgc2VxLCBOTE1fRl9SRVBMQUNFKTsKJiM0MzsJCQkgICAgUlRNX05FV1JPVVRFLCBpbmZvLSZndDtwb3J0aWQsIHNlcSwgTkxNX0ZfUkVQTEFDRSwKJiM0MzsJCQkgICAgUlRBX0RFTF9SRUFTT05fVU5TUEVDKTsKIAlpZiAoZXJyICZsdDsgMCkgewogCQkvKiAtRU1TR1NJWkUgaW1wbGllcyBCVUcgaW4gcnQ2X25sbXNnX3NpemUoKSAqLwogCQlXQVJOX09OKGVyciA9PSAtRU1TR1NJWkUpOwpAQCAtNjQ2Myw3ICYjNDM7NjQ4NSw3IEBAIHZvaWQgZmliNl9pbmZvX2h3X2ZsYWdzX3NldChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBmaWI2X2luZm8gKmY2aSwKIAl9CiAKIAllcnIgPSBydDZfZmlsbF9ub2RlKG5ldCwgc2tiLCBmNmksIE5VTEwsIE5VTEwsIE5VTEwsIDAsIFJUTV9ORVdST1VURSwgMCwKLQkJCSAgICAwLCAwKTsKJiM0MzsJCQkgICAgMCwgMCwgUlRBX0RFTF9SRUFTT05fVU5TUEVDKTsKIAlpZiAoZXJyICZsdDsgMCkgewogCQkvKiAtRU1TR1NJWkUgaW1wbGllcyBCVUcgaW4gcnQ2X25sbXNnX3NpemUoKSAqLwogCQlXQVJOX09OKGVyciA9PSAtRU1TR1NJWkUpOwpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2xpYi9weS9fX2luaXRfXy5weSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9saWIvcHkvX19pbml0X18ucHkKaW5kZXggZTU4YmRiZGM1OGVlYWQuLjM0OTM1ODg2YjZhZGZlIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbGliL3B5L19faW5pdF9fLnB5CiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9saWIvcHkvX19pbml0X18ucHkKQEAgLTE3LDcgJiM0MzsxNyw3IEBAIGZyb20gLnV0aWxzIGltcG9ydCBDbWRFeGl0RmFpbHVyZSwgZmRfcmVhZF90aW1lb3V0LCBjbWQsIGJrZywgZGVmZXIsIFwKICAgICB3YWl0X2ZpbGUsIHRvb2wsIHRjCiBmcm9tIC5icGYgaW1wb3J0IGJwZl9tYXBfc2V0LCBicGZfbWFwX2R1bXAsIGJwZl9wcm9nX21hcF9pZHMKIGZyb20gLnlubCBpbXBvcnQgTmxFcnJvciwgTmxjdHJsRmFtaWx5LCBZbmxGYW1pbHksIFwKLSAgICBFdGh0b29sRmFtaWx5LCBOZXRkZXZGYW1pbHksIFJ0bmxGYW1pbHksIFJ0bmxBZGRyRmFtaWx5CiYjNDM7ICAgIEV0aHRvb2xGYW1pbHksIE5ldGRldkZhbWlseSwgUnRubEZhbWlseSwgUnRubEFkZHJGYW1pbHksIFJ0bmxSb3V0ZUZhbWlseQogZnJvbSAueW5sIGltcG9ydCBOZXRzaGFwZXJGYW1pbHksIERldmxpbmtGYW1pbHksIFBTUEZhbWlseSwgTmV0bGluawogCiBfX2FsbF9fID0gWyYjMzQ7S1NSQyYjMzQ7LApAQCAtMzQsNCAmIzQzOzM0LDQgQEAgX19hbGxfXyA9IFsmIzM0O0tTUkMmIzM0OywKICAgICAgICAgICAgJiMzNDtOZXRkZXZTaW0mIzM0OywgJiMzNDtOZXRkZXZTaW1EZXYmIzM0OywKICAgICAgICAgICAgJiMzNDtOZXRzaGFwZXJGYW1pbHkmIzM0OywgJiMzNDtEZXZsaW5rRmFtaWx5JiMzNDssICYjMzQ7UFNQRmFtaWx5JiMzNDssICYjMzQ7TmxFcnJvciYjMzQ7LAogICAgICAgICAgICAmIzM0O1lubEZhbWlseSYjMzQ7LCAmIzM0O0V0aHRvb2xGYW1pbHkmIzM0OywgJiMzNDtOZXRkZXZGYW1pbHkmIzM0OywgJiMzNDtSdG5sRmFtaWx5JiMzNDssCi0gICAgICAgICAgICYjMzQ7TmxjdHJsRmFtaWx5JiMzNDssICYjMzQ7UnRubEFkZHJGYW1pbHkmIzM0OywgJiMzNDtOZXRsaW5rJiMzNDtdCiYjNDM7ICAgICAgICAgICAmIzM0O05sY3RybEZhbWlseSYjMzQ7LCAmIzM0O1J0bmxBZGRyRmFtaWx5JiMzNDssICYjMzQ7UnRubFJvdXRlRmFtaWx5JiMzNDssICYjMzQ7TmV0bGluayYjMzQ7XQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2xpYi9weS95bmwucHkgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbGliL3B5L3lubC5weQppbmRleCAyZTU2NzA2MmFhNmNjZS4uMDhkZWZmNzU2ZjI5YjAgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9saWIvcHkveW5sLnB5CiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9saWIvcHkveW5sLnB5CkBAIC0yOSw3ICYjNDM7MjksNyBAQCBleGNlcHQgTW9kdWxlTm90Rm91bmRFcnJvciBhcyBlOgogCiBfX2FsbF9fID0gWwogICAgICYjMzQ7TmxFcnJvciYjMzQ7LCAmIzM0O05sUG9saWN5JiMzNDssICYjMzQ7TmV0bGluayYjMzQ7LCAmIzM0O1lubEZhbWlseSYjMzQ7LCAmIzM0O1NQRUNfUEFUSCYjMzQ7LAotICAgICYjMzQ7RXRodG9vbEZhbWlseSYjMzQ7LCAmIzM0O1J0bmxGYW1pbHkmIzM0OywgJiMzNDtSdG5sQWRkckZhbWlseSYjMzQ7LAomIzQzOyAgICAmIzM0O0V0aHRvb2xGYW1pbHkmIzM0OywgJiMzNDtSdG5sRmFtaWx5JiMzNDssICYjMzQ7UnRubEFkZHJGYW1pbHkmIzM0OywgJiMzNDtSdG5sUm91dGVGYW1pbHkmIzM0OywKICAgICAmIzM0O05ldGRldkZhbWlseSYjMzQ7LCAmIzM0O05ldHNoYXBlckZhbWlseSYjMzQ7LCAmIzM0O05sY3RybEZhbWlseSYjMzQ7LCAmIzM0O0RldmxpbmtGYW1pbHkmIzM0OywKICAgICAmIzM0O1BTUEZhbWlseSYjMzQ7LAogXQpAQCAtNTQsNiAmIzQzOzU0LDExIEBAIGNsYXNzIFJ0bmxBZGRyRmFtaWx5KFlubEZhbWlseSk6CiAgICAgICAgIHN1cGVyKCkuX19pbml0X18oKFNQRUNfUEFUSCAvIFBhdGgoJiMzOTtydC1hZGRyLnlhbWwmIzM5OykpLmFzX3Bvc2l4KCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgc2NoZW1hPSYjMzk7JiMzOTssIHJlY3Zfc2l6ZT1yZWN2X3NpemUpCiAKJiM0MztjbGFzcyBSdG5sUm91dGVGYW1pbHkoWW5sRmFtaWx5KToKJiM0MzsgICAgZGVmIF9faW5pdF9fKHNlbGYsIHJlY3Zfc2l6ZT0wKToKJiM0MzsgICAgICAgIHN1cGVyKCkuX19pbml0X18oKFNQRUNfUEFUSCAvIFBhdGgoJiMzOTtydC1yb3V0ZS55YW1sJiMzOTspKS5hc19wb3NpeCgpLAomIzQzOyAgICAgICAgICAgICAgICAgICAgICAgICBzY2hlbWE9JiMzOTsmIzM5OywgcmVjdl9zaXplPXJlY3Zfc2l6ZSkKJiM0MzsKIGNsYXNzIE5ldGRldkZhbWlseShZbmxGYW1pbHkpOgogICAgIGRlZiBfX2luaXRfXyhzZWxmLCByZWN2X3NpemU9MCk6CiAgICAgICAgIHN1cGVyKCkuX19pbml0X18oKFNQRUNfUEFUSCAvIFBhdGgoJiMzOTtuZXRkZXYueWFtbCYjMzk7KSkuYXNfcG9zaXgoKSwKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9ydG5ldGxpbmsucHkgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvcnRuZXRsaW5rLnB5CmluZGV4IDBjNjdjN2MwMGQ4NDFjLi5mNzRjY2Q1YzJkMTNhYSAxMDA3NTUKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3J0bmV0bGluay5weQomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvcnRuZXRsaW5rLnB5CkBAIC01LDcgJiM0Mzs1LDggQEAgaW1wb3J0IHNvY2tldAogaW1wb3J0IHN0cnVjdAogaW1wb3J0IHRpbWUKIGZyb20gbGliLnB5IGltcG9ydCBia2csIGlwLCBrc2Z0X2V4aXQsIGtzZnRfcnVuLCBrc2Z0X2VxLCBrc2Z0X2dlLCBrc2Z0X3RydWUsIEtzZnRTa2lwRXgKLWZyb20gbGliLnB5IGltcG9ydCBDbWRFeGl0RmFpbHVyZSwgTmV0TlMsIE5ldE5TRW50ZXIsIFJ0bmxBZGRyRmFtaWx5CiYjNDM7ZnJvbSBsaWIucHkgaW1wb3J0IGtzZnRfbm90X2luLCBrc2Z0X25vdF9ub25lCiYjNDM7ZnJvbSBsaWIucHkgaW1wb3J0IENtZEV4aXRGYWlsdXJlLCBOZXROUywgTmV0TlNFbnRlciwgUnRubEFkZHJGYW1pbHksIFJ0bmxSb3V0ZUZhbWlseQogCiBJUFY0X0FMTF9IT1NUU19NVUxUSUNBU1QgPSBiJiMzOTtceGUwXHgwMFx4MDBceDAxJiMzOTsKIElQVjRfVEVTVF9NVUxUSUNBU1QgPSBiJiMzOTtceGVmXHgwMVx4MDFceDAxJiMzOTsKQEAgLTEzNCw4ICYjNDM7MTM1LDE4NCBAQCBkZWYgaXB2NF9kZXZjb25mX25vdGlmeSgpIC0mZ3Q7IE5vbmU6CiAgICAga3NmdF90cnVlKGYmIzM0O2luZXQge2lmbmFtZX0gZm9yd2FyZGluZyBvbiYjMzQ7IGluIGNtZF9vYmouc3Rkb3V0LAogICAgICAgICAgICAgICBmJiMzNDtObyAmIzM5O2ZvcndhcmRpbmcgb24mIzM5OyBub3RpZmljaWF0aW9uIGZvdW5kIGZvciBpbnRlcmZhY2Uge2lmbmFtZX0mIzM0OykKIAomIzQzO2RlZiBfcnRubF9yb3V0ZV9zdWJzY3JpYmUobnMpOgomIzQzOyAgICB3aXRoIE5ldE5TRW50ZXIoc3RyKG5zKSk6CiYjNDM7ICAgICAgICBydG5sID0gUnRubFJvdXRlRmFtaWx5KCkKJiM0MzsgICAgcnRubC5udGZfc3Vic2NyaWJlKCYjMzQ7cnRubGdycC1pcHY2LXJvdXRlJiMzNDspCiYjNDM7ICAgIHJldHVybiBydG5sCiYjNDM7CiYjNDM7CiYjNDM7ZGVmIF93YWl0X3JvdXRlX250ZihydG5sLCBuYW1lLCBkc3RfbGVuLCBkc3Q9Tm9uZSwgZGVhZGxpbmU9MTApOgomIzQzOyAgICAmIzM0OyYjMzQ7JiMzNDtSZXR1cm4gdGhlIGF0dHJzIG9mIHRoZSBmaXJzdCBtYXRjaGluZyBub3RpZmljYXRpb24sIE5vbmUgb24gdGltZW91dC4mIzM0OyYjMzQ7JiMzNDsKJiM0MzsKJiM0MzsgICAgZm9yIG1zZyBpbiBydG5sLnBvbGxfbnRmKGR1cmF0aW9uPWRlYWRsaW5lKToKJiM0MzsgICAgICAgIGlmIG1zZ1smIzM5O25hbWUmIzM5O10gIT0gbmFtZToKJiM0MzsgICAgICAgICAgICBjb250aW51ZQomIzQzOyAgICAgICAgYXR0cnMgPSBtc2dbJiMzOTttc2cmIzM5O10KJiM0MzsgICAgICAgIGlmIGF0dHJzWyYjMzk7cnRtLWRzdC1sZW4mIzM5O10gIT0gZHN0X2xlbjoKJiM0MzsgICAgICAgICAgICBjb250aW51ZQomIzQzOyAgICAgICAgaWYgZHN0IGlzIG5vdCBOb25lIGFuZCBhdHRycy5nZXQoJiMzOTtkc3QmIzM5OykgIT0gZHN0OgomIzQzOyAgICAgICAgICAgIGNvbnRpbnVlCiYjNDM7ICAgICAgICByZXR1cm4gYXR0cnMKJiM0MzsgICAgcmV0dXJuIE5vbmUKJiM0MzsKJiM0MzsKJiM0MztkZWYgX2NvbGxlY3Rfcm91dGVfbnRmcyhydG5sLCBuYW1lLCB3YW50LCBkZWFkbGluZT0xMCk6CiYjNDM7ICAgICYjMzQ7JiMzNDsmIzM0O0dhdGhlciBhdHRycyBvZiBtYXRjaGluZyBub3RpZmljYXRpb25zLCBrZXllZCBieSAoZHN0X2xlbiwgZHN0KS4mIzM0OyYjMzQ7JiMzNDsKJiM0MzsKJiM0MzsgICAgc2VlbiA9IHt9CiYjNDM7ICAgIGZvciBtc2cgaW4gcnRubC5wb2xsX250ZihkdXJhdGlvbj1kZWFkbGluZSk6CiYjNDM7ICAgICAgICBpZiBtc2dbJiMzOTtuYW1lJiMzOTtdICE9IG5hbWU6CiYjNDM7ICAgICAgICAgICAgY29udGludWUKJiM0MzsgICAgICAgIGF0dHJzID0gbXNnWyYjMzk7bXNnJiMzOTtdCiYjNDM7ICAgICAgICBrZXkgPSAoYXR0cnNbJiMzOTtydG0tZHN0LWxlbiYjMzk7XSwgYXR0cnMuZ2V0KCYjMzk7ZHN0JiMzOTspKQomIzQzOyAgICAgICAgaWYga2V5IGluIHdhbnQ6CiYjNDM7ICAgICAgICAgICAgc2VlbltrZXldID0gYXR0cnMKJiM0MzsgICAgICAgICAgICBpZiBsZW4oc2VlbikgPT0gbGVuKHdhbnQpOgomIzQzOyAgICAgICAgICAgICAgICBicmVhawomIzQzOyAgICByZXR1cm4gc2VlbgomIzQzOwomIzQzOwomIzQzO2RlZiBfd3JpdGVfaXB2Nl9zeXNjdGwobmFtZSwgdmFsdWUpOgomIzQzOyAgICB3aXRoIG9wZW4oZiYjMzQ7L3Byb2Mvc3lzL25ldC9pcHY2L3tuYW1lfSYjMzQ7LCAmIzM0O3cmIzM0OykgYXMgZjoKJiM0MzsgICAgICAgIGYud3JpdGUoZiYjMzQ7e3ZhbHVlfVxuJiMzNDspCiYjNDM7CiYjNDM7CiYjNDM7ZGVmIGlwdjZfcm91dGVfZGVsX3JlYXNvbl9leHBpcmVkKCkgLSZndDsgTm9uZToKJiM0MzsgICAgJiMzNDsmIzM0OyYjMzQ7QW4gZXhwaXJlZCByb3V0ZSByZXBvcnRzIFJUQV9ERUxfUkVBU09OID09IGV4cGlyZWQuJiMzNDsmIzM0OyYjMzQ7CiYjNDM7CiYjNDM7ICAgIHdpdGggTmV0TlMoKSBhcyBuczoKJiM0MzsgICAgICAgIHJ0bmwgPSBfcnRubF9yb3V0ZV9zdWJzY3JpYmUobnMpCiYjNDM7ICAgICAgICB3aXRoIE5ldE5TRW50ZXIoc3RyKG5zKSk6CiYjNDM7ICAgICAgICAgICAgX3dyaXRlX2lwdjZfc3lzY3RsKCYjMzQ7cm91dGUvZ2NfaW50ZXJ2YWwmIzM0OywgMikKJiM0MzsgICAgICAgIGlwKCYjMzQ7bGluayBhZGQgbmFtZSBkdW1teTEgdHlwZSBkdW1teSYjMzQ7LCBucz1zdHIobnMpKQomIzQzOyAgICAgICAgaXAoJiMzNDtsaW5rIHNldCBkZXYgZHVtbXkxIHVwJiMzNDssIG5zPXN0cihucykpCiYjNDM7ICAgICAgICBpcCgmIzM0Oy02IHJvdXRlIGFkZCAyMDAxOmRiODoyOjovNjQgZGV2IGR1bW15MSBleHBpcmVzIDImIzM0OywgbnM9c3RyKG5zKSkKJiM0MzsKJiM0MzsgICAgICAgIGF0dHJzID0gX3dhaXRfcm91dGVfbnRmKHJ0bmwsICYjMzk7ZGVscm91dGUtbnRmJiMzOTssIDY0LCAmIzM5OzIwMDE6ZGI4OjI6OiYjMzk7LAomIzQzOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVhZGxpbmU9MTUpCiYjNDM7ICAgICAgICBrc2Z0X25vdF9ub25lKGF0dHJzLCAmIzM0O25vIFJUTV9ERUxST1VURSBmb3IgdGhlIGV4cGlyZWQgcm91dGUmIzM0OykKJiM0MzsgICAgICAgIGlmIGF0dHJzIGlzIG5vdCBOb25lOgomIzQzOyAgICAgICAgICAgIGtzZnRfZXEoYXR0cnMuZ2V0KCYjMzk7ZGVsLXJlYXNvbiYjMzk7KSwgJiMzOTtleHBpcmVkJiMzOTspCiYjNDM7CiYjNDM7CiYjNDM7ZGVmIF9zZW5kX3JhKHNvY2ssIGlmaW5kZXgsIGxpZmV0aW1lLCByaW89Tm9uZSwgcGlvPU5vbmUpOgomIzQzOyAgICAmIzM0OyYjMzQ7JiMzNDtUaGUga2VybmVsIGZpbGxzIGluIHRoZSBJQ01QdjYgY2hlY2tzdW0gb24gcmF3IElDTVB2NiBzb2NrZXRzLiYjMzQ7JiMzNDsmIzM0OwomIzQzOwomIzQzOyAgICAjIHR5cGUsIGNvZGUsIGNrc3VtLCBob3AgbGltaXQsIGZsYWdzLCByb3V0ZXIgbGlmZXRpbWUsCiYjNDM7ICAgICMgcmVhY2hhYmxlIHRpbWUsIHJldHJhbnMgdGltZXIKJiM0MzsgICAgcmEgPSBzdHJ1Y3QucGFjaygmIzM5OyFCQkhCQkhJSSYjMzk7LCAxMzQsIDAsIDAsIDY0LCAwLCBsaWZldGltZSwgMCwgMCkKJiM0MzsgICAgaWYgcmlvIGlzIG5vdCBOb25lOgomIzQzOyAgICAgICAgcHJlZml4LCBwbGVuLCByaW9fbGlmZXRpbWUgPSByaW8KJiM0MzsgICAgICAgICMgUkZDIDQxOTEgcm91dGUgaW5mb3JtYXRpb24gb3B0aW9uLCAvNjQgcHJlZml4ICg4IGJ5dGVzKQomIzQzOyAgICAgICAgcmEgJiM0Mzs9IHN0cnVjdC5wYWNrKCYjMzk7IUJCQkJJJiMzOTssIDI0LCAyLCBwbGVuLCAwLCByaW9fbGlmZXRpbWUpCiYjNDM7ICAgICAgICByYSAmIzQzOz0gc29ja2V0LmluZXRfcHRvbihzb2NrZXQuQUZfSU5FVDYsIHByZWZpeClbOjhdCiYjNDM7ICAgIGlmIHBpbyBpcyBub3QgTm9uZToKJiM0MzsgICAgICAgIHByZWZpeCwgcGxlbiwgdmFsaWRfbGZ0ID0gcGlvCiYjNDM7ICAgICAgICAjIFJGQyA0ODYxIHByZWZpeCBpbmZvcm1hdGlvbiBvcHRpb24sIG9uLWxpbmsgb25seSAoTCBzZXQsIEEgY2xlYXIpCiYjNDM7ICAgICAgICByYSAmIzQzOz0gc3RydWN0LnBhY2soJiMzOTshQkJCQklJSSYjMzk7LCAzLCA0LCBwbGVuLCAweDgwLCB2YWxpZF9sZnQsIDAsIDApCiYjNDM7ICAgICAgICByYSAmIzQzOz0gc29ja2V0LmluZXRfcHRvbihzb2NrZXQuQUZfSU5FVDYsIHByZWZpeCkKJiM0MzsgICAgc29jay5zZW5kdG8ocmEsICgmIzM5O2ZmMDI6OjEmIzM5OywgMCwgMCwgaWZpbmRleCkpCiYjNDM7CiYjNDM7CiYjNDM7ZGVmIF9yYV9yb3V0ZXJfc29jayhuc19yLCBpZm5hbWUpOgomIzQzOyAgICB3aXRoIE5ldE5TRW50ZXIoc3RyKG5zX3IpKToKJiM0MzsgICAgICAgIHNvY2sgPSBzb2NrZXQuc29ja2V0KHNvY2tldC5BRl9JTkVUNiwgc29ja2V0LlNPQ0tfUkFXLAomIzQzOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc29ja2V0LklQUFJPVE9fSUNNUFY2KQomIzQzOyAgICAgICAgc29jay5zZXRzb2Nrb3B0KHNvY2tldC5JUFBST1RPX0lQVjYsIHNvY2tldC5JUFY2X01VTFRJQ0FTVF9IT1BTLCAyNTUpCiYjNDM7ICAgICAgICByZXR1cm4gc29jaywgc29ja2V0LmlmX25hbWV0b2luZGV4KGlmbmFtZSkKJiM0MzsKJiM0MzsKJiM0MztkZWYgX3JhX2FkdmVydGlzZV9yb3V0ZXMocnRubCwgc29jaywgaWZpbmRleCwgd2FudCwgKipyYV9vcHRzKToKJiM0MzsgICAgJiMzNDsmIzM0OyYjMzQ7CiYjNDM7ICAgIFNlbmRpbmcgZmFpbHMgd2l0aCBFQUREUk5PVEFWQUlMIHVudGlsIHRoZSByb3V0ZXImIzM5O3MgbGluay1sb2NhbAomIzQzOyAgICBhZGRyZXNzIHBhc3NlcyBEQUQsIHNvIHJldHJ5LgomIzQzOyAgICAmIzM0OyYjMzQ7JiMzNDsKJiM0MzsKJiM0MzsgICAgc2VlbiA9IHt9CiYjNDM7ICAgIGZvciBfIGluIHJhbmdlKDEwKToKJiM0MzsgICAgICAgIHRyeToKJiM0MzsgICAgICAgICAgICBfc2VuZF9yYShzb2NrLCBpZmluZGV4LCAqKnJhX29wdHMpCiYjNDM7ICAgICAgICBleGNlcHQgT1NFcnJvcjoKJiM0MzsgICAgICAgICAgICB0aW1lLnNsZWVwKDAuMikKJiM0MzsgICAgICAgICAgICBjb250aW51ZQomIzQzOyAgICAgICAgc2Vlbi51cGRhdGUoX2NvbGxlY3Rfcm91dGVfbnRmcyhydG5sLCAmIzM5O25ld3JvdXRlLW50ZiYjMzk7LAomIzQzOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3YW50IC0gc2V0KHNlZW4ua2V5cygpKSwgZGVhZGxpbmU9MikpCiYjNDM7ICAgICAgICBpZiBsZW4oc2VlbikgPT0gbGVuKHdhbnQpOgomIzQzOyAgICAgICAgICAgIGJyZWFrCiYjNDM7ICAgIHJldHVybiBzZWVuCiYjNDM7CiYjNDM7CiYjNDM7ZGVmIGlwdjZfcm91dGVfZGVsX3JlYXNvbl9yYV93aXRoZHJhd24oKSAtJmd0OyBOb25lOgomIzQzOyAgICAmIzM0OyYjMzQ7JiMzNDsKJiM0MzsgICAgUm91dGVzIHdpdGhkcmF3biBieSBhIHplcm8tbGlmZXRpbWUgUkEgKHJvdXRlciBsaWZldGltZSwgUkZDIDQ4NjEKJiM0MzsgICAgUElPLCBSRkMgNDE5MSBSSU8pIHJlcG9ydCBSVEFfREVMX1JFQVNPTiA9PSByYS13aXRoZHJhd24uCiYjNDM7ICAgICYjMzQ7JiMzNDsmIzM0OwomIzQzOwomIzQzOyAgICAjIChydG0tZHN0LWxlbiwgZHN0KTsgdGhlIGRlZmF1bHQgcm91dGUgY2FycmllcyBubyBSVEFfRFNUCiYjNDM7ICAgIHJvdXRlcyA9IHsoMCwgTm9uZSksICg2NCwgJiMzOTsyMDAxOmRiODo2OjomIzM5OyksICg2NCwgJiMzOTsyMDAxOmRiODo1OjomIzM5Oyl9CiYjNDM7CiYjNDM7ICAgIHdpdGggTmV0TlMoKSBhcyBuc19oLCBOZXROUygpIGFzIG5zX3I6CiYjNDM7ICAgICAgICBpcChmJiMzNDtsaW5rIGFkZCB2ZXRoMCBuZXRucyB7bnNfaH0gdHlwZSB2ZXRoIHBlZXIgbmFtZSB2ZXRoMSBuZXRucyB7bnNfcn0mIzM0OykKJiM0MzsgICAgICAgIHdpdGggTmV0TlNFbnRlcihzdHIobnNfaCkpOgomIzQzOyAgICAgICAgICAgIF93cml0ZV9pcHY2X3N5c2N0bCgmIzM0O2NvbmYvdmV0aDAvYWNjZXB0X3JhJiMzNDssIDIpCiYjNDM7ICAgICAgICAgICAgX3dyaXRlX2lwdjZfc3lzY3RsKCYjMzQ7Y29uZi92ZXRoMC9mb3J3YXJkaW5nJiMzNDssIDApCiYjNDM7ICAgICAgICAgICAgdHJ5OgomIzQzOyAgICAgICAgICAgICAgICBfd3JpdGVfaXB2Nl9zeXNjdGwoJiMzNDtjb25mL3ZldGgwL2FjY2VwdF9yYV9ydF9pbmZvX21heF9wbGVuJiMzNDssIDY0KQomIzQzOyAgICAgICAgICAgIGV4Y2VwdCBGaWxlTm90Rm91bmRFcnJvcjoKJiM0MzsgICAgICAgICAgICAgICAgcmFpc2UgS3NmdFNraXBFeCgmIzM0O25vIENPTkZJR19JUFY2X1JPVVRFX0lORk8mIzM0OykKJiM0MzsgICAgICAgIHdpdGggTmV0TlNFbnRlcihzdHIobnNfcikpOgomIzQzOyAgICAgICAgICAgICMgc2tpcCBEQUQgc28gdGhlIHJvdXRlciYjMzk7cyBsaW5rLWxvY2FsIHNvdXJjZSBpcyB1c2FibGUgcmlnaHQgYXdheQomIzQzOyAgICAgICAgICAgIF93cml0ZV9pcHY2X3N5c2N0bCgmIzM0O2NvbmYvdmV0aDEvYWNjZXB0X2RhZCYjMzQ7LCAwKQomIzQzOyAgICAgICAgaXAoJiMzNDtsaW5rIHNldCBkZXYgdmV0aDAgdXAmIzM0OywgbnM9c3RyKG5zX2gpKQomIzQzOyAgICAgICAgaXAoJiMzNDtsaW5rIHNldCBkZXYgdmV0aDEgdXAmIzM0OywgbnM9c3RyKG5zX3IpKQomIzQzOwomIzQzOyAgICAgICAgcnRubCA9IF9ydG5sX3JvdXRlX3N1YnNjcmliZShuc19oKQomIzQzOyAgICAgICAgc29jaywgaWZpbmRleCA9IF9yYV9yb3V0ZXJfc29jayhuc19yLCAmIzM0O3ZldGgxJiMzNDspCiYjNDM7CiYjNDM7ICAgICAgICBzZWVuID0gX3JhX2FkdmVydGlzZV9yb3V0ZXMocnRubCwgc29jaywgaWZpbmRleCwgcm91dGVzLAomIzQzOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpZmV0aW1lPTE4MDAsCiYjNDM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmlvPSgmIzM5OzIwMDE6ZGI4OjU6OiYjMzk7LCA2NCwgNjAwKSwKJiM0MzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwaW89KCYjMzk7MjAwMTpkYjg6Njo6JiMzOTssIDY0LCA2MDApKQomIzQzOyAgICAgICAga3NmdF9lcShzZXQoc2VlbiksIHJvdXRlcywgJiMzNDtub3QgYWxsIFJBIHJvdXRlcyB3ZXJlIGluc3RhbGxlZCYjMzQ7KQomIzQzOyAgICAgICAgaWYgc2V0KHNlZW4pICE9IHJvdXRlczoKJiM0MzsgICAgICAgICAgICByZXR1cm4KJiM0MzsKJiM0MzsgICAgICAgIF9zZW5kX3JhKHNvY2ssIGlmaW5kZXgsIDAsIHJpbz0oJiMzOTsyMDAxOmRiODo1OjomIzM5OywgNjQsIDApLAomIzQzOyAgICAgICAgICAgICAgICAgcGlvPSgmIzM5OzIwMDE6ZGI4OjY6OiYjMzk7LCA2NCwgMCkpCiYjNDM7ICAgICAgICBzZWVuID0gX2NvbGxlY3Rfcm91dGVfbnRmcyhydG5sLCAmIzM5O2RlbHJvdXRlLW50ZiYjMzk7LCByb3V0ZXMpCiYjNDM7ICAgICAgICBmb3Iga2V5IGluIHJvdXRlczoKJiM0MzsgICAgICAgICAgICBhdHRycyA9IHNlZW4uZ2V0KGtleSkKJiM0MzsgICAgICAgICAgICBrc2Z0X25vdF9ub25lKGF0dHJzLCBmJiMzNDtubyBSVE1fREVMUk9VVEUgZm9yIHtrZXl9JiMzNDspCiYjNDM7ICAgICAgICAgICAgaWYgYXR0cnMgaXMgbm90IE5vbmU6CiYjNDM7ICAgICAgICAgICAgICAgIGtzZnRfZXEoYXR0cnMuZ2V0KCYjMzk7ZGVsLXJlYXNvbiYjMzk7KSwgJiMzOTtyYS13aXRoZHJhd24mIzM5OykKJiM0MzsKJiM0MzsKJiM0MztkZWYgaXB2Nl9yb3V0ZV9kZWxfcmVhc29uX2Fic2VudCgpIC0mZ3Q7IE5vbmU6CiYjNDM7ICAgICYjMzQ7JiMzNDsmIzM0OwomIzQzOyAgICBBIGRlbGV0aW9uIHBhdGggdGhhdCByZWNvcmRzIG5vIGNhdXNlIChoZXJlIGEgdXNlcnNwYWNlIHJlcXVlc3QpCiYjNDM7ICAgIG11c3Qgbm90IGNhcnJ5IFJUQV9ERUxfUkVBU09OIGF0IGFsbC4KJiM0MzsgICAgJiMzNDsmIzM0OyYjMzQ7CiYjNDM7CiYjNDM7ICAgIHdpdGggTmV0TlMoKSBhcyBuczoKJiM0MzsgICAgICAgIHJ0bmwgPSBfcnRubF9yb3V0ZV9zdWJzY3JpYmUobnMpCiYjNDM7ICAgICAgICBpcCgmIzM0O2xpbmsgYWRkIG5hbWUgZHVtbXkxIHR5cGUgZHVtbXkmIzM0OywgbnM9c3RyKG5zKSkKJiM0MzsgICAgICAgIGlwKCYjMzQ7bGluayBzZXQgZGV2IGR1bW15MSB1cCYjMzQ7LCBucz1zdHIobnMpKQomIzQzOyAgICAgICAgaXAoJiMzNDstNiByb3V0ZSBhZGQgMjAwMTpkYjg6MTo6LzY0IGRldiBkdW1teTEmIzM0OywgbnM9c3RyKG5zKSkKJiM0MzsgICAgICAgIGlwKCYjMzQ7LTYgcm91dGUgZGVsIDIwMDE6ZGI4OjE6Oi82NCBkZXYgZHVtbXkxJiMzNDssIG5zPXN0cihucykpCiYjNDM7CiYjNDM7ICAgICAgICBhdHRycyA9IF93YWl0X3JvdXRlX250ZihydG5sLCAmIzM5O2RlbHJvdXRlLW50ZiYjMzk7LCA2NCwgJiMzOTsyMDAxOmRiODoxOjomIzM5OykKJiM0MzsgICAgICAgIGtzZnRfbm90X25vbmUoYXR0cnMsICYjMzQ7bm8gUlRNX0RFTFJPVVRFIGZvciAyMDAxOmRiODoxOjovNjQmIzM0OykKJiM0MzsgICAgICAgIGlmIGF0dHJzIGlzIG5vdCBOb25lOgomIzQzOyAgICAgICAgICAgIGtzZnRfbm90X2luKCYjMzk7ZGVsLXJlYXNvbiYjMzk7LCBhdHRycywKJiM0MzsgICAgICAgICAgICAgICAgICAgICAgICAmIzM0O3VzZXIgZGVsZXRpb24gbXVzdCBub3QgY2FycnkgZGVsLXJlYXNvbiYjMzQ7KQomIzQzOwomIzQzOwogZGVmIG1haW4oKSAtJmd0OyBOb25lOgotICAgIGtzZnRfcnVuKFtkdW1wX21jYWRkcl9jaGVjaywgZHVtcF9tY2FkZHI2X2NoZWNrLCBpcHY0X2RldmNvbmZfbm90aWZ5XSkKJiM0MzsgICAga3NmdF9ydW4oW2R1bXBfbWNhZGRyX2NoZWNrLCBkdW1wX21jYWRkcjZfY2hlY2ssIGlwdjRfZGV2Y29uZl9ub3RpZnksCiYjNDM7ICAgICAgICAgICAgICBpcHY2X3JvdXRlX2RlbF9yZWFzb25fZXhwaXJlZCwKJiM0MzsgICAgICAgICAgICAgIGlwdjZfcm91dGVfZGVsX3JlYXNvbl9yYV93aXRoZHJhd24sCiYjNDM7ICAgICAgICAgICAgICBpcHY2X3JvdXRlX2RlbF9yZWFzb25fYWJzZW50XSkKICAgICBrc2Z0X2V4aXQoKQogCiBpZiBfX25hbWVfXyA9PSAmIzM0O19fbWFpbl9fJiMzNDs6CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDIyOjM2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyOTc1CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogNjYyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgSVB2NiBSb3V0ZSBEZWxldGlvbiBOb3RpZmljYXRpb24gUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7dmUgZ290IHRoaXMgcGF0Y2ggYWRkaW5nIGEgYFJUQV9ERUxfUkVBU09OYCBhdHRyaWJ1dGUgdG8gSVB2NiByb3V0ZSBkZWxldGlvbiBub3RpZmljYXRpb25zIChgUlRNX0RFTFJPVVRFYCkuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IHRoaXMgaXMgYSBzb2xpZCBhZGRpdGlvbjsgcHJvdmlkaW5nIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgKndoeSogYSByb3V0ZSBpcyBiZWluZyBkZWxldGVkIHNob3VsZCBiZSBoZWxwZnVsIGZvciBkZWJ1Z2dpbmcgYW5kIG1vbml0b3JpbmcuIEkgc2VlIGl0JiMzOTtzIHRvdWNoaW5nIHNldmVyYWwgY29yZSBJUHY2IGZpbGVzOiBgbmV0L2lwdjYvcm91dGUuY2AsIGBuZXQvaXB2Ni9pcDZfZmliLmNgLCBgbmV0L2lwdjYvYWRkcmNvbmYuY2AsIGFuZCBgbmV0L2lwdjYvbmRpc2MuY2AsIGFsb25nIHdpdGggYSBoZWFkZXIgYW5kIGEgbmV3IFB5dGhvbiB0ZXN0LiBGdW5jdGlvbmFsbHksIGl0IHNlZW1zIHN0cmFpZ2h0Zm9yd2FyZDogYWRkaW5nIHRoZSBhdHRyaWJ1dGUgYW5kIHBvcHVsYXRpbmcgaXQgZm9yIGV4cGlyYXRpb24gb3IgUkEgd2l0aGRyYXdhbCBzY2VuYXJpb3MuCgpOb3csIGxldCYjMzk7cyBkcmlsbCBkb3duLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGljaCBmdW5jdGlvbnMgYXJlIG1vc3QgY3JpdGljYWwgZm9yIGZ1enppbmcuIEkmIzM5O3ZlIHF1aWNrbHkgaWRlbnRpZmllZCBhIGxpc3Qgb2YgbW9kaWZpZWQgZnVuY3Rpb25zOiBgaXA2X2RlbF9ydF9yZWFzb25gLCBgZmliNl9kZWxgLCBgZmliNl9kZWxfcm91dGVgLCBgaW5ldDZfcnRfbm90aWZ5YCwgYHJ0Nl9maWxsX25vZGVgLCBgYWRkcmNvbmZfcHJlZml4X3JjdmAsIGBuZGlzY19yb3V0ZXJfZGlzY292ZXJ5YCwgYW5kIGBydDZfcm91dGVfcmN2YC4KCkEgcXVpY2sgYW5hbHlzaXMsIGFuZCBpdCBzZWVtcyB0aGF0IGBydDZfZmlsbF9ub2RlYCBpcyBhbiBpbnRlcm5hbCBoZWxwZXIsIGJ1dCBoZWF2aWx5IG1vZGlmaWVkLiBJdCB3aWxsIGJlIGltcG9ydGFudCB0byBmdXp6LCBldmVuIHRob3VnaCBzdGF0aWMuIGBpbmV0Nl9ydF9ub3RpZnlgIHNlZW1zIGxpa2UgYSBwcmltYXJ5IGNhbmRpZGF0ZSBzaW5jZSBpdCYjMzk7cyBpbnZvbHZlZCBpbiB0aGUgbmV0bGluayBtZXNzYWdlIGdlbmVyYXRpb24uIEJvdGggYGlwNl9kZWxfcnRfcmVhc29uYCBhbmQgYGZpYjZfZGVsYCBhcmUgZ2xvYmFsLCBhbmQgdGhlcmVmb3JlIGdvb2QgY2FuZGlkYXRlcy4gYGFkZHJjb25mX3ByZWZpeF9yY3ZgIGlzIGFsc28gZ2xvYmFsIGFuZCB3b3J0aCBub3RpbmcuICBgbmRpc2Nfcm91dGVyX2Rpc2NvdmVyeWAgaXMgaW50ZXJuYWwgYW5kIGxlc3Mgb2YgYSBjb25jZXJuLCBhbmQgYHJ0Nl9yb3V0ZV9yY3ZgIGlzIGdsb2JhbC4KCkZvY3VzaW5nIG9uIGBuZXQvaXB2Ni9yb3V0ZS5jYCBhbmQgYG5ldC9pcHY2L2lwNl9maWIuY2AsIEkmIzM5O2xsIGVsaW1pbmF0ZSBhbnkgaW50ZXJuYWwgb3IgaW5saW5lZCBmdW5jdGlvbnMuIFRoYXQgbGVhdmVzIG1lIHdpdGggYGlwNl9kZWxfcnRfcmVhc29uYCwgYGZpYjZfZGVsYCwgYGluZXQ2X3J0X25vdGlmeWAsIGBydDZfcm91dGVfcmN2YCwgYW5kIGBhZGRyY29uZl9wcmVmaXhfcmN2YC4gVGhlc2UgYXJlIHRoZSBrZXkgZW50cnkgcG9pbnRzIEkgbmVlZCB0byBpbnZlc3RpZ2F0ZSBmdXJ0aGVyLgoKRmluYWxseSwgSSBuZWVkIHRvIGNoZWNrIHRoZSBLY29uZmlnIG9wdGlvbnMuIFRoZSBjb2RlIGxpdmVzIGluIGBuZXQvaXB2Ni9gLCBzbyBpdCYjMzk7cyBvYnZpb3VzbHkgdGllZCB0byBgQ09ORklHX0lQVjZgLiBUaGUgdGVzdCBzY3JpcHQgbWVudGlvbnMgYENPTkZJR19JUFY2X1JPVVRFX0lORk9gIHJlbGF0ZWQgdG8gYGFjY2VwdF9yYV9ydF9pbmZvX21heF9wbGVuYC4gSSBzaG91bGQgY2hlY2sgd2hldGhlciBvciBub3QgdGhhdCYjMzk7cyBhY3R1YWxseSByZXF1aXJlZCB0byBjb21waWxlIHRoZSBjb2RlLiBBZnRlciBhIHF1aWNrIGxvb2ssIGl0IHNlZW1zIHRoYXQgdGhpcyBpcyAqbm90KiByZXF1aXJlZCBmb3IgZ2VuZXJhbCBvcGVyYXRpb24sIGFsdGhvdWdoIEkgc2hvdWxkIGxvb2sgYXQgYHJ0Nl9yb3V0ZV9yY3ZgIHRvIHNlZSB3aGF0IGlzIGNvbmRpdGlvbmFsbHkgY29tcGlsZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMjI6MzY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cnQ2X3JvdXRlX3JjdiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY2L3JvdXRlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjYvcm91dGUuYz05NjM9c3RhdGljIGJvb2wgcnQ2X2lzX2d3X29yX25vbmV4dGhvcChjb25zdCBzdHJ1Y3QgZmliNl9yZXN1bHQgKnJlcylcbi0tXG5uZXQvaXB2Ni9yb3V0ZS5jLTk2OS0jaWZkZWYgQ09ORklHX0lQVjZfUk9VVEVfSU5GT1xubmV0L2lwdjYvcm91dGUuYzo5NzA6aW50IHJ0Nl9yb3V0ZV9yY3Yoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTggKm9wdCwgaW50IGxlbixcbm5ldC9pcHY2L3JvdXRlLmMtOTcxLVx0XHQgIGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqZ3dhZGRyKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDIyOjM2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0NDMzCgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogNDkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqSW52ZXN0aWdhdGluZyBJUHY2IFJvdXRlIFJlY2VwdGlvbioqCgpBbHJpZ2h0LCBzbyBJIHNlZSBgcnQ2X3JvdXRlX3JjdmAgLSB0aGF0JiMzOTtzIHdoZXJlIHRoZSBJUHY2IHJvdXRpbmcgbWFnaWMgaGFwcGVucy4gR29vZCB0byBrbm93IGl0JiMzOTtzIHVuZGVyIGBDT05GSUdfSVBWNl9ST1VURV9JTkZPYCwgdGhhdCYjMzk7cyB0aGUgb2J2aW91cyBwbGFjZSB0byBzdGFydC4gTm93LCBsZXQmIzM5O3MgZHJpbGwgZG93biBpbnRvIGhvdyBwcmVmaXhlcyBhcmUgaGFuZGxlZC4gSSYjMzk7bSBnb2luZyB0byBqdW1wIHN0cmFpZ2h0IGludG8gYGFkZHJjb25mX3ByZWZpeF9yY3ZgIHdpdGhpbiBgbmV0L2lwdjYvYWRkcmNvbmYuY2AuIFRoYXQgZnVuY3Rpb24mIzM5O3MgZ290IHRvIGJlIHRoZSBjb3JlIG9mIHVuZGVyc3RhbmRpbmcgaG93IHByZWZpeGVzIGFyZSByZWNlaXZlZCBhbmQgcHJvY2Vzc2VkLCBhbmQgdGhhdCYjMzk7cyBjcml0aWNhbCBmb3IgaG93IHJvdXRpbmcgdGFibGVzIGFyZSBidWlsdCBhbmQgbWFpbnRhaW5lZC4gVGltZSB0byBzZWUgd2hhdCB0aGF0IGNvZGUmIzM5O3MgcmVhbGx5IGRvaW5nIHVuZGVyIHRoZSBob29kLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDIyOjM2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2FkZHJjb25mX3ByZWZpeF9yY3YmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXB2Ni9hZGRyY29uZi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY2L2FkZHJjb25mLmM9MTM2OT1zdGF0aWMgaW50IGlwdjZfY3JlYXRlX3RlbXBhZGRyKHN0cnVjdCBpbmV0Nl9pZmFkZHIgKmlmcCwgYm9vbCBibG9jaylcbi0tXG5uZXQvaXB2Ni9hZGRyY29uZi5jLTE0ODMtXHRjZmcuaWZhX2ZsYWdzID0gSUZBX0ZfVEVNUE9SQVJZO1xubmV0L2lwdjYvYWRkcmNvbmYuYzoxNDg0Olx0Lyogc2V0IGluIGFkZHJjb25mX3ByZWZpeF9yY3YoKSAqL1xubmV0L2lwdjYvYWRkcmNvbmYuYy0xNDg1LVx0aWYgKGlmcC1cdTAwM2VmbGFncyBcdTAwMjYgSUZBX0ZfT1BUSU1JU1RJQylcbi0tXG5uZXQvaXB2Ni9hZGRyY29uZi5jPTI2ODk9c3RhdGljIGJvb2wgaXNfYWRkcl9tb2RlX2dlbmVyYXRlX3N0YWJsZShzdHJ1Y3QgaW5ldDZfZGV2ICppZGV2KVxuLS1cbm5ldC9pcHY2L2FkZHJjb25mLmMtMjY5NC1cbm5ldC9pcHY2L2FkZHJjb25mLmM6MjY5NTppbnQgYWRkcmNvbmZfcHJlZml4X3Jjdl9hZGRfYWRkcihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG5uZXQvaXB2Ni9hZGRyY29uZi5jLTI2OTYtXHRcdFx0XHQgY29uc3Qgc3RydWN0IHByZWZpeF9pbmZvICpwaW5mbyxcbi0tXG5uZXQvaXB2Ni9hZGRyY29uZi5jLTI3OTUtfVxubmV0L2lwdjYvYWRkcmNvbmYuYzoyNzk2OkVYUE9SVF9TWU1CT0xfR1BMKGFkZHJjb25mX3ByZWZpeF9yY3ZfYWRkX2FkZHIpO1xubmV0L2lwdjYvYWRkcmNvbmYuYy0yNzk3LVxubmV0L2lwdjYvYWRkcmNvbmYuYzoyNzk4OnZvaWQgYWRkcmNvbmZfcHJlZml4X3JjdihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1OCAqb3B0LCBpbnQgbGVuLCBib29sIHNsbGFvKVxubmV0L2lwdjYvYWRkcmNvbmYuYy0yNzk5LXtcbi0tXG5uZXQvaXB2Ni9hZGRyY29uZi5jLTI5NDMtb2s6XG5uZXQvaXB2Ni9hZGRyY29uZi5jOjI5NDQ6XHRcdGVyciA9IGFkZHJjb25mX3ByZWZpeF9yY3ZfYWRkX2FkZHIobmV0LCBkZXYsIHBpbmZvLCBpbjZfZGV2LFxubmV0L2lwdjYvYWRkcmNvbmYuYy0yOTQ1LVx0XHRcdFx0XHRcdCAgIFx1MDAyNmFkZHIsIGFkZHJfdHlwZSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAyMjozNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTE3MQoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDM1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duLCBhcyBhIG5ldHdvcmtpbmcgZXhwZXJ0OgoKKipJbnZlc3RpZ2F0aW5nIElQdjYgQ29uZmlndXJhdGlvbiBEZXBlbmRlbmNpZXMqKgoKQWxyaWdodCwgbGV0IG1lIHRoaW5rIHRoaXMgdGhyb3VnaC4gYGFkZHJjb25mX3ByZWZpeF9yY3ZgLi4uIHJpZ2h0LCB0aGF0IG9uZSBzZWVtcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkLiBBcyBmYXIgYXMgSSBjYW4gdGVsbCwgaXQmIzM5O3Mgbm90IG5lc3RsZWQgdW5kZXIgc29tZSBzcGVjaWZpYywgZ3JhbnVsYXIgY29uZmlndXJhdGlvbiBvcHRpb24uIEl0JiMzOTtzIGp1c3QgaW5oZXJlbnRseSB0aWVkIHRvIHRoZSBicm9hZGVyIGBDT05GSUdfSVBWNmAgc2V0dGluZy4gVGhhdCBtYWtlcyBzZW5zZSwga2VlcHMgdGhpbmdzIHJlbGF0aXZlbHkgY2xlYW4uCgpOb3csIGhvbGQgb24uLi4gd2hhdCBhYm91dCBgbmRpc2Nfcm91dGVyX2Rpc2NvdmVyeWA/IEkgbmVlZCB0byBkb3VibGUtY2hlY2sgdGhhdCBvbmUuIElzIGl0IHNpbWlsYXJseSB1bmNvbnN0cmFpbmVkLCBqdXN0IGVuYWJsZWQgYnkgdmlydHVlIG9mIElQdjYgYmVpbmcgZW5hYmxlZCwgb3IgZG9lcyBpdCBoYXZlIGl0cyBvd24gbGl0dGxlIHRvZ2dsZSBzb21ld2hlcmUsIG9yIG1heWJlIGRlcGVuZCBvbiBhbm90aGVyLCBzbWFsbGVyIGNvbmZpZyBzZXR0aW5nPyBJIG5lZWQgdG8gY29uZmlybSBpdHMgZGVwZW5kZW5jeSBzdHJ1Y3R1cmUgdG8gYXZvaWQgYW55IHN1cnByaXNlcyBkb3duIHRoZSBsaW5lLCBlc3BlY2lhbGx5IHdpdGggcmVnYXJkcyB0byByZXNvdXJjZSB1dGlsaXphdGlvbiBhbmQgbW9kdWxlIGxvYWRpbmcuIExldCBtZSBsb29rIGRlZXBlciBhdCB0aGF0IGNvbmZpZ3VyYXRpb24gb3B0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDIyOjM2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O25kaXNjX3JvdXRlcl9kaXNjb3ZlcnkmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXB2Ni9uZGlzYy5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY2L25kaXNjLmM9MTE4Mj1zdGF0aWMgdm9pZCBuZGlzY19yYV91c2Vyb3B0KHN0cnVjdCBza19idWZmICpyYSwgc3RydWN0IG5kX29wdF9oZHIgKm9wdClcbi0tXG5uZXQvaXB2Ni9uZGlzYy5jLTEyMzAtXG5uZXQvaXB2Ni9uZGlzYy5jOjEyMzE6c3RhdGljIGVudW0gc2tiX2Ryb3BfcmVhc29uIG5kaXNjX3JvdXRlcl9kaXNjb3Zlcnkoc3RydWN0IHNrX2J1ZmYgKnNrYilcbm5ldC9pcHY2L25kaXNjLmMtMTIzMi17XG4tLVxubmV0L2lwdjYvbmRpc2MuYz0xODA2PWVudW0gc2tiX2Ryb3BfcmVhc29uIG5kaXNjX3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9pcHY2L25kaXNjLmMtMTg0NS1cdGNhc2UgTkRJU0NfUk9VVEVSX0FEVkVSVElTRU1FTlQ6XG5uZXQvaXB2Ni9uZGlzYy5jOjE4NDY6XHRcdHJlYXNvbiA9IG5kaXNjX3JvdXRlcl9kaXNjb3Zlcnkoc2tiKTtcbm5ldC9pcHY2L25kaXNjLmMtMTg0Ny1cdFx0YnJlYWs7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMjI6MzY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTU2ODUKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAzMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0JiMzOTtzIGludGVybmFsIG1vbm9sb2d1ZToKCioqSW52ZXN0aWdhdGluZyBJUHY2IFJvdXRlciBEaXNjb3ZlcnkgQ29uZmlndXJhdGlvbioqCgpSaWdodCwgc28gYG5kaXNjX3JvdXRlcl9kaXNjb3ZlcnlgIGlzIGZsYWdnZWQgYXMgKnN0YXRpYyouIFRoaXMgaW1tZWRpYXRlbHkgcmFpc2VzIGEgZmxhZy4gV2UgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcyBzdGF0aWMgbmF0dXJlIHdpdGhpbiB0aGUgSVB2NiByb3V0aW5nIGNvbnRleHQuIEFyZSB3ZSB0YWxraW5nIGNvbXBpbGUtdGltZSBmaXhlZCwgb3IgaXMgdGhlcmUgYSBsaW1pdGVkIHJ1bnRpbWUgY29uZmlndXJhdGlvbiB0aGF0JiMzOTtzIGJlaW5nIG92ZXJsb29rZWQ/IFRoZSBuZXh0IHN0ZXBzIGFyZSBvYnZpb3VzOiB3ZSBuZWVkIHRvIGRlbHZlIGRlZXBlciBpbnRvIGhvdyB0aGlzIHN0YXRpYyBmbGFnIGludGVyYWN0cyB3aXRoIHJvdXRlIGRlbGV0aW9uIHdpdGhpbiBJUHY2LgoKTXkgZmlyc3QgdGhvdWdodCBpcyB0byB6ZXJvIGluIG9uIGBpcDZfZGVsX3J0X3JlYXNvbmAuIFRoaXMgZnVuY3Rpb24gbGlrZWx5IHNwZWNpZmllcyAqd2h5KiBhIHJvdXRlIGlzIGJlaW5nIHJlbW92ZWQuIFVuZGVyc3RhbmRpbmcgdGhlIHJlYXNvbiDigJMgd2hldGhlciBpdCYjMzk7cyBkdWUgdG8gcm91dGVyIGFkdmVydGlzZW1lbnQgZXhwaXJhdGlvbiwgbmVpZ2hib3IgZGlzY292ZXJ5IGNoYW5nZXMsIG9yIHNvbWV0aGluZyBlbHNlIGVudGlyZWx5IOKAkyB3aWxsIGJlIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoZSBzdGF0aWMgbmF0dXJlJiMzOTtzIGltcGFjdC4gRG9lcyB0aGUgc3RhdGljIGNvbmZpZ3VyYXRpb24gZGlyZWN0bHkgaW5mbHVlbmNlIHRoZSByZWFzb25zIGEgcm91dGUgaXMgZWxpZ2libGUgZm9yIHJlbW92YWw/IE9yIGRvZXMgdGhpcyBhcHBseSB0byB0aGUgbmV4dCBzZWN0aW9uPwoKVGhlbiwgd2UgbmVlZCB0byBpbW1lZGlhdGVseSB1bmRlcnN0YW5kIHRoZSBmdW5jdGlvbiBgZmliNl9kZWxgLiBUaGlzIHdvdWxkIGJlIHRoZSBhY3R1YWwgZnVuY3Rpb24gdGhhdCBoYW5kbGVzIHRoZSByb3V0ZSB0YWJsZSBkZWxldGlvbi4gSXMgdGhlIHN0YXRpYyBmbGFnIGEgZGlyZWN0IHBhcmFtZXRlciBvZiB0aGlzIGZ1bmN0aW9uPyBIb3cgd291bGQgaXRzIGJlaGF2aW9yIGNoYW5nZSBieSB0aGUgdmFsdWUgb2YgdGhlIGZsYWc/IENhbiB3ZSBmb3JjZSBhIHJvdXRlIHRvIG5vdCBiZSBkZWxldGVkLCBpZiB0aGUgc3RhdGljIGZsYWcgaXMgc2V0IHRvIHRydWU/IFRoaXMgd2lsbCB0ZWxsIHVzIGlmIHJvdXRlcyB3aXRoIHNwZWNpZmljIHN0YXRpYyBhdHRyaWJ1dGVzIGFyZSBoYW5kbGVkIGRpZmZlcmVudGx5IGR1cmluZyB0aGUgZGVsZXRpb24gcHJvY2Vzcy4gTXkgZ3V0IHRlbGxzIG1lIHRoZXJlJiMzOTtzIGEgc3Ryb25nIGNvcnJlbGF0aW9uIGJldHdlZW4gYG5kaXNjX3JvdXRlcl9kaXNjb3ZlcnlgJiMzOTtzIHN0YXRpYyBzZXR0aW5nIGFuZCBob3cgdGhlIEZJQiBoYW5kbGVzIHRoZXNlIHJvdXRlcy4gVGltZSB0byBkaWcgaW4gYW5kIHNlZSB0aGUgbG93LWxldmVsIGludGVyYWN0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMjI6MzY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aXA2X2RlbF9ydF9yZWFzb24mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXB2Ni9yb3V0ZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY2L3JvdXRlLmM9OTcwPWludCBydDZfcm91dGVfcmN2KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHU4ICpvcHQsIGludCBsZW4sXG4tLVxubmV0L2lwdjYvcm91dGUuYy0xMDIyLVx0aWYgKHJ0IFx1MDAyNlx1MDAyNiAhbGlmZXRpbWUpIHtcbm5ldC9pcHY2L3JvdXRlLmM6MTAyMzpcdFx0aXA2X2RlbF9ydF9yZWFzb24obmV0LCBydCwgZmFsc2UsIFJUQV9ERUxfUkVBU09OX1JBX1dJVEhEUkFXTik7XG5uZXQvaXB2Ni9yb3V0ZS5jLTEwMjQtXHRcdHJ0ID0gTlVMTDtcbi0tXG5uZXQvaXB2Ni9yb3V0ZS5jPTM5NzY9c3RhdGljIGludCBfX2lwNl9kZWxfcnQoc3RydWN0IGZpYjZfaW5mbyAqcnQsIHN0cnVjdCBubF9pbmZvICppbmZvLFxuLS1cbm5ldC9pcHY2L3JvdXRlLmMtMzk5Ny1cbm5ldC9pcHY2L3JvdXRlLmM6Mzk5ODppbnQgaXA2X2RlbF9ydF9yZWFzb24oc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZmliNl9pbmZvICpydCwgYm9vbCBza2lwX25vdGlmeSxcbm5ldC9pcHY2L3JvdXRlLmMtMzk5OS1cdFx0ICAgICAgdTMyIGRlbF9yZWFzb24pXG4tLVxubmV0L2lwdjYvcm91dGUuYz00MDA5PWludCBpcDZfZGVsX3J0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZpYjZfaW5mbyAqcnQsIGJvb2wgc2tpcF9ub3RpZnkpXG5uZXQvaXB2Ni9yb3V0ZS5jLTQwMTAte1xubmV0L2lwdjYvcm91dGUuYzo0MDExOlx0cmV0dXJuIGlwNl9kZWxfcnRfcmVhc29uKG5ldCwgcnQsIHNraXBfbm90aWZ5LCBSVEFfREVMX1JFQVNPTl9VTlNQRUMpO1xubmV0L2lwdjYvcm91dGUuYy00MDEyLX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMjI6MzY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTY0NzkKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAyNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgSVB2NiBSb3V0ZSBEZWxldGlvbioqCgpPa2F5LCBzbyBgaXA2X2RlbF9ydF9yZWFzb25gIGlzIGEgZ2xvYmFsIHZhcmlhYmxlLiBUaGF0IGltbWVkaWF0ZWx5IGZsYWdzIGEgcG90ZW50aWFsIGNvbmNlcm4g4oCTIGdsb2JhbCBzdGF0ZSBjYW4gYmUgYSBzb3VyY2Ugb2YgdHJpY2t5IGNvbmN1cnJlbmN5IGJ1Z3MsIGVzcGVjaWFsbHkgaW4gYSBuZXR3b3JraW5nIGNvbnRleHQuIFNvLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgYW5kIHdoZXJlIHRoaXMgdmFyaWFibGUgaXMgYmVpbmcgdXNlZC4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8ga25vdyB3aHkgYW5kIGhvdyBhICYjMzQ7cmVhc29uJiMzNDsgaXMgYmVpbmcgc2V0IG9uIGRlbGV0aW9uIGFuZCB3aGF0IHRoZSBpbXBsaWNhdGlvbnMgYXJlLgoKTXkgbmV4dCBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byB0cmFjZSB0aGUgZGVsZXRpb24gcHJvY2VzcyBpdHNlbGYuIExldCYjMzk7cyBkaWcgaW50byBgZmliNl9kZWxgLiBUaGF0JiMzOTtzIHdoZXJlIHRoZSBydWJiZXIgbWVldHMgdGhlIHJvYWQsIHNvIHRvIHNwZWFrLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgcm91dGUgZGVsZXRpb24gaXMgaGFuZGxlZCBhdCB0aGUgY29yZSBsZXZlbC4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIG5vdyB0aGlua2luZyBhYm91dCBob3cgdGhlIGdsb2JhbCB2YXJpYWJsZSBgaXA2X2RlbF9ydF9yZWFzb25gIGludGVyYWN0cyB3aXRoIHRoZSBmdW5jdGlvbiBgZmliNl9kZWxgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAyMjozNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtmaWI2X2RlbCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY2L2lwNl9maWIuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2Ni9pcDZfZmliLmM9MTg0Mj1zdGF0aWMgc3RydWN0IGZpYjZfbm9kZSAqZmliNl9yZXBhaXJfdHJlZShzdHJ1Y3QgbmV0ICpuZXQsXG4tLVxubmV0L2lwdjYvaXA2X2ZpYi5jLTE5NjktXG5uZXQvaXB2Ni9pcDZfZmliLmM6MTk3MDpzdGF0aWMgdm9pZCBmaWI2X2RlbF9yb3V0ZShzdHJ1Y3QgZmliNl90YWJsZSAqdGFibGUsIHN0cnVjdCBmaWI2X25vZGUgKmZuLFxubmV0L2lwdjYvaXA2X2ZpYi5jLTE5NzEtXHRcdFx0ICAgc3RydWN0IGZpYjZfaW5mbyBfX3JjdSAqKnJ0cCwgc3RydWN0IG5sX2luZm8gKmluZm8sXG4tLVxubmV0L2lwdjYvaXA2X2ZpYi5jLTIwNjYtLyogTmVlZCB0byBvd24gdGFibGUtXHUwMDNldGI2X2xvY2sgKi9cbm5ldC9pcHY2L2lwNl9maWIuYzoyMDY3OmludCBmaWI2X2RlbChzdHJ1Y3QgZmliNl9pbmZvICpydCwgc3RydWN0IG5sX2luZm8gKmluZm8sIHUzMiBkZWxfcmVhc29uKVxubmV0L2lwdjYvaXA2X2ZpYi5jLTIwNjgte1xuLS1cbm5ldC9pcHY2L2lwNl9maWIuYy0yMDk1LVx0XHRcdFx0ZmliNl9yb3V0ZXNfcmVxdWlyZV9zcmNfZGVjKGluZm8tXHUwMDNlbmxfbmV0KTtcbm5ldC9pcHY2L2lwNl9maWIuYzoyMDk2Olx0XHRcdGZpYjZfZGVsX3JvdXRlKHRhYmxlLCBmbiwgcnRwLCBpbmZvLCBkZWxfcmVhc29uKTtcbm5ldC9pcHY2L2lwNl9maWIuYy0yMDk3LVx0XHRcdHJldHVybiAwO1xuLS1cbm5ldC9pcHY2L2lwNl9maWIuYy0yMTA3LSAqXHRDZXJ0YWlubHksIGl0IGlzIG5vdCBpbnRlcnJ1cHQgc2FmZS5cbm5ldC9pcHY2L2lwNl9maWIuYzoyMTA4OiAqXHRIb3dldmVyLCBpdCBpcyBpbnRlcm5hbGx5IHJlZW50ZXJhYmxlIHdydCBpdHNlbGYgYW5kIGZpYjZfYWRkL2ZpYjZfZGVsLlxubmV0L2lwdjYvaXA2X2ZpYi5jLTIxMDktICpcdEl0IG1lYW5zLCB0aGF0IHdlIGNhbiBtb2RpZnkgdHJlZSBkdXJpbmcgd2Fsa2luZ1xuLS1cbm5ldC9pcHY2L2lwNl9maWIuYz0yMjM0PXN0YXRpYyBpbnQgZmliNl9jbGVhbl9ub2RlKHN0cnVjdCBmaWI2X3dhbGtlciAqdylcbi0tXG5uZXQvaXB2Ni9pcDZfZmliLmMtMjI1Ny1cdFx0XHR3LVx1MDAzZWxlYWYgPSBydDtcbm5ldC9pcHY2L2lwNl9maWIuYzoyMjU4Olx0XHRcdHJlcyA9IGZpYjZfZGVsKHJ0LCBcdTAwMjZpbmZvLCBSVEFfREVMX1JFQVNPTl9VTlNQRUMpO1xubmV0L2lwdjYvaXA2X2ZpYi5jLTIyNTktXHRcdFx0aWYgKHJlcykge1xuLS1cbm5ldC9pcHY2L2lwNl9maWIuYz0yMzkzPXN0YXRpYyB2b2lkIGZpYjZfZ2NfdGFibGUoc3RydWN0IG5ldCAqbmV0LFxuLS1cbm5ldC9pcHY2L2lwNl9maWIuYy0yNDA1LVx0XHRpZiAoZmliNl9hZ2UocnQsIGdjX2FyZ3MpID09IC0xKVxubmV0L2lwdjYvaXA2X2ZpYi5jOjI0MDY6XHRcdFx0ZmliNl9kZWwocnQsIFx1MDAyNmluZm8sIFJUQV9ERUxfUkVBU09OX0VYUElSRUQpO1xubmV0L2lwdjYvaXA2X2ZpYi5jLTI0MDctfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAyMjozNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzQzNwoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDIyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaXQgc3RhbmRzOgoKKipOYXZpZ2F0aW5nIElQdjYgUm91dGluZyBhbmQgTm90aWZpY2F0aW9ucyoqCgpPa2F5LCBzbyBgZmliNl9kZWxgLi4uIHJpZ2h0LCB0aGF0JiMzOTtzIGEgZ2xvYmFsIHZhcmlhYmxlLiBOb3csIHdoZXJlIGRvZXMgdGhhdCBhY3R1YWxseSBjb21lIGludG8gcGxheT8gTXkgbWluZCBpbW1lZGlhdGVseSBqdW1wcyB0byB0aGUgbWVjaGFuaXNtcyBmb3IgZGVhbGluZyB3aXRoIHJvdXRlIHVwZGF0ZXMgYW5kIHJlbW92YWxzIHdpdGhpbiB0aGUgSVB2NiBzdGFjay4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBpbnRlcmFjdGlvbnMuIEkmIzM5O2xsIG5lZWQgdG8gZmlndXJlIG91dCB3aGVyZSB0aGF0JiMzOTtzIGFjdHVhbGx5IGJlaW5nIHVzZWQuIExldCBtZSBjaGVjayB0aGUgY29kZSBhc3NvY2lhdGVkIHdpdGggYGluZXQ2X3J0X25vdGlmeWAuIFRoYXQgZmVlbHMgbGlrZSBhIGxvZ2ljYWwgbmV4dCBzdGVwIHRvIGxvb2sgaW50byBhcyB0aGF0IHNlZW1zIGxpa2UgYSBnb29kIHBsYWNlIHRvIHN0YXJ0IG15IGludmVzdGlnYXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDIyOjM2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2luZXQ2X3J0X25vdGlmeSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY2L3JvdXRlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjYvcm91dGUuYz01MzczPXN0YXRpYyB2b2lkIGlwNl9yb3V0ZV9tcGF0aF9ub3RpZnkoc3RydWN0IGZpYjZfaW5mbyAqcnQsXG4tLVxubmV0L2lwdjYvcm91dGUuYy01MzkzLVx0aWYgKHJ0KVxubmV0L2lwdjYvcm91dGUuYzo1Mzk0Olx0XHRpbmV0Nl9ydF9ub3RpZnkoUlRNX05FV1JPVVRFLCBydCwgaW5mbywgbmxmbGFncyxcbm5ldC9pcHY2L3JvdXRlLmMtNTM5NS1cdFx0XHRcdFJUQV9ERUxfUkVBU09OX1VOU1BFQyk7XG4tLVxubmV0L2lwdjYvcm91dGUuYz02MjMxPXN0YXRpYyBpbnQgaW5ldDZfcnRtX2dldHJvdXRlKHN0cnVjdCBza19idWZmICppbl9za2IsIHN0cnVjdCBubG1zZ2hkciAqbmxoLFxuLS1cbm5ldC9pcHY2L3JvdXRlLmMtNjM3OS1cbm5ldC9pcHY2L3JvdXRlLmM6NjM4MDp2b2lkIGluZXQ2X3J0X25vdGlmeShpbnQgZXZlbnQsIHN0cnVjdCBmaWI2X2luZm8gKnJ0LCBzdHJ1Y3QgbmxfaW5mbyAqaW5mbyxcbm5ldC9pcHY2L3JvdXRlLmMtNjM4MS1cdFx0ICAgICB1bnNpZ25lZCBpbnQgbmxtX2ZsYWdzLCB1MzIgZGVsX3JlYXNvbilcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMjI6MzY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTc4OTUKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAyNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKk5hdmlnYXRpbmcgSVB2NiBSb3V0aW5nIE5vdGlmaWNhdGlvbnMqKgoKT2theSwgc28gYGluZXQ2X3J0X25vdGlmeWAgaXMgYSBnbG9iYWxseSBhY2Nlc3NpYmxlIGZ1bmN0aW9uLCBtZWFuaW5nIGl0JiMzOTtzIGxpa2VseSBhIGNlbnRyYWwgcG9pbnQgZm9yIGhhbmRsaW5nIElQdjYgcm91dGluZyB1cGRhdGVzLiBUaGF0IGltbWVkaWF0ZWx5IHBpcXVlcyBteSBpbnRlcmVzdC4gSXQgc3VnZ2VzdHMgYSBrZXkgaW50ZXJhY3Rpb24gcG9pbnQgd2l0aGluIHRoZSBrZXJuZWwmIzM5O3MgSVB2NiByb3V0aW5nIGluZnJhc3RydWN0dXJlLgoKTXkgbmV4dCBzdGVwIGlzIGNsZWFyLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhpcyBnbG9iYWwgZnVuY3Rpb24gaXMgYmVpbmcgdXNlZC4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIGdvaW5nIHRvIGRpZyBpbnRvIGBydDZfcm91dGVfcmN2YC4gSXQmIzM5O3MgaGlnaGx5IHByb2JhYmxlIHRoYXQgdGhpcyByb3V0aW5lIGlzIGEgY2FsbGVyIG9yIHJlY2VpdmVyIG9mIHRoZSBpbmZvcm1hdGlvbiBmbG93aW5nIHRocm91Z2ggYGluZXQ2X3J0X25vdGlmeWAuIEkgbmVlZCB0byBjb25maXJtIHdoZXRoZXIgYHJ0Nl9yb3V0ZV9yY3ZgIGlzIGRpcmVjdGx5IGludm9sdmVkIG9yIGlmIHRoZXJlJiMzOTtzIGFuIGluZGlyZWN0IGNvbm5lY3Rpb24uIEkmIzM5O2xsIGFuYWx5emUgaG93IHJvdXRpbmcgbm90aWZpY2F0aW9ucyBhcmUgYmVpbmcgaGFuZGxlZCwgdG8gY29uZmlybSB0aGlzIHJlbGF0aW9uc2hpcC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMjI6MzY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cnQ2X3JvdXRlX3JjdiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY2L3JvdXRlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjYvcm91dGUuYz05NjM9c3RhdGljIGJvb2wgcnQ2X2lzX2d3X29yX25vbmV4dGhvcChjb25zdCBzdHJ1Y3QgZmliNl9yZXN1bHQgKnJlcylcbi0tXG5uZXQvaXB2Ni9yb3V0ZS5jLTk2OS0jaWZkZWYgQ09ORklHX0lQVjZfUk9VVEVfSU5GT1xubmV0L2lwdjYvcm91dGUuYzo5NzA6aW50IHJ0Nl9yb3V0ZV9yY3Yoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTggKm9wdCwgaW50IGxlbixcbm5ldC9pcHY2L3JvdXRlLmMtOTcxLVx0XHQgIGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqZ3dhZGRyKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAyMjozNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODI4MQoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDM1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIElQdjYgUm91dGluZyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYHJ0Nl9yb3V0ZV9yY3ZgLCBhbmQgbXkgaW5pdGlhbCB0aG91Z2h0IGlzLCAmIzM0O1JpZ2h0LCB0aGlzIGlzIG5lc3RsZWQgdW5kZXIgYENPTkZJR19JUFY2X1JPVVRFX0lORk9gLiYjMzQ7IFRoYXQmIzM5O3MgdGhlIGZpcnN0IGtleSBwb2ludCB0byByZW1lbWJlciBmb3IgdW5kZXJzdGFuZGluZyBpdHMgY29udGV4dCB3aXRoaW4gdGhlIGJyb2FkZXIgSVB2NiBuZXR3b3JraW5nIHN0YWNrLiBJdCBpbnN0YW50bHkgcG9pbnRzIG1lIHRvIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgdGhhdCBlbmFibGUgdGhpcyBmdW5jdGlvbmFsaXR5LgoKTm93LCB0byBnZXQgYSBiZXR0ZXIgZ3Jhc3Agb24gdGhlIG92ZXJhbGwgZmxvdywgbGV0JiMzOTtzIGFsc28gY2hlY2sgYW5kIHVuZGVyc3RhbmQgYGFkZHJjb25mX3ByZWZpeF9yY3ZgIHNpbmNlIGl0IHJlbGF0ZXMgdG8gcHJlZml4IHJlY2VwdGlvbi4gSSBoYXZlIGEgaHVuY2ggdGhpcyBtaWdodCBiZSByZWxhdGVkIHRvIGhvdyByb3V0aW5nIGluZm9ybWF0aW9uIGlzIGFjcXVpcmVkIGluIHRoaXMgY29udGV4dCwgc28gdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHRoZXNlIHR3byBmdW5jdGlvbnMgaXMgdGhlIGtleSBhcmVhIGZvciBleGFtaW5hdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMjI6MzY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YWRkcmNvbmZfcHJlZml4X3JjdiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY2L2FkZHJjb25mLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjYvYWRkcmNvbmYuYz0xMzY5PXN0YXRpYyBpbnQgaXB2Nl9jcmVhdGVfdGVtcGFkZHIoc3RydWN0IGluZXQ2X2lmYWRkciAqaWZwLCBib29sIGJsb2NrKVxuLS1cbm5ldC9pcHY2L2FkZHJjb25mLmMtMTQ4My1cdGNmZy5pZmFfZmxhZ3MgPSBJRkFfRl9URU1QT1JBUlk7XG5uZXQvaXB2Ni9hZGRyY29uZi5jOjE0ODQ6XHQvKiBzZXQgaW4gYWRkcmNvbmZfcHJlZml4X3JjdigpICovXG5uZXQvaXB2Ni9hZGRyY29uZi5jLTE0ODUtXHRpZiAoaWZwLVx1MDAzZWZsYWdzIFx1MDAyNiBJRkFfRl9PUFRJTUlTVElDKVxuLS1cbm5ldC9pcHY2L2FkZHJjb25mLmM9MjY4OT1zdGF0aWMgYm9vbCBpc19hZGRyX21vZGVfZ2VuZXJhdGVfc3RhYmxlKHN0cnVjdCBpbmV0Nl9kZXYgKmlkZXYpXG4tLVxubmV0L2lwdjYvYWRkcmNvbmYuYy0yNjk0LVxubmV0L2lwdjYvYWRkcmNvbmYuYzoyNjk1OmludCBhZGRyY29uZl9wcmVmaXhfcmN2X2FkZF9hZGRyKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbm5ldC9pcHY2L2FkZHJjb25mLmMtMjY5Ni1cdFx0XHRcdCBjb25zdCBzdHJ1Y3QgcHJlZml4X2luZm8gKnBpbmZvLFxuLS1cbm5ldC9pcHY2L2FkZHJjb25mLmMtMjc5NS19XG5uZXQvaXB2Ni9hZGRyY29uZi5jOjI3OTY6RVhQT1JUX1NZTUJPTF9HUEwoYWRkcmNvbmZfcHJlZml4X3Jjdl9hZGRfYWRkcik7XG5uZXQvaXB2Ni9hZGRyY29uZi5jLTI3OTctXG5uZXQvaXB2Ni9hZGRyY29uZi5jOjI3OTg6dm9pZCBhZGRyY29uZl9wcmVmaXhfcmN2KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHU4ICpvcHQsIGludCBsZW4sIGJvb2wgc2xsYW8pXG5uZXQvaXB2Ni9hZGRyY29uZi5jLTI3OTkte1xuLS1cbm5ldC9pcHY2L2FkZHJjb25mLmMtMjk0My1vazpcbm5ldC9pcHY2L2FkZHJjb25mLmM6Mjk0NDpcdFx0ZXJyID0gYWRkcmNvbmZfcHJlZml4X3Jjdl9hZGRfYWRkcihuZXQsIGRldiwgcGluZm8sIGluNl9kZXYsXG5uZXQvaXB2Ni9hZGRyY29uZi5jLTI5NDUtXHRcdFx0XHRcdFx0ICAgXHUwMDI2YWRkciwgYWRkcl90eXBlLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAyMjozNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTAwMQoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDkyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IElQdjYgUm91dGUgSW52ZXN0aWdhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGRpdmluZyBpbnRvIHRoaXMgYGFkZHJjb25mX3ByZWZpeF9yY3ZgIHRoaW5nLiBJdCYjMzk7cyBnbG9iYWwsIHdoaWNoIGltbWVkaWF0ZWx5IGZsYWdzIGl0IGFzIHNvbWV0aGluZyBzaWduaWZpY2FudC4gVG8gcHJvcGVybHkgdW5kZXJzdGFuZCBpdHMgYmVoYXZpb3IsIEkgbmVlZCB0byBsb29rIGF0IGl0cyBpbnRlcmFjdGlvbnMgd2l0aCBhIGZldyBrZXkgZnVuY3Rpb25zOiBgaXA2X2RlbF9ydF9yZWFzb25gLCBgZmliNl9kZWxgLCBgaW5ldDZfcnRfbm90aWZ5YCwgYW5kIGBydDZfcm91dGVfcmN2YC4gVGhvc2UgYXJlIHRoZSBwcmltZSBzdXNwZWN0cyBmb3IgaW5mbHVlbmNpbmcgb3IgYmVpbmcgaW5mbHVlbmNlZCBieSBgYWRkcmNvbmZfcHJlZml4X3JjdmAuCgpCZWZvcmUgSSBkaWcgdG9vIGRlZXAsIEkgc2hvdWxkIGNoZWNrIHdoZXRoZXIgYENPTkZJR19JUFY2X1JPVVRFX0lORk9gIGhhcyBhbnkgZGVwZW5kZW5jaWVzLiBVbmRlcnN0YW5kaW5nIGFueSBwb3RlbnRpYWwgYnVpbGQtdGltZSBjb25zdHJhaW50cyBvciBjb25kaXRpb25hbCBiZWhhdmlvcnMgYXNzb2NpYXRlZCB3aXRoIHRoYXQgc2V0dGluZyBjb3VsZCBzYXZlIG1lIGEgbG90IG9mIHRpbWUgZG93biB0aGUgbGluZS4gVGhhdCYjMzk7cyBhIHNvbGlkIGZpcnN0IHN0ZXAuIExldCYjMzk7cyBzZWUgd2hhdCB0aGF0IHJldmVhbHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDIyOjM2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBJUFY2X1JPVVRFX0lORk8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXB2Ni9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY2L0tjb25maWc9MjE9Y29uZmlnIElQVjZfUk9VVEVSX1BSRUZcbi0tXG5uZXQvaXB2Ni9LY29uZmlnLTMwLVxubmV0L2lwdjYvS2NvbmZpZzozMTpjb25maWcgSVBWNl9ST1VURV9JTkZPXG5uZXQvaXB2Ni9LY29uZmlnLTMyLVx0Ym9vbCBcJiMzNDtJUHY2OiBSb3V0ZSBJbmZvcm1hdGlvbiAoUkZDIDQxOTEpIHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMjI6MzY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTk0MDcKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAxNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIHN1bW1hcml6ZWQgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRoZSBwcm92aWRlZCBwcm9tcHQ6CgoqKkFuYWx5emluZyB0aGUgRGVwZW5kZW5jeSBMYW5kc2NhcGUgb2YgSVBWNl9ST1VURV9JTkZPKioKCk9rYXksIHNvIHRoZSBwcm9tcHQgd2FudHMgbWUgdG8gYW5hbHl6ZSB0aGUgZGVwZW5kZW5jaWVzIG9mIGBJUFY2X1JPVVRFX0lORk9gLiBNeSBpbml0aWFsIGluc3RpbmN0LCBnaXZlbiBteSBleHBlcmllbmNlLCBpcyB0byBpbW1lZGlhdGVseSBzdGFydCB0aGlua2luZyBhYm91dCBob3cgdGhpcyByZWxhdGVzIHRvIG15IHNwZWNpZmljIGV4cGVydGlzZS4gSSYjMzk7bSBhc3N1bWluZyB0aGlzIGlzIGEgZGF0YSBzdHJ1Y3R1cmUgb3IgYSBjb25jZXB0IHdpdGhpbiB0aGUgY29udGV4dCBvZiBJUHY2IHJvdXRpbmcsIGxpa2VseSByZWxhdGVkIHRvIGhvdyByb3V0aW5nIGluZm9ybWF0aW9uIGlzIHN0b3JlZCBvciByZXByZXNlbnRlZC4KClRoZSB3b3JkICYjMzQ7ZGVwZW5kZW5jaWVzJiMzNDsgaXMgY3J1Y2lhbC4gSXQgc3VnZ2VzdHMgSSBuZWVkIHRvIGlkZW50aWZ5IGV2ZXJ5dGhpbmcgdGhhdCAqcmVsaWVzKiBvbiBgSVBWNl9ST1VURV9JTkZPYCwgYW5kIHBvdGVudGlhbGx5IHdoYXQgYElQVjZfUk9VVEVfSU5GT2AgaXRzZWxmIGRlcGVuZHMgdXBvbi4gSXMgdGhpcyBhYm91dCBzb2Z0d2FyZSBtb2R1bGVzLCBsaWJyYXJpZXMsIG9yIG5ldHdvcmsgY29uZmlndXJhdGlvbiBlbGVtZW50cz8gQXJlIHRoZXJlIGFzc29jaWF0ZWQgY29uZmlndXJhdGlvbiBmaWxlcyBvciBzeXN0ZW0gY2FsbHM/IEFyZSB3ZSB0YWxraW5nIGFib3V0IGEgZGF0YSBzdHJ1Y3R1cmUsIGEgZnVuY3Rpb24sIGEgbW9kdWxlLCBvciBzb21ldGhpbmcgZWxzZSBlbnRpcmVseT8KCk15IGJyYWluJiMzOTtzIGFscmVhZHkgbWFwcGluZyBvdXQgcG90ZW50aWFsIGFyZWFzIHRvIGludmVzdGlnYXRlOgoKKiAgICoqQ29kZToqKiBJZiBpdCYjMzk7cyBjb2RlLCBJJiMzOTtsbCBuZWVkIHRvIGxvb2sgZm9yIGAjaW5jbHVkZWAgc3RhdGVtZW50cywgZnVuY3Rpb24gY2FsbHMsIGFuZCBhbnkgb3RoZXIgaW5kaWNhdG9ycyBvZiBkaXJlY3QgdXNhZ2UuIFdoYXQgb3RoZXIgZnVuY3Rpb25zIG9yIGRhdGEgc3RydWN0dXJlcyByZWZlcmVuY2UgYElQVjZfUk9VVEVfSU5GT2A/IEFyZSB0aGVyZSB2ZXJzaW9uIGRlcGVuZGVuY2llcz8gQXJlIHRoZXJlIGRpZmZlcmVudCBpbXBsZW1lbnRhdGlvbnMgYWNyb3NzIGRpZmZlcmVudCBvcGVyYXRpbmcgc3lzdGVtcz8KKiAgICoqRG9jdW1lbnRhdGlvbjoqKiBJJiMzOTtsbCBjaGVjayByZWxldmFudCBSRkNzIChSZXF1ZXN0IGZvciBDb21tZW50cyksIG1hbiBwYWdlcywgYW5kIGtlcm5lbCBoZWFkZXJzIHJlbGF0ZWQgdG8gSVB2NiByb3V0aW5nLiBUaGVzZSByZXNvdXJjZXMgYXJlIGxpa2VseSB0byBkZWZpbmUgdGhlIHN0cnVjdHVyZSBhbmQgaXRzIHJlbGF0aW9uc2hpcHMuCiogICAqKlN5c3RlbSBDYWxscy9BUElzOioqIFdoYXQgc3lzdGVtIGNhbGxzIG9yIEFQSXMgbWlnaHQgaW50ZXJhY3Qgd2l0aCB0aGlzIGluZm9ybWF0aW9uPyBEb2VzIGl0IGludm9sdmUga2VybmVsIG1vZHVsZXMsIHJvdXRpbmcgZGFlbW9ucyAobGlrZSBgYmlyZGAgb3IgYGZycmApLCBvciBuZXR3b3JrIG1hbmFnZW1lbnQgdG9vbHM/IEFyZSB0aGVyZSBzcGVjaWZpYyB0b29scyB0aGF0IG1hbmlwdWxhdGUgb3IgZGlzcGxheSBkYXRhIGJhc2VkIG9uIGBJUFY2X1JPVVRFX0lORk9gPwoqICAgKipEYXRhIFN0cnVjdHVyZXM6KiogSWYgdGhpcyBpcyBhIGRhdGEgc3RydWN0dXJlLCBhcmUgdGhlcmUgb3RoZXIgZGF0YSBzdHJ1Y3R1cmVzIChlLmcuLCBsaW5rZWQgbGlzdHMsIHRhYmxlcykgdGhhdCBjb250YWluIG9yIGFyZSBjb250YWluZWQgd2l0aGluIGl0PyBXaGF0IGZpZWxkcyBhcmUgaW5jbHVkZWQsIGFuZCB3aGF0IGRvIHRob3NlIGZpZWxkcyByZXByZXNlbnQ/CiogICAqKkNvbmNlcHR1YWwgRGVwZW5kZW5jaWVzOioqIEJleW9uZCB0aGUgbGl0ZXJhbCBjb2RlL3N0cnVjdHVyZSBkZXBlbmRlbmNpZXMsIHdoYXQgKmxvZ2ljYWwqIGRlcGVuZGVuY2llcyBleGlzdD8gRm9yIGV4YW1wbGUsIHRoZSBwcm9wZXIgb3BlcmF0aW9uIG9mIGBJUFY2X1JPVVRFX0lORk9gIG1pZ2h0IGRlcGVuZCBvbiBjb3JyZWN0IElQdjYgYWRkcmVzcyBjb25maWd1cmF0aW9uLCBvciBhIGZ1bmN0aW9uaW5nIHJvdXRpbmcgcHJvdG9jb2wuCgpJbiBzaG9ydCwgSSYjMzk7bGwgYXBwcm9hY2ggdGhpcyBieSBjb25zaWRlcmluZyB0aGUgZGlyZWN0LCBpbmRpcmVjdCwgYW5kIGNvbmNlcHR1YWwgZGVwZW5kZW5jaWVzLCBhbHdheXMgdHJ5aW5nIHRvIHVuZGVyc3RhbmQgdGhlICYjMzk7d2h5JiMzOTsgYmVoaW5kIHRoZSAmIzM5O3doYXQmIzM5Oy4gVGhpcyBpcyBhIHByZXR0eSBzdHJhaWdodGZvcndhcmQgYW5hbHlzaXMgaW4gbXkgZmllbGQsIGJ1dCB0aGUgc3BlY2lmaWMgYXBwcm9hY2ggd2lsbCBkZXBlbmQgZW50aXJlbHkgb24gd2hhdCBjb250ZXh0IGFuZCB0eXBlIG9mIG9iamVjdCAmIzM0O0lQVjZfUk9VVEVfSU5GTyYjMzQ7IGlzIHJlcHJlc2VudGluZy4gTm93LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHNvbWUgc3BlY2lmaWNzLi4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDIyOjM2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2lwdjYvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDMxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgMzE6XHRjb25maWcgSVBWNl9ST1VURV9JTkZPXG4gIDMyOlx0XHRib29sIFwmIzM0O0lQdjY6IFJvdXRlIEluZm9ybWF0aW9uIChSRkMgNDE5MSkgc3VwcG9ydFwmIzM0O1xuICAzMzpcdFx0ZGVwZW5kcyBvbiBJUFY2X1JPVVRFUl9QUkVGXG4gIDM0Olx0XHRoZWxwXG4gIDM1Olx0XHQgIFN1cHBvcnQgb2YgUm91dGUgSW5mb3JtYXRpb24uXG4gIDM2Olx0XG4gIDM3Olx0XHQgIElmIHVuc3VyZSwgc2F5IE4uXG4gIDM4Olx0XG4gIDM5Olx0Y29uZmlnIElQVjZfT1BUSU1JU1RJQ19EQURcbiAgNDA6XHRcdGJvb2wgXCYjMzQ7SVB2NjogRW5hYmxlIFJGQyA0NDI5IE9wdGltaXN0aWMgREFEXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDIyOjM2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwMTYyCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGFzIHlvdSByZXF1ZXN0ZWQ6CgoqKk5hdmlnYXRpbmcgdGhlIElQdjYgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyB0aGUgYmVoYXZpb3IgaGVyZSBpcyBkZWZpbml0ZWx5IGluZmx1ZW5jZWQgYnkgYElQVjZfUk9VVEVSX1BSRUZgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIHN5c3RlbSBpcyByZWFjdGluZyB0byB0aGUgUm91dGVyIFByZWZlcmVuY2Ugc2V0dGluZy4gVGhlIGNvbmZpZ3VyYXRpb24gaXMgY2xlYXJseSBkZXBlbmRlbnQgb24gaXQsIHNvIGxldCYjMzk7cyBzdGFydCBieSBpc29sYXRpbmcgaXRzIHZhbHVlLiBJIG5lZWQgdG8gemVybyBpbiBvbiB0aGUgZXhhY3Qgc3RhdGUgb2YgYElQVjZfUk9VVEVSX1BSRUZgIHRvIHRyYWNlIHRoZSBleGVjdXRpb24gcGF0aCBhbmQgZGV0ZXJtaW5lIHRoZSBjdXJyZW50IG91dGNvbWUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDIyOjM2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2lwdjYvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDIxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgMjE6XHRjb25maWcgSVBWNl9ST1VURVJfUFJFRlxuICAyMjpcdFx0Ym9vbCBcJiMzNDtJUHY2OiBSb3V0ZXIgUHJlZmVyZW5jZSAoUkZDIDQxOTEpIHN1cHBvcnRcJiMzNDtcbiAgMjM6XHRcdGhlbHBcbiAgMjQ6XHRcdCAgUm91dGVyIFByZWZlcmVuY2UgaXMgYW4gb3B0aW9uYWwgZXh0ZW5zaW9uIHRvIHRoZSBSb3V0ZXJcbiAgMjU6XHRcdCAgQWR2ZXJ0aXNlbWVudCBtZXNzYWdlIHdoaWNoIGltcHJvdmVzIHRoZSBhYmlsaXR5IG9mIGhvc3RzXG4gIDI2Olx0XHQgIHRvIHBpY2sgYW4gYXBwcm9wcmlhdGUgcm91dGVyLCBlc3BlY2lhbGx5IHdoZW4gdGhlIGhvc3RzXG4gIDI3Olx0XHQgIGFyZSBwbGFjZWQgaW4gYSBtdWx0aS1ob21lZCBuZXR3b3JrLlxuICAyODpcdFxuICAyOTpcdFx0ICBJZiB1bnN1cmUsIHNheSBOLlxuICAzMDpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAyMjozNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDQ3OQoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDE0OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB1bmRlcnN0YW5kaW5nLCBjb25zaWRlcmluZyBJIG5lZWQgdG8gZ2V0IHRoaXMgcmlnaHQ6CgoqKkNvbmZpZ3VyYXRpb24gRGVwZW5kZW5jaWVzIGZvciBJUHY2IFJvdXRpbmcqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gRnJvbSB3aGF0IEkmIzM5O20gc2VlaW5nLCB0byBtYWtlIHRoaXMgd29yayBjb3JyZWN0bHksIEkgZGVmaW5pdGVseSBuZWVkIHRvIGVuYWJsZSBgSVBWNl9ST1VURVJfUFJFRmAgYW5kIGBJUFY2X1JPVVRFX0lORk9gLiBUaG9zZSBhcmUgY3J1Y2lhbC4gQW5kLCBvYnZpb3VzbHksIGBJUFY2YCBuZWVkcyB0byBiZSBlbmFibGVkIGFzIHdlbGw7IHRoYXQmIzM5O3MgdGhlIGZvdW5kYXRpb24gaGVyZS4KCk5vdywgSSBzaG91bGQgZG8gYSBxdWljayBzd2VlcCB0byBzZWUgaWYgdGhlcmUgYXJlIGFueSBvdGhlciByZWxhdGVkIGNvbmZpZ3VyYXRpb25zIHRoYXQgYXJlIGFsc28gaW52b2x2ZWQuIExvb2tpbmcgYXQgdGhlIHBhdGNoJiMzOTtzIGZpbGUgbW9kaWZpY2F0aW9ucyDigJMgYG5ldC9pcHY2L3JvdXRlLmNgLCBgbmV0L2lwdjYvaXA2X2ZpYi5jYCwgYG5ldC9pcHY2L2FkZHJjb25mLmNgLCBhbmQgYG5ldC9pcHY2L25kaXNjLmNgIOKAkyB0aGF0IGNvbmZpcm1zIHRoZXNlIGFyZSBhbGwgcGFydCBvZiB0aGUgYENPTkZJR19JUFY2YCBmYW1pbHkuCgpUaGVyZWZvcmUsIHRoZSBjb3JlIGNvbmZpZ3VyYXRpb25zIEkgbmVlZCB0byBmb2N1cyBvbiBmb3IgdGhpcyBpbnRlZ3JhdGlvbiBhcmUgYElQVjZgLCBgSVBWNl9ST1VURVJfUFJFRmAsIGFuZCBgSVBWNl9ST1VURV9JTkZPYC4KCkZpbmFsbHksIEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgdGhlIGJlaGF2aW9yIG9mIGBpcDZfZGVsX3J0X3JlYXNvbmAuIFRoaXMgaXMgdGhlIGNvcmUgb2YgdGhpcyBwYXRjaCwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhhdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMjI6MzY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aXA2X2RlbF9ydF9yZWFzb24mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtpbmNsdWRlL25ldC9pcDZfcm91dGUuaCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL25ldC9pcDZfcm91dGUuaD0xMzA9aW50IGlwNl9kZWxfcnQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZmliNl9pbmZvICpmNmksIGJvb2wgc2tpcF9ub3RpZnkpO1xuaW5jbHVkZS9uZXQvaXA2X3JvdXRlLmg6MTMxOmludCBpcDZfZGVsX3J0X3JlYXNvbihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBmaWI2X2luZm8gKmY2aSwgYm9vbCBza2lwX25vdGlmeSxcbmluY2x1ZGUvbmV0L2lwNl9yb3V0ZS5oLTEzMi1cdFx0ICAgICAgdTMyIGRlbF9yZWFzb24pO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAyMjozNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTA2MgoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDI4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHN1bW1hcml6ZWQgdGhvdWdodCBwcm9jZXNzLCBwcmVzZW50ZWQgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIGl0OgoKKipFeGFtaW5pbmcgSVB2NiBSb3V0aW5nIFRhYmxlIERlbGV0aW9uKioKClJpZ2h0LCBzbyBJIHNlZSB0aGlzIHJlbGF0ZWQgdG8gYGlwNl9yb3V0ZS5oYC4gSXQmIzM5O3MgZGVjbGFyZWQgdGhlcmUsIHdoaWNoIGlzIGhlbHBmdWwgdG8ga25vdyBpbW1lZGlhdGVseS4KCk5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGRlbGV0aW9uIHByb2Nlc3MuIE15IG5leHQgc3RlcCB3aWxsIGJlIHRvIGRpdmUgaW50byB0aGUgYGZpYjZfZGVsYCBmdW5jdGlvbiwgYW5kIHNlZSBob3cgaXQgaXMgaW1wbGVtZW50ZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDIyOjM2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2ZpYjZfZGVsJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW5jbHVkZS9uZXQvaXA2X2ZpYi5oJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbmV0L2lwNl9maWIuaD00Njk9aW50IGZpYjZfYWRkKHN0cnVjdCBmaWI2X25vZGUgKnJvb3QsIHN0cnVjdCBmaWI2X2luZm8gKnJ0LFxuaW5jbHVkZS9uZXQvaXA2X2ZpYi5oLTQ3MC1cdCAgICAgc3RydWN0IG5sX2luZm8gKmluZm8sIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjayk7XG5pbmNsdWRlL25ldC9pcDZfZmliLmg6NDcxOmludCBmaWI2X2RlbChzdHJ1Y3QgZmliNl9pbmZvICpydCwgc3RydWN0IG5sX2luZm8gKmluZm8sIHUzMiBkZWxfcmVhc29uKTtcbmluY2x1ZGUvbmV0L2lwNl9maWIuaC00NzItXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDIyOjM2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxMzY1CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMzAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aG9zZSB0aG91Z2h0cyBmcm9tIGFuIGV4cGVydCYjMzk7cyBwZXJzcGVjdGl2ZSwgdXNpbmcgdGhlIGZpcnN0IHBlcnNvbiBhbmQgYWltaW5nIGZvciBhIGZ1bHNvbWUgZXhwbGFuYXRpb246CgoqKldvcmtpbmcgVGhyb3VnaCBJUHY2IEZJQiBOb3RpZmljYXRpb24gSW1wbGVtZW50YXRpb24qKgoKQWxyaWdodCwgc28gdGhlIG5vdGlmaWNhdGlvbiBtZWNoYW5pc20gZm9yIElQdjYgRklCIGNoYW5nZXMuLi4gcmlnaHQsIHRoYXQmIzM5O3MgZGVmaW5lZCwgb3IgYXQgbGVhc3QgZGVjbGFyZWQsIGluIGBpbmNsdWRlL25ldC9pcDZfZmliLmhgLiBUaGF0JiMzOTtzIHRoZSBleHBlY3RlZCBsb2NhdGlvbi4gR29vZCB0byBrbm93IGl0JiMzOTtzIHdoZXJlIGl0IHNob3VsZCBiZS4gVGhlIGhlYWRlciBzaG91bGQgZ2l2ZSBtZSB0aGUgY29yZSBkYXRhIHN0cnVjdHVyZXMgYW5kIGZ1bmN0aW9uIHByb3RvdHlwZXMgaW52b2x2ZWQuCgpOb3csIHdoZXJlIGRvIEkgbmVlZCB0byBnbyB0byB1bmRlcnN0YW5kIGhvdyB0aGVzZSBub3RpZmljYXRpb25zIGFyZSBhY3R1YWxseSAqaGFuZGxlZCo/IExldCBtZSBzZWUuLi4gSSBuZWVkIHRvIHJlZnJlc2ggbXlzZWxmIG9uIGhvdyB0aGUgSVB2NiByb3V0aW5nIHRhYmxlIGlzIG1hbmFnZWQsIHNvIEkmIzM5O2xsIHdhbnQgdG8gZGlnIGludG8gYGluZXQ2X3J0X25vdGlmeWAuIFRoYXQmIzM5O3MgdXN1YWxseSB0aGUgZW50cnkgcG9pbnQgZm9yIHRob3NlIGtpbmRzIG9mIGV2ZW50cy4gSXQmIzM5O3MgYWxtb3N0IGNlcnRhaW5seSB0aGUgZnVuY3Rpb24gdGhhdCBnZXRzIGNhbGxlZCB3aGVuIHNvbWV0aGluZyBpbiB0aGUgcm91dGluZyB0YWJsZSBjaGFuZ2VzIOKAkyBhIHJvdXRlIGlzIGFkZGVkLCBkZWxldGVkLCB1cGRhdGVkLiBJdCBtYWtlcyBzZW5zZSB0aGF0JiMzOTtzIHRoZSBmdW5jdGlvbiBJIHdvdWxkIHdhbnQgdG8gY2hlY2suIEhvcGVmdWxseSBpdCBpcyB1c2luZyBzb21lIGhlbHBlcnMgdG8ga2VlcCB0aGluZ3MgZWZmaWNpZW50LiBJJiMzOTttIGd1ZXNzaW5nIHRoYXQgdGhpcyB3aWxsIGJlIGNhbGxpbmcgb3RoZXIgZnVuY3Rpb25zIHRvIG1hbmFnZSB0aGUgdmFyaW91cyBjYWNoZXMgYW5kIGxpc3RlbmVycy4gSG9wZWZ1bGx5LCBhbGwgdGhlIHJpZ2h0IGxvY2tpbmcgaXMgZG9uZSBpbiB0aGlzIHNlY3Rpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDIyOjM2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2luZXQ2X3J0X25vdGlmeSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2luY2x1ZGUvbmV0L2lwNl9maWIuaCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL25ldC9pcDZfZmliLmg9NTI4PXN0YXRpYyBpbmxpbmUgdm9pZCBmaWI2X3J0X3VwZGF0ZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBmaWI2X2luZm8gKnJ0LFxuLS1cbmluY2x1ZGUvbmV0L2lwNl9maWIuaC01MzItI2VuZGlmXG5pbmNsdWRlL25ldC9pcDZfZmliLmg6NTMzOnZvaWQgaW5ldDZfcnRfbm90aWZ5KGludCBldmVudCwgc3RydWN0IGZpYjZfaW5mbyAqcnQsIHN0cnVjdCBubF9pbmZvICppbmZvLFxuaW5jbHVkZS9uZXQvaXA2X2ZpYi5oLTUzNC1cdFx0ICAgICB1bnNpZ25lZCBpbnQgZmxhZ3MsIHUzMiBkZWxfcmVhc29uKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMjI6MzY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjE4MzQKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAzMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgSVB2NiBGSUIgUm91dGUgUmV0cmlldmFsKioKCkFscmlnaHQsIHNvIHRoZSBjb3JlIHN0cnVjdHVyZSBmb3IgdGhlIElQdjYgRm9yd2FyZGluZyBJbmZvcm1hdGlvbiBCYXNlIChGSUIpIOKAkyB0aGF0JiMzOTtzIGBpcDZfZmliLmhgLCBuYXR1cmFsbHkuIFRoYXQmIzM5O3Mgd2hlcmUgdGhlIGRlZmluaXRpb24gaXMuIEl0JiMzOTtzIHRoZSBzdGFydGluZyBwb2ludC4gTXkgYXR0ZW50aW9uIGlzIGltbWVkaWF0ZWx5IGRyYXduIHRvIHRoZSByb3V0ZSByZXRyaWV2YWwgcGF0aCwgc28gbGV0JiMzOTtzIGRpZyBpbnRvIGBydDZfcm91dGVfcmN2YC4gVGhhdCYjMzk7cyB3aGVyZSB0aGUgY3JpdGljYWwgcHJvY2Vzc2luZyBoYXBwZW5zLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBleGFjdGx5IGhvdyB0aGUgc3lzdGVtIGxvb2tzIHVwIHRoZSByb3V0ZS4gSSYjMzk7bGwgbmVlZCB0byBmb2N1cyBvbiB3aGF0IGhhcHBlbnMgd2l0aGluIHRoYXQgZnVuY3Rpb24sIGluIG9yZGVyIHRvIHRyYWNrIGhvdyBpdCBtYWtlcyBpdHMgZGVjaXNpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAyMjozNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtydDZfcm91dGVfcmN2JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW5jbHVkZS9uZXQvaXA2X3JvdXRlLmgmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9uZXQvaXA2X3JvdXRlLmg9MjAxPXZvaWQgcnQ2X3B1cmdlX2RmbHRfcm91dGVycyhzdHJ1Y3QgbmV0ICpuZXQpO1xuaW5jbHVkZS9uZXQvaXA2X3JvdXRlLmgtMjAyLVxuaW5jbHVkZS9uZXQvaXA2X3JvdXRlLmg6MjAzOmludCBydDZfcm91dGVfcmN2KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHU4ICpvcHQsIGludCBsZW4sXG5pbmNsdWRlL25ldC9pcDZfcm91dGUuaC0yMDQtXHRcdCAgY29uc3Qgc3RydWN0IGluNl9hZGRyICpnd2FkZHIpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAyMjozNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMjE3NwoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDMxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhvc2UgdGhvdWdodHMgZnJvbSBhbiBleHBlcnQmIzM5O3MgcGVyc3BlY3RpdmUsIHVzaW5nIHRoZSBmaXJzdCBwZXJzb24gYW5kIGFpbWluZyBmb3IgYSBmdWxzb21lIGV4cGxhbmF0aW9uOgoKKipXb3JraW5nIHdpdGggSVB2NiBSb3V0aW5nIGluIHRoZSBMaW51eCBLZXJuZWwqKgoKUmlnaHQsIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIElQdjYgcm91dGluZyB3aXRoaW4gdGhlIGtlcm5lbCwgYW5kIHRoZSBmaXJzdCB0aGluZyB0aGF0IGp1bXBzIG91dCBpcyB0aGF0IHRoZSBjcnVjaWFsIGRlY2xhcmF0aW9uIGZvciB0aGlzIHN0dWZmLCB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGFuZCByZWxhdGVkIGRlZmluaXRpb25zLCBpcyBsb2NhdGVkIHJpZ2h0IGluIGBpbmNsdWRlL25ldC9pcDZfcm91dGUuaGAuIFRoYXQmIzM5O3MgdGhlIGxvZ2ljYWwgcGxhY2UgdG8gc3RhcnQg4oCTIGdvb2QsIGdvb2QuIEnigJlsbCBtYWtlIGEgbWVudGFsIG5vdGUgb2YgdGhhdCBmaWxlIGFuZCBpdHMgY29udGVudHMgZm9yIGxhdGVyIHJlZmVyZW5jZTsgaXQmIzM5O3MgcHJhY3RpY2FsbHkgdGhlIElQdjYgcm91dGluZyBiaWJsZS4KCk5vdywgd2hlcmUgZG8gSSB3YW50IHRvIHN0YXJ0IG15IGludmVzdGlnYXRpb24/IEFoLCB5ZXMsIEkmIzM5O20gdHJ5aW5nIHRvIGdyb2sgaG93IGl0JiMzOTtzIGRlYWxpbmcgd2l0aC4uLiBvaCwgd2FpdCBhIG1pbnV0ZSwgSSB0aGluayBgYWRkcmNvbmZfcHJlZml4X3JjdmAgaXMgdGhlIHRoaW5nIHRoYXQmIzM5O3MgcmVsZXZhbnQgdG8gd2hhdCBJIGFtIGxvb2tpbmcgYXQuIEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgaG93IHRoZSBJUHY2IGFkZHJlc3MgY29uZmlndXJhdGlvbiBpbnRlcmFjdHMgd2l0aCB0aGUgcm91dGluZyBwcm9jZXNzLCBzbyBgYWRkcmNvbmZfcHJlZml4X3JjdmAgaXMgZGVmaW5pdGVseSBhIGdvb2QgY2FuZGlkYXRlIHRvIHNlZSB3aGVyZSB0aGUgaW5jb21pbmcgcHJlZml4ZXMgYXJlIGhhbmRsZWQuIEkgdGhpbmsgdGhpcyB3aWxsIGJlIGFuIGV4Y2VsbGVudCBzdGFydGluZyBwb2ludCwgdGhpcyBjb3VsZCBsZWFkIHRvIHRoZSBkYXRhIEkgYW0gbG9va2luZyBmb3IuIEkmIzM5O2xsIGRlbHZlIGludG8gdGhlIGNvZGUgdGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDIyOjM3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2FkZHJjb25mX3ByZWZpeF9yY3YmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtpbmNsdWRlL25ldC9hZGRyY29uZi5oJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbmV0L2FkZHJjb25mLmg9MTUzPXZvaWQgYWRkcmNvbmZfYWRkX2xpbmtsb2NhbChzdHJ1Y3QgaW5ldDZfZGV2ICppZGV2LFxuLS1cbmluY2x1ZGUvbmV0L2FkZHJjb25mLmgtMTU1LVxuaW5jbHVkZS9uZXQvYWRkcmNvbmYuaDoxNTY6aW50IGFkZHJjb25mX3ByZWZpeF9yY3ZfYWRkX2FkZHIoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuaW5jbHVkZS9uZXQvYWRkcmNvbmYuaC0xNTctXHRcdFx0XHQgY29uc3Qgc3RydWN0IHByZWZpeF9pbmZvICpwaW5mbyxcbi0tXG5pbmNsdWRlL25ldC9hZGRyY29uZi5oPTI4Mj1zdGF0aWMgaW5saW5lIGJvb2wgaXB2Nl9pc19tbGQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IG5leHRoZHIsIGludCBvZmZzZXQpXG4tLVxuaW5jbHVkZS9uZXQvYWRkcmNvbmYuaC0zMDMtXG5pbmNsdWRlL25ldC9hZGRyY29uZi5oOjMwNDp2b2lkIGFkZHJjb25mX3ByZWZpeF9yY3Yoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbmluY2x1ZGUvbmV0L2FkZHJjb25mLmgtMzA1LVx0XHRcdCB1OCAqb3B0LCBpbnQgbGVuLCBib29sIHNsbGFvKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMjI6Mzc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjI3NTQKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiA0MjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBJUHY2IFJvdXRlIERlbGV0aW9uIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBteSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCBpdCB0b3VjaGVzIHNvbWUgaW1wb3J0YW50IHBhcnRzIG9mIHRoZSBJUHY2IHJvdXRpbmcgc3RhY2suIEl0JiMzOTtzIGRlY2xhcmVkIGluIGBpbmNsdWRlL25ldC9hZGRyY29uZi5oYCwgc28gd2UmIzM5O3JlIHRhbGtpbmcgYWJvdXQgY29yZSBmdW5jdGlvbmFsaXR5LiBJIGltbWVkaWF0ZWx5IHplcm8gaW4gb24gdGhlIGtleSBzeW1ib2xzIGludm9sdmVkOiBgaXA2X2RlbF9ydF9yZWFzb25gLCBgZmliNl9kZWxgLCBgaW5ldDZfcnRfbm90aWZ5YCwgYHJ0Nl9yb3V0ZV9yY3ZgLCBhbmQgYGFkZHJjb25mX3ByZWZpeF9yY3ZgLiBUaG9zZSBsb29rIGxpa2UgdGhlIG1haW4gcGxheWVycyBoZXJlLCBhbG9uZyB3aXRoIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9uIG9wdGlvbnM6IGBJUFY2YCwgYElQVjZfUk9VVEVSX1BSRUZgLCBhbmQgYElQVjZfUk9VVEVfSU5GT2AuCgpUaGUgZ2lzdCBvZiBpdCBpcyB0aGUgaW50cm9kdWN0aW9uIG9mIGEgbmV3IG5ldGxpbmsgYXR0cmlidXRlLCBgUlRBX0RFTF9SRUFTT05gLCBhbmQgdGhlIG1vZGlmaWNhdGlvbiBvZiBob3cgSVB2NiByb3V0ZXMgYXJlIGRlbGV0ZWQsIHNwZWNpZmljYWxseSBhZGRpbmcgYSByZWFzb24gY29kZSB3aGVuIGEgcm91dGUgZXhwaXJlcyBvciBpcyB3aXRoZHJhd24gdmlhIGEgUm91dGVyIEFkdmVydGlzZW1lbnQgKFJBKS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlLiBJdCYjMzk7cyBub3QganVzdCBhIHJlZmFjdG9yOyB3ZSYjMzk7cmUgZnVuZGFtZW50YWxseSBhbHRlcmluZyB0aGUgaW5mb3JtYXRpb24gcHJvdmlkZWQgd2hlbiBhIHJvdXRlIGlzIHJlbW92ZWQuCgpNeSBpbml0aWFsIHJlYXNvbmluZyBpcyB0aGF0LCBzaW5jZSB0aGlzIHRvdWNoZXMgY29yZSByb3V0aW5nIGxvZ2ljIGFuZCBuZWlnaGJvciBkaXNjb3ZlcnkgZnVuY3Rpb25zLCBpdCYjMzk7cyBhIGdvb2QgY2FuZGlkYXRlIGZvciBmdXp6aW5nLiBUaGUgcGF0Y2ggbW9kaWZpZXMgY3JpdGljYWwgZnVuY3Rpb25zIGxpa2UgYGlwNl9kZWxfcnRfcmVhc29uYCwgYGZpYjZfZGVsYCwgYGluZXQ2X3J0X25vdGlmeWAsIGBydDZfcm91dGVfcmN2YCwgYW5kIGBhZGRyY29uZl9wcmVmaXhfcmN2YCB0byBwb3B1bGF0ZSB0aGF0IG5ldyBhdHRyaWJ1dGUsIGBSVEFfREVMX1JFQVNPTmAuIEV4cGlyYXRpb24gYW5kIFJBIHdpdGhkcmF3YWwgYXJlIGNvbW1vbiBjb25kaXRpb25zLiBXZSBuZWVkIHRvIGJlIGFibGUgdG8ga25vdyB3aHkgYSByb3V0ZSBkaXNhcHBlYXJlZC4KCkxldCBtZSBkb3VibGUtY2hlY2sgd2hpY2ggb2YgdGhlc2UgZnVuY3Rpb25zIGlzIHRoZSBtb3N0IGludGVyZXN0aW5nIHRvIGZvY3VzIG9uLiBSaWdodCwgYGlwNl9kZWxfcnRfcmVhc29uYCBsb29rcyBwcm9taXNpbmcuIEl0JiMzOTtzIGEgd3JhcHBlciBhcm91bmQgYF9faXA2X2RlbF9ydGAsIGJ1dCB0aGUgd3JhcHBlciBpdHNlbGYgaXMgZXhwb3J0ZWQsIHdoaWNoIGlzIGEgZ29vZCBzdGFydGluZyBwb2ludC4gYF9faXA2X2RlbF9ydGAgaXMgc3RhdGljIGludGVybmFsbHksIGJ1dCB0aGUgd3JhcHBlciBpcyBnbG9iYWwuIEFsc28sIGBmaWI2X2RlbGAsIGBpbmV0Nl9ydF9ub3RpZnlgLCBgcnQ2X3JvdXRlX3JjdmAsIGFuZCBgYWRkcmNvbmZfcHJlZml4X3JjdmAgYXJlIGFsbCBleHBvcnRlZCwgc28gdGhvc2UgYXJlIGdvb2QgbGVhZHMuCgpIb2xkIG9uLCBJIG5lZWQgdG8gY2hlY2sgc29tZXRoaW5nLi4uIEl0IGxvb2tzIGxpa2UgYGlwNl9kZWxfcnRfcmVhc29uYCBpcyBhY3R1YWxseSAqbm90KiBleHBsaWNpdGx5IGV4cG9ydGVkLCBidXQgaXQmIzM5O3MgZ2xvYmFsLiBJdCBpcyBnbG9iYWwuIEkgbmVlZCB0byBjb25maXJtIHdoZXRoZXIgdGhlIGZ1bmN0aW9uIGlzIHRydWx5IGFjY2Vzc2libGUgZXh0ZXJuYWxseSBvciBub3QuIEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgdGhlIHN5bWJvbCB0YWJsZSBhZ2Fpbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMjI6Mzc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtFWFBPUlRfU1lNQk9MLippcDZfZGVsX3J0X3JlYXNvbiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY2L3JvdXRlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAyMjozNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMzc3OAoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDI4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqTmF2aWdhdGluZyBTY29wZSBhbmQgRnVuY3Rpb25hbGl0eSoqCgpBbHJpZ2h0LCBzbyB0aGUgZnVuY3Rpb24gaW4gcXVlc3Rpb24gaXNuJiMzOTt0IGV4cGxpY2l0bHkgZXhwb3J0ZWQsIGJ1dCBpdCYjMzk7cyBjbGVhcmx5IGFjY2Vzc2libGUgZ2xvYmFsbHkuIFRoYXQmIzM5O3MgYWN0dWFsbHkgcGVyZmVjdGx5IGFjY2VwdGFibGUgaW4gdGhpcyBwYXJ0aWN1bGFyIGFyY2hpdGVjdHVyYWwgY29udGV4dDsgaXQgYWxpZ25zIHdpdGggdGhlIG92ZXJhbGwgZGVzaWduIHBoaWxvc29waHkgYW5kIGludGVuZGVkIHVzYWdlLiBObyBuZWVkIHRvIHdvcnJ5IGFib3V0IGV4dGVybmFsIGV4cG9zdXJlIG9yIG1vZHVsZSBib3VuZGFyaWVzIGluIHRoaXMgY2FzZS4KCk5vdywgbGV0JiMzOTtzIHR1cm4gb3VyIGF0dGVudGlvbiB0byBgZmliNl9kZWxgLiBUaGF0JiMzOTtzIHRoZSBrZXkgZWxlbWVudCB3ZSBuZWVkIHRvIGV4YW1pbmUgbmV4dC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMjI6Mzc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtFWFBPUlRfU1lNQk9MLipmaWI2X2RlbCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY2L2lwNl9maWIuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDIyOjM3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIzOTc5CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqS2VybmVsIFJvdXRpbmcgVGFibGUgTm90aWZpY2F0aW9uIEFuYWx5c2lzKioKCk9rYXksIHNvIHRoaXMgaXNuJiMzOTt0IGFib3V0IGFueXRoaW5nIEkmIzM5O3ZlIGV4cGxpY2l0bHkgZXhwb3J0ZWQgZnJvbSB0aGUgbW9kdWxlIOKAkyBpdCYjMzk7cyBzb21ldGhpbmcgdGhhdCYjMzk7cyBnbG9iYWxseSBhY2Nlc3NpYmxlLCB3aGljaCBpbW1lZGlhdGVseSBjaGFuZ2VzIGhvdyBJIG5lZWQgdG8gYXBwcm9hY2ggdGhpcy4gIEkmIzM5O20gZGlnZ2luZyBpbnRvIHNvbWV0aGluZyB0aGF0LCB3aGlsZSBjcml0aWNhbCwgaXNuJiMzOTt0IG5lY2Vzc2FyaWx5IHdpdGhpbiBhIGRlZmluZWQgaW50ZXJmYWNlLiBUaGF0IHNpZ25hbHMgYSBwb3RlbnRpYWwgZm9yIG1vcmUgd2lkZXNwcmVhZCBpbXBhY3QsIGFuZCByZXF1aXJlcyBhIGJyb2FkZXIgdW5kZXJzdGFuZGluZyB0byBhdm9pZCBicmVha2luZyBzb21ldGhpbmcgZWxzZS4KClJpZ2h0LCBsZXQmIzM5O3MgZHJpbGwgZG93bi4gIE15IG5leHQgbW92ZSBpcyBjbGVhcjogSSBuZWVkIHRvIHNjcnV0aW5pemUgYGluZXQ2X3J0X25vdGlmeWAuICBUaGF0IHJvdXRpbmUgaXMgdGhlIGtleSDigJMgaXQmIzM5O3MgdGhlIHBvaW50IG9mIGludGVyZXN0IGZvciByb3V0ZSB0YWJsZSBjaGFuZ2Ugbm90aWZpY2F0aW9ucyBpbiB0aGUgSVB2NiBjb250ZXh0LiAgSSYjMzk7bSBleHBlY3RpbmcgdGhpcyB0byBiZSB0aGUgY29yZSBvZiBteSBhbmFseXNpcy4gIEnigJlsbCBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBub3RpZmljYXRpb24gaXMgdHJpZ2dlcmVkLCB3aGF0IGRhdGEgaXMgcGFzc2VkLCBhbmQgd2hvIHRoZSBjb25zdW1lcnMgb2YgdGhlIG5vdGlmaWNhdGlvbiBhcmUuIFRoZSBnb2FsIGlzIHRvIGZ1bGx5IHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzIGdsb2JhbCBwb2ludC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMjI6Mzc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtFWFBPUlRfU1lNQk9MLippbmV0Nl9ydF9ub3RpZnkmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXB2Ni9yb3V0ZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMjI6Mzc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjQyNjQKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAyMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOgoKKipVbmNvdmVyaW5nIHRoZSBHbG9iYWwgU2lnbmlmaWNhbmNlKioKCk9rYXksIHNvIHRoaXMgaXNuJiMzOTt0IGFib3V0IHNvbWV0aGluZyBzcGVjaWZpY2FsbHkgZXhwb3J0ZWQ7IGl0JiMzOTtzIGdvdCBhIGJyb2FkZXIsIG1vcmUgZW5jb21wYXNzaW5nIGluZmx1ZW5jZS4gTXkgbWluZCBpbW1lZGlhdGVseSBqdW1wcyB0byBpbXBsaWNhdGlvbnMgYmV5b25kIGEgbG9jYWwgc2NvcGUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBiaWcgcGljdHVyZS4gTGV0JiMzOTtzIHNlZS4uLiBzaW5jZSBpdCYjMzk7cyBnbG9iYWwsIGEgZ29vZCBwbGFjZSB0byBzdGFydCBkaWdnaW5nIGlzIGF0IGBydDZfcm91dGVfcmN2YC4gVGhhdCYjMzk7cyB3aGVyZSBJIGNhbiB0cmFjZSB0aGUgcGF0aCBhbmQgaW50ZXJhY3Rpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAyMjozNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0VYUE9SVF9TWU1CT0wuKnJ0Nl9yb3V0ZV9yY3YmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXB2Ni9yb3V0ZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMjI6Mzc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjQ0MzgKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiAyMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIHRoZSBTY29wZSBvZiBhIFZhcmlhYmxlKioKCkhtbSwgdGhpcyB2YXJpYWJsZSBpc24mIzM5O3QgZXhwbGljaXRseSBleHBvcnRlZCwgd2hpY2ggaXMgYSBrZXkgY2x1ZS4gVGhhdCBzdWdnZXN0cyBpdCYjMzk7cyBsaWtlbHkgc2NvcGVkIGdsb2JhbGx5IHdpdGhpbiB0aGUgY3VycmVudCBtb2R1bGUgb3IgY29udGV4dC4gSSBuZWVkIHRvIGNvbmZpcm0gdGhpcyB1bmRlcnN0YW5kaW5nLCBiZWNhdXNlIGlmIGl0JiMzOTtzIHVuaW50ZW50aW9uYWxseSBnbG9iYWwsIGl0IGNvdWxkIGxlYWQgdG8gdW5leHBlY3RlZCBpbnRlcmFjdGlvbnMgb3Igc2lkZSBlZmZlY3RzIGxhdGVyLgoKTXkgbmV4dCBzdGVwIGlzIHRvIGV4YW1pbmUgYGFkZHJjb25mX3ByZWZpeF9yY3ZgLiBUaGF0IGZ1bmN0aW9uIChvciBkYXRhIHN0cnVjdHVyZSwgZGVwZW5kaW5nIG9uIGNvbnRleHQpIGlzIHByb2JhYmx5IHdoZXJlIHRoaXMgZ2xvYmFsIHZhcmlhYmxlIGlzIGRlZmluZWQsIHVzZWQsIG9yIG1vZGlmaWVkLiBJJiMzOTtsbCBuZWVkIHRvIHNjcnV0aW5pemUgdGhhdCBwaWVjZSBvZiB0aGUgY29kZSB0byB2ZXJpZnkgaXRzIHRydWUgc2NvcGUgYW5kIGltcGFjdC4gVGhlIGxhY2sgb2YgYW4gZXhwbGljaXQgZXhwb3J0IHN0cm9uZ2x5IHN1Z2dlc3RzIGFuIGltcGxpY2l0LCBhbmQgcG90ZW50aWFsbHkgcHJvYmxlbWF0aWMsIGdsb2JhbCBzY29wZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMjI6Mzc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7RVhQT1JUX1NZTUJPTC4qYWRkcmNvbmZfcHJlZml4X3JjdiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY2L2FkZHJjb25mLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjYvYWRkcmNvbmYuYz0yNjk1PWludCBhZGRyY29uZl9wcmVmaXhfcmN2X2FkZF9hZGRyKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbi0tXG5uZXQvaXB2Ni9hZGRyY29uZi5jLTI3OTUtfVxubmV0L2lwdjYvYWRkcmNvbmYuYzoyNzk2OkVYUE9SVF9TWU1CT0xfR1BMKGFkZHJjb25mX3ByZWZpeF9yY3ZfYWRkX2FkZHIpO1xubmV0L2lwdjYvYWRkcmNvbmYuYy0yNzk3LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAyMjozNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNDc4NAoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDExNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIFRhcmdldCBJbnZlc3RpZ2F0aW9uKioKCk9rYXksIHNvIEkmIzM5O3ZlIGlkZW50aWZpZWQgc29tZSBwb3RlbnRpYWwgZnV6emluZyBjYW5kaWRhdGVzLCB0aGluZ3MgdGhhdCBhcmVuJiMzOTt0IHNwZWNpZmljYWxseSBleHBvcnRlZCwgYnV0IGFyZSBnbG9iYWxseSBhY2Nlc3NpYmxlLCB3aGljaCBpcyBhbHdheXMgYW4gaW50ZXJlc3Rpbmcgc3RhcnRpbmcgcG9pbnQgZm9yIHZ1bG5lcmFiaWxpdHkgcmVzZWFyY2guIE5vdywgSSB3YW50IHRvIGRpdmUgYSBsaXR0bGUgZGVlcGVyIG9uIHRoaXMgYElQVjZfUk9VVEVfSU5GT2Agc2V0dGluZy4gTGV0JiMzOTtzIHNlZSBpZiBpdCBoYXMgYW55IGRlcGVuZGVuY2llcy4gQWhhLCBpdCBsb29rcyBsaWtlIGl0IHJlbGllcyBvbiBgSVBWNl9ST1VURVJfUFJFRmAuIE9rYXksIHRoYXQgbWFrZXMgc2Vuc2UuIE5vdywgbGV0JiMzOTtzIHRyYWNlIHRoaXMgZGVwZW5kZW5jeS4gRG9lcyAqdGhhdCogaGF2ZSBhbnkgZGVwZW5kZW5jaWVzIHRoYXQgd2UgbmVlZCB0byBiZSBhd2FyZSBvZj8gQWxyaWdodCwgYmFzZWQgb24gdGhlIGBtZW51Y29uZmlnYCBvcHRpb25zLCB0aGF0JiMzOTtzIGRlZmluZWQgdW5kZXIgdGhlIGBJUFY2YCBzZWN0aW9uIGluIGBuZXQvaXB2Ni9LY29uZmlnYC4gU28sIG9idmlvdXNseSBgSVBWNmAgaXMgYSByZXF1aXJlbWVudC4gUmlnaHQsIHRoaXMgaW5mb3JtcyBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBhdHRhY2sgc3VyZmFjZSwgYW5kIHRoZSBhcHByb3ByaWF0ZSBjb250ZXh0IHdoZW4gY29uc3RydWN0aW5nIGZ1enppbmcgcGF5bG9hZHMuCgpOb3csIEkmIzM5O2xsIGdvIGhhdmUgYSBsb29rIGluIGBuZXQvaXB2Ni9LY29uZmlnYCBhbmQgZG91YmxlIGNoZWNrIHRoZSBkZXRhaWxzIG9mIGBJUFY2YCwgc28gSSYjMzk7bSBjb21wbGV0ZWx5IGNsZWFyIG9uIGl0cyBpbXBsaWNhdGlvbnMgYW5kIGludGVyZGVwZW5kZW5jaWVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAyMjozNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgSVBWNiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY2L0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjYvS2NvbmZpZy01LVxubmV0L2lwdjYvS2NvbmZpZzo2Om1lbnVjb25maWcgSVBWNlxubmV0L2lwdjYvS2NvbmZpZy03LVx0Ym9vbCBcJiMzNDtUaGUgSVB2NiBwcm90b2NvbFwmIzM0O1xuLS1cbm5ldC9pcHY2L0tjb25maWc9MTk9aWYgSVBWNlxubmV0L2lwdjYvS2NvbmZpZy0yMC1cbm5ldC9pcHY2L0tjb25maWc6MjE6Y29uZmlnIElQVjZfUk9VVEVSX1BSRUZcbm5ldC9pcHY2L0tjb25maWctMjItXHRib29sIFwmIzM0O0lQdjY6IFJvdXRlciBQcmVmZXJlbmNlIChSRkMgNDE5MSkgc3VwcG9ydFwmIzM0O1xuLS1cbm5ldC9pcHY2L0tjb25maWctMzAtXG5uZXQvaXB2Ni9LY29uZmlnOjMxOmNvbmZpZyBJUFY2X1JPVVRFX0lORk9cbm5ldC9pcHY2L0tjb25maWctMzItXHRib29sIFwmIzM0O0lQdjY6IFJvdXRlIEluZm9ybWF0aW9uIChSRkMgNDE5MSkgc3VwcG9ydFwmIzM0O1xuLS1cbm5ldC9pcHY2L0tjb25maWctMzgtXG5uZXQvaXB2Ni9LY29uZmlnOjM5OmNvbmZpZyBJUFY2X09QVElNSVNUSUNfREFEXG5uZXQvaXB2Ni9LY29uZmlnLTQwLVx0Ym9vbCBcJiMzNDtJUHY2OiBFbmFibGUgUkZDIDQ0MjkgT3B0aW1pc3RpYyBEQURcJiMzNDtcbi0tXG5uZXQvaXB2Ni9LY29uZmlnPTEwMj1jb25maWcgSU5FVDZfSVBDT01QXG4tLVxubmV0L2lwdjYvS2NvbmZpZy0xMTEtXG5uZXQvaXB2Ni9LY29uZmlnOjExMjpjb25maWcgSVBWNl9NSVA2XG5uZXQvaXB2Ni9LY29uZmlnLTExMy1cdHRyaXN0YXRlIFwmIzM0O0lQdjY6IE1vYmlsaXR5XCYjMzQ7XG4tLVxubmV0L2lwdjYvS2NvbmZpZy0xMTktXG5uZXQvaXB2Ni9LY29uZmlnOjEyMDpjb25maWcgSVBWNl9JTEFcbm5ldC9pcHY2L0tjb25maWctMTIxLVx0dHJpc3RhdGUgXCYjMzQ7SVB2NjogSWRlbnRpZmllciBMb2NhdG9yIEFkZHJlc3NpbmcgKElMQSlcJiMzNDtcbi0tXG5uZXQvaXB2Ni9LY29uZmlnPTE0Nj1jb25maWcgSU5FVDZfVFVOTkVMXG4tLVxubmV0L2lwdjYvS2NvbmZpZy0xNDktXG5uZXQvaXB2Ni9LY29uZmlnOjE1MDpjb25maWcgSVBWNl9WVElcbm5ldC9pcHY2L0tjb25maWctMTUxLVx0dHJpc3RhdGUgXCYjMzQ7VmlydHVhbCAoc2VjdXJlKSBJUHY2OiB0dW5uZWxpbmdcJiMzNDtcbi0tXG5uZXQvaXB2Ni9LY29uZmlnLTE2MS1cbm5ldC9pcHY2L0tjb25maWc6MTYyOmNvbmZpZyBJUFY2X1NJVFxubmV0L2lwdjYvS2NvbmZpZy0xNjMtXHR0cmlzdGF0ZSBcJiMzNDtJUHY2OiBJUHY2LWluLUlQdjQgdHVubmVsIChTSVQgZHJpdmVyKVwmIzM0O1xuLS1cbm5ldC9pcHY2L0tjb25maWctMTc2LVxubmV0L2lwdjYvS2NvbmZpZzoxNzc6Y29uZmlnIElQVjZfU0lUXzZSRFxubmV0L2lwdjYvS2NvbmZpZy0xNzgtXHRib29sIFwmIzM0O0lQdjY6IElQdjYgUmFwaWQgRGVwbG95bWVudCAoNlJEKVwmIzM0O1xuLS1cbm5ldC9pcHY2L0tjb25maWctMTk1LVxubmV0L2lwdjYvS2NvbmZpZzoxOTY6Y29uZmlnIElQVjZfTkRJU0NfTk9ERVRZUEVcbm5ldC9pcHY2L0tjb25maWctMTk3LVx0Ym9vbFxubmV0L2lwdjYvS2NvbmZpZy0xOTgtXG5uZXQvaXB2Ni9LY29uZmlnOjE5OTpjb25maWcgSVBWNl9UVU5ORUxcbm5ldC9pcHY2L0tjb25maWctMjAwLVx0dHJpc3RhdGUgXCYjMzQ7SVB2NjogSVAtaW4tSVB2NiB0dW5uZWwgKFJGQzI0NzMpXCYjMzQ7XG4tLVxubmV0L2lwdjYvS2NvbmZpZy0yMDktXG5uZXQvaXB2Ni9LY29uZmlnOjIxMDpjb25maWcgSVBWNl9HUkVcbm5ldC9pcHY2L0tjb25maWctMjExLVx0dHJpc3RhdGUgXCYjMzQ7SVB2NjogR1JFIHR1bm5lbFwmIzM0O1xuLS1cbm5ldC9pcHY2L0tjb25maWctMjI3LVxubmV0L2lwdjYvS2NvbmZpZzoyMjg6Y29uZmlnIElQVjZfRk9VXG5uZXQvaXB2Ni9LY29uZmlnLTIyOS1cdHRyaXN0YXRlXG4tLVxubmV0L2lwdjYvS2NvbmZpZy0yMzEtXG5uZXQvaXB2Ni9LY29uZmlnOjIzMjpjb25maWcgSVBWNl9GT1VfVFVOTkVMXG5uZXQvaXB2Ni9LY29uZmlnLTIzMy1cdHRyaXN0YXRlXG4tLVxubmV0L2lwdjYvS2NvbmZpZy0yMzYtXG5uZXQvaXB2Ni9LY29uZmlnOjIzNzpjb25maWcgSVBWNl9NVUxUSVBMRV9UQUJMRVNcbm5ldC9pcHY2L0tjb25maWctMjM4LVx0Ym9vbCBcJiMzNDtJUHY2OiBNdWx0aXBsZSBSb3V0aW5nIFRhYmxlc1wmIzM0O1xuLS1cbm5ldC9pcHY2L0tjb25maWctMjQyLVxubmV0L2lwdjYvS2NvbmZpZzoyNDM6Y29uZmlnIElQVjZfU1VCVFJFRVNcbm5ldC9pcHY2L0tjb25maWctMjQ0LVx0Ym9vbCBcJiMzNDtJUHY2OiBzb3VyY2UgYWRkcmVzcyBiYXNlZCByb3V0aW5nXCYjMzQ7XG4tLVxubmV0L2lwdjYvS2NvbmZpZy0yNTYtXG5uZXQvaXB2Ni9LY29uZmlnOjI1Nzpjb25maWcgSVBWNl9NUk9VVEVcbm5ldC9pcHY2L0tjb25maWctMjU4LVx0Ym9vbCBcJiMzNDtJUHY2OiBtdWx0aWNhc3Qgcm91dGluZ1wmIzM0O1xuLS1cbm5ldC9pcHY2L0tjb25maWctMjY0LVxubmV0L2lwdjYvS2NvbmZpZzoyNjU6Y29uZmlnIElQVjZfTVJPVVRFX01VTFRJUExFX1RBQkxFU1xubmV0L2lwdjYvS2NvbmZpZy0yNjYtXHRib29sIFwmIzM0O0lQdjY6IG11bHRpY2FzdCBwb2xpY3kgcm91dGluZ1wmIzM0O1xuLS1cbm5ldC9pcHY2L0tjb25maWctMjc4LVxubmV0L2lwdjYvS2NvbmZpZzoyNzk6Y29uZmlnIElQVjZfUElNU01fVjJcbm5ldC9pcHY2L0tjb25maWctMjgwLVx0Ym9vbCBcJiMzNDtJUHY2OiBQSU0tU00gdmVyc2lvbiAyIHN1cHBvcnRcJiMzNDtcbi0tXG5uZXQvaXB2Ni9LY29uZmlnLTI4NS1cbm5ldC9pcHY2L0tjb25maWc6Mjg2OmNvbmZpZyBJUFY2X1NFRzZfTFdUVU5ORUxcbm5ldC9pcHY2L0tjb25maWctMjg3LVx0Ym9vbCBcJiMzNDtJUHY2OiBTZWdtZW50IFJvdXRpbmcgSGVhZGVyIGVuY2Fwc3VsYXRpb24gc3VwcG9ydFwmIzM0O1xuLS1cbm5ldC9pcHY2L0tjb25maWctMjk5LVxubmV0L2lwdjYvS2NvbmZpZzozMDA6Y29uZmlnIElQVjZfU0VHNl9ITUFDXG5uZXQvaXB2Ni9LY29uZmlnLTMwMS1cdGJvb2wgXCYjMzQ7SVB2NjogU2VnbWVudCBSb3V0aW5nIEhNQUMgc3VwcG9ydFwmIzM0O1xuLS1cbm5ldC9pcHY2L0tjb25maWctMzExLVxubmV0L2lwdjYvS2NvbmZpZzozMTI6Y29uZmlnIElQVjZfU0VHNl9CUEZcbm5ldC9pcHY2L0tjb25maWctMzEzLVx0ZGVmX2Jvb2wgeVxuLS1cbm5ldC9pcHY2L0tjb25maWctMzE2LVxubmV0L2lwdjYvS2NvbmZpZzozMTc6Y29uZmlnIElQVjZfUlBMX0xXVFVOTkVMXG5uZXQvaXB2Ni9LY29uZmlnLTMxOC1cdGJvb2wgXCYjMzQ7SVB2NjogUlBMIFNvdXJjZSBSb3V0aW5nIEhlYWRlciBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L2lwdjYvS2NvbmZpZy0zMjctXG5uZXQvaXB2Ni9LY29uZmlnOjMyODpjb25maWcgSVBWNl9JT0FNNl9MV1RVTk5FTFxubmV0L2lwdjYvS2NvbmZpZy0zMjktXHRib29sIFwmIzM0O0lQdjY6IElPQU0gUHJlLWFsbG9jYXRlZCBUcmFjZSBpbnNlcnRpb24gc3VwcG9ydFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAyMjozNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNjcwNgoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDI3OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiBJUHY2IFJvdXRlIE1hbmFnZW1lbnQqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoZXNlIElQdjYgY29uZmlndXJhdGlvbnM6IGBJUFY2YCwgYElQVjZfUk9VVEVSX1BSRUZgLCBhbmQgYElQVjZfUk9VVEVfSU5GT2AuIFRoYXQmIzM5O3Mgd2hlcmUgaXQgYWxsIHN0YXJ0cy4KCk5vdywgbGV0JiMzOTtzIGNpcmNsZSBiYWNrIHRvIGBpcDZfZGVsX3J0X3JlYXNvbmAuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgY2FsbCBzaXRlcy4gQWhhISBJdCYjMzk7cyBpbnZva2VkIGZyb20gYGFkZHJjb25mX3ByZWZpeF9yY3ZgLCBgbmRpc2Nfcm91dGVyX2Rpc2NvdmVyeWAsIGFuZCBgcnQ2X3JvdXRlX3JjdmAuIFRoaXMgaXMgaW1wb3J0YW50LiBHb2luZyBmdXJ0aGVyIGRvd24sIGBmaWI2X2RlbGAgaXMgY2FsbGVkIGZyb20gYSBoYW5kZnVsIG9mIHBsYWNlcyAtIGBfX2lwNl9kZWxfcnRgLCBgX19pcDZfZGVsX3J0X3NpYmxpbmdzYCwgYGZpYjZfY2xlYW5fbm9kZWAsIGFuZCBgZmliNl9nY190YWJsZWAuIFRoZSBub3RpZmljYXRpb24gZnVuY3Rpb24sIGBpbmV0Nl9ydF9ub3RpZnlgLCBnZXRzIGNhbGxlZCBhY3Jvc3MgdGhlIGJvYXJkIC0gYnkgYGZpYjZfYWRkX3J0Mm5vZGVgLCBgZmliNl9kZWxfcm91dGVgLCBgbmRpc2Nfcm91dGVyX2Rpc2NvdmVyeWAsIGBpcDZfcm91dGVfbXBhdGhfbm90aWZ5YCwgYW5kIGBmaWI2X3J0X3VwZGF0ZWAuIEZpbmFsbHksIGBydDZfcm91dGVfcmN2YCBhbmQgYGFkZHJjb25mX3ByZWZpeF9yY3ZgIGFyZSBjYWxsZWQgYnkgYG5kaXNjX3JvdXRlcl9kaXNjb3ZlcnlgLgoKU28sIGBuZGlzY19yb3V0ZXJfZGlzY292ZXJ5YCBhcHBlYXJzIHRvIGJlIGEgY3J1Y2lhbCBmdW5jdGlvbiBmb3IgZnV6emluZyBnaXZlbiBpdHMgd2lkZXNwcmVhZCBpbmZsdWVuY2UsIHNwZWNpZmljYWxseSBkZWFsaW5nIHdpdGggcm91dGVyIGRpc2NvdmVyeSBhbmQgcm91dGUgbWFuYWdlbWVudC4gVGhlIGNhdGNoIGlzIHRoYXQgaXQmIzM5O3Mgc3RhdGljLiBCdXQgd2FpdCEgSXQmIzM5O3MgY2FsbGVkIGZyb20gYG5kaXNjX3JjdmAsIHdoaWNoIGhhbmRsZXMgSUNNUHY2IE5laWdoYm9yIERpc2NvdmVyeSBtZXNzYWdlcywgYW5kIHRoYXQmIzM5O3MgZ2xvYmFsLiBUaGlzIGNvdWxkIGJlIGEgZ29vZCBwb2ludCB0byBzdGFydCB0aGUgZnV6emluZyBwcm9jZXNzLiBJJiMzOTtsbCBuZWVkIHRvIGZvY3VzIG9uIGNyYWZ0aW5nIHNwZWNpZmljIElDTVB2NiBOZWlnaGJvciBEaXNjb3ZlcnkgbWVzc2FnZXMgdG8gdGFyZ2V0IHRoaXMgZnVuY3Rpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDIyOjM3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O25kaXNjX3JjdiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY2L25kaXNjLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjYvbmRpc2MuYz0xNzkyPXN0YXRpYyBib29sIG5kaXNjX3N1cHByZXNzX2ZyYWdfbmRpc2Moc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvaXB2Ni9uZGlzYy5jLTE4MDUtXG5uZXQvaXB2Ni9uZGlzYy5jOjE4MDY6ZW51bSBza2JfZHJvcF9yZWFzb24gbmRpc2NfcmN2KHN0cnVjdCBza19idWZmICpza2IpXG5uZXQvaXB2Ni9uZGlzYy5jLTE4MDcte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAyMjozNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNzUyMQoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDEzMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBJbml0aWFsIEFzc2Vzc21lbnQgb2YgdGhlIElQVjYgUm91dGUgUmVtb3ZhbCAmYW1wOyBOb3RpZmljYXRpb24gRmxvdyoqCgpPa2F5LCBzbyBJJiMzOTttIGRpdmluZyBpbnRvIHRoaXMgSVB2NiByb3V0aW5nIGNvZGUgYW5kIGltbWVkaWF0ZWx5IEkgc2VlIGEgcGF0dGVybiBmb3JtaW5nLiBgbmRpc2NfcmN2YCwgYHJ0Nl9yb3V0ZV9yY3ZgLCBhbmQgYGFkZHJjb25mX3ByZWZpeF9yY3ZgIOKAkyB0aGVzZSBmdW5jdGlvbnMgYXJlIGFsbCBnbG9iYWxseSB2aXNpYmxlLCBhbmQgdGhhdCYjMzk7cyB0aGUga2V5LiBUaGF0IHRlbGxzIG1lIHRoZXNlIGFyZSBlbnRyeSBwb2ludHMuCgpHaXZlbiB0aGF0LCBJIG5lZWQgdG8gZm9jdXMgbXkgYXR0ZW50aW9uIG9uIHdoZXJlIHRoZXNlIHBpZWNlcyBpbnRlcmZhY2UuIFRoZSBzeW1ib2xzIHRoYXQgcmVhbGx5IHBpcXVlIG15IGludGVyZXN0IGFzIGJlaW5nIHBvdGVudGlhbCBrZXlzIHRvIHVuZGVyc3RhbmRpbmcgdGhlIGRlbGV0aW9uIGFuZCBub3RpZmljYXRpb24gbWVjaGFuaXNtIGFyZTogYGlwNl9kZWxfcnRfcmVhc29uYCwgYGZpYjZfZGVsYCwgYGluZXQ2X3J0X25vdGlmeWAsIGBydDZfcm91dGVfcmN2YCwgYGFkZHJjb25mX3ByZWZpeF9yY3ZgLCBhbmQgYG5kaXNjX3JjdmAuIFRoZXkgYWxsIHNlZW0gaGlnaGx5IHJlbGV2YW50LgoKTXkgaW1tZWRpYXRlIG5leHQgc3RlcCB3aWxsIGJlIHRvIHZlcmlmeSB0aGF0IGBuZGlzY19yY3ZgIGlzIGluZGVlZCBleHBvcnRlZCwgY29uZmlybWluZyBpdCBpcyBhbiBpbXBvcnRhbnQgZ2xvYmFsIGZ1bmN0aW9uLiBJIG5lZWQgdG8gYmUgc3VyZSBiZWZvcmUgSSBtb3ZlIGZvcndhcmQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDIyOjM3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7RVhQT1JUX1NZTUJPTC4qbmRpc2NfcmN2JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2lwdjYvbmRpc2MuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDIyOjM3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI3OTIzCgkJCQkJCQlvdXRwdXQ6IDE4NAoJCQkJCQkJdGhvdWdodHM6IDY2NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIFRhcmdldHMgZm9yIElQdjYgUm91dGUgRGVsZXRpb24gTG9naWMqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyBhbGwgYWJvdXQgaGFuZGxpbmcgdGhlIG5ldyBgUlRBX0RFTF9SRUFTT05gIGF0dHJpYnV0ZSBmb3IgSVB2NiByb3V0ZSBkZWxldGlvbiBub3RpZmljYXRpb25zLCBzcGVjaWZpY2FsbHkgd2hlbiByb3V0ZXMgZXhwaXJlIG9yIGFyZSB3aXRoZHJhd24gdmlhIFJvdXRlciBBZHZlcnRpc2VtZW50cy4gVGhpcyBtZWFucyB3ZSYjMzk7cmUgbG9va2luZyBhdCBmdW5jdGlvbmFsIGNoYW5nZXMgZGVlcCB3aXRoaW4gY29yZSBJUHY2IHJvdXRpbmcgYW5kIG5laWdoYm9yIGRpc2NvdmVyeSwgbWFraW5nIHRoZW0gcHJpbWUgdGFyZ2V0cyBmb3IgZnV6emluZy4KCk15IHRoaW5raW5nIGlzLCB3ZSYjMzk7dmUgZ290IHRvIGZpbmQgdGhlIGtleSBlbnRyeSBwb2ludHMgYW5kIGZ1bmN0aW9ucyByZWxhdGVkIHRvIHRoaXMgbmV3IGF0dHJpYnV0ZS4gSSYjMzk7bSBnb2luZyB0byBzZXQgYFdvcnRoRnV6emluZ2AgdG8gdHJ1ZS4KCkZpcnN0LCBJIGxvb2tlZCBhdCB0aGUgb2J2aW91czogYG5kaXNjX3JjdmAuIEl0JiMzOTtzIHRoZSBmcm9udCBkb29yIGZvciBJQ01QdjYgTkQgbWVzc2FnZXMsIGluY2x1ZGluZyB0aG9zZSBSb3V0ZXIgQWR2ZXJ0aXNlbWVudHMsIHNvIHRoYXTigJlzIGEgZ3JlYXQgY2FuZGlkYXRlLiBUaGVuLCBgcnQ2X3JvdXRlX3JjdmAgYW5kIGBhZGRyY29uZl9wcmVmaXhfcmN2YCBwb3BwZWQgdXAuIFRoZXkmIzM5O3JlIGJvdGggY2FsbGVkIGZyb20gYG5kaXNjX3JvdXRlcl9kaXNjb3ZlcnlgIGFuZCBoYW5kbGUgUm91dGUgSW5mb3JtYXRpb24gT3B0aW9ucyAoUklPKSBhbmQgUHJlZml4IEluZm9ybWF0aW9uIE9wdGlvbnMgKFBJTyksIHJlc3BlY3RpdmVseSwgc28gdGhleSYjMzk7cmUgZGVmaW5pdGVseSByZWxldmFudC4gRmluYWxseSwgSSBpZGVudGlmaWVkIGBpcDZfZGVsX3J0X3JlYXNvbmAsIGBmaWI2X2RlbGAsIGFuZCBgaW5ldDZfcnRfbm90aWZ5YCBhcmUgYWxsIGtleSBmdW5jdGlvbnMuIGBpcDZfZGVsX3J0X3JlYXNvbmAgaXMgdXNlZCB3aGVuIHJvdXRlcyBhcmUgZGVsZXRlZCwgYGZpYjZfZGVsYCBpcyBhbHNvIGNhbGxlZCB3aGVuIHJvdXRlcyBhcmUgZGVsZXRlZCBhbmQgYGluZXQ2X3J0X25vdGlmeWAgZ2V0cyBjYWxsZWQgd2hlbiByb3V0ZXMgYXJlIGFkZGVkIG9yIGRlbGV0ZWQuCgpJIGFsc28gZG91YmxlLWNoZWNrZWQgd2hhdCBjYWxscyB3aGF0OiBgaXA2X2RlbF9ydF9yZWFzb25gIGlzIGNhbGxlZCBmcm9tIGBydDZfcm91dGVfcmN2YCwgYGFkZHJjb25mX3ByZWZpeF9yY3ZgLCBhbmQgYG5kaXNjX3JvdXRlcl9kaXNjb3ZlcnlgLCBhbmQgYGZpYjZfZGVsYCBpcyBjYWxsZWQgZnJvbSBgX19pcDZfZGVsX3J0YCwgYF9faXA2X2RlbF9ydF9zaWJsaW5nc2AsIGBmaWI2X2NsZWFuX25vZGVgLCBgZmliNl9nY190YWJsZWAuIGBpbmV0Nl9ydF9ub3RpZnlgIGlzIGNhbGxlZCBmcm9tIGBmaWI2X2FkZF9ydDJub2RlYCwgYGZpYjZfZGVsX3JvdXRlYCwgYG5kaXNjX3JvdXRlcl9kaXNjb3ZlcnlgLCBgaXA2X3JvdXRlX21wYXRoX25vdGlmeWAsIGFuZCBgZmliNl9ydF91cGRhdGVgLiBgcnQ2X3JvdXRlX3JjdmAgYW5kIGBhZGRyY29uZl9wcmVmaXhfcmN2YCBhcmUgY2FsbGVkIGZyb20gYG5kaXNjX3JvdXRlcl9kaXNjb3ZlcnlgLgoKU28sIGhlcmUmIzM5O3MgbXkgZm9jdXNlZCBsaXN0IG9mIHN5bWJvbHMgSSYjMzk7bGwgdGFyZ2V0IGZvciBmdXp6aW5nOiBgaXA2X2RlbF9ydF9yZWFzb25gLCBgZmliNl9kZWxgLCBgaW5ldDZfcnRfbm90aWZ5YCwgYHJ0Nl9yb3V0ZV9yY3ZgLCBgYWRkcmNvbmZfcHJlZml4X3JjdmAsIGFuZCBgbmRpc2NfcmN2YC4gSSB3aWxsIGFsc28gY29uZmlybSB0aGF0IHRoZXNlIGNvbmZpZ3VyYXRpb25zIGFyZSBzZXQ6IGBJUFY2YCwgYElQVjZfUk9VVEVSX1BSRUZgLCBhbmQgYElQVjZfUk9VVEVfSU5GT2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDIyOjM3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtJUFY2JiMzNDssCiAgICAmIzM0O0lQVjZfUk9VVEVSX1BSRUYmIzM0OywKICAgICYjMzQ7SVBWNl9ST1VURV9JTkZPJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aXA2X2RlbF9ydF9yZWFzb24mIzM0OywKICAgICYjMzQ7ZmliNl9kZWwmIzM0OywKICAgICYjMzQ7aW5ldDZfcnRfbm90aWZ5JiMzNDssCiAgICAmIzM0O3J0Nl9yb3V0ZV9yY3YmIzM0OywKICAgICYjMzQ7YWRkcmNvbmZfcHJlZml4X3JjdiYjMzQ7LAogICAgJiMzNDtuZGlzY19yY3YmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBhIG5ldyBuZXRsaW5rIGF0dHJpYnV0ZSBgUlRBX0RFTF9SRUFTT05gIHRvIElQdjYgcm91dGUgZGVsZXRpb24gbm90aWZpY2F0aW9ucyAoYFJUTV9ERUxST1VURWApLiBJdCBtb2RpZmllcyBjb3JlIElQdjYgcm91dGluZyBhbmQgbmVpZ2hib3IgZGlzY292ZXJ5IGZ1bmN0aW9ucyB0byBwb3B1bGF0ZSB0aGlzIGF0dHJpYnV0ZSB3aGVuIHJvdXRlcyBhcmUgZGVsZXRlZCBkdWUgdG8gZXhwaXJhdGlvbiBvciBSb3V0ZXIgQWR2ZXJ0aXNlbWVudCAoUkEpIHdpdGhkcmF3YWwuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7SVBWNiYjMzQ7LAogICAgJiMzNDtJUFY2X1JPVVRFUl9QUkVGJiMzNDssCiAgICAmIzM0O0lQVjZfUk9VVEVfSU5GTyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2lwNl9kZWxfcnRfcmVhc29uJiMzNDssCiAgICAmIzM0O2ZpYjZfZGVsJiMzNDssCiAgICAmIzM0O2luZXQ2X3J0X25vdGlmeSYjMzQ7LAogICAgJiMzNDtydDZfcm91dGVfcmN2JiMzNDssCiAgICAmIzM0O2FkZHJjb25mX3ByZWZpeF9yY3YmIzM0OywKICAgICYjMzQ7bmRpc2NfcmN2JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYSBuZXcgbmV0bGluayBhdHRyaWJ1dGUgYFJUQV9ERUxfUkVBU09OYCB0byBJUHY2IHJvdXRlIGRlbGV0aW9uIG5vdGlmaWNhdGlvbnMgKGBSVE1fREVMUk9VVEVgKS4gSXQgbW9kaWZpZXMgY29yZSBJUHY2IHJvdXRpbmcgYW5kIG5laWdoYm9yIGRpc2NvdmVyeSBmdW5jdGlvbnMgdG8gcG9wdWxhdGUgdGhpcyBhdHRyaWJ1dGUgd2hlbiByb3V0ZXMgYXJlIGRlbGV0ZWQgZHVlIHRvIGV4cGlyYXRpb24gb3IgUm91dGVyIEFkdmVydGlzZW1lbnQgKFJBKSB3aXRoZHJhd2FsLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYyB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNy0yNVQyMjozNjowMC4xODA3Nzk3NFoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwOTI1MTY2NTE3OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJJUFY2XCIsXG4gICAgXCJJUFY2X1JPVVRFUl9QUkVGXCIsXG4gICAgXCJJUFY2X1JPVVRFX0lORk9cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJpcDZfZGVsX3J0X3JlYXNvblwiLFxuICAgIFwiZmliNl9kZWxcIixcbiAgICBcImluZXQ2X3J0X25vdGlmeVwiLFxuICAgIFwicnQ2X3JvdXRlX3JjdlwiLFxuICAgIFwiYWRkcmNvbmZfcHJlZml4X3JjdlwiLFxuICAgIFwibmRpc2NfcmN2XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhIG5ldyBuZXRsaW5rIGF0dHJpYnV0ZSBgUlRBX0RFTF9SRUFTT05gIHRvIElQdjYgcm91dGUgZGVsZXRpb24gbm90aWZpY2F0aW9ucyAoYFJUTV9ERUxST1VURWApLiBJdCBtb2RpZmllcyBjb3JlIElQdjYgcm91dGluZyBhbmQgbmVpZ2hib3IgZGlzY292ZXJ5IGZ1bmN0aW9ucyB0byBwb3B1bGF0ZSB0aGlzIGF0dHJpYnV0ZSB3aGVuIHJvdXRlcyBhcmUgZGVsZXRlZCBkdWUgdG8gZXhwaXJhdGlvbiBvciBSb3V0ZXIgQWR2ZXJ0aXNlbWVudCAoUkEpIHdpdGhkcmF3YWwuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMjI6MzY6MDAuMTgwNzg3NDg5WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MjIzNDM2NDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA0YzJiZWY1ZWZhMjhhYTZhZmFiNjMxMjUxNTAxZjhhMTY4OGExMzE1XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBTYXQgSnVsIDI1IDIyOjM1OjU4IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0bGluay9zcGVjcy9ydC1yb3V0ZS55YW1sIGIvRG9jdW1lbnRhdGlvbi9uZXRsaW5rL3NwZWNzL3J0LXJvdXRlLnlhbWxcXG5pbmRleCAzMzE5NWRiOTY3NDZjNi4uMjM0ZjUwMmZiMzVkOWMgMTAwNjQ0XFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9uZXRsaW5rL3NwZWNzL3J0LXJvdXRlLnlhbWxcXG4rKysgYi9Eb2N1bWVudGF0aW9uL25ldGxpbmsvc3BlY3MvcnQtcm91dGUueWFtbFxcbkBAIC03OCw2ICs3OCwxNSBAQCBkZWZpbml0aW9uczpcXG4gICAgICAgLVxcbiAgICAgICAgIG5hbWU6IHJ0YS11c2VkXFxuICAgICAgICAgdHlwZTogdTMyXFxuKyAgLVxcbisgICAgbmFtZTogZGVsLXJlYXNvblxcbisgICAgdHlwZTogZW51bVxcbisgICAgbmFtZS1wcmVmaXg6IHJ0YS1kZWwtcmVhc29uLVxcbisgICAgZW51bS1uYW1lOiBydGEtZGVsLXJlYXNvblxcbisgICAgZW50cmllczpcXG4rICAgICAgLSB1bnNwZWNcXG4rICAgICAgLSBleHBpcmVkXFxuKyAgICAgIC0gcmEtd2l0aGRyYXduXFxuIFxcbiBhdHRyaWJ1dGUtc2V0czpcXG4gICAtXFxuQEAgLTE4NSw2ICsxOTQsMTAgQEAgYXR0cmlidXRlLXNldHM6XFxuICAgICAgICAgdHlwZTogdTMyXFxuICAgICAgICAgYnl0ZS1vcmRlcjogYmlnLWVuZGlhblxcbiAgICAgICAgIGRpc3BsYXktaGludDogaGV4XFxuKyAgICAgIC1cXG4rICAgICAgICBuYW1lOiBkZWwtcmVhc29uXFxuKyAgICAgICAgdHlwZTogdTMyXFxuKyAgICAgICAgZW51bTogZGVsLXJlYXNvblxcbiAgIC1cXG4gICAgIG5hbWU6IG1ldHJpY3NcXG4gICAgIG5hbWUtcHJlZml4OiBydGF4LVxcbkBAIC0yOTksNiArMzEyLDcgQEAgb3BlcmF0aW9uczpcXG4gICAgICAgICAgICAgLSBkcG9ydFxcbiAgICAgICAgICAgICAtIG5oLWlkXFxuICAgICAgICAgICAgIC0gZmxvd2xhYmVsXFxuKyAgICAgICAgICAgIC0gZGVsLXJlYXNvblxcbiAgICAgICBkdW1wOlxcbiAgICAgICAgIHJlcXVlc3Q6XFxuICAgICAgICAgICB2YWx1ZTogMjZcXG5AQCAtMzIyLDMgKzMzNiwyMiBAQCBvcGVyYXRpb25zOlxcbiAgICAgICAgIHJlcXVlc3Q6XFxuICAgICAgICAgICB2YWx1ZTogMjVcXG4gICAgICAgICAgIGF0dHJpYnV0ZXM6ICphbGwtcm91dGUtYXR0cnNcXG4rICAgIC1cXG4rICAgICAgbmFtZTogbmV3cm91dGUtbnRmXFxuKyAgICAgIGRvYzogTm90aWZpY2F0aW9uIGFib3V0IGEgY3JlYXRlZCByb3V0ZS5cXG4rICAgICAgdmFsdWU6IDI0XFxuKyAgICAgIG5vdGlmeTogZ2V0cm91dGVcXG4rICAgIC1cXG4rICAgICAgbmFtZTogZGVscm91dGUtbnRmXFxuKyAgICAgIGRvYzogTm90aWZpY2F0aW9uIGFib3V0IGEgZGVsZXRlZCByb3V0ZS5cXG4rICAgICAgdmFsdWU6IDI1XFxuKyAgICAgIG5vdGlmeTogZ2V0cm91dGVcXG4rXFxuK21jYXN0LWdyb3VwczpcXG4rICBsaXN0OlxcbisgICAgLVxcbisgICAgICBuYW1lOiBydG5sZ3JwLWlwdjQtcm91dGVcXG4rICAgICAgdmFsdWU6IDdcXG4rICAgIC1cXG4rICAgICAgbmFtZTogcnRubGdycC1pcHY2LXJvdXRlXFxuKyAgICAgIHZhbHVlOiAxMVxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9pcDZfZmliLmggYi9pbmNsdWRlL25ldC9pcDZfZmliLmhcXG5pbmRleCA5Y2QyN2UxYjliNjkyMy4uN2NhMGUyMTI0ZTc5NjMgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9uZXQvaXA2X2ZpYi5oXFxuKysrIGIvaW5jbHVkZS9uZXQvaXA2X2ZpYi5oXFxuQEAgLTQ2OCw3ICs0NjgsNyBAQCB2b2lkIGZpYjZfY2xlYW5fYWxsX3NraXBfbm90aWZ5KHN0cnVjdCBuZXQgKm5ldCxcXG4gXFxuIGludCBmaWI2X2FkZChzdHJ1Y3QgZmliNl9ub2RlICpyb290LCBzdHJ1Y3QgZmliNl9pbmZvICpydCxcXG4gXFx0ICAgICBzdHJ1Y3QgbmxfaW5mbyAqaW5mbywgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKTtcXG4taW50IGZpYjZfZGVsKHN0cnVjdCBmaWI2X2luZm8gKnJ0LCBzdHJ1Y3QgbmxfaW5mbyAqaW5mbyk7XFxuK2ludCBmaWI2X2RlbChzdHJ1Y3QgZmliNl9pbmZvICpydCwgc3RydWN0IG5sX2luZm8gKmluZm8sIHUzMiBkZWxfcmVhc29uKTtcXG4gXFxuIHN0YXRpYyBpbmxpbmVcXG4gdm9pZCBydDZfZ2V0X3ByZWZzcmMoY29uc3Qgc3RydWN0IHJ0Nl9pbmZvICpydCwgc3RydWN0IGluNl9hZGRyICphZGRyKVxcbkBAIC01MzEsNyArNTMxLDcgQEAgc3RhdGljIGlubGluZSB2b2lkIGZpYjZfcnRfdXBkYXRlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZpYjZfaW5mbyAqcnQsXFxuIH1cXG4gI2VuZGlmXFxuIHZvaWQgaW5ldDZfcnRfbm90aWZ5KGludCBldmVudCwgc3RydWN0IGZpYjZfaW5mbyAqcnQsIHN0cnVjdCBubF9pbmZvICppbmZvLFxcbi1cXHRcXHQgICAgIHVuc2lnbmVkIGludCBmbGFncyk7XFxuK1xcdFxcdCAgICAgdW5zaWduZWQgaW50IGZsYWdzLCB1MzIgZGVsX3JlYXNvbik7XFxuIFxcbiB2b2lkIGZpYjZfYWdlX2V4Y2VwdGlvbnMoc3RydWN0IGZpYjZfaW5mbyAqcnQsIHN0cnVjdCBmaWI2X2djX2FyZ3MgKmdjX2FyZ3MsXFxuIFxcdFxcdFxcdCB1bnNpZ25lZCBsb25nIG5vdyk7XFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2lwNl9yb3V0ZS5oIGIvaW5jbHVkZS9uZXQvaXA2X3JvdXRlLmhcXG5pbmRleCAwOWZmZTBmMTNjZTc1Mi4uOThmMTY4NGZlMzc4Y2MgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9uZXQvaXA2X3JvdXRlLmhcXG4rKysgYi9pbmNsdWRlL25ldC9pcDZfcm91dGUuaFxcbkBAIC0xMjgsNiArMTI4LDggQEAgaW50IGlwNl9yb3V0ZV9hZGQoc3RydWN0IGZpYjZfY29uZmlnICpjZmcsIGdmcF90IGdmcF9mbGFncyxcXG4gaW50IGlwNl9pbnNfcnQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZmliNl9pbmZvICpmNmkpO1xcbiAjaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNilcXG4gaW50IGlwNl9kZWxfcnQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZmliNl9pbmZvICpmNmksIGJvb2wgc2tpcF9ub3RpZnkpO1xcbitpbnQgaXA2X2RlbF9ydF9yZWFzb24oc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZmliNl9pbmZvICpmNmksIGJvb2wgc2tpcF9ub3RpZnksXFxuK1xcdFxcdCAgICAgIHUzMiBkZWxfcmVhc29uKTtcXG4gI2Vsc2VcXG4gc3RhdGljIGlubGluZSBpbnQgaXA2X2RlbF9ydChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBmaWI2X2luZm8gKmY2aSxcXG4gXFx0XFx0XFx0ICAgICBib29sIHNraXBfbm90aWZ5KVxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL3VhcGkvbGludXgvcnRuZXRsaW5rLmggYi9pbmNsdWRlL3VhcGkvbGludXgvcnRuZXRsaW5rLmhcXG5pbmRleCAyNzI2NWZkMzFlNWZjOS4uZmUwMGU2MjRmM2MzYWEgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS91YXBpL2xpbnV4L3J0bmV0bGluay5oXFxuKysrIGIvaW5jbHVkZS91YXBpL2xpbnV4L3J0bmV0bGluay5oXFxuQEAgLTM5OSw2ICszOTksNyBAQCBlbnVtIHJ0YXR0cl90eXBlX3Qge1xcbiBcXHRSVEFfRFBPUlQsXFxuIFxcdFJUQV9OSF9JRCxcXG4gXFx0UlRBX0ZMT1dMQUJFTCxcXG4rXFx0UlRBX0RFTF9SRUFTT04sXFxuIFxcdF9fUlRBX01BWFxcbiB9O1xcbiBcXG5AQCAtNDA3LDYgKzQwOCwyMiBAQCBlbnVtIHJ0YXR0cl90eXBlX3Qge1xcbiAjZGVmaW5lIFJUTV9SVEEocikgICgoc3RydWN0IHJ0YXR0ciopKCgoY2hhciopKHIpKSArIE5MTVNHX0FMSUdOKHNpemVvZihzdHJ1Y3QgcnRtc2cpKSkpXFxuICNkZWZpbmUgUlRNX1BBWUxPQUQobikgTkxNU0dfUEFZTE9BRChuLHNpemVvZihzdHJ1Y3QgcnRtc2cpKVxcbiBcXG4rLyogUlRBX0RFTF9SRUFTT046IHdoeSB0aGUga2VybmVsIGRlbGV0ZWQgdGhlIHJvdXRlLiB1MzIuXFxuKyAqIEVtaXR0ZWQgb25seSBvbiBSVE1fREVMUk9VVEUgbm90aWZpY2F0aW9ucywgYW5kIG9ubHkgd2hlbiB0aGUgZGVsZXRpb25cXG4rICogcGF0aCByZWNvcmRzIGEgY2F1c2UuIEFic2VuY2UgbWVhbnMgZWl0aGVyIGFuIG9sZGVyIGtlcm5lbCBvciBhXFxuKyAqIGRlbGV0aW9uIHBhdGggdGhhdCBkb2VzIG5vdCAoeWV0KSByZWNvcmQgaXRzIGNhdXNlIC0gY29uc3VtZXJzIG11c3RcXG4rICogdHJlYXQgXFxcImFic2VudFxcXCIgYW5kIFxcXCJ1bnNwZWNcXFwiIGlkZW50aWNhbGx5LiBOZXcgY2F1c2VzIG1heSBiZSBhcHBlbmRlZC5cXG4rICogQ3VycmVudGx5IG9ubHkgSVB2NiBkZWxldGlvbiBwYXRocyByZWNvcmQgYSBjYXVzZS5cXG4rICovXFxuK2VudW0gcnRhX2RlbF9yZWFzb24ge1xcbitcXHRSVEFfREVMX1JFQVNPTl9VTlNQRUMsXFx0XFx0LyogY2F1c2Ugbm90IHJlY29yZGVkICovXFxuK1xcdFJUQV9ERUxfUkVBU09OX0VYUElSRUQsXFx0XFx0LyogUlRGX0VYUElSRVMgbGlmZXRpbWUgcmFuIG91dCAoR0MpICovXFxuK1xcdFJUQV9ERUxfUkVBU09OX1JBX1dJVEhEUkFXTixcXHQvKiB6ZXJvLWxpZmV0aW1lIFJBIC8gUElPIC8gUklPICovXFxuK1xcdF9fUlRBX0RFTF9SRUFTT05fTUFYXFxuK307XFxuK1xcbisjZGVmaW5lIFJUQV9ERUxfUkVBU09OX01BWCAoX19SVEFfREVMX1JFQVNPTl9NQVggLSAxKVxcbitcXG4gLyogUlRNX01VTFRJUEFUSCAtLS0gYXJyYXkgb2Ygc3RydWN0IHJ0bmV4dGhvcC5cXG4gICpcXG4gICogXFxcInN0cnVjdCBydG5leHRob3BcXFwiIGRlc2NyaWJlcyBhbGwgbmVjZXNzYXJ5IG5leHRob3AgaW5mb3JtYXRpb24sXFxuZGlmZiAtLWdpdCBhL25ldC9pcHY2L2FkZHJjb25mLmMgYi9uZXQvaXB2Ni9hZGRyY29uZi5jXFxuaW5kZXggZjFmZTllZGUxZWRiMzcuLjFjYTlkODJiNTcyMWU2IDEwMDY0NFxcbi0tLSBhL25ldC9pcHY2L2FkZHJjb25mLmNcXG4rKysgYi9uZXQvaXB2Ni9hZGRyY29uZi5jXFxuQEAgLTI4NzQsNyArMjg3NCw4IEBAIHZvaWQgYWRkcmNvbmZfcHJlZml4X3JjdihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1OCAqb3B0LCBpbnQgbGVuLCBib29sIHNsbGFvKVxcbiBcXHRcXHRpZiAocnQpIHtcXG4gXFx0XFx0XFx0LyogQXV0b2NvbmYgcHJlZml4IHJvdXRlICovXFxuIFxcdFxcdFxcdGlmICh2YWxpZF9sZnQgPT0gMCkge1xcbi1cXHRcXHRcXHRcXHRpcDZfZGVsX3J0KG5ldCwgcnQsIGZhbHNlKTtcXG4rXFx0XFx0XFx0XFx0aXA2X2RlbF9ydF9yZWFzb24obmV0LCBydCwgZmFsc2UsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgUlRBX0RFTF9SRUFTT05fUkFfV0lUSERSQVdOKTtcXG4gXFx0XFx0XFx0XFx0cnQgPSBOVUxMO1xcbiBcXHRcXHRcXHR9IGVsc2Uge1xcbiBcXHRcXHRcXHRcXHR0YWJsZSA9IHJ0LVxcdTAwM2VmaWI2X3RhYmxlO1xcbmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9pcDZfZmliLmMgYi9uZXQvaXB2Ni9pcDZfZmliLmNcXG5pbmRleCBhMTMwY2RmYWViZmJlZS4uMzJiOWEwMDk1NmEwOTIgMTAwNjQ0XFxuLS0tIGEvbmV0L2lwdjYvaXA2X2ZpYi5jXFxuKysrIGIvbmV0L2lwdjYvaXA2X2ZpYi5jXFxuQEAgLTEyODYsNyArMTI4Niw4IEBAIHN0YXRpYyBpbnQgZmliNl9hZGRfcnQybm9kZShzdHJ1Y3QgZmliNl9ub2RlICpmbiwgc3RydWN0IGZpYjZfaW5mbyAqcnQsXFxuIFxcdFxcdHJjdV9hc3NpZ25fcG9pbnRlcihydC1cXHUwMDNlZmliNl9ub2RlLCBmbik7XFxuIFxcdFxcdHJjdV9hc3NpZ25fcG9pbnRlcigqaW5zLCBydCk7XFxuIFxcdFxcdGlmICghaW5mby1cXHUwMDNlc2tpcF9ub3RpZnkpXFxuLVxcdFxcdFxcdGluZXQ2X3J0X25vdGlmeShSVE1fTkVXUk9VVEUsIHJ0LCBpbmZvLCBubGZsYWdzKTtcXG4rXFx0XFx0XFx0aW5ldDZfcnRfbm90aWZ5KFJUTV9ORVdST1VURSwgcnQsIGluZm8sIG5sZmxhZ3MsXFxuK1xcdFxcdFxcdFxcdFxcdFJUQV9ERUxfUkVBU09OX1VOU1BFQyk7XFxuIFxcdFxcdGluZm8tXFx1MDAzZW5sX25ldC1cXHUwMDNlaXB2Ni5ydDZfc3RhdHMtXFx1MDAzZWZpYl9ydF9lbnRyaWVzKys7XFxuIFxcbiBcXHRcXHRpZiAoIShmbi1cXHUwMDNlZm5fZmxhZ3MgXFx1MDAyNiBSVE5fUlRJTkZPKSkge1xcbkBAIC0xMzE3LDcgKzEzMTgsOCBAQCBzdGF0aWMgaW50IGZpYjZfYWRkX3J0Mm5vZGUoc3RydWN0IGZpYjZfbm9kZSAqZm4sIHN0cnVjdCBmaWI2X2luZm8gKnJ0LFxcbiBcXHRcXHRydC1cXHUwMDNlZmliNl9uZXh0ID0gaXRlci1cXHUwMDNlZmliNl9uZXh0O1xcbiBcXHRcXHRyY3VfYXNzaWduX3BvaW50ZXIoKmlucywgcnQpO1xcbiBcXHRcXHRpZiAoIWluZm8tXFx1MDAzZXNraXBfbm90aWZ5KVxcbi1cXHRcXHRcXHRpbmV0Nl9ydF9ub3RpZnkoUlRNX05FV1JPVVRFLCBydCwgaW5mbywgTkxNX0ZfUkVQTEFDRSk7XFxuK1xcdFxcdFxcdGluZXQ2X3J0X25vdGlmeShSVE1fTkVXUk9VVEUsIHJ0LCBpbmZvLCBOTE1fRl9SRVBMQUNFLFxcbitcXHRcXHRcXHRcXHRcXHRSVEFfREVMX1JFQVNPTl9VTlNQRUMpO1xcbiBcXHRcXHRpZiAoIShmbi1cXHUwMDNlZm5fZmxhZ3MgXFx1MDAyNiBSVE5fUlRJTkZPKSkge1xcbiBcXHRcXHRcXHRpbmZvLVxcdTAwM2VubF9uZXQtXFx1MDAzZWlwdjYucnQ2X3N0YXRzLVxcdTAwM2VmaWJfcm91dGVfbm9kZXMrKztcXG4gXFx0XFx0XFx0Zm4tXFx1MDAzZWZuX2ZsYWdzIHw9IFJUTl9SVElORk87XFxuQEAgLTE5NjYsNyArMTk2OCw4IEBAIHN0YXRpYyBzdHJ1Y3QgZmliNl9ub2RlICpmaWI2X3JlcGFpcl90cmVlKHN0cnVjdCBuZXQgKm5ldCxcXG4gfVxcbiBcXG4gc3RhdGljIHZvaWQgZmliNl9kZWxfcm91dGUoc3RydWN0IGZpYjZfdGFibGUgKnRhYmxlLCBzdHJ1Y3QgZmliNl9ub2RlICpmbixcXG4tXFx0XFx0XFx0ICAgc3RydWN0IGZpYjZfaW5mbyBfX3JjdSAqKnJ0cCwgc3RydWN0IG5sX2luZm8gKmluZm8pXFxuK1xcdFxcdFxcdCAgIHN0cnVjdCBmaWI2X2luZm8gX19yY3UgKipydHAsIHN0cnVjdCBubF9pbmZvICppbmZvLFxcbitcXHRcXHRcXHQgICB1MzIgZGVsX3JlYXNvbilcXG4ge1xcbiBcXHRzdHJ1Y3QgZmliNl9pbmZvICpsZWFmLCAqcmVwbGFjZV9ydCA9IE5VTEw7XFxuIFxcdHN0cnVjdCBmaWI2X3dhbGtlciAqdztcXG5AQCAtMjA1NSwxMyArMjA1OCwxMyBAQCBzdGF0aWMgdm9pZCBmaWI2X2RlbF9yb3V0ZShzdHJ1Y3QgZmliNl90YWJsZSAqdGFibGUsIHN0cnVjdCBmaWI2X25vZGUgKmZuLFxcbiBcXHRcXHRcXHRjYWxsX2ZpYjZfZW50cnlfbm90aWZpZXJzX3JlcGxhY2UobmV0LCByZXBsYWNlX3J0KTtcXG4gXFx0fVxcbiBcXHRpZiAoIWluZm8tXFx1MDAzZXNraXBfbm90aWZ5KVxcbi1cXHRcXHRpbmV0Nl9ydF9ub3RpZnkoUlRNX0RFTFJPVVRFLCBydCwgaW5mbywgMCk7XFxuK1xcdFxcdGluZXQ2X3J0X25vdGlmeShSVE1fREVMUk9VVEUsIHJ0LCBpbmZvLCAwLCBkZWxfcmVhc29uKTtcXG4gXFxuIFxcdGZpYjZfaW5mb19yZWxlYXNlKHJ0KTtcXG4gfVxcbiBcXG4gLyogTmVlZCB0byBvd24gdGFibGUtXFx1MDAzZXRiNl9sb2NrICovXFxuLWludCBmaWI2X2RlbChzdHJ1Y3QgZmliNl9pbmZvICpydCwgc3RydWN0IG5sX2luZm8gKmluZm8pXFxuK2ludCBmaWI2X2RlbChzdHJ1Y3QgZmliNl9pbmZvICpydCwgc3RydWN0IG5sX2luZm8gKmluZm8sIHUzMiBkZWxfcmVhc29uKVxcbiB7XFxuIFxcdHN0cnVjdCBuZXQgKm5ldCA9IGluZm8tXFx1MDAzZW5sX25ldDtcXG4gXFx0c3RydWN0IGZpYjZfaW5mbyBfX3JjdSAqKnJ0cDtcXG5AQCAtMjA5MCw3ICsyMDkzLDcgQEAgaW50IGZpYjZfZGVsKHN0cnVjdCBmaWI2X2luZm8gKnJ0LCBzdHJ1Y3QgbmxfaW5mbyAqaW5mbylcXG4gXFx0XFx0aWYgKHJ0ID09IGN1cikge1xcbiBcXHRcXHRcXHRpZiAoZmliNl9yZXF1aXJlc19zcmMoY3VyKSlcXG4gXFx0XFx0XFx0XFx0ZmliNl9yb3V0ZXNfcmVxdWlyZV9zcmNfZGVjKGluZm8tXFx1MDAzZW5sX25ldCk7XFxuLVxcdFxcdFxcdGZpYjZfZGVsX3JvdXRlKHRhYmxlLCBmbiwgcnRwLCBpbmZvKTtcXG4rXFx0XFx0XFx0ZmliNl9kZWxfcm91dGUodGFibGUsIGZuLCBydHAsIGluZm8sIGRlbF9yZWFzb24pO1xcbiBcXHRcXHRcXHRyZXR1cm4gMDtcXG4gXFx0XFx0fVxcbiBcXHRcXHRydHBfbmV4dCA9IFxcdTAwMjZjdXItXFx1MDAzZWZpYjZfbmV4dDtcXG5AQCAtMjI1Miw3ICsyMjU1LDcgQEAgc3RhdGljIGludCBmaWI2X2NsZWFuX25vZGUoc3RydWN0IGZpYjZfd2Fsa2VyICp3KVxcbiBcXHRcXHRyZXMgPSBjLVxcdTAwM2VmdW5jKHJ0LCBjLVxcdTAwM2VhcmcpO1xcbiBcXHRcXHRpZiAocmVzID09IC0xKSB7XFxuIFxcdFxcdFxcdHctXFx1MDAzZWxlYWYgPSBydDtcXG4tXFx0XFx0XFx0cmVzID0gZmliNl9kZWwocnQsIFxcdTAwMjZpbmZvKTtcXG4rXFx0XFx0XFx0cmVzID0gZmliNl9kZWwocnQsIFxcdTAwMjZpbmZvLCBSVEFfREVMX1JFQVNPTl9VTlNQRUMpO1xcbiBcXHRcXHRcXHRpZiAocmVzKSB7XFxuICNpZiBSVDZfREVCVUcgXFx1MDAzZT0gMlxcbiBcXHRcXHRcXHRcXHRwcl9kZWJ1ZyhcXFwiJXM6IGRlbCBmYWlsZWQ6IHJ0PSVwQCVwIGVycj0lZFxcXFxuXFxcIixcXG5AQCAtMjQwMCw3ICsyNDAzLDcgQEAgc3RhdGljIHZvaWQgZmliNl9nY190YWJsZShzdHJ1Y3QgbmV0ICpuZXQsXFxuIFxcbiBcXHRobGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHJ0LCBuLCBcXHUwMDI2dGI2LVxcdTAwM2V0YjZfZ2NfaGxpc3QsIGdjX2xpbmspXFxuIFxcdFxcdGlmIChmaWI2X2FnZShydCwgZ2NfYXJncykgPT0gLTEpXFxuLVxcdFxcdFxcdGZpYjZfZGVsKHJ0LCBcXHUwMDI2aW5mbyk7XFxuK1xcdFxcdFxcdGZpYjZfZGVsKHJ0LCBcXHUwMDI2aW5mbywgUlRBX0RFTF9SRUFTT05fRVhQSVJFRCk7XFxuIH1cXG4gXFxuIHN0YXRpYyB2b2lkIGZpYjZfZ2NfYWxsKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZpYjZfZ2NfYXJncyAqZ2NfYXJncylcXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjYvbmRpc2MuYyBiL25ldC9pcHY2L25kaXNjLmNcXG5pbmRleCBmODY3ZWM4ZDNkOTA1MS4uYzM1MzdmYzBlYzYzYjEgMTAwNjQ0XFxuLS0tIGEvbmV0L2lwdjYvbmRpc2MuY1xcbisrKyBiL25ldC9pcHY2L25kaXNjLmNcXG5AQCAtMTM2MSw3ICsxMzYxLDkgQEAgc3RhdGljIGVudW0gc2tiX2Ryb3BfcmVhc29uIG5kaXNjX3JvdXRlcl9kaXNjb3Zlcnkoc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4gXFx0ZGVmcnRyX3Vzcl9tZXRyaWMgPSBpbjZfZGV2LVxcdTAwM2VjbmYucmFfZGVmcnRyX21ldHJpYztcXG4gXFx0LyogZGVsZXRlIHRoZSByb3V0ZSBpZiBsaWZldGltZSBpcyAwIG9yIGlmIG1ldHJpYyBuZWVkcyBjaGFuZ2UgKi9cXG4gXFx0aWYgKHJ0IFxcdTAwMjZcXHUwMDI2IChsaWZldGltZSA9PSAwIHx8IHJ0LVxcdTAwM2VmaWI2X21ldHJpYyAhPSBkZWZydHJfdXNyX21ldHJpYykpIHtcXG4tXFx0XFx0aXA2X2RlbF9ydChuZXQsIHJ0LCBmYWxzZSk7XFxuK1xcdFxcdGlwNl9kZWxfcnRfcmVhc29uKG5ldCwgcnQsIGZhbHNlLFxcbitcXHRcXHRcXHRcXHQgIGxpZmV0aW1lID09IDAgPyBSVEFfREVMX1JFQVNPTl9SQV9XSVRIRFJBV04gOlxcbitcXHRcXHRcXHRcXHRcXHRcXHQgIFJUQV9ERUxfUkVBU09OX1VOU1BFQyk7XFxuIFxcdFxcdHJ0ID0gTlVMTDtcXG4gXFx0fVxcbiBcXG5AQCAtMTM5Niw3ICsxMzk4LDggQEAgc3RhdGljIGVudW0gc2tiX2Ryb3BfcmVhc29uIG5kaXNjX3JvdXRlcl9kaXNjb3Zlcnkoc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4gXFx0XFx0XFx0Lm5sX25ldCA9IG5ldCxcXG4gXFx0XFx0fTtcXG4gXFx0XFx0cnQtXFx1MDAzZWZpYjZfZmxhZ3MgPSAocnQtXFx1MDAzZWZpYjZfZmxhZ3MgXFx1MDAyNiB+UlRGX1BSRUZfTUFTSykgfCBSVEZfUFJFRihwcmVmKTtcXG4tXFx0XFx0aW5ldDZfcnRfbm90aWZ5KFJUTV9ORVdST1VURSwgcnQsIFxcdTAwMjZubGluZm8sIE5MTV9GX1JFUExBQ0UpO1xcbitcXHRcXHRpbmV0Nl9ydF9ub3RpZnkoUlRNX05FV1JPVVRFLCBydCwgXFx1MDAyNm5saW5mbywgTkxNX0ZfUkVQTEFDRSxcXG4rXFx0XFx0XFx0XFx0UlRBX0RFTF9SRUFTT05fVU5TUEVDKTtcXG4gXFx0fVxcbiBcXG4gXFx0aWYgKHJ0KSB7XFxuZGlmZiAtLWdpdCBhL25ldC9pcHY2L3JvdXRlLmMgYi9uZXQvaXB2Ni9yb3V0ZS5jXFxuaW5kZXggYTEzMDEzMzRkYTQ4YzAuLmU4ZWQ5NWRjNTY2NWVlIDEwMDY0NFxcbi0tLSBhL25ldC9pcHY2L3JvdXRlLmNcXG4rKysgYi9uZXQvaXB2Ni9yb3V0ZS5jXFxuQEAgLTExMSw3ICsxMTEsNyBAQCBzdGF0aWMgaW50IHJ0Nl9maWxsX25vZGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbiBcXHRcXHRcXHQgc3RydWN0IGZpYjZfaW5mbyAqcnQsIHN0cnVjdCBkc3RfZW50cnkgKmRzdCxcXG4gXFx0XFx0XFx0IHN0cnVjdCBpbjZfYWRkciAqZGVzdCwgc3RydWN0IGluNl9hZGRyICpzcmMsXFxuIFxcdFxcdFxcdCBpbnQgaWlmLCBpbnQgdHlwZSwgdTMyIHBvcnRpZCwgdTMyIHNlcSxcXG4tXFx0XFx0XFx0IHVuc2lnbmVkIGludCBmbGFncyk7XFxuK1xcdFxcdFxcdCB1bnNpZ25lZCBpbnQgZmxhZ3MsIHUzMiBkZWxfcmVhc29uKTtcXG4gc3RhdGljIHN0cnVjdCBydDZfaW5mbyAqcnQ2X2ZpbmRfY2FjaGVkX3J0KGNvbnN0IHN0cnVjdCBmaWI2X3Jlc3VsdCAqcmVzLFxcbiBcXHRcXHRcXHRcXHRcXHQgICBjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKmRhZGRyLFxcbiBcXHRcXHRcXHRcXHRcXHQgICBjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKnNhZGRyKTtcXG5AQCAtMTAyMCw3ICsxMDIwLDcgQEAgaW50IHJ0Nl9yb3V0ZV9yY3Yoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTggKm9wdCwgaW50IGxlbixcXG4gXFx0XFx0XFx0XFx0XFx0Z3dhZGRyLCBkZXYpO1xcbiBcXG4gXFx0aWYgKHJ0IFxcdTAwMjZcXHUwMDI2ICFsaWZldGltZSkge1xcbi1cXHRcXHRpcDZfZGVsX3J0KG5ldCwgcnQsIGZhbHNlKTtcXG4rXFx0XFx0aXA2X2RlbF9ydF9yZWFzb24obmV0LCBydCwgZmFsc2UsIFJUQV9ERUxfUkVBU09OX1JBX1dJVEhEUkFXTik7XFxuIFxcdFxcdHJ0ID0gTlVMTDtcXG4gXFx0fVxcbiBcXG5AQCAtMzk3Myw3ICszOTczLDggQEAgaW50IGlwNl9yb3V0ZV9hZGQoc3RydWN0IGZpYjZfY29uZmlnICpjZmcsIGdmcF90IGdmcF9mbGFncyxcXG4gXFx0cmV0dXJuIGVycjtcXG4gfVxcbiBcXG4tc3RhdGljIGludCBfX2lwNl9kZWxfcnQoc3RydWN0IGZpYjZfaW5mbyAqcnQsIHN0cnVjdCBubF9pbmZvICppbmZvKVxcbitzdGF0aWMgaW50IF9faXA2X2RlbF9ydChzdHJ1Y3QgZmliNl9pbmZvICpydCwgc3RydWN0IG5sX2luZm8gKmluZm8sXFxuK1xcdFxcdFxcdHUzMiBkZWxfcmVhc29uKVxcbiB7XFxuIFxcdHN0cnVjdCBuZXQgKm5ldCA9IGluZm8tXFx1MDAzZW5sX25ldDtcXG4gXFx0c3RydWN0IGZpYjZfdGFibGUgKnRhYmxlO1xcbkBAIC0zOTg2LDcgKzM5ODcsNyBAQCBzdGF0aWMgaW50IF9faXA2X2RlbF9ydChzdHJ1Y3QgZmliNl9pbmZvICpydCwgc3RydWN0IG5sX2luZm8gKmluZm8pXFxuIFxcbiBcXHR0YWJsZSA9IHJ0LVxcdTAwM2VmaWI2X3RhYmxlO1xcbiBcXHRzcGluX2xvY2tfYmgoXFx1MDAyNnRhYmxlLVxcdTAwM2V0YjZfbG9jayk7XFxuLVxcdGVyciA9IGZpYjZfZGVsKHJ0LCBpbmZvKTtcXG4rXFx0ZXJyID0gZmliNl9kZWwocnQsIGluZm8sIGRlbF9yZWFzb24pO1xcbiBcXHRzcGluX3VubG9ja19iaChcXHUwMDI2dGFibGUtXFx1MDAzZXRiNl9sb2NrKTtcXG4gXFxuIG91dDpcXG5AQCAtMzk5NCwxNCArMzk5NSwyMCBAQCBzdGF0aWMgaW50IF9faXA2X2RlbF9ydChzdHJ1Y3QgZmliNl9pbmZvICpydCwgc3RydWN0IG5sX2luZm8gKmluZm8pXFxuIFxcdHJldHVybiBlcnI7XFxuIH1cXG4gXFxuLWludCBpcDZfZGVsX3J0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZpYjZfaW5mbyAqcnQsIGJvb2wgc2tpcF9ub3RpZnkpXFxuK2ludCBpcDZfZGVsX3J0X3JlYXNvbihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBmaWI2X2luZm8gKnJ0LCBib29sIHNraXBfbm90aWZ5LFxcbitcXHRcXHQgICAgICB1MzIgZGVsX3JlYXNvbilcXG4ge1xcbiBcXHRzdHJ1Y3QgbmxfaW5mbyBpbmZvID0ge1xcbiBcXHRcXHQubmxfbmV0ID0gbmV0LFxcbi1cXHRcXHQuc2tpcF9ub3RpZnkgPSBza2lwX25vdGlmeVxcbitcXHRcXHQuc2tpcF9ub3RpZnkgPSBza2lwX25vdGlmeSxcXG4gXFx0fTtcXG4gXFxuLVxcdHJldHVybiBfX2lwNl9kZWxfcnQocnQsIFxcdTAwMjZpbmZvKTtcXG4rXFx0cmV0dXJuIF9faXA2X2RlbF9ydChydCwgXFx1MDAyNmluZm8sIGRlbF9yZWFzb24pO1xcbit9XFxuK1xcbitpbnQgaXA2X2RlbF9ydChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBmaWI2X2luZm8gKnJ0LCBib29sIHNraXBfbm90aWZ5KVxcbit7XFxuK1xcdHJldHVybiBpcDZfZGVsX3J0X3JlYXNvbihuZXQsIHJ0LCBza2lwX25vdGlmeSwgUlRBX0RFTF9SRUFTT05fVU5TUEVDKTtcXG4gfVxcbiBcXG4gc3RhdGljIGludCBfX2lwNl9kZWxfcnRfc2libGluZ3Moc3RydWN0IGZpYjZfaW5mbyAqcnQsIHN0cnVjdCBmaWI2X2NvbmZpZyAqY2ZnKVxcbkBAIC00MDI4LDcgKzQwMzUsOCBAQCBzdGF0aWMgaW50IF9faXA2X2RlbF9ydF9zaWJsaW5ncyhzdHJ1Y3QgZmliNl9pbmZvICpydCwgc3RydWN0IGZpYjZfY29uZmlnICpjZmcpXFxuIFxcbiBcXHRcXHRcXHRpZiAocnQ2X2ZpbGxfbm9kZShuZXQsIHNrYiwgcnQsIE5VTEwsXFxuIFxcdFxcdFxcdFxcdFxcdCAgTlVMTCwgTlVMTCwgMCwgUlRNX0RFTFJPVVRFLFxcbi1cXHRcXHRcXHRcXHRcXHQgIGluZm8tXFx1MDAzZXBvcnRpZCwgc2VxLCAwKSBcXHUwMDNjIDApIHtcXG4rXFx0XFx0XFx0XFx0XFx0ICBpbmZvLVxcdTAwM2Vwb3J0aWQsIHNlcSwgMCxcXG4rXFx0XFx0XFx0XFx0XFx0ICBSVEFfREVMX1JFQVNPTl9VTlNQRUMpIFxcdTAwM2MgMCkge1xcbiBcXHRcXHRcXHRcXHRrZnJlZV9za2Ioc2tiKTtcXG4gXFx0XFx0XFx0XFx0c2tiID0gTlVMTDtcXG4gXFx0XFx0XFx0fSBlbHNlXFxuQEAgLTQwNjQsMTMgKzQwNzIsMTMgQEAgc3RhdGljIGludCBfX2lwNl9kZWxfcnRfc2libGluZ3Moc3RydWN0IGZpYjZfaW5mbyAqcnQsIHN0cnVjdCBmaWI2X2NvbmZpZyAqY2ZnKVxcbiBcXHRcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoc2libGluZywgbmV4dF9zaWJsaW5nLFxcbiBcXHRcXHRcXHRcXHRcXHQgXFx1MDAyNnJ0LVxcdTAwM2VmaWI2X3NpYmxpbmdzLFxcbiBcXHRcXHRcXHRcXHRcXHQgZmliNl9zaWJsaW5ncykge1xcbi1cXHRcXHRcXHRlcnIgPSBmaWI2X2RlbChzaWJsaW5nLCBpbmZvKTtcXG4rXFx0XFx0XFx0ZXJyID0gZmliNl9kZWwoc2libGluZywgaW5mbywgUlRBX0RFTF9SRUFTT05fVU5TUEVDKTtcXG4gXFx0XFx0XFx0aWYgKGVycilcXG4gXFx0XFx0XFx0XFx0Z290byBvdXRfdW5sb2NrO1xcbiBcXHRcXHR9XFxuIFxcdH1cXG4gXFxuLVxcdGVyciA9IGZpYjZfZGVsKHJ0LCBpbmZvKTtcXG4rXFx0ZXJyID0gZmliNl9kZWwocnQsIGluZm8sIFJUQV9ERUxfUkVBU09OX1VOU1BFQyk7XFxuIG91dF91bmxvY2s6XFxuIFxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZ0YWJsZS1cXHUwMDNldGI2X2xvY2spO1xcbiBvdXRfcHV0OlxcbkBAIC00MTk2LDcgKzQyMDQsOCBAQCBzdGF0aWMgaW50IGlwNl9yb3V0ZV9kZWwoc3RydWN0IGZpYjZfY29uZmlnICpjZmcsXFxuIFxcdFxcdFxcdFxcdGlmICghZmliNl9pbmZvX2hvbGRfc2FmZShydCkpXFxuIFxcdFxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbiBcXG4tXFx0XFx0XFx0XFx0ZXJyID0gIF9faXA2X2RlbF9ydChydCwgXFx1MDAyNmNmZy1cXHUwMDNlZmNfbmxpbmZvKTtcXG4rXFx0XFx0XFx0XFx0ZXJyID0gX19pcDZfZGVsX3J0KHJ0LCBcXHUwMDI2Y2ZnLVxcdTAwM2VmY19ubGluZm8sXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgIFJUQV9ERUxfUkVBU09OX1VOU1BFQyk7XFxuIFxcdFxcdFxcdFxcdGJyZWFrO1xcbiBcXHRcXHRcXHR9XFxuIFxcdFxcdFxcdGlmIChjZmctXFx1MDAzZWZjX25oX2lkKVxcbkBAIC00MjE1LDcgKzQyMjQsOCBAQCBzdGF0aWMgaW50IGlwNl9yb3V0ZV9kZWwoc3RydWN0IGZpYjZfY29uZmlnICpjZmcsXFxuIFxcbiBcXHRcXHRcXHQvKiBpZiBnYXRld2F5IHdhcyBzcGVjaWZpZWQgb25seSBkZWxldGUgdGhlIG9uZSBob3AgKi9cXG4gXFx0XFx0XFx0aWYgKGNmZy1cXHUwMDNlZmNfZmxhZ3MgXFx1MDAyNiBSVEZfR0FURVdBWSlcXG4tXFx0XFx0XFx0XFx0ZXJyID0gX19pcDZfZGVsX3J0KHJ0LCBcXHUwMDI2Y2ZnLVxcdTAwM2VmY19ubGluZm8pO1xcbitcXHRcXHRcXHRcXHRlcnIgPSBfX2lwNl9kZWxfcnQocnQsIFxcdTAwMjZjZmctXFx1MDAzZWZjX25saW5mbyxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICAgUlRBX0RFTF9SRUFTT05fVU5TUEVDKTtcXG4gXFx0XFx0XFx0ZWxzZVxcbiBcXHRcXHRcXHRcXHRlcnIgPSBfX2lwNl9kZWxfcnRfc2libGluZ3MocnQsIGNmZyk7XFxuIFxcdFxcdFxcdGJyZWFrO1xcbkBAIC01MzgxLDcgKzUzOTEsOCBAQCBzdGF0aWMgdm9pZCBpcDZfcm91dGVfbXBhdGhfbm90aWZ5KHN0cnVjdCBmaWI2X2luZm8gKnJ0LFxcbiBcXHR9XFxuIFxcbiBcXHRpZiAocnQpXFxuLVxcdFxcdGluZXQ2X3J0X25vdGlmeShSVE1fTkVXUk9VVEUsIHJ0LCBpbmZvLCBubGZsYWdzKTtcXG4rXFx0XFx0aW5ldDZfcnRfbm90aWZ5KFJUTV9ORVdST1VURSwgcnQsIGluZm8sIG5sZmxhZ3MsXFxuK1xcdFxcdFxcdFxcdFJUQV9ERUxfUkVBU09OX1VOU1BFQyk7XFxuIFxcbiBcXHRyY3VfcmVhZF91bmxvY2soKTtcXG4gfVxcbkBAIC01NzM5LDYgKzU3NTAsNyBAQCBzdGF0aWMgc2l6ZV90IHJ0Nl9ubG1zZ19zaXplKHN0cnVjdCBmaWI2X2luZm8gKmY2aSlcXG4gXFx0ICAgICAgICsgbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHN0cnVjdCBydGFfY2FjaGVpbmZvKSlcXG4gXFx0ICAgICAgICsgbmxhX3RvdGFsX3NpemUoVENQX0NBX05BTUVfTUFYKSAvKiBSVEFYX0NDX0FMR08gKi9cXG4gXFx0ICAgICAgICsgbmxhX3RvdGFsX3NpemUoMSkgLyogUlRBX1BSRUYgKi9cXG4rXFx0ICAgICAgICsgbmxhX3RvdGFsX3NpemUoNCkgLyogUlRBX0RFTF9SRUFTT04gKi9cXG4gXFx0ICAgICAgICsgbmV4dGhvcF9sZW47XFxuIH1cXG4gXFxuQEAgLTU3NzUsNyArNTc4Nyw3IEBAIHN0YXRpYyBpbnQgcnQ2X2ZpbGxfbm9kZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICpza2IsXFxuIFxcdFxcdFxcdCBzdHJ1Y3QgZmliNl9pbmZvICpydCwgc3RydWN0IGRzdF9lbnRyeSAqZHN0LFxcbiBcXHRcXHRcXHQgc3RydWN0IGluNl9hZGRyICpkZXN0LCBzdHJ1Y3QgaW42X2FkZHIgKnNyYyxcXG4gXFx0XFx0XFx0IGludCBpaWYsIGludCB0eXBlLCB1MzIgcG9ydGlkLCB1MzIgc2VxLFxcbi1cXHRcXHRcXHQgdW5zaWduZWQgaW50IGZsYWdzKVxcbitcXHRcXHRcXHQgdW5zaWduZWQgaW50IGZsYWdzLCB1MzIgZGVsX3JlYXNvbilcXG4ge1xcbiBcXHRzdHJ1Y3QgcnQ2X2luZm8gKnJ0NiA9IGRzdF9ydDZfaW5mbyhkc3QpO1xcbiBcXHRzdHJ1Y3QgcnQ2a2V5ICpydDZfZHN0LCAqcnQ2X3NyYztcXG5AQCAtNTk1NCw2ICs1OTY2LDEwIEBAIHN0YXRpYyBpbnQgcnQ2X2ZpbGxfbm9kZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICpza2IsXFxuIFxcdGlmIChydG5sX3B1dF9jYWNoZWluZm8oc2tiLCBkc3QsIDAsIGV4cGlyZXMsIGRzdCA/IGRzdC1cXHUwMDNlZXJyb3IgOiAwKSBcXHUwMDNjIDApXFxuIFxcdFxcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xcbiBcXG4rXFx0aWYgKHR5cGUgPT0gUlRNX0RFTFJPVVRFIFxcdTAwMjZcXHUwMDI2IGRlbF9yZWFzb24gIT0gUlRBX0RFTF9SRUFTT05fVU5TUEVDIFxcdTAwMjZcXHUwMDI2XFxuK1xcdCAgICBubGFfcHV0X3UzMihza2IsIFJUQV9ERUxfUkVBU09OLCBkZWxfcmVhc29uKSlcXG4rXFx0XFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XFxuK1xcbiBcXHRpZiAobmxhX3B1dF91OChza2IsIFJUQV9QUkVGLCBJUFY2X0VYVFJBQ1RfUFJFRihydDZfZmxhZ3MpKSlcXG4gXFx0XFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XFxuIFxcbkBAIC02MDU1LDcgKzYwNzEsOCBAQCBzdGF0aWMgaW50IHJ0Nl9uaF9kdW1wX2V4Y2VwdGlvbnMoc3RydWN0IGZpYjZfbmggKm5oLCB2b2lkICphcmcpXFxuIFxcdFxcdFxcdFxcdFxcdCAgICBcXHUwMDI2cnQ2X2V4LVxcdTAwM2VydDZpLVxcdTAwM2Vkc3QsIE5VTEwsIE5VTEwsIDAsXFxuIFxcdFxcdFxcdFxcdFxcdCAgICBSVE1fTkVXUk9VVEUsXFxuIFxcdFxcdFxcdFxcdFxcdCAgICBORVRMSU5LX0NCKGR1bXAtXFx1MDAzZWNiLVxcdTAwM2Vza2IpLnBvcnRpZCxcXG4tXFx0XFx0XFx0XFx0XFx0ICAgIGR1bXAtXFx1MDAzZWNiLVxcdTAwM2VubGgtXFx1MDAzZW5sbXNnX3NlcSwgdy1cXHUwMDNlZmxhZ3MpO1xcbitcXHRcXHRcXHRcXHRcXHQgICAgZHVtcC1cXHUwMDNlY2ItXFx1MDAzZW5saC1cXHUwMDNlbmxtc2dfc2VxLCB3LVxcdTAwM2VmbGFncyxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgIFJUQV9ERUxfUkVBU09OX1VOU1BFQyk7XFxuIFxcdFxcdFxcdGlmIChlcnIpXFxuIFxcdFxcdFxcdFxcdHJldHVybiBlcnI7XFxuIFxcbkBAIC02MTAzLDcgKzYxMjAsOCBAQCBpbnQgcnQ2X2R1bXBfcm91dGUoc3RydWN0IGZpYjZfaW5mbyAqcnQsIHZvaWQgKnBfYXJnLCB1bnNpZ25lZCBpbnQgc2tpcClcXG4gXFx0XFx0XFx0aWYgKHJ0Nl9maWxsX25vZGUobmV0LCBhcmctXFx1MDAzZXNrYiwgcnQsIE5VTEwsIE5VTEwsIE5VTEwsXFxuIFxcdFxcdFxcdFxcdFxcdCAgMCwgUlRNX05FV1JPVVRFLFxcbiBcXHRcXHRcXHRcXHRcXHQgIE5FVExJTktfQ0IoYXJnLVxcdTAwM2VjYi1cXHUwMDNlc2tiKS5wb3J0aWQsXFxuLVxcdFxcdFxcdFxcdFxcdCAgYXJnLVxcdTAwM2VjYi1cXHUwMDNlbmxoLVxcdTAwM2VubG1zZ19zZXEsIGZsYWdzKSkge1xcbitcXHRcXHRcXHRcXHRcXHQgIGFyZy1cXHUwMDNlY2ItXFx1MDAzZW5saC1cXHUwMDNlbmxtc2dfc2VxLCBmbGFncyxcXG4rXFx0XFx0XFx0XFx0XFx0ICBSVEFfREVMX1JFQVNPTl9VTlNQRUMpKSB7XFxuIFxcdFxcdFxcdFxcdHJldHVybiAwO1xcbiBcXHRcXHRcXHR9XFxuIFxcdFxcdFxcdGNvdW50Kys7XFxuQEAgLTYzMzYsMTIgKzYzNTQsMTQgQEAgc3RhdGljIGludCBpbmV0Nl9ydG1fZ2V0cm91dGUoc3RydWN0IHNrX2J1ZmYgKmluX3NrYiwgc3RydWN0IG5sbXNnaGRyICpubGgsXFxuIFxcdFxcdFxcdGVyciA9IHJ0Nl9maWxsX25vZGUobmV0LCBza2IsIGZyb20sIE5VTEwsIE5VTEwsIE5VTEwsXFxuIFxcdFxcdFxcdFxcdFxcdCAgICBpaWYsIFJUTV9ORVdST1VURSxcXG4gXFx0XFx0XFx0XFx0XFx0ICAgIE5FVExJTktfQ0IoaW5fc2tiKS5wb3J0aWQsXFxuLVxcdFxcdFxcdFxcdFxcdCAgICBubGgtXFx1MDAzZW5sbXNnX3NlcSwgMCk7XFxuK1xcdFxcdFxcdFxcdFxcdCAgICBubGgtXFx1MDAzZW5sbXNnX3NlcSwgMCxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgIFJUQV9ERUxfUkVBU09OX1VOU1BFQyk7XFxuIFxcdFxcdGVsc2VcXG4gXFx0XFx0XFx0ZXJyID0gcnQ2X2ZpbGxfbm9kZShuZXQsIHNrYiwgZnJvbSwgZHN0LCBcXHUwMDI2Zmw2LmRhZGRyLFxcbiBcXHRcXHRcXHRcXHRcXHQgICAgXFx1MDAyNmZsNi5zYWRkciwgaWlmLCBSVE1fTkVXUk9VVEUsXFxuIFxcdFxcdFxcdFxcdFxcdCAgICBORVRMSU5LX0NCKGluX3NrYikucG9ydGlkLFxcbi1cXHRcXHRcXHRcXHRcXHQgICAgbmxoLVxcdTAwM2VubG1zZ19zZXEsIDApO1xcbitcXHRcXHRcXHRcXHRcXHQgICAgbmxoLVxcdTAwM2VubG1zZ19zZXEsIDAsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICBSVEFfREVMX1JFQVNPTl9VTlNQRUMpO1xcbiBcXHR9IGVsc2Uge1xcbiBcXHRcXHRlcnIgPSAtRU5FVFVOUkVBQ0g7XFxuIFxcdH1cXG5AQCAtNjM1OCw3ICs2Mzc4LDcgQEAgc3RhdGljIGludCBpbmV0Nl9ydG1fZ2V0cm91dGUoc3RydWN0IHNrX2J1ZmYgKmluX3NrYiwgc3RydWN0IG5sbXNnaGRyICpubGgsXFxuIH1cXG4gXFxuIHZvaWQgaW5ldDZfcnRfbm90aWZ5KGludCBldmVudCwgc3RydWN0IGZpYjZfaW5mbyAqcnQsIHN0cnVjdCBubF9pbmZvICppbmZvLFxcbi1cXHRcXHQgICAgIHVuc2lnbmVkIGludCBubG1fZmxhZ3MpXFxuK1xcdFxcdCAgICAgdW5zaWduZWQgaW50IG5sbV9mbGFncywgdTMyIGRlbF9yZWFzb24pXFxuIHtcXG4gXFx0c3RydWN0IG5ldCAqbmV0ID0gaW5mby1cXHUwMDNlbmxfbmV0O1xcbiBcXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xcbkBAIC02Mzc3LDcgKzYzOTcsOCBAQCB2b2lkIGluZXQ2X3J0X25vdGlmeShpbnQgZXZlbnQsIHN0cnVjdCBmaWI2X2luZm8gKnJ0LCBzdHJ1Y3QgbmxfaW5mbyAqaW5mbyxcXG4gXFx0XFx0Z290byBlcnJvdXQ7XFxuIFxcbiBcXHRlcnIgPSBydDZfZmlsbF9ub2RlKG5ldCwgc2tiLCBydCwgTlVMTCwgTlVMTCwgTlVMTCwgMCxcXG4tXFx0XFx0XFx0ICAgIGV2ZW50LCBpbmZvLVxcdTAwM2Vwb3J0aWQsIHNlcSwgbmxtX2ZsYWdzKTtcXG4rXFx0XFx0XFx0ICAgIGV2ZW50LCBpbmZvLVxcdTAwM2Vwb3J0aWQsIHNlcSwgbmxtX2ZsYWdzLFxcbitcXHRcXHRcXHQgICAgZGVsX3JlYXNvbik7XFxuIFxcdGlmIChlcnIgXFx1MDAzYyAwKSB7XFxuIFxcdFxcdGtmcmVlX3NrYihza2IpO1xcbiBcXHRcXHQvKiAtRU1TR1NJWkUgaW1wbGllcyBuZWVkZWQgc3BhY2UgZ3JldyB1bmRlciB1cy4gKi9cXG5AQCAtNjQxMCw3ICs2NDMxLDggQEAgdm9pZCBmaWI2X3J0X3VwZGF0ZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBmaWI2X2luZm8gKnJ0LFxcbiBcXHRcXHRnb3RvIGVycm91dDtcXG4gXFxuIFxcdGVyciA9IHJ0Nl9maWxsX25vZGUobmV0LCBza2IsIHJ0LCBOVUxMLCBOVUxMLCBOVUxMLCAwLFxcbi1cXHRcXHRcXHQgICAgUlRNX05FV1JPVVRFLCBpbmZvLVxcdTAwM2Vwb3J0aWQsIHNlcSwgTkxNX0ZfUkVQTEFDRSk7XFxuK1xcdFxcdFxcdCAgICBSVE1fTkVXUk9VVEUsIGluZm8tXFx1MDAzZXBvcnRpZCwgc2VxLCBOTE1fRl9SRVBMQUNFLFxcbitcXHRcXHRcXHQgICAgUlRBX0RFTF9SRUFTT05fVU5TUEVDKTtcXG4gXFx0aWYgKGVyciBcXHUwMDNjIDApIHtcXG4gXFx0XFx0LyogLUVNU0dTSVpFIGltcGxpZXMgQlVHIGluIHJ0Nl9ubG1zZ19zaXplKCkgKi9cXG4gXFx0XFx0V0FSTl9PTihlcnIgPT0gLUVNU0dTSVpFKTtcXG5AQCAtNjQ2Myw3ICs2NDg1LDcgQEAgdm9pZCBmaWI2X2luZm9faHdfZmxhZ3Nfc2V0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZpYjZfaW5mbyAqZjZpLFxcbiBcXHR9XFxuIFxcbiBcXHRlcnIgPSBydDZfZmlsbF9ub2RlKG5ldCwgc2tiLCBmNmksIE5VTEwsIE5VTEwsIE5VTEwsIDAsIFJUTV9ORVdST1VURSwgMCxcXG4tXFx0XFx0XFx0ICAgIDAsIDApO1xcbitcXHRcXHRcXHQgICAgMCwgMCwgUlRBX0RFTF9SRUFTT05fVU5TUEVDKTtcXG4gXFx0aWYgKGVyciBcXHUwMDNjIDApIHtcXG4gXFx0XFx0LyogLUVNU0dTSVpFIGltcGxpZXMgQlVHIGluIHJ0Nl9ubG1zZ19zaXplKCkgKi9cXG4gXFx0XFx0V0FSTl9PTihlcnIgPT0gLUVNU0dTSVpFKTtcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2xpYi9weS9fX2luaXRfXy5weSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9saWIvcHkvX19pbml0X18ucHlcXG5pbmRleCBlNThiZGJkYzU4ZWVhZC4uMzQ5MzU4ODZiNmFkZmUgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2xpYi9weS9fX2luaXRfXy5weVxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9saWIvcHkvX19pbml0X18ucHlcXG5AQCAtMTcsNyArMTcsNyBAQCBmcm9tIC51dGlscyBpbXBvcnQgQ21kRXhpdEZhaWx1cmUsIGZkX3JlYWRfdGltZW91dCwgY21kLCBia2csIGRlZmVyLCBcXFxcXFxuICAgICB3YWl0X2ZpbGUsIHRvb2wsIHRjXFxuIGZyb20gLmJwZiBpbXBvcnQgYnBmX21hcF9zZXQsIGJwZl9tYXBfZHVtcCwgYnBmX3Byb2dfbWFwX2lkc1xcbiBmcm9tIC55bmwgaW1wb3J0IE5sRXJyb3IsIE5sY3RybEZhbWlseSwgWW5sRmFtaWx5LCBcXFxcXFxuLSAgICBFdGh0b29sRmFtaWx5LCBOZXRkZXZGYW1pbHksIFJ0bmxGYW1pbHksIFJ0bmxBZGRyRmFtaWx5XFxuKyAgICBFdGh0b29sRmFtaWx5LCBOZXRkZXZGYW1pbHksIFJ0bmxGYW1pbHksIFJ0bmxBZGRyRmFtaWx5LCBSdG5sUm91dGVGYW1pbHlcXG4gZnJvbSAueW5sIGltcG9ydCBOZXRzaGFwZXJGYW1pbHksIERldmxpbmtGYW1pbHksIFBTUEZhbWlseSwgTmV0bGlua1xcbiBcXG4gX19hbGxfXyA9IFtcXFwiS1NSQ1xcXCIsXFxuQEAgLTM0LDQgKzM0LDQgQEAgX19hbGxfXyA9IFtcXFwiS1NSQ1xcXCIsXFxuICAgICAgICAgICAgXFxcIk5ldGRldlNpbVxcXCIsIFxcXCJOZXRkZXZTaW1EZXZcXFwiLFxcbiAgICAgICAgICAgIFxcXCJOZXRzaGFwZXJGYW1pbHlcXFwiLCBcXFwiRGV2bGlua0ZhbWlseVxcXCIsIFxcXCJQU1BGYW1pbHlcXFwiLCBcXFwiTmxFcnJvclxcXCIsXFxuICAgICAgICAgICAgXFxcIllubEZhbWlseVxcXCIsIFxcXCJFdGh0b29sRmFtaWx5XFxcIiwgXFxcIk5ldGRldkZhbWlseVxcXCIsIFxcXCJSdG5sRmFtaWx5XFxcIixcXG4tICAgICAgICAgICBcXFwiTmxjdHJsRmFtaWx5XFxcIiwgXFxcIlJ0bmxBZGRyRmFtaWx5XFxcIiwgXFxcIk5ldGxpbmtcXFwiXVxcbisgICAgICAgICAgIFxcXCJObGN0cmxGYW1pbHlcXFwiLCBcXFwiUnRubEFkZHJGYW1pbHlcXFwiLCBcXFwiUnRubFJvdXRlRmFtaWx5XFxcIiwgXFxcIk5ldGxpbmtcXFwiXVxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbGliL3B5L3lubC5weSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9saWIvcHkveW5sLnB5XFxuaW5kZXggMmU1NjcwNjJhYTZjY2UuLjA4ZGVmZjc1NmYyOWIwIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9saWIvcHkveW5sLnB5XFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2xpYi9weS95bmwucHlcXG5AQCAtMjksNyArMjksNyBAQCBleGNlcHQgTW9kdWxlTm90Rm91bmRFcnJvciBhcyBlOlxcbiBcXG4gX19hbGxfXyA9IFtcXG4gICAgIFxcXCJObEVycm9yXFxcIiwgXFxcIk5sUG9saWN5XFxcIiwgXFxcIk5ldGxpbmtcXFwiLCBcXFwiWW5sRmFtaWx5XFxcIiwgXFxcIlNQRUNfUEFUSFxcXCIsXFxuLSAgICBcXFwiRXRodG9vbEZhbWlseVxcXCIsIFxcXCJSdG5sRmFtaWx5XFxcIiwgXFxcIlJ0bmxBZGRyRmFtaWx5XFxcIixcXG4rICAgIFxcXCJFdGh0b29sRmFtaWx5XFxcIiwgXFxcIlJ0bmxGYW1pbHlcXFwiLCBcXFwiUnRubEFkZHJGYW1pbHlcXFwiLCBcXFwiUnRubFJvdXRlRmFtaWx5XFxcIixcXG4gICAgIFxcXCJOZXRkZXZGYW1pbHlcXFwiLCBcXFwiTmV0c2hhcGVyRmFtaWx5XFxcIiwgXFxcIk5sY3RybEZhbWlseVxcXCIsIFxcXCJEZXZsaW5rRmFtaWx5XFxcIixcXG4gICAgIFxcXCJQU1BGYW1pbHlcXFwiLFxcbiBdXFxuQEAgLTU0LDYgKzU0LDExIEBAIGNsYXNzIFJ0bmxBZGRyRmFtaWx5KFlubEZhbWlseSk6XFxuICAgICAgICAgc3VwZXIoKS5fX2luaXRfXygoU1BFQ19QQVRIIC8gUGF0aCgncnQtYWRkci55YW1sJykpLmFzX3Bvc2l4KCksXFxuICAgICAgICAgICAgICAgICAgICAgICAgICBzY2hlbWE9JycsIHJlY3Zfc2l6ZT1yZWN2X3NpemUpXFxuIFxcbitjbGFzcyBSdG5sUm91dGVGYW1pbHkoWW5sRmFtaWx5KTpcXG4rICAgIGRlZiBfX2luaXRfXyhzZWxmLCByZWN2X3NpemU9MCk6XFxuKyAgICAgICAgc3VwZXIoKS5fX2luaXRfXygoU1BFQ19QQVRIIC8gUGF0aCgncnQtcm91dGUueWFtbCcpKS5hc19wb3NpeCgpLFxcbisgICAgICAgICAgICAgICAgICAgICAgICAgc2NoZW1hPScnLCByZWN2X3NpemU9cmVjdl9zaXplKVxcbitcXG4gY2xhc3MgTmV0ZGV2RmFtaWx5KFlubEZhbWlseSk6XFxuICAgICBkZWYgX19pbml0X18oc2VsZiwgcmVjdl9zaXplPTApOlxcbiAgICAgICAgIHN1cGVyKCkuX19pbml0X18oKFNQRUNfUEFUSCAvIFBhdGgoJ25ldGRldi55YW1sJykpLmFzX3Bvc2l4KCksXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9ydG5ldGxpbmsucHkgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvcnRuZXRsaW5rLnB5XFxuaW5kZXggMGM2N2M3YzAwZDg0MWMuLmY3NGNjZDVjMmQxM2FhIDEwMDc1NVxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9ydG5ldGxpbmsucHlcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvcnRuZXRsaW5rLnB5XFxuQEAgLTUsNyArNSw4IEBAIGltcG9ydCBzb2NrZXRcXG4gaW1wb3J0IHN0cnVjdFxcbiBpbXBvcnQgdGltZVxcbiBmcm9tIGxpYi5weSBpbXBvcnQgYmtnLCBpcCwga3NmdF9leGl0LCBrc2Z0X3J1biwga3NmdF9lcSwga3NmdF9nZSwga3NmdF90cnVlLCBLc2Z0U2tpcEV4XFxuLWZyb20gbGliLnB5IGltcG9ydCBDbWRFeGl0RmFpbHVyZSwgTmV0TlMsIE5ldE5TRW50ZXIsIFJ0bmxBZGRyRmFtaWx5XFxuK2Zyb20gbGliLnB5IGltcG9ydCBrc2Z0X25vdF9pbiwga3NmdF9ub3Rfbm9uZVxcbitmcm9tIGxpYi5weSBpbXBvcnQgQ21kRXhpdEZhaWx1cmUsIE5ldE5TLCBOZXROU0VudGVyLCBSdG5sQWRkckZhbWlseSwgUnRubFJvdXRlRmFtaWx5XFxuIFxcbiBJUFY0X0FMTF9IT1NUU19NVUxUSUNBU1QgPSBiJ1xcXFx4ZTBcXFxceDAwXFxcXHgwMFxcXFx4MDEnXFxuIElQVjRfVEVTVF9NVUxUSUNBU1QgPSBiJ1xcXFx4ZWZcXFxceDAxXFxcXHgwMVxcXFx4MDEnXFxuQEAgLTEzNCw4ICsxMzUsMTg0IEBAIGRlZiBpcHY0X2RldmNvbmZfbm90aWZ5KCkgLVxcdTAwM2UgTm9uZTpcXG4gICAgIGtzZnRfdHJ1ZShmXFxcImluZXQge2lmbmFtZX0gZm9yd2FyZGluZyBvblxcXCIgaW4gY21kX29iai5zdGRvdXQsXFxuICAgICAgICAgICAgICAgZlxcXCJObyAnZm9yd2FyZGluZyBvbicgbm90aWZpY2lhdGlvbiBmb3VuZCBmb3IgaW50ZXJmYWNlIHtpZm5hbWV9XFxcIilcXG4gXFxuK2RlZiBfcnRubF9yb3V0ZV9zdWJzY3JpYmUobnMpOlxcbisgICAgd2l0aCBOZXROU0VudGVyKHN0cihucykpOlxcbisgICAgICAgIHJ0bmwgPSBSdG5sUm91dGVGYW1pbHkoKVxcbisgICAgcnRubC5udGZfc3Vic2NyaWJlKFxcXCJydG5sZ3JwLWlwdjYtcm91dGVcXFwiKVxcbisgICAgcmV0dXJuIHJ0bmxcXG4rXFxuK1xcbitkZWYgX3dhaXRfcm91dGVfbnRmKHJ0bmwsIG5hbWUsIGRzdF9sZW4sIGRzdD1Ob25lLCBkZWFkbGluZT0xMCk6XFxuKyAgICBcXFwiXFxcIlxcXCJSZXR1cm4gdGhlIGF0dHJzIG9mIHRoZSBmaXJzdCBtYXRjaGluZyBub3RpZmljYXRpb24sIE5vbmUgb24gdGltZW91dC5cXFwiXFxcIlxcXCJcXG4rXFxuKyAgICBmb3IgbXNnIGluIHJ0bmwucG9sbF9udGYoZHVyYXRpb249ZGVhZGxpbmUpOlxcbisgICAgICAgIGlmIG1zZ1snbmFtZSddICE9IG5hbWU6XFxuKyAgICAgICAgICAgIGNvbnRpbnVlXFxuKyAgICAgICAgYXR0cnMgPSBtc2dbJ21zZyddXFxuKyAgICAgICAgaWYgYXR0cnNbJ3J0bS1kc3QtbGVuJ10gIT0gZHN0X2xlbjpcXG4rICAgICAgICAgICAgY29udGludWVcXG4rICAgICAgICBpZiBkc3QgaXMgbm90IE5vbmUgYW5kIGF0dHJzLmdldCgnZHN0JykgIT0gZHN0OlxcbisgICAgICAgICAgICBjb250aW51ZVxcbisgICAgICAgIHJldHVybiBhdHRyc1xcbisgICAgcmV0dXJuIE5vbmVcXG4rXFxuK1xcbitkZWYgX2NvbGxlY3Rfcm91dGVfbnRmcyhydG5sLCBuYW1lLCB3YW50LCBkZWFkbGluZT0xMCk6XFxuKyAgICBcXFwiXFxcIlxcXCJHYXRoZXIgYXR0cnMgb2YgbWF0Y2hpbmcgbm90aWZpY2F0aW9ucywga2V5ZWQgYnkgKGRzdF9sZW4sIGRzdCkuXFxcIlxcXCJcXFwiXFxuK1xcbisgICAgc2VlbiA9IHt9XFxuKyAgICBmb3IgbXNnIGluIHJ0bmwucG9sbF9udGYoZHVyYXRpb249ZGVhZGxpbmUpOlxcbisgICAgICAgIGlmIG1zZ1snbmFtZSddICE9IG5hbWU6XFxuKyAgICAgICAgICAgIGNvbnRpbnVlXFxuKyAgICAgICAgYXR0cnMgPSBtc2dbJ21zZyddXFxuKyAgICAgICAga2V5ID0gKGF0dHJzWydydG0tZHN0LWxlbiddLCBhdHRycy5nZXQoJ2RzdCcpKVxcbisgICAgICAgIGlmIGtleSBpbiB3YW50OlxcbisgICAgICAgICAgICBzZWVuW2tleV0gPSBhdHRyc1xcbisgICAgICAgICAgICBpZiBsZW4oc2VlbikgPT0gbGVuKHdhbnQpOlxcbisgICAgICAgICAgICAgICAgYnJlYWtcXG4rICAgIHJldHVybiBzZWVuXFxuK1xcbitcXG4rZGVmIF93cml0ZV9pcHY2X3N5c2N0bChuYW1lLCB2YWx1ZSk6XFxuKyAgICB3aXRoIG9wZW4oZlxcXCIvcHJvYy9zeXMvbmV0L2lwdjYve25hbWV9XFxcIiwgXFxcIndcXFwiKSBhcyBmOlxcbisgICAgICAgIGYud3JpdGUoZlxcXCJ7dmFsdWV9XFxcXG5cXFwiKVxcbitcXG4rXFxuK2RlZiBpcHY2X3JvdXRlX2RlbF9yZWFzb25fZXhwaXJlZCgpIC1cXHUwMDNlIE5vbmU6XFxuKyAgICBcXFwiXFxcIlxcXCJBbiBleHBpcmVkIHJvdXRlIHJlcG9ydHMgUlRBX0RFTF9SRUFTT04gPT0gZXhwaXJlZC5cXFwiXFxcIlxcXCJcXG4rXFxuKyAgICB3aXRoIE5ldE5TKCkgYXMgbnM6XFxuKyAgICAgICAgcnRubCA9IF9ydG5sX3JvdXRlX3N1YnNjcmliZShucylcXG4rICAgICAgICB3aXRoIE5ldE5TRW50ZXIoc3RyKG5zKSk6XFxuKyAgICAgICAgICAgIF93cml0ZV9pcHY2X3N5c2N0bChcXFwicm91dGUvZ2NfaW50ZXJ2YWxcXFwiLCAyKVxcbisgICAgICAgIGlwKFxcXCJsaW5rIGFkZCBuYW1lIGR1bW15MSB0eXBlIGR1bW15XFxcIiwgbnM9c3RyKG5zKSlcXG4rICAgICAgICBpcChcXFwibGluayBzZXQgZGV2IGR1bW15MSB1cFxcXCIsIG5zPXN0cihucykpXFxuKyAgICAgICAgaXAoXFxcIi02IHJvdXRlIGFkZCAyMDAxOmRiODoyOjovNjQgZGV2IGR1bW15MSBleHBpcmVzIDJcXFwiLCBucz1zdHIobnMpKVxcbitcXG4rICAgICAgICBhdHRycyA9IF93YWl0X3JvdXRlX250ZihydG5sLCAnZGVscm91dGUtbnRmJywgNjQsICcyMDAxOmRiODoyOjonLFxcbisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlYWRsaW5lPTE1KVxcbisgICAgICAgIGtzZnRfbm90X25vbmUoYXR0cnMsIFxcXCJubyBSVE1fREVMUk9VVEUgZm9yIHRoZSBleHBpcmVkIHJvdXRlXFxcIilcXG4rICAgICAgICBpZiBhdHRycyBpcyBub3QgTm9uZTpcXG4rICAgICAgICAgICAga3NmdF9lcShhdHRycy5nZXQoJ2RlbC1yZWFzb24nKSwgJ2V4cGlyZWQnKVxcbitcXG4rXFxuK2RlZiBfc2VuZF9yYShzb2NrLCBpZmluZGV4LCBsaWZldGltZSwgcmlvPU5vbmUsIHBpbz1Ob25lKTpcXG4rICAgIFxcXCJcXFwiXFxcIlRoZSBrZXJuZWwgZmlsbHMgaW4gdGhlIElDTVB2NiBjaGVja3N1bSBvbiByYXcgSUNNUHY2IHNvY2tldHMuXFxcIlxcXCJcXFwiXFxuK1xcbisgICAgIyB0eXBlLCBjb2RlLCBja3N1bSwgaG9wIGxpbWl0LCBmbGFncywgcm91dGVyIGxpZmV0aW1lLFxcbisgICAgIyByZWFjaGFibGUgdGltZSwgcmV0cmFucyB0aW1lclxcbisgICAgcmEgPSBzdHJ1Y3QucGFjaygnIUJCSEJCSElJJywgMTM0LCAwLCAwLCA2NCwgMCwgbGlmZXRpbWUsIDAsIDApXFxuKyAgICBpZiByaW8gaXMgbm90IE5vbmU6XFxuKyAgICAgICAgcHJlZml4LCBwbGVuLCByaW9fbGlmZXRpbWUgPSByaW9cXG4rICAgICAgICAjIFJGQyA0MTkxIHJvdXRlIGluZm9ybWF0aW9uIG9wdGlvbiwgLzY0IHByZWZpeCAoOCBieXRlcylcXG4rICAgICAgICByYSArPSBzdHJ1Y3QucGFjaygnIUJCQkJJJywgMjQsIDIsIHBsZW4sIDAsIHJpb19saWZldGltZSlcXG4rICAgICAgICByYSArPSBzb2NrZXQuaW5ldF9wdG9uKHNvY2tldC5BRl9JTkVUNiwgcHJlZml4KVs6OF1cXG4rICAgIGlmIHBpbyBpcyBub3QgTm9uZTpcXG4rICAgICAgICBwcmVmaXgsIHBsZW4sIHZhbGlkX2xmdCA9IHBpb1xcbisgICAgICAgICMgUkZDIDQ4NjEgcHJlZml4IGluZm9ybWF0aW9uIG9wdGlvbiwgb24tbGluayBvbmx5IChMIHNldCwgQSBjbGVhcilcXG4rICAgICAgICByYSArPSBzdHJ1Y3QucGFjaygnIUJCQkJJSUknLCAzLCA0LCBwbGVuLCAweDgwLCB2YWxpZF9sZnQsIDAsIDApXFxuKyAgICAgICAgcmEgKz0gc29ja2V0LmluZXRfcHRvbihzb2NrZXQuQUZfSU5FVDYsIHByZWZpeClcXG4rICAgIHNvY2suc2VuZHRvKHJhLCAoJ2ZmMDI6OjEnLCAwLCAwLCBpZmluZGV4KSlcXG4rXFxuK1xcbitkZWYgX3JhX3JvdXRlcl9zb2NrKG5zX3IsIGlmbmFtZSk6XFxuKyAgICB3aXRoIE5ldE5TRW50ZXIoc3RyKG5zX3IpKTpcXG4rICAgICAgICBzb2NrID0gc29ja2V0LnNvY2tldChzb2NrZXQuQUZfSU5FVDYsIHNvY2tldC5TT0NLX1JBVyxcXG4rICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb2NrZXQuSVBQUk9UT19JQ01QVjYpXFxuKyAgICAgICAgc29jay5zZXRzb2Nrb3B0KHNvY2tldC5JUFBST1RPX0lQVjYsIHNvY2tldC5JUFY2X01VTFRJQ0FTVF9IT1BTLCAyNTUpXFxuKyAgICAgICAgcmV0dXJuIHNvY2ssIHNvY2tldC5pZl9uYW1ldG9pbmRleChpZm5hbWUpXFxuK1xcbitcXG4rZGVmIF9yYV9hZHZlcnRpc2Vfcm91dGVzKHJ0bmwsIHNvY2ssIGlmaW5kZXgsIHdhbnQsICoqcmFfb3B0cyk6XFxuKyAgICBcXFwiXFxcIlxcXCJcXG4rICAgIFNlbmRpbmcgZmFpbHMgd2l0aCBFQUREUk5PVEFWQUlMIHVudGlsIHRoZSByb3V0ZXIncyBsaW5rLWxvY2FsXFxuKyAgICBhZGRyZXNzIHBhc3NlcyBEQUQsIHNvIHJldHJ5LlxcbisgICAgXFxcIlxcXCJcXFwiXFxuK1xcbisgICAgc2VlbiA9IHt9XFxuKyAgICBmb3IgXyBpbiByYW5nZSgxMCk6XFxuKyAgICAgICAgdHJ5OlxcbisgICAgICAgICAgICBfc2VuZF9yYShzb2NrLCBpZmluZGV4LCAqKnJhX29wdHMpXFxuKyAgICAgICAgZXhjZXB0IE9TRXJyb3I6XFxuKyAgICAgICAgICAgIHRpbWUuc2xlZXAoMC4yKVxcbisgICAgICAgICAgICBjb250aW51ZVxcbisgICAgICAgIHNlZW4udXBkYXRlKF9jb2xsZWN0X3JvdXRlX250ZnMocnRubCwgJ25ld3JvdXRlLW50ZicsXFxuKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3YW50IC0gc2V0KHNlZW4ua2V5cygpKSwgZGVhZGxpbmU9MikpXFxuKyAgICAgICAgaWYgbGVuKHNlZW4pID09IGxlbih3YW50KTpcXG4rICAgICAgICAgICAgYnJlYWtcXG4rICAgIHJldHVybiBzZWVuXFxuK1xcbitcXG4rZGVmIGlwdjZfcm91dGVfZGVsX3JlYXNvbl9yYV93aXRoZHJhd24oKSAtXFx1MDAzZSBOb25lOlxcbisgICAgXFxcIlxcXCJcXFwiXFxuKyAgICBSb3V0ZXMgd2l0aGRyYXduIGJ5IGEgemVyby1saWZldGltZSBSQSAocm91dGVyIGxpZmV0aW1lLCBSRkMgNDg2MVxcbisgICAgUElPLCBSRkMgNDE5MSBSSU8pIHJlcG9ydCBSVEFfREVMX1JFQVNPTiA9PSByYS13aXRoZHJhd24uXFxuKyAgICBcXFwiXFxcIlxcXCJcXG4rXFxuKyAgICAjIChydG0tZHN0LWxlbiwgZHN0KTsgdGhlIGRlZmF1bHQgcm91dGUgY2FycmllcyBubyBSVEFfRFNUXFxuKyAgICByb3V0ZXMgPSB7KDAsIE5vbmUpLCAoNjQsICcyMDAxOmRiODo2OjonKSwgKDY0LCAnMjAwMTpkYjg6NTo6Jyl9XFxuK1xcbisgICAgd2l0aCBOZXROUygpIGFzIG5zX2gsIE5ldE5TKCkgYXMgbnNfcjpcXG4rICAgICAgICBpcChmXFxcImxpbmsgYWRkIHZldGgwIG5ldG5zIHtuc19ofSB0eXBlIHZldGggcGVlciBuYW1lIHZldGgxIG5ldG5zIHtuc19yfVxcXCIpXFxuKyAgICAgICAgd2l0aCBOZXROU0VudGVyKHN0cihuc19oKSk6XFxuKyAgICAgICAgICAgIF93cml0ZV9pcHY2X3N5c2N0bChcXFwiY29uZi92ZXRoMC9hY2NlcHRfcmFcXFwiLCAyKVxcbisgICAgICAgICAgICBfd3JpdGVfaXB2Nl9zeXNjdGwoXFxcImNvbmYvdmV0aDAvZm9yd2FyZGluZ1xcXCIsIDApXFxuKyAgICAgICAgICAgIHRyeTpcXG4rICAgICAgICAgICAgICAgIF93cml0ZV9pcHY2X3N5c2N0bChcXFwiY29uZi92ZXRoMC9hY2NlcHRfcmFfcnRfaW5mb19tYXhfcGxlblxcXCIsIDY0KVxcbisgICAgICAgICAgICBleGNlcHQgRmlsZU5vdEZvdW5kRXJyb3I6XFxuKyAgICAgICAgICAgICAgICByYWlzZSBLc2Z0U2tpcEV4KFxcXCJubyBDT05GSUdfSVBWNl9ST1VURV9JTkZPXFxcIilcXG4rICAgICAgICB3aXRoIE5ldE5TRW50ZXIoc3RyKG5zX3IpKTpcXG4rICAgICAgICAgICAgIyBza2lwIERBRCBzbyB0aGUgcm91dGVyJ3MgbGluay1sb2NhbCBzb3VyY2UgaXMgdXNhYmxlIHJpZ2h0IGF3YXlcXG4rICAgICAgICAgICAgX3dyaXRlX2lwdjZfc3lzY3RsKFxcXCJjb25mL3ZldGgxL2FjY2VwdF9kYWRcXFwiLCAwKVxcbisgICAgICAgIGlwKFxcXCJsaW5rIHNldCBkZXYgdmV0aDAgdXBcXFwiLCBucz1zdHIobnNfaCkpXFxuKyAgICAgICAgaXAoXFxcImxpbmsgc2V0IGRldiB2ZXRoMSB1cFxcXCIsIG5zPXN0cihuc19yKSlcXG4rXFxuKyAgICAgICAgcnRubCA9IF9ydG5sX3JvdXRlX3N1YnNjcmliZShuc19oKVxcbisgICAgICAgIHNvY2ssIGlmaW5kZXggPSBfcmFfcm91dGVyX3NvY2sobnNfciwgXFxcInZldGgxXFxcIilcXG4rXFxuKyAgICAgICAgc2VlbiA9IF9yYV9hZHZlcnRpc2Vfcm91dGVzKHJ0bmwsIHNvY2ssIGlmaW5kZXgsIHJvdXRlcyxcXG4rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlmZXRpbWU9MTgwMCxcXG4rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmlvPSgnMjAwMTpkYjg6NTo6JywgNjQsIDYwMCksXFxuKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBpbz0oJzIwMDE6ZGI4OjY6OicsIDY0LCA2MDApKVxcbisgICAgICAgIGtzZnRfZXEoc2V0KHNlZW4pLCByb3V0ZXMsIFxcXCJub3QgYWxsIFJBIHJvdXRlcyB3ZXJlIGluc3RhbGxlZFxcXCIpXFxuKyAgICAgICAgaWYgc2V0KHNlZW4pICE9IHJvdXRlczpcXG4rICAgICAgICAgICAgcmV0dXJuXFxuK1xcbisgICAgICAgIF9zZW5kX3JhKHNvY2ssIGlmaW5kZXgsIDAsIHJpbz0oJzIwMDE6ZGI4OjU6OicsIDY0LCAwKSxcXG4rICAgICAgICAgICAgICAgICBwaW89KCcyMDAxOmRiODo2OjonLCA2NCwgMCkpXFxuKyAgICAgICAgc2VlbiA9IF9jb2xsZWN0X3JvdXRlX250ZnMocnRubCwgJ2RlbHJvdXRlLW50ZicsIHJvdXRlcylcXG4rICAgICAgICBmb3Iga2V5IGluIHJvdXRlczpcXG4rICAgICAgICAgICAgYXR0cnMgPSBzZWVuLmdldChrZXkpXFxuKyAgICAgICAgICAgIGtzZnRfbm90X25vbmUoYXR0cnMsIGZcXFwibm8gUlRNX0RFTFJPVVRFIGZvciB7a2V5fVxcXCIpXFxuKyAgICAgICAgICAgIGlmIGF0dHJzIGlzIG5vdCBOb25lOlxcbisgICAgICAgICAgICAgICAga3NmdF9lcShhdHRycy5nZXQoJ2RlbC1yZWFzb24nKSwgJ3JhLXdpdGhkcmF3bicpXFxuK1xcbitcXG4rZGVmIGlwdjZfcm91dGVfZGVsX3JlYXNvbl9hYnNlbnQoKSAtXFx1MDAzZSBOb25lOlxcbisgICAgXFxcIlxcXCJcXFwiXFxuKyAgICBBIGRlbGV0aW9uIHBhdGggdGhhdCByZWNvcmRzIG5vIGNhdXNlIChoZXJlIGEgdXNlcnNwYWNlIHJlcXVlc3QpXFxuKyAgICBtdXN0IG5vdCBjYXJyeSBSVEFfREVMX1JFQVNPTiBhdCBhbGwuXFxuKyAgICBcXFwiXFxcIlxcXCJcXG4rXFxuKyAgICB3aXRoIE5ldE5TKCkgYXMgbnM6XFxuKyAgICAgICAgcnRubCA9IF9ydG5sX3JvdXRlX3N1YnNjcmliZShucylcXG4rICAgICAgICBpcChcXFwibGluayBhZGQgbmFtZSBkdW1teTEgdHlwZSBkdW1teVxcXCIsIG5zPXN0cihucykpXFxuKyAgICAgICAgaXAoXFxcImxpbmsgc2V0IGRldiBkdW1teTEgdXBcXFwiLCBucz1zdHIobnMpKVxcbisgICAgICAgIGlwKFxcXCItNiByb3V0ZSBhZGQgMjAwMTpkYjg6MTo6LzY0IGRldiBkdW1teTFcXFwiLCBucz1zdHIobnMpKVxcbisgICAgICAgIGlwKFxcXCItNiByb3V0ZSBkZWwgMjAwMTpkYjg6MTo6LzY0IGRldiBkdW1teTFcXFwiLCBucz1zdHIobnMpKVxcbitcXG4rICAgICAgICBhdHRycyA9IF93YWl0X3JvdXRlX250ZihydG5sLCAnZGVscm91dGUtbnRmJywgNjQsICcyMDAxOmRiODoxOjonKVxcbisgICAgICAgIGtzZnRfbm90X25vbmUoYXR0cnMsIFxcXCJubyBSVE1fREVMUk9VVEUgZm9yIDIwMDE6ZGI4OjE6Oi82NFxcXCIpXFxuKyAgICAgICAgaWYgYXR0cnMgaXMgbm90IE5vbmU6XFxuKyAgICAgICAgICAgIGtzZnRfbm90X2luKCdkZWwtcmVhc29uJywgYXR0cnMsXFxuKyAgICAgICAgICAgICAgICAgICAgICAgIFxcXCJ1c2VyIGRlbGV0aW9uIG11c3Qgbm90IGNhcnJ5IGRlbC1yZWFzb25cXFwiKVxcbitcXG4rXFxuIGRlZiBtYWluKCkgLVxcdTAwM2UgTm9uZTpcXG4tICAgIGtzZnRfcnVuKFtkdW1wX21jYWRkcl9jaGVjaywgZHVtcF9tY2FkZHI2X2NoZWNrLCBpcHY0X2RldmNvbmZfbm90aWZ5XSlcXG4rICAgIGtzZnRfcnVuKFtkdW1wX21jYWRkcl9jaGVjaywgZHVtcF9tY2FkZHI2X2NoZWNrLCBpcHY0X2RldmNvbmZfbm90aWZ5LFxcbisgICAgICAgICAgICAgIGlwdjZfcm91dGVfZGVsX3JlYXNvbl9leHBpcmVkLFxcbisgICAgICAgICAgICAgIGlwdjZfcm91dGVfZGVsX3JlYXNvbl9yYV93aXRoZHJhd24sXFxuKyAgICAgICAgICAgICAgaXB2Nl9yb3V0ZV9kZWxfcmVhc29uX2Fic2VudF0pXFxuICAgICBrc2Z0X2V4aXQoKVxcbiBcXG4gaWYgX19uYW1lX18gPT0gXFxcIl9fbWFpbl9fXFxcIjpcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMjI6MzY6MDAuOTA2NDUwNzFaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoxMDg1MjU5Nzc2MzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSVBWNlwiLFxuICAgIFwiSVBWNl9ST1VURVJfUFJFRlwiLFxuICAgIFwiSVBWNl9ST1VURV9JTkZPXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaXA2X2RlbF9ydF9yZWFzb25cIixcbiAgICBcImZpYjZfZGVsXCIsXG4gICAgXCJpbmV0Nl9ydF9ub3RpZnlcIixcbiAgICBcInJ0Nl9yb3V0ZV9yY3ZcIixcbiAgICBcImFkZHJjb25mX3ByZWZpeF9yY3ZcIixcbiAgICBcIm5kaXNjX3JjdlwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYSBuZXcgbmV0bGluayBhdHRyaWJ1dGUgYFJUQV9ERUxfUkVBU09OYCB0byBJUHY2IHJvdXRlIGRlbGV0aW9uIG5vdGlmaWNhdGlvbnMgKGBSVE1fREVMUk9VVEVgKS4gSXQgbW9kaWZpZXMgY29yZSBJUHY2IHJvdXRpbmcgYW5kIG5laWdoYm9yIGRpc2NvdmVyeSBmdW5jdGlvbnMgdG8gcG9wdWxhdGUgdGhpcyBhdHRyaWJ1dGUgd2hlbiByb3V0ZXMgYXJlIGRlbGV0ZWQgZHVlIHRvIGV4cGlyYXRpb24gb3IgUm91dGVyIEFkdmVydGlzZW1lbnQgKFJBKSB3aXRoZHJhd2FsLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYyB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDRjMmJlZjVlZmEyOGFhNmFmYWI2MzEyNTE1MDFmOGExNjg4YTEzMTVcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU2F0IEp1bCAyNSAyMjozNTo1OCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0bGluay9zcGVjcy9ydC1yb3V0ZS55YW1sIGIvRG9jdW1lbnRhdGlvbi9uZXRsaW5rL3NwZWNzL3J0LXJvdXRlLnlhbWxcbmluZGV4IDMzMTk1ZGI5Njc0NmM2Li4yMzRmNTAyZmIzNWQ5YyAxMDA2NDRcbi0tLSBhL0RvY3VtZW50YXRpb24vbmV0bGluay9zcGVjcy9ydC1yb3V0ZS55YW1sXG4rKysgYi9Eb2N1bWVudGF0aW9uL25ldGxpbmsvc3BlY3MvcnQtcm91dGUueWFtbFxuQEAgLTc4LDYgKzc4LDE1IEBAIGRlZmluaXRpb25zOlxuICAgICAgIC1cbiAgICAgICAgIG5hbWU6IHJ0YS11c2VkXG4gICAgICAgICB0eXBlOiB1MzJcbisgIC1cbisgICAgbmFtZTogZGVsLXJlYXNvblxuKyAgICB0eXBlOiBlbnVtXG4rICAgIG5hbWUtcHJlZml4OiBydGEtZGVsLXJlYXNvbi1cbisgICAgZW51bS1uYW1lOiBydGEtZGVsLXJlYXNvblxuKyAgICBlbnRyaWVzOlxuKyAgICAgIC0gdW5zcGVjXG4rICAgICAgLSBleHBpcmVkXG4rICAgICAgLSByYS13aXRoZHJhd25cbiBcbiBhdHRyaWJ1dGUtc2V0czpcbiAgIC1cbkBAIC0xODUsNiArMTk0LDEwIEBAIGF0dHJpYnV0ZS1zZXRzOlxuICAgICAgICAgdHlwZTogdTMyXG4gICAgICAgICBieXRlLW9yZGVyOiBiaWctZW5kaWFuXG4gICAgICAgICBkaXNwbGF5LWhpbnQ6IGhleFxuKyAgICAgIC1cbisgICAgICAgIG5hbWU6IGRlbC1yZWFzb25cbisgICAgICAgIHR5cGU6IHUzMlxuKyAgICAgICAgZW51bTogZGVsLXJlYXNvblxuICAgLVxuICAgICBuYW1lOiBtZXRyaWNzXG4gICAgIG5hbWUtcHJlZml4OiBydGF4LVxuQEAgLTI5OSw2ICszMTIsNyBAQCBvcGVyYXRpb25zOlxuICAgICAgICAgICAgIC0gZHBvcnRcbiAgICAgICAgICAgICAtIG5oLWlkXG4gICAgICAgICAgICAgLSBmbG93bGFiZWxcbisgICAgICAgICAgICAtIGRlbC1yZWFzb25cbiAgICAgICBkdW1wOlxuICAgICAgICAgcmVxdWVzdDpcbiAgICAgICAgICAgdmFsdWU6IDI2XG5AQCAtMzIyLDMgKzMzNiwyMiBAQCBvcGVyYXRpb25zOlxuICAgICAgICAgcmVxdWVzdDpcbiAgICAgICAgICAgdmFsdWU6IDI1XG4gICAgICAgICAgIGF0dHJpYnV0ZXM6ICphbGwtcm91dGUtYXR0cnNcbisgICAgLVxuKyAgICAgIG5hbWU6IG5ld3JvdXRlLW50ZlxuKyAgICAgIGRvYzogTm90aWZpY2F0aW9uIGFib3V0IGEgY3JlYXRlZCByb3V0ZS5cbisgICAgICB2YWx1ZTogMjRcbisgICAgICBub3RpZnk6IGdldHJvdXRlXG4rICAgIC1cbisgICAgICBuYW1lOiBkZWxyb3V0ZS1udGZcbisgICAgICBkb2M6IE5vdGlmaWNhdGlvbiBhYm91dCBhIGRlbGV0ZWQgcm91dGUuXG4rICAgICAgdmFsdWU6IDI1XG4rICAgICAgbm90aWZ5OiBnZXRyb3V0ZVxuK1xuK21jYXN0LWdyb3VwczpcbisgIGxpc3Q6XG4rICAgIC1cbisgICAgICBuYW1lOiBydG5sZ3JwLWlwdjQtcm91dGVcbisgICAgICB2YWx1ZTogN1xuKyAgICAtXG4rICAgICAgbmFtZTogcnRubGdycC1pcHY2LXJvdXRlXG4rICAgICAgdmFsdWU6IDExXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvaXA2X2ZpYi5oIGIvaW5jbHVkZS9uZXQvaXA2X2ZpYi5oXG5pbmRleCA5Y2QyN2UxYjliNjkyMy4uN2NhMGUyMTI0ZTc5NjMgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL25ldC9pcDZfZmliLmhcbisrKyBiL2luY2x1ZGUvbmV0L2lwNl9maWIuaFxuQEAgLTQ2OCw3ICs0NjgsNyBAQCB2b2lkIGZpYjZfY2xlYW5fYWxsX3NraXBfbm90aWZ5KHN0cnVjdCBuZXQgKm5ldCxcbiBcbiBpbnQgZmliNl9hZGQoc3RydWN0IGZpYjZfbm9kZSAqcm9vdCwgc3RydWN0IGZpYjZfaW5mbyAqcnQsXG4gXHQgICAgIHN0cnVjdCBubF9pbmZvICppbmZvLCBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spO1xuLWludCBmaWI2X2RlbChzdHJ1Y3QgZmliNl9pbmZvICpydCwgc3RydWN0IG5sX2luZm8gKmluZm8pO1xuK2ludCBmaWI2X2RlbChzdHJ1Y3QgZmliNl9pbmZvICpydCwgc3RydWN0IG5sX2luZm8gKmluZm8sIHUzMiBkZWxfcmVhc29uKTtcbiBcbiBzdGF0aWMgaW5saW5lXG4gdm9pZCBydDZfZ2V0X3ByZWZzcmMoY29uc3Qgc3RydWN0IHJ0Nl9pbmZvICpydCwgc3RydWN0IGluNl9hZGRyICphZGRyKVxuQEAgLTUzMSw3ICs1MzEsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgZmliNl9ydF91cGRhdGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZmliNl9pbmZvICpydCxcbiB9XG4gI2VuZGlmXG4gdm9pZCBpbmV0Nl9ydF9ub3RpZnkoaW50IGV2ZW50LCBzdHJ1Y3QgZmliNl9pbmZvICpydCwgc3RydWN0IG5sX2luZm8gKmluZm8sXG4tXHRcdCAgICAgdW5zaWduZWQgaW50IGZsYWdzKTtcbitcdFx0ICAgICB1bnNpZ25lZCBpbnQgZmxhZ3MsIHUzMiBkZWxfcmVhc29uKTtcbiBcbiB2b2lkIGZpYjZfYWdlX2V4Y2VwdGlvbnMoc3RydWN0IGZpYjZfaW5mbyAqcnQsIHN0cnVjdCBmaWI2X2djX2FyZ3MgKmdjX2FyZ3MsXG4gXHRcdFx0IHVuc2lnbmVkIGxvbmcgbm93KTtcbmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9pcDZfcm91dGUuaCBiL2luY2x1ZGUvbmV0L2lwNl9yb3V0ZS5oXG5pbmRleCAwOWZmZTBmMTNjZTc1Mi4uOThmMTY4NGZlMzc4Y2MgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL25ldC9pcDZfcm91dGUuaFxuKysrIGIvaW5jbHVkZS9uZXQvaXA2X3JvdXRlLmhcbkBAIC0xMjgsNiArMTI4LDggQEAgaW50IGlwNl9yb3V0ZV9hZGQoc3RydWN0IGZpYjZfY29uZmlnICpjZmcsIGdmcF90IGdmcF9mbGFncyxcbiBpbnQgaXA2X2luc19ydChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBmaWI2X2luZm8gKmY2aSk7XG4gI2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVjYpXG4gaW50IGlwNl9kZWxfcnQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZmliNl9pbmZvICpmNmksIGJvb2wgc2tpcF9ub3RpZnkpO1xuK2ludCBpcDZfZGVsX3J0X3JlYXNvbihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBmaWI2X2luZm8gKmY2aSwgYm9vbCBza2lwX25vdGlmeSxcbitcdFx0ICAgICAgdTMyIGRlbF9yZWFzb24pO1xuICNlbHNlXG4gc3RhdGljIGlubGluZSBpbnQgaXA2X2RlbF9ydChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBmaWI2X2luZm8gKmY2aSxcbiBcdFx0XHQgICAgIGJvb2wgc2tpcF9ub3RpZnkpXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS91YXBpL2xpbnV4L3J0bmV0bGluay5oIGIvaW5jbHVkZS91YXBpL2xpbnV4L3J0bmV0bGluay5oXG5pbmRleCAyNzI2NWZkMzFlNWZjOS4uZmUwMGU2MjRmM2MzYWEgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL3VhcGkvbGludXgvcnRuZXRsaW5rLmhcbisrKyBiL2luY2x1ZGUvdWFwaS9saW51eC9ydG5ldGxpbmsuaFxuQEAgLTM5OSw2ICszOTksNyBAQCBlbnVtIHJ0YXR0cl90eXBlX3Qge1xuIFx0UlRBX0RQT1JULFxuIFx0UlRBX05IX0lELFxuIFx0UlRBX0ZMT1dMQUJFTCxcbitcdFJUQV9ERUxfUkVBU09OLFxuIFx0X19SVEFfTUFYXG4gfTtcbiBcbkBAIC00MDcsNiArNDA4LDIyIEBAIGVudW0gcnRhdHRyX3R5cGVfdCB7XG4gI2RlZmluZSBSVE1fUlRBKHIpICAoKHN0cnVjdCBydGF0dHIqKSgoKGNoYXIqKShyKSkgKyBOTE1TR19BTElHTihzaXplb2Yoc3RydWN0IHJ0bXNnKSkpKVxuICNkZWZpbmUgUlRNX1BBWUxPQUQobikgTkxNU0dfUEFZTE9BRChuLHNpemVvZihzdHJ1Y3QgcnRtc2cpKVxuIFxuKy8qIFJUQV9ERUxfUkVBU09OOiB3aHkgdGhlIGtlcm5lbCBkZWxldGVkIHRoZSByb3V0ZS4gdTMyLlxuKyAqIEVtaXR0ZWQgb25seSBvbiBSVE1fREVMUk9VVEUgbm90aWZpY2F0aW9ucywgYW5kIG9ubHkgd2hlbiB0aGUgZGVsZXRpb25cbisgKiBwYXRoIHJlY29yZHMgYSBjYXVzZS4gQWJzZW5jZSBtZWFucyBlaXRoZXIgYW4gb2xkZXIga2VybmVsIG9yIGFcbisgKiBkZWxldGlvbiBwYXRoIHRoYXQgZG9lcyBub3QgKHlldCkgcmVjb3JkIGl0cyBjYXVzZSAtIGNvbnN1bWVycyBtdXN0XG4rICogdHJlYXQgXCJhYnNlbnRcIiBhbmQgXCJ1bnNwZWNcIiBpZGVudGljYWxseS4gTmV3IGNhdXNlcyBtYXkgYmUgYXBwZW5kZWQuXG4rICogQ3VycmVudGx5IG9ubHkgSVB2NiBkZWxldGlvbiBwYXRocyByZWNvcmQgYSBjYXVzZS5cbisgKi9cbitlbnVtIHJ0YV9kZWxfcmVhc29uIHtcbitcdFJUQV9ERUxfUkVBU09OX1VOU1BFQyxcdFx0LyogY2F1c2Ugbm90IHJlY29yZGVkICovXG4rXHRSVEFfREVMX1JFQVNPTl9FWFBJUkVELFx0XHQvKiBSVEZfRVhQSVJFUyBsaWZldGltZSByYW4gb3V0IChHQykgKi9cbitcdFJUQV9ERUxfUkVBU09OX1JBX1dJVEhEUkFXTixcdC8qIHplcm8tbGlmZXRpbWUgUkEgLyBQSU8gLyBSSU8gKi9cbitcdF9fUlRBX0RFTF9SRUFTT05fTUFYXG4rfTtcbitcbisjZGVmaW5lIFJUQV9ERUxfUkVBU09OX01BWCAoX19SVEFfREVMX1JFQVNPTl9NQVggLSAxKVxuK1xuIC8qIFJUTV9NVUxUSVBBVEggLS0tIGFycmF5IG9mIHN0cnVjdCBydG5leHRob3AuXG4gICpcbiAgKiBcInN0cnVjdCBydG5leHRob3BcIiBkZXNjcmliZXMgYWxsIG5lY2Vzc2FyeSBuZXh0aG9wIGluZm9ybWF0aW9uLFxuZGlmZiAtLWdpdCBhL25ldC9pcHY2L2FkZHJjb25mLmMgYi9uZXQvaXB2Ni9hZGRyY29uZi5jXG5pbmRleCBmMWZlOWVkZTFlZGIzNy4uMWNhOWQ4MmI1NzIxZTYgMTAwNjQ0XG4tLS0gYS9uZXQvaXB2Ni9hZGRyY29uZi5jXG4rKysgYi9uZXQvaXB2Ni9hZGRyY29uZi5jXG5AQCAtMjg3NCw3ICsyODc0LDggQEAgdm9pZCBhZGRyY29uZl9wcmVmaXhfcmN2KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHU4ICpvcHQsIGludCBsZW4sIGJvb2wgc2xsYW8pXG4gXHRcdGlmIChydCkge1xuIFx0XHRcdC8qIEF1dG9jb25mIHByZWZpeCByb3V0ZSAqL1xuIFx0XHRcdGlmICh2YWxpZF9sZnQgPT0gMCkge1xuLVx0XHRcdFx0aXA2X2RlbF9ydChuZXQsIHJ0LCBmYWxzZSk7XG4rXHRcdFx0XHRpcDZfZGVsX3J0X3JlYXNvbihuZXQsIHJ0LCBmYWxzZSxcbitcdFx0XHRcdFx0XHQgIFJUQV9ERUxfUkVBU09OX1JBX1dJVEhEUkFXTik7XG4gXHRcdFx0XHRydCA9IE5VTEw7XG4gXHRcdFx0fSBlbHNlIHtcbiBcdFx0XHRcdHRhYmxlID0gcnQtXHUwMDNlZmliNl90YWJsZTtcbmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9pcDZfZmliLmMgYi9uZXQvaXB2Ni9pcDZfZmliLmNcbmluZGV4IGExMzBjZGZhZWJmYmVlLi4zMmI5YTAwOTU2YTA5MiAxMDA2NDRcbi0tLSBhL25ldC9pcHY2L2lwNl9maWIuY1xuKysrIGIvbmV0L2lwdjYvaXA2X2ZpYi5jXG5AQCAtMTI4Niw3ICsxMjg2LDggQEAgc3RhdGljIGludCBmaWI2X2FkZF9ydDJub2RlKHN0cnVjdCBmaWI2X25vZGUgKmZuLCBzdHJ1Y3QgZmliNl9pbmZvICpydCxcbiBcdFx0cmN1X2Fzc2lnbl9wb2ludGVyKHJ0LVx1MDAzZWZpYjZfbm9kZSwgZm4pO1xuIFx0XHRyY3VfYXNzaWduX3BvaW50ZXIoKmlucywgcnQpO1xuIFx0XHRpZiAoIWluZm8tXHUwMDNlc2tpcF9ub3RpZnkpXG4tXHRcdFx0aW5ldDZfcnRfbm90aWZ5KFJUTV9ORVdST1VURSwgcnQsIGluZm8sIG5sZmxhZ3MpO1xuK1x0XHRcdGluZXQ2X3J0X25vdGlmeShSVE1fTkVXUk9VVEUsIHJ0LCBpbmZvLCBubGZsYWdzLFxuK1x0XHRcdFx0XHRSVEFfREVMX1JFQVNPTl9VTlNQRUMpO1xuIFx0XHRpbmZvLVx1MDAzZW5sX25ldC1cdTAwM2VpcHY2LnJ0Nl9zdGF0cy1cdTAwM2VmaWJfcnRfZW50cmllcysrO1xuIFxuIFx0XHRpZiAoIShmbi1cdTAwM2Vmbl9mbGFncyBcdTAwMjYgUlROX1JUSU5GTykpIHtcbkBAIC0xMzE3LDcgKzEzMTgsOCBAQCBzdGF0aWMgaW50IGZpYjZfYWRkX3J0Mm5vZGUoc3RydWN0IGZpYjZfbm9kZSAqZm4sIHN0cnVjdCBmaWI2X2luZm8gKnJ0LFxuIFx0XHRydC1cdTAwM2VmaWI2X25leHQgPSBpdGVyLVx1MDAzZWZpYjZfbmV4dDtcbiBcdFx0cmN1X2Fzc2lnbl9wb2ludGVyKCppbnMsIHJ0KTtcbiBcdFx0aWYgKCFpbmZvLVx1MDAzZXNraXBfbm90aWZ5KVxuLVx0XHRcdGluZXQ2X3J0X25vdGlmeShSVE1fTkVXUk9VVEUsIHJ0LCBpbmZvLCBOTE1fRl9SRVBMQUNFKTtcbitcdFx0XHRpbmV0Nl9ydF9ub3RpZnkoUlRNX05FV1JPVVRFLCBydCwgaW5mbywgTkxNX0ZfUkVQTEFDRSxcbitcdFx0XHRcdFx0UlRBX0RFTF9SRUFTT05fVU5TUEVDKTtcbiBcdFx0aWYgKCEoZm4tXHUwMDNlZm5fZmxhZ3MgXHUwMDI2IFJUTl9SVElORk8pKSB7XG4gXHRcdFx0aW5mby1cdTAwM2VubF9uZXQtXHUwMDNlaXB2Ni5ydDZfc3RhdHMtXHUwMDNlZmliX3JvdXRlX25vZGVzKys7XG4gXHRcdFx0Zm4tXHUwMDNlZm5fZmxhZ3MgfD0gUlROX1JUSU5GTztcbkBAIC0xOTY2LDcgKzE5NjgsOCBAQCBzdGF0aWMgc3RydWN0IGZpYjZfbm9kZSAqZmliNl9yZXBhaXJfdHJlZShzdHJ1Y3QgbmV0ICpuZXQsXG4gfVxuIFxuIHN0YXRpYyB2b2lkIGZpYjZfZGVsX3JvdXRlKHN0cnVjdCBmaWI2X3RhYmxlICp0YWJsZSwgc3RydWN0IGZpYjZfbm9kZSAqZm4sXG4tXHRcdFx0ICAgc3RydWN0IGZpYjZfaW5mbyBfX3JjdSAqKnJ0cCwgc3RydWN0IG5sX2luZm8gKmluZm8pXG4rXHRcdFx0ICAgc3RydWN0IGZpYjZfaW5mbyBfX3JjdSAqKnJ0cCwgc3RydWN0IG5sX2luZm8gKmluZm8sXG4rXHRcdFx0ICAgdTMyIGRlbF9yZWFzb24pXG4ge1xuIFx0c3RydWN0IGZpYjZfaW5mbyAqbGVhZiwgKnJlcGxhY2VfcnQgPSBOVUxMO1xuIFx0c3RydWN0IGZpYjZfd2Fsa2VyICp3O1xuQEAgLTIwNTUsMTMgKzIwNTgsMTMgQEAgc3RhdGljIHZvaWQgZmliNl9kZWxfcm91dGUoc3RydWN0IGZpYjZfdGFibGUgKnRhYmxlLCBzdHJ1Y3QgZmliNl9ub2RlICpmbixcbiBcdFx0XHRjYWxsX2ZpYjZfZW50cnlfbm90aWZpZXJzX3JlcGxhY2UobmV0LCByZXBsYWNlX3J0KTtcbiBcdH1cbiBcdGlmICghaW5mby1cdTAwM2Vza2lwX25vdGlmeSlcbi1cdFx0aW5ldDZfcnRfbm90aWZ5KFJUTV9ERUxST1VURSwgcnQsIGluZm8sIDApO1xuK1x0XHRpbmV0Nl9ydF9ub3RpZnkoUlRNX0RFTFJPVVRFLCBydCwgaW5mbywgMCwgZGVsX3JlYXNvbik7XG4gXG4gXHRmaWI2X2luZm9fcmVsZWFzZShydCk7XG4gfVxuIFxuIC8qIE5lZWQgdG8gb3duIHRhYmxlLVx1MDAzZXRiNl9sb2NrICovXG4taW50IGZpYjZfZGVsKHN0cnVjdCBmaWI2X2luZm8gKnJ0LCBzdHJ1Y3QgbmxfaW5mbyAqaW5mbylcbitpbnQgZmliNl9kZWwoc3RydWN0IGZpYjZfaW5mbyAqcnQsIHN0cnVjdCBubF9pbmZvICppbmZvLCB1MzIgZGVsX3JlYXNvbilcbiB7XG4gXHRzdHJ1Y3QgbmV0ICpuZXQgPSBpbmZvLVx1MDAzZW5sX25ldDtcbiBcdHN0cnVjdCBmaWI2X2luZm8gX19yY3UgKipydHA7XG5AQCAtMjA5MCw3ICsyMDkzLDcgQEAgaW50IGZpYjZfZGVsKHN0cnVjdCBmaWI2X2luZm8gKnJ0LCBzdHJ1Y3QgbmxfaW5mbyAqaW5mbylcbiBcdFx0aWYgKHJ0ID09IGN1cikge1xuIFx0XHRcdGlmIChmaWI2X3JlcXVpcmVzX3NyYyhjdXIpKVxuIFx0XHRcdFx0ZmliNl9yb3V0ZXNfcmVxdWlyZV9zcmNfZGVjKGluZm8tXHUwMDNlbmxfbmV0KTtcbi1cdFx0XHRmaWI2X2RlbF9yb3V0ZSh0YWJsZSwgZm4sIHJ0cCwgaW5mbyk7XG4rXHRcdFx0ZmliNl9kZWxfcm91dGUodGFibGUsIGZuLCBydHAsIGluZm8sIGRlbF9yZWFzb24pO1xuIFx0XHRcdHJldHVybiAwO1xuIFx0XHR9XG4gXHRcdHJ0cF9uZXh0ID0gXHUwMDI2Y3VyLVx1MDAzZWZpYjZfbmV4dDtcbkBAIC0yMjUyLDcgKzIyNTUsNyBAQCBzdGF0aWMgaW50IGZpYjZfY2xlYW5fbm9kZShzdHJ1Y3QgZmliNl93YWxrZXIgKncpXG4gXHRcdHJlcyA9IGMtXHUwMDNlZnVuYyhydCwgYy1cdTAwM2VhcmcpO1xuIFx0XHRpZiAocmVzID09IC0xKSB7XG4gXHRcdFx0dy1cdTAwM2VsZWFmID0gcnQ7XG4tXHRcdFx0cmVzID0gZmliNl9kZWwocnQsIFx1MDAyNmluZm8pO1xuK1x0XHRcdHJlcyA9IGZpYjZfZGVsKHJ0LCBcdTAwMjZpbmZvLCBSVEFfREVMX1JFQVNPTl9VTlNQRUMpO1xuIFx0XHRcdGlmIChyZXMpIHtcbiAjaWYgUlQ2X0RFQlVHIFx1MDAzZT0gMlxuIFx0XHRcdFx0cHJfZGVidWcoXCIlczogZGVsIGZhaWxlZDogcnQ9JXBAJXAgZXJyPSVkXFxuXCIsXG5AQCAtMjQwMCw3ICsyNDAzLDcgQEAgc3RhdGljIHZvaWQgZmliNl9nY190YWJsZShzdHJ1Y3QgbmV0ICpuZXQsXG4gXG4gXHRobGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHJ0LCBuLCBcdTAwMjZ0YjYtXHUwMDNldGI2X2djX2hsaXN0LCBnY19saW5rKVxuIFx0XHRpZiAoZmliNl9hZ2UocnQsIGdjX2FyZ3MpID09IC0xKVxuLVx0XHRcdGZpYjZfZGVsKHJ0LCBcdTAwMjZpbmZvKTtcbitcdFx0XHRmaWI2X2RlbChydCwgXHUwMDI2aW5mbywgUlRBX0RFTF9SRUFTT05fRVhQSVJFRCk7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIGZpYjZfZ2NfYWxsKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZpYjZfZ2NfYXJncyAqZ2NfYXJncylcbmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9uZGlzYy5jIGIvbmV0L2lwdjYvbmRpc2MuY1xuaW5kZXggZjg2N2VjOGQzZDkwNTEuLmMzNTM3ZmMwZWM2M2IxIDEwMDY0NFxuLS0tIGEvbmV0L2lwdjYvbmRpc2MuY1xuKysrIGIvbmV0L2lwdjYvbmRpc2MuY1xuQEAgLTEzNjEsNyArMTM2MSw5IEBAIHN0YXRpYyBlbnVtIHNrYl9kcm9wX3JlYXNvbiBuZGlzY19yb3V0ZXJfZGlzY292ZXJ5KHN0cnVjdCBza19idWZmICpza2IpXG4gXHRkZWZydHJfdXNyX21ldHJpYyA9IGluNl9kZXYtXHUwMDNlY25mLnJhX2RlZnJ0cl9tZXRyaWM7XG4gXHQvKiBkZWxldGUgdGhlIHJvdXRlIGlmIGxpZmV0aW1lIGlzIDAgb3IgaWYgbWV0cmljIG5lZWRzIGNoYW5nZSAqL1xuIFx0aWYgKHJ0IFx1MDAyNlx1MDAyNiAobGlmZXRpbWUgPT0gMCB8fCBydC1cdTAwM2VmaWI2X21ldHJpYyAhPSBkZWZydHJfdXNyX21ldHJpYykpIHtcbi1cdFx0aXA2X2RlbF9ydChuZXQsIHJ0LCBmYWxzZSk7XG4rXHRcdGlwNl9kZWxfcnRfcmVhc29uKG5ldCwgcnQsIGZhbHNlLFxuK1x0XHRcdFx0ICBsaWZldGltZSA9PSAwID8gUlRBX0RFTF9SRUFTT05fUkFfV0lUSERSQVdOIDpcbitcdFx0XHRcdFx0XHQgIFJUQV9ERUxfUkVBU09OX1VOU1BFQyk7XG4gXHRcdHJ0ID0gTlVMTDtcbiBcdH1cbiBcbkBAIC0xMzk2LDcgKzEzOTgsOCBAQCBzdGF0aWMgZW51bSBza2JfZHJvcF9yZWFzb24gbmRpc2Nfcm91dGVyX2Rpc2NvdmVyeShzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIFx0XHRcdC5ubF9uZXQgPSBuZXQsXG4gXHRcdH07XG4gXHRcdHJ0LVx1MDAzZWZpYjZfZmxhZ3MgPSAocnQtXHUwMDNlZmliNl9mbGFncyBcdTAwMjYgflJURl9QUkVGX01BU0spIHwgUlRGX1BSRUYocHJlZik7XG4tXHRcdGluZXQ2X3J0X25vdGlmeShSVE1fTkVXUk9VVEUsIHJ0LCBcdTAwMjZubGluZm8sIE5MTV9GX1JFUExBQ0UpO1xuK1x0XHRpbmV0Nl9ydF9ub3RpZnkoUlRNX05FV1JPVVRFLCBydCwgXHUwMDI2bmxpbmZvLCBOTE1fRl9SRVBMQUNFLFxuK1x0XHRcdFx0UlRBX0RFTF9SRUFTT05fVU5TUEVDKTtcbiBcdH1cbiBcbiBcdGlmIChydCkge1xuZGlmZiAtLWdpdCBhL25ldC9pcHY2L3JvdXRlLmMgYi9uZXQvaXB2Ni9yb3V0ZS5jXG5pbmRleCBhMTMwMTMzNGRhNDhjMC4uZThlZDk1ZGM1NjY1ZWUgMTAwNjQ0XG4tLS0gYS9uZXQvaXB2Ni9yb3V0ZS5jXG4rKysgYi9uZXQvaXB2Ni9yb3V0ZS5jXG5AQCAtMTExLDcgKzExMSw3IEBAIHN0YXRpYyBpbnQgcnQ2X2ZpbGxfbm9kZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICpza2IsXG4gXHRcdFx0IHN0cnVjdCBmaWI2X2luZm8gKnJ0LCBzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QsXG4gXHRcdFx0IHN0cnVjdCBpbjZfYWRkciAqZGVzdCwgc3RydWN0IGluNl9hZGRyICpzcmMsXG4gXHRcdFx0IGludCBpaWYsIGludCB0eXBlLCB1MzIgcG9ydGlkLCB1MzIgc2VxLFxuLVx0XHRcdCB1bnNpZ25lZCBpbnQgZmxhZ3MpO1xuK1x0XHRcdCB1bnNpZ25lZCBpbnQgZmxhZ3MsIHUzMiBkZWxfcmVhc29uKTtcbiBzdGF0aWMgc3RydWN0IHJ0Nl9pbmZvICpydDZfZmluZF9jYWNoZWRfcnQoY29uc3Qgc3RydWN0IGZpYjZfcmVzdWx0ICpyZXMsXG4gXHRcdFx0XHRcdCAgIGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqZGFkZHIsXG4gXHRcdFx0XHRcdCAgIGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqc2FkZHIpO1xuQEAgLTEwMjAsNyArMTAyMCw3IEBAIGludCBydDZfcm91dGVfcmN2KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHU4ICpvcHQsIGludCBsZW4sXG4gXHRcdFx0XHRcdGd3YWRkciwgZGV2KTtcbiBcbiBcdGlmIChydCBcdTAwMjZcdTAwMjYgIWxpZmV0aW1lKSB7XG4tXHRcdGlwNl9kZWxfcnQobmV0LCBydCwgZmFsc2UpO1xuK1x0XHRpcDZfZGVsX3J0X3JlYXNvbihuZXQsIHJ0LCBmYWxzZSwgUlRBX0RFTF9SRUFTT05fUkFfV0lUSERSQVdOKTtcbiBcdFx0cnQgPSBOVUxMO1xuIFx0fVxuIFxuQEAgLTM5NzMsNyArMzk3Myw4IEBAIGludCBpcDZfcm91dGVfYWRkKHN0cnVjdCBmaWI2X2NvbmZpZyAqY2ZnLCBnZnBfdCBnZnBfZmxhZ3MsXG4gXHRyZXR1cm4gZXJyO1xuIH1cbiBcbi1zdGF0aWMgaW50IF9faXA2X2RlbF9ydChzdHJ1Y3QgZmliNl9pbmZvICpydCwgc3RydWN0IG5sX2luZm8gKmluZm8pXG4rc3RhdGljIGludCBfX2lwNl9kZWxfcnQoc3RydWN0IGZpYjZfaW5mbyAqcnQsIHN0cnVjdCBubF9pbmZvICppbmZvLFxuK1x0XHRcdHUzMiBkZWxfcmVhc29uKVxuIHtcbiBcdHN0cnVjdCBuZXQgKm5ldCA9IGluZm8tXHUwMDNlbmxfbmV0O1xuIFx0c3RydWN0IGZpYjZfdGFibGUgKnRhYmxlO1xuQEAgLTM5ODYsNyArMzk4Nyw3IEBAIHN0YXRpYyBpbnQgX19pcDZfZGVsX3J0KHN0cnVjdCBmaWI2X2luZm8gKnJ0LCBzdHJ1Y3QgbmxfaW5mbyAqaW5mbylcbiBcbiBcdHRhYmxlID0gcnQtXHUwMDNlZmliNl90YWJsZTtcbiBcdHNwaW5fbG9ja19iaChcdTAwMjZ0YWJsZS1cdTAwM2V0YjZfbG9jayk7XG4tXHRlcnIgPSBmaWI2X2RlbChydCwgaW5mbyk7XG4rXHRlcnIgPSBmaWI2X2RlbChydCwgaW5mbywgZGVsX3JlYXNvbik7XG4gXHRzcGluX3VubG9ja19iaChcdTAwMjZ0YWJsZS1cdTAwM2V0YjZfbG9jayk7XG4gXG4gb3V0OlxuQEAgLTM5OTQsMTQgKzM5OTUsMjAgQEAgc3RhdGljIGludCBfX2lwNl9kZWxfcnQoc3RydWN0IGZpYjZfaW5mbyAqcnQsIHN0cnVjdCBubF9pbmZvICppbmZvKVxuIFx0cmV0dXJuIGVycjtcbiB9XG4gXG4taW50IGlwNl9kZWxfcnQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZmliNl9pbmZvICpydCwgYm9vbCBza2lwX25vdGlmeSlcbitpbnQgaXA2X2RlbF9ydF9yZWFzb24oc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZmliNl9pbmZvICpydCwgYm9vbCBza2lwX25vdGlmeSxcbitcdFx0ICAgICAgdTMyIGRlbF9yZWFzb24pXG4ge1xuIFx0c3RydWN0IG5sX2luZm8gaW5mbyA9IHtcbiBcdFx0Lm5sX25ldCA9IG5ldCxcbi1cdFx0LnNraXBfbm90aWZ5ID0gc2tpcF9ub3RpZnlcbitcdFx0LnNraXBfbm90aWZ5ID0gc2tpcF9ub3RpZnksXG4gXHR9O1xuIFxuLVx0cmV0dXJuIF9faXA2X2RlbF9ydChydCwgXHUwMDI2aW5mbyk7XG4rXHRyZXR1cm4gX19pcDZfZGVsX3J0KHJ0LCBcdTAwMjZpbmZvLCBkZWxfcmVhc29uKTtcbit9XG4rXG4raW50IGlwNl9kZWxfcnQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZmliNl9pbmZvICpydCwgYm9vbCBza2lwX25vdGlmeSlcbit7XG4rXHRyZXR1cm4gaXA2X2RlbF9ydF9yZWFzb24obmV0LCBydCwgc2tpcF9ub3RpZnksIFJUQV9ERUxfUkVBU09OX1VOU1BFQyk7XG4gfVxuIFxuIHN0YXRpYyBpbnQgX19pcDZfZGVsX3J0X3NpYmxpbmdzKHN0cnVjdCBmaWI2X2luZm8gKnJ0LCBzdHJ1Y3QgZmliNl9jb25maWcgKmNmZylcbkBAIC00MDI4LDcgKzQwMzUsOCBAQCBzdGF0aWMgaW50IF9faXA2X2RlbF9ydF9zaWJsaW5ncyhzdHJ1Y3QgZmliNl9pbmZvICpydCwgc3RydWN0IGZpYjZfY29uZmlnICpjZmcpXG4gXG4gXHRcdFx0aWYgKHJ0Nl9maWxsX25vZGUobmV0LCBza2IsIHJ0LCBOVUxMLFxuIFx0XHRcdFx0XHQgIE5VTEwsIE5VTEwsIDAsIFJUTV9ERUxST1VURSxcbi1cdFx0XHRcdFx0ICBpbmZvLVx1MDAzZXBvcnRpZCwgc2VxLCAwKSBcdTAwM2MgMCkge1xuK1x0XHRcdFx0XHQgIGluZm8tXHUwMDNlcG9ydGlkLCBzZXEsIDAsXG4rXHRcdFx0XHRcdCAgUlRBX0RFTF9SRUFTT05fVU5TUEVDKSBcdTAwM2MgMCkge1xuIFx0XHRcdFx0a2ZyZWVfc2tiKHNrYik7XG4gXHRcdFx0XHRza2IgPSBOVUxMO1xuIFx0XHRcdH0gZWxzZVxuQEAgLTQwNjQsMTMgKzQwNzIsMTMgQEAgc3RhdGljIGludCBfX2lwNl9kZWxfcnRfc2libGluZ3Moc3RydWN0IGZpYjZfaW5mbyAqcnQsIHN0cnVjdCBmaWI2X2NvbmZpZyAqY2ZnKVxuIFx0XHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoc2libGluZywgbmV4dF9zaWJsaW5nLFxuIFx0XHRcdFx0XHQgXHUwMDI2cnQtXHUwMDNlZmliNl9zaWJsaW5ncyxcbiBcdFx0XHRcdFx0IGZpYjZfc2libGluZ3MpIHtcbi1cdFx0XHRlcnIgPSBmaWI2X2RlbChzaWJsaW5nLCBpbmZvKTtcbitcdFx0XHRlcnIgPSBmaWI2X2RlbChzaWJsaW5nLCBpbmZvLCBSVEFfREVMX1JFQVNPTl9VTlNQRUMpO1xuIFx0XHRcdGlmIChlcnIpXG4gXHRcdFx0XHRnb3RvIG91dF91bmxvY2s7XG4gXHRcdH1cbiBcdH1cbiBcbi1cdGVyciA9IGZpYjZfZGVsKHJ0LCBpbmZvKTtcbitcdGVyciA9IGZpYjZfZGVsKHJ0LCBpbmZvLCBSVEFfREVMX1JFQVNPTl9VTlNQRUMpO1xuIG91dF91bmxvY2s6XG4gXHRzcGluX3VubG9ja19iaChcdTAwMjZ0YWJsZS1cdTAwM2V0YjZfbG9jayk7XG4gb3V0X3B1dDpcbkBAIC00MTk2LDcgKzQyMDQsOCBAQCBzdGF0aWMgaW50IGlwNl9yb3V0ZV9kZWwoc3RydWN0IGZpYjZfY29uZmlnICpjZmcsXG4gXHRcdFx0XHRpZiAoIWZpYjZfaW5mb19ob2xkX3NhZmUocnQpKVxuIFx0XHRcdFx0XHRjb250aW51ZTtcbiBcbi1cdFx0XHRcdGVyciA9ICBfX2lwNl9kZWxfcnQocnQsIFx1MDAyNmNmZy1cdTAwM2VmY19ubGluZm8pO1xuK1x0XHRcdFx0ZXJyID0gX19pcDZfZGVsX3J0KHJ0LCBcdTAwMjZjZmctXHUwMDNlZmNfbmxpbmZvLFxuK1x0XHRcdFx0XHRcdCAgIFJUQV9ERUxfUkVBU09OX1VOU1BFQyk7XG4gXHRcdFx0XHRicmVhaztcbiBcdFx0XHR9XG4gXHRcdFx0aWYgKGNmZy1cdTAwM2VmY19uaF9pZClcbkBAIC00MjE1LDcgKzQyMjQsOCBAQCBzdGF0aWMgaW50IGlwNl9yb3V0ZV9kZWwoc3RydWN0IGZpYjZfY29uZmlnICpjZmcsXG4gXG4gXHRcdFx0LyogaWYgZ2F0ZXdheSB3YXMgc3BlY2lmaWVkIG9ubHkgZGVsZXRlIHRoZSBvbmUgaG9wICovXG4gXHRcdFx0aWYgKGNmZy1cdTAwM2VmY19mbGFncyBcdTAwMjYgUlRGX0dBVEVXQVkpXG4tXHRcdFx0XHRlcnIgPSBfX2lwNl9kZWxfcnQocnQsIFx1MDAyNmNmZy1cdTAwM2VmY19ubGluZm8pO1xuK1x0XHRcdFx0ZXJyID0gX19pcDZfZGVsX3J0KHJ0LCBcdTAwMjZjZmctXHUwMDNlZmNfbmxpbmZvLFxuK1x0XHRcdFx0XHRcdCAgIFJUQV9ERUxfUkVBU09OX1VOU1BFQyk7XG4gXHRcdFx0ZWxzZVxuIFx0XHRcdFx0ZXJyID0gX19pcDZfZGVsX3J0X3NpYmxpbmdzKHJ0LCBjZmcpO1xuIFx0XHRcdGJyZWFrO1xuQEAgLTUzODEsNyArNTM5MSw4IEBAIHN0YXRpYyB2b2lkIGlwNl9yb3V0ZV9tcGF0aF9ub3RpZnkoc3RydWN0IGZpYjZfaW5mbyAqcnQsXG4gXHR9XG4gXG4gXHRpZiAocnQpXG4tXHRcdGluZXQ2X3J0X25vdGlmeShSVE1fTkVXUk9VVEUsIHJ0LCBpbmZvLCBubGZsYWdzKTtcbitcdFx0aW5ldDZfcnRfbm90aWZ5KFJUTV9ORVdST1VURSwgcnQsIGluZm8sIG5sZmxhZ3MsXG4rXHRcdFx0XHRSVEFfREVMX1JFQVNPTl9VTlNQRUMpO1xuIFxuIFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4gfVxuQEAgLTU3MzksNiArNTc1MCw3IEBAIHN0YXRpYyBzaXplX3QgcnQ2X25sbXNnX3NpemUoc3RydWN0IGZpYjZfaW5mbyAqZjZpKVxuIFx0ICAgICAgICsgbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHN0cnVjdCBydGFfY2FjaGVpbmZvKSlcbiBcdCAgICAgICArIG5sYV90b3RhbF9zaXplKFRDUF9DQV9OQU1FX01BWCkgLyogUlRBWF9DQ19BTEdPICovXG4gXHQgICAgICAgKyBubGFfdG90YWxfc2l6ZSgxKSAvKiBSVEFfUFJFRiAqL1xuK1x0ICAgICAgICsgbmxhX3RvdGFsX3NpemUoNCkgLyogUlRBX0RFTF9SRUFTT04gKi9cbiBcdCAgICAgICArIG5leHRob3BfbGVuO1xuIH1cbiBcbkBAIC01Nzc1LDcgKzU3ODcsNyBAQCBzdGF0aWMgaW50IHJ0Nl9maWxsX25vZGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0XHRcdCBzdHJ1Y3QgZmliNl9pbmZvICpydCwgc3RydWN0IGRzdF9lbnRyeSAqZHN0LFxuIFx0XHRcdCBzdHJ1Y3QgaW42X2FkZHIgKmRlc3QsIHN0cnVjdCBpbjZfYWRkciAqc3JjLFxuIFx0XHRcdCBpbnQgaWlmLCBpbnQgdHlwZSwgdTMyIHBvcnRpZCwgdTMyIHNlcSxcbi1cdFx0XHQgdW5zaWduZWQgaW50IGZsYWdzKVxuK1x0XHRcdCB1bnNpZ25lZCBpbnQgZmxhZ3MsIHUzMiBkZWxfcmVhc29uKVxuIHtcbiBcdHN0cnVjdCBydDZfaW5mbyAqcnQ2ID0gZHN0X3J0Nl9pbmZvKGRzdCk7XG4gXHRzdHJ1Y3QgcnQ2a2V5ICpydDZfZHN0LCAqcnQ2X3NyYztcbkBAIC01OTU0LDYgKzU5NjYsMTAgQEAgc3RhdGljIGludCBydDZfZmlsbF9ub2RlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdGlmIChydG5sX3B1dF9jYWNoZWluZm8oc2tiLCBkc3QsIDAsIGV4cGlyZXMsIGRzdCA/IGRzdC1cdTAwM2VlcnJvciA6IDApIFx1MDAzYyAwKVxuIFx0XHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcbiBcbitcdGlmICh0eXBlID09IFJUTV9ERUxST1VURSBcdTAwMjZcdTAwMjYgZGVsX3JlYXNvbiAhPSBSVEFfREVMX1JFQVNPTl9VTlNQRUMgXHUwMDI2XHUwMDI2XG4rXHQgICAgbmxhX3B1dF91MzIoc2tiLCBSVEFfREVMX1JFQVNPTiwgZGVsX3JlYXNvbikpXG4rXHRcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xuK1xuIFx0aWYgKG5sYV9wdXRfdTgoc2tiLCBSVEFfUFJFRiwgSVBWNl9FWFRSQUNUX1BSRUYocnQ2X2ZsYWdzKSkpXG4gXHRcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xuIFxuQEAgLTYwNTUsNyArNjA3MSw4IEBAIHN0YXRpYyBpbnQgcnQ2X25oX2R1bXBfZXhjZXB0aW9ucyhzdHJ1Y3QgZmliNl9uaCAqbmgsIHZvaWQgKmFyZylcbiBcdFx0XHRcdFx0ICAgIFx1MDAyNnJ0Nl9leC1cdTAwM2VydDZpLVx1MDAzZWRzdCwgTlVMTCwgTlVMTCwgMCxcbiBcdFx0XHRcdFx0ICAgIFJUTV9ORVdST1VURSxcbiBcdFx0XHRcdFx0ICAgIE5FVExJTktfQ0IoZHVtcC1cdTAwM2VjYi1cdTAwM2Vza2IpLnBvcnRpZCxcbi1cdFx0XHRcdFx0ICAgIGR1bXAtXHUwMDNlY2ItXHUwMDNlbmxoLVx1MDAzZW5sbXNnX3NlcSwgdy1cdTAwM2VmbGFncyk7XG4rXHRcdFx0XHRcdCAgICBkdW1wLVx1MDAzZWNiLVx1MDAzZW5saC1cdTAwM2VubG1zZ19zZXEsIHctXHUwMDNlZmxhZ3MsXG4rXHRcdFx0XHRcdCAgICBSVEFfREVMX1JFQVNPTl9VTlNQRUMpO1xuIFx0XHRcdGlmIChlcnIpXG4gXHRcdFx0XHRyZXR1cm4gZXJyO1xuIFxuQEAgLTYxMDMsNyArNjEyMCw4IEBAIGludCBydDZfZHVtcF9yb3V0ZShzdHJ1Y3QgZmliNl9pbmZvICpydCwgdm9pZCAqcF9hcmcsIHVuc2lnbmVkIGludCBza2lwKVxuIFx0XHRcdGlmIChydDZfZmlsbF9ub2RlKG5ldCwgYXJnLVx1MDAzZXNrYiwgcnQsIE5VTEwsIE5VTEwsIE5VTEwsXG4gXHRcdFx0XHRcdCAgMCwgUlRNX05FV1JPVVRFLFxuIFx0XHRcdFx0XHQgIE5FVExJTktfQ0IoYXJnLVx1MDAzZWNiLVx1MDAzZXNrYikucG9ydGlkLFxuLVx0XHRcdFx0XHQgIGFyZy1cdTAwM2VjYi1cdTAwM2VubGgtXHUwMDNlbmxtc2dfc2VxLCBmbGFncykpIHtcbitcdFx0XHRcdFx0ICBhcmctXHUwMDNlY2ItXHUwMDNlbmxoLVx1MDAzZW5sbXNnX3NlcSwgZmxhZ3MsXG4rXHRcdFx0XHRcdCAgUlRBX0RFTF9SRUFTT05fVU5TUEVDKSkge1xuIFx0XHRcdFx0cmV0dXJuIDA7XG4gXHRcdFx0fVxuIFx0XHRcdGNvdW50Kys7XG5AQCAtNjMzNiwxMiArNjM1NCwxNCBAQCBzdGF0aWMgaW50IGluZXQ2X3J0bV9nZXRyb3V0ZShzdHJ1Y3Qgc2tfYnVmZiAqaW5fc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCxcbiBcdFx0XHRlcnIgPSBydDZfZmlsbF9ub2RlKG5ldCwgc2tiLCBmcm9tLCBOVUxMLCBOVUxMLCBOVUxMLFxuIFx0XHRcdFx0XHQgICAgaWlmLCBSVE1fTkVXUk9VVEUsXG4gXHRcdFx0XHRcdCAgICBORVRMSU5LX0NCKGluX3NrYikucG9ydGlkLFxuLVx0XHRcdFx0XHQgICAgbmxoLVx1MDAzZW5sbXNnX3NlcSwgMCk7XG4rXHRcdFx0XHRcdCAgICBubGgtXHUwMDNlbmxtc2dfc2VxLCAwLFxuK1x0XHRcdFx0XHQgICAgUlRBX0RFTF9SRUFTT05fVU5TUEVDKTtcbiBcdFx0ZWxzZVxuIFx0XHRcdGVyciA9IHJ0Nl9maWxsX25vZGUobmV0LCBza2IsIGZyb20sIGRzdCwgXHUwMDI2Zmw2LmRhZGRyLFxuIFx0XHRcdFx0XHQgICAgXHUwMDI2Zmw2LnNhZGRyLCBpaWYsIFJUTV9ORVdST1VURSxcbiBcdFx0XHRcdFx0ICAgIE5FVExJTktfQ0IoaW5fc2tiKS5wb3J0aWQsXG4tXHRcdFx0XHRcdCAgICBubGgtXHUwMDNlbmxtc2dfc2VxLCAwKTtcbitcdFx0XHRcdFx0ICAgIG5saC1cdTAwM2VubG1zZ19zZXEsIDAsXG4rXHRcdFx0XHRcdCAgICBSVEFfREVMX1JFQVNPTl9VTlNQRUMpO1xuIFx0fSBlbHNlIHtcbiBcdFx0ZXJyID0gLUVORVRVTlJFQUNIO1xuIFx0fVxuQEAgLTYzNTgsNyArNjM3OCw3IEBAIHN0YXRpYyBpbnQgaW5ldDZfcnRtX2dldHJvdXRlKHN0cnVjdCBza19idWZmICppbl9za2IsIHN0cnVjdCBubG1zZ2hkciAqbmxoLFxuIH1cbiBcbiB2b2lkIGluZXQ2X3J0X25vdGlmeShpbnQgZXZlbnQsIHN0cnVjdCBmaWI2X2luZm8gKnJ0LCBzdHJ1Y3QgbmxfaW5mbyAqaW5mbyxcbi1cdFx0ICAgICB1bnNpZ25lZCBpbnQgbmxtX2ZsYWdzKVxuK1x0XHQgICAgIHVuc2lnbmVkIGludCBubG1fZmxhZ3MsIHUzMiBkZWxfcmVhc29uKVxuIHtcbiBcdHN0cnVjdCBuZXQgKm5ldCA9IGluZm8tXHUwMDNlbmxfbmV0O1xuIFx0c3RydWN0IHNrX2J1ZmYgKnNrYjtcbkBAIC02Mzc3LDcgKzYzOTcsOCBAQCB2b2lkIGluZXQ2X3J0X25vdGlmeShpbnQgZXZlbnQsIHN0cnVjdCBmaWI2X2luZm8gKnJ0LCBzdHJ1Y3QgbmxfaW5mbyAqaW5mbyxcbiBcdFx0Z290byBlcnJvdXQ7XG4gXG4gXHRlcnIgPSBydDZfZmlsbF9ub2RlKG5ldCwgc2tiLCBydCwgTlVMTCwgTlVMTCwgTlVMTCwgMCxcbi1cdFx0XHQgICAgZXZlbnQsIGluZm8tXHUwMDNlcG9ydGlkLCBzZXEsIG5sbV9mbGFncyk7XG4rXHRcdFx0ICAgIGV2ZW50LCBpbmZvLVx1MDAzZXBvcnRpZCwgc2VxLCBubG1fZmxhZ3MsXG4rXHRcdFx0ICAgIGRlbF9yZWFzb24pO1xuIFx0aWYgKGVyciBcdTAwM2MgMCkge1xuIFx0XHRrZnJlZV9za2Ioc2tiKTtcbiBcdFx0LyogLUVNU0dTSVpFIGltcGxpZXMgbmVlZGVkIHNwYWNlIGdyZXcgdW5kZXIgdXMuICovXG5AQCAtNjQxMCw3ICs2NDMxLDggQEAgdm9pZCBmaWI2X3J0X3VwZGF0ZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBmaWI2X2luZm8gKnJ0LFxuIFx0XHRnb3RvIGVycm91dDtcbiBcbiBcdGVyciA9IHJ0Nl9maWxsX25vZGUobmV0LCBza2IsIHJ0LCBOVUxMLCBOVUxMLCBOVUxMLCAwLFxuLVx0XHRcdCAgICBSVE1fTkVXUk9VVEUsIGluZm8tXHUwMDNlcG9ydGlkLCBzZXEsIE5MTV9GX1JFUExBQ0UpO1xuK1x0XHRcdCAgICBSVE1fTkVXUk9VVEUsIGluZm8tXHUwMDNlcG9ydGlkLCBzZXEsIE5MTV9GX1JFUExBQ0UsXG4rXHRcdFx0ICAgIFJUQV9ERUxfUkVBU09OX1VOU1BFQyk7XG4gXHRpZiAoZXJyIFx1MDAzYyAwKSB7XG4gXHRcdC8qIC1FTVNHU0laRSBpbXBsaWVzIEJVRyBpbiBydDZfbmxtc2dfc2l6ZSgpICovXG4gXHRcdFdBUk5fT04oZXJyID09IC1FTVNHU0laRSk7XG5AQCAtNjQ2Myw3ICs2NDg1LDcgQEAgdm9pZCBmaWI2X2luZm9faHdfZmxhZ3Nfc2V0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZpYjZfaW5mbyAqZjZpLFxuIFx0fVxuIFxuIFx0ZXJyID0gcnQ2X2ZpbGxfbm9kZShuZXQsIHNrYiwgZjZpLCBOVUxMLCBOVUxMLCBOVUxMLCAwLCBSVE1fTkVXUk9VVEUsIDAsXG4tXHRcdFx0ICAgIDAsIDApO1xuK1x0XHRcdCAgICAwLCAwLCBSVEFfREVMX1JFQVNPTl9VTlNQRUMpO1xuIFx0aWYgKGVyciBcdTAwM2MgMCkge1xuIFx0XHQvKiAtRU1TR1NJWkUgaW1wbGllcyBCVUcgaW4gcnQ2X25sbXNnX3NpemUoKSAqL1xuIFx0XHRXQVJOX09OKGVyciA9PSAtRU1TR1NJWkUpO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9saWIvcHkvX19pbml0X18ucHkgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbGliL3B5L19faW5pdF9fLnB5XG5pbmRleCBlNThiZGJkYzU4ZWVhZC4uMzQ5MzU4ODZiNmFkZmUgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbGliL3B5L19faW5pdF9fLnB5XG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbGliL3B5L19faW5pdF9fLnB5XG5AQCAtMTcsNyArMTcsNyBAQCBmcm9tIC51dGlscyBpbXBvcnQgQ21kRXhpdEZhaWx1cmUsIGZkX3JlYWRfdGltZW91dCwgY21kLCBia2csIGRlZmVyLCBcXFxuICAgICB3YWl0X2ZpbGUsIHRvb2wsIHRjXG4gZnJvbSAuYnBmIGltcG9ydCBicGZfbWFwX3NldCwgYnBmX21hcF9kdW1wLCBicGZfcHJvZ19tYXBfaWRzXG4gZnJvbSAueW5sIGltcG9ydCBObEVycm9yLCBObGN0cmxGYW1pbHksIFlubEZhbWlseSwgXFxcbi0gICAgRXRodG9vbEZhbWlseSwgTmV0ZGV2RmFtaWx5LCBSdG5sRmFtaWx5LCBSdG5sQWRkckZhbWlseVxuKyAgICBFdGh0b29sRmFtaWx5LCBOZXRkZXZGYW1pbHksIFJ0bmxGYW1pbHksIFJ0bmxBZGRyRmFtaWx5LCBSdG5sUm91dGVGYW1pbHlcbiBmcm9tIC55bmwgaW1wb3J0IE5ldHNoYXBlckZhbWlseSwgRGV2bGlua0ZhbWlseSwgUFNQRmFtaWx5LCBOZXRsaW5rXG4gXG4gX19hbGxfXyA9IFtcIktTUkNcIixcbkBAIC0zNCw0ICszNCw0IEBAIF9fYWxsX18gPSBbXCJLU1JDXCIsXG4gICAgICAgICAgICBcIk5ldGRldlNpbVwiLCBcIk5ldGRldlNpbURldlwiLFxuICAgICAgICAgICAgXCJOZXRzaGFwZXJGYW1pbHlcIiwgXCJEZXZsaW5rRmFtaWx5XCIsIFwiUFNQRmFtaWx5XCIsIFwiTmxFcnJvclwiLFxuICAgICAgICAgICAgXCJZbmxGYW1pbHlcIiwgXCJFdGh0b29sRmFtaWx5XCIsIFwiTmV0ZGV2RmFtaWx5XCIsIFwiUnRubEZhbWlseVwiLFxuLSAgICAgICAgICAgXCJObGN0cmxGYW1pbHlcIiwgXCJSdG5sQWRkckZhbWlseVwiLCBcIk5ldGxpbmtcIl1cbisgICAgICAgICAgIFwiTmxjdHJsRmFtaWx5XCIsIFwiUnRubEFkZHJGYW1pbHlcIiwgXCJSdG5sUm91dGVGYW1pbHlcIiwgXCJOZXRsaW5rXCJdXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2xpYi9weS95bmwucHkgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbGliL3B5L3lubC5weVxuaW5kZXggMmU1NjcwNjJhYTZjY2UuLjA4ZGVmZjc1NmYyOWIwIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2xpYi9weS95bmwucHlcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9saWIvcHkveW5sLnB5XG5AQCAtMjksNyArMjksNyBAQCBleGNlcHQgTW9kdWxlTm90Rm91bmRFcnJvciBhcyBlOlxuIFxuIF9fYWxsX18gPSBbXG4gICAgIFwiTmxFcnJvclwiLCBcIk5sUG9saWN5XCIsIFwiTmV0bGlua1wiLCBcIllubEZhbWlseVwiLCBcIlNQRUNfUEFUSFwiLFxuLSAgICBcIkV0aHRvb2xGYW1pbHlcIiwgXCJSdG5sRmFtaWx5XCIsIFwiUnRubEFkZHJGYW1pbHlcIixcbisgICAgXCJFdGh0b29sRmFtaWx5XCIsIFwiUnRubEZhbWlseVwiLCBcIlJ0bmxBZGRyRmFtaWx5XCIsIFwiUnRubFJvdXRlRmFtaWx5XCIsXG4gICAgIFwiTmV0ZGV2RmFtaWx5XCIsIFwiTmV0c2hhcGVyRmFtaWx5XCIsIFwiTmxjdHJsRmFtaWx5XCIsIFwiRGV2bGlua0ZhbWlseVwiLFxuICAgICBcIlBTUEZhbWlseVwiLFxuIF1cbkBAIC01NCw2ICs1NCwxMSBAQCBjbGFzcyBSdG5sQWRkckZhbWlseShZbmxGYW1pbHkpOlxuICAgICAgICAgc3VwZXIoKS5fX2luaXRfXygoU1BFQ19QQVRIIC8gUGF0aCgncnQtYWRkci55YW1sJykpLmFzX3Bvc2l4KCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHNjaGVtYT0nJywgcmVjdl9zaXplPXJlY3Zfc2l6ZSlcbiBcbitjbGFzcyBSdG5sUm91dGVGYW1pbHkoWW5sRmFtaWx5KTpcbisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHJlY3Zfc2l6ZT0wKTpcbisgICAgICAgIHN1cGVyKCkuX19pbml0X18oKFNQRUNfUEFUSCAvIFBhdGgoJ3J0LXJvdXRlLnlhbWwnKSkuYXNfcG9zaXgoKSxcbisgICAgICAgICAgICAgICAgICAgICAgICAgc2NoZW1hPScnLCByZWN2X3NpemU9cmVjdl9zaXplKVxuK1xuIGNsYXNzIE5ldGRldkZhbWlseShZbmxGYW1pbHkpOlxuICAgICBkZWYgX19pbml0X18oc2VsZiwgcmVjdl9zaXplPTApOlxuICAgICAgICAgc3VwZXIoKS5fX2luaXRfXygoU1BFQ19QQVRIIC8gUGF0aCgnbmV0ZGV2LnlhbWwnKSkuYXNfcG9zaXgoKSxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvcnRuZXRsaW5rLnB5IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3J0bmV0bGluay5weVxuaW5kZXggMGM2N2M3YzAwZDg0MWMuLmY3NGNjZDVjMmQxM2FhIDEwMDc1NVxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3J0bmV0bGluay5weVxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3J0bmV0bGluay5weVxuQEAgLTUsNyArNSw4IEBAIGltcG9ydCBzb2NrZXRcbiBpbXBvcnQgc3RydWN0XG4gaW1wb3J0IHRpbWVcbiBmcm9tIGxpYi5weSBpbXBvcnQgYmtnLCBpcCwga3NmdF9leGl0LCBrc2Z0X3J1biwga3NmdF9lcSwga3NmdF9nZSwga3NmdF90cnVlLCBLc2Z0U2tpcEV4XG4tZnJvbSBsaWIucHkgaW1wb3J0IENtZEV4aXRGYWlsdXJlLCBOZXROUywgTmV0TlNFbnRlciwgUnRubEFkZHJGYW1pbHlcbitmcm9tIGxpYi5weSBpbXBvcnQga3NmdF9ub3RfaW4sIGtzZnRfbm90X25vbmVcbitmcm9tIGxpYi5weSBpbXBvcnQgQ21kRXhpdEZhaWx1cmUsIE5ldE5TLCBOZXROU0VudGVyLCBSdG5sQWRkckZhbWlseSwgUnRubFJvdXRlRmFtaWx5XG4gXG4gSVBWNF9BTExfSE9TVFNfTVVMVElDQVNUID0gYidcXHhlMFxceDAwXFx4MDBcXHgwMSdcbiBJUFY0X1RFU1RfTVVMVElDQVNUID0gYidcXHhlZlxceDAxXFx4MDFcXHgwMSdcbkBAIC0xMzQsOCArMTM1LDE4NCBAQCBkZWYgaXB2NF9kZXZjb25mX25vdGlmeSgpIC1cdTAwM2UgTm9uZTpcbiAgICAga3NmdF90cnVlKGZcImluZXQge2lmbmFtZX0gZm9yd2FyZGluZyBvblwiIGluIGNtZF9vYmouc3Rkb3V0LFxuICAgICAgICAgICAgICAgZlwiTm8gJ2ZvcndhcmRpbmcgb24nIG5vdGlmaWNpYXRpb24gZm91bmQgZm9yIGludGVyZmFjZSB7aWZuYW1lfVwiKVxuIFxuK2RlZiBfcnRubF9yb3V0ZV9zdWJzY3JpYmUobnMpOlxuKyAgICB3aXRoIE5ldE5TRW50ZXIoc3RyKG5zKSk6XG4rICAgICAgICBydG5sID0gUnRubFJvdXRlRmFtaWx5KClcbisgICAgcnRubC5udGZfc3Vic2NyaWJlKFwicnRubGdycC1pcHY2LXJvdXRlXCIpXG4rICAgIHJldHVybiBydG5sXG4rXG4rXG4rZGVmIF93YWl0X3JvdXRlX250ZihydG5sLCBuYW1lLCBkc3RfbGVuLCBkc3Q9Tm9uZSwgZGVhZGxpbmU9MTApOlxuKyAgICBcIlwiXCJSZXR1cm4gdGhlIGF0dHJzIG9mIHRoZSBmaXJzdCBtYXRjaGluZyBub3RpZmljYXRpb24sIE5vbmUgb24gdGltZW91dC5cIlwiXCJcbitcbisgICAgZm9yIG1zZyBpbiBydG5sLnBvbGxfbnRmKGR1cmF0aW9uPWRlYWRsaW5lKTpcbisgICAgICAgIGlmIG1zZ1snbmFtZSddICE9IG5hbWU6XG4rICAgICAgICAgICAgY29udGludWVcbisgICAgICAgIGF0dHJzID0gbXNnWydtc2cnXVxuKyAgICAgICAgaWYgYXR0cnNbJ3J0bS1kc3QtbGVuJ10gIT0gZHN0X2xlbjpcbisgICAgICAgICAgICBjb250aW51ZVxuKyAgICAgICAgaWYgZHN0IGlzIG5vdCBOb25lIGFuZCBhdHRycy5nZXQoJ2RzdCcpICE9IGRzdDpcbisgICAgICAgICAgICBjb250aW51ZVxuKyAgICAgICAgcmV0dXJuIGF0dHJzXG4rICAgIHJldHVybiBOb25lXG4rXG4rXG4rZGVmIF9jb2xsZWN0X3JvdXRlX250ZnMocnRubCwgbmFtZSwgd2FudCwgZGVhZGxpbmU9MTApOlxuKyAgICBcIlwiXCJHYXRoZXIgYXR0cnMgb2YgbWF0Y2hpbmcgbm90aWZpY2F0aW9ucywga2V5ZWQgYnkgKGRzdF9sZW4sIGRzdCkuXCJcIlwiXG4rXG4rICAgIHNlZW4gPSB7fVxuKyAgICBmb3IgbXNnIGluIHJ0bmwucG9sbF9udGYoZHVyYXRpb249ZGVhZGxpbmUpOlxuKyAgICAgICAgaWYgbXNnWyduYW1lJ10gIT0gbmFtZTpcbisgICAgICAgICAgICBjb250aW51ZVxuKyAgICAgICAgYXR0cnMgPSBtc2dbJ21zZyddXG4rICAgICAgICBrZXkgPSAoYXR0cnNbJ3J0bS1kc3QtbGVuJ10sIGF0dHJzLmdldCgnZHN0JykpXG4rICAgICAgICBpZiBrZXkgaW4gd2FudDpcbisgICAgICAgICAgICBzZWVuW2tleV0gPSBhdHRyc1xuKyAgICAgICAgICAgIGlmIGxlbihzZWVuKSA9PSBsZW4od2FudCk6XG4rICAgICAgICAgICAgICAgIGJyZWFrXG4rICAgIHJldHVybiBzZWVuXG4rXG4rXG4rZGVmIF93cml0ZV9pcHY2X3N5c2N0bChuYW1lLCB2YWx1ZSk6XG4rICAgIHdpdGggb3BlbihmXCIvcHJvYy9zeXMvbmV0L2lwdjYve25hbWV9XCIsIFwid1wiKSBhcyBmOlxuKyAgICAgICAgZi53cml0ZShmXCJ7dmFsdWV9XFxuXCIpXG4rXG4rXG4rZGVmIGlwdjZfcm91dGVfZGVsX3JlYXNvbl9leHBpcmVkKCkgLVx1MDAzZSBOb25lOlxuKyAgICBcIlwiXCJBbiBleHBpcmVkIHJvdXRlIHJlcG9ydHMgUlRBX0RFTF9SRUFTT04gPT0gZXhwaXJlZC5cIlwiXCJcbitcbisgICAgd2l0aCBOZXROUygpIGFzIG5zOlxuKyAgICAgICAgcnRubCA9IF9ydG5sX3JvdXRlX3N1YnNjcmliZShucylcbisgICAgICAgIHdpdGggTmV0TlNFbnRlcihzdHIobnMpKTpcbisgICAgICAgICAgICBfd3JpdGVfaXB2Nl9zeXNjdGwoXCJyb3V0ZS9nY19pbnRlcnZhbFwiLCAyKVxuKyAgICAgICAgaXAoXCJsaW5rIGFkZCBuYW1lIGR1bW15MSB0eXBlIGR1bW15XCIsIG5zPXN0cihucykpXG4rICAgICAgICBpcChcImxpbmsgc2V0IGRldiBkdW1teTEgdXBcIiwgbnM9c3RyKG5zKSlcbisgICAgICAgIGlwKFwiLTYgcm91dGUgYWRkIDIwMDE6ZGI4OjI6Oi82NCBkZXYgZHVtbXkxIGV4cGlyZXMgMlwiLCBucz1zdHIobnMpKVxuK1xuKyAgICAgICAgYXR0cnMgPSBfd2FpdF9yb3V0ZV9udGYocnRubCwgJ2RlbHJvdXRlLW50ZicsIDY0LCAnMjAwMTpkYjg6Mjo6JyxcbisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlYWRsaW5lPTE1KVxuKyAgICAgICAga3NmdF9ub3Rfbm9uZShhdHRycywgXCJubyBSVE1fREVMUk9VVEUgZm9yIHRoZSBleHBpcmVkIHJvdXRlXCIpXG4rICAgICAgICBpZiBhdHRycyBpcyBub3QgTm9uZTpcbisgICAgICAgICAgICBrc2Z0X2VxKGF0dHJzLmdldCgnZGVsLXJlYXNvbicpLCAnZXhwaXJlZCcpXG4rXG4rXG4rZGVmIF9zZW5kX3JhKHNvY2ssIGlmaW5kZXgsIGxpZmV0aW1lLCByaW89Tm9uZSwgcGlvPU5vbmUpOlxuKyAgICBcIlwiXCJUaGUga2VybmVsIGZpbGxzIGluIHRoZSBJQ01QdjYgY2hlY2tzdW0gb24gcmF3IElDTVB2NiBzb2NrZXRzLlwiXCJcIlxuK1xuKyAgICAjIHR5cGUsIGNvZGUsIGNrc3VtLCBob3AgbGltaXQsIGZsYWdzLCByb3V0ZXIgbGlmZXRpbWUsXG4rICAgICMgcmVhY2hhYmxlIHRpbWUsIHJldHJhbnMgdGltZXJcbisgICAgcmEgPSBzdHJ1Y3QucGFjaygnIUJCSEJCSElJJywgMTM0LCAwLCAwLCA2NCwgMCwgbGlmZXRpbWUsIDAsIDApXG4rICAgIGlmIHJpbyBpcyBub3QgTm9uZTpcbisgICAgICAgIHByZWZpeCwgcGxlbiwgcmlvX2xpZmV0aW1lID0gcmlvXG4rICAgICAgICAjIFJGQyA0MTkxIHJvdXRlIGluZm9ybWF0aW9uIG9wdGlvbiwgLzY0IHByZWZpeCAoOCBieXRlcylcbisgICAgICAgIHJhICs9IHN0cnVjdC5wYWNrKCchQkJCQkknLCAyNCwgMiwgcGxlbiwgMCwgcmlvX2xpZmV0aW1lKVxuKyAgICAgICAgcmEgKz0gc29ja2V0LmluZXRfcHRvbihzb2NrZXQuQUZfSU5FVDYsIHByZWZpeClbOjhdXG4rICAgIGlmIHBpbyBpcyBub3QgTm9uZTpcbisgICAgICAgIHByZWZpeCwgcGxlbiwgdmFsaWRfbGZ0ID0gcGlvXG4rICAgICAgICAjIFJGQyA0ODYxIHByZWZpeCBpbmZvcm1hdGlvbiBvcHRpb24sIG9uLWxpbmsgb25seSAoTCBzZXQsIEEgY2xlYXIpXG4rICAgICAgICByYSArPSBzdHJ1Y3QucGFjaygnIUJCQkJJSUknLCAzLCA0LCBwbGVuLCAweDgwLCB2YWxpZF9sZnQsIDAsIDApXG4rICAgICAgICByYSArPSBzb2NrZXQuaW5ldF9wdG9uKHNvY2tldC5BRl9JTkVUNiwgcHJlZml4KVxuKyAgICBzb2NrLnNlbmR0byhyYSwgKCdmZjAyOjoxJywgMCwgMCwgaWZpbmRleCkpXG4rXG4rXG4rZGVmIF9yYV9yb3V0ZXJfc29jayhuc19yLCBpZm5hbWUpOlxuKyAgICB3aXRoIE5ldE5TRW50ZXIoc3RyKG5zX3IpKTpcbisgICAgICAgIHNvY2sgPSBzb2NrZXQuc29ja2V0KHNvY2tldC5BRl9JTkVUNiwgc29ja2V0LlNPQ0tfUkFXLFxuKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc29ja2V0LklQUFJPVE9fSUNNUFY2KVxuKyAgICAgICAgc29jay5zZXRzb2Nrb3B0KHNvY2tldC5JUFBST1RPX0lQVjYsIHNvY2tldC5JUFY2X01VTFRJQ0FTVF9IT1BTLCAyNTUpXG4rICAgICAgICByZXR1cm4gc29jaywgc29ja2V0LmlmX25hbWV0b2luZGV4KGlmbmFtZSlcbitcbitcbitkZWYgX3JhX2FkdmVydGlzZV9yb3V0ZXMocnRubCwgc29jaywgaWZpbmRleCwgd2FudCwgKipyYV9vcHRzKTpcbisgICAgXCJcIlwiXG4rICAgIFNlbmRpbmcgZmFpbHMgd2l0aCBFQUREUk5PVEFWQUlMIHVudGlsIHRoZSByb3V0ZXIncyBsaW5rLWxvY2FsXG4rICAgIGFkZHJlc3MgcGFzc2VzIERBRCwgc28gcmV0cnkuXG4rICAgIFwiXCJcIlxuK1xuKyAgICBzZWVuID0ge31cbisgICAgZm9yIF8gaW4gcmFuZ2UoMTApOlxuKyAgICAgICAgdHJ5OlxuKyAgICAgICAgICAgIF9zZW5kX3JhKHNvY2ssIGlmaW5kZXgsICoqcmFfb3B0cylcbisgICAgICAgIGV4Y2VwdCBPU0Vycm9yOlxuKyAgICAgICAgICAgIHRpbWUuc2xlZXAoMC4yKVxuKyAgICAgICAgICAgIGNvbnRpbnVlXG4rICAgICAgICBzZWVuLnVwZGF0ZShfY29sbGVjdF9yb3V0ZV9udGZzKHJ0bmwsICduZXdyb3V0ZS1udGYnLFxuKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3YW50IC0gc2V0KHNlZW4ua2V5cygpKSwgZGVhZGxpbmU9MikpXG4rICAgICAgICBpZiBsZW4oc2VlbikgPT0gbGVuKHdhbnQpOlxuKyAgICAgICAgICAgIGJyZWFrXG4rICAgIHJldHVybiBzZWVuXG4rXG4rXG4rZGVmIGlwdjZfcm91dGVfZGVsX3JlYXNvbl9yYV93aXRoZHJhd24oKSAtXHUwMDNlIE5vbmU6XG4rICAgIFwiXCJcIlxuKyAgICBSb3V0ZXMgd2l0aGRyYXduIGJ5IGEgemVyby1saWZldGltZSBSQSAocm91dGVyIGxpZmV0aW1lLCBSRkMgNDg2MVxuKyAgICBQSU8sIFJGQyA0MTkxIFJJTykgcmVwb3J0IFJUQV9ERUxfUkVBU09OID09IHJhLXdpdGhkcmF3bi5cbisgICAgXCJcIlwiXG4rXG4rICAgICMgKHJ0bS1kc3QtbGVuLCBkc3QpOyB0aGUgZGVmYXVsdCByb3V0ZSBjYXJyaWVzIG5vIFJUQV9EU1RcbisgICAgcm91dGVzID0geygwLCBOb25lKSwgKDY0LCAnMjAwMTpkYjg6Njo6JyksICg2NCwgJzIwMDE6ZGI4OjU6OicpfVxuK1xuKyAgICB3aXRoIE5ldE5TKCkgYXMgbnNfaCwgTmV0TlMoKSBhcyBuc19yOlxuKyAgICAgICAgaXAoZlwibGluayBhZGQgdmV0aDAgbmV0bnMge25zX2h9IHR5cGUgdmV0aCBwZWVyIG5hbWUgdmV0aDEgbmV0bnMge25zX3J9XCIpXG4rICAgICAgICB3aXRoIE5ldE5TRW50ZXIoc3RyKG5zX2gpKTpcbisgICAgICAgICAgICBfd3JpdGVfaXB2Nl9zeXNjdGwoXCJjb25mL3ZldGgwL2FjY2VwdF9yYVwiLCAyKVxuKyAgICAgICAgICAgIF93cml0ZV9pcHY2X3N5c2N0bChcImNvbmYvdmV0aDAvZm9yd2FyZGluZ1wiLCAwKVxuKyAgICAgICAgICAgIHRyeTpcbisgICAgICAgICAgICAgICAgX3dyaXRlX2lwdjZfc3lzY3RsKFwiY29uZi92ZXRoMC9hY2NlcHRfcmFfcnRfaW5mb19tYXhfcGxlblwiLCA2NClcbisgICAgICAgICAgICBleGNlcHQgRmlsZU5vdEZvdW5kRXJyb3I6XG4rICAgICAgICAgICAgICAgIHJhaXNlIEtzZnRTa2lwRXgoXCJubyBDT05GSUdfSVBWNl9ST1VURV9JTkZPXCIpXG4rICAgICAgICB3aXRoIE5ldE5TRW50ZXIoc3RyKG5zX3IpKTpcbisgICAgICAgICAgICAjIHNraXAgREFEIHNvIHRoZSByb3V0ZXIncyBsaW5rLWxvY2FsIHNvdXJjZSBpcyB1c2FibGUgcmlnaHQgYXdheVxuKyAgICAgICAgICAgIF93cml0ZV9pcHY2X3N5c2N0bChcImNvbmYvdmV0aDEvYWNjZXB0X2RhZFwiLCAwKVxuKyAgICAgICAgaXAoXCJsaW5rIHNldCBkZXYgdmV0aDAgdXBcIiwgbnM9c3RyKG5zX2gpKVxuKyAgICAgICAgaXAoXCJsaW5rIHNldCBkZXYgdmV0aDEgdXBcIiwgbnM9c3RyKG5zX3IpKVxuK1xuKyAgICAgICAgcnRubCA9IF9ydG5sX3JvdXRlX3N1YnNjcmliZShuc19oKVxuKyAgICAgICAgc29jaywgaWZpbmRleCA9IF9yYV9yb3V0ZXJfc29jayhuc19yLCBcInZldGgxXCIpXG4rXG4rICAgICAgICBzZWVuID0gX3JhX2FkdmVydGlzZV9yb3V0ZXMocnRubCwgc29jaywgaWZpbmRleCwgcm91dGVzLFxuKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpZmV0aW1lPTE4MDAsXG4rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmlvPSgnMjAwMTpkYjg6NTo6JywgNjQsIDYwMCksXG4rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGlvPSgnMjAwMTpkYjg6Njo6JywgNjQsIDYwMCkpXG4rICAgICAgICBrc2Z0X2VxKHNldChzZWVuKSwgcm91dGVzLCBcIm5vdCBhbGwgUkEgcm91dGVzIHdlcmUgaW5zdGFsbGVkXCIpXG4rICAgICAgICBpZiBzZXQoc2VlbikgIT0gcm91dGVzOlxuKyAgICAgICAgICAgIHJldHVyblxuK1xuKyAgICAgICAgX3NlbmRfcmEoc29jaywgaWZpbmRleCwgMCwgcmlvPSgnMjAwMTpkYjg6NTo6JywgNjQsIDApLFxuKyAgICAgICAgICAgICAgICAgcGlvPSgnMjAwMTpkYjg6Njo6JywgNjQsIDApKVxuKyAgICAgICAgc2VlbiA9IF9jb2xsZWN0X3JvdXRlX250ZnMocnRubCwgJ2RlbHJvdXRlLW50ZicsIHJvdXRlcylcbisgICAgICAgIGZvciBrZXkgaW4gcm91dGVzOlxuKyAgICAgICAgICAgIGF0dHJzID0gc2Vlbi5nZXQoa2V5KVxuKyAgICAgICAgICAgIGtzZnRfbm90X25vbmUoYXR0cnMsIGZcIm5vIFJUTV9ERUxST1VURSBmb3Ige2tleX1cIilcbisgICAgICAgICAgICBpZiBhdHRycyBpcyBub3QgTm9uZTpcbisgICAgICAgICAgICAgICAga3NmdF9lcShhdHRycy5nZXQoJ2RlbC1yZWFzb24nKSwgJ3JhLXdpdGhkcmF3bicpXG4rXG4rXG4rZGVmIGlwdjZfcm91dGVfZGVsX3JlYXNvbl9hYnNlbnQoKSAtXHUwMDNlIE5vbmU6XG4rICAgIFwiXCJcIlxuKyAgICBBIGRlbGV0aW9uIHBhdGggdGhhdCByZWNvcmRzIG5vIGNhdXNlIChoZXJlIGEgdXNlcnNwYWNlIHJlcXVlc3QpXG4rICAgIG11c3Qgbm90IGNhcnJ5IFJUQV9ERUxfUkVBU09OIGF0IGFsbC5cbisgICAgXCJcIlwiXG4rXG4rICAgIHdpdGggTmV0TlMoKSBhcyBuczpcbisgICAgICAgIHJ0bmwgPSBfcnRubF9yb3V0ZV9zdWJzY3JpYmUobnMpXG4rICAgICAgICBpcChcImxpbmsgYWRkIG5hbWUgZHVtbXkxIHR5cGUgZHVtbXlcIiwgbnM9c3RyKG5zKSlcbisgICAgICAgIGlwKFwibGluayBzZXQgZGV2IGR1bW15MSB1cFwiLCBucz1zdHIobnMpKVxuKyAgICAgICAgaXAoXCItNiByb3V0ZSBhZGQgMjAwMTpkYjg6MTo6LzY0IGRldiBkdW1teTFcIiwgbnM9c3RyKG5zKSlcbisgICAgICAgIGlwKFwiLTYgcm91dGUgZGVsIDIwMDE6ZGI4OjE6Oi82NCBkZXYgZHVtbXkxXCIsIG5zPXN0cihucykpXG4rXG4rICAgICAgICBhdHRycyA9IF93YWl0X3JvdXRlX250ZihydG5sLCAnZGVscm91dGUtbnRmJywgNjQsICcyMDAxOmRiODoxOjonKVxuKyAgICAgICAga3NmdF9ub3Rfbm9uZShhdHRycywgXCJubyBSVE1fREVMUk9VVEUgZm9yIDIwMDE6ZGI4OjE6Oi82NFwiKVxuKyAgICAgICAgaWYgYXR0cnMgaXMgbm90IE5vbmU6XG4rICAgICAgICAgICAga3NmdF9ub3RfaW4oJ2RlbC1yZWFzb24nLCBhdHRycyxcbisgICAgICAgICAgICAgICAgICAgICAgICBcInVzZXIgZGVsZXRpb24gbXVzdCBub3QgY2FycnkgZGVsLXJlYXNvblwiKVxuK1xuK1xuIGRlZiBtYWluKCkgLVx1MDAzZSBOb25lOlxuLSAgICBrc2Z0X3J1bihbZHVtcF9tY2FkZHJfY2hlY2ssIGR1bXBfbWNhZGRyNl9jaGVjaywgaXB2NF9kZXZjb25mX25vdGlmeV0pXG4rICAgIGtzZnRfcnVuKFtkdW1wX21jYWRkcl9jaGVjaywgZHVtcF9tY2FkZHI2X2NoZWNrLCBpcHY0X2RldmNvbmZfbm90aWZ5LFxuKyAgICAgICAgICAgICAgaXB2Nl9yb3V0ZV9kZWxfcmVhc29uX2V4cGlyZWQsXG4rICAgICAgICAgICAgICBpcHY2X3JvdXRlX2RlbF9yZWFzb25fcmFfd2l0aGRyYXduLFxuKyAgICAgICAgICAgICAgaXB2Nl9yb3V0ZV9kZWxfcmVhc29uX2Fic2VudF0pXG4gICAgIGtzZnRfZXhpdCgpXG4gXG4gaWYgX19uYW1lX18gPT0gXCJfX21haW5fX1wiOlxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMjI6MzY6MDAuOTA2NDUyNTJaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4NzU2MDg2OTM5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgSVB2NiBSb3V0ZSBEZWxldGlvbiBOb3RpZmljYXRpb24gUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGdvdCB0aGlzIHBhdGNoIGFkZGluZyBhIGBSVEFfREVMX1JFQVNPTmAgYXR0cmlidXRlIHRvIElQdjYgcm91dGUgZGVsZXRpb24gbm90aWZpY2F0aW9ucyAoYFJUTV9ERUxST1VURWApLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCB0aGlzIGlzIGEgc29saWQgYWRkaXRpb247IHByb3ZpZGluZyBtb3JlIGluZm9ybWF0aW9uIGFib3V0ICp3aHkqIGEgcm91dGUgaXMgYmVpbmcgZGVsZXRlZCBzaG91bGQgYmUgaGVscGZ1bCBmb3IgZGVidWdnaW5nIGFuZCBtb25pdG9yaW5nLiBJIHNlZSBpdCdzIHRvdWNoaW5nIHNldmVyYWwgY29yZSBJUHY2IGZpbGVzOiBgbmV0L2lwdjYvcm91dGUuY2AsIGBuZXQvaXB2Ni9pcDZfZmliLmNgLCBgbmV0L2lwdjYvYWRkcmNvbmYuY2AsIGFuZCBgbmV0L2lwdjYvbmRpc2MuY2AsIGFsb25nIHdpdGggYSBoZWFkZXIgYW5kIGEgbmV3IFB5dGhvbiB0ZXN0LiBGdW5jdGlvbmFsbHksIGl0IHNlZW1zIHN0cmFpZ2h0Zm9yd2FyZDogYWRkaW5nIHRoZSBhdHRyaWJ1dGUgYW5kIHBvcHVsYXRpbmcgaXQgZm9yIGV4cGlyYXRpb24gb3IgUkEgd2l0aGRyYXdhbCBzY2VuYXJpb3MuXG5cbk5vdywgbGV0J3MgZHJpbGwgZG93bi4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hpY2ggZnVuY3Rpb25zIGFyZSBtb3N0IGNyaXRpY2FsIGZvciBmdXp6aW5nLiBJJ3ZlIHF1aWNrbHkgaWRlbnRpZmllZCBhIGxpc3Qgb2YgbW9kaWZpZWQgZnVuY3Rpb25zOiBgaXA2X2RlbF9ydF9yZWFzb25gLCBgZmliNl9kZWxgLCBgZmliNl9kZWxfcm91dGVgLCBgaW5ldDZfcnRfbm90aWZ5YCwgYHJ0Nl9maWxsX25vZGVgLCBgYWRkcmNvbmZfcHJlZml4X3JjdmAsIGBuZGlzY19yb3V0ZXJfZGlzY292ZXJ5YCwgYW5kIGBydDZfcm91dGVfcmN2YC5cblxuQSBxdWljayBhbmFseXNpcywgYW5kIGl0IHNlZW1zIHRoYXQgYHJ0Nl9maWxsX25vZGVgIGlzIGFuIGludGVybmFsIGhlbHBlciwgYnV0IGhlYXZpbHkgbW9kaWZpZWQuIEl0IHdpbGwgYmUgaW1wb3J0YW50IHRvIGZ1enosIGV2ZW4gdGhvdWdoIHN0YXRpYy4gYGluZXQ2X3J0X25vdGlmeWAgc2VlbXMgbGlrZSBhIHByaW1hcnkgY2FuZGlkYXRlIHNpbmNlIGl0J3MgaW52b2x2ZWQgaW4gdGhlIG5ldGxpbmsgbWVzc2FnZSBnZW5lcmF0aW9uLiBCb3RoIGBpcDZfZGVsX3J0X3JlYXNvbmAgYW5kIGBmaWI2X2RlbGAgYXJlIGdsb2JhbCwgYW5kIHRoZXJlZm9yZSBnb29kIGNhbmRpZGF0ZXMuIGBhZGRyY29uZl9wcmVmaXhfcmN2YCBpcyBhbHNvIGdsb2JhbCBhbmQgd29ydGggbm90aW5nLiAgYG5kaXNjX3JvdXRlcl9kaXNjb3ZlcnlgIGlzIGludGVybmFsIGFuZCBsZXNzIG9mIGEgY29uY2VybiwgYW5kIGBydDZfcm91dGVfcmN2YCBpcyBnbG9iYWwuXG5cbkZvY3VzaW5nIG9uIGBuZXQvaXB2Ni9yb3V0ZS5jYCBhbmQgYG5ldC9pcHY2L2lwNl9maWIuY2AsIEknbGwgZWxpbWluYXRlIGFueSBpbnRlcm5hbCBvciBpbmxpbmVkIGZ1bmN0aW9ucy4gVGhhdCBsZWF2ZXMgbWUgd2l0aCBgaXA2X2RlbF9ydF9yZWFzb25gLCBgZmliNl9kZWxgLCBgaW5ldDZfcnRfbm90aWZ5YCwgYHJ0Nl9yb3V0ZV9yY3ZgLCBhbmQgYGFkZHJjb25mX3ByZWZpeF9yY3ZgLiBUaGVzZSBhcmUgdGhlIGtleSBlbnRyeSBwb2ludHMgSSBuZWVkIHRvIGludmVzdGlnYXRlIGZ1cnRoZXIuXG5cbkZpbmFsbHksIEkgbmVlZCB0byBjaGVjayB0aGUgS2NvbmZpZyBvcHRpb25zLiBUaGUgY29kZSBsaXZlcyBpbiBgbmV0L2lwdjYvYCwgc28gaXQncyBvYnZpb3VzbHkgdGllZCB0byBgQ09ORklHX0lQVjZgLiBUaGUgdGVzdCBzY3JpcHQgbWVudGlvbnMgYENPTkZJR19JUFY2X1JPVVRFX0lORk9gIHJlbGF0ZWQgdG8gYGFjY2VwdF9yYV9ydF9pbmZvX21heF9wbGVuYC4gSSBzaG91bGQgY2hlY2sgd2hldGhlciBvciBub3QgdGhhdCdzIGFjdHVhbGx5IHJlcXVpcmVkIHRvIGNvbXBpbGUgdGhlIGNvZGUuIEFmdGVyIGEgcXVpY2sgbG9vaywgaXQgc2VlbXMgdGhhdCB0aGlzIGlzICpub3QqIHJlcXVpcmVkIGZvciBnZW5lcmFsIG9wZXJhdGlvbiwgYWx0aG91Z2ggSSBzaG91bGQgbG9vayBhdCBgcnQ2X3JvdXRlX3JjdmAgdG8gc2VlIHdoYXQgaXMgY29uZGl0aW9uYWxseSBjb21waWxlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI5NzUsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2NjIsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQyMjozNjowOS42NjI1NDE5NjlaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTgzNDI2NTUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInJ0Nl9yb3V0ZV9yY3ZcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjYvcm91dGUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2Ni9yb3V0ZS5jPTk2Mz1zdGF0aWMgYm9vbCBydDZfaXNfZ3dfb3Jfbm9uZXh0aG9wKGNvbnN0IHN0cnVjdCBmaWI2X3Jlc3VsdCAqcmVzKVxcbi0tXFxubmV0L2lwdjYvcm91dGUuYy05NjktI2lmZGVmIENPTkZJR19JUFY2X1JPVVRFX0lORk9cXG5uZXQvaXB2Ni9yb3V0ZS5jOjk3MDppbnQgcnQ2X3JvdXRlX3JjdihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1OCAqb3B0LCBpbnQgbGVuLFxcbm5ldC9pcHY2L3JvdXRlLmMtOTcxLVxcdFxcdCAgY29uc3Qgc3RydWN0IGluNl9hZGRyICpnd2FkZHIpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDIyOjM2OjA5Ljg0NTk3NDA3OVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMwMjMwOTQyMzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkludmVzdGlnYXRpbmcgSVB2NiBSb3V0ZSBSZWNlcHRpb24qKlxuXG5BbHJpZ2h0LCBzbyBJIHNlZSBgcnQ2X3JvdXRlX3JjdmAgLSB0aGF0J3Mgd2hlcmUgdGhlIElQdjYgcm91dGluZyBtYWdpYyBoYXBwZW5zLiBHb29kIHRvIGtub3cgaXQncyB1bmRlciBgQ09ORklHX0lQVjZfUk9VVEVfSU5GT2AsIHRoYXQncyB0aGUgb2J2aW91cyBwbGFjZSB0byBzdGFydC4gTm93LCBsZXQncyBkcmlsbCBkb3duIGludG8gaG93IHByZWZpeGVzIGFyZSBoYW5kbGVkLiBJJ20gZ29pbmcgdG8ganVtcCBzdHJhaWdodCBpbnRvIGBhZGRyY29uZl9wcmVmaXhfcmN2YCB3aXRoaW4gYG5ldC9pcHY2L2FkZHJjb25mLmNgLiBUaGF0IGZ1bmN0aW9uJ3MgZ290IHRvIGJlIHRoZSBjb3JlIG9mIHVuZGVyc3RhbmRpbmcgaG93IHByZWZpeGVzIGFyZSByZWNlaXZlZCBhbmQgcHJvY2Vzc2VkLCBhbmQgdGhhdCdzIGNyaXRpY2FsIGZvciBob3cgcm91dGluZyB0YWJsZXMgYXJlIGJ1aWx0IGFuZCBtYWludGFpbmVkLiBUaW1lIHRvIHNlZSB3aGF0IHRoYXQgY29kZSdzIHJlYWxseSBkb2luZyB1bmRlciB0aGUgaG9vZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQ0MzMsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQyMjozNjoxMi44NjkwNzE3NjVaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjE1OTkxNzg5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImFkZHJjb25mX3ByZWZpeF9yY3ZcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjYvYWRkcmNvbmYuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2Ni9hZGRyY29uZi5jPTEzNjk9c3RhdGljIGludCBpcHY2X2NyZWF0ZV90ZW1wYWRkcihzdHJ1Y3QgaW5ldDZfaWZhZGRyICppZnAsIGJvb2wgYmxvY2spXFxuLS1cXG5uZXQvaXB2Ni9hZGRyY29uZi5jLTE0ODMtXFx0Y2ZnLmlmYV9mbGFncyA9IElGQV9GX1RFTVBPUkFSWTtcXG5uZXQvaXB2Ni9hZGRyY29uZi5jOjE0ODQ6XFx0Lyogc2V0IGluIGFkZHJjb25mX3ByZWZpeF9yY3YoKSAqL1xcbm5ldC9pcHY2L2FkZHJjb25mLmMtMTQ4NS1cXHRpZiAoaWZwLVxcdTAwM2VmbGFncyBcXHUwMDI2IElGQV9GX09QVElNSVNUSUMpXFxuLS1cXG5uZXQvaXB2Ni9hZGRyY29uZi5jPTI2ODk9c3RhdGljIGJvb2wgaXNfYWRkcl9tb2RlX2dlbmVyYXRlX3N0YWJsZShzdHJ1Y3QgaW5ldDZfZGV2ICppZGV2KVxcbi0tXFxubmV0L2lwdjYvYWRkcmNvbmYuYy0yNjk0LVxcbm5ldC9pcHY2L2FkZHJjb25mLmM6MjY5NTppbnQgYWRkcmNvbmZfcHJlZml4X3Jjdl9hZGRfYWRkcihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxubmV0L2lwdjYvYWRkcmNvbmYuYy0yNjk2LVxcdFxcdFxcdFxcdCBjb25zdCBzdHJ1Y3QgcHJlZml4X2luZm8gKnBpbmZvLFxcbi0tXFxubmV0L2lwdjYvYWRkcmNvbmYuYy0yNzk1LX1cXG5uZXQvaXB2Ni9hZGRyY29uZi5jOjI3OTY6RVhQT1JUX1NZTUJPTF9HUEwoYWRkcmNvbmZfcHJlZml4X3Jjdl9hZGRfYWRkcik7XFxubmV0L2lwdjYvYWRkcmNvbmYuYy0yNzk3LVxcbm5ldC9pcHY2L2FkZHJjb25mLmM6Mjc5ODp2b2lkIGFkZHJjb25mX3ByZWZpeF9yY3Yoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTggKm9wdCwgaW50IGxlbiwgYm9vbCBzbGxhbylcXG5uZXQvaXB2Ni9hZGRyY29uZi5jLTI3OTkte1xcbi0tXFxubmV0L2lwdjYvYWRkcmNvbmYuYy0yOTQzLW9rOlxcbm5ldC9pcHY2L2FkZHJjb25mLmM6Mjk0NDpcXHRcXHRlcnIgPSBhZGRyY29uZl9wcmVmaXhfcmN2X2FkZF9hZGRyKG5ldCwgZGV2LCBwaW5mbywgaW42X2RldixcXG5uZXQvaXB2Ni9hZGRyY29uZi5jLTI5NDUtXFx0XFx0XFx0XFx0XFx0XFx0ICAgXFx1MDAyNmFkZHIsIGFkZHJfdHlwZSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMjI6MzY6MTMuMDg1MDg3NDMzWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzM3ODk4NTY0NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duLCBhcyBhIG5ldHdvcmtpbmcgZXhwZXJ0OlxuXG4qKkludmVzdGlnYXRpbmcgSVB2NiBDb25maWd1cmF0aW9uIERlcGVuZGVuY2llcyoqXG5cbkFscmlnaHQsIGxldCBtZSB0aGluayB0aGlzIHRocm91Z2guIGBhZGRyY29uZl9wcmVmaXhfcmN2YC4uLiByaWdodCwgdGhhdCBvbmUgc2VlbXMgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZC4gQXMgZmFyIGFzIEkgY2FuIHRlbGwsIGl0J3Mgbm90IG5lc3RsZWQgdW5kZXIgc29tZSBzcGVjaWZpYywgZ3JhbnVsYXIgY29uZmlndXJhdGlvbiBvcHRpb24uIEl0J3MganVzdCBpbmhlcmVudGx5IHRpZWQgdG8gdGhlIGJyb2FkZXIgYENPTkZJR19JUFY2YCBzZXR0aW5nLiBUaGF0IG1ha2VzIHNlbnNlLCBrZWVwcyB0aGluZ3MgcmVsYXRpdmVseSBjbGVhbi5cblxuTm93LCBob2xkIG9uLi4uIHdoYXQgYWJvdXQgYG5kaXNjX3JvdXRlcl9kaXNjb3ZlcnlgPyBJIG5lZWQgdG8gZG91YmxlLWNoZWNrIHRoYXQgb25lLiBJcyBpdCBzaW1pbGFybHkgdW5jb25zdHJhaW5lZCwganVzdCBlbmFibGVkIGJ5IHZpcnR1ZSBvZiBJUHY2IGJlaW5nIGVuYWJsZWQsIG9yIGRvZXMgaXQgaGF2ZSBpdHMgb3duIGxpdHRsZSB0b2dnbGUgc29tZXdoZXJlLCBvciBtYXliZSBkZXBlbmQgb24gYW5vdGhlciwgc21hbGxlciBjb25maWcgc2V0dGluZz8gSSBuZWVkIHRvIGNvbmZpcm0gaXRzIGRlcGVuZGVuY3kgc3RydWN0dXJlIHRvIGF2b2lkIGFueSBzdXJwcmlzZXMgZG93biB0aGUgbGluZSwgZXNwZWNpYWxseSB3aXRoIHJlZ2FyZHMgdG8gcmVzb3VyY2UgdXRpbGl6YXRpb24gYW5kIG1vZHVsZSBsb2FkaW5nLiBMZXQgbWUgbG9vayBkZWVwZXIgYXQgdGhhdCBjb25maWd1cmF0aW9uIG9wdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTUxNzEsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQyMjozNjoxNi40NjQwNzU4MzFaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjQ5MjQ1NDA3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5kaXNjX3JvdXRlcl9kaXNjb3ZlcnlcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjYvbmRpc2MuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2Ni9uZGlzYy5jPTExODI9c3RhdGljIHZvaWQgbmRpc2NfcmFfdXNlcm9wdChzdHJ1Y3Qgc2tfYnVmZiAqcmEsIHN0cnVjdCBuZF9vcHRfaGRyICpvcHQpXFxuLS1cXG5uZXQvaXB2Ni9uZGlzYy5jLTEyMzAtXFxubmV0L2lwdjYvbmRpc2MuYzoxMjMxOnN0YXRpYyBlbnVtIHNrYl9kcm9wX3JlYXNvbiBuZGlzY19yb3V0ZXJfZGlzY292ZXJ5KHN0cnVjdCBza19idWZmICpza2IpXFxubmV0L2lwdjYvbmRpc2MuYy0xMjMyLXtcXG4tLVxcbm5ldC9pcHY2L25kaXNjLmM9MTgwNj1lbnVtIHNrYl9kcm9wX3JlYXNvbiBuZGlzY19yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9pcHY2L25kaXNjLmMtMTg0NS1cXHRjYXNlIE5ESVNDX1JPVVRFUl9BRFZFUlRJU0VNRU5UOlxcbm5ldC9pcHY2L25kaXNjLmM6MTg0NjpcXHRcXHRyZWFzb24gPSBuZGlzY19yb3V0ZXJfZGlzY292ZXJ5KHNrYik7XFxubmV0L2lwdjYvbmRpc2MuYy0xODQ3LVxcdFxcdGJyZWFrO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQyMjozNjoxNi43MTMzMjk2MzhaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozODcwNzMyODIxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCdzIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipJbnZlc3RpZ2F0aW5nIElQdjYgUm91dGVyIERpc2NvdmVyeSBDb25maWd1cmF0aW9uKipcblxuUmlnaHQsIHNvIGBuZGlzY19yb3V0ZXJfZGlzY292ZXJ5YCBpcyBmbGFnZ2VkIGFzICpzdGF0aWMqLiBUaGlzIGltbWVkaWF0ZWx5IHJhaXNlcyBhIGZsYWcuIFdlIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgc3RhdGljIG5hdHVyZSB3aXRoaW4gdGhlIElQdjYgcm91dGluZyBjb250ZXh0LiBBcmUgd2UgdGFsa2luZyBjb21waWxlLXRpbWUgZml4ZWQsIG9yIGlzIHRoZXJlIGEgbGltaXRlZCBydW50aW1lIGNvbmZpZ3VyYXRpb24gdGhhdCdzIGJlaW5nIG92ZXJsb29rZWQ/IFRoZSBuZXh0IHN0ZXBzIGFyZSBvYnZpb3VzOiB3ZSBuZWVkIHRvIGRlbHZlIGRlZXBlciBpbnRvIGhvdyB0aGlzIHN0YXRpYyBmbGFnIGludGVyYWN0cyB3aXRoIHJvdXRlIGRlbGV0aW9uIHdpdGhpbiBJUHY2LlxuXG5NeSBmaXJzdCB0aG91Z2h0IGlzIHRvIHplcm8gaW4gb24gYGlwNl9kZWxfcnRfcmVhc29uYC4gVGhpcyBmdW5jdGlvbiBsaWtlbHkgc3BlY2lmaWVzICp3aHkqIGEgcm91dGUgaXMgYmVpbmcgcmVtb3ZlZC4gVW5kZXJzdGFuZGluZyB0aGUgcmVhc29uIOKAkyB3aGV0aGVyIGl0J3MgZHVlIHRvIHJvdXRlciBhZHZlcnRpc2VtZW50IGV4cGlyYXRpb24sIG5laWdoYm9yIGRpc2NvdmVyeSBjaGFuZ2VzLCBvciBzb21ldGhpbmcgZWxzZSBlbnRpcmVseSDigJMgd2lsbCBiZSBrZXkgdG8gdW5kZXJzdGFuZGluZyB0aGUgc3RhdGljIG5hdHVyZSdzIGltcGFjdC4gRG9lcyB0aGUgc3RhdGljIGNvbmZpZ3VyYXRpb24gZGlyZWN0bHkgaW5mbHVlbmNlIHRoZSByZWFzb25zIGEgcm91dGUgaXMgZWxpZ2libGUgZm9yIHJlbW92YWw/IE9yIGRvZXMgdGhpcyBhcHBseSB0byB0aGUgbmV4dCBzZWN0aW9uP1xuXG5UaGVuLCB3ZSBuZWVkIHRvIGltbWVkaWF0ZWx5IHVuZGVyc3RhbmQgdGhlIGZ1bmN0aW9uIGBmaWI2X2RlbGAuIFRoaXMgd291bGQgYmUgdGhlIGFjdHVhbCBmdW5jdGlvbiB0aGF0IGhhbmRsZXMgdGhlIHJvdXRlIHRhYmxlIGRlbGV0aW9uLiBJcyB0aGUgc3RhdGljIGZsYWcgYSBkaXJlY3QgcGFyYW1ldGVyIG9mIHRoaXMgZnVuY3Rpb24/IEhvdyB3b3VsZCBpdHMgYmVoYXZpb3IgY2hhbmdlIGJ5IHRoZSB2YWx1ZSBvZiB0aGUgZmxhZz8gQ2FuIHdlIGZvcmNlIGEgcm91dGUgdG8gbm90IGJlIGRlbGV0ZWQsIGlmIHRoZSBzdGF0aWMgZmxhZyBpcyBzZXQgdG8gdHJ1ZT8gVGhpcyB3aWxsIHRlbGwgdXMgaWYgcm91dGVzIHdpdGggc3BlY2lmaWMgc3RhdGljIGF0dHJpYnV0ZXMgYXJlIGhhbmRsZWQgZGlmZmVyZW50bHkgZHVyaW5nIHRoZSBkZWxldGlvbiBwcm9jZXNzLiBNeSBndXQgdGVsbHMgbWUgdGhlcmUncyBhIHN0cm9uZyBjb3JyZWxhdGlvbiBiZXR3ZWVuIGBuZGlzY19yb3V0ZXJfZGlzY292ZXJ5YCdzIHN0YXRpYyBzZXR0aW5nIGFuZCBob3cgdGhlIEZJQiBoYW5kbGVzIHRoZXNlIHJvdXRlcy4gVGltZSB0byBkaWcgaW4gYW5kIHNlZSB0aGUgbG93LWxldmVsIGludGVyYWN0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTU2ODUsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQyMjozNjoyMC41ODQwNjQ4NDlaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExMDI3MjA4NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpcDZfZGVsX3J0X3JlYXNvblwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXB2Ni9yb3V0ZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY2L3JvdXRlLmM9OTcwPWludCBydDZfcm91dGVfcmN2KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHU4ICpvcHQsIGludCBsZW4sXFxuLS1cXG5uZXQvaXB2Ni9yb3V0ZS5jLTEwMjItXFx0aWYgKHJ0IFxcdTAwMjZcXHUwMDI2ICFsaWZldGltZSkge1xcbm5ldC9pcHY2L3JvdXRlLmM6MTAyMzpcXHRcXHRpcDZfZGVsX3J0X3JlYXNvbihuZXQsIHJ0LCBmYWxzZSwgUlRBX0RFTF9SRUFTT05fUkFfV0lUSERSQVdOKTtcXG5uZXQvaXB2Ni9yb3V0ZS5jLTEwMjQtXFx0XFx0cnQgPSBOVUxMO1xcbi0tXFxubmV0L2lwdjYvcm91dGUuYz0zOTc2PXN0YXRpYyBpbnQgX19pcDZfZGVsX3J0KHN0cnVjdCBmaWI2X2luZm8gKnJ0LCBzdHJ1Y3QgbmxfaW5mbyAqaW5mbyxcXG4tLVxcbm5ldC9pcHY2L3JvdXRlLmMtMzk5Ny1cXG5uZXQvaXB2Ni9yb3V0ZS5jOjM5OTg6aW50IGlwNl9kZWxfcnRfcmVhc29uKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZpYjZfaW5mbyAqcnQsIGJvb2wgc2tpcF9ub3RpZnksXFxubmV0L2lwdjYvcm91dGUuYy0zOTk5LVxcdFxcdCAgICAgIHUzMiBkZWxfcmVhc29uKVxcbi0tXFxubmV0L2lwdjYvcm91dGUuYz00MDA5PWludCBpcDZfZGVsX3J0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZpYjZfaW5mbyAqcnQsIGJvb2wgc2tpcF9ub3RpZnkpXFxubmV0L2lwdjYvcm91dGUuYy00MDEwLXtcXG5uZXQvaXB2Ni9yb3V0ZS5jOjQwMTE6XFx0cmV0dXJuIGlwNl9kZWxfcnRfcmVhc29uKG5ldCwgcnQsIHNraXBfbm90aWZ5LCBSVEFfREVMX1JFQVNPTl9VTlNQRUMpO1xcbm5ldC9pcHY2L3JvdXRlLmMtNDAxMi19XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDIyOjM2OjIwLjY5NDM1Njc1M1oiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MTQzNjY0OTU2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgSVB2NiBSb3V0ZSBEZWxldGlvbioqXG5cbk9rYXksIHNvIGBpcDZfZGVsX3J0X3JlYXNvbmAgaXMgYSBnbG9iYWwgdmFyaWFibGUuIFRoYXQgaW1tZWRpYXRlbHkgZmxhZ3MgYSBwb3RlbnRpYWwgY29uY2VybiDigJMgZ2xvYmFsIHN0YXRlIGNhbiBiZSBhIHNvdXJjZSBvZiB0cmlja3kgY29uY3VycmVuY3kgYnVncywgZXNwZWNpYWxseSBpbiBhIG5ldHdvcmtpbmcgY29udGV4dC4gU28sIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBhbmQgd2hlcmUgdGhpcyB2YXJpYWJsZSBpcyBiZWluZyB1c2VkLiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byBrbm93IHdoeSBhbmQgaG93IGEgXCJyZWFzb25cIiBpcyBiZWluZyBzZXQgb24gZGVsZXRpb24gYW5kIHdoYXQgdGhlIGltcGxpY2F0aW9ucyBhcmUuXG5cbk15IG5leHQgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gdHJhY2UgdGhlIGRlbGV0aW9uIHByb2Nlc3MgaXRzZWxmLiBMZXQncyBkaWcgaW50byBgZmliNl9kZWxgLiBUaGF0J3Mgd2hlcmUgdGhlIHJ1YmJlciBtZWV0cyB0aGUgcm9hZCwgc28gdG8gc3BlYWsuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyByb3V0ZSBkZWxldGlvbiBpcyBoYW5kbGVkIGF0IHRoZSBjb3JlIGxldmVsLiBTcGVjaWZpY2FsbHksIEknbSBub3cgdGhpbmtpbmcgYWJvdXQgaG93IHRoZSBnbG9iYWwgdmFyaWFibGUgYGlwNl9kZWxfcnRfcmVhc29uYCBpbnRlcmFjdHMgd2l0aCB0aGUgZnVuY3Rpb24gYGZpYjZfZGVsYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTY0NzksIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQyMjozNjoyNC44MzgwMjUyNVoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU0MDMxMjIyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImZpYjZfZGVsXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pcHY2L2lwNl9maWIuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2Ni9pcDZfZmliLmM9MTg0Mj1zdGF0aWMgc3RydWN0IGZpYjZfbm9kZSAqZmliNl9yZXBhaXJfdHJlZShzdHJ1Y3QgbmV0ICpuZXQsXFxuLS1cXG5uZXQvaXB2Ni9pcDZfZmliLmMtMTk2OS1cXG5uZXQvaXB2Ni9pcDZfZmliLmM6MTk3MDpzdGF0aWMgdm9pZCBmaWI2X2RlbF9yb3V0ZShzdHJ1Y3QgZmliNl90YWJsZSAqdGFibGUsIHN0cnVjdCBmaWI2X25vZGUgKmZuLFxcbm5ldC9pcHY2L2lwNl9maWIuYy0xOTcxLVxcdFxcdFxcdCAgIHN0cnVjdCBmaWI2X2luZm8gX19yY3UgKipydHAsIHN0cnVjdCBubF9pbmZvICppbmZvLFxcbi0tXFxubmV0L2lwdjYvaXA2X2ZpYi5jLTIwNjYtLyogTmVlZCB0byBvd24gdGFibGUtXFx1MDAzZXRiNl9sb2NrICovXFxubmV0L2lwdjYvaXA2X2ZpYi5jOjIwNjc6aW50IGZpYjZfZGVsKHN0cnVjdCBmaWI2X2luZm8gKnJ0LCBzdHJ1Y3QgbmxfaW5mbyAqaW5mbywgdTMyIGRlbF9yZWFzb24pXFxubmV0L2lwdjYvaXA2X2ZpYi5jLTIwNjgte1xcbi0tXFxubmV0L2lwdjYvaXA2X2ZpYi5jLTIwOTUtXFx0XFx0XFx0XFx0ZmliNl9yb3V0ZXNfcmVxdWlyZV9zcmNfZGVjKGluZm8tXFx1MDAzZW5sX25ldCk7XFxubmV0L2lwdjYvaXA2X2ZpYi5jOjIwOTY6XFx0XFx0XFx0ZmliNl9kZWxfcm91dGUodGFibGUsIGZuLCBydHAsIGluZm8sIGRlbF9yZWFzb24pO1xcbm5ldC9pcHY2L2lwNl9maWIuYy0yMDk3LVxcdFxcdFxcdHJldHVybiAwO1xcbi0tXFxubmV0L2lwdjYvaXA2X2ZpYi5jLTIxMDctICpcXHRDZXJ0YWlubHksIGl0IGlzIG5vdCBpbnRlcnJ1cHQgc2FmZS5cXG5uZXQvaXB2Ni9pcDZfZmliLmM6MjEwODogKlxcdEhvd2V2ZXIsIGl0IGlzIGludGVybmFsbHkgcmVlbnRlcmFibGUgd3J0IGl0c2VsZiBhbmQgZmliNl9hZGQvZmliNl9kZWwuXFxubmV0L2lwdjYvaXA2X2ZpYi5jLTIxMDktICpcXHRJdCBtZWFucywgdGhhdCB3ZSBjYW4gbW9kaWZ5IHRyZWUgZHVyaW5nIHdhbGtpbmdcXG4tLVxcbm5ldC9pcHY2L2lwNl9maWIuYz0yMjM0PXN0YXRpYyBpbnQgZmliNl9jbGVhbl9ub2RlKHN0cnVjdCBmaWI2X3dhbGtlciAqdylcXG4tLVxcbm5ldC9pcHY2L2lwNl9maWIuYy0yMjU3LVxcdFxcdFxcdHctXFx1MDAzZWxlYWYgPSBydDtcXG5uZXQvaXB2Ni9pcDZfZmliLmM6MjI1ODpcXHRcXHRcXHRyZXMgPSBmaWI2X2RlbChydCwgXFx1MDAyNmluZm8sIFJUQV9ERUxfUkVBU09OX1VOU1BFQyk7XFxubmV0L2lwdjYvaXA2X2ZpYi5jLTIyNTktXFx0XFx0XFx0aWYgKHJlcykge1xcbi0tXFxubmV0L2lwdjYvaXA2X2ZpYi5jPTIzOTM9c3RhdGljIHZvaWQgZmliNl9nY190YWJsZShzdHJ1Y3QgbmV0ICpuZXQsXFxuLS1cXG5uZXQvaXB2Ni9pcDZfZmliLmMtMjQwNS1cXHRcXHRpZiAoZmliNl9hZ2UocnQsIGdjX2FyZ3MpID09IC0xKVxcbm5ldC9pcHY2L2lwNl9maWIuYzoyNDA2OlxcdFxcdFxcdGZpYjZfZGVsKHJ0LCBcXHUwMDI2aW5mbywgUlRBX0RFTF9SRUFTT05fRVhQSVJFRCk7XFxubmV0L2lwdjYvaXA2X2ZpYi5jLTI0MDctfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQyMjozNjoyNC45OTIwNjE5MTFaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzIzMzA5MzAzNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaXQgc3RhbmRzOlxuXG4qKk5hdmlnYXRpbmcgSVB2NiBSb3V0aW5nIGFuZCBOb3RpZmljYXRpb25zKipcblxuT2theSwgc28gYGZpYjZfZGVsYC4uLiByaWdodCwgdGhhdCdzIGEgZ2xvYmFsIHZhcmlhYmxlLiBOb3csIHdoZXJlIGRvZXMgdGhhdCBhY3R1YWxseSBjb21lIGludG8gcGxheT8gTXkgbWluZCBpbW1lZGlhdGVseSBqdW1wcyB0byB0aGUgbWVjaGFuaXNtcyBmb3IgZGVhbGluZyB3aXRoIHJvdXRlIHVwZGF0ZXMgYW5kIHJlbW92YWxzIHdpdGhpbiB0aGUgSVB2NiBzdGFjay4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBpbnRlcmFjdGlvbnMuIEknbGwgbmVlZCB0byBmaWd1cmUgb3V0IHdoZXJlIHRoYXQncyBhY3R1YWxseSBiZWluZyB1c2VkLiBMZXQgbWUgY2hlY2sgdGhlIGNvZGUgYXNzb2NpYXRlZCB3aXRoIGBpbmV0Nl9ydF9ub3RpZnlgLiBUaGF0IGZlZWxzIGxpa2UgYSBsb2dpY2FsIG5leHQgc3RlcCB0byBsb29rIGludG8gYXMgdGhhdCBzZWVtcyBsaWtlIGEgZ29vZCBwbGFjZSB0byBzdGFydCBteSBpbnZlc3RpZ2F0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzQzNywiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDIyOjM2OjI4LjIyNTE4OTU3N1oiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjM1OTUxMTU3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImluZXQ2X3J0X25vdGlmeVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXB2Ni9yb3V0ZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY2L3JvdXRlLmM9NTM3Mz1zdGF0aWMgdm9pZCBpcDZfcm91dGVfbXBhdGhfbm90aWZ5KHN0cnVjdCBmaWI2X2luZm8gKnJ0LFxcbi0tXFxubmV0L2lwdjYvcm91dGUuYy01MzkzLVxcdGlmIChydClcXG5uZXQvaXB2Ni9yb3V0ZS5jOjUzOTQ6XFx0XFx0aW5ldDZfcnRfbm90aWZ5KFJUTV9ORVdST1VURSwgcnQsIGluZm8sIG5sZmxhZ3MsXFxubmV0L2lwdjYvcm91dGUuYy01Mzk1LVxcdFxcdFxcdFxcdFJUQV9ERUxfUkVBU09OX1VOU1BFQyk7XFxuLS1cXG5uZXQvaXB2Ni9yb3V0ZS5jPTYyMzE9c3RhdGljIGludCBpbmV0Nl9ydG1fZ2V0cm91dGUoc3RydWN0IHNrX2J1ZmYgKmluX3NrYiwgc3RydWN0IG5sbXNnaGRyICpubGgsXFxuLS1cXG5uZXQvaXB2Ni9yb3V0ZS5jLTYzNzktXFxubmV0L2lwdjYvcm91dGUuYzo2MzgwOnZvaWQgaW5ldDZfcnRfbm90aWZ5KGludCBldmVudCwgc3RydWN0IGZpYjZfaW5mbyAqcnQsIHN0cnVjdCBubF9pbmZvICppbmZvLFxcbm5ldC9pcHY2L3JvdXRlLmMtNjM4MS1cXHRcXHQgICAgIHVuc2lnbmVkIGludCBubG1fZmxhZ3MsIHUzMiBkZWxfcmVhc29uKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQyMjozNjoyOC40NjExNDkzMTRaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzkwNDczOTI5MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKipOYXZpZ2F0aW5nIElQdjYgUm91dGluZyBOb3RpZmljYXRpb25zKipcblxuT2theSwgc28gYGluZXQ2X3J0X25vdGlmeWAgaXMgYSBnbG9iYWxseSBhY2Nlc3NpYmxlIGZ1bmN0aW9uLCBtZWFuaW5nIGl0J3MgbGlrZWx5IGEgY2VudHJhbCBwb2ludCBmb3IgaGFuZGxpbmcgSVB2NiByb3V0aW5nIHVwZGF0ZXMuIFRoYXQgaW1tZWRpYXRlbHkgcGlxdWVzIG15IGludGVyZXN0LiBJdCBzdWdnZXN0cyBhIGtleSBpbnRlcmFjdGlvbiBwb2ludCB3aXRoaW4gdGhlIGtlcm5lbCdzIElQdjYgcm91dGluZyBpbmZyYXN0cnVjdHVyZS5cblxuTXkgbmV4dCBzdGVwIGlzIGNsZWFyLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhpcyBnbG9iYWwgZnVuY3Rpb24gaXMgYmVpbmcgdXNlZC4gU3BlY2lmaWNhbGx5LCBJJ20gZ29pbmcgdG8gZGlnIGludG8gYHJ0Nl9yb3V0ZV9yY3ZgLiBJdCdzIGhpZ2hseSBwcm9iYWJsZSB0aGF0IHRoaXMgcm91dGluZSBpcyBhIGNhbGxlciBvciByZWNlaXZlciBvZiB0aGUgaW5mb3JtYXRpb24gZmxvd2luZyB0aHJvdWdoIGBpbmV0Nl9ydF9ub3RpZnlgLiBJIG5lZWQgdG8gY29uZmlybSB3aGV0aGVyIGBydDZfcm91dGVfcmN2YCBpcyBkaXJlY3RseSBpbnZvbHZlZCBvciBpZiB0aGVyZSdzIGFuIGluZGlyZWN0IGNvbm5lY3Rpb24uIEknbGwgYW5hbHl6ZSBob3cgcm91dGluZyBub3RpZmljYXRpb25zIGFyZSBiZWluZyBoYW5kbGVkLCB0byBjb25maXJtIHRoaXMgcmVsYXRpb25zaGlwLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzg5NSwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDIyOjM2OjMyLjM2NTg5MjQ2NFoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTkwMjI2MTE5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInJ0Nl9yb3V0ZV9yY3ZcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjYvcm91dGUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2Ni9yb3V0ZS5jPTk2Mz1zdGF0aWMgYm9vbCBydDZfaXNfZ3dfb3Jfbm9uZXh0aG9wKGNvbnN0IHN0cnVjdCBmaWI2X3Jlc3VsdCAqcmVzKVxcbi0tXFxubmV0L2lwdjYvcm91dGUuYy05NjktI2lmZGVmIENPTkZJR19JUFY2X1JPVVRFX0lORk9cXG5uZXQvaXB2Ni9yb3V0ZS5jOjk3MDppbnQgcnQ2X3JvdXRlX3JjdihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1OCAqb3B0LCBpbnQgbGVuLFxcbm5ldC9pcHY2L3JvdXRlLmMtOTcxLVxcdFxcdCAgY29uc3Qgc3RydWN0IGluNl9hZGRyICpnd2FkZHIpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDIyOjM2OjMyLjU1NjEyMzk3NFoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMDM3OTk2MDc3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byBJUHY2IFJvdXRpbmcqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBgcnQ2X3JvdXRlX3JjdmAsIGFuZCBteSBpbml0aWFsIHRob3VnaHQgaXMsIFwiUmlnaHQsIHRoaXMgaXMgbmVzdGxlZCB1bmRlciBgQ09ORklHX0lQVjZfUk9VVEVfSU5GT2AuXCIgVGhhdCdzIHRoZSBmaXJzdCBrZXkgcG9pbnQgdG8gcmVtZW1iZXIgZm9yIHVuZGVyc3RhbmRpbmcgaXRzIGNvbnRleHQgd2l0aGluIHRoZSBicm9hZGVyIElQdjYgbmV0d29ya2luZyBzdGFjay4gSXQgaW5zdGFudGx5IHBvaW50cyBtZSB0byB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIHRoYXQgZW5hYmxlIHRoaXMgZnVuY3Rpb25hbGl0eS5cblxuTm93LCB0byBnZXQgYSBiZXR0ZXIgZ3Jhc3Agb24gdGhlIG92ZXJhbGwgZmxvdywgbGV0J3MgYWxzbyBjaGVjayBhbmQgdW5kZXJzdGFuZCBgYWRkcmNvbmZfcHJlZml4X3JjdmAgc2luY2UgaXQgcmVsYXRlcyB0byBwcmVmaXggcmVjZXB0aW9uLiBJIGhhdmUgYSBodW5jaCB0aGlzIG1pZ2h0IGJlIHJlbGF0ZWQgdG8gaG93IHJvdXRpbmcgaW5mb3JtYXRpb24gaXMgYWNxdWlyZWQgaW4gdGhpcyBjb250ZXh0LCBzbyB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gdGhlc2UgdHdvIGZ1bmN0aW9ucyBpcyB0aGUga2V5IGFyZWEgZm9yIGV4YW1pbmF0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODI4MSwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDIyOjM2OjM1LjU5NDEyMzAzWiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTcwMTgyODQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYWRkcmNvbmZfcHJlZml4X3JjdlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXB2Ni9hZGRyY29uZi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY2L2FkZHJjb25mLmM9MTM2OT1zdGF0aWMgaW50IGlwdjZfY3JlYXRlX3RlbXBhZGRyKHN0cnVjdCBpbmV0Nl9pZmFkZHIgKmlmcCwgYm9vbCBibG9jaylcXG4tLVxcbm5ldC9pcHY2L2FkZHJjb25mLmMtMTQ4My1cXHRjZmcuaWZhX2ZsYWdzID0gSUZBX0ZfVEVNUE9SQVJZO1xcbm5ldC9pcHY2L2FkZHJjb25mLmM6MTQ4NDpcXHQvKiBzZXQgaW4gYWRkcmNvbmZfcHJlZml4X3JjdigpICovXFxubmV0L2lwdjYvYWRkcmNvbmYuYy0xNDg1LVxcdGlmIChpZnAtXFx1MDAzZWZsYWdzIFxcdTAwMjYgSUZBX0ZfT1BUSU1JU1RJQylcXG4tLVxcbm5ldC9pcHY2L2FkZHJjb25mLmM9MjY4OT1zdGF0aWMgYm9vbCBpc19hZGRyX21vZGVfZ2VuZXJhdGVfc3RhYmxlKHN0cnVjdCBpbmV0Nl9kZXYgKmlkZXYpXFxuLS1cXG5uZXQvaXB2Ni9hZGRyY29uZi5jLTI2OTQtXFxubmV0L2lwdjYvYWRkcmNvbmYuYzoyNjk1OmludCBhZGRyY29uZl9wcmVmaXhfcmN2X2FkZF9hZGRyKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG5uZXQvaXB2Ni9hZGRyY29uZi5jLTI2OTYtXFx0XFx0XFx0XFx0IGNvbnN0IHN0cnVjdCBwcmVmaXhfaW5mbyAqcGluZm8sXFxuLS1cXG5uZXQvaXB2Ni9hZGRyY29uZi5jLTI3OTUtfVxcbm5ldC9pcHY2L2FkZHJjb25mLmM6Mjc5NjpFWFBPUlRfU1lNQk9MX0dQTChhZGRyY29uZl9wcmVmaXhfcmN2X2FkZF9hZGRyKTtcXG5uZXQvaXB2Ni9hZGRyY29uZi5jLTI3OTctXFxubmV0L2lwdjYvYWRkcmNvbmYuYzoyNzk4OnZvaWQgYWRkcmNvbmZfcHJlZml4X3JjdihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1OCAqb3B0LCBpbnQgbGVuLCBib29sIHNsbGFvKVxcbm5ldC9pcHY2L2FkZHJjb25mLmMtMjc5OS17XFxuLS1cXG5uZXQvaXB2Ni9hZGRyY29uZi5jLTI5NDMtb2s6XFxubmV0L2lwdjYvYWRkcmNvbmYuYzoyOTQ0OlxcdFxcdGVyciA9IGFkZHJjb25mX3ByZWZpeF9yY3ZfYWRkX2FkZHIobmV0LCBkZXYsIHBpbmZvLCBpbjZfZGV2LFxcbm5ldC9pcHY2L2FkZHJjb25mLmMtMjk0NS1cXHRcXHRcXHRcXHRcXHRcXHQgICBcXHUwMDI2YWRkciwgYWRkcl90eXBlLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQyMjozNjozNS43MTExNDkzMjRaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzUyNDg0MTkxMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBJUHY2IFJvdXRlIEludmVzdGlnYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gZGl2aW5nIGludG8gdGhpcyBgYWRkcmNvbmZfcHJlZml4X3JjdmAgdGhpbmcuIEl0J3MgZ2xvYmFsLCB3aGljaCBpbW1lZGlhdGVseSBmbGFncyBpdCBhcyBzb21ldGhpbmcgc2lnbmlmaWNhbnQuIFRvIHByb3Blcmx5IHVuZGVyc3RhbmQgaXRzIGJlaGF2aW9yLCBJIG5lZWQgdG8gbG9vayBhdCBpdHMgaW50ZXJhY3Rpb25zIHdpdGggYSBmZXcga2V5IGZ1bmN0aW9uczogYGlwNl9kZWxfcnRfcmVhc29uYCwgYGZpYjZfZGVsYCwgYGluZXQ2X3J0X25vdGlmeWAsIGFuZCBgcnQ2X3JvdXRlX3JjdmAuIFRob3NlIGFyZSB0aGUgcHJpbWUgc3VzcGVjdHMgZm9yIGluZmx1ZW5jaW5nIG9yIGJlaW5nIGluZmx1ZW5jZWQgYnkgYGFkZHJjb25mX3ByZWZpeF9yY3ZgLlxuXG5CZWZvcmUgSSBkaWcgdG9vIGRlZXAsIEkgc2hvdWxkIGNoZWNrIHdoZXRoZXIgYENPTkZJR19JUFY2X1JPVVRFX0lORk9gIGhhcyBhbnkgZGVwZW5kZW5jaWVzLiBVbmRlcnN0YW5kaW5nIGFueSBwb3RlbnRpYWwgYnVpbGQtdGltZSBjb25zdHJhaW50cyBvciBjb25kaXRpb25hbCBiZWhhdmlvcnMgYXNzb2NpYXRlZCB3aXRoIHRoYXQgc2V0dGluZyBjb3VsZCBzYXZlIG1lIGEgbG90IG9mIHRpbWUgZG93biB0aGUgbGluZS4gVGhhdCdzIGEgc29saWQgZmlyc3Qgc3RlcC4gTGV0J3Mgc2VlIHdoYXQgdGhhdCByZXZlYWxzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTAwMSwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjkyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDIyOjM2OjM5LjIzNTk5NDAxNFoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTIwMTExNTkzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBJUFY2X1JPVVRFX0lORk9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjYvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2Ni9LY29uZmlnPTIxPWNvbmZpZyBJUFY2X1JPVVRFUl9QUkVGXFxuLS1cXG5uZXQvaXB2Ni9LY29uZmlnLTMwLVxcbm5ldC9pcHY2L0tjb25maWc6MzE6Y29uZmlnIElQVjZfUk9VVEVfSU5GT1xcbm5ldC9pcHY2L0tjb25maWctMzItXFx0Ym9vbCBcXFwiSVB2NjogUm91dGUgSW5mb3JtYXRpb24gKFJGQyA0MTkxKSBzdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQyMjozNjozOS4zNTYxMTE2MzdaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTM1MTY1MTY0MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2Vzcywgc3VtbWFyaXplZCBhcyBpZiBJIHdlcmUgY29uc2lkZXJpbmcgdGhlIHByb3ZpZGVkIHByb21wdDpcblxuKipBbmFseXppbmcgdGhlIERlcGVuZGVuY3kgTGFuZHNjYXBlIG9mIElQVjZfUk9VVEVfSU5GTyoqXG5cbk9rYXksIHNvIHRoZSBwcm9tcHQgd2FudHMgbWUgdG8gYW5hbHl6ZSB0aGUgZGVwZW5kZW5jaWVzIG9mIGBJUFY2X1JPVVRFX0lORk9gLiBNeSBpbml0aWFsIGluc3RpbmN0LCBnaXZlbiBteSBleHBlcmllbmNlLCBpcyB0byBpbW1lZGlhdGVseSBzdGFydCB0aGlua2luZyBhYm91dCBob3cgdGhpcyByZWxhdGVzIHRvIG15IHNwZWNpZmljIGV4cGVydGlzZS4gSSdtIGFzc3VtaW5nIHRoaXMgaXMgYSBkYXRhIHN0cnVjdHVyZSBvciBhIGNvbmNlcHQgd2l0aGluIHRoZSBjb250ZXh0IG9mIElQdjYgcm91dGluZywgbGlrZWx5IHJlbGF0ZWQgdG8gaG93IHJvdXRpbmcgaW5mb3JtYXRpb24gaXMgc3RvcmVkIG9yIHJlcHJlc2VudGVkLlxuXG5UaGUgd29yZCBcImRlcGVuZGVuY2llc1wiIGlzIGNydWNpYWwuIEl0IHN1Z2dlc3RzIEkgbmVlZCB0byBpZGVudGlmeSBldmVyeXRoaW5nIHRoYXQgKnJlbGllcyogb24gYElQVjZfUk9VVEVfSU5GT2AsIGFuZCBwb3RlbnRpYWxseSB3aGF0IGBJUFY2X1JPVVRFX0lORk9gIGl0c2VsZiBkZXBlbmRzIHVwb24uIElzIHRoaXMgYWJvdXQgc29mdHdhcmUgbW9kdWxlcywgbGlicmFyaWVzLCBvciBuZXR3b3JrIGNvbmZpZ3VyYXRpb24gZWxlbWVudHM/IEFyZSB0aGVyZSBhc3NvY2lhdGVkIGNvbmZpZ3VyYXRpb24gZmlsZXMgb3Igc3lzdGVtIGNhbGxzPyBBcmUgd2UgdGFsa2luZyBhYm91dCBhIGRhdGEgc3RydWN0dXJlLCBhIGZ1bmN0aW9uLCBhIG1vZHVsZSwgb3Igc29tZXRoaW5nIGVsc2UgZW50aXJlbHk/XG5cbk15IGJyYWluJ3MgYWxyZWFkeSBtYXBwaW5nIG91dCBwb3RlbnRpYWwgYXJlYXMgdG8gaW52ZXN0aWdhdGU6XG5cbiogICAqKkNvZGU6KiogSWYgaXQncyBjb2RlLCBJJ2xsIG5lZWQgdG8gbG9vayBmb3IgYCNpbmNsdWRlYCBzdGF0ZW1lbnRzLCBmdW5jdGlvbiBjYWxscywgYW5kIGFueSBvdGhlciBpbmRpY2F0b3JzIG9mIGRpcmVjdCB1c2FnZS4gV2hhdCBvdGhlciBmdW5jdGlvbnMgb3IgZGF0YSBzdHJ1Y3R1cmVzIHJlZmVyZW5jZSBgSVBWNl9ST1VURV9JTkZPYD8gQXJlIHRoZXJlIHZlcnNpb24gZGVwZW5kZW5jaWVzPyBBcmUgdGhlcmUgZGlmZmVyZW50IGltcGxlbWVudGF0aW9ucyBhY3Jvc3MgZGlmZmVyZW50IG9wZXJhdGluZyBzeXN0ZW1zP1xuKiAgICoqRG9jdW1lbnRhdGlvbjoqKiBJJ2xsIGNoZWNrIHJlbGV2YW50IFJGQ3MgKFJlcXVlc3QgZm9yIENvbW1lbnRzKSwgbWFuIHBhZ2VzLCBhbmQga2VybmVsIGhlYWRlcnMgcmVsYXRlZCB0byBJUHY2IHJvdXRpbmcuIFRoZXNlIHJlc291cmNlcyBhcmUgbGlrZWx5IHRvIGRlZmluZSB0aGUgc3RydWN0dXJlIGFuZCBpdHMgcmVsYXRpb25zaGlwcy5cbiogICAqKlN5c3RlbSBDYWxscy9BUElzOioqIFdoYXQgc3lzdGVtIGNhbGxzIG9yIEFQSXMgbWlnaHQgaW50ZXJhY3Qgd2l0aCB0aGlzIGluZm9ybWF0aW9uPyBEb2VzIGl0IGludm9sdmUga2VybmVsIG1vZHVsZXMsIHJvdXRpbmcgZGFlbW9ucyAobGlrZSBgYmlyZGAgb3IgYGZycmApLCBvciBuZXR3b3JrIG1hbmFnZW1lbnQgdG9vbHM/IEFyZSB0aGVyZSBzcGVjaWZpYyB0b29scyB0aGF0IG1hbmlwdWxhdGUgb3IgZGlzcGxheSBkYXRhIGJhc2VkIG9uIGBJUFY2X1JPVVRFX0lORk9gP1xuKiAgICoqRGF0YSBTdHJ1Y3R1cmVzOioqIElmIHRoaXMgaXMgYSBkYXRhIHN0cnVjdHVyZSwgYXJlIHRoZXJlIG90aGVyIGRhdGEgc3RydWN0dXJlcyAoZS5nLiwgbGlua2VkIGxpc3RzLCB0YWJsZXMpIHRoYXQgY29udGFpbiBvciBhcmUgY29udGFpbmVkIHdpdGhpbiBpdD8gV2hhdCBmaWVsZHMgYXJlIGluY2x1ZGVkLCBhbmQgd2hhdCBkbyB0aG9zZSBmaWVsZHMgcmVwcmVzZW50P1xuKiAgICoqQ29uY2VwdHVhbCBEZXBlbmRlbmNpZXM6KiogQmV5b25kIHRoZSBsaXRlcmFsIGNvZGUvc3RydWN0dXJlIGRlcGVuZGVuY2llcywgd2hhdCAqbG9naWNhbCogZGVwZW5kZW5jaWVzIGV4aXN0PyBGb3IgZXhhbXBsZSwgdGhlIHByb3BlciBvcGVyYXRpb24gb2YgYElQVjZfUk9VVEVfSU5GT2AgbWlnaHQgZGVwZW5kIG9uIGNvcnJlY3QgSVB2NiBhZGRyZXNzIGNvbmZpZ3VyYXRpb24sIG9yIGEgZnVuY3Rpb25pbmcgcm91dGluZyBwcm90b2NvbC5cblxuSW4gc2hvcnQsIEknbGwgYXBwcm9hY2ggdGhpcyBieSBjb25zaWRlcmluZyB0aGUgZGlyZWN0LCBpbmRpcmVjdCwgYW5kIGNvbmNlcHR1YWwgZGVwZW5kZW5jaWVzLCBhbHdheXMgdHJ5aW5nIHRvIHVuZGVyc3RhbmQgdGhlICd3aHknIGJlaGluZCB0aGUgJ3doYXQnLiBUaGlzIGlzIGEgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZCBhbmFseXNpcyBpbiBteSBmaWVsZCwgYnV0IHRoZSBzcGVjaWZpYyBhcHByb2FjaCB3aWxsIGRlcGVuZCBlbnRpcmVseSBvbiB3aGF0IGNvbnRleHQgYW5kIHR5cGUgb2Ygb2JqZWN0IFwiSVBWNl9ST1VURV9JTkZPXCIgaXMgcmVwcmVzZW50aW5nLiBOb3csIGxldCdzIGRpdmUgaW50byBzb21lIHNwZWNpZmljcy4uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTQwNywiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDIyOjM2OjQ0LjcwNzc2NTk4OFoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5NjMwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvaXB2Ni9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDMxLFxuICBcIkxpbmVDb3VudFwiOiAxMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDMxOlxcdGNvbmZpZyBJUFY2X1JPVVRFX0lORk9cXG4gIDMyOlxcdFxcdGJvb2wgXFxcIklQdjY6IFJvdXRlIEluZm9ybWF0aW9uIChSRkMgNDE5MSkgc3VwcG9ydFxcXCJcXG4gIDMzOlxcdFxcdGRlcGVuZHMgb24gSVBWNl9ST1VURVJfUFJFRlxcbiAgMzQ6XFx0XFx0aGVscFxcbiAgMzU6XFx0XFx0ICBTdXBwb3J0IG9mIFJvdXRlIEluZm9ybWF0aW9uLlxcbiAgMzY6XFx0XFxuICAzNzpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IE4uXFxuICAzODpcXHRcXG4gIDM5OlxcdGNvbmZpZyBJUFY2X09QVElNSVNUSUNfREFEXFxuICA0MDpcXHRcXHRib29sIFxcXCJJUHY2OiBFbmFibGUgUkZDIDQ0MjkgT3B0aW1pc3RpYyBEQURcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDIyOjM2OjQ0LjcwNzg2NDk5OVoiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyODUyNDYwMzU3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGFzIHlvdSByZXF1ZXN0ZWQ6XG5cbioqTmF2aWdhdGluZyB0aGUgSVB2NiBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gdGhlIGJlaGF2aW9yIGhlcmUgaXMgZGVmaW5pdGVseSBpbmZsdWVuY2VkIGJ5IGBJUFY2X1JPVVRFUl9QUkVGYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBzeXN0ZW0gaXMgcmVhY3RpbmcgdG8gdGhlIFJvdXRlciBQcmVmZXJlbmNlIHNldHRpbmcuIFRoZSBjb25maWd1cmF0aW9uIGlzIGNsZWFybHkgZGVwZW5kZW50IG9uIGl0LCBzbyBsZXQncyBzdGFydCBieSBpc29sYXRpbmcgaXRzIHZhbHVlLiBJIG5lZWQgdG8gemVybyBpbiBvbiB0aGUgZXhhY3Qgc3RhdGUgb2YgYElQVjZfUk9VVEVSX1BSRUZgIHRvIHRyYWNlIHRoZSBleGVjdXRpb24gcGF0aCBhbmQgZGV0ZXJtaW5lIHRoZSBjdXJyZW50IG91dGNvbWUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwMTYyLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQyMjozNjo0Ny41NjAzMzgxOTVaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTExNzkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9pcHY2L0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMjEsXG4gIFwiTGluZUNvdW50XCI6IDEwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgMjE6XFx0Y29uZmlnIElQVjZfUk9VVEVSX1BSRUZcXG4gIDIyOlxcdFxcdGJvb2wgXFxcIklQdjY6IFJvdXRlciBQcmVmZXJlbmNlIChSRkMgNDE5MSkgc3VwcG9ydFxcXCJcXG4gIDIzOlxcdFxcdGhlbHBcXG4gIDI0OlxcdFxcdCAgUm91dGVyIFByZWZlcmVuY2UgaXMgYW4gb3B0aW9uYWwgZXh0ZW5zaW9uIHRvIHRoZSBSb3V0ZXJcXG4gIDI1OlxcdFxcdCAgQWR2ZXJ0aXNlbWVudCBtZXNzYWdlIHdoaWNoIGltcHJvdmVzIHRoZSBhYmlsaXR5IG9mIGhvc3RzXFxuICAyNjpcXHRcXHQgIHRvIHBpY2sgYW4gYXBwcm9wcmlhdGUgcm91dGVyLCBlc3BlY2lhbGx5IHdoZW4gdGhlIGhvc3RzXFxuICAyNzpcXHRcXHQgIGFyZSBwbGFjZWQgaW4gYSBtdWx0aS1ob21lZCBuZXR3b3JrLlxcbiAgMjg6XFx0XFxuICAyOTpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IE4uXFxuICAzMDpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMjI6MzY6NDcuNTYwNDUyNDg1WiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ2MDc2MTg1MzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB1bmRlcnN0YW5kaW5nLCBjb25zaWRlcmluZyBJIG5lZWQgdG8gZ2V0IHRoaXMgcmlnaHQ6XG5cbioqQ29uZmlndXJhdGlvbiBEZXBlbmRlbmNpZXMgZm9yIElQdjYgUm91dGluZyoqXG5cbkFscmlnaHQsIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRnJvbSB3aGF0IEknbSBzZWVpbmcsIHRvIG1ha2UgdGhpcyB3b3JrIGNvcnJlY3RseSwgSSBkZWZpbml0ZWx5IG5lZWQgdG8gZW5hYmxlIGBJUFY2X1JPVVRFUl9QUkVGYCBhbmQgYElQVjZfUk9VVEVfSU5GT2AuIFRob3NlIGFyZSBjcnVjaWFsLiBBbmQsIG9idmlvdXNseSwgYElQVjZgIG5lZWRzIHRvIGJlIGVuYWJsZWQgYXMgd2VsbDsgdGhhdCdzIHRoZSBmb3VuZGF0aW9uIGhlcmUuXG5cbk5vdywgSSBzaG91bGQgZG8gYSBxdWljayBzd2VlcCB0byBzZWUgaWYgdGhlcmUgYXJlIGFueSBvdGhlciByZWxhdGVkIGNvbmZpZ3VyYXRpb25zIHRoYXQgYXJlIGFsc28gaW52b2x2ZWQuIExvb2tpbmcgYXQgdGhlIHBhdGNoJ3MgZmlsZSBtb2RpZmljYXRpb25zIOKAkyBgbmV0L2lwdjYvcm91dGUuY2AsIGBuZXQvaXB2Ni9pcDZfZmliLmNgLCBgbmV0L2lwdjYvYWRkcmNvbmYuY2AsIGFuZCBgbmV0L2lwdjYvbmRpc2MuY2Ag4oCTIHRoYXQgY29uZmlybXMgdGhlc2UgYXJlIGFsbCBwYXJ0IG9mIHRoZSBgQ09ORklHX0lQVjZgIGZhbWlseS5cblxuVGhlcmVmb3JlLCB0aGUgY29yZSBjb25maWd1cmF0aW9ucyBJIG5lZWQgdG8gZm9jdXMgb24gZm9yIHRoaXMgaW50ZWdyYXRpb24gYXJlIGBJUFY2YCwgYElQVjZfUk9VVEVSX1BSRUZgLCBhbmQgYElQVjZfUk9VVEVfSU5GT2AuXG5cbkZpbmFsbHksIEknbGwgbmVlZCB0byBjaGVjayB0aGUgYmVoYXZpb3Igb2YgYGlwNl9kZWxfcnRfcmVhc29uYC4gVGhpcyBpcyB0aGUgY29yZSBvZiB0aGlzIHBhdGNoLCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGF0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDQ3OSwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0OSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDIyOjM2OjUyLjE2ODA3NDM2NloiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjIyOTczMTg4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlwNl9kZWxfcnRfcmVhc29uXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImluY2x1ZGUvbmV0L2lwNl9yb3V0ZS5oXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbmV0L2lwNl9yb3V0ZS5oPTEzMD1pbnQgaXA2X2RlbF9ydChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBmaWI2X2luZm8gKmY2aSwgYm9vbCBza2lwX25vdGlmeSk7XFxuaW5jbHVkZS9uZXQvaXA2X3JvdXRlLmg6MTMxOmludCBpcDZfZGVsX3J0X3JlYXNvbihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBmaWI2X2luZm8gKmY2aSwgYm9vbCBza2lwX25vdGlmeSxcXG5pbmNsdWRlL25ldC9pcDZfcm91dGUuaC0xMzItXFx0XFx0ICAgICAgdTMyIGRlbF9yZWFzb24pO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQyMjozNjo1Mi4zOTEwNTQzMjVaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjY3MjM4Njk2NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHN1bW1hcml6ZWQgdGhvdWdodCBwcm9jZXNzLCBwcmVzZW50ZWQgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIGl0OlxuXG4qKkV4YW1pbmluZyBJUHY2IFJvdXRpbmcgVGFibGUgRGVsZXRpb24qKlxuXG5SaWdodCwgc28gSSBzZWUgdGhpcyByZWxhdGVkIHRvIGBpcDZfcm91dGUuaGAuIEl0J3MgZGVjbGFyZWQgdGhlcmUsIHdoaWNoIGlzIGhlbHBmdWwgdG8ga25vdyBpbW1lZGlhdGVseS5cblxuTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZGVsZXRpb24gcHJvY2Vzcy4gTXkgbmV4dCBzdGVwIHdpbGwgYmUgdG8gZGl2ZSBpbnRvIHRoZSBgZmliNl9kZWxgIGZ1bmN0aW9uLCBhbmQgc2VlIGhvdyBpdCBpcyBpbXBsZW1lbnRlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjEwNjIsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQyMjozNjo1NS4wNjM0NDQ4MloiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTMyNjA2NjAzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImZpYjZfZGVsXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImluY2x1ZGUvbmV0L2lwNl9maWIuaFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL25ldC9pcDZfZmliLmg9NDY5PWludCBmaWI2X2FkZChzdHJ1Y3QgZmliNl9ub2RlICpyb290LCBzdHJ1Y3QgZmliNl9pbmZvICpydCxcXG5pbmNsdWRlL25ldC9pcDZfZmliLmgtNDcwLVxcdCAgICAgc3RydWN0IG5sX2luZm8gKmluZm8sIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjayk7XFxuaW5jbHVkZS9uZXQvaXA2X2ZpYi5oOjQ3MTppbnQgZmliNl9kZWwoc3RydWN0IGZpYjZfaW5mbyAqcnQsIHN0cnVjdCBubF9pbmZvICppbmZvLCB1MzIgZGVsX3JlYXNvbik7XFxuaW5jbHVkZS9uZXQvaXA2X2ZpYi5oLTQ3Mi1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMjI6MzY6NTUuMTk2MDU2NjAzWiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2MzIxNjE3NDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRob3NlIHRob3VnaHRzIGZyb20gYW4gZXhwZXJ0J3MgcGVyc3BlY3RpdmUsIHVzaW5nIHRoZSBmaXJzdCBwZXJzb24gYW5kIGFpbWluZyBmb3IgYSBmdWxzb21lIGV4cGxhbmF0aW9uOlxuXG4qKldvcmtpbmcgVGhyb3VnaCBJUHY2IEZJQiBOb3RpZmljYXRpb24gSW1wbGVtZW50YXRpb24qKlxuXG5BbHJpZ2h0LCBzbyB0aGUgbm90aWZpY2F0aW9uIG1lY2hhbmlzbSBmb3IgSVB2NiBGSUIgY2hhbmdlcy4uLiByaWdodCwgdGhhdCdzIGRlZmluZWQsIG9yIGF0IGxlYXN0IGRlY2xhcmVkLCBpbiBgaW5jbHVkZS9uZXQvaXA2X2ZpYi5oYC4gVGhhdCdzIHRoZSBleHBlY3RlZCBsb2NhdGlvbi4gR29vZCB0byBrbm93IGl0J3Mgd2hlcmUgaXQgc2hvdWxkIGJlLiBUaGUgaGVhZGVyIHNob3VsZCBnaXZlIG1lIHRoZSBjb3JlIGRhdGEgc3RydWN0dXJlcyBhbmQgZnVuY3Rpb24gcHJvdG90eXBlcyBpbnZvbHZlZC5cblxuTm93LCB3aGVyZSBkbyBJIG5lZWQgdG8gZ28gdG8gdW5kZXJzdGFuZCBob3cgdGhlc2Ugbm90aWZpY2F0aW9ucyBhcmUgYWN0dWFsbHkgKmhhbmRsZWQqPyBMZXQgbWUgc2VlLi4uIEkgbmVlZCB0byByZWZyZXNoIG15c2VsZiBvbiBob3cgdGhlIElQdjYgcm91dGluZyB0YWJsZSBpcyBtYW5hZ2VkLCBzbyBJJ2xsIHdhbnQgdG8gZGlnIGludG8gYGluZXQ2X3J0X25vdGlmeWAuIFRoYXQncyB1c3VhbGx5IHRoZSBlbnRyeSBwb2ludCBmb3IgdGhvc2Uga2luZHMgb2YgZXZlbnRzLiBJdCdzIGFsbW9zdCBjZXJ0YWlubHkgdGhlIGZ1bmN0aW9uIHRoYXQgZ2V0cyBjYWxsZWQgd2hlbiBzb21ldGhpbmcgaW4gdGhlIHJvdXRpbmcgdGFibGUgY2hhbmdlcyDigJMgYSByb3V0ZSBpcyBhZGRlZCwgZGVsZXRlZCwgdXBkYXRlZC4gSXQgbWFrZXMgc2Vuc2UgdGhhdCdzIHRoZSBmdW5jdGlvbiBJIHdvdWxkIHdhbnQgdG8gY2hlY2suIEhvcGVmdWxseSBpdCBpcyB1c2luZyBzb21lIGhlbHBlcnMgdG8ga2VlcCB0aGluZ3MgZWZmaWNpZW50LiBJJ20gZ3Vlc3NpbmcgdGhhdCB0aGlzIHdpbGwgYmUgY2FsbGluZyBvdGhlciBmdW5jdGlvbnMgdG8gbWFuYWdlIHRoZSB2YXJpb3VzIGNhY2hlcyBhbmQgbGlzdGVuZXJzLiBIb3BlZnVsbHksIGFsbCB0aGUgcmlnaHQgbG9ja2luZyBpcyBkb25lIGluIHRoaXMgc2VjdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MjEzNjUsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQyMjozNjo1OC44MjgyMjA4MDdaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYxNzE3MTk1NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpbmV0Nl9ydF9ub3RpZnlcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW5jbHVkZS9uZXQvaXA2X2ZpYi5oXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbmV0L2lwNl9maWIuaD01Mjg9c3RhdGljIGlubGluZSB2b2lkIGZpYjZfcnRfdXBkYXRlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZpYjZfaW5mbyAqcnQsXFxuLS1cXG5pbmNsdWRlL25ldC9pcDZfZmliLmgtNTMyLSNlbmRpZlxcbmluY2x1ZGUvbmV0L2lwNl9maWIuaDo1MzM6dm9pZCBpbmV0Nl9ydF9ub3RpZnkoaW50IGV2ZW50LCBzdHJ1Y3QgZmliNl9pbmZvICpydCwgc3RydWN0IG5sX2luZm8gKmluZm8sXFxuaW5jbHVkZS9uZXQvaXA2X2ZpYi5oLTUzNC1cXHRcXHQgICAgIHVuc2lnbmVkIGludCBmbGFncywgdTMyIGRlbF9yZWFzb24pO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQyMjozNjo1OS40NDUzOTg4NjRaIiwiU2VxIjozMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjkwMDYxNzc3NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIElQdjYgRklCIFJvdXRlIFJldHJpZXZhbCoqXG5cbkFscmlnaHQsIHNvIHRoZSBjb3JlIHN0cnVjdHVyZSBmb3IgdGhlIElQdjYgRm9yd2FyZGluZyBJbmZvcm1hdGlvbiBCYXNlIChGSUIpIOKAkyB0aGF0J3MgYGlwNl9maWIuaGAsIG5hdHVyYWxseS4gVGhhdCdzIHdoZXJlIHRoZSBkZWZpbml0aW9uIGlzLiBJdCdzIHRoZSBzdGFydGluZyBwb2ludC4gTXkgYXR0ZW50aW9uIGlzIGltbWVkaWF0ZWx5IGRyYXduIHRvIHRoZSByb3V0ZSByZXRyaWV2YWwgcGF0aCwgc28gbGV0J3MgZGlnIGludG8gYHJ0Nl9yb3V0ZV9yY3ZgLiBUaGF0J3Mgd2hlcmUgdGhlIGNyaXRpY2FsIHByb2Nlc3NpbmcgaGFwcGVucy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgZXhhY3RseSBob3cgdGhlIHN5c3RlbSBsb29rcyB1cCB0aGUgcm91dGUuIEknbGwgbmVlZCB0byBmb2N1cyBvbiB3aGF0IGhhcHBlbnMgd2l0aGluIHRoYXQgZnVuY3Rpb24sIGluIG9yZGVyIHRvIHRyYWNrIGhvdyBpdCBtYWtlcyBpdHMgZGVjaXNpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTgzNCwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDIyOjM3OjAyLjM0NjAxOTAxN1oiLCJTZXEiOjMyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTkzODU1NTA5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInJ0Nl9yb3V0ZV9yY3ZcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW5jbHVkZS9uZXQvaXA2X3JvdXRlLmhcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9uZXQvaXA2X3JvdXRlLmg9MjAxPXZvaWQgcnQ2X3B1cmdlX2RmbHRfcm91dGVycyhzdHJ1Y3QgbmV0ICpuZXQpO1xcbmluY2x1ZGUvbmV0L2lwNl9yb3V0ZS5oLTIwMi1cXG5pbmNsdWRlL25ldC9pcDZfcm91dGUuaDoyMDM6aW50IHJ0Nl9yb3V0ZV9yY3Yoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTggKm9wdCwgaW50IGxlbixcXG5pbmNsdWRlL25ldC9pcDZfcm91dGUuaC0yMDQtXFx0XFx0ICBjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKmd3YWRkcik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDIyOjM3OjAyLjUzOTg3OTM3N1oiLCJTZXEiOjMzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNzU2NDk4MDU4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aG9zZSB0aG91Z2h0cyBmcm9tIGFuIGV4cGVydCdzIHBlcnNwZWN0aXZlLCB1c2luZyB0aGUgZmlyc3QgcGVyc29uIGFuZCBhaW1pbmcgZm9yIGEgZnVsc29tZSBleHBsYW5hdGlvbjpcblxuKipXb3JraW5nIHdpdGggSVB2NiBSb3V0aW5nIGluIHRoZSBMaW51eCBLZXJuZWwqKlxuXG5SaWdodCwgc28gSSdtIGRpZ2dpbmcgaW50byBJUHY2IHJvdXRpbmcgd2l0aGluIHRoZSBrZXJuZWwsIGFuZCB0aGUgZmlyc3QgdGhpbmcgdGhhdCBqdW1wcyBvdXQgaXMgdGhhdCB0aGUgY3J1Y2lhbCBkZWNsYXJhdGlvbiBmb3IgdGhpcyBzdHVmZiwgdGhlIGRhdGEgc3RydWN0dXJlcyBhbmQgcmVsYXRlZCBkZWZpbml0aW9ucywgaXMgbG9jYXRlZCByaWdodCBpbiBgaW5jbHVkZS9uZXQvaXA2X3JvdXRlLmhgLiBUaGF0J3MgdGhlIGxvZ2ljYWwgcGxhY2UgdG8gc3RhcnQg4oCTIGdvb2QsIGdvb2QuIEnigJlsbCBtYWtlIGEgbWVudGFsIG5vdGUgb2YgdGhhdCBmaWxlIGFuZCBpdHMgY29udGVudHMgZm9yIGxhdGVyIHJlZmVyZW5jZTsgaXQncyBwcmFjdGljYWxseSB0aGUgSVB2NiByb3V0aW5nIGJpYmxlLlxuXG5Ob3csIHdoZXJlIGRvIEkgd2FudCB0byBzdGFydCBteSBpbnZlc3RpZ2F0aW9uPyBBaCwgeWVzLCBJJ20gdHJ5aW5nIHRvIGdyb2sgaG93IGl0J3MgZGVhbGluZyB3aXRoLi4uIG9oLCB3YWl0IGEgbWludXRlLCBJIHRoaW5rIGBhZGRyY29uZl9wcmVmaXhfcmN2YCBpcyB0aGUgdGhpbmcgdGhhdCdzIHJlbGV2YW50IHRvIHdoYXQgSSBhbSBsb29raW5nIGF0LiBJJ2xsIG5lZWQgdG8gY2hlY2sgaG93IHRoZSBJUHY2IGFkZHJlc3MgY29uZmlndXJhdGlvbiBpbnRlcmFjdHMgd2l0aCB0aGUgcm91dGluZyBwcm9jZXNzLCBzbyBgYWRkcmNvbmZfcHJlZml4X3JjdmAgaXMgZGVmaW5pdGVseSBhIGdvb2QgY2FuZGlkYXRlIHRvIHNlZSB3aGVyZSB0aGUgaW5jb21pbmcgcHJlZml4ZXMgYXJlIGhhbmRsZWQuIEkgdGhpbmsgdGhpcyB3aWxsIGJlIGFuIGV4Y2VsbGVudCBzdGFydGluZyBwb2ludCwgdGhpcyBjb3VsZCBsZWFkIHRvIHRoZSBkYXRhIEkgYW0gbG9va2luZyBmb3IuIEknbGwgZGVsdmUgaW50byB0aGUgY29kZSB0aGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjIxNzcsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQyMjozNzowNi4yOTYzODEyMjVaIiwiU2VxIjozNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2MTgyNTYzMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJhZGRyY29uZl9wcmVmaXhfcmN2XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImluY2x1ZGUvbmV0L2FkZHJjb25mLmhcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9uZXQvYWRkcmNvbmYuaD0xNTM9dm9pZCBhZGRyY29uZl9hZGRfbGlua2xvY2FsKHN0cnVjdCBpbmV0Nl9kZXYgKmlkZXYsXFxuLS1cXG5pbmNsdWRlL25ldC9hZGRyY29uZi5oLTE1NS1cXG5pbmNsdWRlL25ldC9hZGRyY29uZi5oOjE1NjppbnQgYWRkcmNvbmZfcHJlZml4X3Jjdl9hZGRfYWRkcihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuaW5jbHVkZS9uZXQvYWRkcmNvbmYuaC0xNTctXFx0XFx0XFx0XFx0IGNvbnN0IHN0cnVjdCBwcmVmaXhfaW5mbyAqcGluZm8sXFxuLS1cXG5pbmNsdWRlL25ldC9hZGRyY29uZi5oPTI4Mj1zdGF0aWMgaW5saW5lIGJvb2wgaXB2Nl9pc19tbGQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IG5leHRoZHIsIGludCBvZmZzZXQpXFxuLS1cXG5pbmNsdWRlL25ldC9hZGRyY29uZi5oLTMwMy1cXG5pbmNsdWRlL25ldC9hZGRyY29uZi5oOjMwNDp2b2lkIGFkZHJjb25mX3ByZWZpeF9yY3Yoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG5pbmNsdWRlL25ldC9hZGRyY29uZi5oLTMwNS1cXHRcXHRcXHQgdTggKm9wdCwgaW50IGxlbiwgYm9vbCBzbGxhbyk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDIyOjM3OjA2LjQ1ODIxODE1NloiLCJTZXEiOjM1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2NzY5MjQxNzc1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgSVB2NiBSb3V0ZSBEZWxldGlvbiBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIG15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IGl0IHRvdWNoZXMgc29tZSBpbXBvcnRhbnQgcGFydHMgb2YgdGhlIElQdjYgcm91dGluZyBzdGFjay4gSXQncyBkZWNsYXJlZCBpbiBgaW5jbHVkZS9uZXQvYWRkcmNvbmYuaGAsIHNvIHdlJ3JlIHRhbGtpbmcgYWJvdXQgY29yZSBmdW5jdGlvbmFsaXR5LiBJIGltbWVkaWF0ZWx5IHplcm8gaW4gb24gdGhlIGtleSBzeW1ib2xzIGludm9sdmVkOiBgaXA2X2RlbF9ydF9yZWFzb25gLCBgZmliNl9kZWxgLCBgaW5ldDZfcnRfbm90aWZ5YCwgYHJ0Nl9yb3V0ZV9yY3ZgLCBhbmQgYGFkZHJjb25mX3ByZWZpeF9yY3ZgLiBUaG9zZSBsb29rIGxpa2UgdGhlIG1haW4gcGxheWVycyBoZXJlLCBhbG9uZyB3aXRoIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9uIG9wdGlvbnM6IGBJUFY2YCwgYElQVjZfUk9VVEVSX1BSRUZgLCBhbmQgYElQVjZfUk9VVEVfSU5GT2AuXG5cblRoZSBnaXN0IG9mIGl0IGlzIHRoZSBpbnRyb2R1Y3Rpb24gb2YgYSBuZXcgbmV0bGluayBhdHRyaWJ1dGUsIGBSVEFfREVMX1JFQVNPTmAsIGFuZCB0aGUgbW9kaWZpY2F0aW9uIG9mIGhvdyBJUHY2IHJvdXRlcyBhcmUgZGVsZXRlZCwgc3BlY2lmaWNhbGx5IGFkZGluZyBhIHJlYXNvbiBjb2RlIHdoZW4gYSByb3V0ZSBleHBpcmVzIG9yIGlzIHdpdGhkcmF3biB2aWEgYSBSb3V0ZXIgQWR2ZXJ0aXNlbWVudCAoUkEpLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UuIEl0J3Mgbm90IGp1c3QgYSByZWZhY3Rvcjsgd2UncmUgZnVuZGFtZW50YWxseSBhbHRlcmluZyB0aGUgaW5mb3JtYXRpb24gcHJvdmlkZWQgd2hlbiBhIHJvdXRlIGlzIHJlbW92ZWQuXG5cbk15IGluaXRpYWwgcmVhc29uaW5nIGlzIHRoYXQsIHNpbmNlIHRoaXMgdG91Y2hlcyBjb3JlIHJvdXRpbmcgbG9naWMgYW5kIG5laWdoYm9yIGRpc2NvdmVyeSBmdW5jdGlvbnMsIGl0J3MgYSBnb29kIGNhbmRpZGF0ZSBmb3IgZnV6emluZy4gVGhlIHBhdGNoIG1vZGlmaWVzIGNyaXRpY2FsIGZ1bmN0aW9ucyBsaWtlIGBpcDZfZGVsX3J0X3JlYXNvbmAsIGBmaWI2X2RlbGAsIGBpbmV0Nl9ydF9ub3RpZnlgLCBgcnQ2X3JvdXRlX3JjdmAsIGFuZCBgYWRkcmNvbmZfcHJlZml4X3JjdmAgdG8gcG9wdWxhdGUgdGhhdCBuZXcgYXR0cmlidXRlLCBgUlRBX0RFTF9SRUFTT05gLiBFeHBpcmF0aW9uIGFuZCBSQSB3aXRoZHJhd2FsIGFyZSBjb21tb24gY29uZGl0aW9ucy4gV2UgbmVlZCB0byBiZSBhYmxlIHRvIGtub3cgd2h5IGEgcm91dGUgZGlzYXBwZWFyZWQuXG5cbkxldCBtZSBkb3VibGUtY2hlY2sgd2hpY2ggb2YgdGhlc2UgZnVuY3Rpb25zIGlzIHRoZSBtb3N0IGludGVyZXN0aW5nIHRvIGZvY3VzIG9uLiBSaWdodCwgYGlwNl9kZWxfcnRfcmVhc29uYCBsb29rcyBwcm9taXNpbmcuIEl0J3MgYSB3cmFwcGVyIGFyb3VuZCBgX19pcDZfZGVsX3J0YCwgYnV0IHRoZSB3cmFwcGVyIGl0c2VsZiBpcyBleHBvcnRlZCwgd2hpY2ggaXMgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBgX19pcDZfZGVsX3J0YCBpcyBzdGF0aWMgaW50ZXJuYWxseSwgYnV0IHRoZSB3cmFwcGVyIGlzIGdsb2JhbC4gQWxzbywgYGZpYjZfZGVsYCwgYGluZXQ2X3J0X25vdGlmeWAsIGBydDZfcm91dGVfcmN2YCwgYW5kIGBhZGRyY29uZl9wcmVmaXhfcmN2YCBhcmUgYWxsIGV4cG9ydGVkLCBzbyB0aG9zZSBhcmUgZ29vZCBsZWFkcy5cblxuSG9sZCBvbiwgSSBuZWVkIHRvIGNoZWNrIHNvbWV0aGluZy4uLiBJdCBsb29rcyBsaWtlIGBpcDZfZGVsX3J0X3JlYXNvbmAgaXMgYWN0dWFsbHkgKm5vdCogZXhwbGljaXRseSBleHBvcnRlZCwgYnV0IGl0J3MgZ2xvYmFsLiBJdCBpcyBnbG9iYWwuIEkgbmVlZCB0byBjb25maXJtIHdoZXRoZXIgdGhlIGZ1bmN0aW9uIGlzIHRydWx5IGFjY2Vzc2libGUgZXh0ZXJuYWxseSBvciBub3QuIEknbGwgbmVlZCB0byBjaGVjayB0aGUgc3ltYm9sIHRhYmxlIGFnYWluLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMjc1NCwiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQyNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQyMjozNzoxMy4yMjc0NjI3MjFaIiwiU2VxIjozNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2MzY5NTY0MSwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiRVhQT1JUX1NZTUJPTC4qaXA2X2RlbF9ydF9yZWFzb25cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjYvcm91dGUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMjI6Mzc6MTMuMzkxMTY5NTgyWiIsIlNlcSI6MzcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI4MzEyMTU2MTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgcHJlc2VudGVkIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqTmF2aWdhdGluZyBTY29wZSBhbmQgRnVuY3Rpb25hbGl0eSoqXG5cbkFscmlnaHQsIHNvIHRoZSBmdW5jdGlvbiBpbiBxdWVzdGlvbiBpc24ndCBleHBsaWNpdGx5IGV4cG9ydGVkLCBidXQgaXQncyBjbGVhcmx5IGFjY2Vzc2libGUgZ2xvYmFsbHkuIFRoYXQncyBhY3R1YWxseSBwZXJmZWN0bHkgYWNjZXB0YWJsZSBpbiB0aGlzIHBhcnRpY3VsYXIgYXJjaGl0ZWN0dXJhbCBjb250ZXh0OyBpdCBhbGlnbnMgd2l0aCB0aGUgb3ZlcmFsbCBkZXNpZ24gcGhpbG9zb3BoeSBhbmQgaW50ZW5kZWQgdXNhZ2UuIE5vIG5lZWQgdG8gd29ycnkgYWJvdXQgZXh0ZXJuYWwgZXhwb3N1cmUgb3IgbW9kdWxlIGJvdW5kYXJpZXMgaW4gdGhpcyBjYXNlLlxuXG5Ob3csIGxldCdzIHR1cm4gb3VyIGF0dGVudGlvbiB0byBgZmliNl9kZWxgLiBUaGF0J3MgdGhlIGtleSBlbGVtZW50IHdlIG5lZWQgdG8gZXhhbWluZSBuZXh0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMzc3OCwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDIyOjM3OjE2LjIyMjM4ODk0WiIsIlNlcSI6MzgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjMzMDAwMDgsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkVYUE9SVF9TWU1CT0wuKmZpYjZfZGVsXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pcHY2L2lwNl9maWIuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMjI6Mzc6MTYuNDQ1Njk4NjI4WiIsIlNlcSI6MzksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMxODI3OTk1MzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKktlcm5lbCBSb3V0aW5nIFRhYmxlIE5vdGlmaWNhdGlvbiBBbmFseXNpcyoqXG5cbk9rYXksIHNvIHRoaXMgaXNuJ3QgYWJvdXQgYW55dGhpbmcgSSd2ZSBleHBsaWNpdGx5IGV4cG9ydGVkIGZyb20gdGhlIG1vZHVsZSDigJMgaXQncyBzb21ldGhpbmcgdGhhdCdzIGdsb2JhbGx5IGFjY2Vzc2libGUsIHdoaWNoIGltbWVkaWF0ZWx5IGNoYW5nZXMgaG93IEkgbmVlZCB0byBhcHByb2FjaCB0aGlzLiAgSSdtIGRpZ2dpbmcgaW50byBzb21ldGhpbmcgdGhhdCwgd2hpbGUgY3JpdGljYWwsIGlzbid0IG5lY2Vzc2FyaWx5IHdpdGhpbiBhIGRlZmluZWQgaW50ZXJmYWNlLiBUaGF0IHNpZ25hbHMgYSBwb3RlbnRpYWwgZm9yIG1vcmUgd2lkZXNwcmVhZCBpbXBhY3QsIGFuZCByZXF1aXJlcyBhIGJyb2FkZXIgdW5kZXJzdGFuZGluZyB0byBhdm9pZCBicmVha2luZyBzb21ldGhpbmcgZWxzZS5cblxuUmlnaHQsIGxldCdzIGRyaWxsIGRvd24uICBNeSBuZXh0IG1vdmUgaXMgY2xlYXI6IEkgbmVlZCB0byBzY3J1dGluaXplIGBpbmV0Nl9ydF9ub3RpZnlgLiAgVGhhdCByb3V0aW5lIGlzIHRoZSBrZXkg4oCTIGl0J3MgdGhlIHBvaW50IG9mIGludGVyZXN0IGZvciByb3V0ZSB0YWJsZSBjaGFuZ2Ugbm90aWZpY2F0aW9ucyBpbiB0aGUgSVB2NiBjb250ZXh0LiAgSSdtIGV4cGVjdGluZyB0aGlzIHRvIGJlIHRoZSBjb3JlIG9mIG15IGFuYWx5c2lzLiAgSeKAmWxsIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIG5vdGlmaWNhdGlvbiBpcyB0cmlnZ2VyZWQsIHdoYXQgZGF0YSBpcyBwYXNzZWQsIGFuZCB3aG8gdGhlIGNvbnN1bWVycyBvZiB0aGUgbm90aWZpY2F0aW9uIGFyZS4gVGhlIGdvYWwgaXMgdG8gZnVsbHkgdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgZ2xvYmFsIHBvaW50LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMzk3OSwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDIyOjM3OjE5LjYyODUwMTEzNloiLCJTZXEiOjQwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjI0MDYwNDY4LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJFWFBPUlRfU1lNQk9MLippbmV0Nl9ydF9ub3RpZnlcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjYvcm91dGUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMjI6Mzc6MTkuODUyNTcxMjQ0WiIsIlNlcSI6NDEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyNTk3NDE3ODQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOlxuXG4qKlVuY292ZXJpbmcgdGhlIEdsb2JhbCBTaWduaWZpY2FuY2UqKlxuXG5Pa2F5LCBzbyB0aGlzIGlzbid0IGFib3V0IHNvbWV0aGluZyBzcGVjaWZpY2FsbHkgZXhwb3J0ZWQ7IGl0J3MgZ290IGEgYnJvYWRlciwgbW9yZSBlbmNvbXBhc3NpbmcgaW5mbHVlbmNlLiBNeSBtaW5kIGltbWVkaWF0ZWx5IGp1bXBzIHRvIGltcGxpY2F0aW9ucyBiZXlvbmQgYSBsb2NhbCBzY29wZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGJpZyBwaWN0dXJlLiBMZXQncyBzZWUuLi4gc2luY2UgaXQncyBnbG9iYWwsIGEgZ29vZCBwbGFjZSB0byBzdGFydCBkaWdnaW5nIGlzIGF0IGBydDZfcm91dGVfcmN2YC4gVGhhdCdzIHdoZXJlIEkgY2FuIHRyYWNlIHRoZSBwYXRoIGFuZCBpbnRlcmFjdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI0MjY0LCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMjI6Mzc6MjMuMTEyMzE2NDE4WiIsIlNlcSI6NDIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjIyNTMzMjgsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkVYUE9SVF9TWU1CT0wuKnJ0Nl9yb3V0ZV9yY3ZcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjYvcm91dGUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMjI6Mzc6MjMuMzM0NTc3OTg2WiIsIlNlcSI6NDMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI5NzIzOTgyMTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgdGhlIFNjb3BlIG9mIGEgVmFyaWFibGUqKlxuXG5IbW0sIHRoaXMgdmFyaWFibGUgaXNuJ3QgZXhwbGljaXRseSBleHBvcnRlZCwgd2hpY2ggaXMgYSBrZXkgY2x1ZS4gVGhhdCBzdWdnZXN0cyBpdCdzIGxpa2VseSBzY29wZWQgZ2xvYmFsbHkgd2l0aGluIHRoZSBjdXJyZW50IG1vZHVsZSBvciBjb250ZXh0LiBJIG5lZWQgdG8gY29uZmlybSB0aGlzIHVuZGVyc3RhbmRpbmcsIGJlY2F1c2UgaWYgaXQncyB1bmludGVudGlvbmFsbHkgZ2xvYmFsLCBpdCBjb3VsZCBsZWFkIHRvIHVuZXhwZWN0ZWQgaW50ZXJhY3Rpb25zIG9yIHNpZGUgZWZmZWN0cyBsYXRlci5cblxuTXkgbmV4dCBzdGVwIGlzIHRvIGV4YW1pbmUgYGFkZHJjb25mX3ByZWZpeF9yY3ZgLiBUaGF0IGZ1bmN0aW9uIChvciBkYXRhIHN0cnVjdHVyZSwgZGVwZW5kaW5nIG9uIGNvbnRleHQpIGlzIHByb2JhYmx5IHdoZXJlIHRoaXMgZ2xvYmFsIHZhcmlhYmxlIGlzIGRlZmluZWQsIHVzZWQsIG9yIG1vZGlmaWVkLiBJJ2xsIG5lZWQgdG8gc2NydXRpbml6ZSB0aGF0IHBpZWNlIG9mIHRoZSBjb2RlIHRvIHZlcmlmeSBpdHMgdHJ1ZSBzY29wZSBhbmQgaW1wYWN0LiBUaGUgbGFjayBvZiBhbiBleHBsaWNpdCBleHBvcnQgc3Ryb25nbHkgc3VnZ2VzdHMgYW4gaW1wbGljaXQsIGFuZCBwb3RlbnRpYWxseSBwcm9ibGVtYXRpYywgZ2xvYmFsIHNjb3BlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNDQzOCwiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDIyOjM3OjI2LjMwNjk3OTExNloiLCJTZXEiOjQ0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQyMDg5MTQyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkVYUE9SVF9TWU1CT0wuKmFkZHJjb25mX3ByZWZpeF9yY3ZcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjYvYWRkcmNvbmYuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2Ni9hZGRyY29uZi5jPTI2OTU9aW50IGFkZHJjb25mX3ByZWZpeF9yY3ZfYWRkX2FkZHIoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbi0tXFxubmV0L2lwdjYvYWRkcmNvbmYuYy0yNzk1LX1cXG5uZXQvaXB2Ni9hZGRyY29uZi5jOjI3OTY6RVhQT1JUX1NZTUJPTF9HUEwoYWRkcmNvbmZfcHJlZml4X3Jjdl9hZGRfYWRkcik7XFxubmV0L2lwdjYvYWRkcmNvbmYuYy0yNzk3LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQyMjozNzoyNi40NDkwNzMzNjhaIiwiU2VxIjo0NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDAyMDQzMjI2MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIFRhcmdldCBJbnZlc3RpZ2F0aW9uKipcblxuT2theSwgc28gSSd2ZSBpZGVudGlmaWVkIHNvbWUgcG90ZW50aWFsIGZ1enppbmcgY2FuZGlkYXRlcywgdGhpbmdzIHRoYXQgYXJlbid0IHNwZWNpZmljYWxseSBleHBvcnRlZCwgYnV0IGFyZSBnbG9iYWxseSBhY2Nlc3NpYmxlLCB3aGljaCBpcyBhbHdheXMgYW4gaW50ZXJlc3Rpbmcgc3RhcnRpbmcgcG9pbnQgZm9yIHZ1bG5lcmFiaWxpdHkgcmVzZWFyY2guIE5vdywgSSB3YW50IHRvIGRpdmUgYSBsaXR0bGUgZGVlcGVyIG9uIHRoaXMgYElQVjZfUk9VVEVfSU5GT2Agc2V0dGluZy4gTGV0J3Mgc2VlIGlmIGl0IGhhcyBhbnkgZGVwZW5kZW5jaWVzLiBBaGEsIGl0IGxvb2tzIGxpa2UgaXQgcmVsaWVzIG9uIGBJUFY2X1JPVVRFUl9QUkVGYC4gT2theSwgdGhhdCBtYWtlcyBzZW5zZS4gTm93LCBsZXQncyB0cmFjZSB0aGlzIGRlcGVuZGVuY3kuIERvZXMgKnRoYXQqIGhhdmUgYW55IGRlcGVuZGVuY2llcyB0aGF0IHdlIG5lZWQgdG8gYmUgYXdhcmUgb2Y/IEFscmlnaHQsIGJhc2VkIG9uIHRoZSBgbWVudWNvbmZpZ2Agb3B0aW9ucywgdGhhdCdzIGRlZmluZWQgdW5kZXIgdGhlIGBJUFY2YCBzZWN0aW9uIGluIGBuZXQvaXB2Ni9LY29uZmlnYC4gU28sIG9idmlvdXNseSBgSVBWNmAgaXMgYSByZXF1aXJlbWVudC4gUmlnaHQsIHRoaXMgaW5mb3JtcyBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBhdHRhY2sgc3VyZmFjZSwgYW5kIHRoZSBhcHByb3ByaWF0ZSBjb250ZXh0IHdoZW4gY29uc3RydWN0aW5nIGZ1enppbmcgcGF5bG9hZHMuXG5cbk5vdywgSSdsbCBnbyBoYXZlIGEgbG9vayBpbiBgbmV0L2lwdjYvS2NvbmZpZ2AgYW5kIGRvdWJsZSBjaGVjayB0aGUgZGV0YWlscyBvZiBgSVBWNmAsIHNvIEknbSBjb21wbGV0ZWx5IGNsZWFyIG9uIGl0cyBpbXBsaWNhdGlvbnMgYW5kIGludGVyZGVwZW5kZW5jaWVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNDc4NCwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQyMjozNzozMC40Njk1MDg5NjFaIiwiU2VxIjo0NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3MDkxNzA4MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgSVBWNlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXB2Ni9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY2L0tjb25maWctNS1cXG5uZXQvaXB2Ni9LY29uZmlnOjY6bWVudWNvbmZpZyBJUFY2XFxubmV0L2lwdjYvS2NvbmZpZy03LVxcdGJvb2wgXFxcIlRoZSBJUHY2IHByb3RvY29sXFxcIlxcbi0tXFxubmV0L2lwdjYvS2NvbmZpZz0xOT1pZiBJUFY2XFxubmV0L2lwdjYvS2NvbmZpZy0yMC1cXG5uZXQvaXB2Ni9LY29uZmlnOjIxOmNvbmZpZyBJUFY2X1JPVVRFUl9QUkVGXFxubmV0L2lwdjYvS2NvbmZpZy0yMi1cXHRib29sIFxcXCJJUHY2OiBSb3V0ZXIgUHJlZmVyZW5jZSAoUkZDIDQxOTEpIHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvaXB2Ni9LY29uZmlnLTMwLVxcbm5ldC9pcHY2L0tjb25maWc6MzE6Y29uZmlnIElQVjZfUk9VVEVfSU5GT1xcbm5ldC9pcHY2L0tjb25maWctMzItXFx0Ym9vbCBcXFwiSVB2NjogUm91dGUgSW5mb3JtYXRpb24gKFJGQyA0MTkxKSBzdXBwb3J0XFxcIlxcbi0tXFxubmV0L2lwdjYvS2NvbmZpZy0zOC1cXG5uZXQvaXB2Ni9LY29uZmlnOjM5OmNvbmZpZyBJUFY2X09QVElNSVNUSUNfREFEXFxubmV0L2lwdjYvS2NvbmZpZy00MC1cXHRib29sIFxcXCJJUHY2OiBFbmFibGUgUkZDIDQ0MjkgT3B0aW1pc3RpYyBEQURcXFwiXFxuLS1cXG5uZXQvaXB2Ni9LY29uZmlnPTEwMj1jb25maWcgSU5FVDZfSVBDT01QXFxuLS1cXG5uZXQvaXB2Ni9LY29uZmlnLTExMS1cXG5uZXQvaXB2Ni9LY29uZmlnOjExMjpjb25maWcgSVBWNl9NSVA2XFxubmV0L2lwdjYvS2NvbmZpZy0xMTMtXFx0dHJpc3RhdGUgXFxcIklQdjY6IE1vYmlsaXR5XFxcIlxcbi0tXFxubmV0L2lwdjYvS2NvbmZpZy0xMTktXFxubmV0L2lwdjYvS2NvbmZpZzoxMjA6Y29uZmlnIElQVjZfSUxBXFxubmV0L2lwdjYvS2NvbmZpZy0xMjEtXFx0dHJpc3RhdGUgXFxcIklQdjY6IElkZW50aWZpZXIgTG9jYXRvciBBZGRyZXNzaW5nIChJTEEpXFxcIlxcbi0tXFxubmV0L2lwdjYvS2NvbmZpZz0xNDY9Y29uZmlnIElORVQ2X1RVTk5FTFxcbi0tXFxubmV0L2lwdjYvS2NvbmZpZy0xNDktXFxubmV0L2lwdjYvS2NvbmZpZzoxNTA6Y29uZmlnIElQVjZfVlRJXFxubmV0L2lwdjYvS2NvbmZpZy0xNTEtXFx0dHJpc3RhdGUgXFxcIlZpcnR1YWwgKHNlY3VyZSkgSVB2NjogdHVubmVsaW5nXFxcIlxcbi0tXFxubmV0L2lwdjYvS2NvbmZpZy0xNjEtXFxubmV0L2lwdjYvS2NvbmZpZzoxNjI6Y29uZmlnIElQVjZfU0lUXFxubmV0L2lwdjYvS2NvbmZpZy0xNjMtXFx0dHJpc3RhdGUgXFxcIklQdjY6IElQdjYtaW4tSVB2NCB0dW5uZWwgKFNJVCBkcml2ZXIpXFxcIlxcbi0tXFxubmV0L2lwdjYvS2NvbmZpZy0xNzYtXFxubmV0L2lwdjYvS2NvbmZpZzoxNzc6Y29uZmlnIElQVjZfU0lUXzZSRFxcbm5ldC9pcHY2L0tjb25maWctMTc4LVxcdGJvb2wgXFxcIklQdjY6IElQdjYgUmFwaWQgRGVwbG95bWVudCAoNlJEKVxcXCJcXG4tLVxcbm5ldC9pcHY2L0tjb25maWctMTk1LVxcbm5ldC9pcHY2L0tjb25maWc6MTk2OmNvbmZpZyBJUFY2X05ESVNDX05PREVUWVBFXFxubmV0L2lwdjYvS2NvbmZpZy0xOTctXFx0Ym9vbFxcbm5ldC9pcHY2L0tjb25maWctMTk4LVxcbm5ldC9pcHY2L0tjb25maWc6MTk5OmNvbmZpZyBJUFY2X1RVTk5FTFxcbm5ldC9pcHY2L0tjb25maWctMjAwLVxcdHRyaXN0YXRlIFxcXCJJUHY2OiBJUC1pbi1JUHY2IHR1bm5lbCAoUkZDMjQ3MylcXFwiXFxuLS1cXG5uZXQvaXB2Ni9LY29uZmlnLTIwOS1cXG5uZXQvaXB2Ni9LY29uZmlnOjIxMDpjb25maWcgSVBWNl9HUkVcXG5uZXQvaXB2Ni9LY29uZmlnLTIxMS1cXHR0cmlzdGF0ZSBcXFwiSVB2NjogR1JFIHR1bm5lbFxcXCJcXG4tLVxcbm5ldC9pcHY2L0tjb25maWctMjI3LVxcbm5ldC9pcHY2L0tjb25maWc6MjI4OmNvbmZpZyBJUFY2X0ZPVVxcbm5ldC9pcHY2L0tjb25maWctMjI5LVxcdHRyaXN0YXRlXFxuLS1cXG5uZXQvaXB2Ni9LY29uZmlnLTIzMS1cXG5uZXQvaXB2Ni9LY29uZmlnOjIzMjpjb25maWcgSVBWNl9GT1VfVFVOTkVMXFxubmV0L2lwdjYvS2NvbmZpZy0yMzMtXFx0dHJpc3RhdGVcXG4tLVxcbm5ldC9pcHY2L0tjb25maWctMjM2LVxcbm5ldC9pcHY2L0tjb25maWc6MjM3OmNvbmZpZyBJUFY2X01VTFRJUExFX1RBQkxFU1xcbm5ldC9pcHY2L0tjb25maWctMjM4LVxcdGJvb2wgXFxcIklQdjY6IE11bHRpcGxlIFJvdXRpbmcgVGFibGVzXFxcIlxcbi0tXFxubmV0L2lwdjYvS2NvbmZpZy0yNDItXFxubmV0L2lwdjYvS2NvbmZpZzoyNDM6Y29uZmlnIElQVjZfU1VCVFJFRVNcXG5uZXQvaXB2Ni9LY29uZmlnLTI0NC1cXHRib29sIFxcXCJJUHY2OiBzb3VyY2UgYWRkcmVzcyBiYXNlZCByb3V0aW5nXFxcIlxcbi0tXFxubmV0L2lwdjYvS2NvbmZpZy0yNTYtXFxubmV0L2lwdjYvS2NvbmZpZzoyNTc6Y29uZmlnIElQVjZfTVJPVVRFXFxubmV0L2lwdjYvS2NvbmZpZy0yNTgtXFx0Ym9vbCBcXFwiSVB2NjogbXVsdGljYXN0IHJvdXRpbmdcXFwiXFxuLS1cXG5uZXQvaXB2Ni9LY29uZmlnLTI2NC1cXG5uZXQvaXB2Ni9LY29uZmlnOjI2NTpjb25maWcgSVBWNl9NUk9VVEVfTVVMVElQTEVfVEFCTEVTXFxubmV0L2lwdjYvS2NvbmZpZy0yNjYtXFx0Ym9vbCBcXFwiSVB2NjogbXVsdGljYXN0IHBvbGljeSByb3V0aW5nXFxcIlxcbi0tXFxubmV0L2lwdjYvS2NvbmZpZy0yNzgtXFxubmV0L2lwdjYvS2NvbmZpZzoyNzk6Y29uZmlnIElQVjZfUElNU01fVjJcXG5uZXQvaXB2Ni9LY29uZmlnLTI4MC1cXHRib29sIFxcXCJJUHY2OiBQSU0tU00gdmVyc2lvbiAyIHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvaXB2Ni9LY29uZmlnLTI4NS1cXG5uZXQvaXB2Ni9LY29uZmlnOjI4Njpjb25maWcgSVBWNl9TRUc2X0xXVFVOTkVMXFxubmV0L2lwdjYvS2NvbmZpZy0yODctXFx0Ym9vbCBcXFwiSVB2NjogU2VnbWVudCBSb3V0aW5nIEhlYWRlciBlbmNhcHN1bGF0aW9uIHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvaXB2Ni9LY29uZmlnLTI5OS1cXG5uZXQvaXB2Ni9LY29uZmlnOjMwMDpjb25maWcgSVBWNl9TRUc2X0hNQUNcXG5uZXQvaXB2Ni9LY29uZmlnLTMwMS1cXHRib29sIFxcXCJJUHY2OiBTZWdtZW50IFJvdXRpbmcgSE1BQyBzdXBwb3J0XFxcIlxcbi0tXFxubmV0L2lwdjYvS2NvbmZpZy0zMTEtXFxubmV0L2lwdjYvS2NvbmZpZzozMTI6Y29uZmlnIElQVjZfU0VHNl9CUEZcXG5uZXQvaXB2Ni9LY29uZmlnLTMxMy1cXHRkZWZfYm9vbCB5XFxuLS1cXG5uZXQvaXB2Ni9LY29uZmlnLTMxNi1cXG5uZXQvaXB2Ni9LY29uZmlnOjMxNzpjb25maWcgSVBWNl9SUExfTFdUVU5ORUxcXG5uZXQvaXB2Ni9LY29uZmlnLTMxOC1cXHRib29sIFxcXCJJUHY2OiBSUEwgU291cmNlIFJvdXRpbmcgSGVhZGVyIHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvaXB2Ni9LY29uZmlnLTMyNy1cXG5uZXQvaXB2Ni9LY29uZmlnOjMyODpjb25maWcgSVBWNl9JT0FNNl9MV1RVTk5FTFxcbm5ldC9pcHY2L0tjb25maWctMzI5LVxcdGJvb2wgXFxcIklQdjY6IElPQU0gUHJlLWFsbG9jYXRlZCBUcmFjZSBpbnNlcnRpb24gc3VwcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMjI6Mzc6MzAuNjQwNDMxMzQyWiIsIlNlcSI6NDcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUyNjA0Mzk3NjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgSVB2NiBSb3V0ZSBNYW5hZ2VtZW50KipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhlc2UgSVB2NiBjb25maWd1cmF0aW9uczogYElQVjZgLCBgSVBWNl9ST1VURVJfUFJFRmAsIGFuZCBgSVBWNl9ST1VURV9JTkZPYC4gVGhhdCdzIHdoZXJlIGl0IGFsbCBzdGFydHMuXG5cbk5vdywgbGV0J3MgY2lyY2xlIGJhY2sgdG8gYGlwNl9kZWxfcnRfcmVhc29uYC4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBjYWxsIHNpdGVzLiBBaGEhIEl0J3MgaW52b2tlZCBmcm9tIGBhZGRyY29uZl9wcmVmaXhfcmN2YCwgYG5kaXNjX3JvdXRlcl9kaXNjb3ZlcnlgLCBhbmQgYHJ0Nl9yb3V0ZV9yY3ZgLiBUaGlzIGlzIGltcG9ydGFudC4gR29pbmcgZnVydGhlciBkb3duLCBgZmliNl9kZWxgIGlzIGNhbGxlZCBmcm9tIGEgaGFuZGZ1bCBvZiBwbGFjZXMgLSBgX19pcDZfZGVsX3J0YCwgYF9faXA2X2RlbF9ydF9zaWJsaW5nc2AsIGBmaWI2X2NsZWFuX25vZGVgLCBhbmQgYGZpYjZfZ2NfdGFibGVgLiBUaGUgbm90aWZpY2F0aW9uIGZ1bmN0aW9uLCBgaW5ldDZfcnRfbm90aWZ5YCwgZ2V0cyBjYWxsZWQgYWNyb3NzIHRoZSBib2FyZCAtIGJ5IGBmaWI2X2FkZF9ydDJub2RlYCwgYGZpYjZfZGVsX3JvdXRlYCwgYG5kaXNjX3JvdXRlcl9kaXNjb3ZlcnlgLCBgaXA2X3JvdXRlX21wYXRoX25vdGlmeWAsIGFuZCBgZmliNl9ydF91cGRhdGVgLiBGaW5hbGx5LCBgcnQ2X3JvdXRlX3JjdmAgYW5kIGBhZGRyY29uZl9wcmVmaXhfcmN2YCBhcmUgY2FsbGVkIGJ5IGBuZGlzY19yb3V0ZXJfZGlzY292ZXJ5YC5cblxuU28sIGBuZGlzY19yb3V0ZXJfZGlzY292ZXJ5YCBhcHBlYXJzIHRvIGJlIGEgY3J1Y2lhbCBmdW5jdGlvbiBmb3IgZnV6emluZyBnaXZlbiBpdHMgd2lkZXNwcmVhZCBpbmZsdWVuY2UsIHNwZWNpZmljYWxseSBkZWFsaW5nIHdpdGggcm91dGVyIGRpc2NvdmVyeSBhbmQgcm91dGUgbWFuYWdlbWVudC4gVGhlIGNhdGNoIGlzIHRoYXQgaXQncyBzdGF0aWMuIEJ1dCB3YWl0ISBJdCdzIGNhbGxlZCBmcm9tIGBuZGlzY19yY3ZgLCB3aGljaCBoYW5kbGVzIElDTVB2NiBOZWlnaGJvciBEaXNjb3ZlcnkgbWVzc2FnZXMsIGFuZCB0aGF0J3MgZ2xvYmFsLiBUaGlzIGNvdWxkIGJlIGEgZ29vZCBwb2ludCB0byBzdGFydCB0aGUgZnV6emluZyBwcm9jZXNzLiBJJ2xsIG5lZWQgdG8gZm9jdXMgb24gY3JhZnRpbmcgc3BlY2lmaWMgSUNNUHY2IE5laWdoYm9yIERpc2NvdmVyeSBtZXNzYWdlcyB0byB0YXJnZXQgdGhpcyBmdW5jdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MjY3MDYsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNzgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMjI6Mzc6MzUuOTAwODc0Mzc4WiIsIlNlcSI6NDgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzYzMzgzMjMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmRpc2NfcmN2XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pcHY2L25kaXNjLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjYvbmRpc2MuYz0xNzkyPXN0YXRpYyBib29sIG5kaXNjX3N1cHByZXNzX2ZyYWdfbmRpc2Moc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9pcHY2L25kaXNjLmMtMTgwNS1cXG5uZXQvaXB2Ni9uZGlzYy5jOjE4MDY6ZW51bSBza2JfZHJvcF9yZWFzb24gbmRpc2NfcmN2KHN0cnVjdCBza19idWZmICpza2IpXFxubmV0L2lwdjYvbmRpc2MuYy0xODA3LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMjI6Mzc6MzYuMDM3MjE4ODUxWiIsIlNlcSI6NDksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM4OTU3MTM3NzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgSW5pdGlhbCBBc3Nlc3NtZW50IG9mIHRoZSBJUFY2IFJvdXRlIFJlbW92YWwgXHUwMDI2IE5vdGlmaWNhdGlvbiBGbG93KipcblxuT2theSwgc28gSSdtIGRpdmluZyBpbnRvIHRoaXMgSVB2NiByb3V0aW5nIGNvZGUgYW5kIGltbWVkaWF0ZWx5IEkgc2VlIGEgcGF0dGVybiBmb3JtaW5nLiBgbmRpc2NfcmN2YCwgYHJ0Nl9yb3V0ZV9yY3ZgLCBhbmQgYGFkZHJjb25mX3ByZWZpeF9yY3ZgIOKAkyB0aGVzZSBmdW5jdGlvbnMgYXJlIGFsbCBnbG9iYWxseSB2aXNpYmxlLCBhbmQgdGhhdCdzIHRoZSBrZXkuIFRoYXQgdGVsbHMgbWUgdGhlc2UgYXJlIGVudHJ5IHBvaW50cy5cblxuR2l2ZW4gdGhhdCwgSSBuZWVkIHRvIGZvY3VzIG15IGF0dGVudGlvbiBvbiB3aGVyZSB0aGVzZSBwaWVjZXMgaW50ZXJmYWNlLiBUaGUgc3ltYm9scyB0aGF0IHJlYWxseSBwaXF1ZSBteSBpbnRlcmVzdCBhcyBiZWluZyBwb3RlbnRpYWwga2V5cyB0byB1bmRlcnN0YW5kaW5nIHRoZSBkZWxldGlvbiBhbmQgbm90aWZpY2F0aW9uIG1lY2hhbmlzbSBhcmU6IGBpcDZfZGVsX3J0X3JlYXNvbmAsIGBmaWI2X2RlbGAsIGBpbmV0Nl9ydF9ub3RpZnlgLCBgcnQ2X3JvdXRlX3JjdmAsIGBhZGRyY29uZl9wcmVmaXhfcmN2YCwgYW5kIGBuZGlzY19yY3ZgLiBUaGV5IGFsbCBzZWVtIGhpZ2hseSByZWxldmFudC5cblxuTXkgaW1tZWRpYXRlIG5leHQgc3RlcCB3aWxsIGJlIHRvIHZlcmlmeSB0aGF0IGBuZGlzY19yY3ZgIGlzIGluZGVlZCBleHBvcnRlZCwgY29uZmlybWluZyBpdCBpcyBhbiBpbXBvcnRhbnQgZ2xvYmFsIGZ1bmN0aW9uLiBJIG5lZWQgdG8gYmUgc3VyZSBiZWZvcmUgSSBtb3ZlIGZvcndhcmQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI3NTIxLCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTMyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDIyOjM3OjM5LjkzMjkzNjIyMVoiLCJTZXEiOjUwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjI5MTYxNDU4LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJFWFBPUlRfU1lNQk9MLipuZGlzY19yY3ZcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjYvbmRpc2MuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMjI6Mzc6NDAuMTYyMTA2Nzc5WiIsIlNlcSI6NTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjkwOTA0NzUyMjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyBUYXJnZXRzIGZvciBJUHY2IFJvdXRlIERlbGV0aW9uIExvZ2ljKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyBhbGwgYWJvdXQgaGFuZGxpbmcgdGhlIG5ldyBgUlRBX0RFTF9SRUFTT05gIGF0dHJpYnV0ZSBmb3IgSVB2NiByb3V0ZSBkZWxldGlvbiBub3RpZmljYXRpb25zLCBzcGVjaWZpY2FsbHkgd2hlbiByb3V0ZXMgZXhwaXJlIG9yIGFyZSB3aXRoZHJhd24gdmlhIFJvdXRlciBBZHZlcnRpc2VtZW50cy4gVGhpcyBtZWFucyB3ZSdyZSBsb29raW5nIGF0IGZ1bmN0aW9uYWwgY2hhbmdlcyBkZWVwIHdpdGhpbiBjb3JlIElQdjYgcm91dGluZyBhbmQgbmVpZ2hib3IgZGlzY292ZXJ5LCBtYWtpbmcgdGhlbSBwcmltZSB0YXJnZXRzIGZvciBmdXp6aW5nLlxuXG5NeSB0aGlua2luZyBpcywgd2UndmUgZ290IHRvIGZpbmQgdGhlIGtleSBlbnRyeSBwb2ludHMgYW5kIGZ1bmN0aW9ucyByZWxhdGVkIHRvIHRoaXMgbmV3IGF0dHJpYnV0ZS4gSSdtIGdvaW5nIHRvIHNldCBgV29ydGhGdXp6aW5nYCB0byB0cnVlLlxuXG5GaXJzdCwgSSBsb29rZWQgYXQgdGhlIG9idmlvdXM6IGBuZGlzY19yY3ZgLiBJdCdzIHRoZSBmcm9udCBkb29yIGZvciBJQ01QdjYgTkQgbWVzc2FnZXMsIGluY2x1ZGluZyB0aG9zZSBSb3V0ZXIgQWR2ZXJ0aXNlbWVudHMsIHNvIHRoYXTigJlzIGEgZ3JlYXQgY2FuZGlkYXRlLiBUaGVuLCBgcnQ2X3JvdXRlX3JjdmAgYW5kIGBhZGRyY29uZl9wcmVmaXhfcmN2YCBwb3BwZWQgdXAuIFRoZXkncmUgYm90aCBjYWxsZWQgZnJvbSBgbmRpc2Nfcm91dGVyX2Rpc2NvdmVyeWAgYW5kIGhhbmRsZSBSb3V0ZSBJbmZvcm1hdGlvbiBPcHRpb25zIChSSU8pIGFuZCBQcmVmaXggSW5mb3JtYXRpb24gT3B0aW9ucyAoUElPKSwgcmVzcGVjdGl2ZWx5LCBzbyB0aGV5J3JlIGRlZmluaXRlbHkgcmVsZXZhbnQuIEZpbmFsbHksIEkgaWRlbnRpZmllZCBgaXA2X2RlbF9ydF9yZWFzb25gLCBgZmliNl9kZWxgLCBhbmQgYGluZXQ2X3J0X25vdGlmeWAgYXJlIGFsbCBrZXkgZnVuY3Rpb25zLiBgaXA2X2RlbF9ydF9yZWFzb25gIGlzIHVzZWQgd2hlbiByb3V0ZXMgYXJlIGRlbGV0ZWQsIGBmaWI2X2RlbGAgaXMgYWxzbyBjYWxsZWQgd2hlbiByb3V0ZXMgYXJlIGRlbGV0ZWQgYW5kIGBpbmV0Nl9ydF9ub3RpZnlgIGdldHMgY2FsbGVkIHdoZW4gcm91dGVzIGFyZSBhZGRlZCBvciBkZWxldGVkLlxuXG5JIGFsc28gZG91YmxlLWNoZWNrZWQgd2hhdCBjYWxscyB3aGF0OiBgaXA2X2RlbF9ydF9yZWFzb25gIGlzIGNhbGxlZCBmcm9tIGBydDZfcm91dGVfcmN2YCwgYGFkZHJjb25mX3ByZWZpeF9yY3ZgLCBhbmQgYG5kaXNjX3JvdXRlcl9kaXNjb3ZlcnlgLCBhbmQgYGZpYjZfZGVsYCBpcyBjYWxsZWQgZnJvbSBgX19pcDZfZGVsX3J0YCwgYF9faXA2X2RlbF9ydF9zaWJsaW5nc2AsIGBmaWI2X2NsZWFuX25vZGVgLCBgZmliNl9nY190YWJsZWAuIGBpbmV0Nl9ydF9ub3RpZnlgIGlzIGNhbGxlZCBmcm9tIGBmaWI2X2FkZF9ydDJub2RlYCwgYGZpYjZfZGVsX3JvdXRlYCwgYG5kaXNjX3JvdXRlcl9kaXNjb3ZlcnlgLCBgaXA2X3JvdXRlX21wYXRoX25vdGlmeWAsIGFuZCBgZmliNl9ydF91cGRhdGVgLiBgcnQ2X3JvdXRlX3JjdmAgYW5kIGBhZGRyY29uZl9wcmVmaXhfcmN2YCBhcmUgY2FsbGVkIGZyb20gYG5kaXNjX3JvdXRlcl9kaXNjb3ZlcnlgLlxuXG5TbywgaGVyZSdzIG15IGZvY3VzZWQgbGlzdCBvZiBzeW1ib2xzIEknbGwgdGFyZ2V0IGZvciBmdXp6aW5nOiBgaXA2X2RlbF9ydF9yZWFzb25gLCBgZmliNl9kZWxgLCBgaW5ldDZfcnRfbm90aWZ5YCwgYHJ0Nl9yb3V0ZV9yY3ZgLCBgYWRkcmNvbmZfcHJlZml4X3JjdmAsIGFuZCBgbmRpc2NfcmN2YC4gSSB3aWxsIGFsc28gY29uZmlybSB0aGF0IHRoZXNlIGNvbmZpZ3VyYXRpb25zIGFyZSBzZXQ6IGBJUFY2YCwgYElQVjZfUk9VVEVSX1BSRUZgLCBhbmQgYElQVjZfUk9VVEVfSU5GT2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI3OTIzLCJPdXRwdXRUb2tlbnMiOjE4NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY2NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQyMjozNzo0OS4yNTI1ODU0MTlaIiwiU2VxIjo1MiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzk4MzgzNDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIklQVjZcIixcbiAgICBcIklQVjZfUk9VVEVSX1BSRUZcIixcbiAgICBcIklQVjZfUk9VVEVfSU5GT1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImlwNl9kZWxfcnRfcmVhc29uXCIsXG4gICAgXCJmaWI2X2RlbFwiLFxuICAgIFwiaW5ldDZfcnRfbm90aWZ5XCIsXG4gICAgXCJydDZfcm91dGVfcmN2XCIsXG4gICAgXCJhZGRyY29uZl9wcmVmaXhfcmN2XCIsXG4gICAgXCJuZGlzY19yY3ZcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGEgbmV3IG5ldGxpbmsgYXR0cmlidXRlIGBSVEFfREVMX1JFQVNPTmAgdG8gSVB2NiByb3V0ZSBkZWxldGlvbiBub3RpZmljYXRpb25zIChgUlRNX0RFTFJPVVRFYCkuIEl0IG1vZGlmaWVzIGNvcmUgSVB2NiByb3V0aW5nIGFuZCBuZWlnaGJvciBkaXNjb3ZlcnkgZnVuY3Rpb25zIHRvIHBvcHVsYXRlIHRoaXMgYXR0cmlidXRlIHdoZW4gcm91dGVzIGFyZSBkZWxldGVkIGR1ZSB0byBleHBpcmF0aW9uIG9yIFJvdXRlciBBZHZlcnRpc2VtZW50IChSQSkgd2l0aGRyYXdhbC4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMgdGhhdCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIklQVjZcIixcbiAgICBcIklQVjZfUk9VVEVSX1BSRUZcIixcbiAgICBcIklQVjZfUk9VVEVfSU5GT1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImlwNl9kZWxfcnRfcmVhc29uXCIsXG4gICAgXCJmaWI2X2RlbFwiLFxuICAgIFwiaW5ldDZfcnRfbm90aWZ5XCIsXG4gICAgXCJydDZfcm91dGVfcmN2XCIsXG4gICAgXCJhZGRyY29uZl9wcmVmaXhfcmN2XCIsXG4gICAgXCJuZGlzY19yY3ZcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGEgbmV3IG5ldGxpbmsgYXR0cmlidXRlIGBSVEFfREVMX1JFQVNPTmAgdG8gSVB2NiByb3V0ZSBkZWxldGlvbiBub3RpZmljYXRpb25zIChgUlRNX0RFTFJPVVRFYCkuIEl0IG1vZGlmaWVzIGNvcmUgSVB2NiByb3V0aW5nIGFuZCBuZWlnaGJvciBkaXNjb3ZlcnkgZnVuY3Rpb25zIHRvIHBvcHVsYXRlIHRoaXMgYXR0cmlidXRlIHdoZW4gcm91dGVzIGFyZSBkZWxldGVkIGR1ZSB0byBleHBpcmF0aW9uIG9yIFJvdXRlciBBZHZlcnRpc2VtZW50IChSQSkgd2l0aGRyYXdhbC4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMgdGhhdCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflowctgr6[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-25 22:18:30 +0000 UTC FinishedAt: 2026-07-25 22:37:51 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "ed6dc972c19ff9ffca504f5739848da4275219e3", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "IPV6", "IPV6_ROUTER_PREF", "IPV6_ROUTE_INFO" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "ed6dc972c19ff9ffca504f5739848da4275219e3", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "IPV6", "IPV6_ROUTER_PREF", "IPV6_ROUTE_INFO" ], "series_id": "8b675e05-5e2a-4eda-b427-9920c5ddb3f9" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "ip6_del_rt_reason", "fib6_del", "inet6_rt_notify", "rt6_route_rcv", "addrconf_prefix_rcv", "ndisc_rcv" ], "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+CgkJCTx0ZD4yMDI2LzA3LzI1IDIyOjM2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lQVjYmIzM0OywKICAgICYjMzQ7SVBWNl9ST1VURVJfUFJFRiYjMzQ7LAogICAgJiMzNDtJUFY2X1JPVVRFX0lORk8mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtpcDZfZGVsX3J0X3JlYXNvbiYjMzQ7LAogICAgJiMzNDtmaWI2X2RlbCYjMzQ7LAogICAgJiMzNDtpbmV0Nl9ydF9ub3RpZnkmIzM0OywKICAgICYjMzQ7cnQ2X3JvdXRlX3JjdiYjMzQ7LAogICAgJiMzNDthZGRyY29uZl9wcmVmaXhfcmN2JiMzNDssCiAgICAmIzM0O25kaXNjX3JjdiYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGEgbmV3IG5ldGxpbmsgYXR0cmlidXRlIGBSVEFfREVMX1JFQVNPTmAgdG8gSVB2NiByb3V0ZSBkZWxldGlvbiBub3RpZmljYXRpb25zIChgUlRNX0RFTFJPVVRFYCkuIEl0IG1vZGlmaWVzIGNvcmUgSVB2NiByb3V0aW5nIGFuZCBuZWlnaGJvciBkaXNjb3ZlcnkgZnVuY3Rpb25zIHRvIHBvcHVsYXRlIHRoaXMgYXR0cmlidXRlIHdoZW4gcm91dGVzIGFyZSBkZWxldGVkIGR1ZSB0byBleHBpcmF0aW9uIG9yIFJvdXRlciBBZHZlcnRpc2VtZW50IChSQSkgd2l0aGRyYXdhbC4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMgdGhhdCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDIyOjM2PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgNGMyYmVmNWVmYTI4YWE2YWZhYjYzMTI1MTUwMWY4YTE2ODhhMTMxNVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTYXQgSnVsIDI1IDIyOjM1OjU4IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0bGluay9zcGVjcy9ydC1yb3V0ZS55YW1sIGIvRG9jdW1lbnRhdGlvbi9uZXRsaW5rL3NwZWNzL3J0LXJvdXRlLnlhbWxcbmluZGV4IDMzMTk1ZGI5Njc0NmM2Li4yMzRmNTAyZmIzNWQ5YyAxMDA2NDRcbi0tLSBhL0RvY3VtZW50YXRpb24vbmV0bGluay9zcGVjcy9ydC1yb3V0ZS55YW1sXG4mIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL25ldGxpbmsvc3BlY3MvcnQtcm91dGUueWFtbFxuQEAgLTc4LDYgJiM0Mzs3OCwxNSBAQCBkZWZpbml0aW9uczpcbiAgICAgICAtXG4gICAgICAgICBuYW1lOiBydGEtdXNlZFxuICAgICAgICAgdHlwZTogdTMyXG4mIzQzOyAgLVxuJiM0MzsgICAgbmFtZTogZGVsLXJlYXNvblxuJiM0MzsgICAgdHlwZTogZW51bVxuJiM0MzsgICAgbmFtZS1wcmVmaXg6IHJ0YS1kZWwtcmVhc29uLVxuJiM0MzsgICAgZW51bS1uYW1lOiBydGEtZGVsLXJlYXNvblxuJiM0MzsgICAgZW50cmllczpcbiYjNDM7ICAgICAgLSB1bnNwZWNcbiYjNDM7ICAgICAgLSBleHBpcmVkXG4mIzQzOyAgICAgIC0gcmEtd2l0aGRyYXduXG4gXG4gYXR0cmlidXRlLXNldHM6XG4gICAtXG5AQCAtMTg1LDYgJiM0MzsxOTQsMTAgQEAgYXR0cmlidXRlLXNldHM6XG4gICAgICAgICB0eXBlOiB1MzJcbiAgICAgICAgIGJ5dGUtb3JkZXI6IGJpZy1lbmRpYW5cbiAgICAgICAgIGRpc3BsYXktaGludDogaGV4XG4mIzQzOyAgICAgIC1cbiYjNDM7ICAgICAgICBuYW1lOiBkZWwtcmVhc29uXG4mIzQzOyAgICAgICAgdHlwZTogdTMyXG4mIzQzOyAgICAgICAgZW51bTogZGVsLXJlYXNvblxuICAgLVxuICAgICBuYW1lOiBtZXRyaWNzXG4gICAgIG5hbWUtcHJlZml4OiBydGF4LVxuQEAgLTI5OSw2ICYjNDM7MzEyLDcgQEAgb3BlcmF0aW9uczpcbiAgICAgICAgICAgICAtIGRwb3J0XG4gICAgICAgICAgICAgLSBuaC1pZFxuICAgICAgICAgICAgIC0gZmxvd2xhYmVsXG4mIzQzOyAgICAgICAgICAgIC0gZGVsLXJlYXNvblxuICAgICAgIGR1bXA6XG4gICAgICAgICByZXF1ZXN0OlxuICAgICAgICAgICB2YWx1ZTogMjZcbkBAIC0zMjIsMyAmIzQzOzMzNiwyMiBAQCBvcGVyYXRpb25zOlxuICAgICAgICAgcmVxdWVzdDpcbiAgICAgICAgICAgdmFsdWU6IDI1XG4gICAgICAgICAgIGF0dHJpYnV0ZXM6ICphbGwtcm91dGUtYXR0cnNcbiYjNDM7ICAgIC1cbiYjNDM7ICAgICAgbmFtZTogbmV3cm91dGUtbnRmXG4mIzQzOyAgICAgIGRvYzogTm90aWZpY2F0aW9uIGFib3V0IGEgY3JlYXRlZCByb3V0ZS5cbiYjNDM7ICAgICAgdmFsdWU6IDI0XG4mIzQzOyAgICAgIG5vdGlmeTogZ2V0cm91dGVcbiYjNDM7ICAgIC1cbiYjNDM7ICAgICAgbmFtZTogZGVscm91dGUtbnRmXG4mIzQzOyAgICAgIGRvYzogTm90aWZpY2F0aW9uIGFib3V0IGEgZGVsZXRlZCByb3V0ZS5cbiYjNDM7ICAgICAgdmFsdWU6IDI1XG4mIzQzOyAgICAgIG5vdGlmeTogZ2V0cm91dGVcbiYjNDM7XG4mIzQzO21jYXN0LWdyb3VwczpcbiYjNDM7ICBsaXN0OlxuJiM0MzsgICAgLVxuJiM0MzsgICAgICBuYW1lOiBydG5sZ3JwLWlwdjQtcm91dGVcbiYjNDM7ICAgICAgdmFsdWU6IDdcbiYjNDM7ICAgIC1cbiYjNDM7ICAgICAgbmFtZTogcnRubGdycC1pcHY2LXJvdXRlXG4mIzQzOyAgICAgIHZhbHVlOiAxMVxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2lwNl9maWIuaCBiL2luY2x1ZGUvbmV0L2lwNl9maWIuaFxuaW5kZXggOWNkMjdlMWI5YjY5MjMuLjdjYTBlMjEyNGU3OTYzIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9uZXQvaXA2X2ZpYi5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL25ldC9pcDZfZmliLmhcbkBAIC00NjgsNyAmIzQzOzQ2OCw3IEBAIHZvaWQgZmliNl9jbGVhbl9hbGxfc2tpcF9ub3RpZnkoc3RydWN0IG5ldCAqbmV0LFxuIFxuIGludCBmaWI2X2FkZChzdHJ1Y3QgZmliNl9ub2RlICpyb290LCBzdHJ1Y3QgZmliNl9pbmZvICpydCxcbiBcdCAgICAgc3RydWN0IG5sX2luZm8gKmluZm8sIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjayk7XG4taW50IGZpYjZfZGVsKHN0cnVjdCBmaWI2X2luZm8gKnJ0LCBzdHJ1Y3QgbmxfaW5mbyAqaW5mbyk7XG4mIzQzO2ludCBmaWI2X2RlbChzdHJ1Y3QgZmliNl9pbmZvICpydCwgc3RydWN0IG5sX2luZm8gKmluZm8sIHUzMiBkZWxfcmVhc29uKTtcbiBcbiBzdGF0aWMgaW5saW5lXG4gdm9pZCBydDZfZ2V0X3ByZWZzcmMoY29uc3Qgc3RydWN0IHJ0Nl9pbmZvICpydCwgc3RydWN0IGluNl9hZGRyICphZGRyKVxuQEAgLTUzMSw3ICYjNDM7NTMxLDcgQEAgc3RhdGljIGlubGluZSB2b2lkIGZpYjZfcnRfdXBkYXRlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZpYjZfaW5mbyAqcnQsXG4gfVxuICNlbmRpZlxuIHZvaWQgaW5ldDZfcnRfbm90aWZ5KGludCBldmVudCwgc3RydWN0IGZpYjZfaW5mbyAqcnQsIHN0cnVjdCBubF9pbmZvICppbmZvLFxuLVx0XHQgICAgIHVuc2lnbmVkIGludCBmbGFncyk7XG4mIzQzO1x0XHQgICAgIHVuc2lnbmVkIGludCBmbGFncywgdTMyIGRlbF9yZWFzb24pO1xuIFxuIHZvaWQgZmliNl9hZ2VfZXhjZXB0aW9ucyhzdHJ1Y3QgZmliNl9pbmZvICpydCwgc3RydWN0IGZpYjZfZ2NfYXJncyAqZ2NfYXJncyxcbiBcdFx0XHQgdW5zaWduZWQgbG9uZyBub3cpO1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2lwNl9yb3V0ZS5oIGIvaW5jbHVkZS9uZXQvaXA2X3JvdXRlLmhcbmluZGV4IDA5ZmZlMGYxM2NlNzUyLi45OGYxNjg0ZmUzNzhjYyAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbmV0L2lwNl9yb3V0ZS5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL25ldC9pcDZfcm91dGUuaFxuQEAgLTEyOCw2ICYjNDM7MTI4LDggQEAgaW50IGlwNl9yb3V0ZV9hZGQoc3RydWN0IGZpYjZfY29uZmlnICpjZmcsIGdmcF90IGdmcF9mbGFncyxcbiBpbnQgaXA2X2luc19ydChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBmaWI2X2luZm8gKmY2aSk7XG4gI2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVjYpXG4gaW50IGlwNl9kZWxfcnQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZmliNl9pbmZvICpmNmksIGJvb2wgc2tpcF9ub3RpZnkpO1xuJiM0MztpbnQgaXA2X2RlbF9ydF9yZWFzb24oc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZmliNl9pbmZvICpmNmksIGJvb2wgc2tpcF9ub3RpZnksXG4mIzQzO1x0XHQgICAgICB1MzIgZGVsX3JlYXNvbik7XG4gI2Vsc2VcbiBzdGF0aWMgaW5saW5lIGludCBpcDZfZGVsX3J0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZpYjZfaW5mbyAqZjZpLFxuIFx0XHRcdCAgICAgYm9vbCBza2lwX25vdGlmeSlcbmRpZmYgLS1naXQgYS9pbmNsdWRlL3VhcGkvbGludXgvcnRuZXRsaW5rLmggYi9pbmNsdWRlL3VhcGkvbGludXgvcnRuZXRsaW5rLmhcbmluZGV4IDI3MjY1ZmQzMWU1ZmM5Li5mZTAwZTYyNGYzYzNhYSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvdWFwaS9saW51eC9ydG5ldGxpbmsuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS91YXBpL2xpbnV4L3J0bmV0bGluay5oXG5AQCAtMzk5LDYgJiM0MzszOTksNyBAQCBlbnVtIHJ0YXR0cl90eXBlX3Qge1xuIFx0UlRBX0RQT1JULFxuIFx0UlRBX05IX0lELFxuIFx0UlRBX0ZMT1dMQUJFTCxcbiYjNDM7XHRSVEFfREVMX1JFQVNPTixcbiBcdF9fUlRBX01BWFxuIH07XG4gXG5AQCAtNDA3LDYgJiM0Mzs0MDgsMjIgQEAgZW51bSBydGF0dHJfdHlwZV90IHtcbiAjZGVmaW5lIFJUTV9SVEEocikgICgoc3RydWN0IHJ0YXR0ciopKCgoY2hhciopKHIpKSAmIzQzOyBOTE1TR19BTElHTihzaXplb2Yoc3RydWN0IHJ0bXNnKSkpKVxuICNkZWZpbmUgUlRNX1BBWUxPQUQobikgTkxNU0dfUEFZTE9BRChuLHNpemVvZihzdHJ1Y3QgcnRtc2cpKVxuIFxuJiM0MzsvKiBSVEFfREVMX1JFQVNPTjogd2h5IHRoZSBrZXJuZWwgZGVsZXRlZCB0aGUgcm91dGUuIHUzMi5cbiYjNDM7ICogRW1pdHRlZCBvbmx5IG9uIFJUTV9ERUxST1VURSBub3RpZmljYXRpb25zLCBhbmQgb25seSB3aGVuIHRoZSBkZWxldGlvblxuJiM0MzsgKiBwYXRoIHJlY29yZHMgYSBjYXVzZS4gQWJzZW5jZSBtZWFucyBlaXRoZXIgYW4gb2xkZXIga2VybmVsIG9yIGFcbiYjNDM7ICogZGVsZXRpb24gcGF0aCB0aGF0IGRvZXMgbm90ICh5ZXQpIHJlY29yZCBpdHMgY2F1c2UgLSBjb25zdW1lcnMgbXVzdFxuJiM0MzsgKiB0cmVhdCBcJiMzNDthYnNlbnRcJiMzNDsgYW5kIFwmIzM0O3Vuc3BlY1wmIzM0OyBpZGVudGljYWxseS4gTmV3IGNhdXNlcyBtYXkgYmUgYXBwZW5kZWQuXG4mIzQzOyAqIEN1cnJlbnRseSBvbmx5IElQdjYgZGVsZXRpb24gcGF0aHMgcmVjb3JkIGEgY2F1c2UuXG4mIzQzOyAqL1xuJiM0MztlbnVtIHJ0YV9kZWxfcmVhc29uIHtcbiYjNDM7XHRSVEFfREVMX1JFQVNPTl9VTlNQRUMsXHRcdC8qIGNhdXNlIG5vdCByZWNvcmRlZCAqL1xuJiM0MztcdFJUQV9ERUxfUkVBU09OX0VYUElSRUQsXHRcdC8qIFJURl9FWFBJUkVTIGxpZmV0aW1lIHJhbiBvdXQgKEdDKSAqL1xuJiM0MztcdFJUQV9ERUxfUkVBU09OX1JBX1dJVEhEUkFXTixcdC8qIHplcm8tbGlmZXRpbWUgUkEgLyBQSU8gLyBSSU8gKi9cbiYjNDM7XHRfX1JUQV9ERUxfUkVBU09OX01BWFxuJiM0Mzt9O1xuJiM0MztcbiYjNDM7I2RlZmluZSBSVEFfREVMX1JFQVNPTl9NQVggKF9fUlRBX0RFTF9SRUFTT05fTUFYIC0gMSlcbiYjNDM7XG4gLyogUlRNX01VTFRJUEFUSCAtLS0gYXJyYXkgb2Ygc3RydWN0IHJ0bmV4dGhvcC5cbiAgKlxuICAqIFwmIzM0O3N0cnVjdCBydG5leHRob3BcJiMzNDsgZGVzY3JpYmVzIGFsbCBuZWNlc3NhcnkgbmV4dGhvcCBpbmZvcm1hdGlvbixcbmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9hZGRyY29uZi5jIGIvbmV0L2lwdjYvYWRkcmNvbmYuY1xuaW5kZXggZjFmZTllZGUxZWRiMzcuLjFjYTlkODJiNTcyMWU2IDEwMDY0NFxuLS0tIGEvbmV0L2lwdjYvYWRkcmNvbmYuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjYvYWRkcmNvbmYuY1xuQEAgLTI4NzQsNyAmIzQzOzI4NzQsOCBAQCB2b2lkIGFkZHJjb25mX3ByZWZpeF9yY3Yoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTggKm9wdCwgaW50IGxlbiwgYm9vbCBzbGxhbylcbiBcdFx0aWYgKHJ0KSB7XG4gXHRcdFx0LyogQXV0b2NvbmYgcHJlZml4IHJvdXRlICovXG4gXHRcdFx0aWYgKHZhbGlkX2xmdCA9PSAwKSB7XG4tXHRcdFx0XHRpcDZfZGVsX3J0KG5ldCwgcnQsIGZhbHNlKTtcbiYjNDM7XHRcdFx0XHRpcDZfZGVsX3J0X3JlYXNvbihuZXQsIHJ0LCBmYWxzZSxcbiYjNDM7XHRcdFx0XHRcdFx0ICBSVEFfREVMX1JFQVNPTl9SQV9XSVRIRFJBV04pO1xuIFx0XHRcdFx0cnQgPSBOVUxMO1xuIFx0XHRcdH0gZWxzZSB7XG4gXHRcdFx0XHR0YWJsZSA9IHJ0LVx1MDAzZWZpYjZfdGFibGU7XG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjYvaXA2X2ZpYi5jIGIvbmV0L2lwdjYvaXA2X2ZpYi5jXG5pbmRleCBhMTMwY2RmYWViZmJlZS4uMzJiOWEwMDk1NmEwOTIgMTAwNjQ0XG4tLS0gYS9uZXQvaXB2Ni9pcDZfZmliLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY2L2lwNl9maWIuY1xuQEAgLTEyODYsNyAmIzQzOzEyODYsOCBAQCBzdGF0aWMgaW50IGZpYjZfYWRkX3J0Mm5vZGUoc3RydWN0IGZpYjZfbm9kZSAqZm4sIHN0cnVjdCBmaWI2X2luZm8gKnJ0LFxuIFx0XHRyY3VfYXNzaWduX3BvaW50ZXIocnQtXHUwMDNlZmliNl9ub2RlLCBmbik7XG4gXHRcdHJjdV9hc3NpZ25fcG9pbnRlcigqaW5zLCBydCk7XG4gXHRcdGlmICghaW5mby1cdTAwM2Vza2lwX25vdGlmeSlcbi1cdFx0XHRpbmV0Nl9ydF9ub3RpZnkoUlRNX05FV1JPVVRFLCBydCwgaW5mbywgbmxmbGFncyk7XG4mIzQzO1x0XHRcdGluZXQ2X3J0X25vdGlmeShSVE1fTkVXUk9VVEUsIHJ0LCBpbmZvLCBubGZsYWdzLFxuJiM0MztcdFx0XHRcdFx0UlRBX0RFTF9SRUFTT05fVU5TUEVDKTtcbiBcdFx0aW5mby1cdTAwM2VubF9uZXQtXHUwMDNlaXB2Ni5ydDZfc3RhdHMtXHUwMDNlZmliX3J0X2VudHJpZXMmIzQzOyYjNDM7O1xuIFxuIFx0XHRpZiAoIShmbi1cdTAwM2Vmbl9mbGFncyBcdTAwMjYgUlROX1JUSU5GTykpIHtcbkBAIC0xMzE3LDcgJiM0MzsxMzE4LDggQEAgc3RhdGljIGludCBmaWI2X2FkZF9ydDJub2RlKHN0cnVjdCBmaWI2X25vZGUgKmZuLCBzdHJ1Y3QgZmliNl9pbmZvICpydCxcbiBcdFx0cnQtXHUwMDNlZmliNl9uZXh0ID0gaXRlci1cdTAwM2VmaWI2X25leHQ7XG4gXHRcdHJjdV9hc3NpZ25fcG9pbnRlcigqaW5zLCBydCk7XG4gXHRcdGlmICghaW5mby1cdTAwM2Vza2lwX25vdGlmeSlcbi1cdFx0XHRpbmV0Nl9ydF9ub3RpZnkoUlRNX05FV1JPVVRFLCBydCwgaW5mbywgTkxNX0ZfUkVQTEFDRSk7XG4mIzQzO1x0XHRcdGluZXQ2X3J0X25vdGlmeShSVE1fTkVXUk9VVEUsIHJ0LCBpbmZvLCBOTE1fRl9SRVBMQUNFLFxuJiM0MztcdFx0XHRcdFx0UlRBX0RFTF9SRUFTT05fVU5TUEVDKTtcbiBcdFx0aWYgKCEoZm4tXHUwMDNlZm5fZmxhZ3MgXHUwMDI2IFJUTl9SVElORk8pKSB7XG4gXHRcdFx0aW5mby1cdTAwM2VubF9uZXQtXHUwMDNlaXB2Ni5ydDZfc3RhdHMtXHUwMDNlZmliX3JvdXRlX25vZGVzJiM0MzsmIzQzOztcbiBcdFx0XHRmbi1cdTAwM2Vmbl9mbGFncyB8PSBSVE5fUlRJTkZPO1xuQEAgLTE5NjYsNyAmIzQzOzE5NjgsOCBAQCBzdGF0aWMgc3RydWN0IGZpYjZfbm9kZSAqZmliNl9yZXBhaXJfdHJlZShzdHJ1Y3QgbmV0ICpuZXQsXG4gfVxuIFxuIHN0YXRpYyB2b2lkIGZpYjZfZGVsX3JvdXRlKHN0cnVjdCBmaWI2X3RhYmxlICp0YWJsZSwgc3RydWN0IGZpYjZfbm9kZSAqZm4sXG4tXHRcdFx0ICAgc3RydWN0IGZpYjZfaW5mbyBfX3JjdSAqKnJ0cCwgc3RydWN0IG5sX2luZm8gKmluZm8pXG4mIzQzO1x0XHRcdCAgIHN0cnVjdCBmaWI2X2luZm8gX19yY3UgKipydHAsIHN0cnVjdCBubF9pbmZvICppbmZvLFxuJiM0MztcdFx0XHQgICB1MzIgZGVsX3JlYXNvbilcbiB7XG4gXHRzdHJ1Y3QgZmliNl9pbmZvICpsZWFmLCAqcmVwbGFjZV9ydCA9IE5VTEw7XG4gXHRzdHJ1Y3QgZmliNl93YWxrZXIgKnc7XG5AQCAtMjA1NSwxMyAmIzQzOzIwNTgsMTMgQEAgc3RhdGljIHZvaWQgZmliNl9kZWxfcm91dGUoc3RydWN0IGZpYjZfdGFibGUgKnRhYmxlLCBzdHJ1Y3QgZmliNl9ub2RlICpmbixcbiBcdFx0XHRjYWxsX2ZpYjZfZW50cnlfbm90aWZpZXJzX3JlcGxhY2UobmV0LCByZXBsYWNlX3J0KTtcbiBcdH1cbiBcdGlmICghaW5mby1cdTAwM2Vza2lwX25vdGlmeSlcbi1cdFx0aW5ldDZfcnRfbm90aWZ5KFJUTV9ERUxST1VURSwgcnQsIGluZm8sIDApO1xuJiM0MztcdFx0aW5ldDZfcnRfbm90aWZ5KFJUTV9ERUxST1VURSwgcnQsIGluZm8sIDAsIGRlbF9yZWFzb24pO1xuIFxuIFx0ZmliNl9pbmZvX3JlbGVhc2UocnQpO1xuIH1cbiBcbiAvKiBOZWVkIHRvIG93biB0YWJsZS1cdTAwM2V0YjZfbG9jayAqL1xuLWludCBmaWI2X2RlbChzdHJ1Y3QgZmliNl9pbmZvICpydCwgc3RydWN0IG5sX2luZm8gKmluZm8pXG4mIzQzO2ludCBmaWI2X2RlbChzdHJ1Y3QgZmliNl9pbmZvICpydCwgc3RydWN0IG5sX2luZm8gKmluZm8sIHUzMiBkZWxfcmVhc29uKVxuIHtcbiBcdHN0cnVjdCBuZXQgKm5ldCA9IGluZm8tXHUwMDNlbmxfbmV0O1xuIFx0c3RydWN0IGZpYjZfaW5mbyBfX3JjdSAqKnJ0cDtcbkBAIC0yMDkwLDcgJiM0MzsyMDkzLDcgQEAgaW50IGZpYjZfZGVsKHN0cnVjdCBmaWI2X2luZm8gKnJ0LCBzdHJ1Y3QgbmxfaW5mbyAqaW5mbylcbiBcdFx0aWYgKHJ0ID09IGN1cikge1xuIFx0XHRcdGlmIChmaWI2X3JlcXVpcmVzX3NyYyhjdXIpKVxuIFx0XHRcdFx0ZmliNl9yb3V0ZXNfcmVxdWlyZV9zcmNfZGVjKGluZm8tXHUwMDNlbmxfbmV0KTtcbi1cdFx0XHRmaWI2X2RlbF9yb3V0ZSh0YWJsZSwgZm4sIHJ0cCwgaW5mbyk7XG4mIzQzO1x0XHRcdGZpYjZfZGVsX3JvdXRlKHRhYmxlLCBmbiwgcnRwLCBpbmZvLCBkZWxfcmVhc29uKTtcbiBcdFx0XHRyZXR1cm4gMDtcbiBcdFx0fVxuIFx0XHRydHBfbmV4dCA9IFx1MDAyNmN1ci1cdTAwM2VmaWI2X25leHQ7XG5AQCAtMjI1Miw3ICYjNDM7MjI1NSw3IEBAIHN0YXRpYyBpbnQgZmliNl9jbGVhbl9ub2RlKHN0cnVjdCBmaWI2X3dhbGtlciAqdylcbiBcdFx0cmVzID0gYy1cdTAwM2VmdW5jKHJ0LCBjLVx1MDAzZWFyZyk7XG4gXHRcdGlmIChyZXMgPT0gLTEpIHtcbiBcdFx0XHR3LVx1MDAzZWxlYWYgPSBydDtcbi1cdFx0XHRyZXMgPSBmaWI2X2RlbChydCwgXHUwMDI2aW5mbyk7XG4mIzQzO1x0XHRcdHJlcyA9IGZpYjZfZGVsKHJ0LCBcdTAwMjZpbmZvLCBSVEFfREVMX1JFQVNPTl9VTlNQRUMpO1xuIFx0XHRcdGlmIChyZXMpIHtcbiAjaWYgUlQ2X0RFQlVHIFx1MDAzZT0gMlxuIFx0XHRcdFx0cHJfZGVidWcoXCYjMzQ7JXM6IGRlbCBmYWlsZWQ6IHJ0PSVwQCVwIGVycj0lZFxcblwmIzM0OyxcbkBAIC0yNDAwLDcgJiM0MzsyNDAzLDcgQEAgc3RhdGljIHZvaWQgZmliNl9nY190YWJsZShzdHJ1Y3QgbmV0ICpuZXQsXG4gXG4gXHRobGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHJ0LCBuLCBcdTAwMjZ0YjYtXHUwMDNldGI2X2djX2hsaXN0LCBnY19saW5rKVxuIFx0XHRpZiAoZmliNl9hZ2UocnQsIGdjX2FyZ3MpID09IC0xKVxuLVx0XHRcdGZpYjZfZGVsKHJ0LCBcdTAwMjZpbmZvKTtcbiYjNDM7XHRcdFx0ZmliNl9kZWwocnQsIFx1MDAyNmluZm8sIFJUQV9ERUxfUkVBU09OX0VYUElSRUQpO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCBmaWI2X2djX2FsbChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBmaWI2X2djX2FyZ3MgKmdjX2FyZ3MpXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjYvbmRpc2MuYyBiL25ldC9pcHY2L25kaXNjLmNcbmluZGV4IGY4NjdlYzhkM2Q5MDUxLi5jMzUzN2ZjMGVjNjNiMSAxMDA2NDRcbi0tLSBhL25ldC9pcHY2L25kaXNjLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY2L25kaXNjLmNcbkBAIC0xMzYxLDcgJiM0MzsxMzYxLDkgQEAgc3RhdGljIGVudW0gc2tiX2Ryb3BfcmVhc29uIG5kaXNjX3JvdXRlcl9kaXNjb3Zlcnkoc3RydWN0IHNrX2J1ZmYgKnNrYilcbiBcdGRlZnJ0cl91c3JfbWV0cmljID0gaW42X2Rldi1cdTAwM2VjbmYucmFfZGVmcnRyX21ldHJpYztcbiBcdC8qIGRlbGV0ZSB0aGUgcm91dGUgaWYgbGlmZXRpbWUgaXMgMCBvciBpZiBtZXRyaWMgbmVlZHMgY2hhbmdlICovXG4gXHRpZiAocnQgXHUwMDI2XHUwMDI2IChsaWZldGltZSA9PSAwIHx8IHJ0LVx1MDAzZWZpYjZfbWV0cmljICE9IGRlZnJ0cl91c3JfbWV0cmljKSkge1xuLVx0XHRpcDZfZGVsX3J0KG5ldCwgcnQsIGZhbHNlKTtcbiYjNDM7XHRcdGlwNl9kZWxfcnRfcmVhc29uKG5ldCwgcnQsIGZhbHNlLFxuJiM0MztcdFx0XHRcdCAgbGlmZXRpbWUgPT0gMCA/IFJUQV9ERUxfUkVBU09OX1JBX1dJVEhEUkFXTiA6XG4mIzQzO1x0XHRcdFx0XHRcdCAgUlRBX0RFTF9SRUFTT05fVU5TUEVDKTtcbiBcdFx0cnQgPSBOVUxMO1xuIFx0fVxuIFxuQEAgLTEzOTYsNyAmIzQzOzEzOTgsOCBAQCBzdGF0aWMgZW51bSBza2JfZHJvcF9yZWFzb24gbmRpc2Nfcm91dGVyX2Rpc2NvdmVyeShzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIFx0XHRcdC5ubF9uZXQgPSBuZXQsXG4gXHRcdH07XG4gXHRcdHJ0LVx1MDAzZWZpYjZfZmxhZ3MgPSAocnQtXHUwMDNlZmliNl9mbGFncyBcdTAwMjYgflJURl9QUkVGX01BU0spIHwgUlRGX1BSRUYocHJlZik7XG4tXHRcdGluZXQ2X3J0X25vdGlmeShSVE1fTkVXUk9VVEUsIHJ0LCBcdTAwMjZubGluZm8sIE5MTV9GX1JFUExBQ0UpO1xuJiM0MztcdFx0aW5ldDZfcnRfbm90aWZ5KFJUTV9ORVdST1VURSwgcnQsIFx1MDAyNm5saW5mbywgTkxNX0ZfUkVQTEFDRSxcbiYjNDM7XHRcdFx0XHRSVEFfREVMX1JFQVNPTl9VTlNQRUMpO1xuIFx0fVxuIFxuIFx0aWYgKHJ0KSB7XG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjYvcm91dGUuYyBiL25ldC9pcHY2L3JvdXRlLmNcbmluZGV4IGExMzAxMzM0ZGE0OGMwLi5lOGVkOTVkYzU2NjVlZSAxMDA2NDRcbi0tLSBhL25ldC9pcHY2L3JvdXRlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY2L3JvdXRlLmNcbkBAIC0xMTEsNyAmIzQzOzExMSw3IEBAIHN0YXRpYyBpbnQgcnQ2X2ZpbGxfbm9kZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICpza2IsXG4gXHRcdFx0IHN0cnVjdCBmaWI2X2luZm8gKnJ0LCBzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QsXG4gXHRcdFx0IHN0cnVjdCBpbjZfYWRkciAqZGVzdCwgc3RydWN0IGluNl9hZGRyICpzcmMsXG4gXHRcdFx0IGludCBpaWYsIGludCB0eXBlLCB1MzIgcG9ydGlkLCB1MzIgc2VxLFxuLVx0XHRcdCB1bnNpZ25lZCBpbnQgZmxhZ3MpO1xuJiM0MztcdFx0XHQgdW5zaWduZWQgaW50IGZsYWdzLCB1MzIgZGVsX3JlYXNvbik7XG4gc3RhdGljIHN0cnVjdCBydDZfaW5mbyAqcnQ2X2ZpbmRfY2FjaGVkX3J0KGNvbnN0IHN0cnVjdCBmaWI2X3Jlc3VsdCAqcmVzLFxuIFx0XHRcdFx0XHQgICBjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKmRhZGRyLFxuIFx0XHRcdFx0XHQgICBjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKnNhZGRyKTtcbkBAIC0xMDIwLDcgJiM0MzsxMDIwLDcgQEAgaW50IHJ0Nl9yb3V0ZV9yY3Yoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTggKm9wdCwgaW50IGxlbixcbiBcdFx0XHRcdFx0Z3dhZGRyLCBkZXYpO1xuIFxuIFx0aWYgKHJ0IFx1MDAyNlx1MDAyNiAhbGlmZXRpbWUpIHtcbi1cdFx0aXA2X2RlbF9ydChuZXQsIHJ0LCBmYWxzZSk7XG4mIzQzO1x0XHRpcDZfZGVsX3J0X3JlYXNvbihuZXQsIHJ0LCBmYWxzZSwgUlRBX0RFTF9SRUFTT05fUkFfV0lUSERSQVdOKTtcbiBcdFx0cnQgPSBOVUxMO1xuIFx0fVxuIFxuQEAgLTM5NzMsNyAmIzQzOzM5NzMsOCBAQCBpbnQgaXA2X3JvdXRlX2FkZChzdHJ1Y3QgZmliNl9jb25maWcgKmNmZywgZ2ZwX3QgZ2ZwX2ZsYWdzLFxuIFx0cmV0dXJuIGVycjtcbiB9XG4gXG4tc3RhdGljIGludCBfX2lwNl9kZWxfcnQoc3RydWN0IGZpYjZfaW5mbyAqcnQsIHN0cnVjdCBubF9pbmZvICppbmZvKVxuJiM0MztzdGF0aWMgaW50IF9faXA2X2RlbF9ydChzdHJ1Y3QgZmliNl9pbmZvICpydCwgc3RydWN0IG5sX2luZm8gKmluZm8sXG4mIzQzO1x0XHRcdHUzMiBkZWxfcmVhc29uKVxuIHtcbiBcdHN0cnVjdCBuZXQgKm5ldCA9IGluZm8tXHUwMDNlbmxfbmV0O1xuIFx0c3RydWN0IGZpYjZfdGFibGUgKnRhYmxlO1xuQEAgLTM5ODYsNyAmIzQzOzM5ODcsNyBAQCBzdGF0aWMgaW50IF9faXA2X2RlbF9ydChzdHJ1Y3QgZmliNl9pbmZvICpydCwgc3RydWN0IG5sX2luZm8gKmluZm8pXG4gXG4gXHR0YWJsZSA9IHJ0LVx1MDAzZWZpYjZfdGFibGU7XG4gXHRzcGluX2xvY2tfYmgoXHUwMDI2dGFibGUtXHUwMDNldGI2X2xvY2spO1xuLVx0ZXJyID0gZmliNl9kZWwocnQsIGluZm8pO1xuJiM0MztcdGVyciA9IGZpYjZfZGVsKHJ0LCBpbmZvLCBkZWxfcmVhc29uKTtcbiBcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNnRhYmxlLVx1MDAzZXRiNl9sb2NrKTtcbiBcbiBvdXQ6XG5AQCAtMzk5NCwxNCAmIzQzOzM5OTUsMjAgQEAgc3RhdGljIGludCBfX2lwNl9kZWxfcnQoc3RydWN0IGZpYjZfaW5mbyAqcnQsIHN0cnVjdCBubF9pbmZvICppbmZvKVxuIFx0cmV0dXJuIGVycjtcbiB9XG4gXG4taW50IGlwNl9kZWxfcnQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZmliNl9pbmZvICpydCwgYm9vbCBza2lwX25vdGlmeSlcbiYjNDM7aW50IGlwNl9kZWxfcnRfcmVhc29uKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZpYjZfaW5mbyAqcnQsIGJvb2wgc2tpcF9ub3RpZnksXG4mIzQzO1x0XHQgICAgICB1MzIgZGVsX3JlYXNvbilcbiB7XG4gXHRzdHJ1Y3QgbmxfaW5mbyBpbmZvID0ge1xuIFx0XHQubmxfbmV0ID0gbmV0LFxuLVx0XHQuc2tpcF9ub3RpZnkgPSBza2lwX25vdGlmeVxuJiM0MztcdFx0LnNraXBfbm90aWZ5ID0gc2tpcF9ub3RpZnksXG4gXHR9O1xuIFxuLVx0cmV0dXJuIF9faXA2X2RlbF9ydChydCwgXHUwMDI2aW5mbyk7XG4mIzQzO1x0cmV0dXJuIF9faXA2X2RlbF9ydChydCwgXHUwMDI2aW5mbywgZGVsX3JlYXNvbik7XG4mIzQzO31cbiYjNDM7XG4mIzQzO2ludCBpcDZfZGVsX3J0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZpYjZfaW5mbyAqcnQsIGJvb2wgc2tpcF9ub3RpZnkpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gaXA2X2RlbF9ydF9yZWFzb24obmV0LCBydCwgc2tpcF9ub3RpZnksIFJUQV9ERUxfUkVBU09OX1VOU1BFQyk7XG4gfVxuIFxuIHN0YXRpYyBpbnQgX19pcDZfZGVsX3J0X3NpYmxpbmdzKHN0cnVjdCBmaWI2X2luZm8gKnJ0LCBzdHJ1Y3QgZmliNl9jb25maWcgKmNmZylcbkBAIC00MDI4LDcgJiM0Mzs0MDM1LDggQEAgc3RhdGljIGludCBfX2lwNl9kZWxfcnRfc2libGluZ3Moc3RydWN0IGZpYjZfaW5mbyAqcnQsIHN0cnVjdCBmaWI2X2NvbmZpZyAqY2ZnKVxuIFxuIFx0XHRcdGlmIChydDZfZmlsbF9ub2RlKG5ldCwgc2tiLCBydCwgTlVMTCxcbiBcdFx0XHRcdFx0ICBOVUxMLCBOVUxMLCAwLCBSVE1fREVMUk9VVEUsXG4tXHRcdFx0XHRcdCAgaW5mby1cdTAwM2Vwb3J0aWQsIHNlcSwgMCkgXHUwMDNjIDApIHtcbiYjNDM7XHRcdFx0XHRcdCAgaW5mby1cdTAwM2Vwb3J0aWQsIHNlcSwgMCxcbiYjNDM7XHRcdFx0XHRcdCAgUlRBX0RFTF9SRUFTT05fVU5TUEVDKSBcdTAwM2MgMCkge1xuIFx0XHRcdFx0a2ZyZWVfc2tiKHNrYik7XG4gXHRcdFx0XHRza2IgPSBOVUxMO1xuIFx0XHRcdH0gZWxzZVxuQEAgLTQwNjQsMTMgJiM0Mzs0MDcyLDEzIEBAIHN0YXRpYyBpbnQgX19pcDZfZGVsX3J0X3NpYmxpbmdzKHN0cnVjdCBmaWI2X2luZm8gKnJ0LCBzdHJ1Y3QgZmliNl9jb25maWcgKmNmZylcbiBcdFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHNpYmxpbmcsIG5leHRfc2libGluZyxcbiBcdFx0XHRcdFx0IFx1MDAyNnJ0LVx1MDAzZWZpYjZfc2libGluZ3MsXG4gXHRcdFx0XHRcdCBmaWI2X3NpYmxpbmdzKSB7XG4tXHRcdFx0ZXJyID0gZmliNl9kZWwoc2libGluZywgaW5mbyk7XG4mIzQzO1x0XHRcdGVyciA9IGZpYjZfZGVsKHNpYmxpbmcsIGluZm8sIFJUQV9ERUxfUkVBU09OX1VOU1BFQyk7XG4gXHRcdFx0aWYgKGVycilcbiBcdFx0XHRcdGdvdG8gb3V0X3VubG9jaztcbiBcdFx0fVxuIFx0fVxuIFxuLVx0ZXJyID0gZmliNl9kZWwocnQsIGluZm8pO1xuJiM0MztcdGVyciA9IGZpYjZfZGVsKHJ0LCBpbmZvLCBSVEFfREVMX1JFQVNPTl9VTlNQRUMpO1xuIG91dF91bmxvY2s6XG4gXHRzcGluX3VubG9ja19iaChcdTAwMjZ0YWJsZS1cdTAwM2V0YjZfbG9jayk7XG4gb3V0X3B1dDpcbkBAIC00MTk2LDcgJiM0Mzs0MjA0LDggQEAgc3RhdGljIGludCBpcDZfcm91dGVfZGVsKHN0cnVjdCBmaWI2X2NvbmZpZyAqY2ZnLFxuIFx0XHRcdFx0aWYgKCFmaWI2X2luZm9faG9sZF9zYWZlKHJ0KSlcbiBcdFx0XHRcdFx0Y29udGludWU7XG4gXG4tXHRcdFx0XHRlcnIgPSAgX19pcDZfZGVsX3J0KHJ0LCBcdTAwMjZjZmctXHUwMDNlZmNfbmxpbmZvKTtcbiYjNDM7XHRcdFx0XHRlcnIgPSBfX2lwNl9kZWxfcnQocnQsIFx1MDAyNmNmZy1cdTAwM2VmY19ubGluZm8sXG4mIzQzO1x0XHRcdFx0XHRcdCAgIFJUQV9ERUxfUkVBU09OX1VOU1BFQyk7XG4gXHRcdFx0XHRicmVhaztcbiBcdFx0XHR9XG4gXHRcdFx0aWYgKGNmZy1cdTAwM2VmY19uaF9pZClcbkBAIC00MjE1LDcgJiM0Mzs0MjI0LDggQEAgc3RhdGljIGludCBpcDZfcm91dGVfZGVsKHN0cnVjdCBmaWI2X2NvbmZpZyAqY2ZnLFxuIFxuIFx0XHRcdC8qIGlmIGdhdGV3YXkgd2FzIHNwZWNpZmllZCBvbmx5IGRlbGV0ZSB0aGUgb25lIGhvcCAqL1xuIFx0XHRcdGlmIChjZmctXHUwMDNlZmNfZmxhZ3MgXHUwMDI2IFJURl9HQVRFV0FZKVxuLVx0XHRcdFx0ZXJyID0gX19pcDZfZGVsX3J0KHJ0LCBcdTAwMjZjZmctXHUwMDNlZmNfbmxpbmZvKTtcbiYjNDM7XHRcdFx0XHRlcnIgPSBfX2lwNl9kZWxfcnQocnQsIFx1MDAyNmNmZy1cdTAwM2VmY19ubGluZm8sXG4mIzQzO1x0XHRcdFx0XHRcdCAgIFJUQV9ERUxfUkVBU09OX1VOU1BFQyk7XG4gXHRcdFx0ZWxzZVxuIFx0XHRcdFx0ZXJyID0gX19pcDZfZGVsX3J0X3NpYmxpbmdzKHJ0LCBjZmcpO1xuIFx0XHRcdGJyZWFrO1xuQEAgLTUzODEsNyAmIzQzOzUzOTEsOCBAQCBzdGF0aWMgdm9pZCBpcDZfcm91dGVfbXBhdGhfbm90aWZ5KHN0cnVjdCBmaWI2X2luZm8gKnJ0LFxuIFx0fVxuIFxuIFx0aWYgKHJ0KVxuLVx0XHRpbmV0Nl9ydF9ub3RpZnkoUlRNX05FV1JPVVRFLCBydCwgaW5mbywgbmxmbGFncyk7XG4mIzQzO1x0XHRpbmV0Nl9ydF9ub3RpZnkoUlRNX05FV1JPVVRFLCBydCwgaW5mbywgbmxmbGFncyxcbiYjNDM7XHRcdFx0XHRSVEFfREVMX1JFQVNPTl9VTlNQRUMpO1xuIFxuIFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4gfVxuQEAgLTU3MzksNiAmIzQzOzU3NTAsNyBAQCBzdGF0aWMgc2l6ZV90IHJ0Nl9ubG1zZ19zaXplKHN0cnVjdCBmaWI2X2luZm8gKmY2aSlcbiBcdCAgICAgICAmIzQzOyBubGFfdG90YWxfc2l6ZShzaXplb2Yoc3RydWN0IHJ0YV9jYWNoZWluZm8pKVxuIFx0ICAgICAgICYjNDM7IG5sYV90b3RhbF9zaXplKFRDUF9DQV9OQU1FX01BWCkgLyogUlRBWF9DQ19BTEdPICovXG4gXHQgICAgICAgJiM0MzsgbmxhX3RvdGFsX3NpemUoMSkgLyogUlRBX1BSRUYgKi9cbiYjNDM7XHQgICAgICAgJiM0MzsgbmxhX3RvdGFsX3NpemUoNCkgLyogUlRBX0RFTF9SRUFTT04gKi9cbiBcdCAgICAgICAmIzQzOyBuZXh0aG9wX2xlbjtcbiB9XG4gXG5AQCAtNTc3NSw3ICYjNDM7NTc4Nyw3IEBAIHN0YXRpYyBpbnQgcnQ2X2ZpbGxfbm9kZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICpza2IsXG4gXHRcdFx0IHN0cnVjdCBmaWI2X2luZm8gKnJ0LCBzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QsXG4gXHRcdFx0IHN0cnVjdCBpbjZfYWRkciAqZGVzdCwgc3RydWN0IGluNl9hZGRyICpzcmMsXG4gXHRcdFx0IGludCBpaWYsIGludCB0eXBlLCB1MzIgcG9ydGlkLCB1MzIgc2VxLFxuLVx0XHRcdCB1bnNpZ25lZCBpbnQgZmxhZ3MpXG4mIzQzO1x0XHRcdCB1bnNpZ25lZCBpbnQgZmxhZ3MsIHUzMiBkZWxfcmVhc29uKVxuIHtcbiBcdHN0cnVjdCBydDZfaW5mbyAqcnQ2ID0gZHN0X3J0Nl9pbmZvKGRzdCk7XG4gXHRzdHJ1Y3QgcnQ2a2V5ICpydDZfZHN0LCAqcnQ2X3NyYztcbkBAIC01OTU0LDYgJiM0Mzs1OTY2LDEwIEBAIHN0YXRpYyBpbnQgcnQ2X2ZpbGxfbm9kZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICpza2IsXG4gXHRpZiAocnRubF9wdXRfY2FjaGVpbmZvKHNrYiwgZHN0LCAwLCBleHBpcmVzLCBkc3QgPyBkc3QtXHUwMDNlZXJyb3IgOiAwKSBcdTAwM2MgMClcbiBcdFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XG4gXG4mIzQzO1x0aWYgKHR5cGUgPT0gUlRNX0RFTFJPVVRFIFx1MDAyNlx1MDAyNiBkZWxfcmVhc29uICE9IFJUQV9ERUxfUkVBU09OX1VOU1BFQyBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAgbmxhX3B1dF91MzIoc2tiLCBSVEFfREVMX1JFQVNPTiwgZGVsX3JlYXNvbikpXG4mIzQzO1x0XHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcbiYjNDM7XG4gXHRpZiAobmxhX3B1dF91OChza2IsIFJUQV9QUkVGLCBJUFY2X0VYVFJBQ1RfUFJFRihydDZfZmxhZ3MpKSlcbiBcdFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XG4gXG5AQCAtNjA1NSw3ICYjNDM7NjA3MSw4IEBAIHN0YXRpYyBpbnQgcnQ2X25oX2R1bXBfZXhjZXB0aW9ucyhzdHJ1Y3QgZmliNl9uaCAqbmgsIHZvaWQgKmFyZylcbiBcdFx0XHRcdFx0ICAgIFx1MDAyNnJ0Nl9leC1cdTAwM2VydDZpLVx1MDAzZWRzdCwgTlVMTCwgTlVMTCwgMCxcbiBcdFx0XHRcdFx0ICAgIFJUTV9ORVdST1VURSxcbiBcdFx0XHRcdFx0ICAgIE5FVExJTktfQ0IoZHVtcC1cdTAwM2VjYi1cdTAwM2Vza2IpLnBvcnRpZCxcbi1cdFx0XHRcdFx0ICAgIGR1bXAtXHUwMDNlY2ItXHUwMDNlbmxoLVx1MDAzZW5sbXNnX3NlcSwgdy1cdTAwM2VmbGFncyk7XG4mIzQzO1x0XHRcdFx0XHQgICAgZHVtcC1cdTAwM2VjYi1cdTAwM2VubGgtXHUwMDNlbmxtc2dfc2VxLCB3LVx1MDAzZWZsYWdzLFxuJiM0MztcdFx0XHRcdFx0ICAgIFJUQV9ERUxfUkVBU09OX1VOU1BFQyk7XG4gXHRcdFx0aWYgKGVycilcbiBcdFx0XHRcdHJldHVybiBlcnI7XG4gXG5AQCAtNjEwMyw3ICYjNDM7NjEyMCw4IEBAIGludCBydDZfZHVtcF9yb3V0ZShzdHJ1Y3QgZmliNl9pbmZvICpydCwgdm9pZCAqcF9hcmcsIHVuc2lnbmVkIGludCBza2lwKVxuIFx0XHRcdGlmIChydDZfZmlsbF9ub2RlKG5ldCwgYXJnLVx1MDAzZXNrYiwgcnQsIE5VTEwsIE5VTEwsIE5VTEwsXG4gXHRcdFx0XHRcdCAgMCwgUlRNX05FV1JPVVRFLFxuIFx0XHRcdFx0XHQgIE5FVExJTktfQ0IoYXJnLVx1MDAzZWNiLVx1MDAzZXNrYikucG9ydGlkLFxuLVx0XHRcdFx0XHQgIGFyZy1cdTAwM2VjYi1cdTAwM2VubGgtXHUwMDNlbmxtc2dfc2VxLCBmbGFncykpIHtcbiYjNDM7XHRcdFx0XHRcdCAgYXJnLVx1MDAzZWNiLVx1MDAzZW5saC1cdTAwM2VubG1zZ19zZXEsIGZsYWdzLFxuJiM0MztcdFx0XHRcdFx0ICBSVEFfREVMX1JFQVNPTl9VTlNQRUMpKSB7XG4gXHRcdFx0XHRyZXR1cm4gMDtcbiBcdFx0XHR9XG4gXHRcdFx0Y291bnQmIzQzOyYjNDM7O1xuQEAgLTYzMzYsMTIgJiM0Mzs2MzU0LDE0IEBAIHN0YXRpYyBpbnQgaW5ldDZfcnRtX2dldHJvdXRlKHN0cnVjdCBza19idWZmICppbl9za2IsIHN0cnVjdCBubG1zZ2hkciAqbmxoLFxuIFx0XHRcdGVyciA9IHJ0Nl9maWxsX25vZGUobmV0LCBza2IsIGZyb20sIE5VTEwsIE5VTEwsIE5VTEwsXG4gXHRcdFx0XHRcdCAgICBpaWYsIFJUTV9ORVdST1VURSxcbiBcdFx0XHRcdFx0ICAgIE5FVExJTktfQ0IoaW5fc2tiKS5wb3J0aWQsXG4tXHRcdFx0XHRcdCAgICBubGgtXHUwMDNlbmxtc2dfc2VxLCAwKTtcbiYjNDM7XHRcdFx0XHRcdCAgICBubGgtXHUwMDNlbmxtc2dfc2VxLCAwLFxuJiM0MztcdFx0XHRcdFx0ICAgIFJUQV9ERUxfUkVBU09OX1VOU1BFQyk7XG4gXHRcdGVsc2VcbiBcdFx0XHRlcnIgPSBydDZfZmlsbF9ub2RlKG5ldCwgc2tiLCBmcm9tLCBkc3QsIFx1MDAyNmZsNi5kYWRkcixcbiBcdFx0XHRcdFx0ICAgIFx1MDAyNmZsNi5zYWRkciwgaWlmLCBSVE1fTkVXUk9VVEUsXG4gXHRcdFx0XHRcdCAgICBORVRMSU5LX0NCKGluX3NrYikucG9ydGlkLFxuLVx0XHRcdFx0XHQgICAgbmxoLVx1MDAzZW5sbXNnX3NlcSwgMCk7XG4mIzQzO1x0XHRcdFx0XHQgICAgbmxoLVx1MDAzZW5sbXNnX3NlcSwgMCxcbiYjNDM7XHRcdFx0XHRcdCAgICBSVEFfREVMX1JFQVNPTl9VTlNQRUMpO1xuIFx0fSBlbHNlIHtcbiBcdFx0ZXJyID0gLUVORVRVTlJFQUNIO1xuIFx0fVxuQEAgLTYzNTgsNyAmIzQzOzYzNzgsNyBAQCBzdGF0aWMgaW50IGluZXQ2X3J0bV9nZXRyb3V0ZShzdHJ1Y3Qgc2tfYnVmZiAqaW5fc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCxcbiB9XG4gXG4gdm9pZCBpbmV0Nl9ydF9ub3RpZnkoaW50IGV2ZW50LCBzdHJ1Y3QgZmliNl9pbmZvICpydCwgc3RydWN0IG5sX2luZm8gKmluZm8sXG4tXHRcdCAgICAgdW5zaWduZWQgaW50IG5sbV9mbGFncylcbiYjNDM7XHRcdCAgICAgdW5zaWduZWQgaW50IG5sbV9mbGFncywgdTMyIGRlbF9yZWFzb24pXG4ge1xuIFx0c3RydWN0IG5ldCAqbmV0ID0gaW5mby1cdTAwM2VubF9uZXQ7XG4gXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xuQEAgLTYzNzcsNyAmIzQzOzYzOTcsOCBAQCB2b2lkIGluZXQ2X3J0X25vdGlmeShpbnQgZXZlbnQsIHN0cnVjdCBmaWI2X2luZm8gKnJ0LCBzdHJ1Y3QgbmxfaW5mbyAqaW5mbyxcbiBcdFx0Z290byBlcnJvdXQ7XG4gXG4gXHRlcnIgPSBydDZfZmlsbF9ub2RlKG5ldCwgc2tiLCBydCwgTlVMTCwgTlVMTCwgTlVMTCwgMCxcbi1cdFx0XHQgICAgZXZlbnQsIGluZm8tXHUwMDNlcG9ydGlkLCBzZXEsIG5sbV9mbGFncyk7XG4mIzQzO1x0XHRcdCAgICBldmVudCwgaW5mby1cdTAwM2Vwb3J0aWQsIHNlcSwgbmxtX2ZsYWdzLFxuJiM0MztcdFx0XHQgICAgZGVsX3JlYXNvbik7XG4gXHRpZiAoZXJyIFx1MDAzYyAwKSB7XG4gXHRcdGtmcmVlX3NrYihza2IpO1xuIFx0XHQvKiAtRU1TR1NJWkUgaW1wbGllcyBuZWVkZWQgc3BhY2UgZ3JldyB1bmRlciB1cy4gKi9cbkBAIC02NDEwLDcgJiM0Mzs2NDMxLDggQEAgdm9pZCBmaWI2X3J0X3VwZGF0ZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBmaWI2X2luZm8gKnJ0LFxuIFx0XHRnb3RvIGVycm91dDtcbiBcbiBcdGVyciA9IHJ0Nl9maWxsX25vZGUobmV0LCBza2IsIHJ0LCBOVUxMLCBOVUxMLCBOVUxMLCAwLFxuLVx0XHRcdCAgICBSVE1fTkVXUk9VVEUsIGluZm8tXHUwMDNlcG9ydGlkLCBzZXEsIE5MTV9GX1JFUExBQ0UpO1xuJiM0MztcdFx0XHQgICAgUlRNX05FV1JPVVRFLCBpbmZvLVx1MDAzZXBvcnRpZCwgc2VxLCBOTE1fRl9SRVBMQUNFLFxuJiM0MztcdFx0XHQgICAgUlRBX0RFTF9SRUFTT05fVU5TUEVDKTtcbiBcdGlmIChlcnIgXHUwMDNjIDApIHtcbiBcdFx0LyogLUVNU0dTSVpFIGltcGxpZXMgQlVHIGluIHJ0Nl9ubG1zZ19zaXplKCkgKi9cbiBcdFx0V0FSTl9PTihlcnIgPT0gLUVNU0dTSVpFKTtcbkBAIC02NDYzLDcgJiM0Mzs2NDg1LDcgQEAgdm9pZCBmaWI2X2luZm9faHdfZmxhZ3Nfc2V0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZpYjZfaW5mbyAqZjZpLFxuIFx0fVxuIFxuIFx0ZXJyID0gcnQ2X2ZpbGxfbm9kZShuZXQsIHNrYiwgZjZpLCBOVUxMLCBOVUxMLCBOVUxMLCAwLCBSVE1fTkVXUk9VVEUsIDAsXG4tXHRcdFx0ICAgIDAsIDApO1xuJiM0MztcdFx0XHQgICAgMCwgMCwgUlRBX0RFTF9SRUFTT05fVU5TUEVDKTtcbiBcdGlmIChlcnIgXHUwMDNjIDApIHtcbiBcdFx0LyogLUVNU0dTSVpFIGltcGxpZXMgQlVHIGluIHJ0Nl9ubG1zZ19zaXplKCkgKi9cbiBcdFx0V0FSTl9PTihlcnIgPT0gLUVNU0dTSVpFKTtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbGliL3B5L19faW5pdF9fLnB5IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2xpYi9weS9fX2luaXRfXy5weVxuaW5kZXggZTU4YmRiZGM1OGVlYWQuLjM0OTM1ODg2YjZhZGZlIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2xpYi9weS9fX2luaXRfXy5weVxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2xpYi9weS9fX2luaXRfXy5weVxuQEAgLTE3LDcgJiM0MzsxNyw3IEBAIGZyb20gLnV0aWxzIGltcG9ydCBDbWRFeGl0RmFpbHVyZSwgZmRfcmVhZF90aW1lb3V0LCBjbWQsIGJrZywgZGVmZXIsIFxcXG4gICAgIHdhaXRfZmlsZSwgdG9vbCwgdGNcbiBmcm9tIC5icGYgaW1wb3J0IGJwZl9tYXBfc2V0LCBicGZfbWFwX2R1bXAsIGJwZl9wcm9nX21hcF9pZHNcbiBmcm9tIC55bmwgaW1wb3J0IE5sRXJyb3IsIE5sY3RybEZhbWlseSwgWW5sRmFtaWx5LCBcXFxuLSAgICBFdGh0b29sRmFtaWx5LCBOZXRkZXZGYW1pbHksIFJ0bmxGYW1pbHksIFJ0bmxBZGRyRmFtaWx5XG4mIzQzOyAgICBFdGh0b29sRmFtaWx5LCBOZXRkZXZGYW1pbHksIFJ0bmxGYW1pbHksIFJ0bmxBZGRyRmFtaWx5LCBSdG5sUm91dGVGYW1pbHlcbiBmcm9tIC55bmwgaW1wb3J0IE5ldHNoYXBlckZhbWlseSwgRGV2bGlua0ZhbWlseSwgUFNQRmFtaWx5LCBOZXRsaW5rXG4gXG4gX19hbGxfXyA9IFtcJiMzNDtLU1JDXCYjMzQ7LFxuQEAgLTM0LDQgJiM0MzszNCw0IEBAIF9fYWxsX18gPSBbXCYjMzQ7S1NSQ1wmIzM0OyxcbiAgICAgICAgICAgIFwmIzM0O05ldGRldlNpbVwmIzM0OywgXCYjMzQ7TmV0ZGV2U2ltRGV2XCYjMzQ7LFxuICAgICAgICAgICAgXCYjMzQ7TmV0c2hhcGVyRmFtaWx5XCYjMzQ7LCBcJiMzNDtEZXZsaW5rRmFtaWx5XCYjMzQ7LCBcJiMzNDtQU1BGYW1pbHlcJiMzNDssIFwmIzM0O05sRXJyb3JcJiMzNDssXG4gICAgICAgICAgICBcJiMzNDtZbmxGYW1pbHlcJiMzNDssIFwmIzM0O0V0aHRvb2xGYW1pbHlcJiMzNDssIFwmIzM0O05ldGRldkZhbWlseVwmIzM0OywgXCYjMzQ7UnRubEZhbWlseVwmIzM0Oyxcbi0gICAgICAgICAgIFwmIzM0O05sY3RybEZhbWlseVwmIzM0OywgXCYjMzQ7UnRubEFkZHJGYW1pbHlcJiMzNDssIFwmIzM0O05ldGxpbmtcJiMzNDtdXG4mIzQzOyAgICAgICAgICAgXCYjMzQ7TmxjdHJsRmFtaWx5XCYjMzQ7LCBcJiMzNDtSdG5sQWRkckZhbWlseVwmIzM0OywgXCYjMzQ7UnRubFJvdXRlRmFtaWx5XCYjMzQ7LCBcJiMzNDtOZXRsaW5rXCYjMzQ7XVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9saWIvcHkveW5sLnB5IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2xpYi9weS95bmwucHlcbmluZGV4IDJlNTY3MDYyYWE2Y2NlLi4wOGRlZmY3NTZmMjliMCAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9saWIvcHkveW5sLnB5XG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbGliL3B5L3lubC5weVxuQEAgLTI5LDcgJiM0MzsyOSw3IEBAIGV4Y2VwdCBNb2R1bGVOb3RGb3VuZEVycm9yIGFzIGU6XG4gXG4gX19hbGxfXyA9IFtcbiAgICAgXCYjMzQ7TmxFcnJvclwmIzM0OywgXCYjMzQ7TmxQb2xpY3lcJiMzNDssIFwmIzM0O05ldGxpbmtcJiMzNDssIFwmIzM0O1lubEZhbWlseVwmIzM0OywgXCYjMzQ7U1BFQ19QQVRIXCYjMzQ7LFxuLSAgICBcJiMzNDtFdGh0b29sRmFtaWx5XCYjMzQ7LCBcJiMzNDtSdG5sRmFtaWx5XCYjMzQ7LCBcJiMzNDtSdG5sQWRkckZhbWlseVwmIzM0OyxcbiYjNDM7ICAgIFwmIzM0O0V0aHRvb2xGYW1pbHlcJiMzNDssIFwmIzM0O1J0bmxGYW1pbHlcJiMzNDssIFwmIzM0O1J0bmxBZGRyRmFtaWx5XCYjMzQ7LCBcJiMzNDtSdG5sUm91dGVGYW1pbHlcJiMzNDssXG4gICAgIFwmIzM0O05ldGRldkZhbWlseVwmIzM0OywgXCYjMzQ7TmV0c2hhcGVyRmFtaWx5XCYjMzQ7LCBcJiMzNDtObGN0cmxGYW1pbHlcJiMzNDssIFwmIzM0O0RldmxpbmtGYW1pbHlcJiMzNDssXG4gICAgIFwmIzM0O1BTUEZhbWlseVwmIzM0OyxcbiBdXG5AQCAtNTQsNiAmIzQzOzU0LDExIEBAIGNsYXNzIFJ0bmxBZGRyRmFtaWx5KFlubEZhbWlseSk6XG4gICAgICAgICBzdXBlcigpLl9faW5pdF9fKChTUEVDX1BBVEggLyBQYXRoKCYjMzk7cnQtYWRkci55YW1sJiMzOTspKS5hc19wb3NpeCgpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBzY2hlbWE9JiMzOTsmIzM5OywgcmVjdl9zaXplPXJlY3Zfc2l6ZSlcbiBcbiYjNDM7Y2xhc3MgUnRubFJvdXRlRmFtaWx5KFlubEZhbWlseSk6XG4mIzQzOyAgICBkZWYgX19pbml0X18oc2VsZiwgcmVjdl9zaXplPTApOlxuJiM0MzsgICAgICAgIHN1cGVyKCkuX19pbml0X18oKFNQRUNfUEFUSCAvIFBhdGgoJiMzOTtydC1yb3V0ZS55YW1sJiMzOTspKS5hc19wb3NpeCgpLFxuJiM0MzsgICAgICAgICAgICAgICAgICAgICAgICAgc2NoZW1hPSYjMzk7JiMzOTssIHJlY3Zfc2l6ZT1yZWN2X3NpemUpXG4mIzQzO1xuIGNsYXNzIE5ldGRldkZhbWlseShZbmxGYW1pbHkpOlxuICAgICBkZWYgX19pbml0X18oc2VsZiwgcmVjdl9zaXplPTApOlxuICAgICAgICAgc3VwZXIoKS5fX2luaXRfXygoU1BFQ19QQVRIIC8gUGF0aCgmIzM5O25ldGRldi55YW1sJiMzOTspKS5hc19wb3NpeCgpLFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9ydG5ldGxpbmsucHkgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvcnRuZXRsaW5rLnB5XG5pbmRleCAwYzY3YzdjMDBkODQxYy4uZjc0Y2NkNWMyZDEzYWEgMTAwNzU1XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvcnRuZXRsaW5rLnB5XG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvcnRuZXRsaW5rLnB5XG5AQCAtNSw3ICYjNDM7NSw4IEBAIGltcG9ydCBzb2NrZXRcbiBpbXBvcnQgc3RydWN0XG4gaW1wb3J0IHRpbWVcbiBmcm9tIGxpYi5weSBpbXBvcnQgYmtnLCBpcCwga3NmdF9leGl0LCBrc2Z0X3J1biwga3NmdF9lcSwga3NmdF9nZSwga3NmdF90cnVlLCBLc2Z0U2tpcEV4XG4tZnJvbSBsaWIucHkgaW1wb3J0IENtZEV4aXRGYWlsdXJlLCBOZXROUywgTmV0TlNFbnRlciwgUnRubEFkZHJGYW1pbHlcbiYjNDM7ZnJvbSBsaWIucHkgaW1wb3J0IGtzZnRfbm90X2luLCBrc2Z0X25vdF9ub25lXG4mIzQzO2Zyb20gbGliLnB5IGltcG9ydCBDbWRFeGl0RmFpbHVyZSwgTmV0TlMsIE5ldE5TRW50ZXIsIFJ0bmxBZGRyRmFtaWx5LCBSdG5sUm91dGVGYW1pbHlcbiBcbiBJUFY0X0FMTF9IT1NUU19NVUxUSUNBU1QgPSBiJiMzOTtcXHhlMFxceDAwXFx4MDBcXHgwMSYjMzk7XG4gSVBWNF9URVNUX01VTFRJQ0FTVCA9IGImIzM5O1xceGVmXFx4MDFcXHgwMVxceDAxJiMzOTtcbkBAIC0xMzQsOCAmIzQzOzEzNSwxODQgQEAgZGVmIGlwdjRfZGV2Y29uZl9ub3RpZnkoKSAtXHUwMDNlIE5vbmU6XG4gICAgIGtzZnRfdHJ1ZShmXCYjMzQ7aW5ldCB7aWZuYW1lfSBmb3J3YXJkaW5nIG9uXCYjMzQ7IGluIGNtZF9vYmouc3Rkb3V0LFxuICAgICAgICAgICAgICAgZlwmIzM0O05vICYjMzk7Zm9yd2FyZGluZyBvbiYjMzk7IG5vdGlmaWNpYXRpb24gZm91bmQgZm9yIGludGVyZmFjZSB7aWZuYW1lfVwmIzM0OylcbiBcbiYjNDM7ZGVmIF9ydG5sX3JvdXRlX3N1YnNjcmliZShucyk6XG4mIzQzOyAgICB3aXRoIE5ldE5TRW50ZXIoc3RyKG5zKSk6XG4mIzQzOyAgICAgICAgcnRubCA9IFJ0bmxSb3V0ZUZhbWlseSgpXG4mIzQzOyAgICBydG5sLm50Zl9zdWJzY3JpYmUoXCYjMzQ7cnRubGdycC1pcHY2LXJvdXRlXCYjMzQ7KVxuJiM0MzsgICAgcmV0dXJuIHJ0bmxcbiYjNDM7XG4mIzQzO1xuJiM0MztkZWYgX3dhaXRfcm91dGVfbnRmKHJ0bmwsIG5hbWUsIGRzdF9sZW4sIGRzdD1Ob25lLCBkZWFkbGluZT0xMCk6XG4mIzQzOyAgICBcJiMzNDtcJiMzNDtcJiMzNDtSZXR1cm4gdGhlIGF0dHJzIG9mIHRoZSBmaXJzdCBtYXRjaGluZyBub3RpZmljYXRpb24sIE5vbmUgb24gdGltZW91dC5cJiMzNDtcJiMzNDtcJiMzNDtcbiYjNDM7XG4mIzQzOyAgICBmb3IgbXNnIGluIHJ0bmwucG9sbF9udGYoZHVyYXRpb249ZGVhZGxpbmUpOlxuJiM0MzsgICAgICAgIGlmIG1zZ1smIzM5O25hbWUmIzM5O10gIT0gbmFtZTpcbiYjNDM7ICAgICAgICAgICAgY29udGludWVcbiYjNDM7ICAgICAgICBhdHRycyA9IG1zZ1smIzM5O21zZyYjMzk7XVxuJiM0MzsgICAgICAgIGlmIGF0dHJzWyYjMzk7cnRtLWRzdC1sZW4mIzM5O10gIT0gZHN0X2xlbjpcbiYjNDM7ICAgICAgICAgICAgY29udGludWVcbiYjNDM7ICAgICAgICBpZiBkc3QgaXMgbm90IE5vbmUgYW5kIGF0dHJzLmdldCgmIzM5O2RzdCYjMzk7KSAhPSBkc3Q6XG4mIzQzOyAgICAgICAgICAgIGNvbnRpbnVlXG4mIzQzOyAgICAgICAgcmV0dXJuIGF0dHJzXG4mIzQzOyAgICByZXR1cm4gTm9uZVxuJiM0MztcbiYjNDM7XG4mIzQzO2RlZiBfY29sbGVjdF9yb3V0ZV9udGZzKHJ0bmwsIG5hbWUsIHdhbnQsIGRlYWRsaW5lPTEwKTpcbiYjNDM7ICAgIFwmIzM0O1wmIzM0O1wmIzM0O0dhdGhlciBhdHRycyBvZiBtYXRjaGluZyBub3RpZmljYXRpb25zLCBrZXllZCBieSAoZHN0X2xlbiwgZHN0KS5cJiMzNDtcJiMzNDtcJiMzNDtcbiYjNDM7XG4mIzQzOyAgICBzZWVuID0ge31cbiYjNDM7ICAgIGZvciBtc2cgaW4gcnRubC5wb2xsX250ZihkdXJhdGlvbj1kZWFkbGluZSk6XG4mIzQzOyAgICAgICAgaWYgbXNnWyYjMzk7bmFtZSYjMzk7XSAhPSBuYW1lOlxuJiM0MzsgICAgICAgICAgICBjb250aW51ZVxuJiM0MzsgICAgICAgIGF0dHJzID0gbXNnWyYjMzk7bXNnJiMzOTtdXG4mIzQzOyAgICAgICAga2V5ID0gKGF0dHJzWyYjMzk7cnRtLWRzdC1sZW4mIzM5O10sIGF0dHJzLmdldCgmIzM5O2RzdCYjMzk7KSlcbiYjNDM7ICAgICAgICBpZiBrZXkgaW4gd2FudDpcbiYjNDM7ICAgICAgICAgICAgc2VlbltrZXldID0gYXR0cnNcbiYjNDM7ICAgICAgICAgICAgaWYgbGVuKHNlZW4pID09IGxlbih3YW50KTpcbiYjNDM7ICAgICAgICAgICAgICAgIGJyZWFrXG4mIzQzOyAgICByZXR1cm4gc2VlblxuJiM0MztcbiYjNDM7XG4mIzQzO2RlZiBfd3JpdGVfaXB2Nl9zeXNjdGwobmFtZSwgdmFsdWUpOlxuJiM0MzsgICAgd2l0aCBvcGVuKGZcJiMzNDsvcHJvYy9zeXMvbmV0L2lwdjYve25hbWV9XCYjMzQ7LCBcJiMzNDt3XCYjMzQ7KSBhcyBmOlxuJiM0MzsgICAgICAgIGYud3JpdGUoZlwmIzM0O3t2YWx1ZX1cXG5cJiMzNDspXG4mIzQzO1xuJiM0MztcbiYjNDM7ZGVmIGlwdjZfcm91dGVfZGVsX3JlYXNvbl9leHBpcmVkKCkgLVx1MDAzZSBOb25lOlxuJiM0MzsgICAgXCYjMzQ7XCYjMzQ7XCYjMzQ7QW4gZXhwaXJlZCByb3V0ZSByZXBvcnRzIFJUQV9ERUxfUkVBU09OID09IGV4cGlyZWQuXCYjMzQ7XCYjMzQ7XCYjMzQ7XG4mIzQzO1xuJiM0MzsgICAgd2l0aCBOZXROUygpIGFzIG5zOlxuJiM0MzsgICAgICAgIHJ0bmwgPSBfcnRubF9yb3V0ZV9zdWJzY3JpYmUobnMpXG4mIzQzOyAgICAgICAgd2l0aCBOZXROU0VudGVyKHN0cihucykpOlxuJiM0MzsgICAgICAgICAgICBfd3JpdGVfaXB2Nl9zeXNjdGwoXCYjMzQ7cm91dGUvZ2NfaW50ZXJ2YWxcJiMzNDssIDIpXG4mIzQzOyAgICAgICAgaXAoXCYjMzQ7bGluayBhZGQgbmFtZSBkdW1teTEgdHlwZSBkdW1teVwmIzM0OywgbnM9c3RyKG5zKSlcbiYjNDM7ICAgICAgICBpcChcJiMzNDtsaW5rIHNldCBkZXYgZHVtbXkxIHVwXCYjMzQ7LCBucz1zdHIobnMpKVxuJiM0MzsgICAgICAgIGlwKFwmIzM0Oy02IHJvdXRlIGFkZCAyMDAxOmRiODoyOjovNjQgZGV2IGR1bW15MSBleHBpcmVzIDJcJiMzNDssIG5zPXN0cihucykpXG4mIzQzO1xuJiM0MzsgICAgICAgIGF0dHJzID0gX3dhaXRfcm91dGVfbnRmKHJ0bmwsICYjMzk7ZGVscm91dGUtbnRmJiMzOTssIDY0LCAmIzM5OzIwMDE6ZGI4OjI6OiYjMzk7LFxuJiM0MzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlYWRsaW5lPTE1KVxuJiM0MzsgICAgICAgIGtzZnRfbm90X25vbmUoYXR0cnMsIFwmIzM0O25vIFJUTV9ERUxST1VURSBmb3IgdGhlIGV4cGlyZWQgcm91dGVcJiMzNDspXG4mIzQzOyAgICAgICAgaWYgYXR0cnMgaXMgbm90IE5vbmU6XG4mIzQzOyAgICAgICAgICAgIGtzZnRfZXEoYXR0cnMuZ2V0KCYjMzk7ZGVsLXJlYXNvbiYjMzk7KSwgJiMzOTtleHBpcmVkJiMzOTspXG4mIzQzO1xuJiM0MztcbiYjNDM7ZGVmIF9zZW5kX3JhKHNvY2ssIGlmaW5kZXgsIGxpZmV0aW1lLCByaW89Tm9uZSwgcGlvPU5vbmUpOlxuJiM0MzsgICAgXCYjMzQ7XCYjMzQ7XCYjMzQ7VGhlIGtlcm5lbCBmaWxscyBpbiB0aGUgSUNNUHY2IGNoZWNrc3VtIG9uIHJhdyBJQ01QdjYgc29ja2V0cy5cJiMzNDtcJiMzNDtcJiMzNDtcbiYjNDM7XG4mIzQzOyAgICAjIHR5cGUsIGNvZGUsIGNrc3VtLCBob3AgbGltaXQsIGZsYWdzLCByb3V0ZXIgbGlmZXRpbWUsXG4mIzQzOyAgICAjIHJlYWNoYWJsZSB0aW1lLCByZXRyYW5zIHRpbWVyXG4mIzQzOyAgICByYSA9IHN0cnVjdC5wYWNrKCYjMzk7IUJCSEJCSElJJiMzOTssIDEzNCwgMCwgMCwgNjQsIDAsIGxpZmV0aW1lLCAwLCAwKVxuJiM0MzsgICAgaWYgcmlvIGlzIG5vdCBOb25lOlxuJiM0MzsgICAgICAgIHByZWZpeCwgcGxlbiwgcmlvX2xpZmV0aW1lID0gcmlvXG4mIzQzOyAgICAgICAgIyBSRkMgNDE5MSByb3V0ZSBpbmZvcm1hdGlvbiBvcHRpb24sIC82NCBwcmVmaXggKDggYnl0ZXMpXG4mIzQzOyAgICAgICAgcmEgJiM0Mzs9IHN0cnVjdC5wYWNrKCYjMzk7IUJCQkJJJiMzOTssIDI0LCAyLCBwbGVuLCAwLCByaW9fbGlmZXRpbWUpXG4mIzQzOyAgICAgICAgcmEgJiM0Mzs9IHNvY2tldC5pbmV0X3B0b24oc29ja2V0LkFGX0lORVQ2LCBwcmVmaXgpWzo4XVxuJiM0MzsgICAgaWYgcGlvIGlzIG5vdCBOb25lOlxuJiM0MzsgICAgICAgIHByZWZpeCwgcGxlbiwgdmFsaWRfbGZ0ID0gcGlvXG4mIzQzOyAgICAgICAgIyBSRkMgNDg2MSBwcmVmaXggaW5mb3JtYXRpb24gb3B0aW9uLCBvbi1saW5rIG9ubHkgKEwgc2V0LCBBIGNsZWFyKVxuJiM0MzsgICAgICAgIHJhICYjNDM7PSBzdHJ1Y3QucGFjaygmIzM5OyFCQkJCSUlJJiMzOTssIDMsIDQsIHBsZW4sIDB4ODAsIHZhbGlkX2xmdCwgMCwgMClcbiYjNDM7ICAgICAgICByYSAmIzQzOz0gc29ja2V0LmluZXRfcHRvbihzb2NrZXQuQUZfSU5FVDYsIHByZWZpeClcbiYjNDM7ICAgIHNvY2suc2VuZHRvKHJhLCAoJiMzOTtmZjAyOjoxJiMzOTssIDAsIDAsIGlmaW5kZXgpKVxuJiM0MztcbiYjNDM7XG4mIzQzO2RlZiBfcmFfcm91dGVyX3NvY2sobnNfciwgaWZuYW1lKTpcbiYjNDM7ICAgIHdpdGggTmV0TlNFbnRlcihzdHIobnNfcikpOlxuJiM0MzsgICAgICAgIHNvY2sgPSBzb2NrZXQuc29ja2V0KHNvY2tldC5BRl9JTkVUNiwgc29ja2V0LlNPQ0tfUkFXLFxuJiM0MzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvY2tldC5JUFBST1RPX0lDTVBWNilcbiYjNDM7ICAgICAgICBzb2NrLnNldHNvY2tvcHQoc29ja2V0LklQUFJPVE9fSVBWNiwgc29ja2V0LklQVjZfTVVMVElDQVNUX0hPUFMsIDI1NSlcbiYjNDM7ICAgICAgICByZXR1cm4gc29jaywgc29ja2V0LmlmX25hbWV0b2luZGV4KGlmbmFtZSlcbiYjNDM7XG4mIzQzO1xuJiM0MztkZWYgX3JhX2FkdmVydGlzZV9yb3V0ZXMocnRubCwgc29jaywgaWZpbmRleCwgd2FudCwgKipyYV9vcHRzKTpcbiYjNDM7ICAgIFwmIzM0O1wmIzM0O1wmIzM0O1xuJiM0MzsgICAgU2VuZGluZyBmYWlscyB3aXRoIEVBRERSTk9UQVZBSUwgdW50aWwgdGhlIHJvdXRlciYjMzk7cyBsaW5rLWxvY2FsXG4mIzQzOyAgICBhZGRyZXNzIHBhc3NlcyBEQUQsIHNvIHJldHJ5LlxuJiM0MzsgICAgXCYjMzQ7XCYjMzQ7XCYjMzQ7XG4mIzQzO1xuJiM0MzsgICAgc2VlbiA9IHt9XG4mIzQzOyAgICBmb3IgXyBpbiByYW5nZSgxMCk6XG4mIzQzOyAgICAgICAgdHJ5OlxuJiM0MzsgICAgICAgICAgICBfc2VuZF9yYShzb2NrLCBpZmluZGV4LCAqKnJhX29wdHMpXG4mIzQzOyAgICAgICAgZXhjZXB0IE9TRXJyb3I6XG4mIzQzOyAgICAgICAgICAgIHRpbWUuc2xlZXAoMC4yKVxuJiM0MzsgICAgICAgICAgICBjb250aW51ZVxuJiM0MzsgICAgICAgIHNlZW4udXBkYXRlKF9jb2xsZWN0X3JvdXRlX250ZnMocnRubCwgJiMzOTtuZXdyb3V0ZS1udGYmIzM5OyxcbiYjNDM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdhbnQgLSBzZXQoc2Vlbi5rZXlzKCkpLCBkZWFkbGluZT0yKSlcbiYjNDM7ICAgICAgICBpZiBsZW4oc2VlbikgPT0gbGVuKHdhbnQpOlxuJiM0MzsgICAgICAgICAgICBicmVha1xuJiM0MzsgICAgcmV0dXJuIHNlZW5cbiYjNDM7XG4mIzQzO1xuJiM0MztkZWYgaXB2Nl9yb3V0ZV9kZWxfcmVhc29uX3JhX3dpdGhkcmF3bigpIC1cdTAwM2UgTm9uZTpcbiYjNDM7ICAgIFwmIzM0O1wmIzM0O1wmIzM0O1xuJiM0MzsgICAgUm91dGVzIHdpdGhkcmF3biBieSBhIHplcm8tbGlmZXRpbWUgUkEgKHJvdXRlciBsaWZldGltZSwgUkZDIDQ4NjFcbiYjNDM7ICAgIFBJTywgUkZDIDQxOTEgUklPKSByZXBvcnQgUlRBX0RFTF9SRUFTT04gPT0gcmEtd2l0aGRyYXduLlxuJiM0MzsgICAgXCYjMzQ7XCYjMzQ7XCYjMzQ7XG4mIzQzO1xuJiM0MzsgICAgIyAocnRtLWRzdC1sZW4sIGRzdCk7IHRoZSBkZWZhdWx0IHJvdXRlIGNhcnJpZXMgbm8gUlRBX0RTVFxuJiM0MzsgICAgcm91dGVzID0geygwLCBOb25lKSwgKDY0LCAmIzM5OzIwMDE6ZGI4OjY6OiYjMzk7KSwgKDY0LCAmIzM5OzIwMDE6ZGI4OjU6OiYjMzk7KX1cbiYjNDM7XG4mIzQzOyAgICB3aXRoIE5ldE5TKCkgYXMgbnNfaCwgTmV0TlMoKSBhcyBuc19yOlxuJiM0MzsgICAgICAgIGlwKGZcJiMzNDtsaW5rIGFkZCB2ZXRoMCBuZXRucyB7bnNfaH0gdHlwZSB2ZXRoIHBlZXIgbmFtZSB2ZXRoMSBuZXRucyB7bnNfcn1cJiMzNDspXG4mIzQzOyAgICAgICAgd2l0aCBOZXROU0VudGVyKHN0cihuc19oKSk6XG4mIzQzOyAgICAgICAgICAgIF93cml0ZV9pcHY2X3N5c2N0bChcJiMzNDtjb25mL3ZldGgwL2FjY2VwdF9yYVwmIzM0OywgMilcbiYjNDM7ICAgICAgICAgICAgX3dyaXRlX2lwdjZfc3lzY3RsKFwmIzM0O2NvbmYvdmV0aDAvZm9yd2FyZGluZ1wmIzM0OywgMClcbiYjNDM7ICAgICAgICAgICAgdHJ5OlxuJiM0MzsgICAgICAgICAgICAgICAgX3dyaXRlX2lwdjZfc3lzY3RsKFwmIzM0O2NvbmYvdmV0aDAvYWNjZXB0X3JhX3J0X2luZm9fbWF4X3BsZW5cJiMzNDssIDY0KVxuJiM0MzsgICAgICAgICAgICBleGNlcHQgRmlsZU5vdEZvdW5kRXJyb3I6XG4mIzQzOyAgICAgICAgICAgICAgICByYWlzZSBLc2Z0U2tpcEV4KFwmIzM0O25vIENPTkZJR19JUFY2X1JPVVRFX0lORk9cJiMzNDspXG4mIzQzOyAgICAgICAgd2l0aCBOZXROU0VudGVyKHN0cihuc19yKSk6XG4mIzQzOyAgICAgICAgICAgICMgc2tpcCBEQUQgc28gdGhlIHJvdXRlciYjMzk7cyBsaW5rLWxvY2FsIHNvdXJjZSBpcyB1c2FibGUgcmlnaHQgYXdheVxuJiM0MzsgICAgICAgICAgICBfd3JpdGVfaXB2Nl9zeXNjdGwoXCYjMzQ7Y29uZi92ZXRoMS9hY2NlcHRfZGFkXCYjMzQ7LCAwKVxuJiM0MzsgICAgICAgIGlwKFwmIzM0O2xpbmsgc2V0IGRldiB2ZXRoMCB1cFwmIzM0OywgbnM9c3RyKG5zX2gpKVxuJiM0MzsgICAgICAgIGlwKFwmIzM0O2xpbmsgc2V0IGRldiB2ZXRoMSB1cFwmIzM0OywgbnM9c3RyKG5zX3IpKVxuJiM0MztcbiYjNDM7ICAgICAgICBydG5sID0gX3J0bmxfcm91dGVfc3Vic2NyaWJlKG5zX2gpXG4mIzQzOyAgICAgICAgc29jaywgaWZpbmRleCA9IF9yYV9yb3V0ZXJfc29jayhuc19yLCBcJiMzNDt2ZXRoMVwmIzM0OylcbiYjNDM7XG4mIzQzOyAgICAgICAgc2VlbiA9IF9yYV9hZHZlcnRpc2Vfcm91dGVzKHJ0bmwsIHNvY2ssIGlmaW5kZXgsIHJvdXRlcyxcbiYjNDM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlmZXRpbWU9MTgwMCxcbiYjNDM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmlvPSgmIzM5OzIwMDE6ZGI4OjU6OiYjMzk7LCA2NCwgNjAwKSxcbiYjNDM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGlvPSgmIzM5OzIwMDE6ZGI4OjY6OiYjMzk7LCA2NCwgNjAwKSlcbiYjNDM7ICAgICAgICBrc2Z0X2VxKHNldChzZWVuKSwgcm91dGVzLCBcJiMzNDtub3QgYWxsIFJBIHJvdXRlcyB3ZXJlIGluc3RhbGxlZFwmIzM0OylcbiYjNDM7ICAgICAgICBpZiBzZXQoc2VlbikgIT0gcm91dGVzOlxuJiM0MzsgICAgICAgICAgICByZXR1cm5cbiYjNDM7XG4mIzQzOyAgICAgICAgX3NlbmRfcmEoc29jaywgaWZpbmRleCwgMCwgcmlvPSgmIzM5OzIwMDE6ZGI4OjU6OiYjMzk7LCA2NCwgMCksXG4mIzQzOyAgICAgICAgICAgICAgICAgcGlvPSgmIzM5OzIwMDE6ZGI4OjY6OiYjMzk7LCA2NCwgMCkpXG4mIzQzOyAgICAgICAgc2VlbiA9IF9jb2xsZWN0X3JvdXRlX250ZnMocnRubCwgJiMzOTtkZWxyb3V0ZS1udGYmIzM5Oywgcm91dGVzKVxuJiM0MzsgICAgICAgIGZvciBrZXkgaW4gcm91dGVzOlxuJiM0MzsgICAgICAgICAgICBhdHRycyA9IHNlZW4uZ2V0KGtleSlcbiYjNDM7ICAgICAgICAgICAga3NmdF9ub3Rfbm9uZShhdHRycywgZlwmIzM0O25vIFJUTV9ERUxST1VURSBmb3Ige2tleX1cJiMzNDspXG4mIzQzOyAgICAgICAgICAgIGlmIGF0dHJzIGlzIG5vdCBOb25lOlxuJiM0MzsgICAgICAgICAgICAgICAga3NmdF9lcShhdHRycy5nZXQoJiMzOTtkZWwtcmVhc29uJiMzOTspLCAmIzM5O3JhLXdpdGhkcmF3biYjMzk7KVxuJiM0MztcbiYjNDM7XG4mIzQzO2RlZiBpcHY2X3JvdXRlX2RlbF9yZWFzb25fYWJzZW50KCkgLVx1MDAzZSBOb25lOlxuJiM0MzsgICAgXCYjMzQ7XCYjMzQ7XCYjMzQ7XG4mIzQzOyAgICBBIGRlbGV0aW9uIHBhdGggdGhhdCByZWNvcmRzIG5vIGNhdXNlIChoZXJlIGEgdXNlcnNwYWNlIHJlcXVlc3QpXG4mIzQzOyAgICBtdXN0IG5vdCBjYXJyeSBSVEFfREVMX1JFQVNPTiBhdCBhbGwuXG4mIzQzOyAgICBcJiMzNDtcJiMzNDtcJiMzNDtcbiYjNDM7XG4mIzQzOyAgICB3aXRoIE5ldE5TKCkgYXMgbnM6XG4mIzQzOyAgICAgICAgcnRubCA9IF9ydG5sX3JvdXRlX3N1YnNjcmliZShucylcbiYjNDM7ICAgICAgICBpcChcJiMzNDtsaW5rIGFkZCBuYW1lIGR1bW15MSB0eXBlIGR1bW15XCYjMzQ7LCBucz1zdHIobnMpKVxuJiM0MzsgICAgICAgIGlwKFwmIzM0O2xpbmsgc2V0IGRldiBkdW1teTEgdXBcJiMzNDssIG5zPXN0cihucykpXG4mIzQzOyAgICAgICAgaXAoXCYjMzQ7LTYgcm91dGUgYWRkIDIwMDE6ZGI4OjE6Oi82NCBkZXYgZHVtbXkxXCYjMzQ7LCBucz1zdHIobnMpKVxuJiM0MzsgICAgICAgIGlwKFwmIzM0Oy02IHJvdXRlIGRlbCAyMDAxOmRiODoxOjovNjQgZGV2IGR1bW15MVwmIzM0OywgbnM9c3RyKG5zKSlcbiYjNDM7XG4mIzQzOyAgICAgICAgYXR0cnMgPSBfd2FpdF9yb3V0ZV9udGYocnRubCwgJiMzOTtkZWxyb3V0ZS1udGYmIzM5OywgNjQsICYjMzk7MjAwMTpkYjg6MTo6JiMzOTspXG4mIzQzOyAgICAgICAga3NmdF9ub3Rfbm9uZShhdHRycywgXCYjMzQ7bm8gUlRNX0RFTFJPVVRFIGZvciAyMDAxOmRiODoxOjovNjRcJiMzNDspXG4mIzQzOyAgICAgICAgaWYgYXR0cnMgaXMgbm90IE5vbmU6XG4mIzQzOyAgICAgICAgICAgIGtzZnRfbm90X2luKCYjMzk7ZGVsLXJlYXNvbiYjMzk7LCBhdHRycyxcbiYjNDM7ICAgICAgICAgICAgICAgICAgICAgICAgXCYjMzQ7dXNlciBkZWxldGlvbiBtdXN0IG5vdCBjYXJyeSBkZWwtcmVhc29uXCYjMzQ7KVxuJiM0MztcbiYjNDM7XG4gZGVmIG1haW4oKSAtXHUwMDNlIE5vbmU6XG4tICAgIGtzZnRfcnVuKFtkdW1wX21jYWRkcl9jaGVjaywgZHVtcF9tY2FkZHI2X2NoZWNrLCBpcHY0X2RldmNvbmZfbm90aWZ5XSlcbiYjNDM7ICAgIGtzZnRfcnVuKFtkdW1wX21jYWRkcl9jaGVjaywgZHVtcF9tY2FkZHI2X2NoZWNrLCBpcHY0X2RldmNvbmZfbm90aWZ5LFxuJiM0MzsgICAgICAgICAgICAgIGlwdjZfcm91dGVfZGVsX3JlYXNvbl9leHBpcmVkLFxuJiM0MzsgICAgICAgICAgICAgIGlwdjZfcm91dGVfZGVsX3JlYXNvbl9yYV93aXRoZHJhd24sXG4mIzQzOyAgICAgICAgICAgICAgaXB2Nl9yb3V0ZV9kZWxfcmVhc29uX2Fic2VudF0pXG4gICAgIGtzZnRfZXhpdCgpXG4gXG4gaWYgX19uYW1lX18gPT0gXCYjMzQ7X19tYWluX19cJiMzNDs6XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMjI6MzY8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lQVjYmIzM0OywKICAgICYjMzQ7SVBWNl9ST1VURVJfUFJFRiYjMzQ7LAogICAgJiMzNDtJUFY2X1JPVVRFX0lORk8mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtpcDZfZGVsX3J0X3JlYXNvbiYjMzQ7LAogICAgJiMzNDtmaWI2X2RlbCYjMzQ7LAogICAgJiMzNDtpbmV0Nl9ydF9ub3RpZnkmIzM0OywKICAgICYjMzQ7cnQ2X3JvdXRlX3JjdiYjMzQ7LAogICAgJiMzNDthZGRyY29uZl9wcmVmaXhfcmN2JiMzNDssCiAgICAmIzM0O25kaXNjX3JjdiYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGEgbmV3IG5ldGxpbmsgYXR0cmlidXRlIGBSVEFfREVMX1JFQVNPTmAgdG8gSVB2NiByb3V0ZSBkZWxldGlvbiBub3RpZmljYXRpb25zIChgUlRNX0RFTFJPVVRFYCkuIEl0IG1vZGlmaWVzIGNvcmUgSVB2NiByb3V0aW5nIGFuZCBuZWlnaGJvciBkaXNjb3ZlcnkgZnVuY3Rpb25zIHRvIHBvcHVsYXRlIHRoaXMgYXR0cmlidXRlIHdoZW4gcm91dGVzIGFyZSBkZWxldGVkIGR1ZSB0byBleHBpcmF0aW9uIG9yIFJvdXRlciBBZHZlcnRpc2VtZW50IChSQSkgd2l0aGRyYXdhbC4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMgdGhhdCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNGMyYmVmNWVmYTI4YWE2YWZhYjYzMTI1MTUwMWY4YTE2ODhhMTMxNQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTYXQgSnVsIDI1IDIyOjM1OjU4IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXRsaW5rL3NwZWNzL3J0LXJvdXRlLnlhbWwgYi9Eb2N1bWVudGF0aW9uL25ldGxpbmsvc3BlY3MvcnQtcm91dGUueWFtbAppbmRleCAzMzE5NWRiOTY3NDZjNi4uMjM0ZjUwMmZiMzVkOWMgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vbmV0bGluay9zcGVjcy9ydC1yb3V0ZS55YW1sCiYjNDM7JiM0MzsmIzQzOyBiL0RvY3VtZW50YXRpb24vbmV0bGluay9zcGVjcy9ydC1yb3V0ZS55YW1sCkBAIC03OCw2ICYjNDM7NzgsMTUgQEAgZGVmaW5pdGlvbnM6CiAgICAgICAtCiAgICAgICAgIG5hbWU6IHJ0YS11c2VkCiAgICAgICAgIHR5cGU6IHUzMgomIzQzOyAgLQomIzQzOyAgICBuYW1lOiBkZWwtcmVhc29uCiYjNDM7ICAgIHR5cGU6IGVudW0KJiM0MzsgICAgbmFtZS1wcmVmaXg6IHJ0YS1kZWwtcmVhc29uLQomIzQzOyAgICBlbnVtLW5hbWU6IHJ0YS1kZWwtcmVhc29uCiYjNDM7ICAgIGVudHJpZXM6CiYjNDM7ICAgICAgLSB1bnNwZWMKJiM0MzsgICAgICAtIGV4cGlyZWQKJiM0MzsgICAgICAtIHJhLXdpdGhkcmF3bgogCiBhdHRyaWJ1dGUtc2V0czoKICAgLQpAQCAtMTg1LDYgJiM0MzsxOTQsMTAgQEAgYXR0cmlidXRlLXNldHM6CiAgICAgICAgIHR5cGU6IHUzMgogICAgICAgICBieXRlLW9yZGVyOiBiaWctZW5kaWFuCiAgICAgICAgIGRpc3BsYXktaGludDogaGV4CiYjNDM7ICAgICAgLQomIzQzOyAgICAgICAgbmFtZTogZGVsLXJlYXNvbgomIzQzOyAgICAgICAgdHlwZTogdTMyCiYjNDM7ICAgICAgICBlbnVtOiBkZWwtcmVhc29uCiAgIC0KICAgICBuYW1lOiBtZXRyaWNzCiAgICAgbmFtZS1wcmVmaXg6IHJ0YXgtCkBAIC0yOTksNiAmIzQzOzMxMiw3IEBAIG9wZXJhdGlvbnM6CiAgICAgICAgICAgICAtIGRwb3J0CiAgICAgICAgICAgICAtIG5oLWlkCiAgICAgICAgICAgICAtIGZsb3dsYWJlbAomIzQzOyAgICAgICAgICAgIC0gZGVsLXJlYXNvbgogICAgICAgZHVtcDoKICAgICAgICAgcmVxdWVzdDoKICAgICAgICAgICB2YWx1ZTogMjYKQEAgLTMyMiwzICYjNDM7MzM2LDIyIEBAIG9wZXJhdGlvbnM6CiAgICAgICAgIHJlcXVlc3Q6CiAgICAgICAgICAgdmFsdWU6IDI1CiAgICAgICAgICAgYXR0cmlidXRlczogKmFsbC1yb3V0ZS1hdHRycwomIzQzOyAgICAtCiYjNDM7ICAgICAgbmFtZTogbmV3cm91dGUtbnRmCiYjNDM7ICAgICAgZG9jOiBOb3RpZmljYXRpb24gYWJvdXQgYSBjcmVhdGVkIHJvdXRlLgomIzQzOyAgICAgIHZhbHVlOiAyNAomIzQzOyAgICAgIG5vdGlmeTogZ2V0cm91dGUKJiM0MzsgICAgLQomIzQzOyAgICAgIG5hbWU6IGRlbHJvdXRlLW50ZgomIzQzOyAgICAgIGRvYzogTm90aWZpY2F0aW9uIGFib3V0IGEgZGVsZXRlZCByb3V0ZS4KJiM0MzsgICAgICB2YWx1ZTogMjUKJiM0MzsgICAgICBub3RpZnk6IGdldHJvdXRlCiYjNDM7CiYjNDM7bWNhc3QtZ3JvdXBzOgomIzQzOyAgbGlzdDoKJiM0MzsgICAgLQomIzQzOyAgICAgIG5hbWU6IHJ0bmxncnAtaXB2NC1yb3V0ZQomIzQzOyAgICAgIHZhbHVlOiA3CiYjNDM7ICAgIC0KJiM0MzsgICAgICBuYW1lOiBydG5sZ3JwLWlwdjYtcm91dGUKJiM0MzsgICAgICB2YWx1ZTogMTEKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2lwNl9maWIuaCBiL2luY2x1ZGUvbmV0L2lwNl9maWIuaAppbmRleCA5Y2QyN2UxYjliNjkyMy4uN2NhMGUyMTI0ZTc5NjMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L2lwNl9maWIuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL25ldC9pcDZfZmliLmgKQEAgLTQ2OCw3ICYjNDM7NDY4LDcgQEAgdm9pZCBmaWI2X2NsZWFuX2FsbF9za2lwX25vdGlmeShzdHJ1Y3QgbmV0ICpuZXQsCiAKIGludCBmaWI2X2FkZChzdHJ1Y3QgZmliNl9ub2RlICpyb290LCBzdHJ1Y3QgZmliNl9pbmZvICpydCwKIAkgICAgIHN0cnVjdCBubF9pbmZvICppbmZvLCBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spOwotaW50IGZpYjZfZGVsKHN0cnVjdCBmaWI2X2luZm8gKnJ0LCBzdHJ1Y3QgbmxfaW5mbyAqaW5mbyk7CiYjNDM7aW50IGZpYjZfZGVsKHN0cnVjdCBmaWI2X2luZm8gKnJ0LCBzdHJ1Y3QgbmxfaW5mbyAqaW5mbywgdTMyIGRlbF9yZWFzb24pOwogCiBzdGF0aWMgaW5saW5lCiB2b2lkIHJ0Nl9nZXRfcHJlZnNyYyhjb25zdCBzdHJ1Y3QgcnQ2X2luZm8gKnJ0LCBzdHJ1Y3QgaW42X2FkZHIgKmFkZHIpCkBAIC01MzEsNyAmIzQzOzUzMSw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBmaWI2X3J0X3VwZGF0ZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBmaWI2X2luZm8gKnJ0LAogfQogI2VuZGlmCiB2b2lkIGluZXQ2X3J0X25vdGlmeShpbnQgZXZlbnQsIHN0cnVjdCBmaWI2X2luZm8gKnJ0LCBzdHJ1Y3QgbmxfaW5mbyAqaW5mbywKLQkJICAgICB1bnNpZ25lZCBpbnQgZmxhZ3MpOwomIzQzOwkJICAgICB1bnNpZ25lZCBpbnQgZmxhZ3MsIHUzMiBkZWxfcmVhc29uKTsKIAogdm9pZCBmaWI2X2FnZV9leGNlcHRpb25zKHN0cnVjdCBmaWI2X2luZm8gKnJ0LCBzdHJ1Y3QgZmliNl9nY19hcmdzICpnY19hcmdzLAogCQkJIHVuc2lnbmVkIGxvbmcgbm93KTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2lwNl9yb3V0ZS5oIGIvaW5jbHVkZS9uZXQvaXA2X3JvdXRlLmgKaW5kZXggMDlmZmUwZjEzY2U3NTIuLjk4ZjE2ODRmZTM3OGNjIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9pcDZfcm91dGUuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL25ldC9pcDZfcm91dGUuaApAQCAtMTI4LDYgJiM0MzsxMjgsOCBAQCBpbnQgaXA2X3JvdXRlX2FkZChzdHJ1Y3QgZmliNl9jb25maWcgKmNmZywgZ2ZwX3QgZ2ZwX2ZsYWdzLAogaW50IGlwNl9pbnNfcnQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZmliNl9pbmZvICpmNmkpOwogI2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVjYpCiBpbnQgaXA2X2RlbF9ydChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBmaWI2X2luZm8gKmY2aSwgYm9vbCBza2lwX25vdGlmeSk7CiYjNDM7aW50IGlwNl9kZWxfcnRfcmVhc29uKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZpYjZfaW5mbyAqZjZpLCBib29sIHNraXBfbm90aWZ5LAomIzQzOwkJICAgICAgdTMyIGRlbF9yZWFzb24pOwogI2Vsc2UKIHN0YXRpYyBpbmxpbmUgaW50IGlwNl9kZWxfcnQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZmliNl9pbmZvICpmNmksCiAJCQkgICAgIGJvb2wgc2tpcF9ub3RpZnkpCmRpZmYgLS1naXQgYS9pbmNsdWRlL3VhcGkvbGludXgvcnRuZXRsaW5rLmggYi9pbmNsdWRlL3VhcGkvbGludXgvcnRuZXRsaW5rLmgKaW5kZXggMjcyNjVmZDMxZTVmYzkuLmZlMDBlNjI0ZjNjM2FhIDEwMDY0NAotLS0gYS9pbmNsdWRlL3VhcGkvbGludXgvcnRuZXRsaW5rLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS91YXBpL2xpbnV4L3J0bmV0bGluay5oCkBAIC0zOTksNiAmIzQzOzM5OSw3IEBAIGVudW0gcnRhdHRyX3R5cGVfdCB7CiAJUlRBX0RQT1JULAogCVJUQV9OSF9JRCwKIAlSVEFfRkxPV0xBQkVMLAomIzQzOwlSVEFfREVMX1JFQVNPTiwKIAlfX1JUQV9NQVgKIH07CiAKQEAgLTQwNyw2ICYjNDM7NDA4LDIyIEBAIGVudW0gcnRhdHRyX3R5cGVfdCB7CiAjZGVmaW5lIFJUTV9SVEEocikgICgoc3RydWN0IHJ0YXR0ciopKCgoY2hhciopKHIpKSAmIzQzOyBOTE1TR19BTElHTihzaXplb2Yoc3RydWN0IHJ0bXNnKSkpKQogI2RlZmluZSBSVE1fUEFZTE9BRChuKSBOTE1TR19QQVlMT0FEKG4sc2l6ZW9mKHN0cnVjdCBydG1zZykpCiAKJiM0MzsvKiBSVEFfREVMX1JFQVNPTjogd2h5IHRoZSBrZXJuZWwgZGVsZXRlZCB0aGUgcm91dGUuIHUzMi4KJiM0MzsgKiBFbWl0dGVkIG9ubHkgb24gUlRNX0RFTFJPVVRFIG5vdGlmaWNhdGlvbnMsIGFuZCBvbmx5IHdoZW4gdGhlIGRlbGV0aW9uCiYjNDM7ICogcGF0aCByZWNvcmRzIGEgY2F1c2UuIEFic2VuY2UgbWVhbnMgZWl0aGVyIGFuIG9sZGVyIGtlcm5lbCBvciBhCiYjNDM7ICogZGVsZXRpb24gcGF0aCB0aGF0IGRvZXMgbm90ICh5ZXQpIHJlY29yZCBpdHMgY2F1c2UgLSBjb25zdW1lcnMgbXVzdAomIzQzOyAqIHRyZWF0ICYjMzQ7YWJzZW50JiMzNDsgYW5kICYjMzQ7dW5zcGVjJiMzNDsgaWRlbnRpY2FsbHkuIE5ldyBjYXVzZXMgbWF5IGJlIGFwcGVuZGVkLgomIzQzOyAqIEN1cnJlbnRseSBvbmx5IElQdjYgZGVsZXRpb24gcGF0aHMgcmVjb3JkIGEgY2F1c2UuCiYjNDM7ICovCiYjNDM7ZW51bSBydGFfZGVsX3JlYXNvbiB7CiYjNDM7CVJUQV9ERUxfUkVBU09OX1VOU1BFQywJCS8qIGNhdXNlIG5vdCByZWNvcmRlZCAqLwomIzQzOwlSVEFfREVMX1JFQVNPTl9FWFBJUkVELAkJLyogUlRGX0VYUElSRVMgbGlmZXRpbWUgcmFuIG91dCAoR0MpICovCiYjNDM7CVJUQV9ERUxfUkVBU09OX1JBX1dJVEhEUkFXTiwJLyogemVyby1saWZldGltZSBSQSAvIFBJTyAvIFJJTyAqLwomIzQzOwlfX1JUQV9ERUxfUkVBU09OX01BWAomIzQzO307CiYjNDM7CiYjNDM7I2RlZmluZSBSVEFfREVMX1JFQVNPTl9NQVggKF9fUlRBX0RFTF9SRUFTT05fTUFYIC0gMSkKJiM0MzsKIC8qIFJUTV9NVUxUSVBBVEggLS0tIGFycmF5IG9mIHN0cnVjdCBydG5leHRob3AuCiAgKgogICogJiMzNDtzdHJ1Y3QgcnRuZXh0aG9wJiMzNDsgZGVzY3JpYmVzIGFsbCBuZWNlc3NhcnkgbmV4dGhvcCBpbmZvcm1hdGlvbiwKZGlmZiAtLWdpdCBhL25ldC9pcHY2L2FkZHJjb25mLmMgYi9uZXQvaXB2Ni9hZGRyY29uZi5jCmluZGV4IGYxZmU5ZWRlMWVkYjM3Li4xY2E5ZDgyYjU3MjFlNiAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvYWRkcmNvbmYuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2Ni9hZGRyY29uZi5jCkBAIC0yODc0LDcgJiM0MzsyODc0LDggQEAgdm9pZCBhZGRyY29uZl9wcmVmaXhfcmN2KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHU4ICpvcHQsIGludCBsZW4sIGJvb2wgc2xsYW8pCiAJCWlmIChydCkgewogCQkJLyogQXV0b2NvbmYgcHJlZml4IHJvdXRlICovCiAJCQlpZiAodmFsaWRfbGZ0ID09IDApIHsKLQkJCQlpcDZfZGVsX3J0KG5ldCwgcnQsIGZhbHNlKTsKJiM0MzsJCQkJaXA2X2RlbF9ydF9yZWFzb24obmV0LCBydCwgZmFsc2UsCiYjNDM7CQkJCQkJICBSVEFfREVMX1JFQVNPTl9SQV9XSVRIRFJBV04pOwogCQkJCXJ0ID0gTlVMTDsKIAkJCX0gZWxzZSB7CiAJCQkJdGFibGUgPSBydC0mZ3Q7ZmliNl90YWJsZTsKZGlmZiAtLWdpdCBhL25ldC9pcHY2L2lwNl9maWIuYyBiL25ldC9pcHY2L2lwNl9maWIuYwppbmRleCBhMTMwY2RmYWViZmJlZS4uMzJiOWEwMDk1NmEwOTIgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L2lwNl9maWIuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2Ni9pcDZfZmliLmMKQEAgLTEyODYsNyAmIzQzOzEyODYsOCBAQCBzdGF0aWMgaW50IGZpYjZfYWRkX3J0Mm5vZGUoc3RydWN0IGZpYjZfbm9kZSAqZm4sIHN0cnVjdCBmaWI2X2luZm8gKnJ0LAogCQlyY3VfYXNzaWduX3BvaW50ZXIocnQtJmd0O2ZpYjZfbm9kZSwgZm4pOwogCQlyY3VfYXNzaWduX3BvaW50ZXIoKmlucywgcnQpOwogCQlpZiAoIWluZm8tJmd0O3NraXBfbm90aWZ5KQotCQkJaW5ldDZfcnRfbm90aWZ5KFJUTV9ORVdST1VURSwgcnQsIGluZm8sIG5sZmxhZ3MpOwomIzQzOwkJCWluZXQ2X3J0X25vdGlmeShSVE1fTkVXUk9VVEUsIHJ0LCBpbmZvLCBubGZsYWdzLAomIzQzOwkJCQkJUlRBX0RFTF9SRUFTT05fVU5TUEVDKTsKIAkJaW5mby0mZ3Q7bmxfbmV0LSZndDtpcHY2LnJ0Nl9zdGF0cy0mZ3Q7ZmliX3J0X2VudHJpZXMmIzQzOyYjNDM7OwogCiAJCWlmICghKGZuLSZndDtmbl9mbGFncyAmYW1wOyBSVE5fUlRJTkZPKSkgewpAQCAtMTMxNyw3ICYjNDM7MTMxOCw4IEBAIHN0YXRpYyBpbnQgZmliNl9hZGRfcnQybm9kZShzdHJ1Y3QgZmliNl9ub2RlICpmbiwgc3RydWN0IGZpYjZfaW5mbyAqcnQsCiAJCXJ0LSZndDtmaWI2X25leHQgPSBpdGVyLSZndDtmaWI2X25leHQ7CiAJCXJjdV9hc3NpZ25fcG9pbnRlcigqaW5zLCBydCk7CiAJCWlmICghaW5mby0mZ3Q7c2tpcF9ub3RpZnkpCi0JCQlpbmV0Nl9ydF9ub3RpZnkoUlRNX05FV1JPVVRFLCBydCwgaW5mbywgTkxNX0ZfUkVQTEFDRSk7CiYjNDM7CQkJaW5ldDZfcnRfbm90aWZ5KFJUTV9ORVdST1VURSwgcnQsIGluZm8sIE5MTV9GX1JFUExBQ0UsCiYjNDM7CQkJCQlSVEFfREVMX1JFQVNPTl9VTlNQRUMpOwogCQlpZiAoIShmbi0mZ3Q7Zm5fZmxhZ3MgJmFtcDsgUlROX1JUSU5GTykpIHsKIAkJCWluZm8tJmd0O25sX25ldC0mZ3Q7aXB2Ni5ydDZfc3RhdHMtJmd0O2ZpYl9yb3V0ZV9ub2RlcyYjNDM7JiM0Mzs7CiAJCQlmbi0mZ3Q7Zm5fZmxhZ3MgfD0gUlROX1JUSU5GTzsKQEAgLTE5NjYsNyAmIzQzOzE5NjgsOCBAQCBzdGF0aWMgc3RydWN0IGZpYjZfbm9kZSAqZmliNl9yZXBhaXJfdHJlZShzdHJ1Y3QgbmV0ICpuZXQsCiB9CiAKIHN0YXRpYyB2b2lkIGZpYjZfZGVsX3JvdXRlKHN0cnVjdCBmaWI2X3RhYmxlICp0YWJsZSwgc3RydWN0IGZpYjZfbm9kZSAqZm4sCi0JCQkgICBzdHJ1Y3QgZmliNl9pbmZvIF9fcmN1ICoqcnRwLCBzdHJ1Y3QgbmxfaW5mbyAqaW5mbykKJiM0MzsJCQkgICBzdHJ1Y3QgZmliNl9pbmZvIF9fcmN1ICoqcnRwLCBzdHJ1Y3QgbmxfaW5mbyAqaW5mbywKJiM0MzsJCQkgICB1MzIgZGVsX3JlYXNvbikKIHsKIAlzdHJ1Y3QgZmliNl9pbmZvICpsZWFmLCAqcmVwbGFjZV9ydCA9IE5VTEw7CiAJc3RydWN0IGZpYjZfd2Fsa2VyICp3OwpAQCAtMjA1NSwxMyAmIzQzOzIwNTgsMTMgQEAgc3RhdGljIHZvaWQgZmliNl9kZWxfcm91dGUoc3RydWN0IGZpYjZfdGFibGUgKnRhYmxlLCBzdHJ1Y3QgZmliNl9ub2RlICpmbiwKIAkJCWNhbGxfZmliNl9lbnRyeV9ub3RpZmllcnNfcmVwbGFjZShuZXQsIHJlcGxhY2VfcnQpOwogCX0KIAlpZiAoIWluZm8tJmd0O3NraXBfbm90aWZ5KQotCQlpbmV0Nl9ydF9ub3RpZnkoUlRNX0RFTFJPVVRFLCBydCwgaW5mbywgMCk7CiYjNDM7CQlpbmV0Nl9ydF9ub3RpZnkoUlRNX0RFTFJPVVRFLCBydCwgaW5mbywgMCwgZGVsX3JlYXNvbik7CiAKIAlmaWI2X2luZm9fcmVsZWFzZShydCk7CiB9CiAKIC8qIE5lZWQgdG8gb3duIHRhYmxlLSZndDt0YjZfbG9jayAqLwotaW50IGZpYjZfZGVsKHN0cnVjdCBmaWI2X2luZm8gKnJ0LCBzdHJ1Y3QgbmxfaW5mbyAqaW5mbykKJiM0MztpbnQgZmliNl9kZWwoc3RydWN0IGZpYjZfaW5mbyAqcnQsIHN0cnVjdCBubF9pbmZvICppbmZvLCB1MzIgZGVsX3JlYXNvbikKIHsKIAlzdHJ1Y3QgbmV0ICpuZXQgPSBpbmZvLSZndDtubF9uZXQ7CiAJc3RydWN0IGZpYjZfaW5mbyBfX3JjdSAqKnJ0cDsKQEAgLTIwOTAsNyAmIzQzOzIwOTMsNyBAQCBpbnQgZmliNl9kZWwoc3RydWN0IGZpYjZfaW5mbyAqcnQsIHN0cnVjdCBubF9pbmZvICppbmZvKQogCQlpZiAocnQgPT0gY3VyKSB7CiAJCQlpZiAoZmliNl9yZXF1aXJlc19zcmMoY3VyKSkKIAkJCQlmaWI2X3JvdXRlc19yZXF1aXJlX3NyY19kZWMoaW5mby0mZ3Q7bmxfbmV0KTsKLQkJCWZpYjZfZGVsX3JvdXRlKHRhYmxlLCBmbiwgcnRwLCBpbmZvKTsKJiM0MzsJCQlmaWI2X2RlbF9yb3V0ZSh0YWJsZSwgZm4sIHJ0cCwgaW5mbywgZGVsX3JlYXNvbik7CiAJCQlyZXR1cm4gMDsKIAkJfQogCQlydHBfbmV4dCA9ICZhbXA7Y3VyLSZndDtmaWI2X25leHQ7CkBAIC0yMjUyLDcgJiM0MzsyMjU1LDcgQEAgc3RhdGljIGludCBmaWI2X2NsZWFuX25vZGUoc3RydWN0IGZpYjZfd2Fsa2VyICp3KQogCQlyZXMgPSBjLSZndDtmdW5jKHJ0LCBjLSZndDthcmcpOwogCQlpZiAocmVzID09IC0xKSB7CiAJCQl3LSZndDtsZWFmID0gcnQ7Ci0JCQlyZXMgPSBmaWI2X2RlbChydCwgJmFtcDtpbmZvKTsKJiM0MzsJCQlyZXMgPSBmaWI2X2RlbChydCwgJmFtcDtpbmZvLCBSVEFfREVMX1JFQVNPTl9VTlNQRUMpOwogCQkJaWYgKHJlcykgewogI2lmIFJUNl9ERUJVRyAmZ3Q7PSAyCiAJCQkJcHJfZGVidWcoJiMzNDslczogZGVsIGZhaWxlZDogcnQ9JXBAJXAgZXJyPSVkXG4mIzM0OywKQEAgLTI0MDAsNyAmIzQzOzI0MDMsNyBAQCBzdGF0aWMgdm9pZCBmaWI2X2djX3RhYmxlKHN0cnVjdCBuZXQgKm5ldCwKIAogCWhsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocnQsIG4sICZhbXA7dGI2LSZndDt0YjZfZ2NfaGxpc3QsIGdjX2xpbmspCiAJCWlmIChmaWI2X2FnZShydCwgZ2NfYXJncykgPT0gLTEpCi0JCQlmaWI2X2RlbChydCwgJmFtcDtpbmZvKTsKJiM0MzsJCQlmaWI2X2RlbChydCwgJmFtcDtpbmZvLCBSVEFfREVMX1JFQVNPTl9FWFBJUkVEKTsKIH0KIAogc3RhdGljIHZvaWQgZmliNl9nY19hbGwoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZmliNl9nY19hcmdzICpnY19hcmdzKQpkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvbmRpc2MuYyBiL25ldC9pcHY2L25kaXNjLmMKaW5kZXggZjg2N2VjOGQzZDkwNTEuLmMzNTM3ZmMwZWM2M2IxIDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9uZGlzYy5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY2L25kaXNjLmMKQEAgLTEzNjEsNyAmIzQzOzEzNjEsOSBAQCBzdGF0aWMgZW51bSBza2JfZHJvcF9yZWFzb24gbmRpc2Nfcm91dGVyX2Rpc2NvdmVyeShzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogCWRlZnJ0cl91c3JfbWV0cmljID0gaW42X2Rldi0mZ3Q7Y25mLnJhX2RlZnJ0cl9tZXRyaWM7CiAJLyogZGVsZXRlIHRoZSByb3V0ZSBpZiBsaWZldGltZSBpcyAwIG9yIGlmIG1ldHJpYyBuZWVkcyBjaGFuZ2UgKi8KIAlpZiAocnQgJmFtcDsmYW1wOyAobGlmZXRpbWUgPT0gMCB8fCBydC0mZ3Q7ZmliNl9tZXRyaWMgIT0gZGVmcnRyX3Vzcl9tZXRyaWMpKSB7Ci0JCWlwNl9kZWxfcnQobmV0LCBydCwgZmFsc2UpOwomIzQzOwkJaXA2X2RlbF9ydF9yZWFzb24obmV0LCBydCwgZmFsc2UsCiYjNDM7CQkJCSAgbGlmZXRpbWUgPT0gMCA/IFJUQV9ERUxfUkVBU09OX1JBX1dJVEhEUkFXTiA6CiYjNDM7CQkJCQkJICBSVEFfREVMX1JFQVNPTl9VTlNQRUMpOwogCQlydCA9IE5VTEw7CiAJfQogCkBAIC0xMzk2LDcgJiM0MzsxMzk4LDggQEAgc3RhdGljIGVudW0gc2tiX2Ryb3BfcmVhc29uIG5kaXNjX3JvdXRlcl9kaXNjb3Zlcnkoc3RydWN0IHNrX2J1ZmYgKnNrYikKIAkJCS5ubF9uZXQgPSBuZXQsCiAJCX07CiAJCXJ0LSZndDtmaWI2X2ZsYWdzID0gKHJ0LSZndDtmaWI2X2ZsYWdzICZhbXA7IH5SVEZfUFJFRl9NQVNLKSB8IFJURl9QUkVGKHByZWYpOwotCQlpbmV0Nl9ydF9ub3RpZnkoUlRNX05FV1JPVVRFLCBydCwgJmFtcDtubGluZm8sIE5MTV9GX1JFUExBQ0UpOwomIzQzOwkJaW5ldDZfcnRfbm90aWZ5KFJUTV9ORVdST1VURSwgcnQsICZhbXA7bmxpbmZvLCBOTE1fRl9SRVBMQUNFLAomIzQzOwkJCQlSVEFfREVMX1JFQVNPTl9VTlNQRUMpOwogCX0KIAogCWlmIChydCkgewpkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvcm91dGUuYyBiL25ldC9pcHY2L3JvdXRlLmMKaW5kZXggYTEzMDEzMzRkYTQ4YzAuLmU4ZWQ5NWRjNTY2NWVlIDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9yb3V0ZS5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY2L3JvdXRlLmMKQEAgLTExMSw3ICYjNDM7MTExLDcgQEAgc3RhdGljIGludCBydDZfZmlsbF9ub2RlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkJCSBzdHJ1Y3QgZmliNl9pbmZvICpydCwgc3RydWN0IGRzdF9lbnRyeSAqZHN0LAogCQkJIHN0cnVjdCBpbjZfYWRkciAqZGVzdCwgc3RydWN0IGluNl9hZGRyICpzcmMsCiAJCQkgaW50IGlpZiwgaW50IHR5cGUsIHUzMiBwb3J0aWQsIHUzMiBzZXEsCi0JCQkgdW5zaWduZWQgaW50IGZsYWdzKTsKJiM0MzsJCQkgdW5zaWduZWQgaW50IGZsYWdzLCB1MzIgZGVsX3JlYXNvbik7CiBzdGF0aWMgc3RydWN0IHJ0Nl9pbmZvICpydDZfZmluZF9jYWNoZWRfcnQoY29uc3Qgc3RydWN0IGZpYjZfcmVzdWx0ICpyZXMsCiAJCQkJCSAgIGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqZGFkZHIsCiAJCQkJCSAgIGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqc2FkZHIpOwpAQCAtMTAyMCw3ICYjNDM7MTAyMCw3IEBAIGludCBydDZfcm91dGVfcmN2KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHU4ICpvcHQsIGludCBsZW4sCiAJCQkJCWd3YWRkciwgZGV2KTsKIAogCWlmIChydCAmYW1wOyZhbXA7ICFsaWZldGltZSkgewotCQlpcDZfZGVsX3J0KG5ldCwgcnQsIGZhbHNlKTsKJiM0MzsJCWlwNl9kZWxfcnRfcmVhc29uKG5ldCwgcnQsIGZhbHNlLCBSVEFfREVMX1JFQVNPTl9SQV9XSVRIRFJBV04pOwogCQlydCA9IE5VTEw7CiAJfQogCkBAIC0zOTczLDcgJiM0MzszOTczLDggQEAgaW50IGlwNl9yb3V0ZV9hZGQoc3RydWN0IGZpYjZfY29uZmlnICpjZmcsIGdmcF90IGdmcF9mbGFncywKIAlyZXR1cm4gZXJyOwogfQogCi1zdGF0aWMgaW50IF9faXA2X2RlbF9ydChzdHJ1Y3QgZmliNl9pbmZvICpydCwgc3RydWN0IG5sX2luZm8gKmluZm8pCiYjNDM7c3RhdGljIGludCBfX2lwNl9kZWxfcnQoc3RydWN0IGZpYjZfaW5mbyAqcnQsIHN0cnVjdCBubF9pbmZvICppbmZvLAomIzQzOwkJCXUzMiBkZWxfcmVhc29uKQogewogCXN0cnVjdCBuZXQgKm5ldCA9IGluZm8tJmd0O25sX25ldDsKIAlzdHJ1Y3QgZmliNl90YWJsZSAqdGFibGU7CkBAIC0zOTg2LDcgJiM0MzszOTg3LDcgQEAgc3RhdGljIGludCBfX2lwNl9kZWxfcnQoc3RydWN0IGZpYjZfaW5mbyAqcnQsIHN0cnVjdCBubF9pbmZvICppbmZvKQogCiAJdGFibGUgPSBydC0mZ3Q7ZmliNl90YWJsZTsKIAlzcGluX2xvY2tfYmgoJmFtcDt0YWJsZS0mZ3Q7dGI2X2xvY2spOwotCWVyciA9IGZpYjZfZGVsKHJ0LCBpbmZvKTsKJiM0MzsJZXJyID0gZmliNl9kZWwocnQsIGluZm8sIGRlbF9yZWFzb24pOwogCXNwaW5fdW5sb2NrX2JoKCZhbXA7dGFibGUtJmd0O3RiNl9sb2NrKTsKIAogb3V0OgpAQCAtMzk5NCwxNCAmIzQzOzM5OTUsMjAgQEAgc3RhdGljIGludCBfX2lwNl9kZWxfcnQoc3RydWN0IGZpYjZfaW5mbyAqcnQsIHN0cnVjdCBubF9pbmZvICppbmZvKQogCXJldHVybiBlcnI7CiB9CiAKLWludCBpcDZfZGVsX3J0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZpYjZfaW5mbyAqcnQsIGJvb2wgc2tpcF9ub3RpZnkpCiYjNDM7aW50IGlwNl9kZWxfcnRfcmVhc29uKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZpYjZfaW5mbyAqcnQsIGJvb2wgc2tpcF9ub3RpZnksCiYjNDM7CQkgICAgICB1MzIgZGVsX3JlYXNvbikKIHsKIAlzdHJ1Y3QgbmxfaW5mbyBpbmZvID0gewogCQkubmxfbmV0ID0gbmV0LAotCQkuc2tpcF9ub3RpZnkgPSBza2lwX25vdGlmeQomIzQzOwkJLnNraXBfbm90aWZ5ID0gc2tpcF9ub3RpZnksCiAJfTsKIAotCXJldHVybiBfX2lwNl9kZWxfcnQocnQsICZhbXA7aW5mbyk7CiYjNDM7CXJldHVybiBfX2lwNl9kZWxfcnQocnQsICZhbXA7aW5mbywgZGVsX3JlYXNvbik7CiYjNDM7fQomIzQzOwomIzQzO2ludCBpcDZfZGVsX3J0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZpYjZfaW5mbyAqcnQsIGJvb2wgc2tpcF9ub3RpZnkpCiYjNDM7ewomIzQzOwlyZXR1cm4gaXA2X2RlbF9ydF9yZWFzb24obmV0LCBydCwgc2tpcF9ub3RpZnksIFJUQV9ERUxfUkVBU09OX1VOU1BFQyk7CiB9CiAKIHN0YXRpYyBpbnQgX19pcDZfZGVsX3J0X3NpYmxpbmdzKHN0cnVjdCBmaWI2X2luZm8gKnJ0LCBzdHJ1Y3QgZmliNl9jb25maWcgKmNmZykKQEAgLTQwMjgsNyAmIzQzOzQwMzUsOCBAQCBzdGF0aWMgaW50IF9faXA2X2RlbF9ydF9zaWJsaW5ncyhzdHJ1Y3QgZmliNl9pbmZvICpydCwgc3RydWN0IGZpYjZfY29uZmlnICpjZmcpCiAKIAkJCWlmIChydDZfZmlsbF9ub2RlKG5ldCwgc2tiLCBydCwgTlVMTCwKIAkJCQkJICBOVUxMLCBOVUxMLCAwLCBSVE1fREVMUk9VVEUsCi0JCQkJCSAgaW5mby0mZ3Q7cG9ydGlkLCBzZXEsIDApICZsdDsgMCkgewomIzQzOwkJCQkJICBpbmZvLSZndDtwb3J0aWQsIHNlcSwgMCwKJiM0MzsJCQkJCSAgUlRBX0RFTF9SRUFTT05fVU5TUEVDKSAmbHQ7IDApIHsKIAkJCQlrZnJlZV9za2Ioc2tiKTsKIAkJCQlza2IgPSBOVUxMOwogCQkJfSBlbHNlCkBAIC00MDY0LDEzICYjNDM7NDA3MiwxMyBAQCBzdGF0aWMgaW50IF9faXA2X2RlbF9ydF9zaWJsaW5ncyhzdHJ1Y3QgZmliNl9pbmZvICpydCwgc3RydWN0IGZpYjZfY29uZmlnICpjZmcpCiAJCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShzaWJsaW5nLCBuZXh0X3NpYmxpbmcsCiAJCQkJCSAmYW1wO3J0LSZndDtmaWI2X3NpYmxpbmdzLAogCQkJCQkgZmliNl9zaWJsaW5ncykgewotCQkJZXJyID0gZmliNl9kZWwoc2libGluZywgaW5mbyk7CiYjNDM7CQkJZXJyID0gZmliNl9kZWwoc2libGluZywgaW5mbywgUlRBX0RFTF9SRUFTT05fVU5TUEVDKTsKIAkJCWlmIChlcnIpCiAJCQkJZ290byBvdXRfdW5sb2NrOwogCQl9CiAJfQogCi0JZXJyID0gZmliNl9kZWwocnQsIGluZm8pOwomIzQzOwllcnIgPSBmaWI2X2RlbChydCwgaW5mbywgUlRBX0RFTF9SRUFTT05fVU5TUEVDKTsKIG91dF91bmxvY2s6CiAJc3Bpbl91bmxvY2tfYmgoJmFtcDt0YWJsZS0mZ3Q7dGI2X2xvY2spOwogb3V0X3B1dDoKQEAgLTQxOTYsNyAmIzQzOzQyMDQsOCBAQCBzdGF0aWMgaW50IGlwNl9yb3V0ZV9kZWwoc3RydWN0IGZpYjZfY29uZmlnICpjZmcsCiAJCQkJaWYgKCFmaWI2X2luZm9faG9sZF9zYWZlKHJ0KSkKIAkJCQkJY29udGludWU7CiAKLQkJCQllcnIgPSAgX19pcDZfZGVsX3J0KHJ0LCAmYW1wO2NmZy0mZ3Q7ZmNfbmxpbmZvKTsKJiM0MzsJCQkJZXJyID0gX19pcDZfZGVsX3J0KHJ0LCAmYW1wO2NmZy0mZ3Q7ZmNfbmxpbmZvLAomIzQzOwkJCQkJCSAgIFJUQV9ERUxfUkVBU09OX1VOU1BFQyk7CiAJCQkJYnJlYWs7CiAJCQl9CiAJCQlpZiAoY2ZnLSZndDtmY19uaF9pZCkKQEAgLTQyMTUsNyAmIzQzOzQyMjQsOCBAQCBzdGF0aWMgaW50IGlwNl9yb3V0ZV9kZWwoc3RydWN0IGZpYjZfY29uZmlnICpjZmcsCiAKIAkJCS8qIGlmIGdhdGV3YXkgd2FzIHNwZWNpZmllZCBvbmx5IGRlbGV0ZSB0aGUgb25lIGhvcCAqLwogCQkJaWYgKGNmZy0mZ3Q7ZmNfZmxhZ3MgJmFtcDsgUlRGX0dBVEVXQVkpCi0JCQkJZXJyID0gX19pcDZfZGVsX3J0KHJ0LCAmYW1wO2NmZy0mZ3Q7ZmNfbmxpbmZvKTsKJiM0MzsJCQkJZXJyID0gX19pcDZfZGVsX3J0KHJ0LCAmYW1wO2NmZy0mZ3Q7ZmNfbmxpbmZvLAomIzQzOwkJCQkJCSAgIFJUQV9ERUxfUkVBU09OX1VOU1BFQyk7CiAJCQllbHNlCiAJCQkJZXJyID0gX19pcDZfZGVsX3J0X3NpYmxpbmdzKHJ0LCBjZmcpOwogCQkJYnJlYWs7CkBAIC01MzgxLDcgJiM0Mzs1MzkxLDggQEAgc3RhdGljIHZvaWQgaXA2X3JvdXRlX21wYXRoX25vdGlmeShzdHJ1Y3QgZmliNl9pbmZvICpydCwKIAl9CiAKIAlpZiAocnQpCi0JCWluZXQ2X3J0X25vdGlmeShSVE1fTkVXUk9VVEUsIHJ0LCBpbmZvLCBubGZsYWdzKTsKJiM0MzsJCWluZXQ2X3J0X25vdGlmeShSVE1fTkVXUk9VVEUsIHJ0LCBpbmZvLCBubGZsYWdzLAomIzQzOwkJCQlSVEFfREVMX1JFQVNPTl9VTlNQRUMpOwogCiAJcmN1X3JlYWRfdW5sb2NrKCk7CiB9CkBAIC01NzM5LDYgJiM0Mzs1NzUwLDcgQEAgc3RhdGljIHNpemVfdCBydDZfbmxtc2dfc2l6ZShzdHJ1Y3QgZmliNl9pbmZvICpmNmkpCiAJICAgICAgICYjNDM7IG5sYV90b3RhbF9zaXplKHNpemVvZihzdHJ1Y3QgcnRhX2NhY2hlaW5mbykpCiAJICAgICAgICYjNDM7IG5sYV90b3RhbF9zaXplKFRDUF9DQV9OQU1FX01BWCkgLyogUlRBWF9DQ19BTEdPICovCiAJICAgICAgICYjNDM7IG5sYV90b3RhbF9zaXplKDEpIC8qIFJUQV9QUkVGICovCiYjNDM7CSAgICAgICAmIzQzOyBubGFfdG90YWxfc2l6ZSg0KSAvKiBSVEFfREVMX1JFQVNPTiAqLwogCSAgICAgICAmIzQzOyBuZXh0aG9wX2xlbjsKIH0KIApAQCAtNTc3NSw3ICYjNDM7NTc4Nyw3IEBAIHN0YXRpYyBpbnQgcnQ2X2ZpbGxfbm9kZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICpza2IsCiAJCQkgc3RydWN0IGZpYjZfaW5mbyAqcnQsIHN0cnVjdCBkc3RfZW50cnkgKmRzdCwKIAkJCSBzdHJ1Y3QgaW42X2FkZHIgKmRlc3QsIHN0cnVjdCBpbjZfYWRkciAqc3JjLAogCQkJIGludCBpaWYsIGludCB0eXBlLCB1MzIgcG9ydGlkLCB1MzIgc2VxLAotCQkJIHVuc2lnbmVkIGludCBmbGFncykKJiM0MzsJCQkgdW5zaWduZWQgaW50IGZsYWdzLCB1MzIgZGVsX3JlYXNvbikKIHsKIAlzdHJ1Y3QgcnQ2X2luZm8gKnJ0NiA9IGRzdF9ydDZfaW5mbyhkc3QpOwogCXN0cnVjdCBydDZrZXkgKnJ0Nl9kc3QsICpydDZfc3JjOwpAQCAtNTk1NCw2ICYjNDM7NTk2NiwxMCBAQCBzdGF0aWMgaW50IHJ0Nl9maWxsX25vZGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCWlmIChydG5sX3B1dF9jYWNoZWluZm8oc2tiLCBkc3QsIDAsIGV4cGlyZXMsIGRzdCA/IGRzdC0mZ3Q7ZXJyb3IgOiAwKSAmbHQ7IDApCiAJCWdvdG8gbmxhX3B1dF9mYWlsdXJlOwogCiYjNDM7CWlmICh0eXBlID09IFJUTV9ERUxST1VURSAmYW1wOyZhbXA7IGRlbF9yZWFzb24gIT0gUlRBX0RFTF9SRUFTT05fVU5TUEVDICZhbXA7JmFtcDsKJiM0MzsJICAgIG5sYV9wdXRfdTMyKHNrYiwgUlRBX0RFTF9SRUFTT04sIGRlbF9yZWFzb24pKQomIzQzOwkJZ290byBubGFfcHV0X2ZhaWx1cmU7CiYjNDM7CiAJaWYgKG5sYV9wdXRfdTgoc2tiLCBSVEFfUFJFRiwgSVBWNl9FWFRSQUNUX1BSRUYocnQ2X2ZsYWdzKSkpCiAJCWdvdG8gbmxhX3B1dF9mYWlsdXJlOwogCkBAIC02MDU1LDcgJiM0Mzs2MDcxLDggQEAgc3RhdGljIGludCBydDZfbmhfZHVtcF9leGNlcHRpb25zKHN0cnVjdCBmaWI2X25oICpuaCwgdm9pZCAqYXJnKQogCQkJCQkgICAgJmFtcDtydDZfZXgtJmd0O3J0NmktJmd0O2RzdCwgTlVMTCwgTlVMTCwgMCwKIAkJCQkJICAgIFJUTV9ORVdST1VURSwKIAkJCQkJICAgIE5FVExJTktfQ0IoZHVtcC0mZ3Q7Y2ItJmd0O3NrYikucG9ydGlkLAotCQkJCQkgICAgZHVtcC0mZ3Q7Y2ItJmd0O25saC0mZ3Q7bmxtc2dfc2VxLCB3LSZndDtmbGFncyk7CiYjNDM7CQkJCQkgICAgZHVtcC0mZ3Q7Y2ItJmd0O25saC0mZ3Q7bmxtc2dfc2VxLCB3LSZndDtmbGFncywKJiM0MzsJCQkJCSAgICBSVEFfREVMX1JFQVNPTl9VTlNQRUMpOwogCQkJaWYgKGVycikKIAkJCQlyZXR1cm4gZXJyOwogCkBAIC02MTAzLDcgJiM0Mzs2MTIwLDggQEAgaW50IHJ0Nl9kdW1wX3JvdXRlKHN0cnVjdCBmaWI2X2luZm8gKnJ0LCB2b2lkICpwX2FyZywgdW5zaWduZWQgaW50IHNraXApCiAJCQlpZiAocnQ2X2ZpbGxfbm9kZShuZXQsIGFyZy0mZ3Q7c2tiLCBydCwgTlVMTCwgTlVMTCwgTlVMTCwKIAkJCQkJICAwLCBSVE1fTkVXUk9VVEUsCiAJCQkJCSAgTkVUTElOS19DQihhcmctJmd0O2NiLSZndDtza2IpLnBvcnRpZCwKLQkJCQkJICBhcmctJmd0O2NiLSZndDtubGgtJmd0O25sbXNnX3NlcSwgZmxhZ3MpKSB7CiYjNDM7CQkJCQkgIGFyZy0mZ3Q7Y2ItJmd0O25saC0mZ3Q7bmxtc2dfc2VxLCBmbGFncywKJiM0MzsJCQkJCSAgUlRBX0RFTF9SRUFTT05fVU5TUEVDKSkgewogCQkJCXJldHVybiAwOwogCQkJfQogCQkJY291bnQmIzQzOyYjNDM7OwpAQCAtNjMzNiwxMiAmIzQzOzYzNTQsMTQgQEAgc3RhdGljIGludCBpbmV0Nl9ydG1fZ2V0cm91dGUoc3RydWN0IHNrX2J1ZmYgKmluX3NrYiwgc3RydWN0IG5sbXNnaGRyICpubGgsCiAJCQllcnIgPSBydDZfZmlsbF9ub2RlKG5ldCwgc2tiLCBmcm9tLCBOVUxMLCBOVUxMLCBOVUxMLAogCQkJCQkgICAgaWlmLCBSVE1fTkVXUk9VVEUsCiAJCQkJCSAgICBORVRMSU5LX0NCKGluX3NrYikucG9ydGlkLAotCQkJCQkgICAgbmxoLSZndDtubG1zZ19zZXEsIDApOwomIzQzOwkJCQkJICAgIG5saC0mZ3Q7bmxtc2dfc2VxLCAwLAomIzQzOwkJCQkJICAgIFJUQV9ERUxfUkVBU09OX1VOU1BFQyk7CiAJCWVsc2UKIAkJCWVyciA9IHJ0Nl9maWxsX25vZGUobmV0LCBza2IsIGZyb20sIGRzdCwgJmFtcDtmbDYuZGFkZHIsCiAJCQkJCSAgICAmYW1wO2ZsNi5zYWRkciwgaWlmLCBSVE1fTkVXUk9VVEUsCiAJCQkJCSAgICBORVRMSU5LX0NCKGluX3NrYikucG9ydGlkLAotCQkJCQkgICAgbmxoLSZndDtubG1zZ19zZXEsIDApOwomIzQzOwkJCQkJICAgIG5saC0mZ3Q7bmxtc2dfc2VxLCAwLAomIzQzOwkJCQkJICAgIFJUQV9ERUxfUkVBU09OX1VOU1BFQyk7CiAJfSBlbHNlIHsKIAkJZXJyID0gLUVORVRVTlJFQUNIOwogCX0KQEAgLTYzNTgsNyAmIzQzOzYzNzgsNyBAQCBzdGF0aWMgaW50IGluZXQ2X3J0bV9nZXRyb3V0ZShzdHJ1Y3Qgc2tfYnVmZiAqaW5fc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCwKIH0KIAogdm9pZCBpbmV0Nl9ydF9ub3RpZnkoaW50IGV2ZW50LCBzdHJ1Y3QgZmliNl9pbmZvICpydCwgc3RydWN0IG5sX2luZm8gKmluZm8sCi0JCSAgICAgdW5zaWduZWQgaW50IG5sbV9mbGFncykKJiM0MzsJCSAgICAgdW5zaWduZWQgaW50IG5sbV9mbGFncywgdTMyIGRlbF9yZWFzb24pCiB7CiAJc3RydWN0IG5ldCAqbmV0ID0gaW5mby0mZ3Q7bmxfbmV0OwogCXN0cnVjdCBza19idWZmICpza2I7CkBAIC02Mzc3LDcgJiM0Mzs2Mzk3LDggQEAgdm9pZCBpbmV0Nl9ydF9ub3RpZnkoaW50IGV2ZW50LCBzdHJ1Y3QgZmliNl9pbmZvICpydCwgc3RydWN0IG5sX2luZm8gKmluZm8sCiAJCWdvdG8gZXJyb3V0OwogCiAJZXJyID0gcnQ2X2ZpbGxfbm9kZShuZXQsIHNrYiwgcnQsIE5VTEwsIE5VTEwsIE5VTEwsIDAsCi0JCQkgICAgZXZlbnQsIGluZm8tJmd0O3BvcnRpZCwgc2VxLCBubG1fZmxhZ3MpOwomIzQzOwkJCSAgICBldmVudCwgaW5mby0mZ3Q7cG9ydGlkLCBzZXEsIG5sbV9mbGFncywKJiM0MzsJCQkgICAgZGVsX3JlYXNvbik7CiAJaWYgKGVyciAmbHQ7IDApIHsKIAkJa2ZyZWVfc2tiKHNrYik7CiAJCS8qIC1FTVNHU0laRSBpbXBsaWVzIG5lZWRlZCBzcGFjZSBncmV3IHVuZGVyIHVzLiAqLwpAQCAtNjQxMCw3ICYjNDM7NjQzMSw4IEBAIHZvaWQgZmliNl9ydF91cGRhdGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZmliNl9pbmZvICpydCwKIAkJZ290byBlcnJvdXQ7CiAKIAllcnIgPSBydDZfZmlsbF9ub2RlKG5ldCwgc2tiLCBydCwgTlVMTCwgTlVMTCwgTlVMTCwgMCwKLQkJCSAgICBSVE1fTkVXUk9VVEUsIGluZm8tJmd0O3BvcnRpZCwgc2VxLCBOTE1fRl9SRVBMQUNFKTsKJiM0MzsJCQkgICAgUlRNX05FV1JPVVRFLCBpbmZvLSZndDtwb3J0aWQsIHNlcSwgTkxNX0ZfUkVQTEFDRSwKJiM0MzsJCQkgICAgUlRBX0RFTF9SRUFTT05fVU5TUEVDKTsKIAlpZiAoZXJyICZsdDsgMCkgewogCQkvKiAtRU1TR1NJWkUgaW1wbGllcyBCVUcgaW4gcnQ2X25sbXNnX3NpemUoKSAqLwogCQlXQVJOX09OKGVyciA9PSAtRU1TR1NJWkUpOwpAQCAtNjQ2Myw3ICYjNDM7NjQ4NSw3IEBAIHZvaWQgZmliNl9pbmZvX2h3X2ZsYWdzX3NldChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBmaWI2X2luZm8gKmY2aSwKIAl9CiAKIAllcnIgPSBydDZfZmlsbF9ub2RlKG5ldCwgc2tiLCBmNmksIE5VTEwsIE5VTEwsIE5VTEwsIDAsIFJUTV9ORVdST1VURSwgMCwKLQkJCSAgICAwLCAwKTsKJiM0MzsJCQkgICAgMCwgMCwgUlRBX0RFTF9SRUFTT05fVU5TUEVDKTsKIAlpZiAoZXJyICZsdDsgMCkgewogCQkvKiAtRU1TR1NJWkUgaW1wbGllcyBCVUcgaW4gcnQ2X25sbXNnX3NpemUoKSAqLwogCQlXQVJOX09OKGVyciA9PSAtRU1TR1NJWkUpOwpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2xpYi9weS9fX2luaXRfXy5weSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9saWIvcHkvX19pbml0X18ucHkKaW5kZXggZTU4YmRiZGM1OGVlYWQuLjM0OTM1ODg2YjZhZGZlIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbGliL3B5L19faW5pdF9fLnB5CiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9saWIvcHkvX19pbml0X18ucHkKQEAgLTE3LDcgJiM0MzsxNyw3IEBAIGZyb20gLnV0aWxzIGltcG9ydCBDbWRFeGl0RmFpbHVyZSwgZmRfcmVhZF90aW1lb3V0LCBjbWQsIGJrZywgZGVmZXIsIFwKICAgICB3YWl0X2ZpbGUsIHRvb2wsIHRjCiBmcm9tIC5icGYgaW1wb3J0IGJwZl9tYXBfc2V0LCBicGZfbWFwX2R1bXAsIGJwZl9wcm9nX21hcF9pZHMKIGZyb20gLnlubCBpbXBvcnQgTmxFcnJvciwgTmxjdHJsRmFtaWx5LCBZbmxGYW1pbHksIFwKLSAgICBFdGh0b29sRmFtaWx5LCBOZXRkZXZGYW1pbHksIFJ0bmxGYW1pbHksIFJ0bmxBZGRyRmFtaWx5CiYjNDM7ICAgIEV0aHRvb2xGYW1pbHksIE5ldGRldkZhbWlseSwgUnRubEZhbWlseSwgUnRubEFkZHJGYW1pbHksIFJ0bmxSb3V0ZUZhbWlseQogZnJvbSAueW5sIGltcG9ydCBOZXRzaGFwZXJGYW1pbHksIERldmxpbmtGYW1pbHksIFBTUEZhbWlseSwgTmV0bGluawogCiBfX2FsbF9fID0gWyYjMzQ7S1NSQyYjMzQ7LApAQCAtMzQsNCAmIzQzOzM0LDQgQEAgX19hbGxfXyA9IFsmIzM0O0tTUkMmIzM0OywKICAgICAgICAgICAgJiMzNDtOZXRkZXZTaW0mIzM0OywgJiMzNDtOZXRkZXZTaW1EZXYmIzM0OywKICAgICAgICAgICAgJiMzNDtOZXRzaGFwZXJGYW1pbHkmIzM0OywgJiMzNDtEZXZsaW5rRmFtaWx5JiMzNDssICYjMzQ7UFNQRmFtaWx5JiMzNDssICYjMzQ7TmxFcnJvciYjMzQ7LAogICAgICAgICAgICAmIzM0O1lubEZhbWlseSYjMzQ7LCAmIzM0O0V0aHRvb2xGYW1pbHkmIzM0OywgJiMzNDtOZXRkZXZGYW1pbHkmIzM0OywgJiMzNDtSdG5sRmFtaWx5JiMzNDssCi0gICAgICAgICAgICYjMzQ7TmxjdHJsRmFtaWx5JiMzNDssICYjMzQ7UnRubEFkZHJGYW1pbHkmIzM0OywgJiMzNDtOZXRsaW5rJiMzNDtdCiYjNDM7ICAgICAgICAgICAmIzM0O05sY3RybEZhbWlseSYjMzQ7LCAmIzM0O1J0bmxBZGRyRmFtaWx5JiMzNDssICYjMzQ7UnRubFJvdXRlRmFtaWx5JiMzNDssICYjMzQ7TmV0bGluayYjMzQ7XQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2xpYi9weS95bmwucHkgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbGliL3B5L3lubC5weQppbmRleCAyZTU2NzA2MmFhNmNjZS4uMDhkZWZmNzU2ZjI5YjAgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9saWIvcHkveW5sLnB5CiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9saWIvcHkveW5sLnB5CkBAIC0yOSw3ICYjNDM7MjksNyBAQCBleGNlcHQgTW9kdWxlTm90Rm91bmRFcnJvciBhcyBlOgogCiBfX2FsbF9fID0gWwogICAgICYjMzQ7TmxFcnJvciYjMzQ7LCAmIzM0O05sUG9saWN5JiMzNDssICYjMzQ7TmV0bGluayYjMzQ7LCAmIzM0O1lubEZhbWlseSYjMzQ7LCAmIzM0O1NQRUNfUEFUSCYjMzQ7LAotICAgICYjMzQ7RXRodG9vbEZhbWlseSYjMzQ7LCAmIzM0O1J0bmxGYW1pbHkmIzM0OywgJiMzNDtSdG5sQWRkckZhbWlseSYjMzQ7LAomIzQzOyAgICAmIzM0O0V0aHRvb2xGYW1pbHkmIzM0OywgJiMzNDtSdG5sRmFtaWx5JiMzNDssICYjMzQ7UnRubEFkZHJGYW1pbHkmIzM0OywgJiMzNDtSdG5sUm91dGVGYW1pbHkmIzM0OywKICAgICAmIzM0O05ldGRldkZhbWlseSYjMzQ7LCAmIzM0O05ldHNoYXBlckZhbWlseSYjMzQ7LCAmIzM0O05sY3RybEZhbWlseSYjMzQ7LCAmIzM0O0RldmxpbmtGYW1pbHkmIzM0OywKICAgICAmIzM0O1BTUEZhbWlseSYjMzQ7LAogXQpAQCAtNTQsNiAmIzQzOzU0LDExIEBAIGNsYXNzIFJ0bmxBZGRyRmFtaWx5KFlubEZhbWlseSk6CiAgICAgICAgIHN1cGVyKCkuX19pbml0X18oKFNQRUNfUEFUSCAvIFBhdGgoJiMzOTtydC1hZGRyLnlhbWwmIzM5OykpLmFzX3Bvc2l4KCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgc2NoZW1hPSYjMzk7JiMzOTssIHJlY3Zfc2l6ZT1yZWN2X3NpemUpCiAKJiM0MztjbGFzcyBSdG5sUm91dGVGYW1pbHkoWW5sRmFtaWx5KToKJiM0MzsgICAgZGVmIF9faW5pdF9fKHNlbGYsIHJlY3Zfc2l6ZT0wKToKJiM0MzsgICAgICAgIHN1cGVyKCkuX19pbml0X18oKFNQRUNfUEFUSCAvIFBhdGgoJiMzOTtydC1yb3V0ZS55YW1sJiMzOTspKS5hc19wb3NpeCgpLAomIzQzOyAgICAgICAgICAgICAgICAgICAgICAgICBzY2hlbWE9JiMzOTsmIzM5OywgcmVjdl9zaXplPXJlY3Zfc2l6ZSkKJiM0MzsKIGNsYXNzIE5ldGRldkZhbWlseShZbmxGYW1pbHkpOgogICAgIGRlZiBfX2luaXRfXyhzZWxmLCByZWN2X3NpemU9MCk6CiAgICAgICAgIHN1cGVyKCkuX19pbml0X18oKFNQRUNfUEFUSCAvIFBhdGgoJiMzOTtuZXRkZXYueWFtbCYjMzk7KSkuYXNfcG9zaXgoKSwKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9ydG5ldGxpbmsucHkgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvcnRuZXRsaW5rLnB5CmluZGV4IDBjNjdjN2MwMGQ4NDFjLi5mNzRjY2Q1YzJkMTNhYSAxMDA3NTUKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3J0bmV0bGluay5weQomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvcnRuZXRsaW5rLnB5CkBAIC01LDcgJiM0Mzs1LDggQEAgaW1wb3J0IHNvY2tldAogaW1wb3J0IHN0cnVjdAogaW1wb3J0IHRpbWUKIGZyb20gbGliLnB5IGltcG9ydCBia2csIGlwLCBrc2Z0X2V4aXQsIGtzZnRfcnVuLCBrc2Z0X2VxLCBrc2Z0X2dlLCBrc2Z0X3RydWUsIEtzZnRTa2lwRXgKLWZyb20gbGliLnB5IGltcG9ydCBDbWRFeGl0RmFpbHVyZSwgTmV0TlMsIE5ldE5TRW50ZXIsIFJ0bmxBZGRyRmFtaWx5CiYjNDM7ZnJvbSBsaWIucHkgaW1wb3J0IGtzZnRfbm90X2luLCBrc2Z0X25vdF9ub25lCiYjNDM7ZnJvbSBsaWIucHkgaW1wb3J0IENtZEV4aXRGYWlsdXJlLCBOZXROUywgTmV0TlNFbnRlciwgUnRubEFkZHJGYW1pbHksIFJ0bmxSb3V0ZUZhbWlseQogCiBJUFY0X0FMTF9IT1NUU19NVUxUSUNBU1QgPSBiJiMzOTtceGUwXHgwMFx4MDBceDAxJiMzOTsKIElQVjRfVEVTVF9NVUxUSUNBU1QgPSBiJiMzOTtceGVmXHgwMVx4MDFceDAxJiMzOTsKQEAgLTEzNCw4ICYjNDM7MTM1LDE4NCBAQCBkZWYgaXB2NF9kZXZjb25mX25vdGlmeSgpIC0mZ3Q7IE5vbmU6CiAgICAga3NmdF90cnVlKGYmIzM0O2luZXQge2lmbmFtZX0gZm9yd2FyZGluZyBvbiYjMzQ7IGluIGNtZF9vYmouc3Rkb3V0LAogICAgICAgICAgICAgICBmJiMzNDtObyAmIzM5O2ZvcndhcmRpbmcgb24mIzM5OyBub3RpZmljaWF0aW9uIGZvdW5kIGZvciBpbnRlcmZhY2Uge2lmbmFtZX0mIzM0OykKIAomIzQzO2RlZiBfcnRubF9yb3V0ZV9zdWJzY3JpYmUobnMpOgomIzQzOyAgICB3aXRoIE5ldE5TRW50ZXIoc3RyKG5zKSk6CiYjNDM7ICAgICAgICBydG5sID0gUnRubFJvdXRlRmFtaWx5KCkKJiM0MzsgICAgcnRubC5udGZfc3Vic2NyaWJlKCYjMzQ7cnRubGdycC1pcHY2LXJvdXRlJiMzNDspCiYjNDM7ICAgIHJldHVybiBydG5sCiYjNDM7CiYjNDM7CiYjNDM7ZGVmIF93YWl0X3JvdXRlX250ZihydG5sLCBuYW1lLCBkc3RfbGVuLCBkc3Q9Tm9uZSwgZGVhZGxpbmU9MTApOgomIzQzOyAgICAmIzM0OyYjMzQ7JiMzNDtSZXR1cm4gdGhlIGF0dHJzIG9mIHRoZSBmaXJzdCBtYXRjaGluZyBub3RpZmljYXRpb24sIE5vbmUgb24gdGltZW91dC4mIzM0OyYjMzQ7JiMzNDsKJiM0MzsKJiM0MzsgICAgZm9yIG1zZyBpbiBydG5sLnBvbGxfbnRmKGR1cmF0aW9uPWRlYWRsaW5lKToKJiM0MzsgICAgICAgIGlmIG1zZ1smIzM5O25hbWUmIzM5O10gIT0gbmFtZToKJiM0MzsgICAgICAgICAgICBjb250aW51ZQomIzQzOyAgICAgICAgYXR0cnMgPSBtc2dbJiMzOTttc2cmIzM5O10KJiM0MzsgICAgICAgIGlmIGF0dHJzWyYjMzk7cnRtLWRzdC1sZW4mIzM5O10gIT0gZHN0X2xlbjoKJiM0MzsgICAgICAgICAgICBjb250aW51ZQomIzQzOyAgICAgICAgaWYgZHN0IGlzIG5vdCBOb25lIGFuZCBhdHRycy5nZXQoJiMzOTtkc3QmIzM5OykgIT0gZHN0OgomIzQzOyAgICAgICAgICAgIGNvbnRpbnVlCiYjNDM7ICAgICAgICByZXR1cm4gYXR0cnMKJiM0MzsgICAgcmV0dXJuIE5vbmUKJiM0MzsKJiM0MzsKJiM0MztkZWYgX2NvbGxlY3Rfcm91dGVfbnRmcyhydG5sLCBuYW1lLCB3YW50LCBkZWFkbGluZT0xMCk6CiYjNDM7ICAgICYjMzQ7JiMzNDsmIzM0O0dhdGhlciBhdHRycyBvZiBtYXRjaGluZyBub3RpZmljYXRpb25zLCBrZXllZCBieSAoZHN0X2xlbiwgZHN0KS4mIzM0OyYjMzQ7JiMzNDsKJiM0MzsKJiM0MzsgICAgc2VlbiA9IHt9CiYjNDM7ICAgIGZvciBtc2cgaW4gcnRubC5wb2xsX250ZihkdXJhdGlvbj1kZWFkbGluZSk6CiYjNDM7ICAgICAgICBpZiBtc2dbJiMzOTtuYW1lJiMzOTtdICE9IG5hbWU6CiYjNDM7ICAgICAgICAgICAgY29udGludWUKJiM0MzsgICAgICAgIGF0dHJzID0gbXNnWyYjMzk7bXNnJiMzOTtdCiYjNDM7ICAgICAgICBrZXkgPSAoYXR0cnNbJiMzOTtydG0tZHN0LWxlbiYjMzk7XSwgYXR0cnMuZ2V0KCYjMzk7ZHN0JiMzOTspKQomIzQzOyAgICAgICAgaWYga2V5IGluIHdhbnQ6CiYjNDM7ICAgICAgICAgICAgc2VlbltrZXldID0gYXR0cnMKJiM0MzsgICAgICAgICAgICBpZiBsZW4oc2VlbikgPT0gbGVuKHdhbnQpOgomIzQzOyAgICAgICAgICAgICAgICBicmVhawomIzQzOyAgICByZXR1cm4gc2VlbgomIzQzOwomIzQzOwomIzQzO2RlZiBfd3JpdGVfaXB2Nl9zeXNjdGwobmFtZSwgdmFsdWUpOgomIzQzOyAgICB3aXRoIG9wZW4oZiYjMzQ7L3Byb2Mvc3lzL25ldC9pcHY2L3tuYW1lfSYjMzQ7LCAmIzM0O3cmIzM0OykgYXMgZjoKJiM0MzsgICAgICAgIGYud3JpdGUoZiYjMzQ7e3ZhbHVlfVxuJiMzNDspCiYjNDM7CiYjNDM7CiYjNDM7ZGVmIGlwdjZfcm91dGVfZGVsX3JlYXNvbl9leHBpcmVkKCkgLSZndDsgTm9uZToKJiM0MzsgICAgJiMzNDsmIzM0OyYjMzQ7QW4gZXhwaXJlZCByb3V0ZSByZXBvcnRzIFJUQV9ERUxfUkVBU09OID09IGV4cGlyZWQuJiMzNDsmIzM0OyYjMzQ7CiYjNDM7CiYjNDM7ICAgIHdpdGggTmV0TlMoKSBhcyBuczoKJiM0MzsgICAgICAgIHJ0bmwgPSBfcnRubF9yb3V0ZV9zdWJzY3JpYmUobnMpCiYjNDM7ICAgICAgICB3aXRoIE5ldE5TRW50ZXIoc3RyKG5zKSk6CiYjNDM7ICAgICAgICAgICAgX3dyaXRlX2lwdjZfc3lzY3RsKCYjMzQ7cm91dGUvZ2NfaW50ZXJ2YWwmIzM0OywgMikKJiM0MzsgICAgICAgIGlwKCYjMzQ7bGluayBhZGQgbmFtZSBkdW1teTEgdHlwZSBkdW1teSYjMzQ7LCBucz1zdHIobnMpKQomIzQzOyAgICAgICAgaXAoJiMzNDtsaW5rIHNldCBkZXYgZHVtbXkxIHVwJiMzNDssIG5zPXN0cihucykpCiYjNDM7ICAgICAgICBpcCgmIzM0Oy02IHJvdXRlIGFkZCAyMDAxOmRiODoyOjovNjQgZGV2IGR1bW15MSBleHBpcmVzIDImIzM0OywgbnM9c3RyKG5zKSkKJiM0MzsKJiM0MzsgICAgICAgIGF0dHJzID0gX3dhaXRfcm91dGVfbnRmKHJ0bmwsICYjMzk7ZGVscm91dGUtbnRmJiMzOTssIDY0LCAmIzM5OzIwMDE6ZGI4OjI6OiYjMzk7LAomIzQzOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVhZGxpbmU9MTUpCiYjNDM7ICAgICAgICBrc2Z0X25vdF9ub25lKGF0dHJzLCAmIzM0O25vIFJUTV9ERUxST1VURSBmb3IgdGhlIGV4cGlyZWQgcm91dGUmIzM0OykKJiM0MzsgICAgICAgIGlmIGF0dHJzIGlzIG5vdCBOb25lOgomIzQzOyAgICAgICAgICAgIGtzZnRfZXEoYXR0cnMuZ2V0KCYjMzk7ZGVsLXJlYXNvbiYjMzk7KSwgJiMzOTtleHBpcmVkJiMzOTspCiYjNDM7CiYjNDM7CiYjNDM7ZGVmIF9zZW5kX3JhKHNvY2ssIGlmaW5kZXgsIGxpZmV0aW1lLCByaW89Tm9uZSwgcGlvPU5vbmUpOgomIzQzOyAgICAmIzM0OyYjMzQ7JiMzNDtUaGUga2VybmVsIGZpbGxzIGluIHRoZSBJQ01QdjYgY2hlY2tzdW0gb24gcmF3IElDTVB2NiBzb2NrZXRzLiYjMzQ7JiMzNDsmIzM0OwomIzQzOwomIzQzOyAgICAjIHR5cGUsIGNvZGUsIGNrc3VtLCBob3AgbGltaXQsIGZsYWdzLCByb3V0ZXIgbGlmZXRpbWUsCiYjNDM7ICAgICMgcmVhY2hhYmxlIHRpbWUsIHJldHJhbnMgdGltZXIKJiM0MzsgICAgcmEgPSBzdHJ1Y3QucGFjaygmIzM5OyFCQkhCQkhJSSYjMzk7LCAxMzQsIDAsIDAsIDY0LCAwLCBsaWZldGltZSwgMCwgMCkKJiM0MzsgICAgaWYgcmlvIGlzIG5vdCBOb25lOgomIzQzOyAgICAgICAgcHJlZml4LCBwbGVuLCByaW9fbGlmZXRpbWUgPSByaW8KJiM0MzsgICAgICAgICMgUkZDIDQxOTEgcm91dGUgaW5mb3JtYXRpb24gb3B0aW9uLCAvNjQgcHJlZml4ICg4IGJ5dGVzKQomIzQzOyAgICAgICAgcmEgJiM0Mzs9IHN0cnVjdC5wYWNrKCYjMzk7IUJCQkJJJiMzOTssIDI0LCAyLCBwbGVuLCAwLCByaW9fbGlmZXRpbWUpCiYjNDM7ICAgICAgICByYSAmIzQzOz0gc29ja2V0LmluZXRfcHRvbihzb2NrZXQuQUZfSU5FVDYsIHByZWZpeClbOjhdCiYjNDM7ICAgIGlmIHBpbyBpcyBub3QgTm9uZToKJiM0MzsgICAgICAgIHByZWZpeCwgcGxlbiwgdmFsaWRfbGZ0ID0gcGlvCiYjNDM7ICAgICAgICAjIFJGQyA0ODYxIHByZWZpeCBpbmZvcm1hdGlvbiBvcHRpb24sIG9uLWxpbmsgb25seSAoTCBzZXQsIEEgY2xlYXIpCiYjNDM7ICAgICAgICByYSAmIzQzOz0gc3RydWN0LnBhY2soJiMzOTshQkJCQklJSSYjMzk7LCAzLCA0LCBwbGVuLCAweDgwLCB2YWxpZF9sZnQsIDAsIDApCiYjNDM7ICAgICAgICByYSAmIzQzOz0gc29ja2V0LmluZXRfcHRvbihzb2NrZXQuQUZfSU5FVDYsIHByZWZpeCkKJiM0MzsgICAgc29jay5zZW5kdG8ocmEsICgmIzM5O2ZmMDI6OjEmIzM5OywgMCwgMCwgaWZpbmRleCkpCiYjNDM7CiYjNDM7CiYjNDM7ZGVmIF9yYV9yb3V0ZXJfc29jayhuc19yLCBpZm5hbWUpOgomIzQzOyAgICB3aXRoIE5ldE5TRW50ZXIoc3RyKG5zX3IpKToKJiM0MzsgICAgICAgIHNvY2sgPSBzb2NrZXQuc29ja2V0KHNvY2tldC5BRl9JTkVUNiwgc29ja2V0LlNPQ0tfUkFXLAomIzQzOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc29ja2V0LklQUFJPVE9fSUNNUFY2KQomIzQzOyAgICAgICAgc29jay5zZXRzb2Nrb3B0KHNvY2tldC5JUFBST1RPX0lQVjYsIHNvY2tldC5JUFY2X01VTFRJQ0FTVF9IT1BTLCAyNTUpCiYjNDM7ICAgICAgICByZXR1cm4gc29jaywgc29ja2V0LmlmX25hbWV0b2luZGV4KGlmbmFtZSkKJiM0MzsKJiM0MzsKJiM0MztkZWYgX3JhX2FkdmVydGlzZV9yb3V0ZXMocnRubCwgc29jaywgaWZpbmRleCwgd2FudCwgKipyYV9vcHRzKToKJiM0MzsgICAgJiMzNDsmIzM0OyYjMzQ7CiYjNDM7ICAgIFNlbmRpbmcgZmFpbHMgd2l0aCBFQUREUk5PVEFWQUlMIHVudGlsIHRoZSByb3V0ZXImIzM5O3MgbGluay1sb2NhbAomIzQzOyAgICBhZGRyZXNzIHBhc3NlcyBEQUQsIHNvIHJldHJ5LgomIzQzOyAgICAmIzM0OyYjMzQ7JiMzNDsKJiM0MzsKJiM0MzsgICAgc2VlbiA9IHt9CiYjNDM7ICAgIGZvciBfIGluIHJhbmdlKDEwKToKJiM0MzsgICAgICAgIHRyeToKJiM0MzsgICAgICAgICAgICBfc2VuZF9yYShzb2NrLCBpZmluZGV4LCAqKnJhX29wdHMpCiYjNDM7ICAgICAgICBleGNlcHQgT1NFcnJvcjoKJiM0MzsgICAgICAgICAgICB0aW1lLnNsZWVwKDAuMikKJiM0MzsgICAgICAgICAgICBjb250aW51ZQomIzQzOyAgICAgICAgc2Vlbi51cGRhdGUoX2NvbGxlY3Rfcm91dGVfbnRmcyhydG5sLCAmIzM5O25ld3JvdXRlLW50ZiYjMzk7LAomIzQzOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3YW50IC0gc2V0KHNlZW4ua2V5cygpKSwgZGVhZGxpbmU9MikpCiYjNDM7ICAgICAgICBpZiBsZW4oc2VlbikgPT0gbGVuKHdhbnQpOgomIzQzOyAgICAgICAgICAgIGJyZWFrCiYjNDM7ICAgIHJldHVybiBzZWVuCiYjNDM7CiYjNDM7CiYjNDM7ZGVmIGlwdjZfcm91dGVfZGVsX3JlYXNvbl9yYV93aXRoZHJhd24oKSAtJmd0OyBOb25lOgomIzQzOyAgICAmIzM0OyYjMzQ7JiMzNDsKJiM0MzsgICAgUm91dGVzIHdpdGhkcmF3biBieSBhIHplcm8tbGlmZXRpbWUgUkEgKHJvdXRlciBsaWZldGltZSwgUkZDIDQ4NjEKJiM0MzsgICAgUElPLCBSRkMgNDE5MSBSSU8pIHJlcG9ydCBSVEFfREVMX1JFQVNPTiA9PSByYS13aXRoZHJhd24uCiYjNDM7ICAgICYjMzQ7JiMzNDsmIzM0OwomIzQzOwomIzQzOyAgICAjIChydG0tZHN0LWxlbiwgZHN0KTsgdGhlIGRlZmF1bHQgcm91dGUgY2FycmllcyBubyBSVEFfRFNUCiYjNDM7ICAgIHJvdXRlcyA9IHsoMCwgTm9uZSksICg2NCwgJiMzOTsyMDAxOmRiODo2OjomIzM5OyksICg2NCwgJiMzOTsyMDAxOmRiODo1OjomIzM5Oyl9CiYjNDM7CiYjNDM7ICAgIHdpdGggTmV0TlMoKSBhcyBuc19oLCBOZXROUygpIGFzIG5zX3I6CiYjNDM7ICAgICAgICBpcChmJiMzNDtsaW5rIGFkZCB2ZXRoMCBuZXRucyB7bnNfaH0gdHlwZSB2ZXRoIHBlZXIgbmFtZSB2ZXRoMSBuZXRucyB7bnNfcn0mIzM0OykKJiM0MzsgICAgICAgIHdpdGggTmV0TlNFbnRlcihzdHIobnNfaCkpOgomIzQzOyAgICAgICAgICAgIF93cml0ZV9pcHY2X3N5c2N0bCgmIzM0O2NvbmYvdmV0aDAvYWNjZXB0X3JhJiMzNDssIDIpCiYjNDM7ICAgICAgICAgICAgX3dyaXRlX2lwdjZfc3lzY3RsKCYjMzQ7Y29uZi92ZXRoMC9mb3J3YXJkaW5nJiMzNDssIDApCiYjNDM7ICAgICAgICAgICAgdHJ5OgomIzQzOyAgICAgICAgICAgICAgICBfd3JpdGVfaXB2Nl9zeXNjdGwoJiMzNDtjb25mL3ZldGgwL2FjY2VwdF9yYV9ydF9pbmZvX21heF9wbGVuJiMzNDssIDY0KQomIzQzOyAgICAgICAgICAgIGV4Y2VwdCBGaWxlTm90Rm91bmRFcnJvcjoKJiM0MzsgICAgICAgICAgICAgICAgcmFpc2UgS3NmdFNraXBFeCgmIzM0O25vIENPTkZJR19JUFY2X1JPVVRFX0lORk8mIzM0OykKJiM0MzsgICAgICAgIHdpdGggTmV0TlNFbnRlcihzdHIobnNfcikpOgomIzQzOyAgICAgICAgICAgICMgc2tpcCBEQUQgc28gdGhlIHJvdXRlciYjMzk7cyBsaW5rLWxvY2FsIHNvdXJjZSBpcyB1c2FibGUgcmlnaHQgYXdheQomIzQzOyAgICAgICAgICAgIF93cml0ZV9pcHY2X3N5c2N0bCgmIzM0O2NvbmYvdmV0aDEvYWNjZXB0X2RhZCYjMzQ7LCAwKQomIzQzOyAgICAgICAgaXAoJiMzNDtsaW5rIHNldCBkZXYgdmV0aDAgdXAmIzM0OywgbnM9c3RyKG5zX2gpKQomIzQzOyAgICAgICAgaXAoJiMzNDtsaW5rIHNldCBkZXYgdmV0aDEgdXAmIzM0OywgbnM9c3RyKG5zX3IpKQomIzQzOwomIzQzOyAgICAgICAgcnRubCA9IF9ydG5sX3JvdXRlX3N1YnNjcmliZShuc19oKQomIzQzOyAgICAgICAgc29jaywgaWZpbmRleCA9IF9yYV9yb3V0ZXJfc29jayhuc19yLCAmIzM0O3ZldGgxJiMzNDspCiYjNDM7CiYjNDM7ICAgICAgICBzZWVuID0gX3JhX2FkdmVydGlzZV9yb3V0ZXMocnRubCwgc29jaywgaWZpbmRleCwgcm91dGVzLAomIzQzOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpZmV0aW1lPTE4MDAsCiYjNDM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmlvPSgmIzM5OzIwMDE6ZGI4OjU6OiYjMzk7LCA2NCwgNjAwKSwKJiM0MzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwaW89KCYjMzk7MjAwMTpkYjg6Njo6JiMzOTssIDY0LCA2MDApKQomIzQzOyAgICAgICAga3NmdF9lcShzZXQoc2VlbiksIHJvdXRlcywgJiMzNDtub3QgYWxsIFJBIHJvdXRlcyB3ZXJlIGluc3RhbGxlZCYjMzQ7KQomIzQzOyAgICAgICAgaWYgc2V0KHNlZW4pICE9IHJvdXRlczoKJiM0MzsgICAgICAgICAgICByZXR1cm4KJiM0MzsKJiM0MzsgICAgICAgIF9zZW5kX3JhKHNvY2ssIGlmaW5kZXgsIDAsIHJpbz0oJiMzOTsyMDAxOmRiODo1OjomIzM5OywgNjQsIDApLAomIzQzOyAgICAgICAgICAgICAgICAgcGlvPSgmIzM5OzIwMDE6ZGI4OjY6OiYjMzk7LCA2NCwgMCkpCiYjNDM7ICAgICAgICBzZWVuID0gX2NvbGxlY3Rfcm91dGVfbnRmcyhydG5sLCAmIzM5O2RlbHJvdXRlLW50ZiYjMzk7LCByb3V0ZXMpCiYjNDM7ICAgICAgICBmb3Iga2V5IGluIHJvdXRlczoKJiM0MzsgICAgICAgICAgICBhdHRycyA9IHNlZW4uZ2V0KGtleSkKJiM0MzsgICAgICAgICAgICBrc2Z0X25vdF9ub25lKGF0dHJzLCBmJiMzNDtubyBSVE1fREVMUk9VVEUgZm9yIHtrZXl9JiMzNDspCiYjNDM7ICAgICAgICAgICAgaWYgYXR0cnMgaXMgbm90IE5vbmU6CiYjNDM7ICAgICAgICAgICAgICAgIGtzZnRfZXEoYXR0cnMuZ2V0KCYjMzk7ZGVsLXJlYXNvbiYjMzk7KSwgJiMzOTtyYS13aXRoZHJhd24mIzM5OykKJiM0MzsKJiM0MzsKJiM0MztkZWYgaXB2Nl9yb3V0ZV9kZWxfcmVhc29uX2Fic2VudCgpIC0mZ3Q7IE5vbmU6CiYjNDM7ICAgICYjMzQ7JiMzNDsmIzM0OwomIzQzOyAgICBBIGRlbGV0aW9uIHBhdGggdGhhdCByZWNvcmRzIG5vIGNhdXNlIChoZXJlIGEgdXNlcnNwYWNlIHJlcXVlc3QpCiYjNDM7ICAgIG11c3Qgbm90IGNhcnJ5IFJUQV9ERUxfUkVBU09OIGF0IGFsbC4KJiM0MzsgICAgJiMzNDsmIzM0OyYjMzQ7CiYjNDM7CiYjNDM7ICAgIHdpdGggTmV0TlMoKSBhcyBuczoKJiM0MzsgICAgICAgIHJ0bmwgPSBfcnRubF9yb3V0ZV9zdWJzY3JpYmUobnMpCiYjNDM7ICAgICAgICBpcCgmIzM0O2xpbmsgYWRkIG5hbWUgZHVtbXkxIHR5cGUgZHVtbXkmIzM0OywgbnM9c3RyKG5zKSkKJiM0MzsgICAgICAgIGlwKCYjMzQ7bGluayBzZXQgZGV2IGR1bW15MSB1cCYjMzQ7LCBucz1zdHIobnMpKQomIzQzOyAgICAgICAgaXAoJiMzNDstNiByb3V0ZSBhZGQgMjAwMTpkYjg6MTo6LzY0IGRldiBkdW1teTEmIzM0OywgbnM9c3RyKG5zKSkKJiM0MzsgICAgICAgIGlwKCYjMzQ7LTYgcm91dGUgZGVsIDIwMDE6ZGI4OjE6Oi82NCBkZXYgZHVtbXkxJiMzNDssIG5zPXN0cihucykpCiYjNDM7CiYjNDM7ICAgICAgICBhdHRycyA9IF93YWl0X3JvdXRlX250ZihydG5sLCAmIzM5O2RlbHJvdXRlLW50ZiYjMzk7LCA2NCwgJiMzOTsyMDAxOmRiODoxOjomIzM5OykKJiM0MzsgICAgICAgIGtzZnRfbm90X25vbmUoYXR0cnMsICYjMzQ7bm8gUlRNX0RFTFJPVVRFIGZvciAyMDAxOmRiODoxOjovNjQmIzM0OykKJiM0MzsgICAgICAgIGlmIGF0dHJzIGlzIG5vdCBOb25lOgomIzQzOyAgICAgICAgICAgIGtzZnRfbm90X2luKCYjMzk7ZGVsLXJlYXNvbiYjMzk7LCBhdHRycywKJiM0MzsgICAgICAgICAgICAgICAgICAgICAgICAmIzM0O3VzZXIgZGVsZXRpb24gbXVzdCBub3QgY2FycnkgZGVsLXJlYXNvbiYjMzQ7KQomIzQzOwomIzQzOwogZGVmIG1haW4oKSAtJmd0OyBOb25lOgotICAgIGtzZnRfcnVuKFtkdW1wX21jYWRkcl9jaGVjaywgZHVtcF9tY2FkZHI2X2NoZWNrLCBpcHY0X2RldmNvbmZfbm90aWZ5XSkKJiM0MzsgICAga3NmdF9ydW4oW2R1bXBfbWNhZGRyX2NoZWNrLCBkdW1wX21jYWRkcjZfY2hlY2ssIGlwdjRfZGV2Y29uZl9ub3RpZnksCiYjNDM7ICAgICAgICAgICAgICBpcHY2X3JvdXRlX2RlbF9yZWFzb25fZXhwaXJlZCwKJiM0MzsgICAgICAgICAgICAgIGlwdjZfcm91dGVfZGVsX3JlYXNvbl9yYV93aXRoZHJhd24sCiYjNDM7ICAgICAgICAgICAgICBpcHY2X3JvdXRlX2RlbF9yZWFzb25fYWJzZW50XSkKICAgICBrc2Z0X2V4aXQoKQogCiBpZiBfX25hbWVfXyA9PSAmIzM0O19fbWFpbl9fJiMzNDs6CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDIyOjM2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyOTc1CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogNjYyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgSVB2NiBSb3V0ZSBEZWxldGlvbiBOb3RpZmljYXRpb24gUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7dmUgZ290IHRoaXMgcGF0Y2ggYWRkaW5nIGEgYFJUQV9ERUxfUkVBU09OYCBhdHRyaWJ1dGUgdG8gSVB2NiByb3V0ZSBkZWxldGlvbiBub3RpZmljYXRpb25zIChgUlRNX0RFTFJPVVRFYCkuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IHRoaXMgaXMgYSBzb2xpZCBhZGRpdGlvbjsgcHJvdmlkaW5nIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgKndoeSogYSByb3V0ZSBpcyBiZWluZyBkZWxldGVkIHNob3VsZCBiZSBoZWxwZnVsIGZvciBkZWJ1Z2dpbmcgYW5kIG1vbml0b3JpbmcuIEkgc2VlIGl0JiMzOTtzIHRvdWNoaW5nIHNldmVyYWwgY29yZSBJUHY2IGZpbGVzOiBgbmV0L2lwdjYvcm91dGUuY2AsIGBuZXQvaXB2Ni9pcDZfZmliLmNgLCBgbmV0L2lwdjYvYWRkcmNvbmYuY2AsIGFuZCBgbmV0L2lwdjYvbmRpc2MuY2AsIGFsb25nIHdpdGggYSBoZWFkZXIgYW5kIGEgbmV3IFB5dGhvbiB0ZXN0LiBGdW5jdGlvbmFsbHksIGl0IHNlZW1zIHN0cmFpZ2h0Zm9yd2FyZDogYWRkaW5nIHRoZSBhdHRyaWJ1dGUgYW5kIHBvcHVsYXRpbmcgaXQgZm9yIGV4cGlyYXRpb24gb3IgUkEgd2l0aGRyYXdhbCBzY2VuYXJpb3MuCgpOb3csIGxldCYjMzk7cyBkcmlsbCBkb3duLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGljaCBmdW5jdGlvbnMgYXJlIG1vc3QgY3JpdGljYWwgZm9yIGZ1enppbmcuIEkmIzM5O3ZlIHF1aWNrbHkgaWRlbnRpZmllZCBhIGxpc3Qgb2YgbW9kaWZpZWQgZnVuY3Rpb25zOiBgaXA2X2RlbF9ydF9yZWFzb25gLCBgZmliNl9kZWxgLCBgZmliNl9kZWxfcm91dGVgLCBgaW5ldDZfcnRfbm90aWZ5YCwgYHJ0Nl9maWxsX25vZGVgLCBgYWRkcmNvbmZfcHJlZml4X3JjdmAsIGBuZGlzY19yb3V0ZXJfZGlzY292ZXJ5YCwgYW5kIGBydDZfcm91dGVfcmN2YC4KCkEgcXVpY2sgYW5hbHlzaXMsIGFuZCBpdCBzZWVtcyB0aGF0IGBydDZfZmlsbF9ub2RlYCBpcyBhbiBpbnRlcm5hbCBoZWxwZXIsIGJ1dCBoZWF2aWx5IG1vZGlmaWVkLiBJdCB3aWxsIGJlIGltcG9ydGFudCB0byBmdXp6LCBldmVuIHRob3VnaCBzdGF0aWMuIGBpbmV0Nl9ydF9ub3RpZnlgIHNlZW1zIGxpa2UgYSBwcmltYXJ5IGNhbmRpZGF0ZSBzaW5jZSBpdCYjMzk7cyBpbnZvbHZlZCBpbiB0aGUgbmV0bGluayBtZXNzYWdlIGdlbmVyYXRpb24uIEJvdGggYGlwNl9kZWxfcnRfcmVhc29uYCBhbmQgYGZpYjZfZGVsYCBhcmUgZ2xvYmFsLCBhbmQgdGhlcmVmb3JlIGdvb2QgY2FuZGlkYXRlcy4gYGFkZHJjb25mX3ByZWZpeF9yY3ZgIGlzIGFsc28gZ2xvYmFsIGFuZCB3b3J0aCBub3RpbmcuICBgbmRpc2Nfcm91dGVyX2Rpc2NvdmVyeWAgaXMgaW50ZXJuYWwgYW5kIGxlc3Mgb2YgYSBjb25jZXJuLCBhbmQgYHJ0Nl9yb3V0ZV9yY3ZgIGlzIGdsb2JhbC4KCkZvY3VzaW5nIG9uIGBuZXQvaXB2Ni9yb3V0ZS5jYCBhbmQgYG5ldC9pcHY2L2lwNl9maWIuY2AsIEkmIzM5O2xsIGVsaW1pbmF0ZSBhbnkgaW50ZXJuYWwgb3IgaW5saW5lZCBmdW5jdGlvbnMuIFRoYXQgbGVhdmVzIG1lIHdpdGggYGlwNl9kZWxfcnRfcmVhc29uYCwgYGZpYjZfZGVsYCwgYGluZXQ2X3J0X25vdGlmeWAsIGBydDZfcm91dGVfcmN2YCwgYW5kIGBhZGRyY29uZl9wcmVmaXhfcmN2YC4gVGhlc2UgYXJlIHRoZSBrZXkgZW50cnkgcG9pbnRzIEkgbmVlZCB0byBpbnZlc3RpZ2F0ZSBmdXJ0aGVyLgoKRmluYWxseSwgSSBuZWVkIHRvIGNoZWNrIHRoZSBLY29uZmlnIG9wdGlvbnMuIFRoZSBjb2RlIGxpdmVzIGluIGBuZXQvaXB2Ni9gLCBzbyBpdCYjMzk7cyBvYnZpb3VzbHkgdGllZCB0byBgQ09ORklHX0lQVjZgLiBUaGUgdGVzdCBzY3JpcHQgbWVudGlvbnMgYENPTkZJR19JUFY2X1JPVVRFX0lORk9gIHJlbGF0ZWQgdG8gYGFjY2VwdF9yYV9ydF9pbmZvX21heF9wbGVuYC4gSSBzaG91bGQgY2hlY2sgd2hldGhlciBvciBub3QgdGhhdCYjMzk7cyBhY3R1YWxseSByZXF1aXJlZCB0byBjb21waWxlIHRoZSBjb2RlLiBBZnRlciBhIHF1aWNrIGxvb2ssIGl0IHNlZW1zIHRoYXQgdGhpcyBpcyAqbm90KiByZXF1aXJlZCBmb3IgZ2VuZXJhbCBvcGVyYXRpb24sIGFsdGhvdWdoIEkgc2hvdWxkIGxvb2sgYXQgYHJ0Nl9yb3V0ZV9yY3ZgIHRvIHNlZSB3aGF0IGlzIGNvbmRpdGlvbmFsbHkgY29tcGlsZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMjI6MzY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cnQ2X3JvdXRlX3JjdiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY2L3JvdXRlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjYvcm91dGUuYz05NjM9c3RhdGljIGJvb2wgcnQ2X2lzX2d3X29yX25vbmV4dGhvcChjb25zdCBzdHJ1Y3QgZmliNl9yZXN1bHQgKnJlcylcbi0tXG5uZXQvaXB2Ni9yb3V0ZS5jLTk2OS0jaWZkZWYgQ09ORklHX0lQVjZfUk9VVEVfSU5GT1xubmV0L2lwdjYvcm91dGUuYzo5NzA6aW50IHJ0Nl9yb3V0ZV9yY3Yoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTggKm9wdCwgaW50IGxlbixcbm5ldC9pcHY2L3JvdXRlLmMtOTcxLVx0XHQgIGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqZ3dhZGRyKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDIyOjM2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0NDMzCgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogNDkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqSW52ZXN0aWdhdGluZyBJUHY2IFJvdXRlIFJlY2VwdGlvbioqCgpBbHJpZ2h0LCBzbyBJIHNlZSBgcnQ2X3JvdXRlX3JjdmAgLSB0aGF0JiMzOTtzIHdoZXJlIHRoZSBJUHY2IHJvdXRpbmcgbWFnaWMgaGFwcGVucy4gR29vZCB0byBrbm93IGl0JiMzOTtzIHVuZGVyIGBDT05GSUdfSVBWNl9ST1VURV9JTkZPYCwgdGhhdCYjMzk7cyB0aGUgb2J2aW91cyBwbGFjZSB0byBzdGFydC4gTm93LCBsZXQmIzM5O3MgZHJpbGwgZG93biBpbnRvIGhvdyBwcmVmaXhlcyBhcmUgaGFuZGxlZC4gSSYjMzk7bSBnb2luZyB0byBqdW1wIHN0cmFpZ2h0IGludG8gYGFkZHJjb25mX3ByZWZpeF9yY3ZgIHdpdGhpbiBgbmV0L2lwdjYvYWRkcmNvbmYuY2AuIFRoYXQgZnVuY3Rpb24mIzM5O3MgZ290IHRvIGJlIHRoZSBjb3JlIG9mIHVuZGVyc3RhbmRpbmcgaG93IHByZWZpeGVzIGFyZSByZWNlaXZlZCBhbmQgcHJvY2Vzc2VkLCBhbmQgdGhhdCYjMzk7cyBjcml0aWNhbCBmb3IgaG93IHJvdXRpbmcgdGFibGVzIGFyZSBidWlsdCBhbmQgbWFpbnRhaW5lZC4gVGltZSB0byBzZWUgd2hhdCB0aGF0IGNvZGUmIzM5O3MgcmVhbGx5IGRvaW5nIHVuZGVyIHRoZSBob29kLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDIyOjM2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2FkZHJjb25mX3ByZWZpeF9yY3YmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXB2Ni9hZGRyY29uZi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY2L2FkZHJjb25mLmM9MTM2OT1zdGF0aWMgaW50IGlwdjZfY3JlYXRlX3RlbXBhZGRyKHN0cnVjdCBpbmV0Nl9pZmFkZHIgKmlmcCwgYm9vbCBibG9jaylcbi0tXG5uZXQvaXB2Ni9hZGRyY29uZi5jLTE0ODMtXHRjZmcuaWZhX2ZsYWdzID0gSUZBX0ZfVEVNUE9SQVJZO1xubmV0L2lwdjYvYWRkcmNvbmYuYzoxNDg0Olx0Lyogc2V0IGluIGFkZHJjb25mX3ByZWZpeF9yY3YoKSAqL1xubmV0L2lwdjYvYWRkcmNvbmYuYy0xNDg1LVx0aWYgKGlmcC1cdTAwM2VmbGFncyBcdTAwMjYgSUZBX0ZfT1BUSU1JU1RJQylcbi0tXG5uZXQvaXB2Ni9hZGRyY29uZi5jPTI2ODk9c3RhdGljIGJvb2wgaXNfYWRkcl9tb2RlX2dlbmVyYXRlX3N0YWJsZShzdHJ1Y3QgaW5ldDZfZGV2ICppZGV2KVxuLS1cbm5ldC9pcHY2L2FkZHJjb25mLmMtMjY5NC1cbm5ldC9pcHY2L2FkZHJjb25mLmM6MjY5NTppbnQgYWRkcmNvbmZfcHJlZml4X3Jjdl9hZGRfYWRkcihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG5uZXQvaXB2Ni9hZGRyY29uZi5jLTI2OTYtXHRcdFx0XHQgY29uc3Qgc3RydWN0IHByZWZpeF9pbmZvICpwaW5mbyxcbi0tXG5uZXQvaXB2Ni9hZGRyY29uZi5jLTI3OTUtfVxubmV0L2lwdjYvYWRkcmNvbmYuYzoyNzk2OkVYUE9SVF9TWU1CT0xfR1BMKGFkZHJjb25mX3ByZWZpeF9yY3ZfYWRkX2FkZHIpO1xubmV0L2lwdjYvYWRkcmNvbmYuYy0yNzk3LVxubmV0L2lwdjYvYWRkcmNvbmYuYzoyNzk4OnZvaWQgYWRkcmNvbmZfcHJlZml4X3JjdihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1OCAqb3B0LCBpbnQgbGVuLCBib29sIHNsbGFvKVxubmV0L2lwdjYvYWRkcmNvbmYuYy0yNzk5LXtcbi0tXG5uZXQvaXB2Ni9hZGRyY29uZi5jLTI5NDMtb2s6XG5uZXQvaXB2Ni9hZGRyY29uZi5jOjI5NDQ6XHRcdGVyciA9IGFkZHJjb25mX3ByZWZpeF9yY3ZfYWRkX2FkZHIobmV0LCBkZXYsIHBpbmZvLCBpbjZfZGV2LFxubmV0L2lwdjYvYWRkcmNvbmYuYy0yOTQ1LVx0XHRcdFx0XHRcdCAgIFx1MDAyNmFkZHIsIGFkZHJfdHlwZSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAyMjozNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTE3MQoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDM1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duLCBhcyBhIG5ldHdvcmtpbmcgZXhwZXJ0OgoKKipJbnZlc3RpZ2F0aW5nIElQdjYgQ29uZmlndXJhdGlvbiBEZXBlbmRlbmNpZXMqKgoKQWxyaWdodCwgbGV0IG1lIHRoaW5rIHRoaXMgdGhyb3VnaC4gYGFkZHJjb25mX3ByZWZpeF9yY3ZgLi4uIHJpZ2h0LCB0aGF0IG9uZSBzZWVtcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkLiBBcyBmYXIgYXMgSSBjYW4gdGVsbCwgaXQmIzM5O3Mgbm90IG5lc3RsZWQgdW5kZXIgc29tZSBzcGVjaWZpYywgZ3JhbnVsYXIgY29uZmlndXJhdGlvbiBvcHRpb24uIEl0JiMzOTtzIGp1c3QgaW5oZXJlbnRseSB0aWVkIHRvIHRoZSBicm9hZGVyIGBDT05GSUdfSVBWNmAgc2V0dGluZy4gVGhhdCBtYWtlcyBzZW5zZSwga2VlcHMgdGhpbmdzIHJlbGF0aXZlbHkgY2xlYW4uCgpOb3csIGhvbGQgb24uLi4gd2hhdCBhYm91dCBgbmRpc2Nfcm91dGVyX2Rpc2NvdmVyeWA/IEkgbmVlZCB0byBkb3VibGUtY2hlY2sgdGhhdCBvbmUuIElzIGl0IHNpbWlsYXJseSB1bmNvbnN0cmFpbmVkLCBqdXN0IGVuYWJsZWQgYnkgdmlydHVlIG9mIElQdjYgYmVpbmcgZW5hYmxlZCwgb3IgZG9lcyBpdCBoYXZlIGl0cyBvd24gbGl0dGxlIHRvZ2dsZSBzb21ld2hlcmUsIG9yIG1heWJlIGRlcGVuZCBvbiBhbm90aGVyLCBzbWFsbGVyIGNvbmZpZyBzZXR0aW5nPyBJIG5lZWQgdG8gY29uZmlybSBpdHMgZGVwZW5kZW5jeSBzdHJ1Y3R1cmUgdG8gYXZvaWQgYW55IHN1cnByaXNlcyBkb3duIHRoZSBsaW5lLCBlc3BlY2lhbGx5IHdpdGggcmVnYXJkcyB0byByZXNvdXJjZSB1dGlsaXphdGlvbiBhbmQgbW9kdWxlIGxvYWRpbmcuIExldCBtZSBsb29rIGRlZXBlciBhdCB0aGF0IGNvbmZpZ3VyYXRpb24gb3B0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDIyOjM2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O25kaXNjX3JvdXRlcl9kaXNjb3ZlcnkmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXB2Ni9uZGlzYy5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY2L25kaXNjLmM9MTE4Mj1zdGF0aWMgdm9pZCBuZGlzY19yYV91c2Vyb3B0KHN0cnVjdCBza19idWZmICpyYSwgc3RydWN0IG5kX29wdF9oZHIgKm9wdClcbi0tXG5uZXQvaXB2Ni9uZGlzYy5jLTEyMzAtXG5uZXQvaXB2Ni9uZGlzYy5jOjEyMzE6c3RhdGljIGVudW0gc2tiX2Ryb3BfcmVhc29uIG5kaXNjX3JvdXRlcl9kaXNjb3Zlcnkoc3RydWN0IHNrX2J1ZmYgKnNrYilcbm5ldC9pcHY2L25kaXNjLmMtMTIzMi17XG4tLVxubmV0L2lwdjYvbmRpc2MuYz0xODA2PWVudW0gc2tiX2Ryb3BfcmVhc29uIG5kaXNjX3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9pcHY2L25kaXNjLmMtMTg0NS1cdGNhc2UgTkRJU0NfUk9VVEVSX0FEVkVSVElTRU1FTlQ6XG5uZXQvaXB2Ni9uZGlzYy5jOjE4NDY6XHRcdHJlYXNvbiA9IG5kaXNjX3JvdXRlcl9kaXNjb3Zlcnkoc2tiKTtcbm5ldC9pcHY2L25kaXNjLmMtMTg0Ny1cdFx0YnJlYWs7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMjI6MzY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTU2ODUKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAzMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0JiMzOTtzIGludGVybmFsIG1vbm9sb2d1ZToKCioqSW52ZXN0aWdhdGluZyBJUHY2IFJvdXRlciBEaXNjb3ZlcnkgQ29uZmlndXJhdGlvbioqCgpSaWdodCwgc28gYG5kaXNjX3JvdXRlcl9kaXNjb3ZlcnlgIGlzIGZsYWdnZWQgYXMgKnN0YXRpYyouIFRoaXMgaW1tZWRpYXRlbHkgcmFpc2VzIGEgZmxhZy4gV2UgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcyBzdGF0aWMgbmF0dXJlIHdpdGhpbiB0aGUgSVB2NiByb3V0aW5nIGNvbnRleHQuIEFyZSB3ZSB0YWxraW5nIGNvbXBpbGUtdGltZSBmaXhlZCwgb3IgaXMgdGhlcmUgYSBsaW1pdGVkIHJ1bnRpbWUgY29uZmlndXJhdGlvbiB0aGF0JiMzOTtzIGJlaW5nIG92ZXJsb29rZWQ/IFRoZSBuZXh0IHN0ZXBzIGFyZSBvYnZpb3VzOiB3ZSBuZWVkIHRvIGRlbHZlIGRlZXBlciBpbnRvIGhvdyB0aGlzIHN0YXRpYyBmbGFnIGludGVyYWN0cyB3aXRoIHJvdXRlIGRlbGV0aW9uIHdpdGhpbiBJUHY2LgoKTXkgZmlyc3QgdGhvdWdodCBpcyB0byB6ZXJvIGluIG9uIGBpcDZfZGVsX3J0X3JlYXNvbmAuIFRoaXMgZnVuY3Rpb24gbGlrZWx5IHNwZWNpZmllcyAqd2h5KiBhIHJvdXRlIGlzIGJlaW5nIHJlbW92ZWQuIFVuZGVyc3RhbmRpbmcgdGhlIHJlYXNvbiDigJMgd2hldGhlciBpdCYjMzk7cyBkdWUgdG8gcm91dGVyIGFkdmVydGlzZW1lbnQgZXhwaXJhdGlvbiwgbmVpZ2hib3IgZGlzY292ZXJ5IGNoYW5nZXMsIG9yIHNvbWV0aGluZyBlbHNlIGVudGlyZWx5IOKAkyB3aWxsIGJlIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoZSBzdGF0aWMgbmF0dXJlJiMzOTtzIGltcGFjdC4gRG9lcyB0aGUgc3RhdGljIGNvbmZpZ3VyYXRpb24gZGlyZWN0bHkgaW5mbHVlbmNlIHRoZSByZWFzb25zIGEgcm91dGUgaXMgZWxpZ2libGUgZm9yIHJlbW92YWw/IE9yIGRvZXMgdGhpcyBhcHBseSB0byB0aGUgbmV4dCBzZWN0aW9uPwoKVGhlbiwgd2UgbmVlZCB0byBpbW1lZGlhdGVseSB1bmRlcnN0YW5kIHRoZSBmdW5jdGlvbiBgZmliNl9kZWxgLiBUaGlzIHdvdWxkIGJlIHRoZSBhY3R1YWwgZnVuY3Rpb24gdGhhdCBoYW5kbGVzIHRoZSByb3V0ZSB0YWJsZSBkZWxldGlvbi4gSXMgdGhlIHN0YXRpYyBmbGFnIGEgZGlyZWN0IHBhcmFtZXRlciBvZiB0aGlzIGZ1bmN0aW9uPyBIb3cgd291bGQgaXRzIGJlaGF2aW9yIGNoYW5nZSBieSB0aGUgdmFsdWUgb2YgdGhlIGZsYWc/IENhbiB3ZSBmb3JjZSBhIHJvdXRlIHRvIG5vdCBiZSBkZWxldGVkLCBpZiB0aGUgc3RhdGljIGZsYWcgaXMgc2V0IHRvIHRydWU/IFRoaXMgd2lsbCB0ZWxsIHVzIGlmIHJvdXRlcyB3aXRoIHNwZWNpZmljIHN0YXRpYyBhdHRyaWJ1dGVzIGFyZSBoYW5kbGVkIGRpZmZlcmVudGx5IGR1cmluZyB0aGUgZGVsZXRpb24gcHJvY2Vzcy4gTXkgZ3V0IHRlbGxzIG1lIHRoZXJlJiMzOTtzIGEgc3Ryb25nIGNvcnJlbGF0aW9uIGJldHdlZW4gYG5kaXNjX3JvdXRlcl9kaXNjb3ZlcnlgJiMzOTtzIHN0YXRpYyBzZXR0aW5nIGFuZCBob3cgdGhlIEZJQiBoYW5kbGVzIHRoZXNlIHJvdXRlcy4gVGltZSB0byBkaWcgaW4gYW5kIHNlZSB0aGUgbG93LWxldmVsIGludGVyYWN0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMjI6MzY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aXA2X2RlbF9ydF9yZWFzb24mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXB2Ni9yb3V0ZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY2L3JvdXRlLmM9OTcwPWludCBydDZfcm91dGVfcmN2KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHU4ICpvcHQsIGludCBsZW4sXG4tLVxubmV0L2lwdjYvcm91dGUuYy0xMDIyLVx0aWYgKHJ0IFx1MDAyNlx1MDAyNiAhbGlmZXRpbWUpIHtcbm5ldC9pcHY2L3JvdXRlLmM6MTAyMzpcdFx0aXA2X2RlbF9ydF9yZWFzb24obmV0LCBydCwgZmFsc2UsIFJUQV9ERUxfUkVBU09OX1JBX1dJVEhEUkFXTik7XG5uZXQvaXB2Ni9yb3V0ZS5jLTEwMjQtXHRcdHJ0ID0gTlVMTDtcbi0tXG5uZXQvaXB2Ni9yb3V0ZS5jPTM5NzY9c3RhdGljIGludCBfX2lwNl9kZWxfcnQoc3RydWN0IGZpYjZfaW5mbyAqcnQsIHN0cnVjdCBubF9pbmZvICppbmZvLFxuLS1cbm5ldC9pcHY2L3JvdXRlLmMtMzk5Ny1cbm5ldC9pcHY2L3JvdXRlLmM6Mzk5ODppbnQgaXA2X2RlbF9ydF9yZWFzb24oc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZmliNl9pbmZvICpydCwgYm9vbCBza2lwX25vdGlmeSxcbm5ldC9pcHY2L3JvdXRlLmMtMzk5OS1cdFx0ICAgICAgdTMyIGRlbF9yZWFzb24pXG4tLVxubmV0L2lwdjYvcm91dGUuYz00MDA5PWludCBpcDZfZGVsX3J0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZpYjZfaW5mbyAqcnQsIGJvb2wgc2tpcF9ub3RpZnkpXG5uZXQvaXB2Ni9yb3V0ZS5jLTQwMTAte1xubmV0L2lwdjYvcm91dGUuYzo0MDExOlx0cmV0dXJuIGlwNl9kZWxfcnRfcmVhc29uKG5ldCwgcnQsIHNraXBfbm90aWZ5LCBSVEFfREVMX1JFQVNPTl9VTlNQRUMpO1xubmV0L2lwdjYvcm91dGUuYy00MDEyLX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMjI6MzY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTY0NzkKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAyNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgSVB2NiBSb3V0ZSBEZWxldGlvbioqCgpPa2F5LCBzbyBgaXA2X2RlbF9ydF9yZWFzb25gIGlzIGEgZ2xvYmFsIHZhcmlhYmxlLiBUaGF0IGltbWVkaWF0ZWx5IGZsYWdzIGEgcG90ZW50aWFsIGNvbmNlcm4g4oCTIGdsb2JhbCBzdGF0ZSBjYW4gYmUgYSBzb3VyY2Ugb2YgdHJpY2t5IGNvbmN1cnJlbmN5IGJ1Z3MsIGVzcGVjaWFsbHkgaW4gYSBuZXR3b3JraW5nIGNvbnRleHQuIFNvLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgYW5kIHdoZXJlIHRoaXMgdmFyaWFibGUgaXMgYmVpbmcgdXNlZC4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8ga25vdyB3aHkgYW5kIGhvdyBhICYjMzQ7cmVhc29uJiMzNDsgaXMgYmVpbmcgc2V0IG9uIGRlbGV0aW9uIGFuZCB3aGF0IHRoZSBpbXBsaWNhdGlvbnMgYXJlLgoKTXkgbmV4dCBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byB0cmFjZSB0aGUgZGVsZXRpb24gcHJvY2VzcyBpdHNlbGYuIExldCYjMzk7cyBkaWcgaW50byBgZmliNl9kZWxgLiBUaGF0JiMzOTtzIHdoZXJlIHRoZSBydWJiZXIgbWVldHMgdGhlIHJvYWQsIHNvIHRvIHNwZWFrLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgcm91dGUgZGVsZXRpb24gaXMgaGFuZGxlZCBhdCB0aGUgY29yZSBsZXZlbC4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIG5vdyB0aGlua2luZyBhYm91dCBob3cgdGhlIGdsb2JhbCB2YXJpYWJsZSBgaXA2X2RlbF9ydF9yZWFzb25gIGludGVyYWN0cyB3aXRoIHRoZSBmdW5jdGlvbiBgZmliNl9kZWxgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAyMjozNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtmaWI2X2RlbCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY2L2lwNl9maWIuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2Ni9pcDZfZmliLmM9MTg0Mj1zdGF0aWMgc3RydWN0IGZpYjZfbm9kZSAqZmliNl9yZXBhaXJfdHJlZShzdHJ1Y3QgbmV0ICpuZXQsXG4tLVxubmV0L2lwdjYvaXA2X2ZpYi5jLTE5NjktXG5uZXQvaXB2Ni9pcDZfZmliLmM6MTk3MDpzdGF0aWMgdm9pZCBmaWI2X2RlbF9yb3V0ZShzdHJ1Y3QgZmliNl90YWJsZSAqdGFibGUsIHN0cnVjdCBmaWI2X25vZGUgKmZuLFxubmV0L2lwdjYvaXA2X2ZpYi5jLTE5NzEtXHRcdFx0ICAgc3RydWN0IGZpYjZfaW5mbyBfX3JjdSAqKnJ0cCwgc3RydWN0IG5sX2luZm8gKmluZm8sXG4tLVxubmV0L2lwdjYvaXA2X2ZpYi5jLTIwNjYtLyogTmVlZCB0byBvd24gdGFibGUtXHUwMDNldGI2X2xvY2sgKi9cbm5ldC9pcHY2L2lwNl9maWIuYzoyMDY3OmludCBmaWI2X2RlbChzdHJ1Y3QgZmliNl9pbmZvICpydCwgc3RydWN0IG5sX2luZm8gKmluZm8sIHUzMiBkZWxfcmVhc29uKVxubmV0L2lwdjYvaXA2X2ZpYi5jLTIwNjgte1xuLS1cbm5ldC9pcHY2L2lwNl9maWIuYy0yMDk1LVx0XHRcdFx0ZmliNl9yb3V0ZXNfcmVxdWlyZV9zcmNfZGVjKGluZm8tXHUwMDNlbmxfbmV0KTtcbm5ldC9pcHY2L2lwNl9maWIuYzoyMDk2Olx0XHRcdGZpYjZfZGVsX3JvdXRlKHRhYmxlLCBmbiwgcnRwLCBpbmZvLCBkZWxfcmVhc29uKTtcbm5ldC9pcHY2L2lwNl9maWIuYy0yMDk3LVx0XHRcdHJldHVybiAwO1xuLS1cbm5ldC9pcHY2L2lwNl9maWIuYy0yMTA3LSAqXHRDZXJ0YWlubHksIGl0IGlzIG5vdCBpbnRlcnJ1cHQgc2FmZS5cbm5ldC9pcHY2L2lwNl9maWIuYzoyMTA4OiAqXHRIb3dldmVyLCBpdCBpcyBpbnRlcm5hbGx5IHJlZW50ZXJhYmxlIHdydCBpdHNlbGYgYW5kIGZpYjZfYWRkL2ZpYjZfZGVsLlxubmV0L2lwdjYvaXA2X2ZpYi5jLTIxMDktICpcdEl0IG1lYW5zLCB0aGF0IHdlIGNhbiBtb2RpZnkgdHJlZSBkdXJpbmcgd2Fsa2luZ1xuLS1cbm5ldC9pcHY2L2lwNl9maWIuYz0yMjM0PXN0YXRpYyBpbnQgZmliNl9jbGVhbl9ub2RlKHN0cnVjdCBmaWI2X3dhbGtlciAqdylcbi0tXG5uZXQvaXB2Ni9pcDZfZmliLmMtMjI1Ny1cdFx0XHR3LVx1MDAzZWxlYWYgPSBydDtcbm5ldC9pcHY2L2lwNl9maWIuYzoyMjU4Olx0XHRcdHJlcyA9IGZpYjZfZGVsKHJ0LCBcdTAwMjZpbmZvLCBSVEFfREVMX1JFQVNPTl9VTlNQRUMpO1xubmV0L2lwdjYvaXA2X2ZpYi5jLTIyNTktXHRcdFx0aWYgKHJlcykge1xuLS1cbm5ldC9pcHY2L2lwNl9maWIuYz0yMzkzPXN0YXRpYyB2b2lkIGZpYjZfZ2NfdGFibGUoc3RydWN0IG5ldCAqbmV0LFxuLS1cbm5ldC9pcHY2L2lwNl9maWIuYy0yNDA1LVx0XHRpZiAoZmliNl9hZ2UocnQsIGdjX2FyZ3MpID09IC0xKVxubmV0L2lwdjYvaXA2X2ZpYi5jOjI0MDY6XHRcdFx0ZmliNl9kZWwocnQsIFx1MDAyNmluZm8sIFJUQV9ERUxfUkVBU09OX0VYUElSRUQpO1xubmV0L2lwdjYvaXA2X2ZpYi5jLTI0MDctfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAyMjozNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzQzNwoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDIyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaXQgc3RhbmRzOgoKKipOYXZpZ2F0aW5nIElQdjYgUm91dGluZyBhbmQgTm90aWZpY2F0aW9ucyoqCgpPa2F5LCBzbyBgZmliNl9kZWxgLi4uIHJpZ2h0LCB0aGF0JiMzOTtzIGEgZ2xvYmFsIHZhcmlhYmxlLiBOb3csIHdoZXJlIGRvZXMgdGhhdCBhY3R1YWxseSBjb21lIGludG8gcGxheT8gTXkgbWluZCBpbW1lZGlhdGVseSBqdW1wcyB0byB0aGUgbWVjaGFuaXNtcyBmb3IgZGVhbGluZyB3aXRoIHJvdXRlIHVwZGF0ZXMgYW5kIHJlbW92YWxzIHdpdGhpbiB0aGUgSVB2NiBzdGFjay4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBpbnRlcmFjdGlvbnMuIEkmIzM5O2xsIG5lZWQgdG8gZmlndXJlIG91dCB3aGVyZSB0aGF0JiMzOTtzIGFjdHVhbGx5IGJlaW5nIHVzZWQuIExldCBtZSBjaGVjayB0aGUgY29kZSBhc3NvY2lhdGVkIHdpdGggYGluZXQ2X3J0X25vdGlmeWAuIFRoYXQgZmVlbHMgbGlrZSBhIGxvZ2ljYWwgbmV4dCBzdGVwIHRvIGxvb2sgaW50byBhcyB0aGF0IHNlZW1zIGxpa2UgYSBnb29kIHBsYWNlIHRvIHN0YXJ0IG15IGludmVzdGlnYXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDIyOjM2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2luZXQ2X3J0X25vdGlmeSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY2L3JvdXRlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjYvcm91dGUuYz01MzczPXN0YXRpYyB2b2lkIGlwNl9yb3V0ZV9tcGF0aF9ub3RpZnkoc3RydWN0IGZpYjZfaW5mbyAqcnQsXG4tLVxubmV0L2lwdjYvcm91dGUuYy01MzkzLVx0aWYgKHJ0KVxubmV0L2lwdjYvcm91dGUuYzo1Mzk0Olx0XHRpbmV0Nl9ydF9ub3RpZnkoUlRNX05FV1JPVVRFLCBydCwgaW5mbywgbmxmbGFncyxcbm5ldC9pcHY2L3JvdXRlLmMtNTM5NS1cdFx0XHRcdFJUQV9ERUxfUkVBU09OX1VOU1BFQyk7XG4tLVxubmV0L2lwdjYvcm91dGUuYz02MjMxPXN0YXRpYyBpbnQgaW5ldDZfcnRtX2dldHJvdXRlKHN0cnVjdCBza19idWZmICppbl9za2IsIHN0cnVjdCBubG1zZ2hkciAqbmxoLFxuLS1cbm5ldC9pcHY2L3JvdXRlLmMtNjM3OS1cbm5ldC9pcHY2L3JvdXRlLmM6NjM4MDp2b2lkIGluZXQ2X3J0X25vdGlmeShpbnQgZXZlbnQsIHN0cnVjdCBmaWI2X2luZm8gKnJ0LCBzdHJ1Y3QgbmxfaW5mbyAqaW5mbyxcbm5ldC9pcHY2L3JvdXRlLmMtNjM4MS1cdFx0ICAgICB1bnNpZ25lZCBpbnQgbmxtX2ZsYWdzLCB1MzIgZGVsX3JlYXNvbilcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMjI6MzY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTc4OTUKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAyNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKk5hdmlnYXRpbmcgSVB2NiBSb3V0aW5nIE5vdGlmaWNhdGlvbnMqKgoKT2theSwgc28gYGluZXQ2X3J0X25vdGlmeWAgaXMgYSBnbG9iYWxseSBhY2Nlc3NpYmxlIGZ1bmN0aW9uLCBtZWFuaW5nIGl0JiMzOTtzIGxpa2VseSBhIGNlbnRyYWwgcG9pbnQgZm9yIGhhbmRsaW5nIElQdjYgcm91dGluZyB1cGRhdGVzLiBUaGF0IGltbWVkaWF0ZWx5IHBpcXVlcyBteSBpbnRlcmVzdC4gSXQgc3VnZ2VzdHMgYSBrZXkgaW50ZXJhY3Rpb24gcG9pbnQgd2l0aGluIHRoZSBrZXJuZWwmIzM5O3MgSVB2NiByb3V0aW5nIGluZnJhc3RydWN0dXJlLgoKTXkgbmV4dCBzdGVwIGlzIGNsZWFyLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhpcyBnbG9iYWwgZnVuY3Rpb24gaXMgYmVpbmcgdXNlZC4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIGdvaW5nIHRvIGRpZyBpbnRvIGBydDZfcm91dGVfcmN2YC4gSXQmIzM5O3MgaGlnaGx5IHByb2JhYmxlIHRoYXQgdGhpcyByb3V0aW5lIGlzIGEgY2FsbGVyIG9yIHJlY2VpdmVyIG9mIHRoZSBpbmZvcm1hdGlvbiBmbG93aW5nIHRocm91Z2ggYGluZXQ2X3J0X25vdGlmeWAuIEkgbmVlZCB0byBjb25maXJtIHdoZXRoZXIgYHJ0Nl9yb3V0ZV9yY3ZgIGlzIGRpcmVjdGx5IGludm9sdmVkIG9yIGlmIHRoZXJlJiMzOTtzIGFuIGluZGlyZWN0IGNvbm5lY3Rpb24uIEkmIzM5O2xsIGFuYWx5emUgaG93IHJvdXRpbmcgbm90aWZpY2F0aW9ucyBhcmUgYmVpbmcgaGFuZGxlZCwgdG8gY29uZmlybSB0aGlzIHJlbGF0aW9uc2hpcC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMjI6MzY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cnQ2X3JvdXRlX3JjdiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY2L3JvdXRlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjYvcm91dGUuYz05NjM9c3RhdGljIGJvb2wgcnQ2X2lzX2d3X29yX25vbmV4dGhvcChjb25zdCBzdHJ1Y3QgZmliNl9yZXN1bHQgKnJlcylcbi0tXG5uZXQvaXB2Ni9yb3V0ZS5jLTk2OS0jaWZkZWYgQ09ORklHX0lQVjZfUk9VVEVfSU5GT1xubmV0L2lwdjYvcm91dGUuYzo5NzA6aW50IHJ0Nl9yb3V0ZV9yY3Yoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTggKm9wdCwgaW50IGxlbixcbm5ldC9pcHY2L3JvdXRlLmMtOTcxLVx0XHQgIGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqZ3dhZGRyKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAyMjozNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODI4MQoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDM1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIElQdjYgUm91dGluZyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYHJ0Nl9yb3V0ZV9yY3ZgLCBhbmQgbXkgaW5pdGlhbCB0aG91Z2h0IGlzLCAmIzM0O1JpZ2h0LCB0aGlzIGlzIG5lc3RsZWQgdW5kZXIgYENPTkZJR19JUFY2X1JPVVRFX0lORk9gLiYjMzQ7IFRoYXQmIzM5O3MgdGhlIGZpcnN0IGtleSBwb2ludCB0byByZW1lbWJlciBmb3IgdW5kZXJzdGFuZGluZyBpdHMgY29udGV4dCB3aXRoaW4gdGhlIGJyb2FkZXIgSVB2NiBuZXR3b3JraW5nIHN0YWNrLiBJdCBpbnN0YW50bHkgcG9pbnRzIG1lIHRvIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgdGhhdCBlbmFibGUgdGhpcyBmdW5jdGlvbmFsaXR5LgoKTm93LCB0byBnZXQgYSBiZXR0ZXIgZ3Jhc3Agb24gdGhlIG92ZXJhbGwgZmxvdywgbGV0JiMzOTtzIGFsc28gY2hlY2sgYW5kIHVuZGVyc3RhbmQgYGFkZHJjb25mX3ByZWZpeF9yY3ZgIHNpbmNlIGl0IHJlbGF0ZXMgdG8gcHJlZml4IHJlY2VwdGlvbi4gSSBoYXZlIGEgaHVuY2ggdGhpcyBtaWdodCBiZSByZWxhdGVkIHRvIGhvdyByb3V0aW5nIGluZm9ybWF0aW9uIGlzIGFjcXVpcmVkIGluIHRoaXMgY29udGV4dCwgc28gdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHRoZXNlIHR3byBmdW5jdGlvbnMgaXMgdGhlIGtleSBhcmVhIGZvciBleGFtaW5hdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMjI6MzY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YWRkcmNvbmZfcHJlZml4X3JjdiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY2L2FkZHJjb25mLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjYvYWRkcmNvbmYuYz0xMzY5PXN0YXRpYyBpbnQgaXB2Nl9jcmVhdGVfdGVtcGFkZHIoc3RydWN0IGluZXQ2X2lmYWRkciAqaWZwLCBib29sIGJsb2NrKVxuLS1cbm5ldC9pcHY2L2FkZHJjb25mLmMtMTQ4My1cdGNmZy5pZmFfZmxhZ3MgPSBJRkFfRl9URU1QT1JBUlk7XG5uZXQvaXB2Ni9hZGRyY29uZi5jOjE0ODQ6XHQvKiBzZXQgaW4gYWRkcmNvbmZfcHJlZml4X3JjdigpICovXG5uZXQvaXB2Ni9hZGRyY29uZi5jLTE0ODUtXHRpZiAoaWZwLVx1MDAzZWZsYWdzIFx1MDAyNiBJRkFfRl9PUFRJTUlTVElDKVxuLS1cbm5ldC9pcHY2L2FkZHJjb25mLmM9MjY4OT1zdGF0aWMgYm9vbCBpc19hZGRyX21vZGVfZ2VuZXJhdGVfc3RhYmxlKHN0cnVjdCBpbmV0Nl9kZXYgKmlkZXYpXG4tLVxubmV0L2lwdjYvYWRkcmNvbmYuYy0yNjk0LVxubmV0L2lwdjYvYWRkcmNvbmYuYzoyNjk1OmludCBhZGRyY29uZl9wcmVmaXhfcmN2X2FkZF9hZGRyKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbm5ldC9pcHY2L2FkZHJjb25mLmMtMjY5Ni1cdFx0XHRcdCBjb25zdCBzdHJ1Y3QgcHJlZml4X2luZm8gKnBpbmZvLFxuLS1cbm5ldC9pcHY2L2FkZHJjb25mLmMtMjc5NS19XG5uZXQvaXB2Ni9hZGRyY29uZi5jOjI3OTY6RVhQT1JUX1NZTUJPTF9HUEwoYWRkcmNvbmZfcHJlZml4X3Jjdl9hZGRfYWRkcik7XG5uZXQvaXB2Ni9hZGRyY29uZi5jLTI3OTctXG5uZXQvaXB2Ni9hZGRyY29uZi5jOjI3OTg6dm9pZCBhZGRyY29uZl9wcmVmaXhfcmN2KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHU4ICpvcHQsIGludCBsZW4sIGJvb2wgc2xsYW8pXG5uZXQvaXB2Ni9hZGRyY29uZi5jLTI3OTkte1xuLS1cbm5ldC9pcHY2L2FkZHJjb25mLmMtMjk0My1vazpcbm5ldC9pcHY2L2FkZHJjb25mLmM6Mjk0NDpcdFx0ZXJyID0gYWRkcmNvbmZfcHJlZml4X3Jjdl9hZGRfYWRkcihuZXQsIGRldiwgcGluZm8sIGluNl9kZXYsXG5uZXQvaXB2Ni9hZGRyY29uZi5jLTI5NDUtXHRcdFx0XHRcdFx0ICAgXHUwMDI2YWRkciwgYWRkcl90eXBlLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAyMjozNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTAwMQoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDkyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IElQdjYgUm91dGUgSW52ZXN0aWdhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGRpdmluZyBpbnRvIHRoaXMgYGFkZHJjb25mX3ByZWZpeF9yY3ZgIHRoaW5nLiBJdCYjMzk7cyBnbG9iYWwsIHdoaWNoIGltbWVkaWF0ZWx5IGZsYWdzIGl0IGFzIHNvbWV0aGluZyBzaWduaWZpY2FudC4gVG8gcHJvcGVybHkgdW5kZXJzdGFuZCBpdHMgYmVoYXZpb3IsIEkgbmVlZCB0byBsb29rIGF0IGl0cyBpbnRlcmFjdGlvbnMgd2l0aCBhIGZldyBrZXkgZnVuY3Rpb25zOiBgaXA2X2RlbF9ydF9yZWFzb25gLCBgZmliNl9kZWxgLCBgaW5ldDZfcnRfbm90aWZ5YCwgYW5kIGBydDZfcm91dGVfcmN2YC4gVGhvc2UgYXJlIHRoZSBwcmltZSBzdXNwZWN0cyBmb3IgaW5mbHVlbmNpbmcgb3IgYmVpbmcgaW5mbHVlbmNlZCBieSBgYWRkcmNvbmZfcHJlZml4X3JjdmAuCgpCZWZvcmUgSSBkaWcgdG9vIGRlZXAsIEkgc2hvdWxkIGNoZWNrIHdoZXRoZXIgYENPTkZJR19JUFY2X1JPVVRFX0lORk9gIGhhcyBhbnkgZGVwZW5kZW5jaWVzLiBVbmRlcnN0YW5kaW5nIGFueSBwb3RlbnRpYWwgYnVpbGQtdGltZSBjb25zdHJhaW50cyBvciBjb25kaXRpb25hbCBiZWhhdmlvcnMgYXNzb2NpYXRlZCB3aXRoIHRoYXQgc2V0dGluZyBjb3VsZCBzYXZlIG1lIGEgbG90IG9mIHRpbWUgZG93biB0aGUgbGluZS4gVGhhdCYjMzk7cyBhIHNvbGlkIGZpcnN0IHN0ZXAuIExldCYjMzk7cyBzZWUgd2hhdCB0aGF0IHJldmVhbHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDIyOjM2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBJUFY2X1JPVVRFX0lORk8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXB2Ni9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY2L0tjb25maWc9MjE9Y29uZmlnIElQVjZfUk9VVEVSX1BSRUZcbi0tXG5uZXQvaXB2Ni9LY29uZmlnLTMwLVxubmV0L2lwdjYvS2NvbmZpZzozMTpjb25maWcgSVBWNl9ST1VURV9JTkZPXG5uZXQvaXB2Ni9LY29uZmlnLTMyLVx0Ym9vbCBcJiMzNDtJUHY2OiBSb3V0ZSBJbmZvcm1hdGlvbiAoUkZDIDQxOTEpIHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMjI6MzY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTk0MDcKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAxNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIHN1bW1hcml6ZWQgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRoZSBwcm92aWRlZCBwcm9tcHQ6CgoqKkFuYWx5emluZyB0aGUgRGVwZW5kZW5jeSBMYW5kc2NhcGUgb2YgSVBWNl9ST1VURV9JTkZPKioKCk9rYXksIHNvIHRoZSBwcm9tcHQgd2FudHMgbWUgdG8gYW5hbHl6ZSB0aGUgZGVwZW5kZW5jaWVzIG9mIGBJUFY2X1JPVVRFX0lORk9gLiBNeSBpbml0aWFsIGluc3RpbmN0LCBnaXZlbiBteSBleHBlcmllbmNlLCBpcyB0byBpbW1lZGlhdGVseSBzdGFydCB0aGlua2luZyBhYm91dCBob3cgdGhpcyByZWxhdGVzIHRvIG15IHNwZWNpZmljIGV4cGVydGlzZS4gSSYjMzk7bSBhc3N1bWluZyB0aGlzIGlzIGEgZGF0YSBzdHJ1Y3R1cmUgb3IgYSBjb25jZXB0IHdpdGhpbiB0aGUgY29udGV4dCBvZiBJUHY2IHJvdXRpbmcsIGxpa2VseSByZWxhdGVkIHRvIGhvdyByb3V0aW5nIGluZm9ybWF0aW9uIGlzIHN0b3JlZCBvciByZXByZXNlbnRlZC4KClRoZSB3b3JkICYjMzQ7ZGVwZW5kZW5jaWVzJiMzNDsgaXMgY3J1Y2lhbC4gSXQgc3VnZ2VzdHMgSSBuZWVkIHRvIGlkZW50aWZ5IGV2ZXJ5dGhpbmcgdGhhdCAqcmVsaWVzKiBvbiBgSVBWNl9ST1VURV9JTkZPYCwgYW5kIHBvdGVudGlhbGx5IHdoYXQgYElQVjZfUk9VVEVfSU5GT2AgaXRzZWxmIGRlcGVuZHMgdXBvbi4gSXMgdGhpcyBhYm91dCBzb2Z0d2FyZSBtb2R1bGVzLCBsaWJyYXJpZXMsIG9yIG5ldHdvcmsgY29uZmlndXJhdGlvbiBlbGVtZW50cz8gQXJlIHRoZXJlIGFzc29jaWF0ZWQgY29uZmlndXJhdGlvbiBmaWxlcyBvciBzeXN0ZW0gY2FsbHM/IEFyZSB3ZSB0YWxraW5nIGFib3V0IGEgZGF0YSBzdHJ1Y3R1cmUsIGEgZnVuY3Rpb24sIGEgbW9kdWxlLCBvciBzb21ldGhpbmcgZWxzZSBlbnRpcmVseT8KCk15IGJyYWluJiMzOTtzIGFscmVhZHkgbWFwcGluZyBvdXQgcG90ZW50aWFsIGFyZWFzIHRvIGludmVzdGlnYXRlOgoKKiAgICoqQ29kZToqKiBJZiBpdCYjMzk7cyBjb2RlLCBJJiMzOTtsbCBuZWVkIHRvIGxvb2sgZm9yIGAjaW5jbHVkZWAgc3RhdGVtZW50cywgZnVuY3Rpb24gY2FsbHMsIGFuZCBhbnkgb3RoZXIgaW5kaWNhdG9ycyBvZiBkaXJlY3QgdXNhZ2UuIFdoYXQgb3RoZXIgZnVuY3Rpb25zIG9yIGRhdGEgc3RydWN0dXJlcyByZWZlcmVuY2UgYElQVjZfUk9VVEVfSU5GT2A/IEFyZSB0aGVyZSB2ZXJzaW9uIGRlcGVuZGVuY2llcz8gQXJlIHRoZXJlIGRpZmZlcmVudCBpbXBsZW1lbnRhdGlvbnMgYWNyb3NzIGRpZmZlcmVudCBvcGVyYXRpbmcgc3lzdGVtcz8KKiAgICoqRG9jdW1lbnRhdGlvbjoqKiBJJiMzOTtsbCBjaGVjayByZWxldmFudCBSRkNzIChSZXF1ZXN0IGZvciBDb21tZW50cyksIG1hbiBwYWdlcywgYW5kIGtlcm5lbCBoZWFkZXJzIHJlbGF0ZWQgdG8gSVB2NiByb3V0aW5nLiBUaGVzZSByZXNvdXJjZXMgYXJlIGxpa2VseSB0byBkZWZpbmUgdGhlIHN0cnVjdHVyZSBhbmQgaXRzIHJlbGF0aW9uc2hpcHMuCiogICAqKlN5c3RlbSBDYWxscy9BUElzOioqIFdoYXQgc3lzdGVtIGNhbGxzIG9yIEFQSXMgbWlnaHQgaW50ZXJhY3Qgd2l0aCB0aGlzIGluZm9ybWF0aW9uPyBEb2VzIGl0IGludm9sdmUga2VybmVsIG1vZHVsZXMsIHJvdXRpbmcgZGFlbW9ucyAobGlrZSBgYmlyZGAgb3IgYGZycmApLCBvciBuZXR3b3JrIG1hbmFnZW1lbnQgdG9vbHM/IEFyZSB0aGVyZSBzcGVjaWZpYyB0b29scyB0aGF0IG1hbmlwdWxhdGUgb3IgZGlzcGxheSBkYXRhIGJhc2VkIG9uIGBJUFY2X1JPVVRFX0lORk9gPwoqICAgKipEYXRhIFN0cnVjdHVyZXM6KiogSWYgdGhpcyBpcyBhIGRhdGEgc3RydWN0dXJlLCBhcmUgdGhlcmUgb3RoZXIgZGF0YSBzdHJ1Y3R1cmVzIChlLmcuLCBsaW5rZWQgbGlzdHMsIHRhYmxlcykgdGhhdCBjb250YWluIG9yIGFyZSBjb250YWluZWQgd2l0aGluIGl0PyBXaGF0IGZpZWxkcyBhcmUgaW5jbHVkZWQsIGFuZCB3aGF0IGRvIHRob3NlIGZpZWxkcyByZXByZXNlbnQ/CiogICAqKkNvbmNlcHR1YWwgRGVwZW5kZW5jaWVzOioqIEJleW9uZCB0aGUgbGl0ZXJhbCBjb2RlL3N0cnVjdHVyZSBkZXBlbmRlbmNpZXMsIHdoYXQgKmxvZ2ljYWwqIGRlcGVuZGVuY2llcyBleGlzdD8gRm9yIGV4YW1wbGUsIHRoZSBwcm9wZXIgb3BlcmF0aW9uIG9mIGBJUFY2X1JPVVRFX0lORk9gIG1pZ2h0IGRlcGVuZCBvbiBjb3JyZWN0IElQdjYgYWRkcmVzcyBjb25maWd1cmF0aW9uLCBvciBhIGZ1bmN0aW9uaW5nIHJvdXRpbmcgcHJvdG9jb2wuCgpJbiBzaG9ydCwgSSYjMzk7bGwgYXBwcm9hY2ggdGhpcyBieSBjb25zaWRlcmluZyB0aGUgZGlyZWN0LCBpbmRpcmVjdCwgYW5kIGNvbmNlcHR1YWwgZGVwZW5kZW5jaWVzLCBhbHdheXMgdHJ5aW5nIHRvIHVuZGVyc3RhbmQgdGhlICYjMzk7d2h5JiMzOTsgYmVoaW5kIHRoZSAmIzM5O3doYXQmIzM5Oy4gVGhpcyBpcyBhIHByZXR0eSBzdHJhaWdodGZvcndhcmQgYW5hbHlzaXMgaW4gbXkgZmllbGQsIGJ1dCB0aGUgc3BlY2lmaWMgYXBwcm9hY2ggd2lsbCBkZXBlbmQgZW50aXJlbHkgb24gd2hhdCBjb250ZXh0IGFuZCB0eXBlIG9mIG9iamVjdCAmIzM0O0lQVjZfUk9VVEVfSU5GTyYjMzQ7IGlzIHJlcHJlc2VudGluZy4gTm93LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHNvbWUgc3BlY2lmaWNzLi4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDIyOjM2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2lwdjYvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDMxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgMzE6XHRjb25maWcgSVBWNl9ST1VURV9JTkZPXG4gIDMyOlx0XHRib29sIFwmIzM0O0lQdjY6IFJvdXRlIEluZm9ybWF0aW9uIChSRkMgNDE5MSkgc3VwcG9ydFwmIzM0O1xuICAzMzpcdFx0ZGVwZW5kcyBvbiBJUFY2X1JPVVRFUl9QUkVGXG4gIDM0Olx0XHRoZWxwXG4gIDM1Olx0XHQgIFN1cHBvcnQgb2YgUm91dGUgSW5mb3JtYXRpb24uXG4gIDM2Olx0XG4gIDM3Olx0XHQgIElmIHVuc3VyZSwgc2F5IE4uXG4gIDM4Olx0XG4gIDM5Olx0Y29uZmlnIElQVjZfT1BUSU1JU1RJQ19EQURcbiAgNDA6XHRcdGJvb2wgXCYjMzQ7SVB2NjogRW5hYmxlIFJGQyA0NDI5IE9wdGltaXN0aWMgREFEXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDIyOjM2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwMTYyCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGFzIHlvdSByZXF1ZXN0ZWQ6CgoqKk5hdmlnYXRpbmcgdGhlIElQdjYgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyB0aGUgYmVoYXZpb3IgaGVyZSBpcyBkZWZpbml0ZWx5IGluZmx1ZW5jZWQgYnkgYElQVjZfUk9VVEVSX1BSRUZgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIHN5c3RlbSBpcyByZWFjdGluZyB0byB0aGUgUm91dGVyIFByZWZlcmVuY2Ugc2V0dGluZy4gVGhlIGNvbmZpZ3VyYXRpb24gaXMgY2xlYXJseSBkZXBlbmRlbnQgb24gaXQsIHNvIGxldCYjMzk7cyBzdGFydCBieSBpc29sYXRpbmcgaXRzIHZhbHVlLiBJIG5lZWQgdG8gemVybyBpbiBvbiB0aGUgZXhhY3Qgc3RhdGUgb2YgYElQVjZfUk9VVEVSX1BSRUZgIHRvIHRyYWNlIHRoZSBleGVjdXRpb24gcGF0aCBhbmQgZGV0ZXJtaW5lIHRoZSBjdXJyZW50IG91dGNvbWUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDIyOjM2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2lwdjYvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDIxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgMjE6XHRjb25maWcgSVBWNl9ST1VURVJfUFJFRlxuICAyMjpcdFx0Ym9vbCBcJiMzNDtJUHY2OiBSb3V0ZXIgUHJlZmVyZW5jZSAoUkZDIDQxOTEpIHN1cHBvcnRcJiMzNDtcbiAgMjM6XHRcdGhlbHBcbiAgMjQ6XHRcdCAgUm91dGVyIFByZWZlcmVuY2UgaXMgYW4gb3B0aW9uYWwgZXh0ZW5zaW9uIHRvIHRoZSBSb3V0ZXJcbiAgMjU6XHRcdCAgQWR2ZXJ0aXNlbWVudCBtZXNzYWdlIHdoaWNoIGltcHJvdmVzIHRoZSBhYmlsaXR5IG9mIGhvc3RzXG4gIDI2Olx0XHQgIHRvIHBpY2sgYW4gYXBwcm9wcmlhdGUgcm91dGVyLCBlc3BlY2lhbGx5IHdoZW4gdGhlIGhvc3RzXG4gIDI3Olx0XHQgIGFyZSBwbGFjZWQgaW4gYSBtdWx0aS1ob21lZCBuZXR3b3JrLlxuICAyODpcdFxuICAyOTpcdFx0ICBJZiB1bnN1cmUsIHNheSBOLlxuICAzMDpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAyMjozNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDQ3OQoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDE0OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB1bmRlcnN0YW5kaW5nLCBjb25zaWRlcmluZyBJIG5lZWQgdG8gZ2V0IHRoaXMgcmlnaHQ6CgoqKkNvbmZpZ3VyYXRpb24gRGVwZW5kZW5jaWVzIGZvciBJUHY2IFJvdXRpbmcqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gRnJvbSB3aGF0IEkmIzM5O20gc2VlaW5nLCB0byBtYWtlIHRoaXMgd29yayBjb3JyZWN0bHksIEkgZGVmaW5pdGVseSBuZWVkIHRvIGVuYWJsZSBgSVBWNl9ST1VURVJfUFJFRmAgYW5kIGBJUFY2X1JPVVRFX0lORk9gLiBUaG9zZSBhcmUgY3J1Y2lhbC4gQW5kLCBvYnZpb3VzbHksIGBJUFY2YCBuZWVkcyB0byBiZSBlbmFibGVkIGFzIHdlbGw7IHRoYXQmIzM5O3MgdGhlIGZvdW5kYXRpb24gaGVyZS4KCk5vdywgSSBzaG91bGQgZG8gYSBxdWljayBzd2VlcCB0byBzZWUgaWYgdGhlcmUgYXJlIGFueSBvdGhlciByZWxhdGVkIGNvbmZpZ3VyYXRpb25zIHRoYXQgYXJlIGFsc28gaW52b2x2ZWQuIExvb2tpbmcgYXQgdGhlIHBhdGNoJiMzOTtzIGZpbGUgbW9kaWZpY2F0aW9ucyDigJMgYG5ldC9pcHY2L3JvdXRlLmNgLCBgbmV0L2lwdjYvaXA2X2ZpYi5jYCwgYG5ldC9pcHY2L2FkZHJjb25mLmNgLCBhbmQgYG5ldC9pcHY2L25kaXNjLmNgIOKAkyB0aGF0IGNvbmZpcm1zIHRoZXNlIGFyZSBhbGwgcGFydCBvZiB0aGUgYENPTkZJR19JUFY2YCBmYW1pbHkuCgpUaGVyZWZvcmUsIHRoZSBjb3JlIGNvbmZpZ3VyYXRpb25zIEkgbmVlZCB0byBmb2N1cyBvbiBmb3IgdGhpcyBpbnRlZ3JhdGlvbiBhcmUgYElQVjZgLCBgSVBWNl9ST1VURVJfUFJFRmAsIGFuZCBgSVBWNl9ST1VURV9JTkZPYC4KCkZpbmFsbHksIEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgdGhlIGJlaGF2aW9yIG9mIGBpcDZfZGVsX3J0X3JlYXNvbmAuIFRoaXMgaXMgdGhlIGNvcmUgb2YgdGhpcyBwYXRjaCwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhhdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMjI6MzY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aXA2X2RlbF9ydF9yZWFzb24mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtpbmNsdWRlL25ldC9pcDZfcm91dGUuaCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL25ldC9pcDZfcm91dGUuaD0xMzA9aW50IGlwNl9kZWxfcnQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZmliNl9pbmZvICpmNmksIGJvb2wgc2tpcF9ub3RpZnkpO1xuaW5jbHVkZS9uZXQvaXA2X3JvdXRlLmg6MTMxOmludCBpcDZfZGVsX3J0X3JlYXNvbihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBmaWI2X2luZm8gKmY2aSwgYm9vbCBza2lwX25vdGlmeSxcbmluY2x1ZGUvbmV0L2lwNl9yb3V0ZS5oLTEzMi1cdFx0ICAgICAgdTMyIGRlbF9yZWFzb24pO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAyMjozNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTA2MgoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDI4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHN1bW1hcml6ZWQgdGhvdWdodCBwcm9jZXNzLCBwcmVzZW50ZWQgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIGl0OgoKKipFeGFtaW5pbmcgSVB2NiBSb3V0aW5nIFRhYmxlIERlbGV0aW9uKioKClJpZ2h0LCBzbyBJIHNlZSB0aGlzIHJlbGF0ZWQgdG8gYGlwNl9yb3V0ZS5oYC4gSXQmIzM5O3MgZGVjbGFyZWQgdGhlcmUsIHdoaWNoIGlzIGhlbHBmdWwgdG8ga25vdyBpbW1lZGlhdGVseS4KCk5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGRlbGV0aW9uIHByb2Nlc3MuIE15IG5leHQgc3RlcCB3aWxsIGJlIHRvIGRpdmUgaW50byB0aGUgYGZpYjZfZGVsYCBmdW5jdGlvbiwgYW5kIHNlZSBob3cgaXQgaXMgaW1wbGVtZW50ZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDIyOjM2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2ZpYjZfZGVsJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW5jbHVkZS9uZXQvaXA2X2ZpYi5oJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbmV0L2lwNl9maWIuaD00Njk9aW50IGZpYjZfYWRkKHN0cnVjdCBmaWI2X25vZGUgKnJvb3QsIHN0cnVjdCBmaWI2X2luZm8gKnJ0LFxuaW5jbHVkZS9uZXQvaXA2X2ZpYi5oLTQ3MC1cdCAgICAgc3RydWN0IG5sX2luZm8gKmluZm8sIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjayk7XG5pbmNsdWRlL25ldC9pcDZfZmliLmg6NDcxOmludCBmaWI2X2RlbChzdHJ1Y3QgZmliNl9pbmZvICpydCwgc3RydWN0IG5sX2luZm8gKmluZm8sIHUzMiBkZWxfcmVhc29uKTtcbmluY2x1ZGUvbmV0L2lwNl9maWIuaC00NzItXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDIyOjM2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxMzY1CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMzAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aG9zZSB0aG91Z2h0cyBmcm9tIGFuIGV4cGVydCYjMzk7cyBwZXJzcGVjdGl2ZSwgdXNpbmcgdGhlIGZpcnN0IHBlcnNvbiBhbmQgYWltaW5nIGZvciBhIGZ1bHNvbWUgZXhwbGFuYXRpb246CgoqKldvcmtpbmcgVGhyb3VnaCBJUHY2IEZJQiBOb3RpZmljYXRpb24gSW1wbGVtZW50YXRpb24qKgoKQWxyaWdodCwgc28gdGhlIG5vdGlmaWNhdGlvbiBtZWNoYW5pc20gZm9yIElQdjYgRklCIGNoYW5nZXMuLi4gcmlnaHQsIHRoYXQmIzM5O3MgZGVmaW5lZCwgb3IgYXQgbGVhc3QgZGVjbGFyZWQsIGluIGBpbmNsdWRlL25ldC9pcDZfZmliLmhgLiBUaGF0JiMzOTtzIHRoZSBleHBlY3RlZCBsb2NhdGlvbi4gR29vZCB0byBrbm93IGl0JiMzOTtzIHdoZXJlIGl0IHNob3VsZCBiZS4gVGhlIGhlYWRlciBzaG91bGQgZ2l2ZSBtZSB0aGUgY29yZSBkYXRhIHN0cnVjdHVyZXMgYW5kIGZ1bmN0aW9uIHByb3RvdHlwZXMgaW52b2x2ZWQuCgpOb3csIHdoZXJlIGRvIEkgbmVlZCB0byBnbyB0byB1bmRlcnN0YW5kIGhvdyB0aGVzZSBub3RpZmljYXRpb25zIGFyZSBhY3R1YWxseSAqaGFuZGxlZCo/IExldCBtZSBzZWUuLi4gSSBuZWVkIHRvIHJlZnJlc2ggbXlzZWxmIG9uIGhvdyB0aGUgSVB2NiByb3V0aW5nIHRhYmxlIGlzIG1hbmFnZWQsIHNvIEkmIzM5O2xsIHdhbnQgdG8gZGlnIGludG8gYGluZXQ2X3J0X25vdGlmeWAuIFRoYXQmIzM5O3MgdXN1YWxseSB0aGUgZW50cnkgcG9pbnQgZm9yIHRob3NlIGtpbmRzIG9mIGV2ZW50cy4gSXQmIzM5O3MgYWxtb3N0IGNlcnRhaW5seSB0aGUgZnVuY3Rpb24gdGhhdCBnZXRzIGNhbGxlZCB3aGVuIHNvbWV0aGluZyBpbiB0aGUgcm91dGluZyB0YWJsZSBjaGFuZ2VzIOKAkyBhIHJvdXRlIGlzIGFkZGVkLCBkZWxldGVkLCB1cGRhdGVkLiBJdCBtYWtlcyBzZW5zZSB0aGF0JiMzOTtzIHRoZSBmdW5jdGlvbiBJIHdvdWxkIHdhbnQgdG8gY2hlY2suIEhvcGVmdWxseSBpdCBpcyB1c2luZyBzb21lIGhlbHBlcnMgdG8ga2VlcCB0aGluZ3MgZWZmaWNpZW50LiBJJiMzOTttIGd1ZXNzaW5nIHRoYXQgdGhpcyB3aWxsIGJlIGNhbGxpbmcgb3RoZXIgZnVuY3Rpb25zIHRvIG1hbmFnZSB0aGUgdmFyaW91cyBjYWNoZXMgYW5kIGxpc3RlbmVycy4gSG9wZWZ1bGx5LCBhbGwgdGhlIHJpZ2h0IGxvY2tpbmcgaXMgZG9uZSBpbiB0aGlzIHNlY3Rpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDIyOjM2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2luZXQ2X3J0X25vdGlmeSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2luY2x1ZGUvbmV0L2lwNl9maWIuaCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL25ldC9pcDZfZmliLmg9NTI4PXN0YXRpYyBpbmxpbmUgdm9pZCBmaWI2X3J0X3VwZGF0ZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBmaWI2X2luZm8gKnJ0LFxuLS1cbmluY2x1ZGUvbmV0L2lwNl9maWIuaC01MzItI2VuZGlmXG5pbmNsdWRlL25ldC9pcDZfZmliLmg6NTMzOnZvaWQgaW5ldDZfcnRfbm90aWZ5KGludCBldmVudCwgc3RydWN0IGZpYjZfaW5mbyAqcnQsIHN0cnVjdCBubF9pbmZvICppbmZvLFxuaW5jbHVkZS9uZXQvaXA2X2ZpYi5oLTUzNC1cdFx0ICAgICB1bnNpZ25lZCBpbnQgZmxhZ3MsIHUzMiBkZWxfcmVhc29uKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMjI6MzY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjE4MzQKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAzMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgSVB2NiBGSUIgUm91dGUgUmV0cmlldmFsKioKCkFscmlnaHQsIHNvIHRoZSBjb3JlIHN0cnVjdHVyZSBmb3IgdGhlIElQdjYgRm9yd2FyZGluZyBJbmZvcm1hdGlvbiBCYXNlIChGSUIpIOKAkyB0aGF0JiMzOTtzIGBpcDZfZmliLmhgLCBuYXR1cmFsbHkuIFRoYXQmIzM5O3Mgd2hlcmUgdGhlIGRlZmluaXRpb24gaXMuIEl0JiMzOTtzIHRoZSBzdGFydGluZyBwb2ludC4gTXkgYXR0ZW50aW9uIGlzIGltbWVkaWF0ZWx5IGRyYXduIHRvIHRoZSByb3V0ZSByZXRyaWV2YWwgcGF0aCwgc28gbGV0JiMzOTtzIGRpZyBpbnRvIGBydDZfcm91dGVfcmN2YC4gVGhhdCYjMzk7cyB3aGVyZSB0aGUgY3JpdGljYWwgcHJvY2Vzc2luZyBoYXBwZW5zLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBleGFjdGx5IGhvdyB0aGUgc3lzdGVtIGxvb2tzIHVwIHRoZSByb3V0ZS4gSSYjMzk7bGwgbmVlZCB0byBmb2N1cyBvbiB3aGF0IGhhcHBlbnMgd2l0aGluIHRoYXQgZnVuY3Rpb24sIGluIG9yZGVyIHRvIHRyYWNrIGhvdyBpdCBtYWtlcyBpdHMgZGVjaXNpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAyMjozNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtydDZfcm91dGVfcmN2JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW5jbHVkZS9uZXQvaXA2X3JvdXRlLmgmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9uZXQvaXA2X3JvdXRlLmg9MjAxPXZvaWQgcnQ2X3B1cmdlX2RmbHRfcm91dGVycyhzdHJ1Y3QgbmV0ICpuZXQpO1xuaW5jbHVkZS9uZXQvaXA2X3JvdXRlLmgtMjAyLVxuaW5jbHVkZS9uZXQvaXA2X3JvdXRlLmg6MjAzOmludCBydDZfcm91dGVfcmN2KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHU4ICpvcHQsIGludCBsZW4sXG5pbmNsdWRlL25ldC9pcDZfcm91dGUuaC0yMDQtXHRcdCAgY29uc3Qgc3RydWN0IGluNl9hZGRyICpnd2FkZHIpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAyMjozNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMjE3NwoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDMxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhvc2UgdGhvdWdodHMgZnJvbSBhbiBleHBlcnQmIzM5O3MgcGVyc3BlY3RpdmUsIHVzaW5nIHRoZSBmaXJzdCBwZXJzb24gYW5kIGFpbWluZyBmb3IgYSBmdWxzb21lIGV4cGxhbmF0aW9uOgoKKipXb3JraW5nIHdpdGggSVB2NiBSb3V0aW5nIGluIHRoZSBMaW51eCBLZXJuZWwqKgoKUmlnaHQsIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIElQdjYgcm91dGluZyB3aXRoaW4gdGhlIGtlcm5lbCwgYW5kIHRoZSBmaXJzdCB0aGluZyB0aGF0IGp1bXBzIG91dCBpcyB0aGF0IHRoZSBjcnVjaWFsIGRlY2xhcmF0aW9uIGZvciB0aGlzIHN0dWZmLCB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGFuZCByZWxhdGVkIGRlZmluaXRpb25zLCBpcyBsb2NhdGVkIHJpZ2h0IGluIGBpbmNsdWRlL25ldC9pcDZfcm91dGUuaGAuIFRoYXQmIzM5O3MgdGhlIGxvZ2ljYWwgcGxhY2UgdG8gc3RhcnQg4oCTIGdvb2QsIGdvb2QuIEnigJlsbCBtYWtlIGEgbWVudGFsIG5vdGUgb2YgdGhhdCBmaWxlIGFuZCBpdHMgY29udGVudHMgZm9yIGxhdGVyIHJlZmVyZW5jZTsgaXQmIzM5O3MgcHJhY3RpY2FsbHkgdGhlIElQdjYgcm91dGluZyBiaWJsZS4KCk5vdywgd2hlcmUgZG8gSSB3YW50IHRvIHN0YXJ0IG15IGludmVzdGlnYXRpb24/IEFoLCB5ZXMsIEkmIzM5O20gdHJ5aW5nIHRvIGdyb2sgaG93IGl0JiMzOTtzIGRlYWxpbmcgd2l0aC4uLiBvaCwgd2FpdCBhIG1pbnV0ZSwgSSB0aGluayBgYWRkcmNvbmZfcHJlZml4X3JjdmAgaXMgdGhlIHRoaW5nIHRoYXQmIzM5O3MgcmVsZXZhbnQgdG8gd2hhdCBJIGFtIGxvb2tpbmcgYXQuIEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgaG93IHRoZSBJUHY2IGFkZHJlc3MgY29uZmlndXJhdGlvbiBpbnRlcmFjdHMgd2l0aCB0aGUgcm91dGluZyBwcm9jZXNzLCBzbyBgYWRkcmNvbmZfcHJlZml4X3JjdmAgaXMgZGVmaW5pdGVseSBhIGdvb2QgY2FuZGlkYXRlIHRvIHNlZSB3aGVyZSB0aGUgaW5jb21pbmcgcHJlZml4ZXMgYXJlIGhhbmRsZWQuIEkgdGhpbmsgdGhpcyB3aWxsIGJlIGFuIGV4Y2VsbGVudCBzdGFydGluZyBwb2ludCwgdGhpcyBjb3VsZCBsZWFkIHRvIHRoZSBkYXRhIEkgYW0gbG9va2luZyBmb3IuIEkmIzM5O2xsIGRlbHZlIGludG8gdGhlIGNvZGUgdGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDIyOjM3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2FkZHJjb25mX3ByZWZpeF9yY3YmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtpbmNsdWRlL25ldC9hZGRyY29uZi5oJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbmV0L2FkZHJjb25mLmg9MTUzPXZvaWQgYWRkcmNvbmZfYWRkX2xpbmtsb2NhbChzdHJ1Y3QgaW5ldDZfZGV2ICppZGV2LFxuLS1cbmluY2x1ZGUvbmV0L2FkZHJjb25mLmgtMTU1LVxuaW5jbHVkZS9uZXQvYWRkcmNvbmYuaDoxNTY6aW50IGFkZHJjb25mX3ByZWZpeF9yY3ZfYWRkX2FkZHIoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuaW5jbHVkZS9uZXQvYWRkcmNvbmYuaC0xNTctXHRcdFx0XHQgY29uc3Qgc3RydWN0IHByZWZpeF9pbmZvICpwaW5mbyxcbi0tXG5pbmNsdWRlL25ldC9hZGRyY29uZi5oPTI4Mj1zdGF0aWMgaW5saW5lIGJvb2wgaXB2Nl9pc19tbGQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IG5leHRoZHIsIGludCBvZmZzZXQpXG4tLVxuaW5jbHVkZS9uZXQvYWRkcmNvbmYuaC0zMDMtXG5pbmNsdWRlL25ldC9hZGRyY29uZi5oOjMwNDp2b2lkIGFkZHJjb25mX3ByZWZpeF9yY3Yoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbmluY2x1ZGUvbmV0L2FkZHJjb25mLmgtMzA1LVx0XHRcdCB1OCAqb3B0LCBpbnQgbGVuLCBib29sIHNsbGFvKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMjI6Mzc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjI3NTQKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiA0MjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBJUHY2IFJvdXRlIERlbGV0aW9uIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBteSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCBpdCB0b3VjaGVzIHNvbWUgaW1wb3J0YW50IHBhcnRzIG9mIHRoZSBJUHY2IHJvdXRpbmcgc3RhY2suIEl0JiMzOTtzIGRlY2xhcmVkIGluIGBpbmNsdWRlL25ldC9hZGRyY29uZi5oYCwgc28gd2UmIzM5O3JlIHRhbGtpbmcgYWJvdXQgY29yZSBmdW5jdGlvbmFsaXR5LiBJIGltbWVkaWF0ZWx5IHplcm8gaW4gb24gdGhlIGtleSBzeW1ib2xzIGludm9sdmVkOiBgaXA2X2RlbF9ydF9yZWFzb25gLCBgZmliNl9kZWxgLCBgaW5ldDZfcnRfbm90aWZ5YCwgYHJ0Nl9yb3V0ZV9yY3ZgLCBhbmQgYGFkZHJjb25mX3ByZWZpeF9yY3ZgLiBUaG9zZSBsb29rIGxpa2UgdGhlIG1haW4gcGxheWVycyBoZXJlLCBhbG9uZyB3aXRoIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9uIG9wdGlvbnM6IGBJUFY2YCwgYElQVjZfUk9VVEVSX1BSRUZgLCBhbmQgYElQVjZfUk9VVEVfSU5GT2AuCgpUaGUgZ2lzdCBvZiBpdCBpcyB0aGUgaW50cm9kdWN0aW9uIG9mIGEgbmV3IG5ldGxpbmsgYXR0cmlidXRlLCBgUlRBX0RFTF9SRUFTT05gLCBhbmQgdGhlIG1vZGlmaWNhdGlvbiBvZiBob3cgSVB2NiByb3V0ZXMgYXJlIGRlbGV0ZWQsIHNwZWNpZmljYWxseSBhZGRpbmcgYSByZWFzb24gY29kZSB3aGVuIGEgcm91dGUgZXhwaXJlcyBvciBpcyB3aXRoZHJhd24gdmlhIGEgUm91dGVyIEFkdmVydGlzZW1lbnQgKFJBKS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlLiBJdCYjMzk7cyBub3QganVzdCBhIHJlZmFjdG9yOyB3ZSYjMzk7cmUgZnVuZGFtZW50YWxseSBhbHRlcmluZyB0aGUgaW5mb3JtYXRpb24gcHJvdmlkZWQgd2hlbiBhIHJvdXRlIGlzIHJlbW92ZWQuCgpNeSBpbml0aWFsIHJlYXNvbmluZyBpcyB0aGF0LCBzaW5jZSB0aGlzIHRvdWNoZXMgY29yZSByb3V0aW5nIGxvZ2ljIGFuZCBuZWlnaGJvciBkaXNjb3ZlcnkgZnVuY3Rpb25zLCBpdCYjMzk7cyBhIGdvb2QgY2FuZGlkYXRlIGZvciBmdXp6aW5nLiBUaGUgcGF0Y2ggbW9kaWZpZXMgY3JpdGljYWwgZnVuY3Rpb25zIGxpa2UgYGlwNl9kZWxfcnRfcmVhc29uYCwgYGZpYjZfZGVsYCwgYGluZXQ2X3J0X25vdGlmeWAsIGBydDZfcm91dGVfcmN2YCwgYW5kIGBhZGRyY29uZl9wcmVmaXhfcmN2YCB0byBwb3B1bGF0ZSB0aGF0IG5ldyBhdHRyaWJ1dGUsIGBSVEFfREVMX1JFQVNPTmAuIEV4cGlyYXRpb24gYW5kIFJBIHdpdGhkcmF3YWwgYXJlIGNvbW1vbiBjb25kaXRpb25zLiBXZSBuZWVkIHRvIGJlIGFibGUgdG8ga25vdyB3aHkgYSByb3V0ZSBkaXNhcHBlYXJlZC4KCkxldCBtZSBkb3VibGUtY2hlY2sgd2hpY2ggb2YgdGhlc2UgZnVuY3Rpb25zIGlzIHRoZSBtb3N0IGludGVyZXN0aW5nIHRvIGZvY3VzIG9uLiBSaWdodCwgYGlwNl9kZWxfcnRfcmVhc29uYCBsb29rcyBwcm9taXNpbmcuIEl0JiMzOTtzIGEgd3JhcHBlciBhcm91bmQgYF9faXA2X2RlbF9ydGAsIGJ1dCB0aGUgd3JhcHBlciBpdHNlbGYgaXMgZXhwb3J0ZWQsIHdoaWNoIGlzIGEgZ29vZCBzdGFydGluZyBwb2ludC4gYF9faXA2X2RlbF9ydGAgaXMgc3RhdGljIGludGVybmFsbHksIGJ1dCB0aGUgd3JhcHBlciBpcyBnbG9iYWwuIEFsc28sIGBmaWI2X2RlbGAsIGBpbmV0Nl9ydF9ub3RpZnlgLCBgcnQ2X3JvdXRlX3JjdmAsIGFuZCBgYWRkcmNvbmZfcHJlZml4X3JjdmAgYXJlIGFsbCBleHBvcnRlZCwgc28gdGhvc2UgYXJlIGdvb2QgbGVhZHMuCgpIb2xkIG9uLCBJIG5lZWQgdG8gY2hlY2sgc29tZXRoaW5nLi4uIEl0IGxvb2tzIGxpa2UgYGlwNl9kZWxfcnRfcmVhc29uYCBpcyBhY3R1YWxseSAqbm90KiBleHBsaWNpdGx5IGV4cG9ydGVkLCBidXQgaXQmIzM5O3MgZ2xvYmFsLiBJdCBpcyBnbG9iYWwuIEkgbmVlZCB0byBjb25maXJtIHdoZXRoZXIgdGhlIGZ1bmN0aW9uIGlzIHRydWx5IGFjY2Vzc2libGUgZXh0ZXJuYWxseSBvciBub3QuIEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgdGhlIHN5bWJvbCB0YWJsZSBhZ2Fpbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMjI6Mzc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtFWFBPUlRfU1lNQk9MLippcDZfZGVsX3J0X3JlYXNvbiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY2L3JvdXRlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAyMjozNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMzc3OAoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDI4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqTmF2aWdhdGluZyBTY29wZSBhbmQgRnVuY3Rpb25hbGl0eSoqCgpBbHJpZ2h0LCBzbyB0aGUgZnVuY3Rpb24gaW4gcXVlc3Rpb24gaXNuJiMzOTt0IGV4cGxpY2l0bHkgZXhwb3J0ZWQsIGJ1dCBpdCYjMzk7cyBjbGVhcmx5IGFjY2Vzc2libGUgZ2xvYmFsbHkuIFRoYXQmIzM5O3MgYWN0dWFsbHkgcGVyZmVjdGx5IGFjY2VwdGFibGUgaW4gdGhpcyBwYXJ0aWN1bGFyIGFyY2hpdGVjdHVyYWwgY29udGV4dDsgaXQgYWxpZ25zIHdpdGggdGhlIG92ZXJhbGwgZGVzaWduIHBoaWxvc29waHkgYW5kIGludGVuZGVkIHVzYWdlLiBObyBuZWVkIHRvIHdvcnJ5IGFib3V0IGV4dGVybmFsIGV4cG9zdXJlIG9yIG1vZHVsZSBib3VuZGFyaWVzIGluIHRoaXMgY2FzZS4KCk5vdywgbGV0JiMzOTtzIHR1cm4gb3VyIGF0dGVudGlvbiB0byBgZmliNl9kZWxgLiBUaGF0JiMzOTtzIHRoZSBrZXkgZWxlbWVudCB3ZSBuZWVkIHRvIGV4YW1pbmUgbmV4dC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMjI6Mzc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtFWFBPUlRfU1lNQk9MLipmaWI2X2RlbCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY2L2lwNl9maWIuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDIyOjM3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIzOTc5CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqS2VybmVsIFJvdXRpbmcgVGFibGUgTm90aWZpY2F0aW9uIEFuYWx5c2lzKioKCk9rYXksIHNvIHRoaXMgaXNuJiMzOTt0IGFib3V0IGFueXRoaW5nIEkmIzM5O3ZlIGV4cGxpY2l0bHkgZXhwb3J0ZWQgZnJvbSB0aGUgbW9kdWxlIOKAkyBpdCYjMzk7cyBzb21ldGhpbmcgdGhhdCYjMzk7cyBnbG9iYWxseSBhY2Nlc3NpYmxlLCB3aGljaCBpbW1lZGlhdGVseSBjaGFuZ2VzIGhvdyBJIG5lZWQgdG8gYXBwcm9hY2ggdGhpcy4gIEkmIzM5O20gZGlnZ2luZyBpbnRvIHNvbWV0aGluZyB0aGF0LCB3aGlsZSBjcml0aWNhbCwgaXNuJiMzOTt0IG5lY2Vzc2FyaWx5IHdpdGhpbiBhIGRlZmluZWQgaW50ZXJmYWNlLiBUaGF0IHNpZ25hbHMgYSBwb3RlbnRpYWwgZm9yIG1vcmUgd2lkZXNwcmVhZCBpbXBhY3QsIGFuZCByZXF1aXJlcyBhIGJyb2FkZXIgdW5kZXJzdGFuZGluZyB0byBhdm9pZCBicmVha2luZyBzb21ldGhpbmcgZWxzZS4KClJpZ2h0LCBsZXQmIzM5O3MgZHJpbGwgZG93bi4gIE15IG5leHQgbW92ZSBpcyBjbGVhcjogSSBuZWVkIHRvIHNjcnV0aW5pemUgYGluZXQ2X3J0X25vdGlmeWAuICBUaGF0IHJvdXRpbmUgaXMgdGhlIGtleSDigJMgaXQmIzM5O3MgdGhlIHBvaW50IG9mIGludGVyZXN0IGZvciByb3V0ZSB0YWJsZSBjaGFuZ2Ugbm90aWZpY2F0aW9ucyBpbiB0aGUgSVB2NiBjb250ZXh0LiAgSSYjMzk7bSBleHBlY3RpbmcgdGhpcyB0byBiZSB0aGUgY29yZSBvZiBteSBhbmFseXNpcy4gIEnigJlsbCBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBub3RpZmljYXRpb24gaXMgdHJpZ2dlcmVkLCB3aGF0IGRhdGEgaXMgcGFzc2VkLCBhbmQgd2hvIHRoZSBjb25zdW1lcnMgb2YgdGhlIG5vdGlmaWNhdGlvbiBhcmUuIFRoZSBnb2FsIGlzIHRvIGZ1bGx5IHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzIGdsb2JhbCBwb2ludC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMjI6Mzc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtFWFBPUlRfU1lNQk9MLippbmV0Nl9ydF9ub3RpZnkmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXB2Ni9yb3V0ZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMjI6Mzc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjQyNjQKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAyMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOgoKKipVbmNvdmVyaW5nIHRoZSBHbG9iYWwgU2lnbmlmaWNhbmNlKioKCk9rYXksIHNvIHRoaXMgaXNuJiMzOTt0IGFib3V0IHNvbWV0aGluZyBzcGVjaWZpY2FsbHkgZXhwb3J0ZWQ7IGl0JiMzOTtzIGdvdCBhIGJyb2FkZXIsIG1vcmUgZW5jb21wYXNzaW5nIGluZmx1ZW5jZS4gTXkgbWluZCBpbW1lZGlhdGVseSBqdW1wcyB0byBpbXBsaWNhdGlvbnMgYmV5b25kIGEgbG9jYWwgc2NvcGUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBiaWcgcGljdHVyZS4gTGV0JiMzOTtzIHNlZS4uLiBzaW5jZSBpdCYjMzk7cyBnbG9iYWwsIGEgZ29vZCBwbGFjZSB0byBzdGFydCBkaWdnaW5nIGlzIGF0IGBydDZfcm91dGVfcmN2YC4gVGhhdCYjMzk7cyB3aGVyZSBJIGNhbiB0cmFjZSB0aGUgcGF0aCBhbmQgaW50ZXJhY3Rpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAyMjozNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0VYUE9SVF9TWU1CT0wuKnJ0Nl9yb3V0ZV9yY3YmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXB2Ni9yb3V0ZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMjI6Mzc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjQ0MzgKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiAyMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIHRoZSBTY29wZSBvZiBhIFZhcmlhYmxlKioKCkhtbSwgdGhpcyB2YXJpYWJsZSBpc24mIzM5O3QgZXhwbGljaXRseSBleHBvcnRlZCwgd2hpY2ggaXMgYSBrZXkgY2x1ZS4gVGhhdCBzdWdnZXN0cyBpdCYjMzk7cyBsaWtlbHkgc2NvcGVkIGdsb2JhbGx5IHdpdGhpbiB0aGUgY3VycmVudCBtb2R1bGUgb3IgY29udGV4dC4gSSBuZWVkIHRvIGNvbmZpcm0gdGhpcyB1bmRlcnN0YW5kaW5nLCBiZWNhdXNlIGlmIGl0JiMzOTtzIHVuaW50ZW50aW9uYWxseSBnbG9iYWwsIGl0IGNvdWxkIGxlYWQgdG8gdW5leHBlY3RlZCBpbnRlcmFjdGlvbnMgb3Igc2lkZSBlZmZlY3RzIGxhdGVyLgoKTXkgbmV4dCBzdGVwIGlzIHRvIGV4YW1pbmUgYGFkZHJjb25mX3ByZWZpeF9yY3ZgLiBUaGF0IGZ1bmN0aW9uIChvciBkYXRhIHN0cnVjdHVyZSwgZGVwZW5kaW5nIG9uIGNvbnRleHQpIGlzIHByb2JhYmx5IHdoZXJlIHRoaXMgZ2xvYmFsIHZhcmlhYmxlIGlzIGRlZmluZWQsIHVzZWQsIG9yIG1vZGlmaWVkLiBJJiMzOTtsbCBuZWVkIHRvIHNjcnV0aW5pemUgdGhhdCBwaWVjZSBvZiB0aGUgY29kZSB0byB2ZXJpZnkgaXRzIHRydWUgc2NvcGUgYW5kIGltcGFjdC4gVGhlIGxhY2sgb2YgYW4gZXhwbGljaXQgZXhwb3J0IHN0cm9uZ2x5IHN1Z2dlc3RzIGFuIGltcGxpY2l0LCBhbmQgcG90ZW50aWFsbHkgcHJvYmxlbWF0aWMsIGdsb2JhbCBzY29wZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMjI6Mzc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7RVhQT1JUX1NZTUJPTC4qYWRkcmNvbmZfcHJlZml4X3JjdiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY2L2FkZHJjb25mLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjYvYWRkcmNvbmYuYz0yNjk1PWludCBhZGRyY29uZl9wcmVmaXhfcmN2X2FkZF9hZGRyKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbi0tXG5uZXQvaXB2Ni9hZGRyY29uZi5jLTI3OTUtfVxubmV0L2lwdjYvYWRkcmNvbmYuYzoyNzk2OkVYUE9SVF9TWU1CT0xfR1BMKGFkZHJjb25mX3ByZWZpeF9yY3ZfYWRkX2FkZHIpO1xubmV0L2lwdjYvYWRkcmNvbmYuYy0yNzk3LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAyMjozNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNDc4NAoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDExNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIFRhcmdldCBJbnZlc3RpZ2F0aW9uKioKCk9rYXksIHNvIEkmIzM5O3ZlIGlkZW50aWZpZWQgc29tZSBwb3RlbnRpYWwgZnV6emluZyBjYW5kaWRhdGVzLCB0aGluZ3MgdGhhdCBhcmVuJiMzOTt0IHNwZWNpZmljYWxseSBleHBvcnRlZCwgYnV0IGFyZSBnbG9iYWxseSBhY2Nlc3NpYmxlLCB3aGljaCBpcyBhbHdheXMgYW4gaW50ZXJlc3Rpbmcgc3RhcnRpbmcgcG9pbnQgZm9yIHZ1bG5lcmFiaWxpdHkgcmVzZWFyY2guIE5vdywgSSB3YW50IHRvIGRpdmUgYSBsaXR0bGUgZGVlcGVyIG9uIHRoaXMgYElQVjZfUk9VVEVfSU5GT2Agc2V0dGluZy4gTGV0JiMzOTtzIHNlZSBpZiBpdCBoYXMgYW55IGRlcGVuZGVuY2llcy4gQWhhLCBpdCBsb29rcyBsaWtlIGl0IHJlbGllcyBvbiBgSVBWNl9ST1VURVJfUFJFRmAuIE9rYXksIHRoYXQgbWFrZXMgc2Vuc2UuIE5vdywgbGV0JiMzOTtzIHRyYWNlIHRoaXMgZGVwZW5kZW5jeS4gRG9lcyAqdGhhdCogaGF2ZSBhbnkgZGVwZW5kZW5jaWVzIHRoYXQgd2UgbmVlZCB0byBiZSBhd2FyZSBvZj8gQWxyaWdodCwgYmFzZWQgb24gdGhlIGBtZW51Y29uZmlnYCBvcHRpb25zLCB0aGF0JiMzOTtzIGRlZmluZWQgdW5kZXIgdGhlIGBJUFY2YCBzZWN0aW9uIGluIGBuZXQvaXB2Ni9LY29uZmlnYC4gU28sIG9idmlvdXNseSBgSVBWNmAgaXMgYSByZXF1aXJlbWVudC4gUmlnaHQsIHRoaXMgaW5mb3JtcyBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBhdHRhY2sgc3VyZmFjZSwgYW5kIHRoZSBhcHByb3ByaWF0ZSBjb250ZXh0IHdoZW4gY29uc3RydWN0aW5nIGZ1enppbmcgcGF5bG9hZHMuCgpOb3csIEkmIzM5O2xsIGdvIGhhdmUgYSBsb29rIGluIGBuZXQvaXB2Ni9LY29uZmlnYCBhbmQgZG91YmxlIGNoZWNrIHRoZSBkZXRhaWxzIG9mIGBJUFY2YCwgc28gSSYjMzk7bSBjb21wbGV0ZWx5IGNsZWFyIG9uIGl0cyBpbXBsaWNhdGlvbnMgYW5kIGludGVyZGVwZW5kZW5jaWVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAyMjozNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgSVBWNiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY2L0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjYvS2NvbmZpZy01LVxubmV0L2lwdjYvS2NvbmZpZzo2Om1lbnVjb25maWcgSVBWNlxubmV0L2lwdjYvS2NvbmZpZy03LVx0Ym9vbCBcJiMzNDtUaGUgSVB2NiBwcm90b2NvbFwmIzM0O1xuLS1cbm5ldC9pcHY2L0tjb25maWc9MTk9aWYgSVBWNlxubmV0L2lwdjYvS2NvbmZpZy0yMC1cbm5ldC9pcHY2L0tjb25maWc6MjE6Y29uZmlnIElQVjZfUk9VVEVSX1BSRUZcbm5ldC9pcHY2L0tjb25maWctMjItXHRib29sIFwmIzM0O0lQdjY6IFJvdXRlciBQcmVmZXJlbmNlIChSRkMgNDE5MSkgc3VwcG9ydFwmIzM0O1xuLS1cbm5ldC9pcHY2L0tjb25maWctMzAtXG5uZXQvaXB2Ni9LY29uZmlnOjMxOmNvbmZpZyBJUFY2X1JPVVRFX0lORk9cbm5ldC9pcHY2L0tjb25maWctMzItXHRib29sIFwmIzM0O0lQdjY6IFJvdXRlIEluZm9ybWF0aW9uIChSRkMgNDE5MSkgc3VwcG9ydFwmIzM0O1xuLS1cbm5ldC9pcHY2L0tjb25maWctMzgtXG5uZXQvaXB2Ni9LY29uZmlnOjM5OmNvbmZpZyBJUFY2X09QVElNSVNUSUNfREFEXG5uZXQvaXB2Ni9LY29uZmlnLTQwLVx0Ym9vbCBcJiMzNDtJUHY2OiBFbmFibGUgUkZDIDQ0MjkgT3B0aW1pc3RpYyBEQURcJiMzNDtcbi0tXG5uZXQvaXB2Ni9LY29uZmlnPTEwMj1jb25maWcgSU5FVDZfSVBDT01QXG4tLVxubmV0L2lwdjYvS2NvbmZpZy0xMTEtXG5uZXQvaXB2Ni9LY29uZmlnOjExMjpjb25maWcgSVBWNl9NSVA2XG5uZXQvaXB2Ni9LY29uZmlnLTExMy1cdHRyaXN0YXRlIFwmIzM0O0lQdjY6IE1vYmlsaXR5XCYjMzQ7XG4tLVxubmV0L2lwdjYvS2NvbmZpZy0xMTktXG5uZXQvaXB2Ni9LY29uZmlnOjEyMDpjb25maWcgSVBWNl9JTEFcbm5ldC9pcHY2L0tjb25maWctMTIxLVx0dHJpc3RhdGUgXCYjMzQ7SVB2NjogSWRlbnRpZmllciBMb2NhdG9yIEFkZHJlc3NpbmcgKElMQSlcJiMzNDtcbi0tXG5uZXQvaXB2Ni9LY29uZmlnPTE0Nj1jb25maWcgSU5FVDZfVFVOTkVMXG4tLVxubmV0L2lwdjYvS2NvbmZpZy0xNDktXG5uZXQvaXB2Ni9LY29uZmlnOjE1MDpjb25maWcgSVBWNl9WVElcbm5ldC9pcHY2L0tjb25maWctMTUxLVx0dHJpc3RhdGUgXCYjMzQ7VmlydHVhbCAoc2VjdXJlKSBJUHY2OiB0dW5uZWxpbmdcJiMzNDtcbi0tXG5uZXQvaXB2Ni9LY29uZmlnLTE2MS1cbm5ldC9pcHY2L0tjb25maWc6MTYyOmNvbmZpZyBJUFY2X1NJVFxubmV0L2lwdjYvS2NvbmZpZy0xNjMtXHR0cmlzdGF0ZSBcJiMzNDtJUHY2OiBJUHY2LWluLUlQdjQgdHVubmVsIChTSVQgZHJpdmVyKVwmIzM0O1xuLS1cbm5ldC9pcHY2L0tjb25maWctMTc2LVxubmV0L2lwdjYvS2NvbmZpZzoxNzc6Y29uZmlnIElQVjZfU0lUXzZSRFxubmV0L2lwdjYvS2NvbmZpZy0xNzgtXHRib29sIFwmIzM0O0lQdjY6IElQdjYgUmFwaWQgRGVwbG95bWVudCAoNlJEKVwmIzM0O1xuLS1cbm5ldC9pcHY2L0tjb25maWctMTk1LVxubmV0L2lwdjYvS2NvbmZpZzoxOTY6Y29uZmlnIElQVjZfTkRJU0NfTk9ERVRZUEVcbm5ldC9pcHY2L0tjb25maWctMTk3LVx0Ym9vbFxubmV0L2lwdjYvS2NvbmZpZy0xOTgtXG5uZXQvaXB2Ni9LY29uZmlnOjE5OTpjb25maWcgSVBWNl9UVU5ORUxcbm5ldC9pcHY2L0tjb25maWctMjAwLVx0dHJpc3RhdGUgXCYjMzQ7SVB2NjogSVAtaW4tSVB2NiB0dW5uZWwgKFJGQzI0NzMpXCYjMzQ7XG4tLVxubmV0L2lwdjYvS2NvbmZpZy0yMDktXG5uZXQvaXB2Ni9LY29uZmlnOjIxMDpjb25maWcgSVBWNl9HUkVcbm5ldC9pcHY2L0tjb25maWctMjExLVx0dHJpc3RhdGUgXCYjMzQ7SVB2NjogR1JFIHR1bm5lbFwmIzM0O1xuLS1cbm5ldC9pcHY2L0tjb25maWctMjI3LVxubmV0L2lwdjYvS2NvbmZpZzoyMjg6Y29uZmlnIElQVjZfRk9VXG5uZXQvaXB2Ni9LY29uZmlnLTIyOS1cdHRyaXN0YXRlXG4tLVxubmV0L2lwdjYvS2NvbmZpZy0yMzEtXG5uZXQvaXB2Ni9LY29uZmlnOjIzMjpjb25maWcgSVBWNl9GT1VfVFVOTkVMXG5uZXQvaXB2Ni9LY29uZmlnLTIzMy1cdHRyaXN0YXRlXG4tLVxubmV0L2lwdjYvS2NvbmZpZy0yMzYtXG5uZXQvaXB2Ni9LY29uZmlnOjIzNzpjb25maWcgSVBWNl9NVUxUSVBMRV9UQUJMRVNcbm5ldC9pcHY2L0tjb25maWctMjM4LVx0Ym9vbCBcJiMzNDtJUHY2OiBNdWx0aXBsZSBSb3V0aW5nIFRhYmxlc1wmIzM0O1xuLS1cbm5ldC9pcHY2L0tjb25maWctMjQyLVxubmV0L2lwdjYvS2NvbmZpZzoyNDM6Y29uZmlnIElQVjZfU1VCVFJFRVNcbm5ldC9pcHY2L0tjb25maWctMjQ0LVx0Ym9vbCBcJiMzNDtJUHY2OiBzb3VyY2UgYWRkcmVzcyBiYXNlZCByb3V0aW5nXCYjMzQ7XG4tLVxubmV0L2lwdjYvS2NvbmZpZy0yNTYtXG5uZXQvaXB2Ni9LY29uZmlnOjI1Nzpjb25maWcgSVBWNl9NUk9VVEVcbm5ldC9pcHY2L0tjb25maWctMjU4LVx0Ym9vbCBcJiMzNDtJUHY2OiBtdWx0aWNhc3Qgcm91dGluZ1wmIzM0O1xuLS1cbm5ldC9pcHY2L0tjb25maWctMjY0LVxubmV0L2lwdjYvS2NvbmZpZzoyNjU6Y29uZmlnIElQVjZfTVJPVVRFX01VTFRJUExFX1RBQkxFU1xubmV0L2lwdjYvS2NvbmZpZy0yNjYtXHRib29sIFwmIzM0O0lQdjY6IG11bHRpY2FzdCBwb2xpY3kgcm91dGluZ1wmIzM0O1xuLS1cbm5ldC9pcHY2L0tjb25maWctMjc4LVxubmV0L2lwdjYvS2NvbmZpZzoyNzk6Y29uZmlnIElQVjZfUElNU01fVjJcbm5ldC9pcHY2L0tjb25maWctMjgwLVx0Ym9vbCBcJiMzNDtJUHY2OiBQSU0tU00gdmVyc2lvbiAyIHN1cHBvcnRcJiMzNDtcbi0tXG5uZXQvaXB2Ni9LY29uZmlnLTI4NS1cbm5ldC9pcHY2L0tjb25maWc6Mjg2OmNvbmZpZyBJUFY2X1NFRzZfTFdUVU5ORUxcbm5ldC9pcHY2L0tjb25maWctMjg3LVx0Ym9vbCBcJiMzNDtJUHY2OiBTZWdtZW50IFJvdXRpbmcgSGVhZGVyIGVuY2Fwc3VsYXRpb24gc3VwcG9ydFwmIzM0O1xuLS1cbm5ldC9pcHY2L0tjb25maWctMjk5LVxubmV0L2lwdjYvS2NvbmZpZzozMDA6Y29uZmlnIElQVjZfU0VHNl9ITUFDXG5uZXQvaXB2Ni9LY29uZmlnLTMwMS1cdGJvb2wgXCYjMzQ7SVB2NjogU2VnbWVudCBSb3V0aW5nIEhNQUMgc3VwcG9ydFwmIzM0O1xuLS1cbm5ldC9pcHY2L0tjb25maWctMzExLVxubmV0L2lwdjYvS2NvbmZpZzozMTI6Y29uZmlnIElQVjZfU0VHNl9CUEZcbm5ldC9pcHY2L0tjb25maWctMzEzLVx0ZGVmX2Jvb2wgeVxuLS1cbm5ldC9pcHY2L0tjb25maWctMzE2LVxubmV0L2lwdjYvS2NvbmZpZzozMTc6Y29uZmlnIElQVjZfUlBMX0xXVFVOTkVMXG5uZXQvaXB2Ni9LY29uZmlnLTMxOC1cdGJvb2wgXCYjMzQ7SVB2NjogUlBMIFNvdXJjZSBSb3V0aW5nIEhlYWRlciBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L2lwdjYvS2NvbmZpZy0zMjctXG5uZXQvaXB2Ni9LY29uZmlnOjMyODpjb25maWcgSVBWNl9JT0FNNl9MV1RVTk5FTFxubmV0L2lwdjYvS2NvbmZpZy0zMjktXHRib29sIFwmIzM0O0lQdjY6IElPQU0gUHJlLWFsbG9jYXRlZCBUcmFjZSBpbnNlcnRpb24gc3VwcG9ydFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAyMjozNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNjcwNgoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDI3OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiBJUHY2IFJvdXRlIE1hbmFnZW1lbnQqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoZXNlIElQdjYgY29uZmlndXJhdGlvbnM6IGBJUFY2YCwgYElQVjZfUk9VVEVSX1BSRUZgLCBhbmQgYElQVjZfUk9VVEVfSU5GT2AuIFRoYXQmIzM5O3Mgd2hlcmUgaXQgYWxsIHN0YXJ0cy4KCk5vdywgbGV0JiMzOTtzIGNpcmNsZSBiYWNrIHRvIGBpcDZfZGVsX3J0X3JlYXNvbmAuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgY2FsbCBzaXRlcy4gQWhhISBJdCYjMzk7cyBpbnZva2VkIGZyb20gYGFkZHJjb25mX3ByZWZpeF9yY3ZgLCBgbmRpc2Nfcm91dGVyX2Rpc2NvdmVyeWAsIGFuZCBgcnQ2X3JvdXRlX3JjdmAuIFRoaXMgaXMgaW1wb3J0YW50LiBHb2luZyBmdXJ0aGVyIGRvd24sIGBmaWI2X2RlbGAgaXMgY2FsbGVkIGZyb20gYSBoYW5kZnVsIG9mIHBsYWNlcyAtIGBfX2lwNl9kZWxfcnRgLCBgX19pcDZfZGVsX3J0X3NpYmxpbmdzYCwgYGZpYjZfY2xlYW5fbm9kZWAsIGFuZCBgZmliNl9nY190YWJsZWAuIFRoZSBub3RpZmljYXRpb24gZnVuY3Rpb24sIGBpbmV0Nl9ydF9ub3RpZnlgLCBnZXRzIGNhbGxlZCBhY3Jvc3MgdGhlIGJvYXJkIC0gYnkgYGZpYjZfYWRkX3J0Mm5vZGVgLCBgZmliNl9kZWxfcm91dGVgLCBgbmRpc2Nfcm91dGVyX2Rpc2NvdmVyeWAsIGBpcDZfcm91dGVfbXBhdGhfbm90aWZ5YCwgYW5kIGBmaWI2X3J0X3VwZGF0ZWAuIEZpbmFsbHksIGBydDZfcm91dGVfcmN2YCBhbmQgYGFkZHJjb25mX3ByZWZpeF9yY3ZgIGFyZSBjYWxsZWQgYnkgYG5kaXNjX3JvdXRlcl9kaXNjb3ZlcnlgLgoKU28sIGBuZGlzY19yb3V0ZXJfZGlzY292ZXJ5YCBhcHBlYXJzIHRvIGJlIGEgY3J1Y2lhbCBmdW5jdGlvbiBmb3IgZnV6emluZyBnaXZlbiBpdHMgd2lkZXNwcmVhZCBpbmZsdWVuY2UsIHNwZWNpZmljYWxseSBkZWFsaW5nIHdpdGggcm91dGVyIGRpc2NvdmVyeSBhbmQgcm91dGUgbWFuYWdlbWVudC4gVGhlIGNhdGNoIGlzIHRoYXQgaXQmIzM5O3Mgc3RhdGljLiBCdXQgd2FpdCEgSXQmIzM5O3MgY2FsbGVkIGZyb20gYG5kaXNjX3JjdmAsIHdoaWNoIGhhbmRsZXMgSUNNUHY2IE5laWdoYm9yIERpc2NvdmVyeSBtZXNzYWdlcywgYW5kIHRoYXQmIzM5O3MgZ2xvYmFsLiBUaGlzIGNvdWxkIGJlIGEgZ29vZCBwb2ludCB0byBzdGFydCB0aGUgZnV6emluZyBwcm9jZXNzLiBJJiMzOTtsbCBuZWVkIHRvIGZvY3VzIG9uIGNyYWZ0aW5nIHNwZWNpZmljIElDTVB2NiBOZWlnaGJvciBEaXNjb3ZlcnkgbWVzc2FnZXMgdG8gdGFyZ2V0IHRoaXMgZnVuY3Rpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDIyOjM3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O25kaXNjX3JjdiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY2L25kaXNjLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjYvbmRpc2MuYz0xNzkyPXN0YXRpYyBib29sIG5kaXNjX3N1cHByZXNzX2ZyYWdfbmRpc2Moc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvaXB2Ni9uZGlzYy5jLTE4MDUtXG5uZXQvaXB2Ni9uZGlzYy5jOjE4MDY6ZW51bSBza2JfZHJvcF9yZWFzb24gbmRpc2NfcmN2KHN0cnVjdCBza19idWZmICpza2IpXG5uZXQvaXB2Ni9uZGlzYy5jLTE4MDcte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAyMjozNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNzUyMQoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDEzMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBJbml0aWFsIEFzc2Vzc21lbnQgb2YgdGhlIElQVjYgUm91dGUgUmVtb3ZhbCAmYW1wOyBOb3RpZmljYXRpb24gRmxvdyoqCgpPa2F5LCBzbyBJJiMzOTttIGRpdmluZyBpbnRvIHRoaXMgSVB2NiByb3V0aW5nIGNvZGUgYW5kIGltbWVkaWF0ZWx5IEkgc2VlIGEgcGF0dGVybiBmb3JtaW5nLiBgbmRpc2NfcmN2YCwgYHJ0Nl9yb3V0ZV9yY3ZgLCBhbmQgYGFkZHJjb25mX3ByZWZpeF9yY3ZgIOKAkyB0aGVzZSBmdW5jdGlvbnMgYXJlIGFsbCBnbG9iYWxseSB2aXNpYmxlLCBhbmQgdGhhdCYjMzk7cyB0aGUga2V5LiBUaGF0IHRlbGxzIG1lIHRoZXNlIGFyZSBlbnRyeSBwb2ludHMuCgpHaXZlbiB0aGF0LCBJIG5lZWQgdG8gZm9jdXMgbXkgYXR0ZW50aW9uIG9uIHdoZXJlIHRoZXNlIHBpZWNlcyBpbnRlcmZhY2UuIFRoZSBzeW1ib2xzIHRoYXQgcmVhbGx5IHBpcXVlIG15IGludGVyZXN0IGFzIGJlaW5nIHBvdGVudGlhbCBrZXlzIHRvIHVuZGVyc3RhbmRpbmcgdGhlIGRlbGV0aW9uIGFuZCBub3RpZmljYXRpb24gbWVjaGFuaXNtIGFyZTogYGlwNl9kZWxfcnRfcmVhc29uYCwgYGZpYjZfZGVsYCwgYGluZXQ2X3J0X25vdGlmeWAsIGBydDZfcm91dGVfcmN2YCwgYGFkZHJjb25mX3ByZWZpeF9yY3ZgLCBhbmQgYG5kaXNjX3JjdmAuIFRoZXkgYWxsIHNlZW0gaGlnaGx5IHJlbGV2YW50LgoKTXkgaW1tZWRpYXRlIG5leHQgc3RlcCB3aWxsIGJlIHRvIHZlcmlmeSB0aGF0IGBuZGlzY19yY3ZgIGlzIGluZGVlZCBleHBvcnRlZCwgY29uZmlybWluZyBpdCBpcyBhbiBpbXBvcnRhbnQgZ2xvYmFsIGZ1bmN0aW9uLiBJIG5lZWQgdG8gYmUgc3VyZSBiZWZvcmUgSSBtb3ZlIGZvcndhcmQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDIyOjM3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7RVhQT1JUX1NZTUJPTC4qbmRpc2NfcmN2JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2lwdjYvbmRpc2MuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDIyOjM3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI3OTIzCgkJCQkJCQlvdXRwdXQ6IDE4NAoJCQkJCQkJdGhvdWdodHM6IDY2NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIFRhcmdldHMgZm9yIElQdjYgUm91dGUgRGVsZXRpb24gTG9naWMqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyBhbGwgYWJvdXQgaGFuZGxpbmcgdGhlIG5ldyBgUlRBX0RFTF9SRUFTT05gIGF0dHJpYnV0ZSBmb3IgSVB2NiByb3V0ZSBkZWxldGlvbiBub3RpZmljYXRpb25zLCBzcGVjaWZpY2FsbHkgd2hlbiByb3V0ZXMgZXhwaXJlIG9yIGFyZSB3aXRoZHJhd24gdmlhIFJvdXRlciBBZHZlcnRpc2VtZW50cy4gVGhpcyBtZWFucyB3ZSYjMzk7cmUgbG9va2luZyBhdCBmdW5jdGlvbmFsIGNoYW5nZXMgZGVlcCB3aXRoaW4gY29yZSBJUHY2IHJvdXRpbmcgYW5kIG5laWdoYm9yIGRpc2NvdmVyeSwgbWFraW5nIHRoZW0gcHJpbWUgdGFyZ2V0cyBmb3IgZnV6emluZy4KCk15IHRoaW5raW5nIGlzLCB3ZSYjMzk7dmUgZ290IHRvIGZpbmQgdGhlIGtleSBlbnRyeSBwb2ludHMgYW5kIGZ1bmN0aW9ucyByZWxhdGVkIHRvIHRoaXMgbmV3IGF0dHJpYnV0ZS4gSSYjMzk7bSBnb2luZyB0byBzZXQgYFdvcnRoRnV6emluZ2AgdG8gdHJ1ZS4KCkZpcnN0LCBJIGxvb2tlZCBhdCB0aGUgb2J2aW91czogYG5kaXNjX3JjdmAuIEl0JiMzOTtzIHRoZSBmcm9udCBkb29yIGZvciBJQ01QdjYgTkQgbWVzc2FnZXMsIGluY2x1ZGluZyB0aG9zZSBSb3V0ZXIgQWR2ZXJ0aXNlbWVudHMsIHNvIHRoYXTigJlzIGEgZ3JlYXQgY2FuZGlkYXRlLiBUaGVuLCBgcnQ2X3JvdXRlX3JjdmAgYW5kIGBhZGRyY29uZl9wcmVmaXhfcmN2YCBwb3BwZWQgdXAuIFRoZXkmIzM5O3JlIGJvdGggY2FsbGVkIGZyb20gYG5kaXNjX3JvdXRlcl9kaXNjb3ZlcnlgIGFuZCBoYW5kbGUgUm91dGUgSW5mb3JtYXRpb24gT3B0aW9ucyAoUklPKSBhbmQgUHJlZml4IEluZm9ybWF0aW9uIE9wdGlvbnMgKFBJTyksIHJlc3BlY3RpdmVseSwgc28gdGhleSYjMzk7cmUgZGVmaW5pdGVseSByZWxldmFudC4gRmluYWxseSwgSSBpZGVudGlmaWVkIGBpcDZfZGVsX3J0X3JlYXNvbmAsIGBmaWI2X2RlbGAsIGFuZCBgaW5ldDZfcnRfbm90aWZ5YCBhcmUgYWxsIGtleSBmdW5jdGlvbnMuIGBpcDZfZGVsX3J0X3JlYXNvbmAgaXMgdXNlZCB3aGVuIHJvdXRlcyBhcmUgZGVsZXRlZCwgYGZpYjZfZGVsYCBpcyBhbHNvIGNhbGxlZCB3aGVuIHJvdXRlcyBhcmUgZGVsZXRlZCBhbmQgYGluZXQ2X3J0X25vdGlmeWAgZ2V0cyBjYWxsZWQgd2hlbiByb3V0ZXMgYXJlIGFkZGVkIG9yIGRlbGV0ZWQuCgpJIGFsc28gZG91YmxlLWNoZWNrZWQgd2hhdCBjYWxscyB3aGF0OiBgaXA2X2RlbF9ydF9yZWFzb25gIGlzIGNhbGxlZCBmcm9tIGBydDZfcm91dGVfcmN2YCwgYGFkZHJjb25mX3ByZWZpeF9yY3ZgLCBhbmQgYG5kaXNjX3JvdXRlcl9kaXNjb3ZlcnlgLCBhbmQgYGZpYjZfZGVsYCBpcyBjYWxsZWQgZnJvbSBgX19pcDZfZGVsX3J0YCwgYF9faXA2X2RlbF9ydF9zaWJsaW5nc2AsIGBmaWI2X2NsZWFuX25vZGVgLCBgZmliNl9nY190YWJsZWAuIGBpbmV0Nl9ydF9ub3RpZnlgIGlzIGNhbGxlZCBmcm9tIGBmaWI2X2FkZF9ydDJub2RlYCwgYGZpYjZfZGVsX3JvdXRlYCwgYG5kaXNjX3JvdXRlcl9kaXNjb3ZlcnlgLCBgaXA2X3JvdXRlX21wYXRoX25vdGlmeWAsIGFuZCBgZmliNl9ydF91cGRhdGVgLiBgcnQ2X3JvdXRlX3JjdmAgYW5kIGBhZGRyY29uZl9wcmVmaXhfcmN2YCBhcmUgY2FsbGVkIGZyb20gYG5kaXNjX3JvdXRlcl9kaXNjb3ZlcnlgLgoKU28sIGhlcmUmIzM5O3MgbXkgZm9jdXNlZCBsaXN0IG9mIHN5bWJvbHMgSSYjMzk7bGwgdGFyZ2V0IGZvciBmdXp6aW5nOiBgaXA2X2RlbF9ydF9yZWFzb25gLCBgZmliNl9kZWxgLCBgaW5ldDZfcnRfbm90aWZ5YCwgYHJ0Nl9yb3V0ZV9yY3ZgLCBgYWRkcmNvbmZfcHJlZml4X3JjdmAsIGFuZCBgbmRpc2NfcmN2YC4gSSB3aWxsIGFsc28gY29uZmlybSB0aGF0IHRoZXNlIGNvbmZpZ3VyYXRpb25zIGFyZSBzZXQ6IGBJUFY2YCwgYElQVjZfUk9VVEVSX1BSRUZgLCBhbmQgYElQVjZfUk9VVEVfSU5GT2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDIyOjM3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtJUFY2JiMzNDssCiAgICAmIzM0O0lQVjZfUk9VVEVSX1BSRUYmIzM0OywKICAgICYjMzQ7SVBWNl9ST1VURV9JTkZPJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aXA2X2RlbF9ydF9yZWFzb24mIzM0OywKICAgICYjMzQ7ZmliNl9kZWwmIzM0OywKICAgICYjMzQ7aW5ldDZfcnRfbm90aWZ5JiMzNDssCiAgICAmIzM0O3J0Nl9yb3V0ZV9yY3YmIzM0OywKICAgICYjMzQ7YWRkcmNvbmZfcHJlZml4X3JjdiYjMzQ7LAogICAgJiMzNDtuZGlzY19yY3YmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBhIG5ldyBuZXRsaW5rIGF0dHJpYnV0ZSBgUlRBX0RFTF9SRUFTT05gIHRvIElQdjYgcm91dGUgZGVsZXRpb24gbm90aWZpY2F0aW9ucyAoYFJUTV9ERUxST1VURWApLiBJdCBtb2RpZmllcyBjb3JlIElQdjYgcm91dGluZyBhbmQgbmVpZ2hib3IgZGlzY292ZXJ5IGZ1bmN0aW9ucyB0byBwb3B1bGF0ZSB0aGlzIGF0dHJpYnV0ZSB3aGVuIHJvdXRlcyBhcmUgZGVsZXRlZCBkdWUgdG8gZXhwaXJhdGlvbiBvciBSb3V0ZXIgQWR2ZXJ0aXNlbWVudCAoUkEpIHdpdGhkcmF3YWwuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7SVBWNiYjMzQ7LAogICAgJiMzNDtJUFY2X1JPVVRFUl9QUkVGJiMzNDssCiAgICAmIzM0O0lQVjZfUk9VVEVfSU5GTyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2lwNl9kZWxfcnRfcmVhc29uJiMzNDssCiAgICAmIzM0O2ZpYjZfZGVsJiMzNDssCiAgICAmIzM0O2luZXQ2X3J0X25vdGlmeSYjMzQ7LAogICAgJiMzNDtydDZfcm91dGVfcmN2JiMzNDssCiAgICAmIzM0O2FkZHJjb25mX3ByZWZpeF9yY3YmIzM0OywKICAgICYjMzQ7bmRpc2NfcmN2JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYSBuZXcgbmV0bGluayBhdHRyaWJ1dGUgYFJUQV9ERUxfUkVBU09OYCB0byBJUHY2IHJvdXRlIGRlbGV0aW9uIG5vdGlmaWNhdGlvbnMgKGBSVE1fREVMUk9VVEVgKS4gSXQgbW9kaWZpZXMgY29yZSBJUHY2IHJvdXRpbmcgYW5kIG5laWdoYm9yIGRpc2NvdmVyeSBmdW5jdGlvbnMgdG8gcG9wdWxhdGUgdGhpcyBhdHRyaWJ1dGUgd2hlbiByb3V0ZXMgYXJlIGRlbGV0ZWQgZHVlIHRvIGV4cGlyYXRpb24gb3IgUm91dGVyIEFkdmVydGlzZW1lbnQgKFJBKSB3aXRoZHJhd2FsLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYyB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNy0yNVQyMjozNjowMC4xODA3Nzk3NFoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwOTI1MTY2NTE3OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJJUFY2XCIsXG4gICAgXCJJUFY2X1JPVVRFUl9QUkVGXCIsXG4gICAgXCJJUFY2X1JPVVRFX0lORk9cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJpcDZfZGVsX3J0X3JlYXNvblwiLFxuICAgIFwiZmliNl9kZWxcIixcbiAgICBcImluZXQ2X3J0X25vdGlmeVwiLFxuICAgIFwicnQ2X3JvdXRlX3JjdlwiLFxuICAgIFwiYWRkcmNvbmZfcHJlZml4X3JjdlwiLFxuICAgIFwibmRpc2NfcmN2XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhIG5ldyBuZXRsaW5rIGF0dHJpYnV0ZSBgUlRBX0RFTF9SRUFTT05gIHRvIElQdjYgcm91dGUgZGVsZXRpb24gbm90aWZpY2F0aW9ucyAoYFJUTV9ERUxST1VURWApLiBJdCBtb2RpZmllcyBjb3JlIElQdjYgcm91dGluZyBhbmQgbmVpZ2hib3IgZGlzY292ZXJ5IGZ1bmN0aW9ucyB0byBwb3B1bGF0ZSB0aGlzIGF0dHJpYnV0ZSB3aGVuIHJvdXRlcyBhcmUgZGVsZXRlZCBkdWUgdG8gZXhwaXJhdGlvbiBvciBSb3V0ZXIgQWR2ZXJ0aXNlbWVudCAoUkEpIHdpdGhkcmF3YWwuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMjI6MzY6MDAuMTgwNzg3NDg5WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MjIzNDM2NDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA0YzJiZWY1ZWZhMjhhYTZhZmFiNjMxMjUxNTAxZjhhMTY4OGExMzE1XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBTYXQgSnVsIDI1IDIyOjM1OjU4IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0bGluay9zcGVjcy9ydC1yb3V0ZS55YW1sIGIvRG9jdW1lbnRhdGlvbi9uZXRsaW5rL3NwZWNzL3J0LXJvdXRlLnlhbWxcXG5pbmRleCAzMzE5NWRiOTY3NDZjNi4uMjM0ZjUwMmZiMzVkOWMgMTAwNjQ0XFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9uZXRsaW5rL3NwZWNzL3J0LXJvdXRlLnlhbWxcXG4rKysgYi9Eb2N1bWVudGF0aW9uL25ldGxpbmsvc3BlY3MvcnQtcm91dGUueWFtbFxcbkBAIC03OCw2ICs3OCwxNSBAQCBkZWZpbml0aW9uczpcXG4gICAgICAgLVxcbiAgICAgICAgIG5hbWU6IHJ0YS11c2VkXFxuICAgICAgICAgdHlwZTogdTMyXFxuKyAgLVxcbisgICAgbmFtZTogZGVsLXJlYXNvblxcbisgICAgdHlwZTogZW51bVxcbisgICAgbmFtZS1wcmVmaXg6IHJ0YS1kZWwtcmVhc29uLVxcbisgICAgZW51bS1uYW1lOiBydGEtZGVsLXJlYXNvblxcbisgICAgZW50cmllczpcXG4rICAgICAgLSB1bnNwZWNcXG4rICAgICAgLSBleHBpcmVkXFxuKyAgICAgIC0gcmEtd2l0aGRyYXduXFxuIFxcbiBhdHRyaWJ1dGUtc2V0czpcXG4gICAtXFxuQEAgLTE4NSw2ICsxOTQsMTAgQEAgYXR0cmlidXRlLXNldHM6XFxuICAgICAgICAgdHlwZTogdTMyXFxuICAgICAgICAgYnl0ZS1vcmRlcjogYmlnLWVuZGlhblxcbiAgICAgICAgIGRpc3BsYXktaGludDogaGV4XFxuKyAgICAgIC1cXG4rICAgICAgICBuYW1lOiBkZWwtcmVhc29uXFxuKyAgICAgICAgdHlwZTogdTMyXFxuKyAgICAgICAgZW51bTogZGVsLXJlYXNvblxcbiAgIC1cXG4gICAgIG5hbWU6IG1ldHJpY3NcXG4gICAgIG5hbWUtcHJlZml4OiBydGF4LVxcbkBAIC0yOTksNiArMzEyLDcgQEAgb3BlcmF0aW9uczpcXG4gICAgICAgICAgICAgLSBkcG9ydFxcbiAgICAgICAgICAgICAtIG5oLWlkXFxuICAgICAgICAgICAgIC0gZmxvd2xhYmVsXFxuKyAgICAgICAgICAgIC0gZGVsLXJlYXNvblxcbiAgICAgICBkdW1wOlxcbiAgICAgICAgIHJlcXVlc3Q6XFxuICAgICAgICAgICB2YWx1ZTogMjZcXG5AQCAtMzIyLDMgKzMzNiwyMiBAQCBvcGVyYXRpb25zOlxcbiAgICAgICAgIHJlcXVlc3Q6XFxuICAgICAgICAgICB2YWx1ZTogMjVcXG4gICAgICAgICAgIGF0dHJpYnV0ZXM6ICphbGwtcm91dGUtYXR0cnNcXG4rICAgIC1cXG4rICAgICAgbmFtZTogbmV3cm91dGUtbnRmXFxuKyAgICAgIGRvYzogTm90aWZpY2F0aW9uIGFib3V0IGEgY3JlYXRlZCByb3V0ZS5cXG4rICAgICAgdmFsdWU6IDI0XFxuKyAgICAgIG5vdGlmeTogZ2V0cm91dGVcXG4rICAgIC1cXG4rICAgICAgbmFtZTogZGVscm91dGUtbnRmXFxuKyAgICAgIGRvYzogTm90aWZpY2F0aW9uIGFib3V0IGEgZGVsZXRlZCByb3V0ZS5cXG4rICAgICAgdmFsdWU6IDI1XFxuKyAgICAgIG5vdGlmeTogZ2V0cm91dGVcXG4rXFxuK21jYXN0LWdyb3VwczpcXG4rICBsaXN0OlxcbisgICAgLVxcbisgICAgICBuYW1lOiBydG5sZ3JwLWlwdjQtcm91dGVcXG4rICAgICAgdmFsdWU6IDdcXG4rICAgIC1cXG4rICAgICAgbmFtZTogcnRubGdycC1pcHY2LXJvdXRlXFxuKyAgICAgIHZhbHVlOiAxMVxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9pcDZfZmliLmggYi9pbmNsdWRlL25ldC9pcDZfZmliLmhcXG5pbmRleCA5Y2QyN2UxYjliNjkyMy4uN2NhMGUyMTI0ZTc5NjMgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9uZXQvaXA2X2ZpYi5oXFxuKysrIGIvaW5jbHVkZS9uZXQvaXA2X2ZpYi5oXFxuQEAgLTQ2OCw3ICs0NjgsNyBAQCB2b2lkIGZpYjZfY2xlYW5fYWxsX3NraXBfbm90aWZ5KHN0cnVjdCBuZXQgKm5ldCxcXG4gXFxuIGludCBmaWI2X2FkZChzdHJ1Y3QgZmliNl9ub2RlICpyb290LCBzdHJ1Y3QgZmliNl9pbmZvICpydCxcXG4gXFx0ICAgICBzdHJ1Y3QgbmxfaW5mbyAqaW5mbywgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKTtcXG4taW50IGZpYjZfZGVsKHN0cnVjdCBmaWI2X2luZm8gKnJ0LCBzdHJ1Y3QgbmxfaW5mbyAqaW5mbyk7XFxuK2ludCBmaWI2X2RlbChzdHJ1Y3QgZmliNl9pbmZvICpydCwgc3RydWN0IG5sX2luZm8gKmluZm8sIHUzMiBkZWxfcmVhc29uKTtcXG4gXFxuIHN0YXRpYyBpbmxpbmVcXG4gdm9pZCBydDZfZ2V0X3ByZWZzcmMoY29uc3Qgc3RydWN0IHJ0Nl9pbmZvICpydCwgc3RydWN0IGluNl9hZGRyICphZGRyKVxcbkBAIC01MzEsNyArNTMxLDcgQEAgc3RhdGljIGlubGluZSB2b2lkIGZpYjZfcnRfdXBkYXRlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZpYjZfaW5mbyAqcnQsXFxuIH1cXG4gI2VuZGlmXFxuIHZvaWQgaW5ldDZfcnRfbm90aWZ5KGludCBldmVudCwgc3RydWN0IGZpYjZfaW5mbyAqcnQsIHN0cnVjdCBubF9pbmZvICppbmZvLFxcbi1cXHRcXHQgICAgIHVuc2lnbmVkIGludCBmbGFncyk7XFxuK1xcdFxcdCAgICAgdW5zaWduZWQgaW50IGZsYWdzLCB1MzIgZGVsX3JlYXNvbik7XFxuIFxcbiB2b2lkIGZpYjZfYWdlX2V4Y2VwdGlvbnMoc3RydWN0IGZpYjZfaW5mbyAqcnQsIHN0cnVjdCBmaWI2X2djX2FyZ3MgKmdjX2FyZ3MsXFxuIFxcdFxcdFxcdCB1bnNpZ25lZCBsb25nIG5vdyk7XFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2lwNl9yb3V0ZS5oIGIvaW5jbHVkZS9uZXQvaXA2X3JvdXRlLmhcXG5pbmRleCAwOWZmZTBmMTNjZTc1Mi4uOThmMTY4NGZlMzc4Y2MgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9uZXQvaXA2X3JvdXRlLmhcXG4rKysgYi9pbmNsdWRlL25ldC9pcDZfcm91dGUuaFxcbkBAIC0xMjgsNiArMTI4LDggQEAgaW50IGlwNl9yb3V0ZV9hZGQoc3RydWN0IGZpYjZfY29uZmlnICpjZmcsIGdmcF90IGdmcF9mbGFncyxcXG4gaW50IGlwNl9pbnNfcnQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZmliNl9pbmZvICpmNmkpO1xcbiAjaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNilcXG4gaW50IGlwNl9kZWxfcnQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZmliNl9pbmZvICpmNmksIGJvb2wgc2tpcF9ub3RpZnkpO1xcbitpbnQgaXA2X2RlbF9ydF9yZWFzb24oc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZmliNl9pbmZvICpmNmksIGJvb2wgc2tpcF9ub3RpZnksXFxuK1xcdFxcdCAgICAgIHUzMiBkZWxfcmVhc29uKTtcXG4gI2Vsc2VcXG4gc3RhdGljIGlubGluZSBpbnQgaXA2X2RlbF9ydChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBmaWI2X2luZm8gKmY2aSxcXG4gXFx0XFx0XFx0ICAgICBib29sIHNraXBfbm90aWZ5KVxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL3VhcGkvbGludXgvcnRuZXRsaW5rLmggYi9pbmNsdWRlL3VhcGkvbGludXgvcnRuZXRsaW5rLmhcXG5pbmRleCAyNzI2NWZkMzFlNWZjOS4uZmUwMGU2MjRmM2MzYWEgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS91YXBpL2xpbnV4L3J0bmV0bGluay5oXFxuKysrIGIvaW5jbHVkZS91YXBpL2xpbnV4L3J0bmV0bGluay5oXFxuQEAgLTM5OSw2ICszOTksNyBAQCBlbnVtIHJ0YXR0cl90eXBlX3Qge1xcbiBcXHRSVEFfRFBPUlQsXFxuIFxcdFJUQV9OSF9JRCxcXG4gXFx0UlRBX0ZMT1dMQUJFTCxcXG4rXFx0UlRBX0RFTF9SRUFTT04sXFxuIFxcdF9fUlRBX01BWFxcbiB9O1xcbiBcXG5AQCAtNDA3LDYgKzQwOCwyMiBAQCBlbnVtIHJ0YXR0cl90eXBlX3Qge1xcbiAjZGVmaW5lIFJUTV9SVEEocikgICgoc3RydWN0IHJ0YXR0ciopKCgoY2hhciopKHIpKSArIE5MTVNHX0FMSUdOKHNpemVvZihzdHJ1Y3QgcnRtc2cpKSkpXFxuICNkZWZpbmUgUlRNX1BBWUxPQUQobikgTkxNU0dfUEFZTE9BRChuLHNpemVvZihzdHJ1Y3QgcnRtc2cpKVxcbiBcXG4rLyogUlRBX0RFTF9SRUFTT046IHdoeSB0aGUga2VybmVsIGRlbGV0ZWQgdGhlIHJvdXRlLiB1MzIuXFxuKyAqIEVtaXR0ZWQgb25seSBvbiBSVE1fREVMUk9VVEUgbm90aWZpY2F0aW9ucywgYW5kIG9ubHkgd2hlbiB0aGUgZGVsZXRpb25cXG4rICogcGF0aCByZWNvcmRzIGEgY2F1c2UuIEFic2VuY2UgbWVhbnMgZWl0aGVyIGFuIG9sZGVyIGtlcm5lbCBvciBhXFxuKyAqIGRlbGV0aW9uIHBhdGggdGhhdCBkb2VzIG5vdCAoeWV0KSByZWNvcmQgaXRzIGNhdXNlIC0gY29uc3VtZXJzIG11c3RcXG4rICogdHJlYXQgXFxcImFic2VudFxcXCIgYW5kIFxcXCJ1bnNwZWNcXFwiIGlkZW50aWNhbGx5LiBOZXcgY2F1c2VzIG1heSBiZSBhcHBlbmRlZC5cXG4rICogQ3VycmVudGx5IG9ubHkgSVB2NiBkZWxldGlvbiBwYXRocyByZWNvcmQgYSBjYXVzZS5cXG4rICovXFxuK2VudW0gcnRhX2RlbF9yZWFzb24ge1xcbitcXHRSVEFfREVMX1JFQVNPTl9VTlNQRUMsXFx0XFx0LyogY2F1c2Ugbm90IHJlY29yZGVkICovXFxuK1xcdFJUQV9ERUxfUkVBU09OX0VYUElSRUQsXFx0XFx0LyogUlRGX0VYUElSRVMgbGlmZXRpbWUgcmFuIG91dCAoR0MpICovXFxuK1xcdFJUQV9ERUxfUkVBU09OX1JBX1dJVEhEUkFXTixcXHQvKiB6ZXJvLWxpZmV0aW1lIFJBIC8gUElPIC8gUklPICovXFxuK1xcdF9fUlRBX0RFTF9SRUFTT05fTUFYXFxuK307XFxuK1xcbisjZGVmaW5lIFJUQV9ERUxfUkVBU09OX01BWCAoX19SVEFfREVMX1JFQVNPTl9NQVggLSAxKVxcbitcXG4gLyogUlRNX01VTFRJUEFUSCAtLS0gYXJyYXkgb2Ygc3RydWN0IHJ0bmV4dGhvcC5cXG4gICpcXG4gICogXFxcInN0cnVjdCBydG5leHRob3BcXFwiIGRlc2NyaWJlcyBhbGwgbmVjZXNzYXJ5IG5leHRob3AgaW5mb3JtYXRpb24sXFxuZGlmZiAtLWdpdCBhL25ldC9pcHY2L2FkZHJjb25mLmMgYi9uZXQvaXB2Ni9hZGRyY29uZi5jXFxuaW5kZXggZjFmZTllZGUxZWRiMzcuLjFjYTlkODJiNTcyMWU2IDEwMDY0NFxcbi0tLSBhL25ldC9pcHY2L2FkZHJjb25mLmNcXG4rKysgYi9uZXQvaXB2Ni9hZGRyY29uZi5jXFxuQEAgLTI4NzQsNyArMjg3NCw4IEBAIHZvaWQgYWRkcmNvbmZfcHJlZml4X3JjdihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1OCAqb3B0LCBpbnQgbGVuLCBib29sIHNsbGFvKVxcbiBcXHRcXHRpZiAocnQpIHtcXG4gXFx0XFx0XFx0LyogQXV0b2NvbmYgcHJlZml4IHJvdXRlICovXFxuIFxcdFxcdFxcdGlmICh2YWxpZF9sZnQgPT0gMCkge1xcbi1cXHRcXHRcXHRcXHRpcDZfZGVsX3J0KG5ldCwgcnQsIGZhbHNlKTtcXG4rXFx0XFx0XFx0XFx0aXA2X2RlbF9ydF9yZWFzb24obmV0LCBydCwgZmFsc2UsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgUlRBX0RFTF9SRUFTT05fUkFfV0lUSERSQVdOKTtcXG4gXFx0XFx0XFx0XFx0cnQgPSBOVUxMO1xcbiBcXHRcXHRcXHR9IGVsc2Uge1xcbiBcXHRcXHRcXHRcXHR0YWJsZSA9IHJ0LVxcdTAwM2VmaWI2X3RhYmxlO1xcbmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9pcDZfZmliLmMgYi9uZXQvaXB2Ni9pcDZfZmliLmNcXG5pbmRleCBhMTMwY2RmYWViZmJlZS4uMzJiOWEwMDk1NmEwOTIgMTAwNjQ0XFxuLS0tIGEvbmV0L2lwdjYvaXA2X2ZpYi5jXFxuKysrIGIvbmV0L2lwdjYvaXA2X2ZpYi5jXFxuQEAgLTEyODYsNyArMTI4Niw4IEBAIHN0YXRpYyBpbnQgZmliNl9hZGRfcnQybm9kZShzdHJ1Y3QgZmliNl9ub2RlICpmbiwgc3RydWN0IGZpYjZfaW5mbyAqcnQsXFxuIFxcdFxcdHJjdV9hc3NpZ25fcG9pbnRlcihydC1cXHUwMDNlZmliNl9ub2RlLCBmbik7XFxuIFxcdFxcdHJjdV9hc3NpZ25fcG9pbnRlcigqaW5zLCBydCk7XFxuIFxcdFxcdGlmICghaW5mby1cXHUwMDNlc2tpcF9ub3RpZnkpXFxuLVxcdFxcdFxcdGluZXQ2X3J0X25vdGlmeShSVE1fTkVXUk9VVEUsIHJ0LCBpbmZvLCBubGZsYWdzKTtcXG4rXFx0XFx0XFx0aW5ldDZfcnRfbm90aWZ5KFJUTV9ORVdST1VURSwgcnQsIGluZm8sIG5sZmxhZ3MsXFxuK1xcdFxcdFxcdFxcdFxcdFJUQV9ERUxfUkVBU09OX1VOU1BFQyk7XFxuIFxcdFxcdGluZm8tXFx1MDAzZW5sX25ldC1cXHUwMDNlaXB2Ni5ydDZfc3RhdHMtXFx1MDAzZWZpYl9ydF9lbnRyaWVzKys7XFxuIFxcbiBcXHRcXHRpZiAoIShmbi1cXHUwMDNlZm5fZmxhZ3MgXFx1MDAyNiBSVE5fUlRJTkZPKSkge1xcbkBAIC0xMzE3LDcgKzEzMTgsOCBAQCBzdGF0aWMgaW50IGZpYjZfYWRkX3J0Mm5vZGUoc3RydWN0IGZpYjZfbm9kZSAqZm4sIHN0cnVjdCBmaWI2X2luZm8gKnJ0LFxcbiBcXHRcXHRydC1cXHUwMDNlZmliNl9uZXh0ID0gaXRlci1cXHUwMDNlZmliNl9uZXh0O1xcbiBcXHRcXHRyY3VfYXNzaWduX3BvaW50ZXIoKmlucywgcnQpO1xcbiBcXHRcXHRpZiAoIWluZm8tXFx1MDAzZXNraXBfbm90aWZ5KVxcbi1cXHRcXHRcXHRpbmV0Nl9ydF9ub3RpZnkoUlRNX05FV1JPVVRFLCBydCwgaW5mbywgTkxNX0ZfUkVQTEFDRSk7XFxuK1xcdFxcdFxcdGluZXQ2X3J0X25vdGlmeShSVE1fTkVXUk9VVEUsIHJ0LCBpbmZvLCBOTE1fRl9SRVBMQUNFLFxcbitcXHRcXHRcXHRcXHRcXHRSVEFfREVMX1JFQVNPTl9VTlNQRUMpO1xcbiBcXHRcXHRpZiAoIShmbi1cXHUwMDNlZm5fZmxhZ3MgXFx1MDAyNiBSVE5fUlRJTkZPKSkge1xcbiBcXHRcXHRcXHRpbmZvLVxcdTAwM2VubF9uZXQtXFx1MDAzZWlwdjYucnQ2X3N0YXRzLVxcdTAwM2VmaWJfcm91dGVfbm9kZXMrKztcXG4gXFx0XFx0XFx0Zm4tXFx1MDAzZWZuX2ZsYWdzIHw9IFJUTl9SVElORk87XFxuQEAgLTE5NjYsNyArMTk2OCw4IEBAIHN0YXRpYyBzdHJ1Y3QgZmliNl9ub2RlICpmaWI2X3JlcGFpcl90cmVlKHN0cnVjdCBuZXQgKm5ldCxcXG4gfVxcbiBcXG4gc3RhdGljIHZvaWQgZmliNl9kZWxfcm91dGUoc3RydWN0IGZpYjZfdGFibGUgKnRhYmxlLCBzdHJ1Y3QgZmliNl9ub2RlICpmbixcXG4tXFx0XFx0XFx0ICAgc3RydWN0IGZpYjZfaW5mbyBfX3JjdSAqKnJ0cCwgc3RydWN0IG5sX2luZm8gKmluZm8pXFxuK1xcdFxcdFxcdCAgIHN0cnVjdCBmaWI2X2luZm8gX19yY3UgKipydHAsIHN0cnVjdCBubF9pbmZvICppbmZvLFxcbitcXHRcXHRcXHQgICB1MzIgZGVsX3JlYXNvbilcXG4ge1xcbiBcXHRzdHJ1Y3QgZmliNl9pbmZvICpsZWFmLCAqcmVwbGFjZV9ydCA9IE5VTEw7XFxuIFxcdHN0cnVjdCBmaWI2X3dhbGtlciAqdztcXG5AQCAtMjA1NSwxMyArMjA1OCwxMyBAQCBzdGF0aWMgdm9pZCBmaWI2X2RlbF9yb3V0ZShzdHJ1Y3QgZmliNl90YWJsZSAqdGFibGUsIHN0cnVjdCBmaWI2X25vZGUgKmZuLFxcbiBcXHRcXHRcXHRjYWxsX2ZpYjZfZW50cnlfbm90aWZpZXJzX3JlcGxhY2UobmV0LCByZXBsYWNlX3J0KTtcXG4gXFx0fVxcbiBcXHRpZiAoIWluZm8tXFx1MDAzZXNraXBfbm90aWZ5KVxcbi1cXHRcXHRpbmV0Nl9ydF9ub3RpZnkoUlRNX0RFTFJPVVRFLCBydCwgaW5mbywgMCk7XFxuK1xcdFxcdGluZXQ2X3J0X25vdGlmeShSVE1fREVMUk9VVEUsIHJ0LCBpbmZvLCAwLCBkZWxfcmVhc29uKTtcXG4gXFxuIFxcdGZpYjZfaW5mb19yZWxlYXNlKHJ0KTtcXG4gfVxcbiBcXG4gLyogTmVlZCB0byBvd24gdGFibGUtXFx1MDAzZXRiNl9sb2NrICovXFxuLWludCBmaWI2X2RlbChzdHJ1Y3QgZmliNl9pbmZvICpydCwgc3RydWN0IG5sX2luZm8gKmluZm8pXFxuK2ludCBmaWI2X2RlbChzdHJ1Y3QgZmliNl9pbmZvICpydCwgc3RydWN0IG5sX2luZm8gKmluZm8sIHUzMiBkZWxfcmVhc29uKVxcbiB7XFxuIFxcdHN0cnVjdCBuZXQgKm5ldCA9IGluZm8tXFx1MDAzZW5sX25ldDtcXG4gXFx0c3RydWN0IGZpYjZfaW5mbyBfX3JjdSAqKnJ0cDtcXG5AQCAtMjA5MCw3ICsyMDkzLDcgQEAgaW50IGZpYjZfZGVsKHN0cnVjdCBmaWI2X2luZm8gKnJ0LCBzdHJ1Y3QgbmxfaW5mbyAqaW5mbylcXG4gXFx0XFx0aWYgKHJ0ID09IGN1cikge1xcbiBcXHRcXHRcXHRpZiAoZmliNl9yZXF1aXJlc19zcmMoY3VyKSlcXG4gXFx0XFx0XFx0XFx0ZmliNl9yb3V0ZXNfcmVxdWlyZV9zcmNfZGVjKGluZm8tXFx1MDAzZW5sX25ldCk7XFxuLVxcdFxcdFxcdGZpYjZfZGVsX3JvdXRlKHRhYmxlLCBmbiwgcnRwLCBpbmZvKTtcXG4rXFx0XFx0XFx0ZmliNl9kZWxfcm91dGUodGFibGUsIGZuLCBydHAsIGluZm8sIGRlbF9yZWFzb24pO1xcbiBcXHRcXHRcXHRyZXR1cm4gMDtcXG4gXFx0XFx0fVxcbiBcXHRcXHRydHBfbmV4dCA9IFxcdTAwMjZjdXItXFx1MDAzZWZpYjZfbmV4dDtcXG5AQCAtMjI1Miw3ICsyMjU1LDcgQEAgc3RhdGljIGludCBmaWI2X2NsZWFuX25vZGUoc3RydWN0IGZpYjZfd2Fsa2VyICp3KVxcbiBcXHRcXHRyZXMgPSBjLVxcdTAwM2VmdW5jKHJ0LCBjLVxcdTAwM2VhcmcpO1xcbiBcXHRcXHRpZiAocmVzID09IC0xKSB7XFxuIFxcdFxcdFxcdHctXFx1MDAzZWxlYWYgPSBydDtcXG4tXFx0XFx0XFx0cmVzID0gZmliNl9kZWwocnQsIFxcdTAwMjZpbmZvKTtcXG4rXFx0XFx0XFx0cmVzID0gZmliNl9kZWwocnQsIFxcdTAwMjZpbmZvLCBSVEFfREVMX1JFQVNPTl9VTlNQRUMpO1xcbiBcXHRcXHRcXHRpZiAocmVzKSB7XFxuICNpZiBSVDZfREVCVUcgXFx1MDAzZT0gMlxcbiBcXHRcXHRcXHRcXHRwcl9kZWJ1ZyhcXFwiJXM6IGRlbCBmYWlsZWQ6IHJ0PSVwQCVwIGVycj0lZFxcXFxuXFxcIixcXG5AQCAtMjQwMCw3ICsyNDAzLDcgQEAgc3RhdGljIHZvaWQgZmliNl9nY190YWJsZShzdHJ1Y3QgbmV0ICpuZXQsXFxuIFxcbiBcXHRobGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHJ0LCBuLCBcXHUwMDI2dGI2LVxcdTAwM2V0YjZfZ2NfaGxpc3QsIGdjX2xpbmspXFxuIFxcdFxcdGlmIChmaWI2X2FnZShydCwgZ2NfYXJncykgPT0gLTEpXFxuLVxcdFxcdFxcdGZpYjZfZGVsKHJ0LCBcXHUwMDI2aW5mbyk7XFxuK1xcdFxcdFxcdGZpYjZfZGVsKHJ0LCBcXHUwMDI2aW5mbywgUlRBX0RFTF9SRUFTT05fRVhQSVJFRCk7XFxuIH1cXG4gXFxuIHN0YXRpYyB2b2lkIGZpYjZfZ2NfYWxsKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZpYjZfZ2NfYXJncyAqZ2NfYXJncylcXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjYvbmRpc2MuYyBiL25ldC9pcHY2L25kaXNjLmNcXG5pbmRleCBmODY3ZWM4ZDNkOTA1MS4uYzM1MzdmYzBlYzYzYjEgMTAwNjQ0XFxuLS0tIGEvbmV0L2lwdjYvbmRpc2MuY1xcbisrKyBiL25ldC9pcHY2L25kaXNjLmNcXG5AQCAtMTM2MSw3ICsxMzYxLDkgQEAgc3RhdGljIGVudW0gc2tiX2Ryb3BfcmVhc29uIG5kaXNjX3JvdXRlcl9kaXNjb3Zlcnkoc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4gXFx0ZGVmcnRyX3Vzcl9tZXRyaWMgPSBpbjZfZGV2LVxcdTAwM2VjbmYucmFfZGVmcnRyX21ldHJpYztcXG4gXFx0LyogZGVsZXRlIHRoZSByb3V0ZSBpZiBsaWZldGltZSBpcyAwIG9yIGlmIG1ldHJpYyBuZWVkcyBjaGFuZ2UgKi9cXG4gXFx0aWYgKHJ0IFxcdTAwMjZcXHUwMDI2IChsaWZldGltZSA9PSAwIHx8IHJ0LVxcdTAwM2VmaWI2X21ldHJpYyAhPSBkZWZydHJfdXNyX21ldHJpYykpIHtcXG4tXFx0XFx0aXA2X2RlbF9ydChuZXQsIHJ0LCBmYWxzZSk7XFxuK1xcdFxcdGlwNl9kZWxfcnRfcmVhc29uKG5ldCwgcnQsIGZhbHNlLFxcbitcXHRcXHRcXHRcXHQgIGxpZmV0aW1lID09IDAgPyBSVEFfREVMX1JFQVNPTl9SQV9XSVRIRFJBV04gOlxcbitcXHRcXHRcXHRcXHRcXHRcXHQgIFJUQV9ERUxfUkVBU09OX1VOU1BFQyk7XFxuIFxcdFxcdHJ0ID0gTlVMTDtcXG4gXFx0fVxcbiBcXG5AQCAtMTM5Niw3ICsxMzk4LDggQEAgc3RhdGljIGVudW0gc2tiX2Ryb3BfcmVhc29uIG5kaXNjX3JvdXRlcl9kaXNjb3Zlcnkoc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4gXFx0XFx0XFx0Lm5sX25ldCA9IG5ldCxcXG4gXFx0XFx0fTtcXG4gXFx0XFx0cnQtXFx1MDAzZWZpYjZfZmxhZ3MgPSAocnQtXFx1MDAzZWZpYjZfZmxhZ3MgXFx1MDAyNiB+UlRGX1BSRUZfTUFTSykgfCBSVEZfUFJFRihwcmVmKTtcXG4tXFx0XFx0aW5ldDZfcnRfbm90aWZ5KFJUTV9ORVdST1VURSwgcnQsIFxcdTAwMjZubGluZm8sIE5MTV9GX1JFUExBQ0UpO1xcbitcXHRcXHRpbmV0Nl9ydF9ub3RpZnkoUlRNX05FV1JPVVRFLCBydCwgXFx1MDAyNm5saW5mbywgTkxNX0ZfUkVQTEFDRSxcXG4rXFx0XFx0XFx0XFx0UlRBX0RFTF9SRUFTT05fVU5TUEVDKTtcXG4gXFx0fVxcbiBcXG4gXFx0aWYgKHJ0KSB7XFxuZGlmZiAtLWdpdCBhL25ldC9pcHY2L3JvdXRlLmMgYi9uZXQvaXB2Ni9yb3V0ZS5jXFxuaW5kZXggYTEzMDEzMzRkYTQ4YzAuLmU4ZWQ5NWRjNTY2NWVlIDEwMDY0NFxcbi0tLSBhL25ldC9pcHY2L3JvdXRlLmNcXG4rKysgYi9uZXQvaXB2Ni9yb3V0ZS5jXFxuQEAgLTExMSw3ICsxMTEsNyBAQCBzdGF0aWMgaW50IHJ0Nl9maWxsX25vZGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbiBcXHRcXHRcXHQgc3RydWN0IGZpYjZfaW5mbyAqcnQsIHN0cnVjdCBkc3RfZW50cnkgKmRzdCxcXG4gXFx0XFx0XFx0IHN0cnVjdCBpbjZfYWRkciAqZGVzdCwgc3RydWN0IGluNl9hZGRyICpzcmMsXFxuIFxcdFxcdFxcdCBpbnQgaWlmLCBpbnQgdHlwZSwgdTMyIHBvcnRpZCwgdTMyIHNlcSxcXG4tXFx0XFx0XFx0IHVuc2lnbmVkIGludCBmbGFncyk7XFxuK1xcdFxcdFxcdCB1bnNpZ25lZCBpbnQgZmxhZ3MsIHUzMiBkZWxfcmVhc29uKTtcXG4gc3RhdGljIHN0cnVjdCBydDZfaW5mbyAqcnQ2X2ZpbmRfY2FjaGVkX3J0KGNvbnN0IHN0cnVjdCBmaWI2X3Jlc3VsdCAqcmVzLFxcbiBcXHRcXHRcXHRcXHRcXHQgICBjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKmRhZGRyLFxcbiBcXHRcXHRcXHRcXHRcXHQgICBjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKnNhZGRyKTtcXG5AQCAtMTAyMCw3ICsxMDIwLDcgQEAgaW50IHJ0Nl9yb3V0ZV9yY3Yoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTggKm9wdCwgaW50IGxlbixcXG4gXFx0XFx0XFx0XFx0XFx0Z3dhZGRyLCBkZXYpO1xcbiBcXG4gXFx0aWYgKHJ0IFxcdTAwMjZcXHUwMDI2ICFsaWZldGltZSkge1xcbi1cXHRcXHRpcDZfZGVsX3J0KG5ldCwgcnQsIGZhbHNlKTtcXG4rXFx0XFx0aXA2X2RlbF9ydF9yZWFzb24obmV0LCBydCwgZmFsc2UsIFJUQV9ERUxfUkVBU09OX1JBX1dJVEhEUkFXTik7XFxuIFxcdFxcdHJ0ID0gTlVMTDtcXG4gXFx0fVxcbiBcXG5AQCAtMzk3Myw3ICszOTczLDggQEAgaW50IGlwNl9yb3V0ZV9hZGQoc3RydWN0IGZpYjZfY29uZmlnICpjZmcsIGdmcF90IGdmcF9mbGFncyxcXG4gXFx0cmV0dXJuIGVycjtcXG4gfVxcbiBcXG4tc3RhdGljIGludCBfX2lwNl9kZWxfcnQoc3RydWN0IGZpYjZfaW5mbyAqcnQsIHN0cnVjdCBubF9pbmZvICppbmZvKVxcbitzdGF0aWMgaW50IF9faXA2X2RlbF9ydChzdHJ1Y3QgZmliNl9pbmZvICpydCwgc3RydWN0IG5sX2luZm8gKmluZm8sXFxuK1xcdFxcdFxcdHUzMiBkZWxfcmVhc29uKVxcbiB7XFxuIFxcdHN0cnVjdCBuZXQgKm5ldCA9IGluZm8tXFx1MDAzZW5sX25ldDtcXG4gXFx0c3RydWN0IGZpYjZfdGFibGUgKnRhYmxlO1xcbkBAIC0zOTg2LDcgKzM5ODcsNyBAQCBzdGF0aWMgaW50IF9faXA2X2RlbF9ydChzdHJ1Y3QgZmliNl9pbmZvICpydCwgc3RydWN0IG5sX2luZm8gKmluZm8pXFxuIFxcbiBcXHR0YWJsZSA9IHJ0LVxcdTAwM2VmaWI2X3RhYmxlO1xcbiBcXHRzcGluX2xvY2tfYmgoXFx1MDAyNnRhYmxlLVxcdTAwM2V0YjZfbG9jayk7XFxuLVxcdGVyciA9IGZpYjZfZGVsKHJ0LCBpbmZvKTtcXG4rXFx0ZXJyID0gZmliNl9kZWwocnQsIGluZm8sIGRlbF9yZWFzb24pO1xcbiBcXHRzcGluX3VubG9ja19iaChcXHUwMDI2dGFibGUtXFx1MDAzZXRiNl9sb2NrKTtcXG4gXFxuIG91dDpcXG5AQCAtMzk5NCwxNCArMzk5NSwyMCBAQCBzdGF0aWMgaW50IF9faXA2X2RlbF9ydChzdHJ1Y3QgZmliNl9pbmZvICpydCwgc3RydWN0IG5sX2luZm8gKmluZm8pXFxuIFxcdHJldHVybiBlcnI7XFxuIH1cXG4gXFxuLWludCBpcDZfZGVsX3J0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZpYjZfaW5mbyAqcnQsIGJvb2wgc2tpcF9ub3RpZnkpXFxuK2ludCBpcDZfZGVsX3J0X3JlYXNvbihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBmaWI2X2luZm8gKnJ0LCBib29sIHNraXBfbm90aWZ5LFxcbitcXHRcXHQgICAgICB1MzIgZGVsX3JlYXNvbilcXG4ge1xcbiBcXHRzdHJ1Y3QgbmxfaW5mbyBpbmZvID0ge1xcbiBcXHRcXHQubmxfbmV0ID0gbmV0LFxcbi1cXHRcXHQuc2tpcF9ub3RpZnkgPSBza2lwX25vdGlmeVxcbitcXHRcXHQuc2tpcF9ub3RpZnkgPSBza2lwX25vdGlmeSxcXG4gXFx0fTtcXG4gXFxuLVxcdHJldHVybiBfX2lwNl9kZWxfcnQocnQsIFxcdTAwMjZpbmZvKTtcXG4rXFx0cmV0dXJuIF9faXA2X2RlbF9ydChydCwgXFx1MDAyNmluZm8sIGRlbF9yZWFzb24pO1xcbit9XFxuK1xcbitpbnQgaXA2X2RlbF9ydChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBmaWI2X2luZm8gKnJ0LCBib29sIHNraXBfbm90aWZ5KVxcbit7XFxuK1xcdHJldHVybiBpcDZfZGVsX3J0X3JlYXNvbihuZXQsIHJ0LCBza2lwX25vdGlmeSwgUlRBX0RFTF9SRUFTT05fVU5TUEVDKTtcXG4gfVxcbiBcXG4gc3RhdGljIGludCBfX2lwNl9kZWxfcnRfc2libGluZ3Moc3RydWN0IGZpYjZfaW5mbyAqcnQsIHN0cnVjdCBmaWI2X2NvbmZpZyAqY2ZnKVxcbkBAIC00MDI4LDcgKzQwMzUsOCBAQCBzdGF0aWMgaW50IF9faXA2X2RlbF9ydF9zaWJsaW5ncyhzdHJ1Y3QgZmliNl9pbmZvICpydCwgc3RydWN0IGZpYjZfY29uZmlnICpjZmcpXFxuIFxcbiBcXHRcXHRcXHRpZiAocnQ2X2ZpbGxfbm9kZShuZXQsIHNrYiwgcnQsIE5VTEwsXFxuIFxcdFxcdFxcdFxcdFxcdCAgTlVMTCwgTlVMTCwgMCwgUlRNX0RFTFJPVVRFLFxcbi1cXHRcXHRcXHRcXHRcXHQgIGluZm8tXFx1MDAzZXBvcnRpZCwgc2VxLCAwKSBcXHUwMDNjIDApIHtcXG4rXFx0XFx0XFx0XFx0XFx0ICBpbmZvLVxcdTAwM2Vwb3J0aWQsIHNlcSwgMCxcXG4rXFx0XFx0XFx0XFx0XFx0ICBSVEFfREVMX1JFQVNPTl9VTlNQRUMpIFxcdTAwM2MgMCkge1xcbiBcXHRcXHRcXHRcXHRrZnJlZV9za2Ioc2tiKTtcXG4gXFx0XFx0XFx0XFx0c2tiID0gTlVMTDtcXG4gXFx0XFx0XFx0fSBlbHNlXFxuQEAgLTQwNjQsMTMgKzQwNzIsMTMgQEAgc3RhdGljIGludCBfX2lwNl9kZWxfcnRfc2libGluZ3Moc3RydWN0IGZpYjZfaW5mbyAqcnQsIHN0cnVjdCBmaWI2X2NvbmZpZyAqY2ZnKVxcbiBcXHRcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoc2libGluZywgbmV4dF9zaWJsaW5nLFxcbiBcXHRcXHRcXHRcXHRcXHQgXFx1MDAyNnJ0LVxcdTAwM2VmaWI2X3NpYmxpbmdzLFxcbiBcXHRcXHRcXHRcXHRcXHQgZmliNl9zaWJsaW5ncykge1xcbi1cXHRcXHRcXHRlcnIgPSBmaWI2X2RlbChzaWJsaW5nLCBpbmZvKTtcXG4rXFx0XFx0XFx0ZXJyID0gZmliNl9kZWwoc2libGluZywgaW5mbywgUlRBX0RFTF9SRUFTT05fVU5TUEVDKTtcXG4gXFx0XFx0XFx0aWYgKGVycilcXG4gXFx0XFx0XFx0XFx0Z290byBvdXRfdW5sb2NrO1xcbiBcXHRcXHR9XFxuIFxcdH1cXG4gXFxuLVxcdGVyciA9IGZpYjZfZGVsKHJ0LCBpbmZvKTtcXG4rXFx0ZXJyID0gZmliNl9kZWwocnQsIGluZm8sIFJUQV9ERUxfUkVBU09OX1VOU1BFQyk7XFxuIG91dF91bmxvY2s6XFxuIFxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZ0YWJsZS1cXHUwMDNldGI2X2xvY2spO1xcbiBvdXRfcHV0OlxcbkBAIC00MTk2LDcgKzQyMDQsOCBAQCBzdGF0aWMgaW50IGlwNl9yb3V0ZV9kZWwoc3RydWN0IGZpYjZfY29uZmlnICpjZmcsXFxuIFxcdFxcdFxcdFxcdGlmICghZmliNl9pbmZvX2hvbGRfc2FmZShydCkpXFxuIFxcdFxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbiBcXG4tXFx0XFx0XFx0XFx0ZXJyID0gIF9faXA2X2RlbF9ydChydCwgXFx1MDAyNmNmZy1cXHUwMDNlZmNfbmxpbmZvKTtcXG4rXFx0XFx0XFx0XFx0ZXJyID0gX19pcDZfZGVsX3J0KHJ0LCBcXHUwMDI2Y2ZnLVxcdTAwM2VmY19ubGluZm8sXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgIFJUQV9ERUxfUkVBU09OX1VOU1BFQyk7XFxuIFxcdFxcdFxcdFxcdGJyZWFrO1xcbiBcXHRcXHRcXHR9XFxuIFxcdFxcdFxcdGlmIChjZmctXFx1MDAzZWZjX25oX2lkKVxcbkBAIC00MjE1LDcgKzQyMjQsOCBAQCBzdGF0aWMgaW50IGlwNl9yb3V0ZV9kZWwoc3RydWN0IGZpYjZfY29uZmlnICpjZmcsXFxuIFxcbiBcXHRcXHRcXHQvKiBpZiBnYXRld2F5IHdhcyBzcGVjaWZpZWQgb25seSBkZWxldGUgdGhlIG9uZSBob3AgKi9cXG4gXFx0XFx0XFx0aWYgKGNmZy1cXHUwMDNlZmNfZmxhZ3MgXFx1MDAyNiBSVEZfR0FURVdBWSlcXG4tXFx0XFx0XFx0XFx0ZXJyID0gX19pcDZfZGVsX3J0KHJ0LCBcXHUwMDI2Y2ZnLVxcdTAwM2VmY19ubGluZm8pO1xcbitcXHRcXHRcXHRcXHRlcnIgPSBfX2lwNl9kZWxfcnQocnQsIFxcdTAwMjZjZmctXFx1MDAzZWZjX25saW5mbyxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICAgUlRBX0RFTF9SRUFTT05fVU5TUEVDKTtcXG4gXFx0XFx0XFx0ZWxzZVxcbiBcXHRcXHRcXHRcXHRlcnIgPSBfX2lwNl9kZWxfcnRfc2libGluZ3MocnQsIGNmZyk7XFxuIFxcdFxcdFxcdGJyZWFrO1xcbkBAIC01MzgxLDcgKzUzOTEsOCBAQCBzdGF0aWMgdm9pZCBpcDZfcm91dGVfbXBhdGhfbm90aWZ5KHN0cnVjdCBmaWI2X2luZm8gKnJ0LFxcbiBcXHR9XFxuIFxcbiBcXHRpZiAocnQpXFxuLVxcdFxcdGluZXQ2X3J0X25vdGlmeShSVE1fTkVXUk9VVEUsIHJ0LCBpbmZvLCBubGZsYWdzKTtcXG4rXFx0XFx0aW5ldDZfcnRfbm90aWZ5KFJUTV9ORVdST1VURSwgcnQsIGluZm8sIG5sZmxhZ3MsXFxuK1xcdFxcdFxcdFxcdFJUQV9ERUxfUkVBU09OX1VOU1BFQyk7XFxuIFxcbiBcXHRyY3VfcmVhZF91bmxvY2soKTtcXG4gfVxcbkBAIC01NzM5LDYgKzU3NTAsNyBAQCBzdGF0aWMgc2l6ZV90IHJ0Nl9ubG1zZ19zaXplKHN0cnVjdCBmaWI2X2luZm8gKmY2aSlcXG4gXFx0ICAgICAgICsgbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHN0cnVjdCBydGFfY2FjaGVpbmZvKSlcXG4gXFx0ICAgICAgICsgbmxhX3RvdGFsX3NpemUoVENQX0NBX05BTUVfTUFYKSAvKiBSVEFYX0NDX0FMR08gKi9cXG4gXFx0ICAgICAgICsgbmxhX3RvdGFsX3NpemUoMSkgLyogUlRBX1BSRUYgKi9cXG4rXFx0ICAgICAgICsgbmxhX3RvdGFsX3NpemUoNCkgLyogUlRBX0RFTF9SRUFTT04gKi9cXG4gXFx0ICAgICAgICsgbmV4dGhvcF9sZW47XFxuIH1cXG4gXFxuQEAgLTU3NzUsNyArNTc4Nyw3IEBAIHN0YXRpYyBpbnQgcnQ2X2ZpbGxfbm9kZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICpza2IsXFxuIFxcdFxcdFxcdCBzdHJ1Y3QgZmliNl9pbmZvICpydCwgc3RydWN0IGRzdF9lbnRyeSAqZHN0LFxcbiBcXHRcXHRcXHQgc3RydWN0IGluNl9hZGRyICpkZXN0LCBzdHJ1Y3QgaW42X2FkZHIgKnNyYyxcXG4gXFx0XFx0XFx0IGludCBpaWYsIGludCB0eXBlLCB1MzIgcG9ydGlkLCB1MzIgc2VxLFxcbi1cXHRcXHRcXHQgdW5zaWduZWQgaW50IGZsYWdzKVxcbitcXHRcXHRcXHQgdW5zaWduZWQgaW50IGZsYWdzLCB1MzIgZGVsX3JlYXNvbilcXG4ge1xcbiBcXHRzdHJ1Y3QgcnQ2X2luZm8gKnJ0NiA9IGRzdF9ydDZfaW5mbyhkc3QpO1xcbiBcXHRzdHJ1Y3QgcnQ2a2V5ICpydDZfZHN0LCAqcnQ2X3NyYztcXG5AQCAtNTk1NCw2ICs1OTY2LDEwIEBAIHN0YXRpYyBpbnQgcnQ2X2ZpbGxfbm9kZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICpza2IsXFxuIFxcdGlmIChydG5sX3B1dF9jYWNoZWluZm8oc2tiLCBkc3QsIDAsIGV4cGlyZXMsIGRzdCA/IGRzdC1cXHUwMDNlZXJyb3IgOiAwKSBcXHUwMDNjIDApXFxuIFxcdFxcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xcbiBcXG4rXFx0aWYgKHR5cGUgPT0gUlRNX0RFTFJPVVRFIFxcdTAwMjZcXHUwMDI2IGRlbF9yZWFzb24gIT0gUlRBX0RFTF9SRUFTT05fVU5TUEVDIFxcdTAwMjZcXHUwMDI2XFxuK1xcdCAgICBubGFfcHV0X3UzMihza2IsIFJUQV9ERUxfUkVBU09OLCBkZWxfcmVhc29uKSlcXG4rXFx0XFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XFxuK1xcbiBcXHRpZiAobmxhX3B1dF91OChza2IsIFJUQV9QUkVGLCBJUFY2X0VYVFJBQ1RfUFJFRihydDZfZmxhZ3MpKSlcXG4gXFx0XFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XFxuIFxcbkBAIC02MDU1LDcgKzYwNzEsOCBAQCBzdGF0aWMgaW50IHJ0Nl9uaF9kdW1wX2V4Y2VwdGlvbnMoc3RydWN0IGZpYjZfbmggKm5oLCB2b2lkICphcmcpXFxuIFxcdFxcdFxcdFxcdFxcdCAgICBcXHUwMDI2cnQ2X2V4LVxcdTAwM2VydDZpLVxcdTAwM2Vkc3QsIE5VTEwsIE5VTEwsIDAsXFxuIFxcdFxcdFxcdFxcdFxcdCAgICBSVE1fTkVXUk9VVEUsXFxuIFxcdFxcdFxcdFxcdFxcdCAgICBORVRMSU5LX0NCKGR1bXAtXFx1MDAzZWNiLVxcdTAwM2Vza2IpLnBvcnRpZCxcXG4tXFx0XFx0XFx0XFx0XFx0ICAgIGR1bXAtXFx1MDAzZWNiLVxcdTAwM2VubGgtXFx1MDAzZW5sbXNnX3NlcSwgdy1cXHUwMDNlZmxhZ3MpO1xcbitcXHRcXHRcXHRcXHRcXHQgICAgZHVtcC1cXHUwMDNlY2ItXFx1MDAzZW5saC1cXHUwMDNlbmxtc2dfc2VxLCB3LVxcdTAwM2VmbGFncyxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgIFJUQV9ERUxfUkVBU09OX1VOU1BFQyk7XFxuIFxcdFxcdFxcdGlmIChlcnIpXFxuIFxcdFxcdFxcdFxcdHJldHVybiBlcnI7XFxuIFxcbkBAIC02MTAzLDcgKzYxMjAsOCBAQCBpbnQgcnQ2X2R1bXBfcm91dGUoc3RydWN0IGZpYjZfaW5mbyAqcnQsIHZvaWQgKnBfYXJnLCB1bnNpZ25lZCBpbnQgc2tpcClcXG4gXFx0XFx0XFx0aWYgKHJ0Nl9maWxsX25vZGUobmV0LCBhcmctXFx1MDAzZXNrYiwgcnQsIE5VTEwsIE5VTEwsIE5VTEwsXFxuIFxcdFxcdFxcdFxcdFxcdCAgMCwgUlRNX05FV1JPVVRFLFxcbiBcXHRcXHRcXHRcXHRcXHQgIE5FVExJTktfQ0IoYXJnLVxcdTAwM2VjYi1cXHUwMDNlc2tiKS5wb3J0aWQsXFxuLVxcdFxcdFxcdFxcdFxcdCAgYXJnLVxcdTAwM2VjYi1cXHUwMDNlbmxoLVxcdTAwM2VubG1zZ19zZXEsIGZsYWdzKSkge1xcbitcXHRcXHRcXHRcXHRcXHQgIGFyZy1cXHUwMDNlY2ItXFx1MDAzZW5saC1cXHUwMDNlbmxtc2dfc2VxLCBmbGFncyxcXG4rXFx0XFx0XFx0XFx0XFx0ICBSVEFfREVMX1JFQVNPTl9VTlNQRUMpKSB7XFxuIFxcdFxcdFxcdFxcdHJldHVybiAwO1xcbiBcXHRcXHRcXHR9XFxuIFxcdFxcdFxcdGNvdW50Kys7XFxuQEAgLTYzMzYsMTIgKzYzNTQsMTQgQEAgc3RhdGljIGludCBpbmV0Nl9ydG1fZ2V0cm91dGUoc3RydWN0IHNrX2J1ZmYgKmluX3NrYiwgc3RydWN0IG5sbXNnaGRyICpubGgsXFxuIFxcdFxcdFxcdGVyciA9IHJ0Nl9maWxsX25vZGUobmV0LCBza2IsIGZyb20sIE5VTEwsIE5VTEwsIE5VTEwsXFxuIFxcdFxcdFxcdFxcdFxcdCAgICBpaWYsIFJUTV9ORVdST1VURSxcXG4gXFx0XFx0XFx0XFx0XFx0ICAgIE5FVExJTktfQ0IoaW5fc2tiKS5wb3J0aWQsXFxuLVxcdFxcdFxcdFxcdFxcdCAgICBubGgtXFx1MDAzZW5sbXNnX3NlcSwgMCk7XFxuK1xcdFxcdFxcdFxcdFxcdCAgICBubGgtXFx1MDAzZW5sbXNnX3NlcSwgMCxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgIFJUQV9ERUxfUkVBU09OX1VOU1BFQyk7XFxuIFxcdFxcdGVsc2VcXG4gXFx0XFx0XFx0ZXJyID0gcnQ2X2ZpbGxfbm9kZShuZXQsIHNrYiwgZnJvbSwgZHN0LCBcXHUwMDI2Zmw2LmRhZGRyLFxcbiBcXHRcXHRcXHRcXHRcXHQgICAgXFx1MDAyNmZsNi5zYWRkciwgaWlmLCBSVE1fTkVXUk9VVEUsXFxuIFxcdFxcdFxcdFxcdFxcdCAgICBORVRMSU5LX0NCKGluX3NrYikucG9ydGlkLFxcbi1cXHRcXHRcXHRcXHRcXHQgICAgbmxoLVxcdTAwM2VubG1zZ19zZXEsIDApO1xcbitcXHRcXHRcXHRcXHRcXHQgICAgbmxoLVxcdTAwM2VubG1zZ19zZXEsIDAsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICBSVEFfREVMX1JFQVNPTl9VTlNQRUMpO1xcbiBcXHR9IGVsc2Uge1xcbiBcXHRcXHRlcnIgPSAtRU5FVFVOUkVBQ0g7XFxuIFxcdH1cXG5AQCAtNjM1OCw3ICs2Mzc4LDcgQEAgc3RhdGljIGludCBpbmV0Nl9ydG1fZ2V0cm91dGUoc3RydWN0IHNrX2J1ZmYgKmluX3NrYiwgc3RydWN0IG5sbXNnaGRyICpubGgsXFxuIH1cXG4gXFxuIHZvaWQgaW5ldDZfcnRfbm90aWZ5KGludCBldmVudCwgc3RydWN0IGZpYjZfaW5mbyAqcnQsIHN0cnVjdCBubF9pbmZvICppbmZvLFxcbi1cXHRcXHQgICAgIHVuc2lnbmVkIGludCBubG1fZmxhZ3MpXFxuK1xcdFxcdCAgICAgdW5zaWduZWQgaW50IG5sbV9mbGFncywgdTMyIGRlbF9yZWFzb24pXFxuIHtcXG4gXFx0c3RydWN0IG5ldCAqbmV0ID0gaW5mby1cXHUwMDNlbmxfbmV0O1xcbiBcXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xcbkBAIC02Mzc3LDcgKzYzOTcsOCBAQCB2b2lkIGluZXQ2X3J0X25vdGlmeShpbnQgZXZlbnQsIHN0cnVjdCBmaWI2X2luZm8gKnJ0LCBzdHJ1Y3QgbmxfaW5mbyAqaW5mbyxcXG4gXFx0XFx0Z290byBlcnJvdXQ7XFxuIFxcbiBcXHRlcnIgPSBydDZfZmlsbF9ub2RlKG5ldCwgc2tiLCBydCwgTlVMTCwgTlVMTCwgTlVMTCwgMCxcXG4tXFx0XFx0XFx0ICAgIGV2ZW50LCBpbmZvLVxcdTAwM2Vwb3J0aWQsIHNlcSwgbmxtX2ZsYWdzKTtcXG4rXFx0XFx0XFx0ICAgIGV2ZW50LCBpbmZvLVxcdTAwM2Vwb3J0aWQsIHNlcSwgbmxtX2ZsYWdzLFxcbitcXHRcXHRcXHQgICAgZGVsX3JlYXNvbik7XFxuIFxcdGlmIChlcnIgXFx1MDAzYyAwKSB7XFxuIFxcdFxcdGtmcmVlX3NrYihza2IpO1xcbiBcXHRcXHQvKiAtRU1TR1NJWkUgaW1wbGllcyBuZWVkZWQgc3BhY2UgZ3JldyB1bmRlciB1cy4gKi9cXG5AQCAtNjQxMCw3ICs2NDMxLDggQEAgdm9pZCBmaWI2X3J0X3VwZGF0ZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBmaWI2X2luZm8gKnJ0LFxcbiBcXHRcXHRnb3RvIGVycm91dDtcXG4gXFxuIFxcdGVyciA9IHJ0Nl9maWxsX25vZGUobmV0LCBza2IsIHJ0LCBOVUxMLCBOVUxMLCBOVUxMLCAwLFxcbi1cXHRcXHRcXHQgICAgUlRNX05FV1JPVVRFLCBpbmZvLVxcdTAwM2Vwb3J0aWQsIHNlcSwgTkxNX0ZfUkVQTEFDRSk7XFxuK1xcdFxcdFxcdCAgICBSVE1fTkVXUk9VVEUsIGluZm8tXFx1MDAzZXBvcnRpZCwgc2VxLCBOTE1fRl9SRVBMQUNFLFxcbitcXHRcXHRcXHQgICAgUlRBX0RFTF9SRUFTT05fVU5TUEVDKTtcXG4gXFx0aWYgKGVyciBcXHUwMDNjIDApIHtcXG4gXFx0XFx0LyogLUVNU0dTSVpFIGltcGxpZXMgQlVHIGluIHJ0Nl9ubG1zZ19zaXplKCkgKi9cXG4gXFx0XFx0V0FSTl9PTihlcnIgPT0gLUVNU0dTSVpFKTtcXG5AQCAtNjQ2Myw3ICs2NDg1LDcgQEAgdm9pZCBmaWI2X2luZm9faHdfZmxhZ3Nfc2V0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZpYjZfaW5mbyAqZjZpLFxcbiBcXHR9XFxuIFxcbiBcXHRlcnIgPSBydDZfZmlsbF9ub2RlKG5ldCwgc2tiLCBmNmksIE5VTEwsIE5VTEwsIE5VTEwsIDAsIFJUTV9ORVdST1VURSwgMCxcXG4tXFx0XFx0XFx0ICAgIDAsIDApO1xcbitcXHRcXHRcXHQgICAgMCwgMCwgUlRBX0RFTF9SRUFTT05fVU5TUEVDKTtcXG4gXFx0aWYgKGVyciBcXHUwMDNjIDApIHtcXG4gXFx0XFx0LyogLUVNU0dTSVpFIGltcGxpZXMgQlVHIGluIHJ0Nl9ubG1zZ19zaXplKCkgKi9cXG4gXFx0XFx0V0FSTl9PTihlcnIgPT0gLUVNU0dTSVpFKTtcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2xpYi9weS9fX2luaXRfXy5weSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9saWIvcHkvX19pbml0X18ucHlcXG5pbmRleCBlNThiZGJkYzU4ZWVhZC4uMzQ5MzU4ODZiNmFkZmUgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2xpYi9weS9fX2luaXRfXy5weVxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9saWIvcHkvX19pbml0X18ucHlcXG5AQCAtMTcsNyArMTcsNyBAQCBmcm9tIC51dGlscyBpbXBvcnQgQ21kRXhpdEZhaWx1cmUsIGZkX3JlYWRfdGltZW91dCwgY21kLCBia2csIGRlZmVyLCBcXFxcXFxuICAgICB3YWl0X2ZpbGUsIHRvb2wsIHRjXFxuIGZyb20gLmJwZiBpbXBvcnQgYnBmX21hcF9zZXQsIGJwZl9tYXBfZHVtcCwgYnBmX3Byb2dfbWFwX2lkc1xcbiBmcm9tIC55bmwgaW1wb3J0IE5sRXJyb3IsIE5sY3RybEZhbWlseSwgWW5sRmFtaWx5LCBcXFxcXFxuLSAgICBFdGh0b29sRmFtaWx5LCBOZXRkZXZGYW1pbHksIFJ0bmxGYW1pbHksIFJ0bmxBZGRyRmFtaWx5XFxuKyAgICBFdGh0b29sRmFtaWx5LCBOZXRkZXZGYW1pbHksIFJ0bmxGYW1pbHksIFJ0bmxBZGRyRmFtaWx5LCBSdG5sUm91dGVGYW1pbHlcXG4gZnJvbSAueW5sIGltcG9ydCBOZXRzaGFwZXJGYW1pbHksIERldmxpbmtGYW1pbHksIFBTUEZhbWlseSwgTmV0bGlua1xcbiBcXG4gX19hbGxfXyA9IFtcXFwiS1NSQ1xcXCIsXFxuQEAgLTM0LDQgKzM0LDQgQEAgX19hbGxfXyA9IFtcXFwiS1NSQ1xcXCIsXFxuICAgICAgICAgICAgXFxcIk5ldGRldlNpbVxcXCIsIFxcXCJOZXRkZXZTaW1EZXZcXFwiLFxcbiAgICAgICAgICAgIFxcXCJOZXRzaGFwZXJGYW1pbHlcXFwiLCBcXFwiRGV2bGlua0ZhbWlseVxcXCIsIFxcXCJQU1BGYW1pbHlcXFwiLCBcXFwiTmxFcnJvclxcXCIsXFxuICAgICAgICAgICAgXFxcIllubEZhbWlseVxcXCIsIFxcXCJFdGh0b29sRmFtaWx5XFxcIiwgXFxcIk5ldGRldkZhbWlseVxcXCIsIFxcXCJSdG5sRmFtaWx5XFxcIixcXG4tICAgICAgICAgICBcXFwiTmxjdHJsRmFtaWx5XFxcIiwgXFxcIlJ0bmxBZGRyRmFtaWx5XFxcIiwgXFxcIk5ldGxpbmtcXFwiXVxcbisgICAgICAgICAgIFxcXCJObGN0cmxGYW1pbHlcXFwiLCBcXFwiUnRubEFkZHJGYW1pbHlcXFwiLCBcXFwiUnRubFJvdXRlRmFtaWx5XFxcIiwgXFxcIk5ldGxpbmtcXFwiXVxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbGliL3B5L3lubC5weSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9saWIvcHkveW5sLnB5XFxuaW5kZXggMmU1NjcwNjJhYTZjY2UuLjA4ZGVmZjc1NmYyOWIwIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9saWIvcHkveW5sLnB5XFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2xpYi9weS95bmwucHlcXG5AQCAtMjksNyArMjksNyBAQCBleGNlcHQgTW9kdWxlTm90Rm91bmRFcnJvciBhcyBlOlxcbiBcXG4gX19hbGxfXyA9IFtcXG4gICAgIFxcXCJObEVycm9yXFxcIiwgXFxcIk5sUG9saWN5XFxcIiwgXFxcIk5ldGxpbmtcXFwiLCBcXFwiWW5sRmFtaWx5XFxcIiwgXFxcIlNQRUNfUEFUSFxcXCIsXFxuLSAgICBcXFwiRXRodG9vbEZhbWlseVxcXCIsIFxcXCJSdG5sRmFtaWx5XFxcIiwgXFxcIlJ0bmxBZGRyRmFtaWx5XFxcIixcXG4rICAgIFxcXCJFdGh0b29sRmFtaWx5XFxcIiwgXFxcIlJ0bmxGYW1pbHlcXFwiLCBcXFwiUnRubEFkZHJGYW1pbHlcXFwiLCBcXFwiUnRubFJvdXRlRmFtaWx5XFxcIixcXG4gICAgIFxcXCJOZXRkZXZGYW1pbHlcXFwiLCBcXFwiTmV0c2hhcGVyRmFtaWx5XFxcIiwgXFxcIk5sY3RybEZhbWlseVxcXCIsIFxcXCJEZXZsaW5rRmFtaWx5XFxcIixcXG4gICAgIFxcXCJQU1BGYW1pbHlcXFwiLFxcbiBdXFxuQEAgLTU0LDYgKzU0LDExIEBAIGNsYXNzIFJ0bmxBZGRyRmFtaWx5KFlubEZhbWlseSk6XFxuICAgICAgICAgc3VwZXIoKS5fX2luaXRfXygoU1BFQ19QQVRIIC8gUGF0aCgncnQtYWRkci55YW1sJykpLmFzX3Bvc2l4KCksXFxuICAgICAgICAgICAgICAgICAgICAgICAgICBzY2hlbWE9JycsIHJlY3Zfc2l6ZT1yZWN2X3NpemUpXFxuIFxcbitjbGFzcyBSdG5sUm91dGVGYW1pbHkoWW5sRmFtaWx5KTpcXG4rICAgIGRlZiBfX2luaXRfXyhzZWxmLCByZWN2X3NpemU9MCk6XFxuKyAgICAgICAgc3VwZXIoKS5fX2luaXRfXygoU1BFQ19QQVRIIC8gUGF0aCgncnQtcm91dGUueWFtbCcpKS5hc19wb3NpeCgpLFxcbisgICAgICAgICAgICAgICAgICAgICAgICAgc2NoZW1hPScnLCByZWN2X3NpemU9cmVjdl9zaXplKVxcbitcXG4gY2xhc3MgTmV0ZGV2RmFtaWx5KFlubEZhbWlseSk6XFxuICAgICBkZWYgX19pbml0X18oc2VsZiwgcmVjdl9zaXplPTApOlxcbiAgICAgICAgIHN1cGVyKCkuX19pbml0X18oKFNQRUNfUEFUSCAvIFBhdGgoJ25ldGRldi55YW1sJykpLmFzX3Bvc2l4KCksXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9ydG5ldGxpbmsucHkgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvcnRuZXRsaW5rLnB5XFxuaW5kZXggMGM2N2M3YzAwZDg0MWMuLmY3NGNjZDVjMmQxM2FhIDEwMDc1NVxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9ydG5ldGxpbmsucHlcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvcnRuZXRsaW5rLnB5XFxuQEAgLTUsNyArNSw4IEBAIGltcG9ydCBzb2NrZXRcXG4gaW1wb3J0IHN0cnVjdFxcbiBpbXBvcnQgdGltZVxcbiBmcm9tIGxpYi5weSBpbXBvcnQgYmtnLCBpcCwga3NmdF9leGl0LCBrc2Z0X3J1biwga3NmdF9lcSwga3NmdF9nZSwga3NmdF90cnVlLCBLc2Z0U2tpcEV4XFxuLWZyb20gbGliLnB5IGltcG9ydCBDbWRFeGl0RmFpbHVyZSwgTmV0TlMsIE5ldE5TRW50ZXIsIFJ0bmxBZGRyRmFtaWx5XFxuK2Zyb20gbGliLnB5IGltcG9ydCBrc2Z0X25vdF9pbiwga3NmdF9ub3Rfbm9uZVxcbitmcm9tIGxpYi5weSBpbXBvcnQgQ21kRXhpdEZhaWx1cmUsIE5ldE5TLCBOZXROU0VudGVyLCBSdG5sQWRkckZhbWlseSwgUnRubFJvdXRlRmFtaWx5XFxuIFxcbiBJUFY0X0FMTF9IT1NUU19NVUxUSUNBU1QgPSBiJ1xcXFx4ZTBcXFxceDAwXFxcXHgwMFxcXFx4MDEnXFxuIElQVjRfVEVTVF9NVUxUSUNBU1QgPSBiJ1xcXFx4ZWZcXFxceDAxXFxcXHgwMVxcXFx4MDEnXFxuQEAgLTEzNCw4ICsxMzUsMTg0IEBAIGRlZiBpcHY0X2RldmNvbmZfbm90aWZ5KCkgLVxcdTAwM2UgTm9uZTpcXG4gICAgIGtzZnRfdHJ1ZShmXFxcImluZXQge2lmbmFtZX0gZm9yd2FyZGluZyBvblxcXCIgaW4gY21kX29iai5zdGRvdXQsXFxuICAgICAgICAgICAgICAgZlxcXCJObyAnZm9yd2FyZGluZyBvbicgbm90aWZpY2lhdGlvbiBmb3VuZCBmb3IgaW50ZXJmYWNlIHtpZm5hbWV9XFxcIilcXG4gXFxuK2RlZiBfcnRubF9yb3V0ZV9zdWJzY3JpYmUobnMpOlxcbisgICAgd2l0aCBOZXROU0VudGVyKHN0cihucykpOlxcbisgICAgICAgIHJ0bmwgPSBSdG5sUm91dGVGYW1pbHkoKVxcbisgICAgcnRubC5udGZfc3Vic2NyaWJlKFxcXCJydG5sZ3JwLWlwdjYtcm91dGVcXFwiKVxcbisgICAgcmV0dXJuIHJ0bmxcXG4rXFxuK1xcbitkZWYgX3dhaXRfcm91dGVfbnRmKHJ0bmwsIG5hbWUsIGRzdF9sZW4sIGRzdD1Ob25lLCBkZWFkbGluZT0xMCk6XFxuKyAgICBcXFwiXFxcIlxcXCJSZXR1cm4gdGhlIGF0dHJzIG9mIHRoZSBmaXJzdCBtYXRjaGluZyBub3RpZmljYXRpb24sIE5vbmUgb24gdGltZW91dC5cXFwiXFxcIlxcXCJcXG4rXFxuKyAgICBmb3IgbXNnIGluIHJ0bmwucG9sbF9udGYoZHVyYXRpb249ZGVhZGxpbmUpOlxcbisgICAgICAgIGlmIG1zZ1snbmFtZSddICE9IG5hbWU6XFxuKyAgICAgICAgICAgIGNvbnRpbnVlXFxuKyAgICAgICAgYXR0cnMgPSBtc2dbJ21zZyddXFxuKyAgICAgICAgaWYgYXR0cnNbJ3J0bS1kc3QtbGVuJ10gIT0gZHN0X2xlbjpcXG4rICAgICAgICAgICAgY29udGludWVcXG4rICAgICAgICBpZiBkc3QgaXMgbm90IE5vbmUgYW5kIGF0dHJzLmdldCgnZHN0JykgIT0gZHN0OlxcbisgICAgICAgICAgICBjb250aW51ZVxcbisgICAgICAgIHJldHVybiBhdHRyc1xcbisgICAgcmV0dXJuIE5vbmVcXG4rXFxuK1xcbitkZWYgX2NvbGxlY3Rfcm91dGVfbnRmcyhydG5sLCBuYW1lLCB3YW50LCBkZWFkbGluZT0xMCk6XFxuKyAgICBcXFwiXFxcIlxcXCJHYXRoZXIgYXR0cnMgb2YgbWF0Y2hpbmcgbm90aWZpY2F0aW9ucywga2V5ZWQgYnkgKGRzdF9sZW4sIGRzdCkuXFxcIlxcXCJcXFwiXFxuK1xcbisgICAgc2VlbiA9IHt9XFxuKyAgICBmb3IgbXNnIGluIHJ0bmwucG9sbF9udGYoZHVyYXRpb249ZGVhZGxpbmUpOlxcbisgICAgICAgIGlmIG1zZ1snbmFtZSddICE9IG5hbWU6XFxuKyAgICAgICAgICAgIGNvbnRpbnVlXFxuKyAgICAgICAgYXR0cnMgPSBtc2dbJ21zZyddXFxuKyAgICAgICAga2V5ID0gKGF0dHJzWydydG0tZHN0LWxlbiddLCBhdHRycy5nZXQoJ2RzdCcpKVxcbisgICAgICAgIGlmIGtleSBpbiB3YW50OlxcbisgICAgICAgICAgICBzZWVuW2tleV0gPSBhdHRyc1xcbisgICAgICAgICAgICBpZiBsZW4oc2VlbikgPT0gbGVuKHdhbnQpOlxcbisgICAgICAgICAgICAgICAgYnJlYWtcXG4rICAgIHJldHVybiBzZWVuXFxuK1xcbitcXG4rZGVmIF93cml0ZV9pcHY2X3N5c2N0bChuYW1lLCB2YWx1ZSk6XFxuKyAgICB3aXRoIG9wZW4oZlxcXCIvcHJvYy9zeXMvbmV0L2lwdjYve25hbWV9XFxcIiwgXFxcIndcXFwiKSBhcyBmOlxcbisgICAgICAgIGYud3JpdGUoZlxcXCJ7dmFsdWV9XFxcXG5cXFwiKVxcbitcXG4rXFxuK2RlZiBpcHY2X3JvdXRlX2RlbF9yZWFzb25fZXhwaXJlZCgpIC1cXHUwMDNlIE5vbmU6XFxuKyAgICBcXFwiXFxcIlxcXCJBbiBleHBpcmVkIHJvdXRlIHJlcG9ydHMgUlRBX0RFTF9SRUFTT04gPT0gZXhwaXJlZC5cXFwiXFxcIlxcXCJcXG4rXFxuKyAgICB3aXRoIE5ldE5TKCkgYXMgbnM6XFxuKyAgICAgICAgcnRubCA9IF9ydG5sX3JvdXRlX3N1YnNjcmliZShucylcXG4rICAgICAgICB3aXRoIE5ldE5TRW50ZXIoc3RyKG5zKSk6XFxuKyAgICAgICAgICAgIF93cml0ZV9pcHY2X3N5c2N0bChcXFwicm91dGUvZ2NfaW50ZXJ2YWxcXFwiLCAyKVxcbisgICAgICAgIGlwKFxcXCJsaW5rIGFkZCBuYW1lIGR1bW15MSB0eXBlIGR1bW15XFxcIiwgbnM9c3RyKG5zKSlcXG4rICAgICAgICBpcChcXFwibGluayBzZXQgZGV2IGR1bW15MSB1cFxcXCIsIG5zPXN0cihucykpXFxuKyAgICAgICAgaXAoXFxcIi02IHJvdXRlIGFkZCAyMDAxOmRiODoyOjovNjQgZGV2IGR1bW15MSBleHBpcmVzIDJcXFwiLCBucz1zdHIobnMpKVxcbitcXG4rICAgICAgICBhdHRycyA9IF93YWl0X3JvdXRlX250ZihydG5sLCAnZGVscm91dGUtbnRmJywgNjQsICcyMDAxOmRiODoyOjonLFxcbisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlYWRsaW5lPTE1KVxcbisgICAgICAgIGtzZnRfbm90X25vbmUoYXR0cnMsIFxcXCJubyBSVE1fREVMUk9VVEUgZm9yIHRoZSBleHBpcmVkIHJvdXRlXFxcIilcXG4rICAgICAgICBpZiBhdHRycyBpcyBub3QgTm9uZTpcXG4rICAgICAgICAgICAga3NmdF9lcShhdHRycy5nZXQoJ2RlbC1yZWFzb24nKSwgJ2V4cGlyZWQnKVxcbitcXG4rXFxuK2RlZiBfc2VuZF9yYShzb2NrLCBpZmluZGV4LCBsaWZldGltZSwgcmlvPU5vbmUsIHBpbz1Ob25lKTpcXG4rICAgIFxcXCJcXFwiXFxcIlRoZSBrZXJuZWwgZmlsbHMgaW4gdGhlIElDTVB2NiBjaGVja3N1bSBvbiByYXcgSUNNUHY2IHNvY2tldHMuXFxcIlxcXCJcXFwiXFxuK1xcbisgICAgIyB0eXBlLCBjb2RlLCBja3N1bSwgaG9wIGxpbWl0LCBmbGFncywgcm91dGVyIGxpZmV0aW1lLFxcbisgICAgIyByZWFjaGFibGUgdGltZSwgcmV0cmFucyB0aW1lclxcbisgICAgcmEgPSBzdHJ1Y3QucGFjaygnIUJCSEJCSElJJywgMTM0LCAwLCAwLCA2NCwgMCwgbGlmZXRpbWUsIDAsIDApXFxuKyAgICBpZiByaW8gaXMgbm90IE5vbmU6XFxuKyAgICAgICAgcHJlZml4LCBwbGVuLCByaW9fbGlmZXRpbWUgPSByaW9cXG4rICAgICAgICAjIFJGQyA0MTkxIHJvdXRlIGluZm9ybWF0aW9uIG9wdGlvbiwgLzY0IHByZWZpeCAoOCBieXRlcylcXG4rICAgICAgICByYSArPSBzdHJ1Y3QucGFjaygnIUJCQkJJJywgMjQsIDIsIHBsZW4sIDAsIHJpb19saWZldGltZSlcXG4rICAgICAgICByYSArPSBzb2NrZXQuaW5ldF9wdG9uKHNvY2tldC5BRl9JTkVUNiwgcHJlZml4KVs6OF1cXG4rICAgIGlmIHBpbyBpcyBub3QgTm9uZTpcXG4rICAgICAgICBwcmVmaXgsIHBsZW4sIHZhbGlkX2xmdCA9IHBpb1xcbisgICAgICAgICMgUkZDIDQ4NjEgcHJlZml4IGluZm9ybWF0aW9uIG9wdGlvbiwgb24tbGluayBvbmx5IChMIHNldCwgQSBjbGVhcilcXG4rICAgICAgICByYSArPSBzdHJ1Y3QucGFjaygnIUJCQkJJSUknLCAzLCA0LCBwbGVuLCAweDgwLCB2YWxpZF9sZnQsIDAsIDApXFxuKyAgICAgICAgcmEgKz0gc29ja2V0LmluZXRfcHRvbihzb2NrZXQuQUZfSU5FVDYsIHByZWZpeClcXG4rICAgIHNvY2suc2VuZHRvKHJhLCAoJ2ZmMDI6OjEnLCAwLCAwLCBpZmluZGV4KSlcXG4rXFxuK1xcbitkZWYgX3JhX3JvdXRlcl9zb2NrKG5zX3IsIGlmbmFtZSk6XFxuKyAgICB3aXRoIE5ldE5TRW50ZXIoc3RyKG5zX3IpKTpcXG4rICAgICAgICBzb2NrID0gc29ja2V0LnNvY2tldChzb2NrZXQuQUZfSU5FVDYsIHNvY2tldC5TT0NLX1JBVyxcXG4rICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb2NrZXQuSVBQUk9UT19JQ01QVjYpXFxuKyAgICAgICAgc29jay5zZXRzb2Nrb3B0KHNvY2tldC5JUFBST1RPX0lQVjYsIHNvY2tldC5JUFY2X01VTFRJQ0FTVF9IT1BTLCAyNTUpXFxuKyAgICAgICAgcmV0dXJuIHNvY2ssIHNvY2tldC5pZl9uYW1ldG9pbmRleChpZm5hbWUpXFxuK1xcbitcXG4rZGVmIF9yYV9hZHZlcnRpc2Vfcm91dGVzKHJ0bmwsIHNvY2ssIGlmaW5kZXgsIHdhbnQsICoqcmFfb3B0cyk6XFxuKyAgICBcXFwiXFxcIlxcXCJcXG4rICAgIFNlbmRpbmcgZmFpbHMgd2l0aCBFQUREUk5PVEFWQUlMIHVudGlsIHRoZSByb3V0ZXIncyBsaW5rLWxvY2FsXFxuKyAgICBhZGRyZXNzIHBhc3NlcyBEQUQsIHNvIHJldHJ5LlxcbisgICAgXFxcIlxcXCJcXFwiXFxuK1xcbisgICAgc2VlbiA9IHt9XFxuKyAgICBmb3IgXyBpbiByYW5nZSgxMCk6XFxuKyAgICAgICAgdHJ5OlxcbisgICAgICAgICAgICBfc2VuZF9yYShzb2NrLCBpZmluZGV4LCAqKnJhX29wdHMpXFxuKyAgICAgICAgZXhjZXB0IE9TRXJyb3I6XFxuKyAgICAgICAgICAgIHRpbWUuc2xlZXAoMC4yKVxcbisgICAgICAgICAgICBjb250aW51ZVxcbisgICAgICAgIHNlZW4udXBkYXRlKF9jb2xsZWN0X3JvdXRlX250ZnMocnRubCwgJ25ld3JvdXRlLW50ZicsXFxuKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3YW50IC0gc2V0KHNlZW4ua2V5cygpKSwgZGVhZGxpbmU9MikpXFxuKyAgICAgICAgaWYgbGVuKHNlZW4pID09IGxlbih3YW50KTpcXG4rICAgICAgICAgICAgYnJlYWtcXG4rICAgIHJldHVybiBzZWVuXFxuK1xcbitcXG4rZGVmIGlwdjZfcm91dGVfZGVsX3JlYXNvbl9yYV93aXRoZHJhd24oKSAtXFx1MDAzZSBOb25lOlxcbisgICAgXFxcIlxcXCJcXFwiXFxuKyAgICBSb3V0ZXMgd2l0aGRyYXduIGJ5IGEgemVyby1saWZldGltZSBSQSAocm91dGVyIGxpZmV0aW1lLCBSRkMgNDg2MVxcbisgICAgUElPLCBSRkMgNDE5MSBSSU8pIHJlcG9ydCBSVEFfREVMX1JFQVNPTiA9PSByYS13aXRoZHJhd24uXFxuKyAgICBcXFwiXFxcIlxcXCJcXG4rXFxuKyAgICAjIChydG0tZHN0LWxlbiwgZHN0KTsgdGhlIGRlZmF1bHQgcm91dGUgY2FycmllcyBubyBSVEFfRFNUXFxuKyAgICByb3V0ZXMgPSB7KDAsIE5vbmUpLCAoNjQsICcyMDAxOmRiODo2OjonKSwgKDY0LCAnMjAwMTpkYjg6NTo6Jyl9XFxuK1xcbisgICAgd2l0aCBOZXROUygpIGFzIG5zX2gsIE5ldE5TKCkgYXMgbnNfcjpcXG4rICAgICAgICBpcChmXFxcImxpbmsgYWRkIHZldGgwIG5ldG5zIHtuc19ofSB0eXBlIHZldGggcGVlciBuYW1lIHZldGgxIG5ldG5zIHtuc19yfVxcXCIpXFxuKyAgICAgICAgd2l0aCBOZXROU0VudGVyKHN0cihuc19oKSk6XFxuKyAgICAgICAgICAgIF93cml0ZV9pcHY2X3N5c2N0bChcXFwiY29uZi92ZXRoMC9hY2NlcHRfcmFcXFwiLCAyKVxcbisgICAgICAgICAgICBfd3JpdGVfaXB2Nl9zeXNjdGwoXFxcImNvbmYvdmV0aDAvZm9yd2FyZGluZ1xcXCIsIDApXFxuKyAgICAgICAgICAgIHRyeTpcXG4rICAgICAgICAgICAgICAgIF93cml0ZV9pcHY2X3N5c2N0bChcXFwiY29uZi92ZXRoMC9hY2NlcHRfcmFfcnRfaW5mb19tYXhfcGxlblxcXCIsIDY0KVxcbisgICAgICAgICAgICBleGNlcHQgRmlsZU5vdEZvdW5kRXJyb3I6XFxuKyAgICAgICAgICAgICAgICByYWlzZSBLc2Z0U2tpcEV4KFxcXCJubyBDT05GSUdfSVBWNl9ST1VURV9JTkZPXFxcIilcXG4rICAgICAgICB3aXRoIE5ldE5TRW50ZXIoc3RyKG5zX3IpKTpcXG4rICAgICAgICAgICAgIyBza2lwIERBRCBzbyB0aGUgcm91dGVyJ3MgbGluay1sb2NhbCBzb3VyY2UgaXMgdXNhYmxlIHJpZ2h0IGF3YXlcXG4rICAgICAgICAgICAgX3dyaXRlX2lwdjZfc3lzY3RsKFxcXCJjb25mL3ZldGgxL2FjY2VwdF9kYWRcXFwiLCAwKVxcbisgICAgICAgIGlwKFxcXCJsaW5rIHNldCBkZXYgdmV0aDAgdXBcXFwiLCBucz1zdHIobnNfaCkpXFxuKyAgICAgICAgaXAoXFxcImxpbmsgc2V0IGRldiB2ZXRoMSB1cFxcXCIsIG5zPXN0cihuc19yKSlcXG4rXFxuKyAgICAgICAgcnRubCA9IF9ydG5sX3JvdXRlX3N1YnNjcmliZShuc19oKVxcbisgICAgICAgIHNvY2ssIGlmaW5kZXggPSBfcmFfcm91dGVyX3NvY2sobnNfciwgXFxcInZldGgxXFxcIilcXG4rXFxuKyAgICAgICAgc2VlbiA9IF9yYV9hZHZlcnRpc2Vfcm91dGVzKHJ0bmwsIHNvY2ssIGlmaW5kZXgsIHJvdXRlcyxcXG4rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlmZXRpbWU9MTgwMCxcXG4rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmlvPSgnMjAwMTpkYjg6NTo6JywgNjQsIDYwMCksXFxuKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBpbz0oJzIwMDE6ZGI4OjY6OicsIDY0LCA2MDApKVxcbisgICAgICAgIGtzZnRfZXEoc2V0KHNlZW4pLCByb3V0ZXMsIFxcXCJub3QgYWxsIFJBIHJvdXRlcyB3ZXJlIGluc3RhbGxlZFxcXCIpXFxuKyAgICAgICAgaWYgc2V0KHNlZW4pICE9IHJvdXRlczpcXG4rICAgICAgICAgICAgcmV0dXJuXFxuK1xcbisgICAgICAgIF9zZW5kX3JhKHNvY2ssIGlmaW5kZXgsIDAsIHJpbz0oJzIwMDE6ZGI4OjU6OicsIDY0LCAwKSxcXG4rICAgICAgICAgICAgICAgICBwaW89KCcyMDAxOmRiODo2OjonLCA2NCwgMCkpXFxuKyAgICAgICAgc2VlbiA9IF9jb2xsZWN0X3JvdXRlX250ZnMocnRubCwgJ2RlbHJvdXRlLW50ZicsIHJvdXRlcylcXG4rICAgICAgICBmb3Iga2V5IGluIHJvdXRlczpcXG4rICAgICAgICAgICAgYXR0cnMgPSBzZWVuLmdldChrZXkpXFxuKyAgICAgICAgICAgIGtzZnRfbm90X25vbmUoYXR0cnMsIGZcXFwibm8gUlRNX0RFTFJPVVRFIGZvciB7a2V5fVxcXCIpXFxuKyAgICAgICAgICAgIGlmIGF0dHJzIGlzIG5vdCBOb25lOlxcbisgICAgICAgICAgICAgICAga3NmdF9lcShhdHRycy5nZXQoJ2RlbC1yZWFzb24nKSwgJ3JhLXdpdGhkcmF3bicpXFxuK1xcbitcXG4rZGVmIGlwdjZfcm91dGVfZGVsX3JlYXNvbl9hYnNlbnQoKSAtXFx1MDAzZSBOb25lOlxcbisgICAgXFxcIlxcXCJcXFwiXFxuKyAgICBBIGRlbGV0aW9uIHBhdGggdGhhdCByZWNvcmRzIG5vIGNhdXNlIChoZXJlIGEgdXNlcnNwYWNlIHJlcXVlc3QpXFxuKyAgICBtdXN0IG5vdCBjYXJyeSBSVEFfREVMX1JFQVNPTiBhdCBhbGwuXFxuKyAgICBcXFwiXFxcIlxcXCJcXG4rXFxuKyAgICB3aXRoIE5ldE5TKCkgYXMgbnM6XFxuKyAgICAgICAgcnRubCA9IF9ydG5sX3JvdXRlX3N1YnNjcmliZShucylcXG4rICAgICAgICBpcChcXFwibGluayBhZGQgbmFtZSBkdW1teTEgdHlwZSBkdW1teVxcXCIsIG5zPXN0cihucykpXFxuKyAgICAgICAgaXAoXFxcImxpbmsgc2V0IGRldiBkdW1teTEgdXBcXFwiLCBucz1zdHIobnMpKVxcbisgICAgICAgIGlwKFxcXCItNiByb3V0ZSBhZGQgMjAwMTpkYjg6MTo6LzY0IGRldiBkdW1teTFcXFwiLCBucz1zdHIobnMpKVxcbisgICAgICAgIGlwKFxcXCItNiByb3V0ZSBkZWwgMjAwMTpkYjg6MTo6LzY0IGRldiBkdW1teTFcXFwiLCBucz1zdHIobnMpKVxcbitcXG4rICAgICAgICBhdHRycyA9IF93YWl0X3JvdXRlX250ZihydG5sLCAnZGVscm91dGUtbnRmJywgNjQsICcyMDAxOmRiODoxOjonKVxcbisgICAgICAgIGtzZnRfbm90X25vbmUoYXR0cnMsIFxcXCJubyBSVE1fREVMUk9VVEUgZm9yIDIwMDE6ZGI4OjE6Oi82NFxcXCIpXFxuKyAgICAgICAgaWYgYXR0cnMgaXMgbm90IE5vbmU6XFxuKyAgICAgICAgICAgIGtzZnRfbm90X2luKCdkZWwtcmVhc29uJywgYXR0cnMsXFxuKyAgICAgICAgICAgICAgICAgICAgICAgIFxcXCJ1c2VyIGRlbGV0aW9uIG11c3Qgbm90IGNhcnJ5IGRlbC1yZWFzb25cXFwiKVxcbitcXG4rXFxuIGRlZiBtYWluKCkgLVxcdTAwM2UgTm9uZTpcXG4tICAgIGtzZnRfcnVuKFtkdW1wX21jYWRkcl9jaGVjaywgZHVtcF9tY2FkZHI2X2NoZWNrLCBpcHY0X2RldmNvbmZfbm90aWZ5XSlcXG4rICAgIGtzZnRfcnVuKFtkdW1wX21jYWRkcl9jaGVjaywgZHVtcF9tY2FkZHI2X2NoZWNrLCBpcHY0X2RldmNvbmZfbm90aWZ5LFxcbisgICAgICAgICAgICAgIGlwdjZfcm91dGVfZGVsX3JlYXNvbl9leHBpcmVkLFxcbisgICAgICAgICAgICAgIGlwdjZfcm91dGVfZGVsX3JlYXNvbl9yYV93aXRoZHJhd24sXFxuKyAgICAgICAgICAgICAgaXB2Nl9yb3V0ZV9kZWxfcmVhc29uX2Fic2VudF0pXFxuICAgICBrc2Z0X2V4aXQoKVxcbiBcXG4gaWYgX19uYW1lX18gPT0gXFxcIl9fbWFpbl9fXFxcIjpcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMjI6MzY6MDAuOTA2NDUwNzFaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoxMDg1MjU5Nzc2MzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSVBWNlwiLFxuICAgIFwiSVBWNl9ST1VURVJfUFJFRlwiLFxuICAgIFwiSVBWNl9ST1VURV9JTkZPXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaXA2X2RlbF9ydF9yZWFzb25cIixcbiAgICBcImZpYjZfZGVsXCIsXG4gICAgXCJpbmV0Nl9ydF9ub3RpZnlcIixcbiAgICBcInJ0Nl9yb3V0ZV9yY3ZcIixcbiAgICBcImFkZHJjb25mX3ByZWZpeF9yY3ZcIixcbiAgICBcIm5kaXNjX3JjdlwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYSBuZXcgbmV0bGluayBhdHRyaWJ1dGUgYFJUQV9ERUxfUkVBU09OYCB0byBJUHY2IHJvdXRlIGRlbGV0aW9uIG5vdGlmaWNhdGlvbnMgKGBSVE1fREVMUk9VVEVgKS4gSXQgbW9kaWZpZXMgY29yZSBJUHY2IHJvdXRpbmcgYW5kIG5laWdoYm9yIGRpc2NvdmVyeSBmdW5jdGlvbnMgdG8gcG9wdWxhdGUgdGhpcyBhdHRyaWJ1dGUgd2hlbiByb3V0ZXMgYXJlIGRlbGV0ZWQgZHVlIHRvIGV4cGlyYXRpb24gb3IgUm91dGVyIEFkdmVydGlzZW1lbnQgKFJBKSB3aXRoZHJhd2FsLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYyB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDRjMmJlZjVlZmEyOGFhNmFmYWI2MzEyNTE1MDFmOGExNjg4YTEzMTVcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU2F0IEp1bCAyNSAyMjozNTo1OCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0bGluay9zcGVjcy9ydC1yb3V0ZS55YW1sIGIvRG9jdW1lbnRhdGlvbi9uZXRsaW5rL3NwZWNzL3J0LXJvdXRlLnlhbWxcbmluZGV4IDMzMTk1ZGI5Njc0NmM2Li4yMzRmNTAyZmIzNWQ5YyAxMDA2NDRcbi0tLSBhL0RvY3VtZW50YXRpb24vbmV0bGluay9zcGVjcy9ydC1yb3V0ZS55YW1sXG4rKysgYi9Eb2N1bWVudGF0aW9uL25ldGxpbmsvc3BlY3MvcnQtcm91dGUueWFtbFxuQEAgLTc4LDYgKzc4LDE1IEBAIGRlZmluaXRpb25zOlxuICAgICAgIC1cbiAgICAgICAgIG5hbWU6IHJ0YS11c2VkXG4gICAgICAgICB0eXBlOiB1MzJcbisgIC1cbisgICAgbmFtZTogZGVsLXJlYXNvblxuKyAgICB0eXBlOiBlbnVtXG4rICAgIG5hbWUtcHJlZml4OiBydGEtZGVsLXJlYXNvbi1cbisgICAgZW51bS1uYW1lOiBydGEtZGVsLXJlYXNvblxuKyAgICBlbnRyaWVzOlxuKyAgICAgIC0gdW5zcGVjXG4rICAgICAgLSBleHBpcmVkXG4rICAgICAgLSByYS13aXRoZHJhd25cbiBcbiBhdHRyaWJ1dGUtc2V0czpcbiAgIC1cbkBAIC0xODUsNiArMTk0LDEwIEBAIGF0dHJpYnV0ZS1zZXRzOlxuICAgICAgICAgdHlwZTogdTMyXG4gICAgICAgICBieXRlLW9yZGVyOiBiaWctZW5kaWFuXG4gICAgICAgICBkaXNwbGF5LWhpbnQ6IGhleFxuKyAgICAgIC1cbisgICAgICAgIG5hbWU6IGRlbC1yZWFzb25cbisgICAgICAgIHR5cGU6IHUzMlxuKyAgICAgICAgZW51bTogZGVsLXJlYXNvblxuICAgLVxuICAgICBuYW1lOiBtZXRyaWNzXG4gICAgIG5hbWUtcHJlZml4OiBydGF4LVxuQEAgLTI5OSw2ICszMTIsNyBAQCBvcGVyYXRpb25zOlxuICAgICAgICAgICAgIC0gZHBvcnRcbiAgICAgICAgICAgICAtIG5oLWlkXG4gICAgICAgICAgICAgLSBmbG93bGFiZWxcbisgICAgICAgICAgICAtIGRlbC1yZWFzb25cbiAgICAgICBkdW1wOlxuICAgICAgICAgcmVxdWVzdDpcbiAgICAgICAgICAgdmFsdWU6IDI2XG5AQCAtMzIyLDMgKzMzNiwyMiBAQCBvcGVyYXRpb25zOlxuICAgICAgICAgcmVxdWVzdDpcbiAgICAgICAgICAgdmFsdWU6IDI1XG4gICAgICAgICAgIGF0dHJpYnV0ZXM6ICphbGwtcm91dGUtYXR0cnNcbisgICAgLVxuKyAgICAgIG5hbWU6IG5ld3JvdXRlLW50ZlxuKyAgICAgIGRvYzogTm90aWZpY2F0aW9uIGFib3V0IGEgY3JlYXRlZCByb3V0ZS5cbisgICAgICB2YWx1ZTogMjRcbisgICAgICBub3RpZnk6IGdldHJvdXRlXG4rICAgIC1cbisgICAgICBuYW1lOiBkZWxyb3V0ZS1udGZcbisgICAgICBkb2M6IE5vdGlmaWNhdGlvbiBhYm91dCBhIGRlbGV0ZWQgcm91dGUuXG4rICAgICAgdmFsdWU6IDI1XG4rICAgICAgbm90aWZ5OiBnZXRyb3V0ZVxuK1xuK21jYXN0LWdyb3VwczpcbisgIGxpc3Q6XG4rICAgIC1cbisgICAgICBuYW1lOiBydG5sZ3JwLWlwdjQtcm91dGVcbisgICAgICB2YWx1ZTogN1xuKyAgICAtXG4rICAgICAgbmFtZTogcnRubGdycC1pcHY2LXJvdXRlXG4rICAgICAgdmFsdWU6IDExXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvaXA2X2ZpYi5oIGIvaW5jbHVkZS9uZXQvaXA2X2ZpYi5oXG5pbmRleCA5Y2QyN2UxYjliNjkyMy4uN2NhMGUyMTI0ZTc5NjMgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL25ldC9pcDZfZmliLmhcbisrKyBiL2luY2x1ZGUvbmV0L2lwNl9maWIuaFxuQEAgLTQ2OCw3ICs0NjgsNyBAQCB2b2lkIGZpYjZfY2xlYW5fYWxsX3NraXBfbm90aWZ5KHN0cnVjdCBuZXQgKm5ldCxcbiBcbiBpbnQgZmliNl9hZGQoc3RydWN0IGZpYjZfbm9kZSAqcm9vdCwgc3RydWN0IGZpYjZfaW5mbyAqcnQsXG4gXHQgICAgIHN0cnVjdCBubF9pbmZvICppbmZvLCBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spO1xuLWludCBmaWI2X2RlbChzdHJ1Y3QgZmliNl9pbmZvICpydCwgc3RydWN0IG5sX2luZm8gKmluZm8pO1xuK2ludCBmaWI2X2RlbChzdHJ1Y3QgZmliNl9pbmZvICpydCwgc3RydWN0IG5sX2luZm8gKmluZm8sIHUzMiBkZWxfcmVhc29uKTtcbiBcbiBzdGF0aWMgaW5saW5lXG4gdm9pZCBydDZfZ2V0X3ByZWZzcmMoY29uc3Qgc3RydWN0IHJ0Nl9pbmZvICpydCwgc3RydWN0IGluNl9hZGRyICphZGRyKVxuQEAgLTUzMSw3ICs1MzEsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgZmliNl9ydF91cGRhdGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZmliNl9pbmZvICpydCxcbiB9XG4gI2VuZGlmXG4gdm9pZCBpbmV0Nl9ydF9ub3RpZnkoaW50IGV2ZW50LCBzdHJ1Y3QgZmliNl9pbmZvICpydCwgc3RydWN0IG5sX2luZm8gKmluZm8sXG4tXHRcdCAgICAgdW5zaWduZWQgaW50IGZsYWdzKTtcbitcdFx0ICAgICB1bnNpZ25lZCBpbnQgZmxhZ3MsIHUzMiBkZWxfcmVhc29uKTtcbiBcbiB2b2lkIGZpYjZfYWdlX2V4Y2VwdGlvbnMoc3RydWN0IGZpYjZfaW5mbyAqcnQsIHN0cnVjdCBmaWI2X2djX2FyZ3MgKmdjX2FyZ3MsXG4gXHRcdFx0IHVuc2lnbmVkIGxvbmcgbm93KTtcbmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9pcDZfcm91dGUuaCBiL2luY2x1ZGUvbmV0L2lwNl9yb3V0ZS5oXG5pbmRleCAwOWZmZTBmMTNjZTc1Mi4uOThmMTY4NGZlMzc4Y2MgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL25ldC9pcDZfcm91dGUuaFxuKysrIGIvaW5jbHVkZS9uZXQvaXA2X3JvdXRlLmhcbkBAIC0xMjgsNiArMTI4LDggQEAgaW50IGlwNl9yb3V0ZV9hZGQoc3RydWN0IGZpYjZfY29uZmlnICpjZmcsIGdmcF90IGdmcF9mbGFncyxcbiBpbnQgaXA2X2luc19ydChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBmaWI2X2luZm8gKmY2aSk7XG4gI2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVjYpXG4gaW50IGlwNl9kZWxfcnQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZmliNl9pbmZvICpmNmksIGJvb2wgc2tpcF9ub3RpZnkpO1xuK2ludCBpcDZfZGVsX3J0X3JlYXNvbihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBmaWI2X2luZm8gKmY2aSwgYm9vbCBza2lwX25vdGlmeSxcbitcdFx0ICAgICAgdTMyIGRlbF9yZWFzb24pO1xuICNlbHNlXG4gc3RhdGljIGlubGluZSBpbnQgaXA2X2RlbF9ydChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBmaWI2X2luZm8gKmY2aSxcbiBcdFx0XHQgICAgIGJvb2wgc2tpcF9ub3RpZnkpXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS91YXBpL2xpbnV4L3J0bmV0bGluay5oIGIvaW5jbHVkZS91YXBpL2xpbnV4L3J0bmV0bGluay5oXG5pbmRleCAyNzI2NWZkMzFlNWZjOS4uZmUwMGU2MjRmM2MzYWEgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL3VhcGkvbGludXgvcnRuZXRsaW5rLmhcbisrKyBiL2luY2x1ZGUvdWFwaS9saW51eC9ydG5ldGxpbmsuaFxuQEAgLTM5OSw2ICszOTksNyBAQCBlbnVtIHJ0YXR0cl90eXBlX3Qge1xuIFx0UlRBX0RQT1JULFxuIFx0UlRBX05IX0lELFxuIFx0UlRBX0ZMT1dMQUJFTCxcbitcdFJUQV9ERUxfUkVBU09OLFxuIFx0X19SVEFfTUFYXG4gfTtcbiBcbkBAIC00MDcsNiArNDA4LDIyIEBAIGVudW0gcnRhdHRyX3R5cGVfdCB7XG4gI2RlZmluZSBSVE1fUlRBKHIpICAoKHN0cnVjdCBydGF0dHIqKSgoKGNoYXIqKShyKSkgKyBOTE1TR19BTElHTihzaXplb2Yoc3RydWN0IHJ0bXNnKSkpKVxuICNkZWZpbmUgUlRNX1BBWUxPQUQobikgTkxNU0dfUEFZTE9BRChuLHNpemVvZihzdHJ1Y3QgcnRtc2cpKVxuIFxuKy8qIFJUQV9ERUxfUkVBU09OOiB3aHkgdGhlIGtlcm5lbCBkZWxldGVkIHRoZSByb3V0ZS4gdTMyLlxuKyAqIEVtaXR0ZWQgb25seSBvbiBSVE1fREVMUk9VVEUgbm90aWZpY2F0aW9ucywgYW5kIG9ubHkgd2hlbiB0aGUgZGVsZXRpb25cbisgKiBwYXRoIHJlY29yZHMgYSBjYXVzZS4gQWJzZW5jZSBtZWFucyBlaXRoZXIgYW4gb2xkZXIga2VybmVsIG9yIGFcbisgKiBkZWxldGlvbiBwYXRoIHRoYXQgZG9lcyBub3QgKHlldCkgcmVjb3JkIGl0cyBjYXVzZSAtIGNvbnN1bWVycyBtdXN0XG4rICogdHJlYXQgXCJhYnNlbnRcIiBhbmQgXCJ1bnNwZWNcIiBpZGVudGljYWxseS4gTmV3IGNhdXNlcyBtYXkgYmUgYXBwZW5kZWQuXG4rICogQ3VycmVudGx5IG9ubHkgSVB2NiBkZWxldGlvbiBwYXRocyByZWNvcmQgYSBjYXVzZS5cbisgKi9cbitlbnVtIHJ0YV9kZWxfcmVhc29uIHtcbitcdFJUQV9ERUxfUkVBU09OX1VOU1BFQyxcdFx0LyogY2F1c2Ugbm90IHJlY29yZGVkICovXG4rXHRSVEFfREVMX1JFQVNPTl9FWFBJUkVELFx0XHQvKiBSVEZfRVhQSVJFUyBsaWZldGltZSByYW4gb3V0IChHQykgKi9cbitcdFJUQV9ERUxfUkVBU09OX1JBX1dJVEhEUkFXTixcdC8qIHplcm8tbGlmZXRpbWUgUkEgLyBQSU8gLyBSSU8gKi9cbitcdF9fUlRBX0RFTF9SRUFTT05fTUFYXG4rfTtcbitcbisjZGVmaW5lIFJUQV9ERUxfUkVBU09OX01BWCAoX19SVEFfREVMX1JFQVNPTl9NQVggLSAxKVxuK1xuIC8qIFJUTV9NVUxUSVBBVEggLS0tIGFycmF5IG9mIHN0cnVjdCBydG5leHRob3AuXG4gICpcbiAgKiBcInN0cnVjdCBydG5leHRob3BcIiBkZXNjcmliZXMgYWxsIG5lY2Vzc2FyeSBuZXh0aG9wIGluZm9ybWF0aW9uLFxuZGlmZiAtLWdpdCBhL25ldC9pcHY2L2FkZHJjb25mLmMgYi9uZXQvaXB2Ni9hZGRyY29uZi5jXG5pbmRleCBmMWZlOWVkZTFlZGIzNy4uMWNhOWQ4MmI1NzIxZTYgMTAwNjQ0XG4tLS0gYS9uZXQvaXB2Ni9hZGRyY29uZi5jXG4rKysgYi9uZXQvaXB2Ni9hZGRyY29uZi5jXG5AQCAtMjg3NCw3ICsyODc0LDggQEAgdm9pZCBhZGRyY29uZl9wcmVmaXhfcmN2KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHU4ICpvcHQsIGludCBsZW4sIGJvb2wgc2xsYW8pXG4gXHRcdGlmIChydCkge1xuIFx0XHRcdC8qIEF1dG9jb25mIHByZWZpeCByb3V0ZSAqL1xuIFx0XHRcdGlmICh2YWxpZF9sZnQgPT0gMCkge1xuLVx0XHRcdFx0aXA2X2RlbF9ydChuZXQsIHJ0LCBmYWxzZSk7XG4rXHRcdFx0XHRpcDZfZGVsX3J0X3JlYXNvbihuZXQsIHJ0LCBmYWxzZSxcbitcdFx0XHRcdFx0XHQgIFJUQV9ERUxfUkVBU09OX1JBX1dJVEhEUkFXTik7XG4gXHRcdFx0XHRydCA9IE5VTEw7XG4gXHRcdFx0fSBlbHNlIHtcbiBcdFx0XHRcdHRhYmxlID0gcnQtXHUwMDNlZmliNl90YWJsZTtcbmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9pcDZfZmliLmMgYi9uZXQvaXB2Ni9pcDZfZmliLmNcbmluZGV4IGExMzBjZGZhZWJmYmVlLi4zMmI5YTAwOTU2YTA5MiAxMDA2NDRcbi0tLSBhL25ldC9pcHY2L2lwNl9maWIuY1xuKysrIGIvbmV0L2lwdjYvaXA2X2ZpYi5jXG5AQCAtMTI4Niw3ICsxMjg2LDggQEAgc3RhdGljIGludCBmaWI2X2FkZF9ydDJub2RlKHN0cnVjdCBmaWI2X25vZGUgKmZuLCBzdHJ1Y3QgZmliNl9pbmZvICpydCxcbiBcdFx0cmN1X2Fzc2lnbl9wb2ludGVyKHJ0LVx1MDAzZWZpYjZfbm9kZSwgZm4pO1xuIFx0XHRyY3VfYXNzaWduX3BvaW50ZXIoKmlucywgcnQpO1xuIFx0XHRpZiAoIWluZm8tXHUwMDNlc2tpcF9ub3RpZnkpXG4tXHRcdFx0aW5ldDZfcnRfbm90aWZ5KFJUTV9ORVdST1VURSwgcnQsIGluZm8sIG5sZmxhZ3MpO1xuK1x0XHRcdGluZXQ2X3J0X25vdGlmeShSVE1fTkVXUk9VVEUsIHJ0LCBpbmZvLCBubGZsYWdzLFxuK1x0XHRcdFx0XHRSVEFfREVMX1JFQVNPTl9VTlNQRUMpO1xuIFx0XHRpbmZvLVx1MDAzZW5sX25ldC1cdTAwM2VpcHY2LnJ0Nl9zdGF0cy1cdTAwM2VmaWJfcnRfZW50cmllcysrO1xuIFxuIFx0XHRpZiAoIShmbi1cdTAwM2Vmbl9mbGFncyBcdTAwMjYgUlROX1JUSU5GTykpIHtcbkBAIC0xMzE3LDcgKzEzMTgsOCBAQCBzdGF0aWMgaW50IGZpYjZfYWRkX3J0Mm5vZGUoc3RydWN0IGZpYjZfbm9kZSAqZm4sIHN0cnVjdCBmaWI2X2luZm8gKnJ0LFxuIFx0XHRydC1cdTAwM2VmaWI2X25leHQgPSBpdGVyLVx1MDAzZWZpYjZfbmV4dDtcbiBcdFx0cmN1X2Fzc2lnbl9wb2ludGVyKCppbnMsIHJ0KTtcbiBcdFx0aWYgKCFpbmZvLVx1MDAzZXNraXBfbm90aWZ5KVxuLVx0XHRcdGluZXQ2X3J0X25vdGlmeShSVE1fTkVXUk9VVEUsIHJ0LCBpbmZvLCBOTE1fRl9SRVBMQUNFKTtcbitcdFx0XHRpbmV0Nl9ydF9ub3RpZnkoUlRNX05FV1JPVVRFLCBydCwgaW5mbywgTkxNX0ZfUkVQTEFDRSxcbitcdFx0XHRcdFx0UlRBX0RFTF9SRUFTT05fVU5TUEVDKTtcbiBcdFx0aWYgKCEoZm4tXHUwMDNlZm5fZmxhZ3MgXHUwMDI2IFJUTl9SVElORk8pKSB7XG4gXHRcdFx0aW5mby1cdTAwM2VubF9uZXQtXHUwMDNlaXB2Ni5ydDZfc3RhdHMtXHUwMDNlZmliX3JvdXRlX25vZGVzKys7XG4gXHRcdFx0Zm4tXHUwMDNlZm5fZmxhZ3MgfD0gUlROX1JUSU5GTztcbkBAIC0xOTY2LDcgKzE5NjgsOCBAQCBzdGF0aWMgc3RydWN0IGZpYjZfbm9kZSAqZmliNl9yZXBhaXJfdHJlZShzdHJ1Y3QgbmV0ICpuZXQsXG4gfVxuIFxuIHN0YXRpYyB2b2lkIGZpYjZfZGVsX3JvdXRlKHN0cnVjdCBmaWI2X3RhYmxlICp0YWJsZSwgc3RydWN0IGZpYjZfbm9kZSAqZm4sXG4tXHRcdFx0ICAgc3RydWN0IGZpYjZfaW5mbyBfX3JjdSAqKnJ0cCwgc3RydWN0IG5sX2luZm8gKmluZm8pXG4rXHRcdFx0ICAgc3RydWN0IGZpYjZfaW5mbyBfX3JjdSAqKnJ0cCwgc3RydWN0IG5sX2luZm8gKmluZm8sXG4rXHRcdFx0ICAgdTMyIGRlbF9yZWFzb24pXG4ge1xuIFx0c3RydWN0IGZpYjZfaW5mbyAqbGVhZiwgKnJlcGxhY2VfcnQgPSBOVUxMO1xuIFx0c3RydWN0IGZpYjZfd2Fsa2VyICp3O1xuQEAgLTIwNTUsMTMgKzIwNTgsMTMgQEAgc3RhdGljIHZvaWQgZmliNl9kZWxfcm91dGUoc3RydWN0IGZpYjZfdGFibGUgKnRhYmxlLCBzdHJ1Y3QgZmliNl9ub2RlICpmbixcbiBcdFx0XHRjYWxsX2ZpYjZfZW50cnlfbm90aWZpZXJzX3JlcGxhY2UobmV0LCByZXBsYWNlX3J0KTtcbiBcdH1cbiBcdGlmICghaW5mby1cdTAwM2Vza2lwX25vdGlmeSlcbi1cdFx0aW5ldDZfcnRfbm90aWZ5KFJUTV9ERUxST1VURSwgcnQsIGluZm8sIDApO1xuK1x0XHRpbmV0Nl9ydF9ub3RpZnkoUlRNX0RFTFJPVVRFLCBydCwgaW5mbywgMCwgZGVsX3JlYXNvbik7XG4gXG4gXHRmaWI2X2luZm9fcmVsZWFzZShydCk7XG4gfVxuIFxuIC8qIE5lZWQgdG8gb3duIHRhYmxlLVx1MDAzZXRiNl9sb2NrICovXG4taW50IGZpYjZfZGVsKHN0cnVjdCBmaWI2X2luZm8gKnJ0LCBzdHJ1Y3QgbmxfaW5mbyAqaW5mbylcbitpbnQgZmliNl9kZWwoc3RydWN0IGZpYjZfaW5mbyAqcnQsIHN0cnVjdCBubF9pbmZvICppbmZvLCB1MzIgZGVsX3JlYXNvbilcbiB7XG4gXHRzdHJ1Y3QgbmV0ICpuZXQgPSBpbmZvLVx1MDAzZW5sX25ldDtcbiBcdHN0cnVjdCBmaWI2X2luZm8gX19yY3UgKipydHA7XG5AQCAtMjA5MCw3ICsyMDkzLDcgQEAgaW50IGZpYjZfZGVsKHN0cnVjdCBmaWI2X2luZm8gKnJ0LCBzdHJ1Y3QgbmxfaW5mbyAqaW5mbylcbiBcdFx0aWYgKHJ0ID09IGN1cikge1xuIFx0XHRcdGlmIChmaWI2X3JlcXVpcmVzX3NyYyhjdXIpKVxuIFx0XHRcdFx0ZmliNl9yb3V0ZXNfcmVxdWlyZV9zcmNfZGVjKGluZm8tXHUwMDNlbmxfbmV0KTtcbi1cdFx0XHRmaWI2X2RlbF9yb3V0ZSh0YWJsZSwgZm4sIHJ0cCwgaW5mbyk7XG4rXHRcdFx0ZmliNl9kZWxfcm91dGUodGFibGUsIGZuLCBydHAsIGluZm8sIGRlbF9yZWFzb24pO1xuIFx0XHRcdHJldHVybiAwO1xuIFx0XHR9XG4gXHRcdHJ0cF9uZXh0ID0gXHUwMDI2Y3VyLVx1MDAzZWZpYjZfbmV4dDtcbkBAIC0yMjUyLDcgKzIyNTUsNyBAQCBzdGF0aWMgaW50IGZpYjZfY2xlYW5fbm9kZShzdHJ1Y3QgZmliNl93YWxrZXIgKncpXG4gXHRcdHJlcyA9IGMtXHUwMDNlZnVuYyhydCwgYy1cdTAwM2VhcmcpO1xuIFx0XHRpZiAocmVzID09IC0xKSB7XG4gXHRcdFx0dy1cdTAwM2VsZWFmID0gcnQ7XG4tXHRcdFx0cmVzID0gZmliNl9kZWwocnQsIFx1MDAyNmluZm8pO1xuK1x0XHRcdHJlcyA9IGZpYjZfZGVsKHJ0LCBcdTAwMjZpbmZvLCBSVEFfREVMX1JFQVNPTl9VTlNQRUMpO1xuIFx0XHRcdGlmIChyZXMpIHtcbiAjaWYgUlQ2X0RFQlVHIFx1MDAzZT0gMlxuIFx0XHRcdFx0cHJfZGVidWcoXCIlczogZGVsIGZhaWxlZDogcnQ9JXBAJXAgZXJyPSVkXFxuXCIsXG5AQCAtMjQwMCw3ICsyNDAzLDcgQEAgc3RhdGljIHZvaWQgZmliNl9nY190YWJsZShzdHJ1Y3QgbmV0ICpuZXQsXG4gXG4gXHRobGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHJ0LCBuLCBcdTAwMjZ0YjYtXHUwMDNldGI2X2djX2hsaXN0LCBnY19saW5rKVxuIFx0XHRpZiAoZmliNl9hZ2UocnQsIGdjX2FyZ3MpID09IC0xKVxuLVx0XHRcdGZpYjZfZGVsKHJ0LCBcdTAwMjZpbmZvKTtcbitcdFx0XHRmaWI2X2RlbChydCwgXHUwMDI2aW5mbywgUlRBX0RFTF9SRUFTT05fRVhQSVJFRCk7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIGZpYjZfZ2NfYWxsKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZpYjZfZ2NfYXJncyAqZ2NfYXJncylcbmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9uZGlzYy5jIGIvbmV0L2lwdjYvbmRpc2MuY1xuaW5kZXggZjg2N2VjOGQzZDkwNTEuLmMzNTM3ZmMwZWM2M2IxIDEwMDY0NFxuLS0tIGEvbmV0L2lwdjYvbmRpc2MuY1xuKysrIGIvbmV0L2lwdjYvbmRpc2MuY1xuQEAgLTEzNjEsNyArMTM2MSw5IEBAIHN0YXRpYyBlbnVtIHNrYl9kcm9wX3JlYXNvbiBuZGlzY19yb3V0ZXJfZGlzY292ZXJ5KHN0cnVjdCBza19idWZmICpza2IpXG4gXHRkZWZydHJfdXNyX21ldHJpYyA9IGluNl9kZXYtXHUwMDNlY25mLnJhX2RlZnJ0cl9tZXRyaWM7XG4gXHQvKiBkZWxldGUgdGhlIHJvdXRlIGlmIGxpZmV0aW1lIGlzIDAgb3IgaWYgbWV0cmljIG5lZWRzIGNoYW5nZSAqL1xuIFx0aWYgKHJ0IFx1MDAyNlx1MDAyNiAobGlmZXRpbWUgPT0gMCB8fCBydC1cdTAwM2VmaWI2X21ldHJpYyAhPSBkZWZydHJfdXNyX21ldHJpYykpIHtcbi1cdFx0aXA2X2RlbF9ydChuZXQsIHJ0LCBmYWxzZSk7XG4rXHRcdGlwNl9kZWxfcnRfcmVhc29uKG5ldCwgcnQsIGZhbHNlLFxuK1x0XHRcdFx0ICBsaWZldGltZSA9PSAwID8gUlRBX0RFTF9SRUFTT05fUkFfV0lUSERSQVdOIDpcbitcdFx0XHRcdFx0XHQgIFJUQV9ERUxfUkVBU09OX1VOU1BFQyk7XG4gXHRcdHJ0ID0gTlVMTDtcbiBcdH1cbiBcbkBAIC0xMzk2LDcgKzEzOTgsOCBAQCBzdGF0aWMgZW51bSBza2JfZHJvcF9yZWFzb24gbmRpc2Nfcm91dGVyX2Rpc2NvdmVyeShzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIFx0XHRcdC5ubF9uZXQgPSBuZXQsXG4gXHRcdH07XG4gXHRcdHJ0LVx1MDAzZWZpYjZfZmxhZ3MgPSAocnQtXHUwMDNlZmliNl9mbGFncyBcdTAwMjYgflJURl9QUkVGX01BU0spIHwgUlRGX1BSRUYocHJlZik7XG4tXHRcdGluZXQ2X3J0X25vdGlmeShSVE1fTkVXUk9VVEUsIHJ0LCBcdTAwMjZubGluZm8sIE5MTV9GX1JFUExBQ0UpO1xuK1x0XHRpbmV0Nl9ydF9ub3RpZnkoUlRNX05FV1JPVVRFLCBydCwgXHUwMDI2bmxpbmZvLCBOTE1fRl9SRVBMQUNFLFxuK1x0XHRcdFx0UlRBX0RFTF9SRUFTT05fVU5TUEVDKTtcbiBcdH1cbiBcbiBcdGlmIChydCkge1xuZGlmZiAtLWdpdCBhL25ldC9pcHY2L3JvdXRlLmMgYi9uZXQvaXB2Ni9yb3V0ZS5jXG5pbmRleCBhMTMwMTMzNGRhNDhjMC4uZThlZDk1ZGM1NjY1ZWUgMTAwNjQ0XG4tLS0gYS9uZXQvaXB2Ni9yb3V0ZS5jXG4rKysgYi9uZXQvaXB2Ni9yb3V0ZS5jXG5AQCAtMTExLDcgKzExMSw3IEBAIHN0YXRpYyBpbnQgcnQ2X2ZpbGxfbm9kZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICpza2IsXG4gXHRcdFx0IHN0cnVjdCBmaWI2X2luZm8gKnJ0LCBzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QsXG4gXHRcdFx0IHN0cnVjdCBpbjZfYWRkciAqZGVzdCwgc3RydWN0IGluNl9hZGRyICpzcmMsXG4gXHRcdFx0IGludCBpaWYsIGludCB0eXBlLCB1MzIgcG9ydGlkLCB1MzIgc2VxLFxuLVx0XHRcdCB1bnNpZ25lZCBpbnQgZmxhZ3MpO1xuK1x0XHRcdCB1bnNpZ25lZCBpbnQgZmxhZ3MsIHUzMiBkZWxfcmVhc29uKTtcbiBzdGF0aWMgc3RydWN0IHJ0Nl9pbmZvICpydDZfZmluZF9jYWNoZWRfcnQoY29uc3Qgc3RydWN0IGZpYjZfcmVzdWx0ICpyZXMsXG4gXHRcdFx0XHRcdCAgIGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqZGFkZHIsXG4gXHRcdFx0XHRcdCAgIGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqc2FkZHIpO1xuQEAgLTEwMjAsNyArMTAyMCw3IEBAIGludCBydDZfcm91dGVfcmN2KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHU4ICpvcHQsIGludCBsZW4sXG4gXHRcdFx0XHRcdGd3YWRkciwgZGV2KTtcbiBcbiBcdGlmIChydCBcdTAwMjZcdTAwMjYgIWxpZmV0aW1lKSB7XG4tXHRcdGlwNl9kZWxfcnQobmV0LCBydCwgZmFsc2UpO1xuK1x0XHRpcDZfZGVsX3J0X3JlYXNvbihuZXQsIHJ0LCBmYWxzZSwgUlRBX0RFTF9SRUFTT05fUkFfV0lUSERSQVdOKTtcbiBcdFx0cnQgPSBOVUxMO1xuIFx0fVxuIFxuQEAgLTM5NzMsNyArMzk3Myw4IEBAIGludCBpcDZfcm91dGVfYWRkKHN0cnVjdCBmaWI2X2NvbmZpZyAqY2ZnLCBnZnBfdCBnZnBfZmxhZ3MsXG4gXHRyZXR1cm4gZXJyO1xuIH1cbiBcbi1zdGF0aWMgaW50IF9faXA2X2RlbF9ydChzdHJ1Y3QgZmliNl9pbmZvICpydCwgc3RydWN0IG5sX2luZm8gKmluZm8pXG4rc3RhdGljIGludCBfX2lwNl9kZWxfcnQoc3RydWN0IGZpYjZfaW5mbyAqcnQsIHN0cnVjdCBubF9pbmZvICppbmZvLFxuK1x0XHRcdHUzMiBkZWxfcmVhc29uKVxuIHtcbiBcdHN0cnVjdCBuZXQgKm5ldCA9IGluZm8tXHUwMDNlbmxfbmV0O1xuIFx0c3RydWN0IGZpYjZfdGFibGUgKnRhYmxlO1xuQEAgLTM5ODYsNyArMzk4Nyw3IEBAIHN0YXRpYyBpbnQgX19pcDZfZGVsX3J0KHN0cnVjdCBmaWI2X2luZm8gKnJ0LCBzdHJ1Y3QgbmxfaW5mbyAqaW5mbylcbiBcbiBcdHRhYmxlID0gcnQtXHUwMDNlZmliNl90YWJsZTtcbiBcdHNwaW5fbG9ja19iaChcdTAwMjZ0YWJsZS1cdTAwM2V0YjZfbG9jayk7XG4tXHRlcnIgPSBmaWI2X2RlbChydCwgaW5mbyk7XG4rXHRlcnIgPSBmaWI2X2RlbChydCwgaW5mbywgZGVsX3JlYXNvbik7XG4gXHRzcGluX3VubG9ja19iaChcdTAwMjZ0YWJsZS1cdTAwM2V0YjZfbG9jayk7XG4gXG4gb3V0OlxuQEAgLTM5OTQsMTQgKzM5OTUsMjAgQEAgc3RhdGljIGludCBfX2lwNl9kZWxfcnQoc3RydWN0IGZpYjZfaW5mbyAqcnQsIHN0cnVjdCBubF9pbmZvICppbmZvKVxuIFx0cmV0dXJuIGVycjtcbiB9XG4gXG4taW50IGlwNl9kZWxfcnQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZmliNl9pbmZvICpydCwgYm9vbCBza2lwX25vdGlmeSlcbitpbnQgaXA2X2RlbF9ydF9yZWFzb24oc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZmliNl9pbmZvICpydCwgYm9vbCBza2lwX25vdGlmeSxcbitcdFx0ICAgICAgdTMyIGRlbF9yZWFzb24pXG4ge1xuIFx0c3RydWN0IG5sX2luZm8gaW5mbyA9IHtcbiBcdFx0Lm5sX25ldCA9IG5ldCxcbi1cdFx0LnNraXBfbm90aWZ5ID0gc2tpcF9ub3RpZnlcbitcdFx0LnNraXBfbm90aWZ5ID0gc2tpcF9ub3RpZnksXG4gXHR9O1xuIFxuLVx0cmV0dXJuIF9faXA2X2RlbF9ydChydCwgXHUwMDI2aW5mbyk7XG4rXHRyZXR1cm4gX19pcDZfZGVsX3J0KHJ0LCBcdTAwMjZpbmZvLCBkZWxfcmVhc29uKTtcbit9XG4rXG4raW50IGlwNl9kZWxfcnQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZmliNl9pbmZvICpydCwgYm9vbCBza2lwX25vdGlmeSlcbit7XG4rXHRyZXR1cm4gaXA2X2RlbF9ydF9yZWFzb24obmV0LCBydCwgc2tpcF9ub3RpZnksIFJUQV9ERUxfUkVBU09OX1VOU1BFQyk7XG4gfVxuIFxuIHN0YXRpYyBpbnQgX19pcDZfZGVsX3J0X3NpYmxpbmdzKHN0cnVjdCBmaWI2X2luZm8gKnJ0LCBzdHJ1Y3QgZmliNl9jb25maWcgKmNmZylcbkBAIC00MDI4LDcgKzQwMzUsOCBAQCBzdGF0aWMgaW50IF9faXA2X2RlbF9ydF9zaWJsaW5ncyhzdHJ1Y3QgZmliNl9pbmZvICpydCwgc3RydWN0IGZpYjZfY29uZmlnICpjZmcpXG4gXG4gXHRcdFx0aWYgKHJ0Nl9maWxsX25vZGUobmV0LCBza2IsIHJ0LCBOVUxMLFxuIFx0XHRcdFx0XHQgIE5VTEwsIE5VTEwsIDAsIFJUTV9ERUxST1VURSxcbi1cdFx0XHRcdFx0ICBpbmZvLVx1MDAzZXBvcnRpZCwgc2VxLCAwKSBcdTAwM2MgMCkge1xuK1x0XHRcdFx0XHQgIGluZm8tXHUwMDNlcG9ydGlkLCBzZXEsIDAsXG4rXHRcdFx0XHRcdCAgUlRBX0RFTF9SRUFTT05fVU5TUEVDKSBcdTAwM2MgMCkge1xuIFx0XHRcdFx0a2ZyZWVfc2tiKHNrYik7XG4gXHRcdFx0XHRza2IgPSBOVUxMO1xuIFx0XHRcdH0gZWxzZVxuQEAgLTQwNjQsMTMgKzQwNzIsMTMgQEAgc3RhdGljIGludCBfX2lwNl9kZWxfcnRfc2libGluZ3Moc3RydWN0IGZpYjZfaW5mbyAqcnQsIHN0cnVjdCBmaWI2X2NvbmZpZyAqY2ZnKVxuIFx0XHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoc2libGluZywgbmV4dF9zaWJsaW5nLFxuIFx0XHRcdFx0XHQgXHUwMDI2cnQtXHUwMDNlZmliNl9zaWJsaW5ncyxcbiBcdFx0XHRcdFx0IGZpYjZfc2libGluZ3MpIHtcbi1cdFx0XHRlcnIgPSBmaWI2X2RlbChzaWJsaW5nLCBpbmZvKTtcbitcdFx0XHRlcnIgPSBmaWI2X2RlbChzaWJsaW5nLCBpbmZvLCBSVEFfREVMX1JFQVNPTl9VTlNQRUMpO1xuIFx0XHRcdGlmIChlcnIpXG4gXHRcdFx0XHRnb3RvIG91dF91bmxvY2s7XG4gXHRcdH1cbiBcdH1cbiBcbi1cdGVyciA9IGZpYjZfZGVsKHJ0LCBpbmZvKTtcbitcdGVyciA9IGZpYjZfZGVsKHJ0LCBpbmZvLCBSVEFfREVMX1JFQVNPTl9VTlNQRUMpO1xuIG91dF91bmxvY2s6XG4gXHRzcGluX3VubG9ja19iaChcdTAwMjZ0YWJsZS1cdTAwM2V0YjZfbG9jayk7XG4gb3V0X3B1dDpcbkBAIC00MTk2LDcgKzQyMDQsOCBAQCBzdGF0aWMgaW50IGlwNl9yb3V0ZV9kZWwoc3RydWN0IGZpYjZfY29uZmlnICpjZmcsXG4gXHRcdFx0XHRpZiAoIWZpYjZfaW5mb19ob2xkX3NhZmUocnQpKVxuIFx0XHRcdFx0XHRjb250aW51ZTtcbiBcbi1cdFx0XHRcdGVyciA9ICBfX2lwNl9kZWxfcnQocnQsIFx1MDAyNmNmZy1cdTAwM2VmY19ubGluZm8pO1xuK1x0XHRcdFx0ZXJyID0gX19pcDZfZGVsX3J0KHJ0LCBcdTAwMjZjZmctXHUwMDNlZmNfbmxpbmZvLFxuK1x0XHRcdFx0XHRcdCAgIFJUQV9ERUxfUkVBU09OX1VOU1BFQyk7XG4gXHRcdFx0XHRicmVhaztcbiBcdFx0XHR9XG4gXHRcdFx0aWYgKGNmZy1cdTAwM2VmY19uaF9pZClcbkBAIC00MjE1LDcgKzQyMjQsOCBAQCBzdGF0aWMgaW50IGlwNl9yb3V0ZV9kZWwoc3RydWN0IGZpYjZfY29uZmlnICpjZmcsXG4gXG4gXHRcdFx0LyogaWYgZ2F0ZXdheSB3YXMgc3BlY2lmaWVkIG9ubHkgZGVsZXRlIHRoZSBvbmUgaG9wICovXG4gXHRcdFx0aWYgKGNmZy1cdTAwM2VmY19mbGFncyBcdTAwMjYgUlRGX0dBVEVXQVkpXG4tXHRcdFx0XHRlcnIgPSBfX2lwNl9kZWxfcnQocnQsIFx1MDAyNmNmZy1cdTAwM2VmY19ubGluZm8pO1xuK1x0XHRcdFx0ZXJyID0gX19pcDZfZGVsX3J0KHJ0LCBcdTAwMjZjZmctXHUwMDNlZmNfbmxpbmZvLFxuK1x0XHRcdFx0XHRcdCAgIFJUQV9ERUxfUkVBU09OX1VOU1BFQyk7XG4gXHRcdFx0ZWxzZVxuIFx0XHRcdFx0ZXJyID0gX19pcDZfZGVsX3J0X3NpYmxpbmdzKHJ0LCBjZmcpO1xuIFx0XHRcdGJyZWFrO1xuQEAgLTUzODEsNyArNTM5MSw4IEBAIHN0YXRpYyB2b2lkIGlwNl9yb3V0ZV9tcGF0aF9ub3RpZnkoc3RydWN0IGZpYjZfaW5mbyAqcnQsXG4gXHR9XG4gXG4gXHRpZiAocnQpXG4tXHRcdGluZXQ2X3J0X25vdGlmeShSVE1fTkVXUk9VVEUsIHJ0LCBpbmZvLCBubGZsYWdzKTtcbitcdFx0aW5ldDZfcnRfbm90aWZ5KFJUTV9ORVdST1VURSwgcnQsIGluZm8sIG5sZmxhZ3MsXG4rXHRcdFx0XHRSVEFfREVMX1JFQVNPTl9VTlNQRUMpO1xuIFxuIFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4gfVxuQEAgLTU3MzksNiArNTc1MCw3IEBAIHN0YXRpYyBzaXplX3QgcnQ2X25sbXNnX3NpemUoc3RydWN0IGZpYjZfaW5mbyAqZjZpKVxuIFx0ICAgICAgICsgbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHN0cnVjdCBydGFfY2FjaGVpbmZvKSlcbiBcdCAgICAgICArIG5sYV90b3RhbF9zaXplKFRDUF9DQV9OQU1FX01BWCkgLyogUlRBWF9DQ19BTEdPICovXG4gXHQgICAgICAgKyBubGFfdG90YWxfc2l6ZSgxKSAvKiBSVEFfUFJFRiAqL1xuK1x0ICAgICAgICsgbmxhX3RvdGFsX3NpemUoNCkgLyogUlRBX0RFTF9SRUFTT04gKi9cbiBcdCAgICAgICArIG5leHRob3BfbGVuO1xuIH1cbiBcbkBAIC01Nzc1LDcgKzU3ODcsNyBAQCBzdGF0aWMgaW50IHJ0Nl9maWxsX25vZGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0XHRcdCBzdHJ1Y3QgZmliNl9pbmZvICpydCwgc3RydWN0IGRzdF9lbnRyeSAqZHN0LFxuIFx0XHRcdCBzdHJ1Y3QgaW42X2FkZHIgKmRlc3QsIHN0cnVjdCBpbjZfYWRkciAqc3JjLFxuIFx0XHRcdCBpbnQgaWlmLCBpbnQgdHlwZSwgdTMyIHBvcnRpZCwgdTMyIHNlcSxcbi1cdFx0XHQgdW5zaWduZWQgaW50IGZsYWdzKVxuK1x0XHRcdCB1bnNpZ25lZCBpbnQgZmxhZ3MsIHUzMiBkZWxfcmVhc29uKVxuIHtcbiBcdHN0cnVjdCBydDZfaW5mbyAqcnQ2ID0gZHN0X3J0Nl9pbmZvKGRzdCk7XG4gXHRzdHJ1Y3QgcnQ2a2V5ICpydDZfZHN0LCAqcnQ2X3NyYztcbkBAIC01OTU0LDYgKzU5NjYsMTAgQEAgc3RhdGljIGludCBydDZfZmlsbF9ub2RlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdGlmIChydG5sX3B1dF9jYWNoZWluZm8oc2tiLCBkc3QsIDAsIGV4cGlyZXMsIGRzdCA/IGRzdC1cdTAwM2VlcnJvciA6IDApIFx1MDAzYyAwKVxuIFx0XHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcbiBcbitcdGlmICh0eXBlID09IFJUTV9ERUxST1VURSBcdTAwMjZcdTAwMjYgZGVsX3JlYXNvbiAhPSBSVEFfREVMX1JFQVNPTl9VTlNQRUMgXHUwMDI2XHUwMDI2XG4rXHQgICAgbmxhX3B1dF91MzIoc2tiLCBSVEFfREVMX1JFQVNPTiwgZGVsX3JlYXNvbikpXG4rXHRcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xuK1xuIFx0aWYgKG5sYV9wdXRfdTgoc2tiLCBSVEFfUFJFRiwgSVBWNl9FWFRSQUNUX1BSRUYocnQ2X2ZsYWdzKSkpXG4gXHRcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xuIFxuQEAgLTYwNTUsNyArNjA3MSw4IEBAIHN0YXRpYyBpbnQgcnQ2X25oX2R1bXBfZXhjZXB0aW9ucyhzdHJ1Y3QgZmliNl9uaCAqbmgsIHZvaWQgKmFyZylcbiBcdFx0XHRcdFx0ICAgIFx1MDAyNnJ0Nl9leC1cdTAwM2VydDZpLVx1MDAzZWRzdCwgTlVMTCwgTlVMTCwgMCxcbiBcdFx0XHRcdFx0ICAgIFJUTV9ORVdST1VURSxcbiBcdFx0XHRcdFx0ICAgIE5FVExJTktfQ0IoZHVtcC1cdTAwM2VjYi1cdTAwM2Vza2IpLnBvcnRpZCxcbi1cdFx0XHRcdFx0ICAgIGR1bXAtXHUwMDNlY2ItXHUwMDNlbmxoLVx1MDAzZW5sbXNnX3NlcSwgdy1cdTAwM2VmbGFncyk7XG4rXHRcdFx0XHRcdCAgICBkdW1wLVx1MDAzZWNiLVx1MDAzZW5saC1cdTAwM2VubG1zZ19zZXEsIHctXHUwMDNlZmxhZ3MsXG4rXHRcdFx0XHRcdCAgICBSVEFfREVMX1JFQVNPTl9VTlNQRUMpO1xuIFx0XHRcdGlmIChlcnIpXG4gXHRcdFx0XHRyZXR1cm4gZXJyO1xuIFxuQEAgLTYxMDMsNyArNjEyMCw4IEBAIGludCBydDZfZHVtcF9yb3V0ZShzdHJ1Y3QgZmliNl9pbmZvICpydCwgdm9pZCAqcF9hcmcsIHVuc2lnbmVkIGludCBza2lwKVxuIFx0XHRcdGlmIChydDZfZmlsbF9ub2RlKG5ldCwgYXJnLVx1MDAzZXNrYiwgcnQsIE5VTEwsIE5VTEwsIE5VTEwsXG4gXHRcdFx0XHRcdCAgMCwgUlRNX05FV1JPVVRFLFxuIFx0XHRcdFx0XHQgIE5FVExJTktfQ0IoYXJnLVx1MDAzZWNiLVx1MDAzZXNrYikucG9ydGlkLFxuLVx0XHRcdFx0XHQgIGFyZy1cdTAwM2VjYi1cdTAwM2VubGgtXHUwMDNlbmxtc2dfc2VxLCBmbGFncykpIHtcbitcdFx0XHRcdFx0ICBhcmctXHUwMDNlY2ItXHUwMDNlbmxoLVx1MDAzZW5sbXNnX3NlcSwgZmxhZ3MsXG4rXHRcdFx0XHRcdCAgUlRBX0RFTF9SRUFTT05fVU5TUEVDKSkge1xuIFx0XHRcdFx0cmV0dXJuIDA7XG4gXHRcdFx0fVxuIFx0XHRcdGNvdW50Kys7XG5AQCAtNjMzNiwxMiArNjM1NCwxNCBAQCBzdGF0aWMgaW50IGluZXQ2X3J0bV9nZXRyb3V0ZShzdHJ1Y3Qgc2tfYnVmZiAqaW5fc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCxcbiBcdFx0XHRlcnIgPSBydDZfZmlsbF9ub2RlKG5ldCwgc2tiLCBmcm9tLCBOVUxMLCBOVUxMLCBOVUxMLFxuIFx0XHRcdFx0XHQgICAgaWlmLCBSVE1fTkVXUk9VVEUsXG4gXHRcdFx0XHRcdCAgICBORVRMSU5LX0NCKGluX3NrYikucG9ydGlkLFxuLVx0XHRcdFx0XHQgICAgbmxoLVx1MDAzZW5sbXNnX3NlcSwgMCk7XG4rXHRcdFx0XHRcdCAgICBubGgtXHUwMDNlbmxtc2dfc2VxLCAwLFxuK1x0XHRcdFx0XHQgICAgUlRBX0RFTF9SRUFTT05fVU5TUEVDKTtcbiBcdFx0ZWxzZVxuIFx0XHRcdGVyciA9IHJ0Nl9maWxsX25vZGUobmV0LCBza2IsIGZyb20sIGRzdCwgXHUwMDI2Zmw2LmRhZGRyLFxuIFx0XHRcdFx0XHQgICAgXHUwMDI2Zmw2LnNhZGRyLCBpaWYsIFJUTV9ORVdST1VURSxcbiBcdFx0XHRcdFx0ICAgIE5FVExJTktfQ0IoaW5fc2tiKS5wb3J0aWQsXG4tXHRcdFx0XHRcdCAgICBubGgtXHUwMDNlbmxtc2dfc2VxLCAwKTtcbitcdFx0XHRcdFx0ICAgIG5saC1cdTAwM2VubG1zZ19zZXEsIDAsXG4rXHRcdFx0XHRcdCAgICBSVEFfREVMX1JFQVNPTl9VTlNQRUMpO1xuIFx0fSBlbHNlIHtcbiBcdFx0ZXJyID0gLUVORVRVTlJFQUNIO1xuIFx0fVxuQEAgLTYzNTgsNyArNjM3OCw3IEBAIHN0YXRpYyBpbnQgaW5ldDZfcnRtX2dldHJvdXRlKHN0cnVjdCBza19idWZmICppbl9za2IsIHN0cnVjdCBubG1zZ2hkciAqbmxoLFxuIH1cbiBcbiB2b2lkIGluZXQ2X3J0X25vdGlmeShpbnQgZXZlbnQsIHN0cnVjdCBmaWI2X2luZm8gKnJ0LCBzdHJ1Y3QgbmxfaW5mbyAqaW5mbyxcbi1cdFx0ICAgICB1bnNpZ25lZCBpbnQgbmxtX2ZsYWdzKVxuK1x0XHQgICAgIHVuc2lnbmVkIGludCBubG1fZmxhZ3MsIHUzMiBkZWxfcmVhc29uKVxuIHtcbiBcdHN0cnVjdCBuZXQgKm5ldCA9IGluZm8tXHUwMDNlbmxfbmV0O1xuIFx0c3RydWN0IHNrX2J1ZmYgKnNrYjtcbkBAIC02Mzc3LDcgKzYzOTcsOCBAQCB2b2lkIGluZXQ2X3J0X25vdGlmeShpbnQgZXZlbnQsIHN0cnVjdCBmaWI2X2luZm8gKnJ0LCBzdHJ1Y3QgbmxfaW5mbyAqaW5mbyxcbiBcdFx0Z290byBlcnJvdXQ7XG4gXG4gXHRlcnIgPSBydDZfZmlsbF9ub2RlKG5ldCwgc2tiLCBydCwgTlVMTCwgTlVMTCwgTlVMTCwgMCxcbi1cdFx0XHQgICAgZXZlbnQsIGluZm8tXHUwMDNlcG9ydGlkLCBzZXEsIG5sbV9mbGFncyk7XG4rXHRcdFx0ICAgIGV2ZW50LCBpbmZvLVx1MDAzZXBvcnRpZCwgc2VxLCBubG1fZmxhZ3MsXG4rXHRcdFx0ICAgIGRlbF9yZWFzb24pO1xuIFx0aWYgKGVyciBcdTAwM2MgMCkge1xuIFx0XHRrZnJlZV9za2Ioc2tiKTtcbiBcdFx0LyogLUVNU0dTSVpFIGltcGxpZXMgbmVlZGVkIHNwYWNlIGdyZXcgdW5kZXIgdXMuICovXG5AQCAtNjQxMCw3ICs2NDMxLDggQEAgdm9pZCBmaWI2X3J0X3VwZGF0ZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBmaWI2X2luZm8gKnJ0LFxuIFx0XHRnb3RvIGVycm91dDtcbiBcbiBcdGVyciA9IHJ0Nl9maWxsX25vZGUobmV0LCBza2IsIHJ0LCBOVUxMLCBOVUxMLCBOVUxMLCAwLFxuLVx0XHRcdCAgICBSVE1fTkVXUk9VVEUsIGluZm8tXHUwMDNlcG9ydGlkLCBzZXEsIE5MTV9GX1JFUExBQ0UpO1xuK1x0XHRcdCAgICBSVE1fTkVXUk9VVEUsIGluZm8tXHUwMDNlcG9ydGlkLCBzZXEsIE5MTV9GX1JFUExBQ0UsXG4rXHRcdFx0ICAgIFJUQV9ERUxfUkVBU09OX1VOU1BFQyk7XG4gXHRpZiAoZXJyIFx1MDAzYyAwKSB7XG4gXHRcdC8qIC1FTVNHU0laRSBpbXBsaWVzIEJVRyBpbiBydDZfbmxtc2dfc2l6ZSgpICovXG4gXHRcdFdBUk5fT04oZXJyID09IC1FTVNHU0laRSk7XG5AQCAtNjQ2Myw3ICs2NDg1LDcgQEAgdm9pZCBmaWI2X2luZm9faHdfZmxhZ3Nfc2V0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZpYjZfaW5mbyAqZjZpLFxuIFx0fVxuIFxuIFx0ZXJyID0gcnQ2X2ZpbGxfbm9kZShuZXQsIHNrYiwgZjZpLCBOVUxMLCBOVUxMLCBOVUxMLCAwLCBSVE1fTkVXUk9VVEUsIDAsXG4tXHRcdFx0ICAgIDAsIDApO1xuK1x0XHRcdCAgICAwLCAwLCBSVEFfREVMX1JFQVNPTl9VTlNQRUMpO1xuIFx0aWYgKGVyciBcdTAwM2MgMCkge1xuIFx0XHQvKiAtRU1TR1NJWkUgaW1wbGllcyBCVUcgaW4gcnQ2X25sbXNnX3NpemUoKSAqL1xuIFx0XHRXQVJOX09OKGVyciA9PSAtRU1TR1NJWkUpO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9saWIvcHkvX19pbml0X18ucHkgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbGliL3B5L19faW5pdF9fLnB5XG5pbmRleCBlNThiZGJkYzU4ZWVhZC4uMzQ5MzU4ODZiNmFkZmUgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbGliL3B5L19faW5pdF9fLnB5XG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbGliL3B5L19faW5pdF9fLnB5XG5AQCAtMTcsNyArMTcsNyBAQCBmcm9tIC51dGlscyBpbXBvcnQgQ21kRXhpdEZhaWx1cmUsIGZkX3JlYWRfdGltZW91dCwgY21kLCBia2csIGRlZmVyLCBcXFxuICAgICB3YWl0X2ZpbGUsIHRvb2wsIHRjXG4gZnJvbSAuYnBmIGltcG9ydCBicGZfbWFwX3NldCwgYnBmX21hcF9kdW1wLCBicGZfcHJvZ19tYXBfaWRzXG4gZnJvbSAueW5sIGltcG9ydCBObEVycm9yLCBObGN0cmxGYW1pbHksIFlubEZhbWlseSwgXFxcbi0gICAgRXRodG9vbEZhbWlseSwgTmV0ZGV2RmFtaWx5LCBSdG5sRmFtaWx5LCBSdG5sQWRkckZhbWlseVxuKyAgICBFdGh0b29sRmFtaWx5LCBOZXRkZXZGYW1pbHksIFJ0bmxGYW1pbHksIFJ0bmxBZGRyRmFtaWx5LCBSdG5sUm91dGVGYW1pbHlcbiBmcm9tIC55bmwgaW1wb3J0IE5ldHNoYXBlckZhbWlseSwgRGV2bGlua0ZhbWlseSwgUFNQRmFtaWx5LCBOZXRsaW5rXG4gXG4gX19hbGxfXyA9IFtcIktTUkNcIixcbkBAIC0zNCw0ICszNCw0IEBAIF9fYWxsX18gPSBbXCJLU1JDXCIsXG4gICAgICAgICAgICBcIk5ldGRldlNpbVwiLCBcIk5ldGRldlNpbURldlwiLFxuICAgICAgICAgICAgXCJOZXRzaGFwZXJGYW1pbHlcIiwgXCJEZXZsaW5rRmFtaWx5XCIsIFwiUFNQRmFtaWx5XCIsIFwiTmxFcnJvclwiLFxuICAgICAgICAgICAgXCJZbmxGYW1pbHlcIiwgXCJFdGh0b29sRmFtaWx5XCIsIFwiTmV0ZGV2RmFtaWx5XCIsIFwiUnRubEZhbWlseVwiLFxuLSAgICAgICAgICAgXCJObGN0cmxGYW1pbHlcIiwgXCJSdG5sQWRkckZhbWlseVwiLCBcIk5ldGxpbmtcIl1cbisgICAgICAgICAgIFwiTmxjdHJsRmFtaWx5XCIsIFwiUnRubEFkZHJGYW1pbHlcIiwgXCJSdG5sUm91dGVGYW1pbHlcIiwgXCJOZXRsaW5rXCJdXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2xpYi9weS95bmwucHkgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbGliL3B5L3lubC5weVxuaW5kZXggMmU1NjcwNjJhYTZjY2UuLjA4ZGVmZjc1NmYyOWIwIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2xpYi9weS95bmwucHlcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9saWIvcHkveW5sLnB5XG5AQCAtMjksNyArMjksNyBAQCBleGNlcHQgTW9kdWxlTm90Rm91bmRFcnJvciBhcyBlOlxuIFxuIF9fYWxsX18gPSBbXG4gICAgIFwiTmxFcnJvclwiLCBcIk5sUG9saWN5XCIsIFwiTmV0bGlua1wiLCBcIllubEZhbWlseVwiLCBcIlNQRUNfUEFUSFwiLFxuLSAgICBcIkV0aHRvb2xGYW1pbHlcIiwgXCJSdG5sRmFtaWx5XCIsIFwiUnRubEFkZHJGYW1pbHlcIixcbisgICAgXCJFdGh0b29sRmFtaWx5XCIsIFwiUnRubEZhbWlseVwiLCBcIlJ0bmxBZGRyRmFtaWx5XCIsIFwiUnRubFJvdXRlRmFtaWx5XCIsXG4gICAgIFwiTmV0ZGV2RmFtaWx5XCIsIFwiTmV0c2hhcGVyRmFtaWx5XCIsIFwiTmxjdHJsRmFtaWx5XCIsIFwiRGV2bGlua0ZhbWlseVwiLFxuICAgICBcIlBTUEZhbWlseVwiLFxuIF1cbkBAIC01NCw2ICs1NCwxMSBAQCBjbGFzcyBSdG5sQWRkckZhbWlseShZbmxGYW1pbHkpOlxuICAgICAgICAgc3VwZXIoKS5fX2luaXRfXygoU1BFQ19QQVRIIC8gUGF0aCgncnQtYWRkci55YW1sJykpLmFzX3Bvc2l4KCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHNjaGVtYT0nJywgcmVjdl9zaXplPXJlY3Zfc2l6ZSlcbiBcbitjbGFzcyBSdG5sUm91dGVGYW1pbHkoWW5sRmFtaWx5KTpcbisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHJlY3Zfc2l6ZT0wKTpcbisgICAgICAgIHN1cGVyKCkuX19pbml0X18oKFNQRUNfUEFUSCAvIFBhdGgoJ3J0LXJvdXRlLnlhbWwnKSkuYXNfcG9zaXgoKSxcbisgICAgICAgICAgICAgICAgICAgICAgICAgc2NoZW1hPScnLCByZWN2X3NpemU9cmVjdl9zaXplKVxuK1xuIGNsYXNzIE5ldGRldkZhbWlseShZbmxGYW1pbHkpOlxuICAgICBkZWYgX19pbml0X18oc2VsZiwgcmVjdl9zaXplPTApOlxuICAgICAgICAgc3VwZXIoKS5fX2luaXRfXygoU1BFQ19QQVRIIC8gUGF0aCgnbmV0ZGV2LnlhbWwnKSkuYXNfcG9zaXgoKSxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvcnRuZXRsaW5rLnB5IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3J0bmV0bGluay5weVxuaW5kZXggMGM2N2M3YzAwZDg0MWMuLmY3NGNjZDVjMmQxM2FhIDEwMDc1NVxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3J0bmV0bGluay5weVxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3J0bmV0bGluay5weVxuQEAgLTUsNyArNSw4IEBAIGltcG9ydCBzb2NrZXRcbiBpbXBvcnQgc3RydWN0XG4gaW1wb3J0IHRpbWVcbiBmcm9tIGxpYi5weSBpbXBvcnQgYmtnLCBpcCwga3NmdF9leGl0LCBrc2Z0X3J1biwga3NmdF9lcSwga3NmdF9nZSwga3NmdF90cnVlLCBLc2Z0U2tpcEV4XG4tZnJvbSBsaWIucHkgaW1wb3J0IENtZEV4aXRGYWlsdXJlLCBOZXROUywgTmV0TlNFbnRlciwgUnRubEFkZHJGYW1pbHlcbitmcm9tIGxpYi5weSBpbXBvcnQga3NmdF9ub3RfaW4sIGtzZnRfbm90X25vbmVcbitmcm9tIGxpYi5weSBpbXBvcnQgQ21kRXhpdEZhaWx1cmUsIE5ldE5TLCBOZXROU0VudGVyLCBSdG5sQWRkckZhbWlseSwgUnRubFJvdXRlRmFtaWx5XG4gXG4gSVBWNF9BTExfSE9TVFNfTVVMVElDQVNUID0gYidcXHhlMFxceDAwXFx4MDBcXHgwMSdcbiBJUFY0X1RFU1RfTVVMVElDQVNUID0gYidcXHhlZlxceDAxXFx4MDFcXHgwMSdcbkBAIC0xMzQsOCArMTM1LDE4NCBAQCBkZWYgaXB2NF9kZXZjb25mX25vdGlmeSgpIC1cdTAwM2UgTm9uZTpcbiAgICAga3NmdF90cnVlKGZcImluZXQge2lmbmFtZX0gZm9yd2FyZGluZyBvblwiIGluIGNtZF9vYmouc3Rkb3V0LFxuICAgICAgICAgICAgICAgZlwiTm8gJ2ZvcndhcmRpbmcgb24nIG5vdGlmaWNpYXRpb24gZm91bmQgZm9yIGludGVyZmFjZSB7aWZuYW1lfVwiKVxuIFxuK2RlZiBfcnRubF9yb3V0ZV9zdWJzY3JpYmUobnMpOlxuKyAgICB3aXRoIE5ldE5TRW50ZXIoc3RyKG5zKSk6XG4rICAgICAgICBydG5sID0gUnRubFJvdXRlRmFtaWx5KClcbisgICAgcnRubC5udGZfc3Vic2NyaWJlKFwicnRubGdycC1pcHY2LXJvdXRlXCIpXG4rICAgIHJldHVybiBydG5sXG4rXG4rXG4rZGVmIF93YWl0X3JvdXRlX250ZihydG5sLCBuYW1lLCBkc3RfbGVuLCBkc3Q9Tm9uZSwgZGVhZGxpbmU9MTApOlxuKyAgICBcIlwiXCJSZXR1cm4gdGhlIGF0dHJzIG9mIHRoZSBmaXJzdCBtYXRjaGluZyBub3RpZmljYXRpb24sIE5vbmUgb24gdGltZW91dC5cIlwiXCJcbitcbisgICAgZm9yIG1zZyBpbiBydG5sLnBvbGxfbnRmKGR1cmF0aW9uPWRlYWRsaW5lKTpcbisgICAgICAgIGlmIG1zZ1snbmFtZSddICE9IG5hbWU6XG4rICAgICAgICAgICAgY29udGludWVcbisgICAgICAgIGF0dHJzID0gbXNnWydtc2cnXVxuKyAgICAgICAgaWYgYXR0cnNbJ3J0bS1kc3QtbGVuJ10gIT0gZHN0X2xlbjpcbisgICAgICAgICAgICBjb250aW51ZVxuKyAgICAgICAgaWYgZHN0IGlzIG5vdCBOb25lIGFuZCBhdHRycy5nZXQoJ2RzdCcpICE9IGRzdDpcbisgICAgICAgICAgICBjb250aW51ZVxuKyAgICAgICAgcmV0dXJuIGF0dHJzXG4rICAgIHJldHVybiBOb25lXG4rXG4rXG4rZGVmIF9jb2xsZWN0X3JvdXRlX250ZnMocnRubCwgbmFtZSwgd2FudCwgZGVhZGxpbmU9MTApOlxuKyAgICBcIlwiXCJHYXRoZXIgYXR0cnMgb2YgbWF0Y2hpbmcgbm90aWZpY2F0aW9ucywga2V5ZWQgYnkgKGRzdF9sZW4sIGRzdCkuXCJcIlwiXG4rXG4rICAgIHNlZW4gPSB7fVxuKyAgICBmb3IgbXNnIGluIHJ0bmwucG9sbF9udGYoZHVyYXRpb249ZGVhZGxpbmUpOlxuKyAgICAgICAgaWYgbXNnWyduYW1lJ10gIT0gbmFtZTpcbisgICAgICAgICAgICBjb250aW51ZVxuKyAgICAgICAgYXR0cnMgPSBtc2dbJ21zZyddXG4rICAgICAgICBrZXkgPSAoYXR0cnNbJ3J0bS1kc3QtbGVuJ10sIGF0dHJzLmdldCgnZHN0JykpXG4rICAgICAgICBpZiBrZXkgaW4gd2FudDpcbisgICAgICAgICAgICBzZWVuW2tleV0gPSBhdHRyc1xuKyAgICAgICAgICAgIGlmIGxlbihzZWVuKSA9PSBsZW4od2FudCk6XG4rICAgICAgICAgICAgICAgIGJyZWFrXG4rICAgIHJldHVybiBzZWVuXG4rXG4rXG4rZGVmIF93cml0ZV9pcHY2X3N5c2N0bChuYW1lLCB2YWx1ZSk6XG4rICAgIHdpdGggb3BlbihmXCIvcHJvYy9zeXMvbmV0L2lwdjYve25hbWV9XCIsIFwid1wiKSBhcyBmOlxuKyAgICAgICAgZi53cml0ZShmXCJ7dmFsdWV9XFxuXCIpXG4rXG4rXG4rZGVmIGlwdjZfcm91dGVfZGVsX3JlYXNvbl9leHBpcmVkKCkgLVx1MDAzZSBOb25lOlxuKyAgICBcIlwiXCJBbiBleHBpcmVkIHJvdXRlIHJlcG9ydHMgUlRBX0RFTF9SRUFTT04gPT0gZXhwaXJlZC5cIlwiXCJcbitcbisgICAgd2l0aCBOZXROUygpIGFzIG5zOlxuKyAgICAgICAgcnRubCA9IF9ydG5sX3JvdXRlX3N1YnNjcmliZShucylcbisgICAgICAgIHdpdGggTmV0TlNFbnRlcihzdHIobnMpKTpcbisgICAgICAgICAgICBfd3JpdGVfaXB2Nl9zeXNjdGwoXCJyb3V0ZS9nY19pbnRlcnZhbFwiLCAyKVxuKyAgICAgICAgaXAoXCJsaW5rIGFkZCBuYW1lIGR1bW15MSB0eXBlIGR1bW15XCIsIG5zPXN0cihucykpXG4rICAgICAgICBpcChcImxpbmsgc2V0IGRldiBkdW1teTEgdXBcIiwgbnM9c3RyKG5zKSlcbisgICAgICAgIGlwKFwiLTYgcm91dGUgYWRkIDIwMDE6ZGI4OjI6Oi82NCBkZXYgZHVtbXkxIGV4cGlyZXMgMlwiLCBucz1zdHIobnMpKVxuK1xuKyAgICAgICAgYXR0cnMgPSBfd2FpdF9yb3V0ZV9udGYocnRubCwgJ2RlbHJvdXRlLW50ZicsIDY0LCAnMjAwMTpkYjg6Mjo6JyxcbisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlYWRsaW5lPTE1KVxuKyAgICAgICAga3NmdF9ub3Rfbm9uZShhdHRycywgXCJubyBSVE1fREVMUk9VVEUgZm9yIHRoZSBleHBpcmVkIHJvdXRlXCIpXG4rICAgICAgICBpZiBhdHRycyBpcyBub3QgTm9uZTpcbisgICAgICAgICAgICBrc2Z0X2VxKGF0dHJzLmdldCgnZGVsLXJlYXNvbicpLCAnZXhwaXJlZCcpXG4rXG4rXG4rZGVmIF9zZW5kX3JhKHNvY2ssIGlmaW5kZXgsIGxpZmV0aW1lLCByaW89Tm9uZSwgcGlvPU5vbmUpOlxuKyAgICBcIlwiXCJUaGUga2VybmVsIGZpbGxzIGluIHRoZSBJQ01QdjYgY2hlY2tzdW0gb24gcmF3IElDTVB2NiBzb2NrZXRzLlwiXCJcIlxuK1xuKyAgICAjIHR5cGUsIGNvZGUsIGNrc3VtLCBob3AgbGltaXQsIGZsYWdzLCByb3V0ZXIgbGlmZXRpbWUsXG4rICAgICMgcmVhY2hhYmxlIHRpbWUsIHJldHJhbnMgdGltZXJcbisgICAgcmEgPSBzdHJ1Y3QucGFjaygnIUJCSEJCSElJJywgMTM0LCAwLCAwLCA2NCwgMCwgbGlmZXRpbWUsIDAsIDApXG4rICAgIGlmIHJpbyBpcyBub3QgTm9uZTpcbisgICAgICAgIHByZWZpeCwgcGxlbiwgcmlvX2xpZmV0aW1lID0gcmlvXG4rICAgICAgICAjIFJGQyA0MTkxIHJvdXRlIGluZm9ybWF0aW9uIG9wdGlvbiwgLzY0IHByZWZpeCAoOCBieXRlcylcbisgICAgICAgIHJhICs9IHN0cnVjdC5wYWNrKCchQkJCQkknLCAyNCwgMiwgcGxlbiwgMCwgcmlvX2xpZmV0aW1lKVxuKyAgICAgICAgcmEgKz0gc29ja2V0LmluZXRfcHRvbihzb2NrZXQuQUZfSU5FVDYsIHByZWZpeClbOjhdXG4rICAgIGlmIHBpbyBpcyBub3QgTm9uZTpcbisgICAgICAgIHByZWZpeCwgcGxlbiwgdmFsaWRfbGZ0ID0gcGlvXG4rICAgICAgICAjIFJGQyA0ODYxIHByZWZpeCBpbmZvcm1hdGlvbiBvcHRpb24sIG9uLWxpbmsgb25seSAoTCBzZXQsIEEgY2xlYXIpXG4rICAgICAgICByYSArPSBzdHJ1Y3QucGFjaygnIUJCQkJJSUknLCAzLCA0LCBwbGVuLCAweDgwLCB2YWxpZF9sZnQsIDAsIDApXG4rICAgICAgICByYSArPSBzb2NrZXQuaW5ldF9wdG9uKHNvY2tldC5BRl9JTkVUNiwgcHJlZml4KVxuKyAgICBzb2NrLnNlbmR0byhyYSwgKCdmZjAyOjoxJywgMCwgMCwgaWZpbmRleCkpXG4rXG4rXG4rZGVmIF9yYV9yb3V0ZXJfc29jayhuc19yLCBpZm5hbWUpOlxuKyAgICB3aXRoIE5ldE5TRW50ZXIoc3RyKG5zX3IpKTpcbisgICAgICAgIHNvY2sgPSBzb2NrZXQuc29ja2V0KHNvY2tldC5BRl9JTkVUNiwgc29ja2V0LlNPQ0tfUkFXLFxuKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc29ja2V0LklQUFJPVE9fSUNNUFY2KVxuKyAgICAgICAgc29jay5zZXRzb2Nrb3B0KHNvY2tldC5JUFBST1RPX0lQVjYsIHNvY2tldC5JUFY2X01VTFRJQ0FTVF9IT1BTLCAyNTUpXG4rICAgICAgICByZXR1cm4gc29jaywgc29ja2V0LmlmX25hbWV0b2luZGV4KGlmbmFtZSlcbitcbitcbitkZWYgX3JhX2FkdmVydGlzZV9yb3V0ZXMocnRubCwgc29jaywgaWZpbmRleCwgd2FudCwgKipyYV9vcHRzKTpcbisgICAgXCJcIlwiXG4rICAgIFNlbmRpbmcgZmFpbHMgd2l0aCBFQUREUk5PVEFWQUlMIHVudGlsIHRoZSByb3V0ZXIncyBsaW5rLWxvY2FsXG4rICAgIGFkZHJlc3MgcGFzc2VzIERBRCwgc28gcmV0cnkuXG4rICAgIFwiXCJcIlxuK1xuKyAgICBzZWVuID0ge31cbisgICAgZm9yIF8gaW4gcmFuZ2UoMTApOlxuKyAgICAgICAgdHJ5OlxuKyAgICAgICAgICAgIF9zZW5kX3JhKHNvY2ssIGlmaW5kZXgsICoqcmFfb3B0cylcbisgICAgICAgIGV4Y2VwdCBPU0Vycm9yOlxuKyAgICAgICAgICAgIHRpbWUuc2xlZXAoMC4yKVxuKyAgICAgICAgICAgIGNvbnRpbnVlXG4rICAgICAgICBzZWVuLnVwZGF0ZShfY29sbGVjdF9yb3V0ZV9udGZzKHJ0bmwsICduZXdyb3V0ZS1udGYnLFxuKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3YW50IC0gc2V0KHNlZW4ua2V5cygpKSwgZGVhZGxpbmU9MikpXG4rICAgICAgICBpZiBsZW4oc2VlbikgPT0gbGVuKHdhbnQpOlxuKyAgICAgICAgICAgIGJyZWFrXG4rICAgIHJldHVybiBzZWVuXG4rXG4rXG4rZGVmIGlwdjZfcm91dGVfZGVsX3JlYXNvbl9yYV93aXRoZHJhd24oKSAtXHUwMDNlIE5vbmU6XG4rICAgIFwiXCJcIlxuKyAgICBSb3V0ZXMgd2l0aGRyYXduIGJ5IGEgemVyby1saWZldGltZSBSQSAocm91dGVyIGxpZmV0aW1lLCBSRkMgNDg2MVxuKyAgICBQSU8sIFJGQyA0MTkxIFJJTykgcmVwb3J0IFJUQV9ERUxfUkVBU09OID09IHJhLXdpdGhkcmF3bi5cbisgICAgXCJcIlwiXG4rXG4rICAgICMgKHJ0bS1kc3QtbGVuLCBkc3QpOyB0aGUgZGVmYXVsdCByb3V0ZSBjYXJyaWVzIG5vIFJUQV9EU1RcbisgICAgcm91dGVzID0geygwLCBOb25lKSwgKDY0LCAnMjAwMTpkYjg6Njo6JyksICg2NCwgJzIwMDE6ZGI4OjU6OicpfVxuK1xuKyAgICB3aXRoIE5ldE5TKCkgYXMgbnNfaCwgTmV0TlMoKSBhcyBuc19yOlxuKyAgICAgICAgaXAoZlwibGluayBhZGQgdmV0aDAgbmV0bnMge25zX2h9IHR5cGUgdmV0aCBwZWVyIG5hbWUgdmV0aDEgbmV0bnMge25zX3J9XCIpXG4rICAgICAgICB3aXRoIE5ldE5TRW50ZXIoc3RyKG5zX2gpKTpcbisgICAgICAgICAgICBfd3JpdGVfaXB2Nl9zeXNjdGwoXCJjb25mL3ZldGgwL2FjY2VwdF9yYVwiLCAyKVxuKyAgICAgICAgICAgIF93cml0ZV9pcHY2X3N5c2N0bChcImNvbmYvdmV0aDAvZm9yd2FyZGluZ1wiLCAwKVxuKyAgICAgICAgICAgIHRyeTpcbisgICAgICAgICAgICAgICAgX3dyaXRlX2lwdjZfc3lzY3RsKFwiY29uZi92ZXRoMC9hY2NlcHRfcmFfcnRfaW5mb19tYXhfcGxlblwiLCA2NClcbisgICAgICAgICAgICBleGNlcHQgRmlsZU5vdEZvdW5kRXJyb3I6XG4rICAgICAgICAgICAgICAgIHJhaXNlIEtzZnRTa2lwRXgoXCJubyBDT05GSUdfSVBWNl9ST1VURV9JTkZPXCIpXG4rICAgICAgICB3aXRoIE5ldE5TRW50ZXIoc3RyKG5zX3IpKTpcbisgICAgICAgICAgICAjIHNraXAgREFEIHNvIHRoZSByb3V0ZXIncyBsaW5rLWxvY2FsIHNvdXJjZSBpcyB1c2FibGUgcmlnaHQgYXdheVxuKyAgICAgICAgICAgIF93cml0ZV9pcHY2X3N5c2N0bChcImNvbmYvdmV0aDEvYWNjZXB0X2RhZFwiLCAwKVxuKyAgICAgICAgaXAoXCJsaW5rIHNldCBkZXYgdmV0aDAgdXBcIiwgbnM9c3RyKG5zX2gpKVxuKyAgICAgICAgaXAoXCJsaW5rIHNldCBkZXYgdmV0aDEgdXBcIiwgbnM9c3RyKG5zX3IpKVxuK1xuKyAgICAgICAgcnRubCA9IF9ydG5sX3JvdXRlX3N1YnNjcmliZShuc19oKVxuKyAgICAgICAgc29jaywgaWZpbmRleCA9IF9yYV9yb3V0ZXJfc29jayhuc19yLCBcInZldGgxXCIpXG4rXG4rICAgICAgICBzZWVuID0gX3JhX2FkdmVydGlzZV9yb3V0ZXMocnRubCwgc29jaywgaWZpbmRleCwgcm91dGVzLFxuKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpZmV0aW1lPTE4MDAsXG4rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmlvPSgnMjAwMTpkYjg6NTo6JywgNjQsIDYwMCksXG4rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGlvPSgnMjAwMTpkYjg6Njo6JywgNjQsIDYwMCkpXG4rICAgICAgICBrc2Z0X2VxKHNldChzZWVuKSwgcm91dGVzLCBcIm5vdCBhbGwgUkEgcm91dGVzIHdlcmUgaW5zdGFsbGVkXCIpXG4rICAgICAgICBpZiBzZXQoc2VlbikgIT0gcm91dGVzOlxuKyAgICAgICAgICAgIHJldHVyblxuK1xuKyAgICAgICAgX3NlbmRfcmEoc29jaywgaWZpbmRleCwgMCwgcmlvPSgnMjAwMTpkYjg6NTo6JywgNjQsIDApLFxuKyAgICAgICAgICAgICAgICAgcGlvPSgnMjAwMTpkYjg6Njo6JywgNjQsIDApKVxuKyAgICAgICAgc2VlbiA9IF9jb2xsZWN0X3JvdXRlX250ZnMocnRubCwgJ2RlbHJvdXRlLW50ZicsIHJvdXRlcylcbisgICAgICAgIGZvciBrZXkgaW4gcm91dGVzOlxuKyAgICAgICAgICAgIGF0dHJzID0gc2Vlbi5nZXQoa2V5KVxuKyAgICAgICAgICAgIGtzZnRfbm90X25vbmUoYXR0cnMsIGZcIm5vIFJUTV9ERUxST1VURSBmb3Ige2tleX1cIilcbisgICAgICAgICAgICBpZiBhdHRycyBpcyBub3QgTm9uZTpcbisgICAgICAgICAgICAgICAga3NmdF9lcShhdHRycy5nZXQoJ2RlbC1yZWFzb24nKSwgJ3JhLXdpdGhkcmF3bicpXG4rXG4rXG4rZGVmIGlwdjZfcm91dGVfZGVsX3JlYXNvbl9hYnNlbnQoKSAtXHUwMDNlIE5vbmU6XG4rICAgIFwiXCJcIlxuKyAgICBBIGRlbGV0aW9uIHBhdGggdGhhdCByZWNvcmRzIG5vIGNhdXNlIChoZXJlIGEgdXNlcnNwYWNlIHJlcXVlc3QpXG4rICAgIG11c3Qgbm90IGNhcnJ5IFJUQV9ERUxfUkVBU09OIGF0IGFsbC5cbisgICAgXCJcIlwiXG4rXG4rICAgIHdpdGggTmV0TlMoKSBhcyBuczpcbisgICAgICAgIHJ0bmwgPSBfcnRubF9yb3V0ZV9zdWJzY3JpYmUobnMpXG4rICAgICAgICBpcChcImxpbmsgYWRkIG5hbWUgZHVtbXkxIHR5cGUgZHVtbXlcIiwgbnM9c3RyKG5zKSlcbisgICAgICAgIGlwKFwibGluayBzZXQgZGV2IGR1bW15MSB1cFwiLCBucz1zdHIobnMpKVxuKyAgICAgICAgaXAoXCItNiByb3V0ZSBhZGQgMjAwMTpkYjg6MTo6LzY0IGRldiBkdW1teTFcIiwgbnM9c3RyKG5zKSlcbisgICAgICAgIGlwKFwiLTYgcm91dGUgZGVsIDIwMDE6ZGI4OjE6Oi82NCBkZXYgZHVtbXkxXCIsIG5zPXN0cihucykpXG4rXG4rICAgICAgICBhdHRycyA9IF93YWl0X3JvdXRlX250ZihydG5sLCAnZGVscm91dGUtbnRmJywgNjQsICcyMDAxOmRiODoxOjonKVxuKyAgICAgICAga3NmdF9ub3Rfbm9uZShhdHRycywgXCJubyBSVE1fREVMUk9VVEUgZm9yIDIwMDE6ZGI4OjE6Oi82NFwiKVxuKyAgICAgICAgaWYgYXR0cnMgaXMgbm90IE5vbmU6XG4rICAgICAgICAgICAga3NmdF9ub3RfaW4oJ2RlbC1yZWFzb24nLCBhdHRycyxcbisgICAgICAgICAgICAgICAgICAgICAgICBcInVzZXIgZGVsZXRpb24gbXVzdCBub3QgY2FycnkgZGVsLXJlYXNvblwiKVxuK1xuK1xuIGRlZiBtYWluKCkgLVx1MDAzZSBOb25lOlxuLSAgICBrc2Z0X3J1bihbZHVtcF9tY2FkZHJfY2hlY2ssIGR1bXBfbWNhZGRyNl9jaGVjaywgaXB2NF9kZXZjb25mX25vdGlmeV0pXG4rICAgIGtzZnRfcnVuKFtkdW1wX21jYWRkcl9jaGVjaywgZHVtcF9tY2FkZHI2X2NoZWNrLCBpcHY0X2RldmNvbmZfbm90aWZ5LFxuKyAgICAgICAgICAgICAgaXB2Nl9yb3V0ZV9kZWxfcmVhc29uX2V4cGlyZWQsXG4rICAgICAgICAgICAgICBpcHY2X3JvdXRlX2RlbF9yZWFzb25fcmFfd2l0aGRyYXduLFxuKyAgICAgICAgICAgICAgaXB2Nl9yb3V0ZV9kZWxfcmVhc29uX2Fic2VudF0pXG4gICAgIGtzZnRfZXhpdCgpXG4gXG4gaWYgX19uYW1lX18gPT0gXCJfX21haW5fX1wiOlxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMjI6MzY6MDAuOTA2NDUyNTJaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4NzU2MDg2OTM5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgSVB2NiBSb3V0ZSBEZWxldGlvbiBOb3RpZmljYXRpb24gUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGdvdCB0aGlzIHBhdGNoIGFkZGluZyBhIGBSVEFfREVMX1JFQVNPTmAgYXR0cmlidXRlIHRvIElQdjYgcm91dGUgZGVsZXRpb24gbm90aWZpY2F0aW9ucyAoYFJUTV9ERUxST1VURWApLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCB0aGlzIGlzIGEgc29saWQgYWRkaXRpb247IHByb3ZpZGluZyBtb3JlIGluZm9ybWF0aW9uIGFib3V0ICp3aHkqIGEgcm91dGUgaXMgYmVpbmcgZGVsZXRlZCBzaG91bGQgYmUgaGVscGZ1bCBmb3IgZGVidWdnaW5nIGFuZCBtb25pdG9yaW5nLiBJIHNlZSBpdCdzIHRvdWNoaW5nIHNldmVyYWwgY29yZSBJUHY2IGZpbGVzOiBgbmV0L2lwdjYvcm91dGUuY2AsIGBuZXQvaXB2Ni9pcDZfZmliLmNgLCBgbmV0L2lwdjYvYWRkcmNvbmYuY2AsIGFuZCBgbmV0L2lwdjYvbmRpc2MuY2AsIGFsb25nIHdpdGggYSBoZWFkZXIgYW5kIGEgbmV3IFB5dGhvbiB0ZXN0LiBGdW5jdGlvbmFsbHksIGl0IHNlZW1zIHN0cmFpZ2h0Zm9yd2FyZDogYWRkaW5nIHRoZSBhdHRyaWJ1dGUgYW5kIHBvcHVsYXRpbmcgaXQgZm9yIGV4cGlyYXRpb24gb3IgUkEgd2l0aGRyYXdhbCBzY2VuYXJpb3MuXG5cbk5vdywgbGV0J3MgZHJpbGwgZG93bi4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hpY2ggZnVuY3Rpb25zIGFyZSBtb3N0IGNyaXRpY2FsIGZvciBmdXp6aW5nLiBJJ3ZlIHF1aWNrbHkgaWRlbnRpZmllZCBhIGxpc3Qgb2YgbW9kaWZpZWQgZnVuY3Rpb25zOiBgaXA2X2RlbF9ydF9yZWFzb25gLCBgZmliNl9kZWxgLCBgZmliNl9kZWxfcm91dGVgLCBgaW5ldDZfcnRfbm90aWZ5YCwgYHJ0Nl9maWxsX25vZGVgLCBgYWRkcmNvbmZfcHJlZml4X3JjdmAsIGBuZGlzY19yb3V0ZXJfZGlzY292ZXJ5YCwgYW5kIGBydDZfcm91dGVfcmN2YC5cblxuQSBxdWljayBhbmFseXNpcywgYW5kIGl0IHNlZW1zIHRoYXQgYHJ0Nl9maWxsX25vZGVgIGlzIGFuIGludGVybmFsIGhlbHBlciwgYnV0IGhlYXZpbHkgbW9kaWZpZWQuIEl0IHdpbGwgYmUgaW1wb3J0YW50IHRvIGZ1enosIGV2ZW4gdGhvdWdoIHN0YXRpYy4gYGluZXQ2X3J0X25vdGlmeWAgc2VlbXMgbGlrZSBhIHByaW1hcnkgY2FuZGlkYXRlIHNpbmNlIGl0J3MgaW52b2x2ZWQgaW4gdGhlIG5ldGxpbmsgbWVzc2FnZSBnZW5lcmF0aW9uLiBCb3RoIGBpcDZfZGVsX3J0X3JlYXNvbmAgYW5kIGBmaWI2X2RlbGAgYXJlIGdsb2JhbCwgYW5kIHRoZXJlZm9yZSBnb29kIGNhbmRpZGF0ZXMuIGBhZGRyY29uZl9wcmVmaXhfcmN2YCBpcyBhbHNvIGdsb2JhbCBhbmQgd29ydGggbm90aW5nLiAgYG5kaXNjX3JvdXRlcl9kaXNjb3ZlcnlgIGlzIGludGVybmFsIGFuZCBsZXNzIG9mIGEgY29uY2VybiwgYW5kIGBydDZfcm91dGVfcmN2YCBpcyBnbG9iYWwuXG5cbkZvY3VzaW5nIG9uIGBuZXQvaXB2Ni9yb3V0ZS5jYCBhbmQgYG5ldC9pcHY2L2lwNl9maWIuY2AsIEknbGwgZWxpbWluYXRlIGFueSBpbnRlcm5hbCBvciBpbmxpbmVkIGZ1bmN0aW9ucy4gVGhhdCBsZWF2ZXMgbWUgd2l0aCBgaXA2X2RlbF9ydF9yZWFzb25gLCBgZmliNl9kZWxgLCBgaW5ldDZfcnRfbm90aWZ5YCwgYHJ0Nl9yb3V0ZV9yY3ZgLCBhbmQgYGFkZHJjb25mX3ByZWZpeF9yY3ZgLiBUaGVzZSBhcmUgdGhlIGtleSBlbnRyeSBwb2ludHMgSSBuZWVkIHRvIGludmVzdGlnYXRlIGZ1cnRoZXIuXG5cbkZpbmFsbHksIEkgbmVlZCB0byBjaGVjayB0aGUgS2NvbmZpZyBvcHRpb25zLiBUaGUgY29kZSBsaXZlcyBpbiBgbmV0L2lwdjYvYCwgc28gaXQncyBvYnZpb3VzbHkgdGllZCB0byBgQ09ORklHX0lQVjZgLiBUaGUgdGVzdCBzY3JpcHQgbWVudGlvbnMgYENPTkZJR19JUFY2X1JPVVRFX0lORk9gIHJlbGF0ZWQgdG8gYGFjY2VwdF9yYV9ydF9pbmZvX21heF9wbGVuYC4gSSBzaG91bGQgY2hlY2sgd2hldGhlciBvciBub3QgdGhhdCdzIGFjdHVhbGx5IHJlcXVpcmVkIHRvIGNvbXBpbGUgdGhlIGNvZGUuIEFmdGVyIGEgcXVpY2sgbG9vaywgaXQgc2VlbXMgdGhhdCB0aGlzIGlzICpub3QqIHJlcXVpcmVkIGZvciBnZW5lcmFsIG9wZXJhdGlvbiwgYWx0aG91Z2ggSSBzaG91bGQgbG9vayBhdCBgcnQ2X3JvdXRlX3JjdmAgdG8gc2VlIHdoYXQgaXMgY29uZGl0aW9uYWxseSBjb21waWxlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI5NzUsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2NjIsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQyMjozNjowOS42NjI1NDE5NjlaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTgzNDI2NTUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInJ0Nl9yb3V0ZV9yY3ZcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjYvcm91dGUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2Ni9yb3V0ZS5jPTk2Mz1zdGF0aWMgYm9vbCBydDZfaXNfZ3dfb3Jfbm9uZXh0aG9wKGNvbnN0IHN0cnVjdCBmaWI2X3Jlc3VsdCAqcmVzKVxcbi0tXFxubmV0L2lwdjYvcm91dGUuYy05NjktI2lmZGVmIENPTkZJR19JUFY2X1JPVVRFX0lORk9cXG5uZXQvaXB2Ni9yb3V0ZS5jOjk3MDppbnQgcnQ2X3JvdXRlX3JjdihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1OCAqb3B0LCBpbnQgbGVuLFxcbm5ldC9pcHY2L3JvdXRlLmMtOTcxLVxcdFxcdCAgY29uc3Qgc3RydWN0IGluNl9hZGRyICpnd2FkZHIpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDIyOjM2OjA5Ljg0NTk3NDA3OVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMwMjMwOTQyMzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkludmVzdGlnYXRpbmcgSVB2NiBSb3V0ZSBSZWNlcHRpb24qKlxuXG5BbHJpZ2h0LCBzbyBJIHNlZSBgcnQ2X3JvdXRlX3JjdmAgLSB0aGF0J3Mgd2hlcmUgdGhlIElQdjYgcm91dGluZyBtYWdpYyBoYXBwZW5zLiBHb29kIHRvIGtub3cgaXQncyB1bmRlciBgQ09ORklHX0lQVjZfUk9VVEVfSU5GT2AsIHRoYXQncyB0aGUgb2J2aW91cyBwbGFjZSB0byBzdGFydC4gTm93LCBsZXQncyBkcmlsbCBkb3duIGludG8gaG93IHByZWZpeGVzIGFyZSBoYW5kbGVkLiBJJ20gZ29pbmcgdG8ganVtcCBzdHJhaWdodCBpbnRvIGBhZGRyY29uZl9wcmVmaXhfcmN2YCB3aXRoaW4gYG5ldC9pcHY2L2FkZHJjb25mLmNgLiBUaGF0IGZ1bmN0aW9uJ3MgZ290IHRvIGJlIHRoZSBjb3JlIG9mIHVuZGVyc3RhbmRpbmcgaG93IHByZWZpeGVzIGFyZSByZWNlaXZlZCBhbmQgcHJvY2Vzc2VkLCBhbmQgdGhhdCdzIGNyaXRpY2FsIGZvciBob3cgcm91dGluZyB0YWJsZXMgYXJlIGJ1aWx0IGFuZCBtYWludGFpbmVkLiBUaW1lIHRvIHNlZSB3aGF0IHRoYXQgY29kZSdzIHJlYWxseSBkb2luZyB1bmRlciB0aGUgaG9vZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQ0MzMsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQyMjozNjoxMi44NjkwNzE3NjVaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjE1OTkxNzg5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImFkZHJjb25mX3ByZWZpeF9yY3ZcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjYvYWRkcmNvbmYuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2Ni9hZGRyY29uZi5jPTEzNjk9c3RhdGljIGludCBpcHY2X2NyZWF0ZV90ZW1wYWRkcihzdHJ1Y3QgaW5ldDZfaWZhZGRyICppZnAsIGJvb2wgYmxvY2spXFxuLS1cXG5uZXQvaXB2Ni9hZGRyY29uZi5jLTE0ODMtXFx0Y2ZnLmlmYV9mbGFncyA9IElGQV9GX1RFTVBPUkFSWTtcXG5uZXQvaXB2Ni9hZGRyY29uZi5jOjE0ODQ6XFx0Lyogc2V0IGluIGFkZHJjb25mX3ByZWZpeF9yY3YoKSAqL1xcbm5ldC9pcHY2L2FkZHJjb25mLmMtMTQ4NS1cXHRpZiAoaWZwLVxcdTAwM2VmbGFncyBcXHUwMDI2IElGQV9GX09QVElNSVNUSUMpXFxuLS1cXG5uZXQvaXB2Ni9hZGRyY29uZi5jPTI2ODk9c3RhdGljIGJvb2wgaXNfYWRkcl9tb2RlX2dlbmVyYXRlX3N0YWJsZShzdHJ1Y3QgaW5ldDZfZGV2ICppZGV2KVxcbi0tXFxubmV0L2lwdjYvYWRkcmNvbmYuYy0yNjk0LVxcbm5ldC9pcHY2L2FkZHJjb25mLmM6MjY5NTppbnQgYWRkcmNvbmZfcHJlZml4X3Jjdl9hZGRfYWRkcihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxubmV0L2lwdjYvYWRkcmNvbmYuYy0yNjk2LVxcdFxcdFxcdFxcdCBjb25zdCBzdHJ1Y3QgcHJlZml4X2luZm8gKnBpbmZvLFxcbi0tXFxubmV0L2lwdjYvYWRkcmNvbmYuYy0yNzk1LX1cXG5uZXQvaXB2Ni9hZGRyY29uZi5jOjI3OTY6RVhQT1JUX1NZTUJPTF9HUEwoYWRkcmNvbmZfcHJlZml4X3Jjdl9hZGRfYWRkcik7XFxubmV0L2lwdjYvYWRkcmNvbmYuYy0yNzk3LVxcbm5ldC9pcHY2L2FkZHJjb25mLmM6Mjc5ODp2b2lkIGFkZHJjb25mX3ByZWZpeF9yY3Yoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTggKm9wdCwgaW50IGxlbiwgYm9vbCBzbGxhbylcXG5uZXQvaXB2Ni9hZGRyY29uZi5jLTI3OTkte1xcbi0tXFxubmV0L2lwdjYvYWRkcmNvbmYuYy0yOTQzLW9rOlxcbm5ldC9pcHY2L2FkZHJjb25mLmM6Mjk0NDpcXHRcXHRlcnIgPSBhZGRyY29uZl9wcmVmaXhfcmN2X2FkZF9hZGRyKG5ldCwgZGV2LCBwaW5mbywgaW42X2RldixcXG5uZXQvaXB2Ni9hZGRyY29uZi5jLTI5NDUtXFx0XFx0XFx0XFx0XFx0XFx0ICAgXFx1MDAyNmFkZHIsIGFkZHJfdHlwZSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMjI6MzY6MTMuMDg1MDg3NDMzWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzM3ODk4NTY0NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duLCBhcyBhIG5ldHdvcmtpbmcgZXhwZXJ0OlxuXG4qKkludmVzdGlnYXRpbmcgSVB2NiBDb25maWd1cmF0aW9uIERlcGVuZGVuY2llcyoqXG5cbkFscmlnaHQsIGxldCBtZSB0aGluayB0aGlzIHRocm91Z2guIGBhZGRyY29uZl9wcmVmaXhfcmN2YC4uLiByaWdodCwgdGhhdCBvbmUgc2VlbXMgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZC4gQXMgZmFyIGFzIEkgY2FuIHRlbGwsIGl0J3Mgbm90IG5lc3RsZWQgdW5kZXIgc29tZSBzcGVjaWZpYywgZ3JhbnVsYXIgY29uZmlndXJhdGlvbiBvcHRpb24uIEl0J3MganVzdCBpbmhlcmVudGx5IHRpZWQgdG8gdGhlIGJyb2FkZXIgYENPTkZJR19JUFY2YCBzZXR0aW5nLiBUaGF0IG1ha2VzIHNlbnNlLCBrZWVwcyB0aGluZ3MgcmVsYXRpdmVseSBjbGVhbi5cblxuTm93LCBob2xkIG9uLi4uIHdoYXQgYWJvdXQgYG5kaXNjX3JvdXRlcl9kaXNjb3ZlcnlgPyBJIG5lZWQgdG8gZG91YmxlLWNoZWNrIHRoYXQgb25lLiBJcyBpdCBzaW1pbGFybHkgdW5jb25zdHJhaW5lZCwganVzdCBlbmFibGVkIGJ5IHZpcnR1ZSBvZiBJUHY2IGJlaW5nIGVuYWJsZWQsIG9yIGRvZXMgaXQgaGF2ZSBpdHMgb3duIGxpdHRsZSB0b2dnbGUgc29tZXdoZXJlLCBvciBtYXliZSBkZXBlbmQgb24gYW5vdGhlciwgc21hbGxlciBjb25maWcgc2V0dGluZz8gSSBuZWVkIHRvIGNvbmZpcm0gaXRzIGRlcGVuZGVuY3kgc3RydWN0dXJlIHRvIGF2b2lkIGFueSBzdXJwcmlzZXMgZG93biB0aGUgbGluZSwgZXNwZWNpYWxseSB3aXRoIHJlZ2FyZHMgdG8gcmVzb3VyY2UgdXRpbGl6YXRpb24gYW5kIG1vZHVsZSBsb2FkaW5nLiBMZXQgbWUgbG9vayBkZWVwZXIgYXQgdGhhdCBjb25maWd1cmF0aW9uIG9wdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTUxNzEsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQyMjozNjoxNi40NjQwNzU4MzFaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjQ5MjQ1NDA3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5kaXNjX3JvdXRlcl9kaXNjb3ZlcnlcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjYvbmRpc2MuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2Ni9uZGlzYy5jPTExODI9c3RhdGljIHZvaWQgbmRpc2NfcmFfdXNlcm9wdChzdHJ1Y3Qgc2tfYnVmZiAqcmEsIHN0cnVjdCBuZF9vcHRfaGRyICpvcHQpXFxuLS1cXG5uZXQvaXB2Ni9uZGlzYy5jLTEyMzAtXFxubmV0L2lwdjYvbmRpc2MuYzoxMjMxOnN0YXRpYyBlbnVtIHNrYl9kcm9wX3JlYXNvbiBuZGlzY19yb3V0ZXJfZGlzY292ZXJ5KHN0cnVjdCBza19idWZmICpza2IpXFxubmV0L2lwdjYvbmRpc2MuYy0xMjMyLXtcXG4tLVxcbm5ldC9pcHY2L25kaXNjLmM9MTgwNj1lbnVtIHNrYl9kcm9wX3JlYXNvbiBuZGlzY19yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9pcHY2L25kaXNjLmMtMTg0NS1cXHRjYXNlIE5ESVNDX1JPVVRFUl9BRFZFUlRJU0VNRU5UOlxcbm5ldC9pcHY2L25kaXNjLmM6MTg0NjpcXHRcXHRyZWFzb24gPSBuZGlzY19yb3V0ZXJfZGlzY292ZXJ5KHNrYik7XFxubmV0L2lwdjYvbmRpc2MuYy0xODQ3LVxcdFxcdGJyZWFrO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQyMjozNjoxNi43MTMzMjk2MzhaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozODcwNzMyODIxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCdzIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipJbnZlc3RpZ2F0aW5nIElQdjYgUm91dGVyIERpc2NvdmVyeSBDb25maWd1cmF0aW9uKipcblxuUmlnaHQsIHNvIGBuZGlzY19yb3V0ZXJfZGlzY292ZXJ5YCBpcyBmbGFnZ2VkIGFzICpzdGF0aWMqLiBUaGlzIGltbWVkaWF0ZWx5IHJhaXNlcyBhIGZsYWcuIFdlIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgc3RhdGljIG5hdHVyZSB3aXRoaW4gdGhlIElQdjYgcm91dGluZyBjb250ZXh0LiBBcmUgd2UgdGFsa2luZyBjb21waWxlLXRpbWUgZml4ZWQsIG9yIGlzIHRoZXJlIGEgbGltaXRlZCBydW50aW1lIGNvbmZpZ3VyYXRpb24gdGhhdCdzIGJlaW5nIG92ZXJsb29rZWQ/IFRoZSBuZXh0IHN0ZXBzIGFyZSBvYnZpb3VzOiB3ZSBuZWVkIHRvIGRlbHZlIGRlZXBlciBpbnRvIGhvdyB0aGlzIHN0YXRpYyBmbGFnIGludGVyYWN0cyB3aXRoIHJvdXRlIGRlbGV0aW9uIHdpdGhpbiBJUHY2LlxuXG5NeSBmaXJzdCB0aG91Z2h0IGlzIHRvIHplcm8gaW4gb24gYGlwNl9kZWxfcnRfcmVhc29uYC4gVGhpcyBmdW5jdGlvbiBsaWtlbHkgc3BlY2lmaWVzICp3aHkqIGEgcm91dGUgaXMgYmVpbmcgcmVtb3ZlZC4gVW5kZXJzdGFuZGluZyB0aGUgcmVhc29uIOKAkyB3aGV0aGVyIGl0J3MgZHVlIHRvIHJvdXRlciBhZHZlcnRpc2VtZW50IGV4cGlyYXRpb24sIG5laWdoYm9yIGRpc2NvdmVyeSBjaGFuZ2VzLCBvciBzb21ldGhpbmcgZWxzZSBlbnRpcmVseSDigJMgd2lsbCBiZSBrZXkgdG8gdW5kZXJzdGFuZGluZyB0aGUgc3RhdGljIG5hdHVyZSdzIGltcGFjdC4gRG9lcyB0aGUgc3RhdGljIGNvbmZpZ3VyYXRpb24gZGlyZWN0bHkgaW5mbHVlbmNlIHRoZSByZWFzb25zIGEgcm91dGUgaXMgZWxpZ2libGUgZm9yIHJlbW92YWw/IE9yIGRvZXMgdGhpcyBhcHBseSB0byB0aGUgbmV4dCBzZWN0aW9uP1xuXG5UaGVuLCB3ZSBuZWVkIHRvIGltbWVkaWF0ZWx5IHVuZGVyc3RhbmQgdGhlIGZ1bmN0aW9uIGBmaWI2X2RlbGAuIFRoaXMgd291bGQgYmUgdGhlIGFjdHVhbCBmdW5jdGlvbiB0aGF0IGhhbmRsZXMgdGhlIHJvdXRlIHRhYmxlIGRlbGV0aW9uLiBJcyB0aGUgc3RhdGljIGZsYWcgYSBkaXJlY3QgcGFyYW1ldGVyIG9mIHRoaXMgZnVuY3Rpb24/IEhvdyB3b3VsZCBpdHMgYmVoYXZpb3IgY2hhbmdlIGJ5IHRoZSB2YWx1ZSBvZiB0aGUgZmxhZz8gQ2FuIHdlIGZvcmNlIGEgcm91dGUgdG8gbm90IGJlIGRlbGV0ZWQsIGlmIHRoZSBzdGF0aWMgZmxhZyBpcyBzZXQgdG8gdHJ1ZT8gVGhpcyB3aWxsIHRlbGwgdXMgaWYgcm91dGVzIHdpdGggc3BlY2lmaWMgc3RhdGljIGF0dHJpYnV0ZXMgYXJlIGhhbmRsZWQgZGlmZmVyZW50bHkgZHVyaW5nIHRoZSBkZWxldGlvbiBwcm9jZXNzLiBNeSBndXQgdGVsbHMgbWUgdGhlcmUncyBhIHN0cm9uZyBjb3JyZWxhdGlvbiBiZXR3ZWVuIGBuZGlzY19yb3V0ZXJfZGlzY292ZXJ5YCdzIHN0YXRpYyBzZXR0aW5nIGFuZCBob3cgdGhlIEZJQiBoYW5kbGVzIHRoZXNlIHJvdXRlcy4gVGltZSB0byBkaWcgaW4gYW5kIHNlZSB0aGUgbG93LWxldmVsIGludGVyYWN0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTU2ODUsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQyMjozNjoyMC41ODQwNjQ4NDlaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExMDI3MjA4NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpcDZfZGVsX3J0X3JlYXNvblwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXB2Ni9yb3V0ZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY2L3JvdXRlLmM9OTcwPWludCBydDZfcm91dGVfcmN2KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHU4ICpvcHQsIGludCBsZW4sXFxuLS1cXG5uZXQvaXB2Ni9yb3V0ZS5jLTEwMjItXFx0aWYgKHJ0IFxcdTAwMjZcXHUwMDI2ICFsaWZldGltZSkge1xcbm5ldC9pcHY2L3JvdXRlLmM6MTAyMzpcXHRcXHRpcDZfZGVsX3J0X3JlYXNvbihuZXQsIHJ0LCBmYWxzZSwgUlRBX0RFTF9SRUFTT05fUkFfV0lUSERSQVdOKTtcXG5uZXQvaXB2Ni9yb3V0ZS5jLTEwMjQtXFx0XFx0cnQgPSBOVUxMO1xcbi0tXFxubmV0L2lwdjYvcm91dGUuYz0zOTc2PXN0YXRpYyBpbnQgX19pcDZfZGVsX3J0KHN0cnVjdCBmaWI2X2luZm8gKnJ0LCBzdHJ1Y3QgbmxfaW5mbyAqaW5mbyxcXG4tLVxcbm5ldC9pcHY2L3JvdXRlLmMtMzk5Ny1cXG5uZXQvaXB2Ni9yb3V0ZS5jOjM5OTg6aW50IGlwNl9kZWxfcnRfcmVhc29uKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZpYjZfaW5mbyAqcnQsIGJvb2wgc2tpcF9ub3RpZnksXFxubmV0L2lwdjYvcm91dGUuYy0zOTk5LVxcdFxcdCAgICAgIHUzMiBkZWxfcmVhc29uKVxcbi0tXFxubmV0L2lwdjYvcm91dGUuYz00MDA5PWludCBpcDZfZGVsX3J0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZpYjZfaW5mbyAqcnQsIGJvb2wgc2tpcF9ub3RpZnkpXFxubmV0L2lwdjYvcm91dGUuYy00MDEwLXtcXG5uZXQvaXB2Ni9yb3V0ZS5jOjQwMTE6XFx0cmV0dXJuIGlwNl9kZWxfcnRfcmVhc29uKG5ldCwgcnQsIHNraXBfbm90aWZ5LCBSVEFfREVMX1JFQVNPTl9VTlNQRUMpO1xcbm5ldC9pcHY2L3JvdXRlLmMtNDAxMi19XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDIyOjM2OjIwLjY5NDM1Njc1M1oiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MTQzNjY0OTU2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgSVB2NiBSb3V0ZSBEZWxldGlvbioqXG5cbk9rYXksIHNvIGBpcDZfZGVsX3J0X3JlYXNvbmAgaXMgYSBnbG9iYWwgdmFyaWFibGUuIFRoYXQgaW1tZWRpYXRlbHkgZmxhZ3MgYSBwb3RlbnRpYWwgY29uY2VybiDigJMgZ2xvYmFsIHN0YXRlIGNhbiBiZSBhIHNvdXJjZSBvZiB0cmlja3kgY29uY3VycmVuY3kgYnVncywgZXNwZWNpYWxseSBpbiBhIG5ldHdvcmtpbmcgY29udGV4dC4gU28sIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBhbmQgd2hlcmUgdGhpcyB2YXJpYWJsZSBpcyBiZWluZyB1c2VkLiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byBrbm93IHdoeSBhbmQgaG93IGEgXCJyZWFzb25cIiBpcyBiZWluZyBzZXQgb24gZGVsZXRpb24gYW5kIHdoYXQgdGhlIGltcGxpY2F0aW9ucyBhcmUuXG5cbk15IG5leHQgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gdHJhY2UgdGhlIGRlbGV0aW9uIHByb2Nlc3MgaXRzZWxmLiBMZXQncyBkaWcgaW50byBgZmliNl9kZWxgLiBUaGF0J3Mgd2hlcmUgdGhlIHJ1YmJlciBtZWV0cyB0aGUgcm9hZCwgc28gdG8gc3BlYWsuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyByb3V0ZSBkZWxldGlvbiBpcyBoYW5kbGVkIGF0IHRoZSBjb3JlIGxldmVsLiBTcGVjaWZpY2FsbHksIEknbSBub3cgdGhpbmtpbmcgYWJvdXQgaG93IHRoZSBnbG9iYWwgdmFyaWFibGUgYGlwNl9kZWxfcnRfcmVhc29uYCBpbnRlcmFjdHMgd2l0aCB0aGUgZnVuY3Rpb24gYGZpYjZfZGVsYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTY0NzksIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQyMjozNjoyNC44MzgwMjUyNVoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU0MDMxMjIyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImZpYjZfZGVsXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pcHY2L2lwNl9maWIuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2Ni9pcDZfZmliLmM9MTg0Mj1zdGF0aWMgc3RydWN0IGZpYjZfbm9kZSAqZmliNl9yZXBhaXJfdHJlZShzdHJ1Y3QgbmV0ICpuZXQsXFxuLS1cXG5uZXQvaXB2Ni9pcDZfZmliLmMtMTk2OS1cXG5uZXQvaXB2Ni9pcDZfZmliLmM6MTk3MDpzdGF0aWMgdm9pZCBmaWI2X2RlbF9yb3V0ZShzdHJ1Y3QgZmliNl90YWJsZSAqdGFibGUsIHN0cnVjdCBmaWI2X25vZGUgKmZuLFxcbm5ldC9pcHY2L2lwNl9maWIuYy0xOTcxLVxcdFxcdFxcdCAgIHN0cnVjdCBmaWI2X2luZm8gX19yY3UgKipydHAsIHN0cnVjdCBubF9pbmZvICppbmZvLFxcbi0tXFxubmV0L2lwdjYvaXA2X2ZpYi5jLTIwNjYtLyogTmVlZCB0byBvd24gdGFibGUtXFx1MDAzZXRiNl9sb2NrICovXFxubmV0L2lwdjYvaXA2X2ZpYi5jOjIwNjc6aW50IGZpYjZfZGVsKHN0cnVjdCBmaWI2X2luZm8gKnJ0LCBzdHJ1Y3QgbmxfaW5mbyAqaW5mbywgdTMyIGRlbF9yZWFzb24pXFxubmV0L2lwdjYvaXA2X2ZpYi5jLTIwNjgte1xcbi0tXFxubmV0L2lwdjYvaXA2X2ZpYi5jLTIwOTUtXFx0XFx0XFx0XFx0ZmliNl9yb3V0ZXNfcmVxdWlyZV9zcmNfZGVjKGluZm8tXFx1MDAzZW5sX25ldCk7XFxubmV0L2lwdjYvaXA2X2ZpYi5jOjIwOTY6XFx0XFx0XFx0ZmliNl9kZWxfcm91dGUodGFibGUsIGZuLCBydHAsIGluZm8sIGRlbF9yZWFzb24pO1xcbm5ldC9pcHY2L2lwNl9maWIuYy0yMDk3LVxcdFxcdFxcdHJldHVybiAwO1xcbi0tXFxubmV0L2lwdjYvaXA2X2ZpYi5jLTIxMDctICpcXHRDZXJ0YWlubHksIGl0IGlzIG5vdCBpbnRlcnJ1cHQgc2FmZS5cXG5uZXQvaXB2Ni9pcDZfZmliLmM6MjEwODogKlxcdEhvd2V2ZXIsIGl0IGlzIGludGVybmFsbHkgcmVlbnRlcmFibGUgd3J0IGl0c2VsZiBhbmQgZmliNl9hZGQvZmliNl9kZWwuXFxubmV0L2lwdjYvaXA2X2ZpYi5jLTIxMDktICpcXHRJdCBtZWFucywgdGhhdCB3ZSBjYW4gbW9kaWZ5IHRyZWUgZHVyaW5nIHdhbGtpbmdcXG4tLVxcbm5ldC9pcHY2L2lwNl9maWIuYz0yMjM0PXN0YXRpYyBpbnQgZmliNl9jbGVhbl9ub2RlKHN0cnVjdCBmaWI2X3dhbGtlciAqdylcXG4tLVxcbm5ldC9pcHY2L2lwNl9maWIuYy0yMjU3LVxcdFxcdFxcdHctXFx1MDAzZWxlYWYgPSBydDtcXG5uZXQvaXB2Ni9pcDZfZmliLmM6MjI1ODpcXHRcXHRcXHRyZXMgPSBmaWI2X2RlbChydCwgXFx1MDAyNmluZm8sIFJUQV9ERUxfUkVBU09OX1VOU1BFQyk7XFxubmV0L2lwdjYvaXA2X2ZpYi5jLTIyNTktXFx0XFx0XFx0aWYgKHJlcykge1xcbi0tXFxubmV0L2lwdjYvaXA2X2ZpYi5jPTIzOTM9c3RhdGljIHZvaWQgZmliNl9nY190YWJsZShzdHJ1Y3QgbmV0ICpuZXQsXFxuLS1cXG5uZXQvaXB2Ni9pcDZfZmliLmMtMjQwNS1cXHRcXHRpZiAoZmliNl9hZ2UocnQsIGdjX2FyZ3MpID09IC0xKVxcbm5ldC9pcHY2L2lwNl9maWIuYzoyNDA2OlxcdFxcdFxcdGZpYjZfZGVsKHJ0LCBcXHUwMDI2aW5mbywgUlRBX0RFTF9SRUFTT05fRVhQSVJFRCk7XFxubmV0L2lwdjYvaXA2X2ZpYi5jLTI0MDctfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQyMjozNjoyNC45OTIwNjE5MTFaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzIzMzA5MzAzNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaXQgc3RhbmRzOlxuXG4qKk5hdmlnYXRpbmcgSVB2NiBSb3V0aW5nIGFuZCBOb3RpZmljYXRpb25zKipcblxuT2theSwgc28gYGZpYjZfZGVsYC4uLiByaWdodCwgdGhhdCdzIGEgZ2xvYmFsIHZhcmlhYmxlLiBOb3csIHdoZXJlIGRvZXMgdGhhdCBhY3R1YWxseSBjb21lIGludG8gcGxheT8gTXkgbWluZCBpbW1lZGlhdGVseSBqdW1wcyB0byB0aGUgbWVjaGFuaXNtcyBmb3IgZGVhbGluZyB3aXRoIHJvdXRlIHVwZGF0ZXMgYW5kIHJlbW92YWxzIHdpdGhpbiB0aGUgSVB2NiBzdGFjay4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBpbnRlcmFjdGlvbnMuIEknbGwgbmVlZCB0byBmaWd1cmUgb3V0IHdoZXJlIHRoYXQncyBhY3R1YWxseSBiZWluZyB1c2VkLiBMZXQgbWUgY2hlY2sgdGhlIGNvZGUgYXNzb2NpYXRlZCB3aXRoIGBpbmV0Nl9ydF9ub3RpZnlgLiBUaGF0IGZlZWxzIGxpa2UgYSBsb2dpY2FsIG5leHQgc3RlcCB0byBsb29rIGludG8gYXMgdGhhdCBzZWVtcyBsaWtlIGEgZ29vZCBwbGFjZSB0byBzdGFydCBteSBpbnZlc3RpZ2F0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzQzNywiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDIyOjM2OjI4LjIyNTE4OTU3N1oiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjM1OTUxMTU3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImluZXQ2X3J0X25vdGlmeVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXB2Ni9yb3V0ZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY2L3JvdXRlLmM9NTM3Mz1zdGF0aWMgdm9pZCBpcDZfcm91dGVfbXBhdGhfbm90aWZ5KHN0cnVjdCBmaWI2X2luZm8gKnJ0LFxcbi0tXFxubmV0L2lwdjYvcm91dGUuYy01MzkzLVxcdGlmIChydClcXG5uZXQvaXB2Ni9yb3V0ZS5jOjUzOTQ6XFx0XFx0aW5ldDZfcnRfbm90aWZ5KFJUTV9ORVdST1VURSwgcnQsIGluZm8sIG5sZmxhZ3MsXFxubmV0L2lwdjYvcm91dGUuYy01Mzk1LVxcdFxcdFxcdFxcdFJUQV9ERUxfUkVBU09OX1VOU1BFQyk7XFxuLS1cXG5uZXQvaXB2Ni9yb3V0ZS5jPTYyMzE9c3RhdGljIGludCBpbmV0Nl9ydG1fZ2V0cm91dGUoc3RydWN0IHNrX2J1ZmYgKmluX3NrYiwgc3RydWN0IG5sbXNnaGRyICpubGgsXFxuLS1cXG5uZXQvaXB2Ni9yb3V0ZS5jLTYzNzktXFxubmV0L2lwdjYvcm91dGUuYzo2MzgwOnZvaWQgaW5ldDZfcnRfbm90aWZ5KGludCBldmVudCwgc3RydWN0IGZpYjZfaW5mbyAqcnQsIHN0cnVjdCBubF9pbmZvICppbmZvLFxcbm5ldC9pcHY2L3JvdXRlLmMtNjM4MS1cXHRcXHQgICAgIHVuc2lnbmVkIGludCBubG1fZmxhZ3MsIHUzMiBkZWxfcmVhc29uKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQyMjozNjoyOC40NjExNDkzMTRaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzkwNDczOTI5MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKipOYXZpZ2F0aW5nIElQdjYgUm91dGluZyBOb3RpZmljYXRpb25zKipcblxuT2theSwgc28gYGluZXQ2X3J0X25vdGlmeWAgaXMgYSBnbG9iYWxseSBhY2Nlc3NpYmxlIGZ1bmN0aW9uLCBtZWFuaW5nIGl0J3MgbGlrZWx5IGEgY2VudHJhbCBwb2ludCBmb3IgaGFuZGxpbmcgSVB2NiByb3V0aW5nIHVwZGF0ZXMuIFRoYXQgaW1tZWRpYXRlbHkgcGlxdWVzIG15IGludGVyZXN0LiBJdCBzdWdnZXN0cyBhIGtleSBpbnRlcmFjdGlvbiBwb2ludCB3aXRoaW4gdGhlIGtlcm5lbCdzIElQdjYgcm91dGluZyBpbmZyYXN0cnVjdHVyZS5cblxuTXkgbmV4dCBzdGVwIGlzIGNsZWFyLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhpcyBnbG9iYWwgZnVuY3Rpb24gaXMgYmVpbmcgdXNlZC4gU3BlY2lmaWNhbGx5LCBJJ20gZ29pbmcgdG8gZGlnIGludG8gYHJ0Nl9yb3V0ZV9yY3ZgLiBJdCdzIGhpZ2hseSBwcm9iYWJsZSB0aGF0IHRoaXMgcm91dGluZSBpcyBhIGNhbGxlciBvciByZWNlaXZlciBvZiB0aGUgaW5mb3JtYXRpb24gZmxvd2luZyB0aHJvdWdoIGBpbmV0Nl9ydF9ub3RpZnlgLiBJIG5lZWQgdG8gY29uZmlybSB3aGV0aGVyIGBydDZfcm91dGVfcmN2YCBpcyBkaXJlY3RseSBpbnZvbHZlZCBvciBpZiB0aGVyZSdzIGFuIGluZGlyZWN0IGNvbm5lY3Rpb24uIEknbGwgYW5hbHl6ZSBob3cgcm91dGluZyBub3RpZmljYXRpb25zIGFyZSBiZWluZyBoYW5kbGVkLCB0byBjb25maXJtIHRoaXMgcmVsYXRpb25zaGlwLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzg5NSwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDIyOjM2OjMyLjM2NTg5MjQ2NFoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTkwMjI2MTE5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInJ0Nl9yb3V0ZV9yY3ZcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjYvcm91dGUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2Ni9yb3V0ZS5jPTk2Mz1zdGF0aWMgYm9vbCBydDZfaXNfZ3dfb3Jfbm9uZXh0aG9wKGNvbnN0IHN0cnVjdCBmaWI2X3Jlc3VsdCAqcmVzKVxcbi0tXFxubmV0L2lwdjYvcm91dGUuYy05NjktI2lmZGVmIENPTkZJR19JUFY2X1JPVVRFX0lORk9cXG5uZXQvaXB2Ni9yb3V0ZS5jOjk3MDppbnQgcnQ2X3JvdXRlX3JjdihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1OCAqb3B0LCBpbnQgbGVuLFxcbm5ldC9pcHY2L3JvdXRlLmMtOTcxLVxcdFxcdCAgY29uc3Qgc3RydWN0IGluNl9hZGRyICpnd2FkZHIpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDIyOjM2OjMyLjU1NjEyMzk3NFoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMDM3OTk2MDc3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byBJUHY2IFJvdXRpbmcqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBgcnQ2X3JvdXRlX3JjdmAsIGFuZCBteSBpbml0aWFsIHRob3VnaHQgaXMsIFwiUmlnaHQsIHRoaXMgaXMgbmVzdGxlZCB1bmRlciBgQ09ORklHX0lQVjZfUk9VVEVfSU5GT2AuXCIgVGhhdCdzIHRoZSBmaXJzdCBrZXkgcG9pbnQgdG8gcmVtZW1iZXIgZm9yIHVuZGVyc3RhbmRpbmcgaXRzIGNvbnRleHQgd2l0aGluIHRoZSBicm9hZGVyIElQdjYgbmV0d29ya2luZyBzdGFjay4gSXQgaW5zdGFudGx5IHBvaW50cyBtZSB0byB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIHRoYXQgZW5hYmxlIHRoaXMgZnVuY3Rpb25hbGl0eS5cblxuTm93LCB0byBnZXQgYSBiZXR0ZXIgZ3Jhc3Agb24gdGhlIG92ZXJhbGwgZmxvdywgbGV0J3MgYWxzbyBjaGVjayBhbmQgdW5kZXJzdGFuZCBgYWRkcmNvbmZfcHJlZml4X3JjdmAgc2luY2UgaXQgcmVsYXRlcyB0byBwcmVmaXggcmVjZXB0aW9uLiBJIGhhdmUgYSBodW5jaCB0aGlzIG1pZ2h0IGJlIHJlbGF0ZWQgdG8gaG93IHJvdXRpbmcgaW5mb3JtYXRpb24gaXMgYWNxdWlyZWQgaW4gdGhpcyBjb250ZXh0LCBzbyB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gdGhlc2UgdHdvIGZ1bmN0aW9ucyBpcyB0aGUga2V5IGFyZWEgZm9yIGV4YW1pbmF0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODI4MSwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDIyOjM2OjM1LjU5NDEyMzAzWiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTcwMTgyODQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYWRkcmNvbmZfcHJlZml4X3JjdlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXB2Ni9hZGRyY29uZi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY2L2FkZHJjb25mLmM9MTM2OT1zdGF0aWMgaW50IGlwdjZfY3JlYXRlX3RlbXBhZGRyKHN0cnVjdCBpbmV0Nl9pZmFkZHIgKmlmcCwgYm9vbCBibG9jaylcXG4tLVxcbm5ldC9pcHY2L2FkZHJjb25mLmMtMTQ4My1cXHRjZmcuaWZhX2ZsYWdzID0gSUZBX0ZfVEVNUE9SQVJZO1xcbm5ldC9pcHY2L2FkZHJjb25mLmM6MTQ4NDpcXHQvKiBzZXQgaW4gYWRkcmNvbmZfcHJlZml4X3JjdigpICovXFxubmV0L2lwdjYvYWRkcmNvbmYuYy0xNDg1LVxcdGlmIChpZnAtXFx1MDAzZWZsYWdzIFxcdTAwMjYgSUZBX0ZfT1BUSU1JU1RJQylcXG4tLVxcbm5ldC9pcHY2L2FkZHJjb25mLmM9MjY4OT1zdGF0aWMgYm9vbCBpc19hZGRyX21vZGVfZ2VuZXJhdGVfc3RhYmxlKHN0cnVjdCBpbmV0Nl9kZXYgKmlkZXYpXFxuLS1cXG5uZXQvaXB2Ni9hZGRyY29uZi5jLTI2OTQtXFxubmV0L2lwdjYvYWRkcmNvbmYuYzoyNjk1OmludCBhZGRyY29uZl9wcmVmaXhfcmN2X2FkZF9hZGRyKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG5uZXQvaXB2Ni9hZGRyY29uZi5jLTI2OTYtXFx0XFx0XFx0XFx0IGNvbnN0IHN0cnVjdCBwcmVmaXhfaW5mbyAqcGluZm8sXFxuLS1cXG5uZXQvaXB2Ni9hZGRyY29uZi5jLTI3OTUtfVxcbm5ldC9pcHY2L2FkZHJjb25mLmM6Mjc5NjpFWFBPUlRfU1lNQk9MX0dQTChhZGRyY29uZl9wcmVmaXhfcmN2X2FkZF9hZGRyKTtcXG5uZXQvaXB2Ni9hZGRyY29uZi5jLTI3OTctXFxubmV0L2lwdjYvYWRkcmNvbmYuYzoyNzk4OnZvaWQgYWRkcmNvbmZfcHJlZml4X3JjdihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1OCAqb3B0LCBpbnQgbGVuLCBib29sIHNsbGFvKVxcbm5ldC9pcHY2L2FkZHJjb25mLmMtMjc5OS17XFxuLS1cXG5uZXQvaXB2Ni9hZGRyY29uZi5jLTI5NDMtb2s6XFxubmV0L2lwdjYvYWRkcmNvbmYuYzoyOTQ0OlxcdFxcdGVyciA9IGFkZHJjb25mX3ByZWZpeF9yY3ZfYWRkX2FkZHIobmV0LCBkZXYsIHBpbmZvLCBpbjZfZGV2LFxcbm5ldC9pcHY2L2FkZHJjb25mLmMtMjk0NS1cXHRcXHRcXHRcXHRcXHRcXHQgICBcXHUwMDI2YWRkciwgYWRkcl90eXBlLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQyMjozNjozNS43MTExNDkzMjRaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzUyNDg0MTkxMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBJUHY2IFJvdXRlIEludmVzdGlnYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gZGl2aW5nIGludG8gdGhpcyBgYWRkcmNvbmZfcHJlZml4X3JjdmAgdGhpbmcuIEl0J3MgZ2xvYmFsLCB3aGljaCBpbW1lZGlhdGVseSBmbGFncyBpdCBhcyBzb21ldGhpbmcgc2lnbmlmaWNhbnQuIFRvIHByb3Blcmx5IHVuZGVyc3RhbmQgaXRzIGJlaGF2aW9yLCBJIG5lZWQgdG8gbG9vayBhdCBpdHMgaW50ZXJhY3Rpb25zIHdpdGggYSBmZXcga2V5IGZ1bmN0aW9uczogYGlwNl9kZWxfcnRfcmVhc29uYCwgYGZpYjZfZGVsYCwgYGluZXQ2X3J0X25vdGlmeWAsIGFuZCBgcnQ2X3JvdXRlX3JjdmAuIFRob3NlIGFyZSB0aGUgcHJpbWUgc3VzcGVjdHMgZm9yIGluZmx1ZW5jaW5nIG9yIGJlaW5nIGluZmx1ZW5jZWQgYnkgYGFkZHJjb25mX3ByZWZpeF9yY3ZgLlxuXG5CZWZvcmUgSSBkaWcgdG9vIGRlZXAsIEkgc2hvdWxkIGNoZWNrIHdoZXRoZXIgYENPTkZJR19JUFY2X1JPVVRFX0lORk9gIGhhcyBhbnkgZGVwZW5kZW5jaWVzLiBVbmRlcnN0YW5kaW5nIGFueSBwb3RlbnRpYWwgYnVpbGQtdGltZSBjb25zdHJhaW50cyBvciBjb25kaXRpb25hbCBiZWhhdmlvcnMgYXNzb2NpYXRlZCB3aXRoIHRoYXQgc2V0dGluZyBjb3VsZCBzYXZlIG1lIGEgbG90IG9mIHRpbWUgZG93biB0aGUgbGluZS4gVGhhdCdzIGEgc29saWQgZmlyc3Qgc3RlcC4gTGV0J3Mgc2VlIHdoYXQgdGhhdCByZXZlYWxzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTAwMSwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjkyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDIyOjM2OjM5LjIzNTk5NDAxNFoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTIwMTExNTkzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBJUFY2X1JPVVRFX0lORk9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjYvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2Ni9LY29uZmlnPTIxPWNvbmZpZyBJUFY2X1JPVVRFUl9QUkVGXFxuLS1cXG5uZXQvaXB2Ni9LY29uZmlnLTMwLVxcbm5ldC9pcHY2L0tjb25maWc6MzE6Y29uZmlnIElQVjZfUk9VVEVfSU5GT1xcbm5ldC9pcHY2L0tjb25maWctMzItXFx0Ym9vbCBcXFwiSVB2NjogUm91dGUgSW5mb3JtYXRpb24gKFJGQyA0MTkxKSBzdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQyMjozNjozOS4zNTYxMTE2MzdaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTM1MTY1MTY0MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2Vzcywgc3VtbWFyaXplZCBhcyBpZiBJIHdlcmUgY29uc2lkZXJpbmcgdGhlIHByb3ZpZGVkIHByb21wdDpcblxuKipBbmFseXppbmcgdGhlIERlcGVuZGVuY3kgTGFuZHNjYXBlIG9mIElQVjZfUk9VVEVfSU5GTyoqXG5cbk9rYXksIHNvIHRoZSBwcm9tcHQgd2FudHMgbWUgdG8gYW5hbHl6ZSB0aGUgZGVwZW5kZW5jaWVzIG9mIGBJUFY2X1JPVVRFX0lORk9gLiBNeSBpbml0aWFsIGluc3RpbmN0LCBnaXZlbiBteSBleHBlcmllbmNlLCBpcyB0byBpbW1lZGlhdGVseSBzdGFydCB0aGlua2luZyBhYm91dCBob3cgdGhpcyByZWxhdGVzIHRvIG15IHNwZWNpZmljIGV4cGVydGlzZS4gSSdtIGFzc3VtaW5nIHRoaXMgaXMgYSBkYXRhIHN0cnVjdHVyZSBvciBhIGNvbmNlcHQgd2l0aGluIHRoZSBjb250ZXh0IG9mIElQdjYgcm91dGluZywgbGlrZWx5IHJlbGF0ZWQgdG8gaG93IHJvdXRpbmcgaW5mb3JtYXRpb24gaXMgc3RvcmVkIG9yIHJlcHJlc2VudGVkLlxuXG5UaGUgd29yZCBcImRlcGVuZGVuY2llc1wiIGlzIGNydWNpYWwuIEl0IHN1Z2dlc3RzIEkgbmVlZCB0byBpZGVudGlmeSBldmVyeXRoaW5nIHRoYXQgKnJlbGllcyogb24gYElQVjZfUk9VVEVfSU5GT2AsIGFuZCBwb3RlbnRpYWxseSB3aGF0IGBJUFY2X1JPVVRFX0lORk9gIGl0c2VsZiBkZXBlbmRzIHVwb24uIElzIHRoaXMgYWJvdXQgc29mdHdhcmUgbW9kdWxlcywgbGlicmFyaWVzLCBvciBuZXR3b3JrIGNvbmZpZ3VyYXRpb24gZWxlbWVudHM/IEFyZSB0aGVyZSBhc3NvY2lhdGVkIGNvbmZpZ3VyYXRpb24gZmlsZXMgb3Igc3lzdGVtIGNhbGxzPyBBcmUgd2UgdGFsa2luZyBhYm91dCBhIGRhdGEgc3RydWN0dXJlLCBhIGZ1bmN0aW9uLCBhIG1vZHVsZSwgb3Igc29tZXRoaW5nIGVsc2UgZW50aXJlbHk/XG5cbk15IGJyYWluJ3MgYWxyZWFkeSBtYXBwaW5nIG91dCBwb3RlbnRpYWwgYXJlYXMgdG8gaW52ZXN0aWdhdGU6XG5cbiogICAqKkNvZGU6KiogSWYgaXQncyBjb2RlLCBJJ2xsIG5lZWQgdG8gbG9vayBmb3IgYCNpbmNsdWRlYCBzdGF0ZW1lbnRzLCBmdW5jdGlvbiBjYWxscywgYW5kIGFueSBvdGhlciBpbmRpY2F0b3JzIG9mIGRpcmVjdCB1c2FnZS4gV2hhdCBvdGhlciBmdW5jdGlvbnMgb3IgZGF0YSBzdHJ1Y3R1cmVzIHJlZmVyZW5jZSBgSVBWNl9ST1VURV9JTkZPYD8gQXJlIHRoZXJlIHZlcnNpb24gZGVwZW5kZW5jaWVzPyBBcmUgdGhlcmUgZGlmZmVyZW50IGltcGxlbWVudGF0aW9ucyBhY3Jvc3MgZGlmZmVyZW50IG9wZXJhdGluZyBzeXN0ZW1zP1xuKiAgICoqRG9jdW1lbnRhdGlvbjoqKiBJJ2xsIGNoZWNrIHJlbGV2YW50IFJGQ3MgKFJlcXVlc3QgZm9yIENvbW1lbnRzKSwgbWFuIHBhZ2VzLCBhbmQga2VybmVsIGhlYWRlcnMgcmVsYXRlZCB0byBJUHY2IHJvdXRpbmcuIFRoZXNlIHJlc291cmNlcyBhcmUgbGlrZWx5IHRvIGRlZmluZSB0aGUgc3RydWN0dXJlIGFuZCBpdHMgcmVsYXRpb25zaGlwcy5cbiogICAqKlN5c3RlbSBDYWxscy9BUElzOioqIFdoYXQgc3lzdGVtIGNhbGxzIG9yIEFQSXMgbWlnaHQgaW50ZXJhY3Qgd2l0aCB0aGlzIGluZm9ybWF0aW9uPyBEb2VzIGl0IGludm9sdmUga2VybmVsIG1vZHVsZXMsIHJvdXRpbmcgZGFlbW9ucyAobGlrZSBgYmlyZGAgb3IgYGZycmApLCBvciBuZXR3b3JrIG1hbmFnZW1lbnQgdG9vbHM/IEFyZSB0aGVyZSBzcGVjaWZpYyB0b29scyB0aGF0IG1hbmlwdWxhdGUgb3IgZGlzcGxheSBkYXRhIGJhc2VkIG9uIGBJUFY2X1JPVVRFX0lORk9gP1xuKiAgICoqRGF0YSBTdHJ1Y3R1cmVzOioqIElmIHRoaXMgaXMgYSBkYXRhIHN0cnVjdHVyZSwgYXJlIHRoZXJlIG90aGVyIGRhdGEgc3RydWN0dXJlcyAoZS5nLiwgbGlua2VkIGxpc3RzLCB0YWJsZXMpIHRoYXQgY29udGFpbiBvciBhcmUgY29udGFpbmVkIHdpdGhpbiBpdD8gV2hhdCBmaWVsZHMgYXJlIGluY2x1ZGVkLCBhbmQgd2hhdCBkbyB0aG9zZSBmaWVsZHMgcmVwcmVzZW50P1xuKiAgICoqQ29uY2VwdHVhbCBEZXBlbmRlbmNpZXM6KiogQmV5b25kIHRoZSBsaXRlcmFsIGNvZGUvc3RydWN0dXJlIGRlcGVuZGVuY2llcywgd2hhdCAqbG9naWNhbCogZGVwZW5kZW5jaWVzIGV4aXN0PyBGb3IgZXhhbXBsZSwgdGhlIHByb3BlciBvcGVyYXRpb24gb2YgYElQVjZfUk9VVEVfSU5GT2AgbWlnaHQgZGVwZW5kIG9uIGNvcnJlY3QgSVB2NiBhZGRyZXNzIGNvbmZpZ3VyYXRpb24sIG9yIGEgZnVuY3Rpb25pbmcgcm91dGluZyBwcm90b2NvbC5cblxuSW4gc2hvcnQsIEknbGwgYXBwcm9hY2ggdGhpcyBieSBjb25zaWRlcmluZyB0aGUgZGlyZWN0LCBpbmRpcmVjdCwgYW5kIGNvbmNlcHR1YWwgZGVwZW5kZW5jaWVzLCBhbHdheXMgdHJ5aW5nIHRvIHVuZGVyc3RhbmQgdGhlICd3aHknIGJlaGluZCB0aGUgJ3doYXQnLiBUaGlzIGlzIGEgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZCBhbmFseXNpcyBpbiBteSBmaWVsZCwgYnV0IHRoZSBzcGVjaWZpYyBhcHByb2FjaCB3aWxsIGRlcGVuZCBlbnRpcmVseSBvbiB3aGF0IGNvbnRleHQgYW5kIHR5cGUgb2Ygb2JqZWN0IFwiSVBWNl9ST1VURV9JTkZPXCIgaXMgcmVwcmVzZW50aW5nLiBOb3csIGxldCdzIGRpdmUgaW50byBzb21lIHNwZWNpZmljcy4uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTQwNywiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDIyOjM2OjQ0LjcwNzc2NTk4OFoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5NjMwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvaXB2Ni9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDMxLFxuICBcIkxpbmVDb3VudFwiOiAxMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDMxOlxcdGNvbmZpZyBJUFY2X1JPVVRFX0lORk9cXG4gIDMyOlxcdFxcdGJvb2wgXFxcIklQdjY6IFJvdXRlIEluZm9ybWF0aW9uIChSRkMgNDE5MSkgc3VwcG9ydFxcXCJcXG4gIDMzOlxcdFxcdGRlcGVuZHMgb24gSVBWNl9ST1VURVJfUFJFRlxcbiAgMzQ6XFx0XFx0aGVscFxcbiAgMzU6XFx0XFx0ICBTdXBwb3J0IG9mIFJvdXRlIEluZm9ybWF0aW9uLlxcbiAgMzY6XFx0XFxuICAzNzpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IE4uXFxuICAzODpcXHRcXG4gIDM5OlxcdGNvbmZpZyBJUFY2X09QVElNSVNUSUNfREFEXFxuICA0MDpcXHRcXHRib29sIFxcXCJJUHY2OiBFbmFibGUgUkZDIDQ0MjkgT3B0aW1pc3RpYyBEQURcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDIyOjM2OjQ0LjcwNzg2NDk5OVoiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyODUyNDYwMzU3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGFzIHlvdSByZXF1ZXN0ZWQ6XG5cbioqTmF2aWdhdGluZyB0aGUgSVB2NiBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gdGhlIGJlaGF2aW9yIGhlcmUgaXMgZGVmaW5pdGVseSBpbmZsdWVuY2VkIGJ5IGBJUFY2X1JPVVRFUl9QUkVGYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBzeXN0ZW0gaXMgcmVhY3RpbmcgdG8gdGhlIFJvdXRlciBQcmVmZXJlbmNlIHNldHRpbmcuIFRoZSBjb25maWd1cmF0aW9uIGlzIGNsZWFybHkgZGVwZW5kZW50IG9uIGl0LCBzbyBsZXQncyBzdGFydCBieSBpc29sYXRpbmcgaXRzIHZhbHVlLiBJIG5lZWQgdG8gemVybyBpbiBvbiB0aGUgZXhhY3Qgc3RhdGUgb2YgYElQVjZfUk9VVEVSX1BSRUZgIHRvIHRyYWNlIHRoZSBleGVjdXRpb24gcGF0aCBhbmQgZGV0ZXJtaW5lIHRoZSBjdXJyZW50IG91dGNvbWUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwMTYyLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQyMjozNjo0Ny41NjAzMzgxOTVaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTExNzkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9pcHY2L0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMjEsXG4gIFwiTGluZUNvdW50XCI6IDEwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgMjE6XFx0Y29uZmlnIElQVjZfUk9VVEVSX1BSRUZcXG4gIDIyOlxcdFxcdGJvb2wgXFxcIklQdjY6IFJvdXRlciBQcmVmZXJlbmNlIChSRkMgNDE5MSkgc3VwcG9ydFxcXCJcXG4gIDIzOlxcdFxcdGhlbHBcXG4gIDI0OlxcdFxcdCAgUm91dGVyIFByZWZlcmVuY2UgaXMgYW4gb3B0aW9uYWwgZXh0ZW5zaW9uIHRvIHRoZSBSb3V0ZXJcXG4gIDI1OlxcdFxcdCAgQWR2ZXJ0aXNlbWVudCBtZXNzYWdlIHdoaWNoIGltcHJvdmVzIHRoZSBhYmlsaXR5IG9mIGhvc3RzXFxuICAyNjpcXHRcXHQgIHRvIHBpY2sgYW4gYXBwcm9wcmlhdGUgcm91dGVyLCBlc3BlY2lhbGx5IHdoZW4gdGhlIGhvc3RzXFxuICAyNzpcXHRcXHQgIGFyZSBwbGFjZWQgaW4gYSBtdWx0aS1ob21lZCBuZXR3b3JrLlxcbiAgMjg6XFx0XFxuICAyOTpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IE4uXFxuICAzMDpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMjI6MzY6NDcuNTYwNDUyNDg1WiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ2MDc2MTg1MzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB1bmRlcnN0YW5kaW5nLCBjb25zaWRlcmluZyBJIG5lZWQgdG8gZ2V0IHRoaXMgcmlnaHQ6XG5cbioqQ29uZmlndXJhdGlvbiBEZXBlbmRlbmNpZXMgZm9yIElQdjYgUm91dGluZyoqXG5cbkFscmlnaHQsIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRnJvbSB3aGF0IEknbSBzZWVpbmcsIHRvIG1ha2UgdGhpcyB3b3JrIGNvcnJlY3RseSwgSSBkZWZpbml0ZWx5IG5lZWQgdG8gZW5hYmxlIGBJUFY2X1JPVVRFUl9QUkVGYCBhbmQgYElQVjZfUk9VVEVfSU5GT2AuIFRob3NlIGFyZSBjcnVjaWFsLiBBbmQsIG9idmlvdXNseSwgYElQVjZgIG5lZWRzIHRvIGJlIGVuYWJsZWQgYXMgd2VsbDsgdGhhdCdzIHRoZSBmb3VuZGF0aW9uIGhlcmUuXG5cbk5vdywgSSBzaG91bGQgZG8gYSBxdWljayBzd2VlcCB0byBzZWUgaWYgdGhlcmUgYXJlIGFueSBvdGhlciByZWxhdGVkIGNvbmZpZ3VyYXRpb25zIHRoYXQgYXJlIGFsc28gaW52b2x2ZWQuIExvb2tpbmcgYXQgdGhlIHBhdGNoJ3MgZmlsZSBtb2RpZmljYXRpb25zIOKAkyBgbmV0L2lwdjYvcm91dGUuY2AsIGBuZXQvaXB2Ni9pcDZfZmliLmNgLCBgbmV0L2lwdjYvYWRkcmNvbmYuY2AsIGFuZCBgbmV0L2lwdjYvbmRpc2MuY2Ag4oCTIHRoYXQgY29uZmlybXMgdGhlc2UgYXJlIGFsbCBwYXJ0IG9mIHRoZSBgQ09ORklHX0lQVjZgIGZhbWlseS5cblxuVGhlcmVmb3JlLCB0aGUgY29yZSBjb25maWd1cmF0aW9ucyBJIG5lZWQgdG8gZm9jdXMgb24gZm9yIHRoaXMgaW50ZWdyYXRpb24gYXJlIGBJUFY2YCwgYElQVjZfUk9VVEVSX1BSRUZgLCBhbmQgYElQVjZfUk9VVEVfSU5GT2AuXG5cbkZpbmFsbHksIEknbGwgbmVlZCB0byBjaGVjayB0aGUgYmVoYXZpb3Igb2YgYGlwNl9kZWxfcnRfcmVhc29uYC4gVGhpcyBpcyB0aGUgY29yZSBvZiB0aGlzIHBhdGNoLCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGF0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDQ3OSwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0OSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDIyOjM2OjUyLjE2ODA3NDM2NloiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjIyOTczMTg4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlwNl9kZWxfcnRfcmVhc29uXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImluY2x1ZGUvbmV0L2lwNl9yb3V0ZS5oXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbmV0L2lwNl9yb3V0ZS5oPTEzMD1pbnQgaXA2X2RlbF9ydChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBmaWI2X2luZm8gKmY2aSwgYm9vbCBza2lwX25vdGlmeSk7XFxuaW5jbHVkZS9uZXQvaXA2X3JvdXRlLmg6MTMxOmludCBpcDZfZGVsX3J0X3JlYXNvbihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBmaWI2X2luZm8gKmY2aSwgYm9vbCBza2lwX25vdGlmeSxcXG5pbmNsdWRlL25ldC9pcDZfcm91dGUuaC0xMzItXFx0XFx0ICAgICAgdTMyIGRlbF9yZWFzb24pO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQyMjozNjo1Mi4zOTEwNTQzMjVaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjY3MjM4Njk2NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHN1bW1hcml6ZWQgdGhvdWdodCBwcm9jZXNzLCBwcmVzZW50ZWQgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIGl0OlxuXG4qKkV4YW1pbmluZyBJUHY2IFJvdXRpbmcgVGFibGUgRGVsZXRpb24qKlxuXG5SaWdodCwgc28gSSBzZWUgdGhpcyByZWxhdGVkIHRvIGBpcDZfcm91dGUuaGAuIEl0J3MgZGVjbGFyZWQgdGhlcmUsIHdoaWNoIGlzIGhlbHBmdWwgdG8ga25vdyBpbW1lZGlhdGVseS5cblxuTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZGVsZXRpb24gcHJvY2Vzcy4gTXkgbmV4dCBzdGVwIHdpbGwgYmUgdG8gZGl2ZSBpbnRvIHRoZSBgZmliNl9kZWxgIGZ1bmN0aW9uLCBhbmQgc2VlIGhvdyBpdCBpcyBpbXBsZW1lbnRlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjEwNjIsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQyMjozNjo1NS4wNjM0NDQ4MloiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTMyNjA2NjAzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImZpYjZfZGVsXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImluY2x1ZGUvbmV0L2lwNl9maWIuaFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL25ldC9pcDZfZmliLmg9NDY5PWludCBmaWI2X2FkZChzdHJ1Y3QgZmliNl9ub2RlICpyb290LCBzdHJ1Y3QgZmliNl9pbmZvICpydCxcXG5pbmNsdWRlL25ldC9pcDZfZmliLmgtNDcwLVxcdCAgICAgc3RydWN0IG5sX2luZm8gKmluZm8sIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjayk7XFxuaW5jbHVkZS9uZXQvaXA2X2ZpYi5oOjQ3MTppbnQgZmliNl9kZWwoc3RydWN0IGZpYjZfaW5mbyAqcnQsIHN0cnVjdCBubF9pbmZvICppbmZvLCB1MzIgZGVsX3JlYXNvbik7XFxuaW5jbHVkZS9uZXQvaXA2X2ZpYi5oLTQ3Mi1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMjI6MzY6NTUuMTk2MDU2NjAzWiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2MzIxNjE3NDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRob3NlIHRob3VnaHRzIGZyb20gYW4gZXhwZXJ0J3MgcGVyc3BlY3RpdmUsIHVzaW5nIHRoZSBmaXJzdCBwZXJzb24gYW5kIGFpbWluZyBmb3IgYSBmdWxzb21lIGV4cGxhbmF0aW9uOlxuXG4qKldvcmtpbmcgVGhyb3VnaCBJUHY2IEZJQiBOb3RpZmljYXRpb24gSW1wbGVtZW50YXRpb24qKlxuXG5BbHJpZ2h0LCBzbyB0aGUgbm90aWZpY2F0aW9uIG1lY2hhbmlzbSBmb3IgSVB2NiBGSUIgY2hhbmdlcy4uLiByaWdodCwgdGhhdCdzIGRlZmluZWQsIG9yIGF0IGxlYXN0IGRlY2xhcmVkLCBpbiBgaW5jbHVkZS9uZXQvaXA2X2ZpYi5oYC4gVGhhdCdzIHRoZSBleHBlY3RlZCBsb2NhdGlvbi4gR29vZCB0byBrbm93IGl0J3Mgd2hlcmUgaXQgc2hvdWxkIGJlLiBUaGUgaGVhZGVyIHNob3VsZCBnaXZlIG1lIHRoZSBjb3JlIGRhdGEgc3RydWN0dXJlcyBhbmQgZnVuY3Rpb24gcHJvdG90eXBlcyBpbnZvbHZlZC5cblxuTm93LCB3aGVyZSBkbyBJIG5lZWQgdG8gZ28gdG8gdW5kZXJzdGFuZCBob3cgdGhlc2Ugbm90aWZpY2F0aW9ucyBhcmUgYWN0dWFsbHkgKmhhbmRsZWQqPyBMZXQgbWUgc2VlLi4uIEkgbmVlZCB0byByZWZyZXNoIG15c2VsZiBvbiBob3cgdGhlIElQdjYgcm91dGluZyB0YWJsZSBpcyBtYW5hZ2VkLCBzbyBJJ2xsIHdhbnQgdG8gZGlnIGludG8gYGluZXQ2X3J0X25vdGlmeWAuIFRoYXQncyB1c3VhbGx5IHRoZSBlbnRyeSBwb2ludCBmb3IgdGhvc2Uga2luZHMgb2YgZXZlbnRzLiBJdCdzIGFsbW9zdCBjZXJ0YWlubHkgdGhlIGZ1bmN0aW9uIHRoYXQgZ2V0cyBjYWxsZWQgd2hlbiBzb21ldGhpbmcgaW4gdGhlIHJvdXRpbmcgdGFibGUgY2hhbmdlcyDigJMgYSByb3V0ZSBpcyBhZGRlZCwgZGVsZXRlZCwgdXBkYXRlZC4gSXQgbWFrZXMgc2Vuc2UgdGhhdCdzIHRoZSBmdW5jdGlvbiBJIHdvdWxkIHdhbnQgdG8gY2hlY2suIEhvcGVmdWxseSBpdCBpcyB1c2luZyBzb21lIGhlbHBlcnMgdG8ga2VlcCB0aGluZ3MgZWZmaWNpZW50LiBJJ20gZ3Vlc3NpbmcgdGhhdCB0aGlzIHdpbGwgYmUgY2FsbGluZyBvdGhlciBmdW5jdGlvbnMgdG8gbWFuYWdlIHRoZSB2YXJpb3VzIGNhY2hlcyBhbmQgbGlzdGVuZXJzLiBIb3BlZnVsbHksIGFsbCB0aGUgcmlnaHQgbG9ja2luZyBpcyBkb25lIGluIHRoaXMgc2VjdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MjEzNjUsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQyMjozNjo1OC44MjgyMjA4MDdaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYxNzE3MTk1NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpbmV0Nl9ydF9ub3RpZnlcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW5jbHVkZS9uZXQvaXA2X2ZpYi5oXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbmV0L2lwNl9maWIuaD01Mjg9c3RhdGljIGlubGluZSB2b2lkIGZpYjZfcnRfdXBkYXRlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZpYjZfaW5mbyAqcnQsXFxuLS1cXG5pbmNsdWRlL25ldC9pcDZfZmliLmgtNTMyLSNlbmRpZlxcbmluY2x1ZGUvbmV0L2lwNl9maWIuaDo1MzM6dm9pZCBpbmV0Nl9ydF9ub3RpZnkoaW50IGV2ZW50LCBzdHJ1Y3QgZmliNl9pbmZvICpydCwgc3RydWN0IG5sX2luZm8gKmluZm8sXFxuaW5jbHVkZS9uZXQvaXA2X2ZpYi5oLTUzNC1cXHRcXHQgICAgIHVuc2lnbmVkIGludCBmbGFncywgdTMyIGRlbF9yZWFzb24pO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQyMjozNjo1OS40NDUzOTg4NjRaIiwiU2VxIjozMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjkwMDYxNzc3NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIElQdjYgRklCIFJvdXRlIFJldHJpZXZhbCoqXG5cbkFscmlnaHQsIHNvIHRoZSBjb3JlIHN0cnVjdHVyZSBmb3IgdGhlIElQdjYgRm9yd2FyZGluZyBJbmZvcm1hdGlvbiBCYXNlIChGSUIpIOKAkyB0aGF0J3MgYGlwNl9maWIuaGAsIG5hdHVyYWxseS4gVGhhdCdzIHdoZXJlIHRoZSBkZWZpbml0aW9uIGlzLiBJdCdzIHRoZSBzdGFydGluZyBwb2ludC4gTXkgYXR0ZW50aW9uIGlzIGltbWVkaWF0ZWx5IGRyYXduIHRvIHRoZSByb3V0ZSByZXRyaWV2YWwgcGF0aCwgc28gbGV0J3MgZGlnIGludG8gYHJ0Nl9yb3V0ZV9yY3ZgLiBUaGF0J3Mgd2hlcmUgdGhlIGNyaXRpY2FsIHByb2Nlc3NpbmcgaGFwcGVucy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgZXhhY3RseSBob3cgdGhlIHN5c3RlbSBsb29rcyB1cCB0aGUgcm91dGUuIEknbGwgbmVlZCB0byBmb2N1cyBvbiB3aGF0IGhhcHBlbnMgd2l0aGluIHRoYXQgZnVuY3Rpb24sIGluIG9yZGVyIHRvIHRyYWNrIGhvdyBpdCBtYWtlcyBpdHMgZGVjaXNpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTgzNCwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDIyOjM3OjAyLjM0NjAxOTAxN1oiLCJTZXEiOjMyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTkzODU1NTA5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInJ0Nl9yb3V0ZV9yY3ZcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW5jbHVkZS9uZXQvaXA2X3JvdXRlLmhcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9uZXQvaXA2X3JvdXRlLmg9MjAxPXZvaWQgcnQ2X3B1cmdlX2RmbHRfcm91dGVycyhzdHJ1Y3QgbmV0ICpuZXQpO1xcbmluY2x1ZGUvbmV0L2lwNl9yb3V0ZS5oLTIwMi1cXG5pbmNsdWRlL25ldC9pcDZfcm91dGUuaDoyMDM6aW50IHJ0Nl9yb3V0ZV9yY3Yoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTggKm9wdCwgaW50IGxlbixcXG5pbmNsdWRlL25ldC9pcDZfcm91dGUuaC0yMDQtXFx0XFx0ICBjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKmd3YWRkcik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDIyOjM3OjAyLjUzOTg3OTM3N1oiLCJTZXEiOjMzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNzU2NDk4MDU4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aG9zZSB0aG91Z2h0cyBmcm9tIGFuIGV4cGVydCdzIHBlcnNwZWN0aXZlLCB1c2luZyB0aGUgZmlyc3QgcGVyc29uIGFuZCBhaW1pbmcgZm9yIGEgZnVsc29tZSBleHBsYW5hdGlvbjpcblxuKipXb3JraW5nIHdpdGggSVB2NiBSb3V0aW5nIGluIHRoZSBMaW51eCBLZXJuZWwqKlxuXG5SaWdodCwgc28gSSdtIGRpZ2dpbmcgaW50byBJUHY2IHJvdXRpbmcgd2l0aGluIHRoZSBrZXJuZWwsIGFuZCB0aGUgZmlyc3QgdGhpbmcgdGhhdCBqdW1wcyBvdXQgaXMgdGhhdCB0aGUgY3J1Y2lhbCBkZWNsYXJhdGlvbiBmb3IgdGhpcyBzdHVmZiwgdGhlIGRhdGEgc3RydWN0dXJlcyBhbmQgcmVsYXRlZCBkZWZpbml0aW9ucywgaXMgbG9jYXRlZCByaWdodCBpbiBgaW5jbHVkZS9uZXQvaXA2X3JvdXRlLmhgLiBUaGF0J3MgdGhlIGxvZ2ljYWwgcGxhY2UgdG8gc3RhcnQg4oCTIGdvb2QsIGdvb2QuIEnigJlsbCBtYWtlIGEgbWVudGFsIG5vdGUgb2YgdGhhdCBmaWxlIGFuZCBpdHMgY29udGVudHMgZm9yIGxhdGVyIHJlZmVyZW5jZTsgaXQncyBwcmFjdGljYWxseSB0aGUgSVB2NiByb3V0aW5nIGJpYmxlLlxuXG5Ob3csIHdoZXJlIGRvIEkgd2FudCB0byBzdGFydCBteSBpbnZlc3RpZ2F0aW9uPyBBaCwgeWVzLCBJJ20gdHJ5aW5nIHRvIGdyb2sgaG93IGl0J3MgZGVhbGluZyB3aXRoLi4uIG9oLCB3YWl0IGEgbWludXRlLCBJIHRoaW5rIGBhZGRyY29uZl9wcmVmaXhfcmN2YCBpcyB0aGUgdGhpbmcgdGhhdCdzIHJlbGV2YW50IHRvIHdoYXQgSSBhbSBsb29raW5nIGF0LiBJJ2xsIG5lZWQgdG8gY2hlY2sgaG93IHRoZSBJUHY2IGFkZHJlc3MgY29uZmlndXJhdGlvbiBpbnRlcmFjdHMgd2l0aCB0aGUgcm91dGluZyBwcm9jZXNzLCBzbyBgYWRkcmNvbmZfcHJlZml4X3JjdmAgaXMgZGVmaW5pdGVseSBhIGdvb2QgY2FuZGlkYXRlIHRvIHNlZSB3aGVyZSB0aGUgaW5jb21pbmcgcHJlZml4ZXMgYXJlIGhhbmRsZWQuIEkgdGhpbmsgdGhpcyB3aWxsIGJlIGFuIGV4Y2VsbGVudCBzdGFydGluZyBwb2ludCwgdGhpcyBjb3VsZCBsZWFkIHRvIHRoZSBkYXRhIEkgYW0gbG9va2luZyBmb3IuIEknbGwgZGVsdmUgaW50byB0aGUgY29kZSB0aGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjIxNzcsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQyMjozNzowNi4yOTYzODEyMjVaIiwiU2VxIjozNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2MTgyNTYzMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJhZGRyY29uZl9wcmVmaXhfcmN2XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImluY2x1ZGUvbmV0L2FkZHJjb25mLmhcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9uZXQvYWRkcmNvbmYuaD0xNTM9dm9pZCBhZGRyY29uZl9hZGRfbGlua2xvY2FsKHN0cnVjdCBpbmV0Nl9kZXYgKmlkZXYsXFxuLS1cXG5pbmNsdWRlL25ldC9hZGRyY29uZi5oLTE1NS1cXG5pbmNsdWRlL25ldC9hZGRyY29uZi5oOjE1NjppbnQgYWRkcmNvbmZfcHJlZml4X3Jjdl9hZGRfYWRkcihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuaW5jbHVkZS9uZXQvYWRkcmNvbmYuaC0xNTctXFx0XFx0XFx0XFx0IGNvbnN0IHN0cnVjdCBwcmVmaXhfaW5mbyAqcGluZm8sXFxuLS1cXG5pbmNsdWRlL25ldC9hZGRyY29uZi5oPTI4Mj1zdGF0aWMgaW5saW5lIGJvb2wgaXB2Nl9pc19tbGQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IG5leHRoZHIsIGludCBvZmZzZXQpXFxuLS1cXG5pbmNsdWRlL25ldC9hZGRyY29uZi5oLTMwMy1cXG5pbmNsdWRlL25ldC9hZGRyY29uZi5oOjMwNDp2b2lkIGFkZHJjb25mX3ByZWZpeF9yY3Yoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG5pbmNsdWRlL25ldC9hZGRyY29uZi5oLTMwNS1cXHRcXHRcXHQgdTggKm9wdCwgaW50IGxlbiwgYm9vbCBzbGxhbyk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDIyOjM3OjA2LjQ1ODIxODE1NloiLCJTZXEiOjM1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2NzY5MjQxNzc1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgSVB2NiBSb3V0ZSBEZWxldGlvbiBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIG15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IGl0IHRvdWNoZXMgc29tZSBpbXBvcnRhbnQgcGFydHMgb2YgdGhlIElQdjYgcm91dGluZyBzdGFjay4gSXQncyBkZWNsYXJlZCBpbiBgaW5jbHVkZS9uZXQvYWRkcmNvbmYuaGAsIHNvIHdlJ3JlIHRhbGtpbmcgYWJvdXQgY29yZSBmdW5jdGlvbmFsaXR5LiBJIGltbWVkaWF0ZWx5IHplcm8gaW4gb24gdGhlIGtleSBzeW1ib2xzIGludm9sdmVkOiBgaXA2X2RlbF9ydF9yZWFzb25gLCBgZmliNl9kZWxgLCBgaW5ldDZfcnRfbm90aWZ5YCwgYHJ0Nl9yb3V0ZV9yY3ZgLCBhbmQgYGFkZHJjb25mX3ByZWZpeF9yY3ZgLiBUaG9zZSBsb29rIGxpa2UgdGhlIG1haW4gcGxheWVycyBoZXJlLCBhbG9uZyB3aXRoIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9uIG9wdGlvbnM6IGBJUFY2YCwgYElQVjZfUk9VVEVSX1BSRUZgLCBhbmQgYElQVjZfUk9VVEVfSU5GT2AuXG5cblRoZSBnaXN0IG9mIGl0IGlzIHRoZSBpbnRyb2R1Y3Rpb24gb2YgYSBuZXcgbmV0bGluayBhdHRyaWJ1dGUsIGBSVEFfREVMX1JFQVNPTmAsIGFuZCB0aGUgbW9kaWZpY2F0aW9uIG9mIGhvdyBJUHY2IHJvdXRlcyBhcmUgZGVsZXRlZCwgc3BlY2lmaWNhbGx5IGFkZGluZyBhIHJlYXNvbiBjb2RlIHdoZW4gYSByb3V0ZSBleHBpcmVzIG9yIGlzIHdpdGhkcmF3biB2aWEgYSBSb3V0ZXIgQWR2ZXJ0aXNlbWVudCAoUkEpLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UuIEl0J3Mgbm90IGp1c3QgYSByZWZhY3Rvcjsgd2UncmUgZnVuZGFtZW50YWxseSBhbHRlcmluZyB0aGUgaW5mb3JtYXRpb24gcHJvdmlkZWQgd2hlbiBhIHJvdXRlIGlzIHJlbW92ZWQuXG5cbk15IGluaXRpYWwgcmVhc29uaW5nIGlzIHRoYXQsIHNpbmNlIHRoaXMgdG91Y2hlcyBjb3JlIHJvdXRpbmcgbG9naWMgYW5kIG5laWdoYm9yIGRpc2NvdmVyeSBmdW5jdGlvbnMsIGl0J3MgYSBnb29kIGNhbmRpZGF0ZSBmb3IgZnV6emluZy4gVGhlIHBhdGNoIG1vZGlmaWVzIGNyaXRpY2FsIGZ1bmN0aW9ucyBsaWtlIGBpcDZfZGVsX3J0X3JlYXNvbmAsIGBmaWI2X2RlbGAsIGBpbmV0Nl9ydF9ub3RpZnlgLCBgcnQ2X3JvdXRlX3JjdmAsIGFuZCBgYWRkcmNvbmZfcHJlZml4X3JjdmAgdG8gcG9wdWxhdGUgdGhhdCBuZXcgYXR0cmlidXRlLCBgUlRBX0RFTF9SRUFTT05gLiBFeHBpcmF0aW9uIGFuZCBSQSB3aXRoZHJhd2FsIGFyZSBjb21tb24gY29uZGl0aW9ucy4gV2UgbmVlZCB0byBiZSBhYmxlIHRvIGtub3cgd2h5IGEgcm91dGUgZGlzYXBwZWFyZWQuXG5cbkxldCBtZSBkb3VibGUtY2hlY2sgd2hpY2ggb2YgdGhlc2UgZnVuY3Rpb25zIGlzIHRoZSBtb3N0IGludGVyZXN0aW5nIHRvIGZvY3VzIG9uLiBSaWdodCwgYGlwNl9kZWxfcnRfcmVhc29uYCBsb29rcyBwcm9taXNpbmcuIEl0J3MgYSB3cmFwcGVyIGFyb3VuZCBgX19pcDZfZGVsX3J0YCwgYnV0IHRoZSB3cmFwcGVyIGl0c2VsZiBpcyBleHBvcnRlZCwgd2hpY2ggaXMgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBgX19pcDZfZGVsX3J0YCBpcyBzdGF0aWMgaW50ZXJuYWxseSwgYnV0IHRoZSB3cmFwcGVyIGlzIGdsb2JhbC4gQWxzbywgYGZpYjZfZGVsYCwgYGluZXQ2X3J0X25vdGlmeWAsIGBydDZfcm91dGVfcmN2YCwgYW5kIGBhZGRyY29uZl9wcmVmaXhfcmN2YCBhcmUgYWxsIGV4cG9ydGVkLCBzbyB0aG9zZSBhcmUgZ29vZCBsZWFkcy5cblxuSG9sZCBvbiwgSSBuZWVkIHRvIGNoZWNrIHNvbWV0aGluZy4uLiBJdCBsb29rcyBsaWtlIGBpcDZfZGVsX3J0X3JlYXNvbmAgaXMgYWN0dWFsbHkgKm5vdCogZXhwbGljaXRseSBleHBvcnRlZCwgYnV0IGl0J3MgZ2xvYmFsLiBJdCBpcyBnbG9iYWwuIEkgbmVlZCB0byBjb25maXJtIHdoZXRoZXIgdGhlIGZ1bmN0aW9uIGlzIHRydWx5IGFjY2Vzc2libGUgZXh0ZXJuYWxseSBvciBub3QuIEknbGwgbmVlZCB0byBjaGVjayB0aGUgc3ltYm9sIHRhYmxlIGFnYWluLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMjc1NCwiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQyNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQyMjozNzoxMy4yMjc0NjI3MjFaIiwiU2VxIjozNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2MzY5NTY0MSwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiRVhQT1JUX1NZTUJPTC4qaXA2X2RlbF9ydF9yZWFzb25cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjYvcm91dGUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMjI6Mzc6MTMuMzkxMTY5NTgyWiIsIlNlcSI6MzcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI4MzEyMTU2MTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgcHJlc2VudGVkIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqTmF2aWdhdGluZyBTY29wZSBhbmQgRnVuY3Rpb25hbGl0eSoqXG5cbkFscmlnaHQsIHNvIHRoZSBmdW5jdGlvbiBpbiBxdWVzdGlvbiBpc24ndCBleHBsaWNpdGx5IGV4cG9ydGVkLCBidXQgaXQncyBjbGVhcmx5IGFjY2Vzc2libGUgZ2xvYmFsbHkuIFRoYXQncyBhY3R1YWxseSBwZXJmZWN0bHkgYWNjZXB0YWJsZSBpbiB0aGlzIHBhcnRpY3VsYXIgYXJjaGl0ZWN0dXJhbCBjb250ZXh0OyBpdCBhbGlnbnMgd2l0aCB0aGUgb3ZlcmFsbCBkZXNpZ24gcGhpbG9zb3BoeSBhbmQgaW50ZW5kZWQgdXNhZ2UuIE5vIG5lZWQgdG8gd29ycnkgYWJvdXQgZXh0ZXJuYWwgZXhwb3N1cmUgb3IgbW9kdWxlIGJvdW5kYXJpZXMgaW4gdGhpcyBjYXNlLlxuXG5Ob3csIGxldCdzIHR1cm4gb3VyIGF0dGVudGlvbiB0byBgZmliNl9kZWxgLiBUaGF0J3MgdGhlIGtleSBlbGVtZW50IHdlIG5lZWQgdG8gZXhhbWluZSBuZXh0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMzc3OCwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDIyOjM3OjE2LjIyMjM4ODk0WiIsIlNlcSI6MzgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjMzMDAwMDgsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkVYUE9SVF9TWU1CT0wuKmZpYjZfZGVsXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pcHY2L2lwNl9maWIuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMjI6Mzc6MTYuNDQ1Njk4NjI4WiIsIlNlcSI6MzksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMxODI3OTk1MzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKktlcm5lbCBSb3V0aW5nIFRhYmxlIE5vdGlmaWNhdGlvbiBBbmFseXNpcyoqXG5cbk9rYXksIHNvIHRoaXMgaXNuJ3QgYWJvdXQgYW55dGhpbmcgSSd2ZSBleHBsaWNpdGx5IGV4cG9ydGVkIGZyb20gdGhlIG1vZHVsZSDigJMgaXQncyBzb21ldGhpbmcgdGhhdCdzIGdsb2JhbGx5IGFjY2Vzc2libGUsIHdoaWNoIGltbWVkaWF0ZWx5IGNoYW5nZXMgaG93IEkgbmVlZCB0byBhcHByb2FjaCB0aGlzLiAgSSdtIGRpZ2dpbmcgaW50byBzb21ldGhpbmcgdGhhdCwgd2hpbGUgY3JpdGljYWwsIGlzbid0IG5lY2Vzc2FyaWx5IHdpdGhpbiBhIGRlZmluZWQgaW50ZXJmYWNlLiBUaGF0IHNpZ25hbHMgYSBwb3RlbnRpYWwgZm9yIG1vcmUgd2lkZXNwcmVhZCBpbXBhY3QsIGFuZCByZXF1aXJlcyBhIGJyb2FkZXIgdW5kZXJzdGFuZGluZyB0byBhdm9pZCBicmVha2luZyBzb21ldGhpbmcgZWxzZS5cblxuUmlnaHQsIGxldCdzIGRyaWxsIGRvd24uICBNeSBuZXh0IG1vdmUgaXMgY2xlYXI6IEkgbmVlZCB0byBzY3J1dGluaXplIGBpbmV0Nl9ydF9ub3RpZnlgLiAgVGhhdCByb3V0aW5lIGlzIHRoZSBrZXkg4oCTIGl0J3MgdGhlIHBvaW50IG9mIGludGVyZXN0IGZvciByb3V0ZSB0YWJsZSBjaGFuZ2Ugbm90aWZpY2F0aW9ucyBpbiB0aGUgSVB2NiBjb250ZXh0LiAgSSdtIGV4cGVjdGluZyB0aGlzIHRvIGJlIHRoZSBjb3JlIG9mIG15IGFuYWx5c2lzLiAgSeKAmWxsIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIG5vdGlmaWNhdGlvbiBpcyB0cmlnZ2VyZWQsIHdoYXQgZGF0YSBpcyBwYXNzZWQsIGFuZCB3aG8gdGhlIGNvbnN1bWVycyBvZiB0aGUgbm90aWZpY2F0aW9uIGFyZS4gVGhlIGdvYWwgaXMgdG8gZnVsbHkgdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgZ2xvYmFsIHBvaW50LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMzk3OSwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDIyOjM3OjE5LjYyODUwMTEzNloiLCJTZXEiOjQwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjI0MDYwNDY4LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJFWFBPUlRfU1lNQk9MLippbmV0Nl9ydF9ub3RpZnlcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjYvcm91dGUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMjI6Mzc6MTkuODUyNTcxMjQ0WiIsIlNlcSI6NDEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyNTk3NDE3ODQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOlxuXG4qKlVuY292ZXJpbmcgdGhlIEdsb2JhbCBTaWduaWZpY2FuY2UqKlxuXG5Pa2F5LCBzbyB0aGlzIGlzbid0IGFib3V0IHNvbWV0aGluZyBzcGVjaWZpY2FsbHkgZXhwb3J0ZWQ7IGl0J3MgZ290IGEgYnJvYWRlciwgbW9yZSBlbmNvbXBhc3NpbmcgaW5mbHVlbmNlLiBNeSBtaW5kIGltbWVkaWF0ZWx5IGp1bXBzIHRvIGltcGxpY2F0aW9ucyBiZXlvbmQgYSBsb2NhbCBzY29wZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGJpZyBwaWN0dXJlLiBMZXQncyBzZWUuLi4gc2luY2UgaXQncyBnbG9iYWwsIGEgZ29vZCBwbGFjZSB0byBzdGFydCBkaWdnaW5nIGlzIGF0IGBydDZfcm91dGVfcmN2YC4gVGhhdCdzIHdoZXJlIEkgY2FuIHRyYWNlIHRoZSBwYXRoIGFuZCBpbnRlcmFjdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI0MjY0LCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMjI6Mzc6MjMuMTEyMzE2NDE4WiIsIlNlcSI6NDIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjIyNTMzMjgsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkVYUE9SVF9TWU1CT0wuKnJ0Nl9yb3V0ZV9yY3ZcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjYvcm91dGUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMjI6Mzc6MjMuMzM0NTc3OTg2WiIsIlNlcSI6NDMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI5NzIzOTgyMTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgdGhlIFNjb3BlIG9mIGEgVmFyaWFibGUqKlxuXG5IbW0sIHRoaXMgdmFyaWFibGUgaXNuJ3QgZXhwbGljaXRseSBleHBvcnRlZCwgd2hpY2ggaXMgYSBrZXkgY2x1ZS4gVGhhdCBzdWdnZXN0cyBpdCdzIGxpa2VseSBzY29wZWQgZ2xvYmFsbHkgd2l0aGluIHRoZSBjdXJyZW50IG1vZHVsZSBvciBjb250ZXh0LiBJIG5lZWQgdG8gY29uZmlybSB0aGlzIHVuZGVyc3RhbmRpbmcsIGJlY2F1c2UgaWYgaXQncyB1bmludGVudGlvbmFsbHkgZ2xvYmFsLCBpdCBjb3VsZCBsZWFkIHRvIHVuZXhwZWN0ZWQgaW50ZXJhY3Rpb25zIG9yIHNpZGUgZWZmZWN0cyBsYXRlci5cblxuTXkgbmV4dCBzdGVwIGlzIHRvIGV4YW1pbmUgYGFkZHJjb25mX3ByZWZpeF9yY3ZgLiBUaGF0IGZ1bmN0aW9uIChvciBkYXRhIHN0cnVjdHVyZSwgZGVwZW5kaW5nIG9uIGNvbnRleHQpIGlzIHByb2JhYmx5IHdoZXJlIHRoaXMgZ2xvYmFsIHZhcmlhYmxlIGlzIGRlZmluZWQsIHVzZWQsIG9yIG1vZGlmaWVkLiBJJ2xsIG5lZWQgdG8gc2NydXRpbml6ZSB0aGF0IHBpZWNlIG9mIHRoZSBjb2RlIHRvIHZlcmlmeSBpdHMgdHJ1ZSBzY29wZSBhbmQgaW1wYWN0LiBUaGUgbGFjayBvZiBhbiBleHBsaWNpdCBleHBvcnQgc3Ryb25nbHkgc3VnZ2VzdHMgYW4gaW1wbGljaXQsIGFuZCBwb3RlbnRpYWxseSBwcm9ibGVtYXRpYywgZ2xvYmFsIHNjb3BlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNDQzOCwiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDIyOjM3OjI2LjMwNjk3OTExNloiLCJTZXEiOjQ0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQyMDg5MTQyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkVYUE9SVF9TWU1CT0wuKmFkZHJjb25mX3ByZWZpeF9yY3ZcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjYvYWRkcmNvbmYuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2Ni9hZGRyY29uZi5jPTI2OTU9aW50IGFkZHJjb25mX3ByZWZpeF9yY3ZfYWRkX2FkZHIoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbi0tXFxubmV0L2lwdjYvYWRkcmNvbmYuYy0yNzk1LX1cXG5uZXQvaXB2Ni9hZGRyY29uZi5jOjI3OTY6RVhQT1JUX1NZTUJPTF9HUEwoYWRkcmNvbmZfcHJlZml4X3Jjdl9hZGRfYWRkcik7XFxubmV0L2lwdjYvYWRkcmNvbmYuYy0yNzk3LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQyMjozNzoyNi40NDkwNzMzNjhaIiwiU2VxIjo0NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDAyMDQzMjI2MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIFRhcmdldCBJbnZlc3RpZ2F0aW9uKipcblxuT2theSwgc28gSSd2ZSBpZGVudGlmaWVkIHNvbWUgcG90ZW50aWFsIGZ1enppbmcgY2FuZGlkYXRlcywgdGhpbmdzIHRoYXQgYXJlbid0IHNwZWNpZmljYWxseSBleHBvcnRlZCwgYnV0IGFyZSBnbG9iYWxseSBhY2Nlc3NpYmxlLCB3aGljaCBpcyBhbHdheXMgYW4gaW50ZXJlc3Rpbmcgc3RhcnRpbmcgcG9pbnQgZm9yIHZ1bG5lcmFiaWxpdHkgcmVzZWFyY2guIE5vdywgSSB3YW50IHRvIGRpdmUgYSBsaXR0bGUgZGVlcGVyIG9uIHRoaXMgYElQVjZfUk9VVEVfSU5GT2Agc2V0dGluZy4gTGV0J3Mgc2VlIGlmIGl0IGhhcyBhbnkgZGVwZW5kZW5jaWVzLiBBaGEsIGl0IGxvb2tzIGxpa2UgaXQgcmVsaWVzIG9uIGBJUFY2X1JPVVRFUl9QUkVGYC4gT2theSwgdGhhdCBtYWtlcyBzZW5zZS4gTm93LCBsZXQncyB0cmFjZSB0aGlzIGRlcGVuZGVuY3kuIERvZXMgKnRoYXQqIGhhdmUgYW55IGRlcGVuZGVuY2llcyB0aGF0IHdlIG5lZWQgdG8gYmUgYXdhcmUgb2Y/IEFscmlnaHQsIGJhc2VkIG9uIHRoZSBgbWVudWNvbmZpZ2Agb3B0aW9ucywgdGhhdCdzIGRlZmluZWQgdW5kZXIgdGhlIGBJUFY2YCBzZWN0aW9uIGluIGBuZXQvaXB2Ni9LY29uZmlnYC4gU28sIG9idmlvdXNseSBgSVBWNmAgaXMgYSByZXF1aXJlbWVudC4gUmlnaHQsIHRoaXMgaW5mb3JtcyBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBhdHRhY2sgc3VyZmFjZSwgYW5kIHRoZSBhcHByb3ByaWF0ZSBjb250ZXh0IHdoZW4gY29uc3RydWN0aW5nIGZ1enppbmcgcGF5bG9hZHMuXG5cbk5vdywgSSdsbCBnbyBoYXZlIGEgbG9vayBpbiBgbmV0L2lwdjYvS2NvbmZpZ2AgYW5kIGRvdWJsZSBjaGVjayB0aGUgZGV0YWlscyBvZiBgSVBWNmAsIHNvIEknbSBjb21wbGV0ZWx5IGNsZWFyIG9uIGl0cyBpbXBsaWNhdGlvbnMgYW5kIGludGVyZGVwZW5kZW5jaWVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNDc4NCwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQyMjozNzozMC40Njk1MDg5NjFaIiwiU2VxIjo0NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3MDkxNzA4MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgSVBWNlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXB2Ni9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY2L0tjb25maWctNS1cXG5uZXQvaXB2Ni9LY29uZmlnOjY6bWVudWNvbmZpZyBJUFY2XFxubmV0L2lwdjYvS2NvbmZpZy03LVxcdGJvb2wgXFxcIlRoZSBJUHY2IHByb3RvY29sXFxcIlxcbi0tXFxubmV0L2lwdjYvS2NvbmZpZz0xOT1pZiBJUFY2XFxubmV0L2lwdjYvS2NvbmZpZy0yMC1cXG5uZXQvaXB2Ni9LY29uZmlnOjIxOmNvbmZpZyBJUFY2X1JPVVRFUl9QUkVGXFxubmV0L2lwdjYvS2NvbmZpZy0yMi1cXHRib29sIFxcXCJJUHY2OiBSb3V0ZXIgUHJlZmVyZW5jZSAoUkZDIDQxOTEpIHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvaXB2Ni9LY29uZmlnLTMwLVxcbm5ldC9pcHY2L0tjb25maWc6MzE6Y29uZmlnIElQVjZfUk9VVEVfSU5GT1xcbm5ldC9pcHY2L0tjb25maWctMzItXFx0Ym9vbCBcXFwiSVB2NjogUm91dGUgSW5mb3JtYXRpb24gKFJGQyA0MTkxKSBzdXBwb3J0XFxcIlxcbi0tXFxubmV0L2lwdjYvS2NvbmZpZy0zOC1cXG5uZXQvaXB2Ni9LY29uZmlnOjM5OmNvbmZpZyBJUFY2X09QVElNSVNUSUNfREFEXFxubmV0L2lwdjYvS2NvbmZpZy00MC1cXHRib29sIFxcXCJJUHY2OiBFbmFibGUgUkZDIDQ0MjkgT3B0aW1pc3RpYyBEQURcXFwiXFxuLS1cXG5uZXQvaXB2Ni9LY29uZmlnPTEwMj1jb25maWcgSU5FVDZfSVBDT01QXFxuLS1cXG5uZXQvaXB2Ni9LY29uZmlnLTExMS1cXG5uZXQvaXB2Ni9LY29uZmlnOjExMjpjb25maWcgSVBWNl9NSVA2XFxubmV0L2lwdjYvS2NvbmZpZy0xMTMtXFx0dHJpc3RhdGUgXFxcIklQdjY6IE1vYmlsaXR5XFxcIlxcbi0tXFxubmV0L2lwdjYvS2NvbmZpZy0xMTktXFxubmV0L2lwdjYvS2NvbmZpZzoxMjA6Y29uZmlnIElQVjZfSUxBXFxubmV0L2lwdjYvS2NvbmZpZy0xMjEtXFx0dHJpc3RhdGUgXFxcIklQdjY6IElkZW50aWZpZXIgTG9jYXRvciBBZGRyZXNzaW5nIChJTEEpXFxcIlxcbi0tXFxubmV0L2lwdjYvS2NvbmZpZz0xNDY9Y29uZmlnIElORVQ2X1RVTk5FTFxcbi0tXFxubmV0L2lwdjYvS2NvbmZpZy0xNDktXFxubmV0L2lwdjYvS2NvbmZpZzoxNTA6Y29uZmlnIElQVjZfVlRJXFxubmV0L2lwdjYvS2NvbmZpZy0xNTEtXFx0dHJpc3RhdGUgXFxcIlZpcnR1YWwgKHNlY3VyZSkgSVB2NjogdHVubmVsaW5nXFxcIlxcbi0tXFxubmV0L2lwdjYvS2NvbmZpZy0xNjEtXFxubmV0L2lwdjYvS2NvbmZpZzoxNjI6Y29uZmlnIElQVjZfU0lUXFxubmV0L2lwdjYvS2NvbmZpZy0xNjMtXFx0dHJpc3RhdGUgXFxcIklQdjY6IElQdjYtaW4tSVB2NCB0dW5uZWwgKFNJVCBkcml2ZXIpXFxcIlxcbi0tXFxubmV0L2lwdjYvS2NvbmZpZy0xNzYtXFxubmV0L2lwdjYvS2NvbmZpZzoxNzc6Y29uZmlnIElQVjZfU0lUXzZSRFxcbm5ldC9pcHY2L0tjb25maWctMTc4LVxcdGJvb2wgXFxcIklQdjY6IElQdjYgUmFwaWQgRGVwbG95bWVudCAoNlJEKVxcXCJcXG4tLVxcbm5ldC9pcHY2L0tjb25maWctMTk1LVxcbm5ldC9pcHY2L0tjb25maWc6MTk2OmNvbmZpZyBJUFY2X05ESVNDX05PREVUWVBFXFxubmV0L2lwdjYvS2NvbmZpZy0xOTctXFx0Ym9vbFxcbm5ldC9pcHY2L0tjb25maWctMTk4LVxcbm5ldC9pcHY2L0tjb25maWc6MTk5OmNvbmZpZyBJUFY2X1RVTk5FTFxcbm5ldC9pcHY2L0tjb25maWctMjAwLVxcdHRyaXN0YXRlIFxcXCJJUHY2OiBJUC1pbi1JUHY2IHR1bm5lbCAoUkZDMjQ3MylcXFwiXFxuLS1cXG5uZXQvaXB2Ni9LY29uZmlnLTIwOS1cXG5uZXQvaXB2Ni9LY29uZmlnOjIxMDpjb25maWcgSVBWNl9HUkVcXG5uZXQvaXB2Ni9LY29uZmlnLTIxMS1cXHR0cmlzdGF0ZSBcXFwiSVB2NjogR1JFIHR1bm5lbFxcXCJcXG4tLVxcbm5ldC9pcHY2L0tjb25maWctMjI3LVxcbm5ldC9pcHY2L0tjb25maWc6MjI4OmNvbmZpZyBJUFY2X0ZPVVxcbm5ldC9pcHY2L0tjb25maWctMjI5LVxcdHRyaXN0YXRlXFxuLS1cXG5uZXQvaXB2Ni9LY29uZmlnLTIzMS1cXG5uZXQvaXB2Ni9LY29uZmlnOjIzMjpjb25maWcgSVBWNl9GT1VfVFVOTkVMXFxubmV0L2lwdjYvS2NvbmZpZy0yMzMtXFx0dHJpc3RhdGVcXG4tLVxcbm5ldC9pcHY2L0tjb25maWctMjM2LVxcbm5ldC9pcHY2L0tjb25maWc6MjM3OmNvbmZpZyBJUFY2X01VTFRJUExFX1RBQkxFU1xcbm5ldC9pcHY2L0tjb25maWctMjM4LVxcdGJvb2wgXFxcIklQdjY6IE11bHRpcGxlIFJvdXRpbmcgVGFibGVzXFxcIlxcbi0tXFxubmV0L2lwdjYvS2NvbmZpZy0yNDItXFxubmV0L2lwdjYvS2NvbmZpZzoyNDM6Y29uZmlnIElQVjZfU1VCVFJFRVNcXG5uZXQvaXB2Ni9LY29uZmlnLTI0NC1cXHRib29sIFxcXCJJUHY2OiBzb3VyY2UgYWRkcmVzcyBiYXNlZCByb3V0aW5nXFxcIlxcbi0tXFxubmV0L2lwdjYvS2NvbmZpZy0yNTYtXFxubmV0L2lwdjYvS2NvbmZpZzoyNTc6Y29uZmlnIElQVjZfTVJPVVRFXFxubmV0L2lwdjYvS2NvbmZpZy0yNTgtXFx0Ym9vbCBcXFwiSVB2NjogbXVsdGljYXN0IHJvdXRpbmdcXFwiXFxuLS1cXG5uZXQvaXB2Ni9LY29uZmlnLTI2NC1cXG5uZXQvaXB2Ni9LY29uZmlnOjI2NTpjb25maWcgSVBWNl9NUk9VVEVfTVVMVElQTEVfVEFCTEVTXFxubmV0L2lwdjYvS2NvbmZpZy0yNjYtXFx0Ym9vbCBcXFwiSVB2NjogbXVsdGljYXN0IHBvbGljeSByb3V0aW5nXFxcIlxcbi0tXFxubmV0L2lwdjYvS2NvbmZpZy0yNzgtXFxubmV0L2lwdjYvS2NvbmZpZzoyNzk6Y29uZmlnIElQVjZfUElNU01fVjJcXG5uZXQvaXB2Ni9LY29uZmlnLTI4MC1cXHRib29sIFxcXCJJUHY2OiBQSU0tU00gdmVyc2lvbiAyIHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvaXB2Ni9LY29uZmlnLTI4NS1cXG5uZXQvaXB2Ni9LY29uZmlnOjI4Njpjb25maWcgSVBWNl9TRUc2X0xXVFVOTkVMXFxubmV0L2lwdjYvS2NvbmZpZy0yODctXFx0Ym9vbCBcXFwiSVB2NjogU2VnbWVudCBSb3V0aW5nIEhlYWRlciBlbmNhcHN1bGF0aW9uIHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvaXB2Ni9LY29uZmlnLTI5OS1cXG5uZXQvaXB2Ni9LY29uZmlnOjMwMDpjb25maWcgSVBWNl9TRUc2X0hNQUNcXG5uZXQvaXB2Ni9LY29uZmlnLTMwMS1cXHRib29sIFxcXCJJUHY2OiBTZWdtZW50IFJvdXRpbmcgSE1BQyBzdXBwb3J0XFxcIlxcbi0tXFxubmV0L2lwdjYvS2NvbmZpZy0zMTEtXFxubmV0L2lwdjYvS2NvbmZpZzozMTI6Y29uZmlnIElQVjZfU0VHNl9CUEZcXG5uZXQvaXB2Ni9LY29uZmlnLTMxMy1cXHRkZWZfYm9vbCB5XFxuLS1cXG5uZXQvaXB2Ni9LY29uZmlnLTMxNi1cXG5uZXQvaXB2Ni9LY29uZmlnOjMxNzpjb25maWcgSVBWNl9SUExfTFdUVU5ORUxcXG5uZXQvaXB2Ni9LY29uZmlnLTMxOC1cXHRib29sIFxcXCJJUHY2OiBSUEwgU291cmNlIFJvdXRpbmcgSGVhZGVyIHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvaXB2Ni9LY29uZmlnLTMyNy1cXG5uZXQvaXB2Ni9LY29uZmlnOjMyODpjb25maWcgSVBWNl9JT0FNNl9MV1RVTk5FTFxcbm5ldC9pcHY2L0tjb25maWctMzI5LVxcdGJvb2wgXFxcIklQdjY6IElPQU0gUHJlLWFsbG9jYXRlZCBUcmFjZSBpbnNlcnRpb24gc3VwcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMjI6Mzc6MzAuNjQwNDMxMzQyWiIsIlNlcSI6NDcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUyNjA0Mzk3NjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgSVB2NiBSb3V0ZSBNYW5hZ2VtZW50KipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhlc2UgSVB2NiBjb25maWd1cmF0aW9uczogYElQVjZgLCBgSVBWNl9ST1VURVJfUFJFRmAsIGFuZCBgSVBWNl9ST1VURV9JTkZPYC4gVGhhdCdzIHdoZXJlIGl0IGFsbCBzdGFydHMuXG5cbk5vdywgbGV0J3MgY2lyY2xlIGJhY2sgdG8gYGlwNl9kZWxfcnRfcmVhc29uYC4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBjYWxsIHNpdGVzLiBBaGEhIEl0J3MgaW52b2tlZCBmcm9tIGBhZGRyY29uZl9wcmVmaXhfcmN2YCwgYG5kaXNjX3JvdXRlcl9kaXNjb3ZlcnlgLCBhbmQgYHJ0Nl9yb3V0ZV9yY3ZgLiBUaGlzIGlzIGltcG9ydGFudC4gR29pbmcgZnVydGhlciBkb3duLCBgZmliNl9kZWxgIGlzIGNhbGxlZCBmcm9tIGEgaGFuZGZ1bCBvZiBwbGFjZXMgLSBgX19pcDZfZGVsX3J0YCwgYF9faXA2X2RlbF9ydF9zaWJsaW5nc2AsIGBmaWI2X2NsZWFuX25vZGVgLCBhbmQgYGZpYjZfZ2NfdGFibGVgLiBUaGUgbm90aWZpY2F0aW9uIGZ1bmN0aW9uLCBgaW5ldDZfcnRfbm90aWZ5YCwgZ2V0cyBjYWxsZWQgYWNyb3NzIHRoZSBib2FyZCAtIGJ5IGBmaWI2X2FkZF9ydDJub2RlYCwgYGZpYjZfZGVsX3JvdXRlYCwgYG5kaXNjX3JvdXRlcl9kaXNjb3ZlcnlgLCBgaXA2X3JvdXRlX21wYXRoX25vdGlmeWAsIGFuZCBgZmliNl9ydF91cGRhdGVgLiBGaW5hbGx5LCBgcnQ2X3JvdXRlX3JjdmAgYW5kIGBhZGRyY29uZl9wcmVmaXhfcmN2YCBhcmUgY2FsbGVkIGJ5IGBuZGlzY19yb3V0ZXJfZGlzY292ZXJ5YC5cblxuU28sIGBuZGlzY19yb3V0ZXJfZGlzY292ZXJ5YCBhcHBlYXJzIHRvIGJlIGEgY3J1Y2lhbCBmdW5jdGlvbiBmb3IgZnV6emluZyBnaXZlbiBpdHMgd2lkZXNwcmVhZCBpbmZsdWVuY2UsIHNwZWNpZmljYWxseSBkZWFsaW5nIHdpdGggcm91dGVyIGRpc2NvdmVyeSBhbmQgcm91dGUgbWFuYWdlbWVudC4gVGhlIGNhdGNoIGlzIHRoYXQgaXQncyBzdGF0aWMuIEJ1dCB3YWl0ISBJdCdzIGNhbGxlZCBmcm9tIGBuZGlzY19yY3ZgLCB3aGljaCBoYW5kbGVzIElDTVB2NiBOZWlnaGJvciBEaXNjb3ZlcnkgbWVzc2FnZXMsIGFuZCB0aGF0J3MgZ2xvYmFsLiBUaGlzIGNvdWxkIGJlIGEgZ29vZCBwb2ludCB0byBzdGFydCB0aGUgZnV6emluZyBwcm9jZXNzLiBJJ2xsIG5lZWQgdG8gZm9jdXMgb24gY3JhZnRpbmcgc3BlY2lmaWMgSUNNUHY2IE5laWdoYm9yIERpc2NvdmVyeSBtZXNzYWdlcyB0byB0YXJnZXQgdGhpcyBmdW5jdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MjY3MDYsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNzgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMjI6Mzc6MzUuOTAwODc0Mzc4WiIsIlNlcSI6NDgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzYzMzgzMjMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmRpc2NfcmN2XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pcHY2L25kaXNjLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjYvbmRpc2MuYz0xNzkyPXN0YXRpYyBib29sIG5kaXNjX3N1cHByZXNzX2ZyYWdfbmRpc2Moc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9pcHY2L25kaXNjLmMtMTgwNS1cXG5uZXQvaXB2Ni9uZGlzYy5jOjE4MDY6ZW51bSBza2JfZHJvcF9yZWFzb24gbmRpc2NfcmN2KHN0cnVjdCBza19idWZmICpza2IpXFxubmV0L2lwdjYvbmRpc2MuYy0xODA3LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMjI6Mzc6MzYuMDM3MjE4ODUxWiIsIlNlcSI6NDksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM4OTU3MTM3NzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgSW5pdGlhbCBBc3Nlc3NtZW50IG9mIHRoZSBJUFY2IFJvdXRlIFJlbW92YWwgXHUwMDI2IE5vdGlmaWNhdGlvbiBGbG93KipcblxuT2theSwgc28gSSdtIGRpdmluZyBpbnRvIHRoaXMgSVB2NiByb3V0aW5nIGNvZGUgYW5kIGltbWVkaWF0ZWx5IEkgc2VlIGEgcGF0dGVybiBmb3JtaW5nLiBgbmRpc2NfcmN2YCwgYHJ0Nl9yb3V0ZV9yY3ZgLCBhbmQgYGFkZHJjb25mX3ByZWZpeF9yY3ZgIOKAkyB0aGVzZSBmdW5jdGlvbnMgYXJlIGFsbCBnbG9iYWxseSB2aXNpYmxlLCBhbmQgdGhhdCdzIHRoZSBrZXkuIFRoYXQgdGVsbHMgbWUgdGhlc2UgYXJlIGVudHJ5IHBvaW50cy5cblxuR2l2ZW4gdGhhdCwgSSBuZWVkIHRvIGZvY3VzIG15IGF0dGVudGlvbiBvbiB3aGVyZSB0aGVzZSBwaWVjZXMgaW50ZXJmYWNlLiBUaGUgc3ltYm9scyB0aGF0IHJlYWxseSBwaXF1ZSBteSBpbnRlcmVzdCBhcyBiZWluZyBwb3RlbnRpYWwga2V5cyB0byB1bmRlcnN0YW5kaW5nIHRoZSBkZWxldGlvbiBhbmQgbm90aWZpY2F0aW9uIG1lY2hhbmlzbSBhcmU6IGBpcDZfZGVsX3J0X3JlYXNvbmAsIGBmaWI2X2RlbGAsIGBpbmV0Nl9ydF9ub3RpZnlgLCBgcnQ2X3JvdXRlX3JjdmAsIGBhZGRyY29uZl9wcmVmaXhfcmN2YCwgYW5kIGBuZGlzY19yY3ZgLiBUaGV5IGFsbCBzZWVtIGhpZ2hseSByZWxldmFudC5cblxuTXkgaW1tZWRpYXRlIG5leHQgc3RlcCB3aWxsIGJlIHRvIHZlcmlmeSB0aGF0IGBuZGlzY19yY3ZgIGlzIGluZGVlZCBleHBvcnRlZCwgY29uZmlybWluZyBpdCBpcyBhbiBpbXBvcnRhbnQgZ2xvYmFsIGZ1bmN0aW9uLiBJIG5lZWQgdG8gYmUgc3VyZSBiZWZvcmUgSSBtb3ZlIGZvcndhcmQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI3NTIxLCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTMyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDIyOjM3OjM5LjkzMjkzNjIyMVoiLCJTZXEiOjUwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjI5MTYxNDU4LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJFWFBPUlRfU1lNQk9MLipuZGlzY19yY3ZcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjYvbmRpc2MuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMjI6Mzc6NDAuMTYyMTA2Nzc5WiIsIlNlcSI6NTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjkwOTA0NzUyMjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyBUYXJnZXRzIGZvciBJUHY2IFJvdXRlIERlbGV0aW9uIExvZ2ljKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyBhbGwgYWJvdXQgaGFuZGxpbmcgdGhlIG5ldyBgUlRBX0RFTF9SRUFTT05gIGF0dHJpYnV0ZSBmb3IgSVB2NiByb3V0ZSBkZWxldGlvbiBub3RpZmljYXRpb25zLCBzcGVjaWZpY2FsbHkgd2hlbiByb3V0ZXMgZXhwaXJlIG9yIGFyZSB3aXRoZHJhd24gdmlhIFJvdXRlciBBZHZlcnRpc2VtZW50cy4gVGhpcyBtZWFucyB3ZSdyZSBsb29raW5nIGF0IGZ1bmN0aW9uYWwgY2hhbmdlcyBkZWVwIHdpdGhpbiBjb3JlIElQdjYgcm91dGluZyBhbmQgbmVpZ2hib3IgZGlzY292ZXJ5LCBtYWtpbmcgdGhlbSBwcmltZSB0YXJnZXRzIGZvciBmdXp6aW5nLlxuXG5NeSB0aGlua2luZyBpcywgd2UndmUgZ290IHRvIGZpbmQgdGhlIGtleSBlbnRyeSBwb2ludHMgYW5kIGZ1bmN0aW9ucyByZWxhdGVkIHRvIHRoaXMgbmV3IGF0dHJpYnV0ZS4gSSdtIGdvaW5nIHRvIHNldCBgV29ydGhGdXp6aW5nYCB0byB0cnVlLlxuXG5GaXJzdCwgSSBsb29rZWQgYXQgdGhlIG9idmlvdXM6IGBuZGlzY19yY3ZgLiBJdCdzIHRoZSBmcm9udCBkb29yIGZvciBJQ01QdjYgTkQgbWVzc2FnZXMsIGluY2x1ZGluZyB0aG9zZSBSb3V0ZXIgQWR2ZXJ0aXNlbWVudHMsIHNvIHRoYXTigJlzIGEgZ3JlYXQgY2FuZGlkYXRlLiBUaGVuLCBgcnQ2X3JvdXRlX3JjdmAgYW5kIGBhZGRyY29uZl9wcmVmaXhfcmN2YCBwb3BwZWQgdXAuIFRoZXkncmUgYm90aCBjYWxsZWQgZnJvbSBgbmRpc2Nfcm91dGVyX2Rpc2NvdmVyeWAgYW5kIGhhbmRsZSBSb3V0ZSBJbmZvcm1hdGlvbiBPcHRpb25zIChSSU8pIGFuZCBQcmVmaXggSW5mb3JtYXRpb24gT3B0aW9ucyAoUElPKSwgcmVzcGVjdGl2ZWx5LCBzbyB0aGV5J3JlIGRlZmluaXRlbHkgcmVsZXZhbnQuIEZpbmFsbHksIEkgaWRlbnRpZmllZCBgaXA2X2RlbF9ydF9yZWFzb25gLCBgZmliNl9kZWxgLCBhbmQgYGluZXQ2X3J0X25vdGlmeWAgYXJlIGFsbCBrZXkgZnVuY3Rpb25zLiBgaXA2X2RlbF9ydF9yZWFzb25gIGlzIHVzZWQgd2hlbiByb3V0ZXMgYXJlIGRlbGV0ZWQsIGBmaWI2X2RlbGAgaXMgYWxzbyBjYWxsZWQgd2hlbiByb3V0ZXMgYXJlIGRlbGV0ZWQgYW5kIGBpbmV0Nl9ydF9ub3RpZnlgIGdldHMgY2FsbGVkIHdoZW4gcm91dGVzIGFyZSBhZGRlZCBvciBkZWxldGVkLlxuXG5JIGFsc28gZG91YmxlLWNoZWNrZWQgd2hhdCBjYWxscyB3aGF0OiBgaXA2X2RlbF9ydF9yZWFzb25gIGlzIGNhbGxlZCBmcm9tIGBydDZfcm91dGVfcmN2YCwgYGFkZHJjb25mX3ByZWZpeF9yY3ZgLCBhbmQgYG5kaXNjX3JvdXRlcl9kaXNjb3ZlcnlgLCBhbmQgYGZpYjZfZGVsYCBpcyBjYWxsZWQgZnJvbSBgX19pcDZfZGVsX3J0YCwgYF9faXA2X2RlbF9ydF9zaWJsaW5nc2AsIGBmaWI2X2NsZWFuX25vZGVgLCBgZmliNl9nY190YWJsZWAuIGBpbmV0Nl9ydF9ub3RpZnlgIGlzIGNhbGxlZCBmcm9tIGBmaWI2X2FkZF9ydDJub2RlYCwgYGZpYjZfZGVsX3JvdXRlYCwgYG5kaXNjX3JvdXRlcl9kaXNjb3ZlcnlgLCBgaXA2X3JvdXRlX21wYXRoX25vdGlmeWAsIGFuZCBgZmliNl9ydF91cGRhdGVgLiBgcnQ2X3JvdXRlX3JjdmAgYW5kIGBhZGRyY29uZl9wcmVmaXhfcmN2YCBhcmUgY2FsbGVkIGZyb20gYG5kaXNjX3JvdXRlcl9kaXNjb3ZlcnlgLlxuXG5TbywgaGVyZSdzIG15IGZvY3VzZWQgbGlzdCBvZiBzeW1ib2xzIEknbGwgdGFyZ2V0IGZvciBmdXp6aW5nOiBgaXA2X2RlbF9ydF9yZWFzb25gLCBgZmliNl9kZWxgLCBgaW5ldDZfcnRfbm90aWZ5YCwgYHJ0Nl9yb3V0ZV9yY3ZgLCBgYWRkcmNvbmZfcHJlZml4X3JjdmAsIGFuZCBgbmRpc2NfcmN2YC4gSSB3aWxsIGFsc28gY29uZmlybSB0aGF0IHRoZXNlIGNvbmZpZ3VyYXRpb25zIGFyZSBzZXQ6IGBJUFY2YCwgYElQVjZfUk9VVEVSX1BSRUZgLCBhbmQgYElQVjZfUk9VVEVfSU5GT2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI3OTIzLCJPdXRwdXRUb2tlbnMiOjE4NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY2NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQyMjozNzo0OS4yNTI1ODU0MTlaIiwiU2VxIjo1MiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzk4MzgzNDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIklQVjZcIixcbiAgICBcIklQVjZfUk9VVEVSX1BSRUZcIixcbiAgICBcIklQVjZfUk9VVEVfSU5GT1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImlwNl9kZWxfcnRfcmVhc29uXCIsXG4gICAgXCJmaWI2X2RlbFwiLFxuICAgIFwiaW5ldDZfcnRfbm90aWZ5XCIsXG4gICAgXCJydDZfcm91dGVfcmN2XCIsXG4gICAgXCJhZGRyY29uZl9wcmVmaXhfcmN2XCIsXG4gICAgXCJuZGlzY19yY3ZcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGEgbmV3IG5ldGxpbmsgYXR0cmlidXRlIGBSVEFfREVMX1JFQVNPTmAgdG8gSVB2NiByb3V0ZSBkZWxldGlvbiBub3RpZmljYXRpb25zIChgUlRNX0RFTFJPVVRFYCkuIEl0IG1vZGlmaWVzIGNvcmUgSVB2NiByb3V0aW5nIGFuZCBuZWlnaGJvciBkaXNjb3ZlcnkgZnVuY3Rpb25zIHRvIHBvcHVsYXRlIHRoaXMgYXR0cmlidXRlIHdoZW4gcm91dGVzIGFyZSBkZWxldGVkIGR1ZSB0byBleHBpcmF0aW9uIG9yIFJvdXRlciBBZHZlcnRpc2VtZW50IChSQSkgd2l0aGRyYXdhbC4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMgdGhhdCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIklQVjZcIixcbiAgICBcIklQVjZfUk9VVEVSX1BSRUZcIixcbiAgICBcIklQVjZfUk9VVEVfSU5GT1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImlwNl9kZWxfcnRfcmVhc29uXCIsXG4gICAgXCJmaWI2X2RlbFwiLFxuICAgIFwiaW5ldDZfcnRfbm90aWZ5XCIsXG4gICAgXCJydDZfcm91dGVfcmN2XCIsXG4gICAgXCJhZGRyY29uZl9wcmVmaXhfcmN2XCIsXG4gICAgXCJuZGlzY19yY3ZcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGEgbmV3IG5ldGxpbmsgYXR0cmlidXRlIGBSVEFfREVMX1JFQVNPTmAgdG8gSVB2NiByb3V0ZSBkZWxldGlvbiBub3RpZmljYXRpb25zIChgUlRNX0RFTFJPVVRFYCkuIEl0IG1vZGlmaWVzIGNvcmUgSVB2NiByb3V0aW5nIGFuZCBuZWlnaGJvciBkaXNjb3ZlcnkgZnVuY3Rpb25zIHRvIHBvcHVsYXRlIHRoaXMgYXR0cmlidXRlIHdoZW4gcm91dGVzIGFyZSBkZWxldGVkIGR1ZSB0byBleHBpcmF0aW9uIG9yIFJvdXRlciBBZHZlcnRpc2VtZW50IChSQSkgd2l0aGRyYXdhbC4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMgdGhhdCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflowctgr6[1] Phase: Succeeded StartedAt: 2026-07-25 22:38:01 +0000 UTC FinishedAt: 2026-07-25 22:38:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowctgr6[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-25 22:38:01 +0000 UTC FinishedAt: 2026-07-25 22:38:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowctgr6[2] Phase: Succeeded StartedAt: 2026-07-25 22:38:01 +0000 UTC FinishedAt: 2026-07-26 02:41:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowctgr6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ed6dc972c19ff9ffca504f5739848da4275219e3","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_ROUTER_PREF","IPV6_ROUTE_INFO"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip6_del_rt_reason","fib6_del","inet6_rt_notify","rt6_route_rcv","addrconf_prefix_rcv","ndisc_rcv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ed6dc972c19ff9ffca504f5739848da4275219e3","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_ROUTER_PREF","IPV6_ROUTE_INFO"],"series_id":"8b675e05-5e2a-4eda-b427-9920c5ddb3f9","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-07-25 22:38:02 +0000 UTC FinishedAt: 2026-07-26 02:41:41 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"ed6dc972c19ff9ffca504f5739848da4275219e3","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_ROUTER_PREF","IPV6_ROUTE_INFO"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip6_del_rt_reason","fib6_del","inet6_rt_notify","rt6_route_rcv","addrconf_prefix_rcv","ndisc_rcv"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"ed6dc972c19ff9ffca504f5739848da4275219e3","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_ROUTER_PREF","IPV6_ROUTE_INFO"],"series_id":"8b675e05-5e2a-4eda-b427-9920c5ddb3f9","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowctgr6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ed6dc972c19ff9ffca504f5739848da4275219e3","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_ROUTER_PREF","IPV6_ROUTE_INFO"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip6_del_rt_reason","fib6_del","inet6_rt_notify","rt6_route_rcv","addrconf_prefix_rcv","ndisc_rcv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ed6dc972c19ff9ffca504f5739848da4275219e3","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_ROUTER_PREF","IPV6_ROUTE_INFO"],"series_id":"8b675e05-5e2a-4eda-b427-9920c5ddb3f9","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-07-25 22:38:02 +0000 UTC FinishedAt: 2026-07-25 22:38:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowctgr6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ed6dc972c19ff9ffca504f5739848da4275219e3","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_ROUTER_PREF","IPV6_ROUTE_INFO"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip6_del_rt_reason","fib6_del","inet6_rt_notify","rt6_route_rcv","addrconf_prefix_rcv","ndisc_rcv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ed6dc972c19ff9ffca504f5739848da4275219e3","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_ROUTER_PREF","IPV6_ROUTE_INFO"],"series_id":"8b675e05-5e2a-4eda-b427-9920c5ddb3f9","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-07-25 22:38:02 +0000 UTC FinishedAt: 2026-07-25 22:38:21 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"ed6dc972c19ff9ffca504f5739848da4275219e3","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_ROUTER_PREF","IPV6_ROUTE_INFO"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowctgr6/series-workflowctgr6-convert-artifact-2949433693/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowctgr6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ed6dc972c19ff9ffca504f5739848da4275219e3","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_ROUTER_PREF","IPV6_ROUTE_INFO"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip6_del_rt_reason","fib6_del","inet6_rt_notify","rt6_route_rcv","addrconf_prefix_rcv","ndisc_rcv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ed6dc972c19ff9ffca504f5739848da4275219e3","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_ROUTER_PREF","IPV6_ROUTE_INFO"],"series_id":"8b675e05-5e2a-4eda-b427-9920c5ddb3f9","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-07-25 22:38:26 +0000 UTC FinishedAt: 2026-07-25 23:06:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowctgr6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ed6dc972c19ff9ffca504f5739848da4275219e3","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_ROUTER_PREF","IPV6_ROUTE_INFO"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip6_del_rt_reason","fib6_del","inet6_rt_notify","rt6_route_rcv","addrconf_prefix_rcv","ndisc_rcv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ed6dc972c19ff9ffca504f5739848da4275219e3","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_ROUTER_PREF","IPV6_ROUTE_INFO"],"series_id":"8b675e05-5e2a-4eda-b427-9920c5ddb3f9","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-07-25 22:38:26 +0000 UTC FinishedAt: 2026-07-25 23:06:26 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*121c4033-fe66-4558-aab1-d6fd1a34c83e,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-workflowctgr6/series-workflowctgr6-convert-artifact-2949433693/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": "8d37064e-8218-4ef4-b447-9b7912ba4eba", "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-workflowctgr6/series-workflowctgr6-build-action-3159334035/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowctgr6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ed6dc972c19ff9ffca504f5739848da4275219e3","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_ROUTER_PREF","IPV6_ROUTE_INFO"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip6_del_rt_reason","fib6_del","inet6_rt_notify","rt6_route_rcv","addrconf_prefix_rcv","ndisc_rcv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ed6dc972c19ff9ffca504f5739848da4275219e3","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_ROUTER_PREF","IPV6_ROUTE_INFO"],"series_id":"8b675e05-5e2a-4eda-b427-9920c5ddb3f9","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-07-25 22:38:26 +0000 UTC FinishedAt: 2026-07-25 23:06:16 +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:*121c4033-fe66-4558-aab1-d6fd1a34c83e,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-workflowctgr6/series-workflowctgr6-convert-artifact-2949433693/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": "8d37064e-8218-4ef4-b447-9b7912ba4eba", "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-workflowctgr6/series-workflowctgr6-build-action-3159334035/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowctgr6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ed6dc972c19ff9ffca504f5739848da4275219e3","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_ROUTER_PREF","IPV6_ROUTE_INFO"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip6_del_rt_reason","fib6_del","inet6_rt_notify","rt6_route_rcv","addrconf_prefix_rcv","ndisc_rcv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ed6dc972c19ff9ffca504f5739848da4275219e3","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_ROUTER_PREF","IPV6_ROUTE_INFO"],"series_id":"8b675e05-5e2a-4eda-b427-9920c5ddb3f9","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-07-25 23:06:26 +0000 UTC FinishedAt: 2026-07-25 23:06:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowctgr6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ed6dc972c19ff9ffca504f5739848da4275219e3","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_ROUTER_PREF","IPV6_ROUTE_INFO"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip6_del_rt_reason","fib6_del","inet6_rt_notify","rt6_route_rcv","addrconf_prefix_rcv","ndisc_rcv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ed6dc972c19ff9ffca504f5739848da4275219e3","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_ROUTER_PREF","IPV6_ROUTE_INFO"],"series_id":"8b675e05-5e2a-4eda-b427-9920c5ddb3f9","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-07-25 23:06:26 +0000 UTC FinishedAt: 2026-07-25 23:06:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowctgr6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ed6dc972c19ff9ffca504f5739848da4275219e3","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_ROUTER_PREF","IPV6_ROUTE_INFO"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip6_del_rt_reason","fib6_del","inet6_rt_notify","rt6_route_rcv","addrconf_prefix_rcv","ndisc_rcv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ed6dc972c19ff9ffca504f5739848da4275219e3","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_ROUTER_PREF","IPV6_ROUTE_INFO"],"series_id":"8b675e05-5e2a-4eda-b427-9920c5ddb3f9","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-07-25 23:06:26 +0000 UTC FinishedAt: 2026-07-25 23:06:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowctgr6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ed6dc972c19ff9ffca504f5739848da4275219e3","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_ROUTER_PREF","IPV6_ROUTE_INFO"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip6_del_rt_reason","fib6_del","inet6_rt_notify","rt6_route_rcv","addrconf_prefix_rcv","ndisc_rcv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ed6dc972c19ff9ffca504f5739848da4275219e3","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_ROUTER_PREF","IPV6_ROUTE_INFO"],"series_id":"8b675e05-5e2a-4eda-b427-9920c5ddb3f9","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-07-25 23:06:26 +0000 UTC FinishedAt: 2026-07-25 23:06:33 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"ed6dc972c19ff9ffca504f5739848da4275219e3","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_ROUTER_PREF","IPV6_ROUTE_INFO"],"series_id":"8b675e05-5e2a-4eda-b427-9920c5ddb3f9","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowctgr6/series-workflowctgr6-convert-artifact-3842656312/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowctgr6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ed6dc972c19ff9ffca504f5739848da4275219e3","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_ROUTER_PREF","IPV6_ROUTE_INFO"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip6_del_rt_reason","fib6_del","inet6_rt_notify","rt6_route_rcv","addrconf_prefix_rcv","ndisc_rcv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ed6dc972c19ff9ffca504f5739848da4275219e3","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_ROUTER_PREF","IPV6_ROUTE_INFO"],"series_id":"8b675e05-5e2a-4eda-b427-9920c5ddb3f9","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-07-25 23:06:36 +0000 UTC FinishedAt: 2026-07-25 23:08:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowctgr6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ed6dc972c19ff9ffca504f5739848da4275219e3","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_ROUTER_PREF","IPV6_ROUTE_INFO"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip6_del_rt_reason","fib6_del","inet6_rt_notify","rt6_route_rcv","addrconf_prefix_rcv","ndisc_rcv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ed6dc972c19ff9ffca504f5739848da4275219e3","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_ROUTER_PREF","IPV6_ROUTE_INFO"],"series_id":"8b675e05-5e2a-4eda-b427-9920c5ddb3f9","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-07-25 23:06:36 +0000 UTC FinishedAt: 2026-07-25 23:08:26 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*8d37064e-8218-4ef4-b447-9b7912ba4eba,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-workflowctgr6/series-workflowctgr6-build-action-3159334035/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-workflowctgr6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ed6dc972c19ff9ffca504f5739848da4275219e3","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_ROUTER_PREF","IPV6_ROUTE_INFO"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip6_del_rt_reason","fib6_del","inet6_rt_notify","rt6_route_rcv","addrconf_prefix_rcv","ndisc_rcv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ed6dc972c19ff9ffca504f5739848da4275219e3","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_ROUTER_PREF","IPV6_ROUTE_INFO"],"series_id":"8b675e05-5e2a-4eda-b427-9920c5ddb3f9","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-07-25 23:08:36 +0000 UTC FinishedAt: 2026-07-25 23:08:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowctgr6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ed6dc972c19ff9ffca504f5739848da4275219e3","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_ROUTER_PREF","IPV6_ROUTE_INFO"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip6_del_rt_reason","fib6_del","inet6_rt_notify","rt6_route_rcv","addrconf_prefix_rcv","ndisc_rcv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ed6dc972c19ff9ffca504f5739848da4275219e3","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_ROUTER_PREF","IPV6_ROUTE_INFO"],"series_id":"8b675e05-5e2a-4eda-b427-9920c5ddb3f9","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-07-25 23:08:36 +0000 UTC FinishedAt: 2026-07-25 23:08:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowctgr6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ed6dc972c19ff9ffca504f5739848da4275219e3","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_ROUTER_PREF","IPV6_ROUTE_INFO"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip6_del_rt_reason","fib6_del","inet6_rt_notify","rt6_route_rcv","addrconf_prefix_rcv","ndisc_rcv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ed6dc972c19ff9ffca504f5739848da4275219e3","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_ROUTER_PREF","IPV6_ROUTE_INFO"],"series_id":"8b675e05-5e2a-4eda-b427-9920c5ddb3f9","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-07-25 23:08:36 +0000 UTC FinishedAt: 2026-07-25 23:36:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowctgr6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ed6dc972c19ff9ffca504f5739848da4275219e3","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_ROUTER_PREF","IPV6_ROUTE_INFO"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip6_del_rt_reason","fib6_del","inet6_rt_notify","rt6_route_rcv","addrconf_prefix_rcv","ndisc_rcv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ed6dc972c19ff9ffca504f5739848da4275219e3","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_ROUTER_PREF","IPV6_ROUTE_INFO"],"series_id":"8b675e05-5e2a-4eda-b427-9920c5ddb3f9","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-07-25 23:08:36 +0000 UTC FinishedAt: 2026-07-25 23:36:40 +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:*121c4033-fe66-4558-aab1-d6fd1a34c83e,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-workflowctgr6/series-workflowctgr6-convert-artifact-3842656312/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": "098d4a07-1970-4516-bd03-9a41aebc4304", "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-workflowctgr6/series-workflowctgr6-build-action-2468241700/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowctgr6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ed6dc972c19ff9ffca504f5739848da4275219e3","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_ROUTER_PREF","IPV6_ROUTE_INFO"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip6_del_rt_reason","fib6_del","inet6_rt_notify","rt6_route_rcv","addrconf_prefix_rcv","ndisc_rcv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ed6dc972c19ff9ffca504f5739848da4275219e3","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_ROUTER_PREF","IPV6_ROUTE_INFO"],"series_id":"8b675e05-5e2a-4eda-b427-9920c5ddb3f9","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-07-25 23:08:36 +0000 UTC FinishedAt: 2026-07-25 23:36:30 +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:*121c4033-fe66-4558-aab1-d6fd1a34c83e,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-workflowctgr6/series-workflowctgr6-convert-artifact-3842656312/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": "098d4a07-1970-4516-bd03-9a41aebc4304", "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-workflowctgr6/series-workflowctgr6-build-action-2468241700/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowctgr6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ed6dc972c19ff9ffca504f5739848da4275219e3","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_ROUTER_PREF","IPV6_ROUTE_INFO"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip6_del_rt_reason","fib6_del","inet6_rt_notify","rt6_route_rcv","addrconf_prefix_rcv","ndisc_rcv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ed6dc972c19ff9ffca504f5739848da4275219e3","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_ROUTER_PREF","IPV6_ROUTE_INFO"],"series_id":"8b675e05-5e2a-4eda-b427-9920c5ddb3f9","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-07-25 23:36:40 +0000 UTC FinishedAt: 2026-07-25 23:36:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowctgr6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ed6dc972c19ff9ffca504f5739848da4275219e3","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_ROUTER_PREF","IPV6_ROUTE_INFO"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip6_del_rt_reason","fib6_del","inet6_rt_notify","rt6_route_rcv","addrconf_prefix_rcv","ndisc_rcv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ed6dc972c19ff9ffca504f5739848da4275219e3","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_ROUTER_PREF","IPV6_ROUTE_INFO"],"series_id":"8b675e05-5e2a-4eda-b427-9920c5ddb3f9","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-07-25 23:36:40 +0000 UTC FinishedAt: 2026-07-25 23:36:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowctgr6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ed6dc972c19ff9ffca504f5739848da4275219e3","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_ROUTER_PREF","IPV6_ROUTE_INFO"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip6_del_rt_reason","fib6_del","inet6_rt_notify","rt6_route_rcv","addrconf_prefix_rcv","ndisc_rcv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ed6dc972c19ff9ffca504f5739848da4275219e3","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_ROUTER_PREF","IPV6_ROUTE_INFO"],"series_id":"8b675e05-5e2a-4eda-b427-9920c5ddb3f9","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-07-25 23:36:40 +0000 UTC FinishedAt: 2026-07-25 23:38:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowctgr6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ed6dc972c19ff9ffca504f5739848da4275219e3","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_ROUTER_PREF","IPV6_ROUTE_INFO"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip6_del_rt_reason","fib6_del","inet6_rt_notify","rt6_route_rcv","addrconf_prefix_rcv","ndisc_rcv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ed6dc972c19ff9ffca504f5739848da4275219e3","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_ROUTER_PREF","IPV6_ROUTE_INFO"],"series_id":"8b675e05-5e2a-4eda-b427-9920c5ddb3f9","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-07-25 23:36:40 +0000 UTC FinishedAt: 2026-07-25 23:38:40 +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:*098d4a07-1970-4516-bd03-9a41aebc4304,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-workflowctgr6/series-workflowctgr6-build-action-2468241700/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-workflowctgr6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ed6dc972c19ff9ffca504f5739848da4275219e3","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_ROUTER_PREF","IPV6_ROUTE_INFO"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip6_del_rt_reason","fib6_del","inet6_rt_notify","rt6_route_rcv","addrconf_prefix_rcv","ndisc_rcv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ed6dc972c19ff9ffca504f5739848da4275219e3","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_ROUTER_PREF","IPV6_ROUTE_INFO"],"series_id":"8b675e05-5e2a-4eda-b427-9920c5ddb3f9","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-07-25 23:38:49 +0000 UTC FinishedAt: 2026-07-26 02:41:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowctgr6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ed6dc972c19ff9ffca504f5739848da4275219e3","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_ROUTER_PREF","IPV6_ROUTE_INFO"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip6_del_rt_reason","fib6_del","inet6_rt_notify","rt6_route_rcv","addrconf_prefix_rcv","ndisc_rcv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ed6dc972c19ff9ffca504f5739848da4275219e3","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_ROUTER_PREF","IPV6_ROUTE_INFO"],"series_id":"8b675e05-5e2a-4eda-b427-9920c5ddb3f9","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-07-25 23:38:49 +0000 UTC FinishedAt: 2026-07-26 02:41:41 +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":["ip6_del_rt_reason","fib6_del","inet6_rt_notify","rt6_route_rcv","addrconf_prefix_rcv","ndisc_rcv"],"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:*8d37064e-8218-4ef4-b447-9b7912ba4eba,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*098d4a07-1970-4516-bd03-9a41aebc4304,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-workflowctgr6/series-workflowctgr6-build-action-3159334035/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-workflowctgr6/series-workflowctgr6-build-action-2468241700/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowctgr6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ed6dc972c19ff9ffca504f5739848da4275219e3","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_ROUTER_PREF","IPV6_ROUTE_INFO"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip6_del_rt_reason","fib6_del","inet6_rt_notify","rt6_route_rcv","addrconf_prefix_rcv","ndisc_rcv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ed6dc972c19ff9ffca504f5739848da4275219e3","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_ROUTER_PREF","IPV6_ROUTE_INFO"],"series_id":"8b675e05-5e2a-4eda-b427-9920c5ddb3f9","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-07-25 23:38:49 +0000 UTC FinishedAt: 2026-07-25 23:38:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowctgr6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ed6dc972c19ff9ffca504f5739848da4275219e3","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_ROUTER_PREF","IPV6_ROUTE_INFO"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip6_del_rt_reason","fib6_del","inet6_rt_notify","rt6_route_rcv","addrconf_prefix_rcv","ndisc_rcv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ed6dc972c19ff9ffca504f5739848da4275219e3","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_ROUTER_PREF","IPV6_ROUTE_INFO"],"series_id":"8b675e05-5e2a-4eda-b427-9920c5ddb3f9","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-07-25 23:38:49 +0000 UTC FinishedAt: 2026-07-25 23:38:53 +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":["ip6_del_rt_reason","fib6_del","inet6_rt_notify","rt6_route_rcv","addrconf_prefix_rcv","ndisc_rcv"],"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-workflowctgr6/series-workflowctgr6-convert-artifact-4209047697/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowctgr6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ed6dc972c19ff9ffca504f5739848da4275219e3","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_ROUTER_PREF","IPV6_ROUTE_INFO"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip6_del_rt_reason","fib6_del","inet6_rt_notify","rt6_route_rcv","addrconf_prefix_rcv","ndisc_rcv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ed6dc972c19ff9ffca504f5739848da4275219e3","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_ROUTER_PREF","IPV6_ROUTE_INFO"],"series_id":"8b675e05-5e2a-4eda-b427-9920c5ddb3f9","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-07-25 23:38:49 +0000 UTC FinishedAt: 2026-07-25 23:38:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowctgr6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ed6dc972c19ff9ffca504f5739848da4275219e3","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_ROUTER_PREF","IPV6_ROUTE_INFO"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip6_del_rt_reason","fib6_del","inet6_rt_notify","rt6_route_rcv","addrconf_prefix_rcv","ndisc_rcv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ed6dc972c19ff9ffca504f5739848da4275219e3","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_ROUTER_PREF","IPV6_ROUTE_INFO"],"series_id":"8b675e05-5e2a-4eda-b427-9920c5ddb3f9","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-07-25 23:38:49 +0000 UTC FinishedAt: 2026-07-25 23:38:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowctgr6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ed6dc972c19ff9ffca504f5739848da4275219e3","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_ROUTER_PREF","IPV6_ROUTE_INFO"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip6_del_rt_reason","fib6_del","inet6_rt_notify","rt6_route_rcv","addrconf_prefix_rcv","ndisc_rcv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ed6dc972c19ff9ffca504f5739848da4275219e3","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_ROUTER_PREF","IPV6_ROUTE_INFO"],"series_id":"8b675e05-5e2a-4eda-b427-9920c5ddb3f9","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-07-25 23:38:49 +0000 UTC FinishedAt: 2026-07-25 23:38:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowctgr6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ed6dc972c19ff9ffca504f5739848da4275219e3","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_ROUTER_PREF","IPV6_ROUTE_INFO"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip6_del_rt_reason","fib6_del","inet6_rt_notify","rt6_route_rcv","addrconf_prefix_rcv","ndisc_rcv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ed6dc972c19ff9ffca504f5739848da4275219e3","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_ROUTER_PREF","IPV6_ROUTE_INFO"],"series_id":"8b675e05-5e2a-4eda-b427-9920c5ddb3f9","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-07-25 23:38:59 +0000 UTC FinishedAt: 2026-07-26 02:41:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowctgr6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ed6dc972c19ff9ffca504f5739848da4275219e3","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_ROUTER_PREF","IPV6_ROUTE_INFO"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip6_del_rt_reason","fib6_del","inet6_rt_notify","rt6_route_rcv","addrconf_prefix_rcv","ndisc_rcv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ed6dc972c19ff9ffca504f5739848da4275219e3","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_ROUTER_PREF","IPV6_ROUTE_INFO"],"series_id":"8b675e05-5e2a-4eda-b427-9920c5ddb3f9","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-07-25 23:38:59 +0000 UTC FinishedAt: 2026-07-26 02:41:31 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*8d37064e-8218-4ef4-b447-9b7912ba4eba,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*098d4a07-1970-4516-bd03-9a41aebc4304,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-workflowctgr6/series-workflowctgr6-build-action-3159334035/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-workflowctgr6/series-workflowctgr6-build-action-2468241700/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-workflowctgr6/series-workflowctgr6-convert-artifact-4209047697/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,}