Name: series-workflow7f4nr Phase: Succeeded StartedAt: 2026-07-02 16:49:32 +0000 UTC FinishedAt: 2026-07-02 21:39:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7f4nr[0] Phase: Succeeded StartedAt: 2026-07-02 16:49:33 +0000 UTC FinishedAt: 2026-07-02 17:03:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7f4nr[0].run-triage Phase: Succeeded StartedAt: 2026-07-02 16:49:33 +0000 UTC FinishedAt: 2026-07-02 17:03:51 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "nf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git", "commit_hash": "f456c1922c49e6be5ce407ddb74a6e61af5b65cf", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NETFILTER", "IP_SET", "IP_SET_HASH_NET", "IP_SET_HASH_NETNET", "IP_SET_HASH_NETPORT", "IP_SET_HASH_NETIFACE", "IP_SET_HASH_IPPORTNET", "IP_SET_HASH_NETPORTNET" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "nf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git", "commit_hash": "f456c1922c49e6be5ce407ddb74a6e61af5b65cf", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NETFILTER", "IP_SET", "IP_SET_HASH_NET", "IP_SET_HASH_NETNET", "IP_SET_HASH_NETPORT", "IP_SET_HASH_NETIFACE", "IP_SET_HASH_IPPORTNET", "IP_SET_HASH_NETPORTNET" ], "series_id": "23c1062d-3d3a-4533-b7ff-a1c41c990646" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "hash_net4_add", "hash_net4_del", "hash_net4_test", "hash_net4_resize", "hash_net4_gc", "hash_net4_flush", "hash_net4_destroy", "hash_net4_uref", "hash_net4_kadt", "hash_net4_uadt", "hash_net_create", "hash_net6_add", "hash_net6_del", "hash_net6_test", "hash_net6_resize", "hash_net6_gc", "hash_net6_kadt", "hash_net6_uadt", "hash_netnet4_add", "hash_netnet4_resize", "hash_netnet4_gc", "hash_netnet4_kadt", "hash_netnet4_uadt", "hash_netnet_create" ], "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+CgkJCTx0ZD4yMDI2LzA3LzAyIDE3OjAxPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVEZJTFRFUiYjMzQ7LAogICAgJiMzNDtJUF9TRVQmIzM0OywKICAgICYjMzQ7SVBfU0VUX0hBU0hfTkVUJiMzNDssCiAgICAmIzM0O0lQX1NFVF9IQVNIX05FVE5FVCYjMzQ7LAogICAgJiMzNDtJUF9TRVRfSEFTSF9ORVRQT1JUJiMzNDssCiAgICAmIzM0O0lQX1NFVF9IQVNIX05FVElGQUNFJiMzNDssCiAgICAmIzM0O0lQX1NFVF9IQVNIX0lQUE9SVE5FVCYjMzQ7LAogICAgJiMzNDtJUF9TRVRfSEFTSF9ORVRQT1JUTkVUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aGFzaF9uZXQ0X2FkZCYjMzQ7LAogICAgJiMzNDtoYXNoX25ldDRfZGVsJiMzNDssCiAgICAmIzM0O2hhc2hfbmV0NF90ZXN0JiMzNDssCiAgICAmIzM0O2hhc2hfbmV0NF9yZXNpemUmIzM0OywKICAgICYjMzQ7aGFzaF9uZXQ0X2djJiMzNDssCiAgICAmIzM0O2hhc2hfbmV0NF9mbHVzaCYjMzQ7LAogICAgJiMzNDtoYXNoX25ldDRfZGVzdHJveSYjMzQ7LAogICAgJiMzNDtoYXNoX25ldDRfdXJlZiYjMzQ7LAogICAgJiMzNDtoYXNoX25ldDRfa2FkdCYjMzQ7LAogICAgJiMzNDtoYXNoX25ldDRfdWFkdCYjMzQ7LAogICAgJiMzNDtoYXNoX25ldF9jcmVhdGUmIzM0OywKICAgICYjMzQ7aGFzaF9uZXQ2X2FkZCYjMzQ7LAogICAgJiMzNDtoYXNoX25ldDZfZGVsJiMzNDssCiAgICAmIzM0O2hhc2hfbmV0Nl90ZXN0JiMzNDssCiAgICAmIzM0O2hhc2hfbmV0Nl9yZXNpemUmIzM0OywKICAgICYjMzQ7aGFzaF9uZXQ2X2djJiMzNDssCiAgICAmIzM0O2hhc2hfbmV0Nl9rYWR0JiMzNDssCiAgICAmIzM0O2hhc2hfbmV0Nl91YWR0JiMzNDssCiAgICAmIzM0O2hhc2hfbmV0bmV0NF9hZGQmIzM0OywKICAgICYjMzQ7aGFzaF9uZXRuZXQ0X3Jlc2l6ZSYjMzQ7LAogICAgJiMzNDtoYXNoX25ldG5ldDRfZ2MmIzM0OywKICAgICYjMzQ7aGFzaF9uZXRuZXQ0X2thZHQmIzM0OywKICAgICYjMzQ7aGFzaF9uZXRuZXQ0X3VhZHQmIzM0OywKICAgICYjMzQ7aGFzaF9uZXRuZXRfY3JlYXRlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjb3JlIGhhc2ggdGFibGUgaW1wbGVtZW50YXRpb24gZm9yIG5ldGZpbHRlciBpcHNldCAoc3BlY2lmaWNhbGx5IHRoZSBnZW5lcmljIGhhc2ggdHlwZXMgaW4gaXBfc2V0X2hhc2hfZ2VuLmgpLiBJdCBjaGFuZ2VzIGhvdyBDSURSIG5ldHdvcmtzIGFyZSBzdG9yZWQsIG1vdmluZyBmcm9tIGEgZml4ZWQtc2l6ZSBhcnJheSB0byBhbiBSQ1UtcHJvdGVjdGVkIGR5bmFtaWNhbGx5IGFsbG9jYXRlZCBhcnJheSwgYW5kIHVwZGF0ZXMgdGhlIHJlc2l6aW5nIGFuZCBnYXJiYWdlIGNvbGxlY3Rpb24gbG9naWMgdG8gdXNlIGEgbmV3IGxvY2sgYW5kIGEgYHJlc2l6aW5nYCBmbGFnLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljIGFuZCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSB0aGUgbmV3IFJDVSBhbmQgbG9ja2luZyBsb2dpYyBkb2VzbiYjMzk7dCBpbnRyb2R1Y2UgdXNlLWFmdGVyLWZyZWUsIG1lbW9yeSBsZWFrcywgb3IgcmFjZSBjb25kaXRpb25zLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDE3OjAxPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgMGJmYzMzM2VkYTYzNmNhYmMwZDFiNzU5MjRmZGRiMGJiYTUxOTA4MVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgSnVsIDIgMTc6MDE6MTQgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaCBiL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmhcbmluZGV4IGRlZGY1OWI2NjFkZGYzLi4yYjQ3M2FjYWQ1MGNiOCAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmhcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmhcbkBAIC03NSwxNSAmIzQzOzc1LDE3IEBAIHN0cnVjdCBoYnVja2V0IHtcbiBzdHJ1Y3QgaHRhYmxlX2djIHtcbiBcdHN0cnVjdCBkZWxheWVkX3dvcmsgZHdvcms7XG4gXHRzdHJ1Y3QgaXBfc2V0ICpzZXQ7XHQvKiBTZXQgdGhlIGdjIGJlbG9uZ3MgdG8gKi9cbiYjNDM7XHRzcGlubG9ja190IGxvY2s7XHQvKiBMb2NrIHRvIGV4Y2x1ZGUgZ2MgYW5kIHJlc2l6ZSAqL1xuIFx0dTMyIHJlZ2lvbjtcdFx0LyogTGFzdCBnYyBydW4gcG9zaXRpb24gKi9cbiB9O1xuIFxuIC8qIFRoZSBoYXNoIHRhYmxlOiB0aGUgdGFibGUgc2l6ZSBzdG9yZWQgaGVyZSBpbiBvcmRlciB0byBtYWtlIHJlc2l6aW5nIGVhc3kgKi9cbiBzdHJ1Y3QgaHRhYmxlIHtcbi1cdGF0b21pY190IHJlZjtcdFx0LyogUmVmZXJlbmNlcyBmb3IgcmVzaXppbmcgKi9cbiYjNDM7XHRib29sIHJlc2l6aW5nO1x0XHQvKiBNYXJrIG9uZ29pbmcgcmVzaXplICovXG4gXHRhdG9taWNfdCB1cmVmO1x0XHQvKiBSZWZlcmVuY2VzIGZvciBkdW1waW5nIGFuZCBnYyAqL1xuIFx0dTggaHRhYmxlX2JpdHM7XHRcdC8qIHNpemUgb2YgaGFzaCB0YWJsZSA9PSAyXmh0YWJsZV9iaXRzICovXG4gXHR1MzIgbWF4ZWxlbTtcdFx0LyogTWF4ZWxlbSBwZXIgcmVnaW9uICovXG4mIzQzO1x0c3RydWN0IGxpc3RfaGVhZCBhZDtcdC8qIFJlc2l6ZSBhZGR8ZGVsIGJhY2tsaXN0ICovXG4gXHRzdHJ1Y3QgaXBfc2V0X3JlZ2lvbiAqaHJlZ2lvbjtcdC8qIFJlZ2lvbiBsb2NrcyBhbmQgZXh0IHNpemVzICovXG4gXHRzdHJ1Y3QgaGJ1Y2tldCBfX3JjdSAqYnVja2V0W107IC8qIGhhc2h0YWJsZSBidWNrZXRzICovXG4gfTtcbkBAIC05Nyw5ICYjNDM7OTksMTYgQEAgc3RydWN0IGh0YWJsZSB7XG4gI2VuZGlmXG4gXG4gLyogQm9vay1rZWVwaW5nIG9mIHRoZSBwcmVmaXhlcyBhZGRlZCB0byB0aGUgc2V0ICovXG4mIzQzO3N0cnVjdCBuZXRfcHJlZml4IHtcbiYjNDM7XHR1OCBjaWRyO1x0XHRcdC8qIHRoZSBjaWRyIHZhbHVlICovXG4mIzQzO1x0dTMyIGNvdW50O1x0XHRcdC8qIG51bWJlciBvZiBlbGVtZW50cyBvZiB0aGlzIGNpZHIgKi9cbiYjNDM7fTtcbiYjNDM7XG4gc3RydWN0IG5ldF9wcmVmaXhlcyB7XG4tXHR1MzIgbmV0c1tJUFNFVF9ORVRfQ09VTlRdOyAvKiBudW1iZXIgb2YgZWxlbWVudHMgZm9yIHRoaXMgY2lkciAqL1xuLVx0dTggY2lkcltJUFNFVF9ORVRfQ09VTlRdOyAgLyogdGhlIGNpZHIgdmFsdWUgKi9cbiYjNDM7XHRzdHJ1Y3QgcmN1X2hlYWQgcmN1O1xuJiM0MztcdHU4IGxlbjtcbiYjNDM7XHRzdHJ1Y3QgbmV0X3ByZWZpeCBuZXRzW11cbiYjNDM7XHRcdF9fYWxpZ25lZChfX2FsaWdub2ZfXyh1NjQpKTtcbiB9O1xuIFxuIC8qIENvbXB1dGUgdGhlIGhhc2ggdGFibGUgc2l6ZSAqL1xuQEAgLTEyNSwxMSAmIzQzOzEzNCw2IEBAIGh0YWJsZV9zaXplKHU4IGhiaXRzKVxuICNlbHNlXG4gI2RlZmluZSBfX0NJRFIoY2lkciwgaSlcdFx0KGNpZHIpXG4gI2VuZGlmXG4tXG4tLyogY2lkciAmIzQzOyAxIGlzIHN0b3JlZCBpbiBuZXRfcHJlZml4ZXMgdG8gc3VwcG9ydCAvMCAqL1xuLSNkZWZpbmUgTkNJRFJfUFVUKGNpZHIpXHRcdCgoY2lkcikgJiM0MzsgMSlcbi0jZGVmaW5lIE5DSURSX0dFVChjaWRyKVx0XHQoKGNpZHIpIC0gMSlcbi1cbiAjaWZkZWYgSVBfU0VUX0hBU0hfV0lUSF9ORVRTX1BBQ0tFRFxuIC8qIFdoZW4gY2lkciBpcyBwYWNrZWQgd2l0aCBub21hdGNoLCBjaWRyIC0gMSBpcyBzdG9yZWQgaW4gdGhlIGRhdGEgZW50cnkgKi9cbiAjZGVmaW5lIERDSURSX1BVVChjaWRyKVx0XHQoKGNpZHIpIC0gMSlcbkBAIC0xMzksMjEgJiM0MzsxNDMsOSBAQCBodGFibGVfc2l6ZSh1OCBoYml0cylcbiAjZGVmaW5lIERDSURSX0dFVChjaWRyLCBpKVx0X19DSURSKGNpZHIsIGkpXG4gI2VuZGlmXG4gXG4tI2RlZmluZSBJTklUX0NJRFIoY2lkciwgaG9zdF9tYXNrKVx0XFxcbi1cdERDSURSX1BVVCgoKGNpZHIpID8gTkNJRFJfR0VUKGNpZHIpIDogaG9zdF9tYXNrKSlcbiYjNDM7I2RlZmluZSBJTklUX0NJRFIobiwgaG9zdF9tYXNrKVx0XFxcbiYjNDM7XHREQ0lEUl9QVVQoKG4pLVx1MDAzZWxlbiA/IChuKS1cdTAwM2VuZXRzWzBdLmNpZHIgOiBob3N0X21hc2spXG4gXG4tI2lmZGVmIElQX1NFVF9IQVNIX1dJVEhfTkVUMFxuLS8qIGNpZHIgZnJvbSAwIHRvIEhPU1RfTUFTSyB2YWx1ZSBhbmQgYyA9IGNpZHIgJiM0MzsgMSAqL1xuLSNkZWZpbmUgTkxFTlx0XHRcdChIT1NUX01BU0sgJiM0MzsgMSlcbi0jZGVmaW5lIENJRFJfUE9TKGMpXHRcdCgoYykgLSAxKVxuLSNlbHNlXG4tLyogY2lkciBmcm9tIDEgdG8gSE9TVF9NQVNLIHZhbHVlIGFuZCBjID0gY2lkciAmIzQzOyAxICovXG4tI2RlZmluZSBOTEVOXHRcdFx0SE9TVF9NQVNLXG4tI2RlZmluZSBDSURSX1BPUyhjKVx0XHQoKGMpIC0gMilcbi0jZW5kaWZcbi1cbi0jZWxzZVxuLSNkZWZpbmUgTkxFTlx0XHRcdDBcbiAjZW5kaWYgLyogSVBfU0VUX0hBU0hfV0lUSF9ORVRTICovXG4gXG4gI2RlZmluZSBTRVRfRUxFTV9FWFBJUkVEKHNldCwgZClcdFxcXG5AQCAtMjkwLDYgJiM0MzsyODIsNyBAQCBzdGF0aWMgY29uc3QgdW5pb24gbmZfaW5ldF9hZGRyIHplcm9tYXNrID0ge307XG4gLyogVGhlIGdlbmVyaWMgaGFzaCBzdHJ1Y3R1cmUgKi9cbiBzdHJ1Y3QgaHR5cGUge1xuIFx0c3RydWN0IGh0YWJsZSBfX3JjdSAqdGFibGU7IC8qIHRoZSBoYXNoIHRhYmxlICovXG4mIzQzO1x0c3RydWN0IG5ldF9wcmVmaXhlcyBfX3JjdSAqcm5ldHNbSVBTRVRfTkVUX0NPVU5UXTsgLyogY2lkciBwcmVmaXhlcyAqL1xuIFx0c3RydWN0IGh0YWJsZV9nYyBnYztcdC8qIGdjIHdvcmtxdWV1ZSAqL1xuIFx0dTMyIG1heGVsZW07XHRcdC8qIG1heCBlbGVtZW50cyBpbiB0aGUgaGFzaCAqL1xuIFx0dTMyIGluaXR2YWw7XHRcdC8qIHJhbmRvbSBqaGFzaCBpbml0IHZhbHVlICovXG5AQCAtMzAxLDExICYjNDM7Mjk0LDEwIEBAIHN0cnVjdCBodHlwZSB7XG4gXHR1OCBuZXRtYXNrO1x0XHQvKiBuZXRtYXNrIHZhbHVlIGZvciBzdWJuZXRzIHRvIHN0b3JlICovXG4gXHR1bmlvbiBuZl9pbmV0X2FkZHIgYml0bWFzaztcdC8qIHN0b3JlcyBiaXRtYXNrICovXG4gI2VuZGlmXG4tXHRzdHJ1Y3QgbGlzdF9oZWFkIGFkO1x0LyogUmVzaXplIGFkZHxkZWwgYmFja2xpc3QgKi9cbiYjNDM7XHQvKiBCZWNhdXNlICYjMzk7bmV4dCYjMzk7IGlzIElQdjQvSVB2NiBkZXBlbmRlbnQsIG5vIGVsZW1lbnRzIG9mIHRoaXNcbiYjNDM7XHQgKiBzdHJ1Y3R1cmUgYW5kIHJlZmVycmVkIGluIGNyZWF0ZSgpIG1heSBjb21lIGFmdGVyICYjMzk7bmV4dCYjMzk7LlxuJiM0MztcdCAqL1xuIFx0c3RydWN0IG10eXBlX2VsZW0gbmV4dDsgLyogdGVtcG9yYXJ5IHN0b3JhZ2UgZm9yIHVhZGQgKi9cbi0jaWZkZWYgSVBfU0VUX0hBU0hfV0lUSF9ORVRTXG4tXHRzdHJ1Y3QgbmV0X3ByZWZpeGVzIG5ldHNbTkxFTl07IC8qIGJvb2sta2VlcGluZyBvZiBwcmVmaXhlcyAqL1xuLSNlbmRpZlxuIH07XG4gXG4gLyogQUREfERFTCBlbnRyaWVzIHNhdmVkIGR1cmluZyByZXNpemUgKi9cbkBAIC0zMjIsNTAgJiM0MzszMTQsODggQEAgc3RydWN0IG10eXBlX3Jlc2l6ZV9hZCB7XG4gLyogTmV0d29yayBjaWRyIHNpemUgYm9vayBrZWVwaW5nIHdoZW4gdGhlIGhhc2ggc3RvcmVzIGRpZmZlcmVudFxuICAqIHNpemVkIG5ldHdvcmtzLiBjaWRyID09IHJlYWwgY2lkciAmIzQzOyAxIHRvIHN1cHBvcnQgLzAuXG4gICovXG4tc3RhdGljIHZvaWRcbiYjNDM7c3RhdGljIGludFxuIG10eXBlX2FkZF9jaWRyKHN0cnVjdCBpcF9zZXQgKnNldCwgc3RydWN0IGh0eXBlICpoLCB1OCBjaWRyLCB1OCBuKVxuIHtcbi1cdGludCBpLCBqO1xuJiM0MztcdHN0cnVjdCBuZXRfcHJlZml4ZXMgKm5ldHMsICp0bXA7XG4mIzQzO1x0aW50IGksIGosIGZvdW5kLCBsZW4gPSAwLCByZXQgPSAwO1xuIFxuIFx0c3Bpbl9sb2NrX2JoKFx1MDAyNnNldC1cdTAwM2Vsb2NrKTtcbiYjNDM7XHRuZXRzID0gX19pcHNldF9kZXJlZmVyZW5jZShoLVx1MDAzZXJuZXRzW25dKTtcbiBcdC8qIEFkZCBpbiBpbmNyZWFzaW5nIHByZWZpeCBvcmRlciwgc28gbGFyZ2VyIGNpZHIgZmlyc3QgKi9cbi1cdGZvciAoaSA9IDAsIGogPSAtMTsgaSBcdTAwM2MgTkxFTiBcdTAwMjZcdTAwMjYgaC1cdTAwM2VuZXRzW2ldLmNpZHJbbl07IGkmIzQzOyYjNDM7KSB7XG4tXHRcdGlmIChqICE9IC0xKSB7XG4mIzQzO1x0Zm9yIChpID0gMCwgZm91bmQgPSAtMTsgaSBcdTAwM2MgbmV0cy1cdTAwM2VsZW47IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRpZiAobmV0cy1cdTAwM2VuZXRzW2ldLmNvdW50KVxuJiM0MztcdFx0XHRsZW4mIzQzOyYjNDM7O1xuJiM0MztcdFx0aWYgKGZvdW5kICE9IC0xKSB7XG4gXHRcdFx0Y29udGludWU7XG4tXHRcdH0gZWxzZSBpZiAoaC1cdTAwM2VuZXRzW2ldLmNpZHJbbl0gXHUwMDNjIGNpZHIpIHtcbi1cdFx0XHRqID0gaTtcbi1cdFx0fSBlbHNlIGlmIChoLVx1MDAzZW5ldHNbaV0uY2lkcltuXSA9PSBjaWRyKSB7XG4tXHRcdFx0aC1cdTAwM2VuZXRzW0NJRFJfUE9TKGNpZHIpXS5uZXRzW25dJiM0MzsmIzQzOztcbiYjNDM7XHRcdH0gZWxzZSBpZiAobmV0cy1cdTAwM2VuZXRzW2ldLmNpZHIgXHUwMDNjIGNpZHIpIHtcbiYjNDM7XHRcdFx0Zm91bmQgPSBpO1xuJiM0MztcdFx0fSBlbHNlIGlmIChuZXRzLVx1MDAzZW5ldHNbaV0uY2lkciA9PSBjaWRyKSB7XG4mIzQzO1x0XHRcdG5ldHMtXHUwMDNlbmV0c1tpXS5jb3VudCYjNDM7JiM0Mzs7XG4gXHRcdFx0Z290byB1bmxvY2s7XG4gXHRcdH1cbiBcdH1cbi1cdGlmIChqICE9IC0xKSB7XG4tXHRcdGZvciAoOyBpIFx1MDAzZSBqOyBpLS0pXG4tXHRcdFx0aC1cdTAwM2VuZXRzW2ldLmNpZHJbbl0gPSBoLVx1MDAzZW5ldHNbaSAtIDFdLmNpZHJbbl07XG4mIzQzO1x0bGVuJiM0MzsmIzQzOztcbiYjNDM7XHR0bXAgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgbmV0X3ByZWZpeGVzKSAmIzQzO1xuJiM0MztcdFx0ICAgICAgbGVuICogc2l6ZW9mKHN0cnVjdCBuZXRfcHJlZml4KSwgR0ZQX0FUT01JQyk7XG4mIzQzO1x0aWYgKCF0bXApXG4mIzQzO1x0XHRyZXR1cm4gLUVOT01FTTtcbiYjNDM7XHR0bXAtXHUwMDNlbGVuID0gbGVuO1xuJiM0MztcdGZvciAoaSA9IDAsIGogPSAwOyBpIFx1MDAzYyBuZXRzLVx1MDAzZWxlbjsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdGlmICghbmV0cy1cdTAwM2VuZXRzW2ldLmNvdW50KVxuJiM0MztcdFx0XHRjb250aW51ZTtcbiYjNDM7XHRcdGlmIChpID09IGZvdW5kKSB7XG4mIzQzO1x0XHRcdHRtcC1cdTAwM2VuZXRzW2pdLmNpZHIgPSBjaWRyO1xuJiM0MztcdFx0XHR0bXAtXHUwMDNlbmV0c1tqJiM0MzsmIzQzO10uY291bnQgPSAxO1xuJiM0MztcdFx0fVxuJiM0MztcdFx0dG1wLVx1MDAzZW5ldHNbal0uY2lkciA9IG5ldHMtXHUwMDNlbmV0c1tpXS5jaWRyO1xuJiM0MztcdFx0dG1wLVx1MDAzZW5ldHNbaiYjNDM7JiM0MztdLmNvdW50ID0gbmV0cy1cdTAwM2VuZXRzW2ldLmNvdW50O1xuJiM0MztcdH1cbiYjNDM7XHRpZiAoZm91bmQgPT0gLTEpIHtcbiYjNDM7XHRcdHRtcC1cdTAwM2VuZXRzW2pdLmNpZHIgPSBjaWRyO1xuJiM0MztcdFx0dG1wLVx1MDAzZW5ldHNbal0uY291bnQgPSAxO1xuIFx0fVxuLVx0aC1cdTAwM2VuZXRzW2ldLmNpZHJbbl0gPSBjaWRyO1xuLVx0aC1cdTAwM2VuZXRzW0NJRFJfUE9TKGNpZHIpXS5uZXRzW25dID0gMTtcbiYjNDM7XHRyY3VfYXNzaWduX3BvaW50ZXIoaC1cdTAwM2VybmV0c1tuXSwgdG1wKTtcbiYjNDM7XHRrZnJlZV9yY3UobmV0cywgcmN1KTtcbiB1bmxvY2s6XG4gXHRzcGluX3VubG9ja19iaChcdTAwMjZzZXQtXHUwMDNlbG9jayk7XG4mIzQzO1x0cmV0dXJuIHJldDtcbiB9XG4gXG4gc3RhdGljIHZvaWRcbiBtdHlwZV9kZWxfY2lkcihzdHJ1Y3QgaXBfc2V0ICpzZXQsIHN0cnVjdCBodHlwZSAqaCwgdTggY2lkciwgdTggbilcbiB7XG4tXHR1OCBpLCBqLCBuZXRfZW5kID0gTkxFTiAtIDE7XG4mIzQzO1x0c3RydWN0IG5ldF9wcmVmaXhlcyAqbmV0cywgKnRtcDtcbiYjNDM7XHR1OCBpLCBqLCBmb3VuZCwgbGVuID0gMDtcbiBcbiBcdHNwaW5fbG9ja19iaChcdTAwMjZzZXQtXHUwMDNlbG9jayk7XG4tXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBOTEVOOyBpJiM0MzsmIzQzOykge1xuLVx0XHRpZiAoaC1cdTAwM2VuZXRzW2ldLmNpZHJbbl0gIT0gY2lkcilcbi1cdFx0XHRjb250aW51ZTtcbi1cdFx0aC1cdTAwM2VuZXRzW0NJRFJfUE9TKGNpZHIpXS5uZXRzW25dLS07XG4tXHRcdGlmIChoLVx1MDAzZW5ldHNbQ0lEUl9QT1MoY2lkcildLm5ldHNbbl0gXHUwMDNlIDApXG4tXHRcdFx0Z290byB1bmxvY2s7XG4tXHRcdGZvciAoaiA9IGk7IGogXHUwMDNjIG5ldF9lbmQgXHUwMDI2XHUwMDI2IGgtXHUwMDNlbmV0c1tqXS5jaWRyW25dOyBqJiM0MzsmIzQzOylcbi1cdFx0XHRoLVx1MDAzZW5ldHNbal0uY2lkcltuXSA9IGgtXHUwMDNlbmV0c1tqICYjNDM7IDFdLmNpZHJbbl07XG4tXHRcdGgtXHUwMDNlbmV0c1tqXS5jaWRyW25dID0gMDtcbiYjNDM7XHRuZXRzID0gX19pcHNldF9kZXJlZmVyZW5jZShoLVx1MDAzZXJuZXRzW25dKTtcbiYjNDM7XHRmb3IgKGkgPSAwLCBmb3VuZCA9IC0xOyBpIFx1MDAzYyBuZXRzLVx1MDAzZWxlbjsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdGlmIChuZXRzLVx1MDAzZW5ldHNbaV0uY291bnQpXG4mIzQzO1x0XHRcdGxlbiYjNDM7JiM0Mzs7XG4mIzQzO1x0XHRpZiAobmV0cy1cdTAwM2VuZXRzW2ldLmNpZHIgPT0gY2lkcilcbiYjNDM7XHRcdFx0Zm91bmQgPSBpO1xuJiM0MztcdH1cbiYjNDM7XHRpZiAodW5saWtlbHkoZm91bmQgPT0gLTEpKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcdG5ldHMtXHUwMDNlbmV0c1tmb3VuZF0uY291bnQtLTtcbiYjNDM7XHRpZiAobmV0cy1cdTAwM2VuZXRzW2ZvdW5kXS5jb3VudClcbiBcdFx0Z290byB1bmxvY2s7XG4mIzQzO1x0bGVuLS07XG4mIzQzO1x0dG1wID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IG5ldF9wcmVmaXhlcykgJiM0MztcbiYjNDM7XHRcdCAgICAgIGxlbiAqIHNpemVvZihzdHJ1Y3QgbmV0X3ByZWZpeCksIEdGUF9BVE9NSUMpO1xuJiM0MztcdGlmICghdG1wKVxuJiM0MztcdFx0LyogTGVhdmUgYSBob2xlICovXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1x0dG1wLVx1MDAzZWxlbiA9IGxlbjtcbiYjNDM7XHRmb3IgKGkgPSAwLCBqID0gMDsgaSBcdTAwM2MgbmV0cy1cdTAwM2VsZW47IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRpZiAoIW5ldHMtXHUwMDNlbmV0c1tpXS5jb3VudCB8fCBpID09IGZvdW5kKVxuJiM0MztcdFx0XHRjb250aW51ZTtcbiYjNDM7XHRcdHRtcC1cdTAwM2VuZXRzW2pdLmNpZHIgPSBuZXRzLVx1MDAzZW5ldHNbaV0uY2lkcjtcbiYjNDM7XHRcdHRtcC1cdTAwM2VuZXRzW2omIzQzOyYjNDM7XS5jb3VudCA9IG5ldHMtXHUwMDNlbmV0c1tpXS5jb3VudDtcbiBcdH1cbiYjNDM7XHRyY3VfYXNzaWduX3BvaW50ZXIoaC1cdTAwM2VybmV0c1tuXSwgdG1wKTtcbiYjNDM7XHRrZnJlZV9yY3UobmV0cywgcmN1KTtcbiB1bmxvY2s6XG4gXHRzcGluX3VubG9ja19iaChcdTAwMjZzZXQtXHUwMDNlbG9jayk7XG4gfVxuQEAgLTM5OCw2ICYjNDM7NDI4LDkgQEAgc3RhdGljIHZvaWRcbiBtdHlwZV9mbHVzaChzdHJ1Y3QgaXBfc2V0ICpzZXQpXG4ge1xuIFx0c3RydWN0IGh0eXBlICpoID0gc2V0LVx1MDAzZWRhdGE7XG4mIzQzOyNpZmRlZiBJUF9TRVRfSEFTSF9XSVRIX05FVFNcbiYjNDM7XHRzdHJ1Y3QgbmV0X3ByZWZpeGVzICpuZXRzLCAqdG1wO1xuJiM0MzsjZW5kaWZcbiBcdHN0cnVjdCBodGFibGUgKnQ7XG4gXHRzdHJ1Y3QgaGJ1Y2tldCAqbjtcbiBcdHUzMiByLCBpO1xuQEAgLTQyMSw3ICYjNDM7NDU0LDE3IEBAIG10eXBlX2ZsdXNoKHN0cnVjdCBpcF9zZXQgKnNldClcbiBcdFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2dC1cdTAwM2VocmVnaW9uW3JdLmxvY2spO1xuIFx0fVxuICNpZmRlZiBJUF9TRVRfSEFTSF9XSVRIX05FVFNcbi1cdG1lbXNldChoLVx1MDAzZW5ldHMsIDAsIHNpemVvZihoLVx1MDAzZW5ldHMpKTtcbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBJUFNFVF9ORVRfQ09VTlQ7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRuZXRzID0gaXBzZXRfZGVyZWZlcmVuY2VfbmZubChoLVx1MDAzZXJuZXRzW2ldKTtcbiYjNDM7XHRcdHRtcCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBuZXRfcHJlZml4ZXMpLCBHRlBfQVRPTUlDKTtcbiYjNDM7XHRcdGlmICghdG1wKSB7XG4mIzQzO1x0XHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG5ldHMtXHUwMDNlbGVuOyBpJiM0MzsmIzQzOylcbiYjNDM7XHRcdFx0XHRuZXRzLVx1MDAzZW5ldHNbaV0uY291bnQgPSAwO1xuJiM0MztcdFx0fSBlbHNlIHtcbiYjNDM7XHRcdFx0cmN1X2Fzc2lnbl9wb2ludGVyKGgtXHUwMDNlcm5ldHNbaV0sIHRtcCk7XG4mIzQzO1x0XHRcdGtmcmVlX3JjdShuZXRzLCByY3UpO1xuJiM0MztcdFx0fVxuJiM0MztcdH1cbiAjZW5kaWZcbiB9XG4gXG5AQCAtNDI5LDYgJiM0Mzs0NzIsOSBAQCBtdHlwZV9mbHVzaChzdHJ1Y3QgaXBfc2V0ICpzZXQpXG4gc3RhdGljIHZvaWRcbiBtdHlwZV9haGFzaF9kZXN0cm95KHN0cnVjdCBpcF9zZXQgKnNldCwgc3RydWN0IGh0YWJsZSAqdCwgYm9vbCBleHRfZGVzdHJveSlcbiB7XG4mIzQzOyNpZmRlZiBJUF9TRVRfSEFTSF9XSVRIX05FVFNcbiYjNDM7XHRzdHJ1Y3QgaHR5cGUgKmggPSBzZXQtXHUwMDNlZGF0YTtcbiYjNDM7I2VuZGlmXG4gXHRzdHJ1Y3QgaGJ1Y2tldCAqbjtcbiBcdHUzMiBpO1xuIFxuQEAgLTQ0Miw2ICYjNDM7NDg4LDExIEBAIG10eXBlX2FoYXNoX2Rlc3Ryb3koc3RydWN0IGlwX3NldCAqc2V0LCBzdHJ1Y3QgaHRhYmxlICp0LCBib29sIGV4dF9kZXN0cm95KVxuIFx0XHRrZnJlZShuKTtcbiBcdH1cbiBcbiYjNDM7I2lmZGVmIElQX1NFVF9IQVNIX1dJVEhfTkVUU1xuJiM0MztcdGlmIChleHRfZGVzdHJveSlcbiYjNDM7XHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIElQU0VUX05FVF9DT1VOVDsgaSYjNDM7JiM0MzspXG4mIzQzO1x0XHRcdGtmcmVlKGgtXHUwMDNlcm5ldHNbaV0pO1xuJiM0MzsjZW5kaWZcbiBcdGlwX3NldF9mcmVlKHQtXHUwMDNlaHJlZ2lvbik7XG4gXHRpcF9zZXRfZnJlZSh0KTtcbiB9XG5AQCAtNDUxLDEzICYjNDM7NTAyLDE0IEBAIHN0YXRpYyB2b2lkXG4gbXR5cGVfZGVzdHJveShzdHJ1Y3QgaXBfc2V0ICpzZXQpXG4ge1xuIFx0c3RydWN0IGh0eXBlICpoID0gc2V0LVx1MDAzZWRhdGE7XG4mIzQzO1x0c3RydWN0IGh0YWJsZSAqdCA9IChfX2ZvcmNlIHN0cnVjdCBodGFibGUgKiloLVx1MDAzZXRhYmxlO1xuIFx0c3RydWN0IGxpc3RfaGVhZCAqbCwgKmx0O1xuIFxuLVx0bXR5cGVfYWhhc2hfZGVzdHJveShzZXQsIChfX2ZvcmNlIHN0cnVjdCBodGFibGUgKiloLVx1MDAzZXRhYmxlLCB0cnVlKTtcbi1cdGxpc3RfZm9yX2VhY2hfc2FmZShsLCBsdCwgXHUwMDI2aC1cdTAwM2VhZCkge1xuJiM0MztcdGxpc3RfZm9yX2VhY2hfc2FmZShsLCBsdCwgXHUwMDI2dC1cdTAwM2VhZCkge1xuIFx0XHRsaXN0X2RlbChsKTtcbiBcdFx0a2ZyZWUobCk7XG4gXHR9XG4mIzQzO1x0bXR5cGVfYWhhc2hfZGVzdHJveShzZXQsIHQsIHRydWUpO1xuIFx0a2ZyZWUoaCk7XG4gXG4gXHRzZXQtXHUwMDNlZGF0YSA9IE5VTEw7XG5AQCAtNTE0LDggJiM0Mzs1NjYsNyBAQCBtdHlwZV9nY19kbyhzdHJ1Y3QgaXBfc2V0ICpzZXQsIHN0cnVjdCBodHlwZSAqaCwgc3RydWN0IGh0YWJsZSAqdCwgdTMyIHIpXG4gI2lmZGVmIElQX1NFVF9IQVNIX1dJVEhfTkVUU1xuIFx0XHRcdGZvciAoayA9IDA7IGsgXHUwMDNjIElQU0VUX05FVF9DT1VOVDsgayYjNDM7JiM0MzspXG4gXHRcdFx0XHRtdHlwZV9kZWxfY2lkcihzZXQsIGgsXG4tXHRcdFx0XHRcdE5DSURSX1BVVChEQ0lEUl9HRVQoZGF0YS1cdTAwM2VjaWRyLCBrKSksXG4tXHRcdFx0XHRcdGspO1xuJiM0MztcdFx0XHRcdFx0RENJRFJfR0VUKGRhdGEtXHUwMDNlY2lkciwgayksIGspO1xuICNlbmRpZlxuIFx0XHRcdHQtXHUwMDNlaHJlZ2lvbltyXS5lbGVtZW50cy0tO1xuIFx0XHRcdGlwX3NldF9leHRfZGVzdHJveShzZXQsIGRhdGEpO1xuQEAgLTU2OSw5ICYjNDM7NjIwLDEwIEBAIG10eXBlX2djKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbiBcdHNldCA9IGdjLVx1MDAzZXNldDtcbiBcdGggPSBzZXQtXHUwMDNlZGF0YTtcbiBcbi1cdHNwaW5fbG9ja19iaChcdTAwMjZzZXQtXHUwMDNlbG9jayk7XG4tXHR0ID0gaXBzZXRfZGVyZWZlcmVuY2Vfc2V0KGgtXHUwMDNldGFibGUsIHNldCk7XG4mIzQzO1x0cmN1X3JlYWRfbG9ja19iaCgpO1xuJiM0MztcdHQgPSByY3VfZGVyZWZlcmVuY2VfYmgoaC1cdTAwM2V0YWJsZSk7XG4gXHRhdG9taWNfaW5jKFx1MDAyNnQtXHUwMDNldXJlZik7XG4mIzQzO1x0cmN1X3JlYWRfdW5sb2NrX2JoKCk7XG4gXHRudW1vZl9sb2NrcyA9IGFoYXNoX251bW9mX2xvY2tzKHQtXHUwMDNlaHRhYmxlX2JpdHMpO1xuIFx0ciA9IGdjLVx1MDAzZXJlZ2lvbiYjNDM7JiM0Mzs7XG4gXHRpZiAociBcdTAwM2U9IG51bW9mX2xvY2tzKSB7XG5AQCAtNTgwLDExICYjNDM7NjMyLDEzIEBAIG10eXBlX2djKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbiBcdG5leHRfcnVuID0gKElQU0VUX0dDX1BFUklPRChzZXQtXHUwMDNldGltZW91dCkgKiBIWikgLyBudW1vZl9sb2NrcztcbiBcdGlmIChuZXh0X3J1biBcdTAwM2MgSFovMTApXG4gXHRcdG5leHRfcnVuID0gSFovMTA7XG4tXHRzcGluX3VubG9ja19iaChcdTAwMjZzZXQtXHUwMDNlbG9jayk7XG4gXG4tXHRtdHlwZV9nY19kbyhzZXQsIGgsIHQsIHIpO1xuJiM0MztcdHNwaW5fbG9ja19iaChcdTAwMjZnYy1cdTAwM2Vsb2NrKTtcbiYjNDM7XHRpZiAoIXQtXHUwMDNlcmVzaXppbmcpXG4mIzQzO1x0XHRtdHlwZV9nY19kbyhzZXQsIGgsIHQsIHIpO1xuJiM0MztcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNmdjLVx1MDAzZWxvY2spO1xuIFxuLVx0aWYgKGF0b21pY19kZWNfYW5kX3Rlc3QoXHUwMDI2dC1cdTAwM2V1cmVmKSBcdTAwMjZcdTAwMjYgYXRvbWljX3JlYWQoXHUwMDI2dC1cdTAwM2VyZWYpKSB7XG4mIzQzO1x0aWYgKGF0b21pY19kZWNfYW5kX3Rlc3QoXHUwMDI2dC1cdTAwM2V1cmVmKSBcdTAwMjZcdTAwMjYgdC1cdTAwM2VyZXNpemluZykge1xuIFx0XHRwcl9kZWJ1ZyhcJiMzNDtUYWJsZSBkZXN0cm95IGFmdGVyIHJlc2l6ZSBieSBleHBpcmU6ICVwXFxuXCYjMzQ7LCB0KTtcbiBcdFx0bXR5cGVfYWhhc2hfZGVzdHJveShzZXQsIHQsIGZhbHNlKTtcbiBcdH1cbkBAIC02NjgsMTUgJiM0Mzs3MjIsMTggQEAgbXR5cGVfcmVzaXplKHN0cnVjdCBpcF9zZXQgKnNldCwgYm9vbCByZXRyaWVkKVxuIFx0fVxuIFx0dC1cdTAwM2VodGFibGVfYml0cyA9IGh0YWJsZV9iaXRzO1xuIFx0dC1cdTAwM2VtYXhlbGVtID0gaC1cdTAwM2VtYXhlbGVtIC8gYWhhc2hfbnVtb2ZfbG9ja3MoaHRhYmxlX2JpdHMpO1xuJiM0MztcdElOSVRfTElTVF9IRUFEKFx1MDAyNnQtXHUwMDNlYWQpO1xuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgYWhhc2hfbnVtb2ZfbG9ja3MoaHRhYmxlX2JpdHMpOyBpJiM0MzsmIzQzOylcbiBcdFx0c3Bpbl9sb2NrX2luaXQoXHUwMDI2dC1cdTAwM2VocmVnaW9uW2ldLmxvY2spO1xuIFxuIFx0LyogVGhlcmUgY2FuJiMzOTt0IGJlIGFub3RoZXIgcGFyYWxsZWwgcmVzaXppbmcsXG4tXHQgKiBidXQgZHVtcGluZywgZ2MsIGtlcm5lbCBzaWRlIGFkZC9kZWwgYXJlIHBvc3NpYmxlXG4mIzQzO1x0ICogYnV0IGR1bXBpbmcgYW5kIGtlcm5lbCBzaWRlIGFkZC9kZWwgYXJlIHBvc3NpYmxlXG4gXHQgKi9cbiBcdG9yaWcgPSBpcHNldF9kZXJlZmVyZW5jZV9iaF9uZm5sKGgtXHUwMDNldGFibGUpO1xuLVx0YXRvbWljX3NldChcdTAwMjZvcmlnLVx1MDAzZXJlZiwgMSk7XG4gXHRhdG9taWNfaW5jKFx1MDAyNm9yaWctXHUwMDNldXJlZik7XG4mIzQzO1x0c3Bpbl9sb2NrX2JoKFx1MDAyNmgtXHUwMDNlZ2MubG9jayk7XG4mIzQzO1x0b3JpZy1cdTAwM2VyZXNpemluZyA9IHRydWU7XG4mIzQzO1x0c3Bpbl91bmxvY2tfYmgoXHUwMDI2aC1cdTAwM2VnYy5sb2NrKTtcbiBcdHByX2RlYnVnKFwmIzM0O2F0dGVtcHQgdG8gcmVzaXplIHNldCAlcyBmcm9tICV1IHRvICV1LCB0ICVwXFxuXCYjMzQ7LFxuIFx0XHQgc2V0LVx1MDAzZW5hbWUsIG9yaWctXHUwMDNlaHRhYmxlX2JpdHMsIGh0YWJsZV9iaXRzLCBvcmlnKTtcbiBcdGZvciAociA9IDA7IHIgXHUwMDNjIGFoYXNoX251bW9mX2xvY2tzKG9yaWctXHUwMDNlaHRhYmxlX2JpdHMpOyByJiM0MzsmIzQzOykge1xuQEAgLTc2OCw3ICYjNDM7ODI1LDcgQEAgbXR5cGVfcmVzaXplKHN0cnVjdCBpcF9zZXQgKnNldCwgYm9vbCByZXRyaWVkKVxuIFx0ICogS2VybmVsLXNpZGUgYWRkIGNhbm5vdCB0cmlnZ2VyIGEgcmVzaXplIGFuZCB1c2Vyc3BhY2UgYWN0aW9uc1xuIFx0ICogYXJlIHNlcmlhbGl6ZWQgYnkgdGhlIG11dGV4LlxuIFx0ICovXG4tXHRsaXN0X2Zvcl9lYWNoX3NhZmUobCwgbHQsIFx1MDAyNmgtXHUwMDNlYWQpIHtcbiYjNDM7XHRsaXN0X2Zvcl9lYWNoX3NhZmUobCwgbHQsIFx1MDAyNm9yaWctXHUwMDNlYWQpIHtcbiBcdFx0eCA9IGxpc3RfZW50cnkobCwgc3RydWN0IG10eXBlX3Jlc2l6ZV9hZCwgbGlzdCk7XG4gXHRcdGlmICh4LVx1MDAzZWFkID09IElQU0VUX0FERCkge1xuIFx0XHRcdG10eXBlX2FkZChzZXQsIFx1MDAyNngtXHUwMDNlZCwgXHUwMDI2eC1cdTAwM2VleHQsIFx1MDAyNngtXHUwMDNlbWV4dCwgeC1cdTAwM2VmbGFncyk7XG5AQCAtNzkyLDExICYjNDM7ODQ5LDI0IEBAIG10eXBlX3Jlc2l6ZShzdHJ1Y3QgaXBfc2V0ICpzZXQsIGJvb2wgcmV0cmllZClcbiBcbiBjbGVhbnVwOlxuIFx0cmN1X3JlYWRfdW5sb2NrX2JoKCk7XG4tXHRhdG9taWNfc2V0KFx1MDAyNm9yaWctXHUwMDNlcmVmLCAwKTtcbiYjNDM7XHRzcGluX2xvY2tfYmgoXHUwMDI2aC1cdTAwM2VnYy5sb2NrKTtcbiYjNDM7XHRvcmlnLVx1MDAzZXJlc2l6aW5nID0gZmFsc2U7XG4mIzQzO1x0c3Bpbl91bmxvY2tfYmgoXHUwMDI2aC1cdTAwM2VnYy5sb2NrKTtcbiYjNDM7XHQvKiBNYWtlIHN1cmUgcGFyYWxsZWwgcmVhZGVycyBzZWUgdGhhdCBvcmlnLVx1MDAzZXJlc2l6aW5nIGlzIGZhbHNlXG4mIzQzO1x0ICogYmVmb3JlIHdlIGRlY3JlbWVudCB1cmVmICovXG4mIzQzO1x0c3luY2hyb25pemVfcmN1KCk7XG4gXHRhdG9taWNfZGVjKFx1MDAyNm9yaWctXHUwMDNldXJlZik7XG4gXHRtdHlwZV9haGFzaF9kZXN0cm95KHNldCwgdCwgZmFsc2UpO1xuIFx0aWYgKHJldCA9PSAtRUFHQUlOKVxuIFx0XHRnb3RvIHJldHJ5O1xuJiM0MztcbiYjNDM7XHQvKiBDbGVhbnVwIHRoZSBiYWNrbG9nIG9mIEFERC9ERUwgZWxlbWVudHMgKi9cbiYjNDM7XHRzcGluX2xvY2tfYmgoXHUwMDI2c2V0LVx1MDAzZWxvY2spO1xuJiM0MztcdGxpc3RfZm9yX2VhY2hfc2FmZShsLCBsdCwgXHUwMDI2b3JpZy1cdTAwM2VhZCkge1xuJiM0MztcdFx0bGlzdF9kZWwobCk7XG4mIzQzO1x0XHRrZnJlZShsKTtcbiYjNDM7XHR9XG4mIzQzO1x0c3Bpbl91bmxvY2tfYmgoXHUwMDI2c2V0LVx1MDAzZWxvY2spO1xuIFx0Z290byBvdXQ7XG4gXG4gaGJ3YXJuOlxuQEAgLTg2MCwxNSAmIzQzOzkzMCwxMyBAQCBtdHlwZV9hZGQoc3RydWN0IGlwX3NldCAqc2V0LCB2b2lkICp2YWx1ZSwgY29uc3Qgc3RydWN0IGlwX3NldF9leHQgKmV4dCxcbiBcdGtleSA9IEhLRVkodmFsdWUsIGgtXHUwMDNlaW5pdHZhbCwgdC1cdTAwM2VodGFibGVfYml0cyk7XG4gXHRyID0gYWhhc2hfcmVnaW9uKGtleSk7XG4gXHRhdG9taWNfaW5jKFx1MDAyNnQtXHUwMDNldXJlZik7XG4mIzQzO1x0cmN1X3JlYWRfdW5sb2NrX2JoKCk7XG4gXHRlbGVtZW50cyA9IHQtXHUwMDNlaHJlZ2lvbltyXS5lbGVtZW50cztcbiBcdG1heGVsZW0gPSB0LVx1MDAzZW1heGVsZW07XG4gXHRpZiAoZWxlbWVudHMgXHUwMDNlPSBtYXhlbGVtKSB7XG4gXHRcdHUzMiBlO1xuLVx0XHRpZiAoU0VUX1dJVEhfVElNRU9VVChzZXQpKSB7XG4tXHRcdFx0cmN1X3JlYWRfdW5sb2NrX2JoKCk7XG4mIzQzO1x0XHRpZiAoU0VUX1dJVEhfVElNRU9VVChzZXQpKVxuIFx0XHRcdG10eXBlX2djX2RvKHNldCwgaCwgdCwgcik7XG4tXHRcdFx0cmN1X3JlYWRfbG9ja19iaCgpO1xuLVx0XHR9XG4gXHRcdG1heGVsZW0gPSBoLVx1MDAzZW1heGVsZW07XG4gXHRcdGVsZW1lbnRzID0gMDtcbiBcdFx0Zm9yIChlID0gMDsgZSBcdTAwM2MgYWhhc2hfbnVtb2ZfbG9ja3ModC1cdTAwM2VodGFibGVfYml0cyk7IGUmIzQzOyYjNDM7KVxuQEAgLTg3Niw3ICYjNDM7OTQ0LDYgQEAgbXR5cGVfYWRkKHN0cnVjdCBpcF9zZXQgKnNldCwgdm9pZCAqdmFsdWUsIGNvbnN0IHN0cnVjdCBpcF9zZXRfZXh0ICpleHQsXG4gXHRcdGlmIChlbGVtZW50cyBcdTAwM2U9IG1heGVsZW0gXHUwMDI2XHUwMDI2IFNFVF9XSVRIX0ZPUkNFQUREKHNldCkpXG4gXHRcdFx0Zm9yY2VhZGQgPSB0cnVlO1xuIFx0fVxuLVx0cmN1X3JlYWRfdW5sb2NrX2JoKCk7XG4gXG4gXHRzcGluX2xvY2tfYmgoXHUwMDI2dC1cdTAwM2VocmVnaW9uW3JdLmxvY2spO1xuIFx0biA9IHJjdV9kZXJlZmVyZW5jZV9iaChoYnVja2V0KHQsIGtleSkpO1xuQEAgLTkyOSw4ICYjNDM7OTk2LDcgQEAgbXR5cGVfYWRkKHN0cnVjdCBpcF9zZXQgKnNldCwgdm9pZCAqdmFsdWUsIGNvbnN0IHN0cnVjdCBpcF9zZXRfZXh0ICpleHQsXG4gI2lmZGVmIElQX1NFVF9IQVNIX1dJVEhfTkVUU1xuIFx0XHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIElQU0VUX05FVF9DT1VOVDsgaSYjNDM7JiM0MzspXG4gXHRcdFx0XHRtdHlwZV9kZWxfY2lkcihzZXQsIGgsXG4tXHRcdFx0XHRcdE5DSURSX1BVVChEQ0lEUl9HRVQoZGF0YS1cdTAwM2VjaWRyLCBpKSksXG4tXHRcdFx0XHRcdGkpO1xuJiM0MztcdFx0XHRcdFx0RENJRFJfR0VUKGRhdGEtXHUwMDNlY2lkciwgaSksIGkpO1xuICNlbmRpZlxuIFx0XHRcdGlwX3NldF9leHRfZGVzdHJveShzZXQsIGRhdGEpO1xuIFx0XHRcdHQtXHUwMDNlaHJlZ2lvbltyXS5lbGVtZW50cy0tO1xuQEAgLTk3NSw3ICYjNDM7MTA0MSw3IEBAIG10eXBlX2FkZChzdHJ1Y3QgaXBfc2V0ICpzZXQsIHZvaWQgKnZhbHVlLCBjb25zdCBzdHJ1Y3QgaXBfc2V0X2V4dCAqZXh0LFxuIFx0dC1cdTAwM2VocmVnaW9uW3JdLmVsZW1lbnRzJiM0MzsmIzQzOztcbiAjaWZkZWYgSVBfU0VUX0hBU0hfV0lUSF9ORVRTXG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBJUFNFVF9ORVRfQ09VTlQ7IGkmIzQzOyYjNDM7KVxuLVx0XHRtdHlwZV9hZGRfY2lkcihzZXQsIGgsIE5DSURSX1BVVChEQ0lEUl9HRVQoZC1cdTAwM2VjaWRyLCBpKSksIGkpO1xuJiM0MztcdFx0bXR5cGVfYWRkX2NpZHIoc2V0LCBoLCBEQ0lEUl9HRVQoZC1cdTAwM2VjaWRyLCBpKSwgaSk7XG4gI2VuZGlmXG4gXHRtZW1jcHkoZGF0YSwgZCwgc2l6ZW9mKHN0cnVjdCBtdHlwZV9lbGVtKSk7XG4gb3ZlcndyaXRlX2V4dGVuc2lvbnM6XG5AQCAtMTAwMyw3ICYjNDM7MTA2OSw3IEBAIG10eXBlX2FkZChzdHJ1Y3QgaXBfc2V0ICpzZXQsIHZvaWQgKnZhbHVlLCBjb25zdCBzdHJ1Y3QgaXBfc2V0X2V4dCAqZXh0LFxuIFx0cmV0ID0gMDtcbiByZXNpemU6XG4gXHRzcGluX3VubG9ja19iaChcdTAwMjZ0LVx1MDAzZWhyZWdpb25bcl0ubG9jayk7XG4tXHRpZiAoYXRvbWljX3JlYWQoXHUwMDI2dC1cdTAwM2VyZWYpIFx1MDAyNlx1MDAyNiBleHQtXHUwMDNldGFyZ2V0KSB7XG4mIzQzO1x0aWYgKHQtXHUwMDNlcmVzaXppbmcgXHUwMDI2XHUwMDI2IGV4dCBcdTAwMjZcdTAwMjYgZXh0LVx1MDAzZXRhcmdldCkge1xuIFx0XHQvKiBSZXNpemUgaXMgaW4gcHJvY2VzcyBhbmQga2VybmVsIHNpZGUgYWRkLCBzYXZlIHZhbHVlcyAqL1xuIFx0XHRzdHJ1Y3QgbXR5cGVfcmVzaXplX2FkICp4O1xuIFxuQEAgLTEwMTcsNyAmIzQzOzEwODMsNyBAQCBtdHlwZV9hZGQoc3RydWN0IGlwX3NldCAqc2V0LCB2b2lkICp2YWx1ZSwgY29uc3Qgc3RydWN0IGlwX3NldF9leHQgKmV4dCxcbiBcdFx0bWVtY3B5KFx1MDAyNngtXHUwMDNlbWV4dCwgbWV4dCwgc2l6ZW9mKHN0cnVjdCBpcF9zZXRfZXh0KSk7XG4gXHRcdHgtXHUwMDNlZmxhZ3MgPSBmbGFncztcbiBcdFx0c3Bpbl9sb2NrX2JoKFx1MDAyNnNldC1cdTAwM2Vsb2NrKTtcbi1cdFx0bGlzdF9hZGRfdGFpbChcdTAwMjZ4LVx1MDAzZWxpc3QsIFx1MDAyNmgtXHUwMDNlYWQpO1xuJiM0MztcdFx0bGlzdF9hZGRfdGFpbChcdTAwMjZ4LVx1MDAzZWxpc3QsIFx1MDAyNnQtXHUwMDNlYWQpO1xuIFx0XHRzcGluX3VubG9ja19iaChcdTAwMjZzZXQtXHUwMDNlbG9jayk7XG4gXHR9XG4gXHRnb3RvIG91dDtcbkBAIC0xMDMwLDcgJiM0MzsxMDk2LDcgQEAgbXR5cGVfYWRkKHN0cnVjdCBpcF9zZXQgKnNldCwgdm9pZCAqdmFsdWUsIGNvbnN0IHN0cnVjdCBpcF9zZXRfZXh0ICpleHQsXG4gdW5sb2NrOlxuIFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2dC1cdTAwM2VocmVnaW9uW3JdLmxvY2spO1xuIG91dDpcbi1cdGlmIChhdG9taWNfZGVjX2FuZF90ZXN0KFx1MDAyNnQtXHUwMDNldXJlZikgXHUwMDI2XHUwMDI2IGF0b21pY19yZWFkKFx1MDAyNnQtXHUwMDNlcmVmKSkge1xuJiM0MztcdGlmIChhdG9taWNfZGVjX2FuZF90ZXN0KFx1MDAyNnQtXHUwMDNldXJlZikgXHUwMDI2XHUwMDI2IHQtXHUwMDNlcmVzaXppbmcpIHtcbiBcdFx0cHJfZGVidWcoXCYjMzQ7VGFibGUgZGVzdHJveSBhZnRlciByZXNpemUgYnkgYWRkOiAlcFxcblwmIzM0OywgdCk7XG4gXHRcdG10eXBlX2FoYXNoX2Rlc3Ryb3koc2V0LCB0LCBmYWxzZSk7XG4gXHR9XG5AQCAtMTA4OSwxMSAmIzQzOzExNTUsMTEgQEAgbXR5cGVfZGVsKHN0cnVjdCBpcF9zZXQgKnNldCwgdm9pZCAqdmFsdWUsIGNvbnN0IHN0cnVjdCBpcF9zZXRfZXh0ICpleHQsXG4gI2lmZGVmIElQX1NFVF9IQVNIX1dJVEhfTkVUU1xuIFx0XHRmb3IgKGogPSAwOyBqIFx1MDAzYyBJUFNFVF9ORVRfQ09VTlQ7IGomIzQzOyYjNDM7KVxuIFx0XHRcdG10eXBlX2RlbF9jaWRyKHNldCwgaCxcbi1cdFx0XHRcdCAgICAgICBOQ0lEUl9QVVQoRENJRFJfR0VUKGQtXHUwMDNlY2lkciwgaikpLCBqKTtcbiYjNDM7XHRcdFx0XHREQ0lEUl9HRVQoZC1cdTAwM2VjaWRyLCBqKSwgaik7XG4gI2VuZGlmXG4gXHRcdGlwX3NldF9leHRfZGVzdHJveShzZXQsIGRhdGEpO1xuIFxuLVx0XHRpZiAoYXRvbWljX3JlYWQoXHUwMDI2dC1cdTAwM2VyZWYpIFx1MDAyNlx1MDAyNiBleHQtXHUwMDNldGFyZ2V0KSB7XG4mIzQzO1x0XHRpZiAodC1cdTAwM2VyZXNpemluZyBcdTAwMjZcdTAwMjYgZXh0IFx1MDAyNlx1MDAyNiBleHQtXHUwMDNldGFyZ2V0KSB7XG4gXHRcdFx0LyogUmVzaXplIGlzIGluIHByb2Nlc3MgYW5kIGtlcm5lbCBzaWRlIGRlbCxcbiBcdFx0XHQgKiBzYXZlIHZhbHVlc1xuIFx0XHRcdCAqL1xuQEAgLTExNDEsMTAgJiM0MzsxMjA3LDEwIEBAIG10eXBlX2RlbChzdHJ1Y3QgaXBfc2V0ICpzZXQsIHZvaWQgKnZhbHVlLCBjb25zdCBzdHJ1Y3QgaXBfc2V0X2V4dCAqZXh0LFxuIFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2dC1cdTAwM2VocmVnaW9uW3JdLmxvY2spO1xuIFx0aWYgKHgpIHtcbiBcdFx0c3Bpbl9sb2NrX2JoKFx1MDAyNnNldC1cdTAwM2Vsb2NrKTtcbi1cdFx0bGlzdF9hZGQoXHUwMDI2eC1cdTAwM2VsaXN0LCBcdTAwMjZoLVx1MDAzZWFkKTtcbiYjNDM7XHRcdGxpc3RfYWRkKFx1MDAyNngtXHUwMDNlbGlzdCwgXHUwMDI2dC1cdTAwM2VhZCk7XG4gXHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNnNldC1cdTAwM2Vsb2NrKTtcbiBcdH1cbi1cdGlmIChhdG9taWNfZGVjX2FuZF90ZXN0KFx1MDAyNnQtXHUwMDNldXJlZikgXHUwMDI2XHUwMDI2IGF0b21pY19yZWFkKFx1MDAyNnQtXHUwMDNlcmVmKSkge1xuJiM0MztcdGlmIChhdG9taWNfZGVjX2FuZF90ZXN0KFx1MDAyNnQtXHUwMDNldXJlZikgXHUwMDI2XHUwMDI2IHQtXHUwMDNlcmVzaXppbmcpIHtcbiBcdFx0cHJfZGVidWcoXCYjMzQ7VGFibGUgZGVzdHJveSBhZnRlciByZXNpemUgYnkgZGVsOiAlcFxcblwmIzM0OywgdCk7XG4gXHRcdG10eXBlX2FoYXNoX2Rlc3Ryb3koc2V0LCB0LCBmYWxzZSk7XG4gXHR9XG5AQCAtMTE3MiwyOCAmIzQzOzEyMzgsMzcgQEAgbXR5cGVfdGVzdF9jaWRycyhzdHJ1Y3QgaXBfc2V0ICpzZXQsIHN0cnVjdCBtdHlwZV9lbGVtICpkLFxuIHtcbiBcdHN0cnVjdCBodHlwZSAqaCA9IHNldC1cdTAwM2VkYXRhO1xuIFx0c3RydWN0IGh0YWJsZSAqdCA9IHJjdV9kZXJlZmVyZW5jZV9iaChoLVx1MDAzZXRhYmxlKTtcbiYjNDM7XHRzdHJ1Y3QgbmV0X3ByZWZpeGVzICpuZXRzMDtcbiBcdHN0cnVjdCBoYnVja2V0ICpuO1xuIFx0c3RydWN0IG10eXBlX2VsZW0gKmRhdGE7XG4gI2lmIElQU0VUX05FVF9DT1VOVCA9PSAyXG4mIzQzO1x0c3RydWN0IG5ldF9wcmVmaXhlcyAqbmV0czE7XG4gXHRzdHJ1Y3QgbXR5cGVfZWxlbSBvcmlnID0gKmQ7XG4tXHRpbnQgcmV0LCBpLCBqID0gMCwgaztcbiYjNDM7XHRpbnQgcmV0LCBpLCBqLCBrO1xuICNlbHNlXG4tXHRpbnQgcmV0LCBpLCBqID0gMDtcbiYjNDM7XHRpbnQgcmV0LCBpLCBqO1xuICNlbmRpZlxuIFx0dTMyIGtleSwgbXVsdGkgPSAwO1xuIFx0dTggcG9zO1xuIFxuIFx0cHJfZGVidWcoXCYjMzQ7dGVzdCBieSBuZXRzXFxuXCYjMzQ7KTtcbi1cdGZvciAoOyBqIFx1MDAzYyBOTEVOIFx1MDAyNlx1MDAyNiBoLVx1MDAzZW5ldHNbal0uY2lkclswXSBcdTAwMjZcdTAwMjYgIW11bHRpOyBqJiM0MzsmIzQzOykge1xuJiM0MztcdHJjdV9yZWFkX2xvY2tfYmgoKTtcbiYjNDM7XHRuZXRzMCA9IHJjdV9kZXJlZmVyZW5jZV9iaChoLVx1MDAzZXJuZXRzWzBdKTtcbiYjNDM7I2lmIElQU0VUX05FVF9DT1VOVCA9PSAyXG4mIzQzO1x0bmV0czEgPSByY3VfZGVyZWZlcmVuY2VfYmgoaC1cdTAwM2VybmV0c1sxXSk7XG4mIzQzOyNlbmRpZlxuJiM0MztcdGZvciAoaiA9IDA7IGogXHUwMDNjIG5ldHMwLVx1MDAzZWxlbiBcdTAwMjZcdTAwMjYgIW11bHRpOyBqJiM0MzsmIzQzOykge1xuJiM0MztcdFx0aWYgKCFuZXRzMC1cdTAwM2VuZXRzW2pdLmNvdW50KVxuJiM0MztcdFx0XHRjb250aW51ZTtcbiAjaWYgSVBTRVRfTkVUX0NPVU5UID09IDJcbiBcdFx0bXR5cGVfZGF0YV9yZXNldF9lbGVtKGQsIFx1MDAyNm9yaWcpO1xuLVx0XHRtdHlwZV9kYXRhX25ldG1hc2soZCwgTkNJRFJfR0VUKGgtXHUwMDNlbmV0c1tqXS5jaWRyWzBdKSwgZmFsc2UpO1xuLVx0XHRmb3IgKGsgPSAwOyBrIFx1MDAzYyBOTEVOIFx1MDAyNlx1MDAyNiBoLVx1MDAzZW5ldHNba10uY2lkclsxXSBcdTAwMjZcdTAwMjYgIW11bHRpO1xuLVx0XHQgICAgIGsmIzQzOyYjNDM7KSB7XG4tXHRcdFx0bXR5cGVfZGF0YV9uZXRtYXNrKGQsIE5DSURSX0dFVChoLVx1MDAzZW5ldHNba10uY2lkclsxXSksXG4tXHRcdFx0XHRcdCAgIHRydWUpO1xuJiM0MztcdFx0bXR5cGVfZGF0YV9uZXRtYXNrKGQsIG5ldHMwLVx1MDAzZW5ldHNbal0uY2lkciwgZmFsc2UpO1xuJiM0MztcdFx0Zm9yIChrID0gMDsgayBcdTAwM2MgbmV0czEtXHUwMDNlbGVuIFx1MDAyNlx1MDAyNiAhbXVsdGk7IGsmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRcdGlmICghbmV0czEtXHUwMDNlbmV0c1trXS5jb3VudClcbiYjNDM7XHRcdFx0XHRjb250aW51ZTtcbiYjNDM7XHRcdFx0bXR5cGVfZGF0YV9uZXRtYXNrKGQsIG5ldHMxLVx1MDAzZW5ldHNba10uY2lkciwgdHJ1ZSk7XG4gI2Vsc2Vcbi1cdFx0bXR5cGVfZGF0YV9uZXRtYXNrKGQsIE5DSURSX0dFVChoLVx1MDAzZW5ldHNbal0uY2lkclswXSkpO1xuJiM0MztcdFx0bXR5cGVfZGF0YV9uZXRtYXNrKGQsIG5ldHMwLVx1MDAzZW5ldHNbal0uY2lkcik7XG4gI2VuZGlmXG4gXHRcdGtleSA9IEhLRVkoZCwgaC1cdTAwM2Vpbml0dmFsLCB0LVx1MDAzZWh0YWJsZV9iaXRzKTtcbiBcdFx0biA9IHJjdV9kZXJlZmVyZW5jZV9iaChoYnVja2V0KHQsIGtleSkpO1xuQEAgLTEyMDgsNyAmIzQzOzEyODMsNyBAQCBtdHlwZV90ZXN0X2NpZHJzKHN0cnVjdCBpcF9zZXQgKnNldCwgc3RydWN0IG10eXBlX2VsZW0gKmQsXG4gXHRcdFx0XHRjb250aW51ZTtcbiBcdFx0XHRyZXQgPSBtdHlwZV9kYXRhX21hdGNoKGRhdGEsIGV4dCwgbWV4dCwgc2V0LCBmbGFncyk7XG4gXHRcdFx0aWYgKHJldCAhPSAwKVxuLVx0XHRcdFx0cmV0dXJuIHJldDtcbiYjNDM7XHRcdFx0XHRnb3RvIHVubG9jaztcbiAjaWZkZWYgSVBfU0VUX0hBU0hfV0lUSF9NVUxUSVxuIFx0XHRcdC8qIE5vIG1hdGNoLCByZXNldCBtdWx0aXBsZSBtYXRjaCBmbGFnICovXG4gXHRcdFx0bXVsdGkgPSAwO1xuQEAgLTEyMTgsNyAmIzQzOzEyOTMsMTAgQEAgbXR5cGVfdGVzdF9jaWRycyhzdHJ1Y3QgaXBfc2V0ICpzZXQsIHN0cnVjdCBtdHlwZV9lbGVtICpkLFxuIFx0XHR9XG4gI2VuZGlmXG4gXHR9XG4tXHRyZXR1cm4gMDtcbiYjNDM7XHRyZXQgPSAwO1xuJiM0Mzt1bmxvY2s6XG4mIzQzO1x0cmN1X3JlYWRfdW5sb2NrX2JoKCk7XG4mIzQzO1x0cmV0dXJuIHJldDtcbiB9XG4gI2VuZGlmXG4gXG5AQCAtMTM1Myw3ICYjNDM7MTQzMSw3IEBAIG10eXBlX3VyZWYoc3RydWN0IGlwX3NldCAqc2V0LCBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IsIGJvb2wgc3RhcnQpXG4gXHRcdHJjdV9yZWFkX3VubG9ja19iaCgpO1xuIFx0fSBlbHNlIGlmIChjYi1cdTAwM2VhcmdzW0lQU0VUX0NCX1BSSVZBVEVdKSB7XG4gXHRcdHQgPSAoc3RydWN0IGh0YWJsZSAqKWNiLVx1MDAzZWFyZ3NbSVBTRVRfQ0JfUFJJVkFURV07XG4tXHRcdGlmIChhdG9taWNfZGVjX2FuZF90ZXN0KFx1MDAyNnQtXHUwMDNldXJlZikgXHUwMDI2XHUwMDI2IGF0b21pY19yZWFkKFx1MDAyNnQtXHUwMDNlcmVmKSkge1xuJiM0MztcdFx0aWYgKGF0b21pY19kZWNfYW5kX3Rlc3QoXHUwMDI2dC1cdTAwM2V1cmVmKSBcdTAwMjZcdTAwMjYgdC1cdTAwM2VyZXNpemluZykge1xuIFx0XHRcdHByX2RlYnVnKFwmIzM0O1RhYmxlIGRlc3Ryb3kgYWZ0ZXIgcmVzaXplIFwmIzM0O1xuIFx0XHRcdFx0IFwmIzM0OyBieSBkdW1wOiAlcFxcblwmIzM0OywgdCk7XG4gXHRcdFx0bXR5cGVfYWhhc2hfZGVzdHJveShzZXQsIHQsIGZhbHNlKTtcbkBAIC0xNDgzLDYgJiM0MzsxNTYxLDkgQEAgSVBTRVRfVE9LRU4oSFRZUEUsIF9jcmVhdGUpKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGlwX3NldCAqc2V0LFxuIFx0aW50IHJldCBfX2F0dHJpYnV0ZV9fKCh1bnVzZWQpKSA9IDA7XG4gXHR1OCBuZXRtYXNrID0gc2V0LVx1MDAzZWZhbWlseSA9PSBORlBST1RPX0lQVjQgPyAzMiA6IDEyODtcbiBcdHVuaW9uIG5mX2luZXRfYWRkciBiaXRtYXNrID0gb25lc21hc2s7XG4mIzQzOyNlbmRpZlxuJiM0MzsjaWZkZWYgSVBfU0VUX0hBU0hfV0lUSF9ORVRTXG4mIzQzO1x0c3RydWN0IG5ldF9wcmVmaXhlcyAqbmV0cztcbiAjZW5kaWZcbiBcdHNpemVfdCBoc2l6ZTtcbiBcdHN0cnVjdCBodHlwZSAqaDtcbkBAIC0xNTY2LDcgJiM0MzsxNjQ3LDEzIEBAIElQU0VUX1RPS0VOKEhUWVBFLCBfY3JlYXRlKShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBpcF9zZXQgKnNldCxcbiBcdGlmICh0YltJUFNFVF9BVFRSX01BWEVMRU1dKVxuIFx0XHRtYXhlbGVtID0gaXBfc2V0X2dldF9oMzIodGJbSVBTRVRfQVRUUl9NQVhFTEVNXSk7XG4gXG4tXHRoc2l6ZSA9IHNpemVvZigqaCk7XG4mIzQzOyNpZmRlZiBJUF9TRVRfUFJPVE9fVU5ERUZcbiYjNDM7XHRoc2l6ZSA9IHNpemVvZihzdHJ1Y3QgaHR5cGUpO1xuJiM0MzsjZWxzZVxuJiM0MztcdGhzaXplID0gc2V0LVx1MDAzZWZhbWlseSA9PSBORlBST1RPX0lQVjYgP1xuJiM0MztcdFx0c2l6ZW9mKHN0cnVjdCBJUFNFVF9UT0tFTihIVFlQRSwgNikpIDpcbiYjNDM7XHRcdHNpemVvZihzdHJ1Y3QgSVBTRVRfVE9LRU4oSFRZUEUsIDQpKTtcbiYjNDM7I2VuZGlmXG4gXHRoID0ga3phbGxvYyhoc2l6ZSwgR0ZQX0tFUk5FTCk7XG4gXHRpZiAoIWgpXG4gXHRcdHJldHVybiAtRU5PTUVNO1xuQEAgLTE1NzcsMjIgJiM0MzsxNjY0LDI3IEBAIElQU0VUX1RPS0VOKEhUWVBFLCBfY3JlYXRlKShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBpcF9zZXQgKnNldCxcbiBcdCAqL1xuIFx0aGJpdHMgPSBmbHMoaGFzaHNpemUgLSAxKTtcbiBcdGhzaXplID0gaHRhYmxlX3NpemUoaGJpdHMpO1xuLVx0aWYgKGhzaXplID09IDApIHtcbi1cdFx0a2ZyZWUoaCk7XG4tXHRcdHJldHVybiAtRU5PTUVNO1xuLVx0fVxuJiM0MztcdGlmIChoc2l6ZSA9PSAwKVxuJiM0MztcdFx0Z290byBmcmVlX2g7XG4gXHR0ID0gaXBfc2V0X2FsbG9jKGhzaXplKTtcbi1cdGlmICghdCkge1xuLVx0XHRrZnJlZShoKTtcbi1cdFx0cmV0dXJuIC1FTk9NRU07XG4tXHR9XG4mIzQzO1x0aWYgKCF0KVxuJiM0MztcdFx0Z290byBmcmVlX2g7XG4gXHR0LVx1MDAzZWhyZWdpb24gPSBpcF9zZXRfYWxsb2MoYWhhc2hfc2l6ZW9mX3JlZ2lvbnMoaGJpdHMpKTtcbi1cdGlmICghdC1cdTAwM2VocmVnaW9uKSB7XG4tXHRcdGlwX3NldF9mcmVlKHQpO1xuLVx0XHRrZnJlZShoKTtcbi1cdFx0cmV0dXJuIC1FTk9NRU07XG4mIzQzO1x0aWYgKCF0LVx1MDAzZWhyZWdpb24pXG4mIzQzO1x0XHRnb3RvIGZyZWVfdDtcbiYjNDM7I2lmZGVmIElQX1NFVF9IQVNIX1dJVEhfTkVUU1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIElQU0VUX05FVF9DT1VOVDsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdG5ldHMgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgbmV0X3ByZWZpeGVzKSwgR0ZQX0tFUk5FTCk7XG4mIzQzO1x0XHRpZiAoIW5ldHMpIHtcbiYjNDM7XHRcdFx0aWYgKGkgIT0gMClcbiYjNDM7XHRcdFx0XHRrZnJlZShoLVx1MDAzZXJuZXRzWzBdKTtcbiYjNDM7XHRcdFx0Z290byBmcmVlX2hyZWdpb247XG4mIzQzO1x0XHR9XG4mIzQzO1x0XHRSQ1VfSU5JVF9QT0lOVEVSKGgtXHUwMDNlcm5ldHNbaV0sIG5ldHMpO1xuIFx0fVxuJiM0MzsjZW5kaWZcbiBcdGgtXHUwMDNlZ2Muc2V0ID0gc2V0O1xuJiM0MztcdHNwaW5fbG9ja19pbml0KFx1MDAyNmgtXHUwMDNlZ2MubG9jayk7XG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBhaGFzaF9udW1vZl9sb2NrcyhoYml0cyk7IGkmIzQzOyYjNDM7KVxuIFx0XHRzcGluX2xvY2tfaW5pdChcdTAwMjZ0LVx1MDAzZWhyZWdpb25baV0ubG9jayk7XG4gXHRoLVx1MDAzZW1heGVsZW0gPSBtYXhlbGVtO1xuQEAgLTE2MTksOSAmIzQzOzE3MTEsOCBAQCBJUFNFVF9UT0tFTihIVFlQRSwgX2NyZWF0ZSkoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgaXBfc2V0ICpzZXQsXG4gXHR9XG4gXHR0LVx1MDAzZWh0YWJsZV9iaXRzID0gaGJpdHM7XG4gXHR0LVx1MDAzZW1heGVsZW0gPSBoLVx1MDAzZW1heGVsZW0gLyBhaGFzaF9udW1vZl9sb2NrcyhoYml0cyk7XG4mIzQzO1x0SU5JVF9MSVNUX0hFQUQoXHUwMDI2dC1cdTAwM2VhZCk7XG4gXHRSQ1VfSU5JVF9QT0lOVEVSKGgtXHUwMDNldGFibGUsIHQpO1xuLVxuLVx0SU5JVF9MSVNUX0hFQUQoXHUwMDI2aC1cdTAwM2VhZCk7XG4gXHRzZXQtXHUwMDNlZGF0YSA9IGg7XG4gI2lmbmRlZiBJUF9TRVRfUFJPVE9fVU5ERUZcbiBcdGlmIChzZXQtXHUwMDNlZmFtaWx5ID09IE5GUFJPVE9fSVBWNCkge1xuQEAgLTE2NTUsNiAmIzQzOzE3NDYsMTYgQEAgSVBTRVRfVE9LRU4oSFRZUEUsIF9jcmVhdGUpKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGlwX3NldCAqc2V0LFxuIFx0XHQgdC1cdTAwM2VodGFibGVfYml0cywgaC1cdTAwM2VtYXhlbGVtLCBzZXQtXHUwMDNlZGF0YSwgdCk7XG4gXG4gXHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzOyNpZmRlZiBJUF9TRVRfSEFTSF9XSVRIX05FVFNcbiYjNDM7ZnJlZV9ocmVnaW9uOlxuJiM0MztcdGlwX3NldF9mcmVlKHQtXHUwMDNlaHJlZ2lvbik7XG4mIzQzOyNlbmRpZlxuJiM0MztmcmVlX3Q6XG4mIzQzO1x0aXBfc2V0X2ZyZWUodCk7XG4mIzQzO2ZyZWVfaDpcbiYjNDM7XHRrZnJlZShoKTtcbiYjNDM7XHRyZXR1cm4gLUVOT01FTTtcbiB9XG4gI2VuZGlmIC8qIElQX1NFVF9FTUlUX0NSRUFURSAqL1xuIFxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0bmV0LmMgYi9uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwcG9ydG5ldC5jXG5pbmRleCAyZDY2NTJkNDMxOTlhNC4uMTk1ODUzYTI1YjA2MDYgMTAwNjQ0XG4tLS0gYS9uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwcG9ydG5ldC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwcG9ydG5ldC5jXG5AQCAtMTM4LDcgJiM0MzsxMzgsNyBAQCBoYXNoX2lwcG9ydG5ldDRfa2FkdChzdHJ1Y3QgaXBfc2V0ICpzZXQsIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXG4gXHRjb25zdCBzdHJ1Y3QgaGFzaF9pcHBvcnRuZXQ0ICpoID0gc2V0LVx1MDAzZWRhdGE7XG4gXHRpcHNldF9hZHRmbiBhZHRmbiA9IHNldC1cdTAwM2V2YXJpYW50LVx1MDAzZWFkdFthZHRdO1xuIFx0c3RydWN0IGhhc2hfaXBwb3J0bmV0NF9lbGVtIGUgPSB7XG4tXHRcdC5jaWRyID0gSU5JVF9DSURSKGgtXHUwMDNlbmV0c1swXS5jaWRyWzBdLCBIT1NUX01BU0spLFxuJiM0MztcdFx0LmNpZHIgPSBJTklUX0NJRFIoaC1cdTAwM2VybmV0c1swXSwgSE9TVF9NQVNLKSxcbiBcdH07XG4gXHRzdHJ1Y3QgaXBfc2V0X2V4dCBleHQgPSBJUF9TRVRfSU5JVF9LRVhUKHNrYiwgb3B0LCBzZXQpO1xuIFxuQEAgLTM5OCw3ICYjNDM7Mzk4LDcgQEAgaGFzaF9pcHBvcnRuZXQ2X2thZHQoc3RydWN0IGlwX3NldCAqc2V0LCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0Y29uc3Qgc3RydWN0IGhhc2hfaXBwb3J0bmV0NiAqaCA9IHNldC1cdTAwM2VkYXRhO1xuIFx0aXBzZXRfYWR0Zm4gYWR0Zm4gPSBzZXQtXHUwMDNldmFyaWFudC1cdTAwM2VhZHRbYWR0XTtcbiBcdHN0cnVjdCBoYXNoX2lwcG9ydG5ldDZfZWxlbSBlID0ge1xuLVx0XHQuY2lkciA9IElOSVRfQ0lEUihoLVx1MDAzZW5ldHNbMF0uY2lkclswXSwgSE9TVF9NQVNLKSxcbiYjNDM7XHRcdC5jaWRyID0gSU5JVF9DSURSKGgtXHUwMDNlcm5ldHNbMF0sIEhPU1RfTUFTSyksXG4gXHR9O1xuIFx0c3RydWN0IGlwX3NldF9leHQgZXh0ID0gSVBfU0VUX0lOSVRfS0VYVChza2IsIG9wdCwgc2V0KTtcbiBcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldC5jIGIvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXQuY1xuaW5kZXggY2UwYTljZTVhOTFmMWEuLjA5MmYzYzkyODFiODBmIDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXQuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXQuY1xuQEAgLTExNyw3ICYjNDM7MTE3LDcgQEAgaGFzaF9uZXQ0X2thZHQoc3RydWN0IGlwX3NldCAqc2V0LCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0Y29uc3Qgc3RydWN0IGhhc2hfbmV0NCAqaCA9IHNldC1cdTAwM2VkYXRhO1xuIFx0aXBzZXRfYWR0Zm4gYWR0Zm4gPSBzZXQtXHUwMDNldmFyaWFudC1cdTAwM2VhZHRbYWR0XTtcbiBcdHN0cnVjdCBoYXNoX25ldDRfZWxlbSBlID0ge1xuLVx0XHQuY2lkciA9IElOSVRfQ0lEUihoLVx1MDAzZW5ldHNbMF0uY2lkclswXSwgSE9TVF9NQVNLKSxcbiYjNDM7XHRcdC5jaWRyID0gSU5JVF9DSURSKGgtXHUwMDNlcm5ldHNbMF0sIEhPU1RfTUFTSyksXG4gXHR9O1xuIFx0c3RydWN0IGlwX3NldF9leHQgZXh0ID0gSVBfU0VUX0lOSVRfS0VYVChza2IsIG9wdCwgc2V0KTtcbiBcbkBAIC0yOTEsNyAmIzQzOzI5MSw3IEBAIGhhc2hfbmV0Nl9rYWR0KHN0cnVjdCBpcF9zZXQgKnNldCwgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdGNvbnN0IHN0cnVjdCBoYXNoX25ldDYgKmggPSBzZXQtXHUwMDNlZGF0YTtcbiBcdGlwc2V0X2FkdGZuIGFkdGZuID0gc2V0LVx1MDAzZXZhcmlhbnQtXHUwMDNlYWR0W2FkdF07XG4gXHRzdHJ1Y3QgaGFzaF9uZXQ2X2VsZW0gZSA9IHtcbi1cdFx0LmNpZHIgPSBJTklUX0NJRFIoaC1cdTAwM2VuZXRzWzBdLmNpZHJbMF0sIEhPU1RfTUFTSyksXG4mIzQzO1x0XHQuY2lkciA9IElOSVRfQ0lEUihoLVx1MDAzZXJuZXRzWzBdLCBIT1NUX01BU0spLFxuIFx0fTtcbiBcdHN0cnVjdCBpcF9zZXRfZXh0IGV4dCA9IElQX1NFVF9JTklUX0tFWFQoc2tiLCBvcHQsIHNldCk7XG4gXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRpZmFjZS5jIGIvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRpZmFjZS5jXG5pbmRleCAzMGE2NTVlNWM0ZmRjZC4uYjQ0Yjk1Zjc2NmI3YWQgMTAwNjQ0XG4tLS0gYS9uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldGlmYWNlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0aWZhY2UuY1xuQEAgLTE2MSw3ICYjNDM7MTYxLDcgQEAgaGFzaF9uZXRpZmFjZTRfa2FkdChzdHJ1Y3QgaXBfc2V0ICpzZXQsIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXG4gXHRzdHJ1Y3QgaGFzaF9uZXRpZmFjZTQgKmggPSBzZXQtXHUwMDNlZGF0YTtcbiBcdGlwc2V0X2FkdGZuIGFkdGZuID0gc2V0LVx1MDAzZXZhcmlhbnQtXHUwMDNlYWR0W2FkdF07XG4gXHRzdHJ1Y3QgaGFzaF9uZXRpZmFjZTRfZWxlbSBlID0ge1xuLVx0XHQuY2lkciA9IElOSVRfQ0lEUihoLVx1MDAzZW5ldHNbMF0uY2lkclswXSwgSE9TVF9NQVNLKSxcbiYjNDM7XHRcdC5jaWRyID0gSU5JVF9DSURSKGgtXHUwMDNlcm5ldHNbMF0sIEhPU1RfTUFTSyksXG4gXHRcdC5lbGVtID0gMSxcbiBcdH07XG4gXHRzdHJ1Y3QgaXBfc2V0X2V4dCBleHQgPSBJUF9TRVRfSU5JVF9LRVhUKHNrYiwgb3B0LCBzZXQpO1xuQEAgLTM4Miw3ICYjNDM7MzgyLDcgQEAgaGFzaF9uZXRpZmFjZTZfa2FkdChzdHJ1Y3QgaXBfc2V0ICpzZXQsIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXG4gXHRzdHJ1Y3QgaGFzaF9uZXRpZmFjZTYgKmggPSBzZXQtXHUwMDNlZGF0YTtcbiBcdGlwc2V0X2FkdGZuIGFkdGZuID0gc2V0LVx1MDAzZXZhcmlhbnQtXHUwMDNlYWR0W2FkdF07XG4gXHRzdHJ1Y3QgaGFzaF9uZXRpZmFjZTZfZWxlbSBlID0ge1xuLVx0XHQuY2lkciA9IElOSVRfQ0lEUihoLVx1MDAzZW5ldHNbMF0uY2lkclswXSwgSE9TVF9NQVNLKSxcbiYjNDM7XHRcdC5jaWRyID0gSU5JVF9DSURSKGgtXHUwMDNlcm5ldHNbMF0sIEhPU1RfTUFTSyksXG4gXHRcdC5lbGVtID0gMSxcbiBcdH07XG4gXHRzdHJ1Y3QgaXBfc2V0X2V4dCBleHQgPSBJUF9TRVRfSU5JVF9LRVhUKHNrYiwgb3B0LCBzZXQpO1xuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0bmV0LmMgYi9uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldG5ldC5jXG5pbmRleCA4ZmJlNjQ5YzlkZDNkNC4uZjdjOGExY2MzMGZjN2IgMTAwNjQ0XG4tLS0gYS9uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldG5ldC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldG5ldC5jXG5AQCAtMTQ5LDggJiM0MzsxNDksMTAgQEAgaGFzaF9uZXRuZXQ0X2thZHQoc3RydWN0IGlwX3NldCAqc2V0LCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0c3RydWN0IGhhc2hfbmV0bmV0NF9lbGVtIGUgPSB7IH07XG4gXHRzdHJ1Y3QgaXBfc2V0X2V4dCBleHQgPSBJUF9TRVRfSU5JVF9LRVhUKHNrYiwgb3B0LCBzZXQpO1xuIFxuLVx0ZS5jaWRyWzBdID0gSU5JVF9DSURSKGgtXHUwMDNlbmV0c1swXS5jaWRyWzBdLCBIT1NUX01BU0spO1xuLVx0ZS5jaWRyWzFdID0gSU5JVF9DSURSKGgtXHUwMDNlbmV0c1swXS5jaWRyWzFdLCBIT1NUX01BU0spO1xuJiM0MztcdHJjdV9yZWFkX2xvY2tfYmgoKTtcbiYjNDM7XHRlLmNpZHJbMF0gPSBJTklUX0NJRFIoaC1cdTAwM2VybmV0c1swXSwgSE9TVF9NQVNLKTtcbiYjNDM7XHRlLmNpZHJbMV0gPSBJTklUX0NJRFIoaC1cdTAwM2VybmV0c1sxXSwgSE9TVF9NQVNLKTtcbiYjNDM7XHRyY3VfcmVhZF91bmxvY2tfYmgoKTtcbiBcdGlmIChhZHQgPT0gSVBTRVRfVEVTVClcbiBcdFx0ZS5jY21wID0gKEhPU1RfTUFTSyBcdTAwM2NcdTAwM2MgKHNpemVvZihlLmNpZHJbMF0pICogOCkpIHwgSE9TVF9NQVNLO1xuIFxuQEAgLTM4OCw4ICYjNDM7MzkwLDEwIEBAIGhhc2hfbmV0bmV0Nl9rYWR0KHN0cnVjdCBpcF9zZXQgKnNldCwgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdHN0cnVjdCBoYXNoX25ldG5ldDZfZWxlbSBlID0geyB9O1xuIFx0c3RydWN0IGlwX3NldF9leHQgZXh0ID0gSVBfU0VUX0lOSVRfS0VYVChza2IsIG9wdCwgc2V0KTtcbiBcbi1cdGUuY2lkclswXSA9IElOSVRfQ0lEUihoLVx1MDAzZW5ldHNbMF0uY2lkclswXSwgSE9TVF9NQVNLKTtcbi1cdGUuY2lkclsxXSA9IElOSVRfQ0lEUihoLVx1MDAzZW5ldHNbMF0uY2lkclsxXSwgSE9TVF9NQVNLKTtcbiYjNDM7XHRyY3VfcmVhZF9sb2NrX2JoKCk7XG4mIzQzO1x0ZS5jaWRyWzBdID0gSU5JVF9DSURSKGgtXHUwMDNlcm5ldHNbMF0sIEhPU1RfTUFTSyk7XG4mIzQzO1x0ZS5jaWRyWzFdID0gSU5JVF9DSURSKGgtXHUwMDNlcm5ldHNbMV0sIEhPU1RfTUFTSyk7XG4mIzQzO1x0cmN1X3JlYWRfdW5sb2NrX2JoKCk7XG4gXHRpZiAoYWR0ID09IElQU0VUX1RFU1QpXG4gXHRcdGUuY2NtcCA9IChIT1NUX01BU0sgXHUwMDNjXHUwMDNjIChzaXplb2YodTgpICogOCkpIHwgSE9TVF9NQVNLO1xuIFxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0cG9ydC5jIGIvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRwb3J0LmNcbmluZGV4IGQxYTA2MjhkZjRlZjNhLi41ZGU0YjUxMWRlNzYzNiAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0cG9ydC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldHBvcnQuY1xuQEAgLTEzMyw3ICYjNDM7MTMzLDcgQEAgaGFzaF9uZXRwb3J0NF9rYWR0KHN0cnVjdCBpcF9zZXQgKnNldCwgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdGNvbnN0IHN0cnVjdCBoYXNoX25ldHBvcnQ0ICpoID0gc2V0LVx1MDAzZWRhdGE7XG4gXHRpcHNldF9hZHRmbiBhZHRmbiA9IHNldC1cdTAwM2V2YXJpYW50LVx1MDAzZWFkdFthZHRdO1xuIFx0c3RydWN0IGhhc2hfbmV0cG9ydDRfZWxlbSBlID0ge1xuLVx0XHQuY2lkciA9IElOSVRfQ0lEUihoLVx1MDAzZW5ldHNbMF0uY2lkclswXSwgSE9TVF9NQVNLKSxcbiYjNDM7XHRcdC5jaWRyID0gSU5JVF9DSURSKGgtXHUwMDNlcm5ldHNbMF0sIEhPU1RfTUFTSyksXG4gXHR9O1xuIFx0c3RydWN0IGlwX3NldF9leHQgZXh0ID0gSVBfU0VUX0lOSVRfS0VYVChza2IsIG9wdCwgc2V0KTtcbiBcbkBAIC0zNTMsNyAmIzQzOzM1Myw3IEBAIGhhc2hfbmV0cG9ydDZfa2FkdChzdHJ1Y3QgaXBfc2V0ICpzZXQsIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXG4gXHRjb25zdCBzdHJ1Y3QgaGFzaF9uZXRwb3J0NiAqaCA9IHNldC1cdTAwM2VkYXRhO1xuIFx0aXBzZXRfYWR0Zm4gYWR0Zm4gPSBzZXQtXHUwMDNldmFyaWFudC1cdTAwM2VhZHRbYWR0XTtcbiBcdHN0cnVjdCBoYXNoX25ldHBvcnQ2X2VsZW0gZSA9IHtcbi1cdFx0LmNpZHIgPSBJTklUX0NJRFIoaC1cdTAwM2VuZXRzWzBdLmNpZHJbMF0sIEhPU1RfTUFTSyksXG4mIzQzO1x0XHQuY2lkciA9IElOSVRfQ0lEUihoLVx1MDAzZXJuZXRzWzBdLCBIT1NUX01BU0spLFxuIFx0fTtcbiBcdHN0cnVjdCBpcF9zZXRfZXh0IGV4dCA9IElQX1NFVF9JTklUX0tFWFQoc2tiLCBvcHQsIHNldCk7XG4gXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRwb3J0bmV0LmMgYi9uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldHBvcnRuZXQuY1xuaW5kZXggYmY0ZjkxYjc4ZTFkY2IuLjYyOTE1MzJiZTdhNWEyIDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRwb3J0bmV0LmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0cG9ydG5ldC5jXG5AQCAtMTU3LDggJiM0MzsxNTcsMTAgQEAgaGFzaF9uZXRwb3J0bmV0NF9rYWR0KHN0cnVjdCBpcF9zZXQgKnNldCwgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdHN0cnVjdCBoYXNoX25ldHBvcnRuZXQ0X2VsZW0gZSA9IHsgfTtcbiBcdHN0cnVjdCBpcF9zZXRfZXh0IGV4dCA9IElQX1NFVF9JTklUX0tFWFQoc2tiLCBvcHQsIHNldCk7XG4gXG4tXHRlLmNpZHJbMF0gPSBJTklUX0NJRFIoaC1cdTAwM2VuZXRzWzBdLmNpZHJbMF0sIEhPU1RfTUFTSyk7XG4tXHRlLmNpZHJbMV0gPSBJTklUX0NJRFIoaC1cdTAwM2VuZXRzWzBdLmNpZHJbMV0sIEhPU1RfTUFTSyk7XG4mIzQzO1x0cmN1X3JlYWRfbG9ja19iaCgpO1xuJiM0MztcdGUuY2lkclswXSA9IElOSVRfQ0lEUihoLVx1MDAzZXJuZXRzWzBdLCBIT1NUX01BU0spO1xuJiM0MztcdGUuY2lkclsxXSA9IElOSVRfQ0lEUihoLVx1MDAzZXJuZXRzWzFdLCBIT1NUX01BU0spO1xuJiM0MztcdHJjdV9yZWFkX3VubG9ja19iaCgpO1xuIFx0aWYgKGFkdCA9PSBJUFNFVF9URVNUKVxuIFx0XHRlLmNjbXAgPSAoSE9TVF9NQVNLIFx1MDAzY1x1MDAzYyAoc2l6ZW9mKGUuY2lkclswXSkgKiA4KSkgfCBIT1NUX01BU0s7XG4gXG5AQCAtNDUyLDggJiM0Mzs0NTQsMTAgQEAgaGFzaF9uZXRwb3J0bmV0Nl9rYWR0KHN0cnVjdCBpcF9zZXQgKnNldCwgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdHN0cnVjdCBoYXNoX25ldHBvcnRuZXQ2X2VsZW0gZSA9IHsgfTtcbiBcdHN0cnVjdCBpcF9zZXRfZXh0IGV4dCA9IElQX1NFVF9JTklUX0tFWFQoc2tiLCBvcHQsIHNldCk7XG4gXG4tXHRlLmNpZHJbMF0gPSBJTklUX0NJRFIoaC1cdTAwM2VuZXRzWzBdLmNpZHJbMF0sIEhPU1RfTUFTSyk7XG4tXHRlLmNpZHJbMV0gPSBJTklUX0NJRFIoaC1cdTAwM2VuZXRzWzBdLmNpZHJbMV0sIEhPU1RfTUFTSyk7XG4mIzQzO1x0cmN1X3JlYWRfbG9ja19iaCgpO1xuJiM0MztcdGUuY2lkclswXSA9IElOSVRfQ0lEUihoLVx1MDAzZXJuZXRzWzBdLCBIT1NUX01BU0spO1xuJiM0MztcdGUuY2lkclsxXSA9IElOSVRfQ0lEUihoLVx1MDAzZXJuZXRzWzFdLCBIT1NUX01BU0spO1xuJiM0MztcdHJjdV9yZWFkX3VubG9ja19iaCgpO1xuIFx0aWYgKGFkdCA9PSBJUFNFVF9URVNUKVxuIFx0XHRlLmNjbXAgPSAoSE9TVF9NQVNLIFx1MDAzY1x1MDAzYyAoc2l6ZW9mKHU4KSAqIDgpKSB8IEhPU1RfTUFTSztcbiBcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMiAxNzowMTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4ybTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtORVRGSUxURVImIzM0OywKICAgICYjMzQ7SVBfU0VUJiMzNDssCiAgICAmIzM0O0lQX1NFVF9IQVNIX05FVCYjMzQ7LAogICAgJiMzNDtJUF9TRVRfSEFTSF9ORVRORVQmIzM0OywKICAgICYjMzQ7SVBfU0VUX0hBU0hfTkVUUE9SVCYjMzQ7LAogICAgJiMzNDtJUF9TRVRfSEFTSF9ORVRJRkFDRSYjMzQ7LAogICAgJiMzNDtJUF9TRVRfSEFTSF9JUFBPUlRORVQmIzM0OywKICAgICYjMzQ7SVBfU0VUX0hBU0hfTkVUUE9SVE5FVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2hhc2hfbmV0NF9hZGQmIzM0OywKICAgICYjMzQ7aGFzaF9uZXQ0X2RlbCYjMzQ7LAogICAgJiMzNDtoYXNoX25ldDRfdGVzdCYjMzQ7LAogICAgJiMzNDtoYXNoX25ldDRfcmVzaXplJiMzNDssCiAgICAmIzM0O2hhc2hfbmV0NF9nYyYjMzQ7LAogICAgJiMzNDtoYXNoX25ldDRfZmx1c2gmIzM0OywKICAgICYjMzQ7aGFzaF9uZXQ0X2Rlc3Ryb3kmIzM0OywKICAgICYjMzQ7aGFzaF9uZXQ0X3VyZWYmIzM0OywKICAgICYjMzQ7aGFzaF9uZXQ0X2thZHQmIzM0OywKICAgICYjMzQ7aGFzaF9uZXQ0X3VhZHQmIzM0OywKICAgICYjMzQ7aGFzaF9uZXRfY3JlYXRlJiMzNDssCiAgICAmIzM0O2hhc2hfbmV0Nl9hZGQmIzM0OywKICAgICYjMzQ7aGFzaF9uZXQ2X2RlbCYjMzQ7LAogICAgJiMzNDtoYXNoX25ldDZfdGVzdCYjMzQ7LAogICAgJiMzNDtoYXNoX25ldDZfcmVzaXplJiMzNDssCiAgICAmIzM0O2hhc2hfbmV0Nl9nYyYjMzQ7LAogICAgJiMzNDtoYXNoX25ldDZfa2FkdCYjMzQ7LAogICAgJiMzNDtoYXNoX25ldDZfdWFkdCYjMzQ7LAogICAgJiMzNDtoYXNoX25ldG5ldDRfYWRkJiMzNDssCiAgICAmIzM0O2hhc2hfbmV0bmV0NF9yZXNpemUmIzM0OywKICAgICYjMzQ7aGFzaF9uZXRuZXQ0X2djJiMzNDssCiAgICAmIzM0O2hhc2hfbmV0bmV0NF9rYWR0JiMzNDssCiAgICAmIzM0O2hhc2hfbmV0bmV0NF91YWR0JiMzNDssCiAgICAmIzM0O2hhc2hfbmV0bmV0X2NyZWF0ZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgY29yZSBoYXNoIHRhYmxlIGltcGxlbWVudGF0aW9uIGZvciBuZXRmaWx0ZXIgaXBzZXQgKHNwZWNpZmljYWxseSB0aGUgZ2VuZXJpYyBoYXNoIHR5cGVzIGluIGlwX3NldF9oYXNoX2dlbi5oKS4gSXQgY2hhbmdlcyBob3cgQ0lEUiBuZXR3b3JrcyBhcmUgc3RvcmVkLCBtb3ZpbmcgZnJvbSBhIGZpeGVkLXNpemUgYXJyYXkgdG8gYW4gUkNVLXByb3RlY3RlZCBkeW5hbWljYWxseSBhbGxvY2F0ZWQgYXJyYXksIGFuZCB1cGRhdGVzIHRoZSByZXNpemluZyBhbmQgZ2FyYmFnZSBjb2xsZWN0aW9uIGxvZ2ljIHRvIHVzZSBhIG5ldyBsb2NrIGFuZCBhIGByZXNpemluZ2AgZmxhZy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRvIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYyBhbmQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgdGhlIG5ldyBSQ1UgYW5kIGxvY2tpbmcgbG9naWMgZG9lc24mIzM5O3QgaW50cm9kdWNlIHVzZS1hZnRlci1mcmVlLCBtZW1vcnkgbGVha3MsIG9yIHJhY2UgY29uZGl0aW9ucy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLApldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXQKICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LAogICBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMGJmYzMzM2VkYTYzNmNhYmMwZDFiNzU5MjRmZGRiMGJiYTUxOTA4MQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUaHUgSnVsIDIgMTc6MDE6MTQgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oIGIvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaAppbmRleCBkZWRmNTliNjYxZGRmMy4uMmI0NzNhY2FkNTBjYjggMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaApAQCAtNzUsMTUgJiM0Mzs3NSwxNyBAQCBzdHJ1Y3QgaGJ1Y2tldCB7CiBzdHJ1Y3QgaHRhYmxlX2djIHsKIAlzdHJ1Y3QgZGVsYXllZF93b3JrIGR3b3JrOwogCXN0cnVjdCBpcF9zZXQgKnNldDsJLyogU2V0IHRoZSBnYyBiZWxvbmdzIHRvICovCiYjNDM7CXNwaW5sb2NrX3QgbG9jazsJLyogTG9jayB0byBleGNsdWRlIGdjIGFuZCByZXNpemUgKi8KIAl1MzIgcmVnaW9uOwkJLyogTGFzdCBnYyBydW4gcG9zaXRpb24gKi8KIH07CiAKIC8qIFRoZSBoYXNoIHRhYmxlOiB0aGUgdGFibGUgc2l6ZSBzdG9yZWQgaGVyZSBpbiBvcmRlciB0byBtYWtlIHJlc2l6aW5nIGVhc3kgKi8KIHN0cnVjdCBodGFibGUgewotCWF0b21pY190IHJlZjsJCS8qIFJlZmVyZW5jZXMgZm9yIHJlc2l6aW5nICovCiYjNDM7CWJvb2wgcmVzaXppbmc7CQkvKiBNYXJrIG9uZ29pbmcgcmVzaXplICovCiAJYXRvbWljX3QgdXJlZjsJCS8qIFJlZmVyZW5jZXMgZm9yIGR1bXBpbmcgYW5kIGdjICovCiAJdTggaHRhYmxlX2JpdHM7CQkvKiBzaXplIG9mIGhhc2ggdGFibGUgPT0gMl5odGFibGVfYml0cyAqLwogCXUzMiBtYXhlbGVtOwkJLyogTWF4ZWxlbSBwZXIgcmVnaW9uICovCiYjNDM7CXN0cnVjdCBsaXN0X2hlYWQgYWQ7CS8qIFJlc2l6ZSBhZGR8ZGVsIGJhY2tsaXN0ICovCiAJc3RydWN0IGlwX3NldF9yZWdpb24gKmhyZWdpb247CS8qIFJlZ2lvbiBsb2NrcyBhbmQgZXh0IHNpemVzICovCiAJc3RydWN0IGhidWNrZXQgX19yY3UgKmJ1Y2tldFtdOyAvKiBoYXNodGFibGUgYnVja2V0cyAqLwogfTsKQEAgLTk3LDkgJiM0Mzs5OSwxNiBAQCBzdHJ1Y3QgaHRhYmxlIHsKICNlbmRpZgogCiAvKiBCb29rLWtlZXBpbmcgb2YgdGhlIHByZWZpeGVzIGFkZGVkIHRvIHRoZSBzZXQgKi8KJiM0MztzdHJ1Y3QgbmV0X3ByZWZpeCB7CiYjNDM7CXU4IGNpZHI7CQkJLyogdGhlIGNpZHIgdmFsdWUgKi8KJiM0MzsJdTMyIGNvdW50OwkJCS8qIG51bWJlciBvZiBlbGVtZW50cyBvZiB0aGlzIGNpZHIgKi8KJiM0Mzt9OwomIzQzOwogc3RydWN0IG5ldF9wcmVmaXhlcyB7Ci0JdTMyIG5ldHNbSVBTRVRfTkVUX0NPVU5UXTsgLyogbnVtYmVyIG9mIGVsZW1lbnRzIGZvciB0aGlzIGNpZHIgKi8KLQl1OCBjaWRyW0lQU0VUX05FVF9DT1VOVF07ICAvKiB0aGUgY2lkciB2YWx1ZSAqLwomIzQzOwlzdHJ1Y3QgcmN1X2hlYWQgcmN1OwomIzQzOwl1OCBsZW47CiYjNDM7CXN0cnVjdCBuZXRfcHJlZml4IG5ldHNbXQomIzQzOwkJX19hbGlnbmVkKF9fYWxpZ25vZl9fKHU2NCkpOwogfTsKIAogLyogQ29tcHV0ZSB0aGUgaGFzaCB0YWJsZSBzaXplICovCkBAIC0xMjUsMTEgJiM0MzsxMzQsNiBAQCBodGFibGVfc2l6ZSh1OCBoYml0cykKICNlbHNlCiAjZGVmaW5lIF9fQ0lEUihjaWRyLCBpKQkJKGNpZHIpCiAjZW5kaWYKLQotLyogY2lkciAmIzQzOyAxIGlzIHN0b3JlZCBpbiBuZXRfcHJlZml4ZXMgdG8gc3VwcG9ydCAvMCAqLwotI2RlZmluZSBOQ0lEUl9QVVQoY2lkcikJCSgoY2lkcikgJiM0MzsgMSkKLSNkZWZpbmUgTkNJRFJfR0VUKGNpZHIpCQkoKGNpZHIpIC0gMSkKLQogI2lmZGVmIElQX1NFVF9IQVNIX1dJVEhfTkVUU19QQUNLRUQKIC8qIFdoZW4gY2lkciBpcyBwYWNrZWQgd2l0aCBub21hdGNoLCBjaWRyIC0gMSBpcyBzdG9yZWQgaW4gdGhlIGRhdGEgZW50cnkgKi8KICNkZWZpbmUgRENJRFJfUFVUKGNpZHIpCQkoKGNpZHIpIC0gMSkKQEAgLTEzOSwyMSAmIzQzOzE0Myw5IEBAIGh0YWJsZV9zaXplKHU4IGhiaXRzKQogI2RlZmluZSBEQ0lEUl9HRVQoY2lkciwgaSkJX19DSURSKGNpZHIsIGkpCiAjZW5kaWYKIAotI2RlZmluZSBJTklUX0NJRFIoY2lkciwgaG9zdF9tYXNrKQlcCi0JRENJRFJfUFVUKCgoY2lkcikgPyBOQ0lEUl9HRVQoY2lkcikgOiBob3N0X21hc2spKQomIzQzOyNkZWZpbmUgSU5JVF9DSURSKG4sIGhvc3RfbWFzaykJXAomIzQzOwlEQ0lEUl9QVVQoKG4pLSZndDtsZW4gPyAobiktJmd0O25ldHNbMF0uY2lkciA6IGhvc3RfbWFzaykKIAotI2lmZGVmIElQX1NFVF9IQVNIX1dJVEhfTkVUMAotLyogY2lkciBmcm9tIDAgdG8gSE9TVF9NQVNLIHZhbHVlIGFuZCBjID0gY2lkciAmIzQzOyAxICovCi0jZGVmaW5lIE5MRU4JCQkoSE9TVF9NQVNLICYjNDM7IDEpCi0jZGVmaW5lIENJRFJfUE9TKGMpCQkoKGMpIC0gMSkKLSNlbHNlCi0vKiBjaWRyIGZyb20gMSB0byBIT1NUX01BU0sgdmFsdWUgYW5kIGMgPSBjaWRyICYjNDM7IDEgKi8KLSNkZWZpbmUgTkxFTgkJCUhPU1RfTUFTSwotI2RlZmluZSBDSURSX1BPUyhjKQkJKChjKSAtIDIpCi0jZW5kaWYKLQotI2Vsc2UKLSNkZWZpbmUgTkxFTgkJCTAKICNlbmRpZiAvKiBJUF9TRVRfSEFTSF9XSVRIX05FVFMgKi8KIAogI2RlZmluZSBTRVRfRUxFTV9FWFBJUkVEKHNldCwgZCkJXApAQCAtMjkwLDYgJiM0MzsyODIsNyBAQCBzdGF0aWMgY29uc3QgdW5pb24gbmZfaW5ldF9hZGRyIHplcm9tYXNrID0ge307CiAvKiBUaGUgZ2VuZXJpYyBoYXNoIHN0cnVjdHVyZSAqLwogc3RydWN0IGh0eXBlIHsKIAlzdHJ1Y3QgaHRhYmxlIF9fcmN1ICp0YWJsZTsgLyogdGhlIGhhc2ggdGFibGUgKi8KJiM0MzsJc3RydWN0IG5ldF9wcmVmaXhlcyBfX3JjdSAqcm5ldHNbSVBTRVRfTkVUX0NPVU5UXTsgLyogY2lkciBwcmVmaXhlcyAqLwogCXN0cnVjdCBodGFibGVfZ2MgZ2M7CS8qIGdjIHdvcmtxdWV1ZSAqLwogCXUzMiBtYXhlbGVtOwkJLyogbWF4IGVsZW1lbnRzIGluIHRoZSBoYXNoICovCiAJdTMyIGluaXR2YWw7CQkvKiByYW5kb20gamhhc2ggaW5pdCB2YWx1ZSAqLwpAQCAtMzAxLDExICYjNDM7Mjk0LDEwIEBAIHN0cnVjdCBodHlwZSB7CiAJdTggbmV0bWFzazsJCS8qIG5ldG1hc2sgdmFsdWUgZm9yIHN1Ym5ldHMgdG8gc3RvcmUgKi8KIAl1bmlvbiBuZl9pbmV0X2FkZHIgYml0bWFzazsJLyogc3RvcmVzIGJpdG1hc2sgKi8KICNlbmRpZgotCXN0cnVjdCBsaXN0X2hlYWQgYWQ7CS8qIFJlc2l6ZSBhZGR8ZGVsIGJhY2tsaXN0ICovCiYjNDM7CS8qIEJlY2F1c2UgJiMzOTtuZXh0JiMzOTsgaXMgSVB2NC9JUHY2IGRlcGVuZGVudCwgbm8gZWxlbWVudHMgb2YgdGhpcwomIzQzOwkgKiBzdHJ1Y3R1cmUgYW5kIHJlZmVycmVkIGluIGNyZWF0ZSgpIG1heSBjb21lIGFmdGVyICYjMzk7bmV4dCYjMzk7LgomIzQzOwkgKi8KIAlzdHJ1Y3QgbXR5cGVfZWxlbSBuZXh0OyAvKiB0ZW1wb3Jhcnkgc3RvcmFnZSBmb3IgdWFkZCAqLwotI2lmZGVmIElQX1NFVF9IQVNIX1dJVEhfTkVUUwotCXN0cnVjdCBuZXRfcHJlZml4ZXMgbmV0c1tOTEVOXTsgLyogYm9vay1rZWVwaW5nIG9mIHByZWZpeGVzICovCi0jZW5kaWYKIH07CiAKIC8qIEFERHxERUwgZW50cmllcyBzYXZlZCBkdXJpbmcgcmVzaXplICovCkBAIC0zMjIsNTAgJiM0MzszMTQsODggQEAgc3RydWN0IG10eXBlX3Jlc2l6ZV9hZCB7CiAvKiBOZXR3b3JrIGNpZHIgc2l6ZSBib29rIGtlZXBpbmcgd2hlbiB0aGUgaGFzaCBzdG9yZXMgZGlmZmVyZW50CiAgKiBzaXplZCBuZXR3b3Jrcy4gY2lkciA9PSByZWFsIGNpZHIgJiM0MzsgMSB0byBzdXBwb3J0IC8wLgogICovCi1zdGF0aWMgdm9pZAomIzQzO3N0YXRpYyBpbnQKIG10eXBlX2FkZF9jaWRyKHN0cnVjdCBpcF9zZXQgKnNldCwgc3RydWN0IGh0eXBlICpoLCB1OCBjaWRyLCB1OCBuKQogewotCWludCBpLCBqOwomIzQzOwlzdHJ1Y3QgbmV0X3ByZWZpeGVzICpuZXRzLCAqdG1wOwomIzQzOwlpbnQgaSwgaiwgZm91bmQsIGxlbiA9IDAsIHJldCA9IDA7CiAKIAlzcGluX2xvY2tfYmgoJmFtcDtzZXQtJmd0O2xvY2spOwomIzQzOwluZXRzID0gX19pcHNldF9kZXJlZmVyZW5jZShoLSZndDtybmV0c1tuXSk7CiAJLyogQWRkIGluIGluY3JlYXNpbmcgcHJlZml4IG9yZGVyLCBzbyBsYXJnZXIgY2lkciBmaXJzdCAqLwotCWZvciAoaSA9IDAsIGogPSAtMTsgaSAmbHQ7IE5MRU4gJmFtcDsmYW1wOyBoLSZndDtuZXRzW2ldLmNpZHJbbl07IGkmIzQzOyYjNDM7KSB7Ci0JCWlmIChqICE9IC0xKSB7CiYjNDM7CWZvciAoaSA9IDAsIGZvdW5kID0gLTE7IGkgJmx0OyBuZXRzLSZndDtsZW47IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQlpZiAobmV0cy0mZ3Q7bmV0c1tpXS5jb3VudCkKJiM0MzsJCQlsZW4mIzQzOyYjNDM7OwomIzQzOwkJaWYgKGZvdW5kICE9IC0xKSB7CiAJCQljb250aW51ZTsKLQkJfSBlbHNlIGlmIChoLSZndDtuZXRzW2ldLmNpZHJbbl0gJmx0OyBjaWRyKSB7Ci0JCQlqID0gaTsKLQkJfSBlbHNlIGlmIChoLSZndDtuZXRzW2ldLmNpZHJbbl0gPT0gY2lkcikgewotCQkJaC0mZ3Q7bmV0c1tDSURSX1BPUyhjaWRyKV0ubmV0c1tuXSYjNDM7JiM0Mzs7CiYjNDM7CQl9IGVsc2UgaWYgKG5ldHMtJmd0O25ldHNbaV0uY2lkciAmbHQ7IGNpZHIpIHsKJiM0MzsJCQlmb3VuZCA9IGk7CiYjNDM7CQl9IGVsc2UgaWYgKG5ldHMtJmd0O25ldHNbaV0uY2lkciA9PSBjaWRyKSB7CiYjNDM7CQkJbmV0cy0mZ3Q7bmV0c1tpXS5jb3VudCYjNDM7JiM0Mzs7CiAJCQlnb3RvIHVubG9jazsKIAkJfQogCX0KLQlpZiAoaiAhPSAtMSkgewotCQlmb3IgKDsgaSAmZ3Q7IGo7IGktLSkKLQkJCWgtJmd0O25ldHNbaV0uY2lkcltuXSA9IGgtJmd0O25ldHNbaSAtIDFdLmNpZHJbbl07CiYjNDM7CWxlbiYjNDM7JiM0Mzs7CiYjNDM7CXRtcCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBuZXRfcHJlZml4ZXMpICYjNDM7CiYjNDM7CQkgICAgICBsZW4gKiBzaXplb2Yoc3RydWN0IG5ldF9wcmVmaXgpLCBHRlBfQVRPTUlDKTsKJiM0MzsJaWYgKCF0bXApCiYjNDM7CQlyZXR1cm4gLUVOT01FTTsKJiM0MzsJdG1wLSZndDtsZW4gPSBsZW47CiYjNDM7CWZvciAoaSA9IDAsIGogPSAwOyBpICZsdDsgbmV0cy0mZ3Q7bGVuOyBpJiM0MzsmIzQzOykgewomIzQzOwkJaWYgKCFuZXRzLSZndDtuZXRzW2ldLmNvdW50KQomIzQzOwkJCWNvbnRpbnVlOwomIzQzOwkJaWYgKGkgPT0gZm91bmQpIHsKJiM0MzsJCQl0bXAtJmd0O25ldHNbal0uY2lkciA9IGNpZHI7CiYjNDM7CQkJdG1wLSZndDtuZXRzW2omIzQzOyYjNDM7XS5jb3VudCA9IDE7CiYjNDM7CQl9CiYjNDM7CQl0bXAtJmd0O25ldHNbal0uY2lkciA9IG5ldHMtJmd0O25ldHNbaV0uY2lkcjsKJiM0MzsJCXRtcC0mZ3Q7bmV0c1tqJiM0MzsmIzQzO10uY291bnQgPSBuZXRzLSZndDtuZXRzW2ldLmNvdW50OwomIzQzOwl9CiYjNDM7CWlmIChmb3VuZCA9PSAtMSkgewomIzQzOwkJdG1wLSZndDtuZXRzW2pdLmNpZHIgPSBjaWRyOwomIzQzOwkJdG1wLSZndDtuZXRzW2pdLmNvdW50ID0gMTsKIAl9Ci0JaC0mZ3Q7bmV0c1tpXS5jaWRyW25dID0gY2lkcjsKLQloLSZndDtuZXRzW0NJRFJfUE9TKGNpZHIpXS5uZXRzW25dID0gMTsKJiM0MzsJcmN1X2Fzc2lnbl9wb2ludGVyKGgtJmd0O3JuZXRzW25dLCB0bXApOwomIzQzOwlrZnJlZV9yY3UobmV0cywgcmN1KTsKIHVubG9jazoKIAlzcGluX3VubG9ja19iaCgmYW1wO3NldC0mZ3Q7bG9jayk7CiYjNDM7CXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyB2b2lkCiBtdHlwZV9kZWxfY2lkcihzdHJ1Y3QgaXBfc2V0ICpzZXQsIHN0cnVjdCBodHlwZSAqaCwgdTggY2lkciwgdTggbikKIHsKLQl1OCBpLCBqLCBuZXRfZW5kID0gTkxFTiAtIDE7CiYjNDM7CXN0cnVjdCBuZXRfcHJlZml4ZXMgKm5ldHMsICp0bXA7CiYjNDM7CXU4IGksIGosIGZvdW5kLCBsZW4gPSAwOwogCiAJc3Bpbl9sb2NrX2JoKCZhbXA7c2V0LSZndDtsb2NrKTsKLQlmb3IgKGkgPSAwOyBpICZsdDsgTkxFTjsgaSYjNDM7JiM0MzspIHsKLQkJaWYgKGgtJmd0O25ldHNbaV0uY2lkcltuXSAhPSBjaWRyKQotCQkJY29udGludWU7Ci0JCWgtJmd0O25ldHNbQ0lEUl9QT1MoY2lkcildLm5ldHNbbl0tLTsKLQkJaWYgKGgtJmd0O25ldHNbQ0lEUl9QT1MoY2lkcildLm5ldHNbbl0gJmd0OyAwKQotCQkJZ290byB1bmxvY2s7Ci0JCWZvciAoaiA9IGk7IGogJmx0OyBuZXRfZW5kICZhbXA7JmFtcDsgaC0mZ3Q7bmV0c1tqXS5jaWRyW25dOyBqJiM0MzsmIzQzOykKLQkJCWgtJmd0O25ldHNbal0uY2lkcltuXSA9IGgtJmd0O25ldHNbaiAmIzQzOyAxXS5jaWRyW25dOwotCQloLSZndDtuZXRzW2pdLmNpZHJbbl0gPSAwOwomIzQzOwluZXRzID0gX19pcHNldF9kZXJlZmVyZW5jZShoLSZndDtybmV0c1tuXSk7CiYjNDM7CWZvciAoaSA9IDAsIGZvdW5kID0gLTE7IGkgJmx0OyBuZXRzLSZndDtsZW47IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQlpZiAobmV0cy0mZ3Q7bmV0c1tpXS5jb3VudCkKJiM0MzsJCQlsZW4mIzQzOyYjNDM7OwomIzQzOwkJaWYgKG5ldHMtJmd0O25ldHNbaV0uY2lkciA9PSBjaWRyKQomIzQzOwkJCWZvdW5kID0gaTsKJiM0MzsJfQomIzQzOwlpZiAodW5saWtlbHkoZm91bmQgPT0gLTEpKQomIzQzOwkJcmV0dXJuOwomIzQzOwluZXRzLSZndDtuZXRzW2ZvdW5kXS5jb3VudC0tOwomIzQzOwlpZiAobmV0cy0mZ3Q7bmV0c1tmb3VuZF0uY291bnQpCiAJCWdvdG8gdW5sb2NrOwomIzQzOwlsZW4tLTsKJiM0MzsJdG1wID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IG5ldF9wcmVmaXhlcykgJiM0MzsKJiM0MzsJCSAgICAgIGxlbiAqIHNpemVvZihzdHJ1Y3QgbmV0X3ByZWZpeCksIEdGUF9BVE9NSUMpOwomIzQzOwlpZiAoIXRtcCkKJiM0MzsJCS8qIExlYXZlIGEgaG9sZSAqLwomIzQzOwkJcmV0dXJuOwomIzQzOwl0bXAtJmd0O2xlbiA9IGxlbjsKJiM0MzsJZm9yIChpID0gMCwgaiA9IDA7IGkgJmx0OyBuZXRzLSZndDtsZW47IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQlpZiAoIW5ldHMtJmd0O25ldHNbaV0uY291bnQgfHwgaSA9PSBmb3VuZCkKJiM0MzsJCQljb250aW51ZTsKJiM0MzsJCXRtcC0mZ3Q7bmV0c1tqXS5jaWRyID0gbmV0cy0mZ3Q7bmV0c1tpXS5jaWRyOwomIzQzOwkJdG1wLSZndDtuZXRzW2omIzQzOyYjNDM7XS5jb3VudCA9IG5ldHMtJmd0O25ldHNbaV0uY291bnQ7CiAJfQomIzQzOwlyY3VfYXNzaWduX3BvaW50ZXIoaC0mZ3Q7cm5ldHNbbl0sIHRtcCk7CiYjNDM7CWtmcmVlX3JjdShuZXRzLCByY3UpOwogdW5sb2NrOgogCXNwaW5fdW5sb2NrX2JoKCZhbXA7c2V0LSZndDtsb2NrKTsKIH0KQEAgLTM5OCw2ICYjNDM7NDI4LDkgQEAgc3RhdGljIHZvaWQKIG10eXBlX2ZsdXNoKHN0cnVjdCBpcF9zZXQgKnNldCkKIHsKIAlzdHJ1Y3QgaHR5cGUgKmggPSBzZXQtJmd0O2RhdGE7CiYjNDM7I2lmZGVmIElQX1NFVF9IQVNIX1dJVEhfTkVUUwomIzQzOwlzdHJ1Y3QgbmV0X3ByZWZpeGVzICpuZXRzLCAqdG1wOwomIzQzOyNlbmRpZgogCXN0cnVjdCBodGFibGUgKnQ7CiAJc3RydWN0IGhidWNrZXQgKm47CiAJdTMyIHIsIGk7CkBAIC00MjEsNyAmIzQzOzQ1NCwxNyBAQCBtdHlwZV9mbHVzaChzdHJ1Y3QgaXBfc2V0ICpzZXQpCiAJCXNwaW5fdW5sb2NrX2JoKCZhbXA7dC0mZ3Q7aHJlZ2lvbltyXS5sb2NrKTsKIAl9CiAjaWZkZWYgSVBfU0VUX0hBU0hfV0lUSF9ORVRTCi0JbWVtc2V0KGgtJmd0O25ldHMsIDAsIHNpemVvZihoLSZndDtuZXRzKSk7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBJUFNFVF9ORVRfQ09VTlQ7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQluZXRzID0gaXBzZXRfZGVyZWZlcmVuY2VfbmZubChoLSZndDtybmV0c1tpXSk7CiYjNDM7CQl0bXAgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgbmV0X3ByZWZpeGVzKSwgR0ZQX0FUT01JQyk7CiYjNDM7CQlpZiAoIXRtcCkgewomIzQzOwkJCWZvciAoaSA9IDA7IGkgJmx0OyBuZXRzLSZndDtsZW47IGkmIzQzOyYjNDM7KQomIzQzOwkJCQluZXRzLSZndDtuZXRzW2ldLmNvdW50ID0gMDsKJiM0MzsJCX0gZWxzZSB7CiYjNDM7CQkJcmN1X2Fzc2lnbl9wb2ludGVyKGgtJmd0O3JuZXRzW2ldLCB0bXApOwomIzQzOwkJCWtmcmVlX3JjdShuZXRzLCByY3UpOwomIzQzOwkJfQomIzQzOwl9CiAjZW5kaWYKIH0KIApAQCAtNDI5LDYgJiM0Mzs0NzIsOSBAQCBtdHlwZV9mbHVzaChzdHJ1Y3QgaXBfc2V0ICpzZXQpCiBzdGF0aWMgdm9pZAogbXR5cGVfYWhhc2hfZGVzdHJveShzdHJ1Y3QgaXBfc2V0ICpzZXQsIHN0cnVjdCBodGFibGUgKnQsIGJvb2wgZXh0X2Rlc3Ryb3kpCiB7CiYjNDM7I2lmZGVmIElQX1NFVF9IQVNIX1dJVEhfTkVUUwomIzQzOwlzdHJ1Y3QgaHR5cGUgKmggPSBzZXQtJmd0O2RhdGE7CiYjNDM7I2VuZGlmCiAJc3RydWN0IGhidWNrZXQgKm47CiAJdTMyIGk7CiAKQEAgLTQ0Miw2ICYjNDM7NDg4LDExIEBAIG10eXBlX2FoYXNoX2Rlc3Ryb3koc3RydWN0IGlwX3NldCAqc2V0LCBzdHJ1Y3QgaHRhYmxlICp0LCBib29sIGV4dF9kZXN0cm95KQogCQlrZnJlZShuKTsKIAl9CiAKJiM0MzsjaWZkZWYgSVBfU0VUX0hBU0hfV0lUSF9ORVRTCiYjNDM7CWlmIChleHRfZGVzdHJveSkKJiM0MzsJCWZvciAoaSA9IDA7IGkgJmx0OyBJUFNFVF9ORVRfQ09VTlQ7IGkmIzQzOyYjNDM7KQomIzQzOwkJCWtmcmVlKGgtJmd0O3JuZXRzW2ldKTsKJiM0MzsjZW5kaWYKIAlpcF9zZXRfZnJlZSh0LSZndDtocmVnaW9uKTsKIAlpcF9zZXRfZnJlZSh0KTsKIH0KQEAgLTQ1MSwxMyAmIzQzOzUwMiwxNCBAQCBzdGF0aWMgdm9pZAogbXR5cGVfZGVzdHJveShzdHJ1Y3QgaXBfc2V0ICpzZXQpCiB7CiAJc3RydWN0IGh0eXBlICpoID0gc2V0LSZndDtkYXRhOwomIzQzOwlzdHJ1Y3QgaHRhYmxlICp0ID0gKF9fZm9yY2Ugc3RydWN0IGh0YWJsZSAqKWgtJmd0O3RhYmxlOwogCXN0cnVjdCBsaXN0X2hlYWQgKmwsICpsdDsKIAotCW10eXBlX2FoYXNoX2Rlc3Ryb3koc2V0LCAoX19mb3JjZSBzdHJ1Y3QgaHRhYmxlICopaC0mZ3Q7dGFibGUsIHRydWUpOwotCWxpc3RfZm9yX2VhY2hfc2FmZShsLCBsdCwgJmFtcDtoLSZndDthZCkgewomIzQzOwlsaXN0X2Zvcl9lYWNoX3NhZmUobCwgbHQsICZhbXA7dC0mZ3Q7YWQpIHsKIAkJbGlzdF9kZWwobCk7CiAJCWtmcmVlKGwpOwogCX0KJiM0MzsJbXR5cGVfYWhhc2hfZGVzdHJveShzZXQsIHQsIHRydWUpOwogCWtmcmVlKGgpOwogCiAJc2V0LSZndDtkYXRhID0gTlVMTDsKQEAgLTUxNCw4ICYjNDM7NTY2LDcgQEAgbXR5cGVfZ2NfZG8oc3RydWN0IGlwX3NldCAqc2V0LCBzdHJ1Y3QgaHR5cGUgKmgsIHN0cnVjdCBodGFibGUgKnQsIHUzMiByKQogI2lmZGVmIElQX1NFVF9IQVNIX1dJVEhfTkVUUwogCQkJZm9yIChrID0gMDsgayAmbHQ7IElQU0VUX05FVF9DT1VOVDsgayYjNDM7JiM0MzspCiAJCQkJbXR5cGVfZGVsX2NpZHIoc2V0LCBoLAotCQkJCQlOQ0lEUl9QVVQoRENJRFJfR0VUKGRhdGEtJmd0O2NpZHIsIGspKSwKLQkJCQkJayk7CiYjNDM7CQkJCQlEQ0lEUl9HRVQoZGF0YS0mZ3Q7Y2lkciwgayksIGspOwogI2VuZGlmCiAJCQl0LSZndDtocmVnaW9uW3JdLmVsZW1lbnRzLS07CiAJCQlpcF9zZXRfZXh0X2Rlc3Ryb3koc2V0LCBkYXRhKTsKQEAgLTU2OSw5ICYjNDM7NjIwLDEwIEBAIG10eXBlX2djKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKIAlzZXQgPSBnYy0mZ3Q7c2V0OwogCWggPSBzZXQtJmd0O2RhdGE7CiAKLQlzcGluX2xvY2tfYmgoJmFtcDtzZXQtJmd0O2xvY2spOwotCXQgPSBpcHNldF9kZXJlZmVyZW5jZV9zZXQoaC0mZ3Q7dGFibGUsIHNldCk7CiYjNDM7CXJjdV9yZWFkX2xvY2tfYmgoKTsKJiM0MzsJdCA9IHJjdV9kZXJlZmVyZW5jZV9iaChoLSZndDt0YWJsZSk7CiAJYXRvbWljX2luYygmYW1wO3QtJmd0O3VyZWYpOwomIzQzOwlyY3VfcmVhZF91bmxvY2tfYmgoKTsKIAludW1vZl9sb2NrcyA9IGFoYXNoX251bW9mX2xvY2tzKHQtJmd0O2h0YWJsZV9iaXRzKTsKIAlyID0gZ2MtJmd0O3JlZ2lvbiYjNDM7JiM0Mzs7CiAJaWYgKHIgJmd0Oz0gbnVtb2ZfbG9ja3MpIHsKQEAgLTU4MCwxMSAmIzQzOzYzMiwxMyBAQCBtdHlwZV9nYyhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCiAJbmV4dF9ydW4gPSAoSVBTRVRfR0NfUEVSSU9EKHNldC0mZ3Q7dGltZW91dCkgKiBIWikgLyBudW1vZl9sb2NrczsKIAlpZiAobmV4dF9ydW4gJmx0OyBIWi8xMCkKIAkJbmV4dF9ydW4gPSBIWi8xMDsKLQlzcGluX3VubG9ja19iaCgmYW1wO3NldC0mZ3Q7bG9jayk7CiAKLQltdHlwZV9nY19kbyhzZXQsIGgsIHQsIHIpOwomIzQzOwlzcGluX2xvY2tfYmgoJmFtcDtnYy0mZ3Q7bG9jayk7CiYjNDM7CWlmICghdC0mZ3Q7cmVzaXppbmcpCiYjNDM7CQltdHlwZV9nY19kbyhzZXQsIGgsIHQsIHIpOwomIzQzOwlzcGluX3VubG9ja19iaCgmYW1wO2djLSZndDtsb2NrKTsKIAotCWlmIChhdG9taWNfZGVjX2FuZF90ZXN0KCZhbXA7dC0mZ3Q7dXJlZikgJmFtcDsmYW1wOyBhdG9taWNfcmVhZCgmYW1wO3QtJmd0O3JlZikpIHsKJiM0MzsJaWYgKGF0b21pY19kZWNfYW5kX3Rlc3QoJmFtcDt0LSZndDt1cmVmKSAmYW1wOyZhbXA7IHQtJmd0O3Jlc2l6aW5nKSB7CiAJCXByX2RlYnVnKCYjMzQ7VGFibGUgZGVzdHJveSBhZnRlciByZXNpemUgYnkgZXhwaXJlOiAlcFxuJiMzNDssIHQpOwogCQltdHlwZV9haGFzaF9kZXN0cm95KHNldCwgdCwgZmFsc2UpOwogCX0KQEAgLTY2OCwxNSAmIzQzOzcyMiwxOCBAQCBtdHlwZV9yZXNpemUoc3RydWN0IGlwX3NldCAqc2V0LCBib29sIHJldHJpZWQpCiAJfQogCXQtJmd0O2h0YWJsZV9iaXRzID0gaHRhYmxlX2JpdHM7CiAJdC0mZ3Q7bWF4ZWxlbSA9IGgtJmd0O21heGVsZW0gLyBhaGFzaF9udW1vZl9sb2NrcyhodGFibGVfYml0cyk7CiYjNDM7CUlOSVRfTElTVF9IRUFEKCZhbXA7dC0mZ3Q7YWQpOwogCWZvciAoaSA9IDA7IGkgJmx0OyBhaGFzaF9udW1vZl9sb2NrcyhodGFibGVfYml0cyk7IGkmIzQzOyYjNDM7KQogCQlzcGluX2xvY2tfaW5pdCgmYW1wO3QtJmd0O2hyZWdpb25baV0ubG9jayk7CiAKIAkvKiBUaGVyZSBjYW4mIzM5O3QgYmUgYW5vdGhlciBwYXJhbGxlbCByZXNpemluZywKLQkgKiBidXQgZHVtcGluZywgZ2MsIGtlcm5lbCBzaWRlIGFkZC9kZWwgYXJlIHBvc3NpYmxlCiYjNDM7CSAqIGJ1dCBkdW1waW5nIGFuZCBrZXJuZWwgc2lkZSBhZGQvZGVsIGFyZSBwb3NzaWJsZQogCSAqLwogCW9yaWcgPSBpcHNldF9kZXJlZmVyZW5jZV9iaF9uZm5sKGgtJmd0O3RhYmxlKTsKLQlhdG9taWNfc2V0KCZhbXA7b3JpZy0mZ3Q7cmVmLCAxKTsKIAlhdG9taWNfaW5jKCZhbXA7b3JpZy0mZ3Q7dXJlZik7CiYjNDM7CXNwaW5fbG9ja19iaCgmYW1wO2gtJmd0O2djLmxvY2spOwomIzQzOwlvcmlnLSZndDtyZXNpemluZyA9IHRydWU7CiYjNDM7CXNwaW5fdW5sb2NrX2JoKCZhbXA7aC0mZ3Q7Z2MubG9jayk7CiAJcHJfZGVidWcoJiMzNDthdHRlbXB0IHRvIHJlc2l6ZSBzZXQgJXMgZnJvbSAldSB0byAldSwgdCAlcFxuJiMzNDssCiAJCSBzZXQtJmd0O25hbWUsIG9yaWctJmd0O2h0YWJsZV9iaXRzLCBodGFibGVfYml0cywgb3JpZyk7CiAJZm9yIChyID0gMDsgciAmbHQ7IGFoYXNoX251bW9mX2xvY2tzKG9yaWctJmd0O2h0YWJsZV9iaXRzKTsgciYjNDM7JiM0MzspIHsKQEAgLTc2OCw3ICYjNDM7ODI1LDcgQEAgbXR5cGVfcmVzaXplKHN0cnVjdCBpcF9zZXQgKnNldCwgYm9vbCByZXRyaWVkKQogCSAqIEtlcm5lbC1zaWRlIGFkZCBjYW5ub3QgdHJpZ2dlciBhIHJlc2l6ZSBhbmQgdXNlcnNwYWNlIGFjdGlvbnMKIAkgKiBhcmUgc2VyaWFsaXplZCBieSB0aGUgbXV0ZXguCiAJICovCi0JbGlzdF9mb3JfZWFjaF9zYWZlKGwsIGx0LCAmYW1wO2gtJmd0O2FkKSB7CiYjNDM7CWxpc3RfZm9yX2VhY2hfc2FmZShsLCBsdCwgJmFtcDtvcmlnLSZndDthZCkgewogCQl4ID0gbGlzdF9lbnRyeShsLCBzdHJ1Y3QgbXR5cGVfcmVzaXplX2FkLCBsaXN0KTsKIAkJaWYgKHgtJmd0O2FkID09IElQU0VUX0FERCkgewogCQkJbXR5cGVfYWRkKHNldCwgJmFtcDt4LSZndDtkLCAmYW1wO3gtJmd0O2V4dCwgJmFtcDt4LSZndDttZXh0LCB4LSZndDtmbGFncyk7CkBAIC03OTIsMTEgJiM0Mzs4NDksMjQgQEAgbXR5cGVfcmVzaXplKHN0cnVjdCBpcF9zZXQgKnNldCwgYm9vbCByZXRyaWVkKQogCiBjbGVhbnVwOgogCXJjdV9yZWFkX3VubG9ja19iaCgpOwotCWF0b21pY19zZXQoJmFtcDtvcmlnLSZndDtyZWYsIDApOwomIzQzOwlzcGluX2xvY2tfYmgoJmFtcDtoLSZndDtnYy5sb2NrKTsKJiM0MzsJb3JpZy0mZ3Q7cmVzaXppbmcgPSBmYWxzZTsKJiM0MzsJc3Bpbl91bmxvY2tfYmgoJmFtcDtoLSZndDtnYy5sb2NrKTsKJiM0MzsJLyogTWFrZSBzdXJlIHBhcmFsbGVsIHJlYWRlcnMgc2VlIHRoYXQgb3JpZy0mZ3Q7cmVzaXppbmcgaXMgZmFsc2UKJiM0MzsJICogYmVmb3JlIHdlIGRlY3JlbWVudCB1cmVmICovCiYjNDM7CXN5bmNocm9uaXplX3JjdSgpOwogCWF0b21pY19kZWMoJmFtcDtvcmlnLSZndDt1cmVmKTsKIAltdHlwZV9haGFzaF9kZXN0cm95KHNldCwgdCwgZmFsc2UpOwogCWlmIChyZXQgPT0gLUVBR0FJTikKIAkJZ290byByZXRyeTsKJiM0MzsKJiM0MzsJLyogQ2xlYW51cCB0aGUgYmFja2xvZyBvZiBBREQvREVMIGVsZW1lbnRzICovCiYjNDM7CXNwaW5fbG9ja19iaCgmYW1wO3NldC0mZ3Q7bG9jayk7CiYjNDM7CWxpc3RfZm9yX2VhY2hfc2FmZShsLCBsdCwgJmFtcDtvcmlnLSZndDthZCkgewomIzQzOwkJbGlzdF9kZWwobCk7CiYjNDM7CQlrZnJlZShsKTsKJiM0MzsJfQomIzQzOwlzcGluX3VubG9ja19iaCgmYW1wO3NldC0mZ3Q7bG9jayk7CiAJZ290byBvdXQ7CiAKIGhid2FybjoKQEAgLTg2MCwxNSAmIzQzOzkzMCwxMyBAQCBtdHlwZV9hZGQoc3RydWN0IGlwX3NldCAqc2V0LCB2b2lkICp2YWx1ZSwgY29uc3Qgc3RydWN0IGlwX3NldF9leHQgKmV4dCwKIAlrZXkgPSBIS0VZKHZhbHVlLCBoLSZndDtpbml0dmFsLCB0LSZndDtodGFibGVfYml0cyk7CiAJciA9IGFoYXNoX3JlZ2lvbihrZXkpOwogCWF0b21pY19pbmMoJmFtcDt0LSZndDt1cmVmKTsKJiM0MzsJcmN1X3JlYWRfdW5sb2NrX2JoKCk7CiAJZWxlbWVudHMgPSB0LSZndDtocmVnaW9uW3JdLmVsZW1lbnRzOwogCW1heGVsZW0gPSB0LSZndDttYXhlbGVtOwogCWlmIChlbGVtZW50cyAmZ3Q7PSBtYXhlbGVtKSB7CiAJCXUzMiBlOwotCQlpZiAoU0VUX1dJVEhfVElNRU9VVChzZXQpKSB7Ci0JCQlyY3VfcmVhZF91bmxvY2tfYmgoKTsKJiM0MzsJCWlmIChTRVRfV0lUSF9USU1FT1VUKHNldCkpCiAJCQltdHlwZV9nY19kbyhzZXQsIGgsIHQsIHIpOwotCQkJcmN1X3JlYWRfbG9ja19iaCgpOwotCQl9CiAJCW1heGVsZW0gPSBoLSZndDttYXhlbGVtOwogCQllbGVtZW50cyA9IDA7CiAJCWZvciAoZSA9IDA7IGUgJmx0OyBhaGFzaF9udW1vZl9sb2Nrcyh0LSZndDtodGFibGVfYml0cyk7IGUmIzQzOyYjNDM7KQpAQCAtODc2LDcgJiM0Mzs5NDQsNiBAQCBtdHlwZV9hZGQoc3RydWN0IGlwX3NldCAqc2V0LCB2b2lkICp2YWx1ZSwgY29uc3Qgc3RydWN0IGlwX3NldF9leHQgKmV4dCwKIAkJaWYgKGVsZW1lbnRzICZndDs9IG1heGVsZW0gJmFtcDsmYW1wOyBTRVRfV0lUSF9GT1JDRUFERChzZXQpKQogCQkJZm9yY2VhZGQgPSB0cnVlOwogCX0KLQlyY3VfcmVhZF91bmxvY2tfYmgoKTsKIAogCXNwaW5fbG9ja19iaCgmYW1wO3QtJmd0O2hyZWdpb25bcl0ubG9jayk7CiAJbiA9IHJjdV9kZXJlZmVyZW5jZV9iaChoYnVja2V0KHQsIGtleSkpOwpAQCAtOTI5LDggJiM0Mzs5OTYsNyBAQCBtdHlwZV9hZGQoc3RydWN0IGlwX3NldCAqc2V0LCB2b2lkICp2YWx1ZSwgY29uc3Qgc3RydWN0IGlwX3NldF9leHQgKmV4dCwKICNpZmRlZiBJUF9TRVRfSEFTSF9XSVRIX05FVFMKIAkJCWZvciAoaSA9IDA7IGkgJmx0OyBJUFNFVF9ORVRfQ09VTlQ7IGkmIzQzOyYjNDM7KQogCQkJCW10eXBlX2RlbF9jaWRyKHNldCwgaCwKLQkJCQkJTkNJRFJfUFVUKERDSURSX0dFVChkYXRhLSZndDtjaWRyLCBpKSksCi0JCQkJCWkpOwomIzQzOwkJCQkJRENJRFJfR0VUKGRhdGEtJmd0O2NpZHIsIGkpLCBpKTsKICNlbmRpZgogCQkJaXBfc2V0X2V4dF9kZXN0cm95KHNldCwgZGF0YSk7CiAJCQl0LSZndDtocmVnaW9uW3JdLmVsZW1lbnRzLS07CkBAIC05NzUsNyAmIzQzOzEwNDEsNyBAQCBtdHlwZV9hZGQoc3RydWN0IGlwX3NldCAqc2V0LCB2b2lkICp2YWx1ZSwgY29uc3Qgc3RydWN0IGlwX3NldF9leHQgKmV4dCwKIAl0LSZndDtocmVnaW9uW3JdLmVsZW1lbnRzJiM0MzsmIzQzOzsKICNpZmRlZiBJUF9TRVRfSEFTSF9XSVRIX05FVFMKIAlmb3IgKGkgPSAwOyBpICZsdDsgSVBTRVRfTkVUX0NPVU5UOyBpJiM0MzsmIzQzOykKLQkJbXR5cGVfYWRkX2NpZHIoc2V0LCBoLCBOQ0lEUl9QVVQoRENJRFJfR0VUKGQtJmd0O2NpZHIsIGkpKSwgaSk7CiYjNDM7CQltdHlwZV9hZGRfY2lkcihzZXQsIGgsIERDSURSX0dFVChkLSZndDtjaWRyLCBpKSwgaSk7CiAjZW5kaWYKIAltZW1jcHkoZGF0YSwgZCwgc2l6ZW9mKHN0cnVjdCBtdHlwZV9lbGVtKSk7CiBvdmVyd3JpdGVfZXh0ZW5zaW9uczoKQEAgLTEwMDMsNyAmIzQzOzEwNjksNyBAQCBtdHlwZV9hZGQoc3RydWN0IGlwX3NldCAqc2V0LCB2b2lkICp2YWx1ZSwgY29uc3Qgc3RydWN0IGlwX3NldF9leHQgKmV4dCwKIAlyZXQgPSAwOwogcmVzaXplOgogCXNwaW5fdW5sb2NrX2JoKCZhbXA7dC0mZ3Q7aHJlZ2lvbltyXS5sb2NrKTsKLQlpZiAoYXRvbWljX3JlYWQoJmFtcDt0LSZndDtyZWYpICZhbXA7JmFtcDsgZXh0LSZndDt0YXJnZXQpIHsKJiM0MzsJaWYgKHQtJmd0O3Jlc2l6aW5nICZhbXA7JmFtcDsgZXh0ICZhbXA7JmFtcDsgZXh0LSZndDt0YXJnZXQpIHsKIAkJLyogUmVzaXplIGlzIGluIHByb2Nlc3MgYW5kIGtlcm5lbCBzaWRlIGFkZCwgc2F2ZSB2YWx1ZXMgKi8KIAkJc3RydWN0IG10eXBlX3Jlc2l6ZV9hZCAqeDsKIApAQCAtMTAxNyw3ICYjNDM7MTA4Myw3IEBAIG10eXBlX2FkZChzdHJ1Y3QgaXBfc2V0ICpzZXQsIHZvaWQgKnZhbHVlLCBjb25zdCBzdHJ1Y3QgaXBfc2V0X2V4dCAqZXh0LAogCQltZW1jcHkoJmFtcDt4LSZndDttZXh0LCBtZXh0LCBzaXplb2Yoc3RydWN0IGlwX3NldF9leHQpKTsKIAkJeC0mZ3Q7ZmxhZ3MgPSBmbGFnczsKIAkJc3Bpbl9sb2NrX2JoKCZhbXA7c2V0LSZndDtsb2NrKTsKLQkJbGlzdF9hZGRfdGFpbCgmYW1wO3gtJmd0O2xpc3QsICZhbXA7aC0mZ3Q7YWQpOwomIzQzOwkJbGlzdF9hZGRfdGFpbCgmYW1wO3gtJmd0O2xpc3QsICZhbXA7dC0mZ3Q7YWQpOwogCQlzcGluX3VubG9ja19iaCgmYW1wO3NldC0mZ3Q7bG9jayk7CiAJfQogCWdvdG8gb3V0OwpAQCAtMTAzMCw3ICYjNDM7MTA5Niw3IEBAIG10eXBlX2FkZChzdHJ1Y3QgaXBfc2V0ICpzZXQsIHZvaWQgKnZhbHVlLCBjb25zdCBzdHJ1Y3QgaXBfc2V0X2V4dCAqZXh0LAogdW5sb2NrOgogCXNwaW5fdW5sb2NrX2JoKCZhbXA7dC0mZ3Q7aHJlZ2lvbltyXS5sb2NrKTsKIG91dDoKLQlpZiAoYXRvbWljX2RlY19hbmRfdGVzdCgmYW1wO3QtJmd0O3VyZWYpICZhbXA7JmFtcDsgYXRvbWljX3JlYWQoJmFtcDt0LSZndDtyZWYpKSB7CiYjNDM7CWlmIChhdG9taWNfZGVjX2FuZF90ZXN0KCZhbXA7dC0mZ3Q7dXJlZikgJmFtcDsmYW1wOyB0LSZndDtyZXNpemluZykgewogCQlwcl9kZWJ1ZygmIzM0O1RhYmxlIGRlc3Ryb3kgYWZ0ZXIgcmVzaXplIGJ5IGFkZDogJXBcbiYjMzQ7LCB0KTsKIAkJbXR5cGVfYWhhc2hfZGVzdHJveShzZXQsIHQsIGZhbHNlKTsKIAl9CkBAIC0xMDg5LDExICYjNDM7MTE1NSwxMSBAQCBtdHlwZV9kZWwoc3RydWN0IGlwX3NldCAqc2V0LCB2b2lkICp2YWx1ZSwgY29uc3Qgc3RydWN0IGlwX3NldF9leHQgKmV4dCwKICNpZmRlZiBJUF9TRVRfSEFTSF9XSVRIX05FVFMKIAkJZm9yIChqID0gMDsgaiAmbHQ7IElQU0VUX05FVF9DT1VOVDsgaiYjNDM7JiM0MzspCiAJCQltdHlwZV9kZWxfY2lkcihzZXQsIGgsCi0JCQkJICAgICAgIE5DSURSX1BVVChEQ0lEUl9HRVQoZC0mZ3Q7Y2lkciwgaikpLCBqKTsKJiM0MzsJCQkJRENJRFJfR0VUKGQtJmd0O2NpZHIsIGopLCBqKTsKICNlbmRpZgogCQlpcF9zZXRfZXh0X2Rlc3Ryb3koc2V0LCBkYXRhKTsKIAotCQlpZiAoYXRvbWljX3JlYWQoJmFtcDt0LSZndDtyZWYpICZhbXA7JmFtcDsgZXh0LSZndDt0YXJnZXQpIHsKJiM0MzsJCWlmICh0LSZndDtyZXNpemluZyAmYW1wOyZhbXA7IGV4dCAmYW1wOyZhbXA7IGV4dC0mZ3Q7dGFyZ2V0KSB7CiAJCQkvKiBSZXNpemUgaXMgaW4gcHJvY2VzcyBhbmQga2VybmVsIHNpZGUgZGVsLAogCQkJICogc2F2ZSB2YWx1ZXMKIAkJCSAqLwpAQCAtMTE0MSwxMCAmIzQzOzEyMDcsMTAgQEAgbXR5cGVfZGVsKHN0cnVjdCBpcF9zZXQgKnNldCwgdm9pZCAqdmFsdWUsIGNvbnN0IHN0cnVjdCBpcF9zZXRfZXh0ICpleHQsCiAJc3Bpbl91bmxvY2tfYmgoJmFtcDt0LSZndDtocmVnaW9uW3JdLmxvY2spOwogCWlmICh4KSB7CiAJCXNwaW5fbG9ja19iaCgmYW1wO3NldC0mZ3Q7bG9jayk7Ci0JCWxpc3RfYWRkKCZhbXA7eC0mZ3Q7bGlzdCwgJmFtcDtoLSZndDthZCk7CiYjNDM7CQlsaXN0X2FkZCgmYW1wO3gtJmd0O2xpc3QsICZhbXA7dC0mZ3Q7YWQpOwogCQlzcGluX3VubG9ja19iaCgmYW1wO3NldC0mZ3Q7bG9jayk7CiAJfQotCWlmIChhdG9taWNfZGVjX2FuZF90ZXN0KCZhbXA7dC0mZ3Q7dXJlZikgJmFtcDsmYW1wOyBhdG9taWNfcmVhZCgmYW1wO3QtJmd0O3JlZikpIHsKJiM0MzsJaWYgKGF0b21pY19kZWNfYW5kX3Rlc3QoJmFtcDt0LSZndDt1cmVmKSAmYW1wOyZhbXA7IHQtJmd0O3Jlc2l6aW5nKSB7CiAJCXByX2RlYnVnKCYjMzQ7VGFibGUgZGVzdHJveSBhZnRlciByZXNpemUgYnkgZGVsOiAlcFxuJiMzNDssIHQpOwogCQltdHlwZV9haGFzaF9kZXN0cm95KHNldCwgdCwgZmFsc2UpOwogCX0KQEAgLTExNzIsMjggJiM0MzsxMjM4LDM3IEBAIG10eXBlX3Rlc3RfY2lkcnMoc3RydWN0IGlwX3NldCAqc2V0LCBzdHJ1Y3QgbXR5cGVfZWxlbSAqZCwKIHsKIAlzdHJ1Y3QgaHR5cGUgKmggPSBzZXQtJmd0O2RhdGE7CiAJc3RydWN0IGh0YWJsZSAqdCA9IHJjdV9kZXJlZmVyZW5jZV9iaChoLSZndDt0YWJsZSk7CiYjNDM7CXN0cnVjdCBuZXRfcHJlZml4ZXMgKm5ldHMwOwogCXN0cnVjdCBoYnVja2V0ICpuOwogCXN0cnVjdCBtdHlwZV9lbGVtICpkYXRhOwogI2lmIElQU0VUX05FVF9DT1VOVCA9PSAyCiYjNDM7CXN0cnVjdCBuZXRfcHJlZml4ZXMgKm5ldHMxOwogCXN0cnVjdCBtdHlwZV9lbGVtIG9yaWcgPSAqZDsKLQlpbnQgcmV0LCBpLCBqID0gMCwgazsKJiM0MzsJaW50IHJldCwgaSwgaiwgazsKICNlbHNlCi0JaW50IHJldCwgaSwgaiA9IDA7CiYjNDM7CWludCByZXQsIGksIGo7CiAjZW5kaWYKIAl1MzIga2V5LCBtdWx0aSA9IDA7CiAJdTggcG9zOwogCiAJcHJfZGVidWcoJiMzNDt0ZXN0IGJ5IG5ldHNcbiYjMzQ7KTsKLQlmb3IgKDsgaiAmbHQ7IE5MRU4gJmFtcDsmYW1wOyBoLSZndDtuZXRzW2pdLmNpZHJbMF0gJmFtcDsmYW1wOyAhbXVsdGk7IGomIzQzOyYjNDM7KSB7CiYjNDM7CXJjdV9yZWFkX2xvY2tfYmgoKTsKJiM0MzsJbmV0czAgPSByY3VfZGVyZWZlcmVuY2VfYmgoaC0mZ3Q7cm5ldHNbMF0pOwomIzQzOyNpZiBJUFNFVF9ORVRfQ09VTlQgPT0gMgomIzQzOwluZXRzMSA9IHJjdV9kZXJlZmVyZW5jZV9iaChoLSZndDtybmV0c1sxXSk7CiYjNDM7I2VuZGlmCiYjNDM7CWZvciAoaiA9IDA7IGogJmx0OyBuZXRzMC0mZ3Q7bGVuICZhbXA7JmFtcDsgIW11bHRpOyBqJiM0MzsmIzQzOykgewomIzQzOwkJaWYgKCFuZXRzMC0mZ3Q7bmV0c1tqXS5jb3VudCkKJiM0MzsJCQljb250aW51ZTsKICNpZiBJUFNFVF9ORVRfQ09VTlQgPT0gMgogCQltdHlwZV9kYXRhX3Jlc2V0X2VsZW0oZCwgJmFtcDtvcmlnKTsKLQkJbXR5cGVfZGF0YV9uZXRtYXNrKGQsIE5DSURSX0dFVChoLSZndDtuZXRzW2pdLmNpZHJbMF0pLCBmYWxzZSk7Ci0JCWZvciAoayA9IDA7IGsgJmx0OyBOTEVOICZhbXA7JmFtcDsgaC0mZ3Q7bmV0c1trXS5jaWRyWzFdICZhbXA7JmFtcDsgIW11bHRpOwotCQkgICAgIGsmIzQzOyYjNDM7KSB7Ci0JCQltdHlwZV9kYXRhX25ldG1hc2soZCwgTkNJRFJfR0VUKGgtJmd0O25ldHNba10uY2lkclsxXSksCi0JCQkJCSAgIHRydWUpOwomIzQzOwkJbXR5cGVfZGF0YV9uZXRtYXNrKGQsIG5ldHMwLSZndDtuZXRzW2pdLmNpZHIsIGZhbHNlKTsKJiM0MzsJCWZvciAoayA9IDA7IGsgJmx0OyBuZXRzMS0mZ3Q7bGVuICZhbXA7JmFtcDsgIW11bHRpOyBrJiM0MzsmIzQzOykgewomIzQzOwkJCWlmICghbmV0czEtJmd0O25ldHNba10uY291bnQpCiYjNDM7CQkJCWNvbnRpbnVlOwomIzQzOwkJCW10eXBlX2RhdGFfbmV0bWFzayhkLCBuZXRzMS0mZ3Q7bmV0c1trXS5jaWRyLCB0cnVlKTsKICNlbHNlCi0JCW10eXBlX2RhdGFfbmV0bWFzayhkLCBOQ0lEUl9HRVQoaC0mZ3Q7bmV0c1tqXS5jaWRyWzBdKSk7CiYjNDM7CQltdHlwZV9kYXRhX25ldG1hc2soZCwgbmV0czAtJmd0O25ldHNbal0uY2lkcik7CiAjZW5kaWYKIAkJa2V5ID0gSEtFWShkLCBoLSZndDtpbml0dmFsLCB0LSZndDtodGFibGVfYml0cyk7CiAJCW4gPSByY3VfZGVyZWZlcmVuY2VfYmgoaGJ1Y2tldCh0LCBrZXkpKTsKQEAgLTEyMDgsNyAmIzQzOzEyODMsNyBAQCBtdHlwZV90ZXN0X2NpZHJzKHN0cnVjdCBpcF9zZXQgKnNldCwgc3RydWN0IG10eXBlX2VsZW0gKmQsCiAJCQkJY29udGludWU7CiAJCQlyZXQgPSBtdHlwZV9kYXRhX21hdGNoKGRhdGEsIGV4dCwgbWV4dCwgc2V0LCBmbGFncyk7CiAJCQlpZiAocmV0ICE9IDApCi0JCQkJcmV0dXJuIHJldDsKJiM0MzsJCQkJZ290byB1bmxvY2s7CiAjaWZkZWYgSVBfU0VUX0hBU0hfV0lUSF9NVUxUSQogCQkJLyogTm8gbWF0Y2gsIHJlc2V0IG11bHRpcGxlIG1hdGNoIGZsYWcgKi8KIAkJCW11bHRpID0gMDsKQEAgLTEyMTgsNyAmIzQzOzEyOTMsMTAgQEAgbXR5cGVfdGVzdF9jaWRycyhzdHJ1Y3QgaXBfc2V0ICpzZXQsIHN0cnVjdCBtdHlwZV9lbGVtICpkLAogCQl9CiAjZW5kaWYKIAl9Ci0JcmV0dXJuIDA7CiYjNDM7CXJldCA9IDA7CiYjNDM7dW5sb2NrOgomIzQzOwlyY3VfcmVhZF91bmxvY2tfYmgoKTsKJiM0MzsJcmV0dXJuIHJldDsKIH0KICNlbmRpZgogCkBAIC0xMzUzLDcgJiM0MzsxNDMxLDcgQEAgbXR5cGVfdXJlZihzdHJ1Y3QgaXBfc2V0ICpzZXQsIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYiwgYm9vbCBzdGFydCkKIAkJcmN1X3JlYWRfdW5sb2NrX2JoKCk7CiAJfSBlbHNlIGlmIChjYi0mZ3Q7YXJnc1tJUFNFVF9DQl9QUklWQVRFXSkgewogCQl0ID0gKHN0cnVjdCBodGFibGUgKiljYi0mZ3Q7YXJnc1tJUFNFVF9DQl9QUklWQVRFXTsKLQkJaWYgKGF0b21pY19kZWNfYW5kX3Rlc3QoJmFtcDt0LSZndDt1cmVmKSAmYW1wOyZhbXA7IGF0b21pY19yZWFkKCZhbXA7dC0mZ3Q7cmVmKSkgewomIzQzOwkJaWYgKGF0b21pY19kZWNfYW5kX3Rlc3QoJmFtcDt0LSZndDt1cmVmKSAmYW1wOyZhbXA7IHQtJmd0O3Jlc2l6aW5nKSB7CiAJCQlwcl9kZWJ1ZygmIzM0O1RhYmxlIGRlc3Ryb3kgYWZ0ZXIgcmVzaXplICYjMzQ7CiAJCQkJICYjMzQ7IGJ5IGR1bXA6ICVwXG4mIzM0OywgdCk7CiAJCQltdHlwZV9haGFzaF9kZXN0cm95KHNldCwgdCwgZmFsc2UpOwpAQCAtMTQ4Myw2ICYjNDM7MTU2MSw5IEBAIElQU0VUX1RPS0VOKEhUWVBFLCBfY3JlYXRlKShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBpcF9zZXQgKnNldCwKIAlpbnQgcmV0IF9fYXR0cmlidXRlX18oKHVudXNlZCkpID0gMDsKIAl1OCBuZXRtYXNrID0gc2V0LSZndDtmYW1pbHkgPT0gTkZQUk9UT19JUFY0ID8gMzIgOiAxMjg7CiAJdW5pb24gbmZfaW5ldF9hZGRyIGJpdG1hc2sgPSBvbmVzbWFzazsKJiM0MzsjZW5kaWYKJiM0MzsjaWZkZWYgSVBfU0VUX0hBU0hfV0lUSF9ORVRTCiYjNDM7CXN0cnVjdCBuZXRfcHJlZml4ZXMgKm5ldHM7CiAjZW5kaWYKIAlzaXplX3QgaHNpemU7CiAJc3RydWN0IGh0eXBlICpoOwpAQCAtMTU2Niw3ICYjNDM7MTY0NywxMyBAQCBJUFNFVF9UT0tFTihIVFlQRSwgX2NyZWF0ZSkoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgaXBfc2V0ICpzZXQsCiAJaWYgKHRiW0lQU0VUX0FUVFJfTUFYRUxFTV0pCiAJCW1heGVsZW0gPSBpcF9zZXRfZ2V0X2gzMih0YltJUFNFVF9BVFRSX01BWEVMRU1dKTsKIAotCWhzaXplID0gc2l6ZW9mKCpoKTsKJiM0MzsjaWZkZWYgSVBfU0VUX1BST1RPX1VOREVGCiYjNDM7CWhzaXplID0gc2l6ZW9mKHN0cnVjdCBodHlwZSk7CiYjNDM7I2Vsc2UKJiM0MzsJaHNpemUgPSBzZXQtJmd0O2ZhbWlseSA9PSBORlBST1RPX0lQVjYgPwomIzQzOwkJc2l6ZW9mKHN0cnVjdCBJUFNFVF9UT0tFTihIVFlQRSwgNikpIDoKJiM0MzsJCXNpemVvZihzdHJ1Y3QgSVBTRVRfVE9LRU4oSFRZUEUsIDQpKTsKJiM0MzsjZW5kaWYKIAloID0ga3phbGxvYyhoc2l6ZSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFoKQogCQlyZXR1cm4gLUVOT01FTTsKQEAgLTE1NzcsMjIgJiM0MzsxNjY0LDI3IEBAIElQU0VUX1RPS0VOKEhUWVBFLCBfY3JlYXRlKShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBpcF9zZXQgKnNldCwKIAkgKi8KIAloYml0cyA9IGZscyhoYXNoc2l6ZSAtIDEpOwogCWhzaXplID0gaHRhYmxlX3NpemUoaGJpdHMpOwotCWlmIChoc2l6ZSA9PSAwKSB7Ci0JCWtmcmVlKGgpOwotCQlyZXR1cm4gLUVOT01FTTsKLQl9CiYjNDM7CWlmIChoc2l6ZSA9PSAwKQomIzQzOwkJZ290byBmcmVlX2g7CiAJdCA9IGlwX3NldF9hbGxvYyhoc2l6ZSk7Ci0JaWYgKCF0KSB7Ci0JCWtmcmVlKGgpOwotCQlyZXR1cm4gLUVOT01FTTsKLQl9CiYjNDM7CWlmICghdCkKJiM0MzsJCWdvdG8gZnJlZV9oOwogCXQtJmd0O2hyZWdpb24gPSBpcF9zZXRfYWxsb2MoYWhhc2hfc2l6ZW9mX3JlZ2lvbnMoaGJpdHMpKTsKLQlpZiAoIXQtJmd0O2hyZWdpb24pIHsKLQkJaXBfc2V0X2ZyZWUodCk7Ci0JCWtmcmVlKGgpOwotCQlyZXR1cm4gLUVOT01FTTsKJiM0MzsJaWYgKCF0LSZndDtocmVnaW9uKQomIzQzOwkJZ290byBmcmVlX3Q7CiYjNDM7I2lmZGVmIElQX1NFVF9IQVNIX1dJVEhfTkVUUwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgSVBTRVRfTkVUX0NPVU5UOyBpJiM0MzsmIzQzOykgewomIzQzOwkJbmV0cyA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBuZXRfcHJlZml4ZXMpLCBHRlBfS0VSTkVMKTsKJiM0MzsJCWlmICghbmV0cykgewomIzQzOwkJCWlmIChpICE9IDApCiYjNDM7CQkJCWtmcmVlKGgtJmd0O3JuZXRzWzBdKTsKJiM0MzsJCQlnb3RvIGZyZWVfaHJlZ2lvbjsKJiM0MzsJCX0KJiM0MzsJCVJDVV9JTklUX1BPSU5URVIoaC0mZ3Q7cm5ldHNbaV0sIG5ldHMpOwogCX0KJiM0MzsjZW5kaWYKIAloLSZndDtnYy5zZXQgPSBzZXQ7CiYjNDM7CXNwaW5fbG9ja19pbml0KCZhbXA7aC0mZ3Q7Z2MubG9jayk7CiAJZm9yIChpID0gMDsgaSAmbHQ7IGFoYXNoX251bW9mX2xvY2tzKGhiaXRzKTsgaSYjNDM7JiM0MzspCiAJCXNwaW5fbG9ja19pbml0KCZhbXA7dC0mZ3Q7aHJlZ2lvbltpXS5sb2NrKTsKIAloLSZndDttYXhlbGVtID0gbWF4ZWxlbTsKQEAgLTE2MTksOSAmIzQzOzE3MTEsOCBAQCBJUFNFVF9UT0tFTihIVFlQRSwgX2NyZWF0ZSkoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgaXBfc2V0ICpzZXQsCiAJfQogCXQtJmd0O2h0YWJsZV9iaXRzID0gaGJpdHM7CiAJdC0mZ3Q7bWF4ZWxlbSA9IGgtJmd0O21heGVsZW0gLyBhaGFzaF9udW1vZl9sb2NrcyhoYml0cyk7CiYjNDM7CUlOSVRfTElTVF9IRUFEKCZhbXA7dC0mZ3Q7YWQpOwogCVJDVV9JTklUX1BPSU5URVIoaC0mZ3Q7dGFibGUsIHQpOwotCi0JSU5JVF9MSVNUX0hFQUQoJmFtcDtoLSZndDthZCk7CiAJc2V0LSZndDtkYXRhID0gaDsKICNpZm5kZWYgSVBfU0VUX1BST1RPX1VOREVGCiAJaWYgKHNldC0mZ3Q7ZmFtaWx5ID09IE5GUFJPVE9fSVBWNCkgewpAQCAtMTY1NSw2ICYjNDM7MTc0NiwxNiBAQCBJUFNFVF9UT0tFTihIVFlQRSwgX2NyZWF0ZSkoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgaXBfc2V0ICpzZXQsCiAJCSB0LSZndDtodGFibGVfYml0cywgaC0mZ3Q7bWF4ZWxlbSwgc2V0LSZndDtkYXRhLCB0KTsKIAogCXJldHVybiAwOwomIzQzOwomIzQzOyNpZmRlZiBJUF9TRVRfSEFTSF9XSVRIX05FVFMKJiM0MztmcmVlX2hyZWdpb246CiYjNDM7CWlwX3NldF9mcmVlKHQtJmd0O2hyZWdpb24pOwomIzQzOyNlbmRpZgomIzQzO2ZyZWVfdDoKJiM0MzsJaXBfc2V0X2ZyZWUodCk7CiYjNDM7ZnJlZV9oOgomIzQzOwlrZnJlZShoKTsKJiM0MzsJcmV0dXJuIC1FTk9NRU07CiB9CiAjZW5kaWYgLyogSVBfU0VUX0VNSVRfQ1JFQVRFICovCiAKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0bmV0LmMgYi9uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwcG9ydG5ldC5jCmluZGV4IDJkNjY1MmQ0MzE5OWE0Li4xOTU4NTNhMjViMDYwNiAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcHBvcnRuZXQuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwcG9ydG5ldC5jCkBAIC0xMzgsNyAmIzQzOzEzOCw3IEBAIGhhc2hfaXBwb3J0bmV0NF9rYWR0KHN0cnVjdCBpcF9zZXQgKnNldCwgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAljb25zdCBzdHJ1Y3QgaGFzaF9pcHBvcnRuZXQ0ICpoID0gc2V0LSZndDtkYXRhOwogCWlwc2V0X2FkdGZuIGFkdGZuID0gc2V0LSZndDt2YXJpYW50LSZndDthZHRbYWR0XTsKIAlzdHJ1Y3QgaGFzaF9pcHBvcnRuZXQ0X2VsZW0gZSA9IHsKLQkJLmNpZHIgPSBJTklUX0NJRFIoaC0mZ3Q7bmV0c1swXS5jaWRyWzBdLCBIT1NUX01BU0spLAomIzQzOwkJLmNpZHIgPSBJTklUX0NJRFIoaC0mZ3Q7cm5ldHNbMF0sIEhPU1RfTUFTSyksCiAJfTsKIAlzdHJ1Y3QgaXBfc2V0X2V4dCBleHQgPSBJUF9TRVRfSU5JVF9LRVhUKHNrYiwgb3B0LCBzZXQpOwogCkBAIC0zOTgsNyAmIzQzOzM5OCw3IEBAIGhhc2hfaXBwb3J0bmV0Nl9rYWR0KHN0cnVjdCBpcF9zZXQgKnNldCwgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAljb25zdCBzdHJ1Y3QgaGFzaF9pcHBvcnRuZXQ2ICpoID0gc2V0LSZndDtkYXRhOwogCWlwc2V0X2FkdGZuIGFkdGZuID0gc2V0LSZndDt2YXJpYW50LSZndDthZHRbYWR0XTsKIAlzdHJ1Y3QgaGFzaF9pcHBvcnRuZXQ2X2VsZW0gZSA9IHsKLQkJLmNpZHIgPSBJTklUX0NJRFIoaC0mZ3Q7bmV0c1swXS5jaWRyWzBdLCBIT1NUX01BU0spLAomIzQzOwkJLmNpZHIgPSBJTklUX0NJRFIoaC0mZ3Q7cm5ldHNbMF0sIEhPU1RfTUFTSyksCiAJfTsKIAlzdHJ1Y3QgaXBfc2V0X2V4dCBleHQgPSBJUF9TRVRfSU5JVF9LRVhUKHNrYiwgb3B0LCBzZXQpOwogCmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldC5jIGIvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXQuYwppbmRleCBjZTBhOWNlNWE5MWYxYS4uMDkyZjNjOTI4MWI4MGYgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0LmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXQuYwpAQCAtMTE3LDcgJiM0MzsxMTcsNyBAQCBoYXNoX25ldDRfa2FkdChzdHJ1Y3QgaXBfc2V0ICpzZXQsIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsCiAJY29uc3Qgc3RydWN0IGhhc2hfbmV0NCAqaCA9IHNldC0mZ3Q7ZGF0YTsKIAlpcHNldF9hZHRmbiBhZHRmbiA9IHNldC0mZ3Q7dmFyaWFudC0mZ3Q7YWR0W2FkdF07CiAJc3RydWN0IGhhc2hfbmV0NF9lbGVtIGUgPSB7Ci0JCS5jaWRyID0gSU5JVF9DSURSKGgtJmd0O25ldHNbMF0uY2lkclswXSwgSE9TVF9NQVNLKSwKJiM0MzsJCS5jaWRyID0gSU5JVF9DSURSKGgtJmd0O3JuZXRzWzBdLCBIT1NUX01BU0spLAogCX07CiAJc3RydWN0IGlwX3NldF9leHQgZXh0ID0gSVBfU0VUX0lOSVRfS0VYVChza2IsIG9wdCwgc2V0KTsKIApAQCAtMjkxLDcgJiM0MzsyOTEsNyBAQCBoYXNoX25ldDZfa2FkdChzdHJ1Y3QgaXBfc2V0ICpzZXQsIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsCiAJY29uc3Qgc3RydWN0IGhhc2hfbmV0NiAqaCA9IHNldC0mZ3Q7ZGF0YTsKIAlpcHNldF9hZHRmbiBhZHRmbiA9IHNldC0mZ3Q7dmFyaWFudC0mZ3Q7YWR0W2FkdF07CiAJc3RydWN0IGhhc2hfbmV0Nl9lbGVtIGUgPSB7Ci0JCS5jaWRyID0gSU5JVF9DSURSKGgtJmd0O25ldHNbMF0uY2lkclswXSwgSE9TVF9NQVNLKSwKJiM0MzsJCS5jaWRyID0gSU5JVF9DSURSKGgtJmd0O3JuZXRzWzBdLCBIT1NUX01BU0spLAogCX07CiAJc3RydWN0IGlwX3NldF9leHQgZXh0ID0gSVBfU0VUX0lOSVRfS0VYVChza2IsIG9wdCwgc2V0KTsKIApkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRpZmFjZS5jIGIvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRpZmFjZS5jCmluZGV4IDMwYTY1NWU1YzRmZGNkLi5iNDRiOTVmNzY2YjdhZCAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRpZmFjZS5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0aWZhY2UuYwpAQCAtMTYxLDcgJiM0MzsxNjEsNyBAQCBoYXNoX25ldGlmYWNlNF9rYWR0KHN0cnVjdCBpcF9zZXQgKnNldCwgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAlzdHJ1Y3QgaGFzaF9uZXRpZmFjZTQgKmggPSBzZXQtJmd0O2RhdGE7CiAJaXBzZXRfYWR0Zm4gYWR0Zm4gPSBzZXQtJmd0O3ZhcmlhbnQtJmd0O2FkdFthZHRdOwogCXN0cnVjdCBoYXNoX25ldGlmYWNlNF9lbGVtIGUgPSB7Ci0JCS5jaWRyID0gSU5JVF9DSURSKGgtJmd0O25ldHNbMF0uY2lkclswXSwgSE9TVF9NQVNLKSwKJiM0MzsJCS5jaWRyID0gSU5JVF9DSURSKGgtJmd0O3JuZXRzWzBdLCBIT1NUX01BU0spLAogCQkuZWxlbSA9IDEsCiAJfTsKIAlzdHJ1Y3QgaXBfc2V0X2V4dCBleHQgPSBJUF9TRVRfSU5JVF9LRVhUKHNrYiwgb3B0LCBzZXQpOwpAQCAtMzgyLDcgJiM0MzszODIsNyBAQCBoYXNoX25ldGlmYWNlNl9rYWR0KHN0cnVjdCBpcF9zZXQgKnNldCwgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAlzdHJ1Y3QgaGFzaF9uZXRpZmFjZTYgKmggPSBzZXQtJmd0O2RhdGE7CiAJaXBzZXRfYWR0Zm4gYWR0Zm4gPSBzZXQtJmd0O3ZhcmlhbnQtJmd0O2FkdFthZHRdOwogCXN0cnVjdCBoYXNoX25ldGlmYWNlNl9lbGVtIGUgPSB7Ci0JCS5jaWRyID0gSU5JVF9DSURSKGgtJmd0O25ldHNbMF0uY2lkclswXSwgSE9TVF9NQVNLKSwKJiM0MzsJCS5jaWRyID0gSU5JVF9DSURSKGgtJmd0O3JuZXRzWzBdLCBIT1NUX01BU0spLAogCQkuZWxlbSA9IDEsCiAJfTsKIAlzdHJ1Y3QgaXBfc2V0X2V4dCBleHQgPSBJUF9TRVRfSU5JVF9LRVhUKHNrYiwgb3B0LCBzZXQpOwpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRuZXQuYyBiL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0bmV0LmMKaW5kZXggOGZiZTY0OWM5ZGQzZDQuLmY3YzhhMWNjMzBmYzdiIDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldG5ldC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0bmV0LmMKQEAgLTE0OSw4ICYjNDM7MTQ5LDEwIEBAIGhhc2hfbmV0bmV0NF9rYWR0KHN0cnVjdCBpcF9zZXQgKnNldCwgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAlzdHJ1Y3QgaGFzaF9uZXRuZXQ0X2VsZW0gZSA9IHsgfTsKIAlzdHJ1Y3QgaXBfc2V0X2V4dCBleHQgPSBJUF9TRVRfSU5JVF9LRVhUKHNrYiwgb3B0LCBzZXQpOwogCi0JZS5jaWRyWzBdID0gSU5JVF9DSURSKGgtJmd0O25ldHNbMF0uY2lkclswXSwgSE9TVF9NQVNLKTsKLQllLmNpZHJbMV0gPSBJTklUX0NJRFIoaC0mZ3Q7bmV0c1swXS5jaWRyWzFdLCBIT1NUX01BU0spOwomIzQzOwlyY3VfcmVhZF9sb2NrX2JoKCk7CiYjNDM7CWUuY2lkclswXSA9IElOSVRfQ0lEUihoLSZndDtybmV0c1swXSwgSE9TVF9NQVNLKTsKJiM0MzsJZS5jaWRyWzFdID0gSU5JVF9DSURSKGgtJmd0O3JuZXRzWzFdLCBIT1NUX01BU0spOwomIzQzOwlyY3VfcmVhZF91bmxvY2tfYmgoKTsKIAlpZiAoYWR0ID09IElQU0VUX1RFU1QpCiAJCWUuY2NtcCA9IChIT1NUX01BU0sgJmx0OyZsdDsgKHNpemVvZihlLmNpZHJbMF0pICogOCkpIHwgSE9TVF9NQVNLOwogCkBAIC0zODgsOCAmIzQzOzM5MCwxMCBAQCBoYXNoX25ldG5ldDZfa2FkdChzdHJ1Y3QgaXBfc2V0ICpzZXQsIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsCiAJc3RydWN0IGhhc2hfbmV0bmV0Nl9lbGVtIGUgPSB7IH07CiAJc3RydWN0IGlwX3NldF9leHQgZXh0ID0gSVBfU0VUX0lOSVRfS0VYVChza2IsIG9wdCwgc2V0KTsKIAotCWUuY2lkclswXSA9IElOSVRfQ0lEUihoLSZndDtuZXRzWzBdLmNpZHJbMF0sIEhPU1RfTUFTSyk7Ci0JZS5jaWRyWzFdID0gSU5JVF9DSURSKGgtJmd0O25ldHNbMF0uY2lkclsxXSwgSE9TVF9NQVNLKTsKJiM0MzsJcmN1X3JlYWRfbG9ja19iaCgpOwomIzQzOwllLmNpZHJbMF0gPSBJTklUX0NJRFIoaC0mZ3Q7cm5ldHNbMF0sIEhPU1RfTUFTSyk7CiYjNDM7CWUuY2lkclsxXSA9IElOSVRfQ0lEUihoLSZndDtybmV0c1sxXSwgSE9TVF9NQVNLKTsKJiM0MzsJcmN1X3JlYWRfdW5sb2NrX2JoKCk7CiAJaWYgKGFkdCA9PSBJUFNFVF9URVNUKQogCQllLmNjbXAgPSAoSE9TVF9NQVNLICZsdDsmbHQ7IChzaXplb2YodTgpICogOCkpIHwgSE9TVF9NQVNLOwogCmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldHBvcnQuYyBiL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0cG9ydC5jCmluZGV4IGQxYTA2MjhkZjRlZjNhLi41ZGU0YjUxMWRlNzYzNiAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRwb3J0LmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRwb3J0LmMKQEAgLTEzMyw3ICYjNDM7MTMzLDcgQEAgaGFzaF9uZXRwb3J0NF9rYWR0KHN0cnVjdCBpcF9zZXQgKnNldCwgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAljb25zdCBzdHJ1Y3QgaGFzaF9uZXRwb3J0NCAqaCA9IHNldC0mZ3Q7ZGF0YTsKIAlpcHNldF9hZHRmbiBhZHRmbiA9IHNldC0mZ3Q7dmFyaWFudC0mZ3Q7YWR0W2FkdF07CiAJc3RydWN0IGhhc2hfbmV0cG9ydDRfZWxlbSBlID0gewotCQkuY2lkciA9IElOSVRfQ0lEUihoLSZndDtuZXRzWzBdLmNpZHJbMF0sIEhPU1RfTUFTSyksCiYjNDM7CQkuY2lkciA9IElOSVRfQ0lEUihoLSZndDtybmV0c1swXSwgSE9TVF9NQVNLKSwKIAl9OwogCXN0cnVjdCBpcF9zZXRfZXh0IGV4dCA9IElQX1NFVF9JTklUX0tFWFQoc2tiLCBvcHQsIHNldCk7CiAKQEAgLTM1Myw3ICYjNDM7MzUzLDcgQEAgaGFzaF9uZXRwb3J0Nl9rYWR0KHN0cnVjdCBpcF9zZXQgKnNldCwgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAljb25zdCBzdHJ1Y3QgaGFzaF9uZXRwb3J0NiAqaCA9IHNldC0mZ3Q7ZGF0YTsKIAlpcHNldF9hZHRmbiBhZHRmbiA9IHNldC0mZ3Q7dmFyaWFudC0mZ3Q7YWR0W2FkdF07CiAJc3RydWN0IGhhc2hfbmV0cG9ydDZfZWxlbSBlID0gewotCQkuY2lkciA9IElOSVRfQ0lEUihoLSZndDtuZXRzWzBdLmNpZHJbMF0sIEhPU1RfTUFTSyksCiYjNDM7CQkuY2lkciA9IElOSVRfQ0lEUihoLSZndDtybmV0c1swXSwgSE9TVF9NQVNLKSwKIAl9OwogCXN0cnVjdCBpcF9zZXRfZXh0IGV4dCA9IElQX1NFVF9JTklUX0tFWFQoc2tiLCBvcHQsIHNldCk7CiAKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0cG9ydG5ldC5jIGIvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRwb3J0bmV0LmMKaW5kZXggYmY0ZjkxYjc4ZTFkY2IuLjYyOTE1MzJiZTdhNWEyIDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldHBvcnRuZXQuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldHBvcnRuZXQuYwpAQCAtMTU3LDggJiM0MzsxNTcsMTAgQEAgaGFzaF9uZXRwb3J0bmV0NF9rYWR0KHN0cnVjdCBpcF9zZXQgKnNldCwgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAlzdHJ1Y3QgaGFzaF9uZXRwb3J0bmV0NF9lbGVtIGUgPSB7IH07CiAJc3RydWN0IGlwX3NldF9leHQgZXh0ID0gSVBfU0VUX0lOSVRfS0VYVChza2IsIG9wdCwgc2V0KTsKIAotCWUuY2lkclswXSA9IElOSVRfQ0lEUihoLSZndDtuZXRzWzBdLmNpZHJbMF0sIEhPU1RfTUFTSyk7Ci0JZS5jaWRyWzFdID0gSU5JVF9DSURSKGgtJmd0O25ldHNbMF0uY2lkclsxXSwgSE9TVF9NQVNLKTsKJiM0MzsJcmN1X3JlYWRfbG9ja19iaCgpOwomIzQzOwllLmNpZHJbMF0gPSBJTklUX0NJRFIoaC0mZ3Q7cm5ldHNbMF0sIEhPU1RfTUFTSyk7CiYjNDM7CWUuY2lkclsxXSA9IElOSVRfQ0lEUihoLSZndDtybmV0c1sxXSwgSE9TVF9NQVNLKTsKJiM0MzsJcmN1X3JlYWRfdW5sb2NrX2JoKCk7CiAJaWYgKGFkdCA9PSBJUFNFVF9URVNUKQogCQllLmNjbXAgPSAoSE9TVF9NQVNLICZsdDsmbHQ7IChzaXplb2YoZS5jaWRyWzBdKSAqIDgpKSB8IEhPU1RfTUFTSzsKIApAQCAtNDUyLDggJiM0Mzs0NTQsMTAgQEAgaGFzaF9uZXRwb3J0bmV0Nl9rYWR0KHN0cnVjdCBpcF9zZXQgKnNldCwgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAlzdHJ1Y3QgaGFzaF9uZXRwb3J0bmV0Nl9lbGVtIGUgPSB7IH07CiAJc3RydWN0IGlwX3NldF9leHQgZXh0ID0gSVBfU0VUX0lOSVRfS0VYVChza2IsIG9wdCwgc2V0KTsKIAotCWUuY2lkclswXSA9IElOSVRfQ0lEUihoLSZndDtuZXRzWzBdLmNpZHJbMF0sIEhPU1RfTUFTSyk7Ci0JZS5jaWRyWzFdID0gSU5JVF9DSURSKGgtJmd0O25ldHNbMF0uY2lkclsxXSwgSE9TVF9NQVNLKTsKJiM0MzsJcmN1X3JlYWRfbG9ja19iaCgpOwomIzQzOwllLmNpZHJbMF0gPSBJTklUX0NJRFIoaC0mZ3Q7cm5ldHNbMF0sIEhPU1RfTUFTSyk7CiYjNDM7CWUuY2lkclsxXSA9IElOSVRfQ0lEUihoLSZndDtybmV0c1sxXSwgSE9TVF9NQVNLKTsKJiM0MzsJcmN1X3JlYWRfdW5sb2NrX2JoKCk7CiAJaWYgKGFkdCA9PSBJUFNFVF9URVNUKQogCQllLmNjbXAgPSAoSE9TVF9NQVNLICZsdDsmbHQ7IChzaXplb2YodTgpICogOCkpIHwgSE9TVF9NQVNLOwogCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDE3OjAxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzNjAzCgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMjU3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFzc2Vzc2luZyB0aGUgSW1wYWN0IG9mIHRoZSBJUHNldCBQYXRjaCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgdGhhdCB0aGlzIHBhdGNoICpkZWZpbml0ZWx5KiB3YXJyYW50cyBhIGZ1enppbmcgcmV2aWV3LiBXZSYjMzk7cmUgdGFsa2luZyBhYm91dCBtb2RpZmljYXRpb25zIHRvIGBuZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oYCBhbmQgdGhlIHN1cnJvdW5kaW5nIGBpcHNldGAgY29kZSB3aXRoaW4gbmV0ZmlsdGVyLCBhbmQgdGhhdCYjMzk7cyBhIGtleSBhcmVhIHRvIHNjcnV0aW5pemUuIFNwZWNpZmljYWxseSwgdGhpcyBwYXRjaCBzZWVtcyB0byBiZSBmdW5kYW1lbnRhbGx5IGFsdGVyaW5nIGhvdyBDSURSIG5ldHdvcmtzIGFyZSBoYW5kbGVkIHdpdGhpbiB0aGUgaGFzaCB0eXBlcy4gVGhlIHNoaWZ0IGZyb20gYSBzdGF0aWNhbGx5IGFsbG9jYXRlZCBhcnJheSwgYG5ldHNbTkxFTl1gLCB0byBhIGR5bmFtaWNhbGx5IGFsbG9jYXRlZCwgUkNVLXByb3RlY3RlZCBhcnJheSwgYHJuZXRzW0lQU0VUX05FVF9DT1VOVF1gLCAqdGhhdCogc2NyZWFtcyBmdW5jdGlvbmFsIGNoYW5nZSB0byBtZS4gQW5kIHRoZW4gdGhlcmUmIzM5O3MgdGhlIGFkZGl0aW9uIG9mIHRoZSBgcmVzaXppbmdgIGZsYWcgYW5kIHRoZSBsb2NrIHN1cnJvdW5kaW5nIHRoZSByZXNpemluZyBsb2dpYyB0byBwcmV2ZW50IEdDLCB3aGljaCBpbmRpY2F0ZXMgc2lnbmlmaWNhbnQgYXJjaGl0ZWN0dXJhbCBjaGFuZ2VzLiBJdCYjMzk7cyBhZmZlY3RpbmcgdGhlIGNvcmUgbG9naWMgb2YgYGlwc2V0YCBoYXNoIHR5cGVzLCBhbmQgdGhhdOKAmXMgcHJlY2lzZWx5IHRoZSBraW5kIG9mIHRoaW5nIHRoYXQgbmVlZHMgYSB0aG9yb3VnaCBmdXp6aW5nIGNhbXBhaWduLgoKTm93LCBsZXQmIzM5O3MgZmlndXJlIG91dCB0aGUgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMuIE9mIGNvdXJzZSwgYENPTkZJR19JUF9TRVRgIGlzIHRoZSBvYnZpb3VzIHN0YXJ0aW5nIHBvaW50LiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoaXMgaXMgZW5hYmxlZC4gVGhlbiB3ZSBoYXZlIHRvIGNvbnNpZGVyIHRoZSBzcGVjaWZpYyBoYXNoIHR5cGVzIHRoaXMgcGF0Y2ggaW1wYWN0cy4gV2UmIzM5O3JlIGxvb2tpbmcgYXQgYENPTkZJR19JUF9TRVRfSEFTSF9JUFBPUlRORVRgLCBgQ09ORklHX0lQX1NFVF9IQVNIX05FVGAsIGBDT05GSUdfSVBfU0VUX0hBU0hfTkVUSUZBQ0VgLCBgQ09ORklHX0lQX1NFVF9IQVNIX05FVE5FVGAsIGBDT05GSUdfSVBfU0VUX0hBU0hfTkVUUE9SVGAsIGFuZCBgQ09ORklHX0lQX1NFVF9IQVNIX05FVFBPUlRORVRgLiBJIG5lZWQgdG8gdmVyaWZ5IHRoZXNlIGNvbmZpZ3VyYXRpb25zIGFyZSBlbmFibGVkIG9yIGF0IGxlYXN0IGNvbnNpZGVyIHRoZSBzY2VuYXJpb3MgdGhhdCB3b3VsZCByZXN1bHQgaWYgdGhleSBhcmUgbm90LiBUaGF0IHdpbGwgZ3VpZGUgdGhlIGNvbmZpZ3VyYXRpb24gb2YgdGhlIGZ1enppbmcgZW52aXJvbm1lbnQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMTc6MDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIElQX1NFVF9IQVNIXyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWc9NDY9Y29uZmlnIElQX1NFVF9CSVRNQVBfUE9SVFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy01NC1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZzo1NTpjb25maWcgSVBfU0VUX0hBU0hfSVBcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy01Ni1cdHRyaXN0YXRlIFwmIzM0O2hhc2g6aXAgc2V0IHN1cHBvcnRcJiMzNDtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctNjQtXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWc6NjU6Y29uZmlnIElQX1NFVF9IQVNIX0lQTUFSS1xubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnLTY2LVx0dHJpc3RhdGUgXCYjMzQ7aGFzaDppcCxtYXJrIHNldCBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnLTczLVxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnOjc0OmNvbmZpZyBJUF9TRVRfSEFTSF9JUFBPUlRcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy03NS1cdHRyaXN0YXRlIFwmIzM0O2hhc2g6aXAscG9ydCBzZXQgc3VwcG9ydFwmIzM0O1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy04Mi1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZzo4Mzpjb25maWcgSVBfU0VUX0hBU0hfSVBQT1JUSVBcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy04NC1cdHRyaXN0YXRlIFwmIzM0O2hhc2g6aXAscG9ydCxpcCBzZXQgc3VwcG9ydFwmIzM0O1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy05Mi1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZzo5Mzpjb25maWcgSVBfU0VUX0hBU0hfSVBQT1JUTkVUXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctOTQtXHR0cmlzdGF0ZSBcJiMzNDtoYXNoOmlwLHBvcnQsbmV0IHNldCBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnLTEwMi1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZzoxMDM6Y29uZmlnIElQX1NFVF9IQVNIX0lQTUFDXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctMTA0LVx0dHJpc3RhdGUgXCYjMzQ7aGFzaDppcCxtYWMgc2V0IHN1cHBvcnRcJiMzNDtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctMTExLVxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnOjExMjpjb25maWcgSVBfU0VUX0hBU0hfTUFDXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctMTEzLVx0dHJpc3RhdGUgXCYjMzQ7aGFzaDptYWMgc2V0IHN1cHBvcnRcJiMzNDtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctMTIwLVxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnOjEyMTpjb25maWcgSVBfU0VUX0hBU0hfTkVUUE9SVE5FVFxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnLTEyMi1cdHRyaXN0YXRlIFwmIzM0O2hhc2g6bmV0LHBvcnQsbmV0IHNldCBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnLTEyOS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZzoxMzA6Y29uZmlnIElQX1NFVF9IQVNIX05FVFxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnLTEzMS1cdHRyaXN0YXRlIFwmIzM0O2hhc2g6bmV0IHNldCBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnLTEzOC1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZzoxMzk6Y29uZmlnIElQX1NFVF9IQVNIX05FVE5FVFxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnLTE0MC1cdHRyaXN0YXRlIFwmIzM0O2hhc2g6bmV0LG5ldCBzZXQgc3VwcG9ydFwmIzM0O1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy0xNDctXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWc6MTQ4OmNvbmZpZyBJUF9TRVRfSEFTSF9ORVRQT1JUXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctMTQ5LVx0dHJpc3RhdGUgXCYjMzQ7aGFzaDpuZXQscG9ydCBzZXQgc3VwcG9ydFwmIzM0O1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy0xNTctXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWc6MTU4OmNvbmZpZyBJUF9TRVRfSEFTSF9ORVRJRkFDRVxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnLTE1OS1cdHRyaXN0YXRlIFwmIzM0O2hhc2g6bmV0LGlmYWNlIHNldCBzdXBwb3J0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMTc6MDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTUxMjIKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAyMDMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBJUCBTZXQgSGFzaCBGdW5jdGlvbnMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoZXNlIGNvbmZpZ3VyYXRpb25zOiBgSVBfU0VUX0hBU0hfSVBQT1JUTkVUYCwgYElQX1NFVF9IQVNIX05FVGAsIGBJUF9TRVRfSEFTSF9ORVRJRkFDRWAsIGBJUF9TRVRfSEFTSF9ORVRORVRgLCBgSVBfU0VUX0hBU0hfTkVUUE9SVGAsIGFuZCBgSVBfU0VUX0hBU0hfTkVUUE9SVE5FVGAuIFJpZ2h0IGF3YXksIEkgd2FudCB0byBkcmlsbCBkb3duIGludG8gdGhlIGNvcmUgbG9naWMuIFRpbWUgdG8gZmlndXJlIG91dCB3aGljaCBmdW5jdGlvbnMgYXJlIGdldHRpbmcgdGhlIG1vc3QgYXR0ZW50aW9uIGluIHRoaXMgcGF0Y2guIEJhc2VkIG9uIHRoZSBjaGFuZ2VzLCBpdCBsb29rcyBsaWtlIGBtdHlwZV9hZGRfY2lkcmAsIGBtdHlwZV9kZWxfY2lkcmAsIGBtdHlwZV9mbHVzaGAsIGBtdHlwZV9haGFzaF9kZXN0cm95YCwgYG10eXBlX2Rlc3Ryb3lgLCBgbXR5cGVfZ2NfZG9gLCBgbXR5cGVfZ2NgLCBgbXR5cGVfcmVzaXplYCwgYG10eXBlX2FkZGAsIGBtdHlwZV9kZWxgLCBgbXR5cGVfdGVzdF9jaWRyc2AsIGBtdHlwZV91cmVmYCwgYW5kIGBJUFNFVF9UT0tFTihIVFlQRSwgX2NyZWF0ZSlgIGFyZSB0aGUgb25lcyB0byBmb2N1cyBvbi4gVGhlc2UgYXJlIG1hY3JvcywgYW5kIEkga25vdyBmcm9tIGV4cGVyaWVuY2UgdGhhdCBtZWFucyB0aGV5JiMzOTtyZSBsaWtlbHkgZGVmaW5lZCBpbiBgaXBfc2V0X2hhc2hfZ2VuLmhgLiBOb3cgSSYjMzk7bSBpbnRlcmVzdGVkIHRvIHNlZSBob3cgdGhlc2UgYXJlIGluc3RhbnRpYXRlZCBhbmQgdXNlZCBpbiByZWxhdGlvbiB0byB0aGUgY29uZmlndXJhdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMTc6MDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bXR5cGVfYWRkX2NpZHImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL2lwc2V0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oPTE2Mz1zdGF0aWMgY29uc3QgdW5pb24gbmZfaW5ldF9hZGRyIHplcm9tYXNrID0ge307XG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC0xOTQtI3VuZGVmIG10eXBlX2V4dF9jbGVhbnVwXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oOjE5NTojdW5kZWYgbXR5cGVfYWRkX2NpZHJcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtMTk2LSN1bmRlZiBtdHlwZV9kZWxfY2lkclxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtMjM5LSNkZWZpbmUgbXR5cGVfZXh0X2NsZWFudXBcdElQU0VUX1RPS0VOKE1UWVBFLCBfZXh0X2NsZWFudXApXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oOjI0MDojZGVmaW5lIG10eXBlX2FkZF9jaWRyXHRcdElQU0VUX1RPS0VOKE1UWVBFLCBfYWRkX2NpZHIpXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTI0MS0jZGVmaW5lIG10eXBlX2RlbF9jaWRyXHRcdElQU0VUX1RPS0VOKE1UWVBFLCBfZGVsX2NpZHIpXG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaD0zMTc9c3RhdGljIGludFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaDozMTg6bXR5cGVfYWRkX2NpZHIoc3RydWN0IGlwX3NldCAqc2V0LCBzdHJ1Y3QgaHR5cGUgKmgsIHU4IGNpZHIsIHU4IG4pXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTMxOS17XG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaD05MTQ9bXR5cGVfYWRkKHN0cnVjdCBpcF9zZXQgKnNldCwgdm9pZCAqdmFsdWUsIGNvbnN0IHN0cnVjdCBpcF9zZXRfZXh0ICpleHQsXG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC0xMDQzLVx0Zm9yIChpID0gMDsgaSBcdTAwM2MgSVBTRVRfTkVUX0NPVU5UOyBpJiM0MzsmIzQzOylcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg6MTA0NDpcdFx0bXR5cGVfYWRkX2NpZHIoc2V0LCBoLCBEQ0lEUl9HRVQoZC1cdTAwM2VjaWRyLCBpKSwgaSk7XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTEwNDUtI2VuZGlmXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMTc6MDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTYxNTkKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAzMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhbmFseXNpcyBvZiB0aGUgcHJvdmlkZWQgc25pcHBldCwgYXMgaWYgaXQgd2VyZSBteSB0aG91Z2h0IHByb2Nlc3M6CgoqKk1hY3JvIEV4cGFuc2lvbiBhbmQgVHlwZSBJZGVudGlmaWNhdGlvbioqCgpPa2F5LCBzbyB3ZSYjMzk7cmUgbG9va2luZyBhdCBjb2RlIGdlbmVyYXRpb24gdmlhIG1hY3Jvcy4gU3BlY2lmaWNhbGx5LCB3ZSYjMzk7dmUgZ290IHRoaXMgYElQU0VUX1RPS0VOKE1UWVBFLCBfYWRkX2NpZHIpYCBjYWxsLiBUaGF0IGltbWVkaWF0ZWx5IHRlbGxzIG1lIHdlJiMzOTtyZSBsaWtlbHkgZGVhbGluZyB3aXRoIHNvbWUga2luZCBvZiBJUCBzZXQgbWFuaXB1bGF0aW9uLCBnaXZlbiB0aGUgJiMzNDtfYWRkX2NpZHImIzM0OyBzdWZmaXgsIGJ1dCB0aGUgcmVhbCBrZXkgaXMgdGhlIGBNVFlQRWAgcGFyYW1ldGVyLiBUaGlzIGlzIHRoZSBjcnVjaWFsIGJpdC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBgTVRZUEVgIHJlcHJlc2VudHMuIEl0JiMzOTtzIHRoZSB0eXBlIHNwZWNpZmllciB0aGF0IGRpY3RhdGVzIHRoZSBiZWhhdmlvciBvZiB0aGUgbWFjcm8gYW5kIHdoYXQga2luZCBvZiBJUCBzZXQgb3BlcmF0aW9uIG9yIGRhdGEgc3RydWN0dXJlIGl0IGlzIHdvcmtpbmcgd2l0aC4gV2l0aG91dCBrbm93aW5nIHdoYXQgYE1UWVBFYCBleHBhbmRzIHRvLCBJIGNhbiYjMzk7dCBkZXRlcm1pbmUgdGhlIGV4YWN0IG1lYW5pbmcgb3IgcHVycG9zZSBvZiB0aGUgZ2VuZXJhdGVkIGZ1bmN0aW9uLiBUaGlzIGNvdWxkIGJlIHNvbWV0aGluZyBsaWtlICYjMzQ7aXB2NCYjMzQ7LCAmIzM0O2hhc2gmIzM0OywgJiMzNDtiaXRtYXAmIzM0Oywgb3IgZXZlbiBhIGN1c3RvbSB0eXBlLiBMZXQmIzM5O3MgZGlnIGRlZXBlciB0byBzZWUgaG93IGBNVFlQRWAgaXMgZGVmaW5lZC4gVGhpcyBtYWNybyBpcyB0aGUgZ2F0ZXdheSB0byB1bmRlcnN0YW5kaW5nIHRoZSBmdWxsIGNvbnRleHQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMTc6MDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7I2RlZmluZSBNVFlQRSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvaXBzZXQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9pcC5jPTMzPU1PRFVMRV9BTElBUyhcJiMzNDtpcF9zZXRfYml0bWFwOmlwXCYjMzQ7KTtcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9pcC5jLTM0LVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX2lwLmM6MzU6I2RlZmluZSBNVFlQRVx0XHRiaXRtYXBfaXBcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9pcC5jLTM2LSNkZWZpbmUgSE9TVF9NQVNLXHQzMlxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9pcG1hYy5jPTMzPU1PRFVMRV9BTElBUyhcJiMzNDtpcF9zZXRfYml0bWFwOmlwLG1hY1wmIzM0Oyk7XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfaXBtYWMuYy0zNC1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9pcG1hYy5jOjM1OiNkZWZpbmUgTVRZUEVcdFx0Yml0bWFwX2lwbWFjXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfaXBtYWMuYy0zNi0jZGVmaW5lIEhPU1RfTUFTS1x0MzJcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfcG9ydC5jPTI3PU1PRFVMRV9BTElBUyhcJiMzNDtpcF9zZXRfYml0bWFwOnBvcnRcJiMzNDspO1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX3BvcnQuYy0yOC1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9wb3J0LmM6Mjk6I2RlZmluZSBNVFlQRVx0XHRiaXRtYXBfcG9ydFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX3BvcnQuYy0zMC1cbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwLmM9NzA9aGFzaF9pcDRfZGF0YV9uZXh0KHN0cnVjdCBoYXNoX2lwNF9lbGVtICpuZXh0LCBjb25zdCBzdHJ1Y3QgaGFzaF9pcDRfZWxlbSAqZSlcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwLmMtNzQtXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwLmM6NzU6I2RlZmluZSBNVFlQRVx0XHRoYXNoX2lwNFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcC5jLTc2LSNkZWZpbmUgSE9TVF9NQVNLXHQzMlxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXAuYz0yMDI9aGFzaF9pcDZfZGF0YV9uZXh0KHN0cnVjdCBoYXNoX2lwNl9lbGVtICpuZXh0LCBjb25zdCBzdHJ1Y3QgaGFzaF9pcDZfZWxlbSAqZSlcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwLmMtMjA4LVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcC5jOjIwOTojZGVmaW5lIE1UWVBFXHRcdGhhc2hfaXA2XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwLmMtMjEwLSNkZWZpbmUgSE9TVF9NQVNLXHQxMjhcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwbWFjLmM9NzI9aGFzaF9pcG1hYzRfZGF0YV9uZXh0KHN0cnVjdCBoYXNoX2lwbWFjNF9lbGVtICpuZXh0LFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBtYWMuYy03Ny1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBtYWMuYzo3ODojZGVmaW5lIE1UWVBFXHRcdGhhc2hfaXBtYWM0XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwbWFjLmMtNzktI2RlZmluZSBQRlx0XHQ0XG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcG1hYy5jPTE4MD1oYXNoX2lwbWFjNl9kYXRhX25leHQoc3RydWN0IGhhc2hfaXBtYWM2X2VsZW0gKm5leHQsXG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcG1hYy5jLTE4OS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBtYWMuYzoxOTA6I2RlZmluZSBNVFlQRVx0XHRoYXNoX2lwbWFjNlxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcG1hYy5jLTE5MS0jZGVmaW5lIFBGXHRcdDZcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwbWFyay5jPTY5PWhhc2hfaXBtYXJrNF9kYXRhX25leHQoc3RydWN0IGhhc2hfaXBtYXJrNF9lbGVtICpuZXh0LFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBtYXJrLmMtNzQtXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwbWFyay5jOjc1OiNkZWZpbmUgTVRZUEVcdFx0aGFzaF9pcG1hcms0XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwbWFyay5jLTc2LSNkZWZpbmUgSE9TVF9NQVNLXHQzMlxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBtYXJrLmM9MjA1PWhhc2hfaXBtYXJrNl9kYXRhX25leHQoc3RydWN0IGhhc2hfaXBtYXJrNl9lbGVtICpuZXh0LFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBtYXJrLmMtMjEyLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcG1hcmsuYzoyMTM6I2RlZmluZSBNVFlQRVx0XHRoYXNoX2lwbWFyazZcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBtYXJrLmMtMjE0LSNkZWZpbmUgSE9TVF9NQVNLXHQxMjhcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwcG9ydC5jPTc5PWhhc2hfaXBwb3J0NF9kYXRhX25leHQoc3RydWN0IGhhc2hfaXBwb3J0NF9lbGVtICpuZXh0LFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0LmMtODUtXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwcG9ydC5jOjg2OiNkZWZpbmUgTVRZUEVcdFx0aGFzaF9pcHBvcnQ0XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwcG9ydC5jLTg3LSNkZWZpbmUgSE9TVF9NQVNLXHQzMlxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0LmM9MjQ5PWhhc2hfaXBwb3J0Nl9kYXRhX25leHQoc3RydWN0IGhhc2hfaXBwb3J0Nl9lbGVtICpuZXh0LFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0LmMtMjU3LVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcHBvcnQuYzoyNTg6I2RlZmluZSBNVFlQRVx0XHRoYXNoX2lwcG9ydDZcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0LmMtMjU5LSNkZWZpbmUgSE9TVF9NQVNLXHQxMjhcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwcG9ydGlwLmM9Nzc9aGFzaF9pcHBvcnRpcDRfZGF0YV9uZXh0KHN0cnVjdCBoYXNoX2lwcG9ydGlwNF9lbGVtICpuZXh0LFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0aXAuYy04NC0vKiBDb21tb24gZnVuY3Rpb25zICovXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwcG9ydGlwLmM6ODU6I2RlZmluZSBNVFlQRVx0XHRoYXNoX2lwcG9ydGlwNFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcHBvcnRpcC5jLTg2LSNkZWZpbmUgSE9TVF9NQVNLXHQzMlxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0aXAuYz0yNDg9aGFzaF9pcHBvcnRpcDZfZGF0YV9uZXh0KHN0cnVjdCBoYXNoX2lwcG9ydGlwNl9lbGVtICpuZXh0LFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0aXAuYy0yNTYtXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwcG9ydGlwLmM6MjU3OiNkZWZpbmUgTVRZUEVcdFx0aGFzaF9pcHBvcnRpcDZcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0aXAuYy0yNTgtI2RlZmluZSBIT1NUX01BU0tcdDEyOFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0bmV0LmM9MTIxPWhhc2hfaXBwb3J0bmV0NF9kYXRhX25leHQoc3RydWN0IGhhc2hfaXBwb3J0bmV0NF9lbGVtICpuZXh0LFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0bmV0LmMtMTI4LVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcHBvcnRuZXQuYzoxMjk6I2RlZmluZSBNVFlQRVx0XHRoYXNoX2lwcG9ydG5ldDRcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0bmV0LmMtMTMwLSNkZWZpbmUgSE9TVF9NQVNLXHQzMlxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0bmV0LmM9Mzc5PWhhc2hfaXBwb3J0bmV0Nl9kYXRhX25leHQoc3RydWN0IGhhc2hfaXBwb3J0bmV0Nl9lbGVtICpuZXh0LFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0bmV0LmMtMzg3LVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcHBvcnRuZXQuYzozODg6I2RlZmluZSBNVFlQRVx0XHRoYXNoX2lwcG9ydG5ldDZcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0bmV0LmMtMzg5LSNkZWZpbmUgSE9TVF9NQVNLXHQxMjhcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX21hYy5jPTYxPWhhc2hfbWFjNF9kYXRhX25leHQoc3RydWN0IGhhc2hfbWFjNF9lbGVtICpuZXh0LFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbWFjLmMtNjUtXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX21hYy5jOjY2OiNkZWZpbmUgTVRZUEVcdFx0aGFzaF9tYWM0XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX21hYy5jLTY3LSNkZWZpbmUgSE9TVF9NQVNLXHQzMlxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0LmM9MTAyPWhhc2hfbmV0NF9kYXRhX25leHQoc3RydWN0IGhhc2hfbmV0NF9lbGVtICpuZXh0LFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0LmMtMTA3LVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXQuYzoxMDg6I2RlZmluZSBNVFlQRVx0XHRoYXNoX25ldDRcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0LmMtMTA5LSNkZWZpbmUgSE9TVF9NQVNLXHQzMlxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0LmM9MjczPWhhc2hfbmV0Nl9kYXRhX25leHQoc3RydWN0IGhhc2hfbmV0Nl9lbGVtICpuZXh0LFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0LmMtMjgwLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXQuYzoyODE6I2RlZmluZSBNVFlQRVx0XHRoYXNoX25ldDZcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0LmMtMjgyLSNkZWZpbmUgSE9TVF9NQVNLXHQxMjhcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldGlmYWNlLmM9MTI5PWhhc2hfbmV0aWZhY2U0X2RhdGFfbmV4dChzdHJ1Y3QgaGFzaF9uZXRpZmFjZTRfZWxlbSAqbmV4dCxcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldGlmYWNlLmMtMTM0LVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRpZmFjZS5jOjEzNTojZGVmaW5lIE1UWVBFXHRcdGhhc2hfbmV0aWZhY2U0XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldGlmYWNlLmMtMTM2LSNkZWZpbmUgSE9TVF9NQVNLXHQzMlxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0aWZhY2UuYz0zNjM9aGFzaF9uZXRpZmFjZTZfZGF0YV9uZXh0KHN0cnVjdCBoYXNoX25ldGlmYWNlNl9lbGVtICpuZXh0LFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0aWZhY2UuYy0zNzAtXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldGlmYWNlLmM6MzcxOiNkZWZpbmUgTVRZUEVcdFx0aGFzaF9uZXRpZmFjZTZcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0aWZhY2UuYy0zNzItI2RlZmluZSBIT1NUX01BU0tcdDEyOFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0bmV0LmM9MTI1PWhhc2hfbmV0bmV0NF9kYXRhX25leHQoc3RydWN0IGhhc2hfbmV0bmV0NF9lbGVtICpuZXh0LFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0bmV0LmMtMTMwLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRuZXQuYzoxMzE6I2RlZmluZSBNVFlQRVx0XHRoYXNoX25ldG5ldDRcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0bmV0LmMtMTMyLSNkZWZpbmUgSE9TVF9NQVNLXHQzMlxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0bmV0LmM9MzYzPWhhc2hfbmV0bmV0Nl9kYXRhX25leHQoc3RydWN0IGhhc2hfbmV0bmV0Nl9lbGVtICpuZXh0LFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0bmV0LmMtMzcwLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRuZXQuYzozNzE6I2RlZmluZSBNVFlQRVx0XHRoYXNoX25ldG5ldDZcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0bmV0LmMtMzcyLSNkZWZpbmUgSE9TVF9NQVNLXHQxMjhcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldHBvcnQuYz0xMTc9aGFzaF9uZXRwb3J0NF9kYXRhX25leHQoc3RydWN0IGhhc2hfbmV0cG9ydDRfZWxlbSAqbmV4dCxcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldHBvcnQuYy0xMjMtXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldHBvcnQuYzoxMjQ6I2RlZmluZSBNVFlQRVx0XHRoYXNoX25ldHBvcnQ0XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldHBvcnQuYy0xMjUtI2RlZmluZSBIT1NUX01BU0tcdDMyXG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRwb3J0LmM9MzM0PWhhc2hfbmV0cG9ydDZfZGF0YV9uZXh0KHN0cnVjdCBoYXNoX25ldHBvcnQ2X2VsZW0gKm5leHQsXG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRwb3J0LmMtMzQyLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRwb3J0LmM6MzQzOiNkZWZpbmUgTVRZUEVcdFx0aGFzaF9uZXRwb3J0NlxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRwb3J0LmMtMzQ0LSNkZWZpbmUgSE9TVF9NQVNLXHQxMjhcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldHBvcnRuZXQuYz0xMzI9aGFzaF9uZXRwb3J0bmV0NF9kYXRhX25leHQoc3RydWN0IGhhc2hfbmV0cG9ydG5ldDRfZWxlbSAqbmV4dCxcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldHBvcnRuZXQuYy0xMzgtXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldHBvcnRuZXQuYzoxMzk6I2RlZmluZSBNVFlQRVx0XHRoYXNoX25ldHBvcnRuZXQ0XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldHBvcnRuZXQuYy0xNDAtI2RlZmluZSBIT1NUX01BU0tcdDMyXG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRwb3J0bmV0LmM9NDI2PWhhc2hfbmV0cG9ydG5ldDZfZGF0YV9uZXh0KHN0cnVjdCBoYXNoX25ldHBvcnRuZXQ2X2VsZW0gKm5leHQsXG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRwb3J0bmV0LmMtNDM0LVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRwb3J0bmV0LmM6NDM1OiNkZWZpbmUgTVRZUEVcdFx0aGFzaF9uZXRwb3J0bmV0NlxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRwb3J0bmV0LmMtNDM2LSNkZWZpbmUgSE9TVF9NQVNLXHQxMjhcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMiAxNzowMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTg3NAoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDY3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIGlmIEkgd2VyZSB0aGlua2luZyBpdDoKCioqRGVjb2RpbmcgVGhpcyBJUFNFVCBJbXBsZW1lbnRhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhlc2UgSVBTRVQgZnVuY3Rpb24gbmFtZXMg4oCTIGBoYXNoX25ldDRfYWRkYCwgYGhhc2hfbmV0NF9kZWxgLCBgaGFzaF9uZXQ0X3Rlc3RfY2lkcnNgLCB0aGF0JiMzOTtzIHN0YW5kYXJkLiBNYWtlcyBzZW5zZSwgdGhleSYjMzk7cmUgY2xlYXJseSBkZWFsaW5nIHdpdGggSVB2NCBoYXNoIHNldHMuIE5vdGhpbmcgc3VycHJpc2luZyB0aGVyZSwgYW5kIHBlcmZlY3RseSBsb2dpY2FsIG5hbWluZy4gTm93LCB3aGF0JiMzOTtzIHRoaXMgYG10eXBlX2FkZGAgdGhpbmc/IFRoYXQgc2VlbXMgYSBiaXQuLi4gY3J5cHRpYy4gSXQmIzM5O3MgZGVmaW5lZCBhcyBgSVBTRVRfVE9LRU4oTVRZUEUsIF9hZGQpYC4gSSYjMzk7bGwgaGF2ZSB0byBkZWx2ZSBkZWVwZXIgaW50byB0aGF0IGBJUFNFVF9UT0tFTmAgbWFjcm8gZGVmaW5pdGlvbiB0byB1bmRlcnN0YW5kIHdoYXQgdGhlIGRldmVsb3BlciB3YXMgZ29pbmcgZm9yIHdpdGggdGhhdCBwYXJ0aWN1bGFyIGNob2ljZSBvZiBuYW1lLiBMZXQmIzM5O3Mgc2VlIGhvdyB0aGF0IG1hY3JvIGlzIGV4cGFuZGluZy4gSSYjMzk7bSBhc3N1bWluZyBpdCYjMzk7cyBwYXJ0IG9mIGhvdyB0aGV5JiMzOTtyZSBoYW5kbGluZyBkaWZmZXJlbnQgc2V0IHR5cGVzIHdpdGhpbiB0aGUgSVBTRVQgZnJhbWV3b3JrLCBidXQgYE1UWVBFYCBhbmQgYF9hZGRgIHRvZ2V0aGVyIGZlZWxzIGEgbGl0dGxlIG9kZCBhdCBmaXJzdCBnbGFuY2UsIGJ1dCBJIGtub3cgYmV0dGVyIHRoYW4gdG8ganVtcCB0byBjb25jbHVzaW9ucyEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMTc6MDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDsjZGVmaW5lIElQU0VUX1RPS0VOJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9pcHNldC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMiAxNzowMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDIxMQoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDEzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRoaXMgbXlzZWxmOgoKKipUcmFjaW5nIHRoZSBTb3VyY2Ugb2YgYElQU0VUX1RPS0VOYCoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGVyZSBgSVBTRVRfVE9LRU5gIGlzIGRlZmluZWQuIFRoaXMgaXMgYSBjb21tb24gZGVidWdnaW5nIHN0ZXAuIEkmIzM5O20gZGVhbGluZyB3aXRoIGEgY29kZWJhc2UsIHByZXN1bWFibHksIGFuZCBgSVBTRVRfVE9LRU5gIGlzIHByb2JhYmx5IGEgY29uc3RhbnQsIHZhcmlhYmxlLCBvciBtYWNyby4gVGhlIGdvYWwgaXMgdG8gdW5kZXJzdGFuZCBpdHMgc2NvcGUgYW5kIGhvdyBpdCYjMzk7cyB1c2VkIHdpdGhpbiB0aGUgY29udGV4dCBvZiB0aGUgcHJvZ3JhbS4gSSYjMzk7bGwgbmVlZCB0byBwaW5wb2ludCBpdHMgZGVjbGFyYXRpb24gdG8ga25vdyBpdHMgdHlwZSwgdmFsdWUgKGlmIGl0JiMzOTtzIGluaXRpYWxpemVkKSwgYW5kIHdoZXJlIGl04oCZcyBhY2Nlc3NpYmxlLiBUaGlzIGhlbHBzIG1lIHVuZGVyc3RhbmQgaXRzIHJvbGUgYW5kIGltcGFjdC4gV2hlcmUgY2FuIEkgc3RhcnQgbG9va2luZyBmb3IgdGhpcyBkZWNsYXJhdGlvbj8gVGltZSB0byBkaXZlIGluIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMiAxNzowMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDsjZGVmaW5lIElQU0VUX1RPS0VOJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvaXBzZXQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldC5oPTUyMz1uZl9pbmV0X2FkZHJfbWFza19pbnBsYWNlKHVuaW9uIG5mX2luZXRfYWRkciAqYTEsXG4tLVxuaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0LmgtNTQwLSNkZWZpbmUgSVBTRVRfQ09OQ0FUKGEsIGIpXHRcdGEjI2JcbmluY2x1ZGUvbGludXgvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldC5oOjU0MTojZGVmaW5lIElQU0VUX1RPS0VOKGEsIGIpXHRcdElQU0VUX0NPTkNBVChhLCBiKVxuaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0LmgtNTQyLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMiAxNzowMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDU1OAoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDI0OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgSVAgU2V0IEhhc2hpbmcgRnVuY3Rpb25zKioKCk9rYXksIHNvIEkmIzM5O20gdHJhY2luZyBob3cgdGhlc2UgSVAgc2V0IG9wZXJhdGlvbnMgYXJlIHN0cnVjdHVyZWQsIGFuZCBpdCBsb29rcyBsaWtlIHRoZSBgSVBTRVRfVE9LRU4oTVRZUEUsIF9hZGQpYCBtYWNybyBnZW5lcmF0ZXMgYSBmYW1pbHkgb2YgZnVuY3Rpb25zLCBsaWtlIGBoYXNoX25ldDRfYWRkYCwgYGhhc2hfbmV0Nl9hZGRgLCBhbmQgYGhhc2hfbmV0bmV0NF9hZGRgIGRlcGVuZGluZyBvbiB0aGUgYWRkcmVzcyBmYW1pbHkgYW5kIHRoZSBzcGVjaWZpYyBvcGVyYXRpb24uIEkgc2hvdWxkIHN0YXJ0IGJ5IGxvb2tpbmcgYXQgdGhlc2UsIGFuZCBJJiMzOTttIHRoaW5raW5nIG9mIGZvY3VzaW5nIG9uIHNwZWNpZmljIG9uZXMgbGlrZSBgaGFzaF9uZXQ0X2FkZGAsIGBoYXNoX25ldDZfYWRkYCwgYGhhc2hfbmV0NF9kZWxgLCBgaGFzaF9uZXQ2X2RlbGAsIHRob3NlIGFkZC9kZWxldGUgZnVuY3Rpb25zLiBUaGVyZSBhcmUgb3RoZXIgZnVuY3Rpb25zIHRoYXQgY2FuIGJlIGltcG9ydGFudCB0b28sIHN1Y2ggYXMgdGhlIGB0ZXN0X2NpZHJzYCwgdGhlIGByZXNpemVgIGFuZCB0aGUgYGdjYCBmdW5jdGlvbnMsIGFuZCBhIHNpbWlsYXIgaWRlYSBhcHBlYXJzIHdoZW4gdGhpbmtpbmcgYWJvdXQgYG10eXBlX2FkZF9jaWRyYCwgd2hpY2ggYXBwZWFycyBhcyBgaGFzaF9uZXQ0X2FkZF9jaWRyYCwgYGhhc2hfbmV0Nl9hZGRfY2lkcmAuCgpCdXQsIHdhaXQgYSBzZWNvbmQsIGxldCYjMzk7cyBsb29rIGNsb3NlbHkgYXQgYGhhc2hfbmV0NF9hZGRfY2lkcmAsIGlzIGl0IGRlZmluZWQgaW4gdGhlIGNvbXBpbGVkIGNvZGUgb3IgaXMgaXQgZGVmaW5lZCBhcyBhIHN0YXRpYyBmdW5jdGlvbj8gSXQgYXBwZWFycyBzdGF0aWMsIHdoaWNoIG1lYW5zIGl0IG1pZ2h0IGJlIGlubGluZWQuIFRoaXMgY291bGQgbWFrZSBpdCBhIGxlc3MgdXNlZnVsIHN5bWJvbCB0byBmb2N1cyBvbi4gSG1tLCBsZXQmIzM5O3MgYWxzbyBjaGVjayBpZiBgaGFzaF9uZXQ0X2FkZGAgaXMgc3RhdGljLiBBbHJpZ2h0LCBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIHRoZSBzb3VyY2UgZmlsZSwgc3BlY2lmaWNhbGx5IGBpcF9zZXRfaGFzaF9uZXQuY2AsIHRvIGJlIHN1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDE3OjAxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aGFzaF9uZXQ0X2FkZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvaXBzZXQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMTc6MDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjExNzUKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAzOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIE1hY3JvLUdlbmVyYXRlZCBDb2RlKioKCk9rYXksIHNvIEkmIzM5O20gdHJhY2tpbmcgZG93biB3aGVyZSB0aGlzIGBoYXNoX25ldDRfYWRkYCBmdW5jdGlvbiBjb21lcyBmcm9tLiBJdCYjMzk7cyBjbGVhcmx5IG1hY3JvLWdlbmVyYXRlZCwgd2hpY2ggbWVhbnMgSSBuZWVkIHRvIGRpZyBpbnRvIHRoZSBtYWNybyBkZWZpbml0aW9uIGl0c2VsZi4gSSBjYW4mIzM5O3QganVzdCBgZ3JlcGAgdGhlIHNvdXJjZSBmb3IgYSBkaXJlY3QgZnVuY3Rpb24gZGVmaW5pdGlvbi4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hpY2ggbWFjcm8gZ2VuZXJhdGVzIHRoaXMgZnVuY3Rpb24uIE15IGJlc3QgYmV0IGlzIHRvIGNoZWNrIHRoZSByZWxhdGVkIGluY2x1ZGUgZmlsZSwgYGlwX3NldF9oYXNoX2dlbi5oYCwgc3BlY2lmaWNhbGx5IGxvb2tpbmcgZm9yIHNvbWV0aGluZyByZWxhdGVkIHRvIGBtdHlwZV9hZGRgIHNpbmNlIHRoYXQmIzM5O3MgbGlrZWx5IHBhcnQgb2YgdGhlIG1hY3JvJiMzOTtzIG5hbWUgb3IgbG9naWMuIFRoYXQmIzM5O3MgbXkgbmV4dCBzdGVwIHRvIHVuZGVyc3RhbmQgdGhlIGNyZWF0aW9uIHByb2Nlc3Mgb2YgYGhhc2hfbmV0NF9hZGRgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMiAxNzowMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttdHlwZV9hZGQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL2lwc2V0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfZ2VuLmgtMTctI2RlZmluZSBtdHlwZV9hZHRfZWxlbVx0XHRJUFNFVF9UT0tFTihNVFlQRSwgX2FkdF9lbGVtKVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX2dlbi5oOjE4OiNkZWZpbmUgbXR5cGVfYWRkX3RpbWVvdXRcdElQU0VUX1RPS0VOKE1UWVBFLCBfYWRkX3RpbWVvdXQpXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfZ2VuLmgtMTktI2RlZmluZSBtdHlwZV9nY19pbml0XHRcdElQU0VUX1RPS0VOKE1UWVBFLCBfZ2NfaW5pdClcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfZ2VuLmgtMjgtI2RlZmluZSBtdHlwZV90ZXN0XHRcdElQU0VUX1RPS0VOKE1UWVBFLCBfdGVzdClcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9nZW4uaDoyOTojZGVmaW5lIG10eXBlX2FkZFx0XHRJUFNFVF9UT0tFTihNVFlQRSwgX2FkZClcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9nZW4uaC0zMC0jZGVmaW5lIG10eXBlX2RlbFx0XHRJUFNFVF9UT0tFTihNVFlQRSwgX2RlbClcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfZ2VuLmg9MTI5PXN0YXRpYyBpbnRcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9nZW4uaDoxMzA6bXR5cGVfYWRkKHN0cnVjdCBpcF9zZXQgKnNldCwgdm9pZCAqdmFsdWUsIGNvbnN0IHN0cnVjdCBpcF9zZXRfZXh0ICpleHQsXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfZ2VuLmgtMTMxLVx0ICBzdHJ1Y3QgaXBfc2V0X2V4dCAqbWV4dCwgdTMyIGZsYWdzKVxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9nZW4uaC0xNTQtI2lmZGVmIElQX1NFVF9CSVRNQVBfU1RPUkVEX1RJTUVPVVRcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9nZW4uaDoxNTU6XHRcdG10eXBlX2FkZF90aW1lb3V0KGV4dF90aW1lb3V0KHgsIHNldCksIGUsIGV4dCwgc2V0LCBtYXAsIHJldCk7XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfZ2VuLmgtMTU2LSNlbHNlXG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX2dlbi5oPTMwMj1zdGF0aWMgY29uc3Qgc3RydWN0IGlwX3NldF90eXBlX3ZhcmlhbnQgbXR5cGUgPSB7XG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX2dlbi5oLTMwNS1cdC5hZHRcdD0ge1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX2dlbi5oOjMwNjpcdFx0W0lQU0VUX0FERF0gPSBtdHlwZV9hZGQsXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfZ2VuLmgtMzA3LVx0XHRbSVBTRVRfREVMXSA9IG10eXBlX2RlbCxcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oPTE2Mz1zdGF0aWMgY29uc3QgdW5pb24gbmZfaW5ldF9hZGRyIHplcm9tYXNrID0ge307XG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC0xOTQtI3VuZGVmIG10eXBlX2V4dF9jbGVhbnVwXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oOjE5NTojdW5kZWYgbXR5cGVfYWRkX2NpZHJcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtMTk2LSN1bmRlZiBtdHlwZV9kZWxfY2lkclxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtMjAzLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaDoyMDQ6I3VuZGVmIG10eXBlX2FkZFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC0yMDUtI3VuZGVmIG10eXBlX2RlbFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtMjM5LSNkZWZpbmUgbXR5cGVfZXh0X2NsZWFudXBcdElQU0VUX1RPS0VOKE1UWVBFLCBfZXh0X2NsZWFudXApXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oOjI0MDojZGVmaW5lIG10eXBlX2FkZF9jaWRyXHRcdElQU0VUX1RPS0VOKE1UWVBFLCBfYWRkX2NpZHIpXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTI0MS0jZGVmaW5lIG10eXBlX2RlbF9jaWRyXHRcdElQU0VUX1RPS0VOKE1UWVBFLCBfZGVsX2NpZHIpXG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC0yNDgtXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oOjI0OTojZGVmaW5lIG10eXBlX2FkZFx0XHRJUFNFVF9UT0tFTihNVFlQRSwgX2FkZClcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtMjUwLSNkZWZpbmUgbXR5cGVfZGVsXHRcdElQU0VUX1RPS0VOKE1UWVBFLCBfZGVsKVxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg9MzE3PXN0YXRpYyBpbnRcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg6MzE4Om10eXBlX2FkZF9jaWRyKHN0cnVjdCBpcF9zZXQgKnNldCwgc3RydWN0IGh0eXBlICpoLCB1OCBjaWRyLCB1OCBuKVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC0zMTkte1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg9NjY2PXN0YXRpYyBpbnRcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg6NjY3Om10eXBlX2FkZChzdHJ1Y3QgaXBfc2V0ICpzZXQsIHZvaWQgKnZhbHVlLCBjb25zdCBzdHJ1Y3QgaXBfc2V0X2V4dCAqZXh0LFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC02NjgtXHQgIHN0cnVjdCBpcF9zZXRfZXh0ICptZXh0LCB1MzIgZmxhZ3MpO1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg9Njc4PW10eXBlX3Jlc2l6ZShzdHJ1Y3QgaXBfc2V0ICpzZXQsIGJvb2wgcmV0cmllZClcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTgzMC1cdFx0aWYgKHgtXHUwMDNlYWQgPT0gSVBTRVRfQUREKSB7XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oOjgzMTpcdFx0XHRtdHlwZV9hZGQoc2V0LCBcdTAwMjZ4LVx1MDAzZWQsIFx1MDAyNngtXHUwMDNlZXh0LCBcdTAwMjZ4LVx1MDAzZW1leHQsIHgtXHUwMDNlZmxhZ3MpO1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC04MzItXHRcdH0gZWxzZSB7XG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaD05MTM9c3RhdGljIGludFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaDo5MTQ6bXR5cGVfYWRkKHN0cnVjdCBpcF9zZXQgKnNldCwgdm9pZCAqdmFsdWUsIGNvbnN0IHN0cnVjdCBpcF9zZXRfZXh0ICpleHQsXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTkxNS1cdCAgc3RydWN0IGlwX3NldF9leHQgKm1leHQsIHUzMiBmbGFncylcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTEwNDMtXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBJUFNFVF9ORVRfQ09VTlQ7IGkmIzQzOyYjNDM7KVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaDoxMDQ0Olx0XHRtdHlwZV9hZGRfY2lkcihzZXQsIGgsIERDSURSX0dFVChkLVx1MDAzZWNpZHIsIGkpLCBpKTtcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtMTA0NS0jZW5kaWZcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oPTE1MzE9c3RhdGljIGNvbnN0IHN0cnVjdCBpcF9zZXRfdHlwZV92YXJpYW50IG10eXBlX3ZhcmlhbnQgPSB7XG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC0xNTM0LVx0LmFkdFx0PSB7XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oOjE1MzU6XHRcdFtJUFNFVF9BRERdID0gbXR5cGVfYWRkLFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC0xNTM2LVx0XHRbSVBTRVRfREVMXSA9IG10eXBlX2RlbCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMTc6MDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjMxNjUKCQkJCQkJCW91dHB1dDogNDEKCQkJCQkJCXRob3VnaHRzOiAxMTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBJUFNldCBgbXR5cGVfYWRkYCBBc3NpZ25tZW50KioKCk9rYXksIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIHRoaXMgYG10eXBlX2FkZGAgYXNzaWdubWVudCwgYW5kIGl0IGxvb2tzIGxpa2UgaXQmIzM5O3MgcG9pbnRpbmcgdG8gYG10eXBlX3ZhcmlhbnQuYWR0W0lQU0VUX0FERF1gLiBUaGF0JiMzOTtzIHRoZSBlbnRyeSBwb2ludCwgYnV0IHRoZSBhY3R1YWwsIG1vcmUgZ3JhbnVsYXIgZnVuY3Rpb24gd2lsbCBiZSBzb21ldGhpbmcgbGlrZSBgaGFzaF9uZXQ0X2FkZGAsIG9yIGBoYXNoX25ldDZfYWRkYCwgZGVwZW5kaW5nIG9uIHRoZSBJUCB2ZXJzaW9uLiBSaWdodCwgbm93IEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgZnVuY3Rpb25zIGFyZSBhY3R1YWxseSBhdmFpbGFibGUgYW5kLCBjcnVjaWFsbHksIHdoaWNoIG9uZXMgYXJlIGFjY2Vzc2libGUuCgpMZXQmIzM5O3Mgc2VlLi4uIGxvb2tpbmcgYXQgYGhhc2hfbmV0NF9hZGRgLCBJIHNlZSBpdCYjMzk7cyBtYXJrZWQgYHN0YXRpY2AuIFRoYXQmIzM5O3MgdXN1YWxseSBhIHJlZCBmbGFnLiBIbW0sIGhvbGQgb24uLi4gdGhlIGNvZGUgZ2VuZXJhdGVkIGBoYXNoX25ldDRfY3JlYXRlYCwgc28gdGhhdCBnaXZlcyBtZSBhbiBvcGVuaW5nLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29ubmVjdGlvbiBiZXR3ZWVuIHRoYXQgZnVuY3Rpb24gYW5kIHRoZSBhZGQgZnVuY3Rpb24uCgpJJiMzOTtsbCBjaGVjayBgaXBfc2V0X2hhc2hfbmV0LmNgIHRvIHNlZSB3aGF0IGlzIGV4cG9ydGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMiAxNzowMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtoYXNoX25ldDRfJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXQuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldC5jPTMzPU1PRFVMRV9BTElBUyhcJiMzNDtpcF9zZXRfaGFzaDpuZXRcJiMzNDspO1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0LmMtNDEtLyogTWVtYmVyIGVsZW1lbnRzICAqL1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXQuYzo0MjpzdHJ1Y3QgaGFzaF9uZXQ0X2VsZW0ge1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXQuYy00My1cdF9fYmUzMiBpcDtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldC5jPTUxPXN0YXRpYyBib29sXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldC5jOjUyOmhhc2hfbmV0NF9kYXRhX2VxdWFsKGNvbnN0IHN0cnVjdCBoYXNoX25ldDRfZWxlbSAqaXAxLFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXQuYzo1MzpcdFx0ICAgICBjb25zdCBzdHJ1Y3QgaGFzaF9uZXQ0X2VsZW0gKmlwMixcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0LmMtNTQtXHRcdCAgICAgdTMyICptdWx0aSlcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldC5jPTYwPXN0YXRpYyBpbnRcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0LmM6NjE6aGFzaF9uZXQ0X2RvX2RhdGFfbWF0Y2goY29uc3Qgc3RydWN0IGhhc2hfbmV0NF9lbGVtICplbGVtKVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXQuYy02Mi17XG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXQuYz02Nj1zdGF0aWMgdm9pZFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXQuYzo2NzpoYXNoX25ldDRfZGF0YV9zZXRfZmxhZ3Moc3RydWN0IGhhc2hfbmV0NF9lbGVtICplbGVtLCB1MzIgZmxhZ3MpXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldC5jLTY4LXtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldC5jPTcyPXN0YXRpYyB2b2lkXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldC5jOjczOmhhc2hfbmV0NF9kYXRhX3Jlc2V0X2ZsYWdzKHN0cnVjdCBoYXNoX25ldDRfZWxlbSAqZWxlbSwgdTggKmZsYWdzKVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXQuYy03NC17XG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXQuYz03OD1zdGF0aWMgdm9pZFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXQuYzo3OTpoYXNoX25ldDRfZGF0YV9uZXRtYXNrKHN0cnVjdCBoYXNoX25ldDRfZWxlbSAqZWxlbSwgdTggY2lkcilcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0LmMtODAte1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0LmM9ODU9c3RhdGljIGJvb2xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0LmM6ODY6aGFzaF9uZXQ0X2RhdGFfbGlzdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgaGFzaF9uZXQ0X2VsZW0gKmRhdGEpXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldC5jLTg3LXtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldC5jPTEwMT1zdGF0aWMgdm9pZFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXQuYzoxMDI6aGFzaF9uZXQ0X2RhdGFfbmV4dChzdHJ1Y3QgaGFzaF9uZXQ0X2VsZW0gKm5leHQsXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldC5jOjEwMzpcdFx0ICAgIGNvbnN0IHN0cnVjdCBoYXNoX25ldDRfZWxlbSAqZClcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0LmMtMTA0LXtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldC5jPTExMj1zdGF0aWMgaW50XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldC5jOjExMzpoYXNoX25ldDRfa2FkdChzdHJ1Y3QgaXBfc2V0ICpzZXQsIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldC5jLTExNC1cdCAgICAgICBjb25zdCBzdHJ1Y3QgeHRfYWN0aW9uX3BhcmFtICpwYXIsXG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXQuYy0xMTgtXHRpcHNldF9hZHRmbiBhZHRmbiA9IHNldC1cdTAwM2V2YXJpYW50LVx1MDAzZWFkdFthZHRdO1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXQuYzoxMTk6XHRzdHJ1Y3QgaGFzaF9uZXQ0X2VsZW0gZSA9IHtcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0LmMtMTIwLVx0XHQuY2lkciA9IElOSVRfQ0lEUihoLVx1MDAzZXJuZXRzWzBdLCBIT1NUX01BU0spLFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0LmM9MTM1PXN0YXRpYyBpbnRcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0LmM6MTM2Omhhc2hfbmV0NF91YWR0KHN0cnVjdCBpcF9zZXQgKnNldCwgc3RydWN0IG5sYXR0ciAqdGJbXSxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0LmMtMTM3LVx0ICAgICAgIGVudW0gaXBzZXRfYWR0IGFkdCwgdTMyICpsaW5lbm8sIHUzMiBmbGFncywgYm9vbCByZXRyaWVkKVxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0LmMtMTQwLVx0aXBzZXRfYWR0Zm4gYWR0Zm4gPSBzZXQtXHUwMDNldmFyaWFudC1cdTAwM2VhZHRbYWR0XTtcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0LmM6MTQxOlx0c3RydWN0IGhhc2hfbmV0NF9lbGVtIGUgPSB7IC5jaWRyID0gSE9TVF9NQVNLIH07XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldC5jLTE0Mi1cdHN0cnVjdCBpcF9zZXRfZXh0IGV4dCA9IElQX1NFVF9JTklUX1VFWFQoc2V0KTtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldC5jLTE5Ny1cdFx0aWYgKGkgXHUwMDNlIElQU0VUX01BWF9SQU5HRSkge1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXQuYzoxOTg6XHRcdFx0aGFzaF9uZXQ0X2RhdGFfbmV4dChcdTAwMjZoLVx1MDAzZW5leHQsIFx1MDAyNmUpO1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXQuYy0xOTktXHRcdFx0cmV0dXJuIC1FUkFOR0U7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDE3OjAxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI0OTM4CgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogOTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIEFEVCBFbnRyeSBQb2ludHMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoZXNlIGBoYXNoX25ldDRfa2FkdGAgYW5kIGBoYXNoX25ldDRfdWFkdGAgZnVuY3Rpb25zLiBUaGV5JiMzOTtyZSBzdGF0aWMsIHdoaWNoIGlzIGludGVyZXN0aW5nLiBUaGF0IG1lYW5zIHRoZXkmIzM5O3JlIG5vdCBkaXJlY3RseSBhY2Nlc3NpYmxlIGZyb20gb3V0c2lkZSB0aGlzIHNwZWNpZmljIG1vZHVsZS4uLiBvciBhcmUgdGhleT8gV2FpdCwgYGhhc2hfbmV0NF91YWR0YCBpcyBkZWZpbml0ZWx5IHN0YXRpYy4gSXMgdGhlcmUgYW55IG90aGVyIGZ1bmN0aW9uIGV4cG9zZWQgdG8gb3V0c2lkZSBtb2R1bGVzPyBMZXQgbWUgY2hlY2sgYGlwX3NldF9oYXNoX25ldC5jYC4gSSBuZWVkIHRvIHNlZSBpZiB0aGVyZSBhcmUgYW55IGBFWFBPUlRfU1lNQk9MYCBtYWNyb3Mgb3Igb3RoZXIgbm9uLXN0YXRpYyBmdW5jdGlvbnMgaW4gdGhlIGZpbGUgdGhhdCBtaWdodCBiZSBpbXBvcnRhbnQgZm9yIHVuZGVyc3RhbmRpbmcgaG93IHRoaXMgQURUIGxvZ2ljIGlzIGV4cG9zZWQgdG8gdGhlIHJlc3Qgb2YgdGhlIGtlcm5lbCBvciB1c2VyIHNwYWNlLiBMZXQmIzM5O3MgZGlnIGluLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMiAxNzowMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0VYUE9SVF9TWU1CT0wmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMTc6MDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjUyNDYKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAxOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcyBvbiB3aGF0IEkmIzM5O2QgYmUgbG9va2luZyBmb3I6CgoqKkFuYWx5emluZyBgaXBfc2V0X2hhc2hfZ2VuLmhgIGZvciBFeHBvcnRlZCBGdW5jdGlvbnMqKgoKUmlnaHQsIHNvIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gdGhlIGV4dGVybmFsIGludGVyZmFjZSBvZiB0aGlzIGBpcF9zZXRfaGFzaF9nZW4uaGAgaGVhZGVyIGZpbGUuIE15IHByaW1hcnkgZ29hbCBoZXJlIGlzIHRvIGlkZW50aWZ5IHdoaWNoIGZ1bmN0aW9ucyBhcmUgKm1lYW50KiB0byBiZSB1c2VkIGJ5IG90aGVyIHBhcnRzIG9mIHRoZSBzeXN0ZW0g4oCTIHRoZSBvbmVzIHRoYXQgYXJlIGV4cG9ydGVkLCBpbiBlc3NlbmNlLiBJJiMzOTtsbCBiZSBzaWZ0aW5nIHRocm91Z2ggdGhlIGNvZGUsIGNhcmVmdWxseSBsb29raW5nIGZvciBhbnkgdGVsbHRhbGUgc2lnbnMuIEkgZXhwZWN0IHRvIHNlZSBmdW5jdGlvbiBkZWNsYXJhdGlvbnMgd2l0aCBwcmVmaXhlcyBvciBhdHRyaWJ1dGVzIHRoYXQgZGVub3RlIHRoZWlyIHZpc2liaWxpdHkgYW5kIGludGVuZGVkIHVzYWdlLiBUaGluZ3MgbGlrZSBgZXh0ZXJuYCBkZWNsYXJhdGlvbnMsIG1hY3JvcyB0aGF0IGV4cGFuZCB0byBwbGF0Zm9ybS1zcGVjaWZpYyBleHBvcnQgc3ltYm9scyAoZS5nLiwgYF9fZGVjbHNwZWMoZGxsZXhwb3J0KWAgb24gV2luZG93cyBvciB0aGUgZXF1aXZhbGVudCBmb3Igc2hhcmVkIG9iamVjdCBsaWJyYXJpZXMpLCBvciBwb3NzaWJseSBzb21lIG5hbWluZyBjb252ZW50aW9ucyB0aGF0IHN1Z2dlc3QgYSBwdWJsaWMgQVBJLiBJJiMzOTtsbCBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBmdW5jdGlvbiBzaWduYXR1cmVzIGFzIHdlbGwg4oCTIHRoYXQmIzM5O2xsIGdpdmUgbWUgYSBzdHJvbmcgdW5kZXJzdGFuZGluZyBvZiB3aGF0IGRhdGEgc3RydWN0dXJlcyBhbmQgdHlwZXMgdGhlc2UgZXhwb3J0ZWQgZnVuY3Rpb25zIG9wZXJhdGUgb24gYW5kIGV4cGVjdCBhcyBhcmd1bWVudHMuIFRoaXMgc2hvdWxkIGdpdmUgbWUgYSBzb2xpZCBtYXAgb2YgaG93IHRoaXMgbW9kdWxlIGludGVyZmFjZXMgd2l0aCBldmVyeXRoaW5nIGVsc2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDE3OjAxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7RVhQT1JUX1NZTUJPTCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMiAxNzowMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNTU2NQoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDM0MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYGlwc2V0YCBNb2R1bGUgRnVuY3Rpb24gUmVnaXN0cmF0aW9uIGZvciBTeXprYWxsZXIgVGFyZ2V0aW5nKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBob3cgdGhlIGBpcHNldGAgbW9kdWxlIGhhbmRsZXMgaXRzIHZhcmlvdXMgc2V0IHR5cGVzLiBJIHNlZSB0aGF0IGBpcF9zZXRfdHlwZV9yZWdpc3RlcmAgaXMgdGhlIGNvcmUgbWVjaGFuaXNtLCBhbmQgaXQmIzM5O3Mgd2hhdCBob29rcyBldmVyeXRoaW5nIGluLiBUaGUgY3J1Y2lhbCBwYXJ0IGZvciBtZSBpcyB0aGUgYHN0cnVjdCBpcF9zZXRfdHlwZV92YXJpYW50YCBzdHJ1Y3R1cmUg4oCTIGl0IGNvbnRhaW5zIHRoZSBmdW5jdGlvbiBwb2ludGVycyB0byB0aGUgYWN0dWFsIG9wZXJhdGlvbnMuCgpTcGVjaWZpY2FsbHksIEkmIzM5O20gbm90aW5nIHRoZSBmdW5jdGlvbnM6IGBoYXNoX25ldDRfdWFkdGAsIGBoYXNoX25ldDRfa2FkdGAsIGBoYXNoX25ldDZfdWFkdGAsIGFuZCBgaGFzaF9uZXQ2X2thZHRgLiBUaGVzZSBhcmUgdGhlIG9uZXMgdGhhdCBwcmVzdW1hYmx5IHBlcmZvcm0gdGhlIHVuZGVybHlpbmcgb3BlcmF0aW9ucy4gVGhlbiwgb2YgY291cnNlLCB0aGUgZ2VuZXJhdGVkIGZ1bmN0aW9ucyBsaWtlIGBoYXNoX25ldDRfYWRkYCwgYGhhc2hfbmV0NF9kZWxgLCBgaGFzaF9uZXQ0X3Rlc3RgLCBgaGFzaF9uZXQ0X3Jlc2l6ZWAsIGFuZCBgaGFzaF9uZXQ0X2djYC4KClRoZSBjaGFsbGVuZ2UsIGFzIGFsd2F5cyB3aXRoIFN5emthbGxlciwgaXMgd2hldGhlciBpdCBjYW4gcmVsaWFibHkgdGFyZ2V0IHRoZXNlIGZ1bmN0aW9ucy4gU2luY2UgdGhleSYjMzk7cmUgZGVjbGFyZWQgYXMgYHN0YXRpY2AsIEkgd2FzIGluaXRpYWxseSBjb25jZXJuZWQuIE15IGV4cGVyaWVuY2Ugc3VnZ2VzdHMgdGhhdCBpZiB0aGV54oCZcmUgaW4gdGhlIHN5bWJvbCB0YWJsZSAoYW5kIHVzdWFsbHkgdGhleSBhcmUpLCBTeXprYWxsZXIgc2hvdWxkIGJlIGFibGUgdG8gcmVzb2x2ZSBhbmQgdGFyZ2V0IHRoZW0uIEhvd2V2ZXIsIGl0JiMzOTtzIGdlbmVyYWxseSBjbGVhbmVyIHRvIHByb3ZpZGUgdGhlIG5hbWVzIG9mIHRoZSBnZW5lcmF0ZWQgZnVuY3Rpb25zIHJhdGhlciB0aGFuIHJlbHkgb24gdGhlIHVuZGVybHlpbmcgc3RhdGljIGZ1bmN0aW9uIHJlc29sdXRpb24uCgpTbywgbGV0JiMzOTtzIG5haWwgZG93biB0aG9zZSBnZW5lcmF0ZWQgZnVuY3Rpb25zIGZvciB0aGUgYGhhc2hfbmV0NGAgdHlwZS4gSSYjMzk7bGwgbGlzdCB0aGVtIG91dDogYGhhc2hfbmV0NF9hZGRgLCBgaGFzaF9uZXQ0X2RlbGAsIGBoYXNoX25ldDRfdGVzdGAsIGBoYXNoX25ldDRfcmVzaXplYCwgYGhhc2hfbmV0NF9nY2AsIGBoYXNoX25ldDRfZmx1c2hgLCBgaGFzaF9uZXQ0X2Rlc3Ryb3lgLCBgaGFzaF9uZXQ0X2hlYWRgLCBgaGFzaF9uZXQ0X2xpc3RgLCBgaGFzaF9uZXQ0X2thZHRgLCBhbmQgYGhhc2hfbmV0NF91YWR0YC4KCkFoLCBoZXJlJiMzOTtzIGEgZGV0YWlsIEkgbmVlZCB0byBjb25maXJtOiBJdCBzZWVtcyB0aGF0IGBtdHlwZV9hZGRgIGlzICpnZW5lcmF0ZWQqIGFzIGBoYXNoX25ldDRfYWRkYC4gTm93IEkgbmVlZCB0byBxdWlja2x5IGNoZWNrIHRoZSBvYmplY3QgZmlsZSB0byBjb25maXJtIHRoYXQgYGhhc2hfbmV0NF9hZGRgIGFjdHVhbGx5IGV4aXN0cy4gSSYjMzk7bGwgdmVyaWZ5IHRoaXMgaW1tZWRpYXRlbHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDE3OjAyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aGFzaF9uZXQ0X2FkZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvaXBzZXQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMTc6MDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjY0MjUKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAzMzcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBJbXBhY3Qgb2YgdGhlIFBhdGNoKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgYSBiaXQgdHJpY2t5IHRvIHRyYWNrIGRvd24gc2luY2UgaXQmIzM5O3MgZ2VuZXJhdGVkIGJ5IG1hY3Jvcy4gU3RyYWlnaHQgYGdyZXBgIGlzbiYjMzk7dCBnb2luZyB0byBjdXQgaXQsIHNvIEkgbmVlZCB0byBkaWcgaW50byB0aGUgbWFjcm8gZXhwYW5zaW9uIHByb2Nlc3MuIExldCYjMzk7cyBzdGFydCB3aXRoIGBtdHlwZV9hZGRgIGluIGBpcF9zZXRfaGFzaF9nZW4uaGAuIFJpZ2h0LCBgI2RlZmluZSBtdHlwZV9hZGQgSVBTRVRfVE9LRU4oTVRZUEUsIF9hZGQpYC4gQW5kIGBNVFlQRWAgaXMgZGVmaW5lZCBhcyBgaGFzaF9uZXQ0YC4gVGhlcmVmb3JlLCBgSVBTRVRfVE9LRU4oaGFzaF9uZXQ0LCBfYWRkKWAgZXhwYW5kcyB0byBgaGFzaF9uZXQ0X2FkZGAuIEdvb2QsIHRoYXQgc2hvdWxkIGRlZmluaXRlbHkgYmUgaW4gdGhlIHN5bWJvbCB0YWJsZSwgc28gdGhhdCYjMzk7cyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgdG8gY29uZmlybSB0aGUgY2hhbmdlcy4KCkkgc2hvdWxkIGFsc28gY2hlY2sgZnVuY3Rpb25zIGZvciB0aGUgb3RoZXIgaGFzaCB0eXBlcyB0byBzZWUgaG93IHRob3NlIGFyZSBiZWluZyBpbXBhY3RlZC4gU28gSSBzaG91bGQgZXhhbWluZSBgaGFzaF9uZXRuZXQ0X2FkZGAsIGBoYXNoX25ldHBvcnQ0X2FkZGAsIGBoYXNoX25ldGlmYWNlNF9hZGRgLCBgaGFzaF9pcHBvcnRuZXQ0X2FkZGAsIGFuZCBgaGFzaF9uZXRwb3J0bmV0NF9hZGRgLiBUaGlzIHBhdGNoIGlzIHNwZWNpZmljYWxseSBkZWFsaW5nIHdpdGggQ0lEUiBoYW5kbGluZywgYW5kIHRob3NlIGhhc2ggdHlwZXMsIGZyb20gdGhlIG5hbWUsIGhhdmUgYF9uZXRgIGluIHRoZW0gd2hpY2ggcHJvYmFibHkgdXNlcyBpdC4KClRoZSBjb25maWdzIHRoYXQgYXJlIGVuYWJsZWQgYXJlOiBgSVBfU0VUX0hBU0hfSVBQT1JUTkVUYCwgYElQX1NFVF9IQVNIX05FVGAsIGBJUF9TRVRfSEFTSF9ORVRJRkFDRWAsIGBJUF9TRVRfSEFTSF9ORVRORVRgLCBgSVBfU0VUX0hBU0hfTkVUUE9SVGAsIGFuZCBgSVBfU0VUX0hBU0hfTkVUUE9SVE5FVGAuCgpBaCwgYnV0IGhvbGQgb24uIFRoZSBwYXRjaCBpcyBtb2RpZnlpbmcgYGlwX3NldF9oYXNoX2dlbi5oYCB3aGljaCBpcyBpbmNsdWRlZCBieSAqYWxsKiB0aGUgaGFzaCB0eXBlcy4gSG93ZXZlciwgdGhlIENJRFIgbG9naWMgaXMgb25seSBjb25kaXRpb25hbGx5IGNvbXBpbGVkIGJhc2VkIG9uIGBJUF9TRVRfSEFTSF9XSVRIX05FVFNgLiBTbyB0aGUgaW1wYWN0IHdpbGwgYmUgbGltaXRlZCB0byBvbmx5IHRob3NlIHR5cGVzIHRoYXQgYWN0dWFsbHkgZGVmaW5lIHRoYXQuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoaWNoIGZpbGVzIGFjdHVhbGx5IGRlZmluZSBgSVBfU0VUX0hBU0hfV0lUSF9ORVRTYCB0byBmdWxseSB1bmRlcnN0YW5kIHRoZSBzY29wZSBvZiB0aGlzIGNoYW5nZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMTc6MDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7SVBfU0VUX0hBU0hfV0lUSF9ORVRTJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9pcHNldC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaD0xMTY9aHRhYmxlX3NpemUodTggaGJpdHMpXG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC0xMzAtXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oOjEzMTojaWZkZWYgSVBfU0VUX0hBU0hfV0lUSF9ORVRTXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTEzMi0jaWYgSVBTRVRfTkVUX0NPVU5UIFx1MDAzZSAxXG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC0xMzYtI2VuZGlmXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oOjEzNzojaWZkZWYgSVBfU0VUX0hBU0hfV0lUSF9ORVRTX1BBQ0tFRFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC0xMzgtLyogV2hlbiBjaWRyIGlzIHBhY2tlZCB3aXRoIG5vbWF0Y2gsIGNpZHIgLSAxIGlzIHN0b3JlZCBpbiB0aGUgZGF0YSBlbnRyeSAqL1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtMTQ4LVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaDoxNDk6I2VuZGlmIC8qIElQX1NFVF9IQVNIX1dJVEhfTkVUUyAqL1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC0xNTAtXG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaD0xNjM9c3RhdGljIGNvbnN0IHVuaW9uIG5mX2luZXRfYWRkciB6ZXJvbWFzayA9IHt9O1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtMjI0LSNkZWZpbmUgbXR5cGVfZGF0YV9lcXVhbFx0SVBTRVRfVE9LRU4oTVRZUEUsIF9kYXRhX2VxdWFsKVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaDoyMjU6I2lmZGVmIElQX1NFVF9IQVNIX1dJVEhfTkVUU1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC0yMjYtI2RlZmluZSBtdHlwZV9kb19kYXRhX21hdGNoXHRJUFNFVF9UT0tFTihNVFlQRSwgX2RvX2RhdGFfbWF0Y2gpXG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaD0zMDQ9c3RydWN0IG10eXBlX3Jlc2l6ZV9hZCB7XG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC0zMTItXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oOjMxMzojaWZkZWYgSVBfU0VUX0hBU0hfV0lUSF9ORVRTXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTMxNC0vKiBOZXR3b3JrIGNpZHIgc2l6ZSBib29rIGtlZXBpbmcgd2hlbiB0aGUgaGFzaCBzdG9yZXMgZGlmZmVyZW50XG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaD00Mjg9bXR5cGVfZmx1c2goc3RydWN0IGlwX3NldCAqc2V0KVxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtNDMwLVx0c3RydWN0IGh0eXBlICpoID0gc2V0LVx1MDAzZWRhdGE7XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oOjQzMTojaWZkZWYgSVBfU0VUX0hBU0hfV0lUSF9ORVRTXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTQzMi1cdHN0cnVjdCBuZXRfcHJlZml4ZXMgKm5ldHMsICp0bXA7XG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC00NTUtXHR9XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oOjQ1NjojaWZkZWYgSVBfU0VUX0hBU0hfV0lUSF9ORVRTXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTQ1Ny1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIElQU0VUX05FVF9DT1VOVDsgaSYjNDM7JiM0MzspIHtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oPTQ3Mz1tdHlwZV9haGFzaF9kZXN0cm95KHN0cnVjdCBpcF9zZXQgKnNldCwgc3RydWN0IGh0YWJsZSAqdCwgYm9vbCBleHRfZGVzdHJveSlcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtNDc0LXtcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg6NDc1OiNpZmRlZiBJUF9TRVRfSEFTSF9XSVRIX05FVFNcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtNDc2LVx0c3RydWN0IGh0eXBlICpoID0gc2V0LVx1MDAzZWRhdGE7XG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC00OTAtXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oOjQ5MTojaWZkZWYgSVBfU0VUX0hBU0hfV0lUSF9ORVRTXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTQ5Mi1cdGlmIChleHRfZGVzdHJveSlcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oPTUzNz1tdHlwZV9nY19kbyhzdHJ1Y3QgaXBfc2V0ICpzZXQsIHN0cnVjdCBodHlwZSAqaCwgc3RydWN0IGh0YWJsZSAqdCwgdTMyIHIpXG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC01NDItXHRzaXplX3QgZHNpemUgPSBzZXQtXHUwMDNlZHNpemU7XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oOjU0MzojaWZkZWYgSVBfU0VUX0hBU0hfV0lUSF9ORVRTXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTU0NC1cdHU4IGs7XG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC01NjUtXHRcdFx0c21wX21iX19hZnRlcl9hdG9taWMoKTtcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg6NTY2OiNpZmRlZiBJUF9TRVRfSEFTSF9XSVRIX05FVFNcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtNTY3LVx0XHRcdGZvciAoayA9IDA7IGsgXHUwMDNjIElQU0VUX05FVF9DT1VOVDsgayYjNDM7JiM0MzspXG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaD02Nzg9bXR5cGVfcmVzaXplKHN0cnVjdCBpcF9zZXQgKnNldCwgYm9vbCByZXRyaWVkKVxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtNjgzLVx0c2l6ZV90IGhzaXplLCBkc2l6ZSA9IHNldC1cdTAwM2Vkc2l6ZTtcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg6Njg0OiNpZmRlZiBJUF9TRVRfSEFTSF9XSVRIX05FVFNcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtNjg1LVx0dTggZmxhZ3M7XG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC02OTUtXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oOjY5NjojaWZkZWYgSVBfU0VUX0hBU0hfV0lUSF9ORVRTXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTY5Ny1cdHRtcCA9IGttYWxsb2MoZHNpemUsIEdGUF9LRVJORUwpO1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtNzUzLVx0XHRcdFx0XHRjb250aW51ZTtcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg6NzU0OiNpZmRlZiBJUF9TRVRfSEFTSF9XSVRIX05FVFNcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtNzU1LVx0XHRcdFx0LyogV2UgaGF2ZSByZWFkZXJzIHJ1bm5pbmcgcGFyYWxsZWwgd2l0aCB1cyxcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTgwNy1cdFx0XHRcdHQtXHUwMDNlaHJlZ2lvbltucl0uZWxlbWVudHMmIzQzOyYjNDM7O1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaDo4MDg6I2lmZGVmIElQX1NFVF9IQVNIX1dJVEhfTkVUU1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC04MDktXHRcdFx0XHRtdHlwZV9kYXRhX3Jlc2V0X2ZsYWdzKGQsIFx1MDAyNmZsYWdzKTtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTg0NC1vdXQ6XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oOjg0NTojaWZkZWYgSVBfU0VUX0hBU0hfV0lUSF9ORVRTXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTg0Ni1cdGtmcmVlKHRtcCk7XG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaD05MTQ9bXR5cGVfYWRkKHN0cnVjdCBpcF9zZXQgKnNldCwgdm9pZCAqdmFsdWUsIGNvbnN0IHN0cnVjdCBpcF9zZXRfZXh0ICpleHQsXG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC05OTUtXHRcdGlmICghZGVsZXRlZCkge1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaDo5OTY6I2lmZGVmIElQX1NFVF9IQVNIX1dJVEhfTkVUU1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC05OTctXHRcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgSVBTRVRfTkVUX0NPVU5UOyBpJiM0MzsmIzQzOylcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTEwNDEtXHR0LVx1MDAzZWhyZWdpb25bcl0uZWxlbWVudHMmIzQzOyYjNDM7O1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaDoxMDQyOiNpZmRlZiBJUF9TRVRfSEFTSF9XSVRIX05FVFNcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtMTA0My1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIElQU0VUX05FVF9DT1VOVDsgaSYjNDM7JiM0MzspXG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC0xMDQ3LW92ZXJ3cml0ZV9leHRlbnNpb25zOlxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaDoxMDQ4OiNpZmRlZiBJUF9TRVRfSEFTSF9XSVRIX05FVFNcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtMTA0OS1cdG10eXBlX2RhdGFfc2V0X2ZsYWdzKGRhdGEsIGZsYWdzKTtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oPTExMDk9bXR5cGVfZGVsKHN0cnVjdCBpcF9zZXQgKnNldCwgdm9pZCAqdmFsdWUsIGNvbnN0IHN0cnVjdCBpcF9zZXRfZXh0ICpleHQsXG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC0xMTU0LVx0XHR0LVx1MDAzZWhyZWdpb25bcl0uZWxlbWVudHMtLTtcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg6MTE1NTojaWZkZWYgSVBfU0VUX0hBU0hfV0lUSF9ORVRTXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTExNTYtXHRcdGZvciAoaiA9IDA7IGogXHUwMDNjIElQU0VUX05FVF9DT1VOVDsgaiYjNDM7JiM0MzspXG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaD0xMjIxPW10eXBlX2RhdGFfbWF0Y2goc3RydWN0IG10eXBlX2VsZW0gKmRhdGEsIGNvbnN0IHN0cnVjdCBpcF9zZXRfZXh0ICpleHQsXG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC0xMjI5LVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaDoxMjMwOiNpZmRlZiBJUF9TRVRfSEFTSF9XSVRIX05FVFNcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtMTIzMS0vKiBTcGVjaWFsIHRlc3QgZnVuY3Rpb24gd2hpY2ggdGFrZXMgaW50byBhY2NvdW50IHRoZSBkaWZmZXJlbnQgbmV0d29ya1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg9MTMwNT1tdHlwZV90ZXN0KHN0cnVjdCBpcF9zZXQgKnNldCwgdm9pZCAqdmFsdWUsIGNvbnN0IHN0cnVjdCBpcF9zZXRfZXh0ICpleHQsXG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC0xMzE4LVx0dCA9IHJjdV9kZXJlZmVyZW5jZV9iaChoLVx1MDAzZXRhYmxlKTtcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg6MTMxOTojaWZkZWYgSVBfU0VUX0hBU0hfV0lUSF9ORVRTXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTEzMjAtXHQvKiBJZiB3ZSB0ZXN0IGFuIElQIGFkZHJlc3MgYW5kIG5vdCBhIG5ldHdvcmsgYWRkcmVzcyxcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oPTE1NTI9SVBTRVRfVE9LRU4oSFRZUEUsIF9jcmVhdGUpKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGlwX3NldCAqc2V0LFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtMTU2NC0jZW5kaWZcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg6MTU2NTojaWZkZWYgSVBfU0VUX0hBU0hfV0lUSF9ORVRTXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTE1NjYtXHRzdHJ1Y3QgbmV0X3ByZWZpeGVzICpuZXRzO1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtMTY3NC1cdFx0Z290byBmcmVlX3Q7XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oOjE2NzU6I2lmZGVmIElQX1NFVF9IQVNIX1dJVEhfTkVUU1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC0xNjc2LVx0Zm9yIChpID0gMDsgaSBcdTAwM2MgSVBTRVRfTkVUX0NPVU5UOyBpJiM0MzsmIzQzOykge1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtMTc0OS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg6MTc1MDojaWZkZWYgSVBfU0VUX0hBU0hfV0lUSF9ORVRTXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTE3NTEtZnJlZV9ocmVnaW9uOlxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0bmV0LmM9MzY9TU9EVUxFX0FMSUFTKFwmIzM0O2lwX3NldF9oYXNoOmlwLHBvcnQsbmV0XCYjMzQ7KTtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwcG9ydG5ldC5jLTQ0LSAqL1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcHBvcnRuZXQuYzo0NTojZGVmaW5lIElQX1NFVF9IQVNIX1dJVEhfTkVUU19QQUNLRURcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0bmV0LmMtNDYtI2RlZmluZSBJUF9TRVRfSEFTSF9XSVRIX1BST1RPXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwcG9ydG5ldC5jOjQ3OiNkZWZpbmUgSVBfU0VUX0hBU0hfV0lUSF9ORVRTXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwcG9ydG5ldC5jLTQ4LVxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0LmM9MzM9TU9EVUxFX0FMSUFTKFwmIzM0O2lwX3NldF9oYXNoOm5ldFwmIzM0Oyk7XG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXQuYy0zNi0jZGVmaW5lIEhUWVBFXHRcdGhhc2hfbmV0XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldC5jOjM3OiNkZWZpbmUgSVBfU0VUX0hBU0hfV0lUSF9ORVRTXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldC5jLTM4LVxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0aWZhY2UuYz0zNT1NT0RVTEVfQUxJQVMoXCYjMzQ7aXBfc2V0X2hhc2g6bmV0LGlmYWNlXCYjMzQ7KTtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldGlmYWNlLmMtMzgtI2RlZmluZSBIVFlQRVx0XHRoYXNoX25ldGlmYWNlXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldGlmYWNlLmM6Mzk6I2RlZmluZSBJUF9TRVRfSEFTSF9XSVRIX05FVFNcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0aWZhY2UuYy00MC0jZGVmaW5lIElQX1NFVF9IQVNIX1dJVEhfTVVMVElcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldG5ldC5jPTMyPU1PRFVMRV9BTElBUyhcJiMzNDtpcF9zZXRfaGFzaDpuZXQsbmV0XCYjMzQ7KTtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldG5ldC5jLTM1LSNkZWZpbmUgSFRZUEVcdFx0aGFzaF9uZXRuZXRcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0bmV0LmM6MzY6I2RlZmluZSBJUF9TRVRfSEFTSF9XSVRIX05FVFNcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0bmV0LmMtMzctI2RlZmluZSBJUF9TRVRfSEFTSF9XSVRIX05FVE1BU0tcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldHBvcnQuYz0zNT1NT0RVTEVfQUxJQVMoXCYjMzQ7aXBfc2V0X2hhc2g6bmV0LHBvcnRcJiMzNDspO1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0cG9ydC5jLTM5LSNkZWZpbmUgSVBfU0VUX0hBU0hfV0lUSF9QUk9UT1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRwb3J0LmM6NDA6I2RlZmluZSBJUF9TRVRfSEFTSF9XSVRIX05FVFNcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0cG9ydC5jLTQxLVxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0cG9ydC5jLTQ1LSAqL1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRwb3J0LmM6NDY6I2RlZmluZSBJUF9TRVRfSEFTSF9XSVRIX05FVFNfUEFDS0VEXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldHBvcnQuYy00Ny1cbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldHBvcnRuZXQuYz0zMj1NT0RVTEVfQUxJQVMoXCYjMzQ7aXBfc2V0X2hhc2g6bmV0LHBvcnQsbmV0XCYjMzQ7KTtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldHBvcnRuZXQuYy0zNi0jZGVmaW5lIElQX1NFVF9IQVNIX1dJVEhfUFJPVE9cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0cG9ydG5ldC5jOjM3OiNkZWZpbmUgSVBfU0VUX0hBU0hfV0lUSF9ORVRTXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldHBvcnRuZXQuYy0zOC0jZGVmaW5lIElQU0VUX05FVF9DT1VOVCAyXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDE3OjAyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMxMTc2CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogNDAyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgSVAgU2V0IEhhc2ggRnVuY3Rpb25zKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGluLiBJIHNlZSBhIHN1aXRlIG9mIEMgZmlsZXM6IGBpcF9zZXRfaGFzaF9pcHBvcnRuZXQuY2AsIGBpcF9zZXRfaGFzaF9uZXQuY2AsIGV0Yy4gSW1tZWRpYXRlbHksIEkmIzM5O20gemVyb2luZyBpbiBvbiB0aGUgZnVuY3Rpb25zIHRoYXQgYXJlICpnZW5lcmF0ZWQqIGZvciB0aGVzZSBoYXNoIHR5cGVzLiBUaGF0JiMzOTtzIHdoZXJlIHRoZSBjb3JlIGxvZ2ljIHdpbGwgYmUuIEkmIzM5O20gdGhpbmtpbmcgb2YgZnVuY3Rpb25zIGxpa2UgYGhhc2hfbmV0NF9hZGRgLCBgaGFzaF9uZXQ0X2RlbGAsIGFuZCB0aGUgb3RoZXJzIEkgZXhwZWN0IHRvIHNlZSBmb3IgSVB2NCBhbmQgSVB2NiwgdGhlIHZhcmlhdGlvbnMgZm9yIHBvcnQgYW5kIGludGVyZmFjZSBjb21iaW5hdGlvbnM6IGBoYXNoX25ldDZfYWRkYCwgYGhhc2hfbmV0cG9ydDRfYWRkYCwgYGhhc2hfbmV0aWZhY2U2X2FkZGAsIGFuZCBzbyBvbi4gTXkgZm9jdXMgaXMgb24gdGhlIGFkZC9kZWwvdGVzdC9yZXNpemUvZ2Mgb3BlcmF0aW9ucyDigJMgdGhlIGZ1bmRhbWVudGFsIGJ1aWxkaW5nIGJsb2Nrcy4gSSBrbm93IGZyb20gZXhwZXJpZW5jZSB0aGF0IHRoZSBwZXJmb3JtYW5jZSBvZiB0aGVzZSBoYXNoIHNldHMgcmVhbGx5IGhpbmdlcyBvbiB0aGUgZWZmaWNpZW5jeSBvZiB0aG9zZSBmdW5jdGlvbnMuCgpTcGVjaWZpY2FsbHksIEkgd2FudCB0byBjb25maXJtIHdoZXRoZXIgYGhhc2hfbmV0NF90ZXN0X2NpZHJzYCBpcyBhY3R1YWxseSBnZW5lcmF0ZWQuIEkgcmVjYWxsIHRoYXQgaWYgYElQX1NFVF9IQVNIX1dJVEhfTkVUU2AgaXMgZGVmaW5lZCwgdGhpcyBjYXBhYmlsaXR5IGlzIHN1cHBvcnRlZC4gQSBxdWljayBzY2FuIG9mIHRoZSBjb2RlIHZlcmlmaWVzIHRoYXQgYG10eXBlX3Rlc3RfY2lkcnNgIGlzIGluZGVlZCBkZWZpbmVkIGJhc2VkIG9uIHRoYXQgY29uZGl0aW9uLiBUaW1lIHRvIGNoZWNrIGBpcF9zZXRfaGFzaF9nZW4uaGAgYW5kIGNvbmZpcm0gaG93IHRob3NlIGZ1bmN0aW9ucyBhcmUgZGVmaW5lZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMTc6MDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bXR5cGVfdGVzdF9jaWRycyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvaXBzZXQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg9MTYzPXN0YXRpYyBjb25zdCB1bmlvbiBuZl9pbmV0X2FkZHIgemVyb21hc2sgPSB7fTtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTIwNS0jdW5kZWYgbXR5cGVfZGVsXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oOjIwNjojdW5kZWYgbXR5cGVfdGVzdF9jaWRyc1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC0yMDctI3VuZGVmIG10eXBlX3Rlc3Rcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTI1MC0jZGVmaW5lIG10eXBlX2RlbFx0XHRJUFNFVF9UT0tFTihNVFlQRSwgX2RlbClcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg6MjUxOiNkZWZpbmUgbXR5cGVfdGVzdF9jaWRyc1x0SVBTRVRfVE9LRU4oTVRZUEUsIF90ZXN0X2NpZHJzKVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC0yNTItI2RlZmluZSBtdHlwZV90ZXN0XHRcdElQU0VUX1RPS0VOKE1UWVBFLCBfdGVzdClcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oPTEyMzQ9c3RhdGljIGludFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaDoxMjM1Om10eXBlX3Rlc3RfY2lkcnMoc3RydWN0IGlwX3NldCAqc2V0LCBzdHJ1Y3QgbXR5cGVfZWxlbSAqZCxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtMTIzNi1cdFx0IGNvbnN0IHN0cnVjdCBpcF9zZXRfZXh0ICpleHQsXG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaD0xMzA1PW10eXBlX3Rlc3Qoc3RydWN0IGlwX3NldCAqc2V0LCB2b2lkICp2YWx1ZSwgY29uc3Qgc3RydWN0IGlwX3NldF9leHQgKmV4dCxcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTEzMjYtXHRpZiAoaSA9PSBJUFNFVF9ORVRfQ09VTlQpIHtcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg6MTMyNzpcdFx0cmV0ID0gbXR5cGVfdGVzdF9jaWRycyhzZXQsIGQsIGV4dCwgbWV4dCwgZmxhZ3MpO1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC0xMzI4LVx0XHRnb3RvIG91dDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMTc6MDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzI0MjkKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiA2NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOgoKKipBbmFseXppbmcgTmV0d29yayBIYXNoIFRhYmxlIE9wZXJhdGlvbnMqKgoKT2theSwgc28gSSBzZWUgYSBnZW5lcmF0ZWQgYGhhc2hfbmV0NF90ZXN0X2NpZHJzYCBmdW5jdGlvbi4gVGhhdCYjMzk7cyBnb29kLCBsaWtlbHkgZm9yIHF1aWNrbHkgdGVzdGluZyBDSURScyB3aXRoaW4gdGhlIG5ldHdvcmsgaGFzaCB0YWJsZS4gQW5kIEkmIzM5O20gc2VlaW5nIHN1cHBvcnRpbmcgZnVuY3Rpb25zOiBgaGFzaF9uZXQ0X2FkZGAsIGBoYXNoX25ldDRfZGVsYCwgYGhhc2hfbmV0NF9yZXNpemVgLCBhbmQgYGhhc2hfbmV0NF9nY2AuIFRoYXQgbWFrZXMgc2Vuc2UgLSB3ZSBuZWVkIGZ1bmN0aW9ucyB0byBtYW5pcHVsYXRlIHRoZSB0YWJsZSwgcmVzaXplIGl0IGFzIG5lZWRlZCwgYW5kIGdhcmJhZ2UgY29sbGVjdCBwb3RlbnRpYWxseSBzdGFsZSBlbnRyaWVzLiBNeSBpbW1lZGlhdGUgY29uY2VybiwgYXMgYW4gZXhwZXJ0IGluIHRoaXMsIGlzIGhvdyB0aGUgcmVzaXplIGFuZCBHQyBhcmUgYmVpbmcgaGFuZGxlZC4gSSYjMzk7bSBnb2luZyB0byBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBgbXR5cGVfcmVzaXplYCBhbmQgYG10eXBlX2djYCBmdW5jdGlvbnMgbm93IHRvIGVuc3VyZSB0aGVpciBlZmZpY2llbnQgYW5kIGNvcnJlY3Qgb3BlcmF0aW9uLCB3aGljaCBpcyBjcml0aWNhbCBmb3IgZ29vZCBwZXJmb3JtYW5jZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMTc6MDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bXR5cGVfcmVzaXplJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9pcHNldC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaD0xNjM9c3RhdGljIGNvbnN0IHVuaW9uIG5mX2luZXRfYWRkciB6ZXJvbWFzayA9IHt9O1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtMjA4LSN1bmRlZiBtdHlwZV91cmVmXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oOjIwOTojdW5kZWYgbXR5cGVfcmVzaXplXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTIxMC0jdW5kZWYgbXR5cGVfZXh0X3NpemVcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg6MjExOiN1bmRlZiBtdHlwZV9yZXNpemVfYWRcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtMjEyLSN1bmRlZiBtdHlwZV9oZWFkXG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC0yNTMtI2RlZmluZSBtdHlwZV91cmVmXHRcdElQU0VUX1RPS0VOKE1UWVBFLCBfdXJlZilcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg6MjU0OiNkZWZpbmUgbXR5cGVfcmVzaXplXHRcdElQU0VUX1RPS0VOKE1UWVBFLCBfcmVzaXplKVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC0yNTUtI2RlZmluZSBtdHlwZV9leHRfc2l6ZVx0XHRJUFNFVF9UT0tFTihNVFlQRSwgX2V4dF9zaXplKVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaDoyNTY6I2RlZmluZSBtdHlwZV9yZXNpemVfYWRcdFx0SVBTRVRfVE9LRU4oTVRZUEUsIF9yZXNpemVfYWQpXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTI1Ny0jZGVmaW5lIG10eXBlX2hlYWRcdFx0SVBTRVRfVE9LRU4oTVRZUEUsIF9oZWFkKVxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg9MjgzPXN0cnVjdCBodHlwZSB7XG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC0zMDMtLyogQUREfERFTCBlbnRyaWVzIHNhdmVkIGR1cmluZyByZXNpemUgKi9cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg6MzA0OnN0cnVjdCBtdHlwZV9yZXNpemVfYWQge1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC0zMDUtXHRzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7XG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaD02Nzc9c3RhdGljIGludFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaDo2Nzg6bXR5cGVfcmVzaXplKHN0cnVjdCBpcF9zZXQgKnNldCwgYm9vbCByZXRyaWVkKVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC02Nzkte1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtNjkxLVx0c3RydWN0IGxpc3RfaGVhZCAqbCwgKmx0O1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaDo2OTI6XHRzdHJ1Y3QgbXR5cGVfcmVzaXplX2FkICp4O1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC02OTMtXHR1MzIgaSwgaiwgciwgbnIsIGtleTtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTgyOC1cdGxpc3RfZm9yX2VhY2hfc2FmZShsLCBsdCwgXHUwMDI2b3JpZy1cdTAwM2VhZCkge1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaDo4Mjk6XHRcdHggPSBsaXN0X2VudHJ5KGwsIHN0cnVjdCBtdHlwZV9yZXNpemVfYWQsIGxpc3QpO1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC04MzAtXHRcdGlmICh4LVx1MDAzZWFkID09IElQU0VUX0FERCkge1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg9OTE0PW10eXBlX2FkZChzdHJ1Y3QgaXBfc2V0ICpzZXQsIHZvaWQgKnZhbHVlLCBjb25zdCBzdHJ1Y3QgaXBfc2V0X2V4dCAqZXh0LFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtMTA3My1cdFx0LyogUmVzaXplIGlzIGluIHByb2Nlc3MgYW5kIGtlcm5lbCBzaWRlIGFkZCwgc2F2ZSB2YWx1ZXMgKi9cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg6MTA3NDpcdFx0c3RydWN0IG10eXBlX3Jlc2l6ZV9hZCAqeDtcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtMTA3NS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg6MTA3NjpcdFx0eCA9IGt6YWxsb2Nfb2JqKHN0cnVjdCBtdHlwZV9yZXNpemVfYWQsIEdGUF9BVE9NSUMpO1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC0xMDc3LVx0XHRpZiAoIXgpXG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaD0xMTA5PW10eXBlX2RlbChzdHJ1Y3QgaXBfc2V0ICpzZXQsIHZvaWQgKnZhbHVlLCBjb25zdCBzdHJ1Y3QgaXBfc2V0X2V4dCAqZXh0LFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtMTExNi1cdHN0cnVjdCBoYnVja2V0ICpuO1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaDoxMTE3Olx0c3RydWN0IG10eXBlX3Jlc2l6ZV9hZCAqeCA9IE5VTEw7XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTExMTgtXHRpbnQgaSwgaiwgaywgciwgcmV0ID0gLUlQU0VUX0VSUl9FWElTVDtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTExNjUtXHRcdFx0ICovXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oOjExNjY6XHRcdFx0eCA9IGt6YWxsb2Nfb2JqKHN0cnVjdCBtdHlwZV9yZXNpemVfYWQsIEdGUF9BVE9NSUMpO1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC0xMTY3LVx0XHRcdGlmICh4KSB7XG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaD0xNTMxPXN0YXRpYyBjb25zdCBzdHJ1Y3QgaXBfc2V0X3R5cGVfdmFyaWFudCBtdHlwZV92YXJpYW50ID0ge1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtMTU0My1cdC51cmVmXHQ9IG10eXBlX3VyZWYsXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oOjE1NDQ6XHQucmVzaXplXHQ9IG10eXBlX3Jlc2l6ZSxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtMTU0NS1cdC5zYW1lX3NldCA9IG10eXBlX3NhbWVfc2V0LFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMiAxNzowMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNDE1NAoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBhcyBpZiBpdCYjMzk7cyBteSBvd24gaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipEZWVwIERpdmUgaW50byBgbXR5cGVfZ2NgKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXNzZWN0IHRoaXMuIFdoZW4gSSBzZWUgYG10eXBlX2djYCwgbXkgYnJhaW4gaW1tZWRpYXRlbHkganVtcHMgdG8gZ2FyYmFnZSBjb2xsZWN0aW9uIGFuZCBtZW1vcnkgbWFuYWdlbWVudCwgcGFydGljdWxhcmx5IGFzIGl0IHJlbGF0ZXMgdG8sIHByZXN1bWFibHksIHNvbWUga2luZCBvZiBtZWRpYSB0eXBlIHJlcHJlc2VudGF0aW9uLiBUaGUgbmFtaW5nIHN1Z2dlc3RzIHRoYXQgJiMzNDttdHlwZSYjMzQ7IGlzIGEgbWVkaWEgdHlwZSBhbmQgJiMzNDtnYyYjMzQ7IGlzIHByb2JhYmx5IGFuIGluZGljYXRvciBmb3IgZ2FyYmFnZSBjb2xsZWN0aW9uLgoKTXkgZmlyc3QgdGhvdWdodCBpcyBhbHdheXMgZWZmaWNpZW5jeS4gSXMgdGhpcyBhIHN5c3RlbSB3aGVyZSB3ZSYjMzk7cmUgdHJhY2tpbmcgbWVkaWEgdHlwZXMgaW4gYSB3YXkgdGhhdCByZXF1aXJlcyBleHBsaWNpdCBtYW5hZ2VtZW50LCBvciBhcmUgd2UgaG9waW5nIHRoZSBnYXJiYWdlIGNvbGxlY3RvciBjYW4gaGFuZGxlIG1vc3Qgb2YgdGhlIGNsZWFudXA/IFdoYXQgYXJlIHRoZSBpbXBsaWNhdGlvbnMgb2YgZGlmZmVyZW50IG1lZGlhIHR5cGVzIG9uIHRoZSBoZWFwPyBEb2VzIHRoaXMgYG10eXBlX2djYCByZWxhdGUgdG8gYSBwb29sIG9mIG1lZGlhIHR5cGUgb2JqZWN0IGluc3RhbmNlcyBvciBpcyBpdCByZWxhdGVkIHRvIHRoZSBkYXRhIHN0cnVjdHVyZXMgc3RvcmluZyB0aGUgZGF0YSBmb3IgdGhlIGdpdmVuIG1lZGlhIHR5cGU/CgpJJiMzOTttIGluc3RhbnRseSBjb25zaWRlcmluZyBlZGdlIGNhc2VzLiBJZiBgbXR5cGVfZ2NgIGlzIGEgZmxhZyBvciBhIG1ldGFkYXRhIGF0dHJpYnV0ZSBvbiBhIG1lZGlhIHR5cGUgcmVwcmVzZW50YXRpb24sIGhvdyBpcyB0aGlzIGhhbmRsZWQgaW4gYSBtdWx0aXRocmVhZGVkIGVudmlyb25tZW50PyBBcmUgdGhlcmUgdGhyZWFkLXNhZmUgbWVjaGFuaXNtcyBpbiBwbGFjZT8gT3IgaXMgaXQgcHJlc3VtZWQgdG8gYmUgc2luZ2xlLXRocmVhZGVkPyBXaGF0IGhhcHBlbnMgaWYgeW91IGhhdmUgY3Jvc3MtcmVmZXJlbmNlcz8gSXMgdGhlcmUgYSBjeWNsaWMgZGVwZW5kZW5jeSB0aGF0IHRoZSBHQyBtaWdodCBub3QgaGFuZGxlIHdlbGw/IEhvdyB3b3VsZCB0aGF0IG1hbmlmZXN0PwoKVGhlbiBJ4oCZbSB0aGlua2luZyBhYm91dCB0aGUgdW5kZXJseWluZyByZXByZXNlbnRhdGlvbi4gV2hhdCBkb2VzIGFuICYjMzQ7bXR5cGUmIzM0OyBldmVuICpsb29rKiBsaWtlIGhlcmU/IElzIGl0IGEgc3RyaW5nLCBhbiBpbnRlZ2VyIGVudW0sIGEgbW9yZSBjb21wbGV4IG9iamVjdCB3aXRoIG5lc3RlZCBkYXRhIHN0cnVjdHVyZXM/IEhvdyBpcyBpdCBzdG9yZWQ/IEluIGEgaGFzaCB0YWJsZT8gQSB0cmVlPyBBIGxpbmtlZCBsaXN0PyBFYWNoIGNob2ljZSBoYXMgR0MgaW1wbGljYXRpb25zLiBIb3cgb2Z0ZW4gYXJlIHRoZXNlIG10eXBlcyBjcmVhdGVkLCBtb2RpZmllZCwgYW5kIGRlc3Ryb3llZD8gQXJlIHdlIHRhbGtpbmcgYWJvdXQgYSBtYXNzaXZlLCBmcmVxdWVudGx5IGNoYW5naW5nIG1lZGlhIHR5cGUgY2F0YWxvZywgb3IgYSByZWxhdGl2ZWx5IHN0YXRpYyBzZXQ/IEFuZCB3aGF0IGxldmVsIG9mIEdDIGNvbnRyb2wgZG8gd2UgaGF2ZT8KCkZpbmFsbHksIHRoZSBkZXNpZ24gaXMga2V5LiBEaWQgc29tZW9uZSBpbXBsZW1lbnQgdGhpcyB3aXRoIGV4cGxpY2l0IG1lbW9yeSBjb250cm9sIG9yIGltcGxpY2l0bHk/IFRoaXMgcmVhbGx5IGltcGFjdHMgbXkgbmV4dCBxdWVzdGlvbiwgaXMgdGhlIEdDIGltcGxlbWVudGF0aW9uIHRoZSBib3R0bGVuZWNrPyBBcmUgdGhlcmUgb3B0aW1pemF0aW9uIG9wcG9ydHVuaXRpZXMgaGVyZT8KCk92ZXJhbGwsIG15IG1pbmQgaXMgcmFjaW5nIHRocm91Z2ggYWxsIHRoZSBwb3RlbnRpYWwgZGVzaWduIGNob2ljZXMgYW5kIHRoZWlyIHBvdGVudGlhbCBtZW1vcnkgbWFuYWdlbWVudCBwaXRmYWxscyByZWxhdGVkIHRvIGdhcmJhZ2UgY29sbGVjdGlvbi4gSeKAmW0gc3RhcnRpbmcgdG8gbWVudGFsbHkgYnVpbGQgYSBjaGVja2xpc3Qgb2YgcXVlc3Rpb25zIHRvIGFzaywgZGVzaWduIGRlY2lzaW9ucyB0byBldmFsdWF0ZSwgYW5kIHBvdGVudGlhbCBib3R0bGVuZWNrcyB0byBhbnRpY2lwYXRlLiBMZXQmIzM5O3MgZGlnIGRlZXBlci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMTc6MDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bXR5cGVfZ2MmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL2lwc2V0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfZ2VuLmgtOS0jZGVmaW5lIG10eXBlX2RvX3Rlc3RcdFx0SVBTRVRfVE9LRU4oTVRZUEUsIF9kb190ZXN0KVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX2dlbi5oOjEwOiNkZWZpbmUgbXR5cGVfZ2NfdGVzdFx0XHRJUFNFVF9UT0tFTihNVFlQRSwgX2djX3Rlc3QpXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfZ2VuLmgtMTEtI2RlZmluZSBtdHlwZV9pc19maWxsZWRcdFx0SVBTRVRfVE9LRU4oTVRZUEUsIF9pc19maWxsZWQpXG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX2dlbi5oLTE4LSNkZWZpbmUgbXR5cGVfYWRkX3RpbWVvdXRcdElQU0VUX1RPS0VOKE1UWVBFLCBfYWRkX3RpbWVvdXQpXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfZ2VuLmg6MTk6I2RlZmluZSBtdHlwZV9nY19pbml0XHRcdElQU0VUX1RPS0VOKE1UWVBFLCBfZ2NfaW5pdClcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9nZW4uaC0yMC0jZGVmaW5lIG10eXBlX2thZHRcdFx0SVBTRVRfVE9LRU4oTVRZUEUsIF9rYWR0KVxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9nZW4uaC0zMS0jZGVmaW5lIG10eXBlX2xpc3RcdFx0SVBTRVRfVE9LRU4oTVRZUEUsIF9saXN0KVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX2dlbi5oOjMyOiNkZWZpbmUgbXR5cGVfZ2NcdFx0SVBTRVRfVE9LRU4oTVRZUEUsIF9nYylcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9nZW4uaC0zMy0jZGVmaW5lIG10eXBlX2NhbmNlbF9nY1x0XHRJUFNFVF9UT0tFTihNVFlQRSwgX2NhbmNlbF9nYylcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfZ2VuLmg9Mzg9c3RhdGljIHZvaWRcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9nZW4uaDozOTptdHlwZV9nY19pbml0KHN0cnVjdCBpcF9zZXQgKnNldCwgdm9pZCAoKmdjKShzdHJ1Y3QgdGltZXJfbGlzdCAqdCkpXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfZ2VuLmgtNDAte1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9nZW4uaD0yNjU9c3RhdGljIHZvaWRcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9nZW4uaDoyNjY6bXR5cGVfZ2Moc3RydWN0IHRpbWVyX2xpc3QgKnQpXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfZ2VuLmgtMjY3LXtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfZ2VuLmgtMjc3LVx0Zm9yIChpZCA9IDA7IGlkIFx1MDAzYyBtYXAtXHUwMDNlZWxlbWVudHM7IGlkJiM0MzsmIzQzOylcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9nZW4uaDoyNzg6XHRcdGlmIChtdHlwZV9nY190ZXN0KGlkLCBtYXAsIHNldC1cdTAwM2Vkc2l6ZSkpIHtcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9nZW4uaC0yNzktXHRcdFx0eCA9IGdldF9leHQoc2V0LCBtYXAsIGlkKTtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oPTE2Mz1zdGF0aWMgY29uc3QgdW5pb24gbmZfaW5ldF9hZGRyIHplcm9tYXNrID0ge307XG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC0yMTMtI3VuZGVmIG10eXBlX2xpc3Rcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg6MjE0OiN1bmRlZiBtdHlwZV9nY19kb1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaDoyMTU6I3VuZGVmIG10eXBlX2djXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oOjIxNjojdW5kZWYgbXR5cGVfZ2NfaW5pdFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC0yMTctI3VuZGVmIG10eXBlX2NhbmNlbF9nY1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtMjU4LSNkZWZpbmUgbXR5cGVfbGlzdFx0XHRJUFNFVF9UT0tFTihNVFlQRSwgX2xpc3QpXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oOjI1OTojZGVmaW5lIG10eXBlX2djX2RvXHRcdElQU0VUX1RPS0VOKE1UWVBFLCBfZ2NfZG8pXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oOjI2MDojZGVmaW5lIG10eXBlX2djXHRcdElQU0VUX1RPS0VOKE1UWVBFLCBfZ2MpXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oOjI2MTojZGVmaW5lIG10eXBlX2djX2luaXRcdFx0SVBTRVRfVE9LRU4oTVRZUEUsIF9nY19pbml0KVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC0yNjItI2RlZmluZSBtdHlwZV9jYW5jZWxfZ2NcdFx0SVBTRVRfVE9LRU4oTVRZUEUsIF9jYW5jZWxfZ2MpXG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaD01MzY9c3RhdGljIHZvaWRcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg6NTM3Om10eXBlX2djX2RvKHN0cnVjdCBpcF9zZXQgKnNldCwgc3RydWN0IGh0eXBlICpoLCBzdHJ1Y3QgaHRhYmxlICp0LCB1MzIgcilcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtNTM4LXtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oPTYwOT1zdGF0aWMgdm9pZFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaDo2MTA6bXR5cGVfZ2Moc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC02MTEte1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtNjM3LVx0aWYgKCF0LVx1MDAzZXJlc2l6aW5nKVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaDo2Mzg6XHRcdG10eXBlX2djX2RvKHNldCwgaCwgdCwgcik7XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTYzOS1cdHNwaW5fdW5sb2NrX2JoKFx1MDAyNmdjLVx1MDAzZWxvY2spO1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg9NjUwPXN0YXRpYyB2b2lkXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oOjY1MTptdHlwZV9nY19pbml0KHN0cnVjdCBodGFibGVfZ2MgKmdjKVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC02NTIte1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaDo2NTM6XHRJTklUX0RFRkVSUkFCTEVfV09SSyhcdTAwMjZnYy1cdTAwM2Vkd29yaywgbXR5cGVfZ2MpO1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC02NTQtXHRxdWV1ZV9kZWxheWVkX3dvcmsoc3lzdGVtX3Bvd2VyX2VmZmljaWVudF93cSwgXHUwMDI2Z2MtXHUwMDNlZHdvcmssIEhaKTtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oPTkxND1tdHlwZV9hZGQoc3RydWN0IGlwX3NldCAqc2V0LCB2b2lkICp2YWx1ZSwgY29uc3Qgc3RydWN0IGlwX3NldF9leHQgKmV4dCxcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTkzOC1cdFx0aWYgKFNFVF9XSVRIX1RJTUVPVVQoc2V0KSlcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg6OTM5Olx0XHRcdG10eXBlX2djX2RvKHNldCwgaCwgdCwgcik7XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTk0MC1cdFx0bWF4ZWxlbSA9IGgtXHUwMDNlbWF4ZWxlbTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMTc6MDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzYzNDIKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiA4OTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBHZW5lcmF0ZWQgSGFzaCBGdW5jdGlvbnMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoZSBnZW5lcmF0ZWQgaGFzaCBmdW5jdGlvbnMuIFdlJiMzOTt2ZSBnb3QgYGhhc2hfbmV0NF9nY2AsIGBoYXNoX25ldDRfZ2NfZG9gLCBgaGFzaF9uZXQ0X3Jlc2l6ZWAsIGBoYXNoX25ldDRfYWRkYCwgYW5kIGBoYXNoX25ldDRfZGVsYC4gSSBzZWUgdGhhdCBgaGFzaF9uZXQ0X3Rlc3RfY2lkcnNgIGlzIGNvbmRpdGlvbmFsOyBpdCYjMzk7cyBvbmx5IGdlbmVyYXRlZCBpZiBgSVBfU0VUX0hBU0hfV0lUSF9ORVRTYCBpcyBkZWZpbmVkLiBHb29kIHRvIG5vdGUuCgpJJiMzOTttIHRoaW5raW5nLCBpbnN0ZWFkIG9mIGdvaW5nIHRocm91Z2ggdGhlIG9iamVjdCBmaWxlIHdpdGggYHJlYWQtZmlsZWAgb3IgYGdyZXBwZXJgLCBJIGNhbiBqdXN0IGxpc3QgdGhlbSBiYXNlZCBvbiB0aGUgYE1UWVBFYCB2YWx1ZXMuIFRoYXQmIzM5O3MgY2xlYW5lci4gTGV0JiMzOTtzIHNlZS4uLiB0aGUgYE1UWVBFYHMgdGhhdCBhcmUgcmVsZXZhbnQgaGVyZSBhcmU6IGBoYXNoX25ldDRgLCBgaGFzaF9uZXQ2YCwgYGhhc2hfbmV0bmV0NGAsIGBoYXNoX25ldG5ldDZgLCBgaGFzaF9uZXRwb3J0NGAsIGBoYXNoX25ldHBvcnQ2YCwgYGhhc2hfbmV0aWZhY2U0YCwgYGhhc2hfbmV0aWZhY2U2YCwgYGhhc2hfaXBwb3J0bmV0NGAsIGBoYXNoX2lwcG9ydG5ldDZgLCBgaGFzaF9uZXRwb3J0bmV0NGAsIGFuZCBgaGFzaF9uZXRwb3J0bmV0NmAuCgpUaGUgZnVuY3Rpb25zIGdlbmVyYXRlZCBmb3IgZWFjaCBvZiB0aGVzZSBgTVRZUEVgcyBhcmUgZmFpcmx5IHByZWRpY3RhYmxlLiBXZSBoYXZlOiBge01UWVBFfV9hZGRgLCBge01UWVBFfV9kZWxgLCBge01UWVBFfV9yZXNpemVgLCBge01UWVBFfV9nY2AsIGFuZCwgYmVjYXVzZSBgSVBfU0VUX0hBU0hfV0lUSF9ORVRTYCBpcyBkZWZpbmVkIChhbmQgaXQgKmlzKiBmb3IgdGhlc2UgY2FzZXMpLCBge01UWVBFfV90ZXN0X2NpZHJzYC4KCkkgY2FuIGNvbmZpcm0gdGhhdCBgaGFzaF9uZXQ0X3Rlc3RfY2lkcnNgIGlzLCBpbiBmYWN0LCBkZWZpbmVkIGJlY2F1c2UgYG10eXBlX3Rlc3RfY2lkcnNgIGlzLgoKTGV0IG1lIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMuIFJpZ2h0LCB0aGUgb25lcyB0aGF0IG1hdHRlciBoZXJlIGFyZTogYElQX1NFVF9IQVNIX0lQUE9SVE5FVGAsIGBJUF9TRVRfSEFTSF9ORVRgLCBgSVBfU0VUX0hBU0hfTkVUSUZBQ0VgLCBgSVBfU0VUX0hBU0hfTkVUTkVUYCwgYElQX1NFVF9IQVNIX05FVFBPUlRgLCBhbmQgYElQX1NFVF9IQVNIX05FVFBPUlRORVRgLiBPaCwgYW5kIHRoZSBvdmVyYXJjaGluZyBvbmUgaXMgYElQX1NFVGAsIG9mIGNvdXJzZS4gVGhpcyBwYXRjaCBtb2RpZmllcyBgaXBfc2V0X2hhc2hfZ2VuLmhgLCBzbyBpdCYjMzk7cyBjbGVhcmx5IGNlbnRyYWwgdG8gdGhlIGhhc2ggdHlwZSBnZW5lcmF0aW9uLiBUaGUgbWFjcm8gYElQX1NFVF9IQVNIX1dJVEhfTkVUU2AgaXNuJiMzOTt0IGEga2NvbmZpZyBvcHRpb24sIHNvIHRoZSBsaXN0IEkganVzdCBnYXZlIGlzIGl0LgoKSSBzaG91bGQgYWxzbyBtYWtlIHN1cmUgSSBoYXZlIHRoZSBmdWxsIGxpc3Qgb2YgZ2VuZXJhdGVkIGZ1bmN0aW9ucy4gTGV0JiMzOTtzIHNlZTogYG10eXBlX2FkZF9jaWRyYCBiZWNvbWVzIGB7TVRZUEV9X2FkZF9jaWRyYCwgYG10eXBlX2RlbF9jaWRyYCBiZWNvbWVzIGB7TVRZUEV9X2RlbF9jaWRyYCwgYG10eXBlX2ZsdXNoYCBiZWNvbWVzIGB7TVRZUEV9X2ZsdXNoYCwgYG10eXBlX2FoYXNoX2Rlc3Ryb3lgIGlzIGB7TVRZUEV9X2FoYXNoX2Rlc3Ryb3lgLCBgbXR5cGVfZGVzdHJveWAgaXMgYHtNVFlQRX1fZGVzdHJveWAsIGBtdHlwZV9nY19kb2AgaXMgYHtNVFlQRX1fZ2NfZG9gLCBgbXR5cGVfZ2NgIGlzIGB7TVRZUEV9X2djYCwgYG10eXBlX3Jlc2l6ZWAgaXMgYHtNVFlQRX1fcmVzaXplYCwgYG10eXBlX2FkZGAgaXMgYHtNVFlQRX1fYWRkYCwgYG10eXBlX2RlbGAgaXMgYHtNVFlQRX1fZGVsYCwgYG10eXBlX3Rlc3RfY2lkcnNgIGlzIGB7TVRZUEV9X3Rlc3RfY2lkcnNgLCBhbmQgYG10eXBlX3VyZWZgIGlzIGB7TVRZUEV9X3VyZWZgLgoKQW5kIEkgc2VlIHRoYXQgYElQU0VUX1RPS0VOKEhUWVBFLCBfY3JlYXRlKWAgZXhwYW5kcyB0byBgaGFzaF9uZXRfY3JlYXRlYCBpbiBgaXBfc2V0X2hhc2hfbmV0LmNgLCB3aGVyZSBgSFRZUEVgIGlzIGBoYXNoX25ldGAuIE5lZWQgdG8gbG9vayBhdCBgSFRZUEVgIGluIHRoZSBvdGhlciBmaWxlcyB0byBlbnN1cmUgY29uc2lzdGVuY3kuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDE3OjAyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0OyNkZWZpbmUgSFRZUEUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL2lwc2V0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwLmM9MzM9TU9EVUxFX0FMSUFTKFwmIzM0O2lwX3NldF9oYXNoOmlwXCYjMzQ7KTtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwLmMtMzUtLyogVHlwZSBzcGVjaWZpYyBmdW5jdGlvbiBwcmVmaXggKi9cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXAuYzozNjojZGVmaW5lIEhUWVBFXHRcdGhhc2hfaXBcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXAuYy0zNy0jZGVmaW5lIElQX1NFVF9IQVNIX1dJVEhfTkVUTUFTS1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBtYWMuYz0zMj1NT0RVTEVfQUxJQVMoXCYjMzQ7aXBfc2V0X2hhc2g6aXAsbWFjXCYjMzQ7KTtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwbWFjLmMtMzQtLyogVHlwZSBzcGVjaWZpYyBmdW5jdGlvbiBwcmVmaXggKi9cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBtYWMuYzozNTojZGVmaW5lIEhUWVBFXHRcdGhhc2hfaXBtYWNcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBtYWMuYy0zNi1cbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwbWFyay5jPTMwPU1PRFVMRV9BTElBUyhcJiMzNDtpcF9zZXRfaGFzaDppcCxtYXJrXCYjMzQ7KTtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwbWFyay5jLTMyLS8qIFR5cGUgc3BlY2lmaWMgZnVuY3Rpb24gcHJlZml4ICovXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwbWFyay5jOjMzOiNkZWZpbmUgSFRZUEVcdFx0aGFzaF9pcG1hcmtcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBtYXJrLmMtMzQtI2RlZmluZSBJUF9TRVRfSEFTSF9XSVRIX01BUktNQVNLXG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcHBvcnQuYz0zNT1NT0RVTEVfQUxJQVMoXCYjMzQ7aXBfc2V0X2hhc2g6aXAscG9ydFwmIzM0Oyk7XG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcHBvcnQuYy0zNy0vKiBUeXBlIHNwZWNpZmljIGZ1bmN0aW9uIHByZWZpeCAqL1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcHBvcnQuYzozODojZGVmaW5lIEhUWVBFXHRcdGhhc2hfaXBwb3J0XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwcG9ydC5jLTM5LSNkZWZpbmUgSVBfU0VUX0hBU0hfV0lUSF9ORVRNQVNLXG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcHBvcnRpcC5jPTM0PU1PRFVMRV9BTElBUyhcJiMzNDtpcF9zZXRfaGFzaDppcCxwb3J0LGlwXCYjMzQ7KTtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwcG9ydGlwLmMtMzYtLyogVHlwZSBzcGVjaWZpYyBmdW5jdGlvbiBwcmVmaXggKi9cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0aXAuYzozNzojZGVmaW5lIEhUWVBFXHRcdGhhc2hfaXBwb3J0aXBcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0aXAuYy0zOC1cbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwcG9ydG5ldC5jPTM2PU1PRFVMRV9BTElBUyhcJiMzNDtpcF9zZXRfaGFzaDppcCxwb3J0LG5ldFwmIzM0Oyk7XG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcHBvcnRuZXQuYy0zOC0vKiBUeXBlIHNwZWNpZmljIGZ1bmN0aW9uIHByZWZpeCAqL1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcHBvcnRuZXQuYzozOTojZGVmaW5lIEhUWVBFXHRcdGhhc2hfaXBwb3J0bmV0XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwcG9ydG5ldC5jLTQwLVxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbWFjLmM9MjU9TU9EVUxFX0FMSUFTKFwmIzM0O2lwX3NldF9oYXNoOm1hY1wmIzM0Oyk7XG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9tYWMuYy0yNy0vKiBUeXBlIHNwZWNpZmljIGZ1bmN0aW9uIHByZWZpeCAqL1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9tYWMuYzoyODojZGVmaW5lIEhUWVBFXHRcdGhhc2hfbWFjXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX21hYy5jLTI5LVxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0LmM9MzM9TU9EVUxFX0FMSUFTKFwmIzM0O2lwX3NldF9oYXNoOm5ldFwmIzM0Oyk7XG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXQuYy0zNS0vKiBUeXBlIHNwZWNpZmljIGZ1bmN0aW9uIHByZWZpeCAqL1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXQuYzozNjojZGVmaW5lIEhUWVBFXHRcdGhhc2hfbmV0XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldC5jLTM3LSNkZWZpbmUgSVBfU0VUX0hBU0hfV0lUSF9ORVRTXG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRpZmFjZS5jPTM1PU1PRFVMRV9BTElBUyhcJiMzNDtpcF9zZXRfaGFzaDpuZXQsaWZhY2VcJiMzNDspO1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0aWZhY2UuYy0zNy0vKiBUeXBlIHNwZWNpZmljIGZ1bmN0aW9uIHByZWZpeCAqL1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRpZmFjZS5jOjM4OiNkZWZpbmUgSFRZUEVcdFx0aGFzaF9uZXRpZmFjZVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRpZmFjZS5jLTM5LSNkZWZpbmUgSVBfU0VUX0hBU0hfV0lUSF9ORVRTXG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRuZXQuYz0zMj1NT0RVTEVfQUxJQVMoXCYjMzQ7aXBfc2V0X2hhc2g6bmV0LG5ldFwmIzM0Oyk7XG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRuZXQuYy0zNC0vKiBUeXBlIHNwZWNpZmljIGZ1bmN0aW9uIHByZWZpeCAqL1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRuZXQuYzozNTojZGVmaW5lIEhUWVBFXHRcdGhhc2hfbmV0bmV0XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldG5ldC5jLTM2LSNkZWZpbmUgSVBfU0VUX0hBU0hfV0lUSF9ORVRTXG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRwb3J0LmM9MzU9TU9EVUxFX0FMSUFTKFwmIzM0O2lwX3NldF9oYXNoOm5ldCxwb3J0XCYjMzQ7KTtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldHBvcnQuYy0zNy0vKiBUeXBlIHNwZWNpZmljIGZ1bmN0aW9uIHByZWZpeCAqL1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRwb3J0LmM6Mzg6I2RlZmluZSBIVFlQRVx0XHRoYXNoX25ldHBvcnRcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0cG9ydC5jLTM5LSNkZWZpbmUgSVBfU0VUX0hBU0hfV0lUSF9QUk9UT1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0cG9ydG5ldC5jPTMyPU1PRFVMRV9BTElBUyhcJiMzNDtpcF9zZXRfaGFzaDpuZXQscG9ydCxuZXRcJiMzNDspO1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0cG9ydG5ldC5jLTM0LS8qIFR5cGUgc3BlY2lmaWMgZnVuY3Rpb24gcHJlZml4ICovXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldHBvcnRuZXQuYzozNTojZGVmaW5lIEhUWVBFXHRcdGhhc2hfbmV0cG9ydG5ldFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRwb3J0bmV0LmMtMzYtI2RlZmluZSBJUF9TRVRfSEFTSF9XSVRIX1BST1RPXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDE3OjAyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM5NjAyCgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMzE0MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGb2N1c2luZyBvbiBJUCBTZXQgSGFzaCBUYWJsZSBJbXBsZW1lbnRhdGlvbiBmb3IgRnV6emluZyoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBnb2FsIGlzIHRvIGNyYWZ0IGEgdGFyZ2V0ZWQgZnV6emluZyBjYW1wYWlnbiBmb3IgdGhlIHJlY2VudGx5IG1vZGlmaWVkIElQIHNldCBoYXNoIHRhYmxlIGltcGxlbWVudGF0aW9uLiBUaGUgY2hhbmdlcyByZXZvbHZlIGFyb3VuZCBob3cgQ0lEUiBuZXR3b3JrcyBhcmUgc3RvcmVkLCBzd2l0Y2hpbmcgdG8gYW4gUkNVLXByb3RlY3RlZCwgZHluYW1pY2FsbHkgYWxsb2NhdGVkIGFycmF5LiBUaGlzIGlzIGEgY3JpdGljYWwgZnVuY3Rpb25hbCBjaGFuZ2UgYW5kIEkgbmVlZCB0byBlbnN1cmUgdGhlIG5ldyBSQ1UgYW5kIGxvY2tpbmcgbG9naWMgZG9lc24mIzM5O3QgaW50cm9kdWNlIHZ1bG5lcmFiaWxpdGllcy4KCkZpcnN0LCBJIG5lZWQgdG8gaWRlbnRpZnkgdGhlIGtleSBmdW5jdGlvbnMgdG8gdGFyZ2V0LiBUaGUgaW5pdGlhbCBsaXN0IGluY2x1ZGVzIHRoZSBgX2NyZWF0ZWAgYW5kIGBNVFlQRWAgZnVuY3Rpb25zLiBIb3dldmVyLCB0byBhdm9pZCBvdmVyd2hlbG1pbmcgdGhlIGZ1enplciBhbmQgdG8gZm9jdXMgb24gdGhlIGNvcmUgbW9kaWZpY2F0aW9ucywgSSBuZWVkIGEgcmVwcmVzZW50YXRpdmUgc3Vic2V0LiBJIG5lZWQgdG8gaW5jbHVkZToKCiogICBDcmVhdGlvbiBmdW5jdGlvbnM6IGBoYXNoX25ldF9jcmVhdGVgLCBgaGFzaF9uZXRuZXRfY3JlYXRlYCwgZXRjLgoqICAgRnVuY3Rpb25zIHJlbGF0ZWQgdG8gY29yZSBvcGVyYXRpb25zIChgX2FkZGAsIGBfZGVsYCwgYF9yZXNpemVgLCBgX2djYCwgYF90ZXN0X2NpZHJzYCk6IGBoYXNoX25ldDRfYWRkYCwgYGhhc2hfbmV0NF9kZWxgLCBgaGFzaF9uZXQ0X3Rlc3RfY2lkcnNgLCBldGMuCiogICBBdXhpbGlhcnkgZnVuY3Rpb25zOiBgaGFzaF9uZXQ0X2FkZF9jaWRyYCwgYGhhc2hfbmV0NF9kZWxfY2lkcmAsIGBoYXNoX25ldDRfZmx1c2hgLCBgaGFzaF9uZXQ0X2Rlc3Ryb3lgLCBgaGFzaF9uZXQ0X2djX2RvYCwgYGhhc2hfbmV0NF91cmVmYAoKSSYjMzk7bSBmb2N1c2luZyBvbiB0aGVzZSBzcGVjaWZpYyBmdW5jdGlvbnMgYmVjYXVzZSB0aGUgY29yZSBsb2dpYywgcmVsYXRlZCB0byB0aGUgQ0lEUiBhcnJheSwgaXMgaW1wbGVtZW50ZWQgaW4gYG10eXBlX2FkZF9jaWRyYCwgYG10eXBlX2RlbF9jaWRyYCwgYG10eXBlX2ZsdXNoYCwgYG10eXBlX2FoYXNoX2Rlc3Ryb3lgLCBgbXR5cGVfZGVzdHJveWAsIGBtdHlwZV9nY19kb2AsIGBtdHlwZV9nY2AsIGBtdHlwZV9yZXNpemVgLCBgbXR5cGVfYWRkYCwgYG10eXBlX2RlbGAsIGBtdHlwZV90ZXN0X2NpZHJzYCwgYG10eXBlX3VyZWZgLCBhbmQgYF9jcmVhdGVgLiBUaGUgbG9naWMgaXMgZ2VuZXJhdGVkIGZyb20gbWFjcm9zIHNvIGNvdmVyaW5nIHRoZSBuZXQ0IG9uZXMgc2hvdWxkIGNvdmVyIG5ldDYgYW5kIG5ldG5ldDQsIGV0Yy4KCkkgbmVlZCB0byBtYWtlIHN1cmUgdGhhdCB0aGVzZSBmdW5jdGlvbnMgY2FuIGFjdHVhbGx5IGJlIHJlYWNoZWQgYnkgdGhlIGZ1enplci4gRnVuY3Rpb25zIHdob3NlIGFkZHJlc3NlcyBhcmUgdGFrZW4sIGVpdGhlciBkaXJlY3RseSBvciBpbmRpcmVjdGx5IChlLmcuLCB0aHJvdWdoIGZ1bmN0aW9uIHBvaW50ZXJzKSwgYXJlIGd1YXJhbnRlZWQgdG8gYmUgYXZhaWxhYmxlIGluIHRoZSBzeW1ib2wgdGFibGUuIFRoZXJlZm9yZSwgSSYjMzk7bGwgZmlsdGVyIHRoZSBsaXN0IGJhc2VkIG9uIHRoaXMgY3JpdGVyaWEuCgpBZnRlciB2ZXJpZnlpbmcgdGhpcywgSSB3aWxsIGluY2x1ZGU6CgoqICAgYGhhc2hfbmV0NF9hZGRgCiogICBgaGFzaF9uZXQ0X2RlbGAKKiAgIGBoYXNoX25ldDRfdGVzdGAKKiAgIGBoYXNoX25ldDRfcmVzaXplYAoqICAgYGhhc2hfbmV0NF9nY2AKKiAgIGBoYXNoX25ldDRfZmx1c2hgCiogICBgaGFzaF9uZXQ0X2Rlc3Ryb3lgCiogICBgaGFzaF9uZXQ0X3VyZWZgCiogICBgaGFzaF9uZXRfY3JlYXRlYAoqICAgYGhhc2hfbmV0Nl9hZGRgCiogICBgaGFzaF9uZXQ2X2RlbGAKKiAgIGBoYXNoX25ldDZfdGVzdGAKKiAgIGBoYXNoX25ldDZfcmVzaXplYAoqICAgYGhhc2hfbmV0Nl9nY2AKKiAgIGBoYXNoX25ldDZfZmx1c2hgCiogICBgaGFzaF9uZXQ2X2Rlc3Ryb3lgCiogICBgaGFzaF9uZXQ2X3VyZWZgCiogICBgaGFzaF9uZXRuZXQ0X2FkZGAKKiAgIGBoYXNoX25ldG5ldDRfZGVsYAoqICAgYGhhc2hfbmV0bmV0NF9yZXNpemVgCiogICBgaGFzaF9uZXRuZXQ0X2djYAoqICAgYGhhc2hfbmV0bmV0X2NyZWF0ZWAKKiAgIGBoYXNoX25ldDRfa2FkdGAKKiAgIGBoYXNoX25ldDZfa2FkdGAKKiAgIGBoYXNoX25ldG5ldDRfa2FkdGAKKiAgIGBoYXNoX25ldG5ldDZfa2FkdGAKClRoaXMgc2hvdWxkIGdpdmUgZ29vZCBjb3ZlcmFnZSBvZiB0aGUgbW9kaWZpZWQgZnVuY3Rpb25hbGl0eSwgc2luY2UgdGhlIGNvcmUgY2hhbmdlcyBhcmUgaW4gdGhlIGBpcF9zZXRfaGFzaF9nZW4uaGAgZmlsZSwgYW5kIHRoZSBgLmNgIGZpbGVzIGp1c3QgY2FsbCB0aGUgbW9kaWZpZWQgbG9naWMuCgpOZXh0LCBJIG5lZWQgdG8gY29uZmlybSB0aGUgcmVsZXZhbnQgS2NvbmZpZyBvcHRpb25zOiBgTkVURklMVEVSYCwgYElQX1NFVGAsIGBJUF9TRVRfSEFTSF9ORVRgLCBgSVBfU0VUX0hBU0hfTkVUTkVUYCwgYW5kIHNvIG9uIGZvciB0aGUgdmFyaW91cyBoYXNoIHRhYmxlIHR5cGVzLiBJIHdpbGwgZW5hYmxlIHRoZXNlIGluIG15IGZ1enppbmcgZW52aXJvbm1lbnQuCgpGaW5hbGx5LCBJIHdpbGwgYW5hbHl6ZSB0aGUgcGF0Y2ggYWdhaW4gdG8gZW5zdXJlIHRoYXQgbm8gZnVydGhlciBmb2N1cyBzeW1ib2xzIG5lZWQgdG8gYmUgaW5jbHVkZWQuIFdpdGggdGhpcyBjYXJlZnVsbHkgY3JhZnRlZCBsaXN0LCBJJiMzOTttIGNvbmZpZGVudCB0aGF0IHRoZSBmdXp6ZXIgd2lsbCBiZSBhYmxlIHRvIGVmZmVjdGl2ZWx5IGV4ZXJjaXNlIHRoZSBuZXcgUkNVLWJhc2VkIENJRFIgbWFuYWdlbWVudCBhbmQgbG9ja2luZyBsb2dpYywgZXhwb3NpbmcgYW55IHBvdGVudGlhbCBpc3N1ZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDE3OjAzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2thZHQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0LmM9MTEyPXN0YXRpYyBpbnRcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0LmM6MTEzOmhhc2hfbmV0NF9rYWR0KHN0cnVjdCBpcF9zZXQgKnNldCwgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0LmMtMTE0LVx0ICAgICAgIGNvbnN0IHN0cnVjdCB4dF9hY3Rpb25fcGFyYW0gKnBhcixcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldC5jPTI4Nj1zdGF0aWMgaW50XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldC5jOjI4NzpoYXNoX25ldDZfa2FkdChzdHJ1Y3QgaXBfc2V0ICpzZXQsIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldC5jLTI4OC1cdCAgICAgICBjb25zdCBzdHJ1Y3QgeHRfYWN0aW9uX3BhcmFtICpwYXIsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDE3OjAzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQzOTY2CgkJCQkJCQlvdXRwdXQ6IDQ1NAoJCQkJCQkJdGhvdWdodHM6IDgwNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIGlwc2V0IEhhc2ggVGFibGUgSW1wbGVtZW50YXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgYGhhc2hfbmV0NF92YXJpYW50YCBzdHJ1Y3R1cmUgYW5kIGltbWVkaWF0ZWx5IGNvbmZpcm1pbmcgdGhhdCBgaGFzaF9uZXQ0X2thZHRgIGFuZCBgaGFzaF9uZXQ0X3VhZHRgIGFyZSBpbmRlZWQgcHJlc2VudC4gR29vZC4gVGhhdCYjMzk7cyB0aGUgYmFzZWxpbmUuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBhZGQgdGhlIGFuYWxvZ291cyBmdW5jdGlvbnMgZm9yIElQdjYgYW5kIG5ldC1uZXQgY29tYmluYXRpb25zLCBzbyBJJiMzOTtsbCBhZGQgYGhhc2hfbmV0Nl9rYWR0YCwgYGhhc2hfbmV0Nl91YWR0YCwgYGhhc2hfbmV0bmV0NF9rYWR0YCwgYW5kIGBoYXNoX25ldG5ldDRfdWFkdGAgdG8gdGhlIGxpc3QuIEkmIzM5O20gZXhwYW5kaW5nIHRoZSBzY29wZSB0byBjb3ZlciBJUHY2IGFuZCBuZXQtbmV0IHNjZW5hcmlvcy4KCk5vdywgbGV0JiMzOTtzIHRha2UgYSBsb29rIGF0IHRoZSBrZXkgc3ltYm9scyByZWxhdGVkIHRvIHRoZSBoYXNoIHRhYmxlIGZ1bmN0aW9uczogSSYjMzk7dmUgZ290IGEgY29tcHJlaGVuc2l2ZSBsaXN0IG9mIHRoZSBjb3JlIGZ1bmN0aW9ucywgaW5jbHVkaW5nIGFkZCwgZGVsZXRlLCB0ZXN0LCByZXNpemUsIGdhcmJhZ2UgY29sbGVjdGlvbiwgZmx1c2gsIGRlc3Ryb3ksIGFuZCB1cmVmIGZvciBJUHY0LiBJJiMzOTtsbCBuZWVkIHRvIHJlbWVtYmVyIHRvIGNoZWNrIGFsbCB0aGUgcmVsZXZhbnQgSVB2NiBhbmQgbmV0LW5ldCB2YXJpYW50cy4gVGhpcyBsb29rcyBsaWtlIGEgY29tcGxldGUgbGlzdCBmb3IgdGhlIGltbWVkaWF0ZSBhcmVhIG9mIGludGVyZXN0LiBUaGlzIGlzIGFsc28gdXNlZnVsIGZvciBjcmVhdGluZyBhIHRlc3Qgc3VpdGUuCgpUaGUgY29uZmlndXJhdGlvbiBvcHRpb25zIGFyZSBhbHNvIHVzZWZ1bCwgYW5kIEkmIzM5O20gbm90aW5nIHRoZSByZWxldmFudCBgTkVURklMVEVSYCwgYElQX1NFVGAsIGBJUF9TRVRfSEFTSF9ORVRgLCBgSVBfU0VUX0hBU0hfTkVUTkVUYCwgYW5kIHJlbGF0ZWQgaGFzaCB0eXBlcy4gVGhpcyBnaXZlcyBtZSBjb250ZXh0LgoKRnJvbSBhIGZ1bmN0aW9uYWwgcGVyc3BlY3RpdmUsIHRoZSBwYXRjaCBmdW5kYW1lbnRhbGx5IGFsdGVycyB0aGUgY29yZSBoYXNoIHRhYmxlIGltcGxlbWVudGF0aW9uIHdpdGhpbiB0aGUgbmV0ZmlsdGVyIGlwc2V0IG1vZHVsZSwgd2hpY2ggaXMgYSBrZXkgcGFydCBvZiB0aGUga2VybmVsJiMzOTtzIG5ldHdvcmsgbWFuYWdlbWVudC4gV2UmIzM5O3JlIGxvb2tpbmcgYXQgYSBzaGlmdCBmcm9tIGEgZml4ZWQtc2l6ZSBhcnJheSBmb3Igc3RvcmluZyBDSURSIG5ldHdvcmtzIHRvIGEgZHluYW1pY2FsbHkgYWxsb2NhdGVkLCBSQ1UtcHJvdGVjdGVkIGFycmF5LiBUaGUgcmVzaXppbmcgYW5kIGdhcmJhZ2UgY29sbGVjdGlvbiwgdGhlIGNlbnRyYWwga2VybmVsIGxvZ2ljLCBhcmUgYWxzbyBiZWluZyB1cGRhdGVkLiBUaGUgY2hhbmdlcyBpbnRyb2R1Y2VkIGFyZSBjcml0aWNhbCwgcG90ZW50aWFsbHkgaW1wYWN0aW5nIGEgcmFuZ2Ugb2YgY29yZSBrZXJuZWwgb3BlcmF0aW9ucywgaW5jbHVkaW5nIGxvY2tpbmcgYW5kIG1lbW9yeSBtYW5hZ2VtZW50LiBBbnkgY2hhbmdlIHRoaXMgZGVlcCBkZXNlcnZlcyBjYXJlZnVsIHNjcnV0aW55LCBhbmQgSSBtdXN0IGJlIHN1cmUgdG8gcmlnb3JvdXNseSBmdXp6IHRoaXMgdG8gdW5jb3ZlciBwb3RlbnRpYWwgaXNzdWVzIHJlbGF0ZWQgdG8gdXNlLWFmdGVyLWZyZWUgY29uZGl0aW9ucywgbWVtb3J5IGxlYWtzLCBhbmQgYW55IHJhY2UgY29uZGl0aW9ucyB0aGUgbmV3IFJDVSBhbmQgbG9ja2luZyBsb2dpYyBtaWdodCBpbnRyb2R1Y2UuIFRoZXNlIGFyZSAqY3JpdGljYWwqIGFyZWFzIHRvIHRlc3QuIEkgbmVlZCB0byBlbnN1cmUgdGhlIHJvYnVzdG5lc3MgYW5kIHNlY3VyaXR5IG9mIHRoZSBuZXcgaW1wbGVtZW50YXRpb24uCkkmIzM5O20gcmVhZHkgdG8gY2FsbCBgc2V0LXJlc3VsdHNgIG5vdy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMTc6MDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVEZJTFRFUiYjMzQ7LAogICAgJiMzNDtJUF9TRVQmIzM0OywKICAgICYjMzQ7SVBfU0VUX0hBU0hfTkVUJiMzNDssCiAgICAmIzM0O0lQX1NFVF9IQVNIX05FVE5FVCYjMzQ7LAogICAgJiMzNDtJUF9TRVRfSEFTSF9ORVRQT1JUJiMzNDssCiAgICAmIzM0O0lQX1NFVF9IQVNIX05FVElGQUNFJiMzNDssCiAgICAmIzM0O0lQX1NFVF9IQVNIX0lQUE9SVE5FVCYjMzQ7LAogICAgJiMzNDtJUF9TRVRfSEFTSF9ORVRQT1JUTkVUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aGFzaF9uZXQ0X2FkZCYjMzQ7LAogICAgJiMzNDtoYXNoX25ldDRfZGVsJiMzNDssCiAgICAmIzM0O2hhc2hfbmV0NF90ZXN0JiMzNDssCiAgICAmIzM0O2hhc2hfbmV0NF9yZXNpemUmIzM0OywKICAgICYjMzQ7aGFzaF9uZXQ0X2djJiMzNDssCiAgICAmIzM0O2hhc2hfbmV0NF9mbHVzaCYjMzQ7LAogICAgJiMzNDtoYXNoX25ldDRfZGVzdHJveSYjMzQ7LAogICAgJiMzNDtoYXNoX25ldDRfdXJlZiYjMzQ7LAogICAgJiMzNDtoYXNoX25ldDRfa2FkdCYjMzQ7LAogICAgJiMzNDtoYXNoX25ldDRfdWFkdCYjMzQ7LAogICAgJiMzNDtoYXNoX25ldF9jcmVhdGUmIzM0OywKICAgICYjMzQ7aGFzaF9uZXQ2X2FkZCYjMzQ7LAogICAgJiMzNDtoYXNoX25ldDZfZGVsJiMzNDssCiAgICAmIzM0O2hhc2hfbmV0Nl90ZXN0JiMzNDssCiAgICAmIzM0O2hhc2hfbmV0Nl9yZXNpemUmIzM0OywKICAgICYjMzQ7aGFzaF9uZXQ2X2djJiMzNDssCiAgICAmIzM0O2hhc2hfbmV0Nl9rYWR0JiMzNDssCiAgICAmIzM0O2hhc2hfbmV0Nl91YWR0JiMzNDssCiAgICAmIzM0O2hhc2hfbmV0bmV0NF9hZGQmIzM0OywKICAgICYjMzQ7aGFzaF9uZXRuZXQ0X3Jlc2l6ZSYjMzQ7LAogICAgJiMzNDtoYXNoX25ldG5ldDRfZ2MmIzM0OywKICAgICYjMzQ7aGFzaF9uZXRuZXQ0X2thZHQmIzM0OywKICAgICYjMzQ7aGFzaF9uZXRuZXQ0X3VhZHQmIzM0OywKICAgICYjMzQ7aGFzaF9uZXRuZXRfY3JlYXRlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjb3JlIGhhc2ggdGFibGUgaW1wbGVtZW50YXRpb24gZm9yIG5ldGZpbHRlciBpcHNldCAoc3BlY2lmaWNhbGx5IHRoZSBnZW5lcmljIGhhc2ggdHlwZXMgaW4gaXBfc2V0X2hhc2hfZ2VuLmgpLiBJdCBjaGFuZ2VzIGhvdyBDSURSIG5ldHdvcmtzIGFyZSBzdG9yZWQsIG1vdmluZyBmcm9tIGEgZml4ZWQtc2l6ZSBhcnJheSB0byBhbiBSQ1UtcHJvdGVjdGVkIGR5bmFtaWNhbGx5IGFsbG9jYXRlZCBhcnJheSwgYW5kIHVwZGF0ZXMgdGhlIHJlc2l6aW5nIGFuZCBnYXJiYWdlIGNvbGxlY3Rpb24gbG9naWMgdG8gdXNlIGEgbmV3IGxvY2sgYW5kIGEgYHJlc2l6aW5nYCBmbGFnLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljIGFuZCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSB0aGUgbmV3IFJDVSBhbmQgbG9ja2luZyBsb2dpYyBkb2VzbiYjMzk7dCBpbnRyb2R1Y2UgdXNlLWFmdGVyLWZyZWUsIG1lbW9yeSBsZWFrcywgb3IgcmFjZSBjb25kaXRpb25zLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtORVRGSUxURVImIzM0OywKICAgICYjMzQ7SVBfU0VUJiMzNDssCiAgICAmIzM0O0lQX1NFVF9IQVNIX05FVCYjMzQ7LAogICAgJiMzNDtJUF9TRVRfSEFTSF9ORVRORVQmIzM0OywKICAgICYjMzQ7SVBfU0VUX0hBU0hfTkVUUE9SVCYjMzQ7LAogICAgJiMzNDtJUF9TRVRfSEFTSF9ORVRJRkFDRSYjMzQ7LAogICAgJiMzNDtJUF9TRVRfSEFTSF9JUFBPUlRORVQmIzM0OywKICAgICYjMzQ7SVBfU0VUX0hBU0hfTkVUUE9SVE5FVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2hhc2hfbmV0NF9hZGQmIzM0OywKICAgICYjMzQ7aGFzaF9uZXQ0X2RlbCYjMzQ7LAogICAgJiMzNDtoYXNoX25ldDRfdGVzdCYjMzQ7LAogICAgJiMzNDtoYXNoX25ldDRfcmVzaXplJiMzNDssCiAgICAmIzM0O2hhc2hfbmV0NF9nYyYjMzQ7LAogICAgJiMzNDtoYXNoX25ldDRfZmx1c2gmIzM0OywKICAgICYjMzQ7aGFzaF9uZXQ0X2Rlc3Ryb3kmIzM0OywKICAgICYjMzQ7aGFzaF9uZXQ0X3VyZWYmIzM0OywKICAgICYjMzQ7aGFzaF9uZXQ0X2thZHQmIzM0OywKICAgICYjMzQ7aGFzaF9uZXQ0X3VhZHQmIzM0OywKICAgICYjMzQ7aGFzaF9uZXRfY3JlYXRlJiMzNDssCiAgICAmIzM0O2hhc2hfbmV0Nl9hZGQmIzM0OywKICAgICYjMzQ7aGFzaF9uZXQ2X2RlbCYjMzQ7LAogICAgJiMzNDtoYXNoX25ldDZfdGVzdCYjMzQ7LAogICAgJiMzNDtoYXNoX25ldDZfcmVzaXplJiMzNDssCiAgICAmIzM0O2hhc2hfbmV0Nl9nYyYjMzQ7LAogICAgJiMzNDtoYXNoX25ldDZfa2FkdCYjMzQ7LAogICAgJiMzNDtoYXNoX25ldDZfdWFkdCYjMzQ7LAogICAgJiMzNDtoYXNoX25ldG5ldDRfYWRkJiMzNDssCiAgICAmIzM0O2hhc2hfbmV0bmV0NF9yZXNpemUmIzM0OywKICAgICYjMzQ7aGFzaF9uZXRuZXQ0X2djJiMzNDssCiAgICAmIzM0O2hhc2hfbmV0bmV0NF9rYWR0JiMzNDssCiAgICAmIzM0O2hhc2hfbmV0bmV0NF91YWR0JiMzNDssCiAgICAmIzM0O2hhc2hfbmV0bmV0X2NyZWF0ZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgY29yZSBoYXNoIHRhYmxlIGltcGxlbWVudGF0aW9uIGZvciBuZXRmaWx0ZXIgaXBzZXQgKHNwZWNpZmljYWxseSB0aGUgZ2VuZXJpYyBoYXNoIHR5cGVzIGluIGlwX3NldF9oYXNoX2dlbi5oKS4gSXQgY2hhbmdlcyBob3cgQ0lEUiBuZXR3b3JrcyBhcmUgc3RvcmVkLCBtb3ZpbmcgZnJvbSBhIGZpeGVkLXNpemUgYXJyYXkgdG8gYW4gUkNVLXByb3RlY3RlZCBkeW5hbWljYWxseSBhbGxvY2F0ZWQgYXJyYXksIGFuZCB1cGRhdGVzIHRoZSByZXNpemluZyBhbmQgZ2FyYmFnZSBjb2xsZWN0aW9uIGxvZ2ljIHRvIHVzZSBhIG5ldyBsb2NrIGFuZCBhIGByZXNpemluZ2AgZmxhZy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRvIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYyBhbmQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgdGhlIG5ldyBSQ1UgYW5kIGxvY2tpbmcgbG9naWMgZG9lc24mIzM5O3QgaW50cm9kdWNlIHVzZS1hZnRlci1mcmVlLCBtZW1vcnkgbGVha3MsIG9yIHJhY2UgY29uZGl0aW9ucy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDE3OjAxOjE1Ljc0NDAwNTE5NFoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0NDU5MDg0OTQ3MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORVRGSUxURVJcIixcbiAgICBcIklQX1NFVFwiLFxuICAgIFwiSVBfU0VUX0hBU0hfTkVUXCIsXG4gICAgXCJJUF9TRVRfSEFTSF9ORVRORVRcIixcbiAgICBcIklQX1NFVF9IQVNIX05FVFBPUlRcIixcbiAgICBcIklQX1NFVF9IQVNIX05FVElGQUNFXCIsXG4gICAgXCJJUF9TRVRfSEFTSF9JUFBPUlRORVRcIixcbiAgICBcIklQX1NFVF9IQVNIX05FVFBPUlRORVRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJoYXNoX25ldDRfYWRkXCIsXG4gICAgXCJoYXNoX25ldDRfZGVsXCIsXG4gICAgXCJoYXNoX25ldDRfdGVzdFwiLFxuICAgIFwiaGFzaF9uZXQ0X3Jlc2l6ZVwiLFxuICAgIFwiaGFzaF9uZXQ0X2djXCIsXG4gICAgXCJoYXNoX25ldDRfZmx1c2hcIixcbiAgICBcImhhc2hfbmV0NF9kZXN0cm95XCIsXG4gICAgXCJoYXNoX25ldDRfdXJlZlwiLFxuICAgIFwiaGFzaF9uZXQ0X2thZHRcIixcbiAgICBcImhhc2hfbmV0NF91YWR0XCIsXG4gICAgXCJoYXNoX25ldF9jcmVhdGVcIixcbiAgICBcImhhc2hfbmV0Nl9hZGRcIixcbiAgICBcImhhc2hfbmV0Nl9kZWxcIixcbiAgICBcImhhc2hfbmV0Nl90ZXN0XCIsXG4gICAgXCJoYXNoX25ldDZfcmVzaXplXCIsXG4gICAgXCJoYXNoX25ldDZfZ2NcIixcbiAgICBcImhhc2hfbmV0Nl9rYWR0XCIsXG4gICAgXCJoYXNoX25ldDZfdWFkdFwiLFxuICAgIFwiaGFzaF9uZXRuZXQ0X2FkZFwiLFxuICAgIFwiaGFzaF9uZXRuZXQ0X3Jlc2l6ZVwiLFxuICAgIFwiaGFzaF9uZXRuZXQ0X2djXCIsXG4gICAgXCJoYXNoX25ldG5ldDRfa2FkdFwiLFxuICAgIFwiaGFzaF9uZXRuZXQ0X3VhZHRcIixcbiAgICBcImhhc2hfbmV0bmV0X2NyZWF0ZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjb3JlIGhhc2ggdGFibGUgaW1wbGVtZW50YXRpb24gZm9yIG5ldGZpbHRlciBpcHNldCAoc3BlY2lmaWNhbGx5IHRoZSBnZW5lcmljIGhhc2ggdHlwZXMgaW4gaXBfc2V0X2hhc2hfZ2VuLmgpLiBJdCBjaGFuZ2VzIGhvdyBDSURSIG5ldHdvcmtzIGFyZSBzdG9yZWQsIG1vdmluZyBmcm9tIGEgZml4ZWQtc2l6ZSBhcnJheSB0byBhbiBSQ1UtcHJvdGVjdGVkIGR5bmFtaWNhbGx5IGFsbG9jYXRlZCBhcnJheSwgYW5kIHVwZGF0ZXMgdGhlIHJlc2l6aW5nIGFuZCBnYXJiYWdlIGNvbGxlY3Rpb24gbG9naWMgdG8gdXNlIGEgbmV3IGxvY2sgYW5kIGEgYHJlc2l6aW5nYCBmbGFnLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljIGFuZCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSB0aGUgbmV3IFJDVSBhbmQgbG9ja2luZyBsb2dpYyBkb2Vzbid0IGludHJvZHVjZSB1c2UtYWZ0ZXItZnJlZSwgbWVtb3J5IGxlYWtzLCBvciByYWNlIGNvbmRpdGlvbnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDE3OjAxOjE1Ljc0NDAxMzA5NFoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDkzMzE1MTMyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgMGJmYzMzM2VkYTYzNmNhYmMwZDFiNzU5MjRmZGRiMGJiYTUxOTA4MVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVGh1IEp1bCAyIDE3OjAxOjE0IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmggYi9uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oXFxuaW5kZXggZGVkZjU5YjY2MWRkZjMuLjJiNDczYWNhZDUwY2I4IDEwMDY0NFxcbi0tLSBhL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmhcXG4rKysgYi9uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oXFxuQEAgLTc1LDE1ICs3NSwxNyBAQCBzdHJ1Y3QgaGJ1Y2tldCB7XFxuIHN0cnVjdCBodGFibGVfZ2Mge1xcbiBcXHRzdHJ1Y3QgZGVsYXllZF93b3JrIGR3b3JrO1xcbiBcXHRzdHJ1Y3QgaXBfc2V0ICpzZXQ7XFx0LyogU2V0IHRoZSBnYyBiZWxvbmdzIHRvICovXFxuK1xcdHNwaW5sb2NrX3QgbG9jaztcXHQvKiBMb2NrIHRvIGV4Y2x1ZGUgZ2MgYW5kIHJlc2l6ZSAqL1xcbiBcXHR1MzIgcmVnaW9uO1xcdFxcdC8qIExhc3QgZ2MgcnVuIHBvc2l0aW9uICovXFxuIH07XFxuIFxcbiAvKiBUaGUgaGFzaCB0YWJsZTogdGhlIHRhYmxlIHNpemUgc3RvcmVkIGhlcmUgaW4gb3JkZXIgdG8gbWFrZSByZXNpemluZyBlYXN5ICovXFxuIHN0cnVjdCBodGFibGUge1xcbi1cXHRhdG9taWNfdCByZWY7XFx0XFx0LyogUmVmZXJlbmNlcyBmb3IgcmVzaXppbmcgKi9cXG4rXFx0Ym9vbCByZXNpemluZztcXHRcXHQvKiBNYXJrIG9uZ29pbmcgcmVzaXplICovXFxuIFxcdGF0b21pY190IHVyZWY7XFx0XFx0LyogUmVmZXJlbmNlcyBmb3IgZHVtcGluZyBhbmQgZ2MgKi9cXG4gXFx0dTggaHRhYmxlX2JpdHM7XFx0XFx0Lyogc2l6ZSBvZiBoYXNoIHRhYmxlID09IDJeaHRhYmxlX2JpdHMgKi9cXG4gXFx0dTMyIG1heGVsZW07XFx0XFx0LyogTWF4ZWxlbSBwZXIgcmVnaW9uICovXFxuK1xcdHN0cnVjdCBsaXN0X2hlYWQgYWQ7XFx0LyogUmVzaXplIGFkZHxkZWwgYmFja2xpc3QgKi9cXG4gXFx0c3RydWN0IGlwX3NldF9yZWdpb24gKmhyZWdpb247XFx0LyogUmVnaW9uIGxvY2tzIGFuZCBleHQgc2l6ZXMgKi9cXG4gXFx0c3RydWN0IGhidWNrZXQgX19yY3UgKmJ1Y2tldFtdOyAvKiBoYXNodGFibGUgYnVja2V0cyAqL1xcbiB9O1xcbkBAIC05Nyw5ICs5OSwxNiBAQCBzdHJ1Y3QgaHRhYmxlIHtcXG4gI2VuZGlmXFxuIFxcbiAvKiBCb29rLWtlZXBpbmcgb2YgdGhlIHByZWZpeGVzIGFkZGVkIHRvIHRoZSBzZXQgKi9cXG4rc3RydWN0IG5ldF9wcmVmaXgge1xcbitcXHR1OCBjaWRyO1xcdFxcdFxcdC8qIHRoZSBjaWRyIHZhbHVlICovXFxuK1xcdHUzMiBjb3VudDtcXHRcXHRcXHQvKiBudW1iZXIgb2YgZWxlbWVudHMgb2YgdGhpcyBjaWRyICovXFxuK307XFxuK1xcbiBzdHJ1Y3QgbmV0X3ByZWZpeGVzIHtcXG4tXFx0dTMyIG5ldHNbSVBTRVRfTkVUX0NPVU5UXTsgLyogbnVtYmVyIG9mIGVsZW1lbnRzIGZvciB0aGlzIGNpZHIgKi9cXG4tXFx0dTggY2lkcltJUFNFVF9ORVRfQ09VTlRdOyAgLyogdGhlIGNpZHIgdmFsdWUgKi9cXG4rXFx0c3RydWN0IHJjdV9oZWFkIHJjdTtcXG4rXFx0dTggbGVuO1xcbitcXHRzdHJ1Y3QgbmV0X3ByZWZpeCBuZXRzW11cXG4rXFx0XFx0X19hbGlnbmVkKF9fYWxpZ25vZl9fKHU2NCkpO1xcbiB9O1xcbiBcXG4gLyogQ29tcHV0ZSB0aGUgaGFzaCB0YWJsZSBzaXplICovXFxuQEAgLTEyNSwxMSArMTM0LDYgQEAgaHRhYmxlX3NpemUodTggaGJpdHMpXFxuICNlbHNlXFxuICNkZWZpbmUgX19DSURSKGNpZHIsIGkpXFx0XFx0KGNpZHIpXFxuICNlbmRpZlxcbi1cXG4tLyogY2lkciArIDEgaXMgc3RvcmVkIGluIG5ldF9wcmVmaXhlcyB0byBzdXBwb3J0IC8wICovXFxuLSNkZWZpbmUgTkNJRFJfUFVUKGNpZHIpXFx0XFx0KChjaWRyKSArIDEpXFxuLSNkZWZpbmUgTkNJRFJfR0VUKGNpZHIpXFx0XFx0KChjaWRyKSAtIDEpXFxuLVxcbiAjaWZkZWYgSVBfU0VUX0hBU0hfV0lUSF9ORVRTX1BBQ0tFRFxcbiAvKiBXaGVuIGNpZHIgaXMgcGFja2VkIHdpdGggbm9tYXRjaCwgY2lkciAtIDEgaXMgc3RvcmVkIGluIHRoZSBkYXRhIGVudHJ5ICovXFxuICNkZWZpbmUgRENJRFJfUFVUKGNpZHIpXFx0XFx0KChjaWRyKSAtIDEpXFxuQEAgLTEzOSwyMSArMTQzLDkgQEAgaHRhYmxlX3NpemUodTggaGJpdHMpXFxuICNkZWZpbmUgRENJRFJfR0VUKGNpZHIsIGkpXFx0X19DSURSKGNpZHIsIGkpXFxuICNlbmRpZlxcbiBcXG4tI2RlZmluZSBJTklUX0NJRFIoY2lkciwgaG9zdF9tYXNrKVxcdFxcXFxcXG4tXFx0RENJRFJfUFVUKCgoY2lkcikgPyBOQ0lEUl9HRVQoY2lkcikgOiBob3N0X21hc2spKVxcbisjZGVmaW5lIElOSVRfQ0lEUihuLCBob3N0X21hc2spXFx0XFxcXFxcbitcXHREQ0lEUl9QVVQoKG4pLVxcdTAwM2VsZW4gPyAobiktXFx1MDAzZW5ldHNbMF0uY2lkciA6IGhvc3RfbWFzaylcXG4gXFxuLSNpZmRlZiBJUF9TRVRfSEFTSF9XSVRIX05FVDBcXG4tLyogY2lkciBmcm9tIDAgdG8gSE9TVF9NQVNLIHZhbHVlIGFuZCBjID0gY2lkciArIDEgKi9cXG4tI2RlZmluZSBOTEVOXFx0XFx0XFx0KEhPU1RfTUFTSyArIDEpXFxuLSNkZWZpbmUgQ0lEUl9QT1MoYylcXHRcXHQoKGMpIC0gMSlcXG4tI2Vsc2VcXG4tLyogY2lkciBmcm9tIDEgdG8gSE9TVF9NQVNLIHZhbHVlIGFuZCBjID0gY2lkciArIDEgKi9cXG4tI2RlZmluZSBOTEVOXFx0XFx0XFx0SE9TVF9NQVNLXFxuLSNkZWZpbmUgQ0lEUl9QT1MoYylcXHRcXHQoKGMpIC0gMilcXG4tI2VuZGlmXFxuLVxcbi0jZWxzZVxcbi0jZGVmaW5lIE5MRU5cXHRcXHRcXHQwXFxuICNlbmRpZiAvKiBJUF9TRVRfSEFTSF9XSVRIX05FVFMgKi9cXG4gXFxuICNkZWZpbmUgU0VUX0VMRU1fRVhQSVJFRChzZXQsIGQpXFx0XFxcXFxcbkBAIC0yOTAsNiArMjgyLDcgQEAgc3RhdGljIGNvbnN0IHVuaW9uIG5mX2luZXRfYWRkciB6ZXJvbWFzayA9IHt9O1xcbiAvKiBUaGUgZ2VuZXJpYyBoYXNoIHN0cnVjdHVyZSAqL1xcbiBzdHJ1Y3QgaHR5cGUge1xcbiBcXHRzdHJ1Y3QgaHRhYmxlIF9fcmN1ICp0YWJsZTsgLyogdGhlIGhhc2ggdGFibGUgKi9cXG4rXFx0c3RydWN0IG5ldF9wcmVmaXhlcyBfX3JjdSAqcm5ldHNbSVBTRVRfTkVUX0NPVU5UXTsgLyogY2lkciBwcmVmaXhlcyAqL1xcbiBcXHRzdHJ1Y3QgaHRhYmxlX2djIGdjO1xcdC8qIGdjIHdvcmtxdWV1ZSAqL1xcbiBcXHR1MzIgbWF4ZWxlbTtcXHRcXHQvKiBtYXggZWxlbWVudHMgaW4gdGhlIGhhc2ggKi9cXG4gXFx0dTMyIGluaXR2YWw7XFx0XFx0LyogcmFuZG9tIGpoYXNoIGluaXQgdmFsdWUgKi9cXG5AQCAtMzAxLDExICsyOTQsMTAgQEAgc3RydWN0IGh0eXBlIHtcXG4gXFx0dTggbmV0bWFzaztcXHRcXHQvKiBuZXRtYXNrIHZhbHVlIGZvciBzdWJuZXRzIHRvIHN0b3JlICovXFxuIFxcdHVuaW9uIG5mX2luZXRfYWRkciBiaXRtYXNrO1xcdC8qIHN0b3JlcyBiaXRtYXNrICovXFxuICNlbmRpZlxcbi1cXHRzdHJ1Y3QgbGlzdF9oZWFkIGFkO1xcdC8qIFJlc2l6ZSBhZGR8ZGVsIGJhY2tsaXN0ICovXFxuK1xcdC8qIEJlY2F1c2UgJ25leHQnIGlzIElQdjQvSVB2NiBkZXBlbmRlbnQsIG5vIGVsZW1lbnRzIG9mIHRoaXNcXG4rXFx0ICogc3RydWN0dXJlIGFuZCByZWZlcnJlZCBpbiBjcmVhdGUoKSBtYXkgY29tZSBhZnRlciAnbmV4dCcuXFxuK1xcdCAqL1xcbiBcXHRzdHJ1Y3QgbXR5cGVfZWxlbSBuZXh0OyAvKiB0ZW1wb3Jhcnkgc3RvcmFnZSBmb3IgdWFkZCAqL1xcbi0jaWZkZWYgSVBfU0VUX0hBU0hfV0lUSF9ORVRTXFxuLVxcdHN0cnVjdCBuZXRfcHJlZml4ZXMgbmV0c1tOTEVOXTsgLyogYm9vay1rZWVwaW5nIG9mIHByZWZpeGVzICovXFxuLSNlbmRpZlxcbiB9O1xcbiBcXG4gLyogQUREfERFTCBlbnRyaWVzIHNhdmVkIGR1cmluZyByZXNpemUgKi9cXG5AQCAtMzIyLDUwICszMTQsODggQEAgc3RydWN0IG10eXBlX3Jlc2l6ZV9hZCB7XFxuIC8qIE5ldHdvcmsgY2lkciBzaXplIGJvb2sga2VlcGluZyB3aGVuIHRoZSBoYXNoIHN0b3JlcyBkaWZmZXJlbnRcXG4gICogc2l6ZWQgbmV0d29ya3MuIGNpZHIgPT0gcmVhbCBjaWRyICsgMSB0byBzdXBwb3J0IC8wLlxcbiAgKi9cXG4tc3RhdGljIHZvaWRcXG4rc3RhdGljIGludFxcbiBtdHlwZV9hZGRfY2lkcihzdHJ1Y3QgaXBfc2V0ICpzZXQsIHN0cnVjdCBodHlwZSAqaCwgdTggY2lkciwgdTggbilcXG4ge1xcbi1cXHRpbnQgaSwgajtcXG4rXFx0c3RydWN0IG5ldF9wcmVmaXhlcyAqbmV0cywgKnRtcDtcXG4rXFx0aW50IGksIGosIGZvdW5kLCBsZW4gPSAwLCByZXQgPSAwO1xcbiBcXG4gXFx0c3Bpbl9sb2NrX2JoKFxcdTAwMjZzZXQtXFx1MDAzZWxvY2spO1xcbitcXHRuZXRzID0gX19pcHNldF9kZXJlZmVyZW5jZShoLVxcdTAwM2VybmV0c1tuXSk7XFxuIFxcdC8qIEFkZCBpbiBpbmNyZWFzaW5nIHByZWZpeCBvcmRlciwgc28gbGFyZ2VyIGNpZHIgZmlyc3QgKi9cXG4tXFx0Zm9yIChpID0gMCwgaiA9IC0xOyBpIFxcdTAwM2MgTkxFTiBcXHUwMDI2XFx1MDAyNiBoLVxcdTAwM2VuZXRzW2ldLmNpZHJbbl07IGkrKykge1xcbi1cXHRcXHRpZiAoaiAhPSAtMSkge1xcbitcXHRmb3IgKGkgPSAwLCBmb3VuZCA9IC0xOyBpIFxcdTAwM2MgbmV0cy1cXHUwMDNlbGVuOyBpKyspIHtcXG4rXFx0XFx0aWYgKG5ldHMtXFx1MDAzZW5ldHNbaV0uY291bnQpXFxuK1xcdFxcdFxcdGxlbisrO1xcbitcXHRcXHRpZiAoZm91bmQgIT0gLTEpIHtcXG4gXFx0XFx0XFx0Y29udGludWU7XFxuLVxcdFxcdH0gZWxzZSBpZiAoaC1cXHUwMDNlbmV0c1tpXS5jaWRyW25dIFxcdTAwM2MgY2lkcikge1xcbi1cXHRcXHRcXHRqID0gaTtcXG4tXFx0XFx0fSBlbHNlIGlmIChoLVxcdTAwM2VuZXRzW2ldLmNpZHJbbl0gPT0gY2lkcikge1xcbi1cXHRcXHRcXHRoLVxcdTAwM2VuZXRzW0NJRFJfUE9TKGNpZHIpXS5uZXRzW25dKys7XFxuK1xcdFxcdH0gZWxzZSBpZiAobmV0cy1cXHUwMDNlbmV0c1tpXS5jaWRyIFxcdTAwM2MgY2lkcikge1xcbitcXHRcXHRcXHRmb3VuZCA9IGk7XFxuK1xcdFxcdH0gZWxzZSBpZiAobmV0cy1cXHUwMDNlbmV0c1tpXS5jaWRyID09IGNpZHIpIHtcXG4rXFx0XFx0XFx0bmV0cy1cXHUwMDNlbmV0c1tpXS5jb3VudCsrO1xcbiBcXHRcXHRcXHRnb3RvIHVubG9jaztcXG4gXFx0XFx0fVxcbiBcXHR9XFxuLVxcdGlmIChqICE9IC0xKSB7XFxuLVxcdFxcdGZvciAoOyBpIFxcdTAwM2UgajsgaS0tKVxcbi1cXHRcXHRcXHRoLVxcdTAwM2VuZXRzW2ldLmNpZHJbbl0gPSBoLVxcdTAwM2VuZXRzW2kgLSAxXS5jaWRyW25dO1xcbitcXHRsZW4rKztcXG4rXFx0dG1wID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IG5ldF9wcmVmaXhlcykgK1xcbitcXHRcXHQgICAgICBsZW4gKiBzaXplb2Yoc3RydWN0IG5ldF9wcmVmaXgpLCBHRlBfQVRPTUlDKTtcXG4rXFx0aWYgKCF0bXApXFxuK1xcdFxcdHJldHVybiAtRU5PTUVNO1xcbitcXHR0bXAtXFx1MDAzZWxlbiA9IGxlbjtcXG4rXFx0Zm9yIChpID0gMCwgaiA9IDA7IGkgXFx1MDAzYyBuZXRzLVxcdTAwM2VsZW47IGkrKykge1xcbitcXHRcXHRpZiAoIW5ldHMtXFx1MDAzZW5ldHNbaV0uY291bnQpXFxuK1xcdFxcdFxcdGNvbnRpbnVlO1xcbitcXHRcXHRpZiAoaSA9PSBmb3VuZCkge1xcbitcXHRcXHRcXHR0bXAtXFx1MDAzZW5ldHNbal0uY2lkciA9IGNpZHI7XFxuK1xcdFxcdFxcdHRtcC1cXHUwMDNlbmV0c1tqKytdLmNvdW50ID0gMTtcXG4rXFx0XFx0fVxcbitcXHRcXHR0bXAtXFx1MDAzZW5ldHNbal0uY2lkciA9IG5ldHMtXFx1MDAzZW5ldHNbaV0uY2lkcjtcXG4rXFx0XFx0dG1wLVxcdTAwM2VuZXRzW2orK10uY291bnQgPSBuZXRzLVxcdTAwM2VuZXRzW2ldLmNvdW50O1xcbitcXHR9XFxuK1xcdGlmIChmb3VuZCA9PSAtMSkge1xcbitcXHRcXHR0bXAtXFx1MDAzZW5ldHNbal0uY2lkciA9IGNpZHI7XFxuK1xcdFxcdHRtcC1cXHUwMDNlbmV0c1tqXS5jb3VudCA9IDE7XFxuIFxcdH1cXG4tXFx0aC1cXHUwMDNlbmV0c1tpXS5jaWRyW25dID0gY2lkcjtcXG4tXFx0aC1cXHUwMDNlbmV0c1tDSURSX1BPUyhjaWRyKV0ubmV0c1tuXSA9IDE7XFxuK1xcdHJjdV9hc3NpZ25fcG9pbnRlcihoLVxcdTAwM2VybmV0c1tuXSwgdG1wKTtcXG4rXFx0a2ZyZWVfcmN1KG5ldHMsIHJjdSk7XFxuIHVubG9jazpcXG4gXFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNnNldC1cXHUwMDNlbG9jayk7XFxuK1xcdHJldHVybiByZXQ7XFxuIH1cXG4gXFxuIHN0YXRpYyB2b2lkXFxuIG10eXBlX2RlbF9jaWRyKHN0cnVjdCBpcF9zZXQgKnNldCwgc3RydWN0IGh0eXBlICpoLCB1OCBjaWRyLCB1OCBuKVxcbiB7XFxuLVxcdHU4IGksIGosIG5ldF9lbmQgPSBOTEVOIC0gMTtcXG4rXFx0c3RydWN0IG5ldF9wcmVmaXhlcyAqbmV0cywgKnRtcDtcXG4rXFx0dTggaSwgaiwgZm91bmQsIGxlbiA9IDA7XFxuIFxcbiBcXHRzcGluX2xvY2tfYmgoXFx1MDAyNnNldC1cXHUwMDNlbG9jayk7XFxuLVxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBOTEVOOyBpKyspIHtcXG4tXFx0XFx0aWYgKGgtXFx1MDAzZW5ldHNbaV0uY2lkcltuXSAhPSBjaWRyKVxcbi1cXHRcXHRcXHRjb250aW51ZTtcXG4tXFx0XFx0aC1cXHUwMDNlbmV0c1tDSURSX1BPUyhjaWRyKV0ubmV0c1tuXS0tO1xcbi1cXHRcXHRpZiAoaC1cXHUwMDNlbmV0c1tDSURSX1BPUyhjaWRyKV0ubmV0c1tuXSBcXHUwMDNlIDApXFxuLVxcdFxcdFxcdGdvdG8gdW5sb2NrO1xcbi1cXHRcXHRmb3IgKGogPSBpOyBqIFxcdTAwM2MgbmV0X2VuZCBcXHUwMDI2XFx1MDAyNiBoLVxcdTAwM2VuZXRzW2pdLmNpZHJbbl07IGorKylcXG4tXFx0XFx0XFx0aC1cXHUwMDNlbmV0c1tqXS5jaWRyW25dID0gaC1cXHUwMDNlbmV0c1tqICsgMV0uY2lkcltuXTtcXG4tXFx0XFx0aC1cXHUwMDNlbmV0c1tqXS5jaWRyW25dID0gMDtcXG4rXFx0bmV0cyA9IF9faXBzZXRfZGVyZWZlcmVuY2UoaC1cXHUwMDNlcm5ldHNbbl0pO1xcbitcXHRmb3IgKGkgPSAwLCBmb3VuZCA9IC0xOyBpIFxcdTAwM2MgbmV0cy1cXHUwMDNlbGVuOyBpKyspIHtcXG4rXFx0XFx0aWYgKG5ldHMtXFx1MDAzZW5ldHNbaV0uY291bnQpXFxuK1xcdFxcdFxcdGxlbisrO1xcbitcXHRcXHRpZiAobmV0cy1cXHUwMDNlbmV0c1tpXS5jaWRyID09IGNpZHIpXFxuK1xcdFxcdFxcdGZvdW5kID0gaTtcXG4rXFx0fVxcbitcXHRpZiAodW5saWtlbHkoZm91bmQgPT0gLTEpKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcdG5ldHMtXFx1MDAzZW5ldHNbZm91bmRdLmNvdW50LS07XFxuK1xcdGlmIChuZXRzLVxcdTAwM2VuZXRzW2ZvdW5kXS5jb3VudClcXG4gXFx0XFx0Z290byB1bmxvY2s7XFxuK1xcdGxlbi0tO1xcbitcXHR0bXAgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgbmV0X3ByZWZpeGVzKSArXFxuK1xcdFxcdCAgICAgIGxlbiAqIHNpemVvZihzdHJ1Y3QgbmV0X3ByZWZpeCksIEdGUF9BVE9NSUMpO1xcbitcXHRpZiAoIXRtcClcXG4rXFx0XFx0LyogTGVhdmUgYSBob2xlICovXFxuK1xcdFxcdHJldHVybjtcXG4rXFx0dG1wLVxcdTAwM2VsZW4gPSBsZW47XFxuK1xcdGZvciAoaSA9IDAsIGogPSAwOyBpIFxcdTAwM2MgbmV0cy1cXHUwMDNlbGVuOyBpKyspIHtcXG4rXFx0XFx0aWYgKCFuZXRzLVxcdTAwM2VuZXRzW2ldLmNvdW50IHx8IGkgPT0gZm91bmQpXFxuK1xcdFxcdFxcdGNvbnRpbnVlO1xcbitcXHRcXHR0bXAtXFx1MDAzZW5ldHNbal0uY2lkciA9IG5ldHMtXFx1MDAzZW5ldHNbaV0uY2lkcjtcXG4rXFx0XFx0dG1wLVxcdTAwM2VuZXRzW2orK10uY291bnQgPSBuZXRzLVxcdTAwM2VuZXRzW2ldLmNvdW50O1xcbiBcXHR9XFxuK1xcdHJjdV9hc3NpZ25fcG9pbnRlcihoLVxcdTAwM2VybmV0c1tuXSwgdG1wKTtcXG4rXFx0a2ZyZWVfcmN1KG5ldHMsIHJjdSk7XFxuIHVubG9jazpcXG4gXFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNnNldC1cXHUwMDNlbG9jayk7XFxuIH1cXG5AQCAtMzk4LDYgKzQyOCw5IEBAIHN0YXRpYyB2b2lkXFxuIG10eXBlX2ZsdXNoKHN0cnVjdCBpcF9zZXQgKnNldClcXG4ge1xcbiBcXHRzdHJ1Y3QgaHR5cGUgKmggPSBzZXQtXFx1MDAzZWRhdGE7XFxuKyNpZmRlZiBJUF9TRVRfSEFTSF9XSVRIX05FVFNcXG4rXFx0c3RydWN0IG5ldF9wcmVmaXhlcyAqbmV0cywgKnRtcDtcXG4rI2VuZGlmXFxuIFxcdHN0cnVjdCBodGFibGUgKnQ7XFxuIFxcdHN0cnVjdCBoYnVja2V0ICpuO1xcbiBcXHR1MzIgciwgaTtcXG5AQCAtNDIxLDcgKzQ1NCwxNyBAQCBtdHlwZV9mbHVzaChzdHJ1Y3QgaXBfc2V0ICpzZXQpXFxuIFxcdFxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZ0LVxcdTAwM2VocmVnaW9uW3JdLmxvY2spO1xcbiBcXHR9XFxuICNpZmRlZiBJUF9TRVRfSEFTSF9XSVRIX05FVFNcXG4tXFx0bWVtc2V0KGgtXFx1MDAzZW5ldHMsIDAsIHNpemVvZihoLVxcdTAwM2VuZXRzKSk7XFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBJUFNFVF9ORVRfQ09VTlQ7IGkrKykge1xcbitcXHRcXHRuZXRzID0gaXBzZXRfZGVyZWZlcmVuY2VfbmZubChoLVxcdTAwM2VybmV0c1tpXSk7XFxuK1xcdFxcdHRtcCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBuZXRfcHJlZml4ZXMpLCBHRlBfQVRPTUlDKTtcXG4rXFx0XFx0aWYgKCF0bXApIHtcXG4rXFx0XFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIG5ldHMtXFx1MDAzZWxlbjsgaSsrKVxcbitcXHRcXHRcXHRcXHRuZXRzLVxcdTAwM2VuZXRzW2ldLmNvdW50ID0gMDtcXG4rXFx0XFx0fSBlbHNlIHtcXG4rXFx0XFx0XFx0cmN1X2Fzc2lnbl9wb2ludGVyKGgtXFx1MDAzZXJuZXRzW2ldLCB0bXApO1xcbitcXHRcXHRcXHRrZnJlZV9yY3UobmV0cywgcmN1KTtcXG4rXFx0XFx0fVxcbitcXHR9XFxuICNlbmRpZlxcbiB9XFxuIFxcbkBAIC00MjksNiArNDcyLDkgQEAgbXR5cGVfZmx1c2goc3RydWN0IGlwX3NldCAqc2V0KVxcbiBzdGF0aWMgdm9pZFxcbiBtdHlwZV9haGFzaF9kZXN0cm95KHN0cnVjdCBpcF9zZXQgKnNldCwgc3RydWN0IGh0YWJsZSAqdCwgYm9vbCBleHRfZGVzdHJveSlcXG4ge1xcbisjaWZkZWYgSVBfU0VUX0hBU0hfV0lUSF9ORVRTXFxuK1xcdHN0cnVjdCBodHlwZSAqaCA9IHNldC1cXHUwMDNlZGF0YTtcXG4rI2VuZGlmXFxuIFxcdHN0cnVjdCBoYnVja2V0ICpuO1xcbiBcXHR1MzIgaTtcXG4gXFxuQEAgLTQ0Miw2ICs0ODgsMTEgQEAgbXR5cGVfYWhhc2hfZGVzdHJveShzdHJ1Y3QgaXBfc2V0ICpzZXQsIHN0cnVjdCBodGFibGUgKnQsIGJvb2wgZXh0X2Rlc3Ryb3kpXFxuIFxcdFxcdGtmcmVlKG4pO1xcbiBcXHR9XFxuIFxcbisjaWZkZWYgSVBfU0VUX0hBU0hfV0lUSF9ORVRTXFxuK1xcdGlmIChleHRfZGVzdHJveSlcXG4rXFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIElQU0VUX05FVF9DT1VOVDsgaSsrKVxcbitcXHRcXHRcXHRrZnJlZShoLVxcdTAwM2VybmV0c1tpXSk7XFxuKyNlbmRpZlxcbiBcXHRpcF9zZXRfZnJlZSh0LVxcdTAwM2VocmVnaW9uKTtcXG4gXFx0aXBfc2V0X2ZyZWUodCk7XFxuIH1cXG5AQCAtNDUxLDEzICs1MDIsMTQgQEAgc3RhdGljIHZvaWRcXG4gbXR5cGVfZGVzdHJveShzdHJ1Y3QgaXBfc2V0ICpzZXQpXFxuIHtcXG4gXFx0c3RydWN0IGh0eXBlICpoID0gc2V0LVxcdTAwM2VkYXRhO1xcbitcXHRzdHJ1Y3QgaHRhYmxlICp0ID0gKF9fZm9yY2Ugc3RydWN0IGh0YWJsZSAqKWgtXFx1MDAzZXRhYmxlO1xcbiBcXHRzdHJ1Y3QgbGlzdF9oZWFkICpsLCAqbHQ7XFxuIFxcbi1cXHRtdHlwZV9haGFzaF9kZXN0cm95KHNldCwgKF9fZm9yY2Ugc3RydWN0IGh0YWJsZSAqKWgtXFx1MDAzZXRhYmxlLCB0cnVlKTtcXG4tXFx0bGlzdF9mb3JfZWFjaF9zYWZlKGwsIGx0LCBcXHUwMDI2aC1cXHUwMDNlYWQpIHtcXG4rXFx0bGlzdF9mb3JfZWFjaF9zYWZlKGwsIGx0LCBcXHUwMDI2dC1cXHUwMDNlYWQpIHtcXG4gXFx0XFx0bGlzdF9kZWwobCk7XFxuIFxcdFxcdGtmcmVlKGwpO1xcbiBcXHR9XFxuK1xcdG10eXBlX2FoYXNoX2Rlc3Ryb3koc2V0LCB0LCB0cnVlKTtcXG4gXFx0a2ZyZWUoaCk7XFxuIFxcbiBcXHRzZXQtXFx1MDAzZWRhdGEgPSBOVUxMO1xcbkBAIC01MTQsOCArNTY2LDcgQEAgbXR5cGVfZ2NfZG8oc3RydWN0IGlwX3NldCAqc2V0LCBzdHJ1Y3QgaHR5cGUgKmgsIHN0cnVjdCBodGFibGUgKnQsIHUzMiByKVxcbiAjaWZkZWYgSVBfU0VUX0hBU0hfV0lUSF9ORVRTXFxuIFxcdFxcdFxcdGZvciAoayA9IDA7IGsgXFx1MDAzYyBJUFNFVF9ORVRfQ09VTlQ7IGsrKylcXG4gXFx0XFx0XFx0XFx0bXR5cGVfZGVsX2NpZHIoc2V0LCBoLFxcbi1cXHRcXHRcXHRcXHRcXHROQ0lEUl9QVVQoRENJRFJfR0VUKGRhdGEtXFx1MDAzZWNpZHIsIGspKSxcXG4tXFx0XFx0XFx0XFx0XFx0ayk7XFxuK1xcdFxcdFxcdFxcdFxcdERDSURSX0dFVChkYXRhLVxcdTAwM2VjaWRyLCBrKSwgayk7XFxuICNlbmRpZlxcbiBcXHRcXHRcXHR0LVxcdTAwM2VocmVnaW9uW3JdLmVsZW1lbnRzLS07XFxuIFxcdFxcdFxcdGlwX3NldF9leHRfZGVzdHJveShzZXQsIGRhdGEpO1xcbkBAIC01NjksOSArNjIwLDEwIEBAIG10eXBlX2djKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4gXFx0c2V0ID0gZ2MtXFx1MDAzZXNldDtcXG4gXFx0aCA9IHNldC1cXHUwMDNlZGF0YTtcXG4gXFxuLVxcdHNwaW5fbG9ja19iaChcXHUwMDI2c2V0LVxcdTAwM2Vsb2NrKTtcXG4tXFx0dCA9IGlwc2V0X2RlcmVmZXJlbmNlX3NldChoLVxcdTAwM2V0YWJsZSwgc2V0KTtcXG4rXFx0cmN1X3JlYWRfbG9ja19iaCgpO1xcbitcXHR0ID0gcmN1X2RlcmVmZXJlbmNlX2JoKGgtXFx1MDAzZXRhYmxlKTtcXG4gXFx0YXRvbWljX2luYyhcXHUwMDI2dC1cXHUwMDNldXJlZik7XFxuK1xcdHJjdV9yZWFkX3VubG9ja19iaCgpO1xcbiBcXHRudW1vZl9sb2NrcyA9IGFoYXNoX251bW9mX2xvY2tzKHQtXFx1MDAzZWh0YWJsZV9iaXRzKTtcXG4gXFx0ciA9IGdjLVxcdTAwM2VyZWdpb24rKztcXG4gXFx0aWYgKHIgXFx1MDAzZT0gbnVtb2ZfbG9ja3MpIHtcXG5AQCAtNTgwLDExICs2MzIsMTMgQEAgbXR5cGVfZ2Moc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbiBcXHRuZXh0X3J1biA9IChJUFNFVF9HQ19QRVJJT0Qoc2V0LVxcdTAwM2V0aW1lb3V0KSAqIEhaKSAvIG51bW9mX2xvY2tzO1xcbiBcXHRpZiAobmV4dF9ydW4gXFx1MDAzYyBIWi8xMClcXG4gXFx0XFx0bmV4dF9ydW4gPSBIWi8xMDtcXG4tXFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNnNldC1cXHUwMDNlbG9jayk7XFxuIFxcbi1cXHRtdHlwZV9nY19kbyhzZXQsIGgsIHQsIHIpO1xcbitcXHRzcGluX2xvY2tfYmgoXFx1MDAyNmdjLVxcdTAwM2Vsb2NrKTtcXG4rXFx0aWYgKCF0LVxcdTAwM2VyZXNpemluZylcXG4rXFx0XFx0bXR5cGVfZ2NfZG8oc2V0LCBoLCB0LCByKTtcXG4rXFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNmdjLVxcdTAwM2Vsb2NrKTtcXG4gXFxuLVxcdGlmIChhdG9taWNfZGVjX2FuZF90ZXN0KFxcdTAwMjZ0LVxcdTAwM2V1cmVmKSBcXHUwMDI2XFx1MDAyNiBhdG9taWNfcmVhZChcXHUwMDI2dC1cXHUwMDNlcmVmKSkge1xcbitcXHRpZiAoYXRvbWljX2RlY19hbmRfdGVzdChcXHUwMDI2dC1cXHUwMDNldXJlZikgXFx1MDAyNlxcdTAwMjYgdC1cXHUwMDNlcmVzaXppbmcpIHtcXG4gXFx0XFx0cHJfZGVidWcoXFxcIlRhYmxlIGRlc3Ryb3kgYWZ0ZXIgcmVzaXplIGJ5IGV4cGlyZTogJXBcXFxcblxcXCIsIHQpO1xcbiBcXHRcXHRtdHlwZV9haGFzaF9kZXN0cm95KHNldCwgdCwgZmFsc2UpO1xcbiBcXHR9XFxuQEAgLTY2OCwxNSArNzIyLDE4IEBAIG10eXBlX3Jlc2l6ZShzdHJ1Y3QgaXBfc2V0ICpzZXQsIGJvb2wgcmV0cmllZClcXG4gXFx0fVxcbiBcXHR0LVxcdTAwM2VodGFibGVfYml0cyA9IGh0YWJsZV9iaXRzO1xcbiBcXHR0LVxcdTAwM2VtYXhlbGVtID0gaC1cXHUwMDNlbWF4ZWxlbSAvIGFoYXNoX251bW9mX2xvY2tzKGh0YWJsZV9iaXRzKTtcXG4rXFx0SU5JVF9MSVNUX0hFQUQoXFx1MDAyNnQtXFx1MDAzZWFkKTtcXG4gXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIGFoYXNoX251bW9mX2xvY2tzKGh0YWJsZV9iaXRzKTsgaSsrKVxcbiBcXHRcXHRzcGluX2xvY2tfaW5pdChcXHUwMDI2dC1cXHUwMDNlaHJlZ2lvbltpXS5sb2NrKTtcXG4gXFxuIFxcdC8qIFRoZXJlIGNhbid0IGJlIGFub3RoZXIgcGFyYWxsZWwgcmVzaXppbmcsXFxuLVxcdCAqIGJ1dCBkdW1waW5nLCBnYywga2VybmVsIHNpZGUgYWRkL2RlbCBhcmUgcG9zc2libGVcXG4rXFx0ICogYnV0IGR1bXBpbmcgYW5kIGtlcm5lbCBzaWRlIGFkZC9kZWwgYXJlIHBvc3NpYmxlXFxuIFxcdCAqL1xcbiBcXHRvcmlnID0gaXBzZXRfZGVyZWZlcmVuY2VfYmhfbmZubChoLVxcdTAwM2V0YWJsZSk7XFxuLVxcdGF0b21pY19zZXQoXFx1MDAyNm9yaWctXFx1MDAzZXJlZiwgMSk7XFxuIFxcdGF0b21pY19pbmMoXFx1MDAyNm9yaWctXFx1MDAzZXVyZWYpO1xcbitcXHRzcGluX2xvY2tfYmgoXFx1MDAyNmgtXFx1MDAzZWdjLmxvY2spO1xcbitcXHRvcmlnLVxcdTAwM2VyZXNpemluZyA9IHRydWU7XFxuK1xcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZoLVxcdTAwM2VnYy5sb2NrKTtcXG4gXFx0cHJfZGVidWcoXFxcImF0dGVtcHQgdG8gcmVzaXplIHNldCAlcyBmcm9tICV1IHRvICV1LCB0ICVwXFxcXG5cXFwiLFxcbiBcXHRcXHQgc2V0LVxcdTAwM2VuYW1lLCBvcmlnLVxcdTAwM2VodGFibGVfYml0cywgaHRhYmxlX2JpdHMsIG9yaWcpO1xcbiBcXHRmb3IgKHIgPSAwOyByIFxcdTAwM2MgYWhhc2hfbnVtb2ZfbG9ja3Mob3JpZy1cXHUwMDNlaHRhYmxlX2JpdHMpOyByKyspIHtcXG5AQCAtNzY4LDcgKzgyNSw3IEBAIG10eXBlX3Jlc2l6ZShzdHJ1Y3QgaXBfc2V0ICpzZXQsIGJvb2wgcmV0cmllZClcXG4gXFx0ICogS2VybmVsLXNpZGUgYWRkIGNhbm5vdCB0cmlnZ2VyIGEgcmVzaXplIGFuZCB1c2Vyc3BhY2UgYWN0aW9uc1xcbiBcXHQgKiBhcmUgc2VyaWFsaXplZCBieSB0aGUgbXV0ZXguXFxuIFxcdCAqL1xcbi1cXHRsaXN0X2Zvcl9lYWNoX3NhZmUobCwgbHQsIFxcdTAwMjZoLVxcdTAwM2VhZCkge1xcbitcXHRsaXN0X2Zvcl9lYWNoX3NhZmUobCwgbHQsIFxcdTAwMjZvcmlnLVxcdTAwM2VhZCkge1xcbiBcXHRcXHR4ID0gbGlzdF9lbnRyeShsLCBzdHJ1Y3QgbXR5cGVfcmVzaXplX2FkLCBsaXN0KTtcXG4gXFx0XFx0aWYgKHgtXFx1MDAzZWFkID09IElQU0VUX0FERCkge1xcbiBcXHRcXHRcXHRtdHlwZV9hZGQoc2V0LCBcXHUwMDI2eC1cXHUwMDNlZCwgXFx1MDAyNngtXFx1MDAzZWV4dCwgXFx1MDAyNngtXFx1MDAzZW1leHQsIHgtXFx1MDAzZWZsYWdzKTtcXG5AQCAtNzkyLDExICs4NDksMjQgQEAgbXR5cGVfcmVzaXplKHN0cnVjdCBpcF9zZXQgKnNldCwgYm9vbCByZXRyaWVkKVxcbiBcXG4gY2xlYW51cDpcXG4gXFx0cmN1X3JlYWRfdW5sb2NrX2JoKCk7XFxuLVxcdGF0b21pY19zZXQoXFx1MDAyNm9yaWctXFx1MDAzZXJlZiwgMCk7XFxuK1xcdHNwaW5fbG9ja19iaChcXHUwMDI2aC1cXHUwMDNlZ2MubG9jayk7XFxuK1xcdG9yaWctXFx1MDAzZXJlc2l6aW5nID0gZmFsc2U7XFxuK1xcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZoLVxcdTAwM2VnYy5sb2NrKTtcXG4rXFx0LyogTWFrZSBzdXJlIHBhcmFsbGVsIHJlYWRlcnMgc2VlIHRoYXQgb3JpZy1cXHUwMDNlcmVzaXppbmcgaXMgZmFsc2VcXG4rXFx0ICogYmVmb3JlIHdlIGRlY3JlbWVudCB1cmVmICovXFxuK1xcdHN5bmNocm9uaXplX3JjdSgpO1xcbiBcXHRhdG9taWNfZGVjKFxcdTAwMjZvcmlnLVxcdTAwM2V1cmVmKTtcXG4gXFx0bXR5cGVfYWhhc2hfZGVzdHJveShzZXQsIHQsIGZhbHNlKTtcXG4gXFx0aWYgKHJldCA9PSAtRUFHQUlOKVxcbiBcXHRcXHRnb3RvIHJldHJ5O1xcbitcXG4rXFx0LyogQ2xlYW51cCB0aGUgYmFja2xvZyBvZiBBREQvREVMIGVsZW1lbnRzICovXFxuK1xcdHNwaW5fbG9ja19iaChcXHUwMDI2c2V0LVxcdTAwM2Vsb2NrKTtcXG4rXFx0bGlzdF9mb3JfZWFjaF9zYWZlKGwsIGx0LCBcXHUwMDI2b3JpZy1cXHUwMDNlYWQpIHtcXG4rXFx0XFx0bGlzdF9kZWwobCk7XFxuK1xcdFxcdGtmcmVlKGwpO1xcbitcXHR9XFxuK1xcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZzZXQtXFx1MDAzZWxvY2spO1xcbiBcXHRnb3RvIG91dDtcXG4gXFxuIGhid2FybjpcXG5AQCAtODYwLDE1ICs5MzAsMTMgQEAgbXR5cGVfYWRkKHN0cnVjdCBpcF9zZXQgKnNldCwgdm9pZCAqdmFsdWUsIGNvbnN0IHN0cnVjdCBpcF9zZXRfZXh0ICpleHQsXFxuIFxcdGtleSA9IEhLRVkodmFsdWUsIGgtXFx1MDAzZWluaXR2YWwsIHQtXFx1MDAzZWh0YWJsZV9iaXRzKTtcXG4gXFx0ciA9IGFoYXNoX3JlZ2lvbihrZXkpO1xcbiBcXHRhdG9taWNfaW5jKFxcdTAwMjZ0LVxcdTAwM2V1cmVmKTtcXG4rXFx0cmN1X3JlYWRfdW5sb2NrX2JoKCk7XFxuIFxcdGVsZW1lbnRzID0gdC1cXHUwMDNlaHJlZ2lvbltyXS5lbGVtZW50cztcXG4gXFx0bWF4ZWxlbSA9IHQtXFx1MDAzZW1heGVsZW07XFxuIFxcdGlmIChlbGVtZW50cyBcXHUwMDNlPSBtYXhlbGVtKSB7XFxuIFxcdFxcdHUzMiBlO1xcbi1cXHRcXHRpZiAoU0VUX1dJVEhfVElNRU9VVChzZXQpKSB7XFxuLVxcdFxcdFxcdHJjdV9yZWFkX3VubG9ja19iaCgpO1xcbitcXHRcXHRpZiAoU0VUX1dJVEhfVElNRU9VVChzZXQpKVxcbiBcXHRcXHRcXHRtdHlwZV9nY19kbyhzZXQsIGgsIHQsIHIpO1xcbi1cXHRcXHRcXHRyY3VfcmVhZF9sb2NrX2JoKCk7XFxuLVxcdFxcdH1cXG4gXFx0XFx0bWF4ZWxlbSA9IGgtXFx1MDAzZW1heGVsZW07XFxuIFxcdFxcdGVsZW1lbnRzID0gMDtcXG4gXFx0XFx0Zm9yIChlID0gMDsgZSBcXHUwMDNjIGFoYXNoX251bW9mX2xvY2tzKHQtXFx1MDAzZWh0YWJsZV9iaXRzKTsgZSsrKVxcbkBAIC04NzYsNyArOTQ0LDYgQEAgbXR5cGVfYWRkKHN0cnVjdCBpcF9zZXQgKnNldCwgdm9pZCAqdmFsdWUsIGNvbnN0IHN0cnVjdCBpcF9zZXRfZXh0ICpleHQsXFxuIFxcdFxcdGlmIChlbGVtZW50cyBcXHUwMDNlPSBtYXhlbGVtIFxcdTAwMjZcXHUwMDI2IFNFVF9XSVRIX0ZPUkNFQUREKHNldCkpXFxuIFxcdFxcdFxcdGZvcmNlYWRkID0gdHJ1ZTtcXG4gXFx0fVxcbi1cXHRyY3VfcmVhZF91bmxvY2tfYmgoKTtcXG4gXFxuIFxcdHNwaW5fbG9ja19iaChcXHUwMDI2dC1cXHUwMDNlaHJlZ2lvbltyXS5sb2NrKTtcXG4gXFx0biA9IHJjdV9kZXJlZmVyZW5jZV9iaChoYnVja2V0KHQsIGtleSkpO1xcbkBAIC05MjksOCArOTk2LDcgQEAgbXR5cGVfYWRkKHN0cnVjdCBpcF9zZXQgKnNldCwgdm9pZCAqdmFsdWUsIGNvbnN0IHN0cnVjdCBpcF9zZXRfZXh0ICpleHQsXFxuICNpZmRlZiBJUF9TRVRfSEFTSF9XSVRIX05FVFNcXG4gXFx0XFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIElQU0VUX05FVF9DT1VOVDsgaSsrKVxcbiBcXHRcXHRcXHRcXHRtdHlwZV9kZWxfY2lkcihzZXQsIGgsXFxuLVxcdFxcdFxcdFxcdFxcdE5DSURSX1BVVChEQ0lEUl9HRVQoZGF0YS1cXHUwMDNlY2lkciwgaSkpLFxcbi1cXHRcXHRcXHRcXHRcXHRpKTtcXG4rXFx0XFx0XFx0XFx0XFx0RENJRFJfR0VUKGRhdGEtXFx1MDAzZWNpZHIsIGkpLCBpKTtcXG4gI2VuZGlmXFxuIFxcdFxcdFxcdGlwX3NldF9leHRfZGVzdHJveShzZXQsIGRhdGEpO1xcbiBcXHRcXHRcXHR0LVxcdTAwM2VocmVnaW9uW3JdLmVsZW1lbnRzLS07XFxuQEAgLTk3NSw3ICsxMDQxLDcgQEAgbXR5cGVfYWRkKHN0cnVjdCBpcF9zZXQgKnNldCwgdm9pZCAqdmFsdWUsIGNvbnN0IHN0cnVjdCBpcF9zZXRfZXh0ICpleHQsXFxuIFxcdHQtXFx1MDAzZWhyZWdpb25bcl0uZWxlbWVudHMrKztcXG4gI2lmZGVmIElQX1NFVF9IQVNIX1dJVEhfTkVUU1xcbiBcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgSVBTRVRfTkVUX0NPVU5UOyBpKyspXFxuLVxcdFxcdG10eXBlX2FkZF9jaWRyKHNldCwgaCwgTkNJRFJfUFVUKERDSURSX0dFVChkLVxcdTAwM2VjaWRyLCBpKSksIGkpO1xcbitcXHRcXHRtdHlwZV9hZGRfY2lkcihzZXQsIGgsIERDSURSX0dFVChkLVxcdTAwM2VjaWRyLCBpKSwgaSk7XFxuICNlbmRpZlxcbiBcXHRtZW1jcHkoZGF0YSwgZCwgc2l6ZW9mKHN0cnVjdCBtdHlwZV9lbGVtKSk7XFxuIG92ZXJ3cml0ZV9leHRlbnNpb25zOlxcbkBAIC0xMDAzLDcgKzEwNjksNyBAQCBtdHlwZV9hZGQoc3RydWN0IGlwX3NldCAqc2V0LCB2b2lkICp2YWx1ZSwgY29uc3Qgc3RydWN0IGlwX3NldF9leHQgKmV4dCxcXG4gXFx0cmV0ID0gMDtcXG4gcmVzaXplOlxcbiBcXHRzcGluX3VubG9ja19iaChcXHUwMDI2dC1cXHUwMDNlaHJlZ2lvbltyXS5sb2NrKTtcXG4tXFx0aWYgKGF0b21pY19yZWFkKFxcdTAwMjZ0LVxcdTAwM2VyZWYpIFxcdTAwMjZcXHUwMDI2IGV4dC1cXHUwMDNldGFyZ2V0KSB7XFxuK1xcdGlmICh0LVxcdTAwM2VyZXNpemluZyBcXHUwMDI2XFx1MDAyNiBleHQgXFx1MDAyNlxcdTAwMjYgZXh0LVxcdTAwM2V0YXJnZXQpIHtcXG4gXFx0XFx0LyogUmVzaXplIGlzIGluIHByb2Nlc3MgYW5kIGtlcm5lbCBzaWRlIGFkZCwgc2F2ZSB2YWx1ZXMgKi9cXG4gXFx0XFx0c3RydWN0IG10eXBlX3Jlc2l6ZV9hZCAqeDtcXG4gXFxuQEAgLTEwMTcsNyArMTA4Myw3IEBAIG10eXBlX2FkZChzdHJ1Y3QgaXBfc2V0ICpzZXQsIHZvaWQgKnZhbHVlLCBjb25zdCBzdHJ1Y3QgaXBfc2V0X2V4dCAqZXh0LFxcbiBcXHRcXHRtZW1jcHkoXFx1MDAyNngtXFx1MDAzZW1leHQsIG1leHQsIHNpemVvZihzdHJ1Y3QgaXBfc2V0X2V4dCkpO1xcbiBcXHRcXHR4LVxcdTAwM2VmbGFncyA9IGZsYWdzO1xcbiBcXHRcXHRzcGluX2xvY2tfYmgoXFx1MDAyNnNldC1cXHUwMDNlbG9jayk7XFxuLVxcdFxcdGxpc3RfYWRkX3RhaWwoXFx1MDAyNngtXFx1MDAzZWxpc3QsIFxcdTAwMjZoLVxcdTAwM2VhZCk7XFxuK1xcdFxcdGxpc3RfYWRkX3RhaWwoXFx1MDAyNngtXFx1MDAzZWxpc3QsIFxcdTAwMjZ0LVxcdTAwM2VhZCk7XFxuIFxcdFxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZzZXQtXFx1MDAzZWxvY2spO1xcbiBcXHR9XFxuIFxcdGdvdG8gb3V0O1xcbkBAIC0xMDMwLDcgKzEwOTYsNyBAQCBtdHlwZV9hZGQoc3RydWN0IGlwX3NldCAqc2V0LCB2b2lkICp2YWx1ZSwgY29uc3Qgc3RydWN0IGlwX3NldF9leHQgKmV4dCxcXG4gdW5sb2NrOlxcbiBcXHRzcGluX3VubG9ja19iaChcXHUwMDI2dC1cXHUwMDNlaHJlZ2lvbltyXS5sb2NrKTtcXG4gb3V0Olxcbi1cXHRpZiAoYXRvbWljX2RlY19hbmRfdGVzdChcXHUwMDI2dC1cXHUwMDNldXJlZikgXFx1MDAyNlxcdTAwMjYgYXRvbWljX3JlYWQoXFx1MDAyNnQtXFx1MDAzZXJlZikpIHtcXG4rXFx0aWYgKGF0b21pY19kZWNfYW5kX3Rlc3QoXFx1MDAyNnQtXFx1MDAzZXVyZWYpIFxcdTAwMjZcXHUwMDI2IHQtXFx1MDAzZXJlc2l6aW5nKSB7XFxuIFxcdFxcdHByX2RlYnVnKFxcXCJUYWJsZSBkZXN0cm95IGFmdGVyIHJlc2l6ZSBieSBhZGQ6ICVwXFxcXG5cXFwiLCB0KTtcXG4gXFx0XFx0bXR5cGVfYWhhc2hfZGVzdHJveShzZXQsIHQsIGZhbHNlKTtcXG4gXFx0fVxcbkBAIC0xMDg5LDExICsxMTU1LDExIEBAIG10eXBlX2RlbChzdHJ1Y3QgaXBfc2V0ICpzZXQsIHZvaWQgKnZhbHVlLCBjb25zdCBzdHJ1Y3QgaXBfc2V0X2V4dCAqZXh0LFxcbiAjaWZkZWYgSVBfU0VUX0hBU0hfV0lUSF9ORVRTXFxuIFxcdFxcdGZvciAoaiA9IDA7IGogXFx1MDAzYyBJUFNFVF9ORVRfQ09VTlQ7IGorKylcXG4gXFx0XFx0XFx0bXR5cGVfZGVsX2NpZHIoc2V0LCBoLFxcbi1cXHRcXHRcXHRcXHQgICAgICAgTkNJRFJfUFVUKERDSURSX0dFVChkLVxcdTAwM2VjaWRyLCBqKSksIGopO1xcbitcXHRcXHRcXHRcXHREQ0lEUl9HRVQoZC1cXHUwMDNlY2lkciwgaiksIGopO1xcbiAjZW5kaWZcXG4gXFx0XFx0aXBfc2V0X2V4dF9kZXN0cm95KHNldCwgZGF0YSk7XFxuIFxcbi1cXHRcXHRpZiAoYXRvbWljX3JlYWQoXFx1MDAyNnQtXFx1MDAzZXJlZikgXFx1MDAyNlxcdTAwMjYgZXh0LVxcdTAwM2V0YXJnZXQpIHtcXG4rXFx0XFx0aWYgKHQtXFx1MDAzZXJlc2l6aW5nIFxcdTAwMjZcXHUwMDI2IGV4dCBcXHUwMDI2XFx1MDAyNiBleHQtXFx1MDAzZXRhcmdldCkge1xcbiBcXHRcXHRcXHQvKiBSZXNpemUgaXMgaW4gcHJvY2VzcyBhbmQga2VybmVsIHNpZGUgZGVsLFxcbiBcXHRcXHRcXHQgKiBzYXZlIHZhbHVlc1xcbiBcXHRcXHRcXHQgKi9cXG5AQCAtMTE0MSwxMCArMTIwNywxMCBAQCBtdHlwZV9kZWwoc3RydWN0IGlwX3NldCAqc2V0LCB2b2lkICp2YWx1ZSwgY29uc3Qgc3RydWN0IGlwX3NldF9leHQgKmV4dCxcXG4gXFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNnQtXFx1MDAzZWhyZWdpb25bcl0ubG9jayk7XFxuIFxcdGlmICh4KSB7XFxuIFxcdFxcdHNwaW5fbG9ja19iaChcXHUwMDI2c2V0LVxcdTAwM2Vsb2NrKTtcXG4tXFx0XFx0bGlzdF9hZGQoXFx1MDAyNngtXFx1MDAzZWxpc3QsIFxcdTAwMjZoLVxcdTAwM2VhZCk7XFxuK1xcdFxcdGxpc3RfYWRkKFxcdTAwMjZ4LVxcdTAwM2VsaXN0LCBcXHUwMDI2dC1cXHUwMDNlYWQpO1xcbiBcXHRcXHRzcGluX3VubG9ja19iaChcXHUwMDI2c2V0LVxcdTAwM2Vsb2NrKTtcXG4gXFx0fVxcbi1cXHRpZiAoYXRvbWljX2RlY19hbmRfdGVzdChcXHUwMDI2dC1cXHUwMDNldXJlZikgXFx1MDAyNlxcdTAwMjYgYXRvbWljX3JlYWQoXFx1MDAyNnQtXFx1MDAzZXJlZikpIHtcXG4rXFx0aWYgKGF0b21pY19kZWNfYW5kX3Rlc3QoXFx1MDAyNnQtXFx1MDAzZXVyZWYpIFxcdTAwMjZcXHUwMDI2IHQtXFx1MDAzZXJlc2l6aW5nKSB7XFxuIFxcdFxcdHByX2RlYnVnKFxcXCJUYWJsZSBkZXN0cm95IGFmdGVyIHJlc2l6ZSBieSBkZWw6ICVwXFxcXG5cXFwiLCB0KTtcXG4gXFx0XFx0bXR5cGVfYWhhc2hfZGVzdHJveShzZXQsIHQsIGZhbHNlKTtcXG4gXFx0fVxcbkBAIC0xMTcyLDI4ICsxMjM4LDM3IEBAIG10eXBlX3Rlc3RfY2lkcnMoc3RydWN0IGlwX3NldCAqc2V0LCBzdHJ1Y3QgbXR5cGVfZWxlbSAqZCxcXG4ge1xcbiBcXHRzdHJ1Y3QgaHR5cGUgKmggPSBzZXQtXFx1MDAzZWRhdGE7XFxuIFxcdHN0cnVjdCBodGFibGUgKnQgPSByY3VfZGVyZWZlcmVuY2VfYmgoaC1cXHUwMDNldGFibGUpO1xcbitcXHRzdHJ1Y3QgbmV0X3ByZWZpeGVzICpuZXRzMDtcXG4gXFx0c3RydWN0IGhidWNrZXQgKm47XFxuIFxcdHN0cnVjdCBtdHlwZV9lbGVtICpkYXRhO1xcbiAjaWYgSVBTRVRfTkVUX0NPVU5UID09IDJcXG4rXFx0c3RydWN0IG5ldF9wcmVmaXhlcyAqbmV0czE7XFxuIFxcdHN0cnVjdCBtdHlwZV9lbGVtIG9yaWcgPSAqZDtcXG4tXFx0aW50IHJldCwgaSwgaiA9IDAsIGs7XFxuK1xcdGludCByZXQsIGksIGosIGs7XFxuICNlbHNlXFxuLVxcdGludCByZXQsIGksIGogPSAwO1xcbitcXHRpbnQgcmV0LCBpLCBqO1xcbiAjZW5kaWZcXG4gXFx0dTMyIGtleSwgbXVsdGkgPSAwO1xcbiBcXHR1OCBwb3M7XFxuIFxcbiBcXHRwcl9kZWJ1ZyhcXFwidGVzdCBieSBuZXRzXFxcXG5cXFwiKTtcXG4tXFx0Zm9yICg7IGogXFx1MDAzYyBOTEVOIFxcdTAwMjZcXHUwMDI2IGgtXFx1MDAzZW5ldHNbal0uY2lkclswXSBcXHUwMDI2XFx1MDAyNiAhbXVsdGk7IGorKykge1xcbitcXHRyY3VfcmVhZF9sb2NrX2JoKCk7XFxuK1xcdG5ldHMwID0gcmN1X2RlcmVmZXJlbmNlX2JoKGgtXFx1MDAzZXJuZXRzWzBdKTtcXG4rI2lmIElQU0VUX05FVF9DT1VOVCA9PSAyXFxuK1xcdG5ldHMxID0gcmN1X2RlcmVmZXJlbmNlX2JoKGgtXFx1MDAzZXJuZXRzWzFdKTtcXG4rI2VuZGlmXFxuK1xcdGZvciAoaiA9IDA7IGogXFx1MDAzYyBuZXRzMC1cXHUwMDNlbGVuIFxcdTAwMjZcXHUwMDI2ICFtdWx0aTsgaisrKSB7XFxuK1xcdFxcdGlmICghbmV0czAtXFx1MDAzZW5ldHNbal0uY291bnQpXFxuK1xcdFxcdFxcdGNvbnRpbnVlO1xcbiAjaWYgSVBTRVRfTkVUX0NPVU5UID09IDJcXG4gXFx0XFx0bXR5cGVfZGF0YV9yZXNldF9lbGVtKGQsIFxcdTAwMjZvcmlnKTtcXG4tXFx0XFx0bXR5cGVfZGF0YV9uZXRtYXNrKGQsIE5DSURSX0dFVChoLVxcdTAwM2VuZXRzW2pdLmNpZHJbMF0pLCBmYWxzZSk7XFxuLVxcdFxcdGZvciAoayA9IDA7IGsgXFx1MDAzYyBOTEVOIFxcdTAwMjZcXHUwMDI2IGgtXFx1MDAzZW5ldHNba10uY2lkclsxXSBcXHUwMDI2XFx1MDAyNiAhbXVsdGk7XFxuLVxcdFxcdCAgICAgaysrKSB7XFxuLVxcdFxcdFxcdG10eXBlX2RhdGFfbmV0bWFzayhkLCBOQ0lEUl9HRVQoaC1cXHUwMDNlbmV0c1trXS5jaWRyWzFdKSxcXG4tXFx0XFx0XFx0XFx0XFx0ICAgdHJ1ZSk7XFxuK1xcdFxcdG10eXBlX2RhdGFfbmV0bWFzayhkLCBuZXRzMC1cXHUwMDNlbmV0c1tqXS5jaWRyLCBmYWxzZSk7XFxuK1xcdFxcdGZvciAoayA9IDA7IGsgXFx1MDAzYyBuZXRzMS1cXHUwMDNlbGVuIFxcdTAwMjZcXHUwMDI2ICFtdWx0aTsgaysrKSB7XFxuK1xcdFxcdFxcdGlmICghbmV0czEtXFx1MDAzZW5ldHNba10uY291bnQpXFxuK1xcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbitcXHRcXHRcXHRtdHlwZV9kYXRhX25ldG1hc2soZCwgbmV0czEtXFx1MDAzZW5ldHNba10uY2lkciwgdHJ1ZSk7XFxuICNlbHNlXFxuLVxcdFxcdG10eXBlX2RhdGFfbmV0bWFzayhkLCBOQ0lEUl9HRVQoaC1cXHUwMDNlbmV0c1tqXS5jaWRyWzBdKSk7XFxuK1xcdFxcdG10eXBlX2RhdGFfbmV0bWFzayhkLCBuZXRzMC1cXHUwMDNlbmV0c1tqXS5jaWRyKTtcXG4gI2VuZGlmXFxuIFxcdFxcdGtleSA9IEhLRVkoZCwgaC1cXHUwMDNlaW5pdHZhbCwgdC1cXHUwMDNlaHRhYmxlX2JpdHMpO1xcbiBcXHRcXHRuID0gcmN1X2RlcmVmZXJlbmNlX2JoKGhidWNrZXQodCwga2V5KSk7XFxuQEAgLTEyMDgsNyArMTI4Myw3IEBAIG10eXBlX3Rlc3RfY2lkcnMoc3RydWN0IGlwX3NldCAqc2V0LCBzdHJ1Y3QgbXR5cGVfZWxlbSAqZCxcXG4gXFx0XFx0XFx0XFx0Y29udGludWU7XFxuIFxcdFxcdFxcdHJldCA9IG10eXBlX2RhdGFfbWF0Y2goZGF0YSwgZXh0LCBtZXh0LCBzZXQsIGZsYWdzKTtcXG4gXFx0XFx0XFx0aWYgKHJldCAhPSAwKVxcbi1cXHRcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbitcXHRcXHRcXHRcXHRnb3RvIHVubG9jaztcXG4gI2lmZGVmIElQX1NFVF9IQVNIX1dJVEhfTVVMVElcXG4gXFx0XFx0XFx0LyogTm8gbWF0Y2gsIHJlc2V0IG11bHRpcGxlIG1hdGNoIGZsYWcgKi9cXG4gXFx0XFx0XFx0bXVsdGkgPSAwO1xcbkBAIC0xMjE4LDcgKzEyOTMsMTAgQEAgbXR5cGVfdGVzdF9jaWRycyhzdHJ1Y3QgaXBfc2V0ICpzZXQsIHN0cnVjdCBtdHlwZV9lbGVtICpkLFxcbiBcXHRcXHR9XFxuICNlbmRpZlxcbiBcXHR9XFxuLVxcdHJldHVybiAwO1xcbitcXHRyZXQgPSAwO1xcbit1bmxvY2s6XFxuK1xcdHJjdV9yZWFkX3VubG9ja19iaCgpO1xcbitcXHRyZXR1cm4gcmV0O1xcbiB9XFxuICNlbmRpZlxcbiBcXG5AQCAtMTM1Myw3ICsxNDMxLDcgQEAgbXR5cGVfdXJlZihzdHJ1Y3QgaXBfc2V0ICpzZXQsIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYiwgYm9vbCBzdGFydClcXG4gXFx0XFx0cmN1X3JlYWRfdW5sb2NrX2JoKCk7XFxuIFxcdH0gZWxzZSBpZiAoY2ItXFx1MDAzZWFyZ3NbSVBTRVRfQ0JfUFJJVkFURV0pIHtcXG4gXFx0XFx0dCA9IChzdHJ1Y3QgaHRhYmxlICopY2ItXFx1MDAzZWFyZ3NbSVBTRVRfQ0JfUFJJVkFURV07XFxuLVxcdFxcdGlmIChhdG9taWNfZGVjX2FuZF90ZXN0KFxcdTAwMjZ0LVxcdTAwM2V1cmVmKSBcXHUwMDI2XFx1MDAyNiBhdG9taWNfcmVhZChcXHUwMDI2dC1cXHUwMDNlcmVmKSkge1xcbitcXHRcXHRpZiAoYXRvbWljX2RlY19hbmRfdGVzdChcXHUwMDI2dC1cXHUwMDNldXJlZikgXFx1MDAyNlxcdTAwMjYgdC1cXHUwMDNlcmVzaXppbmcpIHtcXG4gXFx0XFx0XFx0cHJfZGVidWcoXFxcIlRhYmxlIGRlc3Ryb3kgYWZ0ZXIgcmVzaXplIFxcXCJcXG4gXFx0XFx0XFx0XFx0IFxcXCIgYnkgZHVtcDogJXBcXFxcblxcXCIsIHQpO1xcbiBcXHRcXHRcXHRtdHlwZV9haGFzaF9kZXN0cm95KHNldCwgdCwgZmFsc2UpO1xcbkBAIC0xNDgzLDYgKzE1NjEsOSBAQCBJUFNFVF9UT0tFTihIVFlQRSwgX2NyZWF0ZSkoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgaXBfc2V0ICpzZXQsXFxuIFxcdGludCByZXQgX19hdHRyaWJ1dGVfXygodW51c2VkKSkgPSAwO1xcbiBcXHR1OCBuZXRtYXNrID0gc2V0LVxcdTAwM2VmYW1pbHkgPT0gTkZQUk9UT19JUFY0ID8gMzIgOiAxMjg7XFxuIFxcdHVuaW9uIG5mX2luZXRfYWRkciBiaXRtYXNrID0gb25lc21hc2s7XFxuKyNlbmRpZlxcbisjaWZkZWYgSVBfU0VUX0hBU0hfV0lUSF9ORVRTXFxuK1xcdHN0cnVjdCBuZXRfcHJlZml4ZXMgKm5ldHM7XFxuICNlbmRpZlxcbiBcXHRzaXplX3QgaHNpemU7XFxuIFxcdHN0cnVjdCBodHlwZSAqaDtcXG5AQCAtMTU2Niw3ICsxNjQ3LDEzIEBAIElQU0VUX1RPS0VOKEhUWVBFLCBfY3JlYXRlKShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBpcF9zZXQgKnNldCxcXG4gXFx0aWYgKHRiW0lQU0VUX0FUVFJfTUFYRUxFTV0pXFxuIFxcdFxcdG1heGVsZW0gPSBpcF9zZXRfZ2V0X2gzMih0YltJUFNFVF9BVFRSX01BWEVMRU1dKTtcXG4gXFxuLVxcdGhzaXplID0gc2l6ZW9mKCpoKTtcXG4rI2lmZGVmIElQX1NFVF9QUk9UT19VTkRFRlxcbitcXHRoc2l6ZSA9IHNpemVvZihzdHJ1Y3QgaHR5cGUpO1xcbisjZWxzZVxcbitcXHRoc2l6ZSA9IHNldC1cXHUwMDNlZmFtaWx5ID09IE5GUFJPVE9fSVBWNiA/XFxuK1xcdFxcdHNpemVvZihzdHJ1Y3QgSVBTRVRfVE9LRU4oSFRZUEUsIDYpKSA6XFxuK1xcdFxcdHNpemVvZihzdHJ1Y3QgSVBTRVRfVE9LRU4oSFRZUEUsIDQpKTtcXG4rI2VuZGlmXFxuIFxcdGggPSBremFsbG9jKGhzaXplLCBHRlBfS0VSTkVMKTtcXG4gXFx0aWYgKCFoKVxcbiBcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG5AQCAtMTU3NywyMiArMTY2NCwyNyBAQCBJUFNFVF9UT0tFTihIVFlQRSwgX2NyZWF0ZSkoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgaXBfc2V0ICpzZXQsXFxuIFxcdCAqL1xcbiBcXHRoYml0cyA9IGZscyhoYXNoc2l6ZSAtIDEpO1xcbiBcXHRoc2l6ZSA9IGh0YWJsZV9zaXplKGhiaXRzKTtcXG4tXFx0aWYgKGhzaXplID09IDApIHtcXG4tXFx0XFx0a2ZyZWUoaCk7XFxuLVxcdFxcdHJldHVybiAtRU5PTUVNO1xcbi1cXHR9XFxuK1xcdGlmIChoc2l6ZSA9PSAwKVxcbitcXHRcXHRnb3RvIGZyZWVfaDtcXG4gXFx0dCA9IGlwX3NldF9hbGxvYyhoc2l6ZSk7XFxuLVxcdGlmICghdCkge1xcbi1cXHRcXHRrZnJlZShoKTtcXG4tXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuLVxcdH1cXG4rXFx0aWYgKCF0KVxcbitcXHRcXHRnb3RvIGZyZWVfaDtcXG4gXFx0dC1cXHUwMDNlaHJlZ2lvbiA9IGlwX3NldF9hbGxvYyhhaGFzaF9zaXplb2ZfcmVnaW9ucyhoYml0cykpO1xcbi1cXHRpZiAoIXQtXFx1MDAzZWhyZWdpb24pIHtcXG4tXFx0XFx0aXBfc2V0X2ZyZWUodCk7XFxuLVxcdFxcdGtmcmVlKGgpO1xcbi1cXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4rXFx0aWYgKCF0LVxcdTAwM2VocmVnaW9uKVxcbitcXHRcXHRnb3RvIGZyZWVfdDtcXG4rI2lmZGVmIElQX1NFVF9IQVNIX1dJVEhfTkVUU1xcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgSVBTRVRfTkVUX0NPVU5UOyBpKyspIHtcXG4rXFx0XFx0bmV0cyA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBuZXRfcHJlZml4ZXMpLCBHRlBfS0VSTkVMKTtcXG4rXFx0XFx0aWYgKCFuZXRzKSB7XFxuK1xcdFxcdFxcdGlmIChpICE9IDApXFxuK1xcdFxcdFxcdFxcdGtmcmVlKGgtXFx1MDAzZXJuZXRzWzBdKTtcXG4rXFx0XFx0XFx0Z290byBmcmVlX2hyZWdpb247XFxuK1xcdFxcdH1cXG4rXFx0XFx0UkNVX0lOSVRfUE9JTlRFUihoLVxcdTAwM2VybmV0c1tpXSwgbmV0cyk7XFxuIFxcdH1cXG4rI2VuZGlmXFxuIFxcdGgtXFx1MDAzZWdjLnNldCA9IHNldDtcXG4rXFx0c3Bpbl9sb2NrX2luaXQoXFx1MDAyNmgtXFx1MDAzZWdjLmxvY2spO1xcbiBcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgYWhhc2hfbnVtb2ZfbG9ja3MoaGJpdHMpOyBpKyspXFxuIFxcdFxcdHNwaW5fbG9ja19pbml0KFxcdTAwMjZ0LVxcdTAwM2VocmVnaW9uW2ldLmxvY2spO1xcbiBcXHRoLVxcdTAwM2VtYXhlbGVtID0gbWF4ZWxlbTtcXG5AQCAtMTYxOSw5ICsxNzExLDggQEAgSVBTRVRfVE9LRU4oSFRZUEUsIF9jcmVhdGUpKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGlwX3NldCAqc2V0LFxcbiBcXHR9XFxuIFxcdHQtXFx1MDAzZWh0YWJsZV9iaXRzID0gaGJpdHM7XFxuIFxcdHQtXFx1MDAzZW1heGVsZW0gPSBoLVxcdTAwM2VtYXhlbGVtIC8gYWhhc2hfbnVtb2ZfbG9ja3MoaGJpdHMpO1xcbitcXHRJTklUX0xJU1RfSEVBRChcXHUwMDI2dC1cXHUwMDNlYWQpO1xcbiBcXHRSQ1VfSU5JVF9QT0lOVEVSKGgtXFx1MDAzZXRhYmxlLCB0KTtcXG4tXFxuLVxcdElOSVRfTElTVF9IRUFEKFxcdTAwMjZoLVxcdTAwM2VhZCk7XFxuIFxcdHNldC1cXHUwMDNlZGF0YSA9IGg7XFxuICNpZm5kZWYgSVBfU0VUX1BST1RPX1VOREVGXFxuIFxcdGlmIChzZXQtXFx1MDAzZWZhbWlseSA9PSBORlBST1RPX0lQVjQpIHtcXG5AQCAtMTY1NSw2ICsxNzQ2LDE2IEBAIElQU0VUX1RPS0VOKEhUWVBFLCBfY3JlYXRlKShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBpcF9zZXQgKnNldCxcXG4gXFx0XFx0IHQtXFx1MDAzZWh0YWJsZV9iaXRzLCBoLVxcdTAwM2VtYXhlbGVtLCBzZXQtXFx1MDAzZWRhdGEsIHQpO1xcbiBcXG4gXFx0cmV0dXJuIDA7XFxuK1xcbisjaWZkZWYgSVBfU0VUX0hBU0hfV0lUSF9ORVRTXFxuK2ZyZWVfaHJlZ2lvbjpcXG4rXFx0aXBfc2V0X2ZyZWUodC1cXHUwMDNlaHJlZ2lvbik7XFxuKyNlbmRpZlxcbitmcmVlX3Q6XFxuK1xcdGlwX3NldF9mcmVlKHQpO1xcbitmcmVlX2g6XFxuK1xcdGtmcmVlKGgpO1xcbitcXHRyZXR1cm4gLUVOT01FTTtcXG4gfVxcbiAjZW5kaWYgLyogSVBfU0VUX0VNSVRfQ1JFQVRFICovXFxuIFxcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwcG9ydG5ldC5jIGIvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcHBvcnRuZXQuY1xcbmluZGV4IDJkNjY1MmQ0MzE5OWE0Li4xOTU4NTNhMjViMDYwNiAxMDA2NDRcXG4tLS0gYS9uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwcG9ydG5ldC5jXFxuKysrIGIvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcHBvcnRuZXQuY1xcbkBAIC0xMzgsNyArMTM4LDcgQEAgaGFzaF9pcHBvcnRuZXQ0X2thZHQoc3RydWN0IGlwX3NldCAqc2V0LCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbiBcXHRjb25zdCBzdHJ1Y3QgaGFzaF9pcHBvcnRuZXQ0ICpoID0gc2V0LVxcdTAwM2VkYXRhO1xcbiBcXHRpcHNldF9hZHRmbiBhZHRmbiA9IHNldC1cXHUwMDNldmFyaWFudC1cXHUwMDNlYWR0W2FkdF07XFxuIFxcdHN0cnVjdCBoYXNoX2lwcG9ydG5ldDRfZWxlbSBlID0ge1xcbi1cXHRcXHQuY2lkciA9IElOSVRfQ0lEUihoLVxcdTAwM2VuZXRzWzBdLmNpZHJbMF0sIEhPU1RfTUFTSyksXFxuK1xcdFxcdC5jaWRyID0gSU5JVF9DSURSKGgtXFx1MDAzZXJuZXRzWzBdLCBIT1NUX01BU0spLFxcbiBcXHR9O1xcbiBcXHRzdHJ1Y3QgaXBfc2V0X2V4dCBleHQgPSBJUF9TRVRfSU5JVF9LRVhUKHNrYiwgb3B0LCBzZXQpO1xcbiBcXG5AQCAtMzk4LDcgKzM5OCw3IEBAIGhhc2hfaXBwb3J0bmV0Nl9rYWR0KHN0cnVjdCBpcF9zZXQgKnNldCwgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4gXFx0Y29uc3Qgc3RydWN0IGhhc2hfaXBwb3J0bmV0NiAqaCA9IHNldC1cXHUwMDNlZGF0YTtcXG4gXFx0aXBzZXRfYWR0Zm4gYWR0Zm4gPSBzZXQtXFx1MDAzZXZhcmlhbnQtXFx1MDAzZWFkdFthZHRdO1xcbiBcXHRzdHJ1Y3QgaGFzaF9pcHBvcnRuZXQ2X2VsZW0gZSA9IHtcXG4tXFx0XFx0LmNpZHIgPSBJTklUX0NJRFIoaC1cXHUwMDNlbmV0c1swXS5jaWRyWzBdLCBIT1NUX01BU0spLFxcbitcXHRcXHQuY2lkciA9IElOSVRfQ0lEUihoLVxcdTAwM2VybmV0c1swXSwgSE9TVF9NQVNLKSxcXG4gXFx0fTtcXG4gXFx0c3RydWN0IGlwX3NldF9leHQgZXh0ID0gSVBfU0VUX0lOSVRfS0VYVChza2IsIG9wdCwgc2V0KTtcXG4gXFxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0LmMgYi9uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldC5jXFxuaW5kZXggY2UwYTljZTVhOTFmMWEuLjA5MmYzYzkyODFiODBmIDEwMDY0NFxcbi0tLSBhL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0LmNcXG4rKysgYi9uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldC5jXFxuQEAgLTExNyw3ICsxMTcsNyBAQCBoYXNoX25ldDRfa2FkdChzdHJ1Y3QgaXBfc2V0ICpzZXQsIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXFxuIFxcdGNvbnN0IHN0cnVjdCBoYXNoX25ldDQgKmggPSBzZXQtXFx1MDAzZWRhdGE7XFxuIFxcdGlwc2V0X2FkdGZuIGFkdGZuID0gc2V0LVxcdTAwM2V2YXJpYW50LVxcdTAwM2VhZHRbYWR0XTtcXG4gXFx0c3RydWN0IGhhc2hfbmV0NF9lbGVtIGUgPSB7XFxuLVxcdFxcdC5jaWRyID0gSU5JVF9DSURSKGgtXFx1MDAzZW5ldHNbMF0uY2lkclswXSwgSE9TVF9NQVNLKSxcXG4rXFx0XFx0LmNpZHIgPSBJTklUX0NJRFIoaC1cXHUwMDNlcm5ldHNbMF0sIEhPU1RfTUFTSyksXFxuIFxcdH07XFxuIFxcdHN0cnVjdCBpcF9zZXRfZXh0IGV4dCA9IElQX1NFVF9JTklUX0tFWFQoc2tiLCBvcHQsIHNldCk7XFxuIFxcbkBAIC0yOTEsNyArMjkxLDcgQEAgaGFzaF9uZXQ2X2thZHQoc3RydWN0IGlwX3NldCAqc2V0LCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbiBcXHRjb25zdCBzdHJ1Y3QgaGFzaF9uZXQ2ICpoID0gc2V0LVxcdTAwM2VkYXRhO1xcbiBcXHRpcHNldF9hZHRmbiBhZHRmbiA9IHNldC1cXHUwMDNldmFyaWFudC1cXHUwMDNlYWR0W2FkdF07XFxuIFxcdHN0cnVjdCBoYXNoX25ldDZfZWxlbSBlID0ge1xcbi1cXHRcXHQuY2lkciA9IElOSVRfQ0lEUihoLVxcdTAwM2VuZXRzWzBdLmNpZHJbMF0sIEhPU1RfTUFTSyksXFxuK1xcdFxcdC5jaWRyID0gSU5JVF9DSURSKGgtXFx1MDAzZXJuZXRzWzBdLCBIT1NUX01BU0spLFxcbiBcXHR9O1xcbiBcXHRzdHJ1Y3QgaXBfc2V0X2V4dCBleHQgPSBJUF9TRVRfSU5JVF9LRVhUKHNrYiwgb3B0LCBzZXQpO1xcbiBcXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRpZmFjZS5jIGIvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRpZmFjZS5jXFxuaW5kZXggMzBhNjU1ZTVjNGZkY2QuLmI0NGI5NWY3NjZiN2FkIDEwMDY0NFxcbi0tLSBhL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0aWZhY2UuY1xcbisrKyBiL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0aWZhY2UuY1xcbkBAIC0xNjEsNyArMTYxLDcgQEAgaGFzaF9uZXRpZmFjZTRfa2FkdChzdHJ1Y3QgaXBfc2V0ICpzZXQsIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXFxuIFxcdHN0cnVjdCBoYXNoX25ldGlmYWNlNCAqaCA9IHNldC1cXHUwMDNlZGF0YTtcXG4gXFx0aXBzZXRfYWR0Zm4gYWR0Zm4gPSBzZXQtXFx1MDAzZXZhcmlhbnQtXFx1MDAzZWFkdFthZHRdO1xcbiBcXHRzdHJ1Y3QgaGFzaF9uZXRpZmFjZTRfZWxlbSBlID0ge1xcbi1cXHRcXHQuY2lkciA9IElOSVRfQ0lEUihoLVxcdTAwM2VuZXRzWzBdLmNpZHJbMF0sIEhPU1RfTUFTSyksXFxuK1xcdFxcdC5jaWRyID0gSU5JVF9DSURSKGgtXFx1MDAzZXJuZXRzWzBdLCBIT1NUX01BU0spLFxcbiBcXHRcXHQuZWxlbSA9IDEsXFxuIFxcdH07XFxuIFxcdHN0cnVjdCBpcF9zZXRfZXh0IGV4dCA9IElQX1NFVF9JTklUX0tFWFQoc2tiLCBvcHQsIHNldCk7XFxuQEAgLTM4Miw3ICszODIsNyBAQCBoYXNoX25ldGlmYWNlNl9rYWR0KHN0cnVjdCBpcF9zZXQgKnNldCwgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4gXFx0c3RydWN0IGhhc2hfbmV0aWZhY2U2ICpoID0gc2V0LVxcdTAwM2VkYXRhO1xcbiBcXHRpcHNldF9hZHRmbiBhZHRmbiA9IHNldC1cXHUwMDNldmFyaWFudC1cXHUwMDNlYWR0W2FkdF07XFxuIFxcdHN0cnVjdCBoYXNoX25ldGlmYWNlNl9lbGVtIGUgPSB7XFxuLVxcdFxcdC5jaWRyID0gSU5JVF9DSURSKGgtXFx1MDAzZW5ldHNbMF0uY2lkclswXSwgSE9TVF9NQVNLKSxcXG4rXFx0XFx0LmNpZHIgPSBJTklUX0NJRFIoaC1cXHUwMDNlcm5ldHNbMF0sIEhPU1RfTUFTSyksXFxuIFxcdFxcdC5lbGVtID0gMSxcXG4gXFx0fTtcXG4gXFx0c3RydWN0IGlwX3NldF9leHQgZXh0ID0gSVBfU0VUX0lOSVRfS0VYVChza2IsIG9wdCwgc2V0KTtcXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRuZXQuYyBiL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0bmV0LmNcXG5pbmRleCA4ZmJlNjQ5YzlkZDNkNC4uZjdjOGExY2MzMGZjN2IgMTAwNjQ0XFxuLS0tIGEvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRuZXQuY1xcbisrKyBiL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0bmV0LmNcXG5AQCAtMTQ5LDggKzE0OSwxMCBAQCBoYXNoX25ldG5ldDRfa2FkdChzdHJ1Y3QgaXBfc2V0ICpzZXQsIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXFxuIFxcdHN0cnVjdCBoYXNoX25ldG5ldDRfZWxlbSBlID0geyB9O1xcbiBcXHRzdHJ1Y3QgaXBfc2V0X2V4dCBleHQgPSBJUF9TRVRfSU5JVF9LRVhUKHNrYiwgb3B0LCBzZXQpO1xcbiBcXG4tXFx0ZS5jaWRyWzBdID0gSU5JVF9DSURSKGgtXFx1MDAzZW5ldHNbMF0uY2lkclswXSwgSE9TVF9NQVNLKTtcXG4tXFx0ZS5jaWRyWzFdID0gSU5JVF9DSURSKGgtXFx1MDAzZW5ldHNbMF0uY2lkclsxXSwgSE9TVF9NQVNLKTtcXG4rXFx0cmN1X3JlYWRfbG9ja19iaCgpO1xcbitcXHRlLmNpZHJbMF0gPSBJTklUX0NJRFIoaC1cXHUwMDNlcm5ldHNbMF0sIEhPU1RfTUFTSyk7XFxuK1xcdGUuY2lkclsxXSA9IElOSVRfQ0lEUihoLVxcdTAwM2VybmV0c1sxXSwgSE9TVF9NQVNLKTtcXG4rXFx0cmN1X3JlYWRfdW5sb2NrX2JoKCk7XFxuIFxcdGlmIChhZHQgPT0gSVBTRVRfVEVTVClcXG4gXFx0XFx0ZS5jY21wID0gKEhPU1RfTUFTSyBcXHUwMDNjXFx1MDAzYyAoc2l6ZW9mKGUuY2lkclswXSkgKiA4KSkgfCBIT1NUX01BU0s7XFxuIFxcbkBAIC0zODgsOCArMzkwLDEwIEBAIGhhc2hfbmV0bmV0Nl9rYWR0KHN0cnVjdCBpcF9zZXQgKnNldCwgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4gXFx0c3RydWN0IGhhc2hfbmV0bmV0Nl9lbGVtIGUgPSB7IH07XFxuIFxcdHN0cnVjdCBpcF9zZXRfZXh0IGV4dCA9IElQX1NFVF9JTklUX0tFWFQoc2tiLCBvcHQsIHNldCk7XFxuIFxcbi1cXHRlLmNpZHJbMF0gPSBJTklUX0NJRFIoaC1cXHUwMDNlbmV0c1swXS5jaWRyWzBdLCBIT1NUX01BU0spO1xcbi1cXHRlLmNpZHJbMV0gPSBJTklUX0NJRFIoaC1cXHUwMDNlbmV0c1swXS5jaWRyWzFdLCBIT1NUX01BU0spO1xcbitcXHRyY3VfcmVhZF9sb2NrX2JoKCk7XFxuK1xcdGUuY2lkclswXSA9IElOSVRfQ0lEUihoLVxcdTAwM2VybmV0c1swXSwgSE9TVF9NQVNLKTtcXG4rXFx0ZS5jaWRyWzFdID0gSU5JVF9DSURSKGgtXFx1MDAzZXJuZXRzWzFdLCBIT1NUX01BU0spO1xcbitcXHRyY3VfcmVhZF91bmxvY2tfYmgoKTtcXG4gXFx0aWYgKGFkdCA9PSBJUFNFVF9URVNUKVxcbiBcXHRcXHRlLmNjbXAgPSAoSE9TVF9NQVNLIFxcdTAwM2NcXHUwMDNjIChzaXplb2YodTgpICogOCkpIHwgSE9TVF9NQVNLO1xcbiBcXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRwb3J0LmMgYi9uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldHBvcnQuY1xcbmluZGV4IGQxYTA2MjhkZjRlZjNhLi41ZGU0YjUxMWRlNzYzNiAxMDA2NDRcXG4tLS0gYS9uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldHBvcnQuY1xcbisrKyBiL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0cG9ydC5jXFxuQEAgLTEzMyw3ICsxMzMsNyBAQCBoYXNoX25ldHBvcnQ0X2thZHQoc3RydWN0IGlwX3NldCAqc2V0LCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbiBcXHRjb25zdCBzdHJ1Y3QgaGFzaF9uZXRwb3J0NCAqaCA9IHNldC1cXHUwMDNlZGF0YTtcXG4gXFx0aXBzZXRfYWR0Zm4gYWR0Zm4gPSBzZXQtXFx1MDAzZXZhcmlhbnQtXFx1MDAzZWFkdFthZHRdO1xcbiBcXHRzdHJ1Y3QgaGFzaF9uZXRwb3J0NF9lbGVtIGUgPSB7XFxuLVxcdFxcdC5jaWRyID0gSU5JVF9DSURSKGgtXFx1MDAzZW5ldHNbMF0uY2lkclswXSwgSE9TVF9NQVNLKSxcXG4rXFx0XFx0LmNpZHIgPSBJTklUX0NJRFIoaC1cXHUwMDNlcm5ldHNbMF0sIEhPU1RfTUFTSyksXFxuIFxcdH07XFxuIFxcdHN0cnVjdCBpcF9zZXRfZXh0IGV4dCA9IElQX1NFVF9JTklUX0tFWFQoc2tiLCBvcHQsIHNldCk7XFxuIFxcbkBAIC0zNTMsNyArMzUzLDcgQEAgaGFzaF9uZXRwb3J0Nl9rYWR0KHN0cnVjdCBpcF9zZXQgKnNldCwgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4gXFx0Y29uc3Qgc3RydWN0IGhhc2hfbmV0cG9ydDYgKmggPSBzZXQtXFx1MDAzZWRhdGE7XFxuIFxcdGlwc2V0X2FkdGZuIGFkdGZuID0gc2V0LVxcdTAwM2V2YXJpYW50LVxcdTAwM2VhZHRbYWR0XTtcXG4gXFx0c3RydWN0IGhhc2hfbmV0cG9ydDZfZWxlbSBlID0ge1xcbi1cXHRcXHQuY2lkciA9IElOSVRfQ0lEUihoLVxcdTAwM2VuZXRzWzBdLmNpZHJbMF0sIEhPU1RfTUFTSyksXFxuK1xcdFxcdC5jaWRyID0gSU5JVF9DSURSKGgtXFx1MDAzZXJuZXRzWzBdLCBIT1NUX01BU0spLFxcbiBcXHR9O1xcbiBcXHRzdHJ1Y3QgaXBfc2V0X2V4dCBleHQgPSBJUF9TRVRfSU5JVF9LRVhUKHNrYiwgb3B0LCBzZXQpO1xcbiBcXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRwb3J0bmV0LmMgYi9uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldHBvcnRuZXQuY1xcbmluZGV4IGJmNGY5MWI3OGUxZGNiLi42MjkxNTMyYmU3YTVhMiAxMDA2NDRcXG4tLS0gYS9uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldHBvcnRuZXQuY1xcbisrKyBiL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0cG9ydG5ldC5jXFxuQEAgLTE1Nyw4ICsxNTcsMTAgQEAgaGFzaF9uZXRwb3J0bmV0NF9rYWR0KHN0cnVjdCBpcF9zZXQgKnNldCwgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4gXFx0c3RydWN0IGhhc2hfbmV0cG9ydG5ldDRfZWxlbSBlID0geyB9O1xcbiBcXHRzdHJ1Y3QgaXBfc2V0X2V4dCBleHQgPSBJUF9TRVRfSU5JVF9LRVhUKHNrYiwgb3B0LCBzZXQpO1xcbiBcXG4tXFx0ZS5jaWRyWzBdID0gSU5JVF9DSURSKGgtXFx1MDAzZW5ldHNbMF0uY2lkclswXSwgSE9TVF9NQVNLKTtcXG4tXFx0ZS5jaWRyWzFdID0gSU5JVF9DSURSKGgtXFx1MDAzZW5ldHNbMF0uY2lkclsxXSwgSE9TVF9NQVNLKTtcXG4rXFx0cmN1X3JlYWRfbG9ja19iaCgpO1xcbitcXHRlLmNpZHJbMF0gPSBJTklUX0NJRFIoaC1cXHUwMDNlcm5ldHNbMF0sIEhPU1RfTUFTSyk7XFxuK1xcdGUuY2lkclsxXSA9IElOSVRfQ0lEUihoLVxcdTAwM2VybmV0c1sxXSwgSE9TVF9NQVNLKTtcXG4rXFx0cmN1X3JlYWRfdW5sb2NrX2JoKCk7XFxuIFxcdGlmIChhZHQgPT0gSVBTRVRfVEVTVClcXG4gXFx0XFx0ZS5jY21wID0gKEhPU1RfTUFTSyBcXHUwMDNjXFx1MDAzYyAoc2l6ZW9mKGUuY2lkclswXSkgKiA4KSkgfCBIT1NUX01BU0s7XFxuIFxcbkBAIC00NTIsOCArNDU0LDEwIEBAIGhhc2hfbmV0cG9ydG5ldDZfa2FkdChzdHJ1Y3QgaXBfc2V0ICpzZXQsIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXFxuIFxcdHN0cnVjdCBoYXNoX25ldHBvcnRuZXQ2X2VsZW0gZSA9IHsgfTtcXG4gXFx0c3RydWN0IGlwX3NldF9leHQgZXh0ID0gSVBfU0VUX0lOSVRfS0VYVChza2IsIG9wdCwgc2V0KTtcXG4gXFxuLVxcdGUuY2lkclswXSA9IElOSVRfQ0lEUihoLVxcdTAwM2VuZXRzWzBdLmNpZHJbMF0sIEhPU1RfTUFTSyk7XFxuLVxcdGUuY2lkclsxXSA9IElOSVRfQ0lEUihoLVxcdTAwM2VuZXRzWzBdLmNpZHJbMV0sIEhPU1RfTUFTSyk7XFxuK1xcdHJjdV9yZWFkX2xvY2tfYmgoKTtcXG4rXFx0ZS5jaWRyWzBdID0gSU5JVF9DSURSKGgtXFx1MDAzZXJuZXRzWzBdLCBIT1NUX01BU0spO1xcbitcXHRlLmNpZHJbMV0gPSBJTklUX0NJRFIoaC1cXHUwMDNlcm5ldHNbMV0sIEhPU1RfTUFTSyk7XFxuK1xcdHJjdV9yZWFkX3VubG9ja19iaCgpO1xcbiBcXHRpZiAoYWR0ID09IElQU0VUX1RFU1QpXFxuIFxcdFxcdGUuY2NtcCA9IChIT1NUX01BU0sgXFx1MDAzY1xcdTAwM2MgKHNpemVvZih1OCkgKiA4KSkgfCBIT1NUX01BU0s7XFxuIFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMlQxNzowMToxNi4yMzgxMTA5MTZaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE0NDA5NjcyOTkyOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORVRGSUxURVJcIixcbiAgICBcIklQX1NFVFwiLFxuICAgIFwiSVBfU0VUX0hBU0hfTkVUXCIsXG4gICAgXCJJUF9TRVRfSEFTSF9ORVRORVRcIixcbiAgICBcIklQX1NFVF9IQVNIX05FVFBPUlRcIixcbiAgICBcIklQX1NFVF9IQVNIX05FVElGQUNFXCIsXG4gICAgXCJJUF9TRVRfSEFTSF9JUFBPUlRORVRcIixcbiAgICBcIklQX1NFVF9IQVNIX05FVFBPUlRORVRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJoYXNoX25ldDRfYWRkXCIsXG4gICAgXCJoYXNoX25ldDRfZGVsXCIsXG4gICAgXCJoYXNoX25ldDRfdGVzdFwiLFxuICAgIFwiaGFzaF9uZXQ0X3Jlc2l6ZVwiLFxuICAgIFwiaGFzaF9uZXQ0X2djXCIsXG4gICAgXCJoYXNoX25ldDRfZmx1c2hcIixcbiAgICBcImhhc2hfbmV0NF9kZXN0cm95XCIsXG4gICAgXCJoYXNoX25ldDRfdXJlZlwiLFxuICAgIFwiaGFzaF9uZXQ0X2thZHRcIixcbiAgICBcImhhc2hfbmV0NF91YWR0XCIsXG4gICAgXCJoYXNoX25ldF9jcmVhdGVcIixcbiAgICBcImhhc2hfbmV0Nl9hZGRcIixcbiAgICBcImhhc2hfbmV0Nl9kZWxcIixcbiAgICBcImhhc2hfbmV0Nl90ZXN0XCIsXG4gICAgXCJoYXNoX25ldDZfcmVzaXplXCIsXG4gICAgXCJoYXNoX25ldDZfZ2NcIixcbiAgICBcImhhc2hfbmV0Nl9rYWR0XCIsXG4gICAgXCJoYXNoX25ldDZfdWFkdFwiLFxuICAgIFwiaGFzaF9uZXRuZXQ0X2FkZFwiLFxuICAgIFwiaGFzaF9uZXRuZXQ0X3Jlc2l6ZVwiLFxuICAgIFwiaGFzaF9uZXRuZXQ0X2djXCIsXG4gICAgXCJoYXNoX25ldG5ldDRfa2FkdFwiLFxuICAgIFwiaGFzaF9uZXRuZXQ0X3VhZHRcIixcbiAgICBcImhhc2hfbmV0bmV0X2NyZWF0ZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjb3JlIGhhc2ggdGFibGUgaW1wbGVtZW50YXRpb24gZm9yIG5ldGZpbHRlciBpcHNldCAoc3BlY2lmaWNhbGx5IHRoZSBnZW5lcmljIGhhc2ggdHlwZXMgaW4gaXBfc2V0X2hhc2hfZ2VuLmgpLiBJdCBjaGFuZ2VzIGhvdyBDSURSIG5ldHdvcmtzIGFyZSBzdG9yZWQsIG1vdmluZyBmcm9tIGEgZml4ZWQtc2l6ZSBhcnJheSB0byBhbiBSQ1UtcHJvdGVjdGVkIGR5bmFtaWNhbGx5IGFsbG9jYXRlZCBhcnJheSwgYW5kIHVwZGF0ZXMgdGhlIHJlc2l6aW5nIGFuZCBnYXJiYWdlIGNvbGxlY3Rpb24gbG9naWMgdG8gdXNlIGEgbmV3IGxvY2sgYW5kIGEgYHJlc2l6aW5nYCBmbGFnLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljIGFuZCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSB0aGUgbmV3IFJDVSBhbmQgbG9ja2luZyBsb2dpYyBkb2Vzbid0IGludHJvZHVjZSB1c2UtYWZ0ZXItZnJlZSwgbWVtb3J5IGxlYWtzLCBvciByYWNlIGNvbmRpdGlvbnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXRcbiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSxcbiAgIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgMGJmYzMzM2VkYTYzNmNhYmMwZDFiNzU5MjRmZGRiMGJiYTUxOTA4MVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgSnVsIDIgMTc6MDE6MTQgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oIGIvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaFxuaW5kZXggZGVkZjU5YjY2MWRkZjMuLjJiNDczYWNhZDUwY2I4IDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaFxuKysrIGIvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaFxuQEAgLTc1LDE1ICs3NSwxNyBAQCBzdHJ1Y3QgaGJ1Y2tldCB7XG4gc3RydWN0IGh0YWJsZV9nYyB7XG4gXHRzdHJ1Y3QgZGVsYXllZF93b3JrIGR3b3JrO1xuIFx0c3RydWN0IGlwX3NldCAqc2V0O1x0LyogU2V0IHRoZSBnYyBiZWxvbmdzIHRvICovXG4rXHRzcGlubG9ja190IGxvY2s7XHQvKiBMb2NrIHRvIGV4Y2x1ZGUgZ2MgYW5kIHJlc2l6ZSAqL1xuIFx0dTMyIHJlZ2lvbjtcdFx0LyogTGFzdCBnYyBydW4gcG9zaXRpb24gKi9cbiB9O1xuIFxuIC8qIFRoZSBoYXNoIHRhYmxlOiB0aGUgdGFibGUgc2l6ZSBzdG9yZWQgaGVyZSBpbiBvcmRlciB0byBtYWtlIHJlc2l6aW5nIGVhc3kgKi9cbiBzdHJ1Y3QgaHRhYmxlIHtcbi1cdGF0b21pY190IHJlZjtcdFx0LyogUmVmZXJlbmNlcyBmb3IgcmVzaXppbmcgKi9cbitcdGJvb2wgcmVzaXppbmc7XHRcdC8qIE1hcmsgb25nb2luZyByZXNpemUgKi9cbiBcdGF0b21pY190IHVyZWY7XHRcdC8qIFJlZmVyZW5jZXMgZm9yIGR1bXBpbmcgYW5kIGdjICovXG4gXHR1OCBodGFibGVfYml0cztcdFx0Lyogc2l6ZSBvZiBoYXNoIHRhYmxlID09IDJeaHRhYmxlX2JpdHMgKi9cbiBcdHUzMiBtYXhlbGVtO1x0XHQvKiBNYXhlbGVtIHBlciByZWdpb24gKi9cbitcdHN0cnVjdCBsaXN0X2hlYWQgYWQ7XHQvKiBSZXNpemUgYWRkfGRlbCBiYWNrbGlzdCAqL1xuIFx0c3RydWN0IGlwX3NldF9yZWdpb24gKmhyZWdpb247XHQvKiBSZWdpb24gbG9ja3MgYW5kIGV4dCBzaXplcyAqL1xuIFx0c3RydWN0IGhidWNrZXQgX19yY3UgKmJ1Y2tldFtdOyAvKiBoYXNodGFibGUgYnVja2V0cyAqL1xuIH07XG5AQCAtOTcsOSArOTksMTYgQEAgc3RydWN0IGh0YWJsZSB7XG4gI2VuZGlmXG4gXG4gLyogQm9vay1rZWVwaW5nIG9mIHRoZSBwcmVmaXhlcyBhZGRlZCB0byB0aGUgc2V0ICovXG4rc3RydWN0IG5ldF9wcmVmaXgge1xuK1x0dTggY2lkcjtcdFx0XHQvKiB0aGUgY2lkciB2YWx1ZSAqL1xuK1x0dTMyIGNvdW50O1x0XHRcdC8qIG51bWJlciBvZiBlbGVtZW50cyBvZiB0aGlzIGNpZHIgKi9cbit9O1xuK1xuIHN0cnVjdCBuZXRfcHJlZml4ZXMge1xuLVx0dTMyIG5ldHNbSVBTRVRfTkVUX0NPVU5UXTsgLyogbnVtYmVyIG9mIGVsZW1lbnRzIGZvciB0aGlzIGNpZHIgKi9cbi1cdHU4IGNpZHJbSVBTRVRfTkVUX0NPVU5UXTsgIC8qIHRoZSBjaWRyIHZhbHVlICovXG4rXHRzdHJ1Y3QgcmN1X2hlYWQgcmN1O1xuK1x0dTggbGVuO1xuK1x0c3RydWN0IG5ldF9wcmVmaXggbmV0c1tdXG4rXHRcdF9fYWxpZ25lZChfX2FsaWdub2ZfXyh1NjQpKTtcbiB9O1xuIFxuIC8qIENvbXB1dGUgdGhlIGhhc2ggdGFibGUgc2l6ZSAqL1xuQEAgLTEyNSwxMSArMTM0LDYgQEAgaHRhYmxlX3NpemUodTggaGJpdHMpXG4gI2Vsc2VcbiAjZGVmaW5lIF9fQ0lEUihjaWRyLCBpKVx0XHQoY2lkcilcbiAjZW5kaWZcbi1cbi0vKiBjaWRyICsgMSBpcyBzdG9yZWQgaW4gbmV0X3ByZWZpeGVzIHRvIHN1cHBvcnQgLzAgKi9cbi0jZGVmaW5lIE5DSURSX1BVVChjaWRyKVx0XHQoKGNpZHIpICsgMSlcbi0jZGVmaW5lIE5DSURSX0dFVChjaWRyKVx0XHQoKGNpZHIpIC0gMSlcbi1cbiAjaWZkZWYgSVBfU0VUX0hBU0hfV0lUSF9ORVRTX1BBQ0tFRFxuIC8qIFdoZW4gY2lkciBpcyBwYWNrZWQgd2l0aCBub21hdGNoLCBjaWRyIC0gMSBpcyBzdG9yZWQgaW4gdGhlIGRhdGEgZW50cnkgKi9cbiAjZGVmaW5lIERDSURSX1BVVChjaWRyKVx0XHQoKGNpZHIpIC0gMSlcbkBAIC0xMzksMjEgKzE0Myw5IEBAIGh0YWJsZV9zaXplKHU4IGhiaXRzKVxuICNkZWZpbmUgRENJRFJfR0VUKGNpZHIsIGkpXHRfX0NJRFIoY2lkciwgaSlcbiAjZW5kaWZcbiBcbi0jZGVmaW5lIElOSVRfQ0lEUihjaWRyLCBob3N0X21hc2spXHRcXFxuLVx0RENJRFJfUFVUKCgoY2lkcikgPyBOQ0lEUl9HRVQoY2lkcikgOiBob3N0X21hc2spKVxuKyNkZWZpbmUgSU5JVF9DSURSKG4sIGhvc3RfbWFzaylcdFxcXG4rXHREQ0lEUl9QVVQoKG4pLVx1MDAzZWxlbiA/IChuKS1cdTAwM2VuZXRzWzBdLmNpZHIgOiBob3N0X21hc2spXG4gXG4tI2lmZGVmIElQX1NFVF9IQVNIX1dJVEhfTkVUMFxuLS8qIGNpZHIgZnJvbSAwIHRvIEhPU1RfTUFTSyB2YWx1ZSBhbmQgYyA9IGNpZHIgKyAxICovXG4tI2RlZmluZSBOTEVOXHRcdFx0KEhPU1RfTUFTSyArIDEpXG4tI2RlZmluZSBDSURSX1BPUyhjKVx0XHQoKGMpIC0gMSlcbi0jZWxzZVxuLS8qIGNpZHIgZnJvbSAxIHRvIEhPU1RfTUFTSyB2YWx1ZSBhbmQgYyA9IGNpZHIgKyAxICovXG4tI2RlZmluZSBOTEVOXHRcdFx0SE9TVF9NQVNLXG4tI2RlZmluZSBDSURSX1BPUyhjKVx0XHQoKGMpIC0gMilcbi0jZW5kaWZcbi1cbi0jZWxzZVxuLSNkZWZpbmUgTkxFTlx0XHRcdDBcbiAjZW5kaWYgLyogSVBfU0VUX0hBU0hfV0lUSF9ORVRTICovXG4gXG4gI2RlZmluZSBTRVRfRUxFTV9FWFBJUkVEKHNldCwgZClcdFxcXG5AQCAtMjkwLDYgKzI4Miw3IEBAIHN0YXRpYyBjb25zdCB1bmlvbiBuZl9pbmV0X2FkZHIgemVyb21hc2sgPSB7fTtcbiAvKiBUaGUgZ2VuZXJpYyBoYXNoIHN0cnVjdHVyZSAqL1xuIHN0cnVjdCBodHlwZSB7XG4gXHRzdHJ1Y3QgaHRhYmxlIF9fcmN1ICp0YWJsZTsgLyogdGhlIGhhc2ggdGFibGUgKi9cbitcdHN0cnVjdCBuZXRfcHJlZml4ZXMgX19yY3UgKnJuZXRzW0lQU0VUX05FVF9DT1VOVF07IC8qIGNpZHIgcHJlZml4ZXMgKi9cbiBcdHN0cnVjdCBodGFibGVfZ2MgZ2M7XHQvKiBnYyB3b3JrcXVldWUgKi9cbiBcdHUzMiBtYXhlbGVtO1x0XHQvKiBtYXggZWxlbWVudHMgaW4gdGhlIGhhc2ggKi9cbiBcdHUzMiBpbml0dmFsO1x0XHQvKiByYW5kb20gamhhc2ggaW5pdCB2YWx1ZSAqL1xuQEAgLTMwMSwxMSArMjk0LDEwIEBAIHN0cnVjdCBodHlwZSB7XG4gXHR1OCBuZXRtYXNrO1x0XHQvKiBuZXRtYXNrIHZhbHVlIGZvciBzdWJuZXRzIHRvIHN0b3JlICovXG4gXHR1bmlvbiBuZl9pbmV0X2FkZHIgYml0bWFzaztcdC8qIHN0b3JlcyBiaXRtYXNrICovXG4gI2VuZGlmXG4tXHRzdHJ1Y3QgbGlzdF9oZWFkIGFkO1x0LyogUmVzaXplIGFkZHxkZWwgYmFja2xpc3QgKi9cbitcdC8qIEJlY2F1c2UgJ25leHQnIGlzIElQdjQvSVB2NiBkZXBlbmRlbnQsIG5vIGVsZW1lbnRzIG9mIHRoaXNcbitcdCAqIHN0cnVjdHVyZSBhbmQgcmVmZXJyZWQgaW4gY3JlYXRlKCkgbWF5IGNvbWUgYWZ0ZXIgJ25leHQnLlxuK1x0ICovXG4gXHRzdHJ1Y3QgbXR5cGVfZWxlbSBuZXh0OyAvKiB0ZW1wb3Jhcnkgc3RvcmFnZSBmb3IgdWFkZCAqL1xuLSNpZmRlZiBJUF9TRVRfSEFTSF9XSVRIX05FVFNcbi1cdHN0cnVjdCBuZXRfcHJlZml4ZXMgbmV0c1tOTEVOXTsgLyogYm9vay1rZWVwaW5nIG9mIHByZWZpeGVzICovXG4tI2VuZGlmXG4gfTtcbiBcbiAvKiBBRER8REVMIGVudHJpZXMgc2F2ZWQgZHVyaW5nIHJlc2l6ZSAqL1xuQEAgLTMyMiw1MCArMzE0LDg4IEBAIHN0cnVjdCBtdHlwZV9yZXNpemVfYWQge1xuIC8qIE5ldHdvcmsgY2lkciBzaXplIGJvb2sga2VlcGluZyB3aGVuIHRoZSBoYXNoIHN0b3JlcyBkaWZmZXJlbnRcbiAgKiBzaXplZCBuZXR3b3Jrcy4gY2lkciA9PSByZWFsIGNpZHIgKyAxIHRvIHN1cHBvcnQgLzAuXG4gICovXG4tc3RhdGljIHZvaWRcbitzdGF0aWMgaW50XG4gbXR5cGVfYWRkX2NpZHIoc3RydWN0IGlwX3NldCAqc2V0LCBzdHJ1Y3QgaHR5cGUgKmgsIHU4IGNpZHIsIHU4IG4pXG4ge1xuLVx0aW50IGksIGo7XG4rXHRzdHJ1Y3QgbmV0X3ByZWZpeGVzICpuZXRzLCAqdG1wO1xuK1x0aW50IGksIGosIGZvdW5kLCBsZW4gPSAwLCByZXQgPSAwO1xuIFxuIFx0c3Bpbl9sb2NrX2JoKFx1MDAyNnNldC1cdTAwM2Vsb2NrKTtcbitcdG5ldHMgPSBfX2lwc2V0X2RlcmVmZXJlbmNlKGgtXHUwMDNlcm5ldHNbbl0pO1xuIFx0LyogQWRkIGluIGluY3JlYXNpbmcgcHJlZml4IG9yZGVyLCBzbyBsYXJnZXIgY2lkciBmaXJzdCAqL1xuLVx0Zm9yIChpID0gMCwgaiA9IC0xOyBpIFx1MDAzYyBOTEVOIFx1MDAyNlx1MDAyNiBoLVx1MDAzZW5ldHNbaV0uY2lkcltuXTsgaSsrKSB7XG4tXHRcdGlmIChqICE9IC0xKSB7XG4rXHRmb3IgKGkgPSAwLCBmb3VuZCA9IC0xOyBpIFx1MDAzYyBuZXRzLVx1MDAzZWxlbjsgaSsrKSB7XG4rXHRcdGlmIChuZXRzLVx1MDAzZW5ldHNbaV0uY291bnQpXG4rXHRcdFx0bGVuKys7XG4rXHRcdGlmIChmb3VuZCAhPSAtMSkge1xuIFx0XHRcdGNvbnRpbnVlO1xuLVx0XHR9IGVsc2UgaWYgKGgtXHUwMDNlbmV0c1tpXS5jaWRyW25dIFx1MDAzYyBjaWRyKSB7XG4tXHRcdFx0aiA9IGk7XG4tXHRcdH0gZWxzZSBpZiAoaC1cdTAwM2VuZXRzW2ldLmNpZHJbbl0gPT0gY2lkcikge1xuLVx0XHRcdGgtXHUwMDNlbmV0c1tDSURSX1BPUyhjaWRyKV0ubmV0c1tuXSsrO1xuK1x0XHR9IGVsc2UgaWYgKG5ldHMtXHUwMDNlbmV0c1tpXS5jaWRyIFx1MDAzYyBjaWRyKSB7XG4rXHRcdFx0Zm91bmQgPSBpO1xuK1x0XHR9IGVsc2UgaWYgKG5ldHMtXHUwMDNlbmV0c1tpXS5jaWRyID09IGNpZHIpIHtcbitcdFx0XHRuZXRzLVx1MDAzZW5ldHNbaV0uY291bnQrKztcbiBcdFx0XHRnb3RvIHVubG9jaztcbiBcdFx0fVxuIFx0fVxuLVx0aWYgKGogIT0gLTEpIHtcbi1cdFx0Zm9yICg7IGkgXHUwMDNlIGo7IGktLSlcbi1cdFx0XHRoLVx1MDAzZW5ldHNbaV0uY2lkcltuXSA9IGgtXHUwMDNlbmV0c1tpIC0gMV0uY2lkcltuXTtcbitcdGxlbisrO1xuK1x0dG1wID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IG5ldF9wcmVmaXhlcykgK1xuK1x0XHQgICAgICBsZW4gKiBzaXplb2Yoc3RydWN0IG5ldF9wcmVmaXgpLCBHRlBfQVRPTUlDKTtcbitcdGlmICghdG1wKVxuK1x0XHRyZXR1cm4gLUVOT01FTTtcbitcdHRtcC1cdTAwM2VsZW4gPSBsZW47XG4rXHRmb3IgKGkgPSAwLCBqID0gMDsgaSBcdTAwM2MgbmV0cy1cdTAwM2VsZW47IGkrKykge1xuK1x0XHRpZiAoIW5ldHMtXHUwMDNlbmV0c1tpXS5jb3VudClcbitcdFx0XHRjb250aW51ZTtcbitcdFx0aWYgKGkgPT0gZm91bmQpIHtcbitcdFx0XHR0bXAtXHUwMDNlbmV0c1tqXS5jaWRyID0gY2lkcjtcbitcdFx0XHR0bXAtXHUwMDNlbmV0c1tqKytdLmNvdW50ID0gMTtcbitcdFx0fVxuK1x0XHR0bXAtXHUwMDNlbmV0c1tqXS5jaWRyID0gbmV0cy1cdTAwM2VuZXRzW2ldLmNpZHI7XG4rXHRcdHRtcC1cdTAwM2VuZXRzW2orK10uY291bnQgPSBuZXRzLVx1MDAzZW5ldHNbaV0uY291bnQ7XG4rXHR9XG4rXHRpZiAoZm91bmQgPT0gLTEpIHtcbitcdFx0dG1wLVx1MDAzZW5ldHNbal0uY2lkciA9IGNpZHI7XG4rXHRcdHRtcC1cdTAwM2VuZXRzW2pdLmNvdW50ID0gMTtcbiBcdH1cbi1cdGgtXHUwMDNlbmV0c1tpXS5jaWRyW25dID0gY2lkcjtcbi1cdGgtXHUwMDNlbmV0c1tDSURSX1BPUyhjaWRyKV0ubmV0c1tuXSA9IDE7XG4rXHRyY3VfYXNzaWduX3BvaW50ZXIoaC1cdTAwM2VybmV0c1tuXSwgdG1wKTtcbitcdGtmcmVlX3JjdShuZXRzLCByY3UpO1xuIHVubG9jazpcbiBcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNnNldC1cdTAwM2Vsb2NrKTtcbitcdHJldHVybiByZXQ7XG4gfVxuIFxuIHN0YXRpYyB2b2lkXG4gbXR5cGVfZGVsX2NpZHIoc3RydWN0IGlwX3NldCAqc2V0LCBzdHJ1Y3QgaHR5cGUgKmgsIHU4IGNpZHIsIHU4IG4pXG4ge1xuLVx0dTggaSwgaiwgbmV0X2VuZCA9IE5MRU4gLSAxO1xuK1x0c3RydWN0IG5ldF9wcmVmaXhlcyAqbmV0cywgKnRtcDtcbitcdHU4IGksIGosIGZvdW5kLCBsZW4gPSAwO1xuIFxuIFx0c3Bpbl9sb2NrX2JoKFx1MDAyNnNldC1cdTAwM2Vsb2NrKTtcbi1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIE5MRU47IGkrKykge1xuLVx0XHRpZiAoaC1cdTAwM2VuZXRzW2ldLmNpZHJbbl0gIT0gY2lkcilcbi1cdFx0XHRjb250aW51ZTtcbi1cdFx0aC1cdTAwM2VuZXRzW0NJRFJfUE9TKGNpZHIpXS5uZXRzW25dLS07XG4tXHRcdGlmIChoLVx1MDAzZW5ldHNbQ0lEUl9QT1MoY2lkcildLm5ldHNbbl0gXHUwMDNlIDApXG4tXHRcdFx0Z290byB1bmxvY2s7XG4tXHRcdGZvciAoaiA9IGk7IGogXHUwMDNjIG5ldF9lbmQgXHUwMDI2XHUwMDI2IGgtXHUwMDNlbmV0c1tqXS5jaWRyW25dOyBqKyspXG4tXHRcdFx0aC1cdTAwM2VuZXRzW2pdLmNpZHJbbl0gPSBoLVx1MDAzZW5ldHNbaiArIDFdLmNpZHJbbl07XG4tXHRcdGgtXHUwMDNlbmV0c1tqXS5jaWRyW25dID0gMDtcbitcdG5ldHMgPSBfX2lwc2V0X2RlcmVmZXJlbmNlKGgtXHUwMDNlcm5ldHNbbl0pO1xuK1x0Zm9yIChpID0gMCwgZm91bmQgPSAtMTsgaSBcdTAwM2MgbmV0cy1cdTAwM2VsZW47IGkrKykge1xuK1x0XHRpZiAobmV0cy1cdTAwM2VuZXRzW2ldLmNvdW50KVxuK1x0XHRcdGxlbisrO1xuK1x0XHRpZiAobmV0cy1cdTAwM2VuZXRzW2ldLmNpZHIgPT0gY2lkcilcbitcdFx0XHRmb3VuZCA9IGk7XG4rXHR9XG4rXHRpZiAodW5saWtlbHkoZm91bmQgPT0gLTEpKVxuK1x0XHRyZXR1cm47XG4rXHRuZXRzLVx1MDAzZW5ldHNbZm91bmRdLmNvdW50LS07XG4rXHRpZiAobmV0cy1cdTAwM2VuZXRzW2ZvdW5kXS5jb3VudClcbiBcdFx0Z290byB1bmxvY2s7XG4rXHRsZW4tLTtcbitcdHRtcCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBuZXRfcHJlZml4ZXMpICtcbitcdFx0ICAgICAgbGVuICogc2l6ZW9mKHN0cnVjdCBuZXRfcHJlZml4KSwgR0ZQX0FUT01JQyk7XG4rXHRpZiAoIXRtcClcbitcdFx0LyogTGVhdmUgYSBob2xlICovXG4rXHRcdHJldHVybjtcbitcdHRtcC1cdTAwM2VsZW4gPSBsZW47XG4rXHRmb3IgKGkgPSAwLCBqID0gMDsgaSBcdTAwM2MgbmV0cy1cdTAwM2VsZW47IGkrKykge1xuK1x0XHRpZiAoIW5ldHMtXHUwMDNlbmV0c1tpXS5jb3VudCB8fCBpID09IGZvdW5kKVxuK1x0XHRcdGNvbnRpbnVlO1xuK1x0XHR0bXAtXHUwMDNlbmV0c1tqXS5jaWRyID0gbmV0cy1cdTAwM2VuZXRzW2ldLmNpZHI7XG4rXHRcdHRtcC1cdTAwM2VuZXRzW2orK10uY291bnQgPSBuZXRzLVx1MDAzZW5ldHNbaV0uY291bnQ7XG4gXHR9XG4rXHRyY3VfYXNzaWduX3BvaW50ZXIoaC1cdTAwM2VybmV0c1tuXSwgdG1wKTtcbitcdGtmcmVlX3JjdShuZXRzLCByY3UpO1xuIHVubG9jazpcbiBcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNnNldC1cdTAwM2Vsb2NrKTtcbiB9XG5AQCAtMzk4LDYgKzQyOCw5IEBAIHN0YXRpYyB2b2lkXG4gbXR5cGVfZmx1c2goc3RydWN0IGlwX3NldCAqc2V0KVxuIHtcbiBcdHN0cnVjdCBodHlwZSAqaCA9IHNldC1cdTAwM2VkYXRhO1xuKyNpZmRlZiBJUF9TRVRfSEFTSF9XSVRIX05FVFNcbitcdHN0cnVjdCBuZXRfcHJlZml4ZXMgKm5ldHMsICp0bXA7XG4rI2VuZGlmXG4gXHRzdHJ1Y3QgaHRhYmxlICp0O1xuIFx0c3RydWN0IGhidWNrZXQgKm47XG4gXHR1MzIgciwgaTtcbkBAIC00MjEsNyArNDU0LDE3IEBAIG10eXBlX2ZsdXNoKHN0cnVjdCBpcF9zZXQgKnNldClcbiBcdFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2dC1cdTAwM2VocmVnaW9uW3JdLmxvY2spO1xuIFx0fVxuICNpZmRlZiBJUF9TRVRfSEFTSF9XSVRIX05FVFNcbi1cdG1lbXNldChoLVx1MDAzZW5ldHMsIDAsIHNpemVvZihoLVx1MDAzZW5ldHMpKTtcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIElQU0VUX05FVF9DT1VOVDsgaSsrKSB7XG4rXHRcdG5ldHMgPSBpcHNldF9kZXJlZmVyZW5jZV9uZm5sKGgtXHUwMDNlcm5ldHNbaV0pO1xuK1x0XHR0bXAgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgbmV0X3ByZWZpeGVzKSwgR0ZQX0FUT01JQyk7XG4rXHRcdGlmICghdG1wKSB7XG4rXHRcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgbmV0cy1cdTAwM2VsZW47IGkrKylcbitcdFx0XHRcdG5ldHMtXHUwMDNlbmV0c1tpXS5jb3VudCA9IDA7XG4rXHRcdH0gZWxzZSB7XG4rXHRcdFx0cmN1X2Fzc2lnbl9wb2ludGVyKGgtXHUwMDNlcm5ldHNbaV0sIHRtcCk7XG4rXHRcdFx0a2ZyZWVfcmN1KG5ldHMsIHJjdSk7XG4rXHRcdH1cbitcdH1cbiAjZW5kaWZcbiB9XG4gXG5AQCAtNDI5LDYgKzQ3Miw5IEBAIG10eXBlX2ZsdXNoKHN0cnVjdCBpcF9zZXQgKnNldClcbiBzdGF0aWMgdm9pZFxuIG10eXBlX2FoYXNoX2Rlc3Ryb3koc3RydWN0IGlwX3NldCAqc2V0LCBzdHJ1Y3QgaHRhYmxlICp0LCBib29sIGV4dF9kZXN0cm95KVxuIHtcbisjaWZkZWYgSVBfU0VUX0hBU0hfV0lUSF9ORVRTXG4rXHRzdHJ1Y3QgaHR5cGUgKmggPSBzZXQtXHUwMDNlZGF0YTtcbisjZW5kaWZcbiBcdHN0cnVjdCBoYnVja2V0ICpuO1xuIFx0dTMyIGk7XG4gXG5AQCAtNDQyLDYgKzQ4OCwxMSBAQCBtdHlwZV9haGFzaF9kZXN0cm95KHN0cnVjdCBpcF9zZXQgKnNldCwgc3RydWN0IGh0YWJsZSAqdCwgYm9vbCBleHRfZGVzdHJveSlcbiBcdFx0a2ZyZWUobik7XG4gXHR9XG4gXG4rI2lmZGVmIElQX1NFVF9IQVNIX1dJVEhfTkVUU1xuK1x0aWYgKGV4dF9kZXN0cm95KVxuK1x0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBJUFNFVF9ORVRfQ09VTlQ7IGkrKylcbitcdFx0XHRrZnJlZShoLVx1MDAzZXJuZXRzW2ldKTtcbisjZW5kaWZcbiBcdGlwX3NldF9mcmVlKHQtXHUwMDNlaHJlZ2lvbik7XG4gXHRpcF9zZXRfZnJlZSh0KTtcbiB9XG5AQCAtNDUxLDEzICs1MDIsMTQgQEAgc3RhdGljIHZvaWRcbiBtdHlwZV9kZXN0cm95KHN0cnVjdCBpcF9zZXQgKnNldClcbiB7XG4gXHRzdHJ1Y3QgaHR5cGUgKmggPSBzZXQtXHUwMDNlZGF0YTtcbitcdHN0cnVjdCBodGFibGUgKnQgPSAoX19mb3JjZSBzdHJ1Y3QgaHRhYmxlICopaC1cdTAwM2V0YWJsZTtcbiBcdHN0cnVjdCBsaXN0X2hlYWQgKmwsICpsdDtcbiBcbi1cdG10eXBlX2FoYXNoX2Rlc3Ryb3koc2V0LCAoX19mb3JjZSBzdHJ1Y3QgaHRhYmxlICopaC1cdTAwM2V0YWJsZSwgdHJ1ZSk7XG4tXHRsaXN0X2Zvcl9lYWNoX3NhZmUobCwgbHQsIFx1MDAyNmgtXHUwMDNlYWQpIHtcbitcdGxpc3RfZm9yX2VhY2hfc2FmZShsLCBsdCwgXHUwMDI2dC1cdTAwM2VhZCkge1xuIFx0XHRsaXN0X2RlbChsKTtcbiBcdFx0a2ZyZWUobCk7XG4gXHR9XG4rXHRtdHlwZV9haGFzaF9kZXN0cm95KHNldCwgdCwgdHJ1ZSk7XG4gXHRrZnJlZShoKTtcbiBcbiBcdHNldC1cdTAwM2VkYXRhID0gTlVMTDtcbkBAIC01MTQsOCArNTY2LDcgQEAgbXR5cGVfZ2NfZG8oc3RydWN0IGlwX3NldCAqc2V0LCBzdHJ1Y3QgaHR5cGUgKmgsIHN0cnVjdCBodGFibGUgKnQsIHUzMiByKVxuICNpZmRlZiBJUF9TRVRfSEFTSF9XSVRIX05FVFNcbiBcdFx0XHRmb3IgKGsgPSAwOyBrIFx1MDAzYyBJUFNFVF9ORVRfQ09VTlQ7IGsrKylcbiBcdFx0XHRcdG10eXBlX2RlbF9jaWRyKHNldCwgaCxcbi1cdFx0XHRcdFx0TkNJRFJfUFVUKERDSURSX0dFVChkYXRhLVx1MDAzZWNpZHIsIGspKSxcbi1cdFx0XHRcdFx0ayk7XG4rXHRcdFx0XHRcdERDSURSX0dFVChkYXRhLVx1MDAzZWNpZHIsIGspLCBrKTtcbiAjZW5kaWZcbiBcdFx0XHR0LVx1MDAzZWhyZWdpb25bcl0uZWxlbWVudHMtLTtcbiBcdFx0XHRpcF9zZXRfZXh0X2Rlc3Ryb3koc2V0LCBkYXRhKTtcbkBAIC01NjksOSArNjIwLDEwIEBAIG10eXBlX2djKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbiBcdHNldCA9IGdjLVx1MDAzZXNldDtcbiBcdGggPSBzZXQtXHUwMDNlZGF0YTtcbiBcbi1cdHNwaW5fbG9ja19iaChcdTAwMjZzZXQtXHUwMDNlbG9jayk7XG4tXHR0ID0gaXBzZXRfZGVyZWZlcmVuY2Vfc2V0KGgtXHUwMDNldGFibGUsIHNldCk7XG4rXHRyY3VfcmVhZF9sb2NrX2JoKCk7XG4rXHR0ID0gcmN1X2RlcmVmZXJlbmNlX2JoKGgtXHUwMDNldGFibGUpO1xuIFx0YXRvbWljX2luYyhcdTAwMjZ0LVx1MDAzZXVyZWYpO1xuK1x0cmN1X3JlYWRfdW5sb2NrX2JoKCk7XG4gXHRudW1vZl9sb2NrcyA9IGFoYXNoX251bW9mX2xvY2tzKHQtXHUwMDNlaHRhYmxlX2JpdHMpO1xuIFx0ciA9IGdjLVx1MDAzZXJlZ2lvbisrO1xuIFx0aWYgKHIgXHUwMDNlPSBudW1vZl9sb2Nrcykge1xuQEAgLTU4MCwxMSArNjMyLDEzIEBAIG10eXBlX2djKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbiBcdG5leHRfcnVuID0gKElQU0VUX0dDX1BFUklPRChzZXQtXHUwMDNldGltZW91dCkgKiBIWikgLyBudW1vZl9sb2NrcztcbiBcdGlmIChuZXh0X3J1biBcdTAwM2MgSFovMTApXG4gXHRcdG5leHRfcnVuID0gSFovMTA7XG4tXHRzcGluX3VubG9ja19iaChcdTAwMjZzZXQtXHUwMDNlbG9jayk7XG4gXG4tXHRtdHlwZV9nY19kbyhzZXQsIGgsIHQsIHIpO1xuK1x0c3Bpbl9sb2NrX2JoKFx1MDAyNmdjLVx1MDAzZWxvY2spO1xuK1x0aWYgKCF0LVx1MDAzZXJlc2l6aW5nKVxuK1x0XHRtdHlwZV9nY19kbyhzZXQsIGgsIHQsIHIpO1xuK1x0c3Bpbl91bmxvY2tfYmgoXHUwMDI2Z2MtXHUwMDNlbG9jayk7XG4gXG4tXHRpZiAoYXRvbWljX2RlY19hbmRfdGVzdChcdTAwMjZ0LVx1MDAzZXVyZWYpIFx1MDAyNlx1MDAyNiBhdG9taWNfcmVhZChcdTAwMjZ0LVx1MDAzZXJlZikpIHtcbitcdGlmIChhdG9taWNfZGVjX2FuZF90ZXN0KFx1MDAyNnQtXHUwMDNldXJlZikgXHUwMDI2XHUwMDI2IHQtXHUwMDNlcmVzaXppbmcpIHtcbiBcdFx0cHJfZGVidWcoXCJUYWJsZSBkZXN0cm95IGFmdGVyIHJlc2l6ZSBieSBleHBpcmU6ICVwXFxuXCIsIHQpO1xuIFx0XHRtdHlwZV9haGFzaF9kZXN0cm95KHNldCwgdCwgZmFsc2UpO1xuIFx0fVxuQEAgLTY2OCwxNSArNzIyLDE4IEBAIG10eXBlX3Jlc2l6ZShzdHJ1Y3QgaXBfc2V0ICpzZXQsIGJvb2wgcmV0cmllZClcbiBcdH1cbiBcdHQtXHUwMDNlaHRhYmxlX2JpdHMgPSBodGFibGVfYml0cztcbiBcdHQtXHUwMDNlbWF4ZWxlbSA9IGgtXHUwMDNlbWF4ZWxlbSAvIGFoYXNoX251bW9mX2xvY2tzKGh0YWJsZV9iaXRzKTtcbitcdElOSVRfTElTVF9IRUFEKFx1MDAyNnQtXHUwMDNlYWQpO1xuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgYWhhc2hfbnVtb2ZfbG9ja3MoaHRhYmxlX2JpdHMpOyBpKyspXG4gXHRcdHNwaW5fbG9ja19pbml0KFx1MDAyNnQtXHUwMDNlaHJlZ2lvbltpXS5sb2NrKTtcbiBcbiBcdC8qIFRoZXJlIGNhbid0IGJlIGFub3RoZXIgcGFyYWxsZWwgcmVzaXppbmcsXG4tXHQgKiBidXQgZHVtcGluZywgZ2MsIGtlcm5lbCBzaWRlIGFkZC9kZWwgYXJlIHBvc3NpYmxlXG4rXHQgKiBidXQgZHVtcGluZyBhbmQga2VybmVsIHNpZGUgYWRkL2RlbCBhcmUgcG9zc2libGVcbiBcdCAqL1xuIFx0b3JpZyA9IGlwc2V0X2RlcmVmZXJlbmNlX2JoX25mbmwoaC1cdTAwM2V0YWJsZSk7XG4tXHRhdG9taWNfc2V0KFx1MDAyNm9yaWctXHUwMDNlcmVmLCAxKTtcbiBcdGF0b21pY19pbmMoXHUwMDI2b3JpZy1cdTAwM2V1cmVmKTtcbitcdHNwaW5fbG9ja19iaChcdTAwMjZoLVx1MDAzZWdjLmxvY2spO1xuK1x0b3JpZy1cdTAwM2VyZXNpemluZyA9IHRydWU7XG4rXHRzcGluX3VubG9ja19iaChcdTAwMjZoLVx1MDAzZWdjLmxvY2spO1xuIFx0cHJfZGVidWcoXCJhdHRlbXB0IHRvIHJlc2l6ZSBzZXQgJXMgZnJvbSAldSB0byAldSwgdCAlcFxcblwiLFxuIFx0XHQgc2V0LVx1MDAzZW5hbWUsIG9yaWctXHUwMDNlaHRhYmxlX2JpdHMsIGh0YWJsZV9iaXRzLCBvcmlnKTtcbiBcdGZvciAociA9IDA7IHIgXHUwMDNjIGFoYXNoX251bW9mX2xvY2tzKG9yaWctXHUwMDNlaHRhYmxlX2JpdHMpOyByKyspIHtcbkBAIC03NjgsNyArODI1LDcgQEAgbXR5cGVfcmVzaXplKHN0cnVjdCBpcF9zZXQgKnNldCwgYm9vbCByZXRyaWVkKVxuIFx0ICogS2VybmVsLXNpZGUgYWRkIGNhbm5vdCB0cmlnZ2VyIGEgcmVzaXplIGFuZCB1c2Vyc3BhY2UgYWN0aW9uc1xuIFx0ICogYXJlIHNlcmlhbGl6ZWQgYnkgdGhlIG11dGV4LlxuIFx0ICovXG4tXHRsaXN0X2Zvcl9lYWNoX3NhZmUobCwgbHQsIFx1MDAyNmgtXHUwMDNlYWQpIHtcbitcdGxpc3RfZm9yX2VhY2hfc2FmZShsLCBsdCwgXHUwMDI2b3JpZy1cdTAwM2VhZCkge1xuIFx0XHR4ID0gbGlzdF9lbnRyeShsLCBzdHJ1Y3QgbXR5cGVfcmVzaXplX2FkLCBsaXN0KTtcbiBcdFx0aWYgKHgtXHUwMDNlYWQgPT0gSVBTRVRfQUREKSB7XG4gXHRcdFx0bXR5cGVfYWRkKHNldCwgXHUwMDI2eC1cdTAwM2VkLCBcdTAwMjZ4LVx1MDAzZWV4dCwgXHUwMDI2eC1cdTAwM2VtZXh0LCB4LVx1MDAzZWZsYWdzKTtcbkBAIC03OTIsMTEgKzg0OSwyNCBAQCBtdHlwZV9yZXNpemUoc3RydWN0IGlwX3NldCAqc2V0LCBib29sIHJldHJpZWQpXG4gXG4gY2xlYW51cDpcbiBcdHJjdV9yZWFkX3VubG9ja19iaCgpO1xuLVx0YXRvbWljX3NldChcdTAwMjZvcmlnLVx1MDAzZXJlZiwgMCk7XG4rXHRzcGluX2xvY2tfYmgoXHUwMDI2aC1cdTAwM2VnYy5sb2NrKTtcbitcdG9yaWctXHUwMDNlcmVzaXppbmcgPSBmYWxzZTtcbitcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNmgtXHUwMDNlZ2MubG9jayk7XG4rXHQvKiBNYWtlIHN1cmUgcGFyYWxsZWwgcmVhZGVycyBzZWUgdGhhdCBvcmlnLVx1MDAzZXJlc2l6aW5nIGlzIGZhbHNlXG4rXHQgKiBiZWZvcmUgd2UgZGVjcmVtZW50IHVyZWYgKi9cbitcdHN5bmNocm9uaXplX3JjdSgpO1xuIFx0YXRvbWljX2RlYyhcdTAwMjZvcmlnLVx1MDAzZXVyZWYpO1xuIFx0bXR5cGVfYWhhc2hfZGVzdHJveShzZXQsIHQsIGZhbHNlKTtcbiBcdGlmIChyZXQgPT0gLUVBR0FJTilcbiBcdFx0Z290byByZXRyeTtcbitcbitcdC8qIENsZWFudXAgdGhlIGJhY2tsb2cgb2YgQUREL0RFTCBlbGVtZW50cyAqL1xuK1x0c3Bpbl9sb2NrX2JoKFx1MDAyNnNldC1cdTAwM2Vsb2NrKTtcbitcdGxpc3RfZm9yX2VhY2hfc2FmZShsLCBsdCwgXHUwMDI2b3JpZy1cdTAwM2VhZCkge1xuK1x0XHRsaXN0X2RlbChsKTtcbitcdFx0a2ZyZWUobCk7XG4rXHR9XG4rXHRzcGluX3VubG9ja19iaChcdTAwMjZzZXQtXHUwMDNlbG9jayk7XG4gXHRnb3RvIG91dDtcbiBcbiBoYndhcm46XG5AQCAtODYwLDE1ICs5MzAsMTMgQEAgbXR5cGVfYWRkKHN0cnVjdCBpcF9zZXQgKnNldCwgdm9pZCAqdmFsdWUsIGNvbnN0IHN0cnVjdCBpcF9zZXRfZXh0ICpleHQsXG4gXHRrZXkgPSBIS0VZKHZhbHVlLCBoLVx1MDAzZWluaXR2YWwsIHQtXHUwMDNlaHRhYmxlX2JpdHMpO1xuIFx0ciA9IGFoYXNoX3JlZ2lvbihrZXkpO1xuIFx0YXRvbWljX2luYyhcdTAwMjZ0LVx1MDAzZXVyZWYpO1xuK1x0cmN1X3JlYWRfdW5sb2NrX2JoKCk7XG4gXHRlbGVtZW50cyA9IHQtXHUwMDNlaHJlZ2lvbltyXS5lbGVtZW50cztcbiBcdG1heGVsZW0gPSB0LVx1MDAzZW1heGVsZW07XG4gXHRpZiAoZWxlbWVudHMgXHUwMDNlPSBtYXhlbGVtKSB7XG4gXHRcdHUzMiBlO1xuLVx0XHRpZiAoU0VUX1dJVEhfVElNRU9VVChzZXQpKSB7XG4tXHRcdFx0cmN1X3JlYWRfdW5sb2NrX2JoKCk7XG4rXHRcdGlmIChTRVRfV0lUSF9USU1FT1VUKHNldCkpXG4gXHRcdFx0bXR5cGVfZ2NfZG8oc2V0LCBoLCB0LCByKTtcbi1cdFx0XHRyY3VfcmVhZF9sb2NrX2JoKCk7XG4tXHRcdH1cbiBcdFx0bWF4ZWxlbSA9IGgtXHUwMDNlbWF4ZWxlbTtcbiBcdFx0ZWxlbWVudHMgPSAwO1xuIFx0XHRmb3IgKGUgPSAwOyBlIFx1MDAzYyBhaGFzaF9udW1vZl9sb2Nrcyh0LVx1MDAzZWh0YWJsZV9iaXRzKTsgZSsrKVxuQEAgLTg3Niw3ICs5NDQsNiBAQCBtdHlwZV9hZGQoc3RydWN0IGlwX3NldCAqc2V0LCB2b2lkICp2YWx1ZSwgY29uc3Qgc3RydWN0IGlwX3NldF9leHQgKmV4dCxcbiBcdFx0aWYgKGVsZW1lbnRzIFx1MDAzZT0gbWF4ZWxlbSBcdTAwMjZcdTAwMjYgU0VUX1dJVEhfRk9SQ0VBREQoc2V0KSlcbiBcdFx0XHRmb3JjZWFkZCA9IHRydWU7XG4gXHR9XG4tXHRyY3VfcmVhZF91bmxvY2tfYmgoKTtcbiBcbiBcdHNwaW5fbG9ja19iaChcdTAwMjZ0LVx1MDAzZWhyZWdpb25bcl0ubG9jayk7XG4gXHRuID0gcmN1X2RlcmVmZXJlbmNlX2JoKGhidWNrZXQodCwga2V5KSk7XG5AQCAtOTI5LDggKzk5Niw3IEBAIG10eXBlX2FkZChzdHJ1Y3QgaXBfc2V0ICpzZXQsIHZvaWQgKnZhbHVlLCBjb25zdCBzdHJ1Y3QgaXBfc2V0X2V4dCAqZXh0LFxuICNpZmRlZiBJUF9TRVRfSEFTSF9XSVRIX05FVFNcbiBcdFx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBJUFNFVF9ORVRfQ09VTlQ7IGkrKylcbiBcdFx0XHRcdG10eXBlX2RlbF9jaWRyKHNldCwgaCxcbi1cdFx0XHRcdFx0TkNJRFJfUFVUKERDSURSX0dFVChkYXRhLVx1MDAzZWNpZHIsIGkpKSxcbi1cdFx0XHRcdFx0aSk7XG4rXHRcdFx0XHRcdERDSURSX0dFVChkYXRhLVx1MDAzZWNpZHIsIGkpLCBpKTtcbiAjZW5kaWZcbiBcdFx0XHRpcF9zZXRfZXh0X2Rlc3Ryb3koc2V0LCBkYXRhKTtcbiBcdFx0XHR0LVx1MDAzZWhyZWdpb25bcl0uZWxlbWVudHMtLTtcbkBAIC05NzUsNyArMTA0MSw3IEBAIG10eXBlX2FkZChzdHJ1Y3QgaXBfc2V0ICpzZXQsIHZvaWQgKnZhbHVlLCBjb25zdCBzdHJ1Y3QgaXBfc2V0X2V4dCAqZXh0LFxuIFx0dC1cdTAwM2VocmVnaW9uW3JdLmVsZW1lbnRzKys7XG4gI2lmZGVmIElQX1NFVF9IQVNIX1dJVEhfTkVUU1xuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgSVBTRVRfTkVUX0NPVU5UOyBpKyspXG4tXHRcdG10eXBlX2FkZF9jaWRyKHNldCwgaCwgTkNJRFJfUFVUKERDSURSX0dFVChkLVx1MDAzZWNpZHIsIGkpKSwgaSk7XG4rXHRcdG10eXBlX2FkZF9jaWRyKHNldCwgaCwgRENJRFJfR0VUKGQtXHUwMDNlY2lkciwgaSksIGkpO1xuICNlbmRpZlxuIFx0bWVtY3B5KGRhdGEsIGQsIHNpemVvZihzdHJ1Y3QgbXR5cGVfZWxlbSkpO1xuIG92ZXJ3cml0ZV9leHRlbnNpb25zOlxuQEAgLTEwMDMsNyArMTA2OSw3IEBAIG10eXBlX2FkZChzdHJ1Y3QgaXBfc2V0ICpzZXQsIHZvaWQgKnZhbHVlLCBjb25zdCBzdHJ1Y3QgaXBfc2V0X2V4dCAqZXh0LFxuIFx0cmV0ID0gMDtcbiByZXNpemU6XG4gXHRzcGluX3VubG9ja19iaChcdTAwMjZ0LVx1MDAzZWhyZWdpb25bcl0ubG9jayk7XG4tXHRpZiAoYXRvbWljX3JlYWQoXHUwMDI2dC1cdTAwM2VyZWYpIFx1MDAyNlx1MDAyNiBleHQtXHUwMDNldGFyZ2V0KSB7XG4rXHRpZiAodC1cdTAwM2VyZXNpemluZyBcdTAwMjZcdTAwMjYgZXh0IFx1MDAyNlx1MDAyNiBleHQtXHUwMDNldGFyZ2V0KSB7XG4gXHRcdC8qIFJlc2l6ZSBpcyBpbiBwcm9jZXNzIGFuZCBrZXJuZWwgc2lkZSBhZGQsIHNhdmUgdmFsdWVzICovXG4gXHRcdHN0cnVjdCBtdHlwZV9yZXNpemVfYWQgKng7XG4gXG5AQCAtMTAxNyw3ICsxMDgzLDcgQEAgbXR5cGVfYWRkKHN0cnVjdCBpcF9zZXQgKnNldCwgdm9pZCAqdmFsdWUsIGNvbnN0IHN0cnVjdCBpcF9zZXRfZXh0ICpleHQsXG4gXHRcdG1lbWNweShcdTAwMjZ4LVx1MDAzZW1leHQsIG1leHQsIHNpemVvZihzdHJ1Y3QgaXBfc2V0X2V4dCkpO1xuIFx0XHR4LVx1MDAzZWZsYWdzID0gZmxhZ3M7XG4gXHRcdHNwaW5fbG9ja19iaChcdTAwMjZzZXQtXHUwMDNlbG9jayk7XG4tXHRcdGxpc3RfYWRkX3RhaWwoXHUwMDI2eC1cdTAwM2VsaXN0LCBcdTAwMjZoLVx1MDAzZWFkKTtcbitcdFx0bGlzdF9hZGRfdGFpbChcdTAwMjZ4LVx1MDAzZWxpc3QsIFx1MDAyNnQtXHUwMDNlYWQpO1xuIFx0XHRzcGluX3VubG9ja19iaChcdTAwMjZzZXQtXHUwMDNlbG9jayk7XG4gXHR9XG4gXHRnb3RvIG91dDtcbkBAIC0xMDMwLDcgKzEwOTYsNyBAQCBtdHlwZV9hZGQoc3RydWN0IGlwX3NldCAqc2V0LCB2b2lkICp2YWx1ZSwgY29uc3Qgc3RydWN0IGlwX3NldF9leHQgKmV4dCxcbiB1bmxvY2s6XG4gXHRzcGluX3VubG9ja19iaChcdTAwMjZ0LVx1MDAzZWhyZWdpb25bcl0ubG9jayk7XG4gb3V0OlxuLVx0aWYgKGF0b21pY19kZWNfYW5kX3Rlc3QoXHUwMDI2dC1cdTAwM2V1cmVmKSBcdTAwMjZcdTAwMjYgYXRvbWljX3JlYWQoXHUwMDI2dC1cdTAwM2VyZWYpKSB7XG4rXHRpZiAoYXRvbWljX2RlY19hbmRfdGVzdChcdTAwMjZ0LVx1MDAzZXVyZWYpIFx1MDAyNlx1MDAyNiB0LVx1MDAzZXJlc2l6aW5nKSB7XG4gXHRcdHByX2RlYnVnKFwiVGFibGUgZGVzdHJveSBhZnRlciByZXNpemUgYnkgYWRkOiAlcFxcblwiLCB0KTtcbiBcdFx0bXR5cGVfYWhhc2hfZGVzdHJveShzZXQsIHQsIGZhbHNlKTtcbiBcdH1cbkBAIC0xMDg5LDExICsxMTU1LDExIEBAIG10eXBlX2RlbChzdHJ1Y3QgaXBfc2V0ICpzZXQsIHZvaWQgKnZhbHVlLCBjb25zdCBzdHJ1Y3QgaXBfc2V0X2V4dCAqZXh0LFxuICNpZmRlZiBJUF9TRVRfSEFTSF9XSVRIX05FVFNcbiBcdFx0Zm9yIChqID0gMDsgaiBcdTAwM2MgSVBTRVRfTkVUX0NPVU5UOyBqKyspXG4gXHRcdFx0bXR5cGVfZGVsX2NpZHIoc2V0LCBoLFxuLVx0XHRcdFx0ICAgICAgIE5DSURSX1BVVChEQ0lEUl9HRVQoZC1cdTAwM2VjaWRyLCBqKSksIGopO1xuK1x0XHRcdFx0RENJRFJfR0VUKGQtXHUwMDNlY2lkciwgaiksIGopO1xuICNlbmRpZlxuIFx0XHRpcF9zZXRfZXh0X2Rlc3Ryb3koc2V0LCBkYXRhKTtcbiBcbi1cdFx0aWYgKGF0b21pY19yZWFkKFx1MDAyNnQtXHUwMDNlcmVmKSBcdTAwMjZcdTAwMjYgZXh0LVx1MDAzZXRhcmdldCkge1xuK1x0XHRpZiAodC1cdTAwM2VyZXNpemluZyBcdTAwMjZcdTAwMjYgZXh0IFx1MDAyNlx1MDAyNiBleHQtXHUwMDNldGFyZ2V0KSB7XG4gXHRcdFx0LyogUmVzaXplIGlzIGluIHByb2Nlc3MgYW5kIGtlcm5lbCBzaWRlIGRlbCxcbiBcdFx0XHQgKiBzYXZlIHZhbHVlc1xuIFx0XHRcdCAqL1xuQEAgLTExNDEsMTAgKzEyMDcsMTAgQEAgbXR5cGVfZGVsKHN0cnVjdCBpcF9zZXQgKnNldCwgdm9pZCAqdmFsdWUsIGNvbnN0IHN0cnVjdCBpcF9zZXRfZXh0ICpleHQsXG4gXHRzcGluX3VubG9ja19iaChcdTAwMjZ0LVx1MDAzZWhyZWdpb25bcl0ubG9jayk7XG4gXHRpZiAoeCkge1xuIFx0XHRzcGluX2xvY2tfYmgoXHUwMDI2c2V0LVx1MDAzZWxvY2spO1xuLVx0XHRsaXN0X2FkZChcdTAwMjZ4LVx1MDAzZWxpc3QsIFx1MDAyNmgtXHUwMDNlYWQpO1xuK1x0XHRsaXN0X2FkZChcdTAwMjZ4LVx1MDAzZWxpc3QsIFx1MDAyNnQtXHUwMDNlYWQpO1xuIFx0XHRzcGluX3VubG9ja19iaChcdTAwMjZzZXQtXHUwMDNlbG9jayk7XG4gXHR9XG4tXHRpZiAoYXRvbWljX2RlY19hbmRfdGVzdChcdTAwMjZ0LVx1MDAzZXVyZWYpIFx1MDAyNlx1MDAyNiBhdG9taWNfcmVhZChcdTAwMjZ0LVx1MDAzZXJlZikpIHtcbitcdGlmIChhdG9taWNfZGVjX2FuZF90ZXN0KFx1MDAyNnQtXHUwMDNldXJlZikgXHUwMDI2XHUwMDI2IHQtXHUwMDNlcmVzaXppbmcpIHtcbiBcdFx0cHJfZGVidWcoXCJUYWJsZSBkZXN0cm95IGFmdGVyIHJlc2l6ZSBieSBkZWw6ICVwXFxuXCIsIHQpO1xuIFx0XHRtdHlwZV9haGFzaF9kZXN0cm95KHNldCwgdCwgZmFsc2UpO1xuIFx0fVxuQEAgLTExNzIsMjggKzEyMzgsMzcgQEAgbXR5cGVfdGVzdF9jaWRycyhzdHJ1Y3QgaXBfc2V0ICpzZXQsIHN0cnVjdCBtdHlwZV9lbGVtICpkLFxuIHtcbiBcdHN0cnVjdCBodHlwZSAqaCA9IHNldC1cdTAwM2VkYXRhO1xuIFx0c3RydWN0IGh0YWJsZSAqdCA9IHJjdV9kZXJlZmVyZW5jZV9iaChoLVx1MDAzZXRhYmxlKTtcbitcdHN0cnVjdCBuZXRfcHJlZml4ZXMgKm5ldHMwO1xuIFx0c3RydWN0IGhidWNrZXQgKm47XG4gXHRzdHJ1Y3QgbXR5cGVfZWxlbSAqZGF0YTtcbiAjaWYgSVBTRVRfTkVUX0NPVU5UID09IDJcbitcdHN0cnVjdCBuZXRfcHJlZml4ZXMgKm5ldHMxO1xuIFx0c3RydWN0IG10eXBlX2VsZW0gb3JpZyA9ICpkO1xuLVx0aW50IHJldCwgaSwgaiA9IDAsIGs7XG4rXHRpbnQgcmV0LCBpLCBqLCBrO1xuICNlbHNlXG4tXHRpbnQgcmV0LCBpLCBqID0gMDtcbitcdGludCByZXQsIGksIGo7XG4gI2VuZGlmXG4gXHR1MzIga2V5LCBtdWx0aSA9IDA7XG4gXHR1OCBwb3M7XG4gXG4gXHRwcl9kZWJ1ZyhcInRlc3QgYnkgbmV0c1xcblwiKTtcbi1cdGZvciAoOyBqIFx1MDAzYyBOTEVOIFx1MDAyNlx1MDAyNiBoLVx1MDAzZW5ldHNbal0uY2lkclswXSBcdTAwMjZcdTAwMjYgIW11bHRpOyBqKyspIHtcbitcdHJjdV9yZWFkX2xvY2tfYmgoKTtcbitcdG5ldHMwID0gcmN1X2RlcmVmZXJlbmNlX2JoKGgtXHUwMDNlcm5ldHNbMF0pO1xuKyNpZiBJUFNFVF9ORVRfQ09VTlQgPT0gMlxuK1x0bmV0czEgPSByY3VfZGVyZWZlcmVuY2VfYmgoaC1cdTAwM2VybmV0c1sxXSk7XG4rI2VuZGlmXG4rXHRmb3IgKGogPSAwOyBqIFx1MDAzYyBuZXRzMC1cdTAwM2VsZW4gXHUwMDI2XHUwMDI2ICFtdWx0aTsgaisrKSB7XG4rXHRcdGlmICghbmV0czAtXHUwMDNlbmV0c1tqXS5jb3VudClcbitcdFx0XHRjb250aW51ZTtcbiAjaWYgSVBTRVRfTkVUX0NPVU5UID09IDJcbiBcdFx0bXR5cGVfZGF0YV9yZXNldF9lbGVtKGQsIFx1MDAyNm9yaWcpO1xuLVx0XHRtdHlwZV9kYXRhX25ldG1hc2soZCwgTkNJRFJfR0VUKGgtXHUwMDNlbmV0c1tqXS5jaWRyWzBdKSwgZmFsc2UpO1xuLVx0XHRmb3IgKGsgPSAwOyBrIFx1MDAzYyBOTEVOIFx1MDAyNlx1MDAyNiBoLVx1MDAzZW5ldHNba10uY2lkclsxXSBcdTAwMjZcdTAwMjYgIW11bHRpO1xuLVx0XHQgICAgIGsrKykge1xuLVx0XHRcdG10eXBlX2RhdGFfbmV0bWFzayhkLCBOQ0lEUl9HRVQoaC1cdTAwM2VuZXRzW2tdLmNpZHJbMV0pLFxuLVx0XHRcdFx0XHQgICB0cnVlKTtcbitcdFx0bXR5cGVfZGF0YV9uZXRtYXNrKGQsIG5ldHMwLVx1MDAzZW5ldHNbal0uY2lkciwgZmFsc2UpO1xuK1x0XHRmb3IgKGsgPSAwOyBrIFx1MDAzYyBuZXRzMS1cdTAwM2VsZW4gXHUwMDI2XHUwMDI2ICFtdWx0aTsgaysrKSB7XG4rXHRcdFx0aWYgKCFuZXRzMS1cdTAwM2VuZXRzW2tdLmNvdW50KVxuK1x0XHRcdFx0Y29udGludWU7XG4rXHRcdFx0bXR5cGVfZGF0YV9uZXRtYXNrKGQsIG5ldHMxLVx1MDAzZW5ldHNba10uY2lkciwgdHJ1ZSk7XG4gI2Vsc2Vcbi1cdFx0bXR5cGVfZGF0YV9uZXRtYXNrKGQsIE5DSURSX0dFVChoLVx1MDAzZW5ldHNbal0uY2lkclswXSkpO1xuK1x0XHRtdHlwZV9kYXRhX25ldG1hc2soZCwgbmV0czAtXHUwMDNlbmV0c1tqXS5jaWRyKTtcbiAjZW5kaWZcbiBcdFx0a2V5ID0gSEtFWShkLCBoLVx1MDAzZWluaXR2YWwsIHQtXHUwMDNlaHRhYmxlX2JpdHMpO1xuIFx0XHRuID0gcmN1X2RlcmVmZXJlbmNlX2JoKGhidWNrZXQodCwga2V5KSk7XG5AQCAtMTIwOCw3ICsxMjgzLDcgQEAgbXR5cGVfdGVzdF9jaWRycyhzdHJ1Y3QgaXBfc2V0ICpzZXQsIHN0cnVjdCBtdHlwZV9lbGVtICpkLFxuIFx0XHRcdFx0Y29udGludWU7XG4gXHRcdFx0cmV0ID0gbXR5cGVfZGF0YV9tYXRjaChkYXRhLCBleHQsIG1leHQsIHNldCwgZmxhZ3MpO1xuIFx0XHRcdGlmIChyZXQgIT0gMClcbi1cdFx0XHRcdHJldHVybiByZXQ7XG4rXHRcdFx0XHRnb3RvIHVubG9jaztcbiAjaWZkZWYgSVBfU0VUX0hBU0hfV0lUSF9NVUxUSVxuIFx0XHRcdC8qIE5vIG1hdGNoLCByZXNldCBtdWx0aXBsZSBtYXRjaCBmbGFnICovXG4gXHRcdFx0bXVsdGkgPSAwO1xuQEAgLTEyMTgsNyArMTI5MywxMCBAQCBtdHlwZV90ZXN0X2NpZHJzKHN0cnVjdCBpcF9zZXQgKnNldCwgc3RydWN0IG10eXBlX2VsZW0gKmQsXG4gXHRcdH1cbiAjZW5kaWZcbiBcdH1cbi1cdHJldHVybiAwO1xuK1x0cmV0ID0gMDtcbit1bmxvY2s6XG4rXHRyY3VfcmVhZF91bmxvY2tfYmgoKTtcbitcdHJldHVybiByZXQ7XG4gfVxuICNlbmRpZlxuIFxuQEAgLTEzNTMsNyArMTQzMSw3IEBAIG10eXBlX3VyZWYoc3RydWN0IGlwX3NldCAqc2V0LCBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IsIGJvb2wgc3RhcnQpXG4gXHRcdHJjdV9yZWFkX3VubG9ja19iaCgpO1xuIFx0fSBlbHNlIGlmIChjYi1cdTAwM2VhcmdzW0lQU0VUX0NCX1BSSVZBVEVdKSB7XG4gXHRcdHQgPSAoc3RydWN0IGh0YWJsZSAqKWNiLVx1MDAzZWFyZ3NbSVBTRVRfQ0JfUFJJVkFURV07XG4tXHRcdGlmIChhdG9taWNfZGVjX2FuZF90ZXN0KFx1MDAyNnQtXHUwMDNldXJlZikgXHUwMDI2XHUwMDI2IGF0b21pY19yZWFkKFx1MDAyNnQtXHUwMDNlcmVmKSkge1xuK1x0XHRpZiAoYXRvbWljX2RlY19hbmRfdGVzdChcdTAwMjZ0LVx1MDAzZXVyZWYpIFx1MDAyNlx1MDAyNiB0LVx1MDAzZXJlc2l6aW5nKSB7XG4gXHRcdFx0cHJfZGVidWcoXCJUYWJsZSBkZXN0cm95IGFmdGVyIHJlc2l6ZSBcIlxuIFx0XHRcdFx0IFwiIGJ5IGR1bXA6ICVwXFxuXCIsIHQpO1xuIFx0XHRcdG10eXBlX2FoYXNoX2Rlc3Ryb3koc2V0LCB0LCBmYWxzZSk7XG5AQCAtMTQ4Myw2ICsxNTYxLDkgQEAgSVBTRVRfVE9LRU4oSFRZUEUsIF9jcmVhdGUpKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGlwX3NldCAqc2V0LFxuIFx0aW50IHJldCBfX2F0dHJpYnV0ZV9fKCh1bnVzZWQpKSA9IDA7XG4gXHR1OCBuZXRtYXNrID0gc2V0LVx1MDAzZWZhbWlseSA9PSBORlBST1RPX0lQVjQgPyAzMiA6IDEyODtcbiBcdHVuaW9uIG5mX2luZXRfYWRkciBiaXRtYXNrID0gb25lc21hc2s7XG4rI2VuZGlmXG4rI2lmZGVmIElQX1NFVF9IQVNIX1dJVEhfTkVUU1xuK1x0c3RydWN0IG5ldF9wcmVmaXhlcyAqbmV0cztcbiAjZW5kaWZcbiBcdHNpemVfdCBoc2l6ZTtcbiBcdHN0cnVjdCBodHlwZSAqaDtcbkBAIC0xNTY2LDcgKzE2NDcsMTMgQEAgSVBTRVRfVE9LRU4oSFRZUEUsIF9jcmVhdGUpKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGlwX3NldCAqc2V0LFxuIFx0aWYgKHRiW0lQU0VUX0FUVFJfTUFYRUxFTV0pXG4gXHRcdG1heGVsZW0gPSBpcF9zZXRfZ2V0X2gzMih0YltJUFNFVF9BVFRSX01BWEVMRU1dKTtcbiBcbi1cdGhzaXplID0gc2l6ZW9mKCpoKTtcbisjaWZkZWYgSVBfU0VUX1BST1RPX1VOREVGXG4rXHRoc2l6ZSA9IHNpemVvZihzdHJ1Y3QgaHR5cGUpO1xuKyNlbHNlXG4rXHRoc2l6ZSA9IHNldC1cdTAwM2VmYW1pbHkgPT0gTkZQUk9UT19JUFY2ID9cbitcdFx0c2l6ZW9mKHN0cnVjdCBJUFNFVF9UT0tFTihIVFlQRSwgNikpIDpcbitcdFx0c2l6ZW9mKHN0cnVjdCBJUFNFVF9UT0tFTihIVFlQRSwgNCkpO1xuKyNlbmRpZlxuIFx0aCA9IGt6YWxsb2MoaHNpemUsIEdGUF9LRVJORUwpO1xuIFx0aWYgKCFoKVxuIFx0XHRyZXR1cm4gLUVOT01FTTtcbkBAIC0xNTc3LDIyICsxNjY0LDI3IEBAIElQU0VUX1RPS0VOKEhUWVBFLCBfY3JlYXRlKShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBpcF9zZXQgKnNldCxcbiBcdCAqL1xuIFx0aGJpdHMgPSBmbHMoaGFzaHNpemUgLSAxKTtcbiBcdGhzaXplID0gaHRhYmxlX3NpemUoaGJpdHMpO1xuLVx0aWYgKGhzaXplID09IDApIHtcbi1cdFx0a2ZyZWUoaCk7XG4tXHRcdHJldHVybiAtRU5PTUVNO1xuLVx0fVxuK1x0aWYgKGhzaXplID09IDApXG4rXHRcdGdvdG8gZnJlZV9oO1xuIFx0dCA9IGlwX3NldF9hbGxvYyhoc2l6ZSk7XG4tXHRpZiAoIXQpIHtcbi1cdFx0a2ZyZWUoaCk7XG4tXHRcdHJldHVybiAtRU5PTUVNO1xuLVx0fVxuK1x0aWYgKCF0KVxuK1x0XHRnb3RvIGZyZWVfaDtcbiBcdHQtXHUwMDNlaHJlZ2lvbiA9IGlwX3NldF9hbGxvYyhhaGFzaF9zaXplb2ZfcmVnaW9ucyhoYml0cykpO1xuLVx0aWYgKCF0LVx1MDAzZWhyZWdpb24pIHtcbi1cdFx0aXBfc2V0X2ZyZWUodCk7XG4tXHRcdGtmcmVlKGgpO1xuLVx0XHRyZXR1cm4gLUVOT01FTTtcbitcdGlmICghdC1cdTAwM2VocmVnaW9uKVxuK1x0XHRnb3RvIGZyZWVfdDtcbisjaWZkZWYgSVBfU0VUX0hBU0hfV0lUSF9ORVRTXG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBJUFNFVF9ORVRfQ09VTlQ7IGkrKykge1xuK1x0XHRuZXRzID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IG5ldF9wcmVmaXhlcyksIEdGUF9LRVJORUwpO1xuK1x0XHRpZiAoIW5ldHMpIHtcbitcdFx0XHRpZiAoaSAhPSAwKVxuK1x0XHRcdFx0a2ZyZWUoaC1cdTAwM2VybmV0c1swXSk7XG4rXHRcdFx0Z290byBmcmVlX2hyZWdpb247XG4rXHRcdH1cbitcdFx0UkNVX0lOSVRfUE9JTlRFUihoLVx1MDAzZXJuZXRzW2ldLCBuZXRzKTtcbiBcdH1cbisjZW5kaWZcbiBcdGgtXHUwMDNlZ2Muc2V0ID0gc2V0O1xuK1x0c3Bpbl9sb2NrX2luaXQoXHUwMDI2aC1cdTAwM2VnYy5sb2NrKTtcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGFoYXNoX251bW9mX2xvY2tzKGhiaXRzKTsgaSsrKVxuIFx0XHRzcGluX2xvY2tfaW5pdChcdTAwMjZ0LVx1MDAzZWhyZWdpb25baV0ubG9jayk7XG4gXHRoLVx1MDAzZW1heGVsZW0gPSBtYXhlbGVtO1xuQEAgLTE2MTksOSArMTcxMSw4IEBAIElQU0VUX1RPS0VOKEhUWVBFLCBfY3JlYXRlKShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBpcF9zZXQgKnNldCxcbiBcdH1cbiBcdHQtXHUwMDNlaHRhYmxlX2JpdHMgPSBoYml0cztcbiBcdHQtXHUwMDNlbWF4ZWxlbSA9IGgtXHUwMDNlbWF4ZWxlbSAvIGFoYXNoX251bW9mX2xvY2tzKGhiaXRzKTtcbitcdElOSVRfTElTVF9IRUFEKFx1MDAyNnQtXHUwMDNlYWQpO1xuIFx0UkNVX0lOSVRfUE9JTlRFUihoLVx1MDAzZXRhYmxlLCB0KTtcbi1cbi1cdElOSVRfTElTVF9IRUFEKFx1MDAyNmgtXHUwMDNlYWQpO1xuIFx0c2V0LVx1MDAzZWRhdGEgPSBoO1xuICNpZm5kZWYgSVBfU0VUX1BST1RPX1VOREVGXG4gXHRpZiAoc2V0LVx1MDAzZWZhbWlseSA9PSBORlBST1RPX0lQVjQpIHtcbkBAIC0xNjU1LDYgKzE3NDYsMTYgQEAgSVBTRVRfVE9LRU4oSFRZUEUsIF9jcmVhdGUpKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGlwX3NldCAqc2V0LFxuIFx0XHQgdC1cdTAwM2VodGFibGVfYml0cywgaC1cdTAwM2VtYXhlbGVtLCBzZXQtXHUwMDNlZGF0YSwgdCk7XG4gXG4gXHRyZXR1cm4gMDtcbitcbisjaWZkZWYgSVBfU0VUX0hBU0hfV0lUSF9ORVRTXG4rZnJlZV9ocmVnaW9uOlxuK1x0aXBfc2V0X2ZyZWUodC1cdTAwM2VocmVnaW9uKTtcbisjZW5kaWZcbitmcmVlX3Q6XG4rXHRpcF9zZXRfZnJlZSh0KTtcbitmcmVlX2g6XG4rXHRrZnJlZShoKTtcbitcdHJldHVybiAtRU5PTUVNO1xuIH1cbiAjZW5kaWYgLyogSVBfU0VUX0VNSVRfQ1JFQVRFICovXG4gXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcHBvcnRuZXQuYyBiL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0bmV0LmNcbmluZGV4IDJkNjY1MmQ0MzE5OWE0Li4xOTU4NTNhMjViMDYwNiAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0bmV0LmNcbisrKyBiL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0bmV0LmNcbkBAIC0xMzgsNyArMTM4LDcgQEAgaGFzaF9pcHBvcnRuZXQ0X2thZHQoc3RydWN0IGlwX3NldCAqc2V0LCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0Y29uc3Qgc3RydWN0IGhhc2hfaXBwb3J0bmV0NCAqaCA9IHNldC1cdTAwM2VkYXRhO1xuIFx0aXBzZXRfYWR0Zm4gYWR0Zm4gPSBzZXQtXHUwMDNldmFyaWFudC1cdTAwM2VhZHRbYWR0XTtcbiBcdHN0cnVjdCBoYXNoX2lwcG9ydG5ldDRfZWxlbSBlID0ge1xuLVx0XHQuY2lkciA9IElOSVRfQ0lEUihoLVx1MDAzZW5ldHNbMF0uY2lkclswXSwgSE9TVF9NQVNLKSxcbitcdFx0LmNpZHIgPSBJTklUX0NJRFIoaC1cdTAwM2VybmV0c1swXSwgSE9TVF9NQVNLKSxcbiBcdH07XG4gXHRzdHJ1Y3QgaXBfc2V0X2V4dCBleHQgPSBJUF9TRVRfSU5JVF9LRVhUKHNrYiwgb3B0LCBzZXQpO1xuIFxuQEAgLTM5OCw3ICszOTgsNyBAQCBoYXNoX2lwcG9ydG5ldDZfa2FkdChzdHJ1Y3QgaXBfc2V0ICpzZXQsIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXG4gXHRjb25zdCBzdHJ1Y3QgaGFzaF9pcHBvcnRuZXQ2ICpoID0gc2V0LVx1MDAzZWRhdGE7XG4gXHRpcHNldF9hZHRmbiBhZHRmbiA9IHNldC1cdTAwM2V2YXJpYW50LVx1MDAzZWFkdFthZHRdO1xuIFx0c3RydWN0IGhhc2hfaXBwb3J0bmV0Nl9lbGVtIGUgPSB7XG4tXHRcdC5jaWRyID0gSU5JVF9DSURSKGgtXHUwMDNlbmV0c1swXS5jaWRyWzBdLCBIT1NUX01BU0spLFxuK1x0XHQuY2lkciA9IElOSVRfQ0lEUihoLVx1MDAzZXJuZXRzWzBdLCBIT1NUX01BU0spLFxuIFx0fTtcbiBcdHN0cnVjdCBpcF9zZXRfZXh0IGV4dCA9IElQX1NFVF9JTklUX0tFWFQoc2tiLCBvcHQsIHNldCk7XG4gXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXQuYyBiL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0LmNcbmluZGV4IGNlMGE5Y2U1YTkxZjFhLi4wOTJmM2M5MjgxYjgwZiAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0LmNcbisrKyBiL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0LmNcbkBAIC0xMTcsNyArMTE3LDcgQEAgaGFzaF9uZXQ0X2thZHQoc3RydWN0IGlwX3NldCAqc2V0LCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0Y29uc3Qgc3RydWN0IGhhc2hfbmV0NCAqaCA9IHNldC1cdTAwM2VkYXRhO1xuIFx0aXBzZXRfYWR0Zm4gYWR0Zm4gPSBzZXQtXHUwMDNldmFyaWFudC1cdTAwM2VhZHRbYWR0XTtcbiBcdHN0cnVjdCBoYXNoX25ldDRfZWxlbSBlID0ge1xuLVx0XHQuY2lkciA9IElOSVRfQ0lEUihoLVx1MDAzZW5ldHNbMF0uY2lkclswXSwgSE9TVF9NQVNLKSxcbitcdFx0LmNpZHIgPSBJTklUX0NJRFIoaC1cdTAwM2VybmV0c1swXSwgSE9TVF9NQVNLKSxcbiBcdH07XG4gXHRzdHJ1Y3QgaXBfc2V0X2V4dCBleHQgPSBJUF9TRVRfSU5JVF9LRVhUKHNrYiwgb3B0LCBzZXQpO1xuIFxuQEAgLTI5MSw3ICsyOTEsNyBAQCBoYXNoX25ldDZfa2FkdChzdHJ1Y3QgaXBfc2V0ICpzZXQsIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXG4gXHRjb25zdCBzdHJ1Y3QgaGFzaF9uZXQ2ICpoID0gc2V0LVx1MDAzZWRhdGE7XG4gXHRpcHNldF9hZHRmbiBhZHRmbiA9IHNldC1cdTAwM2V2YXJpYW50LVx1MDAzZWFkdFthZHRdO1xuIFx0c3RydWN0IGhhc2hfbmV0Nl9lbGVtIGUgPSB7XG4tXHRcdC5jaWRyID0gSU5JVF9DSURSKGgtXHUwMDNlbmV0c1swXS5jaWRyWzBdLCBIT1NUX01BU0spLFxuK1x0XHQuY2lkciA9IElOSVRfQ0lEUihoLVx1MDAzZXJuZXRzWzBdLCBIT1NUX01BU0spLFxuIFx0fTtcbiBcdHN0cnVjdCBpcF9zZXRfZXh0IGV4dCA9IElQX1NFVF9JTklUX0tFWFQoc2tiLCBvcHQsIHNldCk7XG4gXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRpZmFjZS5jIGIvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRpZmFjZS5jXG5pbmRleCAzMGE2NTVlNWM0ZmRjZC4uYjQ0Yjk1Zjc2NmI3YWQgMTAwNjQ0XG4tLS0gYS9uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldGlmYWNlLmNcbisrKyBiL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0aWZhY2UuY1xuQEAgLTE2MSw3ICsxNjEsNyBAQCBoYXNoX25ldGlmYWNlNF9rYWR0KHN0cnVjdCBpcF9zZXQgKnNldCwgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdHN0cnVjdCBoYXNoX25ldGlmYWNlNCAqaCA9IHNldC1cdTAwM2VkYXRhO1xuIFx0aXBzZXRfYWR0Zm4gYWR0Zm4gPSBzZXQtXHUwMDNldmFyaWFudC1cdTAwM2VhZHRbYWR0XTtcbiBcdHN0cnVjdCBoYXNoX25ldGlmYWNlNF9lbGVtIGUgPSB7XG4tXHRcdC5jaWRyID0gSU5JVF9DSURSKGgtXHUwMDNlbmV0c1swXS5jaWRyWzBdLCBIT1NUX01BU0spLFxuK1x0XHQuY2lkciA9IElOSVRfQ0lEUihoLVx1MDAzZXJuZXRzWzBdLCBIT1NUX01BU0spLFxuIFx0XHQuZWxlbSA9IDEsXG4gXHR9O1xuIFx0c3RydWN0IGlwX3NldF9leHQgZXh0ID0gSVBfU0VUX0lOSVRfS0VYVChza2IsIG9wdCwgc2V0KTtcbkBAIC0zODIsNyArMzgyLDcgQEAgaGFzaF9uZXRpZmFjZTZfa2FkdChzdHJ1Y3QgaXBfc2V0ICpzZXQsIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXG4gXHRzdHJ1Y3QgaGFzaF9uZXRpZmFjZTYgKmggPSBzZXQtXHUwMDNlZGF0YTtcbiBcdGlwc2V0X2FkdGZuIGFkdGZuID0gc2V0LVx1MDAzZXZhcmlhbnQtXHUwMDNlYWR0W2FkdF07XG4gXHRzdHJ1Y3QgaGFzaF9uZXRpZmFjZTZfZWxlbSBlID0ge1xuLVx0XHQuY2lkciA9IElOSVRfQ0lEUihoLVx1MDAzZW5ldHNbMF0uY2lkclswXSwgSE9TVF9NQVNLKSxcbitcdFx0LmNpZHIgPSBJTklUX0NJRFIoaC1cdTAwM2VybmV0c1swXSwgSE9TVF9NQVNLKSxcbiBcdFx0LmVsZW0gPSAxLFxuIFx0fTtcbiBcdHN0cnVjdCBpcF9zZXRfZXh0IGV4dCA9IElQX1NFVF9JTklUX0tFWFQoc2tiLCBvcHQsIHNldCk7XG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRuZXQuYyBiL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0bmV0LmNcbmluZGV4IDhmYmU2NDljOWRkM2Q0Li5mN2M4YTFjYzMwZmM3YiAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0bmV0LmNcbisrKyBiL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0bmV0LmNcbkBAIC0xNDksOCArMTQ5LDEwIEBAIGhhc2hfbmV0bmV0NF9rYWR0KHN0cnVjdCBpcF9zZXQgKnNldCwgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdHN0cnVjdCBoYXNoX25ldG5ldDRfZWxlbSBlID0geyB9O1xuIFx0c3RydWN0IGlwX3NldF9leHQgZXh0ID0gSVBfU0VUX0lOSVRfS0VYVChza2IsIG9wdCwgc2V0KTtcbiBcbi1cdGUuY2lkclswXSA9IElOSVRfQ0lEUihoLVx1MDAzZW5ldHNbMF0uY2lkclswXSwgSE9TVF9NQVNLKTtcbi1cdGUuY2lkclsxXSA9IElOSVRfQ0lEUihoLVx1MDAzZW5ldHNbMF0uY2lkclsxXSwgSE9TVF9NQVNLKTtcbitcdHJjdV9yZWFkX2xvY2tfYmgoKTtcbitcdGUuY2lkclswXSA9IElOSVRfQ0lEUihoLVx1MDAzZXJuZXRzWzBdLCBIT1NUX01BU0spO1xuK1x0ZS5jaWRyWzFdID0gSU5JVF9DSURSKGgtXHUwMDNlcm5ldHNbMV0sIEhPU1RfTUFTSyk7XG4rXHRyY3VfcmVhZF91bmxvY2tfYmgoKTtcbiBcdGlmIChhZHQgPT0gSVBTRVRfVEVTVClcbiBcdFx0ZS5jY21wID0gKEhPU1RfTUFTSyBcdTAwM2NcdTAwM2MgKHNpemVvZihlLmNpZHJbMF0pICogOCkpIHwgSE9TVF9NQVNLO1xuIFxuQEAgLTM4OCw4ICszOTAsMTAgQEAgaGFzaF9uZXRuZXQ2X2thZHQoc3RydWN0IGlwX3NldCAqc2V0LCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0c3RydWN0IGhhc2hfbmV0bmV0Nl9lbGVtIGUgPSB7IH07XG4gXHRzdHJ1Y3QgaXBfc2V0X2V4dCBleHQgPSBJUF9TRVRfSU5JVF9LRVhUKHNrYiwgb3B0LCBzZXQpO1xuIFxuLVx0ZS5jaWRyWzBdID0gSU5JVF9DSURSKGgtXHUwMDNlbmV0c1swXS5jaWRyWzBdLCBIT1NUX01BU0spO1xuLVx0ZS5jaWRyWzFdID0gSU5JVF9DSURSKGgtXHUwMDNlbmV0c1swXS5jaWRyWzFdLCBIT1NUX01BU0spO1xuK1x0cmN1X3JlYWRfbG9ja19iaCgpO1xuK1x0ZS5jaWRyWzBdID0gSU5JVF9DSURSKGgtXHUwMDNlcm5ldHNbMF0sIEhPU1RfTUFTSyk7XG4rXHRlLmNpZHJbMV0gPSBJTklUX0NJRFIoaC1cdTAwM2VybmV0c1sxXSwgSE9TVF9NQVNLKTtcbitcdHJjdV9yZWFkX3VubG9ja19iaCgpO1xuIFx0aWYgKGFkdCA9PSBJUFNFVF9URVNUKVxuIFx0XHRlLmNjbXAgPSAoSE9TVF9NQVNLIFx1MDAzY1x1MDAzYyAoc2l6ZW9mKHU4KSAqIDgpKSB8IEhPU1RfTUFTSztcbiBcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldHBvcnQuYyBiL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0cG9ydC5jXG5pbmRleCBkMWEwNjI4ZGY0ZWYzYS4uNWRlNGI1MTFkZTc2MzYgMTAwNjQ0XG4tLS0gYS9uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldHBvcnQuY1xuKysrIGIvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRwb3J0LmNcbkBAIC0xMzMsNyArMTMzLDcgQEAgaGFzaF9uZXRwb3J0NF9rYWR0KHN0cnVjdCBpcF9zZXQgKnNldCwgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdGNvbnN0IHN0cnVjdCBoYXNoX25ldHBvcnQ0ICpoID0gc2V0LVx1MDAzZWRhdGE7XG4gXHRpcHNldF9hZHRmbiBhZHRmbiA9IHNldC1cdTAwM2V2YXJpYW50LVx1MDAzZWFkdFthZHRdO1xuIFx0c3RydWN0IGhhc2hfbmV0cG9ydDRfZWxlbSBlID0ge1xuLVx0XHQuY2lkciA9IElOSVRfQ0lEUihoLVx1MDAzZW5ldHNbMF0uY2lkclswXSwgSE9TVF9NQVNLKSxcbitcdFx0LmNpZHIgPSBJTklUX0NJRFIoaC1cdTAwM2VybmV0c1swXSwgSE9TVF9NQVNLKSxcbiBcdH07XG4gXHRzdHJ1Y3QgaXBfc2V0X2V4dCBleHQgPSBJUF9TRVRfSU5JVF9LRVhUKHNrYiwgb3B0LCBzZXQpO1xuIFxuQEAgLTM1Myw3ICszNTMsNyBAQCBoYXNoX25ldHBvcnQ2X2thZHQoc3RydWN0IGlwX3NldCAqc2V0LCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0Y29uc3Qgc3RydWN0IGhhc2hfbmV0cG9ydDYgKmggPSBzZXQtXHUwMDNlZGF0YTtcbiBcdGlwc2V0X2FkdGZuIGFkdGZuID0gc2V0LVx1MDAzZXZhcmlhbnQtXHUwMDNlYWR0W2FkdF07XG4gXHRzdHJ1Y3QgaGFzaF9uZXRwb3J0Nl9lbGVtIGUgPSB7XG4tXHRcdC5jaWRyID0gSU5JVF9DSURSKGgtXHUwMDNlbmV0c1swXS5jaWRyWzBdLCBIT1NUX01BU0spLFxuK1x0XHQuY2lkciA9IElOSVRfQ0lEUihoLVx1MDAzZXJuZXRzWzBdLCBIT1NUX01BU0spLFxuIFx0fTtcbiBcdHN0cnVjdCBpcF9zZXRfZXh0IGV4dCA9IElQX1NFVF9JTklUX0tFWFQoc2tiLCBvcHQsIHNldCk7XG4gXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRwb3J0bmV0LmMgYi9uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldHBvcnRuZXQuY1xuaW5kZXggYmY0ZjkxYjc4ZTFkY2IuLjYyOTE1MzJiZTdhNWEyIDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRwb3J0bmV0LmNcbisrKyBiL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0cG9ydG5ldC5jXG5AQCAtMTU3LDggKzE1NywxMCBAQCBoYXNoX25ldHBvcnRuZXQ0X2thZHQoc3RydWN0IGlwX3NldCAqc2V0LCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0c3RydWN0IGhhc2hfbmV0cG9ydG5ldDRfZWxlbSBlID0geyB9O1xuIFx0c3RydWN0IGlwX3NldF9leHQgZXh0ID0gSVBfU0VUX0lOSVRfS0VYVChza2IsIG9wdCwgc2V0KTtcbiBcbi1cdGUuY2lkclswXSA9IElOSVRfQ0lEUihoLVx1MDAzZW5ldHNbMF0uY2lkclswXSwgSE9TVF9NQVNLKTtcbi1cdGUuY2lkclsxXSA9IElOSVRfQ0lEUihoLVx1MDAzZW5ldHNbMF0uY2lkclsxXSwgSE9TVF9NQVNLKTtcbitcdHJjdV9yZWFkX2xvY2tfYmgoKTtcbitcdGUuY2lkclswXSA9IElOSVRfQ0lEUihoLVx1MDAzZXJuZXRzWzBdLCBIT1NUX01BU0spO1xuK1x0ZS5jaWRyWzFdID0gSU5JVF9DSURSKGgtXHUwMDNlcm5ldHNbMV0sIEhPU1RfTUFTSyk7XG4rXHRyY3VfcmVhZF91bmxvY2tfYmgoKTtcbiBcdGlmIChhZHQgPT0gSVBTRVRfVEVTVClcbiBcdFx0ZS5jY21wID0gKEhPU1RfTUFTSyBcdTAwM2NcdTAwM2MgKHNpemVvZihlLmNpZHJbMF0pICogOCkpIHwgSE9TVF9NQVNLO1xuIFxuQEAgLTQ1Miw4ICs0NTQsMTAgQEAgaGFzaF9uZXRwb3J0bmV0Nl9rYWR0KHN0cnVjdCBpcF9zZXQgKnNldCwgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdHN0cnVjdCBoYXNoX25ldHBvcnRuZXQ2X2VsZW0gZSA9IHsgfTtcbiBcdHN0cnVjdCBpcF9zZXRfZXh0IGV4dCA9IElQX1NFVF9JTklUX0tFWFQoc2tiLCBvcHQsIHNldCk7XG4gXG4tXHRlLmNpZHJbMF0gPSBJTklUX0NJRFIoaC1cdTAwM2VuZXRzWzBdLmNpZHJbMF0sIEhPU1RfTUFTSyk7XG4tXHRlLmNpZHJbMV0gPSBJTklUX0NJRFIoaC1cdTAwM2VuZXRzWzBdLmNpZHJbMV0sIEhPU1RfTUFTSyk7XG4rXHRyY3VfcmVhZF9sb2NrX2JoKCk7XG4rXHRlLmNpZHJbMF0gPSBJTklUX0NJRFIoaC1cdTAwM2VybmV0c1swXSwgSE9TVF9NQVNLKTtcbitcdGUuY2lkclsxXSA9IElOSVRfQ0lEUihoLVx1MDAzZXJuZXRzWzFdLCBIT1NUX01BU0spO1xuK1x0cmN1X3JlYWRfdW5sb2NrX2JoKCk7XG4gXHRpZiAoYWR0ID09IElQU0VUX1RFU1QpXG4gXHRcdGUuY2NtcCA9IChIT1NUX01BU0sgXHUwMDNjXHUwMDNjIChzaXplb2YodTgpICogOCkpIHwgSE9TVF9NQVNLO1xuIFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMTc6MDE6MTYuMjM4MTEzMTY2WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTY0ODc1NzY2MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBc3Nlc3NpbmcgdGhlIEltcGFjdCBvZiB0aGUgSVBzZXQgUGF0Y2gqKlxuXG5BbHJpZ2h0LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgYXNzZXNzbWVudCBpcyB0aGF0IHRoaXMgcGF0Y2ggKmRlZmluaXRlbHkqIHdhcnJhbnRzIGEgZnV6emluZyByZXZpZXcuIFdlJ3JlIHRhbGtpbmcgYWJvdXQgbW9kaWZpY2F0aW9ucyB0byBgbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaGAgYW5kIHRoZSBzdXJyb3VuZGluZyBgaXBzZXRgIGNvZGUgd2l0aGluIG5ldGZpbHRlciwgYW5kIHRoYXQncyBhIGtleSBhcmVhIHRvIHNjcnV0aW5pemUuIFNwZWNpZmljYWxseSwgdGhpcyBwYXRjaCBzZWVtcyB0byBiZSBmdW5kYW1lbnRhbGx5IGFsdGVyaW5nIGhvdyBDSURSIG5ldHdvcmtzIGFyZSBoYW5kbGVkIHdpdGhpbiB0aGUgaGFzaCB0eXBlcy4gVGhlIHNoaWZ0IGZyb20gYSBzdGF0aWNhbGx5IGFsbG9jYXRlZCBhcnJheSwgYG5ldHNbTkxFTl1gLCB0byBhIGR5bmFtaWNhbGx5IGFsbG9jYXRlZCwgUkNVLXByb3RlY3RlZCBhcnJheSwgYHJuZXRzW0lQU0VUX05FVF9DT1VOVF1gLCAqdGhhdCogc2NyZWFtcyBmdW5jdGlvbmFsIGNoYW5nZSB0byBtZS4gQW5kIHRoZW4gdGhlcmUncyB0aGUgYWRkaXRpb24gb2YgdGhlIGByZXNpemluZ2AgZmxhZyBhbmQgdGhlIGxvY2sgc3Vycm91bmRpbmcgdGhlIHJlc2l6aW5nIGxvZ2ljIHRvIHByZXZlbnQgR0MsIHdoaWNoIGluZGljYXRlcyBzaWduaWZpY2FudCBhcmNoaXRlY3R1cmFsIGNoYW5nZXMuIEl0J3MgYWZmZWN0aW5nIHRoZSBjb3JlIGxvZ2ljIG9mIGBpcHNldGAgaGFzaCB0eXBlcywgYW5kIHRoYXTigJlzIHByZWNpc2VseSB0aGUga2luZCBvZiB0aGluZyB0aGF0IG5lZWRzIGEgdGhvcm91Z2ggZnV6emluZyBjYW1wYWlnbi5cblxuTm93LCBsZXQncyBmaWd1cmUgb3V0IHRoZSBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcy4gT2YgY291cnNlLCBgQ09ORklHX0lQX1NFVGAgaXMgdGhlIG9idmlvdXMgc3RhcnRpbmcgcG9pbnQuIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhpcyBpcyBlbmFibGVkLiBUaGVuIHdlIGhhdmUgdG8gY29uc2lkZXIgdGhlIHNwZWNpZmljIGhhc2ggdHlwZXMgdGhpcyBwYXRjaCBpbXBhY3RzLiBXZSdyZSBsb29raW5nIGF0IGBDT05GSUdfSVBfU0VUX0hBU0hfSVBQT1JUTkVUYCwgYENPTkZJR19JUF9TRVRfSEFTSF9ORVRgLCBgQ09ORklHX0lQX1NFVF9IQVNIX05FVElGQUNFYCwgYENPTkZJR19JUF9TRVRfSEFTSF9ORVRORVRgLCBgQ09ORklHX0lQX1NFVF9IQVNIX05FVFBPUlRgLCBhbmQgYENPTkZJR19JUF9TRVRfSEFTSF9ORVRQT1JUTkVUYC4gSSBuZWVkIHRvIHZlcmlmeSB0aGVzZSBjb25maWd1cmF0aW9ucyBhcmUgZW5hYmxlZCBvciBhdCBsZWFzdCBjb25zaWRlciB0aGUgc2NlbmFyaW9zIHRoYXQgd291bGQgcmVzdWx0IGlmIHRoZXkgYXJlIG5vdC4gVGhhdCB3aWxsIGd1aWRlIHRoZSBjb25maWd1cmF0aW9uIG9mIHRoZSBmdXp6aW5nIGVudmlyb25tZW50LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzYwMywiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI1NywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDE3OjAxOjIxLjg4Njg3Mjk3N1oiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNTEyNzgwNzEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIElQX1NFVF9IQVNIX1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnPTQ2PWNvbmZpZyBJUF9TRVRfQklUTUFQX1BPUlRcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy01NC1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWc6NTU6Y29uZmlnIElQX1NFVF9IQVNIX0lQXFxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnLTU2LVxcdHRyaXN0YXRlIFxcXCJoYXNoOmlwIHNldCBzdXBwb3J0XFxcIlxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnLTY0LVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZzo2NTpjb25maWcgSVBfU0VUX0hBU0hfSVBNQVJLXFxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnLTY2LVxcdHRyaXN0YXRlIFxcXCJoYXNoOmlwLG1hcmsgc2V0IHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctNzMtXFxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnOjc0OmNvbmZpZyBJUF9TRVRfSEFTSF9JUFBPUlRcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctNzUtXFx0dHJpc3RhdGUgXFxcImhhc2g6aXAscG9ydCBzZXQgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy04Mi1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWc6ODM6Y29uZmlnIElQX1NFVF9IQVNIX0lQUE9SVElQXFxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnLTg0LVxcdHRyaXN0YXRlIFxcXCJoYXNoOmlwLHBvcnQsaXAgc2V0IHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctOTItXFxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnOjkzOmNvbmZpZyBJUF9TRVRfSEFTSF9JUFBPUlRORVRcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctOTQtXFx0dHJpc3RhdGUgXFxcImhhc2g6aXAscG9ydCxuZXQgc2V0IHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctMTAyLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZzoxMDM6Y29uZmlnIElQX1NFVF9IQVNIX0lQTUFDXFxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnLTEwNC1cXHR0cmlzdGF0ZSBcXFwiaGFzaDppcCxtYWMgc2V0IHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctMTExLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZzoxMTI6Y29uZmlnIElQX1NFVF9IQVNIX01BQ1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy0xMTMtXFx0dHJpc3RhdGUgXFxcImhhc2g6bWFjIHNldCBzdXBwb3J0XFxcIlxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnLTEyMC1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWc6MTIxOmNvbmZpZyBJUF9TRVRfSEFTSF9ORVRQT1JUTkVUXFxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnLTEyMi1cXHR0cmlzdGF0ZSBcXFwiaGFzaDpuZXQscG9ydCxuZXQgc2V0IHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctMTI5LVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZzoxMzA6Y29uZmlnIElQX1NFVF9IQVNIX05FVFxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy0xMzEtXFx0dHJpc3RhdGUgXFxcImhhc2g6bmV0IHNldCBzdXBwb3J0XFxcIlxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnLTEzOC1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWc6MTM5OmNvbmZpZyBJUF9TRVRfSEFTSF9ORVRORVRcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctMTQwLVxcdHRyaXN0YXRlIFxcXCJoYXNoOm5ldCxuZXQgc2V0IHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctMTQ3LVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZzoxNDg6Y29uZmlnIElQX1NFVF9IQVNIX05FVFBPUlRcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctMTQ5LVxcdHRyaXN0YXRlIFxcXCJoYXNoOm5ldCxwb3J0IHNldCBzdXBwb3J0XFxcIlxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnLTE1Ny1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWc6MTU4OmNvbmZpZyBJUF9TRVRfSEFTSF9ORVRJRkFDRVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy0xNTktXFx0dHJpc3RhdGUgXFxcImhhc2g6bmV0LGlmYWNlIHNldCBzdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMlQxNzowMToyMi4xMzgxNTc4NzhaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NTE5MDA3MzEzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgSVAgU2V0IEhhc2ggRnVuY3Rpb25zKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhlc2UgY29uZmlndXJhdGlvbnM6IGBJUF9TRVRfSEFTSF9JUFBPUlRORVRgLCBgSVBfU0VUX0hBU0hfTkVUYCwgYElQX1NFVF9IQVNIX05FVElGQUNFYCwgYElQX1NFVF9IQVNIX05FVE5FVGAsIGBJUF9TRVRfSEFTSF9ORVRQT1JUYCwgYW5kIGBJUF9TRVRfSEFTSF9ORVRQT1JUTkVUYC4gUmlnaHQgYXdheSwgSSB3YW50IHRvIGRyaWxsIGRvd24gaW50byB0aGUgY29yZSBsb2dpYy4gVGltZSB0byBmaWd1cmUgb3V0IHdoaWNoIGZ1bmN0aW9ucyBhcmUgZ2V0dGluZyB0aGUgbW9zdCBhdHRlbnRpb24gaW4gdGhpcyBwYXRjaC4gQmFzZWQgb24gdGhlIGNoYW5nZXMsIGl0IGxvb2tzIGxpa2UgYG10eXBlX2FkZF9jaWRyYCwgYG10eXBlX2RlbF9jaWRyYCwgYG10eXBlX2ZsdXNoYCwgYG10eXBlX2FoYXNoX2Rlc3Ryb3lgLCBgbXR5cGVfZGVzdHJveWAsIGBtdHlwZV9nY19kb2AsIGBtdHlwZV9nY2AsIGBtdHlwZV9yZXNpemVgLCBgbXR5cGVfYWRkYCwgYG10eXBlX2RlbGAsIGBtdHlwZV90ZXN0X2NpZHJzYCwgYG10eXBlX3VyZWZgLCBhbmQgYElQU0VUX1RPS0VOKEhUWVBFLCBfY3JlYXRlKWAgYXJlIHRoZSBvbmVzIHRvIGZvY3VzIG9uLiBUaGVzZSBhcmUgbWFjcm9zLCBhbmQgSSBrbm93IGZyb20gZXhwZXJpZW5jZSB0aGF0IG1lYW5zIHRoZXkncmUgbGlrZWx5IGRlZmluZWQgaW4gYGlwX3NldF9oYXNoX2dlbi5oYC4gTm93IEknbSBpbnRlcmVzdGVkIHRvIHNlZSBob3cgdGhlc2UgYXJlIGluc3RhbnRpYXRlZCBhbmQgdXNlZCBpbiByZWxhdGlvbiB0byB0aGUgY29uZmlndXJhdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1MTIyLCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDE3OjAxOjI2LjY1NzE2ODA5MVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NzE0MDIyNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtdHlwZV9hZGRfY2lkclwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL2lwc2V0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oPTE2Mz1zdGF0aWMgY29uc3QgdW5pb24gbmZfaW5ldF9hZGRyIHplcm9tYXNrID0ge307XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTE5NC0jdW5kZWYgbXR5cGVfZXh0X2NsZWFudXBcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oOjE5NTojdW5kZWYgbXR5cGVfYWRkX2NpZHJcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTE5Ni0jdW5kZWYgbXR5cGVfZGVsX2NpZHJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtMjM5LSNkZWZpbmUgbXR5cGVfZXh0X2NsZWFudXBcXHRJUFNFVF9UT0tFTihNVFlQRSwgX2V4dF9jbGVhbnVwKVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg6MjQwOiNkZWZpbmUgbXR5cGVfYWRkX2NpZHJcXHRcXHRJUFNFVF9UT0tFTihNVFlQRSwgX2FkZF9jaWRyKVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtMjQxLSNkZWZpbmUgbXR5cGVfZGVsX2NpZHJcXHRcXHRJUFNFVF9UT0tFTihNVFlQRSwgX2RlbF9jaWRyKVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaD0zMTc9c3RhdGljIGludFxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg6MzE4Om10eXBlX2FkZF9jaWRyKHN0cnVjdCBpcF9zZXQgKnNldCwgc3RydWN0IGh0eXBlICpoLCB1OCBjaWRyLCB1OCBuKVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtMzE5LXtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg9OTE0PW10eXBlX2FkZChzdHJ1Y3QgaXBfc2V0ICpzZXQsIHZvaWQgKnZhbHVlLCBjb25zdCBzdHJ1Y3QgaXBfc2V0X2V4dCAqZXh0LFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC0xMDQzLVxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBJUFNFVF9ORVRfQ09VTlQ7IGkrKylcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oOjEwNDQ6XFx0XFx0bXR5cGVfYWRkX2NpZHIoc2V0LCBoLCBEQ0lEUl9HRVQoZC1cXHUwMDNlY2lkciwgaSksIGkpO1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtMTA0NS0jZW5kaWZcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMTc6MDE6MjYuNzI0MzEzNDI4WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDU4Mzc3Nzk4MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGFuYWx5c2lzIG9mIHRoZSBwcm92aWRlZCBzbmlwcGV0LCBhcyBpZiBpdCB3ZXJlIG15IHRob3VnaHQgcHJvY2VzczpcblxuKipNYWNybyBFeHBhbnNpb24gYW5kIFR5cGUgSWRlbnRpZmljYXRpb24qKlxuXG5Pa2F5LCBzbyB3ZSdyZSBsb29raW5nIGF0IGNvZGUgZ2VuZXJhdGlvbiB2aWEgbWFjcm9zLiBTcGVjaWZpY2FsbHksIHdlJ3ZlIGdvdCB0aGlzIGBJUFNFVF9UT0tFTihNVFlQRSwgX2FkZF9jaWRyKWAgY2FsbC4gVGhhdCBpbW1lZGlhdGVseSB0ZWxscyBtZSB3ZSdyZSBsaWtlbHkgZGVhbGluZyB3aXRoIHNvbWUga2luZCBvZiBJUCBzZXQgbWFuaXB1bGF0aW9uLCBnaXZlbiB0aGUgXCJfYWRkX2NpZHJcIiBzdWZmaXgsIGJ1dCB0aGUgcmVhbCBrZXkgaXMgdGhlIGBNVFlQRWAgcGFyYW1ldGVyLiBUaGlzIGlzIHRoZSBjcnVjaWFsIGJpdC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBgTVRZUEVgIHJlcHJlc2VudHMuIEl0J3MgdGhlIHR5cGUgc3BlY2lmaWVyIHRoYXQgZGljdGF0ZXMgdGhlIGJlaGF2aW9yIG9mIHRoZSBtYWNybyBhbmQgd2hhdCBraW5kIG9mIElQIHNldCBvcGVyYXRpb24gb3IgZGF0YSBzdHJ1Y3R1cmUgaXQgaXMgd29ya2luZyB3aXRoLiBXaXRob3V0IGtub3dpbmcgd2hhdCBgTVRZUEVgIGV4cGFuZHMgdG8sIEkgY2FuJ3QgZGV0ZXJtaW5lIHRoZSBleGFjdCBtZWFuaW5nIG9yIHB1cnBvc2Ugb2YgdGhlIGdlbmVyYXRlZCBmdW5jdGlvbi4gVGhpcyBjb3VsZCBiZSBzb21ldGhpbmcgbGlrZSBcImlwdjRcIiwgXCJoYXNoXCIsIFwiYml0bWFwXCIsIG9yIGV2ZW4gYSBjdXN0b20gdHlwZS4gTGV0J3MgZGlnIGRlZXBlciB0byBzZWUgaG93IGBNVFlQRWAgaXMgZGVmaW5lZC4gVGhpcyBtYWNybyBpcyB0aGUgZ2F0ZXdheSB0byB1bmRlcnN0YW5kaW5nIHRoZSBmdWxsIGNvbnRleHQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2MTU5LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMTc6MDE6MzEuMzA4MDk0MTE4WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0NzU2MTM4NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCIjZGVmaW5lIE1UWVBFXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvaXBzZXQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9pcC5jPTMzPU1PRFVMRV9BTElBUyhcXFwiaXBfc2V0X2JpdG1hcDppcFxcXCIpO1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9pcC5jLTM0LVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9pcC5jOjM1OiNkZWZpbmUgTVRZUEVcXHRcXHRiaXRtYXBfaXBcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfaXAuYy0zNi0jZGVmaW5lIEhPU1RfTUFTS1xcdDMyXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfaXBtYWMuYz0zMz1NT0RVTEVfQUxJQVMoXFxcImlwX3NldF9iaXRtYXA6aXAsbWFjXFxcIik7XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX2lwbWFjLmMtMzQtXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX2lwbWFjLmM6MzU6I2RlZmluZSBNVFlQRVxcdFxcdGJpdG1hcF9pcG1hY1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9pcG1hYy5jLTM2LSNkZWZpbmUgSE9TVF9NQVNLXFx0MzJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9wb3J0LmM9Mjc9TU9EVUxFX0FMSUFTKFxcXCJpcF9zZXRfYml0bWFwOnBvcnRcXFwiKTtcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfcG9ydC5jLTI4LVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9wb3J0LmM6Mjk6I2RlZmluZSBNVFlQRVxcdFxcdGJpdG1hcF9wb3J0XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX3BvcnQuYy0zMC1cXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXAuYz03MD1oYXNoX2lwNF9kYXRhX25leHQoc3RydWN0IGhhc2hfaXA0X2VsZW0gKm5leHQsIGNvbnN0IHN0cnVjdCBoYXNoX2lwNF9lbGVtICplKVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcC5jLTc0LVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXAuYzo3NTojZGVmaW5lIE1UWVBFXFx0XFx0aGFzaF9pcDRcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwLmMtNzYtI2RlZmluZSBIT1NUX01BU0tcXHQzMlxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcC5jPTIwMj1oYXNoX2lwNl9kYXRhX25leHQoc3RydWN0IGhhc2hfaXA2X2VsZW0gKm5leHQsIGNvbnN0IHN0cnVjdCBoYXNoX2lwNl9lbGVtICplKVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcC5jLTIwOC1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwLmM6MjA5OiNkZWZpbmUgTVRZUEVcXHRcXHRoYXNoX2lwNlxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXAuYy0yMTAtI2RlZmluZSBIT1NUX01BU0tcXHQxMjhcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBtYWMuYz03Mj1oYXNoX2lwbWFjNF9kYXRhX25leHQoc3RydWN0IGhhc2hfaXBtYWM0X2VsZW0gKm5leHQsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwbWFjLmMtNzctXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcG1hYy5jOjc4OiNkZWZpbmUgTVRZUEVcXHRcXHRoYXNoX2lwbWFjNFxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBtYWMuYy03OS0jZGVmaW5lIFBGXFx0XFx0NFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcG1hYy5jPTE4MD1oYXNoX2lwbWFjNl9kYXRhX25leHQoc3RydWN0IGhhc2hfaXBtYWM2X2VsZW0gKm5leHQsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwbWFjLmMtMTg5LVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBtYWMuYzoxOTA6I2RlZmluZSBNVFlQRVxcdFxcdGhhc2hfaXBtYWM2XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcG1hYy5jLTE5MS0jZGVmaW5lIFBGXFx0XFx0Nlxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcG1hcmsuYz02OT1oYXNoX2lwbWFyazRfZGF0YV9uZXh0KHN0cnVjdCBoYXNoX2lwbWFyazRfZWxlbSAqbmV4dCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBtYXJrLmMtNzQtXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcG1hcmsuYzo3NTojZGVmaW5lIE1UWVBFXFx0XFx0aGFzaF9pcG1hcms0XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcG1hcmsuYy03Ni0jZGVmaW5lIEhPU1RfTUFTS1xcdDMyXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwbWFyay5jPTIwNT1oYXNoX2lwbWFyazZfZGF0YV9uZXh0KHN0cnVjdCBoYXNoX2lwbWFyazZfZWxlbSAqbmV4dCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBtYXJrLmMtMjEyLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBtYXJrLmM6MjEzOiNkZWZpbmUgTVRZUEVcXHRcXHRoYXNoX2lwbWFyazZcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwbWFyay5jLTIxNC0jZGVmaW5lIEhPU1RfTUFTS1xcdDEyOFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcHBvcnQuYz03OT1oYXNoX2lwcG9ydDRfZGF0YV9uZXh0KHN0cnVjdCBoYXNoX2lwcG9ydDRfZWxlbSAqbmV4dCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0LmMtODUtXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcHBvcnQuYzo4NjojZGVmaW5lIE1UWVBFXFx0XFx0aGFzaF9pcHBvcnQ0XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcHBvcnQuYy04Ny0jZGVmaW5lIEhPU1RfTUFTS1xcdDMyXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwcG9ydC5jPTI0OT1oYXNoX2lwcG9ydDZfZGF0YV9uZXh0KHN0cnVjdCBoYXNoX2lwcG9ydDZfZWxlbSAqbmV4dCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0LmMtMjU3LVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0LmM6MjU4OiNkZWZpbmUgTVRZUEVcXHRcXHRoYXNoX2lwcG9ydDZcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwcG9ydC5jLTI1OS0jZGVmaW5lIEhPU1RfTUFTS1xcdDEyOFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcHBvcnRpcC5jPTc3PWhhc2hfaXBwb3J0aXA0X2RhdGFfbmV4dChzdHJ1Y3QgaGFzaF9pcHBvcnRpcDRfZWxlbSAqbmV4dCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0aXAuYy04NC0vKiBDb21tb24gZnVuY3Rpb25zICovXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcHBvcnRpcC5jOjg1OiNkZWZpbmUgTVRZUEVcXHRcXHRoYXNoX2lwcG9ydGlwNFxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0aXAuYy04Ni0jZGVmaW5lIEhPU1RfTUFTS1xcdDMyXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwcG9ydGlwLmM9MjQ4PWhhc2hfaXBwb3J0aXA2X2RhdGFfbmV4dChzdHJ1Y3QgaGFzaF9pcHBvcnRpcDZfZWxlbSAqbmV4dCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0aXAuYy0yNTYtXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcHBvcnRpcC5jOjI1NzojZGVmaW5lIE1UWVBFXFx0XFx0aGFzaF9pcHBvcnRpcDZcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwcG9ydGlwLmMtMjU4LSNkZWZpbmUgSE9TVF9NQVNLXFx0MTI4XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwcG9ydG5ldC5jPTEyMT1oYXNoX2lwcG9ydG5ldDRfZGF0YV9uZXh0KHN0cnVjdCBoYXNoX2lwcG9ydG5ldDRfZWxlbSAqbmV4dCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0bmV0LmMtMTI4LVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0bmV0LmM6MTI5OiNkZWZpbmUgTVRZUEVcXHRcXHRoYXNoX2lwcG9ydG5ldDRcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwcG9ydG5ldC5jLTEzMC0jZGVmaW5lIEhPU1RfTUFTS1xcdDMyXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwcG9ydG5ldC5jPTM3OT1oYXNoX2lwcG9ydG5ldDZfZGF0YV9uZXh0KHN0cnVjdCBoYXNoX2lwcG9ydG5ldDZfZWxlbSAqbmV4dCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0bmV0LmMtMzg3LVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0bmV0LmM6Mzg4OiNkZWZpbmUgTVRZUEVcXHRcXHRoYXNoX2lwcG9ydG5ldDZcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwcG9ydG5ldC5jLTM4OS0jZGVmaW5lIEhPU1RfTUFTS1xcdDEyOFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9tYWMuYz02MT1oYXNoX21hYzRfZGF0YV9uZXh0KHN0cnVjdCBoYXNoX21hYzRfZWxlbSAqbmV4dCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbWFjLmMtNjUtXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9tYWMuYzo2NjojZGVmaW5lIE1UWVBFXFx0XFx0aGFzaF9tYWM0XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9tYWMuYy02Ny0jZGVmaW5lIEhPU1RfTUFTS1xcdDMyXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldC5jPTEwMj1oYXNoX25ldDRfZGF0YV9uZXh0KHN0cnVjdCBoYXNoX25ldDRfZWxlbSAqbmV4dCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0LmMtMTA3LVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0LmM6MTA4OiNkZWZpbmUgTVRZUEVcXHRcXHRoYXNoX25ldDRcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldC5jLTEwOS0jZGVmaW5lIEhPU1RfTUFTS1xcdDMyXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldC5jPTI3Mz1oYXNoX25ldDZfZGF0YV9uZXh0KHN0cnVjdCBoYXNoX25ldDZfZWxlbSAqbmV4dCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0LmMtMjgwLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0LmM6MjgxOiNkZWZpbmUgTVRZUEVcXHRcXHRoYXNoX25ldDZcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldC5jLTI4Mi0jZGVmaW5lIEhPU1RfTUFTS1xcdDEyOFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRpZmFjZS5jPTEyOT1oYXNoX25ldGlmYWNlNF9kYXRhX25leHQoc3RydWN0IGhhc2hfbmV0aWZhY2U0X2VsZW0gKm5leHQsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldGlmYWNlLmMtMTM0LVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0aWZhY2UuYzoxMzU6I2RlZmluZSBNVFlQRVxcdFxcdGhhc2hfbmV0aWZhY2U0XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRpZmFjZS5jLTEzNi0jZGVmaW5lIEhPU1RfTUFTS1xcdDMyXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldGlmYWNlLmM9MzYzPWhhc2hfbmV0aWZhY2U2X2RhdGFfbmV4dChzdHJ1Y3QgaGFzaF9uZXRpZmFjZTZfZWxlbSAqbmV4dCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0aWZhY2UuYy0zNzAtXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRpZmFjZS5jOjM3MTojZGVmaW5lIE1UWVBFXFx0XFx0aGFzaF9uZXRpZmFjZTZcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldGlmYWNlLmMtMzcyLSNkZWZpbmUgSE9TVF9NQVNLXFx0MTI4XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldG5ldC5jPTEyNT1oYXNoX25ldG5ldDRfZGF0YV9uZXh0KHN0cnVjdCBoYXNoX25ldG5ldDRfZWxlbSAqbmV4dCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0bmV0LmMtMTMwLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0bmV0LmM6MTMxOiNkZWZpbmUgTVRZUEVcXHRcXHRoYXNoX25ldG5ldDRcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldG5ldC5jLTEzMi0jZGVmaW5lIEhPU1RfTUFTS1xcdDMyXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldG5ldC5jPTM2Mz1oYXNoX25ldG5ldDZfZGF0YV9uZXh0KHN0cnVjdCBoYXNoX25ldG5ldDZfZWxlbSAqbmV4dCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0bmV0LmMtMzcwLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0bmV0LmM6MzcxOiNkZWZpbmUgTVRZUEVcXHRcXHRoYXNoX25ldG5ldDZcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldG5ldC5jLTM3Mi0jZGVmaW5lIEhPU1RfTUFTS1xcdDEyOFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRwb3J0LmM9MTE3PWhhc2hfbmV0cG9ydDRfZGF0YV9uZXh0KHN0cnVjdCBoYXNoX25ldHBvcnQ0X2VsZW0gKm5leHQsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldHBvcnQuYy0xMjMtXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRwb3J0LmM6MTI0OiNkZWZpbmUgTVRZUEVcXHRcXHRoYXNoX25ldHBvcnQ0XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRwb3J0LmMtMTI1LSNkZWZpbmUgSE9TVF9NQVNLXFx0MzJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0cG9ydC5jPTMzND1oYXNoX25ldHBvcnQ2X2RhdGFfbmV4dChzdHJ1Y3QgaGFzaF9uZXRwb3J0Nl9lbGVtICpuZXh0LFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRwb3J0LmMtMzQyLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0cG9ydC5jOjM0MzojZGVmaW5lIE1UWVBFXFx0XFx0aGFzaF9uZXRwb3J0Nlxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0cG9ydC5jLTM0NC0jZGVmaW5lIEhPU1RfTUFTS1xcdDEyOFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRwb3J0bmV0LmM9MTMyPWhhc2hfbmV0cG9ydG5ldDRfZGF0YV9uZXh0KHN0cnVjdCBoYXNoX25ldHBvcnRuZXQ0X2VsZW0gKm5leHQsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldHBvcnRuZXQuYy0xMzgtXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRwb3J0bmV0LmM6MTM5OiNkZWZpbmUgTVRZUEVcXHRcXHRoYXNoX25ldHBvcnRuZXQ0XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRwb3J0bmV0LmMtMTQwLSNkZWZpbmUgSE9TVF9NQVNLXFx0MzJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0cG9ydG5ldC5jPTQyNj1oYXNoX25ldHBvcnRuZXQ2X2RhdGFfbmV4dChzdHJ1Y3QgaGFzaF9uZXRwb3J0bmV0Nl9lbGVtICpuZXh0LFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRwb3J0bmV0LmMtNDM0LVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0cG9ydG5ldC5jOjQzNTojZGVmaW5lIE1UWVBFXFx0XFx0aGFzaF9uZXRwb3J0bmV0Nlxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0cG9ydG5ldC5jLTQzNi0jZGVmaW5lIEhPU1RfTUFTS1xcdDEyOFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMlQxNzowMTozMS40NTU2NjA2NTNaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NDMzNTUwNjM2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIGl0OlxuXG4qKkRlY29kaW5nIFRoaXMgSVBTRVQgSW1wbGVtZW50YXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGVzZSBJUFNFVCBmdW5jdGlvbiBuYW1lcyDigJMgYGhhc2hfbmV0NF9hZGRgLCBgaGFzaF9uZXQ0X2RlbGAsIGBoYXNoX25ldDRfdGVzdF9jaWRyc2AsIHRoYXQncyBzdGFuZGFyZC4gTWFrZXMgc2Vuc2UsIHRoZXkncmUgY2xlYXJseSBkZWFsaW5nIHdpdGggSVB2NCBoYXNoIHNldHMuIE5vdGhpbmcgc3VycHJpc2luZyB0aGVyZSwgYW5kIHBlcmZlY3RseSBsb2dpY2FsIG5hbWluZy4gTm93LCB3aGF0J3MgdGhpcyBgbXR5cGVfYWRkYCB0aGluZz8gVGhhdCBzZWVtcyBhIGJpdC4uLiBjcnlwdGljLiBJdCdzIGRlZmluZWQgYXMgYElQU0VUX1RPS0VOKE1UWVBFLCBfYWRkKWAuIEknbGwgaGF2ZSB0byBkZWx2ZSBkZWVwZXIgaW50byB0aGF0IGBJUFNFVF9UT0tFTmAgbWFjcm8gZGVmaW5pdGlvbiB0byB1bmRlcnN0YW5kIHdoYXQgdGhlIGRldmVsb3BlciB3YXMgZ29pbmcgZm9yIHdpdGggdGhhdCBwYXJ0aWN1bGFyIGNob2ljZSBvZiBuYW1lLiBMZXQncyBzZWUgaG93IHRoYXQgbWFjcm8gaXMgZXhwYW5kaW5nLiBJJ20gYXNzdW1pbmcgaXQncyBwYXJ0IG9mIGhvdyB0aGV5J3JlIGhhbmRsaW5nIGRpZmZlcmVudCBzZXQgdHlwZXMgd2l0aGluIHRoZSBJUFNFVCBmcmFtZXdvcmssIGJ1dCBgTVRZUEVgIGFuZCBgX2FkZGAgdG9nZXRoZXIgZmVlbHMgYSBsaXR0bGUgb2RkIGF0IGZpcnN0IGdsYW5jZSwgYnV0IEkga25vdyBiZXR0ZXIgdGhhbiB0byBqdW1wIHRvIGNvbmNsdXNpb25zIVxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTg3NCwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDE3OjAxOjM1Ljg4OTIxMzc5OVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTc4Mjg0MDIzLCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCIjZGVmaW5lIElQU0VUX1RPS0VOXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvaXBzZXQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMlQxNzowMTozNi4wNjc1MDc0ODJaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzk5NDk3ODI0MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRoaXMgbXlzZWxmOlxuXG4qKlRyYWNpbmcgdGhlIFNvdXJjZSBvZiBgSVBTRVRfVE9LRU5gKipcblxuT2theSwgc28gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hlcmUgYElQU0VUX1RPS0VOYCBpcyBkZWZpbmVkLiBUaGlzIGlzIGEgY29tbW9uIGRlYnVnZ2luZyBzdGVwLiBJJ20gZGVhbGluZyB3aXRoIGEgY29kZWJhc2UsIHByZXN1bWFibHksIGFuZCBgSVBTRVRfVE9LRU5gIGlzIHByb2JhYmx5IGEgY29uc3RhbnQsIHZhcmlhYmxlLCBvciBtYWNyby4gVGhlIGdvYWwgaXMgdG8gdW5kZXJzdGFuZCBpdHMgc2NvcGUgYW5kIGhvdyBpdCdzIHVzZWQgd2l0aGluIHRoZSBjb250ZXh0IG9mIHRoZSBwcm9ncmFtLiBJJ2xsIG5lZWQgdG8gcGlucG9pbnQgaXRzIGRlY2xhcmF0aW9uIHRvIGtub3cgaXRzIHR5cGUsIHZhbHVlIChpZiBpdCdzIGluaXRpYWxpemVkKSwgYW5kIHdoZXJlIGl04oCZcyBhY2Nlc3NpYmxlLiBUaGlzIGhlbHBzIG1lIHVuZGVyc3RhbmQgaXRzIHJvbGUgYW5kIGltcGFjdC4gV2hlcmUgY2FuIEkgc3RhcnQgbG9va2luZyBmb3IgdGhpcyBkZWNsYXJhdGlvbj8gVGltZSB0byBkaXZlIGluIVxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDIxMSwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDE3OjAxOjQwLjA2MjQ4Nzk4NFoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODMzMjUzMTYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiI2RlZmluZSBJUFNFVF9UT0tFTlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpbmNsdWRlL2xpbnV4L25ldGZpbHRlci9pcHNldC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0Lmg9NTIzPW5mX2luZXRfYWRkcl9tYXNrX2lucGxhY2UodW5pb24gbmZfaW5ldF9hZGRyICphMSxcXG4tLVxcbmluY2x1ZGUvbGludXgvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldC5oLTU0MC0jZGVmaW5lIElQU0VUX0NPTkNBVChhLCBiKVxcdFxcdGEjI2JcXG5pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9pcHNldC9pcF9zZXQuaDo1NDE6I2RlZmluZSBJUFNFVF9UT0tFTihhLCBiKVxcdFxcdElQU0VUX0NPTkNBVChhLCBiKVxcbmluY2x1ZGUvbGludXgvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldC5oLTU0Mi1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMTc6MDE6NDAuMTQ1ODE4NDMxWiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ5MzcxNzkxMjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIElQIFNldCBIYXNoaW5nIEZ1bmN0aW9ucyoqXG5cbk9rYXksIHNvIEknbSB0cmFjaW5nIGhvdyB0aGVzZSBJUCBzZXQgb3BlcmF0aW9ucyBhcmUgc3RydWN0dXJlZCwgYW5kIGl0IGxvb2tzIGxpa2UgdGhlIGBJUFNFVF9UT0tFTihNVFlQRSwgX2FkZClgIG1hY3JvIGdlbmVyYXRlcyBhIGZhbWlseSBvZiBmdW5jdGlvbnMsIGxpa2UgYGhhc2hfbmV0NF9hZGRgLCBgaGFzaF9uZXQ2X2FkZGAsIGFuZCBgaGFzaF9uZXRuZXQ0X2FkZGAgZGVwZW5kaW5nIG9uIHRoZSBhZGRyZXNzIGZhbWlseSBhbmQgdGhlIHNwZWNpZmljIG9wZXJhdGlvbi4gSSBzaG91bGQgc3RhcnQgYnkgbG9va2luZyBhdCB0aGVzZSwgYW5kIEknbSB0aGlua2luZyBvZiBmb2N1c2luZyBvbiBzcGVjaWZpYyBvbmVzIGxpa2UgYGhhc2hfbmV0NF9hZGRgLCBgaGFzaF9uZXQ2X2FkZGAsIGBoYXNoX25ldDRfZGVsYCwgYGhhc2hfbmV0Nl9kZWxgLCB0aG9zZSBhZGQvZGVsZXRlIGZ1bmN0aW9ucy4gVGhlcmUgYXJlIG90aGVyIGZ1bmN0aW9ucyB0aGF0IGNhbiBiZSBpbXBvcnRhbnQgdG9vLCBzdWNoIGFzIHRoZSBgdGVzdF9jaWRyc2AsIHRoZSBgcmVzaXplYCBhbmQgdGhlIGBnY2AgZnVuY3Rpb25zLCBhbmQgYSBzaW1pbGFyIGlkZWEgYXBwZWFycyB3aGVuIHRoaW5raW5nIGFib3V0IGBtdHlwZV9hZGRfY2lkcmAsIHdoaWNoIGFwcGVhcnMgYXMgYGhhc2hfbmV0NF9hZGRfY2lkcmAsIGBoYXNoX25ldDZfYWRkX2NpZHJgLlxuXG5CdXQsIHdhaXQgYSBzZWNvbmQsIGxldCdzIGxvb2sgY2xvc2VseSBhdCBgaGFzaF9uZXQ0X2FkZF9jaWRyYCwgaXMgaXQgZGVmaW5lZCBpbiB0aGUgY29tcGlsZWQgY29kZSBvciBpcyBpdCBkZWZpbmVkIGFzIGEgc3RhdGljIGZ1bmN0aW9uPyBJdCBhcHBlYXJzIHN0YXRpYywgd2hpY2ggbWVhbnMgaXQgbWlnaHQgYmUgaW5saW5lZC4gVGhpcyBjb3VsZCBtYWtlIGl0IGEgbGVzcyB1c2VmdWwgc3ltYm9sIHRvIGZvY3VzIG9uLiBIbW0sIGxldCdzIGFsc28gY2hlY2sgaWYgYGhhc2hfbmV0NF9hZGRgIGlzIHN0YXRpYy4gQWxyaWdodCwgSSdsbCBuZWVkIHRvIGNoZWNrIHRoZSBzb3VyY2UgZmlsZSwgc3BlY2lmaWNhbGx5IGBpcF9zZXRfaGFzaF9uZXQuY2AsIHRvIGJlIHN1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwNTU4LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjQ5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDE3OjAxOjQ1LjA4Mjk5OTg3OVoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTk5MjA5MzIyLCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJoYXNoX25ldDRfYWRkXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvaXBzZXQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMlQxNzowMTo0NS4yODIyMTgxMTFaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjcyNzE4MDM0OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIE1hY3JvLUdlbmVyYXRlZCBDb2RlKipcblxuT2theSwgc28gSSdtIHRyYWNraW5nIGRvd24gd2hlcmUgdGhpcyBgaGFzaF9uZXQ0X2FkZGAgZnVuY3Rpb24gY29tZXMgZnJvbS4gSXQncyBjbGVhcmx5IG1hY3JvLWdlbmVyYXRlZCwgd2hpY2ggbWVhbnMgSSBuZWVkIHRvIGRpZyBpbnRvIHRoZSBtYWNybyBkZWZpbml0aW9uIGl0c2VsZi4gSSBjYW4ndCBqdXN0IGBncmVwYCB0aGUgc291cmNlIGZvciBhIGRpcmVjdCBmdW5jdGlvbiBkZWZpbml0aW9uLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGljaCBtYWNybyBnZW5lcmF0ZXMgdGhpcyBmdW5jdGlvbi4gTXkgYmVzdCBiZXQgaXMgdG8gY2hlY2sgdGhlIHJlbGF0ZWQgaW5jbHVkZSBmaWxlLCBgaXBfc2V0X2hhc2hfZ2VuLmhgLCBzcGVjaWZpY2FsbHkgbG9va2luZyBmb3Igc29tZXRoaW5nIHJlbGF0ZWQgdG8gYG10eXBlX2FkZGAgc2luY2UgdGhhdCdzIGxpa2VseSBwYXJ0IG9mIHRoZSBtYWNybydzIG5hbWUgb3IgbG9naWMuIFRoYXQncyBteSBuZXh0IHN0ZXAgdG8gdW5kZXJzdGFuZCB0aGUgY3JlYXRpb24gcHJvY2VzcyBvZiBgaGFzaF9uZXQ0X2FkZGAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxMTc1LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMTc6MDE6NDguMDA5NDAwNTIxWiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MTU1MjM5OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtdHlwZV9hZGRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9pcHNldC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX2dlbi5oLTE3LSNkZWZpbmUgbXR5cGVfYWR0X2VsZW1cXHRcXHRJUFNFVF9UT0tFTihNVFlQRSwgX2FkdF9lbGVtKVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9nZW4uaDoxODojZGVmaW5lIG10eXBlX2FkZF90aW1lb3V0XFx0SVBTRVRfVE9LRU4oTVRZUEUsIF9hZGRfdGltZW91dClcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfZ2VuLmgtMTktI2RlZmluZSBtdHlwZV9nY19pbml0XFx0XFx0SVBTRVRfVE9LRU4oTVRZUEUsIF9nY19pbml0KVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX2dlbi5oLTI4LSNkZWZpbmUgbXR5cGVfdGVzdFxcdFxcdElQU0VUX1RPS0VOKE1UWVBFLCBfdGVzdClcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfZ2VuLmg6Mjk6I2RlZmluZSBtdHlwZV9hZGRcXHRcXHRJUFNFVF9UT0tFTihNVFlQRSwgX2FkZClcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfZ2VuLmgtMzAtI2RlZmluZSBtdHlwZV9kZWxcXHRcXHRJUFNFVF9UT0tFTihNVFlQRSwgX2RlbClcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9nZW4uaD0xMjk9c3RhdGljIGludFxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9nZW4uaDoxMzA6bXR5cGVfYWRkKHN0cnVjdCBpcF9zZXQgKnNldCwgdm9pZCAqdmFsdWUsIGNvbnN0IHN0cnVjdCBpcF9zZXRfZXh0ICpleHQsXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX2dlbi5oLTEzMS1cXHQgIHN0cnVjdCBpcF9zZXRfZXh0ICptZXh0LCB1MzIgZmxhZ3MpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfZ2VuLmgtMTU0LSNpZmRlZiBJUF9TRVRfQklUTUFQX1NUT1JFRF9USU1FT1VUXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX2dlbi5oOjE1NTpcXHRcXHRtdHlwZV9hZGRfdGltZW91dChleHRfdGltZW91dCh4LCBzZXQpLCBlLCBleHQsIHNldCwgbWFwLCByZXQpO1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9nZW4uaC0xNTYtI2Vsc2VcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9nZW4uaD0zMDI9c3RhdGljIGNvbnN0IHN0cnVjdCBpcF9zZXRfdHlwZV92YXJpYW50IG10eXBlID0ge1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX2dlbi5oLTMwNS1cXHQuYWR0XFx0PSB7XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX2dlbi5oOjMwNjpcXHRcXHRbSVBTRVRfQUREXSA9IG10eXBlX2FkZCxcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfZ2VuLmgtMzA3LVxcdFxcdFtJUFNFVF9ERUxdID0gbXR5cGVfZGVsLFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaD0xNjM9c3RhdGljIGNvbnN0IHVuaW9uIG5mX2luZXRfYWRkciB6ZXJvbWFzayA9IHt9O1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC0xOTQtI3VuZGVmIG10eXBlX2V4dF9jbGVhbnVwXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaDoxOTU6I3VuZGVmIG10eXBlX2FkZF9jaWRyXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC0xOTYtI3VuZGVmIG10eXBlX2RlbF9jaWRyXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTIwMy1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oOjIwNDojdW5kZWYgbXR5cGVfYWRkXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC0yMDUtI3VuZGVmIG10eXBlX2RlbFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC0yMzktI2RlZmluZSBtdHlwZV9leHRfY2xlYW51cFxcdElQU0VUX1RPS0VOKE1UWVBFLCBfZXh0X2NsZWFudXApXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaDoyNDA6I2RlZmluZSBtdHlwZV9hZGRfY2lkclxcdFxcdElQU0VUX1RPS0VOKE1UWVBFLCBfYWRkX2NpZHIpXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC0yNDEtI2RlZmluZSBtdHlwZV9kZWxfY2lkclxcdFxcdElQU0VUX1RPS0VOKE1UWVBFLCBfZGVsX2NpZHIpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTI0OC1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oOjI0OTojZGVmaW5lIG10eXBlX2FkZFxcdFxcdElQU0VUX1RPS0VOKE1UWVBFLCBfYWRkKVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtMjUwLSNkZWZpbmUgbXR5cGVfZGVsXFx0XFx0SVBTRVRfVE9LRU4oTVRZUEUsIF9kZWwpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oPTMxNz1zdGF0aWMgaW50XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaDozMTg6bXR5cGVfYWRkX2NpZHIoc3RydWN0IGlwX3NldCAqc2V0LCBzdHJ1Y3QgaHR5cGUgKmgsIHU4IGNpZHIsIHU4IG4pXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC0zMTkte1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaD02NjY9c3RhdGljIGludFxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg6NjY3Om10eXBlX2FkZChzdHJ1Y3QgaXBfc2V0ICpzZXQsIHZvaWQgKnZhbHVlLCBjb25zdCBzdHJ1Y3QgaXBfc2V0X2V4dCAqZXh0LFxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtNjY4LVxcdCAgc3RydWN0IGlwX3NldF9leHQgKm1leHQsIHUzMiBmbGFncyk7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oPTY3OD1tdHlwZV9yZXNpemUoc3RydWN0IGlwX3NldCAqc2V0LCBib29sIHJldHJpZWQpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTgzMC1cXHRcXHRpZiAoeC1cXHUwMDNlYWQgPT0gSVBTRVRfQUREKSB7XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaDo4MzE6XFx0XFx0XFx0bXR5cGVfYWRkKHNldCwgXFx1MDAyNngtXFx1MDAzZWQsIFxcdTAwMjZ4LVxcdTAwM2VleHQsIFxcdTAwMjZ4LVxcdTAwM2VtZXh0LCB4LVxcdTAwM2VmbGFncyk7XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC04MzItXFx0XFx0fSBlbHNlIHtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg9OTEzPXN0YXRpYyBpbnRcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oOjkxNDptdHlwZV9hZGQoc3RydWN0IGlwX3NldCAqc2V0LCB2b2lkICp2YWx1ZSwgY29uc3Qgc3RydWN0IGlwX3NldF9leHQgKmV4dCxcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTkxNS1cXHQgIHN0cnVjdCBpcF9zZXRfZXh0ICptZXh0LCB1MzIgZmxhZ3MpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTEwNDMtXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIElQU0VUX05FVF9DT1VOVDsgaSsrKVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg6MTA0NDpcXHRcXHRtdHlwZV9hZGRfY2lkcihzZXQsIGgsIERDSURSX0dFVChkLVxcdTAwM2VjaWRyLCBpKSwgaSk7XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC0xMDQ1LSNlbmRpZlxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaD0xNTMxPXN0YXRpYyBjb25zdCBzdHJ1Y3QgaXBfc2V0X3R5cGVfdmFyaWFudCBtdHlwZV92YXJpYW50ID0ge1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC0xNTM0LVxcdC5hZHRcXHQ9IHtcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oOjE1MzU6XFx0XFx0W0lQU0VUX0FERF0gPSBtdHlwZV9hZGQsXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC0xNTM2LVxcdFxcdFtJUFNFVF9ERUxdID0gbXR5cGVfZGVsLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMlQxNzowMTo0OC4wNzA5NTgxNjhaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzk3MDg2MTk2MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIElQU2V0IGBtdHlwZV9hZGRgIEFzc2lnbm1lbnQqKlxuXG5Pa2F5LCBzbyBJJ20gZGlnZ2luZyBpbnRvIHRoaXMgYG10eXBlX2FkZGAgYXNzaWdubWVudCwgYW5kIGl0IGxvb2tzIGxpa2UgaXQncyBwb2ludGluZyB0byBgbXR5cGVfdmFyaWFudC5hZHRbSVBTRVRfQUREXWAuIFRoYXQncyB0aGUgZW50cnkgcG9pbnQsIGJ1dCB0aGUgYWN0dWFsLCBtb3JlIGdyYW51bGFyIGZ1bmN0aW9uIHdpbGwgYmUgc29tZXRoaW5nIGxpa2UgYGhhc2hfbmV0NF9hZGRgLCBvciBgaGFzaF9uZXQ2X2FkZGAsIGRlcGVuZGluZyBvbiB0aGUgSVAgdmVyc2lvbi4gUmlnaHQsIG5vdyBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IGZ1bmN0aW9ucyBhcmUgYWN0dWFsbHkgYXZhaWxhYmxlIGFuZCwgY3J1Y2lhbGx5LCB3aGljaCBvbmVzIGFyZSBhY2Nlc3NpYmxlLlxuXG5MZXQncyBzZWUuLi4gbG9va2luZyBhdCBgaGFzaF9uZXQ0X2FkZGAsIEkgc2VlIGl0J3MgbWFya2VkIGBzdGF0aWNgLiBUaGF0J3MgdXN1YWxseSBhIHJlZCBmbGFnLiBIbW0sIGhvbGQgb24uLi4gdGhlIGNvZGUgZ2VuZXJhdGVkIGBoYXNoX25ldDRfY3JlYXRlYCwgc28gdGhhdCBnaXZlcyBtZSBhbiBvcGVuaW5nLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29ubmVjdGlvbiBiZXR3ZWVuIHRoYXQgZnVuY3Rpb24gYW5kIHRoZSBhZGQgZnVuY3Rpb24uXG5cbkknbGwgY2hlY2sgYGlwX3NldF9oYXNoX25ldC5jYCB0byBzZWUgd2hhdCBpcyBleHBvcnRlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjMxNjUsIk91dHB1dFRva2VucyI6NDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMTAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMTc6MDE6NTIuMDQxODIyMjcxWiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1OTE5NDYyOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJoYXNoX25ldDRfXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXQuYz0zMz1NT0RVTEVfQUxJQVMoXFxcImlwX3NldF9oYXNoOm5ldFxcXCIpO1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXQuYy00MS0vKiBNZW1iZXIgZWxlbWVudHMgICovXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXQuYzo0MjpzdHJ1Y3QgaGFzaF9uZXQ0X2VsZW0ge1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0LmMtNDMtXFx0X19iZTMyIGlwO1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXQuYz01MT1zdGF0aWMgYm9vbFxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0LmM6NTI6aGFzaF9uZXQ0X2RhdGFfZXF1YWwoY29uc3Qgc3RydWN0IGhhc2hfbmV0NF9lbGVtICppcDEsXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXQuYzo1MzpcXHRcXHQgICAgIGNvbnN0IHN0cnVjdCBoYXNoX25ldDRfZWxlbSAqaXAyLFxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0LmMtNTQtXFx0XFx0ICAgICB1MzIgKm11bHRpKVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXQuYz02MD1zdGF0aWMgaW50XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXQuYzo2MTpoYXNoX25ldDRfZG9fZGF0YV9tYXRjaChjb25zdCBzdHJ1Y3QgaGFzaF9uZXQ0X2VsZW0gKmVsZW0pXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXQuYy02Mi17XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldC5jPTY2PXN0YXRpYyB2b2lkXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXQuYzo2NzpoYXNoX25ldDRfZGF0YV9zZXRfZmxhZ3Moc3RydWN0IGhhc2hfbmV0NF9lbGVtICplbGVtLCB1MzIgZmxhZ3MpXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXQuYy02OC17XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldC5jPTcyPXN0YXRpYyB2b2lkXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXQuYzo3MzpoYXNoX25ldDRfZGF0YV9yZXNldF9mbGFncyhzdHJ1Y3QgaGFzaF9uZXQ0X2VsZW0gKmVsZW0sIHU4ICpmbGFncylcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldC5jLTc0LXtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0LmM9Nzg9c3RhdGljIHZvaWRcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldC5jOjc5Omhhc2hfbmV0NF9kYXRhX25ldG1hc2soc3RydWN0IGhhc2hfbmV0NF9lbGVtICplbGVtLCB1OCBjaWRyKVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0LmMtODAte1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXQuYz04NT1zdGF0aWMgYm9vbFxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0LmM6ODY6aGFzaF9uZXQ0X2RhdGFfbGlzdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgaGFzaF9uZXQ0X2VsZW0gKmRhdGEpXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXQuYy04Ny17XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldC5jPTEwMT1zdGF0aWMgdm9pZFxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0LmM6MTAyOmhhc2hfbmV0NF9kYXRhX25leHQoc3RydWN0IGhhc2hfbmV0NF9lbGVtICpuZXh0LFxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0LmM6MTAzOlxcdFxcdCAgICBjb25zdCBzdHJ1Y3QgaGFzaF9uZXQ0X2VsZW0gKmQpXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXQuYy0xMDQte1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXQuYz0xMTI9c3RhdGljIGludFxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0LmM6MTEzOmhhc2hfbmV0NF9rYWR0KHN0cnVjdCBpcF9zZXQgKnNldCwgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldC5jLTExNC1cXHQgICAgICAgY29uc3Qgc3RydWN0IHh0X2FjdGlvbl9wYXJhbSAqcGFyLFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXQuYy0xMTgtXFx0aXBzZXRfYWR0Zm4gYWR0Zm4gPSBzZXQtXFx1MDAzZXZhcmlhbnQtXFx1MDAzZWFkdFthZHRdO1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0LmM6MTE5OlxcdHN0cnVjdCBoYXNoX25ldDRfZWxlbSBlID0ge1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0LmMtMTIwLVxcdFxcdC5jaWRyID0gSU5JVF9DSURSKGgtXFx1MDAzZXJuZXRzWzBdLCBIT1NUX01BU0spLFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXQuYz0xMzU9c3RhdGljIGludFxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0LmM6MTM2Omhhc2hfbmV0NF91YWR0KHN0cnVjdCBpcF9zZXQgKnNldCwgc3RydWN0IG5sYXR0ciAqdGJbXSxcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldC5jLTEzNy1cXHQgICAgICAgZW51bSBpcHNldF9hZHQgYWR0LCB1MzIgKmxpbmVubywgdTMyIGZsYWdzLCBib29sIHJldHJpZWQpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldC5jLTE0MC1cXHRpcHNldF9hZHRmbiBhZHRmbiA9IHNldC1cXHUwMDNldmFyaWFudC1cXHUwMDNlYWR0W2FkdF07XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXQuYzoxNDE6XFx0c3RydWN0IGhhc2hfbmV0NF9lbGVtIGUgPSB7IC5jaWRyID0gSE9TVF9NQVNLIH07XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXQuYy0xNDItXFx0c3RydWN0IGlwX3NldF9leHQgZXh0ID0gSVBfU0VUX0lOSVRfVUVYVChzZXQpO1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXQuYy0xOTctXFx0XFx0aWYgKGkgXFx1MDAzZSBJUFNFVF9NQVhfUkFOR0UpIHtcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldC5jOjE5ODpcXHRcXHRcXHRoYXNoX25ldDRfZGF0YV9uZXh0KFxcdTAwMjZoLVxcdTAwM2VuZXh0LCBcXHUwMDI2ZSk7XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXQuYy0xOTktXFx0XFx0XFx0cmV0dXJuIC1FUkFOR0U7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDE3OjAxOjUyLjEwMTAyMjA2OVoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDAwMTkxNzU0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBBRFQgRW50cnkgUG9pbnRzKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhlc2UgYGhhc2hfbmV0NF9rYWR0YCBhbmQgYGhhc2hfbmV0NF91YWR0YCBmdW5jdGlvbnMuIFRoZXkncmUgc3RhdGljLCB3aGljaCBpcyBpbnRlcmVzdGluZy4gVGhhdCBtZWFucyB0aGV5J3JlIG5vdCBkaXJlY3RseSBhY2Nlc3NpYmxlIGZyb20gb3V0c2lkZSB0aGlzIHNwZWNpZmljIG1vZHVsZS4uLiBvciBhcmUgdGhleT8gV2FpdCwgYGhhc2hfbmV0NF91YWR0YCBpcyBkZWZpbml0ZWx5IHN0YXRpYy4gSXMgdGhlcmUgYW55IG90aGVyIGZ1bmN0aW9uIGV4cG9zZWQgdG8gb3V0c2lkZSBtb2R1bGVzPyBMZXQgbWUgY2hlY2sgYGlwX3NldF9oYXNoX25ldC5jYC4gSSBuZWVkIHRvIHNlZSBpZiB0aGVyZSBhcmUgYW55IGBFWFBPUlRfU1lNQk9MYCBtYWNyb3Mgb3Igb3RoZXIgbm9uLXN0YXRpYyBmdW5jdGlvbnMgaW4gdGhlIGZpbGUgdGhhdCBtaWdodCBiZSBpbXBvcnRhbnQgZm9yIHVuZGVyc3RhbmRpbmcgaG93IHRoaXMgQURUIGxvZ2ljIGlzIGV4cG9zZWQgdG8gdGhlIHJlc3Qgb2YgdGhlIGtlcm5lbCBvciB1c2VyIHNwYWNlLiBMZXQncyBkaWcgaW4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI0OTM4LCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMTc6MDE6NTUuNTAxMjE3MzIzWiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MjAzMTc2OCwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiRVhQT1JUX1NZTUJPTFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMlQxNzowMTo1NS41NjMyNjAyOTFaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzQxOTU0OTE1MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3Mgb24gd2hhdCBJJ2QgYmUgbG9va2luZyBmb3I6XG5cbioqQW5hbHl6aW5nIGBpcF9zZXRfaGFzaF9nZW4uaGAgZm9yIEV4cG9ydGVkIEZ1bmN0aW9ucyoqXG5cblJpZ2h0LCBzbyBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBleHRlcm5hbCBpbnRlcmZhY2Ugb2YgdGhpcyBgaXBfc2V0X2hhc2hfZ2VuLmhgIGhlYWRlciBmaWxlLiBNeSBwcmltYXJ5IGdvYWwgaGVyZSBpcyB0byBpZGVudGlmeSB3aGljaCBmdW5jdGlvbnMgYXJlICptZWFudCogdG8gYmUgdXNlZCBieSBvdGhlciBwYXJ0cyBvZiB0aGUgc3lzdGVtIOKAkyB0aGUgb25lcyB0aGF0IGFyZSBleHBvcnRlZCwgaW4gZXNzZW5jZS4gSSdsbCBiZSBzaWZ0aW5nIHRocm91Z2ggdGhlIGNvZGUsIGNhcmVmdWxseSBsb29raW5nIGZvciBhbnkgdGVsbHRhbGUgc2lnbnMuIEkgZXhwZWN0IHRvIHNlZSBmdW5jdGlvbiBkZWNsYXJhdGlvbnMgd2l0aCBwcmVmaXhlcyBvciBhdHRyaWJ1dGVzIHRoYXQgZGVub3RlIHRoZWlyIHZpc2liaWxpdHkgYW5kIGludGVuZGVkIHVzYWdlLiBUaGluZ3MgbGlrZSBgZXh0ZXJuYCBkZWNsYXJhdGlvbnMsIG1hY3JvcyB0aGF0IGV4cGFuZCB0byBwbGF0Zm9ybS1zcGVjaWZpYyBleHBvcnQgc3ltYm9scyAoZS5nLiwgYF9fZGVjbHNwZWMoZGxsZXhwb3J0KWAgb24gV2luZG93cyBvciB0aGUgZXF1aXZhbGVudCBmb3Igc2hhcmVkIG9iamVjdCBsaWJyYXJpZXMpLCBvciBwb3NzaWJseSBzb21lIG5hbWluZyBjb252ZW50aW9ucyB0aGF0IHN1Z2dlc3QgYSBwdWJsaWMgQVBJLiBJJ2xsIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIGZ1bmN0aW9uIHNpZ25hdHVyZXMgYXMgd2VsbCDigJMgdGhhdCdsbCBnaXZlIG1lIGEgc3Ryb25nIHVuZGVyc3RhbmRpbmcgb2Ygd2hhdCBkYXRhIHN0cnVjdHVyZXMgYW5kIHR5cGVzIHRoZXNlIGV4cG9ydGVkIGZ1bmN0aW9ucyBvcGVyYXRlIG9uIGFuZCBleHBlY3QgYXMgYXJndW1lbnRzLiBUaGlzIHNob3VsZCBnaXZlIG1lIGEgc29saWQgbWFwIG9mIGhvdyB0aGlzIG1vZHVsZSBpbnRlcmZhY2VzIHdpdGggZXZlcnl0aGluZyBlbHNlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNTI0NiwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDE3OjAxOjU4Ljk4MjgxMjM3NFoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTc1MDA0MzgsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkVYUE9SVF9TWU1CT0xcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMTc6MDE6NTkuMDQwMzIwNDYyWiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjgwNjY4NjYwNDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGBpcHNldGAgTW9kdWxlIEZ1bmN0aW9uIFJlZ2lzdHJhdGlvbiBmb3IgU3l6a2FsbGVyIFRhcmdldGluZyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGhvdyB0aGUgYGlwc2V0YCBtb2R1bGUgaGFuZGxlcyBpdHMgdmFyaW91cyBzZXQgdHlwZXMuIEkgc2VlIHRoYXQgYGlwX3NldF90eXBlX3JlZ2lzdGVyYCBpcyB0aGUgY29yZSBtZWNoYW5pc20sIGFuZCBpdCdzIHdoYXQgaG9va3MgZXZlcnl0aGluZyBpbi4gVGhlIGNydWNpYWwgcGFydCBmb3IgbWUgaXMgdGhlIGBzdHJ1Y3QgaXBfc2V0X3R5cGVfdmFyaWFudGAgc3RydWN0dXJlIOKAkyBpdCBjb250YWlucyB0aGUgZnVuY3Rpb24gcG9pbnRlcnMgdG8gdGhlIGFjdHVhbCBvcGVyYXRpb25zLlxuXG5TcGVjaWZpY2FsbHksIEknbSBub3RpbmcgdGhlIGZ1bmN0aW9uczogYGhhc2hfbmV0NF91YWR0YCwgYGhhc2hfbmV0NF9rYWR0YCwgYGhhc2hfbmV0Nl91YWR0YCwgYW5kIGBoYXNoX25ldDZfa2FkdGAuIFRoZXNlIGFyZSB0aGUgb25lcyB0aGF0IHByZXN1bWFibHkgcGVyZm9ybSB0aGUgdW5kZXJseWluZyBvcGVyYXRpb25zLiBUaGVuLCBvZiBjb3Vyc2UsIHRoZSBnZW5lcmF0ZWQgZnVuY3Rpb25zIGxpa2UgYGhhc2hfbmV0NF9hZGRgLCBgaGFzaF9uZXQ0X2RlbGAsIGBoYXNoX25ldDRfdGVzdGAsIGBoYXNoX25ldDRfcmVzaXplYCwgYW5kIGBoYXNoX25ldDRfZ2NgLlxuXG5UaGUgY2hhbGxlbmdlLCBhcyBhbHdheXMgd2l0aCBTeXprYWxsZXIsIGlzIHdoZXRoZXIgaXQgY2FuIHJlbGlhYmx5IHRhcmdldCB0aGVzZSBmdW5jdGlvbnMuIFNpbmNlIHRoZXkncmUgZGVjbGFyZWQgYXMgYHN0YXRpY2AsIEkgd2FzIGluaXRpYWxseSBjb25jZXJuZWQuIE15IGV4cGVyaWVuY2Ugc3VnZ2VzdHMgdGhhdCBpZiB0aGV54oCZcmUgaW4gdGhlIHN5bWJvbCB0YWJsZSAoYW5kIHVzdWFsbHkgdGhleSBhcmUpLCBTeXprYWxsZXIgc2hvdWxkIGJlIGFibGUgdG8gcmVzb2x2ZSBhbmQgdGFyZ2V0IHRoZW0uIEhvd2V2ZXIsIGl0J3MgZ2VuZXJhbGx5IGNsZWFuZXIgdG8gcHJvdmlkZSB0aGUgbmFtZXMgb2YgdGhlIGdlbmVyYXRlZCBmdW5jdGlvbnMgcmF0aGVyIHRoYW4gcmVseSBvbiB0aGUgdW5kZXJseWluZyBzdGF0aWMgZnVuY3Rpb24gcmVzb2x1dGlvbi5cblxuU28sIGxldCdzIG5haWwgZG93biB0aG9zZSBnZW5lcmF0ZWQgZnVuY3Rpb25zIGZvciB0aGUgYGhhc2hfbmV0NGAgdHlwZS4gSSdsbCBsaXN0IHRoZW0gb3V0OiBgaGFzaF9uZXQ0X2FkZGAsIGBoYXNoX25ldDRfZGVsYCwgYGhhc2hfbmV0NF90ZXN0YCwgYGhhc2hfbmV0NF9yZXNpemVgLCBgaGFzaF9uZXQ0X2djYCwgYGhhc2hfbmV0NF9mbHVzaGAsIGBoYXNoX25ldDRfZGVzdHJveWAsIGBoYXNoX25ldDRfaGVhZGAsIGBoYXNoX25ldDRfbGlzdGAsIGBoYXNoX25ldDRfa2FkdGAsIGFuZCBgaGFzaF9uZXQ0X3VhZHRgLlxuXG5BaCwgaGVyZSdzIGEgZGV0YWlsIEkgbmVlZCB0byBjb25maXJtOiBJdCBzZWVtcyB0aGF0IGBtdHlwZV9hZGRgIGlzICpnZW5lcmF0ZWQqIGFzIGBoYXNoX25ldDRfYWRkYC4gTm93IEkgbmVlZCB0byBxdWlja2x5IGNoZWNrIHRoZSBvYmplY3QgZmlsZSB0byBjb25maXJtIHRoYXQgYGhhc2hfbmV0NF9hZGRgIGFjdHVhbGx5IGV4aXN0cy4gSSdsbCB2ZXJpZnkgdGhpcyBpbW1lZGlhdGVseS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjU1NjUsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNDEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMTc6MDI6MDcuMTA3MTg4NzE0WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjAwNzQwMTUsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImhhc2hfbmV0NF9hZGRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9pcHNldC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDE3OjAyOjA3LjI2NzI2OTQyOFoiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2NDIzOTY4NzAyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgSW1wYWN0IG9mIHRoZSBQYXRjaCoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgYSBiaXQgdHJpY2t5IHRvIHRyYWNrIGRvd24gc2luY2UgaXQncyBnZW5lcmF0ZWQgYnkgbWFjcm9zLiBTdHJhaWdodCBgZ3JlcGAgaXNuJ3QgZ29pbmcgdG8gY3V0IGl0LCBzbyBJIG5lZWQgdG8gZGlnIGludG8gdGhlIG1hY3JvIGV4cGFuc2lvbiBwcm9jZXNzLiBMZXQncyBzdGFydCB3aXRoIGBtdHlwZV9hZGRgIGluIGBpcF9zZXRfaGFzaF9nZW4uaGAuIFJpZ2h0LCBgI2RlZmluZSBtdHlwZV9hZGQgSVBTRVRfVE9LRU4oTVRZUEUsIF9hZGQpYC4gQW5kIGBNVFlQRWAgaXMgZGVmaW5lZCBhcyBgaGFzaF9uZXQ0YC4gVGhlcmVmb3JlLCBgSVBTRVRfVE9LRU4oaGFzaF9uZXQ0LCBfYWRkKWAgZXhwYW5kcyB0byBgaGFzaF9uZXQ0X2FkZGAuIEdvb2QsIHRoYXQgc2hvdWxkIGRlZmluaXRlbHkgYmUgaW4gdGhlIHN5bWJvbCB0YWJsZSwgc28gdGhhdCdzIGEgZ29vZCBzdGFydGluZyBwb2ludCB0byBjb25maXJtIHRoZSBjaGFuZ2VzLlxuXG5JIHNob3VsZCBhbHNvIGNoZWNrIGZ1bmN0aW9ucyBmb3IgdGhlIG90aGVyIGhhc2ggdHlwZXMgdG8gc2VlIGhvdyB0aG9zZSBhcmUgYmVpbmcgaW1wYWN0ZWQuIFNvIEkgc2hvdWxkIGV4YW1pbmUgYGhhc2hfbmV0bmV0NF9hZGRgLCBgaGFzaF9uZXRwb3J0NF9hZGRgLCBgaGFzaF9uZXRpZmFjZTRfYWRkYCwgYGhhc2hfaXBwb3J0bmV0NF9hZGRgLCBhbmQgYGhhc2hfbmV0cG9ydG5ldDRfYWRkYC4gVGhpcyBwYXRjaCBpcyBzcGVjaWZpY2FsbHkgZGVhbGluZyB3aXRoIENJRFIgaGFuZGxpbmcsIGFuZCB0aG9zZSBoYXNoIHR5cGVzLCBmcm9tIHRoZSBuYW1lLCBoYXZlIGBfbmV0YCBpbiB0aGVtIHdoaWNoIHByb2JhYmx5IHVzZXMgaXQuXG5cblRoZSBjb25maWdzIHRoYXQgYXJlIGVuYWJsZWQgYXJlOiBgSVBfU0VUX0hBU0hfSVBQT1JUTkVUYCwgYElQX1NFVF9IQVNIX05FVGAsIGBJUF9TRVRfSEFTSF9ORVRJRkFDRWAsIGBJUF9TRVRfSEFTSF9ORVRORVRgLCBgSVBfU0VUX0hBU0hfTkVUUE9SVGAsIGFuZCBgSVBfU0VUX0hBU0hfTkVUUE9SVE5FVGAuXG5cbkFoLCBidXQgaG9sZCBvbi4gVGhlIHBhdGNoIGlzIG1vZGlmeWluZyBgaXBfc2V0X2hhc2hfZ2VuLmhgIHdoaWNoIGlzIGluY2x1ZGVkIGJ5ICphbGwqIHRoZSBoYXNoIHR5cGVzLiBIb3dldmVyLCB0aGUgQ0lEUiBsb2dpYyBpcyBvbmx5IGNvbmRpdGlvbmFsbHkgY29tcGlsZWQgYmFzZWQgb24gYElQX1NFVF9IQVNIX1dJVEhfTkVUU2AuIFNvIHRoZSBpbXBhY3Qgd2lsbCBiZSBsaW1pdGVkIHRvIG9ubHkgdGhvc2UgdHlwZXMgdGhhdCBhY3R1YWxseSBkZWZpbmUgdGhhdC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hpY2ggZmlsZXMgYWN0dWFsbHkgZGVmaW5lIGBJUF9TRVRfSEFTSF9XSVRIX05FVFNgIHRvIGZ1bGx5IHVuZGVyc3RhbmQgdGhlIHNjb3BlIG9mIHRoaXMgY2hhbmdlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNjQyNSwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMzNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wMlQxNzowMjoxMy42OTEyNDE1NVoiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU3ODYzMTY0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIklQX1NFVF9IQVNIX1dJVEhfTkVUU1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL2lwc2V0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oPTExNj1odGFibGVfc2l6ZSh1OCBoYml0cylcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtMTMwLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg6MTMxOiNpZmRlZiBJUF9TRVRfSEFTSF9XSVRIX05FVFNcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTEzMi0jaWYgSVBTRVRfTkVUX0NPVU5UIFxcdTAwM2UgMVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC0xMzYtI2VuZGlmXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaDoxMzc6I2lmZGVmIElQX1NFVF9IQVNIX1dJVEhfTkVUU19QQUNLRURcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTEzOC0vKiBXaGVuIGNpZHIgaXMgcGFja2VkIHdpdGggbm9tYXRjaCwgY2lkciAtIDEgaXMgc3RvcmVkIGluIHRoZSBkYXRhIGVudHJ5ICovXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTE0OC1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oOjE0OTojZW5kaWYgLyogSVBfU0VUX0hBU0hfV0lUSF9ORVRTICovXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC0xNTAtXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oPTE2Mz1zdGF0aWMgY29uc3QgdW5pb24gbmZfaW5ldF9hZGRyIHplcm9tYXNrID0ge307XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTIyNC0jZGVmaW5lIG10eXBlX2RhdGFfZXF1YWxcXHRJUFNFVF9UT0tFTihNVFlQRSwgX2RhdGFfZXF1YWwpXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaDoyMjU6I2lmZGVmIElQX1NFVF9IQVNIX1dJVEhfTkVUU1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtMjI2LSNkZWZpbmUgbXR5cGVfZG9fZGF0YV9tYXRjaFxcdElQU0VUX1RPS0VOKE1UWVBFLCBfZG9fZGF0YV9tYXRjaClcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg9MzA0PXN0cnVjdCBtdHlwZV9yZXNpemVfYWQge1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC0zMTItXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaDozMTM6I2lmZGVmIElQX1NFVF9IQVNIX1dJVEhfTkVUU1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtMzE0LS8qIE5ldHdvcmsgY2lkciBzaXplIGJvb2sga2VlcGluZyB3aGVuIHRoZSBoYXNoIHN0b3JlcyBkaWZmZXJlbnRcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg9NDI4PW10eXBlX2ZsdXNoKHN0cnVjdCBpcF9zZXQgKnNldClcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtNDMwLVxcdHN0cnVjdCBodHlwZSAqaCA9IHNldC1cXHUwMDNlZGF0YTtcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oOjQzMTojaWZkZWYgSVBfU0VUX0hBU0hfV0lUSF9ORVRTXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC00MzItXFx0c3RydWN0IG5ldF9wcmVmaXhlcyAqbmV0cywgKnRtcDtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtNDU1LVxcdH1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oOjQ1NjojaWZkZWYgSVBfU0VUX0hBU0hfV0lUSF9ORVRTXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC00NTctXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIElQU0VUX05FVF9DT1VOVDsgaSsrKSB7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oPTQ3Mz1tdHlwZV9haGFzaF9kZXN0cm95KHN0cnVjdCBpcF9zZXQgKnNldCwgc3RydWN0IGh0YWJsZSAqdCwgYm9vbCBleHRfZGVzdHJveSlcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTQ3NC17XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaDo0NzU6I2lmZGVmIElQX1NFVF9IQVNIX1dJVEhfTkVUU1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtNDc2LVxcdHN0cnVjdCBodHlwZSAqaCA9IHNldC1cXHUwMDNlZGF0YTtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtNDkwLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg6NDkxOiNpZmRlZiBJUF9TRVRfSEFTSF9XSVRIX05FVFNcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTQ5Mi1cXHRpZiAoZXh0X2Rlc3Ryb3kpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oPTUzNz1tdHlwZV9nY19kbyhzdHJ1Y3QgaXBfc2V0ICpzZXQsIHN0cnVjdCBodHlwZSAqaCwgc3RydWN0IGh0YWJsZSAqdCwgdTMyIHIpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTU0Mi1cXHRzaXplX3QgZHNpemUgPSBzZXQtXFx1MDAzZWRzaXplO1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg6NTQzOiNpZmRlZiBJUF9TRVRfSEFTSF9XSVRIX05FVFNcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTU0NC1cXHR1OCBrO1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC01NjUtXFx0XFx0XFx0c21wX21iX19hZnRlcl9hdG9taWMoKTtcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oOjU2NjojaWZkZWYgSVBfU0VUX0hBU0hfV0lUSF9ORVRTXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC01NjctXFx0XFx0XFx0Zm9yIChrID0gMDsgayBcXHUwMDNjIElQU0VUX05FVF9DT1VOVDsgaysrKVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaD02Nzg9bXR5cGVfcmVzaXplKHN0cnVjdCBpcF9zZXQgKnNldCwgYm9vbCByZXRyaWVkKVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC02ODMtXFx0c2l6ZV90IGhzaXplLCBkc2l6ZSA9IHNldC1cXHUwMDNlZHNpemU7XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaDo2ODQ6I2lmZGVmIElQX1NFVF9IQVNIX1dJVEhfTkVUU1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtNjg1LVxcdHU4IGZsYWdzO1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC02OTUtXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaDo2OTY6I2lmZGVmIElQX1NFVF9IQVNIX1dJVEhfTkVUU1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtNjk3LVxcdHRtcCA9IGttYWxsb2MoZHNpemUsIEdGUF9LRVJORUwpO1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC03NTMtXFx0XFx0XFx0XFx0XFx0Y29udGludWU7XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaDo3NTQ6I2lmZGVmIElQX1NFVF9IQVNIX1dJVEhfTkVUU1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtNzU1LVxcdFxcdFxcdFxcdC8qIFdlIGhhdmUgcmVhZGVycyBydW5uaW5nIHBhcmFsbGVsIHdpdGggdXMsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTgwNy1cXHRcXHRcXHRcXHR0LVxcdTAwM2VocmVnaW9uW25yXS5lbGVtZW50cysrO1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg6ODA4OiNpZmRlZiBJUF9TRVRfSEFTSF9XSVRIX05FVFNcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTgwOS1cXHRcXHRcXHRcXHRtdHlwZV9kYXRhX3Jlc2V0X2ZsYWdzKGQsIFxcdTAwMjZmbGFncyk7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTg0NC1vdXQ6XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaDo4NDU6I2lmZGVmIElQX1NFVF9IQVNIX1dJVEhfTkVUU1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtODQ2LVxcdGtmcmVlKHRtcCk7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oPTkxND1tdHlwZV9hZGQoc3RydWN0IGlwX3NldCAqc2V0LCB2b2lkICp2YWx1ZSwgY29uc3Qgc3RydWN0IGlwX3NldF9leHQgKmV4dCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtOTk1LVxcdFxcdGlmICghZGVsZXRlZCkge1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg6OTk2OiNpZmRlZiBJUF9TRVRfSEFTSF9XSVRIX05FVFNcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTk5Ny1cXHRcXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgSVBTRVRfTkVUX0NPVU5UOyBpKyspXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTEwNDEtXFx0dC1cXHUwMDNlaHJlZ2lvbltyXS5lbGVtZW50cysrO1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg6MTA0MjojaWZkZWYgSVBfU0VUX0hBU0hfV0lUSF9ORVRTXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC0xMDQzLVxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBJUFNFVF9ORVRfQ09VTlQ7IGkrKylcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtMTA0Ny1vdmVyd3JpdGVfZXh0ZW5zaW9uczpcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oOjEwNDg6I2lmZGVmIElQX1NFVF9IQVNIX1dJVEhfTkVUU1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtMTA0OS1cXHRtdHlwZV9kYXRhX3NldF9mbGFncyhkYXRhLCBmbGFncyk7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oPTExMDk9bXR5cGVfZGVsKHN0cnVjdCBpcF9zZXQgKnNldCwgdm9pZCAqdmFsdWUsIGNvbnN0IHN0cnVjdCBpcF9zZXRfZXh0ICpleHQsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTExNTQtXFx0XFx0dC1cXHUwMDNlaHJlZ2lvbltyXS5lbGVtZW50cy0tO1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg6MTE1NTojaWZkZWYgSVBfU0VUX0hBU0hfV0lUSF9ORVRTXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC0xMTU2LVxcdFxcdGZvciAoaiA9IDA7IGogXFx1MDAzYyBJUFNFVF9ORVRfQ09VTlQ7IGorKylcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg9MTIyMT1tdHlwZV9kYXRhX21hdGNoKHN0cnVjdCBtdHlwZV9lbGVtICpkYXRhLCBjb25zdCBzdHJ1Y3QgaXBfc2V0X2V4dCAqZXh0LFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC0xMjI5LVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg6MTIzMDojaWZkZWYgSVBfU0VUX0hBU0hfV0lUSF9ORVRTXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC0xMjMxLS8qIFNwZWNpYWwgdGVzdCBmdW5jdGlvbiB3aGljaCB0YWtlcyBpbnRvIGFjY291bnQgdGhlIGRpZmZlcmVudCBuZXR3b3JrXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oPTEzMDU9bXR5cGVfdGVzdChzdHJ1Y3QgaXBfc2V0ICpzZXQsIHZvaWQgKnZhbHVlLCBjb25zdCBzdHJ1Y3QgaXBfc2V0X2V4dCAqZXh0LFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC0xMzE4LVxcdHQgPSByY3VfZGVyZWZlcmVuY2VfYmgoaC1cXHUwMDNldGFibGUpO1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg6MTMxOTojaWZkZWYgSVBfU0VUX0hBU0hfV0lUSF9ORVRTXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC0xMzIwLVxcdC8qIElmIHdlIHRlc3QgYW4gSVAgYWRkcmVzcyBhbmQgbm90IGEgbmV0d29yayBhZGRyZXNzLFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaD0xNTUyPUlQU0VUX1RPS0VOKEhUWVBFLCBfY3JlYXRlKShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBpcF9zZXQgKnNldCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtMTU2NC0jZW5kaWZcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oOjE1NjU6I2lmZGVmIElQX1NFVF9IQVNIX1dJVEhfTkVUU1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtMTU2Ni1cXHRzdHJ1Y3QgbmV0X3ByZWZpeGVzICpuZXRzO1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC0xNjc0LVxcdFxcdGdvdG8gZnJlZV90O1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg6MTY3NTojaWZkZWYgSVBfU0VUX0hBU0hfV0lUSF9ORVRTXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC0xNjc2LVxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBJUFNFVF9ORVRfQ09VTlQ7IGkrKykge1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC0xNzQ5LVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg6MTc1MDojaWZkZWYgSVBfU0VUX0hBU0hfV0lUSF9ORVRTXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC0xNzUxLWZyZWVfaHJlZ2lvbjpcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0bmV0LmM9MzY9TU9EVUxFX0FMSUFTKFxcXCJpcF9zZXRfaGFzaDppcCxwb3J0LG5ldFxcXCIpO1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcHBvcnRuZXQuYy00NC0gKi9cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwcG9ydG5ldC5jOjQ1OiNkZWZpbmUgSVBfU0VUX0hBU0hfV0lUSF9ORVRTX1BBQ0tFRFxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0bmV0LmMtNDYtI2RlZmluZSBJUF9TRVRfSEFTSF9XSVRIX1BST1RPXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcHBvcnRuZXQuYzo0NzojZGVmaW5lIElQX1NFVF9IQVNIX1dJVEhfTkVUU1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0bmV0LmMtNDgtXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldC5jPTMzPU1PRFVMRV9BTElBUyhcXFwiaXBfc2V0X2hhc2g6bmV0XFxcIik7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldC5jLTM2LSNkZWZpbmUgSFRZUEVcXHRcXHRoYXNoX25ldFxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0LmM6Mzc6I2RlZmluZSBJUF9TRVRfSEFTSF9XSVRIX05FVFNcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldC5jLTM4LVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRpZmFjZS5jPTM1PU1PRFVMRV9BTElBUyhcXFwiaXBfc2V0X2hhc2g6bmV0LGlmYWNlXFxcIik7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldGlmYWNlLmMtMzgtI2RlZmluZSBIVFlQRVxcdFxcdGhhc2hfbmV0aWZhY2VcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldGlmYWNlLmM6Mzk6I2RlZmluZSBJUF9TRVRfSEFTSF9XSVRIX05FVFNcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldGlmYWNlLmMtNDAtI2RlZmluZSBJUF9TRVRfSEFTSF9XSVRIX01VTFRJXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldG5ldC5jPTMyPU1PRFVMRV9BTElBUyhcXFwiaXBfc2V0X2hhc2g6bmV0LG5ldFxcXCIpO1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRuZXQuYy0zNS0jZGVmaW5lIEhUWVBFXFx0XFx0aGFzaF9uZXRuZXRcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldG5ldC5jOjM2OiNkZWZpbmUgSVBfU0VUX0hBU0hfV0lUSF9ORVRTXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRuZXQuYy0zNy0jZGVmaW5lIElQX1NFVF9IQVNIX1dJVEhfTkVUTUFTS1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRwb3J0LmM9MzU9TU9EVUxFX0FMSUFTKFxcXCJpcF9zZXRfaGFzaDpuZXQscG9ydFxcXCIpO1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRwb3J0LmMtMzktI2RlZmluZSBJUF9TRVRfSEFTSF9XSVRIX1BST1RPXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRwb3J0LmM6NDA6I2RlZmluZSBJUF9TRVRfSEFTSF9XSVRIX05FVFNcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldHBvcnQuYy00MS1cXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0cG9ydC5jLTQ1LSAqL1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0cG9ydC5jOjQ2OiNkZWZpbmUgSVBfU0VUX0hBU0hfV0lUSF9ORVRTX1BBQ0tFRFxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0cG9ydC5jLTQ3LVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRwb3J0bmV0LmM9MzI9TU9EVUxFX0FMSUFTKFxcXCJpcF9zZXRfaGFzaDpuZXQscG9ydCxuZXRcXFwiKTtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0cG9ydG5ldC5jLTM2LSNkZWZpbmUgSVBfU0VUX0hBU0hfV0lUSF9QUk9UT1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0cG9ydG5ldC5jOjM3OiNkZWZpbmUgSVBfU0VUX0hBU0hfV0lUSF9ORVRTXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRwb3J0bmV0LmMtMzgtI2RlZmluZSBJUFNFVF9ORVRfQ09VTlQgMlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMlQxNzowMjoxMy44NDkxMTk3NTRaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTQ2ODc3MDE1OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIElQIFNldCBIYXNoIEZ1bmN0aW9ucyoqXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgaW4uIEkgc2VlIGEgc3VpdGUgb2YgQyBmaWxlczogYGlwX3NldF9oYXNoX2lwcG9ydG5ldC5jYCwgYGlwX3NldF9oYXNoX25ldC5jYCwgZXRjLiBJbW1lZGlhdGVseSwgSSdtIHplcm9pbmcgaW4gb24gdGhlIGZ1bmN0aW9ucyB0aGF0IGFyZSAqZ2VuZXJhdGVkKiBmb3IgdGhlc2UgaGFzaCB0eXBlcy4gVGhhdCdzIHdoZXJlIHRoZSBjb3JlIGxvZ2ljIHdpbGwgYmUuIEknbSB0aGlua2luZyBvZiBmdW5jdGlvbnMgbGlrZSBgaGFzaF9uZXQ0X2FkZGAsIGBoYXNoX25ldDRfZGVsYCwgYW5kIHRoZSBvdGhlcnMgSSBleHBlY3QgdG8gc2VlIGZvciBJUHY0IGFuZCBJUHY2LCB0aGUgdmFyaWF0aW9ucyBmb3IgcG9ydCBhbmQgaW50ZXJmYWNlIGNvbWJpbmF0aW9uczogYGhhc2hfbmV0Nl9hZGRgLCBgaGFzaF9uZXRwb3J0NF9hZGRgLCBgaGFzaF9uZXRpZmFjZTZfYWRkYCwgYW5kIHNvIG9uLiBNeSBmb2N1cyBpcyBvbiB0aGUgYWRkL2RlbC90ZXN0L3Jlc2l6ZS9nYyBvcGVyYXRpb25zIOKAkyB0aGUgZnVuZGFtZW50YWwgYnVpbGRpbmcgYmxvY2tzLiBJIGtub3cgZnJvbSBleHBlcmllbmNlIHRoYXQgdGhlIHBlcmZvcm1hbmNlIG9mIHRoZXNlIGhhc2ggc2V0cyByZWFsbHkgaGluZ2VzIG9uIHRoZSBlZmZpY2llbmN5IG9mIHRob3NlIGZ1bmN0aW9ucy5cblxuU3BlY2lmaWNhbGx5LCBJIHdhbnQgdG8gY29uZmlybSB3aGV0aGVyIGBoYXNoX25ldDRfdGVzdF9jaWRyc2AgaXMgYWN0dWFsbHkgZ2VuZXJhdGVkLiBJIHJlY2FsbCB0aGF0IGlmIGBJUF9TRVRfSEFTSF9XSVRIX05FVFNgIGlzIGRlZmluZWQsIHRoaXMgY2FwYWJpbGl0eSBpcyBzdXBwb3J0ZWQuIEEgcXVpY2sgc2NhbiBvZiB0aGUgY29kZSB2ZXJpZmllcyB0aGF0IGBtdHlwZV90ZXN0X2NpZHJzYCBpcyBpbmRlZWQgZGVmaW5lZCBiYXNlZCBvbiB0aGF0IGNvbmRpdGlvbi4gVGltZSB0byBjaGVjayBgaXBfc2V0X2hhc2hfZ2VuLmhgIGFuZCBjb25maXJtIGhvdyB0aG9zZSBmdW5jdGlvbnMgYXJlIGRlZmluZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMxMTc2LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDAyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDE3OjAyOjE5LjMxNzg5MjU2MloiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjI0MjM4NzcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibXR5cGVfdGVzdF9jaWRyc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL2lwc2V0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oPTE2Mz1zdGF0aWMgY29uc3QgdW5pb24gbmZfaW5ldF9hZGRyIHplcm9tYXNrID0ge307XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTIwNS0jdW5kZWYgbXR5cGVfZGVsXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaDoyMDY6I3VuZGVmIG10eXBlX3Rlc3RfY2lkcnNcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTIwNy0jdW5kZWYgbXR5cGVfdGVzdFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC0yNTAtI2RlZmluZSBtdHlwZV9kZWxcXHRcXHRJUFNFVF9UT0tFTihNVFlQRSwgX2RlbClcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oOjI1MTojZGVmaW5lIG10eXBlX3Rlc3RfY2lkcnNcXHRJUFNFVF9UT0tFTihNVFlQRSwgX3Rlc3RfY2lkcnMpXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC0yNTItI2RlZmluZSBtdHlwZV90ZXN0XFx0XFx0SVBTRVRfVE9LRU4oTVRZUEUsIF90ZXN0KVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaD0xMjM0PXN0YXRpYyBpbnRcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oOjEyMzU6bXR5cGVfdGVzdF9jaWRycyhzdHJ1Y3QgaXBfc2V0ICpzZXQsIHN0cnVjdCBtdHlwZV9lbGVtICpkLFxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtMTIzNi1cXHRcXHQgY29uc3Qgc3RydWN0IGlwX3NldF9leHQgKmV4dCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg9MTMwNT1tdHlwZV90ZXN0KHN0cnVjdCBpcF9zZXQgKnNldCwgdm9pZCAqdmFsdWUsIGNvbnN0IHN0cnVjdCBpcF9zZXRfZXh0ICpleHQsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTEzMjYtXFx0aWYgKGkgPT0gSVBTRVRfTkVUX0NPVU5UKSB7XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaDoxMzI3OlxcdFxcdHJldCA9IG10eXBlX3Rlc3RfY2lkcnMoc2V0LCBkLCBleHQsIG1leHQsIGZsYWdzKTtcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTEzMjgtXFx0XFx0Z290byBvdXQ7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDE3OjAyOjE5LjM4MDMyMTIwOVoiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2OTk2ODEwNjUyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czpcblxuKipBbmFseXppbmcgTmV0d29yayBIYXNoIFRhYmxlIE9wZXJhdGlvbnMqKlxuXG5Pa2F5LCBzbyBJIHNlZSBhIGdlbmVyYXRlZCBgaGFzaF9uZXQ0X3Rlc3RfY2lkcnNgIGZ1bmN0aW9uLiBUaGF0J3MgZ29vZCwgbGlrZWx5IGZvciBxdWlja2x5IHRlc3RpbmcgQ0lEUnMgd2l0aGluIHRoZSBuZXR3b3JrIGhhc2ggdGFibGUuIEFuZCBJJ20gc2VlaW5nIHN1cHBvcnRpbmcgZnVuY3Rpb25zOiBgaGFzaF9uZXQ0X2FkZGAsIGBoYXNoX25ldDRfZGVsYCwgYGhhc2hfbmV0NF9yZXNpemVgLCBhbmQgYGhhc2hfbmV0NF9nY2AuIFRoYXQgbWFrZXMgc2Vuc2UgLSB3ZSBuZWVkIGZ1bmN0aW9ucyB0byBtYW5pcHVsYXRlIHRoZSB0YWJsZSwgcmVzaXplIGl0IGFzIG5lZWRlZCwgYW5kIGdhcmJhZ2UgY29sbGVjdCBwb3RlbnRpYWxseSBzdGFsZSBlbnRyaWVzLiBNeSBpbW1lZGlhdGUgY29uY2VybiwgYXMgYW4gZXhwZXJ0IGluIHRoaXMsIGlzIGhvdyB0aGUgcmVzaXplIGFuZCBHQyBhcmUgYmVpbmcgaGFuZGxlZC4gSSdtIGdvaW5nIHRvIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIGBtdHlwZV9yZXNpemVgIGFuZCBgbXR5cGVfZ2NgIGZ1bmN0aW9ucyBub3cgdG8gZW5zdXJlIHRoZWlyIGVmZmljaWVudCBhbmQgY29ycmVjdCBvcGVyYXRpb24sIHdoaWNoIGlzIGNyaXRpY2FsIGZvciBnb29kIHBlcmZvcm1hbmNlLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMjQyOSwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDE3OjAyOjI2LjM3NzEzNDAxWiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MTM2NTg1NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtdHlwZV9yZXNpemVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9pcHNldC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaD0xNjM9c3RhdGljIGNvbnN0IHVuaW9uIG5mX2luZXRfYWRkciB6ZXJvbWFzayA9IHt9O1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC0yMDgtI3VuZGVmIG10eXBlX3VyZWZcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oOjIwOTojdW5kZWYgbXR5cGVfcmVzaXplXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC0yMTAtI3VuZGVmIG10eXBlX2V4dF9zaXplXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaDoyMTE6I3VuZGVmIG10eXBlX3Jlc2l6ZV9hZFxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtMjEyLSN1bmRlZiBtdHlwZV9oZWFkXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTI1My0jZGVmaW5lIG10eXBlX3VyZWZcXHRcXHRJUFNFVF9UT0tFTihNVFlQRSwgX3VyZWYpXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaDoyNTQ6I2RlZmluZSBtdHlwZV9yZXNpemVcXHRcXHRJUFNFVF9UT0tFTihNVFlQRSwgX3Jlc2l6ZSlcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTI1NS0jZGVmaW5lIG10eXBlX2V4dF9zaXplXFx0XFx0SVBTRVRfVE9LRU4oTVRZUEUsIF9leHRfc2l6ZSlcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oOjI1NjojZGVmaW5lIG10eXBlX3Jlc2l6ZV9hZFxcdFxcdElQU0VUX1RPS0VOKE1UWVBFLCBfcmVzaXplX2FkKVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtMjU3LSNkZWZpbmUgbXR5cGVfaGVhZFxcdFxcdElQU0VUX1RPS0VOKE1UWVBFLCBfaGVhZClcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg9MjgzPXN0cnVjdCBodHlwZSB7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTMwMy0vKiBBRER8REVMIGVudHJpZXMgc2F2ZWQgZHVyaW5nIHJlc2l6ZSAqL1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg6MzA0OnN0cnVjdCBtdHlwZV9yZXNpemVfYWQge1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtMzA1LVxcdHN0cnVjdCBsaXN0X2hlYWQgbGlzdDtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg9Njc3PXN0YXRpYyBpbnRcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oOjY3ODptdHlwZV9yZXNpemUoc3RydWN0IGlwX3NldCAqc2V0LCBib29sIHJldHJpZWQpXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC02Nzkte1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC02OTEtXFx0c3RydWN0IGxpc3RfaGVhZCAqbCwgKmx0O1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg6NjkyOlxcdHN0cnVjdCBtdHlwZV9yZXNpemVfYWQgKng7XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC02OTMtXFx0dTMyIGksIGosIHIsIG5yLCBrZXk7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTgyOC1cXHRsaXN0X2Zvcl9lYWNoX3NhZmUobCwgbHQsIFxcdTAwMjZvcmlnLVxcdTAwM2VhZCkge1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg6ODI5OlxcdFxcdHggPSBsaXN0X2VudHJ5KGwsIHN0cnVjdCBtdHlwZV9yZXNpemVfYWQsIGxpc3QpO1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtODMwLVxcdFxcdGlmICh4LVxcdTAwM2VhZCA9PSBJUFNFVF9BREQpIHtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg9OTE0PW10eXBlX2FkZChzdHJ1Y3QgaXBfc2V0ICpzZXQsIHZvaWQgKnZhbHVlLCBjb25zdCBzdHJ1Y3QgaXBfc2V0X2V4dCAqZXh0LFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC0xMDczLVxcdFxcdC8qIFJlc2l6ZSBpcyBpbiBwcm9jZXNzIGFuZCBrZXJuZWwgc2lkZSBhZGQsIHNhdmUgdmFsdWVzICovXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaDoxMDc0OlxcdFxcdHN0cnVjdCBtdHlwZV9yZXNpemVfYWQgKng7XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC0xMDc1LVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg6MTA3NjpcXHRcXHR4ID0ga3phbGxvY19vYmooc3RydWN0IG10eXBlX3Jlc2l6ZV9hZCwgR0ZQX0FUT01JQyk7XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC0xMDc3LVxcdFxcdGlmICgheClcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg9MTEwOT1tdHlwZV9kZWwoc3RydWN0IGlwX3NldCAqc2V0LCB2b2lkICp2YWx1ZSwgY29uc3Qgc3RydWN0IGlwX3NldF9leHQgKmV4dCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtMTExNi1cXHRzdHJ1Y3QgaGJ1Y2tldCAqbjtcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oOjExMTc6XFx0c3RydWN0IG10eXBlX3Jlc2l6ZV9hZCAqeCA9IE5VTEw7XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC0xMTE4LVxcdGludCBpLCBqLCBrLCByLCByZXQgPSAtSVBTRVRfRVJSX0VYSVNUO1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC0xMTY1LVxcdFxcdFxcdCAqL1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg6MTE2NjpcXHRcXHRcXHR4ID0ga3phbGxvY19vYmooc3RydWN0IG10eXBlX3Jlc2l6ZV9hZCwgR0ZQX0FUT01JQyk7XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC0xMTY3LVxcdFxcdFxcdGlmICh4KSB7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oPTE1MzE9c3RhdGljIGNvbnN0IHN0cnVjdCBpcF9zZXRfdHlwZV92YXJpYW50IG10eXBlX3ZhcmlhbnQgPSB7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTE1NDMtXFx0LnVyZWZcXHQ9IG10eXBlX3VyZWYsXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaDoxNTQ0OlxcdC5yZXNpemVcXHQ9IG10eXBlX3Jlc2l6ZSxcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTE1NDUtXFx0LnNhbWVfc2V0ID0gbXR5cGVfc2FtZV9zZXQsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDE3OjAyOjI2LjQzODUwNDExOFoiLCJTZXEiOjMxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MTk2ODAyMzY4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBhcyBpZiBpdCdzIG15IG93biBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqRGVlcCBEaXZlIGludG8gYG10eXBlX2djYCoqXG5cbkFscmlnaHQsIGxldCdzIGRpc3NlY3QgdGhpcy4gV2hlbiBJIHNlZSBgbXR5cGVfZ2NgLCBteSBicmFpbiBpbW1lZGlhdGVseSBqdW1wcyB0byBnYXJiYWdlIGNvbGxlY3Rpb24gYW5kIG1lbW9yeSBtYW5hZ2VtZW50LCBwYXJ0aWN1bGFybHkgYXMgaXQgcmVsYXRlcyB0bywgcHJlc3VtYWJseSwgc29tZSBraW5kIG9mIG1lZGlhIHR5cGUgcmVwcmVzZW50YXRpb24uIFRoZSBuYW1pbmcgc3VnZ2VzdHMgdGhhdCBcIm10eXBlXCIgaXMgYSBtZWRpYSB0eXBlIGFuZCBcImdjXCIgaXMgcHJvYmFibHkgYW4gaW5kaWNhdG9yIGZvciBnYXJiYWdlIGNvbGxlY3Rpb24uXG5cbk15IGZpcnN0IHRob3VnaHQgaXMgYWx3YXlzIGVmZmljaWVuY3kuIElzIHRoaXMgYSBzeXN0ZW0gd2hlcmUgd2UncmUgdHJhY2tpbmcgbWVkaWEgdHlwZXMgaW4gYSB3YXkgdGhhdCByZXF1aXJlcyBleHBsaWNpdCBtYW5hZ2VtZW50LCBvciBhcmUgd2UgaG9waW5nIHRoZSBnYXJiYWdlIGNvbGxlY3RvciBjYW4gaGFuZGxlIG1vc3Qgb2YgdGhlIGNsZWFudXA/IFdoYXQgYXJlIHRoZSBpbXBsaWNhdGlvbnMgb2YgZGlmZmVyZW50IG1lZGlhIHR5cGVzIG9uIHRoZSBoZWFwPyBEb2VzIHRoaXMgYG10eXBlX2djYCByZWxhdGUgdG8gYSBwb29sIG9mIG1lZGlhIHR5cGUgb2JqZWN0IGluc3RhbmNlcyBvciBpcyBpdCByZWxhdGVkIHRvIHRoZSBkYXRhIHN0cnVjdHVyZXMgc3RvcmluZyB0aGUgZGF0YSBmb3IgdGhlIGdpdmVuIG1lZGlhIHR5cGU/XG5cbkknbSBpbnN0YW50bHkgY29uc2lkZXJpbmcgZWRnZSBjYXNlcy4gSWYgYG10eXBlX2djYCBpcyBhIGZsYWcgb3IgYSBtZXRhZGF0YSBhdHRyaWJ1dGUgb24gYSBtZWRpYSB0eXBlIHJlcHJlc2VudGF0aW9uLCBob3cgaXMgdGhpcyBoYW5kbGVkIGluIGEgbXVsdGl0aHJlYWRlZCBlbnZpcm9ubWVudD8gQXJlIHRoZXJlIHRocmVhZC1zYWZlIG1lY2hhbmlzbXMgaW4gcGxhY2U/IE9yIGlzIGl0IHByZXN1bWVkIHRvIGJlIHNpbmdsZS10aHJlYWRlZD8gV2hhdCBoYXBwZW5zIGlmIHlvdSBoYXZlIGNyb3NzLXJlZmVyZW5jZXM/IElzIHRoZXJlIGEgY3ljbGljIGRlcGVuZGVuY3kgdGhhdCB0aGUgR0MgbWlnaHQgbm90IGhhbmRsZSB3ZWxsPyBIb3cgd291bGQgdGhhdCBtYW5pZmVzdD9cblxuVGhlbiBJ4oCZbSB0aGlua2luZyBhYm91dCB0aGUgdW5kZXJseWluZyByZXByZXNlbnRhdGlvbi4gV2hhdCBkb2VzIGFuIFwibXR5cGVcIiBldmVuICpsb29rKiBsaWtlIGhlcmU/IElzIGl0IGEgc3RyaW5nLCBhbiBpbnRlZ2VyIGVudW0sIGEgbW9yZSBjb21wbGV4IG9iamVjdCB3aXRoIG5lc3RlZCBkYXRhIHN0cnVjdHVyZXM/IEhvdyBpcyBpdCBzdG9yZWQ/IEluIGEgaGFzaCB0YWJsZT8gQSB0cmVlPyBBIGxpbmtlZCBsaXN0PyBFYWNoIGNob2ljZSBoYXMgR0MgaW1wbGljYXRpb25zLiBIb3cgb2Z0ZW4gYXJlIHRoZXNlIG10eXBlcyBjcmVhdGVkLCBtb2RpZmllZCwgYW5kIGRlc3Ryb3llZD8gQXJlIHdlIHRhbGtpbmcgYWJvdXQgYSBtYXNzaXZlLCBmcmVxdWVudGx5IGNoYW5naW5nIG1lZGlhIHR5cGUgY2F0YWxvZywgb3IgYSByZWxhdGl2ZWx5IHN0YXRpYyBzZXQ/IEFuZCB3aGF0IGxldmVsIG9mIEdDIGNvbnRyb2wgZG8gd2UgaGF2ZT9cblxuRmluYWxseSwgdGhlIGRlc2lnbiBpcyBrZXkuIERpZCBzb21lb25lIGltcGxlbWVudCB0aGlzIHdpdGggZXhwbGljaXQgbWVtb3J5IGNvbnRyb2wgb3IgaW1wbGljaXRseT8gVGhpcyByZWFsbHkgaW1wYWN0cyBteSBuZXh0IHF1ZXN0aW9uLCBpcyB0aGUgR0MgaW1wbGVtZW50YXRpb24gdGhlIGJvdHRsZW5lY2s/IEFyZSB0aGVyZSBvcHRpbWl6YXRpb24gb3Bwb3J0dW5pdGllcyBoZXJlP1xuXG5PdmVyYWxsLCBteSBtaW5kIGlzIHJhY2luZyB0aHJvdWdoIGFsbCB0aGUgcG90ZW50aWFsIGRlc2lnbiBjaG9pY2VzIGFuZCB0aGVpciBwb3RlbnRpYWwgbWVtb3J5IG1hbmFnZW1lbnQgcGl0ZmFsbHMgcmVsYXRlZCB0byBnYXJiYWdlIGNvbGxlY3Rpb24uIEnigJltIHN0YXJ0aW5nIHRvIG1lbnRhbGx5IGJ1aWxkIGEgY2hlY2tsaXN0IG9mIHF1ZXN0aW9ucyB0byBhc2ssIGRlc2lnbiBkZWNpc2lvbnMgdG8gZXZhbHVhdGUsIGFuZCBwb3RlbnRpYWwgYm90dGxlbmVja3MgdG8gYW50aWNpcGF0ZS4gTGV0J3MgZGlnIGRlZXBlci5cblxuXG4iLCJJbnB1dFRva2VucyI6MzQxNTQsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDE3OjAyOjMxLjYzNTMwODMxNloiLCJTZXEiOjMyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjE1NzM5MzcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibXR5cGVfZ2NcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9pcHNldC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX2dlbi5oLTktI2RlZmluZSBtdHlwZV9kb190ZXN0XFx0XFx0SVBTRVRfVE9LRU4oTVRZUEUsIF9kb190ZXN0KVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9nZW4uaDoxMDojZGVmaW5lIG10eXBlX2djX3Rlc3RcXHRcXHRJUFNFVF9UT0tFTihNVFlQRSwgX2djX3Rlc3QpXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX2dlbi5oLTExLSNkZWZpbmUgbXR5cGVfaXNfZmlsbGVkXFx0XFx0SVBTRVRfVE9LRU4oTVRZUEUsIF9pc19maWxsZWQpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfZ2VuLmgtMTgtI2RlZmluZSBtdHlwZV9hZGRfdGltZW91dFxcdElQU0VUX1RPS0VOKE1UWVBFLCBfYWRkX3RpbWVvdXQpXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX2dlbi5oOjE5OiNkZWZpbmUgbXR5cGVfZ2NfaW5pdFxcdFxcdElQU0VUX1RPS0VOKE1UWVBFLCBfZ2NfaW5pdClcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfZ2VuLmgtMjAtI2RlZmluZSBtdHlwZV9rYWR0XFx0XFx0SVBTRVRfVE9LRU4oTVRZUEUsIF9rYWR0KVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX2dlbi5oLTMxLSNkZWZpbmUgbXR5cGVfbGlzdFxcdFxcdElQU0VUX1RPS0VOKE1UWVBFLCBfbGlzdClcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfZ2VuLmg6MzI6I2RlZmluZSBtdHlwZV9nY1xcdFxcdElQU0VUX1RPS0VOKE1UWVBFLCBfZ2MpXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX2dlbi5oLTMzLSNkZWZpbmUgbXR5cGVfY2FuY2VsX2djXFx0XFx0SVBTRVRfVE9LRU4oTVRZUEUsIF9jYW5jZWxfZ2MpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfZ2VuLmg9Mzg9c3RhdGljIHZvaWRcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfZ2VuLmg6Mzk6bXR5cGVfZ2NfaW5pdChzdHJ1Y3QgaXBfc2V0ICpzZXQsIHZvaWQgKCpnYykoc3RydWN0IHRpbWVyX2xpc3QgKnQpKVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9nZW4uaC00MC17XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfZ2VuLmg9MjY1PXN0YXRpYyB2b2lkXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX2dlbi5oOjI2NjptdHlwZV9nYyhzdHJ1Y3QgdGltZXJfbGlzdCAqdClcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfZ2VuLmgtMjY3LXtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9nZW4uaC0yNzctXFx0Zm9yIChpZCA9IDA7IGlkIFxcdTAwM2MgbWFwLVxcdTAwM2VlbGVtZW50czsgaWQrKylcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfZ2VuLmg6Mjc4OlxcdFxcdGlmIChtdHlwZV9nY190ZXN0KGlkLCBtYXAsIHNldC1cXHUwMDNlZHNpemUpKSB7XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX2dlbi5oLTI3OS1cXHRcXHRcXHR4ID0gZ2V0X2V4dChzZXQsIG1hcCwgaWQpO1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaD0xNjM9c3RhdGljIGNvbnN0IHVuaW9uIG5mX2luZXRfYWRkciB6ZXJvbWFzayA9IHt9O1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC0yMTMtI3VuZGVmIG10eXBlX2xpc3RcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oOjIxNDojdW5kZWYgbXR5cGVfZ2NfZG9cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oOjIxNTojdW5kZWYgbXR5cGVfZ2NcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oOjIxNjojdW5kZWYgbXR5cGVfZ2NfaW5pdFxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtMjE3LSN1bmRlZiBtdHlwZV9jYW5jZWxfZ2NcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtMjU4LSNkZWZpbmUgbXR5cGVfbGlzdFxcdFxcdElQU0VUX1RPS0VOKE1UWVBFLCBfbGlzdClcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oOjI1OTojZGVmaW5lIG10eXBlX2djX2RvXFx0XFx0SVBTRVRfVE9LRU4oTVRZUEUsIF9nY19kbylcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oOjI2MDojZGVmaW5lIG10eXBlX2djXFx0XFx0SVBTRVRfVE9LRU4oTVRZUEUsIF9nYylcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oOjI2MTojZGVmaW5lIG10eXBlX2djX2luaXRcXHRcXHRJUFNFVF9UT0tFTihNVFlQRSwgX2djX2luaXQpXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC0yNjItI2RlZmluZSBtdHlwZV9jYW5jZWxfZ2NcXHRcXHRJUFNFVF9UT0tFTihNVFlQRSwgX2NhbmNlbF9nYylcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg9NTM2PXN0YXRpYyB2b2lkXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaDo1Mzc6bXR5cGVfZ2NfZG8oc3RydWN0IGlwX3NldCAqc2V0LCBzdHJ1Y3QgaHR5cGUgKmgsIHN0cnVjdCBodGFibGUgKnQsIHUzMiByKVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtNTM4LXtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg9NjA5PXN0YXRpYyB2b2lkXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaDo2MTA6bXR5cGVfZ2Moc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtNjExLXtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtNjM3LVxcdGlmICghdC1cXHUwMDNlcmVzaXppbmcpXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaDo2Mzg6XFx0XFx0bXR5cGVfZ2NfZG8oc2V0LCBoLCB0LCByKTtcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTYzOS1cXHRzcGluX3VubG9ja19iaChcXHUwMDI2Z2MtXFx1MDAzZWxvY2spO1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaD02NTA9c3RhdGljIHZvaWRcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oOjY1MTptdHlwZV9nY19pbml0KHN0cnVjdCBodGFibGVfZ2MgKmdjKVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtNjUyLXtcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oOjY1MzpcXHRJTklUX0RFRkVSUkFCTEVfV09SSyhcXHUwMDI2Z2MtXFx1MDAzZWR3b3JrLCBtdHlwZV9nYyk7XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC02NTQtXFx0cXVldWVfZGVsYXllZF93b3JrKHN5c3RlbV9wb3dlcl9lZmZpY2llbnRfd3EsIFxcdTAwMjZnYy1cXHUwMDNlZHdvcmssIEhaKTtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg9OTE0PW10eXBlX2FkZChzdHJ1Y3QgaXBfc2V0ICpzZXQsIHZvaWQgKnZhbHVlLCBjb25zdCBzdHJ1Y3QgaXBfc2V0X2V4dCAqZXh0LFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC05MzgtXFx0XFx0aWYgKFNFVF9XSVRIX1RJTUVPVVQoc2V0KSlcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oOjkzOTpcXHRcXHRcXHRtdHlwZV9nY19kbyhzZXQsIGgsIHQsIHIpO1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtOTQwLVxcdFxcdG1heGVsZW0gPSBoLVxcdTAwM2VtYXhlbGVtO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMlQxNzowMjozMS42OTY4ODc5MDRaIiwiU2VxIjozMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTAyMDk0MDgyMjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBHZW5lcmF0ZWQgSGFzaCBGdW5jdGlvbnMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGUgZ2VuZXJhdGVkIGhhc2ggZnVuY3Rpb25zLiBXZSd2ZSBnb3QgYGhhc2hfbmV0NF9nY2AsIGBoYXNoX25ldDRfZ2NfZG9gLCBgaGFzaF9uZXQ0X3Jlc2l6ZWAsIGBoYXNoX25ldDRfYWRkYCwgYW5kIGBoYXNoX25ldDRfZGVsYC4gSSBzZWUgdGhhdCBgaGFzaF9uZXQ0X3Rlc3RfY2lkcnNgIGlzIGNvbmRpdGlvbmFsOyBpdCdzIG9ubHkgZ2VuZXJhdGVkIGlmIGBJUF9TRVRfSEFTSF9XSVRIX05FVFNgIGlzIGRlZmluZWQuIEdvb2QgdG8gbm90ZS5cblxuSSdtIHRoaW5raW5nLCBpbnN0ZWFkIG9mIGdvaW5nIHRocm91Z2ggdGhlIG9iamVjdCBmaWxlIHdpdGggYHJlYWQtZmlsZWAgb3IgYGdyZXBwZXJgLCBJIGNhbiBqdXN0IGxpc3QgdGhlbSBiYXNlZCBvbiB0aGUgYE1UWVBFYCB2YWx1ZXMuIFRoYXQncyBjbGVhbmVyLiBMZXQncyBzZWUuLi4gdGhlIGBNVFlQRWBzIHRoYXQgYXJlIHJlbGV2YW50IGhlcmUgYXJlOiBgaGFzaF9uZXQ0YCwgYGhhc2hfbmV0NmAsIGBoYXNoX25ldG5ldDRgLCBgaGFzaF9uZXRuZXQ2YCwgYGhhc2hfbmV0cG9ydDRgLCBgaGFzaF9uZXRwb3J0NmAsIGBoYXNoX25ldGlmYWNlNGAsIGBoYXNoX25ldGlmYWNlNmAsIGBoYXNoX2lwcG9ydG5ldDRgLCBgaGFzaF9pcHBvcnRuZXQ2YCwgYGhhc2hfbmV0cG9ydG5ldDRgLCBhbmQgYGhhc2hfbmV0cG9ydG5ldDZgLlxuXG5UaGUgZnVuY3Rpb25zIGdlbmVyYXRlZCBmb3IgZWFjaCBvZiB0aGVzZSBgTVRZUEVgcyBhcmUgZmFpcmx5IHByZWRpY3RhYmxlLiBXZSBoYXZlOiBge01UWVBFfV9hZGRgLCBge01UWVBFfV9kZWxgLCBge01UWVBFfV9yZXNpemVgLCBge01UWVBFfV9nY2AsIGFuZCwgYmVjYXVzZSBgSVBfU0VUX0hBU0hfV0lUSF9ORVRTYCBpcyBkZWZpbmVkIChhbmQgaXQgKmlzKiBmb3IgdGhlc2UgY2FzZXMpLCBge01UWVBFfV90ZXN0X2NpZHJzYC5cblxuSSBjYW4gY29uZmlybSB0aGF0IGBoYXNoX25ldDRfdGVzdF9jaWRyc2AgaXMsIGluIGZhY3QsIGRlZmluZWQgYmVjYXVzZSBgbXR5cGVfdGVzdF9jaWRyc2AgaXMuXG5cbkxldCBtZSByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zLiBSaWdodCwgdGhlIG9uZXMgdGhhdCBtYXR0ZXIgaGVyZSBhcmU6IGBJUF9TRVRfSEFTSF9JUFBPUlRORVRgLCBgSVBfU0VUX0hBU0hfTkVUYCwgYElQX1NFVF9IQVNIX05FVElGQUNFYCwgYElQX1NFVF9IQVNIX05FVE5FVGAsIGBJUF9TRVRfSEFTSF9ORVRQT1JUYCwgYW5kIGBJUF9TRVRfSEFTSF9ORVRQT1JUTkVUYC4gT2gsIGFuZCB0aGUgb3ZlcmFyY2hpbmcgb25lIGlzIGBJUF9TRVRgLCBvZiBjb3Vyc2UuIFRoaXMgcGF0Y2ggbW9kaWZpZXMgYGlwX3NldF9oYXNoX2dlbi5oYCwgc28gaXQncyBjbGVhcmx5IGNlbnRyYWwgdG8gdGhlIGhhc2ggdHlwZSBnZW5lcmF0aW9uLiBUaGUgbWFjcm8gYElQX1NFVF9IQVNIX1dJVEhfTkVUU2AgaXNuJ3QgYSBrY29uZmlnIG9wdGlvbiwgc28gdGhlIGxpc3QgSSBqdXN0IGdhdmUgaXMgaXQuXG5cbkkgc2hvdWxkIGFsc28gbWFrZSBzdXJlIEkgaGF2ZSB0aGUgZnVsbCBsaXN0IG9mIGdlbmVyYXRlZCBmdW5jdGlvbnMuIExldCdzIHNlZTogYG10eXBlX2FkZF9jaWRyYCBiZWNvbWVzIGB7TVRZUEV9X2FkZF9jaWRyYCwgYG10eXBlX2RlbF9jaWRyYCBiZWNvbWVzIGB7TVRZUEV9X2RlbF9jaWRyYCwgYG10eXBlX2ZsdXNoYCBiZWNvbWVzIGB7TVRZUEV9X2ZsdXNoYCwgYG10eXBlX2FoYXNoX2Rlc3Ryb3lgIGlzIGB7TVRZUEV9X2FoYXNoX2Rlc3Ryb3lgLCBgbXR5cGVfZGVzdHJveWAgaXMgYHtNVFlQRX1fZGVzdHJveWAsIGBtdHlwZV9nY19kb2AgaXMgYHtNVFlQRX1fZ2NfZG9gLCBgbXR5cGVfZ2NgIGlzIGB7TVRZUEV9X2djYCwgYG10eXBlX3Jlc2l6ZWAgaXMgYHtNVFlQRX1fcmVzaXplYCwgYG10eXBlX2FkZGAgaXMgYHtNVFlQRX1fYWRkYCwgYG10eXBlX2RlbGAgaXMgYHtNVFlQRX1fZGVsYCwgYG10eXBlX3Rlc3RfY2lkcnNgIGlzIGB7TVRZUEV9X3Rlc3RfY2lkcnNgLCBhbmQgYG10eXBlX3VyZWZgIGlzIGB7TVRZUEV9X3VyZWZgLlxuXG5BbmQgSSBzZWUgdGhhdCBgSVBTRVRfVE9LRU4oSFRZUEUsIF9jcmVhdGUpYCBleHBhbmRzIHRvIGBoYXNoX25ldF9jcmVhdGVgIGluIGBpcF9zZXRfaGFzaF9uZXQuY2AsIHdoZXJlIGBIVFlQRWAgaXMgYGhhc2hfbmV0YC4gTmVlZCB0byBsb29rIGF0IGBIVFlQRWAgaW4gdGhlIG90aGVyIGZpbGVzIHRvIGVuc3VyZSBjb25zaXN0ZW5jeS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzYzNDIsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4OTAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMTc6MDI6NDEuOTA2Mjk4Mzk2WiIsIlNlcSI6MzQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1ODMxNDQyOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCIjZGVmaW5lIEhUWVBFXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvaXBzZXQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXAuYz0zMz1NT0RVTEVfQUxJQVMoXFxcImlwX3NldF9oYXNoOmlwXFxcIik7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwLmMtMzUtLyogVHlwZSBzcGVjaWZpYyBmdW5jdGlvbiBwcmVmaXggKi9cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwLmM6MzY6I2RlZmluZSBIVFlQRVxcdFxcdGhhc2hfaXBcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwLmMtMzctI2RlZmluZSBJUF9TRVRfSEFTSF9XSVRIX05FVE1BU0tcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBtYWMuYz0zMj1NT0RVTEVfQUxJQVMoXFxcImlwX3NldF9oYXNoOmlwLG1hY1xcXCIpO1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcG1hYy5jLTM0LS8qIFR5cGUgc3BlY2lmaWMgZnVuY3Rpb24gcHJlZml4ICovXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcG1hYy5jOjM1OiNkZWZpbmUgSFRZUEVcXHRcXHRoYXNoX2lwbWFjXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcG1hYy5jLTM2LVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcG1hcmsuYz0zMD1NT0RVTEVfQUxJQVMoXFxcImlwX3NldF9oYXNoOmlwLG1hcmtcXFwiKTtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBtYXJrLmMtMzItLyogVHlwZSBzcGVjaWZpYyBmdW5jdGlvbiBwcmVmaXggKi9cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwbWFyay5jOjMzOiNkZWZpbmUgSFRZUEVcXHRcXHRoYXNoX2lwbWFya1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBtYXJrLmMtMzQtI2RlZmluZSBJUF9TRVRfSEFTSF9XSVRIX01BUktNQVNLXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwcG9ydC5jPTM1PU1PRFVMRV9BTElBUyhcXFwiaXBfc2V0X2hhc2g6aXAscG9ydFxcXCIpO1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcHBvcnQuYy0zNy0vKiBUeXBlIHNwZWNpZmljIGZ1bmN0aW9uIHByZWZpeCAqL1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0LmM6Mzg6I2RlZmluZSBIVFlQRVxcdFxcdGhhc2hfaXBwb3J0XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcHBvcnQuYy0zOS0jZGVmaW5lIElQX1NFVF9IQVNIX1dJVEhfTkVUTUFTS1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcHBvcnRpcC5jPTM0PU1PRFVMRV9BTElBUyhcXFwiaXBfc2V0X2hhc2g6aXAscG9ydCxpcFxcXCIpO1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcHBvcnRpcC5jLTM2LS8qIFR5cGUgc3BlY2lmaWMgZnVuY3Rpb24gcHJlZml4ICovXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcHBvcnRpcC5jOjM3OiNkZWZpbmUgSFRZUEVcXHRcXHRoYXNoX2lwcG9ydGlwXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcHBvcnRpcC5jLTM4LVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcHBvcnRuZXQuYz0zNj1NT0RVTEVfQUxJQVMoXFxcImlwX3NldF9oYXNoOmlwLHBvcnQsbmV0XFxcIik7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwcG9ydG5ldC5jLTM4LS8qIFR5cGUgc3BlY2lmaWMgZnVuY3Rpb24gcHJlZml4ICovXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcHBvcnRuZXQuYzozOTojZGVmaW5lIEhUWVBFXFx0XFx0aGFzaF9pcHBvcnRuZXRcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwcG9ydG5ldC5jLTQwLVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9tYWMuYz0yNT1NT0RVTEVfQUxJQVMoXFxcImlwX3NldF9oYXNoOm1hY1xcXCIpO1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9tYWMuYy0yNy0vKiBUeXBlIHNwZWNpZmljIGZ1bmN0aW9uIHByZWZpeCAqL1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbWFjLmM6Mjg6I2RlZmluZSBIVFlQRVxcdFxcdGhhc2hfbWFjXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9tYWMuYy0yOS1cXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0LmM9MzM9TU9EVUxFX0FMSUFTKFxcXCJpcF9zZXRfaGFzaDpuZXRcXFwiKTtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0LmMtMzUtLyogVHlwZSBzcGVjaWZpYyBmdW5jdGlvbiBwcmVmaXggKi9cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldC5jOjM2OiNkZWZpbmUgSFRZUEVcXHRcXHRoYXNoX25ldFxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0LmMtMzctI2RlZmluZSBJUF9TRVRfSEFTSF9XSVRIX05FVFNcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0aWZhY2UuYz0zNT1NT0RVTEVfQUxJQVMoXFxcImlwX3NldF9oYXNoOm5ldCxpZmFjZVxcXCIpO1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRpZmFjZS5jLTM3LS8qIFR5cGUgc3BlY2lmaWMgZnVuY3Rpb24gcHJlZml4ICovXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRpZmFjZS5jOjM4OiNkZWZpbmUgSFRZUEVcXHRcXHRoYXNoX25ldGlmYWNlXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRpZmFjZS5jLTM5LSNkZWZpbmUgSVBfU0VUX0hBU0hfV0lUSF9ORVRTXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldG5ldC5jPTMyPU1PRFVMRV9BTElBUyhcXFwiaXBfc2V0X2hhc2g6bmV0LG5ldFxcXCIpO1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRuZXQuYy0zNC0vKiBUeXBlIHNwZWNpZmljIGZ1bmN0aW9uIHByZWZpeCAqL1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0bmV0LmM6MzU6I2RlZmluZSBIVFlQRVxcdFxcdGhhc2hfbmV0bmV0XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRuZXQuYy0zNi0jZGVmaW5lIElQX1NFVF9IQVNIX1dJVEhfTkVUU1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRwb3J0LmM9MzU9TU9EVUxFX0FMSUFTKFxcXCJpcF9zZXRfaGFzaDpuZXQscG9ydFxcXCIpO1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRwb3J0LmMtMzctLyogVHlwZSBzcGVjaWZpYyBmdW5jdGlvbiBwcmVmaXggKi9cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldHBvcnQuYzozODojZGVmaW5lIEhUWVBFXFx0XFx0aGFzaF9uZXRwb3J0XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRwb3J0LmMtMzktI2RlZmluZSBJUF9TRVRfSEFTSF9XSVRIX1BST1RPXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldHBvcnRuZXQuYz0zMj1NT0RVTEVfQUxJQVMoXFxcImlwX3NldF9oYXNoOm5ldCxwb3J0LG5ldFxcXCIpO1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRwb3J0bmV0LmMtMzQtLyogVHlwZSBzcGVjaWZpYyBmdW5jdGlvbiBwcmVmaXggKi9cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldHBvcnRuZXQuYzozNTojZGVmaW5lIEhUWVBFXFx0XFx0aGFzaF9uZXRwb3J0bmV0XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRwb3J0bmV0LmMtMzYtI2RlZmluZSBJUF9TRVRfSEFTSF9XSVRIX1BST1RPXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDE3OjAyOjQxLjk2NDYyMDg2NFoiLCJTZXEiOjM1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyNTYwODg3MDUxMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGb2N1c2luZyBvbiBJUCBTZXQgSGFzaCBUYWJsZSBJbXBsZW1lbnRhdGlvbiBmb3IgRnV6emluZyoqXG5cbkFscmlnaHQsIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgZ29hbCBpcyB0byBjcmFmdCBhIHRhcmdldGVkIGZ1enppbmcgY2FtcGFpZ24gZm9yIHRoZSByZWNlbnRseSBtb2RpZmllZCBJUCBzZXQgaGFzaCB0YWJsZSBpbXBsZW1lbnRhdGlvbi4gVGhlIGNoYW5nZXMgcmV2b2x2ZSBhcm91bmQgaG93IENJRFIgbmV0d29ya3MgYXJlIHN0b3JlZCwgc3dpdGNoaW5nIHRvIGFuIFJDVS1wcm90ZWN0ZWQsIGR5bmFtaWNhbGx5IGFsbG9jYXRlZCBhcnJheS4gVGhpcyBpcyBhIGNyaXRpY2FsIGZ1bmN0aW9uYWwgY2hhbmdlIGFuZCBJIG5lZWQgdG8gZW5zdXJlIHRoZSBuZXcgUkNVIGFuZCBsb2NraW5nIGxvZ2ljIGRvZXNuJ3QgaW50cm9kdWNlIHZ1bG5lcmFiaWxpdGllcy5cblxuRmlyc3QsIEkgbmVlZCB0byBpZGVudGlmeSB0aGUga2V5IGZ1bmN0aW9ucyB0byB0YXJnZXQuIFRoZSBpbml0aWFsIGxpc3QgaW5jbHVkZXMgdGhlIGBfY3JlYXRlYCBhbmQgYE1UWVBFYCBmdW5jdGlvbnMuIEhvd2V2ZXIsIHRvIGF2b2lkIG92ZXJ3aGVsbWluZyB0aGUgZnV6emVyIGFuZCB0byBmb2N1cyBvbiB0aGUgY29yZSBtb2RpZmljYXRpb25zLCBJIG5lZWQgYSByZXByZXNlbnRhdGl2ZSBzdWJzZXQuIEkgbmVlZCB0byBpbmNsdWRlOlxuXG4qICAgQ3JlYXRpb24gZnVuY3Rpb25zOiBgaGFzaF9uZXRfY3JlYXRlYCwgYGhhc2hfbmV0bmV0X2NyZWF0ZWAsIGV0Yy5cbiogICBGdW5jdGlvbnMgcmVsYXRlZCB0byBjb3JlIG9wZXJhdGlvbnMgKGBfYWRkYCwgYF9kZWxgLCBgX3Jlc2l6ZWAsIGBfZ2NgLCBgX3Rlc3RfY2lkcnNgKTogYGhhc2hfbmV0NF9hZGRgLCBgaGFzaF9uZXQ0X2RlbGAsIGBoYXNoX25ldDRfdGVzdF9jaWRyc2AsIGV0Yy5cbiogICBBdXhpbGlhcnkgZnVuY3Rpb25zOiBgaGFzaF9uZXQ0X2FkZF9jaWRyYCwgYGhhc2hfbmV0NF9kZWxfY2lkcmAsIGBoYXNoX25ldDRfZmx1c2hgLCBgaGFzaF9uZXQ0X2Rlc3Ryb3lgLCBgaGFzaF9uZXQ0X2djX2RvYCwgYGhhc2hfbmV0NF91cmVmYFxuXG5JJ20gZm9jdXNpbmcgb24gdGhlc2Ugc3BlY2lmaWMgZnVuY3Rpb25zIGJlY2F1c2UgdGhlIGNvcmUgbG9naWMsIHJlbGF0ZWQgdG8gdGhlIENJRFIgYXJyYXksIGlzIGltcGxlbWVudGVkIGluIGBtdHlwZV9hZGRfY2lkcmAsIGBtdHlwZV9kZWxfY2lkcmAsIGBtdHlwZV9mbHVzaGAsIGBtdHlwZV9haGFzaF9kZXN0cm95YCwgYG10eXBlX2Rlc3Ryb3lgLCBgbXR5cGVfZ2NfZG9gLCBgbXR5cGVfZ2NgLCBgbXR5cGVfcmVzaXplYCwgYG10eXBlX2FkZGAsIGBtdHlwZV9kZWxgLCBgbXR5cGVfdGVzdF9jaWRyc2AsIGBtdHlwZV91cmVmYCwgYW5kIGBfY3JlYXRlYC4gVGhlIGxvZ2ljIGlzIGdlbmVyYXRlZCBmcm9tIG1hY3JvcyBzbyBjb3ZlcmluZyB0aGUgbmV0NCBvbmVzIHNob3VsZCBjb3ZlciBuZXQ2IGFuZCBuZXRuZXQ0LCBldGMuXG5cbkkgbmVlZCB0byBtYWtlIHN1cmUgdGhhdCB0aGVzZSBmdW5jdGlvbnMgY2FuIGFjdHVhbGx5IGJlIHJlYWNoZWQgYnkgdGhlIGZ1enplci4gRnVuY3Rpb25zIHdob3NlIGFkZHJlc3NlcyBhcmUgdGFrZW4sIGVpdGhlciBkaXJlY3RseSBvciBpbmRpcmVjdGx5IChlLmcuLCB0aHJvdWdoIGZ1bmN0aW9uIHBvaW50ZXJzKSwgYXJlIGd1YXJhbnRlZWQgdG8gYmUgYXZhaWxhYmxlIGluIHRoZSBzeW1ib2wgdGFibGUuIFRoZXJlZm9yZSwgSSdsbCBmaWx0ZXIgdGhlIGxpc3QgYmFzZWQgb24gdGhpcyBjcml0ZXJpYS5cblxuQWZ0ZXIgdmVyaWZ5aW5nIHRoaXMsIEkgd2lsbCBpbmNsdWRlOlxuXG4qICAgYGhhc2hfbmV0NF9hZGRgXG4qICAgYGhhc2hfbmV0NF9kZWxgXG4qICAgYGhhc2hfbmV0NF90ZXN0YFxuKiAgIGBoYXNoX25ldDRfcmVzaXplYFxuKiAgIGBoYXNoX25ldDRfZ2NgXG4qICAgYGhhc2hfbmV0NF9mbHVzaGBcbiogICBgaGFzaF9uZXQ0X2Rlc3Ryb3lgXG4qICAgYGhhc2hfbmV0NF91cmVmYFxuKiAgIGBoYXNoX25ldF9jcmVhdGVgXG4qICAgYGhhc2hfbmV0Nl9hZGRgXG4qICAgYGhhc2hfbmV0Nl9kZWxgXG4qICAgYGhhc2hfbmV0Nl90ZXN0YFxuKiAgIGBoYXNoX25ldDZfcmVzaXplYFxuKiAgIGBoYXNoX25ldDZfZ2NgXG4qICAgYGhhc2hfbmV0Nl9mbHVzaGBcbiogICBgaGFzaF9uZXQ2X2Rlc3Ryb3lgXG4qICAgYGhhc2hfbmV0Nl91cmVmYFxuKiAgIGBoYXNoX25ldG5ldDRfYWRkYFxuKiAgIGBoYXNoX25ldG5ldDRfZGVsYFxuKiAgIGBoYXNoX25ldG5ldDRfcmVzaXplYFxuKiAgIGBoYXNoX25ldG5ldDRfZ2NgXG4qICAgYGhhc2hfbmV0bmV0X2NyZWF0ZWBcbiogICBgaGFzaF9uZXQ0X2thZHRgXG4qICAgYGhhc2hfbmV0Nl9rYWR0YFxuKiAgIGBoYXNoX25ldG5ldDRfa2FkdGBcbiogICBgaGFzaF9uZXRuZXQ2X2thZHRgXG5cblRoaXMgc2hvdWxkIGdpdmUgZ29vZCBjb3ZlcmFnZSBvZiB0aGUgbW9kaWZpZWQgZnVuY3Rpb25hbGl0eSwgc2luY2UgdGhlIGNvcmUgY2hhbmdlcyBhcmUgaW4gdGhlIGBpcF9zZXRfaGFzaF9nZW4uaGAgZmlsZSwgYW5kIHRoZSBgLmNgIGZpbGVzIGp1c3QgY2FsbCB0aGUgbW9kaWZpZWQgbG9naWMuXG5cbk5leHQsIEkgbmVlZCB0byBjb25maXJtIHRoZSByZWxldmFudCBLY29uZmlnIG9wdGlvbnM6IGBORVRGSUxURVJgLCBgSVBfU0VUYCwgYElQX1NFVF9IQVNIX05FVGAsIGBJUF9TRVRfSEFTSF9ORVRORVRgLCBhbmQgc28gb24gZm9yIHRoZSB2YXJpb3VzIGhhc2ggdGFibGUgdHlwZXMuIEkgd2lsbCBlbmFibGUgdGhlc2UgaW4gbXkgZnV6emluZyBlbnZpcm9ubWVudC5cblxuRmluYWxseSwgSSB3aWxsIGFuYWx5emUgdGhlIHBhdGNoIGFnYWluIHRvIGVuc3VyZSB0aGF0IG5vIGZ1cnRoZXIgZm9jdXMgc3ltYm9scyBuZWVkIHRvIGJlIGluY2x1ZGVkLiBXaXRoIHRoaXMgY2FyZWZ1bGx5IGNyYWZ0ZWQgbGlzdCwgSSdtIGNvbmZpZGVudCB0aGF0IHRoZSBmdXp6ZXIgd2lsbCBiZSBhYmxlIHRvIGVmZmVjdGl2ZWx5IGV4ZXJjaXNlIHRoZSBuZXcgUkNVLWJhc2VkIENJRFIgbWFuYWdlbWVudCBhbmQgbG9ja2luZyBsb2dpYywgZXhwb3NpbmcgYW55IHBvdGVudGlhbCBpc3N1ZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM5NjAyLCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzE0MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wMlQxNzowMzowNy41NzM0OTQ2ODZaIiwiU2VxIjozNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyOTQ4NjU5MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJrYWR0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXQuYz0xMTI9c3RhdGljIGludFxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0LmM6MTEzOmhhc2hfbmV0NF9rYWR0KHN0cnVjdCBpcF9zZXQgKnNldCwgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldC5jLTExNC1cXHQgICAgICAgY29uc3Qgc3RydWN0IHh0X2FjdGlvbl9wYXJhbSAqcGFyLFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXQuYz0yODY9c3RhdGljIGludFxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0LmM6Mjg3Omhhc2hfbmV0Nl9rYWR0KHN0cnVjdCBpcF9zZXQgKnNldCwgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldC5jLTI4OC1cXHQgICAgICAgY29uc3Qgc3RydWN0IHh0X2FjdGlvbl9wYXJhbSAqcGFyLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMlQxNzowMzowNy44MDI5ODU4OTdaIiwiU2VxIjozNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzI0NTEyMjg0ODAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBpcHNldCBIYXNoIFRhYmxlIEltcGxlbWVudGF0aW9uKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBgaGFzaF9uZXQ0X3ZhcmlhbnRgIHN0cnVjdHVyZSBhbmQgaW1tZWRpYXRlbHkgY29uZmlybWluZyB0aGF0IGBoYXNoX25ldDRfa2FkdGAgYW5kIGBoYXNoX25ldDRfdWFkdGAgYXJlIGluZGVlZCBwcmVzZW50LiBHb29kLiBUaGF0J3MgdGhlIGJhc2VsaW5lLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgYWRkIHRoZSBhbmFsb2dvdXMgZnVuY3Rpb25zIGZvciBJUHY2IGFuZCBuZXQtbmV0IGNvbWJpbmF0aW9ucywgc28gSSdsbCBhZGQgYGhhc2hfbmV0Nl9rYWR0YCwgYGhhc2hfbmV0Nl91YWR0YCwgYGhhc2hfbmV0bmV0NF9rYWR0YCwgYW5kIGBoYXNoX25ldG5ldDRfdWFkdGAgdG8gdGhlIGxpc3QuIEknbSBleHBhbmRpbmcgdGhlIHNjb3BlIHRvIGNvdmVyIElQdjYgYW5kIG5ldC1uZXQgc2NlbmFyaW9zLlxuXG5Ob3csIGxldCdzIHRha2UgYSBsb29rIGF0IHRoZSBrZXkgc3ltYm9scyByZWxhdGVkIHRvIHRoZSBoYXNoIHRhYmxlIGZ1bmN0aW9uczogSSd2ZSBnb3QgYSBjb21wcmVoZW5zaXZlIGxpc3Qgb2YgdGhlIGNvcmUgZnVuY3Rpb25zLCBpbmNsdWRpbmcgYWRkLCBkZWxldGUsIHRlc3QsIHJlc2l6ZSwgZ2FyYmFnZSBjb2xsZWN0aW9uLCBmbHVzaCwgZGVzdHJveSwgYW5kIHVyZWYgZm9yIElQdjQuIEknbGwgbmVlZCB0byByZW1lbWJlciB0byBjaGVjayBhbGwgdGhlIHJlbGV2YW50IElQdjYgYW5kIG5ldC1uZXQgdmFyaWFudHMuIFRoaXMgbG9va3MgbGlrZSBhIGNvbXBsZXRlIGxpc3QgZm9yIHRoZSBpbW1lZGlhdGUgYXJlYSBvZiBpbnRlcmVzdC4gVGhpcyBpcyBhbHNvIHVzZWZ1bCBmb3IgY3JlYXRpbmcgYSB0ZXN0IHN1aXRlLlxuXG5UaGUgY29uZmlndXJhdGlvbiBvcHRpb25zIGFyZSBhbHNvIHVzZWZ1bCwgYW5kIEknbSBub3RpbmcgdGhlIHJlbGV2YW50IGBORVRGSUxURVJgLCBgSVBfU0VUYCwgYElQX1NFVF9IQVNIX05FVGAsIGBJUF9TRVRfSEFTSF9ORVRORVRgLCBhbmQgcmVsYXRlZCBoYXNoIHR5cGVzLiBUaGlzIGdpdmVzIG1lIGNvbnRleHQuXG5cbkZyb20gYSBmdW5jdGlvbmFsIHBlcnNwZWN0aXZlLCB0aGUgcGF0Y2ggZnVuZGFtZW50YWxseSBhbHRlcnMgdGhlIGNvcmUgaGFzaCB0YWJsZSBpbXBsZW1lbnRhdGlvbiB3aXRoaW4gdGhlIG5ldGZpbHRlciBpcHNldCBtb2R1bGUsIHdoaWNoIGlzIGEga2V5IHBhcnQgb2YgdGhlIGtlcm5lbCdzIG5ldHdvcmsgbWFuYWdlbWVudC4gV2UncmUgbG9va2luZyBhdCBhIHNoaWZ0IGZyb20gYSBmaXhlZC1zaXplIGFycmF5IGZvciBzdG9yaW5nIENJRFIgbmV0d29ya3MgdG8gYSBkeW5hbWljYWxseSBhbGxvY2F0ZWQsIFJDVS1wcm90ZWN0ZWQgYXJyYXkuIFRoZSByZXNpemluZyBhbmQgZ2FyYmFnZSBjb2xsZWN0aW9uLCB0aGUgY2VudHJhbCBrZXJuZWwgbG9naWMsIGFyZSBhbHNvIGJlaW5nIHVwZGF0ZWQuIFRoZSBjaGFuZ2VzIGludHJvZHVjZWQgYXJlIGNyaXRpY2FsLCBwb3RlbnRpYWxseSBpbXBhY3RpbmcgYSByYW5nZSBvZiBjb3JlIGtlcm5lbCBvcGVyYXRpb25zLCBpbmNsdWRpbmcgbG9ja2luZyBhbmQgbWVtb3J5IG1hbmFnZW1lbnQuIEFueSBjaGFuZ2UgdGhpcyBkZWVwIGRlc2VydmVzIGNhcmVmdWwgc2NydXRpbnksIGFuZCBJIG11c3QgYmUgc3VyZSB0byByaWdvcm91c2x5IGZ1enogdGhpcyB0byB1bmNvdmVyIHBvdGVudGlhbCBpc3N1ZXMgcmVsYXRlZCB0byB1c2UtYWZ0ZXItZnJlZSBjb25kaXRpb25zLCBtZW1vcnkgbGVha3MsIGFuZCBhbnkgcmFjZSBjb25kaXRpb25zIHRoZSBuZXcgUkNVIGFuZCBsb2NraW5nIGxvZ2ljIG1pZ2h0IGludHJvZHVjZS4gVGhlc2UgYXJlICpjcml0aWNhbCogYXJlYXMgdG8gdGVzdC4gSSBuZWVkIHRvIGVuc3VyZSB0aGUgcm9idXN0bmVzcyBhbmQgc2VjdXJpdHkgb2YgdGhlIG5ldyBpbXBsZW1lbnRhdGlvbi5cbkknbSByZWFkeSB0byBjYWxsIGBzZXQtcmVzdWx0c2Agbm93LlxuXG5cbiIsIklucHV0VG9rZW5zIjo0Mzk2NiwiT3V0cHV0VG9rZW5zIjo0NTQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4MDUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMTc6MDM6NDAuMjU0MjE3NjU3WiIsIlNlcSI6MzgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODA2MTc4NDcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5FVEZJTFRFUlwiLFxuICAgIFwiSVBfU0VUXCIsXG4gICAgXCJJUF9TRVRfSEFTSF9ORVRcIixcbiAgICBcIklQX1NFVF9IQVNIX05FVE5FVFwiLFxuICAgIFwiSVBfU0VUX0hBU0hfTkVUUE9SVFwiLFxuICAgIFwiSVBfU0VUX0hBU0hfTkVUSUZBQ0VcIixcbiAgICBcIklQX1NFVF9IQVNIX0lQUE9SVE5FVFwiLFxuICAgIFwiSVBfU0VUX0hBU0hfTkVUUE9SVE5FVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImhhc2hfbmV0NF9hZGRcIixcbiAgICBcImhhc2hfbmV0NF9kZWxcIixcbiAgICBcImhhc2hfbmV0NF90ZXN0XCIsXG4gICAgXCJoYXNoX25ldDRfcmVzaXplXCIsXG4gICAgXCJoYXNoX25ldDRfZ2NcIixcbiAgICBcImhhc2hfbmV0NF9mbHVzaFwiLFxuICAgIFwiaGFzaF9uZXQ0X2Rlc3Ryb3lcIixcbiAgICBcImhhc2hfbmV0NF91cmVmXCIsXG4gICAgXCJoYXNoX25ldDRfa2FkdFwiLFxuICAgIFwiaGFzaF9uZXQ0X3VhZHRcIixcbiAgICBcImhhc2hfbmV0X2NyZWF0ZVwiLFxuICAgIFwiaGFzaF9uZXQ2X2FkZFwiLFxuICAgIFwiaGFzaF9uZXQ2X2RlbFwiLFxuICAgIFwiaGFzaF9uZXQ2X3Rlc3RcIixcbiAgICBcImhhc2hfbmV0Nl9yZXNpemVcIixcbiAgICBcImhhc2hfbmV0Nl9nY1wiLFxuICAgIFwiaGFzaF9uZXQ2X2thZHRcIixcbiAgICBcImhhc2hfbmV0Nl91YWR0XCIsXG4gICAgXCJoYXNoX25ldG5ldDRfYWRkXCIsXG4gICAgXCJoYXNoX25ldG5ldDRfcmVzaXplXCIsXG4gICAgXCJoYXNoX25ldG5ldDRfZ2NcIixcbiAgICBcImhhc2hfbmV0bmV0NF9rYWR0XCIsXG4gICAgXCJoYXNoX25ldG5ldDRfdWFkdFwiLFxuICAgIFwiaGFzaF9uZXRuZXRfY3JlYXRlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNvcmUgaGFzaCB0YWJsZSBpbXBsZW1lbnRhdGlvbiBmb3IgbmV0ZmlsdGVyIGlwc2V0IChzcGVjaWZpY2FsbHkgdGhlIGdlbmVyaWMgaGFzaCB0eXBlcyBpbiBpcF9zZXRfaGFzaF9nZW4uaCkuIEl0IGNoYW5nZXMgaG93IENJRFIgbmV0d29ya3MgYXJlIHN0b3JlZCwgbW92aW5nIGZyb20gYSBmaXhlZC1zaXplIGFycmF5IHRvIGFuIFJDVS1wcm90ZWN0ZWQgZHluYW1pY2FsbHkgYWxsb2NhdGVkIGFycmF5LCBhbmQgdXBkYXRlcyB0aGUgcmVzaXppbmcgYW5kIGdhcmJhZ2UgY29sbGVjdGlvbiBsb2dpYyB0byB1c2UgYSBuZXcgbG9jayBhbmQgYSBgcmVzaXppbmdgIGZsYWcuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0byByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMgYW5kIHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIHRoZSBuZXcgUkNVIGFuZCBsb2NraW5nIGxvZ2ljIGRvZXNuJ3QgaW50cm9kdWNlIHVzZS1hZnRlci1mcmVlLCBtZW1vcnkgbGVha3MsIG9yIHJhY2UgY29uZGl0aW9ucy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORVRGSUxURVJcIixcbiAgICBcIklQX1NFVFwiLFxuICAgIFwiSVBfU0VUX0hBU0hfTkVUXCIsXG4gICAgXCJJUF9TRVRfSEFTSF9ORVRORVRcIixcbiAgICBcIklQX1NFVF9IQVNIX05FVFBPUlRcIixcbiAgICBcIklQX1NFVF9IQVNIX05FVElGQUNFXCIsXG4gICAgXCJJUF9TRVRfSEFTSF9JUFBPUlRORVRcIixcbiAgICBcIklQX1NFVF9IQVNIX05FVFBPUlRORVRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJoYXNoX25ldDRfYWRkXCIsXG4gICAgXCJoYXNoX25ldDRfZGVsXCIsXG4gICAgXCJoYXNoX25ldDRfdGVzdFwiLFxuICAgIFwiaGFzaF9uZXQ0X3Jlc2l6ZVwiLFxuICAgIFwiaGFzaF9uZXQ0X2djXCIsXG4gICAgXCJoYXNoX25ldDRfZmx1c2hcIixcbiAgICBcImhhc2hfbmV0NF9kZXN0cm95XCIsXG4gICAgXCJoYXNoX25ldDRfdXJlZlwiLFxuICAgIFwiaGFzaF9uZXQ0X2thZHRcIixcbiAgICBcImhhc2hfbmV0NF91YWR0XCIsXG4gICAgXCJoYXNoX25ldF9jcmVhdGVcIixcbiAgICBcImhhc2hfbmV0Nl9hZGRcIixcbiAgICBcImhhc2hfbmV0Nl9kZWxcIixcbiAgICBcImhhc2hfbmV0Nl90ZXN0XCIsXG4gICAgXCJoYXNoX25ldDZfcmVzaXplXCIsXG4gICAgXCJoYXNoX25ldDZfZ2NcIixcbiAgICBcImhhc2hfbmV0Nl9rYWR0XCIsXG4gICAgXCJoYXNoX25ldDZfdWFkdFwiLFxuICAgIFwiaGFzaF9uZXRuZXQ0X2FkZFwiLFxuICAgIFwiaGFzaF9uZXRuZXQ0X3Jlc2l6ZVwiLFxuICAgIFwiaGFzaF9uZXRuZXQ0X2djXCIsXG4gICAgXCJoYXNoX25ldG5ldDRfa2FkdFwiLFxuICAgIFwiaGFzaF9uZXRuZXQ0X3VhZHRcIixcbiAgICBcImhhc2hfbmV0bmV0X2NyZWF0ZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjb3JlIGhhc2ggdGFibGUgaW1wbGVtZW50YXRpb24gZm9yIG5ldGZpbHRlciBpcHNldCAoc3BlY2lmaWNhbGx5IHRoZSBnZW5lcmljIGhhc2ggdHlwZXMgaW4gaXBfc2V0X2hhc2hfZ2VuLmgpLiBJdCBjaGFuZ2VzIGhvdyBDSURSIG5ldHdvcmtzIGFyZSBzdG9yZWQsIG1vdmluZyBmcm9tIGEgZml4ZWQtc2l6ZSBhcnJheSB0byBhbiBSQ1UtcHJvdGVjdGVkIGR5bmFtaWNhbGx5IGFsbG9jYXRlZCBhcnJheSwgYW5kIHVwZGF0ZXMgdGhlIHJlc2l6aW5nIGFuZCBnYXJiYWdlIGNvbGxlY3Rpb24gbG9naWMgdG8gdXNlIGEgbmV3IGxvY2sgYW5kIGEgYHJlc2l6aW5nYCBmbGFnLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljIGFuZCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSB0aGUgbmV3IFJDVSBhbmQgbG9ja2luZyBsb2dpYyBkb2Vzbid0IGludHJvZHVjZSB1c2UtYWZ0ZXItZnJlZSwgbWVtb3J5IGxlYWtzLCBvciByYWNlIGNvbmRpdGlvbnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow7f4nr[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-02 16:49:33 +0000 UTC FinishedAt: 2026-07-02 17:03:42 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "nf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git", "commit_hash": "f456c1922c49e6be5ce407ddb74a6e61af5b65cf", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NETFILTER", "IP_SET", "IP_SET_HASH_NET", "IP_SET_HASH_NETNET", "IP_SET_HASH_NETPORT", "IP_SET_HASH_NETIFACE", "IP_SET_HASH_IPPORTNET", "IP_SET_HASH_NETPORTNET" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "nf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git", "commit_hash": "f456c1922c49e6be5ce407ddb74a6e61af5b65cf", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NETFILTER", "IP_SET", "IP_SET_HASH_NET", "IP_SET_HASH_NETNET", "IP_SET_HASH_NETPORT", "IP_SET_HASH_NETIFACE", "IP_SET_HASH_IPPORTNET", "IP_SET_HASH_NETPORTNET" ], "series_id": "23c1062d-3d3a-4533-b7ff-a1c41c990646" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "hash_net4_add", "hash_net4_del", "hash_net4_test", "hash_net4_resize", "hash_net4_gc", "hash_net4_flush", "hash_net4_destroy", "hash_net4_uref", "hash_net4_kadt", "hash_net4_uadt", "hash_net_create", "hash_net6_add", "hash_net6_del", "hash_net6_test", "hash_net6_resize", "hash_net6_gc", "hash_net6_kadt", "hash_net6_uadt", "hash_netnet4_add", "hash_netnet4_resize", "hash_netnet4_gc", "hash_netnet4_kadt", "hash_netnet4_uadt", "hash_netnet_create" ], "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+CgkJCTx0ZD4yMDI2LzA3LzAyIDE3OjAxPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVEZJTFRFUiYjMzQ7LAogICAgJiMzNDtJUF9TRVQmIzM0OywKICAgICYjMzQ7SVBfU0VUX0hBU0hfTkVUJiMzNDssCiAgICAmIzM0O0lQX1NFVF9IQVNIX05FVE5FVCYjMzQ7LAogICAgJiMzNDtJUF9TRVRfSEFTSF9ORVRQT1JUJiMzNDssCiAgICAmIzM0O0lQX1NFVF9IQVNIX05FVElGQUNFJiMzNDssCiAgICAmIzM0O0lQX1NFVF9IQVNIX0lQUE9SVE5FVCYjMzQ7LAogICAgJiMzNDtJUF9TRVRfSEFTSF9ORVRQT1JUTkVUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aGFzaF9uZXQ0X2FkZCYjMzQ7LAogICAgJiMzNDtoYXNoX25ldDRfZGVsJiMzNDssCiAgICAmIzM0O2hhc2hfbmV0NF90ZXN0JiMzNDssCiAgICAmIzM0O2hhc2hfbmV0NF9yZXNpemUmIzM0OywKICAgICYjMzQ7aGFzaF9uZXQ0X2djJiMzNDssCiAgICAmIzM0O2hhc2hfbmV0NF9mbHVzaCYjMzQ7LAogICAgJiMzNDtoYXNoX25ldDRfZGVzdHJveSYjMzQ7LAogICAgJiMzNDtoYXNoX25ldDRfdXJlZiYjMzQ7LAogICAgJiMzNDtoYXNoX25ldDRfa2FkdCYjMzQ7LAogICAgJiMzNDtoYXNoX25ldDRfdWFkdCYjMzQ7LAogICAgJiMzNDtoYXNoX25ldF9jcmVhdGUmIzM0OywKICAgICYjMzQ7aGFzaF9uZXQ2X2FkZCYjMzQ7LAogICAgJiMzNDtoYXNoX25ldDZfZGVsJiMzNDssCiAgICAmIzM0O2hhc2hfbmV0Nl90ZXN0JiMzNDssCiAgICAmIzM0O2hhc2hfbmV0Nl9yZXNpemUmIzM0OywKICAgICYjMzQ7aGFzaF9uZXQ2X2djJiMzNDssCiAgICAmIzM0O2hhc2hfbmV0Nl9rYWR0JiMzNDssCiAgICAmIzM0O2hhc2hfbmV0Nl91YWR0JiMzNDssCiAgICAmIzM0O2hhc2hfbmV0bmV0NF9hZGQmIzM0OywKICAgICYjMzQ7aGFzaF9uZXRuZXQ0X3Jlc2l6ZSYjMzQ7LAogICAgJiMzNDtoYXNoX25ldG5ldDRfZ2MmIzM0OywKICAgICYjMzQ7aGFzaF9uZXRuZXQ0X2thZHQmIzM0OywKICAgICYjMzQ7aGFzaF9uZXRuZXQ0X3VhZHQmIzM0OywKICAgICYjMzQ7aGFzaF9uZXRuZXRfY3JlYXRlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjb3JlIGhhc2ggdGFibGUgaW1wbGVtZW50YXRpb24gZm9yIG5ldGZpbHRlciBpcHNldCAoc3BlY2lmaWNhbGx5IHRoZSBnZW5lcmljIGhhc2ggdHlwZXMgaW4gaXBfc2V0X2hhc2hfZ2VuLmgpLiBJdCBjaGFuZ2VzIGhvdyBDSURSIG5ldHdvcmtzIGFyZSBzdG9yZWQsIG1vdmluZyBmcm9tIGEgZml4ZWQtc2l6ZSBhcnJheSB0byBhbiBSQ1UtcHJvdGVjdGVkIGR5bmFtaWNhbGx5IGFsbG9jYXRlZCBhcnJheSwgYW5kIHVwZGF0ZXMgdGhlIHJlc2l6aW5nIGFuZCBnYXJiYWdlIGNvbGxlY3Rpb24gbG9naWMgdG8gdXNlIGEgbmV3IGxvY2sgYW5kIGEgYHJlc2l6aW5nYCBmbGFnLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljIGFuZCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSB0aGUgbmV3IFJDVSBhbmQgbG9ja2luZyBsb2dpYyBkb2VzbiYjMzk7dCBpbnRyb2R1Y2UgdXNlLWFmdGVyLWZyZWUsIG1lbW9yeSBsZWFrcywgb3IgcmFjZSBjb25kaXRpb25zLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDE3OjAxPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgMGJmYzMzM2VkYTYzNmNhYmMwZDFiNzU5MjRmZGRiMGJiYTUxOTA4MVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgSnVsIDIgMTc6MDE6MTQgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaCBiL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmhcbmluZGV4IGRlZGY1OWI2NjFkZGYzLi4yYjQ3M2FjYWQ1MGNiOCAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmhcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmhcbkBAIC03NSwxNSAmIzQzOzc1LDE3IEBAIHN0cnVjdCBoYnVja2V0IHtcbiBzdHJ1Y3QgaHRhYmxlX2djIHtcbiBcdHN0cnVjdCBkZWxheWVkX3dvcmsgZHdvcms7XG4gXHRzdHJ1Y3QgaXBfc2V0ICpzZXQ7XHQvKiBTZXQgdGhlIGdjIGJlbG9uZ3MgdG8gKi9cbiYjNDM7XHRzcGlubG9ja190IGxvY2s7XHQvKiBMb2NrIHRvIGV4Y2x1ZGUgZ2MgYW5kIHJlc2l6ZSAqL1xuIFx0dTMyIHJlZ2lvbjtcdFx0LyogTGFzdCBnYyBydW4gcG9zaXRpb24gKi9cbiB9O1xuIFxuIC8qIFRoZSBoYXNoIHRhYmxlOiB0aGUgdGFibGUgc2l6ZSBzdG9yZWQgaGVyZSBpbiBvcmRlciB0byBtYWtlIHJlc2l6aW5nIGVhc3kgKi9cbiBzdHJ1Y3QgaHRhYmxlIHtcbi1cdGF0b21pY190IHJlZjtcdFx0LyogUmVmZXJlbmNlcyBmb3IgcmVzaXppbmcgKi9cbiYjNDM7XHRib29sIHJlc2l6aW5nO1x0XHQvKiBNYXJrIG9uZ29pbmcgcmVzaXplICovXG4gXHRhdG9taWNfdCB1cmVmO1x0XHQvKiBSZWZlcmVuY2VzIGZvciBkdW1waW5nIGFuZCBnYyAqL1xuIFx0dTggaHRhYmxlX2JpdHM7XHRcdC8qIHNpemUgb2YgaGFzaCB0YWJsZSA9PSAyXmh0YWJsZV9iaXRzICovXG4gXHR1MzIgbWF4ZWxlbTtcdFx0LyogTWF4ZWxlbSBwZXIgcmVnaW9uICovXG4mIzQzO1x0c3RydWN0IGxpc3RfaGVhZCBhZDtcdC8qIFJlc2l6ZSBhZGR8ZGVsIGJhY2tsaXN0ICovXG4gXHRzdHJ1Y3QgaXBfc2V0X3JlZ2lvbiAqaHJlZ2lvbjtcdC8qIFJlZ2lvbiBsb2NrcyBhbmQgZXh0IHNpemVzICovXG4gXHRzdHJ1Y3QgaGJ1Y2tldCBfX3JjdSAqYnVja2V0W107IC8qIGhhc2h0YWJsZSBidWNrZXRzICovXG4gfTtcbkBAIC05Nyw5ICYjNDM7OTksMTYgQEAgc3RydWN0IGh0YWJsZSB7XG4gI2VuZGlmXG4gXG4gLyogQm9vay1rZWVwaW5nIG9mIHRoZSBwcmVmaXhlcyBhZGRlZCB0byB0aGUgc2V0ICovXG4mIzQzO3N0cnVjdCBuZXRfcHJlZml4IHtcbiYjNDM7XHR1OCBjaWRyO1x0XHRcdC8qIHRoZSBjaWRyIHZhbHVlICovXG4mIzQzO1x0dTMyIGNvdW50O1x0XHRcdC8qIG51bWJlciBvZiBlbGVtZW50cyBvZiB0aGlzIGNpZHIgKi9cbiYjNDM7fTtcbiYjNDM7XG4gc3RydWN0IG5ldF9wcmVmaXhlcyB7XG4tXHR1MzIgbmV0c1tJUFNFVF9ORVRfQ09VTlRdOyAvKiBudW1iZXIgb2YgZWxlbWVudHMgZm9yIHRoaXMgY2lkciAqL1xuLVx0dTggY2lkcltJUFNFVF9ORVRfQ09VTlRdOyAgLyogdGhlIGNpZHIgdmFsdWUgKi9cbiYjNDM7XHRzdHJ1Y3QgcmN1X2hlYWQgcmN1O1xuJiM0MztcdHU4IGxlbjtcbiYjNDM7XHRzdHJ1Y3QgbmV0X3ByZWZpeCBuZXRzW11cbiYjNDM7XHRcdF9fYWxpZ25lZChfX2FsaWdub2ZfXyh1NjQpKTtcbiB9O1xuIFxuIC8qIENvbXB1dGUgdGhlIGhhc2ggdGFibGUgc2l6ZSAqL1xuQEAgLTEyNSwxMSAmIzQzOzEzNCw2IEBAIGh0YWJsZV9zaXplKHU4IGhiaXRzKVxuICNlbHNlXG4gI2RlZmluZSBfX0NJRFIoY2lkciwgaSlcdFx0KGNpZHIpXG4gI2VuZGlmXG4tXG4tLyogY2lkciAmIzQzOyAxIGlzIHN0b3JlZCBpbiBuZXRfcHJlZml4ZXMgdG8gc3VwcG9ydCAvMCAqL1xuLSNkZWZpbmUgTkNJRFJfUFVUKGNpZHIpXHRcdCgoY2lkcikgJiM0MzsgMSlcbi0jZGVmaW5lIE5DSURSX0dFVChjaWRyKVx0XHQoKGNpZHIpIC0gMSlcbi1cbiAjaWZkZWYgSVBfU0VUX0hBU0hfV0lUSF9ORVRTX1BBQ0tFRFxuIC8qIFdoZW4gY2lkciBpcyBwYWNrZWQgd2l0aCBub21hdGNoLCBjaWRyIC0gMSBpcyBzdG9yZWQgaW4gdGhlIGRhdGEgZW50cnkgKi9cbiAjZGVmaW5lIERDSURSX1BVVChjaWRyKVx0XHQoKGNpZHIpIC0gMSlcbkBAIC0xMzksMjEgJiM0MzsxNDMsOSBAQCBodGFibGVfc2l6ZSh1OCBoYml0cylcbiAjZGVmaW5lIERDSURSX0dFVChjaWRyLCBpKVx0X19DSURSKGNpZHIsIGkpXG4gI2VuZGlmXG4gXG4tI2RlZmluZSBJTklUX0NJRFIoY2lkciwgaG9zdF9tYXNrKVx0XFxcbi1cdERDSURSX1BVVCgoKGNpZHIpID8gTkNJRFJfR0VUKGNpZHIpIDogaG9zdF9tYXNrKSlcbiYjNDM7I2RlZmluZSBJTklUX0NJRFIobiwgaG9zdF9tYXNrKVx0XFxcbiYjNDM7XHREQ0lEUl9QVVQoKG4pLVx1MDAzZWxlbiA/IChuKS1cdTAwM2VuZXRzWzBdLmNpZHIgOiBob3N0X21hc2spXG4gXG4tI2lmZGVmIElQX1NFVF9IQVNIX1dJVEhfTkVUMFxuLS8qIGNpZHIgZnJvbSAwIHRvIEhPU1RfTUFTSyB2YWx1ZSBhbmQgYyA9IGNpZHIgJiM0MzsgMSAqL1xuLSNkZWZpbmUgTkxFTlx0XHRcdChIT1NUX01BU0sgJiM0MzsgMSlcbi0jZGVmaW5lIENJRFJfUE9TKGMpXHRcdCgoYykgLSAxKVxuLSNlbHNlXG4tLyogY2lkciBmcm9tIDEgdG8gSE9TVF9NQVNLIHZhbHVlIGFuZCBjID0gY2lkciAmIzQzOyAxICovXG4tI2RlZmluZSBOTEVOXHRcdFx0SE9TVF9NQVNLXG4tI2RlZmluZSBDSURSX1BPUyhjKVx0XHQoKGMpIC0gMilcbi0jZW5kaWZcbi1cbi0jZWxzZVxuLSNkZWZpbmUgTkxFTlx0XHRcdDBcbiAjZW5kaWYgLyogSVBfU0VUX0hBU0hfV0lUSF9ORVRTICovXG4gXG4gI2RlZmluZSBTRVRfRUxFTV9FWFBJUkVEKHNldCwgZClcdFxcXG5AQCAtMjkwLDYgJiM0MzsyODIsNyBAQCBzdGF0aWMgY29uc3QgdW5pb24gbmZfaW5ldF9hZGRyIHplcm9tYXNrID0ge307XG4gLyogVGhlIGdlbmVyaWMgaGFzaCBzdHJ1Y3R1cmUgKi9cbiBzdHJ1Y3QgaHR5cGUge1xuIFx0c3RydWN0IGh0YWJsZSBfX3JjdSAqdGFibGU7IC8qIHRoZSBoYXNoIHRhYmxlICovXG4mIzQzO1x0c3RydWN0IG5ldF9wcmVmaXhlcyBfX3JjdSAqcm5ldHNbSVBTRVRfTkVUX0NPVU5UXTsgLyogY2lkciBwcmVmaXhlcyAqL1xuIFx0c3RydWN0IGh0YWJsZV9nYyBnYztcdC8qIGdjIHdvcmtxdWV1ZSAqL1xuIFx0dTMyIG1heGVsZW07XHRcdC8qIG1heCBlbGVtZW50cyBpbiB0aGUgaGFzaCAqL1xuIFx0dTMyIGluaXR2YWw7XHRcdC8qIHJhbmRvbSBqaGFzaCBpbml0IHZhbHVlICovXG5AQCAtMzAxLDExICYjNDM7Mjk0LDEwIEBAIHN0cnVjdCBodHlwZSB7XG4gXHR1OCBuZXRtYXNrO1x0XHQvKiBuZXRtYXNrIHZhbHVlIGZvciBzdWJuZXRzIHRvIHN0b3JlICovXG4gXHR1bmlvbiBuZl9pbmV0X2FkZHIgYml0bWFzaztcdC8qIHN0b3JlcyBiaXRtYXNrICovXG4gI2VuZGlmXG4tXHRzdHJ1Y3QgbGlzdF9oZWFkIGFkO1x0LyogUmVzaXplIGFkZHxkZWwgYmFja2xpc3QgKi9cbiYjNDM7XHQvKiBCZWNhdXNlICYjMzk7bmV4dCYjMzk7IGlzIElQdjQvSVB2NiBkZXBlbmRlbnQsIG5vIGVsZW1lbnRzIG9mIHRoaXNcbiYjNDM7XHQgKiBzdHJ1Y3R1cmUgYW5kIHJlZmVycmVkIGluIGNyZWF0ZSgpIG1heSBjb21lIGFmdGVyICYjMzk7bmV4dCYjMzk7LlxuJiM0MztcdCAqL1xuIFx0c3RydWN0IG10eXBlX2VsZW0gbmV4dDsgLyogdGVtcG9yYXJ5IHN0b3JhZ2UgZm9yIHVhZGQgKi9cbi0jaWZkZWYgSVBfU0VUX0hBU0hfV0lUSF9ORVRTXG4tXHRzdHJ1Y3QgbmV0X3ByZWZpeGVzIG5ldHNbTkxFTl07IC8qIGJvb2sta2VlcGluZyBvZiBwcmVmaXhlcyAqL1xuLSNlbmRpZlxuIH07XG4gXG4gLyogQUREfERFTCBlbnRyaWVzIHNhdmVkIGR1cmluZyByZXNpemUgKi9cbkBAIC0zMjIsNTAgJiM0MzszMTQsODggQEAgc3RydWN0IG10eXBlX3Jlc2l6ZV9hZCB7XG4gLyogTmV0d29yayBjaWRyIHNpemUgYm9vayBrZWVwaW5nIHdoZW4gdGhlIGhhc2ggc3RvcmVzIGRpZmZlcmVudFxuICAqIHNpemVkIG5ldHdvcmtzLiBjaWRyID09IHJlYWwgY2lkciAmIzQzOyAxIHRvIHN1cHBvcnQgLzAuXG4gICovXG4tc3RhdGljIHZvaWRcbiYjNDM7c3RhdGljIGludFxuIG10eXBlX2FkZF9jaWRyKHN0cnVjdCBpcF9zZXQgKnNldCwgc3RydWN0IGh0eXBlICpoLCB1OCBjaWRyLCB1OCBuKVxuIHtcbi1cdGludCBpLCBqO1xuJiM0MztcdHN0cnVjdCBuZXRfcHJlZml4ZXMgKm5ldHMsICp0bXA7XG4mIzQzO1x0aW50IGksIGosIGZvdW5kLCBsZW4gPSAwLCByZXQgPSAwO1xuIFxuIFx0c3Bpbl9sb2NrX2JoKFx1MDAyNnNldC1cdTAwM2Vsb2NrKTtcbiYjNDM7XHRuZXRzID0gX19pcHNldF9kZXJlZmVyZW5jZShoLVx1MDAzZXJuZXRzW25dKTtcbiBcdC8qIEFkZCBpbiBpbmNyZWFzaW5nIHByZWZpeCBvcmRlciwgc28gbGFyZ2VyIGNpZHIgZmlyc3QgKi9cbi1cdGZvciAoaSA9IDAsIGogPSAtMTsgaSBcdTAwM2MgTkxFTiBcdTAwMjZcdTAwMjYgaC1cdTAwM2VuZXRzW2ldLmNpZHJbbl07IGkmIzQzOyYjNDM7KSB7XG4tXHRcdGlmIChqICE9IC0xKSB7XG4mIzQzO1x0Zm9yIChpID0gMCwgZm91bmQgPSAtMTsgaSBcdTAwM2MgbmV0cy1cdTAwM2VsZW47IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRpZiAobmV0cy1cdTAwM2VuZXRzW2ldLmNvdW50KVxuJiM0MztcdFx0XHRsZW4mIzQzOyYjNDM7O1xuJiM0MztcdFx0aWYgKGZvdW5kICE9IC0xKSB7XG4gXHRcdFx0Y29udGludWU7XG4tXHRcdH0gZWxzZSBpZiAoaC1cdTAwM2VuZXRzW2ldLmNpZHJbbl0gXHUwMDNjIGNpZHIpIHtcbi1cdFx0XHRqID0gaTtcbi1cdFx0fSBlbHNlIGlmIChoLVx1MDAzZW5ldHNbaV0uY2lkcltuXSA9PSBjaWRyKSB7XG4tXHRcdFx0aC1cdTAwM2VuZXRzW0NJRFJfUE9TKGNpZHIpXS5uZXRzW25dJiM0MzsmIzQzOztcbiYjNDM7XHRcdH0gZWxzZSBpZiAobmV0cy1cdTAwM2VuZXRzW2ldLmNpZHIgXHUwMDNjIGNpZHIpIHtcbiYjNDM7XHRcdFx0Zm91bmQgPSBpO1xuJiM0MztcdFx0fSBlbHNlIGlmIChuZXRzLVx1MDAzZW5ldHNbaV0uY2lkciA9PSBjaWRyKSB7XG4mIzQzO1x0XHRcdG5ldHMtXHUwMDNlbmV0c1tpXS5jb3VudCYjNDM7JiM0Mzs7XG4gXHRcdFx0Z290byB1bmxvY2s7XG4gXHRcdH1cbiBcdH1cbi1cdGlmIChqICE9IC0xKSB7XG4tXHRcdGZvciAoOyBpIFx1MDAzZSBqOyBpLS0pXG4tXHRcdFx0aC1cdTAwM2VuZXRzW2ldLmNpZHJbbl0gPSBoLVx1MDAzZW5ldHNbaSAtIDFdLmNpZHJbbl07XG4mIzQzO1x0bGVuJiM0MzsmIzQzOztcbiYjNDM7XHR0bXAgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgbmV0X3ByZWZpeGVzKSAmIzQzO1xuJiM0MztcdFx0ICAgICAgbGVuICogc2l6ZW9mKHN0cnVjdCBuZXRfcHJlZml4KSwgR0ZQX0FUT01JQyk7XG4mIzQzO1x0aWYgKCF0bXApXG4mIzQzO1x0XHRyZXR1cm4gLUVOT01FTTtcbiYjNDM7XHR0bXAtXHUwMDNlbGVuID0gbGVuO1xuJiM0MztcdGZvciAoaSA9IDAsIGogPSAwOyBpIFx1MDAzYyBuZXRzLVx1MDAzZWxlbjsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdGlmICghbmV0cy1cdTAwM2VuZXRzW2ldLmNvdW50KVxuJiM0MztcdFx0XHRjb250aW51ZTtcbiYjNDM7XHRcdGlmIChpID09IGZvdW5kKSB7XG4mIzQzO1x0XHRcdHRtcC1cdTAwM2VuZXRzW2pdLmNpZHIgPSBjaWRyO1xuJiM0MztcdFx0XHR0bXAtXHUwMDNlbmV0c1tqJiM0MzsmIzQzO10uY291bnQgPSAxO1xuJiM0MztcdFx0fVxuJiM0MztcdFx0dG1wLVx1MDAzZW5ldHNbal0uY2lkciA9IG5ldHMtXHUwMDNlbmV0c1tpXS5jaWRyO1xuJiM0MztcdFx0dG1wLVx1MDAzZW5ldHNbaiYjNDM7JiM0MztdLmNvdW50ID0gbmV0cy1cdTAwM2VuZXRzW2ldLmNvdW50O1xuJiM0MztcdH1cbiYjNDM7XHRpZiAoZm91bmQgPT0gLTEpIHtcbiYjNDM7XHRcdHRtcC1cdTAwM2VuZXRzW2pdLmNpZHIgPSBjaWRyO1xuJiM0MztcdFx0dG1wLVx1MDAzZW5ldHNbal0uY291bnQgPSAxO1xuIFx0fVxuLVx0aC1cdTAwM2VuZXRzW2ldLmNpZHJbbl0gPSBjaWRyO1xuLVx0aC1cdTAwM2VuZXRzW0NJRFJfUE9TKGNpZHIpXS5uZXRzW25dID0gMTtcbiYjNDM7XHRyY3VfYXNzaWduX3BvaW50ZXIoaC1cdTAwM2VybmV0c1tuXSwgdG1wKTtcbiYjNDM7XHRrZnJlZV9yY3UobmV0cywgcmN1KTtcbiB1bmxvY2s6XG4gXHRzcGluX3VubG9ja19iaChcdTAwMjZzZXQtXHUwMDNlbG9jayk7XG4mIzQzO1x0cmV0dXJuIHJldDtcbiB9XG4gXG4gc3RhdGljIHZvaWRcbiBtdHlwZV9kZWxfY2lkcihzdHJ1Y3QgaXBfc2V0ICpzZXQsIHN0cnVjdCBodHlwZSAqaCwgdTggY2lkciwgdTggbilcbiB7XG4tXHR1OCBpLCBqLCBuZXRfZW5kID0gTkxFTiAtIDE7XG4mIzQzO1x0c3RydWN0IG5ldF9wcmVmaXhlcyAqbmV0cywgKnRtcDtcbiYjNDM7XHR1OCBpLCBqLCBmb3VuZCwgbGVuID0gMDtcbiBcbiBcdHNwaW5fbG9ja19iaChcdTAwMjZzZXQtXHUwMDNlbG9jayk7XG4tXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBOTEVOOyBpJiM0MzsmIzQzOykge1xuLVx0XHRpZiAoaC1cdTAwM2VuZXRzW2ldLmNpZHJbbl0gIT0gY2lkcilcbi1cdFx0XHRjb250aW51ZTtcbi1cdFx0aC1cdTAwM2VuZXRzW0NJRFJfUE9TKGNpZHIpXS5uZXRzW25dLS07XG4tXHRcdGlmIChoLVx1MDAzZW5ldHNbQ0lEUl9QT1MoY2lkcildLm5ldHNbbl0gXHUwMDNlIDApXG4tXHRcdFx0Z290byB1bmxvY2s7XG4tXHRcdGZvciAoaiA9IGk7IGogXHUwMDNjIG5ldF9lbmQgXHUwMDI2XHUwMDI2IGgtXHUwMDNlbmV0c1tqXS5jaWRyW25dOyBqJiM0MzsmIzQzOylcbi1cdFx0XHRoLVx1MDAzZW5ldHNbal0uY2lkcltuXSA9IGgtXHUwMDNlbmV0c1tqICYjNDM7IDFdLmNpZHJbbl07XG4tXHRcdGgtXHUwMDNlbmV0c1tqXS5jaWRyW25dID0gMDtcbiYjNDM7XHRuZXRzID0gX19pcHNldF9kZXJlZmVyZW5jZShoLVx1MDAzZXJuZXRzW25dKTtcbiYjNDM7XHRmb3IgKGkgPSAwLCBmb3VuZCA9IC0xOyBpIFx1MDAzYyBuZXRzLVx1MDAzZWxlbjsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdGlmIChuZXRzLVx1MDAzZW5ldHNbaV0uY291bnQpXG4mIzQzO1x0XHRcdGxlbiYjNDM7JiM0Mzs7XG4mIzQzO1x0XHRpZiAobmV0cy1cdTAwM2VuZXRzW2ldLmNpZHIgPT0gY2lkcilcbiYjNDM7XHRcdFx0Zm91bmQgPSBpO1xuJiM0MztcdH1cbiYjNDM7XHRpZiAodW5saWtlbHkoZm91bmQgPT0gLTEpKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcdG5ldHMtXHUwMDNlbmV0c1tmb3VuZF0uY291bnQtLTtcbiYjNDM7XHRpZiAobmV0cy1cdTAwM2VuZXRzW2ZvdW5kXS5jb3VudClcbiBcdFx0Z290byB1bmxvY2s7XG4mIzQzO1x0bGVuLS07XG4mIzQzO1x0dG1wID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IG5ldF9wcmVmaXhlcykgJiM0MztcbiYjNDM7XHRcdCAgICAgIGxlbiAqIHNpemVvZihzdHJ1Y3QgbmV0X3ByZWZpeCksIEdGUF9BVE9NSUMpO1xuJiM0MztcdGlmICghdG1wKVxuJiM0MztcdFx0LyogTGVhdmUgYSBob2xlICovXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1x0dG1wLVx1MDAzZWxlbiA9IGxlbjtcbiYjNDM7XHRmb3IgKGkgPSAwLCBqID0gMDsgaSBcdTAwM2MgbmV0cy1cdTAwM2VsZW47IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRpZiAoIW5ldHMtXHUwMDNlbmV0c1tpXS5jb3VudCB8fCBpID09IGZvdW5kKVxuJiM0MztcdFx0XHRjb250aW51ZTtcbiYjNDM7XHRcdHRtcC1cdTAwM2VuZXRzW2pdLmNpZHIgPSBuZXRzLVx1MDAzZW5ldHNbaV0uY2lkcjtcbiYjNDM7XHRcdHRtcC1cdTAwM2VuZXRzW2omIzQzOyYjNDM7XS5jb3VudCA9IG5ldHMtXHUwMDNlbmV0c1tpXS5jb3VudDtcbiBcdH1cbiYjNDM7XHRyY3VfYXNzaWduX3BvaW50ZXIoaC1cdTAwM2VybmV0c1tuXSwgdG1wKTtcbiYjNDM7XHRrZnJlZV9yY3UobmV0cywgcmN1KTtcbiB1bmxvY2s6XG4gXHRzcGluX3VubG9ja19iaChcdTAwMjZzZXQtXHUwMDNlbG9jayk7XG4gfVxuQEAgLTM5OCw2ICYjNDM7NDI4LDkgQEAgc3RhdGljIHZvaWRcbiBtdHlwZV9mbHVzaChzdHJ1Y3QgaXBfc2V0ICpzZXQpXG4ge1xuIFx0c3RydWN0IGh0eXBlICpoID0gc2V0LVx1MDAzZWRhdGE7XG4mIzQzOyNpZmRlZiBJUF9TRVRfSEFTSF9XSVRIX05FVFNcbiYjNDM7XHRzdHJ1Y3QgbmV0X3ByZWZpeGVzICpuZXRzLCAqdG1wO1xuJiM0MzsjZW5kaWZcbiBcdHN0cnVjdCBodGFibGUgKnQ7XG4gXHRzdHJ1Y3QgaGJ1Y2tldCAqbjtcbiBcdHUzMiByLCBpO1xuQEAgLTQyMSw3ICYjNDM7NDU0LDE3IEBAIG10eXBlX2ZsdXNoKHN0cnVjdCBpcF9zZXQgKnNldClcbiBcdFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2dC1cdTAwM2VocmVnaW9uW3JdLmxvY2spO1xuIFx0fVxuICNpZmRlZiBJUF9TRVRfSEFTSF9XSVRIX05FVFNcbi1cdG1lbXNldChoLVx1MDAzZW5ldHMsIDAsIHNpemVvZihoLVx1MDAzZW5ldHMpKTtcbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBJUFNFVF9ORVRfQ09VTlQ7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRuZXRzID0gaXBzZXRfZGVyZWZlcmVuY2VfbmZubChoLVx1MDAzZXJuZXRzW2ldKTtcbiYjNDM7XHRcdHRtcCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBuZXRfcHJlZml4ZXMpLCBHRlBfQVRPTUlDKTtcbiYjNDM7XHRcdGlmICghdG1wKSB7XG4mIzQzO1x0XHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG5ldHMtXHUwMDNlbGVuOyBpJiM0MzsmIzQzOylcbiYjNDM7XHRcdFx0XHRuZXRzLVx1MDAzZW5ldHNbaV0uY291bnQgPSAwO1xuJiM0MztcdFx0fSBlbHNlIHtcbiYjNDM7XHRcdFx0cmN1X2Fzc2lnbl9wb2ludGVyKGgtXHUwMDNlcm5ldHNbaV0sIHRtcCk7XG4mIzQzO1x0XHRcdGtmcmVlX3JjdShuZXRzLCByY3UpO1xuJiM0MztcdFx0fVxuJiM0MztcdH1cbiAjZW5kaWZcbiB9XG4gXG5AQCAtNDI5LDYgJiM0Mzs0NzIsOSBAQCBtdHlwZV9mbHVzaChzdHJ1Y3QgaXBfc2V0ICpzZXQpXG4gc3RhdGljIHZvaWRcbiBtdHlwZV9haGFzaF9kZXN0cm95KHN0cnVjdCBpcF9zZXQgKnNldCwgc3RydWN0IGh0YWJsZSAqdCwgYm9vbCBleHRfZGVzdHJveSlcbiB7XG4mIzQzOyNpZmRlZiBJUF9TRVRfSEFTSF9XSVRIX05FVFNcbiYjNDM7XHRzdHJ1Y3QgaHR5cGUgKmggPSBzZXQtXHUwMDNlZGF0YTtcbiYjNDM7I2VuZGlmXG4gXHRzdHJ1Y3QgaGJ1Y2tldCAqbjtcbiBcdHUzMiBpO1xuIFxuQEAgLTQ0Miw2ICYjNDM7NDg4LDExIEBAIG10eXBlX2FoYXNoX2Rlc3Ryb3koc3RydWN0IGlwX3NldCAqc2V0LCBzdHJ1Y3QgaHRhYmxlICp0LCBib29sIGV4dF9kZXN0cm95KVxuIFx0XHRrZnJlZShuKTtcbiBcdH1cbiBcbiYjNDM7I2lmZGVmIElQX1NFVF9IQVNIX1dJVEhfTkVUU1xuJiM0MztcdGlmIChleHRfZGVzdHJveSlcbiYjNDM7XHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIElQU0VUX05FVF9DT1VOVDsgaSYjNDM7JiM0MzspXG4mIzQzO1x0XHRcdGtmcmVlKGgtXHUwMDNlcm5ldHNbaV0pO1xuJiM0MzsjZW5kaWZcbiBcdGlwX3NldF9mcmVlKHQtXHUwMDNlaHJlZ2lvbik7XG4gXHRpcF9zZXRfZnJlZSh0KTtcbiB9XG5AQCAtNDUxLDEzICYjNDM7NTAyLDE0IEBAIHN0YXRpYyB2b2lkXG4gbXR5cGVfZGVzdHJveShzdHJ1Y3QgaXBfc2V0ICpzZXQpXG4ge1xuIFx0c3RydWN0IGh0eXBlICpoID0gc2V0LVx1MDAzZWRhdGE7XG4mIzQzO1x0c3RydWN0IGh0YWJsZSAqdCA9IChfX2ZvcmNlIHN0cnVjdCBodGFibGUgKiloLVx1MDAzZXRhYmxlO1xuIFx0c3RydWN0IGxpc3RfaGVhZCAqbCwgKmx0O1xuIFxuLVx0bXR5cGVfYWhhc2hfZGVzdHJveShzZXQsIChfX2ZvcmNlIHN0cnVjdCBodGFibGUgKiloLVx1MDAzZXRhYmxlLCB0cnVlKTtcbi1cdGxpc3RfZm9yX2VhY2hfc2FmZShsLCBsdCwgXHUwMDI2aC1cdTAwM2VhZCkge1xuJiM0MztcdGxpc3RfZm9yX2VhY2hfc2FmZShsLCBsdCwgXHUwMDI2dC1cdTAwM2VhZCkge1xuIFx0XHRsaXN0X2RlbChsKTtcbiBcdFx0a2ZyZWUobCk7XG4gXHR9XG4mIzQzO1x0bXR5cGVfYWhhc2hfZGVzdHJveShzZXQsIHQsIHRydWUpO1xuIFx0a2ZyZWUoaCk7XG4gXG4gXHRzZXQtXHUwMDNlZGF0YSA9IE5VTEw7XG5AQCAtNTE0LDggJiM0Mzs1NjYsNyBAQCBtdHlwZV9nY19kbyhzdHJ1Y3QgaXBfc2V0ICpzZXQsIHN0cnVjdCBodHlwZSAqaCwgc3RydWN0IGh0YWJsZSAqdCwgdTMyIHIpXG4gI2lmZGVmIElQX1NFVF9IQVNIX1dJVEhfTkVUU1xuIFx0XHRcdGZvciAoayA9IDA7IGsgXHUwMDNjIElQU0VUX05FVF9DT1VOVDsgayYjNDM7JiM0MzspXG4gXHRcdFx0XHRtdHlwZV9kZWxfY2lkcihzZXQsIGgsXG4tXHRcdFx0XHRcdE5DSURSX1BVVChEQ0lEUl9HRVQoZGF0YS1cdTAwM2VjaWRyLCBrKSksXG4tXHRcdFx0XHRcdGspO1xuJiM0MztcdFx0XHRcdFx0RENJRFJfR0VUKGRhdGEtXHUwMDNlY2lkciwgayksIGspO1xuICNlbmRpZlxuIFx0XHRcdHQtXHUwMDNlaHJlZ2lvbltyXS5lbGVtZW50cy0tO1xuIFx0XHRcdGlwX3NldF9leHRfZGVzdHJveShzZXQsIGRhdGEpO1xuQEAgLTU2OSw5ICYjNDM7NjIwLDEwIEBAIG10eXBlX2djKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbiBcdHNldCA9IGdjLVx1MDAzZXNldDtcbiBcdGggPSBzZXQtXHUwMDNlZGF0YTtcbiBcbi1cdHNwaW5fbG9ja19iaChcdTAwMjZzZXQtXHUwMDNlbG9jayk7XG4tXHR0ID0gaXBzZXRfZGVyZWZlcmVuY2Vfc2V0KGgtXHUwMDNldGFibGUsIHNldCk7XG4mIzQzO1x0cmN1X3JlYWRfbG9ja19iaCgpO1xuJiM0MztcdHQgPSByY3VfZGVyZWZlcmVuY2VfYmgoaC1cdTAwM2V0YWJsZSk7XG4gXHRhdG9taWNfaW5jKFx1MDAyNnQtXHUwMDNldXJlZik7XG4mIzQzO1x0cmN1X3JlYWRfdW5sb2NrX2JoKCk7XG4gXHRudW1vZl9sb2NrcyA9IGFoYXNoX251bW9mX2xvY2tzKHQtXHUwMDNlaHRhYmxlX2JpdHMpO1xuIFx0ciA9IGdjLVx1MDAzZXJlZ2lvbiYjNDM7JiM0Mzs7XG4gXHRpZiAociBcdTAwM2U9IG51bW9mX2xvY2tzKSB7XG5AQCAtNTgwLDExICYjNDM7NjMyLDEzIEBAIG10eXBlX2djKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbiBcdG5leHRfcnVuID0gKElQU0VUX0dDX1BFUklPRChzZXQtXHUwMDNldGltZW91dCkgKiBIWikgLyBudW1vZl9sb2NrcztcbiBcdGlmIChuZXh0X3J1biBcdTAwM2MgSFovMTApXG4gXHRcdG5leHRfcnVuID0gSFovMTA7XG4tXHRzcGluX3VubG9ja19iaChcdTAwMjZzZXQtXHUwMDNlbG9jayk7XG4gXG4tXHRtdHlwZV9nY19kbyhzZXQsIGgsIHQsIHIpO1xuJiM0MztcdHNwaW5fbG9ja19iaChcdTAwMjZnYy1cdTAwM2Vsb2NrKTtcbiYjNDM7XHRpZiAoIXQtXHUwMDNlcmVzaXppbmcpXG4mIzQzO1x0XHRtdHlwZV9nY19kbyhzZXQsIGgsIHQsIHIpO1xuJiM0MztcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNmdjLVx1MDAzZWxvY2spO1xuIFxuLVx0aWYgKGF0b21pY19kZWNfYW5kX3Rlc3QoXHUwMDI2dC1cdTAwM2V1cmVmKSBcdTAwMjZcdTAwMjYgYXRvbWljX3JlYWQoXHUwMDI2dC1cdTAwM2VyZWYpKSB7XG4mIzQzO1x0aWYgKGF0b21pY19kZWNfYW5kX3Rlc3QoXHUwMDI2dC1cdTAwM2V1cmVmKSBcdTAwMjZcdTAwMjYgdC1cdTAwM2VyZXNpemluZykge1xuIFx0XHRwcl9kZWJ1ZyhcJiMzNDtUYWJsZSBkZXN0cm95IGFmdGVyIHJlc2l6ZSBieSBleHBpcmU6ICVwXFxuXCYjMzQ7LCB0KTtcbiBcdFx0bXR5cGVfYWhhc2hfZGVzdHJveShzZXQsIHQsIGZhbHNlKTtcbiBcdH1cbkBAIC02NjgsMTUgJiM0Mzs3MjIsMTggQEAgbXR5cGVfcmVzaXplKHN0cnVjdCBpcF9zZXQgKnNldCwgYm9vbCByZXRyaWVkKVxuIFx0fVxuIFx0dC1cdTAwM2VodGFibGVfYml0cyA9IGh0YWJsZV9iaXRzO1xuIFx0dC1cdTAwM2VtYXhlbGVtID0gaC1cdTAwM2VtYXhlbGVtIC8gYWhhc2hfbnVtb2ZfbG9ja3MoaHRhYmxlX2JpdHMpO1xuJiM0MztcdElOSVRfTElTVF9IRUFEKFx1MDAyNnQtXHUwMDNlYWQpO1xuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgYWhhc2hfbnVtb2ZfbG9ja3MoaHRhYmxlX2JpdHMpOyBpJiM0MzsmIzQzOylcbiBcdFx0c3Bpbl9sb2NrX2luaXQoXHUwMDI2dC1cdTAwM2VocmVnaW9uW2ldLmxvY2spO1xuIFxuIFx0LyogVGhlcmUgY2FuJiMzOTt0IGJlIGFub3RoZXIgcGFyYWxsZWwgcmVzaXppbmcsXG4tXHQgKiBidXQgZHVtcGluZywgZ2MsIGtlcm5lbCBzaWRlIGFkZC9kZWwgYXJlIHBvc3NpYmxlXG4mIzQzO1x0ICogYnV0IGR1bXBpbmcgYW5kIGtlcm5lbCBzaWRlIGFkZC9kZWwgYXJlIHBvc3NpYmxlXG4gXHQgKi9cbiBcdG9yaWcgPSBpcHNldF9kZXJlZmVyZW5jZV9iaF9uZm5sKGgtXHUwMDNldGFibGUpO1xuLVx0YXRvbWljX3NldChcdTAwMjZvcmlnLVx1MDAzZXJlZiwgMSk7XG4gXHRhdG9taWNfaW5jKFx1MDAyNm9yaWctXHUwMDNldXJlZik7XG4mIzQzO1x0c3Bpbl9sb2NrX2JoKFx1MDAyNmgtXHUwMDNlZ2MubG9jayk7XG4mIzQzO1x0b3JpZy1cdTAwM2VyZXNpemluZyA9IHRydWU7XG4mIzQzO1x0c3Bpbl91bmxvY2tfYmgoXHUwMDI2aC1cdTAwM2VnYy5sb2NrKTtcbiBcdHByX2RlYnVnKFwmIzM0O2F0dGVtcHQgdG8gcmVzaXplIHNldCAlcyBmcm9tICV1IHRvICV1LCB0ICVwXFxuXCYjMzQ7LFxuIFx0XHQgc2V0LVx1MDAzZW5hbWUsIG9yaWctXHUwMDNlaHRhYmxlX2JpdHMsIGh0YWJsZV9iaXRzLCBvcmlnKTtcbiBcdGZvciAociA9IDA7IHIgXHUwMDNjIGFoYXNoX251bW9mX2xvY2tzKG9yaWctXHUwMDNlaHRhYmxlX2JpdHMpOyByJiM0MzsmIzQzOykge1xuQEAgLTc2OCw3ICYjNDM7ODI1LDcgQEAgbXR5cGVfcmVzaXplKHN0cnVjdCBpcF9zZXQgKnNldCwgYm9vbCByZXRyaWVkKVxuIFx0ICogS2VybmVsLXNpZGUgYWRkIGNhbm5vdCB0cmlnZ2VyIGEgcmVzaXplIGFuZCB1c2Vyc3BhY2UgYWN0aW9uc1xuIFx0ICogYXJlIHNlcmlhbGl6ZWQgYnkgdGhlIG11dGV4LlxuIFx0ICovXG4tXHRsaXN0X2Zvcl9lYWNoX3NhZmUobCwgbHQsIFx1MDAyNmgtXHUwMDNlYWQpIHtcbiYjNDM7XHRsaXN0X2Zvcl9lYWNoX3NhZmUobCwgbHQsIFx1MDAyNm9yaWctXHUwMDNlYWQpIHtcbiBcdFx0eCA9IGxpc3RfZW50cnkobCwgc3RydWN0IG10eXBlX3Jlc2l6ZV9hZCwgbGlzdCk7XG4gXHRcdGlmICh4LVx1MDAzZWFkID09IElQU0VUX0FERCkge1xuIFx0XHRcdG10eXBlX2FkZChzZXQsIFx1MDAyNngtXHUwMDNlZCwgXHUwMDI2eC1cdTAwM2VleHQsIFx1MDAyNngtXHUwMDNlbWV4dCwgeC1cdTAwM2VmbGFncyk7XG5AQCAtNzkyLDExICYjNDM7ODQ5LDI0IEBAIG10eXBlX3Jlc2l6ZShzdHJ1Y3QgaXBfc2V0ICpzZXQsIGJvb2wgcmV0cmllZClcbiBcbiBjbGVhbnVwOlxuIFx0cmN1X3JlYWRfdW5sb2NrX2JoKCk7XG4tXHRhdG9taWNfc2V0KFx1MDAyNm9yaWctXHUwMDNlcmVmLCAwKTtcbiYjNDM7XHRzcGluX2xvY2tfYmgoXHUwMDI2aC1cdTAwM2VnYy5sb2NrKTtcbiYjNDM7XHRvcmlnLVx1MDAzZXJlc2l6aW5nID0gZmFsc2U7XG4mIzQzO1x0c3Bpbl91bmxvY2tfYmgoXHUwMDI2aC1cdTAwM2VnYy5sb2NrKTtcbiYjNDM7XHQvKiBNYWtlIHN1cmUgcGFyYWxsZWwgcmVhZGVycyBzZWUgdGhhdCBvcmlnLVx1MDAzZXJlc2l6aW5nIGlzIGZhbHNlXG4mIzQzO1x0ICogYmVmb3JlIHdlIGRlY3JlbWVudCB1cmVmICovXG4mIzQzO1x0c3luY2hyb25pemVfcmN1KCk7XG4gXHRhdG9taWNfZGVjKFx1MDAyNm9yaWctXHUwMDNldXJlZik7XG4gXHRtdHlwZV9haGFzaF9kZXN0cm95KHNldCwgdCwgZmFsc2UpO1xuIFx0aWYgKHJldCA9PSAtRUFHQUlOKVxuIFx0XHRnb3RvIHJldHJ5O1xuJiM0MztcbiYjNDM7XHQvKiBDbGVhbnVwIHRoZSBiYWNrbG9nIG9mIEFERC9ERUwgZWxlbWVudHMgKi9cbiYjNDM7XHRzcGluX2xvY2tfYmgoXHUwMDI2c2V0LVx1MDAzZWxvY2spO1xuJiM0MztcdGxpc3RfZm9yX2VhY2hfc2FmZShsLCBsdCwgXHUwMDI2b3JpZy1cdTAwM2VhZCkge1xuJiM0MztcdFx0bGlzdF9kZWwobCk7XG4mIzQzO1x0XHRrZnJlZShsKTtcbiYjNDM7XHR9XG4mIzQzO1x0c3Bpbl91bmxvY2tfYmgoXHUwMDI2c2V0LVx1MDAzZWxvY2spO1xuIFx0Z290byBvdXQ7XG4gXG4gaGJ3YXJuOlxuQEAgLTg2MCwxNSAmIzQzOzkzMCwxMyBAQCBtdHlwZV9hZGQoc3RydWN0IGlwX3NldCAqc2V0LCB2b2lkICp2YWx1ZSwgY29uc3Qgc3RydWN0IGlwX3NldF9leHQgKmV4dCxcbiBcdGtleSA9IEhLRVkodmFsdWUsIGgtXHUwMDNlaW5pdHZhbCwgdC1cdTAwM2VodGFibGVfYml0cyk7XG4gXHRyID0gYWhhc2hfcmVnaW9uKGtleSk7XG4gXHRhdG9taWNfaW5jKFx1MDAyNnQtXHUwMDNldXJlZik7XG4mIzQzO1x0cmN1X3JlYWRfdW5sb2NrX2JoKCk7XG4gXHRlbGVtZW50cyA9IHQtXHUwMDNlaHJlZ2lvbltyXS5lbGVtZW50cztcbiBcdG1heGVsZW0gPSB0LVx1MDAzZW1heGVsZW07XG4gXHRpZiAoZWxlbWVudHMgXHUwMDNlPSBtYXhlbGVtKSB7XG4gXHRcdHUzMiBlO1xuLVx0XHRpZiAoU0VUX1dJVEhfVElNRU9VVChzZXQpKSB7XG4tXHRcdFx0cmN1X3JlYWRfdW5sb2NrX2JoKCk7XG4mIzQzO1x0XHRpZiAoU0VUX1dJVEhfVElNRU9VVChzZXQpKVxuIFx0XHRcdG10eXBlX2djX2RvKHNldCwgaCwgdCwgcik7XG4tXHRcdFx0cmN1X3JlYWRfbG9ja19iaCgpO1xuLVx0XHR9XG4gXHRcdG1heGVsZW0gPSBoLVx1MDAzZW1heGVsZW07XG4gXHRcdGVsZW1lbnRzID0gMDtcbiBcdFx0Zm9yIChlID0gMDsgZSBcdTAwM2MgYWhhc2hfbnVtb2ZfbG9ja3ModC1cdTAwM2VodGFibGVfYml0cyk7IGUmIzQzOyYjNDM7KVxuQEAgLTg3Niw3ICYjNDM7OTQ0LDYgQEAgbXR5cGVfYWRkKHN0cnVjdCBpcF9zZXQgKnNldCwgdm9pZCAqdmFsdWUsIGNvbnN0IHN0cnVjdCBpcF9zZXRfZXh0ICpleHQsXG4gXHRcdGlmIChlbGVtZW50cyBcdTAwM2U9IG1heGVsZW0gXHUwMDI2XHUwMDI2IFNFVF9XSVRIX0ZPUkNFQUREKHNldCkpXG4gXHRcdFx0Zm9yY2VhZGQgPSB0cnVlO1xuIFx0fVxuLVx0cmN1X3JlYWRfdW5sb2NrX2JoKCk7XG4gXG4gXHRzcGluX2xvY2tfYmgoXHUwMDI2dC1cdTAwM2VocmVnaW9uW3JdLmxvY2spO1xuIFx0biA9IHJjdV9kZXJlZmVyZW5jZV9iaChoYnVja2V0KHQsIGtleSkpO1xuQEAgLTkyOSw4ICYjNDM7OTk2LDcgQEAgbXR5cGVfYWRkKHN0cnVjdCBpcF9zZXQgKnNldCwgdm9pZCAqdmFsdWUsIGNvbnN0IHN0cnVjdCBpcF9zZXRfZXh0ICpleHQsXG4gI2lmZGVmIElQX1NFVF9IQVNIX1dJVEhfTkVUU1xuIFx0XHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIElQU0VUX05FVF9DT1VOVDsgaSYjNDM7JiM0MzspXG4gXHRcdFx0XHRtdHlwZV9kZWxfY2lkcihzZXQsIGgsXG4tXHRcdFx0XHRcdE5DSURSX1BVVChEQ0lEUl9HRVQoZGF0YS1cdTAwM2VjaWRyLCBpKSksXG4tXHRcdFx0XHRcdGkpO1xuJiM0MztcdFx0XHRcdFx0RENJRFJfR0VUKGRhdGEtXHUwMDNlY2lkciwgaSksIGkpO1xuICNlbmRpZlxuIFx0XHRcdGlwX3NldF9leHRfZGVzdHJveShzZXQsIGRhdGEpO1xuIFx0XHRcdHQtXHUwMDNlaHJlZ2lvbltyXS5lbGVtZW50cy0tO1xuQEAgLTk3NSw3ICYjNDM7MTA0MSw3IEBAIG10eXBlX2FkZChzdHJ1Y3QgaXBfc2V0ICpzZXQsIHZvaWQgKnZhbHVlLCBjb25zdCBzdHJ1Y3QgaXBfc2V0X2V4dCAqZXh0LFxuIFx0dC1cdTAwM2VocmVnaW9uW3JdLmVsZW1lbnRzJiM0MzsmIzQzOztcbiAjaWZkZWYgSVBfU0VUX0hBU0hfV0lUSF9ORVRTXG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBJUFNFVF9ORVRfQ09VTlQ7IGkmIzQzOyYjNDM7KVxuLVx0XHRtdHlwZV9hZGRfY2lkcihzZXQsIGgsIE5DSURSX1BVVChEQ0lEUl9HRVQoZC1cdTAwM2VjaWRyLCBpKSksIGkpO1xuJiM0MztcdFx0bXR5cGVfYWRkX2NpZHIoc2V0LCBoLCBEQ0lEUl9HRVQoZC1cdTAwM2VjaWRyLCBpKSwgaSk7XG4gI2VuZGlmXG4gXHRtZW1jcHkoZGF0YSwgZCwgc2l6ZW9mKHN0cnVjdCBtdHlwZV9lbGVtKSk7XG4gb3ZlcndyaXRlX2V4dGVuc2lvbnM6XG5AQCAtMTAwMyw3ICYjNDM7MTA2OSw3IEBAIG10eXBlX2FkZChzdHJ1Y3QgaXBfc2V0ICpzZXQsIHZvaWQgKnZhbHVlLCBjb25zdCBzdHJ1Y3QgaXBfc2V0X2V4dCAqZXh0LFxuIFx0cmV0ID0gMDtcbiByZXNpemU6XG4gXHRzcGluX3VubG9ja19iaChcdTAwMjZ0LVx1MDAzZWhyZWdpb25bcl0ubG9jayk7XG4tXHRpZiAoYXRvbWljX3JlYWQoXHUwMDI2dC1cdTAwM2VyZWYpIFx1MDAyNlx1MDAyNiBleHQtXHUwMDNldGFyZ2V0KSB7XG4mIzQzO1x0aWYgKHQtXHUwMDNlcmVzaXppbmcgXHUwMDI2XHUwMDI2IGV4dCBcdTAwMjZcdTAwMjYgZXh0LVx1MDAzZXRhcmdldCkge1xuIFx0XHQvKiBSZXNpemUgaXMgaW4gcHJvY2VzcyBhbmQga2VybmVsIHNpZGUgYWRkLCBzYXZlIHZhbHVlcyAqL1xuIFx0XHRzdHJ1Y3QgbXR5cGVfcmVzaXplX2FkICp4O1xuIFxuQEAgLTEwMTcsNyAmIzQzOzEwODMsNyBAQCBtdHlwZV9hZGQoc3RydWN0IGlwX3NldCAqc2V0LCB2b2lkICp2YWx1ZSwgY29uc3Qgc3RydWN0IGlwX3NldF9leHQgKmV4dCxcbiBcdFx0bWVtY3B5KFx1MDAyNngtXHUwMDNlbWV4dCwgbWV4dCwgc2l6ZW9mKHN0cnVjdCBpcF9zZXRfZXh0KSk7XG4gXHRcdHgtXHUwMDNlZmxhZ3MgPSBmbGFncztcbiBcdFx0c3Bpbl9sb2NrX2JoKFx1MDAyNnNldC1cdTAwM2Vsb2NrKTtcbi1cdFx0bGlzdF9hZGRfdGFpbChcdTAwMjZ4LVx1MDAzZWxpc3QsIFx1MDAyNmgtXHUwMDNlYWQpO1xuJiM0MztcdFx0bGlzdF9hZGRfdGFpbChcdTAwMjZ4LVx1MDAzZWxpc3QsIFx1MDAyNnQtXHUwMDNlYWQpO1xuIFx0XHRzcGluX3VubG9ja19iaChcdTAwMjZzZXQtXHUwMDNlbG9jayk7XG4gXHR9XG4gXHRnb3RvIG91dDtcbkBAIC0xMDMwLDcgJiM0MzsxMDk2LDcgQEAgbXR5cGVfYWRkKHN0cnVjdCBpcF9zZXQgKnNldCwgdm9pZCAqdmFsdWUsIGNvbnN0IHN0cnVjdCBpcF9zZXRfZXh0ICpleHQsXG4gdW5sb2NrOlxuIFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2dC1cdTAwM2VocmVnaW9uW3JdLmxvY2spO1xuIG91dDpcbi1cdGlmIChhdG9taWNfZGVjX2FuZF90ZXN0KFx1MDAyNnQtXHUwMDNldXJlZikgXHUwMDI2XHUwMDI2IGF0b21pY19yZWFkKFx1MDAyNnQtXHUwMDNlcmVmKSkge1xuJiM0MztcdGlmIChhdG9taWNfZGVjX2FuZF90ZXN0KFx1MDAyNnQtXHUwMDNldXJlZikgXHUwMDI2XHUwMDI2IHQtXHUwMDNlcmVzaXppbmcpIHtcbiBcdFx0cHJfZGVidWcoXCYjMzQ7VGFibGUgZGVzdHJveSBhZnRlciByZXNpemUgYnkgYWRkOiAlcFxcblwmIzM0OywgdCk7XG4gXHRcdG10eXBlX2FoYXNoX2Rlc3Ryb3koc2V0LCB0LCBmYWxzZSk7XG4gXHR9XG5AQCAtMTA4OSwxMSAmIzQzOzExNTUsMTEgQEAgbXR5cGVfZGVsKHN0cnVjdCBpcF9zZXQgKnNldCwgdm9pZCAqdmFsdWUsIGNvbnN0IHN0cnVjdCBpcF9zZXRfZXh0ICpleHQsXG4gI2lmZGVmIElQX1NFVF9IQVNIX1dJVEhfTkVUU1xuIFx0XHRmb3IgKGogPSAwOyBqIFx1MDAzYyBJUFNFVF9ORVRfQ09VTlQ7IGomIzQzOyYjNDM7KVxuIFx0XHRcdG10eXBlX2RlbF9jaWRyKHNldCwgaCxcbi1cdFx0XHRcdCAgICAgICBOQ0lEUl9QVVQoRENJRFJfR0VUKGQtXHUwMDNlY2lkciwgaikpLCBqKTtcbiYjNDM7XHRcdFx0XHREQ0lEUl9HRVQoZC1cdTAwM2VjaWRyLCBqKSwgaik7XG4gI2VuZGlmXG4gXHRcdGlwX3NldF9leHRfZGVzdHJveShzZXQsIGRhdGEpO1xuIFxuLVx0XHRpZiAoYXRvbWljX3JlYWQoXHUwMDI2dC1cdTAwM2VyZWYpIFx1MDAyNlx1MDAyNiBleHQtXHUwMDNldGFyZ2V0KSB7XG4mIzQzO1x0XHRpZiAodC1cdTAwM2VyZXNpemluZyBcdTAwMjZcdTAwMjYgZXh0IFx1MDAyNlx1MDAyNiBleHQtXHUwMDNldGFyZ2V0KSB7XG4gXHRcdFx0LyogUmVzaXplIGlzIGluIHByb2Nlc3MgYW5kIGtlcm5lbCBzaWRlIGRlbCxcbiBcdFx0XHQgKiBzYXZlIHZhbHVlc1xuIFx0XHRcdCAqL1xuQEAgLTExNDEsMTAgJiM0MzsxMjA3LDEwIEBAIG10eXBlX2RlbChzdHJ1Y3QgaXBfc2V0ICpzZXQsIHZvaWQgKnZhbHVlLCBjb25zdCBzdHJ1Y3QgaXBfc2V0X2V4dCAqZXh0LFxuIFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2dC1cdTAwM2VocmVnaW9uW3JdLmxvY2spO1xuIFx0aWYgKHgpIHtcbiBcdFx0c3Bpbl9sb2NrX2JoKFx1MDAyNnNldC1cdTAwM2Vsb2NrKTtcbi1cdFx0bGlzdF9hZGQoXHUwMDI2eC1cdTAwM2VsaXN0LCBcdTAwMjZoLVx1MDAzZWFkKTtcbiYjNDM7XHRcdGxpc3RfYWRkKFx1MDAyNngtXHUwMDNlbGlzdCwgXHUwMDI2dC1cdTAwM2VhZCk7XG4gXHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNnNldC1cdTAwM2Vsb2NrKTtcbiBcdH1cbi1cdGlmIChhdG9taWNfZGVjX2FuZF90ZXN0KFx1MDAyNnQtXHUwMDNldXJlZikgXHUwMDI2XHUwMDI2IGF0b21pY19yZWFkKFx1MDAyNnQtXHUwMDNlcmVmKSkge1xuJiM0MztcdGlmIChhdG9taWNfZGVjX2FuZF90ZXN0KFx1MDAyNnQtXHUwMDNldXJlZikgXHUwMDI2XHUwMDI2IHQtXHUwMDNlcmVzaXppbmcpIHtcbiBcdFx0cHJfZGVidWcoXCYjMzQ7VGFibGUgZGVzdHJveSBhZnRlciByZXNpemUgYnkgZGVsOiAlcFxcblwmIzM0OywgdCk7XG4gXHRcdG10eXBlX2FoYXNoX2Rlc3Ryb3koc2V0LCB0LCBmYWxzZSk7XG4gXHR9XG5AQCAtMTE3MiwyOCAmIzQzOzEyMzgsMzcgQEAgbXR5cGVfdGVzdF9jaWRycyhzdHJ1Y3QgaXBfc2V0ICpzZXQsIHN0cnVjdCBtdHlwZV9lbGVtICpkLFxuIHtcbiBcdHN0cnVjdCBodHlwZSAqaCA9IHNldC1cdTAwM2VkYXRhO1xuIFx0c3RydWN0IGh0YWJsZSAqdCA9IHJjdV9kZXJlZmVyZW5jZV9iaChoLVx1MDAzZXRhYmxlKTtcbiYjNDM7XHRzdHJ1Y3QgbmV0X3ByZWZpeGVzICpuZXRzMDtcbiBcdHN0cnVjdCBoYnVja2V0ICpuO1xuIFx0c3RydWN0IG10eXBlX2VsZW0gKmRhdGE7XG4gI2lmIElQU0VUX05FVF9DT1VOVCA9PSAyXG4mIzQzO1x0c3RydWN0IG5ldF9wcmVmaXhlcyAqbmV0czE7XG4gXHRzdHJ1Y3QgbXR5cGVfZWxlbSBvcmlnID0gKmQ7XG4tXHRpbnQgcmV0LCBpLCBqID0gMCwgaztcbiYjNDM7XHRpbnQgcmV0LCBpLCBqLCBrO1xuICNlbHNlXG4tXHRpbnQgcmV0LCBpLCBqID0gMDtcbiYjNDM7XHRpbnQgcmV0LCBpLCBqO1xuICNlbmRpZlxuIFx0dTMyIGtleSwgbXVsdGkgPSAwO1xuIFx0dTggcG9zO1xuIFxuIFx0cHJfZGVidWcoXCYjMzQ7dGVzdCBieSBuZXRzXFxuXCYjMzQ7KTtcbi1cdGZvciAoOyBqIFx1MDAzYyBOTEVOIFx1MDAyNlx1MDAyNiBoLVx1MDAzZW5ldHNbal0uY2lkclswXSBcdTAwMjZcdTAwMjYgIW11bHRpOyBqJiM0MzsmIzQzOykge1xuJiM0MztcdHJjdV9yZWFkX2xvY2tfYmgoKTtcbiYjNDM7XHRuZXRzMCA9IHJjdV9kZXJlZmVyZW5jZV9iaChoLVx1MDAzZXJuZXRzWzBdKTtcbiYjNDM7I2lmIElQU0VUX05FVF9DT1VOVCA9PSAyXG4mIzQzO1x0bmV0czEgPSByY3VfZGVyZWZlcmVuY2VfYmgoaC1cdTAwM2VybmV0c1sxXSk7XG4mIzQzOyNlbmRpZlxuJiM0MztcdGZvciAoaiA9IDA7IGogXHUwMDNjIG5ldHMwLVx1MDAzZWxlbiBcdTAwMjZcdTAwMjYgIW11bHRpOyBqJiM0MzsmIzQzOykge1xuJiM0MztcdFx0aWYgKCFuZXRzMC1cdTAwM2VuZXRzW2pdLmNvdW50KVxuJiM0MztcdFx0XHRjb250aW51ZTtcbiAjaWYgSVBTRVRfTkVUX0NPVU5UID09IDJcbiBcdFx0bXR5cGVfZGF0YV9yZXNldF9lbGVtKGQsIFx1MDAyNm9yaWcpO1xuLVx0XHRtdHlwZV9kYXRhX25ldG1hc2soZCwgTkNJRFJfR0VUKGgtXHUwMDNlbmV0c1tqXS5jaWRyWzBdKSwgZmFsc2UpO1xuLVx0XHRmb3IgKGsgPSAwOyBrIFx1MDAzYyBOTEVOIFx1MDAyNlx1MDAyNiBoLVx1MDAzZW5ldHNba10uY2lkclsxXSBcdTAwMjZcdTAwMjYgIW11bHRpO1xuLVx0XHQgICAgIGsmIzQzOyYjNDM7KSB7XG4tXHRcdFx0bXR5cGVfZGF0YV9uZXRtYXNrKGQsIE5DSURSX0dFVChoLVx1MDAzZW5ldHNba10uY2lkclsxXSksXG4tXHRcdFx0XHRcdCAgIHRydWUpO1xuJiM0MztcdFx0bXR5cGVfZGF0YV9uZXRtYXNrKGQsIG5ldHMwLVx1MDAzZW5ldHNbal0uY2lkciwgZmFsc2UpO1xuJiM0MztcdFx0Zm9yIChrID0gMDsgayBcdTAwM2MgbmV0czEtXHUwMDNlbGVuIFx1MDAyNlx1MDAyNiAhbXVsdGk7IGsmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRcdGlmICghbmV0czEtXHUwMDNlbmV0c1trXS5jb3VudClcbiYjNDM7XHRcdFx0XHRjb250aW51ZTtcbiYjNDM7XHRcdFx0bXR5cGVfZGF0YV9uZXRtYXNrKGQsIG5ldHMxLVx1MDAzZW5ldHNba10uY2lkciwgdHJ1ZSk7XG4gI2Vsc2Vcbi1cdFx0bXR5cGVfZGF0YV9uZXRtYXNrKGQsIE5DSURSX0dFVChoLVx1MDAzZW5ldHNbal0uY2lkclswXSkpO1xuJiM0MztcdFx0bXR5cGVfZGF0YV9uZXRtYXNrKGQsIG5ldHMwLVx1MDAzZW5ldHNbal0uY2lkcik7XG4gI2VuZGlmXG4gXHRcdGtleSA9IEhLRVkoZCwgaC1cdTAwM2Vpbml0dmFsLCB0LVx1MDAzZWh0YWJsZV9iaXRzKTtcbiBcdFx0biA9IHJjdV9kZXJlZmVyZW5jZV9iaChoYnVja2V0KHQsIGtleSkpO1xuQEAgLTEyMDgsNyAmIzQzOzEyODMsNyBAQCBtdHlwZV90ZXN0X2NpZHJzKHN0cnVjdCBpcF9zZXQgKnNldCwgc3RydWN0IG10eXBlX2VsZW0gKmQsXG4gXHRcdFx0XHRjb250aW51ZTtcbiBcdFx0XHRyZXQgPSBtdHlwZV9kYXRhX21hdGNoKGRhdGEsIGV4dCwgbWV4dCwgc2V0LCBmbGFncyk7XG4gXHRcdFx0aWYgKHJldCAhPSAwKVxuLVx0XHRcdFx0cmV0dXJuIHJldDtcbiYjNDM7XHRcdFx0XHRnb3RvIHVubG9jaztcbiAjaWZkZWYgSVBfU0VUX0hBU0hfV0lUSF9NVUxUSVxuIFx0XHRcdC8qIE5vIG1hdGNoLCByZXNldCBtdWx0aXBsZSBtYXRjaCBmbGFnICovXG4gXHRcdFx0bXVsdGkgPSAwO1xuQEAgLTEyMTgsNyAmIzQzOzEyOTMsMTAgQEAgbXR5cGVfdGVzdF9jaWRycyhzdHJ1Y3QgaXBfc2V0ICpzZXQsIHN0cnVjdCBtdHlwZV9lbGVtICpkLFxuIFx0XHR9XG4gI2VuZGlmXG4gXHR9XG4tXHRyZXR1cm4gMDtcbiYjNDM7XHRyZXQgPSAwO1xuJiM0Mzt1bmxvY2s6XG4mIzQzO1x0cmN1X3JlYWRfdW5sb2NrX2JoKCk7XG4mIzQzO1x0cmV0dXJuIHJldDtcbiB9XG4gI2VuZGlmXG4gXG5AQCAtMTM1Myw3ICYjNDM7MTQzMSw3IEBAIG10eXBlX3VyZWYoc3RydWN0IGlwX3NldCAqc2V0LCBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IsIGJvb2wgc3RhcnQpXG4gXHRcdHJjdV9yZWFkX3VubG9ja19iaCgpO1xuIFx0fSBlbHNlIGlmIChjYi1cdTAwM2VhcmdzW0lQU0VUX0NCX1BSSVZBVEVdKSB7XG4gXHRcdHQgPSAoc3RydWN0IGh0YWJsZSAqKWNiLVx1MDAzZWFyZ3NbSVBTRVRfQ0JfUFJJVkFURV07XG4tXHRcdGlmIChhdG9taWNfZGVjX2FuZF90ZXN0KFx1MDAyNnQtXHUwMDNldXJlZikgXHUwMDI2XHUwMDI2IGF0b21pY19yZWFkKFx1MDAyNnQtXHUwMDNlcmVmKSkge1xuJiM0MztcdFx0aWYgKGF0b21pY19kZWNfYW5kX3Rlc3QoXHUwMDI2dC1cdTAwM2V1cmVmKSBcdTAwMjZcdTAwMjYgdC1cdTAwM2VyZXNpemluZykge1xuIFx0XHRcdHByX2RlYnVnKFwmIzM0O1RhYmxlIGRlc3Ryb3kgYWZ0ZXIgcmVzaXplIFwmIzM0O1xuIFx0XHRcdFx0IFwmIzM0OyBieSBkdW1wOiAlcFxcblwmIzM0OywgdCk7XG4gXHRcdFx0bXR5cGVfYWhhc2hfZGVzdHJveShzZXQsIHQsIGZhbHNlKTtcbkBAIC0xNDgzLDYgJiM0MzsxNTYxLDkgQEAgSVBTRVRfVE9LRU4oSFRZUEUsIF9jcmVhdGUpKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGlwX3NldCAqc2V0LFxuIFx0aW50IHJldCBfX2F0dHJpYnV0ZV9fKCh1bnVzZWQpKSA9IDA7XG4gXHR1OCBuZXRtYXNrID0gc2V0LVx1MDAzZWZhbWlseSA9PSBORlBST1RPX0lQVjQgPyAzMiA6IDEyODtcbiBcdHVuaW9uIG5mX2luZXRfYWRkciBiaXRtYXNrID0gb25lc21hc2s7XG4mIzQzOyNlbmRpZlxuJiM0MzsjaWZkZWYgSVBfU0VUX0hBU0hfV0lUSF9ORVRTXG4mIzQzO1x0c3RydWN0IG5ldF9wcmVmaXhlcyAqbmV0cztcbiAjZW5kaWZcbiBcdHNpemVfdCBoc2l6ZTtcbiBcdHN0cnVjdCBodHlwZSAqaDtcbkBAIC0xNTY2LDcgJiM0MzsxNjQ3LDEzIEBAIElQU0VUX1RPS0VOKEhUWVBFLCBfY3JlYXRlKShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBpcF9zZXQgKnNldCxcbiBcdGlmICh0YltJUFNFVF9BVFRSX01BWEVMRU1dKVxuIFx0XHRtYXhlbGVtID0gaXBfc2V0X2dldF9oMzIodGJbSVBTRVRfQVRUUl9NQVhFTEVNXSk7XG4gXG4tXHRoc2l6ZSA9IHNpemVvZigqaCk7XG4mIzQzOyNpZmRlZiBJUF9TRVRfUFJPVE9fVU5ERUZcbiYjNDM7XHRoc2l6ZSA9IHNpemVvZihzdHJ1Y3QgaHR5cGUpO1xuJiM0MzsjZWxzZVxuJiM0MztcdGhzaXplID0gc2V0LVx1MDAzZWZhbWlseSA9PSBORlBST1RPX0lQVjYgP1xuJiM0MztcdFx0c2l6ZW9mKHN0cnVjdCBJUFNFVF9UT0tFTihIVFlQRSwgNikpIDpcbiYjNDM7XHRcdHNpemVvZihzdHJ1Y3QgSVBTRVRfVE9LRU4oSFRZUEUsIDQpKTtcbiYjNDM7I2VuZGlmXG4gXHRoID0ga3phbGxvYyhoc2l6ZSwgR0ZQX0tFUk5FTCk7XG4gXHRpZiAoIWgpXG4gXHRcdHJldHVybiAtRU5PTUVNO1xuQEAgLTE1NzcsMjIgJiM0MzsxNjY0LDI3IEBAIElQU0VUX1RPS0VOKEhUWVBFLCBfY3JlYXRlKShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBpcF9zZXQgKnNldCxcbiBcdCAqL1xuIFx0aGJpdHMgPSBmbHMoaGFzaHNpemUgLSAxKTtcbiBcdGhzaXplID0gaHRhYmxlX3NpemUoaGJpdHMpO1xuLVx0aWYgKGhzaXplID09IDApIHtcbi1cdFx0a2ZyZWUoaCk7XG4tXHRcdHJldHVybiAtRU5PTUVNO1xuLVx0fVxuJiM0MztcdGlmIChoc2l6ZSA9PSAwKVxuJiM0MztcdFx0Z290byBmcmVlX2g7XG4gXHR0ID0gaXBfc2V0X2FsbG9jKGhzaXplKTtcbi1cdGlmICghdCkge1xuLVx0XHRrZnJlZShoKTtcbi1cdFx0cmV0dXJuIC1FTk9NRU07XG4tXHR9XG4mIzQzO1x0aWYgKCF0KVxuJiM0MztcdFx0Z290byBmcmVlX2g7XG4gXHR0LVx1MDAzZWhyZWdpb24gPSBpcF9zZXRfYWxsb2MoYWhhc2hfc2l6ZW9mX3JlZ2lvbnMoaGJpdHMpKTtcbi1cdGlmICghdC1cdTAwM2VocmVnaW9uKSB7XG4tXHRcdGlwX3NldF9mcmVlKHQpO1xuLVx0XHRrZnJlZShoKTtcbi1cdFx0cmV0dXJuIC1FTk9NRU07XG4mIzQzO1x0aWYgKCF0LVx1MDAzZWhyZWdpb24pXG4mIzQzO1x0XHRnb3RvIGZyZWVfdDtcbiYjNDM7I2lmZGVmIElQX1NFVF9IQVNIX1dJVEhfTkVUU1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIElQU0VUX05FVF9DT1VOVDsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdG5ldHMgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgbmV0X3ByZWZpeGVzKSwgR0ZQX0tFUk5FTCk7XG4mIzQzO1x0XHRpZiAoIW5ldHMpIHtcbiYjNDM7XHRcdFx0aWYgKGkgIT0gMClcbiYjNDM7XHRcdFx0XHRrZnJlZShoLVx1MDAzZXJuZXRzWzBdKTtcbiYjNDM7XHRcdFx0Z290byBmcmVlX2hyZWdpb247XG4mIzQzO1x0XHR9XG4mIzQzO1x0XHRSQ1VfSU5JVF9QT0lOVEVSKGgtXHUwMDNlcm5ldHNbaV0sIG5ldHMpO1xuIFx0fVxuJiM0MzsjZW5kaWZcbiBcdGgtXHUwMDNlZ2Muc2V0ID0gc2V0O1xuJiM0MztcdHNwaW5fbG9ja19pbml0KFx1MDAyNmgtXHUwMDNlZ2MubG9jayk7XG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBhaGFzaF9udW1vZl9sb2NrcyhoYml0cyk7IGkmIzQzOyYjNDM7KVxuIFx0XHRzcGluX2xvY2tfaW5pdChcdTAwMjZ0LVx1MDAzZWhyZWdpb25baV0ubG9jayk7XG4gXHRoLVx1MDAzZW1heGVsZW0gPSBtYXhlbGVtO1xuQEAgLTE2MTksOSAmIzQzOzE3MTEsOCBAQCBJUFNFVF9UT0tFTihIVFlQRSwgX2NyZWF0ZSkoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgaXBfc2V0ICpzZXQsXG4gXHR9XG4gXHR0LVx1MDAzZWh0YWJsZV9iaXRzID0gaGJpdHM7XG4gXHR0LVx1MDAzZW1heGVsZW0gPSBoLVx1MDAzZW1heGVsZW0gLyBhaGFzaF9udW1vZl9sb2NrcyhoYml0cyk7XG4mIzQzO1x0SU5JVF9MSVNUX0hFQUQoXHUwMDI2dC1cdTAwM2VhZCk7XG4gXHRSQ1VfSU5JVF9QT0lOVEVSKGgtXHUwMDNldGFibGUsIHQpO1xuLVxuLVx0SU5JVF9MSVNUX0hFQUQoXHUwMDI2aC1cdTAwM2VhZCk7XG4gXHRzZXQtXHUwMDNlZGF0YSA9IGg7XG4gI2lmbmRlZiBJUF9TRVRfUFJPVE9fVU5ERUZcbiBcdGlmIChzZXQtXHUwMDNlZmFtaWx5ID09IE5GUFJPVE9fSVBWNCkge1xuQEAgLTE2NTUsNiAmIzQzOzE3NDYsMTYgQEAgSVBTRVRfVE9LRU4oSFRZUEUsIF9jcmVhdGUpKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGlwX3NldCAqc2V0LFxuIFx0XHQgdC1cdTAwM2VodGFibGVfYml0cywgaC1cdTAwM2VtYXhlbGVtLCBzZXQtXHUwMDNlZGF0YSwgdCk7XG4gXG4gXHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzOyNpZmRlZiBJUF9TRVRfSEFTSF9XSVRIX05FVFNcbiYjNDM7ZnJlZV9ocmVnaW9uOlxuJiM0MztcdGlwX3NldF9mcmVlKHQtXHUwMDNlaHJlZ2lvbik7XG4mIzQzOyNlbmRpZlxuJiM0MztmcmVlX3Q6XG4mIzQzO1x0aXBfc2V0X2ZyZWUodCk7XG4mIzQzO2ZyZWVfaDpcbiYjNDM7XHRrZnJlZShoKTtcbiYjNDM7XHRyZXR1cm4gLUVOT01FTTtcbiB9XG4gI2VuZGlmIC8qIElQX1NFVF9FTUlUX0NSRUFURSAqL1xuIFxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0bmV0LmMgYi9uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwcG9ydG5ldC5jXG5pbmRleCAyZDY2NTJkNDMxOTlhNC4uMTk1ODUzYTI1YjA2MDYgMTAwNjQ0XG4tLS0gYS9uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwcG9ydG5ldC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwcG9ydG5ldC5jXG5AQCAtMTM4LDcgJiM0MzsxMzgsNyBAQCBoYXNoX2lwcG9ydG5ldDRfa2FkdChzdHJ1Y3QgaXBfc2V0ICpzZXQsIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXG4gXHRjb25zdCBzdHJ1Y3QgaGFzaF9pcHBvcnRuZXQ0ICpoID0gc2V0LVx1MDAzZWRhdGE7XG4gXHRpcHNldF9hZHRmbiBhZHRmbiA9IHNldC1cdTAwM2V2YXJpYW50LVx1MDAzZWFkdFthZHRdO1xuIFx0c3RydWN0IGhhc2hfaXBwb3J0bmV0NF9lbGVtIGUgPSB7XG4tXHRcdC5jaWRyID0gSU5JVF9DSURSKGgtXHUwMDNlbmV0c1swXS5jaWRyWzBdLCBIT1NUX01BU0spLFxuJiM0MztcdFx0LmNpZHIgPSBJTklUX0NJRFIoaC1cdTAwM2VybmV0c1swXSwgSE9TVF9NQVNLKSxcbiBcdH07XG4gXHRzdHJ1Y3QgaXBfc2V0X2V4dCBleHQgPSBJUF9TRVRfSU5JVF9LRVhUKHNrYiwgb3B0LCBzZXQpO1xuIFxuQEAgLTM5OCw3ICYjNDM7Mzk4LDcgQEAgaGFzaF9pcHBvcnRuZXQ2X2thZHQoc3RydWN0IGlwX3NldCAqc2V0LCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0Y29uc3Qgc3RydWN0IGhhc2hfaXBwb3J0bmV0NiAqaCA9IHNldC1cdTAwM2VkYXRhO1xuIFx0aXBzZXRfYWR0Zm4gYWR0Zm4gPSBzZXQtXHUwMDNldmFyaWFudC1cdTAwM2VhZHRbYWR0XTtcbiBcdHN0cnVjdCBoYXNoX2lwcG9ydG5ldDZfZWxlbSBlID0ge1xuLVx0XHQuY2lkciA9IElOSVRfQ0lEUihoLVx1MDAzZW5ldHNbMF0uY2lkclswXSwgSE9TVF9NQVNLKSxcbiYjNDM7XHRcdC5jaWRyID0gSU5JVF9DSURSKGgtXHUwMDNlcm5ldHNbMF0sIEhPU1RfTUFTSyksXG4gXHR9O1xuIFx0c3RydWN0IGlwX3NldF9leHQgZXh0ID0gSVBfU0VUX0lOSVRfS0VYVChza2IsIG9wdCwgc2V0KTtcbiBcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldC5jIGIvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXQuY1xuaW5kZXggY2UwYTljZTVhOTFmMWEuLjA5MmYzYzkyODFiODBmIDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXQuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXQuY1xuQEAgLTExNyw3ICYjNDM7MTE3LDcgQEAgaGFzaF9uZXQ0X2thZHQoc3RydWN0IGlwX3NldCAqc2V0LCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0Y29uc3Qgc3RydWN0IGhhc2hfbmV0NCAqaCA9IHNldC1cdTAwM2VkYXRhO1xuIFx0aXBzZXRfYWR0Zm4gYWR0Zm4gPSBzZXQtXHUwMDNldmFyaWFudC1cdTAwM2VhZHRbYWR0XTtcbiBcdHN0cnVjdCBoYXNoX25ldDRfZWxlbSBlID0ge1xuLVx0XHQuY2lkciA9IElOSVRfQ0lEUihoLVx1MDAzZW5ldHNbMF0uY2lkclswXSwgSE9TVF9NQVNLKSxcbiYjNDM7XHRcdC5jaWRyID0gSU5JVF9DSURSKGgtXHUwMDNlcm5ldHNbMF0sIEhPU1RfTUFTSyksXG4gXHR9O1xuIFx0c3RydWN0IGlwX3NldF9leHQgZXh0ID0gSVBfU0VUX0lOSVRfS0VYVChza2IsIG9wdCwgc2V0KTtcbiBcbkBAIC0yOTEsNyAmIzQzOzI5MSw3IEBAIGhhc2hfbmV0Nl9rYWR0KHN0cnVjdCBpcF9zZXQgKnNldCwgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdGNvbnN0IHN0cnVjdCBoYXNoX25ldDYgKmggPSBzZXQtXHUwMDNlZGF0YTtcbiBcdGlwc2V0X2FkdGZuIGFkdGZuID0gc2V0LVx1MDAzZXZhcmlhbnQtXHUwMDNlYWR0W2FkdF07XG4gXHRzdHJ1Y3QgaGFzaF9uZXQ2X2VsZW0gZSA9IHtcbi1cdFx0LmNpZHIgPSBJTklUX0NJRFIoaC1cdTAwM2VuZXRzWzBdLmNpZHJbMF0sIEhPU1RfTUFTSyksXG4mIzQzO1x0XHQuY2lkciA9IElOSVRfQ0lEUihoLVx1MDAzZXJuZXRzWzBdLCBIT1NUX01BU0spLFxuIFx0fTtcbiBcdHN0cnVjdCBpcF9zZXRfZXh0IGV4dCA9IElQX1NFVF9JTklUX0tFWFQoc2tiLCBvcHQsIHNldCk7XG4gXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRpZmFjZS5jIGIvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRpZmFjZS5jXG5pbmRleCAzMGE2NTVlNWM0ZmRjZC4uYjQ0Yjk1Zjc2NmI3YWQgMTAwNjQ0XG4tLS0gYS9uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldGlmYWNlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0aWZhY2UuY1xuQEAgLTE2MSw3ICYjNDM7MTYxLDcgQEAgaGFzaF9uZXRpZmFjZTRfa2FkdChzdHJ1Y3QgaXBfc2V0ICpzZXQsIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXG4gXHRzdHJ1Y3QgaGFzaF9uZXRpZmFjZTQgKmggPSBzZXQtXHUwMDNlZGF0YTtcbiBcdGlwc2V0X2FkdGZuIGFkdGZuID0gc2V0LVx1MDAzZXZhcmlhbnQtXHUwMDNlYWR0W2FkdF07XG4gXHRzdHJ1Y3QgaGFzaF9uZXRpZmFjZTRfZWxlbSBlID0ge1xuLVx0XHQuY2lkciA9IElOSVRfQ0lEUihoLVx1MDAzZW5ldHNbMF0uY2lkclswXSwgSE9TVF9NQVNLKSxcbiYjNDM7XHRcdC5jaWRyID0gSU5JVF9DSURSKGgtXHUwMDNlcm5ldHNbMF0sIEhPU1RfTUFTSyksXG4gXHRcdC5lbGVtID0gMSxcbiBcdH07XG4gXHRzdHJ1Y3QgaXBfc2V0X2V4dCBleHQgPSBJUF9TRVRfSU5JVF9LRVhUKHNrYiwgb3B0LCBzZXQpO1xuQEAgLTM4Miw3ICYjNDM7MzgyLDcgQEAgaGFzaF9uZXRpZmFjZTZfa2FkdChzdHJ1Y3QgaXBfc2V0ICpzZXQsIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXG4gXHRzdHJ1Y3QgaGFzaF9uZXRpZmFjZTYgKmggPSBzZXQtXHUwMDNlZGF0YTtcbiBcdGlwc2V0X2FkdGZuIGFkdGZuID0gc2V0LVx1MDAzZXZhcmlhbnQtXHUwMDNlYWR0W2FkdF07XG4gXHRzdHJ1Y3QgaGFzaF9uZXRpZmFjZTZfZWxlbSBlID0ge1xuLVx0XHQuY2lkciA9IElOSVRfQ0lEUihoLVx1MDAzZW5ldHNbMF0uY2lkclswXSwgSE9TVF9NQVNLKSxcbiYjNDM7XHRcdC5jaWRyID0gSU5JVF9DSURSKGgtXHUwMDNlcm5ldHNbMF0sIEhPU1RfTUFTSyksXG4gXHRcdC5lbGVtID0gMSxcbiBcdH07XG4gXHRzdHJ1Y3QgaXBfc2V0X2V4dCBleHQgPSBJUF9TRVRfSU5JVF9LRVhUKHNrYiwgb3B0LCBzZXQpO1xuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0bmV0LmMgYi9uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldG5ldC5jXG5pbmRleCA4ZmJlNjQ5YzlkZDNkNC4uZjdjOGExY2MzMGZjN2IgMTAwNjQ0XG4tLS0gYS9uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldG5ldC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldG5ldC5jXG5AQCAtMTQ5LDggJiM0MzsxNDksMTAgQEAgaGFzaF9uZXRuZXQ0X2thZHQoc3RydWN0IGlwX3NldCAqc2V0LCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0c3RydWN0IGhhc2hfbmV0bmV0NF9lbGVtIGUgPSB7IH07XG4gXHRzdHJ1Y3QgaXBfc2V0X2V4dCBleHQgPSBJUF9TRVRfSU5JVF9LRVhUKHNrYiwgb3B0LCBzZXQpO1xuIFxuLVx0ZS5jaWRyWzBdID0gSU5JVF9DSURSKGgtXHUwMDNlbmV0c1swXS5jaWRyWzBdLCBIT1NUX01BU0spO1xuLVx0ZS5jaWRyWzFdID0gSU5JVF9DSURSKGgtXHUwMDNlbmV0c1swXS5jaWRyWzFdLCBIT1NUX01BU0spO1xuJiM0MztcdHJjdV9yZWFkX2xvY2tfYmgoKTtcbiYjNDM7XHRlLmNpZHJbMF0gPSBJTklUX0NJRFIoaC1cdTAwM2VybmV0c1swXSwgSE9TVF9NQVNLKTtcbiYjNDM7XHRlLmNpZHJbMV0gPSBJTklUX0NJRFIoaC1cdTAwM2VybmV0c1sxXSwgSE9TVF9NQVNLKTtcbiYjNDM7XHRyY3VfcmVhZF91bmxvY2tfYmgoKTtcbiBcdGlmIChhZHQgPT0gSVBTRVRfVEVTVClcbiBcdFx0ZS5jY21wID0gKEhPU1RfTUFTSyBcdTAwM2NcdTAwM2MgKHNpemVvZihlLmNpZHJbMF0pICogOCkpIHwgSE9TVF9NQVNLO1xuIFxuQEAgLTM4OCw4ICYjNDM7MzkwLDEwIEBAIGhhc2hfbmV0bmV0Nl9rYWR0KHN0cnVjdCBpcF9zZXQgKnNldCwgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdHN0cnVjdCBoYXNoX25ldG5ldDZfZWxlbSBlID0geyB9O1xuIFx0c3RydWN0IGlwX3NldF9leHQgZXh0ID0gSVBfU0VUX0lOSVRfS0VYVChza2IsIG9wdCwgc2V0KTtcbiBcbi1cdGUuY2lkclswXSA9IElOSVRfQ0lEUihoLVx1MDAzZW5ldHNbMF0uY2lkclswXSwgSE9TVF9NQVNLKTtcbi1cdGUuY2lkclsxXSA9IElOSVRfQ0lEUihoLVx1MDAzZW5ldHNbMF0uY2lkclsxXSwgSE9TVF9NQVNLKTtcbiYjNDM7XHRyY3VfcmVhZF9sb2NrX2JoKCk7XG4mIzQzO1x0ZS5jaWRyWzBdID0gSU5JVF9DSURSKGgtXHUwMDNlcm5ldHNbMF0sIEhPU1RfTUFTSyk7XG4mIzQzO1x0ZS5jaWRyWzFdID0gSU5JVF9DSURSKGgtXHUwMDNlcm5ldHNbMV0sIEhPU1RfTUFTSyk7XG4mIzQzO1x0cmN1X3JlYWRfdW5sb2NrX2JoKCk7XG4gXHRpZiAoYWR0ID09IElQU0VUX1RFU1QpXG4gXHRcdGUuY2NtcCA9IChIT1NUX01BU0sgXHUwMDNjXHUwMDNjIChzaXplb2YodTgpICogOCkpIHwgSE9TVF9NQVNLO1xuIFxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0cG9ydC5jIGIvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRwb3J0LmNcbmluZGV4IGQxYTA2MjhkZjRlZjNhLi41ZGU0YjUxMWRlNzYzNiAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0cG9ydC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldHBvcnQuY1xuQEAgLTEzMyw3ICYjNDM7MTMzLDcgQEAgaGFzaF9uZXRwb3J0NF9rYWR0KHN0cnVjdCBpcF9zZXQgKnNldCwgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdGNvbnN0IHN0cnVjdCBoYXNoX25ldHBvcnQ0ICpoID0gc2V0LVx1MDAzZWRhdGE7XG4gXHRpcHNldF9hZHRmbiBhZHRmbiA9IHNldC1cdTAwM2V2YXJpYW50LVx1MDAzZWFkdFthZHRdO1xuIFx0c3RydWN0IGhhc2hfbmV0cG9ydDRfZWxlbSBlID0ge1xuLVx0XHQuY2lkciA9IElOSVRfQ0lEUihoLVx1MDAzZW5ldHNbMF0uY2lkclswXSwgSE9TVF9NQVNLKSxcbiYjNDM7XHRcdC5jaWRyID0gSU5JVF9DSURSKGgtXHUwMDNlcm5ldHNbMF0sIEhPU1RfTUFTSyksXG4gXHR9O1xuIFx0c3RydWN0IGlwX3NldF9leHQgZXh0ID0gSVBfU0VUX0lOSVRfS0VYVChza2IsIG9wdCwgc2V0KTtcbiBcbkBAIC0zNTMsNyAmIzQzOzM1Myw3IEBAIGhhc2hfbmV0cG9ydDZfa2FkdChzdHJ1Y3QgaXBfc2V0ICpzZXQsIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXG4gXHRjb25zdCBzdHJ1Y3QgaGFzaF9uZXRwb3J0NiAqaCA9IHNldC1cdTAwM2VkYXRhO1xuIFx0aXBzZXRfYWR0Zm4gYWR0Zm4gPSBzZXQtXHUwMDNldmFyaWFudC1cdTAwM2VhZHRbYWR0XTtcbiBcdHN0cnVjdCBoYXNoX25ldHBvcnQ2X2VsZW0gZSA9IHtcbi1cdFx0LmNpZHIgPSBJTklUX0NJRFIoaC1cdTAwM2VuZXRzWzBdLmNpZHJbMF0sIEhPU1RfTUFTSyksXG4mIzQzO1x0XHQuY2lkciA9IElOSVRfQ0lEUihoLVx1MDAzZXJuZXRzWzBdLCBIT1NUX01BU0spLFxuIFx0fTtcbiBcdHN0cnVjdCBpcF9zZXRfZXh0IGV4dCA9IElQX1NFVF9JTklUX0tFWFQoc2tiLCBvcHQsIHNldCk7XG4gXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRwb3J0bmV0LmMgYi9uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldHBvcnRuZXQuY1xuaW5kZXggYmY0ZjkxYjc4ZTFkY2IuLjYyOTE1MzJiZTdhNWEyIDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRwb3J0bmV0LmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0cG9ydG5ldC5jXG5AQCAtMTU3LDggJiM0MzsxNTcsMTAgQEAgaGFzaF9uZXRwb3J0bmV0NF9rYWR0KHN0cnVjdCBpcF9zZXQgKnNldCwgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdHN0cnVjdCBoYXNoX25ldHBvcnRuZXQ0X2VsZW0gZSA9IHsgfTtcbiBcdHN0cnVjdCBpcF9zZXRfZXh0IGV4dCA9IElQX1NFVF9JTklUX0tFWFQoc2tiLCBvcHQsIHNldCk7XG4gXG4tXHRlLmNpZHJbMF0gPSBJTklUX0NJRFIoaC1cdTAwM2VuZXRzWzBdLmNpZHJbMF0sIEhPU1RfTUFTSyk7XG4tXHRlLmNpZHJbMV0gPSBJTklUX0NJRFIoaC1cdTAwM2VuZXRzWzBdLmNpZHJbMV0sIEhPU1RfTUFTSyk7XG4mIzQzO1x0cmN1X3JlYWRfbG9ja19iaCgpO1xuJiM0MztcdGUuY2lkclswXSA9IElOSVRfQ0lEUihoLVx1MDAzZXJuZXRzWzBdLCBIT1NUX01BU0spO1xuJiM0MztcdGUuY2lkclsxXSA9IElOSVRfQ0lEUihoLVx1MDAzZXJuZXRzWzFdLCBIT1NUX01BU0spO1xuJiM0MztcdHJjdV9yZWFkX3VubG9ja19iaCgpO1xuIFx0aWYgKGFkdCA9PSBJUFNFVF9URVNUKVxuIFx0XHRlLmNjbXAgPSAoSE9TVF9NQVNLIFx1MDAzY1x1MDAzYyAoc2l6ZW9mKGUuY2lkclswXSkgKiA4KSkgfCBIT1NUX01BU0s7XG4gXG5AQCAtNDUyLDggJiM0Mzs0NTQsMTAgQEAgaGFzaF9uZXRwb3J0bmV0Nl9rYWR0KHN0cnVjdCBpcF9zZXQgKnNldCwgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdHN0cnVjdCBoYXNoX25ldHBvcnRuZXQ2X2VsZW0gZSA9IHsgfTtcbiBcdHN0cnVjdCBpcF9zZXRfZXh0IGV4dCA9IElQX1NFVF9JTklUX0tFWFQoc2tiLCBvcHQsIHNldCk7XG4gXG4tXHRlLmNpZHJbMF0gPSBJTklUX0NJRFIoaC1cdTAwM2VuZXRzWzBdLmNpZHJbMF0sIEhPU1RfTUFTSyk7XG4tXHRlLmNpZHJbMV0gPSBJTklUX0NJRFIoaC1cdTAwM2VuZXRzWzBdLmNpZHJbMV0sIEhPU1RfTUFTSyk7XG4mIzQzO1x0cmN1X3JlYWRfbG9ja19iaCgpO1xuJiM0MztcdGUuY2lkclswXSA9IElOSVRfQ0lEUihoLVx1MDAzZXJuZXRzWzBdLCBIT1NUX01BU0spO1xuJiM0MztcdGUuY2lkclsxXSA9IElOSVRfQ0lEUihoLVx1MDAzZXJuZXRzWzFdLCBIT1NUX01BU0spO1xuJiM0MztcdHJjdV9yZWFkX3VubG9ja19iaCgpO1xuIFx0aWYgKGFkdCA9PSBJUFNFVF9URVNUKVxuIFx0XHRlLmNjbXAgPSAoSE9TVF9NQVNLIFx1MDAzY1x1MDAzYyAoc2l6ZW9mKHU4KSAqIDgpKSB8IEhPU1RfTUFTSztcbiBcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMiAxNzowMTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4ybTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtORVRGSUxURVImIzM0OywKICAgICYjMzQ7SVBfU0VUJiMzNDssCiAgICAmIzM0O0lQX1NFVF9IQVNIX05FVCYjMzQ7LAogICAgJiMzNDtJUF9TRVRfSEFTSF9ORVRORVQmIzM0OywKICAgICYjMzQ7SVBfU0VUX0hBU0hfTkVUUE9SVCYjMzQ7LAogICAgJiMzNDtJUF9TRVRfSEFTSF9ORVRJRkFDRSYjMzQ7LAogICAgJiMzNDtJUF9TRVRfSEFTSF9JUFBPUlRORVQmIzM0OywKICAgICYjMzQ7SVBfU0VUX0hBU0hfTkVUUE9SVE5FVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2hhc2hfbmV0NF9hZGQmIzM0OywKICAgICYjMzQ7aGFzaF9uZXQ0X2RlbCYjMzQ7LAogICAgJiMzNDtoYXNoX25ldDRfdGVzdCYjMzQ7LAogICAgJiMzNDtoYXNoX25ldDRfcmVzaXplJiMzNDssCiAgICAmIzM0O2hhc2hfbmV0NF9nYyYjMzQ7LAogICAgJiMzNDtoYXNoX25ldDRfZmx1c2gmIzM0OywKICAgICYjMzQ7aGFzaF9uZXQ0X2Rlc3Ryb3kmIzM0OywKICAgICYjMzQ7aGFzaF9uZXQ0X3VyZWYmIzM0OywKICAgICYjMzQ7aGFzaF9uZXQ0X2thZHQmIzM0OywKICAgICYjMzQ7aGFzaF9uZXQ0X3VhZHQmIzM0OywKICAgICYjMzQ7aGFzaF9uZXRfY3JlYXRlJiMzNDssCiAgICAmIzM0O2hhc2hfbmV0Nl9hZGQmIzM0OywKICAgICYjMzQ7aGFzaF9uZXQ2X2RlbCYjMzQ7LAogICAgJiMzNDtoYXNoX25ldDZfdGVzdCYjMzQ7LAogICAgJiMzNDtoYXNoX25ldDZfcmVzaXplJiMzNDssCiAgICAmIzM0O2hhc2hfbmV0Nl9nYyYjMzQ7LAogICAgJiMzNDtoYXNoX25ldDZfa2FkdCYjMzQ7LAogICAgJiMzNDtoYXNoX25ldDZfdWFkdCYjMzQ7LAogICAgJiMzNDtoYXNoX25ldG5ldDRfYWRkJiMzNDssCiAgICAmIzM0O2hhc2hfbmV0bmV0NF9yZXNpemUmIzM0OywKICAgICYjMzQ7aGFzaF9uZXRuZXQ0X2djJiMzNDssCiAgICAmIzM0O2hhc2hfbmV0bmV0NF9rYWR0JiMzNDssCiAgICAmIzM0O2hhc2hfbmV0bmV0NF91YWR0JiMzNDssCiAgICAmIzM0O2hhc2hfbmV0bmV0X2NyZWF0ZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgY29yZSBoYXNoIHRhYmxlIGltcGxlbWVudGF0aW9uIGZvciBuZXRmaWx0ZXIgaXBzZXQgKHNwZWNpZmljYWxseSB0aGUgZ2VuZXJpYyBoYXNoIHR5cGVzIGluIGlwX3NldF9oYXNoX2dlbi5oKS4gSXQgY2hhbmdlcyBob3cgQ0lEUiBuZXR3b3JrcyBhcmUgc3RvcmVkLCBtb3ZpbmcgZnJvbSBhIGZpeGVkLXNpemUgYXJyYXkgdG8gYW4gUkNVLXByb3RlY3RlZCBkeW5hbWljYWxseSBhbGxvY2F0ZWQgYXJyYXksIGFuZCB1cGRhdGVzIHRoZSByZXNpemluZyBhbmQgZ2FyYmFnZSBjb2xsZWN0aW9uIGxvZ2ljIHRvIHVzZSBhIG5ldyBsb2NrIGFuZCBhIGByZXNpemluZ2AgZmxhZy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRvIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYyBhbmQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgdGhlIG5ldyBSQ1UgYW5kIGxvY2tpbmcgbG9naWMgZG9lc24mIzM5O3QgaW50cm9kdWNlIHVzZS1hZnRlci1mcmVlLCBtZW1vcnkgbGVha3MsIG9yIHJhY2UgY29uZGl0aW9ucy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLApldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXQKICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LAogICBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMGJmYzMzM2VkYTYzNmNhYmMwZDFiNzU5MjRmZGRiMGJiYTUxOTA4MQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUaHUgSnVsIDIgMTc6MDE6MTQgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oIGIvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaAppbmRleCBkZWRmNTliNjYxZGRmMy4uMmI0NzNhY2FkNTBjYjggMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaApAQCAtNzUsMTUgJiM0Mzs3NSwxNyBAQCBzdHJ1Y3QgaGJ1Y2tldCB7CiBzdHJ1Y3QgaHRhYmxlX2djIHsKIAlzdHJ1Y3QgZGVsYXllZF93b3JrIGR3b3JrOwogCXN0cnVjdCBpcF9zZXQgKnNldDsJLyogU2V0IHRoZSBnYyBiZWxvbmdzIHRvICovCiYjNDM7CXNwaW5sb2NrX3QgbG9jazsJLyogTG9jayB0byBleGNsdWRlIGdjIGFuZCByZXNpemUgKi8KIAl1MzIgcmVnaW9uOwkJLyogTGFzdCBnYyBydW4gcG9zaXRpb24gKi8KIH07CiAKIC8qIFRoZSBoYXNoIHRhYmxlOiB0aGUgdGFibGUgc2l6ZSBzdG9yZWQgaGVyZSBpbiBvcmRlciB0byBtYWtlIHJlc2l6aW5nIGVhc3kgKi8KIHN0cnVjdCBodGFibGUgewotCWF0b21pY190IHJlZjsJCS8qIFJlZmVyZW5jZXMgZm9yIHJlc2l6aW5nICovCiYjNDM7CWJvb2wgcmVzaXppbmc7CQkvKiBNYXJrIG9uZ29pbmcgcmVzaXplICovCiAJYXRvbWljX3QgdXJlZjsJCS8qIFJlZmVyZW5jZXMgZm9yIGR1bXBpbmcgYW5kIGdjICovCiAJdTggaHRhYmxlX2JpdHM7CQkvKiBzaXplIG9mIGhhc2ggdGFibGUgPT0gMl5odGFibGVfYml0cyAqLwogCXUzMiBtYXhlbGVtOwkJLyogTWF4ZWxlbSBwZXIgcmVnaW9uICovCiYjNDM7CXN0cnVjdCBsaXN0X2hlYWQgYWQ7CS8qIFJlc2l6ZSBhZGR8ZGVsIGJhY2tsaXN0ICovCiAJc3RydWN0IGlwX3NldF9yZWdpb24gKmhyZWdpb247CS8qIFJlZ2lvbiBsb2NrcyBhbmQgZXh0IHNpemVzICovCiAJc3RydWN0IGhidWNrZXQgX19yY3UgKmJ1Y2tldFtdOyAvKiBoYXNodGFibGUgYnVja2V0cyAqLwogfTsKQEAgLTk3LDkgJiM0Mzs5OSwxNiBAQCBzdHJ1Y3QgaHRhYmxlIHsKICNlbmRpZgogCiAvKiBCb29rLWtlZXBpbmcgb2YgdGhlIHByZWZpeGVzIGFkZGVkIHRvIHRoZSBzZXQgKi8KJiM0MztzdHJ1Y3QgbmV0X3ByZWZpeCB7CiYjNDM7CXU4IGNpZHI7CQkJLyogdGhlIGNpZHIgdmFsdWUgKi8KJiM0MzsJdTMyIGNvdW50OwkJCS8qIG51bWJlciBvZiBlbGVtZW50cyBvZiB0aGlzIGNpZHIgKi8KJiM0Mzt9OwomIzQzOwogc3RydWN0IG5ldF9wcmVmaXhlcyB7Ci0JdTMyIG5ldHNbSVBTRVRfTkVUX0NPVU5UXTsgLyogbnVtYmVyIG9mIGVsZW1lbnRzIGZvciB0aGlzIGNpZHIgKi8KLQl1OCBjaWRyW0lQU0VUX05FVF9DT1VOVF07ICAvKiB0aGUgY2lkciB2YWx1ZSAqLwomIzQzOwlzdHJ1Y3QgcmN1X2hlYWQgcmN1OwomIzQzOwl1OCBsZW47CiYjNDM7CXN0cnVjdCBuZXRfcHJlZml4IG5ldHNbXQomIzQzOwkJX19hbGlnbmVkKF9fYWxpZ25vZl9fKHU2NCkpOwogfTsKIAogLyogQ29tcHV0ZSB0aGUgaGFzaCB0YWJsZSBzaXplICovCkBAIC0xMjUsMTEgJiM0MzsxMzQsNiBAQCBodGFibGVfc2l6ZSh1OCBoYml0cykKICNlbHNlCiAjZGVmaW5lIF9fQ0lEUihjaWRyLCBpKQkJKGNpZHIpCiAjZW5kaWYKLQotLyogY2lkciAmIzQzOyAxIGlzIHN0b3JlZCBpbiBuZXRfcHJlZml4ZXMgdG8gc3VwcG9ydCAvMCAqLwotI2RlZmluZSBOQ0lEUl9QVVQoY2lkcikJCSgoY2lkcikgJiM0MzsgMSkKLSNkZWZpbmUgTkNJRFJfR0VUKGNpZHIpCQkoKGNpZHIpIC0gMSkKLQogI2lmZGVmIElQX1NFVF9IQVNIX1dJVEhfTkVUU19QQUNLRUQKIC8qIFdoZW4gY2lkciBpcyBwYWNrZWQgd2l0aCBub21hdGNoLCBjaWRyIC0gMSBpcyBzdG9yZWQgaW4gdGhlIGRhdGEgZW50cnkgKi8KICNkZWZpbmUgRENJRFJfUFVUKGNpZHIpCQkoKGNpZHIpIC0gMSkKQEAgLTEzOSwyMSAmIzQzOzE0Myw5IEBAIGh0YWJsZV9zaXplKHU4IGhiaXRzKQogI2RlZmluZSBEQ0lEUl9HRVQoY2lkciwgaSkJX19DSURSKGNpZHIsIGkpCiAjZW5kaWYKIAotI2RlZmluZSBJTklUX0NJRFIoY2lkciwgaG9zdF9tYXNrKQlcCi0JRENJRFJfUFVUKCgoY2lkcikgPyBOQ0lEUl9HRVQoY2lkcikgOiBob3N0X21hc2spKQomIzQzOyNkZWZpbmUgSU5JVF9DSURSKG4sIGhvc3RfbWFzaykJXAomIzQzOwlEQ0lEUl9QVVQoKG4pLSZndDtsZW4gPyAobiktJmd0O25ldHNbMF0uY2lkciA6IGhvc3RfbWFzaykKIAotI2lmZGVmIElQX1NFVF9IQVNIX1dJVEhfTkVUMAotLyogY2lkciBmcm9tIDAgdG8gSE9TVF9NQVNLIHZhbHVlIGFuZCBjID0gY2lkciAmIzQzOyAxICovCi0jZGVmaW5lIE5MRU4JCQkoSE9TVF9NQVNLICYjNDM7IDEpCi0jZGVmaW5lIENJRFJfUE9TKGMpCQkoKGMpIC0gMSkKLSNlbHNlCi0vKiBjaWRyIGZyb20gMSB0byBIT1NUX01BU0sgdmFsdWUgYW5kIGMgPSBjaWRyICYjNDM7IDEgKi8KLSNkZWZpbmUgTkxFTgkJCUhPU1RfTUFTSwotI2RlZmluZSBDSURSX1BPUyhjKQkJKChjKSAtIDIpCi0jZW5kaWYKLQotI2Vsc2UKLSNkZWZpbmUgTkxFTgkJCTAKICNlbmRpZiAvKiBJUF9TRVRfSEFTSF9XSVRIX05FVFMgKi8KIAogI2RlZmluZSBTRVRfRUxFTV9FWFBJUkVEKHNldCwgZCkJXApAQCAtMjkwLDYgJiM0MzsyODIsNyBAQCBzdGF0aWMgY29uc3QgdW5pb24gbmZfaW5ldF9hZGRyIHplcm9tYXNrID0ge307CiAvKiBUaGUgZ2VuZXJpYyBoYXNoIHN0cnVjdHVyZSAqLwogc3RydWN0IGh0eXBlIHsKIAlzdHJ1Y3QgaHRhYmxlIF9fcmN1ICp0YWJsZTsgLyogdGhlIGhhc2ggdGFibGUgKi8KJiM0MzsJc3RydWN0IG5ldF9wcmVmaXhlcyBfX3JjdSAqcm5ldHNbSVBTRVRfTkVUX0NPVU5UXTsgLyogY2lkciBwcmVmaXhlcyAqLwogCXN0cnVjdCBodGFibGVfZ2MgZ2M7CS8qIGdjIHdvcmtxdWV1ZSAqLwogCXUzMiBtYXhlbGVtOwkJLyogbWF4IGVsZW1lbnRzIGluIHRoZSBoYXNoICovCiAJdTMyIGluaXR2YWw7CQkvKiByYW5kb20gamhhc2ggaW5pdCB2YWx1ZSAqLwpAQCAtMzAxLDExICYjNDM7Mjk0LDEwIEBAIHN0cnVjdCBodHlwZSB7CiAJdTggbmV0bWFzazsJCS8qIG5ldG1hc2sgdmFsdWUgZm9yIHN1Ym5ldHMgdG8gc3RvcmUgKi8KIAl1bmlvbiBuZl9pbmV0X2FkZHIgYml0bWFzazsJLyogc3RvcmVzIGJpdG1hc2sgKi8KICNlbmRpZgotCXN0cnVjdCBsaXN0X2hlYWQgYWQ7CS8qIFJlc2l6ZSBhZGR8ZGVsIGJhY2tsaXN0ICovCiYjNDM7CS8qIEJlY2F1c2UgJiMzOTtuZXh0JiMzOTsgaXMgSVB2NC9JUHY2IGRlcGVuZGVudCwgbm8gZWxlbWVudHMgb2YgdGhpcwomIzQzOwkgKiBzdHJ1Y3R1cmUgYW5kIHJlZmVycmVkIGluIGNyZWF0ZSgpIG1heSBjb21lIGFmdGVyICYjMzk7bmV4dCYjMzk7LgomIzQzOwkgKi8KIAlzdHJ1Y3QgbXR5cGVfZWxlbSBuZXh0OyAvKiB0ZW1wb3Jhcnkgc3RvcmFnZSBmb3IgdWFkZCAqLwotI2lmZGVmIElQX1NFVF9IQVNIX1dJVEhfTkVUUwotCXN0cnVjdCBuZXRfcHJlZml4ZXMgbmV0c1tOTEVOXTsgLyogYm9vay1rZWVwaW5nIG9mIHByZWZpeGVzICovCi0jZW5kaWYKIH07CiAKIC8qIEFERHxERUwgZW50cmllcyBzYXZlZCBkdXJpbmcgcmVzaXplICovCkBAIC0zMjIsNTAgJiM0MzszMTQsODggQEAgc3RydWN0IG10eXBlX3Jlc2l6ZV9hZCB7CiAvKiBOZXR3b3JrIGNpZHIgc2l6ZSBib29rIGtlZXBpbmcgd2hlbiB0aGUgaGFzaCBzdG9yZXMgZGlmZmVyZW50CiAgKiBzaXplZCBuZXR3b3Jrcy4gY2lkciA9PSByZWFsIGNpZHIgJiM0MzsgMSB0byBzdXBwb3J0IC8wLgogICovCi1zdGF0aWMgdm9pZAomIzQzO3N0YXRpYyBpbnQKIG10eXBlX2FkZF9jaWRyKHN0cnVjdCBpcF9zZXQgKnNldCwgc3RydWN0IGh0eXBlICpoLCB1OCBjaWRyLCB1OCBuKQogewotCWludCBpLCBqOwomIzQzOwlzdHJ1Y3QgbmV0X3ByZWZpeGVzICpuZXRzLCAqdG1wOwomIzQzOwlpbnQgaSwgaiwgZm91bmQsIGxlbiA9IDAsIHJldCA9IDA7CiAKIAlzcGluX2xvY2tfYmgoJmFtcDtzZXQtJmd0O2xvY2spOwomIzQzOwluZXRzID0gX19pcHNldF9kZXJlZmVyZW5jZShoLSZndDtybmV0c1tuXSk7CiAJLyogQWRkIGluIGluY3JlYXNpbmcgcHJlZml4IG9yZGVyLCBzbyBsYXJnZXIgY2lkciBmaXJzdCAqLwotCWZvciAoaSA9IDAsIGogPSAtMTsgaSAmbHQ7IE5MRU4gJmFtcDsmYW1wOyBoLSZndDtuZXRzW2ldLmNpZHJbbl07IGkmIzQzOyYjNDM7KSB7Ci0JCWlmIChqICE9IC0xKSB7CiYjNDM7CWZvciAoaSA9IDAsIGZvdW5kID0gLTE7IGkgJmx0OyBuZXRzLSZndDtsZW47IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQlpZiAobmV0cy0mZ3Q7bmV0c1tpXS5jb3VudCkKJiM0MzsJCQlsZW4mIzQzOyYjNDM7OwomIzQzOwkJaWYgKGZvdW5kICE9IC0xKSB7CiAJCQljb250aW51ZTsKLQkJfSBlbHNlIGlmIChoLSZndDtuZXRzW2ldLmNpZHJbbl0gJmx0OyBjaWRyKSB7Ci0JCQlqID0gaTsKLQkJfSBlbHNlIGlmIChoLSZndDtuZXRzW2ldLmNpZHJbbl0gPT0gY2lkcikgewotCQkJaC0mZ3Q7bmV0c1tDSURSX1BPUyhjaWRyKV0ubmV0c1tuXSYjNDM7JiM0Mzs7CiYjNDM7CQl9IGVsc2UgaWYgKG5ldHMtJmd0O25ldHNbaV0uY2lkciAmbHQ7IGNpZHIpIHsKJiM0MzsJCQlmb3VuZCA9IGk7CiYjNDM7CQl9IGVsc2UgaWYgKG5ldHMtJmd0O25ldHNbaV0uY2lkciA9PSBjaWRyKSB7CiYjNDM7CQkJbmV0cy0mZ3Q7bmV0c1tpXS5jb3VudCYjNDM7JiM0Mzs7CiAJCQlnb3RvIHVubG9jazsKIAkJfQogCX0KLQlpZiAoaiAhPSAtMSkgewotCQlmb3IgKDsgaSAmZ3Q7IGo7IGktLSkKLQkJCWgtJmd0O25ldHNbaV0uY2lkcltuXSA9IGgtJmd0O25ldHNbaSAtIDFdLmNpZHJbbl07CiYjNDM7CWxlbiYjNDM7JiM0Mzs7CiYjNDM7CXRtcCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBuZXRfcHJlZml4ZXMpICYjNDM7CiYjNDM7CQkgICAgICBsZW4gKiBzaXplb2Yoc3RydWN0IG5ldF9wcmVmaXgpLCBHRlBfQVRPTUlDKTsKJiM0MzsJaWYgKCF0bXApCiYjNDM7CQlyZXR1cm4gLUVOT01FTTsKJiM0MzsJdG1wLSZndDtsZW4gPSBsZW47CiYjNDM7CWZvciAoaSA9IDAsIGogPSAwOyBpICZsdDsgbmV0cy0mZ3Q7bGVuOyBpJiM0MzsmIzQzOykgewomIzQzOwkJaWYgKCFuZXRzLSZndDtuZXRzW2ldLmNvdW50KQomIzQzOwkJCWNvbnRpbnVlOwomIzQzOwkJaWYgKGkgPT0gZm91bmQpIHsKJiM0MzsJCQl0bXAtJmd0O25ldHNbal0uY2lkciA9IGNpZHI7CiYjNDM7CQkJdG1wLSZndDtuZXRzW2omIzQzOyYjNDM7XS5jb3VudCA9IDE7CiYjNDM7CQl9CiYjNDM7CQl0bXAtJmd0O25ldHNbal0uY2lkciA9IG5ldHMtJmd0O25ldHNbaV0uY2lkcjsKJiM0MzsJCXRtcC0mZ3Q7bmV0c1tqJiM0MzsmIzQzO10uY291bnQgPSBuZXRzLSZndDtuZXRzW2ldLmNvdW50OwomIzQzOwl9CiYjNDM7CWlmIChmb3VuZCA9PSAtMSkgewomIzQzOwkJdG1wLSZndDtuZXRzW2pdLmNpZHIgPSBjaWRyOwomIzQzOwkJdG1wLSZndDtuZXRzW2pdLmNvdW50ID0gMTsKIAl9Ci0JaC0mZ3Q7bmV0c1tpXS5jaWRyW25dID0gY2lkcjsKLQloLSZndDtuZXRzW0NJRFJfUE9TKGNpZHIpXS5uZXRzW25dID0gMTsKJiM0MzsJcmN1X2Fzc2lnbl9wb2ludGVyKGgtJmd0O3JuZXRzW25dLCB0bXApOwomIzQzOwlrZnJlZV9yY3UobmV0cywgcmN1KTsKIHVubG9jazoKIAlzcGluX3VubG9ja19iaCgmYW1wO3NldC0mZ3Q7bG9jayk7CiYjNDM7CXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyB2b2lkCiBtdHlwZV9kZWxfY2lkcihzdHJ1Y3QgaXBfc2V0ICpzZXQsIHN0cnVjdCBodHlwZSAqaCwgdTggY2lkciwgdTggbikKIHsKLQl1OCBpLCBqLCBuZXRfZW5kID0gTkxFTiAtIDE7CiYjNDM7CXN0cnVjdCBuZXRfcHJlZml4ZXMgKm5ldHMsICp0bXA7CiYjNDM7CXU4IGksIGosIGZvdW5kLCBsZW4gPSAwOwogCiAJc3Bpbl9sb2NrX2JoKCZhbXA7c2V0LSZndDtsb2NrKTsKLQlmb3IgKGkgPSAwOyBpICZsdDsgTkxFTjsgaSYjNDM7JiM0MzspIHsKLQkJaWYgKGgtJmd0O25ldHNbaV0uY2lkcltuXSAhPSBjaWRyKQotCQkJY29udGludWU7Ci0JCWgtJmd0O25ldHNbQ0lEUl9QT1MoY2lkcildLm5ldHNbbl0tLTsKLQkJaWYgKGgtJmd0O25ldHNbQ0lEUl9QT1MoY2lkcildLm5ldHNbbl0gJmd0OyAwKQotCQkJZ290byB1bmxvY2s7Ci0JCWZvciAoaiA9IGk7IGogJmx0OyBuZXRfZW5kICZhbXA7JmFtcDsgaC0mZ3Q7bmV0c1tqXS5jaWRyW25dOyBqJiM0MzsmIzQzOykKLQkJCWgtJmd0O25ldHNbal0uY2lkcltuXSA9IGgtJmd0O25ldHNbaiAmIzQzOyAxXS5jaWRyW25dOwotCQloLSZndDtuZXRzW2pdLmNpZHJbbl0gPSAwOwomIzQzOwluZXRzID0gX19pcHNldF9kZXJlZmVyZW5jZShoLSZndDtybmV0c1tuXSk7CiYjNDM7CWZvciAoaSA9IDAsIGZvdW5kID0gLTE7IGkgJmx0OyBuZXRzLSZndDtsZW47IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQlpZiAobmV0cy0mZ3Q7bmV0c1tpXS5jb3VudCkKJiM0MzsJCQlsZW4mIzQzOyYjNDM7OwomIzQzOwkJaWYgKG5ldHMtJmd0O25ldHNbaV0uY2lkciA9PSBjaWRyKQomIzQzOwkJCWZvdW5kID0gaTsKJiM0MzsJfQomIzQzOwlpZiAodW5saWtlbHkoZm91bmQgPT0gLTEpKQomIzQzOwkJcmV0dXJuOwomIzQzOwluZXRzLSZndDtuZXRzW2ZvdW5kXS5jb3VudC0tOwomIzQzOwlpZiAobmV0cy0mZ3Q7bmV0c1tmb3VuZF0uY291bnQpCiAJCWdvdG8gdW5sb2NrOwomIzQzOwlsZW4tLTsKJiM0MzsJdG1wID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IG5ldF9wcmVmaXhlcykgJiM0MzsKJiM0MzsJCSAgICAgIGxlbiAqIHNpemVvZihzdHJ1Y3QgbmV0X3ByZWZpeCksIEdGUF9BVE9NSUMpOwomIzQzOwlpZiAoIXRtcCkKJiM0MzsJCS8qIExlYXZlIGEgaG9sZSAqLwomIzQzOwkJcmV0dXJuOwomIzQzOwl0bXAtJmd0O2xlbiA9IGxlbjsKJiM0MzsJZm9yIChpID0gMCwgaiA9IDA7IGkgJmx0OyBuZXRzLSZndDtsZW47IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQlpZiAoIW5ldHMtJmd0O25ldHNbaV0uY291bnQgfHwgaSA9PSBmb3VuZCkKJiM0MzsJCQljb250aW51ZTsKJiM0MzsJCXRtcC0mZ3Q7bmV0c1tqXS5jaWRyID0gbmV0cy0mZ3Q7bmV0c1tpXS5jaWRyOwomIzQzOwkJdG1wLSZndDtuZXRzW2omIzQzOyYjNDM7XS5jb3VudCA9IG5ldHMtJmd0O25ldHNbaV0uY291bnQ7CiAJfQomIzQzOwlyY3VfYXNzaWduX3BvaW50ZXIoaC0mZ3Q7cm5ldHNbbl0sIHRtcCk7CiYjNDM7CWtmcmVlX3JjdShuZXRzLCByY3UpOwogdW5sb2NrOgogCXNwaW5fdW5sb2NrX2JoKCZhbXA7c2V0LSZndDtsb2NrKTsKIH0KQEAgLTM5OCw2ICYjNDM7NDI4LDkgQEAgc3RhdGljIHZvaWQKIG10eXBlX2ZsdXNoKHN0cnVjdCBpcF9zZXQgKnNldCkKIHsKIAlzdHJ1Y3QgaHR5cGUgKmggPSBzZXQtJmd0O2RhdGE7CiYjNDM7I2lmZGVmIElQX1NFVF9IQVNIX1dJVEhfTkVUUwomIzQzOwlzdHJ1Y3QgbmV0X3ByZWZpeGVzICpuZXRzLCAqdG1wOwomIzQzOyNlbmRpZgogCXN0cnVjdCBodGFibGUgKnQ7CiAJc3RydWN0IGhidWNrZXQgKm47CiAJdTMyIHIsIGk7CkBAIC00MjEsNyAmIzQzOzQ1NCwxNyBAQCBtdHlwZV9mbHVzaChzdHJ1Y3QgaXBfc2V0ICpzZXQpCiAJCXNwaW5fdW5sb2NrX2JoKCZhbXA7dC0mZ3Q7aHJlZ2lvbltyXS5sb2NrKTsKIAl9CiAjaWZkZWYgSVBfU0VUX0hBU0hfV0lUSF9ORVRTCi0JbWVtc2V0KGgtJmd0O25ldHMsIDAsIHNpemVvZihoLSZndDtuZXRzKSk7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBJUFNFVF9ORVRfQ09VTlQ7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQluZXRzID0gaXBzZXRfZGVyZWZlcmVuY2VfbmZubChoLSZndDtybmV0c1tpXSk7CiYjNDM7CQl0bXAgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgbmV0X3ByZWZpeGVzKSwgR0ZQX0FUT01JQyk7CiYjNDM7CQlpZiAoIXRtcCkgewomIzQzOwkJCWZvciAoaSA9IDA7IGkgJmx0OyBuZXRzLSZndDtsZW47IGkmIzQzOyYjNDM7KQomIzQzOwkJCQluZXRzLSZndDtuZXRzW2ldLmNvdW50ID0gMDsKJiM0MzsJCX0gZWxzZSB7CiYjNDM7CQkJcmN1X2Fzc2lnbl9wb2ludGVyKGgtJmd0O3JuZXRzW2ldLCB0bXApOwomIzQzOwkJCWtmcmVlX3JjdShuZXRzLCByY3UpOwomIzQzOwkJfQomIzQzOwl9CiAjZW5kaWYKIH0KIApAQCAtNDI5LDYgJiM0Mzs0NzIsOSBAQCBtdHlwZV9mbHVzaChzdHJ1Y3QgaXBfc2V0ICpzZXQpCiBzdGF0aWMgdm9pZAogbXR5cGVfYWhhc2hfZGVzdHJveShzdHJ1Y3QgaXBfc2V0ICpzZXQsIHN0cnVjdCBodGFibGUgKnQsIGJvb2wgZXh0X2Rlc3Ryb3kpCiB7CiYjNDM7I2lmZGVmIElQX1NFVF9IQVNIX1dJVEhfTkVUUwomIzQzOwlzdHJ1Y3QgaHR5cGUgKmggPSBzZXQtJmd0O2RhdGE7CiYjNDM7I2VuZGlmCiAJc3RydWN0IGhidWNrZXQgKm47CiAJdTMyIGk7CiAKQEAgLTQ0Miw2ICYjNDM7NDg4LDExIEBAIG10eXBlX2FoYXNoX2Rlc3Ryb3koc3RydWN0IGlwX3NldCAqc2V0LCBzdHJ1Y3QgaHRhYmxlICp0LCBib29sIGV4dF9kZXN0cm95KQogCQlrZnJlZShuKTsKIAl9CiAKJiM0MzsjaWZkZWYgSVBfU0VUX0hBU0hfV0lUSF9ORVRTCiYjNDM7CWlmIChleHRfZGVzdHJveSkKJiM0MzsJCWZvciAoaSA9IDA7IGkgJmx0OyBJUFNFVF9ORVRfQ09VTlQ7IGkmIzQzOyYjNDM7KQomIzQzOwkJCWtmcmVlKGgtJmd0O3JuZXRzW2ldKTsKJiM0MzsjZW5kaWYKIAlpcF9zZXRfZnJlZSh0LSZndDtocmVnaW9uKTsKIAlpcF9zZXRfZnJlZSh0KTsKIH0KQEAgLTQ1MSwxMyAmIzQzOzUwMiwxNCBAQCBzdGF0aWMgdm9pZAogbXR5cGVfZGVzdHJveShzdHJ1Y3QgaXBfc2V0ICpzZXQpCiB7CiAJc3RydWN0IGh0eXBlICpoID0gc2V0LSZndDtkYXRhOwomIzQzOwlzdHJ1Y3QgaHRhYmxlICp0ID0gKF9fZm9yY2Ugc3RydWN0IGh0YWJsZSAqKWgtJmd0O3RhYmxlOwogCXN0cnVjdCBsaXN0X2hlYWQgKmwsICpsdDsKIAotCW10eXBlX2FoYXNoX2Rlc3Ryb3koc2V0LCAoX19mb3JjZSBzdHJ1Y3QgaHRhYmxlICopaC0mZ3Q7dGFibGUsIHRydWUpOwotCWxpc3RfZm9yX2VhY2hfc2FmZShsLCBsdCwgJmFtcDtoLSZndDthZCkgewomIzQzOwlsaXN0X2Zvcl9lYWNoX3NhZmUobCwgbHQsICZhbXA7dC0mZ3Q7YWQpIHsKIAkJbGlzdF9kZWwobCk7CiAJCWtmcmVlKGwpOwogCX0KJiM0MzsJbXR5cGVfYWhhc2hfZGVzdHJveShzZXQsIHQsIHRydWUpOwogCWtmcmVlKGgpOwogCiAJc2V0LSZndDtkYXRhID0gTlVMTDsKQEAgLTUxNCw4ICYjNDM7NTY2LDcgQEAgbXR5cGVfZ2NfZG8oc3RydWN0IGlwX3NldCAqc2V0LCBzdHJ1Y3QgaHR5cGUgKmgsIHN0cnVjdCBodGFibGUgKnQsIHUzMiByKQogI2lmZGVmIElQX1NFVF9IQVNIX1dJVEhfTkVUUwogCQkJZm9yIChrID0gMDsgayAmbHQ7IElQU0VUX05FVF9DT1VOVDsgayYjNDM7JiM0MzspCiAJCQkJbXR5cGVfZGVsX2NpZHIoc2V0LCBoLAotCQkJCQlOQ0lEUl9QVVQoRENJRFJfR0VUKGRhdGEtJmd0O2NpZHIsIGspKSwKLQkJCQkJayk7CiYjNDM7CQkJCQlEQ0lEUl9HRVQoZGF0YS0mZ3Q7Y2lkciwgayksIGspOwogI2VuZGlmCiAJCQl0LSZndDtocmVnaW9uW3JdLmVsZW1lbnRzLS07CiAJCQlpcF9zZXRfZXh0X2Rlc3Ryb3koc2V0LCBkYXRhKTsKQEAgLTU2OSw5ICYjNDM7NjIwLDEwIEBAIG10eXBlX2djKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKIAlzZXQgPSBnYy0mZ3Q7c2V0OwogCWggPSBzZXQtJmd0O2RhdGE7CiAKLQlzcGluX2xvY2tfYmgoJmFtcDtzZXQtJmd0O2xvY2spOwotCXQgPSBpcHNldF9kZXJlZmVyZW5jZV9zZXQoaC0mZ3Q7dGFibGUsIHNldCk7CiYjNDM7CXJjdV9yZWFkX2xvY2tfYmgoKTsKJiM0MzsJdCA9IHJjdV9kZXJlZmVyZW5jZV9iaChoLSZndDt0YWJsZSk7CiAJYXRvbWljX2luYygmYW1wO3QtJmd0O3VyZWYpOwomIzQzOwlyY3VfcmVhZF91bmxvY2tfYmgoKTsKIAludW1vZl9sb2NrcyA9IGFoYXNoX251bW9mX2xvY2tzKHQtJmd0O2h0YWJsZV9iaXRzKTsKIAlyID0gZ2MtJmd0O3JlZ2lvbiYjNDM7JiM0Mzs7CiAJaWYgKHIgJmd0Oz0gbnVtb2ZfbG9ja3MpIHsKQEAgLTU4MCwxMSAmIzQzOzYzMiwxMyBAQCBtdHlwZV9nYyhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCiAJbmV4dF9ydW4gPSAoSVBTRVRfR0NfUEVSSU9EKHNldC0mZ3Q7dGltZW91dCkgKiBIWikgLyBudW1vZl9sb2NrczsKIAlpZiAobmV4dF9ydW4gJmx0OyBIWi8xMCkKIAkJbmV4dF9ydW4gPSBIWi8xMDsKLQlzcGluX3VubG9ja19iaCgmYW1wO3NldC0mZ3Q7bG9jayk7CiAKLQltdHlwZV9nY19kbyhzZXQsIGgsIHQsIHIpOwomIzQzOwlzcGluX2xvY2tfYmgoJmFtcDtnYy0mZ3Q7bG9jayk7CiYjNDM7CWlmICghdC0mZ3Q7cmVzaXppbmcpCiYjNDM7CQltdHlwZV9nY19kbyhzZXQsIGgsIHQsIHIpOwomIzQzOwlzcGluX3VubG9ja19iaCgmYW1wO2djLSZndDtsb2NrKTsKIAotCWlmIChhdG9taWNfZGVjX2FuZF90ZXN0KCZhbXA7dC0mZ3Q7dXJlZikgJmFtcDsmYW1wOyBhdG9taWNfcmVhZCgmYW1wO3QtJmd0O3JlZikpIHsKJiM0MzsJaWYgKGF0b21pY19kZWNfYW5kX3Rlc3QoJmFtcDt0LSZndDt1cmVmKSAmYW1wOyZhbXA7IHQtJmd0O3Jlc2l6aW5nKSB7CiAJCXByX2RlYnVnKCYjMzQ7VGFibGUgZGVzdHJveSBhZnRlciByZXNpemUgYnkgZXhwaXJlOiAlcFxuJiMzNDssIHQpOwogCQltdHlwZV9haGFzaF9kZXN0cm95KHNldCwgdCwgZmFsc2UpOwogCX0KQEAgLTY2OCwxNSAmIzQzOzcyMiwxOCBAQCBtdHlwZV9yZXNpemUoc3RydWN0IGlwX3NldCAqc2V0LCBib29sIHJldHJpZWQpCiAJfQogCXQtJmd0O2h0YWJsZV9iaXRzID0gaHRhYmxlX2JpdHM7CiAJdC0mZ3Q7bWF4ZWxlbSA9IGgtJmd0O21heGVsZW0gLyBhaGFzaF9udW1vZl9sb2NrcyhodGFibGVfYml0cyk7CiYjNDM7CUlOSVRfTElTVF9IRUFEKCZhbXA7dC0mZ3Q7YWQpOwogCWZvciAoaSA9IDA7IGkgJmx0OyBhaGFzaF9udW1vZl9sb2NrcyhodGFibGVfYml0cyk7IGkmIzQzOyYjNDM7KQogCQlzcGluX2xvY2tfaW5pdCgmYW1wO3QtJmd0O2hyZWdpb25baV0ubG9jayk7CiAKIAkvKiBUaGVyZSBjYW4mIzM5O3QgYmUgYW5vdGhlciBwYXJhbGxlbCByZXNpemluZywKLQkgKiBidXQgZHVtcGluZywgZ2MsIGtlcm5lbCBzaWRlIGFkZC9kZWwgYXJlIHBvc3NpYmxlCiYjNDM7CSAqIGJ1dCBkdW1waW5nIGFuZCBrZXJuZWwgc2lkZSBhZGQvZGVsIGFyZSBwb3NzaWJsZQogCSAqLwogCW9yaWcgPSBpcHNldF9kZXJlZmVyZW5jZV9iaF9uZm5sKGgtJmd0O3RhYmxlKTsKLQlhdG9taWNfc2V0KCZhbXA7b3JpZy0mZ3Q7cmVmLCAxKTsKIAlhdG9taWNfaW5jKCZhbXA7b3JpZy0mZ3Q7dXJlZik7CiYjNDM7CXNwaW5fbG9ja19iaCgmYW1wO2gtJmd0O2djLmxvY2spOwomIzQzOwlvcmlnLSZndDtyZXNpemluZyA9IHRydWU7CiYjNDM7CXNwaW5fdW5sb2NrX2JoKCZhbXA7aC0mZ3Q7Z2MubG9jayk7CiAJcHJfZGVidWcoJiMzNDthdHRlbXB0IHRvIHJlc2l6ZSBzZXQgJXMgZnJvbSAldSB0byAldSwgdCAlcFxuJiMzNDssCiAJCSBzZXQtJmd0O25hbWUsIG9yaWctJmd0O2h0YWJsZV9iaXRzLCBodGFibGVfYml0cywgb3JpZyk7CiAJZm9yIChyID0gMDsgciAmbHQ7IGFoYXNoX251bW9mX2xvY2tzKG9yaWctJmd0O2h0YWJsZV9iaXRzKTsgciYjNDM7JiM0MzspIHsKQEAgLTc2OCw3ICYjNDM7ODI1LDcgQEAgbXR5cGVfcmVzaXplKHN0cnVjdCBpcF9zZXQgKnNldCwgYm9vbCByZXRyaWVkKQogCSAqIEtlcm5lbC1zaWRlIGFkZCBjYW5ub3QgdHJpZ2dlciBhIHJlc2l6ZSBhbmQgdXNlcnNwYWNlIGFjdGlvbnMKIAkgKiBhcmUgc2VyaWFsaXplZCBieSB0aGUgbXV0ZXguCiAJICovCi0JbGlzdF9mb3JfZWFjaF9zYWZlKGwsIGx0LCAmYW1wO2gtJmd0O2FkKSB7CiYjNDM7CWxpc3RfZm9yX2VhY2hfc2FmZShsLCBsdCwgJmFtcDtvcmlnLSZndDthZCkgewogCQl4ID0gbGlzdF9lbnRyeShsLCBzdHJ1Y3QgbXR5cGVfcmVzaXplX2FkLCBsaXN0KTsKIAkJaWYgKHgtJmd0O2FkID09IElQU0VUX0FERCkgewogCQkJbXR5cGVfYWRkKHNldCwgJmFtcDt4LSZndDtkLCAmYW1wO3gtJmd0O2V4dCwgJmFtcDt4LSZndDttZXh0LCB4LSZndDtmbGFncyk7CkBAIC03OTIsMTEgJiM0Mzs4NDksMjQgQEAgbXR5cGVfcmVzaXplKHN0cnVjdCBpcF9zZXQgKnNldCwgYm9vbCByZXRyaWVkKQogCiBjbGVhbnVwOgogCXJjdV9yZWFkX3VubG9ja19iaCgpOwotCWF0b21pY19zZXQoJmFtcDtvcmlnLSZndDtyZWYsIDApOwomIzQzOwlzcGluX2xvY2tfYmgoJmFtcDtoLSZndDtnYy5sb2NrKTsKJiM0MzsJb3JpZy0mZ3Q7cmVzaXppbmcgPSBmYWxzZTsKJiM0MzsJc3Bpbl91bmxvY2tfYmgoJmFtcDtoLSZndDtnYy5sb2NrKTsKJiM0MzsJLyogTWFrZSBzdXJlIHBhcmFsbGVsIHJlYWRlcnMgc2VlIHRoYXQgb3JpZy0mZ3Q7cmVzaXppbmcgaXMgZmFsc2UKJiM0MzsJICogYmVmb3JlIHdlIGRlY3JlbWVudCB1cmVmICovCiYjNDM7CXN5bmNocm9uaXplX3JjdSgpOwogCWF0b21pY19kZWMoJmFtcDtvcmlnLSZndDt1cmVmKTsKIAltdHlwZV9haGFzaF9kZXN0cm95KHNldCwgdCwgZmFsc2UpOwogCWlmIChyZXQgPT0gLUVBR0FJTikKIAkJZ290byByZXRyeTsKJiM0MzsKJiM0MzsJLyogQ2xlYW51cCB0aGUgYmFja2xvZyBvZiBBREQvREVMIGVsZW1lbnRzICovCiYjNDM7CXNwaW5fbG9ja19iaCgmYW1wO3NldC0mZ3Q7bG9jayk7CiYjNDM7CWxpc3RfZm9yX2VhY2hfc2FmZShsLCBsdCwgJmFtcDtvcmlnLSZndDthZCkgewomIzQzOwkJbGlzdF9kZWwobCk7CiYjNDM7CQlrZnJlZShsKTsKJiM0MzsJfQomIzQzOwlzcGluX3VubG9ja19iaCgmYW1wO3NldC0mZ3Q7bG9jayk7CiAJZ290byBvdXQ7CiAKIGhid2FybjoKQEAgLTg2MCwxNSAmIzQzOzkzMCwxMyBAQCBtdHlwZV9hZGQoc3RydWN0IGlwX3NldCAqc2V0LCB2b2lkICp2YWx1ZSwgY29uc3Qgc3RydWN0IGlwX3NldF9leHQgKmV4dCwKIAlrZXkgPSBIS0VZKHZhbHVlLCBoLSZndDtpbml0dmFsLCB0LSZndDtodGFibGVfYml0cyk7CiAJciA9IGFoYXNoX3JlZ2lvbihrZXkpOwogCWF0b21pY19pbmMoJmFtcDt0LSZndDt1cmVmKTsKJiM0MzsJcmN1X3JlYWRfdW5sb2NrX2JoKCk7CiAJZWxlbWVudHMgPSB0LSZndDtocmVnaW9uW3JdLmVsZW1lbnRzOwogCW1heGVsZW0gPSB0LSZndDttYXhlbGVtOwogCWlmIChlbGVtZW50cyAmZ3Q7PSBtYXhlbGVtKSB7CiAJCXUzMiBlOwotCQlpZiAoU0VUX1dJVEhfVElNRU9VVChzZXQpKSB7Ci0JCQlyY3VfcmVhZF91bmxvY2tfYmgoKTsKJiM0MzsJCWlmIChTRVRfV0lUSF9USU1FT1VUKHNldCkpCiAJCQltdHlwZV9nY19kbyhzZXQsIGgsIHQsIHIpOwotCQkJcmN1X3JlYWRfbG9ja19iaCgpOwotCQl9CiAJCW1heGVsZW0gPSBoLSZndDttYXhlbGVtOwogCQllbGVtZW50cyA9IDA7CiAJCWZvciAoZSA9IDA7IGUgJmx0OyBhaGFzaF9udW1vZl9sb2Nrcyh0LSZndDtodGFibGVfYml0cyk7IGUmIzQzOyYjNDM7KQpAQCAtODc2LDcgJiM0Mzs5NDQsNiBAQCBtdHlwZV9hZGQoc3RydWN0IGlwX3NldCAqc2V0LCB2b2lkICp2YWx1ZSwgY29uc3Qgc3RydWN0IGlwX3NldF9leHQgKmV4dCwKIAkJaWYgKGVsZW1lbnRzICZndDs9IG1heGVsZW0gJmFtcDsmYW1wOyBTRVRfV0lUSF9GT1JDRUFERChzZXQpKQogCQkJZm9yY2VhZGQgPSB0cnVlOwogCX0KLQlyY3VfcmVhZF91bmxvY2tfYmgoKTsKIAogCXNwaW5fbG9ja19iaCgmYW1wO3QtJmd0O2hyZWdpb25bcl0ubG9jayk7CiAJbiA9IHJjdV9kZXJlZmVyZW5jZV9iaChoYnVja2V0KHQsIGtleSkpOwpAQCAtOTI5LDggJiM0Mzs5OTYsNyBAQCBtdHlwZV9hZGQoc3RydWN0IGlwX3NldCAqc2V0LCB2b2lkICp2YWx1ZSwgY29uc3Qgc3RydWN0IGlwX3NldF9leHQgKmV4dCwKICNpZmRlZiBJUF9TRVRfSEFTSF9XSVRIX05FVFMKIAkJCWZvciAoaSA9IDA7IGkgJmx0OyBJUFNFVF9ORVRfQ09VTlQ7IGkmIzQzOyYjNDM7KQogCQkJCW10eXBlX2RlbF9jaWRyKHNldCwgaCwKLQkJCQkJTkNJRFJfUFVUKERDSURSX0dFVChkYXRhLSZndDtjaWRyLCBpKSksCi0JCQkJCWkpOwomIzQzOwkJCQkJRENJRFJfR0VUKGRhdGEtJmd0O2NpZHIsIGkpLCBpKTsKICNlbmRpZgogCQkJaXBfc2V0X2V4dF9kZXN0cm95KHNldCwgZGF0YSk7CiAJCQl0LSZndDtocmVnaW9uW3JdLmVsZW1lbnRzLS07CkBAIC05NzUsNyAmIzQzOzEwNDEsNyBAQCBtdHlwZV9hZGQoc3RydWN0IGlwX3NldCAqc2V0LCB2b2lkICp2YWx1ZSwgY29uc3Qgc3RydWN0IGlwX3NldF9leHQgKmV4dCwKIAl0LSZndDtocmVnaW9uW3JdLmVsZW1lbnRzJiM0MzsmIzQzOzsKICNpZmRlZiBJUF9TRVRfSEFTSF9XSVRIX05FVFMKIAlmb3IgKGkgPSAwOyBpICZsdDsgSVBTRVRfTkVUX0NPVU5UOyBpJiM0MzsmIzQzOykKLQkJbXR5cGVfYWRkX2NpZHIoc2V0LCBoLCBOQ0lEUl9QVVQoRENJRFJfR0VUKGQtJmd0O2NpZHIsIGkpKSwgaSk7CiYjNDM7CQltdHlwZV9hZGRfY2lkcihzZXQsIGgsIERDSURSX0dFVChkLSZndDtjaWRyLCBpKSwgaSk7CiAjZW5kaWYKIAltZW1jcHkoZGF0YSwgZCwgc2l6ZW9mKHN0cnVjdCBtdHlwZV9lbGVtKSk7CiBvdmVyd3JpdGVfZXh0ZW5zaW9uczoKQEAgLTEwMDMsNyAmIzQzOzEwNjksNyBAQCBtdHlwZV9hZGQoc3RydWN0IGlwX3NldCAqc2V0LCB2b2lkICp2YWx1ZSwgY29uc3Qgc3RydWN0IGlwX3NldF9leHQgKmV4dCwKIAlyZXQgPSAwOwogcmVzaXplOgogCXNwaW5fdW5sb2NrX2JoKCZhbXA7dC0mZ3Q7aHJlZ2lvbltyXS5sb2NrKTsKLQlpZiAoYXRvbWljX3JlYWQoJmFtcDt0LSZndDtyZWYpICZhbXA7JmFtcDsgZXh0LSZndDt0YXJnZXQpIHsKJiM0MzsJaWYgKHQtJmd0O3Jlc2l6aW5nICZhbXA7JmFtcDsgZXh0ICZhbXA7JmFtcDsgZXh0LSZndDt0YXJnZXQpIHsKIAkJLyogUmVzaXplIGlzIGluIHByb2Nlc3MgYW5kIGtlcm5lbCBzaWRlIGFkZCwgc2F2ZSB2YWx1ZXMgKi8KIAkJc3RydWN0IG10eXBlX3Jlc2l6ZV9hZCAqeDsKIApAQCAtMTAxNyw3ICYjNDM7MTA4Myw3IEBAIG10eXBlX2FkZChzdHJ1Y3QgaXBfc2V0ICpzZXQsIHZvaWQgKnZhbHVlLCBjb25zdCBzdHJ1Y3QgaXBfc2V0X2V4dCAqZXh0LAogCQltZW1jcHkoJmFtcDt4LSZndDttZXh0LCBtZXh0LCBzaXplb2Yoc3RydWN0IGlwX3NldF9leHQpKTsKIAkJeC0mZ3Q7ZmxhZ3MgPSBmbGFnczsKIAkJc3Bpbl9sb2NrX2JoKCZhbXA7c2V0LSZndDtsb2NrKTsKLQkJbGlzdF9hZGRfdGFpbCgmYW1wO3gtJmd0O2xpc3QsICZhbXA7aC0mZ3Q7YWQpOwomIzQzOwkJbGlzdF9hZGRfdGFpbCgmYW1wO3gtJmd0O2xpc3QsICZhbXA7dC0mZ3Q7YWQpOwogCQlzcGluX3VubG9ja19iaCgmYW1wO3NldC0mZ3Q7bG9jayk7CiAJfQogCWdvdG8gb3V0OwpAQCAtMTAzMCw3ICYjNDM7MTA5Niw3IEBAIG10eXBlX2FkZChzdHJ1Y3QgaXBfc2V0ICpzZXQsIHZvaWQgKnZhbHVlLCBjb25zdCBzdHJ1Y3QgaXBfc2V0X2V4dCAqZXh0LAogdW5sb2NrOgogCXNwaW5fdW5sb2NrX2JoKCZhbXA7dC0mZ3Q7aHJlZ2lvbltyXS5sb2NrKTsKIG91dDoKLQlpZiAoYXRvbWljX2RlY19hbmRfdGVzdCgmYW1wO3QtJmd0O3VyZWYpICZhbXA7JmFtcDsgYXRvbWljX3JlYWQoJmFtcDt0LSZndDtyZWYpKSB7CiYjNDM7CWlmIChhdG9taWNfZGVjX2FuZF90ZXN0KCZhbXA7dC0mZ3Q7dXJlZikgJmFtcDsmYW1wOyB0LSZndDtyZXNpemluZykgewogCQlwcl9kZWJ1ZygmIzM0O1RhYmxlIGRlc3Ryb3kgYWZ0ZXIgcmVzaXplIGJ5IGFkZDogJXBcbiYjMzQ7LCB0KTsKIAkJbXR5cGVfYWhhc2hfZGVzdHJveShzZXQsIHQsIGZhbHNlKTsKIAl9CkBAIC0xMDg5LDExICYjNDM7MTE1NSwxMSBAQCBtdHlwZV9kZWwoc3RydWN0IGlwX3NldCAqc2V0LCB2b2lkICp2YWx1ZSwgY29uc3Qgc3RydWN0IGlwX3NldF9leHQgKmV4dCwKICNpZmRlZiBJUF9TRVRfSEFTSF9XSVRIX05FVFMKIAkJZm9yIChqID0gMDsgaiAmbHQ7IElQU0VUX05FVF9DT1VOVDsgaiYjNDM7JiM0MzspCiAJCQltdHlwZV9kZWxfY2lkcihzZXQsIGgsCi0JCQkJICAgICAgIE5DSURSX1BVVChEQ0lEUl9HRVQoZC0mZ3Q7Y2lkciwgaikpLCBqKTsKJiM0MzsJCQkJRENJRFJfR0VUKGQtJmd0O2NpZHIsIGopLCBqKTsKICNlbmRpZgogCQlpcF9zZXRfZXh0X2Rlc3Ryb3koc2V0LCBkYXRhKTsKIAotCQlpZiAoYXRvbWljX3JlYWQoJmFtcDt0LSZndDtyZWYpICZhbXA7JmFtcDsgZXh0LSZndDt0YXJnZXQpIHsKJiM0MzsJCWlmICh0LSZndDtyZXNpemluZyAmYW1wOyZhbXA7IGV4dCAmYW1wOyZhbXA7IGV4dC0mZ3Q7dGFyZ2V0KSB7CiAJCQkvKiBSZXNpemUgaXMgaW4gcHJvY2VzcyBhbmQga2VybmVsIHNpZGUgZGVsLAogCQkJICogc2F2ZSB2YWx1ZXMKIAkJCSAqLwpAQCAtMTE0MSwxMCAmIzQzOzEyMDcsMTAgQEAgbXR5cGVfZGVsKHN0cnVjdCBpcF9zZXQgKnNldCwgdm9pZCAqdmFsdWUsIGNvbnN0IHN0cnVjdCBpcF9zZXRfZXh0ICpleHQsCiAJc3Bpbl91bmxvY2tfYmgoJmFtcDt0LSZndDtocmVnaW9uW3JdLmxvY2spOwogCWlmICh4KSB7CiAJCXNwaW5fbG9ja19iaCgmYW1wO3NldC0mZ3Q7bG9jayk7Ci0JCWxpc3RfYWRkKCZhbXA7eC0mZ3Q7bGlzdCwgJmFtcDtoLSZndDthZCk7CiYjNDM7CQlsaXN0X2FkZCgmYW1wO3gtJmd0O2xpc3QsICZhbXA7dC0mZ3Q7YWQpOwogCQlzcGluX3VubG9ja19iaCgmYW1wO3NldC0mZ3Q7bG9jayk7CiAJfQotCWlmIChhdG9taWNfZGVjX2FuZF90ZXN0KCZhbXA7dC0mZ3Q7dXJlZikgJmFtcDsmYW1wOyBhdG9taWNfcmVhZCgmYW1wO3QtJmd0O3JlZikpIHsKJiM0MzsJaWYgKGF0b21pY19kZWNfYW5kX3Rlc3QoJmFtcDt0LSZndDt1cmVmKSAmYW1wOyZhbXA7IHQtJmd0O3Jlc2l6aW5nKSB7CiAJCXByX2RlYnVnKCYjMzQ7VGFibGUgZGVzdHJveSBhZnRlciByZXNpemUgYnkgZGVsOiAlcFxuJiMzNDssIHQpOwogCQltdHlwZV9haGFzaF9kZXN0cm95KHNldCwgdCwgZmFsc2UpOwogCX0KQEAgLTExNzIsMjggJiM0MzsxMjM4LDM3IEBAIG10eXBlX3Rlc3RfY2lkcnMoc3RydWN0IGlwX3NldCAqc2V0LCBzdHJ1Y3QgbXR5cGVfZWxlbSAqZCwKIHsKIAlzdHJ1Y3QgaHR5cGUgKmggPSBzZXQtJmd0O2RhdGE7CiAJc3RydWN0IGh0YWJsZSAqdCA9IHJjdV9kZXJlZmVyZW5jZV9iaChoLSZndDt0YWJsZSk7CiYjNDM7CXN0cnVjdCBuZXRfcHJlZml4ZXMgKm5ldHMwOwogCXN0cnVjdCBoYnVja2V0ICpuOwogCXN0cnVjdCBtdHlwZV9lbGVtICpkYXRhOwogI2lmIElQU0VUX05FVF9DT1VOVCA9PSAyCiYjNDM7CXN0cnVjdCBuZXRfcHJlZml4ZXMgKm5ldHMxOwogCXN0cnVjdCBtdHlwZV9lbGVtIG9yaWcgPSAqZDsKLQlpbnQgcmV0LCBpLCBqID0gMCwgazsKJiM0MzsJaW50IHJldCwgaSwgaiwgazsKICNlbHNlCi0JaW50IHJldCwgaSwgaiA9IDA7CiYjNDM7CWludCByZXQsIGksIGo7CiAjZW5kaWYKIAl1MzIga2V5LCBtdWx0aSA9IDA7CiAJdTggcG9zOwogCiAJcHJfZGVidWcoJiMzNDt0ZXN0IGJ5IG5ldHNcbiYjMzQ7KTsKLQlmb3IgKDsgaiAmbHQ7IE5MRU4gJmFtcDsmYW1wOyBoLSZndDtuZXRzW2pdLmNpZHJbMF0gJmFtcDsmYW1wOyAhbXVsdGk7IGomIzQzOyYjNDM7KSB7CiYjNDM7CXJjdV9yZWFkX2xvY2tfYmgoKTsKJiM0MzsJbmV0czAgPSByY3VfZGVyZWZlcmVuY2VfYmgoaC0mZ3Q7cm5ldHNbMF0pOwomIzQzOyNpZiBJUFNFVF9ORVRfQ09VTlQgPT0gMgomIzQzOwluZXRzMSA9IHJjdV9kZXJlZmVyZW5jZV9iaChoLSZndDtybmV0c1sxXSk7CiYjNDM7I2VuZGlmCiYjNDM7CWZvciAoaiA9IDA7IGogJmx0OyBuZXRzMC0mZ3Q7bGVuICZhbXA7JmFtcDsgIW11bHRpOyBqJiM0MzsmIzQzOykgewomIzQzOwkJaWYgKCFuZXRzMC0mZ3Q7bmV0c1tqXS5jb3VudCkKJiM0MzsJCQljb250aW51ZTsKICNpZiBJUFNFVF9ORVRfQ09VTlQgPT0gMgogCQltdHlwZV9kYXRhX3Jlc2V0X2VsZW0oZCwgJmFtcDtvcmlnKTsKLQkJbXR5cGVfZGF0YV9uZXRtYXNrKGQsIE5DSURSX0dFVChoLSZndDtuZXRzW2pdLmNpZHJbMF0pLCBmYWxzZSk7Ci0JCWZvciAoayA9IDA7IGsgJmx0OyBOTEVOICZhbXA7JmFtcDsgaC0mZ3Q7bmV0c1trXS5jaWRyWzFdICZhbXA7JmFtcDsgIW11bHRpOwotCQkgICAgIGsmIzQzOyYjNDM7KSB7Ci0JCQltdHlwZV9kYXRhX25ldG1hc2soZCwgTkNJRFJfR0VUKGgtJmd0O25ldHNba10uY2lkclsxXSksCi0JCQkJCSAgIHRydWUpOwomIzQzOwkJbXR5cGVfZGF0YV9uZXRtYXNrKGQsIG5ldHMwLSZndDtuZXRzW2pdLmNpZHIsIGZhbHNlKTsKJiM0MzsJCWZvciAoayA9IDA7IGsgJmx0OyBuZXRzMS0mZ3Q7bGVuICZhbXA7JmFtcDsgIW11bHRpOyBrJiM0MzsmIzQzOykgewomIzQzOwkJCWlmICghbmV0czEtJmd0O25ldHNba10uY291bnQpCiYjNDM7CQkJCWNvbnRpbnVlOwomIzQzOwkJCW10eXBlX2RhdGFfbmV0bWFzayhkLCBuZXRzMS0mZ3Q7bmV0c1trXS5jaWRyLCB0cnVlKTsKICNlbHNlCi0JCW10eXBlX2RhdGFfbmV0bWFzayhkLCBOQ0lEUl9HRVQoaC0mZ3Q7bmV0c1tqXS5jaWRyWzBdKSk7CiYjNDM7CQltdHlwZV9kYXRhX25ldG1hc2soZCwgbmV0czAtJmd0O25ldHNbal0uY2lkcik7CiAjZW5kaWYKIAkJa2V5ID0gSEtFWShkLCBoLSZndDtpbml0dmFsLCB0LSZndDtodGFibGVfYml0cyk7CiAJCW4gPSByY3VfZGVyZWZlcmVuY2VfYmgoaGJ1Y2tldCh0LCBrZXkpKTsKQEAgLTEyMDgsNyAmIzQzOzEyODMsNyBAQCBtdHlwZV90ZXN0X2NpZHJzKHN0cnVjdCBpcF9zZXQgKnNldCwgc3RydWN0IG10eXBlX2VsZW0gKmQsCiAJCQkJY29udGludWU7CiAJCQlyZXQgPSBtdHlwZV9kYXRhX21hdGNoKGRhdGEsIGV4dCwgbWV4dCwgc2V0LCBmbGFncyk7CiAJCQlpZiAocmV0ICE9IDApCi0JCQkJcmV0dXJuIHJldDsKJiM0MzsJCQkJZ290byB1bmxvY2s7CiAjaWZkZWYgSVBfU0VUX0hBU0hfV0lUSF9NVUxUSQogCQkJLyogTm8gbWF0Y2gsIHJlc2V0IG11bHRpcGxlIG1hdGNoIGZsYWcgKi8KIAkJCW11bHRpID0gMDsKQEAgLTEyMTgsNyAmIzQzOzEyOTMsMTAgQEAgbXR5cGVfdGVzdF9jaWRycyhzdHJ1Y3QgaXBfc2V0ICpzZXQsIHN0cnVjdCBtdHlwZV9lbGVtICpkLAogCQl9CiAjZW5kaWYKIAl9Ci0JcmV0dXJuIDA7CiYjNDM7CXJldCA9IDA7CiYjNDM7dW5sb2NrOgomIzQzOwlyY3VfcmVhZF91bmxvY2tfYmgoKTsKJiM0MzsJcmV0dXJuIHJldDsKIH0KICNlbmRpZgogCkBAIC0xMzUzLDcgJiM0MzsxNDMxLDcgQEAgbXR5cGVfdXJlZihzdHJ1Y3QgaXBfc2V0ICpzZXQsIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYiwgYm9vbCBzdGFydCkKIAkJcmN1X3JlYWRfdW5sb2NrX2JoKCk7CiAJfSBlbHNlIGlmIChjYi0mZ3Q7YXJnc1tJUFNFVF9DQl9QUklWQVRFXSkgewogCQl0ID0gKHN0cnVjdCBodGFibGUgKiljYi0mZ3Q7YXJnc1tJUFNFVF9DQl9QUklWQVRFXTsKLQkJaWYgKGF0b21pY19kZWNfYW5kX3Rlc3QoJmFtcDt0LSZndDt1cmVmKSAmYW1wOyZhbXA7IGF0b21pY19yZWFkKCZhbXA7dC0mZ3Q7cmVmKSkgewomIzQzOwkJaWYgKGF0b21pY19kZWNfYW5kX3Rlc3QoJmFtcDt0LSZndDt1cmVmKSAmYW1wOyZhbXA7IHQtJmd0O3Jlc2l6aW5nKSB7CiAJCQlwcl9kZWJ1ZygmIzM0O1RhYmxlIGRlc3Ryb3kgYWZ0ZXIgcmVzaXplICYjMzQ7CiAJCQkJICYjMzQ7IGJ5IGR1bXA6ICVwXG4mIzM0OywgdCk7CiAJCQltdHlwZV9haGFzaF9kZXN0cm95KHNldCwgdCwgZmFsc2UpOwpAQCAtMTQ4Myw2ICYjNDM7MTU2MSw5IEBAIElQU0VUX1RPS0VOKEhUWVBFLCBfY3JlYXRlKShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBpcF9zZXQgKnNldCwKIAlpbnQgcmV0IF9fYXR0cmlidXRlX18oKHVudXNlZCkpID0gMDsKIAl1OCBuZXRtYXNrID0gc2V0LSZndDtmYW1pbHkgPT0gTkZQUk9UT19JUFY0ID8gMzIgOiAxMjg7CiAJdW5pb24gbmZfaW5ldF9hZGRyIGJpdG1hc2sgPSBvbmVzbWFzazsKJiM0MzsjZW5kaWYKJiM0MzsjaWZkZWYgSVBfU0VUX0hBU0hfV0lUSF9ORVRTCiYjNDM7CXN0cnVjdCBuZXRfcHJlZml4ZXMgKm5ldHM7CiAjZW5kaWYKIAlzaXplX3QgaHNpemU7CiAJc3RydWN0IGh0eXBlICpoOwpAQCAtMTU2Niw3ICYjNDM7MTY0NywxMyBAQCBJUFNFVF9UT0tFTihIVFlQRSwgX2NyZWF0ZSkoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgaXBfc2V0ICpzZXQsCiAJaWYgKHRiW0lQU0VUX0FUVFJfTUFYRUxFTV0pCiAJCW1heGVsZW0gPSBpcF9zZXRfZ2V0X2gzMih0YltJUFNFVF9BVFRSX01BWEVMRU1dKTsKIAotCWhzaXplID0gc2l6ZW9mKCpoKTsKJiM0MzsjaWZkZWYgSVBfU0VUX1BST1RPX1VOREVGCiYjNDM7CWhzaXplID0gc2l6ZW9mKHN0cnVjdCBodHlwZSk7CiYjNDM7I2Vsc2UKJiM0MzsJaHNpemUgPSBzZXQtJmd0O2ZhbWlseSA9PSBORlBST1RPX0lQVjYgPwomIzQzOwkJc2l6ZW9mKHN0cnVjdCBJUFNFVF9UT0tFTihIVFlQRSwgNikpIDoKJiM0MzsJCXNpemVvZihzdHJ1Y3QgSVBTRVRfVE9LRU4oSFRZUEUsIDQpKTsKJiM0MzsjZW5kaWYKIAloID0ga3phbGxvYyhoc2l6ZSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFoKQogCQlyZXR1cm4gLUVOT01FTTsKQEAgLTE1NzcsMjIgJiM0MzsxNjY0LDI3IEBAIElQU0VUX1RPS0VOKEhUWVBFLCBfY3JlYXRlKShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBpcF9zZXQgKnNldCwKIAkgKi8KIAloYml0cyA9IGZscyhoYXNoc2l6ZSAtIDEpOwogCWhzaXplID0gaHRhYmxlX3NpemUoaGJpdHMpOwotCWlmIChoc2l6ZSA9PSAwKSB7Ci0JCWtmcmVlKGgpOwotCQlyZXR1cm4gLUVOT01FTTsKLQl9CiYjNDM7CWlmIChoc2l6ZSA9PSAwKQomIzQzOwkJZ290byBmcmVlX2g7CiAJdCA9IGlwX3NldF9hbGxvYyhoc2l6ZSk7Ci0JaWYgKCF0KSB7Ci0JCWtmcmVlKGgpOwotCQlyZXR1cm4gLUVOT01FTTsKLQl9CiYjNDM7CWlmICghdCkKJiM0MzsJCWdvdG8gZnJlZV9oOwogCXQtJmd0O2hyZWdpb24gPSBpcF9zZXRfYWxsb2MoYWhhc2hfc2l6ZW9mX3JlZ2lvbnMoaGJpdHMpKTsKLQlpZiAoIXQtJmd0O2hyZWdpb24pIHsKLQkJaXBfc2V0X2ZyZWUodCk7Ci0JCWtmcmVlKGgpOwotCQlyZXR1cm4gLUVOT01FTTsKJiM0MzsJaWYgKCF0LSZndDtocmVnaW9uKQomIzQzOwkJZ290byBmcmVlX3Q7CiYjNDM7I2lmZGVmIElQX1NFVF9IQVNIX1dJVEhfTkVUUwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgSVBTRVRfTkVUX0NPVU5UOyBpJiM0MzsmIzQzOykgewomIzQzOwkJbmV0cyA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBuZXRfcHJlZml4ZXMpLCBHRlBfS0VSTkVMKTsKJiM0MzsJCWlmICghbmV0cykgewomIzQzOwkJCWlmIChpICE9IDApCiYjNDM7CQkJCWtmcmVlKGgtJmd0O3JuZXRzWzBdKTsKJiM0MzsJCQlnb3RvIGZyZWVfaHJlZ2lvbjsKJiM0MzsJCX0KJiM0MzsJCVJDVV9JTklUX1BPSU5URVIoaC0mZ3Q7cm5ldHNbaV0sIG5ldHMpOwogCX0KJiM0MzsjZW5kaWYKIAloLSZndDtnYy5zZXQgPSBzZXQ7CiYjNDM7CXNwaW5fbG9ja19pbml0KCZhbXA7aC0mZ3Q7Z2MubG9jayk7CiAJZm9yIChpID0gMDsgaSAmbHQ7IGFoYXNoX251bW9mX2xvY2tzKGhiaXRzKTsgaSYjNDM7JiM0MzspCiAJCXNwaW5fbG9ja19pbml0KCZhbXA7dC0mZ3Q7aHJlZ2lvbltpXS5sb2NrKTsKIAloLSZndDttYXhlbGVtID0gbWF4ZWxlbTsKQEAgLTE2MTksOSAmIzQzOzE3MTEsOCBAQCBJUFNFVF9UT0tFTihIVFlQRSwgX2NyZWF0ZSkoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgaXBfc2V0ICpzZXQsCiAJfQogCXQtJmd0O2h0YWJsZV9iaXRzID0gaGJpdHM7CiAJdC0mZ3Q7bWF4ZWxlbSA9IGgtJmd0O21heGVsZW0gLyBhaGFzaF9udW1vZl9sb2NrcyhoYml0cyk7CiYjNDM7CUlOSVRfTElTVF9IRUFEKCZhbXA7dC0mZ3Q7YWQpOwogCVJDVV9JTklUX1BPSU5URVIoaC0mZ3Q7dGFibGUsIHQpOwotCi0JSU5JVF9MSVNUX0hFQUQoJmFtcDtoLSZndDthZCk7CiAJc2V0LSZndDtkYXRhID0gaDsKICNpZm5kZWYgSVBfU0VUX1BST1RPX1VOREVGCiAJaWYgKHNldC0mZ3Q7ZmFtaWx5ID09IE5GUFJPVE9fSVBWNCkgewpAQCAtMTY1NSw2ICYjNDM7MTc0NiwxNiBAQCBJUFNFVF9UT0tFTihIVFlQRSwgX2NyZWF0ZSkoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgaXBfc2V0ICpzZXQsCiAJCSB0LSZndDtodGFibGVfYml0cywgaC0mZ3Q7bWF4ZWxlbSwgc2V0LSZndDtkYXRhLCB0KTsKIAogCXJldHVybiAwOwomIzQzOwomIzQzOyNpZmRlZiBJUF9TRVRfSEFTSF9XSVRIX05FVFMKJiM0MztmcmVlX2hyZWdpb246CiYjNDM7CWlwX3NldF9mcmVlKHQtJmd0O2hyZWdpb24pOwomIzQzOyNlbmRpZgomIzQzO2ZyZWVfdDoKJiM0MzsJaXBfc2V0X2ZyZWUodCk7CiYjNDM7ZnJlZV9oOgomIzQzOwlrZnJlZShoKTsKJiM0MzsJcmV0dXJuIC1FTk9NRU07CiB9CiAjZW5kaWYgLyogSVBfU0VUX0VNSVRfQ1JFQVRFICovCiAKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0bmV0LmMgYi9uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwcG9ydG5ldC5jCmluZGV4IDJkNjY1MmQ0MzE5OWE0Li4xOTU4NTNhMjViMDYwNiAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcHBvcnRuZXQuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwcG9ydG5ldC5jCkBAIC0xMzgsNyAmIzQzOzEzOCw3IEBAIGhhc2hfaXBwb3J0bmV0NF9rYWR0KHN0cnVjdCBpcF9zZXQgKnNldCwgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAljb25zdCBzdHJ1Y3QgaGFzaF9pcHBvcnRuZXQ0ICpoID0gc2V0LSZndDtkYXRhOwogCWlwc2V0X2FkdGZuIGFkdGZuID0gc2V0LSZndDt2YXJpYW50LSZndDthZHRbYWR0XTsKIAlzdHJ1Y3QgaGFzaF9pcHBvcnRuZXQ0X2VsZW0gZSA9IHsKLQkJLmNpZHIgPSBJTklUX0NJRFIoaC0mZ3Q7bmV0c1swXS5jaWRyWzBdLCBIT1NUX01BU0spLAomIzQzOwkJLmNpZHIgPSBJTklUX0NJRFIoaC0mZ3Q7cm5ldHNbMF0sIEhPU1RfTUFTSyksCiAJfTsKIAlzdHJ1Y3QgaXBfc2V0X2V4dCBleHQgPSBJUF9TRVRfSU5JVF9LRVhUKHNrYiwgb3B0LCBzZXQpOwogCkBAIC0zOTgsNyAmIzQzOzM5OCw3IEBAIGhhc2hfaXBwb3J0bmV0Nl9rYWR0KHN0cnVjdCBpcF9zZXQgKnNldCwgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAljb25zdCBzdHJ1Y3QgaGFzaF9pcHBvcnRuZXQ2ICpoID0gc2V0LSZndDtkYXRhOwogCWlwc2V0X2FkdGZuIGFkdGZuID0gc2V0LSZndDt2YXJpYW50LSZndDthZHRbYWR0XTsKIAlzdHJ1Y3QgaGFzaF9pcHBvcnRuZXQ2X2VsZW0gZSA9IHsKLQkJLmNpZHIgPSBJTklUX0NJRFIoaC0mZ3Q7bmV0c1swXS5jaWRyWzBdLCBIT1NUX01BU0spLAomIzQzOwkJLmNpZHIgPSBJTklUX0NJRFIoaC0mZ3Q7cm5ldHNbMF0sIEhPU1RfTUFTSyksCiAJfTsKIAlzdHJ1Y3QgaXBfc2V0X2V4dCBleHQgPSBJUF9TRVRfSU5JVF9LRVhUKHNrYiwgb3B0LCBzZXQpOwogCmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldC5jIGIvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXQuYwppbmRleCBjZTBhOWNlNWE5MWYxYS4uMDkyZjNjOTI4MWI4MGYgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0LmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXQuYwpAQCAtMTE3LDcgJiM0MzsxMTcsNyBAQCBoYXNoX25ldDRfa2FkdChzdHJ1Y3QgaXBfc2V0ICpzZXQsIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsCiAJY29uc3Qgc3RydWN0IGhhc2hfbmV0NCAqaCA9IHNldC0mZ3Q7ZGF0YTsKIAlpcHNldF9hZHRmbiBhZHRmbiA9IHNldC0mZ3Q7dmFyaWFudC0mZ3Q7YWR0W2FkdF07CiAJc3RydWN0IGhhc2hfbmV0NF9lbGVtIGUgPSB7Ci0JCS5jaWRyID0gSU5JVF9DSURSKGgtJmd0O25ldHNbMF0uY2lkclswXSwgSE9TVF9NQVNLKSwKJiM0MzsJCS5jaWRyID0gSU5JVF9DSURSKGgtJmd0O3JuZXRzWzBdLCBIT1NUX01BU0spLAogCX07CiAJc3RydWN0IGlwX3NldF9leHQgZXh0ID0gSVBfU0VUX0lOSVRfS0VYVChza2IsIG9wdCwgc2V0KTsKIApAQCAtMjkxLDcgJiM0MzsyOTEsNyBAQCBoYXNoX25ldDZfa2FkdChzdHJ1Y3QgaXBfc2V0ICpzZXQsIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsCiAJY29uc3Qgc3RydWN0IGhhc2hfbmV0NiAqaCA9IHNldC0mZ3Q7ZGF0YTsKIAlpcHNldF9hZHRmbiBhZHRmbiA9IHNldC0mZ3Q7dmFyaWFudC0mZ3Q7YWR0W2FkdF07CiAJc3RydWN0IGhhc2hfbmV0Nl9lbGVtIGUgPSB7Ci0JCS5jaWRyID0gSU5JVF9DSURSKGgtJmd0O25ldHNbMF0uY2lkclswXSwgSE9TVF9NQVNLKSwKJiM0MzsJCS5jaWRyID0gSU5JVF9DSURSKGgtJmd0O3JuZXRzWzBdLCBIT1NUX01BU0spLAogCX07CiAJc3RydWN0IGlwX3NldF9leHQgZXh0ID0gSVBfU0VUX0lOSVRfS0VYVChza2IsIG9wdCwgc2V0KTsKIApkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRpZmFjZS5jIGIvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRpZmFjZS5jCmluZGV4IDMwYTY1NWU1YzRmZGNkLi5iNDRiOTVmNzY2YjdhZCAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRpZmFjZS5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0aWZhY2UuYwpAQCAtMTYxLDcgJiM0MzsxNjEsNyBAQCBoYXNoX25ldGlmYWNlNF9rYWR0KHN0cnVjdCBpcF9zZXQgKnNldCwgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAlzdHJ1Y3QgaGFzaF9uZXRpZmFjZTQgKmggPSBzZXQtJmd0O2RhdGE7CiAJaXBzZXRfYWR0Zm4gYWR0Zm4gPSBzZXQtJmd0O3ZhcmlhbnQtJmd0O2FkdFthZHRdOwogCXN0cnVjdCBoYXNoX25ldGlmYWNlNF9lbGVtIGUgPSB7Ci0JCS5jaWRyID0gSU5JVF9DSURSKGgtJmd0O25ldHNbMF0uY2lkclswXSwgSE9TVF9NQVNLKSwKJiM0MzsJCS5jaWRyID0gSU5JVF9DSURSKGgtJmd0O3JuZXRzWzBdLCBIT1NUX01BU0spLAogCQkuZWxlbSA9IDEsCiAJfTsKIAlzdHJ1Y3QgaXBfc2V0X2V4dCBleHQgPSBJUF9TRVRfSU5JVF9LRVhUKHNrYiwgb3B0LCBzZXQpOwpAQCAtMzgyLDcgJiM0MzszODIsNyBAQCBoYXNoX25ldGlmYWNlNl9rYWR0KHN0cnVjdCBpcF9zZXQgKnNldCwgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAlzdHJ1Y3QgaGFzaF9uZXRpZmFjZTYgKmggPSBzZXQtJmd0O2RhdGE7CiAJaXBzZXRfYWR0Zm4gYWR0Zm4gPSBzZXQtJmd0O3ZhcmlhbnQtJmd0O2FkdFthZHRdOwogCXN0cnVjdCBoYXNoX25ldGlmYWNlNl9lbGVtIGUgPSB7Ci0JCS5jaWRyID0gSU5JVF9DSURSKGgtJmd0O25ldHNbMF0uY2lkclswXSwgSE9TVF9NQVNLKSwKJiM0MzsJCS5jaWRyID0gSU5JVF9DSURSKGgtJmd0O3JuZXRzWzBdLCBIT1NUX01BU0spLAogCQkuZWxlbSA9IDEsCiAJfTsKIAlzdHJ1Y3QgaXBfc2V0X2V4dCBleHQgPSBJUF9TRVRfSU5JVF9LRVhUKHNrYiwgb3B0LCBzZXQpOwpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRuZXQuYyBiL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0bmV0LmMKaW5kZXggOGZiZTY0OWM5ZGQzZDQuLmY3YzhhMWNjMzBmYzdiIDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldG5ldC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0bmV0LmMKQEAgLTE0OSw4ICYjNDM7MTQ5LDEwIEBAIGhhc2hfbmV0bmV0NF9rYWR0KHN0cnVjdCBpcF9zZXQgKnNldCwgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAlzdHJ1Y3QgaGFzaF9uZXRuZXQ0X2VsZW0gZSA9IHsgfTsKIAlzdHJ1Y3QgaXBfc2V0X2V4dCBleHQgPSBJUF9TRVRfSU5JVF9LRVhUKHNrYiwgb3B0LCBzZXQpOwogCi0JZS5jaWRyWzBdID0gSU5JVF9DSURSKGgtJmd0O25ldHNbMF0uY2lkclswXSwgSE9TVF9NQVNLKTsKLQllLmNpZHJbMV0gPSBJTklUX0NJRFIoaC0mZ3Q7bmV0c1swXS5jaWRyWzFdLCBIT1NUX01BU0spOwomIzQzOwlyY3VfcmVhZF9sb2NrX2JoKCk7CiYjNDM7CWUuY2lkclswXSA9IElOSVRfQ0lEUihoLSZndDtybmV0c1swXSwgSE9TVF9NQVNLKTsKJiM0MzsJZS5jaWRyWzFdID0gSU5JVF9DSURSKGgtJmd0O3JuZXRzWzFdLCBIT1NUX01BU0spOwomIzQzOwlyY3VfcmVhZF91bmxvY2tfYmgoKTsKIAlpZiAoYWR0ID09IElQU0VUX1RFU1QpCiAJCWUuY2NtcCA9IChIT1NUX01BU0sgJmx0OyZsdDsgKHNpemVvZihlLmNpZHJbMF0pICogOCkpIHwgSE9TVF9NQVNLOwogCkBAIC0zODgsOCAmIzQzOzM5MCwxMCBAQCBoYXNoX25ldG5ldDZfa2FkdChzdHJ1Y3QgaXBfc2V0ICpzZXQsIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsCiAJc3RydWN0IGhhc2hfbmV0bmV0Nl9lbGVtIGUgPSB7IH07CiAJc3RydWN0IGlwX3NldF9leHQgZXh0ID0gSVBfU0VUX0lOSVRfS0VYVChza2IsIG9wdCwgc2V0KTsKIAotCWUuY2lkclswXSA9IElOSVRfQ0lEUihoLSZndDtuZXRzWzBdLmNpZHJbMF0sIEhPU1RfTUFTSyk7Ci0JZS5jaWRyWzFdID0gSU5JVF9DSURSKGgtJmd0O25ldHNbMF0uY2lkclsxXSwgSE9TVF9NQVNLKTsKJiM0MzsJcmN1X3JlYWRfbG9ja19iaCgpOwomIzQzOwllLmNpZHJbMF0gPSBJTklUX0NJRFIoaC0mZ3Q7cm5ldHNbMF0sIEhPU1RfTUFTSyk7CiYjNDM7CWUuY2lkclsxXSA9IElOSVRfQ0lEUihoLSZndDtybmV0c1sxXSwgSE9TVF9NQVNLKTsKJiM0MzsJcmN1X3JlYWRfdW5sb2NrX2JoKCk7CiAJaWYgKGFkdCA9PSBJUFNFVF9URVNUKQogCQllLmNjbXAgPSAoSE9TVF9NQVNLICZsdDsmbHQ7IChzaXplb2YodTgpICogOCkpIHwgSE9TVF9NQVNLOwogCmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldHBvcnQuYyBiL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0cG9ydC5jCmluZGV4IGQxYTA2MjhkZjRlZjNhLi41ZGU0YjUxMWRlNzYzNiAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRwb3J0LmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRwb3J0LmMKQEAgLTEzMyw3ICYjNDM7MTMzLDcgQEAgaGFzaF9uZXRwb3J0NF9rYWR0KHN0cnVjdCBpcF9zZXQgKnNldCwgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAljb25zdCBzdHJ1Y3QgaGFzaF9uZXRwb3J0NCAqaCA9IHNldC0mZ3Q7ZGF0YTsKIAlpcHNldF9hZHRmbiBhZHRmbiA9IHNldC0mZ3Q7dmFyaWFudC0mZ3Q7YWR0W2FkdF07CiAJc3RydWN0IGhhc2hfbmV0cG9ydDRfZWxlbSBlID0gewotCQkuY2lkciA9IElOSVRfQ0lEUihoLSZndDtuZXRzWzBdLmNpZHJbMF0sIEhPU1RfTUFTSyksCiYjNDM7CQkuY2lkciA9IElOSVRfQ0lEUihoLSZndDtybmV0c1swXSwgSE9TVF9NQVNLKSwKIAl9OwogCXN0cnVjdCBpcF9zZXRfZXh0IGV4dCA9IElQX1NFVF9JTklUX0tFWFQoc2tiLCBvcHQsIHNldCk7CiAKQEAgLTM1Myw3ICYjNDM7MzUzLDcgQEAgaGFzaF9uZXRwb3J0Nl9rYWR0KHN0cnVjdCBpcF9zZXQgKnNldCwgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAljb25zdCBzdHJ1Y3QgaGFzaF9uZXRwb3J0NiAqaCA9IHNldC0mZ3Q7ZGF0YTsKIAlpcHNldF9hZHRmbiBhZHRmbiA9IHNldC0mZ3Q7dmFyaWFudC0mZ3Q7YWR0W2FkdF07CiAJc3RydWN0IGhhc2hfbmV0cG9ydDZfZWxlbSBlID0gewotCQkuY2lkciA9IElOSVRfQ0lEUihoLSZndDtuZXRzWzBdLmNpZHJbMF0sIEhPU1RfTUFTSyksCiYjNDM7CQkuY2lkciA9IElOSVRfQ0lEUihoLSZndDtybmV0c1swXSwgSE9TVF9NQVNLKSwKIAl9OwogCXN0cnVjdCBpcF9zZXRfZXh0IGV4dCA9IElQX1NFVF9JTklUX0tFWFQoc2tiLCBvcHQsIHNldCk7CiAKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0cG9ydG5ldC5jIGIvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRwb3J0bmV0LmMKaW5kZXggYmY0ZjkxYjc4ZTFkY2IuLjYyOTE1MzJiZTdhNWEyIDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldHBvcnRuZXQuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldHBvcnRuZXQuYwpAQCAtMTU3LDggJiM0MzsxNTcsMTAgQEAgaGFzaF9uZXRwb3J0bmV0NF9rYWR0KHN0cnVjdCBpcF9zZXQgKnNldCwgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAlzdHJ1Y3QgaGFzaF9uZXRwb3J0bmV0NF9lbGVtIGUgPSB7IH07CiAJc3RydWN0IGlwX3NldF9leHQgZXh0ID0gSVBfU0VUX0lOSVRfS0VYVChza2IsIG9wdCwgc2V0KTsKIAotCWUuY2lkclswXSA9IElOSVRfQ0lEUihoLSZndDtuZXRzWzBdLmNpZHJbMF0sIEhPU1RfTUFTSyk7Ci0JZS5jaWRyWzFdID0gSU5JVF9DSURSKGgtJmd0O25ldHNbMF0uY2lkclsxXSwgSE9TVF9NQVNLKTsKJiM0MzsJcmN1X3JlYWRfbG9ja19iaCgpOwomIzQzOwllLmNpZHJbMF0gPSBJTklUX0NJRFIoaC0mZ3Q7cm5ldHNbMF0sIEhPU1RfTUFTSyk7CiYjNDM7CWUuY2lkclsxXSA9IElOSVRfQ0lEUihoLSZndDtybmV0c1sxXSwgSE9TVF9NQVNLKTsKJiM0MzsJcmN1X3JlYWRfdW5sb2NrX2JoKCk7CiAJaWYgKGFkdCA9PSBJUFNFVF9URVNUKQogCQllLmNjbXAgPSAoSE9TVF9NQVNLICZsdDsmbHQ7IChzaXplb2YoZS5jaWRyWzBdKSAqIDgpKSB8IEhPU1RfTUFTSzsKIApAQCAtNDUyLDggJiM0Mzs0NTQsMTAgQEAgaGFzaF9uZXRwb3J0bmV0Nl9rYWR0KHN0cnVjdCBpcF9zZXQgKnNldCwgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAlzdHJ1Y3QgaGFzaF9uZXRwb3J0bmV0Nl9lbGVtIGUgPSB7IH07CiAJc3RydWN0IGlwX3NldF9leHQgZXh0ID0gSVBfU0VUX0lOSVRfS0VYVChza2IsIG9wdCwgc2V0KTsKIAotCWUuY2lkclswXSA9IElOSVRfQ0lEUihoLSZndDtuZXRzWzBdLmNpZHJbMF0sIEhPU1RfTUFTSyk7Ci0JZS5jaWRyWzFdID0gSU5JVF9DSURSKGgtJmd0O25ldHNbMF0uY2lkclsxXSwgSE9TVF9NQVNLKTsKJiM0MzsJcmN1X3JlYWRfbG9ja19iaCgpOwomIzQzOwllLmNpZHJbMF0gPSBJTklUX0NJRFIoaC0mZ3Q7cm5ldHNbMF0sIEhPU1RfTUFTSyk7CiYjNDM7CWUuY2lkclsxXSA9IElOSVRfQ0lEUihoLSZndDtybmV0c1sxXSwgSE9TVF9NQVNLKTsKJiM0MzsJcmN1X3JlYWRfdW5sb2NrX2JoKCk7CiAJaWYgKGFkdCA9PSBJUFNFVF9URVNUKQogCQllLmNjbXAgPSAoSE9TVF9NQVNLICZsdDsmbHQ7IChzaXplb2YodTgpICogOCkpIHwgSE9TVF9NQVNLOwogCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDE3OjAxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzNjAzCgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMjU3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFzc2Vzc2luZyB0aGUgSW1wYWN0IG9mIHRoZSBJUHNldCBQYXRjaCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgdGhhdCB0aGlzIHBhdGNoICpkZWZpbml0ZWx5KiB3YXJyYW50cyBhIGZ1enppbmcgcmV2aWV3LiBXZSYjMzk7cmUgdGFsa2luZyBhYm91dCBtb2RpZmljYXRpb25zIHRvIGBuZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oYCBhbmQgdGhlIHN1cnJvdW5kaW5nIGBpcHNldGAgY29kZSB3aXRoaW4gbmV0ZmlsdGVyLCBhbmQgdGhhdCYjMzk7cyBhIGtleSBhcmVhIHRvIHNjcnV0aW5pemUuIFNwZWNpZmljYWxseSwgdGhpcyBwYXRjaCBzZWVtcyB0byBiZSBmdW5kYW1lbnRhbGx5IGFsdGVyaW5nIGhvdyBDSURSIG5ldHdvcmtzIGFyZSBoYW5kbGVkIHdpdGhpbiB0aGUgaGFzaCB0eXBlcy4gVGhlIHNoaWZ0IGZyb20gYSBzdGF0aWNhbGx5IGFsbG9jYXRlZCBhcnJheSwgYG5ldHNbTkxFTl1gLCB0byBhIGR5bmFtaWNhbGx5IGFsbG9jYXRlZCwgUkNVLXByb3RlY3RlZCBhcnJheSwgYHJuZXRzW0lQU0VUX05FVF9DT1VOVF1gLCAqdGhhdCogc2NyZWFtcyBmdW5jdGlvbmFsIGNoYW5nZSB0byBtZS4gQW5kIHRoZW4gdGhlcmUmIzM5O3MgdGhlIGFkZGl0aW9uIG9mIHRoZSBgcmVzaXppbmdgIGZsYWcgYW5kIHRoZSBsb2NrIHN1cnJvdW5kaW5nIHRoZSByZXNpemluZyBsb2dpYyB0byBwcmV2ZW50IEdDLCB3aGljaCBpbmRpY2F0ZXMgc2lnbmlmaWNhbnQgYXJjaGl0ZWN0dXJhbCBjaGFuZ2VzLiBJdCYjMzk7cyBhZmZlY3RpbmcgdGhlIGNvcmUgbG9naWMgb2YgYGlwc2V0YCBoYXNoIHR5cGVzLCBhbmQgdGhhdOKAmXMgcHJlY2lzZWx5IHRoZSBraW5kIG9mIHRoaW5nIHRoYXQgbmVlZHMgYSB0aG9yb3VnaCBmdXp6aW5nIGNhbXBhaWduLgoKTm93LCBsZXQmIzM5O3MgZmlndXJlIG91dCB0aGUgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMuIE9mIGNvdXJzZSwgYENPTkZJR19JUF9TRVRgIGlzIHRoZSBvYnZpb3VzIHN0YXJ0aW5nIHBvaW50LiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoaXMgaXMgZW5hYmxlZC4gVGhlbiB3ZSBoYXZlIHRvIGNvbnNpZGVyIHRoZSBzcGVjaWZpYyBoYXNoIHR5cGVzIHRoaXMgcGF0Y2ggaW1wYWN0cy4gV2UmIzM5O3JlIGxvb2tpbmcgYXQgYENPTkZJR19JUF9TRVRfSEFTSF9JUFBPUlRORVRgLCBgQ09ORklHX0lQX1NFVF9IQVNIX05FVGAsIGBDT05GSUdfSVBfU0VUX0hBU0hfTkVUSUZBQ0VgLCBgQ09ORklHX0lQX1NFVF9IQVNIX05FVE5FVGAsIGBDT05GSUdfSVBfU0VUX0hBU0hfTkVUUE9SVGAsIGFuZCBgQ09ORklHX0lQX1NFVF9IQVNIX05FVFBPUlRORVRgLiBJIG5lZWQgdG8gdmVyaWZ5IHRoZXNlIGNvbmZpZ3VyYXRpb25zIGFyZSBlbmFibGVkIG9yIGF0IGxlYXN0IGNvbnNpZGVyIHRoZSBzY2VuYXJpb3MgdGhhdCB3b3VsZCByZXN1bHQgaWYgdGhleSBhcmUgbm90LiBUaGF0IHdpbGwgZ3VpZGUgdGhlIGNvbmZpZ3VyYXRpb24gb2YgdGhlIGZ1enppbmcgZW52aXJvbm1lbnQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMTc6MDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIElQX1NFVF9IQVNIXyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWc9NDY9Y29uZmlnIElQX1NFVF9CSVRNQVBfUE9SVFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy01NC1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZzo1NTpjb25maWcgSVBfU0VUX0hBU0hfSVBcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy01Ni1cdHRyaXN0YXRlIFwmIzM0O2hhc2g6aXAgc2V0IHN1cHBvcnRcJiMzNDtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctNjQtXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWc6NjU6Y29uZmlnIElQX1NFVF9IQVNIX0lQTUFSS1xubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnLTY2LVx0dHJpc3RhdGUgXCYjMzQ7aGFzaDppcCxtYXJrIHNldCBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnLTczLVxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnOjc0OmNvbmZpZyBJUF9TRVRfSEFTSF9JUFBPUlRcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy03NS1cdHRyaXN0YXRlIFwmIzM0O2hhc2g6aXAscG9ydCBzZXQgc3VwcG9ydFwmIzM0O1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy04Mi1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZzo4Mzpjb25maWcgSVBfU0VUX0hBU0hfSVBQT1JUSVBcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy04NC1cdHRyaXN0YXRlIFwmIzM0O2hhc2g6aXAscG9ydCxpcCBzZXQgc3VwcG9ydFwmIzM0O1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy05Mi1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZzo5Mzpjb25maWcgSVBfU0VUX0hBU0hfSVBQT1JUTkVUXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctOTQtXHR0cmlzdGF0ZSBcJiMzNDtoYXNoOmlwLHBvcnQsbmV0IHNldCBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnLTEwMi1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZzoxMDM6Y29uZmlnIElQX1NFVF9IQVNIX0lQTUFDXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctMTA0LVx0dHJpc3RhdGUgXCYjMzQ7aGFzaDppcCxtYWMgc2V0IHN1cHBvcnRcJiMzNDtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctMTExLVxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnOjExMjpjb25maWcgSVBfU0VUX0hBU0hfTUFDXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctMTEzLVx0dHJpc3RhdGUgXCYjMzQ7aGFzaDptYWMgc2V0IHN1cHBvcnRcJiMzNDtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctMTIwLVxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnOjEyMTpjb25maWcgSVBfU0VUX0hBU0hfTkVUUE9SVE5FVFxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnLTEyMi1cdHRyaXN0YXRlIFwmIzM0O2hhc2g6bmV0LHBvcnQsbmV0IHNldCBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnLTEyOS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZzoxMzA6Y29uZmlnIElQX1NFVF9IQVNIX05FVFxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnLTEzMS1cdHRyaXN0YXRlIFwmIzM0O2hhc2g6bmV0IHNldCBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnLTEzOC1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZzoxMzk6Y29uZmlnIElQX1NFVF9IQVNIX05FVE5FVFxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnLTE0MC1cdHRyaXN0YXRlIFwmIzM0O2hhc2g6bmV0LG5ldCBzZXQgc3VwcG9ydFwmIzM0O1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy0xNDctXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWc6MTQ4OmNvbmZpZyBJUF9TRVRfSEFTSF9ORVRQT1JUXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctMTQ5LVx0dHJpc3RhdGUgXCYjMzQ7aGFzaDpuZXQscG9ydCBzZXQgc3VwcG9ydFwmIzM0O1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy0xNTctXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWc6MTU4OmNvbmZpZyBJUF9TRVRfSEFTSF9ORVRJRkFDRVxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnLTE1OS1cdHRyaXN0YXRlIFwmIzM0O2hhc2g6bmV0LGlmYWNlIHNldCBzdXBwb3J0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMTc6MDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTUxMjIKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAyMDMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBJUCBTZXQgSGFzaCBGdW5jdGlvbnMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoZXNlIGNvbmZpZ3VyYXRpb25zOiBgSVBfU0VUX0hBU0hfSVBQT1JUTkVUYCwgYElQX1NFVF9IQVNIX05FVGAsIGBJUF9TRVRfSEFTSF9ORVRJRkFDRWAsIGBJUF9TRVRfSEFTSF9ORVRORVRgLCBgSVBfU0VUX0hBU0hfTkVUUE9SVGAsIGFuZCBgSVBfU0VUX0hBU0hfTkVUUE9SVE5FVGAuIFJpZ2h0IGF3YXksIEkgd2FudCB0byBkcmlsbCBkb3duIGludG8gdGhlIGNvcmUgbG9naWMuIFRpbWUgdG8gZmlndXJlIG91dCB3aGljaCBmdW5jdGlvbnMgYXJlIGdldHRpbmcgdGhlIG1vc3QgYXR0ZW50aW9uIGluIHRoaXMgcGF0Y2guIEJhc2VkIG9uIHRoZSBjaGFuZ2VzLCBpdCBsb29rcyBsaWtlIGBtdHlwZV9hZGRfY2lkcmAsIGBtdHlwZV9kZWxfY2lkcmAsIGBtdHlwZV9mbHVzaGAsIGBtdHlwZV9haGFzaF9kZXN0cm95YCwgYG10eXBlX2Rlc3Ryb3lgLCBgbXR5cGVfZ2NfZG9gLCBgbXR5cGVfZ2NgLCBgbXR5cGVfcmVzaXplYCwgYG10eXBlX2FkZGAsIGBtdHlwZV9kZWxgLCBgbXR5cGVfdGVzdF9jaWRyc2AsIGBtdHlwZV91cmVmYCwgYW5kIGBJUFNFVF9UT0tFTihIVFlQRSwgX2NyZWF0ZSlgIGFyZSB0aGUgb25lcyB0byBmb2N1cyBvbi4gVGhlc2UgYXJlIG1hY3JvcywgYW5kIEkga25vdyBmcm9tIGV4cGVyaWVuY2UgdGhhdCBtZWFucyB0aGV5JiMzOTtyZSBsaWtlbHkgZGVmaW5lZCBpbiBgaXBfc2V0X2hhc2hfZ2VuLmhgLiBOb3cgSSYjMzk7bSBpbnRlcmVzdGVkIHRvIHNlZSBob3cgdGhlc2UgYXJlIGluc3RhbnRpYXRlZCBhbmQgdXNlZCBpbiByZWxhdGlvbiB0byB0aGUgY29uZmlndXJhdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMTc6MDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bXR5cGVfYWRkX2NpZHImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL2lwc2V0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oPTE2Mz1zdGF0aWMgY29uc3QgdW5pb24gbmZfaW5ldF9hZGRyIHplcm9tYXNrID0ge307XG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC0xOTQtI3VuZGVmIG10eXBlX2V4dF9jbGVhbnVwXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oOjE5NTojdW5kZWYgbXR5cGVfYWRkX2NpZHJcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtMTk2LSN1bmRlZiBtdHlwZV9kZWxfY2lkclxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtMjM5LSNkZWZpbmUgbXR5cGVfZXh0X2NsZWFudXBcdElQU0VUX1RPS0VOKE1UWVBFLCBfZXh0X2NsZWFudXApXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oOjI0MDojZGVmaW5lIG10eXBlX2FkZF9jaWRyXHRcdElQU0VUX1RPS0VOKE1UWVBFLCBfYWRkX2NpZHIpXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTI0MS0jZGVmaW5lIG10eXBlX2RlbF9jaWRyXHRcdElQU0VUX1RPS0VOKE1UWVBFLCBfZGVsX2NpZHIpXG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaD0zMTc9c3RhdGljIGludFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaDozMTg6bXR5cGVfYWRkX2NpZHIoc3RydWN0IGlwX3NldCAqc2V0LCBzdHJ1Y3QgaHR5cGUgKmgsIHU4IGNpZHIsIHU4IG4pXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTMxOS17XG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaD05MTQ9bXR5cGVfYWRkKHN0cnVjdCBpcF9zZXQgKnNldCwgdm9pZCAqdmFsdWUsIGNvbnN0IHN0cnVjdCBpcF9zZXRfZXh0ICpleHQsXG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC0xMDQzLVx0Zm9yIChpID0gMDsgaSBcdTAwM2MgSVBTRVRfTkVUX0NPVU5UOyBpJiM0MzsmIzQzOylcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg6MTA0NDpcdFx0bXR5cGVfYWRkX2NpZHIoc2V0LCBoLCBEQ0lEUl9HRVQoZC1cdTAwM2VjaWRyLCBpKSwgaSk7XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTEwNDUtI2VuZGlmXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMTc6MDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTYxNTkKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAzMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhbmFseXNpcyBvZiB0aGUgcHJvdmlkZWQgc25pcHBldCwgYXMgaWYgaXQgd2VyZSBteSB0aG91Z2h0IHByb2Nlc3M6CgoqKk1hY3JvIEV4cGFuc2lvbiBhbmQgVHlwZSBJZGVudGlmaWNhdGlvbioqCgpPa2F5LCBzbyB3ZSYjMzk7cmUgbG9va2luZyBhdCBjb2RlIGdlbmVyYXRpb24gdmlhIG1hY3Jvcy4gU3BlY2lmaWNhbGx5LCB3ZSYjMzk7dmUgZ290IHRoaXMgYElQU0VUX1RPS0VOKE1UWVBFLCBfYWRkX2NpZHIpYCBjYWxsLiBUaGF0IGltbWVkaWF0ZWx5IHRlbGxzIG1lIHdlJiMzOTtyZSBsaWtlbHkgZGVhbGluZyB3aXRoIHNvbWUga2luZCBvZiBJUCBzZXQgbWFuaXB1bGF0aW9uLCBnaXZlbiB0aGUgJiMzNDtfYWRkX2NpZHImIzM0OyBzdWZmaXgsIGJ1dCB0aGUgcmVhbCBrZXkgaXMgdGhlIGBNVFlQRWAgcGFyYW1ldGVyLiBUaGlzIGlzIHRoZSBjcnVjaWFsIGJpdC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBgTVRZUEVgIHJlcHJlc2VudHMuIEl0JiMzOTtzIHRoZSB0eXBlIHNwZWNpZmllciB0aGF0IGRpY3RhdGVzIHRoZSBiZWhhdmlvciBvZiB0aGUgbWFjcm8gYW5kIHdoYXQga2luZCBvZiBJUCBzZXQgb3BlcmF0aW9uIG9yIGRhdGEgc3RydWN0dXJlIGl0IGlzIHdvcmtpbmcgd2l0aC4gV2l0aG91dCBrbm93aW5nIHdoYXQgYE1UWVBFYCBleHBhbmRzIHRvLCBJIGNhbiYjMzk7dCBkZXRlcm1pbmUgdGhlIGV4YWN0IG1lYW5pbmcgb3IgcHVycG9zZSBvZiB0aGUgZ2VuZXJhdGVkIGZ1bmN0aW9uLiBUaGlzIGNvdWxkIGJlIHNvbWV0aGluZyBsaWtlICYjMzQ7aXB2NCYjMzQ7LCAmIzM0O2hhc2gmIzM0OywgJiMzNDtiaXRtYXAmIzM0Oywgb3IgZXZlbiBhIGN1c3RvbSB0eXBlLiBMZXQmIzM5O3MgZGlnIGRlZXBlciB0byBzZWUgaG93IGBNVFlQRWAgaXMgZGVmaW5lZC4gVGhpcyBtYWNybyBpcyB0aGUgZ2F0ZXdheSB0byB1bmRlcnN0YW5kaW5nIHRoZSBmdWxsIGNvbnRleHQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMTc6MDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7I2RlZmluZSBNVFlQRSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvaXBzZXQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9pcC5jPTMzPU1PRFVMRV9BTElBUyhcJiMzNDtpcF9zZXRfYml0bWFwOmlwXCYjMzQ7KTtcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9pcC5jLTM0LVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX2lwLmM6MzU6I2RlZmluZSBNVFlQRVx0XHRiaXRtYXBfaXBcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9pcC5jLTM2LSNkZWZpbmUgSE9TVF9NQVNLXHQzMlxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9pcG1hYy5jPTMzPU1PRFVMRV9BTElBUyhcJiMzNDtpcF9zZXRfYml0bWFwOmlwLG1hY1wmIzM0Oyk7XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfaXBtYWMuYy0zNC1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9pcG1hYy5jOjM1OiNkZWZpbmUgTVRZUEVcdFx0Yml0bWFwX2lwbWFjXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfaXBtYWMuYy0zNi0jZGVmaW5lIEhPU1RfTUFTS1x0MzJcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfcG9ydC5jPTI3PU1PRFVMRV9BTElBUyhcJiMzNDtpcF9zZXRfYml0bWFwOnBvcnRcJiMzNDspO1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX3BvcnQuYy0yOC1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9wb3J0LmM6Mjk6I2RlZmluZSBNVFlQRVx0XHRiaXRtYXBfcG9ydFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX3BvcnQuYy0zMC1cbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwLmM9NzA9aGFzaF9pcDRfZGF0YV9uZXh0KHN0cnVjdCBoYXNoX2lwNF9lbGVtICpuZXh0LCBjb25zdCBzdHJ1Y3QgaGFzaF9pcDRfZWxlbSAqZSlcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwLmMtNzQtXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwLmM6NzU6I2RlZmluZSBNVFlQRVx0XHRoYXNoX2lwNFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcC5jLTc2LSNkZWZpbmUgSE9TVF9NQVNLXHQzMlxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXAuYz0yMDI9aGFzaF9pcDZfZGF0YV9uZXh0KHN0cnVjdCBoYXNoX2lwNl9lbGVtICpuZXh0LCBjb25zdCBzdHJ1Y3QgaGFzaF9pcDZfZWxlbSAqZSlcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwLmMtMjA4LVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcC5jOjIwOTojZGVmaW5lIE1UWVBFXHRcdGhhc2hfaXA2XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwLmMtMjEwLSNkZWZpbmUgSE9TVF9NQVNLXHQxMjhcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwbWFjLmM9NzI9aGFzaF9pcG1hYzRfZGF0YV9uZXh0KHN0cnVjdCBoYXNoX2lwbWFjNF9lbGVtICpuZXh0LFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBtYWMuYy03Ny1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBtYWMuYzo3ODojZGVmaW5lIE1UWVBFXHRcdGhhc2hfaXBtYWM0XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwbWFjLmMtNzktI2RlZmluZSBQRlx0XHQ0XG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcG1hYy5jPTE4MD1oYXNoX2lwbWFjNl9kYXRhX25leHQoc3RydWN0IGhhc2hfaXBtYWM2X2VsZW0gKm5leHQsXG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcG1hYy5jLTE4OS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBtYWMuYzoxOTA6I2RlZmluZSBNVFlQRVx0XHRoYXNoX2lwbWFjNlxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcG1hYy5jLTE5MS0jZGVmaW5lIFBGXHRcdDZcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwbWFyay5jPTY5PWhhc2hfaXBtYXJrNF9kYXRhX25leHQoc3RydWN0IGhhc2hfaXBtYXJrNF9lbGVtICpuZXh0LFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBtYXJrLmMtNzQtXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwbWFyay5jOjc1OiNkZWZpbmUgTVRZUEVcdFx0aGFzaF9pcG1hcms0XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwbWFyay5jLTc2LSNkZWZpbmUgSE9TVF9NQVNLXHQzMlxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBtYXJrLmM9MjA1PWhhc2hfaXBtYXJrNl9kYXRhX25leHQoc3RydWN0IGhhc2hfaXBtYXJrNl9lbGVtICpuZXh0LFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBtYXJrLmMtMjEyLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcG1hcmsuYzoyMTM6I2RlZmluZSBNVFlQRVx0XHRoYXNoX2lwbWFyazZcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBtYXJrLmMtMjE0LSNkZWZpbmUgSE9TVF9NQVNLXHQxMjhcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwcG9ydC5jPTc5PWhhc2hfaXBwb3J0NF9kYXRhX25leHQoc3RydWN0IGhhc2hfaXBwb3J0NF9lbGVtICpuZXh0LFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0LmMtODUtXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwcG9ydC5jOjg2OiNkZWZpbmUgTVRZUEVcdFx0aGFzaF9pcHBvcnQ0XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwcG9ydC5jLTg3LSNkZWZpbmUgSE9TVF9NQVNLXHQzMlxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0LmM9MjQ5PWhhc2hfaXBwb3J0Nl9kYXRhX25leHQoc3RydWN0IGhhc2hfaXBwb3J0Nl9lbGVtICpuZXh0LFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0LmMtMjU3LVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcHBvcnQuYzoyNTg6I2RlZmluZSBNVFlQRVx0XHRoYXNoX2lwcG9ydDZcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0LmMtMjU5LSNkZWZpbmUgSE9TVF9NQVNLXHQxMjhcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwcG9ydGlwLmM9Nzc9aGFzaF9pcHBvcnRpcDRfZGF0YV9uZXh0KHN0cnVjdCBoYXNoX2lwcG9ydGlwNF9lbGVtICpuZXh0LFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0aXAuYy04NC0vKiBDb21tb24gZnVuY3Rpb25zICovXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwcG9ydGlwLmM6ODU6I2RlZmluZSBNVFlQRVx0XHRoYXNoX2lwcG9ydGlwNFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcHBvcnRpcC5jLTg2LSNkZWZpbmUgSE9TVF9NQVNLXHQzMlxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0aXAuYz0yNDg9aGFzaF9pcHBvcnRpcDZfZGF0YV9uZXh0KHN0cnVjdCBoYXNoX2lwcG9ydGlwNl9lbGVtICpuZXh0LFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0aXAuYy0yNTYtXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwcG9ydGlwLmM6MjU3OiNkZWZpbmUgTVRZUEVcdFx0aGFzaF9pcHBvcnRpcDZcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0aXAuYy0yNTgtI2RlZmluZSBIT1NUX01BU0tcdDEyOFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0bmV0LmM9MTIxPWhhc2hfaXBwb3J0bmV0NF9kYXRhX25leHQoc3RydWN0IGhhc2hfaXBwb3J0bmV0NF9lbGVtICpuZXh0LFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0bmV0LmMtMTI4LVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcHBvcnRuZXQuYzoxMjk6I2RlZmluZSBNVFlQRVx0XHRoYXNoX2lwcG9ydG5ldDRcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0bmV0LmMtMTMwLSNkZWZpbmUgSE9TVF9NQVNLXHQzMlxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0bmV0LmM9Mzc5PWhhc2hfaXBwb3J0bmV0Nl9kYXRhX25leHQoc3RydWN0IGhhc2hfaXBwb3J0bmV0Nl9lbGVtICpuZXh0LFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0bmV0LmMtMzg3LVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcHBvcnRuZXQuYzozODg6I2RlZmluZSBNVFlQRVx0XHRoYXNoX2lwcG9ydG5ldDZcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0bmV0LmMtMzg5LSNkZWZpbmUgSE9TVF9NQVNLXHQxMjhcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX21hYy5jPTYxPWhhc2hfbWFjNF9kYXRhX25leHQoc3RydWN0IGhhc2hfbWFjNF9lbGVtICpuZXh0LFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbWFjLmMtNjUtXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX21hYy5jOjY2OiNkZWZpbmUgTVRZUEVcdFx0aGFzaF9tYWM0XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX21hYy5jLTY3LSNkZWZpbmUgSE9TVF9NQVNLXHQzMlxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0LmM9MTAyPWhhc2hfbmV0NF9kYXRhX25leHQoc3RydWN0IGhhc2hfbmV0NF9lbGVtICpuZXh0LFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0LmMtMTA3LVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXQuYzoxMDg6I2RlZmluZSBNVFlQRVx0XHRoYXNoX25ldDRcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0LmMtMTA5LSNkZWZpbmUgSE9TVF9NQVNLXHQzMlxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0LmM9MjczPWhhc2hfbmV0Nl9kYXRhX25leHQoc3RydWN0IGhhc2hfbmV0Nl9lbGVtICpuZXh0LFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0LmMtMjgwLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXQuYzoyODE6I2RlZmluZSBNVFlQRVx0XHRoYXNoX25ldDZcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0LmMtMjgyLSNkZWZpbmUgSE9TVF9NQVNLXHQxMjhcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldGlmYWNlLmM9MTI5PWhhc2hfbmV0aWZhY2U0X2RhdGFfbmV4dChzdHJ1Y3QgaGFzaF9uZXRpZmFjZTRfZWxlbSAqbmV4dCxcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldGlmYWNlLmMtMTM0LVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRpZmFjZS5jOjEzNTojZGVmaW5lIE1UWVBFXHRcdGhhc2hfbmV0aWZhY2U0XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldGlmYWNlLmMtMTM2LSNkZWZpbmUgSE9TVF9NQVNLXHQzMlxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0aWZhY2UuYz0zNjM9aGFzaF9uZXRpZmFjZTZfZGF0YV9uZXh0KHN0cnVjdCBoYXNoX25ldGlmYWNlNl9lbGVtICpuZXh0LFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0aWZhY2UuYy0zNzAtXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldGlmYWNlLmM6MzcxOiNkZWZpbmUgTVRZUEVcdFx0aGFzaF9uZXRpZmFjZTZcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0aWZhY2UuYy0zNzItI2RlZmluZSBIT1NUX01BU0tcdDEyOFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0bmV0LmM9MTI1PWhhc2hfbmV0bmV0NF9kYXRhX25leHQoc3RydWN0IGhhc2hfbmV0bmV0NF9lbGVtICpuZXh0LFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0bmV0LmMtMTMwLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRuZXQuYzoxMzE6I2RlZmluZSBNVFlQRVx0XHRoYXNoX25ldG5ldDRcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0bmV0LmMtMTMyLSNkZWZpbmUgSE9TVF9NQVNLXHQzMlxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0bmV0LmM9MzYzPWhhc2hfbmV0bmV0Nl9kYXRhX25leHQoc3RydWN0IGhhc2hfbmV0bmV0Nl9lbGVtICpuZXh0LFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0bmV0LmMtMzcwLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRuZXQuYzozNzE6I2RlZmluZSBNVFlQRVx0XHRoYXNoX25ldG5ldDZcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0bmV0LmMtMzcyLSNkZWZpbmUgSE9TVF9NQVNLXHQxMjhcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldHBvcnQuYz0xMTc9aGFzaF9uZXRwb3J0NF9kYXRhX25leHQoc3RydWN0IGhhc2hfbmV0cG9ydDRfZWxlbSAqbmV4dCxcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldHBvcnQuYy0xMjMtXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldHBvcnQuYzoxMjQ6I2RlZmluZSBNVFlQRVx0XHRoYXNoX25ldHBvcnQ0XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldHBvcnQuYy0xMjUtI2RlZmluZSBIT1NUX01BU0tcdDMyXG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRwb3J0LmM9MzM0PWhhc2hfbmV0cG9ydDZfZGF0YV9uZXh0KHN0cnVjdCBoYXNoX25ldHBvcnQ2X2VsZW0gKm5leHQsXG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRwb3J0LmMtMzQyLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRwb3J0LmM6MzQzOiNkZWZpbmUgTVRZUEVcdFx0aGFzaF9uZXRwb3J0NlxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRwb3J0LmMtMzQ0LSNkZWZpbmUgSE9TVF9NQVNLXHQxMjhcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldHBvcnRuZXQuYz0xMzI9aGFzaF9uZXRwb3J0bmV0NF9kYXRhX25leHQoc3RydWN0IGhhc2hfbmV0cG9ydG5ldDRfZWxlbSAqbmV4dCxcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldHBvcnRuZXQuYy0xMzgtXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldHBvcnRuZXQuYzoxMzk6I2RlZmluZSBNVFlQRVx0XHRoYXNoX25ldHBvcnRuZXQ0XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldHBvcnRuZXQuYy0xNDAtI2RlZmluZSBIT1NUX01BU0tcdDMyXG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRwb3J0bmV0LmM9NDI2PWhhc2hfbmV0cG9ydG5ldDZfZGF0YV9uZXh0KHN0cnVjdCBoYXNoX25ldHBvcnRuZXQ2X2VsZW0gKm5leHQsXG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRwb3J0bmV0LmMtNDM0LVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRwb3J0bmV0LmM6NDM1OiNkZWZpbmUgTVRZUEVcdFx0aGFzaF9uZXRwb3J0bmV0NlxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRwb3J0bmV0LmMtNDM2LSNkZWZpbmUgSE9TVF9NQVNLXHQxMjhcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMiAxNzowMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTg3NAoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDY3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIGlmIEkgd2VyZSB0aGlua2luZyBpdDoKCioqRGVjb2RpbmcgVGhpcyBJUFNFVCBJbXBsZW1lbnRhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhlc2UgSVBTRVQgZnVuY3Rpb24gbmFtZXMg4oCTIGBoYXNoX25ldDRfYWRkYCwgYGhhc2hfbmV0NF9kZWxgLCBgaGFzaF9uZXQ0X3Rlc3RfY2lkcnNgLCB0aGF0JiMzOTtzIHN0YW5kYXJkLiBNYWtlcyBzZW5zZSwgdGhleSYjMzk7cmUgY2xlYXJseSBkZWFsaW5nIHdpdGggSVB2NCBoYXNoIHNldHMuIE5vdGhpbmcgc3VycHJpc2luZyB0aGVyZSwgYW5kIHBlcmZlY3RseSBsb2dpY2FsIG5hbWluZy4gTm93LCB3aGF0JiMzOTtzIHRoaXMgYG10eXBlX2FkZGAgdGhpbmc/IFRoYXQgc2VlbXMgYSBiaXQuLi4gY3J5cHRpYy4gSXQmIzM5O3MgZGVmaW5lZCBhcyBgSVBTRVRfVE9LRU4oTVRZUEUsIF9hZGQpYC4gSSYjMzk7bGwgaGF2ZSB0byBkZWx2ZSBkZWVwZXIgaW50byB0aGF0IGBJUFNFVF9UT0tFTmAgbWFjcm8gZGVmaW5pdGlvbiB0byB1bmRlcnN0YW5kIHdoYXQgdGhlIGRldmVsb3BlciB3YXMgZ29pbmcgZm9yIHdpdGggdGhhdCBwYXJ0aWN1bGFyIGNob2ljZSBvZiBuYW1lLiBMZXQmIzM5O3Mgc2VlIGhvdyB0aGF0IG1hY3JvIGlzIGV4cGFuZGluZy4gSSYjMzk7bSBhc3N1bWluZyBpdCYjMzk7cyBwYXJ0IG9mIGhvdyB0aGV5JiMzOTtyZSBoYW5kbGluZyBkaWZmZXJlbnQgc2V0IHR5cGVzIHdpdGhpbiB0aGUgSVBTRVQgZnJhbWV3b3JrLCBidXQgYE1UWVBFYCBhbmQgYF9hZGRgIHRvZ2V0aGVyIGZlZWxzIGEgbGl0dGxlIG9kZCBhdCBmaXJzdCBnbGFuY2UsIGJ1dCBJIGtub3cgYmV0dGVyIHRoYW4gdG8ganVtcCB0byBjb25jbHVzaW9ucyEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMTc6MDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDsjZGVmaW5lIElQU0VUX1RPS0VOJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9pcHNldC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMiAxNzowMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDIxMQoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDEzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRoaXMgbXlzZWxmOgoKKipUcmFjaW5nIHRoZSBTb3VyY2Ugb2YgYElQU0VUX1RPS0VOYCoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGVyZSBgSVBTRVRfVE9LRU5gIGlzIGRlZmluZWQuIFRoaXMgaXMgYSBjb21tb24gZGVidWdnaW5nIHN0ZXAuIEkmIzM5O20gZGVhbGluZyB3aXRoIGEgY29kZWJhc2UsIHByZXN1bWFibHksIGFuZCBgSVBTRVRfVE9LRU5gIGlzIHByb2JhYmx5IGEgY29uc3RhbnQsIHZhcmlhYmxlLCBvciBtYWNyby4gVGhlIGdvYWwgaXMgdG8gdW5kZXJzdGFuZCBpdHMgc2NvcGUgYW5kIGhvdyBpdCYjMzk7cyB1c2VkIHdpdGhpbiB0aGUgY29udGV4dCBvZiB0aGUgcHJvZ3JhbS4gSSYjMzk7bGwgbmVlZCB0byBwaW5wb2ludCBpdHMgZGVjbGFyYXRpb24gdG8ga25vdyBpdHMgdHlwZSwgdmFsdWUgKGlmIGl0JiMzOTtzIGluaXRpYWxpemVkKSwgYW5kIHdoZXJlIGl04oCZcyBhY2Nlc3NpYmxlLiBUaGlzIGhlbHBzIG1lIHVuZGVyc3RhbmQgaXRzIHJvbGUgYW5kIGltcGFjdC4gV2hlcmUgY2FuIEkgc3RhcnQgbG9va2luZyBmb3IgdGhpcyBkZWNsYXJhdGlvbj8gVGltZSB0byBkaXZlIGluIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMiAxNzowMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDsjZGVmaW5lIElQU0VUX1RPS0VOJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvaXBzZXQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldC5oPTUyMz1uZl9pbmV0X2FkZHJfbWFza19pbnBsYWNlKHVuaW9uIG5mX2luZXRfYWRkciAqYTEsXG4tLVxuaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0LmgtNTQwLSNkZWZpbmUgSVBTRVRfQ09OQ0FUKGEsIGIpXHRcdGEjI2JcbmluY2x1ZGUvbGludXgvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldC5oOjU0MTojZGVmaW5lIElQU0VUX1RPS0VOKGEsIGIpXHRcdElQU0VUX0NPTkNBVChhLCBiKVxuaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0LmgtNTQyLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMiAxNzowMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDU1OAoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDI0OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgSVAgU2V0IEhhc2hpbmcgRnVuY3Rpb25zKioKCk9rYXksIHNvIEkmIzM5O20gdHJhY2luZyBob3cgdGhlc2UgSVAgc2V0IG9wZXJhdGlvbnMgYXJlIHN0cnVjdHVyZWQsIGFuZCBpdCBsb29rcyBsaWtlIHRoZSBgSVBTRVRfVE9LRU4oTVRZUEUsIF9hZGQpYCBtYWNybyBnZW5lcmF0ZXMgYSBmYW1pbHkgb2YgZnVuY3Rpb25zLCBsaWtlIGBoYXNoX25ldDRfYWRkYCwgYGhhc2hfbmV0Nl9hZGRgLCBhbmQgYGhhc2hfbmV0bmV0NF9hZGRgIGRlcGVuZGluZyBvbiB0aGUgYWRkcmVzcyBmYW1pbHkgYW5kIHRoZSBzcGVjaWZpYyBvcGVyYXRpb24uIEkgc2hvdWxkIHN0YXJ0IGJ5IGxvb2tpbmcgYXQgdGhlc2UsIGFuZCBJJiMzOTttIHRoaW5raW5nIG9mIGZvY3VzaW5nIG9uIHNwZWNpZmljIG9uZXMgbGlrZSBgaGFzaF9uZXQ0X2FkZGAsIGBoYXNoX25ldDZfYWRkYCwgYGhhc2hfbmV0NF9kZWxgLCBgaGFzaF9uZXQ2X2RlbGAsIHRob3NlIGFkZC9kZWxldGUgZnVuY3Rpb25zLiBUaGVyZSBhcmUgb3RoZXIgZnVuY3Rpb25zIHRoYXQgY2FuIGJlIGltcG9ydGFudCB0b28sIHN1Y2ggYXMgdGhlIGB0ZXN0X2NpZHJzYCwgdGhlIGByZXNpemVgIGFuZCB0aGUgYGdjYCBmdW5jdGlvbnMsIGFuZCBhIHNpbWlsYXIgaWRlYSBhcHBlYXJzIHdoZW4gdGhpbmtpbmcgYWJvdXQgYG10eXBlX2FkZF9jaWRyYCwgd2hpY2ggYXBwZWFycyBhcyBgaGFzaF9uZXQ0X2FkZF9jaWRyYCwgYGhhc2hfbmV0Nl9hZGRfY2lkcmAuCgpCdXQsIHdhaXQgYSBzZWNvbmQsIGxldCYjMzk7cyBsb29rIGNsb3NlbHkgYXQgYGhhc2hfbmV0NF9hZGRfY2lkcmAsIGlzIGl0IGRlZmluZWQgaW4gdGhlIGNvbXBpbGVkIGNvZGUgb3IgaXMgaXQgZGVmaW5lZCBhcyBhIHN0YXRpYyBmdW5jdGlvbj8gSXQgYXBwZWFycyBzdGF0aWMsIHdoaWNoIG1lYW5zIGl0IG1pZ2h0IGJlIGlubGluZWQuIFRoaXMgY291bGQgbWFrZSBpdCBhIGxlc3MgdXNlZnVsIHN5bWJvbCB0byBmb2N1cyBvbi4gSG1tLCBsZXQmIzM5O3MgYWxzbyBjaGVjayBpZiBgaGFzaF9uZXQ0X2FkZGAgaXMgc3RhdGljLiBBbHJpZ2h0LCBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIHRoZSBzb3VyY2UgZmlsZSwgc3BlY2lmaWNhbGx5IGBpcF9zZXRfaGFzaF9uZXQuY2AsIHRvIGJlIHN1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDE3OjAxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aGFzaF9uZXQ0X2FkZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvaXBzZXQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMTc6MDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjExNzUKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAzOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIE1hY3JvLUdlbmVyYXRlZCBDb2RlKioKCk9rYXksIHNvIEkmIzM5O20gdHJhY2tpbmcgZG93biB3aGVyZSB0aGlzIGBoYXNoX25ldDRfYWRkYCBmdW5jdGlvbiBjb21lcyBmcm9tLiBJdCYjMzk7cyBjbGVhcmx5IG1hY3JvLWdlbmVyYXRlZCwgd2hpY2ggbWVhbnMgSSBuZWVkIHRvIGRpZyBpbnRvIHRoZSBtYWNybyBkZWZpbml0aW9uIGl0c2VsZi4gSSBjYW4mIzM5O3QganVzdCBgZ3JlcGAgdGhlIHNvdXJjZSBmb3IgYSBkaXJlY3QgZnVuY3Rpb24gZGVmaW5pdGlvbi4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hpY2ggbWFjcm8gZ2VuZXJhdGVzIHRoaXMgZnVuY3Rpb24uIE15IGJlc3QgYmV0IGlzIHRvIGNoZWNrIHRoZSByZWxhdGVkIGluY2x1ZGUgZmlsZSwgYGlwX3NldF9oYXNoX2dlbi5oYCwgc3BlY2lmaWNhbGx5IGxvb2tpbmcgZm9yIHNvbWV0aGluZyByZWxhdGVkIHRvIGBtdHlwZV9hZGRgIHNpbmNlIHRoYXQmIzM5O3MgbGlrZWx5IHBhcnQgb2YgdGhlIG1hY3JvJiMzOTtzIG5hbWUgb3IgbG9naWMuIFRoYXQmIzM5O3MgbXkgbmV4dCBzdGVwIHRvIHVuZGVyc3RhbmQgdGhlIGNyZWF0aW9uIHByb2Nlc3Mgb2YgYGhhc2hfbmV0NF9hZGRgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMiAxNzowMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttdHlwZV9hZGQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL2lwc2V0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfZ2VuLmgtMTctI2RlZmluZSBtdHlwZV9hZHRfZWxlbVx0XHRJUFNFVF9UT0tFTihNVFlQRSwgX2FkdF9lbGVtKVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX2dlbi5oOjE4OiNkZWZpbmUgbXR5cGVfYWRkX3RpbWVvdXRcdElQU0VUX1RPS0VOKE1UWVBFLCBfYWRkX3RpbWVvdXQpXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfZ2VuLmgtMTktI2RlZmluZSBtdHlwZV9nY19pbml0XHRcdElQU0VUX1RPS0VOKE1UWVBFLCBfZ2NfaW5pdClcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfZ2VuLmgtMjgtI2RlZmluZSBtdHlwZV90ZXN0XHRcdElQU0VUX1RPS0VOKE1UWVBFLCBfdGVzdClcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9nZW4uaDoyOTojZGVmaW5lIG10eXBlX2FkZFx0XHRJUFNFVF9UT0tFTihNVFlQRSwgX2FkZClcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9nZW4uaC0zMC0jZGVmaW5lIG10eXBlX2RlbFx0XHRJUFNFVF9UT0tFTihNVFlQRSwgX2RlbClcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfZ2VuLmg9MTI5PXN0YXRpYyBpbnRcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9nZW4uaDoxMzA6bXR5cGVfYWRkKHN0cnVjdCBpcF9zZXQgKnNldCwgdm9pZCAqdmFsdWUsIGNvbnN0IHN0cnVjdCBpcF9zZXRfZXh0ICpleHQsXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfZ2VuLmgtMTMxLVx0ICBzdHJ1Y3QgaXBfc2V0X2V4dCAqbWV4dCwgdTMyIGZsYWdzKVxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9nZW4uaC0xNTQtI2lmZGVmIElQX1NFVF9CSVRNQVBfU1RPUkVEX1RJTUVPVVRcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9nZW4uaDoxNTU6XHRcdG10eXBlX2FkZF90aW1lb3V0KGV4dF90aW1lb3V0KHgsIHNldCksIGUsIGV4dCwgc2V0LCBtYXAsIHJldCk7XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfZ2VuLmgtMTU2LSNlbHNlXG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX2dlbi5oPTMwMj1zdGF0aWMgY29uc3Qgc3RydWN0IGlwX3NldF90eXBlX3ZhcmlhbnQgbXR5cGUgPSB7XG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX2dlbi5oLTMwNS1cdC5hZHRcdD0ge1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX2dlbi5oOjMwNjpcdFx0W0lQU0VUX0FERF0gPSBtdHlwZV9hZGQsXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfZ2VuLmgtMzA3LVx0XHRbSVBTRVRfREVMXSA9IG10eXBlX2RlbCxcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oPTE2Mz1zdGF0aWMgY29uc3QgdW5pb24gbmZfaW5ldF9hZGRyIHplcm9tYXNrID0ge307XG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC0xOTQtI3VuZGVmIG10eXBlX2V4dF9jbGVhbnVwXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oOjE5NTojdW5kZWYgbXR5cGVfYWRkX2NpZHJcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtMTk2LSN1bmRlZiBtdHlwZV9kZWxfY2lkclxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtMjAzLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaDoyMDQ6I3VuZGVmIG10eXBlX2FkZFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC0yMDUtI3VuZGVmIG10eXBlX2RlbFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtMjM5LSNkZWZpbmUgbXR5cGVfZXh0X2NsZWFudXBcdElQU0VUX1RPS0VOKE1UWVBFLCBfZXh0X2NsZWFudXApXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oOjI0MDojZGVmaW5lIG10eXBlX2FkZF9jaWRyXHRcdElQU0VUX1RPS0VOKE1UWVBFLCBfYWRkX2NpZHIpXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTI0MS0jZGVmaW5lIG10eXBlX2RlbF9jaWRyXHRcdElQU0VUX1RPS0VOKE1UWVBFLCBfZGVsX2NpZHIpXG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC0yNDgtXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oOjI0OTojZGVmaW5lIG10eXBlX2FkZFx0XHRJUFNFVF9UT0tFTihNVFlQRSwgX2FkZClcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtMjUwLSNkZWZpbmUgbXR5cGVfZGVsXHRcdElQU0VUX1RPS0VOKE1UWVBFLCBfZGVsKVxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg9MzE3PXN0YXRpYyBpbnRcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg6MzE4Om10eXBlX2FkZF9jaWRyKHN0cnVjdCBpcF9zZXQgKnNldCwgc3RydWN0IGh0eXBlICpoLCB1OCBjaWRyLCB1OCBuKVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC0zMTkte1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg9NjY2PXN0YXRpYyBpbnRcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg6NjY3Om10eXBlX2FkZChzdHJ1Y3QgaXBfc2V0ICpzZXQsIHZvaWQgKnZhbHVlLCBjb25zdCBzdHJ1Y3QgaXBfc2V0X2V4dCAqZXh0LFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC02NjgtXHQgIHN0cnVjdCBpcF9zZXRfZXh0ICptZXh0LCB1MzIgZmxhZ3MpO1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg9Njc4PW10eXBlX3Jlc2l6ZShzdHJ1Y3QgaXBfc2V0ICpzZXQsIGJvb2wgcmV0cmllZClcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTgzMC1cdFx0aWYgKHgtXHUwMDNlYWQgPT0gSVBTRVRfQUREKSB7XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oOjgzMTpcdFx0XHRtdHlwZV9hZGQoc2V0LCBcdTAwMjZ4LVx1MDAzZWQsIFx1MDAyNngtXHUwMDNlZXh0LCBcdTAwMjZ4LVx1MDAzZW1leHQsIHgtXHUwMDNlZmxhZ3MpO1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC04MzItXHRcdH0gZWxzZSB7XG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaD05MTM9c3RhdGljIGludFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaDo5MTQ6bXR5cGVfYWRkKHN0cnVjdCBpcF9zZXQgKnNldCwgdm9pZCAqdmFsdWUsIGNvbnN0IHN0cnVjdCBpcF9zZXRfZXh0ICpleHQsXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTkxNS1cdCAgc3RydWN0IGlwX3NldF9leHQgKm1leHQsIHUzMiBmbGFncylcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTEwNDMtXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBJUFNFVF9ORVRfQ09VTlQ7IGkmIzQzOyYjNDM7KVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaDoxMDQ0Olx0XHRtdHlwZV9hZGRfY2lkcihzZXQsIGgsIERDSURSX0dFVChkLVx1MDAzZWNpZHIsIGkpLCBpKTtcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtMTA0NS0jZW5kaWZcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oPTE1MzE9c3RhdGljIGNvbnN0IHN0cnVjdCBpcF9zZXRfdHlwZV92YXJpYW50IG10eXBlX3ZhcmlhbnQgPSB7XG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC0xNTM0LVx0LmFkdFx0PSB7XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oOjE1MzU6XHRcdFtJUFNFVF9BRERdID0gbXR5cGVfYWRkLFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC0xNTM2LVx0XHRbSVBTRVRfREVMXSA9IG10eXBlX2RlbCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMTc6MDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjMxNjUKCQkJCQkJCW91dHB1dDogNDEKCQkJCQkJCXRob3VnaHRzOiAxMTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBJUFNldCBgbXR5cGVfYWRkYCBBc3NpZ25tZW50KioKCk9rYXksIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIHRoaXMgYG10eXBlX2FkZGAgYXNzaWdubWVudCwgYW5kIGl0IGxvb2tzIGxpa2UgaXQmIzM5O3MgcG9pbnRpbmcgdG8gYG10eXBlX3ZhcmlhbnQuYWR0W0lQU0VUX0FERF1gLiBUaGF0JiMzOTtzIHRoZSBlbnRyeSBwb2ludCwgYnV0IHRoZSBhY3R1YWwsIG1vcmUgZ3JhbnVsYXIgZnVuY3Rpb24gd2lsbCBiZSBzb21ldGhpbmcgbGlrZSBgaGFzaF9uZXQ0X2FkZGAsIG9yIGBoYXNoX25ldDZfYWRkYCwgZGVwZW5kaW5nIG9uIHRoZSBJUCB2ZXJzaW9uLiBSaWdodCwgbm93IEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgZnVuY3Rpb25zIGFyZSBhY3R1YWxseSBhdmFpbGFibGUgYW5kLCBjcnVjaWFsbHksIHdoaWNoIG9uZXMgYXJlIGFjY2Vzc2libGUuCgpMZXQmIzM5O3Mgc2VlLi4uIGxvb2tpbmcgYXQgYGhhc2hfbmV0NF9hZGRgLCBJIHNlZSBpdCYjMzk7cyBtYXJrZWQgYHN0YXRpY2AuIFRoYXQmIzM5O3MgdXN1YWxseSBhIHJlZCBmbGFnLiBIbW0sIGhvbGQgb24uLi4gdGhlIGNvZGUgZ2VuZXJhdGVkIGBoYXNoX25ldDRfY3JlYXRlYCwgc28gdGhhdCBnaXZlcyBtZSBhbiBvcGVuaW5nLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29ubmVjdGlvbiBiZXR3ZWVuIHRoYXQgZnVuY3Rpb24gYW5kIHRoZSBhZGQgZnVuY3Rpb24uCgpJJiMzOTtsbCBjaGVjayBgaXBfc2V0X2hhc2hfbmV0LmNgIHRvIHNlZSB3aGF0IGlzIGV4cG9ydGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMiAxNzowMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtoYXNoX25ldDRfJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXQuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldC5jPTMzPU1PRFVMRV9BTElBUyhcJiMzNDtpcF9zZXRfaGFzaDpuZXRcJiMzNDspO1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0LmMtNDEtLyogTWVtYmVyIGVsZW1lbnRzICAqL1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXQuYzo0MjpzdHJ1Y3QgaGFzaF9uZXQ0X2VsZW0ge1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXQuYy00My1cdF9fYmUzMiBpcDtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldC5jPTUxPXN0YXRpYyBib29sXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldC5jOjUyOmhhc2hfbmV0NF9kYXRhX2VxdWFsKGNvbnN0IHN0cnVjdCBoYXNoX25ldDRfZWxlbSAqaXAxLFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXQuYzo1MzpcdFx0ICAgICBjb25zdCBzdHJ1Y3QgaGFzaF9uZXQ0X2VsZW0gKmlwMixcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0LmMtNTQtXHRcdCAgICAgdTMyICptdWx0aSlcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldC5jPTYwPXN0YXRpYyBpbnRcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0LmM6NjE6aGFzaF9uZXQ0X2RvX2RhdGFfbWF0Y2goY29uc3Qgc3RydWN0IGhhc2hfbmV0NF9lbGVtICplbGVtKVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXQuYy02Mi17XG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXQuYz02Nj1zdGF0aWMgdm9pZFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXQuYzo2NzpoYXNoX25ldDRfZGF0YV9zZXRfZmxhZ3Moc3RydWN0IGhhc2hfbmV0NF9lbGVtICplbGVtLCB1MzIgZmxhZ3MpXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldC5jLTY4LXtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldC5jPTcyPXN0YXRpYyB2b2lkXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldC5jOjczOmhhc2hfbmV0NF9kYXRhX3Jlc2V0X2ZsYWdzKHN0cnVjdCBoYXNoX25ldDRfZWxlbSAqZWxlbSwgdTggKmZsYWdzKVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXQuYy03NC17XG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXQuYz03OD1zdGF0aWMgdm9pZFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXQuYzo3OTpoYXNoX25ldDRfZGF0YV9uZXRtYXNrKHN0cnVjdCBoYXNoX25ldDRfZWxlbSAqZWxlbSwgdTggY2lkcilcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0LmMtODAte1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0LmM9ODU9c3RhdGljIGJvb2xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0LmM6ODY6aGFzaF9uZXQ0X2RhdGFfbGlzdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgaGFzaF9uZXQ0X2VsZW0gKmRhdGEpXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldC5jLTg3LXtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldC5jPTEwMT1zdGF0aWMgdm9pZFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXQuYzoxMDI6aGFzaF9uZXQ0X2RhdGFfbmV4dChzdHJ1Y3QgaGFzaF9uZXQ0X2VsZW0gKm5leHQsXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldC5jOjEwMzpcdFx0ICAgIGNvbnN0IHN0cnVjdCBoYXNoX25ldDRfZWxlbSAqZClcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0LmMtMTA0LXtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldC5jPTExMj1zdGF0aWMgaW50XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldC5jOjExMzpoYXNoX25ldDRfa2FkdChzdHJ1Y3QgaXBfc2V0ICpzZXQsIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldC5jLTExNC1cdCAgICAgICBjb25zdCBzdHJ1Y3QgeHRfYWN0aW9uX3BhcmFtICpwYXIsXG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXQuYy0xMTgtXHRpcHNldF9hZHRmbiBhZHRmbiA9IHNldC1cdTAwM2V2YXJpYW50LVx1MDAzZWFkdFthZHRdO1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXQuYzoxMTk6XHRzdHJ1Y3QgaGFzaF9uZXQ0X2VsZW0gZSA9IHtcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0LmMtMTIwLVx0XHQuY2lkciA9IElOSVRfQ0lEUihoLVx1MDAzZXJuZXRzWzBdLCBIT1NUX01BU0spLFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0LmM9MTM1PXN0YXRpYyBpbnRcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0LmM6MTM2Omhhc2hfbmV0NF91YWR0KHN0cnVjdCBpcF9zZXQgKnNldCwgc3RydWN0IG5sYXR0ciAqdGJbXSxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0LmMtMTM3LVx0ICAgICAgIGVudW0gaXBzZXRfYWR0IGFkdCwgdTMyICpsaW5lbm8sIHUzMiBmbGFncywgYm9vbCByZXRyaWVkKVxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0LmMtMTQwLVx0aXBzZXRfYWR0Zm4gYWR0Zm4gPSBzZXQtXHUwMDNldmFyaWFudC1cdTAwM2VhZHRbYWR0XTtcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0LmM6MTQxOlx0c3RydWN0IGhhc2hfbmV0NF9lbGVtIGUgPSB7IC5jaWRyID0gSE9TVF9NQVNLIH07XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldC5jLTE0Mi1cdHN0cnVjdCBpcF9zZXRfZXh0IGV4dCA9IElQX1NFVF9JTklUX1VFWFQoc2V0KTtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldC5jLTE5Ny1cdFx0aWYgKGkgXHUwMDNlIElQU0VUX01BWF9SQU5HRSkge1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXQuYzoxOTg6XHRcdFx0aGFzaF9uZXQ0X2RhdGFfbmV4dChcdTAwMjZoLVx1MDAzZW5leHQsIFx1MDAyNmUpO1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXQuYy0xOTktXHRcdFx0cmV0dXJuIC1FUkFOR0U7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDE3OjAxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI0OTM4CgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogOTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIEFEVCBFbnRyeSBQb2ludHMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoZXNlIGBoYXNoX25ldDRfa2FkdGAgYW5kIGBoYXNoX25ldDRfdWFkdGAgZnVuY3Rpb25zLiBUaGV5JiMzOTtyZSBzdGF0aWMsIHdoaWNoIGlzIGludGVyZXN0aW5nLiBUaGF0IG1lYW5zIHRoZXkmIzM5O3JlIG5vdCBkaXJlY3RseSBhY2Nlc3NpYmxlIGZyb20gb3V0c2lkZSB0aGlzIHNwZWNpZmljIG1vZHVsZS4uLiBvciBhcmUgdGhleT8gV2FpdCwgYGhhc2hfbmV0NF91YWR0YCBpcyBkZWZpbml0ZWx5IHN0YXRpYy4gSXMgdGhlcmUgYW55IG90aGVyIGZ1bmN0aW9uIGV4cG9zZWQgdG8gb3V0c2lkZSBtb2R1bGVzPyBMZXQgbWUgY2hlY2sgYGlwX3NldF9oYXNoX25ldC5jYC4gSSBuZWVkIHRvIHNlZSBpZiB0aGVyZSBhcmUgYW55IGBFWFBPUlRfU1lNQk9MYCBtYWNyb3Mgb3Igb3RoZXIgbm9uLXN0YXRpYyBmdW5jdGlvbnMgaW4gdGhlIGZpbGUgdGhhdCBtaWdodCBiZSBpbXBvcnRhbnQgZm9yIHVuZGVyc3RhbmRpbmcgaG93IHRoaXMgQURUIGxvZ2ljIGlzIGV4cG9zZWQgdG8gdGhlIHJlc3Qgb2YgdGhlIGtlcm5lbCBvciB1c2VyIHNwYWNlLiBMZXQmIzM5O3MgZGlnIGluLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMiAxNzowMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0VYUE9SVF9TWU1CT0wmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMTc6MDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjUyNDYKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAxOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcyBvbiB3aGF0IEkmIzM5O2QgYmUgbG9va2luZyBmb3I6CgoqKkFuYWx5emluZyBgaXBfc2V0X2hhc2hfZ2VuLmhgIGZvciBFeHBvcnRlZCBGdW5jdGlvbnMqKgoKUmlnaHQsIHNvIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gdGhlIGV4dGVybmFsIGludGVyZmFjZSBvZiB0aGlzIGBpcF9zZXRfaGFzaF9nZW4uaGAgaGVhZGVyIGZpbGUuIE15IHByaW1hcnkgZ29hbCBoZXJlIGlzIHRvIGlkZW50aWZ5IHdoaWNoIGZ1bmN0aW9ucyBhcmUgKm1lYW50KiB0byBiZSB1c2VkIGJ5IG90aGVyIHBhcnRzIG9mIHRoZSBzeXN0ZW0g4oCTIHRoZSBvbmVzIHRoYXQgYXJlIGV4cG9ydGVkLCBpbiBlc3NlbmNlLiBJJiMzOTtsbCBiZSBzaWZ0aW5nIHRocm91Z2ggdGhlIGNvZGUsIGNhcmVmdWxseSBsb29raW5nIGZvciBhbnkgdGVsbHRhbGUgc2lnbnMuIEkgZXhwZWN0IHRvIHNlZSBmdW5jdGlvbiBkZWNsYXJhdGlvbnMgd2l0aCBwcmVmaXhlcyBvciBhdHRyaWJ1dGVzIHRoYXQgZGVub3RlIHRoZWlyIHZpc2liaWxpdHkgYW5kIGludGVuZGVkIHVzYWdlLiBUaGluZ3MgbGlrZSBgZXh0ZXJuYCBkZWNsYXJhdGlvbnMsIG1hY3JvcyB0aGF0IGV4cGFuZCB0byBwbGF0Zm9ybS1zcGVjaWZpYyBleHBvcnQgc3ltYm9scyAoZS5nLiwgYF9fZGVjbHNwZWMoZGxsZXhwb3J0KWAgb24gV2luZG93cyBvciB0aGUgZXF1aXZhbGVudCBmb3Igc2hhcmVkIG9iamVjdCBsaWJyYXJpZXMpLCBvciBwb3NzaWJseSBzb21lIG5hbWluZyBjb252ZW50aW9ucyB0aGF0IHN1Z2dlc3QgYSBwdWJsaWMgQVBJLiBJJiMzOTtsbCBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBmdW5jdGlvbiBzaWduYXR1cmVzIGFzIHdlbGwg4oCTIHRoYXQmIzM5O2xsIGdpdmUgbWUgYSBzdHJvbmcgdW5kZXJzdGFuZGluZyBvZiB3aGF0IGRhdGEgc3RydWN0dXJlcyBhbmQgdHlwZXMgdGhlc2UgZXhwb3J0ZWQgZnVuY3Rpb25zIG9wZXJhdGUgb24gYW5kIGV4cGVjdCBhcyBhcmd1bWVudHMuIFRoaXMgc2hvdWxkIGdpdmUgbWUgYSBzb2xpZCBtYXAgb2YgaG93IHRoaXMgbW9kdWxlIGludGVyZmFjZXMgd2l0aCBldmVyeXRoaW5nIGVsc2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDE3OjAxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7RVhQT1JUX1NZTUJPTCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMiAxNzowMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNTU2NQoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDM0MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYGlwc2V0YCBNb2R1bGUgRnVuY3Rpb24gUmVnaXN0cmF0aW9uIGZvciBTeXprYWxsZXIgVGFyZ2V0aW5nKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBob3cgdGhlIGBpcHNldGAgbW9kdWxlIGhhbmRsZXMgaXRzIHZhcmlvdXMgc2V0IHR5cGVzLiBJIHNlZSB0aGF0IGBpcF9zZXRfdHlwZV9yZWdpc3RlcmAgaXMgdGhlIGNvcmUgbWVjaGFuaXNtLCBhbmQgaXQmIzM5O3Mgd2hhdCBob29rcyBldmVyeXRoaW5nIGluLiBUaGUgY3J1Y2lhbCBwYXJ0IGZvciBtZSBpcyB0aGUgYHN0cnVjdCBpcF9zZXRfdHlwZV92YXJpYW50YCBzdHJ1Y3R1cmUg4oCTIGl0IGNvbnRhaW5zIHRoZSBmdW5jdGlvbiBwb2ludGVycyB0byB0aGUgYWN0dWFsIG9wZXJhdGlvbnMuCgpTcGVjaWZpY2FsbHksIEkmIzM5O20gbm90aW5nIHRoZSBmdW5jdGlvbnM6IGBoYXNoX25ldDRfdWFkdGAsIGBoYXNoX25ldDRfa2FkdGAsIGBoYXNoX25ldDZfdWFkdGAsIGFuZCBgaGFzaF9uZXQ2X2thZHRgLiBUaGVzZSBhcmUgdGhlIG9uZXMgdGhhdCBwcmVzdW1hYmx5IHBlcmZvcm0gdGhlIHVuZGVybHlpbmcgb3BlcmF0aW9ucy4gVGhlbiwgb2YgY291cnNlLCB0aGUgZ2VuZXJhdGVkIGZ1bmN0aW9ucyBsaWtlIGBoYXNoX25ldDRfYWRkYCwgYGhhc2hfbmV0NF9kZWxgLCBgaGFzaF9uZXQ0X3Rlc3RgLCBgaGFzaF9uZXQ0X3Jlc2l6ZWAsIGFuZCBgaGFzaF9uZXQ0X2djYC4KClRoZSBjaGFsbGVuZ2UsIGFzIGFsd2F5cyB3aXRoIFN5emthbGxlciwgaXMgd2hldGhlciBpdCBjYW4gcmVsaWFibHkgdGFyZ2V0IHRoZXNlIGZ1bmN0aW9ucy4gU2luY2UgdGhleSYjMzk7cmUgZGVjbGFyZWQgYXMgYHN0YXRpY2AsIEkgd2FzIGluaXRpYWxseSBjb25jZXJuZWQuIE15IGV4cGVyaWVuY2Ugc3VnZ2VzdHMgdGhhdCBpZiB0aGV54oCZcmUgaW4gdGhlIHN5bWJvbCB0YWJsZSAoYW5kIHVzdWFsbHkgdGhleSBhcmUpLCBTeXprYWxsZXIgc2hvdWxkIGJlIGFibGUgdG8gcmVzb2x2ZSBhbmQgdGFyZ2V0IHRoZW0uIEhvd2V2ZXIsIGl0JiMzOTtzIGdlbmVyYWxseSBjbGVhbmVyIHRvIHByb3ZpZGUgdGhlIG5hbWVzIG9mIHRoZSBnZW5lcmF0ZWQgZnVuY3Rpb25zIHJhdGhlciB0aGFuIHJlbHkgb24gdGhlIHVuZGVybHlpbmcgc3RhdGljIGZ1bmN0aW9uIHJlc29sdXRpb24uCgpTbywgbGV0JiMzOTtzIG5haWwgZG93biB0aG9zZSBnZW5lcmF0ZWQgZnVuY3Rpb25zIGZvciB0aGUgYGhhc2hfbmV0NGAgdHlwZS4gSSYjMzk7bGwgbGlzdCB0aGVtIG91dDogYGhhc2hfbmV0NF9hZGRgLCBgaGFzaF9uZXQ0X2RlbGAsIGBoYXNoX25ldDRfdGVzdGAsIGBoYXNoX25ldDRfcmVzaXplYCwgYGhhc2hfbmV0NF9nY2AsIGBoYXNoX25ldDRfZmx1c2hgLCBgaGFzaF9uZXQ0X2Rlc3Ryb3lgLCBgaGFzaF9uZXQ0X2hlYWRgLCBgaGFzaF9uZXQ0X2xpc3RgLCBgaGFzaF9uZXQ0X2thZHRgLCBhbmQgYGhhc2hfbmV0NF91YWR0YC4KCkFoLCBoZXJlJiMzOTtzIGEgZGV0YWlsIEkgbmVlZCB0byBjb25maXJtOiBJdCBzZWVtcyB0aGF0IGBtdHlwZV9hZGRgIGlzICpnZW5lcmF0ZWQqIGFzIGBoYXNoX25ldDRfYWRkYC4gTm93IEkgbmVlZCB0byBxdWlja2x5IGNoZWNrIHRoZSBvYmplY3QgZmlsZSB0byBjb25maXJtIHRoYXQgYGhhc2hfbmV0NF9hZGRgIGFjdHVhbGx5IGV4aXN0cy4gSSYjMzk7bGwgdmVyaWZ5IHRoaXMgaW1tZWRpYXRlbHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDE3OjAyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aGFzaF9uZXQ0X2FkZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvaXBzZXQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMTc6MDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjY0MjUKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAzMzcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBJbXBhY3Qgb2YgdGhlIFBhdGNoKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgYSBiaXQgdHJpY2t5IHRvIHRyYWNrIGRvd24gc2luY2UgaXQmIzM5O3MgZ2VuZXJhdGVkIGJ5IG1hY3Jvcy4gU3RyYWlnaHQgYGdyZXBgIGlzbiYjMzk7dCBnb2luZyB0byBjdXQgaXQsIHNvIEkgbmVlZCB0byBkaWcgaW50byB0aGUgbWFjcm8gZXhwYW5zaW9uIHByb2Nlc3MuIExldCYjMzk7cyBzdGFydCB3aXRoIGBtdHlwZV9hZGRgIGluIGBpcF9zZXRfaGFzaF9nZW4uaGAuIFJpZ2h0LCBgI2RlZmluZSBtdHlwZV9hZGQgSVBTRVRfVE9LRU4oTVRZUEUsIF9hZGQpYC4gQW5kIGBNVFlQRWAgaXMgZGVmaW5lZCBhcyBgaGFzaF9uZXQ0YC4gVGhlcmVmb3JlLCBgSVBTRVRfVE9LRU4oaGFzaF9uZXQ0LCBfYWRkKWAgZXhwYW5kcyB0byBgaGFzaF9uZXQ0X2FkZGAuIEdvb2QsIHRoYXQgc2hvdWxkIGRlZmluaXRlbHkgYmUgaW4gdGhlIHN5bWJvbCB0YWJsZSwgc28gdGhhdCYjMzk7cyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgdG8gY29uZmlybSB0aGUgY2hhbmdlcy4KCkkgc2hvdWxkIGFsc28gY2hlY2sgZnVuY3Rpb25zIGZvciB0aGUgb3RoZXIgaGFzaCB0eXBlcyB0byBzZWUgaG93IHRob3NlIGFyZSBiZWluZyBpbXBhY3RlZC4gU28gSSBzaG91bGQgZXhhbWluZSBgaGFzaF9uZXRuZXQ0X2FkZGAsIGBoYXNoX25ldHBvcnQ0X2FkZGAsIGBoYXNoX25ldGlmYWNlNF9hZGRgLCBgaGFzaF9pcHBvcnRuZXQ0X2FkZGAsIGFuZCBgaGFzaF9uZXRwb3J0bmV0NF9hZGRgLiBUaGlzIHBhdGNoIGlzIHNwZWNpZmljYWxseSBkZWFsaW5nIHdpdGggQ0lEUiBoYW5kbGluZywgYW5kIHRob3NlIGhhc2ggdHlwZXMsIGZyb20gdGhlIG5hbWUsIGhhdmUgYF9uZXRgIGluIHRoZW0gd2hpY2ggcHJvYmFibHkgdXNlcyBpdC4KClRoZSBjb25maWdzIHRoYXQgYXJlIGVuYWJsZWQgYXJlOiBgSVBfU0VUX0hBU0hfSVBQT1JUTkVUYCwgYElQX1NFVF9IQVNIX05FVGAsIGBJUF9TRVRfSEFTSF9ORVRJRkFDRWAsIGBJUF9TRVRfSEFTSF9ORVRORVRgLCBgSVBfU0VUX0hBU0hfTkVUUE9SVGAsIGFuZCBgSVBfU0VUX0hBU0hfTkVUUE9SVE5FVGAuCgpBaCwgYnV0IGhvbGQgb24uIFRoZSBwYXRjaCBpcyBtb2RpZnlpbmcgYGlwX3NldF9oYXNoX2dlbi5oYCB3aGljaCBpcyBpbmNsdWRlZCBieSAqYWxsKiB0aGUgaGFzaCB0eXBlcy4gSG93ZXZlciwgdGhlIENJRFIgbG9naWMgaXMgb25seSBjb25kaXRpb25hbGx5IGNvbXBpbGVkIGJhc2VkIG9uIGBJUF9TRVRfSEFTSF9XSVRIX05FVFNgLiBTbyB0aGUgaW1wYWN0IHdpbGwgYmUgbGltaXRlZCB0byBvbmx5IHRob3NlIHR5cGVzIHRoYXQgYWN0dWFsbHkgZGVmaW5lIHRoYXQuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoaWNoIGZpbGVzIGFjdHVhbGx5IGRlZmluZSBgSVBfU0VUX0hBU0hfV0lUSF9ORVRTYCB0byBmdWxseSB1bmRlcnN0YW5kIHRoZSBzY29wZSBvZiB0aGlzIGNoYW5nZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMTc6MDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7SVBfU0VUX0hBU0hfV0lUSF9ORVRTJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9pcHNldC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaD0xMTY9aHRhYmxlX3NpemUodTggaGJpdHMpXG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC0xMzAtXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oOjEzMTojaWZkZWYgSVBfU0VUX0hBU0hfV0lUSF9ORVRTXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTEzMi0jaWYgSVBTRVRfTkVUX0NPVU5UIFx1MDAzZSAxXG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC0xMzYtI2VuZGlmXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oOjEzNzojaWZkZWYgSVBfU0VUX0hBU0hfV0lUSF9ORVRTX1BBQ0tFRFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC0xMzgtLyogV2hlbiBjaWRyIGlzIHBhY2tlZCB3aXRoIG5vbWF0Y2gsIGNpZHIgLSAxIGlzIHN0b3JlZCBpbiB0aGUgZGF0YSBlbnRyeSAqL1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtMTQ4LVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaDoxNDk6I2VuZGlmIC8qIElQX1NFVF9IQVNIX1dJVEhfTkVUUyAqL1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC0xNTAtXG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaD0xNjM9c3RhdGljIGNvbnN0IHVuaW9uIG5mX2luZXRfYWRkciB6ZXJvbWFzayA9IHt9O1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtMjI0LSNkZWZpbmUgbXR5cGVfZGF0YV9lcXVhbFx0SVBTRVRfVE9LRU4oTVRZUEUsIF9kYXRhX2VxdWFsKVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaDoyMjU6I2lmZGVmIElQX1NFVF9IQVNIX1dJVEhfTkVUU1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC0yMjYtI2RlZmluZSBtdHlwZV9kb19kYXRhX21hdGNoXHRJUFNFVF9UT0tFTihNVFlQRSwgX2RvX2RhdGFfbWF0Y2gpXG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaD0zMDQ9c3RydWN0IG10eXBlX3Jlc2l6ZV9hZCB7XG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC0zMTItXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oOjMxMzojaWZkZWYgSVBfU0VUX0hBU0hfV0lUSF9ORVRTXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTMxNC0vKiBOZXR3b3JrIGNpZHIgc2l6ZSBib29rIGtlZXBpbmcgd2hlbiB0aGUgaGFzaCBzdG9yZXMgZGlmZmVyZW50XG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaD00Mjg9bXR5cGVfZmx1c2goc3RydWN0IGlwX3NldCAqc2V0KVxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtNDMwLVx0c3RydWN0IGh0eXBlICpoID0gc2V0LVx1MDAzZWRhdGE7XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oOjQzMTojaWZkZWYgSVBfU0VUX0hBU0hfV0lUSF9ORVRTXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTQzMi1cdHN0cnVjdCBuZXRfcHJlZml4ZXMgKm5ldHMsICp0bXA7XG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC00NTUtXHR9XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oOjQ1NjojaWZkZWYgSVBfU0VUX0hBU0hfV0lUSF9ORVRTXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTQ1Ny1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIElQU0VUX05FVF9DT1VOVDsgaSYjNDM7JiM0MzspIHtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oPTQ3Mz1tdHlwZV9haGFzaF9kZXN0cm95KHN0cnVjdCBpcF9zZXQgKnNldCwgc3RydWN0IGh0YWJsZSAqdCwgYm9vbCBleHRfZGVzdHJveSlcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtNDc0LXtcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg6NDc1OiNpZmRlZiBJUF9TRVRfSEFTSF9XSVRIX05FVFNcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtNDc2LVx0c3RydWN0IGh0eXBlICpoID0gc2V0LVx1MDAzZWRhdGE7XG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC00OTAtXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oOjQ5MTojaWZkZWYgSVBfU0VUX0hBU0hfV0lUSF9ORVRTXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTQ5Mi1cdGlmIChleHRfZGVzdHJveSlcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oPTUzNz1tdHlwZV9nY19kbyhzdHJ1Y3QgaXBfc2V0ICpzZXQsIHN0cnVjdCBodHlwZSAqaCwgc3RydWN0IGh0YWJsZSAqdCwgdTMyIHIpXG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC01NDItXHRzaXplX3QgZHNpemUgPSBzZXQtXHUwMDNlZHNpemU7XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oOjU0MzojaWZkZWYgSVBfU0VUX0hBU0hfV0lUSF9ORVRTXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTU0NC1cdHU4IGs7XG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC01NjUtXHRcdFx0c21wX21iX19hZnRlcl9hdG9taWMoKTtcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg6NTY2OiNpZmRlZiBJUF9TRVRfSEFTSF9XSVRIX05FVFNcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtNTY3LVx0XHRcdGZvciAoayA9IDA7IGsgXHUwMDNjIElQU0VUX05FVF9DT1VOVDsgayYjNDM7JiM0MzspXG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaD02Nzg9bXR5cGVfcmVzaXplKHN0cnVjdCBpcF9zZXQgKnNldCwgYm9vbCByZXRyaWVkKVxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtNjgzLVx0c2l6ZV90IGhzaXplLCBkc2l6ZSA9IHNldC1cdTAwM2Vkc2l6ZTtcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg6Njg0OiNpZmRlZiBJUF9TRVRfSEFTSF9XSVRIX05FVFNcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtNjg1LVx0dTggZmxhZ3M7XG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC02OTUtXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oOjY5NjojaWZkZWYgSVBfU0VUX0hBU0hfV0lUSF9ORVRTXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTY5Ny1cdHRtcCA9IGttYWxsb2MoZHNpemUsIEdGUF9LRVJORUwpO1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtNzUzLVx0XHRcdFx0XHRjb250aW51ZTtcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg6NzU0OiNpZmRlZiBJUF9TRVRfSEFTSF9XSVRIX05FVFNcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtNzU1LVx0XHRcdFx0LyogV2UgaGF2ZSByZWFkZXJzIHJ1bm5pbmcgcGFyYWxsZWwgd2l0aCB1cyxcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTgwNy1cdFx0XHRcdHQtXHUwMDNlaHJlZ2lvbltucl0uZWxlbWVudHMmIzQzOyYjNDM7O1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaDo4MDg6I2lmZGVmIElQX1NFVF9IQVNIX1dJVEhfTkVUU1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC04MDktXHRcdFx0XHRtdHlwZV9kYXRhX3Jlc2V0X2ZsYWdzKGQsIFx1MDAyNmZsYWdzKTtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTg0NC1vdXQ6XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oOjg0NTojaWZkZWYgSVBfU0VUX0hBU0hfV0lUSF9ORVRTXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTg0Ni1cdGtmcmVlKHRtcCk7XG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaD05MTQ9bXR5cGVfYWRkKHN0cnVjdCBpcF9zZXQgKnNldCwgdm9pZCAqdmFsdWUsIGNvbnN0IHN0cnVjdCBpcF9zZXRfZXh0ICpleHQsXG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC05OTUtXHRcdGlmICghZGVsZXRlZCkge1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaDo5OTY6I2lmZGVmIElQX1NFVF9IQVNIX1dJVEhfTkVUU1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC05OTctXHRcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgSVBTRVRfTkVUX0NPVU5UOyBpJiM0MzsmIzQzOylcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTEwNDEtXHR0LVx1MDAzZWhyZWdpb25bcl0uZWxlbWVudHMmIzQzOyYjNDM7O1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaDoxMDQyOiNpZmRlZiBJUF9TRVRfSEFTSF9XSVRIX05FVFNcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtMTA0My1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIElQU0VUX05FVF9DT1VOVDsgaSYjNDM7JiM0MzspXG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC0xMDQ3LW92ZXJ3cml0ZV9leHRlbnNpb25zOlxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaDoxMDQ4OiNpZmRlZiBJUF9TRVRfSEFTSF9XSVRIX05FVFNcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtMTA0OS1cdG10eXBlX2RhdGFfc2V0X2ZsYWdzKGRhdGEsIGZsYWdzKTtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oPTExMDk9bXR5cGVfZGVsKHN0cnVjdCBpcF9zZXQgKnNldCwgdm9pZCAqdmFsdWUsIGNvbnN0IHN0cnVjdCBpcF9zZXRfZXh0ICpleHQsXG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC0xMTU0LVx0XHR0LVx1MDAzZWhyZWdpb25bcl0uZWxlbWVudHMtLTtcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg6MTE1NTojaWZkZWYgSVBfU0VUX0hBU0hfV0lUSF9ORVRTXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTExNTYtXHRcdGZvciAoaiA9IDA7IGogXHUwMDNjIElQU0VUX05FVF9DT1VOVDsgaiYjNDM7JiM0MzspXG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaD0xMjIxPW10eXBlX2RhdGFfbWF0Y2goc3RydWN0IG10eXBlX2VsZW0gKmRhdGEsIGNvbnN0IHN0cnVjdCBpcF9zZXRfZXh0ICpleHQsXG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC0xMjI5LVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaDoxMjMwOiNpZmRlZiBJUF9TRVRfSEFTSF9XSVRIX05FVFNcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtMTIzMS0vKiBTcGVjaWFsIHRlc3QgZnVuY3Rpb24gd2hpY2ggdGFrZXMgaW50byBhY2NvdW50IHRoZSBkaWZmZXJlbnQgbmV0d29ya1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg9MTMwNT1tdHlwZV90ZXN0KHN0cnVjdCBpcF9zZXQgKnNldCwgdm9pZCAqdmFsdWUsIGNvbnN0IHN0cnVjdCBpcF9zZXRfZXh0ICpleHQsXG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC0xMzE4LVx0dCA9IHJjdV9kZXJlZmVyZW5jZV9iaChoLVx1MDAzZXRhYmxlKTtcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg6MTMxOTojaWZkZWYgSVBfU0VUX0hBU0hfV0lUSF9ORVRTXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTEzMjAtXHQvKiBJZiB3ZSB0ZXN0IGFuIElQIGFkZHJlc3MgYW5kIG5vdCBhIG5ldHdvcmsgYWRkcmVzcyxcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oPTE1NTI9SVBTRVRfVE9LRU4oSFRZUEUsIF9jcmVhdGUpKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGlwX3NldCAqc2V0LFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtMTU2NC0jZW5kaWZcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg6MTU2NTojaWZkZWYgSVBfU0VUX0hBU0hfV0lUSF9ORVRTXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTE1NjYtXHRzdHJ1Y3QgbmV0X3ByZWZpeGVzICpuZXRzO1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtMTY3NC1cdFx0Z290byBmcmVlX3Q7XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oOjE2NzU6I2lmZGVmIElQX1NFVF9IQVNIX1dJVEhfTkVUU1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC0xNjc2LVx0Zm9yIChpID0gMDsgaSBcdTAwM2MgSVBTRVRfTkVUX0NPVU5UOyBpJiM0MzsmIzQzOykge1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtMTc0OS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg6MTc1MDojaWZkZWYgSVBfU0VUX0hBU0hfV0lUSF9ORVRTXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTE3NTEtZnJlZV9ocmVnaW9uOlxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0bmV0LmM9MzY9TU9EVUxFX0FMSUFTKFwmIzM0O2lwX3NldF9oYXNoOmlwLHBvcnQsbmV0XCYjMzQ7KTtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwcG9ydG5ldC5jLTQ0LSAqL1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcHBvcnRuZXQuYzo0NTojZGVmaW5lIElQX1NFVF9IQVNIX1dJVEhfTkVUU19QQUNLRURcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0bmV0LmMtNDYtI2RlZmluZSBJUF9TRVRfSEFTSF9XSVRIX1BST1RPXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwcG9ydG5ldC5jOjQ3OiNkZWZpbmUgSVBfU0VUX0hBU0hfV0lUSF9ORVRTXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwcG9ydG5ldC5jLTQ4LVxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0LmM9MzM9TU9EVUxFX0FMSUFTKFwmIzM0O2lwX3NldF9oYXNoOm5ldFwmIzM0Oyk7XG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXQuYy0zNi0jZGVmaW5lIEhUWVBFXHRcdGhhc2hfbmV0XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldC5jOjM3OiNkZWZpbmUgSVBfU0VUX0hBU0hfV0lUSF9ORVRTXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldC5jLTM4LVxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0aWZhY2UuYz0zNT1NT0RVTEVfQUxJQVMoXCYjMzQ7aXBfc2V0X2hhc2g6bmV0LGlmYWNlXCYjMzQ7KTtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldGlmYWNlLmMtMzgtI2RlZmluZSBIVFlQRVx0XHRoYXNoX25ldGlmYWNlXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldGlmYWNlLmM6Mzk6I2RlZmluZSBJUF9TRVRfSEFTSF9XSVRIX05FVFNcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0aWZhY2UuYy00MC0jZGVmaW5lIElQX1NFVF9IQVNIX1dJVEhfTVVMVElcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldG5ldC5jPTMyPU1PRFVMRV9BTElBUyhcJiMzNDtpcF9zZXRfaGFzaDpuZXQsbmV0XCYjMzQ7KTtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldG5ldC5jLTM1LSNkZWZpbmUgSFRZUEVcdFx0aGFzaF9uZXRuZXRcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0bmV0LmM6MzY6I2RlZmluZSBJUF9TRVRfSEFTSF9XSVRIX05FVFNcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0bmV0LmMtMzctI2RlZmluZSBJUF9TRVRfSEFTSF9XSVRIX05FVE1BU0tcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldHBvcnQuYz0zNT1NT0RVTEVfQUxJQVMoXCYjMzQ7aXBfc2V0X2hhc2g6bmV0LHBvcnRcJiMzNDspO1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0cG9ydC5jLTM5LSNkZWZpbmUgSVBfU0VUX0hBU0hfV0lUSF9QUk9UT1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRwb3J0LmM6NDA6I2RlZmluZSBJUF9TRVRfSEFTSF9XSVRIX05FVFNcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0cG9ydC5jLTQxLVxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0cG9ydC5jLTQ1LSAqL1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRwb3J0LmM6NDY6I2RlZmluZSBJUF9TRVRfSEFTSF9XSVRIX05FVFNfUEFDS0VEXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldHBvcnQuYy00Ny1cbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldHBvcnRuZXQuYz0zMj1NT0RVTEVfQUxJQVMoXCYjMzQ7aXBfc2V0X2hhc2g6bmV0LHBvcnQsbmV0XCYjMzQ7KTtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldHBvcnRuZXQuYy0zNi0jZGVmaW5lIElQX1NFVF9IQVNIX1dJVEhfUFJPVE9cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0cG9ydG5ldC5jOjM3OiNkZWZpbmUgSVBfU0VUX0hBU0hfV0lUSF9ORVRTXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldHBvcnRuZXQuYy0zOC0jZGVmaW5lIElQU0VUX05FVF9DT1VOVCAyXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDE3OjAyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMxMTc2CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogNDAyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgSVAgU2V0IEhhc2ggRnVuY3Rpb25zKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGluLiBJIHNlZSBhIHN1aXRlIG9mIEMgZmlsZXM6IGBpcF9zZXRfaGFzaF9pcHBvcnRuZXQuY2AsIGBpcF9zZXRfaGFzaF9uZXQuY2AsIGV0Yy4gSW1tZWRpYXRlbHksIEkmIzM5O20gemVyb2luZyBpbiBvbiB0aGUgZnVuY3Rpb25zIHRoYXQgYXJlICpnZW5lcmF0ZWQqIGZvciB0aGVzZSBoYXNoIHR5cGVzLiBUaGF0JiMzOTtzIHdoZXJlIHRoZSBjb3JlIGxvZ2ljIHdpbGwgYmUuIEkmIzM5O20gdGhpbmtpbmcgb2YgZnVuY3Rpb25zIGxpa2UgYGhhc2hfbmV0NF9hZGRgLCBgaGFzaF9uZXQ0X2RlbGAsIGFuZCB0aGUgb3RoZXJzIEkgZXhwZWN0IHRvIHNlZSBmb3IgSVB2NCBhbmQgSVB2NiwgdGhlIHZhcmlhdGlvbnMgZm9yIHBvcnQgYW5kIGludGVyZmFjZSBjb21iaW5hdGlvbnM6IGBoYXNoX25ldDZfYWRkYCwgYGhhc2hfbmV0cG9ydDRfYWRkYCwgYGhhc2hfbmV0aWZhY2U2X2FkZGAsIGFuZCBzbyBvbi4gTXkgZm9jdXMgaXMgb24gdGhlIGFkZC9kZWwvdGVzdC9yZXNpemUvZ2Mgb3BlcmF0aW9ucyDigJMgdGhlIGZ1bmRhbWVudGFsIGJ1aWxkaW5nIGJsb2Nrcy4gSSBrbm93IGZyb20gZXhwZXJpZW5jZSB0aGF0IHRoZSBwZXJmb3JtYW5jZSBvZiB0aGVzZSBoYXNoIHNldHMgcmVhbGx5IGhpbmdlcyBvbiB0aGUgZWZmaWNpZW5jeSBvZiB0aG9zZSBmdW5jdGlvbnMuCgpTcGVjaWZpY2FsbHksIEkgd2FudCB0byBjb25maXJtIHdoZXRoZXIgYGhhc2hfbmV0NF90ZXN0X2NpZHJzYCBpcyBhY3R1YWxseSBnZW5lcmF0ZWQuIEkgcmVjYWxsIHRoYXQgaWYgYElQX1NFVF9IQVNIX1dJVEhfTkVUU2AgaXMgZGVmaW5lZCwgdGhpcyBjYXBhYmlsaXR5IGlzIHN1cHBvcnRlZC4gQSBxdWljayBzY2FuIG9mIHRoZSBjb2RlIHZlcmlmaWVzIHRoYXQgYG10eXBlX3Rlc3RfY2lkcnNgIGlzIGluZGVlZCBkZWZpbmVkIGJhc2VkIG9uIHRoYXQgY29uZGl0aW9uLiBUaW1lIHRvIGNoZWNrIGBpcF9zZXRfaGFzaF9nZW4uaGAgYW5kIGNvbmZpcm0gaG93IHRob3NlIGZ1bmN0aW9ucyBhcmUgZGVmaW5lZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMTc6MDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bXR5cGVfdGVzdF9jaWRycyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvaXBzZXQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg9MTYzPXN0YXRpYyBjb25zdCB1bmlvbiBuZl9pbmV0X2FkZHIgemVyb21hc2sgPSB7fTtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTIwNS0jdW5kZWYgbXR5cGVfZGVsXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oOjIwNjojdW5kZWYgbXR5cGVfdGVzdF9jaWRyc1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC0yMDctI3VuZGVmIG10eXBlX3Rlc3Rcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTI1MC0jZGVmaW5lIG10eXBlX2RlbFx0XHRJUFNFVF9UT0tFTihNVFlQRSwgX2RlbClcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg6MjUxOiNkZWZpbmUgbXR5cGVfdGVzdF9jaWRyc1x0SVBTRVRfVE9LRU4oTVRZUEUsIF90ZXN0X2NpZHJzKVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC0yNTItI2RlZmluZSBtdHlwZV90ZXN0XHRcdElQU0VUX1RPS0VOKE1UWVBFLCBfdGVzdClcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oPTEyMzQ9c3RhdGljIGludFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaDoxMjM1Om10eXBlX3Rlc3RfY2lkcnMoc3RydWN0IGlwX3NldCAqc2V0LCBzdHJ1Y3QgbXR5cGVfZWxlbSAqZCxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtMTIzNi1cdFx0IGNvbnN0IHN0cnVjdCBpcF9zZXRfZXh0ICpleHQsXG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaD0xMzA1PW10eXBlX3Rlc3Qoc3RydWN0IGlwX3NldCAqc2V0LCB2b2lkICp2YWx1ZSwgY29uc3Qgc3RydWN0IGlwX3NldF9leHQgKmV4dCxcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTEzMjYtXHRpZiAoaSA9PSBJUFNFVF9ORVRfQ09VTlQpIHtcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg6MTMyNzpcdFx0cmV0ID0gbXR5cGVfdGVzdF9jaWRycyhzZXQsIGQsIGV4dCwgbWV4dCwgZmxhZ3MpO1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC0xMzI4LVx0XHRnb3RvIG91dDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMTc6MDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzI0MjkKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiA2NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOgoKKipBbmFseXppbmcgTmV0d29yayBIYXNoIFRhYmxlIE9wZXJhdGlvbnMqKgoKT2theSwgc28gSSBzZWUgYSBnZW5lcmF0ZWQgYGhhc2hfbmV0NF90ZXN0X2NpZHJzYCBmdW5jdGlvbi4gVGhhdCYjMzk7cyBnb29kLCBsaWtlbHkgZm9yIHF1aWNrbHkgdGVzdGluZyBDSURScyB3aXRoaW4gdGhlIG5ldHdvcmsgaGFzaCB0YWJsZS4gQW5kIEkmIzM5O20gc2VlaW5nIHN1cHBvcnRpbmcgZnVuY3Rpb25zOiBgaGFzaF9uZXQ0X2FkZGAsIGBoYXNoX25ldDRfZGVsYCwgYGhhc2hfbmV0NF9yZXNpemVgLCBhbmQgYGhhc2hfbmV0NF9nY2AuIFRoYXQgbWFrZXMgc2Vuc2UgLSB3ZSBuZWVkIGZ1bmN0aW9ucyB0byBtYW5pcHVsYXRlIHRoZSB0YWJsZSwgcmVzaXplIGl0IGFzIG5lZWRlZCwgYW5kIGdhcmJhZ2UgY29sbGVjdCBwb3RlbnRpYWxseSBzdGFsZSBlbnRyaWVzLiBNeSBpbW1lZGlhdGUgY29uY2VybiwgYXMgYW4gZXhwZXJ0IGluIHRoaXMsIGlzIGhvdyB0aGUgcmVzaXplIGFuZCBHQyBhcmUgYmVpbmcgaGFuZGxlZC4gSSYjMzk7bSBnb2luZyB0byBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBgbXR5cGVfcmVzaXplYCBhbmQgYG10eXBlX2djYCBmdW5jdGlvbnMgbm93IHRvIGVuc3VyZSB0aGVpciBlZmZpY2llbnQgYW5kIGNvcnJlY3Qgb3BlcmF0aW9uLCB3aGljaCBpcyBjcml0aWNhbCBmb3IgZ29vZCBwZXJmb3JtYW5jZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMTc6MDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bXR5cGVfcmVzaXplJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9pcHNldC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaD0xNjM9c3RhdGljIGNvbnN0IHVuaW9uIG5mX2luZXRfYWRkciB6ZXJvbWFzayA9IHt9O1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtMjA4LSN1bmRlZiBtdHlwZV91cmVmXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oOjIwOTojdW5kZWYgbXR5cGVfcmVzaXplXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTIxMC0jdW5kZWYgbXR5cGVfZXh0X3NpemVcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg6MjExOiN1bmRlZiBtdHlwZV9yZXNpemVfYWRcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtMjEyLSN1bmRlZiBtdHlwZV9oZWFkXG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC0yNTMtI2RlZmluZSBtdHlwZV91cmVmXHRcdElQU0VUX1RPS0VOKE1UWVBFLCBfdXJlZilcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg6MjU0OiNkZWZpbmUgbXR5cGVfcmVzaXplXHRcdElQU0VUX1RPS0VOKE1UWVBFLCBfcmVzaXplKVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC0yNTUtI2RlZmluZSBtdHlwZV9leHRfc2l6ZVx0XHRJUFNFVF9UT0tFTihNVFlQRSwgX2V4dF9zaXplKVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaDoyNTY6I2RlZmluZSBtdHlwZV9yZXNpemVfYWRcdFx0SVBTRVRfVE9LRU4oTVRZUEUsIF9yZXNpemVfYWQpXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTI1Ny0jZGVmaW5lIG10eXBlX2hlYWRcdFx0SVBTRVRfVE9LRU4oTVRZUEUsIF9oZWFkKVxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg9MjgzPXN0cnVjdCBodHlwZSB7XG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC0zMDMtLyogQUREfERFTCBlbnRyaWVzIHNhdmVkIGR1cmluZyByZXNpemUgKi9cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg6MzA0OnN0cnVjdCBtdHlwZV9yZXNpemVfYWQge1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC0zMDUtXHRzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7XG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaD02Nzc9c3RhdGljIGludFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaDo2Nzg6bXR5cGVfcmVzaXplKHN0cnVjdCBpcF9zZXQgKnNldCwgYm9vbCByZXRyaWVkKVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC02Nzkte1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtNjkxLVx0c3RydWN0IGxpc3RfaGVhZCAqbCwgKmx0O1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaDo2OTI6XHRzdHJ1Y3QgbXR5cGVfcmVzaXplX2FkICp4O1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC02OTMtXHR1MzIgaSwgaiwgciwgbnIsIGtleTtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTgyOC1cdGxpc3RfZm9yX2VhY2hfc2FmZShsLCBsdCwgXHUwMDI2b3JpZy1cdTAwM2VhZCkge1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaDo4Mjk6XHRcdHggPSBsaXN0X2VudHJ5KGwsIHN0cnVjdCBtdHlwZV9yZXNpemVfYWQsIGxpc3QpO1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC04MzAtXHRcdGlmICh4LVx1MDAzZWFkID09IElQU0VUX0FERCkge1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg9OTE0PW10eXBlX2FkZChzdHJ1Y3QgaXBfc2V0ICpzZXQsIHZvaWQgKnZhbHVlLCBjb25zdCBzdHJ1Y3QgaXBfc2V0X2V4dCAqZXh0LFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtMTA3My1cdFx0LyogUmVzaXplIGlzIGluIHByb2Nlc3MgYW5kIGtlcm5lbCBzaWRlIGFkZCwgc2F2ZSB2YWx1ZXMgKi9cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg6MTA3NDpcdFx0c3RydWN0IG10eXBlX3Jlc2l6ZV9hZCAqeDtcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtMTA3NS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg6MTA3NjpcdFx0eCA9IGt6YWxsb2Nfb2JqKHN0cnVjdCBtdHlwZV9yZXNpemVfYWQsIEdGUF9BVE9NSUMpO1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC0xMDc3LVx0XHRpZiAoIXgpXG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaD0xMTA5PW10eXBlX2RlbChzdHJ1Y3QgaXBfc2V0ICpzZXQsIHZvaWQgKnZhbHVlLCBjb25zdCBzdHJ1Y3QgaXBfc2V0X2V4dCAqZXh0LFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtMTExNi1cdHN0cnVjdCBoYnVja2V0ICpuO1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaDoxMTE3Olx0c3RydWN0IG10eXBlX3Jlc2l6ZV9hZCAqeCA9IE5VTEw7XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTExMTgtXHRpbnQgaSwgaiwgaywgciwgcmV0ID0gLUlQU0VUX0VSUl9FWElTVDtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTExNjUtXHRcdFx0ICovXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oOjExNjY6XHRcdFx0eCA9IGt6YWxsb2Nfb2JqKHN0cnVjdCBtdHlwZV9yZXNpemVfYWQsIEdGUF9BVE9NSUMpO1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC0xMTY3LVx0XHRcdGlmICh4KSB7XG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaD0xNTMxPXN0YXRpYyBjb25zdCBzdHJ1Y3QgaXBfc2V0X3R5cGVfdmFyaWFudCBtdHlwZV92YXJpYW50ID0ge1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtMTU0My1cdC51cmVmXHQ9IG10eXBlX3VyZWYsXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oOjE1NDQ6XHQucmVzaXplXHQ9IG10eXBlX3Jlc2l6ZSxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtMTU0NS1cdC5zYW1lX3NldCA9IG10eXBlX3NhbWVfc2V0LFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMiAxNzowMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNDE1NAoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBhcyBpZiBpdCYjMzk7cyBteSBvd24gaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipEZWVwIERpdmUgaW50byBgbXR5cGVfZ2NgKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXNzZWN0IHRoaXMuIFdoZW4gSSBzZWUgYG10eXBlX2djYCwgbXkgYnJhaW4gaW1tZWRpYXRlbHkganVtcHMgdG8gZ2FyYmFnZSBjb2xsZWN0aW9uIGFuZCBtZW1vcnkgbWFuYWdlbWVudCwgcGFydGljdWxhcmx5IGFzIGl0IHJlbGF0ZXMgdG8sIHByZXN1bWFibHksIHNvbWUga2luZCBvZiBtZWRpYSB0eXBlIHJlcHJlc2VudGF0aW9uLiBUaGUgbmFtaW5nIHN1Z2dlc3RzIHRoYXQgJiMzNDttdHlwZSYjMzQ7IGlzIGEgbWVkaWEgdHlwZSBhbmQgJiMzNDtnYyYjMzQ7IGlzIHByb2JhYmx5IGFuIGluZGljYXRvciBmb3IgZ2FyYmFnZSBjb2xsZWN0aW9uLgoKTXkgZmlyc3QgdGhvdWdodCBpcyBhbHdheXMgZWZmaWNpZW5jeS4gSXMgdGhpcyBhIHN5c3RlbSB3aGVyZSB3ZSYjMzk7cmUgdHJhY2tpbmcgbWVkaWEgdHlwZXMgaW4gYSB3YXkgdGhhdCByZXF1aXJlcyBleHBsaWNpdCBtYW5hZ2VtZW50LCBvciBhcmUgd2UgaG9waW5nIHRoZSBnYXJiYWdlIGNvbGxlY3RvciBjYW4gaGFuZGxlIG1vc3Qgb2YgdGhlIGNsZWFudXA/IFdoYXQgYXJlIHRoZSBpbXBsaWNhdGlvbnMgb2YgZGlmZmVyZW50IG1lZGlhIHR5cGVzIG9uIHRoZSBoZWFwPyBEb2VzIHRoaXMgYG10eXBlX2djYCByZWxhdGUgdG8gYSBwb29sIG9mIG1lZGlhIHR5cGUgb2JqZWN0IGluc3RhbmNlcyBvciBpcyBpdCByZWxhdGVkIHRvIHRoZSBkYXRhIHN0cnVjdHVyZXMgc3RvcmluZyB0aGUgZGF0YSBmb3IgdGhlIGdpdmVuIG1lZGlhIHR5cGU/CgpJJiMzOTttIGluc3RhbnRseSBjb25zaWRlcmluZyBlZGdlIGNhc2VzLiBJZiBgbXR5cGVfZ2NgIGlzIGEgZmxhZyBvciBhIG1ldGFkYXRhIGF0dHJpYnV0ZSBvbiBhIG1lZGlhIHR5cGUgcmVwcmVzZW50YXRpb24sIGhvdyBpcyB0aGlzIGhhbmRsZWQgaW4gYSBtdWx0aXRocmVhZGVkIGVudmlyb25tZW50PyBBcmUgdGhlcmUgdGhyZWFkLXNhZmUgbWVjaGFuaXNtcyBpbiBwbGFjZT8gT3IgaXMgaXQgcHJlc3VtZWQgdG8gYmUgc2luZ2xlLXRocmVhZGVkPyBXaGF0IGhhcHBlbnMgaWYgeW91IGhhdmUgY3Jvc3MtcmVmZXJlbmNlcz8gSXMgdGhlcmUgYSBjeWNsaWMgZGVwZW5kZW5jeSB0aGF0IHRoZSBHQyBtaWdodCBub3QgaGFuZGxlIHdlbGw/IEhvdyB3b3VsZCB0aGF0IG1hbmlmZXN0PwoKVGhlbiBJ4oCZbSB0aGlua2luZyBhYm91dCB0aGUgdW5kZXJseWluZyByZXByZXNlbnRhdGlvbi4gV2hhdCBkb2VzIGFuICYjMzQ7bXR5cGUmIzM0OyBldmVuICpsb29rKiBsaWtlIGhlcmU/IElzIGl0IGEgc3RyaW5nLCBhbiBpbnRlZ2VyIGVudW0sIGEgbW9yZSBjb21wbGV4IG9iamVjdCB3aXRoIG5lc3RlZCBkYXRhIHN0cnVjdHVyZXM/IEhvdyBpcyBpdCBzdG9yZWQ/IEluIGEgaGFzaCB0YWJsZT8gQSB0cmVlPyBBIGxpbmtlZCBsaXN0PyBFYWNoIGNob2ljZSBoYXMgR0MgaW1wbGljYXRpb25zLiBIb3cgb2Z0ZW4gYXJlIHRoZXNlIG10eXBlcyBjcmVhdGVkLCBtb2RpZmllZCwgYW5kIGRlc3Ryb3llZD8gQXJlIHdlIHRhbGtpbmcgYWJvdXQgYSBtYXNzaXZlLCBmcmVxdWVudGx5IGNoYW5naW5nIG1lZGlhIHR5cGUgY2F0YWxvZywgb3IgYSByZWxhdGl2ZWx5IHN0YXRpYyBzZXQ/IEFuZCB3aGF0IGxldmVsIG9mIEdDIGNvbnRyb2wgZG8gd2UgaGF2ZT8KCkZpbmFsbHksIHRoZSBkZXNpZ24gaXMga2V5LiBEaWQgc29tZW9uZSBpbXBsZW1lbnQgdGhpcyB3aXRoIGV4cGxpY2l0IG1lbW9yeSBjb250cm9sIG9yIGltcGxpY2l0bHk/IFRoaXMgcmVhbGx5IGltcGFjdHMgbXkgbmV4dCBxdWVzdGlvbiwgaXMgdGhlIEdDIGltcGxlbWVudGF0aW9uIHRoZSBib3R0bGVuZWNrPyBBcmUgdGhlcmUgb3B0aW1pemF0aW9uIG9wcG9ydHVuaXRpZXMgaGVyZT8KCk92ZXJhbGwsIG15IG1pbmQgaXMgcmFjaW5nIHRocm91Z2ggYWxsIHRoZSBwb3RlbnRpYWwgZGVzaWduIGNob2ljZXMgYW5kIHRoZWlyIHBvdGVudGlhbCBtZW1vcnkgbWFuYWdlbWVudCBwaXRmYWxscyByZWxhdGVkIHRvIGdhcmJhZ2UgY29sbGVjdGlvbi4gSeKAmW0gc3RhcnRpbmcgdG8gbWVudGFsbHkgYnVpbGQgYSBjaGVja2xpc3Qgb2YgcXVlc3Rpb25zIHRvIGFzaywgZGVzaWduIGRlY2lzaW9ucyB0byBldmFsdWF0ZSwgYW5kIHBvdGVudGlhbCBib3R0bGVuZWNrcyB0byBhbnRpY2lwYXRlLiBMZXQmIzM5O3MgZGlnIGRlZXBlci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMTc6MDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bXR5cGVfZ2MmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL2lwc2V0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfZ2VuLmgtOS0jZGVmaW5lIG10eXBlX2RvX3Rlc3RcdFx0SVBTRVRfVE9LRU4oTVRZUEUsIF9kb190ZXN0KVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX2dlbi5oOjEwOiNkZWZpbmUgbXR5cGVfZ2NfdGVzdFx0XHRJUFNFVF9UT0tFTihNVFlQRSwgX2djX3Rlc3QpXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfZ2VuLmgtMTEtI2RlZmluZSBtdHlwZV9pc19maWxsZWRcdFx0SVBTRVRfVE9LRU4oTVRZUEUsIF9pc19maWxsZWQpXG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX2dlbi5oLTE4LSNkZWZpbmUgbXR5cGVfYWRkX3RpbWVvdXRcdElQU0VUX1RPS0VOKE1UWVBFLCBfYWRkX3RpbWVvdXQpXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfZ2VuLmg6MTk6I2RlZmluZSBtdHlwZV9nY19pbml0XHRcdElQU0VUX1RPS0VOKE1UWVBFLCBfZ2NfaW5pdClcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9nZW4uaC0yMC0jZGVmaW5lIG10eXBlX2thZHRcdFx0SVBTRVRfVE9LRU4oTVRZUEUsIF9rYWR0KVxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9nZW4uaC0zMS0jZGVmaW5lIG10eXBlX2xpc3RcdFx0SVBTRVRfVE9LRU4oTVRZUEUsIF9saXN0KVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX2dlbi5oOjMyOiNkZWZpbmUgbXR5cGVfZ2NcdFx0SVBTRVRfVE9LRU4oTVRZUEUsIF9nYylcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9nZW4uaC0zMy0jZGVmaW5lIG10eXBlX2NhbmNlbF9nY1x0XHRJUFNFVF9UT0tFTihNVFlQRSwgX2NhbmNlbF9nYylcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfZ2VuLmg9Mzg9c3RhdGljIHZvaWRcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9nZW4uaDozOTptdHlwZV9nY19pbml0KHN0cnVjdCBpcF9zZXQgKnNldCwgdm9pZCAoKmdjKShzdHJ1Y3QgdGltZXJfbGlzdCAqdCkpXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfZ2VuLmgtNDAte1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9nZW4uaD0yNjU9c3RhdGljIHZvaWRcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9nZW4uaDoyNjY6bXR5cGVfZ2Moc3RydWN0IHRpbWVyX2xpc3QgKnQpXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfZ2VuLmgtMjY3LXtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfZ2VuLmgtMjc3LVx0Zm9yIChpZCA9IDA7IGlkIFx1MDAzYyBtYXAtXHUwMDNlZWxlbWVudHM7IGlkJiM0MzsmIzQzOylcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9nZW4uaDoyNzg6XHRcdGlmIChtdHlwZV9nY190ZXN0KGlkLCBtYXAsIHNldC1cdTAwM2Vkc2l6ZSkpIHtcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9nZW4uaC0yNzktXHRcdFx0eCA9IGdldF9leHQoc2V0LCBtYXAsIGlkKTtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oPTE2Mz1zdGF0aWMgY29uc3QgdW5pb24gbmZfaW5ldF9hZGRyIHplcm9tYXNrID0ge307XG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC0yMTMtI3VuZGVmIG10eXBlX2xpc3Rcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg6MjE0OiN1bmRlZiBtdHlwZV9nY19kb1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaDoyMTU6I3VuZGVmIG10eXBlX2djXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oOjIxNjojdW5kZWYgbXR5cGVfZ2NfaW5pdFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC0yMTctI3VuZGVmIG10eXBlX2NhbmNlbF9nY1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtMjU4LSNkZWZpbmUgbXR5cGVfbGlzdFx0XHRJUFNFVF9UT0tFTihNVFlQRSwgX2xpc3QpXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oOjI1OTojZGVmaW5lIG10eXBlX2djX2RvXHRcdElQU0VUX1RPS0VOKE1UWVBFLCBfZ2NfZG8pXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oOjI2MDojZGVmaW5lIG10eXBlX2djXHRcdElQU0VUX1RPS0VOKE1UWVBFLCBfZ2MpXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oOjI2MTojZGVmaW5lIG10eXBlX2djX2luaXRcdFx0SVBTRVRfVE9LRU4oTVRZUEUsIF9nY19pbml0KVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC0yNjItI2RlZmluZSBtdHlwZV9jYW5jZWxfZ2NcdFx0SVBTRVRfVE9LRU4oTVRZUEUsIF9jYW5jZWxfZ2MpXG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaD01MzY9c3RhdGljIHZvaWRcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg6NTM3Om10eXBlX2djX2RvKHN0cnVjdCBpcF9zZXQgKnNldCwgc3RydWN0IGh0eXBlICpoLCBzdHJ1Y3QgaHRhYmxlICp0LCB1MzIgcilcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtNTM4LXtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oPTYwOT1zdGF0aWMgdm9pZFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaDo2MTA6bXR5cGVfZ2Moc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC02MTEte1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtNjM3LVx0aWYgKCF0LVx1MDAzZXJlc2l6aW5nKVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaDo2Mzg6XHRcdG10eXBlX2djX2RvKHNldCwgaCwgdCwgcik7XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTYzOS1cdHNwaW5fdW5sb2NrX2JoKFx1MDAyNmdjLVx1MDAzZWxvY2spO1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg9NjUwPXN0YXRpYyB2b2lkXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oOjY1MTptdHlwZV9nY19pbml0KHN0cnVjdCBodGFibGVfZ2MgKmdjKVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC02NTIte1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaDo2NTM6XHRJTklUX0RFRkVSUkFCTEVfV09SSyhcdTAwMjZnYy1cdTAwM2Vkd29yaywgbXR5cGVfZ2MpO1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC02NTQtXHRxdWV1ZV9kZWxheWVkX3dvcmsoc3lzdGVtX3Bvd2VyX2VmZmljaWVudF93cSwgXHUwMDI2Z2MtXHUwMDNlZHdvcmssIEhaKTtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oPTkxND1tdHlwZV9hZGQoc3RydWN0IGlwX3NldCAqc2V0LCB2b2lkICp2YWx1ZSwgY29uc3Qgc3RydWN0IGlwX3NldF9leHQgKmV4dCxcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTkzOC1cdFx0aWYgKFNFVF9XSVRIX1RJTUVPVVQoc2V0KSlcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg6OTM5Olx0XHRcdG10eXBlX2djX2RvKHNldCwgaCwgdCwgcik7XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTk0MC1cdFx0bWF4ZWxlbSA9IGgtXHUwMDNlbWF4ZWxlbTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMTc6MDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzYzNDIKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiA4OTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBHZW5lcmF0ZWQgSGFzaCBGdW5jdGlvbnMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoZSBnZW5lcmF0ZWQgaGFzaCBmdW5jdGlvbnMuIFdlJiMzOTt2ZSBnb3QgYGhhc2hfbmV0NF9nY2AsIGBoYXNoX25ldDRfZ2NfZG9gLCBgaGFzaF9uZXQ0X3Jlc2l6ZWAsIGBoYXNoX25ldDRfYWRkYCwgYW5kIGBoYXNoX25ldDRfZGVsYC4gSSBzZWUgdGhhdCBgaGFzaF9uZXQ0X3Rlc3RfY2lkcnNgIGlzIGNvbmRpdGlvbmFsOyBpdCYjMzk7cyBvbmx5IGdlbmVyYXRlZCBpZiBgSVBfU0VUX0hBU0hfV0lUSF9ORVRTYCBpcyBkZWZpbmVkLiBHb29kIHRvIG5vdGUuCgpJJiMzOTttIHRoaW5raW5nLCBpbnN0ZWFkIG9mIGdvaW5nIHRocm91Z2ggdGhlIG9iamVjdCBmaWxlIHdpdGggYHJlYWQtZmlsZWAgb3IgYGdyZXBwZXJgLCBJIGNhbiBqdXN0IGxpc3QgdGhlbSBiYXNlZCBvbiB0aGUgYE1UWVBFYCB2YWx1ZXMuIFRoYXQmIzM5O3MgY2xlYW5lci4gTGV0JiMzOTtzIHNlZS4uLiB0aGUgYE1UWVBFYHMgdGhhdCBhcmUgcmVsZXZhbnQgaGVyZSBhcmU6IGBoYXNoX25ldDRgLCBgaGFzaF9uZXQ2YCwgYGhhc2hfbmV0bmV0NGAsIGBoYXNoX25ldG5ldDZgLCBgaGFzaF9uZXRwb3J0NGAsIGBoYXNoX25ldHBvcnQ2YCwgYGhhc2hfbmV0aWZhY2U0YCwgYGhhc2hfbmV0aWZhY2U2YCwgYGhhc2hfaXBwb3J0bmV0NGAsIGBoYXNoX2lwcG9ydG5ldDZgLCBgaGFzaF9uZXRwb3J0bmV0NGAsIGFuZCBgaGFzaF9uZXRwb3J0bmV0NmAuCgpUaGUgZnVuY3Rpb25zIGdlbmVyYXRlZCBmb3IgZWFjaCBvZiB0aGVzZSBgTVRZUEVgcyBhcmUgZmFpcmx5IHByZWRpY3RhYmxlLiBXZSBoYXZlOiBge01UWVBFfV9hZGRgLCBge01UWVBFfV9kZWxgLCBge01UWVBFfV9yZXNpemVgLCBge01UWVBFfV9nY2AsIGFuZCwgYmVjYXVzZSBgSVBfU0VUX0hBU0hfV0lUSF9ORVRTYCBpcyBkZWZpbmVkIChhbmQgaXQgKmlzKiBmb3IgdGhlc2UgY2FzZXMpLCBge01UWVBFfV90ZXN0X2NpZHJzYC4KCkkgY2FuIGNvbmZpcm0gdGhhdCBgaGFzaF9uZXQ0X3Rlc3RfY2lkcnNgIGlzLCBpbiBmYWN0LCBkZWZpbmVkIGJlY2F1c2UgYG10eXBlX3Rlc3RfY2lkcnNgIGlzLgoKTGV0IG1lIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMuIFJpZ2h0LCB0aGUgb25lcyB0aGF0IG1hdHRlciBoZXJlIGFyZTogYElQX1NFVF9IQVNIX0lQUE9SVE5FVGAsIGBJUF9TRVRfSEFTSF9ORVRgLCBgSVBfU0VUX0hBU0hfTkVUSUZBQ0VgLCBgSVBfU0VUX0hBU0hfTkVUTkVUYCwgYElQX1NFVF9IQVNIX05FVFBPUlRgLCBhbmQgYElQX1NFVF9IQVNIX05FVFBPUlRORVRgLiBPaCwgYW5kIHRoZSBvdmVyYXJjaGluZyBvbmUgaXMgYElQX1NFVGAsIG9mIGNvdXJzZS4gVGhpcyBwYXRjaCBtb2RpZmllcyBgaXBfc2V0X2hhc2hfZ2VuLmhgLCBzbyBpdCYjMzk7cyBjbGVhcmx5IGNlbnRyYWwgdG8gdGhlIGhhc2ggdHlwZSBnZW5lcmF0aW9uLiBUaGUgbWFjcm8gYElQX1NFVF9IQVNIX1dJVEhfTkVUU2AgaXNuJiMzOTt0IGEga2NvbmZpZyBvcHRpb24sIHNvIHRoZSBsaXN0IEkganVzdCBnYXZlIGlzIGl0LgoKSSBzaG91bGQgYWxzbyBtYWtlIHN1cmUgSSBoYXZlIHRoZSBmdWxsIGxpc3Qgb2YgZ2VuZXJhdGVkIGZ1bmN0aW9ucy4gTGV0JiMzOTtzIHNlZTogYG10eXBlX2FkZF9jaWRyYCBiZWNvbWVzIGB7TVRZUEV9X2FkZF9jaWRyYCwgYG10eXBlX2RlbF9jaWRyYCBiZWNvbWVzIGB7TVRZUEV9X2RlbF9jaWRyYCwgYG10eXBlX2ZsdXNoYCBiZWNvbWVzIGB7TVRZUEV9X2ZsdXNoYCwgYG10eXBlX2FoYXNoX2Rlc3Ryb3lgIGlzIGB7TVRZUEV9X2FoYXNoX2Rlc3Ryb3lgLCBgbXR5cGVfZGVzdHJveWAgaXMgYHtNVFlQRX1fZGVzdHJveWAsIGBtdHlwZV9nY19kb2AgaXMgYHtNVFlQRX1fZ2NfZG9gLCBgbXR5cGVfZ2NgIGlzIGB7TVRZUEV9X2djYCwgYG10eXBlX3Jlc2l6ZWAgaXMgYHtNVFlQRX1fcmVzaXplYCwgYG10eXBlX2FkZGAgaXMgYHtNVFlQRX1fYWRkYCwgYG10eXBlX2RlbGAgaXMgYHtNVFlQRX1fZGVsYCwgYG10eXBlX3Rlc3RfY2lkcnNgIGlzIGB7TVRZUEV9X3Rlc3RfY2lkcnNgLCBhbmQgYG10eXBlX3VyZWZgIGlzIGB7TVRZUEV9X3VyZWZgLgoKQW5kIEkgc2VlIHRoYXQgYElQU0VUX1RPS0VOKEhUWVBFLCBfY3JlYXRlKWAgZXhwYW5kcyB0byBgaGFzaF9uZXRfY3JlYXRlYCBpbiBgaXBfc2V0X2hhc2hfbmV0LmNgLCB3aGVyZSBgSFRZUEVgIGlzIGBoYXNoX25ldGAuIE5lZWQgdG8gbG9vayBhdCBgSFRZUEVgIGluIHRoZSBvdGhlciBmaWxlcyB0byBlbnN1cmUgY29uc2lzdGVuY3kuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDE3OjAyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0OyNkZWZpbmUgSFRZUEUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL2lwc2V0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwLmM9MzM9TU9EVUxFX0FMSUFTKFwmIzM0O2lwX3NldF9oYXNoOmlwXCYjMzQ7KTtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwLmMtMzUtLyogVHlwZSBzcGVjaWZpYyBmdW5jdGlvbiBwcmVmaXggKi9cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXAuYzozNjojZGVmaW5lIEhUWVBFXHRcdGhhc2hfaXBcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXAuYy0zNy0jZGVmaW5lIElQX1NFVF9IQVNIX1dJVEhfTkVUTUFTS1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBtYWMuYz0zMj1NT0RVTEVfQUxJQVMoXCYjMzQ7aXBfc2V0X2hhc2g6aXAsbWFjXCYjMzQ7KTtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwbWFjLmMtMzQtLyogVHlwZSBzcGVjaWZpYyBmdW5jdGlvbiBwcmVmaXggKi9cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBtYWMuYzozNTojZGVmaW5lIEhUWVBFXHRcdGhhc2hfaXBtYWNcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBtYWMuYy0zNi1cbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwbWFyay5jPTMwPU1PRFVMRV9BTElBUyhcJiMzNDtpcF9zZXRfaGFzaDppcCxtYXJrXCYjMzQ7KTtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwbWFyay5jLTMyLS8qIFR5cGUgc3BlY2lmaWMgZnVuY3Rpb24gcHJlZml4ICovXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwbWFyay5jOjMzOiNkZWZpbmUgSFRZUEVcdFx0aGFzaF9pcG1hcmtcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBtYXJrLmMtMzQtI2RlZmluZSBJUF9TRVRfSEFTSF9XSVRIX01BUktNQVNLXG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcHBvcnQuYz0zNT1NT0RVTEVfQUxJQVMoXCYjMzQ7aXBfc2V0X2hhc2g6aXAscG9ydFwmIzM0Oyk7XG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcHBvcnQuYy0zNy0vKiBUeXBlIHNwZWNpZmljIGZ1bmN0aW9uIHByZWZpeCAqL1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcHBvcnQuYzozODojZGVmaW5lIEhUWVBFXHRcdGhhc2hfaXBwb3J0XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwcG9ydC5jLTM5LSNkZWZpbmUgSVBfU0VUX0hBU0hfV0lUSF9ORVRNQVNLXG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcHBvcnRpcC5jPTM0PU1PRFVMRV9BTElBUyhcJiMzNDtpcF9zZXRfaGFzaDppcCxwb3J0LGlwXCYjMzQ7KTtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwcG9ydGlwLmMtMzYtLyogVHlwZSBzcGVjaWZpYyBmdW5jdGlvbiBwcmVmaXggKi9cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0aXAuYzozNzojZGVmaW5lIEhUWVBFXHRcdGhhc2hfaXBwb3J0aXBcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0aXAuYy0zOC1cbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwcG9ydG5ldC5jPTM2PU1PRFVMRV9BTElBUyhcJiMzNDtpcF9zZXRfaGFzaDppcCxwb3J0LG5ldFwmIzM0Oyk7XG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcHBvcnRuZXQuYy0zOC0vKiBUeXBlIHNwZWNpZmljIGZ1bmN0aW9uIHByZWZpeCAqL1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcHBvcnRuZXQuYzozOTojZGVmaW5lIEhUWVBFXHRcdGhhc2hfaXBwb3J0bmV0XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwcG9ydG5ldC5jLTQwLVxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbWFjLmM9MjU9TU9EVUxFX0FMSUFTKFwmIzM0O2lwX3NldF9oYXNoOm1hY1wmIzM0Oyk7XG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9tYWMuYy0yNy0vKiBUeXBlIHNwZWNpZmljIGZ1bmN0aW9uIHByZWZpeCAqL1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9tYWMuYzoyODojZGVmaW5lIEhUWVBFXHRcdGhhc2hfbWFjXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX21hYy5jLTI5LVxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0LmM9MzM9TU9EVUxFX0FMSUFTKFwmIzM0O2lwX3NldF9oYXNoOm5ldFwmIzM0Oyk7XG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXQuYy0zNS0vKiBUeXBlIHNwZWNpZmljIGZ1bmN0aW9uIHByZWZpeCAqL1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXQuYzozNjojZGVmaW5lIEhUWVBFXHRcdGhhc2hfbmV0XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldC5jLTM3LSNkZWZpbmUgSVBfU0VUX0hBU0hfV0lUSF9ORVRTXG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRpZmFjZS5jPTM1PU1PRFVMRV9BTElBUyhcJiMzNDtpcF9zZXRfaGFzaDpuZXQsaWZhY2VcJiMzNDspO1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0aWZhY2UuYy0zNy0vKiBUeXBlIHNwZWNpZmljIGZ1bmN0aW9uIHByZWZpeCAqL1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRpZmFjZS5jOjM4OiNkZWZpbmUgSFRZUEVcdFx0aGFzaF9uZXRpZmFjZVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRpZmFjZS5jLTM5LSNkZWZpbmUgSVBfU0VUX0hBU0hfV0lUSF9ORVRTXG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRuZXQuYz0zMj1NT0RVTEVfQUxJQVMoXCYjMzQ7aXBfc2V0X2hhc2g6bmV0LG5ldFwmIzM0Oyk7XG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRuZXQuYy0zNC0vKiBUeXBlIHNwZWNpZmljIGZ1bmN0aW9uIHByZWZpeCAqL1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRuZXQuYzozNTojZGVmaW5lIEhUWVBFXHRcdGhhc2hfbmV0bmV0XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldG5ldC5jLTM2LSNkZWZpbmUgSVBfU0VUX0hBU0hfV0lUSF9ORVRTXG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRwb3J0LmM9MzU9TU9EVUxFX0FMSUFTKFwmIzM0O2lwX3NldF9oYXNoOm5ldCxwb3J0XCYjMzQ7KTtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldHBvcnQuYy0zNy0vKiBUeXBlIHNwZWNpZmljIGZ1bmN0aW9uIHByZWZpeCAqL1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRwb3J0LmM6Mzg6I2RlZmluZSBIVFlQRVx0XHRoYXNoX25ldHBvcnRcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0cG9ydC5jLTM5LSNkZWZpbmUgSVBfU0VUX0hBU0hfV0lUSF9QUk9UT1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0cG9ydG5ldC5jPTMyPU1PRFVMRV9BTElBUyhcJiMzNDtpcF9zZXRfaGFzaDpuZXQscG9ydCxuZXRcJiMzNDspO1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0cG9ydG5ldC5jLTM0LS8qIFR5cGUgc3BlY2lmaWMgZnVuY3Rpb24gcHJlZml4ICovXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldHBvcnRuZXQuYzozNTojZGVmaW5lIEhUWVBFXHRcdGhhc2hfbmV0cG9ydG5ldFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRwb3J0bmV0LmMtMzYtI2RlZmluZSBJUF9TRVRfSEFTSF9XSVRIX1BST1RPXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDE3OjAyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM5NjAyCgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMzE0MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGb2N1c2luZyBvbiBJUCBTZXQgSGFzaCBUYWJsZSBJbXBsZW1lbnRhdGlvbiBmb3IgRnV6emluZyoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBnb2FsIGlzIHRvIGNyYWZ0IGEgdGFyZ2V0ZWQgZnV6emluZyBjYW1wYWlnbiBmb3IgdGhlIHJlY2VudGx5IG1vZGlmaWVkIElQIHNldCBoYXNoIHRhYmxlIGltcGxlbWVudGF0aW9uLiBUaGUgY2hhbmdlcyByZXZvbHZlIGFyb3VuZCBob3cgQ0lEUiBuZXR3b3JrcyBhcmUgc3RvcmVkLCBzd2l0Y2hpbmcgdG8gYW4gUkNVLXByb3RlY3RlZCwgZHluYW1pY2FsbHkgYWxsb2NhdGVkIGFycmF5LiBUaGlzIGlzIGEgY3JpdGljYWwgZnVuY3Rpb25hbCBjaGFuZ2UgYW5kIEkgbmVlZCB0byBlbnN1cmUgdGhlIG5ldyBSQ1UgYW5kIGxvY2tpbmcgbG9naWMgZG9lc24mIzM5O3QgaW50cm9kdWNlIHZ1bG5lcmFiaWxpdGllcy4KCkZpcnN0LCBJIG5lZWQgdG8gaWRlbnRpZnkgdGhlIGtleSBmdW5jdGlvbnMgdG8gdGFyZ2V0LiBUaGUgaW5pdGlhbCBsaXN0IGluY2x1ZGVzIHRoZSBgX2NyZWF0ZWAgYW5kIGBNVFlQRWAgZnVuY3Rpb25zLiBIb3dldmVyLCB0byBhdm9pZCBvdmVyd2hlbG1pbmcgdGhlIGZ1enplciBhbmQgdG8gZm9jdXMgb24gdGhlIGNvcmUgbW9kaWZpY2F0aW9ucywgSSBuZWVkIGEgcmVwcmVzZW50YXRpdmUgc3Vic2V0LiBJIG5lZWQgdG8gaW5jbHVkZToKCiogICBDcmVhdGlvbiBmdW5jdGlvbnM6IGBoYXNoX25ldF9jcmVhdGVgLCBgaGFzaF9uZXRuZXRfY3JlYXRlYCwgZXRjLgoqICAgRnVuY3Rpb25zIHJlbGF0ZWQgdG8gY29yZSBvcGVyYXRpb25zIChgX2FkZGAsIGBfZGVsYCwgYF9yZXNpemVgLCBgX2djYCwgYF90ZXN0X2NpZHJzYCk6IGBoYXNoX25ldDRfYWRkYCwgYGhhc2hfbmV0NF9kZWxgLCBgaGFzaF9uZXQ0X3Rlc3RfY2lkcnNgLCBldGMuCiogICBBdXhpbGlhcnkgZnVuY3Rpb25zOiBgaGFzaF9uZXQ0X2FkZF9jaWRyYCwgYGhhc2hfbmV0NF9kZWxfY2lkcmAsIGBoYXNoX25ldDRfZmx1c2hgLCBgaGFzaF9uZXQ0X2Rlc3Ryb3lgLCBgaGFzaF9uZXQ0X2djX2RvYCwgYGhhc2hfbmV0NF91cmVmYAoKSSYjMzk7bSBmb2N1c2luZyBvbiB0aGVzZSBzcGVjaWZpYyBmdW5jdGlvbnMgYmVjYXVzZSB0aGUgY29yZSBsb2dpYywgcmVsYXRlZCB0byB0aGUgQ0lEUiBhcnJheSwgaXMgaW1wbGVtZW50ZWQgaW4gYG10eXBlX2FkZF9jaWRyYCwgYG10eXBlX2RlbF9jaWRyYCwgYG10eXBlX2ZsdXNoYCwgYG10eXBlX2FoYXNoX2Rlc3Ryb3lgLCBgbXR5cGVfZGVzdHJveWAsIGBtdHlwZV9nY19kb2AsIGBtdHlwZV9nY2AsIGBtdHlwZV9yZXNpemVgLCBgbXR5cGVfYWRkYCwgYG10eXBlX2RlbGAsIGBtdHlwZV90ZXN0X2NpZHJzYCwgYG10eXBlX3VyZWZgLCBhbmQgYF9jcmVhdGVgLiBUaGUgbG9naWMgaXMgZ2VuZXJhdGVkIGZyb20gbWFjcm9zIHNvIGNvdmVyaW5nIHRoZSBuZXQ0IG9uZXMgc2hvdWxkIGNvdmVyIG5ldDYgYW5kIG5ldG5ldDQsIGV0Yy4KCkkgbmVlZCB0byBtYWtlIHN1cmUgdGhhdCB0aGVzZSBmdW5jdGlvbnMgY2FuIGFjdHVhbGx5IGJlIHJlYWNoZWQgYnkgdGhlIGZ1enplci4gRnVuY3Rpb25zIHdob3NlIGFkZHJlc3NlcyBhcmUgdGFrZW4sIGVpdGhlciBkaXJlY3RseSBvciBpbmRpcmVjdGx5IChlLmcuLCB0aHJvdWdoIGZ1bmN0aW9uIHBvaW50ZXJzKSwgYXJlIGd1YXJhbnRlZWQgdG8gYmUgYXZhaWxhYmxlIGluIHRoZSBzeW1ib2wgdGFibGUuIFRoZXJlZm9yZSwgSSYjMzk7bGwgZmlsdGVyIHRoZSBsaXN0IGJhc2VkIG9uIHRoaXMgY3JpdGVyaWEuCgpBZnRlciB2ZXJpZnlpbmcgdGhpcywgSSB3aWxsIGluY2x1ZGU6CgoqICAgYGhhc2hfbmV0NF9hZGRgCiogICBgaGFzaF9uZXQ0X2RlbGAKKiAgIGBoYXNoX25ldDRfdGVzdGAKKiAgIGBoYXNoX25ldDRfcmVzaXplYAoqICAgYGhhc2hfbmV0NF9nY2AKKiAgIGBoYXNoX25ldDRfZmx1c2hgCiogICBgaGFzaF9uZXQ0X2Rlc3Ryb3lgCiogICBgaGFzaF9uZXQ0X3VyZWZgCiogICBgaGFzaF9uZXRfY3JlYXRlYAoqICAgYGhhc2hfbmV0Nl9hZGRgCiogICBgaGFzaF9uZXQ2X2RlbGAKKiAgIGBoYXNoX25ldDZfdGVzdGAKKiAgIGBoYXNoX25ldDZfcmVzaXplYAoqICAgYGhhc2hfbmV0Nl9nY2AKKiAgIGBoYXNoX25ldDZfZmx1c2hgCiogICBgaGFzaF9uZXQ2X2Rlc3Ryb3lgCiogICBgaGFzaF9uZXQ2X3VyZWZgCiogICBgaGFzaF9uZXRuZXQ0X2FkZGAKKiAgIGBoYXNoX25ldG5ldDRfZGVsYAoqICAgYGhhc2hfbmV0bmV0NF9yZXNpemVgCiogICBgaGFzaF9uZXRuZXQ0X2djYAoqICAgYGhhc2hfbmV0bmV0X2NyZWF0ZWAKKiAgIGBoYXNoX25ldDRfa2FkdGAKKiAgIGBoYXNoX25ldDZfa2FkdGAKKiAgIGBoYXNoX25ldG5ldDRfa2FkdGAKKiAgIGBoYXNoX25ldG5ldDZfa2FkdGAKClRoaXMgc2hvdWxkIGdpdmUgZ29vZCBjb3ZlcmFnZSBvZiB0aGUgbW9kaWZpZWQgZnVuY3Rpb25hbGl0eSwgc2luY2UgdGhlIGNvcmUgY2hhbmdlcyBhcmUgaW4gdGhlIGBpcF9zZXRfaGFzaF9nZW4uaGAgZmlsZSwgYW5kIHRoZSBgLmNgIGZpbGVzIGp1c3QgY2FsbCB0aGUgbW9kaWZpZWQgbG9naWMuCgpOZXh0LCBJIG5lZWQgdG8gY29uZmlybSB0aGUgcmVsZXZhbnQgS2NvbmZpZyBvcHRpb25zOiBgTkVURklMVEVSYCwgYElQX1NFVGAsIGBJUF9TRVRfSEFTSF9ORVRgLCBgSVBfU0VUX0hBU0hfTkVUTkVUYCwgYW5kIHNvIG9uIGZvciB0aGUgdmFyaW91cyBoYXNoIHRhYmxlIHR5cGVzLiBJIHdpbGwgZW5hYmxlIHRoZXNlIGluIG15IGZ1enppbmcgZW52aXJvbm1lbnQuCgpGaW5hbGx5LCBJIHdpbGwgYW5hbHl6ZSB0aGUgcGF0Y2ggYWdhaW4gdG8gZW5zdXJlIHRoYXQgbm8gZnVydGhlciBmb2N1cyBzeW1ib2xzIG5lZWQgdG8gYmUgaW5jbHVkZWQuIFdpdGggdGhpcyBjYXJlZnVsbHkgY3JhZnRlZCBsaXN0LCBJJiMzOTttIGNvbmZpZGVudCB0aGF0IHRoZSBmdXp6ZXIgd2lsbCBiZSBhYmxlIHRvIGVmZmVjdGl2ZWx5IGV4ZXJjaXNlIHRoZSBuZXcgUkNVLWJhc2VkIENJRFIgbWFuYWdlbWVudCBhbmQgbG9ja2luZyBsb2dpYywgZXhwb3NpbmcgYW55IHBvdGVudGlhbCBpc3N1ZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDE3OjAzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2thZHQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0LmM9MTEyPXN0YXRpYyBpbnRcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0LmM6MTEzOmhhc2hfbmV0NF9rYWR0KHN0cnVjdCBpcF9zZXQgKnNldCwgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0LmMtMTE0LVx0ICAgICAgIGNvbnN0IHN0cnVjdCB4dF9hY3Rpb25fcGFyYW0gKnBhcixcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldC5jPTI4Nj1zdGF0aWMgaW50XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldC5jOjI4NzpoYXNoX25ldDZfa2FkdChzdHJ1Y3QgaXBfc2V0ICpzZXQsIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldC5jLTI4OC1cdCAgICAgICBjb25zdCBzdHJ1Y3QgeHRfYWN0aW9uX3BhcmFtICpwYXIsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDE3OjAzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQzOTY2CgkJCQkJCQlvdXRwdXQ6IDQ1NAoJCQkJCQkJdGhvdWdodHM6IDgwNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIGlwc2V0IEhhc2ggVGFibGUgSW1wbGVtZW50YXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgYGhhc2hfbmV0NF92YXJpYW50YCBzdHJ1Y3R1cmUgYW5kIGltbWVkaWF0ZWx5IGNvbmZpcm1pbmcgdGhhdCBgaGFzaF9uZXQ0X2thZHRgIGFuZCBgaGFzaF9uZXQ0X3VhZHRgIGFyZSBpbmRlZWQgcHJlc2VudC4gR29vZC4gVGhhdCYjMzk7cyB0aGUgYmFzZWxpbmUuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBhZGQgdGhlIGFuYWxvZ291cyBmdW5jdGlvbnMgZm9yIElQdjYgYW5kIG5ldC1uZXQgY29tYmluYXRpb25zLCBzbyBJJiMzOTtsbCBhZGQgYGhhc2hfbmV0Nl9rYWR0YCwgYGhhc2hfbmV0Nl91YWR0YCwgYGhhc2hfbmV0bmV0NF9rYWR0YCwgYW5kIGBoYXNoX25ldG5ldDRfdWFkdGAgdG8gdGhlIGxpc3QuIEkmIzM5O20gZXhwYW5kaW5nIHRoZSBzY29wZSB0byBjb3ZlciBJUHY2IGFuZCBuZXQtbmV0IHNjZW5hcmlvcy4KCk5vdywgbGV0JiMzOTtzIHRha2UgYSBsb29rIGF0IHRoZSBrZXkgc3ltYm9scyByZWxhdGVkIHRvIHRoZSBoYXNoIHRhYmxlIGZ1bmN0aW9uczogSSYjMzk7dmUgZ290IGEgY29tcHJlaGVuc2l2ZSBsaXN0IG9mIHRoZSBjb3JlIGZ1bmN0aW9ucywgaW5jbHVkaW5nIGFkZCwgZGVsZXRlLCB0ZXN0LCByZXNpemUsIGdhcmJhZ2UgY29sbGVjdGlvbiwgZmx1c2gsIGRlc3Ryb3ksIGFuZCB1cmVmIGZvciBJUHY0LiBJJiMzOTtsbCBuZWVkIHRvIHJlbWVtYmVyIHRvIGNoZWNrIGFsbCB0aGUgcmVsZXZhbnQgSVB2NiBhbmQgbmV0LW5ldCB2YXJpYW50cy4gVGhpcyBsb29rcyBsaWtlIGEgY29tcGxldGUgbGlzdCBmb3IgdGhlIGltbWVkaWF0ZSBhcmVhIG9mIGludGVyZXN0LiBUaGlzIGlzIGFsc28gdXNlZnVsIGZvciBjcmVhdGluZyBhIHRlc3Qgc3VpdGUuCgpUaGUgY29uZmlndXJhdGlvbiBvcHRpb25zIGFyZSBhbHNvIHVzZWZ1bCwgYW5kIEkmIzM5O20gbm90aW5nIHRoZSByZWxldmFudCBgTkVURklMVEVSYCwgYElQX1NFVGAsIGBJUF9TRVRfSEFTSF9ORVRgLCBgSVBfU0VUX0hBU0hfTkVUTkVUYCwgYW5kIHJlbGF0ZWQgaGFzaCB0eXBlcy4gVGhpcyBnaXZlcyBtZSBjb250ZXh0LgoKRnJvbSBhIGZ1bmN0aW9uYWwgcGVyc3BlY3RpdmUsIHRoZSBwYXRjaCBmdW5kYW1lbnRhbGx5IGFsdGVycyB0aGUgY29yZSBoYXNoIHRhYmxlIGltcGxlbWVudGF0aW9uIHdpdGhpbiB0aGUgbmV0ZmlsdGVyIGlwc2V0IG1vZHVsZSwgd2hpY2ggaXMgYSBrZXkgcGFydCBvZiB0aGUga2VybmVsJiMzOTtzIG5ldHdvcmsgbWFuYWdlbWVudC4gV2UmIzM5O3JlIGxvb2tpbmcgYXQgYSBzaGlmdCBmcm9tIGEgZml4ZWQtc2l6ZSBhcnJheSBmb3Igc3RvcmluZyBDSURSIG5ldHdvcmtzIHRvIGEgZHluYW1pY2FsbHkgYWxsb2NhdGVkLCBSQ1UtcHJvdGVjdGVkIGFycmF5LiBUaGUgcmVzaXppbmcgYW5kIGdhcmJhZ2UgY29sbGVjdGlvbiwgdGhlIGNlbnRyYWwga2VybmVsIGxvZ2ljLCBhcmUgYWxzbyBiZWluZyB1cGRhdGVkLiBUaGUgY2hhbmdlcyBpbnRyb2R1Y2VkIGFyZSBjcml0aWNhbCwgcG90ZW50aWFsbHkgaW1wYWN0aW5nIGEgcmFuZ2Ugb2YgY29yZSBrZXJuZWwgb3BlcmF0aW9ucywgaW5jbHVkaW5nIGxvY2tpbmcgYW5kIG1lbW9yeSBtYW5hZ2VtZW50LiBBbnkgY2hhbmdlIHRoaXMgZGVlcCBkZXNlcnZlcyBjYXJlZnVsIHNjcnV0aW55LCBhbmQgSSBtdXN0IGJlIHN1cmUgdG8gcmlnb3JvdXNseSBmdXp6IHRoaXMgdG8gdW5jb3ZlciBwb3RlbnRpYWwgaXNzdWVzIHJlbGF0ZWQgdG8gdXNlLWFmdGVyLWZyZWUgY29uZGl0aW9ucywgbWVtb3J5IGxlYWtzLCBhbmQgYW55IHJhY2UgY29uZGl0aW9ucyB0aGUgbmV3IFJDVSBhbmQgbG9ja2luZyBsb2dpYyBtaWdodCBpbnRyb2R1Y2UuIFRoZXNlIGFyZSAqY3JpdGljYWwqIGFyZWFzIHRvIHRlc3QuIEkgbmVlZCB0byBlbnN1cmUgdGhlIHJvYnVzdG5lc3MgYW5kIHNlY3VyaXR5IG9mIHRoZSBuZXcgaW1wbGVtZW50YXRpb24uCkkmIzM5O20gcmVhZHkgdG8gY2FsbCBgc2V0LXJlc3VsdHNgIG5vdy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMTc6MDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVEZJTFRFUiYjMzQ7LAogICAgJiMzNDtJUF9TRVQmIzM0OywKICAgICYjMzQ7SVBfU0VUX0hBU0hfTkVUJiMzNDssCiAgICAmIzM0O0lQX1NFVF9IQVNIX05FVE5FVCYjMzQ7LAogICAgJiMzNDtJUF9TRVRfSEFTSF9ORVRQT1JUJiMzNDssCiAgICAmIzM0O0lQX1NFVF9IQVNIX05FVElGQUNFJiMzNDssCiAgICAmIzM0O0lQX1NFVF9IQVNIX0lQUE9SVE5FVCYjMzQ7LAogICAgJiMzNDtJUF9TRVRfSEFTSF9ORVRQT1JUTkVUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aGFzaF9uZXQ0X2FkZCYjMzQ7LAogICAgJiMzNDtoYXNoX25ldDRfZGVsJiMzNDssCiAgICAmIzM0O2hhc2hfbmV0NF90ZXN0JiMzNDssCiAgICAmIzM0O2hhc2hfbmV0NF9yZXNpemUmIzM0OywKICAgICYjMzQ7aGFzaF9uZXQ0X2djJiMzNDssCiAgICAmIzM0O2hhc2hfbmV0NF9mbHVzaCYjMzQ7LAogICAgJiMzNDtoYXNoX25ldDRfZGVzdHJveSYjMzQ7LAogICAgJiMzNDtoYXNoX25ldDRfdXJlZiYjMzQ7LAogICAgJiMzNDtoYXNoX25ldDRfa2FkdCYjMzQ7LAogICAgJiMzNDtoYXNoX25ldDRfdWFkdCYjMzQ7LAogICAgJiMzNDtoYXNoX25ldF9jcmVhdGUmIzM0OywKICAgICYjMzQ7aGFzaF9uZXQ2X2FkZCYjMzQ7LAogICAgJiMzNDtoYXNoX25ldDZfZGVsJiMzNDssCiAgICAmIzM0O2hhc2hfbmV0Nl90ZXN0JiMzNDssCiAgICAmIzM0O2hhc2hfbmV0Nl9yZXNpemUmIzM0OywKICAgICYjMzQ7aGFzaF9uZXQ2X2djJiMzNDssCiAgICAmIzM0O2hhc2hfbmV0Nl9rYWR0JiMzNDssCiAgICAmIzM0O2hhc2hfbmV0Nl91YWR0JiMzNDssCiAgICAmIzM0O2hhc2hfbmV0bmV0NF9hZGQmIzM0OywKICAgICYjMzQ7aGFzaF9uZXRuZXQ0X3Jlc2l6ZSYjMzQ7LAogICAgJiMzNDtoYXNoX25ldG5ldDRfZ2MmIzM0OywKICAgICYjMzQ7aGFzaF9uZXRuZXQ0X2thZHQmIzM0OywKICAgICYjMzQ7aGFzaF9uZXRuZXQ0X3VhZHQmIzM0OywKICAgICYjMzQ7aGFzaF9uZXRuZXRfY3JlYXRlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjb3JlIGhhc2ggdGFibGUgaW1wbGVtZW50YXRpb24gZm9yIG5ldGZpbHRlciBpcHNldCAoc3BlY2lmaWNhbGx5IHRoZSBnZW5lcmljIGhhc2ggdHlwZXMgaW4gaXBfc2V0X2hhc2hfZ2VuLmgpLiBJdCBjaGFuZ2VzIGhvdyBDSURSIG5ldHdvcmtzIGFyZSBzdG9yZWQsIG1vdmluZyBmcm9tIGEgZml4ZWQtc2l6ZSBhcnJheSB0byBhbiBSQ1UtcHJvdGVjdGVkIGR5bmFtaWNhbGx5IGFsbG9jYXRlZCBhcnJheSwgYW5kIHVwZGF0ZXMgdGhlIHJlc2l6aW5nIGFuZCBnYXJiYWdlIGNvbGxlY3Rpb24gbG9naWMgdG8gdXNlIGEgbmV3IGxvY2sgYW5kIGEgYHJlc2l6aW5nYCBmbGFnLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljIGFuZCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSB0aGUgbmV3IFJDVSBhbmQgbG9ja2luZyBsb2dpYyBkb2VzbiYjMzk7dCBpbnRyb2R1Y2UgdXNlLWFmdGVyLWZyZWUsIG1lbW9yeSBsZWFrcywgb3IgcmFjZSBjb25kaXRpb25zLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtORVRGSUxURVImIzM0OywKICAgICYjMzQ7SVBfU0VUJiMzNDssCiAgICAmIzM0O0lQX1NFVF9IQVNIX05FVCYjMzQ7LAogICAgJiMzNDtJUF9TRVRfSEFTSF9ORVRORVQmIzM0OywKICAgICYjMzQ7SVBfU0VUX0hBU0hfTkVUUE9SVCYjMzQ7LAogICAgJiMzNDtJUF9TRVRfSEFTSF9ORVRJRkFDRSYjMzQ7LAogICAgJiMzNDtJUF9TRVRfSEFTSF9JUFBPUlRORVQmIzM0OywKICAgICYjMzQ7SVBfU0VUX0hBU0hfTkVUUE9SVE5FVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2hhc2hfbmV0NF9hZGQmIzM0OywKICAgICYjMzQ7aGFzaF9uZXQ0X2RlbCYjMzQ7LAogICAgJiMzNDtoYXNoX25ldDRfdGVzdCYjMzQ7LAogICAgJiMzNDtoYXNoX25ldDRfcmVzaXplJiMzNDssCiAgICAmIzM0O2hhc2hfbmV0NF9nYyYjMzQ7LAogICAgJiMzNDtoYXNoX25ldDRfZmx1c2gmIzM0OywKICAgICYjMzQ7aGFzaF9uZXQ0X2Rlc3Ryb3kmIzM0OywKICAgICYjMzQ7aGFzaF9uZXQ0X3VyZWYmIzM0OywKICAgICYjMzQ7aGFzaF9uZXQ0X2thZHQmIzM0OywKICAgICYjMzQ7aGFzaF9uZXQ0X3VhZHQmIzM0OywKICAgICYjMzQ7aGFzaF9uZXRfY3JlYXRlJiMzNDssCiAgICAmIzM0O2hhc2hfbmV0Nl9hZGQmIzM0OywKICAgICYjMzQ7aGFzaF9uZXQ2X2RlbCYjMzQ7LAogICAgJiMzNDtoYXNoX25ldDZfdGVzdCYjMzQ7LAogICAgJiMzNDtoYXNoX25ldDZfcmVzaXplJiMzNDssCiAgICAmIzM0O2hhc2hfbmV0Nl9nYyYjMzQ7LAogICAgJiMzNDtoYXNoX25ldDZfa2FkdCYjMzQ7LAogICAgJiMzNDtoYXNoX25ldDZfdWFkdCYjMzQ7LAogICAgJiMzNDtoYXNoX25ldG5ldDRfYWRkJiMzNDssCiAgICAmIzM0O2hhc2hfbmV0bmV0NF9yZXNpemUmIzM0OywKICAgICYjMzQ7aGFzaF9uZXRuZXQ0X2djJiMzNDssCiAgICAmIzM0O2hhc2hfbmV0bmV0NF9rYWR0JiMzNDssCiAgICAmIzM0O2hhc2hfbmV0bmV0NF91YWR0JiMzNDssCiAgICAmIzM0O2hhc2hfbmV0bmV0X2NyZWF0ZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgY29yZSBoYXNoIHRhYmxlIGltcGxlbWVudGF0aW9uIGZvciBuZXRmaWx0ZXIgaXBzZXQgKHNwZWNpZmljYWxseSB0aGUgZ2VuZXJpYyBoYXNoIHR5cGVzIGluIGlwX3NldF9oYXNoX2dlbi5oKS4gSXQgY2hhbmdlcyBob3cgQ0lEUiBuZXR3b3JrcyBhcmUgc3RvcmVkLCBtb3ZpbmcgZnJvbSBhIGZpeGVkLXNpemUgYXJyYXkgdG8gYW4gUkNVLXByb3RlY3RlZCBkeW5hbWljYWxseSBhbGxvY2F0ZWQgYXJyYXksIGFuZCB1cGRhdGVzIHRoZSByZXNpemluZyBhbmQgZ2FyYmFnZSBjb2xsZWN0aW9uIGxvZ2ljIHRvIHVzZSBhIG5ldyBsb2NrIGFuZCBhIGByZXNpemluZ2AgZmxhZy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRvIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYyBhbmQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgdGhlIG5ldyBSQ1UgYW5kIGxvY2tpbmcgbG9naWMgZG9lc24mIzM5O3QgaW50cm9kdWNlIHVzZS1hZnRlci1mcmVlLCBtZW1vcnkgbGVha3MsIG9yIHJhY2UgY29uZGl0aW9ucy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDE3OjAxOjE1Ljc0NDAwNTE5NFoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0NDU5MDg0OTQ3MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORVRGSUxURVJcIixcbiAgICBcIklQX1NFVFwiLFxuICAgIFwiSVBfU0VUX0hBU0hfTkVUXCIsXG4gICAgXCJJUF9TRVRfSEFTSF9ORVRORVRcIixcbiAgICBcIklQX1NFVF9IQVNIX05FVFBPUlRcIixcbiAgICBcIklQX1NFVF9IQVNIX05FVElGQUNFXCIsXG4gICAgXCJJUF9TRVRfSEFTSF9JUFBPUlRORVRcIixcbiAgICBcIklQX1NFVF9IQVNIX05FVFBPUlRORVRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJoYXNoX25ldDRfYWRkXCIsXG4gICAgXCJoYXNoX25ldDRfZGVsXCIsXG4gICAgXCJoYXNoX25ldDRfdGVzdFwiLFxuICAgIFwiaGFzaF9uZXQ0X3Jlc2l6ZVwiLFxuICAgIFwiaGFzaF9uZXQ0X2djXCIsXG4gICAgXCJoYXNoX25ldDRfZmx1c2hcIixcbiAgICBcImhhc2hfbmV0NF9kZXN0cm95XCIsXG4gICAgXCJoYXNoX25ldDRfdXJlZlwiLFxuICAgIFwiaGFzaF9uZXQ0X2thZHRcIixcbiAgICBcImhhc2hfbmV0NF91YWR0XCIsXG4gICAgXCJoYXNoX25ldF9jcmVhdGVcIixcbiAgICBcImhhc2hfbmV0Nl9hZGRcIixcbiAgICBcImhhc2hfbmV0Nl9kZWxcIixcbiAgICBcImhhc2hfbmV0Nl90ZXN0XCIsXG4gICAgXCJoYXNoX25ldDZfcmVzaXplXCIsXG4gICAgXCJoYXNoX25ldDZfZ2NcIixcbiAgICBcImhhc2hfbmV0Nl9rYWR0XCIsXG4gICAgXCJoYXNoX25ldDZfdWFkdFwiLFxuICAgIFwiaGFzaF9uZXRuZXQ0X2FkZFwiLFxuICAgIFwiaGFzaF9uZXRuZXQ0X3Jlc2l6ZVwiLFxuICAgIFwiaGFzaF9uZXRuZXQ0X2djXCIsXG4gICAgXCJoYXNoX25ldG5ldDRfa2FkdFwiLFxuICAgIFwiaGFzaF9uZXRuZXQ0X3VhZHRcIixcbiAgICBcImhhc2hfbmV0bmV0X2NyZWF0ZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjb3JlIGhhc2ggdGFibGUgaW1wbGVtZW50YXRpb24gZm9yIG5ldGZpbHRlciBpcHNldCAoc3BlY2lmaWNhbGx5IHRoZSBnZW5lcmljIGhhc2ggdHlwZXMgaW4gaXBfc2V0X2hhc2hfZ2VuLmgpLiBJdCBjaGFuZ2VzIGhvdyBDSURSIG5ldHdvcmtzIGFyZSBzdG9yZWQsIG1vdmluZyBmcm9tIGEgZml4ZWQtc2l6ZSBhcnJheSB0byBhbiBSQ1UtcHJvdGVjdGVkIGR5bmFtaWNhbGx5IGFsbG9jYXRlZCBhcnJheSwgYW5kIHVwZGF0ZXMgdGhlIHJlc2l6aW5nIGFuZCBnYXJiYWdlIGNvbGxlY3Rpb24gbG9naWMgdG8gdXNlIGEgbmV3IGxvY2sgYW5kIGEgYHJlc2l6aW5nYCBmbGFnLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljIGFuZCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSB0aGUgbmV3IFJDVSBhbmQgbG9ja2luZyBsb2dpYyBkb2Vzbid0IGludHJvZHVjZSB1c2UtYWZ0ZXItZnJlZSwgbWVtb3J5IGxlYWtzLCBvciByYWNlIGNvbmRpdGlvbnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDE3OjAxOjE1Ljc0NDAxMzA5NFoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDkzMzE1MTMyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgMGJmYzMzM2VkYTYzNmNhYmMwZDFiNzU5MjRmZGRiMGJiYTUxOTA4MVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVGh1IEp1bCAyIDE3OjAxOjE0IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmggYi9uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oXFxuaW5kZXggZGVkZjU5YjY2MWRkZjMuLjJiNDczYWNhZDUwY2I4IDEwMDY0NFxcbi0tLSBhL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmhcXG4rKysgYi9uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oXFxuQEAgLTc1LDE1ICs3NSwxNyBAQCBzdHJ1Y3QgaGJ1Y2tldCB7XFxuIHN0cnVjdCBodGFibGVfZ2Mge1xcbiBcXHRzdHJ1Y3QgZGVsYXllZF93b3JrIGR3b3JrO1xcbiBcXHRzdHJ1Y3QgaXBfc2V0ICpzZXQ7XFx0LyogU2V0IHRoZSBnYyBiZWxvbmdzIHRvICovXFxuK1xcdHNwaW5sb2NrX3QgbG9jaztcXHQvKiBMb2NrIHRvIGV4Y2x1ZGUgZ2MgYW5kIHJlc2l6ZSAqL1xcbiBcXHR1MzIgcmVnaW9uO1xcdFxcdC8qIExhc3QgZ2MgcnVuIHBvc2l0aW9uICovXFxuIH07XFxuIFxcbiAvKiBUaGUgaGFzaCB0YWJsZTogdGhlIHRhYmxlIHNpemUgc3RvcmVkIGhlcmUgaW4gb3JkZXIgdG8gbWFrZSByZXNpemluZyBlYXN5ICovXFxuIHN0cnVjdCBodGFibGUge1xcbi1cXHRhdG9taWNfdCByZWY7XFx0XFx0LyogUmVmZXJlbmNlcyBmb3IgcmVzaXppbmcgKi9cXG4rXFx0Ym9vbCByZXNpemluZztcXHRcXHQvKiBNYXJrIG9uZ29pbmcgcmVzaXplICovXFxuIFxcdGF0b21pY190IHVyZWY7XFx0XFx0LyogUmVmZXJlbmNlcyBmb3IgZHVtcGluZyBhbmQgZ2MgKi9cXG4gXFx0dTggaHRhYmxlX2JpdHM7XFx0XFx0Lyogc2l6ZSBvZiBoYXNoIHRhYmxlID09IDJeaHRhYmxlX2JpdHMgKi9cXG4gXFx0dTMyIG1heGVsZW07XFx0XFx0LyogTWF4ZWxlbSBwZXIgcmVnaW9uICovXFxuK1xcdHN0cnVjdCBsaXN0X2hlYWQgYWQ7XFx0LyogUmVzaXplIGFkZHxkZWwgYmFja2xpc3QgKi9cXG4gXFx0c3RydWN0IGlwX3NldF9yZWdpb24gKmhyZWdpb247XFx0LyogUmVnaW9uIGxvY2tzIGFuZCBleHQgc2l6ZXMgKi9cXG4gXFx0c3RydWN0IGhidWNrZXQgX19yY3UgKmJ1Y2tldFtdOyAvKiBoYXNodGFibGUgYnVja2V0cyAqL1xcbiB9O1xcbkBAIC05Nyw5ICs5OSwxNiBAQCBzdHJ1Y3QgaHRhYmxlIHtcXG4gI2VuZGlmXFxuIFxcbiAvKiBCb29rLWtlZXBpbmcgb2YgdGhlIHByZWZpeGVzIGFkZGVkIHRvIHRoZSBzZXQgKi9cXG4rc3RydWN0IG5ldF9wcmVmaXgge1xcbitcXHR1OCBjaWRyO1xcdFxcdFxcdC8qIHRoZSBjaWRyIHZhbHVlICovXFxuK1xcdHUzMiBjb3VudDtcXHRcXHRcXHQvKiBudW1iZXIgb2YgZWxlbWVudHMgb2YgdGhpcyBjaWRyICovXFxuK307XFxuK1xcbiBzdHJ1Y3QgbmV0X3ByZWZpeGVzIHtcXG4tXFx0dTMyIG5ldHNbSVBTRVRfTkVUX0NPVU5UXTsgLyogbnVtYmVyIG9mIGVsZW1lbnRzIGZvciB0aGlzIGNpZHIgKi9cXG4tXFx0dTggY2lkcltJUFNFVF9ORVRfQ09VTlRdOyAgLyogdGhlIGNpZHIgdmFsdWUgKi9cXG4rXFx0c3RydWN0IHJjdV9oZWFkIHJjdTtcXG4rXFx0dTggbGVuO1xcbitcXHRzdHJ1Y3QgbmV0X3ByZWZpeCBuZXRzW11cXG4rXFx0XFx0X19hbGlnbmVkKF9fYWxpZ25vZl9fKHU2NCkpO1xcbiB9O1xcbiBcXG4gLyogQ29tcHV0ZSB0aGUgaGFzaCB0YWJsZSBzaXplICovXFxuQEAgLTEyNSwxMSArMTM0LDYgQEAgaHRhYmxlX3NpemUodTggaGJpdHMpXFxuICNlbHNlXFxuICNkZWZpbmUgX19DSURSKGNpZHIsIGkpXFx0XFx0KGNpZHIpXFxuICNlbmRpZlxcbi1cXG4tLyogY2lkciArIDEgaXMgc3RvcmVkIGluIG5ldF9wcmVmaXhlcyB0byBzdXBwb3J0IC8wICovXFxuLSNkZWZpbmUgTkNJRFJfUFVUKGNpZHIpXFx0XFx0KChjaWRyKSArIDEpXFxuLSNkZWZpbmUgTkNJRFJfR0VUKGNpZHIpXFx0XFx0KChjaWRyKSAtIDEpXFxuLVxcbiAjaWZkZWYgSVBfU0VUX0hBU0hfV0lUSF9ORVRTX1BBQ0tFRFxcbiAvKiBXaGVuIGNpZHIgaXMgcGFja2VkIHdpdGggbm9tYXRjaCwgY2lkciAtIDEgaXMgc3RvcmVkIGluIHRoZSBkYXRhIGVudHJ5ICovXFxuICNkZWZpbmUgRENJRFJfUFVUKGNpZHIpXFx0XFx0KChjaWRyKSAtIDEpXFxuQEAgLTEzOSwyMSArMTQzLDkgQEAgaHRhYmxlX3NpemUodTggaGJpdHMpXFxuICNkZWZpbmUgRENJRFJfR0VUKGNpZHIsIGkpXFx0X19DSURSKGNpZHIsIGkpXFxuICNlbmRpZlxcbiBcXG4tI2RlZmluZSBJTklUX0NJRFIoY2lkciwgaG9zdF9tYXNrKVxcdFxcXFxcXG4tXFx0RENJRFJfUFVUKCgoY2lkcikgPyBOQ0lEUl9HRVQoY2lkcikgOiBob3N0X21hc2spKVxcbisjZGVmaW5lIElOSVRfQ0lEUihuLCBob3N0X21hc2spXFx0XFxcXFxcbitcXHREQ0lEUl9QVVQoKG4pLVxcdTAwM2VsZW4gPyAobiktXFx1MDAzZW5ldHNbMF0uY2lkciA6IGhvc3RfbWFzaylcXG4gXFxuLSNpZmRlZiBJUF9TRVRfSEFTSF9XSVRIX05FVDBcXG4tLyogY2lkciBmcm9tIDAgdG8gSE9TVF9NQVNLIHZhbHVlIGFuZCBjID0gY2lkciArIDEgKi9cXG4tI2RlZmluZSBOTEVOXFx0XFx0XFx0KEhPU1RfTUFTSyArIDEpXFxuLSNkZWZpbmUgQ0lEUl9QT1MoYylcXHRcXHQoKGMpIC0gMSlcXG4tI2Vsc2VcXG4tLyogY2lkciBmcm9tIDEgdG8gSE9TVF9NQVNLIHZhbHVlIGFuZCBjID0gY2lkciArIDEgKi9cXG4tI2RlZmluZSBOTEVOXFx0XFx0XFx0SE9TVF9NQVNLXFxuLSNkZWZpbmUgQ0lEUl9QT1MoYylcXHRcXHQoKGMpIC0gMilcXG4tI2VuZGlmXFxuLVxcbi0jZWxzZVxcbi0jZGVmaW5lIE5MRU5cXHRcXHRcXHQwXFxuICNlbmRpZiAvKiBJUF9TRVRfSEFTSF9XSVRIX05FVFMgKi9cXG4gXFxuICNkZWZpbmUgU0VUX0VMRU1fRVhQSVJFRChzZXQsIGQpXFx0XFxcXFxcbkBAIC0yOTAsNiArMjgyLDcgQEAgc3RhdGljIGNvbnN0IHVuaW9uIG5mX2luZXRfYWRkciB6ZXJvbWFzayA9IHt9O1xcbiAvKiBUaGUgZ2VuZXJpYyBoYXNoIHN0cnVjdHVyZSAqL1xcbiBzdHJ1Y3QgaHR5cGUge1xcbiBcXHRzdHJ1Y3QgaHRhYmxlIF9fcmN1ICp0YWJsZTsgLyogdGhlIGhhc2ggdGFibGUgKi9cXG4rXFx0c3RydWN0IG5ldF9wcmVmaXhlcyBfX3JjdSAqcm5ldHNbSVBTRVRfTkVUX0NPVU5UXTsgLyogY2lkciBwcmVmaXhlcyAqL1xcbiBcXHRzdHJ1Y3QgaHRhYmxlX2djIGdjO1xcdC8qIGdjIHdvcmtxdWV1ZSAqL1xcbiBcXHR1MzIgbWF4ZWxlbTtcXHRcXHQvKiBtYXggZWxlbWVudHMgaW4gdGhlIGhhc2ggKi9cXG4gXFx0dTMyIGluaXR2YWw7XFx0XFx0LyogcmFuZG9tIGpoYXNoIGluaXQgdmFsdWUgKi9cXG5AQCAtMzAxLDExICsyOTQsMTAgQEAgc3RydWN0IGh0eXBlIHtcXG4gXFx0dTggbmV0bWFzaztcXHRcXHQvKiBuZXRtYXNrIHZhbHVlIGZvciBzdWJuZXRzIHRvIHN0b3JlICovXFxuIFxcdHVuaW9uIG5mX2luZXRfYWRkciBiaXRtYXNrO1xcdC8qIHN0b3JlcyBiaXRtYXNrICovXFxuICNlbmRpZlxcbi1cXHRzdHJ1Y3QgbGlzdF9oZWFkIGFkO1xcdC8qIFJlc2l6ZSBhZGR8ZGVsIGJhY2tsaXN0ICovXFxuK1xcdC8qIEJlY2F1c2UgJ25leHQnIGlzIElQdjQvSVB2NiBkZXBlbmRlbnQsIG5vIGVsZW1lbnRzIG9mIHRoaXNcXG4rXFx0ICogc3RydWN0dXJlIGFuZCByZWZlcnJlZCBpbiBjcmVhdGUoKSBtYXkgY29tZSBhZnRlciAnbmV4dCcuXFxuK1xcdCAqL1xcbiBcXHRzdHJ1Y3QgbXR5cGVfZWxlbSBuZXh0OyAvKiB0ZW1wb3Jhcnkgc3RvcmFnZSBmb3IgdWFkZCAqL1xcbi0jaWZkZWYgSVBfU0VUX0hBU0hfV0lUSF9ORVRTXFxuLVxcdHN0cnVjdCBuZXRfcHJlZml4ZXMgbmV0c1tOTEVOXTsgLyogYm9vay1rZWVwaW5nIG9mIHByZWZpeGVzICovXFxuLSNlbmRpZlxcbiB9O1xcbiBcXG4gLyogQUREfERFTCBlbnRyaWVzIHNhdmVkIGR1cmluZyByZXNpemUgKi9cXG5AQCAtMzIyLDUwICszMTQsODggQEAgc3RydWN0IG10eXBlX3Jlc2l6ZV9hZCB7XFxuIC8qIE5ldHdvcmsgY2lkciBzaXplIGJvb2sga2VlcGluZyB3aGVuIHRoZSBoYXNoIHN0b3JlcyBkaWZmZXJlbnRcXG4gICogc2l6ZWQgbmV0d29ya3MuIGNpZHIgPT0gcmVhbCBjaWRyICsgMSB0byBzdXBwb3J0IC8wLlxcbiAgKi9cXG4tc3RhdGljIHZvaWRcXG4rc3RhdGljIGludFxcbiBtdHlwZV9hZGRfY2lkcihzdHJ1Y3QgaXBfc2V0ICpzZXQsIHN0cnVjdCBodHlwZSAqaCwgdTggY2lkciwgdTggbilcXG4ge1xcbi1cXHRpbnQgaSwgajtcXG4rXFx0c3RydWN0IG5ldF9wcmVmaXhlcyAqbmV0cywgKnRtcDtcXG4rXFx0aW50IGksIGosIGZvdW5kLCBsZW4gPSAwLCByZXQgPSAwO1xcbiBcXG4gXFx0c3Bpbl9sb2NrX2JoKFxcdTAwMjZzZXQtXFx1MDAzZWxvY2spO1xcbitcXHRuZXRzID0gX19pcHNldF9kZXJlZmVyZW5jZShoLVxcdTAwM2VybmV0c1tuXSk7XFxuIFxcdC8qIEFkZCBpbiBpbmNyZWFzaW5nIHByZWZpeCBvcmRlciwgc28gbGFyZ2VyIGNpZHIgZmlyc3QgKi9cXG4tXFx0Zm9yIChpID0gMCwgaiA9IC0xOyBpIFxcdTAwM2MgTkxFTiBcXHUwMDI2XFx1MDAyNiBoLVxcdTAwM2VuZXRzW2ldLmNpZHJbbl07IGkrKykge1xcbi1cXHRcXHRpZiAoaiAhPSAtMSkge1xcbitcXHRmb3IgKGkgPSAwLCBmb3VuZCA9IC0xOyBpIFxcdTAwM2MgbmV0cy1cXHUwMDNlbGVuOyBpKyspIHtcXG4rXFx0XFx0aWYgKG5ldHMtXFx1MDAzZW5ldHNbaV0uY291bnQpXFxuK1xcdFxcdFxcdGxlbisrO1xcbitcXHRcXHRpZiAoZm91bmQgIT0gLTEpIHtcXG4gXFx0XFx0XFx0Y29udGludWU7XFxuLVxcdFxcdH0gZWxzZSBpZiAoaC1cXHUwMDNlbmV0c1tpXS5jaWRyW25dIFxcdTAwM2MgY2lkcikge1xcbi1cXHRcXHRcXHRqID0gaTtcXG4tXFx0XFx0fSBlbHNlIGlmIChoLVxcdTAwM2VuZXRzW2ldLmNpZHJbbl0gPT0gY2lkcikge1xcbi1cXHRcXHRcXHRoLVxcdTAwM2VuZXRzW0NJRFJfUE9TKGNpZHIpXS5uZXRzW25dKys7XFxuK1xcdFxcdH0gZWxzZSBpZiAobmV0cy1cXHUwMDNlbmV0c1tpXS5jaWRyIFxcdTAwM2MgY2lkcikge1xcbitcXHRcXHRcXHRmb3VuZCA9IGk7XFxuK1xcdFxcdH0gZWxzZSBpZiAobmV0cy1cXHUwMDNlbmV0c1tpXS5jaWRyID09IGNpZHIpIHtcXG4rXFx0XFx0XFx0bmV0cy1cXHUwMDNlbmV0c1tpXS5jb3VudCsrO1xcbiBcXHRcXHRcXHRnb3RvIHVubG9jaztcXG4gXFx0XFx0fVxcbiBcXHR9XFxuLVxcdGlmIChqICE9IC0xKSB7XFxuLVxcdFxcdGZvciAoOyBpIFxcdTAwM2UgajsgaS0tKVxcbi1cXHRcXHRcXHRoLVxcdTAwM2VuZXRzW2ldLmNpZHJbbl0gPSBoLVxcdTAwM2VuZXRzW2kgLSAxXS5jaWRyW25dO1xcbitcXHRsZW4rKztcXG4rXFx0dG1wID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IG5ldF9wcmVmaXhlcykgK1xcbitcXHRcXHQgICAgICBsZW4gKiBzaXplb2Yoc3RydWN0IG5ldF9wcmVmaXgpLCBHRlBfQVRPTUlDKTtcXG4rXFx0aWYgKCF0bXApXFxuK1xcdFxcdHJldHVybiAtRU5PTUVNO1xcbitcXHR0bXAtXFx1MDAzZWxlbiA9IGxlbjtcXG4rXFx0Zm9yIChpID0gMCwgaiA9IDA7IGkgXFx1MDAzYyBuZXRzLVxcdTAwM2VsZW47IGkrKykge1xcbitcXHRcXHRpZiAoIW5ldHMtXFx1MDAzZW5ldHNbaV0uY291bnQpXFxuK1xcdFxcdFxcdGNvbnRpbnVlO1xcbitcXHRcXHRpZiAoaSA9PSBmb3VuZCkge1xcbitcXHRcXHRcXHR0bXAtXFx1MDAzZW5ldHNbal0uY2lkciA9IGNpZHI7XFxuK1xcdFxcdFxcdHRtcC1cXHUwMDNlbmV0c1tqKytdLmNvdW50ID0gMTtcXG4rXFx0XFx0fVxcbitcXHRcXHR0bXAtXFx1MDAzZW5ldHNbal0uY2lkciA9IG5ldHMtXFx1MDAzZW5ldHNbaV0uY2lkcjtcXG4rXFx0XFx0dG1wLVxcdTAwM2VuZXRzW2orK10uY291bnQgPSBuZXRzLVxcdTAwM2VuZXRzW2ldLmNvdW50O1xcbitcXHR9XFxuK1xcdGlmIChmb3VuZCA9PSAtMSkge1xcbitcXHRcXHR0bXAtXFx1MDAzZW5ldHNbal0uY2lkciA9IGNpZHI7XFxuK1xcdFxcdHRtcC1cXHUwMDNlbmV0c1tqXS5jb3VudCA9IDE7XFxuIFxcdH1cXG4tXFx0aC1cXHUwMDNlbmV0c1tpXS5jaWRyW25dID0gY2lkcjtcXG4tXFx0aC1cXHUwMDNlbmV0c1tDSURSX1BPUyhjaWRyKV0ubmV0c1tuXSA9IDE7XFxuK1xcdHJjdV9hc3NpZ25fcG9pbnRlcihoLVxcdTAwM2VybmV0c1tuXSwgdG1wKTtcXG4rXFx0a2ZyZWVfcmN1KG5ldHMsIHJjdSk7XFxuIHVubG9jazpcXG4gXFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNnNldC1cXHUwMDNlbG9jayk7XFxuK1xcdHJldHVybiByZXQ7XFxuIH1cXG4gXFxuIHN0YXRpYyB2b2lkXFxuIG10eXBlX2RlbF9jaWRyKHN0cnVjdCBpcF9zZXQgKnNldCwgc3RydWN0IGh0eXBlICpoLCB1OCBjaWRyLCB1OCBuKVxcbiB7XFxuLVxcdHU4IGksIGosIG5ldF9lbmQgPSBOTEVOIC0gMTtcXG4rXFx0c3RydWN0IG5ldF9wcmVmaXhlcyAqbmV0cywgKnRtcDtcXG4rXFx0dTggaSwgaiwgZm91bmQsIGxlbiA9IDA7XFxuIFxcbiBcXHRzcGluX2xvY2tfYmgoXFx1MDAyNnNldC1cXHUwMDNlbG9jayk7XFxuLVxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBOTEVOOyBpKyspIHtcXG4tXFx0XFx0aWYgKGgtXFx1MDAzZW5ldHNbaV0uY2lkcltuXSAhPSBjaWRyKVxcbi1cXHRcXHRcXHRjb250aW51ZTtcXG4tXFx0XFx0aC1cXHUwMDNlbmV0c1tDSURSX1BPUyhjaWRyKV0ubmV0c1tuXS0tO1xcbi1cXHRcXHRpZiAoaC1cXHUwMDNlbmV0c1tDSURSX1BPUyhjaWRyKV0ubmV0c1tuXSBcXHUwMDNlIDApXFxuLVxcdFxcdFxcdGdvdG8gdW5sb2NrO1xcbi1cXHRcXHRmb3IgKGogPSBpOyBqIFxcdTAwM2MgbmV0X2VuZCBcXHUwMDI2XFx1MDAyNiBoLVxcdTAwM2VuZXRzW2pdLmNpZHJbbl07IGorKylcXG4tXFx0XFx0XFx0aC1cXHUwMDNlbmV0c1tqXS5jaWRyW25dID0gaC1cXHUwMDNlbmV0c1tqICsgMV0uY2lkcltuXTtcXG4tXFx0XFx0aC1cXHUwMDNlbmV0c1tqXS5jaWRyW25dID0gMDtcXG4rXFx0bmV0cyA9IF9faXBzZXRfZGVyZWZlcmVuY2UoaC1cXHUwMDNlcm5ldHNbbl0pO1xcbitcXHRmb3IgKGkgPSAwLCBmb3VuZCA9IC0xOyBpIFxcdTAwM2MgbmV0cy1cXHUwMDNlbGVuOyBpKyspIHtcXG4rXFx0XFx0aWYgKG5ldHMtXFx1MDAzZW5ldHNbaV0uY291bnQpXFxuK1xcdFxcdFxcdGxlbisrO1xcbitcXHRcXHRpZiAobmV0cy1cXHUwMDNlbmV0c1tpXS5jaWRyID09IGNpZHIpXFxuK1xcdFxcdFxcdGZvdW5kID0gaTtcXG4rXFx0fVxcbitcXHRpZiAodW5saWtlbHkoZm91bmQgPT0gLTEpKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcdG5ldHMtXFx1MDAzZW5ldHNbZm91bmRdLmNvdW50LS07XFxuK1xcdGlmIChuZXRzLVxcdTAwM2VuZXRzW2ZvdW5kXS5jb3VudClcXG4gXFx0XFx0Z290byB1bmxvY2s7XFxuK1xcdGxlbi0tO1xcbitcXHR0bXAgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgbmV0X3ByZWZpeGVzKSArXFxuK1xcdFxcdCAgICAgIGxlbiAqIHNpemVvZihzdHJ1Y3QgbmV0X3ByZWZpeCksIEdGUF9BVE9NSUMpO1xcbitcXHRpZiAoIXRtcClcXG4rXFx0XFx0LyogTGVhdmUgYSBob2xlICovXFxuK1xcdFxcdHJldHVybjtcXG4rXFx0dG1wLVxcdTAwM2VsZW4gPSBsZW47XFxuK1xcdGZvciAoaSA9IDAsIGogPSAwOyBpIFxcdTAwM2MgbmV0cy1cXHUwMDNlbGVuOyBpKyspIHtcXG4rXFx0XFx0aWYgKCFuZXRzLVxcdTAwM2VuZXRzW2ldLmNvdW50IHx8IGkgPT0gZm91bmQpXFxuK1xcdFxcdFxcdGNvbnRpbnVlO1xcbitcXHRcXHR0bXAtXFx1MDAzZW5ldHNbal0uY2lkciA9IG5ldHMtXFx1MDAzZW5ldHNbaV0uY2lkcjtcXG4rXFx0XFx0dG1wLVxcdTAwM2VuZXRzW2orK10uY291bnQgPSBuZXRzLVxcdTAwM2VuZXRzW2ldLmNvdW50O1xcbiBcXHR9XFxuK1xcdHJjdV9hc3NpZ25fcG9pbnRlcihoLVxcdTAwM2VybmV0c1tuXSwgdG1wKTtcXG4rXFx0a2ZyZWVfcmN1KG5ldHMsIHJjdSk7XFxuIHVubG9jazpcXG4gXFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNnNldC1cXHUwMDNlbG9jayk7XFxuIH1cXG5AQCAtMzk4LDYgKzQyOCw5IEBAIHN0YXRpYyB2b2lkXFxuIG10eXBlX2ZsdXNoKHN0cnVjdCBpcF9zZXQgKnNldClcXG4ge1xcbiBcXHRzdHJ1Y3QgaHR5cGUgKmggPSBzZXQtXFx1MDAzZWRhdGE7XFxuKyNpZmRlZiBJUF9TRVRfSEFTSF9XSVRIX05FVFNcXG4rXFx0c3RydWN0IG5ldF9wcmVmaXhlcyAqbmV0cywgKnRtcDtcXG4rI2VuZGlmXFxuIFxcdHN0cnVjdCBodGFibGUgKnQ7XFxuIFxcdHN0cnVjdCBoYnVja2V0ICpuO1xcbiBcXHR1MzIgciwgaTtcXG5AQCAtNDIxLDcgKzQ1NCwxNyBAQCBtdHlwZV9mbHVzaChzdHJ1Y3QgaXBfc2V0ICpzZXQpXFxuIFxcdFxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZ0LVxcdTAwM2VocmVnaW9uW3JdLmxvY2spO1xcbiBcXHR9XFxuICNpZmRlZiBJUF9TRVRfSEFTSF9XSVRIX05FVFNcXG4tXFx0bWVtc2V0KGgtXFx1MDAzZW5ldHMsIDAsIHNpemVvZihoLVxcdTAwM2VuZXRzKSk7XFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBJUFNFVF9ORVRfQ09VTlQ7IGkrKykge1xcbitcXHRcXHRuZXRzID0gaXBzZXRfZGVyZWZlcmVuY2VfbmZubChoLVxcdTAwM2VybmV0c1tpXSk7XFxuK1xcdFxcdHRtcCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBuZXRfcHJlZml4ZXMpLCBHRlBfQVRPTUlDKTtcXG4rXFx0XFx0aWYgKCF0bXApIHtcXG4rXFx0XFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIG5ldHMtXFx1MDAzZWxlbjsgaSsrKVxcbitcXHRcXHRcXHRcXHRuZXRzLVxcdTAwM2VuZXRzW2ldLmNvdW50ID0gMDtcXG4rXFx0XFx0fSBlbHNlIHtcXG4rXFx0XFx0XFx0cmN1X2Fzc2lnbl9wb2ludGVyKGgtXFx1MDAzZXJuZXRzW2ldLCB0bXApO1xcbitcXHRcXHRcXHRrZnJlZV9yY3UobmV0cywgcmN1KTtcXG4rXFx0XFx0fVxcbitcXHR9XFxuICNlbmRpZlxcbiB9XFxuIFxcbkBAIC00MjksNiArNDcyLDkgQEAgbXR5cGVfZmx1c2goc3RydWN0IGlwX3NldCAqc2V0KVxcbiBzdGF0aWMgdm9pZFxcbiBtdHlwZV9haGFzaF9kZXN0cm95KHN0cnVjdCBpcF9zZXQgKnNldCwgc3RydWN0IGh0YWJsZSAqdCwgYm9vbCBleHRfZGVzdHJveSlcXG4ge1xcbisjaWZkZWYgSVBfU0VUX0hBU0hfV0lUSF9ORVRTXFxuK1xcdHN0cnVjdCBodHlwZSAqaCA9IHNldC1cXHUwMDNlZGF0YTtcXG4rI2VuZGlmXFxuIFxcdHN0cnVjdCBoYnVja2V0ICpuO1xcbiBcXHR1MzIgaTtcXG4gXFxuQEAgLTQ0Miw2ICs0ODgsMTEgQEAgbXR5cGVfYWhhc2hfZGVzdHJveShzdHJ1Y3QgaXBfc2V0ICpzZXQsIHN0cnVjdCBodGFibGUgKnQsIGJvb2wgZXh0X2Rlc3Ryb3kpXFxuIFxcdFxcdGtmcmVlKG4pO1xcbiBcXHR9XFxuIFxcbisjaWZkZWYgSVBfU0VUX0hBU0hfV0lUSF9ORVRTXFxuK1xcdGlmIChleHRfZGVzdHJveSlcXG4rXFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIElQU0VUX05FVF9DT1VOVDsgaSsrKVxcbitcXHRcXHRcXHRrZnJlZShoLVxcdTAwM2VybmV0c1tpXSk7XFxuKyNlbmRpZlxcbiBcXHRpcF9zZXRfZnJlZSh0LVxcdTAwM2VocmVnaW9uKTtcXG4gXFx0aXBfc2V0X2ZyZWUodCk7XFxuIH1cXG5AQCAtNDUxLDEzICs1MDIsMTQgQEAgc3RhdGljIHZvaWRcXG4gbXR5cGVfZGVzdHJveShzdHJ1Y3QgaXBfc2V0ICpzZXQpXFxuIHtcXG4gXFx0c3RydWN0IGh0eXBlICpoID0gc2V0LVxcdTAwM2VkYXRhO1xcbitcXHRzdHJ1Y3QgaHRhYmxlICp0ID0gKF9fZm9yY2Ugc3RydWN0IGh0YWJsZSAqKWgtXFx1MDAzZXRhYmxlO1xcbiBcXHRzdHJ1Y3QgbGlzdF9oZWFkICpsLCAqbHQ7XFxuIFxcbi1cXHRtdHlwZV9haGFzaF9kZXN0cm95KHNldCwgKF9fZm9yY2Ugc3RydWN0IGh0YWJsZSAqKWgtXFx1MDAzZXRhYmxlLCB0cnVlKTtcXG4tXFx0bGlzdF9mb3JfZWFjaF9zYWZlKGwsIGx0LCBcXHUwMDI2aC1cXHUwMDNlYWQpIHtcXG4rXFx0bGlzdF9mb3JfZWFjaF9zYWZlKGwsIGx0LCBcXHUwMDI2dC1cXHUwMDNlYWQpIHtcXG4gXFx0XFx0bGlzdF9kZWwobCk7XFxuIFxcdFxcdGtmcmVlKGwpO1xcbiBcXHR9XFxuK1xcdG10eXBlX2FoYXNoX2Rlc3Ryb3koc2V0LCB0LCB0cnVlKTtcXG4gXFx0a2ZyZWUoaCk7XFxuIFxcbiBcXHRzZXQtXFx1MDAzZWRhdGEgPSBOVUxMO1xcbkBAIC01MTQsOCArNTY2LDcgQEAgbXR5cGVfZ2NfZG8oc3RydWN0IGlwX3NldCAqc2V0LCBzdHJ1Y3QgaHR5cGUgKmgsIHN0cnVjdCBodGFibGUgKnQsIHUzMiByKVxcbiAjaWZkZWYgSVBfU0VUX0hBU0hfV0lUSF9ORVRTXFxuIFxcdFxcdFxcdGZvciAoayA9IDA7IGsgXFx1MDAzYyBJUFNFVF9ORVRfQ09VTlQ7IGsrKylcXG4gXFx0XFx0XFx0XFx0bXR5cGVfZGVsX2NpZHIoc2V0LCBoLFxcbi1cXHRcXHRcXHRcXHRcXHROQ0lEUl9QVVQoRENJRFJfR0VUKGRhdGEtXFx1MDAzZWNpZHIsIGspKSxcXG4tXFx0XFx0XFx0XFx0XFx0ayk7XFxuK1xcdFxcdFxcdFxcdFxcdERDSURSX0dFVChkYXRhLVxcdTAwM2VjaWRyLCBrKSwgayk7XFxuICNlbmRpZlxcbiBcXHRcXHRcXHR0LVxcdTAwM2VocmVnaW9uW3JdLmVsZW1lbnRzLS07XFxuIFxcdFxcdFxcdGlwX3NldF9leHRfZGVzdHJveShzZXQsIGRhdGEpO1xcbkBAIC01NjksOSArNjIwLDEwIEBAIG10eXBlX2djKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4gXFx0c2V0ID0gZ2MtXFx1MDAzZXNldDtcXG4gXFx0aCA9IHNldC1cXHUwMDNlZGF0YTtcXG4gXFxuLVxcdHNwaW5fbG9ja19iaChcXHUwMDI2c2V0LVxcdTAwM2Vsb2NrKTtcXG4tXFx0dCA9IGlwc2V0X2RlcmVmZXJlbmNlX3NldChoLVxcdTAwM2V0YWJsZSwgc2V0KTtcXG4rXFx0cmN1X3JlYWRfbG9ja19iaCgpO1xcbitcXHR0ID0gcmN1X2RlcmVmZXJlbmNlX2JoKGgtXFx1MDAzZXRhYmxlKTtcXG4gXFx0YXRvbWljX2luYyhcXHUwMDI2dC1cXHUwMDNldXJlZik7XFxuK1xcdHJjdV9yZWFkX3VubG9ja19iaCgpO1xcbiBcXHRudW1vZl9sb2NrcyA9IGFoYXNoX251bW9mX2xvY2tzKHQtXFx1MDAzZWh0YWJsZV9iaXRzKTtcXG4gXFx0ciA9IGdjLVxcdTAwM2VyZWdpb24rKztcXG4gXFx0aWYgKHIgXFx1MDAzZT0gbnVtb2ZfbG9ja3MpIHtcXG5AQCAtNTgwLDExICs2MzIsMTMgQEAgbXR5cGVfZ2Moc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbiBcXHRuZXh0X3J1biA9IChJUFNFVF9HQ19QRVJJT0Qoc2V0LVxcdTAwM2V0aW1lb3V0KSAqIEhaKSAvIG51bW9mX2xvY2tzO1xcbiBcXHRpZiAobmV4dF9ydW4gXFx1MDAzYyBIWi8xMClcXG4gXFx0XFx0bmV4dF9ydW4gPSBIWi8xMDtcXG4tXFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNnNldC1cXHUwMDNlbG9jayk7XFxuIFxcbi1cXHRtdHlwZV9nY19kbyhzZXQsIGgsIHQsIHIpO1xcbitcXHRzcGluX2xvY2tfYmgoXFx1MDAyNmdjLVxcdTAwM2Vsb2NrKTtcXG4rXFx0aWYgKCF0LVxcdTAwM2VyZXNpemluZylcXG4rXFx0XFx0bXR5cGVfZ2NfZG8oc2V0LCBoLCB0LCByKTtcXG4rXFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNmdjLVxcdTAwM2Vsb2NrKTtcXG4gXFxuLVxcdGlmIChhdG9taWNfZGVjX2FuZF90ZXN0KFxcdTAwMjZ0LVxcdTAwM2V1cmVmKSBcXHUwMDI2XFx1MDAyNiBhdG9taWNfcmVhZChcXHUwMDI2dC1cXHUwMDNlcmVmKSkge1xcbitcXHRpZiAoYXRvbWljX2RlY19hbmRfdGVzdChcXHUwMDI2dC1cXHUwMDNldXJlZikgXFx1MDAyNlxcdTAwMjYgdC1cXHUwMDNlcmVzaXppbmcpIHtcXG4gXFx0XFx0cHJfZGVidWcoXFxcIlRhYmxlIGRlc3Ryb3kgYWZ0ZXIgcmVzaXplIGJ5IGV4cGlyZTogJXBcXFxcblxcXCIsIHQpO1xcbiBcXHRcXHRtdHlwZV9haGFzaF9kZXN0cm95KHNldCwgdCwgZmFsc2UpO1xcbiBcXHR9XFxuQEAgLTY2OCwxNSArNzIyLDE4IEBAIG10eXBlX3Jlc2l6ZShzdHJ1Y3QgaXBfc2V0ICpzZXQsIGJvb2wgcmV0cmllZClcXG4gXFx0fVxcbiBcXHR0LVxcdTAwM2VodGFibGVfYml0cyA9IGh0YWJsZV9iaXRzO1xcbiBcXHR0LVxcdTAwM2VtYXhlbGVtID0gaC1cXHUwMDNlbWF4ZWxlbSAvIGFoYXNoX251bW9mX2xvY2tzKGh0YWJsZV9iaXRzKTtcXG4rXFx0SU5JVF9MSVNUX0hFQUQoXFx1MDAyNnQtXFx1MDAzZWFkKTtcXG4gXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIGFoYXNoX251bW9mX2xvY2tzKGh0YWJsZV9iaXRzKTsgaSsrKVxcbiBcXHRcXHRzcGluX2xvY2tfaW5pdChcXHUwMDI2dC1cXHUwMDNlaHJlZ2lvbltpXS5sb2NrKTtcXG4gXFxuIFxcdC8qIFRoZXJlIGNhbid0IGJlIGFub3RoZXIgcGFyYWxsZWwgcmVzaXppbmcsXFxuLVxcdCAqIGJ1dCBkdW1waW5nLCBnYywga2VybmVsIHNpZGUgYWRkL2RlbCBhcmUgcG9zc2libGVcXG4rXFx0ICogYnV0IGR1bXBpbmcgYW5kIGtlcm5lbCBzaWRlIGFkZC9kZWwgYXJlIHBvc3NpYmxlXFxuIFxcdCAqL1xcbiBcXHRvcmlnID0gaXBzZXRfZGVyZWZlcmVuY2VfYmhfbmZubChoLVxcdTAwM2V0YWJsZSk7XFxuLVxcdGF0b21pY19zZXQoXFx1MDAyNm9yaWctXFx1MDAzZXJlZiwgMSk7XFxuIFxcdGF0b21pY19pbmMoXFx1MDAyNm9yaWctXFx1MDAzZXVyZWYpO1xcbitcXHRzcGluX2xvY2tfYmgoXFx1MDAyNmgtXFx1MDAzZWdjLmxvY2spO1xcbitcXHRvcmlnLVxcdTAwM2VyZXNpemluZyA9IHRydWU7XFxuK1xcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZoLVxcdTAwM2VnYy5sb2NrKTtcXG4gXFx0cHJfZGVidWcoXFxcImF0dGVtcHQgdG8gcmVzaXplIHNldCAlcyBmcm9tICV1IHRvICV1LCB0ICVwXFxcXG5cXFwiLFxcbiBcXHRcXHQgc2V0LVxcdTAwM2VuYW1lLCBvcmlnLVxcdTAwM2VodGFibGVfYml0cywgaHRhYmxlX2JpdHMsIG9yaWcpO1xcbiBcXHRmb3IgKHIgPSAwOyByIFxcdTAwM2MgYWhhc2hfbnVtb2ZfbG9ja3Mob3JpZy1cXHUwMDNlaHRhYmxlX2JpdHMpOyByKyspIHtcXG5AQCAtNzY4LDcgKzgyNSw3IEBAIG10eXBlX3Jlc2l6ZShzdHJ1Y3QgaXBfc2V0ICpzZXQsIGJvb2wgcmV0cmllZClcXG4gXFx0ICogS2VybmVsLXNpZGUgYWRkIGNhbm5vdCB0cmlnZ2VyIGEgcmVzaXplIGFuZCB1c2Vyc3BhY2UgYWN0aW9uc1xcbiBcXHQgKiBhcmUgc2VyaWFsaXplZCBieSB0aGUgbXV0ZXguXFxuIFxcdCAqL1xcbi1cXHRsaXN0X2Zvcl9lYWNoX3NhZmUobCwgbHQsIFxcdTAwMjZoLVxcdTAwM2VhZCkge1xcbitcXHRsaXN0X2Zvcl9lYWNoX3NhZmUobCwgbHQsIFxcdTAwMjZvcmlnLVxcdTAwM2VhZCkge1xcbiBcXHRcXHR4ID0gbGlzdF9lbnRyeShsLCBzdHJ1Y3QgbXR5cGVfcmVzaXplX2FkLCBsaXN0KTtcXG4gXFx0XFx0aWYgKHgtXFx1MDAzZWFkID09IElQU0VUX0FERCkge1xcbiBcXHRcXHRcXHRtdHlwZV9hZGQoc2V0LCBcXHUwMDI2eC1cXHUwMDNlZCwgXFx1MDAyNngtXFx1MDAzZWV4dCwgXFx1MDAyNngtXFx1MDAzZW1leHQsIHgtXFx1MDAzZWZsYWdzKTtcXG5AQCAtNzkyLDExICs4NDksMjQgQEAgbXR5cGVfcmVzaXplKHN0cnVjdCBpcF9zZXQgKnNldCwgYm9vbCByZXRyaWVkKVxcbiBcXG4gY2xlYW51cDpcXG4gXFx0cmN1X3JlYWRfdW5sb2NrX2JoKCk7XFxuLVxcdGF0b21pY19zZXQoXFx1MDAyNm9yaWctXFx1MDAzZXJlZiwgMCk7XFxuK1xcdHNwaW5fbG9ja19iaChcXHUwMDI2aC1cXHUwMDNlZ2MubG9jayk7XFxuK1xcdG9yaWctXFx1MDAzZXJlc2l6aW5nID0gZmFsc2U7XFxuK1xcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZoLVxcdTAwM2VnYy5sb2NrKTtcXG4rXFx0LyogTWFrZSBzdXJlIHBhcmFsbGVsIHJlYWRlcnMgc2VlIHRoYXQgb3JpZy1cXHUwMDNlcmVzaXppbmcgaXMgZmFsc2VcXG4rXFx0ICogYmVmb3JlIHdlIGRlY3JlbWVudCB1cmVmICovXFxuK1xcdHN5bmNocm9uaXplX3JjdSgpO1xcbiBcXHRhdG9taWNfZGVjKFxcdTAwMjZvcmlnLVxcdTAwM2V1cmVmKTtcXG4gXFx0bXR5cGVfYWhhc2hfZGVzdHJveShzZXQsIHQsIGZhbHNlKTtcXG4gXFx0aWYgKHJldCA9PSAtRUFHQUlOKVxcbiBcXHRcXHRnb3RvIHJldHJ5O1xcbitcXG4rXFx0LyogQ2xlYW51cCB0aGUgYmFja2xvZyBvZiBBREQvREVMIGVsZW1lbnRzICovXFxuK1xcdHNwaW5fbG9ja19iaChcXHUwMDI2c2V0LVxcdTAwM2Vsb2NrKTtcXG4rXFx0bGlzdF9mb3JfZWFjaF9zYWZlKGwsIGx0LCBcXHUwMDI2b3JpZy1cXHUwMDNlYWQpIHtcXG4rXFx0XFx0bGlzdF9kZWwobCk7XFxuK1xcdFxcdGtmcmVlKGwpO1xcbitcXHR9XFxuK1xcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZzZXQtXFx1MDAzZWxvY2spO1xcbiBcXHRnb3RvIG91dDtcXG4gXFxuIGhid2FybjpcXG5AQCAtODYwLDE1ICs5MzAsMTMgQEAgbXR5cGVfYWRkKHN0cnVjdCBpcF9zZXQgKnNldCwgdm9pZCAqdmFsdWUsIGNvbnN0IHN0cnVjdCBpcF9zZXRfZXh0ICpleHQsXFxuIFxcdGtleSA9IEhLRVkodmFsdWUsIGgtXFx1MDAzZWluaXR2YWwsIHQtXFx1MDAzZWh0YWJsZV9iaXRzKTtcXG4gXFx0ciA9IGFoYXNoX3JlZ2lvbihrZXkpO1xcbiBcXHRhdG9taWNfaW5jKFxcdTAwMjZ0LVxcdTAwM2V1cmVmKTtcXG4rXFx0cmN1X3JlYWRfdW5sb2NrX2JoKCk7XFxuIFxcdGVsZW1lbnRzID0gdC1cXHUwMDNlaHJlZ2lvbltyXS5lbGVtZW50cztcXG4gXFx0bWF4ZWxlbSA9IHQtXFx1MDAzZW1heGVsZW07XFxuIFxcdGlmIChlbGVtZW50cyBcXHUwMDNlPSBtYXhlbGVtKSB7XFxuIFxcdFxcdHUzMiBlO1xcbi1cXHRcXHRpZiAoU0VUX1dJVEhfVElNRU9VVChzZXQpKSB7XFxuLVxcdFxcdFxcdHJjdV9yZWFkX3VubG9ja19iaCgpO1xcbitcXHRcXHRpZiAoU0VUX1dJVEhfVElNRU9VVChzZXQpKVxcbiBcXHRcXHRcXHRtdHlwZV9nY19kbyhzZXQsIGgsIHQsIHIpO1xcbi1cXHRcXHRcXHRyY3VfcmVhZF9sb2NrX2JoKCk7XFxuLVxcdFxcdH1cXG4gXFx0XFx0bWF4ZWxlbSA9IGgtXFx1MDAzZW1heGVsZW07XFxuIFxcdFxcdGVsZW1lbnRzID0gMDtcXG4gXFx0XFx0Zm9yIChlID0gMDsgZSBcXHUwMDNjIGFoYXNoX251bW9mX2xvY2tzKHQtXFx1MDAzZWh0YWJsZV9iaXRzKTsgZSsrKVxcbkBAIC04NzYsNyArOTQ0LDYgQEAgbXR5cGVfYWRkKHN0cnVjdCBpcF9zZXQgKnNldCwgdm9pZCAqdmFsdWUsIGNvbnN0IHN0cnVjdCBpcF9zZXRfZXh0ICpleHQsXFxuIFxcdFxcdGlmIChlbGVtZW50cyBcXHUwMDNlPSBtYXhlbGVtIFxcdTAwMjZcXHUwMDI2IFNFVF9XSVRIX0ZPUkNFQUREKHNldCkpXFxuIFxcdFxcdFxcdGZvcmNlYWRkID0gdHJ1ZTtcXG4gXFx0fVxcbi1cXHRyY3VfcmVhZF91bmxvY2tfYmgoKTtcXG4gXFxuIFxcdHNwaW5fbG9ja19iaChcXHUwMDI2dC1cXHUwMDNlaHJlZ2lvbltyXS5sb2NrKTtcXG4gXFx0biA9IHJjdV9kZXJlZmVyZW5jZV9iaChoYnVja2V0KHQsIGtleSkpO1xcbkBAIC05MjksOCArOTk2LDcgQEAgbXR5cGVfYWRkKHN0cnVjdCBpcF9zZXQgKnNldCwgdm9pZCAqdmFsdWUsIGNvbnN0IHN0cnVjdCBpcF9zZXRfZXh0ICpleHQsXFxuICNpZmRlZiBJUF9TRVRfSEFTSF9XSVRIX05FVFNcXG4gXFx0XFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIElQU0VUX05FVF9DT1VOVDsgaSsrKVxcbiBcXHRcXHRcXHRcXHRtdHlwZV9kZWxfY2lkcihzZXQsIGgsXFxuLVxcdFxcdFxcdFxcdFxcdE5DSURSX1BVVChEQ0lEUl9HRVQoZGF0YS1cXHUwMDNlY2lkciwgaSkpLFxcbi1cXHRcXHRcXHRcXHRcXHRpKTtcXG4rXFx0XFx0XFx0XFx0XFx0RENJRFJfR0VUKGRhdGEtXFx1MDAzZWNpZHIsIGkpLCBpKTtcXG4gI2VuZGlmXFxuIFxcdFxcdFxcdGlwX3NldF9leHRfZGVzdHJveShzZXQsIGRhdGEpO1xcbiBcXHRcXHRcXHR0LVxcdTAwM2VocmVnaW9uW3JdLmVsZW1lbnRzLS07XFxuQEAgLTk3NSw3ICsxMDQxLDcgQEAgbXR5cGVfYWRkKHN0cnVjdCBpcF9zZXQgKnNldCwgdm9pZCAqdmFsdWUsIGNvbnN0IHN0cnVjdCBpcF9zZXRfZXh0ICpleHQsXFxuIFxcdHQtXFx1MDAzZWhyZWdpb25bcl0uZWxlbWVudHMrKztcXG4gI2lmZGVmIElQX1NFVF9IQVNIX1dJVEhfTkVUU1xcbiBcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgSVBTRVRfTkVUX0NPVU5UOyBpKyspXFxuLVxcdFxcdG10eXBlX2FkZF9jaWRyKHNldCwgaCwgTkNJRFJfUFVUKERDSURSX0dFVChkLVxcdTAwM2VjaWRyLCBpKSksIGkpO1xcbitcXHRcXHRtdHlwZV9hZGRfY2lkcihzZXQsIGgsIERDSURSX0dFVChkLVxcdTAwM2VjaWRyLCBpKSwgaSk7XFxuICNlbmRpZlxcbiBcXHRtZW1jcHkoZGF0YSwgZCwgc2l6ZW9mKHN0cnVjdCBtdHlwZV9lbGVtKSk7XFxuIG92ZXJ3cml0ZV9leHRlbnNpb25zOlxcbkBAIC0xMDAzLDcgKzEwNjksNyBAQCBtdHlwZV9hZGQoc3RydWN0IGlwX3NldCAqc2V0LCB2b2lkICp2YWx1ZSwgY29uc3Qgc3RydWN0IGlwX3NldF9leHQgKmV4dCxcXG4gXFx0cmV0ID0gMDtcXG4gcmVzaXplOlxcbiBcXHRzcGluX3VubG9ja19iaChcXHUwMDI2dC1cXHUwMDNlaHJlZ2lvbltyXS5sb2NrKTtcXG4tXFx0aWYgKGF0b21pY19yZWFkKFxcdTAwMjZ0LVxcdTAwM2VyZWYpIFxcdTAwMjZcXHUwMDI2IGV4dC1cXHUwMDNldGFyZ2V0KSB7XFxuK1xcdGlmICh0LVxcdTAwM2VyZXNpemluZyBcXHUwMDI2XFx1MDAyNiBleHQgXFx1MDAyNlxcdTAwMjYgZXh0LVxcdTAwM2V0YXJnZXQpIHtcXG4gXFx0XFx0LyogUmVzaXplIGlzIGluIHByb2Nlc3MgYW5kIGtlcm5lbCBzaWRlIGFkZCwgc2F2ZSB2YWx1ZXMgKi9cXG4gXFx0XFx0c3RydWN0IG10eXBlX3Jlc2l6ZV9hZCAqeDtcXG4gXFxuQEAgLTEwMTcsNyArMTA4Myw3IEBAIG10eXBlX2FkZChzdHJ1Y3QgaXBfc2V0ICpzZXQsIHZvaWQgKnZhbHVlLCBjb25zdCBzdHJ1Y3QgaXBfc2V0X2V4dCAqZXh0LFxcbiBcXHRcXHRtZW1jcHkoXFx1MDAyNngtXFx1MDAzZW1leHQsIG1leHQsIHNpemVvZihzdHJ1Y3QgaXBfc2V0X2V4dCkpO1xcbiBcXHRcXHR4LVxcdTAwM2VmbGFncyA9IGZsYWdzO1xcbiBcXHRcXHRzcGluX2xvY2tfYmgoXFx1MDAyNnNldC1cXHUwMDNlbG9jayk7XFxuLVxcdFxcdGxpc3RfYWRkX3RhaWwoXFx1MDAyNngtXFx1MDAzZWxpc3QsIFxcdTAwMjZoLVxcdTAwM2VhZCk7XFxuK1xcdFxcdGxpc3RfYWRkX3RhaWwoXFx1MDAyNngtXFx1MDAzZWxpc3QsIFxcdTAwMjZ0LVxcdTAwM2VhZCk7XFxuIFxcdFxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZzZXQtXFx1MDAzZWxvY2spO1xcbiBcXHR9XFxuIFxcdGdvdG8gb3V0O1xcbkBAIC0xMDMwLDcgKzEwOTYsNyBAQCBtdHlwZV9hZGQoc3RydWN0IGlwX3NldCAqc2V0LCB2b2lkICp2YWx1ZSwgY29uc3Qgc3RydWN0IGlwX3NldF9leHQgKmV4dCxcXG4gdW5sb2NrOlxcbiBcXHRzcGluX3VubG9ja19iaChcXHUwMDI2dC1cXHUwMDNlaHJlZ2lvbltyXS5sb2NrKTtcXG4gb3V0Olxcbi1cXHRpZiAoYXRvbWljX2RlY19hbmRfdGVzdChcXHUwMDI2dC1cXHUwMDNldXJlZikgXFx1MDAyNlxcdTAwMjYgYXRvbWljX3JlYWQoXFx1MDAyNnQtXFx1MDAzZXJlZikpIHtcXG4rXFx0aWYgKGF0b21pY19kZWNfYW5kX3Rlc3QoXFx1MDAyNnQtXFx1MDAzZXVyZWYpIFxcdTAwMjZcXHUwMDI2IHQtXFx1MDAzZXJlc2l6aW5nKSB7XFxuIFxcdFxcdHByX2RlYnVnKFxcXCJUYWJsZSBkZXN0cm95IGFmdGVyIHJlc2l6ZSBieSBhZGQ6ICVwXFxcXG5cXFwiLCB0KTtcXG4gXFx0XFx0bXR5cGVfYWhhc2hfZGVzdHJveShzZXQsIHQsIGZhbHNlKTtcXG4gXFx0fVxcbkBAIC0xMDg5LDExICsxMTU1LDExIEBAIG10eXBlX2RlbChzdHJ1Y3QgaXBfc2V0ICpzZXQsIHZvaWQgKnZhbHVlLCBjb25zdCBzdHJ1Y3QgaXBfc2V0X2V4dCAqZXh0LFxcbiAjaWZkZWYgSVBfU0VUX0hBU0hfV0lUSF9ORVRTXFxuIFxcdFxcdGZvciAoaiA9IDA7IGogXFx1MDAzYyBJUFNFVF9ORVRfQ09VTlQ7IGorKylcXG4gXFx0XFx0XFx0bXR5cGVfZGVsX2NpZHIoc2V0LCBoLFxcbi1cXHRcXHRcXHRcXHQgICAgICAgTkNJRFJfUFVUKERDSURSX0dFVChkLVxcdTAwM2VjaWRyLCBqKSksIGopO1xcbitcXHRcXHRcXHRcXHREQ0lEUl9HRVQoZC1cXHUwMDNlY2lkciwgaiksIGopO1xcbiAjZW5kaWZcXG4gXFx0XFx0aXBfc2V0X2V4dF9kZXN0cm95KHNldCwgZGF0YSk7XFxuIFxcbi1cXHRcXHRpZiAoYXRvbWljX3JlYWQoXFx1MDAyNnQtXFx1MDAzZXJlZikgXFx1MDAyNlxcdTAwMjYgZXh0LVxcdTAwM2V0YXJnZXQpIHtcXG4rXFx0XFx0aWYgKHQtXFx1MDAzZXJlc2l6aW5nIFxcdTAwMjZcXHUwMDI2IGV4dCBcXHUwMDI2XFx1MDAyNiBleHQtXFx1MDAzZXRhcmdldCkge1xcbiBcXHRcXHRcXHQvKiBSZXNpemUgaXMgaW4gcHJvY2VzcyBhbmQga2VybmVsIHNpZGUgZGVsLFxcbiBcXHRcXHRcXHQgKiBzYXZlIHZhbHVlc1xcbiBcXHRcXHRcXHQgKi9cXG5AQCAtMTE0MSwxMCArMTIwNywxMCBAQCBtdHlwZV9kZWwoc3RydWN0IGlwX3NldCAqc2V0LCB2b2lkICp2YWx1ZSwgY29uc3Qgc3RydWN0IGlwX3NldF9leHQgKmV4dCxcXG4gXFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNnQtXFx1MDAzZWhyZWdpb25bcl0ubG9jayk7XFxuIFxcdGlmICh4KSB7XFxuIFxcdFxcdHNwaW5fbG9ja19iaChcXHUwMDI2c2V0LVxcdTAwM2Vsb2NrKTtcXG4tXFx0XFx0bGlzdF9hZGQoXFx1MDAyNngtXFx1MDAzZWxpc3QsIFxcdTAwMjZoLVxcdTAwM2VhZCk7XFxuK1xcdFxcdGxpc3RfYWRkKFxcdTAwMjZ4LVxcdTAwM2VsaXN0LCBcXHUwMDI2dC1cXHUwMDNlYWQpO1xcbiBcXHRcXHRzcGluX3VubG9ja19iaChcXHUwMDI2c2V0LVxcdTAwM2Vsb2NrKTtcXG4gXFx0fVxcbi1cXHRpZiAoYXRvbWljX2RlY19hbmRfdGVzdChcXHUwMDI2dC1cXHUwMDNldXJlZikgXFx1MDAyNlxcdTAwMjYgYXRvbWljX3JlYWQoXFx1MDAyNnQtXFx1MDAzZXJlZikpIHtcXG4rXFx0aWYgKGF0b21pY19kZWNfYW5kX3Rlc3QoXFx1MDAyNnQtXFx1MDAzZXVyZWYpIFxcdTAwMjZcXHUwMDI2IHQtXFx1MDAzZXJlc2l6aW5nKSB7XFxuIFxcdFxcdHByX2RlYnVnKFxcXCJUYWJsZSBkZXN0cm95IGFmdGVyIHJlc2l6ZSBieSBkZWw6ICVwXFxcXG5cXFwiLCB0KTtcXG4gXFx0XFx0bXR5cGVfYWhhc2hfZGVzdHJveShzZXQsIHQsIGZhbHNlKTtcXG4gXFx0fVxcbkBAIC0xMTcyLDI4ICsxMjM4LDM3IEBAIG10eXBlX3Rlc3RfY2lkcnMoc3RydWN0IGlwX3NldCAqc2V0LCBzdHJ1Y3QgbXR5cGVfZWxlbSAqZCxcXG4ge1xcbiBcXHRzdHJ1Y3QgaHR5cGUgKmggPSBzZXQtXFx1MDAzZWRhdGE7XFxuIFxcdHN0cnVjdCBodGFibGUgKnQgPSByY3VfZGVyZWZlcmVuY2VfYmgoaC1cXHUwMDNldGFibGUpO1xcbitcXHRzdHJ1Y3QgbmV0X3ByZWZpeGVzICpuZXRzMDtcXG4gXFx0c3RydWN0IGhidWNrZXQgKm47XFxuIFxcdHN0cnVjdCBtdHlwZV9lbGVtICpkYXRhO1xcbiAjaWYgSVBTRVRfTkVUX0NPVU5UID09IDJcXG4rXFx0c3RydWN0IG5ldF9wcmVmaXhlcyAqbmV0czE7XFxuIFxcdHN0cnVjdCBtdHlwZV9lbGVtIG9yaWcgPSAqZDtcXG4tXFx0aW50IHJldCwgaSwgaiA9IDAsIGs7XFxuK1xcdGludCByZXQsIGksIGosIGs7XFxuICNlbHNlXFxuLVxcdGludCByZXQsIGksIGogPSAwO1xcbitcXHRpbnQgcmV0LCBpLCBqO1xcbiAjZW5kaWZcXG4gXFx0dTMyIGtleSwgbXVsdGkgPSAwO1xcbiBcXHR1OCBwb3M7XFxuIFxcbiBcXHRwcl9kZWJ1ZyhcXFwidGVzdCBieSBuZXRzXFxcXG5cXFwiKTtcXG4tXFx0Zm9yICg7IGogXFx1MDAzYyBOTEVOIFxcdTAwMjZcXHUwMDI2IGgtXFx1MDAzZW5ldHNbal0uY2lkclswXSBcXHUwMDI2XFx1MDAyNiAhbXVsdGk7IGorKykge1xcbitcXHRyY3VfcmVhZF9sb2NrX2JoKCk7XFxuK1xcdG5ldHMwID0gcmN1X2RlcmVmZXJlbmNlX2JoKGgtXFx1MDAzZXJuZXRzWzBdKTtcXG4rI2lmIElQU0VUX05FVF9DT1VOVCA9PSAyXFxuK1xcdG5ldHMxID0gcmN1X2RlcmVmZXJlbmNlX2JoKGgtXFx1MDAzZXJuZXRzWzFdKTtcXG4rI2VuZGlmXFxuK1xcdGZvciAoaiA9IDA7IGogXFx1MDAzYyBuZXRzMC1cXHUwMDNlbGVuIFxcdTAwMjZcXHUwMDI2ICFtdWx0aTsgaisrKSB7XFxuK1xcdFxcdGlmICghbmV0czAtXFx1MDAzZW5ldHNbal0uY291bnQpXFxuK1xcdFxcdFxcdGNvbnRpbnVlO1xcbiAjaWYgSVBTRVRfTkVUX0NPVU5UID09IDJcXG4gXFx0XFx0bXR5cGVfZGF0YV9yZXNldF9lbGVtKGQsIFxcdTAwMjZvcmlnKTtcXG4tXFx0XFx0bXR5cGVfZGF0YV9uZXRtYXNrKGQsIE5DSURSX0dFVChoLVxcdTAwM2VuZXRzW2pdLmNpZHJbMF0pLCBmYWxzZSk7XFxuLVxcdFxcdGZvciAoayA9IDA7IGsgXFx1MDAzYyBOTEVOIFxcdTAwMjZcXHUwMDI2IGgtXFx1MDAzZW5ldHNba10uY2lkclsxXSBcXHUwMDI2XFx1MDAyNiAhbXVsdGk7XFxuLVxcdFxcdCAgICAgaysrKSB7XFxuLVxcdFxcdFxcdG10eXBlX2RhdGFfbmV0bWFzayhkLCBOQ0lEUl9HRVQoaC1cXHUwMDNlbmV0c1trXS5jaWRyWzFdKSxcXG4tXFx0XFx0XFx0XFx0XFx0ICAgdHJ1ZSk7XFxuK1xcdFxcdG10eXBlX2RhdGFfbmV0bWFzayhkLCBuZXRzMC1cXHUwMDNlbmV0c1tqXS5jaWRyLCBmYWxzZSk7XFxuK1xcdFxcdGZvciAoayA9IDA7IGsgXFx1MDAzYyBuZXRzMS1cXHUwMDNlbGVuIFxcdTAwMjZcXHUwMDI2ICFtdWx0aTsgaysrKSB7XFxuK1xcdFxcdFxcdGlmICghbmV0czEtXFx1MDAzZW5ldHNba10uY291bnQpXFxuK1xcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbitcXHRcXHRcXHRtdHlwZV9kYXRhX25ldG1hc2soZCwgbmV0czEtXFx1MDAzZW5ldHNba10uY2lkciwgdHJ1ZSk7XFxuICNlbHNlXFxuLVxcdFxcdG10eXBlX2RhdGFfbmV0bWFzayhkLCBOQ0lEUl9HRVQoaC1cXHUwMDNlbmV0c1tqXS5jaWRyWzBdKSk7XFxuK1xcdFxcdG10eXBlX2RhdGFfbmV0bWFzayhkLCBuZXRzMC1cXHUwMDNlbmV0c1tqXS5jaWRyKTtcXG4gI2VuZGlmXFxuIFxcdFxcdGtleSA9IEhLRVkoZCwgaC1cXHUwMDNlaW5pdHZhbCwgdC1cXHUwMDNlaHRhYmxlX2JpdHMpO1xcbiBcXHRcXHRuID0gcmN1X2RlcmVmZXJlbmNlX2JoKGhidWNrZXQodCwga2V5KSk7XFxuQEAgLTEyMDgsNyArMTI4Myw3IEBAIG10eXBlX3Rlc3RfY2lkcnMoc3RydWN0IGlwX3NldCAqc2V0LCBzdHJ1Y3QgbXR5cGVfZWxlbSAqZCxcXG4gXFx0XFx0XFx0XFx0Y29udGludWU7XFxuIFxcdFxcdFxcdHJldCA9IG10eXBlX2RhdGFfbWF0Y2goZGF0YSwgZXh0LCBtZXh0LCBzZXQsIGZsYWdzKTtcXG4gXFx0XFx0XFx0aWYgKHJldCAhPSAwKVxcbi1cXHRcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbitcXHRcXHRcXHRcXHRnb3RvIHVubG9jaztcXG4gI2lmZGVmIElQX1NFVF9IQVNIX1dJVEhfTVVMVElcXG4gXFx0XFx0XFx0LyogTm8gbWF0Y2gsIHJlc2V0IG11bHRpcGxlIG1hdGNoIGZsYWcgKi9cXG4gXFx0XFx0XFx0bXVsdGkgPSAwO1xcbkBAIC0xMjE4LDcgKzEyOTMsMTAgQEAgbXR5cGVfdGVzdF9jaWRycyhzdHJ1Y3QgaXBfc2V0ICpzZXQsIHN0cnVjdCBtdHlwZV9lbGVtICpkLFxcbiBcXHRcXHR9XFxuICNlbmRpZlxcbiBcXHR9XFxuLVxcdHJldHVybiAwO1xcbitcXHRyZXQgPSAwO1xcbit1bmxvY2s6XFxuK1xcdHJjdV9yZWFkX3VubG9ja19iaCgpO1xcbitcXHRyZXR1cm4gcmV0O1xcbiB9XFxuICNlbmRpZlxcbiBcXG5AQCAtMTM1Myw3ICsxNDMxLDcgQEAgbXR5cGVfdXJlZihzdHJ1Y3QgaXBfc2V0ICpzZXQsIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYiwgYm9vbCBzdGFydClcXG4gXFx0XFx0cmN1X3JlYWRfdW5sb2NrX2JoKCk7XFxuIFxcdH0gZWxzZSBpZiAoY2ItXFx1MDAzZWFyZ3NbSVBTRVRfQ0JfUFJJVkFURV0pIHtcXG4gXFx0XFx0dCA9IChzdHJ1Y3QgaHRhYmxlICopY2ItXFx1MDAzZWFyZ3NbSVBTRVRfQ0JfUFJJVkFURV07XFxuLVxcdFxcdGlmIChhdG9taWNfZGVjX2FuZF90ZXN0KFxcdTAwMjZ0LVxcdTAwM2V1cmVmKSBcXHUwMDI2XFx1MDAyNiBhdG9taWNfcmVhZChcXHUwMDI2dC1cXHUwMDNlcmVmKSkge1xcbitcXHRcXHRpZiAoYXRvbWljX2RlY19hbmRfdGVzdChcXHUwMDI2dC1cXHUwMDNldXJlZikgXFx1MDAyNlxcdTAwMjYgdC1cXHUwMDNlcmVzaXppbmcpIHtcXG4gXFx0XFx0XFx0cHJfZGVidWcoXFxcIlRhYmxlIGRlc3Ryb3kgYWZ0ZXIgcmVzaXplIFxcXCJcXG4gXFx0XFx0XFx0XFx0IFxcXCIgYnkgZHVtcDogJXBcXFxcblxcXCIsIHQpO1xcbiBcXHRcXHRcXHRtdHlwZV9haGFzaF9kZXN0cm95KHNldCwgdCwgZmFsc2UpO1xcbkBAIC0xNDgzLDYgKzE1NjEsOSBAQCBJUFNFVF9UT0tFTihIVFlQRSwgX2NyZWF0ZSkoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgaXBfc2V0ICpzZXQsXFxuIFxcdGludCByZXQgX19hdHRyaWJ1dGVfXygodW51c2VkKSkgPSAwO1xcbiBcXHR1OCBuZXRtYXNrID0gc2V0LVxcdTAwM2VmYW1pbHkgPT0gTkZQUk9UT19JUFY0ID8gMzIgOiAxMjg7XFxuIFxcdHVuaW9uIG5mX2luZXRfYWRkciBiaXRtYXNrID0gb25lc21hc2s7XFxuKyNlbmRpZlxcbisjaWZkZWYgSVBfU0VUX0hBU0hfV0lUSF9ORVRTXFxuK1xcdHN0cnVjdCBuZXRfcHJlZml4ZXMgKm5ldHM7XFxuICNlbmRpZlxcbiBcXHRzaXplX3QgaHNpemU7XFxuIFxcdHN0cnVjdCBodHlwZSAqaDtcXG5AQCAtMTU2Niw3ICsxNjQ3LDEzIEBAIElQU0VUX1RPS0VOKEhUWVBFLCBfY3JlYXRlKShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBpcF9zZXQgKnNldCxcXG4gXFx0aWYgKHRiW0lQU0VUX0FUVFJfTUFYRUxFTV0pXFxuIFxcdFxcdG1heGVsZW0gPSBpcF9zZXRfZ2V0X2gzMih0YltJUFNFVF9BVFRSX01BWEVMRU1dKTtcXG4gXFxuLVxcdGhzaXplID0gc2l6ZW9mKCpoKTtcXG4rI2lmZGVmIElQX1NFVF9QUk9UT19VTkRFRlxcbitcXHRoc2l6ZSA9IHNpemVvZihzdHJ1Y3QgaHR5cGUpO1xcbisjZWxzZVxcbitcXHRoc2l6ZSA9IHNldC1cXHUwMDNlZmFtaWx5ID09IE5GUFJPVE9fSVBWNiA/XFxuK1xcdFxcdHNpemVvZihzdHJ1Y3QgSVBTRVRfVE9LRU4oSFRZUEUsIDYpKSA6XFxuK1xcdFxcdHNpemVvZihzdHJ1Y3QgSVBTRVRfVE9LRU4oSFRZUEUsIDQpKTtcXG4rI2VuZGlmXFxuIFxcdGggPSBremFsbG9jKGhzaXplLCBHRlBfS0VSTkVMKTtcXG4gXFx0aWYgKCFoKVxcbiBcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG5AQCAtMTU3NywyMiArMTY2NCwyNyBAQCBJUFNFVF9UT0tFTihIVFlQRSwgX2NyZWF0ZSkoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgaXBfc2V0ICpzZXQsXFxuIFxcdCAqL1xcbiBcXHRoYml0cyA9IGZscyhoYXNoc2l6ZSAtIDEpO1xcbiBcXHRoc2l6ZSA9IGh0YWJsZV9zaXplKGhiaXRzKTtcXG4tXFx0aWYgKGhzaXplID09IDApIHtcXG4tXFx0XFx0a2ZyZWUoaCk7XFxuLVxcdFxcdHJldHVybiAtRU5PTUVNO1xcbi1cXHR9XFxuK1xcdGlmIChoc2l6ZSA9PSAwKVxcbitcXHRcXHRnb3RvIGZyZWVfaDtcXG4gXFx0dCA9IGlwX3NldF9hbGxvYyhoc2l6ZSk7XFxuLVxcdGlmICghdCkge1xcbi1cXHRcXHRrZnJlZShoKTtcXG4tXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuLVxcdH1cXG4rXFx0aWYgKCF0KVxcbitcXHRcXHRnb3RvIGZyZWVfaDtcXG4gXFx0dC1cXHUwMDNlaHJlZ2lvbiA9IGlwX3NldF9hbGxvYyhhaGFzaF9zaXplb2ZfcmVnaW9ucyhoYml0cykpO1xcbi1cXHRpZiAoIXQtXFx1MDAzZWhyZWdpb24pIHtcXG4tXFx0XFx0aXBfc2V0X2ZyZWUodCk7XFxuLVxcdFxcdGtmcmVlKGgpO1xcbi1cXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4rXFx0aWYgKCF0LVxcdTAwM2VocmVnaW9uKVxcbitcXHRcXHRnb3RvIGZyZWVfdDtcXG4rI2lmZGVmIElQX1NFVF9IQVNIX1dJVEhfTkVUU1xcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgSVBTRVRfTkVUX0NPVU5UOyBpKyspIHtcXG4rXFx0XFx0bmV0cyA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBuZXRfcHJlZml4ZXMpLCBHRlBfS0VSTkVMKTtcXG4rXFx0XFx0aWYgKCFuZXRzKSB7XFxuK1xcdFxcdFxcdGlmIChpICE9IDApXFxuK1xcdFxcdFxcdFxcdGtmcmVlKGgtXFx1MDAzZXJuZXRzWzBdKTtcXG4rXFx0XFx0XFx0Z290byBmcmVlX2hyZWdpb247XFxuK1xcdFxcdH1cXG4rXFx0XFx0UkNVX0lOSVRfUE9JTlRFUihoLVxcdTAwM2VybmV0c1tpXSwgbmV0cyk7XFxuIFxcdH1cXG4rI2VuZGlmXFxuIFxcdGgtXFx1MDAzZWdjLnNldCA9IHNldDtcXG4rXFx0c3Bpbl9sb2NrX2luaXQoXFx1MDAyNmgtXFx1MDAzZWdjLmxvY2spO1xcbiBcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgYWhhc2hfbnVtb2ZfbG9ja3MoaGJpdHMpOyBpKyspXFxuIFxcdFxcdHNwaW5fbG9ja19pbml0KFxcdTAwMjZ0LVxcdTAwM2VocmVnaW9uW2ldLmxvY2spO1xcbiBcXHRoLVxcdTAwM2VtYXhlbGVtID0gbWF4ZWxlbTtcXG5AQCAtMTYxOSw5ICsxNzExLDggQEAgSVBTRVRfVE9LRU4oSFRZUEUsIF9jcmVhdGUpKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGlwX3NldCAqc2V0LFxcbiBcXHR9XFxuIFxcdHQtXFx1MDAzZWh0YWJsZV9iaXRzID0gaGJpdHM7XFxuIFxcdHQtXFx1MDAzZW1heGVsZW0gPSBoLVxcdTAwM2VtYXhlbGVtIC8gYWhhc2hfbnVtb2ZfbG9ja3MoaGJpdHMpO1xcbitcXHRJTklUX0xJU1RfSEVBRChcXHUwMDI2dC1cXHUwMDNlYWQpO1xcbiBcXHRSQ1VfSU5JVF9QT0lOVEVSKGgtXFx1MDAzZXRhYmxlLCB0KTtcXG4tXFxuLVxcdElOSVRfTElTVF9IRUFEKFxcdTAwMjZoLVxcdTAwM2VhZCk7XFxuIFxcdHNldC1cXHUwMDNlZGF0YSA9IGg7XFxuICNpZm5kZWYgSVBfU0VUX1BST1RPX1VOREVGXFxuIFxcdGlmIChzZXQtXFx1MDAzZWZhbWlseSA9PSBORlBST1RPX0lQVjQpIHtcXG5AQCAtMTY1NSw2ICsxNzQ2LDE2IEBAIElQU0VUX1RPS0VOKEhUWVBFLCBfY3JlYXRlKShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBpcF9zZXQgKnNldCxcXG4gXFx0XFx0IHQtXFx1MDAzZWh0YWJsZV9iaXRzLCBoLVxcdTAwM2VtYXhlbGVtLCBzZXQtXFx1MDAzZWRhdGEsIHQpO1xcbiBcXG4gXFx0cmV0dXJuIDA7XFxuK1xcbisjaWZkZWYgSVBfU0VUX0hBU0hfV0lUSF9ORVRTXFxuK2ZyZWVfaHJlZ2lvbjpcXG4rXFx0aXBfc2V0X2ZyZWUodC1cXHUwMDNlaHJlZ2lvbik7XFxuKyNlbmRpZlxcbitmcmVlX3Q6XFxuK1xcdGlwX3NldF9mcmVlKHQpO1xcbitmcmVlX2g6XFxuK1xcdGtmcmVlKGgpO1xcbitcXHRyZXR1cm4gLUVOT01FTTtcXG4gfVxcbiAjZW5kaWYgLyogSVBfU0VUX0VNSVRfQ1JFQVRFICovXFxuIFxcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwcG9ydG5ldC5jIGIvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcHBvcnRuZXQuY1xcbmluZGV4IDJkNjY1MmQ0MzE5OWE0Li4xOTU4NTNhMjViMDYwNiAxMDA2NDRcXG4tLS0gYS9uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwcG9ydG5ldC5jXFxuKysrIGIvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcHBvcnRuZXQuY1xcbkBAIC0xMzgsNyArMTM4LDcgQEAgaGFzaF9pcHBvcnRuZXQ0X2thZHQoc3RydWN0IGlwX3NldCAqc2V0LCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbiBcXHRjb25zdCBzdHJ1Y3QgaGFzaF9pcHBvcnRuZXQ0ICpoID0gc2V0LVxcdTAwM2VkYXRhO1xcbiBcXHRpcHNldF9hZHRmbiBhZHRmbiA9IHNldC1cXHUwMDNldmFyaWFudC1cXHUwMDNlYWR0W2FkdF07XFxuIFxcdHN0cnVjdCBoYXNoX2lwcG9ydG5ldDRfZWxlbSBlID0ge1xcbi1cXHRcXHQuY2lkciA9IElOSVRfQ0lEUihoLVxcdTAwM2VuZXRzWzBdLmNpZHJbMF0sIEhPU1RfTUFTSyksXFxuK1xcdFxcdC5jaWRyID0gSU5JVF9DSURSKGgtXFx1MDAzZXJuZXRzWzBdLCBIT1NUX01BU0spLFxcbiBcXHR9O1xcbiBcXHRzdHJ1Y3QgaXBfc2V0X2V4dCBleHQgPSBJUF9TRVRfSU5JVF9LRVhUKHNrYiwgb3B0LCBzZXQpO1xcbiBcXG5AQCAtMzk4LDcgKzM5OCw3IEBAIGhhc2hfaXBwb3J0bmV0Nl9rYWR0KHN0cnVjdCBpcF9zZXQgKnNldCwgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4gXFx0Y29uc3Qgc3RydWN0IGhhc2hfaXBwb3J0bmV0NiAqaCA9IHNldC1cXHUwMDNlZGF0YTtcXG4gXFx0aXBzZXRfYWR0Zm4gYWR0Zm4gPSBzZXQtXFx1MDAzZXZhcmlhbnQtXFx1MDAzZWFkdFthZHRdO1xcbiBcXHRzdHJ1Y3QgaGFzaF9pcHBvcnRuZXQ2X2VsZW0gZSA9IHtcXG4tXFx0XFx0LmNpZHIgPSBJTklUX0NJRFIoaC1cXHUwMDNlbmV0c1swXS5jaWRyWzBdLCBIT1NUX01BU0spLFxcbitcXHRcXHQuY2lkciA9IElOSVRfQ0lEUihoLVxcdTAwM2VybmV0c1swXSwgSE9TVF9NQVNLKSxcXG4gXFx0fTtcXG4gXFx0c3RydWN0IGlwX3NldF9leHQgZXh0ID0gSVBfU0VUX0lOSVRfS0VYVChza2IsIG9wdCwgc2V0KTtcXG4gXFxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0LmMgYi9uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldC5jXFxuaW5kZXggY2UwYTljZTVhOTFmMWEuLjA5MmYzYzkyODFiODBmIDEwMDY0NFxcbi0tLSBhL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0LmNcXG4rKysgYi9uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldC5jXFxuQEAgLTExNyw3ICsxMTcsNyBAQCBoYXNoX25ldDRfa2FkdChzdHJ1Y3QgaXBfc2V0ICpzZXQsIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXFxuIFxcdGNvbnN0IHN0cnVjdCBoYXNoX25ldDQgKmggPSBzZXQtXFx1MDAzZWRhdGE7XFxuIFxcdGlwc2V0X2FkdGZuIGFkdGZuID0gc2V0LVxcdTAwM2V2YXJpYW50LVxcdTAwM2VhZHRbYWR0XTtcXG4gXFx0c3RydWN0IGhhc2hfbmV0NF9lbGVtIGUgPSB7XFxuLVxcdFxcdC5jaWRyID0gSU5JVF9DSURSKGgtXFx1MDAzZW5ldHNbMF0uY2lkclswXSwgSE9TVF9NQVNLKSxcXG4rXFx0XFx0LmNpZHIgPSBJTklUX0NJRFIoaC1cXHUwMDNlcm5ldHNbMF0sIEhPU1RfTUFTSyksXFxuIFxcdH07XFxuIFxcdHN0cnVjdCBpcF9zZXRfZXh0IGV4dCA9IElQX1NFVF9JTklUX0tFWFQoc2tiLCBvcHQsIHNldCk7XFxuIFxcbkBAIC0yOTEsNyArMjkxLDcgQEAgaGFzaF9uZXQ2X2thZHQoc3RydWN0IGlwX3NldCAqc2V0LCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbiBcXHRjb25zdCBzdHJ1Y3QgaGFzaF9uZXQ2ICpoID0gc2V0LVxcdTAwM2VkYXRhO1xcbiBcXHRpcHNldF9hZHRmbiBhZHRmbiA9IHNldC1cXHUwMDNldmFyaWFudC1cXHUwMDNlYWR0W2FkdF07XFxuIFxcdHN0cnVjdCBoYXNoX25ldDZfZWxlbSBlID0ge1xcbi1cXHRcXHQuY2lkciA9IElOSVRfQ0lEUihoLVxcdTAwM2VuZXRzWzBdLmNpZHJbMF0sIEhPU1RfTUFTSyksXFxuK1xcdFxcdC5jaWRyID0gSU5JVF9DSURSKGgtXFx1MDAzZXJuZXRzWzBdLCBIT1NUX01BU0spLFxcbiBcXHR9O1xcbiBcXHRzdHJ1Y3QgaXBfc2V0X2V4dCBleHQgPSBJUF9TRVRfSU5JVF9LRVhUKHNrYiwgb3B0LCBzZXQpO1xcbiBcXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRpZmFjZS5jIGIvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRpZmFjZS5jXFxuaW5kZXggMzBhNjU1ZTVjNGZkY2QuLmI0NGI5NWY3NjZiN2FkIDEwMDY0NFxcbi0tLSBhL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0aWZhY2UuY1xcbisrKyBiL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0aWZhY2UuY1xcbkBAIC0xNjEsNyArMTYxLDcgQEAgaGFzaF9uZXRpZmFjZTRfa2FkdChzdHJ1Y3QgaXBfc2V0ICpzZXQsIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXFxuIFxcdHN0cnVjdCBoYXNoX25ldGlmYWNlNCAqaCA9IHNldC1cXHUwMDNlZGF0YTtcXG4gXFx0aXBzZXRfYWR0Zm4gYWR0Zm4gPSBzZXQtXFx1MDAzZXZhcmlhbnQtXFx1MDAzZWFkdFthZHRdO1xcbiBcXHRzdHJ1Y3QgaGFzaF9uZXRpZmFjZTRfZWxlbSBlID0ge1xcbi1cXHRcXHQuY2lkciA9IElOSVRfQ0lEUihoLVxcdTAwM2VuZXRzWzBdLmNpZHJbMF0sIEhPU1RfTUFTSyksXFxuK1xcdFxcdC5jaWRyID0gSU5JVF9DSURSKGgtXFx1MDAzZXJuZXRzWzBdLCBIT1NUX01BU0spLFxcbiBcXHRcXHQuZWxlbSA9IDEsXFxuIFxcdH07XFxuIFxcdHN0cnVjdCBpcF9zZXRfZXh0IGV4dCA9IElQX1NFVF9JTklUX0tFWFQoc2tiLCBvcHQsIHNldCk7XFxuQEAgLTM4Miw3ICszODIsNyBAQCBoYXNoX25ldGlmYWNlNl9rYWR0KHN0cnVjdCBpcF9zZXQgKnNldCwgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4gXFx0c3RydWN0IGhhc2hfbmV0aWZhY2U2ICpoID0gc2V0LVxcdTAwM2VkYXRhO1xcbiBcXHRpcHNldF9hZHRmbiBhZHRmbiA9IHNldC1cXHUwMDNldmFyaWFudC1cXHUwMDNlYWR0W2FkdF07XFxuIFxcdHN0cnVjdCBoYXNoX25ldGlmYWNlNl9lbGVtIGUgPSB7XFxuLVxcdFxcdC5jaWRyID0gSU5JVF9DSURSKGgtXFx1MDAzZW5ldHNbMF0uY2lkclswXSwgSE9TVF9NQVNLKSxcXG4rXFx0XFx0LmNpZHIgPSBJTklUX0NJRFIoaC1cXHUwMDNlcm5ldHNbMF0sIEhPU1RfTUFTSyksXFxuIFxcdFxcdC5lbGVtID0gMSxcXG4gXFx0fTtcXG4gXFx0c3RydWN0IGlwX3NldF9leHQgZXh0ID0gSVBfU0VUX0lOSVRfS0VYVChza2IsIG9wdCwgc2V0KTtcXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRuZXQuYyBiL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0bmV0LmNcXG5pbmRleCA4ZmJlNjQ5YzlkZDNkNC4uZjdjOGExY2MzMGZjN2IgMTAwNjQ0XFxuLS0tIGEvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRuZXQuY1xcbisrKyBiL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0bmV0LmNcXG5AQCAtMTQ5LDggKzE0OSwxMCBAQCBoYXNoX25ldG5ldDRfa2FkdChzdHJ1Y3QgaXBfc2V0ICpzZXQsIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXFxuIFxcdHN0cnVjdCBoYXNoX25ldG5ldDRfZWxlbSBlID0geyB9O1xcbiBcXHRzdHJ1Y3QgaXBfc2V0X2V4dCBleHQgPSBJUF9TRVRfSU5JVF9LRVhUKHNrYiwgb3B0LCBzZXQpO1xcbiBcXG4tXFx0ZS5jaWRyWzBdID0gSU5JVF9DSURSKGgtXFx1MDAzZW5ldHNbMF0uY2lkclswXSwgSE9TVF9NQVNLKTtcXG4tXFx0ZS5jaWRyWzFdID0gSU5JVF9DSURSKGgtXFx1MDAzZW5ldHNbMF0uY2lkclsxXSwgSE9TVF9NQVNLKTtcXG4rXFx0cmN1X3JlYWRfbG9ja19iaCgpO1xcbitcXHRlLmNpZHJbMF0gPSBJTklUX0NJRFIoaC1cXHUwMDNlcm5ldHNbMF0sIEhPU1RfTUFTSyk7XFxuK1xcdGUuY2lkclsxXSA9IElOSVRfQ0lEUihoLVxcdTAwM2VybmV0c1sxXSwgSE9TVF9NQVNLKTtcXG4rXFx0cmN1X3JlYWRfdW5sb2NrX2JoKCk7XFxuIFxcdGlmIChhZHQgPT0gSVBTRVRfVEVTVClcXG4gXFx0XFx0ZS5jY21wID0gKEhPU1RfTUFTSyBcXHUwMDNjXFx1MDAzYyAoc2l6ZW9mKGUuY2lkclswXSkgKiA4KSkgfCBIT1NUX01BU0s7XFxuIFxcbkBAIC0zODgsOCArMzkwLDEwIEBAIGhhc2hfbmV0bmV0Nl9rYWR0KHN0cnVjdCBpcF9zZXQgKnNldCwgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4gXFx0c3RydWN0IGhhc2hfbmV0bmV0Nl9lbGVtIGUgPSB7IH07XFxuIFxcdHN0cnVjdCBpcF9zZXRfZXh0IGV4dCA9IElQX1NFVF9JTklUX0tFWFQoc2tiLCBvcHQsIHNldCk7XFxuIFxcbi1cXHRlLmNpZHJbMF0gPSBJTklUX0NJRFIoaC1cXHUwMDNlbmV0c1swXS5jaWRyWzBdLCBIT1NUX01BU0spO1xcbi1cXHRlLmNpZHJbMV0gPSBJTklUX0NJRFIoaC1cXHUwMDNlbmV0c1swXS5jaWRyWzFdLCBIT1NUX01BU0spO1xcbitcXHRyY3VfcmVhZF9sb2NrX2JoKCk7XFxuK1xcdGUuY2lkclswXSA9IElOSVRfQ0lEUihoLVxcdTAwM2VybmV0c1swXSwgSE9TVF9NQVNLKTtcXG4rXFx0ZS5jaWRyWzFdID0gSU5JVF9DSURSKGgtXFx1MDAzZXJuZXRzWzFdLCBIT1NUX01BU0spO1xcbitcXHRyY3VfcmVhZF91bmxvY2tfYmgoKTtcXG4gXFx0aWYgKGFkdCA9PSBJUFNFVF9URVNUKVxcbiBcXHRcXHRlLmNjbXAgPSAoSE9TVF9NQVNLIFxcdTAwM2NcXHUwMDNjIChzaXplb2YodTgpICogOCkpIHwgSE9TVF9NQVNLO1xcbiBcXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRwb3J0LmMgYi9uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldHBvcnQuY1xcbmluZGV4IGQxYTA2MjhkZjRlZjNhLi41ZGU0YjUxMWRlNzYzNiAxMDA2NDRcXG4tLS0gYS9uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldHBvcnQuY1xcbisrKyBiL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0cG9ydC5jXFxuQEAgLTEzMyw3ICsxMzMsNyBAQCBoYXNoX25ldHBvcnQ0X2thZHQoc3RydWN0IGlwX3NldCAqc2V0LCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbiBcXHRjb25zdCBzdHJ1Y3QgaGFzaF9uZXRwb3J0NCAqaCA9IHNldC1cXHUwMDNlZGF0YTtcXG4gXFx0aXBzZXRfYWR0Zm4gYWR0Zm4gPSBzZXQtXFx1MDAzZXZhcmlhbnQtXFx1MDAzZWFkdFthZHRdO1xcbiBcXHRzdHJ1Y3QgaGFzaF9uZXRwb3J0NF9lbGVtIGUgPSB7XFxuLVxcdFxcdC5jaWRyID0gSU5JVF9DSURSKGgtXFx1MDAzZW5ldHNbMF0uY2lkclswXSwgSE9TVF9NQVNLKSxcXG4rXFx0XFx0LmNpZHIgPSBJTklUX0NJRFIoaC1cXHUwMDNlcm5ldHNbMF0sIEhPU1RfTUFTSyksXFxuIFxcdH07XFxuIFxcdHN0cnVjdCBpcF9zZXRfZXh0IGV4dCA9IElQX1NFVF9JTklUX0tFWFQoc2tiLCBvcHQsIHNldCk7XFxuIFxcbkBAIC0zNTMsNyArMzUzLDcgQEAgaGFzaF9uZXRwb3J0Nl9rYWR0KHN0cnVjdCBpcF9zZXQgKnNldCwgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4gXFx0Y29uc3Qgc3RydWN0IGhhc2hfbmV0cG9ydDYgKmggPSBzZXQtXFx1MDAzZWRhdGE7XFxuIFxcdGlwc2V0X2FkdGZuIGFkdGZuID0gc2V0LVxcdTAwM2V2YXJpYW50LVxcdTAwM2VhZHRbYWR0XTtcXG4gXFx0c3RydWN0IGhhc2hfbmV0cG9ydDZfZWxlbSBlID0ge1xcbi1cXHRcXHQuY2lkciA9IElOSVRfQ0lEUihoLVxcdTAwM2VuZXRzWzBdLmNpZHJbMF0sIEhPU1RfTUFTSyksXFxuK1xcdFxcdC5jaWRyID0gSU5JVF9DSURSKGgtXFx1MDAzZXJuZXRzWzBdLCBIT1NUX01BU0spLFxcbiBcXHR9O1xcbiBcXHRzdHJ1Y3QgaXBfc2V0X2V4dCBleHQgPSBJUF9TRVRfSU5JVF9LRVhUKHNrYiwgb3B0LCBzZXQpO1xcbiBcXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRwb3J0bmV0LmMgYi9uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldHBvcnRuZXQuY1xcbmluZGV4IGJmNGY5MWI3OGUxZGNiLi42MjkxNTMyYmU3YTVhMiAxMDA2NDRcXG4tLS0gYS9uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldHBvcnRuZXQuY1xcbisrKyBiL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0cG9ydG5ldC5jXFxuQEAgLTE1Nyw4ICsxNTcsMTAgQEAgaGFzaF9uZXRwb3J0bmV0NF9rYWR0KHN0cnVjdCBpcF9zZXQgKnNldCwgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4gXFx0c3RydWN0IGhhc2hfbmV0cG9ydG5ldDRfZWxlbSBlID0geyB9O1xcbiBcXHRzdHJ1Y3QgaXBfc2V0X2V4dCBleHQgPSBJUF9TRVRfSU5JVF9LRVhUKHNrYiwgb3B0LCBzZXQpO1xcbiBcXG4tXFx0ZS5jaWRyWzBdID0gSU5JVF9DSURSKGgtXFx1MDAzZW5ldHNbMF0uY2lkclswXSwgSE9TVF9NQVNLKTtcXG4tXFx0ZS5jaWRyWzFdID0gSU5JVF9DSURSKGgtXFx1MDAzZW5ldHNbMF0uY2lkclsxXSwgSE9TVF9NQVNLKTtcXG4rXFx0cmN1X3JlYWRfbG9ja19iaCgpO1xcbitcXHRlLmNpZHJbMF0gPSBJTklUX0NJRFIoaC1cXHUwMDNlcm5ldHNbMF0sIEhPU1RfTUFTSyk7XFxuK1xcdGUuY2lkclsxXSA9IElOSVRfQ0lEUihoLVxcdTAwM2VybmV0c1sxXSwgSE9TVF9NQVNLKTtcXG4rXFx0cmN1X3JlYWRfdW5sb2NrX2JoKCk7XFxuIFxcdGlmIChhZHQgPT0gSVBTRVRfVEVTVClcXG4gXFx0XFx0ZS5jY21wID0gKEhPU1RfTUFTSyBcXHUwMDNjXFx1MDAzYyAoc2l6ZW9mKGUuY2lkclswXSkgKiA4KSkgfCBIT1NUX01BU0s7XFxuIFxcbkBAIC00NTIsOCArNDU0LDEwIEBAIGhhc2hfbmV0cG9ydG5ldDZfa2FkdChzdHJ1Y3QgaXBfc2V0ICpzZXQsIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXFxuIFxcdHN0cnVjdCBoYXNoX25ldHBvcnRuZXQ2X2VsZW0gZSA9IHsgfTtcXG4gXFx0c3RydWN0IGlwX3NldF9leHQgZXh0ID0gSVBfU0VUX0lOSVRfS0VYVChza2IsIG9wdCwgc2V0KTtcXG4gXFxuLVxcdGUuY2lkclswXSA9IElOSVRfQ0lEUihoLVxcdTAwM2VuZXRzWzBdLmNpZHJbMF0sIEhPU1RfTUFTSyk7XFxuLVxcdGUuY2lkclsxXSA9IElOSVRfQ0lEUihoLVxcdTAwM2VuZXRzWzBdLmNpZHJbMV0sIEhPU1RfTUFTSyk7XFxuK1xcdHJjdV9yZWFkX2xvY2tfYmgoKTtcXG4rXFx0ZS5jaWRyWzBdID0gSU5JVF9DSURSKGgtXFx1MDAzZXJuZXRzWzBdLCBIT1NUX01BU0spO1xcbitcXHRlLmNpZHJbMV0gPSBJTklUX0NJRFIoaC1cXHUwMDNlcm5ldHNbMV0sIEhPU1RfTUFTSyk7XFxuK1xcdHJjdV9yZWFkX3VubG9ja19iaCgpO1xcbiBcXHRpZiAoYWR0ID09IElQU0VUX1RFU1QpXFxuIFxcdFxcdGUuY2NtcCA9IChIT1NUX01BU0sgXFx1MDAzY1xcdTAwM2MgKHNpemVvZih1OCkgKiA4KSkgfCBIT1NUX01BU0s7XFxuIFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMlQxNzowMToxNi4yMzgxMTA5MTZaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE0NDA5NjcyOTkyOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORVRGSUxURVJcIixcbiAgICBcIklQX1NFVFwiLFxuICAgIFwiSVBfU0VUX0hBU0hfTkVUXCIsXG4gICAgXCJJUF9TRVRfSEFTSF9ORVRORVRcIixcbiAgICBcIklQX1NFVF9IQVNIX05FVFBPUlRcIixcbiAgICBcIklQX1NFVF9IQVNIX05FVElGQUNFXCIsXG4gICAgXCJJUF9TRVRfSEFTSF9JUFBPUlRORVRcIixcbiAgICBcIklQX1NFVF9IQVNIX05FVFBPUlRORVRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJoYXNoX25ldDRfYWRkXCIsXG4gICAgXCJoYXNoX25ldDRfZGVsXCIsXG4gICAgXCJoYXNoX25ldDRfdGVzdFwiLFxuICAgIFwiaGFzaF9uZXQ0X3Jlc2l6ZVwiLFxuICAgIFwiaGFzaF9uZXQ0X2djXCIsXG4gICAgXCJoYXNoX25ldDRfZmx1c2hcIixcbiAgICBcImhhc2hfbmV0NF9kZXN0cm95XCIsXG4gICAgXCJoYXNoX25ldDRfdXJlZlwiLFxuICAgIFwiaGFzaF9uZXQ0X2thZHRcIixcbiAgICBcImhhc2hfbmV0NF91YWR0XCIsXG4gICAgXCJoYXNoX25ldF9jcmVhdGVcIixcbiAgICBcImhhc2hfbmV0Nl9hZGRcIixcbiAgICBcImhhc2hfbmV0Nl9kZWxcIixcbiAgICBcImhhc2hfbmV0Nl90ZXN0XCIsXG4gICAgXCJoYXNoX25ldDZfcmVzaXplXCIsXG4gICAgXCJoYXNoX25ldDZfZ2NcIixcbiAgICBcImhhc2hfbmV0Nl9rYWR0XCIsXG4gICAgXCJoYXNoX25ldDZfdWFkdFwiLFxuICAgIFwiaGFzaF9uZXRuZXQ0X2FkZFwiLFxuICAgIFwiaGFzaF9uZXRuZXQ0X3Jlc2l6ZVwiLFxuICAgIFwiaGFzaF9uZXRuZXQ0X2djXCIsXG4gICAgXCJoYXNoX25ldG5ldDRfa2FkdFwiLFxuICAgIFwiaGFzaF9uZXRuZXQ0X3VhZHRcIixcbiAgICBcImhhc2hfbmV0bmV0X2NyZWF0ZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjb3JlIGhhc2ggdGFibGUgaW1wbGVtZW50YXRpb24gZm9yIG5ldGZpbHRlciBpcHNldCAoc3BlY2lmaWNhbGx5IHRoZSBnZW5lcmljIGhhc2ggdHlwZXMgaW4gaXBfc2V0X2hhc2hfZ2VuLmgpLiBJdCBjaGFuZ2VzIGhvdyBDSURSIG5ldHdvcmtzIGFyZSBzdG9yZWQsIG1vdmluZyBmcm9tIGEgZml4ZWQtc2l6ZSBhcnJheSB0byBhbiBSQ1UtcHJvdGVjdGVkIGR5bmFtaWNhbGx5IGFsbG9jYXRlZCBhcnJheSwgYW5kIHVwZGF0ZXMgdGhlIHJlc2l6aW5nIGFuZCBnYXJiYWdlIGNvbGxlY3Rpb24gbG9naWMgdG8gdXNlIGEgbmV3IGxvY2sgYW5kIGEgYHJlc2l6aW5nYCBmbGFnLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljIGFuZCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSB0aGUgbmV3IFJDVSBhbmQgbG9ja2luZyBsb2dpYyBkb2Vzbid0IGludHJvZHVjZSB1c2UtYWZ0ZXItZnJlZSwgbWVtb3J5IGxlYWtzLCBvciByYWNlIGNvbmRpdGlvbnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXRcbiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSxcbiAgIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgMGJmYzMzM2VkYTYzNmNhYmMwZDFiNzU5MjRmZGRiMGJiYTUxOTA4MVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgSnVsIDIgMTc6MDE6MTQgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oIGIvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaFxuaW5kZXggZGVkZjU5YjY2MWRkZjMuLjJiNDczYWNhZDUwY2I4IDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaFxuKysrIGIvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaFxuQEAgLTc1LDE1ICs3NSwxNyBAQCBzdHJ1Y3QgaGJ1Y2tldCB7XG4gc3RydWN0IGh0YWJsZV9nYyB7XG4gXHRzdHJ1Y3QgZGVsYXllZF93b3JrIGR3b3JrO1xuIFx0c3RydWN0IGlwX3NldCAqc2V0O1x0LyogU2V0IHRoZSBnYyBiZWxvbmdzIHRvICovXG4rXHRzcGlubG9ja190IGxvY2s7XHQvKiBMb2NrIHRvIGV4Y2x1ZGUgZ2MgYW5kIHJlc2l6ZSAqL1xuIFx0dTMyIHJlZ2lvbjtcdFx0LyogTGFzdCBnYyBydW4gcG9zaXRpb24gKi9cbiB9O1xuIFxuIC8qIFRoZSBoYXNoIHRhYmxlOiB0aGUgdGFibGUgc2l6ZSBzdG9yZWQgaGVyZSBpbiBvcmRlciB0byBtYWtlIHJlc2l6aW5nIGVhc3kgKi9cbiBzdHJ1Y3QgaHRhYmxlIHtcbi1cdGF0b21pY190IHJlZjtcdFx0LyogUmVmZXJlbmNlcyBmb3IgcmVzaXppbmcgKi9cbitcdGJvb2wgcmVzaXppbmc7XHRcdC8qIE1hcmsgb25nb2luZyByZXNpemUgKi9cbiBcdGF0b21pY190IHVyZWY7XHRcdC8qIFJlZmVyZW5jZXMgZm9yIGR1bXBpbmcgYW5kIGdjICovXG4gXHR1OCBodGFibGVfYml0cztcdFx0Lyogc2l6ZSBvZiBoYXNoIHRhYmxlID09IDJeaHRhYmxlX2JpdHMgKi9cbiBcdHUzMiBtYXhlbGVtO1x0XHQvKiBNYXhlbGVtIHBlciByZWdpb24gKi9cbitcdHN0cnVjdCBsaXN0X2hlYWQgYWQ7XHQvKiBSZXNpemUgYWRkfGRlbCBiYWNrbGlzdCAqL1xuIFx0c3RydWN0IGlwX3NldF9yZWdpb24gKmhyZWdpb247XHQvKiBSZWdpb24gbG9ja3MgYW5kIGV4dCBzaXplcyAqL1xuIFx0c3RydWN0IGhidWNrZXQgX19yY3UgKmJ1Y2tldFtdOyAvKiBoYXNodGFibGUgYnVja2V0cyAqL1xuIH07XG5AQCAtOTcsOSArOTksMTYgQEAgc3RydWN0IGh0YWJsZSB7XG4gI2VuZGlmXG4gXG4gLyogQm9vay1rZWVwaW5nIG9mIHRoZSBwcmVmaXhlcyBhZGRlZCB0byB0aGUgc2V0ICovXG4rc3RydWN0IG5ldF9wcmVmaXgge1xuK1x0dTggY2lkcjtcdFx0XHQvKiB0aGUgY2lkciB2YWx1ZSAqL1xuK1x0dTMyIGNvdW50O1x0XHRcdC8qIG51bWJlciBvZiBlbGVtZW50cyBvZiB0aGlzIGNpZHIgKi9cbit9O1xuK1xuIHN0cnVjdCBuZXRfcHJlZml4ZXMge1xuLVx0dTMyIG5ldHNbSVBTRVRfTkVUX0NPVU5UXTsgLyogbnVtYmVyIG9mIGVsZW1lbnRzIGZvciB0aGlzIGNpZHIgKi9cbi1cdHU4IGNpZHJbSVBTRVRfTkVUX0NPVU5UXTsgIC8qIHRoZSBjaWRyIHZhbHVlICovXG4rXHRzdHJ1Y3QgcmN1X2hlYWQgcmN1O1xuK1x0dTggbGVuO1xuK1x0c3RydWN0IG5ldF9wcmVmaXggbmV0c1tdXG4rXHRcdF9fYWxpZ25lZChfX2FsaWdub2ZfXyh1NjQpKTtcbiB9O1xuIFxuIC8qIENvbXB1dGUgdGhlIGhhc2ggdGFibGUgc2l6ZSAqL1xuQEAgLTEyNSwxMSArMTM0LDYgQEAgaHRhYmxlX3NpemUodTggaGJpdHMpXG4gI2Vsc2VcbiAjZGVmaW5lIF9fQ0lEUihjaWRyLCBpKVx0XHQoY2lkcilcbiAjZW5kaWZcbi1cbi0vKiBjaWRyICsgMSBpcyBzdG9yZWQgaW4gbmV0X3ByZWZpeGVzIHRvIHN1cHBvcnQgLzAgKi9cbi0jZGVmaW5lIE5DSURSX1BVVChjaWRyKVx0XHQoKGNpZHIpICsgMSlcbi0jZGVmaW5lIE5DSURSX0dFVChjaWRyKVx0XHQoKGNpZHIpIC0gMSlcbi1cbiAjaWZkZWYgSVBfU0VUX0hBU0hfV0lUSF9ORVRTX1BBQ0tFRFxuIC8qIFdoZW4gY2lkciBpcyBwYWNrZWQgd2l0aCBub21hdGNoLCBjaWRyIC0gMSBpcyBzdG9yZWQgaW4gdGhlIGRhdGEgZW50cnkgKi9cbiAjZGVmaW5lIERDSURSX1BVVChjaWRyKVx0XHQoKGNpZHIpIC0gMSlcbkBAIC0xMzksMjEgKzE0Myw5IEBAIGh0YWJsZV9zaXplKHU4IGhiaXRzKVxuICNkZWZpbmUgRENJRFJfR0VUKGNpZHIsIGkpXHRfX0NJRFIoY2lkciwgaSlcbiAjZW5kaWZcbiBcbi0jZGVmaW5lIElOSVRfQ0lEUihjaWRyLCBob3N0X21hc2spXHRcXFxuLVx0RENJRFJfUFVUKCgoY2lkcikgPyBOQ0lEUl9HRVQoY2lkcikgOiBob3N0X21hc2spKVxuKyNkZWZpbmUgSU5JVF9DSURSKG4sIGhvc3RfbWFzaylcdFxcXG4rXHREQ0lEUl9QVVQoKG4pLVx1MDAzZWxlbiA/IChuKS1cdTAwM2VuZXRzWzBdLmNpZHIgOiBob3N0X21hc2spXG4gXG4tI2lmZGVmIElQX1NFVF9IQVNIX1dJVEhfTkVUMFxuLS8qIGNpZHIgZnJvbSAwIHRvIEhPU1RfTUFTSyB2YWx1ZSBhbmQgYyA9IGNpZHIgKyAxICovXG4tI2RlZmluZSBOTEVOXHRcdFx0KEhPU1RfTUFTSyArIDEpXG4tI2RlZmluZSBDSURSX1BPUyhjKVx0XHQoKGMpIC0gMSlcbi0jZWxzZVxuLS8qIGNpZHIgZnJvbSAxIHRvIEhPU1RfTUFTSyB2YWx1ZSBhbmQgYyA9IGNpZHIgKyAxICovXG4tI2RlZmluZSBOTEVOXHRcdFx0SE9TVF9NQVNLXG4tI2RlZmluZSBDSURSX1BPUyhjKVx0XHQoKGMpIC0gMilcbi0jZW5kaWZcbi1cbi0jZWxzZVxuLSNkZWZpbmUgTkxFTlx0XHRcdDBcbiAjZW5kaWYgLyogSVBfU0VUX0hBU0hfV0lUSF9ORVRTICovXG4gXG4gI2RlZmluZSBTRVRfRUxFTV9FWFBJUkVEKHNldCwgZClcdFxcXG5AQCAtMjkwLDYgKzI4Miw3IEBAIHN0YXRpYyBjb25zdCB1bmlvbiBuZl9pbmV0X2FkZHIgemVyb21hc2sgPSB7fTtcbiAvKiBUaGUgZ2VuZXJpYyBoYXNoIHN0cnVjdHVyZSAqL1xuIHN0cnVjdCBodHlwZSB7XG4gXHRzdHJ1Y3QgaHRhYmxlIF9fcmN1ICp0YWJsZTsgLyogdGhlIGhhc2ggdGFibGUgKi9cbitcdHN0cnVjdCBuZXRfcHJlZml4ZXMgX19yY3UgKnJuZXRzW0lQU0VUX05FVF9DT1VOVF07IC8qIGNpZHIgcHJlZml4ZXMgKi9cbiBcdHN0cnVjdCBodGFibGVfZ2MgZ2M7XHQvKiBnYyB3b3JrcXVldWUgKi9cbiBcdHUzMiBtYXhlbGVtO1x0XHQvKiBtYXggZWxlbWVudHMgaW4gdGhlIGhhc2ggKi9cbiBcdHUzMiBpbml0dmFsO1x0XHQvKiByYW5kb20gamhhc2ggaW5pdCB2YWx1ZSAqL1xuQEAgLTMwMSwxMSArMjk0LDEwIEBAIHN0cnVjdCBodHlwZSB7XG4gXHR1OCBuZXRtYXNrO1x0XHQvKiBuZXRtYXNrIHZhbHVlIGZvciBzdWJuZXRzIHRvIHN0b3JlICovXG4gXHR1bmlvbiBuZl9pbmV0X2FkZHIgYml0bWFzaztcdC8qIHN0b3JlcyBiaXRtYXNrICovXG4gI2VuZGlmXG4tXHRzdHJ1Y3QgbGlzdF9oZWFkIGFkO1x0LyogUmVzaXplIGFkZHxkZWwgYmFja2xpc3QgKi9cbitcdC8qIEJlY2F1c2UgJ25leHQnIGlzIElQdjQvSVB2NiBkZXBlbmRlbnQsIG5vIGVsZW1lbnRzIG9mIHRoaXNcbitcdCAqIHN0cnVjdHVyZSBhbmQgcmVmZXJyZWQgaW4gY3JlYXRlKCkgbWF5IGNvbWUgYWZ0ZXIgJ25leHQnLlxuK1x0ICovXG4gXHRzdHJ1Y3QgbXR5cGVfZWxlbSBuZXh0OyAvKiB0ZW1wb3Jhcnkgc3RvcmFnZSBmb3IgdWFkZCAqL1xuLSNpZmRlZiBJUF9TRVRfSEFTSF9XSVRIX05FVFNcbi1cdHN0cnVjdCBuZXRfcHJlZml4ZXMgbmV0c1tOTEVOXTsgLyogYm9vay1rZWVwaW5nIG9mIHByZWZpeGVzICovXG4tI2VuZGlmXG4gfTtcbiBcbiAvKiBBRER8REVMIGVudHJpZXMgc2F2ZWQgZHVyaW5nIHJlc2l6ZSAqL1xuQEAgLTMyMiw1MCArMzE0LDg4IEBAIHN0cnVjdCBtdHlwZV9yZXNpemVfYWQge1xuIC8qIE5ldHdvcmsgY2lkciBzaXplIGJvb2sga2VlcGluZyB3aGVuIHRoZSBoYXNoIHN0b3JlcyBkaWZmZXJlbnRcbiAgKiBzaXplZCBuZXR3b3Jrcy4gY2lkciA9PSByZWFsIGNpZHIgKyAxIHRvIHN1cHBvcnQgLzAuXG4gICovXG4tc3RhdGljIHZvaWRcbitzdGF0aWMgaW50XG4gbXR5cGVfYWRkX2NpZHIoc3RydWN0IGlwX3NldCAqc2V0LCBzdHJ1Y3QgaHR5cGUgKmgsIHU4IGNpZHIsIHU4IG4pXG4ge1xuLVx0aW50IGksIGo7XG4rXHRzdHJ1Y3QgbmV0X3ByZWZpeGVzICpuZXRzLCAqdG1wO1xuK1x0aW50IGksIGosIGZvdW5kLCBsZW4gPSAwLCByZXQgPSAwO1xuIFxuIFx0c3Bpbl9sb2NrX2JoKFx1MDAyNnNldC1cdTAwM2Vsb2NrKTtcbitcdG5ldHMgPSBfX2lwc2V0X2RlcmVmZXJlbmNlKGgtXHUwMDNlcm5ldHNbbl0pO1xuIFx0LyogQWRkIGluIGluY3JlYXNpbmcgcHJlZml4IG9yZGVyLCBzbyBsYXJnZXIgY2lkciBmaXJzdCAqL1xuLVx0Zm9yIChpID0gMCwgaiA9IC0xOyBpIFx1MDAzYyBOTEVOIFx1MDAyNlx1MDAyNiBoLVx1MDAzZW5ldHNbaV0uY2lkcltuXTsgaSsrKSB7XG4tXHRcdGlmIChqICE9IC0xKSB7XG4rXHRmb3IgKGkgPSAwLCBmb3VuZCA9IC0xOyBpIFx1MDAzYyBuZXRzLVx1MDAzZWxlbjsgaSsrKSB7XG4rXHRcdGlmIChuZXRzLVx1MDAzZW5ldHNbaV0uY291bnQpXG4rXHRcdFx0bGVuKys7XG4rXHRcdGlmIChmb3VuZCAhPSAtMSkge1xuIFx0XHRcdGNvbnRpbnVlO1xuLVx0XHR9IGVsc2UgaWYgKGgtXHUwMDNlbmV0c1tpXS5jaWRyW25dIFx1MDAzYyBjaWRyKSB7XG4tXHRcdFx0aiA9IGk7XG4tXHRcdH0gZWxzZSBpZiAoaC1cdTAwM2VuZXRzW2ldLmNpZHJbbl0gPT0gY2lkcikge1xuLVx0XHRcdGgtXHUwMDNlbmV0c1tDSURSX1BPUyhjaWRyKV0ubmV0c1tuXSsrO1xuK1x0XHR9IGVsc2UgaWYgKG5ldHMtXHUwMDNlbmV0c1tpXS5jaWRyIFx1MDAzYyBjaWRyKSB7XG4rXHRcdFx0Zm91bmQgPSBpO1xuK1x0XHR9IGVsc2UgaWYgKG5ldHMtXHUwMDNlbmV0c1tpXS5jaWRyID09IGNpZHIpIHtcbitcdFx0XHRuZXRzLVx1MDAzZW5ldHNbaV0uY291bnQrKztcbiBcdFx0XHRnb3RvIHVubG9jaztcbiBcdFx0fVxuIFx0fVxuLVx0aWYgKGogIT0gLTEpIHtcbi1cdFx0Zm9yICg7IGkgXHUwMDNlIGo7IGktLSlcbi1cdFx0XHRoLVx1MDAzZW5ldHNbaV0uY2lkcltuXSA9IGgtXHUwMDNlbmV0c1tpIC0gMV0uY2lkcltuXTtcbitcdGxlbisrO1xuK1x0dG1wID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IG5ldF9wcmVmaXhlcykgK1xuK1x0XHQgICAgICBsZW4gKiBzaXplb2Yoc3RydWN0IG5ldF9wcmVmaXgpLCBHRlBfQVRPTUlDKTtcbitcdGlmICghdG1wKVxuK1x0XHRyZXR1cm4gLUVOT01FTTtcbitcdHRtcC1cdTAwM2VsZW4gPSBsZW47XG4rXHRmb3IgKGkgPSAwLCBqID0gMDsgaSBcdTAwM2MgbmV0cy1cdTAwM2VsZW47IGkrKykge1xuK1x0XHRpZiAoIW5ldHMtXHUwMDNlbmV0c1tpXS5jb3VudClcbitcdFx0XHRjb250aW51ZTtcbitcdFx0aWYgKGkgPT0gZm91bmQpIHtcbitcdFx0XHR0bXAtXHUwMDNlbmV0c1tqXS5jaWRyID0gY2lkcjtcbitcdFx0XHR0bXAtXHUwMDNlbmV0c1tqKytdLmNvdW50ID0gMTtcbitcdFx0fVxuK1x0XHR0bXAtXHUwMDNlbmV0c1tqXS5jaWRyID0gbmV0cy1cdTAwM2VuZXRzW2ldLmNpZHI7XG4rXHRcdHRtcC1cdTAwM2VuZXRzW2orK10uY291bnQgPSBuZXRzLVx1MDAzZW5ldHNbaV0uY291bnQ7XG4rXHR9XG4rXHRpZiAoZm91bmQgPT0gLTEpIHtcbitcdFx0dG1wLVx1MDAzZW5ldHNbal0uY2lkciA9IGNpZHI7XG4rXHRcdHRtcC1cdTAwM2VuZXRzW2pdLmNvdW50ID0gMTtcbiBcdH1cbi1cdGgtXHUwMDNlbmV0c1tpXS5jaWRyW25dID0gY2lkcjtcbi1cdGgtXHUwMDNlbmV0c1tDSURSX1BPUyhjaWRyKV0ubmV0c1tuXSA9IDE7XG4rXHRyY3VfYXNzaWduX3BvaW50ZXIoaC1cdTAwM2VybmV0c1tuXSwgdG1wKTtcbitcdGtmcmVlX3JjdShuZXRzLCByY3UpO1xuIHVubG9jazpcbiBcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNnNldC1cdTAwM2Vsb2NrKTtcbitcdHJldHVybiByZXQ7XG4gfVxuIFxuIHN0YXRpYyB2b2lkXG4gbXR5cGVfZGVsX2NpZHIoc3RydWN0IGlwX3NldCAqc2V0LCBzdHJ1Y3QgaHR5cGUgKmgsIHU4IGNpZHIsIHU4IG4pXG4ge1xuLVx0dTggaSwgaiwgbmV0X2VuZCA9IE5MRU4gLSAxO1xuK1x0c3RydWN0IG5ldF9wcmVmaXhlcyAqbmV0cywgKnRtcDtcbitcdHU4IGksIGosIGZvdW5kLCBsZW4gPSAwO1xuIFxuIFx0c3Bpbl9sb2NrX2JoKFx1MDAyNnNldC1cdTAwM2Vsb2NrKTtcbi1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIE5MRU47IGkrKykge1xuLVx0XHRpZiAoaC1cdTAwM2VuZXRzW2ldLmNpZHJbbl0gIT0gY2lkcilcbi1cdFx0XHRjb250aW51ZTtcbi1cdFx0aC1cdTAwM2VuZXRzW0NJRFJfUE9TKGNpZHIpXS5uZXRzW25dLS07XG4tXHRcdGlmIChoLVx1MDAzZW5ldHNbQ0lEUl9QT1MoY2lkcildLm5ldHNbbl0gXHUwMDNlIDApXG4tXHRcdFx0Z290byB1bmxvY2s7XG4tXHRcdGZvciAoaiA9IGk7IGogXHUwMDNjIG5ldF9lbmQgXHUwMDI2XHUwMDI2IGgtXHUwMDNlbmV0c1tqXS5jaWRyW25dOyBqKyspXG4tXHRcdFx0aC1cdTAwM2VuZXRzW2pdLmNpZHJbbl0gPSBoLVx1MDAzZW5ldHNbaiArIDFdLmNpZHJbbl07XG4tXHRcdGgtXHUwMDNlbmV0c1tqXS5jaWRyW25dID0gMDtcbitcdG5ldHMgPSBfX2lwc2V0X2RlcmVmZXJlbmNlKGgtXHUwMDNlcm5ldHNbbl0pO1xuK1x0Zm9yIChpID0gMCwgZm91bmQgPSAtMTsgaSBcdTAwM2MgbmV0cy1cdTAwM2VsZW47IGkrKykge1xuK1x0XHRpZiAobmV0cy1cdTAwM2VuZXRzW2ldLmNvdW50KVxuK1x0XHRcdGxlbisrO1xuK1x0XHRpZiAobmV0cy1cdTAwM2VuZXRzW2ldLmNpZHIgPT0gY2lkcilcbitcdFx0XHRmb3VuZCA9IGk7XG4rXHR9XG4rXHRpZiAodW5saWtlbHkoZm91bmQgPT0gLTEpKVxuK1x0XHRyZXR1cm47XG4rXHRuZXRzLVx1MDAzZW5ldHNbZm91bmRdLmNvdW50LS07XG4rXHRpZiAobmV0cy1cdTAwM2VuZXRzW2ZvdW5kXS5jb3VudClcbiBcdFx0Z290byB1bmxvY2s7XG4rXHRsZW4tLTtcbitcdHRtcCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBuZXRfcHJlZml4ZXMpICtcbitcdFx0ICAgICAgbGVuICogc2l6ZW9mKHN0cnVjdCBuZXRfcHJlZml4KSwgR0ZQX0FUT01JQyk7XG4rXHRpZiAoIXRtcClcbitcdFx0LyogTGVhdmUgYSBob2xlICovXG4rXHRcdHJldHVybjtcbitcdHRtcC1cdTAwM2VsZW4gPSBsZW47XG4rXHRmb3IgKGkgPSAwLCBqID0gMDsgaSBcdTAwM2MgbmV0cy1cdTAwM2VsZW47IGkrKykge1xuK1x0XHRpZiAoIW5ldHMtXHUwMDNlbmV0c1tpXS5jb3VudCB8fCBpID09IGZvdW5kKVxuK1x0XHRcdGNvbnRpbnVlO1xuK1x0XHR0bXAtXHUwMDNlbmV0c1tqXS5jaWRyID0gbmV0cy1cdTAwM2VuZXRzW2ldLmNpZHI7XG4rXHRcdHRtcC1cdTAwM2VuZXRzW2orK10uY291bnQgPSBuZXRzLVx1MDAzZW5ldHNbaV0uY291bnQ7XG4gXHR9XG4rXHRyY3VfYXNzaWduX3BvaW50ZXIoaC1cdTAwM2VybmV0c1tuXSwgdG1wKTtcbitcdGtmcmVlX3JjdShuZXRzLCByY3UpO1xuIHVubG9jazpcbiBcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNnNldC1cdTAwM2Vsb2NrKTtcbiB9XG5AQCAtMzk4LDYgKzQyOCw5IEBAIHN0YXRpYyB2b2lkXG4gbXR5cGVfZmx1c2goc3RydWN0IGlwX3NldCAqc2V0KVxuIHtcbiBcdHN0cnVjdCBodHlwZSAqaCA9IHNldC1cdTAwM2VkYXRhO1xuKyNpZmRlZiBJUF9TRVRfSEFTSF9XSVRIX05FVFNcbitcdHN0cnVjdCBuZXRfcHJlZml4ZXMgKm5ldHMsICp0bXA7XG4rI2VuZGlmXG4gXHRzdHJ1Y3QgaHRhYmxlICp0O1xuIFx0c3RydWN0IGhidWNrZXQgKm47XG4gXHR1MzIgciwgaTtcbkBAIC00MjEsNyArNDU0LDE3IEBAIG10eXBlX2ZsdXNoKHN0cnVjdCBpcF9zZXQgKnNldClcbiBcdFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2dC1cdTAwM2VocmVnaW9uW3JdLmxvY2spO1xuIFx0fVxuICNpZmRlZiBJUF9TRVRfSEFTSF9XSVRIX05FVFNcbi1cdG1lbXNldChoLVx1MDAzZW5ldHMsIDAsIHNpemVvZihoLVx1MDAzZW5ldHMpKTtcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIElQU0VUX05FVF9DT1VOVDsgaSsrKSB7XG4rXHRcdG5ldHMgPSBpcHNldF9kZXJlZmVyZW5jZV9uZm5sKGgtXHUwMDNlcm5ldHNbaV0pO1xuK1x0XHR0bXAgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgbmV0X3ByZWZpeGVzKSwgR0ZQX0FUT01JQyk7XG4rXHRcdGlmICghdG1wKSB7XG4rXHRcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgbmV0cy1cdTAwM2VsZW47IGkrKylcbitcdFx0XHRcdG5ldHMtXHUwMDNlbmV0c1tpXS5jb3VudCA9IDA7XG4rXHRcdH0gZWxzZSB7XG4rXHRcdFx0cmN1X2Fzc2lnbl9wb2ludGVyKGgtXHUwMDNlcm5ldHNbaV0sIHRtcCk7XG4rXHRcdFx0a2ZyZWVfcmN1KG5ldHMsIHJjdSk7XG4rXHRcdH1cbitcdH1cbiAjZW5kaWZcbiB9XG4gXG5AQCAtNDI5LDYgKzQ3Miw5IEBAIG10eXBlX2ZsdXNoKHN0cnVjdCBpcF9zZXQgKnNldClcbiBzdGF0aWMgdm9pZFxuIG10eXBlX2FoYXNoX2Rlc3Ryb3koc3RydWN0IGlwX3NldCAqc2V0LCBzdHJ1Y3QgaHRhYmxlICp0LCBib29sIGV4dF9kZXN0cm95KVxuIHtcbisjaWZkZWYgSVBfU0VUX0hBU0hfV0lUSF9ORVRTXG4rXHRzdHJ1Y3QgaHR5cGUgKmggPSBzZXQtXHUwMDNlZGF0YTtcbisjZW5kaWZcbiBcdHN0cnVjdCBoYnVja2V0ICpuO1xuIFx0dTMyIGk7XG4gXG5AQCAtNDQyLDYgKzQ4OCwxMSBAQCBtdHlwZV9haGFzaF9kZXN0cm95KHN0cnVjdCBpcF9zZXQgKnNldCwgc3RydWN0IGh0YWJsZSAqdCwgYm9vbCBleHRfZGVzdHJveSlcbiBcdFx0a2ZyZWUobik7XG4gXHR9XG4gXG4rI2lmZGVmIElQX1NFVF9IQVNIX1dJVEhfTkVUU1xuK1x0aWYgKGV4dF9kZXN0cm95KVxuK1x0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBJUFNFVF9ORVRfQ09VTlQ7IGkrKylcbitcdFx0XHRrZnJlZShoLVx1MDAzZXJuZXRzW2ldKTtcbisjZW5kaWZcbiBcdGlwX3NldF9mcmVlKHQtXHUwMDNlaHJlZ2lvbik7XG4gXHRpcF9zZXRfZnJlZSh0KTtcbiB9XG5AQCAtNDUxLDEzICs1MDIsMTQgQEAgc3RhdGljIHZvaWRcbiBtdHlwZV9kZXN0cm95KHN0cnVjdCBpcF9zZXQgKnNldClcbiB7XG4gXHRzdHJ1Y3QgaHR5cGUgKmggPSBzZXQtXHUwMDNlZGF0YTtcbitcdHN0cnVjdCBodGFibGUgKnQgPSAoX19mb3JjZSBzdHJ1Y3QgaHRhYmxlICopaC1cdTAwM2V0YWJsZTtcbiBcdHN0cnVjdCBsaXN0X2hlYWQgKmwsICpsdDtcbiBcbi1cdG10eXBlX2FoYXNoX2Rlc3Ryb3koc2V0LCAoX19mb3JjZSBzdHJ1Y3QgaHRhYmxlICopaC1cdTAwM2V0YWJsZSwgdHJ1ZSk7XG4tXHRsaXN0X2Zvcl9lYWNoX3NhZmUobCwgbHQsIFx1MDAyNmgtXHUwMDNlYWQpIHtcbitcdGxpc3RfZm9yX2VhY2hfc2FmZShsLCBsdCwgXHUwMDI2dC1cdTAwM2VhZCkge1xuIFx0XHRsaXN0X2RlbChsKTtcbiBcdFx0a2ZyZWUobCk7XG4gXHR9XG4rXHRtdHlwZV9haGFzaF9kZXN0cm95KHNldCwgdCwgdHJ1ZSk7XG4gXHRrZnJlZShoKTtcbiBcbiBcdHNldC1cdTAwM2VkYXRhID0gTlVMTDtcbkBAIC01MTQsOCArNTY2LDcgQEAgbXR5cGVfZ2NfZG8oc3RydWN0IGlwX3NldCAqc2V0LCBzdHJ1Y3QgaHR5cGUgKmgsIHN0cnVjdCBodGFibGUgKnQsIHUzMiByKVxuICNpZmRlZiBJUF9TRVRfSEFTSF9XSVRIX05FVFNcbiBcdFx0XHRmb3IgKGsgPSAwOyBrIFx1MDAzYyBJUFNFVF9ORVRfQ09VTlQ7IGsrKylcbiBcdFx0XHRcdG10eXBlX2RlbF9jaWRyKHNldCwgaCxcbi1cdFx0XHRcdFx0TkNJRFJfUFVUKERDSURSX0dFVChkYXRhLVx1MDAzZWNpZHIsIGspKSxcbi1cdFx0XHRcdFx0ayk7XG4rXHRcdFx0XHRcdERDSURSX0dFVChkYXRhLVx1MDAzZWNpZHIsIGspLCBrKTtcbiAjZW5kaWZcbiBcdFx0XHR0LVx1MDAzZWhyZWdpb25bcl0uZWxlbWVudHMtLTtcbiBcdFx0XHRpcF9zZXRfZXh0X2Rlc3Ryb3koc2V0LCBkYXRhKTtcbkBAIC01NjksOSArNjIwLDEwIEBAIG10eXBlX2djKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbiBcdHNldCA9IGdjLVx1MDAzZXNldDtcbiBcdGggPSBzZXQtXHUwMDNlZGF0YTtcbiBcbi1cdHNwaW5fbG9ja19iaChcdTAwMjZzZXQtXHUwMDNlbG9jayk7XG4tXHR0ID0gaXBzZXRfZGVyZWZlcmVuY2Vfc2V0KGgtXHUwMDNldGFibGUsIHNldCk7XG4rXHRyY3VfcmVhZF9sb2NrX2JoKCk7XG4rXHR0ID0gcmN1X2RlcmVmZXJlbmNlX2JoKGgtXHUwMDNldGFibGUpO1xuIFx0YXRvbWljX2luYyhcdTAwMjZ0LVx1MDAzZXVyZWYpO1xuK1x0cmN1X3JlYWRfdW5sb2NrX2JoKCk7XG4gXHRudW1vZl9sb2NrcyA9IGFoYXNoX251bW9mX2xvY2tzKHQtXHUwMDNlaHRhYmxlX2JpdHMpO1xuIFx0ciA9IGdjLVx1MDAzZXJlZ2lvbisrO1xuIFx0aWYgKHIgXHUwMDNlPSBudW1vZl9sb2Nrcykge1xuQEAgLTU4MCwxMSArNjMyLDEzIEBAIG10eXBlX2djKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbiBcdG5leHRfcnVuID0gKElQU0VUX0dDX1BFUklPRChzZXQtXHUwMDNldGltZW91dCkgKiBIWikgLyBudW1vZl9sb2NrcztcbiBcdGlmIChuZXh0X3J1biBcdTAwM2MgSFovMTApXG4gXHRcdG5leHRfcnVuID0gSFovMTA7XG4tXHRzcGluX3VubG9ja19iaChcdTAwMjZzZXQtXHUwMDNlbG9jayk7XG4gXG4tXHRtdHlwZV9nY19kbyhzZXQsIGgsIHQsIHIpO1xuK1x0c3Bpbl9sb2NrX2JoKFx1MDAyNmdjLVx1MDAzZWxvY2spO1xuK1x0aWYgKCF0LVx1MDAzZXJlc2l6aW5nKVxuK1x0XHRtdHlwZV9nY19kbyhzZXQsIGgsIHQsIHIpO1xuK1x0c3Bpbl91bmxvY2tfYmgoXHUwMDI2Z2MtXHUwMDNlbG9jayk7XG4gXG4tXHRpZiAoYXRvbWljX2RlY19hbmRfdGVzdChcdTAwMjZ0LVx1MDAzZXVyZWYpIFx1MDAyNlx1MDAyNiBhdG9taWNfcmVhZChcdTAwMjZ0LVx1MDAzZXJlZikpIHtcbitcdGlmIChhdG9taWNfZGVjX2FuZF90ZXN0KFx1MDAyNnQtXHUwMDNldXJlZikgXHUwMDI2XHUwMDI2IHQtXHUwMDNlcmVzaXppbmcpIHtcbiBcdFx0cHJfZGVidWcoXCJUYWJsZSBkZXN0cm95IGFmdGVyIHJlc2l6ZSBieSBleHBpcmU6ICVwXFxuXCIsIHQpO1xuIFx0XHRtdHlwZV9haGFzaF9kZXN0cm95KHNldCwgdCwgZmFsc2UpO1xuIFx0fVxuQEAgLTY2OCwxNSArNzIyLDE4IEBAIG10eXBlX3Jlc2l6ZShzdHJ1Y3QgaXBfc2V0ICpzZXQsIGJvb2wgcmV0cmllZClcbiBcdH1cbiBcdHQtXHUwMDNlaHRhYmxlX2JpdHMgPSBodGFibGVfYml0cztcbiBcdHQtXHUwMDNlbWF4ZWxlbSA9IGgtXHUwMDNlbWF4ZWxlbSAvIGFoYXNoX251bW9mX2xvY2tzKGh0YWJsZV9iaXRzKTtcbitcdElOSVRfTElTVF9IRUFEKFx1MDAyNnQtXHUwMDNlYWQpO1xuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgYWhhc2hfbnVtb2ZfbG9ja3MoaHRhYmxlX2JpdHMpOyBpKyspXG4gXHRcdHNwaW5fbG9ja19pbml0KFx1MDAyNnQtXHUwMDNlaHJlZ2lvbltpXS5sb2NrKTtcbiBcbiBcdC8qIFRoZXJlIGNhbid0IGJlIGFub3RoZXIgcGFyYWxsZWwgcmVzaXppbmcsXG4tXHQgKiBidXQgZHVtcGluZywgZ2MsIGtlcm5lbCBzaWRlIGFkZC9kZWwgYXJlIHBvc3NpYmxlXG4rXHQgKiBidXQgZHVtcGluZyBhbmQga2VybmVsIHNpZGUgYWRkL2RlbCBhcmUgcG9zc2libGVcbiBcdCAqL1xuIFx0b3JpZyA9IGlwc2V0X2RlcmVmZXJlbmNlX2JoX25mbmwoaC1cdTAwM2V0YWJsZSk7XG4tXHRhdG9taWNfc2V0KFx1MDAyNm9yaWctXHUwMDNlcmVmLCAxKTtcbiBcdGF0b21pY19pbmMoXHUwMDI2b3JpZy1cdTAwM2V1cmVmKTtcbitcdHNwaW5fbG9ja19iaChcdTAwMjZoLVx1MDAzZWdjLmxvY2spO1xuK1x0b3JpZy1cdTAwM2VyZXNpemluZyA9IHRydWU7XG4rXHRzcGluX3VubG9ja19iaChcdTAwMjZoLVx1MDAzZWdjLmxvY2spO1xuIFx0cHJfZGVidWcoXCJhdHRlbXB0IHRvIHJlc2l6ZSBzZXQgJXMgZnJvbSAldSB0byAldSwgdCAlcFxcblwiLFxuIFx0XHQgc2V0LVx1MDAzZW5hbWUsIG9yaWctXHUwMDNlaHRhYmxlX2JpdHMsIGh0YWJsZV9iaXRzLCBvcmlnKTtcbiBcdGZvciAociA9IDA7IHIgXHUwMDNjIGFoYXNoX251bW9mX2xvY2tzKG9yaWctXHUwMDNlaHRhYmxlX2JpdHMpOyByKyspIHtcbkBAIC03NjgsNyArODI1LDcgQEAgbXR5cGVfcmVzaXplKHN0cnVjdCBpcF9zZXQgKnNldCwgYm9vbCByZXRyaWVkKVxuIFx0ICogS2VybmVsLXNpZGUgYWRkIGNhbm5vdCB0cmlnZ2VyIGEgcmVzaXplIGFuZCB1c2Vyc3BhY2UgYWN0aW9uc1xuIFx0ICogYXJlIHNlcmlhbGl6ZWQgYnkgdGhlIG11dGV4LlxuIFx0ICovXG4tXHRsaXN0X2Zvcl9lYWNoX3NhZmUobCwgbHQsIFx1MDAyNmgtXHUwMDNlYWQpIHtcbitcdGxpc3RfZm9yX2VhY2hfc2FmZShsLCBsdCwgXHUwMDI2b3JpZy1cdTAwM2VhZCkge1xuIFx0XHR4ID0gbGlzdF9lbnRyeShsLCBzdHJ1Y3QgbXR5cGVfcmVzaXplX2FkLCBsaXN0KTtcbiBcdFx0aWYgKHgtXHUwMDNlYWQgPT0gSVBTRVRfQUREKSB7XG4gXHRcdFx0bXR5cGVfYWRkKHNldCwgXHUwMDI2eC1cdTAwM2VkLCBcdTAwMjZ4LVx1MDAzZWV4dCwgXHUwMDI2eC1cdTAwM2VtZXh0LCB4LVx1MDAzZWZsYWdzKTtcbkBAIC03OTIsMTEgKzg0OSwyNCBAQCBtdHlwZV9yZXNpemUoc3RydWN0IGlwX3NldCAqc2V0LCBib29sIHJldHJpZWQpXG4gXG4gY2xlYW51cDpcbiBcdHJjdV9yZWFkX3VubG9ja19iaCgpO1xuLVx0YXRvbWljX3NldChcdTAwMjZvcmlnLVx1MDAzZXJlZiwgMCk7XG4rXHRzcGluX2xvY2tfYmgoXHUwMDI2aC1cdTAwM2VnYy5sb2NrKTtcbitcdG9yaWctXHUwMDNlcmVzaXppbmcgPSBmYWxzZTtcbitcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNmgtXHUwMDNlZ2MubG9jayk7XG4rXHQvKiBNYWtlIHN1cmUgcGFyYWxsZWwgcmVhZGVycyBzZWUgdGhhdCBvcmlnLVx1MDAzZXJlc2l6aW5nIGlzIGZhbHNlXG4rXHQgKiBiZWZvcmUgd2UgZGVjcmVtZW50IHVyZWYgKi9cbitcdHN5bmNocm9uaXplX3JjdSgpO1xuIFx0YXRvbWljX2RlYyhcdTAwMjZvcmlnLVx1MDAzZXVyZWYpO1xuIFx0bXR5cGVfYWhhc2hfZGVzdHJveShzZXQsIHQsIGZhbHNlKTtcbiBcdGlmIChyZXQgPT0gLUVBR0FJTilcbiBcdFx0Z290byByZXRyeTtcbitcbitcdC8qIENsZWFudXAgdGhlIGJhY2tsb2cgb2YgQUREL0RFTCBlbGVtZW50cyAqL1xuK1x0c3Bpbl9sb2NrX2JoKFx1MDAyNnNldC1cdTAwM2Vsb2NrKTtcbitcdGxpc3RfZm9yX2VhY2hfc2FmZShsLCBsdCwgXHUwMDI2b3JpZy1cdTAwM2VhZCkge1xuK1x0XHRsaXN0X2RlbChsKTtcbitcdFx0a2ZyZWUobCk7XG4rXHR9XG4rXHRzcGluX3VubG9ja19iaChcdTAwMjZzZXQtXHUwMDNlbG9jayk7XG4gXHRnb3RvIG91dDtcbiBcbiBoYndhcm46XG5AQCAtODYwLDE1ICs5MzAsMTMgQEAgbXR5cGVfYWRkKHN0cnVjdCBpcF9zZXQgKnNldCwgdm9pZCAqdmFsdWUsIGNvbnN0IHN0cnVjdCBpcF9zZXRfZXh0ICpleHQsXG4gXHRrZXkgPSBIS0VZKHZhbHVlLCBoLVx1MDAzZWluaXR2YWwsIHQtXHUwMDNlaHRhYmxlX2JpdHMpO1xuIFx0ciA9IGFoYXNoX3JlZ2lvbihrZXkpO1xuIFx0YXRvbWljX2luYyhcdTAwMjZ0LVx1MDAzZXVyZWYpO1xuK1x0cmN1X3JlYWRfdW5sb2NrX2JoKCk7XG4gXHRlbGVtZW50cyA9IHQtXHUwMDNlaHJlZ2lvbltyXS5lbGVtZW50cztcbiBcdG1heGVsZW0gPSB0LVx1MDAzZW1heGVsZW07XG4gXHRpZiAoZWxlbWVudHMgXHUwMDNlPSBtYXhlbGVtKSB7XG4gXHRcdHUzMiBlO1xuLVx0XHRpZiAoU0VUX1dJVEhfVElNRU9VVChzZXQpKSB7XG4tXHRcdFx0cmN1X3JlYWRfdW5sb2NrX2JoKCk7XG4rXHRcdGlmIChTRVRfV0lUSF9USU1FT1VUKHNldCkpXG4gXHRcdFx0bXR5cGVfZ2NfZG8oc2V0LCBoLCB0LCByKTtcbi1cdFx0XHRyY3VfcmVhZF9sb2NrX2JoKCk7XG4tXHRcdH1cbiBcdFx0bWF4ZWxlbSA9IGgtXHUwMDNlbWF4ZWxlbTtcbiBcdFx0ZWxlbWVudHMgPSAwO1xuIFx0XHRmb3IgKGUgPSAwOyBlIFx1MDAzYyBhaGFzaF9udW1vZl9sb2Nrcyh0LVx1MDAzZWh0YWJsZV9iaXRzKTsgZSsrKVxuQEAgLTg3Niw3ICs5NDQsNiBAQCBtdHlwZV9hZGQoc3RydWN0IGlwX3NldCAqc2V0LCB2b2lkICp2YWx1ZSwgY29uc3Qgc3RydWN0IGlwX3NldF9leHQgKmV4dCxcbiBcdFx0aWYgKGVsZW1lbnRzIFx1MDAzZT0gbWF4ZWxlbSBcdTAwMjZcdTAwMjYgU0VUX1dJVEhfRk9SQ0VBREQoc2V0KSlcbiBcdFx0XHRmb3JjZWFkZCA9IHRydWU7XG4gXHR9XG4tXHRyY3VfcmVhZF91bmxvY2tfYmgoKTtcbiBcbiBcdHNwaW5fbG9ja19iaChcdTAwMjZ0LVx1MDAzZWhyZWdpb25bcl0ubG9jayk7XG4gXHRuID0gcmN1X2RlcmVmZXJlbmNlX2JoKGhidWNrZXQodCwga2V5KSk7XG5AQCAtOTI5LDggKzk5Niw3IEBAIG10eXBlX2FkZChzdHJ1Y3QgaXBfc2V0ICpzZXQsIHZvaWQgKnZhbHVlLCBjb25zdCBzdHJ1Y3QgaXBfc2V0X2V4dCAqZXh0LFxuICNpZmRlZiBJUF9TRVRfSEFTSF9XSVRIX05FVFNcbiBcdFx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBJUFNFVF9ORVRfQ09VTlQ7IGkrKylcbiBcdFx0XHRcdG10eXBlX2RlbF9jaWRyKHNldCwgaCxcbi1cdFx0XHRcdFx0TkNJRFJfUFVUKERDSURSX0dFVChkYXRhLVx1MDAzZWNpZHIsIGkpKSxcbi1cdFx0XHRcdFx0aSk7XG4rXHRcdFx0XHRcdERDSURSX0dFVChkYXRhLVx1MDAzZWNpZHIsIGkpLCBpKTtcbiAjZW5kaWZcbiBcdFx0XHRpcF9zZXRfZXh0X2Rlc3Ryb3koc2V0LCBkYXRhKTtcbiBcdFx0XHR0LVx1MDAzZWhyZWdpb25bcl0uZWxlbWVudHMtLTtcbkBAIC05NzUsNyArMTA0MSw3IEBAIG10eXBlX2FkZChzdHJ1Y3QgaXBfc2V0ICpzZXQsIHZvaWQgKnZhbHVlLCBjb25zdCBzdHJ1Y3QgaXBfc2V0X2V4dCAqZXh0LFxuIFx0dC1cdTAwM2VocmVnaW9uW3JdLmVsZW1lbnRzKys7XG4gI2lmZGVmIElQX1NFVF9IQVNIX1dJVEhfTkVUU1xuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgSVBTRVRfTkVUX0NPVU5UOyBpKyspXG4tXHRcdG10eXBlX2FkZF9jaWRyKHNldCwgaCwgTkNJRFJfUFVUKERDSURSX0dFVChkLVx1MDAzZWNpZHIsIGkpKSwgaSk7XG4rXHRcdG10eXBlX2FkZF9jaWRyKHNldCwgaCwgRENJRFJfR0VUKGQtXHUwMDNlY2lkciwgaSksIGkpO1xuICNlbmRpZlxuIFx0bWVtY3B5KGRhdGEsIGQsIHNpemVvZihzdHJ1Y3QgbXR5cGVfZWxlbSkpO1xuIG92ZXJ3cml0ZV9leHRlbnNpb25zOlxuQEAgLTEwMDMsNyArMTA2OSw3IEBAIG10eXBlX2FkZChzdHJ1Y3QgaXBfc2V0ICpzZXQsIHZvaWQgKnZhbHVlLCBjb25zdCBzdHJ1Y3QgaXBfc2V0X2V4dCAqZXh0LFxuIFx0cmV0ID0gMDtcbiByZXNpemU6XG4gXHRzcGluX3VubG9ja19iaChcdTAwMjZ0LVx1MDAzZWhyZWdpb25bcl0ubG9jayk7XG4tXHRpZiAoYXRvbWljX3JlYWQoXHUwMDI2dC1cdTAwM2VyZWYpIFx1MDAyNlx1MDAyNiBleHQtXHUwMDNldGFyZ2V0KSB7XG4rXHRpZiAodC1cdTAwM2VyZXNpemluZyBcdTAwMjZcdTAwMjYgZXh0IFx1MDAyNlx1MDAyNiBleHQtXHUwMDNldGFyZ2V0KSB7XG4gXHRcdC8qIFJlc2l6ZSBpcyBpbiBwcm9jZXNzIGFuZCBrZXJuZWwgc2lkZSBhZGQsIHNhdmUgdmFsdWVzICovXG4gXHRcdHN0cnVjdCBtdHlwZV9yZXNpemVfYWQgKng7XG4gXG5AQCAtMTAxNyw3ICsxMDgzLDcgQEAgbXR5cGVfYWRkKHN0cnVjdCBpcF9zZXQgKnNldCwgdm9pZCAqdmFsdWUsIGNvbnN0IHN0cnVjdCBpcF9zZXRfZXh0ICpleHQsXG4gXHRcdG1lbWNweShcdTAwMjZ4LVx1MDAzZW1leHQsIG1leHQsIHNpemVvZihzdHJ1Y3QgaXBfc2V0X2V4dCkpO1xuIFx0XHR4LVx1MDAzZWZsYWdzID0gZmxhZ3M7XG4gXHRcdHNwaW5fbG9ja19iaChcdTAwMjZzZXQtXHUwMDNlbG9jayk7XG4tXHRcdGxpc3RfYWRkX3RhaWwoXHUwMDI2eC1cdTAwM2VsaXN0LCBcdTAwMjZoLVx1MDAzZWFkKTtcbitcdFx0bGlzdF9hZGRfdGFpbChcdTAwMjZ4LVx1MDAzZWxpc3QsIFx1MDAyNnQtXHUwMDNlYWQpO1xuIFx0XHRzcGluX3VubG9ja19iaChcdTAwMjZzZXQtXHUwMDNlbG9jayk7XG4gXHR9XG4gXHRnb3RvIG91dDtcbkBAIC0xMDMwLDcgKzEwOTYsNyBAQCBtdHlwZV9hZGQoc3RydWN0IGlwX3NldCAqc2V0LCB2b2lkICp2YWx1ZSwgY29uc3Qgc3RydWN0IGlwX3NldF9leHQgKmV4dCxcbiB1bmxvY2s6XG4gXHRzcGluX3VubG9ja19iaChcdTAwMjZ0LVx1MDAzZWhyZWdpb25bcl0ubG9jayk7XG4gb3V0OlxuLVx0aWYgKGF0b21pY19kZWNfYW5kX3Rlc3QoXHUwMDI2dC1cdTAwM2V1cmVmKSBcdTAwMjZcdTAwMjYgYXRvbWljX3JlYWQoXHUwMDI2dC1cdTAwM2VyZWYpKSB7XG4rXHRpZiAoYXRvbWljX2RlY19hbmRfdGVzdChcdTAwMjZ0LVx1MDAzZXVyZWYpIFx1MDAyNlx1MDAyNiB0LVx1MDAzZXJlc2l6aW5nKSB7XG4gXHRcdHByX2RlYnVnKFwiVGFibGUgZGVzdHJveSBhZnRlciByZXNpemUgYnkgYWRkOiAlcFxcblwiLCB0KTtcbiBcdFx0bXR5cGVfYWhhc2hfZGVzdHJveShzZXQsIHQsIGZhbHNlKTtcbiBcdH1cbkBAIC0xMDg5LDExICsxMTU1LDExIEBAIG10eXBlX2RlbChzdHJ1Y3QgaXBfc2V0ICpzZXQsIHZvaWQgKnZhbHVlLCBjb25zdCBzdHJ1Y3QgaXBfc2V0X2V4dCAqZXh0LFxuICNpZmRlZiBJUF9TRVRfSEFTSF9XSVRIX05FVFNcbiBcdFx0Zm9yIChqID0gMDsgaiBcdTAwM2MgSVBTRVRfTkVUX0NPVU5UOyBqKyspXG4gXHRcdFx0bXR5cGVfZGVsX2NpZHIoc2V0LCBoLFxuLVx0XHRcdFx0ICAgICAgIE5DSURSX1BVVChEQ0lEUl9HRVQoZC1cdTAwM2VjaWRyLCBqKSksIGopO1xuK1x0XHRcdFx0RENJRFJfR0VUKGQtXHUwMDNlY2lkciwgaiksIGopO1xuICNlbmRpZlxuIFx0XHRpcF9zZXRfZXh0X2Rlc3Ryb3koc2V0LCBkYXRhKTtcbiBcbi1cdFx0aWYgKGF0b21pY19yZWFkKFx1MDAyNnQtXHUwMDNlcmVmKSBcdTAwMjZcdTAwMjYgZXh0LVx1MDAzZXRhcmdldCkge1xuK1x0XHRpZiAodC1cdTAwM2VyZXNpemluZyBcdTAwMjZcdTAwMjYgZXh0IFx1MDAyNlx1MDAyNiBleHQtXHUwMDNldGFyZ2V0KSB7XG4gXHRcdFx0LyogUmVzaXplIGlzIGluIHByb2Nlc3MgYW5kIGtlcm5lbCBzaWRlIGRlbCxcbiBcdFx0XHQgKiBzYXZlIHZhbHVlc1xuIFx0XHRcdCAqL1xuQEAgLTExNDEsMTAgKzEyMDcsMTAgQEAgbXR5cGVfZGVsKHN0cnVjdCBpcF9zZXQgKnNldCwgdm9pZCAqdmFsdWUsIGNvbnN0IHN0cnVjdCBpcF9zZXRfZXh0ICpleHQsXG4gXHRzcGluX3VubG9ja19iaChcdTAwMjZ0LVx1MDAzZWhyZWdpb25bcl0ubG9jayk7XG4gXHRpZiAoeCkge1xuIFx0XHRzcGluX2xvY2tfYmgoXHUwMDI2c2V0LVx1MDAzZWxvY2spO1xuLVx0XHRsaXN0X2FkZChcdTAwMjZ4LVx1MDAzZWxpc3QsIFx1MDAyNmgtXHUwMDNlYWQpO1xuK1x0XHRsaXN0X2FkZChcdTAwMjZ4LVx1MDAzZWxpc3QsIFx1MDAyNnQtXHUwMDNlYWQpO1xuIFx0XHRzcGluX3VubG9ja19iaChcdTAwMjZzZXQtXHUwMDNlbG9jayk7XG4gXHR9XG4tXHRpZiAoYXRvbWljX2RlY19hbmRfdGVzdChcdTAwMjZ0LVx1MDAzZXVyZWYpIFx1MDAyNlx1MDAyNiBhdG9taWNfcmVhZChcdTAwMjZ0LVx1MDAzZXJlZikpIHtcbitcdGlmIChhdG9taWNfZGVjX2FuZF90ZXN0KFx1MDAyNnQtXHUwMDNldXJlZikgXHUwMDI2XHUwMDI2IHQtXHUwMDNlcmVzaXppbmcpIHtcbiBcdFx0cHJfZGVidWcoXCJUYWJsZSBkZXN0cm95IGFmdGVyIHJlc2l6ZSBieSBkZWw6ICVwXFxuXCIsIHQpO1xuIFx0XHRtdHlwZV9haGFzaF9kZXN0cm95KHNldCwgdCwgZmFsc2UpO1xuIFx0fVxuQEAgLTExNzIsMjggKzEyMzgsMzcgQEAgbXR5cGVfdGVzdF9jaWRycyhzdHJ1Y3QgaXBfc2V0ICpzZXQsIHN0cnVjdCBtdHlwZV9lbGVtICpkLFxuIHtcbiBcdHN0cnVjdCBodHlwZSAqaCA9IHNldC1cdTAwM2VkYXRhO1xuIFx0c3RydWN0IGh0YWJsZSAqdCA9IHJjdV9kZXJlZmVyZW5jZV9iaChoLVx1MDAzZXRhYmxlKTtcbitcdHN0cnVjdCBuZXRfcHJlZml4ZXMgKm5ldHMwO1xuIFx0c3RydWN0IGhidWNrZXQgKm47XG4gXHRzdHJ1Y3QgbXR5cGVfZWxlbSAqZGF0YTtcbiAjaWYgSVBTRVRfTkVUX0NPVU5UID09IDJcbitcdHN0cnVjdCBuZXRfcHJlZml4ZXMgKm5ldHMxO1xuIFx0c3RydWN0IG10eXBlX2VsZW0gb3JpZyA9ICpkO1xuLVx0aW50IHJldCwgaSwgaiA9IDAsIGs7XG4rXHRpbnQgcmV0LCBpLCBqLCBrO1xuICNlbHNlXG4tXHRpbnQgcmV0LCBpLCBqID0gMDtcbitcdGludCByZXQsIGksIGo7XG4gI2VuZGlmXG4gXHR1MzIga2V5LCBtdWx0aSA9IDA7XG4gXHR1OCBwb3M7XG4gXG4gXHRwcl9kZWJ1ZyhcInRlc3QgYnkgbmV0c1xcblwiKTtcbi1cdGZvciAoOyBqIFx1MDAzYyBOTEVOIFx1MDAyNlx1MDAyNiBoLVx1MDAzZW5ldHNbal0uY2lkclswXSBcdTAwMjZcdTAwMjYgIW11bHRpOyBqKyspIHtcbitcdHJjdV9yZWFkX2xvY2tfYmgoKTtcbitcdG5ldHMwID0gcmN1X2RlcmVmZXJlbmNlX2JoKGgtXHUwMDNlcm5ldHNbMF0pO1xuKyNpZiBJUFNFVF9ORVRfQ09VTlQgPT0gMlxuK1x0bmV0czEgPSByY3VfZGVyZWZlcmVuY2VfYmgoaC1cdTAwM2VybmV0c1sxXSk7XG4rI2VuZGlmXG4rXHRmb3IgKGogPSAwOyBqIFx1MDAzYyBuZXRzMC1cdTAwM2VsZW4gXHUwMDI2XHUwMDI2ICFtdWx0aTsgaisrKSB7XG4rXHRcdGlmICghbmV0czAtXHUwMDNlbmV0c1tqXS5jb3VudClcbitcdFx0XHRjb250aW51ZTtcbiAjaWYgSVBTRVRfTkVUX0NPVU5UID09IDJcbiBcdFx0bXR5cGVfZGF0YV9yZXNldF9lbGVtKGQsIFx1MDAyNm9yaWcpO1xuLVx0XHRtdHlwZV9kYXRhX25ldG1hc2soZCwgTkNJRFJfR0VUKGgtXHUwMDNlbmV0c1tqXS5jaWRyWzBdKSwgZmFsc2UpO1xuLVx0XHRmb3IgKGsgPSAwOyBrIFx1MDAzYyBOTEVOIFx1MDAyNlx1MDAyNiBoLVx1MDAzZW5ldHNba10uY2lkclsxXSBcdTAwMjZcdTAwMjYgIW11bHRpO1xuLVx0XHQgICAgIGsrKykge1xuLVx0XHRcdG10eXBlX2RhdGFfbmV0bWFzayhkLCBOQ0lEUl9HRVQoaC1cdTAwM2VuZXRzW2tdLmNpZHJbMV0pLFxuLVx0XHRcdFx0XHQgICB0cnVlKTtcbitcdFx0bXR5cGVfZGF0YV9uZXRtYXNrKGQsIG5ldHMwLVx1MDAzZW5ldHNbal0uY2lkciwgZmFsc2UpO1xuK1x0XHRmb3IgKGsgPSAwOyBrIFx1MDAzYyBuZXRzMS1cdTAwM2VsZW4gXHUwMDI2XHUwMDI2ICFtdWx0aTsgaysrKSB7XG4rXHRcdFx0aWYgKCFuZXRzMS1cdTAwM2VuZXRzW2tdLmNvdW50KVxuK1x0XHRcdFx0Y29udGludWU7XG4rXHRcdFx0bXR5cGVfZGF0YV9uZXRtYXNrKGQsIG5ldHMxLVx1MDAzZW5ldHNba10uY2lkciwgdHJ1ZSk7XG4gI2Vsc2Vcbi1cdFx0bXR5cGVfZGF0YV9uZXRtYXNrKGQsIE5DSURSX0dFVChoLVx1MDAzZW5ldHNbal0uY2lkclswXSkpO1xuK1x0XHRtdHlwZV9kYXRhX25ldG1hc2soZCwgbmV0czAtXHUwMDNlbmV0c1tqXS5jaWRyKTtcbiAjZW5kaWZcbiBcdFx0a2V5ID0gSEtFWShkLCBoLVx1MDAzZWluaXR2YWwsIHQtXHUwMDNlaHRhYmxlX2JpdHMpO1xuIFx0XHRuID0gcmN1X2RlcmVmZXJlbmNlX2JoKGhidWNrZXQodCwga2V5KSk7XG5AQCAtMTIwOCw3ICsxMjgzLDcgQEAgbXR5cGVfdGVzdF9jaWRycyhzdHJ1Y3QgaXBfc2V0ICpzZXQsIHN0cnVjdCBtdHlwZV9lbGVtICpkLFxuIFx0XHRcdFx0Y29udGludWU7XG4gXHRcdFx0cmV0ID0gbXR5cGVfZGF0YV9tYXRjaChkYXRhLCBleHQsIG1leHQsIHNldCwgZmxhZ3MpO1xuIFx0XHRcdGlmIChyZXQgIT0gMClcbi1cdFx0XHRcdHJldHVybiByZXQ7XG4rXHRcdFx0XHRnb3RvIHVubG9jaztcbiAjaWZkZWYgSVBfU0VUX0hBU0hfV0lUSF9NVUxUSVxuIFx0XHRcdC8qIE5vIG1hdGNoLCByZXNldCBtdWx0aXBsZSBtYXRjaCBmbGFnICovXG4gXHRcdFx0bXVsdGkgPSAwO1xuQEAgLTEyMTgsNyArMTI5MywxMCBAQCBtdHlwZV90ZXN0X2NpZHJzKHN0cnVjdCBpcF9zZXQgKnNldCwgc3RydWN0IG10eXBlX2VsZW0gKmQsXG4gXHRcdH1cbiAjZW5kaWZcbiBcdH1cbi1cdHJldHVybiAwO1xuK1x0cmV0ID0gMDtcbit1bmxvY2s6XG4rXHRyY3VfcmVhZF91bmxvY2tfYmgoKTtcbitcdHJldHVybiByZXQ7XG4gfVxuICNlbmRpZlxuIFxuQEAgLTEzNTMsNyArMTQzMSw3IEBAIG10eXBlX3VyZWYoc3RydWN0IGlwX3NldCAqc2V0LCBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IsIGJvb2wgc3RhcnQpXG4gXHRcdHJjdV9yZWFkX3VubG9ja19iaCgpO1xuIFx0fSBlbHNlIGlmIChjYi1cdTAwM2VhcmdzW0lQU0VUX0NCX1BSSVZBVEVdKSB7XG4gXHRcdHQgPSAoc3RydWN0IGh0YWJsZSAqKWNiLVx1MDAzZWFyZ3NbSVBTRVRfQ0JfUFJJVkFURV07XG4tXHRcdGlmIChhdG9taWNfZGVjX2FuZF90ZXN0KFx1MDAyNnQtXHUwMDNldXJlZikgXHUwMDI2XHUwMDI2IGF0b21pY19yZWFkKFx1MDAyNnQtXHUwMDNlcmVmKSkge1xuK1x0XHRpZiAoYXRvbWljX2RlY19hbmRfdGVzdChcdTAwMjZ0LVx1MDAzZXVyZWYpIFx1MDAyNlx1MDAyNiB0LVx1MDAzZXJlc2l6aW5nKSB7XG4gXHRcdFx0cHJfZGVidWcoXCJUYWJsZSBkZXN0cm95IGFmdGVyIHJlc2l6ZSBcIlxuIFx0XHRcdFx0IFwiIGJ5IGR1bXA6ICVwXFxuXCIsIHQpO1xuIFx0XHRcdG10eXBlX2FoYXNoX2Rlc3Ryb3koc2V0LCB0LCBmYWxzZSk7XG5AQCAtMTQ4Myw2ICsxNTYxLDkgQEAgSVBTRVRfVE9LRU4oSFRZUEUsIF9jcmVhdGUpKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGlwX3NldCAqc2V0LFxuIFx0aW50IHJldCBfX2F0dHJpYnV0ZV9fKCh1bnVzZWQpKSA9IDA7XG4gXHR1OCBuZXRtYXNrID0gc2V0LVx1MDAzZWZhbWlseSA9PSBORlBST1RPX0lQVjQgPyAzMiA6IDEyODtcbiBcdHVuaW9uIG5mX2luZXRfYWRkciBiaXRtYXNrID0gb25lc21hc2s7XG4rI2VuZGlmXG4rI2lmZGVmIElQX1NFVF9IQVNIX1dJVEhfTkVUU1xuK1x0c3RydWN0IG5ldF9wcmVmaXhlcyAqbmV0cztcbiAjZW5kaWZcbiBcdHNpemVfdCBoc2l6ZTtcbiBcdHN0cnVjdCBodHlwZSAqaDtcbkBAIC0xNTY2LDcgKzE2NDcsMTMgQEAgSVBTRVRfVE9LRU4oSFRZUEUsIF9jcmVhdGUpKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGlwX3NldCAqc2V0LFxuIFx0aWYgKHRiW0lQU0VUX0FUVFJfTUFYRUxFTV0pXG4gXHRcdG1heGVsZW0gPSBpcF9zZXRfZ2V0X2gzMih0YltJUFNFVF9BVFRSX01BWEVMRU1dKTtcbiBcbi1cdGhzaXplID0gc2l6ZW9mKCpoKTtcbisjaWZkZWYgSVBfU0VUX1BST1RPX1VOREVGXG4rXHRoc2l6ZSA9IHNpemVvZihzdHJ1Y3QgaHR5cGUpO1xuKyNlbHNlXG4rXHRoc2l6ZSA9IHNldC1cdTAwM2VmYW1pbHkgPT0gTkZQUk9UT19JUFY2ID9cbitcdFx0c2l6ZW9mKHN0cnVjdCBJUFNFVF9UT0tFTihIVFlQRSwgNikpIDpcbitcdFx0c2l6ZW9mKHN0cnVjdCBJUFNFVF9UT0tFTihIVFlQRSwgNCkpO1xuKyNlbmRpZlxuIFx0aCA9IGt6YWxsb2MoaHNpemUsIEdGUF9LRVJORUwpO1xuIFx0aWYgKCFoKVxuIFx0XHRyZXR1cm4gLUVOT01FTTtcbkBAIC0xNTc3LDIyICsxNjY0LDI3IEBAIElQU0VUX1RPS0VOKEhUWVBFLCBfY3JlYXRlKShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBpcF9zZXQgKnNldCxcbiBcdCAqL1xuIFx0aGJpdHMgPSBmbHMoaGFzaHNpemUgLSAxKTtcbiBcdGhzaXplID0gaHRhYmxlX3NpemUoaGJpdHMpO1xuLVx0aWYgKGhzaXplID09IDApIHtcbi1cdFx0a2ZyZWUoaCk7XG4tXHRcdHJldHVybiAtRU5PTUVNO1xuLVx0fVxuK1x0aWYgKGhzaXplID09IDApXG4rXHRcdGdvdG8gZnJlZV9oO1xuIFx0dCA9IGlwX3NldF9hbGxvYyhoc2l6ZSk7XG4tXHRpZiAoIXQpIHtcbi1cdFx0a2ZyZWUoaCk7XG4tXHRcdHJldHVybiAtRU5PTUVNO1xuLVx0fVxuK1x0aWYgKCF0KVxuK1x0XHRnb3RvIGZyZWVfaDtcbiBcdHQtXHUwMDNlaHJlZ2lvbiA9IGlwX3NldF9hbGxvYyhhaGFzaF9zaXplb2ZfcmVnaW9ucyhoYml0cykpO1xuLVx0aWYgKCF0LVx1MDAzZWhyZWdpb24pIHtcbi1cdFx0aXBfc2V0X2ZyZWUodCk7XG4tXHRcdGtmcmVlKGgpO1xuLVx0XHRyZXR1cm4gLUVOT01FTTtcbitcdGlmICghdC1cdTAwM2VocmVnaW9uKVxuK1x0XHRnb3RvIGZyZWVfdDtcbisjaWZkZWYgSVBfU0VUX0hBU0hfV0lUSF9ORVRTXG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBJUFNFVF9ORVRfQ09VTlQ7IGkrKykge1xuK1x0XHRuZXRzID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IG5ldF9wcmVmaXhlcyksIEdGUF9LRVJORUwpO1xuK1x0XHRpZiAoIW5ldHMpIHtcbitcdFx0XHRpZiAoaSAhPSAwKVxuK1x0XHRcdFx0a2ZyZWUoaC1cdTAwM2VybmV0c1swXSk7XG4rXHRcdFx0Z290byBmcmVlX2hyZWdpb247XG4rXHRcdH1cbitcdFx0UkNVX0lOSVRfUE9JTlRFUihoLVx1MDAzZXJuZXRzW2ldLCBuZXRzKTtcbiBcdH1cbisjZW5kaWZcbiBcdGgtXHUwMDNlZ2Muc2V0ID0gc2V0O1xuK1x0c3Bpbl9sb2NrX2luaXQoXHUwMDI2aC1cdTAwM2VnYy5sb2NrKTtcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGFoYXNoX251bW9mX2xvY2tzKGhiaXRzKTsgaSsrKVxuIFx0XHRzcGluX2xvY2tfaW5pdChcdTAwMjZ0LVx1MDAzZWhyZWdpb25baV0ubG9jayk7XG4gXHRoLVx1MDAzZW1heGVsZW0gPSBtYXhlbGVtO1xuQEAgLTE2MTksOSArMTcxMSw4IEBAIElQU0VUX1RPS0VOKEhUWVBFLCBfY3JlYXRlKShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBpcF9zZXQgKnNldCxcbiBcdH1cbiBcdHQtXHUwMDNlaHRhYmxlX2JpdHMgPSBoYml0cztcbiBcdHQtXHUwMDNlbWF4ZWxlbSA9IGgtXHUwMDNlbWF4ZWxlbSAvIGFoYXNoX251bW9mX2xvY2tzKGhiaXRzKTtcbitcdElOSVRfTElTVF9IRUFEKFx1MDAyNnQtXHUwMDNlYWQpO1xuIFx0UkNVX0lOSVRfUE9JTlRFUihoLVx1MDAzZXRhYmxlLCB0KTtcbi1cbi1cdElOSVRfTElTVF9IRUFEKFx1MDAyNmgtXHUwMDNlYWQpO1xuIFx0c2V0LVx1MDAzZWRhdGEgPSBoO1xuICNpZm5kZWYgSVBfU0VUX1BST1RPX1VOREVGXG4gXHRpZiAoc2V0LVx1MDAzZWZhbWlseSA9PSBORlBST1RPX0lQVjQpIHtcbkBAIC0xNjU1LDYgKzE3NDYsMTYgQEAgSVBTRVRfVE9LRU4oSFRZUEUsIF9jcmVhdGUpKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGlwX3NldCAqc2V0LFxuIFx0XHQgdC1cdTAwM2VodGFibGVfYml0cywgaC1cdTAwM2VtYXhlbGVtLCBzZXQtXHUwMDNlZGF0YSwgdCk7XG4gXG4gXHRyZXR1cm4gMDtcbitcbisjaWZkZWYgSVBfU0VUX0hBU0hfV0lUSF9ORVRTXG4rZnJlZV9ocmVnaW9uOlxuK1x0aXBfc2V0X2ZyZWUodC1cdTAwM2VocmVnaW9uKTtcbisjZW5kaWZcbitmcmVlX3Q6XG4rXHRpcF9zZXRfZnJlZSh0KTtcbitmcmVlX2g6XG4rXHRrZnJlZShoKTtcbitcdHJldHVybiAtRU5PTUVNO1xuIH1cbiAjZW5kaWYgLyogSVBfU0VUX0VNSVRfQ1JFQVRFICovXG4gXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcHBvcnRuZXQuYyBiL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0bmV0LmNcbmluZGV4IDJkNjY1MmQ0MzE5OWE0Li4xOTU4NTNhMjViMDYwNiAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0bmV0LmNcbisrKyBiL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0bmV0LmNcbkBAIC0xMzgsNyArMTM4LDcgQEAgaGFzaF9pcHBvcnRuZXQ0X2thZHQoc3RydWN0IGlwX3NldCAqc2V0LCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0Y29uc3Qgc3RydWN0IGhhc2hfaXBwb3J0bmV0NCAqaCA9IHNldC1cdTAwM2VkYXRhO1xuIFx0aXBzZXRfYWR0Zm4gYWR0Zm4gPSBzZXQtXHUwMDNldmFyaWFudC1cdTAwM2VhZHRbYWR0XTtcbiBcdHN0cnVjdCBoYXNoX2lwcG9ydG5ldDRfZWxlbSBlID0ge1xuLVx0XHQuY2lkciA9IElOSVRfQ0lEUihoLVx1MDAzZW5ldHNbMF0uY2lkclswXSwgSE9TVF9NQVNLKSxcbitcdFx0LmNpZHIgPSBJTklUX0NJRFIoaC1cdTAwM2VybmV0c1swXSwgSE9TVF9NQVNLKSxcbiBcdH07XG4gXHRzdHJ1Y3QgaXBfc2V0X2V4dCBleHQgPSBJUF9TRVRfSU5JVF9LRVhUKHNrYiwgb3B0LCBzZXQpO1xuIFxuQEAgLTM5OCw3ICszOTgsNyBAQCBoYXNoX2lwcG9ydG5ldDZfa2FkdChzdHJ1Y3QgaXBfc2V0ICpzZXQsIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXG4gXHRjb25zdCBzdHJ1Y3QgaGFzaF9pcHBvcnRuZXQ2ICpoID0gc2V0LVx1MDAzZWRhdGE7XG4gXHRpcHNldF9hZHRmbiBhZHRmbiA9IHNldC1cdTAwM2V2YXJpYW50LVx1MDAzZWFkdFthZHRdO1xuIFx0c3RydWN0IGhhc2hfaXBwb3J0bmV0Nl9lbGVtIGUgPSB7XG4tXHRcdC5jaWRyID0gSU5JVF9DSURSKGgtXHUwMDNlbmV0c1swXS5jaWRyWzBdLCBIT1NUX01BU0spLFxuK1x0XHQuY2lkciA9IElOSVRfQ0lEUihoLVx1MDAzZXJuZXRzWzBdLCBIT1NUX01BU0spLFxuIFx0fTtcbiBcdHN0cnVjdCBpcF9zZXRfZXh0IGV4dCA9IElQX1NFVF9JTklUX0tFWFQoc2tiLCBvcHQsIHNldCk7XG4gXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXQuYyBiL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0LmNcbmluZGV4IGNlMGE5Y2U1YTkxZjFhLi4wOTJmM2M5MjgxYjgwZiAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0LmNcbisrKyBiL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0LmNcbkBAIC0xMTcsNyArMTE3LDcgQEAgaGFzaF9uZXQ0X2thZHQoc3RydWN0IGlwX3NldCAqc2V0LCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0Y29uc3Qgc3RydWN0IGhhc2hfbmV0NCAqaCA9IHNldC1cdTAwM2VkYXRhO1xuIFx0aXBzZXRfYWR0Zm4gYWR0Zm4gPSBzZXQtXHUwMDNldmFyaWFudC1cdTAwM2VhZHRbYWR0XTtcbiBcdHN0cnVjdCBoYXNoX25ldDRfZWxlbSBlID0ge1xuLVx0XHQuY2lkciA9IElOSVRfQ0lEUihoLVx1MDAzZW5ldHNbMF0uY2lkclswXSwgSE9TVF9NQVNLKSxcbitcdFx0LmNpZHIgPSBJTklUX0NJRFIoaC1cdTAwM2VybmV0c1swXSwgSE9TVF9NQVNLKSxcbiBcdH07XG4gXHRzdHJ1Y3QgaXBfc2V0X2V4dCBleHQgPSBJUF9TRVRfSU5JVF9LRVhUKHNrYiwgb3B0LCBzZXQpO1xuIFxuQEAgLTI5MSw3ICsyOTEsNyBAQCBoYXNoX25ldDZfa2FkdChzdHJ1Y3QgaXBfc2V0ICpzZXQsIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXG4gXHRjb25zdCBzdHJ1Y3QgaGFzaF9uZXQ2ICpoID0gc2V0LVx1MDAzZWRhdGE7XG4gXHRpcHNldF9hZHRmbiBhZHRmbiA9IHNldC1cdTAwM2V2YXJpYW50LVx1MDAzZWFkdFthZHRdO1xuIFx0c3RydWN0IGhhc2hfbmV0Nl9lbGVtIGUgPSB7XG4tXHRcdC5jaWRyID0gSU5JVF9DSURSKGgtXHUwMDNlbmV0c1swXS5jaWRyWzBdLCBIT1NUX01BU0spLFxuK1x0XHQuY2lkciA9IElOSVRfQ0lEUihoLVx1MDAzZXJuZXRzWzBdLCBIT1NUX01BU0spLFxuIFx0fTtcbiBcdHN0cnVjdCBpcF9zZXRfZXh0IGV4dCA9IElQX1NFVF9JTklUX0tFWFQoc2tiLCBvcHQsIHNldCk7XG4gXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRpZmFjZS5jIGIvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRpZmFjZS5jXG5pbmRleCAzMGE2NTVlNWM0ZmRjZC4uYjQ0Yjk1Zjc2NmI3YWQgMTAwNjQ0XG4tLS0gYS9uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldGlmYWNlLmNcbisrKyBiL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0aWZhY2UuY1xuQEAgLTE2MSw3ICsxNjEsNyBAQCBoYXNoX25ldGlmYWNlNF9rYWR0KHN0cnVjdCBpcF9zZXQgKnNldCwgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdHN0cnVjdCBoYXNoX25ldGlmYWNlNCAqaCA9IHNldC1cdTAwM2VkYXRhO1xuIFx0aXBzZXRfYWR0Zm4gYWR0Zm4gPSBzZXQtXHUwMDNldmFyaWFudC1cdTAwM2VhZHRbYWR0XTtcbiBcdHN0cnVjdCBoYXNoX25ldGlmYWNlNF9lbGVtIGUgPSB7XG4tXHRcdC5jaWRyID0gSU5JVF9DSURSKGgtXHUwMDNlbmV0c1swXS5jaWRyWzBdLCBIT1NUX01BU0spLFxuK1x0XHQuY2lkciA9IElOSVRfQ0lEUihoLVx1MDAzZXJuZXRzWzBdLCBIT1NUX01BU0spLFxuIFx0XHQuZWxlbSA9IDEsXG4gXHR9O1xuIFx0c3RydWN0IGlwX3NldF9leHQgZXh0ID0gSVBfU0VUX0lOSVRfS0VYVChza2IsIG9wdCwgc2V0KTtcbkBAIC0zODIsNyArMzgyLDcgQEAgaGFzaF9uZXRpZmFjZTZfa2FkdChzdHJ1Y3QgaXBfc2V0ICpzZXQsIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXG4gXHRzdHJ1Y3QgaGFzaF9uZXRpZmFjZTYgKmggPSBzZXQtXHUwMDNlZGF0YTtcbiBcdGlwc2V0X2FkdGZuIGFkdGZuID0gc2V0LVx1MDAzZXZhcmlhbnQtXHUwMDNlYWR0W2FkdF07XG4gXHRzdHJ1Y3QgaGFzaF9uZXRpZmFjZTZfZWxlbSBlID0ge1xuLVx0XHQuY2lkciA9IElOSVRfQ0lEUihoLVx1MDAzZW5ldHNbMF0uY2lkclswXSwgSE9TVF9NQVNLKSxcbitcdFx0LmNpZHIgPSBJTklUX0NJRFIoaC1cdTAwM2VybmV0c1swXSwgSE9TVF9NQVNLKSxcbiBcdFx0LmVsZW0gPSAxLFxuIFx0fTtcbiBcdHN0cnVjdCBpcF9zZXRfZXh0IGV4dCA9IElQX1NFVF9JTklUX0tFWFQoc2tiLCBvcHQsIHNldCk7XG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRuZXQuYyBiL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0bmV0LmNcbmluZGV4IDhmYmU2NDljOWRkM2Q0Li5mN2M4YTFjYzMwZmM3YiAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0bmV0LmNcbisrKyBiL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0bmV0LmNcbkBAIC0xNDksOCArMTQ5LDEwIEBAIGhhc2hfbmV0bmV0NF9rYWR0KHN0cnVjdCBpcF9zZXQgKnNldCwgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdHN0cnVjdCBoYXNoX25ldG5ldDRfZWxlbSBlID0geyB9O1xuIFx0c3RydWN0IGlwX3NldF9leHQgZXh0ID0gSVBfU0VUX0lOSVRfS0VYVChza2IsIG9wdCwgc2V0KTtcbiBcbi1cdGUuY2lkclswXSA9IElOSVRfQ0lEUihoLVx1MDAzZW5ldHNbMF0uY2lkclswXSwgSE9TVF9NQVNLKTtcbi1cdGUuY2lkclsxXSA9IElOSVRfQ0lEUihoLVx1MDAzZW5ldHNbMF0uY2lkclsxXSwgSE9TVF9NQVNLKTtcbitcdHJjdV9yZWFkX2xvY2tfYmgoKTtcbitcdGUuY2lkclswXSA9IElOSVRfQ0lEUihoLVx1MDAzZXJuZXRzWzBdLCBIT1NUX01BU0spO1xuK1x0ZS5jaWRyWzFdID0gSU5JVF9DSURSKGgtXHUwMDNlcm5ldHNbMV0sIEhPU1RfTUFTSyk7XG4rXHRyY3VfcmVhZF91bmxvY2tfYmgoKTtcbiBcdGlmIChhZHQgPT0gSVBTRVRfVEVTVClcbiBcdFx0ZS5jY21wID0gKEhPU1RfTUFTSyBcdTAwM2NcdTAwM2MgKHNpemVvZihlLmNpZHJbMF0pICogOCkpIHwgSE9TVF9NQVNLO1xuIFxuQEAgLTM4OCw4ICszOTAsMTAgQEAgaGFzaF9uZXRuZXQ2X2thZHQoc3RydWN0IGlwX3NldCAqc2V0LCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0c3RydWN0IGhhc2hfbmV0bmV0Nl9lbGVtIGUgPSB7IH07XG4gXHRzdHJ1Y3QgaXBfc2V0X2V4dCBleHQgPSBJUF9TRVRfSU5JVF9LRVhUKHNrYiwgb3B0LCBzZXQpO1xuIFxuLVx0ZS5jaWRyWzBdID0gSU5JVF9DSURSKGgtXHUwMDNlbmV0c1swXS5jaWRyWzBdLCBIT1NUX01BU0spO1xuLVx0ZS5jaWRyWzFdID0gSU5JVF9DSURSKGgtXHUwMDNlbmV0c1swXS5jaWRyWzFdLCBIT1NUX01BU0spO1xuK1x0cmN1X3JlYWRfbG9ja19iaCgpO1xuK1x0ZS5jaWRyWzBdID0gSU5JVF9DSURSKGgtXHUwMDNlcm5ldHNbMF0sIEhPU1RfTUFTSyk7XG4rXHRlLmNpZHJbMV0gPSBJTklUX0NJRFIoaC1cdTAwM2VybmV0c1sxXSwgSE9TVF9NQVNLKTtcbitcdHJjdV9yZWFkX3VubG9ja19iaCgpO1xuIFx0aWYgKGFkdCA9PSBJUFNFVF9URVNUKVxuIFx0XHRlLmNjbXAgPSAoSE9TVF9NQVNLIFx1MDAzY1x1MDAzYyAoc2l6ZW9mKHU4KSAqIDgpKSB8IEhPU1RfTUFTSztcbiBcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldHBvcnQuYyBiL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0cG9ydC5jXG5pbmRleCBkMWEwNjI4ZGY0ZWYzYS4uNWRlNGI1MTFkZTc2MzYgMTAwNjQ0XG4tLS0gYS9uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldHBvcnQuY1xuKysrIGIvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRwb3J0LmNcbkBAIC0xMzMsNyArMTMzLDcgQEAgaGFzaF9uZXRwb3J0NF9rYWR0KHN0cnVjdCBpcF9zZXQgKnNldCwgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdGNvbnN0IHN0cnVjdCBoYXNoX25ldHBvcnQ0ICpoID0gc2V0LVx1MDAzZWRhdGE7XG4gXHRpcHNldF9hZHRmbiBhZHRmbiA9IHNldC1cdTAwM2V2YXJpYW50LVx1MDAzZWFkdFthZHRdO1xuIFx0c3RydWN0IGhhc2hfbmV0cG9ydDRfZWxlbSBlID0ge1xuLVx0XHQuY2lkciA9IElOSVRfQ0lEUihoLVx1MDAzZW5ldHNbMF0uY2lkclswXSwgSE9TVF9NQVNLKSxcbitcdFx0LmNpZHIgPSBJTklUX0NJRFIoaC1cdTAwM2VybmV0c1swXSwgSE9TVF9NQVNLKSxcbiBcdH07XG4gXHRzdHJ1Y3QgaXBfc2V0X2V4dCBleHQgPSBJUF9TRVRfSU5JVF9LRVhUKHNrYiwgb3B0LCBzZXQpO1xuIFxuQEAgLTM1Myw3ICszNTMsNyBAQCBoYXNoX25ldHBvcnQ2X2thZHQoc3RydWN0IGlwX3NldCAqc2V0LCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0Y29uc3Qgc3RydWN0IGhhc2hfbmV0cG9ydDYgKmggPSBzZXQtXHUwMDNlZGF0YTtcbiBcdGlwc2V0X2FkdGZuIGFkdGZuID0gc2V0LVx1MDAzZXZhcmlhbnQtXHUwMDNlYWR0W2FkdF07XG4gXHRzdHJ1Y3QgaGFzaF9uZXRwb3J0Nl9lbGVtIGUgPSB7XG4tXHRcdC5jaWRyID0gSU5JVF9DSURSKGgtXHUwMDNlbmV0c1swXS5jaWRyWzBdLCBIT1NUX01BU0spLFxuK1x0XHQuY2lkciA9IElOSVRfQ0lEUihoLVx1MDAzZXJuZXRzWzBdLCBIT1NUX01BU0spLFxuIFx0fTtcbiBcdHN0cnVjdCBpcF9zZXRfZXh0IGV4dCA9IElQX1NFVF9JTklUX0tFWFQoc2tiLCBvcHQsIHNldCk7XG4gXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRwb3J0bmV0LmMgYi9uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldHBvcnRuZXQuY1xuaW5kZXggYmY0ZjkxYjc4ZTFkY2IuLjYyOTE1MzJiZTdhNWEyIDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRwb3J0bmV0LmNcbisrKyBiL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0cG9ydG5ldC5jXG5AQCAtMTU3LDggKzE1NywxMCBAQCBoYXNoX25ldHBvcnRuZXQ0X2thZHQoc3RydWN0IGlwX3NldCAqc2V0LCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0c3RydWN0IGhhc2hfbmV0cG9ydG5ldDRfZWxlbSBlID0geyB9O1xuIFx0c3RydWN0IGlwX3NldF9leHQgZXh0ID0gSVBfU0VUX0lOSVRfS0VYVChza2IsIG9wdCwgc2V0KTtcbiBcbi1cdGUuY2lkclswXSA9IElOSVRfQ0lEUihoLVx1MDAzZW5ldHNbMF0uY2lkclswXSwgSE9TVF9NQVNLKTtcbi1cdGUuY2lkclsxXSA9IElOSVRfQ0lEUihoLVx1MDAzZW5ldHNbMF0uY2lkclsxXSwgSE9TVF9NQVNLKTtcbitcdHJjdV9yZWFkX2xvY2tfYmgoKTtcbitcdGUuY2lkclswXSA9IElOSVRfQ0lEUihoLVx1MDAzZXJuZXRzWzBdLCBIT1NUX01BU0spO1xuK1x0ZS5jaWRyWzFdID0gSU5JVF9DSURSKGgtXHUwMDNlcm5ldHNbMV0sIEhPU1RfTUFTSyk7XG4rXHRyY3VfcmVhZF91bmxvY2tfYmgoKTtcbiBcdGlmIChhZHQgPT0gSVBTRVRfVEVTVClcbiBcdFx0ZS5jY21wID0gKEhPU1RfTUFTSyBcdTAwM2NcdTAwM2MgKHNpemVvZihlLmNpZHJbMF0pICogOCkpIHwgSE9TVF9NQVNLO1xuIFxuQEAgLTQ1Miw4ICs0NTQsMTAgQEAgaGFzaF9uZXRwb3J0bmV0Nl9rYWR0KHN0cnVjdCBpcF9zZXQgKnNldCwgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdHN0cnVjdCBoYXNoX25ldHBvcnRuZXQ2X2VsZW0gZSA9IHsgfTtcbiBcdHN0cnVjdCBpcF9zZXRfZXh0IGV4dCA9IElQX1NFVF9JTklUX0tFWFQoc2tiLCBvcHQsIHNldCk7XG4gXG4tXHRlLmNpZHJbMF0gPSBJTklUX0NJRFIoaC1cdTAwM2VuZXRzWzBdLmNpZHJbMF0sIEhPU1RfTUFTSyk7XG4tXHRlLmNpZHJbMV0gPSBJTklUX0NJRFIoaC1cdTAwM2VuZXRzWzBdLmNpZHJbMV0sIEhPU1RfTUFTSyk7XG4rXHRyY3VfcmVhZF9sb2NrX2JoKCk7XG4rXHRlLmNpZHJbMF0gPSBJTklUX0NJRFIoaC1cdTAwM2VybmV0c1swXSwgSE9TVF9NQVNLKTtcbitcdGUuY2lkclsxXSA9IElOSVRfQ0lEUihoLVx1MDAzZXJuZXRzWzFdLCBIT1NUX01BU0spO1xuK1x0cmN1X3JlYWRfdW5sb2NrX2JoKCk7XG4gXHRpZiAoYWR0ID09IElQU0VUX1RFU1QpXG4gXHRcdGUuY2NtcCA9IChIT1NUX01BU0sgXHUwMDNjXHUwMDNjIChzaXplb2YodTgpICogOCkpIHwgSE9TVF9NQVNLO1xuIFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMTc6MDE6MTYuMjM4MTEzMTY2WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTY0ODc1NzY2MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBc3Nlc3NpbmcgdGhlIEltcGFjdCBvZiB0aGUgSVBzZXQgUGF0Y2gqKlxuXG5BbHJpZ2h0LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgYXNzZXNzbWVudCBpcyB0aGF0IHRoaXMgcGF0Y2ggKmRlZmluaXRlbHkqIHdhcnJhbnRzIGEgZnV6emluZyByZXZpZXcuIFdlJ3JlIHRhbGtpbmcgYWJvdXQgbW9kaWZpY2F0aW9ucyB0byBgbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaGAgYW5kIHRoZSBzdXJyb3VuZGluZyBgaXBzZXRgIGNvZGUgd2l0aGluIG5ldGZpbHRlciwgYW5kIHRoYXQncyBhIGtleSBhcmVhIHRvIHNjcnV0aW5pemUuIFNwZWNpZmljYWxseSwgdGhpcyBwYXRjaCBzZWVtcyB0byBiZSBmdW5kYW1lbnRhbGx5IGFsdGVyaW5nIGhvdyBDSURSIG5ldHdvcmtzIGFyZSBoYW5kbGVkIHdpdGhpbiB0aGUgaGFzaCB0eXBlcy4gVGhlIHNoaWZ0IGZyb20gYSBzdGF0aWNhbGx5IGFsbG9jYXRlZCBhcnJheSwgYG5ldHNbTkxFTl1gLCB0byBhIGR5bmFtaWNhbGx5IGFsbG9jYXRlZCwgUkNVLXByb3RlY3RlZCBhcnJheSwgYHJuZXRzW0lQU0VUX05FVF9DT1VOVF1gLCAqdGhhdCogc2NyZWFtcyBmdW5jdGlvbmFsIGNoYW5nZSB0byBtZS4gQW5kIHRoZW4gdGhlcmUncyB0aGUgYWRkaXRpb24gb2YgdGhlIGByZXNpemluZ2AgZmxhZyBhbmQgdGhlIGxvY2sgc3Vycm91bmRpbmcgdGhlIHJlc2l6aW5nIGxvZ2ljIHRvIHByZXZlbnQgR0MsIHdoaWNoIGluZGljYXRlcyBzaWduaWZpY2FudCBhcmNoaXRlY3R1cmFsIGNoYW5nZXMuIEl0J3MgYWZmZWN0aW5nIHRoZSBjb3JlIGxvZ2ljIG9mIGBpcHNldGAgaGFzaCB0eXBlcywgYW5kIHRoYXTigJlzIHByZWNpc2VseSB0aGUga2luZCBvZiB0aGluZyB0aGF0IG5lZWRzIGEgdGhvcm91Z2ggZnV6emluZyBjYW1wYWlnbi5cblxuTm93LCBsZXQncyBmaWd1cmUgb3V0IHRoZSBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcy4gT2YgY291cnNlLCBgQ09ORklHX0lQX1NFVGAgaXMgdGhlIG9idmlvdXMgc3RhcnRpbmcgcG9pbnQuIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhpcyBpcyBlbmFibGVkLiBUaGVuIHdlIGhhdmUgdG8gY29uc2lkZXIgdGhlIHNwZWNpZmljIGhhc2ggdHlwZXMgdGhpcyBwYXRjaCBpbXBhY3RzLiBXZSdyZSBsb29raW5nIGF0IGBDT05GSUdfSVBfU0VUX0hBU0hfSVBQT1JUTkVUYCwgYENPTkZJR19JUF9TRVRfSEFTSF9ORVRgLCBgQ09ORklHX0lQX1NFVF9IQVNIX05FVElGQUNFYCwgYENPTkZJR19JUF9TRVRfSEFTSF9ORVRORVRgLCBgQ09ORklHX0lQX1NFVF9IQVNIX05FVFBPUlRgLCBhbmQgYENPTkZJR19JUF9TRVRfSEFTSF9ORVRQT1JUTkVUYC4gSSBuZWVkIHRvIHZlcmlmeSB0aGVzZSBjb25maWd1cmF0aW9ucyBhcmUgZW5hYmxlZCBvciBhdCBsZWFzdCBjb25zaWRlciB0aGUgc2NlbmFyaW9zIHRoYXQgd291bGQgcmVzdWx0IGlmIHRoZXkgYXJlIG5vdC4gVGhhdCB3aWxsIGd1aWRlIHRoZSBjb25maWd1cmF0aW9uIG9mIHRoZSBmdXp6aW5nIGVudmlyb25tZW50LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzYwMywiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI1NywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDE3OjAxOjIxLjg4Njg3Mjk3N1oiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNTEyNzgwNzEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIElQX1NFVF9IQVNIX1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnPTQ2PWNvbmZpZyBJUF9TRVRfQklUTUFQX1BPUlRcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy01NC1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWc6NTU6Y29uZmlnIElQX1NFVF9IQVNIX0lQXFxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnLTU2LVxcdHRyaXN0YXRlIFxcXCJoYXNoOmlwIHNldCBzdXBwb3J0XFxcIlxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnLTY0LVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZzo2NTpjb25maWcgSVBfU0VUX0hBU0hfSVBNQVJLXFxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnLTY2LVxcdHRyaXN0YXRlIFxcXCJoYXNoOmlwLG1hcmsgc2V0IHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctNzMtXFxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnOjc0OmNvbmZpZyBJUF9TRVRfSEFTSF9JUFBPUlRcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctNzUtXFx0dHJpc3RhdGUgXFxcImhhc2g6aXAscG9ydCBzZXQgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy04Mi1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWc6ODM6Y29uZmlnIElQX1NFVF9IQVNIX0lQUE9SVElQXFxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnLTg0LVxcdHRyaXN0YXRlIFxcXCJoYXNoOmlwLHBvcnQsaXAgc2V0IHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctOTItXFxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnOjkzOmNvbmZpZyBJUF9TRVRfSEFTSF9JUFBPUlRORVRcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctOTQtXFx0dHJpc3RhdGUgXFxcImhhc2g6aXAscG9ydCxuZXQgc2V0IHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctMTAyLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZzoxMDM6Y29uZmlnIElQX1NFVF9IQVNIX0lQTUFDXFxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnLTEwNC1cXHR0cmlzdGF0ZSBcXFwiaGFzaDppcCxtYWMgc2V0IHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctMTExLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZzoxMTI6Y29uZmlnIElQX1NFVF9IQVNIX01BQ1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy0xMTMtXFx0dHJpc3RhdGUgXFxcImhhc2g6bWFjIHNldCBzdXBwb3J0XFxcIlxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnLTEyMC1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWc6MTIxOmNvbmZpZyBJUF9TRVRfSEFTSF9ORVRQT1JUTkVUXFxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnLTEyMi1cXHR0cmlzdGF0ZSBcXFwiaGFzaDpuZXQscG9ydCxuZXQgc2V0IHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctMTI5LVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZzoxMzA6Y29uZmlnIElQX1NFVF9IQVNIX05FVFxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy0xMzEtXFx0dHJpc3RhdGUgXFxcImhhc2g6bmV0IHNldCBzdXBwb3J0XFxcIlxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnLTEzOC1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWc6MTM5OmNvbmZpZyBJUF9TRVRfSEFTSF9ORVRORVRcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctMTQwLVxcdHRyaXN0YXRlIFxcXCJoYXNoOm5ldCxuZXQgc2V0IHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctMTQ3LVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZzoxNDg6Y29uZmlnIElQX1NFVF9IQVNIX05FVFBPUlRcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctMTQ5LVxcdHRyaXN0YXRlIFxcXCJoYXNoOm5ldCxwb3J0IHNldCBzdXBwb3J0XFxcIlxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnLTE1Ny1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWc6MTU4OmNvbmZpZyBJUF9TRVRfSEFTSF9ORVRJRkFDRVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy0xNTktXFx0dHJpc3RhdGUgXFxcImhhc2g6bmV0LGlmYWNlIHNldCBzdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMlQxNzowMToyMi4xMzgxNTc4NzhaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NTE5MDA3MzEzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgSVAgU2V0IEhhc2ggRnVuY3Rpb25zKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhlc2UgY29uZmlndXJhdGlvbnM6IGBJUF9TRVRfSEFTSF9JUFBPUlRORVRgLCBgSVBfU0VUX0hBU0hfTkVUYCwgYElQX1NFVF9IQVNIX05FVElGQUNFYCwgYElQX1NFVF9IQVNIX05FVE5FVGAsIGBJUF9TRVRfSEFTSF9ORVRQT1JUYCwgYW5kIGBJUF9TRVRfSEFTSF9ORVRQT1JUTkVUYC4gUmlnaHQgYXdheSwgSSB3YW50IHRvIGRyaWxsIGRvd24gaW50byB0aGUgY29yZSBsb2dpYy4gVGltZSB0byBmaWd1cmUgb3V0IHdoaWNoIGZ1bmN0aW9ucyBhcmUgZ2V0dGluZyB0aGUgbW9zdCBhdHRlbnRpb24gaW4gdGhpcyBwYXRjaC4gQmFzZWQgb24gdGhlIGNoYW5nZXMsIGl0IGxvb2tzIGxpa2UgYG10eXBlX2FkZF9jaWRyYCwgYG10eXBlX2RlbF9jaWRyYCwgYG10eXBlX2ZsdXNoYCwgYG10eXBlX2FoYXNoX2Rlc3Ryb3lgLCBgbXR5cGVfZGVzdHJveWAsIGBtdHlwZV9nY19kb2AsIGBtdHlwZV9nY2AsIGBtdHlwZV9yZXNpemVgLCBgbXR5cGVfYWRkYCwgYG10eXBlX2RlbGAsIGBtdHlwZV90ZXN0X2NpZHJzYCwgYG10eXBlX3VyZWZgLCBhbmQgYElQU0VUX1RPS0VOKEhUWVBFLCBfY3JlYXRlKWAgYXJlIHRoZSBvbmVzIHRvIGZvY3VzIG9uLiBUaGVzZSBhcmUgbWFjcm9zLCBhbmQgSSBrbm93IGZyb20gZXhwZXJpZW5jZSB0aGF0IG1lYW5zIHRoZXkncmUgbGlrZWx5IGRlZmluZWQgaW4gYGlwX3NldF9oYXNoX2dlbi5oYC4gTm93IEknbSBpbnRlcmVzdGVkIHRvIHNlZSBob3cgdGhlc2UgYXJlIGluc3RhbnRpYXRlZCBhbmQgdXNlZCBpbiByZWxhdGlvbiB0byB0aGUgY29uZmlndXJhdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1MTIyLCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDE3OjAxOjI2LjY1NzE2ODA5MVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NzE0MDIyNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtdHlwZV9hZGRfY2lkclwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL2lwc2V0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oPTE2Mz1zdGF0aWMgY29uc3QgdW5pb24gbmZfaW5ldF9hZGRyIHplcm9tYXNrID0ge307XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTE5NC0jdW5kZWYgbXR5cGVfZXh0X2NsZWFudXBcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oOjE5NTojdW5kZWYgbXR5cGVfYWRkX2NpZHJcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTE5Ni0jdW5kZWYgbXR5cGVfZGVsX2NpZHJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtMjM5LSNkZWZpbmUgbXR5cGVfZXh0X2NsZWFudXBcXHRJUFNFVF9UT0tFTihNVFlQRSwgX2V4dF9jbGVhbnVwKVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg6MjQwOiNkZWZpbmUgbXR5cGVfYWRkX2NpZHJcXHRcXHRJUFNFVF9UT0tFTihNVFlQRSwgX2FkZF9jaWRyKVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtMjQxLSNkZWZpbmUgbXR5cGVfZGVsX2NpZHJcXHRcXHRJUFNFVF9UT0tFTihNVFlQRSwgX2RlbF9jaWRyKVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaD0zMTc9c3RhdGljIGludFxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg6MzE4Om10eXBlX2FkZF9jaWRyKHN0cnVjdCBpcF9zZXQgKnNldCwgc3RydWN0IGh0eXBlICpoLCB1OCBjaWRyLCB1OCBuKVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtMzE5LXtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg9OTE0PW10eXBlX2FkZChzdHJ1Y3QgaXBfc2V0ICpzZXQsIHZvaWQgKnZhbHVlLCBjb25zdCBzdHJ1Y3QgaXBfc2V0X2V4dCAqZXh0LFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC0xMDQzLVxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBJUFNFVF9ORVRfQ09VTlQ7IGkrKylcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oOjEwNDQ6XFx0XFx0bXR5cGVfYWRkX2NpZHIoc2V0LCBoLCBEQ0lEUl9HRVQoZC1cXHUwMDNlY2lkciwgaSksIGkpO1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtMTA0NS0jZW5kaWZcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMTc6MDE6MjYuNzI0MzEzNDI4WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDU4Mzc3Nzk4MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGFuYWx5c2lzIG9mIHRoZSBwcm92aWRlZCBzbmlwcGV0LCBhcyBpZiBpdCB3ZXJlIG15IHRob3VnaHQgcHJvY2VzczpcblxuKipNYWNybyBFeHBhbnNpb24gYW5kIFR5cGUgSWRlbnRpZmljYXRpb24qKlxuXG5Pa2F5LCBzbyB3ZSdyZSBsb29raW5nIGF0IGNvZGUgZ2VuZXJhdGlvbiB2aWEgbWFjcm9zLiBTcGVjaWZpY2FsbHksIHdlJ3ZlIGdvdCB0aGlzIGBJUFNFVF9UT0tFTihNVFlQRSwgX2FkZF9jaWRyKWAgY2FsbC4gVGhhdCBpbW1lZGlhdGVseSB0ZWxscyBtZSB3ZSdyZSBsaWtlbHkgZGVhbGluZyB3aXRoIHNvbWUga2luZCBvZiBJUCBzZXQgbWFuaXB1bGF0aW9uLCBnaXZlbiB0aGUgXCJfYWRkX2NpZHJcIiBzdWZmaXgsIGJ1dCB0aGUgcmVhbCBrZXkgaXMgdGhlIGBNVFlQRWAgcGFyYW1ldGVyLiBUaGlzIGlzIHRoZSBjcnVjaWFsIGJpdC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBgTVRZUEVgIHJlcHJlc2VudHMuIEl0J3MgdGhlIHR5cGUgc3BlY2lmaWVyIHRoYXQgZGljdGF0ZXMgdGhlIGJlaGF2aW9yIG9mIHRoZSBtYWNybyBhbmQgd2hhdCBraW5kIG9mIElQIHNldCBvcGVyYXRpb24gb3IgZGF0YSBzdHJ1Y3R1cmUgaXQgaXMgd29ya2luZyB3aXRoLiBXaXRob3V0IGtub3dpbmcgd2hhdCBgTVRZUEVgIGV4cGFuZHMgdG8sIEkgY2FuJ3QgZGV0ZXJtaW5lIHRoZSBleGFjdCBtZWFuaW5nIG9yIHB1cnBvc2Ugb2YgdGhlIGdlbmVyYXRlZCBmdW5jdGlvbi4gVGhpcyBjb3VsZCBiZSBzb21ldGhpbmcgbGlrZSBcImlwdjRcIiwgXCJoYXNoXCIsIFwiYml0bWFwXCIsIG9yIGV2ZW4gYSBjdXN0b20gdHlwZS4gTGV0J3MgZGlnIGRlZXBlciB0byBzZWUgaG93IGBNVFlQRWAgaXMgZGVmaW5lZC4gVGhpcyBtYWNybyBpcyB0aGUgZ2F0ZXdheSB0byB1bmRlcnN0YW5kaW5nIHRoZSBmdWxsIGNvbnRleHQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2MTU5LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMTc6MDE6MzEuMzA4MDk0MTE4WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0NzU2MTM4NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCIjZGVmaW5lIE1UWVBFXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvaXBzZXQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9pcC5jPTMzPU1PRFVMRV9BTElBUyhcXFwiaXBfc2V0X2JpdG1hcDppcFxcXCIpO1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9pcC5jLTM0LVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9pcC5jOjM1OiNkZWZpbmUgTVRZUEVcXHRcXHRiaXRtYXBfaXBcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfaXAuYy0zNi0jZGVmaW5lIEhPU1RfTUFTS1xcdDMyXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfaXBtYWMuYz0zMz1NT0RVTEVfQUxJQVMoXFxcImlwX3NldF9iaXRtYXA6aXAsbWFjXFxcIik7XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX2lwbWFjLmMtMzQtXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX2lwbWFjLmM6MzU6I2RlZmluZSBNVFlQRVxcdFxcdGJpdG1hcF9pcG1hY1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9pcG1hYy5jLTM2LSNkZWZpbmUgSE9TVF9NQVNLXFx0MzJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9wb3J0LmM9Mjc9TU9EVUxFX0FMSUFTKFxcXCJpcF9zZXRfYml0bWFwOnBvcnRcXFwiKTtcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfcG9ydC5jLTI4LVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9wb3J0LmM6Mjk6I2RlZmluZSBNVFlQRVxcdFxcdGJpdG1hcF9wb3J0XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX3BvcnQuYy0zMC1cXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXAuYz03MD1oYXNoX2lwNF9kYXRhX25leHQoc3RydWN0IGhhc2hfaXA0X2VsZW0gKm5leHQsIGNvbnN0IHN0cnVjdCBoYXNoX2lwNF9lbGVtICplKVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcC5jLTc0LVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXAuYzo3NTojZGVmaW5lIE1UWVBFXFx0XFx0aGFzaF9pcDRcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwLmMtNzYtI2RlZmluZSBIT1NUX01BU0tcXHQzMlxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcC5jPTIwMj1oYXNoX2lwNl9kYXRhX25leHQoc3RydWN0IGhhc2hfaXA2X2VsZW0gKm5leHQsIGNvbnN0IHN0cnVjdCBoYXNoX2lwNl9lbGVtICplKVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcC5jLTIwOC1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwLmM6MjA5OiNkZWZpbmUgTVRZUEVcXHRcXHRoYXNoX2lwNlxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXAuYy0yMTAtI2RlZmluZSBIT1NUX01BU0tcXHQxMjhcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBtYWMuYz03Mj1oYXNoX2lwbWFjNF9kYXRhX25leHQoc3RydWN0IGhhc2hfaXBtYWM0X2VsZW0gKm5leHQsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwbWFjLmMtNzctXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcG1hYy5jOjc4OiNkZWZpbmUgTVRZUEVcXHRcXHRoYXNoX2lwbWFjNFxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBtYWMuYy03OS0jZGVmaW5lIFBGXFx0XFx0NFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcG1hYy5jPTE4MD1oYXNoX2lwbWFjNl9kYXRhX25leHQoc3RydWN0IGhhc2hfaXBtYWM2X2VsZW0gKm5leHQsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwbWFjLmMtMTg5LVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBtYWMuYzoxOTA6I2RlZmluZSBNVFlQRVxcdFxcdGhhc2hfaXBtYWM2XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcG1hYy5jLTE5MS0jZGVmaW5lIFBGXFx0XFx0Nlxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcG1hcmsuYz02OT1oYXNoX2lwbWFyazRfZGF0YV9uZXh0KHN0cnVjdCBoYXNoX2lwbWFyazRfZWxlbSAqbmV4dCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBtYXJrLmMtNzQtXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcG1hcmsuYzo3NTojZGVmaW5lIE1UWVBFXFx0XFx0aGFzaF9pcG1hcms0XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcG1hcmsuYy03Ni0jZGVmaW5lIEhPU1RfTUFTS1xcdDMyXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwbWFyay5jPTIwNT1oYXNoX2lwbWFyazZfZGF0YV9uZXh0KHN0cnVjdCBoYXNoX2lwbWFyazZfZWxlbSAqbmV4dCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBtYXJrLmMtMjEyLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBtYXJrLmM6MjEzOiNkZWZpbmUgTVRZUEVcXHRcXHRoYXNoX2lwbWFyazZcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwbWFyay5jLTIxNC0jZGVmaW5lIEhPU1RfTUFTS1xcdDEyOFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcHBvcnQuYz03OT1oYXNoX2lwcG9ydDRfZGF0YV9uZXh0KHN0cnVjdCBoYXNoX2lwcG9ydDRfZWxlbSAqbmV4dCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0LmMtODUtXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcHBvcnQuYzo4NjojZGVmaW5lIE1UWVBFXFx0XFx0aGFzaF9pcHBvcnQ0XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcHBvcnQuYy04Ny0jZGVmaW5lIEhPU1RfTUFTS1xcdDMyXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwcG9ydC5jPTI0OT1oYXNoX2lwcG9ydDZfZGF0YV9uZXh0KHN0cnVjdCBoYXNoX2lwcG9ydDZfZWxlbSAqbmV4dCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0LmMtMjU3LVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0LmM6MjU4OiNkZWZpbmUgTVRZUEVcXHRcXHRoYXNoX2lwcG9ydDZcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwcG9ydC5jLTI1OS0jZGVmaW5lIEhPU1RfTUFTS1xcdDEyOFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcHBvcnRpcC5jPTc3PWhhc2hfaXBwb3J0aXA0X2RhdGFfbmV4dChzdHJ1Y3QgaGFzaF9pcHBvcnRpcDRfZWxlbSAqbmV4dCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0aXAuYy04NC0vKiBDb21tb24gZnVuY3Rpb25zICovXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcHBvcnRpcC5jOjg1OiNkZWZpbmUgTVRZUEVcXHRcXHRoYXNoX2lwcG9ydGlwNFxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0aXAuYy04Ni0jZGVmaW5lIEhPU1RfTUFTS1xcdDMyXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwcG9ydGlwLmM9MjQ4PWhhc2hfaXBwb3J0aXA2X2RhdGFfbmV4dChzdHJ1Y3QgaGFzaF9pcHBvcnRpcDZfZWxlbSAqbmV4dCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0aXAuYy0yNTYtXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcHBvcnRpcC5jOjI1NzojZGVmaW5lIE1UWVBFXFx0XFx0aGFzaF9pcHBvcnRpcDZcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwcG9ydGlwLmMtMjU4LSNkZWZpbmUgSE9TVF9NQVNLXFx0MTI4XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwcG9ydG5ldC5jPTEyMT1oYXNoX2lwcG9ydG5ldDRfZGF0YV9uZXh0KHN0cnVjdCBoYXNoX2lwcG9ydG5ldDRfZWxlbSAqbmV4dCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0bmV0LmMtMTI4LVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0bmV0LmM6MTI5OiNkZWZpbmUgTVRZUEVcXHRcXHRoYXNoX2lwcG9ydG5ldDRcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwcG9ydG5ldC5jLTEzMC0jZGVmaW5lIEhPU1RfTUFTS1xcdDMyXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwcG9ydG5ldC5jPTM3OT1oYXNoX2lwcG9ydG5ldDZfZGF0YV9uZXh0KHN0cnVjdCBoYXNoX2lwcG9ydG5ldDZfZWxlbSAqbmV4dCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0bmV0LmMtMzg3LVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0bmV0LmM6Mzg4OiNkZWZpbmUgTVRZUEVcXHRcXHRoYXNoX2lwcG9ydG5ldDZcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwcG9ydG5ldC5jLTM4OS0jZGVmaW5lIEhPU1RfTUFTS1xcdDEyOFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9tYWMuYz02MT1oYXNoX21hYzRfZGF0YV9uZXh0KHN0cnVjdCBoYXNoX21hYzRfZWxlbSAqbmV4dCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbWFjLmMtNjUtXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9tYWMuYzo2NjojZGVmaW5lIE1UWVBFXFx0XFx0aGFzaF9tYWM0XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9tYWMuYy02Ny0jZGVmaW5lIEhPU1RfTUFTS1xcdDMyXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldC5jPTEwMj1oYXNoX25ldDRfZGF0YV9uZXh0KHN0cnVjdCBoYXNoX25ldDRfZWxlbSAqbmV4dCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0LmMtMTA3LVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0LmM6MTA4OiNkZWZpbmUgTVRZUEVcXHRcXHRoYXNoX25ldDRcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldC5jLTEwOS0jZGVmaW5lIEhPU1RfTUFTS1xcdDMyXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldC5jPTI3Mz1oYXNoX25ldDZfZGF0YV9uZXh0KHN0cnVjdCBoYXNoX25ldDZfZWxlbSAqbmV4dCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0LmMtMjgwLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0LmM6MjgxOiNkZWZpbmUgTVRZUEVcXHRcXHRoYXNoX25ldDZcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldC5jLTI4Mi0jZGVmaW5lIEhPU1RfTUFTS1xcdDEyOFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRpZmFjZS5jPTEyOT1oYXNoX25ldGlmYWNlNF9kYXRhX25leHQoc3RydWN0IGhhc2hfbmV0aWZhY2U0X2VsZW0gKm5leHQsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldGlmYWNlLmMtMTM0LVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0aWZhY2UuYzoxMzU6I2RlZmluZSBNVFlQRVxcdFxcdGhhc2hfbmV0aWZhY2U0XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRpZmFjZS5jLTEzNi0jZGVmaW5lIEhPU1RfTUFTS1xcdDMyXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldGlmYWNlLmM9MzYzPWhhc2hfbmV0aWZhY2U2X2RhdGFfbmV4dChzdHJ1Y3QgaGFzaF9uZXRpZmFjZTZfZWxlbSAqbmV4dCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0aWZhY2UuYy0zNzAtXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRpZmFjZS5jOjM3MTojZGVmaW5lIE1UWVBFXFx0XFx0aGFzaF9uZXRpZmFjZTZcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldGlmYWNlLmMtMzcyLSNkZWZpbmUgSE9TVF9NQVNLXFx0MTI4XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldG5ldC5jPTEyNT1oYXNoX25ldG5ldDRfZGF0YV9uZXh0KHN0cnVjdCBoYXNoX25ldG5ldDRfZWxlbSAqbmV4dCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0bmV0LmMtMTMwLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0bmV0LmM6MTMxOiNkZWZpbmUgTVRZUEVcXHRcXHRoYXNoX25ldG5ldDRcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldG5ldC5jLTEzMi0jZGVmaW5lIEhPU1RfTUFTS1xcdDMyXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldG5ldC5jPTM2Mz1oYXNoX25ldG5ldDZfZGF0YV9uZXh0KHN0cnVjdCBoYXNoX25ldG5ldDZfZWxlbSAqbmV4dCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0bmV0LmMtMzcwLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0bmV0LmM6MzcxOiNkZWZpbmUgTVRZUEVcXHRcXHRoYXNoX25ldG5ldDZcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldG5ldC5jLTM3Mi0jZGVmaW5lIEhPU1RfTUFTS1xcdDEyOFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRwb3J0LmM9MTE3PWhhc2hfbmV0cG9ydDRfZGF0YV9uZXh0KHN0cnVjdCBoYXNoX25ldHBvcnQ0X2VsZW0gKm5leHQsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldHBvcnQuYy0xMjMtXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRwb3J0LmM6MTI0OiNkZWZpbmUgTVRZUEVcXHRcXHRoYXNoX25ldHBvcnQ0XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRwb3J0LmMtMTI1LSNkZWZpbmUgSE9TVF9NQVNLXFx0MzJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0cG9ydC5jPTMzND1oYXNoX25ldHBvcnQ2X2RhdGFfbmV4dChzdHJ1Y3QgaGFzaF9uZXRwb3J0Nl9lbGVtICpuZXh0LFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRwb3J0LmMtMzQyLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0cG9ydC5jOjM0MzojZGVmaW5lIE1UWVBFXFx0XFx0aGFzaF9uZXRwb3J0Nlxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0cG9ydC5jLTM0NC0jZGVmaW5lIEhPU1RfTUFTS1xcdDEyOFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRwb3J0bmV0LmM9MTMyPWhhc2hfbmV0cG9ydG5ldDRfZGF0YV9uZXh0KHN0cnVjdCBoYXNoX25ldHBvcnRuZXQ0X2VsZW0gKm5leHQsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldHBvcnRuZXQuYy0xMzgtXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRwb3J0bmV0LmM6MTM5OiNkZWZpbmUgTVRZUEVcXHRcXHRoYXNoX25ldHBvcnRuZXQ0XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRwb3J0bmV0LmMtMTQwLSNkZWZpbmUgSE9TVF9NQVNLXFx0MzJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0cG9ydG5ldC5jPTQyNj1oYXNoX25ldHBvcnRuZXQ2X2RhdGFfbmV4dChzdHJ1Y3QgaGFzaF9uZXRwb3J0bmV0Nl9lbGVtICpuZXh0LFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRwb3J0bmV0LmMtNDM0LVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0cG9ydG5ldC5jOjQzNTojZGVmaW5lIE1UWVBFXFx0XFx0aGFzaF9uZXRwb3J0bmV0Nlxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0cG9ydG5ldC5jLTQzNi0jZGVmaW5lIEhPU1RfTUFTS1xcdDEyOFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMlQxNzowMTozMS40NTU2NjA2NTNaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NDMzNTUwNjM2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIGl0OlxuXG4qKkRlY29kaW5nIFRoaXMgSVBTRVQgSW1wbGVtZW50YXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGVzZSBJUFNFVCBmdW5jdGlvbiBuYW1lcyDigJMgYGhhc2hfbmV0NF9hZGRgLCBgaGFzaF9uZXQ0X2RlbGAsIGBoYXNoX25ldDRfdGVzdF9jaWRyc2AsIHRoYXQncyBzdGFuZGFyZC4gTWFrZXMgc2Vuc2UsIHRoZXkncmUgY2xlYXJseSBkZWFsaW5nIHdpdGggSVB2NCBoYXNoIHNldHMuIE5vdGhpbmcgc3VycHJpc2luZyB0aGVyZSwgYW5kIHBlcmZlY3RseSBsb2dpY2FsIG5hbWluZy4gTm93LCB3aGF0J3MgdGhpcyBgbXR5cGVfYWRkYCB0aGluZz8gVGhhdCBzZWVtcyBhIGJpdC4uLiBjcnlwdGljLiBJdCdzIGRlZmluZWQgYXMgYElQU0VUX1RPS0VOKE1UWVBFLCBfYWRkKWAuIEknbGwgaGF2ZSB0byBkZWx2ZSBkZWVwZXIgaW50byB0aGF0IGBJUFNFVF9UT0tFTmAgbWFjcm8gZGVmaW5pdGlvbiB0byB1bmRlcnN0YW5kIHdoYXQgdGhlIGRldmVsb3BlciB3YXMgZ29pbmcgZm9yIHdpdGggdGhhdCBwYXJ0aWN1bGFyIGNob2ljZSBvZiBuYW1lLiBMZXQncyBzZWUgaG93IHRoYXQgbWFjcm8gaXMgZXhwYW5kaW5nLiBJJ20gYXNzdW1pbmcgaXQncyBwYXJ0IG9mIGhvdyB0aGV5J3JlIGhhbmRsaW5nIGRpZmZlcmVudCBzZXQgdHlwZXMgd2l0aGluIHRoZSBJUFNFVCBmcmFtZXdvcmssIGJ1dCBgTVRZUEVgIGFuZCBgX2FkZGAgdG9nZXRoZXIgZmVlbHMgYSBsaXR0bGUgb2RkIGF0IGZpcnN0IGdsYW5jZSwgYnV0IEkga25vdyBiZXR0ZXIgdGhhbiB0byBqdW1wIHRvIGNvbmNsdXNpb25zIVxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTg3NCwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDE3OjAxOjM1Ljg4OTIxMzc5OVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTc4Mjg0MDIzLCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCIjZGVmaW5lIElQU0VUX1RPS0VOXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvaXBzZXQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMlQxNzowMTozNi4wNjc1MDc0ODJaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzk5NDk3ODI0MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRoaXMgbXlzZWxmOlxuXG4qKlRyYWNpbmcgdGhlIFNvdXJjZSBvZiBgSVBTRVRfVE9LRU5gKipcblxuT2theSwgc28gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hlcmUgYElQU0VUX1RPS0VOYCBpcyBkZWZpbmVkLiBUaGlzIGlzIGEgY29tbW9uIGRlYnVnZ2luZyBzdGVwLiBJJ20gZGVhbGluZyB3aXRoIGEgY29kZWJhc2UsIHByZXN1bWFibHksIGFuZCBgSVBTRVRfVE9LRU5gIGlzIHByb2JhYmx5IGEgY29uc3RhbnQsIHZhcmlhYmxlLCBvciBtYWNyby4gVGhlIGdvYWwgaXMgdG8gdW5kZXJzdGFuZCBpdHMgc2NvcGUgYW5kIGhvdyBpdCdzIHVzZWQgd2l0aGluIHRoZSBjb250ZXh0IG9mIHRoZSBwcm9ncmFtLiBJJ2xsIG5lZWQgdG8gcGlucG9pbnQgaXRzIGRlY2xhcmF0aW9uIHRvIGtub3cgaXRzIHR5cGUsIHZhbHVlIChpZiBpdCdzIGluaXRpYWxpemVkKSwgYW5kIHdoZXJlIGl04oCZcyBhY2Nlc3NpYmxlLiBUaGlzIGhlbHBzIG1lIHVuZGVyc3RhbmQgaXRzIHJvbGUgYW5kIGltcGFjdC4gV2hlcmUgY2FuIEkgc3RhcnQgbG9va2luZyBmb3IgdGhpcyBkZWNsYXJhdGlvbj8gVGltZSB0byBkaXZlIGluIVxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDIxMSwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDE3OjAxOjQwLjA2MjQ4Nzk4NFoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODMzMjUzMTYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiI2RlZmluZSBJUFNFVF9UT0tFTlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpbmNsdWRlL2xpbnV4L25ldGZpbHRlci9pcHNldC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0Lmg9NTIzPW5mX2luZXRfYWRkcl9tYXNrX2lucGxhY2UodW5pb24gbmZfaW5ldF9hZGRyICphMSxcXG4tLVxcbmluY2x1ZGUvbGludXgvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldC5oLTU0MC0jZGVmaW5lIElQU0VUX0NPTkNBVChhLCBiKVxcdFxcdGEjI2JcXG5pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9pcHNldC9pcF9zZXQuaDo1NDE6I2RlZmluZSBJUFNFVF9UT0tFTihhLCBiKVxcdFxcdElQU0VUX0NPTkNBVChhLCBiKVxcbmluY2x1ZGUvbGludXgvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldC5oLTU0Mi1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMTc6MDE6NDAuMTQ1ODE4NDMxWiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ5MzcxNzkxMjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIElQIFNldCBIYXNoaW5nIEZ1bmN0aW9ucyoqXG5cbk9rYXksIHNvIEknbSB0cmFjaW5nIGhvdyB0aGVzZSBJUCBzZXQgb3BlcmF0aW9ucyBhcmUgc3RydWN0dXJlZCwgYW5kIGl0IGxvb2tzIGxpa2UgdGhlIGBJUFNFVF9UT0tFTihNVFlQRSwgX2FkZClgIG1hY3JvIGdlbmVyYXRlcyBhIGZhbWlseSBvZiBmdW5jdGlvbnMsIGxpa2UgYGhhc2hfbmV0NF9hZGRgLCBgaGFzaF9uZXQ2X2FkZGAsIGFuZCBgaGFzaF9uZXRuZXQ0X2FkZGAgZGVwZW5kaW5nIG9uIHRoZSBhZGRyZXNzIGZhbWlseSBhbmQgdGhlIHNwZWNpZmljIG9wZXJhdGlvbi4gSSBzaG91bGQgc3RhcnQgYnkgbG9va2luZyBhdCB0aGVzZSwgYW5kIEknbSB0aGlua2luZyBvZiBmb2N1c2luZyBvbiBzcGVjaWZpYyBvbmVzIGxpa2UgYGhhc2hfbmV0NF9hZGRgLCBgaGFzaF9uZXQ2X2FkZGAsIGBoYXNoX25ldDRfZGVsYCwgYGhhc2hfbmV0Nl9kZWxgLCB0aG9zZSBhZGQvZGVsZXRlIGZ1bmN0aW9ucy4gVGhlcmUgYXJlIG90aGVyIGZ1bmN0aW9ucyB0aGF0IGNhbiBiZSBpbXBvcnRhbnQgdG9vLCBzdWNoIGFzIHRoZSBgdGVzdF9jaWRyc2AsIHRoZSBgcmVzaXplYCBhbmQgdGhlIGBnY2AgZnVuY3Rpb25zLCBhbmQgYSBzaW1pbGFyIGlkZWEgYXBwZWFycyB3aGVuIHRoaW5raW5nIGFib3V0IGBtdHlwZV9hZGRfY2lkcmAsIHdoaWNoIGFwcGVhcnMgYXMgYGhhc2hfbmV0NF9hZGRfY2lkcmAsIGBoYXNoX25ldDZfYWRkX2NpZHJgLlxuXG5CdXQsIHdhaXQgYSBzZWNvbmQsIGxldCdzIGxvb2sgY2xvc2VseSBhdCBgaGFzaF9uZXQ0X2FkZF9jaWRyYCwgaXMgaXQgZGVmaW5lZCBpbiB0aGUgY29tcGlsZWQgY29kZSBvciBpcyBpdCBkZWZpbmVkIGFzIGEgc3RhdGljIGZ1bmN0aW9uPyBJdCBhcHBlYXJzIHN0YXRpYywgd2hpY2ggbWVhbnMgaXQgbWlnaHQgYmUgaW5saW5lZC4gVGhpcyBjb3VsZCBtYWtlIGl0IGEgbGVzcyB1c2VmdWwgc3ltYm9sIHRvIGZvY3VzIG9uLiBIbW0sIGxldCdzIGFsc28gY2hlY2sgaWYgYGhhc2hfbmV0NF9hZGRgIGlzIHN0YXRpYy4gQWxyaWdodCwgSSdsbCBuZWVkIHRvIGNoZWNrIHRoZSBzb3VyY2UgZmlsZSwgc3BlY2lmaWNhbGx5IGBpcF9zZXRfaGFzaF9uZXQuY2AsIHRvIGJlIHN1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwNTU4LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjQ5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDE3OjAxOjQ1LjA4Mjk5OTg3OVoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTk5MjA5MzIyLCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJoYXNoX25ldDRfYWRkXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvaXBzZXQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMlQxNzowMTo0NS4yODIyMTgxMTFaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjcyNzE4MDM0OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIE1hY3JvLUdlbmVyYXRlZCBDb2RlKipcblxuT2theSwgc28gSSdtIHRyYWNraW5nIGRvd24gd2hlcmUgdGhpcyBgaGFzaF9uZXQ0X2FkZGAgZnVuY3Rpb24gY29tZXMgZnJvbS4gSXQncyBjbGVhcmx5IG1hY3JvLWdlbmVyYXRlZCwgd2hpY2ggbWVhbnMgSSBuZWVkIHRvIGRpZyBpbnRvIHRoZSBtYWNybyBkZWZpbml0aW9uIGl0c2VsZi4gSSBjYW4ndCBqdXN0IGBncmVwYCB0aGUgc291cmNlIGZvciBhIGRpcmVjdCBmdW5jdGlvbiBkZWZpbml0aW9uLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGljaCBtYWNybyBnZW5lcmF0ZXMgdGhpcyBmdW5jdGlvbi4gTXkgYmVzdCBiZXQgaXMgdG8gY2hlY2sgdGhlIHJlbGF0ZWQgaW5jbHVkZSBmaWxlLCBgaXBfc2V0X2hhc2hfZ2VuLmhgLCBzcGVjaWZpY2FsbHkgbG9va2luZyBmb3Igc29tZXRoaW5nIHJlbGF0ZWQgdG8gYG10eXBlX2FkZGAgc2luY2UgdGhhdCdzIGxpa2VseSBwYXJ0IG9mIHRoZSBtYWNybydzIG5hbWUgb3IgbG9naWMuIFRoYXQncyBteSBuZXh0IHN0ZXAgdG8gdW5kZXJzdGFuZCB0aGUgY3JlYXRpb24gcHJvY2VzcyBvZiBgaGFzaF9uZXQ0X2FkZGAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxMTc1LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMTc6MDE6NDguMDA5NDAwNTIxWiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MTU1MjM5OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtdHlwZV9hZGRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9pcHNldC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX2dlbi5oLTE3LSNkZWZpbmUgbXR5cGVfYWR0X2VsZW1cXHRcXHRJUFNFVF9UT0tFTihNVFlQRSwgX2FkdF9lbGVtKVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9nZW4uaDoxODojZGVmaW5lIG10eXBlX2FkZF90aW1lb3V0XFx0SVBTRVRfVE9LRU4oTVRZUEUsIF9hZGRfdGltZW91dClcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfZ2VuLmgtMTktI2RlZmluZSBtdHlwZV9nY19pbml0XFx0XFx0SVBTRVRfVE9LRU4oTVRZUEUsIF9nY19pbml0KVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX2dlbi5oLTI4LSNkZWZpbmUgbXR5cGVfdGVzdFxcdFxcdElQU0VUX1RPS0VOKE1UWVBFLCBfdGVzdClcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfZ2VuLmg6Mjk6I2RlZmluZSBtdHlwZV9hZGRcXHRcXHRJUFNFVF9UT0tFTihNVFlQRSwgX2FkZClcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfZ2VuLmgtMzAtI2RlZmluZSBtdHlwZV9kZWxcXHRcXHRJUFNFVF9UT0tFTihNVFlQRSwgX2RlbClcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9nZW4uaD0xMjk9c3RhdGljIGludFxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9nZW4uaDoxMzA6bXR5cGVfYWRkKHN0cnVjdCBpcF9zZXQgKnNldCwgdm9pZCAqdmFsdWUsIGNvbnN0IHN0cnVjdCBpcF9zZXRfZXh0ICpleHQsXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX2dlbi5oLTEzMS1cXHQgIHN0cnVjdCBpcF9zZXRfZXh0ICptZXh0LCB1MzIgZmxhZ3MpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfZ2VuLmgtMTU0LSNpZmRlZiBJUF9TRVRfQklUTUFQX1NUT1JFRF9USU1FT1VUXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX2dlbi5oOjE1NTpcXHRcXHRtdHlwZV9hZGRfdGltZW91dChleHRfdGltZW91dCh4LCBzZXQpLCBlLCBleHQsIHNldCwgbWFwLCByZXQpO1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9nZW4uaC0xNTYtI2Vsc2VcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9nZW4uaD0zMDI9c3RhdGljIGNvbnN0IHN0cnVjdCBpcF9zZXRfdHlwZV92YXJpYW50IG10eXBlID0ge1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX2dlbi5oLTMwNS1cXHQuYWR0XFx0PSB7XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX2dlbi5oOjMwNjpcXHRcXHRbSVBTRVRfQUREXSA9IG10eXBlX2FkZCxcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfZ2VuLmgtMzA3LVxcdFxcdFtJUFNFVF9ERUxdID0gbXR5cGVfZGVsLFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaD0xNjM9c3RhdGljIGNvbnN0IHVuaW9uIG5mX2luZXRfYWRkciB6ZXJvbWFzayA9IHt9O1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC0xOTQtI3VuZGVmIG10eXBlX2V4dF9jbGVhbnVwXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaDoxOTU6I3VuZGVmIG10eXBlX2FkZF9jaWRyXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC0xOTYtI3VuZGVmIG10eXBlX2RlbF9jaWRyXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTIwMy1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oOjIwNDojdW5kZWYgbXR5cGVfYWRkXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC0yMDUtI3VuZGVmIG10eXBlX2RlbFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC0yMzktI2RlZmluZSBtdHlwZV9leHRfY2xlYW51cFxcdElQU0VUX1RPS0VOKE1UWVBFLCBfZXh0X2NsZWFudXApXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaDoyNDA6I2RlZmluZSBtdHlwZV9hZGRfY2lkclxcdFxcdElQU0VUX1RPS0VOKE1UWVBFLCBfYWRkX2NpZHIpXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC0yNDEtI2RlZmluZSBtdHlwZV9kZWxfY2lkclxcdFxcdElQU0VUX1RPS0VOKE1UWVBFLCBfZGVsX2NpZHIpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTI0OC1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oOjI0OTojZGVmaW5lIG10eXBlX2FkZFxcdFxcdElQU0VUX1RPS0VOKE1UWVBFLCBfYWRkKVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtMjUwLSNkZWZpbmUgbXR5cGVfZGVsXFx0XFx0SVBTRVRfVE9LRU4oTVRZUEUsIF9kZWwpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oPTMxNz1zdGF0aWMgaW50XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaDozMTg6bXR5cGVfYWRkX2NpZHIoc3RydWN0IGlwX3NldCAqc2V0LCBzdHJ1Y3QgaHR5cGUgKmgsIHU4IGNpZHIsIHU4IG4pXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC0zMTkte1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaD02NjY9c3RhdGljIGludFxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg6NjY3Om10eXBlX2FkZChzdHJ1Y3QgaXBfc2V0ICpzZXQsIHZvaWQgKnZhbHVlLCBjb25zdCBzdHJ1Y3QgaXBfc2V0X2V4dCAqZXh0LFxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtNjY4LVxcdCAgc3RydWN0IGlwX3NldF9leHQgKm1leHQsIHUzMiBmbGFncyk7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oPTY3OD1tdHlwZV9yZXNpemUoc3RydWN0IGlwX3NldCAqc2V0LCBib29sIHJldHJpZWQpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTgzMC1cXHRcXHRpZiAoeC1cXHUwMDNlYWQgPT0gSVBTRVRfQUREKSB7XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaDo4MzE6XFx0XFx0XFx0bXR5cGVfYWRkKHNldCwgXFx1MDAyNngtXFx1MDAzZWQsIFxcdTAwMjZ4LVxcdTAwM2VleHQsIFxcdTAwMjZ4LVxcdTAwM2VtZXh0LCB4LVxcdTAwM2VmbGFncyk7XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC04MzItXFx0XFx0fSBlbHNlIHtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg9OTEzPXN0YXRpYyBpbnRcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oOjkxNDptdHlwZV9hZGQoc3RydWN0IGlwX3NldCAqc2V0LCB2b2lkICp2YWx1ZSwgY29uc3Qgc3RydWN0IGlwX3NldF9leHQgKmV4dCxcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTkxNS1cXHQgIHN0cnVjdCBpcF9zZXRfZXh0ICptZXh0LCB1MzIgZmxhZ3MpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTEwNDMtXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIElQU0VUX05FVF9DT1VOVDsgaSsrKVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg6MTA0NDpcXHRcXHRtdHlwZV9hZGRfY2lkcihzZXQsIGgsIERDSURSX0dFVChkLVxcdTAwM2VjaWRyLCBpKSwgaSk7XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC0xMDQ1LSNlbmRpZlxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaD0xNTMxPXN0YXRpYyBjb25zdCBzdHJ1Y3QgaXBfc2V0X3R5cGVfdmFyaWFudCBtdHlwZV92YXJpYW50ID0ge1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC0xNTM0LVxcdC5hZHRcXHQ9IHtcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oOjE1MzU6XFx0XFx0W0lQU0VUX0FERF0gPSBtdHlwZV9hZGQsXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC0xNTM2LVxcdFxcdFtJUFNFVF9ERUxdID0gbXR5cGVfZGVsLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMlQxNzowMTo0OC4wNzA5NTgxNjhaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzk3MDg2MTk2MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIElQU2V0IGBtdHlwZV9hZGRgIEFzc2lnbm1lbnQqKlxuXG5Pa2F5LCBzbyBJJ20gZGlnZ2luZyBpbnRvIHRoaXMgYG10eXBlX2FkZGAgYXNzaWdubWVudCwgYW5kIGl0IGxvb2tzIGxpa2UgaXQncyBwb2ludGluZyB0byBgbXR5cGVfdmFyaWFudC5hZHRbSVBTRVRfQUREXWAuIFRoYXQncyB0aGUgZW50cnkgcG9pbnQsIGJ1dCB0aGUgYWN0dWFsLCBtb3JlIGdyYW51bGFyIGZ1bmN0aW9uIHdpbGwgYmUgc29tZXRoaW5nIGxpa2UgYGhhc2hfbmV0NF9hZGRgLCBvciBgaGFzaF9uZXQ2X2FkZGAsIGRlcGVuZGluZyBvbiB0aGUgSVAgdmVyc2lvbi4gUmlnaHQsIG5vdyBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IGZ1bmN0aW9ucyBhcmUgYWN0dWFsbHkgYXZhaWxhYmxlIGFuZCwgY3J1Y2lhbGx5LCB3aGljaCBvbmVzIGFyZSBhY2Nlc3NpYmxlLlxuXG5MZXQncyBzZWUuLi4gbG9va2luZyBhdCBgaGFzaF9uZXQ0X2FkZGAsIEkgc2VlIGl0J3MgbWFya2VkIGBzdGF0aWNgLiBUaGF0J3MgdXN1YWxseSBhIHJlZCBmbGFnLiBIbW0sIGhvbGQgb24uLi4gdGhlIGNvZGUgZ2VuZXJhdGVkIGBoYXNoX25ldDRfY3JlYXRlYCwgc28gdGhhdCBnaXZlcyBtZSBhbiBvcGVuaW5nLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29ubmVjdGlvbiBiZXR3ZWVuIHRoYXQgZnVuY3Rpb24gYW5kIHRoZSBhZGQgZnVuY3Rpb24uXG5cbkknbGwgY2hlY2sgYGlwX3NldF9oYXNoX25ldC5jYCB0byBzZWUgd2hhdCBpcyBleHBvcnRlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjMxNjUsIk91dHB1dFRva2VucyI6NDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMTAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMTc6MDE6NTIuMDQxODIyMjcxWiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1OTE5NDYyOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJoYXNoX25ldDRfXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXQuYz0zMz1NT0RVTEVfQUxJQVMoXFxcImlwX3NldF9oYXNoOm5ldFxcXCIpO1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXQuYy00MS0vKiBNZW1iZXIgZWxlbWVudHMgICovXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXQuYzo0MjpzdHJ1Y3QgaGFzaF9uZXQ0X2VsZW0ge1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0LmMtNDMtXFx0X19iZTMyIGlwO1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXQuYz01MT1zdGF0aWMgYm9vbFxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0LmM6NTI6aGFzaF9uZXQ0X2RhdGFfZXF1YWwoY29uc3Qgc3RydWN0IGhhc2hfbmV0NF9lbGVtICppcDEsXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXQuYzo1MzpcXHRcXHQgICAgIGNvbnN0IHN0cnVjdCBoYXNoX25ldDRfZWxlbSAqaXAyLFxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0LmMtNTQtXFx0XFx0ICAgICB1MzIgKm11bHRpKVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXQuYz02MD1zdGF0aWMgaW50XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXQuYzo2MTpoYXNoX25ldDRfZG9fZGF0YV9tYXRjaChjb25zdCBzdHJ1Y3QgaGFzaF9uZXQ0X2VsZW0gKmVsZW0pXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXQuYy02Mi17XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldC5jPTY2PXN0YXRpYyB2b2lkXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXQuYzo2NzpoYXNoX25ldDRfZGF0YV9zZXRfZmxhZ3Moc3RydWN0IGhhc2hfbmV0NF9lbGVtICplbGVtLCB1MzIgZmxhZ3MpXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXQuYy02OC17XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldC5jPTcyPXN0YXRpYyB2b2lkXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXQuYzo3MzpoYXNoX25ldDRfZGF0YV9yZXNldF9mbGFncyhzdHJ1Y3QgaGFzaF9uZXQ0X2VsZW0gKmVsZW0sIHU4ICpmbGFncylcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldC5jLTc0LXtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0LmM9Nzg9c3RhdGljIHZvaWRcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldC5jOjc5Omhhc2hfbmV0NF9kYXRhX25ldG1hc2soc3RydWN0IGhhc2hfbmV0NF9lbGVtICplbGVtLCB1OCBjaWRyKVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0LmMtODAte1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXQuYz04NT1zdGF0aWMgYm9vbFxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0LmM6ODY6aGFzaF9uZXQ0X2RhdGFfbGlzdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgaGFzaF9uZXQ0X2VsZW0gKmRhdGEpXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXQuYy04Ny17XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldC5jPTEwMT1zdGF0aWMgdm9pZFxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0LmM6MTAyOmhhc2hfbmV0NF9kYXRhX25leHQoc3RydWN0IGhhc2hfbmV0NF9lbGVtICpuZXh0LFxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0LmM6MTAzOlxcdFxcdCAgICBjb25zdCBzdHJ1Y3QgaGFzaF9uZXQ0X2VsZW0gKmQpXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXQuYy0xMDQte1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXQuYz0xMTI9c3RhdGljIGludFxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0LmM6MTEzOmhhc2hfbmV0NF9rYWR0KHN0cnVjdCBpcF9zZXQgKnNldCwgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldC5jLTExNC1cXHQgICAgICAgY29uc3Qgc3RydWN0IHh0X2FjdGlvbl9wYXJhbSAqcGFyLFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXQuYy0xMTgtXFx0aXBzZXRfYWR0Zm4gYWR0Zm4gPSBzZXQtXFx1MDAzZXZhcmlhbnQtXFx1MDAzZWFkdFthZHRdO1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0LmM6MTE5OlxcdHN0cnVjdCBoYXNoX25ldDRfZWxlbSBlID0ge1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0LmMtMTIwLVxcdFxcdC5jaWRyID0gSU5JVF9DSURSKGgtXFx1MDAzZXJuZXRzWzBdLCBIT1NUX01BU0spLFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXQuYz0xMzU9c3RhdGljIGludFxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0LmM6MTM2Omhhc2hfbmV0NF91YWR0KHN0cnVjdCBpcF9zZXQgKnNldCwgc3RydWN0IG5sYXR0ciAqdGJbXSxcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldC5jLTEzNy1cXHQgICAgICAgZW51bSBpcHNldF9hZHQgYWR0LCB1MzIgKmxpbmVubywgdTMyIGZsYWdzLCBib29sIHJldHJpZWQpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldC5jLTE0MC1cXHRpcHNldF9hZHRmbiBhZHRmbiA9IHNldC1cXHUwMDNldmFyaWFudC1cXHUwMDNlYWR0W2FkdF07XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXQuYzoxNDE6XFx0c3RydWN0IGhhc2hfbmV0NF9lbGVtIGUgPSB7IC5jaWRyID0gSE9TVF9NQVNLIH07XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXQuYy0xNDItXFx0c3RydWN0IGlwX3NldF9leHQgZXh0ID0gSVBfU0VUX0lOSVRfVUVYVChzZXQpO1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXQuYy0xOTctXFx0XFx0aWYgKGkgXFx1MDAzZSBJUFNFVF9NQVhfUkFOR0UpIHtcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldC5jOjE5ODpcXHRcXHRcXHRoYXNoX25ldDRfZGF0YV9uZXh0KFxcdTAwMjZoLVxcdTAwM2VuZXh0LCBcXHUwMDI2ZSk7XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXQuYy0xOTktXFx0XFx0XFx0cmV0dXJuIC1FUkFOR0U7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDE3OjAxOjUyLjEwMTAyMjA2OVoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDAwMTkxNzU0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBBRFQgRW50cnkgUG9pbnRzKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhlc2UgYGhhc2hfbmV0NF9rYWR0YCBhbmQgYGhhc2hfbmV0NF91YWR0YCBmdW5jdGlvbnMuIFRoZXkncmUgc3RhdGljLCB3aGljaCBpcyBpbnRlcmVzdGluZy4gVGhhdCBtZWFucyB0aGV5J3JlIG5vdCBkaXJlY3RseSBhY2Nlc3NpYmxlIGZyb20gb3V0c2lkZSB0aGlzIHNwZWNpZmljIG1vZHVsZS4uLiBvciBhcmUgdGhleT8gV2FpdCwgYGhhc2hfbmV0NF91YWR0YCBpcyBkZWZpbml0ZWx5IHN0YXRpYy4gSXMgdGhlcmUgYW55IG90aGVyIGZ1bmN0aW9uIGV4cG9zZWQgdG8gb3V0c2lkZSBtb2R1bGVzPyBMZXQgbWUgY2hlY2sgYGlwX3NldF9oYXNoX25ldC5jYC4gSSBuZWVkIHRvIHNlZSBpZiB0aGVyZSBhcmUgYW55IGBFWFBPUlRfU1lNQk9MYCBtYWNyb3Mgb3Igb3RoZXIgbm9uLXN0YXRpYyBmdW5jdGlvbnMgaW4gdGhlIGZpbGUgdGhhdCBtaWdodCBiZSBpbXBvcnRhbnQgZm9yIHVuZGVyc3RhbmRpbmcgaG93IHRoaXMgQURUIGxvZ2ljIGlzIGV4cG9zZWQgdG8gdGhlIHJlc3Qgb2YgdGhlIGtlcm5lbCBvciB1c2VyIHNwYWNlLiBMZXQncyBkaWcgaW4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI0OTM4LCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMTc6MDE6NTUuNTAxMjE3MzIzWiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MjAzMTc2OCwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiRVhQT1JUX1NZTUJPTFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMlQxNzowMTo1NS41NjMyNjAyOTFaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzQxOTU0OTE1MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3Mgb24gd2hhdCBJJ2QgYmUgbG9va2luZyBmb3I6XG5cbioqQW5hbHl6aW5nIGBpcF9zZXRfaGFzaF9nZW4uaGAgZm9yIEV4cG9ydGVkIEZ1bmN0aW9ucyoqXG5cblJpZ2h0LCBzbyBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBleHRlcm5hbCBpbnRlcmZhY2Ugb2YgdGhpcyBgaXBfc2V0X2hhc2hfZ2VuLmhgIGhlYWRlciBmaWxlLiBNeSBwcmltYXJ5IGdvYWwgaGVyZSBpcyB0byBpZGVudGlmeSB3aGljaCBmdW5jdGlvbnMgYXJlICptZWFudCogdG8gYmUgdXNlZCBieSBvdGhlciBwYXJ0cyBvZiB0aGUgc3lzdGVtIOKAkyB0aGUgb25lcyB0aGF0IGFyZSBleHBvcnRlZCwgaW4gZXNzZW5jZS4gSSdsbCBiZSBzaWZ0aW5nIHRocm91Z2ggdGhlIGNvZGUsIGNhcmVmdWxseSBsb29raW5nIGZvciBhbnkgdGVsbHRhbGUgc2lnbnMuIEkgZXhwZWN0IHRvIHNlZSBmdW5jdGlvbiBkZWNsYXJhdGlvbnMgd2l0aCBwcmVmaXhlcyBvciBhdHRyaWJ1dGVzIHRoYXQgZGVub3RlIHRoZWlyIHZpc2liaWxpdHkgYW5kIGludGVuZGVkIHVzYWdlLiBUaGluZ3MgbGlrZSBgZXh0ZXJuYCBkZWNsYXJhdGlvbnMsIG1hY3JvcyB0aGF0IGV4cGFuZCB0byBwbGF0Zm9ybS1zcGVjaWZpYyBleHBvcnQgc3ltYm9scyAoZS5nLiwgYF9fZGVjbHNwZWMoZGxsZXhwb3J0KWAgb24gV2luZG93cyBvciB0aGUgZXF1aXZhbGVudCBmb3Igc2hhcmVkIG9iamVjdCBsaWJyYXJpZXMpLCBvciBwb3NzaWJseSBzb21lIG5hbWluZyBjb252ZW50aW9ucyB0aGF0IHN1Z2dlc3QgYSBwdWJsaWMgQVBJLiBJJ2xsIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIGZ1bmN0aW9uIHNpZ25hdHVyZXMgYXMgd2VsbCDigJMgdGhhdCdsbCBnaXZlIG1lIGEgc3Ryb25nIHVuZGVyc3RhbmRpbmcgb2Ygd2hhdCBkYXRhIHN0cnVjdHVyZXMgYW5kIHR5cGVzIHRoZXNlIGV4cG9ydGVkIGZ1bmN0aW9ucyBvcGVyYXRlIG9uIGFuZCBleHBlY3QgYXMgYXJndW1lbnRzLiBUaGlzIHNob3VsZCBnaXZlIG1lIGEgc29saWQgbWFwIG9mIGhvdyB0aGlzIG1vZHVsZSBpbnRlcmZhY2VzIHdpdGggZXZlcnl0aGluZyBlbHNlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNTI0NiwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDE3OjAxOjU4Ljk4MjgxMjM3NFoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTc1MDA0MzgsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkVYUE9SVF9TWU1CT0xcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMTc6MDE6NTkuMDQwMzIwNDYyWiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjgwNjY4NjYwNDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGBpcHNldGAgTW9kdWxlIEZ1bmN0aW9uIFJlZ2lzdHJhdGlvbiBmb3IgU3l6a2FsbGVyIFRhcmdldGluZyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGhvdyB0aGUgYGlwc2V0YCBtb2R1bGUgaGFuZGxlcyBpdHMgdmFyaW91cyBzZXQgdHlwZXMuIEkgc2VlIHRoYXQgYGlwX3NldF90eXBlX3JlZ2lzdGVyYCBpcyB0aGUgY29yZSBtZWNoYW5pc20sIGFuZCBpdCdzIHdoYXQgaG9va3MgZXZlcnl0aGluZyBpbi4gVGhlIGNydWNpYWwgcGFydCBmb3IgbWUgaXMgdGhlIGBzdHJ1Y3QgaXBfc2V0X3R5cGVfdmFyaWFudGAgc3RydWN0dXJlIOKAkyBpdCBjb250YWlucyB0aGUgZnVuY3Rpb24gcG9pbnRlcnMgdG8gdGhlIGFjdHVhbCBvcGVyYXRpb25zLlxuXG5TcGVjaWZpY2FsbHksIEknbSBub3RpbmcgdGhlIGZ1bmN0aW9uczogYGhhc2hfbmV0NF91YWR0YCwgYGhhc2hfbmV0NF9rYWR0YCwgYGhhc2hfbmV0Nl91YWR0YCwgYW5kIGBoYXNoX25ldDZfa2FkdGAuIFRoZXNlIGFyZSB0aGUgb25lcyB0aGF0IHByZXN1bWFibHkgcGVyZm9ybSB0aGUgdW5kZXJseWluZyBvcGVyYXRpb25zLiBUaGVuLCBvZiBjb3Vyc2UsIHRoZSBnZW5lcmF0ZWQgZnVuY3Rpb25zIGxpa2UgYGhhc2hfbmV0NF9hZGRgLCBgaGFzaF9uZXQ0X2RlbGAsIGBoYXNoX25ldDRfdGVzdGAsIGBoYXNoX25ldDRfcmVzaXplYCwgYW5kIGBoYXNoX25ldDRfZ2NgLlxuXG5UaGUgY2hhbGxlbmdlLCBhcyBhbHdheXMgd2l0aCBTeXprYWxsZXIsIGlzIHdoZXRoZXIgaXQgY2FuIHJlbGlhYmx5IHRhcmdldCB0aGVzZSBmdW5jdGlvbnMuIFNpbmNlIHRoZXkncmUgZGVjbGFyZWQgYXMgYHN0YXRpY2AsIEkgd2FzIGluaXRpYWxseSBjb25jZXJuZWQuIE15IGV4cGVyaWVuY2Ugc3VnZ2VzdHMgdGhhdCBpZiB0aGV54oCZcmUgaW4gdGhlIHN5bWJvbCB0YWJsZSAoYW5kIHVzdWFsbHkgdGhleSBhcmUpLCBTeXprYWxsZXIgc2hvdWxkIGJlIGFibGUgdG8gcmVzb2x2ZSBhbmQgdGFyZ2V0IHRoZW0uIEhvd2V2ZXIsIGl0J3MgZ2VuZXJhbGx5IGNsZWFuZXIgdG8gcHJvdmlkZSB0aGUgbmFtZXMgb2YgdGhlIGdlbmVyYXRlZCBmdW5jdGlvbnMgcmF0aGVyIHRoYW4gcmVseSBvbiB0aGUgdW5kZXJseWluZyBzdGF0aWMgZnVuY3Rpb24gcmVzb2x1dGlvbi5cblxuU28sIGxldCdzIG5haWwgZG93biB0aG9zZSBnZW5lcmF0ZWQgZnVuY3Rpb25zIGZvciB0aGUgYGhhc2hfbmV0NGAgdHlwZS4gSSdsbCBsaXN0IHRoZW0gb3V0OiBgaGFzaF9uZXQ0X2FkZGAsIGBoYXNoX25ldDRfZGVsYCwgYGhhc2hfbmV0NF90ZXN0YCwgYGhhc2hfbmV0NF9yZXNpemVgLCBgaGFzaF9uZXQ0X2djYCwgYGhhc2hfbmV0NF9mbHVzaGAsIGBoYXNoX25ldDRfZGVzdHJveWAsIGBoYXNoX25ldDRfaGVhZGAsIGBoYXNoX25ldDRfbGlzdGAsIGBoYXNoX25ldDRfa2FkdGAsIGFuZCBgaGFzaF9uZXQ0X3VhZHRgLlxuXG5BaCwgaGVyZSdzIGEgZGV0YWlsIEkgbmVlZCB0byBjb25maXJtOiBJdCBzZWVtcyB0aGF0IGBtdHlwZV9hZGRgIGlzICpnZW5lcmF0ZWQqIGFzIGBoYXNoX25ldDRfYWRkYC4gTm93IEkgbmVlZCB0byBxdWlja2x5IGNoZWNrIHRoZSBvYmplY3QgZmlsZSB0byBjb25maXJtIHRoYXQgYGhhc2hfbmV0NF9hZGRgIGFjdHVhbGx5IGV4aXN0cy4gSSdsbCB2ZXJpZnkgdGhpcyBpbW1lZGlhdGVseS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjU1NjUsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNDEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMTc6MDI6MDcuMTA3MTg4NzE0WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjAwNzQwMTUsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImhhc2hfbmV0NF9hZGRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9pcHNldC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDE3OjAyOjA3LjI2NzI2OTQyOFoiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2NDIzOTY4NzAyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgSW1wYWN0IG9mIHRoZSBQYXRjaCoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgYSBiaXQgdHJpY2t5IHRvIHRyYWNrIGRvd24gc2luY2UgaXQncyBnZW5lcmF0ZWQgYnkgbWFjcm9zLiBTdHJhaWdodCBgZ3JlcGAgaXNuJ3QgZ29pbmcgdG8gY3V0IGl0LCBzbyBJIG5lZWQgdG8gZGlnIGludG8gdGhlIG1hY3JvIGV4cGFuc2lvbiBwcm9jZXNzLiBMZXQncyBzdGFydCB3aXRoIGBtdHlwZV9hZGRgIGluIGBpcF9zZXRfaGFzaF9nZW4uaGAuIFJpZ2h0LCBgI2RlZmluZSBtdHlwZV9hZGQgSVBTRVRfVE9LRU4oTVRZUEUsIF9hZGQpYC4gQW5kIGBNVFlQRWAgaXMgZGVmaW5lZCBhcyBgaGFzaF9uZXQ0YC4gVGhlcmVmb3JlLCBgSVBTRVRfVE9LRU4oaGFzaF9uZXQ0LCBfYWRkKWAgZXhwYW5kcyB0byBgaGFzaF9uZXQ0X2FkZGAuIEdvb2QsIHRoYXQgc2hvdWxkIGRlZmluaXRlbHkgYmUgaW4gdGhlIHN5bWJvbCB0YWJsZSwgc28gdGhhdCdzIGEgZ29vZCBzdGFydGluZyBwb2ludCB0byBjb25maXJtIHRoZSBjaGFuZ2VzLlxuXG5JIHNob3VsZCBhbHNvIGNoZWNrIGZ1bmN0aW9ucyBmb3IgdGhlIG90aGVyIGhhc2ggdHlwZXMgdG8gc2VlIGhvdyB0aG9zZSBhcmUgYmVpbmcgaW1wYWN0ZWQuIFNvIEkgc2hvdWxkIGV4YW1pbmUgYGhhc2hfbmV0bmV0NF9hZGRgLCBgaGFzaF9uZXRwb3J0NF9hZGRgLCBgaGFzaF9uZXRpZmFjZTRfYWRkYCwgYGhhc2hfaXBwb3J0bmV0NF9hZGRgLCBhbmQgYGhhc2hfbmV0cG9ydG5ldDRfYWRkYC4gVGhpcyBwYXRjaCBpcyBzcGVjaWZpY2FsbHkgZGVhbGluZyB3aXRoIENJRFIgaGFuZGxpbmcsIGFuZCB0aG9zZSBoYXNoIHR5cGVzLCBmcm9tIHRoZSBuYW1lLCBoYXZlIGBfbmV0YCBpbiB0aGVtIHdoaWNoIHByb2JhYmx5IHVzZXMgaXQuXG5cblRoZSBjb25maWdzIHRoYXQgYXJlIGVuYWJsZWQgYXJlOiBgSVBfU0VUX0hBU0hfSVBQT1JUTkVUYCwgYElQX1NFVF9IQVNIX05FVGAsIGBJUF9TRVRfSEFTSF9ORVRJRkFDRWAsIGBJUF9TRVRfSEFTSF9ORVRORVRgLCBgSVBfU0VUX0hBU0hfTkVUUE9SVGAsIGFuZCBgSVBfU0VUX0hBU0hfTkVUUE9SVE5FVGAuXG5cbkFoLCBidXQgaG9sZCBvbi4gVGhlIHBhdGNoIGlzIG1vZGlmeWluZyBgaXBfc2V0X2hhc2hfZ2VuLmhgIHdoaWNoIGlzIGluY2x1ZGVkIGJ5ICphbGwqIHRoZSBoYXNoIHR5cGVzLiBIb3dldmVyLCB0aGUgQ0lEUiBsb2dpYyBpcyBvbmx5IGNvbmRpdGlvbmFsbHkgY29tcGlsZWQgYmFzZWQgb24gYElQX1NFVF9IQVNIX1dJVEhfTkVUU2AuIFNvIHRoZSBpbXBhY3Qgd2lsbCBiZSBsaW1pdGVkIHRvIG9ubHkgdGhvc2UgdHlwZXMgdGhhdCBhY3R1YWxseSBkZWZpbmUgdGhhdC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hpY2ggZmlsZXMgYWN0dWFsbHkgZGVmaW5lIGBJUF9TRVRfSEFTSF9XSVRIX05FVFNgIHRvIGZ1bGx5IHVuZGVyc3RhbmQgdGhlIHNjb3BlIG9mIHRoaXMgY2hhbmdlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNjQyNSwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMzNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wMlQxNzowMjoxMy42OTEyNDE1NVoiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU3ODYzMTY0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIklQX1NFVF9IQVNIX1dJVEhfTkVUU1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL2lwc2V0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oPTExNj1odGFibGVfc2l6ZSh1OCBoYml0cylcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtMTMwLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg6MTMxOiNpZmRlZiBJUF9TRVRfSEFTSF9XSVRIX05FVFNcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTEzMi0jaWYgSVBTRVRfTkVUX0NPVU5UIFxcdTAwM2UgMVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC0xMzYtI2VuZGlmXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaDoxMzc6I2lmZGVmIElQX1NFVF9IQVNIX1dJVEhfTkVUU19QQUNLRURcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTEzOC0vKiBXaGVuIGNpZHIgaXMgcGFja2VkIHdpdGggbm9tYXRjaCwgY2lkciAtIDEgaXMgc3RvcmVkIGluIHRoZSBkYXRhIGVudHJ5ICovXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTE0OC1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oOjE0OTojZW5kaWYgLyogSVBfU0VUX0hBU0hfV0lUSF9ORVRTICovXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC0xNTAtXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oPTE2Mz1zdGF0aWMgY29uc3QgdW5pb24gbmZfaW5ldF9hZGRyIHplcm9tYXNrID0ge307XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTIyNC0jZGVmaW5lIG10eXBlX2RhdGFfZXF1YWxcXHRJUFNFVF9UT0tFTihNVFlQRSwgX2RhdGFfZXF1YWwpXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaDoyMjU6I2lmZGVmIElQX1NFVF9IQVNIX1dJVEhfTkVUU1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtMjI2LSNkZWZpbmUgbXR5cGVfZG9fZGF0YV9tYXRjaFxcdElQU0VUX1RPS0VOKE1UWVBFLCBfZG9fZGF0YV9tYXRjaClcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg9MzA0PXN0cnVjdCBtdHlwZV9yZXNpemVfYWQge1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC0zMTItXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaDozMTM6I2lmZGVmIElQX1NFVF9IQVNIX1dJVEhfTkVUU1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtMzE0LS8qIE5ldHdvcmsgY2lkciBzaXplIGJvb2sga2VlcGluZyB3aGVuIHRoZSBoYXNoIHN0b3JlcyBkaWZmZXJlbnRcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg9NDI4PW10eXBlX2ZsdXNoKHN0cnVjdCBpcF9zZXQgKnNldClcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtNDMwLVxcdHN0cnVjdCBodHlwZSAqaCA9IHNldC1cXHUwMDNlZGF0YTtcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oOjQzMTojaWZkZWYgSVBfU0VUX0hBU0hfV0lUSF9ORVRTXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC00MzItXFx0c3RydWN0IG5ldF9wcmVmaXhlcyAqbmV0cywgKnRtcDtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtNDU1LVxcdH1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oOjQ1NjojaWZkZWYgSVBfU0VUX0hBU0hfV0lUSF9ORVRTXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC00NTctXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIElQU0VUX05FVF9DT1VOVDsgaSsrKSB7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oPTQ3Mz1tdHlwZV9haGFzaF9kZXN0cm95KHN0cnVjdCBpcF9zZXQgKnNldCwgc3RydWN0IGh0YWJsZSAqdCwgYm9vbCBleHRfZGVzdHJveSlcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTQ3NC17XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaDo0NzU6I2lmZGVmIElQX1NFVF9IQVNIX1dJVEhfTkVUU1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtNDc2LVxcdHN0cnVjdCBodHlwZSAqaCA9IHNldC1cXHUwMDNlZGF0YTtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtNDkwLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg6NDkxOiNpZmRlZiBJUF9TRVRfSEFTSF9XSVRIX05FVFNcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTQ5Mi1cXHRpZiAoZXh0X2Rlc3Ryb3kpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oPTUzNz1tdHlwZV9nY19kbyhzdHJ1Y3QgaXBfc2V0ICpzZXQsIHN0cnVjdCBodHlwZSAqaCwgc3RydWN0IGh0YWJsZSAqdCwgdTMyIHIpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTU0Mi1cXHRzaXplX3QgZHNpemUgPSBzZXQtXFx1MDAzZWRzaXplO1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg6NTQzOiNpZmRlZiBJUF9TRVRfSEFTSF9XSVRIX05FVFNcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTU0NC1cXHR1OCBrO1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC01NjUtXFx0XFx0XFx0c21wX21iX19hZnRlcl9hdG9taWMoKTtcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oOjU2NjojaWZkZWYgSVBfU0VUX0hBU0hfV0lUSF9ORVRTXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC01NjctXFx0XFx0XFx0Zm9yIChrID0gMDsgayBcXHUwMDNjIElQU0VUX05FVF9DT1VOVDsgaysrKVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaD02Nzg9bXR5cGVfcmVzaXplKHN0cnVjdCBpcF9zZXQgKnNldCwgYm9vbCByZXRyaWVkKVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC02ODMtXFx0c2l6ZV90IGhzaXplLCBkc2l6ZSA9IHNldC1cXHUwMDNlZHNpemU7XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaDo2ODQ6I2lmZGVmIElQX1NFVF9IQVNIX1dJVEhfTkVUU1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtNjg1LVxcdHU4IGZsYWdzO1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC02OTUtXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaDo2OTY6I2lmZGVmIElQX1NFVF9IQVNIX1dJVEhfTkVUU1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtNjk3LVxcdHRtcCA9IGttYWxsb2MoZHNpemUsIEdGUF9LRVJORUwpO1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC03NTMtXFx0XFx0XFx0XFx0XFx0Y29udGludWU7XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaDo3NTQ6I2lmZGVmIElQX1NFVF9IQVNIX1dJVEhfTkVUU1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtNzU1LVxcdFxcdFxcdFxcdC8qIFdlIGhhdmUgcmVhZGVycyBydW5uaW5nIHBhcmFsbGVsIHdpdGggdXMsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTgwNy1cXHRcXHRcXHRcXHR0LVxcdTAwM2VocmVnaW9uW25yXS5lbGVtZW50cysrO1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg6ODA4OiNpZmRlZiBJUF9TRVRfSEFTSF9XSVRIX05FVFNcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTgwOS1cXHRcXHRcXHRcXHRtdHlwZV9kYXRhX3Jlc2V0X2ZsYWdzKGQsIFxcdTAwMjZmbGFncyk7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTg0NC1vdXQ6XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaDo4NDU6I2lmZGVmIElQX1NFVF9IQVNIX1dJVEhfTkVUU1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtODQ2LVxcdGtmcmVlKHRtcCk7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oPTkxND1tdHlwZV9hZGQoc3RydWN0IGlwX3NldCAqc2V0LCB2b2lkICp2YWx1ZSwgY29uc3Qgc3RydWN0IGlwX3NldF9leHQgKmV4dCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtOTk1LVxcdFxcdGlmICghZGVsZXRlZCkge1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg6OTk2OiNpZmRlZiBJUF9TRVRfSEFTSF9XSVRIX05FVFNcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTk5Ny1cXHRcXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgSVBTRVRfTkVUX0NPVU5UOyBpKyspXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTEwNDEtXFx0dC1cXHUwMDNlaHJlZ2lvbltyXS5lbGVtZW50cysrO1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg6MTA0MjojaWZkZWYgSVBfU0VUX0hBU0hfV0lUSF9ORVRTXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC0xMDQzLVxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBJUFNFVF9ORVRfQ09VTlQ7IGkrKylcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtMTA0Ny1vdmVyd3JpdGVfZXh0ZW5zaW9uczpcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oOjEwNDg6I2lmZGVmIElQX1NFVF9IQVNIX1dJVEhfTkVUU1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtMTA0OS1cXHRtdHlwZV9kYXRhX3NldF9mbGFncyhkYXRhLCBmbGFncyk7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oPTExMDk9bXR5cGVfZGVsKHN0cnVjdCBpcF9zZXQgKnNldCwgdm9pZCAqdmFsdWUsIGNvbnN0IHN0cnVjdCBpcF9zZXRfZXh0ICpleHQsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTExNTQtXFx0XFx0dC1cXHUwMDNlaHJlZ2lvbltyXS5lbGVtZW50cy0tO1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg6MTE1NTojaWZkZWYgSVBfU0VUX0hBU0hfV0lUSF9ORVRTXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC0xMTU2LVxcdFxcdGZvciAoaiA9IDA7IGogXFx1MDAzYyBJUFNFVF9ORVRfQ09VTlQ7IGorKylcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg9MTIyMT1tdHlwZV9kYXRhX21hdGNoKHN0cnVjdCBtdHlwZV9lbGVtICpkYXRhLCBjb25zdCBzdHJ1Y3QgaXBfc2V0X2V4dCAqZXh0LFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC0xMjI5LVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg6MTIzMDojaWZkZWYgSVBfU0VUX0hBU0hfV0lUSF9ORVRTXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC0xMjMxLS8qIFNwZWNpYWwgdGVzdCBmdW5jdGlvbiB3aGljaCB0YWtlcyBpbnRvIGFjY291bnQgdGhlIGRpZmZlcmVudCBuZXR3b3JrXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oPTEzMDU9bXR5cGVfdGVzdChzdHJ1Y3QgaXBfc2V0ICpzZXQsIHZvaWQgKnZhbHVlLCBjb25zdCBzdHJ1Y3QgaXBfc2V0X2V4dCAqZXh0LFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC0xMzE4LVxcdHQgPSByY3VfZGVyZWZlcmVuY2VfYmgoaC1cXHUwMDNldGFibGUpO1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg6MTMxOTojaWZkZWYgSVBfU0VUX0hBU0hfV0lUSF9ORVRTXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC0xMzIwLVxcdC8qIElmIHdlIHRlc3QgYW4gSVAgYWRkcmVzcyBhbmQgbm90IGEgbmV0d29yayBhZGRyZXNzLFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaD0xNTUyPUlQU0VUX1RPS0VOKEhUWVBFLCBfY3JlYXRlKShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBpcF9zZXQgKnNldCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtMTU2NC0jZW5kaWZcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oOjE1NjU6I2lmZGVmIElQX1NFVF9IQVNIX1dJVEhfTkVUU1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtMTU2Ni1cXHRzdHJ1Y3QgbmV0X3ByZWZpeGVzICpuZXRzO1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC0xNjc0LVxcdFxcdGdvdG8gZnJlZV90O1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg6MTY3NTojaWZkZWYgSVBfU0VUX0hBU0hfV0lUSF9ORVRTXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC0xNjc2LVxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBJUFNFVF9ORVRfQ09VTlQ7IGkrKykge1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC0xNzQ5LVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg6MTc1MDojaWZkZWYgSVBfU0VUX0hBU0hfV0lUSF9ORVRTXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC0xNzUxLWZyZWVfaHJlZ2lvbjpcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0bmV0LmM9MzY9TU9EVUxFX0FMSUFTKFxcXCJpcF9zZXRfaGFzaDppcCxwb3J0LG5ldFxcXCIpO1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcHBvcnRuZXQuYy00NC0gKi9cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwcG9ydG5ldC5jOjQ1OiNkZWZpbmUgSVBfU0VUX0hBU0hfV0lUSF9ORVRTX1BBQ0tFRFxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0bmV0LmMtNDYtI2RlZmluZSBJUF9TRVRfSEFTSF9XSVRIX1BST1RPXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcHBvcnRuZXQuYzo0NzojZGVmaW5lIElQX1NFVF9IQVNIX1dJVEhfTkVUU1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0bmV0LmMtNDgtXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldC5jPTMzPU1PRFVMRV9BTElBUyhcXFwiaXBfc2V0X2hhc2g6bmV0XFxcIik7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldC5jLTM2LSNkZWZpbmUgSFRZUEVcXHRcXHRoYXNoX25ldFxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0LmM6Mzc6I2RlZmluZSBJUF9TRVRfSEFTSF9XSVRIX05FVFNcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldC5jLTM4LVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRpZmFjZS5jPTM1PU1PRFVMRV9BTElBUyhcXFwiaXBfc2V0X2hhc2g6bmV0LGlmYWNlXFxcIik7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldGlmYWNlLmMtMzgtI2RlZmluZSBIVFlQRVxcdFxcdGhhc2hfbmV0aWZhY2VcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldGlmYWNlLmM6Mzk6I2RlZmluZSBJUF9TRVRfSEFTSF9XSVRIX05FVFNcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldGlmYWNlLmMtNDAtI2RlZmluZSBJUF9TRVRfSEFTSF9XSVRIX01VTFRJXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldG5ldC5jPTMyPU1PRFVMRV9BTElBUyhcXFwiaXBfc2V0X2hhc2g6bmV0LG5ldFxcXCIpO1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRuZXQuYy0zNS0jZGVmaW5lIEhUWVBFXFx0XFx0aGFzaF9uZXRuZXRcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldG5ldC5jOjM2OiNkZWZpbmUgSVBfU0VUX0hBU0hfV0lUSF9ORVRTXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRuZXQuYy0zNy0jZGVmaW5lIElQX1NFVF9IQVNIX1dJVEhfTkVUTUFTS1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRwb3J0LmM9MzU9TU9EVUxFX0FMSUFTKFxcXCJpcF9zZXRfaGFzaDpuZXQscG9ydFxcXCIpO1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRwb3J0LmMtMzktI2RlZmluZSBJUF9TRVRfSEFTSF9XSVRIX1BST1RPXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRwb3J0LmM6NDA6I2RlZmluZSBJUF9TRVRfSEFTSF9XSVRIX05FVFNcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldHBvcnQuYy00MS1cXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0cG9ydC5jLTQ1LSAqL1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0cG9ydC5jOjQ2OiNkZWZpbmUgSVBfU0VUX0hBU0hfV0lUSF9ORVRTX1BBQ0tFRFxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0cG9ydC5jLTQ3LVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRwb3J0bmV0LmM9MzI9TU9EVUxFX0FMSUFTKFxcXCJpcF9zZXRfaGFzaDpuZXQscG9ydCxuZXRcXFwiKTtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0cG9ydG5ldC5jLTM2LSNkZWZpbmUgSVBfU0VUX0hBU0hfV0lUSF9QUk9UT1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0cG9ydG5ldC5jOjM3OiNkZWZpbmUgSVBfU0VUX0hBU0hfV0lUSF9ORVRTXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRwb3J0bmV0LmMtMzgtI2RlZmluZSBJUFNFVF9ORVRfQ09VTlQgMlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMlQxNzowMjoxMy44NDkxMTk3NTRaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTQ2ODc3MDE1OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIElQIFNldCBIYXNoIEZ1bmN0aW9ucyoqXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgaW4uIEkgc2VlIGEgc3VpdGUgb2YgQyBmaWxlczogYGlwX3NldF9oYXNoX2lwcG9ydG5ldC5jYCwgYGlwX3NldF9oYXNoX25ldC5jYCwgZXRjLiBJbW1lZGlhdGVseSwgSSdtIHplcm9pbmcgaW4gb24gdGhlIGZ1bmN0aW9ucyB0aGF0IGFyZSAqZ2VuZXJhdGVkKiBmb3IgdGhlc2UgaGFzaCB0eXBlcy4gVGhhdCdzIHdoZXJlIHRoZSBjb3JlIGxvZ2ljIHdpbGwgYmUuIEknbSB0aGlua2luZyBvZiBmdW5jdGlvbnMgbGlrZSBgaGFzaF9uZXQ0X2FkZGAsIGBoYXNoX25ldDRfZGVsYCwgYW5kIHRoZSBvdGhlcnMgSSBleHBlY3QgdG8gc2VlIGZvciBJUHY0IGFuZCBJUHY2LCB0aGUgdmFyaWF0aW9ucyBmb3IgcG9ydCBhbmQgaW50ZXJmYWNlIGNvbWJpbmF0aW9uczogYGhhc2hfbmV0Nl9hZGRgLCBgaGFzaF9uZXRwb3J0NF9hZGRgLCBgaGFzaF9uZXRpZmFjZTZfYWRkYCwgYW5kIHNvIG9uLiBNeSBmb2N1cyBpcyBvbiB0aGUgYWRkL2RlbC90ZXN0L3Jlc2l6ZS9nYyBvcGVyYXRpb25zIOKAkyB0aGUgZnVuZGFtZW50YWwgYnVpbGRpbmcgYmxvY2tzLiBJIGtub3cgZnJvbSBleHBlcmllbmNlIHRoYXQgdGhlIHBlcmZvcm1hbmNlIG9mIHRoZXNlIGhhc2ggc2V0cyByZWFsbHkgaGluZ2VzIG9uIHRoZSBlZmZpY2llbmN5IG9mIHRob3NlIGZ1bmN0aW9ucy5cblxuU3BlY2lmaWNhbGx5LCBJIHdhbnQgdG8gY29uZmlybSB3aGV0aGVyIGBoYXNoX25ldDRfdGVzdF9jaWRyc2AgaXMgYWN0dWFsbHkgZ2VuZXJhdGVkLiBJIHJlY2FsbCB0aGF0IGlmIGBJUF9TRVRfSEFTSF9XSVRIX05FVFNgIGlzIGRlZmluZWQsIHRoaXMgY2FwYWJpbGl0eSBpcyBzdXBwb3J0ZWQuIEEgcXVpY2sgc2NhbiBvZiB0aGUgY29kZSB2ZXJpZmllcyB0aGF0IGBtdHlwZV90ZXN0X2NpZHJzYCBpcyBpbmRlZWQgZGVmaW5lZCBiYXNlZCBvbiB0aGF0IGNvbmRpdGlvbi4gVGltZSB0byBjaGVjayBgaXBfc2V0X2hhc2hfZ2VuLmhgIGFuZCBjb25maXJtIGhvdyB0aG9zZSBmdW5jdGlvbnMgYXJlIGRlZmluZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMxMTc2LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDAyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDE3OjAyOjE5LjMxNzg5MjU2MloiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjI0MjM4NzcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibXR5cGVfdGVzdF9jaWRyc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL2lwc2V0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oPTE2Mz1zdGF0aWMgY29uc3QgdW5pb24gbmZfaW5ldF9hZGRyIHplcm9tYXNrID0ge307XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTIwNS0jdW5kZWYgbXR5cGVfZGVsXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaDoyMDY6I3VuZGVmIG10eXBlX3Rlc3RfY2lkcnNcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTIwNy0jdW5kZWYgbXR5cGVfdGVzdFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC0yNTAtI2RlZmluZSBtdHlwZV9kZWxcXHRcXHRJUFNFVF9UT0tFTihNVFlQRSwgX2RlbClcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oOjI1MTojZGVmaW5lIG10eXBlX3Rlc3RfY2lkcnNcXHRJUFNFVF9UT0tFTihNVFlQRSwgX3Rlc3RfY2lkcnMpXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC0yNTItI2RlZmluZSBtdHlwZV90ZXN0XFx0XFx0SVBTRVRfVE9LRU4oTVRZUEUsIF90ZXN0KVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaD0xMjM0PXN0YXRpYyBpbnRcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oOjEyMzU6bXR5cGVfdGVzdF9jaWRycyhzdHJ1Y3QgaXBfc2V0ICpzZXQsIHN0cnVjdCBtdHlwZV9lbGVtICpkLFxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtMTIzNi1cXHRcXHQgY29uc3Qgc3RydWN0IGlwX3NldF9leHQgKmV4dCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg9MTMwNT1tdHlwZV90ZXN0KHN0cnVjdCBpcF9zZXQgKnNldCwgdm9pZCAqdmFsdWUsIGNvbnN0IHN0cnVjdCBpcF9zZXRfZXh0ICpleHQsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTEzMjYtXFx0aWYgKGkgPT0gSVBTRVRfTkVUX0NPVU5UKSB7XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaDoxMzI3OlxcdFxcdHJldCA9IG10eXBlX3Rlc3RfY2lkcnMoc2V0LCBkLCBleHQsIG1leHQsIGZsYWdzKTtcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTEzMjgtXFx0XFx0Z290byBvdXQ7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDE3OjAyOjE5LjM4MDMyMTIwOVoiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2OTk2ODEwNjUyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czpcblxuKipBbmFseXppbmcgTmV0d29yayBIYXNoIFRhYmxlIE9wZXJhdGlvbnMqKlxuXG5Pa2F5LCBzbyBJIHNlZSBhIGdlbmVyYXRlZCBgaGFzaF9uZXQ0X3Rlc3RfY2lkcnNgIGZ1bmN0aW9uLiBUaGF0J3MgZ29vZCwgbGlrZWx5IGZvciBxdWlja2x5IHRlc3RpbmcgQ0lEUnMgd2l0aGluIHRoZSBuZXR3b3JrIGhhc2ggdGFibGUuIEFuZCBJJ20gc2VlaW5nIHN1cHBvcnRpbmcgZnVuY3Rpb25zOiBgaGFzaF9uZXQ0X2FkZGAsIGBoYXNoX25ldDRfZGVsYCwgYGhhc2hfbmV0NF9yZXNpemVgLCBhbmQgYGhhc2hfbmV0NF9nY2AuIFRoYXQgbWFrZXMgc2Vuc2UgLSB3ZSBuZWVkIGZ1bmN0aW9ucyB0byBtYW5pcHVsYXRlIHRoZSB0YWJsZSwgcmVzaXplIGl0IGFzIG5lZWRlZCwgYW5kIGdhcmJhZ2UgY29sbGVjdCBwb3RlbnRpYWxseSBzdGFsZSBlbnRyaWVzLiBNeSBpbW1lZGlhdGUgY29uY2VybiwgYXMgYW4gZXhwZXJ0IGluIHRoaXMsIGlzIGhvdyB0aGUgcmVzaXplIGFuZCBHQyBhcmUgYmVpbmcgaGFuZGxlZC4gSSdtIGdvaW5nIHRvIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIGBtdHlwZV9yZXNpemVgIGFuZCBgbXR5cGVfZ2NgIGZ1bmN0aW9ucyBub3cgdG8gZW5zdXJlIHRoZWlyIGVmZmljaWVudCBhbmQgY29ycmVjdCBvcGVyYXRpb24sIHdoaWNoIGlzIGNyaXRpY2FsIGZvciBnb29kIHBlcmZvcm1hbmNlLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMjQyOSwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDE3OjAyOjI2LjM3NzEzNDAxWiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MTM2NTg1NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtdHlwZV9yZXNpemVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9pcHNldC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaD0xNjM9c3RhdGljIGNvbnN0IHVuaW9uIG5mX2luZXRfYWRkciB6ZXJvbWFzayA9IHt9O1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC0yMDgtI3VuZGVmIG10eXBlX3VyZWZcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oOjIwOTojdW5kZWYgbXR5cGVfcmVzaXplXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC0yMTAtI3VuZGVmIG10eXBlX2V4dF9zaXplXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaDoyMTE6I3VuZGVmIG10eXBlX3Jlc2l6ZV9hZFxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtMjEyLSN1bmRlZiBtdHlwZV9oZWFkXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTI1My0jZGVmaW5lIG10eXBlX3VyZWZcXHRcXHRJUFNFVF9UT0tFTihNVFlQRSwgX3VyZWYpXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaDoyNTQ6I2RlZmluZSBtdHlwZV9yZXNpemVcXHRcXHRJUFNFVF9UT0tFTihNVFlQRSwgX3Jlc2l6ZSlcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTI1NS0jZGVmaW5lIG10eXBlX2V4dF9zaXplXFx0XFx0SVBTRVRfVE9LRU4oTVRZUEUsIF9leHRfc2l6ZSlcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oOjI1NjojZGVmaW5lIG10eXBlX3Jlc2l6ZV9hZFxcdFxcdElQU0VUX1RPS0VOKE1UWVBFLCBfcmVzaXplX2FkKVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtMjU3LSNkZWZpbmUgbXR5cGVfaGVhZFxcdFxcdElQU0VUX1RPS0VOKE1UWVBFLCBfaGVhZClcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg9MjgzPXN0cnVjdCBodHlwZSB7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTMwMy0vKiBBRER8REVMIGVudHJpZXMgc2F2ZWQgZHVyaW5nIHJlc2l6ZSAqL1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg6MzA0OnN0cnVjdCBtdHlwZV9yZXNpemVfYWQge1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtMzA1LVxcdHN0cnVjdCBsaXN0X2hlYWQgbGlzdDtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg9Njc3PXN0YXRpYyBpbnRcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oOjY3ODptdHlwZV9yZXNpemUoc3RydWN0IGlwX3NldCAqc2V0LCBib29sIHJldHJpZWQpXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC02Nzkte1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC02OTEtXFx0c3RydWN0IGxpc3RfaGVhZCAqbCwgKmx0O1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg6NjkyOlxcdHN0cnVjdCBtdHlwZV9yZXNpemVfYWQgKng7XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC02OTMtXFx0dTMyIGksIGosIHIsIG5yLCBrZXk7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTgyOC1cXHRsaXN0X2Zvcl9lYWNoX3NhZmUobCwgbHQsIFxcdTAwMjZvcmlnLVxcdTAwM2VhZCkge1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg6ODI5OlxcdFxcdHggPSBsaXN0X2VudHJ5KGwsIHN0cnVjdCBtdHlwZV9yZXNpemVfYWQsIGxpc3QpO1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtODMwLVxcdFxcdGlmICh4LVxcdTAwM2VhZCA9PSBJUFNFVF9BREQpIHtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg9OTE0PW10eXBlX2FkZChzdHJ1Y3QgaXBfc2V0ICpzZXQsIHZvaWQgKnZhbHVlLCBjb25zdCBzdHJ1Y3QgaXBfc2V0X2V4dCAqZXh0LFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC0xMDczLVxcdFxcdC8qIFJlc2l6ZSBpcyBpbiBwcm9jZXNzIGFuZCBrZXJuZWwgc2lkZSBhZGQsIHNhdmUgdmFsdWVzICovXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaDoxMDc0OlxcdFxcdHN0cnVjdCBtdHlwZV9yZXNpemVfYWQgKng7XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC0xMDc1LVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg6MTA3NjpcXHRcXHR4ID0ga3phbGxvY19vYmooc3RydWN0IG10eXBlX3Jlc2l6ZV9hZCwgR0ZQX0FUT01JQyk7XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC0xMDc3LVxcdFxcdGlmICgheClcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg9MTEwOT1tdHlwZV9kZWwoc3RydWN0IGlwX3NldCAqc2V0LCB2b2lkICp2YWx1ZSwgY29uc3Qgc3RydWN0IGlwX3NldF9leHQgKmV4dCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtMTExNi1cXHRzdHJ1Y3QgaGJ1Y2tldCAqbjtcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oOjExMTc6XFx0c3RydWN0IG10eXBlX3Jlc2l6ZV9hZCAqeCA9IE5VTEw7XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC0xMTE4LVxcdGludCBpLCBqLCBrLCByLCByZXQgPSAtSVBTRVRfRVJSX0VYSVNUO1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC0xMTY1LVxcdFxcdFxcdCAqL1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg6MTE2NjpcXHRcXHRcXHR4ID0ga3phbGxvY19vYmooc3RydWN0IG10eXBlX3Jlc2l6ZV9hZCwgR0ZQX0FUT01JQyk7XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC0xMTY3LVxcdFxcdFxcdGlmICh4KSB7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oPTE1MzE9c3RhdGljIGNvbnN0IHN0cnVjdCBpcF9zZXRfdHlwZV92YXJpYW50IG10eXBlX3ZhcmlhbnQgPSB7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTE1NDMtXFx0LnVyZWZcXHQ9IG10eXBlX3VyZWYsXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaDoxNTQ0OlxcdC5yZXNpemVcXHQ9IG10eXBlX3Jlc2l6ZSxcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTE1NDUtXFx0LnNhbWVfc2V0ID0gbXR5cGVfc2FtZV9zZXQsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDE3OjAyOjI2LjQzODUwNDExOFoiLCJTZXEiOjMxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MTk2ODAyMzY4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBhcyBpZiBpdCdzIG15IG93biBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqRGVlcCBEaXZlIGludG8gYG10eXBlX2djYCoqXG5cbkFscmlnaHQsIGxldCdzIGRpc3NlY3QgdGhpcy4gV2hlbiBJIHNlZSBgbXR5cGVfZ2NgLCBteSBicmFpbiBpbW1lZGlhdGVseSBqdW1wcyB0byBnYXJiYWdlIGNvbGxlY3Rpb24gYW5kIG1lbW9yeSBtYW5hZ2VtZW50LCBwYXJ0aWN1bGFybHkgYXMgaXQgcmVsYXRlcyB0bywgcHJlc3VtYWJseSwgc29tZSBraW5kIG9mIG1lZGlhIHR5cGUgcmVwcmVzZW50YXRpb24uIFRoZSBuYW1pbmcgc3VnZ2VzdHMgdGhhdCBcIm10eXBlXCIgaXMgYSBtZWRpYSB0eXBlIGFuZCBcImdjXCIgaXMgcHJvYmFibHkgYW4gaW5kaWNhdG9yIGZvciBnYXJiYWdlIGNvbGxlY3Rpb24uXG5cbk15IGZpcnN0IHRob3VnaHQgaXMgYWx3YXlzIGVmZmljaWVuY3kuIElzIHRoaXMgYSBzeXN0ZW0gd2hlcmUgd2UncmUgdHJhY2tpbmcgbWVkaWEgdHlwZXMgaW4gYSB3YXkgdGhhdCByZXF1aXJlcyBleHBsaWNpdCBtYW5hZ2VtZW50LCBvciBhcmUgd2UgaG9waW5nIHRoZSBnYXJiYWdlIGNvbGxlY3RvciBjYW4gaGFuZGxlIG1vc3Qgb2YgdGhlIGNsZWFudXA/IFdoYXQgYXJlIHRoZSBpbXBsaWNhdGlvbnMgb2YgZGlmZmVyZW50IG1lZGlhIHR5cGVzIG9uIHRoZSBoZWFwPyBEb2VzIHRoaXMgYG10eXBlX2djYCByZWxhdGUgdG8gYSBwb29sIG9mIG1lZGlhIHR5cGUgb2JqZWN0IGluc3RhbmNlcyBvciBpcyBpdCByZWxhdGVkIHRvIHRoZSBkYXRhIHN0cnVjdHVyZXMgc3RvcmluZyB0aGUgZGF0YSBmb3IgdGhlIGdpdmVuIG1lZGlhIHR5cGU/XG5cbkknbSBpbnN0YW50bHkgY29uc2lkZXJpbmcgZWRnZSBjYXNlcy4gSWYgYG10eXBlX2djYCBpcyBhIGZsYWcgb3IgYSBtZXRhZGF0YSBhdHRyaWJ1dGUgb24gYSBtZWRpYSB0eXBlIHJlcHJlc2VudGF0aW9uLCBob3cgaXMgdGhpcyBoYW5kbGVkIGluIGEgbXVsdGl0aHJlYWRlZCBlbnZpcm9ubWVudD8gQXJlIHRoZXJlIHRocmVhZC1zYWZlIG1lY2hhbmlzbXMgaW4gcGxhY2U/IE9yIGlzIGl0IHByZXN1bWVkIHRvIGJlIHNpbmdsZS10aHJlYWRlZD8gV2hhdCBoYXBwZW5zIGlmIHlvdSBoYXZlIGNyb3NzLXJlZmVyZW5jZXM/IElzIHRoZXJlIGEgY3ljbGljIGRlcGVuZGVuY3kgdGhhdCB0aGUgR0MgbWlnaHQgbm90IGhhbmRsZSB3ZWxsPyBIb3cgd291bGQgdGhhdCBtYW5pZmVzdD9cblxuVGhlbiBJ4oCZbSB0aGlua2luZyBhYm91dCB0aGUgdW5kZXJseWluZyByZXByZXNlbnRhdGlvbi4gV2hhdCBkb2VzIGFuIFwibXR5cGVcIiBldmVuICpsb29rKiBsaWtlIGhlcmU/IElzIGl0IGEgc3RyaW5nLCBhbiBpbnRlZ2VyIGVudW0sIGEgbW9yZSBjb21wbGV4IG9iamVjdCB3aXRoIG5lc3RlZCBkYXRhIHN0cnVjdHVyZXM/IEhvdyBpcyBpdCBzdG9yZWQ/IEluIGEgaGFzaCB0YWJsZT8gQSB0cmVlPyBBIGxpbmtlZCBsaXN0PyBFYWNoIGNob2ljZSBoYXMgR0MgaW1wbGljYXRpb25zLiBIb3cgb2Z0ZW4gYXJlIHRoZXNlIG10eXBlcyBjcmVhdGVkLCBtb2RpZmllZCwgYW5kIGRlc3Ryb3llZD8gQXJlIHdlIHRhbGtpbmcgYWJvdXQgYSBtYXNzaXZlLCBmcmVxdWVudGx5IGNoYW5naW5nIG1lZGlhIHR5cGUgY2F0YWxvZywgb3IgYSByZWxhdGl2ZWx5IHN0YXRpYyBzZXQ/IEFuZCB3aGF0IGxldmVsIG9mIEdDIGNvbnRyb2wgZG8gd2UgaGF2ZT9cblxuRmluYWxseSwgdGhlIGRlc2lnbiBpcyBrZXkuIERpZCBzb21lb25lIGltcGxlbWVudCB0aGlzIHdpdGggZXhwbGljaXQgbWVtb3J5IGNvbnRyb2wgb3IgaW1wbGljaXRseT8gVGhpcyByZWFsbHkgaW1wYWN0cyBteSBuZXh0IHF1ZXN0aW9uLCBpcyB0aGUgR0MgaW1wbGVtZW50YXRpb24gdGhlIGJvdHRsZW5lY2s/IEFyZSB0aGVyZSBvcHRpbWl6YXRpb24gb3Bwb3J0dW5pdGllcyBoZXJlP1xuXG5PdmVyYWxsLCBteSBtaW5kIGlzIHJhY2luZyB0aHJvdWdoIGFsbCB0aGUgcG90ZW50aWFsIGRlc2lnbiBjaG9pY2VzIGFuZCB0aGVpciBwb3RlbnRpYWwgbWVtb3J5IG1hbmFnZW1lbnQgcGl0ZmFsbHMgcmVsYXRlZCB0byBnYXJiYWdlIGNvbGxlY3Rpb24uIEnigJltIHN0YXJ0aW5nIHRvIG1lbnRhbGx5IGJ1aWxkIGEgY2hlY2tsaXN0IG9mIHF1ZXN0aW9ucyB0byBhc2ssIGRlc2lnbiBkZWNpc2lvbnMgdG8gZXZhbHVhdGUsIGFuZCBwb3RlbnRpYWwgYm90dGxlbmVja3MgdG8gYW50aWNpcGF0ZS4gTGV0J3MgZGlnIGRlZXBlci5cblxuXG4iLCJJbnB1dFRva2VucyI6MzQxNTQsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDE3OjAyOjMxLjYzNTMwODMxNloiLCJTZXEiOjMyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjE1NzM5MzcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibXR5cGVfZ2NcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9pcHNldC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX2dlbi5oLTktI2RlZmluZSBtdHlwZV9kb190ZXN0XFx0XFx0SVBTRVRfVE9LRU4oTVRZUEUsIF9kb190ZXN0KVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9nZW4uaDoxMDojZGVmaW5lIG10eXBlX2djX3Rlc3RcXHRcXHRJUFNFVF9UT0tFTihNVFlQRSwgX2djX3Rlc3QpXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX2dlbi5oLTExLSNkZWZpbmUgbXR5cGVfaXNfZmlsbGVkXFx0XFx0SVBTRVRfVE9LRU4oTVRZUEUsIF9pc19maWxsZWQpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfZ2VuLmgtMTgtI2RlZmluZSBtdHlwZV9hZGRfdGltZW91dFxcdElQU0VUX1RPS0VOKE1UWVBFLCBfYWRkX3RpbWVvdXQpXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX2dlbi5oOjE5OiNkZWZpbmUgbXR5cGVfZ2NfaW5pdFxcdFxcdElQU0VUX1RPS0VOKE1UWVBFLCBfZ2NfaW5pdClcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfZ2VuLmgtMjAtI2RlZmluZSBtdHlwZV9rYWR0XFx0XFx0SVBTRVRfVE9LRU4oTVRZUEUsIF9rYWR0KVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX2dlbi5oLTMxLSNkZWZpbmUgbXR5cGVfbGlzdFxcdFxcdElQU0VUX1RPS0VOKE1UWVBFLCBfbGlzdClcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfZ2VuLmg6MzI6I2RlZmluZSBtdHlwZV9nY1xcdFxcdElQU0VUX1RPS0VOKE1UWVBFLCBfZ2MpXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX2dlbi5oLTMzLSNkZWZpbmUgbXR5cGVfY2FuY2VsX2djXFx0XFx0SVBTRVRfVE9LRU4oTVRZUEUsIF9jYW5jZWxfZ2MpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfZ2VuLmg9Mzg9c3RhdGljIHZvaWRcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfZ2VuLmg6Mzk6bXR5cGVfZ2NfaW5pdChzdHJ1Y3QgaXBfc2V0ICpzZXQsIHZvaWQgKCpnYykoc3RydWN0IHRpbWVyX2xpc3QgKnQpKVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9nZW4uaC00MC17XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfZ2VuLmg9MjY1PXN0YXRpYyB2b2lkXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX2dlbi5oOjI2NjptdHlwZV9nYyhzdHJ1Y3QgdGltZXJfbGlzdCAqdClcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfZ2VuLmgtMjY3LXtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9nZW4uaC0yNzctXFx0Zm9yIChpZCA9IDA7IGlkIFxcdTAwM2MgbWFwLVxcdTAwM2VlbGVtZW50czsgaWQrKylcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfZ2VuLmg6Mjc4OlxcdFxcdGlmIChtdHlwZV9nY190ZXN0KGlkLCBtYXAsIHNldC1cXHUwMDNlZHNpemUpKSB7XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX2dlbi5oLTI3OS1cXHRcXHRcXHR4ID0gZ2V0X2V4dChzZXQsIG1hcCwgaWQpO1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaD0xNjM9c3RhdGljIGNvbnN0IHVuaW9uIG5mX2luZXRfYWRkciB6ZXJvbWFzayA9IHt9O1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC0yMTMtI3VuZGVmIG10eXBlX2xpc3RcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oOjIxNDojdW5kZWYgbXR5cGVfZ2NfZG9cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oOjIxNTojdW5kZWYgbXR5cGVfZ2NcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oOjIxNjojdW5kZWYgbXR5cGVfZ2NfaW5pdFxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtMjE3LSN1bmRlZiBtdHlwZV9jYW5jZWxfZ2NcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtMjU4LSNkZWZpbmUgbXR5cGVfbGlzdFxcdFxcdElQU0VUX1RPS0VOKE1UWVBFLCBfbGlzdClcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oOjI1OTojZGVmaW5lIG10eXBlX2djX2RvXFx0XFx0SVBTRVRfVE9LRU4oTVRZUEUsIF9nY19kbylcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oOjI2MDojZGVmaW5lIG10eXBlX2djXFx0XFx0SVBTRVRfVE9LRU4oTVRZUEUsIF9nYylcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oOjI2MTojZGVmaW5lIG10eXBlX2djX2luaXRcXHRcXHRJUFNFVF9UT0tFTihNVFlQRSwgX2djX2luaXQpXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC0yNjItI2RlZmluZSBtdHlwZV9jYW5jZWxfZ2NcXHRcXHRJUFNFVF9UT0tFTihNVFlQRSwgX2NhbmNlbF9nYylcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg9NTM2PXN0YXRpYyB2b2lkXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaDo1Mzc6bXR5cGVfZ2NfZG8oc3RydWN0IGlwX3NldCAqc2V0LCBzdHJ1Y3QgaHR5cGUgKmgsIHN0cnVjdCBodGFibGUgKnQsIHUzMiByKVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtNTM4LXtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg9NjA5PXN0YXRpYyB2b2lkXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaDo2MTA6bXR5cGVfZ2Moc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtNjExLXtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtNjM3LVxcdGlmICghdC1cXHUwMDNlcmVzaXppbmcpXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaDo2Mzg6XFx0XFx0bXR5cGVfZ2NfZG8oc2V0LCBoLCB0LCByKTtcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTYzOS1cXHRzcGluX3VubG9ja19iaChcXHUwMDI2Z2MtXFx1MDAzZWxvY2spO1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaD02NTA9c3RhdGljIHZvaWRcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oOjY1MTptdHlwZV9nY19pbml0KHN0cnVjdCBodGFibGVfZ2MgKmdjKVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtNjUyLXtcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oOjY1MzpcXHRJTklUX0RFRkVSUkFCTEVfV09SSyhcXHUwMDI2Z2MtXFx1MDAzZWR3b3JrLCBtdHlwZV9nYyk7XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC02NTQtXFx0cXVldWVfZGVsYXllZF93b3JrKHN5c3RlbV9wb3dlcl9lZmZpY2llbnRfd3EsIFxcdTAwMjZnYy1cXHUwMDNlZHdvcmssIEhaKTtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg9OTE0PW10eXBlX2FkZChzdHJ1Y3QgaXBfc2V0ICpzZXQsIHZvaWQgKnZhbHVlLCBjb25zdCBzdHJ1Y3QgaXBfc2V0X2V4dCAqZXh0LFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC05MzgtXFx0XFx0aWYgKFNFVF9XSVRIX1RJTUVPVVQoc2V0KSlcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oOjkzOTpcXHRcXHRcXHRtdHlwZV9nY19kbyhzZXQsIGgsIHQsIHIpO1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtOTQwLVxcdFxcdG1heGVsZW0gPSBoLVxcdTAwM2VtYXhlbGVtO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMlQxNzowMjozMS42OTY4ODc5MDRaIiwiU2VxIjozMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTAyMDk0MDgyMjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBHZW5lcmF0ZWQgSGFzaCBGdW5jdGlvbnMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGUgZ2VuZXJhdGVkIGhhc2ggZnVuY3Rpb25zLiBXZSd2ZSBnb3QgYGhhc2hfbmV0NF9nY2AsIGBoYXNoX25ldDRfZ2NfZG9gLCBgaGFzaF9uZXQ0X3Jlc2l6ZWAsIGBoYXNoX25ldDRfYWRkYCwgYW5kIGBoYXNoX25ldDRfZGVsYC4gSSBzZWUgdGhhdCBgaGFzaF9uZXQ0X3Rlc3RfY2lkcnNgIGlzIGNvbmRpdGlvbmFsOyBpdCdzIG9ubHkgZ2VuZXJhdGVkIGlmIGBJUF9TRVRfSEFTSF9XSVRIX05FVFNgIGlzIGRlZmluZWQuIEdvb2QgdG8gbm90ZS5cblxuSSdtIHRoaW5raW5nLCBpbnN0ZWFkIG9mIGdvaW5nIHRocm91Z2ggdGhlIG9iamVjdCBmaWxlIHdpdGggYHJlYWQtZmlsZWAgb3IgYGdyZXBwZXJgLCBJIGNhbiBqdXN0IGxpc3QgdGhlbSBiYXNlZCBvbiB0aGUgYE1UWVBFYCB2YWx1ZXMuIFRoYXQncyBjbGVhbmVyLiBMZXQncyBzZWUuLi4gdGhlIGBNVFlQRWBzIHRoYXQgYXJlIHJlbGV2YW50IGhlcmUgYXJlOiBgaGFzaF9uZXQ0YCwgYGhhc2hfbmV0NmAsIGBoYXNoX25ldG5ldDRgLCBgaGFzaF9uZXRuZXQ2YCwgYGhhc2hfbmV0cG9ydDRgLCBgaGFzaF9uZXRwb3J0NmAsIGBoYXNoX25ldGlmYWNlNGAsIGBoYXNoX25ldGlmYWNlNmAsIGBoYXNoX2lwcG9ydG5ldDRgLCBgaGFzaF9pcHBvcnRuZXQ2YCwgYGhhc2hfbmV0cG9ydG5ldDRgLCBhbmQgYGhhc2hfbmV0cG9ydG5ldDZgLlxuXG5UaGUgZnVuY3Rpb25zIGdlbmVyYXRlZCBmb3IgZWFjaCBvZiB0aGVzZSBgTVRZUEVgcyBhcmUgZmFpcmx5IHByZWRpY3RhYmxlLiBXZSBoYXZlOiBge01UWVBFfV9hZGRgLCBge01UWVBFfV9kZWxgLCBge01UWVBFfV9yZXNpemVgLCBge01UWVBFfV9nY2AsIGFuZCwgYmVjYXVzZSBgSVBfU0VUX0hBU0hfV0lUSF9ORVRTYCBpcyBkZWZpbmVkIChhbmQgaXQgKmlzKiBmb3IgdGhlc2UgY2FzZXMpLCBge01UWVBFfV90ZXN0X2NpZHJzYC5cblxuSSBjYW4gY29uZmlybSB0aGF0IGBoYXNoX25ldDRfdGVzdF9jaWRyc2AgaXMsIGluIGZhY3QsIGRlZmluZWQgYmVjYXVzZSBgbXR5cGVfdGVzdF9jaWRyc2AgaXMuXG5cbkxldCBtZSByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zLiBSaWdodCwgdGhlIG9uZXMgdGhhdCBtYXR0ZXIgaGVyZSBhcmU6IGBJUF9TRVRfSEFTSF9JUFBPUlRORVRgLCBgSVBfU0VUX0hBU0hfTkVUYCwgYElQX1NFVF9IQVNIX05FVElGQUNFYCwgYElQX1NFVF9IQVNIX05FVE5FVGAsIGBJUF9TRVRfSEFTSF9ORVRQT1JUYCwgYW5kIGBJUF9TRVRfSEFTSF9ORVRQT1JUTkVUYC4gT2gsIGFuZCB0aGUgb3ZlcmFyY2hpbmcgb25lIGlzIGBJUF9TRVRgLCBvZiBjb3Vyc2UuIFRoaXMgcGF0Y2ggbW9kaWZpZXMgYGlwX3NldF9oYXNoX2dlbi5oYCwgc28gaXQncyBjbGVhcmx5IGNlbnRyYWwgdG8gdGhlIGhhc2ggdHlwZSBnZW5lcmF0aW9uLiBUaGUgbWFjcm8gYElQX1NFVF9IQVNIX1dJVEhfTkVUU2AgaXNuJ3QgYSBrY29uZmlnIG9wdGlvbiwgc28gdGhlIGxpc3QgSSBqdXN0IGdhdmUgaXMgaXQuXG5cbkkgc2hvdWxkIGFsc28gbWFrZSBzdXJlIEkgaGF2ZSB0aGUgZnVsbCBsaXN0IG9mIGdlbmVyYXRlZCBmdW5jdGlvbnMuIExldCdzIHNlZTogYG10eXBlX2FkZF9jaWRyYCBiZWNvbWVzIGB7TVRZUEV9X2FkZF9jaWRyYCwgYG10eXBlX2RlbF9jaWRyYCBiZWNvbWVzIGB7TVRZUEV9X2RlbF9jaWRyYCwgYG10eXBlX2ZsdXNoYCBiZWNvbWVzIGB7TVRZUEV9X2ZsdXNoYCwgYG10eXBlX2FoYXNoX2Rlc3Ryb3lgIGlzIGB7TVRZUEV9X2FoYXNoX2Rlc3Ryb3lgLCBgbXR5cGVfZGVzdHJveWAgaXMgYHtNVFlQRX1fZGVzdHJveWAsIGBtdHlwZV9nY19kb2AgaXMgYHtNVFlQRX1fZ2NfZG9gLCBgbXR5cGVfZ2NgIGlzIGB7TVRZUEV9X2djYCwgYG10eXBlX3Jlc2l6ZWAgaXMgYHtNVFlQRX1fcmVzaXplYCwgYG10eXBlX2FkZGAgaXMgYHtNVFlQRX1fYWRkYCwgYG10eXBlX2RlbGAgaXMgYHtNVFlQRX1fZGVsYCwgYG10eXBlX3Rlc3RfY2lkcnNgIGlzIGB7TVRZUEV9X3Rlc3RfY2lkcnNgLCBhbmQgYG10eXBlX3VyZWZgIGlzIGB7TVRZUEV9X3VyZWZgLlxuXG5BbmQgSSBzZWUgdGhhdCBgSVBTRVRfVE9LRU4oSFRZUEUsIF9jcmVhdGUpYCBleHBhbmRzIHRvIGBoYXNoX25ldF9jcmVhdGVgIGluIGBpcF9zZXRfaGFzaF9uZXQuY2AsIHdoZXJlIGBIVFlQRWAgaXMgYGhhc2hfbmV0YC4gTmVlZCB0byBsb29rIGF0IGBIVFlQRWAgaW4gdGhlIG90aGVyIGZpbGVzIHRvIGVuc3VyZSBjb25zaXN0ZW5jeS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzYzNDIsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4OTAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMTc6MDI6NDEuOTA2Mjk4Mzk2WiIsIlNlcSI6MzQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1ODMxNDQyOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCIjZGVmaW5lIEhUWVBFXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvaXBzZXQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXAuYz0zMz1NT0RVTEVfQUxJQVMoXFxcImlwX3NldF9oYXNoOmlwXFxcIik7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwLmMtMzUtLyogVHlwZSBzcGVjaWZpYyBmdW5jdGlvbiBwcmVmaXggKi9cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwLmM6MzY6I2RlZmluZSBIVFlQRVxcdFxcdGhhc2hfaXBcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwLmMtMzctI2RlZmluZSBJUF9TRVRfSEFTSF9XSVRIX05FVE1BU0tcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBtYWMuYz0zMj1NT0RVTEVfQUxJQVMoXFxcImlwX3NldF9oYXNoOmlwLG1hY1xcXCIpO1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcG1hYy5jLTM0LS8qIFR5cGUgc3BlY2lmaWMgZnVuY3Rpb24gcHJlZml4ICovXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcG1hYy5jOjM1OiNkZWZpbmUgSFRZUEVcXHRcXHRoYXNoX2lwbWFjXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcG1hYy5jLTM2LVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcG1hcmsuYz0zMD1NT0RVTEVfQUxJQVMoXFxcImlwX3NldF9oYXNoOmlwLG1hcmtcXFwiKTtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBtYXJrLmMtMzItLyogVHlwZSBzcGVjaWZpYyBmdW5jdGlvbiBwcmVmaXggKi9cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwbWFyay5jOjMzOiNkZWZpbmUgSFRZUEVcXHRcXHRoYXNoX2lwbWFya1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBtYXJrLmMtMzQtI2RlZmluZSBJUF9TRVRfSEFTSF9XSVRIX01BUktNQVNLXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwcG9ydC5jPTM1PU1PRFVMRV9BTElBUyhcXFwiaXBfc2V0X2hhc2g6aXAscG9ydFxcXCIpO1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcHBvcnQuYy0zNy0vKiBUeXBlIHNwZWNpZmljIGZ1bmN0aW9uIHByZWZpeCAqL1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0LmM6Mzg6I2RlZmluZSBIVFlQRVxcdFxcdGhhc2hfaXBwb3J0XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcHBvcnQuYy0zOS0jZGVmaW5lIElQX1NFVF9IQVNIX1dJVEhfTkVUTUFTS1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcHBvcnRpcC5jPTM0PU1PRFVMRV9BTElBUyhcXFwiaXBfc2V0X2hhc2g6aXAscG9ydCxpcFxcXCIpO1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcHBvcnRpcC5jLTM2LS8qIFR5cGUgc3BlY2lmaWMgZnVuY3Rpb24gcHJlZml4ICovXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcHBvcnRpcC5jOjM3OiNkZWZpbmUgSFRZUEVcXHRcXHRoYXNoX2lwcG9ydGlwXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcHBvcnRpcC5jLTM4LVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcHBvcnRuZXQuYz0zNj1NT0RVTEVfQUxJQVMoXFxcImlwX3NldF9oYXNoOmlwLHBvcnQsbmV0XFxcIik7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwcG9ydG5ldC5jLTM4LS8qIFR5cGUgc3BlY2lmaWMgZnVuY3Rpb24gcHJlZml4ICovXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcHBvcnRuZXQuYzozOTojZGVmaW5lIEhUWVBFXFx0XFx0aGFzaF9pcHBvcnRuZXRcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwcG9ydG5ldC5jLTQwLVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9tYWMuYz0yNT1NT0RVTEVfQUxJQVMoXFxcImlwX3NldF9oYXNoOm1hY1xcXCIpO1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9tYWMuYy0yNy0vKiBUeXBlIHNwZWNpZmljIGZ1bmN0aW9uIHByZWZpeCAqL1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbWFjLmM6Mjg6I2RlZmluZSBIVFlQRVxcdFxcdGhhc2hfbWFjXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9tYWMuYy0yOS1cXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0LmM9MzM9TU9EVUxFX0FMSUFTKFxcXCJpcF9zZXRfaGFzaDpuZXRcXFwiKTtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0LmMtMzUtLyogVHlwZSBzcGVjaWZpYyBmdW5jdGlvbiBwcmVmaXggKi9cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldC5jOjM2OiNkZWZpbmUgSFRZUEVcXHRcXHRoYXNoX25ldFxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0LmMtMzctI2RlZmluZSBJUF9TRVRfSEFTSF9XSVRIX05FVFNcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0aWZhY2UuYz0zNT1NT0RVTEVfQUxJQVMoXFxcImlwX3NldF9oYXNoOm5ldCxpZmFjZVxcXCIpO1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRpZmFjZS5jLTM3LS8qIFR5cGUgc3BlY2lmaWMgZnVuY3Rpb24gcHJlZml4ICovXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRpZmFjZS5jOjM4OiNkZWZpbmUgSFRZUEVcXHRcXHRoYXNoX25ldGlmYWNlXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRpZmFjZS5jLTM5LSNkZWZpbmUgSVBfU0VUX0hBU0hfV0lUSF9ORVRTXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldG5ldC5jPTMyPU1PRFVMRV9BTElBUyhcXFwiaXBfc2V0X2hhc2g6bmV0LG5ldFxcXCIpO1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRuZXQuYy0zNC0vKiBUeXBlIHNwZWNpZmljIGZ1bmN0aW9uIHByZWZpeCAqL1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0bmV0LmM6MzU6I2RlZmluZSBIVFlQRVxcdFxcdGhhc2hfbmV0bmV0XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRuZXQuYy0zNi0jZGVmaW5lIElQX1NFVF9IQVNIX1dJVEhfTkVUU1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRwb3J0LmM9MzU9TU9EVUxFX0FMSUFTKFxcXCJpcF9zZXRfaGFzaDpuZXQscG9ydFxcXCIpO1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRwb3J0LmMtMzctLyogVHlwZSBzcGVjaWZpYyBmdW5jdGlvbiBwcmVmaXggKi9cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldHBvcnQuYzozODojZGVmaW5lIEhUWVBFXFx0XFx0aGFzaF9uZXRwb3J0XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRwb3J0LmMtMzktI2RlZmluZSBJUF9TRVRfSEFTSF9XSVRIX1BST1RPXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldHBvcnRuZXQuYz0zMj1NT0RVTEVfQUxJQVMoXFxcImlwX3NldF9oYXNoOm5ldCxwb3J0LG5ldFxcXCIpO1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRwb3J0bmV0LmMtMzQtLyogVHlwZSBzcGVjaWZpYyBmdW5jdGlvbiBwcmVmaXggKi9cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldHBvcnRuZXQuYzozNTojZGVmaW5lIEhUWVBFXFx0XFx0aGFzaF9uZXRwb3J0bmV0XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRwb3J0bmV0LmMtMzYtI2RlZmluZSBJUF9TRVRfSEFTSF9XSVRIX1BST1RPXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDE3OjAyOjQxLjk2NDYyMDg2NFoiLCJTZXEiOjM1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyNTYwODg3MDUxMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGb2N1c2luZyBvbiBJUCBTZXQgSGFzaCBUYWJsZSBJbXBsZW1lbnRhdGlvbiBmb3IgRnV6emluZyoqXG5cbkFscmlnaHQsIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgZ29hbCBpcyB0byBjcmFmdCBhIHRhcmdldGVkIGZ1enppbmcgY2FtcGFpZ24gZm9yIHRoZSByZWNlbnRseSBtb2RpZmllZCBJUCBzZXQgaGFzaCB0YWJsZSBpbXBsZW1lbnRhdGlvbi4gVGhlIGNoYW5nZXMgcmV2b2x2ZSBhcm91bmQgaG93IENJRFIgbmV0d29ya3MgYXJlIHN0b3JlZCwgc3dpdGNoaW5nIHRvIGFuIFJDVS1wcm90ZWN0ZWQsIGR5bmFtaWNhbGx5IGFsbG9jYXRlZCBhcnJheS4gVGhpcyBpcyBhIGNyaXRpY2FsIGZ1bmN0aW9uYWwgY2hhbmdlIGFuZCBJIG5lZWQgdG8gZW5zdXJlIHRoZSBuZXcgUkNVIGFuZCBsb2NraW5nIGxvZ2ljIGRvZXNuJ3QgaW50cm9kdWNlIHZ1bG5lcmFiaWxpdGllcy5cblxuRmlyc3QsIEkgbmVlZCB0byBpZGVudGlmeSB0aGUga2V5IGZ1bmN0aW9ucyB0byB0YXJnZXQuIFRoZSBpbml0aWFsIGxpc3QgaW5jbHVkZXMgdGhlIGBfY3JlYXRlYCBhbmQgYE1UWVBFYCBmdW5jdGlvbnMuIEhvd2V2ZXIsIHRvIGF2b2lkIG92ZXJ3aGVsbWluZyB0aGUgZnV6emVyIGFuZCB0byBmb2N1cyBvbiB0aGUgY29yZSBtb2RpZmljYXRpb25zLCBJIG5lZWQgYSByZXByZXNlbnRhdGl2ZSBzdWJzZXQuIEkgbmVlZCB0byBpbmNsdWRlOlxuXG4qICAgQ3JlYXRpb24gZnVuY3Rpb25zOiBgaGFzaF9uZXRfY3JlYXRlYCwgYGhhc2hfbmV0bmV0X2NyZWF0ZWAsIGV0Yy5cbiogICBGdW5jdGlvbnMgcmVsYXRlZCB0byBjb3JlIG9wZXJhdGlvbnMgKGBfYWRkYCwgYF9kZWxgLCBgX3Jlc2l6ZWAsIGBfZ2NgLCBgX3Rlc3RfY2lkcnNgKTogYGhhc2hfbmV0NF9hZGRgLCBgaGFzaF9uZXQ0X2RlbGAsIGBoYXNoX25ldDRfdGVzdF9jaWRyc2AsIGV0Yy5cbiogICBBdXhpbGlhcnkgZnVuY3Rpb25zOiBgaGFzaF9uZXQ0X2FkZF9jaWRyYCwgYGhhc2hfbmV0NF9kZWxfY2lkcmAsIGBoYXNoX25ldDRfZmx1c2hgLCBgaGFzaF9uZXQ0X2Rlc3Ryb3lgLCBgaGFzaF9uZXQ0X2djX2RvYCwgYGhhc2hfbmV0NF91cmVmYFxuXG5JJ20gZm9jdXNpbmcgb24gdGhlc2Ugc3BlY2lmaWMgZnVuY3Rpb25zIGJlY2F1c2UgdGhlIGNvcmUgbG9naWMsIHJlbGF0ZWQgdG8gdGhlIENJRFIgYXJyYXksIGlzIGltcGxlbWVudGVkIGluIGBtdHlwZV9hZGRfY2lkcmAsIGBtdHlwZV9kZWxfY2lkcmAsIGBtdHlwZV9mbHVzaGAsIGBtdHlwZV9haGFzaF9kZXN0cm95YCwgYG10eXBlX2Rlc3Ryb3lgLCBgbXR5cGVfZ2NfZG9gLCBgbXR5cGVfZ2NgLCBgbXR5cGVfcmVzaXplYCwgYG10eXBlX2FkZGAsIGBtdHlwZV9kZWxgLCBgbXR5cGVfdGVzdF9jaWRyc2AsIGBtdHlwZV91cmVmYCwgYW5kIGBfY3JlYXRlYC4gVGhlIGxvZ2ljIGlzIGdlbmVyYXRlZCBmcm9tIG1hY3JvcyBzbyBjb3ZlcmluZyB0aGUgbmV0NCBvbmVzIHNob3VsZCBjb3ZlciBuZXQ2IGFuZCBuZXRuZXQ0LCBldGMuXG5cbkkgbmVlZCB0byBtYWtlIHN1cmUgdGhhdCB0aGVzZSBmdW5jdGlvbnMgY2FuIGFjdHVhbGx5IGJlIHJlYWNoZWQgYnkgdGhlIGZ1enplci4gRnVuY3Rpb25zIHdob3NlIGFkZHJlc3NlcyBhcmUgdGFrZW4sIGVpdGhlciBkaXJlY3RseSBvciBpbmRpcmVjdGx5IChlLmcuLCB0aHJvdWdoIGZ1bmN0aW9uIHBvaW50ZXJzKSwgYXJlIGd1YXJhbnRlZWQgdG8gYmUgYXZhaWxhYmxlIGluIHRoZSBzeW1ib2wgdGFibGUuIFRoZXJlZm9yZSwgSSdsbCBmaWx0ZXIgdGhlIGxpc3QgYmFzZWQgb24gdGhpcyBjcml0ZXJpYS5cblxuQWZ0ZXIgdmVyaWZ5aW5nIHRoaXMsIEkgd2lsbCBpbmNsdWRlOlxuXG4qICAgYGhhc2hfbmV0NF9hZGRgXG4qICAgYGhhc2hfbmV0NF9kZWxgXG4qICAgYGhhc2hfbmV0NF90ZXN0YFxuKiAgIGBoYXNoX25ldDRfcmVzaXplYFxuKiAgIGBoYXNoX25ldDRfZ2NgXG4qICAgYGhhc2hfbmV0NF9mbHVzaGBcbiogICBgaGFzaF9uZXQ0X2Rlc3Ryb3lgXG4qICAgYGhhc2hfbmV0NF91cmVmYFxuKiAgIGBoYXNoX25ldF9jcmVhdGVgXG4qICAgYGhhc2hfbmV0Nl9hZGRgXG4qICAgYGhhc2hfbmV0Nl9kZWxgXG4qICAgYGhhc2hfbmV0Nl90ZXN0YFxuKiAgIGBoYXNoX25ldDZfcmVzaXplYFxuKiAgIGBoYXNoX25ldDZfZ2NgXG4qICAgYGhhc2hfbmV0Nl9mbHVzaGBcbiogICBgaGFzaF9uZXQ2X2Rlc3Ryb3lgXG4qICAgYGhhc2hfbmV0Nl91cmVmYFxuKiAgIGBoYXNoX25ldG5ldDRfYWRkYFxuKiAgIGBoYXNoX25ldG5ldDRfZGVsYFxuKiAgIGBoYXNoX25ldG5ldDRfcmVzaXplYFxuKiAgIGBoYXNoX25ldG5ldDRfZ2NgXG4qICAgYGhhc2hfbmV0bmV0X2NyZWF0ZWBcbiogICBgaGFzaF9uZXQ0X2thZHRgXG4qICAgYGhhc2hfbmV0Nl9rYWR0YFxuKiAgIGBoYXNoX25ldG5ldDRfa2FkdGBcbiogICBgaGFzaF9uZXRuZXQ2X2thZHRgXG5cblRoaXMgc2hvdWxkIGdpdmUgZ29vZCBjb3ZlcmFnZSBvZiB0aGUgbW9kaWZpZWQgZnVuY3Rpb25hbGl0eSwgc2luY2UgdGhlIGNvcmUgY2hhbmdlcyBhcmUgaW4gdGhlIGBpcF9zZXRfaGFzaF9nZW4uaGAgZmlsZSwgYW5kIHRoZSBgLmNgIGZpbGVzIGp1c3QgY2FsbCB0aGUgbW9kaWZpZWQgbG9naWMuXG5cbk5leHQsIEkgbmVlZCB0byBjb25maXJtIHRoZSByZWxldmFudCBLY29uZmlnIG9wdGlvbnM6IGBORVRGSUxURVJgLCBgSVBfU0VUYCwgYElQX1NFVF9IQVNIX05FVGAsIGBJUF9TRVRfSEFTSF9ORVRORVRgLCBhbmQgc28gb24gZm9yIHRoZSB2YXJpb3VzIGhhc2ggdGFibGUgdHlwZXMuIEkgd2lsbCBlbmFibGUgdGhlc2UgaW4gbXkgZnV6emluZyBlbnZpcm9ubWVudC5cblxuRmluYWxseSwgSSB3aWxsIGFuYWx5emUgdGhlIHBhdGNoIGFnYWluIHRvIGVuc3VyZSB0aGF0IG5vIGZ1cnRoZXIgZm9jdXMgc3ltYm9scyBuZWVkIHRvIGJlIGluY2x1ZGVkLiBXaXRoIHRoaXMgY2FyZWZ1bGx5IGNyYWZ0ZWQgbGlzdCwgSSdtIGNvbmZpZGVudCB0aGF0IHRoZSBmdXp6ZXIgd2lsbCBiZSBhYmxlIHRvIGVmZmVjdGl2ZWx5IGV4ZXJjaXNlIHRoZSBuZXcgUkNVLWJhc2VkIENJRFIgbWFuYWdlbWVudCBhbmQgbG9ja2luZyBsb2dpYywgZXhwb3NpbmcgYW55IHBvdGVudGlhbCBpc3N1ZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM5NjAyLCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzE0MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wMlQxNzowMzowNy41NzM0OTQ2ODZaIiwiU2VxIjozNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyOTQ4NjU5MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJrYWR0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXQuYz0xMTI9c3RhdGljIGludFxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0LmM6MTEzOmhhc2hfbmV0NF9rYWR0KHN0cnVjdCBpcF9zZXQgKnNldCwgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldC5jLTExNC1cXHQgICAgICAgY29uc3Qgc3RydWN0IHh0X2FjdGlvbl9wYXJhbSAqcGFyLFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXQuYz0yODY9c3RhdGljIGludFxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0LmM6Mjg3Omhhc2hfbmV0Nl9rYWR0KHN0cnVjdCBpcF9zZXQgKnNldCwgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldC5jLTI4OC1cXHQgICAgICAgY29uc3Qgc3RydWN0IHh0X2FjdGlvbl9wYXJhbSAqcGFyLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMlQxNzowMzowNy44MDI5ODU4OTdaIiwiU2VxIjozNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzI0NTEyMjg0ODAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBpcHNldCBIYXNoIFRhYmxlIEltcGxlbWVudGF0aW9uKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBgaGFzaF9uZXQ0X3ZhcmlhbnRgIHN0cnVjdHVyZSBhbmQgaW1tZWRpYXRlbHkgY29uZmlybWluZyB0aGF0IGBoYXNoX25ldDRfa2FkdGAgYW5kIGBoYXNoX25ldDRfdWFkdGAgYXJlIGluZGVlZCBwcmVzZW50LiBHb29kLiBUaGF0J3MgdGhlIGJhc2VsaW5lLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgYWRkIHRoZSBhbmFsb2dvdXMgZnVuY3Rpb25zIGZvciBJUHY2IGFuZCBuZXQtbmV0IGNvbWJpbmF0aW9ucywgc28gSSdsbCBhZGQgYGhhc2hfbmV0Nl9rYWR0YCwgYGhhc2hfbmV0Nl91YWR0YCwgYGhhc2hfbmV0bmV0NF9rYWR0YCwgYW5kIGBoYXNoX25ldG5ldDRfdWFkdGAgdG8gdGhlIGxpc3QuIEknbSBleHBhbmRpbmcgdGhlIHNjb3BlIHRvIGNvdmVyIElQdjYgYW5kIG5ldC1uZXQgc2NlbmFyaW9zLlxuXG5Ob3csIGxldCdzIHRha2UgYSBsb29rIGF0IHRoZSBrZXkgc3ltYm9scyByZWxhdGVkIHRvIHRoZSBoYXNoIHRhYmxlIGZ1bmN0aW9uczogSSd2ZSBnb3QgYSBjb21wcmVoZW5zaXZlIGxpc3Qgb2YgdGhlIGNvcmUgZnVuY3Rpb25zLCBpbmNsdWRpbmcgYWRkLCBkZWxldGUsIHRlc3QsIHJlc2l6ZSwgZ2FyYmFnZSBjb2xsZWN0aW9uLCBmbHVzaCwgZGVzdHJveSwgYW5kIHVyZWYgZm9yIElQdjQuIEknbGwgbmVlZCB0byByZW1lbWJlciB0byBjaGVjayBhbGwgdGhlIHJlbGV2YW50IElQdjYgYW5kIG5ldC1uZXQgdmFyaWFudHMuIFRoaXMgbG9va3MgbGlrZSBhIGNvbXBsZXRlIGxpc3QgZm9yIHRoZSBpbW1lZGlhdGUgYXJlYSBvZiBpbnRlcmVzdC4gVGhpcyBpcyBhbHNvIHVzZWZ1bCBmb3IgY3JlYXRpbmcgYSB0ZXN0IHN1aXRlLlxuXG5UaGUgY29uZmlndXJhdGlvbiBvcHRpb25zIGFyZSBhbHNvIHVzZWZ1bCwgYW5kIEknbSBub3RpbmcgdGhlIHJlbGV2YW50IGBORVRGSUxURVJgLCBgSVBfU0VUYCwgYElQX1NFVF9IQVNIX05FVGAsIGBJUF9TRVRfSEFTSF9ORVRORVRgLCBhbmQgcmVsYXRlZCBoYXNoIHR5cGVzLiBUaGlzIGdpdmVzIG1lIGNvbnRleHQuXG5cbkZyb20gYSBmdW5jdGlvbmFsIHBlcnNwZWN0aXZlLCB0aGUgcGF0Y2ggZnVuZGFtZW50YWxseSBhbHRlcnMgdGhlIGNvcmUgaGFzaCB0YWJsZSBpbXBsZW1lbnRhdGlvbiB3aXRoaW4gdGhlIG5ldGZpbHRlciBpcHNldCBtb2R1bGUsIHdoaWNoIGlzIGEga2V5IHBhcnQgb2YgdGhlIGtlcm5lbCdzIG5ldHdvcmsgbWFuYWdlbWVudC4gV2UncmUgbG9va2luZyBhdCBhIHNoaWZ0IGZyb20gYSBmaXhlZC1zaXplIGFycmF5IGZvciBzdG9yaW5nIENJRFIgbmV0d29ya3MgdG8gYSBkeW5hbWljYWxseSBhbGxvY2F0ZWQsIFJDVS1wcm90ZWN0ZWQgYXJyYXkuIFRoZSByZXNpemluZyBhbmQgZ2FyYmFnZSBjb2xsZWN0aW9uLCB0aGUgY2VudHJhbCBrZXJuZWwgbG9naWMsIGFyZSBhbHNvIGJlaW5nIHVwZGF0ZWQuIFRoZSBjaGFuZ2VzIGludHJvZHVjZWQgYXJlIGNyaXRpY2FsLCBwb3RlbnRpYWxseSBpbXBhY3RpbmcgYSByYW5nZSBvZiBjb3JlIGtlcm5lbCBvcGVyYXRpb25zLCBpbmNsdWRpbmcgbG9ja2luZyBhbmQgbWVtb3J5IG1hbmFnZW1lbnQuIEFueSBjaGFuZ2UgdGhpcyBkZWVwIGRlc2VydmVzIGNhcmVmdWwgc2NydXRpbnksIGFuZCBJIG11c3QgYmUgc3VyZSB0byByaWdvcm91c2x5IGZ1enogdGhpcyB0byB1bmNvdmVyIHBvdGVudGlhbCBpc3N1ZXMgcmVsYXRlZCB0byB1c2UtYWZ0ZXItZnJlZSBjb25kaXRpb25zLCBtZW1vcnkgbGVha3MsIGFuZCBhbnkgcmFjZSBjb25kaXRpb25zIHRoZSBuZXcgUkNVIGFuZCBsb2NraW5nIGxvZ2ljIG1pZ2h0IGludHJvZHVjZS4gVGhlc2UgYXJlICpjcml0aWNhbCogYXJlYXMgdG8gdGVzdC4gSSBuZWVkIHRvIGVuc3VyZSB0aGUgcm9idXN0bmVzcyBhbmQgc2VjdXJpdHkgb2YgdGhlIG5ldyBpbXBsZW1lbnRhdGlvbi5cbkknbSByZWFkeSB0byBjYWxsIGBzZXQtcmVzdWx0c2Agbm93LlxuXG5cbiIsIklucHV0VG9rZW5zIjo0Mzk2NiwiT3V0cHV0VG9rZW5zIjo0NTQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4MDUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMTc6MDM6NDAuMjU0MjE3NjU3WiIsIlNlcSI6MzgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODA2MTc4NDcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5FVEZJTFRFUlwiLFxuICAgIFwiSVBfU0VUXCIsXG4gICAgXCJJUF9TRVRfSEFTSF9ORVRcIixcbiAgICBcIklQX1NFVF9IQVNIX05FVE5FVFwiLFxuICAgIFwiSVBfU0VUX0hBU0hfTkVUUE9SVFwiLFxuICAgIFwiSVBfU0VUX0hBU0hfTkVUSUZBQ0VcIixcbiAgICBcIklQX1NFVF9IQVNIX0lQUE9SVE5FVFwiLFxuICAgIFwiSVBfU0VUX0hBU0hfTkVUUE9SVE5FVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImhhc2hfbmV0NF9hZGRcIixcbiAgICBcImhhc2hfbmV0NF9kZWxcIixcbiAgICBcImhhc2hfbmV0NF90ZXN0XCIsXG4gICAgXCJoYXNoX25ldDRfcmVzaXplXCIsXG4gICAgXCJoYXNoX25ldDRfZ2NcIixcbiAgICBcImhhc2hfbmV0NF9mbHVzaFwiLFxuICAgIFwiaGFzaF9uZXQ0X2Rlc3Ryb3lcIixcbiAgICBcImhhc2hfbmV0NF91cmVmXCIsXG4gICAgXCJoYXNoX25ldDRfa2FkdFwiLFxuICAgIFwiaGFzaF9uZXQ0X3VhZHRcIixcbiAgICBcImhhc2hfbmV0X2NyZWF0ZVwiLFxuICAgIFwiaGFzaF9uZXQ2X2FkZFwiLFxuICAgIFwiaGFzaF9uZXQ2X2RlbFwiLFxuICAgIFwiaGFzaF9uZXQ2X3Rlc3RcIixcbiAgICBcImhhc2hfbmV0Nl9yZXNpemVcIixcbiAgICBcImhhc2hfbmV0Nl9nY1wiLFxuICAgIFwiaGFzaF9uZXQ2X2thZHRcIixcbiAgICBcImhhc2hfbmV0Nl91YWR0XCIsXG4gICAgXCJoYXNoX25ldG5ldDRfYWRkXCIsXG4gICAgXCJoYXNoX25ldG5ldDRfcmVzaXplXCIsXG4gICAgXCJoYXNoX25ldG5ldDRfZ2NcIixcbiAgICBcImhhc2hfbmV0bmV0NF9rYWR0XCIsXG4gICAgXCJoYXNoX25ldG5ldDRfdWFkdFwiLFxuICAgIFwiaGFzaF9uZXRuZXRfY3JlYXRlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNvcmUgaGFzaCB0YWJsZSBpbXBsZW1lbnRhdGlvbiBmb3IgbmV0ZmlsdGVyIGlwc2V0IChzcGVjaWZpY2FsbHkgdGhlIGdlbmVyaWMgaGFzaCB0eXBlcyBpbiBpcF9zZXRfaGFzaF9nZW4uaCkuIEl0IGNoYW5nZXMgaG93IENJRFIgbmV0d29ya3MgYXJlIHN0b3JlZCwgbW92aW5nIGZyb20gYSBmaXhlZC1zaXplIGFycmF5IHRvIGFuIFJDVS1wcm90ZWN0ZWQgZHluYW1pY2FsbHkgYWxsb2NhdGVkIGFycmF5LCBhbmQgdXBkYXRlcyB0aGUgcmVzaXppbmcgYW5kIGdhcmJhZ2UgY29sbGVjdGlvbiBsb2dpYyB0byB1c2UgYSBuZXcgbG9jayBhbmQgYSBgcmVzaXppbmdgIGZsYWcuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0byByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMgYW5kIHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIHRoZSBuZXcgUkNVIGFuZCBsb2NraW5nIGxvZ2ljIGRvZXNuJ3QgaW50cm9kdWNlIHVzZS1hZnRlci1mcmVlLCBtZW1vcnkgbGVha3MsIG9yIHJhY2UgY29uZGl0aW9ucy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORVRGSUxURVJcIixcbiAgICBcIklQX1NFVFwiLFxuICAgIFwiSVBfU0VUX0hBU0hfTkVUXCIsXG4gICAgXCJJUF9TRVRfSEFTSF9ORVRORVRcIixcbiAgICBcIklQX1NFVF9IQVNIX05FVFBPUlRcIixcbiAgICBcIklQX1NFVF9IQVNIX05FVElGQUNFXCIsXG4gICAgXCJJUF9TRVRfSEFTSF9JUFBPUlRORVRcIixcbiAgICBcIklQX1NFVF9IQVNIX05FVFBPUlRORVRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJoYXNoX25ldDRfYWRkXCIsXG4gICAgXCJoYXNoX25ldDRfZGVsXCIsXG4gICAgXCJoYXNoX25ldDRfdGVzdFwiLFxuICAgIFwiaGFzaF9uZXQ0X3Jlc2l6ZVwiLFxuICAgIFwiaGFzaF9uZXQ0X2djXCIsXG4gICAgXCJoYXNoX25ldDRfZmx1c2hcIixcbiAgICBcImhhc2hfbmV0NF9kZXN0cm95XCIsXG4gICAgXCJoYXNoX25ldDRfdXJlZlwiLFxuICAgIFwiaGFzaF9uZXQ0X2thZHRcIixcbiAgICBcImhhc2hfbmV0NF91YWR0XCIsXG4gICAgXCJoYXNoX25ldF9jcmVhdGVcIixcbiAgICBcImhhc2hfbmV0Nl9hZGRcIixcbiAgICBcImhhc2hfbmV0Nl9kZWxcIixcbiAgICBcImhhc2hfbmV0Nl90ZXN0XCIsXG4gICAgXCJoYXNoX25ldDZfcmVzaXplXCIsXG4gICAgXCJoYXNoX25ldDZfZ2NcIixcbiAgICBcImhhc2hfbmV0Nl9rYWR0XCIsXG4gICAgXCJoYXNoX25ldDZfdWFkdFwiLFxuICAgIFwiaGFzaF9uZXRuZXQ0X2FkZFwiLFxuICAgIFwiaGFzaF9uZXRuZXQ0X3Jlc2l6ZVwiLFxuICAgIFwiaGFzaF9uZXRuZXQ0X2djXCIsXG4gICAgXCJoYXNoX25ldG5ldDRfa2FkdFwiLFxuICAgIFwiaGFzaF9uZXRuZXQ0X3VhZHRcIixcbiAgICBcImhhc2hfbmV0bmV0X2NyZWF0ZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjb3JlIGhhc2ggdGFibGUgaW1wbGVtZW50YXRpb24gZm9yIG5ldGZpbHRlciBpcHNldCAoc3BlY2lmaWNhbGx5IHRoZSBnZW5lcmljIGhhc2ggdHlwZXMgaW4gaXBfc2V0X2hhc2hfZ2VuLmgpLiBJdCBjaGFuZ2VzIGhvdyBDSURSIG5ldHdvcmtzIGFyZSBzdG9yZWQsIG1vdmluZyBmcm9tIGEgZml4ZWQtc2l6ZSBhcnJheSB0byBhbiBSQ1UtcHJvdGVjdGVkIGR5bmFtaWNhbGx5IGFsbG9jYXRlZCBhcnJheSwgYW5kIHVwZGF0ZXMgdGhlIHJlc2l6aW5nIGFuZCBnYXJiYWdlIGNvbGxlY3Rpb24gbG9naWMgdG8gdXNlIGEgbmV3IGxvY2sgYW5kIGEgYHJlc2l6aW5nYCBmbGFnLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljIGFuZCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSB0aGUgbmV3IFJDVSBhbmQgbG9ja2luZyBsb2dpYyBkb2Vzbid0IGludHJvZHVjZSB1c2UtYWZ0ZXItZnJlZSwgbWVtb3J5IGxlYWtzLCBvciByYWNlIGNvbmRpdGlvbnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow7f4nr[1] Phase: Succeeded StartedAt: 2026-07-02 17:03:51 +0000 UTC FinishedAt: 2026-07-02 17:03:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7f4nr[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-02 17:03:51 +0000 UTC FinishedAt: 2026-07-02 17:03:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7f4nr[2] Phase: Succeeded StartedAt: 2026-07-02 17:03:51 +0000 UTC FinishedAt: 2026-07-02 21:39:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7f4nr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f456c1922c49e6be5ce407ddb74a6e61af5b65cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","IP_SET","IP_SET_HASH_NET","IP_SET_HASH_NETNET","IP_SET_HASH_NETPORT","IP_SET_HASH_NETIFACE","IP_SET_HASH_IPPORTNET","IP_SET_HASH_NETPORTNET"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-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":["hash_net4_add","hash_net4_del","hash_net4_test","hash_net4_resize","hash_net4_gc","hash_net4_flush","hash_net4_destroy","hash_net4_uref","hash_net4_kadt","hash_net4_uadt","hash_net_create","hash_net6_add","hash_net6_del","hash_net6_test","hash_net6_resize","hash_net6_gc","hash_net6_kadt","hash_net6_uadt","hash_netnet4_add","hash_netnet4_resize","hash_netnet4_gc","hash_netnet4_kadt","hash_netnet4_uadt","hash_netnet_create"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f456c1922c49e6be5ce407ddb74a6e61af5b65cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","IP_SET","IP_SET_HASH_NET","IP_SET_HASH_NETNET","IP_SET_HASH_NETPORT","IP_SET_HASH_NETIFACE","IP_SET_HASH_IPPORTNET","IP_SET_HASH_NETPORTNET"],"series_id":"23c1062d-3d3a-4533-b7ff-a1c41c990646","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-07-02 17:03:51 +0000 UTC FinishedAt: 2026-07-02 21:39:32 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"f456c1922c49e6be5ce407ddb74a6e61af5b65cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","IP_SET","IP_SET_HASH_NET","IP_SET_HASH_NETNET","IP_SET_HASH_NETPORT","IP_SET_HASH_NETIFACE","IP_SET_HASH_IPPORTNET","IP_SET_HASH_NETPORTNET"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-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":["hash_net4_add","hash_net4_del","hash_net4_test","hash_net4_resize","hash_net4_gc","hash_net4_flush","hash_net4_destroy","hash_net4_uref","hash_net4_kadt","hash_net4_uadt","hash_net_create","hash_net6_add","hash_net6_del","hash_net6_test","hash_net6_resize","hash_net6_gc","hash_net6_kadt","hash_net6_uadt","hash_netnet4_add","hash_netnet4_resize","hash_netnet4_gc","hash_netnet4_kadt","hash_netnet4_uadt","hash_netnet_create"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"f456c1922c49e6be5ce407ddb74a6e61af5b65cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","IP_SET","IP_SET_HASH_NET","IP_SET_HASH_NETNET","IP_SET_HASH_NETPORT","IP_SET_HASH_NETIFACE","IP_SET_HASH_IPPORTNET","IP_SET_HASH_NETPORTNET"],"series_id":"23c1062d-3d3a-4533-b7ff-a1c41c990646","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflow7f4nr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f456c1922c49e6be5ce407ddb74a6e61af5b65cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","IP_SET","IP_SET_HASH_NET","IP_SET_HASH_NETNET","IP_SET_HASH_NETPORT","IP_SET_HASH_NETIFACE","IP_SET_HASH_IPPORTNET","IP_SET_HASH_NETPORTNET"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-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":["hash_net4_add","hash_net4_del","hash_net4_test","hash_net4_resize","hash_net4_gc","hash_net4_flush","hash_net4_destroy","hash_net4_uref","hash_net4_kadt","hash_net4_uadt","hash_net_create","hash_net6_add","hash_net6_del","hash_net6_test","hash_net6_resize","hash_net6_gc","hash_net6_kadt","hash_net6_uadt","hash_netnet4_add","hash_netnet4_resize","hash_netnet4_gc","hash_netnet4_kadt","hash_netnet4_uadt","hash_netnet_create"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f456c1922c49e6be5ce407ddb74a6e61af5b65cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","IP_SET","IP_SET_HASH_NET","IP_SET_HASH_NETNET","IP_SET_HASH_NETPORT","IP_SET_HASH_NETIFACE","IP_SET_HASH_IPPORTNET","IP_SET_HASH_NETPORTNET"],"series_id":"23c1062d-3d3a-4533-b7ff-a1c41c990646","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-07-02 17:03:51 +0000 UTC FinishedAt: 2026-07-02 17:04:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7f4nr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f456c1922c49e6be5ce407ddb74a6e61af5b65cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","IP_SET","IP_SET_HASH_NET","IP_SET_HASH_NETNET","IP_SET_HASH_NETPORT","IP_SET_HASH_NETIFACE","IP_SET_HASH_IPPORTNET","IP_SET_HASH_NETPORTNET"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-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":["hash_net4_add","hash_net4_del","hash_net4_test","hash_net4_resize","hash_net4_gc","hash_net4_flush","hash_net4_destroy","hash_net4_uref","hash_net4_kadt","hash_net4_uadt","hash_net_create","hash_net6_add","hash_net6_del","hash_net6_test","hash_net6_resize","hash_net6_gc","hash_net6_kadt","hash_net6_uadt","hash_netnet4_add","hash_netnet4_resize","hash_netnet4_gc","hash_netnet4_kadt","hash_netnet4_uadt","hash_netnet_create"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f456c1922c49e6be5ce407ddb74a6e61af5b65cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","IP_SET","IP_SET_HASH_NET","IP_SET_HASH_NETNET","IP_SET_HASH_NETPORT","IP_SET_HASH_NETIFACE","IP_SET_HASH_IPPORTNET","IP_SET_HASH_NETPORTNET"],"series_id":"23c1062d-3d3a-4533-b7ff-a1c41c990646","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-07-02 17:03:51 +0000 UTC FinishedAt: 2026-07-02 17:03:58 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"f456c1922c49e6be5ce407ddb74a6e61af5b65cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","IP_SET","IP_SET_HASH_NET","IP_SET_HASH_NETNET","IP_SET_HASH_NETPORT","IP_SET_HASH_NETIFACE","IP_SET_HASH_IPPORTNET","IP_SET_HASH_NETPORTNET"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-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-workflow7f4nr/series-workflow7f4nr-convert-artifact-73567962/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow7f4nr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f456c1922c49e6be5ce407ddb74a6e61af5b65cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","IP_SET","IP_SET_HASH_NET","IP_SET_HASH_NETNET","IP_SET_HASH_NETPORT","IP_SET_HASH_NETIFACE","IP_SET_HASH_IPPORTNET","IP_SET_HASH_NETPORTNET"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-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":["hash_net4_add","hash_net4_del","hash_net4_test","hash_net4_resize","hash_net4_gc","hash_net4_flush","hash_net4_destroy","hash_net4_uref","hash_net4_kadt","hash_net4_uadt","hash_net_create","hash_net6_add","hash_net6_del","hash_net6_test","hash_net6_resize","hash_net6_gc","hash_net6_kadt","hash_net6_uadt","hash_netnet4_add","hash_netnet4_resize","hash_netnet4_gc","hash_netnet4_kadt","hash_netnet4_uadt","hash_netnet_create"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f456c1922c49e6be5ce407ddb74a6e61af5b65cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","IP_SET","IP_SET_HASH_NET","IP_SET_HASH_NETNET","IP_SET_HASH_NETPORT","IP_SET_HASH_NETIFACE","IP_SET_HASH_IPPORTNET","IP_SET_HASH_NETPORTNET"],"series_id":"23c1062d-3d3a-4533-b7ff-a1c41c990646","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-07-02 17:04:01 +0000 UTC FinishedAt: 2026-07-02 17:53:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7f4nr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f456c1922c49e6be5ce407ddb74a6e61af5b65cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","IP_SET","IP_SET_HASH_NET","IP_SET_HASH_NETNET","IP_SET_HASH_NETPORT","IP_SET_HASH_NETIFACE","IP_SET_HASH_IPPORTNET","IP_SET_HASH_NETPORTNET"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-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":["hash_net4_add","hash_net4_del","hash_net4_test","hash_net4_resize","hash_net4_gc","hash_net4_flush","hash_net4_destroy","hash_net4_uref","hash_net4_kadt","hash_net4_uadt","hash_net_create","hash_net6_add","hash_net6_del","hash_net6_test","hash_net6_resize","hash_net6_gc","hash_net6_kadt","hash_net6_uadt","hash_netnet4_add","hash_netnet4_resize","hash_netnet4_gc","hash_netnet4_kadt","hash_netnet4_uadt","hash_netnet_create"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f456c1922c49e6be5ce407ddb74a6e61af5b65cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","IP_SET","IP_SET_HASH_NET","IP_SET_HASH_NETNET","IP_SET_HASH_NETPORT","IP_SET_HASH_NETIFACE","IP_SET_HASH_IPPORTNET","IP_SET_HASH_NETPORTNET"],"series_id":"23c1062d-3d3a-4533-b7ff-a1c41c990646","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-07-02 17:04:01 +0000 UTC FinishedAt: 2026-07-02 17:53:48 +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:*e6b64bf0-8f9d-4470-887b-be825f16916c,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-workflow7f4nr/series-workflow7f4nr-convert-artifact-73567962/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": "4d913c5f-544d-4b92-aabb-2fee0c83b83e", "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-workflow7f4nr/series-workflow7f4nr-build-action-2710619016/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow7f4nr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f456c1922c49e6be5ce407ddb74a6e61af5b65cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","IP_SET","IP_SET_HASH_NET","IP_SET_HASH_NETNET","IP_SET_HASH_NETPORT","IP_SET_HASH_NETIFACE","IP_SET_HASH_IPPORTNET","IP_SET_HASH_NETPORTNET"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-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":["hash_net4_add","hash_net4_del","hash_net4_test","hash_net4_resize","hash_net4_gc","hash_net4_flush","hash_net4_destroy","hash_net4_uref","hash_net4_kadt","hash_net4_uadt","hash_net_create","hash_net6_add","hash_net6_del","hash_net6_test","hash_net6_resize","hash_net6_gc","hash_net6_kadt","hash_net6_uadt","hash_netnet4_add","hash_netnet4_resize","hash_netnet4_gc","hash_netnet4_kadt","hash_netnet4_uadt","hash_netnet_create"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f456c1922c49e6be5ce407ddb74a6e61af5b65cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","IP_SET","IP_SET_HASH_NET","IP_SET_HASH_NETNET","IP_SET_HASH_NETPORT","IP_SET_HASH_NETIFACE","IP_SET_HASH_IPPORTNET","IP_SET_HASH_NETPORTNET"],"series_id":"23c1062d-3d3a-4533-b7ff-a1c41c990646","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-07-02 17:04:01 +0000 UTC FinishedAt: 2026-07-02 17:53:32 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*e6b64bf0-8f9d-4470-887b-be825f16916c,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-workflow7f4nr/series-workflow7f4nr-convert-artifact-73567962/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": "4d913c5f-544d-4b92-aabb-2fee0c83b83e", "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-workflow7f4nr/series-workflow7f4nr-build-action-2710619016/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow7f4nr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f456c1922c49e6be5ce407ddb74a6e61af5b65cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","IP_SET","IP_SET_HASH_NET","IP_SET_HASH_NETNET","IP_SET_HASH_NETPORT","IP_SET_HASH_NETIFACE","IP_SET_HASH_IPPORTNET","IP_SET_HASH_NETPORTNET"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-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":["hash_net4_add","hash_net4_del","hash_net4_test","hash_net4_resize","hash_net4_gc","hash_net4_flush","hash_net4_destroy","hash_net4_uref","hash_net4_kadt","hash_net4_uadt","hash_net_create","hash_net6_add","hash_net6_del","hash_net6_test","hash_net6_resize","hash_net6_gc","hash_net6_kadt","hash_net6_uadt","hash_netnet4_add","hash_netnet4_resize","hash_netnet4_gc","hash_netnet4_kadt","hash_netnet4_uadt","hash_netnet_create"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f456c1922c49e6be5ce407ddb74a6e61af5b65cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","IP_SET","IP_SET_HASH_NET","IP_SET_HASH_NETNET","IP_SET_HASH_NETPORT","IP_SET_HASH_NETIFACE","IP_SET_HASH_IPPORTNET","IP_SET_HASH_NETPORTNET"],"series_id":"23c1062d-3d3a-4533-b7ff-a1c41c990646","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-07-02 17:53:48 +0000 UTC FinishedAt: 2026-07-02 17:53:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7f4nr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f456c1922c49e6be5ce407ddb74a6e61af5b65cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","IP_SET","IP_SET_HASH_NET","IP_SET_HASH_NETNET","IP_SET_HASH_NETPORT","IP_SET_HASH_NETIFACE","IP_SET_HASH_IPPORTNET","IP_SET_HASH_NETPORTNET"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-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":["hash_net4_add","hash_net4_del","hash_net4_test","hash_net4_resize","hash_net4_gc","hash_net4_flush","hash_net4_destroy","hash_net4_uref","hash_net4_kadt","hash_net4_uadt","hash_net_create","hash_net6_add","hash_net6_del","hash_net6_test","hash_net6_resize","hash_net6_gc","hash_net6_kadt","hash_net6_uadt","hash_netnet4_add","hash_netnet4_resize","hash_netnet4_gc","hash_netnet4_kadt","hash_netnet4_uadt","hash_netnet_create"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f456c1922c49e6be5ce407ddb74a6e61af5b65cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","IP_SET","IP_SET_HASH_NET","IP_SET_HASH_NETNET","IP_SET_HASH_NETPORT","IP_SET_HASH_NETIFACE","IP_SET_HASH_IPPORTNET","IP_SET_HASH_NETPORTNET"],"series_id":"23c1062d-3d3a-4533-b7ff-a1c41c990646","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-07-02 17:53:48 +0000 UTC FinishedAt: 2026-07-02 17:53:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7f4nr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f456c1922c49e6be5ce407ddb74a6e61af5b65cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","IP_SET","IP_SET_HASH_NET","IP_SET_HASH_NETNET","IP_SET_HASH_NETPORT","IP_SET_HASH_NETIFACE","IP_SET_HASH_IPPORTNET","IP_SET_HASH_NETPORTNET"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-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":["hash_net4_add","hash_net4_del","hash_net4_test","hash_net4_resize","hash_net4_gc","hash_net4_flush","hash_net4_destroy","hash_net4_uref","hash_net4_kadt","hash_net4_uadt","hash_net_create","hash_net6_add","hash_net6_del","hash_net6_test","hash_net6_resize","hash_net6_gc","hash_net6_kadt","hash_net6_uadt","hash_netnet4_add","hash_netnet4_resize","hash_netnet4_gc","hash_netnet4_kadt","hash_netnet4_uadt","hash_netnet_create"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f456c1922c49e6be5ce407ddb74a6e61af5b65cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","IP_SET","IP_SET_HASH_NET","IP_SET_HASH_NETNET","IP_SET_HASH_NETPORT","IP_SET_HASH_NETIFACE","IP_SET_HASH_IPPORTNET","IP_SET_HASH_NETPORTNET"],"series_id":"23c1062d-3d3a-4533-b7ff-a1c41c990646","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-07-02 17:53:48 +0000 UTC FinishedAt: 2026-07-02 17:55:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7f4nr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f456c1922c49e6be5ce407ddb74a6e61af5b65cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","IP_SET","IP_SET_HASH_NET","IP_SET_HASH_NETNET","IP_SET_HASH_NETPORT","IP_SET_HASH_NETIFACE","IP_SET_HASH_IPPORTNET","IP_SET_HASH_NETPORTNET"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-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":["hash_net4_add","hash_net4_del","hash_net4_test","hash_net4_resize","hash_net4_gc","hash_net4_flush","hash_net4_destroy","hash_net4_uref","hash_net4_kadt","hash_net4_uadt","hash_net_create","hash_net6_add","hash_net6_del","hash_net6_test","hash_net6_resize","hash_net6_gc","hash_net6_kadt","hash_net6_uadt","hash_netnet4_add","hash_netnet4_resize","hash_netnet4_gc","hash_netnet4_kadt","hash_netnet4_uadt","hash_netnet_create"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f456c1922c49e6be5ce407ddb74a6e61af5b65cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","IP_SET","IP_SET_HASH_NET","IP_SET_HASH_NETNET","IP_SET_HASH_NETPORT","IP_SET_HASH_NETIFACE","IP_SET_HASH_IPPORTNET","IP_SET_HASH_NETPORTNET"],"series_id":"23c1062d-3d3a-4533-b7ff-a1c41c990646","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-07-02 17:53:48 +0000 UTC FinishedAt: 2026-07-02 17:54:39 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"f456c1922c49e6be5ce407ddb74a6e61af5b65cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","IP_SET","IP_SET_HASH_NET","IP_SET_HASH_NETNET","IP_SET_HASH_NETPORT","IP_SET_HASH_NETIFACE","IP_SET_HASH_IPPORTNET","IP_SET_HASH_NETPORTNET"],"series_id":"23c1062d-3d3a-4533-b7ff-a1c41c990646","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-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-workflow7f4nr/series-workflow7f4nr-convert-artifact-1567119413/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow7f4nr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f456c1922c49e6be5ce407ddb74a6e61af5b65cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","IP_SET","IP_SET_HASH_NET","IP_SET_HASH_NETNET","IP_SET_HASH_NETPORT","IP_SET_HASH_NETIFACE","IP_SET_HASH_IPPORTNET","IP_SET_HASH_NETPORTNET"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-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":["hash_net4_add","hash_net4_del","hash_net4_test","hash_net4_resize","hash_net4_gc","hash_net4_flush","hash_net4_destroy","hash_net4_uref","hash_net4_kadt","hash_net4_uadt","hash_net_create","hash_net6_add","hash_net6_del","hash_net6_test","hash_net6_resize","hash_net6_gc","hash_net6_kadt","hash_net6_uadt","hash_netnet4_add","hash_netnet4_resize","hash_netnet4_gc","hash_netnet4_kadt","hash_netnet4_uadt","hash_netnet_create"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f456c1922c49e6be5ce407ddb74a6e61af5b65cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","IP_SET","IP_SET_HASH_NET","IP_SET_HASH_NETNET","IP_SET_HASH_NETPORT","IP_SET_HASH_NETIFACE","IP_SET_HASH_IPPORTNET","IP_SET_HASH_NETPORTNET"],"series_id":"23c1062d-3d3a-4533-b7ff-a1c41c990646","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-07-02 17:55:25 +0000 UTC FinishedAt: 2026-07-02 17:57:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7f4nr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f456c1922c49e6be5ce407ddb74a6e61af5b65cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","IP_SET","IP_SET_HASH_NET","IP_SET_HASH_NETNET","IP_SET_HASH_NETPORT","IP_SET_HASH_NETIFACE","IP_SET_HASH_IPPORTNET","IP_SET_HASH_NETPORTNET"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-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":["hash_net4_add","hash_net4_del","hash_net4_test","hash_net4_resize","hash_net4_gc","hash_net4_flush","hash_net4_destroy","hash_net4_uref","hash_net4_kadt","hash_net4_uadt","hash_net_create","hash_net6_add","hash_net6_del","hash_net6_test","hash_net6_resize","hash_net6_gc","hash_net6_kadt","hash_net6_uadt","hash_netnet4_add","hash_netnet4_resize","hash_netnet4_gc","hash_netnet4_kadt","hash_netnet4_uadt","hash_netnet_create"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f456c1922c49e6be5ce407ddb74a6e61af5b65cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","IP_SET","IP_SET_HASH_NET","IP_SET_HASH_NETNET","IP_SET_HASH_NETPORT","IP_SET_HASH_NETIFACE","IP_SET_HASH_IPPORTNET","IP_SET_HASH_NETPORTNET"],"series_id":"23c1062d-3d3a-4533-b7ff-a1c41c990646","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-07-02 17:55:25 +0000 UTC FinishedAt: 2026-07-02 17:57:13 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*4d913c5f-544d-4b92-aabb-2fee0c83b83e,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-workflow7f4nr/series-workflow7f4nr-build-action-2710619016/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-workflow7f4nr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f456c1922c49e6be5ce407ddb74a6e61af5b65cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","IP_SET","IP_SET_HASH_NET","IP_SET_HASH_NETNET","IP_SET_HASH_NETPORT","IP_SET_HASH_NETIFACE","IP_SET_HASH_IPPORTNET","IP_SET_HASH_NETPORTNET"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-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":["hash_net4_add","hash_net4_del","hash_net4_test","hash_net4_resize","hash_net4_gc","hash_net4_flush","hash_net4_destroy","hash_net4_uref","hash_net4_kadt","hash_net4_uadt","hash_net_create","hash_net6_add","hash_net6_del","hash_net6_test","hash_net6_resize","hash_net6_gc","hash_net6_kadt","hash_net6_uadt","hash_netnet4_add","hash_netnet4_resize","hash_netnet4_gc","hash_netnet4_kadt","hash_netnet4_uadt","hash_netnet_create"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f456c1922c49e6be5ce407ddb74a6e61af5b65cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","IP_SET","IP_SET_HASH_NET","IP_SET_HASH_NETNET","IP_SET_HASH_NETPORT","IP_SET_HASH_NETIFACE","IP_SET_HASH_IPPORTNET","IP_SET_HASH_NETPORTNET"],"series_id":"23c1062d-3d3a-4533-b7ff-a1c41c990646","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-07-02 17:57:36 +0000 UTC FinishedAt: 2026-07-02 17:57:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7f4nr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f456c1922c49e6be5ce407ddb74a6e61af5b65cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","IP_SET","IP_SET_HASH_NET","IP_SET_HASH_NETNET","IP_SET_HASH_NETPORT","IP_SET_HASH_NETIFACE","IP_SET_HASH_IPPORTNET","IP_SET_HASH_NETPORTNET"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-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":["hash_net4_add","hash_net4_del","hash_net4_test","hash_net4_resize","hash_net4_gc","hash_net4_flush","hash_net4_destroy","hash_net4_uref","hash_net4_kadt","hash_net4_uadt","hash_net_create","hash_net6_add","hash_net6_del","hash_net6_test","hash_net6_resize","hash_net6_gc","hash_net6_kadt","hash_net6_uadt","hash_netnet4_add","hash_netnet4_resize","hash_netnet4_gc","hash_netnet4_kadt","hash_netnet4_uadt","hash_netnet_create"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f456c1922c49e6be5ce407ddb74a6e61af5b65cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","IP_SET","IP_SET_HASH_NET","IP_SET_HASH_NETNET","IP_SET_HASH_NETPORT","IP_SET_HASH_NETIFACE","IP_SET_HASH_IPPORTNET","IP_SET_HASH_NETPORTNET"],"series_id":"23c1062d-3d3a-4533-b7ff-a1c41c990646","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-07-02 17:57:36 +0000 UTC FinishedAt: 2026-07-02 17:57:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7f4nr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f456c1922c49e6be5ce407ddb74a6e61af5b65cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","IP_SET","IP_SET_HASH_NET","IP_SET_HASH_NETNET","IP_SET_HASH_NETPORT","IP_SET_HASH_NETIFACE","IP_SET_HASH_IPPORTNET","IP_SET_HASH_NETPORTNET"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-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":["hash_net4_add","hash_net4_del","hash_net4_test","hash_net4_resize","hash_net4_gc","hash_net4_flush","hash_net4_destroy","hash_net4_uref","hash_net4_kadt","hash_net4_uadt","hash_net_create","hash_net6_add","hash_net6_del","hash_net6_test","hash_net6_resize","hash_net6_gc","hash_net6_kadt","hash_net6_uadt","hash_netnet4_add","hash_netnet4_resize","hash_netnet4_gc","hash_netnet4_kadt","hash_netnet4_uadt","hash_netnet_create"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f456c1922c49e6be5ce407ddb74a6e61af5b65cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","IP_SET","IP_SET_HASH_NET","IP_SET_HASH_NETNET","IP_SET_HASH_NETPORT","IP_SET_HASH_NETIFACE","IP_SET_HASH_IPPORTNET","IP_SET_HASH_NETPORTNET"],"series_id":"23c1062d-3d3a-4533-b7ff-a1c41c990646","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-07-02 17:57:36 +0000 UTC FinishedAt: 2026-07-02 18:34:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7f4nr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f456c1922c49e6be5ce407ddb74a6e61af5b65cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","IP_SET","IP_SET_HASH_NET","IP_SET_HASH_NETNET","IP_SET_HASH_NETPORT","IP_SET_HASH_NETIFACE","IP_SET_HASH_IPPORTNET","IP_SET_HASH_NETPORTNET"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-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":["hash_net4_add","hash_net4_del","hash_net4_test","hash_net4_resize","hash_net4_gc","hash_net4_flush","hash_net4_destroy","hash_net4_uref","hash_net4_kadt","hash_net4_uadt","hash_net_create","hash_net6_add","hash_net6_del","hash_net6_test","hash_net6_resize","hash_net6_gc","hash_net6_kadt","hash_net6_uadt","hash_netnet4_add","hash_netnet4_resize","hash_netnet4_gc","hash_netnet4_kadt","hash_netnet4_uadt","hash_netnet_create"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f456c1922c49e6be5ce407ddb74a6e61af5b65cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","IP_SET","IP_SET_HASH_NET","IP_SET_HASH_NETNET","IP_SET_HASH_NETPORT","IP_SET_HASH_NETIFACE","IP_SET_HASH_IPPORTNET","IP_SET_HASH_NETPORTNET"],"series_id":"23c1062d-3d3a-4533-b7ff-a1c41c990646","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-07-02 17:57:36 +0000 UTC FinishedAt: 2026-07-02 18:34:39 +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:*e6b64bf0-8f9d-4470-887b-be825f16916c,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-workflow7f4nr/series-workflow7f4nr-convert-artifact-1567119413/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": "93f578f1-5b17-4362-b36d-762a187c3795", "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-workflow7f4nr/series-workflow7f4nr-build-action-4059334977/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow7f4nr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f456c1922c49e6be5ce407ddb74a6e61af5b65cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","IP_SET","IP_SET_HASH_NET","IP_SET_HASH_NETNET","IP_SET_HASH_NETPORT","IP_SET_HASH_NETIFACE","IP_SET_HASH_IPPORTNET","IP_SET_HASH_NETPORTNET"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-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":["hash_net4_add","hash_net4_del","hash_net4_test","hash_net4_resize","hash_net4_gc","hash_net4_flush","hash_net4_destroy","hash_net4_uref","hash_net4_kadt","hash_net4_uadt","hash_net_create","hash_net6_add","hash_net6_del","hash_net6_test","hash_net6_resize","hash_net6_gc","hash_net6_kadt","hash_net6_uadt","hash_netnet4_add","hash_netnet4_resize","hash_netnet4_gc","hash_netnet4_kadt","hash_netnet4_uadt","hash_netnet_create"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f456c1922c49e6be5ce407ddb74a6e61af5b65cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","IP_SET","IP_SET_HASH_NET","IP_SET_HASH_NETNET","IP_SET_HASH_NETPORT","IP_SET_HASH_NETIFACE","IP_SET_HASH_IPPORTNET","IP_SET_HASH_NETPORTNET"],"series_id":"23c1062d-3d3a-4533-b7ff-a1c41c990646","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-07-02 17:57:36 +0000 UTC FinishedAt: 2026-07-02 18:34:15 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*e6b64bf0-8f9d-4470-887b-be825f16916c,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-workflow7f4nr/series-workflow7f4nr-convert-artifact-1567119413/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": "93f578f1-5b17-4362-b36d-762a187c3795", "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-workflow7f4nr/series-workflow7f4nr-build-action-4059334977/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow7f4nr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f456c1922c49e6be5ce407ddb74a6e61af5b65cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","IP_SET","IP_SET_HASH_NET","IP_SET_HASH_NETNET","IP_SET_HASH_NETPORT","IP_SET_HASH_NETIFACE","IP_SET_HASH_IPPORTNET","IP_SET_HASH_NETPORTNET"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-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":["hash_net4_add","hash_net4_del","hash_net4_test","hash_net4_resize","hash_net4_gc","hash_net4_flush","hash_net4_destroy","hash_net4_uref","hash_net4_kadt","hash_net4_uadt","hash_net_create","hash_net6_add","hash_net6_del","hash_net6_test","hash_net6_resize","hash_net6_gc","hash_net6_kadt","hash_net6_uadt","hash_netnet4_add","hash_netnet4_resize","hash_netnet4_gc","hash_netnet4_kadt","hash_netnet4_uadt","hash_netnet_create"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f456c1922c49e6be5ce407ddb74a6e61af5b65cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","IP_SET","IP_SET_HASH_NET","IP_SET_HASH_NETNET","IP_SET_HASH_NETPORT","IP_SET_HASH_NETIFACE","IP_SET_HASH_IPPORTNET","IP_SET_HASH_NETPORTNET"],"series_id":"23c1062d-3d3a-4533-b7ff-a1c41c990646","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-07-02 18:34:39 +0000 UTC FinishedAt: 2026-07-02 18:34:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7f4nr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f456c1922c49e6be5ce407ddb74a6e61af5b65cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","IP_SET","IP_SET_HASH_NET","IP_SET_HASH_NETNET","IP_SET_HASH_NETPORT","IP_SET_HASH_NETIFACE","IP_SET_HASH_IPPORTNET","IP_SET_HASH_NETPORTNET"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-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":["hash_net4_add","hash_net4_del","hash_net4_test","hash_net4_resize","hash_net4_gc","hash_net4_flush","hash_net4_destroy","hash_net4_uref","hash_net4_kadt","hash_net4_uadt","hash_net_create","hash_net6_add","hash_net6_del","hash_net6_test","hash_net6_resize","hash_net6_gc","hash_net6_kadt","hash_net6_uadt","hash_netnet4_add","hash_netnet4_resize","hash_netnet4_gc","hash_netnet4_kadt","hash_netnet4_uadt","hash_netnet_create"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f456c1922c49e6be5ce407ddb74a6e61af5b65cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","IP_SET","IP_SET_HASH_NET","IP_SET_HASH_NETNET","IP_SET_HASH_NETPORT","IP_SET_HASH_NETIFACE","IP_SET_HASH_IPPORTNET","IP_SET_HASH_NETPORTNET"],"series_id":"23c1062d-3d3a-4533-b7ff-a1c41c990646","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-07-02 18:34:39 +0000 UTC FinishedAt: 2026-07-02 18:34:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7f4nr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f456c1922c49e6be5ce407ddb74a6e61af5b65cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","IP_SET","IP_SET_HASH_NET","IP_SET_HASH_NETNET","IP_SET_HASH_NETPORT","IP_SET_HASH_NETIFACE","IP_SET_HASH_IPPORTNET","IP_SET_HASH_NETPORTNET"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-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":["hash_net4_add","hash_net4_del","hash_net4_test","hash_net4_resize","hash_net4_gc","hash_net4_flush","hash_net4_destroy","hash_net4_uref","hash_net4_kadt","hash_net4_uadt","hash_net_create","hash_net6_add","hash_net6_del","hash_net6_test","hash_net6_resize","hash_net6_gc","hash_net6_kadt","hash_net6_uadt","hash_netnet4_add","hash_netnet4_resize","hash_netnet4_gc","hash_netnet4_kadt","hash_netnet4_uadt","hash_netnet_create"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f456c1922c49e6be5ce407ddb74a6e61af5b65cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","IP_SET","IP_SET_HASH_NET","IP_SET_HASH_NETNET","IP_SET_HASH_NETPORT","IP_SET_HASH_NETIFACE","IP_SET_HASH_IPPORTNET","IP_SET_HASH_NETPORTNET"],"series_id":"23c1062d-3d3a-4533-b7ff-a1c41c990646","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-07-02 18:34:39 +0000 UTC FinishedAt: 2026-07-02 18:36:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7f4nr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f456c1922c49e6be5ce407ddb74a6e61af5b65cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","IP_SET","IP_SET_HASH_NET","IP_SET_HASH_NETNET","IP_SET_HASH_NETPORT","IP_SET_HASH_NETIFACE","IP_SET_HASH_IPPORTNET","IP_SET_HASH_NETPORTNET"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-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":["hash_net4_add","hash_net4_del","hash_net4_test","hash_net4_resize","hash_net4_gc","hash_net4_flush","hash_net4_destroy","hash_net4_uref","hash_net4_kadt","hash_net4_uadt","hash_net_create","hash_net6_add","hash_net6_del","hash_net6_test","hash_net6_resize","hash_net6_gc","hash_net6_kadt","hash_net6_uadt","hash_netnet4_add","hash_netnet4_resize","hash_netnet4_gc","hash_netnet4_kadt","hash_netnet4_uadt","hash_netnet_create"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f456c1922c49e6be5ce407ddb74a6e61af5b65cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","IP_SET","IP_SET_HASH_NET","IP_SET_HASH_NETNET","IP_SET_HASH_NETPORT","IP_SET_HASH_NETIFACE","IP_SET_HASH_IPPORTNET","IP_SET_HASH_NETPORTNET"],"series_id":"23c1062d-3d3a-4533-b7ff-a1c41c990646","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-07-02 18:34:40 +0000 UTC FinishedAt: 2026-07-02 18:36:42 +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:*93f578f1-5b17-4362-b36d-762a187c3795,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-workflow7f4nr/series-workflow7f4nr-build-action-4059334977/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-workflow7f4nr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f456c1922c49e6be5ce407ddb74a6e61af5b65cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","IP_SET","IP_SET_HASH_NET","IP_SET_HASH_NETNET","IP_SET_HASH_NETPORT","IP_SET_HASH_NETIFACE","IP_SET_HASH_IPPORTNET","IP_SET_HASH_NETPORTNET"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-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":["hash_net4_add","hash_net4_del","hash_net4_test","hash_net4_resize","hash_net4_gc","hash_net4_flush","hash_net4_destroy","hash_net4_uref","hash_net4_kadt","hash_net4_uadt","hash_net_create","hash_net6_add","hash_net6_del","hash_net6_test","hash_net6_resize","hash_net6_gc","hash_net6_kadt","hash_net6_uadt","hash_netnet4_add","hash_netnet4_resize","hash_netnet4_gc","hash_netnet4_kadt","hash_netnet4_uadt","hash_netnet_create"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f456c1922c49e6be5ce407ddb74a6e61af5b65cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","IP_SET","IP_SET_HASH_NET","IP_SET_HASH_NETNET","IP_SET_HASH_NETPORT","IP_SET_HASH_NETIFACE","IP_SET_HASH_IPPORTNET","IP_SET_HASH_NETPORTNET"],"series_id":"23c1062d-3d3a-4533-b7ff-a1c41c990646","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-07-02 18:36:59 +0000 UTC FinishedAt: 2026-07-02 21:39:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7f4nr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f456c1922c49e6be5ce407ddb74a6e61af5b65cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","IP_SET","IP_SET_HASH_NET","IP_SET_HASH_NETNET","IP_SET_HASH_NETPORT","IP_SET_HASH_NETIFACE","IP_SET_HASH_IPPORTNET","IP_SET_HASH_NETPORTNET"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-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":["hash_net4_add","hash_net4_del","hash_net4_test","hash_net4_resize","hash_net4_gc","hash_net4_flush","hash_net4_destroy","hash_net4_uref","hash_net4_kadt","hash_net4_uadt","hash_net_create","hash_net6_add","hash_net6_del","hash_net6_test","hash_net6_resize","hash_net6_gc","hash_net6_kadt","hash_net6_uadt","hash_netnet4_add","hash_netnet4_resize","hash_netnet4_gc","hash_netnet4_kadt","hash_netnet4_uadt","hash_netnet_create"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f456c1922c49e6be5ce407ddb74a6e61af5b65cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","IP_SET","IP_SET_HASH_NET","IP_SET_HASH_NETNET","IP_SET_HASH_NETPORT","IP_SET_HASH_NETIFACE","IP_SET_HASH_IPPORTNET","IP_SET_HASH_NETPORTNET"],"series_id":"23c1062d-3d3a-4533-b7ff-a1c41c990646","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-07-02 18:36:59 +0000 UTC FinishedAt: 2026-07-02 21:39:32 +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":["hash_net4_add","hash_net4_del","hash_net4_test","hash_net4_resize","hash_net4_gc","hash_net4_flush","hash_net4_destroy","hash_net4_uref","hash_net4_kadt","hash_net4_uadt","hash_net_create","hash_net6_add","hash_net6_del","hash_net6_test","hash_net6_resize","hash_net6_gc","hash_net6_kadt","hash_net6_uadt","hash_netnet4_add","hash_netnet4_resize","hash_netnet4_gc","hash_netnet4_kadt","hash_netnet4_uadt","hash_netnet_create"],"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:*4d913c5f-544d-4b92-aabb-2fee0c83b83e,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*93f578f1-5b17-4362-b36d-762a187c3795,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-workflow7f4nr/series-workflow7f4nr-build-action-2710619016/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-workflow7f4nr/series-workflow7f4nr-build-action-4059334977/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow7f4nr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f456c1922c49e6be5ce407ddb74a6e61af5b65cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","IP_SET","IP_SET_HASH_NET","IP_SET_HASH_NETNET","IP_SET_HASH_NETPORT","IP_SET_HASH_NETIFACE","IP_SET_HASH_IPPORTNET","IP_SET_HASH_NETPORTNET"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-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":["hash_net4_add","hash_net4_del","hash_net4_test","hash_net4_resize","hash_net4_gc","hash_net4_flush","hash_net4_destroy","hash_net4_uref","hash_net4_kadt","hash_net4_uadt","hash_net_create","hash_net6_add","hash_net6_del","hash_net6_test","hash_net6_resize","hash_net6_gc","hash_net6_kadt","hash_net6_uadt","hash_netnet4_add","hash_netnet4_resize","hash_netnet4_gc","hash_netnet4_kadt","hash_netnet4_uadt","hash_netnet_create"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f456c1922c49e6be5ce407ddb74a6e61af5b65cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","IP_SET","IP_SET_HASH_NET","IP_SET_HASH_NETNET","IP_SET_HASH_NETPORT","IP_SET_HASH_NETIFACE","IP_SET_HASH_IPPORTNET","IP_SET_HASH_NETPORTNET"],"series_id":"23c1062d-3d3a-4533-b7ff-a1c41c990646","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-07-02 18:36:59 +0000 UTC FinishedAt: 2026-07-02 18:37:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7f4nr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f456c1922c49e6be5ce407ddb74a6e61af5b65cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","IP_SET","IP_SET_HASH_NET","IP_SET_HASH_NETNET","IP_SET_HASH_NETPORT","IP_SET_HASH_NETIFACE","IP_SET_HASH_IPPORTNET","IP_SET_HASH_NETPORTNET"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-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":["hash_net4_add","hash_net4_del","hash_net4_test","hash_net4_resize","hash_net4_gc","hash_net4_flush","hash_net4_destroy","hash_net4_uref","hash_net4_kadt","hash_net4_uadt","hash_net_create","hash_net6_add","hash_net6_del","hash_net6_test","hash_net6_resize","hash_net6_gc","hash_net6_kadt","hash_net6_uadt","hash_netnet4_add","hash_netnet4_resize","hash_netnet4_gc","hash_netnet4_kadt","hash_netnet4_uadt","hash_netnet_create"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f456c1922c49e6be5ce407ddb74a6e61af5b65cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","IP_SET","IP_SET_HASH_NET","IP_SET_HASH_NETNET","IP_SET_HASH_NETPORT","IP_SET_HASH_NETIFACE","IP_SET_HASH_IPPORTNET","IP_SET_HASH_NETPORTNET"],"series_id":"23c1062d-3d3a-4533-b7ff-a1c41c990646","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-07-02 18:36:59 +0000 UTC FinishedAt: 2026-07-02 18:37:07 +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":["hash_net4_add","hash_net4_del","hash_net4_test","hash_net4_resize","hash_net4_gc","hash_net4_flush","hash_net4_destroy","hash_net4_uref","hash_net4_kadt","hash_net4_uadt","hash_net_create","hash_net6_add","hash_net6_del","hash_net6_test","hash_net6_resize","hash_net6_gc","hash_net6_kadt","hash_net6_uadt","hash_netnet4_add","hash_netnet4_resize","hash_netnet4_gc","hash_netnet4_kadt","hash_netnet4_uadt","hash_netnet_create"],"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-workflow7f4nr/series-workflow7f4nr-convert-artifact-2700757274/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow7f4nr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f456c1922c49e6be5ce407ddb74a6e61af5b65cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","IP_SET","IP_SET_HASH_NET","IP_SET_HASH_NETNET","IP_SET_HASH_NETPORT","IP_SET_HASH_NETIFACE","IP_SET_HASH_IPPORTNET","IP_SET_HASH_NETPORTNET"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-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":["hash_net4_add","hash_net4_del","hash_net4_test","hash_net4_resize","hash_net4_gc","hash_net4_flush","hash_net4_destroy","hash_net4_uref","hash_net4_kadt","hash_net4_uadt","hash_net_create","hash_net6_add","hash_net6_del","hash_net6_test","hash_net6_resize","hash_net6_gc","hash_net6_kadt","hash_net6_uadt","hash_netnet4_add","hash_netnet4_resize","hash_netnet4_gc","hash_netnet4_kadt","hash_netnet4_uadt","hash_netnet_create"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f456c1922c49e6be5ce407ddb74a6e61af5b65cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","IP_SET","IP_SET_HASH_NET","IP_SET_HASH_NETNET","IP_SET_HASH_NETPORT","IP_SET_HASH_NETIFACE","IP_SET_HASH_IPPORTNET","IP_SET_HASH_NETPORTNET"],"series_id":"23c1062d-3d3a-4533-b7ff-a1c41c990646","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-07-02 18:36:59 +0000 UTC FinishedAt: 2026-07-02 18:36:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7f4nr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f456c1922c49e6be5ce407ddb74a6e61af5b65cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","IP_SET","IP_SET_HASH_NET","IP_SET_HASH_NETNET","IP_SET_HASH_NETPORT","IP_SET_HASH_NETIFACE","IP_SET_HASH_IPPORTNET","IP_SET_HASH_NETPORTNET"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-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":["hash_net4_add","hash_net4_del","hash_net4_test","hash_net4_resize","hash_net4_gc","hash_net4_flush","hash_net4_destroy","hash_net4_uref","hash_net4_kadt","hash_net4_uadt","hash_net_create","hash_net6_add","hash_net6_del","hash_net6_test","hash_net6_resize","hash_net6_gc","hash_net6_kadt","hash_net6_uadt","hash_netnet4_add","hash_netnet4_resize","hash_netnet4_gc","hash_netnet4_kadt","hash_netnet4_uadt","hash_netnet_create"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f456c1922c49e6be5ce407ddb74a6e61af5b65cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","IP_SET","IP_SET_HASH_NET","IP_SET_HASH_NETNET","IP_SET_HASH_NETPORT","IP_SET_HASH_NETIFACE","IP_SET_HASH_IPPORTNET","IP_SET_HASH_NETPORTNET"],"series_id":"23c1062d-3d3a-4533-b7ff-a1c41c990646","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-07-02 18:36:59 +0000 UTC FinishedAt: 2026-07-02 18:36:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7f4nr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f456c1922c49e6be5ce407ddb74a6e61af5b65cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","IP_SET","IP_SET_HASH_NET","IP_SET_HASH_NETNET","IP_SET_HASH_NETPORT","IP_SET_HASH_NETIFACE","IP_SET_HASH_IPPORTNET","IP_SET_HASH_NETPORTNET"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-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":["hash_net4_add","hash_net4_del","hash_net4_test","hash_net4_resize","hash_net4_gc","hash_net4_flush","hash_net4_destroy","hash_net4_uref","hash_net4_kadt","hash_net4_uadt","hash_net_create","hash_net6_add","hash_net6_del","hash_net6_test","hash_net6_resize","hash_net6_gc","hash_net6_kadt","hash_net6_uadt","hash_netnet4_add","hash_netnet4_resize","hash_netnet4_gc","hash_netnet4_kadt","hash_netnet4_uadt","hash_netnet_create"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f456c1922c49e6be5ce407ddb74a6e61af5b65cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","IP_SET","IP_SET_HASH_NET","IP_SET_HASH_NETNET","IP_SET_HASH_NETPORT","IP_SET_HASH_NETIFACE","IP_SET_HASH_IPPORTNET","IP_SET_HASH_NETPORTNET"],"series_id":"23c1062d-3d3a-4533-b7ff-a1c41c990646","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-07-02 18:37:00 +0000 UTC FinishedAt: 2026-07-02 18:37:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7f4nr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f456c1922c49e6be5ce407ddb74a6e61af5b65cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","IP_SET","IP_SET_HASH_NET","IP_SET_HASH_NETNET","IP_SET_HASH_NETPORT","IP_SET_HASH_NETIFACE","IP_SET_HASH_IPPORTNET","IP_SET_HASH_NETPORTNET"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-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":["hash_net4_add","hash_net4_del","hash_net4_test","hash_net4_resize","hash_net4_gc","hash_net4_flush","hash_net4_destroy","hash_net4_uref","hash_net4_kadt","hash_net4_uadt","hash_net_create","hash_net6_add","hash_net6_del","hash_net6_test","hash_net6_resize","hash_net6_gc","hash_net6_kadt","hash_net6_uadt","hash_netnet4_add","hash_netnet4_resize","hash_netnet4_gc","hash_netnet4_kadt","hash_netnet4_uadt","hash_netnet_create"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f456c1922c49e6be5ce407ddb74a6e61af5b65cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","IP_SET","IP_SET_HASH_NET","IP_SET_HASH_NETNET","IP_SET_HASH_NETPORT","IP_SET_HASH_NETIFACE","IP_SET_HASH_IPPORTNET","IP_SET_HASH_NETPORTNET"],"series_id":"23c1062d-3d3a-4533-b7ff-a1c41c990646","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-07-02 18:37:14 +0000 UTC FinishedAt: 2026-07-02 21:39:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7f4nr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f456c1922c49e6be5ce407ddb74a6e61af5b65cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","IP_SET","IP_SET_HASH_NET","IP_SET_HASH_NETNET","IP_SET_HASH_NETPORT","IP_SET_HASH_NETIFACE","IP_SET_HASH_IPPORTNET","IP_SET_HASH_NETPORTNET"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-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":["hash_net4_add","hash_net4_del","hash_net4_test","hash_net4_resize","hash_net4_gc","hash_net4_flush","hash_net4_destroy","hash_net4_uref","hash_net4_kadt","hash_net4_uadt","hash_net_create","hash_net6_add","hash_net6_del","hash_net6_test","hash_net6_resize","hash_net6_gc","hash_net6_kadt","hash_net6_uadt","hash_netnet4_add","hash_netnet4_resize","hash_netnet4_gc","hash_netnet4_kadt","hash_netnet4_uadt","hash_netnet_create"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f456c1922c49e6be5ce407ddb74a6e61af5b65cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","IP_SET","IP_SET_HASH_NET","IP_SET_HASH_NETNET","IP_SET_HASH_NETPORT","IP_SET_HASH_NETIFACE","IP_SET_HASH_IPPORTNET","IP_SET_HASH_NETPORTNET"],"series_id":"23c1062d-3d3a-4533-b7ff-a1c41c990646","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-07-02 18:37:14 +0000 UTC FinishedAt: 2026-07-02 21:39:22 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*4d913c5f-544d-4b92-aabb-2fee0c83b83e,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*93f578f1-5b17-4362-b36d-762a187c3795,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-workflow7f4nr/series-workflow7f4nr-build-action-2710619016/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-workflow7f4nr/series-workflow7f4nr-build-action-4059334977/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-workflow7f4nr/series-workflow7f4nr-convert-artifact-2700757274/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,}