Name: series-workflowmpbfx Phase: Succeeded StartedAt: 2026-09-09 16:59:27 +0000 UTC FinishedAt: 2026-09-09 21:24:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmpbfx[0] Phase: Succeeded StartedAt: 2026-09-09 16:59:27 +0000 UTC FinishedAt: 2026-09-09 17:44:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmpbfx[0].run-triage Phase: Succeeded StartedAt: 2026-09-09 16:59:27 +0000 UTC FinishedAt: 2026-09-09 17:44:10 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "nf", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git", "commit_hash": "a401a9d547c50ef34db1088cc1fb9a201a7af657", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "IP_VS", "NETFILTER", "INET" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "nf", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git", "commit_hash": "a401a9d547c50ef34db1088cc1fb9a201a7af657", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "IP_VS", "NETFILTER", "INET" ], "series_id": "a8939cd2-3461-4726-8668-65da8a001409" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "ip_vs_sync_conn", "ip_vs_sync_conn_v0" ], "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+CgkJCTx0ZD4yMDI2LzA5LzA5IDE3OjQzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lQX1ZTJiMzNDssCiAgICAmIzM0O05FVEZJTFRFUiYjMzQ7LAogICAgJiMzNDtJTkVUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aXBfdnNfc3luY19jb25uJiMzNDssCiAgICAmIzM0O2lwX3ZzX3N5bmNfY29ubl92MCYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHJlc3NlcyBhIGNvbmN1cnJlbmN5IGlzc3VlIGluIElQVlMgY29ubmVjdGlvbiBzeW5jaHJvbml6YXRpb24gKGlwX3ZzX3N5bmNfY29ubiBhbmQgaXBfdnNfc3luY19jb25uX3YwKSB3aGVyZSBjcC1cdTAwM2VmbGFncyB3YXMgcmVhZCBtdWx0aXBsZSB0aW1lcyB3aXRob3V0IFJFQURfT05DRSwgcG90ZW50aWFsbHkgY2F1c2luZyBhIG1pc21hdGNoIGJldHdlZW4gdGhlIGNhbGN1bGF0ZWQgYnVmZmVyIGxlbmd0aCBhbmQgdGhlIGFjdHVhbCBkYXRhIHdyaXR0ZW4gaWYgZmxhZ3Mgd2VyZSBtb2RpZmllZCBjb25jdXJyZW50bHkuXG5cblRoZSBmaXggaW50cm9kdWNlcyBsb2NhbCBzY2FsYXIgdmFyaWFibGVzIChmbGFncywgc2VxX21hc2spIHRoYXQgYXJlIGltbWVkaWF0ZWx5IGluaXRpYWxpemVkIHZpYSBSRUFEX09OQ0UoY3AtXHUwMDNlZmxhZ3MpLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSB1bmluaXRpYWxpemVkIHN0YWNrIG9yIGhlYXAgYWxsb2NhdGlvbnMsIHVuaW5pdGlhbGl6ZWQgc3RydWN0dXJlIGZpZWxkcywgaW5mby1sZWFrcyB0byB1c2Vyc3BhY2UsIG9yIHJlYWRzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGUgcmlza3MgYXNzb2NpYXRlZCB3aXRoIHRoZSBvcmlnaW5hbCByYWNlIGNvbmRpdGlvbiAob3V0LW9mLWJvdW5kcyBidWZmZXIgd3JpdGVzIC8gZGF0YSBjb3JydXB0aW9uKSBhcmUgY292ZXJlZCBieSBLQVNBTiBhbmQgS0NTQU4sIHNvIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyByZWFjaGFibGUgbmV0d29ya2luZyBjb2RlIGluIHRoZSBJUFZTIGNvbm5lY3Rpb24gc3luY2hyb25pemF0aW9uIHN1YnN5c3RlbSAobmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYykuIEl0IHVzZXMgUkVBRF9PTkNFIGFuZCBjYWNoZXMgY3AtXHUwMDNlZmxhZ3MgbG9jYWxseSB0byBhdm9pZCBkYXRhIHJhY2VzIGFuZCBpbmNvbnNpc3RlbmNpZXMgYmV0d2VlbiBwYWNrZXQgbGVuZ3RoIGNhbGN1bGF0aW9uIGFuZCBzZXF1ZW5jZSBvcHRpb24gc2VyaWFsaXphdGlvbi4gRnV6emluZyBpcyB3YXJyYW50ZWQgdG8gdGVzdCBzeW5jaHJvbml6YXRpb24gbWVzc2FnZSBjb25zdHJ1Y3Rpb24gYW5kIHN0YXRlIGhhbmRsaW5nIHVuZGVyIGNvbmN1cnJlbmN5LiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDE3OjQzPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgMzU1ZWQxYmZiN2Q1ZjYyNDNlZWFlNGI3M2ExODc5NGU2MTBmOGNlNlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgU2VwIDkgMTc6NDI6NTkgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmNcbmluZGV4IDUzODNhZWFmYjBhZWQuLmRmYTg0ODdlYzBjMjAgMTAwNjQ0XG4tLS0gYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jXG5AQCAtNTQzLDEzICYjNDM7NTQzLDE1IEBAIHN0YXRpYyB2b2lkIGlwX3ZzX3N5bmNfY29ubl92MChzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLFxuIFx0c3RydWN0IGlwX3ZzX3N5bmNfY29ubl92MCAqcztcbiBcdHN0cnVjdCBpcF92c19zeW5jX2J1ZmYgKmJ1ZmY7XG4gXHRzdHJ1Y3QgaXB2c19tYXN0ZXJfc3luY19zdGF0ZSAqbXM7XG4tXHRpbnQgaWQ7XG4mIzQzO1x0dTMyIGZsYWdzLCBzZXFfbWFzaztcbiBcdHVuc2lnbmVkIGludCBsZW47XG4mIzQzO1x0aW50IGlkO1xuIFxuIFx0aWYgKHVubGlrZWx5KGNwLVx1MDAzZWFmICE9IEFGX0lORVQpKVxuIFx0XHRyZXR1cm47XG4mIzQzO1x0ZmxhZ3MgPSBSRUFEX09OQ0UoY3AtXHUwMDNlZmxhZ3MpO1xuIFx0LyogRG8gbm90IHN5bmMgT05FIFBBQ0tFVCAqL1xuLVx0aWYgKGNwLVx1MDAzZWZsYWdzIFx1MDAyNiBJUF9WU19DT05OX0ZfT05FX1BBQ0tFVClcbiYjNDM7XHRpZiAoZmxhZ3MgXHUwMDI2IElQX1ZTX0NPTk5fRl9PTkVfUEFDS0VUKVxuIFx0XHRyZXR1cm47XG4gXG4gXHRpZiAoIWlwX3ZzX3N5bmNfY29ubl9uZWVkZWQoaXB2cywgY3AsIHBrdHMpKVxuQEAgLTU2NCw4ICYjNDM7NTY2LDggQEAgc3RhdGljIHZvaWQgaXBfdnNfc3luY19jb25uX3YwKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsXG4gXHRpZCA9IHNlbGVjdF9tYXN0ZXJfdGhyZWFkX2lkKGlwdnMsIGNwKTtcbiBcdG1zID0gXHUwMDI2aXB2cy1cdTAwM2Vtc1tpZF07XG4gXHRidWZmID0gbXMtXHUwMDNlc3luY19idWZmO1xuLVx0bGVuID0gKGNwLVx1MDAzZWZsYWdzIFx1MDAyNiBJUF9WU19DT05OX0ZfU0VRX01BU0spID8gRlVMTF9DT05OX1NJWkUgOlxuLVx0XHRTSU1QTEVfQ09OTl9TSVpFO1xuJiM0MztcdHNlcV9tYXNrID0gZmxhZ3MgXHUwMDI2IElQX1ZTX0NPTk5fRl9TRVFfTUFTSztcbiYjNDM7XHRsZW4gPSBzZXFfbWFzayA/IEZVTExfQ09OTl9TSVpFIDogU0lNUExFX0NPTk5fU0laRTtcbiBcdGlmIChidWZmKSB7XG4gXHRcdG0gPSAoc3RydWN0IGlwX3ZzX3N5bmNfbWVzZ192MCAqKSBidWZmLVx1MDAzZW1lc2c7XG4gXHRcdC8qIFNlbmQgYnVmZmVyIGlmIGl0IGlzIGZvciB2MSAqL1xuQEAgLTU5Nyw5ICYjNDM7NTk5LDkgQEAgc3RhdGljIHZvaWQgaXBfdnNfc3luY19jb25uX3YwKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsXG4gXHRzLVx1MDAzZWNhZGRyID0gY3AtXHUwMDNlY2FkZHIuaXA7XG4gXHRzLVx1MDAzZXZhZGRyID0gY3AtXHUwMDNldmFkZHIuaXA7XG4gXHRzLVx1MDAzZWRhZGRyID0gY3AtXHUwMDNlZGFkZHIuaXA7XG4tXHRzLVx1MDAzZWZsYWdzID0gaHRvbnMoY3AtXHUwMDNlZmxhZ3MgXHUwMDI2IH5JUF9WU19DT05OX0ZfSEFTSEVEKTtcbiYjNDM7XHRzLVx1MDAzZWZsYWdzID0gaHRvbnMoZmxhZ3MgXHUwMDI2IH5JUF9WU19DT05OX0ZfSEFTSEVEKTtcbiBcdHMtXHUwMDNlc3RhdGUgPSBodG9ucyhjcC1cdTAwM2VzdGF0ZSk7XG4tXHRpZiAoY3AtXHUwMDNlZmxhZ3MgXHUwMDI2IElQX1ZTX0NPTk5fRl9TRVFfTUFTSykge1xuJiM0MztcdGlmIChzZXFfbWFzaykge1xuIFx0XHRzdHJ1Y3QgaXBfdnNfc3luY19jb25uX29wdGlvbnMgKm9wdCA9XG4gXHRcdFx0KHN0cnVjdCBpcF92c19zeW5jX2Nvbm5fb3B0aW9ucyAqKVx1MDAyNnNbMV07XG4gXHRcdG1lbWNweShvcHQsIFx1MDAyNmNwLVx1MDAzZXN5bmNfY29ubl9vcHQsIHNpemVvZigqb3B0KSk7XG5AQCAtNjM1LDYgJiM0Mzs2MzcsNyBAQCB2b2lkIGlwX3ZzX3N5bmNfY29ubihzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLCBpbnQgcGt0cylcbiBcdGludCBpZDtcbiBcdF9fdTggKnA7XG4gXHR1bnNpZ25lZCBpbnQgbGVuLCBwZV9uYW1lX2xlbiwgcGFkO1xuJiM0MztcdHUzMiBmbGFncywgc2VxX21hc2s7XG4gXG4gXHQvKiBIYW5kbGUgb2xkIHZlcnNpb24gb2YgdGhlIHByb3RvY29sICovXG4gXHRpZiAoc3lzY3RsX3N5bmNfdmVyKGlwdnMpID09IDApIHtcbkBAIC02NDcsNiAmIzQzOzY1MCw3IEBAIHZvaWQgaXBfdnNfc3luY19jb25uKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsIGludCBwa3RzKVxuIHNsb29wOlxuIFx0aWYgKCFpcF92c19zeW5jX2Nvbm5fbmVlZGVkKGlwdnMsIGNwLCBwa3RzKSlcbiBcdFx0Z290byBjb250cm9sO1xuJiM0MztcdGZsYWdzID0gUkVBRF9PTkNFKGNwLVx1MDAzZWZsYWdzKTtcbiBcbiBcdC8qIFNhbml0eSBjaGVja3MgKi9cbiBcdHBlX25hbWVfbGVuID0gMDtcbkBAIC02NzQsNyAmIzQzOzY3OCw4IEBAIHZvaWQgaXBfdnNfc3luY19jb25uKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsIGludCBwa3RzKVxuICNlbmRpZlxuIFx0XHRsZW4gPSBzaXplb2Yoc3RydWN0IGlwX3ZzX3N5bmNfdjQpO1xuIFxuLVx0aWYgKGNwLVx1MDAzZWZsYWdzIFx1MDAyNiBJUF9WU19DT05OX0ZfU0VRX01BU0spXG4mIzQzO1x0c2VxX21hc2sgPSBmbGFncyBcdTAwMjYgSVBfVlNfQ09OTl9GX1NFUV9NQVNLO1xuJiM0MztcdGlmIChzZXFfbWFzaylcbiBcdFx0bGVuICYjNDM7PSBzaXplb2Yoc3RydWN0IGlwX3ZzX3N5bmNfY29ubl9vcHRpb25zKSAmIzQzOyAyO1xuIFxuIFx0aWYgKGNwLVx1MDAzZXBlX2RhdGFfbGVuKVxuQEAgLTcyMCw3ICYjNDM7NzI1LDcgQEAgdm9pZCBpcF92c19zeW5jX2Nvbm4oc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIHN0cnVjdCBpcF92c19jb25uICpjcCwgaW50IHBrdHMpXG4gXHQvKiBTZXQgbWVzc2FnZSB0eXBlICBcdTAwMjYgY29weSBtZW1iZXJzICovXG4gXHRzLVx1MDAzZXY0LnR5cGUgPSAoY3AtXHUwMDNlYWYgPT0gQUZfSU5FVDYgPyBTVFlQRV9GX0lORVQ2IDogMCk7XG4gXHRzLVx1MDAzZXY0LnZlcl9zaXplID0gaHRvbnMobGVuIFx1MDAyNiBTVkVSX01BU0spO1x0LyogVmVyc2lvbiAwICovXG4tXHRzLVx1MDAzZXY0LmZsYWdzID0gaHRvbmwoY3AtXHUwMDNlZmxhZ3MgXHUwMDI2IH5JUF9WU19DT05OX0ZfSEFTSEVEKTtcbiYjNDM7XHRzLVx1MDAzZXY0LmZsYWdzID0gaHRvbmwoZmxhZ3MgXHUwMDI2IH5JUF9WU19DT05OX0ZfSEFTSEVEKTtcbiBcdHMtXHUwMDNldjQuc3RhdGUgPSBodG9ucyhjcC1cdTAwM2VzdGF0ZSk7XG4gXHRzLVx1MDAzZXY0LnByb3RvY29sID0gY3AtXHUwMDNlcHJvdG9jb2w7XG4gXHRzLVx1MDAzZXY0LmNwb3J0ID0gY3AtXHUwMDNlY3BvcnQ7XG5AQCAtNzQ0LDcgJiM0Mzs3NDksNyBAQCB2b2lkIGlwX3ZzX3N5bmNfY29ubihzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLCBpbnQgcGt0cylcbiBcdFx0cy1cdTAwM2V2NC52YWRkciA9IGNwLVx1MDAzZXZhZGRyLmlwO1xuIFx0XHRzLVx1MDAzZXY0LmRhZGRyID0gY3AtXHUwMDNlZGFkZHIuaXA7XG4gXHR9XG4tXHRpZiAoY3AtXHUwMDNlZmxhZ3MgXHUwMDI2IElQX1ZTX0NPTk5fRl9TRVFfTUFTSykge1xuJiM0MztcdGlmIChzZXFfbWFzaykge1xuIFx0XHQqKHAmIzQzOyYjNDM7KSA9IElQVlNfT1BUX1NFUV9EQVRBO1xuIFx0XHQqKHAmIzQzOyYjNDM7KSA9IHNpemVvZihzdHJ1Y3QgaXBfdnNfc3luY19jb25uX29wdGlvbnMpO1xuIFx0XHRodG9uX3NlcShcdTAwMjZjcC1cdTAwM2Vpbl9zZXEsIChzdHJ1Y3QgaXBfdnNfc2VxICopcCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTc6NDM8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7SVBfVlMmIzM0OywKICAgICYjMzQ7TkVURklMVEVSJiMzNDssCiAgICAmIzM0O0lORVQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtpcF92c19zeW5jX2Nvbm4mIzM0OywKICAgICYjMzQ7aXBfdnNfc3luY19jb25uX3YwJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHJlYWNoYWJsZSBuZXR3b3JraW5nIGNvZGUgaW4gdGhlIElQVlMgY29ubmVjdGlvbiBzeW5jaHJvbml6YXRpb24gc3Vic3lzdGVtIChuZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jKS4gSXQgdXNlcyBSRUFEX09OQ0UgYW5kIGNhY2hlcyBjcC1cdTAwM2VmbGFncyBsb2NhbGx5IHRvIGF2b2lkIGRhdGEgcmFjZXMgYW5kIGluY29uc2lzdGVuY2llcyBiZXR3ZWVuIHBhY2tldCBsZW5ndGggY2FsY3VsYXRpb24gYW5kIHNlcXVlbmNlIG9wdGlvbiBzZXJpYWxpemF0aW9uLiBGdXp6aW5nIGlzIHdhcnJhbnRlZCB0byB0ZXN0IHN5bmNocm9uaXphdGlvbiBtZXNzYWdlIGNvbnN0cnVjdGlvbiBhbmQgc3RhdGUgaGFuZGxpbmcgdW5kZXIgY29uY3VycmVuY3kuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzcwp0b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpUaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLAphbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLgoKLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURToKICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkCiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS4KICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsCiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLgoKLSBETyBOT1QgQkxJTkRMWSBUUlVTVCAmIzM0O05PIEZVTkNUSU9OQUwgQ0hBTkdFJiMzNDsgKE5GQ0kpIE9SICYjMzQ7UkVGQUNUT1JJTkcmIzM0OyBDTEFJTVM6CiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyAmIzM0O2NsZWFudXBzJiMzNDssICYjMzQ7cmVmYWN0b3JpbmdzJiMzNDssIG9yIHN0YXRlCiAgJiMzNDtObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZCYjMzQ7LiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS4KICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnQKICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy4KICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLgoKLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDoKICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosCiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuCiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlcgogIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6CgotIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6CiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuCiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLykKICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy4KICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzCiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLgogICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLgotIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZToKICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOgogICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nCiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy4KICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzoKLSBDb3JlIFN1YnN5c3RlbXM6CiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksCiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuCi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOgogICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLgotIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczoKICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy4KLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOgogICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOgoKLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6CiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXMKICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdAogIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLgogIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyAmIzM0O2ZvY3VzZWQmIzM0OywKICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuCgotIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzoKICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHMKICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy4KCi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOgogIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2sKICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy4KICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXIKICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo1LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6Ci0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KLSBDaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLgotIFN0cmlwIGFueSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAzNTVlZDFiZmI3ZDVmNjI0M2VlYWU0YjczYTE4Nzk0ZTYxMGY4Y2U2CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFdlZCBTZXAgOSAxNzo0Mjo1OSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jCmluZGV4IDUzODNhZWFmYjBhZWQuLmRmYTg0ODdlYzBjMjAgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYwpAQCAtNTQzLDEzICYjNDM7NTQzLDE1IEBAIHN0YXRpYyB2b2lkIGlwX3ZzX3N5bmNfY29ubl92MChzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLAogCXN0cnVjdCBpcF92c19zeW5jX2Nvbm5fdjAgKnM7CiAJc3RydWN0IGlwX3ZzX3N5bmNfYnVmZiAqYnVmZjsKIAlzdHJ1Y3QgaXB2c19tYXN0ZXJfc3luY19zdGF0ZSAqbXM7Ci0JaW50IGlkOwomIzQzOwl1MzIgZmxhZ3MsIHNlcV9tYXNrOwogCXVuc2lnbmVkIGludCBsZW47CiYjNDM7CWludCBpZDsKIAogCWlmICh1bmxpa2VseShjcC0mZ3Q7YWYgIT0gQUZfSU5FVCkpCiAJCXJldHVybjsKJiM0MzsJZmxhZ3MgPSBSRUFEX09OQ0UoY3AtJmd0O2ZsYWdzKTsKIAkvKiBEbyBub3Qgc3luYyBPTkUgUEFDS0VUICovCi0JaWYgKGNwLSZndDtmbGFncyAmYW1wOyBJUF9WU19DT05OX0ZfT05FX1BBQ0tFVCkKJiM0MzsJaWYgKGZsYWdzICZhbXA7IElQX1ZTX0NPTk5fRl9PTkVfUEFDS0VUKQogCQlyZXR1cm47CiAKIAlpZiAoIWlwX3ZzX3N5bmNfY29ubl9uZWVkZWQoaXB2cywgY3AsIHBrdHMpKQpAQCAtNTY0LDggJiM0Mzs1NjYsOCBAQCBzdGF0aWMgdm9pZCBpcF92c19zeW5jX2Nvbm5fdjAoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIHN0cnVjdCBpcF92c19jb25uICpjcCwKIAlpZCA9IHNlbGVjdF9tYXN0ZXJfdGhyZWFkX2lkKGlwdnMsIGNwKTsKIAltcyA9ICZhbXA7aXB2cy0mZ3Q7bXNbaWRdOwogCWJ1ZmYgPSBtcy0mZ3Q7c3luY19idWZmOwotCWxlbiA9IChjcC0mZ3Q7ZmxhZ3MgJmFtcDsgSVBfVlNfQ09OTl9GX1NFUV9NQVNLKSA/IEZVTExfQ09OTl9TSVpFIDoKLQkJU0lNUExFX0NPTk5fU0laRTsKJiM0MzsJc2VxX21hc2sgPSBmbGFncyAmYW1wOyBJUF9WU19DT05OX0ZfU0VRX01BU0s7CiYjNDM7CWxlbiA9IHNlcV9tYXNrID8gRlVMTF9DT05OX1NJWkUgOiBTSU1QTEVfQ09OTl9TSVpFOwogCWlmIChidWZmKSB7CiAJCW0gPSAoc3RydWN0IGlwX3ZzX3N5bmNfbWVzZ192MCAqKSBidWZmLSZndDttZXNnOwogCQkvKiBTZW5kIGJ1ZmZlciBpZiBpdCBpcyBmb3IgdjEgKi8KQEAgLTU5Nyw5ICYjNDM7NTk5LDkgQEAgc3RhdGljIHZvaWQgaXBfdnNfc3luY19jb25uX3YwKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsCiAJcy0mZ3Q7Y2FkZHIgPSBjcC0mZ3Q7Y2FkZHIuaXA7CiAJcy0mZ3Q7dmFkZHIgPSBjcC0mZ3Q7dmFkZHIuaXA7CiAJcy0mZ3Q7ZGFkZHIgPSBjcC0mZ3Q7ZGFkZHIuaXA7Ci0Jcy0mZ3Q7ZmxhZ3MgPSBodG9ucyhjcC0mZ3Q7ZmxhZ3MgJmFtcDsgfklQX1ZTX0NPTk5fRl9IQVNIRUQpOwomIzQzOwlzLSZndDtmbGFncyA9IGh0b25zKGZsYWdzICZhbXA7IH5JUF9WU19DT05OX0ZfSEFTSEVEKTsKIAlzLSZndDtzdGF0ZSA9IGh0b25zKGNwLSZndDtzdGF0ZSk7Ci0JaWYgKGNwLSZndDtmbGFncyAmYW1wOyBJUF9WU19DT05OX0ZfU0VRX01BU0spIHsKJiM0MzsJaWYgKHNlcV9tYXNrKSB7CiAJCXN0cnVjdCBpcF92c19zeW5jX2Nvbm5fb3B0aW9ucyAqb3B0ID0KIAkJCShzdHJ1Y3QgaXBfdnNfc3luY19jb25uX29wdGlvbnMgKikmYW1wO3NbMV07CiAJCW1lbWNweShvcHQsICZhbXA7Y3AtJmd0O3N5bmNfY29ubl9vcHQsIHNpemVvZigqb3B0KSk7CkBAIC02MzUsNiAmIzQzOzYzNyw3IEBAIHZvaWQgaXBfdnNfc3luY19jb25uKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsIGludCBwa3RzKQogCWludCBpZDsKIAlfX3U4ICpwOwogCXVuc2lnbmVkIGludCBsZW4sIHBlX25hbWVfbGVuLCBwYWQ7CiYjNDM7CXUzMiBmbGFncywgc2VxX21hc2s7CiAKIAkvKiBIYW5kbGUgb2xkIHZlcnNpb24gb2YgdGhlIHByb3RvY29sICovCiAJaWYgKHN5c2N0bF9zeW5jX3ZlcihpcHZzKSA9PSAwKSB7CkBAIC02NDcsNiAmIzQzOzY1MCw3IEBAIHZvaWQgaXBfdnNfc3luY19jb25uKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsIGludCBwa3RzKQogc2xvb3A6CiAJaWYgKCFpcF92c19zeW5jX2Nvbm5fbmVlZGVkKGlwdnMsIGNwLCBwa3RzKSkKIAkJZ290byBjb250cm9sOwomIzQzOwlmbGFncyA9IFJFQURfT05DRShjcC0mZ3Q7ZmxhZ3MpOwogCiAJLyogU2FuaXR5IGNoZWNrcyAqLwogCXBlX25hbWVfbGVuID0gMDsKQEAgLTY3NCw3ICYjNDM7Njc4LDggQEAgdm9pZCBpcF92c19zeW5jX2Nvbm4oc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIHN0cnVjdCBpcF92c19jb25uICpjcCwgaW50IHBrdHMpCiAjZW5kaWYKIAkJbGVuID0gc2l6ZW9mKHN0cnVjdCBpcF92c19zeW5jX3Y0KTsKIAotCWlmIChjcC0mZ3Q7ZmxhZ3MgJmFtcDsgSVBfVlNfQ09OTl9GX1NFUV9NQVNLKQomIzQzOwlzZXFfbWFzayA9IGZsYWdzICZhbXA7IElQX1ZTX0NPTk5fRl9TRVFfTUFTSzsKJiM0MzsJaWYgKHNlcV9tYXNrKQogCQlsZW4gJiM0Mzs9IHNpemVvZihzdHJ1Y3QgaXBfdnNfc3luY19jb25uX29wdGlvbnMpICYjNDM7IDI7CiAKIAlpZiAoY3AtJmd0O3BlX2RhdGFfbGVuKQpAQCAtNzIwLDcgJiM0Mzs3MjUsNyBAQCB2b2lkIGlwX3ZzX3N5bmNfY29ubihzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLCBpbnQgcGt0cykKIAkvKiBTZXQgbWVzc2FnZSB0eXBlICAmYW1wOyBjb3B5IG1lbWJlcnMgKi8KIAlzLSZndDt2NC50eXBlID0gKGNwLSZndDthZiA9PSBBRl9JTkVUNiA/IFNUWVBFX0ZfSU5FVDYgOiAwKTsKIAlzLSZndDt2NC52ZXJfc2l6ZSA9IGh0b25zKGxlbiAmYW1wOyBTVkVSX01BU0spOwkvKiBWZXJzaW9uIDAgKi8KLQlzLSZndDt2NC5mbGFncyA9IGh0b25sKGNwLSZndDtmbGFncyAmYW1wOyB+SVBfVlNfQ09OTl9GX0hBU0hFRCk7CiYjNDM7CXMtJmd0O3Y0LmZsYWdzID0gaHRvbmwoZmxhZ3MgJmFtcDsgfklQX1ZTX0NPTk5fRl9IQVNIRUQpOwogCXMtJmd0O3Y0LnN0YXRlID0gaHRvbnMoY3AtJmd0O3N0YXRlKTsKIAlzLSZndDt2NC5wcm90b2NvbCA9IGNwLSZndDtwcm90b2NvbDsKIAlzLSZndDt2NC5jcG9ydCA9IGNwLSZndDtjcG9ydDsKQEAgLTc0NCw3ICYjNDM7NzQ5LDcgQEAgdm9pZCBpcF92c19zeW5jX2Nvbm4oc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIHN0cnVjdCBpcF92c19jb25uICpjcCwgaW50IHBrdHMpCiAJCXMtJmd0O3Y0LnZhZGRyID0gY3AtJmd0O3ZhZGRyLmlwOwogCQlzLSZndDt2NC5kYWRkciA9IGNwLSZndDtkYWRkci5pcDsKIAl9Ci0JaWYgKGNwLSZndDtmbGFncyAmYW1wOyBJUF9WU19DT05OX0ZfU0VRX01BU0spIHsKJiM0MzsJaWYgKHNlcV9tYXNrKSB7CiAJCSoocCYjNDM7JiM0MzspID0gSVBWU19PUFRfU0VRX0RBVEE7CiAJCSoocCYjNDM7JiM0MzspID0gc2l6ZW9mKHN0cnVjdCBpcF92c19zeW5jX2Nvbm5fb3B0aW9ucyk7CiAJCWh0b25fc2VxKCZhbXA7Y3AtJmd0O2luX3NlcSwgKHN0cnVjdCBpcF92c19zZXEgKilwKTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTc6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDI1NwoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDExNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFByb3Bvc2VkIFBhdGNoIGZvciBGdXp6aW5nIFBvdGVudGlhbCoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2ggYW5kIGZpZ3VyZSBvdXQgdGhlIGZ1enppbmcgc3RyYXRlZ3kuIFdlIG5lZWQgdG8gZGV0ZXJtaW5lIGlmIHRoaXMgY2hhbmdlIHRvIGBuZXQvbmV0ZmlsdGVyL2lwdnNgIHdhcnJhbnRzIGEgZnV6emluZyBjYW1wYWlnbiBhbmQgd2hhdCBjb25maWd1cmF0aW9ucyBhbmQgZm9jdXMgc3ltYm9scyB3b3VsZCBiZSBiZXN0LgoKVGhlIGZpcnN0IHN0ZXAgaXMgYWx3YXlzIHRvIGV4YW1pbmUgdGhlIHNwZWNpZmljIGZpbGVzIGFuZCBmdW5jdGlvbnMgdG91Y2hlZC4gSXQgbG9va3MgbGlrZSB0aGUgcGF0Y2ggbW9kaWZpZXMgYG5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmNgLiBTcGVjaWZpY2FsbHksIHRoZSBjaGFuZ2VzIGFyZSB3aXRoaW4gdGhlIGBpcF92c19zeW5jX2Nvbm5fdjBgIGFuZCBgaXBfdnNfc3luY19jb25uYCBmdW5jdGlvbnMuIFRob3NlIGZ1bmN0aW9ucyBhcmUgaW50ZXJlc3RpbmcsIGFzIHRoZXkgY2xlYXJseSBoYW5kbGUgY29ubmVjdGlvbiBzeW5jaHJvbml6YXRpb24sIGEgdGFzayBrbm93biB0byBiZSBjb21wbGV4IGFuZCBvZnRlbiBwcm9uZSB0byBzdWJ0bGUgcmFjZSBjb25kaXRpb25zIG9yIHVuZXhwZWN0ZWQgaW5wdXQgaGFuZGxpbmcuCgpOb3csIG15IGluc3RpbmN0IGlzIHRvIGxvb2sgYXQgdGhlIHN1cnJvdW5kaW5nIGNvZGUuIEkgbmVlZCB0byBnZXQgYSBicm9hZGVyIHVuZGVyc3RhbmRpbmcgb2YgdGhlIGNvbnRleHQuIEkmIzM5O2xsIG5lZWQgdG8gaW5zcGVjdCBgbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuY2AgaXRzZWxmLiBUaGVuLCBJIG5lZWQgdG8gY2hlY2sgdGhlIEtjb25maWcgZmlsZXMgcmVsYXRlZCB0byBJUFZTLiBJIG5lZWQgdG8gc2VlIHdoaWNoIGNvbmZpZ3VyYXRpb25zIGFyZSBlbmFibGVkLCB3aGljaCBmdW5jdGlvbnMgY2FsbCB0aGVzZSBtb2RpZmllZCBvbmVzLCBhbmQgdGhlIG92ZXJhbGwgYXJjaGl0ZWN0dXJlLiBUaGlzIGdpdmVzIG1lIGluc2lnaHQgaW50byB0aGUgZW52aXJvbm1lbnQsIHBvdGVudGlhbCBjYWxsIGNoYWlucywgYW5kIHJlbGV2YW50IGRhdGEgc3RydWN0dXJlcy4gVGhpcyBjb250ZXh0IGlzIGNyaXRpY2FsIHRvIGRldmlzaW5nIGVmZmVjdGl2ZSBmdXp6aW5nIHN0cmF0ZWdpZXMuIEkgd2lsbCBuZWVkIHRvIGlkZW50aWZ5IHRoZSByZWxldmFudCBmb2N1cyBzeW1ib2xzIGFuZCBlbmFibGUgY29uZmlndXJhdGlvbnMgZm9yIG1heGltdW0gY292ZXJhZ2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTc6NDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7SVBfVlMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL2lwdnMvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O1xuRnVsbCBvdXRwdXQgaXMgdG9vIGxvbmcsIHNob3dpbmcgNTAwIG91dCBvZiA0MzkzIGxpbmVzLlxuVXNlIG1vcmUgcHJlY2lzZSBleHByZXNzaW9uIGlmIHBvc3NpYmxlLlxuXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy00LSNcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnOjU6bWVudWNvbmZpZyBJUF9WU1xubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctNi1cdHRyaXN0YXRlIFwmIzM0O0lQIHZpcnR1YWwgc2VydmVyIHN1cHBvcnRcJiMzNDtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy0yNi1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnOjI3OmlmIElQX1ZTXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy0yOC1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnOjI5OmNvbmZpZ1x0SVBfVlNfSVBWNlxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctMzAtXHRib29sIFwmIzM0O0lQdjYgc3VwcG9ydCBmb3IgSVBWU1wmIzM0O1xubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc6MzE6XHRkZXBlbmRzIG9uIElQVjYgPSB5IHx8IElQX1ZTID0gSVBWNlxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctMzItXHRzZWxlY3QgTkZfREVGUkFHX0lQVjZcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy0zNy1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnOjM4OmNvbmZpZ1x0SVBfVlNfREVCVUdcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTM5LVx0Ym9vbCBcJiMzNDtJUCB2aXJ0dWFsIHNlcnZlciBkZWJ1Z2dpbmdcJiMzNDtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy00NC1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnOjQ1OmNvbmZpZ1x0SVBfVlNfVEFCX0JJVFNcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTQ2LVx0aW50IFwmIzM0O0lQVlMgY29ubmVjdGlvbiB0YWJsZSBzaXplICh0aGUgTnRoIHBvd2VyIG9mIDIpXCYjMzQ7XG4tLVxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc9Nzc9Y29tbWVudCBcJiMzNDtJUFZTIHRyYW5zcG9ydCBwcm90b2NvbCBsb2FkIGJhbGFuY2luZyBzdXBwb3J0XCYjMzQ7XG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy03OC1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnOjc5OmNvbmZpZ1x0SVBfVlNfUFJPVE9fVENQXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy04MC1cdGJvb2wgXCYjMzQ7VENQIGxvYWQgYmFsYW5jaW5nIHN1cHBvcnRcJiMzNDtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy04NC1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnOjg1OmNvbmZpZ1x0SVBfVlNfUFJPVE9fVURQXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy04Ni1cdGJvb2wgXCYjMzQ7VURQIGxvYWQgYmFsYW5jaW5nIHN1cHBvcnRcJiMzNDtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy05MC1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnOjkxOmNvbmZpZ1x0SVBfVlNfUFJPVE9fQUhfRVNQXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZzo5MjpcdGRlZl9ib29sIElQX1ZTX1BST1RPX0VTUCB8fCBJUF9WU19QUk9UT19BSFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctOTMtXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZzo5NDpjb25maWdcdElQX1ZTX1BST1RPX0VTUFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctOTUtXHRib29sIFwmIzM0O0VTUCBsb2FkIGJhbGFuY2luZyBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctOTktXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZzoxMDA6Y29uZmlnXHRJUF9WU19QUk9UT19BSFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctMTAxLVx0Ym9vbCBcJiMzNDtBSCBsb2FkIGJhbGFuY2luZyBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctMTA1LVxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc6MTA2OmNvbmZpZyAgSVBfVlNfUFJPVE9fU0NUUFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctMTA3LVx0Ym9vbCBcJiMzNDtTQ1RQIGxvYWQgYmFsYW5jaW5nIHN1cHBvcnRcJiMzNDtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZz0xMTM9Y29tbWVudCBcJiMzNDtJUFZTIHNjaGVkdWxlclwmIzM0O1xubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctMTE0LVxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc6MTE1OmNvbmZpZ1x0SVBfVlNfUlJcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTExNi1cdHRyaXN0YXRlIFwmIzM0O3JvdW5kLXJvYmluIHNjaGVkdWxpbmdcJiMzNDtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy0xMjMtIFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc6MTI0OmNvbmZpZ1x0SVBfVlNfV1JSXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy0xMjUtXHR0cmlzdGF0ZSBcJiMzNDt3ZWlnaHRlZCByb3VuZC1yb2JpbiBzY2hlZHVsaW5nXCYjMzQ7XG4tLVxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctMTM2LVxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc6MTM3OmNvbmZpZ1x0SVBfVlNfTENcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTEzOC1cdHRyaXN0YXRlIFwmIzM0O2xlYXN0LWNvbm5lY3Rpb24gc2NoZWR1bGluZ1wmIzM0O1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTE0Ni1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnOjE0Nzpjb25maWdcdElQX1ZTX1dMQ1xubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctMTQ4LVx0dHJpc3RhdGUgXCYjMzQ7d2VpZ2h0ZWQgbGVhc3QtY29ubmVjdGlvbiBzY2hlZHVsaW5nXCYjMzQ7XG4tLVxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctMTU2LVxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc6MTU3OmNvbmZpZyAgSVBfVlNfRk9cbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTE1OC1cdFx0dHJpc3RhdGUgXCYjMzQ7d2VpZ2h0ZWQgZmFpbG92ZXIgc2NoZWR1bGluZ1wmIzM0O1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTE2Ni1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnOjE2Nzpjb25maWcgIElQX1ZTX09WRlxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctMTY4LVx0dHJpc3RhdGUgXCYjMzQ7d2VpZ2h0ZWQgb3ZlcmZsb3cgc2NoZWR1bGluZ1wmIzM0O1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTE3Ny1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnOjE3ODpjb25maWdcdElQX1ZTX0xCTENcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTE3OS1cdHRyaXN0YXRlIFwmIzM0O2xvY2FsaXR5LWJhc2VkIGxlYXN0LWNvbm5lY3Rpb24gc2NoZWR1bGluZ1wmIzM0O1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTE5MS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnOjE5Mjpjb25maWcgIElQX1ZTX0xCTENSXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy0xOTMtXHR0cmlzdGF0ZSBcJiMzNDtsb2NhbGl0eS1iYXNlZCBsZWFzdC1jb25uZWN0aW9uIHdpdGggcmVwbGljYXRpb24gc2NoZWR1bGluZ1wmIzM0O1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTIwOS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnOjIxMDpjb25maWdcdElQX1ZTX0RIXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy0yMTEtXHR0cmlzdGF0ZSBcJiMzNDtkZXN0aW5hdGlvbiBoYXNoaW5nIHNjaGVkdWxpbmdcJiMzNDtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy0yMTktXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZzoyMjA6Y29uZmlnXHRJUF9WU19TSFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctMjIxLVx0dHJpc3RhdGUgXCYjMzQ7c291cmNlIGhhc2hpbmcgc2NoZWR1bGluZ1wmIzM0O1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTIyOS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnOjIzMDpjb25maWdcdElQX1ZTX01IXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy0yMzEtXHR0cmlzdGF0ZSBcJiMzNDttYWdsZXYgaGFzaGluZyBzY2hlZHVsaW5nXCYjMzQ7XG4tLVxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctMjQ4LVxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc6MjQ5OmNvbmZpZ1x0SVBfVlNfU0VEXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy0yNTAtXHR0cmlzdGF0ZSBcJiMzNDtzaG9ydGVzdCBleHBlY3RlZCBkZWxheSBzY2hlZHVsaW5nXCYjMzQ7XG4tLVxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctMjYxLVxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc6MjYyOmNvbmZpZ1x0SVBfVlNfTlFcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTI2My1cdHRyaXN0YXRlIFwmIzM0O25ldmVyIHF1ZXVlIHNjaGVkdWxpbmdcJiMzNDtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy0yNzQtXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZzoyNzU6Y29uZmlnXHRJUF9WU19UV09TXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy0yNzYtXHR0cmlzdGF0ZSBcJiMzNDt3ZWlnaHRlZCByYW5kb20gdHdvcyBjaG9pY2UgbGVhc3QtY29ubmVjdGlvbiBzY2hlZHVsaW5nXCYjMzQ7XG4tLVxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc9Mjg2PWNvbW1lbnQgJiMzOTtJUFZTIFNIIHNjaGVkdWxlciYjMzk7XG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy0yODctXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZzoyODg6Y29uZmlnIElQX1ZTX1NIX1RBQl9CSVRTXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy0yODktXHRpbnQgXCYjMzQ7SVBWUyBzb3VyY2UgaGFzaGluZyB0YWJsZSBzaXplICh0aGUgTnRoIHBvd2VyIG9mIDIpXCYjMzQ7XG4tLVxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc9MzAxPWNvbW1lbnQgJiMzOTtJUFZTIE1IIHNjaGVkdWxlciYjMzk7XG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy0zMDItXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZzozMDM6Y29uZmlnIElQX1ZTX01IX1RBQl9JTkRFWFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctMzA0LVx0aW50IFwmIzM0O0lQVlMgbWFnbGV2IGhhc2hpbmcgdGFibGUgaW5kZXggb2Ygc2l6ZSAodGhlIHByaW1lIG51bWJlcnMpXCYjMzQ7XG4tLVxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc9MzE5PWNvbW1lbnQgJiMzOTtJUFZTIGFwcGxpY2F0aW9uIGhlbHBlciYjMzk7XG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy0zMjAtXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZzozMjE6Y29uZmlnXHRJUF9WU19GVFBcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTMyMi1cdHRyaXN0YXRlIFwmIzM0O0ZUUCBwcm90b2NvbCBoZWxwZXJcJiMzNDtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnOjMyMzpcdGRlcGVuZHMgb24gSVBfVlNfUFJPVE9fVENQIFx1MDAyNlx1MDAyNiBORl9DT05OVFJBQ0sgXHUwMDI2XHUwMDI2IE5GX05BVCBcdTAwMjZcdTAwMjYgXFxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTMyNC1cdFx0TkZfQ09OTlRSQUNLX0ZUUFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc6MzI1Olx0c2VsZWN0IElQX1ZTX05GQ1Rcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTMyNi1cdGhlbHBcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy0zMzYtXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZzozMzc6Y29uZmlnXHRJUF9WU19ORkNUXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy0zMzgtXHRib29sIFwmIzM0O05ldGZpbHRlciBjb25uZWN0aW9uIHRyYWNraW5nXCYjMzQ7XG4tLVxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctMzQ0LVxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc6MzQ1OmNvbmZpZ1x0SVBfVlNfUEVfU0lQXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy0zNDYtXHR0cmlzdGF0ZSBcJiMzNDtTSVAgcGVyc2lzdGVuY2UgZW5naW5lXCYjMzQ7XG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZzozNDc6XHRkZXBlbmRzIG9uIElQX1ZTX1BST1RPX1VEUFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctMzQ4LVx0ZGVwZW5kcyBvbiBORl9DT05OVFJBQ0tfU0lQXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc9MzUyPWNvbmZpZyBHQ09WX1BST0ZJTEVfSVBWU1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTM2MC1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnOjM2MTplbmRpZiAjIElQX1ZTXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL01ha2VmaWxlPTc9aXBfdnNfcHJvdG8tb2Jqcy15IDo9XG5uZXQvbmV0ZmlsdGVyL2lwdnMvTWFrZWZpbGU6ODppcF92c19wcm90by1vYmpzLSQoQ09ORklHX0lQX1ZTX1BST1RPX1RDUCkgJiM0Mzs9IGlwX3ZzX3Byb3RvX3RjcC5vXG5uZXQvbmV0ZmlsdGVyL2lwdnMvTWFrZWZpbGU6OTppcF92c19wcm90by1vYmpzLSQoQ09ORklHX0lQX1ZTX1BST1RPX1VEUCkgJiM0Mzs9IGlwX3ZzX3Byb3RvX3VkcC5vXG5uZXQvbmV0ZmlsdGVyL2lwdnMvTWFrZWZpbGU6MTA6aXBfdnNfcHJvdG8tb2Jqcy0kKENPTkZJR19JUF9WU19QUk9UT19BSF9FU1ApICYjNDM7PSBpcF92c19wcm90b19haF9lc3Aub1xubmV0L25ldGZpbHRlci9pcHZzL01ha2VmaWxlOjExOmlwX3ZzX3Byb3RvLW9ianMtJChDT05GSUdfSVBfVlNfUFJPVE9fU0NUUCkgJiM0Mzs9IGlwX3ZzX3Byb3RvX3NjdHAub1xubmV0L25ldGZpbHRlci9pcHZzL01ha2VmaWxlLTEyLVxubmV0L25ldGZpbHRlci9pcHZzL01ha2VmaWxlPTEzPWlwX3ZzLWV4dHJhX29ianMteSA6PVxubmV0L25ldGZpbHRlci9pcHZzL01ha2VmaWxlOjE0OmlwX3ZzLWV4dHJhX29ianMtJChDT05GSUdfSVBfVlNfTkZDVCkgJiM0Mzs9IGlwX3ZzX25mY3Qub1xubmV0L25ldGZpbHRlci9pcHZzL01ha2VmaWxlLTE1LVxubmV0L25ldGZpbHRlci9pcHZzL01ha2VmaWxlPTE2PWlwX3ZzLW9ianMgOj1cdGlwX3ZzX2Nvbm4ubyBpcF92c19jb3JlLm8gaXBfdnNfY3RsLm8gaXBfdnNfc2NoZWQub1x0ICAgXFxcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvTWFrZWZpbGUtMjItIyBJUFZTIGNvcmVcbm5ldC9uZXRmaWx0ZXIvaXB2cy9NYWtlZmlsZToyMzpvYmotJChDT05GSUdfSVBfVlMpICYjNDM7PSBpcF92cy5vXG5uZXQvbmV0ZmlsdGVyL2lwdnMvTWFrZWZpbGUtMjQtXG5uZXQvbmV0ZmlsdGVyL2lwdnMvTWFrZWZpbGUtMjUtIyBJUFZTIHNjaGVkdWxlcnNcbm5ldC9uZXRmaWx0ZXIvaXB2cy9NYWtlZmlsZToyNjpvYmotJChDT05GSUdfSVBfVlNfUlIpICYjNDM7PSBpcF92c19yci5vXG5uZXQvbmV0ZmlsdGVyL2lwdnMvTWFrZWZpbGU6Mjc6b2JqLSQoQ09ORklHX0lQX1ZTX1dSUikgJiM0Mzs9IGlwX3ZzX3dyci5vXG5uZXQvbmV0ZmlsdGVyL2lwdnMvTWFrZWZpbGU6Mjg6b2JqLSQoQ09ORklHX0lQX1ZTX0xDKSAmIzQzOz0gaXBfdnNfbGMub1xubmV0L25ldGZpbHRlci9pcHZzL01ha2VmaWxlOjI5Om9iai0kKENPTkZJR19JUF9WU19XTEMpICYjNDM7PSBpcF92c193bGMub1xubmV0L25ldGZpbHRlci9pcHZzL01ha2VmaWxlOjMwOm9iai0kKENPTkZJR19JUF9WU19GTykgJiM0Mzs9IGlwX3ZzX2ZvLm9cbm5ldC9uZXRmaWx0ZXIvaXB2cy9NYWtlZmlsZTozMTpvYmotJChDT05GSUdfSVBfVlNfT1ZGKSAmIzQzOz0gaXBfdnNfb3ZmLm9cbm5ldC9uZXRmaWx0ZXIvaXB2cy9NYWtlZmlsZTozMjpvYmotJChDT05GSUdfSVBfVlNfTEJMQykgJiM0Mzs9IGlwX3ZzX2xibGMub1xubmV0L25ldGZpbHRlci9pcHZzL01ha2VmaWxlOjMzOm9iai0kKENPTkZJR19JUF9WU19MQkxDUikgJiM0Mzs9IGlwX3ZzX2xibGNyLm9cbm5ldC9uZXRmaWx0ZXIvaXB2cy9NYWtlZmlsZTozNDpvYmotJChDT05GSUdfSVBfVlNfREgpICYjNDM7PSBpcF92c19kaC5vXG5uZXQvbmV0ZmlsdGVyL2lwdnMvTWFrZWZpbGU6MzU6b2JqLSQoQ09ORklHX0lQX1ZTX1NIKSAmIzQzOz0gaXBfdnNfc2gub1xubmV0L25ldGZpbHRlci9pcHZzL01ha2VmaWxlOjM2Om9iai0kKENPTkZJR19JUF9WU19NSCkgJiM0Mzs9IGlwX3ZzX21oLm9cbm5ldC9uZXRmaWx0ZXIvaXB2cy9NYWtlZmlsZTozNzpvYmotJChDT05GSUdfSVBfVlNfU0VEKSAmIzQzOz0gaXBfdnNfc2VkLm9cbm5ldC9uZXRmaWx0ZXIvaXB2cy9NYWtlZmlsZTozODpvYmotJChDT05GSUdfSVBfVlNfTlEpICYjNDM7PSBpcF92c19ucS5vXG5uZXQvbmV0ZmlsdGVyL2lwdnMvTWFrZWZpbGU6Mzk6b2JqLSQoQ09ORklHX0lQX1ZTX1RXT1MpICYjNDM7PSBpcF92c190d29zLm9cbm5ldC9uZXRmaWx0ZXIvaXB2cy9NYWtlZmlsZS00MC1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9NYWtlZmlsZS00MS0jIElQVlMgYXBwbGljYXRpb24gaGVscGVyc1xubmV0L25ldGZpbHRlci9pcHZzL01ha2VmaWxlOjQyOm9iai0kKENPTkZJR19JUF9WU19GVFApICYjNDM7PSBpcF92c19mdHAub1xubmV0L25ldGZpbHRlci9pcHZzL01ha2VmaWxlLTQzLVxubmV0L25ldGZpbHRlci9pcHZzL01ha2VmaWxlLTQ0LSMgSVBWUyBjb25uZWN0aW9uIHRlbXBsYXRlIHJldHJpZXZlcnNcbm5ldC9uZXRmaWx0ZXIvaXB2cy9NYWtlZmlsZTo0NTpvYmotJChDT05GSUdfSVBfVlNfUEVfU0lQKSAmIzQzOz0gaXBfdnNfcGVfc2lwLm9cbm5ldC9uZXRmaWx0ZXIvaXB2cy9NYWtlZmlsZS00Ni1pZmRlZiBDT05GSUdfR0NPVl9QUk9GSUxFX0lQVlNcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfYXBwLmM9NzI9aXBfdnNfYXBwX2luY19uZXcoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIHN0cnVjdCBpcF92c19hcHAgKmFwcCwgX191MTYgcHJvdG8sXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2FwcC5jLTEwOC1cdGxpc3RfYWRkKFx1MDAyNmluYy1cdTAwM2VhX2xpc3QsIFx1MDAyNmFwcC1cdTAwM2VpbmNzX2xpc3QpO1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2FwcC5jOjEwOTpcdElQX1ZTX0RCRyg5LCBcJiMzNDslcyBBcHAgJXM6JXUgcmVnaXN0ZXJlZFxcblwmIzM0Oyxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19hcHAuYy0xMTAtXHRcdCAgcHAtXHUwMDNlbmFtZSwgaW5jLVx1MDAzZW5hbWUsIG50b2hzKGluYy1cdTAwM2Vwb3J0KSk7XG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2FwcC5jPTEyND1pcF92c19hcHBfaW5jX3JlbGVhc2Uoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIHN0cnVjdCBpcF92c19hcHAgKmluYylcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfYXBwLmMtMTMzLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2FwcC5jOjEzNDpcdElQX1ZTX0RCRyg5LCBcJiMzNDslcyBBcHAgJXM6JXUgdW5yZWdpc3RlcmVkXFxuXCYjMzQ7LFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2FwcC5jLTEzNS1cdFx0ICBwcC1cdTAwM2VuYW1lLCBpbmMtXHUwMDNlbmFtZSwgbnRvaHMoaW5jLVx1MDAzZXBvcnQpKTtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfYXBwLmM9Mjg3PXN0YXRpYyBpbmxpbmUgdm9pZCB2c19maXhfc2VxKGNvbnN0IHN0cnVjdCBpcF92c19zZXEgKnZzZXEsIHN0cnVjdCB0Y3BoZHIgKnRoKVxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19hcHAuYy0yOTgtXHRcdFx0dGgtXHUwMDNlc2VxID0gaHRvbmwoc2VxICYjNDM7IHZzZXEtXHUwMDNlZGVsdGEpO1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2FwcC5jOjI5OTpcdFx0XHRJUF9WU19EQkcoOSwgXCYjMzQ7JXMoKTogYWRkZWQgZGVsdGEgKCVkKSB0byBzZXFcXG5cJiMzNDssXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfYXBwLmMtMzAwLVx0XHRcdFx0ICBfX2Z1bmNfXywgdnNlcS1cdTAwM2VkZWx0YSk7XG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2FwcC5jLTMwMi1cdFx0XHR0aC1cdTAwM2VzZXEgPSBodG9ubChzZXEgJiM0MzsgdnNlcS1cdTAwM2VwcmV2aW91c19kZWx0YSk7XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfYXBwLmM6MzAzOlx0XHRcdElQX1ZTX0RCRyg5LCBcJiMzNDslcygpOiBhZGRlZCBwcmV2aW91c19kZWx0YSAoJWQpIHRvIHNlcVxcblwmIzM0Oyxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19hcHAuYy0zMDQtXHRcdFx0XHQgIF9fZnVuY19fLCB2c2VxLVx1MDAzZXByZXZpb3VzX2RlbHRhKTtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfYXBwLmM9MzE0PXZzX2ZpeF9hY2tfc2VxKGNvbnN0IHN0cnVjdCBpcF92c19zZXEgKnZzZXEsIHN0cnVjdCB0Y3BoZHIgKnRoKVxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19hcHAuYy0zMjctXHRcdFx0dGgtXHUwMDNlYWNrX3NlcSA9IGh0b25sKGFja19zZXEgLSB2c2VxLVx1MDAzZWRlbHRhKTtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19hcHAuYzozMjg6XHRcdFx0SVBfVlNfREJHKDksIFwmIzM0OyVzKCk6IHN1YnRyYWN0ZWQgZGVsdGEgXCYjMzQ7XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfYXBwLmMtMzI5LVx0XHRcdFx0ICBcJiMzNDsoJWQpIGZyb20gYWNrX3NlcVxcblwmIzM0OywgX19mdW5jX18sIHZzZXEtXHUwMDNlZGVsdGEpO1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19hcHAuYy0zMzItXHRcdFx0dGgtXHUwMDNlYWNrX3NlcSA9IGh0b25sKGFja19zZXEgLSB2c2VxLVx1MDAzZXByZXZpb3VzX2RlbHRhKTtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19hcHAuYzozMzM6XHRcdFx0SVBfVlNfREJHKDksIFwmIzM0OyVzKCk6IHN1YnRyYWN0ZWQgXCYjMzQ7XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfYXBwLmMtMzM0LVx0XHRcdFx0ICBcJiMzNDtwcmV2aW91c19kZWx0YSAoJWQpIGZyb20gYWNrX3NlcVxcblwmIzM0Oyxcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfYXBwLmM9MzU5PXN0YXRpYyBpbmxpbmUgaW50IGFwcF90Y3BfcGt0X291dChzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsIHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2FwcC5jLTM3OS1cdCAqL1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2FwcC5jOjM4MDpcdGlmIChjcC1cdTAwM2VmbGFncyBcdTAwMjYgSVBfVlNfQ09OTl9GX09VVF9TRVEpXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfYXBwLmMtMzgxLVx0XHR2c19maXhfc2VxKFx1MDAyNmNwLVx1MDAzZW91dF9zZXEsIHRoKTtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19hcHAuYzozODI6XHRpZiAoY3AtXHUwMDNlZmxhZ3MgXHUwMDI2IElQX1ZTX0NPTk5fRl9JTl9TRVEpXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfYXBwLmMtMzgzLVx0XHR2c19maXhfYWNrX3NlcShcdTAwMjZjcC1cdTAwM2Vpbl9zZXEsIHRoKTtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfYXBwLmMtMzk4LVx0XHR2c19zZXFfdXBkYXRlKGNwLCBcdTAwMjZjcC1cdTAwM2VvdXRfc2VxLFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2FwcC5jOjM5OTpcdFx0XHQgICAgICBJUF9WU19DT05OX0ZfT1VUX1NFUSwgc2VxLCBkaWZmKTtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19hcHAuYy00MDAtXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2FwcC5jPTQzNT1zdGF0aWMgaW5saW5lIGludCBhcHBfdGNwX3BrdF9pbihzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsIHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2FwcC5jLTQ1NS1cdCAqL1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2FwcC5jOjQ1NjpcdGlmIChjcC1cdTAwM2VmbGFncyBcdTAwMjYgSVBfVlNfQ09OTl9GX0lOX1NFUSlcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19hcHAuYy00NTctXHRcdHZzX2ZpeF9zZXEoXHUwMDI2Y3AtXHUwMDNlaW5fc2VxLCB0aCk7XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfYXBwLmM6NDU4Olx0aWYgKGNwLVx1MDAzZWZsYWdzIFx1MDAyNiBJUF9WU19DT05OX0ZfT1VUX1NFUSlcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19hcHAuYy00NTktXHRcdHZzX2ZpeF9hY2tfc2VxKFx1MDAyNmNwLVx1MDAzZW91dF9zZXEsIHRoKTtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfYXBwLmMtNDc0LVx0XHR2c19zZXFfdXBkYXRlKGNwLCBcdTAwMjZjcC1cdTAwM2Vpbl9zZXEsXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfYXBwLmM6NDc1Olx0XHRcdCAgICAgIElQX1ZTX0NPTk5fRl9JTl9TRVEsIHNlcSwgZGlmZik7XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfYXBwLmMtNDc2LVxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmMtMzgtXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jOjM5OiNpZm5kZWYgQ09ORklHX0lQX1ZTX1RBQl9CSVRTXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jOjQwOiNkZWZpbmUgQ09ORklHX0lQX1ZTX1RBQl9CSVRTXHQxMlxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYy00MS0jZW5kaWZcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jLTQ1LSovXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jOjQ2OnN0YXRpYyBpbnQgaXBfdnNfY29ubl90YWJfYml0cyA9IENPTkZJR19JUF9WU19UQUJfQklUUztcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmMtNDctbW9kdWxlX3BhcmFtX25hbWVkKGNvbm5fdGFiX2JpdHMsIGlwX3ZzX2Nvbm5fdGFiX2JpdHMsIGludCwgMDQ0NCk7XG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYz01ND1zdGF0aWMgc3RydWN0IGttZW1fY2FjaGUgKmlwX3ZzX2Nvbm5fY2FjaGVwIF9fcmVhZF9tb3N0bHk7XG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYy01Ni0vKiBXZSBuZWVkIGFuIGFkZHJzdHJsZW4gdGhhdCB3b3JrcyB3aXRoIG9yIHdpdGhvdXQgdjYgKi9cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmM6NTc6I2lmZGVmIENPTkZJR19JUF9WU19JUFY2XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jOjU4OiNkZWZpbmUgSVBfVlNfQUREUlNUUkxFTiBJTkVUNl9BRERSU1RSTEVOXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jLTU5LSNlbHNlXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jOjYwOiNkZWZpbmUgSVBfVlNfQUREUlNUUkxFTiAoOCYjNDM7MSlcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmMtNjEtI2VuZGlmXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYz0xODQ9c3RhdGljIHUzMiBpcF92c19jb25uX2hhc2hrZXkoc3RydWN0IGlwX3ZzX3JodCAqdCwgaW50IGFmLCB1bnNpZ25lZCBpbnQgcHJvdG8sXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYy0xOTAtXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jOjE5MTojaWZkZWYgQ09ORklHX0lQX1ZTX0lQVjZcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmMtMTkyLVx0aWYgKGFmID09IEFGX0lORVQ2KSB7XG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYz0yNjE9c3RhdGljIGlubGluZSBpbnQgaXBfdnNfY29ubl9oYXNoKHN0cnVjdCBpcF92c19jb25uICpjcClcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jLTI3MC1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmM6MjcxOlx0aWYgKGNwLVx1MDAzZWZsYWdzIFx1MDAyNiBJUF9WU19DT05OX0ZfT05FX1BBQ0tFVClcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmMtMjcyLVx0XHRyZXR1cm4gMDtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jLTI5Mi1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmM6MjkzOlx0Y3AtXHUwMDNlZmxhZ3MgfD0gSVBfVlNfQ09OTl9GX0hBU0hFRDtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmMtMjk0LVx0V1JJVEVfT05DRShjcC1cdTAwM2VobjAuaGFzaF9rZXksIGhhc2hfa2V5KTtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jLTMwNi1cdGlmIChhdG9taWNfcmVhZChcdTAwMjZpcHZzLVx1MDAzZWNvbm5fY291bnQpIFx1MDAzZSB0LVx1MDAzZXVfdGhyZXNoIFx1MDAyNlx1MDAyNlxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYzozMDc6XHQgICAgIXRlc3RfYW5kX3NldF9iaXQoSVBfVlNfV09SS19DT05OX1JFU0laRSwgXHUwMDI2aXB2cy1cdTAwM2V3b3JrX2ZsYWdzKSlcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmMtMzA4LVx0XHRtb2RfZGVsYXllZF93b3JrKHN5c3RlbV9kZmxfbG9uZ193cSwgXHUwMDI2aXB2cy1cdTAwM2Vjb25uX3Jlc2l6ZV93b3JrLCAwKTtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jPTMxNj1zdGF0aWMgaW5saW5lIGJvb2wgaXBfdnNfY29ubl91bmxpbmsoc3RydWN0IGlwX3ZzX2Nvbm4gKmNwKVxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmMtMzI0LVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYzozMjU6XHRpZiAoY3AtXHUwMDNlZmxhZ3MgXHUwMDI2IElQX1ZTX0NPTk5fRl9PTkVfUEFDS0VUKVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYy0zMjYtXHRcdHJldHVybiByZWZjb3VudF9kZWNfaWZfb25lKFx1MDAyNmNwLVx1MDAzZXJlZmNudCk7XG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYy0zMzgtXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jOjMzOTpcdGlmIChjcC1cdTAwM2VmbGFncyBcdTAwMjYgSVBfVlNfQ09OTl9GX0hBU0hFRCkge1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYy0zNDAtXHRcdC8qIERlY3JlYXNlIHJlZmNudCBhbmQgdW5saW5rIGNvbm4gb25seSBpZiB3ZSBhcmUgbGFzdCB1c2VyICovXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYy0zNDUtXHRcdFx0XHRobGlzdF9ibF9kZWxfcmN1KFx1MDAyNmNwLVx1MDAzZWhuMS5ub2RlKTtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmM6MzQ2Olx0XHRcdGNwLVx1MDAzZWZsYWdzIFx1MDAyNj0gfklQX1ZTX0NPTk5fRl9IQVNIRUQ7XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jLTM0Ny1cdFx0XHRyZXQgPSB0cnVlO1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmM9MzY3PV9faXBfdnNfY29ubl9pbl9nZXQoY29uc3Qgc3RydWN0IGlwX3ZzX2Nvbm5fcGFyYW0gKnApXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jLTM2OC17XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jOjM2OTpcdERFQ0xBUkVfSVBfVlNfUkhUX1dBTEtfQlVDS0VUX1JDVSgpO1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYy0zNzAtXHRzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cyA9IHAtXHUwMDNlaXB2cztcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jLTM5NS1cdFx0XHRcdCAgICAoIXAtXHUwMDNlY3BvcnQgXlxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYzozOTY6XHRcdFx0XHQgICAgICghKGNwLVx1MDAzZWZsYWdzIFx1MDAyNiBJUF9WU19DT05OX0ZfTk9fQ1BPUlQpKSkgXHUwMDI2XHUwMDI2XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jLTM5Ny1cdFx0XHRcdCAgICBwLVx1MDAzZXByb3RvY29sID09IGNwLVx1MDAzZXByb3RvY29sKSB7XG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYz00MTM9c3RydWN0IGlwX3ZzX2Nvbm4gKmlwX3ZzX2Nvbm5faW5fZ2V0KGNvbnN0IHN0cnVjdCBpcF92c19jb25uX3BhcmFtICpwKVxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmMtNDI5LVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYzo0MzA6XHRJUF9WU19EQkdfQlVGKDksIFwmIzM0O2xvb2t1cC9pbiAlcyAlczolZC1cdTAwM2UlczolZCAlc1xcblwmIzM0Oyxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmMtNDMxLVx0XHQgICAgICBpcF92c19wcm90b19uYW1lKHAtXHUwMDNlcHJvdG9jb2wpLFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYzo0MzI6XHRcdCAgICAgIElQX1ZTX0RCR19BRERSKHAtXHUwMDNlYWYsIHAtXHUwMDNlY2FkZHIpLCBudG9ocyhwLVx1MDAzZWNwb3J0KSxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmM6NDMzOlx0XHQgICAgICBJUF9WU19EQkdfQUREUihwLVx1MDAzZWFmLCBwLVx1MDAzZXZhZGRyKSwgbnRvaHMocC1cdTAwM2V2cG9ydCksXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jLTQzNC1cdFx0ICAgICAgY3AgPyBcJiMzNDtoaXRcJiMzNDsgOiBcJiMzNDtub3QgaGl0XCYjMzQ7KTtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jPTQ3NT1zdHJ1Y3QgaXBfdnNfY29ubiAqaXBfdnNfY3RfaW5fZ2V0KGNvbnN0IHN0cnVjdCBpcF92c19jb25uX3BhcmFtICpwKVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYy00NzYte1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYzo0Nzc6XHRERUNMQVJFX0lQX1ZTX1JIVF9XQUxLX0JVQ0tFVF9SQ1UoKTtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmMtNDc4LVx0c3RydWN0IG5ldG5zX2lwdnMgKmlwdnMgPSBwLVx1MDAzZWlwdnM7XG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYy01MTQtXHRcdFx0XHQgICAgcC1cdTAwM2VjcG9ydCA9PSBjcC1cdTAwM2VjcG9ydCBcdTAwMjZcdTAwMjZcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmM6NTE1Olx0XHRcdFx0ICAgIGNwLVx1MDAzZWZsYWdzIFx1MDAyNiBJUF9WU19DT05OX0ZfVEVNUExBVEUgXHUwMDI2XHUwMDI2XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jLTUxNi1cdFx0XHRcdCAgICBwLVx1MDAzZXByb3RvY29sID09IGNwLVx1MDAzZXByb3RvY29sIFx1MDAyNlx1MDAyNlxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmMtNTI5LVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYzo1MzA6XHRJUF9WU19EQkdfQlVGKDksIFwmIzM0O3RlbXBsYXRlIGxvb2t1cC9pbiAlcyAlczolZC1cdTAwM2UlczolZCAlc1xcblwmIzM0Oyxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmMtNTMxLVx0XHQgICAgICBpcF92c19wcm90b19uYW1lKHAtXHUwMDNlcHJvdG9jb2wpLFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYzo1MzI6XHRcdCAgICAgIElQX1ZTX0RCR19BRERSKHAtXHUwMDNlYWYsIHAtXHUwMDNlY2FkZHIpLCBudG9ocyhwLVx1MDAzZWNwb3J0KSxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmM6NTMzOlx0XHQgICAgICBJUF9WU19EQkdfQUREUihwLVx1MDAzZWFmLCBwLVx1MDAzZXZhZGRyKSwgbnRvaHMocC1cdTAwM2V2cG9ydCksXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jLTUzNC1cdFx0ICAgICAgY3AgPyBcJiMzNDtoaXRcJiMzNDsgOiBcJiMzNDtub3QgaGl0XCYjMzQ7KTtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jPTU0Mz1zdHJ1Y3QgaXBfdnNfY29ubiAqaXBfdnNfY29ubl9vdXRfZ2V0KGNvbnN0IHN0cnVjdCBpcF92c19jb25uX3BhcmFtICpwKVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYy01NDQte1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYzo1NDU6XHRERUNMQVJFX0lQX1ZTX1JIVF9XQUxLX0JVQ0tFVF9SQ1UoKTtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmMtNTQ2LVx0c3RydWN0IG5ldG5zX2lwdnMgKmlwdnMgPSBwLVx1MDAzZWlwdnM7XG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYy01NjktXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jOjU3MDpcdFx0XHRcdGlmIChJUF9WU19GV0RfTUVUSE9EKGNwKSAhPSBJUF9WU19DT05OX0ZfTUFTUSkge1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYy01NzEtXHRcdFx0XHRcdHNwb3J0ID0gY3AtXHUwMDNldnBvcnQ7XG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYy01OTMtXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jOjU5NDpcdElQX1ZTX0RCR19CVUYoOSwgXCYjMzQ7bG9va3VwL291dCAlcyAlczolZC1cdTAwM2UlczolZCAlc1xcblwmIzM0Oyxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmMtNTk1LVx0XHQgICAgICBpcF92c19wcm90b19uYW1lKHAtXHUwMDNlcHJvdG9jb2wpLFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYzo1OTY6XHRcdCAgICAgIElQX1ZTX0RCR19BRERSKHAtXHUwMDNlYWYsIHAtXHUwMDNlY2FkZHIpLCBudG9ocyhwLVx1MDAzZWNwb3J0KSxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmM6NTk3Olx0XHQgICAgICBJUF9WU19EQkdfQUREUihwLVx1MDAzZWFmLCBwLVx1MDAzZXZhZGRyKSwgbnRvaHMocC1cdTAwM2V2cG9ydCksXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jLTU5OC1cdFx0ICAgICAgY3AgPyBcJiMzNDtoaXRcJiMzNDsgOiBcJiMzNDtub3QgaGl0XCYjMzQ7KTtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jPTYyMD1zdGF0aWMgdm9pZCBfX2lwX3ZzX2Nvbm5fcHV0X3RpbWVyKHN0cnVjdCBpcF92c19jb25uICpjcClcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmMtNjIxLXtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmM6NjIyOlx0dW5zaWduZWQgbG9uZyB0ID0gKGNwLVx1MDAzZWZsYWdzIFx1MDAyNiBJUF9WU19DT05OX0ZfT05FX1BBQ0tFVCkgP1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYy02MjMtXHRcdDAgOiBjcC1cdTAwM2V0aW1lb3V0O1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmM9NjI5PXZvaWQgaXBfdnNfY29ubl9wdXQoc3RydWN0IGlwX3ZzX2Nvbm4gKmNwKVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYy02MzAte1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYzo2MzE6XHRpZiAoKGNwLVx1MDAzZWZsYWdzIFx1MDAyNiBJUF9WU19DT05OX0ZfT05FX1BBQ0tFVCkgXHUwMDI2XHUwMDI2XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jLTYzMi1cdCAgICAocmVmY291bnRfcmVhZChcdTAwMjZjcC1cdTAwM2VyZWZjbnQpID09IDEpIFx1MDAyNlx1MDAyNlxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmM9NjQzPXZvaWQgaXBfdnNfY29ubl9maWxsX2Nwb3J0KHN0cnVjdCBpcF92c19jb25uICpjcCwgX19iZTE2IGNwb3J0KVxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmMtNjg0LVx0XHRcdHNwaW5fbG9ja19iaChcdTAwMjZjcC1cdTAwM2Vsb2NrKTtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmM6Njg1Olx0XHRcdGlmIChjcC1cdTAwM2VmbGFncyBcdTAwMjYgSVBfVlNfQ09OTl9GX05PX0NQT1JUIFx1MDAyNlx1MDAyNiBieV9tZSlcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmMtNjg2LVx0XHRcdFx0Y3AtXHUwMDNlY3BvcnQgPSAwO1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmMtNjg4LVx0XHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNmNwLVx1MDAzZWxvY2spO1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYzo2ODk6XHRcdFx0SVBfVlNfRVJSX1JMKFwmIzM0OyVzKCk6IFRvbyBtYW55IGh0IGNoYW5nZXMgZm9yIGRpciAlZFxcblwmIzM0Oyxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmMtNjkwLVx0XHRcdFx0ICAgICBfX2Z1bmNfXywgZGlyKTtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jLTc1Ny1cdC8qIEZpbGwgY3BvcnQgb25jZSwgZXZlbiBpZiBtdWx0aXBsZSBwYWNrZXRzIHRyeSB0byBkbyBpdCAqL1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYzo3NTg6XHRpZiAoY3AtXHUwMDNlZmxhZ3MgXHUwMDI2IElQX1ZTX0NPTk5fRl9OT19DUE9SVCBcdTAwMjZcdTAwMjYgKCFjcC1cdTAwM2VjcG9ydCB8fCBieV9tZSkpIHtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmMtNzU5LVx0XHQvKiBJZiB3ZSByYWNlIHdpdGggcmVzaXppbmcgbWFrZSBzdXJlIGNwb3J0IGlzIHNldCBmb3IgZGlyIDEgKi9cbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jLTc2NS1cdFx0XHRhdG9taWNfZGVjKFx1MDAyNmlwdnMtXHUwMDNlbm9fY3BvcnRfY29ubnNbYWZfaWRdKTtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmM6NzY2Olx0XHRcdGNwLVx1MDAzZWZsYWdzIFx1MDAyNj0gfklQX1ZTX0NPTk5fRl9OT19DUE9SVDtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmMtNzY3LVx0XHR9XG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYz03OTc9c3RhdGljIHZvaWQgaXBfdnNfY29ubl9jaGFuZ2VfZndkX21hc2soc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLCB1MzIgbmV3X2ZsYWdzKVxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmMtODA0LVx0LyogU2VlIGlwX3ZzX2Nvbm5fdXNlX2hhc2gyKCkgZm9yIHJlZmVyZW5jZSAqL1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYzo4MDU6XHRpZiAoKGNwLVx1MDAzZWZsYWdzIFx1MDAyNiBJUF9WU19DT05OX0ZfVEVNUExBVEUpIHx8XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jLTgwNi1cdCAgICAvKiBObyBjaGFuZ2UgaW4gZG91YmxlIGhhc2hpbmcgPyAqL1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYzo4MDc6XHQgICAgKElQX1ZTX0ZXRF9NRVRIT0QoY3ApID09IElQX1ZTX0NPTk5fRl9NQVNRKSA9PVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYzo4MDg6XHQgICAgKChuZXdfZmxhZ3MgXHUwMDI2IElQX1ZTX0NPTk5fRl9GV0RfTUFTSykgPT0gSVBfVlNfQ09OTl9GX01BU1EpKSB7XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jLTgwOS1cdFx0Y3AtXHUwMDNlZmxhZ3MgPSBuZXdfZmxhZ3M7XG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYz04NjY9aW50IGlwX3ZzX2Nvbm5fZGVzaXJlZF9zaXplKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBzdHJ1Y3QgaXBfdnNfcmh0ICp0LFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmMtODY5LVx0cmV0dXJuIGlwX3ZzX3JodF9kZXNpcmVkX3NpemUoaXB2cywgdCwgYXRvbWljX3JlYWQoXHUwMDI2aXB2cy1cdTAwM2Vjb25uX2NvdW50KSxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmM6ODcwOlx0XHRcdFx0ICAgICAgbGZhY3RvciwgSVBfVlNfQ09OTl9UQUJfTUlOX0JJVFMsXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jLTg3MS1cdFx0XHRcdCAgICAgIGlwX3ZzX2Nvbm5fdGFiX2JpdHMpO1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmM9ODc1PXN0cnVjdCBpcF92c19yaHQgKmlwX3ZzX2Nvbm5fdGFiX2FsbG9jKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBpbnQgYnVja2V0cyxcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jLTg4Mi1cdHNjb3VudHMgPSBjbGFtcChidWNrZXRzIFx1MDAzZVx1MDAzZSA2LCAxLCAyNTYpO1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYzo4ODM6XHQvKiBsb2NrczogYmFzZWQgb24gcGFyYWxsZWwgSVBfVlNfQ09OTl9GX05PX0NQT1JUIG9wZXJhdGlvbnMgJiM0MzsgcmVzaXplICovXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jLTg4NC1cdGxvY2tzID0gY2xhbXAoOCwgMSwgc2NvdW50cyk7XG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYy04ODktXHR0LVx1MDAzZWxmYWN0b3IgPSBsZmFjdG9yO1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYzo4OTA6XHRpcF92c19yaHRfc2V0X3RocmVzaG9sZHModCwgdC1cdTAwM2VzaXplLCBsZmFjdG9yLCBJUF9WU19DT05OX1RBQl9NSU5fQklUUyxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmMtODkxLVx0XHRcdFx0IGlwX3ZzX2Nvbm5fdGFiX2JpdHMpO1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmM9ODk2PXN0YXRpYyB2b2lkIGNvbm5fcmVzaXplX3dvcmtfaGFuZGxlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYy05MTQtXHQvKiBBbGxvdyB3b3JrIHRvIGJlIHF1ZXVlZCBhZ2FpbiAqL1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYzo5MTU6XHRjbGVhcl9iaXQoSVBfVlNfV09SS19DT05OX1JFU0laRSwgXHUwMDI2aXB2cy1cdTAwM2V3b3JrX2ZsYWdzKTtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmMtOTE2LVx0dCA9IHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQoaXB2cy1cdTAwM2Vjb25uX3RhYiwgMSk7XG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYy05MzUtXHQvKiBGbGlwIHRoZSB0YWJsZV9pZCAqL1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYzo5MzY6XHR0X25ldy1cdTAwM2V0YWJsZV9pZCA9IHQtXHUwMDNldGFibGVfaWQgXiBJUF9WU19SSFRfVEFCTEVfSURfTUFTSztcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmMtOTM3LVxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmM9MTAyMz1zdGF0aWMgaW5saW5lIHZvaWQgaXBfdnNfYmluZF94bWl0KHN0cnVjdCBpcF92c19jb25uICpjcClcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmMtMTAyNC17XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jOjEwMjU6XHRzd2l0Y2ggKElQX1ZTX0ZXRF9NRVRIT0QoY3ApKSB7XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jOjEwMjY6XHRjYXNlIElQX1ZTX0NPTk5fRl9NQVNROlxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYy0xMDI3LVx0XHRjcC1cdTAwM2VwYWNrZXRfeG1pdCA9IGlwX3ZzX25hdF94bWl0O1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmMtMTAyOS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmM6MTAzMDpcdGNhc2UgSVBfVlNfQ09OTl9GX1RVTk5FTDpcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmM6MTAzMTojaWZkZWYgQ09ORklHX0lQX1ZTX0lQVjZcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmMtMTAzMi1cdFx0aWYgKGNwLVx1MDAzZWRhZiA9PSBBRl9JTkVUNilcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jLTEwMzgtXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jOjEwMzk6XHRjYXNlIElQX1ZTX0NPTk5fRl9EUk9VVEU6XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jLTEwNDAtXHRcdGNwLVx1MDAzZXBhY2tldF94bWl0ID0gaXBfdnNfZHJfeG1pdDtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jLTEwNDItXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jOjEwNDM6XHRjYXNlIElQX1ZTX0NPTk5fRl9MT0NBTE5PREU6XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jLTEwNDQtXHRcdGNwLVx1MDAzZXBhY2tldF94bWl0ID0gaXBfdnNfbnVsbF94bWl0O1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmMtMTA0Ni1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmM6MTA0NzpcdGNhc2UgSVBfVlNfQ09OTl9GX0JZUEFTUzpcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmMtMTA0OC1cdFx0Y3AtXHUwMDNlcGFja2V0X3htaXQgPSBpcF92c19ieXBhc3NfeG1pdDtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jLTEwNTItXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jOjEwNTM6I2lmZGVmIENPTkZJR19JUF9WU19JUFY2XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jLTEwNTQtc3RhdGljIGlubGluZSB2b2lkIGlwX3ZzX2JpbmRfeG1pdF92NihzdHJ1Y3QgaXBfdnNfY29ubiAqY3ApXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jLTEwNTUte1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYzoxMDU2Olx0c3dpdGNoIChJUF9WU19GV0RfTUVUSE9EKGNwKSkge1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYzoxMDU3Olx0Y2FzZSBJUF9WU19DT05OX0ZfTUFTUTpcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmMtMTA1OC1cdFx0Y3AtXHUwMDNlcGFja2V0X3htaXQgPSBpcF92c19uYXRfeG1pdF92Njtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jLTEwNjAtXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jOjEwNjE6XHRjYXNlIElQX1ZTX0NPTk5fRl9UVU5ORUw6XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jLTEwNjItXHRcdGlmIChjcC1cdTAwM2VkYWYgPT0gQUZfSU5FVDYpXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYy0xMDY3LVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYzoxMDY4Olx0Y2FzZSBJUF9WU19DT05OX0ZfRFJPVVRFOlxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYy0xMDY5LVx0XHRjcC1cdTAwM2VwYWNrZXRfeG1pdCA9IGlwX3ZzX2RyX3htaXRfdjY7XG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYy0xMDcxLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYzoxMDcyOlx0Y2FzZSBJUF9WU19DT05OX0ZfTE9DQUxOT0RFOlxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYy0xMDczLVx0XHRjcC1cdTAwM2VwYWNrZXRfeG1pdCA9IGlwX3ZzX251bGxfeG1pdDtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jLTEwNzUtXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jOjEwNzY6XHRjYXNlIElQX1ZTX0NPTk5fRl9CWVBBU1M6XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jLTEwNzctXHRcdGNwLVx1MDAzZXBhY2tldF94bWl0ID0gaXBfdnNfYnlwYXNzX3htaXRfdjY7XG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYz0xMDg5PWlwX3ZzX2JpbmRfZGVzdChzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsIHN0cnVjdCBpcF92c19kZXN0ICpkZXN0KVxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmMtMTEwMi1cdGlmIChjcC1cdTAwM2Vwcm90b2NvbCAhPSBJUFBST1RPX1VEUClcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmM6MTEwMzpcdFx0Y29ubl9mbGFncyBcdTAwMjY9IH5JUF9WU19DT05OX0ZfT05FX1BBQ0tFVDtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmMtMTEwNC1cdGZsYWdzID0gY3AtXHUwMDNlZmxhZ3M7XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jLTExMDUtXHQvKiBCaW5kIHdpdGggdGhlIGRlc3RpbmF0aW9uIGFuZCBpdHMgY29ycmVzcG9uZGluZyB0cmFuc21pdHRlciAqL1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYzoxMTA2Olx0aWYgKGZsYWdzIFx1MDAyNiBJUF9WU19DT05OX0ZfU1lOQykge1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYy0xMTA3LVx0XHQvKiBTeW5jZWQgY29ubnMgYXJlIGhhc2hlZCwgc28gdGhleSBjYW4gbm90IGdldCB0aGlzIGZsYWcgKi9cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmM6MTEwODpcdFx0Y29ubl9mbGFncyBcdTAwMjY9IH5JUF9WU19DT05OX0ZfT05FX1BBQ0tFVDtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmMtMTEwOS1cbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jLTExMTItXHRcdCAqL1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYzoxMTEzOlx0XHRpZiAoIShmbGFncyBcdTAwMjYgSVBfVlNfQ09OTl9GX1RFTVBMQVRFKSlcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmM6MTExNDpcdFx0XHRjb25uX2ZsYWdzIFx1MDAyNj0gfklQX1ZTX0NPTk5fRl9JTkFDVElWRTtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmMtMTExNS1cdFx0LyogY29ubmVjdGlvbnMgaW5oZXJpdCBmb3J3YXJkaW5nIG1ldGhvZCBmcm9tIGRlc3QgKi9cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmM6MTExNjpcdFx0ZmxhZ3MgXHUwMDI2PSB+KElQX1ZTX0NPTk5fRl9GV0RfTUFTSyB8IElQX1ZTX0NPTk5fRl9OT09VVFBVVCk7XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jLTExMTctXHRcdGZsYWdzIHw9IGNvbm5fZmxhZ3M7XG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYy0xMTIwLVx0XHQgKi9cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmM6MTEyMTpcdFx0aWYgKGNwLVx1MDAzZWZsYWdzIFx1MDAyNiBJUF9WU19DT05OX0ZfSEFTSEVEKVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYy0xMTIyLVx0XHRcdGlwX3ZzX2Nvbm5fY2hhbmdlX2Z3ZF9tYXNrKGNwLCBmbGFncyk7XG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYy0xMTMwLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYzoxMTMxOlx0SVBfVlNfREJHX0JVRig3LCBcJiMzNDtCaW5kLWRlc3QgJXMgYzolczolZCB2OiVzOiVkIFwmIzM0O1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYy0xMTMyLVx0XHQgICAgICBcJiMzNDtkOiVzOiVkIGZ3ZDolYyBzOiV1IGNvbm4tXHUwMDNlZmxhZ3M6JVggY29ubi1cdTAwM2VyZWZjbnQ6JWQgXCYjMzQ7XG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYy0xMTM0LVx0XHQgICAgICBpcF92c19wcm90b19uYW1lKGNwLVx1MDAzZXByb3RvY29sKSxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmM6MTEzNTpcdFx0ICAgICAgSVBfVlNfREJHX0FERFIoY3AtXHUwMDNlYWYsIFx1MDAyNmNwLVx1MDAzZWNhZGRyKSwgbnRvaHMoY3AtXHUwMDNlY3BvcnQpLFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYzoxMTM2Olx0XHQgICAgICBJUF9WU19EQkdfQUREUihjcC1cdTAwM2VhZiwgXHUwMDI2Y3AtXHUwMDNldmFkZHIpLCBudG9ocyhjcC1cdTAwM2V2cG9ydCksXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jOjExMzc6XHRcdCAgICAgIElQX1ZTX0RCR19BRERSKGNwLVx1MDAzZWRhZiwgXHUwMDI2Y3AtXHUwMDNlZGFkZHIpLCBudG9ocyhjcC1cdTAwM2VkcG9ydCksXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jLTExMzgtXHRcdCAgICAgIGlwX3ZzX2Z3ZF90YWcoY3ApLCBjcC1cdTAwM2VzdGF0ZSxcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jLTExNDItXHQvKiBVcGRhdGUgdGhlIGNvbm5lY3Rpb24gY291bnRlcnMgKi9cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmM6MTE0MzpcdGlmICghKGZsYWdzIFx1MDAyNiBJUF9WU19DT05OX0ZfVEVNUExBVEUpKSB7XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jLTExNDQtXHRcdGludCB0Yztcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jLTExNDktXHRcdCAqL1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYzoxMTUwOlx0XHRpZiAoIShmbGFncyBcdTAwMjYgSVBfVlNfQ09OTl9GX0lOQUNUSVZFKSlcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmMtMTE1MS1cdFx0XHRhdG9taWNfaW5jKFx1MDAyNmRlc3QtXHUwMDNlYWN0aXZlY29ubnMpO1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmM9MTE2Nz12b2lkIGlwX3ZzX3RyeV9iaW5kX2Rlc3Qoc3RydWN0IGlwX3ZzX2Nvbm4gKmNwKVxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmMtMTIwMC1cdFx0Y3AtXHUwMDNlcGFja2V0X3htaXQgPSBOVUxMO1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYzoxMjAxOiNpZmRlZiBDT05GSUdfSVBfVlNfSVBWNlxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYy0xMjAyLVx0XHRpZiAoY3AtXHUwMDNlYWYgPT0gQUZfSU5FVDYpXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYz0xMjIwPXN0YXRpYyBpbmxpbmUgdm9pZCBpcF92c191bmJpbmRfZGVzdChzdHJ1Y3QgaXBfdnNfY29ubiAqY3ApXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYy0xMjI2LVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYzoxMjI3Olx0SVBfVlNfREJHX0JVRig3LCBcJiMzNDtVbmJpbmQtZGVzdCAlcyBjOiVzOiVkIHY6JXM6JWQgXCYjMzQ7XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jLTEyMjgtXHRcdCAgICAgIFwmIzM0O2Q6JXM6JWQgZndkOiVjIHM6JXUgY29ubi1cdTAwM2VmbGFnczolWCBjb25uLVx1MDAzZXJlZmNudDolZCBcJiMzNDtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jLTEyMzAtXHRcdCAgICAgIGlwX3ZzX3Byb3RvX25hbWUoY3AtXHUwMDNlcHJvdG9jb2wpLFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYzoxMjMxOlx0XHQgICAgICBJUF9WU19EQkdfQUREUihjcC1cdTAwM2VhZiwgXHUwMDI2Y3AtXHUwMDNlY2FkZHIpLCBudG9ocyhjcC1cdTAwM2VjcG9ydCksXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jOjEyMzI6XHRcdCAgICAgIElQX1ZTX0RCR19BRERSKGNwLVx1MDAzZWFmLCBcdTAwMjZjcC1cdTAwM2V2YWRkciksIG50b2hzKGNwLVx1MDAzZXZwb3J0KSxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmM6MTIzMzpcdFx0ICAgICAgSVBfVlNfREJHX0FERFIoY3AtXHUwMDNlZGFmLCBcdTAwMjZjcC1cdTAwM2VkYWRkciksIG50b2hzKGNwLVx1MDAzZWRwb3J0KSxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmMtMTIzNC1cdFx0ICAgICAgaXBfdnNfZndkX3RhZyhjcCksIGNwLVx1MDAzZXN0YXRlLFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmMtMTIzOC1cdC8qIFVwZGF0ZSB0aGUgY29ubmVjdGlvbiBjb3VudGVycyAqL1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYzoxMjM5Olx0aWYgKCEoY3AtXHUwMDNlZmxhZ3MgXHUwMDI2IElQX1ZTX0NPTk5fRl9URU1QTEFURSkpIHtcblxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDE3OjQzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3NDA3CgkJCQkJCQlvdXRwdXQ6IDQzCgkJCQkJCQl0aG91Z2h0czogNTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjoKCioqRGl2aW5nIGludG8gdGhlIElQVlMgU3luYyBDb2RlKioKCk9rYXksIHNvIHdlIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIGhvdyB0aGVzZSBjb25uZWN0aW9uIHN5bmNocm9uaXphdGlvbiBtZWNoYW5pc21zIGluIElQVlMgYXJlIGV2b2x2aW5nLiBNeSBndXQgZmVlbGluZyBpcyB0byBzdGFydCBieSBleGFtaW5pbmcgdGhlIGNoYW5nZXMgYXJvdW5kIHRoZSBgbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuY2AgZmlsZS4gVGhhdCYjMzk7cyB0aGUgbGlrZWx5IHNwb3QgZm9yIHRoZSBjb3JlIHN5bmNocm9uaXphdGlvbiBsb2dpYy4gSSB3YW50IHRvIHNlZSBob3cgdGhleSYjMzk7cmUgZGVmaW5pbmcgYW5kIHVzaW5nIGBpcF92c19zeW5jX2Nvbm5gIGFuZCBgaXBfdnNfc3luY19jb25uX3YwYCwgc3BlY2lmaWNhbGx5LiBUaGUgZGVmaW5pdGlvbnMgc2hvdWxkIGlsbHVtaW5hdGUgdGhlIGRhdGEgc3RydWN0dXJlcyBpbnZvbHZlZCwgYW5kIHRoZSBjYWxsIHNpdGVzIHdpbGwgcmV2ZWFsIHRoZSBzeW5jaHJvbml6YXRpb24gd29ya2Zsb3cuIEJ5IHRyYWNpbmcgdGhlIGNhbGxzIHRvIHRoZXNlIGZ1bmN0aW9ucywgSSBjYW4gdW5kZXJzdGFuZCB3aGVyZSBhbmQgaG93IHRoZSBjb25uZWN0aW9uIHN0YXRlIGlzIGJlaW5nIHNoYXJlZCAob3Igbm90KSBiZXR3ZWVuIG5vZGVzLiBUaGlzIHNob3VsZCBnaXZlIG1lIGEgc29saWQgYmFzZSBmb3IgdW5kZXJzdGFuZGluZyBhbnkgbW9kaWZpY2F0aW9ucyBvciBwb3RlbnRpYWwgaXNzdWVzIGluIHRoZSBjb25uZWN0aW9uIHRyYWNraW5nIHN5bmNocm9uaXphdGlvbiB3aXRoaW4gdGhlIGNvbnRleHQgb2YgSVBWUy4gSSBleHBlY3QgdG8gZmluZCBjbHVlcyBhYm91dCB2ZXJzaW9uaW5nIGFuZCBjb21wYXRpYmlsaXR5IHRoZXJlIGFzIHdlbGwuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTc6NDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNTQwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDgwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA1NDA6XHRcdFx0XHQgICAgICAgaW50IHBrdHMpXG4gNTQxOlx0e1xuIDU0MjpcdFx0c3RydWN0IGlwX3ZzX3N5bmNfbWVzZ192MCAqbTtcbiA1NDM6XHRcdHN0cnVjdCBpcF92c19zeW5jX2Nvbm5fdjAgKnM7XG4gNTQ0Olx0XHRzdHJ1Y3QgaXBfdnNfc3luY19idWZmICpidWZmO1xuIDU0NTpcdFx0c3RydWN0IGlwdnNfbWFzdGVyX3N5bmNfc3RhdGUgKm1zO1xuIDU0NjpcdFx0dTMyIGZsYWdzLCBzZXFfbWFzaztcbiA1NDc6XHRcdHVuc2lnbmVkIGludCBsZW47XG4gNTQ4Olx0XHRpbnQgaWQ7XG4gNTQ5Olx0XG4gNTUwOlx0XHRpZiAodW5saWtlbHkoY3AtXHUwMDNlYWYgIT0gQUZfSU5FVCkpXG4gNTUxOlx0XHRcdHJldHVybjtcbiA1NTI6XHRcdGZsYWdzID0gUkVBRF9PTkNFKGNwLVx1MDAzZWZsYWdzKTtcbiA1NTM6XHRcdC8qIERvIG5vdCBzeW5jIE9ORSBQQUNLRVQgKi9cbiA1NTQ6XHRcdGlmIChmbGFncyBcdTAwMjYgSVBfVlNfQ09OTl9GX09ORV9QQUNLRVQpXG4gNTU1Olx0XHRcdHJldHVybjtcbiA1NTY6XHRcbiA1NTc6XHRcdGlmICghaXBfdnNfc3luY19jb25uX25lZWRlZChpcHZzLCBjcCwgcGt0cykpXG4gNTU4Olx0XHRcdHJldHVybjtcbiA1NTk6XHRcbiA1NjA6XHRcdHNwaW5fbG9ja19iaChcdTAwMjZpcHZzLVx1MDAzZXN5bmNfYnVmZl9sb2NrKTtcbiA1NjE6XHRcdGlmICghKGlwdnMtXHUwMDNlc3luY19zdGF0ZSBcdTAwMjYgSVBfVlNfU1RBVEVfTUFTVEVSKSkge1xuIDU2MjpcdFx0XHRzcGluX3VubG9ja19iaChcdTAwMjZpcHZzLVx1MDAzZXN5bmNfYnVmZl9sb2NrKTtcbiA1NjM6XHRcdFx0cmV0dXJuO1xuIDU2NDpcdFx0fVxuIDU2NTpcdFxuIDU2NjpcdFx0aWQgPSBzZWxlY3RfbWFzdGVyX3RocmVhZF9pZChpcHZzLCBjcCk7XG4gNTY3Olx0XHRtcyA9IFx1MDAyNmlwdnMtXHUwMDNlbXNbaWRdO1xuIDU2ODpcdFx0YnVmZiA9IG1zLVx1MDAzZXN5bmNfYnVmZjtcbiA1Njk6XHRcdHNlcV9tYXNrID0gZmxhZ3MgXHUwMDI2IElQX1ZTX0NPTk5fRl9TRVFfTUFTSztcbiA1NzA6XHRcdGxlbiA9IHNlcV9tYXNrID8gRlVMTF9DT05OX1NJWkUgOiBTSU1QTEVfQ09OTl9TSVpFO1xuIDU3MTpcdFx0aWYgKGJ1ZmYpIHtcbiA1NzI6XHRcdFx0bSA9IChzdHJ1Y3QgaXBfdnNfc3luY19tZXNnX3YwICopIGJ1ZmYtXHUwMDNlbWVzZztcbiA1NzM6XHRcdFx0LyogU2VuZCBidWZmZXIgaWYgaXQgaXMgZm9yIHYxICovXG4gNTc0Olx0XHRcdGlmIChidWZmLVx1MDAzZWhlYWQgJiM0MzsgbGVuIFx1MDAzZSBidWZmLVx1MDAzZWVuZCB8fCAhbS1cdTAwM2Vucl9jb25ucykge1xuIDU3NTpcdFx0XHRcdHNiX3F1ZXVlX3RhaWwoaXB2cywgbXMpO1xuIDU3NjpcdFx0XHRcdG1zLVx1MDAzZXN5bmNfYnVmZiA9IE5VTEw7XG4gNTc3Olx0XHRcdFx0YnVmZiA9IE5VTEw7XG4gNTc4Olx0XHRcdH1cbiA1Nzk6XHRcdH1cbiA1ODA6XHRcdGlmICghYnVmZikge1xuIDU4MTpcdFx0XHRidWZmID0gaXBfdnNfc3luY19idWZmX2NyZWF0ZV92MChpcHZzLCBsZW4pO1xuIDU4MjpcdFx0XHRpZiAoIWJ1ZmYpIHtcbiA1ODM6XHRcdFx0XHRzcGluX3VubG9ja19iaChcdTAwMjZpcHZzLVx1MDAzZXN5bmNfYnVmZl9sb2NrKTtcbiA1ODQ6XHRcdFx0XHRwcl9lcnIoXCYjMzQ7aXBfdnNfc3luY19idWZmX2NyZWF0ZSBmYWlsZWQuXFxuXCYjMzQ7KTtcbiA1ODU6XHRcdFx0XHRyZXR1cm47XG4gNTg2Olx0XHRcdH1cbiA1ODc6XHRcdFx0bXMtXHUwMDNlc3luY19idWZmID0gYnVmZjtcbiA1ODg6XHRcdH1cbiA1ODk6XHRcbiA1OTA6XHRcdG0gPSAoc3RydWN0IGlwX3ZzX3N5bmNfbWVzZ192MCAqKSBidWZmLVx1MDAzZW1lc2c7XG4gNTkxOlx0XHRzID0gKHN0cnVjdCBpcF92c19zeW5jX2Nvbm5fdjAgKikgYnVmZi1cdTAwM2VoZWFkO1xuIDU5MjpcdFxuIDU5MzpcdFx0LyogY29weSBtZW1iZXJzICovXG4gNTk0Olx0XHRzLVx1MDAzZXJlc2VydmVkID0gMDtcbiA1OTU6XHRcdHMtXHUwMDNlcHJvdG9jb2wgPSBjcC1cdTAwM2Vwcm90b2NvbDtcbiA1OTY6XHRcdHMtXHUwMDNlY3BvcnQgPSBjcC1cdTAwM2VjcG9ydDtcbiA1OTc6XHRcdHMtXHUwMDNldnBvcnQgPSBjcC1cdTAwM2V2cG9ydDtcbiA1OTg6XHRcdHMtXHUwMDNlZHBvcnQgPSBjcC1cdTAwM2VkcG9ydDtcbiA1OTk6XHRcdHMtXHUwMDNlY2FkZHIgPSBjcC1cdTAwM2VjYWRkci5pcDtcbiA2MDA6XHRcdHMtXHUwMDNldmFkZHIgPSBjcC1cdTAwM2V2YWRkci5pcDtcbiA2MDE6XHRcdHMtXHUwMDNlZGFkZHIgPSBjcC1cdTAwM2VkYWRkci5pcDtcbiA2MDI6XHRcdHMtXHUwMDNlZmxhZ3MgPSBodG9ucyhmbGFncyBcdTAwMjYgfklQX1ZTX0NPTk5fRl9IQVNIRUQpO1xuIDYwMzpcdFx0cy1cdTAwM2VzdGF0ZSA9IGh0b25zKGNwLVx1MDAzZXN0YXRlKTtcbiA2MDQ6XHRcdGlmIChzZXFfbWFzaykge1xuIDYwNTpcdFx0XHRzdHJ1Y3QgaXBfdnNfc3luY19jb25uX29wdGlvbnMgKm9wdCA9XG4gNjA2Olx0XHRcdFx0KHN0cnVjdCBpcF92c19zeW5jX2Nvbm5fb3B0aW9ucyAqKVx1MDAyNnNbMV07XG4gNjA3Olx0XHRcdG1lbWNweShvcHQsIFx1MDAyNmNwLVx1MDAzZXN5bmNfY29ubl9vcHQsIHNpemVvZigqb3B0KSk7XG4gNjA4Olx0XHR9XG4gNjA5Olx0XG4gNjEwOlx0XHRtLVx1MDAzZW5yX2Nvbm5zJiM0MzsmIzQzOztcbiA2MTE6XHRcdG0tXHUwMDNlc2l6ZSA9IGh0b25zKG50b2hzKG0tXHUwMDNlc2l6ZSkgJiM0MzsgbGVuKTtcbiA2MTI6XHRcdGJ1ZmYtXHUwMDNlaGVhZCAmIzQzOz0gbGVuO1xuIDYxMzpcdFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2aXB2cy1cdTAwM2VzeW5jX2J1ZmZfbG9jayk7XG4gNjE0Olx0XG4gNjE1Olx0XHQvKiBzeW5jaHJvbml6ZSBpdHMgY29udHJvbGxlciBpZiBpdCBoYXMgKi9cbiA2MTY6XHRcdGNwID0gY3AtXHUwMDNlY29udHJvbDtcbiA2MTc6XHRcdGlmIChjcCkge1xuIDYxODpcdFx0XHRpZiAoY3AtXHUwMDNlZmxhZ3MgXHUwMDI2IElQX1ZTX0NPTk5fRl9URU1QTEFURSlcbiA2MTk6XHRcdFx0XHRwa3RzID0gYXRvbWljX2luY19yZXR1cm4oXHUwMDI2Y3AtXHUwMDNlaW5fcGt0cyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTc6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTkwMjAKCQkJCQkJCW91dHB1dDogNDQKCQkJCQkJCXRob3VnaHRzOiAyNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIGBpcF92c19zeW5jLmNgIC0gTGluZXMgNjIwLTc2MCoqCgpPa2F5LCBzbyB3ZSYjMzk7cmUgZm9jdXNpbmcgb24gYSBzcGVjaWZpYyBjaHVuayBvZiBgaXBfdnNfc3luYy5jYCwgbGluZXMgNjIwIHRvIDc2MC4gSSBpbW1lZGlhdGVseSB0aGluazogJiMzNDtXaGF0JiMzOTtzIHRoZSBjb250ZXh0IGhlcmU/IFdoYXQgcGFydCBvZiB0aGUgc3luY2hyb25pemF0aW9uIGxvZ2ljIGFyZSB3ZSBsb29raW5nIGF0PyYjMzQ7IEtub3dpbmcgdGhpcyBjb2RlLCBJJiMzOTttIGFscmVhZHkgYW50aWNpcGF0aW5nIHdlJiMzOTtsbCBiZSBkZWFsaW5nIHdpdGggZWl0aGVyIGNvbm5lY3Rpb24gdHJhY2tpbmcgdXBkYXRlcywgcGVyaGFwcyBhIGNyaXRpY2FsIHNlY3Rpb24sIG9yIHBvdGVudGlhbGx5IHNvbWUga2luZCBvZiBoZWFsdGggY2hlY2sgbWVjaGFuaXNtIHN5bmMuIFRoaXMgYXJlYSBpcyBsaWtlbHkgaW52b2x2ZWQgaW4gaG93IHZpcnR1YWwgc2VydmVycyBhbmQgcmVhbCBzZXJ2ZXJzIHNoYXJlIHRoZWlyIGN1cnJlbnQgY29ubmVjdGlvbiBzdGF0ZXMgd2l0aCBlYWNoIG90aGVyLgoKSSYjMzk7bSBtZW50YWxseSBwcmVwYXJpbmcgZm9yIGEgZGVlcCBkaXZlLiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBhbnkgaW5kaWNhdGlvbnMgb2YgbG9ja2luZyBtZWNoYW5pc21zIOKAkyBtdXRleGVzIG9yIHNwaW5sb2NrcyDigJMgYXJvdW5kIHNoYXJlZCBkYXRhIHN0cnVjdHVyZXMuIEFyZSB0aGV5IHVzaW5nIHJlYWQtY29weS11cGRhdGUgKFJDVSkgaGVyZSBmb3IgYW55IG9mIHRoZSBzaGFyZWQgc3RydWN0dXJlcz8gQW55IHVzZSBvZiBhdG9taWMgb3BlcmF0aW9ucyBvciBtZW1vcnkgYmFycmllcnMgd2lsbCBiZSBvZiBncmVhdCBpbnRlcmVzdCBmb3IgbWUuIEkmIzM5O20gYWxzbyByZWFkeSB0byBhbmFseXplIHRoZSBlcnJvciBoYW5kbGluZyBhbmQgcmVjb3Zlcnkgc3RyYXRlZ2llcyB3aXRoaW4gdGhpcyBzZWN0aW9uOiBhcmUgdGhleSBqdXN0IGxvZ2dpbmcgZmFpbHVyZXMsIG9yIGF0dGVtcHRpbmcgdG8gcmV0cnkgc3luY2hyb25pemF0aW9uPwoKSSYjMzk7bSBrZWVwaW5nIGFuIGV5ZSBvdXQgZm9yIGFueSBzcGVjaWZpYyBkYXRhIHN0cnVjdHVyZXMgcmVmZXJlbmNlZC4gQXJlIHRoZXkgdXBkYXRpbmcgdGhlIGBpcF92c19jb25uYCBzdHJ1Y3R1cmUsIHRoZSBgaXBfdnNfZGVzdGAgc3RydWN0dXJlLCBvciBzb21lIGN1c3RvbSBzeW5jaHJvbml6YXRpb24gbWV0YWRhdGE/IEhvdyBhcmUgdGhleSBoYW5kbGluZyB0aGUgZGlmZmVyZW50IHN0YXRlcyBhIGNvbm5lY3Rpb24gY2FuIGJlIGluIChFU1RBQkxJU0hFRCwgRklOX1dBSVQsIGV0Yy4pIGFuZCB3aGF0IGltcGxpY2F0aW9ucyBkbyB0aG9zZSBzdGF0ZXMgaGF2ZT8gR2l2ZW4gdGhlIHJhbmdlLCBJJiMzOTttIGV4cGVjdGluZyBzb21lIHByZXR0eSBsb3ctbGV2ZWwgc29ja2V0IG9wZXJhdGlvbnMgb3IgbWVtb3J5IG1hbmlwdWxhdGlvbnMsIHNvIEkmIzM5O20gYWxzbyBwcmVwYXJpbmcgZm9yIHRoZSB0eXBpY2FsIGlzc3VlcyBhc3NvY2lhdGVkIHdpdGggc2hhcmVkIG1lbW9yeSBpbiBhIGhpZ2gtY29uY3VycmVuY3kgc2NlbmFyaW8uIEkgd29uZGVyIGlmIHRoZXkgd2lsbCBiZSBoYW5kbGluZyBmcmFnbWVudGF0aW9uIGlzc3VlcyBvciBVRFAgcGFja2V0cyBhcyB3ZWxsLgoKTGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIGFjdHVhbGx5IGluIHRoZXJlIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDE3OjQzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDYyMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDYyMDpcdFx0XHRlbHNlXG4gNjIxOlx0XHRcdFx0cGt0cyA9IHN5c2N0bF9zeW5jX3RocmVzaG9sZChpcHZzKTtcbiA2MjI6XHRcdFx0aXBfdnNfc3luY19jb25uKGlwdnMsIGNwLCBwa3RzKTtcbiA2MjM6XHRcdH1cbiA2MjQ6XHR9XG4gNjI1Olx0XG4gNjI2Olx0LypcbiA2Mjc6XHQgKiAgICAgIEFkZCBhbiBpcF92c19jb25uIGluZm9ybWF0aW9uIGludG8gdGhlIGN1cnJlbnQgc3luY19idWZmLlxuIDYyODpcdCAqICAgICAgQ2FsbGVkIGJ5IGlwX3ZzX2luLlxuIDYyOTpcdCAqICAgICAgU2VuZGluZyBWZXJzaW9uIDEgbWVzc2FnZXNcbiA2MzA6XHQgKi9cbiA2MzE6XHR2b2lkIGlwX3ZzX3N5bmNfY29ubihzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLCBpbnQgcGt0cylcbiA2MzI6XHR7XG4gNjMzOlx0XHRzdHJ1Y3QgaXBfdnNfc3luY19tZXNnICptO1xuIDYzNDpcdFx0dW5pb24gaXBfdnNfc3luY19jb25uICpzO1xuIDYzNTpcdFx0c3RydWN0IGlwX3ZzX3N5bmNfYnVmZiAqYnVmZjtcbiA2MzY6XHRcdHN0cnVjdCBpcHZzX21hc3Rlcl9zeW5jX3N0YXRlICptcztcbiA2Mzc6XHRcdGludCBpZDtcbiA2Mzg6XHRcdF9fdTggKnA7XG4gNjM5Olx0XHR1bnNpZ25lZCBpbnQgbGVuLCBwZV9uYW1lX2xlbiwgcGFkO1xuIDY0MDpcdFx0dTMyIGZsYWdzLCBzZXFfbWFzaztcbiA2NDE6XHRcbiA2NDI6XHRcdC8qIEhhbmRsZSBvbGQgdmVyc2lvbiBvZiB0aGUgcHJvdG9jb2wgKi9cbiA2NDM6XHRcdGlmIChzeXNjdGxfc3luY192ZXIoaXB2cykgPT0gMCkge1xuIDY0NDpcdFx0XHRpcF92c19zeW5jX2Nvbm5fdjAoaXB2cywgY3AsIHBrdHMpO1xuIDY0NTpcdFx0XHRyZXR1cm47XG4gNjQ2Olx0XHR9XG4gNjQ3Olx0XHQvKiBEbyBub3Qgc3luYyBPTkUgUEFDS0VUICovXG4gNjQ4Olx0XHRpZiAoY3AtXHUwMDNlZmxhZ3MgXHUwMDI2IElQX1ZTX0NPTk5fRl9PTkVfUEFDS0VUKVxuIDY0OTpcdFx0XHRnb3RvIGNvbnRyb2w7XG4gNjUwOlx0c2xvb3A6XG4gNjUxOlx0XHRpZiAoIWlwX3ZzX3N5bmNfY29ubl9uZWVkZWQoaXB2cywgY3AsIHBrdHMpKVxuIDY1MjpcdFx0XHRnb3RvIGNvbnRyb2w7XG4gNjUzOlx0XHRmbGFncyA9IFJFQURfT05DRShjcC1cdTAwM2VmbGFncyk7XG4gNjU0Olx0XG4gNjU1Olx0XHQvKiBTYW5pdHkgY2hlY2tzICovXG4gNjU2Olx0XHRwZV9uYW1lX2xlbiA9IDA7XG4gNjU3Olx0XHRpZiAoY3AtXHUwMDNlcGVfZGF0YV9sZW4pIHtcbiA2NTg6XHRcdFx0aWYgKCFjcC1cdTAwM2VwZV9kYXRhIHx8ICFjcC1cdTAwM2VkZXN0KSB7XG4gNjU5Olx0XHRcdFx0SVBfVlNfRVJSX1JMKFwmIzM0O1NZTkMsIGNvbm5lY3Rpb24gcGVfZGF0YSBpbnZhbGlkXFxuXCYjMzQ7KTtcbiA2NjA6XHRcdFx0XHRyZXR1cm47XG4gNjYxOlx0XHRcdH1cbiA2NjI6XHRcdFx0cGVfbmFtZV9sZW4gPSBzdHJubGVuKGNwLVx1MDAzZXBlLVx1MDAzZW5hbWUsIElQX1ZTX1BFTkFNRV9NQVhMRU4pO1xuIDY2MzpcdFx0fVxuIDY2NDpcdFxuIDY2NTpcdFx0c3Bpbl9sb2NrX2JoKFx1MDAyNmlwdnMtXHUwMDNlc3luY19idWZmX2xvY2spO1xuIDY2NjpcdFx0aWYgKCEoaXB2cy1cdTAwM2VzeW5jX3N0YXRlIFx1MDAyNiBJUF9WU19TVEFURV9NQVNURVIpKSB7XG4gNjY3Olx0XHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNmlwdnMtXHUwMDNlc3luY19idWZmX2xvY2spO1xuIDY2ODpcdFx0XHRyZXR1cm47XG4gNjY5Olx0XHR9XG4gNjcwOlx0XG4gNjcxOlx0XHRpZCA9IHNlbGVjdF9tYXN0ZXJfdGhyZWFkX2lkKGlwdnMsIGNwKTtcbiA2NzI6XHRcdG1zID0gXHUwMDI2aXB2cy1cdTAwM2Vtc1tpZF07XG4gNjczOlx0XG4gNjc0Olx0I2lmZGVmIENPTkZJR19JUF9WU19JUFY2XG4gNjc1Olx0XHRpZiAoY3AtXHUwMDNlYWYgPT0gQUZfSU5FVDYpXG4gNjc2Olx0XHRcdGxlbiA9IHNpemVvZihzdHJ1Y3QgaXBfdnNfc3luY192Nik7XG4gNjc3Olx0XHRlbHNlXG4gNjc4Olx0I2VuZGlmXG4gNjc5Olx0XHRcdGxlbiA9IHNpemVvZihzdHJ1Y3QgaXBfdnNfc3luY192NCk7XG4gNjgwOlx0XG4gNjgxOlx0XHRzZXFfbWFzayA9IGZsYWdzIFx1MDAyNiBJUF9WU19DT05OX0ZfU0VRX01BU0s7XG4gNjgyOlx0XHRpZiAoc2VxX21hc2spXG4gNjgzOlx0XHRcdGxlbiAmIzQzOz0gc2l6ZW9mKHN0cnVjdCBpcF92c19zeW5jX2Nvbm5fb3B0aW9ucykgJiM0MzsgMjtcbiA2ODQ6XHRcbiA2ODU6XHRcdGlmIChjcC1cdTAwM2VwZV9kYXRhX2xlbilcbiA2ODY6XHRcdFx0bGVuICYjNDM7PSBjcC1cdTAwM2VwZV9kYXRhX2xlbiAmIzQzOyAyO1x0LyogJiM0MzsgUGFyYW0gaGRyIGZpZWxkICovXG4gNjg3Olx0XHRpZiAocGVfbmFtZV9sZW4pXG4gNjg4Olx0XHRcdGxlbiAmIzQzOz0gcGVfbmFtZV9sZW4gJiM0MzsgMjtcbiA2ODk6XHRcbiA2OTA6XHRcdC8qIGNoZWNrIGlmIHRoZXJlIGlzIGEgc3BhY2UgZm9yIHRoaXMgb25lICAqL1xuIDY5MTpcdFx0cGFkID0gMDtcbiA2OTI6XHRcdGJ1ZmYgPSBtcy1cdTAwM2VzeW5jX2J1ZmY7XG4gNjkzOlx0XHRpZiAoYnVmZikge1xuIDY5NDpcdFx0XHRtID0gYnVmZi1cdTAwM2VtZXNnO1xuIDY5NTpcdFx0XHRwYWQgPSAoNCAtIChzaXplX3QpIGJ1ZmYtXHUwMDNlaGVhZCkgXHUwMDI2IDM7XG4gNjk2Olx0XHRcdC8qIFNlbmQgYnVmZmVyIGlmIGl0IGlzIGZvciB2MCAqL1xuIDY5NzpcdFx0XHRpZiAoYnVmZi1cdTAwM2VoZWFkICYjNDM7IGxlbiAmIzQzOyBwYWQgXHUwMDNlIGJ1ZmYtXHUwMDNlZW5kIHx8IG0tXHUwMDNlcmVzZXJ2ZWQpIHtcbiA2OTg6XHRcdFx0XHRzYl9xdWV1ZV90YWlsKGlwdnMsIG1zKTtcbiA2OTk6XHRcdFx0XHRtcy1cdTAwM2VzeW5jX2J1ZmYgPSBOVUxMO1xuIDcwMDpcdFx0XHRcdGJ1ZmYgPSBOVUxMO1xuIDcwMTpcdFx0XHRcdHBhZCA9IDA7XG4gNzAyOlx0XHRcdH1cbiA3MDM6XHRcdH1cbiA3MDQ6XHRcbiA3MDU6XHRcdGlmICghYnVmZikge1xuIDcwNjpcdFx0XHRidWZmID0gaXBfdnNfc3luY19idWZmX2NyZWF0ZShpcHZzLCBsZW4pO1xuIDcwNzpcdFx0XHRpZiAoIWJ1ZmYpIHtcbiA3MDg6XHRcdFx0XHRzcGluX3VubG9ja19iaChcdTAwMjZpcHZzLVx1MDAzZXN5bmNfYnVmZl9sb2NrKTtcbiA3MDk6XHRcdFx0XHRwcl9lcnIoXCYjMzQ7aXBfdnNfc3luY19idWZmX2NyZWF0ZSBmYWlsZWQuXFxuXCYjMzQ7KTtcbiA3MTA6XHRcdFx0XHRyZXR1cm47XG4gNzExOlx0XHRcdH1cbiA3MTI6XHRcdFx0bXMtXHUwMDNlc3luY19idWZmID0gYnVmZjtcbiA3MTM6XHRcdFx0bSA9IGJ1ZmYtXHUwMDNlbWVzZztcbiA3MTQ6XHRcdH1cbiA3MTU6XHRcbiA3MTY6XHRcdHAgPSBidWZmLVx1MDAzZWhlYWQ7XG4gNzE3Olx0XHRidWZmLVx1MDAzZWhlYWQgJiM0Mzs9IHBhZCAmIzQzOyBsZW47XG4gNzE4Olx0XHRtLVx1MDAzZXNpemUgPSBodG9ucyhudG9ocyhtLVx1MDAzZXNpemUpICYjNDM7IHBhZCAmIzQzOyBsZW4pO1xuIDcxOTpcdFx0LyogQWRkIGV2LiBwYWRkaW5nIGZyb20gcHJldi4gc3luY19jb25uICovXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTc6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjEwMzIKCQkJCQkJCW91dHB1dDogNDMKCQkJCQkJCXRob3VnaHRzOiAxNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgRGVlcGVyIGludG8gYGlwX3ZzX3N5bmNfY29ubmAqKgoKQWxyaWdodCwgSSYjMzk7bSB0aGlua2luZyBhYm91dCBgaXBfdnNfc3luY19jb25uYC4gSXQmIzM5O3MgYSBrZXkgcGllY2Ugb2YgdGhlIElQVlMgc3luY2hyb25pemF0aW9uIHB1enpsZSwgYW5kIEkgbmVlZCB0byByZWZyZXNoIG15IHVuZGVyc3RhbmRpbmcgb2YgaXRzIHJvbGUuIFRoZSBuYW1lIGl0c2VsZiBzdWdnZXN0cyBhIGNvbm5lY3Rpb24tcmVsYXRlZCBmdW5jdGlvbiwgbGlrZWx5IHRpZWQgdG8gbWFpbnRhaW5pbmcgc3RhdGUgY29uc2lzdGVuY3kgYWNyb3NzIHRoZSBjbHVzdGVyLiBJIG5lZWQgdG8gcXVpY2tseSBnZXQgYSBmdWxsIHBpY3R1cmUgb2YgdGhlIGJlaGF2aW9yLiBJIG5lZWQgdG8gcXVpY2tseSBzZWUgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgaW52b2x2ZWQgd2l0aCBgaXBfdnNfc3luY19jb25uYCB0byBrbm93IGV4YWN0bHkgd2hhdCBpdCBkb2VzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxNzo0MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA3MjAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDcyMDpcdFx0d2hpbGUgKHBhZC0tKVxuIDcyMTpcdFx0XHQqKHAmIzQzOyYjNDM7KSA9IDA7XG4gNzIyOlx0XG4gNzIzOlx0XHRzID0gKHVuaW9uIGlwX3ZzX3N5bmNfY29ubiAqKXA7XG4gNzI0Olx0XG4gNzI1Olx0XHQvKiBTZXQgbWVzc2FnZSB0eXBlICBcdTAwMjYgY29weSBtZW1iZXJzICovXG4gNzI2Olx0XHRzLVx1MDAzZXY0LnR5cGUgPSAoY3AtXHUwMDNlYWYgPT0gQUZfSU5FVDYgPyBTVFlQRV9GX0lORVQ2IDogMCk7XG4gNzI3Olx0XHRzLVx1MDAzZXY0LnZlcl9zaXplID0gaHRvbnMobGVuIFx1MDAyNiBTVkVSX01BU0spO1x0LyogVmVyc2lvbiAwICovXG4gNzI4Olx0XHRzLVx1MDAzZXY0LmZsYWdzID0gaHRvbmwoZmxhZ3MgXHUwMDI2IH5JUF9WU19DT05OX0ZfSEFTSEVEKTtcbiA3Mjk6XHRcdHMtXHUwMDNldjQuc3RhdGUgPSBodG9ucyhjcC1cdTAwM2VzdGF0ZSk7XG4gNzMwOlx0XHRzLVx1MDAzZXY0LnByb3RvY29sID0gY3AtXHUwMDNlcHJvdG9jb2w7XG4gNzMxOlx0XHRzLVx1MDAzZXY0LmNwb3J0ID0gY3AtXHUwMDNlY3BvcnQ7XG4gNzMyOlx0XHRzLVx1MDAzZXY0LnZwb3J0ID0gY3AtXHUwMDNldnBvcnQ7XG4gNzMzOlx0XHRzLVx1MDAzZXY0LmRwb3J0ID0gY3AtXHUwMDNlZHBvcnQ7XG4gNzM0Olx0XHRzLVx1MDAzZXY0LmZ3bWFyayA9IGh0b25sKGNwLVx1MDAzZWZ3bWFyayk7XG4gNzM1Olx0XHRzLVx1MDAzZXY0LnRpbWVvdXQgPSBodG9ubChjcC1cdTAwM2V0aW1lb3V0IC8gSFopO1xuIDczNjpcdFx0bS1cdTAwM2Vucl9jb25ucyYjNDM7JiM0Mzs7XG4gNzM3Olx0XG4gNzM4Olx0I2lmZGVmIENPTkZJR19JUF9WU19JUFY2XG4gNzM5Olx0XHRpZiAoY3AtXHUwMDNlYWYgPT0gQUZfSU5FVDYpIHtcbiA3NDA6XHRcdFx0cCAmIzQzOz0gc2l6ZW9mKHN0cnVjdCBpcF92c19zeW5jX3Y2KTtcbiA3NDE6XHRcdFx0cy1cdTAwM2V2Ni5jYWRkciA9IGNwLVx1MDAzZWNhZGRyLmluNjtcbiA3NDI6XHRcdFx0cy1cdTAwM2V2Ni52YWRkciA9IGNwLVx1MDAzZXZhZGRyLmluNjtcbiA3NDM6XHRcdFx0cy1cdTAwM2V2Ni5kYWRkciA9IGNwLVx1MDAzZWRhZGRyLmluNjtcbiA3NDQ6XHRcdH0gZWxzZVxuIDc0NTpcdCNlbmRpZlxuIDc0NjpcdFx0e1xuIDc0NzpcdFx0XHRwICYjNDM7PSBzaXplb2Yoc3RydWN0IGlwX3ZzX3N5bmNfdjQpO1x0Lyogb3B0aW9ucyBwdHIgKi9cbiA3NDg6XHRcdFx0cy1cdTAwM2V2NC5jYWRkciA9IGNwLVx1MDAzZWNhZGRyLmlwO1xuIDc0OTpcdFx0XHRzLVx1MDAzZXY0LnZhZGRyID0gY3AtXHUwMDNldmFkZHIuaXA7XG4gNzUwOlx0XHRcdHMtXHUwMDNldjQuZGFkZHIgPSBjcC1cdTAwM2VkYWRkci5pcDtcbiA3NTE6XHRcdH1cbiA3NTI6XHRcdGlmIChzZXFfbWFzaykge1xuIDc1MzpcdFx0XHQqKHAmIzQzOyYjNDM7KSA9IElQVlNfT1BUX1NFUV9EQVRBO1xuIDc1NDpcdFx0XHQqKHAmIzQzOyYjNDM7KSA9IHNpemVvZihzdHJ1Y3QgaXBfdnNfc3luY19jb25uX29wdGlvbnMpO1xuIDc1NTpcdFx0XHRodG9uX3NlcShcdTAwMjZjcC1cdTAwM2Vpbl9zZXEsIChzdHJ1Y3QgaXBfdnNfc2VxICopcCk7XG4gNzU2Olx0XHRcdHAgJiM0Mzs9IHNpemVvZihzdHJ1Y3QgaXBfdnNfc2VxKTtcbiA3NTc6XHRcdFx0aHRvbl9zZXEoXHUwMDI2Y3AtXHUwMDNlb3V0X3NlcSwgKHN0cnVjdCBpcF92c19zZXEgKilwKTtcbiA3NTg6XHRcdFx0cCAmIzQzOz0gc2l6ZW9mKHN0cnVjdCBpcF92c19zZXEpO1xuIDc1OTpcdFx0fVxuIDc2MDpcdFx0LyogSGFuZGxlIHBlIGRhdGEgKi9cbiA3NjE6XHRcdGlmIChjcC1cdTAwM2VwZV9kYXRhX2xlbiBcdTAwMjZcdTAwMjYgY3AtXHUwMDNlcGVfZGF0YSkge1xuIDc2MjpcdFx0XHQqKHAmIzQzOyYjNDM7KSA9IElQVlNfT1BUX1BFX0RBVEE7XG4gNzYzOlx0XHRcdCoocCYjNDM7JiM0MzspID0gY3AtXHUwMDNlcGVfZGF0YV9sZW47XG4gNzY0Olx0XHRcdG1lbWNweShwLCBjcC1cdTAwM2VwZV9kYXRhLCBjcC1cdTAwM2VwZV9kYXRhX2xlbik7XG4gNzY1Olx0XHRcdHAgJiM0Mzs9IGNwLVx1MDAzZXBlX2RhdGFfbGVuO1xuIDc2NjpcdFx0XHRpZiAocGVfbmFtZV9sZW4pIHtcbiA3Njc6XHRcdFx0XHQvKiBBZGQgUEVfTkFNRSAqL1xuIDc2ODpcdFx0XHRcdCoocCYjNDM7JiM0MzspID0gSVBWU19PUFRfUEVfTkFNRTtcbiA3Njk6XHRcdFx0XHQqKHAmIzQzOyYjNDM7KSA9IHBlX25hbWVfbGVuO1xuIDc3MDpcdFx0XHRcdG1lbWNweShwLCBjcC1cdTAwM2VwZS1cdTAwM2VuYW1lLCBwZV9uYW1lX2xlbik7XG4gNzcxOlx0XHRcdFx0cCAmIzQzOz0gcGVfbmFtZV9sZW47XG4gNzcyOlx0XHRcdH1cbiA3NzM6XHRcdH1cbiA3NzQ6XHRcbiA3NzU6XHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNmlwdnMtXHUwMDNlc3luY19idWZmX2xvY2spO1xuIDc3NjpcdFxuIDc3NzpcdGNvbnRyb2w6XG4gNzc4Olx0XHQvKiBzeW5jaHJvbml6ZSBpdHMgY29udHJvbGxlciBpZiBpdCBoYXMgKi9cbiA3Nzk6XHRcdGNwID0gY3AtXHUwMDNlY29udHJvbDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTc6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjIyOTQKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiAzNDEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgS2VybmVsIFZ1bG5lcmFiaWxpdHk6IEEgRGVlcCBEaXZlKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgcXVlc3Rpb24gaXMgYWx3YXlzLCAmIzM0O1doYXQgZXhhY3RseSBpcyB0aGlzIGNvbW1pdCBhZGRyZXNzaW5nPyYjMzQ7IFJpZ2h0LCBpdCBsb29rcyBsaWtlIGEgdnVsbmVyYWJpbGl0eSBpbiBgaXBfdnNfc3luY19jb25uX3YwYCBhbmQgYGlwX3ZzX3N5bmNfY29ubmAuIFRoZSBrZXkgaXMgdGhhdCBgY3AtJmd0O2ZsYWdzYCB3YXMgYmVpbmcgcmVhZCBtdWx0aXBsZSB0aW1lcyB3aXRob3V0IHByb3BlciBzeW5jaHJvbml6YXRpb24gdXNpbmcgYFJFQURfT05DRWAgb3IgbG9jYWwgdmFyaWFibGUgc25hcHNob3RzLiBUaGlzIGlzIGltbWVkaWF0ZWx5IGNvbmNlcm5pbmcuCgpTcGVjaWZpY2FsbHksIGlmIGBjcC0mZ3Q7ZmxhZ3MgJmFtcDsgSVBfVlNfQ09OTl9GX1NFUV9NQVNLYCBjaGFuZ2VkIGJldHdlZW4gdGhlIGxlbmd0aCBjYWxjdWxhdGlvbiBhbmQgdGhlIHN1YnNlcXVlbnQgY29uZGl0aW9uYWwgY2hlY2ssIHRoZXJlJiMzOTtzIGEgcmlzay4gVGhlIGNhbGN1bGF0ZWQgYGxlbmAgY291bGQgYmUgYmFzZWQgb24gYSBzdGF0ZSB3aXRob3V0IHNlcXVlbmNlIG9wdGlvbnMsIGJ1dCB0aGVuIHRoZSBjb2RlICptaWdodCogdHJ5IHRvIHdyaXRlIHNlcXVlbmNlIG9wdGlvbnMsIHBvdGVudGlhbGx5IGxlYWRpbmcgdG8gYSBidWZmZXIgb3ZlcmZsb3cgb3IsIGNvbnZlcnNlbHksIHdyaXRpbmcgcGFzdCB0aGUgYWxsb2NhdGVkIHNwYWNlLCB3aGljaCB3b3VsZCBjYXVzZSBjb3JydXB0aW9uIG9yIGEgbWlzbWF0Y2ggd2l0aCByZXNlcnZlZCBzcGFjZSEgQ2xhc3NpYyBtZW1vcnkgc2FmZXR5IGlzc3VlLgoKVGhlIGZpeD8gU2ltcGxlIGFuZCBlbGVnYW50LiBSZWFkIGBjcC0mZ3Q7ZmxhZ3NgICpvbmNlKiB1c2luZyBgUkVBRF9PTkNFYCwgc3RvcmUgaXQgaW4gYSBsb2NhbCB2YXJpYWJsZSBgZmxhZ3NgLCBhbmQgdGhlbiB1c2UgYGZsYWdzYCAoYW5kIGBzZXFfbWFzayA9IGZsYWdzICZhbXA7IElQX1ZTX0NPTk5fRl9TRVFfTUFTS2ApIGNvbnNpc3RlbnRseSBmb3IgYm90aCBsZW5ndGggY2FsY3VsYXRpb24gYW5kIHdyaXRpbmcuIFRoaXMgZWxpbWluYXRlcyB0aGUgcmFjZSBjb25kaXRpb24uIEdvb2QuCgpOb3csIHRoZSBjcnVjaWFsIHF1ZXN0aW9uOiBpcyB0aGlzIHJlYWNoYWJsZSBhbmQgd29ydGggZnV6emluZz8gTGV0JiMzOTtzIGFzc2VzczoKCiogICAqKlJlYWNoYWJpbGl0eToqKiBJUFZTIGlzIHBhcnQgb2YgdGhlIHN0YW5kYXJkIG5ldHdvcmtpbmcgc3RhY2ssIG5ldGZpbHRlciwgcmlnaHQ/IEFic29sdXRlbHkuIEl04oCZcyBiYWtlZCBpbnRvIHRoZSBrZXJuZWwuIEl04oCZcyB1c2VkIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIFFFTVUgYW5kIHN5emthbGxlciwgd2hpY2ggaXMgKmZhbnRhc3RpYyogZm9yIGZ1enppbmcsIGFuZCBpdCB1c2VzIHZpcnR1YWwgc29ja2V0cywgcGFja2V0IGluamVjdGlvbiwgYW5kIG5ldGxpbmsgY29uZmlndXJhdGlvbiAoaXB2c2FkbS9JUFZTIG5ldGxpbmspLiBTbywgaXQmIzM5O3MgZWFzaWx5IHJlYWNoYWJsZSwgZXNwZWNpYWxseSBnaXZlbiBuZXRsaW5rLgoqICAgKipJcyBpdCByZWFjaGFibGUgY29kZT8qKiBZZXMhIElQVlMgc3luYyBkYWVtb24gYW5kIGNvbm5lY3Rpb24gdHJhY2tpbmcgYXJlIHN0YW5kYXJkIGNvbXBvbmVudHMgaW4gbmV0d29yayB2aXJ0dWFsaXphdGlvbi4KKiAgICoqU2VjdGlvbiAzOioqIENoZWNrcyBvdXQsIGNvcmUgbmV0d29ya2luZywgbmV0ZmlsdGVyLgoqICAgKipXb3J0aEZ1enppbmc6KiogWWVzLCBhYnNvbHV0ZWx5LiBCdWZmZXIgb3ZlcmZsb3dzIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBhcmUgcHJpbWUgY2FuZGlkYXRlcyBmb3IgZnV6emluZywgYW5kIHRoaXMgY29kZSBpcyByZWFjaGFibGUuIFRoZSBmYWN0IHRoYXQgaXQmIzM5O3MgaW4gYSBzdGFuZGFyZCBjb21wb25lbnQgYW5kIG5ldHdvcmstZmFjaW5nIG1lYW5zIGl0IHNob3VsZCBnZXQgcGxlbnR5IG9mIGF0dGVudGlvbi4KCk9rYXksIG5leHQgc3RlcDogbGV0JiMzOTtzIHZlcmlmeSBhbGwgdGhlIEtjb25maWcgZGVwZW5kZW5jaWVzIGZvciBJUFZTIGFuZCB0aGUgc3luYyBkYWVtb24uIEdvdHRhIG1ha2Ugc3VyZSB3ZSYjMzk7dmUgZ290IHRoZSBjb3JyZWN0IGNvbmZpZ3VyYXRpb24gdG8gdHJpZ2dlciB0aGlzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxNzo0MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgSVBfVlMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy00LSNcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnOjU6bWVudWNvbmZpZyBJUF9WU1xubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctNi1cdHRyaXN0YXRlIFwmIzM0O0lQIHZpcnR1YWwgc2VydmVyIHN1cHBvcnRcJiMzNDtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZz0yODY9Y29tbWVudCAmIzM5O0lQVlMgU0ggc2NoZWR1bGVyJiMzOTtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTI4Ny1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnOjI4ODpjb25maWcgSVBfVlNfU0hfVEFCX0JJVFNcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTI4OS1cdGludCBcJiMzNDtJUFZTIHNvdXJjZSBoYXNoaW5nIHRhYmxlIHNpemUgKHRoZSBOdGggcG93ZXIgb2YgMilcJiMzNDtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZz0zMDE9Y29tbWVudCAmIzM5O0lQVlMgTUggc2NoZWR1bGVyJiMzOTtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTMwMi1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnOjMwMzpjb25maWcgSVBfVlNfTUhfVEFCX0lOREVYXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy0zMDQtXHRpbnQgXCYjMzQ7SVBWUyBtYWdsZXYgaGFzaGluZyB0YWJsZSBpbmRleCBvZiBzaXplICh0aGUgcHJpbWUgbnVtYmVycylcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTc6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjM0NTYKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAzMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIGhvdyBJJiMzOTtkIGFwcHJvYWNoIHRoaXMgdGFzaywgYXMgaWYgdGhlc2Ugd2VyZSBteSBpbnRlcm5hbCB0aG91Z2h0czoKCioqQW5hbHl6aW5nIElQX1ZTIERlcGVuZGVuY2llcyBpbiBuZXRmaWx0ZXIvaXB2cy9LY29uZmlnKioKClJpZ2h0LCBsZXQmIzM5O3Mgc3RhcnQgYnkgZGlnZ2luZyBpbnRvIHRoZSBgbmV0L25ldGZpbHRlci9pcHZzL0tjb25maWdgIGZpbGUuIEkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIHRoZSBgSVBfVlNgIGRlcGVuZGVuY2llcywgYW5kIHRoZSBmaXJzdCA0MCBsaW5lcyBhcmUgYSBnb29kIHBsYWNlIHRvIGJlZ2luLiBUaGlzIHNob3VsZCBnaXZlIG1lIGEgc29saWQgZm91bmRhdGlvbiBmb3IgdW5kZXJzdGFuZGluZyB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIGFuZCBhbnkgcHJlcmVxdWlzaXRlIG1vZHVsZXMgb3Iga2VybmVsIGZlYXR1cmVzIGludm9sdmVkLiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciB0aGluZ3MgbGlrZToKCiogICAqKmBkZXBlbmRzIG9uYCBzdGF0ZW1lbnRzOioqIFRoZXNlIGFyZSB0aGUga2V5LiBUaGV5JiMzOTtsbCB0ZWxsIG1lIGV4YWN0bHkgd2hpY2ggb3RoZXIgY29uZmlndXJhdGlvbiBzeW1ib2xzIG5lZWQgdG8gYmUgc2V0IG9yIGVuYWJsZWQgYmVmb3JlIGBJUF9WU2AgY2FuIGJlIHNlbGVjdGVkLgoqICAgKipgc2VsZWN0YCBzdGF0ZW1lbnRzOioqIEFsdGhvdWdoIGxlc3MgY29tbW9uIGluIHRoaXMgY29udGV4dCwgdGhleSYjMzk7bGwgaGlnaGxpZ2h0IHN5bWJvbHMgdGhhdCBhcmUgYXV0b21hdGljYWxseSBlbmFibGVkIGFzIGEgc2lkZSBlZmZlY3Qgb2YgZW5hYmxpbmcgYElQX1ZTYC4KKiAgICoqQW55IGNvbmRpdGlvbmFsIGBjb25maWdgIGJsb2NrczoqKiBUaGVzZSBpbmRpY2F0ZSBjb25maWd1cmF0aW9ucyB0aGF0IG1pZ2h0IG9ubHkgYmUgcmVsZXZhbnQgdW5kZXIgc3BlY2lmaWMgY2lyY3Vtc3RhbmNlcyAoZS5nLiwgc3BlY2lmaWMgaGFyZHdhcmUgb3Iga2VybmVsIGZlYXR1cmUgZmxhZ3MpLgoqICAgKipDb21tZW50cyBhbmQgZGVzY3JpcHRpb25zOioqIFRoZXNlIGFyZSBpbnZhbHVhYmxlLCBhcyB0aGV5IGNhbiBwcm92aWRlIGNvbnRleHQgYW5kIGNsYXJpZnkgdGhlIHB1cnBvc2Ugb2YgY2VydGFpbiBkZXBlbmRlbmNpZXMgb3Igb3B0aW9ucy4gVGhleSBvZnRlbiBleHBsYWluICp3aHkqIGEgcGFydGljdWxhciBkZXBlbmRlbmN5IGV4aXN0cy4KKiAgICoqQW55dGhpbmcgdGhhdCBtaWdodCBoaW50IGF0IG90aGVyIHJlbGF0ZWQgY29uZmlndXJhdGlvbiBvcHRpb25zKio6IFNvbWV0aW1lcyByZWxhdGVkIG9wdGlvbnMgYXJlIG5vdCBpbW1lZGlhdGVseSBvYnZpb3VzLiBUaGUgZmlsZSBtaWdodCBkaXNjdXNzIGZlYXR1cmVzIG9yIHJlcXVpcmVtZW50cyB3aXRob3V0IGV4cGxpY2l0bHkgc3RhdGluZyB0aGUgbmFtZSBvZiB0aGUgb3B0aW9uLgoKSSYjMzk7bSBhaW1pbmcgZm9yIGEgY29tcHJlaGVuc2l2ZSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBwcmUtcmVxdWlzaXRlcy4gVGhpcyB3aWxsIGluZm9ybSBteSBuZXh0IHN0ZXBzLCB3aGV0aGVyIEkmIzM5O20gZGVidWdnaW5nIGEgY29uZmlndXJhdGlvbiBpc3N1ZSwgYW5hbHl6aW5nIGtlcm5lbCBwZXJmb3JtYW5jZSwgb3Igc2ltcGx5IHRyeWluZyB0byBnZXQgYSBiZXR0ZXIgZ3Jhc3Agb2YgdGhlIGBJUF9WU2AgaW50ZXJuYWxzLiBUaGlzIHdpbGwgYWxsb3cgbWUgdG8gYmUgZnVsbHkgdXAgdG8gZGF0ZSBhbmQgaW4gYSBwb3NpdGlvbiB0byBnaXZlIGEgcHJlY2lzZSBhbmQgY29ycmVjdCBhbnN3ZXIgdG8gd2hvZXZlciBuZWVkcyBpdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTc6NDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuICAgMjpcdCNcbiAgIDM6XHQjIElQIFZpcnR1YWwgU2VydmVyIGNvbmZpZ3VyYXRpb25cbiAgIDQ6XHQjXG4gICA1Olx0bWVudWNvbmZpZyBJUF9WU1xuICAgNjpcdFx0dHJpc3RhdGUgXCYjMzQ7SVAgdmlydHVhbCBzZXJ2ZXIgc3VwcG9ydFwmIzM0O1xuICAgNzpcdFx0ZGVwZW5kcyBvbiBJTkVUIFx1MDAyNlx1MDAyNiBORVRGSUxURVJcbiAgIDg6XHRcdGRlcGVuZHMgb24gKE5GX0NPTk5UUkFDSyB8fCBORl9DT05OVFJBQ0s9bilcbiAgIDk6XHRcdGhlbHBcbiAgMTA6XHRcdCAgSVAgVmlydHVhbCBTZXJ2ZXIgc3VwcG9ydCB3aWxsIGxldCB5b3UgYnVpbGQgYSBoaWdoLXBlcmZvcm1hbmNlXG4gIDExOlx0XHQgIHZpcnR1YWwgc2VydmVyIGJhc2VkIG9uIGNsdXN0ZXIgb2YgdHdvIG9yIG1vcmUgcmVhbCBzZXJ2ZXJzLiBUaGlzXG4gIDEyOlx0XHQgIG9wdGlvbiBtdXN0IGJlIGVuYWJsZWQgZm9yIGF0IGxlYXN0IG9uZSBvZiB0aGUgY2x1c3RlcmVkIGNvbXB1dGVyc1xuICAxMzpcdFx0ICB0aGF0IHdpbGwgdGFrZSBjYXJlIG9mIGludGVyY2VwdGluZyBpbmNvbWluZyBjb25uZWN0aW9ucyB0byBhXG4gIDE0Olx0XHQgIHNpbmdsZSBJUCBhZGRyZXNzIGFuZCBzY2hlZHVsaW5nIHRoZW0gdG8gcmVhbCBzZXJ2ZXJzLlxuICAxNTpcdFxuICAxNjpcdFx0ICBUaHJlZSByZXF1ZXN0IGRpc3BhdGNoaW5nIHRlY2huaXF1ZXMgYXJlIGltcGxlbWVudGVkLCB0aGV5IGFyZVxuICAxNzpcdFx0ICB2aXJ0dWFsIHNlcnZlciB2aWEgTkFULCB2aXJ0dWFsIHNlcnZlciB2aWEgdHVubmVsaW5nIGFuZCB2aXJ0dWFsXG4gIDE4Olx0XHQgIHNlcnZlciB2aWEgZGlyZWN0IHJvdXRpbmcuIFRoZSBzZXZlcmFsIHNjaGVkdWxpbmcgYWxnb3JpdGhtcyBjYW5cbiAgMTk6XHRcdCAgYmUgdXNlZCB0byBjaG9vc2Ugd2hpY2ggc2VydmVyIHRoZSBjb25uZWN0aW9uIGlzIGRpcmVjdGVkIHRvLFxuICAyMDpcdFx0ICB0aHVzIGxvYWQgYmFsYW5jaW5nIGNhbiBiZSBhY2hpZXZlZCBhbW9uZyB0aGUgc2VydmVycy4gIEZvciBtb3JlXG4gIDIxOlx0XHQgIGluZm9ybWF0aW9uIGFuZCBpdHMgYWRtaW5pc3RyYXRpb24gcHJvZ3JhbSwgcGxlYXNlIHZpc2l0IHRoZVxuICAyMjpcdFx0ICBmb2xsb3dpbmcgVVJMOiBcdTAwM2NodHRwOi8vd3d3LmxpbnV4dmlydHVhbHNlcnZlci5vcmcvXHUwMDNlLlxuICAyMzpcdFxuICAyNDpcdFx0ICBJZiB5b3Ugd2FudCB0byBjb21waWxlIGl0IGluIGtlcm5lbCwgc2F5IFkuIFRvIGNvbXBpbGUgaXQgYXMgYVxuICAyNTpcdFx0ICBtb2R1bGUsIGNob29zZSBNIGhlcmUuIElmIHVuc3VyZSwgc2F5IE4uXG4gIDI2Olx0XG4gIDI3Olx0aWYgSVBfVlNcbiAgMjg6XHRcbiAgMjk6XHRjb25maWdcdElQX1ZTX0lQVjZcbiAgMzA6XHRcdGJvb2wgXCYjMzQ7SVB2NiBzdXBwb3J0IGZvciBJUFZTXCYjMzQ7XG4gIDMxOlx0XHRkZXBlbmRzIG9uIElQVjYgPSB5IHx8IElQX1ZTID0gSVBWNlxuICAzMjpcdFx0c2VsZWN0IE5GX0RFRlJBR19JUFY2XG4gIDMzOlx0XHRoZWxwXG4gIDM0Olx0XHQgIEFkZCBJUHY2IHN1cHBvcnQgdG8gSVBWUy5cbiAgMzU6XHRcbiAgMzY6XHRcdCAgU2F5IFkgaWYgdW5zdXJlLlxuICAzNzpcdFxuICAzODpcdGNvbmZpZ1x0SVBfVlNfREVCVUdcbiAgMzk6XHRcdGJvb2wgXCYjMzQ7SVAgdmlydHVhbCBzZXJ2ZXIgZGVidWdnaW5nXCYjMzQ7XG4gIDQwOlx0XHRoZWxwXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDE3OjQzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI0NDgxCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMzAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgdGhlIHN1bW1hcnksIHJlbmRlcmVkIGluIHRoZSBmaXJzdCBwZXJzb24sIGFzc3VtaW5nIEkmIzM5O20gYW4gZXhwZXJ0OgoKKipJbnZlc3RpZ2F0aW5nIHRoZSBJUFZTIEJ1aWxkIFByb2Nlc3MqKgoKUmlnaHQsIGxldCYjMzk7cyBkaXZlIHN0cmFpZ2h0IGluLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBleGFjdGx5IGhvdyBgaXBfdnNfc3luYy5vYCBnZXRzIGNvbXBpbGVkIHdpdGhpbiB0aGUgSVBWUyBmcmFtZXdvcmsuIFRoZSBtb3N0IGxvZ2ljYWwgcGxhY2UgdG8gc3RhcnQgZGlnZ2luZyBpcyB0aGUgYG5ldC9uZXRmaWx0ZXIvaXB2cy9NYWtlZmlsZWAuIFRoYXQgZmlsZSBpcyB0aGUgY2VudHJhbCBwb2ludCBvZiB0cnV0aCBmb3IgaG93IHRoZSBJUFZTIG1vZHVsZXMgYXJlIGNvbnN0cnVjdGVkLCBhbmQgaXQgc2hvdWxkIGNsZWFybHkgb3V0bGluZSB0aGUgZGVwZW5kZW5jaWVzIGFuZCBidWlsZCBjb21tYW5kcyBmb3IgYWxsIHRoZSBvYmplY3QgZmlsZXMsIGluY2x1ZGluZyB0aGUgb25lIEkmIzM5O20gaW50ZXJlc3RlZCBpbjogYGlwX3ZzX3N5bmMub2AuIEkmIzM5O20gZXhwZWN0aW5nIHRvIGZpbmQgdGhlIHN0YW5kYXJkIEdOVSBtYWtlIHN5bnRheCBpbiB0aGVyZSwgaG9wZWZ1bGx5IHdpdGggY2xlYXIgdmFyaWFibGUgYXNzaWdubWVudHMgYW5kIHJ1bGVzIHRoYXQgZGV0YWlsIHRoZSBjb21waWxlciBmbGFncyBhbmQgbGlua2luZyBzdGVwcy4gSSYjMzk7bSBob3BpbmcgaXQmIzM5O3Mgd2VsbC1zdHJ1Y3R1cmVkIGVub3VnaCB0aGF0IEkgY2FuIHF1aWNrbHkgdHJhY2UgdGhlIGRlcGVuZGVuY2llcyBiYWNrIGFuZCBncmFzcCBhbnkgcG90ZW50aWFsIGlzc3VlcyBvciBtb2RpZmljYXRpb25zIHRoYXQgbWlnaHQgYmUgcmVsZXZhbnQgdG8gbXkgY3VycmVudCBpbnZlc3RpZ2F0aW9uLiBIb3BlZnVsbHkgaXQmIzM5O3Mgbm90IGEgY29tcGxldGUgbWVzcyBvZiBpbmNsdWRlcyBhbmQgbWFjcm9zIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxNzo0MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvaXB2cy9NYWtlZmlsZSYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbiAgIDI6XHQjXG4gICAzOlx0IyBNYWtlZmlsZSBmb3IgdGhlIElQVlMgbW9kdWxlcyBvbiB0b3Agb2YgSVB2NC5cbiAgIDQ6XHQjXG4gICA1Olx0XG4gICA2Olx0IyBJUFZTIHRyYW5zcG9ydCBwcm90b2NvbCBsb2FkIGJhbGFuY2luZyBzdXBwb3J0XG4gICA3Olx0aXBfdnNfcHJvdG8tb2Jqcy15IDo9XG4gICA4Olx0aXBfdnNfcHJvdG8tb2Jqcy0kKENPTkZJR19JUF9WU19QUk9UT19UQ1ApICYjNDM7PSBpcF92c19wcm90b190Y3Aub1xuICAgOTpcdGlwX3ZzX3Byb3RvLW9ianMtJChDT05GSUdfSVBfVlNfUFJPVE9fVURQKSAmIzQzOz0gaXBfdnNfcHJvdG9fdWRwLm9cbiAgMTA6XHRpcF92c19wcm90by1vYmpzLSQoQ09ORklHX0lQX1ZTX1BST1RPX0FIX0VTUCkgJiM0Mzs9IGlwX3ZzX3Byb3RvX2FoX2VzcC5vXG4gIDExOlx0aXBfdnNfcHJvdG8tb2Jqcy0kKENPTkZJR19JUF9WU19QUk9UT19TQ1RQKSAmIzQzOz0gaXBfdnNfcHJvdG9fc2N0cC5vXG4gIDEyOlx0XG4gIDEzOlx0aXBfdnMtZXh0cmFfb2Jqcy15IDo9XG4gIDE0Olx0aXBfdnMtZXh0cmFfb2Jqcy0kKENPTkZJR19JUF9WU19ORkNUKSAmIzQzOz0gaXBfdnNfbmZjdC5vXG4gIDE1Olx0XG4gIDE2Olx0aXBfdnMtb2JqcyA6PVx0aXBfdnNfY29ubi5vIGlwX3ZzX2NvcmUubyBpcF92c19jdGwubyBpcF92c19zY2hlZC5vXHQgICBcXFxuICAxNzpcdFx0XHRpcF92c194bWl0Lm8gaXBfdnNfYXBwLm8gaXBfdnNfc3luYy5vXHQgICBcdFx0ICAgXFxcbiAgMTg6XHRcdFx0aXBfdnNfZXN0Lm8gaXBfdnNfcHJvdG8ubyBpcF92c19wZS5vXHRcdFx0ICAgXFxcbiAgMTk6XHRcdFx0JChpcF92c19wcm90by1vYmpzLXkpICQoaXBfdnMtZXh0cmFfb2Jqcy15KVxuICAyMDpcdFxuICAyMTpcdFxuICAyMjpcdCMgSVBWUyBjb3JlXG4gIDIzOlx0b2JqLSQoQ09ORklHX0lQX1ZTKSAmIzQzOz0gaXBfdnMub1xuICAyNDpcdFxuICAyNTpcdCMgSVBWUyBzY2hlZHVsZXJzXG4gIDI2Olx0b2JqLSQoQ09ORklHX0lQX1ZTX1JSKSAmIzQzOz0gaXBfdnNfcnIub1xuICAyNzpcdG9iai0kKENPTkZJR19JUF9WU19XUlIpICYjNDM7PSBpcF92c193cnIub1xuICAyODpcdG9iai0kKENPTkZJR19JUF9WU19MQykgJiM0Mzs9IGlwX3ZzX2xjLm9cbiAgMjk6XHRvYmotJChDT05GSUdfSVBfVlNfV0xDKSAmIzQzOz0gaXBfdnNfd2xjLm9cbiAgMzA6XHRvYmotJChDT05GSUdfSVBfVlNfRk8pICYjNDM7PSBpcF92c19mby5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDE3OjQzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI1Mzg0CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMTgyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBJUFZTIFN5bmNocm9uaXphdGlvbiBpbiB0aGUgS2VybmVsKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBgaXBfdnNfc3luYy5vYCBoZXJlLiBJdCYjMzk7cyByaWdodCB0aGVyZSwgbmVzdGxlZCB3aXRoaW4gYGlwX3ZzLW9ianNgLCBhbmQgdGhhdCYjMzk7cyB0cmlnZ2VyZWQgd2hlbiBgQ09ORklHX0lQX1ZTYCBpcyBlbmFibGVkIOKAkyBtYWtlcyBwZXJmZWN0IHNlbnNlLiBJIGtub3cgYElQX1ZTYCBpcyBkZXBlbmRlbnQgb24gYm90aCBgSU5FVGAgYW5kIGBORVRGSUxURVJgLCB0aGUgdXN1YWwgc3VzcGVjdHMuIE5vdywgdGhlIHJlYWwgcXVlc3Rpb24gaXMsIGFyZSB0aGVyZSAqb3RoZXIqIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBJIG5lZWQgdG8gY29uc2lkZXIgZm9yIElQVlMgc3luY2hyb25pemF0aW9uPyBJJiMzOTtsbCBxdWlja2x5IGNoZWNrIGZvciB0aGluZ3MgbGlrZSBgQ09ORklHX0lQX1ZTX0lQVjZgLCBgQ09ORklHX0lQX1ZTX1BST1RPX1RDUGAsIHlvdSBrbm93LCBhbnkgZGVwZW5kZW5jaWVzIG9yIHJlbGF0ZWQgY29uZmlndXJhdGlvbnMuIEkgc3VzcGVjdCBgSVBfVlNgIGl0c2VsZiBpcyB0aGUgcHJpbWFyeSBvbmUsIGJ1dCBJIHdhbnQgdG8gYmUgdGhvcm91Z2guCgpSaWdodCwgdGltZSB0byBtb3ZlIG9uIHRvIGBGb2N1c1N5bWJvbHNgLiBMZXQmIzM5O3Mgc2VlLCB0aGUgY29yZSBmdW5jdGlvbnMgbW9kaWZpZWQgaGVyZSBhcmUgYGlwX3ZzX3N5bmNfY29ubmAgYW5kIGBpcF92c19zeW5jX2Nvbm5fdjBgLiBUaGF0IGdpdmVzIG1lIGEgZGlyZWN0IGxpbmUgb2Ygc2lnaHQuCgpOZXh0IHN0ZXA6IEkmIzM5O20gZ29pbmcgdG8gbmVlZCB0byB0cmFjZSBkb3duIHRoZSBjYWxsZXJzIG9mIGBpcF92c19zeW5jX2Nvbm5gIGFuZCBhbnkgb3RoZXIgcmVsYXRlZCBmdW5jdGlvbnMuIFRoaXMgd2lsbCBoZWxwIG1lIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgb2YgdGhlIGNoYW5nZXMgYW5kIGhvdyB0aGVzZSBzeW5jaHJvbml6YXRpb24gZnVuY3Rpb25zIGFyZSBpbnRlZ3JhdGVkIHdpdGhpbiB0aGUgYnJvYWRlciBJUFZTIGVjb3N5c3RlbS4gVW5kZXJzdGFuZGluZyB0aGUgY2FsbCBncmFwaCB3aWxsIHJlYWxseSBjbGFyaWZ5IHRoZSBpbXBhY3QgYW5kIGltcGxpY2F0aW9ucyBvZiB0aGUgbW9kaWZpY2F0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTc6NDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aXBfdnNfc3luY19jb25uJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9pcHZzLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jPTEzNDc9c3RhdGljIHZvaWQgaXBfdnNfY29ubl9leHBpcmUoc3RydWN0IHRpbWVyX2xpc3QgKnQpXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYy0xNDE2LVx0aWYgKGlwdnMtXHUwMDNlc3luY19zdGF0ZSBcdTAwMjYgSVBfVlNfU1RBVEVfTUFTVEVSKVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYzoxNDE3Olx0XHRpcF92c19zeW5jX2Nvbm4oaXB2cywgY3AsIHN5c2N0bF9zeW5jX3RocmVzaG9sZChpcHZzKSk7XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jLTE0MTgtXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYz0yMDk2PWlwX3ZzX2luX2hvb2sodm9pZCAqcHJpdiwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IG5mX2hvb2tfc3RhdGUgKnN0YXRlKVxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmMtMjI2Ni1cdCAqXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jOjIyNjc6XHQgKiBGb3IgT05FX1BLVCBsZXQgaXBfdnNfc3luY19jb25uKCkgZG8gdGhlIGZpbHRlciB3b3JrLlxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYy0yMjY4LVx0ICovXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYy0yMjc1LVx0aWYgKGlwdnMtXHUwMDNlc3luY19zdGF0ZSBcdTAwMjYgSVBfVlNfU1RBVEVfTUFTVEVSKVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYzoyMjc2Olx0XHRpcF92c19zeW5jX2Nvbm4oaXB2cywgY3AsIHBrdHMpO1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYy0yMjc3LVx0ZWxzZSBpZiAoKGNwLVx1MDAzZWZsYWdzIFx1MDAyNiBJUF9WU19DT05OX0ZfT05FX1BBQ0tFVCkgXHUwMDI2XHUwMDI2IGNwLVx1MDAzZWNvbnRyb2wpXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jOjIyNzg6XHRcdC8qIGluY3JlbWVudCBpcyBkb25lIGluc2lkZSBpcF92c19zeW5jX2Nvbm4gdG9vICovXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jLTIyNzktXHRcdGF0b21pY19pbmMoXHUwMDI2Y3AtXHUwMDNlY29udHJvbC1cdTAwM2Vpbl9wa3RzKTtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTEzLSAqICAgICAgICAgICAgICB0aW1lLW91dHMsIGFuZCBmaXJld2FsbCBtYXJrcy5cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6MTQ6ICogICAgICAgICAgICAgIEluIHZlci4xIFwmIzM0O2lwX3ZzX3N5bmNfY29ubl9vcHRpb25zXCYjMzQ7IHdpbGwgYmUgc2VudCBpbiBuZXR3LiBvcmRlci5cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMTUtICogICAgICAgICAgICAgIFZlci4gMCBjYW4gYmUgdHVybmVkIG9uIGJ5IHN5c2N0bCAtdyBuZXQuaXB2NC52cy5zeW5jX3ZlcnNpb249MFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM9NjU9c3RhdGljIHN0cnVjdCBsb2NrX2NsYXNzX2tleSBfX2lwdnNfc3luY19rZXk7XG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy02OS0gKi9cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6NzA6c3RydWN0IGlwX3ZzX3N5bmNfY29ubl92MCB7XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTcxLVx0X191OFx0XHRcdHJlc2VydmVkO1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtODgtXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjg5OnN0cnVjdCBpcF92c19zeW5jX2Nvbm5fb3B0aW9ucyB7XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTkwLVx0c3RydWN0IGlwX3ZzX3NlcSAgICAgICAgaW5fc2VxOyAgICAgICAgIC8qIGluY29taW5nIHNlcS4gc3RydWN0ICovXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYz0xNTQ9c3RydWN0IGlwX3ZzX3N5bmNfdjYge1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMTczLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzoxNzQ6dW5pb24gaXBfdnNfc3luY19jb25uIHtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMTc1LVx0c3RydWN0IGlwX3ZzX3N5bmNfdjRcdHY0O1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM9MTk2PXN0cnVjdCBpcF92c19zeW5jX3RocmVhZF9kYXRhIHtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTIwNC0vKiBWZXJzaW9uIDAgZGVmaW5pdGlvbiBvZiBwYWNrZXQgc2l6ZXMgKi9cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6MjA1OiNkZWZpbmUgU0lNUExFX0NPTk5fU0laRSAgKHNpemVvZihzdHJ1Y3QgaXBfdnNfc3luY19jb25uX3YwKSlcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMjA2LSNkZWZpbmUgRlVMTF9DT05OX1NJWkUgIFxcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjIwNzooc2l6ZW9mKHN0cnVjdCBpcF92c19zeW5jX2Nvbm5fdjApICYjNDM7IHNpemVvZihzdHJ1Y3QgaXBfdnNfc3luY19jb25uX29wdGlvbnMpKVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy0yMDgtXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYz0yNDU9c3RydWN0IGlwX3ZzX3N5bmNfbWVzZ192MCB7XG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy0yNDktXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjI1MDpcdC8qIGlwX3ZzX3N5bmNfY29ubiBlbnRyaWVzIHN0YXJ0IGhlcmUgKi9cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMjUxLX07XG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYz0yNTQ9c3RydWN0IGlwX3ZzX3N5bmNfbWVzZyB7XG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy0yNjAtXHRfX3UxNlx0XHRcdHNwYXJlO1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzoyNjE6XHQvKiBpcF92c19zeW5jX2Nvbm4gZW50cmllcyBzdGFydCBoZXJlICovXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTI2Mi19O1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM9NDQxPXN0YXRpYyBpbmxpbmUgYm9vbCBpbl9wZXJzaXN0ZW5jZShzdHJ1Y3QgaXBfdnNfY29ubiAqY3ApXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy00NTgtICovXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjQ1OTpzdGF0aWMgaW50IGlwX3ZzX3N5bmNfY29ubl9uZWVkZWQoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTQ2MC1cdFx0XHRcdCAgc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLCBpbnQgcGt0cylcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTUzOC0gKi9cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6NTM5OnN0YXRpYyB2b2lkIGlwX3ZzX3N5bmNfY29ubl92MChzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy01NDAtXHRcdFx0ICAgICAgIGludCBwa3RzKVxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtNTQyLVx0c3RydWN0IGlwX3ZzX3N5bmNfbWVzZ192MCAqbTtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6NTQzOlx0c3RydWN0IGlwX3ZzX3N5bmNfY29ubl92MCAqcztcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtNTQ0LVx0c3RydWN0IGlwX3ZzX3N5bmNfYnVmZiAqYnVmZjtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTU1Ni1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6NTU3Olx0aWYgKCFpcF92c19zeW5jX2Nvbm5fbmVlZGVkKGlwdnMsIGNwLCBwa3RzKSlcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtNTU4LVx0XHRyZXR1cm47XG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy01OTAtXHRtID0gKHN0cnVjdCBpcF92c19zeW5jX21lc2dfdjAgKikgYnVmZi1cdTAwM2VtZXNnO1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzo1OTE6XHRzID0gKHN0cnVjdCBpcF92c19zeW5jX2Nvbm5fdjAgKikgYnVmZi1cdTAwM2VoZWFkO1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy01OTItXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy02MDQtXHRpZiAoc2VxX21hc2spIHtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6NjA1Olx0XHRzdHJ1Y3QgaXBfdnNfc3luY19jb25uX29wdGlvbnMgKm9wdCA9XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjYwNjpcdFx0XHQoc3RydWN0IGlwX3ZzX3N5bmNfY29ubl9vcHRpb25zICopXHUwMDI2c1sxXTtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtNjA3LVx0XHRtZW1jcHkob3B0LCBcdTAwMjZjcC1cdTAwM2VzeW5jX2Nvbm5fb3B0LCBzaXplb2YoKm9wdCkpO1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtNjIxLVx0XHRcdHBrdHMgPSBzeXNjdGxfc3luY190aHJlc2hvbGQoaXB2cyk7XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjYyMjpcdFx0aXBfdnNfc3luY19jb25uKGlwdnMsIGNwLCBwa3RzKTtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtNjIzLVx0fVxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtNjMwLSAqL1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzo2MzE6dm9pZCBpcF92c19zeW5jX2Nvbm4oc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIHN0cnVjdCBpcF92c19jb25uICpjcCwgaW50IHBrdHMpXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTYzMi17XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTYzMy1cdHN0cnVjdCBpcF92c19zeW5jX21lc2cgKm07XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjYzNDpcdHVuaW9uIGlwX3ZzX3N5bmNfY29ubiAqcztcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtNjM1LVx0c3RydWN0IGlwX3ZzX3N5bmNfYnVmZiAqYnVmZjtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTY0My1cdGlmIChzeXNjdGxfc3luY192ZXIoaXB2cykgPT0gMCkge1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzo2NDQ6XHRcdGlwX3ZzX3N5bmNfY29ubl92MChpcHZzLCBjcCwgcGt0cyk7XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTY0NS1cdFx0cmV0dXJuO1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtNjUwLXNsb29wOlxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzo2NTE6XHRpZiAoIWlwX3ZzX3N5bmNfY29ubl9uZWVkZWQoaXB2cywgY3AsIHBrdHMpKVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy02NTItXHRcdGdvdG8gY29udHJvbDtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTY4Mi1cdGlmIChzZXFfbWFzaylcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6NjgzOlx0XHRsZW4gJiM0Mzs9IHNpemVvZihzdHJ1Y3QgaXBfdnNfc3luY19jb25uX29wdGlvbnMpICYjNDM7IDI7XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTY4NC1cbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTcyMi1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6NzIzOlx0cyA9ICh1bmlvbiBpcF92c19zeW5jX2Nvbm4gKilwO1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy03MjQtXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy03NTMtXHRcdCoocCYjNDM7JiM0MzspID0gSVBWU19PUFRfU0VRX0RBVEE7XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjc1NDpcdFx0KihwJiM0MzsmIzQzOykgPSBzaXplb2Yoc3RydWN0IGlwX3ZzX3N5bmNfY29ubl9vcHRpb25zKTtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtNzU1LVx0XHRodG9uX3NlcShcdTAwMjZjcC1cdTAwM2Vpbl9zZXEsIChzdHJ1Y3QgaXBfdnNfc2VxICopcCk7XG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYz03OTI9c3RhdGljIGlubGluZSBpbnRcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6NzkzOmlwX3ZzX2Nvbm5fZmlsbF9wYXJhbV9zeW5jKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBpbnQgYWYsIHVuaW9uIGlwX3ZzX3N5bmNfY29ubiAqc2MsXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTc5NC1cdFx0XHQgICBzdHJ1Y3QgaXBfdnNfY29ubl9wYXJhbSAqcCxcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jPTg0Nj1zdGF0aWMgdm9pZCBpcF92c19wcm9jX2Nvbm4oc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIHN0cnVjdCBpcF92c19jb25uX3BhcmFtICpwYXJhbSxcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTg1MC1cdFx0XHQgICAgdW5zaWduZWQgbG9uZyB0aW1lb3V0LCBfX3UzMiBmd21hcmssXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjg1MTpcdFx0XHQgICAgc3RydWN0IGlwX3ZzX3N5bmNfY29ubl9vcHRpb25zICpvcHQpXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTg1Mi17XG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYz05NjA9c3RhdGljIHZvaWQgaXBfdnNfcHJvY2Vzc19tZXNzYWdlX3YwKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBjb25zdCBjaGFyICpidWZmZXIsXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy05NjMtXHRzdHJ1Y3QgaXBfdnNfc3luY19tZXNnX3YwICptID0gKHN0cnVjdCBpcF92c19zeW5jX21lc2dfdjAgKilidWZmZXI7XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjk2NDpcdHN0cnVjdCBpcF92c19zeW5jX2Nvbm5fdjAgKnM7XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjk2NTpcdHN0cnVjdCBpcF92c19zeW5jX2Nvbm5fb3B0aW9ucyAqb3B0O1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy05NjYtXHRzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwO1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtOTc4LVx0XHR9XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjk3OTpcdFx0cyA9IChzdHJ1Y3QgaXBfdnNfc3luY19jb25uX3YwICopIHA7XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTk4MC1cdFx0ZmxhZ3MgPSBudG9ocyhzLVx1MDAzZWZsYWdzKSB8IElQX1ZTX0NPTk5fRl9TWU5DO1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtOTgyLVx0XHRpZiAoZmxhZ3MgXHUwMDI2IElQX1ZTX0NPTk5fRl9TRVFfTUFTSykge1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzo5ODM6XHRcdFx0b3B0ID0gKHN0cnVjdCBpcF92c19zeW5jX2Nvbm5fb3B0aW9ucyAqKVx1MDAyNnNbMV07XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTk4NC1cdFx0XHRwICYjNDM7PSBGVUxMX0NPTk5fU0laRTtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jPTEwMjk9c3RhdGljIGlubGluZSBpbnQgaXBfdnNfcHJvY19zZXFvcHQoX191OCAqcCwgdW5zaWduZWQgaW50IHBsZW4sXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTEwMzAtXHRcdFx0XHQgICAgX191MzIgKm9wdF9mbGFncyxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6MTAzMTpcdFx0XHRcdCAgICBzdHJ1Y3QgaXBfdnNfc3luY19jb25uX29wdGlvbnMgKm9wdClcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMTAzMi17XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjEwMzM6XHRzdHJ1Y3QgaXBfdnNfc3luY19jb25uX29wdGlvbnMgKnRvcHQ7XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTEwMzQtXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjEwMzU6XHR0b3B0ID0gKHN0cnVjdCBpcF92c19zeW5jX2Nvbm5fb3B0aW9ucyAqKXA7XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTEwMzYtXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjEwMzc6XHRpZiAocGxlbiAhPSBzaXplb2Yoc3RydWN0IGlwX3ZzX3N5bmNfY29ubl9vcHRpb25zKSkge1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy0xMDM4LVx0XHRJUF9WU19EQkcoMiwgXCYjMzQ7QkFDS1VQLCBib2d1cyBjb25uIG9wdGlvbnMgbGVuZ3RoXFxuXCYjMzQ7KTtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jPTEwNzE9c3RhdGljIGlubGluZSBpbnQgaXBfdnNfcHJvY19zeW5jX2Nvbm4oc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIF9fdTggKnAsIF9fdTggKm1zZ19lbmQpXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTEwNzIte1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzoxMDczOlx0c3RydWN0IGlwX3ZzX3N5bmNfY29ubl9vcHRpb25zIG9wdDtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6MTA3NDpcdHVuaW9uICBpcF92c19zeW5jX2Nvbm4gKnM7XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTEwNzUtXHRzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwO1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMTA4Mi1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6MTA4MzpcdHMgPSAodW5pb24gaXBfdnNfc3luY19jb25uICopIHA7XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTEwODQtXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYz0xMjA1PXN0YXRpYyB2b2lkIGlwX3ZzX3Byb2Nlc3NfbWVzc2FnZShzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgX191OCAqYnVmZmVyLFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMTIzMy1cdFx0Zm9yIChpPTA7IGlcdTAwM2Nucl9jb25uczsgaSYjNDM7JiM0MzspIHtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6MTIzNDpcdFx0XHR1bmlvbiBpcF92c19zeW5jX2Nvbm4gKnM7XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTEyMzUtXHRcdFx0dW5zaWduZWQgaW50IHNpemU7XG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy0xMjQyLVx0XHRcdH1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6MTI0MzpcdFx0XHRzID0gKHVuaW9uIGlwX3ZzX3N5bmNfY29ubiAqKXA7XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTEyNDQtXHRcdFx0c2l6ZSA9IG50b2hzKHMtXHUwMDNldjQudmVyX3NpemUpIFx1MDAyNiBTVkVSX01BU0s7XG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYz0xNzQwPWludCBzdGFydF9zeW5jX3RocmVhZChzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgc3RydWN0IGlwdnNfc3luY19kYWVtb25fY2ZnICpjLFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMTc1Mi1cdElQX1ZTX0RCRyg3LCBcJiMzNDslcygpOiBwaWQgJWRcXG5cJiMzNDssIF9fZnVuY19fLCB0YXNrX3BpZF9ucihjdXJyZW50KSk7XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjE3NTM6XHRJUF9WU19EQkcoNywgXCYjMzQ7RWFjaCBpcF92c19zeW5jX2Nvbm4gZW50cnkgbmVlZHMgJXpkIGJ5dGVzXFxuXCYjMzQ7LFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzoxNzU0Olx0XHQgIHNpemVvZihzdHJ1Y3QgaXBfdnNfc3luY19jb25uX3YwKSk7XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTE3NTUtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDE3OjQzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMwNTUzCgkJCQkJCQlvdXRwdXQ6IDE0MAoJCQkJCQkJdGhvdWdodHM6IDIxMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBGdXp6aW5nIFN0cmF0ZWd5OiBBIFF1aWNrIFJldmlldyoqCgpPa2F5LCBsZXQgbWUgcXVpY2tseSBydW4gdGhyb3VnaCB0aGlzLiBXZSBuZWVkIHRvIG1ha2Ugc3VyZSB3ZSYjMzk7dmUgY29uc2lkZXJlZCBldmVyeXRoaW5nIGJlZm9yZSB3ZSBtb3ZlIGZvcndhcmQuIFJpZ2h0LCBzbyB3ZSYjMzk7cmUgZm9jdXNpbmcgb24gZnV6emluZyB0aGUgSVBWUyBjb25uZWN0aW9uIHN5bmNocm9uaXphdGlvbiwgYW5kIHNwZWNpZmljYWxseSB0aGUgY29ubmVjdGlvbiBoYW5kbGluZywgY29uc2lkZXJpbmcgdGhlIGtub3duIGZ1bmN0aW9ucyBtb2RpZmllZCB3aGljaCBhcmUgYGlwX3ZzX3N5bmNfY29ubmAgYW5kIGBpcF92c19zeW5jX2Nvbm5fdjBgLgoKV2UmIzM5O3ZlIGdvdCB0aGUgcmVxdWlyZWQgY29uZmlncyBpbiBwbGFjZS4gYElQX1ZTYCBpcyB0aGUgY29yZSwgYW5kIHRoYXQgZGVwZW5kcyBvbiBgSU5FVGAgYW5kIGBORVRGSUxURVJgLCB3aGljaCBhcmUgc3RhbmRhcmRzLCBzbyBubyBzdXJwcmlzZXMgdGhlcmUuCgpOb3csIGZvciB0aGUgY3JpdGljYWwgYHNldC1yZXN1bHRzYCBwYXJhbWV0ZXJzLiBgV29ydGhGdXp6aW5nYCBoYXMgdG8gYmUgdHJ1ZSwgYmVjYXVzZSB0aGlzIGxvb2tzIHByb21pc2luZy4gVGhlIHJlYXNvbmluZyBpcyBzb2xpZDogd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBhIHJhY2UgY29uZGl0aW9uIHBvdGVudGlhbGx5LiBTcGVjaWZpY2FsbHksIGFuIGluY29uc2lzdGVuY3kgaW4gcmVhZGluZyBgY3AtJmd0O2ZsYWdzYCBpbiB0aGUgSVBWUyBjb25uZWN0aW9uIHN5bmNocm9uaXphdGlvbiBkYWVtb24sIGFuZCB0aGF0IGNvdWxkIGVhc2lseSBsZWFkIHRvIG1lc3NhZ2UgZnJhbWluZyBwcm9ibGVtcyBvciBldmVuIGJ1ZmZlciBjb3JydXB0aW9uLiBUaGVzZSBhcmUgc2VyaW91cyB2dWxuZXJhYmlsaXRpZXMgYW5kIGVzcGVjaWFsbHkgc2luY2UgdGhpcyBpcyBuZXR3b3JrIHRyYWZmaWMtcmVhY2hhYmxlLCB3ZSBzaG91bGQgcHJpb3JpdGl6ZSB0aGlzLiBUaGUgZnV6emluZyBzaG91bGQgZm9jdXMgb24gdGhvc2UgZnVuY3Rpb25zIG1lbnRpb25lZCBiZWZvcmUsIGBpcF92c19zeW5jX2Nvbm5gIGFuZCBgaXBfdnNfc3luY19jb25uX3YwYCwgYW5kIG9mIGNvdXJzZSB0aGUgY29uZmlncyB3ZSBzcGVjaWZpZWQgZWFybGllciBtdXN0IGJlIGVuYWJsZWQsIHNvIGBJUF9WU2AsIGBORVRGSUxURVJgLCBhbmQgYElORVRgLgoKQWxyaWdodCwgSSYjMzk7bSByZWFkeS4gTGV0JiMzOTtzIGNhbGwgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTc6NDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lQX1ZTJiMzNDssCiAgICAmIzM0O05FVEZJTFRFUiYjMzQ7LAogICAgJiMzNDtJTkVUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aXBfdnNfc3luY19jb25uJiMzNDssCiAgICAmIzM0O2lwX3ZzX3N5bmNfY29ubl92MCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyByZWFjaGFibGUgbmV0d29ya2luZyBjb2RlIGluIHRoZSBJUFZTIGNvbm5lY3Rpb24gc3luY2hyb25pemF0aW9uIHN1YnN5c3RlbSAobmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYykuIEl0IHVzZXMgUkVBRF9PTkNFIGFuZCBjYWNoZXMgY3AtXHUwMDNlZmxhZ3MgbG9jYWxseSB0byBhdm9pZCBkYXRhIHJhY2VzIGFuZCBpbmNvbnNpc3RlbmNpZXMgYmV0d2VlbiBwYWNrZXQgbGVuZ3RoIGNhbGN1bGF0aW9uIGFuZCBzZXF1ZW5jZSBvcHRpb24gc2VyaWFsaXphdGlvbi4gRnV6emluZyBpcyB3YXJyYW50ZWQgdG8gdGVzdCBzeW5jaHJvbml6YXRpb24gbWVzc2FnZSBjb25zdHJ1Y3Rpb24gYW5kIHN0YXRlIGhhbmRsaW5nIHVuZGVyIGNvbmN1cnJlbmN5LiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtJUF9WUyYjMzQ7LAogICAgJiMzNDtORVRGSUxURVImIzM0OywKICAgICYjMzQ7SU5FVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2lwX3ZzX3N5bmNfY29ubiYjMzQ7LAogICAgJiMzNDtpcF92c19zeW5jX2Nvbm5fdjAmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgcmVhY2hhYmxlIG5ldHdvcmtpbmcgY29kZSBpbiB0aGUgSVBWUyBjb25uZWN0aW9uIHN5bmNocm9uaXphdGlvbiBzdWJzeXN0ZW0gKG5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMpLiBJdCB1c2VzIFJFQURfT05DRSBhbmQgY2FjaGVzIGNwLVx1MDAzZWZsYWdzIGxvY2FsbHkgdG8gYXZvaWQgZGF0YSByYWNlcyBhbmQgaW5jb25zaXN0ZW5jaWVzIGJldHdlZW4gcGFja2V0IGxlbmd0aCBjYWxjdWxhdGlvbiBhbmQgc2VxdWVuY2Ugb3B0aW9uIHNlcmlhbGl6YXRpb24uIEZ1enppbmcgaXMgd2FycmFudGVkIHRvIHRlc3Qgc3luY2hyb25pemF0aW9uIG1lc3NhZ2UgY29uc3RydWN0aW9uIGFuZCBzdGF0ZSBoYW5kbGluZyB1bmRlciBjb25jdXJyZW5jeS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTc6NDM8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxNzo0MzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHJlc3NlcyBhIGNvbmN1cnJlbmN5IGlzc3VlIGluIElQVlMgY29ubmVjdGlvbiBzeW5jaHJvbml6YXRpb24gKGlwX3ZzX3N5bmNfY29ubiBhbmQgaXBfdnNfc3luY19jb25uX3YwKSB3aGVyZSBjcC1cdTAwM2VmbGFncyB3YXMgcmVhZCBtdWx0aXBsZSB0aW1lcyB3aXRob3V0IFJFQURfT05DRSwgcG90ZW50aWFsbHkgY2F1c2luZyBhIG1pc21hdGNoIGJldHdlZW4gdGhlIGNhbGN1bGF0ZWQgYnVmZmVyIGxlbmd0aCBhbmQgdGhlIGFjdHVhbCBkYXRhIHdyaXR0ZW4gaWYgZmxhZ3Mgd2VyZSBtb2RpZmllZCBjb25jdXJyZW50bHkuXG5cblRoZSBmaXggaW50cm9kdWNlcyBsb2NhbCBzY2FsYXIgdmFyaWFibGVzIChmbGFncywgc2VxX21hc2spIHRoYXQgYXJlIGltbWVkaWF0ZWx5IGluaXRpYWxpemVkIHZpYSBSRUFEX09OQ0UoY3AtXHUwMDNlZmxhZ3MpLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSB1bmluaXRpYWxpemVkIHN0YWNrIG9yIGhlYXAgYWxsb2NhdGlvbnMsIHVuaW5pdGlhbGl6ZWQgc3RydWN0dXJlIGZpZWxkcywgaW5mby1sZWFrcyB0byB1c2Vyc3BhY2UsIG9yIHJlYWRzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGUgcmlza3MgYXNzb2NpYXRlZCB3aXRoIHRoZSBvcmlnaW5hbCByYWNlIGNvbmRpdGlvbiAob3V0LW9mLWJvdW5kcyBidWZmZXIgd3JpdGVzIC8gZGF0YSBjb3JydXB0aW9uKSBhcmUgY292ZXJlZCBieSBLQVNBTiBhbmQgS0NTQU4sIHNvIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMzU1ZWQxYmZiN2Q1ZjYyNDNlZWFlNGI3M2ExODc5NGU2MTBmOGNlNgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBXZWQgU2VwIDkgMTc6NDI6NTkgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jIGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYwppbmRleCA1MzgzYWVhZmIwYWVkLi5kZmE4NDg3ZWMwYzIwIDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMKQEAgLTU0MywxMyAmIzQzOzU0MywxNSBAQCBzdGF0aWMgdm9pZCBpcF92c19zeW5jX2Nvbm5fdjAoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIHN0cnVjdCBpcF92c19jb25uICpjcCwKIAlzdHJ1Y3QgaXBfdnNfc3luY19jb25uX3YwICpzOwogCXN0cnVjdCBpcF92c19zeW5jX2J1ZmYgKmJ1ZmY7CiAJc3RydWN0IGlwdnNfbWFzdGVyX3N5bmNfc3RhdGUgKm1zOwotCWludCBpZDsKJiM0MzsJdTMyIGZsYWdzLCBzZXFfbWFzazsKIAl1bnNpZ25lZCBpbnQgbGVuOwomIzQzOwlpbnQgaWQ7CiAKIAlpZiAodW5saWtlbHkoY3AtJmd0O2FmICE9IEFGX0lORVQpKQogCQlyZXR1cm47CiYjNDM7CWZsYWdzID0gUkVBRF9PTkNFKGNwLSZndDtmbGFncyk7CiAJLyogRG8gbm90IHN5bmMgT05FIFBBQ0tFVCAqLwotCWlmIChjcC0mZ3Q7ZmxhZ3MgJmFtcDsgSVBfVlNfQ09OTl9GX09ORV9QQUNLRVQpCiYjNDM7CWlmIChmbGFncyAmYW1wOyBJUF9WU19DT05OX0ZfT05FX1BBQ0tFVCkKIAkJcmV0dXJuOwogCiAJaWYgKCFpcF92c19zeW5jX2Nvbm5fbmVlZGVkKGlwdnMsIGNwLCBwa3RzKSkKQEAgLTU2NCw4ICYjNDM7NTY2LDggQEAgc3RhdGljIHZvaWQgaXBfdnNfc3luY19jb25uX3YwKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsCiAJaWQgPSBzZWxlY3RfbWFzdGVyX3RocmVhZF9pZChpcHZzLCBjcCk7CiAJbXMgPSAmYW1wO2lwdnMtJmd0O21zW2lkXTsKIAlidWZmID0gbXMtJmd0O3N5bmNfYnVmZjsKLQlsZW4gPSAoY3AtJmd0O2ZsYWdzICZhbXA7IElQX1ZTX0NPTk5fRl9TRVFfTUFTSykgPyBGVUxMX0NPTk5fU0laRSA6Ci0JCVNJTVBMRV9DT05OX1NJWkU7CiYjNDM7CXNlcV9tYXNrID0gZmxhZ3MgJmFtcDsgSVBfVlNfQ09OTl9GX1NFUV9NQVNLOwomIzQzOwlsZW4gPSBzZXFfbWFzayA/IEZVTExfQ09OTl9TSVpFIDogU0lNUExFX0NPTk5fU0laRTsKIAlpZiAoYnVmZikgewogCQltID0gKHN0cnVjdCBpcF92c19zeW5jX21lc2dfdjAgKikgYnVmZi0mZ3Q7bWVzZzsKIAkJLyogU2VuZCBidWZmZXIgaWYgaXQgaXMgZm9yIHYxICovCkBAIC01OTcsOSAmIzQzOzU5OSw5IEBAIHN0YXRpYyB2b2lkIGlwX3ZzX3N5bmNfY29ubl92MChzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLAogCXMtJmd0O2NhZGRyID0gY3AtJmd0O2NhZGRyLmlwOwogCXMtJmd0O3ZhZGRyID0gY3AtJmd0O3ZhZGRyLmlwOwogCXMtJmd0O2RhZGRyID0gY3AtJmd0O2RhZGRyLmlwOwotCXMtJmd0O2ZsYWdzID0gaHRvbnMoY3AtJmd0O2ZsYWdzICZhbXA7IH5JUF9WU19DT05OX0ZfSEFTSEVEKTsKJiM0MzsJcy0mZ3Q7ZmxhZ3MgPSBodG9ucyhmbGFncyAmYW1wOyB+SVBfVlNfQ09OTl9GX0hBU0hFRCk7CiAJcy0mZ3Q7c3RhdGUgPSBodG9ucyhjcC0mZ3Q7c3RhdGUpOwotCWlmIChjcC0mZ3Q7ZmxhZ3MgJmFtcDsgSVBfVlNfQ09OTl9GX1NFUV9NQVNLKSB7CiYjNDM7CWlmIChzZXFfbWFzaykgewogCQlzdHJ1Y3QgaXBfdnNfc3luY19jb25uX29wdGlvbnMgKm9wdCA9CiAJCQkoc3RydWN0IGlwX3ZzX3N5bmNfY29ubl9vcHRpb25zICopJmFtcDtzWzFdOwogCQltZW1jcHkob3B0LCAmYW1wO2NwLSZndDtzeW5jX2Nvbm5fb3B0LCBzaXplb2YoKm9wdCkpOwpAQCAtNjM1LDYgJiM0Mzs2MzcsNyBAQCB2b2lkIGlwX3ZzX3N5bmNfY29ubihzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLCBpbnQgcGt0cykKIAlpbnQgaWQ7CiAJX191OCAqcDsKIAl1bnNpZ25lZCBpbnQgbGVuLCBwZV9uYW1lX2xlbiwgcGFkOwomIzQzOwl1MzIgZmxhZ3MsIHNlcV9tYXNrOwogCiAJLyogSGFuZGxlIG9sZCB2ZXJzaW9uIG9mIHRoZSBwcm90b2NvbCAqLwogCWlmIChzeXNjdGxfc3luY192ZXIoaXB2cykgPT0gMCkgewpAQCAtNjQ3LDYgJiM0Mzs2NTAsNyBAQCB2b2lkIGlwX3ZzX3N5bmNfY29ubihzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLCBpbnQgcGt0cykKIHNsb29wOgogCWlmICghaXBfdnNfc3luY19jb25uX25lZWRlZChpcHZzLCBjcCwgcGt0cykpCiAJCWdvdG8gY29udHJvbDsKJiM0MzsJZmxhZ3MgPSBSRUFEX09OQ0UoY3AtJmd0O2ZsYWdzKTsKIAogCS8qIFNhbml0eSBjaGVja3MgKi8KIAlwZV9uYW1lX2xlbiA9IDA7CkBAIC02NzQsNyAmIzQzOzY3OCw4IEBAIHZvaWQgaXBfdnNfc3luY19jb25uKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsIGludCBwa3RzKQogI2VuZGlmCiAJCWxlbiA9IHNpemVvZihzdHJ1Y3QgaXBfdnNfc3luY192NCk7CiAKLQlpZiAoY3AtJmd0O2ZsYWdzICZhbXA7IElQX1ZTX0NPTk5fRl9TRVFfTUFTSykKJiM0MzsJc2VxX21hc2sgPSBmbGFncyAmYW1wOyBJUF9WU19DT05OX0ZfU0VRX01BU0s7CiYjNDM7CWlmIChzZXFfbWFzaykKIAkJbGVuICYjNDM7PSBzaXplb2Yoc3RydWN0IGlwX3ZzX3N5bmNfY29ubl9vcHRpb25zKSAmIzQzOyAyOwogCiAJaWYgKGNwLSZndDtwZV9kYXRhX2xlbikKQEAgLTcyMCw3ICYjNDM7NzI1LDcgQEAgdm9pZCBpcF92c19zeW5jX2Nvbm4oc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIHN0cnVjdCBpcF92c19jb25uICpjcCwgaW50IHBrdHMpCiAJLyogU2V0IG1lc3NhZ2UgdHlwZSAgJmFtcDsgY29weSBtZW1iZXJzICovCiAJcy0mZ3Q7djQudHlwZSA9IChjcC0mZ3Q7YWYgPT0gQUZfSU5FVDYgPyBTVFlQRV9GX0lORVQ2IDogMCk7CiAJcy0mZ3Q7djQudmVyX3NpemUgPSBodG9ucyhsZW4gJmFtcDsgU1ZFUl9NQVNLKTsJLyogVmVyc2lvbiAwICovCi0Jcy0mZ3Q7djQuZmxhZ3MgPSBodG9ubChjcC0mZ3Q7ZmxhZ3MgJmFtcDsgfklQX1ZTX0NPTk5fRl9IQVNIRUQpOwomIzQzOwlzLSZndDt2NC5mbGFncyA9IGh0b25sKGZsYWdzICZhbXA7IH5JUF9WU19DT05OX0ZfSEFTSEVEKTsKIAlzLSZndDt2NC5zdGF0ZSA9IGh0b25zKGNwLSZndDtzdGF0ZSk7CiAJcy0mZ3Q7djQucHJvdG9jb2wgPSBjcC0mZ3Q7cHJvdG9jb2w7CiAJcy0mZ3Q7djQuY3BvcnQgPSBjcC0mZ3Q7Y3BvcnQ7CkBAIC03NDQsNyAmIzQzOzc0OSw3IEBAIHZvaWQgaXBfdnNfc3luY19jb25uKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsIGludCBwa3RzKQogCQlzLSZndDt2NC52YWRkciA9IGNwLSZndDt2YWRkci5pcDsKIAkJcy0mZ3Q7djQuZGFkZHIgPSBjcC0mZ3Q7ZGFkZHIuaXA7CiAJfQotCWlmIChjcC0mZ3Q7ZmxhZ3MgJmFtcDsgSVBfVlNfQ09OTl9GX1NFUV9NQVNLKSB7CiYjNDM7CWlmIChzZXFfbWFzaykgewogCQkqKHAmIzQzOyYjNDM7KSA9IElQVlNfT1BUX1NFUV9EQVRBOwogCQkqKHAmIzQzOyYjNDM7KSA9IHNpemVvZihzdHJ1Y3QgaXBfdnNfc3luY19jb25uX29wdGlvbnMpOwogCQlodG9uX3NlcSgmYW1wO2NwLSZndDtpbl9zZXEsIChzdHJ1Y3QgaXBfdnNfc2VxICopcCk7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxNzo0MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNDY5CgkJCQkJCQlvdXRwdXQ6IDQzCgkJCQkJCQl0aG91Z2h0czogNDg2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKktNU0FOIEZ1enppbmcgSnVzdGlmaWNhdGlvbiBmb3IgSVBWUyBTeW5jIFBhdGNoKioKCk9rYXksIHNvIHRoZSB1c2VyJiMzOTtzIHF1ZXN0aW9uIGJvaWxzIGRvd24gdG8gd2hldGhlciB0aGlzIHBhdGNoIHdhcnJhbnRzIGl0cyBvd24gZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgcnVuLCBvciBpZiB0aGUgc3RhbmRhcmQgS0FTQU4gZnV6emluZyBpcyBzdWZmaWNpZW50LiBJIG5lZWQgdG8gZGlnIGluIGFuZCBzZWUuIExldCYjMzk7cyBicmVhayBkb3duIHdoYXQmIzM5O3MgaGFwcGVuaW5nLgoKVGhpcyBwYXRjaCB0b3VjaGVzIGBuZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jYC4gU3BlY2lmaWNhbGx5LCBpdCBtb2RpZmllcyBgaXBfdnNfc3luY19jb25uX3YwYCBhbmQgYGlwX3ZzX3N5bmNfY29ubmAuIFRoZSBjaGFuZ2UgaXMgYWJvdXQgaG93IHRoZSBjb2RlIGRlYWxzIHdpdGggYGNwLSZndDtmbGFnc2AuIFByZXZpb3VzbHksIHRoZXJlIHdlcmUgbXVsdGlwbGUgcmVhZHMgb2YgYGNwLSZndDtmbGFnc2Agd2l0aGluIHRoZXNlIGZ1bmN0aW9ucy4gVGhlIHJpc2s/IElmIGBjcC0mZ3Q7ZmxhZ3NgIGlzIG1vZGlmaWVkIGNvbmN1cnJlbnRseSDigJMgYSBkYXRhIHJhY2Ugc2l0dWF0aW9uIOKAkyB0aGVuIHRoZSBjYWxjdWxhdGVkIGxlbmd0aHMgYW5kIHN1YnNlcXVlbnQgb3BlcmF0aW9ucyBjb3VsZCBiZSBpbmNvbnNpc3RlbnQsIHBvdGVudGlhbGx5IGxlYWRpbmcgdG8gYSBidWZmZXIgb3ZlcmZsb3cgb3IgY29ycnVwdCBkYXRhLgoKVGhlIHBhdGNoJiMzOTtzIGZpeCBzZWVtcyBzbWFydC4gSW4gYm90aCBmdW5jdGlvbnMsIHRoZXkmIzM5O3JlIG5vdyByZWFkaW5nIGBjcC0mZ3Q7ZmxhZ3NgICpvbmNlKiBpbnRvIGEgbG9jYWwgdmFyaWFibGUgKGBmbGFnc2ApIHVzaW5nIGBSRUFEX09OQ0VgLiBUaGV5IGNhbGN1bGF0ZSBgc2VxX21hc2tgICh3aGljaCBzZWVtcyBpbXBvcnRhbnQgZm9yIHNlcXVlbmNlLXJlbGF0ZWQgc3R1ZmYpIGZyb20gdGhpcyBjYWNoZWQgYGZsYWdzYC4gVGhlIGBsZW5gIGNhbGN1bGF0aW9uIGFuZCBzdWJzZXF1ZW50IGNvbmRpdGlvbmFsIGxvZ2ljIG5vdyB1c2UgdGhlc2UgbG9jYWwgdmFyaWFibGVzLCBlbnN1cmluZyB0aGV5JiMzOTtyZSBjb25zaXN0ZW50LiBJIHNlZSB0aGUgcGF0dGVybiDigJMgdGhlIG9sZCBjb2RlIGNvdWxkIGNhbGN1bGF0ZSB0aGUgbGVuZ3RoIGJhc2VkIG9uIG9uZSB2YWx1ZSBhbmQgdGhlbiBiZWhhdmUgb24gYSBkaWZmZXJlbnQgdmVyc2lvbi4gVGhpcyBmaXggbmVhdGx5IHJlc29sdmVzIHRoYXQgcG90ZW50aWFsIGluY29uc2lzdGVuY3kuCgpOb3csIHRvIGRldGVybWluZSBpZiB3ZSBuZWVkIEtNU0FOLCBJIG5lZWQgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiB0aGUgKmNvbnRleHQqLiBJIG5lZWQgdG8gc2VlIHdoYXQgZWxzZSBpbnRlcmFjdHMgd2l0aCB0aGVzZSBmbGFncyBhbmQgdGhpcyBzeW5jaHJvbml6YXRpb24gY29kZS4gSXMgaXQgbGlrZWx5IHRvIGJlIG11bHRpdGhyZWFkZWQ/IEFyZSB0aGVyZSBvdGhlciB3cml0ZXJzPyBJJiMzOTtsbCBwcm9iYWJseSBydW4gYSBgcmVhZC1maWxlYCBvciBgZ3JlcHBlcmAgc2VhcmNoIHdpdGhpbiB0aGUgYG5ldC9uZXRmaWx0ZXIvaXB2c2AgZGlyZWN0b3J5IHRvIHVuZGVyc3RhbmQgdGhlIGJyb2FkZXIgcGljdHVyZSBhbmQgaWRlbnRpZnkgdGhlIG1vc3QgbGlrZWx5IGRhdGEgcmFjZXMuIE15IGd1dCBzYXlzIHRoaXMgKm1pZ2h0KiBiZSB0aGUga2luZCBvZiBwYXRjaCB3aGVyZSBLTVNBTiBjb3VsZCBmaW5kIHNvbWV0aGluZyBzdGFuZGFyZCBLQVNBTiBtaXNzZXMsIGJ1dCBJIG5lZWQgbW9yZSBjb250ZXh0IHRvIGJlIHN1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDE3OjQzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDU0MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA5MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNTQwOlx0XHRcdFx0ICAgICAgIGludCBwa3RzKVxuIDU0MTpcdHtcbiA1NDI6XHRcdHN0cnVjdCBpcF92c19zeW5jX21lc2dfdjAgKm07XG4gNTQzOlx0XHRzdHJ1Y3QgaXBfdnNfc3luY19jb25uX3YwICpzO1xuIDU0NDpcdFx0c3RydWN0IGlwX3ZzX3N5bmNfYnVmZiAqYnVmZjtcbiA1NDU6XHRcdHN0cnVjdCBpcHZzX21hc3Rlcl9zeW5jX3N0YXRlICptcztcbiA1NDY6XHRcdHUzMiBmbGFncywgc2VxX21hc2s7XG4gNTQ3Olx0XHR1bnNpZ25lZCBpbnQgbGVuO1xuIDU0ODpcdFx0aW50IGlkO1xuIDU0OTpcdFxuIDU1MDpcdFx0aWYgKHVubGlrZWx5KGNwLVx1MDAzZWFmICE9IEFGX0lORVQpKVxuIDU1MTpcdFx0XHRyZXR1cm47XG4gNTUyOlx0XHRmbGFncyA9IFJFQURfT05DRShjcC1cdTAwM2VmbGFncyk7XG4gNTUzOlx0XHQvKiBEbyBub3Qgc3luYyBPTkUgUEFDS0VUICovXG4gNTU0Olx0XHRpZiAoZmxhZ3MgXHUwMDI2IElQX1ZTX0NPTk5fRl9PTkVfUEFDS0VUKVxuIDU1NTpcdFx0XHRyZXR1cm47XG4gNTU2Olx0XG4gNTU3Olx0XHRpZiAoIWlwX3ZzX3N5bmNfY29ubl9uZWVkZWQoaXB2cywgY3AsIHBrdHMpKVxuIDU1ODpcdFx0XHRyZXR1cm47XG4gNTU5Olx0XG4gNTYwOlx0XHRzcGluX2xvY2tfYmgoXHUwMDI2aXB2cy1cdTAwM2VzeW5jX2J1ZmZfbG9jayk7XG4gNTYxOlx0XHRpZiAoIShpcHZzLVx1MDAzZXN5bmNfc3RhdGUgXHUwMDI2IElQX1ZTX1NUQVRFX01BU1RFUikpIHtcbiA1NjI6XHRcdFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2aXB2cy1cdTAwM2VzeW5jX2J1ZmZfbG9jayk7XG4gNTYzOlx0XHRcdHJldHVybjtcbiA1NjQ6XHRcdH1cbiA1NjU6XHRcbiA1NjY6XHRcdGlkID0gc2VsZWN0X21hc3Rlcl90aHJlYWRfaWQoaXB2cywgY3ApO1xuIDU2NzpcdFx0bXMgPSBcdTAwMjZpcHZzLVx1MDAzZW1zW2lkXTtcbiA1Njg6XHRcdGJ1ZmYgPSBtcy1cdTAwM2VzeW5jX2J1ZmY7XG4gNTY5Olx0XHRzZXFfbWFzayA9IGZsYWdzIFx1MDAyNiBJUF9WU19DT05OX0ZfU0VRX01BU0s7XG4gNTcwOlx0XHRsZW4gPSBzZXFfbWFzayA/IEZVTExfQ09OTl9TSVpFIDogU0lNUExFX0NPTk5fU0laRTtcbiA1NzE6XHRcdGlmIChidWZmKSB7XG4gNTcyOlx0XHRcdG0gPSAoc3RydWN0IGlwX3ZzX3N5bmNfbWVzZ192MCAqKSBidWZmLVx1MDAzZW1lc2c7XG4gNTczOlx0XHRcdC8qIFNlbmQgYnVmZmVyIGlmIGl0IGlzIGZvciB2MSAqL1xuIDU3NDpcdFx0XHRpZiAoYnVmZi1cdTAwM2VoZWFkICYjNDM7IGxlbiBcdTAwM2UgYnVmZi1cdTAwM2VlbmQgfHwgIW0tXHUwMDNlbnJfY29ubnMpIHtcbiA1NzU6XHRcdFx0XHRzYl9xdWV1ZV90YWlsKGlwdnMsIG1zKTtcbiA1NzY6XHRcdFx0XHRtcy1cdTAwM2VzeW5jX2J1ZmYgPSBOVUxMO1xuIDU3NzpcdFx0XHRcdGJ1ZmYgPSBOVUxMO1xuIDU3ODpcdFx0XHR9XG4gNTc5Olx0XHR9XG4gNTgwOlx0XHRpZiAoIWJ1ZmYpIHtcbiA1ODE6XHRcdFx0YnVmZiA9IGlwX3ZzX3N5bmNfYnVmZl9jcmVhdGVfdjAoaXB2cywgbGVuKTtcbiA1ODI6XHRcdFx0aWYgKCFidWZmKSB7XG4gNTgzOlx0XHRcdFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2aXB2cy1cdTAwM2VzeW5jX2J1ZmZfbG9jayk7XG4gNTg0Olx0XHRcdFx0cHJfZXJyKFwmIzM0O2lwX3ZzX3N5bmNfYnVmZl9jcmVhdGUgZmFpbGVkLlxcblwmIzM0Oyk7XG4gNTg1Olx0XHRcdFx0cmV0dXJuO1xuIDU4NjpcdFx0XHR9XG4gNTg3Olx0XHRcdG1zLVx1MDAzZXN5bmNfYnVmZiA9IGJ1ZmY7XG4gNTg4Olx0XHR9XG4gNTg5Olx0XG4gNTkwOlx0XHRtID0gKHN0cnVjdCBpcF92c19zeW5jX21lc2dfdjAgKikgYnVmZi1cdTAwM2VtZXNnO1xuIDU5MTpcdFx0cyA9IChzdHJ1Y3QgaXBfdnNfc3luY19jb25uX3YwICopIGJ1ZmYtXHUwMDNlaGVhZDtcbiA1OTI6XHRcbiA1OTM6XHRcdC8qIGNvcHkgbWVtYmVycyAqL1xuIDU5NDpcdFx0cy1cdTAwM2VyZXNlcnZlZCA9IDA7XG4gNTk1Olx0XHRzLVx1MDAzZXByb3RvY29sID0gY3AtXHUwMDNlcHJvdG9jb2w7XG4gNTk2Olx0XHRzLVx1MDAzZWNwb3J0ID0gY3AtXHUwMDNlY3BvcnQ7XG4gNTk3Olx0XHRzLVx1MDAzZXZwb3J0ID0gY3AtXHUwMDNldnBvcnQ7XG4gNTk4Olx0XHRzLVx1MDAzZWRwb3J0ID0gY3AtXHUwMDNlZHBvcnQ7XG4gNTk5Olx0XHRzLVx1MDAzZWNhZGRyID0gY3AtXHUwMDNlY2FkZHIuaXA7XG4gNjAwOlx0XHRzLVx1MDAzZXZhZGRyID0gY3AtXHUwMDNldmFkZHIuaXA7XG4gNjAxOlx0XHRzLVx1MDAzZWRhZGRyID0gY3AtXHUwMDNlZGFkZHIuaXA7XG4gNjAyOlx0XHRzLVx1MDAzZWZsYWdzID0gaHRvbnMoZmxhZ3MgXHUwMDI2IH5JUF9WU19DT05OX0ZfSEFTSEVEKTtcbiA2MDM6XHRcdHMtXHUwMDNlc3RhdGUgPSBodG9ucyhjcC1cdTAwM2VzdGF0ZSk7XG4gNjA0Olx0XHRpZiAoc2VxX21hc2spIHtcbiA2MDU6XHRcdFx0c3RydWN0IGlwX3ZzX3N5bmNfY29ubl9vcHRpb25zICpvcHQgPVxuIDYwNjpcdFx0XHRcdChzdHJ1Y3QgaXBfdnNfc3luY19jb25uX29wdGlvbnMgKilcdTAwMjZzWzFdO1xuIDYwNzpcdFx0XHRtZW1jcHkob3B0LCBcdTAwMjZjcC1cdTAwM2VzeW5jX2Nvbm5fb3B0LCBzaXplb2YoKm9wdCkpO1xuIDYwODpcdFx0fVxuIDYwOTpcdFxuIDYxMDpcdFx0bS1cdTAwM2Vucl9jb25ucyYjNDM7JiM0Mzs7XG4gNjExOlx0XHRtLVx1MDAzZXNpemUgPSBodG9ucyhudG9ocyhtLVx1MDAzZXNpemUpICYjNDM7IGxlbik7XG4gNjEyOlx0XHRidWZmLVx1MDAzZWhlYWQgJiM0Mzs9IGxlbjtcbiA2MTM6XHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNmlwdnMtXHUwMDNlc3luY19idWZmX2xvY2spO1xuIDYxNDpcdFxuIDYxNTpcdFx0Lyogc3luY2hyb25pemUgaXRzIGNvbnRyb2xsZXIgaWYgaXQgaGFzICovXG4gNjE2Olx0XHRjcCA9IGNwLVx1MDAzZWNvbnRyb2w7XG4gNjE3Olx0XHRpZiAoY3ApIHtcbiA2MTg6XHRcdFx0aWYgKGNwLVx1MDAzZWZsYWdzIFx1MDAyNiBJUF9WU19DT05OX0ZfVEVNUExBVEUpXG4gNjE5Olx0XHRcdFx0cGt0cyA9IGF0b21pY19pbmNfcmV0dXJuKFx1MDAyNmNwLVx1MDAzZWluX3BrdHMpO1xuIDYyMDpcdFx0XHRlbHNlXG4gNjIxOlx0XHRcdFx0cGt0cyA9IHN5c2N0bF9zeW5jX3RocmVzaG9sZChpcHZzKTtcbiA2MjI6XHRcdFx0aXBfdnNfc3luY19jb25uKGlwdnMsIGNwLCBwa3RzKTtcbiA2MjM6XHRcdH1cbiA2MjQ6XHR9XG4gNjI1Olx0XG4gNjI2Olx0LypcbiA2Mjc6XHQgKiAgICAgIEFkZCBhbiBpcF92c19jb25uIGluZm9ybWF0aW9uIGludG8gdGhlIGN1cnJlbnQgc3luY19idWZmLlxuIDYyODpcdCAqICAgICAgQ2FsbGVkIGJ5IGlwX3ZzX2luLlxuIDYyOTpcdCAqICAgICAgU2VuZGluZyBWZXJzaW9uIDEgbWVzc2FnZXNcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTc6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTg2NQoJCQkJCQkJb3V0cHV0OiA0MwoJCQkJCQkJdGhvdWdodHM6IDE2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgYXMgaWYgdGhleSYjMzk7cmUgbXkgb3duOgoKKipJbnZlc3RpZ2F0aW5nIHRoZSBDb25uZWN0aW9uIFN5bmNocm9uaXphdGlvbiBMYW5kc2NhcGUqKgoKQWxyaWdodCwgSSYjMzk7bSB0aGlua2luZyBhYm91dCBjb25uZWN0aW9uIHN5bmNocm9uaXphdGlvbiBhbmQgSSB3YW50IHRvIGJlIHRob3JvdWdoLiBJJiMzOTt2ZSBiZWVuIGxvb2tpbmcgYXQgc29tZSBrZXkgbWV0cmljcywgYnV0IEkgZmVlbCBsaWtlIEkmIzM5O20gbWlzc2luZyBhIHBpZWNlIG9mIHRoZSBwdXp6bGUuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSYjMzk7bSBub3Qgb3Zlcmxvb2tpbmcgYW55dGhpbmcgY3J1Y2lhbC4gU29tZXRoaW5nIGluIHRoZSBiYWNrIG9mIG15IG1pbmQgaXMgdGVsbGluZyBtZSB0byBkb3VibGUtY2hlY2sgdGhhdCBgaXBfdnNfc3luY19jb25uYCBzZXR0aW5nLiBJdCYjMzk7cyBhIGtleSB2YXJpYWJsZSBpbiB0aGlzIHByb2Nlc3MsIGFuZCBldmVuIHRob3VnaCBpdCBtaWdodCBzZWVtIHVucmVsYXRlZCB0byB3aGF0IEkmIzM5O3ZlIGJlZW4gY29uY2VudHJhdGluZyBvbiwgaXQgY291bGQgYmUgdGhlIGx5bmNocGluLCBvciBhdCBsZWFzdCBhIGNvbnRyaWJ1dGluZyBmYWN0b3IuIEkmIzM5O2xsIG5lZWQgdG8gZ28gYmFjayBhbmQgZXhhbWluZSBpdDsgaXQmIzM5O3MgYWx3YXlzIHRoZSB1bmV4cGVjdGVkIHBsYWNlIHRoYXQgaG9sZHMgdGhlIHNvbHV0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxNzo0MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA2MzUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogODAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDYzNTpcdFx0c3RydWN0IGlwX3ZzX3N5bmNfYnVmZiAqYnVmZjtcbiA2MzY6XHRcdHN0cnVjdCBpcHZzX21hc3Rlcl9zeW5jX3N0YXRlICptcztcbiA2Mzc6XHRcdGludCBpZDtcbiA2Mzg6XHRcdF9fdTggKnA7XG4gNjM5Olx0XHR1bnNpZ25lZCBpbnQgbGVuLCBwZV9uYW1lX2xlbiwgcGFkO1xuIDY0MDpcdFx0dTMyIGZsYWdzLCBzZXFfbWFzaztcbiA2NDE6XHRcbiA2NDI6XHRcdC8qIEhhbmRsZSBvbGQgdmVyc2lvbiBvZiB0aGUgcHJvdG9jb2wgKi9cbiA2NDM6XHRcdGlmIChzeXNjdGxfc3luY192ZXIoaXB2cykgPT0gMCkge1xuIDY0NDpcdFx0XHRpcF92c19zeW5jX2Nvbm5fdjAoaXB2cywgY3AsIHBrdHMpO1xuIDY0NTpcdFx0XHRyZXR1cm47XG4gNjQ2Olx0XHR9XG4gNjQ3Olx0XHQvKiBEbyBub3Qgc3luYyBPTkUgUEFDS0VUICovXG4gNjQ4Olx0XHRpZiAoY3AtXHUwMDNlZmxhZ3MgXHUwMDI2IElQX1ZTX0NPTk5fRl9PTkVfUEFDS0VUKVxuIDY0OTpcdFx0XHRnb3RvIGNvbnRyb2w7XG4gNjUwOlx0c2xvb3A6XG4gNjUxOlx0XHRpZiAoIWlwX3ZzX3N5bmNfY29ubl9uZWVkZWQoaXB2cywgY3AsIHBrdHMpKVxuIDY1MjpcdFx0XHRnb3RvIGNvbnRyb2w7XG4gNjUzOlx0XHRmbGFncyA9IFJFQURfT05DRShjcC1cdTAwM2VmbGFncyk7XG4gNjU0Olx0XG4gNjU1Olx0XHQvKiBTYW5pdHkgY2hlY2tzICovXG4gNjU2Olx0XHRwZV9uYW1lX2xlbiA9IDA7XG4gNjU3Olx0XHRpZiAoY3AtXHUwMDNlcGVfZGF0YV9sZW4pIHtcbiA2NTg6XHRcdFx0aWYgKCFjcC1cdTAwM2VwZV9kYXRhIHx8ICFjcC1cdTAwM2VkZXN0KSB7XG4gNjU5Olx0XHRcdFx0SVBfVlNfRVJSX1JMKFwmIzM0O1NZTkMsIGNvbm5lY3Rpb24gcGVfZGF0YSBpbnZhbGlkXFxuXCYjMzQ7KTtcbiA2NjA6XHRcdFx0XHRyZXR1cm47XG4gNjYxOlx0XHRcdH1cbiA2NjI6XHRcdFx0cGVfbmFtZV9sZW4gPSBzdHJubGVuKGNwLVx1MDAzZXBlLVx1MDAzZW5hbWUsIElQX1ZTX1BFTkFNRV9NQVhMRU4pO1xuIDY2MzpcdFx0fVxuIDY2NDpcdFxuIDY2NTpcdFx0c3Bpbl9sb2NrX2JoKFx1MDAyNmlwdnMtXHUwMDNlc3luY19idWZmX2xvY2spO1xuIDY2NjpcdFx0aWYgKCEoaXB2cy1cdTAwM2VzeW5jX3N0YXRlIFx1MDAyNiBJUF9WU19TVEFURV9NQVNURVIpKSB7XG4gNjY3Olx0XHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNmlwdnMtXHUwMDNlc3luY19idWZmX2xvY2spO1xuIDY2ODpcdFx0XHRyZXR1cm47XG4gNjY5Olx0XHR9XG4gNjcwOlx0XG4gNjcxOlx0XHRpZCA9IHNlbGVjdF9tYXN0ZXJfdGhyZWFkX2lkKGlwdnMsIGNwKTtcbiA2NzI6XHRcdG1zID0gXHUwMDI2aXB2cy1cdTAwM2Vtc1tpZF07XG4gNjczOlx0XG4gNjc0Olx0I2lmZGVmIENPTkZJR19JUF9WU19JUFY2XG4gNjc1Olx0XHRpZiAoY3AtXHUwMDNlYWYgPT0gQUZfSU5FVDYpXG4gNjc2Olx0XHRcdGxlbiA9IHNpemVvZihzdHJ1Y3QgaXBfdnNfc3luY192Nik7XG4gNjc3Olx0XHRlbHNlXG4gNjc4Olx0I2VuZGlmXG4gNjc5Olx0XHRcdGxlbiA9IHNpemVvZihzdHJ1Y3QgaXBfdnNfc3luY192NCk7XG4gNjgwOlx0XG4gNjgxOlx0XHRzZXFfbWFzayA9IGZsYWdzIFx1MDAyNiBJUF9WU19DT05OX0ZfU0VRX01BU0s7XG4gNjgyOlx0XHRpZiAoc2VxX21hc2spXG4gNjgzOlx0XHRcdGxlbiAmIzQzOz0gc2l6ZW9mKHN0cnVjdCBpcF92c19zeW5jX2Nvbm5fb3B0aW9ucykgJiM0MzsgMjtcbiA2ODQ6XHRcbiA2ODU6XHRcdGlmIChjcC1cdTAwM2VwZV9kYXRhX2xlbilcbiA2ODY6XHRcdFx0bGVuICYjNDM7PSBjcC1cdTAwM2VwZV9kYXRhX2xlbiAmIzQzOyAyO1x0LyogJiM0MzsgUGFyYW0gaGRyIGZpZWxkICovXG4gNjg3Olx0XHRpZiAocGVfbmFtZV9sZW4pXG4gNjg4Olx0XHRcdGxlbiAmIzQzOz0gcGVfbmFtZV9sZW4gJiM0MzsgMjtcbiA2ODk6XHRcbiA2OTA6XHRcdC8qIGNoZWNrIGlmIHRoZXJlIGlzIGEgc3BhY2UgZm9yIHRoaXMgb25lICAqL1xuIDY5MTpcdFx0cGFkID0gMDtcbiA2OTI6XHRcdGJ1ZmYgPSBtcy1cdTAwM2VzeW5jX2J1ZmY7XG4gNjkzOlx0XHRpZiAoYnVmZikge1xuIDY5NDpcdFx0XHRtID0gYnVmZi1cdTAwM2VtZXNnO1xuIDY5NTpcdFx0XHRwYWQgPSAoNCAtIChzaXplX3QpIGJ1ZmYtXHUwMDNlaGVhZCkgXHUwMDI2IDM7XG4gNjk2Olx0XHRcdC8qIFNlbmQgYnVmZmVyIGlmIGl0IGlzIGZvciB2MCAqL1xuIDY5NzpcdFx0XHRpZiAoYnVmZi1cdTAwM2VoZWFkICYjNDM7IGxlbiAmIzQzOyBwYWQgXHUwMDNlIGJ1ZmYtXHUwMDNlZW5kIHx8IG0tXHUwMDNlcmVzZXJ2ZWQpIHtcbiA2OTg6XHRcdFx0XHRzYl9xdWV1ZV90YWlsKGlwdnMsIG1zKTtcbiA2OTk6XHRcdFx0XHRtcy1cdTAwM2VzeW5jX2J1ZmYgPSBOVUxMO1xuIDcwMDpcdFx0XHRcdGJ1ZmYgPSBOVUxMO1xuIDcwMTpcdFx0XHRcdHBhZCA9IDA7XG4gNzAyOlx0XHRcdH1cbiA3MDM6XHRcdH1cbiA3MDQ6XHRcbiA3MDU6XHRcdGlmICghYnVmZikge1xuIDcwNjpcdFx0XHRidWZmID0gaXBfdnNfc3luY19idWZmX2NyZWF0ZShpcHZzLCBsZW4pO1xuIDcwNzpcdFx0XHRpZiAoIWJ1ZmYpIHtcbiA3MDg6XHRcdFx0XHRzcGluX3VubG9ja19iaChcdTAwMjZpcHZzLVx1MDAzZXN5bmNfYnVmZl9sb2NrKTtcbiA3MDk6XHRcdFx0XHRwcl9lcnIoXCYjMzQ7aXBfdnNfc3luY19idWZmX2NyZWF0ZSBmYWlsZWQuXFxuXCYjMzQ7KTtcbiA3MTA6XHRcdFx0XHRyZXR1cm47XG4gNzExOlx0XHRcdH1cbiA3MTI6XHRcdFx0bXMtXHUwMDNlc3luY19idWZmID0gYnVmZjtcbiA3MTM6XHRcdFx0bSA9IGJ1ZmYtXHUwMDNlbWVzZztcbiA3MTQ6XHRcdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTc6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzM0MwoJCQkJCQkJb3V0cHV0OiA0MwoJCQkJCQkJdGhvdWdodHM6IDE2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgcHJlc2VudGVkIGFzIGlmIGl0IHdlcmUgbXkgb3duIGludGVybmFsIG1vbm9sb2d1ZToKCioqRGl2aW5nIERlZXBlciBpbnRvIGBpcF92c19zeW5jX2Nvbm5gKioKCkFscmlnaHQsIHNvIHdlJiMzOTtyZSBsb29raW5nIGF0IGBpcF92c19zeW5jX2Nvbm5gLiBHb29kLCBnb29kLiBJIG5lZWQgdG8gZ2V0IGEgYmV0dGVyIGhhbmRsZSBvbiB0aGUgY29udGV4dCBvZiAqZXZlcnl0aGluZyogdGhhdCB0b3VjaGVzIHRoaXMuIFRoaXMgaXMgd2hlcmUgdGhlIG1hZ2ljIChvciB0aGUgcHJvYmxlbXMpIGxpa2VseSByZXNpZGUgd2hlbiB3ZSYjMzk7cmUgdGFsa2luZyBhYm91dCBjb25uZWN0aW9uIHN5bmNocm9uaXphdGlvbiBpbiBJUFZTLiBMZXQmIzM5O3MgZGlnIGRlZXBlciBpbnRvIHRoZSBjb2RlIHRoYXQmIzM5O3MgYWxyZWFkeSBpbiBtZW1vcnkuIEkgd29uZGVyIGlmIHRoZXJlIGFyZSBhbnkgb2J2aW91cyByZWQgZmxhZ3MgaW4gdGVybXMgb2Ygc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXMsIGJ1ZmZlciBzaXplcywgb3IgcG90ZW50aWFsIGZvciByYWNlIGNvbmRpdGlvbnMuIEkgc2hvdWxkIHByb2JhYmx5IGJlIHRoaW5raW5nIGFib3V0IGl0cyBpbnRlcmFjdGlvbiB3aXRoIHRoZSBvdGhlciBzeW5jaHJvbml6YXRpb24gbWVjaGFuaXNtcyBpbiB0aGUga2VybmVsLCBzdWNoIGFzIHNwaW5sb2NrcyBhbmQgbXV0ZXhlcy4gSXMgdGhpcyBhIGNvbW1vbiBob3RzcG90PyBUaW1lIHRvIGRvIHNvbWUgZGlnZ2luZy4gVGltZSB0byBzZWUgd2hhdCYjMzk7cyBhY3R1YWxseSAqdGhlcmUqLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxNzo0MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA3MTUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDcxNTpcdFxuIDcxNjpcdFx0cCA9IGJ1ZmYtXHUwMDNlaGVhZDtcbiA3MTc6XHRcdGJ1ZmYtXHUwMDNlaGVhZCAmIzQzOz0gcGFkICYjNDM7IGxlbjtcbiA3MTg6XHRcdG0tXHUwMDNlc2l6ZSA9IGh0b25zKG50b2hzKG0tXHUwMDNlc2l6ZSkgJiM0MzsgcGFkICYjNDM7IGxlbik7XG4gNzE5Olx0XHQvKiBBZGQgZXYuIHBhZGRpbmcgZnJvbSBwcmV2LiBzeW5jX2Nvbm4gKi9cbiA3MjA6XHRcdHdoaWxlIChwYWQtLSlcbiA3MjE6XHRcdFx0KihwJiM0MzsmIzQzOykgPSAwO1xuIDcyMjpcdFxuIDcyMzpcdFx0cyA9ICh1bmlvbiBpcF92c19zeW5jX2Nvbm4gKilwO1xuIDcyNDpcdFxuIDcyNTpcdFx0LyogU2V0IG1lc3NhZ2UgdHlwZSAgXHUwMDI2IGNvcHkgbWVtYmVycyAqL1xuIDcyNjpcdFx0cy1cdTAwM2V2NC50eXBlID0gKGNwLVx1MDAzZWFmID09IEFGX0lORVQ2ID8gU1RZUEVfRl9JTkVUNiA6IDApO1xuIDcyNzpcdFx0cy1cdTAwM2V2NC52ZXJfc2l6ZSA9IGh0b25zKGxlbiBcdTAwMjYgU1ZFUl9NQVNLKTtcdC8qIFZlcnNpb24gMCAqL1xuIDcyODpcdFx0cy1cdTAwM2V2NC5mbGFncyA9IGh0b25sKGZsYWdzIFx1MDAyNiB+SVBfVlNfQ09OTl9GX0hBU0hFRCk7XG4gNzI5Olx0XHRzLVx1MDAzZXY0LnN0YXRlID0gaHRvbnMoY3AtXHUwMDNlc3RhdGUpO1xuIDczMDpcdFx0cy1cdTAwM2V2NC5wcm90b2NvbCA9IGNwLVx1MDAzZXByb3RvY29sO1xuIDczMTpcdFx0cy1cdTAwM2V2NC5jcG9ydCA9IGNwLVx1MDAzZWNwb3J0O1xuIDczMjpcdFx0cy1cdTAwM2V2NC52cG9ydCA9IGNwLVx1MDAzZXZwb3J0O1xuIDczMzpcdFx0cy1cdTAwM2V2NC5kcG9ydCA9IGNwLVx1MDAzZWRwb3J0O1xuIDczNDpcdFx0cy1cdTAwM2V2NC5md21hcmsgPSBodG9ubChjcC1cdTAwM2Vmd21hcmspO1xuIDczNTpcdFx0cy1cdTAwM2V2NC50aW1lb3V0ID0gaHRvbmwoY3AtXHUwMDNldGltZW91dCAvIEhaKTtcbiA3MzY6XHRcdG0tXHUwMDNlbnJfY29ubnMmIzQzOyYjNDM7O1xuIDczNzpcdFxuIDczODpcdCNpZmRlZiBDT05GSUdfSVBfVlNfSVBWNlxuIDczOTpcdFx0aWYgKGNwLVx1MDAzZWFmID09IEFGX0lORVQ2KSB7XG4gNzQwOlx0XHRcdHAgJiM0Mzs9IHNpemVvZihzdHJ1Y3QgaXBfdnNfc3luY192Nik7XG4gNzQxOlx0XHRcdHMtXHUwMDNldjYuY2FkZHIgPSBjcC1cdTAwM2VjYWRkci5pbjY7XG4gNzQyOlx0XHRcdHMtXHUwMDNldjYudmFkZHIgPSBjcC1cdTAwM2V2YWRkci5pbjY7XG4gNzQzOlx0XHRcdHMtXHUwMDNldjYuZGFkZHIgPSBjcC1cdTAwM2VkYWRkci5pbjY7XG4gNzQ0Olx0XHR9IGVsc2VcbiA3NDU6XHQjZW5kaWZcbiA3NDY6XHRcdHtcbiA3NDc6XHRcdFx0cCAmIzQzOz0gc2l6ZW9mKHN0cnVjdCBpcF92c19zeW5jX3Y0KTtcdC8qIG9wdGlvbnMgcHRyICovXG4gNzQ4Olx0XHRcdHMtXHUwMDNldjQuY2FkZHIgPSBjcC1cdTAwM2VjYWRkci5pcDtcbiA3NDk6XHRcdFx0cy1cdTAwM2V2NC52YWRkciA9IGNwLVx1MDAzZXZhZGRyLmlwO1xuIDc1MDpcdFx0XHRzLVx1MDAzZXY0LmRhZGRyID0gY3AtXHUwMDNlZGFkZHIuaXA7XG4gNzUxOlx0XHR9XG4gNzUyOlx0XHRpZiAoc2VxX21hc2spIHtcbiA3NTM6XHRcdFx0KihwJiM0MzsmIzQzOykgPSBJUFZTX09QVF9TRVFfREFUQTtcbiA3NTQ6XHRcdFx0KihwJiM0MzsmIzQzOykgPSBzaXplb2Yoc3RydWN0IGlwX3ZzX3N5bmNfY29ubl9vcHRpb25zKTtcbiA3NTU6XHRcdFx0aHRvbl9zZXEoXHUwMDI2Y3AtXHUwMDNlaW5fc2VxLCAoc3RydWN0IGlwX3ZzX3NlcSAqKXApO1xuIDc1NjpcdFx0XHRwICYjNDM7PSBzaXplb2Yoc3RydWN0IGlwX3ZzX3NlcSk7XG4gNzU3Olx0XHRcdGh0b25fc2VxKFx1MDAyNmNwLVx1MDAzZW91dF9zZXEsIChzdHJ1Y3QgaXBfdnNfc2VxICopcCk7XG4gNzU4Olx0XHRcdHAgJiM0Mzs9IHNpemVvZihzdHJ1Y3QgaXBfdnNfc2VxKTtcbiA3NTk6XHRcdH1cbiA3NjA6XHRcdC8qIEhhbmRsZSBwZSBkYXRhICovXG4gNzYxOlx0XHRpZiAoY3AtXHUwMDNlcGVfZGF0YV9sZW4gXHUwMDI2XHUwMDI2IGNwLVx1MDAzZXBlX2RhdGEpIHtcbiA3NjI6XHRcdFx0KihwJiM0MzsmIzQzOykgPSBJUFZTX09QVF9QRV9EQVRBO1xuIDc2MzpcdFx0XHQqKHAmIzQzOyYjNDM7KSA9IGNwLVx1MDAzZXBlX2RhdGFfbGVuO1xuIDc2NDpcdFx0XHRtZW1jcHkocCwgY3AtXHUwMDNlcGVfZGF0YSwgY3AtXHUwMDNlcGVfZGF0YV9sZW4pO1xuIDc2NTpcdFx0XHRwICYjNDM7PSBjcC1cdTAwM2VwZV9kYXRhX2xlbjtcbiA3NjY6XHRcdFx0aWYgKHBlX25hbWVfbGVuKSB7XG4gNzY3Olx0XHRcdFx0LyogQWRkIFBFX05BTUUgKi9cbiA3Njg6XHRcdFx0XHQqKHAmIzQzOyYjNDM7KSA9IElQVlNfT1BUX1BFX05BTUU7XG4gNzY5Olx0XHRcdFx0KihwJiM0MzsmIzQzOykgPSBwZV9uYW1lX2xlbjtcbiA3NzA6XHRcdFx0XHRtZW1jcHkocCwgY3AtXHUwMDNlcGUtXHUwMDNlbmFtZSwgcGVfbmFtZV9sZW4pO1xuIDc3MTpcdFx0XHRcdHAgJiM0Mzs9IHBlX25hbWVfbGVuO1xuIDc3MjpcdFx0XHR9XG4gNzczOlx0XHR9XG4gNzc0Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDE3OjQzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg2NzgKCQkJCQkJCW91dHB1dDogMTk1CgkJCQkJCQl0aG91Z2h0czogOTQ3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgQnVnIEZpeDogQSBEZWVwIERpdmUqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IHJldmVhbHMgYSBjbGFzc2ljIHJhY2UgY29uZGl0aW9uIGluIHRoZSBgaXBfdnNfc3luY19jb25uX3YwYCBhbmQgYGlwX3ZzX3N5bmNfY29ubmAgZnVuY3Rpb25zLiBUaGUgY29yZSBpc3N1ZSBpcyB0aGUgbXVsdGlwbGUsIHVuc3luY2hyb25pemVkIHJlYWRzIG9mIGBjcC0mZ3Q7ZmxhZ3NgLiBUaGUgcG90ZW50aWFsIGZvciB0cm91YmxlIGFyaXNlcyB3aGVuIHdlIGV2YWx1YXRlIGBjcC0mZ3Q7ZmxhZ3MgJmFtcDsgSVBfVlNfQ09OTl9GX1NFUV9NQVNLYCBmb3IgbGVuZ3RoIGNhbGN1bGF0aW9uIChgbGVuYCkgYW5kIHRoZW4sICpiZWZvcmUqIGFjdHVhbGx5IHVzaW5nIHRoYXQgY2FsY3VsYXRlZCBsZW5ndGgsIGBjcC0mZ3Q7ZmxhZ3NgIGNoYW5nZXMgY29uY3VycmVudGx5LgoKVGhpcyBjYW4gcmVzdWx0IGluIHR3byB1bmRlc2lyYWJsZSBzY2VuYXJpb3M6CgoxLiAgKipCdWZmZXIgT3ZlcmZsb3c6KiogSWYgYGNwLSZndDtmbGFnc2AgdHJhbnNpdGlvbnMgZnJvbSAwIHRvIGBTRVFfTUFTS2AgKmFmdGVyKiBgbGVuYCBpcyBjYWxjdWxhdGVkIHdpdGhvdXQgY29uc2lkZXJpbmcgc2VxdWVuY2UgZGF0YSBzcGFjZSwgYnV0ICpiZWZvcmUqIHRoZSBgaWZgIHN0YXRlbWVudCBpcyBleGVjdXRlZCwgdGhlIGBpZmAgYnJhbmNoIGdldHMgdGFrZW4sIHdyaXRpbmcgYmV5b25kIHRoZSBhbGxvY2F0ZWQgYnVmZmVyIHNwYWNlLgoyLiAgKipVbmZpbGxlZCBCdWZmZXI6KiogQ29udmVyc2VseSwgaWYgYGNwLSZndDtmbGFnc2AgZmxpcHMgZnJvbSBgU0VRX01BU0tgIHRvIDAsIGBsZW5gIGlzIGNhbGN1bGF0ZWQgKndpdGgqIHNlcXVlbmNlIHNwYWNlLCBidXQgdGhlIGBpZmAgaXMgc2tpcHBlZC4gVGhpcyBsZWF2ZXMgdGhlIGJ1ZmZlciBwYXJ0aWFsbHkgZmlsbGVkLCBhcyBgbGVuYCBieXRlcyBhcmUgYWNjb3VudGVkIGZvciwgYnV0IHRoZSB0YWlsIG9mIHRoZSBidWZmZXIgaXNuJiMzOTt0IHBvcHVsYXRlZC4KClRoZSBwYXRjaCYjMzk7cyBzb2x1dGlvbiBpcyBlbGVnYW50OiBpdCB1c2VzIGBSRUFEX09OQ0UoY3AtJmd0O2ZsYWdzKWAgdG8gZ3JhYiBhICpzaW5nbGUsIGNvbnNpc3RlbnQqIHNuYXBzaG90IG9mIGBjcC0mZ3Q7ZmxhZ3NgIGludG8gYSBsb2NhbCB2YXJpYWJsZSwgYGZsYWdzYC4gVGhlbiwgYHNlcV9tYXNrYCBpcyBkZXJpdmVkIGZyb20gdGhhdCBzbmFwc2hvdC4gVGhpcyBlbnN1cmVzIGJvdGggYGxlbmAgY2FsY3VsYXRpb24gYW5kIHN1YnNlcXVlbnQgZGF0YSBlbWlzc2lvbiB1c2UgdGhlICpleGFjdCBzYW1lKiB2YWx1ZS4KCk5vdywgbGV0JiMzOTtzIGFkZHJlc3MgdGhlIGNydWNpYWwgcXVlc3Rpb246IGRvZXMgdGhpcyBpbnRyb2R1Y2UgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3M/IFRoaXMgaXMgd2hlcmUgbXkgS01TQU4ga25vd2xlZGdlIGNvbWVzIGludG8gcGxheS4gS01TQU4gaXMgdGhlIHRvb2wgdGhhdCBmbGFncyByZWFkcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeS4gQnV0LCBoZXJlJiMzOTtzIHdoYXQgSSBzZWU6CgoqICAgS01TQU4gZm9jdXNlcyBvbiBrZXJuZWwtdG8tdXNlciBpbmZvLWxlYWtzIGFuZCByZWFkcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeS4KKiAgIEtBU0FOL0tDU0FOIGhhbmRsZSBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzL292ZXJmbG93cyBhbmQgZGF0YSByYWNlcy4KKiAgIFRoZSBmaXggYWRkcmVzc2VzICpjb25jdXJyZW5jeSogKGRhdGEgcmFjZSBvbiBgY3AtJmd0O2ZsYWdzYCkuCiogICBgZmxhZ3NgIGlzIGluaXRpYWxpemVkIHdpdGggYFJFQURfT05DRShjcC0mZ3Q7ZmxhZ3MpYC4KKiAgIGBzZXFfbWFza2AgaXMgaW5pdGlhbGl6ZWQgd2l0aCBgZmxhZ3MgJmFtcDsgSVBfVlNfQ09OTl9GX1NFUV9NQVNLYC4KClRoZXJlIGFyZSBubyBuZXcgYnVmZmVycywgc3RydWN0dXJlcywgcGFkZGluZywgb3IgdW5pbml0aWFsaXplZCByZWFkcyBpbnRyb2R1Y2VkLiBBbGwgdmFyaWFibGVzIGFyZSBzY2FsYXIgYW5kIGluaXRpYWxpemVkIGRpcmVjdGx5IGF0IGRlY2xhcmF0aW9uL3VzZS4gTm8gdXNlcnNwYWNlIGNvcHkgZnVuY3Rpb25zIGFyZSB0b3VjaGVkLiBObyB1bmluaXRpYWxpemVkIGZpZWxkcyBhcmUgcmVhZC4KClRoZXJlZm9yZSwgdGhpcyBpcyBzb2xlbHkgYSBjb25jdXJyZW5jeS9yYWNlLWNvbmRpdGlvbiBmaXguIEl0ICpwcmV2ZW50cyogb3V0LW9mLWJvdW5kcyB3cml0ZXMgb3IgbWVzc2FnZSBjb3JydXB0aW9uLiBLTVNBTiBpcyBub3QgcmVxdWlyZWQuIEtBU0FOL0tDU0FOIGFyZSB0aGUgY29ycmVjdCBkZXRlY3RvcnMgYmVjYXVzZSB0aGV5IGhhbmRsZSB0aGUgcmVsZXZhbnQgYnVnIGNsYXNzZXMgb2YgdGhpcyB0eXBlIChPT0IsIGNvbmN1cnJlbmN5KS4KCkxldCYjMzk7cyBkb3VibGUtY2hlY2sgdGhlIHJlcXVpcmVtZW50czoKCjEuICBObyBrZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXJzcGFjZSB3aGVyZSBwYWRkaW5nIG1pZ2h0IGJlIHVuaW5pdGlhbGl6ZWQuCjIuICBObyBjb25kaXRpb25hbCBsb2dpYyBkZXBlbmRlbnQgb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMuCjMuICBObyBjb21wbGV4IGRhdGEgc3RydWN0dXJlIGFsbG9jYXRpb24gdGhhdCBjb3VsZCBleHBvc2UgdW5pbml0aWFsaXplZCBmaWVsZHMuCjQuICBObyBsZW5ndGgvYm91bmRzIGxvZ2ljIHRoYXQgZXhwb3NlcyB1bmluaXRpYWxpemVkIGJ5dGVzLgoKS01TQU4gUmVhc29uaW5nOgoKVGhlIHBhdGNoIGludHJvZHVjZXMgYFJFQURfT05DRWAgdG8gZW5zdXJlIGNvbnNpc3RlbnQgZXZhbHVhdGlvbiBvZiBgc2VxX21hc2tgIGZvciBzeW5jIGJ1ZmZlciBsZW5ndGggY2FsY3VsYXRpb24gYW5kIHNlcmlhbGl6YXRpb24sIHRodXMgcmVzb2x2aW5nIGEgcmFjZSBjb25kaXRpb24uIFRoZSByYWNlIHByZXZpb3VzbHkgbGVkIHRvIHBvdGVudGlhbCBidWZmZXIgb3V0LW9mLWJvdW5kcyBvciBtZXNzYWdlIGNvcnJ1cHRpb24gaWYgYGNwLSZndDtmbGFnc2AgY2hhbmdlZCBjb25jdXJyZW50bHksIGEgcHJvYmxlbSB0aGF0IEtBU0FOIGFuZCBLQ1NBTiBwcm9wZXJseSBhZGRyZXNzLiBLTVNBTiBpcyBub3QgbmVlZGVkIGJlY2F1c2UgYWxsIHZhcmlhYmxlcyBhcmUgZnVsbHkgaW5pdGlhbGl6ZWQgc2NhbGFycywgd2l0aCBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkLCBhbGxvY2F0ZWQsIG9yIGNvcGllZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTc6NDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcmVzc2VzIGEgY29uY3VycmVuY3kgaXNzdWUgaW4gSVBWUyBjb25uZWN0aW9uIHN5bmNocm9uaXphdGlvbiAoaXBfdnNfc3luY19jb25uIGFuZCBpcF92c19zeW5jX2Nvbm5fdjApIHdoZXJlIGNwLVx1MDAzZWZsYWdzIHdhcyByZWFkIG11bHRpcGxlIHRpbWVzIHdpdGhvdXQgUkVBRF9PTkNFLCBwb3RlbnRpYWxseSBjYXVzaW5nIGEgbWlzbWF0Y2ggYmV0d2VlbiB0aGUgY2FsY3VsYXRlZCBidWZmZXIgbGVuZ3RoIGFuZCB0aGUgYWN0dWFsIGRhdGEgd3JpdHRlbiBpZiBmbGFncyB3ZXJlIG1vZGlmaWVkIGNvbmN1cnJlbnRseS5cblxuVGhlIGZpeCBpbnRyb2R1Y2VzIGxvY2FsIHNjYWxhciB2YXJpYWJsZXMgKGZsYWdzLCBzZXFfbWFzaykgdGhhdCBhcmUgaW1tZWRpYXRlbHkgaW5pdGlhbGl6ZWQgdmlhIFJFQURfT05DRShjcC1cdTAwM2VmbGFncykuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHVuaW5pdGlhbGl6ZWQgc3RhY2sgb3IgaGVhcCBhbGxvY2F0aW9ucywgdW5pbml0aWFsaXplZCBzdHJ1Y3R1cmUgZmllbGRzLCBpbmZvLWxlYWtzIHRvIHVzZXJzcGFjZSwgb3IgcmVhZHMgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkuIFRoZSByaXNrcyBhc3NvY2lhdGVkIHdpdGggdGhlIG9yaWdpbmFsIHJhY2UgY29uZGl0aW9uIChvdXQtb2YtYm91bmRzIGJ1ZmZlciB3cml0ZXMgLyBkYXRhIGNvcnJ1cHRpb24pIGFyZSBjb3ZlcmVkIGJ5IEtBU0FOIGFuZCBLQ1NBTiwgc28gYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRyZXNzZXMgYSBjb25jdXJyZW5jeSBpc3N1ZSBpbiBJUFZTIGNvbm5lY3Rpb24gc3luY2hyb25pemF0aW9uIChpcF92c19zeW5jX2Nvbm4gYW5kIGlwX3ZzX3N5bmNfY29ubl92MCkgd2hlcmUgY3AtXHUwMDNlZmxhZ3Mgd2FzIHJlYWQgbXVsdGlwbGUgdGltZXMgd2l0aG91dCBSRUFEX09OQ0UsIHBvdGVudGlhbGx5IGNhdXNpbmcgYSBtaXNtYXRjaCBiZXR3ZWVuIHRoZSBjYWxjdWxhdGVkIGJ1ZmZlciBsZW5ndGggYW5kIHRoZSBhY3R1YWwgZGF0YSB3cml0dGVuIGlmIGZsYWdzIHdlcmUgbW9kaWZpZWQgY29uY3VycmVudGx5LlxuXG5UaGUgZml4IGludHJvZHVjZXMgbG9jYWwgc2NhbGFyIHZhcmlhYmxlcyAoZmxhZ3MsIHNlcV9tYXNrKSB0aGF0IGFyZSBpbW1lZGlhdGVseSBpbml0aWFsaXplZCB2aWEgUkVBRF9PTkNFKGNwLVx1MDAzZWZsYWdzKS4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgdW5pbml0aWFsaXplZCBzdGFjayBvciBoZWFwIGFsbG9jYXRpb25zLCB1bmluaXRpYWxpemVkIHN0cnVjdHVyZSBmaWVsZHMsIGluZm8tbGVha3MgdG8gdXNlcnNwYWNlLCBvciByZWFkcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhlIHJpc2tzIGFzc29jaWF0ZWQgd2l0aCB0aGUgb3JpZ2luYWwgcmFjZSBjb25kaXRpb24gKG91dC1vZi1ib3VuZHMgYnVmZmVyIHdyaXRlcyAvIGRhdGEgY29ycnVwdGlvbikgYXJlIGNvdmVyZWQgYnkgS0FTQU4gYW5kIEtDU0FOLCBzbyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMDlUMTc6NDM6MDAuNTI0MTk3MjM5WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTg0MzI0MzU2MTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSVBfVlNcIixcbiAgICBcIk5FVEZJTFRFUlwiLFxuICAgIFwiSU5FVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImlwX3ZzX3N5bmNfY29ublwiLFxuICAgIFwiaXBfdnNfc3luY19jb25uX3YwXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRyZXNzZXMgYSBjb25jdXJyZW5jeSBpc3N1ZSBpbiBJUFZTIGNvbm5lY3Rpb24gc3luY2hyb25pemF0aW9uIChpcF92c19zeW5jX2Nvbm4gYW5kIGlwX3ZzX3N5bmNfY29ubl92MCkgd2hlcmUgY3AtXFx1MDAzZWZsYWdzIHdhcyByZWFkIG11bHRpcGxlIHRpbWVzIHdpdGhvdXQgUkVBRF9PTkNFLCBwb3RlbnRpYWxseSBjYXVzaW5nIGEgbWlzbWF0Y2ggYmV0d2VlbiB0aGUgY2FsY3VsYXRlZCBidWZmZXIgbGVuZ3RoIGFuZCB0aGUgYWN0dWFsIGRhdGEgd3JpdHRlbiBpZiBmbGFncyB3ZXJlIG1vZGlmaWVkIGNvbmN1cnJlbnRseS5cXG5cXG5UaGUgZml4IGludHJvZHVjZXMgbG9jYWwgc2NhbGFyIHZhcmlhYmxlcyAoZmxhZ3MsIHNlcV9tYXNrKSB0aGF0IGFyZSBpbW1lZGlhdGVseSBpbml0aWFsaXplZCB2aWEgUkVBRF9PTkNFKGNwLVxcdTAwM2VmbGFncykuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHVuaW5pdGlhbGl6ZWQgc3RhY2sgb3IgaGVhcCBhbGxvY2F0aW9ucywgdW5pbml0aWFsaXplZCBzdHJ1Y3R1cmUgZmllbGRzLCBpbmZvLWxlYWtzIHRvIHVzZXJzcGFjZSwgb3IgcmVhZHMgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkuIFRoZSByaXNrcyBhc3NvY2lhdGVkIHdpdGggdGhlIG9yaWdpbmFsIHJhY2UgY29uZGl0aW9uIChvdXQtb2YtYm91bmRzIGJ1ZmZlciB3cml0ZXMgLyBkYXRhIGNvcnJ1cHRpb24pIGFyZSBjb3ZlcmVkIGJ5IEtBU0FOIGFuZCBLQ1NBTiwgc28gYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgcmVhY2hhYmxlIG5ldHdvcmtpbmcgY29kZSBpbiB0aGUgSVBWUyBjb25uZWN0aW9uIHN5bmNocm9uaXphdGlvbiBzdWJzeXN0ZW0gKG5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMpLiBJdCB1c2VzIFJFQURfT05DRSBhbmQgY2FjaGVzIGNwLVxcdTAwM2VmbGFncyBsb2NhbGx5IHRvIGF2b2lkIGRhdGEgcmFjZXMgYW5kIGluY29uc2lzdGVuY2llcyBiZXR3ZWVuIHBhY2tldCBsZW5ndGggY2FsY3VsYXRpb24gYW5kIHNlcXVlbmNlIG9wdGlvbiBzZXJpYWxpemF0aW9uLiBGdXp6aW5nIGlzIHdhcnJhbnRlZCB0byB0ZXN0IHN5bmNocm9uaXphdGlvbiBtZXNzYWdlIGNvbnN0cnVjdGlvbiBhbmQgc3RhdGUgaGFuZGxpbmcgdW5kZXIgY29uY3VycmVuY3kuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDE3OjQzOjAwLjUyNDIwODMxOVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjA5Njc4OTkyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgMzU1ZWQxYmZiN2Q1ZjYyNDNlZWFlNGI3M2ExODc5NGU2MTBmOGNlNlxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgV2VkIFNlcCA5IDE3OjQyOjU5IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jXFxuaW5kZXggNTM4M2FlYWZiMGFlZC4uZGZhODQ4N2VjMGMyMCAxMDA2NDRcXG4tLS0gYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jXFxuKysrIGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuY1xcbkBAIC01NDMsMTMgKzU0MywxNSBAQCBzdGF0aWMgdm9pZCBpcF92c19zeW5jX2Nvbm5fdjAoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIHN0cnVjdCBpcF92c19jb25uICpjcCxcXG4gXFx0c3RydWN0IGlwX3ZzX3N5bmNfY29ubl92MCAqcztcXG4gXFx0c3RydWN0IGlwX3ZzX3N5bmNfYnVmZiAqYnVmZjtcXG4gXFx0c3RydWN0IGlwdnNfbWFzdGVyX3N5bmNfc3RhdGUgKm1zO1xcbi1cXHRpbnQgaWQ7XFxuK1xcdHUzMiBmbGFncywgc2VxX21hc2s7XFxuIFxcdHVuc2lnbmVkIGludCBsZW47XFxuK1xcdGludCBpZDtcXG4gXFxuIFxcdGlmICh1bmxpa2VseShjcC1cXHUwMDNlYWYgIT0gQUZfSU5FVCkpXFxuIFxcdFxcdHJldHVybjtcXG4rXFx0ZmxhZ3MgPSBSRUFEX09OQ0UoY3AtXFx1MDAzZWZsYWdzKTtcXG4gXFx0LyogRG8gbm90IHN5bmMgT05FIFBBQ0tFVCAqL1xcbi1cXHRpZiAoY3AtXFx1MDAzZWZsYWdzIFxcdTAwMjYgSVBfVlNfQ09OTl9GX09ORV9QQUNLRVQpXFxuK1xcdGlmIChmbGFncyBcXHUwMDI2IElQX1ZTX0NPTk5fRl9PTkVfUEFDS0VUKVxcbiBcXHRcXHRyZXR1cm47XFxuIFxcbiBcXHRpZiAoIWlwX3ZzX3N5bmNfY29ubl9uZWVkZWQoaXB2cywgY3AsIHBrdHMpKVxcbkBAIC01NjQsOCArNTY2LDggQEAgc3RhdGljIHZvaWQgaXBfdnNfc3luY19jb25uX3YwKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsXFxuIFxcdGlkID0gc2VsZWN0X21hc3Rlcl90aHJlYWRfaWQoaXB2cywgY3ApO1xcbiBcXHRtcyA9IFxcdTAwMjZpcHZzLVxcdTAwM2Vtc1tpZF07XFxuIFxcdGJ1ZmYgPSBtcy1cXHUwMDNlc3luY19idWZmO1xcbi1cXHRsZW4gPSAoY3AtXFx1MDAzZWZsYWdzIFxcdTAwMjYgSVBfVlNfQ09OTl9GX1NFUV9NQVNLKSA/IEZVTExfQ09OTl9TSVpFIDpcXG4tXFx0XFx0U0lNUExFX0NPTk5fU0laRTtcXG4rXFx0c2VxX21hc2sgPSBmbGFncyBcXHUwMDI2IElQX1ZTX0NPTk5fRl9TRVFfTUFTSztcXG4rXFx0bGVuID0gc2VxX21hc2sgPyBGVUxMX0NPTk5fU0laRSA6IFNJTVBMRV9DT05OX1NJWkU7XFxuIFxcdGlmIChidWZmKSB7XFxuIFxcdFxcdG0gPSAoc3RydWN0IGlwX3ZzX3N5bmNfbWVzZ192MCAqKSBidWZmLVxcdTAwM2VtZXNnO1xcbiBcXHRcXHQvKiBTZW5kIGJ1ZmZlciBpZiBpdCBpcyBmb3IgdjEgKi9cXG5AQCAtNTk3LDkgKzU5OSw5IEBAIHN0YXRpYyB2b2lkIGlwX3ZzX3N5bmNfY29ubl92MChzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLFxcbiBcXHRzLVxcdTAwM2VjYWRkciA9IGNwLVxcdTAwM2VjYWRkci5pcDtcXG4gXFx0cy1cXHUwMDNldmFkZHIgPSBjcC1cXHUwMDNldmFkZHIuaXA7XFxuIFxcdHMtXFx1MDAzZWRhZGRyID0gY3AtXFx1MDAzZWRhZGRyLmlwO1xcbi1cXHRzLVxcdTAwM2VmbGFncyA9IGh0b25zKGNwLVxcdTAwM2VmbGFncyBcXHUwMDI2IH5JUF9WU19DT05OX0ZfSEFTSEVEKTtcXG4rXFx0cy1cXHUwMDNlZmxhZ3MgPSBodG9ucyhmbGFncyBcXHUwMDI2IH5JUF9WU19DT05OX0ZfSEFTSEVEKTtcXG4gXFx0cy1cXHUwMDNlc3RhdGUgPSBodG9ucyhjcC1cXHUwMDNlc3RhdGUpO1xcbi1cXHRpZiAoY3AtXFx1MDAzZWZsYWdzIFxcdTAwMjYgSVBfVlNfQ09OTl9GX1NFUV9NQVNLKSB7XFxuK1xcdGlmIChzZXFfbWFzaykge1xcbiBcXHRcXHRzdHJ1Y3QgaXBfdnNfc3luY19jb25uX29wdGlvbnMgKm9wdCA9XFxuIFxcdFxcdFxcdChzdHJ1Y3QgaXBfdnNfc3luY19jb25uX29wdGlvbnMgKilcXHUwMDI2c1sxXTtcXG4gXFx0XFx0bWVtY3B5KG9wdCwgXFx1MDAyNmNwLVxcdTAwM2VzeW5jX2Nvbm5fb3B0LCBzaXplb2YoKm9wdCkpO1xcbkBAIC02MzUsNiArNjM3LDcgQEAgdm9pZCBpcF92c19zeW5jX2Nvbm4oc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIHN0cnVjdCBpcF92c19jb25uICpjcCwgaW50IHBrdHMpXFxuIFxcdGludCBpZDtcXG4gXFx0X191OCAqcDtcXG4gXFx0dW5zaWduZWQgaW50IGxlbiwgcGVfbmFtZV9sZW4sIHBhZDtcXG4rXFx0dTMyIGZsYWdzLCBzZXFfbWFzaztcXG4gXFxuIFxcdC8qIEhhbmRsZSBvbGQgdmVyc2lvbiBvZiB0aGUgcHJvdG9jb2wgKi9cXG4gXFx0aWYgKHN5c2N0bF9zeW5jX3ZlcihpcHZzKSA9PSAwKSB7XFxuQEAgLTY0Nyw2ICs2NTAsNyBAQCB2b2lkIGlwX3ZzX3N5bmNfY29ubihzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLCBpbnQgcGt0cylcXG4gc2xvb3A6XFxuIFxcdGlmICghaXBfdnNfc3luY19jb25uX25lZWRlZChpcHZzLCBjcCwgcGt0cykpXFxuIFxcdFxcdGdvdG8gY29udHJvbDtcXG4rXFx0ZmxhZ3MgPSBSRUFEX09OQ0UoY3AtXFx1MDAzZWZsYWdzKTtcXG4gXFxuIFxcdC8qIFNhbml0eSBjaGVja3MgKi9cXG4gXFx0cGVfbmFtZV9sZW4gPSAwO1xcbkBAIC02NzQsNyArNjc4LDggQEAgdm9pZCBpcF92c19zeW5jX2Nvbm4oc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIHN0cnVjdCBpcF92c19jb25uICpjcCwgaW50IHBrdHMpXFxuICNlbmRpZlxcbiBcXHRcXHRsZW4gPSBzaXplb2Yoc3RydWN0IGlwX3ZzX3N5bmNfdjQpO1xcbiBcXG4tXFx0aWYgKGNwLVxcdTAwM2VmbGFncyBcXHUwMDI2IElQX1ZTX0NPTk5fRl9TRVFfTUFTSylcXG4rXFx0c2VxX21hc2sgPSBmbGFncyBcXHUwMDI2IElQX1ZTX0NPTk5fRl9TRVFfTUFTSztcXG4rXFx0aWYgKHNlcV9tYXNrKVxcbiBcXHRcXHRsZW4gKz0gc2l6ZW9mKHN0cnVjdCBpcF92c19zeW5jX2Nvbm5fb3B0aW9ucykgKyAyO1xcbiBcXG4gXFx0aWYgKGNwLVxcdTAwM2VwZV9kYXRhX2xlbilcXG5AQCAtNzIwLDcgKzcyNSw3IEBAIHZvaWQgaXBfdnNfc3luY19jb25uKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsIGludCBwa3RzKVxcbiBcXHQvKiBTZXQgbWVzc2FnZSB0eXBlICBcXHUwMDI2IGNvcHkgbWVtYmVycyAqL1xcbiBcXHRzLVxcdTAwM2V2NC50eXBlID0gKGNwLVxcdTAwM2VhZiA9PSBBRl9JTkVUNiA/IFNUWVBFX0ZfSU5FVDYgOiAwKTtcXG4gXFx0cy1cXHUwMDNldjQudmVyX3NpemUgPSBodG9ucyhsZW4gXFx1MDAyNiBTVkVSX01BU0spO1xcdC8qIFZlcnNpb24gMCAqL1xcbi1cXHRzLVxcdTAwM2V2NC5mbGFncyA9IGh0b25sKGNwLVxcdTAwM2VmbGFncyBcXHUwMDI2IH5JUF9WU19DT05OX0ZfSEFTSEVEKTtcXG4rXFx0cy1cXHUwMDNldjQuZmxhZ3MgPSBodG9ubChmbGFncyBcXHUwMDI2IH5JUF9WU19DT05OX0ZfSEFTSEVEKTtcXG4gXFx0cy1cXHUwMDNldjQuc3RhdGUgPSBodG9ucyhjcC1cXHUwMDNlc3RhdGUpO1xcbiBcXHRzLVxcdTAwM2V2NC5wcm90b2NvbCA9IGNwLVxcdTAwM2Vwcm90b2NvbDtcXG4gXFx0cy1cXHUwMDNldjQuY3BvcnQgPSBjcC1cXHUwMDNlY3BvcnQ7XFxuQEAgLTc0NCw3ICs3NDksNyBAQCB2b2lkIGlwX3ZzX3N5bmNfY29ubihzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLCBpbnQgcGt0cylcXG4gXFx0XFx0cy1cXHUwMDNldjQudmFkZHIgPSBjcC1cXHUwMDNldmFkZHIuaXA7XFxuIFxcdFxcdHMtXFx1MDAzZXY0LmRhZGRyID0gY3AtXFx1MDAzZWRhZGRyLmlwO1xcbiBcXHR9XFxuLVxcdGlmIChjcC1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBJUF9WU19DT05OX0ZfU0VRX01BU0spIHtcXG4rXFx0aWYgKHNlcV9tYXNrKSB7XFxuIFxcdFxcdCoocCsrKSA9IElQVlNfT1BUX1NFUV9EQVRBO1xcbiBcXHRcXHQqKHArKykgPSBzaXplb2Yoc3RydWN0IGlwX3ZzX3N5bmNfY29ubl9vcHRpb25zKTtcXG4gXFx0XFx0aHRvbl9zZXEoXFx1MDAyNmNwLVxcdTAwM2Vpbl9zZXEsIChzdHJ1Y3QgaXBfdnNfc2VxICopcCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDE3OjQzOjAxLjEzNDkwMzc2MVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6NDAxOTg4MTk5ODYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSVBfVlNcIixcbiAgICBcIk5FVEZJTFRFUlwiLFxuICAgIFwiSU5FVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImlwX3ZzX3N5bmNfY29ublwiLFxuICAgIFwiaXBfdnNfc3luY19jb25uX3YwXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgcmVhY2hhYmxlIG5ldHdvcmtpbmcgY29kZSBpbiB0aGUgSVBWUyBjb25uZWN0aW9uIHN5bmNocm9uaXphdGlvbiBzdWJzeXN0ZW0gKG5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMpLiBJdCB1c2VzIFJFQURfT05DRSBhbmQgY2FjaGVzIGNwLVxcdTAwM2VmbGFncyBsb2NhbGx5IHRvIGF2b2lkIGRhdGEgcmFjZXMgYW5kIGluY29uc2lzdGVuY2llcyBiZXR3ZWVuIHBhY2tldCBsZW5ndGggY2FsY3VsYXRpb24gYW5kIHNlcXVlbmNlIG9wdGlvbiBzZXJpYWxpemF0aW9uLiBGdXp6aW5nIGlzIHdhcnJhbnRlZCB0byB0ZXN0IHN5bmNocm9uaXphdGlvbiBtZXNzYWdlIGNvbnN0cnVjdGlvbiBhbmQgc3RhdGUgaGFuZGxpbmcgdW5kZXIgY29uY3VycmVuY3kuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3NcbnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4xLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncyxcbmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuXG5cbi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6XG4gIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWRcbiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS5cbiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLFxuICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuXG5cbi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgXCJOTyBGVU5DVElPTkFMIENIQU5HRVwiIChORkNJKSBPUiBcIlJFRkFDVE9SSU5HXCIgQ0xBSU1TOlxuICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzIFwiY2xlYW51cHNcIiwgXCJyZWZhY3RvcmluZ3NcIiwgb3Igc3RhdGVcbiAgXCJObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZFwiLiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS5cbiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50XG4gIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLlxuICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLlxuXG4tIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOlxuICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosXG4gIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLlxuICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyXG4gIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczpcblxuLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOlxuICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy5cbiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLylcbiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuXG4gICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHNcbiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLlxuICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy5cbi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOlxuICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6XG4gICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nXG4gICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuXG4gICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6XG4tIENvcmUgU3Vic3lzdGVtczpcbiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksXG4gICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLlxuLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6XG4gICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLlxuLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6XG4gICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLlxuLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOlxuICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOlxuXG4tIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzpcbiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXNcbiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHRcbiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuXG4gIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyBcImZvY3VzZWRcIixcbiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLlxuXG4tIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzpcbiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzXG4gIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LlxuXG4tIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKTpcbiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFja1xuICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy5cbiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyXG4gIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3Ncbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5JZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOlxuLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuLSBDaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLlxuLSBTdHJpcCBhbnkgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgMzU1ZWQxYmZiN2Q1ZjYyNDNlZWFlNGI3M2ExODc5NGU2MTBmOGNlNlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgU2VwIDkgMTc6NDI6NTkgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jIGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuY1xuaW5kZXggNTM4M2FlYWZiMGFlZC4uZGZhODQ4N2VjMGMyMCAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmNcbisrKyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmNcbkBAIC01NDMsMTMgKzU0MywxNSBAQCBzdGF0aWMgdm9pZCBpcF92c19zeW5jX2Nvbm5fdjAoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIHN0cnVjdCBpcF92c19jb25uICpjcCxcbiBcdHN0cnVjdCBpcF92c19zeW5jX2Nvbm5fdjAgKnM7XG4gXHRzdHJ1Y3QgaXBfdnNfc3luY19idWZmICpidWZmO1xuIFx0c3RydWN0IGlwdnNfbWFzdGVyX3N5bmNfc3RhdGUgKm1zO1xuLVx0aW50IGlkO1xuK1x0dTMyIGZsYWdzLCBzZXFfbWFzaztcbiBcdHVuc2lnbmVkIGludCBsZW47XG4rXHRpbnQgaWQ7XG4gXG4gXHRpZiAodW5saWtlbHkoY3AtXHUwMDNlYWYgIT0gQUZfSU5FVCkpXG4gXHRcdHJldHVybjtcbitcdGZsYWdzID0gUkVBRF9PTkNFKGNwLVx1MDAzZWZsYWdzKTtcbiBcdC8qIERvIG5vdCBzeW5jIE9ORSBQQUNLRVQgKi9cbi1cdGlmIChjcC1cdTAwM2VmbGFncyBcdTAwMjYgSVBfVlNfQ09OTl9GX09ORV9QQUNLRVQpXG4rXHRpZiAoZmxhZ3MgXHUwMDI2IElQX1ZTX0NPTk5fRl9PTkVfUEFDS0VUKVxuIFx0XHRyZXR1cm47XG4gXG4gXHRpZiAoIWlwX3ZzX3N5bmNfY29ubl9uZWVkZWQoaXB2cywgY3AsIHBrdHMpKVxuQEAgLTU2NCw4ICs1NjYsOCBAQCBzdGF0aWMgdm9pZCBpcF92c19zeW5jX2Nvbm5fdjAoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIHN0cnVjdCBpcF92c19jb25uICpjcCxcbiBcdGlkID0gc2VsZWN0X21hc3Rlcl90aHJlYWRfaWQoaXB2cywgY3ApO1xuIFx0bXMgPSBcdTAwMjZpcHZzLVx1MDAzZW1zW2lkXTtcbiBcdGJ1ZmYgPSBtcy1cdTAwM2VzeW5jX2J1ZmY7XG4tXHRsZW4gPSAoY3AtXHUwMDNlZmxhZ3MgXHUwMDI2IElQX1ZTX0NPTk5fRl9TRVFfTUFTSykgPyBGVUxMX0NPTk5fU0laRSA6XG4tXHRcdFNJTVBMRV9DT05OX1NJWkU7XG4rXHRzZXFfbWFzayA9IGZsYWdzIFx1MDAyNiBJUF9WU19DT05OX0ZfU0VRX01BU0s7XG4rXHRsZW4gPSBzZXFfbWFzayA/IEZVTExfQ09OTl9TSVpFIDogU0lNUExFX0NPTk5fU0laRTtcbiBcdGlmIChidWZmKSB7XG4gXHRcdG0gPSAoc3RydWN0IGlwX3ZzX3N5bmNfbWVzZ192MCAqKSBidWZmLVx1MDAzZW1lc2c7XG4gXHRcdC8qIFNlbmQgYnVmZmVyIGlmIGl0IGlzIGZvciB2MSAqL1xuQEAgLTU5Nyw5ICs1OTksOSBAQCBzdGF0aWMgdm9pZCBpcF92c19zeW5jX2Nvbm5fdjAoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIHN0cnVjdCBpcF92c19jb25uICpjcCxcbiBcdHMtXHUwMDNlY2FkZHIgPSBjcC1cdTAwM2VjYWRkci5pcDtcbiBcdHMtXHUwMDNldmFkZHIgPSBjcC1cdTAwM2V2YWRkci5pcDtcbiBcdHMtXHUwMDNlZGFkZHIgPSBjcC1cdTAwM2VkYWRkci5pcDtcbi1cdHMtXHUwMDNlZmxhZ3MgPSBodG9ucyhjcC1cdTAwM2VmbGFncyBcdTAwMjYgfklQX1ZTX0NPTk5fRl9IQVNIRUQpO1xuK1x0cy1cdTAwM2VmbGFncyA9IGh0b25zKGZsYWdzIFx1MDAyNiB+SVBfVlNfQ09OTl9GX0hBU0hFRCk7XG4gXHRzLVx1MDAzZXN0YXRlID0gaHRvbnMoY3AtXHUwMDNlc3RhdGUpO1xuLVx0aWYgKGNwLVx1MDAzZWZsYWdzIFx1MDAyNiBJUF9WU19DT05OX0ZfU0VRX01BU0spIHtcbitcdGlmIChzZXFfbWFzaykge1xuIFx0XHRzdHJ1Y3QgaXBfdnNfc3luY19jb25uX29wdGlvbnMgKm9wdCA9XG4gXHRcdFx0KHN0cnVjdCBpcF92c19zeW5jX2Nvbm5fb3B0aW9ucyAqKVx1MDAyNnNbMV07XG4gXHRcdG1lbWNweShvcHQsIFx1MDAyNmNwLVx1MDAzZXN5bmNfY29ubl9vcHQsIHNpemVvZigqb3B0KSk7XG5AQCAtNjM1LDYgKzYzNyw3IEBAIHZvaWQgaXBfdnNfc3luY19jb25uKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsIGludCBwa3RzKVxuIFx0aW50IGlkO1xuIFx0X191OCAqcDtcbiBcdHVuc2lnbmVkIGludCBsZW4sIHBlX25hbWVfbGVuLCBwYWQ7XG4rXHR1MzIgZmxhZ3MsIHNlcV9tYXNrO1xuIFxuIFx0LyogSGFuZGxlIG9sZCB2ZXJzaW9uIG9mIHRoZSBwcm90b2NvbCAqL1xuIFx0aWYgKHN5c2N0bF9zeW5jX3ZlcihpcHZzKSA9PSAwKSB7XG5AQCAtNjQ3LDYgKzY1MCw3IEBAIHZvaWQgaXBfdnNfc3luY19jb25uKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsIGludCBwa3RzKVxuIHNsb29wOlxuIFx0aWYgKCFpcF92c19zeW5jX2Nvbm5fbmVlZGVkKGlwdnMsIGNwLCBwa3RzKSlcbiBcdFx0Z290byBjb250cm9sO1xuK1x0ZmxhZ3MgPSBSRUFEX09OQ0UoY3AtXHUwMDNlZmxhZ3MpO1xuIFxuIFx0LyogU2FuaXR5IGNoZWNrcyAqL1xuIFx0cGVfbmFtZV9sZW4gPSAwO1xuQEAgLTY3NCw3ICs2NzgsOCBAQCB2b2lkIGlwX3ZzX3N5bmNfY29ubihzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLCBpbnQgcGt0cylcbiAjZW5kaWZcbiBcdFx0bGVuID0gc2l6ZW9mKHN0cnVjdCBpcF92c19zeW5jX3Y0KTtcbiBcbi1cdGlmIChjcC1cdTAwM2VmbGFncyBcdTAwMjYgSVBfVlNfQ09OTl9GX1NFUV9NQVNLKVxuK1x0c2VxX21hc2sgPSBmbGFncyBcdTAwMjYgSVBfVlNfQ09OTl9GX1NFUV9NQVNLO1xuK1x0aWYgKHNlcV9tYXNrKVxuIFx0XHRsZW4gKz0gc2l6ZW9mKHN0cnVjdCBpcF92c19zeW5jX2Nvbm5fb3B0aW9ucykgKyAyO1xuIFxuIFx0aWYgKGNwLVx1MDAzZXBlX2RhdGFfbGVuKVxuQEAgLTcyMCw3ICs3MjUsNyBAQCB2b2lkIGlwX3ZzX3N5bmNfY29ubihzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLCBpbnQgcGt0cylcbiBcdC8qIFNldCBtZXNzYWdlIHR5cGUgIFx1MDAyNiBjb3B5IG1lbWJlcnMgKi9cbiBcdHMtXHUwMDNldjQudHlwZSA9IChjcC1cdTAwM2VhZiA9PSBBRl9JTkVUNiA/IFNUWVBFX0ZfSU5FVDYgOiAwKTtcbiBcdHMtXHUwMDNldjQudmVyX3NpemUgPSBodG9ucyhsZW4gXHUwMDI2IFNWRVJfTUFTSyk7XHQvKiBWZXJzaW9uIDAgKi9cbi1cdHMtXHUwMDNldjQuZmxhZ3MgPSBodG9ubChjcC1cdTAwM2VmbGFncyBcdTAwMjYgfklQX1ZTX0NPTk5fRl9IQVNIRUQpO1xuK1x0cy1cdTAwM2V2NC5mbGFncyA9IGh0b25sKGZsYWdzIFx1MDAyNiB+SVBfVlNfQ09OTl9GX0hBU0hFRCk7XG4gXHRzLVx1MDAzZXY0LnN0YXRlID0gaHRvbnMoY3AtXHUwMDNlc3RhdGUpO1xuIFx0cy1cdTAwM2V2NC5wcm90b2NvbCA9IGNwLVx1MDAzZXByb3RvY29sO1xuIFx0cy1cdTAwM2V2NC5jcG9ydCA9IGNwLVx1MDAzZWNwb3J0O1xuQEAgLTc0NCw3ICs3NDksNyBAQCB2b2lkIGlwX3ZzX3N5bmNfY29ubihzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLCBpbnQgcGt0cylcbiBcdFx0cy1cdTAwM2V2NC52YWRkciA9IGNwLVx1MDAzZXZhZGRyLmlwO1xuIFx0XHRzLVx1MDAzZXY0LmRhZGRyID0gY3AtXHUwMDNlZGFkZHIuaXA7XG4gXHR9XG4tXHRpZiAoY3AtXHUwMDNlZmxhZ3MgXHUwMDI2IElQX1ZTX0NPTk5fRl9TRVFfTUFTSykge1xuK1x0aWYgKHNlcV9tYXNrKSB7XG4gXHRcdCoocCsrKSA9IElQVlNfT1BUX1NFUV9EQVRBO1xuIFx0XHQqKHArKykgPSBzaXplb2Yoc3RydWN0IGlwX3ZzX3N5bmNfY29ubl9vcHRpb25zKTtcbiBcdFx0aHRvbl9zZXEoXHUwMDI2Y3AtXHUwMDNlaW5fc2VxLCAoc3RydWN0IGlwX3ZzX3NlcSAqKXApO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTc6NDM6MDEuMTM0OTA2NTUxWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTE0OTI0MjcwNjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBQcm9wb3NlZCBQYXRjaCBmb3IgRnV6emluZyBQb3RlbnRpYWwqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBwYXRjaCBhbmQgZmlndXJlIG91dCB0aGUgZnV6emluZyBzdHJhdGVneS4gV2UgbmVlZCB0byBkZXRlcm1pbmUgaWYgdGhpcyBjaGFuZ2UgdG8gYG5ldC9uZXRmaWx0ZXIvaXB2c2Agd2FycmFudHMgYSBmdXp6aW5nIGNhbXBhaWduIGFuZCB3aGF0IGNvbmZpZ3VyYXRpb25zIGFuZCBmb2N1cyBzeW1ib2xzIHdvdWxkIGJlIGJlc3QuXG5cblRoZSBmaXJzdCBzdGVwIGlzIGFsd2F5cyB0byBleGFtaW5lIHRoZSBzcGVjaWZpYyBmaWxlcyBhbmQgZnVuY3Rpb25zIHRvdWNoZWQuIEl0IGxvb2tzIGxpa2UgdGhlIHBhdGNoIG1vZGlmaWVzIGBuZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jYC4gU3BlY2lmaWNhbGx5LCB0aGUgY2hhbmdlcyBhcmUgd2l0aGluIHRoZSBgaXBfdnNfc3luY19jb25uX3YwYCBhbmQgYGlwX3ZzX3N5bmNfY29ubmAgZnVuY3Rpb25zLiBUaG9zZSBmdW5jdGlvbnMgYXJlIGludGVyZXN0aW5nLCBhcyB0aGV5IGNsZWFybHkgaGFuZGxlIGNvbm5lY3Rpb24gc3luY2hyb25pemF0aW9uLCBhIHRhc2sga25vd24gdG8gYmUgY29tcGxleCBhbmQgb2Z0ZW4gcHJvbmUgdG8gc3VidGxlIHJhY2UgY29uZGl0aW9ucyBvciB1bmV4cGVjdGVkIGlucHV0IGhhbmRsaW5nLlxuXG5Ob3csIG15IGluc3RpbmN0IGlzIHRvIGxvb2sgYXQgdGhlIHN1cnJvdW5kaW5nIGNvZGUuIEkgbmVlZCB0byBnZXQgYSBicm9hZGVyIHVuZGVyc3RhbmRpbmcgb2YgdGhlIGNvbnRleHQuIEknbGwgbmVlZCB0byBpbnNwZWN0IGBuZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jYCBpdHNlbGYuIFRoZW4sIEkgbmVlZCB0byBjaGVjayB0aGUgS2NvbmZpZyBmaWxlcyByZWxhdGVkIHRvIElQVlMuIEkgbmVlZCB0byBzZWUgd2hpY2ggY29uZmlndXJhdGlvbnMgYXJlIGVuYWJsZWQsIHdoaWNoIGZ1bmN0aW9ucyBjYWxsIHRoZXNlIG1vZGlmaWVkIG9uZXMsIGFuZCB0aGUgb3ZlcmFsbCBhcmNoaXRlY3R1cmUuIFRoaXMgZ2l2ZXMgbWUgaW5zaWdodCBpbnRvIHRoZSBlbnZpcm9ubWVudCwgcG90ZW50aWFsIGNhbGwgY2hhaW5zLCBhbmQgcmVsZXZhbnQgZGF0YSBzdHJ1Y3R1cmVzLiBUaGlzIGNvbnRleHQgaXMgY3JpdGljYWwgdG8gZGV2aXNpbmcgZWZmZWN0aXZlIGZ1enppbmcgc3RyYXRlZ2llcy4gSSB3aWxsIG5lZWQgdG8gaWRlbnRpZnkgdGhlIHJlbGV2YW50IGZvY3VzIHN5bWJvbHMgYW5kIGVuYWJsZSBjb25maWd1cmF0aW9ucyBmb3IgbWF4aW11bSBjb3ZlcmFnZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NDI1NywiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExNywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDE3OjQzOjEyLjYyNzMzNjM4MloiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjc5MTIyNDgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiSVBfVlNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9pcHZzL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJcXG5GdWxsIG91dHB1dCBpcyB0b28gbG9uZywgc2hvd2luZyA1MDAgb3V0IG9mIDQzOTMgbGluZXMuXFxuVXNlIG1vcmUgcHJlY2lzZSBleHByZXNzaW9uIGlmIHBvc3NpYmxlLlxcblxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTQtI1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnOjU6bWVudWNvbmZpZyBJUF9WU1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTYtXFx0dHJpc3RhdGUgXFxcIklQIHZpcnR1YWwgc2VydmVyIHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy0yNi1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZzoyNzppZiBJUF9WU1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTI4LVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnOjI5OmNvbmZpZ1xcdElQX1ZTX0lQVjZcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy0zMC1cXHRib29sIFxcXCJJUHY2IHN1cHBvcnQgZm9yIElQVlNcXFwiXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc6MzE6XFx0ZGVwZW5kcyBvbiBJUFY2ID0geSB8fCBJUF9WUyA9IElQVjZcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy0zMi1cXHRzZWxlY3QgTkZfREVGUkFHX0lQVjZcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTM3LVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnOjM4OmNvbmZpZ1xcdElQX1ZTX0RFQlVHXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctMzktXFx0Ym9vbCBcXFwiSVAgdmlydHVhbCBzZXJ2ZXIgZGVidWdnaW5nXFxcIlxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctNDQtXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc6NDU6Y29uZmlnXFx0SVBfVlNfVEFCX0JJVFNcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy00Ni1cXHRpbnQgXFxcIklQVlMgY29ubmVjdGlvbiB0YWJsZSBzaXplICh0aGUgTnRoIHBvd2VyIG9mIDIpXFxcIlxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc9Nzc9Y29tbWVudCBcXFwiSVBWUyB0cmFuc3BvcnQgcHJvdG9jb2wgbG9hZCBiYWxhbmNpbmcgc3VwcG9ydFxcXCJcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy03OC1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZzo3OTpjb25maWdcXHRJUF9WU19QUk9UT19UQ1BcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy04MC1cXHRib29sIFxcXCJUQ1AgbG9hZCBiYWxhbmNpbmcgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTg0LVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnOjg1OmNvbmZpZ1xcdElQX1ZTX1BST1RPX1VEUFxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTg2LVxcdGJvb2wgXFxcIlVEUCBsb2FkIGJhbGFuY2luZyBzdXBwb3J0XFxcIlxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctOTAtXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc6OTE6Y29uZmlnXFx0SVBfVlNfUFJPVE9fQUhfRVNQXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc6OTI6XFx0ZGVmX2Jvb2wgSVBfVlNfUFJPVE9fRVNQIHx8IElQX1ZTX1BST1RPX0FIXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctOTMtXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc6OTQ6Y29uZmlnXFx0SVBfVlNfUFJPVE9fRVNQXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctOTUtXFx0Ym9vbCBcXFwiRVNQIGxvYWQgYmFsYW5jaW5nIHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy05OS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZzoxMDA6Y29uZmlnXFx0SVBfVlNfUFJPVE9fQUhcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy0xMDEtXFx0Ym9vbCBcXFwiQUggbG9hZCBiYWxhbmNpbmcgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTEwNS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZzoxMDY6Y29uZmlnICBJUF9WU19QUk9UT19TQ1RQXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctMTA3LVxcdGJvb2wgXFxcIlNDVFAgbG9hZCBiYWxhbmNpbmcgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnPTExMz1jb21tZW50IFxcXCJJUFZTIHNjaGVkdWxlclxcXCJcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy0xMTQtXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc6MTE1OmNvbmZpZ1xcdElQX1ZTX1JSXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctMTE2LVxcdHRyaXN0YXRlIFxcXCJyb3VuZC1yb2JpbiBzY2hlZHVsaW5nXFxcIlxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctMTIzLSBcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZzoxMjQ6Y29uZmlnXFx0SVBfVlNfV1JSXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctMTI1LVxcdHRyaXN0YXRlIFxcXCJ3ZWlnaHRlZCByb3VuZC1yb2JpbiBzY2hlZHVsaW5nXFxcIlxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctMTM2LVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnOjEzNzpjb25maWdcXHRJUF9WU19MQ1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTEzOC1cXHR0cmlzdGF0ZSBcXFwibGVhc3QtY29ubmVjdGlvbiBzY2hlZHVsaW5nXFxcIlxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctMTQ2LVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnOjE0Nzpjb25maWdcXHRJUF9WU19XTENcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy0xNDgtXFx0dHJpc3RhdGUgXFxcIndlaWdodGVkIGxlYXN0LWNvbm5lY3Rpb24gc2NoZWR1bGluZ1xcXCJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTE1Ni1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZzoxNTc6Y29uZmlnICBJUF9WU19GT1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTE1OC1cXHRcXHR0cmlzdGF0ZSBcXFwid2VpZ2h0ZWQgZmFpbG92ZXIgc2NoZWR1bGluZ1xcXCJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTE2Ni1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZzoxNjc6Y29uZmlnICBJUF9WU19PVkZcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy0xNjgtXFx0dHJpc3RhdGUgXFxcIndlaWdodGVkIG92ZXJmbG93IHNjaGVkdWxpbmdcXFwiXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy0xNzctXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc6MTc4OmNvbmZpZ1xcdElQX1ZTX0xCTENcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy0xNzktXFx0dHJpc3RhdGUgXFxcImxvY2FsaXR5LWJhc2VkIGxlYXN0LWNvbm5lY3Rpb24gc2NoZWR1bGluZ1xcXCJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTE5MS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZzoxOTI6Y29uZmlnICBJUF9WU19MQkxDUlxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTE5My1cXHR0cmlzdGF0ZSBcXFwibG9jYWxpdHktYmFzZWQgbGVhc3QtY29ubmVjdGlvbiB3aXRoIHJlcGxpY2F0aW9uIHNjaGVkdWxpbmdcXFwiXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy0yMDktXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc6MjEwOmNvbmZpZ1xcdElQX1ZTX0RIXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctMjExLVxcdHRyaXN0YXRlIFxcXCJkZXN0aW5hdGlvbiBoYXNoaW5nIHNjaGVkdWxpbmdcXFwiXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy0yMTktXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc6MjIwOmNvbmZpZ1xcdElQX1ZTX1NIXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctMjIxLVxcdHRyaXN0YXRlIFxcXCJzb3VyY2UgaGFzaGluZyBzY2hlZHVsaW5nXFxcIlxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctMjI5LVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnOjIzMDpjb25maWdcXHRJUF9WU19NSFxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTIzMS1cXHR0cmlzdGF0ZSBcXFwibWFnbGV2IGhhc2hpbmcgc2NoZWR1bGluZ1xcXCJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTI0OC1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZzoyNDk6Y29uZmlnXFx0SVBfVlNfU0VEXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctMjUwLVxcdHRyaXN0YXRlIFxcXCJzaG9ydGVzdCBleHBlY3RlZCBkZWxheSBzY2hlZHVsaW5nXFxcIlxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctMjYxLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnOjI2Mjpjb25maWdcXHRJUF9WU19OUVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTI2My1cXHR0cmlzdGF0ZSBcXFwibmV2ZXIgcXVldWUgc2NoZWR1bGluZ1xcXCJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTI3NC1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZzoyNzU6Y29uZmlnXFx0SVBfVlNfVFdPU1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTI3Ni1cXHR0cmlzdGF0ZSBcXFwid2VpZ2h0ZWQgcmFuZG9tIHR3b3MgY2hvaWNlIGxlYXN0LWNvbm5lY3Rpb24gc2NoZWR1bGluZ1xcXCJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnPTI4Nj1jb21tZW50ICdJUFZTIFNIIHNjaGVkdWxlcidcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy0yODctXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc6Mjg4OmNvbmZpZyBJUF9WU19TSF9UQUJfQklUU1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTI4OS1cXHRpbnQgXFxcIklQVlMgc291cmNlIGhhc2hpbmcgdGFibGUgc2l6ZSAodGhlIE50aCBwb3dlciBvZiAyKVxcXCJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnPTMwMT1jb21tZW50ICdJUFZTIE1IIHNjaGVkdWxlcidcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy0zMDItXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc6MzAzOmNvbmZpZyBJUF9WU19NSF9UQUJfSU5ERVhcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy0zMDQtXFx0aW50IFxcXCJJUFZTIG1hZ2xldiBoYXNoaW5nIHRhYmxlIGluZGV4IG9mIHNpemUgKHRoZSBwcmltZSBudW1iZXJzKVxcXCJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnPTMxOT1jb21tZW50ICdJUFZTIGFwcGxpY2F0aW9uIGhlbHBlcidcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy0zMjAtXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc6MzIxOmNvbmZpZ1xcdElQX1ZTX0ZUUFxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTMyMi1cXHR0cmlzdGF0ZSBcXFwiRlRQIHByb3RvY29sIGhlbHBlclxcXCJcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZzozMjM6XFx0ZGVwZW5kcyBvbiBJUF9WU19QUk9UT19UQ1AgXFx1MDAyNlxcdTAwMjYgTkZfQ09OTlRSQUNLIFxcdTAwMjZcXHUwMDI2IE5GX05BVCBcXHUwMDI2XFx1MDAyNiBcXFxcXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctMzI0LVxcdFxcdE5GX0NPTk5UUkFDS19GVFBcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZzozMjU6XFx0c2VsZWN0IElQX1ZTX05GQ1RcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy0zMjYtXFx0aGVscFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctMzM2LVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnOjMzNzpjb25maWdcXHRJUF9WU19ORkNUXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctMzM4LVxcdGJvb2wgXFxcIk5ldGZpbHRlciBjb25uZWN0aW9uIHRyYWNraW5nXFxcIlxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctMzQ0LVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnOjM0NTpjb25maWdcXHRJUF9WU19QRV9TSVBcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy0zNDYtXFx0dHJpc3RhdGUgXFxcIlNJUCBwZXJzaXN0ZW5jZSBlbmdpbmVcXFwiXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc6MzQ3OlxcdGRlcGVuZHMgb24gSVBfVlNfUFJPVE9fVURQXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctMzQ4LVxcdGRlcGVuZHMgb24gTkZfQ09OTlRSQUNLX1NJUFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc9MzUyPWNvbmZpZyBHQ09WX1BST0ZJTEVfSVBWU1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctMzYwLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnOjM2MTplbmRpZiAjIElQX1ZTXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvTWFrZWZpbGU9Nz1pcF92c19wcm90by1vYmpzLXkgOj1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvTWFrZWZpbGU6ODppcF92c19wcm90by1vYmpzLSQoQ09ORklHX0lQX1ZTX1BST1RPX1RDUCkgKz0gaXBfdnNfcHJvdG9fdGNwLm9cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvTWFrZWZpbGU6OTppcF92c19wcm90by1vYmpzLSQoQ09ORklHX0lQX1ZTX1BST1RPX1VEUCkgKz0gaXBfdnNfcHJvdG9fdWRwLm9cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvTWFrZWZpbGU6MTA6aXBfdnNfcHJvdG8tb2Jqcy0kKENPTkZJR19JUF9WU19QUk9UT19BSF9FU1ApICs9IGlwX3ZzX3Byb3RvX2FoX2VzcC5vXFxubmV0L25ldGZpbHRlci9pcHZzL01ha2VmaWxlOjExOmlwX3ZzX3Byb3RvLW9ianMtJChDT05GSUdfSVBfVlNfUFJPVE9fU0NUUCkgKz0gaXBfdnNfcHJvdG9fc2N0cC5vXFxubmV0L25ldGZpbHRlci9pcHZzL01ha2VmaWxlLTEyLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9NYWtlZmlsZT0xMz1pcF92cy1leHRyYV9vYmpzLXkgOj1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvTWFrZWZpbGU6MTQ6aXBfdnMtZXh0cmFfb2Jqcy0kKENPTkZJR19JUF9WU19ORkNUKSArPSBpcF92c19uZmN0Lm9cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvTWFrZWZpbGUtMTUtXFxubmV0L25ldGZpbHRlci9pcHZzL01ha2VmaWxlPTE2PWlwX3ZzLW9ianMgOj1cXHRpcF92c19jb25uLm8gaXBfdnNfY29yZS5vIGlwX3ZzX2N0bC5vIGlwX3ZzX3NjaGVkLm9cXHQgICBcXFxcXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvTWFrZWZpbGUtMjItIyBJUFZTIGNvcmVcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvTWFrZWZpbGU6MjM6b2JqLSQoQ09ORklHX0lQX1ZTKSArPSBpcF92cy5vXFxubmV0L25ldGZpbHRlci9pcHZzL01ha2VmaWxlLTI0LVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9NYWtlZmlsZS0yNS0jIElQVlMgc2NoZWR1bGVyc1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9NYWtlZmlsZToyNjpvYmotJChDT05GSUdfSVBfVlNfUlIpICs9IGlwX3ZzX3JyLm9cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvTWFrZWZpbGU6Mjc6b2JqLSQoQ09ORklHX0lQX1ZTX1dSUikgKz0gaXBfdnNfd3JyLm9cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvTWFrZWZpbGU6Mjg6b2JqLSQoQ09ORklHX0lQX1ZTX0xDKSArPSBpcF92c19sYy5vXFxubmV0L25ldGZpbHRlci9pcHZzL01ha2VmaWxlOjI5Om9iai0kKENPTkZJR19JUF9WU19XTEMpICs9IGlwX3ZzX3dsYy5vXFxubmV0L25ldGZpbHRlci9pcHZzL01ha2VmaWxlOjMwOm9iai0kKENPTkZJR19JUF9WU19GTykgKz0gaXBfdnNfZm8ub1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9NYWtlZmlsZTozMTpvYmotJChDT05GSUdfSVBfVlNfT1ZGKSArPSBpcF92c19vdmYub1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9NYWtlZmlsZTozMjpvYmotJChDT05GSUdfSVBfVlNfTEJMQykgKz0gaXBfdnNfbGJsYy5vXFxubmV0L25ldGZpbHRlci9pcHZzL01ha2VmaWxlOjMzOm9iai0kKENPTkZJR19JUF9WU19MQkxDUikgKz0gaXBfdnNfbGJsY3Iub1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9NYWtlZmlsZTozNDpvYmotJChDT05GSUdfSVBfVlNfREgpICs9IGlwX3ZzX2RoLm9cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvTWFrZWZpbGU6MzU6b2JqLSQoQ09ORklHX0lQX1ZTX1NIKSArPSBpcF92c19zaC5vXFxubmV0L25ldGZpbHRlci9pcHZzL01ha2VmaWxlOjM2Om9iai0kKENPTkZJR19JUF9WU19NSCkgKz0gaXBfdnNfbWgub1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9NYWtlZmlsZTozNzpvYmotJChDT05GSUdfSVBfVlNfU0VEKSArPSBpcF92c19zZWQub1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9NYWtlZmlsZTozODpvYmotJChDT05GSUdfSVBfVlNfTlEpICs9IGlwX3ZzX25xLm9cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvTWFrZWZpbGU6Mzk6b2JqLSQoQ09ORklHX0lQX1ZTX1RXT1MpICs9IGlwX3ZzX3R3b3Mub1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9NYWtlZmlsZS00MC1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvTWFrZWZpbGUtNDEtIyBJUFZTIGFwcGxpY2F0aW9uIGhlbHBlcnNcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvTWFrZWZpbGU6NDI6b2JqLSQoQ09ORklHX0lQX1ZTX0ZUUCkgKz0gaXBfdnNfZnRwLm9cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvTWFrZWZpbGUtNDMtXFxubmV0L25ldGZpbHRlci9pcHZzL01ha2VmaWxlLTQ0LSMgSVBWUyBjb25uZWN0aW9uIHRlbXBsYXRlIHJldHJpZXZlcnNcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvTWFrZWZpbGU6NDU6b2JqLSQoQ09ORklHX0lQX1ZTX1BFX1NJUCkgKz0gaXBfdnNfcGVfc2lwLm9cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvTWFrZWZpbGUtNDYtaWZkZWYgQ09ORklHX0dDT1ZfUFJPRklMRV9JUFZTXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfYXBwLmM9NzI9aXBfdnNfYXBwX2luY19uZXcoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIHN0cnVjdCBpcF92c19hcHAgKmFwcCwgX191MTYgcHJvdG8sXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfYXBwLmMtMTA4LVxcdGxpc3RfYWRkKFxcdTAwMjZpbmMtXFx1MDAzZWFfbGlzdCwgXFx1MDAyNmFwcC1cXHUwMDNlaW5jc19saXN0KTtcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfYXBwLmM6MTA5OlxcdElQX1ZTX0RCRyg5LCBcXFwiJXMgQXBwICVzOiV1IHJlZ2lzdGVyZWRcXFxcblxcXCIsXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2FwcC5jLTExMC1cXHRcXHQgIHBwLVxcdTAwM2VuYW1lLCBpbmMtXFx1MDAzZW5hbWUsIG50b2hzKGluYy1cXHUwMDNlcG9ydCkpO1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2FwcC5jPTEyND1pcF92c19hcHBfaW5jX3JlbGVhc2Uoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIHN0cnVjdCBpcF92c19hcHAgKmluYylcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19hcHAuYy0xMzMtXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2FwcC5jOjEzNDpcXHRJUF9WU19EQkcoOSwgXFxcIiVzIEFwcCAlczoldSB1bnJlZ2lzdGVyZWRcXFxcblxcXCIsXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2FwcC5jLTEzNS1cXHRcXHQgIHBwLVxcdTAwM2VuYW1lLCBpbmMtXFx1MDAzZW5hbWUsIG50b2hzKGluYy1cXHUwMDNlcG9ydCkpO1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2FwcC5jPTI4Nz1zdGF0aWMgaW5saW5lIHZvaWQgdnNfZml4X3NlcShjb25zdCBzdHJ1Y3QgaXBfdnNfc2VxICp2c2VxLCBzdHJ1Y3QgdGNwaGRyICp0aClcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19hcHAuYy0yOTgtXFx0XFx0XFx0dGgtXFx1MDAzZXNlcSA9IGh0b25sKHNlcSArIHZzZXEtXFx1MDAzZWRlbHRhKTtcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfYXBwLmM6Mjk5OlxcdFxcdFxcdElQX1ZTX0RCRyg5LCBcXFwiJXMoKTogYWRkZWQgZGVsdGEgKCVkKSB0byBzZXFcXFxcblxcXCIsXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2FwcC5jLTMwMC1cXHRcXHRcXHRcXHQgIF9fZnVuY19fLCB2c2VxLVxcdTAwM2VkZWx0YSk7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfYXBwLmMtMzAyLVxcdFxcdFxcdHRoLVxcdTAwM2VzZXEgPSBodG9ubChzZXEgKyB2c2VxLVxcdTAwM2VwcmV2aW91c19kZWx0YSk7XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2FwcC5jOjMwMzpcXHRcXHRcXHRJUF9WU19EQkcoOSwgXFxcIiVzKCk6IGFkZGVkIHByZXZpb3VzX2RlbHRhICglZCkgdG8gc2VxXFxcXG5cXFwiLFxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19hcHAuYy0zMDQtXFx0XFx0XFx0XFx0ICBfX2Z1bmNfXywgdnNlcS1cXHUwMDNlcHJldmlvdXNfZGVsdGEpO1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2FwcC5jPTMxND12c19maXhfYWNrX3NlcShjb25zdCBzdHJ1Y3QgaXBfdnNfc2VxICp2c2VxLCBzdHJ1Y3QgdGNwaGRyICp0aClcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19hcHAuYy0zMjctXFx0XFx0XFx0dGgtXFx1MDAzZWFja19zZXEgPSBodG9ubChhY2tfc2VxIC0gdnNlcS1cXHUwMDNlZGVsdGEpO1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19hcHAuYzozMjg6XFx0XFx0XFx0SVBfVlNfREJHKDksIFxcXCIlcygpOiBzdWJ0cmFjdGVkIGRlbHRhIFxcXCJcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfYXBwLmMtMzI5LVxcdFxcdFxcdFxcdCAgXFxcIiglZCkgZnJvbSBhY2tfc2VxXFxcXG5cXFwiLCBfX2Z1bmNfXywgdnNlcS1cXHUwMDNlZGVsdGEpO1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2FwcC5jLTMzMi1cXHRcXHRcXHR0aC1cXHUwMDNlYWNrX3NlcSA9IGh0b25sKGFja19zZXEgLSB2c2VxLVxcdTAwM2VwcmV2aW91c19kZWx0YSk7XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2FwcC5jOjMzMzpcXHRcXHRcXHRJUF9WU19EQkcoOSwgXFxcIiVzKCk6IHN1YnRyYWN0ZWQgXFxcIlxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19hcHAuYy0zMzQtXFx0XFx0XFx0XFx0ICBcXFwicHJldmlvdXNfZGVsdGEgKCVkKSBmcm9tIGFja19zZXFcXFxcblxcXCIsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfYXBwLmM9MzU5PXN0YXRpYyBpbmxpbmUgaW50IGFwcF90Y3BfcGt0X291dChzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsIHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfYXBwLmMtMzc5LVxcdCAqL1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19hcHAuYzozODA6XFx0aWYgKGNwLVxcdTAwM2VmbGFncyBcXHUwMDI2IElQX1ZTX0NPTk5fRl9PVVRfU0VRKVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19hcHAuYy0zODEtXFx0XFx0dnNfZml4X3NlcShcXHUwMDI2Y3AtXFx1MDAzZW91dF9zZXEsIHRoKTtcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfYXBwLmM6MzgyOlxcdGlmIChjcC1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBJUF9WU19DT05OX0ZfSU5fU0VRKVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19hcHAuYy0zODMtXFx0XFx0dnNfZml4X2Fja19zZXEoXFx1MDAyNmNwLVxcdTAwM2Vpbl9zZXEsIHRoKTtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19hcHAuYy0zOTgtXFx0XFx0dnNfc2VxX3VwZGF0ZShjcCwgXFx1MDAyNmNwLVxcdTAwM2VvdXRfc2VxLFxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19hcHAuYzozOTk6XFx0XFx0XFx0ICAgICAgSVBfVlNfQ09OTl9GX09VVF9TRVEsIHNlcSwgZGlmZik7XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2FwcC5jLTQwMC1cXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19hcHAuYz00MzU9c3RhdGljIGlubGluZSBpbnQgYXBwX3RjcF9wa3RfaW4oc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2FwcC5jLTQ1NS1cXHQgKi9cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfYXBwLmM6NDU2OlxcdGlmIChjcC1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBJUF9WU19DT05OX0ZfSU5fU0VRKVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19hcHAuYy00NTctXFx0XFx0dnNfZml4X3NlcShcXHUwMDI2Y3AtXFx1MDAzZWluX3NlcSwgdGgpO1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19hcHAuYzo0NTg6XFx0aWYgKGNwLVxcdTAwM2VmbGFncyBcXHUwMDI2IElQX1ZTX0NPTk5fRl9PVVRfU0VRKVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19hcHAuYy00NTktXFx0XFx0dnNfZml4X2Fja19zZXEoXFx1MDAyNmNwLVxcdTAwM2VvdXRfc2VxLCB0aCk7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfYXBwLmMtNDc0LVxcdFxcdHZzX3NlcV91cGRhdGUoY3AsIFxcdTAwMjZjcC1cXHUwMDNlaW5fc2VxLFxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19hcHAuYzo0NzU6XFx0XFx0XFx0ICAgICAgSVBfVlNfQ09OTl9GX0lOX1NFUSwgc2VxLCBkaWZmKTtcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfYXBwLmMtNDc2LVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYy0zOC1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jOjM5OiNpZm5kZWYgQ09ORklHX0lQX1ZTX1RBQl9CSVRTXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYzo0MDojZGVmaW5lIENPTkZJR19JUF9WU19UQUJfQklUU1xcdDEyXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYy00MS0jZW5kaWZcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmMtNDUtKi9cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jOjQ2OnN0YXRpYyBpbnQgaXBfdnNfY29ubl90YWJfYml0cyA9IENPTkZJR19JUF9WU19UQUJfQklUUztcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jLTQ3LW1vZHVsZV9wYXJhbV9uYW1lZChjb25uX3RhYl9iaXRzLCBpcF92c19jb25uX3RhYl9iaXRzLCBpbnQsIDA0NDQpO1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYz01ND1zdGF0aWMgc3RydWN0IGttZW1fY2FjaGUgKmlwX3ZzX2Nvbm5fY2FjaGVwIF9fcmVhZF9tb3N0bHk7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jLTU2LS8qIFdlIG5lZWQgYW4gYWRkcnN0cmxlbiB0aGF0IHdvcmtzIHdpdGggb3Igd2l0aG91dCB2NiAqL1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmM6NTc6I2lmZGVmIENPTkZJR19JUF9WU19JUFY2XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYzo1ODojZGVmaW5lIElQX1ZTX0FERFJTVFJMRU4gSU5FVDZfQUREUlNUUkxFTlxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmMtNTktI2Vsc2VcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jOjYwOiNkZWZpbmUgSVBfVlNfQUREUlNUUkxFTiAoOCsxKVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmMtNjEtI2VuZGlmXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jPTE4ND1zdGF0aWMgdTMyIGlwX3ZzX2Nvbm5faGFzaGtleShzdHJ1Y3QgaXBfdnNfcmh0ICp0LCBpbnQgYWYsIHVuc2lnbmVkIGludCBwcm90byxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmMtMTkwLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmM6MTkxOiNpZmRlZiBDT05GSUdfSVBfVlNfSVBWNlxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmMtMTkyLVxcdGlmIChhZiA9PSBBRl9JTkVUNikge1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYz0yNjE9c3RhdGljIGlubGluZSBpbnQgaXBfdnNfY29ubl9oYXNoKHN0cnVjdCBpcF92c19jb25uICpjcClcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmMtMjcwLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmM6MjcxOlxcdGlmIChjcC1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBJUF9WU19DT05OX0ZfT05FX1BBQ0tFVClcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jLTI3Mi1cXHRcXHRyZXR1cm4gMDtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmMtMjkyLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmM6MjkzOlxcdGNwLVxcdTAwM2VmbGFncyB8PSBJUF9WU19DT05OX0ZfSEFTSEVEO1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmMtMjk0LVxcdFdSSVRFX09OQ0UoY3AtXFx1MDAzZWhuMC5oYXNoX2tleSwgaGFzaF9rZXkpO1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYy0zMDYtXFx0aWYgKGF0b21pY19yZWFkKFxcdTAwMjZpcHZzLVxcdTAwM2Vjb25uX2NvdW50KSBcXHUwMDNlIHQtXFx1MDAzZXVfdGhyZXNoIFxcdTAwMjZcXHUwMDI2XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYzozMDc6XFx0ICAgICF0ZXN0X2FuZF9zZXRfYml0KElQX1ZTX1dPUktfQ09OTl9SRVNJWkUsIFxcdTAwMjZpcHZzLVxcdTAwM2V3b3JrX2ZsYWdzKSlcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jLTMwOC1cXHRcXHRtb2RfZGVsYXllZF93b3JrKHN5c3RlbV9kZmxfbG9uZ193cSwgXFx1MDAyNmlwdnMtXFx1MDAzZWNvbm5fcmVzaXplX3dvcmssIDApO1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYz0zMTY9c3RhdGljIGlubGluZSBib29sIGlwX3ZzX2Nvbm5fdW5saW5rKHN0cnVjdCBpcF92c19jb25uICpjcClcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmMtMzI0LVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmM6MzI1OlxcdGlmIChjcC1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBJUF9WU19DT05OX0ZfT05FX1BBQ0tFVClcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jLTMyNi1cXHRcXHRyZXR1cm4gcmVmY291bnRfZGVjX2lmX29uZShcXHUwMDI2Y3AtXFx1MDAzZXJlZmNudCk7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jLTMzOC1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jOjMzOTpcXHRpZiAoY3AtXFx1MDAzZWZsYWdzIFxcdTAwMjYgSVBfVlNfQ09OTl9GX0hBU0hFRCkge1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmMtMzQwLVxcdFxcdC8qIERlY3JlYXNlIHJlZmNudCBhbmQgdW5saW5rIGNvbm4gb25seSBpZiB3ZSBhcmUgbGFzdCB1c2VyICovXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jLTM0NS1cXHRcXHRcXHRcXHRobGlzdF9ibF9kZWxfcmN1KFxcdTAwMjZjcC1cXHUwMDNlaG4xLm5vZGUpO1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmM6MzQ2OlxcdFxcdFxcdGNwLVxcdTAwM2VmbGFncyBcXHUwMDI2PSB+SVBfVlNfQ09OTl9GX0hBU0hFRDtcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jLTM0Ny1cXHRcXHRcXHRyZXQgPSB0cnVlO1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYz0zNjc9X19pcF92c19jb25uX2luX2dldChjb25zdCBzdHJ1Y3QgaXBfdnNfY29ubl9wYXJhbSAqcClcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jLTM2OC17XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYzozNjk6XFx0REVDTEFSRV9JUF9WU19SSFRfV0FMS19CVUNLRVRfUkNVKCk7XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYy0zNzAtXFx0c3RydWN0IG5ldG5zX2lwdnMgKmlwdnMgPSBwLVxcdTAwM2VpcHZzO1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYy0zOTUtXFx0XFx0XFx0XFx0ICAgICghcC1cXHUwMDNlY3BvcnQgXlxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmM6Mzk2OlxcdFxcdFxcdFxcdCAgICAgKCEoY3AtXFx1MDAzZWZsYWdzIFxcdTAwMjYgSVBfVlNfQ09OTl9GX05PX0NQT1JUKSkpIFxcdTAwMjZcXHUwMDI2XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYy0zOTctXFx0XFx0XFx0XFx0ICAgIHAtXFx1MDAzZXByb3RvY29sID09IGNwLVxcdTAwM2Vwcm90b2NvbCkge1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYz00MTM9c3RydWN0IGlwX3ZzX2Nvbm4gKmlwX3ZzX2Nvbm5faW5fZ2V0KGNvbnN0IHN0cnVjdCBpcF92c19jb25uX3BhcmFtICpwKVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYy00MjktXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYzo0MzA6XFx0SVBfVlNfREJHX0JVRig5LCBcXFwibG9va3VwL2luICVzICVzOiVkLVxcdTAwM2UlczolZCAlc1xcXFxuXFxcIixcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jLTQzMS1cXHRcXHQgICAgICBpcF92c19wcm90b19uYW1lKHAtXFx1MDAzZXByb3RvY29sKSxcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jOjQzMjpcXHRcXHQgICAgICBJUF9WU19EQkdfQUREUihwLVxcdTAwM2VhZiwgcC1cXHUwMDNlY2FkZHIpLCBudG9ocyhwLVxcdTAwM2VjcG9ydCksXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYzo0MzM6XFx0XFx0ICAgICAgSVBfVlNfREJHX0FERFIocC1cXHUwMDNlYWYsIHAtXFx1MDAzZXZhZGRyKSwgbnRvaHMocC1cXHUwMDNldnBvcnQpLFxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmMtNDM0LVxcdFxcdCAgICAgIGNwID8gXFxcImhpdFxcXCIgOiBcXFwibm90IGhpdFxcXCIpO1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYz00NzU9c3RydWN0IGlwX3ZzX2Nvbm4gKmlwX3ZzX2N0X2luX2dldChjb25zdCBzdHJ1Y3QgaXBfdnNfY29ubl9wYXJhbSAqcClcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jLTQ3Ni17XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYzo0Nzc6XFx0REVDTEFSRV9JUF9WU19SSFRfV0FMS19CVUNLRVRfUkNVKCk7XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYy00NzgtXFx0c3RydWN0IG5ldG5zX2lwdnMgKmlwdnMgPSBwLVxcdTAwM2VpcHZzO1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYy01MTQtXFx0XFx0XFx0XFx0ICAgIHAtXFx1MDAzZWNwb3J0ID09IGNwLVxcdTAwM2VjcG9ydCBcXHUwMDI2XFx1MDAyNlxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmM6NTE1OlxcdFxcdFxcdFxcdCAgICBjcC1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBJUF9WU19DT05OX0ZfVEVNUExBVEUgXFx1MDAyNlxcdTAwMjZcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jLTUxNi1cXHRcXHRcXHRcXHQgICAgcC1cXHUwMDNlcHJvdG9jb2wgPT0gY3AtXFx1MDAzZXByb3RvY29sIFxcdTAwMjZcXHUwMDI2XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jLTUyOS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jOjUzMDpcXHRJUF9WU19EQkdfQlVGKDksIFxcXCJ0ZW1wbGF0ZSBsb29rdXAvaW4gJXMgJXM6JWQtXFx1MDAzZSVzOiVkICVzXFxcXG5cXFwiLFxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmMtNTMxLVxcdFxcdCAgICAgIGlwX3ZzX3Byb3RvX25hbWUocC1cXHUwMDNlcHJvdG9jb2wpLFxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmM6NTMyOlxcdFxcdCAgICAgIElQX1ZTX0RCR19BRERSKHAtXFx1MDAzZWFmLCBwLVxcdTAwM2VjYWRkciksIG50b2hzKHAtXFx1MDAzZWNwb3J0KSxcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jOjUzMzpcXHRcXHQgICAgICBJUF9WU19EQkdfQUREUihwLVxcdTAwM2VhZiwgcC1cXHUwMDNldmFkZHIpLCBudG9ocyhwLVxcdTAwM2V2cG9ydCksXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYy01MzQtXFx0XFx0ICAgICAgY3AgPyBcXFwiaGl0XFxcIiA6IFxcXCJub3QgaGl0XFxcIik7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jPTU0Mz1zdHJ1Y3QgaXBfdnNfY29ubiAqaXBfdnNfY29ubl9vdXRfZ2V0KGNvbnN0IHN0cnVjdCBpcF92c19jb25uX3BhcmFtICpwKVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmMtNTQ0LXtcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jOjU0NTpcXHRERUNMQVJFX0lQX1ZTX1JIVF9XQUxLX0JVQ0tFVF9SQ1UoKTtcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jLTU0Ni1cXHRzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cyA9IHAtXFx1MDAzZWlwdnM7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jLTU2OS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jOjU3MDpcXHRcXHRcXHRcXHRpZiAoSVBfVlNfRldEX01FVEhPRChjcCkgIT0gSVBfVlNfQ09OTl9GX01BU1EpIHtcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jLTU3MS1cXHRcXHRcXHRcXHRcXHRzcG9ydCA9IGNwLVxcdTAwM2V2cG9ydDtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmMtNTkzLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmM6NTk0OlxcdElQX1ZTX0RCR19CVUYoOSwgXFxcImxvb2t1cC9vdXQgJXMgJXM6JWQtXFx1MDAzZSVzOiVkICVzXFxcXG5cXFwiLFxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmMtNTk1LVxcdFxcdCAgICAgIGlwX3ZzX3Byb3RvX25hbWUocC1cXHUwMDNlcHJvdG9jb2wpLFxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmM6NTk2OlxcdFxcdCAgICAgIElQX1ZTX0RCR19BRERSKHAtXFx1MDAzZWFmLCBwLVxcdTAwM2VjYWRkciksIG50b2hzKHAtXFx1MDAzZWNwb3J0KSxcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jOjU5NzpcXHRcXHQgICAgICBJUF9WU19EQkdfQUREUihwLVxcdTAwM2VhZiwgcC1cXHUwMDNldmFkZHIpLCBudG9ocyhwLVxcdTAwM2V2cG9ydCksXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYy01OTgtXFx0XFx0ICAgICAgY3AgPyBcXFwiaGl0XFxcIiA6IFxcXCJub3QgaGl0XFxcIik7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jPTYyMD1zdGF0aWMgdm9pZCBfX2lwX3ZzX2Nvbm5fcHV0X3RpbWVyKHN0cnVjdCBpcF92c19jb25uICpjcClcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jLTYyMS17XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYzo2MjI6XFx0dW5zaWduZWQgbG9uZyB0ID0gKGNwLVxcdTAwM2VmbGFncyBcXHUwMDI2IElQX1ZTX0NPTk5fRl9PTkVfUEFDS0VUKSA/XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYy02MjMtXFx0XFx0MCA6IGNwLVxcdTAwM2V0aW1lb3V0O1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYz02Mjk9dm9pZCBpcF92c19jb25uX3B1dChzdHJ1Y3QgaXBfdnNfY29ubiAqY3ApXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYy02MzAte1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmM6NjMxOlxcdGlmICgoY3AtXFx1MDAzZWZsYWdzIFxcdTAwMjYgSVBfVlNfQ09OTl9GX09ORV9QQUNLRVQpIFxcdTAwMjZcXHUwMDI2XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYy02MzItXFx0ICAgIChyZWZjb3VudF9yZWFkKFxcdTAwMjZjcC1cXHUwMDNlcmVmY250KSA9PSAxKSBcXHUwMDI2XFx1MDAyNlxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYz02NDM9dm9pZCBpcF92c19jb25uX2ZpbGxfY3BvcnQoc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLCBfX2JlMTYgY3BvcnQpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jLTY4NC1cXHRcXHRcXHRzcGluX2xvY2tfYmgoXFx1MDAyNmNwLVxcdTAwM2Vsb2NrKTtcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jOjY4NTpcXHRcXHRcXHRpZiAoY3AtXFx1MDAzZWZsYWdzIFxcdTAwMjYgSVBfVlNfQ09OTl9GX05PX0NQT1JUIFxcdTAwMjZcXHUwMDI2IGJ5X21lKVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmMtNjg2LVxcdFxcdFxcdFxcdGNwLVxcdTAwM2VjcG9ydCA9IDA7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jLTY4OC1cXHRcXHRcXHRzcGluX3VubG9ja19iaChcXHUwMDI2Y3AtXFx1MDAzZWxvY2spO1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmM6Njg5OlxcdFxcdFxcdElQX1ZTX0VSUl9STChcXFwiJXMoKTogVG9vIG1hbnkgaHQgY2hhbmdlcyBmb3IgZGlyICVkXFxcXG5cXFwiLFxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmMtNjkwLVxcdFxcdFxcdFxcdCAgICAgX19mdW5jX18sIGRpcik7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jLTc1Ny1cXHQvKiBGaWxsIGNwb3J0IG9uY2UsIGV2ZW4gaWYgbXVsdGlwbGUgcGFja2V0cyB0cnkgdG8gZG8gaXQgKi9cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jOjc1ODpcXHRpZiAoY3AtXFx1MDAzZWZsYWdzIFxcdTAwMjYgSVBfVlNfQ09OTl9GX05PX0NQT1JUIFxcdTAwMjZcXHUwMDI2ICghY3AtXFx1MDAzZWNwb3J0IHx8IGJ5X21lKSkge1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmMtNzU5LVxcdFxcdC8qIElmIHdlIHJhY2Ugd2l0aCByZXNpemluZyBtYWtlIHN1cmUgY3BvcnQgaXMgc2V0IGZvciBkaXIgMSAqL1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYy03NjUtXFx0XFx0XFx0YXRvbWljX2RlYyhcXHUwMDI2aXB2cy1cXHUwMDNlbm9fY3BvcnRfY29ubnNbYWZfaWRdKTtcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jOjc2NjpcXHRcXHRcXHRjcC1cXHUwMDNlZmxhZ3MgXFx1MDAyNj0gfklQX1ZTX0NPTk5fRl9OT19DUE9SVDtcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jLTc2Ny1cXHRcXHR9XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jPTc5Nz1zdGF0aWMgdm9pZCBpcF92c19jb25uX2NoYW5nZV9md2RfbWFzayhzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsIHUzMiBuZXdfZmxhZ3MpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jLTgwNC1cXHQvKiBTZWUgaXBfdnNfY29ubl91c2VfaGFzaDIoKSBmb3IgcmVmZXJlbmNlICovXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYzo4MDU6XFx0aWYgKChjcC1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBJUF9WU19DT05OX0ZfVEVNUExBVEUpIHx8XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYy04MDYtXFx0ICAgIC8qIE5vIGNoYW5nZSBpbiBkb3VibGUgaGFzaGluZyA/ICovXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYzo4MDc6XFx0ICAgIChJUF9WU19GV0RfTUVUSE9EKGNwKSA9PSBJUF9WU19DT05OX0ZfTUFTUSkgPT1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jOjgwODpcXHQgICAgKChuZXdfZmxhZ3MgXFx1MDAyNiBJUF9WU19DT05OX0ZfRldEX01BU0spID09IElQX1ZTX0NPTk5fRl9NQVNRKSkge1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmMtODA5LVxcdFxcdGNwLVxcdTAwM2VmbGFncyA9IG5ld19mbGFncztcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmM9ODY2PWludCBpcF92c19jb25uX2Rlc2lyZWRfc2l6ZShzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgc3RydWN0IGlwX3ZzX3JodCAqdCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmMtODY5LVxcdHJldHVybiBpcF92c19yaHRfZGVzaXJlZF9zaXplKGlwdnMsIHQsIGF0b21pY19yZWFkKFxcdTAwMjZpcHZzLVxcdTAwM2Vjb25uX2NvdW50KSxcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jOjg3MDpcXHRcXHRcXHRcXHQgICAgICBsZmFjdG9yLCBJUF9WU19DT05OX1RBQl9NSU5fQklUUyxcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jLTg3MS1cXHRcXHRcXHRcXHQgICAgICBpcF92c19jb25uX3RhYl9iaXRzKTtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmM9ODc1PXN0cnVjdCBpcF92c19yaHQgKmlwX3ZzX2Nvbm5fdGFiX2FsbG9jKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBpbnQgYnVja2V0cyxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmMtODgyLVxcdHNjb3VudHMgPSBjbGFtcChidWNrZXRzIFxcdTAwM2VcXHUwMDNlIDYsIDEsIDI1Nik7XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYzo4ODM6XFx0LyogbG9ja3M6IGJhc2VkIG9uIHBhcmFsbGVsIElQX1ZTX0NPTk5fRl9OT19DUE9SVCBvcGVyYXRpb25zICsgcmVzaXplICovXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYy04ODQtXFx0bG9ja3MgPSBjbGFtcCg4LCAxLCBzY291bnRzKTtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmMtODg5LVxcdHQtXFx1MDAzZWxmYWN0b3IgPSBsZmFjdG9yO1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmM6ODkwOlxcdGlwX3ZzX3JodF9zZXRfdGhyZXNob2xkcyh0LCB0LVxcdTAwM2VzaXplLCBsZmFjdG9yLCBJUF9WU19DT05OX1RBQl9NSU5fQklUUyxcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jLTg5MS1cXHRcXHRcXHRcXHQgaXBfdnNfY29ubl90YWJfYml0cyk7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jPTg5Nj1zdGF0aWMgdm9pZCBjb25uX3Jlc2l6ZV93b3JrX2hhbmRsZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYy05MTQtXFx0LyogQWxsb3cgd29yayB0byBiZSBxdWV1ZWQgYWdhaW4gKi9cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jOjkxNTpcXHRjbGVhcl9iaXQoSVBfVlNfV09SS19DT05OX1JFU0laRSwgXFx1MDAyNmlwdnMtXFx1MDAzZXdvcmtfZmxhZ3MpO1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmMtOTE2LVxcdHQgPSByY3VfZGVyZWZlcmVuY2VfcHJvdGVjdGVkKGlwdnMtXFx1MDAzZWNvbm5fdGFiLCAxKTtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmMtOTM1LVxcdC8qIEZsaXAgdGhlIHRhYmxlX2lkICovXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYzo5MzY6XFx0dF9uZXctXFx1MDAzZXRhYmxlX2lkID0gdC1cXHUwMDNldGFibGVfaWQgXiBJUF9WU19SSFRfVEFCTEVfSURfTUFTSztcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jLTkzNy1cXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmM9MTAyMz1zdGF0aWMgaW5saW5lIHZvaWQgaXBfdnNfYmluZF94bWl0KHN0cnVjdCBpcF92c19jb25uICpjcClcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jLTEwMjQte1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmM6MTAyNTpcXHRzd2l0Y2ggKElQX1ZTX0ZXRF9NRVRIT0QoY3ApKSB7XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYzoxMDI2OlxcdGNhc2UgSVBfVlNfQ09OTl9GX01BU1E6XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYy0xMDI3LVxcdFxcdGNwLVxcdTAwM2VwYWNrZXRfeG1pdCA9IGlwX3ZzX25hdF94bWl0O1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYy0xMDI5LVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmM6MTAzMDpcXHRjYXNlIElQX1ZTX0NPTk5fRl9UVU5ORUw6XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYzoxMDMxOiNpZmRlZiBDT05GSUdfSVBfVlNfSVBWNlxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmMtMTAzMi1cXHRcXHRpZiAoY3AtXFx1MDAzZWRhZiA9PSBBRl9JTkVUNilcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmMtMTAzOC1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jOjEwMzk6XFx0Y2FzZSBJUF9WU19DT05OX0ZfRFJPVVRFOlxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmMtMTA0MC1cXHRcXHRjcC1cXHUwMDNlcGFja2V0X3htaXQgPSBpcF92c19kcl94bWl0O1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYy0xMDQyLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmM6MTA0MzpcXHRjYXNlIElQX1ZTX0NPTk5fRl9MT0NBTE5PREU6XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYy0xMDQ0LVxcdFxcdGNwLVxcdTAwM2VwYWNrZXRfeG1pdCA9IGlwX3ZzX251bGxfeG1pdDtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmMtMTA0Ni1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jOjEwNDc6XFx0Y2FzZSBJUF9WU19DT05OX0ZfQllQQVNTOlxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmMtMTA0OC1cXHRcXHRjcC1cXHUwMDNlcGFja2V0X3htaXQgPSBpcF92c19ieXBhc3NfeG1pdDtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmMtMTA1Mi1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jOjEwNTM6I2lmZGVmIENPTkZJR19JUF9WU19JUFY2XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYy0xMDU0LXN0YXRpYyBpbmxpbmUgdm9pZCBpcF92c19iaW5kX3htaXRfdjYoc3RydWN0IGlwX3ZzX2Nvbm4gKmNwKVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmMtMTA1NS17XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYzoxMDU2OlxcdHN3aXRjaCAoSVBfVlNfRldEX01FVEhPRChjcCkpIHtcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jOjEwNTc6XFx0Y2FzZSBJUF9WU19DT05OX0ZfTUFTUTpcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jLTEwNTgtXFx0XFx0Y3AtXFx1MDAzZXBhY2tldF94bWl0ID0gaXBfdnNfbmF0X3htaXRfdjY7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jLTEwNjAtXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYzoxMDYxOlxcdGNhc2UgSVBfVlNfQ09OTl9GX1RVTk5FTDpcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jLTEwNjItXFx0XFx0aWYgKGNwLVxcdTAwM2VkYWYgPT0gQUZfSU5FVDYpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jLTEwNjctXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYzoxMDY4OlxcdGNhc2UgSVBfVlNfQ09OTl9GX0RST1VURTpcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jLTEwNjktXFx0XFx0Y3AtXFx1MDAzZXBhY2tldF94bWl0ID0gaXBfdnNfZHJfeG1pdF92NjtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmMtMTA3MS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jOjEwNzI6XFx0Y2FzZSBJUF9WU19DT05OX0ZfTE9DQUxOT0RFOlxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmMtMTA3My1cXHRcXHRjcC1cXHUwMDNlcGFja2V0X3htaXQgPSBpcF92c19udWxsX3htaXQ7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jLTEwNzUtXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYzoxMDc2OlxcdGNhc2UgSVBfVlNfQ09OTl9GX0JZUEFTUzpcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jLTEwNzctXFx0XFx0Y3AtXFx1MDAzZXBhY2tldF94bWl0ID0gaXBfdnNfYnlwYXNzX3htaXRfdjY7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jPTEwODk9aXBfdnNfYmluZF9kZXN0KHN0cnVjdCBpcF92c19jb25uICpjcCwgc3RydWN0IGlwX3ZzX2Rlc3QgKmRlc3QpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jLTExMDItXFx0aWYgKGNwLVxcdTAwM2Vwcm90b2NvbCAhPSBJUFBST1RPX1VEUClcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jOjExMDM6XFx0XFx0Y29ubl9mbGFncyBcXHUwMDI2PSB+SVBfVlNfQ09OTl9GX09ORV9QQUNLRVQ7XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYy0xMTA0LVxcdGZsYWdzID0gY3AtXFx1MDAzZWZsYWdzO1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmMtMTEwNS1cXHQvKiBCaW5kIHdpdGggdGhlIGRlc3RpbmF0aW9uIGFuZCBpdHMgY29ycmVzcG9uZGluZyB0cmFuc21pdHRlciAqL1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmM6MTEwNjpcXHRpZiAoZmxhZ3MgXFx1MDAyNiBJUF9WU19DT05OX0ZfU1lOQykge1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmMtMTEwNy1cXHRcXHQvKiBTeW5jZWQgY29ubnMgYXJlIGhhc2hlZCwgc28gdGhleSBjYW4gbm90IGdldCB0aGlzIGZsYWcgKi9cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jOjExMDg6XFx0XFx0Y29ubl9mbGFncyBcXHUwMDI2PSB+SVBfVlNfQ09OTl9GX09ORV9QQUNLRVQ7XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYy0xMTA5LVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYy0xMTEyLVxcdFxcdCAqL1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmM6MTExMzpcXHRcXHRpZiAoIShmbGFncyBcXHUwMDI2IElQX1ZTX0NPTk5fRl9URU1QTEFURSkpXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYzoxMTE0OlxcdFxcdFxcdGNvbm5fZmxhZ3MgXFx1MDAyNj0gfklQX1ZTX0NPTk5fRl9JTkFDVElWRTtcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jLTExMTUtXFx0XFx0LyogY29ubmVjdGlvbnMgaW5oZXJpdCBmb3J3YXJkaW5nIG1ldGhvZCBmcm9tIGRlc3QgKi9cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jOjExMTY6XFx0XFx0ZmxhZ3MgXFx1MDAyNj0gfihJUF9WU19DT05OX0ZfRldEX01BU0sgfCBJUF9WU19DT05OX0ZfTk9PVVRQVVQpO1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmMtMTExNy1cXHRcXHRmbGFncyB8PSBjb25uX2ZsYWdzO1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYy0xMTIwLVxcdFxcdCAqL1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmM6MTEyMTpcXHRcXHRpZiAoY3AtXFx1MDAzZWZsYWdzIFxcdTAwMjYgSVBfVlNfQ09OTl9GX0hBU0hFRClcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jLTExMjItXFx0XFx0XFx0aXBfdnNfY29ubl9jaGFuZ2VfZndkX21hc2soY3AsIGZsYWdzKTtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmMtMTEzMC1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jOjExMzE6XFx0SVBfVlNfREJHX0JVRig3LCBcXFwiQmluZC1kZXN0ICVzIGM6JXM6JWQgdjolczolZCBcXFwiXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYy0xMTMyLVxcdFxcdCAgICAgIFxcXCJkOiVzOiVkIGZ3ZDolYyBzOiV1IGNvbm4tXFx1MDAzZWZsYWdzOiVYIGNvbm4tXFx1MDAzZXJlZmNudDolZCBcXFwiXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jLTExMzQtXFx0XFx0ICAgICAgaXBfdnNfcHJvdG9fbmFtZShjcC1cXHUwMDNlcHJvdG9jb2wpLFxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmM6MTEzNTpcXHRcXHQgICAgICBJUF9WU19EQkdfQUREUihjcC1cXHUwMDNlYWYsIFxcdTAwMjZjcC1cXHUwMDNlY2FkZHIpLCBudG9ocyhjcC1cXHUwMDNlY3BvcnQpLFxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmM6MTEzNjpcXHRcXHQgICAgICBJUF9WU19EQkdfQUREUihjcC1cXHUwMDNlYWYsIFxcdTAwMjZjcC1cXHUwMDNldmFkZHIpLCBudG9ocyhjcC1cXHUwMDNldnBvcnQpLFxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmM6MTEzNzpcXHRcXHQgICAgICBJUF9WU19EQkdfQUREUihjcC1cXHUwMDNlZGFmLCBcXHUwMDI2Y3AtXFx1MDAzZWRhZGRyKSwgbnRvaHMoY3AtXFx1MDAzZWRwb3J0KSxcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jLTExMzgtXFx0XFx0ICAgICAgaXBfdnNfZndkX3RhZyhjcCksIGNwLVxcdTAwM2VzdGF0ZSxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmMtMTE0Mi1cXHQvKiBVcGRhdGUgdGhlIGNvbm5lY3Rpb24gY291bnRlcnMgKi9cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jOjExNDM6XFx0aWYgKCEoZmxhZ3MgXFx1MDAyNiBJUF9WU19DT05OX0ZfVEVNUExBVEUpKSB7XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYy0xMTQ0LVxcdFxcdGludCB0YztcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmMtMTE0OS1cXHRcXHQgKi9cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jOjExNTA6XFx0XFx0aWYgKCEoZmxhZ3MgXFx1MDAyNiBJUF9WU19DT05OX0ZfSU5BQ1RJVkUpKVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmMtMTE1MS1cXHRcXHRcXHRhdG9taWNfaW5jKFxcdTAwMjZkZXN0LVxcdTAwM2VhY3RpdmVjb25ucyk7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jPTExNjc9dm9pZCBpcF92c190cnlfYmluZF9kZXN0KHN0cnVjdCBpcF92c19jb25uICpjcClcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmMtMTIwMC1cXHRcXHRjcC1cXHUwMDNlcGFja2V0X3htaXQgPSBOVUxMO1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmM6MTIwMTojaWZkZWYgQ09ORklHX0lQX1ZTX0lQVjZcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jLTEyMDItXFx0XFx0aWYgKGNwLVxcdTAwM2VhZiA9PSBBRl9JTkVUNilcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmM9MTIyMD1zdGF0aWMgaW5saW5lIHZvaWQgaXBfdnNfdW5iaW5kX2Rlc3Qoc3RydWN0IGlwX3ZzX2Nvbm4gKmNwKVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYy0xMjI2LVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmM6MTIyNzpcXHRJUF9WU19EQkdfQlVGKDcsIFxcXCJVbmJpbmQtZGVzdCAlcyBjOiVzOiVkIHY6JXM6JWQgXFxcIlxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmMtMTIyOC1cXHRcXHQgICAgICBcXFwiZDolczolZCBmd2Q6JWMgczoldSBjb25uLVxcdTAwM2VmbGFnczolWCBjb25uLVxcdTAwM2VyZWZjbnQ6JWQgXFxcIlxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYy0xMjMwLVxcdFxcdCAgICAgIGlwX3ZzX3Byb3RvX25hbWUoY3AtXFx1MDAzZXByb3RvY29sKSxcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jOjEyMzE6XFx0XFx0ICAgICAgSVBfVlNfREJHX0FERFIoY3AtXFx1MDAzZWFmLCBcXHUwMDI2Y3AtXFx1MDAzZWNhZGRyKSwgbnRvaHMoY3AtXFx1MDAzZWNwb3J0KSxcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jOjEyMzI6XFx0XFx0ICAgICAgSVBfVlNfREJHX0FERFIoY3AtXFx1MDAzZWFmLCBcXHUwMDI2Y3AtXFx1MDAzZXZhZGRyKSwgbnRvaHMoY3AtXFx1MDAzZXZwb3J0KSxcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jOjEyMzM6XFx0XFx0ICAgICAgSVBfVlNfREJHX0FERFIoY3AtXFx1MDAzZWRhZiwgXFx1MDAyNmNwLVxcdTAwM2VkYWRkciksIG50b2hzKGNwLVxcdTAwM2VkcG9ydCksXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYy0xMjM0LVxcdFxcdCAgICAgIGlwX3ZzX2Z3ZF90YWcoY3ApLCBjcC1cXHUwMDNlc3RhdGUsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jLTEyMzgtXFx0LyogVXBkYXRlIHRoZSBjb25uZWN0aW9uIGNvdW50ZXJzICovXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYzoxMjM5OlxcdGlmICghKGNwLVxcdTAwM2VmbGFncyBcXHUwMDI2IElQX1ZTX0NPTk5fRl9URU1QTEFURSkpIHtcXG5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTc6NDM6MTIuNzk1MjU1MjNaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNDgzNTMzNjA2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjpcblxuKipEaXZpbmcgaW50byB0aGUgSVBWUyBTeW5jIENvZGUqKlxuXG5Pa2F5LCBzbyB3ZSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiBob3cgdGhlc2UgY29ubmVjdGlvbiBzeW5jaHJvbml6YXRpb24gbWVjaGFuaXNtcyBpbiBJUFZTIGFyZSBldm9sdmluZy4gTXkgZ3V0IGZlZWxpbmcgaXMgdG8gc3RhcnQgYnkgZXhhbWluaW5nIHRoZSBjaGFuZ2VzIGFyb3VuZCB0aGUgYG5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmNgIGZpbGUuIFRoYXQncyB0aGUgbGlrZWx5IHNwb3QgZm9yIHRoZSBjb3JlIHN5bmNocm9uaXphdGlvbiBsb2dpYy4gSSB3YW50IHRvIHNlZSBob3cgdGhleSdyZSBkZWZpbmluZyBhbmQgdXNpbmcgYGlwX3ZzX3N5bmNfY29ubmAgYW5kIGBpcF92c19zeW5jX2Nvbm5fdjBgLCBzcGVjaWZpY2FsbHkuIFRoZSBkZWZpbml0aW9ucyBzaG91bGQgaWxsdW1pbmF0ZSB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGludm9sdmVkLCBhbmQgdGhlIGNhbGwgc2l0ZXMgd2lsbCByZXZlYWwgdGhlIHN5bmNocm9uaXphdGlvbiB3b3JrZmxvdy4gQnkgdHJhY2luZyB0aGUgY2FsbHMgdG8gdGhlc2UgZnVuY3Rpb25zLCBJIGNhbiB1bmRlcnN0YW5kIHdoZXJlIGFuZCBob3cgdGhlIGNvbm5lY3Rpb24gc3RhdGUgaXMgYmVpbmcgc2hhcmVkIChvciBub3QpIGJldHdlZW4gbm9kZXMuIFRoaXMgc2hvdWxkIGdpdmUgbWUgYSBzb2xpZCBiYXNlIGZvciB1bmRlcnN0YW5kaW5nIGFueSBtb2RpZmljYXRpb25zIG9yIHBvdGVudGlhbCBpc3N1ZXMgaW4gdGhlIGNvbm5lY3Rpb24gdHJhY2tpbmcgc3luY2hyb25pemF0aW9uIHdpdGhpbiB0aGUgY29udGV4dCBvZiBJUFZTLiBJIGV4cGVjdCB0byBmaW5kIGNsdWVzIGFib3V0IHZlcnNpb25pbmcgYW5kIGNvbXBhdGliaWxpdHkgdGhlcmUgYXMgd2VsbC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTc0MDcsIk91dHB1dFRva2VucyI6NDMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxNzo0MzoxNS4yNzg3OTMxNzZaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODM1OTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA1NDAsXG4gIFwiTGluZUNvdW50XCI6IDgwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA1NDA6XFx0XFx0XFx0XFx0ICAgICAgIGludCBwa3RzKVxcbiA1NDE6XFx0e1xcbiA1NDI6XFx0XFx0c3RydWN0IGlwX3ZzX3N5bmNfbWVzZ192MCAqbTtcXG4gNTQzOlxcdFxcdHN0cnVjdCBpcF92c19zeW5jX2Nvbm5fdjAgKnM7XFxuIDU0NDpcXHRcXHRzdHJ1Y3QgaXBfdnNfc3luY19idWZmICpidWZmO1xcbiA1NDU6XFx0XFx0c3RydWN0IGlwdnNfbWFzdGVyX3N5bmNfc3RhdGUgKm1zO1xcbiA1NDY6XFx0XFx0dTMyIGZsYWdzLCBzZXFfbWFzaztcXG4gNTQ3OlxcdFxcdHVuc2lnbmVkIGludCBsZW47XFxuIDU0ODpcXHRcXHRpbnQgaWQ7XFxuIDU0OTpcXHRcXG4gNTUwOlxcdFxcdGlmICh1bmxpa2VseShjcC1cXHUwMDNlYWYgIT0gQUZfSU5FVCkpXFxuIDU1MTpcXHRcXHRcXHRyZXR1cm47XFxuIDU1MjpcXHRcXHRmbGFncyA9IFJFQURfT05DRShjcC1cXHUwMDNlZmxhZ3MpO1xcbiA1NTM6XFx0XFx0LyogRG8gbm90IHN5bmMgT05FIFBBQ0tFVCAqL1xcbiA1NTQ6XFx0XFx0aWYgKGZsYWdzIFxcdTAwMjYgSVBfVlNfQ09OTl9GX09ORV9QQUNLRVQpXFxuIDU1NTpcXHRcXHRcXHRyZXR1cm47XFxuIDU1NjpcXHRcXG4gNTU3OlxcdFxcdGlmICghaXBfdnNfc3luY19jb25uX25lZWRlZChpcHZzLCBjcCwgcGt0cykpXFxuIDU1ODpcXHRcXHRcXHRyZXR1cm47XFxuIDU1OTpcXHRcXG4gNTYwOlxcdFxcdHNwaW5fbG9ja19iaChcXHUwMDI2aXB2cy1cXHUwMDNlc3luY19idWZmX2xvY2spO1xcbiA1NjE6XFx0XFx0aWYgKCEoaXB2cy1cXHUwMDNlc3luY19zdGF0ZSBcXHUwMDI2IElQX1ZTX1NUQVRFX01BU1RFUikpIHtcXG4gNTYyOlxcdFxcdFxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZpcHZzLVxcdTAwM2VzeW5jX2J1ZmZfbG9jayk7XFxuIDU2MzpcXHRcXHRcXHRyZXR1cm47XFxuIDU2NDpcXHRcXHR9XFxuIDU2NTpcXHRcXG4gNTY2OlxcdFxcdGlkID0gc2VsZWN0X21hc3Rlcl90aHJlYWRfaWQoaXB2cywgY3ApO1xcbiA1Njc6XFx0XFx0bXMgPSBcXHUwMDI2aXB2cy1cXHUwMDNlbXNbaWRdO1xcbiA1Njg6XFx0XFx0YnVmZiA9IG1zLVxcdTAwM2VzeW5jX2J1ZmY7XFxuIDU2OTpcXHRcXHRzZXFfbWFzayA9IGZsYWdzIFxcdTAwMjYgSVBfVlNfQ09OTl9GX1NFUV9NQVNLO1xcbiA1NzA6XFx0XFx0bGVuID0gc2VxX21hc2sgPyBGVUxMX0NPTk5fU0laRSA6IFNJTVBMRV9DT05OX1NJWkU7XFxuIDU3MTpcXHRcXHRpZiAoYnVmZikge1xcbiA1NzI6XFx0XFx0XFx0bSA9IChzdHJ1Y3QgaXBfdnNfc3luY19tZXNnX3YwICopIGJ1ZmYtXFx1MDAzZW1lc2c7XFxuIDU3MzpcXHRcXHRcXHQvKiBTZW5kIGJ1ZmZlciBpZiBpdCBpcyBmb3IgdjEgKi9cXG4gNTc0OlxcdFxcdFxcdGlmIChidWZmLVxcdTAwM2VoZWFkICsgbGVuIFxcdTAwM2UgYnVmZi1cXHUwMDNlZW5kIHx8ICFtLVxcdTAwM2Vucl9jb25ucykge1xcbiA1NzU6XFx0XFx0XFx0XFx0c2JfcXVldWVfdGFpbChpcHZzLCBtcyk7XFxuIDU3NjpcXHRcXHRcXHRcXHRtcy1cXHUwMDNlc3luY19idWZmID0gTlVMTDtcXG4gNTc3OlxcdFxcdFxcdFxcdGJ1ZmYgPSBOVUxMO1xcbiA1Nzg6XFx0XFx0XFx0fVxcbiA1Nzk6XFx0XFx0fVxcbiA1ODA6XFx0XFx0aWYgKCFidWZmKSB7XFxuIDU4MTpcXHRcXHRcXHRidWZmID0gaXBfdnNfc3luY19idWZmX2NyZWF0ZV92MChpcHZzLCBsZW4pO1xcbiA1ODI6XFx0XFx0XFx0aWYgKCFidWZmKSB7XFxuIDU4MzpcXHRcXHRcXHRcXHRzcGluX3VubG9ja19iaChcXHUwMDI2aXB2cy1cXHUwMDNlc3luY19idWZmX2xvY2spO1xcbiA1ODQ6XFx0XFx0XFx0XFx0cHJfZXJyKFxcXCJpcF92c19zeW5jX2J1ZmZfY3JlYXRlIGZhaWxlZC5cXFxcblxcXCIpO1xcbiA1ODU6XFx0XFx0XFx0XFx0cmV0dXJuO1xcbiA1ODY6XFx0XFx0XFx0fVxcbiA1ODc6XFx0XFx0XFx0bXMtXFx1MDAzZXN5bmNfYnVmZiA9IGJ1ZmY7XFxuIDU4ODpcXHRcXHR9XFxuIDU4OTpcXHRcXG4gNTkwOlxcdFxcdG0gPSAoc3RydWN0IGlwX3ZzX3N5bmNfbWVzZ192MCAqKSBidWZmLVxcdTAwM2VtZXNnO1xcbiA1OTE6XFx0XFx0cyA9IChzdHJ1Y3QgaXBfdnNfc3luY19jb25uX3YwICopIGJ1ZmYtXFx1MDAzZWhlYWQ7XFxuIDU5MjpcXHRcXG4gNTkzOlxcdFxcdC8qIGNvcHkgbWVtYmVycyAqL1xcbiA1OTQ6XFx0XFx0cy1cXHUwMDNlcmVzZXJ2ZWQgPSAwO1xcbiA1OTU6XFx0XFx0cy1cXHUwMDNlcHJvdG9jb2wgPSBjcC1cXHUwMDNlcHJvdG9jb2w7XFxuIDU5NjpcXHRcXHRzLVxcdTAwM2VjcG9ydCA9IGNwLVxcdTAwM2VjcG9ydDtcXG4gNTk3OlxcdFxcdHMtXFx1MDAzZXZwb3J0ID0gY3AtXFx1MDAzZXZwb3J0O1xcbiA1OTg6XFx0XFx0cy1cXHUwMDNlZHBvcnQgPSBjcC1cXHUwMDNlZHBvcnQ7XFxuIDU5OTpcXHRcXHRzLVxcdTAwM2VjYWRkciA9IGNwLVxcdTAwM2VjYWRkci5pcDtcXG4gNjAwOlxcdFxcdHMtXFx1MDAzZXZhZGRyID0gY3AtXFx1MDAzZXZhZGRyLmlwO1xcbiA2MDE6XFx0XFx0cy1cXHUwMDNlZGFkZHIgPSBjcC1cXHUwMDNlZGFkZHIuaXA7XFxuIDYwMjpcXHRcXHRzLVxcdTAwM2VmbGFncyA9IGh0b25zKGZsYWdzIFxcdTAwMjYgfklQX1ZTX0NPTk5fRl9IQVNIRUQpO1xcbiA2MDM6XFx0XFx0cy1cXHUwMDNlc3RhdGUgPSBodG9ucyhjcC1cXHUwMDNlc3RhdGUpO1xcbiA2MDQ6XFx0XFx0aWYgKHNlcV9tYXNrKSB7XFxuIDYwNTpcXHRcXHRcXHRzdHJ1Y3QgaXBfdnNfc3luY19jb25uX29wdGlvbnMgKm9wdCA9XFxuIDYwNjpcXHRcXHRcXHRcXHQoc3RydWN0IGlwX3ZzX3N5bmNfY29ubl9vcHRpb25zICopXFx1MDAyNnNbMV07XFxuIDYwNzpcXHRcXHRcXHRtZW1jcHkob3B0LCBcXHUwMDI2Y3AtXFx1MDAzZXN5bmNfY29ubl9vcHQsIHNpemVvZigqb3B0KSk7XFxuIDYwODpcXHRcXHR9XFxuIDYwOTpcXHRcXG4gNjEwOlxcdFxcdG0tXFx1MDAzZW5yX2Nvbm5zKys7XFxuIDYxMTpcXHRcXHRtLVxcdTAwM2VzaXplID0gaHRvbnMobnRvaHMobS1cXHUwMDNlc2l6ZSkgKyBsZW4pO1xcbiA2MTI6XFx0XFx0YnVmZi1cXHUwMDNlaGVhZCArPSBsZW47XFxuIDYxMzpcXHRcXHRzcGluX3VubG9ja19iaChcXHUwMDI2aXB2cy1cXHUwMDNlc3luY19idWZmX2xvY2spO1xcbiA2MTQ6XFx0XFxuIDYxNTpcXHRcXHQvKiBzeW5jaHJvbml6ZSBpdHMgY29udHJvbGxlciBpZiBpdCBoYXMgKi9cXG4gNjE2OlxcdFxcdGNwID0gY3AtXFx1MDAzZWNvbnRyb2w7XFxuIDYxNzpcXHRcXHRpZiAoY3ApIHtcXG4gNjE4OlxcdFxcdFxcdGlmIChjcC1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBJUF9WU19DT05OX0ZfVEVNUExBVEUpXFxuIDYxOTpcXHRcXHRcXHRcXHRwa3RzID0gYXRvbWljX2luY19yZXR1cm4oXFx1MDAyNmNwLVxcdTAwM2Vpbl9wa3RzKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTc6NDM6MTUuMjc4OTgwMTU2WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzgwNjI3NjUxNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byBgaXBfdnNfc3luYy5jYCAtIExpbmVzIDYyMC03NjAqKlxuXG5Pa2F5LCBzbyB3ZSdyZSBmb2N1c2luZyBvbiBhIHNwZWNpZmljIGNodW5rIG9mIGBpcF92c19zeW5jLmNgLCBsaW5lcyA2MjAgdG8gNzYwLiBJIGltbWVkaWF0ZWx5IHRoaW5rOiBcIldoYXQncyB0aGUgY29udGV4dCBoZXJlPyBXaGF0IHBhcnQgb2YgdGhlIHN5bmNocm9uaXphdGlvbiBsb2dpYyBhcmUgd2UgbG9va2luZyBhdD9cIiBLbm93aW5nIHRoaXMgY29kZSwgSSdtIGFscmVhZHkgYW50aWNpcGF0aW5nIHdlJ2xsIGJlIGRlYWxpbmcgd2l0aCBlaXRoZXIgY29ubmVjdGlvbiB0cmFja2luZyB1cGRhdGVzLCBwZXJoYXBzIGEgY3JpdGljYWwgc2VjdGlvbiwgb3IgcG90ZW50aWFsbHkgc29tZSBraW5kIG9mIGhlYWx0aCBjaGVjayBtZWNoYW5pc20gc3luYy4gVGhpcyBhcmVhIGlzIGxpa2VseSBpbnZvbHZlZCBpbiBob3cgdmlydHVhbCBzZXJ2ZXJzIGFuZCByZWFsIHNlcnZlcnMgc2hhcmUgdGhlaXIgY3VycmVudCBjb25uZWN0aW9uIHN0YXRlcyB3aXRoIGVhY2ggb3RoZXIuXG5cbkknbSBtZW50YWxseSBwcmVwYXJpbmcgZm9yIGEgZGVlcCBkaXZlLiBJJ2xsIGJlIGxvb2tpbmcgZm9yIGFueSBpbmRpY2F0aW9ucyBvZiBsb2NraW5nIG1lY2hhbmlzbXMg4oCTIG11dGV4ZXMgb3Igc3BpbmxvY2tzIOKAkyBhcm91bmQgc2hhcmVkIGRhdGEgc3RydWN0dXJlcy4gQXJlIHRoZXkgdXNpbmcgcmVhZC1jb3B5LXVwZGF0ZSAoUkNVKSBoZXJlIGZvciBhbnkgb2YgdGhlIHNoYXJlZCBzdHJ1Y3R1cmVzPyBBbnkgdXNlIG9mIGF0b21pYyBvcGVyYXRpb25zIG9yIG1lbW9yeSBiYXJyaWVycyB3aWxsIGJlIG9mIGdyZWF0IGludGVyZXN0IGZvciBtZS4gSSdtIGFsc28gcmVhZHkgdG8gYW5hbHl6ZSB0aGUgZXJyb3IgaGFuZGxpbmcgYW5kIHJlY292ZXJ5IHN0cmF0ZWdpZXMgd2l0aGluIHRoaXMgc2VjdGlvbjogYXJlIHRoZXkganVzdCBsb2dnaW5nIGZhaWx1cmVzLCBvciBhdHRlbXB0aW5nIHRvIHJldHJ5IHN5bmNocm9uaXphdGlvbj9cblxuSSdtIGtlZXBpbmcgYW4gZXllIG91dCBmb3IgYW55IHNwZWNpZmljIGRhdGEgc3RydWN0dXJlcyByZWZlcmVuY2VkLiBBcmUgdGhleSB1cGRhdGluZyB0aGUgYGlwX3ZzX2Nvbm5gIHN0cnVjdHVyZSwgdGhlIGBpcF92c19kZXN0YCBzdHJ1Y3R1cmUsIG9yIHNvbWUgY3VzdG9tIHN5bmNocm9uaXphdGlvbiBtZXRhZGF0YT8gSG93IGFyZSB0aGV5IGhhbmRsaW5nIHRoZSBkaWZmZXJlbnQgc3RhdGVzIGEgY29ubmVjdGlvbiBjYW4gYmUgaW4gKEVTVEFCTElTSEVELCBGSU5fV0FJVCwgZXRjLikgYW5kIHdoYXQgaW1wbGljYXRpb25zIGRvIHRob3NlIHN0YXRlcyBoYXZlPyBHaXZlbiB0aGUgcmFuZ2UsIEknbSBleHBlY3Rpbmcgc29tZSBwcmV0dHkgbG93LWxldmVsIHNvY2tldCBvcGVyYXRpb25zIG9yIG1lbW9yeSBtYW5pcHVsYXRpb25zLCBzbyBJJ20gYWxzbyBwcmVwYXJpbmcgZm9yIHRoZSB0eXBpY2FsIGlzc3VlcyBhc3NvY2lhdGVkIHdpdGggc2hhcmVkIG1lbW9yeSBpbiBhIGhpZ2gtY29uY3VycmVuY3kgc2NlbmFyaW8uIEkgd29uZGVyIGlmIHRoZXkgd2lsbCBiZSBoYW5kbGluZyBmcmFnbWVudGF0aW9uIGlzc3VlcyBvciBVRFAgcGFja2V0cyBhcyB3ZWxsLlxuXG5MZXQncyBzZWUgd2hhdCdzIGFjdHVhbGx5IGluIHRoZXJlIVxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTAyMCwiT3V0cHV0VG9rZW5zIjo0NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTc6NDM6MTkuMDg1MjYxMjgzWiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjEyMTEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNjIwLFxuICBcIkxpbmVDb3VudFwiOiAxMDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDYyMDpcXHRcXHRcXHRlbHNlXFxuIDYyMTpcXHRcXHRcXHRcXHRwa3RzID0gc3lzY3RsX3N5bmNfdGhyZXNob2xkKGlwdnMpO1xcbiA2MjI6XFx0XFx0XFx0aXBfdnNfc3luY19jb25uKGlwdnMsIGNwLCBwa3RzKTtcXG4gNjIzOlxcdFxcdH1cXG4gNjI0OlxcdH1cXG4gNjI1OlxcdFxcbiA2MjY6XFx0LypcXG4gNjI3OlxcdCAqICAgICAgQWRkIGFuIGlwX3ZzX2Nvbm4gaW5mb3JtYXRpb24gaW50byB0aGUgY3VycmVudCBzeW5jX2J1ZmYuXFxuIDYyODpcXHQgKiAgICAgIENhbGxlZCBieSBpcF92c19pbi5cXG4gNjI5OlxcdCAqICAgICAgU2VuZGluZyBWZXJzaW9uIDEgbWVzc2FnZXNcXG4gNjMwOlxcdCAqL1xcbiA2MzE6XFx0dm9pZCBpcF92c19zeW5jX2Nvbm4oc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIHN0cnVjdCBpcF92c19jb25uICpjcCwgaW50IHBrdHMpXFxuIDYzMjpcXHR7XFxuIDYzMzpcXHRcXHRzdHJ1Y3QgaXBfdnNfc3luY19tZXNnICptO1xcbiA2MzQ6XFx0XFx0dW5pb24gaXBfdnNfc3luY19jb25uICpzO1xcbiA2MzU6XFx0XFx0c3RydWN0IGlwX3ZzX3N5bmNfYnVmZiAqYnVmZjtcXG4gNjM2OlxcdFxcdHN0cnVjdCBpcHZzX21hc3Rlcl9zeW5jX3N0YXRlICptcztcXG4gNjM3OlxcdFxcdGludCBpZDtcXG4gNjM4OlxcdFxcdF9fdTggKnA7XFxuIDYzOTpcXHRcXHR1bnNpZ25lZCBpbnQgbGVuLCBwZV9uYW1lX2xlbiwgcGFkO1xcbiA2NDA6XFx0XFx0dTMyIGZsYWdzLCBzZXFfbWFzaztcXG4gNjQxOlxcdFxcbiA2NDI6XFx0XFx0LyogSGFuZGxlIG9sZCB2ZXJzaW9uIG9mIHRoZSBwcm90b2NvbCAqL1xcbiA2NDM6XFx0XFx0aWYgKHN5c2N0bF9zeW5jX3ZlcihpcHZzKSA9PSAwKSB7XFxuIDY0NDpcXHRcXHRcXHRpcF92c19zeW5jX2Nvbm5fdjAoaXB2cywgY3AsIHBrdHMpO1xcbiA2NDU6XFx0XFx0XFx0cmV0dXJuO1xcbiA2NDY6XFx0XFx0fVxcbiA2NDc6XFx0XFx0LyogRG8gbm90IHN5bmMgT05FIFBBQ0tFVCAqL1xcbiA2NDg6XFx0XFx0aWYgKGNwLVxcdTAwM2VmbGFncyBcXHUwMDI2IElQX1ZTX0NPTk5fRl9PTkVfUEFDS0VUKVxcbiA2NDk6XFx0XFx0XFx0Z290byBjb250cm9sO1xcbiA2NTA6XFx0c2xvb3A6XFxuIDY1MTpcXHRcXHRpZiAoIWlwX3ZzX3N5bmNfY29ubl9uZWVkZWQoaXB2cywgY3AsIHBrdHMpKVxcbiA2NTI6XFx0XFx0XFx0Z290byBjb250cm9sO1xcbiA2NTM6XFx0XFx0ZmxhZ3MgPSBSRUFEX09OQ0UoY3AtXFx1MDAzZWZsYWdzKTtcXG4gNjU0OlxcdFxcbiA2NTU6XFx0XFx0LyogU2FuaXR5IGNoZWNrcyAqL1xcbiA2NTY6XFx0XFx0cGVfbmFtZV9sZW4gPSAwO1xcbiA2NTc6XFx0XFx0aWYgKGNwLVxcdTAwM2VwZV9kYXRhX2xlbikge1xcbiA2NTg6XFx0XFx0XFx0aWYgKCFjcC1cXHUwMDNlcGVfZGF0YSB8fCAhY3AtXFx1MDAzZWRlc3QpIHtcXG4gNjU5OlxcdFxcdFxcdFxcdElQX1ZTX0VSUl9STChcXFwiU1lOQywgY29ubmVjdGlvbiBwZV9kYXRhIGludmFsaWRcXFxcblxcXCIpO1xcbiA2NjA6XFx0XFx0XFx0XFx0cmV0dXJuO1xcbiA2NjE6XFx0XFx0XFx0fVxcbiA2NjI6XFx0XFx0XFx0cGVfbmFtZV9sZW4gPSBzdHJubGVuKGNwLVxcdTAwM2VwZS1cXHUwMDNlbmFtZSwgSVBfVlNfUEVOQU1FX01BWExFTik7XFxuIDY2MzpcXHRcXHR9XFxuIDY2NDpcXHRcXG4gNjY1OlxcdFxcdHNwaW5fbG9ja19iaChcXHUwMDI2aXB2cy1cXHUwMDNlc3luY19idWZmX2xvY2spO1xcbiA2NjY6XFx0XFx0aWYgKCEoaXB2cy1cXHUwMDNlc3luY19zdGF0ZSBcXHUwMDI2IElQX1ZTX1NUQVRFX01BU1RFUikpIHtcXG4gNjY3OlxcdFxcdFxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZpcHZzLVxcdTAwM2VzeW5jX2J1ZmZfbG9jayk7XFxuIDY2ODpcXHRcXHRcXHRyZXR1cm47XFxuIDY2OTpcXHRcXHR9XFxuIDY3MDpcXHRcXG4gNjcxOlxcdFxcdGlkID0gc2VsZWN0X21hc3Rlcl90aHJlYWRfaWQoaXB2cywgY3ApO1xcbiA2NzI6XFx0XFx0bXMgPSBcXHUwMDI2aXB2cy1cXHUwMDNlbXNbaWRdO1xcbiA2NzM6XFx0XFxuIDY3NDpcXHQjaWZkZWYgQ09ORklHX0lQX1ZTX0lQVjZcXG4gNjc1OlxcdFxcdGlmIChjcC1cXHUwMDNlYWYgPT0gQUZfSU5FVDYpXFxuIDY3NjpcXHRcXHRcXHRsZW4gPSBzaXplb2Yoc3RydWN0IGlwX3ZzX3N5bmNfdjYpO1xcbiA2Nzc6XFx0XFx0ZWxzZVxcbiA2Nzg6XFx0I2VuZGlmXFxuIDY3OTpcXHRcXHRcXHRsZW4gPSBzaXplb2Yoc3RydWN0IGlwX3ZzX3N5bmNfdjQpO1xcbiA2ODA6XFx0XFxuIDY4MTpcXHRcXHRzZXFfbWFzayA9IGZsYWdzIFxcdTAwMjYgSVBfVlNfQ09OTl9GX1NFUV9NQVNLO1xcbiA2ODI6XFx0XFx0aWYgKHNlcV9tYXNrKVxcbiA2ODM6XFx0XFx0XFx0bGVuICs9IHNpemVvZihzdHJ1Y3QgaXBfdnNfc3luY19jb25uX29wdGlvbnMpICsgMjtcXG4gNjg0OlxcdFxcbiA2ODU6XFx0XFx0aWYgKGNwLVxcdTAwM2VwZV9kYXRhX2xlbilcXG4gNjg2OlxcdFxcdFxcdGxlbiArPSBjcC1cXHUwMDNlcGVfZGF0YV9sZW4gKyAyO1xcdC8qICsgUGFyYW0gaGRyIGZpZWxkICovXFxuIDY4NzpcXHRcXHRpZiAocGVfbmFtZV9sZW4pXFxuIDY4ODpcXHRcXHRcXHRsZW4gKz0gcGVfbmFtZV9sZW4gKyAyO1xcbiA2ODk6XFx0XFxuIDY5MDpcXHRcXHQvKiBjaGVjayBpZiB0aGVyZSBpcyBhIHNwYWNlIGZvciB0aGlzIG9uZSAgKi9cXG4gNjkxOlxcdFxcdHBhZCA9IDA7XFxuIDY5MjpcXHRcXHRidWZmID0gbXMtXFx1MDAzZXN5bmNfYnVmZjtcXG4gNjkzOlxcdFxcdGlmIChidWZmKSB7XFxuIDY5NDpcXHRcXHRcXHRtID0gYnVmZi1cXHUwMDNlbWVzZztcXG4gNjk1OlxcdFxcdFxcdHBhZCA9ICg0IC0gKHNpemVfdCkgYnVmZi1cXHUwMDNlaGVhZCkgXFx1MDAyNiAzO1xcbiA2OTY6XFx0XFx0XFx0LyogU2VuZCBidWZmZXIgaWYgaXQgaXMgZm9yIHYwICovXFxuIDY5NzpcXHRcXHRcXHRpZiAoYnVmZi1cXHUwMDNlaGVhZCArIGxlbiArIHBhZCBcXHUwMDNlIGJ1ZmYtXFx1MDAzZWVuZCB8fCBtLVxcdTAwM2VyZXNlcnZlZCkge1xcbiA2OTg6XFx0XFx0XFx0XFx0c2JfcXVldWVfdGFpbChpcHZzLCBtcyk7XFxuIDY5OTpcXHRcXHRcXHRcXHRtcy1cXHUwMDNlc3luY19idWZmID0gTlVMTDtcXG4gNzAwOlxcdFxcdFxcdFxcdGJ1ZmYgPSBOVUxMO1xcbiA3MDE6XFx0XFx0XFx0XFx0cGFkID0gMDtcXG4gNzAyOlxcdFxcdFxcdH1cXG4gNzAzOlxcdFxcdH1cXG4gNzA0OlxcdFxcbiA3MDU6XFx0XFx0aWYgKCFidWZmKSB7XFxuIDcwNjpcXHRcXHRcXHRidWZmID0gaXBfdnNfc3luY19idWZmX2NyZWF0ZShpcHZzLCBsZW4pO1xcbiA3MDc6XFx0XFx0XFx0aWYgKCFidWZmKSB7XFxuIDcwODpcXHRcXHRcXHRcXHRzcGluX3VubG9ja19iaChcXHUwMDI2aXB2cy1cXHUwMDNlc3luY19idWZmX2xvY2spO1xcbiA3MDk6XFx0XFx0XFx0XFx0cHJfZXJyKFxcXCJpcF92c19zeW5jX2J1ZmZfY3JlYXRlIGZhaWxlZC5cXFxcblxcXCIpO1xcbiA3MTA6XFx0XFx0XFx0XFx0cmV0dXJuO1xcbiA3MTE6XFx0XFx0XFx0fVxcbiA3MTI6XFx0XFx0XFx0bXMtXFx1MDAzZXN5bmNfYnVmZiA9IGJ1ZmY7XFxuIDcxMzpcXHRcXHRcXHRtID0gYnVmZi1cXHUwMDNlbWVzZztcXG4gNzE0OlxcdFxcdH1cXG4gNzE1OlxcdFxcbiA3MTY6XFx0XFx0cCA9IGJ1ZmYtXFx1MDAzZWhlYWQ7XFxuIDcxNzpcXHRcXHRidWZmLVxcdTAwM2VoZWFkICs9IHBhZCArIGxlbjtcXG4gNzE4OlxcdFxcdG0tXFx1MDAzZXNpemUgPSBodG9ucyhudG9ocyhtLVxcdTAwM2VzaXplKSArIHBhZCArIGxlbik7XFxuIDcxOTpcXHRcXHQvKiBBZGQgZXYuIHBhZGRpbmcgZnJvbSBwcmV2LiBzeW5jX2Nvbm4gKi9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTc6NDM6MTkuMDg1NDc1OTEzWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTk0MjkyMjgxNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIERlZXBlciBpbnRvIGBpcF92c19zeW5jX2Nvbm5gKipcblxuQWxyaWdodCwgSSdtIHRoaW5raW5nIGFib3V0IGBpcF92c19zeW5jX2Nvbm5gLiBJdCdzIGEga2V5IHBpZWNlIG9mIHRoZSBJUFZTIHN5bmNocm9uaXphdGlvbiBwdXp6bGUsIGFuZCBJIG5lZWQgdG8gcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nIG9mIGl0cyByb2xlLiBUaGUgbmFtZSBpdHNlbGYgc3VnZ2VzdHMgYSBjb25uZWN0aW9uLXJlbGF0ZWQgZnVuY3Rpb24sIGxpa2VseSB0aWVkIHRvIG1haW50YWluaW5nIHN0YXRlIGNvbnNpc3RlbmN5IGFjcm9zcyB0aGUgY2x1c3Rlci4gSSBuZWVkIHRvIHF1aWNrbHkgZ2V0IGEgZnVsbCBwaWN0dXJlIG9mIHRoZSBiZWhhdmlvci4gSSBuZWVkIHRvIHF1aWNrbHkgc2VlIHRoZSByZXN0IG9mIHRoZSBjb2RlIGludm9sdmVkIHdpdGggYGlwX3ZzX3N5bmNfY29ubmAgdG8ga25vdyBleGFjdGx5IHdoYXQgaXQgZG9lcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjEwMzIsIk91dHB1dFRva2VucyI6NDMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDE3OjQzOjIxLjAyODQwMTk2NloiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTgyMjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA3MjAsXG4gIFwiTGluZUNvdW50XCI6IDYwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA3MjA6XFx0XFx0d2hpbGUgKHBhZC0tKVxcbiA3MjE6XFx0XFx0XFx0KihwKyspID0gMDtcXG4gNzIyOlxcdFxcbiA3MjM6XFx0XFx0cyA9ICh1bmlvbiBpcF92c19zeW5jX2Nvbm4gKilwO1xcbiA3MjQ6XFx0XFxuIDcyNTpcXHRcXHQvKiBTZXQgbWVzc2FnZSB0eXBlICBcXHUwMDI2IGNvcHkgbWVtYmVycyAqL1xcbiA3MjY6XFx0XFx0cy1cXHUwMDNldjQudHlwZSA9IChjcC1cXHUwMDNlYWYgPT0gQUZfSU5FVDYgPyBTVFlQRV9GX0lORVQ2IDogMCk7XFxuIDcyNzpcXHRcXHRzLVxcdTAwM2V2NC52ZXJfc2l6ZSA9IGh0b25zKGxlbiBcXHUwMDI2IFNWRVJfTUFTSyk7XFx0LyogVmVyc2lvbiAwICovXFxuIDcyODpcXHRcXHRzLVxcdTAwM2V2NC5mbGFncyA9IGh0b25sKGZsYWdzIFxcdTAwMjYgfklQX1ZTX0NPTk5fRl9IQVNIRUQpO1xcbiA3Mjk6XFx0XFx0cy1cXHUwMDNldjQuc3RhdGUgPSBodG9ucyhjcC1cXHUwMDNlc3RhdGUpO1xcbiA3MzA6XFx0XFx0cy1cXHUwMDNldjQucHJvdG9jb2wgPSBjcC1cXHUwMDNlcHJvdG9jb2w7XFxuIDczMTpcXHRcXHRzLVxcdTAwM2V2NC5jcG9ydCA9IGNwLVxcdTAwM2VjcG9ydDtcXG4gNzMyOlxcdFxcdHMtXFx1MDAzZXY0LnZwb3J0ID0gY3AtXFx1MDAzZXZwb3J0O1xcbiA3MzM6XFx0XFx0cy1cXHUwMDNldjQuZHBvcnQgPSBjcC1cXHUwMDNlZHBvcnQ7XFxuIDczNDpcXHRcXHRzLVxcdTAwM2V2NC5md21hcmsgPSBodG9ubChjcC1cXHUwMDNlZndtYXJrKTtcXG4gNzM1OlxcdFxcdHMtXFx1MDAzZXY0LnRpbWVvdXQgPSBodG9ubChjcC1cXHUwMDNldGltZW91dCAvIEhaKTtcXG4gNzM2OlxcdFxcdG0tXFx1MDAzZW5yX2Nvbm5zKys7XFxuIDczNzpcXHRcXG4gNzM4OlxcdCNpZmRlZiBDT05GSUdfSVBfVlNfSVBWNlxcbiA3Mzk6XFx0XFx0aWYgKGNwLVxcdTAwM2VhZiA9PSBBRl9JTkVUNikge1xcbiA3NDA6XFx0XFx0XFx0cCArPSBzaXplb2Yoc3RydWN0IGlwX3ZzX3N5bmNfdjYpO1xcbiA3NDE6XFx0XFx0XFx0cy1cXHUwMDNldjYuY2FkZHIgPSBjcC1cXHUwMDNlY2FkZHIuaW42O1xcbiA3NDI6XFx0XFx0XFx0cy1cXHUwMDNldjYudmFkZHIgPSBjcC1cXHUwMDNldmFkZHIuaW42O1xcbiA3NDM6XFx0XFx0XFx0cy1cXHUwMDNldjYuZGFkZHIgPSBjcC1cXHUwMDNlZGFkZHIuaW42O1xcbiA3NDQ6XFx0XFx0fSBlbHNlXFxuIDc0NTpcXHQjZW5kaWZcXG4gNzQ2OlxcdFxcdHtcXG4gNzQ3OlxcdFxcdFxcdHAgKz0gc2l6ZW9mKHN0cnVjdCBpcF92c19zeW5jX3Y0KTtcXHQvKiBvcHRpb25zIHB0ciAqL1xcbiA3NDg6XFx0XFx0XFx0cy1cXHUwMDNldjQuY2FkZHIgPSBjcC1cXHUwMDNlY2FkZHIuaXA7XFxuIDc0OTpcXHRcXHRcXHRzLVxcdTAwM2V2NC52YWRkciA9IGNwLVxcdTAwM2V2YWRkci5pcDtcXG4gNzUwOlxcdFxcdFxcdHMtXFx1MDAzZXY0LmRhZGRyID0gY3AtXFx1MDAzZWRhZGRyLmlwO1xcbiA3NTE6XFx0XFx0fVxcbiA3NTI6XFx0XFx0aWYgKHNlcV9tYXNrKSB7XFxuIDc1MzpcXHRcXHRcXHQqKHArKykgPSBJUFZTX09QVF9TRVFfREFUQTtcXG4gNzU0OlxcdFxcdFxcdCoocCsrKSA9IHNpemVvZihzdHJ1Y3QgaXBfdnNfc3luY19jb25uX29wdGlvbnMpO1xcbiA3NTU6XFx0XFx0XFx0aHRvbl9zZXEoXFx1MDAyNmNwLVxcdTAwM2Vpbl9zZXEsIChzdHJ1Y3QgaXBfdnNfc2VxICopcCk7XFxuIDc1NjpcXHRcXHRcXHRwICs9IHNpemVvZihzdHJ1Y3QgaXBfdnNfc2VxKTtcXG4gNzU3OlxcdFxcdFxcdGh0b25fc2VxKFxcdTAwMjZjcC1cXHUwMDNlb3V0X3NlcSwgKHN0cnVjdCBpcF92c19zZXEgKilwKTtcXG4gNzU4OlxcdFxcdFxcdHAgKz0gc2l6ZW9mKHN0cnVjdCBpcF92c19zZXEpO1xcbiA3NTk6XFx0XFx0fVxcbiA3NjA6XFx0XFx0LyogSGFuZGxlIHBlIGRhdGEgKi9cXG4gNzYxOlxcdFxcdGlmIChjcC1cXHUwMDNlcGVfZGF0YV9sZW4gXFx1MDAyNlxcdTAwMjYgY3AtXFx1MDAzZXBlX2RhdGEpIHtcXG4gNzYyOlxcdFxcdFxcdCoocCsrKSA9IElQVlNfT1BUX1BFX0RBVEE7XFxuIDc2MzpcXHRcXHRcXHQqKHArKykgPSBjcC1cXHUwMDNlcGVfZGF0YV9sZW47XFxuIDc2NDpcXHRcXHRcXHRtZW1jcHkocCwgY3AtXFx1MDAzZXBlX2RhdGEsIGNwLVxcdTAwM2VwZV9kYXRhX2xlbik7XFxuIDc2NTpcXHRcXHRcXHRwICs9IGNwLVxcdTAwM2VwZV9kYXRhX2xlbjtcXG4gNzY2OlxcdFxcdFxcdGlmIChwZV9uYW1lX2xlbikge1xcbiA3Njc6XFx0XFx0XFx0XFx0LyogQWRkIFBFX05BTUUgKi9cXG4gNzY4OlxcdFxcdFxcdFxcdCoocCsrKSA9IElQVlNfT1BUX1BFX05BTUU7XFxuIDc2OTpcXHRcXHRcXHRcXHQqKHArKykgPSBwZV9uYW1lX2xlbjtcXG4gNzcwOlxcdFxcdFxcdFxcdG1lbWNweShwLCBjcC1cXHUwMDNlcGUtXFx1MDAzZW5hbWUsIHBlX25hbWVfbGVuKTtcXG4gNzcxOlxcdFxcdFxcdFxcdHAgKz0gcGVfbmFtZV9sZW47XFxuIDc3MjpcXHRcXHRcXHR9XFxuIDc3MzpcXHRcXHR9XFxuIDc3NDpcXHRcXG4gNzc1OlxcdFxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZpcHZzLVxcdTAwM2VzeW5jX2J1ZmZfbG9jayk7XFxuIDc3NjpcXHRcXG4gNzc3OlxcdGNvbnRyb2w6XFxuIDc3ODpcXHRcXHQvKiBzeW5jaHJvbml6ZSBpdHMgY29udHJvbGxlciBpZiBpdCBoYXMgKi9cXG4gNzc5OlxcdFxcdGNwID0gY3AtXFx1MDAzZWNvbnRyb2w7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDE3OjQzOjIxLjAyODYwNDIwNloiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1MjI3NzQ5MjQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIEtlcm5lbCBWdWxuZXJhYmlsaXR5OiBBIERlZXAgRGl2ZSoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBxdWVzdGlvbiBpcyBhbHdheXMsIFwiV2hhdCBleGFjdGx5IGlzIHRoaXMgY29tbWl0IGFkZHJlc3Npbmc/XCIgUmlnaHQsIGl0IGxvb2tzIGxpa2UgYSB2dWxuZXJhYmlsaXR5IGluIGBpcF92c19zeW5jX2Nvbm5fdjBgIGFuZCBgaXBfdnNfc3luY19jb25uYC4gVGhlIGtleSBpcyB0aGF0IGBjcC1cdTAwM2VmbGFnc2Agd2FzIGJlaW5nIHJlYWQgbXVsdGlwbGUgdGltZXMgd2l0aG91dCBwcm9wZXIgc3luY2hyb25pemF0aW9uIHVzaW5nIGBSRUFEX09OQ0VgIG9yIGxvY2FsIHZhcmlhYmxlIHNuYXBzaG90cy4gVGhpcyBpcyBpbW1lZGlhdGVseSBjb25jZXJuaW5nLlxuXG5TcGVjaWZpY2FsbHksIGlmIGBjcC1cdTAwM2VmbGFncyBcdTAwMjYgSVBfVlNfQ09OTl9GX1NFUV9NQVNLYCBjaGFuZ2VkIGJldHdlZW4gdGhlIGxlbmd0aCBjYWxjdWxhdGlvbiBhbmQgdGhlIHN1YnNlcXVlbnQgY29uZGl0aW9uYWwgY2hlY2ssIHRoZXJlJ3MgYSByaXNrLiBUaGUgY2FsY3VsYXRlZCBgbGVuYCBjb3VsZCBiZSBiYXNlZCBvbiBhIHN0YXRlIHdpdGhvdXQgc2VxdWVuY2Ugb3B0aW9ucywgYnV0IHRoZW4gdGhlIGNvZGUgKm1pZ2h0KiB0cnkgdG8gd3JpdGUgc2VxdWVuY2Ugb3B0aW9ucywgcG90ZW50aWFsbHkgbGVhZGluZyB0byBhIGJ1ZmZlciBvdmVyZmxvdyBvciwgY29udmVyc2VseSwgd3JpdGluZyBwYXN0IHRoZSBhbGxvY2F0ZWQgc3BhY2UsIHdoaWNoIHdvdWxkIGNhdXNlIGNvcnJ1cHRpb24gb3IgYSBtaXNtYXRjaCB3aXRoIHJlc2VydmVkIHNwYWNlISBDbGFzc2ljIG1lbW9yeSBzYWZldHkgaXNzdWUuXG5cblRoZSBmaXg/IFNpbXBsZSBhbmQgZWxlZ2FudC4gUmVhZCBgY3AtXHUwMDNlZmxhZ3NgICpvbmNlKiB1c2luZyBgUkVBRF9PTkNFYCwgc3RvcmUgaXQgaW4gYSBsb2NhbCB2YXJpYWJsZSBgZmxhZ3NgLCBhbmQgdGhlbiB1c2UgYGZsYWdzYCAoYW5kIGBzZXFfbWFzayA9IGZsYWdzIFx1MDAyNiBJUF9WU19DT05OX0ZfU0VRX01BU0tgKSBjb25zaXN0ZW50bHkgZm9yIGJvdGggbGVuZ3RoIGNhbGN1bGF0aW9uIGFuZCB3cml0aW5nLiBUaGlzIGVsaW1pbmF0ZXMgdGhlIHJhY2UgY29uZGl0aW9uLiBHb29kLlxuXG5Ob3csIHRoZSBjcnVjaWFsIHF1ZXN0aW9uOiBpcyB0aGlzIHJlYWNoYWJsZSBhbmQgd29ydGggZnV6emluZz8gTGV0J3MgYXNzZXNzOlxuXG4qICAgKipSZWFjaGFiaWxpdHk6KiogSVBWUyBpcyBwYXJ0IG9mIHRoZSBzdGFuZGFyZCBuZXR3b3JraW5nIHN0YWNrLCBuZXRmaWx0ZXIsIHJpZ2h0PyBBYnNvbHV0ZWx5LiBJdOKAmXMgYmFrZWQgaW50byB0aGUga2VybmVsLiBJdOKAmXMgdXNlZCBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBRRU1VIGFuZCBzeXprYWxsZXIsIHdoaWNoIGlzICpmYW50YXN0aWMqIGZvciBmdXp6aW5nLCBhbmQgaXQgdXNlcyB2aXJ0dWFsIHNvY2tldHMsIHBhY2tldCBpbmplY3Rpb24sIGFuZCBuZXRsaW5rIGNvbmZpZ3VyYXRpb24gKGlwdnNhZG0vSVBWUyBuZXRsaW5rKS4gU28sIGl0J3MgZWFzaWx5IHJlYWNoYWJsZSwgZXNwZWNpYWxseSBnaXZlbiBuZXRsaW5rLlxuKiAgICoqSXMgaXQgcmVhY2hhYmxlIGNvZGU/KiogWWVzISBJUFZTIHN5bmMgZGFlbW9uIGFuZCBjb25uZWN0aW9uIHRyYWNraW5nIGFyZSBzdGFuZGFyZCBjb21wb25lbnRzIGluIG5ldHdvcmsgdmlydHVhbGl6YXRpb24uXG4qICAgKipTZWN0aW9uIDM6KiogQ2hlY2tzIG91dCwgY29yZSBuZXR3b3JraW5nLCBuZXRmaWx0ZXIuXG4qICAgKipXb3J0aEZ1enppbmc6KiogWWVzLCBhYnNvbHV0ZWx5LiBCdWZmZXIgb3ZlcmZsb3dzIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBhcmUgcHJpbWUgY2FuZGlkYXRlcyBmb3IgZnV6emluZywgYW5kIHRoaXMgY29kZSBpcyByZWFjaGFibGUuIFRoZSBmYWN0IHRoYXQgaXQncyBpbiBhIHN0YW5kYXJkIGNvbXBvbmVudCBhbmQgbmV0d29yay1mYWNpbmcgbWVhbnMgaXQgc2hvdWxkIGdldCBwbGVudHkgb2YgYXR0ZW50aW9uLlxuXG5Pa2F5LCBuZXh0IHN0ZXA6IGxldCdzIHZlcmlmeSBhbGwgdGhlIEtjb25maWcgZGVwZW5kZW5jaWVzIGZvciBJUFZTIGFuZCB0aGUgc3luYyBkYWVtb24uIEdvdHRhIG1ha2Ugc3VyZSB3ZSd2ZSBnb3QgdGhlIGNvcnJlY3QgY29uZmlndXJhdGlvbiB0byB0cmlnZ2VyIHRoaXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIyMjk0LCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzQxLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTc6NDM6MjYuMjU2MzU2ODc0WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzA5ODIxMzgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIElQX1ZTXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTQtI1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnOjU6bWVudWNvbmZpZyBJUF9WU1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTYtXFx0dHJpc3RhdGUgXFxcIklQIHZpcnR1YWwgc2VydmVyIHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZz0yODY9Y29tbWVudCAnSVBWUyBTSCBzY2hlZHVsZXInXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctMjg3LVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnOjI4ODpjb25maWcgSVBfVlNfU0hfVEFCX0JJVFNcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy0yODktXFx0aW50IFxcXCJJUFZTIHNvdXJjZSBoYXNoaW5nIHRhYmxlIHNpemUgKHRoZSBOdGggcG93ZXIgb2YgMilcXFwiXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZz0zMDE9Y29tbWVudCAnSVBWUyBNSCBzY2hlZHVsZXInXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctMzAyLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnOjMwMzpjb25maWcgSVBfVlNfTUhfVEFCX0lOREVYXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctMzA0LVxcdGludCBcXFwiSVBWUyBtYWdsZXYgaGFzaGluZyB0YWJsZSBpbmRleCBvZiBzaXplICh0aGUgcHJpbWUgbnVtYmVycylcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDE3OjQzOjI2LjM4NzM0NTM3M1oiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozNTg4ODIxNzgwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIGhvdyBJJ2QgYXBwcm9hY2ggdGhpcyB0YXNrLCBhcyBpZiB0aGVzZSB3ZXJlIG15IGludGVybmFsIHRob3VnaHRzOlxuXG4qKkFuYWx5emluZyBJUF9WUyBEZXBlbmRlbmNpZXMgaW4gbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZyoqXG5cblJpZ2h0LCBsZXQncyBzdGFydCBieSBkaWdnaW5nIGludG8gdGhlIGBuZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZ2AgZmlsZS4gSSBuZWVkIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2YgdGhlIGBJUF9WU2AgZGVwZW5kZW5jaWVzLCBhbmQgdGhlIGZpcnN0IDQwIGxpbmVzIGFyZSBhIGdvb2QgcGxhY2UgdG8gYmVnaW4uIFRoaXMgc2hvdWxkIGdpdmUgbWUgYSBzb2xpZCBmb3VuZGF0aW9uIGZvciB1bmRlcnN0YW5kaW5nIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgYW5kIGFueSBwcmVyZXF1aXNpdGUgbW9kdWxlcyBvciBrZXJuZWwgZmVhdHVyZXMgaW52b2x2ZWQuIEknbGwgYmUgbG9va2luZyBmb3IgdGhpbmdzIGxpa2U6XG5cbiogICAqKmBkZXBlbmRzIG9uYCBzdGF0ZW1lbnRzOioqIFRoZXNlIGFyZSB0aGUga2V5LiBUaGV5J2xsIHRlbGwgbWUgZXhhY3RseSB3aGljaCBvdGhlciBjb25maWd1cmF0aW9uIHN5bWJvbHMgbmVlZCB0byBiZSBzZXQgb3IgZW5hYmxlZCBiZWZvcmUgYElQX1ZTYCBjYW4gYmUgc2VsZWN0ZWQuXG4qICAgKipgc2VsZWN0YCBzdGF0ZW1lbnRzOioqIEFsdGhvdWdoIGxlc3MgY29tbW9uIGluIHRoaXMgY29udGV4dCwgdGhleSdsbCBoaWdobGlnaHQgc3ltYm9scyB0aGF0IGFyZSBhdXRvbWF0aWNhbGx5IGVuYWJsZWQgYXMgYSBzaWRlIGVmZmVjdCBvZiBlbmFibGluZyBgSVBfVlNgLlxuKiAgICoqQW55IGNvbmRpdGlvbmFsIGBjb25maWdgIGJsb2NrczoqKiBUaGVzZSBpbmRpY2F0ZSBjb25maWd1cmF0aW9ucyB0aGF0IG1pZ2h0IG9ubHkgYmUgcmVsZXZhbnQgdW5kZXIgc3BlY2lmaWMgY2lyY3Vtc3RhbmNlcyAoZS5nLiwgc3BlY2lmaWMgaGFyZHdhcmUgb3Iga2VybmVsIGZlYXR1cmUgZmxhZ3MpLlxuKiAgICoqQ29tbWVudHMgYW5kIGRlc2NyaXB0aW9uczoqKiBUaGVzZSBhcmUgaW52YWx1YWJsZSwgYXMgdGhleSBjYW4gcHJvdmlkZSBjb250ZXh0IGFuZCBjbGFyaWZ5IHRoZSBwdXJwb3NlIG9mIGNlcnRhaW4gZGVwZW5kZW5jaWVzIG9yIG9wdGlvbnMuIFRoZXkgb2Z0ZW4gZXhwbGFpbiAqd2h5KiBhIHBhcnRpY3VsYXIgZGVwZW5kZW5jeSBleGlzdHMuXG4qICAgKipBbnl0aGluZyB0aGF0IG1pZ2h0IGhpbnQgYXQgb3RoZXIgcmVsYXRlZCBjb25maWd1cmF0aW9uIG9wdGlvbnMqKjogU29tZXRpbWVzIHJlbGF0ZWQgb3B0aW9ucyBhcmUgbm90IGltbWVkaWF0ZWx5IG9idmlvdXMuIFRoZSBmaWxlIG1pZ2h0IGRpc2N1c3MgZmVhdHVyZXMgb3IgcmVxdWlyZW1lbnRzIHdpdGhvdXQgZXhwbGljaXRseSBzdGF0aW5nIHRoZSBuYW1lIG9mIHRoZSBvcHRpb24uXG5cbkknbSBhaW1pbmcgZm9yIGEgY29tcHJlaGVuc2l2ZSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBwcmUtcmVxdWlzaXRlcy4gVGhpcyB3aWxsIGluZm9ybSBteSBuZXh0IHN0ZXBzLCB3aGV0aGVyIEknbSBkZWJ1Z2dpbmcgYSBjb25maWd1cmF0aW9uIGlzc3VlLCBhbmFseXppbmcga2VybmVsIHBlcmZvcm1hbmNlLCBvciBzaW1wbHkgdHJ5aW5nIHRvIGdldCBhIGJldHRlciBncmFzcCBvZiB0aGUgYElQX1ZTYCBpbnRlcm5hbHMuIFRoaXMgd2lsbCBhbGxvdyBtZSB0byBiZSBmdWxseSB1cCB0byBkYXRlIGFuZCBpbiBhIHBvc2l0aW9uIHRvIGdpdmUgYSBwcmVjaXNlIGFuZCBjb3JyZWN0IGFuc3dlciB0byB3aG9ldmVyIG5lZWRzIGl0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMzQ1NiwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDE3OjQzOjI5Ljk3NjE3MTg5M1oiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzI3NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L25ldGZpbHRlci9pcHZzL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4gICAyOlxcdCNcXG4gICAzOlxcdCMgSVAgVmlydHVhbCBTZXJ2ZXIgY29uZmlndXJhdGlvblxcbiAgIDQ6XFx0I1xcbiAgIDU6XFx0bWVudWNvbmZpZyBJUF9WU1xcbiAgIDY6XFx0XFx0dHJpc3RhdGUgXFxcIklQIHZpcnR1YWwgc2VydmVyIHN1cHBvcnRcXFwiXFxuICAgNzpcXHRcXHRkZXBlbmRzIG9uIElORVQgXFx1MDAyNlxcdTAwMjYgTkVURklMVEVSXFxuICAgODpcXHRcXHRkZXBlbmRzIG9uIChORl9DT05OVFJBQ0sgfHwgTkZfQ09OTlRSQUNLPW4pXFxuICAgOTpcXHRcXHRoZWxwXFxuICAxMDpcXHRcXHQgIElQIFZpcnR1YWwgU2VydmVyIHN1cHBvcnQgd2lsbCBsZXQgeW91IGJ1aWxkIGEgaGlnaC1wZXJmb3JtYW5jZVxcbiAgMTE6XFx0XFx0ICB2aXJ0dWFsIHNlcnZlciBiYXNlZCBvbiBjbHVzdGVyIG9mIHR3byBvciBtb3JlIHJlYWwgc2VydmVycy4gVGhpc1xcbiAgMTI6XFx0XFx0ICBvcHRpb24gbXVzdCBiZSBlbmFibGVkIGZvciBhdCBsZWFzdCBvbmUgb2YgdGhlIGNsdXN0ZXJlZCBjb21wdXRlcnNcXG4gIDEzOlxcdFxcdCAgdGhhdCB3aWxsIHRha2UgY2FyZSBvZiBpbnRlcmNlcHRpbmcgaW5jb21pbmcgY29ubmVjdGlvbnMgdG8gYVxcbiAgMTQ6XFx0XFx0ICBzaW5nbGUgSVAgYWRkcmVzcyBhbmQgc2NoZWR1bGluZyB0aGVtIHRvIHJlYWwgc2VydmVycy5cXG4gIDE1OlxcdFxcbiAgMTY6XFx0XFx0ICBUaHJlZSByZXF1ZXN0IGRpc3BhdGNoaW5nIHRlY2huaXF1ZXMgYXJlIGltcGxlbWVudGVkLCB0aGV5IGFyZVxcbiAgMTc6XFx0XFx0ICB2aXJ0dWFsIHNlcnZlciB2aWEgTkFULCB2aXJ0dWFsIHNlcnZlciB2aWEgdHVubmVsaW5nIGFuZCB2aXJ0dWFsXFxuICAxODpcXHRcXHQgIHNlcnZlciB2aWEgZGlyZWN0IHJvdXRpbmcuIFRoZSBzZXZlcmFsIHNjaGVkdWxpbmcgYWxnb3JpdGhtcyBjYW5cXG4gIDE5OlxcdFxcdCAgYmUgdXNlZCB0byBjaG9vc2Ugd2hpY2ggc2VydmVyIHRoZSBjb25uZWN0aW9uIGlzIGRpcmVjdGVkIHRvLFxcbiAgMjA6XFx0XFx0ICB0aHVzIGxvYWQgYmFsYW5jaW5nIGNhbiBiZSBhY2hpZXZlZCBhbW9uZyB0aGUgc2VydmVycy4gIEZvciBtb3JlXFxuICAyMTpcXHRcXHQgIGluZm9ybWF0aW9uIGFuZCBpdHMgYWRtaW5pc3RyYXRpb24gcHJvZ3JhbSwgcGxlYXNlIHZpc2l0IHRoZVxcbiAgMjI6XFx0XFx0ICBmb2xsb3dpbmcgVVJMOiBcXHUwMDNjaHR0cDovL3d3dy5saW51eHZpcnR1YWxzZXJ2ZXIub3JnL1xcdTAwM2UuXFxuICAyMzpcXHRcXG4gIDI0OlxcdFxcdCAgSWYgeW91IHdhbnQgdG8gY29tcGlsZSBpdCBpbiBrZXJuZWwsIHNheSBZLiBUbyBjb21waWxlIGl0IGFzIGFcXG4gIDI1OlxcdFxcdCAgbW9kdWxlLCBjaG9vc2UgTSBoZXJlLiBJZiB1bnN1cmUsIHNheSBOLlxcbiAgMjY6XFx0XFxuICAyNzpcXHRpZiBJUF9WU1xcbiAgMjg6XFx0XFxuICAyOTpcXHRjb25maWdcXHRJUF9WU19JUFY2XFxuICAzMDpcXHRcXHRib29sIFxcXCJJUHY2IHN1cHBvcnQgZm9yIElQVlNcXFwiXFxuICAzMTpcXHRcXHRkZXBlbmRzIG9uIElQVjYgPSB5IHx8IElQX1ZTID0gSVBWNlxcbiAgMzI6XFx0XFx0c2VsZWN0IE5GX0RFRlJBR19JUFY2XFxuICAzMzpcXHRcXHRoZWxwXFxuICAzNDpcXHRcXHQgIEFkZCBJUHY2IHN1cHBvcnQgdG8gSVBWUy5cXG4gIDM1OlxcdFxcbiAgMzY6XFx0XFx0ICBTYXkgWSBpZiB1bnN1cmUuXFxuICAzNzpcXHRcXG4gIDM4OlxcdGNvbmZpZ1xcdElQX1ZTX0RFQlVHXFxuICAzOTpcXHRcXHRib29sIFxcXCJJUCB2aXJ0dWFsIHNlcnZlciBkZWJ1Z2dpbmdcXFwiXFxuICA0MDpcXHRcXHRoZWxwXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDE3OjQzOjI5Ljk3NjM0NzE0M1oiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNTQ0NTkzMDg1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgdGhlIHN1bW1hcnksIHJlbmRlcmVkIGluIHRoZSBmaXJzdCBwZXJzb24sIGFzc3VtaW5nIEknbSBhbiBleHBlcnQ6XG5cbioqSW52ZXN0aWdhdGluZyB0aGUgSVBWUyBCdWlsZCBQcm9jZXNzKipcblxuUmlnaHQsIGxldCdzIGRpdmUgc3RyYWlnaHQgaW4uIEkgbmVlZCB0byB1bmRlcnN0YW5kIGV4YWN0bHkgaG93IGBpcF92c19zeW5jLm9gIGdldHMgY29tcGlsZWQgd2l0aGluIHRoZSBJUFZTIGZyYW1ld29yay4gVGhlIG1vc3QgbG9naWNhbCBwbGFjZSB0byBzdGFydCBkaWdnaW5nIGlzIHRoZSBgbmV0L25ldGZpbHRlci9pcHZzL01ha2VmaWxlYC4gVGhhdCBmaWxlIGlzIHRoZSBjZW50cmFsIHBvaW50IG9mIHRydXRoIGZvciBob3cgdGhlIElQVlMgbW9kdWxlcyBhcmUgY29uc3RydWN0ZWQsIGFuZCBpdCBzaG91bGQgY2xlYXJseSBvdXRsaW5lIHRoZSBkZXBlbmRlbmNpZXMgYW5kIGJ1aWxkIGNvbW1hbmRzIGZvciBhbGwgdGhlIG9iamVjdCBmaWxlcywgaW5jbHVkaW5nIHRoZSBvbmUgSSdtIGludGVyZXN0ZWQgaW46IGBpcF92c19zeW5jLm9gLiBJJ20gZXhwZWN0aW5nIHRvIGZpbmQgdGhlIHN0YW5kYXJkIEdOVSBtYWtlIHN5bnRheCBpbiB0aGVyZSwgaG9wZWZ1bGx5IHdpdGggY2xlYXIgdmFyaWFibGUgYXNzaWdubWVudHMgYW5kIHJ1bGVzIHRoYXQgZGV0YWlsIHRoZSBjb21waWxlciBmbGFncyBhbmQgbGlua2luZyBzdGVwcy4gSSdtIGhvcGluZyBpdCdzIHdlbGwtc3RydWN0dXJlZCBlbm91Z2ggdGhhdCBJIGNhbiBxdWlja2x5IHRyYWNlIHRoZSBkZXBlbmRlbmNpZXMgYmFjayBhbmQgZ3Jhc3AgYW55IHBvdGVudGlhbCBpc3N1ZXMgb3IgbW9kaWZpY2F0aW9ucyB0aGF0IG1pZ2h0IGJlIHJlbGV2YW50IHRvIG15IGN1cnJlbnQgaW52ZXN0aWdhdGlvbi4gSG9wZWZ1bGx5IGl0J3Mgbm90IGEgY29tcGxldGUgbWVzcyBvZiBpbmNsdWRlcyBhbmQgbWFjcm9zIVxuXG5cbiIsIklucHV0VG9rZW5zIjoyNDQ4MSwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTc6NDM6MzIuNTIwOTQ0ODI4WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzMTUyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvbmV0ZmlsdGVyL2lwdnMvTWFrZWZpbGVcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogMzBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuICAgMjpcXHQjXFxuICAgMzpcXHQjIE1ha2VmaWxlIGZvciB0aGUgSVBWUyBtb2R1bGVzIG9uIHRvcCBvZiBJUHY0LlxcbiAgIDQ6XFx0I1xcbiAgIDU6XFx0XFxuICAgNjpcXHQjIElQVlMgdHJhbnNwb3J0IHByb3RvY29sIGxvYWQgYmFsYW5jaW5nIHN1cHBvcnRcXG4gICA3OlxcdGlwX3ZzX3Byb3RvLW9ianMteSA6PVxcbiAgIDg6XFx0aXBfdnNfcHJvdG8tb2Jqcy0kKENPTkZJR19JUF9WU19QUk9UT19UQ1ApICs9IGlwX3ZzX3Byb3RvX3RjcC5vXFxuICAgOTpcXHRpcF92c19wcm90by1vYmpzLSQoQ09ORklHX0lQX1ZTX1BST1RPX1VEUCkgKz0gaXBfdnNfcHJvdG9fdWRwLm9cXG4gIDEwOlxcdGlwX3ZzX3Byb3RvLW9ianMtJChDT05GSUdfSVBfVlNfUFJPVE9fQUhfRVNQKSArPSBpcF92c19wcm90b19haF9lc3Aub1xcbiAgMTE6XFx0aXBfdnNfcHJvdG8tb2Jqcy0kKENPTkZJR19JUF9WU19QUk9UT19TQ1RQKSArPSBpcF92c19wcm90b19zY3RwLm9cXG4gIDEyOlxcdFxcbiAgMTM6XFx0aXBfdnMtZXh0cmFfb2Jqcy15IDo9XFxuICAxNDpcXHRpcF92cy1leHRyYV9vYmpzLSQoQ09ORklHX0lQX1ZTX05GQ1QpICs9IGlwX3ZzX25mY3Qub1xcbiAgMTU6XFx0XFxuICAxNjpcXHRpcF92cy1vYmpzIDo9XFx0aXBfdnNfY29ubi5vIGlwX3ZzX2NvcmUubyBpcF92c19jdGwubyBpcF92c19zY2hlZC5vXFx0ICAgXFxcXFxcbiAgMTc6XFx0XFx0XFx0aXBfdnNfeG1pdC5vIGlwX3ZzX2FwcC5vIGlwX3ZzX3N5bmMub1xcdCAgIFxcdFxcdCAgIFxcXFxcXG4gIDE4OlxcdFxcdFxcdGlwX3ZzX2VzdC5vIGlwX3ZzX3Byb3RvLm8gaXBfdnNfcGUub1xcdFxcdFxcdCAgIFxcXFxcXG4gIDE5OlxcdFxcdFxcdCQoaXBfdnNfcHJvdG8tb2Jqcy15KSAkKGlwX3ZzLWV4dHJhX29ianMteSlcXG4gIDIwOlxcdFxcbiAgMjE6XFx0XFxuICAyMjpcXHQjIElQVlMgY29yZVxcbiAgMjM6XFx0b2JqLSQoQ09ORklHX0lQX1ZTKSArPSBpcF92cy5vXFxuICAyNDpcXHRcXG4gIDI1OlxcdCMgSVBWUyBzY2hlZHVsZXJzXFxuICAyNjpcXHRvYmotJChDT05GSUdfSVBfVlNfUlIpICs9IGlwX3ZzX3JyLm9cXG4gIDI3OlxcdG9iai0kKENPTkZJR19JUF9WU19XUlIpICs9IGlwX3ZzX3dyci5vXFxuICAyODpcXHRvYmotJChDT05GSUdfSVBfVlNfTEMpICs9IGlwX3ZzX2xjLm9cXG4gIDI5OlxcdG9iai0kKENPTkZJR19JUF9WU19XTEMpICs9IGlwX3ZzX3dsYy5vXFxuICAzMDpcXHRvYmotJChDT05GSUdfSVBfVlNfRk8pICs9IGlwX3ZzX2ZvLm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTc6NDM6MzIuNTIxMDc5Mzk4WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI5NDQ3NTU2NzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIElQVlMgU3luY2hyb25pemF0aW9uIGluIHRoZSBLZXJuZWwqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBgaXBfdnNfc3luYy5vYCBoZXJlLiBJdCdzIHJpZ2h0IHRoZXJlLCBuZXN0bGVkIHdpdGhpbiBgaXBfdnMtb2Jqc2AsIGFuZCB0aGF0J3MgdHJpZ2dlcmVkIHdoZW4gYENPTkZJR19JUF9WU2AgaXMgZW5hYmxlZCDigJMgbWFrZXMgcGVyZmVjdCBzZW5zZS4gSSBrbm93IGBJUF9WU2AgaXMgZGVwZW5kZW50IG9uIGJvdGggYElORVRgIGFuZCBgTkVURklMVEVSYCwgdGhlIHVzdWFsIHN1c3BlY3RzLiBOb3csIHRoZSByZWFsIHF1ZXN0aW9uIGlzLCBhcmUgdGhlcmUgKm90aGVyKiBjb25maWd1cmF0aW9uIG9wdGlvbnMgSSBuZWVkIHRvIGNvbnNpZGVyIGZvciBJUFZTIHN5bmNocm9uaXphdGlvbj8gSSdsbCBxdWlja2x5IGNoZWNrIGZvciB0aGluZ3MgbGlrZSBgQ09ORklHX0lQX1ZTX0lQVjZgLCBgQ09ORklHX0lQX1ZTX1BST1RPX1RDUGAsIHlvdSBrbm93LCBhbnkgZGVwZW5kZW5jaWVzIG9yIHJlbGF0ZWQgY29uZmlndXJhdGlvbnMuIEkgc3VzcGVjdCBgSVBfVlNgIGl0c2VsZiBpcyB0aGUgcHJpbWFyeSBvbmUsIGJ1dCBJIHdhbnQgdG8gYmUgdGhvcm91Z2guXG5cblJpZ2h0LCB0aW1lIHRvIG1vdmUgb24gdG8gYEZvY3VzU3ltYm9sc2AuIExldCdzIHNlZSwgdGhlIGNvcmUgZnVuY3Rpb25zIG1vZGlmaWVkIGhlcmUgYXJlIGBpcF92c19zeW5jX2Nvbm5gIGFuZCBgaXBfdnNfc3luY19jb25uX3YwYC4gVGhhdCBnaXZlcyBtZSBhIGRpcmVjdCBsaW5lIG9mIHNpZ2h0LlxuXG5OZXh0IHN0ZXA6IEknbSBnb2luZyB0byBuZWVkIHRvIHRyYWNlIGRvd24gdGhlIGNhbGxlcnMgb2YgYGlwX3ZzX3N5bmNfY29ubmAgYW5kIGFueSBvdGhlciByZWxhdGVkIGZ1bmN0aW9ucy4gVGhpcyB3aWxsIGhlbHAgbWUgdW5kZXJzdGFuZCB0aGUgY29udGV4dCBvZiB0aGUgY2hhbmdlcyBhbmQgaG93IHRoZXNlIHN5bmNocm9uaXphdGlvbiBmdW5jdGlvbnMgYXJlIGludGVncmF0ZWQgd2l0aGluIHRoZSBicm9hZGVyIElQVlMgZWNvc3lzdGVtLiBVbmRlcnN0YW5kaW5nIHRoZSBjYWxsIGdyYXBoIHdpbGwgcmVhbGx5IGNsYXJpZnkgdGhlIGltcGFjdCBhbmQgaW1wbGljYXRpb25zIG9mIHRoZSBtb2RpZmljYXRpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNTM4NCwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4MiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDE3OjQzOjM1LjQ2NTgzOTEzOFoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzAyNjM1MDcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlwX3ZzX3N5bmNfY29ublwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL2lwdnMvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmM9MTM0Nz1zdGF0aWMgdm9pZCBpcF92c19jb25uX2V4cGlyZShzdHJ1Y3QgdGltZXJfbGlzdCAqdClcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmMtMTQxNi1cXHRpZiAoaXB2cy1cXHUwMDNlc3luY19zdGF0ZSBcXHUwMDI2IElQX1ZTX1NUQVRFX01BU1RFUilcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jOjE0MTc6XFx0XFx0aXBfdnNfc3luY19jb25uKGlwdnMsIGNwLCBzeXNjdGxfc3luY190aHJlc2hvbGQoaXB2cykpO1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmMtMTQxOC1cXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmM9MjA5Nj1pcF92c19pbl9ob29rKHZvaWQgKnByaXYsIHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCBuZl9ob29rX3N0YXRlICpzdGF0ZSlcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmMtMjI2Ni1cXHQgKlxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmM6MjI2NzpcXHQgKiBGb3IgT05FX1BLVCBsZXQgaXBfdnNfc3luY19jb25uKCkgZG8gdGhlIGZpbHRlciB3b3JrLlxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmMtMjI2OC1cXHQgKi9cXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmMtMjI3NS1cXHRpZiAoaXB2cy1cXHUwMDNlc3luY19zdGF0ZSBcXHUwMDI2IElQX1ZTX1NUQVRFX01BU1RFUilcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jOjIyNzY6XFx0XFx0aXBfdnNfc3luY19jb25uKGlwdnMsIGNwLCBwa3RzKTtcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jLTIyNzctXFx0ZWxzZSBpZiAoKGNwLVxcdTAwM2VmbGFncyBcXHUwMDI2IElQX1ZTX0NPTk5fRl9PTkVfUEFDS0VUKSBcXHUwMDI2XFx1MDAyNiBjcC1cXHUwMDNlY29udHJvbClcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jOjIyNzg6XFx0XFx0LyogaW5jcmVtZW50IGlzIGRvbmUgaW5zaWRlIGlwX3ZzX3N5bmNfY29ubiB0b28gKi9cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jLTIyNzktXFx0XFx0YXRvbWljX2luYyhcXHUwMDI2Y3AtXFx1MDAzZWNvbnRyb2wtXFx1MDAzZWluX3BrdHMpO1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy0xMy0gKiAgICAgICAgICAgICAgdGltZS1vdXRzLCBhbmQgZmlyZXdhbGwgbWFya3MuXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzoxNDogKiAgICAgICAgICAgICAgSW4gdmVyLjEgXFxcImlwX3ZzX3N5bmNfY29ubl9vcHRpb25zXFxcIiB3aWxsIGJlIHNlbnQgaW4gbmV0dy4gb3JkZXIuXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy0xNS0gKiAgICAgICAgICAgICAgVmVyLiAwIGNhbiBiZSB0dXJuZWQgb24gYnkgc3lzY3RsIC13IG5ldC5pcHY0LnZzLnN5bmNfdmVyc2lvbj0wXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jPTY1PXN0YXRpYyBzdHJ1Y3QgbG9ja19jbGFzc19rZXkgX19pcHZzX3N5bmNfa2V5O1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy02OS0gKi9cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjcwOnN0cnVjdCBpcF92c19zeW5jX2Nvbm5fdjAge1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtNzEtXFx0X191OFxcdFxcdFxcdHJlc2VydmVkO1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy04OC1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjg5OnN0cnVjdCBpcF92c19zeW5jX2Nvbm5fb3B0aW9ucyB7XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy05MC1cXHRzdHJ1Y3QgaXBfdnNfc2VxICAgICAgICBpbl9zZXE7ICAgICAgICAgLyogaW5jb21pbmcgc2VxLiBzdHJ1Y3QgKi9cXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM9MTU0PXN0cnVjdCBpcF92c19zeW5jX3Y2IHtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMTczLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6MTc0OnVuaW9uIGlwX3ZzX3N5bmNfY29ubiB7XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy0xNzUtXFx0c3RydWN0IGlwX3ZzX3N5bmNfdjRcXHR2NDtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM9MTk2PXN0cnVjdCBpcF92c19zeW5jX3RocmVhZF9kYXRhIHtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMjA0LS8qIFZlcnNpb24gMCBkZWZpbml0aW9uIG9mIHBhY2tldCBzaXplcyAqL1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6MjA1OiNkZWZpbmUgU0lNUExFX0NPTk5fU0laRSAgKHNpemVvZihzdHJ1Y3QgaXBfdnNfc3luY19jb25uX3YwKSlcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTIwNi0jZGVmaW5lIEZVTExfQ09OTl9TSVpFICBcXFxcXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzoyMDc6KHNpemVvZihzdHJ1Y3QgaXBfdnNfc3luY19jb25uX3YwKSArIHNpemVvZihzdHJ1Y3QgaXBfdnNfc3luY19jb25uX29wdGlvbnMpKVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMjA4LVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYz0yNDU9c3RydWN0IGlwX3ZzX3N5bmNfbWVzZ192MCB7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTI0OS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjI1MDpcXHQvKiBpcF92c19zeW5jX2Nvbm4gZW50cmllcyBzdGFydCBoZXJlICovXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy0yNTEtfTtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM9MjU0PXN0cnVjdCBpcF92c19zeW5jX21lc2cge1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy0yNjAtXFx0X191MTZcXHRcXHRcXHRzcGFyZTtcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjI2MTpcXHQvKiBpcF92c19zeW5jX2Nvbm4gZW50cmllcyBzdGFydCBoZXJlICovXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy0yNjItfTtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM9NDQxPXN0YXRpYyBpbmxpbmUgYm9vbCBpbl9wZXJzaXN0ZW5jZShzdHJ1Y3QgaXBfdnNfY29ubiAqY3ApXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTQ1OC0gKi9cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjQ1OTpzdGF0aWMgaW50IGlwX3ZzX3N5bmNfY29ubl9uZWVkZWQoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy00NjAtXFx0XFx0XFx0XFx0ICBzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsIGludCBwa3RzKVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy01MzgtICovXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzo1Mzk6c3RhdGljIHZvaWQgaXBfdnNfc3luY19jb25uX3YwKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy01NDAtXFx0XFx0XFx0ICAgICAgIGludCBwa3RzKVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy01NDItXFx0c3RydWN0IGlwX3ZzX3N5bmNfbWVzZ192MCAqbTtcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjU0MzpcXHRzdHJ1Y3QgaXBfdnNfc3luY19jb25uX3YwICpzO1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtNTQ0LVxcdHN0cnVjdCBpcF92c19zeW5jX2J1ZmYgKmJ1ZmY7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTU1Ni1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjU1NzpcXHRpZiAoIWlwX3ZzX3N5bmNfY29ubl9uZWVkZWQoaXB2cywgY3AsIHBrdHMpKVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtNTU4LVxcdFxcdHJldHVybjtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtNTkwLVxcdG0gPSAoc3RydWN0IGlwX3ZzX3N5bmNfbWVzZ192MCAqKSBidWZmLVxcdTAwM2VtZXNnO1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6NTkxOlxcdHMgPSAoc3RydWN0IGlwX3ZzX3N5bmNfY29ubl92MCAqKSBidWZmLVxcdTAwM2VoZWFkO1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtNTkyLVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy02MDQtXFx0aWYgKHNlcV9tYXNrKSB7XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzo2MDU6XFx0XFx0c3RydWN0IGlwX3ZzX3N5bmNfY29ubl9vcHRpb25zICpvcHQgPVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6NjA2OlxcdFxcdFxcdChzdHJ1Y3QgaXBfdnNfc3luY19jb25uX29wdGlvbnMgKilcXHUwMDI2c1sxXTtcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTYwNy1cXHRcXHRtZW1jcHkob3B0LCBcXHUwMDI2Y3AtXFx1MDAzZXN5bmNfY29ubl9vcHQsIHNpemVvZigqb3B0KSk7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTYyMS1cXHRcXHRcXHRwa3RzID0gc3lzY3RsX3N5bmNfdGhyZXNob2xkKGlwdnMpO1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6NjIyOlxcdFxcdGlwX3ZzX3N5bmNfY29ubihpcHZzLCBjcCwgcGt0cyk7XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy02MjMtXFx0fVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy02MzAtICovXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzo2MzE6dm9pZCBpcF92c19zeW5jX2Nvbm4oc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIHN0cnVjdCBpcF92c19jb25uICpjcCwgaW50IHBrdHMpXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy02MzIte1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtNjMzLVxcdHN0cnVjdCBpcF92c19zeW5jX21lc2cgKm07XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzo2MzQ6XFx0dW5pb24gaXBfdnNfc3luY19jb25uICpzO1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtNjM1LVxcdHN0cnVjdCBpcF92c19zeW5jX2J1ZmYgKmJ1ZmY7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTY0My1cXHRpZiAoc3lzY3RsX3N5bmNfdmVyKGlwdnMpID09IDApIHtcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjY0NDpcXHRcXHRpcF92c19zeW5jX2Nvbm5fdjAoaXB2cywgY3AsIHBrdHMpO1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtNjQ1LVxcdFxcdHJldHVybjtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtNjUwLXNsb29wOlxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6NjUxOlxcdGlmICghaXBfdnNfc3luY19jb25uX25lZWRlZChpcHZzLCBjcCwgcGt0cykpXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy02NTItXFx0XFx0Z290byBjb250cm9sO1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy02ODItXFx0aWYgKHNlcV9tYXNrKVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6NjgzOlxcdFxcdGxlbiArPSBzaXplb2Yoc3RydWN0IGlwX3ZzX3N5bmNfY29ubl9vcHRpb25zKSArIDI7XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy02ODQtXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTcyMi1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjcyMzpcXHRzID0gKHVuaW9uIGlwX3ZzX3N5bmNfY29ubiAqKXA7XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy03MjQtXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTc1My1cXHRcXHQqKHArKykgPSBJUFZTX09QVF9TRVFfREFUQTtcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjc1NDpcXHRcXHQqKHArKykgPSBzaXplb2Yoc3RydWN0IGlwX3ZzX3N5bmNfY29ubl9vcHRpb25zKTtcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTc1NS1cXHRcXHRodG9uX3NlcShcXHUwMDI2Y3AtXFx1MDAzZWluX3NlcSwgKHN0cnVjdCBpcF92c19zZXEgKilwKTtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM9NzkyPXN0YXRpYyBpbmxpbmUgaW50XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzo3OTM6aXBfdnNfY29ubl9maWxsX3BhcmFtX3N5bmMoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIGludCBhZiwgdW5pb24gaXBfdnNfc3luY19jb25uICpzYyxcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTc5NC1cXHRcXHRcXHQgICBzdHJ1Y3QgaXBfdnNfY29ubl9wYXJhbSAqcCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM9ODQ2PXN0YXRpYyB2b2lkIGlwX3ZzX3Byb2NfY29ubihzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgc3RydWN0IGlwX3ZzX2Nvbm5fcGFyYW0gKnBhcmFtLFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy04NTAtXFx0XFx0XFx0ICAgIHVuc2lnbmVkIGxvbmcgdGltZW91dCwgX191MzIgZndtYXJrLFxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6ODUxOlxcdFxcdFxcdCAgICBzdHJ1Y3QgaXBfdnNfc3luY19jb25uX29wdGlvbnMgKm9wdClcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTg1Mi17XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jPTk2MD1zdGF0aWMgdm9pZCBpcF92c19wcm9jZXNzX21lc3NhZ2VfdjAoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIGNvbnN0IGNoYXIgKmJ1ZmZlcixcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtOTYzLVxcdHN0cnVjdCBpcF92c19zeW5jX21lc2dfdjAgKm0gPSAoc3RydWN0IGlwX3ZzX3N5bmNfbWVzZ192MCAqKWJ1ZmZlcjtcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjk2NDpcXHRzdHJ1Y3QgaXBfdnNfc3luY19jb25uX3YwICpzO1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6OTY1OlxcdHN0cnVjdCBpcF92c19zeW5jX2Nvbm5fb3B0aW9ucyAqb3B0O1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtOTY2LVxcdHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHA7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTk3OC1cXHRcXHR9XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzo5Nzk6XFx0XFx0cyA9IChzdHJ1Y3QgaXBfdnNfc3luY19jb25uX3YwICopIHA7XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy05ODAtXFx0XFx0ZmxhZ3MgPSBudG9ocyhzLVxcdTAwM2VmbGFncykgfCBJUF9WU19DT05OX0ZfU1lOQztcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtOTgyLVxcdFxcdGlmIChmbGFncyBcXHUwMDI2IElQX1ZTX0NPTk5fRl9TRVFfTUFTSykge1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6OTgzOlxcdFxcdFxcdG9wdCA9IChzdHJ1Y3QgaXBfdnNfc3luY19jb25uX29wdGlvbnMgKilcXHUwMDI2c1sxXTtcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTk4NC1cXHRcXHRcXHRwICs9IEZVTExfQ09OTl9TSVpFO1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYz0xMDI5PXN0YXRpYyBpbmxpbmUgaW50IGlwX3ZzX3Byb2Nfc2Vxb3B0KF9fdTggKnAsIHVuc2lnbmVkIGludCBwbGVuLFxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMTAzMC1cXHRcXHRcXHRcXHQgICAgX191MzIgKm9wdF9mbGFncyxcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjEwMzE6XFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBpcF92c19zeW5jX2Nvbm5fb3B0aW9ucyAqb3B0KVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMTAzMi17XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzoxMDMzOlxcdHN0cnVjdCBpcF92c19zeW5jX2Nvbm5fb3B0aW9ucyAqdG9wdDtcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTEwMzQtXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzoxMDM1OlxcdHRvcHQgPSAoc3RydWN0IGlwX3ZzX3N5bmNfY29ubl9vcHRpb25zICopcDtcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTEwMzYtXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzoxMDM3OlxcdGlmIChwbGVuICE9IHNpemVvZihzdHJ1Y3QgaXBfdnNfc3luY19jb25uX29wdGlvbnMpKSB7XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy0xMDM4LVxcdFxcdElQX1ZTX0RCRygyLCBcXFwiQkFDS1VQLCBib2d1cyBjb25uIG9wdGlvbnMgbGVuZ3RoXFxcXG5cXFwiKTtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM9MTA3MT1zdGF0aWMgaW5saW5lIGludCBpcF92c19wcm9jX3N5bmNfY29ubihzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgX191OCAqcCwgX191OCAqbXNnX2VuZClcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTEwNzIte1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6MTA3MzpcXHRzdHJ1Y3QgaXBfdnNfc3luY19jb25uX29wdGlvbnMgb3B0O1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6MTA3NDpcXHR1bmlvbiAgaXBfdnNfc3luY19jb25uICpzO1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMTA3NS1cXHRzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwO1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy0xMDgyLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6MTA4MzpcXHRzID0gKHVuaW9uIGlwX3ZzX3N5bmNfY29ubiAqKSBwO1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMTA4NC1cXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM9MTIwNT1zdGF0aWMgdm9pZCBpcF92c19wcm9jZXNzX21lc3NhZ2Uoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIF9fdTggKmJ1ZmZlcixcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMTIzMy1cXHRcXHRmb3IgKGk9MDsgaVxcdTAwM2Nucl9jb25uczsgaSsrKSB7XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzoxMjM0OlxcdFxcdFxcdHVuaW9uIGlwX3ZzX3N5bmNfY29ubiAqcztcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTEyMzUtXFx0XFx0XFx0dW5zaWduZWQgaW50IHNpemU7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTEyNDItXFx0XFx0XFx0fVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6MTI0MzpcXHRcXHRcXHRzID0gKHVuaW9uIGlwX3ZzX3N5bmNfY29ubiAqKXA7XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy0xMjQ0LVxcdFxcdFxcdHNpemUgPSBudG9ocyhzLVxcdTAwM2V2NC52ZXJfc2l6ZSkgXFx1MDAyNiBTVkVSX01BU0s7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jPTE3NDA9aW50IHN0YXJ0X3N5bmNfdGhyZWFkKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBzdHJ1Y3QgaXB2c19zeW5jX2RhZW1vbl9jZmcgKmMsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTE3NTItXFx0SVBfVlNfREJHKDcsIFxcXCIlcygpOiBwaWQgJWRcXFxcblxcXCIsIF9fZnVuY19fLCB0YXNrX3BpZF9ucihjdXJyZW50KSk7XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzoxNzUzOlxcdElQX1ZTX0RCRyg3LCBcXFwiRWFjaCBpcF92c19zeW5jX2Nvbm4gZW50cnkgbmVlZHMgJXpkIGJ5dGVzXFxcXG5cXFwiLFxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6MTc1NDpcXHRcXHQgIHNpemVvZihzdHJ1Y3QgaXBfdnNfc3luY19jb25uX3YwKSk7XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy0xNzU1LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxNzo0MzozNi4xNjg0ODY2MjhaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDk2MzIyODg3MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBGdXp6aW5nIFN0cmF0ZWd5OiBBIFF1aWNrIFJldmlldyoqXG5cbk9rYXksIGxldCBtZSBxdWlja2x5IHJ1biB0aHJvdWdoIHRoaXMuIFdlIG5lZWQgdG8gbWFrZSBzdXJlIHdlJ3ZlIGNvbnNpZGVyZWQgZXZlcnl0aGluZyBiZWZvcmUgd2UgbW92ZSBmb3J3YXJkLiBSaWdodCwgc28gd2UncmUgZm9jdXNpbmcgb24gZnV6emluZyB0aGUgSVBWUyBjb25uZWN0aW9uIHN5bmNocm9uaXphdGlvbiwgYW5kIHNwZWNpZmljYWxseSB0aGUgY29ubmVjdGlvbiBoYW5kbGluZywgY29uc2lkZXJpbmcgdGhlIGtub3duIGZ1bmN0aW9ucyBtb2RpZmllZCB3aGljaCBhcmUgYGlwX3ZzX3N5bmNfY29ubmAgYW5kIGBpcF92c19zeW5jX2Nvbm5fdjBgLlxuXG5XZSd2ZSBnb3QgdGhlIHJlcXVpcmVkIGNvbmZpZ3MgaW4gcGxhY2UuIGBJUF9WU2AgaXMgdGhlIGNvcmUsIGFuZCB0aGF0IGRlcGVuZHMgb24gYElORVRgIGFuZCBgTkVURklMVEVSYCwgd2hpY2ggYXJlIHN0YW5kYXJkcywgc28gbm8gc3VycHJpc2VzIHRoZXJlLlxuXG5Ob3csIGZvciB0aGUgY3JpdGljYWwgYHNldC1yZXN1bHRzYCBwYXJhbWV0ZXJzLiBgV29ydGhGdXp6aW5nYCBoYXMgdG8gYmUgdHJ1ZSwgYmVjYXVzZSB0aGlzIGxvb2tzIHByb21pc2luZy4gVGhlIHJlYXNvbmluZyBpcyBzb2xpZDogd2UncmUgZGVhbGluZyB3aXRoIGEgcmFjZSBjb25kaXRpb24gcG90ZW50aWFsbHkuIFNwZWNpZmljYWxseSwgYW4gaW5jb25zaXN0ZW5jeSBpbiByZWFkaW5nIGBjcC1cdTAwM2VmbGFnc2AgaW4gdGhlIElQVlMgY29ubmVjdGlvbiBzeW5jaHJvbml6YXRpb24gZGFlbW9uLCBhbmQgdGhhdCBjb3VsZCBlYXNpbHkgbGVhZCB0byBtZXNzYWdlIGZyYW1pbmcgcHJvYmxlbXMgb3IgZXZlbiBidWZmZXIgY29ycnVwdGlvbi4gVGhlc2UgYXJlIHNlcmlvdXMgdnVsbmVyYWJpbGl0aWVzIGFuZCBlc3BlY2lhbGx5IHNpbmNlIHRoaXMgaXMgbmV0d29yayB0cmFmZmljLXJlYWNoYWJsZSwgd2Ugc2hvdWxkIHByaW9yaXRpemUgdGhpcy4gVGhlIGZ1enppbmcgc2hvdWxkIGZvY3VzIG9uIHRob3NlIGZ1bmN0aW9ucyBtZW50aW9uZWQgYmVmb3JlLCBgaXBfdnNfc3luY19jb25uYCBhbmQgYGlwX3ZzX3N5bmNfY29ubl92MGAsIGFuZCBvZiBjb3Vyc2UgdGhlIGNvbmZpZ3Mgd2Ugc3BlY2lmaWVkIGVhcmxpZXIgbXVzdCBiZSBlbmFibGVkLCBzbyBgSVBfVlNgLCBgTkVURklMVEVSYCwgYW5kIGBJTkVUYC5cblxuQWxyaWdodCwgSSdtIHJlYWR5LiBMZXQncyBjYWxsIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMwNTUzLCJPdXRwdXRUb2tlbnMiOjE0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxNzo0Mzo0MS4xMzE3MTkwMDlaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMDE5OTk5MDcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIklQX1ZTXCIsXG4gICAgXCJORVRGSUxURVJcIixcbiAgICBcIklORVRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJpcF92c19zeW5jX2Nvbm5cIixcbiAgICBcImlwX3ZzX3N5bmNfY29ubl92MFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHJlYWNoYWJsZSBuZXR3b3JraW5nIGNvZGUgaW4gdGhlIElQVlMgY29ubmVjdGlvbiBzeW5jaHJvbml6YXRpb24gc3Vic3lzdGVtIChuZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jKS4gSXQgdXNlcyBSRUFEX09OQ0UgYW5kIGNhY2hlcyBjcC1cXHUwMDNlZmxhZ3MgbG9jYWxseSB0byBhdm9pZCBkYXRhIHJhY2VzIGFuZCBpbmNvbnNpc3RlbmNpZXMgYmV0d2VlbiBwYWNrZXQgbGVuZ3RoIGNhbGN1bGF0aW9uIGFuZCBzZXF1ZW5jZSBvcHRpb24gc2VyaWFsaXphdGlvbi4gRnV6emluZyBpcyB3YXJyYW50ZWQgdG8gdGVzdCBzeW5jaHJvbml6YXRpb24gbWVzc2FnZSBjb25zdHJ1Y3Rpb24gYW5kIHN0YXRlIGhhbmRsaW5nIHVuZGVyIGNvbmN1cnJlbmN5LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIklQX1ZTXCIsXG4gICAgXCJORVRGSUxURVJcIixcbiAgICBcIklORVRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJpcF92c19zeW5jX2Nvbm5cIixcbiAgICBcImlwX3ZzX3N5bmNfY29ubl92MFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHJlYWNoYWJsZSBuZXR3b3JraW5nIGNvZGUgaW4gdGhlIElQVlMgY29ubmVjdGlvbiBzeW5jaHJvbml6YXRpb24gc3Vic3lzdGVtIChuZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jKS4gSXQgdXNlcyBSRUFEX09OQ0UgYW5kIGNhY2hlcyBjcC1cXHUwMDNlZmxhZ3MgbG9jYWxseSB0byBhdm9pZCBkYXRhIHJhY2VzIGFuZCBpbmNvbnNpc3RlbmNpZXMgYmV0d2VlbiBwYWNrZXQgbGVuZ3RoIGNhbGN1bGF0aW9uIGFuZCBzZXF1ZW5jZSBvcHRpb24gc2VyaWFsaXphdGlvbi4gRnV6emluZyBpcyB3YXJyYW50ZWQgdG8gdGVzdCBzeW5jaHJvbml6YXRpb24gbWVzc2FnZSBjb25zdHJ1Y3Rpb24gYW5kIHN0YXRlIGhhbmRsaW5nIHVuZGVyIGNvbmN1cnJlbmN5LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxNzo0Mzo0MS4zMzM3Mjk2OTdaIiwiU2VxIjoyMSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3NjIyODg0OTE3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTc6NDM6NDEuMzM0NjUzODM3WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MTc2MjE5NTQyMDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHJlc3NlcyBhIGNvbmN1cnJlbmN5IGlzc3VlIGluIElQVlMgY29ubmVjdGlvbiBzeW5jaHJvbml6YXRpb24gKGlwX3ZzX3N5bmNfY29ubiBhbmQgaXBfdnNfc3luY19jb25uX3YwKSB3aGVyZSBjcC1cXHUwMDNlZmxhZ3Mgd2FzIHJlYWQgbXVsdGlwbGUgdGltZXMgd2l0aG91dCBSRUFEX09OQ0UsIHBvdGVudGlhbGx5IGNhdXNpbmcgYSBtaXNtYXRjaCBiZXR3ZWVuIHRoZSBjYWxjdWxhdGVkIGJ1ZmZlciBsZW5ndGggYW5kIHRoZSBhY3R1YWwgZGF0YSB3cml0dGVuIGlmIGZsYWdzIHdlcmUgbW9kaWZpZWQgY29uY3VycmVudGx5LlxcblxcblRoZSBmaXggaW50cm9kdWNlcyBsb2NhbCBzY2FsYXIgdmFyaWFibGVzIChmbGFncywgc2VxX21hc2spIHRoYXQgYXJlIGltbWVkaWF0ZWx5IGluaXRpYWxpemVkIHZpYSBSRUFEX09OQ0UoY3AtXFx1MDAzZWZsYWdzKS4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgdW5pbml0aWFsaXplZCBzdGFjayBvciBoZWFwIGFsbG9jYXRpb25zLCB1bmluaXRpYWxpemVkIHN0cnVjdHVyZSBmaWVsZHMsIGluZm8tbGVha3MgdG8gdXNlcnNwYWNlLCBvciByZWFkcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhlIHJpc2tzIGFzc29jaWF0ZWQgd2l0aCB0aGUgb3JpZ2luYWwgcmFjZSBjb25kaXRpb24gKG91dC1vZi1ib3VuZHMgYnVmZmVyIHdyaXRlcyAvIGRhdGEgY29ycnVwdGlvbikgYXJlIGNvdmVyZWQgYnkgS0FTQU4gYW5kIEtDU0FOLCBzbyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAzNTVlZDFiZmI3ZDVmNjI0M2VlYWU0YjczYTE4Nzk0ZTYxMGY4Y2U2XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBTZXAgOSAxNzo0Mjo1OSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jXG5pbmRleCA1MzgzYWVhZmIwYWVkLi5kZmE4NDg3ZWMwYzIwIDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuY1xuKysrIGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuY1xuQEAgLTU0MywxMyArNTQzLDE1IEBAIHN0YXRpYyB2b2lkIGlwX3ZzX3N5bmNfY29ubl92MChzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLFxuIFx0c3RydWN0IGlwX3ZzX3N5bmNfY29ubl92MCAqcztcbiBcdHN0cnVjdCBpcF92c19zeW5jX2J1ZmYgKmJ1ZmY7XG4gXHRzdHJ1Y3QgaXB2c19tYXN0ZXJfc3luY19zdGF0ZSAqbXM7XG4tXHRpbnQgaWQ7XG4rXHR1MzIgZmxhZ3MsIHNlcV9tYXNrO1xuIFx0dW5zaWduZWQgaW50IGxlbjtcbitcdGludCBpZDtcbiBcbiBcdGlmICh1bmxpa2VseShjcC1cdTAwM2VhZiAhPSBBRl9JTkVUKSlcbiBcdFx0cmV0dXJuO1xuK1x0ZmxhZ3MgPSBSRUFEX09OQ0UoY3AtXHUwMDNlZmxhZ3MpO1xuIFx0LyogRG8gbm90IHN5bmMgT05FIFBBQ0tFVCAqL1xuLVx0aWYgKGNwLVx1MDAzZWZsYWdzIFx1MDAyNiBJUF9WU19DT05OX0ZfT05FX1BBQ0tFVClcbitcdGlmIChmbGFncyBcdTAwMjYgSVBfVlNfQ09OTl9GX09ORV9QQUNLRVQpXG4gXHRcdHJldHVybjtcbiBcbiBcdGlmICghaXBfdnNfc3luY19jb25uX25lZWRlZChpcHZzLCBjcCwgcGt0cykpXG5AQCAtNTY0LDggKzU2Niw4IEBAIHN0YXRpYyB2b2lkIGlwX3ZzX3N5bmNfY29ubl92MChzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLFxuIFx0aWQgPSBzZWxlY3RfbWFzdGVyX3RocmVhZF9pZChpcHZzLCBjcCk7XG4gXHRtcyA9IFx1MDAyNmlwdnMtXHUwMDNlbXNbaWRdO1xuIFx0YnVmZiA9IG1zLVx1MDAzZXN5bmNfYnVmZjtcbi1cdGxlbiA9IChjcC1cdTAwM2VmbGFncyBcdTAwMjYgSVBfVlNfQ09OTl9GX1NFUV9NQVNLKSA/IEZVTExfQ09OTl9TSVpFIDpcbi1cdFx0U0lNUExFX0NPTk5fU0laRTtcbitcdHNlcV9tYXNrID0gZmxhZ3MgXHUwMDI2IElQX1ZTX0NPTk5fRl9TRVFfTUFTSztcbitcdGxlbiA9IHNlcV9tYXNrID8gRlVMTF9DT05OX1NJWkUgOiBTSU1QTEVfQ09OTl9TSVpFO1xuIFx0aWYgKGJ1ZmYpIHtcbiBcdFx0bSA9IChzdHJ1Y3QgaXBfdnNfc3luY19tZXNnX3YwICopIGJ1ZmYtXHUwMDNlbWVzZztcbiBcdFx0LyogU2VuZCBidWZmZXIgaWYgaXQgaXMgZm9yIHYxICovXG5AQCAtNTk3LDkgKzU5OSw5IEBAIHN0YXRpYyB2b2lkIGlwX3ZzX3N5bmNfY29ubl92MChzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLFxuIFx0cy1cdTAwM2VjYWRkciA9IGNwLVx1MDAzZWNhZGRyLmlwO1xuIFx0cy1cdTAwM2V2YWRkciA9IGNwLVx1MDAzZXZhZGRyLmlwO1xuIFx0cy1cdTAwM2VkYWRkciA9IGNwLVx1MDAzZWRhZGRyLmlwO1xuLVx0cy1cdTAwM2VmbGFncyA9IGh0b25zKGNwLVx1MDAzZWZsYWdzIFx1MDAyNiB+SVBfVlNfQ09OTl9GX0hBU0hFRCk7XG4rXHRzLVx1MDAzZWZsYWdzID0gaHRvbnMoZmxhZ3MgXHUwMDI2IH5JUF9WU19DT05OX0ZfSEFTSEVEKTtcbiBcdHMtXHUwMDNlc3RhdGUgPSBodG9ucyhjcC1cdTAwM2VzdGF0ZSk7XG4tXHRpZiAoY3AtXHUwMDNlZmxhZ3MgXHUwMDI2IElQX1ZTX0NPTk5fRl9TRVFfTUFTSykge1xuK1x0aWYgKHNlcV9tYXNrKSB7XG4gXHRcdHN0cnVjdCBpcF92c19zeW5jX2Nvbm5fb3B0aW9ucyAqb3B0ID1cbiBcdFx0XHQoc3RydWN0IGlwX3ZzX3N5bmNfY29ubl9vcHRpb25zICopXHUwMDI2c1sxXTtcbiBcdFx0bWVtY3B5KG9wdCwgXHUwMDI2Y3AtXHUwMDNlc3luY19jb25uX29wdCwgc2l6ZW9mKCpvcHQpKTtcbkBAIC02MzUsNiArNjM3LDcgQEAgdm9pZCBpcF92c19zeW5jX2Nvbm4oc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIHN0cnVjdCBpcF92c19jb25uICpjcCwgaW50IHBrdHMpXG4gXHRpbnQgaWQ7XG4gXHRfX3U4ICpwO1xuIFx0dW5zaWduZWQgaW50IGxlbiwgcGVfbmFtZV9sZW4sIHBhZDtcbitcdHUzMiBmbGFncywgc2VxX21hc2s7XG4gXG4gXHQvKiBIYW5kbGUgb2xkIHZlcnNpb24gb2YgdGhlIHByb3RvY29sICovXG4gXHRpZiAoc3lzY3RsX3N5bmNfdmVyKGlwdnMpID09IDApIHtcbkBAIC02NDcsNiArNjUwLDcgQEAgdm9pZCBpcF92c19zeW5jX2Nvbm4oc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIHN0cnVjdCBpcF92c19jb25uICpjcCwgaW50IHBrdHMpXG4gc2xvb3A6XG4gXHRpZiAoIWlwX3ZzX3N5bmNfY29ubl9uZWVkZWQoaXB2cywgY3AsIHBrdHMpKVxuIFx0XHRnb3RvIGNvbnRyb2w7XG4rXHRmbGFncyA9IFJFQURfT05DRShjcC1cdTAwM2VmbGFncyk7XG4gXG4gXHQvKiBTYW5pdHkgY2hlY2tzICovXG4gXHRwZV9uYW1lX2xlbiA9IDA7XG5AQCAtNjc0LDcgKzY3OCw4IEBAIHZvaWQgaXBfdnNfc3luY19jb25uKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsIGludCBwa3RzKVxuICNlbmRpZlxuIFx0XHRsZW4gPSBzaXplb2Yoc3RydWN0IGlwX3ZzX3N5bmNfdjQpO1xuIFxuLVx0aWYgKGNwLVx1MDAzZWZsYWdzIFx1MDAyNiBJUF9WU19DT05OX0ZfU0VRX01BU0spXG4rXHRzZXFfbWFzayA9IGZsYWdzIFx1MDAyNiBJUF9WU19DT05OX0ZfU0VRX01BU0s7XG4rXHRpZiAoc2VxX21hc2spXG4gXHRcdGxlbiArPSBzaXplb2Yoc3RydWN0IGlwX3ZzX3N5bmNfY29ubl9vcHRpb25zKSArIDI7XG4gXG4gXHRpZiAoY3AtXHUwMDNlcGVfZGF0YV9sZW4pXG5AQCAtNzIwLDcgKzcyNSw3IEBAIHZvaWQgaXBfdnNfc3luY19jb25uKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsIGludCBwa3RzKVxuIFx0LyogU2V0IG1lc3NhZ2UgdHlwZSAgXHUwMDI2IGNvcHkgbWVtYmVycyAqL1xuIFx0cy1cdTAwM2V2NC50eXBlID0gKGNwLVx1MDAzZWFmID09IEFGX0lORVQ2ID8gU1RZUEVfRl9JTkVUNiA6IDApO1xuIFx0cy1cdTAwM2V2NC52ZXJfc2l6ZSA9IGh0b25zKGxlbiBcdTAwMjYgU1ZFUl9NQVNLKTtcdC8qIFZlcnNpb24gMCAqL1xuLVx0cy1cdTAwM2V2NC5mbGFncyA9IGh0b25sKGNwLVx1MDAzZWZsYWdzIFx1MDAyNiB+SVBfVlNfQ09OTl9GX0hBU0hFRCk7XG4rXHRzLVx1MDAzZXY0LmZsYWdzID0gaHRvbmwoZmxhZ3MgXHUwMDI2IH5JUF9WU19DT05OX0ZfSEFTSEVEKTtcbiBcdHMtXHUwMDNldjQuc3RhdGUgPSBodG9ucyhjcC1cdTAwM2VzdGF0ZSk7XG4gXHRzLVx1MDAzZXY0LnByb3RvY29sID0gY3AtXHUwMDNlcHJvdG9jb2w7XG4gXHRzLVx1MDAzZXY0LmNwb3J0ID0gY3AtXHUwMDNlY3BvcnQ7XG5AQCAtNzQ0LDcgKzc0OSw3IEBAIHZvaWQgaXBfdnNfc3luY19jb25uKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsIGludCBwa3RzKVxuIFx0XHRzLVx1MDAzZXY0LnZhZGRyID0gY3AtXHUwMDNldmFkZHIuaXA7XG4gXHRcdHMtXHUwMDNldjQuZGFkZHIgPSBjcC1cdTAwM2VkYWRkci5pcDtcbiBcdH1cbi1cdGlmIChjcC1cdTAwM2VmbGFncyBcdTAwMjYgSVBfVlNfQ09OTl9GX1NFUV9NQVNLKSB7XG4rXHRpZiAoc2VxX21hc2spIHtcbiBcdFx0KihwKyspID0gSVBWU19PUFRfU0VRX0RBVEE7XG4gXHRcdCoocCsrKSA9IHNpemVvZihzdHJ1Y3QgaXBfdnNfc3luY19jb25uX29wdGlvbnMpO1xuIFx0XHRodG9uX3NlcShcdTAwMjZjcC1cdTAwM2Vpbl9zZXEsIChzdHJ1Y3QgaXBfdnNfc2VxICopcCk7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxNzo0Mzo0MS4zMzQ2NTU4NzdaIiwiU2VxIjoyMywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDQ1NDU0ODgyOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipLTVNBTiBGdXp6aW5nIEp1c3RpZmljYXRpb24gZm9yIElQVlMgU3luYyBQYXRjaCoqXG5cbk9rYXksIHNvIHRoZSB1c2VyJ3MgcXVlc3Rpb24gYm9pbHMgZG93biB0byB3aGV0aGVyIHRoaXMgcGF0Y2ggd2FycmFudHMgaXRzIG93biBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBydW4sIG9yIGlmIHRoZSBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nIGlzIHN1ZmZpY2llbnQuIEkgbmVlZCB0byBkaWcgaW4gYW5kIHNlZS4gTGV0J3MgYnJlYWsgZG93biB3aGF0J3MgaGFwcGVuaW5nLlxuXG5UaGlzIHBhdGNoIHRvdWNoZXMgYG5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmNgLiBTcGVjaWZpY2FsbHksIGl0IG1vZGlmaWVzIGBpcF92c19zeW5jX2Nvbm5fdjBgIGFuZCBgaXBfdnNfc3luY19jb25uYC4gVGhlIGNoYW5nZSBpcyBhYm91dCBob3cgdGhlIGNvZGUgZGVhbHMgd2l0aCBgY3AtXHUwMDNlZmxhZ3NgLiBQcmV2aW91c2x5LCB0aGVyZSB3ZXJlIG11bHRpcGxlIHJlYWRzIG9mIGBjcC1cdTAwM2VmbGFnc2Agd2l0aGluIHRoZXNlIGZ1bmN0aW9ucy4gVGhlIHJpc2s/IElmIGBjcC1cdTAwM2VmbGFnc2AgaXMgbW9kaWZpZWQgY29uY3VycmVudGx5IOKAkyBhIGRhdGEgcmFjZSBzaXR1YXRpb24g4oCTIHRoZW4gdGhlIGNhbGN1bGF0ZWQgbGVuZ3RocyBhbmQgc3Vic2VxdWVudCBvcGVyYXRpb25zIGNvdWxkIGJlIGluY29uc2lzdGVudCwgcG90ZW50aWFsbHkgbGVhZGluZyB0byBhIGJ1ZmZlciBvdmVyZmxvdyBvciBjb3JydXB0IGRhdGEuXG5cblRoZSBwYXRjaCdzIGZpeCBzZWVtcyBzbWFydC4gSW4gYm90aCBmdW5jdGlvbnMsIHRoZXkncmUgbm93IHJlYWRpbmcgYGNwLVx1MDAzZWZsYWdzYCAqb25jZSogaW50byBhIGxvY2FsIHZhcmlhYmxlIChgZmxhZ3NgKSB1c2luZyBgUkVBRF9PTkNFYC4gVGhleSBjYWxjdWxhdGUgYHNlcV9tYXNrYCAod2hpY2ggc2VlbXMgaW1wb3J0YW50IGZvciBzZXF1ZW5jZS1yZWxhdGVkIHN0dWZmKSBmcm9tIHRoaXMgY2FjaGVkIGBmbGFnc2AuIFRoZSBgbGVuYCBjYWxjdWxhdGlvbiBhbmQgc3Vic2VxdWVudCBjb25kaXRpb25hbCBsb2dpYyBub3cgdXNlIHRoZXNlIGxvY2FsIHZhcmlhYmxlcywgZW5zdXJpbmcgdGhleSdyZSBjb25zaXN0ZW50LiBJIHNlZSB0aGUgcGF0dGVybiDigJMgdGhlIG9sZCBjb2RlIGNvdWxkIGNhbGN1bGF0ZSB0aGUgbGVuZ3RoIGJhc2VkIG9uIG9uZSB2YWx1ZSBhbmQgdGhlbiBiZWhhdmUgb24gYSBkaWZmZXJlbnQgdmVyc2lvbi4gVGhpcyBmaXggbmVhdGx5IHJlc29sdmVzIHRoYXQgcG90ZW50aWFsIGluY29uc2lzdGVuY3kuXG5cbk5vdywgdG8gZGV0ZXJtaW5lIGlmIHdlIG5lZWQgS01TQU4sIEkgbmVlZCBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIHRoZSAqY29udGV4dCouIEkgbmVlZCB0byBzZWUgd2hhdCBlbHNlIGludGVyYWN0cyB3aXRoIHRoZXNlIGZsYWdzIGFuZCB0aGlzIHN5bmNocm9uaXphdGlvbiBjb2RlLiBJcyBpdCBsaWtlbHkgdG8gYmUgbXVsdGl0aHJlYWRlZD8gQXJlIHRoZXJlIG90aGVyIHdyaXRlcnM/IEknbGwgcHJvYmFibHkgcnVuIGEgYHJlYWQtZmlsZWAgb3IgYGdyZXBwZXJgIHNlYXJjaCB3aXRoaW4gdGhlIGBuZXQvbmV0ZmlsdGVyL2lwdnNgIGRpcmVjdG9yeSB0byB1bmRlcnN0YW5kIHRoZSBicm9hZGVyIHBpY3R1cmUgYW5kIGlkZW50aWZ5IHRoZSBtb3N0IGxpa2VseSBkYXRhIHJhY2VzLiBNeSBndXQgc2F5cyB0aGlzICptaWdodCogYmUgdGhlIGtpbmQgb2YgcGF0Y2ggd2hlcmUgS01TQU4gY291bGQgZmluZCBzb21ldGhpbmcgc3RhbmRhcmQgS0FTQU4gbWlzc2VzLCBidXQgSSBuZWVkIG1vcmUgY29udGV4dCB0byBiZSBzdXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNDY5LCJPdXRwdXRUb2tlbnMiOjQzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDg2LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTc6NDM6NDUuNzg5MjA5MjY1WiIsIlNlcSI6MjQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI5ODM5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDU0MCxcbiAgXCJMaW5lQ291bnRcIjogOTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDU0MDpcXHRcXHRcXHRcXHQgICAgICAgaW50IHBrdHMpXFxuIDU0MTpcXHR7XFxuIDU0MjpcXHRcXHRzdHJ1Y3QgaXBfdnNfc3luY19tZXNnX3YwICptO1xcbiA1NDM6XFx0XFx0c3RydWN0IGlwX3ZzX3N5bmNfY29ubl92MCAqcztcXG4gNTQ0OlxcdFxcdHN0cnVjdCBpcF92c19zeW5jX2J1ZmYgKmJ1ZmY7XFxuIDU0NTpcXHRcXHRzdHJ1Y3QgaXB2c19tYXN0ZXJfc3luY19zdGF0ZSAqbXM7XFxuIDU0NjpcXHRcXHR1MzIgZmxhZ3MsIHNlcV9tYXNrO1xcbiA1NDc6XFx0XFx0dW5zaWduZWQgaW50IGxlbjtcXG4gNTQ4OlxcdFxcdGludCBpZDtcXG4gNTQ5OlxcdFxcbiA1NTA6XFx0XFx0aWYgKHVubGlrZWx5KGNwLVxcdTAwM2VhZiAhPSBBRl9JTkVUKSlcXG4gNTUxOlxcdFxcdFxcdHJldHVybjtcXG4gNTUyOlxcdFxcdGZsYWdzID0gUkVBRF9PTkNFKGNwLVxcdTAwM2VmbGFncyk7XFxuIDU1MzpcXHRcXHQvKiBEbyBub3Qgc3luYyBPTkUgUEFDS0VUICovXFxuIDU1NDpcXHRcXHRpZiAoZmxhZ3MgXFx1MDAyNiBJUF9WU19DT05OX0ZfT05FX1BBQ0tFVClcXG4gNTU1OlxcdFxcdFxcdHJldHVybjtcXG4gNTU2OlxcdFxcbiA1NTc6XFx0XFx0aWYgKCFpcF92c19zeW5jX2Nvbm5fbmVlZGVkKGlwdnMsIGNwLCBwa3RzKSlcXG4gNTU4OlxcdFxcdFxcdHJldHVybjtcXG4gNTU5OlxcdFxcbiA1NjA6XFx0XFx0c3Bpbl9sb2NrX2JoKFxcdTAwMjZpcHZzLVxcdTAwM2VzeW5jX2J1ZmZfbG9jayk7XFxuIDU2MTpcXHRcXHRpZiAoIShpcHZzLVxcdTAwM2VzeW5jX3N0YXRlIFxcdTAwMjYgSVBfVlNfU1RBVEVfTUFTVEVSKSkge1xcbiA1NjI6XFx0XFx0XFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNmlwdnMtXFx1MDAzZXN5bmNfYnVmZl9sb2NrKTtcXG4gNTYzOlxcdFxcdFxcdHJldHVybjtcXG4gNTY0OlxcdFxcdH1cXG4gNTY1OlxcdFxcbiA1NjY6XFx0XFx0aWQgPSBzZWxlY3RfbWFzdGVyX3RocmVhZF9pZChpcHZzLCBjcCk7XFxuIDU2NzpcXHRcXHRtcyA9IFxcdTAwMjZpcHZzLVxcdTAwM2Vtc1tpZF07XFxuIDU2ODpcXHRcXHRidWZmID0gbXMtXFx1MDAzZXN5bmNfYnVmZjtcXG4gNTY5OlxcdFxcdHNlcV9tYXNrID0gZmxhZ3MgXFx1MDAyNiBJUF9WU19DT05OX0ZfU0VRX01BU0s7XFxuIDU3MDpcXHRcXHRsZW4gPSBzZXFfbWFzayA/IEZVTExfQ09OTl9TSVpFIDogU0lNUExFX0NPTk5fU0laRTtcXG4gNTcxOlxcdFxcdGlmIChidWZmKSB7XFxuIDU3MjpcXHRcXHRcXHRtID0gKHN0cnVjdCBpcF92c19zeW5jX21lc2dfdjAgKikgYnVmZi1cXHUwMDNlbWVzZztcXG4gNTczOlxcdFxcdFxcdC8qIFNlbmQgYnVmZmVyIGlmIGl0IGlzIGZvciB2MSAqL1xcbiA1NzQ6XFx0XFx0XFx0aWYgKGJ1ZmYtXFx1MDAzZWhlYWQgKyBsZW4gXFx1MDAzZSBidWZmLVxcdTAwM2VlbmQgfHwgIW0tXFx1MDAzZW5yX2Nvbm5zKSB7XFxuIDU3NTpcXHRcXHRcXHRcXHRzYl9xdWV1ZV90YWlsKGlwdnMsIG1zKTtcXG4gNTc2OlxcdFxcdFxcdFxcdG1zLVxcdTAwM2VzeW5jX2J1ZmYgPSBOVUxMO1xcbiA1Nzc6XFx0XFx0XFx0XFx0YnVmZiA9IE5VTEw7XFxuIDU3ODpcXHRcXHRcXHR9XFxuIDU3OTpcXHRcXHR9XFxuIDU4MDpcXHRcXHRpZiAoIWJ1ZmYpIHtcXG4gNTgxOlxcdFxcdFxcdGJ1ZmYgPSBpcF92c19zeW5jX2J1ZmZfY3JlYXRlX3YwKGlwdnMsIGxlbik7XFxuIDU4MjpcXHRcXHRcXHRpZiAoIWJ1ZmYpIHtcXG4gNTgzOlxcdFxcdFxcdFxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZpcHZzLVxcdTAwM2VzeW5jX2J1ZmZfbG9jayk7XFxuIDU4NDpcXHRcXHRcXHRcXHRwcl9lcnIoXFxcImlwX3ZzX3N5bmNfYnVmZl9jcmVhdGUgZmFpbGVkLlxcXFxuXFxcIik7XFxuIDU4NTpcXHRcXHRcXHRcXHRyZXR1cm47XFxuIDU4NjpcXHRcXHRcXHR9XFxuIDU4NzpcXHRcXHRcXHRtcy1cXHUwMDNlc3luY19idWZmID0gYnVmZjtcXG4gNTg4OlxcdFxcdH1cXG4gNTg5OlxcdFxcbiA1OTA6XFx0XFx0bSA9IChzdHJ1Y3QgaXBfdnNfc3luY19tZXNnX3YwICopIGJ1ZmYtXFx1MDAzZW1lc2c7XFxuIDU5MTpcXHRcXHRzID0gKHN0cnVjdCBpcF92c19zeW5jX2Nvbm5fdjAgKikgYnVmZi1cXHUwMDNlaGVhZDtcXG4gNTkyOlxcdFxcbiA1OTM6XFx0XFx0LyogY29weSBtZW1iZXJzICovXFxuIDU5NDpcXHRcXHRzLVxcdTAwM2VyZXNlcnZlZCA9IDA7XFxuIDU5NTpcXHRcXHRzLVxcdTAwM2Vwcm90b2NvbCA9IGNwLVxcdTAwM2Vwcm90b2NvbDtcXG4gNTk2OlxcdFxcdHMtXFx1MDAzZWNwb3J0ID0gY3AtXFx1MDAzZWNwb3J0O1xcbiA1OTc6XFx0XFx0cy1cXHUwMDNldnBvcnQgPSBjcC1cXHUwMDNldnBvcnQ7XFxuIDU5ODpcXHRcXHRzLVxcdTAwM2VkcG9ydCA9IGNwLVxcdTAwM2VkcG9ydDtcXG4gNTk5OlxcdFxcdHMtXFx1MDAzZWNhZGRyID0gY3AtXFx1MDAzZWNhZGRyLmlwO1xcbiA2MDA6XFx0XFx0cy1cXHUwMDNldmFkZHIgPSBjcC1cXHUwMDNldmFkZHIuaXA7XFxuIDYwMTpcXHRcXHRzLVxcdTAwM2VkYWRkciA9IGNwLVxcdTAwM2VkYWRkci5pcDtcXG4gNjAyOlxcdFxcdHMtXFx1MDAzZWZsYWdzID0gaHRvbnMoZmxhZ3MgXFx1MDAyNiB+SVBfVlNfQ09OTl9GX0hBU0hFRCk7XFxuIDYwMzpcXHRcXHRzLVxcdTAwM2VzdGF0ZSA9IGh0b25zKGNwLVxcdTAwM2VzdGF0ZSk7XFxuIDYwNDpcXHRcXHRpZiAoc2VxX21hc2spIHtcXG4gNjA1OlxcdFxcdFxcdHN0cnVjdCBpcF92c19zeW5jX2Nvbm5fb3B0aW9ucyAqb3B0ID1cXG4gNjA2OlxcdFxcdFxcdFxcdChzdHJ1Y3QgaXBfdnNfc3luY19jb25uX29wdGlvbnMgKilcXHUwMDI2c1sxXTtcXG4gNjA3OlxcdFxcdFxcdG1lbWNweShvcHQsIFxcdTAwMjZjcC1cXHUwMDNlc3luY19jb25uX29wdCwgc2l6ZW9mKCpvcHQpKTtcXG4gNjA4OlxcdFxcdH1cXG4gNjA5OlxcdFxcbiA2MTA6XFx0XFx0bS1cXHUwMDNlbnJfY29ubnMrKztcXG4gNjExOlxcdFxcdG0tXFx1MDAzZXNpemUgPSBodG9ucyhudG9ocyhtLVxcdTAwM2VzaXplKSArIGxlbik7XFxuIDYxMjpcXHRcXHRidWZmLVxcdTAwM2VoZWFkICs9IGxlbjtcXG4gNjEzOlxcdFxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZpcHZzLVxcdTAwM2VzeW5jX2J1ZmZfbG9jayk7XFxuIDYxNDpcXHRcXG4gNjE1OlxcdFxcdC8qIHN5bmNocm9uaXplIGl0cyBjb250cm9sbGVyIGlmIGl0IGhhcyAqL1xcbiA2MTY6XFx0XFx0Y3AgPSBjcC1cXHUwMDNlY29udHJvbDtcXG4gNjE3OlxcdFxcdGlmIChjcCkge1xcbiA2MTg6XFx0XFx0XFx0aWYgKGNwLVxcdTAwM2VmbGFncyBcXHUwMDI2IElQX1ZTX0NPTk5fRl9URU1QTEFURSlcXG4gNjE5OlxcdFxcdFxcdFxcdHBrdHMgPSBhdG9taWNfaW5jX3JldHVybihcXHUwMDI2Y3AtXFx1MDAzZWluX3BrdHMpO1xcbiA2MjA6XFx0XFx0XFx0ZWxzZVxcbiA2MjE6XFx0XFx0XFx0XFx0cGt0cyA9IHN5c2N0bF9zeW5jX3RocmVzaG9sZChpcHZzKTtcXG4gNjIyOlxcdFxcdFxcdGlwX3ZzX3N5bmNfY29ubihpcHZzLCBjcCwgcGt0cyk7XFxuIDYyMzpcXHRcXHR9XFxuIDYyNDpcXHR9XFxuIDYyNTpcXHRcXG4gNjI2OlxcdC8qXFxuIDYyNzpcXHQgKiAgICAgIEFkZCBhbiBpcF92c19jb25uIGluZm9ybWF0aW9uIGludG8gdGhlIGN1cnJlbnQgc3luY19idWZmLlxcbiA2Mjg6XFx0ICogICAgICBDYWxsZWQgYnkgaXBfdnNfaW4uXFxuIDYyOTpcXHQgKiAgICAgIFNlbmRpbmcgVmVyc2lvbiAxIG1lc3NhZ2VzXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDE3OjQzOjQ1Ljc4OTUxMTI0NVoiLCJTZXEiOjI1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxODYyMTg3NDE1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGFzIGlmIHRoZXkncmUgbXkgb3duOlxuXG4qKkludmVzdGlnYXRpbmcgdGhlIENvbm5lY3Rpb24gU3luY2hyb25pemF0aW9uIExhbmRzY2FwZSoqXG5cbkFscmlnaHQsIEknbSB0aGlua2luZyBhYm91dCBjb25uZWN0aW9uIHN5bmNocm9uaXphdGlvbiBhbmQgSSB3YW50IHRvIGJlIHRob3JvdWdoLiBJJ3ZlIGJlZW4gbG9va2luZyBhdCBzb21lIGtleSBtZXRyaWNzLCBidXQgSSBmZWVsIGxpa2UgSSdtIG1pc3NpbmcgYSBwaWVjZSBvZiB0aGUgcHV6emxlLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEknbSBub3Qgb3Zlcmxvb2tpbmcgYW55dGhpbmcgY3J1Y2lhbC4gU29tZXRoaW5nIGluIHRoZSBiYWNrIG9mIG15IG1pbmQgaXMgdGVsbGluZyBtZSB0byBkb3VibGUtY2hlY2sgdGhhdCBgaXBfdnNfc3luY19jb25uYCBzZXR0aW5nLiBJdCdzIGEga2V5IHZhcmlhYmxlIGluIHRoaXMgcHJvY2VzcywgYW5kIGV2ZW4gdGhvdWdoIGl0IG1pZ2h0IHNlZW0gdW5yZWxhdGVkIHRvIHdoYXQgSSd2ZSBiZWVuIGNvbmNlbnRyYXRpbmcgb24sIGl0IGNvdWxkIGJlIHRoZSBseW5jaHBpbiwgb3IgYXQgbGVhc3QgYSBjb250cmlidXRpbmcgZmFjdG9yLiBJJ2xsIG5lZWQgdG8gZ28gYmFjayBhbmQgZXhhbWluZSBpdDsgaXQncyBhbHdheXMgdGhlIHVuZXhwZWN0ZWQgcGxhY2UgdGhhdCBob2xkcyB0aGUgc29sdXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU4NjUsIk91dHB1dFRva2VucyI6NDMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDE3OjQzOjQ3LjY1MTcwMTU0WiIsIlNlcSI6MjYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI1OTgzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDYzNSxcbiAgXCJMaW5lQ291bnRcIjogODBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDYzNTpcXHRcXHRzdHJ1Y3QgaXBfdnNfc3luY19idWZmICpidWZmO1xcbiA2MzY6XFx0XFx0c3RydWN0IGlwdnNfbWFzdGVyX3N5bmNfc3RhdGUgKm1zO1xcbiA2Mzc6XFx0XFx0aW50IGlkO1xcbiA2Mzg6XFx0XFx0X191OCAqcDtcXG4gNjM5OlxcdFxcdHVuc2lnbmVkIGludCBsZW4sIHBlX25hbWVfbGVuLCBwYWQ7XFxuIDY0MDpcXHRcXHR1MzIgZmxhZ3MsIHNlcV9tYXNrO1xcbiA2NDE6XFx0XFxuIDY0MjpcXHRcXHQvKiBIYW5kbGUgb2xkIHZlcnNpb24gb2YgdGhlIHByb3RvY29sICovXFxuIDY0MzpcXHRcXHRpZiAoc3lzY3RsX3N5bmNfdmVyKGlwdnMpID09IDApIHtcXG4gNjQ0OlxcdFxcdFxcdGlwX3ZzX3N5bmNfY29ubl92MChpcHZzLCBjcCwgcGt0cyk7XFxuIDY0NTpcXHRcXHRcXHRyZXR1cm47XFxuIDY0NjpcXHRcXHR9XFxuIDY0NzpcXHRcXHQvKiBEbyBub3Qgc3luYyBPTkUgUEFDS0VUICovXFxuIDY0ODpcXHRcXHRpZiAoY3AtXFx1MDAzZWZsYWdzIFxcdTAwMjYgSVBfVlNfQ09OTl9GX09ORV9QQUNLRVQpXFxuIDY0OTpcXHRcXHRcXHRnb3RvIGNvbnRyb2w7XFxuIDY1MDpcXHRzbG9vcDpcXG4gNjUxOlxcdFxcdGlmICghaXBfdnNfc3luY19jb25uX25lZWRlZChpcHZzLCBjcCwgcGt0cykpXFxuIDY1MjpcXHRcXHRcXHRnb3RvIGNvbnRyb2w7XFxuIDY1MzpcXHRcXHRmbGFncyA9IFJFQURfT05DRShjcC1cXHUwMDNlZmxhZ3MpO1xcbiA2NTQ6XFx0XFxuIDY1NTpcXHRcXHQvKiBTYW5pdHkgY2hlY2tzICovXFxuIDY1NjpcXHRcXHRwZV9uYW1lX2xlbiA9IDA7XFxuIDY1NzpcXHRcXHRpZiAoY3AtXFx1MDAzZXBlX2RhdGFfbGVuKSB7XFxuIDY1ODpcXHRcXHRcXHRpZiAoIWNwLVxcdTAwM2VwZV9kYXRhIHx8ICFjcC1cXHUwMDNlZGVzdCkge1xcbiA2NTk6XFx0XFx0XFx0XFx0SVBfVlNfRVJSX1JMKFxcXCJTWU5DLCBjb25uZWN0aW9uIHBlX2RhdGEgaW52YWxpZFxcXFxuXFxcIik7XFxuIDY2MDpcXHRcXHRcXHRcXHRyZXR1cm47XFxuIDY2MTpcXHRcXHRcXHR9XFxuIDY2MjpcXHRcXHRcXHRwZV9uYW1lX2xlbiA9IHN0cm5sZW4oY3AtXFx1MDAzZXBlLVxcdTAwM2VuYW1lLCBJUF9WU19QRU5BTUVfTUFYTEVOKTtcXG4gNjYzOlxcdFxcdH1cXG4gNjY0OlxcdFxcbiA2NjU6XFx0XFx0c3Bpbl9sb2NrX2JoKFxcdTAwMjZpcHZzLVxcdTAwM2VzeW5jX2J1ZmZfbG9jayk7XFxuIDY2NjpcXHRcXHRpZiAoIShpcHZzLVxcdTAwM2VzeW5jX3N0YXRlIFxcdTAwMjYgSVBfVlNfU1RBVEVfTUFTVEVSKSkge1xcbiA2Njc6XFx0XFx0XFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNmlwdnMtXFx1MDAzZXN5bmNfYnVmZl9sb2NrKTtcXG4gNjY4OlxcdFxcdFxcdHJldHVybjtcXG4gNjY5OlxcdFxcdH1cXG4gNjcwOlxcdFxcbiA2NzE6XFx0XFx0aWQgPSBzZWxlY3RfbWFzdGVyX3RocmVhZF9pZChpcHZzLCBjcCk7XFxuIDY3MjpcXHRcXHRtcyA9IFxcdTAwMjZpcHZzLVxcdTAwM2Vtc1tpZF07XFxuIDY3MzpcXHRcXG4gNjc0OlxcdCNpZmRlZiBDT05GSUdfSVBfVlNfSVBWNlxcbiA2NzU6XFx0XFx0aWYgKGNwLVxcdTAwM2VhZiA9PSBBRl9JTkVUNilcXG4gNjc2OlxcdFxcdFxcdGxlbiA9IHNpemVvZihzdHJ1Y3QgaXBfdnNfc3luY192Nik7XFxuIDY3NzpcXHRcXHRlbHNlXFxuIDY3ODpcXHQjZW5kaWZcXG4gNjc5OlxcdFxcdFxcdGxlbiA9IHNpemVvZihzdHJ1Y3QgaXBfdnNfc3luY192NCk7XFxuIDY4MDpcXHRcXG4gNjgxOlxcdFxcdHNlcV9tYXNrID0gZmxhZ3MgXFx1MDAyNiBJUF9WU19DT05OX0ZfU0VRX01BU0s7XFxuIDY4MjpcXHRcXHRpZiAoc2VxX21hc2spXFxuIDY4MzpcXHRcXHRcXHRsZW4gKz0gc2l6ZW9mKHN0cnVjdCBpcF92c19zeW5jX2Nvbm5fb3B0aW9ucykgKyAyO1xcbiA2ODQ6XFx0XFxuIDY4NTpcXHRcXHRpZiAoY3AtXFx1MDAzZXBlX2RhdGFfbGVuKVxcbiA2ODY6XFx0XFx0XFx0bGVuICs9IGNwLVxcdTAwM2VwZV9kYXRhX2xlbiArIDI7XFx0LyogKyBQYXJhbSBoZHIgZmllbGQgKi9cXG4gNjg3OlxcdFxcdGlmIChwZV9uYW1lX2xlbilcXG4gNjg4OlxcdFxcdFxcdGxlbiArPSBwZV9uYW1lX2xlbiArIDI7XFxuIDY4OTpcXHRcXG4gNjkwOlxcdFxcdC8qIGNoZWNrIGlmIHRoZXJlIGlzIGEgc3BhY2UgZm9yIHRoaXMgb25lICAqL1xcbiA2OTE6XFx0XFx0cGFkID0gMDtcXG4gNjkyOlxcdFxcdGJ1ZmYgPSBtcy1cXHUwMDNlc3luY19idWZmO1xcbiA2OTM6XFx0XFx0aWYgKGJ1ZmYpIHtcXG4gNjk0OlxcdFxcdFxcdG0gPSBidWZmLVxcdTAwM2VtZXNnO1xcbiA2OTU6XFx0XFx0XFx0cGFkID0gKDQgLSAoc2l6ZV90KSBidWZmLVxcdTAwM2VoZWFkKSBcXHUwMDI2IDM7XFxuIDY5NjpcXHRcXHRcXHQvKiBTZW5kIGJ1ZmZlciBpZiBpdCBpcyBmb3IgdjAgKi9cXG4gNjk3OlxcdFxcdFxcdGlmIChidWZmLVxcdTAwM2VoZWFkICsgbGVuICsgcGFkIFxcdTAwM2UgYnVmZi1cXHUwMDNlZW5kIHx8IG0tXFx1MDAzZXJlc2VydmVkKSB7XFxuIDY5ODpcXHRcXHRcXHRcXHRzYl9xdWV1ZV90YWlsKGlwdnMsIG1zKTtcXG4gNjk5OlxcdFxcdFxcdFxcdG1zLVxcdTAwM2VzeW5jX2J1ZmYgPSBOVUxMO1xcbiA3MDA6XFx0XFx0XFx0XFx0YnVmZiA9IE5VTEw7XFxuIDcwMTpcXHRcXHRcXHRcXHRwYWQgPSAwO1xcbiA3MDI6XFx0XFx0XFx0fVxcbiA3MDM6XFx0XFx0fVxcbiA3MDQ6XFx0XFxuIDcwNTpcXHRcXHRpZiAoIWJ1ZmYpIHtcXG4gNzA2OlxcdFxcdFxcdGJ1ZmYgPSBpcF92c19zeW5jX2J1ZmZfY3JlYXRlKGlwdnMsIGxlbik7XFxuIDcwNzpcXHRcXHRcXHRpZiAoIWJ1ZmYpIHtcXG4gNzA4OlxcdFxcdFxcdFxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZpcHZzLVxcdTAwM2VzeW5jX2J1ZmZfbG9jayk7XFxuIDcwOTpcXHRcXHRcXHRcXHRwcl9lcnIoXFxcImlwX3ZzX3N5bmNfYnVmZl9jcmVhdGUgZmFpbGVkLlxcXFxuXFxcIik7XFxuIDcxMDpcXHRcXHRcXHRcXHRyZXR1cm47XFxuIDcxMTpcXHRcXHRcXHR9XFxuIDcxMjpcXHRcXHRcXHRtcy1cXHUwMDNlc3luY19idWZmID0gYnVmZjtcXG4gNzEzOlxcdFxcdFxcdG0gPSBidWZmLVxcdTAwM2VtZXNnO1xcbiA3MTQ6XFx0XFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxNzo0Mzo0Ny42NTE5NjQzOFoiLCJTZXEiOjI3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMTU2MzEyMjEwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCBwcmVzZW50ZWQgYXMgaWYgaXQgd2VyZSBteSBvd24gaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKkRpdmluZyBEZWVwZXIgaW50byBgaXBfdnNfc3luY19jb25uYCoqXG5cbkFscmlnaHQsIHNvIHdlJ3JlIGxvb2tpbmcgYXQgYGlwX3ZzX3N5bmNfY29ubmAuIEdvb2QsIGdvb2QuIEkgbmVlZCB0byBnZXQgYSBiZXR0ZXIgaGFuZGxlIG9uIHRoZSBjb250ZXh0IG9mICpldmVyeXRoaW5nKiB0aGF0IHRvdWNoZXMgdGhpcy4gVGhpcyBpcyB3aGVyZSB0aGUgbWFnaWMgKG9yIHRoZSBwcm9ibGVtcykgbGlrZWx5IHJlc2lkZSB3aGVuIHdlJ3JlIHRhbGtpbmcgYWJvdXQgY29ubmVjdGlvbiBzeW5jaHJvbml6YXRpb24gaW4gSVBWUy4gTGV0J3MgZGlnIGRlZXBlciBpbnRvIHRoZSBjb2RlIHRoYXQncyBhbHJlYWR5IGluIG1lbW9yeS4gSSB3b25kZXIgaWYgdGhlcmUgYXJlIGFueSBvYnZpb3VzIHJlZCBmbGFncyBpbiB0ZXJtcyBvZiBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlcywgYnVmZmVyIHNpemVzLCBvciBwb3RlbnRpYWwgZm9yIHJhY2UgY29uZGl0aW9ucy4gSSBzaG91bGQgcHJvYmFibHkgYmUgdGhpbmtpbmcgYWJvdXQgaXRzIGludGVyYWN0aW9uIHdpdGggdGhlIG90aGVyIHN5bmNocm9uaXphdGlvbiBtZWNoYW5pc21zIGluIHRoZSBrZXJuZWwsIHN1Y2ggYXMgc3BpbmxvY2tzIGFuZCBtdXRleGVzLiBJcyB0aGlzIGEgY29tbW9uIGhvdHNwb3Q/IFRpbWUgdG8gZG8gc29tZSBkaWdnaW5nLiBUaW1lIHRvIHNlZSB3aGF0J3MgYWN0dWFsbHkgKnRoZXJlKi5cblxuXG4iLCJJbnB1dFRva2VucyI6NzM0MywiT3V0cHV0VG9rZW5zIjo0MywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTc6NDM6NDkuODA4MjgxODJaIiwiU2VxIjoyOCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzA4MjQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNzE1LFxuICBcIkxpbmVDb3VudFwiOiA2MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNzE1OlxcdFxcbiA3MTY6XFx0XFx0cCA9IGJ1ZmYtXFx1MDAzZWhlYWQ7XFxuIDcxNzpcXHRcXHRidWZmLVxcdTAwM2VoZWFkICs9IHBhZCArIGxlbjtcXG4gNzE4OlxcdFxcdG0tXFx1MDAzZXNpemUgPSBodG9ucyhudG9ocyhtLVxcdTAwM2VzaXplKSArIHBhZCArIGxlbik7XFxuIDcxOTpcXHRcXHQvKiBBZGQgZXYuIHBhZGRpbmcgZnJvbSBwcmV2LiBzeW5jX2Nvbm4gKi9cXG4gNzIwOlxcdFxcdHdoaWxlIChwYWQtLSlcXG4gNzIxOlxcdFxcdFxcdCoocCsrKSA9IDA7XFxuIDcyMjpcXHRcXG4gNzIzOlxcdFxcdHMgPSAodW5pb24gaXBfdnNfc3luY19jb25uICopcDtcXG4gNzI0OlxcdFxcbiA3MjU6XFx0XFx0LyogU2V0IG1lc3NhZ2UgdHlwZSAgXFx1MDAyNiBjb3B5IG1lbWJlcnMgKi9cXG4gNzI2OlxcdFxcdHMtXFx1MDAzZXY0LnR5cGUgPSAoY3AtXFx1MDAzZWFmID09IEFGX0lORVQ2ID8gU1RZUEVfRl9JTkVUNiA6IDApO1xcbiA3Mjc6XFx0XFx0cy1cXHUwMDNldjQudmVyX3NpemUgPSBodG9ucyhsZW4gXFx1MDAyNiBTVkVSX01BU0spO1xcdC8qIFZlcnNpb24gMCAqL1xcbiA3Mjg6XFx0XFx0cy1cXHUwMDNldjQuZmxhZ3MgPSBodG9ubChmbGFncyBcXHUwMDI2IH5JUF9WU19DT05OX0ZfSEFTSEVEKTtcXG4gNzI5OlxcdFxcdHMtXFx1MDAzZXY0LnN0YXRlID0gaHRvbnMoY3AtXFx1MDAzZXN0YXRlKTtcXG4gNzMwOlxcdFxcdHMtXFx1MDAzZXY0LnByb3RvY29sID0gY3AtXFx1MDAzZXByb3RvY29sO1xcbiA3MzE6XFx0XFx0cy1cXHUwMDNldjQuY3BvcnQgPSBjcC1cXHUwMDNlY3BvcnQ7XFxuIDczMjpcXHRcXHRzLVxcdTAwM2V2NC52cG9ydCA9IGNwLVxcdTAwM2V2cG9ydDtcXG4gNzMzOlxcdFxcdHMtXFx1MDAzZXY0LmRwb3J0ID0gY3AtXFx1MDAzZWRwb3J0O1xcbiA3MzQ6XFx0XFx0cy1cXHUwMDNldjQuZndtYXJrID0gaHRvbmwoY3AtXFx1MDAzZWZ3bWFyayk7XFxuIDczNTpcXHRcXHRzLVxcdTAwM2V2NC50aW1lb3V0ID0gaHRvbmwoY3AtXFx1MDAzZXRpbWVvdXQgLyBIWik7XFxuIDczNjpcXHRcXHRtLVxcdTAwM2Vucl9jb25ucysrO1xcbiA3Mzc6XFx0XFxuIDczODpcXHQjaWZkZWYgQ09ORklHX0lQX1ZTX0lQVjZcXG4gNzM5OlxcdFxcdGlmIChjcC1cXHUwMDNlYWYgPT0gQUZfSU5FVDYpIHtcXG4gNzQwOlxcdFxcdFxcdHAgKz0gc2l6ZW9mKHN0cnVjdCBpcF92c19zeW5jX3Y2KTtcXG4gNzQxOlxcdFxcdFxcdHMtXFx1MDAzZXY2LmNhZGRyID0gY3AtXFx1MDAzZWNhZGRyLmluNjtcXG4gNzQyOlxcdFxcdFxcdHMtXFx1MDAzZXY2LnZhZGRyID0gY3AtXFx1MDAzZXZhZGRyLmluNjtcXG4gNzQzOlxcdFxcdFxcdHMtXFx1MDAzZXY2LmRhZGRyID0gY3AtXFx1MDAzZWRhZGRyLmluNjtcXG4gNzQ0OlxcdFxcdH0gZWxzZVxcbiA3NDU6XFx0I2VuZGlmXFxuIDc0NjpcXHRcXHR7XFxuIDc0NzpcXHRcXHRcXHRwICs9IHNpemVvZihzdHJ1Y3QgaXBfdnNfc3luY192NCk7XFx0Lyogb3B0aW9ucyBwdHIgKi9cXG4gNzQ4OlxcdFxcdFxcdHMtXFx1MDAzZXY0LmNhZGRyID0gY3AtXFx1MDAzZWNhZGRyLmlwO1xcbiA3NDk6XFx0XFx0XFx0cy1cXHUwMDNldjQudmFkZHIgPSBjcC1cXHUwMDNldmFkZHIuaXA7XFxuIDc1MDpcXHRcXHRcXHRzLVxcdTAwM2V2NC5kYWRkciA9IGNwLVxcdTAwM2VkYWRkci5pcDtcXG4gNzUxOlxcdFxcdH1cXG4gNzUyOlxcdFxcdGlmIChzZXFfbWFzaykge1xcbiA3NTM6XFx0XFx0XFx0KihwKyspID0gSVBWU19PUFRfU0VRX0RBVEE7XFxuIDc1NDpcXHRcXHRcXHQqKHArKykgPSBzaXplb2Yoc3RydWN0IGlwX3ZzX3N5bmNfY29ubl9vcHRpb25zKTtcXG4gNzU1OlxcdFxcdFxcdGh0b25fc2VxKFxcdTAwMjZjcC1cXHUwMDNlaW5fc2VxLCAoc3RydWN0IGlwX3ZzX3NlcSAqKXApO1xcbiA3NTY6XFx0XFx0XFx0cCArPSBzaXplb2Yoc3RydWN0IGlwX3ZzX3NlcSk7XFxuIDc1NzpcXHRcXHRcXHRodG9uX3NlcShcXHUwMDI2Y3AtXFx1MDAzZW91dF9zZXEsIChzdHJ1Y3QgaXBfdnNfc2VxICopcCk7XFxuIDc1ODpcXHRcXHRcXHRwICs9IHNpemVvZihzdHJ1Y3QgaXBfdnNfc2VxKTtcXG4gNzU5OlxcdFxcdH1cXG4gNzYwOlxcdFxcdC8qIEhhbmRsZSBwZSBkYXRhICovXFxuIDc2MTpcXHRcXHRpZiAoY3AtXFx1MDAzZXBlX2RhdGFfbGVuIFxcdTAwMjZcXHUwMDI2IGNwLVxcdTAwM2VwZV9kYXRhKSB7XFxuIDc2MjpcXHRcXHRcXHQqKHArKykgPSBJUFZTX09QVF9QRV9EQVRBO1xcbiA3NjM6XFx0XFx0XFx0KihwKyspID0gY3AtXFx1MDAzZXBlX2RhdGFfbGVuO1xcbiA3NjQ6XFx0XFx0XFx0bWVtY3B5KHAsIGNwLVxcdTAwM2VwZV9kYXRhLCBjcC1cXHUwMDNlcGVfZGF0YV9sZW4pO1xcbiA3NjU6XFx0XFx0XFx0cCArPSBjcC1cXHUwMDNlcGVfZGF0YV9sZW47XFxuIDc2NjpcXHRcXHRcXHRpZiAocGVfbmFtZV9sZW4pIHtcXG4gNzY3OlxcdFxcdFxcdFxcdC8qIEFkZCBQRV9OQU1FICovXFxuIDc2ODpcXHRcXHRcXHRcXHQqKHArKykgPSBJUFZTX09QVF9QRV9OQU1FO1xcbiA3Njk6XFx0XFx0XFx0XFx0KihwKyspID0gcGVfbmFtZV9sZW47XFxuIDc3MDpcXHRcXHRcXHRcXHRtZW1jcHkocCwgY3AtXFx1MDAzZXBlLVxcdTAwM2VuYW1lLCBwZV9uYW1lX2xlbik7XFxuIDc3MTpcXHRcXHRcXHRcXHRwICs9IHBlX25hbWVfbGVuO1xcbiA3NzI6XFx0XFx0XFx0fVxcbiA3NzM6XFx0XFx0fVxcbiA3NzQ6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDE3OjQzOjQ5LjgwODU5Mzc3WiIsIlNlcSI6MjksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjkxNDc5ODIwOTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBCdWcgRml4OiBBIERlZXAgRGl2ZSoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IHJldmVhbHMgYSBjbGFzc2ljIHJhY2UgY29uZGl0aW9uIGluIHRoZSBgaXBfdnNfc3luY19jb25uX3YwYCBhbmQgYGlwX3ZzX3N5bmNfY29ubmAgZnVuY3Rpb25zLiBUaGUgY29yZSBpc3N1ZSBpcyB0aGUgbXVsdGlwbGUsIHVuc3luY2hyb25pemVkIHJlYWRzIG9mIGBjcC1cdTAwM2VmbGFnc2AuIFRoZSBwb3RlbnRpYWwgZm9yIHRyb3VibGUgYXJpc2VzIHdoZW4gd2UgZXZhbHVhdGUgYGNwLVx1MDAzZWZsYWdzIFx1MDAyNiBJUF9WU19DT05OX0ZfU0VRX01BU0tgIGZvciBsZW5ndGggY2FsY3VsYXRpb24gKGBsZW5gKSBhbmQgdGhlbiwgKmJlZm9yZSogYWN0dWFsbHkgdXNpbmcgdGhhdCBjYWxjdWxhdGVkIGxlbmd0aCwgYGNwLVx1MDAzZWZsYWdzYCBjaGFuZ2VzIGNvbmN1cnJlbnRseS5cblxuVGhpcyBjYW4gcmVzdWx0IGluIHR3byB1bmRlc2lyYWJsZSBzY2VuYXJpb3M6XG5cbjEuICAqKkJ1ZmZlciBPdmVyZmxvdzoqKiBJZiBgY3AtXHUwMDNlZmxhZ3NgIHRyYW5zaXRpb25zIGZyb20gMCB0byBgU0VRX01BU0tgICphZnRlciogYGxlbmAgaXMgY2FsY3VsYXRlZCB3aXRob3V0IGNvbnNpZGVyaW5nIHNlcXVlbmNlIGRhdGEgc3BhY2UsIGJ1dCAqYmVmb3JlKiB0aGUgYGlmYCBzdGF0ZW1lbnQgaXMgZXhlY3V0ZWQsIHRoZSBgaWZgIGJyYW5jaCBnZXRzIHRha2VuLCB3cml0aW5nIGJleW9uZCB0aGUgYWxsb2NhdGVkIGJ1ZmZlciBzcGFjZS5cbjIuICAqKlVuZmlsbGVkIEJ1ZmZlcjoqKiBDb252ZXJzZWx5LCBpZiBgY3AtXHUwMDNlZmxhZ3NgIGZsaXBzIGZyb20gYFNFUV9NQVNLYCB0byAwLCBgbGVuYCBpcyBjYWxjdWxhdGVkICp3aXRoKiBzZXF1ZW5jZSBzcGFjZSwgYnV0IHRoZSBgaWZgIGlzIHNraXBwZWQuIFRoaXMgbGVhdmVzIHRoZSBidWZmZXIgcGFydGlhbGx5IGZpbGxlZCwgYXMgYGxlbmAgYnl0ZXMgYXJlIGFjY291bnRlZCBmb3IsIGJ1dCB0aGUgdGFpbCBvZiB0aGUgYnVmZmVyIGlzbid0IHBvcHVsYXRlZC5cblxuVGhlIHBhdGNoJ3Mgc29sdXRpb24gaXMgZWxlZ2FudDogaXQgdXNlcyBgUkVBRF9PTkNFKGNwLVx1MDAzZWZsYWdzKWAgdG8gZ3JhYiBhICpzaW5nbGUsIGNvbnNpc3RlbnQqIHNuYXBzaG90IG9mIGBjcC1cdTAwM2VmbGFnc2AgaW50byBhIGxvY2FsIHZhcmlhYmxlLCBgZmxhZ3NgLiBUaGVuLCBgc2VxX21hc2tgIGlzIGRlcml2ZWQgZnJvbSB0aGF0IHNuYXBzaG90LiBUaGlzIGVuc3VyZXMgYm90aCBgbGVuYCBjYWxjdWxhdGlvbiBhbmQgc3Vic2VxdWVudCBkYXRhIGVtaXNzaW9uIHVzZSB0aGUgKmV4YWN0IHNhbWUqIHZhbHVlLlxuXG5Ob3csIGxldCdzIGFkZHJlc3MgdGhlIGNydWNpYWwgcXVlc3Rpb246IGRvZXMgdGhpcyBpbnRyb2R1Y2UgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3M/IFRoaXMgaXMgd2hlcmUgbXkgS01TQU4ga25vd2xlZGdlIGNvbWVzIGludG8gcGxheS4gS01TQU4gaXMgdGhlIHRvb2wgdGhhdCBmbGFncyByZWFkcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeS4gQnV0LCBoZXJlJ3Mgd2hhdCBJIHNlZTpcblxuKiAgIEtNU0FOIGZvY3VzZXMgb24ga2VybmVsLXRvLXVzZXIgaW5mby1sZWFrcyBhbmQgcmVhZHMgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkuXG4qICAgS0FTQU4vS0NTQU4gaGFuZGxlIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMvb3ZlcmZsb3dzIGFuZCBkYXRhIHJhY2VzLlxuKiAgIFRoZSBmaXggYWRkcmVzc2VzICpjb25jdXJyZW5jeSogKGRhdGEgcmFjZSBvbiBgY3AtXHUwMDNlZmxhZ3NgKS5cbiogICBgZmxhZ3NgIGlzIGluaXRpYWxpemVkIHdpdGggYFJFQURfT05DRShjcC1cdTAwM2VmbGFncylgLlxuKiAgIGBzZXFfbWFza2AgaXMgaW5pdGlhbGl6ZWQgd2l0aCBgZmxhZ3MgXHUwMDI2IElQX1ZTX0NPTk5fRl9TRVFfTUFTS2AuXG5cblRoZXJlIGFyZSBubyBuZXcgYnVmZmVycywgc3RydWN0dXJlcywgcGFkZGluZywgb3IgdW5pbml0aWFsaXplZCByZWFkcyBpbnRyb2R1Y2VkLiBBbGwgdmFyaWFibGVzIGFyZSBzY2FsYXIgYW5kIGluaXRpYWxpemVkIGRpcmVjdGx5IGF0IGRlY2xhcmF0aW9uL3VzZS4gTm8gdXNlcnNwYWNlIGNvcHkgZnVuY3Rpb25zIGFyZSB0b3VjaGVkLiBObyB1bmluaXRpYWxpemVkIGZpZWxkcyBhcmUgcmVhZC5cblxuVGhlcmVmb3JlLCB0aGlzIGlzIHNvbGVseSBhIGNvbmN1cnJlbmN5L3JhY2UtY29uZGl0aW9uIGZpeC4gSXQgKnByZXZlbnRzKiBvdXQtb2YtYm91bmRzIHdyaXRlcyBvciBtZXNzYWdlIGNvcnJ1cHRpb24uIEtNU0FOIGlzIG5vdCByZXF1aXJlZC4gS0FTQU4vS0NTQU4gYXJlIHRoZSBjb3JyZWN0IGRldGVjdG9ycyBiZWNhdXNlIHRoZXkgaGFuZGxlIHRoZSByZWxldmFudCBidWcgY2xhc3NlcyBvZiB0aGlzIHR5cGUgKE9PQiwgY29uY3VycmVuY3kpLlxuXG5MZXQncyBkb3VibGUtY2hlY2sgdGhlIHJlcXVpcmVtZW50czpcblxuMS4gIE5vIGtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlcnNwYWNlIHdoZXJlIHBhZGRpbmcgbWlnaHQgYmUgdW5pbml0aWFsaXplZC5cbjIuICBObyBjb25kaXRpb25hbCBsb2dpYyBkZXBlbmRlbnQgb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMuXG4zLiAgTm8gY29tcGxleCBkYXRhIHN0cnVjdHVyZSBhbGxvY2F0aW9uIHRoYXQgY291bGQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgZmllbGRzLlxuNC4gIE5vIGxlbmd0aC9ib3VuZHMgbG9naWMgdGhhdCBleHBvc2VzIHVuaW5pdGlhbGl6ZWQgYnl0ZXMuXG5cbktNU0FOIFJlYXNvbmluZzpcblxuVGhlIHBhdGNoIGludHJvZHVjZXMgYFJFQURfT05DRWAgdG8gZW5zdXJlIGNvbnNpc3RlbnQgZXZhbHVhdGlvbiBvZiBgc2VxX21hc2tgIGZvciBzeW5jIGJ1ZmZlciBsZW5ndGggY2FsY3VsYXRpb24gYW5kIHNlcmlhbGl6YXRpb24sIHRodXMgcmVzb2x2aW5nIGEgcmFjZSBjb25kaXRpb24uIFRoZSByYWNlIHByZXZpb3VzbHkgbGVkIHRvIHBvdGVudGlhbCBidWZmZXIgb3V0LW9mLWJvdW5kcyBvciBtZXNzYWdlIGNvcnJ1cHRpb24gaWYgYGNwLVx1MDAzZWZsYWdzYCBjaGFuZ2VkIGNvbmN1cnJlbnRseSwgYSBwcm9ibGVtIHRoYXQgS0FTQU4gYW5kIEtDU0FOIHByb3Blcmx5IGFkZHJlc3MuIEtNU0FOIGlzIG5vdCBuZWVkZWQgYmVjYXVzZSBhbGwgdmFyaWFibGVzIGFyZSBmdWxseSBpbml0aWFsaXplZCBzY2FsYXJzLCB3aXRoIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWQsIGFsbG9jYXRlZCwgb3IgY29waWVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4Njc4LCJPdXRwdXRUb2tlbnMiOjE5NSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjk0NywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDE3OjQzOjU4Ljk1NjU3OTI5NFoiLCJTZXEiOjMwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI0OTUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcmVzc2VzIGEgY29uY3VycmVuY3kgaXNzdWUgaW4gSVBWUyBjb25uZWN0aW9uIHN5bmNocm9uaXphdGlvbiAoaXBfdnNfc3luY19jb25uIGFuZCBpcF92c19zeW5jX2Nvbm5fdjApIHdoZXJlIGNwLVxcdTAwM2VmbGFncyB3YXMgcmVhZCBtdWx0aXBsZSB0aW1lcyB3aXRob3V0IFJFQURfT05DRSwgcG90ZW50aWFsbHkgY2F1c2luZyBhIG1pc21hdGNoIGJldHdlZW4gdGhlIGNhbGN1bGF0ZWQgYnVmZmVyIGxlbmd0aCBhbmQgdGhlIGFjdHVhbCBkYXRhIHdyaXR0ZW4gaWYgZmxhZ3Mgd2VyZSBtb2RpZmllZCBjb25jdXJyZW50bHkuXFxuXFxuVGhlIGZpeCBpbnRyb2R1Y2VzIGxvY2FsIHNjYWxhciB2YXJpYWJsZXMgKGZsYWdzLCBzZXFfbWFzaykgdGhhdCBhcmUgaW1tZWRpYXRlbHkgaW5pdGlhbGl6ZWQgdmlhIFJFQURfT05DRShjcC1cXHUwMDNlZmxhZ3MpLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSB1bmluaXRpYWxpemVkIHN0YWNrIG9yIGhlYXAgYWxsb2NhdGlvbnMsIHVuaW5pdGlhbGl6ZWQgc3RydWN0dXJlIGZpZWxkcywgaW5mby1sZWFrcyB0byB1c2Vyc3BhY2UsIG9yIHJlYWRzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGUgcmlza3MgYXNzb2NpYXRlZCB3aXRoIHRoZSBvcmlnaW5hbCByYWNlIGNvbmRpdGlvbiAob3V0LW9mLWJvdW5kcyBidWZmZXIgd3JpdGVzIC8gZGF0YSBjb3JydXB0aW9uKSBhcmUgY292ZXJlZCBieSBLQVNBTiBhbmQgS0NTQU4sIHNvIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHJlc3NlcyBhIGNvbmN1cnJlbmN5IGlzc3VlIGluIElQVlMgY29ubmVjdGlvbiBzeW5jaHJvbml6YXRpb24gKGlwX3ZzX3N5bmNfY29ubiBhbmQgaXBfdnNfc3luY19jb25uX3YwKSB3aGVyZSBjcC1cXHUwMDNlZmxhZ3Mgd2FzIHJlYWQgbXVsdGlwbGUgdGltZXMgd2l0aG91dCBSRUFEX09OQ0UsIHBvdGVudGlhbGx5IGNhdXNpbmcgYSBtaXNtYXRjaCBiZXR3ZWVuIHRoZSBjYWxjdWxhdGVkIGJ1ZmZlciBsZW5ndGggYW5kIHRoZSBhY3R1YWwgZGF0YSB3cml0dGVuIGlmIGZsYWdzIHdlcmUgbW9kaWZpZWQgY29uY3VycmVudGx5LlxcblxcblRoZSBmaXggaW50cm9kdWNlcyBsb2NhbCBzY2FsYXIgdmFyaWFibGVzIChmbGFncywgc2VxX21hc2spIHRoYXQgYXJlIGltbWVkaWF0ZWx5IGluaXRpYWxpemVkIHZpYSBSRUFEX09OQ0UoY3AtXFx1MDAzZWZsYWdzKS4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgdW5pbml0aWFsaXplZCBzdGFjayBvciBoZWFwIGFsbG9jYXRpb25zLCB1bmluaXRpYWxpemVkIHN0cnVjdHVyZSBmaWVsZHMsIGluZm8tbGVha3MgdG8gdXNlcnNwYWNlLCBvciByZWFkcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhlIHJpc2tzIGFzc29jaWF0ZWQgd2l0aCB0aGUgb3JpZ2luYWwgcmFjZSBjb25kaXRpb24gKG91dC1vZi1ib3VuZHMgYnVmZmVyIHdyaXRlcyAvIGRhdGEgY29ycnVwdGlvbikgYXJlIGNvdmVyZWQgYnkgS0FTQU4gYW5kIEtDU0FOLCBzbyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowmpbfx[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-09 16:59:27 +0000 UTC FinishedAt: 2026-09-09 17:44:00 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "nf", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git", "commit_hash": "a401a9d547c50ef34db1088cc1fb9a201a7af657", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "IP_VS", "NETFILTER", "INET" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "nf", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git", "commit_hash": "a401a9d547c50ef34db1088cc1fb9a201a7af657", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "IP_VS", "NETFILTER", "INET" ], "series_id": "a8939cd2-3461-4726-8668-65da8a001409" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "ip_vs_sync_conn", "ip_vs_sync_conn_v0" ], "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+CgkJCTx0ZD4yMDI2LzA5LzA5IDE3OjQzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lQX1ZTJiMzNDssCiAgICAmIzM0O05FVEZJTFRFUiYjMzQ7LAogICAgJiMzNDtJTkVUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aXBfdnNfc3luY19jb25uJiMzNDssCiAgICAmIzM0O2lwX3ZzX3N5bmNfY29ubl92MCYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHJlc3NlcyBhIGNvbmN1cnJlbmN5IGlzc3VlIGluIElQVlMgY29ubmVjdGlvbiBzeW5jaHJvbml6YXRpb24gKGlwX3ZzX3N5bmNfY29ubiBhbmQgaXBfdnNfc3luY19jb25uX3YwKSB3aGVyZSBjcC1cdTAwM2VmbGFncyB3YXMgcmVhZCBtdWx0aXBsZSB0aW1lcyB3aXRob3V0IFJFQURfT05DRSwgcG90ZW50aWFsbHkgY2F1c2luZyBhIG1pc21hdGNoIGJldHdlZW4gdGhlIGNhbGN1bGF0ZWQgYnVmZmVyIGxlbmd0aCBhbmQgdGhlIGFjdHVhbCBkYXRhIHdyaXR0ZW4gaWYgZmxhZ3Mgd2VyZSBtb2RpZmllZCBjb25jdXJyZW50bHkuXG5cblRoZSBmaXggaW50cm9kdWNlcyBsb2NhbCBzY2FsYXIgdmFyaWFibGVzIChmbGFncywgc2VxX21hc2spIHRoYXQgYXJlIGltbWVkaWF0ZWx5IGluaXRpYWxpemVkIHZpYSBSRUFEX09OQ0UoY3AtXHUwMDNlZmxhZ3MpLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSB1bmluaXRpYWxpemVkIHN0YWNrIG9yIGhlYXAgYWxsb2NhdGlvbnMsIHVuaW5pdGlhbGl6ZWQgc3RydWN0dXJlIGZpZWxkcywgaW5mby1sZWFrcyB0byB1c2Vyc3BhY2UsIG9yIHJlYWRzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGUgcmlza3MgYXNzb2NpYXRlZCB3aXRoIHRoZSBvcmlnaW5hbCByYWNlIGNvbmRpdGlvbiAob3V0LW9mLWJvdW5kcyBidWZmZXIgd3JpdGVzIC8gZGF0YSBjb3JydXB0aW9uKSBhcmUgY292ZXJlZCBieSBLQVNBTiBhbmQgS0NTQU4sIHNvIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyByZWFjaGFibGUgbmV0d29ya2luZyBjb2RlIGluIHRoZSBJUFZTIGNvbm5lY3Rpb24gc3luY2hyb25pemF0aW9uIHN1YnN5c3RlbSAobmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYykuIEl0IHVzZXMgUkVBRF9PTkNFIGFuZCBjYWNoZXMgY3AtXHUwMDNlZmxhZ3MgbG9jYWxseSB0byBhdm9pZCBkYXRhIHJhY2VzIGFuZCBpbmNvbnNpc3RlbmNpZXMgYmV0d2VlbiBwYWNrZXQgbGVuZ3RoIGNhbGN1bGF0aW9uIGFuZCBzZXF1ZW5jZSBvcHRpb24gc2VyaWFsaXphdGlvbi4gRnV6emluZyBpcyB3YXJyYW50ZWQgdG8gdGVzdCBzeW5jaHJvbml6YXRpb24gbWVzc2FnZSBjb25zdHJ1Y3Rpb24gYW5kIHN0YXRlIGhhbmRsaW5nIHVuZGVyIGNvbmN1cnJlbmN5LiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDE3OjQzPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgMzU1ZWQxYmZiN2Q1ZjYyNDNlZWFlNGI3M2ExODc5NGU2MTBmOGNlNlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgU2VwIDkgMTc6NDI6NTkgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmNcbmluZGV4IDUzODNhZWFmYjBhZWQuLmRmYTg0ODdlYzBjMjAgMTAwNjQ0XG4tLS0gYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jXG5AQCAtNTQzLDEzICYjNDM7NTQzLDE1IEBAIHN0YXRpYyB2b2lkIGlwX3ZzX3N5bmNfY29ubl92MChzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLFxuIFx0c3RydWN0IGlwX3ZzX3N5bmNfY29ubl92MCAqcztcbiBcdHN0cnVjdCBpcF92c19zeW5jX2J1ZmYgKmJ1ZmY7XG4gXHRzdHJ1Y3QgaXB2c19tYXN0ZXJfc3luY19zdGF0ZSAqbXM7XG4tXHRpbnQgaWQ7XG4mIzQzO1x0dTMyIGZsYWdzLCBzZXFfbWFzaztcbiBcdHVuc2lnbmVkIGludCBsZW47XG4mIzQzO1x0aW50IGlkO1xuIFxuIFx0aWYgKHVubGlrZWx5KGNwLVx1MDAzZWFmICE9IEFGX0lORVQpKVxuIFx0XHRyZXR1cm47XG4mIzQzO1x0ZmxhZ3MgPSBSRUFEX09OQ0UoY3AtXHUwMDNlZmxhZ3MpO1xuIFx0LyogRG8gbm90IHN5bmMgT05FIFBBQ0tFVCAqL1xuLVx0aWYgKGNwLVx1MDAzZWZsYWdzIFx1MDAyNiBJUF9WU19DT05OX0ZfT05FX1BBQ0tFVClcbiYjNDM7XHRpZiAoZmxhZ3MgXHUwMDI2IElQX1ZTX0NPTk5fRl9PTkVfUEFDS0VUKVxuIFx0XHRyZXR1cm47XG4gXG4gXHRpZiAoIWlwX3ZzX3N5bmNfY29ubl9uZWVkZWQoaXB2cywgY3AsIHBrdHMpKVxuQEAgLTU2NCw4ICYjNDM7NTY2LDggQEAgc3RhdGljIHZvaWQgaXBfdnNfc3luY19jb25uX3YwKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsXG4gXHRpZCA9IHNlbGVjdF9tYXN0ZXJfdGhyZWFkX2lkKGlwdnMsIGNwKTtcbiBcdG1zID0gXHUwMDI2aXB2cy1cdTAwM2Vtc1tpZF07XG4gXHRidWZmID0gbXMtXHUwMDNlc3luY19idWZmO1xuLVx0bGVuID0gKGNwLVx1MDAzZWZsYWdzIFx1MDAyNiBJUF9WU19DT05OX0ZfU0VRX01BU0spID8gRlVMTF9DT05OX1NJWkUgOlxuLVx0XHRTSU1QTEVfQ09OTl9TSVpFO1xuJiM0MztcdHNlcV9tYXNrID0gZmxhZ3MgXHUwMDI2IElQX1ZTX0NPTk5fRl9TRVFfTUFTSztcbiYjNDM7XHRsZW4gPSBzZXFfbWFzayA/IEZVTExfQ09OTl9TSVpFIDogU0lNUExFX0NPTk5fU0laRTtcbiBcdGlmIChidWZmKSB7XG4gXHRcdG0gPSAoc3RydWN0IGlwX3ZzX3N5bmNfbWVzZ192MCAqKSBidWZmLVx1MDAzZW1lc2c7XG4gXHRcdC8qIFNlbmQgYnVmZmVyIGlmIGl0IGlzIGZvciB2MSAqL1xuQEAgLTU5Nyw5ICYjNDM7NTk5LDkgQEAgc3RhdGljIHZvaWQgaXBfdnNfc3luY19jb25uX3YwKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsXG4gXHRzLVx1MDAzZWNhZGRyID0gY3AtXHUwMDNlY2FkZHIuaXA7XG4gXHRzLVx1MDAzZXZhZGRyID0gY3AtXHUwMDNldmFkZHIuaXA7XG4gXHRzLVx1MDAzZWRhZGRyID0gY3AtXHUwMDNlZGFkZHIuaXA7XG4tXHRzLVx1MDAzZWZsYWdzID0gaHRvbnMoY3AtXHUwMDNlZmxhZ3MgXHUwMDI2IH5JUF9WU19DT05OX0ZfSEFTSEVEKTtcbiYjNDM7XHRzLVx1MDAzZWZsYWdzID0gaHRvbnMoZmxhZ3MgXHUwMDI2IH5JUF9WU19DT05OX0ZfSEFTSEVEKTtcbiBcdHMtXHUwMDNlc3RhdGUgPSBodG9ucyhjcC1cdTAwM2VzdGF0ZSk7XG4tXHRpZiAoY3AtXHUwMDNlZmxhZ3MgXHUwMDI2IElQX1ZTX0NPTk5fRl9TRVFfTUFTSykge1xuJiM0MztcdGlmIChzZXFfbWFzaykge1xuIFx0XHRzdHJ1Y3QgaXBfdnNfc3luY19jb25uX29wdGlvbnMgKm9wdCA9XG4gXHRcdFx0KHN0cnVjdCBpcF92c19zeW5jX2Nvbm5fb3B0aW9ucyAqKVx1MDAyNnNbMV07XG4gXHRcdG1lbWNweShvcHQsIFx1MDAyNmNwLVx1MDAzZXN5bmNfY29ubl9vcHQsIHNpemVvZigqb3B0KSk7XG5AQCAtNjM1LDYgJiM0Mzs2MzcsNyBAQCB2b2lkIGlwX3ZzX3N5bmNfY29ubihzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLCBpbnQgcGt0cylcbiBcdGludCBpZDtcbiBcdF9fdTggKnA7XG4gXHR1bnNpZ25lZCBpbnQgbGVuLCBwZV9uYW1lX2xlbiwgcGFkO1xuJiM0MztcdHUzMiBmbGFncywgc2VxX21hc2s7XG4gXG4gXHQvKiBIYW5kbGUgb2xkIHZlcnNpb24gb2YgdGhlIHByb3RvY29sICovXG4gXHRpZiAoc3lzY3RsX3N5bmNfdmVyKGlwdnMpID09IDApIHtcbkBAIC02NDcsNiAmIzQzOzY1MCw3IEBAIHZvaWQgaXBfdnNfc3luY19jb25uKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsIGludCBwa3RzKVxuIHNsb29wOlxuIFx0aWYgKCFpcF92c19zeW5jX2Nvbm5fbmVlZGVkKGlwdnMsIGNwLCBwa3RzKSlcbiBcdFx0Z290byBjb250cm9sO1xuJiM0MztcdGZsYWdzID0gUkVBRF9PTkNFKGNwLVx1MDAzZWZsYWdzKTtcbiBcbiBcdC8qIFNhbml0eSBjaGVja3MgKi9cbiBcdHBlX25hbWVfbGVuID0gMDtcbkBAIC02NzQsNyAmIzQzOzY3OCw4IEBAIHZvaWQgaXBfdnNfc3luY19jb25uKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsIGludCBwa3RzKVxuICNlbmRpZlxuIFx0XHRsZW4gPSBzaXplb2Yoc3RydWN0IGlwX3ZzX3N5bmNfdjQpO1xuIFxuLVx0aWYgKGNwLVx1MDAzZWZsYWdzIFx1MDAyNiBJUF9WU19DT05OX0ZfU0VRX01BU0spXG4mIzQzO1x0c2VxX21hc2sgPSBmbGFncyBcdTAwMjYgSVBfVlNfQ09OTl9GX1NFUV9NQVNLO1xuJiM0MztcdGlmIChzZXFfbWFzaylcbiBcdFx0bGVuICYjNDM7PSBzaXplb2Yoc3RydWN0IGlwX3ZzX3N5bmNfY29ubl9vcHRpb25zKSAmIzQzOyAyO1xuIFxuIFx0aWYgKGNwLVx1MDAzZXBlX2RhdGFfbGVuKVxuQEAgLTcyMCw3ICYjNDM7NzI1LDcgQEAgdm9pZCBpcF92c19zeW5jX2Nvbm4oc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIHN0cnVjdCBpcF92c19jb25uICpjcCwgaW50IHBrdHMpXG4gXHQvKiBTZXQgbWVzc2FnZSB0eXBlICBcdTAwMjYgY29weSBtZW1iZXJzICovXG4gXHRzLVx1MDAzZXY0LnR5cGUgPSAoY3AtXHUwMDNlYWYgPT0gQUZfSU5FVDYgPyBTVFlQRV9GX0lORVQ2IDogMCk7XG4gXHRzLVx1MDAzZXY0LnZlcl9zaXplID0gaHRvbnMobGVuIFx1MDAyNiBTVkVSX01BU0spO1x0LyogVmVyc2lvbiAwICovXG4tXHRzLVx1MDAzZXY0LmZsYWdzID0gaHRvbmwoY3AtXHUwMDNlZmxhZ3MgXHUwMDI2IH5JUF9WU19DT05OX0ZfSEFTSEVEKTtcbiYjNDM7XHRzLVx1MDAzZXY0LmZsYWdzID0gaHRvbmwoZmxhZ3MgXHUwMDI2IH5JUF9WU19DT05OX0ZfSEFTSEVEKTtcbiBcdHMtXHUwMDNldjQuc3RhdGUgPSBodG9ucyhjcC1cdTAwM2VzdGF0ZSk7XG4gXHRzLVx1MDAzZXY0LnByb3RvY29sID0gY3AtXHUwMDNlcHJvdG9jb2w7XG4gXHRzLVx1MDAzZXY0LmNwb3J0ID0gY3AtXHUwMDNlY3BvcnQ7XG5AQCAtNzQ0LDcgJiM0Mzs3NDksNyBAQCB2b2lkIGlwX3ZzX3N5bmNfY29ubihzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLCBpbnQgcGt0cylcbiBcdFx0cy1cdTAwM2V2NC52YWRkciA9IGNwLVx1MDAzZXZhZGRyLmlwO1xuIFx0XHRzLVx1MDAzZXY0LmRhZGRyID0gY3AtXHUwMDNlZGFkZHIuaXA7XG4gXHR9XG4tXHRpZiAoY3AtXHUwMDNlZmxhZ3MgXHUwMDI2IElQX1ZTX0NPTk5fRl9TRVFfTUFTSykge1xuJiM0MztcdGlmIChzZXFfbWFzaykge1xuIFx0XHQqKHAmIzQzOyYjNDM7KSA9IElQVlNfT1BUX1NFUV9EQVRBO1xuIFx0XHQqKHAmIzQzOyYjNDM7KSA9IHNpemVvZihzdHJ1Y3QgaXBfdnNfc3luY19jb25uX29wdGlvbnMpO1xuIFx0XHRodG9uX3NlcShcdTAwMjZjcC1cdTAwM2Vpbl9zZXEsIChzdHJ1Y3QgaXBfdnNfc2VxICopcCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTc6NDM8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7SVBfVlMmIzM0OywKICAgICYjMzQ7TkVURklMVEVSJiMzNDssCiAgICAmIzM0O0lORVQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtpcF92c19zeW5jX2Nvbm4mIzM0OywKICAgICYjMzQ7aXBfdnNfc3luY19jb25uX3YwJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHJlYWNoYWJsZSBuZXR3b3JraW5nIGNvZGUgaW4gdGhlIElQVlMgY29ubmVjdGlvbiBzeW5jaHJvbml6YXRpb24gc3Vic3lzdGVtIChuZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jKS4gSXQgdXNlcyBSRUFEX09OQ0UgYW5kIGNhY2hlcyBjcC1cdTAwM2VmbGFncyBsb2NhbGx5IHRvIGF2b2lkIGRhdGEgcmFjZXMgYW5kIGluY29uc2lzdGVuY2llcyBiZXR3ZWVuIHBhY2tldCBsZW5ndGggY2FsY3VsYXRpb24gYW5kIHNlcXVlbmNlIG9wdGlvbiBzZXJpYWxpemF0aW9uLiBGdXp6aW5nIGlzIHdhcnJhbnRlZCB0byB0ZXN0IHN5bmNocm9uaXphdGlvbiBtZXNzYWdlIGNvbnN0cnVjdGlvbiBhbmQgc3RhdGUgaGFuZGxpbmcgdW5kZXIgY29uY3VycmVuY3kuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzcwp0b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpUaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLAphbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLgoKLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURToKICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkCiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS4KICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsCiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLgoKLSBETyBOT1QgQkxJTkRMWSBUUlVTVCAmIzM0O05PIEZVTkNUSU9OQUwgQ0hBTkdFJiMzNDsgKE5GQ0kpIE9SICYjMzQ7UkVGQUNUT1JJTkcmIzM0OyBDTEFJTVM6CiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyAmIzM0O2NsZWFudXBzJiMzNDssICYjMzQ7cmVmYWN0b3JpbmdzJiMzNDssIG9yIHN0YXRlCiAgJiMzNDtObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZCYjMzQ7LiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS4KICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnQKICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy4KICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLgoKLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDoKICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosCiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuCiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlcgogIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6CgotIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6CiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuCiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLykKICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy4KICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzCiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLgogICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLgotIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZToKICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOgogICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nCiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy4KICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzoKLSBDb3JlIFN1YnN5c3RlbXM6CiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksCiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuCi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOgogICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLgotIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczoKICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy4KLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOgogICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOgoKLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6CiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXMKICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdAogIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLgogIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyAmIzM0O2ZvY3VzZWQmIzM0OywKICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuCgotIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzoKICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHMKICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy4KCi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOgogIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2sKICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy4KICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXIKICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo1LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6Ci0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KLSBDaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLgotIFN0cmlwIGFueSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAzNTVlZDFiZmI3ZDVmNjI0M2VlYWU0YjczYTE4Nzk0ZTYxMGY4Y2U2CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFdlZCBTZXAgOSAxNzo0Mjo1OSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jCmluZGV4IDUzODNhZWFmYjBhZWQuLmRmYTg0ODdlYzBjMjAgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYwpAQCAtNTQzLDEzICYjNDM7NTQzLDE1IEBAIHN0YXRpYyB2b2lkIGlwX3ZzX3N5bmNfY29ubl92MChzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLAogCXN0cnVjdCBpcF92c19zeW5jX2Nvbm5fdjAgKnM7CiAJc3RydWN0IGlwX3ZzX3N5bmNfYnVmZiAqYnVmZjsKIAlzdHJ1Y3QgaXB2c19tYXN0ZXJfc3luY19zdGF0ZSAqbXM7Ci0JaW50IGlkOwomIzQzOwl1MzIgZmxhZ3MsIHNlcV9tYXNrOwogCXVuc2lnbmVkIGludCBsZW47CiYjNDM7CWludCBpZDsKIAogCWlmICh1bmxpa2VseShjcC0mZ3Q7YWYgIT0gQUZfSU5FVCkpCiAJCXJldHVybjsKJiM0MzsJZmxhZ3MgPSBSRUFEX09OQ0UoY3AtJmd0O2ZsYWdzKTsKIAkvKiBEbyBub3Qgc3luYyBPTkUgUEFDS0VUICovCi0JaWYgKGNwLSZndDtmbGFncyAmYW1wOyBJUF9WU19DT05OX0ZfT05FX1BBQ0tFVCkKJiM0MzsJaWYgKGZsYWdzICZhbXA7IElQX1ZTX0NPTk5fRl9PTkVfUEFDS0VUKQogCQlyZXR1cm47CiAKIAlpZiAoIWlwX3ZzX3N5bmNfY29ubl9uZWVkZWQoaXB2cywgY3AsIHBrdHMpKQpAQCAtNTY0LDggJiM0Mzs1NjYsOCBAQCBzdGF0aWMgdm9pZCBpcF92c19zeW5jX2Nvbm5fdjAoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIHN0cnVjdCBpcF92c19jb25uICpjcCwKIAlpZCA9IHNlbGVjdF9tYXN0ZXJfdGhyZWFkX2lkKGlwdnMsIGNwKTsKIAltcyA9ICZhbXA7aXB2cy0mZ3Q7bXNbaWRdOwogCWJ1ZmYgPSBtcy0mZ3Q7c3luY19idWZmOwotCWxlbiA9IChjcC0mZ3Q7ZmxhZ3MgJmFtcDsgSVBfVlNfQ09OTl9GX1NFUV9NQVNLKSA/IEZVTExfQ09OTl9TSVpFIDoKLQkJU0lNUExFX0NPTk5fU0laRTsKJiM0MzsJc2VxX21hc2sgPSBmbGFncyAmYW1wOyBJUF9WU19DT05OX0ZfU0VRX01BU0s7CiYjNDM7CWxlbiA9IHNlcV9tYXNrID8gRlVMTF9DT05OX1NJWkUgOiBTSU1QTEVfQ09OTl9TSVpFOwogCWlmIChidWZmKSB7CiAJCW0gPSAoc3RydWN0IGlwX3ZzX3N5bmNfbWVzZ192MCAqKSBidWZmLSZndDttZXNnOwogCQkvKiBTZW5kIGJ1ZmZlciBpZiBpdCBpcyBmb3IgdjEgKi8KQEAgLTU5Nyw5ICYjNDM7NTk5LDkgQEAgc3RhdGljIHZvaWQgaXBfdnNfc3luY19jb25uX3YwKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsCiAJcy0mZ3Q7Y2FkZHIgPSBjcC0mZ3Q7Y2FkZHIuaXA7CiAJcy0mZ3Q7dmFkZHIgPSBjcC0mZ3Q7dmFkZHIuaXA7CiAJcy0mZ3Q7ZGFkZHIgPSBjcC0mZ3Q7ZGFkZHIuaXA7Ci0Jcy0mZ3Q7ZmxhZ3MgPSBodG9ucyhjcC0mZ3Q7ZmxhZ3MgJmFtcDsgfklQX1ZTX0NPTk5fRl9IQVNIRUQpOwomIzQzOwlzLSZndDtmbGFncyA9IGh0b25zKGZsYWdzICZhbXA7IH5JUF9WU19DT05OX0ZfSEFTSEVEKTsKIAlzLSZndDtzdGF0ZSA9IGh0b25zKGNwLSZndDtzdGF0ZSk7Ci0JaWYgKGNwLSZndDtmbGFncyAmYW1wOyBJUF9WU19DT05OX0ZfU0VRX01BU0spIHsKJiM0MzsJaWYgKHNlcV9tYXNrKSB7CiAJCXN0cnVjdCBpcF92c19zeW5jX2Nvbm5fb3B0aW9ucyAqb3B0ID0KIAkJCShzdHJ1Y3QgaXBfdnNfc3luY19jb25uX29wdGlvbnMgKikmYW1wO3NbMV07CiAJCW1lbWNweShvcHQsICZhbXA7Y3AtJmd0O3N5bmNfY29ubl9vcHQsIHNpemVvZigqb3B0KSk7CkBAIC02MzUsNiAmIzQzOzYzNyw3IEBAIHZvaWQgaXBfdnNfc3luY19jb25uKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsIGludCBwa3RzKQogCWludCBpZDsKIAlfX3U4ICpwOwogCXVuc2lnbmVkIGludCBsZW4sIHBlX25hbWVfbGVuLCBwYWQ7CiYjNDM7CXUzMiBmbGFncywgc2VxX21hc2s7CiAKIAkvKiBIYW5kbGUgb2xkIHZlcnNpb24gb2YgdGhlIHByb3RvY29sICovCiAJaWYgKHN5c2N0bF9zeW5jX3ZlcihpcHZzKSA9PSAwKSB7CkBAIC02NDcsNiAmIzQzOzY1MCw3IEBAIHZvaWQgaXBfdnNfc3luY19jb25uKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsIGludCBwa3RzKQogc2xvb3A6CiAJaWYgKCFpcF92c19zeW5jX2Nvbm5fbmVlZGVkKGlwdnMsIGNwLCBwa3RzKSkKIAkJZ290byBjb250cm9sOwomIzQzOwlmbGFncyA9IFJFQURfT05DRShjcC0mZ3Q7ZmxhZ3MpOwogCiAJLyogU2FuaXR5IGNoZWNrcyAqLwogCXBlX25hbWVfbGVuID0gMDsKQEAgLTY3NCw3ICYjNDM7Njc4LDggQEAgdm9pZCBpcF92c19zeW5jX2Nvbm4oc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIHN0cnVjdCBpcF92c19jb25uICpjcCwgaW50IHBrdHMpCiAjZW5kaWYKIAkJbGVuID0gc2l6ZW9mKHN0cnVjdCBpcF92c19zeW5jX3Y0KTsKIAotCWlmIChjcC0mZ3Q7ZmxhZ3MgJmFtcDsgSVBfVlNfQ09OTl9GX1NFUV9NQVNLKQomIzQzOwlzZXFfbWFzayA9IGZsYWdzICZhbXA7IElQX1ZTX0NPTk5fRl9TRVFfTUFTSzsKJiM0MzsJaWYgKHNlcV9tYXNrKQogCQlsZW4gJiM0Mzs9IHNpemVvZihzdHJ1Y3QgaXBfdnNfc3luY19jb25uX29wdGlvbnMpICYjNDM7IDI7CiAKIAlpZiAoY3AtJmd0O3BlX2RhdGFfbGVuKQpAQCAtNzIwLDcgJiM0Mzs3MjUsNyBAQCB2b2lkIGlwX3ZzX3N5bmNfY29ubihzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLCBpbnQgcGt0cykKIAkvKiBTZXQgbWVzc2FnZSB0eXBlICAmYW1wOyBjb3B5IG1lbWJlcnMgKi8KIAlzLSZndDt2NC50eXBlID0gKGNwLSZndDthZiA9PSBBRl9JTkVUNiA/IFNUWVBFX0ZfSU5FVDYgOiAwKTsKIAlzLSZndDt2NC52ZXJfc2l6ZSA9IGh0b25zKGxlbiAmYW1wOyBTVkVSX01BU0spOwkvKiBWZXJzaW9uIDAgKi8KLQlzLSZndDt2NC5mbGFncyA9IGh0b25sKGNwLSZndDtmbGFncyAmYW1wOyB+SVBfVlNfQ09OTl9GX0hBU0hFRCk7CiYjNDM7CXMtJmd0O3Y0LmZsYWdzID0gaHRvbmwoZmxhZ3MgJmFtcDsgfklQX1ZTX0NPTk5fRl9IQVNIRUQpOwogCXMtJmd0O3Y0LnN0YXRlID0gaHRvbnMoY3AtJmd0O3N0YXRlKTsKIAlzLSZndDt2NC5wcm90b2NvbCA9IGNwLSZndDtwcm90b2NvbDsKIAlzLSZndDt2NC5jcG9ydCA9IGNwLSZndDtjcG9ydDsKQEAgLTc0NCw3ICYjNDM7NzQ5LDcgQEAgdm9pZCBpcF92c19zeW5jX2Nvbm4oc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIHN0cnVjdCBpcF92c19jb25uICpjcCwgaW50IHBrdHMpCiAJCXMtJmd0O3Y0LnZhZGRyID0gY3AtJmd0O3ZhZGRyLmlwOwogCQlzLSZndDt2NC5kYWRkciA9IGNwLSZndDtkYWRkci5pcDsKIAl9Ci0JaWYgKGNwLSZndDtmbGFncyAmYW1wOyBJUF9WU19DT05OX0ZfU0VRX01BU0spIHsKJiM0MzsJaWYgKHNlcV9tYXNrKSB7CiAJCSoocCYjNDM7JiM0MzspID0gSVBWU19PUFRfU0VRX0RBVEE7CiAJCSoocCYjNDM7JiM0MzspID0gc2l6ZW9mKHN0cnVjdCBpcF92c19zeW5jX2Nvbm5fb3B0aW9ucyk7CiAJCWh0b25fc2VxKCZhbXA7Y3AtJmd0O2luX3NlcSwgKHN0cnVjdCBpcF92c19zZXEgKilwKTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTc6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDI1NwoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDExNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFByb3Bvc2VkIFBhdGNoIGZvciBGdXp6aW5nIFBvdGVudGlhbCoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2ggYW5kIGZpZ3VyZSBvdXQgdGhlIGZ1enppbmcgc3RyYXRlZ3kuIFdlIG5lZWQgdG8gZGV0ZXJtaW5lIGlmIHRoaXMgY2hhbmdlIHRvIGBuZXQvbmV0ZmlsdGVyL2lwdnNgIHdhcnJhbnRzIGEgZnV6emluZyBjYW1wYWlnbiBhbmQgd2hhdCBjb25maWd1cmF0aW9ucyBhbmQgZm9jdXMgc3ltYm9scyB3b3VsZCBiZSBiZXN0LgoKVGhlIGZpcnN0IHN0ZXAgaXMgYWx3YXlzIHRvIGV4YW1pbmUgdGhlIHNwZWNpZmljIGZpbGVzIGFuZCBmdW5jdGlvbnMgdG91Y2hlZC4gSXQgbG9va3MgbGlrZSB0aGUgcGF0Y2ggbW9kaWZpZXMgYG5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmNgLiBTcGVjaWZpY2FsbHksIHRoZSBjaGFuZ2VzIGFyZSB3aXRoaW4gdGhlIGBpcF92c19zeW5jX2Nvbm5fdjBgIGFuZCBgaXBfdnNfc3luY19jb25uYCBmdW5jdGlvbnMuIFRob3NlIGZ1bmN0aW9ucyBhcmUgaW50ZXJlc3RpbmcsIGFzIHRoZXkgY2xlYXJseSBoYW5kbGUgY29ubmVjdGlvbiBzeW5jaHJvbml6YXRpb24sIGEgdGFzayBrbm93biB0byBiZSBjb21wbGV4IGFuZCBvZnRlbiBwcm9uZSB0byBzdWJ0bGUgcmFjZSBjb25kaXRpb25zIG9yIHVuZXhwZWN0ZWQgaW5wdXQgaGFuZGxpbmcuCgpOb3csIG15IGluc3RpbmN0IGlzIHRvIGxvb2sgYXQgdGhlIHN1cnJvdW5kaW5nIGNvZGUuIEkgbmVlZCB0byBnZXQgYSBicm9hZGVyIHVuZGVyc3RhbmRpbmcgb2YgdGhlIGNvbnRleHQuIEkmIzM5O2xsIG5lZWQgdG8gaW5zcGVjdCBgbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuY2AgaXRzZWxmLiBUaGVuLCBJIG5lZWQgdG8gY2hlY2sgdGhlIEtjb25maWcgZmlsZXMgcmVsYXRlZCB0byBJUFZTLiBJIG5lZWQgdG8gc2VlIHdoaWNoIGNvbmZpZ3VyYXRpb25zIGFyZSBlbmFibGVkLCB3aGljaCBmdW5jdGlvbnMgY2FsbCB0aGVzZSBtb2RpZmllZCBvbmVzLCBhbmQgdGhlIG92ZXJhbGwgYXJjaGl0ZWN0dXJlLiBUaGlzIGdpdmVzIG1lIGluc2lnaHQgaW50byB0aGUgZW52aXJvbm1lbnQsIHBvdGVudGlhbCBjYWxsIGNoYWlucywgYW5kIHJlbGV2YW50IGRhdGEgc3RydWN0dXJlcy4gVGhpcyBjb250ZXh0IGlzIGNyaXRpY2FsIHRvIGRldmlzaW5nIGVmZmVjdGl2ZSBmdXp6aW5nIHN0cmF0ZWdpZXMuIEkgd2lsbCBuZWVkIHRvIGlkZW50aWZ5IHRoZSByZWxldmFudCBmb2N1cyBzeW1ib2xzIGFuZCBlbmFibGUgY29uZmlndXJhdGlvbnMgZm9yIG1heGltdW0gY292ZXJhZ2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTc6NDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7SVBfVlMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL2lwdnMvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O1xuRnVsbCBvdXRwdXQgaXMgdG9vIGxvbmcsIHNob3dpbmcgNTAwIG91dCBvZiA0MzkzIGxpbmVzLlxuVXNlIG1vcmUgcHJlY2lzZSBleHByZXNzaW9uIGlmIHBvc3NpYmxlLlxuXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy00LSNcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnOjU6bWVudWNvbmZpZyBJUF9WU1xubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctNi1cdHRyaXN0YXRlIFwmIzM0O0lQIHZpcnR1YWwgc2VydmVyIHN1cHBvcnRcJiMzNDtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy0yNi1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnOjI3OmlmIElQX1ZTXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy0yOC1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnOjI5OmNvbmZpZ1x0SVBfVlNfSVBWNlxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctMzAtXHRib29sIFwmIzM0O0lQdjYgc3VwcG9ydCBmb3IgSVBWU1wmIzM0O1xubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc6MzE6XHRkZXBlbmRzIG9uIElQVjYgPSB5IHx8IElQX1ZTID0gSVBWNlxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctMzItXHRzZWxlY3QgTkZfREVGUkFHX0lQVjZcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy0zNy1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnOjM4OmNvbmZpZ1x0SVBfVlNfREVCVUdcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTM5LVx0Ym9vbCBcJiMzNDtJUCB2aXJ0dWFsIHNlcnZlciBkZWJ1Z2dpbmdcJiMzNDtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy00NC1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnOjQ1OmNvbmZpZ1x0SVBfVlNfVEFCX0JJVFNcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTQ2LVx0aW50IFwmIzM0O0lQVlMgY29ubmVjdGlvbiB0YWJsZSBzaXplICh0aGUgTnRoIHBvd2VyIG9mIDIpXCYjMzQ7XG4tLVxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc9Nzc9Y29tbWVudCBcJiMzNDtJUFZTIHRyYW5zcG9ydCBwcm90b2NvbCBsb2FkIGJhbGFuY2luZyBzdXBwb3J0XCYjMzQ7XG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy03OC1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnOjc5OmNvbmZpZ1x0SVBfVlNfUFJPVE9fVENQXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy04MC1cdGJvb2wgXCYjMzQ7VENQIGxvYWQgYmFsYW5jaW5nIHN1cHBvcnRcJiMzNDtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy04NC1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnOjg1OmNvbmZpZ1x0SVBfVlNfUFJPVE9fVURQXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy04Ni1cdGJvb2wgXCYjMzQ7VURQIGxvYWQgYmFsYW5jaW5nIHN1cHBvcnRcJiMzNDtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy05MC1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnOjkxOmNvbmZpZ1x0SVBfVlNfUFJPVE9fQUhfRVNQXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZzo5MjpcdGRlZl9ib29sIElQX1ZTX1BST1RPX0VTUCB8fCBJUF9WU19QUk9UT19BSFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctOTMtXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZzo5NDpjb25maWdcdElQX1ZTX1BST1RPX0VTUFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctOTUtXHRib29sIFwmIzM0O0VTUCBsb2FkIGJhbGFuY2luZyBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctOTktXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZzoxMDA6Y29uZmlnXHRJUF9WU19QUk9UT19BSFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctMTAxLVx0Ym9vbCBcJiMzNDtBSCBsb2FkIGJhbGFuY2luZyBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctMTA1LVxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc6MTA2OmNvbmZpZyAgSVBfVlNfUFJPVE9fU0NUUFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctMTA3LVx0Ym9vbCBcJiMzNDtTQ1RQIGxvYWQgYmFsYW5jaW5nIHN1cHBvcnRcJiMzNDtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZz0xMTM9Y29tbWVudCBcJiMzNDtJUFZTIHNjaGVkdWxlclwmIzM0O1xubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctMTE0LVxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc6MTE1OmNvbmZpZ1x0SVBfVlNfUlJcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTExNi1cdHRyaXN0YXRlIFwmIzM0O3JvdW5kLXJvYmluIHNjaGVkdWxpbmdcJiMzNDtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy0xMjMtIFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc6MTI0OmNvbmZpZ1x0SVBfVlNfV1JSXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy0xMjUtXHR0cmlzdGF0ZSBcJiMzNDt3ZWlnaHRlZCByb3VuZC1yb2JpbiBzY2hlZHVsaW5nXCYjMzQ7XG4tLVxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctMTM2LVxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc6MTM3OmNvbmZpZ1x0SVBfVlNfTENcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTEzOC1cdHRyaXN0YXRlIFwmIzM0O2xlYXN0LWNvbm5lY3Rpb24gc2NoZWR1bGluZ1wmIzM0O1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTE0Ni1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnOjE0Nzpjb25maWdcdElQX1ZTX1dMQ1xubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctMTQ4LVx0dHJpc3RhdGUgXCYjMzQ7d2VpZ2h0ZWQgbGVhc3QtY29ubmVjdGlvbiBzY2hlZHVsaW5nXCYjMzQ7XG4tLVxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctMTU2LVxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc6MTU3OmNvbmZpZyAgSVBfVlNfRk9cbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTE1OC1cdFx0dHJpc3RhdGUgXCYjMzQ7d2VpZ2h0ZWQgZmFpbG92ZXIgc2NoZWR1bGluZ1wmIzM0O1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTE2Ni1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnOjE2Nzpjb25maWcgIElQX1ZTX09WRlxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctMTY4LVx0dHJpc3RhdGUgXCYjMzQ7d2VpZ2h0ZWQgb3ZlcmZsb3cgc2NoZWR1bGluZ1wmIzM0O1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTE3Ny1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnOjE3ODpjb25maWdcdElQX1ZTX0xCTENcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTE3OS1cdHRyaXN0YXRlIFwmIzM0O2xvY2FsaXR5LWJhc2VkIGxlYXN0LWNvbm5lY3Rpb24gc2NoZWR1bGluZ1wmIzM0O1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTE5MS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnOjE5Mjpjb25maWcgIElQX1ZTX0xCTENSXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy0xOTMtXHR0cmlzdGF0ZSBcJiMzNDtsb2NhbGl0eS1iYXNlZCBsZWFzdC1jb25uZWN0aW9uIHdpdGggcmVwbGljYXRpb24gc2NoZWR1bGluZ1wmIzM0O1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTIwOS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnOjIxMDpjb25maWdcdElQX1ZTX0RIXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy0yMTEtXHR0cmlzdGF0ZSBcJiMzNDtkZXN0aW5hdGlvbiBoYXNoaW5nIHNjaGVkdWxpbmdcJiMzNDtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy0yMTktXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZzoyMjA6Y29uZmlnXHRJUF9WU19TSFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctMjIxLVx0dHJpc3RhdGUgXCYjMzQ7c291cmNlIGhhc2hpbmcgc2NoZWR1bGluZ1wmIzM0O1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTIyOS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnOjIzMDpjb25maWdcdElQX1ZTX01IXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy0yMzEtXHR0cmlzdGF0ZSBcJiMzNDttYWdsZXYgaGFzaGluZyBzY2hlZHVsaW5nXCYjMzQ7XG4tLVxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctMjQ4LVxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc6MjQ5OmNvbmZpZ1x0SVBfVlNfU0VEXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy0yNTAtXHR0cmlzdGF0ZSBcJiMzNDtzaG9ydGVzdCBleHBlY3RlZCBkZWxheSBzY2hlZHVsaW5nXCYjMzQ7XG4tLVxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctMjYxLVxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc6MjYyOmNvbmZpZ1x0SVBfVlNfTlFcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTI2My1cdHRyaXN0YXRlIFwmIzM0O25ldmVyIHF1ZXVlIHNjaGVkdWxpbmdcJiMzNDtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy0yNzQtXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZzoyNzU6Y29uZmlnXHRJUF9WU19UV09TXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy0yNzYtXHR0cmlzdGF0ZSBcJiMzNDt3ZWlnaHRlZCByYW5kb20gdHdvcyBjaG9pY2UgbGVhc3QtY29ubmVjdGlvbiBzY2hlZHVsaW5nXCYjMzQ7XG4tLVxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc9Mjg2PWNvbW1lbnQgJiMzOTtJUFZTIFNIIHNjaGVkdWxlciYjMzk7XG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy0yODctXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZzoyODg6Y29uZmlnIElQX1ZTX1NIX1RBQl9CSVRTXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy0yODktXHRpbnQgXCYjMzQ7SVBWUyBzb3VyY2UgaGFzaGluZyB0YWJsZSBzaXplICh0aGUgTnRoIHBvd2VyIG9mIDIpXCYjMzQ7XG4tLVxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc9MzAxPWNvbW1lbnQgJiMzOTtJUFZTIE1IIHNjaGVkdWxlciYjMzk7XG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy0zMDItXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZzozMDM6Y29uZmlnIElQX1ZTX01IX1RBQl9JTkRFWFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctMzA0LVx0aW50IFwmIzM0O0lQVlMgbWFnbGV2IGhhc2hpbmcgdGFibGUgaW5kZXggb2Ygc2l6ZSAodGhlIHByaW1lIG51bWJlcnMpXCYjMzQ7XG4tLVxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc9MzE5PWNvbW1lbnQgJiMzOTtJUFZTIGFwcGxpY2F0aW9uIGhlbHBlciYjMzk7XG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy0zMjAtXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZzozMjE6Y29uZmlnXHRJUF9WU19GVFBcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTMyMi1cdHRyaXN0YXRlIFwmIzM0O0ZUUCBwcm90b2NvbCBoZWxwZXJcJiMzNDtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnOjMyMzpcdGRlcGVuZHMgb24gSVBfVlNfUFJPVE9fVENQIFx1MDAyNlx1MDAyNiBORl9DT05OVFJBQ0sgXHUwMDI2XHUwMDI2IE5GX05BVCBcdTAwMjZcdTAwMjYgXFxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTMyNC1cdFx0TkZfQ09OTlRSQUNLX0ZUUFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc6MzI1Olx0c2VsZWN0IElQX1ZTX05GQ1Rcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTMyNi1cdGhlbHBcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy0zMzYtXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZzozMzc6Y29uZmlnXHRJUF9WU19ORkNUXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy0zMzgtXHRib29sIFwmIzM0O05ldGZpbHRlciBjb25uZWN0aW9uIHRyYWNraW5nXCYjMzQ7XG4tLVxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctMzQ0LVxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc6MzQ1OmNvbmZpZ1x0SVBfVlNfUEVfU0lQXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy0zNDYtXHR0cmlzdGF0ZSBcJiMzNDtTSVAgcGVyc2lzdGVuY2UgZW5naW5lXCYjMzQ7XG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZzozNDc6XHRkZXBlbmRzIG9uIElQX1ZTX1BST1RPX1VEUFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctMzQ4LVx0ZGVwZW5kcyBvbiBORl9DT05OVFJBQ0tfU0lQXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc9MzUyPWNvbmZpZyBHQ09WX1BST0ZJTEVfSVBWU1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTM2MC1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnOjM2MTplbmRpZiAjIElQX1ZTXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL01ha2VmaWxlPTc9aXBfdnNfcHJvdG8tb2Jqcy15IDo9XG5uZXQvbmV0ZmlsdGVyL2lwdnMvTWFrZWZpbGU6ODppcF92c19wcm90by1vYmpzLSQoQ09ORklHX0lQX1ZTX1BST1RPX1RDUCkgJiM0Mzs9IGlwX3ZzX3Byb3RvX3RjcC5vXG5uZXQvbmV0ZmlsdGVyL2lwdnMvTWFrZWZpbGU6OTppcF92c19wcm90by1vYmpzLSQoQ09ORklHX0lQX1ZTX1BST1RPX1VEUCkgJiM0Mzs9IGlwX3ZzX3Byb3RvX3VkcC5vXG5uZXQvbmV0ZmlsdGVyL2lwdnMvTWFrZWZpbGU6MTA6aXBfdnNfcHJvdG8tb2Jqcy0kKENPTkZJR19JUF9WU19QUk9UT19BSF9FU1ApICYjNDM7PSBpcF92c19wcm90b19haF9lc3Aub1xubmV0L25ldGZpbHRlci9pcHZzL01ha2VmaWxlOjExOmlwX3ZzX3Byb3RvLW9ianMtJChDT05GSUdfSVBfVlNfUFJPVE9fU0NUUCkgJiM0Mzs9IGlwX3ZzX3Byb3RvX3NjdHAub1xubmV0L25ldGZpbHRlci9pcHZzL01ha2VmaWxlLTEyLVxubmV0L25ldGZpbHRlci9pcHZzL01ha2VmaWxlPTEzPWlwX3ZzLWV4dHJhX29ianMteSA6PVxubmV0L25ldGZpbHRlci9pcHZzL01ha2VmaWxlOjE0OmlwX3ZzLWV4dHJhX29ianMtJChDT05GSUdfSVBfVlNfTkZDVCkgJiM0Mzs9IGlwX3ZzX25mY3Qub1xubmV0L25ldGZpbHRlci9pcHZzL01ha2VmaWxlLTE1LVxubmV0L25ldGZpbHRlci9pcHZzL01ha2VmaWxlPTE2PWlwX3ZzLW9ianMgOj1cdGlwX3ZzX2Nvbm4ubyBpcF92c19jb3JlLm8gaXBfdnNfY3RsLm8gaXBfdnNfc2NoZWQub1x0ICAgXFxcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvTWFrZWZpbGUtMjItIyBJUFZTIGNvcmVcbm5ldC9uZXRmaWx0ZXIvaXB2cy9NYWtlZmlsZToyMzpvYmotJChDT05GSUdfSVBfVlMpICYjNDM7PSBpcF92cy5vXG5uZXQvbmV0ZmlsdGVyL2lwdnMvTWFrZWZpbGUtMjQtXG5uZXQvbmV0ZmlsdGVyL2lwdnMvTWFrZWZpbGUtMjUtIyBJUFZTIHNjaGVkdWxlcnNcbm5ldC9uZXRmaWx0ZXIvaXB2cy9NYWtlZmlsZToyNjpvYmotJChDT05GSUdfSVBfVlNfUlIpICYjNDM7PSBpcF92c19yci5vXG5uZXQvbmV0ZmlsdGVyL2lwdnMvTWFrZWZpbGU6Mjc6b2JqLSQoQ09ORklHX0lQX1ZTX1dSUikgJiM0Mzs9IGlwX3ZzX3dyci5vXG5uZXQvbmV0ZmlsdGVyL2lwdnMvTWFrZWZpbGU6Mjg6b2JqLSQoQ09ORklHX0lQX1ZTX0xDKSAmIzQzOz0gaXBfdnNfbGMub1xubmV0L25ldGZpbHRlci9pcHZzL01ha2VmaWxlOjI5Om9iai0kKENPTkZJR19JUF9WU19XTEMpICYjNDM7PSBpcF92c193bGMub1xubmV0L25ldGZpbHRlci9pcHZzL01ha2VmaWxlOjMwOm9iai0kKENPTkZJR19JUF9WU19GTykgJiM0Mzs9IGlwX3ZzX2ZvLm9cbm5ldC9uZXRmaWx0ZXIvaXB2cy9NYWtlZmlsZTozMTpvYmotJChDT05GSUdfSVBfVlNfT1ZGKSAmIzQzOz0gaXBfdnNfb3ZmLm9cbm5ldC9uZXRmaWx0ZXIvaXB2cy9NYWtlZmlsZTozMjpvYmotJChDT05GSUdfSVBfVlNfTEJMQykgJiM0Mzs9IGlwX3ZzX2xibGMub1xubmV0L25ldGZpbHRlci9pcHZzL01ha2VmaWxlOjMzOm9iai0kKENPTkZJR19JUF9WU19MQkxDUikgJiM0Mzs9IGlwX3ZzX2xibGNyLm9cbm5ldC9uZXRmaWx0ZXIvaXB2cy9NYWtlZmlsZTozNDpvYmotJChDT05GSUdfSVBfVlNfREgpICYjNDM7PSBpcF92c19kaC5vXG5uZXQvbmV0ZmlsdGVyL2lwdnMvTWFrZWZpbGU6MzU6b2JqLSQoQ09ORklHX0lQX1ZTX1NIKSAmIzQzOz0gaXBfdnNfc2gub1xubmV0L25ldGZpbHRlci9pcHZzL01ha2VmaWxlOjM2Om9iai0kKENPTkZJR19JUF9WU19NSCkgJiM0Mzs9IGlwX3ZzX21oLm9cbm5ldC9uZXRmaWx0ZXIvaXB2cy9NYWtlZmlsZTozNzpvYmotJChDT05GSUdfSVBfVlNfU0VEKSAmIzQzOz0gaXBfdnNfc2VkLm9cbm5ldC9uZXRmaWx0ZXIvaXB2cy9NYWtlZmlsZTozODpvYmotJChDT05GSUdfSVBfVlNfTlEpICYjNDM7PSBpcF92c19ucS5vXG5uZXQvbmV0ZmlsdGVyL2lwdnMvTWFrZWZpbGU6Mzk6b2JqLSQoQ09ORklHX0lQX1ZTX1RXT1MpICYjNDM7PSBpcF92c190d29zLm9cbm5ldC9uZXRmaWx0ZXIvaXB2cy9NYWtlZmlsZS00MC1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9NYWtlZmlsZS00MS0jIElQVlMgYXBwbGljYXRpb24gaGVscGVyc1xubmV0L25ldGZpbHRlci9pcHZzL01ha2VmaWxlOjQyOm9iai0kKENPTkZJR19JUF9WU19GVFApICYjNDM7PSBpcF92c19mdHAub1xubmV0L25ldGZpbHRlci9pcHZzL01ha2VmaWxlLTQzLVxubmV0L25ldGZpbHRlci9pcHZzL01ha2VmaWxlLTQ0LSMgSVBWUyBjb25uZWN0aW9uIHRlbXBsYXRlIHJldHJpZXZlcnNcbm5ldC9uZXRmaWx0ZXIvaXB2cy9NYWtlZmlsZTo0NTpvYmotJChDT05GSUdfSVBfVlNfUEVfU0lQKSAmIzQzOz0gaXBfdnNfcGVfc2lwLm9cbm5ldC9uZXRmaWx0ZXIvaXB2cy9NYWtlZmlsZS00Ni1pZmRlZiBDT05GSUdfR0NPVl9QUk9GSUxFX0lQVlNcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfYXBwLmM9NzI9aXBfdnNfYXBwX2luY19uZXcoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIHN0cnVjdCBpcF92c19hcHAgKmFwcCwgX191MTYgcHJvdG8sXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2FwcC5jLTEwOC1cdGxpc3RfYWRkKFx1MDAyNmluYy1cdTAwM2VhX2xpc3QsIFx1MDAyNmFwcC1cdTAwM2VpbmNzX2xpc3QpO1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2FwcC5jOjEwOTpcdElQX1ZTX0RCRyg5LCBcJiMzNDslcyBBcHAgJXM6JXUgcmVnaXN0ZXJlZFxcblwmIzM0Oyxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19hcHAuYy0xMTAtXHRcdCAgcHAtXHUwMDNlbmFtZSwgaW5jLVx1MDAzZW5hbWUsIG50b2hzKGluYy1cdTAwM2Vwb3J0KSk7XG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2FwcC5jPTEyND1pcF92c19hcHBfaW5jX3JlbGVhc2Uoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIHN0cnVjdCBpcF92c19hcHAgKmluYylcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfYXBwLmMtMTMzLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2FwcC5jOjEzNDpcdElQX1ZTX0RCRyg5LCBcJiMzNDslcyBBcHAgJXM6JXUgdW5yZWdpc3RlcmVkXFxuXCYjMzQ7LFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2FwcC5jLTEzNS1cdFx0ICBwcC1cdTAwM2VuYW1lLCBpbmMtXHUwMDNlbmFtZSwgbnRvaHMoaW5jLVx1MDAzZXBvcnQpKTtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfYXBwLmM9Mjg3PXN0YXRpYyBpbmxpbmUgdm9pZCB2c19maXhfc2VxKGNvbnN0IHN0cnVjdCBpcF92c19zZXEgKnZzZXEsIHN0cnVjdCB0Y3BoZHIgKnRoKVxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19hcHAuYy0yOTgtXHRcdFx0dGgtXHUwMDNlc2VxID0gaHRvbmwoc2VxICYjNDM7IHZzZXEtXHUwMDNlZGVsdGEpO1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2FwcC5jOjI5OTpcdFx0XHRJUF9WU19EQkcoOSwgXCYjMzQ7JXMoKTogYWRkZWQgZGVsdGEgKCVkKSB0byBzZXFcXG5cJiMzNDssXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfYXBwLmMtMzAwLVx0XHRcdFx0ICBfX2Z1bmNfXywgdnNlcS1cdTAwM2VkZWx0YSk7XG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2FwcC5jLTMwMi1cdFx0XHR0aC1cdTAwM2VzZXEgPSBodG9ubChzZXEgJiM0MzsgdnNlcS1cdTAwM2VwcmV2aW91c19kZWx0YSk7XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfYXBwLmM6MzAzOlx0XHRcdElQX1ZTX0RCRyg5LCBcJiMzNDslcygpOiBhZGRlZCBwcmV2aW91c19kZWx0YSAoJWQpIHRvIHNlcVxcblwmIzM0Oyxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19hcHAuYy0zMDQtXHRcdFx0XHQgIF9fZnVuY19fLCB2c2VxLVx1MDAzZXByZXZpb3VzX2RlbHRhKTtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfYXBwLmM9MzE0PXZzX2ZpeF9hY2tfc2VxKGNvbnN0IHN0cnVjdCBpcF92c19zZXEgKnZzZXEsIHN0cnVjdCB0Y3BoZHIgKnRoKVxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19hcHAuYy0zMjctXHRcdFx0dGgtXHUwMDNlYWNrX3NlcSA9IGh0b25sKGFja19zZXEgLSB2c2VxLVx1MDAzZWRlbHRhKTtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19hcHAuYzozMjg6XHRcdFx0SVBfVlNfREJHKDksIFwmIzM0OyVzKCk6IHN1YnRyYWN0ZWQgZGVsdGEgXCYjMzQ7XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfYXBwLmMtMzI5LVx0XHRcdFx0ICBcJiMzNDsoJWQpIGZyb20gYWNrX3NlcVxcblwmIzM0OywgX19mdW5jX18sIHZzZXEtXHUwMDNlZGVsdGEpO1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19hcHAuYy0zMzItXHRcdFx0dGgtXHUwMDNlYWNrX3NlcSA9IGh0b25sKGFja19zZXEgLSB2c2VxLVx1MDAzZXByZXZpb3VzX2RlbHRhKTtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19hcHAuYzozMzM6XHRcdFx0SVBfVlNfREJHKDksIFwmIzM0OyVzKCk6IHN1YnRyYWN0ZWQgXCYjMzQ7XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfYXBwLmMtMzM0LVx0XHRcdFx0ICBcJiMzNDtwcmV2aW91c19kZWx0YSAoJWQpIGZyb20gYWNrX3NlcVxcblwmIzM0Oyxcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfYXBwLmM9MzU5PXN0YXRpYyBpbmxpbmUgaW50IGFwcF90Y3BfcGt0X291dChzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsIHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2FwcC5jLTM3OS1cdCAqL1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2FwcC5jOjM4MDpcdGlmIChjcC1cdTAwM2VmbGFncyBcdTAwMjYgSVBfVlNfQ09OTl9GX09VVF9TRVEpXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfYXBwLmMtMzgxLVx0XHR2c19maXhfc2VxKFx1MDAyNmNwLVx1MDAzZW91dF9zZXEsIHRoKTtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19hcHAuYzozODI6XHRpZiAoY3AtXHUwMDNlZmxhZ3MgXHUwMDI2IElQX1ZTX0NPTk5fRl9JTl9TRVEpXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfYXBwLmMtMzgzLVx0XHR2c19maXhfYWNrX3NlcShcdTAwMjZjcC1cdTAwM2Vpbl9zZXEsIHRoKTtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfYXBwLmMtMzk4LVx0XHR2c19zZXFfdXBkYXRlKGNwLCBcdTAwMjZjcC1cdTAwM2VvdXRfc2VxLFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2FwcC5jOjM5OTpcdFx0XHQgICAgICBJUF9WU19DT05OX0ZfT1VUX1NFUSwgc2VxLCBkaWZmKTtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19hcHAuYy00MDAtXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2FwcC5jPTQzNT1zdGF0aWMgaW5saW5lIGludCBhcHBfdGNwX3BrdF9pbihzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsIHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2FwcC5jLTQ1NS1cdCAqL1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2FwcC5jOjQ1NjpcdGlmIChjcC1cdTAwM2VmbGFncyBcdTAwMjYgSVBfVlNfQ09OTl9GX0lOX1NFUSlcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19hcHAuYy00NTctXHRcdHZzX2ZpeF9zZXEoXHUwMDI2Y3AtXHUwMDNlaW5fc2VxLCB0aCk7XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfYXBwLmM6NDU4Olx0aWYgKGNwLVx1MDAzZWZsYWdzIFx1MDAyNiBJUF9WU19DT05OX0ZfT1VUX1NFUSlcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19hcHAuYy00NTktXHRcdHZzX2ZpeF9hY2tfc2VxKFx1MDAyNmNwLVx1MDAzZW91dF9zZXEsIHRoKTtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfYXBwLmMtNDc0LVx0XHR2c19zZXFfdXBkYXRlKGNwLCBcdTAwMjZjcC1cdTAwM2Vpbl9zZXEsXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfYXBwLmM6NDc1Olx0XHRcdCAgICAgIElQX1ZTX0NPTk5fRl9JTl9TRVEsIHNlcSwgZGlmZik7XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfYXBwLmMtNDc2LVxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmMtMzgtXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jOjM5OiNpZm5kZWYgQ09ORklHX0lQX1ZTX1RBQl9CSVRTXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jOjQwOiNkZWZpbmUgQ09ORklHX0lQX1ZTX1RBQl9CSVRTXHQxMlxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYy00MS0jZW5kaWZcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jLTQ1LSovXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jOjQ2OnN0YXRpYyBpbnQgaXBfdnNfY29ubl90YWJfYml0cyA9IENPTkZJR19JUF9WU19UQUJfQklUUztcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmMtNDctbW9kdWxlX3BhcmFtX25hbWVkKGNvbm5fdGFiX2JpdHMsIGlwX3ZzX2Nvbm5fdGFiX2JpdHMsIGludCwgMDQ0NCk7XG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYz01ND1zdGF0aWMgc3RydWN0IGttZW1fY2FjaGUgKmlwX3ZzX2Nvbm5fY2FjaGVwIF9fcmVhZF9tb3N0bHk7XG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYy01Ni0vKiBXZSBuZWVkIGFuIGFkZHJzdHJsZW4gdGhhdCB3b3JrcyB3aXRoIG9yIHdpdGhvdXQgdjYgKi9cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmM6NTc6I2lmZGVmIENPTkZJR19JUF9WU19JUFY2XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jOjU4OiNkZWZpbmUgSVBfVlNfQUREUlNUUkxFTiBJTkVUNl9BRERSU1RSTEVOXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jLTU5LSNlbHNlXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jOjYwOiNkZWZpbmUgSVBfVlNfQUREUlNUUkxFTiAoOCYjNDM7MSlcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmMtNjEtI2VuZGlmXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYz0xODQ9c3RhdGljIHUzMiBpcF92c19jb25uX2hhc2hrZXkoc3RydWN0IGlwX3ZzX3JodCAqdCwgaW50IGFmLCB1bnNpZ25lZCBpbnQgcHJvdG8sXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYy0xOTAtXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jOjE5MTojaWZkZWYgQ09ORklHX0lQX1ZTX0lQVjZcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmMtMTkyLVx0aWYgKGFmID09IEFGX0lORVQ2KSB7XG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYz0yNjE9c3RhdGljIGlubGluZSBpbnQgaXBfdnNfY29ubl9oYXNoKHN0cnVjdCBpcF92c19jb25uICpjcClcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jLTI3MC1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmM6MjcxOlx0aWYgKGNwLVx1MDAzZWZsYWdzIFx1MDAyNiBJUF9WU19DT05OX0ZfT05FX1BBQ0tFVClcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmMtMjcyLVx0XHRyZXR1cm4gMDtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jLTI5Mi1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmM6MjkzOlx0Y3AtXHUwMDNlZmxhZ3MgfD0gSVBfVlNfQ09OTl9GX0hBU0hFRDtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmMtMjk0LVx0V1JJVEVfT05DRShjcC1cdTAwM2VobjAuaGFzaF9rZXksIGhhc2hfa2V5KTtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jLTMwNi1cdGlmIChhdG9taWNfcmVhZChcdTAwMjZpcHZzLVx1MDAzZWNvbm5fY291bnQpIFx1MDAzZSB0LVx1MDAzZXVfdGhyZXNoIFx1MDAyNlx1MDAyNlxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYzozMDc6XHQgICAgIXRlc3RfYW5kX3NldF9iaXQoSVBfVlNfV09SS19DT05OX1JFU0laRSwgXHUwMDI2aXB2cy1cdTAwM2V3b3JrX2ZsYWdzKSlcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmMtMzA4LVx0XHRtb2RfZGVsYXllZF93b3JrKHN5c3RlbV9kZmxfbG9uZ193cSwgXHUwMDI2aXB2cy1cdTAwM2Vjb25uX3Jlc2l6ZV93b3JrLCAwKTtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jPTMxNj1zdGF0aWMgaW5saW5lIGJvb2wgaXBfdnNfY29ubl91bmxpbmsoc3RydWN0IGlwX3ZzX2Nvbm4gKmNwKVxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmMtMzI0LVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYzozMjU6XHRpZiAoY3AtXHUwMDNlZmxhZ3MgXHUwMDI2IElQX1ZTX0NPTk5fRl9PTkVfUEFDS0VUKVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYy0zMjYtXHRcdHJldHVybiByZWZjb3VudF9kZWNfaWZfb25lKFx1MDAyNmNwLVx1MDAzZXJlZmNudCk7XG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYy0zMzgtXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jOjMzOTpcdGlmIChjcC1cdTAwM2VmbGFncyBcdTAwMjYgSVBfVlNfQ09OTl9GX0hBU0hFRCkge1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYy0zNDAtXHRcdC8qIERlY3JlYXNlIHJlZmNudCBhbmQgdW5saW5rIGNvbm4gb25seSBpZiB3ZSBhcmUgbGFzdCB1c2VyICovXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYy0zNDUtXHRcdFx0XHRobGlzdF9ibF9kZWxfcmN1KFx1MDAyNmNwLVx1MDAzZWhuMS5ub2RlKTtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmM6MzQ2Olx0XHRcdGNwLVx1MDAzZWZsYWdzIFx1MDAyNj0gfklQX1ZTX0NPTk5fRl9IQVNIRUQ7XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jLTM0Ny1cdFx0XHRyZXQgPSB0cnVlO1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmM9MzY3PV9faXBfdnNfY29ubl9pbl9nZXQoY29uc3Qgc3RydWN0IGlwX3ZzX2Nvbm5fcGFyYW0gKnApXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jLTM2OC17XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jOjM2OTpcdERFQ0xBUkVfSVBfVlNfUkhUX1dBTEtfQlVDS0VUX1JDVSgpO1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYy0zNzAtXHRzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cyA9IHAtXHUwMDNlaXB2cztcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jLTM5NS1cdFx0XHRcdCAgICAoIXAtXHUwMDNlY3BvcnQgXlxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYzozOTY6XHRcdFx0XHQgICAgICghKGNwLVx1MDAzZWZsYWdzIFx1MDAyNiBJUF9WU19DT05OX0ZfTk9fQ1BPUlQpKSkgXHUwMDI2XHUwMDI2XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jLTM5Ny1cdFx0XHRcdCAgICBwLVx1MDAzZXByb3RvY29sID09IGNwLVx1MDAzZXByb3RvY29sKSB7XG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYz00MTM9c3RydWN0IGlwX3ZzX2Nvbm4gKmlwX3ZzX2Nvbm5faW5fZ2V0KGNvbnN0IHN0cnVjdCBpcF92c19jb25uX3BhcmFtICpwKVxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmMtNDI5LVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYzo0MzA6XHRJUF9WU19EQkdfQlVGKDksIFwmIzM0O2xvb2t1cC9pbiAlcyAlczolZC1cdTAwM2UlczolZCAlc1xcblwmIzM0Oyxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmMtNDMxLVx0XHQgICAgICBpcF92c19wcm90b19uYW1lKHAtXHUwMDNlcHJvdG9jb2wpLFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYzo0MzI6XHRcdCAgICAgIElQX1ZTX0RCR19BRERSKHAtXHUwMDNlYWYsIHAtXHUwMDNlY2FkZHIpLCBudG9ocyhwLVx1MDAzZWNwb3J0KSxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmM6NDMzOlx0XHQgICAgICBJUF9WU19EQkdfQUREUihwLVx1MDAzZWFmLCBwLVx1MDAzZXZhZGRyKSwgbnRvaHMocC1cdTAwM2V2cG9ydCksXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jLTQzNC1cdFx0ICAgICAgY3AgPyBcJiMzNDtoaXRcJiMzNDsgOiBcJiMzNDtub3QgaGl0XCYjMzQ7KTtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jPTQ3NT1zdHJ1Y3QgaXBfdnNfY29ubiAqaXBfdnNfY3RfaW5fZ2V0KGNvbnN0IHN0cnVjdCBpcF92c19jb25uX3BhcmFtICpwKVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYy00NzYte1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYzo0Nzc6XHRERUNMQVJFX0lQX1ZTX1JIVF9XQUxLX0JVQ0tFVF9SQ1UoKTtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmMtNDc4LVx0c3RydWN0IG5ldG5zX2lwdnMgKmlwdnMgPSBwLVx1MDAzZWlwdnM7XG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYy01MTQtXHRcdFx0XHQgICAgcC1cdTAwM2VjcG9ydCA9PSBjcC1cdTAwM2VjcG9ydCBcdTAwMjZcdTAwMjZcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmM6NTE1Olx0XHRcdFx0ICAgIGNwLVx1MDAzZWZsYWdzIFx1MDAyNiBJUF9WU19DT05OX0ZfVEVNUExBVEUgXHUwMDI2XHUwMDI2XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jLTUxNi1cdFx0XHRcdCAgICBwLVx1MDAzZXByb3RvY29sID09IGNwLVx1MDAzZXByb3RvY29sIFx1MDAyNlx1MDAyNlxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmMtNTI5LVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYzo1MzA6XHRJUF9WU19EQkdfQlVGKDksIFwmIzM0O3RlbXBsYXRlIGxvb2t1cC9pbiAlcyAlczolZC1cdTAwM2UlczolZCAlc1xcblwmIzM0Oyxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmMtNTMxLVx0XHQgICAgICBpcF92c19wcm90b19uYW1lKHAtXHUwMDNlcHJvdG9jb2wpLFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYzo1MzI6XHRcdCAgICAgIElQX1ZTX0RCR19BRERSKHAtXHUwMDNlYWYsIHAtXHUwMDNlY2FkZHIpLCBudG9ocyhwLVx1MDAzZWNwb3J0KSxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmM6NTMzOlx0XHQgICAgICBJUF9WU19EQkdfQUREUihwLVx1MDAzZWFmLCBwLVx1MDAzZXZhZGRyKSwgbnRvaHMocC1cdTAwM2V2cG9ydCksXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jLTUzNC1cdFx0ICAgICAgY3AgPyBcJiMzNDtoaXRcJiMzNDsgOiBcJiMzNDtub3QgaGl0XCYjMzQ7KTtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jPTU0Mz1zdHJ1Y3QgaXBfdnNfY29ubiAqaXBfdnNfY29ubl9vdXRfZ2V0KGNvbnN0IHN0cnVjdCBpcF92c19jb25uX3BhcmFtICpwKVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYy01NDQte1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYzo1NDU6XHRERUNMQVJFX0lQX1ZTX1JIVF9XQUxLX0JVQ0tFVF9SQ1UoKTtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmMtNTQ2LVx0c3RydWN0IG5ldG5zX2lwdnMgKmlwdnMgPSBwLVx1MDAzZWlwdnM7XG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYy01NjktXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jOjU3MDpcdFx0XHRcdGlmIChJUF9WU19GV0RfTUVUSE9EKGNwKSAhPSBJUF9WU19DT05OX0ZfTUFTUSkge1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYy01NzEtXHRcdFx0XHRcdHNwb3J0ID0gY3AtXHUwMDNldnBvcnQ7XG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYy01OTMtXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jOjU5NDpcdElQX1ZTX0RCR19CVUYoOSwgXCYjMzQ7bG9va3VwL291dCAlcyAlczolZC1cdTAwM2UlczolZCAlc1xcblwmIzM0Oyxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmMtNTk1LVx0XHQgICAgICBpcF92c19wcm90b19uYW1lKHAtXHUwMDNlcHJvdG9jb2wpLFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYzo1OTY6XHRcdCAgICAgIElQX1ZTX0RCR19BRERSKHAtXHUwMDNlYWYsIHAtXHUwMDNlY2FkZHIpLCBudG9ocyhwLVx1MDAzZWNwb3J0KSxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmM6NTk3Olx0XHQgICAgICBJUF9WU19EQkdfQUREUihwLVx1MDAzZWFmLCBwLVx1MDAzZXZhZGRyKSwgbnRvaHMocC1cdTAwM2V2cG9ydCksXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jLTU5OC1cdFx0ICAgICAgY3AgPyBcJiMzNDtoaXRcJiMzNDsgOiBcJiMzNDtub3QgaGl0XCYjMzQ7KTtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jPTYyMD1zdGF0aWMgdm9pZCBfX2lwX3ZzX2Nvbm5fcHV0X3RpbWVyKHN0cnVjdCBpcF92c19jb25uICpjcClcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmMtNjIxLXtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmM6NjIyOlx0dW5zaWduZWQgbG9uZyB0ID0gKGNwLVx1MDAzZWZsYWdzIFx1MDAyNiBJUF9WU19DT05OX0ZfT05FX1BBQ0tFVCkgP1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYy02MjMtXHRcdDAgOiBjcC1cdTAwM2V0aW1lb3V0O1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmM9NjI5PXZvaWQgaXBfdnNfY29ubl9wdXQoc3RydWN0IGlwX3ZzX2Nvbm4gKmNwKVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYy02MzAte1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYzo2MzE6XHRpZiAoKGNwLVx1MDAzZWZsYWdzIFx1MDAyNiBJUF9WU19DT05OX0ZfT05FX1BBQ0tFVCkgXHUwMDI2XHUwMDI2XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jLTYzMi1cdCAgICAocmVmY291bnRfcmVhZChcdTAwMjZjcC1cdTAwM2VyZWZjbnQpID09IDEpIFx1MDAyNlx1MDAyNlxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmM9NjQzPXZvaWQgaXBfdnNfY29ubl9maWxsX2Nwb3J0KHN0cnVjdCBpcF92c19jb25uICpjcCwgX19iZTE2IGNwb3J0KVxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmMtNjg0LVx0XHRcdHNwaW5fbG9ja19iaChcdTAwMjZjcC1cdTAwM2Vsb2NrKTtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmM6Njg1Olx0XHRcdGlmIChjcC1cdTAwM2VmbGFncyBcdTAwMjYgSVBfVlNfQ09OTl9GX05PX0NQT1JUIFx1MDAyNlx1MDAyNiBieV9tZSlcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmMtNjg2LVx0XHRcdFx0Y3AtXHUwMDNlY3BvcnQgPSAwO1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmMtNjg4LVx0XHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNmNwLVx1MDAzZWxvY2spO1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYzo2ODk6XHRcdFx0SVBfVlNfRVJSX1JMKFwmIzM0OyVzKCk6IFRvbyBtYW55IGh0IGNoYW5nZXMgZm9yIGRpciAlZFxcblwmIzM0Oyxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmMtNjkwLVx0XHRcdFx0ICAgICBfX2Z1bmNfXywgZGlyKTtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jLTc1Ny1cdC8qIEZpbGwgY3BvcnQgb25jZSwgZXZlbiBpZiBtdWx0aXBsZSBwYWNrZXRzIHRyeSB0byBkbyBpdCAqL1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYzo3NTg6XHRpZiAoY3AtXHUwMDNlZmxhZ3MgXHUwMDI2IElQX1ZTX0NPTk5fRl9OT19DUE9SVCBcdTAwMjZcdTAwMjYgKCFjcC1cdTAwM2VjcG9ydCB8fCBieV9tZSkpIHtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmMtNzU5LVx0XHQvKiBJZiB3ZSByYWNlIHdpdGggcmVzaXppbmcgbWFrZSBzdXJlIGNwb3J0IGlzIHNldCBmb3IgZGlyIDEgKi9cbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jLTc2NS1cdFx0XHRhdG9taWNfZGVjKFx1MDAyNmlwdnMtXHUwMDNlbm9fY3BvcnRfY29ubnNbYWZfaWRdKTtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmM6NzY2Olx0XHRcdGNwLVx1MDAzZWZsYWdzIFx1MDAyNj0gfklQX1ZTX0NPTk5fRl9OT19DUE9SVDtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmMtNzY3LVx0XHR9XG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYz03OTc9c3RhdGljIHZvaWQgaXBfdnNfY29ubl9jaGFuZ2VfZndkX21hc2soc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLCB1MzIgbmV3X2ZsYWdzKVxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmMtODA0LVx0LyogU2VlIGlwX3ZzX2Nvbm5fdXNlX2hhc2gyKCkgZm9yIHJlZmVyZW5jZSAqL1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYzo4MDU6XHRpZiAoKGNwLVx1MDAzZWZsYWdzIFx1MDAyNiBJUF9WU19DT05OX0ZfVEVNUExBVEUpIHx8XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jLTgwNi1cdCAgICAvKiBObyBjaGFuZ2UgaW4gZG91YmxlIGhhc2hpbmcgPyAqL1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYzo4MDc6XHQgICAgKElQX1ZTX0ZXRF9NRVRIT0QoY3ApID09IElQX1ZTX0NPTk5fRl9NQVNRKSA9PVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYzo4MDg6XHQgICAgKChuZXdfZmxhZ3MgXHUwMDI2IElQX1ZTX0NPTk5fRl9GV0RfTUFTSykgPT0gSVBfVlNfQ09OTl9GX01BU1EpKSB7XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jLTgwOS1cdFx0Y3AtXHUwMDNlZmxhZ3MgPSBuZXdfZmxhZ3M7XG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYz04NjY9aW50IGlwX3ZzX2Nvbm5fZGVzaXJlZF9zaXplKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBzdHJ1Y3QgaXBfdnNfcmh0ICp0LFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmMtODY5LVx0cmV0dXJuIGlwX3ZzX3JodF9kZXNpcmVkX3NpemUoaXB2cywgdCwgYXRvbWljX3JlYWQoXHUwMDI2aXB2cy1cdTAwM2Vjb25uX2NvdW50KSxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmM6ODcwOlx0XHRcdFx0ICAgICAgbGZhY3RvciwgSVBfVlNfQ09OTl9UQUJfTUlOX0JJVFMsXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jLTg3MS1cdFx0XHRcdCAgICAgIGlwX3ZzX2Nvbm5fdGFiX2JpdHMpO1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmM9ODc1PXN0cnVjdCBpcF92c19yaHQgKmlwX3ZzX2Nvbm5fdGFiX2FsbG9jKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBpbnQgYnVja2V0cyxcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jLTg4Mi1cdHNjb3VudHMgPSBjbGFtcChidWNrZXRzIFx1MDAzZVx1MDAzZSA2LCAxLCAyNTYpO1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYzo4ODM6XHQvKiBsb2NrczogYmFzZWQgb24gcGFyYWxsZWwgSVBfVlNfQ09OTl9GX05PX0NQT1JUIG9wZXJhdGlvbnMgJiM0MzsgcmVzaXplICovXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jLTg4NC1cdGxvY2tzID0gY2xhbXAoOCwgMSwgc2NvdW50cyk7XG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYy04ODktXHR0LVx1MDAzZWxmYWN0b3IgPSBsZmFjdG9yO1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYzo4OTA6XHRpcF92c19yaHRfc2V0X3RocmVzaG9sZHModCwgdC1cdTAwM2VzaXplLCBsZmFjdG9yLCBJUF9WU19DT05OX1RBQl9NSU5fQklUUyxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmMtODkxLVx0XHRcdFx0IGlwX3ZzX2Nvbm5fdGFiX2JpdHMpO1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmM9ODk2PXN0YXRpYyB2b2lkIGNvbm5fcmVzaXplX3dvcmtfaGFuZGxlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYy05MTQtXHQvKiBBbGxvdyB3b3JrIHRvIGJlIHF1ZXVlZCBhZ2FpbiAqL1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYzo5MTU6XHRjbGVhcl9iaXQoSVBfVlNfV09SS19DT05OX1JFU0laRSwgXHUwMDI2aXB2cy1cdTAwM2V3b3JrX2ZsYWdzKTtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmMtOTE2LVx0dCA9IHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQoaXB2cy1cdTAwM2Vjb25uX3RhYiwgMSk7XG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYy05MzUtXHQvKiBGbGlwIHRoZSB0YWJsZV9pZCAqL1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYzo5MzY6XHR0X25ldy1cdTAwM2V0YWJsZV9pZCA9IHQtXHUwMDNldGFibGVfaWQgXiBJUF9WU19SSFRfVEFCTEVfSURfTUFTSztcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmMtOTM3LVxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmM9MTAyMz1zdGF0aWMgaW5saW5lIHZvaWQgaXBfdnNfYmluZF94bWl0KHN0cnVjdCBpcF92c19jb25uICpjcClcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmMtMTAyNC17XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jOjEwMjU6XHRzd2l0Y2ggKElQX1ZTX0ZXRF9NRVRIT0QoY3ApKSB7XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jOjEwMjY6XHRjYXNlIElQX1ZTX0NPTk5fRl9NQVNROlxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYy0xMDI3LVx0XHRjcC1cdTAwM2VwYWNrZXRfeG1pdCA9IGlwX3ZzX25hdF94bWl0O1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmMtMTAyOS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmM6MTAzMDpcdGNhc2UgSVBfVlNfQ09OTl9GX1RVTk5FTDpcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmM6MTAzMTojaWZkZWYgQ09ORklHX0lQX1ZTX0lQVjZcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmMtMTAzMi1cdFx0aWYgKGNwLVx1MDAzZWRhZiA9PSBBRl9JTkVUNilcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jLTEwMzgtXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jOjEwMzk6XHRjYXNlIElQX1ZTX0NPTk5fRl9EUk9VVEU6XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jLTEwNDAtXHRcdGNwLVx1MDAzZXBhY2tldF94bWl0ID0gaXBfdnNfZHJfeG1pdDtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jLTEwNDItXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jOjEwNDM6XHRjYXNlIElQX1ZTX0NPTk5fRl9MT0NBTE5PREU6XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jLTEwNDQtXHRcdGNwLVx1MDAzZXBhY2tldF94bWl0ID0gaXBfdnNfbnVsbF94bWl0O1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmMtMTA0Ni1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmM6MTA0NzpcdGNhc2UgSVBfVlNfQ09OTl9GX0JZUEFTUzpcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmMtMTA0OC1cdFx0Y3AtXHUwMDNlcGFja2V0X3htaXQgPSBpcF92c19ieXBhc3NfeG1pdDtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jLTEwNTItXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jOjEwNTM6I2lmZGVmIENPTkZJR19JUF9WU19JUFY2XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jLTEwNTQtc3RhdGljIGlubGluZSB2b2lkIGlwX3ZzX2JpbmRfeG1pdF92NihzdHJ1Y3QgaXBfdnNfY29ubiAqY3ApXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jLTEwNTUte1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYzoxMDU2Olx0c3dpdGNoIChJUF9WU19GV0RfTUVUSE9EKGNwKSkge1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYzoxMDU3Olx0Y2FzZSBJUF9WU19DT05OX0ZfTUFTUTpcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmMtMTA1OC1cdFx0Y3AtXHUwMDNlcGFja2V0X3htaXQgPSBpcF92c19uYXRfeG1pdF92Njtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jLTEwNjAtXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jOjEwNjE6XHRjYXNlIElQX1ZTX0NPTk5fRl9UVU5ORUw6XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jLTEwNjItXHRcdGlmIChjcC1cdTAwM2VkYWYgPT0gQUZfSU5FVDYpXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYy0xMDY3LVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYzoxMDY4Olx0Y2FzZSBJUF9WU19DT05OX0ZfRFJPVVRFOlxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYy0xMDY5LVx0XHRjcC1cdTAwM2VwYWNrZXRfeG1pdCA9IGlwX3ZzX2RyX3htaXRfdjY7XG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYy0xMDcxLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYzoxMDcyOlx0Y2FzZSBJUF9WU19DT05OX0ZfTE9DQUxOT0RFOlxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYy0xMDczLVx0XHRjcC1cdTAwM2VwYWNrZXRfeG1pdCA9IGlwX3ZzX251bGxfeG1pdDtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jLTEwNzUtXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jOjEwNzY6XHRjYXNlIElQX1ZTX0NPTk5fRl9CWVBBU1M6XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jLTEwNzctXHRcdGNwLVx1MDAzZXBhY2tldF94bWl0ID0gaXBfdnNfYnlwYXNzX3htaXRfdjY7XG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYz0xMDg5PWlwX3ZzX2JpbmRfZGVzdChzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsIHN0cnVjdCBpcF92c19kZXN0ICpkZXN0KVxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmMtMTEwMi1cdGlmIChjcC1cdTAwM2Vwcm90b2NvbCAhPSBJUFBST1RPX1VEUClcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmM6MTEwMzpcdFx0Y29ubl9mbGFncyBcdTAwMjY9IH5JUF9WU19DT05OX0ZfT05FX1BBQ0tFVDtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmMtMTEwNC1cdGZsYWdzID0gY3AtXHUwMDNlZmxhZ3M7XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jLTExMDUtXHQvKiBCaW5kIHdpdGggdGhlIGRlc3RpbmF0aW9uIGFuZCBpdHMgY29ycmVzcG9uZGluZyB0cmFuc21pdHRlciAqL1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYzoxMTA2Olx0aWYgKGZsYWdzIFx1MDAyNiBJUF9WU19DT05OX0ZfU1lOQykge1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYy0xMTA3LVx0XHQvKiBTeW5jZWQgY29ubnMgYXJlIGhhc2hlZCwgc28gdGhleSBjYW4gbm90IGdldCB0aGlzIGZsYWcgKi9cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmM6MTEwODpcdFx0Y29ubl9mbGFncyBcdTAwMjY9IH5JUF9WU19DT05OX0ZfT05FX1BBQ0tFVDtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmMtMTEwOS1cbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jLTExMTItXHRcdCAqL1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYzoxMTEzOlx0XHRpZiAoIShmbGFncyBcdTAwMjYgSVBfVlNfQ09OTl9GX1RFTVBMQVRFKSlcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmM6MTExNDpcdFx0XHRjb25uX2ZsYWdzIFx1MDAyNj0gfklQX1ZTX0NPTk5fRl9JTkFDVElWRTtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmMtMTExNS1cdFx0LyogY29ubmVjdGlvbnMgaW5oZXJpdCBmb3J3YXJkaW5nIG1ldGhvZCBmcm9tIGRlc3QgKi9cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmM6MTExNjpcdFx0ZmxhZ3MgXHUwMDI2PSB+KElQX1ZTX0NPTk5fRl9GV0RfTUFTSyB8IElQX1ZTX0NPTk5fRl9OT09VVFBVVCk7XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jLTExMTctXHRcdGZsYWdzIHw9IGNvbm5fZmxhZ3M7XG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYy0xMTIwLVx0XHQgKi9cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmM6MTEyMTpcdFx0aWYgKGNwLVx1MDAzZWZsYWdzIFx1MDAyNiBJUF9WU19DT05OX0ZfSEFTSEVEKVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYy0xMTIyLVx0XHRcdGlwX3ZzX2Nvbm5fY2hhbmdlX2Z3ZF9tYXNrKGNwLCBmbGFncyk7XG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYy0xMTMwLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYzoxMTMxOlx0SVBfVlNfREJHX0JVRig3LCBcJiMzNDtCaW5kLWRlc3QgJXMgYzolczolZCB2OiVzOiVkIFwmIzM0O1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYy0xMTMyLVx0XHQgICAgICBcJiMzNDtkOiVzOiVkIGZ3ZDolYyBzOiV1IGNvbm4tXHUwMDNlZmxhZ3M6JVggY29ubi1cdTAwM2VyZWZjbnQ6JWQgXCYjMzQ7XG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYy0xMTM0LVx0XHQgICAgICBpcF92c19wcm90b19uYW1lKGNwLVx1MDAzZXByb3RvY29sKSxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmM6MTEzNTpcdFx0ICAgICAgSVBfVlNfREJHX0FERFIoY3AtXHUwMDNlYWYsIFx1MDAyNmNwLVx1MDAzZWNhZGRyKSwgbnRvaHMoY3AtXHUwMDNlY3BvcnQpLFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYzoxMTM2Olx0XHQgICAgICBJUF9WU19EQkdfQUREUihjcC1cdTAwM2VhZiwgXHUwMDI2Y3AtXHUwMDNldmFkZHIpLCBudG9ocyhjcC1cdTAwM2V2cG9ydCksXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jOjExMzc6XHRcdCAgICAgIElQX1ZTX0RCR19BRERSKGNwLVx1MDAzZWRhZiwgXHUwMDI2Y3AtXHUwMDNlZGFkZHIpLCBudG9ocyhjcC1cdTAwM2VkcG9ydCksXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jLTExMzgtXHRcdCAgICAgIGlwX3ZzX2Z3ZF90YWcoY3ApLCBjcC1cdTAwM2VzdGF0ZSxcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jLTExNDItXHQvKiBVcGRhdGUgdGhlIGNvbm5lY3Rpb24gY291bnRlcnMgKi9cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmM6MTE0MzpcdGlmICghKGZsYWdzIFx1MDAyNiBJUF9WU19DT05OX0ZfVEVNUExBVEUpKSB7XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jLTExNDQtXHRcdGludCB0Yztcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jLTExNDktXHRcdCAqL1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYzoxMTUwOlx0XHRpZiAoIShmbGFncyBcdTAwMjYgSVBfVlNfQ09OTl9GX0lOQUNUSVZFKSlcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmMtMTE1MS1cdFx0XHRhdG9taWNfaW5jKFx1MDAyNmRlc3QtXHUwMDNlYWN0aXZlY29ubnMpO1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmM9MTE2Nz12b2lkIGlwX3ZzX3RyeV9iaW5kX2Rlc3Qoc3RydWN0IGlwX3ZzX2Nvbm4gKmNwKVxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmMtMTIwMC1cdFx0Y3AtXHUwMDNlcGFja2V0X3htaXQgPSBOVUxMO1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYzoxMjAxOiNpZmRlZiBDT05GSUdfSVBfVlNfSVBWNlxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYy0xMjAyLVx0XHRpZiAoY3AtXHUwMDNlYWYgPT0gQUZfSU5FVDYpXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYz0xMjIwPXN0YXRpYyBpbmxpbmUgdm9pZCBpcF92c191bmJpbmRfZGVzdChzdHJ1Y3QgaXBfdnNfY29ubiAqY3ApXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYy0xMjI2LVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYzoxMjI3Olx0SVBfVlNfREJHX0JVRig3LCBcJiMzNDtVbmJpbmQtZGVzdCAlcyBjOiVzOiVkIHY6JXM6JWQgXCYjMzQ7XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jLTEyMjgtXHRcdCAgICAgIFwmIzM0O2Q6JXM6JWQgZndkOiVjIHM6JXUgY29ubi1cdTAwM2VmbGFnczolWCBjb25uLVx1MDAzZXJlZmNudDolZCBcJiMzNDtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jLTEyMzAtXHRcdCAgICAgIGlwX3ZzX3Byb3RvX25hbWUoY3AtXHUwMDNlcHJvdG9jb2wpLFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYzoxMjMxOlx0XHQgICAgICBJUF9WU19EQkdfQUREUihjcC1cdTAwM2VhZiwgXHUwMDI2Y3AtXHUwMDNlY2FkZHIpLCBudG9ocyhjcC1cdTAwM2VjcG9ydCksXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jOjEyMzI6XHRcdCAgICAgIElQX1ZTX0RCR19BRERSKGNwLVx1MDAzZWFmLCBcdTAwMjZjcC1cdTAwM2V2YWRkciksIG50b2hzKGNwLVx1MDAzZXZwb3J0KSxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmM6MTIzMzpcdFx0ICAgICAgSVBfVlNfREJHX0FERFIoY3AtXHUwMDNlZGFmLCBcdTAwMjZjcC1cdTAwM2VkYWRkciksIG50b2hzKGNwLVx1MDAzZWRwb3J0KSxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmMtMTIzNC1cdFx0ICAgICAgaXBfdnNfZndkX3RhZyhjcCksIGNwLVx1MDAzZXN0YXRlLFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmMtMTIzOC1cdC8qIFVwZGF0ZSB0aGUgY29ubmVjdGlvbiBjb3VudGVycyAqL1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYzoxMjM5Olx0aWYgKCEoY3AtXHUwMDNlZmxhZ3MgXHUwMDI2IElQX1ZTX0NPTk5fRl9URU1QTEFURSkpIHtcblxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDE3OjQzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3NDA3CgkJCQkJCQlvdXRwdXQ6IDQzCgkJCQkJCQl0aG91Z2h0czogNTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjoKCioqRGl2aW5nIGludG8gdGhlIElQVlMgU3luYyBDb2RlKioKCk9rYXksIHNvIHdlIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIGhvdyB0aGVzZSBjb25uZWN0aW9uIHN5bmNocm9uaXphdGlvbiBtZWNoYW5pc21zIGluIElQVlMgYXJlIGV2b2x2aW5nLiBNeSBndXQgZmVlbGluZyBpcyB0byBzdGFydCBieSBleGFtaW5pbmcgdGhlIGNoYW5nZXMgYXJvdW5kIHRoZSBgbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuY2AgZmlsZS4gVGhhdCYjMzk7cyB0aGUgbGlrZWx5IHNwb3QgZm9yIHRoZSBjb3JlIHN5bmNocm9uaXphdGlvbiBsb2dpYy4gSSB3YW50IHRvIHNlZSBob3cgdGhleSYjMzk7cmUgZGVmaW5pbmcgYW5kIHVzaW5nIGBpcF92c19zeW5jX2Nvbm5gIGFuZCBgaXBfdnNfc3luY19jb25uX3YwYCwgc3BlY2lmaWNhbGx5LiBUaGUgZGVmaW5pdGlvbnMgc2hvdWxkIGlsbHVtaW5hdGUgdGhlIGRhdGEgc3RydWN0dXJlcyBpbnZvbHZlZCwgYW5kIHRoZSBjYWxsIHNpdGVzIHdpbGwgcmV2ZWFsIHRoZSBzeW5jaHJvbml6YXRpb24gd29ya2Zsb3cuIEJ5IHRyYWNpbmcgdGhlIGNhbGxzIHRvIHRoZXNlIGZ1bmN0aW9ucywgSSBjYW4gdW5kZXJzdGFuZCB3aGVyZSBhbmQgaG93IHRoZSBjb25uZWN0aW9uIHN0YXRlIGlzIGJlaW5nIHNoYXJlZCAob3Igbm90KSBiZXR3ZWVuIG5vZGVzLiBUaGlzIHNob3VsZCBnaXZlIG1lIGEgc29saWQgYmFzZSBmb3IgdW5kZXJzdGFuZGluZyBhbnkgbW9kaWZpY2F0aW9ucyBvciBwb3RlbnRpYWwgaXNzdWVzIGluIHRoZSBjb25uZWN0aW9uIHRyYWNraW5nIHN5bmNocm9uaXphdGlvbiB3aXRoaW4gdGhlIGNvbnRleHQgb2YgSVBWUy4gSSBleHBlY3QgdG8gZmluZCBjbHVlcyBhYm91dCB2ZXJzaW9uaW5nIGFuZCBjb21wYXRpYmlsaXR5IHRoZXJlIGFzIHdlbGwuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTc6NDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNTQwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDgwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA1NDA6XHRcdFx0XHQgICAgICAgaW50IHBrdHMpXG4gNTQxOlx0e1xuIDU0MjpcdFx0c3RydWN0IGlwX3ZzX3N5bmNfbWVzZ192MCAqbTtcbiA1NDM6XHRcdHN0cnVjdCBpcF92c19zeW5jX2Nvbm5fdjAgKnM7XG4gNTQ0Olx0XHRzdHJ1Y3QgaXBfdnNfc3luY19idWZmICpidWZmO1xuIDU0NTpcdFx0c3RydWN0IGlwdnNfbWFzdGVyX3N5bmNfc3RhdGUgKm1zO1xuIDU0NjpcdFx0dTMyIGZsYWdzLCBzZXFfbWFzaztcbiA1NDc6XHRcdHVuc2lnbmVkIGludCBsZW47XG4gNTQ4Olx0XHRpbnQgaWQ7XG4gNTQ5Olx0XG4gNTUwOlx0XHRpZiAodW5saWtlbHkoY3AtXHUwMDNlYWYgIT0gQUZfSU5FVCkpXG4gNTUxOlx0XHRcdHJldHVybjtcbiA1NTI6XHRcdGZsYWdzID0gUkVBRF9PTkNFKGNwLVx1MDAzZWZsYWdzKTtcbiA1NTM6XHRcdC8qIERvIG5vdCBzeW5jIE9ORSBQQUNLRVQgKi9cbiA1NTQ6XHRcdGlmIChmbGFncyBcdTAwMjYgSVBfVlNfQ09OTl9GX09ORV9QQUNLRVQpXG4gNTU1Olx0XHRcdHJldHVybjtcbiA1NTY6XHRcbiA1NTc6XHRcdGlmICghaXBfdnNfc3luY19jb25uX25lZWRlZChpcHZzLCBjcCwgcGt0cykpXG4gNTU4Olx0XHRcdHJldHVybjtcbiA1NTk6XHRcbiA1NjA6XHRcdHNwaW5fbG9ja19iaChcdTAwMjZpcHZzLVx1MDAzZXN5bmNfYnVmZl9sb2NrKTtcbiA1NjE6XHRcdGlmICghKGlwdnMtXHUwMDNlc3luY19zdGF0ZSBcdTAwMjYgSVBfVlNfU1RBVEVfTUFTVEVSKSkge1xuIDU2MjpcdFx0XHRzcGluX3VubG9ja19iaChcdTAwMjZpcHZzLVx1MDAzZXN5bmNfYnVmZl9sb2NrKTtcbiA1NjM6XHRcdFx0cmV0dXJuO1xuIDU2NDpcdFx0fVxuIDU2NTpcdFxuIDU2NjpcdFx0aWQgPSBzZWxlY3RfbWFzdGVyX3RocmVhZF9pZChpcHZzLCBjcCk7XG4gNTY3Olx0XHRtcyA9IFx1MDAyNmlwdnMtXHUwMDNlbXNbaWRdO1xuIDU2ODpcdFx0YnVmZiA9IG1zLVx1MDAzZXN5bmNfYnVmZjtcbiA1Njk6XHRcdHNlcV9tYXNrID0gZmxhZ3MgXHUwMDI2IElQX1ZTX0NPTk5fRl9TRVFfTUFTSztcbiA1NzA6XHRcdGxlbiA9IHNlcV9tYXNrID8gRlVMTF9DT05OX1NJWkUgOiBTSU1QTEVfQ09OTl9TSVpFO1xuIDU3MTpcdFx0aWYgKGJ1ZmYpIHtcbiA1NzI6XHRcdFx0bSA9IChzdHJ1Y3QgaXBfdnNfc3luY19tZXNnX3YwICopIGJ1ZmYtXHUwMDNlbWVzZztcbiA1NzM6XHRcdFx0LyogU2VuZCBidWZmZXIgaWYgaXQgaXMgZm9yIHYxICovXG4gNTc0Olx0XHRcdGlmIChidWZmLVx1MDAzZWhlYWQgJiM0MzsgbGVuIFx1MDAzZSBidWZmLVx1MDAzZWVuZCB8fCAhbS1cdTAwM2Vucl9jb25ucykge1xuIDU3NTpcdFx0XHRcdHNiX3F1ZXVlX3RhaWwoaXB2cywgbXMpO1xuIDU3NjpcdFx0XHRcdG1zLVx1MDAzZXN5bmNfYnVmZiA9IE5VTEw7XG4gNTc3Olx0XHRcdFx0YnVmZiA9IE5VTEw7XG4gNTc4Olx0XHRcdH1cbiA1Nzk6XHRcdH1cbiA1ODA6XHRcdGlmICghYnVmZikge1xuIDU4MTpcdFx0XHRidWZmID0gaXBfdnNfc3luY19idWZmX2NyZWF0ZV92MChpcHZzLCBsZW4pO1xuIDU4MjpcdFx0XHRpZiAoIWJ1ZmYpIHtcbiA1ODM6XHRcdFx0XHRzcGluX3VubG9ja19iaChcdTAwMjZpcHZzLVx1MDAzZXN5bmNfYnVmZl9sb2NrKTtcbiA1ODQ6XHRcdFx0XHRwcl9lcnIoXCYjMzQ7aXBfdnNfc3luY19idWZmX2NyZWF0ZSBmYWlsZWQuXFxuXCYjMzQ7KTtcbiA1ODU6XHRcdFx0XHRyZXR1cm47XG4gNTg2Olx0XHRcdH1cbiA1ODc6XHRcdFx0bXMtXHUwMDNlc3luY19idWZmID0gYnVmZjtcbiA1ODg6XHRcdH1cbiA1ODk6XHRcbiA1OTA6XHRcdG0gPSAoc3RydWN0IGlwX3ZzX3N5bmNfbWVzZ192MCAqKSBidWZmLVx1MDAzZW1lc2c7XG4gNTkxOlx0XHRzID0gKHN0cnVjdCBpcF92c19zeW5jX2Nvbm5fdjAgKikgYnVmZi1cdTAwM2VoZWFkO1xuIDU5MjpcdFxuIDU5MzpcdFx0LyogY29weSBtZW1iZXJzICovXG4gNTk0Olx0XHRzLVx1MDAzZXJlc2VydmVkID0gMDtcbiA1OTU6XHRcdHMtXHUwMDNlcHJvdG9jb2wgPSBjcC1cdTAwM2Vwcm90b2NvbDtcbiA1OTY6XHRcdHMtXHUwMDNlY3BvcnQgPSBjcC1cdTAwM2VjcG9ydDtcbiA1OTc6XHRcdHMtXHUwMDNldnBvcnQgPSBjcC1cdTAwM2V2cG9ydDtcbiA1OTg6XHRcdHMtXHUwMDNlZHBvcnQgPSBjcC1cdTAwM2VkcG9ydDtcbiA1OTk6XHRcdHMtXHUwMDNlY2FkZHIgPSBjcC1cdTAwM2VjYWRkci5pcDtcbiA2MDA6XHRcdHMtXHUwMDNldmFkZHIgPSBjcC1cdTAwM2V2YWRkci5pcDtcbiA2MDE6XHRcdHMtXHUwMDNlZGFkZHIgPSBjcC1cdTAwM2VkYWRkci5pcDtcbiA2MDI6XHRcdHMtXHUwMDNlZmxhZ3MgPSBodG9ucyhmbGFncyBcdTAwMjYgfklQX1ZTX0NPTk5fRl9IQVNIRUQpO1xuIDYwMzpcdFx0cy1cdTAwM2VzdGF0ZSA9IGh0b25zKGNwLVx1MDAzZXN0YXRlKTtcbiA2MDQ6XHRcdGlmIChzZXFfbWFzaykge1xuIDYwNTpcdFx0XHRzdHJ1Y3QgaXBfdnNfc3luY19jb25uX29wdGlvbnMgKm9wdCA9XG4gNjA2Olx0XHRcdFx0KHN0cnVjdCBpcF92c19zeW5jX2Nvbm5fb3B0aW9ucyAqKVx1MDAyNnNbMV07XG4gNjA3Olx0XHRcdG1lbWNweShvcHQsIFx1MDAyNmNwLVx1MDAzZXN5bmNfY29ubl9vcHQsIHNpemVvZigqb3B0KSk7XG4gNjA4Olx0XHR9XG4gNjA5Olx0XG4gNjEwOlx0XHRtLVx1MDAzZW5yX2Nvbm5zJiM0MzsmIzQzOztcbiA2MTE6XHRcdG0tXHUwMDNlc2l6ZSA9IGh0b25zKG50b2hzKG0tXHUwMDNlc2l6ZSkgJiM0MzsgbGVuKTtcbiA2MTI6XHRcdGJ1ZmYtXHUwMDNlaGVhZCAmIzQzOz0gbGVuO1xuIDYxMzpcdFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2aXB2cy1cdTAwM2VzeW5jX2J1ZmZfbG9jayk7XG4gNjE0Olx0XG4gNjE1Olx0XHQvKiBzeW5jaHJvbml6ZSBpdHMgY29udHJvbGxlciBpZiBpdCBoYXMgKi9cbiA2MTY6XHRcdGNwID0gY3AtXHUwMDNlY29udHJvbDtcbiA2MTc6XHRcdGlmIChjcCkge1xuIDYxODpcdFx0XHRpZiAoY3AtXHUwMDNlZmxhZ3MgXHUwMDI2IElQX1ZTX0NPTk5fRl9URU1QTEFURSlcbiA2MTk6XHRcdFx0XHRwa3RzID0gYXRvbWljX2luY19yZXR1cm4oXHUwMDI2Y3AtXHUwMDNlaW5fcGt0cyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTc6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTkwMjAKCQkJCQkJCW91dHB1dDogNDQKCQkJCQkJCXRob3VnaHRzOiAyNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIGBpcF92c19zeW5jLmNgIC0gTGluZXMgNjIwLTc2MCoqCgpPa2F5LCBzbyB3ZSYjMzk7cmUgZm9jdXNpbmcgb24gYSBzcGVjaWZpYyBjaHVuayBvZiBgaXBfdnNfc3luYy5jYCwgbGluZXMgNjIwIHRvIDc2MC4gSSBpbW1lZGlhdGVseSB0aGluazogJiMzNDtXaGF0JiMzOTtzIHRoZSBjb250ZXh0IGhlcmU/IFdoYXQgcGFydCBvZiB0aGUgc3luY2hyb25pemF0aW9uIGxvZ2ljIGFyZSB3ZSBsb29raW5nIGF0PyYjMzQ7IEtub3dpbmcgdGhpcyBjb2RlLCBJJiMzOTttIGFscmVhZHkgYW50aWNpcGF0aW5nIHdlJiMzOTtsbCBiZSBkZWFsaW5nIHdpdGggZWl0aGVyIGNvbm5lY3Rpb24gdHJhY2tpbmcgdXBkYXRlcywgcGVyaGFwcyBhIGNyaXRpY2FsIHNlY3Rpb24sIG9yIHBvdGVudGlhbGx5IHNvbWUga2luZCBvZiBoZWFsdGggY2hlY2sgbWVjaGFuaXNtIHN5bmMuIFRoaXMgYXJlYSBpcyBsaWtlbHkgaW52b2x2ZWQgaW4gaG93IHZpcnR1YWwgc2VydmVycyBhbmQgcmVhbCBzZXJ2ZXJzIHNoYXJlIHRoZWlyIGN1cnJlbnQgY29ubmVjdGlvbiBzdGF0ZXMgd2l0aCBlYWNoIG90aGVyLgoKSSYjMzk7bSBtZW50YWxseSBwcmVwYXJpbmcgZm9yIGEgZGVlcCBkaXZlLiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBhbnkgaW5kaWNhdGlvbnMgb2YgbG9ja2luZyBtZWNoYW5pc21zIOKAkyBtdXRleGVzIG9yIHNwaW5sb2NrcyDigJMgYXJvdW5kIHNoYXJlZCBkYXRhIHN0cnVjdHVyZXMuIEFyZSB0aGV5IHVzaW5nIHJlYWQtY29weS11cGRhdGUgKFJDVSkgaGVyZSBmb3IgYW55IG9mIHRoZSBzaGFyZWQgc3RydWN0dXJlcz8gQW55IHVzZSBvZiBhdG9taWMgb3BlcmF0aW9ucyBvciBtZW1vcnkgYmFycmllcnMgd2lsbCBiZSBvZiBncmVhdCBpbnRlcmVzdCBmb3IgbWUuIEkmIzM5O20gYWxzbyByZWFkeSB0byBhbmFseXplIHRoZSBlcnJvciBoYW5kbGluZyBhbmQgcmVjb3Zlcnkgc3RyYXRlZ2llcyB3aXRoaW4gdGhpcyBzZWN0aW9uOiBhcmUgdGhleSBqdXN0IGxvZ2dpbmcgZmFpbHVyZXMsIG9yIGF0dGVtcHRpbmcgdG8gcmV0cnkgc3luY2hyb25pemF0aW9uPwoKSSYjMzk7bSBrZWVwaW5nIGFuIGV5ZSBvdXQgZm9yIGFueSBzcGVjaWZpYyBkYXRhIHN0cnVjdHVyZXMgcmVmZXJlbmNlZC4gQXJlIHRoZXkgdXBkYXRpbmcgdGhlIGBpcF92c19jb25uYCBzdHJ1Y3R1cmUsIHRoZSBgaXBfdnNfZGVzdGAgc3RydWN0dXJlLCBvciBzb21lIGN1c3RvbSBzeW5jaHJvbml6YXRpb24gbWV0YWRhdGE/IEhvdyBhcmUgdGhleSBoYW5kbGluZyB0aGUgZGlmZmVyZW50IHN0YXRlcyBhIGNvbm5lY3Rpb24gY2FuIGJlIGluIChFU1RBQkxJU0hFRCwgRklOX1dBSVQsIGV0Yy4pIGFuZCB3aGF0IGltcGxpY2F0aW9ucyBkbyB0aG9zZSBzdGF0ZXMgaGF2ZT8gR2l2ZW4gdGhlIHJhbmdlLCBJJiMzOTttIGV4cGVjdGluZyBzb21lIHByZXR0eSBsb3ctbGV2ZWwgc29ja2V0IG9wZXJhdGlvbnMgb3IgbWVtb3J5IG1hbmlwdWxhdGlvbnMsIHNvIEkmIzM5O20gYWxzbyBwcmVwYXJpbmcgZm9yIHRoZSB0eXBpY2FsIGlzc3VlcyBhc3NvY2lhdGVkIHdpdGggc2hhcmVkIG1lbW9yeSBpbiBhIGhpZ2gtY29uY3VycmVuY3kgc2NlbmFyaW8uIEkgd29uZGVyIGlmIHRoZXkgd2lsbCBiZSBoYW5kbGluZyBmcmFnbWVudGF0aW9uIGlzc3VlcyBvciBVRFAgcGFja2V0cyBhcyB3ZWxsLgoKTGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIGFjdHVhbGx5IGluIHRoZXJlIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDE3OjQzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDYyMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDYyMDpcdFx0XHRlbHNlXG4gNjIxOlx0XHRcdFx0cGt0cyA9IHN5c2N0bF9zeW5jX3RocmVzaG9sZChpcHZzKTtcbiA2MjI6XHRcdFx0aXBfdnNfc3luY19jb25uKGlwdnMsIGNwLCBwa3RzKTtcbiA2MjM6XHRcdH1cbiA2MjQ6XHR9XG4gNjI1Olx0XG4gNjI2Olx0LypcbiA2Mjc6XHQgKiAgICAgIEFkZCBhbiBpcF92c19jb25uIGluZm9ybWF0aW9uIGludG8gdGhlIGN1cnJlbnQgc3luY19idWZmLlxuIDYyODpcdCAqICAgICAgQ2FsbGVkIGJ5IGlwX3ZzX2luLlxuIDYyOTpcdCAqICAgICAgU2VuZGluZyBWZXJzaW9uIDEgbWVzc2FnZXNcbiA2MzA6XHQgKi9cbiA2MzE6XHR2b2lkIGlwX3ZzX3N5bmNfY29ubihzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLCBpbnQgcGt0cylcbiA2MzI6XHR7XG4gNjMzOlx0XHRzdHJ1Y3QgaXBfdnNfc3luY19tZXNnICptO1xuIDYzNDpcdFx0dW5pb24gaXBfdnNfc3luY19jb25uICpzO1xuIDYzNTpcdFx0c3RydWN0IGlwX3ZzX3N5bmNfYnVmZiAqYnVmZjtcbiA2MzY6XHRcdHN0cnVjdCBpcHZzX21hc3Rlcl9zeW5jX3N0YXRlICptcztcbiA2Mzc6XHRcdGludCBpZDtcbiA2Mzg6XHRcdF9fdTggKnA7XG4gNjM5Olx0XHR1bnNpZ25lZCBpbnQgbGVuLCBwZV9uYW1lX2xlbiwgcGFkO1xuIDY0MDpcdFx0dTMyIGZsYWdzLCBzZXFfbWFzaztcbiA2NDE6XHRcbiA2NDI6XHRcdC8qIEhhbmRsZSBvbGQgdmVyc2lvbiBvZiB0aGUgcHJvdG9jb2wgKi9cbiA2NDM6XHRcdGlmIChzeXNjdGxfc3luY192ZXIoaXB2cykgPT0gMCkge1xuIDY0NDpcdFx0XHRpcF92c19zeW5jX2Nvbm5fdjAoaXB2cywgY3AsIHBrdHMpO1xuIDY0NTpcdFx0XHRyZXR1cm47XG4gNjQ2Olx0XHR9XG4gNjQ3Olx0XHQvKiBEbyBub3Qgc3luYyBPTkUgUEFDS0VUICovXG4gNjQ4Olx0XHRpZiAoY3AtXHUwMDNlZmxhZ3MgXHUwMDI2IElQX1ZTX0NPTk5fRl9PTkVfUEFDS0VUKVxuIDY0OTpcdFx0XHRnb3RvIGNvbnRyb2w7XG4gNjUwOlx0c2xvb3A6XG4gNjUxOlx0XHRpZiAoIWlwX3ZzX3N5bmNfY29ubl9uZWVkZWQoaXB2cywgY3AsIHBrdHMpKVxuIDY1MjpcdFx0XHRnb3RvIGNvbnRyb2w7XG4gNjUzOlx0XHRmbGFncyA9IFJFQURfT05DRShjcC1cdTAwM2VmbGFncyk7XG4gNjU0Olx0XG4gNjU1Olx0XHQvKiBTYW5pdHkgY2hlY2tzICovXG4gNjU2Olx0XHRwZV9uYW1lX2xlbiA9IDA7XG4gNjU3Olx0XHRpZiAoY3AtXHUwMDNlcGVfZGF0YV9sZW4pIHtcbiA2NTg6XHRcdFx0aWYgKCFjcC1cdTAwM2VwZV9kYXRhIHx8ICFjcC1cdTAwM2VkZXN0KSB7XG4gNjU5Olx0XHRcdFx0SVBfVlNfRVJSX1JMKFwmIzM0O1NZTkMsIGNvbm5lY3Rpb24gcGVfZGF0YSBpbnZhbGlkXFxuXCYjMzQ7KTtcbiA2NjA6XHRcdFx0XHRyZXR1cm47XG4gNjYxOlx0XHRcdH1cbiA2NjI6XHRcdFx0cGVfbmFtZV9sZW4gPSBzdHJubGVuKGNwLVx1MDAzZXBlLVx1MDAzZW5hbWUsIElQX1ZTX1BFTkFNRV9NQVhMRU4pO1xuIDY2MzpcdFx0fVxuIDY2NDpcdFxuIDY2NTpcdFx0c3Bpbl9sb2NrX2JoKFx1MDAyNmlwdnMtXHUwMDNlc3luY19idWZmX2xvY2spO1xuIDY2NjpcdFx0aWYgKCEoaXB2cy1cdTAwM2VzeW5jX3N0YXRlIFx1MDAyNiBJUF9WU19TVEFURV9NQVNURVIpKSB7XG4gNjY3Olx0XHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNmlwdnMtXHUwMDNlc3luY19idWZmX2xvY2spO1xuIDY2ODpcdFx0XHRyZXR1cm47XG4gNjY5Olx0XHR9XG4gNjcwOlx0XG4gNjcxOlx0XHRpZCA9IHNlbGVjdF9tYXN0ZXJfdGhyZWFkX2lkKGlwdnMsIGNwKTtcbiA2NzI6XHRcdG1zID0gXHUwMDI2aXB2cy1cdTAwM2Vtc1tpZF07XG4gNjczOlx0XG4gNjc0Olx0I2lmZGVmIENPTkZJR19JUF9WU19JUFY2XG4gNjc1Olx0XHRpZiAoY3AtXHUwMDNlYWYgPT0gQUZfSU5FVDYpXG4gNjc2Olx0XHRcdGxlbiA9IHNpemVvZihzdHJ1Y3QgaXBfdnNfc3luY192Nik7XG4gNjc3Olx0XHRlbHNlXG4gNjc4Olx0I2VuZGlmXG4gNjc5Olx0XHRcdGxlbiA9IHNpemVvZihzdHJ1Y3QgaXBfdnNfc3luY192NCk7XG4gNjgwOlx0XG4gNjgxOlx0XHRzZXFfbWFzayA9IGZsYWdzIFx1MDAyNiBJUF9WU19DT05OX0ZfU0VRX01BU0s7XG4gNjgyOlx0XHRpZiAoc2VxX21hc2spXG4gNjgzOlx0XHRcdGxlbiAmIzQzOz0gc2l6ZW9mKHN0cnVjdCBpcF92c19zeW5jX2Nvbm5fb3B0aW9ucykgJiM0MzsgMjtcbiA2ODQ6XHRcbiA2ODU6XHRcdGlmIChjcC1cdTAwM2VwZV9kYXRhX2xlbilcbiA2ODY6XHRcdFx0bGVuICYjNDM7PSBjcC1cdTAwM2VwZV9kYXRhX2xlbiAmIzQzOyAyO1x0LyogJiM0MzsgUGFyYW0gaGRyIGZpZWxkICovXG4gNjg3Olx0XHRpZiAocGVfbmFtZV9sZW4pXG4gNjg4Olx0XHRcdGxlbiAmIzQzOz0gcGVfbmFtZV9sZW4gJiM0MzsgMjtcbiA2ODk6XHRcbiA2OTA6XHRcdC8qIGNoZWNrIGlmIHRoZXJlIGlzIGEgc3BhY2UgZm9yIHRoaXMgb25lICAqL1xuIDY5MTpcdFx0cGFkID0gMDtcbiA2OTI6XHRcdGJ1ZmYgPSBtcy1cdTAwM2VzeW5jX2J1ZmY7XG4gNjkzOlx0XHRpZiAoYnVmZikge1xuIDY5NDpcdFx0XHRtID0gYnVmZi1cdTAwM2VtZXNnO1xuIDY5NTpcdFx0XHRwYWQgPSAoNCAtIChzaXplX3QpIGJ1ZmYtXHUwMDNlaGVhZCkgXHUwMDI2IDM7XG4gNjk2Olx0XHRcdC8qIFNlbmQgYnVmZmVyIGlmIGl0IGlzIGZvciB2MCAqL1xuIDY5NzpcdFx0XHRpZiAoYnVmZi1cdTAwM2VoZWFkICYjNDM7IGxlbiAmIzQzOyBwYWQgXHUwMDNlIGJ1ZmYtXHUwMDNlZW5kIHx8IG0tXHUwMDNlcmVzZXJ2ZWQpIHtcbiA2OTg6XHRcdFx0XHRzYl9xdWV1ZV90YWlsKGlwdnMsIG1zKTtcbiA2OTk6XHRcdFx0XHRtcy1cdTAwM2VzeW5jX2J1ZmYgPSBOVUxMO1xuIDcwMDpcdFx0XHRcdGJ1ZmYgPSBOVUxMO1xuIDcwMTpcdFx0XHRcdHBhZCA9IDA7XG4gNzAyOlx0XHRcdH1cbiA3MDM6XHRcdH1cbiA3MDQ6XHRcbiA3MDU6XHRcdGlmICghYnVmZikge1xuIDcwNjpcdFx0XHRidWZmID0gaXBfdnNfc3luY19idWZmX2NyZWF0ZShpcHZzLCBsZW4pO1xuIDcwNzpcdFx0XHRpZiAoIWJ1ZmYpIHtcbiA3MDg6XHRcdFx0XHRzcGluX3VubG9ja19iaChcdTAwMjZpcHZzLVx1MDAzZXN5bmNfYnVmZl9sb2NrKTtcbiA3MDk6XHRcdFx0XHRwcl9lcnIoXCYjMzQ7aXBfdnNfc3luY19idWZmX2NyZWF0ZSBmYWlsZWQuXFxuXCYjMzQ7KTtcbiA3MTA6XHRcdFx0XHRyZXR1cm47XG4gNzExOlx0XHRcdH1cbiA3MTI6XHRcdFx0bXMtXHUwMDNlc3luY19idWZmID0gYnVmZjtcbiA3MTM6XHRcdFx0bSA9IGJ1ZmYtXHUwMDNlbWVzZztcbiA3MTQ6XHRcdH1cbiA3MTU6XHRcbiA3MTY6XHRcdHAgPSBidWZmLVx1MDAzZWhlYWQ7XG4gNzE3Olx0XHRidWZmLVx1MDAzZWhlYWQgJiM0Mzs9IHBhZCAmIzQzOyBsZW47XG4gNzE4Olx0XHRtLVx1MDAzZXNpemUgPSBodG9ucyhudG9ocyhtLVx1MDAzZXNpemUpICYjNDM7IHBhZCAmIzQzOyBsZW4pO1xuIDcxOTpcdFx0LyogQWRkIGV2LiBwYWRkaW5nIGZyb20gcHJldi4gc3luY19jb25uICovXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTc6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjEwMzIKCQkJCQkJCW91dHB1dDogNDMKCQkJCQkJCXRob3VnaHRzOiAxNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgRGVlcGVyIGludG8gYGlwX3ZzX3N5bmNfY29ubmAqKgoKQWxyaWdodCwgSSYjMzk7bSB0aGlua2luZyBhYm91dCBgaXBfdnNfc3luY19jb25uYC4gSXQmIzM5O3MgYSBrZXkgcGllY2Ugb2YgdGhlIElQVlMgc3luY2hyb25pemF0aW9uIHB1enpsZSwgYW5kIEkgbmVlZCB0byByZWZyZXNoIG15IHVuZGVyc3RhbmRpbmcgb2YgaXRzIHJvbGUuIFRoZSBuYW1lIGl0c2VsZiBzdWdnZXN0cyBhIGNvbm5lY3Rpb24tcmVsYXRlZCBmdW5jdGlvbiwgbGlrZWx5IHRpZWQgdG8gbWFpbnRhaW5pbmcgc3RhdGUgY29uc2lzdGVuY3kgYWNyb3NzIHRoZSBjbHVzdGVyLiBJIG5lZWQgdG8gcXVpY2tseSBnZXQgYSBmdWxsIHBpY3R1cmUgb2YgdGhlIGJlaGF2aW9yLiBJIG5lZWQgdG8gcXVpY2tseSBzZWUgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgaW52b2x2ZWQgd2l0aCBgaXBfdnNfc3luY19jb25uYCB0byBrbm93IGV4YWN0bHkgd2hhdCBpdCBkb2VzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxNzo0MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA3MjAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDcyMDpcdFx0d2hpbGUgKHBhZC0tKVxuIDcyMTpcdFx0XHQqKHAmIzQzOyYjNDM7KSA9IDA7XG4gNzIyOlx0XG4gNzIzOlx0XHRzID0gKHVuaW9uIGlwX3ZzX3N5bmNfY29ubiAqKXA7XG4gNzI0Olx0XG4gNzI1Olx0XHQvKiBTZXQgbWVzc2FnZSB0eXBlICBcdTAwMjYgY29weSBtZW1iZXJzICovXG4gNzI2Olx0XHRzLVx1MDAzZXY0LnR5cGUgPSAoY3AtXHUwMDNlYWYgPT0gQUZfSU5FVDYgPyBTVFlQRV9GX0lORVQ2IDogMCk7XG4gNzI3Olx0XHRzLVx1MDAzZXY0LnZlcl9zaXplID0gaHRvbnMobGVuIFx1MDAyNiBTVkVSX01BU0spO1x0LyogVmVyc2lvbiAwICovXG4gNzI4Olx0XHRzLVx1MDAzZXY0LmZsYWdzID0gaHRvbmwoZmxhZ3MgXHUwMDI2IH5JUF9WU19DT05OX0ZfSEFTSEVEKTtcbiA3Mjk6XHRcdHMtXHUwMDNldjQuc3RhdGUgPSBodG9ucyhjcC1cdTAwM2VzdGF0ZSk7XG4gNzMwOlx0XHRzLVx1MDAzZXY0LnByb3RvY29sID0gY3AtXHUwMDNlcHJvdG9jb2w7XG4gNzMxOlx0XHRzLVx1MDAzZXY0LmNwb3J0ID0gY3AtXHUwMDNlY3BvcnQ7XG4gNzMyOlx0XHRzLVx1MDAzZXY0LnZwb3J0ID0gY3AtXHUwMDNldnBvcnQ7XG4gNzMzOlx0XHRzLVx1MDAzZXY0LmRwb3J0ID0gY3AtXHUwMDNlZHBvcnQ7XG4gNzM0Olx0XHRzLVx1MDAzZXY0LmZ3bWFyayA9IGh0b25sKGNwLVx1MDAzZWZ3bWFyayk7XG4gNzM1Olx0XHRzLVx1MDAzZXY0LnRpbWVvdXQgPSBodG9ubChjcC1cdTAwM2V0aW1lb3V0IC8gSFopO1xuIDczNjpcdFx0bS1cdTAwM2Vucl9jb25ucyYjNDM7JiM0Mzs7XG4gNzM3Olx0XG4gNzM4Olx0I2lmZGVmIENPTkZJR19JUF9WU19JUFY2XG4gNzM5Olx0XHRpZiAoY3AtXHUwMDNlYWYgPT0gQUZfSU5FVDYpIHtcbiA3NDA6XHRcdFx0cCAmIzQzOz0gc2l6ZW9mKHN0cnVjdCBpcF92c19zeW5jX3Y2KTtcbiA3NDE6XHRcdFx0cy1cdTAwM2V2Ni5jYWRkciA9IGNwLVx1MDAzZWNhZGRyLmluNjtcbiA3NDI6XHRcdFx0cy1cdTAwM2V2Ni52YWRkciA9IGNwLVx1MDAzZXZhZGRyLmluNjtcbiA3NDM6XHRcdFx0cy1cdTAwM2V2Ni5kYWRkciA9IGNwLVx1MDAzZWRhZGRyLmluNjtcbiA3NDQ6XHRcdH0gZWxzZVxuIDc0NTpcdCNlbmRpZlxuIDc0NjpcdFx0e1xuIDc0NzpcdFx0XHRwICYjNDM7PSBzaXplb2Yoc3RydWN0IGlwX3ZzX3N5bmNfdjQpO1x0Lyogb3B0aW9ucyBwdHIgKi9cbiA3NDg6XHRcdFx0cy1cdTAwM2V2NC5jYWRkciA9IGNwLVx1MDAzZWNhZGRyLmlwO1xuIDc0OTpcdFx0XHRzLVx1MDAzZXY0LnZhZGRyID0gY3AtXHUwMDNldmFkZHIuaXA7XG4gNzUwOlx0XHRcdHMtXHUwMDNldjQuZGFkZHIgPSBjcC1cdTAwM2VkYWRkci5pcDtcbiA3NTE6XHRcdH1cbiA3NTI6XHRcdGlmIChzZXFfbWFzaykge1xuIDc1MzpcdFx0XHQqKHAmIzQzOyYjNDM7KSA9IElQVlNfT1BUX1NFUV9EQVRBO1xuIDc1NDpcdFx0XHQqKHAmIzQzOyYjNDM7KSA9IHNpemVvZihzdHJ1Y3QgaXBfdnNfc3luY19jb25uX29wdGlvbnMpO1xuIDc1NTpcdFx0XHRodG9uX3NlcShcdTAwMjZjcC1cdTAwM2Vpbl9zZXEsIChzdHJ1Y3QgaXBfdnNfc2VxICopcCk7XG4gNzU2Olx0XHRcdHAgJiM0Mzs9IHNpemVvZihzdHJ1Y3QgaXBfdnNfc2VxKTtcbiA3NTc6XHRcdFx0aHRvbl9zZXEoXHUwMDI2Y3AtXHUwMDNlb3V0X3NlcSwgKHN0cnVjdCBpcF92c19zZXEgKilwKTtcbiA3NTg6XHRcdFx0cCAmIzQzOz0gc2l6ZW9mKHN0cnVjdCBpcF92c19zZXEpO1xuIDc1OTpcdFx0fVxuIDc2MDpcdFx0LyogSGFuZGxlIHBlIGRhdGEgKi9cbiA3NjE6XHRcdGlmIChjcC1cdTAwM2VwZV9kYXRhX2xlbiBcdTAwMjZcdTAwMjYgY3AtXHUwMDNlcGVfZGF0YSkge1xuIDc2MjpcdFx0XHQqKHAmIzQzOyYjNDM7KSA9IElQVlNfT1BUX1BFX0RBVEE7XG4gNzYzOlx0XHRcdCoocCYjNDM7JiM0MzspID0gY3AtXHUwMDNlcGVfZGF0YV9sZW47XG4gNzY0Olx0XHRcdG1lbWNweShwLCBjcC1cdTAwM2VwZV9kYXRhLCBjcC1cdTAwM2VwZV9kYXRhX2xlbik7XG4gNzY1Olx0XHRcdHAgJiM0Mzs9IGNwLVx1MDAzZXBlX2RhdGFfbGVuO1xuIDc2NjpcdFx0XHRpZiAocGVfbmFtZV9sZW4pIHtcbiA3Njc6XHRcdFx0XHQvKiBBZGQgUEVfTkFNRSAqL1xuIDc2ODpcdFx0XHRcdCoocCYjNDM7JiM0MzspID0gSVBWU19PUFRfUEVfTkFNRTtcbiA3Njk6XHRcdFx0XHQqKHAmIzQzOyYjNDM7KSA9IHBlX25hbWVfbGVuO1xuIDc3MDpcdFx0XHRcdG1lbWNweShwLCBjcC1cdTAwM2VwZS1cdTAwM2VuYW1lLCBwZV9uYW1lX2xlbik7XG4gNzcxOlx0XHRcdFx0cCAmIzQzOz0gcGVfbmFtZV9sZW47XG4gNzcyOlx0XHRcdH1cbiA3NzM6XHRcdH1cbiA3NzQ6XHRcbiA3NzU6XHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNmlwdnMtXHUwMDNlc3luY19idWZmX2xvY2spO1xuIDc3NjpcdFxuIDc3NzpcdGNvbnRyb2w6XG4gNzc4Olx0XHQvKiBzeW5jaHJvbml6ZSBpdHMgY29udHJvbGxlciBpZiBpdCBoYXMgKi9cbiA3Nzk6XHRcdGNwID0gY3AtXHUwMDNlY29udHJvbDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTc6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjIyOTQKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiAzNDEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgS2VybmVsIFZ1bG5lcmFiaWxpdHk6IEEgRGVlcCBEaXZlKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgcXVlc3Rpb24gaXMgYWx3YXlzLCAmIzM0O1doYXQgZXhhY3RseSBpcyB0aGlzIGNvbW1pdCBhZGRyZXNzaW5nPyYjMzQ7IFJpZ2h0LCBpdCBsb29rcyBsaWtlIGEgdnVsbmVyYWJpbGl0eSBpbiBgaXBfdnNfc3luY19jb25uX3YwYCBhbmQgYGlwX3ZzX3N5bmNfY29ubmAuIFRoZSBrZXkgaXMgdGhhdCBgY3AtJmd0O2ZsYWdzYCB3YXMgYmVpbmcgcmVhZCBtdWx0aXBsZSB0aW1lcyB3aXRob3V0IHByb3BlciBzeW5jaHJvbml6YXRpb24gdXNpbmcgYFJFQURfT05DRWAgb3IgbG9jYWwgdmFyaWFibGUgc25hcHNob3RzLiBUaGlzIGlzIGltbWVkaWF0ZWx5IGNvbmNlcm5pbmcuCgpTcGVjaWZpY2FsbHksIGlmIGBjcC0mZ3Q7ZmxhZ3MgJmFtcDsgSVBfVlNfQ09OTl9GX1NFUV9NQVNLYCBjaGFuZ2VkIGJldHdlZW4gdGhlIGxlbmd0aCBjYWxjdWxhdGlvbiBhbmQgdGhlIHN1YnNlcXVlbnQgY29uZGl0aW9uYWwgY2hlY2ssIHRoZXJlJiMzOTtzIGEgcmlzay4gVGhlIGNhbGN1bGF0ZWQgYGxlbmAgY291bGQgYmUgYmFzZWQgb24gYSBzdGF0ZSB3aXRob3V0IHNlcXVlbmNlIG9wdGlvbnMsIGJ1dCB0aGVuIHRoZSBjb2RlICptaWdodCogdHJ5IHRvIHdyaXRlIHNlcXVlbmNlIG9wdGlvbnMsIHBvdGVudGlhbGx5IGxlYWRpbmcgdG8gYSBidWZmZXIgb3ZlcmZsb3cgb3IsIGNvbnZlcnNlbHksIHdyaXRpbmcgcGFzdCB0aGUgYWxsb2NhdGVkIHNwYWNlLCB3aGljaCB3b3VsZCBjYXVzZSBjb3JydXB0aW9uIG9yIGEgbWlzbWF0Y2ggd2l0aCByZXNlcnZlZCBzcGFjZSEgQ2xhc3NpYyBtZW1vcnkgc2FmZXR5IGlzc3VlLgoKVGhlIGZpeD8gU2ltcGxlIGFuZCBlbGVnYW50LiBSZWFkIGBjcC0mZ3Q7ZmxhZ3NgICpvbmNlKiB1c2luZyBgUkVBRF9PTkNFYCwgc3RvcmUgaXQgaW4gYSBsb2NhbCB2YXJpYWJsZSBgZmxhZ3NgLCBhbmQgdGhlbiB1c2UgYGZsYWdzYCAoYW5kIGBzZXFfbWFzayA9IGZsYWdzICZhbXA7IElQX1ZTX0NPTk5fRl9TRVFfTUFTS2ApIGNvbnNpc3RlbnRseSBmb3IgYm90aCBsZW5ndGggY2FsY3VsYXRpb24gYW5kIHdyaXRpbmcuIFRoaXMgZWxpbWluYXRlcyB0aGUgcmFjZSBjb25kaXRpb24uIEdvb2QuCgpOb3csIHRoZSBjcnVjaWFsIHF1ZXN0aW9uOiBpcyB0aGlzIHJlYWNoYWJsZSBhbmQgd29ydGggZnV6emluZz8gTGV0JiMzOTtzIGFzc2VzczoKCiogICAqKlJlYWNoYWJpbGl0eToqKiBJUFZTIGlzIHBhcnQgb2YgdGhlIHN0YW5kYXJkIG5ldHdvcmtpbmcgc3RhY2ssIG5ldGZpbHRlciwgcmlnaHQ/IEFic29sdXRlbHkuIEl04oCZcyBiYWtlZCBpbnRvIHRoZSBrZXJuZWwuIEl04oCZcyB1c2VkIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIFFFTVUgYW5kIHN5emthbGxlciwgd2hpY2ggaXMgKmZhbnRhc3RpYyogZm9yIGZ1enppbmcsIGFuZCBpdCB1c2VzIHZpcnR1YWwgc29ja2V0cywgcGFja2V0IGluamVjdGlvbiwgYW5kIG5ldGxpbmsgY29uZmlndXJhdGlvbiAoaXB2c2FkbS9JUFZTIG5ldGxpbmspLiBTbywgaXQmIzM5O3MgZWFzaWx5IHJlYWNoYWJsZSwgZXNwZWNpYWxseSBnaXZlbiBuZXRsaW5rLgoqICAgKipJcyBpdCByZWFjaGFibGUgY29kZT8qKiBZZXMhIElQVlMgc3luYyBkYWVtb24gYW5kIGNvbm5lY3Rpb24gdHJhY2tpbmcgYXJlIHN0YW5kYXJkIGNvbXBvbmVudHMgaW4gbmV0d29yayB2aXJ0dWFsaXphdGlvbi4KKiAgICoqU2VjdGlvbiAzOioqIENoZWNrcyBvdXQsIGNvcmUgbmV0d29ya2luZywgbmV0ZmlsdGVyLgoqICAgKipXb3J0aEZ1enppbmc6KiogWWVzLCBhYnNvbHV0ZWx5LiBCdWZmZXIgb3ZlcmZsb3dzIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBhcmUgcHJpbWUgY2FuZGlkYXRlcyBmb3IgZnV6emluZywgYW5kIHRoaXMgY29kZSBpcyByZWFjaGFibGUuIFRoZSBmYWN0IHRoYXQgaXQmIzM5O3MgaW4gYSBzdGFuZGFyZCBjb21wb25lbnQgYW5kIG5ldHdvcmstZmFjaW5nIG1lYW5zIGl0IHNob3VsZCBnZXQgcGxlbnR5IG9mIGF0dGVudGlvbi4KCk9rYXksIG5leHQgc3RlcDogbGV0JiMzOTtzIHZlcmlmeSBhbGwgdGhlIEtjb25maWcgZGVwZW5kZW5jaWVzIGZvciBJUFZTIGFuZCB0aGUgc3luYyBkYWVtb24uIEdvdHRhIG1ha2Ugc3VyZSB3ZSYjMzk7dmUgZ290IHRoZSBjb3JyZWN0IGNvbmZpZ3VyYXRpb24gdG8gdHJpZ2dlciB0aGlzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxNzo0MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgSVBfVlMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy00LSNcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnOjU6bWVudWNvbmZpZyBJUF9WU1xubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctNi1cdHRyaXN0YXRlIFwmIzM0O0lQIHZpcnR1YWwgc2VydmVyIHN1cHBvcnRcJiMzNDtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZz0yODY9Y29tbWVudCAmIzM5O0lQVlMgU0ggc2NoZWR1bGVyJiMzOTtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTI4Ny1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnOjI4ODpjb25maWcgSVBfVlNfU0hfVEFCX0JJVFNcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTI4OS1cdGludCBcJiMzNDtJUFZTIHNvdXJjZSBoYXNoaW5nIHRhYmxlIHNpemUgKHRoZSBOdGggcG93ZXIgb2YgMilcJiMzNDtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZz0zMDE9Y29tbWVudCAmIzM5O0lQVlMgTUggc2NoZWR1bGVyJiMzOTtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTMwMi1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnOjMwMzpjb25maWcgSVBfVlNfTUhfVEFCX0lOREVYXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy0zMDQtXHRpbnQgXCYjMzQ7SVBWUyBtYWdsZXYgaGFzaGluZyB0YWJsZSBpbmRleCBvZiBzaXplICh0aGUgcHJpbWUgbnVtYmVycylcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTc6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjM0NTYKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAzMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIGhvdyBJJiMzOTtkIGFwcHJvYWNoIHRoaXMgdGFzaywgYXMgaWYgdGhlc2Ugd2VyZSBteSBpbnRlcm5hbCB0aG91Z2h0czoKCioqQW5hbHl6aW5nIElQX1ZTIERlcGVuZGVuY2llcyBpbiBuZXRmaWx0ZXIvaXB2cy9LY29uZmlnKioKClJpZ2h0LCBsZXQmIzM5O3Mgc3RhcnQgYnkgZGlnZ2luZyBpbnRvIHRoZSBgbmV0L25ldGZpbHRlci9pcHZzL0tjb25maWdgIGZpbGUuIEkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIHRoZSBgSVBfVlNgIGRlcGVuZGVuY2llcywgYW5kIHRoZSBmaXJzdCA0MCBsaW5lcyBhcmUgYSBnb29kIHBsYWNlIHRvIGJlZ2luLiBUaGlzIHNob3VsZCBnaXZlIG1lIGEgc29saWQgZm91bmRhdGlvbiBmb3IgdW5kZXJzdGFuZGluZyB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIGFuZCBhbnkgcHJlcmVxdWlzaXRlIG1vZHVsZXMgb3Iga2VybmVsIGZlYXR1cmVzIGludm9sdmVkLiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciB0aGluZ3MgbGlrZToKCiogICAqKmBkZXBlbmRzIG9uYCBzdGF0ZW1lbnRzOioqIFRoZXNlIGFyZSB0aGUga2V5LiBUaGV5JiMzOTtsbCB0ZWxsIG1lIGV4YWN0bHkgd2hpY2ggb3RoZXIgY29uZmlndXJhdGlvbiBzeW1ib2xzIG5lZWQgdG8gYmUgc2V0IG9yIGVuYWJsZWQgYmVmb3JlIGBJUF9WU2AgY2FuIGJlIHNlbGVjdGVkLgoqICAgKipgc2VsZWN0YCBzdGF0ZW1lbnRzOioqIEFsdGhvdWdoIGxlc3MgY29tbW9uIGluIHRoaXMgY29udGV4dCwgdGhleSYjMzk7bGwgaGlnaGxpZ2h0IHN5bWJvbHMgdGhhdCBhcmUgYXV0b21hdGljYWxseSBlbmFibGVkIGFzIGEgc2lkZSBlZmZlY3Qgb2YgZW5hYmxpbmcgYElQX1ZTYC4KKiAgICoqQW55IGNvbmRpdGlvbmFsIGBjb25maWdgIGJsb2NrczoqKiBUaGVzZSBpbmRpY2F0ZSBjb25maWd1cmF0aW9ucyB0aGF0IG1pZ2h0IG9ubHkgYmUgcmVsZXZhbnQgdW5kZXIgc3BlY2lmaWMgY2lyY3Vtc3RhbmNlcyAoZS5nLiwgc3BlY2lmaWMgaGFyZHdhcmUgb3Iga2VybmVsIGZlYXR1cmUgZmxhZ3MpLgoqICAgKipDb21tZW50cyBhbmQgZGVzY3JpcHRpb25zOioqIFRoZXNlIGFyZSBpbnZhbHVhYmxlLCBhcyB0aGV5IGNhbiBwcm92aWRlIGNvbnRleHQgYW5kIGNsYXJpZnkgdGhlIHB1cnBvc2Ugb2YgY2VydGFpbiBkZXBlbmRlbmNpZXMgb3Igb3B0aW9ucy4gVGhleSBvZnRlbiBleHBsYWluICp3aHkqIGEgcGFydGljdWxhciBkZXBlbmRlbmN5IGV4aXN0cy4KKiAgICoqQW55dGhpbmcgdGhhdCBtaWdodCBoaW50IGF0IG90aGVyIHJlbGF0ZWQgY29uZmlndXJhdGlvbiBvcHRpb25zKio6IFNvbWV0aW1lcyByZWxhdGVkIG9wdGlvbnMgYXJlIG5vdCBpbW1lZGlhdGVseSBvYnZpb3VzLiBUaGUgZmlsZSBtaWdodCBkaXNjdXNzIGZlYXR1cmVzIG9yIHJlcXVpcmVtZW50cyB3aXRob3V0IGV4cGxpY2l0bHkgc3RhdGluZyB0aGUgbmFtZSBvZiB0aGUgb3B0aW9uLgoKSSYjMzk7bSBhaW1pbmcgZm9yIGEgY29tcHJlaGVuc2l2ZSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBwcmUtcmVxdWlzaXRlcy4gVGhpcyB3aWxsIGluZm9ybSBteSBuZXh0IHN0ZXBzLCB3aGV0aGVyIEkmIzM5O20gZGVidWdnaW5nIGEgY29uZmlndXJhdGlvbiBpc3N1ZSwgYW5hbHl6aW5nIGtlcm5lbCBwZXJmb3JtYW5jZSwgb3Igc2ltcGx5IHRyeWluZyB0byBnZXQgYSBiZXR0ZXIgZ3Jhc3Agb2YgdGhlIGBJUF9WU2AgaW50ZXJuYWxzLiBUaGlzIHdpbGwgYWxsb3cgbWUgdG8gYmUgZnVsbHkgdXAgdG8gZGF0ZSBhbmQgaW4gYSBwb3NpdGlvbiB0byBnaXZlIGEgcHJlY2lzZSBhbmQgY29ycmVjdCBhbnN3ZXIgdG8gd2hvZXZlciBuZWVkcyBpdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTc6NDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuICAgMjpcdCNcbiAgIDM6XHQjIElQIFZpcnR1YWwgU2VydmVyIGNvbmZpZ3VyYXRpb25cbiAgIDQ6XHQjXG4gICA1Olx0bWVudWNvbmZpZyBJUF9WU1xuICAgNjpcdFx0dHJpc3RhdGUgXCYjMzQ7SVAgdmlydHVhbCBzZXJ2ZXIgc3VwcG9ydFwmIzM0O1xuICAgNzpcdFx0ZGVwZW5kcyBvbiBJTkVUIFx1MDAyNlx1MDAyNiBORVRGSUxURVJcbiAgIDg6XHRcdGRlcGVuZHMgb24gKE5GX0NPTk5UUkFDSyB8fCBORl9DT05OVFJBQ0s9bilcbiAgIDk6XHRcdGhlbHBcbiAgMTA6XHRcdCAgSVAgVmlydHVhbCBTZXJ2ZXIgc3VwcG9ydCB3aWxsIGxldCB5b3UgYnVpbGQgYSBoaWdoLXBlcmZvcm1hbmNlXG4gIDExOlx0XHQgIHZpcnR1YWwgc2VydmVyIGJhc2VkIG9uIGNsdXN0ZXIgb2YgdHdvIG9yIG1vcmUgcmVhbCBzZXJ2ZXJzLiBUaGlzXG4gIDEyOlx0XHQgIG9wdGlvbiBtdXN0IGJlIGVuYWJsZWQgZm9yIGF0IGxlYXN0IG9uZSBvZiB0aGUgY2x1c3RlcmVkIGNvbXB1dGVyc1xuICAxMzpcdFx0ICB0aGF0IHdpbGwgdGFrZSBjYXJlIG9mIGludGVyY2VwdGluZyBpbmNvbWluZyBjb25uZWN0aW9ucyB0byBhXG4gIDE0Olx0XHQgIHNpbmdsZSBJUCBhZGRyZXNzIGFuZCBzY2hlZHVsaW5nIHRoZW0gdG8gcmVhbCBzZXJ2ZXJzLlxuICAxNTpcdFxuICAxNjpcdFx0ICBUaHJlZSByZXF1ZXN0IGRpc3BhdGNoaW5nIHRlY2huaXF1ZXMgYXJlIGltcGxlbWVudGVkLCB0aGV5IGFyZVxuICAxNzpcdFx0ICB2aXJ0dWFsIHNlcnZlciB2aWEgTkFULCB2aXJ0dWFsIHNlcnZlciB2aWEgdHVubmVsaW5nIGFuZCB2aXJ0dWFsXG4gIDE4Olx0XHQgIHNlcnZlciB2aWEgZGlyZWN0IHJvdXRpbmcuIFRoZSBzZXZlcmFsIHNjaGVkdWxpbmcgYWxnb3JpdGhtcyBjYW5cbiAgMTk6XHRcdCAgYmUgdXNlZCB0byBjaG9vc2Ugd2hpY2ggc2VydmVyIHRoZSBjb25uZWN0aW9uIGlzIGRpcmVjdGVkIHRvLFxuICAyMDpcdFx0ICB0aHVzIGxvYWQgYmFsYW5jaW5nIGNhbiBiZSBhY2hpZXZlZCBhbW9uZyB0aGUgc2VydmVycy4gIEZvciBtb3JlXG4gIDIxOlx0XHQgIGluZm9ybWF0aW9uIGFuZCBpdHMgYWRtaW5pc3RyYXRpb24gcHJvZ3JhbSwgcGxlYXNlIHZpc2l0IHRoZVxuICAyMjpcdFx0ICBmb2xsb3dpbmcgVVJMOiBcdTAwM2NodHRwOi8vd3d3LmxpbnV4dmlydHVhbHNlcnZlci5vcmcvXHUwMDNlLlxuICAyMzpcdFxuICAyNDpcdFx0ICBJZiB5b3Ugd2FudCB0byBjb21waWxlIGl0IGluIGtlcm5lbCwgc2F5IFkuIFRvIGNvbXBpbGUgaXQgYXMgYVxuICAyNTpcdFx0ICBtb2R1bGUsIGNob29zZSBNIGhlcmUuIElmIHVuc3VyZSwgc2F5IE4uXG4gIDI2Olx0XG4gIDI3Olx0aWYgSVBfVlNcbiAgMjg6XHRcbiAgMjk6XHRjb25maWdcdElQX1ZTX0lQVjZcbiAgMzA6XHRcdGJvb2wgXCYjMzQ7SVB2NiBzdXBwb3J0IGZvciBJUFZTXCYjMzQ7XG4gIDMxOlx0XHRkZXBlbmRzIG9uIElQVjYgPSB5IHx8IElQX1ZTID0gSVBWNlxuICAzMjpcdFx0c2VsZWN0IE5GX0RFRlJBR19JUFY2XG4gIDMzOlx0XHRoZWxwXG4gIDM0Olx0XHQgIEFkZCBJUHY2IHN1cHBvcnQgdG8gSVBWUy5cbiAgMzU6XHRcbiAgMzY6XHRcdCAgU2F5IFkgaWYgdW5zdXJlLlxuICAzNzpcdFxuICAzODpcdGNvbmZpZ1x0SVBfVlNfREVCVUdcbiAgMzk6XHRcdGJvb2wgXCYjMzQ7SVAgdmlydHVhbCBzZXJ2ZXIgZGVidWdnaW5nXCYjMzQ7XG4gIDQwOlx0XHRoZWxwXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDE3OjQzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI0NDgxCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMzAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgdGhlIHN1bW1hcnksIHJlbmRlcmVkIGluIHRoZSBmaXJzdCBwZXJzb24sIGFzc3VtaW5nIEkmIzM5O20gYW4gZXhwZXJ0OgoKKipJbnZlc3RpZ2F0aW5nIHRoZSBJUFZTIEJ1aWxkIFByb2Nlc3MqKgoKUmlnaHQsIGxldCYjMzk7cyBkaXZlIHN0cmFpZ2h0IGluLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBleGFjdGx5IGhvdyBgaXBfdnNfc3luYy5vYCBnZXRzIGNvbXBpbGVkIHdpdGhpbiB0aGUgSVBWUyBmcmFtZXdvcmsuIFRoZSBtb3N0IGxvZ2ljYWwgcGxhY2UgdG8gc3RhcnQgZGlnZ2luZyBpcyB0aGUgYG5ldC9uZXRmaWx0ZXIvaXB2cy9NYWtlZmlsZWAuIFRoYXQgZmlsZSBpcyB0aGUgY2VudHJhbCBwb2ludCBvZiB0cnV0aCBmb3IgaG93IHRoZSBJUFZTIG1vZHVsZXMgYXJlIGNvbnN0cnVjdGVkLCBhbmQgaXQgc2hvdWxkIGNsZWFybHkgb3V0bGluZSB0aGUgZGVwZW5kZW5jaWVzIGFuZCBidWlsZCBjb21tYW5kcyBmb3IgYWxsIHRoZSBvYmplY3QgZmlsZXMsIGluY2x1ZGluZyB0aGUgb25lIEkmIzM5O20gaW50ZXJlc3RlZCBpbjogYGlwX3ZzX3N5bmMub2AuIEkmIzM5O20gZXhwZWN0aW5nIHRvIGZpbmQgdGhlIHN0YW5kYXJkIEdOVSBtYWtlIHN5bnRheCBpbiB0aGVyZSwgaG9wZWZ1bGx5IHdpdGggY2xlYXIgdmFyaWFibGUgYXNzaWdubWVudHMgYW5kIHJ1bGVzIHRoYXQgZGV0YWlsIHRoZSBjb21waWxlciBmbGFncyBhbmQgbGlua2luZyBzdGVwcy4gSSYjMzk7bSBob3BpbmcgaXQmIzM5O3Mgd2VsbC1zdHJ1Y3R1cmVkIGVub3VnaCB0aGF0IEkgY2FuIHF1aWNrbHkgdHJhY2UgdGhlIGRlcGVuZGVuY2llcyBiYWNrIGFuZCBncmFzcCBhbnkgcG90ZW50aWFsIGlzc3VlcyBvciBtb2RpZmljYXRpb25zIHRoYXQgbWlnaHQgYmUgcmVsZXZhbnQgdG8gbXkgY3VycmVudCBpbnZlc3RpZ2F0aW9uLiBIb3BlZnVsbHkgaXQmIzM5O3Mgbm90IGEgY29tcGxldGUgbWVzcyBvZiBpbmNsdWRlcyBhbmQgbWFjcm9zIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxNzo0MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvaXB2cy9NYWtlZmlsZSYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbiAgIDI6XHQjXG4gICAzOlx0IyBNYWtlZmlsZSBmb3IgdGhlIElQVlMgbW9kdWxlcyBvbiB0b3Agb2YgSVB2NC5cbiAgIDQ6XHQjXG4gICA1Olx0XG4gICA2Olx0IyBJUFZTIHRyYW5zcG9ydCBwcm90b2NvbCBsb2FkIGJhbGFuY2luZyBzdXBwb3J0XG4gICA3Olx0aXBfdnNfcHJvdG8tb2Jqcy15IDo9XG4gICA4Olx0aXBfdnNfcHJvdG8tb2Jqcy0kKENPTkZJR19JUF9WU19QUk9UT19UQ1ApICYjNDM7PSBpcF92c19wcm90b190Y3Aub1xuICAgOTpcdGlwX3ZzX3Byb3RvLW9ianMtJChDT05GSUdfSVBfVlNfUFJPVE9fVURQKSAmIzQzOz0gaXBfdnNfcHJvdG9fdWRwLm9cbiAgMTA6XHRpcF92c19wcm90by1vYmpzLSQoQ09ORklHX0lQX1ZTX1BST1RPX0FIX0VTUCkgJiM0Mzs9IGlwX3ZzX3Byb3RvX2FoX2VzcC5vXG4gIDExOlx0aXBfdnNfcHJvdG8tb2Jqcy0kKENPTkZJR19JUF9WU19QUk9UT19TQ1RQKSAmIzQzOz0gaXBfdnNfcHJvdG9fc2N0cC5vXG4gIDEyOlx0XG4gIDEzOlx0aXBfdnMtZXh0cmFfb2Jqcy15IDo9XG4gIDE0Olx0aXBfdnMtZXh0cmFfb2Jqcy0kKENPTkZJR19JUF9WU19ORkNUKSAmIzQzOz0gaXBfdnNfbmZjdC5vXG4gIDE1Olx0XG4gIDE2Olx0aXBfdnMtb2JqcyA6PVx0aXBfdnNfY29ubi5vIGlwX3ZzX2NvcmUubyBpcF92c19jdGwubyBpcF92c19zY2hlZC5vXHQgICBcXFxuICAxNzpcdFx0XHRpcF92c194bWl0Lm8gaXBfdnNfYXBwLm8gaXBfdnNfc3luYy5vXHQgICBcdFx0ICAgXFxcbiAgMTg6XHRcdFx0aXBfdnNfZXN0Lm8gaXBfdnNfcHJvdG8ubyBpcF92c19wZS5vXHRcdFx0ICAgXFxcbiAgMTk6XHRcdFx0JChpcF92c19wcm90by1vYmpzLXkpICQoaXBfdnMtZXh0cmFfb2Jqcy15KVxuICAyMDpcdFxuICAyMTpcdFxuICAyMjpcdCMgSVBWUyBjb3JlXG4gIDIzOlx0b2JqLSQoQ09ORklHX0lQX1ZTKSAmIzQzOz0gaXBfdnMub1xuICAyNDpcdFxuICAyNTpcdCMgSVBWUyBzY2hlZHVsZXJzXG4gIDI2Olx0b2JqLSQoQ09ORklHX0lQX1ZTX1JSKSAmIzQzOz0gaXBfdnNfcnIub1xuICAyNzpcdG9iai0kKENPTkZJR19JUF9WU19XUlIpICYjNDM7PSBpcF92c193cnIub1xuICAyODpcdG9iai0kKENPTkZJR19JUF9WU19MQykgJiM0Mzs9IGlwX3ZzX2xjLm9cbiAgMjk6XHRvYmotJChDT05GSUdfSVBfVlNfV0xDKSAmIzQzOz0gaXBfdnNfd2xjLm9cbiAgMzA6XHRvYmotJChDT05GSUdfSVBfVlNfRk8pICYjNDM7PSBpcF92c19mby5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDE3OjQzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI1Mzg0CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMTgyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBJUFZTIFN5bmNocm9uaXphdGlvbiBpbiB0aGUgS2VybmVsKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBgaXBfdnNfc3luYy5vYCBoZXJlLiBJdCYjMzk7cyByaWdodCB0aGVyZSwgbmVzdGxlZCB3aXRoaW4gYGlwX3ZzLW9ianNgLCBhbmQgdGhhdCYjMzk7cyB0cmlnZ2VyZWQgd2hlbiBgQ09ORklHX0lQX1ZTYCBpcyBlbmFibGVkIOKAkyBtYWtlcyBwZXJmZWN0IHNlbnNlLiBJIGtub3cgYElQX1ZTYCBpcyBkZXBlbmRlbnQgb24gYm90aCBgSU5FVGAgYW5kIGBORVRGSUxURVJgLCB0aGUgdXN1YWwgc3VzcGVjdHMuIE5vdywgdGhlIHJlYWwgcXVlc3Rpb24gaXMsIGFyZSB0aGVyZSAqb3RoZXIqIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBJIG5lZWQgdG8gY29uc2lkZXIgZm9yIElQVlMgc3luY2hyb25pemF0aW9uPyBJJiMzOTtsbCBxdWlja2x5IGNoZWNrIGZvciB0aGluZ3MgbGlrZSBgQ09ORklHX0lQX1ZTX0lQVjZgLCBgQ09ORklHX0lQX1ZTX1BST1RPX1RDUGAsIHlvdSBrbm93LCBhbnkgZGVwZW5kZW5jaWVzIG9yIHJlbGF0ZWQgY29uZmlndXJhdGlvbnMuIEkgc3VzcGVjdCBgSVBfVlNgIGl0c2VsZiBpcyB0aGUgcHJpbWFyeSBvbmUsIGJ1dCBJIHdhbnQgdG8gYmUgdGhvcm91Z2guCgpSaWdodCwgdGltZSB0byBtb3ZlIG9uIHRvIGBGb2N1c1N5bWJvbHNgLiBMZXQmIzM5O3Mgc2VlLCB0aGUgY29yZSBmdW5jdGlvbnMgbW9kaWZpZWQgaGVyZSBhcmUgYGlwX3ZzX3N5bmNfY29ubmAgYW5kIGBpcF92c19zeW5jX2Nvbm5fdjBgLiBUaGF0IGdpdmVzIG1lIGEgZGlyZWN0IGxpbmUgb2Ygc2lnaHQuCgpOZXh0IHN0ZXA6IEkmIzM5O20gZ29pbmcgdG8gbmVlZCB0byB0cmFjZSBkb3duIHRoZSBjYWxsZXJzIG9mIGBpcF92c19zeW5jX2Nvbm5gIGFuZCBhbnkgb3RoZXIgcmVsYXRlZCBmdW5jdGlvbnMuIFRoaXMgd2lsbCBoZWxwIG1lIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgb2YgdGhlIGNoYW5nZXMgYW5kIGhvdyB0aGVzZSBzeW5jaHJvbml6YXRpb24gZnVuY3Rpb25zIGFyZSBpbnRlZ3JhdGVkIHdpdGhpbiB0aGUgYnJvYWRlciBJUFZTIGVjb3N5c3RlbS4gVW5kZXJzdGFuZGluZyB0aGUgY2FsbCBncmFwaCB3aWxsIHJlYWxseSBjbGFyaWZ5IHRoZSBpbXBhY3QgYW5kIGltcGxpY2F0aW9ucyBvZiB0aGUgbW9kaWZpY2F0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTc6NDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aXBfdnNfc3luY19jb25uJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9pcHZzLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jPTEzNDc9c3RhdGljIHZvaWQgaXBfdnNfY29ubl9leHBpcmUoc3RydWN0IHRpbWVyX2xpc3QgKnQpXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYy0xNDE2LVx0aWYgKGlwdnMtXHUwMDNlc3luY19zdGF0ZSBcdTAwMjYgSVBfVlNfU1RBVEVfTUFTVEVSKVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYzoxNDE3Olx0XHRpcF92c19zeW5jX2Nvbm4oaXB2cywgY3AsIHN5c2N0bF9zeW5jX3RocmVzaG9sZChpcHZzKSk7XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jLTE0MTgtXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYz0yMDk2PWlwX3ZzX2luX2hvb2sodm9pZCAqcHJpdiwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IG5mX2hvb2tfc3RhdGUgKnN0YXRlKVxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmMtMjI2Ni1cdCAqXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jOjIyNjc6XHQgKiBGb3IgT05FX1BLVCBsZXQgaXBfdnNfc3luY19jb25uKCkgZG8gdGhlIGZpbHRlciB3b3JrLlxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYy0yMjY4LVx0ICovXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYy0yMjc1LVx0aWYgKGlwdnMtXHUwMDNlc3luY19zdGF0ZSBcdTAwMjYgSVBfVlNfU1RBVEVfTUFTVEVSKVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYzoyMjc2Olx0XHRpcF92c19zeW5jX2Nvbm4oaXB2cywgY3AsIHBrdHMpO1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYy0yMjc3LVx0ZWxzZSBpZiAoKGNwLVx1MDAzZWZsYWdzIFx1MDAyNiBJUF9WU19DT05OX0ZfT05FX1BBQ0tFVCkgXHUwMDI2XHUwMDI2IGNwLVx1MDAzZWNvbnRyb2wpXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jOjIyNzg6XHRcdC8qIGluY3JlbWVudCBpcyBkb25lIGluc2lkZSBpcF92c19zeW5jX2Nvbm4gdG9vICovXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jLTIyNzktXHRcdGF0b21pY19pbmMoXHUwMDI2Y3AtXHUwMDNlY29udHJvbC1cdTAwM2Vpbl9wa3RzKTtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTEzLSAqICAgICAgICAgICAgICB0aW1lLW91dHMsIGFuZCBmaXJld2FsbCBtYXJrcy5cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6MTQ6ICogICAgICAgICAgICAgIEluIHZlci4xIFwmIzM0O2lwX3ZzX3N5bmNfY29ubl9vcHRpb25zXCYjMzQ7IHdpbGwgYmUgc2VudCBpbiBuZXR3LiBvcmRlci5cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMTUtICogICAgICAgICAgICAgIFZlci4gMCBjYW4gYmUgdHVybmVkIG9uIGJ5IHN5c2N0bCAtdyBuZXQuaXB2NC52cy5zeW5jX3ZlcnNpb249MFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM9NjU9c3RhdGljIHN0cnVjdCBsb2NrX2NsYXNzX2tleSBfX2lwdnNfc3luY19rZXk7XG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy02OS0gKi9cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6NzA6c3RydWN0IGlwX3ZzX3N5bmNfY29ubl92MCB7XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTcxLVx0X191OFx0XHRcdHJlc2VydmVkO1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtODgtXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjg5OnN0cnVjdCBpcF92c19zeW5jX2Nvbm5fb3B0aW9ucyB7XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTkwLVx0c3RydWN0IGlwX3ZzX3NlcSAgICAgICAgaW5fc2VxOyAgICAgICAgIC8qIGluY29taW5nIHNlcS4gc3RydWN0ICovXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYz0xNTQ9c3RydWN0IGlwX3ZzX3N5bmNfdjYge1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMTczLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzoxNzQ6dW5pb24gaXBfdnNfc3luY19jb25uIHtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMTc1LVx0c3RydWN0IGlwX3ZzX3N5bmNfdjRcdHY0O1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM9MTk2PXN0cnVjdCBpcF92c19zeW5jX3RocmVhZF9kYXRhIHtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTIwNC0vKiBWZXJzaW9uIDAgZGVmaW5pdGlvbiBvZiBwYWNrZXQgc2l6ZXMgKi9cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6MjA1OiNkZWZpbmUgU0lNUExFX0NPTk5fU0laRSAgKHNpemVvZihzdHJ1Y3QgaXBfdnNfc3luY19jb25uX3YwKSlcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMjA2LSNkZWZpbmUgRlVMTF9DT05OX1NJWkUgIFxcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjIwNzooc2l6ZW9mKHN0cnVjdCBpcF92c19zeW5jX2Nvbm5fdjApICYjNDM7IHNpemVvZihzdHJ1Y3QgaXBfdnNfc3luY19jb25uX29wdGlvbnMpKVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy0yMDgtXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYz0yNDU9c3RydWN0IGlwX3ZzX3N5bmNfbWVzZ192MCB7XG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy0yNDktXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjI1MDpcdC8qIGlwX3ZzX3N5bmNfY29ubiBlbnRyaWVzIHN0YXJ0IGhlcmUgKi9cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMjUxLX07XG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYz0yNTQ9c3RydWN0IGlwX3ZzX3N5bmNfbWVzZyB7XG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy0yNjAtXHRfX3UxNlx0XHRcdHNwYXJlO1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzoyNjE6XHQvKiBpcF92c19zeW5jX2Nvbm4gZW50cmllcyBzdGFydCBoZXJlICovXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTI2Mi19O1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM9NDQxPXN0YXRpYyBpbmxpbmUgYm9vbCBpbl9wZXJzaXN0ZW5jZShzdHJ1Y3QgaXBfdnNfY29ubiAqY3ApXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy00NTgtICovXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjQ1OTpzdGF0aWMgaW50IGlwX3ZzX3N5bmNfY29ubl9uZWVkZWQoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTQ2MC1cdFx0XHRcdCAgc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLCBpbnQgcGt0cylcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTUzOC0gKi9cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6NTM5OnN0YXRpYyB2b2lkIGlwX3ZzX3N5bmNfY29ubl92MChzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy01NDAtXHRcdFx0ICAgICAgIGludCBwa3RzKVxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtNTQyLVx0c3RydWN0IGlwX3ZzX3N5bmNfbWVzZ192MCAqbTtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6NTQzOlx0c3RydWN0IGlwX3ZzX3N5bmNfY29ubl92MCAqcztcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtNTQ0LVx0c3RydWN0IGlwX3ZzX3N5bmNfYnVmZiAqYnVmZjtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTU1Ni1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6NTU3Olx0aWYgKCFpcF92c19zeW5jX2Nvbm5fbmVlZGVkKGlwdnMsIGNwLCBwa3RzKSlcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtNTU4LVx0XHRyZXR1cm47XG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy01OTAtXHRtID0gKHN0cnVjdCBpcF92c19zeW5jX21lc2dfdjAgKikgYnVmZi1cdTAwM2VtZXNnO1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzo1OTE6XHRzID0gKHN0cnVjdCBpcF92c19zeW5jX2Nvbm5fdjAgKikgYnVmZi1cdTAwM2VoZWFkO1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy01OTItXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy02MDQtXHRpZiAoc2VxX21hc2spIHtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6NjA1Olx0XHRzdHJ1Y3QgaXBfdnNfc3luY19jb25uX29wdGlvbnMgKm9wdCA9XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjYwNjpcdFx0XHQoc3RydWN0IGlwX3ZzX3N5bmNfY29ubl9vcHRpb25zICopXHUwMDI2c1sxXTtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtNjA3LVx0XHRtZW1jcHkob3B0LCBcdTAwMjZjcC1cdTAwM2VzeW5jX2Nvbm5fb3B0LCBzaXplb2YoKm9wdCkpO1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtNjIxLVx0XHRcdHBrdHMgPSBzeXNjdGxfc3luY190aHJlc2hvbGQoaXB2cyk7XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjYyMjpcdFx0aXBfdnNfc3luY19jb25uKGlwdnMsIGNwLCBwa3RzKTtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtNjIzLVx0fVxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtNjMwLSAqL1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzo2MzE6dm9pZCBpcF92c19zeW5jX2Nvbm4oc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIHN0cnVjdCBpcF92c19jb25uICpjcCwgaW50IHBrdHMpXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTYzMi17XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTYzMy1cdHN0cnVjdCBpcF92c19zeW5jX21lc2cgKm07XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjYzNDpcdHVuaW9uIGlwX3ZzX3N5bmNfY29ubiAqcztcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtNjM1LVx0c3RydWN0IGlwX3ZzX3N5bmNfYnVmZiAqYnVmZjtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTY0My1cdGlmIChzeXNjdGxfc3luY192ZXIoaXB2cykgPT0gMCkge1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzo2NDQ6XHRcdGlwX3ZzX3N5bmNfY29ubl92MChpcHZzLCBjcCwgcGt0cyk7XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTY0NS1cdFx0cmV0dXJuO1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtNjUwLXNsb29wOlxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzo2NTE6XHRpZiAoIWlwX3ZzX3N5bmNfY29ubl9uZWVkZWQoaXB2cywgY3AsIHBrdHMpKVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy02NTItXHRcdGdvdG8gY29udHJvbDtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTY4Mi1cdGlmIChzZXFfbWFzaylcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6NjgzOlx0XHRsZW4gJiM0Mzs9IHNpemVvZihzdHJ1Y3QgaXBfdnNfc3luY19jb25uX29wdGlvbnMpICYjNDM7IDI7XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTY4NC1cbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTcyMi1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6NzIzOlx0cyA9ICh1bmlvbiBpcF92c19zeW5jX2Nvbm4gKilwO1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy03MjQtXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy03NTMtXHRcdCoocCYjNDM7JiM0MzspID0gSVBWU19PUFRfU0VRX0RBVEE7XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjc1NDpcdFx0KihwJiM0MzsmIzQzOykgPSBzaXplb2Yoc3RydWN0IGlwX3ZzX3N5bmNfY29ubl9vcHRpb25zKTtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtNzU1LVx0XHRodG9uX3NlcShcdTAwMjZjcC1cdTAwM2Vpbl9zZXEsIChzdHJ1Y3QgaXBfdnNfc2VxICopcCk7XG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYz03OTI9c3RhdGljIGlubGluZSBpbnRcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6NzkzOmlwX3ZzX2Nvbm5fZmlsbF9wYXJhbV9zeW5jKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBpbnQgYWYsIHVuaW9uIGlwX3ZzX3N5bmNfY29ubiAqc2MsXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTc5NC1cdFx0XHQgICBzdHJ1Y3QgaXBfdnNfY29ubl9wYXJhbSAqcCxcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jPTg0Nj1zdGF0aWMgdm9pZCBpcF92c19wcm9jX2Nvbm4oc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIHN0cnVjdCBpcF92c19jb25uX3BhcmFtICpwYXJhbSxcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTg1MC1cdFx0XHQgICAgdW5zaWduZWQgbG9uZyB0aW1lb3V0LCBfX3UzMiBmd21hcmssXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjg1MTpcdFx0XHQgICAgc3RydWN0IGlwX3ZzX3N5bmNfY29ubl9vcHRpb25zICpvcHQpXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTg1Mi17XG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYz05NjA9c3RhdGljIHZvaWQgaXBfdnNfcHJvY2Vzc19tZXNzYWdlX3YwKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBjb25zdCBjaGFyICpidWZmZXIsXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy05NjMtXHRzdHJ1Y3QgaXBfdnNfc3luY19tZXNnX3YwICptID0gKHN0cnVjdCBpcF92c19zeW5jX21lc2dfdjAgKilidWZmZXI7XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjk2NDpcdHN0cnVjdCBpcF92c19zeW5jX2Nvbm5fdjAgKnM7XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjk2NTpcdHN0cnVjdCBpcF92c19zeW5jX2Nvbm5fb3B0aW9ucyAqb3B0O1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy05NjYtXHRzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwO1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtOTc4LVx0XHR9XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjk3OTpcdFx0cyA9IChzdHJ1Y3QgaXBfdnNfc3luY19jb25uX3YwICopIHA7XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTk4MC1cdFx0ZmxhZ3MgPSBudG9ocyhzLVx1MDAzZWZsYWdzKSB8IElQX1ZTX0NPTk5fRl9TWU5DO1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtOTgyLVx0XHRpZiAoZmxhZ3MgXHUwMDI2IElQX1ZTX0NPTk5fRl9TRVFfTUFTSykge1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzo5ODM6XHRcdFx0b3B0ID0gKHN0cnVjdCBpcF92c19zeW5jX2Nvbm5fb3B0aW9ucyAqKVx1MDAyNnNbMV07XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTk4NC1cdFx0XHRwICYjNDM7PSBGVUxMX0NPTk5fU0laRTtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jPTEwMjk9c3RhdGljIGlubGluZSBpbnQgaXBfdnNfcHJvY19zZXFvcHQoX191OCAqcCwgdW5zaWduZWQgaW50IHBsZW4sXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTEwMzAtXHRcdFx0XHQgICAgX191MzIgKm9wdF9mbGFncyxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6MTAzMTpcdFx0XHRcdCAgICBzdHJ1Y3QgaXBfdnNfc3luY19jb25uX29wdGlvbnMgKm9wdClcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMTAzMi17XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjEwMzM6XHRzdHJ1Y3QgaXBfdnNfc3luY19jb25uX29wdGlvbnMgKnRvcHQ7XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTEwMzQtXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjEwMzU6XHR0b3B0ID0gKHN0cnVjdCBpcF92c19zeW5jX2Nvbm5fb3B0aW9ucyAqKXA7XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTEwMzYtXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjEwMzc6XHRpZiAocGxlbiAhPSBzaXplb2Yoc3RydWN0IGlwX3ZzX3N5bmNfY29ubl9vcHRpb25zKSkge1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy0xMDM4LVx0XHRJUF9WU19EQkcoMiwgXCYjMzQ7QkFDS1VQLCBib2d1cyBjb25uIG9wdGlvbnMgbGVuZ3RoXFxuXCYjMzQ7KTtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jPTEwNzE9c3RhdGljIGlubGluZSBpbnQgaXBfdnNfcHJvY19zeW5jX2Nvbm4oc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIF9fdTggKnAsIF9fdTggKm1zZ19lbmQpXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTEwNzIte1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzoxMDczOlx0c3RydWN0IGlwX3ZzX3N5bmNfY29ubl9vcHRpb25zIG9wdDtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6MTA3NDpcdHVuaW9uICBpcF92c19zeW5jX2Nvbm4gKnM7XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTEwNzUtXHRzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwO1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMTA4Mi1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6MTA4MzpcdHMgPSAodW5pb24gaXBfdnNfc3luY19jb25uICopIHA7XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTEwODQtXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYz0xMjA1PXN0YXRpYyB2b2lkIGlwX3ZzX3Byb2Nlc3NfbWVzc2FnZShzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgX191OCAqYnVmZmVyLFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMTIzMy1cdFx0Zm9yIChpPTA7IGlcdTAwM2Nucl9jb25uczsgaSYjNDM7JiM0MzspIHtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6MTIzNDpcdFx0XHR1bmlvbiBpcF92c19zeW5jX2Nvbm4gKnM7XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTEyMzUtXHRcdFx0dW5zaWduZWQgaW50IHNpemU7XG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy0xMjQyLVx0XHRcdH1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6MTI0MzpcdFx0XHRzID0gKHVuaW9uIGlwX3ZzX3N5bmNfY29ubiAqKXA7XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTEyNDQtXHRcdFx0c2l6ZSA9IG50b2hzKHMtXHUwMDNldjQudmVyX3NpemUpIFx1MDAyNiBTVkVSX01BU0s7XG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYz0xNzQwPWludCBzdGFydF9zeW5jX3RocmVhZChzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgc3RydWN0IGlwdnNfc3luY19kYWVtb25fY2ZnICpjLFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMTc1Mi1cdElQX1ZTX0RCRyg3LCBcJiMzNDslcygpOiBwaWQgJWRcXG5cJiMzNDssIF9fZnVuY19fLCB0YXNrX3BpZF9ucihjdXJyZW50KSk7XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjE3NTM6XHRJUF9WU19EQkcoNywgXCYjMzQ7RWFjaCBpcF92c19zeW5jX2Nvbm4gZW50cnkgbmVlZHMgJXpkIGJ5dGVzXFxuXCYjMzQ7LFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzoxNzU0Olx0XHQgIHNpemVvZihzdHJ1Y3QgaXBfdnNfc3luY19jb25uX3YwKSk7XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTE3NTUtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDE3OjQzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMwNTUzCgkJCQkJCQlvdXRwdXQ6IDE0MAoJCQkJCQkJdGhvdWdodHM6IDIxMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBGdXp6aW5nIFN0cmF0ZWd5OiBBIFF1aWNrIFJldmlldyoqCgpPa2F5LCBsZXQgbWUgcXVpY2tseSBydW4gdGhyb3VnaCB0aGlzLiBXZSBuZWVkIHRvIG1ha2Ugc3VyZSB3ZSYjMzk7dmUgY29uc2lkZXJlZCBldmVyeXRoaW5nIGJlZm9yZSB3ZSBtb3ZlIGZvcndhcmQuIFJpZ2h0LCBzbyB3ZSYjMzk7cmUgZm9jdXNpbmcgb24gZnV6emluZyB0aGUgSVBWUyBjb25uZWN0aW9uIHN5bmNocm9uaXphdGlvbiwgYW5kIHNwZWNpZmljYWxseSB0aGUgY29ubmVjdGlvbiBoYW5kbGluZywgY29uc2lkZXJpbmcgdGhlIGtub3duIGZ1bmN0aW9ucyBtb2RpZmllZCB3aGljaCBhcmUgYGlwX3ZzX3N5bmNfY29ubmAgYW5kIGBpcF92c19zeW5jX2Nvbm5fdjBgLgoKV2UmIzM5O3ZlIGdvdCB0aGUgcmVxdWlyZWQgY29uZmlncyBpbiBwbGFjZS4gYElQX1ZTYCBpcyB0aGUgY29yZSwgYW5kIHRoYXQgZGVwZW5kcyBvbiBgSU5FVGAgYW5kIGBORVRGSUxURVJgLCB3aGljaCBhcmUgc3RhbmRhcmRzLCBzbyBubyBzdXJwcmlzZXMgdGhlcmUuCgpOb3csIGZvciB0aGUgY3JpdGljYWwgYHNldC1yZXN1bHRzYCBwYXJhbWV0ZXJzLiBgV29ydGhGdXp6aW5nYCBoYXMgdG8gYmUgdHJ1ZSwgYmVjYXVzZSB0aGlzIGxvb2tzIHByb21pc2luZy4gVGhlIHJlYXNvbmluZyBpcyBzb2xpZDogd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBhIHJhY2UgY29uZGl0aW9uIHBvdGVudGlhbGx5LiBTcGVjaWZpY2FsbHksIGFuIGluY29uc2lzdGVuY3kgaW4gcmVhZGluZyBgY3AtJmd0O2ZsYWdzYCBpbiB0aGUgSVBWUyBjb25uZWN0aW9uIHN5bmNocm9uaXphdGlvbiBkYWVtb24sIGFuZCB0aGF0IGNvdWxkIGVhc2lseSBsZWFkIHRvIG1lc3NhZ2UgZnJhbWluZyBwcm9ibGVtcyBvciBldmVuIGJ1ZmZlciBjb3JydXB0aW9uLiBUaGVzZSBhcmUgc2VyaW91cyB2dWxuZXJhYmlsaXRpZXMgYW5kIGVzcGVjaWFsbHkgc2luY2UgdGhpcyBpcyBuZXR3b3JrIHRyYWZmaWMtcmVhY2hhYmxlLCB3ZSBzaG91bGQgcHJpb3JpdGl6ZSB0aGlzLiBUaGUgZnV6emluZyBzaG91bGQgZm9jdXMgb24gdGhvc2UgZnVuY3Rpb25zIG1lbnRpb25lZCBiZWZvcmUsIGBpcF92c19zeW5jX2Nvbm5gIGFuZCBgaXBfdnNfc3luY19jb25uX3YwYCwgYW5kIG9mIGNvdXJzZSB0aGUgY29uZmlncyB3ZSBzcGVjaWZpZWQgZWFybGllciBtdXN0IGJlIGVuYWJsZWQsIHNvIGBJUF9WU2AsIGBORVRGSUxURVJgLCBhbmQgYElORVRgLgoKQWxyaWdodCwgSSYjMzk7bSByZWFkeS4gTGV0JiMzOTtzIGNhbGwgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTc6NDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lQX1ZTJiMzNDssCiAgICAmIzM0O05FVEZJTFRFUiYjMzQ7LAogICAgJiMzNDtJTkVUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aXBfdnNfc3luY19jb25uJiMzNDssCiAgICAmIzM0O2lwX3ZzX3N5bmNfY29ubl92MCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyByZWFjaGFibGUgbmV0d29ya2luZyBjb2RlIGluIHRoZSBJUFZTIGNvbm5lY3Rpb24gc3luY2hyb25pemF0aW9uIHN1YnN5c3RlbSAobmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYykuIEl0IHVzZXMgUkVBRF9PTkNFIGFuZCBjYWNoZXMgY3AtXHUwMDNlZmxhZ3MgbG9jYWxseSB0byBhdm9pZCBkYXRhIHJhY2VzIGFuZCBpbmNvbnNpc3RlbmNpZXMgYmV0d2VlbiBwYWNrZXQgbGVuZ3RoIGNhbGN1bGF0aW9uIGFuZCBzZXF1ZW5jZSBvcHRpb24gc2VyaWFsaXphdGlvbi4gRnV6emluZyBpcyB3YXJyYW50ZWQgdG8gdGVzdCBzeW5jaHJvbml6YXRpb24gbWVzc2FnZSBjb25zdHJ1Y3Rpb24gYW5kIHN0YXRlIGhhbmRsaW5nIHVuZGVyIGNvbmN1cnJlbmN5LiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtJUF9WUyYjMzQ7LAogICAgJiMzNDtORVRGSUxURVImIzM0OywKICAgICYjMzQ7SU5FVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2lwX3ZzX3N5bmNfY29ubiYjMzQ7LAogICAgJiMzNDtpcF92c19zeW5jX2Nvbm5fdjAmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgcmVhY2hhYmxlIG5ldHdvcmtpbmcgY29kZSBpbiB0aGUgSVBWUyBjb25uZWN0aW9uIHN5bmNocm9uaXphdGlvbiBzdWJzeXN0ZW0gKG5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMpLiBJdCB1c2VzIFJFQURfT05DRSBhbmQgY2FjaGVzIGNwLVx1MDAzZWZsYWdzIGxvY2FsbHkgdG8gYXZvaWQgZGF0YSByYWNlcyBhbmQgaW5jb25zaXN0ZW5jaWVzIGJldHdlZW4gcGFja2V0IGxlbmd0aCBjYWxjdWxhdGlvbiBhbmQgc2VxdWVuY2Ugb3B0aW9uIHNlcmlhbGl6YXRpb24uIEZ1enppbmcgaXMgd2FycmFudGVkIHRvIHRlc3Qgc3luY2hyb25pemF0aW9uIG1lc3NhZ2UgY29uc3RydWN0aW9uIGFuZCBzdGF0ZSBoYW5kbGluZyB1bmRlciBjb25jdXJyZW5jeS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTc6NDM8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxNzo0MzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHJlc3NlcyBhIGNvbmN1cnJlbmN5IGlzc3VlIGluIElQVlMgY29ubmVjdGlvbiBzeW5jaHJvbml6YXRpb24gKGlwX3ZzX3N5bmNfY29ubiBhbmQgaXBfdnNfc3luY19jb25uX3YwKSB3aGVyZSBjcC1cdTAwM2VmbGFncyB3YXMgcmVhZCBtdWx0aXBsZSB0aW1lcyB3aXRob3V0IFJFQURfT05DRSwgcG90ZW50aWFsbHkgY2F1c2luZyBhIG1pc21hdGNoIGJldHdlZW4gdGhlIGNhbGN1bGF0ZWQgYnVmZmVyIGxlbmd0aCBhbmQgdGhlIGFjdHVhbCBkYXRhIHdyaXR0ZW4gaWYgZmxhZ3Mgd2VyZSBtb2RpZmllZCBjb25jdXJyZW50bHkuXG5cblRoZSBmaXggaW50cm9kdWNlcyBsb2NhbCBzY2FsYXIgdmFyaWFibGVzIChmbGFncywgc2VxX21hc2spIHRoYXQgYXJlIGltbWVkaWF0ZWx5IGluaXRpYWxpemVkIHZpYSBSRUFEX09OQ0UoY3AtXHUwMDNlZmxhZ3MpLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSB1bmluaXRpYWxpemVkIHN0YWNrIG9yIGhlYXAgYWxsb2NhdGlvbnMsIHVuaW5pdGlhbGl6ZWQgc3RydWN0dXJlIGZpZWxkcywgaW5mby1sZWFrcyB0byB1c2Vyc3BhY2UsIG9yIHJlYWRzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGUgcmlza3MgYXNzb2NpYXRlZCB3aXRoIHRoZSBvcmlnaW5hbCByYWNlIGNvbmRpdGlvbiAob3V0LW9mLWJvdW5kcyBidWZmZXIgd3JpdGVzIC8gZGF0YSBjb3JydXB0aW9uKSBhcmUgY292ZXJlZCBieSBLQVNBTiBhbmQgS0NTQU4sIHNvIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMzU1ZWQxYmZiN2Q1ZjYyNDNlZWFlNGI3M2ExODc5NGU2MTBmOGNlNgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBXZWQgU2VwIDkgMTc6NDI6NTkgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jIGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYwppbmRleCA1MzgzYWVhZmIwYWVkLi5kZmE4NDg3ZWMwYzIwIDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMKQEAgLTU0MywxMyAmIzQzOzU0MywxNSBAQCBzdGF0aWMgdm9pZCBpcF92c19zeW5jX2Nvbm5fdjAoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIHN0cnVjdCBpcF92c19jb25uICpjcCwKIAlzdHJ1Y3QgaXBfdnNfc3luY19jb25uX3YwICpzOwogCXN0cnVjdCBpcF92c19zeW5jX2J1ZmYgKmJ1ZmY7CiAJc3RydWN0IGlwdnNfbWFzdGVyX3N5bmNfc3RhdGUgKm1zOwotCWludCBpZDsKJiM0MzsJdTMyIGZsYWdzLCBzZXFfbWFzazsKIAl1bnNpZ25lZCBpbnQgbGVuOwomIzQzOwlpbnQgaWQ7CiAKIAlpZiAodW5saWtlbHkoY3AtJmd0O2FmICE9IEFGX0lORVQpKQogCQlyZXR1cm47CiYjNDM7CWZsYWdzID0gUkVBRF9PTkNFKGNwLSZndDtmbGFncyk7CiAJLyogRG8gbm90IHN5bmMgT05FIFBBQ0tFVCAqLwotCWlmIChjcC0mZ3Q7ZmxhZ3MgJmFtcDsgSVBfVlNfQ09OTl9GX09ORV9QQUNLRVQpCiYjNDM7CWlmIChmbGFncyAmYW1wOyBJUF9WU19DT05OX0ZfT05FX1BBQ0tFVCkKIAkJcmV0dXJuOwogCiAJaWYgKCFpcF92c19zeW5jX2Nvbm5fbmVlZGVkKGlwdnMsIGNwLCBwa3RzKSkKQEAgLTU2NCw4ICYjNDM7NTY2LDggQEAgc3RhdGljIHZvaWQgaXBfdnNfc3luY19jb25uX3YwKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsCiAJaWQgPSBzZWxlY3RfbWFzdGVyX3RocmVhZF9pZChpcHZzLCBjcCk7CiAJbXMgPSAmYW1wO2lwdnMtJmd0O21zW2lkXTsKIAlidWZmID0gbXMtJmd0O3N5bmNfYnVmZjsKLQlsZW4gPSAoY3AtJmd0O2ZsYWdzICZhbXA7IElQX1ZTX0NPTk5fRl9TRVFfTUFTSykgPyBGVUxMX0NPTk5fU0laRSA6Ci0JCVNJTVBMRV9DT05OX1NJWkU7CiYjNDM7CXNlcV9tYXNrID0gZmxhZ3MgJmFtcDsgSVBfVlNfQ09OTl9GX1NFUV9NQVNLOwomIzQzOwlsZW4gPSBzZXFfbWFzayA/IEZVTExfQ09OTl9TSVpFIDogU0lNUExFX0NPTk5fU0laRTsKIAlpZiAoYnVmZikgewogCQltID0gKHN0cnVjdCBpcF92c19zeW5jX21lc2dfdjAgKikgYnVmZi0mZ3Q7bWVzZzsKIAkJLyogU2VuZCBidWZmZXIgaWYgaXQgaXMgZm9yIHYxICovCkBAIC01OTcsOSAmIzQzOzU5OSw5IEBAIHN0YXRpYyB2b2lkIGlwX3ZzX3N5bmNfY29ubl92MChzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLAogCXMtJmd0O2NhZGRyID0gY3AtJmd0O2NhZGRyLmlwOwogCXMtJmd0O3ZhZGRyID0gY3AtJmd0O3ZhZGRyLmlwOwogCXMtJmd0O2RhZGRyID0gY3AtJmd0O2RhZGRyLmlwOwotCXMtJmd0O2ZsYWdzID0gaHRvbnMoY3AtJmd0O2ZsYWdzICZhbXA7IH5JUF9WU19DT05OX0ZfSEFTSEVEKTsKJiM0MzsJcy0mZ3Q7ZmxhZ3MgPSBodG9ucyhmbGFncyAmYW1wOyB+SVBfVlNfQ09OTl9GX0hBU0hFRCk7CiAJcy0mZ3Q7c3RhdGUgPSBodG9ucyhjcC0mZ3Q7c3RhdGUpOwotCWlmIChjcC0mZ3Q7ZmxhZ3MgJmFtcDsgSVBfVlNfQ09OTl9GX1NFUV9NQVNLKSB7CiYjNDM7CWlmIChzZXFfbWFzaykgewogCQlzdHJ1Y3QgaXBfdnNfc3luY19jb25uX29wdGlvbnMgKm9wdCA9CiAJCQkoc3RydWN0IGlwX3ZzX3N5bmNfY29ubl9vcHRpb25zICopJmFtcDtzWzFdOwogCQltZW1jcHkob3B0LCAmYW1wO2NwLSZndDtzeW5jX2Nvbm5fb3B0LCBzaXplb2YoKm9wdCkpOwpAQCAtNjM1LDYgJiM0Mzs2MzcsNyBAQCB2b2lkIGlwX3ZzX3N5bmNfY29ubihzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLCBpbnQgcGt0cykKIAlpbnQgaWQ7CiAJX191OCAqcDsKIAl1bnNpZ25lZCBpbnQgbGVuLCBwZV9uYW1lX2xlbiwgcGFkOwomIzQzOwl1MzIgZmxhZ3MsIHNlcV9tYXNrOwogCiAJLyogSGFuZGxlIG9sZCB2ZXJzaW9uIG9mIHRoZSBwcm90b2NvbCAqLwogCWlmIChzeXNjdGxfc3luY192ZXIoaXB2cykgPT0gMCkgewpAQCAtNjQ3LDYgJiM0Mzs2NTAsNyBAQCB2b2lkIGlwX3ZzX3N5bmNfY29ubihzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLCBpbnQgcGt0cykKIHNsb29wOgogCWlmICghaXBfdnNfc3luY19jb25uX25lZWRlZChpcHZzLCBjcCwgcGt0cykpCiAJCWdvdG8gY29udHJvbDsKJiM0MzsJZmxhZ3MgPSBSRUFEX09OQ0UoY3AtJmd0O2ZsYWdzKTsKIAogCS8qIFNhbml0eSBjaGVja3MgKi8KIAlwZV9uYW1lX2xlbiA9IDA7CkBAIC02NzQsNyAmIzQzOzY3OCw4IEBAIHZvaWQgaXBfdnNfc3luY19jb25uKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsIGludCBwa3RzKQogI2VuZGlmCiAJCWxlbiA9IHNpemVvZihzdHJ1Y3QgaXBfdnNfc3luY192NCk7CiAKLQlpZiAoY3AtJmd0O2ZsYWdzICZhbXA7IElQX1ZTX0NPTk5fRl9TRVFfTUFTSykKJiM0MzsJc2VxX21hc2sgPSBmbGFncyAmYW1wOyBJUF9WU19DT05OX0ZfU0VRX01BU0s7CiYjNDM7CWlmIChzZXFfbWFzaykKIAkJbGVuICYjNDM7PSBzaXplb2Yoc3RydWN0IGlwX3ZzX3N5bmNfY29ubl9vcHRpb25zKSAmIzQzOyAyOwogCiAJaWYgKGNwLSZndDtwZV9kYXRhX2xlbikKQEAgLTcyMCw3ICYjNDM7NzI1LDcgQEAgdm9pZCBpcF92c19zeW5jX2Nvbm4oc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIHN0cnVjdCBpcF92c19jb25uICpjcCwgaW50IHBrdHMpCiAJLyogU2V0IG1lc3NhZ2UgdHlwZSAgJmFtcDsgY29weSBtZW1iZXJzICovCiAJcy0mZ3Q7djQudHlwZSA9IChjcC0mZ3Q7YWYgPT0gQUZfSU5FVDYgPyBTVFlQRV9GX0lORVQ2IDogMCk7CiAJcy0mZ3Q7djQudmVyX3NpemUgPSBodG9ucyhsZW4gJmFtcDsgU1ZFUl9NQVNLKTsJLyogVmVyc2lvbiAwICovCi0Jcy0mZ3Q7djQuZmxhZ3MgPSBodG9ubChjcC0mZ3Q7ZmxhZ3MgJmFtcDsgfklQX1ZTX0NPTk5fRl9IQVNIRUQpOwomIzQzOwlzLSZndDt2NC5mbGFncyA9IGh0b25sKGZsYWdzICZhbXA7IH5JUF9WU19DT05OX0ZfSEFTSEVEKTsKIAlzLSZndDt2NC5zdGF0ZSA9IGh0b25zKGNwLSZndDtzdGF0ZSk7CiAJcy0mZ3Q7djQucHJvdG9jb2wgPSBjcC0mZ3Q7cHJvdG9jb2w7CiAJcy0mZ3Q7djQuY3BvcnQgPSBjcC0mZ3Q7Y3BvcnQ7CkBAIC03NDQsNyAmIzQzOzc0OSw3IEBAIHZvaWQgaXBfdnNfc3luY19jb25uKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsIGludCBwa3RzKQogCQlzLSZndDt2NC52YWRkciA9IGNwLSZndDt2YWRkci5pcDsKIAkJcy0mZ3Q7djQuZGFkZHIgPSBjcC0mZ3Q7ZGFkZHIuaXA7CiAJfQotCWlmIChjcC0mZ3Q7ZmxhZ3MgJmFtcDsgSVBfVlNfQ09OTl9GX1NFUV9NQVNLKSB7CiYjNDM7CWlmIChzZXFfbWFzaykgewogCQkqKHAmIzQzOyYjNDM7KSA9IElQVlNfT1BUX1NFUV9EQVRBOwogCQkqKHAmIzQzOyYjNDM7KSA9IHNpemVvZihzdHJ1Y3QgaXBfdnNfc3luY19jb25uX29wdGlvbnMpOwogCQlodG9uX3NlcSgmYW1wO2NwLSZndDtpbl9zZXEsIChzdHJ1Y3QgaXBfdnNfc2VxICopcCk7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxNzo0MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNDY5CgkJCQkJCQlvdXRwdXQ6IDQzCgkJCQkJCQl0aG91Z2h0czogNDg2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKktNU0FOIEZ1enppbmcgSnVzdGlmaWNhdGlvbiBmb3IgSVBWUyBTeW5jIFBhdGNoKioKCk9rYXksIHNvIHRoZSB1c2VyJiMzOTtzIHF1ZXN0aW9uIGJvaWxzIGRvd24gdG8gd2hldGhlciB0aGlzIHBhdGNoIHdhcnJhbnRzIGl0cyBvd24gZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgcnVuLCBvciBpZiB0aGUgc3RhbmRhcmQgS0FTQU4gZnV6emluZyBpcyBzdWZmaWNpZW50LiBJIG5lZWQgdG8gZGlnIGluIGFuZCBzZWUuIExldCYjMzk7cyBicmVhayBkb3duIHdoYXQmIzM5O3MgaGFwcGVuaW5nLgoKVGhpcyBwYXRjaCB0b3VjaGVzIGBuZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jYC4gU3BlY2lmaWNhbGx5LCBpdCBtb2RpZmllcyBgaXBfdnNfc3luY19jb25uX3YwYCBhbmQgYGlwX3ZzX3N5bmNfY29ubmAuIFRoZSBjaGFuZ2UgaXMgYWJvdXQgaG93IHRoZSBjb2RlIGRlYWxzIHdpdGggYGNwLSZndDtmbGFnc2AuIFByZXZpb3VzbHksIHRoZXJlIHdlcmUgbXVsdGlwbGUgcmVhZHMgb2YgYGNwLSZndDtmbGFnc2Agd2l0aGluIHRoZXNlIGZ1bmN0aW9ucy4gVGhlIHJpc2s/IElmIGBjcC0mZ3Q7ZmxhZ3NgIGlzIG1vZGlmaWVkIGNvbmN1cnJlbnRseSDigJMgYSBkYXRhIHJhY2Ugc2l0dWF0aW9uIOKAkyB0aGVuIHRoZSBjYWxjdWxhdGVkIGxlbmd0aHMgYW5kIHN1YnNlcXVlbnQgb3BlcmF0aW9ucyBjb3VsZCBiZSBpbmNvbnNpc3RlbnQsIHBvdGVudGlhbGx5IGxlYWRpbmcgdG8gYSBidWZmZXIgb3ZlcmZsb3cgb3IgY29ycnVwdCBkYXRhLgoKVGhlIHBhdGNoJiMzOTtzIGZpeCBzZWVtcyBzbWFydC4gSW4gYm90aCBmdW5jdGlvbnMsIHRoZXkmIzM5O3JlIG5vdyByZWFkaW5nIGBjcC0mZ3Q7ZmxhZ3NgICpvbmNlKiBpbnRvIGEgbG9jYWwgdmFyaWFibGUgKGBmbGFnc2ApIHVzaW5nIGBSRUFEX09OQ0VgLiBUaGV5IGNhbGN1bGF0ZSBgc2VxX21hc2tgICh3aGljaCBzZWVtcyBpbXBvcnRhbnQgZm9yIHNlcXVlbmNlLXJlbGF0ZWQgc3R1ZmYpIGZyb20gdGhpcyBjYWNoZWQgYGZsYWdzYC4gVGhlIGBsZW5gIGNhbGN1bGF0aW9uIGFuZCBzdWJzZXF1ZW50IGNvbmRpdGlvbmFsIGxvZ2ljIG5vdyB1c2UgdGhlc2UgbG9jYWwgdmFyaWFibGVzLCBlbnN1cmluZyB0aGV5JiMzOTtyZSBjb25zaXN0ZW50LiBJIHNlZSB0aGUgcGF0dGVybiDigJMgdGhlIG9sZCBjb2RlIGNvdWxkIGNhbGN1bGF0ZSB0aGUgbGVuZ3RoIGJhc2VkIG9uIG9uZSB2YWx1ZSBhbmQgdGhlbiBiZWhhdmUgb24gYSBkaWZmZXJlbnQgdmVyc2lvbi4gVGhpcyBmaXggbmVhdGx5IHJlc29sdmVzIHRoYXQgcG90ZW50aWFsIGluY29uc2lzdGVuY3kuCgpOb3csIHRvIGRldGVybWluZSBpZiB3ZSBuZWVkIEtNU0FOLCBJIG5lZWQgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiB0aGUgKmNvbnRleHQqLiBJIG5lZWQgdG8gc2VlIHdoYXQgZWxzZSBpbnRlcmFjdHMgd2l0aCB0aGVzZSBmbGFncyBhbmQgdGhpcyBzeW5jaHJvbml6YXRpb24gY29kZS4gSXMgaXQgbGlrZWx5IHRvIGJlIG11bHRpdGhyZWFkZWQ/IEFyZSB0aGVyZSBvdGhlciB3cml0ZXJzPyBJJiMzOTtsbCBwcm9iYWJseSBydW4gYSBgcmVhZC1maWxlYCBvciBgZ3JlcHBlcmAgc2VhcmNoIHdpdGhpbiB0aGUgYG5ldC9uZXRmaWx0ZXIvaXB2c2AgZGlyZWN0b3J5IHRvIHVuZGVyc3RhbmQgdGhlIGJyb2FkZXIgcGljdHVyZSBhbmQgaWRlbnRpZnkgdGhlIG1vc3QgbGlrZWx5IGRhdGEgcmFjZXMuIE15IGd1dCBzYXlzIHRoaXMgKm1pZ2h0KiBiZSB0aGUga2luZCBvZiBwYXRjaCB3aGVyZSBLTVNBTiBjb3VsZCBmaW5kIHNvbWV0aGluZyBzdGFuZGFyZCBLQVNBTiBtaXNzZXMsIGJ1dCBJIG5lZWQgbW9yZSBjb250ZXh0IHRvIGJlIHN1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDE3OjQzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDU0MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA5MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNTQwOlx0XHRcdFx0ICAgICAgIGludCBwa3RzKVxuIDU0MTpcdHtcbiA1NDI6XHRcdHN0cnVjdCBpcF92c19zeW5jX21lc2dfdjAgKm07XG4gNTQzOlx0XHRzdHJ1Y3QgaXBfdnNfc3luY19jb25uX3YwICpzO1xuIDU0NDpcdFx0c3RydWN0IGlwX3ZzX3N5bmNfYnVmZiAqYnVmZjtcbiA1NDU6XHRcdHN0cnVjdCBpcHZzX21hc3Rlcl9zeW5jX3N0YXRlICptcztcbiA1NDY6XHRcdHUzMiBmbGFncywgc2VxX21hc2s7XG4gNTQ3Olx0XHR1bnNpZ25lZCBpbnQgbGVuO1xuIDU0ODpcdFx0aW50IGlkO1xuIDU0OTpcdFxuIDU1MDpcdFx0aWYgKHVubGlrZWx5KGNwLVx1MDAzZWFmICE9IEFGX0lORVQpKVxuIDU1MTpcdFx0XHRyZXR1cm47XG4gNTUyOlx0XHRmbGFncyA9IFJFQURfT05DRShjcC1cdTAwM2VmbGFncyk7XG4gNTUzOlx0XHQvKiBEbyBub3Qgc3luYyBPTkUgUEFDS0VUICovXG4gNTU0Olx0XHRpZiAoZmxhZ3MgXHUwMDI2IElQX1ZTX0NPTk5fRl9PTkVfUEFDS0VUKVxuIDU1NTpcdFx0XHRyZXR1cm47XG4gNTU2Olx0XG4gNTU3Olx0XHRpZiAoIWlwX3ZzX3N5bmNfY29ubl9uZWVkZWQoaXB2cywgY3AsIHBrdHMpKVxuIDU1ODpcdFx0XHRyZXR1cm47XG4gNTU5Olx0XG4gNTYwOlx0XHRzcGluX2xvY2tfYmgoXHUwMDI2aXB2cy1cdTAwM2VzeW5jX2J1ZmZfbG9jayk7XG4gNTYxOlx0XHRpZiAoIShpcHZzLVx1MDAzZXN5bmNfc3RhdGUgXHUwMDI2IElQX1ZTX1NUQVRFX01BU1RFUikpIHtcbiA1NjI6XHRcdFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2aXB2cy1cdTAwM2VzeW5jX2J1ZmZfbG9jayk7XG4gNTYzOlx0XHRcdHJldHVybjtcbiA1NjQ6XHRcdH1cbiA1NjU6XHRcbiA1NjY6XHRcdGlkID0gc2VsZWN0X21hc3Rlcl90aHJlYWRfaWQoaXB2cywgY3ApO1xuIDU2NzpcdFx0bXMgPSBcdTAwMjZpcHZzLVx1MDAzZW1zW2lkXTtcbiA1Njg6XHRcdGJ1ZmYgPSBtcy1cdTAwM2VzeW5jX2J1ZmY7XG4gNTY5Olx0XHRzZXFfbWFzayA9IGZsYWdzIFx1MDAyNiBJUF9WU19DT05OX0ZfU0VRX01BU0s7XG4gNTcwOlx0XHRsZW4gPSBzZXFfbWFzayA/IEZVTExfQ09OTl9TSVpFIDogU0lNUExFX0NPTk5fU0laRTtcbiA1NzE6XHRcdGlmIChidWZmKSB7XG4gNTcyOlx0XHRcdG0gPSAoc3RydWN0IGlwX3ZzX3N5bmNfbWVzZ192MCAqKSBidWZmLVx1MDAzZW1lc2c7XG4gNTczOlx0XHRcdC8qIFNlbmQgYnVmZmVyIGlmIGl0IGlzIGZvciB2MSAqL1xuIDU3NDpcdFx0XHRpZiAoYnVmZi1cdTAwM2VoZWFkICYjNDM7IGxlbiBcdTAwM2UgYnVmZi1cdTAwM2VlbmQgfHwgIW0tXHUwMDNlbnJfY29ubnMpIHtcbiA1NzU6XHRcdFx0XHRzYl9xdWV1ZV90YWlsKGlwdnMsIG1zKTtcbiA1NzY6XHRcdFx0XHRtcy1cdTAwM2VzeW5jX2J1ZmYgPSBOVUxMO1xuIDU3NzpcdFx0XHRcdGJ1ZmYgPSBOVUxMO1xuIDU3ODpcdFx0XHR9XG4gNTc5Olx0XHR9XG4gNTgwOlx0XHRpZiAoIWJ1ZmYpIHtcbiA1ODE6XHRcdFx0YnVmZiA9IGlwX3ZzX3N5bmNfYnVmZl9jcmVhdGVfdjAoaXB2cywgbGVuKTtcbiA1ODI6XHRcdFx0aWYgKCFidWZmKSB7XG4gNTgzOlx0XHRcdFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2aXB2cy1cdTAwM2VzeW5jX2J1ZmZfbG9jayk7XG4gNTg0Olx0XHRcdFx0cHJfZXJyKFwmIzM0O2lwX3ZzX3N5bmNfYnVmZl9jcmVhdGUgZmFpbGVkLlxcblwmIzM0Oyk7XG4gNTg1Olx0XHRcdFx0cmV0dXJuO1xuIDU4NjpcdFx0XHR9XG4gNTg3Olx0XHRcdG1zLVx1MDAzZXN5bmNfYnVmZiA9IGJ1ZmY7XG4gNTg4Olx0XHR9XG4gNTg5Olx0XG4gNTkwOlx0XHRtID0gKHN0cnVjdCBpcF92c19zeW5jX21lc2dfdjAgKikgYnVmZi1cdTAwM2VtZXNnO1xuIDU5MTpcdFx0cyA9IChzdHJ1Y3QgaXBfdnNfc3luY19jb25uX3YwICopIGJ1ZmYtXHUwMDNlaGVhZDtcbiA1OTI6XHRcbiA1OTM6XHRcdC8qIGNvcHkgbWVtYmVycyAqL1xuIDU5NDpcdFx0cy1cdTAwM2VyZXNlcnZlZCA9IDA7XG4gNTk1Olx0XHRzLVx1MDAzZXByb3RvY29sID0gY3AtXHUwMDNlcHJvdG9jb2w7XG4gNTk2Olx0XHRzLVx1MDAzZWNwb3J0ID0gY3AtXHUwMDNlY3BvcnQ7XG4gNTk3Olx0XHRzLVx1MDAzZXZwb3J0ID0gY3AtXHUwMDNldnBvcnQ7XG4gNTk4Olx0XHRzLVx1MDAzZWRwb3J0ID0gY3AtXHUwMDNlZHBvcnQ7XG4gNTk5Olx0XHRzLVx1MDAzZWNhZGRyID0gY3AtXHUwMDNlY2FkZHIuaXA7XG4gNjAwOlx0XHRzLVx1MDAzZXZhZGRyID0gY3AtXHUwMDNldmFkZHIuaXA7XG4gNjAxOlx0XHRzLVx1MDAzZWRhZGRyID0gY3AtXHUwMDNlZGFkZHIuaXA7XG4gNjAyOlx0XHRzLVx1MDAzZWZsYWdzID0gaHRvbnMoZmxhZ3MgXHUwMDI2IH5JUF9WU19DT05OX0ZfSEFTSEVEKTtcbiA2MDM6XHRcdHMtXHUwMDNlc3RhdGUgPSBodG9ucyhjcC1cdTAwM2VzdGF0ZSk7XG4gNjA0Olx0XHRpZiAoc2VxX21hc2spIHtcbiA2MDU6XHRcdFx0c3RydWN0IGlwX3ZzX3N5bmNfY29ubl9vcHRpb25zICpvcHQgPVxuIDYwNjpcdFx0XHRcdChzdHJ1Y3QgaXBfdnNfc3luY19jb25uX29wdGlvbnMgKilcdTAwMjZzWzFdO1xuIDYwNzpcdFx0XHRtZW1jcHkob3B0LCBcdTAwMjZjcC1cdTAwM2VzeW5jX2Nvbm5fb3B0LCBzaXplb2YoKm9wdCkpO1xuIDYwODpcdFx0fVxuIDYwOTpcdFxuIDYxMDpcdFx0bS1cdTAwM2Vucl9jb25ucyYjNDM7JiM0Mzs7XG4gNjExOlx0XHRtLVx1MDAzZXNpemUgPSBodG9ucyhudG9ocyhtLVx1MDAzZXNpemUpICYjNDM7IGxlbik7XG4gNjEyOlx0XHRidWZmLVx1MDAzZWhlYWQgJiM0Mzs9IGxlbjtcbiA2MTM6XHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNmlwdnMtXHUwMDNlc3luY19idWZmX2xvY2spO1xuIDYxNDpcdFxuIDYxNTpcdFx0Lyogc3luY2hyb25pemUgaXRzIGNvbnRyb2xsZXIgaWYgaXQgaGFzICovXG4gNjE2Olx0XHRjcCA9IGNwLVx1MDAzZWNvbnRyb2w7XG4gNjE3Olx0XHRpZiAoY3ApIHtcbiA2MTg6XHRcdFx0aWYgKGNwLVx1MDAzZWZsYWdzIFx1MDAyNiBJUF9WU19DT05OX0ZfVEVNUExBVEUpXG4gNjE5Olx0XHRcdFx0cGt0cyA9IGF0b21pY19pbmNfcmV0dXJuKFx1MDAyNmNwLVx1MDAzZWluX3BrdHMpO1xuIDYyMDpcdFx0XHRlbHNlXG4gNjIxOlx0XHRcdFx0cGt0cyA9IHN5c2N0bF9zeW5jX3RocmVzaG9sZChpcHZzKTtcbiA2MjI6XHRcdFx0aXBfdnNfc3luY19jb25uKGlwdnMsIGNwLCBwa3RzKTtcbiA2MjM6XHRcdH1cbiA2MjQ6XHR9XG4gNjI1Olx0XG4gNjI2Olx0LypcbiA2Mjc6XHQgKiAgICAgIEFkZCBhbiBpcF92c19jb25uIGluZm9ybWF0aW9uIGludG8gdGhlIGN1cnJlbnQgc3luY19idWZmLlxuIDYyODpcdCAqICAgICAgQ2FsbGVkIGJ5IGlwX3ZzX2luLlxuIDYyOTpcdCAqICAgICAgU2VuZGluZyBWZXJzaW9uIDEgbWVzc2FnZXNcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTc6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTg2NQoJCQkJCQkJb3V0cHV0OiA0MwoJCQkJCQkJdGhvdWdodHM6IDE2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgYXMgaWYgdGhleSYjMzk7cmUgbXkgb3duOgoKKipJbnZlc3RpZ2F0aW5nIHRoZSBDb25uZWN0aW9uIFN5bmNocm9uaXphdGlvbiBMYW5kc2NhcGUqKgoKQWxyaWdodCwgSSYjMzk7bSB0aGlua2luZyBhYm91dCBjb25uZWN0aW9uIHN5bmNocm9uaXphdGlvbiBhbmQgSSB3YW50IHRvIGJlIHRob3JvdWdoLiBJJiMzOTt2ZSBiZWVuIGxvb2tpbmcgYXQgc29tZSBrZXkgbWV0cmljcywgYnV0IEkgZmVlbCBsaWtlIEkmIzM5O20gbWlzc2luZyBhIHBpZWNlIG9mIHRoZSBwdXp6bGUuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSYjMzk7bSBub3Qgb3Zlcmxvb2tpbmcgYW55dGhpbmcgY3J1Y2lhbC4gU29tZXRoaW5nIGluIHRoZSBiYWNrIG9mIG15IG1pbmQgaXMgdGVsbGluZyBtZSB0byBkb3VibGUtY2hlY2sgdGhhdCBgaXBfdnNfc3luY19jb25uYCBzZXR0aW5nLiBJdCYjMzk7cyBhIGtleSB2YXJpYWJsZSBpbiB0aGlzIHByb2Nlc3MsIGFuZCBldmVuIHRob3VnaCBpdCBtaWdodCBzZWVtIHVucmVsYXRlZCB0byB3aGF0IEkmIzM5O3ZlIGJlZW4gY29uY2VudHJhdGluZyBvbiwgaXQgY291bGQgYmUgdGhlIGx5bmNocGluLCBvciBhdCBsZWFzdCBhIGNvbnRyaWJ1dGluZyBmYWN0b3IuIEkmIzM5O2xsIG5lZWQgdG8gZ28gYmFjayBhbmQgZXhhbWluZSBpdDsgaXQmIzM5O3MgYWx3YXlzIHRoZSB1bmV4cGVjdGVkIHBsYWNlIHRoYXQgaG9sZHMgdGhlIHNvbHV0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxNzo0MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA2MzUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogODAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDYzNTpcdFx0c3RydWN0IGlwX3ZzX3N5bmNfYnVmZiAqYnVmZjtcbiA2MzY6XHRcdHN0cnVjdCBpcHZzX21hc3Rlcl9zeW5jX3N0YXRlICptcztcbiA2Mzc6XHRcdGludCBpZDtcbiA2Mzg6XHRcdF9fdTggKnA7XG4gNjM5Olx0XHR1bnNpZ25lZCBpbnQgbGVuLCBwZV9uYW1lX2xlbiwgcGFkO1xuIDY0MDpcdFx0dTMyIGZsYWdzLCBzZXFfbWFzaztcbiA2NDE6XHRcbiA2NDI6XHRcdC8qIEhhbmRsZSBvbGQgdmVyc2lvbiBvZiB0aGUgcHJvdG9jb2wgKi9cbiA2NDM6XHRcdGlmIChzeXNjdGxfc3luY192ZXIoaXB2cykgPT0gMCkge1xuIDY0NDpcdFx0XHRpcF92c19zeW5jX2Nvbm5fdjAoaXB2cywgY3AsIHBrdHMpO1xuIDY0NTpcdFx0XHRyZXR1cm47XG4gNjQ2Olx0XHR9XG4gNjQ3Olx0XHQvKiBEbyBub3Qgc3luYyBPTkUgUEFDS0VUICovXG4gNjQ4Olx0XHRpZiAoY3AtXHUwMDNlZmxhZ3MgXHUwMDI2IElQX1ZTX0NPTk5fRl9PTkVfUEFDS0VUKVxuIDY0OTpcdFx0XHRnb3RvIGNvbnRyb2w7XG4gNjUwOlx0c2xvb3A6XG4gNjUxOlx0XHRpZiAoIWlwX3ZzX3N5bmNfY29ubl9uZWVkZWQoaXB2cywgY3AsIHBrdHMpKVxuIDY1MjpcdFx0XHRnb3RvIGNvbnRyb2w7XG4gNjUzOlx0XHRmbGFncyA9IFJFQURfT05DRShjcC1cdTAwM2VmbGFncyk7XG4gNjU0Olx0XG4gNjU1Olx0XHQvKiBTYW5pdHkgY2hlY2tzICovXG4gNjU2Olx0XHRwZV9uYW1lX2xlbiA9IDA7XG4gNjU3Olx0XHRpZiAoY3AtXHUwMDNlcGVfZGF0YV9sZW4pIHtcbiA2NTg6XHRcdFx0aWYgKCFjcC1cdTAwM2VwZV9kYXRhIHx8ICFjcC1cdTAwM2VkZXN0KSB7XG4gNjU5Olx0XHRcdFx0SVBfVlNfRVJSX1JMKFwmIzM0O1NZTkMsIGNvbm5lY3Rpb24gcGVfZGF0YSBpbnZhbGlkXFxuXCYjMzQ7KTtcbiA2NjA6XHRcdFx0XHRyZXR1cm47XG4gNjYxOlx0XHRcdH1cbiA2NjI6XHRcdFx0cGVfbmFtZV9sZW4gPSBzdHJubGVuKGNwLVx1MDAzZXBlLVx1MDAzZW5hbWUsIElQX1ZTX1BFTkFNRV9NQVhMRU4pO1xuIDY2MzpcdFx0fVxuIDY2NDpcdFxuIDY2NTpcdFx0c3Bpbl9sb2NrX2JoKFx1MDAyNmlwdnMtXHUwMDNlc3luY19idWZmX2xvY2spO1xuIDY2NjpcdFx0aWYgKCEoaXB2cy1cdTAwM2VzeW5jX3N0YXRlIFx1MDAyNiBJUF9WU19TVEFURV9NQVNURVIpKSB7XG4gNjY3Olx0XHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNmlwdnMtXHUwMDNlc3luY19idWZmX2xvY2spO1xuIDY2ODpcdFx0XHRyZXR1cm47XG4gNjY5Olx0XHR9XG4gNjcwOlx0XG4gNjcxOlx0XHRpZCA9IHNlbGVjdF9tYXN0ZXJfdGhyZWFkX2lkKGlwdnMsIGNwKTtcbiA2NzI6XHRcdG1zID0gXHUwMDI2aXB2cy1cdTAwM2Vtc1tpZF07XG4gNjczOlx0XG4gNjc0Olx0I2lmZGVmIENPTkZJR19JUF9WU19JUFY2XG4gNjc1Olx0XHRpZiAoY3AtXHUwMDNlYWYgPT0gQUZfSU5FVDYpXG4gNjc2Olx0XHRcdGxlbiA9IHNpemVvZihzdHJ1Y3QgaXBfdnNfc3luY192Nik7XG4gNjc3Olx0XHRlbHNlXG4gNjc4Olx0I2VuZGlmXG4gNjc5Olx0XHRcdGxlbiA9IHNpemVvZihzdHJ1Y3QgaXBfdnNfc3luY192NCk7XG4gNjgwOlx0XG4gNjgxOlx0XHRzZXFfbWFzayA9IGZsYWdzIFx1MDAyNiBJUF9WU19DT05OX0ZfU0VRX01BU0s7XG4gNjgyOlx0XHRpZiAoc2VxX21hc2spXG4gNjgzOlx0XHRcdGxlbiAmIzQzOz0gc2l6ZW9mKHN0cnVjdCBpcF92c19zeW5jX2Nvbm5fb3B0aW9ucykgJiM0MzsgMjtcbiA2ODQ6XHRcbiA2ODU6XHRcdGlmIChjcC1cdTAwM2VwZV9kYXRhX2xlbilcbiA2ODY6XHRcdFx0bGVuICYjNDM7PSBjcC1cdTAwM2VwZV9kYXRhX2xlbiAmIzQzOyAyO1x0LyogJiM0MzsgUGFyYW0gaGRyIGZpZWxkICovXG4gNjg3Olx0XHRpZiAocGVfbmFtZV9sZW4pXG4gNjg4Olx0XHRcdGxlbiAmIzQzOz0gcGVfbmFtZV9sZW4gJiM0MzsgMjtcbiA2ODk6XHRcbiA2OTA6XHRcdC8qIGNoZWNrIGlmIHRoZXJlIGlzIGEgc3BhY2UgZm9yIHRoaXMgb25lICAqL1xuIDY5MTpcdFx0cGFkID0gMDtcbiA2OTI6XHRcdGJ1ZmYgPSBtcy1cdTAwM2VzeW5jX2J1ZmY7XG4gNjkzOlx0XHRpZiAoYnVmZikge1xuIDY5NDpcdFx0XHRtID0gYnVmZi1cdTAwM2VtZXNnO1xuIDY5NTpcdFx0XHRwYWQgPSAoNCAtIChzaXplX3QpIGJ1ZmYtXHUwMDNlaGVhZCkgXHUwMDI2IDM7XG4gNjk2Olx0XHRcdC8qIFNlbmQgYnVmZmVyIGlmIGl0IGlzIGZvciB2MCAqL1xuIDY5NzpcdFx0XHRpZiAoYnVmZi1cdTAwM2VoZWFkICYjNDM7IGxlbiAmIzQzOyBwYWQgXHUwMDNlIGJ1ZmYtXHUwMDNlZW5kIHx8IG0tXHUwMDNlcmVzZXJ2ZWQpIHtcbiA2OTg6XHRcdFx0XHRzYl9xdWV1ZV90YWlsKGlwdnMsIG1zKTtcbiA2OTk6XHRcdFx0XHRtcy1cdTAwM2VzeW5jX2J1ZmYgPSBOVUxMO1xuIDcwMDpcdFx0XHRcdGJ1ZmYgPSBOVUxMO1xuIDcwMTpcdFx0XHRcdHBhZCA9IDA7XG4gNzAyOlx0XHRcdH1cbiA3MDM6XHRcdH1cbiA3MDQ6XHRcbiA3MDU6XHRcdGlmICghYnVmZikge1xuIDcwNjpcdFx0XHRidWZmID0gaXBfdnNfc3luY19idWZmX2NyZWF0ZShpcHZzLCBsZW4pO1xuIDcwNzpcdFx0XHRpZiAoIWJ1ZmYpIHtcbiA3MDg6XHRcdFx0XHRzcGluX3VubG9ja19iaChcdTAwMjZpcHZzLVx1MDAzZXN5bmNfYnVmZl9sb2NrKTtcbiA3MDk6XHRcdFx0XHRwcl9lcnIoXCYjMzQ7aXBfdnNfc3luY19idWZmX2NyZWF0ZSBmYWlsZWQuXFxuXCYjMzQ7KTtcbiA3MTA6XHRcdFx0XHRyZXR1cm47XG4gNzExOlx0XHRcdH1cbiA3MTI6XHRcdFx0bXMtXHUwMDNlc3luY19idWZmID0gYnVmZjtcbiA3MTM6XHRcdFx0bSA9IGJ1ZmYtXHUwMDNlbWVzZztcbiA3MTQ6XHRcdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTc6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzM0MwoJCQkJCQkJb3V0cHV0OiA0MwoJCQkJCQkJdGhvdWdodHM6IDE2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgcHJlc2VudGVkIGFzIGlmIGl0IHdlcmUgbXkgb3duIGludGVybmFsIG1vbm9sb2d1ZToKCioqRGl2aW5nIERlZXBlciBpbnRvIGBpcF92c19zeW5jX2Nvbm5gKioKCkFscmlnaHQsIHNvIHdlJiMzOTtyZSBsb29raW5nIGF0IGBpcF92c19zeW5jX2Nvbm5gLiBHb29kLCBnb29kLiBJIG5lZWQgdG8gZ2V0IGEgYmV0dGVyIGhhbmRsZSBvbiB0aGUgY29udGV4dCBvZiAqZXZlcnl0aGluZyogdGhhdCB0b3VjaGVzIHRoaXMuIFRoaXMgaXMgd2hlcmUgdGhlIG1hZ2ljIChvciB0aGUgcHJvYmxlbXMpIGxpa2VseSByZXNpZGUgd2hlbiB3ZSYjMzk7cmUgdGFsa2luZyBhYm91dCBjb25uZWN0aW9uIHN5bmNocm9uaXphdGlvbiBpbiBJUFZTLiBMZXQmIzM5O3MgZGlnIGRlZXBlciBpbnRvIHRoZSBjb2RlIHRoYXQmIzM5O3MgYWxyZWFkeSBpbiBtZW1vcnkuIEkgd29uZGVyIGlmIHRoZXJlIGFyZSBhbnkgb2J2aW91cyByZWQgZmxhZ3MgaW4gdGVybXMgb2Ygc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXMsIGJ1ZmZlciBzaXplcywgb3IgcG90ZW50aWFsIGZvciByYWNlIGNvbmRpdGlvbnMuIEkgc2hvdWxkIHByb2JhYmx5IGJlIHRoaW5raW5nIGFib3V0IGl0cyBpbnRlcmFjdGlvbiB3aXRoIHRoZSBvdGhlciBzeW5jaHJvbml6YXRpb24gbWVjaGFuaXNtcyBpbiB0aGUga2VybmVsLCBzdWNoIGFzIHNwaW5sb2NrcyBhbmQgbXV0ZXhlcy4gSXMgdGhpcyBhIGNvbW1vbiBob3RzcG90PyBUaW1lIHRvIGRvIHNvbWUgZGlnZ2luZy4gVGltZSB0byBzZWUgd2hhdCYjMzk7cyBhY3R1YWxseSAqdGhlcmUqLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxNzo0MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA3MTUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDcxNTpcdFxuIDcxNjpcdFx0cCA9IGJ1ZmYtXHUwMDNlaGVhZDtcbiA3MTc6XHRcdGJ1ZmYtXHUwMDNlaGVhZCAmIzQzOz0gcGFkICYjNDM7IGxlbjtcbiA3MTg6XHRcdG0tXHUwMDNlc2l6ZSA9IGh0b25zKG50b2hzKG0tXHUwMDNlc2l6ZSkgJiM0MzsgcGFkICYjNDM7IGxlbik7XG4gNzE5Olx0XHQvKiBBZGQgZXYuIHBhZGRpbmcgZnJvbSBwcmV2LiBzeW5jX2Nvbm4gKi9cbiA3MjA6XHRcdHdoaWxlIChwYWQtLSlcbiA3MjE6XHRcdFx0KihwJiM0MzsmIzQzOykgPSAwO1xuIDcyMjpcdFxuIDcyMzpcdFx0cyA9ICh1bmlvbiBpcF92c19zeW5jX2Nvbm4gKilwO1xuIDcyNDpcdFxuIDcyNTpcdFx0LyogU2V0IG1lc3NhZ2UgdHlwZSAgXHUwMDI2IGNvcHkgbWVtYmVycyAqL1xuIDcyNjpcdFx0cy1cdTAwM2V2NC50eXBlID0gKGNwLVx1MDAzZWFmID09IEFGX0lORVQ2ID8gU1RZUEVfRl9JTkVUNiA6IDApO1xuIDcyNzpcdFx0cy1cdTAwM2V2NC52ZXJfc2l6ZSA9IGh0b25zKGxlbiBcdTAwMjYgU1ZFUl9NQVNLKTtcdC8qIFZlcnNpb24gMCAqL1xuIDcyODpcdFx0cy1cdTAwM2V2NC5mbGFncyA9IGh0b25sKGZsYWdzIFx1MDAyNiB+SVBfVlNfQ09OTl9GX0hBU0hFRCk7XG4gNzI5Olx0XHRzLVx1MDAzZXY0LnN0YXRlID0gaHRvbnMoY3AtXHUwMDNlc3RhdGUpO1xuIDczMDpcdFx0cy1cdTAwM2V2NC5wcm90b2NvbCA9IGNwLVx1MDAzZXByb3RvY29sO1xuIDczMTpcdFx0cy1cdTAwM2V2NC5jcG9ydCA9IGNwLVx1MDAzZWNwb3J0O1xuIDczMjpcdFx0cy1cdTAwM2V2NC52cG9ydCA9IGNwLVx1MDAzZXZwb3J0O1xuIDczMzpcdFx0cy1cdTAwM2V2NC5kcG9ydCA9IGNwLVx1MDAzZWRwb3J0O1xuIDczNDpcdFx0cy1cdTAwM2V2NC5md21hcmsgPSBodG9ubChjcC1cdTAwM2Vmd21hcmspO1xuIDczNTpcdFx0cy1cdTAwM2V2NC50aW1lb3V0ID0gaHRvbmwoY3AtXHUwMDNldGltZW91dCAvIEhaKTtcbiA3MzY6XHRcdG0tXHUwMDNlbnJfY29ubnMmIzQzOyYjNDM7O1xuIDczNzpcdFxuIDczODpcdCNpZmRlZiBDT05GSUdfSVBfVlNfSVBWNlxuIDczOTpcdFx0aWYgKGNwLVx1MDAzZWFmID09IEFGX0lORVQ2KSB7XG4gNzQwOlx0XHRcdHAgJiM0Mzs9IHNpemVvZihzdHJ1Y3QgaXBfdnNfc3luY192Nik7XG4gNzQxOlx0XHRcdHMtXHUwMDNldjYuY2FkZHIgPSBjcC1cdTAwM2VjYWRkci5pbjY7XG4gNzQyOlx0XHRcdHMtXHUwMDNldjYudmFkZHIgPSBjcC1cdTAwM2V2YWRkci5pbjY7XG4gNzQzOlx0XHRcdHMtXHUwMDNldjYuZGFkZHIgPSBjcC1cdTAwM2VkYWRkci5pbjY7XG4gNzQ0Olx0XHR9IGVsc2VcbiA3NDU6XHQjZW5kaWZcbiA3NDY6XHRcdHtcbiA3NDc6XHRcdFx0cCAmIzQzOz0gc2l6ZW9mKHN0cnVjdCBpcF92c19zeW5jX3Y0KTtcdC8qIG9wdGlvbnMgcHRyICovXG4gNzQ4Olx0XHRcdHMtXHUwMDNldjQuY2FkZHIgPSBjcC1cdTAwM2VjYWRkci5pcDtcbiA3NDk6XHRcdFx0cy1cdTAwM2V2NC52YWRkciA9IGNwLVx1MDAzZXZhZGRyLmlwO1xuIDc1MDpcdFx0XHRzLVx1MDAzZXY0LmRhZGRyID0gY3AtXHUwMDNlZGFkZHIuaXA7XG4gNzUxOlx0XHR9XG4gNzUyOlx0XHRpZiAoc2VxX21hc2spIHtcbiA3NTM6XHRcdFx0KihwJiM0MzsmIzQzOykgPSBJUFZTX09QVF9TRVFfREFUQTtcbiA3NTQ6XHRcdFx0KihwJiM0MzsmIzQzOykgPSBzaXplb2Yoc3RydWN0IGlwX3ZzX3N5bmNfY29ubl9vcHRpb25zKTtcbiA3NTU6XHRcdFx0aHRvbl9zZXEoXHUwMDI2Y3AtXHUwMDNlaW5fc2VxLCAoc3RydWN0IGlwX3ZzX3NlcSAqKXApO1xuIDc1NjpcdFx0XHRwICYjNDM7PSBzaXplb2Yoc3RydWN0IGlwX3ZzX3NlcSk7XG4gNzU3Olx0XHRcdGh0b25fc2VxKFx1MDAyNmNwLVx1MDAzZW91dF9zZXEsIChzdHJ1Y3QgaXBfdnNfc2VxICopcCk7XG4gNzU4Olx0XHRcdHAgJiM0Mzs9IHNpemVvZihzdHJ1Y3QgaXBfdnNfc2VxKTtcbiA3NTk6XHRcdH1cbiA3NjA6XHRcdC8qIEhhbmRsZSBwZSBkYXRhICovXG4gNzYxOlx0XHRpZiAoY3AtXHUwMDNlcGVfZGF0YV9sZW4gXHUwMDI2XHUwMDI2IGNwLVx1MDAzZXBlX2RhdGEpIHtcbiA3NjI6XHRcdFx0KihwJiM0MzsmIzQzOykgPSBJUFZTX09QVF9QRV9EQVRBO1xuIDc2MzpcdFx0XHQqKHAmIzQzOyYjNDM7KSA9IGNwLVx1MDAzZXBlX2RhdGFfbGVuO1xuIDc2NDpcdFx0XHRtZW1jcHkocCwgY3AtXHUwMDNlcGVfZGF0YSwgY3AtXHUwMDNlcGVfZGF0YV9sZW4pO1xuIDc2NTpcdFx0XHRwICYjNDM7PSBjcC1cdTAwM2VwZV9kYXRhX2xlbjtcbiA3NjY6XHRcdFx0aWYgKHBlX25hbWVfbGVuKSB7XG4gNzY3Olx0XHRcdFx0LyogQWRkIFBFX05BTUUgKi9cbiA3Njg6XHRcdFx0XHQqKHAmIzQzOyYjNDM7KSA9IElQVlNfT1BUX1BFX05BTUU7XG4gNzY5Olx0XHRcdFx0KihwJiM0MzsmIzQzOykgPSBwZV9uYW1lX2xlbjtcbiA3NzA6XHRcdFx0XHRtZW1jcHkocCwgY3AtXHUwMDNlcGUtXHUwMDNlbmFtZSwgcGVfbmFtZV9sZW4pO1xuIDc3MTpcdFx0XHRcdHAgJiM0Mzs9IHBlX25hbWVfbGVuO1xuIDc3MjpcdFx0XHR9XG4gNzczOlx0XHR9XG4gNzc0Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDE3OjQzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg2NzgKCQkJCQkJCW91dHB1dDogMTk1CgkJCQkJCQl0aG91Z2h0czogOTQ3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgQnVnIEZpeDogQSBEZWVwIERpdmUqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IHJldmVhbHMgYSBjbGFzc2ljIHJhY2UgY29uZGl0aW9uIGluIHRoZSBgaXBfdnNfc3luY19jb25uX3YwYCBhbmQgYGlwX3ZzX3N5bmNfY29ubmAgZnVuY3Rpb25zLiBUaGUgY29yZSBpc3N1ZSBpcyB0aGUgbXVsdGlwbGUsIHVuc3luY2hyb25pemVkIHJlYWRzIG9mIGBjcC0mZ3Q7ZmxhZ3NgLiBUaGUgcG90ZW50aWFsIGZvciB0cm91YmxlIGFyaXNlcyB3aGVuIHdlIGV2YWx1YXRlIGBjcC0mZ3Q7ZmxhZ3MgJmFtcDsgSVBfVlNfQ09OTl9GX1NFUV9NQVNLYCBmb3IgbGVuZ3RoIGNhbGN1bGF0aW9uIChgbGVuYCkgYW5kIHRoZW4sICpiZWZvcmUqIGFjdHVhbGx5IHVzaW5nIHRoYXQgY2FsY3VsYXRlZCBsZW5ndGgsIGBjcC0mZ3Q7ZmxhZ3NgIGNoYW5nZXMgY29uY3VycmVudGx5LgoKVGhpcyBjYW4gcmVzdWx0IGluIHR3byB1bmRlc2lyYWJsZSBzY2VuYXJpb3M6CgoxLiAgKipCdWZmZXIgT3ZlcmZsb3c6KiogSWYgYGNwLSZndDtmbGFnc2AgdHJhbnNpdGlvbnMgZnJvbSAwIHRvIGBTRVFfTUFTS2AgKmFmdGVyKiBgbGVuYCBpcyBjYWxjdWxhdGVkIHdpdGhvdXQgY29uc2lkZXJpbmcgc2VxdWVuY2UgZGF0YSBzcGFjZSwgYnV0ICpiZWZvcmUqIHRoZSBgaWZgIHN0YXRlbWVudCBpcyBleGVjdXRlZCwgdGhlIGBpZmAgYnJhbmNoIGdldHMgdGFrZW4sIHdyaXRpbmcgYmV5b25kIHRoZSBhbGxvY2F0ZWQgYnVmZmVyIHNwYWNlLgoyLiAgKipVbmZpbGxlZCBCdWZmZXI6KiogQ29udmVyc2VseSwgaWYgYGNwLSZndDtmbGFnc2AgZmxpcHMgZnJvbSBgU0VRX01BU0tgIHRvIDAsIGBsZW5gIGlzIGNhbGN1bGF0ZWQgKndpdGgqIHNlcXVlbmNlIHNwYWNlLCBidXQgdGhlIGBpZmAgaXMgc2tpcHBlZC4gVGhpcyBsZWF2ZXMgdGhlIGJ1ZmZlciBwYXJ0aWFsbHkgZmlsbGVkLCBhcyBgbGVuYCBieXRlcyBhcmUgYWNjb3VudGVkIGZvciwgYnV0IHRoZSB0YWlsIG9mIHRoZSBidWZmZXIgaXNuJiMzOTt0IHBvcHVsYXRlZC4KClRoZSBwYXRjaCYjMzk7cyBzb2x1dGlvbiBpcyBlbGVnYW50OiBpdCB1c2VzIGBSRUFEX09OQ0UoY3AtJmd0O2ZsYWdzKWAgdG8gZ3JhYiBhICpzaW5nbGUsIGNvbnNpc3RlbnQqIHNuYXBzaG90IG9mIGBjcC0mZ3Q7ZmxhZ3NgIGludG8gYSBsb2NhbCB2YXJpYWJsZSwgYGZsYWdzYC4gVGhlbiwgYHNlcV9tYXNrYCBpcyBkZXJpdmVkIGZyb20gdGhhdCBzbmFwc2hvdC4gVGhpcyBlbnN1cmVzIGJvdGggYGxlbmAgY2FsY3VsYXRpb24gYW5kIHN1YnNlcXVlbnQgZGF0YSBlbWlzc2lvbiB1c2UgdGhlICpleGFjdCBzYW1lKiB2YWx1ZS4KCk5vdywgbGV0JiMzOTtzIGFkZHJlc3MgdGhlIGNydWNpYWwgcXVlc3Rpb246IGRvZXMgdGhpcyBpbnRyb2R1Y2UgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3M/IFRoaXMgaXMgd2hlcmUgbXkgS01TQU4ga25vd2xlZGdlIGNvbWVzIGludG8gcGxheS4gS01TQU4gaXMgdGhlIHRvb2wgdGhhdCBmbGFncyByZWFkcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeS4gQnV0LCBoZXJlJiMzOTtzIHdoYXQgSSBzZWU6CgoqICAgS01TQU4gZm9jdXNlcyBvbiBrZXJuZWwtdG8tdXNlciBpbmZvLWxlYWtzIGFuZCByZWFkcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeS4KKiAgIEtBU0FOL0tDU0FOIGhhbmRsZSBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzL292ZXJmbG93cyBhbmQgZGF0YSByYWNlcy4KKiAgIFRoZSBmaXggYWRkcmVzc2VzICpjb25jdXJyZW5jeSogKGRhdGEgcmFjZSBvbiBgY3AtJmd0O2ZsYWdzYCkuCiogICBgZmxhZ3NgIGlzIGluaXRpYWxpemVkIHdpdGggYFJFQURfT05DRShjcC0mZ3Q7ZmxhZ3MpYC4KKiAgIGBzZXFfbWFza2AgaXMgaW5pdGlhbGl6ZWQgd2l0aCBgZmxhZ3MgJmFtcDsgSVBfVlNfQ09OTl9GX1NFUV9NQVNLYC4KClRoZXJlIGFyZSBubyBuZXcgYnVmZmVycywgc3RydWN0dXJlcywgcGFkZGluZywgb3IgdW5pbml0aWFsaXplZCByZWFkcyBpbnRyb2R1Y2VkLiBBbGwgdmFyaWFibGVzIGFyZSBzY2FsYXIgYW5kIGluaXRpYWxpemVkIGRpcmVjdGx5IGF0IGRlY2xhcmF0aW9uL3VzZS4gTm8gdXNlcnNwYWNlIGNvcHkgZnVuY3Rpb25zIGFyZSB0b3VjaGVkLiBObyB1bmluaXRpYWxpemVkIGZpZWxkcyBhcmUgcmVhZC4KClRoZXJlZm9yZSwgdGhpcyBpcyBzb2xlbHkgYSBjb25jdXJyZW5jeS9yYWNlLWNvbmRpdGlvbiBmaXguIEl0ICpwcmV2ZW50cyogb3V0LW9mLWJvdW5kcyB3cml0ZXMgb3IgbWVzc2FnZSBjb3JydXB0aW9uLiBLTVNBTiBpcyBub3QgcmVxdWlyZWQuIEtBU0FOL0tDU0FOIGFyZSB0aGUgY29ycmVjdCBkZXRlY3RvcnMgYmVjYXVzZSB0aGV5IGhhbmRsZSB0aGUgcmVsZXZhbnQgYnVnIGNsYXNzZXMgb2YgdGhpcyB0eXBlIChPT0IsIGNvbmN1cnJlbmN5KS4KCkxldCYjMzk7cyBkb3VibGUtY2hlY2sgdGhlIHJlcXVpcmVtZW50czoKCjEuICBObyBrZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXJzcGFjZSB3aGVyZSBwYWRkaW5nIG1pZ2h0IGJlIHVuaW5pdGlhbGl6ZWQuCjIuICBObyBjb25kaXRpb25hbCBsb2dpYyBkZXBlbmRlbnQgb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMuCjMuICBObyBjb21wbGV4IGRhdGEgc3RydWN0dXJlIGFsbG9jYXRpb24gdGhhdCBjb3VsZCBleHBvc2UgdW5pbml0aWFsaXplZCBmaWVsZHMuCjQuICBObyBsZW5ndGgvYm91bmRzIGxvZ2ljIHRoYXQgZXhwb3NlcyB1bmluaXRpYWxpemVkIGJ5dGVzLgoKS01TQU4gUmVhc29uaW5nOgoKVGhlIHBhdGNoIGludHJvZHVjZXMgYFJFQURfT05DRWAgdG8gZW5zdXJlIGNvbnNpc3RlbnQgZXZhbHVhdGlvbiBvZiBgc2VxX21hc2tgIGZvciBzeW5jIGJ1ZmZlciBsZW5ndGggY2FsY3VsYXRpb24gYW5kIHNlcmlhbGl6YXRpb24sIHRodXMgcmVzb2x2aW5nIGEgcmFjZSBjb25kaXRpb24uIFRoZSByYWNlIHByZXZpb3VzbHkgbGVkIHRvIHBvdGVudGlhbCBidWZmZXIgb3V0LW9mLWJvdW5kcyBvciBtZXNzYWdlIGNvcnJ1cHRpb24gaWYgYGNwLSZndDtmbGFnc2AgY2hhbmdlZCBjb25jdXJyZW50bHksIGEgcHJvYmxlbSB0aGF0IEtBU0FOIGFuZCBLQ1NBTiBwcm9wZXJseSBhZGRyZXNzLiBLTVNBTiBpcyBub3QgbmVlZGVkIGJlY2F1c2UgYWxsIHZhcmlhYmxlcyBhcmUgZnVsbHkgaW5pdGlhbGl6ZWQgc2NhbGFycywgd2l0aCBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkLCBhbGxvY2F0ZWQsIG9yIGNvcGllZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTc6NDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcmVzc2VzIGEgY29uY3VycmVuY3kgaXNzdWUgaW4gSVBWUyBjb25uZWN0aW9uIHN5bmNocm9uaXphdGlvbiAoaXBfdnNfc3luY19jb25uIGFuZCBpcF92c19zeW5jX2Nvbm5fdjApIHdoZXJlIGNwLVx1MDAzZWZsYWdzIHdhcyByZWFkIG11bHRpcGxlIHRpbWVzIHdpdGhvdXQgUkVBRF9PTkNFLCBwb3RlbnRpYWxseSBjYXVzaW5nIGEgbWlzbWF0Y2ggYmV0d2VlbiB0aGUgY2FsY3VsYXRlZCBidWZmZXIgbGVuZ3RoIGFuZCB0aGUgYWN0dWFsIGRhdGEgd3JpdHRlbiBpZiBmbGFncyB3ZXJlIG1vZGlmaWVkIGNvbmN1cnJlbnRseS5cblxuVGhlIGZpeCBpbnRyb2R1Y2VzIGxvY2FsIHNjYWxhciB2YXJpYWJsZXMgKGZsYWdzLCBzZXFfbWFzaykgdGhhdCBhcmUgaW1tZWRpYXRlbHkgaW5pdGlhbGl6ZWQgdmlhIFJFQURfT05DRShjcC1cdTAwM2VmbGFncykuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHVuaW5pdGlhbGl6ZWQgc3RhY2sgb3IgaGVhcCBhbGxvY2F0aW9ucywgdW5pbml0aWFsaXplZCBzdHJ1Y3R1cmUgZmllbGRzLCBpbmZvLWxlYWtzIHRvIHVzZXJzcGFjZSwgb3IgcmVhZHMgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkuIFRoZSByaXNrcyBhc3NvY2lhdGVkIHdpdGggdGhlIG9yaWdpbmFsIHJhY2UgY29uZGl0aW9uIChvdXQtb2YtYm91bmRzIGJ1ZmZlciB3cml0ZXMgLyBkYXRhIGNvcnJ1cHRpb24pIGFyZSBjb3ZlcmVkIGJ5IEtBU0FOIGFuZCBLQ1NBTiwgc28gYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRyZXNzZXMgYSBjb25jdXJyZW5jeSBpc3N1ZSBpbiBJUFZTIGNvbm5lY3Rpb24gc3luY2hyb25pemF0aW9uIChpcF92c19zeW5jX2Nvbm4gYW5kIGlwX3ZzX3N5bmNfY29ubl92MCkgd2hlcmUgY3AtXHUwMDNlZmxhZ3Mgd2FzIHJlYWQgbXVsdGlwbGUgdGltZXMgd2l0aG91dCBSRUFEX09OQ0UsIHBvdGVudGlhbGx5IGNhdXNpbmcgYSBtaXNtYXRjaCBiZXR3ZWVuIHRoZSBjYWxjdWxhdGVkIGJ1ZmZlciBsZW5ndGggYW5kIHRoZSBhY3R1YWwgZGF0YSB3cml0dGVuIGlmIGZsYWdzIHdlcmUgbW9kaWZpZWQgY29uY3VycmVudGx5LlxuXG5UaGUgZml4IGludHJvZHVjZXMgbG9jYWwgc2NhbGFyIHZhcmlhYmxlcyAoZmxhZ3MsIHNlcV9tYXNrKSB0aGF0IGFyZSBpbW1lZGlhdGVseSBpbml0aWFsaXplZCB2aWEgUkVBRF9PTkNFKGNwLVx1MDAzZWZsYWdzKS4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgdW5pbml0aWFsaXplZCBzdGFjayBvciBoZWFwIGFsbG9jYXRpb25zLCB1bmluaXRpYWxpemVkIHN0cnVjdHVyZSBmaWVsZHMsIGluZm8tbGVha3MgdG8gdXNlcnNwYWNlLCBvciByZWFkcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhlIHJpc2tzIGFzc29jaWF0ZWQgd2l0aCB0aGUgb3JpZ2luYWwgcmFjZSBjb25kaXRpb24gKG91dC1vZi1ib3VuZHMgYnVmZmVyIHdyaXRlcyAvIGRhdGEgY29ycnVwdGlvbikgYXJlIGNvdmVyZWQgYnkgS0FTQU4gYW5kIEtDU0FOLCBzbyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMDlUMTc6NDM6MDAuNTI0MTk3MjM5WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTg0MzI0MzU2MTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSVBfVlNcIixcbiAgICBcIk5FVEZJTFRFUlwiLFxuICAgIFwiSU5FVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImlwX3ZzX3N5bmNfY29ublwiLFxuICAgIFwiaXBfdnNfc3luY19jb25uX3YwXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRyZXNzZXMgYSBjb25jdXJyZW5jeSBpc3N1ZSBpbiBJUFZTIGNvbm5lY3Rpb24gc3luY2hyb25pemF0aW9uIChpcF92c19zeW5jX2Nvbm4gYW5kIGlwX3ZzX3N5bmNfY29ubl92MCkgd2hlcmUgY3AtXFx1MDAzZWZsYWdzIHdhcyByZWFkIG11bHRpcGxlIHRpbWVzIHdpdGhvdXQgUkVBRF9PTkNFLCBwb3RlbnRpYWxseSBjYXVzaW5nIGEgbWlzbWF0Y2ggYmV0d2VlbiB0aGUgY2FsY3VsYXRlZCBidWZmZXIgbGVuZ3RoIGFuZCB0aGUgYWN0dWFsIGRhdGEgd3JpdHRlbiBpZiBmbGFncyB3ZXJlIG1vZGlmaWVkIGNvbmN1cnJlbnRseS5cXG5cXG5UaGUgZml4IGludHJvZHVjZXMgbG9jYWwgc2NhbGFyIHZhcmlhYmxlcyAoZmxhZ3MsIHNlcV9tYXNrKSB0aGF0IGFyZSBpbW1lZGlhdGVseSBpbml0aWFsaXplZCB2aWEgUkVBRF9PTkNFKGNwLVxcdTAwM2VmbGFncykuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHVuaW5pdGlhbGl6ZWQgc3RhY2sgb3IgaGVhcCBhbGxvY2F0aW9ucywgdW5pbml0aWFsaXplZCBzdHJ1Y3R1cmUgZmllbGRzLCBpbmZvLWxlYWtzIHRvIHVzZXJzcGFjZSwgb3IgcmVhZHMgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkuIFRoZSByaXNrcyBhc3NvY2lhdGVkIHdpdGggdGhlIG9yaWdpbmFsIHJhY2UgY29uZGl0aW9uIChvdXQtb2YtYm91bmRzIGJ1ZmZlciB3cml0ZXMgLyBkYXRhIGNvcnJ1cHRpb24pIGFyZSBjb3ZlcmVkIGJ5IEtBU0FOIGFuZCBLQ1NBTiwgc28gYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgcmVhY2hhYmxlIG5ldHdvcmtpbmcgY29kZSBpbiB0aGUgSVBWUyBjb25uZWN0aW9uIHN5bmNocm9uaXphdGlvbiBzdWJzeXN0ZW0gKG5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMpLiBJdCB1c2VzIFJFQURfT05DRSBhbmQgY2FjaGVzIGNwLVxcdTAwM2VmbGFncyBsb2NhbGx5IHRvIGF2b2lkIGRhdGEgcmFjZXMgYW5kIGluY29uc2lzdGVuY2llcyBiZXR3ZWVuIHBhY2tldCBsZW5ndGggY2FsY3VsYXRpb24gYW5kIHNlcXVlbmNlIG9wdGlvbiBzZXJpYWxpemF0aW9uLiBGdXp6aW5nIGlzIHdhcnJhbnRlZCB0byB0ZXN0IHN5bmNocm9uaXphdGlvbiBtZXNzYWdlIGNvbnN0cnVjdGlvbiBhbmQgc3RhdGUgaGFuZGxpbmcgdW5kZXIgY29uY3VycmVuY3kuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDE3OjQzOjAwLjUyNDIwODMxOVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjA5Njc4OTkyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgMzU1ZWQxYmZiN2Q1ZjYyNDNlZWFlNGI3M2ExODc5NGU2MTBmOGNlNlxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgV2VkIFNlcCA5IDE3OjQyOjU5IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jXFxuaW5kZXggNTM4M2FlYWZiMGFlZC4uZGZhODQ4N2VjMGMyMCAxMDA2NDRcXG4tLS0gYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jXFxuKysrIGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuY1xcbkBAIC01NDMsMTMgKzU0MywxNSBAQCBzdGF0aWMgdm9pZCBpcF92c19zeW5jX2Nvbm5fdjAoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIHN0cnVjdCBpcF92c19jb25uICpjcCxcXG4gXFx0c3RydWN0IGlwX3ZzX3N5bmNfY29ubl92MCAqcztcXG4gXFx0c3RydWN0IGlwX3ZzX3N5bmNfYnVmZiAqYnVmZjtcXG4gXFx0c3RydWN0IGlwdnNfbWFzdGVyX3N5bmNfc3RhdGUgKm1zO1xcbi1cXHRpbnQgaWQ7XFxuK1xcdHUzMiBmbGFncywgc2VxX21hc2s7XFxuIFxcdHVuc2lnbmVkIGludCBsZW47XFxuK1xcdGludCBpZDtcXG4gXFxuIFxcdGlmICh1bmxpa2VseShjcC1cXHUwMDNlYWYgIT0gQUZfSU5FVCkpXFxuIFxcdFxcdHJldHVybjtcXG4rXFx0ZmxhZ3MgPSBSRUFEX09OQ0UoY3AtXFx1MDAzZWZsYWdzKTtcXG4gXFx0LyogRG8gbm90IHN5bmMgT05FIFBBQ0tFVCAqL1xcbi1cXHRpZiAoY3AtXFx1MDAzZWZsYWdzIFxcdTAwMjYgSVBfVlNfQ09OTl9GX09ORV9QQUNLRVQpXFxuK1xcdGlmIChmbGFncyBcXHUwMDI2IElQX1ZTX0NPTk5fRl9PTkVfUEFDS0VUKVxcbiBcXHRcXHRyZXR1cm47XFxuIFxcbiBcXHRpZiAoIWlwX3ZzX3N5bmNfY29ubl9uZWVkZWQoaXB2cywgY3AsIHBrdHMpKVxcbkBAIC01NjQsOCArNTY2LDggQEAgc3RhdGljIHZvaWQgaXBfdnNfc3luY19jb25uX3YwKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsXFxuIFxcdGlkID0gc2VsZWN0X21hc3Rlcl90aHJlYWRfaWQoaXB2cywgY3ApO1xcbiBcXHRtcyA9IFxcdTAwMjZpcHZzLVxcdTAwM2Vtc1tpZF07XFxuIFxcdGJ1ZmYgPSBtcy1cXHUwMDNlc3luY19idWZmO1xcbi1cXHRsZW4gPSAoY3AtXFx1MDAzZWZsYWdzIFxcdTAwMjYgSVBfVlNfQ09OTl9GX1NFUV9NQVNLKSA/IEZVTExfQ09OTl9TSVpFIDpcXG4tXFx0XFx0U0lNUExFX0NPTk5fU0laRTtcXG4rXFx0c2VxX21hc2sgPSBmbGFncyBcXHUwMDI2IElQX1ZTX0NPTk5fRl9TRVFfTUFTSztcXG4rXFx0bGVuID0gc2VxX21hc2sgPyBGVUxMX0NPTk5fU0laRSA6IFNJTVBMRV9DT05OX1NJWkU7XFxuIFxcdGlmIChidWZmKSB7XFxuIFxcdFxcdG0gPSAoc3RydWN0IGlwX3ZzX3N5bmNfbWVzZ192MCAqKSBidWZmLVxcdTAwM2VtZXNnO1xcbiBcXHRcXHQvKiBTZW5kIGJ1ZmZlciBpZiBpdCBpcyBmb3IgdjEgKi9cXG5AQCAtNTk3LDkgKzU5OSw5IEBAIHN0YXRpYyB2b2lkIGlwX3ZzX3N5bmNfY29ubl92MChzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLFxcbiBcXHRzLVxcdTAwM2VjYWRkciA9IGNwLVxcdTAwM2VjYWRkci5pcDtcXG4gXFx0cy1cXHUwMDNldmFkZHIgPSBjcC1cXHUwMDNldmFkZHIuaXA7XFxuIFxcdHMtXFx1MDAzZWRhZGRyID0gY3AtXFx1MDAzZWRhZGRyLmlwO1xcbi1cXHRzLVxcdTAwM2VmbGFncyA9IGh0b25zKGNwLVxcdTAwM2VmbGFncyBcXHUwMDI2IH5JUF9WU19DT05OX0ZfSEFTSEVEKTtcXG4rXFx0cy1cXHUwMDNlZmxhZ3MgPSBodG9ucyhmbGFncyBcXHUwMDI2IH5JUF9WU19DT05OX0ZfSEFTSEVEKTtcXG4gXFx0cy1cXHUwMDNlc3RhdGUgPSBodG9ucyhjcC1cXHUwMDNlc3RhdGUpO1xcbi1cXHRpZiAoY3AtXFx1MDAzZWZsYWdzIFxcdTAwMjYgSVBfVlNfQ09OTl9GX1NFUV9NQVNLKSB7XFxuK1xcdGlmIChzZXFfbWFzaykge1xcbiBcXHRcXHRzdHJ1Y3QgaXBfdnNfc3luY19jb25uX29wdGlvbnMgKm9wdCA9XFxuIFxcdFxcdFxcdChzdHJ1Y3QgaXBfdnNfc3luY19jb25uX29wdGlvbnMgKilcXHUwMDI2c1sxXTtcXG4gXFx0XFx0bWVtY3B5KG9wdCwgXFx1MDAyNmNwLVxcdTAwM2VzeW5jX2Nvbm5fb3B0LCBzaXplb2YoKm9wdCkpO1xcbkBAIC02MzUsNiArNjM3LDcgQEAgdm9pZCBpcF92c19zeW5jX2Nvbm4oc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIHN0cnVjdCBpcF92c19jb25uICpjcCwgaW50IHBrdHMpXFxuIFxcdGludCBpZDtcXG4gXFx0X191OCAqcDtcXG4gXFx0dW5zaWduZWQgaW50IGxlbiwgcGVfbmFtZV9sZW4sIHBhZDtcXG4rXFx0dTMyIGZsYWdzLCBzZXFfbWFzaztcXG4gXFxuIFxcdC8qIEhhbmRsZSBvbGQgdmVyc2lvbiBvZiB0aGUgcHJvdG9jb2wgKi9cXG4gXFx0aWYgKHN5c2N0bF9zeW5jX3ZlcihpcHZzKSA9PSAwKSB7XFxuQEAgLTY0Nyw2ICs2NTAsNyBAQCB2b2lkIGlwX3ZzX3N5bmNfY29ubihzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLCBpbnQgcGt0cylcXG4gc2xvb3A6XFxuIFxcdGlmICghaXBfdnNfc3luY19jb25uX25lZWRlZChpcHZzLCBjcCwgcGt0cykpXFxuIFxcdFxcdGdvdG8gY29udHJvbDtcXG4rXFx0ZmxhZ3MgPSBSRUFEX09OQ0UoY3AtXFx1MDAzZWZsYWdzKTtcXG4gXFxuIFxcdC8qIFNhbml0eSBjaGVja3MgKi9cXG4gXFx0cGVfbmFtZV9sZW4gPSAwO1xcbkBAIC02NzQsNyArNjc4LDggQEAgdm9pZCBpcF92c19zeW5jX2Nvbm4oc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIHN0cnVjdCBpcF92c19jb25uICpjcCwgaW50IHBrdHMpXFxuICNlbmRpZlxcbiBcXHRcXHRsZW4gPSBzaXplb2Yoc3RydWN0IGlwX3ZzX3N5bmNfdjQpO1xcbiBcXG4tXFx0aWYgKGNwLVxcdTAwM2VmbGFncyBcXHUwMDI2IElQX1ZTX0NPTk5fRl9TRVFfTUFTSylcXG4rXFx0c2VxX21hc2sgPSBmbGFncyBcXHUwMDI2IElQX1ZTX0NPTk5fRl9TRVFfTUFTSztcXG4rXFx0aWYgKHNlcV9tYXNrKVxcbiBcXHRcXHRsZW4gKz0gc2l6ZW9mKHN0cnVjdCBpcF92c19zeW5jX2Nvbm5fb3B0aW9ucykgKyAyO1xcbiBcXG4gXFx0aWYgKGNwLVxcdTAwM2VwZV9kYXRhX2xlbilcXG5AQCAtNzIwLDcgKzcyNSw3IEBAIHZvaWQgaXBfdnNfc3luY19jb25uKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsIGludCBwa3RzKVxcbiBcXHQvKiBTZXQgbWVzc2FnZSB0eXBlICBcXHUwMDI2IGNvcHkgbWVtYmVycyAqL1xcbiBcXHRzLVxcdTAwM2V2NC50eXBlID0gKGNwLVxcdTAwM2VhZiA9PSBBRl9JTkVUNiA/IFNUWVBFX0ZfSU5FVDYgOiAwKTtcXG4gXFx0cy1cXHUwMDNldjQudmVyX3NpemUgPSBodG9ucyhsZW4gXFx1MDAyNiBTVkVSX01BU0spO1xcdC8qIFZlcnNpb24gMCAqL1xcbi1cXHRzLVxcdTAwM2V2NC5mbGFncyA9IGh0b25sKGNwLVxcdTAwM2VmbGFncyBcXHUwMDI2IH5JUF9WU19DT05OX0ZfSEFTSEVEKTtcXG4rXFx0cy1cXHUwMDNldjQuZmxhZ3MgPSBodG9ubChmbGFncyBcXHUwMDI2IH5JUF9WU19DT05OX0ZfSEFTSEVEKTtcXG4gXFx0cy1cXHUwMDNldjQuc3RhdGUgPSBodG9ucyhjcC1cXHUwMDNlc3RhdGUpO1xcbiBcXHRzLVxcdTAwM2V2NC5wcm90b2NvbCA9IGNwLVxcdTAwM2Vwcm90b2NvbDtcXG4gXFx0cy1cXHUwMDNldjQuY3BvcnQgPSBjcC1cXHUwMDNlY3BvcnQ7XFxuQEAgLTc0NCw3ICs3NDksNyBAQCB2b2lkIGlwX3ZzX3N5bmNfY29ubihzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLCBpbnQgcGt0cylcXG4gXFx0XFx0cy1cXHUwMDNldjQudmFkZHIgPSBjcC1cXHUwMDNldmFkZHIuaXA7XFxuIFxcdFxcdHMtXFx1MDAzZXY0LmRhZGRyID0gY3AtXFx1MDAzZWRhZGRyLmlwO1xcbiBcXHR9XFxuLVxcdGlmIChjcC1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBJUF9WU19DT05OX0ZfU0VRX01BU0spIHtcXG4rXFx0aWYgKHNlcV9tYXNrKSB7XFxuIFxcdFxcdCoocCsrKSA9IElQVlNfT1BUX1NFUV9EQVRBO1xcbiBcXHRcXHQqKHArKykgPSBzaXplb2Yoc3RydWN0IGlwX3ZzX3N5bmNfY29ubl9vcHRpb25zKTtcXG4gXFx0XFx0aHRvbl9zZXEoXFx1MDAyNmNwLVxcdTAwM2Vpbl9zZXEsIChzdHJ1Y3QgaXBfdnNfc2VxICopcCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDE3OjQzOjAxLjEzNDkwMzc2MVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6NDAxOTg4MTk5ODYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSVBfVlNcIixcbiAgICBcIk5FVEZJTFRFUlwiLFxuICAgIFwiSU5FVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImlwX3ZzX3N5bmNfY29ublwiLFxuICAgIFwiaXBfdnNfc3luY19jb25uX3YwXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgcmVhY2hhYmxlIG5ldHdvcmtpbmcgY29kZSBpbiB0aGUgSVBWUyBjb25uZWN0aW9uIHN5bmNocm9uaXphdGlvbiBzdWJzeXN0ZW0gKG5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMpLiBJdCB1c2VzIFJFQURfT05DRSBhbmQgY2FjaGVzIGNwLVxcdTAwM2VmbGFncyBsb2NhbGx5IHRvIGF2b2lkIGRhdGEgcmFjZXMgYW5kIGluY29uc2lzdGVuY2llcyBiZXR3ZWVuIHBhY2tldCBsZW5ndGggY2FsY3VsYXRpb24gYW5kIHNlcXVlbmNlIG9wdGlvbiBzZXJpYWxpemF0aW9uLiBGdXp6aW5nIGlzIHdhcnJhbnRlZCB0byB0ZXN0IHN5bmNocm9uaXphdGlvbiBtZXNzYWdlIGNvbnN0cnVjdGlvbiBhbmQgc3RhdGUgaGFuZGxpbmcgdW5kZXIgY29uY3VycmVuY3kuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3NcbnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4xLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncyxcbmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuXG5cbi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6XG4gIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWRcbiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS5cbiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLFxuICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuXG5cbi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgXCJOTyBGVU5DVElPTkFMIENIQU5HRVwiIChORkNJKSBPUiBcIlJFRkFDVE9SSU5HXCIgQ0xBSU1TOlxuICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzIFwiY2xlYW51cHNcIiwgXCJyZWZhY3RvcmluZ3NcIiwgb3Igc3RhdGVcbiAgXCJObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZFwiLiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS5cbiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50XG4gIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLlxuICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLlxuXG4tIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOlxuICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosXG4gIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLlxuICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyXG4gIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczpcblxuLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOlxuICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy5cbiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLylcbiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuXG4gICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHNcbiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLlxuICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy5cbi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOlxuICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6XG4gICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nXG4gICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuXG4gICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6XG4tIENvcmUgU3Vic3lzdGVtczpcbiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksXG4gICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLlxuLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6XG4gICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLlxuLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6XG4gICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLlxuLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOlxuICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOlxuXG4tIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzpcbiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXNcbiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHRcbiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuXG4gIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyBcImZvY3VzZWRcIixcbiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLlxuXG4tIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzpcbiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzXG4gIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LlxuXG4tIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKTpcbiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFja1xuICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy5cbiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyXG4gIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3Ncbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5JZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOlxuLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuLSBDaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLlxuLSBTdHJpcCBhbnkgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgMzU1ZWQxYmZiN2Q1ZjYyNDNlZWFlNGI3M2ExODc5NGU2MTBmOGNlNlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgU2VwIDkgMTc6NDI6NTkgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jIGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuY1xuaW5kZXggNTM4M2FlYWZiMGFlZC4uZGZhODQ4N2VjMGMyMCAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmNcbisrKyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmNcbkBAIC01NDMsMTMgKzU0MywxNSBAQCBzdGF0aWMgdm9pZCBpcF92c19zeW5jX2Nvbm5fdjAoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIHN0cnVjdCBpcF92c19jb25uICpjcCxcbiBcdHN0cnVjdCBpcF92c19zeW5jX2Nvbm5fdjAgKnM7XG4gXHRzdHJ1Y3QgaXBfdnNfc3luY19idWZmICpidWZmO1xuIFx0c3RydWN0IGlwdnNfbWFzdGVyX3N5bmNfc3RhdGUgKm1zO1xuLVx0aW50IGlkO1xuK1x0dTMyIGZsYWdzLCBzZXFfbWFzaztcbiBcdHVuc2lnbmVkIGludCBsZW47XG4rXHRpbnQgaWQ7XG4gXG4gXHRpZiAodW5saWtlbHkoY3AtXHUwMDNlYWYgIT0gQUZfSU5FVCkpXG4gXHRcdHJldHVybjtcbitcdGZsYWdzID0gUkVBRF9PTkNFKGNwLVx1MDAzZWZsYWdzKTtcbiBcdC8qIERvIG5vdCBzeW5jIE9ORSBQQUNLRVQgKi9cbi1cdGlmIChjcC1cdTAwM2VmbGFncyBcdTAwMjYgSVBfVlNfQ09OTl9GX09ORV9QQUNLRVQpXG4rXHRpZiAoZmxhZ3MgXHUwMDI2IElQX1ZTX0NPTk5fRl9PTkVfUEFDS0VUKVxuIFx0XHRyZXR1cm47XG4gXG4gXHRpZiAoIWlwX3ZzX3N5bmNfY29ubl9uZWVkZWQoaXB2cywgY3AsIHBrdHMpKVxuQEAgLTU2NCw4ICs1NjYsOCBAQCBzdGF0aWMgdm9pZCBpcF92c19zeW5jX2Nvbm5fdjAoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIHN0cnVjdCBpcF92c19jb25uICpjcCxcbiBcdGlkID0gc2VsZWN0X21hc3Rlcl90aHJlYWRfaWQoaXB2cywgY3ApO1xuIFx0bXMgPSBcdTAwMjZpcHZzLVx1MDAzZW1zW2lkXTtcbiBcdGJ1ZmYgPSBtcy1cdTAwM2VzeW5jX2J1ZmY7XG4tXHRsZW4gPSAoY3AtXHUwMDNlZmxhZ3MgXHUwMDI2IElQX1ZTX0NPTk5fRl9TRVFfTUFTSykgPyBGVUxMX0NPTk5fU0laRSA6XG4tXHRcdFNJTVBMRV9DT05OX1NJWkU7XG4rXHRzZXFfbWFzayA9IGZsYWdzIFx1MDAyNiBJUF9WU19DT05OX0ZfU0VRX01BU0s7XG4rXHRsZW4gPSBzZXFfbWFzayA/IEZVTExfQ09OTl9TSVpFIDogU0lNUExFX0NPTk5fU0laRTtcbiBcdGlmIChidWZmKSB7XG4gXHRcdG0gPSAoc3RydWN0IGlwX3ZzX3N5bmNfbWVzZ192MCAqKSBidWZmLVx1MDAzZW1lc2c7XG4gXHRcdC8qIFNlbmQgYnVmZmVyIGlmIGl0IGlzIGZvciB2MSAqL1xuQEAgLTU5Nyw5ICs1OTksOSBAQCBzdGF0aWMgdm9pZCBpcF92c19zeW5jX2Nvbm5fdjAoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIHN0cnVjdCBpcF92c19jb25uICpjcCxcbiBcdHMtXHUwMDNlY2FkZHIgPSBjcC1cdTAwM2VjYWRkci5pcDtcbiBcdHMtXHUwMDNldmFkZHIgPSBjcC1cdTAwM2V2YWRkci5pcDtcbiBcdHMtXHUwMDNlZGFkZHIgPSBjcC1cdTAwM2VkYWRkci5pcDtcbi1cdHMtXHUwMDNlZmxhZ3MgPSBodG9ucyhjcC1cdTAwM2VmbGFncyBcdTAwMjYgfklQX1ZTX0NPTk5fRl9IQVNIRUQpO1xuK1x0cy1cdTAwM2VmbGFncyA9IGh0b25zKGZsYWdzIFx1MDAyNiB+SVBfVlNfQ09OTl9GX0hBU0hFRCk7XG4gXHRzLVx1MDAzZXN0YXRlID0gaHRvbnMoY3AtXHUwMDNlc3RhdGUpO1xuLVx0aWYgKGNwLVx1MDAzZWZsYWdzIFx1MDAyNiBJUF9WU19DT05OX0ZfU0VRX01BU0spIHtcbitcdGlmIChzZXFfbWFzaykge1xuIFx0XHRzdHJ1Y3QgaXBfdnNfc3luY19jb25uX29wdGlvbnMgKm9wdCA9XG4gXHRcdFx0KHN0cnVjdCBpcF92c19zeW5jX2Nvbm5fb3B0aW9ucyAqKVx1MDAyNnNbMV07XG4gXHRcdG1lbWNweShvcHQsIFx1MDAyNmNwLVx1MDAzZXN5bmNfY29ubl9vcHQsIHNpemVvZigqb3B0KSk7XG5AQCAtNjM1LDYgKzYzNyw3IEBAIHZvaWQgaXBfdnNfc3luY19jb25uKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsIGludCBwa3RzKVxuIFx0aW50IGlkO1xuIFx0X191OCAqcDtcbiBcdHVuc2lnbmVkIGludCBsZW4sIHBlX25hbWVfbGVuLCBwYWQ7XG4rXHR1MzIgZmxhZ3MsIHNlcV9tYXNrO1xuIFxuIFx0LyogSGFuZGxlIG9sZCB2ZXJzaW9uIG9mIHRoZSBwcm90b2NvbCAqL1xuIFx0aWYgKHN5c2N0bF9zeW5jX3ZlcihpcHZzKSA9PSAwKSB7XG5AQCAtNjQ3LDYgKzY1MCw3IEBAIHZvaWQgaXBfdnNfc3luY19jb25uKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsIGludCBwa3RzKVxuIHNsb29wOlxuIFx0aWYgKCFpcF92c19zeW5jX2Nvbm5fbmVlZGVkKGlwdnMsIGNwLCBwa3RzKSlcbiBcdFx0Z290byBjb250cm9sO1xuK1x0ZmxhZ3MgPSBSRUFEX09OQ0UoY3AtXHUwMDNlZmxhZ3MpO1xuIFxuIFx0LyogU2FuaXR5IGNoZWNrcyAqL1xuIFx0cGVfbmFtZV9sZW4gPSAwO1xuQEAgLTY3NCw3ICs2NzgsOCBAQCB2b2lkIGlwX3ZzX3N5bmNfY29ubihzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLCBpbnQgcGt0cylcbiAjZW5kaWZcbiBcdFx0bGVuID0gc2l6ZW9mKHN0cnVjdCBpcF92c19zeW5jX3Y0KTtcbiBcbi1cdGlmIChjcC1cdTAwM2VmbGFncyBcdTAwMjYgSVBfVlNfQ09OTl9GX1NFUV9NQVNLKVxuK1x0c2VxX21hc2sgPSBmbGFncyBcdTAwMjYgSVBfVlNfQ09OTl9GX1NFUV9NQVNLO1xuK1x0aWYgKHNlcV9tYXNrKVxuIFx0XHRsZW4gKz0gc2l6ZW9mKHN0cnVjdCBpcF92c19zeW5jX2Nvbm5fb3B0aW9ucykgKyAyO1xuIFxuIFx0aWYgKGNwLVx1MDAzZXBlX2RhdGFfbGVuKVxuQEAgLTcyMCw3ICs3MjUsNyBAQCB2b2lkIGlwX3ZzX3N5bmNfY29ubihzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLCBpbnQgcGt0cylcbiBcdC8qIFNldCBtZXNzYWdlIHR5cGUgIFx1MDAyNiBjb3B5IG1lbWJlcnMgKi9cbiBcdHMtXHUwMDNldjQudHlwZSA9IChjcC1cdTAwM2VhZiA9PSBBRl9JTkVUNiA/IFNUWVBFX0ZfSU5FVDYgOiAwKTtcbiBcdHMtXHUwMDNldjQudmVyX3NpemUgPSBodG9ucyhsZW4gXHUwMDI2IFNWRVJfTUFTSyk7XHQvKiBWZXJzaW9uIDAgKi9cbi1cdHMtXHUwMDNldjQuZmxhZ3MgPSBodG9ubChjcC1cdTAwM2VmbGFncyBcdTAwMjYgfklQX1ZTX0NPTk5fRl9IQVNIRUQpO1xuK1x0cy1cdTAwM2V2NC5mbGFncyA9IGh0b25sKGZsYWdzIFx1MDAyNiB+SVBfVlNfQ09OTl9GX0hBU0hFRCk7XG4gXHRzLVx1MDAzZXY0LnN0YXRlID0gaHRvbnMoY3AtXHUwMDNlc3RhdGUpO1xuIFx0cy1cdTAwM2V2NC5wcm90b2NvbCA9IGNwLVx1MDAzZXByb3RvY29sO1xuIFx0cy1cdTAwM2V2NC5jcG9ydCA9IGNwLVx1MDAzZWNwb3J0O1xuQEAgLTc0NCw3ICs3NDksNyBAQCB2b2lkIGlwX3ZzX3N5bmNfY29ubihzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLCBpbnQgcGt0cylcbiBcdFx0cy1cdTAwM2V2NC52YWRkciA9IGNwLVx1MDAzZXZhZGRyLmlwO1xuIFx0XHRzLVx1MDAzZXY0LmRhZGRyID0gY3AtXHUwMDNlZGFkZHIuaXA7XG4gXHR9XG4tXHRpZiAoY3AtXHUwMDNlZmxhZ3MgXHUwMDI2IElQX1ZTX0NPTk5fRl9TRVFfTUFTSykge1xuK1x0aWYgKHNlcV9tYXNrKSB7XG4gXHRcdCoocCsrKSA9IElQVlNfT1BUX1NFUV9EQVRBO1xuIFx0XHQqKHArKykgPSBzaXplb2Yoc3RydWN0IGlwX3ZzX3N5bmNfY29ubl9vcHRpb25zKTtcbiBcdFx0aHRvbl9zZXEoXHUwMDI2Y3AtXHUwMDNlaW5fc2VxLCAoc3RydWN0IGlwX3ZzX3NlcSAqKXApO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTc6NDM6MDEuMTM0OTA2NTUxWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTE0OTI0MjcwNjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBQcm9wb3NlZCBQYXRjaCBmb3IgRnV6emluZyBQb3RlbnRpYWwqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBwYXRjaCBhbmQgZmlndXJlIG91dCB0aGUgZnV6emluZyBzdHJhdGVneS4gV2UgbmVlZCB0byBkZXRlcm1pbmUgaWYgdGhpcyBjaGFuZ2UgdG8gYG5ldC9uZXRmaWx0ZXIvaXB2c2Agd2FycmFudHMgYSBmdXp6aW5nIGNhbXBhaWduIGFuZCB3aGF0IGNvbmZpZ3VyYXRpb25zIGFuZCBmb2N1cyBzeW1ib2xzIHdvdWxkIGJlIGJlc3QuXG5cblRoZSBmaXJzdCBzdGVwIGlzIGFsd2F5cyB0byBleGFtaW5lIHRoZSBzcGVjaWZpYyBmaWxlcyBhbmQgZnVuY3Rpb25zIHRvdWNoZWQuIEl0IGxvb2tzIGxpa2UgdGhlIHBhdGNoIG1vZGlmaWVzIGBuZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jYC4gU3BlY2lmaWNhbGx5LCB0aGUgY2hhbmdlcyBhcmUgd2l0aGluIHRoZSBgaXBfdnNfc3luY19jb25uX3YwYCBhbmQgYGlwX3ZzX3N5bmNfY29ubmAgZnVuY3Rpb25zLiBUaG9zZSBmdW5jdGlvbnMgYXJlIGludGVyZXN0aW5nLCBhcyB0aGV5IGNsZWFybHkgaGFuZGxlIGNvbm5lY3Rpb24gc3luY2hyb25pemF0aW9uLCBhIHRhc2sga25vd24gdG8gYmUgY29tcGxleCBhbmQgb2Z0ZW4gcHJvbmUgdG8gc3VidGxlIHJhY2UgY29uZGl0aW9ucyBvciB1bmV4cGVjdGVkIGlucHV0IGhhbmRsaW5nLlxuXG5Ob3csIG15IGluc3RpbmN0IGlzIHRvIGxvb2sgYXQgdGhlIHN1cnJvdW5kaW5nIGNvZGUuIEkgbmVlZCB0byBnZXQgYSBicm9hZGVyIHVuZGVyc3RhbmRpbmcgb2YgdGhlIGNvbnRleHQuIEknbGwgbmVlZCB0byBpbnNwZWN0IGBuZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jYCBpdHNlbGYuIFRoZW4sIEkgbmVlZCB0byBjaGVjayB0aGUgS2NvbmZpZyBmaWxlcyByZWxhdGVkIHRvIElQVlMuIEkgbmVlZCB0byBzZWUgd2hpY2ggY29uZmlndXJhdGlvbnMgYXJlIGVuYWJsZWQsIHdoaWNoIGZ1bmN0aW9ucyBjYWxsIHRoZXNlIG1vZGlmaWVkIG9uZXMsIGFuZCB0aGUgb3ZlcmFsbCBhcmNoaXRlY3R1cmUuIFRoaXMgZ2l2ZXMgbWUgaW5zaWdodCBpbnRvIHRoZSBlbnZpcm9ubWVudCwgcG90ZW50aWFsIGNhbGwgY2hhaW5zLCBhbmQgcmVsZXZhbnQgZGF0YSBzdHJ1Y3R1cmVzLiBUaGlzIGNvbnRleHQgaXMgY3JpdGljYWwgdG8gZGV2aXNpbmcgZWZmZWN0aXZlIGZ1enppbmcgc3RyYXRlZ2llcy4gSSB3aWxsIG5lZWQgdG8gaWRlbnRpZnkgdGhlIHJlbGV2YW50IGZvY3VzIHN5bWJvbHMgYW5kIGVuYWJsZSBjb25maWd1cmF0aW9ucyBmb3IgbWF4aW11bSBjb3ZlcmFnZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NDI1NywiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExNywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDE3OjQzOjEyLjYyNzMzNjM4MloiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjc5MTIyNDgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiSVBfVlNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9pcHZzL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJcXG5GdWxsIG91dHB1dCBpcyB0b28gbG9uZywgc2hvd2luZyA1MDAgb3V0IG9mIDQzOTMgbGluZXMuXFxuVXNlIG1vcmUgcHJlY2lzZSBleHByZXNzaW9uIGlmIHBvc3NpYmxlLlxcblxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTQtI1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnOjU6bWVudWNvbmZpZyBJUF9WU1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTYtXFx0dHJpc3RhdGUgXFxcIklQIHZpcnR1YWwgc2VydmVyIHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy0yNi1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZzoyNzppZiBJUF9WU1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTI4LVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnOjI5OmNvbmZpZ1xcdElQX1ZTX0lQVjZcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy0zMC1cXHRib29sIFxcXCJJUHY2IHN1cHBvcnQgZm9yIElQVlNcXFwiXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc6MzE6XFx0ZGVwZW5kcyBvbiBJUFY2ID0geSB8fCBJUF9WUyA9IElQVjZcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy0zMi1cXHRzZWxlY3QgTkZfREVGUkFHX0lQVjZcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTM3LVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnOjM4OmNvbmZpZ1xcdElQX1ZTX0RFQlVHXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctMzktXFx0Ym9vbCBcXFwiSVAgdmlydHVhbCBzZXJ2ZXIgZGVidWdnaW5nXFxcIlxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctNDQtXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc6NDU6Y29uZmlnXFx0SVBfVlNfVEFCX0JJVFNcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy00Ni1cXHRpbnQgXFxcIklQVlMgY29ubmVjdGlvbiB0YWJsZSBzaXplICh0aGUgTnRoIHBvd2VyIG9mIDIpXFxcIlxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc9Nzc9Y29tbWVudCBcXFwiSVBWUyB0cmFuc3BvcnQgcHJvdG9jb2wgbG9hZCBiYWxhbmNpbmcgc3VwcG9ydFxcXCJcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy03OC1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZzo3OTpjb25maWdcXHRJUF9WU19QUk9UT19UQ1BcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy04MC1cXHRib29sIFxcXCJUQ1AgbG9hZCBiYWxhbmNpbmcgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTg0LVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnOjg1OmNvbmZpZ1xcdElQX1ZTX1BST1RPX1VEUFxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTg2LVxcdGJvb2wgXFxcIlVEUCBsb2FkIGJhbGFuY2luZyBzdXBwb3J0XFxcIlxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctOTAtXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc6OTE6Y29uZmlnXFx0SVBfVlNfUFJPVE9fQUhfRVNQXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc6OTI6XFx0ZGVmX2Jvb2wgSVBfVlNfUFJPVE9fRVNQIHx8IElQX1ZTX1BST1RPX0FIXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctOTMtXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc6OTQ6Y29uZmlnXFx0SVBfVlNfUFJPVE9fRVNQXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctOTUtXFx0Ym9vbCBcXFwiRVNQIGxvYWQgYmFsYW5jaW5nIHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy05OS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZzoxMDA6Y29uZmlnXFx0SVBfVlNfUFJPVE9fQUhcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy0xMDEtXFx0Ym9vbCBcXFwiQUggbG9hZCBiYWxhbmNpbmcgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTEwNS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZzoxMDY6Y29uZmlnICBJUF9WU19QUk9UT19TQ1RQXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctMTA3LVxcdGJvb2wgXFxcIlNDVFAgbG9hZCBiYWxhbmNpbmcgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnPTExMz1jb21tZW50IFxcXCJJUFZTIHNjaGVkdWxlclxcXCJcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy0xMTQtXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc6MTE1OmNvbmZpZ1xcdElQX1ZTX1JSXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctMTE2LVxcdHRyaXN0YXRlIFxcXCJyb3VuZC1yb2JpbiBzY2hlZHVsaW5nXFxcIlxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctMTIzLSBcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZzoxMjQ6Y29uZmlnXFx0SVBfVlNfV1JSXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctMTI1LVxcdHRyaXN0YXRlIFxcXCJ3ZWlnaHRlZCByb3VuZC1yb2JpbiBzY2hlZHVsaW5nXFxcIlxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctMTM2LVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnOjEzNzpjb25maWdcXHRJUF9WU19MQ1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTEzOC1cXHR0cmlzdGF0ZSBcXFwibGVhc3QtY29ubmVjdGlvbiBzY2hlZHVsaW5nXFxcIlxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctMTQ2LVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnOjE0Nzpjb25maWdcXHRJUF9WU19XTENcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy0xNDgtXFx0dHJpc3RhdGUgXFxcIndlaWdodGVkIGxlYXN0LWNvbm5lY3Rpb24gc2NoZWR1bGluZ1xcXCJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTE1Ni1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZzoxNTc6Y29uZmlnICBJUF9WU19GT1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTE1OC1cXHRcXHR0cmlzdGF0ZSBcXFwid2VpZ2h0ZWQgZmFpbG92ZXIgc2NoZWR1bGluZ1xcXCJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTE2Ni1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZzoxNjc6Y29uZmlnICBJUF9WU19PVkZcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy0xNjgtXFx0dHJpc3RhdGUgXFxcIndlaWdodGVkIG92ZXJmbG93IHNjaGVkdWxpbmdcXFwiXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy0xNzctXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc6MTc4OmNvbmZpZ1xcdElQX1ZTX0xCTENcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy0xNzktXFx0dHJpc3RhdGUgXFxcImxvY2FsaXR5LWJhc2VkIGxlYXN0LWNvbm5lY3Rpb24gc2NoZWR1bGluZ1xcXCJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTE5MS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZzoxOTI6Y29uZmlnICBJUF9WU19MQkxDUlxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTE5My1cXHR0cmlzdGF0ZSBcXFwibG9jYWxpdHktYmFzZWQgbGVhc3QtY29ubmVjdGlvbiB3aXRoIHJlcGxpY2F0aW9uIHNjaGVkdWxpbmdcXFwiXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy0yMDktXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc6MjEwOmNvbmZpZ1xcdElQX1ZTX0RIXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctMjExLVxcdHRyaXN0YXRlIFxcXCJkZXN0aW5hdGlvbiBoYXNoaW5nIHNjaGVkdWxpbmdcXFwiXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy0yMTktXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc6MjIwOmNvbmZpZ1xcdElQX1ZTX1NIXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctMjIxLVxcdHRyaXN0YXRlIFxcXCJzb3VyY2UgaGFzaGluZyBzY2hlZHVsaW5nXFxcIlxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctMjI5LVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnOjIzMDpjb25maWdcXHRJUF9WU19NSFxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTIzMS1cXHR0cmlzdGF0ZSBcXFwibWFnbGV2IGhhc2hpbmcgc2NoZWR1bGluZ1xcXCJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTI0OC1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZzoyNDk6Y29uZmlnXFx0SVBfVlNfU0VEXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctMjUwLVxcdHRyaXN0YXRlIFxcXCJzaG9ydGVzdCBleHBlY3RlZCBkZWxheSBzY2hlZHVsaW5nXFxcIlxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctMjYxLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnOjI2Mjpjb25maWdcXHRJUF9WU19OUVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTI2My1cXHR0cmlzdGF0ZSBcXFwibmV2ZXIgcXVldWUgc2NoZWR1bGluZ1xcXCJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTI3NC1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZzoyNzU6Y29uZmlnXFx0SVBfVlNfVFdPU1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTI3Ni1cXHR0cmlzdGF0ZSBcXFwid2VpZ2h0ZWQgcmFuZG9tIHR3b3MgY2hvaWNlIGxlYXN0LWNvbm5lY3Rpb24gc2NoZWR1bGluZ1xcXCJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnPTI4Nj1jb21tZW50ICdJUFZTIFNIIHNjaGVkdWxlcidcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy0yODctXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc6Mjg4OmNvbmZpZyBJUF9WU19TSF9UQUJfQklUU1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTI4OS1cXHRpbnQgXFxcIklQVlMgc291cmNlIGhhc2hpbmcgdGFibGUgc2l6ZSAodGhlIE50aCBwb3dlciBvZiAyKVxcXCJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnPTMwMT1jb21tZW50ICdJUFZTIE1IIHNjaGVkdWxlcidcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy0zMDItXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc6MzAzOmNvbmZpZyBJUF9WU19NSF9UQUJfSU5ERVhcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy0zMDQtXFx0aW50IFxcXCJJUFZTIG1hZ2xldiBoYXNoaW5nIHRhYmxlIGluZGV4IG9mIHNpemUgKHRoZSBwcmltZSBudW1iZXJzKVxcXCJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnPTMxOT1jb21tZW50ICdJUFZTIGFwcGxpY2F0aW9uIGhlbHBlcidcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy0zMjAtXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc6MzIxOmNvbmZpZ1xcdElQX1ZTX0ZUUFxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTMyMi1cXHR0cmlzdGF0ZSBcXFwiRlRQIHByb3RvY29sIGhlbHBlclxcXCJcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZzozMjM6XFx0ZGVwZW5kcyBvbiBJUF9WU19QUk9UT19UQ1AgXFx1MDAyNlxcdTAwMjYgTkZfQ09OTlRSQUNLIFxcdTAwMjZcXHUwMDI2IE5GX05BVCBcXHUwMDI2XFx1MDAyNiBcXFxcXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctMzI0LVxcdFxcdE5GX0NPTk5UUkFDS19GVFBcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZzozMjU6XFx0c2VsZWN0IElQX1ZTX05GQ1RcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy0zMjYtXFx0aGVscFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctMzM2LVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnOjMzNzpjb25maWdcXHRJUF9WU19ORkNUXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctMzM4LVxcdGJvb2wgXFxcIk5ldGZpbHRlciBjb25uZWN0aW9uIHRyYWNraW5nXFxcIlxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctMzQ0LVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnOjM0NTpjb25maWdcXHRJUF9WU19QRV9TSVBcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy0zNDYtXFx0dHJpc3RhdGUgXFxcIlNJUCBwZXJzaXN0ZW5jZSBlbmdpbmVcXFwiXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc6MzQ3OlxcdGRlcGVuZHMgb24gSVBfVlNfUFJPVE9fVURQXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctMzQ4LVxcdGRlcGVuZHMgb24gTkZfQ09OTlRSQUNLX1NJUFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc9MzUyPWNvbmZpZyBHQ09WX1BST0ZJTEVfSVBWU1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctMzYwLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnOjM2MTplbmRpZiAjIElQX1ZTXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvTWFrZWZpbGU9Nz1pcF92c19wcm90by1vYmpzLXkgOj1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvTWFrZWZpbGU6ODppcF92c19wcm90by1vYmpzLSQoQ09ORklHX0lQX1ZTX1BST1RPX1RDUCkgKz0gaXBfdnNfcHJvdG9fdGNwLm9cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvTWFrZWZpbGU6OTppcF92c19wcm90by1vYmpzLSQoQ09ORklHX0lQX1ZTX1BST1RPX1VEUCkgKz0gaXBfdnNfcHJvdG9fdWRwLm9cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvTWFrZWZpbGU6MTA6aXBfdnNfcHJvdG8tb2Jqcy0kKENPTkZJR19JUF9WU19QUk9UT19BSF9FU1ApICs9IGlwX3ZzX3Byb3RvX2FoX2VzcC5vXFxubmV0L25ldGZpbHRlci9pcHZzL01ha2VmaWxlOjExOmlwX3ZzX3Byb3RvLW9ianMtJChDT05GSUdfSVBfVlNfUFJPVE9fU0NUUCkgKz0gaXBfdnNfcHJvdG9fc2N0cC5vXFxubmV0L25ldGZpbHRlci9pcHZzL01ha2VmaWxlLTEyLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9NYWtlZmlsZT0xMz1pcF92cy1leHRyYV9vYmpzLXkgOj1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvTWFrZWZpbGU6MTQ6aXBfdnMtZXh0cmFfb2Jqcy0kKENPTkZJR19JUF9WU19ORkNUKSArPSBpcF92c19uZmN0Lm9cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvTWFrZWZpbGUtMTUtXFxubmV0L25ldGZpbHRlci9pcHZzL01ha2VmaWxlPTE2PWlwX3ZzLW9ianMgOj1cXHRpcF92c19jb25uLm8gaXBfdnNfY29yZS5vIGlwX3ZzX2N0bC5vIGlwX3ZzX3NjaGVkLm9cXHQgICBcXFxcXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvTWFrZWZpbGUtMjItIyBJUFZTIGNvcmVcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvTWFrZWZpbGU6MjM6b2JqLSQoQ09ORklHX0lQX1ZTKSArPSBpcF92cy5vXFxubmV0L25ldGZpbHRlci9pcHZzL01ha2VmaWxlLTI0LVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9NYWtlZmlsZS0yNS0jIElQVlMgc2NoZWR1bGVyc1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9NYWtlZmlsZToyNjpvYmotJChDT05GSUdfSVBfVlNfUlIpICs9IGlwX3ZzX3JyLm9cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvTWFrZWZpbGU6Mjc6b2JqLSQoQ09ORklHX0lQX1ZTX1dSUikgKz0gaXBfdnNfd3JyLm9cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvTWFrZWZpbGU6Mjg6b2JqLSQoQ09ORklHX0lQX1ZTX0xDKSArPSBpcF92c19sYy5vXFxubmV0L25ldGZpbHRlci9pcHZzL01ha2VmaWxlOjI5Om9iai0kKENPTkZJR19JUF9WU19XTEMpICs9IGlwX3ZzX3dsYy5vXFxubmV0L25ldGZpbHRlci9pcHZzL01ha2VmaWxlOjMwOm9iai0kKENPTkZJR19JUF9WU19GTykgKz0gaXBfdnNfZm8ub1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9NYWtlZmlsZTozMTpvYmotJChDT05GSUdfSVBfVlNfT1ZGKSArPSBpcF92c19vdmYub1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9NYWtlZmlsZTozMjpvYmotJChDT05GSUdfSVBfVlNfTEJMQykgKz0gaXBfdnNfbGJsYy5vXFxubmV0L25ldGZpbHRlci9pcHZzL01ha2VmaWxlOjMzOm9iai0kKENPTkZJR19JUF9WU19MQkxDUikgKz0gaXBfdnNfbGJsY3Iub1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9NYWtlZmlsZTozNDpvYmotJChDT05GSUdfSVBfVlNfREgpICs9IGlwX3ZzX2RoLm9cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvTWFrZWZpbGU6MzU6b2JqLSQoQ09ORklHX0lQX1ZTX1NIKSArPSBpcF92c19zaC5vXFxubmV0L25ldGZpbHRlci9pcHZzL01ha2VmaWxlOjM2Om9iai0kKENPTkZJR19JUF9WU19NSCkgKz0gaXBfdnNfbWgub1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9NYWtlZmlsZTozNzpvYmotJChDT05GSUdfSVBfVlNfU0VEKSArPSBpcF92c19zZWQub1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9NYWtlZmlsZTozODpvYmotJChDT05GSUdfSVBfVlNfTlEpICs9IGlwX3ZzX25xLm9cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvTWFrZWZpbGU6Mzk6b2JqLSQoQ09ORklHX0lQX1ZTX1RXT1MpICs9IGlwX3ZzX3R3b3Mub1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9NYWtlZmlsZS00MC1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvTWFrZWZpbGUtNDEtIyBJUFZTIGFwcGxpY2F0aW9uIGhlbHBlcnNcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvTWFrZWZpbGU6NDI6b2JqLSQoQ09ORklHX0lQX1ZTX0ZUUCkgKz0gaXBfdnNfZnRwLm9cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvTWFrZWZpbGUtNDMtXFxubmV0L25ldGZpbHRlci9pcHZzL01ha2VmaWxlLTQ0LSMgSVBWUyBjb25uZWN0aW9uIHRlbXBsYXRlIHJldHJpZXZlcnNcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvTWFrZWZpbGU6NDU6b2JqLSQoQ09ORklHX0lQX1ZTX1BFX1NJUCkgKz0gaXBfdnNfcGVfc2lwLm9cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvTWFrZWZpbGUtNDYtaWZkZWYgQ09ORklHX0dDT1ZfUFJPRklMRV9JUFZTXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfYXBwLmM9NzI9aXBfdnNfYXBwX2luY19uZXcoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIHN0cnVjdCBpcF92c19hcHAgKmFwcCwgX191MTYgcHJvdG8sXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfYXBwLmMtMTA4LVxcdGxpc3RfYWRkKFxcdTAwMjZpbmMtXFx1MDAzZWFfbGlzdCwgXFx1MDAyNmFwcC1cXHUwMDNlaW5jc19saXN0KTtcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfYXBwLmM6MTA5OlxcdElQX1ZTX0RCRyg5LCBcXFwiJXMgQXBwICVzOiV1IHJlZ2lzdGVyZWRcXFxcblxcXCIsXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2FwcC5jLTExMC1cXHRcXHQgIHBwLVxcdTAwM2VuYW1lLCBpbmMtXFx1MDAzZW5hbWUsIG50b2hzKGluYy1cXHUwMDNlcG9ydCkpO1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2FwcC5jPTEyND1pcF92c19hcHBfaW5jX3JlbGVhc2Uoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIHN0cnVjdCBpcF92c19hcHAgKmluYylcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19hcHAuYy0xMzMtXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2FwcC5jOjEzNDpcXHRJUF9WU19EQkcoOSwgXFxcIiVzIEFwcCAlczoldSB1bnJlZ2lzdGVyZWRcXFxcblxcXCIsXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2FwcC5jLTEzNS1cXHRcXHQgIHBwLVxcdTAwM2VuYW1lLCBpbmMtXFx1MDAzZW5hbWUsIG50b2hzKGluYy1cXHUwMDNlcG9ydCkpO1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2FwcC5jPTI4Nz1zdGF0aWMgaW5saW5lIHZvaWQgdnNfZml4X3NlcShjb25zdCBzdHJ1Y3QgaXBfdnNfc2VxICp2c2VxLCBzdHJ1Y3QgdGNwaGRyICp0aClcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19hcHAuYy0yOTgtXFx0XFx0XFx0dGgtXFx1MDAzZXNlcSA9IGh0b25sKHNlcSArIHZzZXEtXFx1MDAzZWRlbHRhKTtcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfYXBwLmM6Mjk5OlxcdFxcdFxcdElQX1ZTX0RCRyg5LCBcXFwiJXMoKTogYWRkZWQgZGVsdGEgKCVkKSB0byBzZXFcXFxcblxcXCIsXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2FwcC5jLTMwMC1cXHRcXHRcXHRcXHQgIF9fZnVuY19fLCB2c2VxLVxcdTAwM2VkZWx0YSk7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfYXBwLmMtMzAyLVxcdFxcdFxcdHRoLVxcdTAwM2VzZXEgPSBodG9ubChzZXEgKyB2c2VxLVxcdTAwM2VwcmV2aW91c19kZWx0YSk7XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2FwcC5jOjMwMzpcXHRcXHRcXHRJUF9WU19EQkcoOSwgXFxcIiVzKCk6IGFkZGVkIHByZXZpb3VzX2RlbHRhICglZCkgdG8gc2VxXFxcXG5cXFwiLFxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19hcHAuYy0zMDQtXFx0XFx0XFx0XFx0ICBfX2Z1bmNfXywgdnNlcS1cXHUwMDNlcHJldmlvdXNfZGVsdGEpO1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2FwcC5jPTMxND12c19maXhfYWNrX3NlcShjb25zdCBzdHJ1Y3QgaXBfdnNfc2VxICp2c2VxLCBzdHJ1Y3QgdGNwaGRyICp0aClcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19hcHAuYy0zMjctXFx0XFx0XFx0dGgtXFx1MDAzZWFja19zZXEgPSBodG9ubChhY2tfc2VxIC0gdnNlcS1cXHUwMDNlZGVsdGEpO1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19hcHAuYzozMjg6XFx0XFx0XFx0SVBfVlNfREJHKDksIFxcXCIlcygpOiBzdWJ0cmFjdGVkIGRlbHRhIFxcXCJcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfYXBwLmMtMzI5LVxcdFxcdFxcdFxcdCAgXFxcIiglZCkgZnJvbSBhY2tfc2VxXFxcXG5cXFwiLCBfX2Z1bmNfXywgdnNlcS1cXHUwMDNlZGVsdGEpO1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2FwcC5jLTMzMi1cXHRcXHRcXHR0aC1cXHUwMDNlYWNrX3NlcSA9IGh0b25sKGFja19zZXEgLSB2c2VxLVxcdTAwM2VwcmV2aW91c19kZWx0YSk7XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2FwcC5jOjMzMzpcXHRcXHRcXHRJUF9WU19EQkcoOSwgXFxcIiVzKCk6IHN1YnRyYWN0ZWQgXFxcIlxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19hcHAuYy0zMzQtXFx0XFx0XFx0XFx0ICBcXFwicHJldmlvdXNfZGVsdGEgKCVkKSBmcm9tIGFja19zZXFcXFxcblxcXCIsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfYXBwLmM9MzU5PXN0YXRpYyBpbmxpbmUgaW50IGFwcF90Y3BfcGt0X291dChzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsIHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfYXBwLmMtMzc5LVxcdCAqL1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19hcHAuYzozODA6XFx0aWYgKGNwLVxcdTAwM2VmbGFncyBcXHUwMDI2IElQX1ZTX0NPTk5fRl9PVVRfU0VRKVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19hcHAuYy0zODEtXFx0XFx0dnNfZml4X3NlcShcXHUwMDI2Y3AtXFx1MDAzZW91dF9zZXEsIHRoKTtcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfYXBwLmM6MzgyOlxcdGlmIChjcC1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBJUF9WU19DT05OX0ZfSU5fU0VRKVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19hcHAuYy0zODMtXFx0XFx0dnNfZml4X2Fja19zZXEoXFx1MDAyNmNwLVxcdTAwM2Vpbl9zZXEsIHRoKTtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19hcHAuYy0zOTgtXFx0XFx0dnNfc2VxX3VwZGF0ZShjcCwgXFx1MDAyNmNwLVxcdTAwM2VvdXRfc2VxLFxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19hcHAuYzozOTk6XFx0XFx0XFx0ICAgICAgSVBfVlNfQ09OTl9GX09VVF9TRVEsIHNlcSwgZGlmZik7XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2FwcC5jLTQwMC1cXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19hcHAuYz00MzU9c3RhdGljIGlubGluZSBpbnQgYXBwX3RjcF9wa3RfaW4oc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2FwcC5jLTQ1NS1cXHQgKi9cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfYXBwLmM6NDU2OlxcdGlmIChjcC1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBJUF9WU19DT05OX0ZfSU5fU0VRKVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19hcHAuYy00NTctXFx0XFx0dnNfZml4X3NlcShcXHUwMDI2Y3AtXFx1MDAzZWluX3NlcSwgdGgpO1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19hcHAuYzo0NTg6XFx0aWYgKGNwLVxcdTAwM2VmbGFncyBcXHUwMDI2IElQX1ZTX0NPTk5fRl9PVVRfU0VRKVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19hcHAuYy00NTktXFx0XFx0dnNfZml4X2Fja19zZXEoXFx1MDAyNmNwLVxcdTAwM2VvdXRfc2VxLCB0aCk7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfYXBwLmMtNDc0LVxcdFxcdHZzX3NlcV91cGRhdGUoY3AsIFxcdTAwMjZjcC1cXHUwMDNlaW5fc2VxLFxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19hcHAuYzo0NzU6XFx0XFx0XFx0ICAgICAgSVBfVlNfQ09OTl9GX0lOX1NFUSwgc2VxLCBkaWZmKTtcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfYXBwLmMtNDc2LVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYy0zOC1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jOjM5OiNpZm5kZWYgQ09ORklHX0lQX1ZTX1RBQl9CSVRTXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYzo0MDojZGVmaW5lIENPTkZJR19JUF9WU19UQUJfQklUU1xcdDEyXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYy00MS0jZW5kaWZcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmMtNDUtKi9cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jOjQ2OnN0YXRpYyBpbnQgaXBfdnNfY29ubl90YWJfYml0cyA9IENPTkZJR19JUF9WU19UQUJfQklUUztcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jLTQ3LW1vZHVsZV9wYXJhbV9uYW1lZChjb25uX3RhYl9iaXRzLCBpcF92c19jb25uX3RhYl9iaXRzLCBpbnQsIDA0NDQpO1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYz01ND1zdGF0aWMgc3RydWN0IGttZW1fY2FjaGUgKmlwX3ZzX2Nvbm5fY2FjaGVwIF9fcmVhZF9tb3N0bHk7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jLTU2LS8qIFdlIG5lZWQgYW4gYWRkcnN0cmxlbiB0aGF0IHdvcmtzIHdpdGggb3Igd2l0aG91dCB2NiAqL1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmM6NTc6I2lmZGVmIENPTkZJR19JUF9WU19JUFY2XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYzo1ODojZGVmaW5lIElQX1ZTX0FERFJTVFJMRU4gSU5FVDZfQUREUlNUUkxFTlxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmMtNTktI2Vsc2VcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jOjYwOiNkZWZpbmUgSVBfVlNfQUREUlNUUkxFTiAoOCsxKVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmMtNjEtI2VuZGlmXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jPTE4ND1zdGF0aWMgdTMyIGlwX3ZzX2Nvbm5faGFzaGtleShzdHJ1Y3QgaXBfdnNfcmh0ICp0LCBpbnQgYWYsIHVuc2lnbmVkIGludCBwcm90byxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmMtMTkwLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmM6MTkxOiNpZmRlZiBDT05GSUdfSVBfVlNfSVBWNlxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmMtMTkyLVxcdGlmIChhZiA9PSBBRl9JTkVUNikge1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYz0yNjE9c3RhdGljIGlubGluZSBpbnQgaXBfdnNfY29ubl9oYXNoKHN0cnVjdCBpcF92c19jb25uICpjcClcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmMtMjcwLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmM6MjcxOlxcdGlmIChjcC1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBJUF9WU19DT05OX0ZfT05FX1BBQ0tFVClcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jLTI3Mi1cXHRcXHRyZXR1cm4gMDtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmMtMjkyLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmM6MjkzOlxcdGNwLVxcdTAwM2VmbGFncyB8PSBJUF9WU19DT05OX0ZfSEFTSEVEO1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmMtMjk0LVxcdFdSSVRFX09OQ0UoY3AtXFx1MDAzZWhuMC5oYXNoX2tleSwgaGFzaF9rZXkpO1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYy0zMDYtXFx0aWYgKGF0b21pY19yZWFkKFxcdTAwMjZpcHZzLVxcdTAwM2Vjb25uX2NvdW50KSBcXHUwMDNlIHQtXFx1MDAzZXVfdGhyZXNoIFxcdTAwMjZcXHUwMDI2XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYzozMDc6XFx0ICAgICF0ZXN0X2FuZF9zZXRfYml0KElQX1ZTX1dPUktfQ09OTl9SRVNJWkUsIFxcdTAwMjZpcHZzLVxcdTAwM2V3b3JrX2ZsYWdzKSlcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jLTMwOC1cXHRcXHRtb2RfZGVsYXllZF93b3JrKHN5c3RlbV9kZmxfbG9uZ193cSwgXFx1MDAyNmlwdnMtXFx1MDAzZWNvbm5fcmVzaXplX3dvcmssIDApO1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYz0zMTY9c3RhdGljIGlubGluZSBib29sIGlwX3ZzX2Nvbm5fdW5saW5rKHN0cnVjdCBpcF92c19jb25uICpjcClcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmMtMzI0LVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmM6MzI1OlxcdGlmIChjcC1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBJUF9WU19DT05OX0ZfT05FX1BBQ0tFVClcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jLTMyNi1cXHRcXHRyZXR1cm4gcmVmY291bnRfZGVjX2lmX29uZShcXHUwMDI2Y3AtXFx1MDAzZXJlZmNudCk7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jLTMzOC1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jOjMzOTpcXHRpZiAoY3AtXFx1MDAzZWZsYWdzIFxcdTAwMjYgSVBfVlNfQ09OTl9GX0hBU0hFRCkge1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmMtMzQwLVxcdFxcdC8qIERlY3JlYXNlIHJlZmNudCBhbmQgdW5saW5rIGNvbm4gb25seSBpZiB3ZSBhcmUgbGFzdCB1c2VyICovXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jLTM0NS1cXHRcXHRcXHRcXHRobGlzdF9ibF9kZWxfcmN1KFxcdTAwMjZjcC1cXHUwMDNlaG4xLm5vZGUpO1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmM6MzQ2OlxcdFxcdFxcdGNwLVxcdTAwM2VmbGFncyBcXHUwMDI2PSB+SVBfVlNfQ09OTl9GX0hBU0hFRDtcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jLTM0Ny1cXHRcXHRcXHRyZXQgPSB0cnVlO1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYz0zNjc9X19pcF92c19jb25uX2luX2dldChjb25zdCBzdHJ1Y3QgaXBfdnNfY29ubl9wYXJhbSAqcClcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jLTM2OC17XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYzozNjk6XFx0REVDTEFSRV9JUF9WU19SSFRfV0FMS19CVUNLRVRfUkNVKCk7XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYy0zNzAtXFx0c3RydWN0IG5ldG5zX2lwdnMgKmlwdnMgPSBwLVxcdTAwM2VpcHZzO1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYy0zOTUtXFx0XFx0XFx0XFx0ICAgICghcC1cXHUwMDNlY3BvcnQgXlxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmM6Mzk2OlxcdFxcdFxcdFxcdCAgICAgKCEoY3AtXFx1MDAzZWZsYWdzIFxcdTAwMjYgSVBfVlNfQ09OTl9GX05PX0NQT1JUKSkpIFxcdTAwMjZcXHUwMDI2XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYy0zOTctXFx0XFx0XFx0XFx0ICAgIHAtXFx1MDAzZXByb3RvY29sID09IGNwLVxcdTAwM2Vwcm90b2NvbCkge1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYz00MTM9c3RydWN0IGlwX3ZzX2Nvbm4gKmlwX3ZzX2Nvbm5faW5fZ2V0KGNvbnN0IHN0cnVjdCBpcF92c19jb25uX3BhcmFtICpwKVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYy00MjktXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYzo0MzA6XFx0SVBfVlNfREJHX0JVRig5LCBcXFwibG9va3VwL2luICVzICVzOiVkLVxcdTAwM2UlczolZCAlc1xcXFxuXFxcIixcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jLTQzMS1cXHRcXHQgICAgICBpcF92c19wcm90b19uYW1lKHAtXFx1MDAzZXByb3RvY29sKSxcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jOjQzMjpcXHRcXHQgICAgICBJUF9WU19EQkdfQUREUihwLVxcdTAwM2VhZiwgcC1cXHUwMDNlY2FkZHIpLCBudG9ocyhwLVxcdTAwM2VjcG9ydCksXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYzo0MzM6XFx0XFx0ICAgICAgSVBfVlNfREJHX0FERFIocC1cXHUwMDNlYWYsIHAtXFx1MDAzZXZhZGRyKSwgbnRvaHMocC1cXHUwMDNldnBvcnQpLFxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmMtNDM0LVxcdFxcdCAgICAgIGNwID8gXFxcImhpdFxcXCIgOiBcXFwibm90IGhpdFxcXCIpO1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYz00NzU9c3RydWN0IGlwX3ZzX2Nvbm4gKmlwX3ZzX2N0X2luX2dldChjb25zdCBzdHJ1Y3QgaXBfdnNfY29ubl9wYXJhbSAqcClcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jLTQ3Ni17XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYzo0Nzc6XFx0REVDTEFSRV9JUF9WU19SSFRfV0FMS19CVUNLRVRfUkNVKCk7XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYy00NzgtXFx0c3RydWN0IG5ldG5zX2lwdnMgKmlwdnMgPSBwLVxcdTAwM2VpcHZzO1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYy01MTQtXFx0XFx0XFx0XFx0ICAgIHAtXFx1MDAzZWNwb3J0ID09IGNwLVxcdTAwM2VjcG9ydCBcXHUwMDI2XFx1MDAyNlxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmM6NTE1OlxcdFxcdFxcdFxcdCAgICBjcC1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBJUF9WU19DT05OX0ZfVEVNUExBVEUgXFx1MDAyNlxcdTAwMjZcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jLTUxNi1cXHRcXHRcXHRcXHQgICAgcC1cXHUwMDNlcHJvdG9jb2wgPT0gY3AtXFx1MDAzZXByb3RvY29sIFxcdTAwMjZcXHUwMDI2XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jLTUyOS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jOjUzMDpcXHRJUF9WU19EQkdfQlVGKDksIFxcXCJ0ZW1wbGF0ZSBsb29rdXAvaW4gJXMgJXM6JWQtXFx1MDAzZSVzOiVkICVzXFxcXG5cXFwiLFxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmMtNTMxLVxcdFxcdCAgICAgIGlwX3ZzX3Byb3RvX25hbWUocC1cXHUwMDNlcHJvdG9jb2wpLFxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmM6NTMyOlxcdFxcdCAgICAgIElQX1ZTX0RCR19BRERSKHAtXFx1MDAzZWFmLCBwLVxcdTAwM2VjYWRkciksIG50b2hzKHAtXFx1MDAzZWNwb3J0KSxcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jOjUzMzpcXHRcXHQgICAgICBJUF9WU19EQkdfQUREUihwLVxcdTAwM2VhZiwgcC1cXHUwMDNldmFkZHIpLCBudG9ocyhwLVxcdTAwM2V2cG9ydCksXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYy01MzQtXFx0XFx0ICAgICAgY3AgPyBcXFwiaGl0XFxcIiA6IFxcXCJub3QgaGl0XFxcIik7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jPTU0Mz1zdHJ1Y3QgaXBfdnNfY29ubiAqaXBfdnNfY29ubl9vdXRfZ2V0KGNvbnN0IHN0cnVjdCBpcF92c19jb25uX3BhcmFtICpwKVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmMtNTQ0LXtcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jOjU0NTpcXHRERUNMQVJFX0lQX1ZTX1JIVF9XQUxLX0JVQ0tFVF9SQ1UoKTtcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jLTU0Ni1cXHRzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cyA9IHAtXFx1MDAzZWlwdnM7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jLTU2OS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jOjU3MDpcXHRcXHRcXHRcXHRpZiAoSVBfVlNfRldEX01FVEhPRChjcCkgIT0gSVBfVlNfQ09OTl9GX01BU1EpIHtcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jLTU3MS1cXHRcXHRcXHRcXHRcXHRzcG9ydCA9IGNwLVxcdTAwM2V2cG9ydDtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmMtNTkzLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmM6NTk0OlxcdElQX1ZTX0RCR19CVUYoOSwgXFxcImxvb2t1cC9vdXQgJXMgJXM6JWQtXFx1MDAzZSVzOiVkICVzXFxcXG5cXFwiLFxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmMtNTk1LVxcdFxcdCAgICAgIGlwX3ZzX3Byb3RvX25hbWUocC1cXHUwMDNlcHJvdG9jb2wpLFxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmM6NTk2OlxcdFxcdCAgICAgIElQX1ZTX0RCR19BRERSKHAtXFx1MDAzZWFmLCBwLVxcdTAwM2VjYWRkciksIG50b2hzKHAtXFx1MDAzZWNwb3J0KSxcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jOjU5NzpcXHRcXHQgICAgICBJUF9WU19EQkdfQUREUihwLVxcdTAwM2VhZiwgcC1cXHUwMDNldmFkZHIpLCBudG9ocyhwLVxcdTAwM2V2cG9ydCksXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYy01OTgtXFx0XFx0ICAgICAgY3AgPyBcXFwiaGl0XFxcIiA6IFxcXCJub3QgaGl0XFxcIik7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jPTYyMD1zdGF0aWMgdm9pZCBfX2lwX3ZzX2Nvbm5fcHV0X3RpbWVyKHN0cnVjdCBpcF92c19jb25uICpjcClcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jLTYyMS17XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYzo2MjI6XFx0dW5zaWduZWQgbG9uZyB0ID0gKGNwLVxcdTAwM2VmbGFncyBcXHUwMDI2IElQX1ZTX0NPTk5fRl9PTkVfUEFDS0VUKSA/XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYy02MjMtXFx0XFx0MCA6IGNwLVxcdTAwM2V0aW1lb3V0O1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYz02Mjk9dm9pZCBpcF92c19jb25uX3B1dChzdHJ1Y3QgaXBfdnNfY29ubiAqY3ApXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYy02MzAte1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmM6NjMxOlxcdGlmICgoY3AtXFx1MDAzZWZsYWdzIFxcdTAwMjYgSVBfVlNfQ09OTl9GX09ORV9QQUNLRVQpIFxcdTAwMjZcXHUwMDI2XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYy02MzItXFx0ICAgIChyZWZjb3VudF9yZWFkKFxcdTAwMjZjcC1cXHUwMDNlcmVmY250KSA9PSAxKSBcXHUwMDI2XFx1MDAyNlxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYz02NDM9dm9pZCBpcF92c19jb25uX2ZpbGxfY3BvcnQoc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLCBfX2JlMTYgY3BvcnQpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jLTY4NC1cXHRcXHRcXHRzcGluX2xvY2tfYmgoXFx1MDAyNmNwLVxcdTAwM2Vsb2NrKTtcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jOjY4NTpcXHRcXHRcXHRpZiAoY3AtXFx1MDAzZWZsYWdzIFxcdTAwMjYgSVBfVlNfQ09OTl9GX05PX0NQT1JUIFxcdTAwMjZcXHUwMDI2IGJ5X21lKVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmMtNjg2LVxcdFxcdFxcdFxcdGNwLVxcdTAwM2VjcG9ydCA9IDA7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jLTY4OC1cXHRcXHRcXHRzcGluX3VubG9ja19iaChcXHUwMDI2Y3AtXFx1MDAzZWxvY2spO1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmM6Njg5OlxcdFxcdFxcdElQX1ZTX0VSUl9STChcXFwiJXMoKTogVG9vIG1hbnkgaHQgY2hhbmdlcyBmb3IgZGlyICVkXFxcXG5cXFwiLFxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmMtNjkwLVxcdFxcdFxcdFxcdCAgICAgX19mdW5jX18sIGRpcik7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jLTc1Ny1cXHQvKiBGaWxsIGNwb3J0IG9uY2UsIGV2ZW4gaWYgbXVsdGlwbGUgcGFja2V0cyB0cnkgdG8gZG8gaXQgKi9cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jOjc1ODpcXHRpZiAoY3AtXFx1MDAzZWZsYWdzIFxcdTAwMjYgSVBfVlNfQ09OTl9GX05PX0NQT1JUIFxcdTAwMjZcXHUwMDI2ICghY3AtXFx1MDAzZWNwb3J0IHx8IGJ5X21lKSkge1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmMtNzU5LVxcdFxcdC8qIElmIHdlIHJhY2Ugd2l0aCByZXNpemluZyBtYWtlIHN1cmUgY3BvcnQgaXMgc2V0IGZvciBkaXIgMSAqL1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYy03NjUtXFx0XFx0XFx0YXRvbWljX2RlYyhcXHUwMDI2aXB2cy1cXHUwMDNlbm9fY3BvcnRfY29ubnNbYWZfaWRdKTtcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jOjc2NjpcXHRcXHRcXHRjcC1cXHUwMDNlZmxhZ3MgXFx1MDAyNj0gfklQX1ZTX0NPTk5fRl9OT19DUE9SVDtcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jLTc2Ny1cXHRcXHR9XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jPTc5Nz1zdGF0aWMgdm9pZCBpcF92c19jb25uX2NoYW5nZV9md2RfbWFzayhzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsIHUzMiBuZXdfZmxhZ3MpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jLTgwNC1cXHQvKiBTZWUgaXBfdnNfY29ubl91c2VfaGFzaDIoKSBmb3IgcmVmZXJlbmNlICovXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYzo4MDU6XFx0aWYgKChjcC1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBJUF9WU19DT05OX0ZfVEVNUExBVEUpIHx8XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYy04MDYtXFx0ICAgIC8qIE5vIGNoYW5nZSBpbiBkb3VibGUgaGFzaGluZyA/ICovXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYzo4MDc6XFx0ICAgIChJUF9WU19GV0RfTUVUSE9EKGNwKSA9PSBJUF9WU19DT05OX0ZfTUFTUSkgPT1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jOjgwODpcXHQgICAgKChuZXdfZmxhZ3MgXFx1MDAyNiBJUF9WU19DT05OX0ZfRldEX01BU0spID09IElQX1ZTX0NPTk5fRl9NQVNRKSkge1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmMtODA5LVxcdFxcdGNwLVxcdTAwM2VmbGFncyA9IG5ld19mbGFncztcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmM9ODY2PWludCBpcF92c19jb25uX2Rlc2lyZWRfc2l6ZShzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgc3RydWN0IGlwX3ZzX3JodCAqdCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmMtODY5LVxcdHJldHVybiBpcF92c19yaHRfZGVzaXJlZF9zaXplKGlwdnMsIHQsIGF0b21pY19yZWFkKFxcdTAwMjZpcHZzLVxcdTAwM2Vjb25uX2NvdW50KSxcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jOjg3MDpcXHRcXHRcXHRcXHQgICAgICBsZmFjdG9yLCBJUF9WU19DT05OX1RBQl9NSU5fQklUUyxcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jLTg3MS1cXHRcXHRcXHRcXHQgICAgICBpcF92c19jb25uX3RhYl9iaXRzKTtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmM9ODc1PXN0cnVjdCBpcF92c19yaHQgKmlwX3ZzX2Nvbm5fdGFiX2FsbG9jKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBpbnQgYnVja2V0cyxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmMtODgyLVxcdHNjb3VudHMgPSBjbGFtcChidWNrZXRzIFxcdTAwM2VcXHUwMDNlIDYsIDEsIDI1Nik7XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYzo4ODM6XFx0LyogbG9ja3M6IGJhc2VkIG9uIHBhcmFsbGVsIElQX1ZTX0NPTk5fRl9OT19DUE9SVCBvcGVyYXRpb25zICsgcmVzaXplICovXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYy04ODQtXFx0bG9ja3MgPSBjbGFtcCg4LCAxLCBzY291bnRzKTtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmMtODg5LVxcdHQtXFx1MDAzZWxmYWN0b3IgPSBsZmFjdG9yO1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmM6ODkwOlxcdGlwX3ZzX3JodF9zZXRfdGhyZXNob2xkcyh0LCB0LVxcdTAwM2VzaXplLCBsZmFjdG9yLCBJUF9WU19DT05OX1RBQl9NSU5fQklUUyxcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jLTg5MS1cXHRcXHRcXHRcXHQgaXBfdnNfY29ubl90YWJfYml0cyk7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jPTg5Nj1zdGF0aWMgdm9pZCBjb25uX3Jlc2l6ZV93b3JrX2hhbmRsZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYy05MTQtXFx0LyogQWxsb3cgd29yayB0byBiZSBxdWV1ZWQgYWdhaW4gKi9cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jOjkxNTpcXHRjbGVhcl9iaXQoSVBfVlNfV09SS19DT05OX1JFU0laRSwgXFx1MDAyNmlwdnMtXFx1MDAzZXdvcmtfZmxhZ3MpO1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmMtOTE2LVxcdHQgPSByY3VfZGVyZWZlcmVuY2VfcHJvdGVjdGVkKGlwdnMtXFx1MDAzZWNvbm5fdGFiLCAxKTtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmMtOTM1LVxcdC8qIEZsaXAgdGhlIHRhYmxlX2lkICovXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYzo5MzY6XFx0dF9uZXctXFx1MDAzZXRhYmxlX2lkID0gdC1cXHUwMDNldGFibGVfaWQgXiBJUF9WU19SSFRfVEFCTEVfSURfTUFTSztcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jLTkzNy1cXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmM9MTAyMz1zdGF0aWMgaW5saW5lIHZvaWQgaXBfdnNfYmluZF94bWl0KHN0cnVjdCBpcF92c19jb25uICpjcClcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jLTEwMjQte1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmM6MTAyNTpcXHRzd2l0Y2ggKElQX1ZTX0ZXRF9NRVRIT0QoY3ApKSB7XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYzoxMDI2OlxcdGNhc2UgSVBfVlNfQ09OTl9GX01BU1E6XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYy0xMDI3LVxcdFxcdGNwLVxcdTAwM2VwYWNrZXRfeG1pdCA9IGlwX3ZzX25hdF94bWl0O1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYy0xMDI5LVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmM6MTAzMDpcXHRjYXNlIElQX1ZTX0NPTk5fRl9UVU5ORUw6XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYzoxMDMxOiNpZmRlZiBDT05GSUdfSVBfVlNfSVBWNlxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmMtMTAzMi1cXHRcXHRpZiAoY3AtXFx1MDAzZWRhZiA9PSBBRl9JTkVUNilcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmMtMTAzOC1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jOjEwMzk6XFx0Y2FzZSBJUF9WU19DT05OX0ZfRFJPVVRFOlxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmMtMTA0MC1cXHRcXHRjcC1cXHUwMDNlcGFja2V0X3htaXQgPSBpcF92c19kcl94bWl0O1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYy0xMDQyLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmM6MTA0MzpcXHRjYXNlIElQX1ZTX0NPTk5fRl9MT0NBTE5PREU6XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYy0xMDQ0LVxcdFxcdGNwLVxcdTAwM2VwYWNrZXRfeG1pdCA9IGlwX3ZzX251bGxfeG1pdDtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmMtMTA0Ni1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jOjEwNDc6XFx0Y2FzZSBJUF9WU19DT05OX0ZfQllQQVNTOlxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmMtMTA0OC1cXHRcXHRjcC1cXHUwMDNlcGFja2V0X3htaXQgPSBpcF92c19ieXBhc3NfeG1pdDtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmMtMTA1Mi1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jOjEwNTM6I2lmZGVmIENPTkZJR19JUF9WU19JUFY2XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYy0xMDU0LXN0YXRpYyBpbmxpbmUgdm9pZCBpcF92c19iaW5kX3htaXRfdjYoc3RydWN0IGlwX3ZzX2Nvbm4gKmNwKVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmMtMTA1NS17XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYzoxMDU2OlxcdHN3aXRjaCAoSVBfVlNfRldEX01FVEhPRChjcCkpIHtcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jOjEwNTc6XFx0Y2FzZSBJUF9WU19DT05OX0ZfTUFTUTpcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jLTEwNTgtXFx0XFx0Y3AtXFx1MDAzZXBhY2tldF94bWl0ID0gaXBfdnNfbmF0X3htaXRfdjY7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jLTEwNjAtXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYzoxMDYxOlxcdGNhc2UgSVBfVlNfQ09OTl9GX1RVTk5FTDpcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jLTEwNjItXFx0XFx0aWYgKGNwLVxcdTAwM2VkYWYgPT0gQUZfSU5FVDYpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jLTEwNjctXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYzoxMDY4OlxcdGNhc2UgSVBfVlNfQ09OTl9GX0RST1VURTpcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jLTEwNjktXFx0XFx0Y3AtXFx1MDAzZXBhY2tldF94bWl0ID0gaXBfdnNfZHJfeG1pdF92NjtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmMtMTA3MS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jOjEwNzI6XFx0Y2FzZSBJUF9WU19DT05OX0ZfTE9DQUxOT0RFOlxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmMtMTA3My1cXHRcXHRjcC1cXHUwMDNlcGFja2V0X3htaXQgPSBpcF92c19udWxsX3htaXQ7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jLTEwNzUtXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYzoxMDc2OlxcdGNhc2UgSVBfVlNfQ09OTl9GX0JZUEFTUzpcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jLTEwNzctXFx0XFx0Y3AtXFx1MDAzZXBhY2tldF94bWl0ID0gaXBfdnNfYnlwYXNzX3htaXRfdjY7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jPTEwODk9aXBfdnNfYmluZF9kZXN0KHN0cnVjdCBpcF92c19jb25uICpjcCwgc3RydWN0IGlwX3ZzX2Rlc3QgKmRlc3QpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jLTExMDItXFx0aWYgKGNwLVxcdTAwM2Vwcm90b2NvbCAhPSBJUFBST1RPX1VEUClcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jOjExMDM6XFx0XFx0Y29ubl9mbGFncyBcXHUwMDI2PSB+SVBfVlNfQ09OTl9GX09ORV9QQUNLRVQ7XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYy0xMTA0LVxcdGZsYWdzID0gY3AtXFx1MDAzZWZsYWdzO1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmMtMTEwNS1cXHQvKiBCaW5kIHdpdGggdGhlIGRlc3RpbmF0aW9uIGFuZCBpdHMgY29ycmVzcG9uZGluZyB0cmFuc21pdHRlciAqL1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmM6MTEwNjpcXHRpZiAoZmxhZ3MgXFx1MDAyNiBJUF9WU19DT05OX0ZfU1lOQykge1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmMtMTEwNy1cXHRcXHQvKiBTeW5jZWQgY29ubnMgYXJlIGhhc2hlZCwgc28gdGhleSBjYW4gbm90IGdldCB0aGlzIGZsYWcgKi9cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jOjExMDg6XFx0XFx0Y29ubl9mbGFncyBcXHUwMDI2PSB+SVBfVlNfQ09OTl9GX09ORV9QQUNLRVQ7XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYy0xMTA5LVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYy0xMTEyLVxcdFxcdCAqL1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmM6MTExMzpcXHRcXHRpZiAoIShmbGFncyBcXHUwMDI2IElQX1ZTX0NPTk5fRl9URU1QTEFURSkpXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYzoxMTE0OlxcdFxcdFxcdGNvbm5fZmxhZ3MgXFx1MDAyNj0gfklQX1ZTX0NPTk5fRl9JTkFDVElWRTtcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jLTExMTUtXFx0XFx0LyogY29ubmVjdGlvbnMgaW5oZXJpdCBmb3J3YXJkaW5nIG1ldGhvZCBmcm9tIGRlc3QgKi9cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jOjExMTY6XFx0XFx0ZmxhZ3MgXFx1MDAyNj0gfihJUF9WU19DT05OX0ZfRldEX01BU0sgfCBJUF9WU19DT05OX0ZfTk9PVVRQVVQpO1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmMtMTExNy1cXHRcXHRmbGFncyB8PSBjb25uX2ZsYWdzO1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYy0xMTIwLVxcdFxcdCAqL1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmM6MTEyMTpcXHRcXHRpZiAoY3AtXFx1MDAzZWZsYWdzIFxcdTAwMjYgSVBfVlNfQ09OTl9GX0hBU0hFRClcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jLTExMjItXFx0XFx0XFx0aXBfdnNfY29ubl9jaGFuZ2VfZndkX21hc2soY3AsIGZsYWdzKTtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmMtMTEzMC1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jOjExMzE6XFx0SVBfVlNfREJHX0JVRig3LCBcXFwiQmluZC1kZXN0ICVzIGM6JXM6JWQgdjolczolZCBcXFwiXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYy0xMTMyLVxcdFxcdCAgICAgIFxcXCJkOiVzOiVkIGZ3ZDolYyBzOiV1IGNvbm4tXFx1MDAzZWZsYWdzOiVYIGNvbm4tXFx1MDAzZXJlZmNudDolZCBcXFwiXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jLTExMzQtXFx0XFx0ICAgICAgaXBfdnNfcHJvdG9fbmFtZShjcC1cXHUwMDNlcHJvdG9jb2wpLFxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmM6MTEzNTpcXHRcXHQgICAgICBJUF9WU19EQkdfQUREUihjcC1cXHUwMDNlYWYsIFxcdTAwMjZjcC1cXHUwMDNlY2FkZHIpLCBudG9ocyhjcC1cXHUwMDNlY3BvcnQpLFxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmM6MTEzNjpcXHRcXHQgICAgICBJUF9WU19EQkdfQUREUihjcC1cXHUwMDNlYWYsIFxcdTAwMjZjcC1cXHUwMDNldmFkZHIpLCBudG9ocyhjcC1cXHUwMDNldnBvcnQpLFxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmM6MTEzNzpcXHRcXHQgICAgICBJUF9WU19EQkdfQUREUihjcC1cXHUwMDNlZGFmLCBcXHUwMDI2Y3AtXFx1MDAzZWRhZGRyKSwgbnRvaHMoY3AtXFx1MDAzZWRwb3J0KSxcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jLTExMzgtXFx0XFx0ICAgICAgaXBfdnNfZndkX3RhZyhjcCksIGNwLVxcdTAwM2VzdGF0ZSxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmMtMTE0Mi1cXHQvKiBVcGRhdGUgdGhlIGNvbm5lY3Rpb24gY291bnRlcnMgKi9cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jOjExNDM6XFx0aWYgKCEoZmxhZ3MgXFx1MDAyNiBJUF9WU19DT05OX0ZfVEVNUExBVEUpKSB7XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYy0xMTQ0LVxcdFxcdGludCB0YztcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmMtMTE0OS1cXHRcXHQgKi9cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jOjExNTA6XFx0XFx0aWYgKCEoZmxhZ3MgXFx1MDAyNiBJUF9WU19DT05OX0ZfSU5BQ1RJVkUpKVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmMtMTE1MS1cXHRcXHRcXHRhdG9taWNfaW5jKFxcdTAwMjZkZXN0LVxcdTAwM2VhY3RpdmVjb25ucyk7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jPTExNjc9dm9pZCBpcF92c190cnlfYmluZF9kZXN0KHN0cnVjdCBpcF92c19jb25uICpjcClcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmMtMTIwMC1cXHRcXHRjcC1cXHUwMDNlcGFja2V0X3htaXQgPSBOVUxMO1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmM6MTIwMTojaWZkZWYgQ09ORklHX0lQX1ZTX0lQVjZcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jLTEyMDItXFx0XFx0aWYgKGNwLVxcdTAwM2VhZiA9PSBBRl9JTkVUNilcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmM9MTIyMD1zdGF0aWMgaW5saW5lIHZvaWQgaXBfdnNfdW5iaW5kX2Rlc3Qoc3RydWN0IGlwX3ZzX2Nvbm4gKmNwKVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYy0xMjI2LVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmM6MTIyNzpcXHRJUF9WU19EQkdfQlVGKDcsIFxcXCJVbmJpbmQtZGVzdCAlcyBjOiVzOiVkIHY6JXM6JWQgXFxcIlxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmMtMTIyOC1cXHRcXHQgICAgICBcXFwiZDolczolZCBmd2Q6JWMgczoldSBjb25uLVxcdTAwM2VmbGFnczolWCBjb25uLVxcdTAwM2VyZWZjbnQ6JWQgXFxcIlxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYy0xMjMwLVxcdFxcdCAgICAgIGlwX3ZzX3Byb3RvX25hbWUoY3AtXFx1MDAzZXByb3RvY29sKSxcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jOjEyMzE6XFx0XFx0ICAgICAgSVBfVlNfREJHX0FERFIoY3AtXFx1MDAzZWFmLCBcXHUwMDI2Y3AtXFx1MDAzZWNhZGRyKSwgbnRvaHMoY3AtXFx1MDAzZWNwb3J0KSxcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jOjEyMzI6XFx0XFx0ICAgICAgSVBfVlNfREJHX0FERFIoY3AtXFx1MDAzZWFmLCBcXHUwMDI2Y3AtXFx1MDAzZXZhZGRyKSwgbnRvaHMoY3AtXFx1MDAzZXZwb3J0KSxcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jOjEyMzM6XFx0XFx0ICAgICAgSVBfVlNfREJHX0FERFIoY3AtXFx1MDAzZWRhZiwgXFx1MDAyNmNwLVxcdTAwM2VkYWRkciksIG50b2hzKGNwLVxcdTAwM2VkcG9ydCksXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYy0xMjM0LVxcdFxcdCAgICAgIGlwX3ZzX2Z3ZF90YWcoY3ApLCBjcC1cXHUwMDNlc3RhdGUsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jLTEyMzgtXFx0LyogVXBkYXRlIHRoZSBjb25uZWN0aW9uIGNvdW50ZXJzICovXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYzoxMjM5OlxcdGlmICghKGNwLVxcdTAwM2VmbGFncyBcXHUwMDI2IElQX1ZTX0NPTk5fRl9URU1QTEFURSkpIHtcXG5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTc6NDM6MTIuNzk1MjU1MjNaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNDgzNTMzNjA2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjpcblxuKipEaXZpbmcgaW50byB0aGUgSVBWUyBTeW5jIENvZGUqKlxuXG5Pa2F5LCBzbyB3ZSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiBob3cgdGhlc2UgY29ubmVjdGlvbiBzeW5jaHJvbml6YXRpb24gbWVjaGFuaXNtcyBpbiBJUFZTIGFyZSBldm9sdmluZy4gTXkgZ3V0IGZlZWxpbmcgaXMgdG8gc3RhcnQgYnkgZXhhbWluaW5nIHRoZSBjaGFuZ2VzIGFyb3VuZCB0aGUgYG5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmNgIGZpbGUuIFRoYXQncyB0aGUgbGlrZWx5IHNwb3QgZm9yIHRoZSBjb3JlIHN5bmNocm9uaXphdGlvbiBsb2dpYy4gSSB3YW50IHRvIHNlZSBob3cgdGhleSdyZSBkZWZpbmluZyBhbmQgdXNpbmcgYGlwX3ZzX3N5bmNfY29ubmAgYW5kIGBpcF92c19zeW5jX2Nvbm5fdjBgLCBzcGVjaWZpY2FsbHkuIFRoZSBkZWZpbml0aW9ucyBzaG91bGQgaWxsdW1pbmF0ZSB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGludm9sdmVkLCBhbmQgdGhlIGNhbGwgc2l0ZXMgd2lsbCByZXZlYWwgdGhlIHN5bmNocm9uaXphdGlvbiB3b3JrZmxvdy4gQnkgdHJhY2luZyB0aGUgY2FsbHMgdG8gdGhlc2UgZnVuY3Rpb25zLCBJIGNhbiB1bmRlcnN0YW5kIHdoZXJlIGFuZCBob3cgdGhlIGNvbm5lY3Rpb24gc3RhdGUgaXMgYmVpbmcgc2hhcmVkIChvciBub3QpIGJldHdlZW4gbm9kZXMuIFRoaXMgc2hvdWxkIGdpdmUgbWUgYSBzb2xpZCBiYXNlIGZvciB1bmRlcnN0YW5kaW5nIGFueSBtb2RpZmljYXRpb25zIG9yIHBvdGVudGlhbCBpc3N1ZXMgaW4gdGhlIGNvbm5lY3Rpb24gdHJhY2tpbmcgc3luY2hyb25pemF0aW9uIHdpdGhpbiB0aGUgY29udGV4dCBvZiBJUFZTLiBJIGV4cGVjdCB0byBmaW5kIGNsdWVzIGFib3V0IHZlcnNpb25pbmcgYW5kIGNvbXBhdGliaWxpdHkgdGhlcmUgYXMgd2VsbC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTc0MDcsIk91dHB1dFRva2VucyI6NDMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxNzo0MzoxNS4yNzg3OTMxNzZaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODM1OTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA1NDAsXG4gIFwiTGluZUNvdW50XCI6IDgwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA1NDA6XFx0XFx0XFx0XFx0ICAgICAgIGludCBwa3RzKVxcbiA1NDE6XFx0e1xcbiA1NDI6XFx0XFx0c3RydWN0IGlwX3ZzX3N5bmNfbWVzZ192MCAqbTtcXG4gNTQzOlxcdFxcdHN0cnVjdCBpcF92c19zeW5jX2Nvbm5fdjAgKnM7XFxuIDU0NDpcXHRcXHRzdHJ1Y3QgaXBfdnNfc3luY19idWZmICpidWZmO1xcbiA1NDU6XFx0XFx0c3RydWN0IGlwdnNfbWFzdGVyX3N5bmNfc3RhdGUgKm1zO1xcbiA1NDY6XFx0XFx0dTMyIGZsYWdzLCBzZXFfbWFzaztcXG4gNTQ3OlxcdFxcdHVuc2lnbmVkIGludCBsZW47XFxuIDU0ODpcXHRcXHRpbnQgaWQ7XFxuIDU0OTpcXHRcXG4gNTUwOlxcdFxcdGlmICh1bmxpa2VseShjcC1cXHUwMDNlYWYgIT0gQUZfSU5FVCkpXFxuIDU1MTpcXHRcXHRcXHRyZXR1cm47XFxuIDU1MjpcXHRcXHRmbGFncyA9IFJFQURfT05DRShjcC1cXHUwMDNlZmxhZ3MpO1xcbiA1NTM6XFx0XFx0LyogRG8gbm90IHN5bmMgT05FIFBBQ0tFVCAqL1xcbiA1NTQ6XFx0XFx0aWYgKGZsYWdzIFxcdTAwMjYgSVBfVlNfQ09OTl9GX09ORV9QQUNLRVQpXFxuIDU1NTpcXHRcXHRcXHRyZXR1cm47XFxuIDU1NjpcXHRcXG4gNTU3OlxcdFxcdGlmICghaXBfdnNfc3luY19jb25uX25lZWRlZChpcHZzLCBjcCwgcGt0cykpXFxuIDU1ODpcXHRcXHRcXHRyZXR1cm47XFxuIDU1OTpcXHRcXG4gNTYwOlxcdFxcdHNwaW5fbG9ja19iaChcXHUwMDI2aXB2cy1cXHUwMDNlc3luY19idWZmX2xvY2spO1xcbiA1NjE6XFx0XFx0aWYgKCEoaXB2cy1cXHUwMDNlc3luY19zdGF0ZSBcXHUwMDI2IElQX1ZTX1NUQVRFX01BU1RFUikpIHtcXG4gNTYyOlxcdFxcdFxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZpcHZzLVxcdTAwM2VzeW5jX2J1ZmZfbG9jayk7XFxuIDU2MzpcXHRcXHRcXHRyZXR1cm47XFxuIDU2NDpcXHRcXHR9XFxuIDU2NTpcXHRcXG4gNTY2OlxcdFxcdGlkID0gc2VsZWN0X21hc3Rlcl90aHJlYWRfaWQoaXB2cywgY3ApO1xcbiA1Njc6XFx0XFx0bXMgPSBcXHUwMDI2aXB2cy1cXHUwMDNlbXNbaWRdO1xcbiA1Njg6XFx0XFx0YnVmZiA9IG1zLVxcdTAwM2VzeW5jX2J1ZmY7XFxuIDU2OTpcXHRcXHRzZXFfbWFzayA9IGZsYWdzIFxcdTAwMjYgSVBfVlNfQ09OTl9GX1NFUV9NQVNLO1xcbiA1NzA6XFx0XFx0bGVuID0gc2VxX21hc2sgPyBGVUxMX0NPTk5fU0laRSA6IFNJTVBMRV9DT05OX1NJWkU7XFxuIDU3MTpcXHRcXHRpZiAoYnVmZikge1xcbiA1NzI6XFx0XFx0XFx0bSA9IChzdHJ1Y3QgaXBfdnNfc3luY19tZXNnX3YwICopIGJ1ZmYtXFx1MDAzZW1lc2c7XFxuIDU3MzpcXHRcXHRcXHQvKiBTZW5kIGJ1ZmZlciBpZiBpdCBpcyBmb3IgdjEgKi9cXG4gNTc0OlxcdFxcdFxcdGlmIChidWZmLVxcdTAwM2VoZWFkICsgbGVuIFxcdTAwM2UgYnVmZi1cXHUwMDNlZW5kIHx8ICFtLVxcdTAwM2Vucl9jb25ucykge1xcbiA1NzU6XFx0XFx0XFx0XFx0c2JfcXVldWVfdGFpbChpcHZzLCBtcyk7XFxuIDU3NjpcXHRcXHRcXHRcXHRtcy1cXHUwMDNlc3luY19idWZmID0gTlVMTDtcXG4gNTc3OlxcdFxcdFxcdFxcdGJ1ZmYgPSBOVUxMO1xcbiA1Nzg6XFx0XFx0XFx0fVxcbiA1Nzk6XFx0XFx0fVxcbiA1ODA6XFx0XFx0aWYgKCFidWZmKSB7XFxuIDU4MTpcXHRcXHRcXHRidWZmID0gaXBfdnNfc3luY19idWZmX2NyZWF0ZV92MChpcHZzLCBsZW4pO1xcbiA1ODI6XFx0XFx0XFx0aWYgKCFidWZmKSB7XFxuIDU4MzpcXHRcXHRcXHRcXHRzcGluX3VubG9ja19iaChcXHUwMDI2aXB2cy1cXHUwMDNlc3luY19idWZmX2xvY2spO1xcbiA1ODQ6XFx0XFx0XFx0XFx0cHJfZXJyKFxcXCJpcF92c19zeW5jX2J1ZmZfY3JlYXRlIGZhaWxlZC5cXFxcblxcXCIpO1xcbiA1ODU6XFx0XFx0XFx0XFx0cmV0dXJuO1xcbiA1ODY6XFx0XFx0XFx0fVxcbiA1ODc6XFx0XFx0XFx0bXMtXFx1MDAzZXN5bmNfYnVmZiA9IGJ1ZmY7XFxuIDU4ODpcXHRcXHR9XFxuIDU4OTpcXHRcXG4gNTkwOlxcdFxcdG0gPSAoc3RydWN0IGlwX3ZzX3N5bmNfbWVzZ192MCAqKSBidWZmLVxcdTAwM2VtZXNnO1xcbiA1OTE6XFx0XFx0cyA9IChzdHJ1Y3QgaXBfdnNfc3luY19jb25uX3YwICopIGJ1ZmYtXFx1MDAzZWhlYWQ7XFxuIDU5MjpcXHRcXG4gNTkzOlxcdFxcdC8qIGNvcHkgbWVtYmVycyAqL1xcbiA1OTQ6XFx0XFx0cy1cXHUwMDNlcmVzZXJ2ZWQgPSAwO1xcbiA1OTU6XFx0XFx0cy1cXHUwMDNlcHJvdG9jb2wgPSBjcC1cXHUwMDNlcHJvdG9jb2w7XFxuIDU5NjpcXHRcXHRzLVxcdTAwM2VjcG9ydCA9IGNwLVxcdTAwM2VjcG9ydDtcXG4gNTk3OlxcdFxcdHMtXFx1MDAzZXZwb3J0ID0gY3AtXFx1MDAzZXZwb3J0O1xcbiA1OTg6XFx0XFx0cy1cXHUwMDNlZHBvcnQgPSBjcC1cXHUwMDNlZHBvcnQ7XFxuIDU5OTpcXHRcXHRzLVxcdTAwM2VjYWRkciA9IGNwLVxcdTAwM2VjYWRkci5pcDtcXG4gNjAwOlxcdFxcdHMtXFx1MDAzZXZhZGRyID0gY3AtXFx1MDAzZXZhZGRyLmlwO1xcbiA2MDE6XFx0XFx0cy1cXHUwMDNlZGFkZHIgPSBjcC1cXHUwMDNlZGFkZHIuaXA7XFxuIDYwMjpcXHRcXHRzLVxcdTAwM2VmbGFncyA9IGh0b25zKGZsYWdzIFxcdTAwMjYgfklQX1ZTX0NPTk5fRl9IQVNIRUQpO1xcbiA2MDM6XFx0XFx0cy1cXHUwMDNlc3RhdGUgPSBodG9ucyhjcC1cXHUwMDNlc3RhdGUpO1xcbiA2MDQ6XFx0XFx0aWYgKHNlcV9tYXNrKSB7XFxuIDYwNTpcXHRcXHRcXHRzdHJ1Y3QgaXBfdnNfc3luY19jb25uX29wdGlvbnMgKm9wdCA9XFxuIDYwNjpcXHRcXHRcXHRcXHQoc3RydWN0IGlwX3ZzX3N5bmNfY29ubl9vcHRpb25zICopXFx1MDAyNnNbMV07XFxuIDYwNzpcXHRcXHRcXHRtZW1jcHkob3B0LCBcXHUwMDI2Y3AtXFx1MDAzZXN5bmNfY29ubl9vcHQsIHNpemVvZigqb3B0KSk7XFxuIDYwODpcXHRcXHR9XFxuIDYwOTpcXHRcXG4gNjEwOlxcdFxcdG0tXFx1MDAzZW5yX2Nvbm5zKys7XFxuIDYxMTpcXHRcXHRtLVxcdTAwM2VzaXplID0gaHRvbnMobnRvaHMobS1cXHUwMDNlc2l6ZSkgKyBsZW4pO1xcbiA2MTI6XFx0XFx0YnVmZi1cXHUwMDNlaGVhZCArPSBsZW47XFxuIDYxMzpcXHRcXHRzcGluX3VubG9ja19iaChcXHUwMDI2aXB2cy1cXHUwMDNlc3luY19idWZmX2xvY2spO1xcbiA2MTQ6XFx0XFxuIDYxNTpcXHRcXHQvKiBzeW5jaHJvbml6ZSBpdHMgY29udHJvbGxlciBpZiBpdCBoYXMgKi9cXG4gNjE2OlxcdFxcdGNwID0gY3AtXFx1MDAzZWNvbnRyb2w7XFxuIDYxNzpcXHRcXHRpZiAoY3ApIHtcXG4gNjE4OlxcdFxcdFxcdGlmIChjcC1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBJUF9WU19DT05OX0ZfVEVNUExBVEUpXFxuIDYxOTpcXHRcXHRcXHRcXHRwa3RzID0gYXRvbWljX2luY19yZXR1cm4oXFx1MDAyNmNwLVxcdTAwM2Vpbl9wa3RzKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTc6NDM6MTUuMjc4OTgwMTU2WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzgwNjI3NjUxNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byBgaXBfdnNfc3luYy5jYCAtIExpbmVzIDYyMC03NjAqKlxuXG5Pa2F5LCBzbyB3ZSdyZSBmb2N1c2luZyBvbiBhIHNwZWNpZmljIGNodW5rIG9mIGBpcF92c19zeW5jLmNgLCBsaW5lcyA2MjAgdG8gNzYwLiBJIGltbWVkaWF0ZWx5IHRoaW5rOiBcIldoYXQncyB0aGUgY29udGV4dCBoZXJlPyBXaGF0IHBhcnQgb2YgdGhlIHN5bmNocm9uaXphdGlvbiBsb2dpYyBhcmUgd2UgbG9va2luZyBhdD9cIiBLbm93aW5nIHRoaXMgY29kZSwgSSdtIGFscmVhZHkgYW50aWNpcGF0aW5nIHdlJ2xsIGJlIGRlYWxpbmcgd2l0aCBlaXRoZXIgY29ubmVjdGlvbiB0cmFja2luZyB1cGRhdGVzLCBwZXJoYXBzIGEgY3JpdGljYWwgc2VjdGlvbiwgb3IgcG90ZW50aWFsbHkgc29tZSBraW5kIG9mIGhlYWx0aCBjaGVjayBtZWNoYW5pc20gc3luYy4gVGhpcyBhcmVhIGlzIGxpa2VseSBpbnZvbHZlZCBpbiBob3cgdmlydHVhbCBzZXJ2ZXJzIGFuZCByZWFsIHNlcnZlcnMgc2hhcmUgdGhlaXIgY3VycmVudCBjb25uZWN0aW9uIHN0YXRlcyB3aXRoIGVhY2ggb3RoZXIuXG5cbkknbSBtZW50YWxseSBwcmVwYXJpbmcgZm9yIGEgZGVlcCBkaXZlLiBJJ2xsIGJlIGxvb2tpbmcgZm9yIGFueSBpbmRpY2F0aW9ucyBvZiBsb2NraW5nIG1lY2hhbmlzbXMg4oCTIG11dGV4ZXMgb3Igc3BpbmxvY2tzIOKAkyBhcm91bmQgc2hhcmVkIGRhdGEgc3RydWN0dXJlcy4gQXJlIHRoZXkgdXNpbmcgcmVhZC1jb3B5LXVwZGF0ZSAoUkNVKSBoZXJlIGZvciBhbnkgb2YgdGhlIHNoYXJlZCBzdHJ1Y3R1cmVzPyBBbnkgdXNlIG9mIGF0b21pYyBvcGVyYXRpb25zIG9yIG1lbW9yeSBiYXJyaWVycyB3aWxsIGJlIG9mIGdyZWF0IGludGVyZXN0IGZvciBtZS4gSSdtIGFsc28gcmVhZHkgdG8gYW5hbHl6ZSB0aGUgZXJyb3IgaGFuZGxpbmcgYW5kIHJlY292ZXJ5IHN0cmF0ZWdpZXMgd2l0aGluIHRoaXMgc2VjdGlvbjogYXJlIHRoZXkganVzdCBsb2dnaW5nIGZhaWx1cmVzLCBvciBhdHRlbXB0aW5nIHRvIHJldHJ5IHN5bmNocm9uaXphdGlvbj9cblxuSSdtIGtlZXBpbmcgYW4gZXllIG91dCBmb3IgYW55IHNwZWNpZmljIGRhdGEgc3RydWN0dXJlcyByZWZlcmVuY2VkLiBBcmUgdGhleSB1cGRhdGluZyB0aGUgYGlwX3ZzX2Nvbm5gIHN0cnVjdHVyZSwgdGhlIGBpcF92c19kZXN0YCBzdHJ1Y3R1cmUsIG9yIHNvbWUgY3VzdG9tIHN5bmNocm9uaXphdGlvbiBtZXRhZGF0YT8gSG93IGFyZSB0aGV5IGhhbmRsaW5nIHRoZSBkaWZmZXJlbnQgc3RhdGVzIGEgY29ubmVjdGlvbiBjYW4gYmUgaW4gKEVTVEFCTElTSEVELCBGSU5fV0FJVCwgZXRjLikgYW5kIHdoYXQgaW1wbGljYXRpb25zIGRvIHRob3NlIHN0YXRlcyBoYXZlPyBHaXZlbiB0aGUgcmFuZ2UsIEknbSBleHBlY3Rpbmcgc29tZSBwcmV0dHkgbG93LWxldmVsIHNvY2tldCBvcGVyYXRpb25zIG9yIG1lbW9yeSBtYW5pcHVsYXRpb25zLCBzbyBJJ20gYWxzbyBwcmVwYXJpbmcgZm9yIHRoZSB0eXBpY2FsIGlzc3VlcyBhc3NvY2lhdGVkIHdpdGggc2hhcmVkIG1lbW9yeSBpbiBhIGhpZ2gtY29uY3VycmVuY3kgc2NlbmFyaW8uIEkgd29uZGVyIGlmIHRoZXkgd2lsbCBiZSBoYW5kbGluZyBmcmFnbWVudGF0aW9uIGlzc3VlcyBvciBVRFAgcGFja2V0cyBhcyB3ZWxsLlxuXG5MZXQncyBzZWUgd2hhdCdzIGFjdHVhbGx5IGluIHRoZXJlIVxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTAyMCwiT3V0cHV0VG9rZW5zIjo0NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTc6NDM6MTkuMDg1MjYxMjgzWiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjEyMTEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNjIwLFxuICBcIkxpbmVDb3VudFwiOiAxMDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDYyMDpcXHRcXHRcXHRlbHNlXFxuIDYyMTpcXHRcXHRcXHRcXHRwa3RzID0gc3lzY3RsX3N5bmNfdGhyZXNob2xkKGlwdnMpO1xcbiA2MjI6XFx0XFx0XFx0aXBfdnNfc3luY19jb25uKGlwdnMsIGNwLCBwa3RzKTtcXG4gNjIzOlxcdFxcdH1cXG4gNjI0OlxcdH1cXG4gNjI1OlxcdFxcbiA2MjY6XFx0LypcXG4gNjI3OlxcdCAqICAgICAgQWRkIGFuIGlwX3ZzX2Nvbm4gaW5mb3JtYXRpb24gaW50byB0aGUgY3VycmVudCBzeW5jX2J1ZmYuXFxuIDYyODpcXHQgKiAgICAgIENhbGxlZCBieSBpcF92c19pbi5cXG4gNjI5OlxcdCAqICAgICAgU2VuZGluZyBWZXJzaW9uIDEgbWVzc2FnZXNcXG4gNjMwOlxcdCAqL1xcbiA2MzE6XFx0dm9pZCBpcF92c19zeW5jX2Nvbm4oc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIHN0cnVjdCBpcF92c19jb25uICpjcCwgaW50IHBrdHMpXFxuIDYzMjpcXHR7XFxuIDYzMzpcXHRcXHRzdHJ1Y3QgaXBfdnNfc3luY19tZXNnICptO1xcbiA2MzQ6XFx0XFx0dW5pb24gaXBfdnNfc3luY19jb25uICpzO1xcbiA2MzU6XFx0XFx0c3RydWN0IGlwX3ZzX3N5bmNfYnVmZiAqYnVmZjtcXG4gNjM2OlxcdFxcdHN0cnVjdCBpcHZzX21hc3Rlcl9zeW5jX3N0YXRlICptcztcXG4gNjM3OlxcdFxcdGludCBpZDtcXG4gNjM4OlxcdFxcdF9fdTggKnA7XFxuIDYzOTpcXHRcXHR1bnNpZ25lZCBpbnQgbGVuLCBwZV9uYW1lX2xlbiwgcGFkO1xcbiA2NDA6XFx0XFx0dTMyIGZsYWdzLCBzZXFfbWFzaztcXG4gNjQxOlxcdFxcbiA2NDI6XFx0XFx0LyogSGFuZGxlIG9sZCB2ZXJzaW9uIG9mIHRoZSBwcm90b2NvbCAqL1xcbiA2NDM6XFx0XFx0aWYgKHN5c2N0bF9zeW5jX3ZlcihpcHZzKSA9PSAwKSB7XFxuIDY0NDpcXHRcXHRcXHRpcF92c19zeW5jX2Nvbm5fdjAoaXB2cywgY3AsIHBrdHMpO1xcbiA2NDU6XFx0XFx0XFx0cmV0dXJuO1xcbiA2NDY6XFx0XFx0fVxcbiA2NDc6XFx0XFx0LyogRG8gbm90IHN5bmMgT05FIFBBQ0tFVCAqL1xcbiA2NDg6XFx0XFx0aWYgKGNwLVxcdTAwM2VmbGFncyBcXHUwMDI2IElQX1ZTX0NPTk5fRl9PTkVfUEFDS0VUKVxcbiA2NDk6XFx0XFx0XFx0Z290byBjb250cm9sO1xcbiA2NTA6XFx0c2xvb3A6XFxuIDY1MTpcXHRcXHRpZiAoIWlwX3ZzX3N5bmNfY29ubl9uZWVkZWQoaXB2cywgY3AsIHBrdHMpKVxcbiA2NTI6XFx0XFx0XFx0Z290byBjb250cm9sO1xcbiA2NTM6XFx0XFx0ZmxhZ3MgPSBSRUFEX09OQ0UoY3AtXFx1MDAzZWZsYWdzKTtcXG4gNjU0OlxcdFxcbiA2NTU6XFx0XFx0LyogU2FuaXR5IGNoZWNrcyAqL1xcbiA2NTY6XFx0XFx0cGVfbmFtZV9sZW4gPSAwO1xcbiA2NTc6XFx0XFx0aWYgKGNwLVxcdTAwM2VwZV9kYXRhX2xlbikge1xcbiA2NTg6XFx0XFx0XFx0aWYgKCFjcC1cXHUwMDNlcGVfZGF0YSB8fCAhY3AtXFx1MDAzZWRlc3QpIHtcXG4gNjU5OlxcdFxcdFxcdFxcdElQX1ZTX0VSUl9STChcXFwiU1lOQywgY29ubmVjdGlvbiBwZV9kYXRhIGludmFsaWRcXFxcblxcXCIpO1xcbiA2NjA6XFx0XFx0XFx0XFx0cmV0dXJuO1xcbiA2NjE6XFx0XFx0XFx0fVxcbiA2NjI6XFx0XFx0XFx0cGVfbmFtZV9sZW4gPSBzdHJubGVuKGNwLVxcdTAwM2VwZS1cXHUwMDNlbmFtZSwgSVBfVlNfUEVOQU1FX01BWExFTik7XFxuIDY2MzpcXHRcXHR9XFxuIDY2NDpcXHRcXG4gNjY1OlxcdFxcdHNwaW5fbG9ja19iaChcXHUwMDI2aXB2cy1cXHUwMDNlc3luY19idWZmX2xvY2spO1xcbiA2NjY6XFx0XFx0aWYgKCEoaXB2cy1cXHUwMDNlc3luY19zdGF0ZSBcXHUwMDI2IElQX1ZTX1NUQVRFX01BU1RFUikpIHtcXG4gNjY3OlxcdFxcdFxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZpcHZzLVxcdTAwM2VzeW5jX2J1ZmZfbG9jayk7XFxuIDY2ODpcXHRcXHRcXHRyZXR1cm47XFxuIDY2OTpcXHRcXHR9XFxuIDY3MDpcXHRcXG4gNjcxOlxcdFxcdGlkID0gc2VsZWN0X21hc3Rlcl90aHJlYWRfaWQoaXB2cywgY3ApO1xcbiA2NzI6XFx0XFx0bXMgPSBcXHUwMDI2aXB2cy1cXHUwMDNlbXNbaWRdO1xcbiA2NzM6XFx0XFxuIDY3NDpcXHQjaWZkZWYgQ09ORklHX0lQX1ZTX0lQVjZcXG4gNjc1OlxcdFxcdGlmIChjcC1cXHUwMDNlYWYgPT0gQUZfSU5FVDYpXFxuIDY3NjpcXHRcXHRcXHRsZW4gPSBzaXplb2Yoc3RydWN0IGlwX3ZzX3N5bmNfdjYpO1xcbiA2Nzc6XFx0XFx0ZWxzZVxcbiA2Nzg6XFx0I2VuZGlmXFxuIDY3OTpcXHRcXHRcXHRsZW4gPSBzaXplb2Yoc3RydWN0IGlwX3ZzX3N5bmNfdjQpO1xcbiA2ODA6XFx0XFxuIDY4MTpcXHRcXHRzZXFfbWFzayA9IGZsYWdzIFxcdTAwMjYgSVBfVlNfQ09OTl9GX1NFUV9NQVNLO1xcbiA2ODI6XFx0XFx0aWYgKHNlcV9tYXNrKVxcbiA2ODM6XFx0XFx0XFx0bGVuICs9IHNpemVvZihzdHJ1Y3QgaXBfdnNfc3luY19jb25uX29wdGlvbnMpICsgMjtcXG4gNjg0OlxcdFxcbiA2ODU6XFx0XFx0aWYgKGNwLVxcdTAwM2VwZV9kYXRhX2xlbilcXG4gNjg2OlxcdFxcdFxcdGxlbiArPSBjcC1cXHUwMDNlcGVfZGF0YV9sZW4gKyAyO1xcdC8qICsgUGFyYW0gaGRyIGZpZWxkICovXFxuIDY4NzpcXHRcXHRpZiAocGVfbmFtZV9sZW4pXFxuIDY4ODpcXHRcXHRcXHRsZW4gKz0gcGVfbmFtZV9sZW4gKyAyO1xcbiA2ODk6XFx0XFxuIDY5MDpcXHRcXHQvKiBjaGVjayBpZiB0aGVyZSBpcyBhIHNwYWNlIGZvciB0aGlzIG9uZSAgKi9cXG4gNjkxOlxcdFxcdHBhZCA9IDA7XFxuIDY5MjpcXHRcXHRidWZmID0gbXMtXFx1MDAzZXN5bmNfYnVmZjtcXG4gNjkzOlxcdFxcdGlmIChidWZmKSB7XFxuIDY5NDpcXHRcXHRcXHRtID0gYnVmZi1cXHUwMDNlbWVzZztcXG4gNjk1OlxcdFxcdFxcdHBhZCA9ICg0IC0gKHNpemVfdCkgYnVmZi1cXHUwMDNlaGVhZCkgXFx1MDAyNiAzO1xcbiA2OTY6XFx0XFx0XFx0LyogU2VuZCBidWZmZXIgaWYgaXQgaXMgZm9yIHYwICovXFxuIDY5NzpcXHRcXHRcXHRpZiAoYnVmZi1cXHUwMDNlaGVhZCArIGxlbiArIHBhZCBcXHUwMDNlIGJ1ZmYtXFx1MDAzZWVuZCB8fCBtLVxcdTAwM2VyZXNlcnZlZCkge1xcbiA2OTg6XFx0XFx0XFx0XFx0c2JfcXVldWVfdGFpbChpcHZzLCBtcyk7XFxuIDY5OTpcXHRcXHRcXHRcXHRtcy1cXHUwMDNlc3luY19idWZmID0gTlVMTDtcXG4gNzAwOlxcdFxcdFxcdFxcdGJ1ZmYgPSBOVUxMO1xcbiA3MDE6XFx0XFx0XFx0XFx0cGFkID0gMDtcXG4gNzAyOlxcdFxcdFxcdH1cXG4gNzAzOlxcdFxcdH1cXG4gNzA0OlxcdFxcbiA3MDU6XFx0XFx0aWYgKCFidWZmKSB7XFxuIDcwNjpcXHRcXHRcXHRidWZmID0gaXBfdnNfc3luY19idWZmX2NyZWF0ZShpcHZzLCBsZW4pO1xcbiA3MDc6XFx0XFx0XFx0aWYgKCFidWZmKSB7XFxuIDcwODpcXHRcXHRcXHRcXHRzcGluX3VubG9ja19iaChcXHUwMDI2aXB2cy1cXHUwMDNlc3luY19idWZmX2xvY2spO1xcbiA3MDk6XFx0XFx0XFx0XFx0cHJfZXJyKFxcXCJpcF92c19zeW5jX2J1ZmZfY3JlYXRlIGZhaWxlZC5cXFxcblxcXCIpO1xcbiA3MTA6XFx0XFx0XFx0XFx0cmV0dXJuO1xcbiA3MTE6XFx0XFx0XFx0fVxcbiA3MTI6XFx0XFx0XFx0bXMtXFx1MDAzZXN5bmNfYnVmZiA9IGJ1ZmY7XFxuIDcxMzpcXHRcXHRcXHRtID0gYnVmZi1cXHUwMDNlbWVzZztcXG4gNzE0OlxcdFxcdH1cXG4gNzE1OlxcdFxcbiA3MTY6XFx0XFx0cCA9IGJ1ZmYtXFx1MDAzZWhlYWQ7XFxuIDcxNzpcXHRcXHRidWZmLVxcdTAwM2VoZWFkICs9IHBhZCArIGxlbjtcXG4gNzE4OlxcdFxcdG0tXFx1MDAzZXNpemUgPSBodG9ucyhudG9ocyhtLVxcdTAwM2VzaXplKSArIHBhZCArIGxlbik7XFxuIDcxOTpcXHRcXHQvKiBBZGQgZXYuIHBhZGRpbmcgZnJvbSBwcmV2LiBzeW5jX2Nvbm4gKi9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTc6NDM6MTkuMDg1NDc1OTEzWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTk0MjkyMjgxNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIERlZXBlciBpbnRvIGBpcF92c19zeW5jX2Nvbm5gKipcblxuQWxyaWdodCwgSSdtIHRoaW5raW5nIGFib3V0IGBpcF92c19zeW5jX2Nvbm5gLiBJdCdzIGEga2V5IHBpZWNlIG9mIHRoZSBJUFZTIHN5bmNocm9uaXphdGlvbiBwdXp6bGUsIGFuZCBJIG5lZWQgdG8gcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nIG9mIGl0cyByb2xlLiBUaGUgbmFtZSBpdHNlbGYgc3VnZ2VzdHMgYSBjb25uZWN0aW9uLXJlbGF0ZWQgZnVuY3Rpb24sIGxpa2VseSB0aWVkIHRvIG1haW50YWluaW5nIHN0YXRlIGNvbnNpc3RlbmN5IGFjcm9zcyB0aGUgY2x1c3Rlci4gSSBuZWVkIHRvIHF1aWNrbHkgZ2V0IGEgZnVsbCBwaWN0dXJlIG9mIHRoZSBiZWhhdmlvci4gSSBuZWVkIHRvIHF1aWNrbHkgc2VlIHRoZSByZXN0IG9mIHRoZSBjb2RlIGludm9sdmVkIHdpdGggYGlwX3ZzX3N5bmNfY29ubmAgdG8ga25vdyBleGFjdGx5IHdoYXQgaXQgZG9lcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjEwMzIsIk91dHB1dFRva2VucyI6NDMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDE3OjQzOjIxLjAyODQwMTk2NloiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTgyMjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA3MjAsXG4gIFwiTGluZUNvdW50XCI6IDYwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA3MjA6XFx0XFx0d2hpbGUgKHBhZC0tKVxcbiA3MjE6XFx0XFx0XFx0KihwKyspID0gMDtcXG4gNzIyOlxcdFxcbiA3MjM6XFx0XFx0cyA9ICh1bmlvbiBpcF92c19zeW5jX2Nvbm4gKilwO1xcbiA3MjQ6XFx0XFxuIDcyNTpcXHRcXHQvKiBTZXQgbWVzc2FnZSB0eXBlICBcXHUwMDI2IGNvcHkgbWVtYmVycyAqL1xcbiA3MjY6XFx0XFx0cy1cXHUwMDNldjQudHlwZSA9IChjcC1cXHUwMDNlYWYgPT0gQUZfSU5FVDYgPyBTVFlQRV9GX0lORVQ2IDogMCk7XFxuIDcyNzpcXHRcXHRzLVxcdTAwM2V2NC52ZXJfc2l6ZSA9IGh0b25zKGxlbiBcXHUwMDI2IFNWRVJfTUFTSyk7XFx0LyogVmVyc2lvbiAwICovXFxuIDcyODpcXHRcXHRzLVxcdTAwM2V2NC5mbGFncyA9IGh0b25sKGZsYWdzIFxcdTAwMjYgfklQX1ZTX0NPTk5fRl9IQVNIRUQpO1xcbiA3Mjk6XFx0XFx0cy1cXHUwMDNldjQuc3RhdGUgPSBodG9ucyhjcC1cXHUwMDNlc3RhdGUpO1xcbiA3MzA6XFx0XFx0cy1cXHUwMDNldjQucHJvdG9jb2wgPSBjcC1cXHUwMDNlcHJvdG9jb2w7XFxuIDczMTpcXHRcXHRzLVxcdTAwM2V2NC5jcG9ydCA9IGNwLVxcdTAwM2VjcG9ydDtcXG4gNzMyOlxcdFxcdHMtXFx1MDAzZXY0LnZwb3J0ID0gY3AtXFx1MDAzZXZwb3J0O1xcbiA3MzM6XFx0XFx0cy1cXHUwMDNldjQuZHBvcnQgPSBjcC1cXHUwMDNlZHBvcnQ7XFxuIDczNDpcXHRcXHRzLVxcdTAwM2V2NC5md21hcmsgPSBodG9ubChjcC1cXHUwMDNlZndtYXJrKTtcXG4gNzM1OlxcdFxcdHMtXFx1MDAzZXY0LnRpbWVvdXQgPSBodG9ubChjcC1cXHUwMDNldGltZW91dCAvIEhaKTtcXG4gNzM2OlxcdFxcdG0tXFx1MDAzZW5yX2Nvbm5zKys7XFxuIDczNzpcXHRcXG4gNzM4OlxcdCNpZmRlZiBDT05GSUdfSVBfVlNfSVBWNlxcbiA3Mzk6XFx0XFx0aWYgKGNwLVxcdTAwM2VhZiA9PSBBRl9JTkVUNikge1xcbiA3NDA6XFx0XFx0XFx0cCArPSBzaXplb2Yoc3RydWN0IGlwX3ZzX3N5bmNfdjYpO1xcbiA3NDE6XFx0XFx0XFx0cy1cXHUwMDNldjYuY2FkZHIgPSBjcC1cXHUwMDNlY2FkZHIuaW42O1xcbiA3NDI6XFx0XFx0XFx0cy1cXHUwMDNldjYudmFkZHIgPSBjcC1cXHUwMDNldmFkZHIuaW42O1xcbiA3NDM6XFx0XFx0XFx0cy1cXHUwMDNldjYuZGFkZHIgPSBjcC1cXHUwMDNlZGFkZHIuaW42O1xcbiA3NDQ6XFx0XFx0fSBlbHNlXFxuIDc0NTpcXHQjZW5kaWZcXG4gNzQ2OlxcdFxcdHtcXG4gNzQ3OlxcdFxcdFxcdHAgKz0gc2l6ZW9mKHN0cnVjdCBpcF92c19zeW5jX3Y0KTtcXHQvKiBvcHRpb25zIHB0ciAqL1xcbiA3NDg6XFx0XFx0XFx0cy1cXHUwMDNldjQuY2FkZHIgPSBjcC1cXHUwMDNlY2FkZHIuaXA7XFxuIDc0OTpcXHRcXHRcXHRzLVxcdTAwM2V2NC52YWRkciA9IGNwLVxcdTAwM2V2YWRkci5pcDtcXG4gNzUwOlxcdFxcdFxcdHMtXFx1MDAzZXY0LmRhZGRyID0gY3AtXFx1MDAzZWRhZGRyLmlwO1xcbiA3NTE6XFx0XFx0fVxcbiA3NTI6XFx0XFx0aWYgKHNlcV9tYXNrKSB7XFxuIDc1MzpcXHRcXHRcXHQqKHArKykgPSBJUFZTX09QVF9TRVFfREFUQTtcXG4gNzU0OlxcdFxcdFxcdCoocCsrKSA9IHNpemVvZihzdHJ1Y3QgaXBfdnNfc3luY19jb25uX29wdGlvbnMpO1xcbiA3NTU6XFx0XFx0XFx0aHRvbl9zZXEoXFx1MDAyNmNwLVxcdTAwM2Vpbl9zZXEsIChzdHJ1Y3QgaXBfdnNfc2VxICopcCk7XFxuIDc1NjpcXHRcXHRcXHRwICs9IHNpemVvZihzdHJ1Y3QgaXBfdnNfc2VxKTtcXG4gNzU3OlxcdFxcdFxcdGh0b25fc2VxKFxcdTAwMjZjcC1cXHUwMDNlb3V0X3NlcSwgKHN0cnVjdCBpcF92c19zZXEgKilwKTtcXG4gNzU4OlxcdFxcdFxcdHAgKz0gc2l6ZW9mKHN0cnVjdCBpcF92c19zZXEpO1xcbiA3NTk6XFx0XFx0fVxcbiA3NjA6XFx0XFx0LyogSGFuZGxlIHBlIGRhdGEgKi9cXG4gNzYxOlxcdFxcdGlmIChjcC1cXHUwMDNlcGVfZGF0YV9sZW4gXFx1MDAyNlxcdTAwMjYgY3AtXFx1MDAzZXBlX2RhdGEpIHtcXG4gNzYyOlxcdFxcdFxcdCoocCsrKSA9IElQVlNfT1BUX1BFX0RBVEE7XFxuIDc2MzpcXHRcXHRcXHQqKHArKykgPSBjcC1cXHUwMDNlcGVfZGF0YV9sZW47XFxuIDc2NDpcXHRcXHRcXHRtZW1jcHkocCwgY3AtXFx1MDAzZXBlX2RhdGEsIGNwLVxcdTAwM2VwZV9kYXRhX2xlbik7XFxuIDc2NTpcXHRcXHRcXHRwICs9IGNwLVxcdTAwM2VwZV9kYXRhX2xlbjtcXG4gNzY2OlxcdFxcdFxcdGlmIChwZV9uYW1lX2xlbikge1xcbiA3Njc6XFx0XFx0XFx0XFx0LyogQWRkIFBFX05BTUUgKi9cXG4gNzY4OlxcdFxcdFxcdFxcdCoocCsrKSA9IElQVlNfT1BUX1BFX05BTUU7XFxuIDc2OTpcXHRcXHRcXHRcXHQqKHArKykgPSBwZV9uYW1lX2xlbjtcXG4gNzcwOlxcdFxcdFxcdFxcdG1lbWNweShwLCBjcC1cXHUwMDNlcGUtXFx1MDAzZW5hbWUsIHBlX25hbWVfbGVuKTtcXG4gNzcxOlxcdFxcdFxcdFxcdHAgKz0gcGVfbmFtZV9sZW47XFxuIDc3MjpcXHRcXHRcXHR9XFxuIDc3MzpcXHRcXHR9XFxuIDc3NDpcXHRcXG4gNzc1OlxcdFxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZpcHZzLVxcdTAwM2VzeW5jX2J1ZmZfbG9jayk7XFxuIDc3NjpcXHRcXG4gNzc3OlxcdGNvbnRyb2w6XFxuIDc3ODpcXHRcXHQvKiBzeW5jaHJvbml6ZSBpdHMgY29udHJvbGxlciBpZiBpdCBoYXMgKi9cXG4gNzc5OlxcdFxcdGNwID0gY3AtXFx1MDAzZWNvbnRyb2w7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDE3OjQzOjIxLjAyODYwNDIwNloiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1MjI3NzQ5MjQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIEtlcm5lbCBWdWxuZXJhYmlsaXR5OiBBIERlZXAgRGl2ZSoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBxdWVzdGlvbiBpcyBhbHdheXMsIFwiV2hhdCBleGFjdGx5IGlzIHRoaXMgY29tbWl0IGFkZHJlc3Npbmc/XCIgUmlnaHQsIGl0IGxvb2tzIGxpa2UgYSB2dWxuZXJhYmlsaXR5IGluIGBpcF92c19zeW5jX2Nvbm5fdjBgIGFuZCBgaXBfdnNfc3luY19jb25uYC4gVGhlIGtleSBpcyB0aGF0IGBjcC1cdTAwM2VmbGFnc2Agd2FzIGJlaW5nIHJlYWQgbXVsdGlwbGUgdGltZXMgd2l0aG91dCBwcm9wZXIgc3luY2hyb25pemF0aW9uIHVzaW5nIGBSRUFEX09OQ0VgIG9yIGxvY2FsIHZhcmlhYmxlIHNuYXBzaG90cy4gVGhpcyBpcyBpbW1lZGlhdGVseSBjb25jZXJuaW5nLlxuXG5TcGVjaWZpY2FsbHksIGlmIGBjcC1cdTAwM2VmbGFncyBcdTAwMjYgSVBfVlNfQ09OTl9GX1NFUV9NQVNLYCBjaGFuZ2VkIGJldHdlZW4gdGhlIGxlbmd0aCBjYWxjdWxhdGlvbiBhbmQgdGhlIHN1YnNlcXVlbnQgY29uZGl0aW9uYWwgY2hlY2ssIHRoZXJlJ3MgYSByaXNrLiBUaGUgY2FsY3VsYXRlZCBgbGVuYCBjb3VsZCBiZSBiYXNlZCBvbiBhIHN0YXRlIHdpdGhvdXQgc2VxdWVuY2Ugb3B0aW9ucywgYnV0IHRoZW4gdGhlIGNvZGUgKm1pZ2h0KiB0cnkgdG8gd3JpdGUgc2VxdWVuY2Ugb3B0aW9ucywgcG90ZW50aWFsbHkgbGVhZGluZyB0byBhIGJ1ZmZlciBvdmVyZmxvdyBvciwgY29udmVyc2VseSwgd3JpdGluZyBwYXN0IHRoZSBhbGxvY2F0ZWQgc3BhY2UsIHdoaWNoIHdvdWxkIGNhdXNlIGNvcnJ1cHRpb24gb3IgYSBtaXNtYXRjaCB3aXRoIHJlc2VydmVkIHNwYWNlISBDbGFzc2ljIG1lbW9yeSBzYWZldHkgaXNzdWUuXG5cblRoZSBmaXg/IFNpbXBsZSBhbmQgZWxlZ2FudC4gUmVhZCBgY3AtXHUwMDNlZmxhZ3NgICpvbmNlKiB1c2luZyBgUkVBRF9PTkNFYCwgc3RvcmUgaXQgaW4gYSBsb2NhbCB2YXJpYWJsZSBgZmxhZ3NgLCBhbmQgdGhlbiB1c2UgYGZsYWdzYCAoYW5kIGBzZXFfbWFzayA9IGZsYWdzIFx1MDAyNiBJUF9WU19DT05OX0ZfU0VRX01BU0tgKSBjb25zaXN0ZW50bHkgZm9yIGJvdGggbGVuZ3RoIGNhbGN1bGF0aW9uIGFuZCB3cml0aW5nLiBUaGlzIGVsaW1pbmF0ZXMgdGhlIHJhY2UgY29uZGl0aW9uLiBHb29kLlxuXG5Ob3csIHRoZSBjcnVjaWFsIHF1ZXN0aW9uOiBpcyB0aGlzIHJlYWNoYWJsZSBhbmQgd29ydGggZnV6emluZz8gTGV0J3MgYXNzZXNzOlxuXG4qICAgKipSZWFjaGFiaWxpdHk6KiogSVBWUyBpcyBwYXJ0IG9mIHRoZSBzdGFuZGFyZCBuZXR3b3JraW5nIHN0YWNrLCBuZXRmaWx0ZXIsIHJpZ2h0PyBBYnNvbHV0ZWx5LiBJdOKAmXMgYmFrZWQgaW50byB0aGUga2VybmVsLiBJdOKAmXMgdXNlZCBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBRRU1VIGFuZCBzeXprYWxsZXIsIHdoaWNoIGlzICpmYW50YXN0aWMqIGZvciBmdXp6aW5nLCBhbmQgaXQgdXNlcyB2aXJ0dWFsIHNvY2tldHMsIHBhY2tldCBpbmplY3Rpb24sIGFuZCBuZXRsaW5rIGNvbmZpZ3VyYXRpb24gKGlwdnNhZG0vSVBWUyBuZXRsaW5rKS4gU28sIGl0J3MgZWFzaWx5IHJlYWNoYWJsZSwgZXNwZWNpYWxseSBnaXZlbiBuZXRsaW5rLlxuKiAgICoqSXMgaXQgcmVhY2hhYmxlIGNvZGU/KiogWWVzISBJUFZTIHN5bmMgZGFlbW9uIGFuZCBjb25uZWN0aW9uIHRyYWNraW5nIGFyZSBzdGFuZGFyZCBjb21wb25lbnRzIGluIG5ldHdvcmsgdmlydHVhbGl6YXRpb24uXG4qICAgKipTZWN0aW9uIDM6KiogQ2hlY2tzIG91dCwgY29yZSBuZXR3b3JraW5nLCBuZXRmaWx0ZXIuXG4qICAgKipXb3J0aEZ1enppbmc6KiogWWVzLCBhYnNvbHV0ZWx5LiBCdWZmZXIgb3ZlcmZsb3dzIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBhcmUgcHJpbWUgY2FuZGlkYXRlcyBmb3IgZnV6emluZywgYW5kIHRoaXMgY29kZSBpcyByZWFjaGFibGUuIFRoZSBmYWN0IHRoYXQgaXQncyBpbiBhIHN0YW5kYXJkIGNvbXBvbmVudCBhbmQgbmV0d29yay1mYWNpbmcgbWVhbnMgaXQgc2hvdWxkIGdldCBwbGVudHkgb2YgYXR0ZW50aW9uLlxuXG5Pa2F5LCBuZXh0IHN0ZXA6IGxldCdzIHZlcmlmeSBhbGwgdGhlIEtjb25maWcgZGVwZW5kZW5jaWVzIGZvciBJUFZTIGFuZCB0aGUgc3luYyBkYWVtb24uIEdvdHRhIG1ha2Ugc3VyZSB3ZSd2ZSBnb3QgdGhlIGNvcnJlY3QgY29uZmlndXJhdGlvbiB0byB0cmlnZ2VyIHRoaXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIyMjk0LCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzQxLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTc6NDM6MjYuMjU2MzU2ODc0WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzA5ODIxMzgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIElQX1ZTXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTQtI1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnOjU6bWVudWNvbmZpZyBJUF9WU1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTYtXFx0dHJpc3RhdGUgXFxcIklQIHZpcnR1YWwgc2VydmVyIHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZz0yODY9Y29tbWVudCAnSVBWUyBTSCBzY2hlZHVsZXInXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctMjg3LVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnOjI4ODpjb25maWcgSVBfVlNfU0hfVEFCX0JJVFNcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy0yODktXFx0aW50IFxcXCJJUFZTIHNvdXJjZSBoYXNoaW5nIHRhYmxlIHNpemUgKHRoZSBOdGggcG93ZXIgb2YgMilcXFwiXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZz0zMDE9Y29tbWVudCAnSVBWUyBNSCBzY2hlZHVsZXInXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctMzAyLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnOjMwMzpjb25maWcgSVBfVlNfTUhfVEFCX0lOREVYXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctMzA0LVxcdGludCBcXFwiSVBWUyBtYWdsZXYgaGFzaGluZyB0YWJsZSBpbmRleCBvZiBzaXplICh0aGUgcHJpbWUgbnVtYmVycylcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDE3OjQzOjI2LjM4NzM0NTM3M1oiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozNTg4ODIxNzgwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIGhvdyBJJ2QgYXBwcm9hY2ggdGhpcyB0YXNrLCBhcyBpZiB0aGVzZSB3ZXJlIG15IGludGVybmFsIHRob3VnaHRzOlxuXG4qKkFuYWx5emluZyBJUF9WUyBEZXBlbmRlbmNpZXMgaW4gbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZyoqXG5cblJpZ2h0LCBsZXQncyBzdGFydCBieSBkaWdnaW5nIGludG8gdGhlIGBuZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZ2AgZmlsZS4gSSBuZWVkIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2YgdGhlIGBJUF9WU2AgZGVwZW5kZW5jaWVzLCBhbmQgdGhlIGZpcnN0IDQwIGxpbmVzIGFyZSBhIGdvb2QgcGxhY2UgdG8gYmVnaW4uIFRoaXMgc2hvdWxkIGdpdmUgbWUgYSBzb2xpZCBmb3VuZGF0aW9uIGZvciB1bmRlcnN0YW5kaW5nIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgYW5kIGFueSBwcmVyZXF1aXNpdGUgbW9kdWxlcyBvciBrZXJuZWwgZmVhdHVyZXMgaW52b2x2ZWQuIEknbGwgYmUgbG9va2luZyBmb3IgdGhpbmdzIGxpa2U6XG5cbiogICAqKmBkZXBlbmRzIG9uYCBzdGF0ZW1lbnRzOioqIFRoZXNlIGFyZSB0aGUga2V5LiBUaGV5J2xsIHRlbGwgbWUgZXhhY3RseSB3aGljaCBvdGhlciBjb25maWd1cmF0aW9uIHN5bWJvbHMgbmVlZCB0byBiZSBzZXQgb3IgZW5hYmxlZCBiZWZvcmUgYElQX1ZTYCBjYW4gYmUgc2VsZWN0ZWQuXG4qICAgKipgc2VsZWN0YCBzdGF0ZW1lbnRzOioqIEFsdGhvdWdoIGxlc3MgY29tbW9uIGluIHRoaXMgY29udGV4dCwgdGhleSdsbCBoaWdobGlnaHQgc3ltYm9scyB0aGF0IGFyZSBhdXRvbWF0aWNhbGx5IGVuYWJsZWQgYXMgYSBzaWRlIGVmZmVjdCBvZiBlbmFibGluZyBgSVBfVlNgLlxuKiAgICoqQW55IGNvbmRpdGlvbmFsIGBjb25maWdgIGJsb2NrczoqKiBUaGVzZSBpbmRpY2F0ZSBjb25maWd1cmF0aW9ucyB0aGF0IG1pZ2h0IG9ubHkgYmUgcmVsZXZhbnQgdW5kZXIgc3BlY2lmaWMgY2lyY3Vtc3RhbmNlcyAoZS5nLiwgc3BlY2lmaWMgaGFyZHdhcmUgb3Iga2VybmVsIGZlYXR1cmUgZmxhZ3MpLlxuKiAgICoqQ29tbWVudHMgYW5kIGRlc2NyaXB0aW9uczoqKiBUaGVzZSBhcmUgaW52YWx1YWJsZSwgYXMgdGhleSBjYW4gcHJvdmlkZSBjb250ZXh0IGFuZCBjbGFyaWZ5IHRoZSBwdXJwb3NlIG9mIGNlcnRhaW4gZGVwZW5kZW5jaWVzIG9yIG9wdGlvbnMuIFRoZXkgb2Z0ZW4gZXhwbGFpbiAqd2h5KiBhIHBhcnRpY3VsYXIgZGVwZW5kZW5jeSBleGlzdHMuXG4qICAgKipBbnl0aGluZyB0aGF0IG1pZ2h0IGhpbnQgYXQgb3RoZXIgcmVsYXRlZCBjb25maWd1cmF0aW9uIG9wdGlvbnMqKjogU29tZXRpbWVzIHJlbGF0ZWQgb3B0aW9ucyBhcmUgbm90IGltbWVkaWF0ZWx5IG9idmlvdXMuIFRoZSBmaWxlIG1pZ2h0IGRpc2N1c3MgZmVhdHVyZXMgb3IgcmVxdWlyZW1lbnRzIHdpdGhvdXQgZXhwbGljaXRseSBzdGF0aW5nIHRoZSBuYW1lIG9mIHRoZSBvcHRpb24uXG5cbkknbSBhaW1pbmcgZm9yIGEgY29tcHJlaGVuc2l2ZSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBwcmUtcmVxdWlzaXRlcy4gVGhpcyB3aWxsIGluZm9ybSBteSBuZXh0IHN0ZXBzLCB3aGV0aGVyIEknbSBkZWJ1Z2dpbmcgYSBjb25maWd1cmF0aW9uIGlzc3VlLCBhbmFseXppbmcga2VybmVsIHBlcmZvcm1hbmNlLCBvciBzaW1wbHkgdHJ5aW5nIHRvIGdldCBhIGJldHRlciBncmFzcCBvZiB0aGUgYElQX1ZTYCBpbnRlcm5hbHMuIFRoaXMgd2lsbCBhbGxvdyBtZSB0byBiZSBmdWxseSB1cCB0byBkYXRlIGFuZCBpbiBhIHBvc2l0aW9uIHRvIGdpdmUgYSBwcmVjaXNlIGFuZCBjb3JyZWN0IGFuc3dlciB0byB3aG9ldmVyIG5lZWRzIGl0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMzQ1NiwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDE3OjQzOjI5Ljk3NjE3MTg5M1oiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzI3NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L25ldGZpbHRlci9pcHZzL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4gICAyOlxcdCNcXG4gICAzOlxcdCMgSVAgVmlydHVhbCBTZXJ2ZXIgY29uZmlndXJhdGlvblxcbiAgIDQ6XFx0I1xcbiAgIDU6XFx0bWVudWNvbmZpZyBJUF9WU1xcbiAgIDY6XFx0XFx0dHJpc3RhdGUgXFxcIklQIHZpcnR1YWwgc2VydmVyIHN1cHBvcnRcXFwiXFxuICAgNzpcXHRcXHRkZXBlbmRzIG9uIElORVQgXFx1MDAyNlxcdTAwMjYgTkVURklMVEVSXFxuICAgODpcXHRcXHRkZXBlbmRzIG9uIChORl9DT05OVFJBQ0sgfHwgTkZfQ09OTlRSQUNLPW4pXFxuICAgOTpcXHRcXHRoZWxwXFxuICAxMDpcXHRcXHQgIElQIFZpcnR1YWwgU2VydmVyIHN1cHBvcnQgd2lsbCBsZXQgeW91IGJ1aWxkIGEgaGlnaC1wZXJmb3JtYW5jZVxcbiAgMTE6XFx0XFx0ICB2aXJ0dWFsIHNlcnZlciBiYXNlZCBvbiBjbHVzdGVyIG9mIHR3byBvciBtb3JlIHJlYWwgc2VydmVycy4gVGhpc1xcbiAgMTI6XFx0XFx0ICBvcHRpb24gbXVzdCBiZSBlbmFibGVkIGZvciBhdCBsZWFzdCBvbmUgb2YgdGhlIGNsdXN0ZXJlZCBjb21wdXRlcnNcXG4gIDEzOlxcdFxcdCAgdGhhdCB3aWxsIHRha2UgY2FyZSBvZiBpbnRlcmNlcHRpbmcgaW5jb21pbmcgY29ubmVjdGlvbnMgdG8gYVxcbiAgMTQ6XFx0XFx0ICBzaW5nbGUgSVAgYWRkcmVzcyBhbmQgc2NoZWR1bGluZyB0aGVtIHRvIHJlYWwgc2VydmVycy5cXG4gIDE1OlxcdFxcbiAgMTY6XFx0XFx0ICBUaHJlZSByZXF1ZXN0IGRpc3BhdGNoaW5nIHRlY2huaXF1ZXMgYXJlIGltcGxlbWVudGVkLCB0aGV5IGFyZVxcbiAgMTc6XFx0XFx0ICB2aXJ0dWFsIHNlcnZlciB2aWEgTkFULCB2aXJ0dWFsIHNlcnZlciB2aWEgdHVubmVsaW5nIGFuZCB2aXJ0dWFsXFxuICAxODpcXHRcXHQgIHNlcnZlciB2aWEgZGlyZWN0IHJvdXRpbmcuIFRoZSBzZXZlcmFsIHNjaGVkdWxpbmcgYWxnb3JpdGhtcyBjYW5cXG4gIDE5OlxcdFxcdCAgYmUgdXNlZCB0byBjaG9vc2Ugd2hpY2ggc2VydmVyIHRoZSBjb25uZWN0aW9uIGlzIGRpcmVjdGVkIHRvLFxcbiAgMjA6XFx0XFx0ICB0aHVzIGxvYWQgYmFsYW5jaW5nIGNhbiBiZSBhY2hpZXZlZCBhbW9uZyB0aGUgc2VydmVycy4gIEZvciBtb3JlXFxuICAyMTpcXHRcXHQgIGluZm9ybWF0aW9uIGFuZCBpdHMgYWRtaW5pc3RyYXRpb24gcHJvZ3JhbSwgcGxlYXNlIHZpc2l0IHRoZVxcbiAgMjI6XFx0XFx0ICBmb2xsb3dpbmcgVVJMOiBcXHUwMDNjaHR0cDovL3d3dy5saW51eHZpcnR1YWxzZXJ2ZXIub3JnL1xcdTAwM2UuXFxuICAyMzpcXHRcXG4gIDI0OlxcdFxcdCAgSWYgeW91IHdhbnQgdG8gY29tcGlsZSBpdCBpbiBrZXJuZWwsIHNheSBZLiBUbyBjb21waWxlIGl0IGFzIGFcXG4gIDI1OlxcdFxcdCAgbW9kdWxlLCBjaG9vc2UgTSBoZXJlLiBJZiB1bnN1cmUsIHNheSBOLlxcbiAgMjY6XFx0XFxuICAyNzpcXHRpZiBJUF9WU1xcbiAgMjg6XFx0XFxuICAyOTpcXHRjb25maWdcXHRJUF9WU19JUFY2XFxuICAzMDpcXHRcXHRib29sIFxcXCJJUHY2IHN1cHBvcnQgZm9yIElQVlNcXFwiXFxuICAzMTpcXHRcXHRkZXBlbmRzIG9uIElQVjYgPSB5IHx8IElQX1ZTID0gSVBWNlxcbiAgMzI6XFx0XFx0c2VsZWN0IE5GX0RFRlJBR19JUFY2XFxuICAzMzpcXHRcXHRoZWxwXFxuICAzNDpcXHRcXHQgIEFkZCBJUHY2IHN1cHBvcnQgdG8gSVBWUy5cXG4gIDM1OlxcdFxcbiAgMzY6XFx0XFx0ICBTYXkgWSBpZiB1bnN1cmUuXFxuICAzNzpcXHRcXG4gIDM4OlxcdGNvbmZpZ1xcdElQX1ZTX0RFQlVHXFxuICAzOTpcXHRcXHRib29sIFxcXCJJUCB2aXJ0dWFsIHNlcnZlciBkZWJ1Z2dpbmdcXFwiXFxuICA0MDpcXHRcXHRoZWxwXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDE3OjQzOjI5Ljk3NjM0NzE0M1oiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNTQ0NTkzMDg1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgdGhlIHN1bW1hcnksIHJlbmRlcmVkIGluIHRoZSBmaXJzdCBwZXJzb24sIGFzc3VtaW5nIEknbSBhbiBleHBlcnQ6XG5cbioqSW52ZXN0aWdhdGluZyB0aGUgSVBWUyBCdWlsZCBQcm9jZXNzKipcblxuUmlnaHQsIGxldCdzIGRpdmUgc3RyYWlnaHQgaW4uIEkgbmVlZCB0byB1bmRlcnN0YW5kIGV4YWN0bHkgaG93IGBpcF92c19zeW5jLm9gIGdldHMgY29tcGlsZWQgd2l0aGluIHRoZSBJUFZTIGZyYW1ld29yay4gVGhlIG1vc3QgbG9naWNhbCBwbGFjZSB0byBzdGFydCBkaWdnaW5nIGlzIHRoZSBgbmV0L25ldGZpbHRlci9pcHZzL01ha2VmaWxlYC4gVGhhdCBmaWxlIGlzIHRoZSBjZW50cmFsIHBvaW50IG9mIHRydXRoIGZvciBob3cgdGhlIElQVlMgbW9kdWxlcyBhcmUgY29uc3RydWN0ZWQsIGFuZCBpdCBzaG91bGQgY2xlYXJseSBvdXRsaW5lIHRoZSBkZXBlbmRlbmNpZXMgYW5kIGJ1aWxkIGNvbW1hbmRzIGZvciBhbGwgdGhlIG9iamVjdCBmaWxlcywgaW5jbHVkaW5nIHRoZSBvbmUgSSdtIGludGVyZXN0ZWQgaW46IGBpcF92c19zeW5jLm9gLiBJJ20gZXhwZWN0aW5nIHRvIGZpbmQgdGhlIHN0YW5kYXJkIEdOVSBtYWtlIHN5bnRheCBpbiB0aGVyZSwgaG9wZWZ1bGx5IHdpdGggY2xlYXIgdmFyaWFibGUgYXNzaWdubWVudHMgYW5kIHJ1bGVzIHRoYXQgZGV0YWlsIHRoZSBjb21waWxlciBmbGFncyBhbmQgbGlua2luZyBzdGVwcy4gSSdtIGhvcGluZyBpdCdzIHdlbGwtc3RydWN0dXJlZCBlbm91Z2ggdGhhdCBJIGNhbiBxdWlja2x5IHRyYWNlIHRoZSBkZXBlbmRlbmNpZXMgYmFjayBhbmQgZ3Jhc3AgYW55IHBvdGVudGlhbCBpc3N1ZXMgb3IgbW9kaWZpY2F0aW9ucyB0aGF0IG1pZ2h0IGJlIHJlbGV2YW50IHRvIG15IGN1cnJlbnQgaW52ZXN0aWdhdGlvbi4gSG9wZWZ1bGx5IGl0J3Mgbm90IGEgY29tcGxldGUgbWVzcyBvZiBpbmNsdWRlcyBhbmQgbWFjcm9zIVxuXG5cbiIsIklucHV0VG9rZW5zIjoyNDQ4MSwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTc6NDM6MzIuNTIwOTQ0ODI4WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzMTUyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvbmV0ZmlsdGVyL2lwdnMvTWFrZWZpbGVcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogMzBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuICAgMjpcXHQjXFxuICAgMzpcXHQjIE1ha2VmaWxlIGZvciB0aGUgSVBWUyBtb2R1bGVzIG9uIHRvcCBvZiBJUHY0LlxcbiAgIDQ6XFx0I1xcbiAgIDU6XFx0XFxuICAgNjpcXHQjIElQVlMgdHJhbnNwb3J0IHByb3RvY29sIGxvYWQgYmFsYW5jaW5nIHN1cHBvcnRcXG4gICA3OlxcdGlwX3ZzX3Byb3RvLW9ianMteSA6PVxcbiAgIDg6XFx0aXBfdnNfcHJvdG8tb2Jqcy0kKENPTkZJR19JUF9WU19QUk9UT19UQ1ApICs9IGlwX3ZzX3Byb3RvX3RjcC5vXFxuICAgOTpcXHRpcF92c19wcm90by1vYmpzLSQoQ09ORklHX0lQX1ZTX1BST1RPX1VEUCkgKz0gaXBfdnNfcHJvdG9fdWRwLm9cXG4gIDEwOlxcdGlwX3ZzX3Byb3RvLW9ianMtJChDT05GSUdfSVBfVlNfUFJPVE9fQUhfRVNQKSArPSBpcF92c19wcm90b19haF9lc3Aub1xcbiAgMTE6XFx0aXBfdnNfcHJvdG8tb2Jqcy0kKENPTkZJR19JUF9WU19QUk9UT19TQ1RQKSArPSBpcF92c19wcm90b19zY3RwLm9cXG4gIDEyOlxcdFxcbiAgMTM6XFx0aXBfdnMtZXh0cmFfb2Jqcy15IDo9XFxuICAxNDpcXHRpcF92cy1leHRyYV9vYmpzLSQoQ09ORklHX0lQX1ZTX05GQ1QpICs9IGlwX3ZzX25mY3Qub1xcbiAgMTU6XFx0XFxuICAxNjpcXHRpcF92cy1vYmpzIDo9XFx0aXBfdnNfY29ubi5vIGlwX3ZzX2NvcmUubyBpcF92c19jdGwubyBpcF92c19zY2hlZC5vXFx0ICAgXFxcXFxcbiAgMTc6XFx0XFx0XFx0aXBfdnNfeG1pdC5vIGlwX3ZzX2FwcC5vIGlwX3ZzX3N5bmMub1xcdCAgIFxcdFxcdCAgIFxcXFxcXG4gIDE4OlxcdFxcdFxcdGlwX3ZzX2VzdC5vIGlwX3ZzX3Byb3RvLm8gaXBfdnNfcGUub1xcdFxcdFxcdCAgIFxcXFxcXG4gIDE5OlxcdFxcdFxcdCQoaXBfdnNfcHJvdG8tb2Jqcy15KSAkKGlwX3ZzLWV4dHJhX29ianMteSlcXG4gIDIwOlxcdFxcbiAgMjE6XFx0XFxuICAyMjpcXHQjIElQVlMgY29yZVxcbiAgMjM6XFx0b2JqLSQoQ09ORklHX0lQX1ZTKSArPSBpcF92cy5vXFxuICAyNDpcXHRcXG4gIDI1OlxcdCMgSVBWUyBzY2hlZHVsZXJzXFxuICAyNjpcXHRvYmotJChDT05GSUdfSVBfVlNfUlIpICs9IGlwX3ZzX3JyLm9cXG4gIDI3OlxcdG9iai0kKENPTkZJR19JUF9WU19XUlIpICs9IGlwX3ZzX3dyci5vXFxuICAyODpcXHRvYmotJChDT05GSUdfSVBfVlNfTEMpICs9IGlwX3ZzX2xjLm9cXG4gIDI5OlxcdG9iai0kKENPTkZJR19JUF9WU19XTEMpICs9IGlwX3ZzX3dsYy5vXFxuICAzMDpcXHRvYmotJChDT05GSUdfSVBfVlNfRk8pICs9IGlwX3ZzX2ZvLm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTc6NDM6MzIuNTIxMDc5Mzk4WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI5NDQ3NTU2NzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIElQVlMgU3luY2hyb25pemF0aW9uIGluIHRoZSBLZXJuZWwqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBgaXBfdnNfc3luYy5vYCBoZXJlLiBJdCdzIHJpZ2h0IHRoZXJlLCBuZXN0bGVkIHdpdGhpbiBgaXBfdnMtb2Jqc2AsIGFuZCB0aGF0J3MgdHJpZ2dlcmVkIHdoZW4gYENPTkZJR19JUF9WU2AgaXMgZW5hYmxlZCDigJMgbWFrZXMgcGVyZmVjdCBzZW5zZS4gSSBrbm93IGBJUF9WU2AgaXMgZGVwZW5kZW50IG9uIGJvdGggYElORVRgIGFuZCBgTkVURklMVEVSYCwgdGhlIHVzdWFsIHN1c3BlY3RzLiBOb3csIHRoZSByZWFsIHF1ZXN0aW9uIGlzLCBhcmUgdGhlcmUgKm90aGVyKiBjb25maWd1cmF0aW9uIG9wdGlvbnMgSSBuZWVkIHRvIGNvbnNpZGVyIGZvciBJUFZTIHN5bmNocm9uaXphdGlvbj8gSSdsbCBxdWlja2x5IGNoZWNrIGZvciB0aGluZ3MgbGlrZSBgQ09ORklHX0lQX1ZTX0lQVjZgLCBgQ09ORklHX0lQX1ZTX1BST1RPX1RDUGAsIHlvdSBrbm93LCBhbnkgZGVwZW5kZW5jaWVzIG9yIHJlbGF0ZWQgY29uZmlndXJhdGlvbnMuIEkgc3VzcGVjdCBgSVBfVlNgIGl0c2VsZiBpcyB0aGUgcHJpbWFyeSBvbmUsIGJ1dCBJIHdhbnQgdG8gYmUgdGhvcm91Z2guXG5cblJpZ2h0LCB0aW1lIHRvIG1vdmUgb24gdG8gYEZvY3VzU3ltYm9sc2AuIExldCdzIHNlZSwgdGhlIGNvcmUgZnVuY3Rpb25zIG1vZGlmaWVkIGhlcmUgYXJlIGBpcF92c19zeW5jX2Nvbm5gIGFuZCBgaXBfdnNfc3luY19jb25uX3YwYC4gVGhhdCBnaXZlcyBtZSBhIGRpcmVjdCBsaW5lIG9mIHNpZ2h0LlxuXG5OZXh0IHN0ZXA6IEknbSBnb2luZyB0byBuZWVkIHRvIHRyYWNlIGRvd24gdGhlIGNhbGxlcnMgb2YgYGlwX3ZzX3N5bmNfY29ubmAgYW5kIGFueSBvdGhlciByZWxhdGVkIGZ1bmN0aW9ucy4gVGhpcyB3aWxsIGhlbHAgbWUgdW5kZXJzdGFuZCB0aGUgY29udGV4dCBvZiB0aGUgY2hhbmdlcyBhbmQgaG93IHRoZXNlIHN5bmNocm9uaXphdGlvbiBmdW5jdGlvbnMgYXJlIGludGVncmF0ZWQgd2l0aGluIHRoZSBicm9hZGVyIElQVlMgZWNvc3lzdGVtLiBVbmRlcnN0YW5kaW5nIHRoZSBjYWxsIGdyYXBoIHdpbGwgcmVhbGx5IGNsYXJpZnkgdGhlIGltcGFjdCBhbmQgaW1wbGljYXRpb25zIG9mIHRoZSBtb2RpZmljYXRpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNTM4NCwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4MiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDE3OjQzOjM1LjQ2NTgzOTEzOFoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzAyNjM1MDcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlwX3ZzX3N5bmNfY29ublwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL2lwdnMvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmM9MTM0Nz1zdGF0aWMgdm9pZCBpcF92c19jb25uX2V4cGlyZShzdHJ1Y3QgdGltZXJfbGlzdCAqdClcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmMtMTQxNi1cXHRpZiAoaXB2cy1cXHUwMDNlc3luY19zdGF0ZSBcXHUwMDI2IElQX1ZTX1NUQVRFX01BU1RFUilcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jOjE0MTc6XFx0XFx0aXBfdnNfc3luY19jb25uKGlwdnMsIGNwLCBzeXNjdGxfc3luY190aHJlc2hvbGQoaXB2cykpO1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmMtMTQxOC1cXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmM9MjA5Nj1pcF92c19pbl9ob29rKHZvaWQgKnByaXYsIHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCBuZl9ob29rX3N0YXRlICpzdGF0ZSlcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmMtMjI2Ni1cXHQgKlxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmM6MjI2NzpcXHQgKiBGb3IgT05FX1BLVCBsZXQgaXBfdnNfc3luY19jb25uKCkgZG8gdGhlIGZpbHRlciB3b3JrLlxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmMtMjI2OC1cXHQgKi9cXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmMtMjI3NS1cXHRpZiAoaXB2cy1cXHUwMDNlc3luY19zdGF0ZSBcXHUwMDI2IElQX1ZTX1NUQVRFX01BU1RFUilcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jOjIyNzY6XFx0XFx0aXBfdnNfc3luY19jb25uKGlwdnMsIGNwLCBwa3RzKTtcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jLTIyNzctXFx0ZWxzZSBpZiAoKGNwLVxcdTAwM2VmbGFncyBcXHUwMDI2IElQX1ZTX0NPTk5fRl9PTkVfUEFDS0VUKSBcXHUwMDI2XFx1MDAyNiBjcC1cXHUwMDNlY29udHJvbClcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jOjIyNzg6XFx0XFx0LyogaW5jcmVtZW50IGlzIGRvbmUgaW5zaWRlIGlwX3ZzX3N5bmNfY29ubiB0b28gKi9cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jLTIyNzktXFx0XFx0YXRvbWljX2luYyhcXHUwMDI2Y3AtXFx1MDAzZWNvbnRyb2wtXFx1MDAzZWluX3BrdHMpO1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy0xMy0gKiAgICAgICAgICAgICAgdGltZS1vdXRzLCBhbmQgZmlyZXdhbGwgbWFya3MuXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzoxNDogKiAgICAgICAgICAgICAgSW4gdmVyLjEgXFxcImlwX3ZzX3N5bmNfY29ubl9vcHRpb25zXFxcIiB3aWxsIGJlIHNlbnQgaW4gbmV0dy4gb3JkZXIuXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy0xNS0gKiAgICAgICAgICAgICAgVmVyLiAwIGNhbiBiZSB0dXJuZWQgb24gYnkgc3lzY3RsIC13IG5ldC5pcHY0LnZzLnN5bmNfdmVyc2lvbj0wXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jPTY1PXN0YXRpYyBzdHJ1Y3QgbG9ja19jbGFzc19rZXkgX19pcHZzX3N5bmNfa2V5O1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy02OS0gKi9cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjcwOnN0cnVjdCBpcF92c19zeW5jX2Nvbm5fdjAge1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtNzEtXFx0X191OFxcdFxcdFxcdHJlc2VydmVkO1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy04OC1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjg5OnN0cnVjdCBpcF92c19zeW5jX2Nvbm5fb3B0aW9ucyB7XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy05MC1cXHRzdHJ1Y3QgaXBfdnNfc2VxICAgICAgICBpbl9zZXE7ICAgICAgICAgLyogaW5jb21pbmcgc2VxLiBzdHJ1Y3QgKi9cXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM9MTU0PXN0cnVjdCBpcF92c19zeW5jX3Y2IHtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMTczLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6MTc0OnVuaW9uIGlwX3ZzX3N5bmNfY29ubiB7XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy0xNzUtXFx0c3RydWN0IGlwX3ZzX3N5bmNfdjRcXHR2NDtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM9MTk2PXN0cnVjdCBpcF92c19zeW5jX3RocmVhZF9kYXRhIHtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMjA0LS8qIFZlcnNpb24gMCBkZWZpbml0aW9uIG9mIHBhY2tldCBzaXplcyAqL1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6MjA1OiNkZWZpbmUgU0lNUExFX0NPTk5fU0laRSAgKHNpemVvZihzdHJ1Y3QgaXBfdnNfc3luY19jb25uX3YwKSlcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTIwNi0jZGVmaW5lIEZVTExfQ09OTl9TSVpFICBcXFxcXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzoyMDc6KHNpemVvZihzdHJ1Y3QgaXBfdnNfc3luY19jb25uX3YwKSArIHNpemVvZihzdHJ1Y3QgaXBfdnNfc3luY19jb25uX29wdGlvbnMpKVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMjA4LVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYz0yNDU9c3RydWN0IGlwX3ZzX3N5bmNfbWVzZ192MCB7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTI0OS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjI1MDpcXHQvKiBpcF92c19zeW5jX2Nvbm4gZW50cmllcyBzdGFydCBoZXJlICovXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy0yNTEtfTtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM9MjU0PXN0cnVjdCBpcF92c19zeW5jX21lc2cge1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy0yNjAtXFx0X191MTZcXHRcXHRcXHRzcGFyZTtcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjI2MTpcXHQvKiBpcF92c19zeW5jX2Nvbm4gZW50cmllcyBzdGFydCBoZXJlICovXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy0yNjItfTtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM9NDQxPXN0YXRpYyBpbmxpbmUgYm9vbCBpbl9wZXJzaXN0ZW5jZShzdHJ1Y3QgaXBfdnNfY29ubiAqY3ApXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTQ1OC0gKi9cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjQ1OTpzdGF0aWMgaW50IGlwX3ZzX3N5bmNfY29ubl9uZWVkZWQoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy00NjAtXFx0XFx0XFx0XFx0ICBzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsIGludCBwa3RzKVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy01MzgtICovXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzo1Mzk6c3RhdGljIHZvaWQgaXBfdnNfc3luY19jb25uX3YwKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy01NDAtXFx0XFx0XFx0ICAgICAgIGludCBwa3RzKVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy01NDItXFx0c3RydWN0IGlwX3ZzX3N5bmNfbWVzZ192MCAqbTtcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjU0MzpcXHRzdHJ1Y3QgaXBfdnNfc3luY19jb25uX3YwICpzO1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtNTQ0LVxcdHN0cnVjdCBpcF92c19zeW5jX2J1ZmYgKmJ1ZmY7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTU1Ni1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjU1NzpcXHRpZiAoIWlwX3ZzX3N5bmNfY29ubl9uZWVkZWQoaXB2cywgY3AsIHBrdHMpKVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtNTU4LVxcdFxcdHJldHVybjtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtNTkwLVxcdG0gPSAoc3RydWN0IGlwX3ZzX3N5bmNfbWVzZ192MCAqKSBidWZmLVxcdTAwM2VtZXNnO1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6NTkxOlxcdHMgPSAoc3RydWN0IGlwX3ZzX3N5bmNfY29ubl92MCAqKSBidWZmLVxcdTAwM2VoZWFkO1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtNTkyLVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy02MDQtXFx0aWYgKHNlcV9tYXNrKSB7XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzo2MDU6XFx0XFx0c3RydWN0IGlwX3ZzX3N5bmNfY29ubl9vcHRpb25zICpvcHQgPVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6NjA2OlxcdFxcdFxcdChzdHJ1Y3QgaXBfdnNfc3luY19jb25uX29wdGlvbnMgKilcXHUwMDI2c1sxXTtcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTYwNy1cXHRcXHRtZW1jcHkob3B0LCBcXHUwMDI2Y3AtXFx1MDAzZXN5bmNfY29ubl9vcHQsIHNpemVvZigqb3B0KSk7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTYyMS1cXHRcXHRcXHRwa3RzID0gc3lzY3RsX3N5bmNfdGhyZXNob2xkKGlwdnMpO1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6NjIyOlxcdFxcdGlwX3ZzX3N5bmNfY29ubihpcHZzLCBjcCwgcGt0cyk7XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy02MjMtXFx0fVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy02MzAtICovXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzo2MzE6dm9pZCBpcF92c19zeW5jX2Nvbm4oc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIHN0cnVjdCBpcF92c19jb25uICpjcCwgaW50IHBrdHMpXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy02MzIte1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtNjMzLVxcdHN0cnVjdCBpcF92c19zeW5jX21lc2cgKm07XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzo2MzQ6XFx0dW5pb24gaXBfdnNfc3luY19jb25uICpzO1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtNjM1LVxcdHN0cnVjdCBpcF92c19zeW5jX2J1ZmYgKmJ1ZmY7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTY0My1cXHRpZiAoc3lzY3RsX3N5bmNfdmVyKGlwdnMpID09IDApIHtcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjY0NDpcXHRcXHRpcF92c19zeW5jX2Nvbm5fdjAoaXB2cywgY3AsIHBrdHMpO1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtNjQ1LVxcdFxcdHJldHVybjtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtNjUwLXNsb29wOlxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6NjUxOlxcdGlmICghaXBfdnNfc3luY19jb25uX25lZWRlZChpcHZzLCBjcCwgcGt0cykpXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy02NTItXFx0XFx0Z290byBjb250cm9sO1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy02ODItXFx0aWYgKHNlcV9tYXNrKVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6NjgzOlxcdFxcdGxlbiArPSBzaXplb2Yoc3RydWN0IGlwX3ZzX3N5bmNfY29ubl9vcHRpb25zKSArIDI7XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy02ODQtXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTcyMi1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjcyMzpcXHRzID0gKHVuaW9uIGlwX3ZzX3N5bmNfY29ubiAqKXA7XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy03MjQtXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTc1My1cXHRcXHQqKHArKykgPSBJUFZTX09QVF9TRVFfREFUQTtcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjc1NDpcXHRcXHQqKHArKykgPSBzaXplb2Yoc3RydWN0IGlwX3ZzX3N5bmNfY29ubl9vcHRpb25zKTtcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTc1NS1cXHRcXHRodG9uX3NlcShcXHUwMDI2Y3AtXFx1MDAzZWluX3NlcSwgKHN0cnVjdCBpcF92c19zZXEgKilwKTtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM9NzkyPXN0YXRpYyBpbmxpbmUgaW50XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzo3OTM6aXBfdnNfY29ubl9maWxsX3BhcmFtX3N5bmMoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIGludCBhZiwgdW5pb24gaXBfdnNfc3luY19jb25uICpzYyxcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTc5NC1cXHRcXHRcXHQgICBzdHJ1Y3QgaXBfdnNfY29ubl9wYXJhbSAqcCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM9ODQ2PXN0YXRpYyB2b2lkIGlwX3ZzX3Byb2NfY29ubihzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgc3RydWN0IGlwX3ZzX2Nvbm5fcGFyYW0gKnBhcmFtLFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy04NTAtXFx0XFx0XFx0ICAgIHVuc2lnbmVkIGxvbmcgdGltZW91dCwgX191MzIgZndtYXJrLFxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6ODUxOlxcdFxcdFxcdCAgICBzdHJ1Y3QgaXBfdnNfc3luY19jb25uX29wdGlvbnMgKm9wdClcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTg1Mi17XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jPTk2MD1zdGF0aWMgdm9pZCBpcF92c19wcm9jZXNzX21lc3NhZ2VfdjAoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIGNvbnN0IGNoYXIgKmJ1ZmZlcixcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtOTYzLVxcdHN0cnVjdCBpcF92c19zeW5jX21lc2dfdjAgKm0gPSAoc3RydWN0IGlwX3ZzX3N5bmNfbWVzZ192MCAqKWJ1ZmZlcjtcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjk2NDpcXHRzdHJ1Y3QgaXBfdnNfc3luY19jb25uX3YwICpzO1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6OTY1OlxcdHN0cnVjdCBpcF92c19zeW5jX2Nvbm5fb3B0aW9ucyAqb3B0O1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtOTY2LVxcdHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHA7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTk3OC1cXHRcXHR9XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzo5Nzk6XFx0XFx0cyA9IChzdHJ1Y3QgaXBfdnNfc3luY19jb25uX3YwICopIHA7XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy05ODAtXFx0XFx0ZmxhZ3MgPSBudG9ocyhzLVxcdTAwM2VmbGFncykgfCBJUF9WU19DT05OX0ZfU1lOQztcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtOTgyLVxcdFxcdGlmIChmbGFncyBcXHUwMDI2IElQX1ZTX0NPTk5fRl9TRVFfTUFTSykge1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6OTgzOlxcdFxcdFxcdG9wdCA9IChzdHJ1Y3QgaXBfdnNfc3luY19jb25uX29wdGlvbnMgKilcXHUwMDI2c1sxXTtcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTk4NC1cXHRcXHRcXHRwICs9IEZVTExfQ09OTl9TSVpFO1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYz0xMDI5PXN0YXRpYyBpbmxpbmUgaW50IGlwX3ZzX3Byb2Nfc2Vxb3B0KF9fdTggKnAsIHVuc2lnbmVkIGludCBwbGVuLFxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMTAzMC1cXHRcXHRcXHRcXHQgICAgX191MzIgKm9wdF9mbGFncyxcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjEwMzE6XFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBpcF92c19zeW5jX2Nvbm5fb3B0aW9ucyAqb3B0KVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMTAzMi17XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzoxMDMzOlxcdHN0cnVjdCBpcF92c19zeW5jX2Nvbm5fb3B0aW9ucyAqdG9wdDtcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTEwMzQtXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzoxMDM1OlxcdHRvcHQgPSAoc3RydWN0IGlwX3ZzX3N5bmNfY29ubl9vcHRpb25zICopcDtcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTEwMzYtXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzoxMDM3OlxcdGlmIChwbGVuICE9IHNpemVvZihzdHJ1Y3QgaXBfdnNfc3luY19jb25uX29wdGlvbnMpKSB7XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy0xMDM4LVxcdFxcdElQX1ZTX0RCRygyLCBcXFwiQkFDS1VQLCBib2d1cyBjb25uIG9wdGlvbnMgbGVuZ3RoXFxcXG5cXFwiKTtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM9MTA3MT1zdGF0aWMgaW5saW5lIGludCBpcF92c19wcm9jX3N5bmNfY29ubihzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgX191OCAqcCwgX191OCAqbXNnX2VuZClcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTEwNzIte1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6MTA3MzpcXHRzdHJ1Y3QgaXBfdnNfc3luY19jb25uX29wdGlvbnMgb3B0O1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6MTA3NDpcXHR1bmlvbiAgaXBfdnNfc3luY19jb25uICpzO1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMTA3NS1cXHRzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwO1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy0xMDgyLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6MTA4MzpcXHRzID0gKHVuaW9uIGlwX3ZzX3N5bmNfY29ubiAqKSBwO1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMTA4NC1cXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM9MTIwNT1zdGF0aWMgdm9pZCBpcF92c19wcm9jZXNzX21lc3NhZ2Uoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIF9fdTggKmJ1ZmZlcixcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMTIzMy1cXHRcXHRmb3IgKGk9MDsgaVxcdTAwM2Nucl9jb25uczsgaSsrKSB7XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzoxMjM0OlxcdFxcdFxcdHVuaW9uIGlwX3ZzX3N5bmNfY29ubiAqcztcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTEyMzUtXFx0XFx0XFx0dW5zaWduZWQgaW50IHNpemU7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTEyNDItXFx0XFx0XFx0fVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6MTI0MzpcXHRcXHRcXHRzID0gKHVuaW9uIGlwX3ZzX3N5bmNfY29ubiAqKXA7XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy0xMjQ0LVxcdFxcdFxcdHNpemUgPSBudG9ocyhzLVxcdTAwM2V2NC52ZXJfc2l6ZSkgXFx1MDAyNiBTVkVSX01BU0s7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jPTE3NDA9aW50IHN0YXJ0X3N5bmNfdGhyZWFkKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBzdHJ1Y3QgaXB2c19zeW5jX2RhZW1vbl9jZmcgKmMsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTE3NTItXFx0SVBfVlNfREJHKDcsIFxcXCIlcygpOiBwaWQgJWRcXFxcblxcXCIsIF9fZnVuY19fLCB0YXNrX3BpZF9ucihjdXJyZW50KSk7XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzoxNzUzOlxcdElQX1ZTX0RCRyg3LCBcXFwiRWFjaCBpcF92c19zeW5jX2Nvbm4gZW50cnkgbmVlZHMgJXpkIGJ5dGVzXFxcXG5cXFwiLFxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6MTc1NDpcXHRcXHQgIHNpemVvZihzdHJ1Y3QgaXBfdnNfc3luY19jb25uX3YwKSk7XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy0xNzU1LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxNzo0MzozNi4xNjg0ODY2MjhaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDk2MzIyODg3MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBGdXp6aW5nIFN0cmF0ZWd5OiBBIFF1aWNrIFJldmlldyoqXG5cbk9rYXksIGxldCBtZSBxdWlja2x5IHJ1biB0aHJvdWdoIHRoaXMuIFdlIG5lZWQgdG8gbWFrZSBzdXJlIHdlJ3ZlIGNvbnNpZGVyZWQgZXZlcnl0aGluZyBiZWZvcmUgd2UgbW92ZSBmb3J3YXJkLiBSaWdodCwgc28gd2UncmUgZm9jdXNpbmcgb24gZnV6emluZyB0aGUgSVBWUyBjb25uZWN0aW9uIHN5bmNocm9uaXphdGlvbiwgYW5kIHNwZWNpZmljYWxseSB0aGUgY29ubmVjdGlvbiBoYW5kbGluZywgY29uc2lkZXJpbmcgdGhlIGtub3duIGZ1bmN0aW9ucyBtb2RpZmllZCB3aGljaCBhcmUgYGlwX3ZzX3N5bmNfY29ubmAgYW5kIGBpcF92c19zeW5jX2Nvbm5fdjBgLlxuXG5XZSd2ZSBnb3QgdGhlIHJlcXVpcmVkIGNvbmZpZ3MgaW4gcGxhY2UuIGBJUF9WU2AgaXMgdGhlIGNvcmUsIGFuZCB0aGF0IGRlcGVuZHMgb24gYElORVRgIGFuZCBgTkVURklMVEVSYCwgd2hpY2ggYXJlIHN0YW5kYXJkcywgc28gbm8gc3VycHJpc2VzIHRoZXJlLlxuXG5Ob3csIGZvciB0aGUgY3JpdGljYWwgYHNldC1yZXN1bHRzYCBwYXJhbWV0ZXJzLiBgV29ydGhGdXp6aW5nYCBoYXMgdG8gYmUgdHJ1ZSwgYmVjYXVzZSB0aGlzIGxvb2tzIHByb21pc2luZy4gVGhlIHJlYXNvbmluZyBpcyBzb2xpZDogd2UncmUgZGVhbGluZyB3aXRoIGEgcmFjZSBjb25kaXRpb24gcG90ZW50aWFsbHkuIFNwZWNpZmljYWxseSwgYW4gaW5jb25zaXN0ZW5jeSBpbiByZWFkaW5nIGBjcC1cdTAwM2VmbGFnc2AgaW4gdGhlIElQVlMgY29ubmVjdGlvbiBzeW5jaHJvbml6YXRpb24gZGFlbW9uLCBhbmQgdGhhdCBjb3VsZCBlYXNpbHkgbGVhZCB0byBtZXNzYWdlIGZyYW1pbmcgcHJvYmxlbXMgb3IgZXZlbiBidWZmZXIgY29ycnVwdGlvbi4gVGhlc2UgYXJlIHNlcmlvdXMgdnVsbmVyYWJpbGl0aWVzIGFuZCBlc3BlY2lhbGx5IHNpbmNlIHRoaXMgaXMgbmV0d29yayB0cmFmZmljLXJlYWNoYWJsZSwgd2Ugc2hvdWxkIHByaW9yaXRpemUgdGhpcy4gVGhlIGZ1enppbmcgc2hvdWxkIGZvY3VzIG9uIHRob3NlIGZ1bmN0aW9ucyBtZW50aW9uZWQgYmVmb3JlLCBgaXBfdnNfc3luY19jb25uYCBhbmQgYGlwX3ZzX3N5bmNfY29ubl92MGAsIGFuZCBvZiBjb3Vyc2UgdGhlIGNvbmZpZ3Mgd2Ugc3BlY2lmaWVkIGVhcmxpZXIgbXVzdCBiZSBlbmFibGVkLCBzbyBgSVBfVlNgLCBgTkVURklMVEVSYCwgYW5kIGBJTkVUYC5cblxuQWxyaWdodCwgSSdtIHJlYWR5LiBMZXQncyBjYWxsIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMwNTUzLCJPdXRwdXRUb2tlbnMiOjE0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxNzo0Mzo0MS4xMzE3MTkwMDlaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMDE5OTk5MDcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIklQX1ZTXCIsXG4gICAgXCJORVRGSUxURVJcIixcbiAgICBcIklORVRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJpcF92c19zeW5jX2Nvbm5cIixcbiAgICBcImlwX3ZzX3N5bmNfY29ubl92MFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHJlYWNoYWJsZSBuZXR3b3JraW5nIGNvZGUgaW4gdGhlIElQVlMgY29ubmVjdGlvbiBzeW5jaHJvbml6YXRpb24gc3Vic3lzdGVtIChuZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jKS4gSXQgdXNlcyBSRUFEX09OQ0UgYW5kIGNhY2hlcyBjcC1cXHUwMDNlZmxhZ3MgbG9jYWxseSB0byBhdm9pZCBkYXRhIHJhY2VzIGFuZCBpbmNvbnNpc3RlbmNpZXMgYmV0d2VlbiBwYWNrZXQgbGVuZ3RoIGNhbGN1bGF0aW9uIGFuZCBzZXF1ZW5jZSBvcHRpb24gc2VyaWFsaXphdGlvbi4gRnV6emluZyBpcyB3YXJyYW50ZWQgdG8gdGVzdCBzeW5jaHJvbml6YXRpb24gbWVzc2FnZSBjb25zdHJ1Y3Rpb24gYW5kIHN0YXRlIGhhbmRsaW5nIHVuZGVyIGNvbmN1cnJlbmN5LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIklQX1ZTXCIsXG4gICAgXCJORVRGSUxURVJcIixcbiAgICBcIklORVRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJpcF92c19zeW5jX2Nvbm5cIixcbiAgICBcImlwX3ZzX3N5bmNfY29ubl92MFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHJlYWNoYWJsZSBuZXR3b3JraW5nIGNvZGUgaW4gdGhlIElQVlMgY29ubmVjdGlvbiBzeW5jaHJvbml6YXRpb24gc3Vic3lzdGVtIChuZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jKS4gSXQgdXNlcyBSRUFEX09OQ0UgYW5kIGNhY2hlcyBjcC1cXHUwMDNlZmxhZ3MgbG9jYWxseSB0byBhdm9pZCBkYXRhIHJhY2VzIGFuZCBpbmNvbnNpc3RlbmNpZXMgYmV0d2VlbiBwYWNrZXQgbGVuZ3RoIGNhbGN1bGF0aW9uIGFuZCBzZXF1ZW5jZSBvcHRpb24gc2VyaWFsaXphdGlvbi4gRnV6emluZyBpcyB3YXJyYW50ZWQgdG8gdGVzdCBzeW5jaHJvbml6YXRpb24gbWVzc2FnZSBjb25zdHJ1Y3Rpb24gYW5kIHN0YXRlIGhhbmRsaW5nIHVuZGVyIGNvbmN1cnJlbmN5LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxNzo0Mzo0MS4zMzM3Mjk2OTdaIiwiU2VxIjoyMSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3NjIyODg0OTE3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTc6NDM6NDEuMzM0NjUzODM3WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MTc2MjE5NTQyMDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHJlc3NlcyBhIGNvbmN1cnJlbmN5IGlzc3VlIGluIElQVlMgY29ubmVjdGlvbiBzeW5jaHJvbml6YXRpb24gKGlwX3ZzX3N5bmNfY29ubiBhbmQgaXBfdnNfc3luY19jb25uX3YwKSB3aGVyZSBjcC1cXHUwMDNlZmxhZ3Mgd2FzIHJlYWQgbXVsdGlwbGUgdGltZXMgd2l0aG91dCBSRUFEX09OQ0UsIHBvdGVudGlhbGx5IGNhdXNpbmcgYSBtaXNtYXRjaCBiZXR3ZWVuIHRoZSBjYWxjdWxhdGVkIGJ1ZmZlciBsZW5ndGggYW5kIHRoZSBhY3R1YWwgZGF0YSB3cml0dGVuIGlmIGZsYWdzIHdlcmUgbW9kaWZpZWQgY29uY3VycmVudGx5LlxcblxcblRoZSBmaXggaW50cm9kdWNlcyBsb2NhbCBzY2FsYXIgdmFyaWFibGVzIChmbGFncywgc2VxX21hc2spIHRoYXQgYXJlIGltbWVkaWF0ZWx5IGluaXRpYWxpemVkIHZpYSBSRUFEX09OQ0UoY3AtXFx1MDAzZWZsYWdzKS4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgdW5pbml0aWFsaXplZCBzdGFjayBvciBoZWFwIGFsbG9jYXRpb25zLCB1bmluaXRpYWxpemVkIHN0cnVjdHVyZSBmaWVsZHMsIGluZm8tbGVha3MgdG8gdXNlcnNwYWNlLCBvciByZWFkcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhlIHJpc2tzIGFzc29jaWF0ZWQgd2l0aCB0aGUgb3JpZ2luYWwgcmFjZSBjb25kaXRpb24gKG91dC1vZi1ib3VuZHMgYnVmZmVyIHdyaXRlcyAvIGRhdGEgY29ycnVwdGlvbikgYXJlIGNvdmVyZWQgYnkgS0FTQU4gYW5kIEtDU0FOLCBzbyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAzNTVlZDFiZmI3ZDVmNjI0M2VlYWU0YjczYTE4Nzk0ZTYxMGY4Y2U2XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBTZXAgOSAxNzo0Mjo1OSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jXG5pbmRleCA1MzgzYWVhZmIwYWVkLi5kZmE4NDg3ZWMwYzIwIDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuY1xuKysrIGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuY1xuQEAgLTU0MywxMyArNTQzLDE1IEBAIHN0YXRpYyB2b2lkIGlwX3ZzX3N5bmNfY29ubl92MChzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLFxuIFx0c3RydWN0IGlwX3ZzX3N5bmNfY29ubl92MCAqcztcbiBcdHN0cnVjdCBpcF92c19zeW5jX2J1ZmYgKmJ1ZmY7XG4gXHRzdHJ1Y3QgaXB2c19tYXN0ZXJfc3luY19zdGF0ZSAqbXM7XG4tXHRpbnQgaWQ7XG4rXHR1MzIgZmxhZ3MsIHNlcV9tYXNrO1xuIFx0dW5zaWduZWQgaW50IGxlbjtcbitcdGludCBpZDtcbiBcbiBcdGlmICh1bmxpa2VseShjcC1cdTAwM2VhZiAhPSBBRl9JTkVUKSlcbiBcdFx0cmV0dXJuO1xuK1x0ZmxhZ3MgPSBSRUFEX09OQ0UoY3AtXHUwMDNlZmxhZ3MpO1xuIFx0LyogRG8gbm90IHN5bmMgT05FIFBBQ0tFVCAqL1xuLVx0aWYgKGNwLVx1MDAzZWZsYWdzIFx1MDAyNiBJUF9WU19DT05OX0ZfT05FX1BBQ0tFVClcbitcdGlmIChmbGFncyBcdTAwMjYgSVBfVlNfQ09OTl9GX09ORV9QQUNLRVQpXG4gXHRcdHJldHVybjtcbiBcbiBcdGlmICghaXBfdnNfc3luY19jb25uX25lZWRlZChpcHZzLCBjcCwgcGt0cykpXG5AQCAtNTY0LDggKzU2Niw4IEBAIHN0YXRpYyB2b2lkIGlwX3ZzX3N5bmNfY29ubl92MChzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLFxuIFx0aWQgPSBzZWxlY3RfbWFzdGVyX3RocmVhZF9pZChpcHZzLCBjcCk7XG4gXHRtcyA9IFx1MDAyNmlwdnMtXHUwMDNlbXNbaWRdO1xuIFx0YnVmZiA9IG1zLVx1MDAzZXN5bmNfYnVmZjtcbi1cdGxlbiA9IChjcC1cdTAwM2VmbGFncyBcdTAwMjYgSVBfVlNfQ09OTl9GX1NFUV9NQVNLKSA/IEZVTExfQ09OTl9TSVpFIDpcbi1cdFx0U0lNUExFX0NPTk5fU0laRTtcbitcdHNlcV9tYXNrID0gZmxhZ3MgXHUwMDI2IElQX1ZTX0NPTk5fRl9TRVFfTUFTSztcbitcdGxlbiA9IHNlcV9tYXNrID8gRlVMTF9DT05OX1NJWkUgOiBTSU1QTEVfQ09OTl9TSVpFO1xuIFx0aWYgKGJ1ZmYpIHtcbiBcdFx0bSA9IChzdHJ1Y3QgaXBfdnNfc3luY19tZXNnX3YwICopIGJ1ZmYtXHUwMDNlbWVzZztcbiBcdFx0LyogU2VuZCBidWZmZXIgaWYgaXQgaXMgZm9yIHYxICovXG5AQCAtNTk3LDkgKzU5OSw5IEBAIHN0YXRpYyB2b2lkIGlwX3ZzX3N5bmNfY29ubl92MChzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLFxuIFx0cy1cdTAwM2VjYWRkciA9IGNwLVx1MDAzZWNhZGRyLmlwO1xuIFx0cy1cdTAwM2V2YWRkciA9IGNwLVx1MDAzZXZhZGRyLmlwO1xuIFx0cy1cdTAwM2VkYWRkciA9IGNwLVx1MDAzZWRhZGRyLmlwO1xuLVx0cy1cdTAwM2VmbGFncyA9IGh0b25zKGNwLVx1MDAzZWZsYWdzIFx1MDAyNiB+SVBfVlNfQ09OTl9GX0hBU0hFRCk7XG4rXHRzLVx1MDAzZWZsYWdzID0gaHRvbnMoZmxhZ3MgXHUwMDI2IH5JUF9WU19DT05OX0ZfSEFTSEVEKTtcbiBcdHMtXHUwMDNlc3RhdGUgPSBodG9ucyhjcC1cdTAwM2VzdGF0ZSk7XG4tXHRpZiAoY3AtXHUwMDNlZmxhZ3MgXHUwMDI2IElQX1ZTX0NPTk5fRl9TRVFfTUFTSykge1xuK1x0aWYgKHNlcV9tYXNrKSB7XG4gXHRcdHN0cnVjdCBpcF92c19zeW5jX2Nvbm5fb3B0aW9ucyAqb3B0ID1cbiBcdFx0XHQoc3RydWN0IGlwX3ZzX3N5bmNfY29ubl9vcHRpb25zICopXHUwMDI2c1sxXTtcbiBcdFx0bWVtY3B5KG9wdCwgXHUwMDI2Y3AtXHUwMDNlc3luY19jb25uX29wdCwgc2l6ZW9mKCpvcHQpKTtcbkBAIC02MzUsNiArNjM3LDcgQEAgdm9pZCBpcF92c19zeW5jX2Nvbm4oc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIHN0cnVjdCBpcF92c19jb25uICpjcCwgaW50IHBrdHMpXG4gXHRpbnQgaWQ7XG4gXHRfX3U4ICpwO1xuIFx0dW5zaWduZWQgaW50IGxlbiwgcGVfbmFtZV9sZW4sIHBhZDtcbitcdHUzMiBmbGFncywgc2VxX21hc2s7XG4gXG4gXHQvKiBIYW5kbGUgb2xkIHZlcnNpb24gb2YgdGhlIHByb3RvY29sICovXG4gXHRpZiAoc3lzY3RsX3N5bmNfdmVyKGlwdnMpID09IDApIHtcbkBAIC02NDcsNiArNjUwLDcgQEAgdm9pZCBpcF92c19zeW5jX2Nvbm4oc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIHN0cnVjdCBpcF92c19jb25uICpjcCwgaW50IHBrdHMpXG4gc2xvb3A6XG4gXHRpZiAoIWlwX3ZzX3N5bmNfY29ubl9uZWVkZWQoaXB2cywgY3AsIHBrdHMpKVxuIFx0XHRnb3RvIGNvbnRyb2w7XG4rXHRmbGFncyA9IFJFQURfT05DRShjcC1cdTAwM2VmbGFncyk7XG4gXG4gXHQvKiBTYW5pdHkgY2hlY2tzICovXG4gXHRwZV9uYW1lX2xlbiA9IDA7XG5AQCAtNjc0LDcgKzY3OCw4IEBAIHZvaWQgaXBfdnNfc3luY19jb25uKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsIGludCBwa3RzKVxuICNlbmRpZlxuIFx0XHRsZW4gPSBzaXplb2Yoc3RydWN0IGlwX3ZzX3N5bmNfdjQpO1xuIFxuLVx0aWYgKGNwLVx1MDAzZWZsYWdzIFx1MDAyNiBJUF9WU19DT05OX0ZfU0VRX01BU0spXG4rXHRzZXFfbWFzayA9IGZsYWdzIFx1MDAyNiBJUF9WU19DT05OX0ZfU0VRX01BU0s7XG4rXHRpZiAoc2VxX21hc2spXG4gXHRcdGxlbiArPSBzaXplb2Yoc3RydWN0IGlwX3ZzX3N5bmNfY29ubl9vcHRpb25zKSArIDI7XG4gXG4gXHRpZiAoY3AtXHUwMDNlcGVfZGF0YV9sZW4pXG5AQCAtNzIwLDcgKzcyNSw3IEBAIHZvaWQgaXBfdnNfc3luY19jb25uKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsIGludCBwa3RzKVxuIFx0LyogU2V0IG1lc3NhZ2UgdHlwZSAgXHUwMDI2IGNvcHkgbWVtYmVycyAqL1xuIFx0cy1cdTAwM2V2NC50eXBlID0gKGNwLVx1MDAzZWFmID09IEFGX0lORVQ2ID8gU1RZUEVfRl9JTkVUNiA6IDApO1xuIFx0cy1cdTAwM2V2NC52ZXJfc2l6ZSA9IGh0b25zKGxlbiBcdTAwMjYgU1ZFUl9NQVNLKTtcdC8qIFZlcnNpb24gMCAqL1xuLVx0cy1cdTAwM2V2NC5mbGFncyA9IGh0b25sKGNwLVx1MDAzZWZsYWdzIFx1MDAyNiB+SVBfVlNfQ09OTl9GX0hBU0hFRCk7XG4rXHRzLVx1MDAzZXY0LmZsYWdzID0gaHRvbmwoZmxhZ3MgXHUwMDI2IH5JUF9WU19DT05OX0ZfSEFTSEVEKTtcbiBcdHMtXHUwMDNldjQuc3RhdGUgPSBodG9ucyhjcC1cdTAwM2VzdGF0ZSk7XG4gXHRzLVx1MDAzZXY0LnByb3RvY29sID0gY3AtXHUwMDNlcHJvdG9jb2w7XG4gXHRzLVx1MDAzZXY0LmNwb3J0ID0gY3AtXHUwMDNlY3BvcnQ7XG5AQCAtNzQ0LDcgKzc0OSw3IEBAIHZvaWQgaXBfdnNfc3luY19jb25uKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsIGludCBwa3RzKVxuIFx0XHRzLVx1MDAzZXY0LnZhZGRyID0gY3AtXHUwMDNldmFkZHIuaXA7XG4gXHRcdHMtXHUwMDNldjQuZGFkZHIgPSBjcC1cdTAwM2VkYWRkci5pcDtcbiBcdH1cbi1cdGlmIChjcC1cdTAwM2VmbGFncyBcdTAwMjYgSVBfVlNfQ09OTl9GX1NFUV9NQVNLKSB7XG4rXHRpZiAoc2VxX21hc2spIHtcbiBcdFx0KihwKyspID0gSVBWU19PUFRfU0VRX0RBVEE7XG4gXHRcdCoocCsrKSA9IHNpemVvZihzdHJ1Y3QgaXBfdnNfc3luY19jb25uX29wdGlvbnMpO1xuIFx0XHRodG9uX3NlcShcdTAwMjZjcC1cdTAwM2Vpbl9zZXEsIChzdHJ1Y3QgaXBfdnNfc2VxICopcCk7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxNzo0Mzo0MS4zMzQ2NTU4NzdaIiwiU2VxIjoyMywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDQ1NDU0ODgyOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipLTVNBTiBGdXp6aW5nIEp1c3RpZmljYXRpb24gZm9yIElQVlMgU3luYyBQYXRjaCoqXG5cbk9rYXksIHNvIHRoZSB1c2VyJ3MgcXVlc3Rpb24gYm9pbHMgZG93biB0byB3aGV0aGVyIHRoaXMgcGF0Y2ggd2FycmFudHMgaXRzIG93biBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBydW4sIG9yIGlmIHRoZSBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nIGlzIHN1ZmZpY2llbnQuIEkgbmVlZCB0byBkaWcgaW4gYW5kIHNlZS4gTGV0J3MgYnJlYWsgZG93biB3aGF0J3MgaGFwcGVuaW5nLlxuXG5UaGlzIHBhdGNoIHRvdWNoZXMgYG5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmNgLiBTcGVjaWZpY2FsbHksIGl0IG1vZGlmaWVzIGBpcF92c19zeW5jX2Nvbm5fdjBgIGFuZCBgaXBfdnNfc3luY19jb25uYC4gVGhlIGNoYW5nZSBpcyBhYm91dCBob3cgdGhlIGNvZGUgZGVhbHMgd2l0aCBgY3AtXHUwMDNlZmxhZ3NgLiBQcmV2aW91c2x5LCB0aGVyZSB3ZXJlIG11bHRpcGxlIHJlYWRzIG9mIGBjcC1cdTAwM2VmbGFnc2Agd2l0aGluIHRoZXNlIGZ1bmN0aW9ucy4gVGhlIHJpc2s/IElmIGBjcC1cdTAwM2VmbGFnc2AgaXMgbW9kaWZpZWQgY29uY3VycmVudGx5IOKAkyBhIGRhdGEgcmFjZSBzaXR1YXRpb24g4oCTIHRoZW4gdGhlIGNhbGN1bGF0ZWQgbGVuZ3RocyBhbmQgc3Vic2VxdWVudCBvcGVyYXRpb25zIGNvdWxkIGJlIGluY29uc2lzdGVudCwgcG90ZW50aWFsbHkgbGVhZGluZyB0byBhIGJ1ZmZlciBvdmVyZmxvdyBvciBjb3JydXB0IGRhdGEuXG5cblRoZSBwYXRjaCdzIGZpeCBzZWVtcyBzbWFydC4gSW4gYm90aCBmdW5jdGlvbnMsIHRoZXkncmUgbm93IHJlYWRpbmcgYGNwLVx1MDAzZWZsYWdzYCAqb25jZSogaW50byBhIGxvY2FsIHZhcmlhYmxlIChgZmxhZ3NgKSB1c2luZyBgUkVBRF9PTkNFYC4gVGhleSBjYWxjdWxhdGUgYHNlcV9tYXNrYCAod2hpY2ggc2VlbXMgaW1wb3J0YW50IGZvciBzZXF1ZW5jZS1yZWxhdGVkIHN0dWZmKSBmcm9tIHRoaXMgY2FjaGVkIGBmbGFnc2AuIFRoZSBgbGVuYCBjYWxjdWxhdGlvbiBhbmQgc3Vic2VxdWVudCBjb25kaXRpb25hbCBsb2dpYyBub3cgdXNlIHRoZXNlIGxvY2FsIHZhcmlhYmxlcywgZW5zdXJpbmcgdGhleSdyZSBjb25zaXN0ZW50LiBJIHNlZSB0aGUgcGF0dGVybiDigJMgdGhlIG9sZCBjb2RlIGNvdWxkIGNhbGN1bGF0ZSB0aGUgbGVuZ3RoIGJhc2VkIG9uIG9uZSB2YWx1ZSBhbmQgdGhlbiBiZWhhdmUgb24gYSBkaWZmZXJlbnQgdmVyc2lvbi4gVGhpcyBmaXggbmVhdGx5IHJlc29sdmVzIHRoYXQgcG90ZW50aWFsIGluY29uc2lzdGVuY3kuXG5cbk5vdywgdG8gZGV0ZXJtaW5lIGlmIHdlIG5lZWQgS01TQU4sIEkgbmVlZCBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIHRoZSAqY29udGV4dCouIEkgbmVlZCB0byBzZWUgd2hhdCBlbHNlIGludGVyYWN0cyB3aXRoIHRoZXNlIGZsYWdzIGFuZCB0aGlzIHN5bmNocm9uaXphdGlvbiBjb2RlLiBJcyBpdCBsaWtlbHkgdG8gYmUgbXVsdGl0aHJlYWRlZD8gQXJlIHRoZXJlIG90aGVyIHdyaXRlcnM/IEknbGwgcHJvYmFibHkgcnVuIGEgYHJlYWQtZmlsZWAgb3IgYGdyZXBwZXJgIHNlYXJjaCB3aXRoaW4gdGhlIGBuZXQvbmV0ZmlsdGVyL2lwdnNgIGRpcmVjdG9yeSB0byB1bmRlcnN0YW5kIHRoZSBicm9hZGVyIHBpY3R1cmUgYW5kIGlkZW50aWZ5IHRoZSBtb3N0IGxpa2VseSBkYXRhIHJhY2VzLiBNeSBndXQgc2F5cyB0aGlzICptaWdodCogYmUgdGhlIGtpbmQgb2YgcGF0Y2ggd2hlcmUgS01TQU4gY291bGQgZmluZCBzb21ldGhpbmcgc3RhbmRhcmQgS0FTQU4gbWlzc2VzLCBidXQgSSBuZWVkIG1vcmUgY29udGV4dCB0byBiZSBzdXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNDY5LCJPdXRwdXRUb2tlbnMiOjQzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDg2LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTc6NDM6NDUuNzg5MjA5MjY1WiIsIlNlcSI6MjQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI5ODM5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDU0MCxcbiAgXCJMaW5lQ291bnRcIjogOTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDU0MDpcXHRcXHRcXHRcXHQgICAgICAgaW50IHBrdHMpXFxuIDU0MTpcXHR7XFxuIDU0MjpcXHRcXHRzdHJ1Y3QgaXBfdnNfc3luY19tZXNnX3YwICptO1xcbiA1NDM6XFx0XFx0c3RydWN0IGlwX3ZzX3N5bmNfY29ubl92MCAqcztcXG4gNTQ0OlxcdFxcdHN0cnVjdCBpcF92c19zeW5jX2J1ZmYgKmJ1ZmY7XFxuIDU0NTpcXHRcXHRzdHJ1Y3QgaXB2c19tYXN0ZXJfc3luY19zdGF0ZSAqbXM7XFxuIDU0NjpcXHRcXHR1MzIgZmxhZ3MsIHNlcV9tYXNrO1xcbiA1NDc6XFx0XFx0dW5zaWduZWQgaW50IGxlbjtcXG4gNTQ4OlxcdFxcdGludCBpZDtcXG4gNTQ5OlxcdFxcbiA1NTA6XFx0XFx0aWYgKHVubGlrZWx5KGNwLVxcdTAwM2VhZiAhPSBBRl9JTkVUKSlcXG4gNTUxOlxcdFxcdFxcdHJldHVybjtcXG4gNTUyOlxcdFxcdGZsYWdzID0gUkVBRF9PTkNFKGNwLVxcdTAwM2VmbGFncyk7XFxuIDU1MzpcXHRcXHQvKiBEbyBub3Qgc3luYyBPTkUgUEFDS0VUICovXFxuIDU1NDpcXHRcXHRpZiAoZmxhZ3MgXFx1MDAyNiBJUF9WU19DT05OX0ZfT05FX1BBQ0tFVClcXG4gNTU1OlxcdFxcdFxcdHJldHVybjtcXG4gNTU2OlxcdFxcbiA1NTc6XFx0XFx0aWYgKCFpcF92c19zeW5jX2Nvbm5fbmVlZGVkKGlwdnMsIGNwLCBwa3RzKSlcXG4gNTU4OlxcdFxcdFxcdHJldHVybjtcXG4gNTU5OlxcdFxcbiA1NjA6XFx0XFx0c3Bpbl9sb2NrX2JoKFxcdTAwMjZpcHZzLVxcdTAwM2VzeW5jX2J1ZmZfbG9jayk7XFxuIDU2MTpcXHRcXHRpZiAoIShpcHZzLVxcdTAwM2VzeW5jX3N0YXRlIFxcdTAwMjYgSVBfVlNfU1RBVEVfTUFTVEVSKSkge1xcbiA1NjI6XFx0XFx0XFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNmlwdnMtXFx1MDAzZXN5bmNfYnVmZl9sb2NrKTtcXG4gNTYzOlxcdFxcdFxcdHJldHVybjtcXG4gNTY0OlxcdFxcdH1cXG4gNTY1OlxcdFxcbiA1NjY6XFx0XFx0aWQgPSBzZWxlY3RfbWFzdGVyX3RocmVhZF9pZChpcHZzLCBjcCk7XFxuIDU2NzpcXHRcXHRtcyA9IFxcdTAwMjZpcHZzLVxcdTAwM2Vtc1tpZF07XFxuIDU2ODpcXHRcXHRidWZmID0gbXMtXFx1MDAzZXN5bmNfYnVmZjtcXG4gNTY5OlxcdFxcdHNlcV9tYXNrID0gZmxhZ3MgXFx1MDAyNiBJUF9WU19DT05OX0ZfU0VRX01BU0s7XFxuIDU3MDpcXHRcXHRsZW4gPSBzZXFfbWFzayA/IEZVTExfQ09OTl9TSVpFIDogU0lNUExFX0NPTk5fU0laRTtcXG4gNTcxOlxcdFxcdGlmIChidWZmKSB7XFxuIDU3MjpcXHRcXHRcXHRtID0gKHN0cnVjdCBpcF92c19zeW5jX21lc2dfdjAgKikgYnVmZi1cXHUwMDNlbWVzZztcXG4gNTczOlxcdFxcdFxcdC8qIFNlbmQgYnVmZmVyIGlmIGl0IGlzIGZvciB2MSAqL1xcbiA1NzQ6XFx0XFx0XFx0aWYgKGJ1ZmYtXFx1MDAzZWhlYWQgKyBsZW4gXFx1MDAzZSBidWZmLVxcdTAwM2VlbmQgfHwgIW0tXFx1MDAzZW5yX2Nvbm5zKSB7XFxuIDU3NTpcXHRcXHRcXHRcXHRzYl9xdWV1ZV90YWlsKGlwdnMsIG1zKTtcXG4gNTc2OlxcdFxcdFxcdFxcdG1zLVxcdTAwM2VzeW5jX2J1ZmYgPSBOVUxMO1xcbiA1Nzc6XFx0XFx0XFx0XFx0YnVmZiA9IE5VTEw7XFxuIDU3ODpcXHRcXHRcXHR9XFxuIDU3OTpcXHRcXHR9XFxuIDU4MDpcXHRcXHRpZiAoIWJ1ZmYpIHtcXG4gNTgxOlxcdFxcdFxcdGJ1ZmYgPSBpcF92c19zeW5jX2J1ZmZfY3JlYXRlX3YwKGlwdnMsIGxlbik7XFxuIDU4MjpcXHRcXHRcXHRpZiAoIWJ1ZmYpIHtcXG4gNTgzOlxcdFxcdFxcdFxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZpcHZzLVxcdTAwM2VzeW5jX2J1ZmZfbG9jayk7XFxuIDU4NDpcXHRcXHRcXHRcXHRwcl9lcnIoXFxcImlwX3ZzX3N5bmNfYnVmZl9jcmVhdGUgZmFpbGVkLlxcXFxuXFxcIik7XFxuIDU4NTpcXHRcXHRcXHRcXHRyZXR1cm47XFxuIDU4NjpcXHRcXHRcXHR9XFxuIDU4NzpcXHRcXHRcXHRtcy1cXHUwMDNlc3luY19idWZmID0gYnVmZjtcXG4gNTg4OlxcdFxcdH1cXG4gNTg5OlxcdFxcbiA1OTA6XFx0XFx0bSA9IChzdHJ1Y3QgaXBfdnNfc3luY19tZXNnX3YwICopIGJ1ZmYtXFx1MDAzZW1lc2c7XFxuIDU5MTpcXHRcXHRzID0gKHN0cnVjdCBpcF92c19zeW5jX2Nvbm5fdjAgKikgYnVmZi1cXHUwMDNlaGVhZDtcXG4gNTkyOlxcdFxcbiA1OTM6XFx0XFx0LyogY29weSBtZW1iZXJzICovXFxuIDU5NDpcXHRcXHRzLVxcdTAwM2VyZXNlcnZlZCA9IDA7XFxuIDU5NTpcXHRcXHRzLVxcdTAwM2Vwcm90b2NvbCA9IGNwLVxcdTAwM2Vwcm90b2NvbDtcXG4gNTk2OlxcdFxcdHMtXFx1MDAzZWNwb3J0ID0gY3AtXFx1MDAzZWNwb3J0O1xcbiA1OTc6XFx0XFx0cy1cXHUwMDNldnBvcnQgPSBjcC1cXHUwMDNldnBvcnQ7XFxuIDU5ODpcXHRcXHRzLVxcdTAwM2VkcG9ydCA9IGNwLVxcdTAwM2VkcG9ydDtcXG4gNTk5OlxcdFxcdHMtXFx1MDAzZWNhZGRyID0gY3AtXFx1MDAzZWNhZGRyLmlwO1xcbiA2MDA6XFx0XFx0cy1cXHUwMDNldmFkZHIgPSBjcC1cXHUwMDNldmFkZHIuaXA7XFxuIDYwMTpcXHRcXHRzLVxcdTAwM2VkYWRkciA9IGNwLVxcdTAwM2VkYWRkci5pcDtcXG4gNjAyOlxcdFxcdHMtXFx1MDAzZWZsYWdzID0gaHRvbnMoZmxhZ3MgXFx1MDAyNiB+SVBfVlNfQ09OTl9GX0hBU0hFRCk7XFxuIDYwMzpcXHRcXHRzLVxcdTAwM2VzdGF0ZSA9IGh0b25zKGNwLVxcdTAwM2VzdGF0ZSk7XFxuIDYwNDpcXHRcXHRpZiAoc2VxX21hc2spIHtcXG4gNjA1OlxcdFxcdFxcdHN0cnVjdCBpcF92c19zeW5jX2Nvbm5fb3B0aW9ucyAqb3B0ID1cXG4gNjA2OlxcdFxcdFxcdFxcdChzdHJ1Y3QgaXBfdnNfc3luY19jb25uX29wdGlvbnMgKilcXHUwMDI2c1sxXTtcXG4gNjA3OlxcdFxcdFxcdG1lbWNweShvcHQsIFxcdTAwMjZjcC1cXHUwMDNlc3luY19jb25uX29wdCwgc2l6ZW9mKCpvcHQpKTtcXG4gNjA4OlxcdFxcdH1cXG4gNjA5OlxcdFxcbiA2MTA6XFx0XFx0bS1cXHUwMDNlbnJfY29ubnMrKztcXG4gNjExOlxcdFxcdG0tXFx1MDAzZXNpemUgPSBodG9ucyhudG9ocyhtLVxcdTAwM2VzaXplKSArIGxlbik7XFxuIDYxMjpcXHRcXHRidWZmLVxcdTAwM2VoZWFkICs9IGxlbjtcXG4gNjEzOlxcdFxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZpcHZzLVxcdTAwM2VzeW5jX2J1ZmZfbG9jayk7XFxuIDYxNDpcXHRcXG4gNjE1OlxcdFxcdC8qIHN5bmNocm9uaXplIGl0cyBjb250cm9sbGVyIGlmIGl0IGhhcyAqL1xcbiA2MTY6XFx0XFx0Y3AgPSBjcC1cXHUwMDNlY29udHJvbDtcXG4gNjE3OlxcdFxcdGlmIChjcCkge1xcbiA2MTg6XFx0XFx0XFx0aWYgKGNwLVxcdTAwM2VmbGFncyBcXHUwMDI2IElQX1ZTX0NPTk5fRl9URU1QTEFURSlcXG4gNjE5OlxcdFxcdFxcdFxcdHBrdHMgPSBhdG9taWNfaW5jX3JldHVybihcXHUwMDI2Y3AtXFx1MDAzZWluX3BrdHMpO1xcbiA2MjA6XFx0XFx0XFx0ZWxzZVxcbiA2MjE6XFx0XFx0XFx0XFx0cGt0cyA9IHN5c2N0bF9zeW5jX3RocmVzaG9sZChpcHZzKTtcXG4gNjIyOlxcdFxcdFxcdGlwX3ZzX3N5bmNfY29ubihpcHZzLCBjcCwgcGt0cyk7XFxuIDYyMzpcXHRcXHR9XFxuIDYyNDpcXHR9XFxuIDYyNTpcXHRcXG4gNjI2OlxcdC8qXFxuIDYyNzpcXHQgKiAgICAgIEFkZCBhbiBpcF92c19jb25uIGluZm9ybWF0aW9uIGludG8gdGhlIGN1cnJlbnQgc3luY19idWZmLlxcbiA2Mjg6XFx0ICogICAgICBDYWxsZWQgYnkgaXBfdnNfaW4uXFxuIDYyOTpcXHQgKiAgICAgIFNlbmRpbmcgVmVyc2lvbiAxIG1lc3NhZ2VzXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDE3OjQzOjQ1Ljc4OTUxMTI0NVoiLCJTZXEiOjI1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxODYyMTg3NDE1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGFzIGlmIHRoZXkncmUgbXkgb3duOlxuXG4qKkludmVzdGlnYXRpbmcgdGhlIENvbm5lY3Rpb24gU3luY2hyb25pemF0aW9uIExhbmRzY2FwZSoqXG5cbkFscmlnaHQsIEknbSB0aGlua2luZyBhYm91dCBjb25uZWN0aW9uIHN5bmNocm9uaXphdGlvbiBhbmQgSSB3YW50IHRvIGJlIHRob3JvdWdoLiBJJ3ZlIGJlZW4gbG9va2luZyBhdCBzb21lIGtleSBtZXRyaWNzLCBidXQgSSBmZWVsIGxpa2UgSSdtIG1pc3NpbmcgYSBwaWVjZSBvZiB0aGUgcHV6emxlLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEknbSBub3Qgb3Zlcmxvb2tpbmcgYW55dGhpbmcgY3J1Y2lhbC4gU29tZXRoaW5nIGluIHRoZSBiYWNrIG9mIG15IG1pbmQgaXMgdGVsbGluZyBtZSB0byBkb3VibGUtY2hlY2sgdGhhdCBgaXBfdnNfc3luY19jb25uYCBzZXR0aW5nLiBJdCdzIGEga2V5IHZhcmlhYmxlIGluIHRoaXMgcHJvY2VzcywgYW5kIGV2ZW4gdGhvdWdoIGl0IG1pZ2h0IHNlZW0gdW5yZWxhdGVkIHRvIHdoYXQgSSd2ZSBiZWVuIGNvbmNlbnRyYXRpbmcgb24sIGl0IGNvdWxkIGJlIHRoZSBseW5jaHBpbiwgb3IgYXQgbGVhc3QgYSBjb250cmlidXRpbmcgZmFjdG9yLiBJJ2xsIG5lZWQgdG8gZ28gYmFjayBhbmQgZXhhbWluZSBpdDsgaXQncyBhbHdheXMgdGhlIHVuZXhwZWN0ZWQgcGxhY2UgdGhhdCBob2xkcyB0aGUgc29sdXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU4NjUsIk91dHB1dFRva2VucyI6NDMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDE3OjQzOjQ3LjY1MTcwMTU0WiIsIlNlcSI6MjYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI1OTgzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDYzNSxcbiAgXCJMaW5lQ291bnRcIjogODBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDYzNTpcXHRcXHRzdHJ1Y3QgaXBfdnNfc3luY19idWZmICpidWZmO1xcbiA2MzY6XFx0XFx0c3RydWN0IGlwdnNfbWFzdGVyX3N5bmNfc3RhdGUgKm1zO1xcbiA2Mzc6XFx0XFx0aW50IGlkO1xcbiA2Mzg6XFx0XFx0X191OCAqcDtcXG4gNjM5OlxcdFxcdHVuc2lnbmVkIGludCBsZW4sIHBlX25hbWVfbGVuLCBwYWQ7XFxuIDY0MDpcXHRcXHR1MzIgZmxhZ3MsIHNlcV9tYXNrO1xcbiA2NDE6XFx0XFxuIDY0MjpcXHRcXHQvKiBIYW5kbGUgb2xkIHZlcnNpb24gb2YgdGhlIHByb3RvY29sICovXFxuIDY0MzpcXHRcXHRpZiAoc3lzY3RsX3N5bmNfdmVyKGlwdnMpID09IDApIHtcXG4gNjQ0OlxcdFxcdFxcdGlwX3ZzX3N5bmNfY29ubl92MChpcHZzLCBjcCwgcGt0cyk7XFxuIDY0NTpcXHRcXHRcXHRyZXR1cm47XFxuIDY0NjpcXHRcXHR9XFxuIDY0NzpcXHRcXHQvKiBEbyBub3Qgc3luYyBPTkUgUEFDS0VUICovXFxuIDY0ODpcXHRcXHRpZiAoY3AtXFx1MDAzZWZsYWdzIFxcdTAwMjYgSVBfVlNfQ09OTl9GX09ORV9QQUNLRVQpXFxuIDY0OTpcXHRcXHRcXHRnb3RvIGNvbnRyb2w7XFxuIDY1MDpcXHRzbG9vcDpcXG4gNjUxOlxcdFxcdGlmICghaXBfdnNfc3luY19jb25uX25lZWRlZChpcHZzLCBjcCwgcGt0cykpXFxuIDY1MjpcXHRcXHRcXHRnb3RvIGNvbnRyb2w7XFxuIDY1MzpcXHRcXHRmbGFncyA9IFJFQURfT05DRShjcC1cXHUwMDNlZmxhZ3MpO1xcbiA2NTQ6XFx0XFxuIDY1NTpcXHRcXHQvKiBTYW5pdHkgY2hlY2tzICovXFxuIDY1NjpcXHRcXHRwZV9uYW1lX2xlbiA9IDA7XFxuIDY1NzpcXHRcXHRpZiAoY3AtXFx1MDAzZXBlX2RhdGFfbGVuKSB7XFxuIDY1ODpcXHRcXHRcXHRpZiAoIWNwLVxcdTAwM2VwZV9kYXRhIHx8ICFjcC1cXHUwMDNlZGVzdCkge1xcbiA2NTk6XFx0XFx0XFx0XFx0SVBfVlNfRVJSX1JMKFxcXCJTWU5DLCBjb25uZWN0aW9uIHBlX2RhdGEgaW52YWxpZFxcXFxuXFxcIik7XFxuIDY2MDpcXHRcXHRcXHRcXHRyZXR1cm47XFxuIDY2MTpcXHRcXHRcXHR9XFxuIDY2MjpcXHRcXHRcXHRwZV9uYW1lX2xlbiA9IHN0cm5sZW4oY3AtXFx1MDAzZXBlLVxcdTAwM2VuYW1lLCBJUF9WU19QRU5BTUVfTUFYTEVOKTtcXG4gNjYzOlxcdFxcdH1cXG4gNjY0OlxcdFxcbiA2NjU6XFx0XFx0c3Bpbl9sb2NrX2JoKFxcdTAwMjZpcHZzLVxcdTAwM2VzeW5jX2J1ZmZfbG9jayk7XFxuIDY2NjpcXHRcXHRpZiAoIShpcHZzLVxcdTAwM2VzeW5jX3N0YXRlIFxcdTAwMjYgSVBfVlNfU1RBVEVfTUFTVEVSKSkge1xcbiA2Njc6XFx0XFx0XFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNmlwdnMtXFx1MDAzZXN5bmNfYnVmZl9sb2NrKTtcXG4gNjY4OlxcdFxcdFxcdHJldHVybjtcXG4gNjY5OlxcdFxcdH1cXG4gNjcwOlxcdFxcbiA2NzE6XFx0XFx0aWQgPSBzZWxlY3RfbWFzdGVyX3RocmVhZF9pZChpcHZzLCBjcCk7XFxuIDY3MjpcXHRcXHRtcyA9IFxcdTAwMjZpcHZzLVxcdTAwM2Vtc1tpZF07XFxuIDY3MzpcXHRcXG4gNjc0OlxcdCNpZmRlZiBDT05GSUdfSVBfVlNfSVBWNlxcbiA2NzU6XFx0XFx0aWYgKGNwLVxcdTAwM2VhZiA9PSBBRl9JTkVUNilcXG4gNjc2OlxcdFxcdFxcdGxlbiA9IHNpemVvZihzdHJ1Y3QgaXBfdnNfc3luY192Nik7XFxuIDY3NzpcXHRcXHRlbHNlXFxuIDY3ODpcXHQjZW5kaWZcXG4gNjc5OlxcdFxcdFxcdGxlbiA9IHNpemVvZihzdHJ1Y3QgaXBfdnNfc3luY192NCk7XFxuIDY4MDpcXHRcXG4gNjgxOlxcdFxcdHNlcV9tYXNrID0gZmxhZ3MgXFx1MDAyNiBJUF9WU19DT05OX0ZfU0VRX01BU0s7XFxuIDY4MjpcXHRcXHRpZiAoc2VxX21hc2spXFxuIDY4MzpcXHRcXHRcXHRsZW4gKz0gc2l6ZW9mKHN0cnVjdCBpcF92c19zeW5jX2Nvbm5fb3B0aW9ucykgKyAyO1xcbiA2ODQ6XFx0XFxuIDY4NTpcXHRcXHRpZiAoY3AtXFx1MDAzZXBlX2RhdGFfbGVuKVxcbiA2ODY6XFx0XFx0XFx0bGVuICs9IGNwLVxcdTAwM2VwZV9kYXRhX2xlbiArIDI7XFx0LyogKyBQYXJhbSBoZHIgZmllbGQgKi9cXG4gNjg3OlxcdFxcdGlmIChwZV9uYW1lX2xlbilcXG4gNjg4OlxcdFxcdFxcdGxlbiArPSBwZV9uYW1lX2xlbiArIDI7XFxuIDY4OTpcXHRcXG4gNjkwOlxcdFxcdC8qIGNoZWNrIGlmIHRoZXJlIGlzIGEgc3BhY2UgZm9yIHRoaXMgb25lICAqL1xcbiA2OTE6XFx0XFx0cGFkID0gMDtcXG4gNjkyOlxcdFxcdGJ1ZmYgPSBtcy1cXHUwMDNlc3luY19idWZmO1xcbiA2OTM6XFx0XFx0aWYgKGJ1ZmYpIHtcXG4gNjk0OlxcdFxcdFxcdG0gPSBidWZmLVxcdTAwM2VtZXNnO1xcbiA2OTU6XFx0XFx0XFx0cGFkID0gKDQgLSAoc2l6ZV90KSBidWZmLVxcdTAwM2VoZWFkKSBcXHUwMDI2IDM7XFxuIDY5NjpcXHRcXHRcXHQvKiBTZW5kIGJ1ZmZlciBpZiBpdCBpcyBmb3IgdjAgKi9cXG4gNjk3OlxcdFxcdFxcdGlmIChidWZmLVxcdTAwM2VoZWFkICsgbGVuICsgcGFkIFxcdTAwM2UgYnVmZi1cXHUwMDNlZW5kIHx8IG0tXFx1MDAzZXJlc2VydmVkKSB7XFxuIDY5ODpcXHRcXHRcXHRcXHRzYl9xdWV1ZV90YWlsKGlwdnMsIG1zKTtcXG4gNjk5OlxcdFxcdFxcdFxcdG1zLVxcdTAwM2VzeW5jX2J1ZmYgPSBOVUxMO1xcbiA3MDA6XFx0XFx0XFx0XFx0YnVmZiA9IE5VTEw7XFxuIDcwMTpcXHRcXHRcXHRcXHRwYWQgPSAwO1xcbiA3MDI6XFx0XFx0XFx0fVxcbiA3MDM6XFx0XFx0fVxcbiA3MDQ6XFx0XFxuIDcwNTpcXHRcXHRpZiAoIWJ1ZmYpIHtcXG4gNzA2OlxcdFxcdFxcdGJ1ZmYgPSBpcF92c19zeW5jX2J1ZmZfY3JlYXRlKGlwdnMsIGxlbik7XFxuIDcwNzpcXHRcXHRcXHRpZiAoIWJ1ZmYpIHtcXG4gNzA4OlxcdFxcdFxcdFxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZpcHZzLVxcdTAwM2VzeW5jX2J1ZmZfbG9jayk7XFxuIDcwOTpcXHRcXHRcXHRcXHRwcl9lcnIoXFxcImlwX3ZzX3N5bmNfYnVmZl9jcmVhdGUgZmFpbGVkLlxcXFxuXFxcIik7XFxuIDcxMDpcXHRcXHRcXHRcXHRyZXR1cm47XFxuIDcxMTpcXHRcXHRcXHR9XFxuIDcxMjpcXHRcXHRcXHRtcy1cXHUwMDNlc3luY19idWZmID0gYnVmZjtcXG4gNzEzOlxcdFxcdFxcdG0gPSBidWZmLVxcdTAwM2VtZXNnO1xcbiA3MTQ6XFx0XFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxNzo0Mzo0Ny42NTE5NjQzOFoiLCJTZXEiOjI3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMTU2MzEyMjEwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCBwcmVzZW50ZWQgYXMgaWYgaXQgd2VyZSBteSBvd24gaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKkRpdmluZyBEZWVwZXIgaW50byBgaXBfdnNfc3luY19jb25uYCoqXG5cbkFscmlnaHQsIHNvIHdlJ3JlIGxvb2tpbmcgYXQgYGlwX3ZzX3N5bmNfY29ubmAuIEdvb2QsIGdvb2QuIEkgbmVlZCB0byBnZXQgYSBiZXR0ZXIgaGFuZGxlIG9uIHRoZSBjb250ZXh0IG9mICpldmVyeXRoaW5nKiB0aGF0IHRvdWNoZXMgdGhpcy4gVGhpcyBpcyB3aGVyZSB0aGUgbWFnaWMgKG9yIHRoZSBwcm9ibGVtcykgbGlrZWx5IHJlc2lkZSB3aGVuIHdlJ3JlIHRhbGtpbmcgYWJvdXQgY29ubmVjdGlvbiBzeW5jaHJvbml6YXRpb24gaW4gSVBWUy4gTGV0J3MgZGlnIGRlZXBlciBpbnRvIHRoZSBjb2RlIHRoYXQncyBhbHJlYWR5IGluIG1lbW9yeS4gSSB3b25kZXIgaWYgdGhlcmUgYXJlIGFueSBvYnZpb3VzIHJlZCBmbGFncyBpbiB0ZXJtcyBvZiBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlcywgYnVmZmVyIHNpemVzLCBvciBwb3RlbnRpYWwgZm9yIHJhY2UgY29uZGl0aW9ucy4gSSBzaG91bGQgcHJvYmFibHkgYmUgdGhpbmtpbmcgYWJvdXQgaXRzIGludGVyYWN0aW9uIHdpdGggdGhlIG90aGVyIHN5bmNocm9uaXphdGlvbiBtZWNoYW5pc21zIGluIHRoZSBrZXJuZWwsIHN1Y2ggYXMgc3BpbmxvY2tzIGFuZCBtdXRleGVzLiBJcyB0aGlzIGEgY29tbW9uIGhvdHNwb3Q/IFRpbWUgdG8gZG8gc29tZSBkaWdnaW5nLiBUaW1lIHRvIHNlZSB3aGF0J3MgYWN0dWFsbHkgKnRoZXJlKi5cblxuXG4iLCJJbnB1dFRva2VucyI6NzM0MywiT3V0cHV0VG9rZW5zIjo0MywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTc6NDM6NDkuODA4MjgxODJaIiwiU2VxIjoyOCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzA4MjQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNzE1LFxuICBcIkxpbmVDb3VudFwiOiA2MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNzE1OlxcdFxcbiA3MTY6XFx0XFx0cCA9IGJ1ZmYtXFx1MDAzZWhlYWQ7XFxuIDcxNzpcXHRcXHRidWZmLVxcdTAwM2VoZWFkICs9IHBhZCArIGxlbjtcXG4gNzE4OlxcdFxcdG0tXFx1MDAzZXNpemUgPSBodG9ucyhudG9ocyhtLVxcdTAwM2VzaXplKSArIHBhZCArIGxlbik7XFxuIDcxOTpcXHRcXHQvKiBBZGQgZXYuIHBhZGRpbmcgZnJvbSBwcmV2LiBzeW5jX2Nvbm4gKi9cXG4gNzIwOlxcdFxcdHdoaWxlIChwYWQtLSlcXG4gNzIxOlxcdFxcdFxcdCoocCsrKSA9IDA7XFxuIDcyMjpcXHRcXG4gNzIzOlxcdFxcdHMgPSAodW5pb24gaXBfdnNfc3luY19jb25uICopcDtcXG4gNzI0OlxcdFxcbiA3MjU6XFx0XFx0LyogU2V0IG1lc3NhZ2UgdHlwZSAgXFx1MDAyNiBjb3B5IG1lbWJlcnMgKi9cXG4gNzI2OlxcdFxcdHMtXFx1MDAzZXY0LnR5cGUgPSAoY3AtXFx1MDAzZWFmID09IEFGX0lORVQ2ID8gU1RZUEVfRl9JTkVUNiA6IDApO1xcbiA3Mjc6XFx0XFx0cy1cXHUwMDNldjQudmVyX3NpemUgPSBodG9ucyhsZW4gXFx1MDAyNiBTVkVSX01BU0spO1xcdC8qIFZlcnNpb24gMCAqL1xcbiA3Mjg6XFx0XFx0cy1cXHUwMDNldjQuZmxhZ3MgPSBodG9ubChmbGFncyBcXHUwMDI2IH5JUF9WU19DT05OX0ZfSEFTSEVEKTtcXG4gNzI5OlxcdFxcdHMtXFx1MDAzZXY0LnN0YXRlID0gaHRvbnMoY3AtXFx1MDAzZXN0YXRlKTtcXG4gNzMwOlxcdFxcdHMtXFx1MDAzZXY0LnByb3RvY29sID0gY3AtXFx1MDAzZXByb3RvY29sO1xcbiA3MzE6XFx0XFx0cy1cXHUwMDNldjQuY3BvcnQgPSBjcC1cXHUwMDNlY3BvcnQ7XFxuIDczMjpcXHRcXHRzLVxcdTAwM2V2NC52cG9ydCA9IGNwLVxcdTAwM2V2cG9ydDtcXG4gNzMzOlxcdFxcdHMtXFx1MDAzZXY0LmRwb3J0ID0gY3AtXFx1MDAzZWRwb3J0O1xcbiA3MzQ6XFx0XFx0cy1cXHUwMDNldjQuZndtYXJrID0gaHRvbmwoY3AtXFx1MDAzZWZ3bWFyayk7XFxuIDczNTpcXHRcXHRzLVxcdTAwM2V2NC50aW1lb3V0ID0gaHRvbmwoY3AtXFx1MDAzZXRpbWVvdXQgLyBIWik7XFxuIDczNjpcXHRcXHRtLVxcdTAwM2Vucl9jb25ucysrO1xcbiA3Mzc6XFx0XFxuIDczODpcXHQjaWZkZWYgQ09ORklHX0lQX1ZTX0lQVjZcXG4gNzM5OlxcdFxcdGlmIChjcC1cXHUwMDNlYWYgPT0gQUZfSU5FVDYpIHtcXG4gNzQwOlxcdFxcdFxcdHAgKz0gc2l6ZW9mKHN0cnVjdCBpcF92c19zeW5jX3Y2KTtcXG4gNzQxOlxcdFxcdFxcdHMtXFx1MDAzZXY2LmNhZGRyID0gY3AtXFx1MDAzZWNhZGRyLmluNjtcXG4gNzQyOlxcdFxcdFxcdHMtXFx1MDAzZXY2LnZhZGRyID0gY3AtXFx1MDAzZXZhZGRyLmluNjtcXG4gNzQzOlxcdFxcdFxcdHMtXFx1MDAzZXY2LmRhZGRyID0gY3AtXFx1MDAzZWRhZGRyLmluNjtcXG4gNzQ0OlxcdFxcdH0gZWxzZVxcbiA3NDU6XFx0I2VuZGlmXFxuIDc0NjpcXHRcXHR7XFxuIDc0NzpcXHRcXHRcXHRwICs9IHNpemVvZihzdHJ1Y3QgaXBfdnNfc3luY192NCk7XFx0Lyogb3B0aW9ucyBwdHIgKi9cXG4gNzQ4OlxcdFxcdFxcdHMtXFx1MDAzZXY0LmNhZGRyID0gY3AtXFx1MDAzZWNhZGRyLmlwO1xcbiA3NDk6XFx0XFx0XFx0cy1cXHUwMDNldjQudmFkZHIgPSBjcC1cXHUwMDNldmFkZHIuaXA7XFxuIDc1MDpcXHRcXHRcXHRzLVxcdTAwM2V2NC5kYWRkciA9IGNwLVxcdTAwM2VkYWRkci5pcDtcXG4gNzUxOlxcdFxcdH1cXG4gNzUyOlxcdFxcdGlmIChzZXFfbWFzaykge1xcbiA3NTM6XFx0XFx0XFx0KihwKyspID0gSVBWU19PUFRfU0VRX0RBVEE7XFxuIDc1NDpcXHRcXHRcXHQqKHArKykgPSBzaXplb2Yoc3RydWN0IGlwX3ZzX3N5bmNfY29ubl9vcHRpb25zKTtcXG4gNzU1OlxcdFxcdFxcdGh0b25fc2VxKFxcdTAwMjZjcC1cXHUwMDNlaW5fc2VxLCAoc3RydWN0IGlwX3ZzX3NlcSAqKXApO1xcbiA3NTY6XFx0XFx0XFx0cCArPSBzaXplb2Yoc3RydWN0IGlwX3ZzX3NlcSk7XFxuIDc1NzpcXHRcXHRcXHRodG9uX3NlcShcXHUwMDI2Y3AtXFx1MDAzZW91dF9zZXEsIChzdHJ1Y3QgaXBfdnNfc2VxICopcCk7XFxuIDc1ODpcXHRcXHRcXHRwICs9IHNpemVvZihzdHJ1Y3QgaXBfdnNfc2VxKTtcXG4gNzU5OlxcdFxcdH1cXG4gNzYwOlxcdFxcdC8qIEhhbmRsZSBwZSBkYXRhICovXFxuIDc2MTpcXHRcXHRpZiAoY3AtXFx1MDAzZXBlX2RhdGFfbGVuIFxcdTAwMjZcXHUwMDI2IGNwLVxcdTAwM2VwZV9kYXRhKSB7XFxuIDc2MjpcXHRcXHRcXHQqKHArKykgPSBJUFZTX09QVF9QRV9EQVRBO1xcbiA3NjM6XFx0XFx0XFx0KihwKyspID0gY3AtXFx1MDAzZXBlX2RhdGFfbGVuO1xcbiA3NjQ6XFx0XFx0XFx0bWVtY3B5KHAsIGNwLVxcdTAwM2VwZV9kYXRhLCBjcC1cXHUwMDNlcGVfZGF0YV9sZW4pO1xcbiA3NjU6XFx0XFx0XFx0cCArPSBjcC1cXHUwMDNlcGVfZGF0YV9sZW47XFxuIDc2NjpcXHRcXHRcXHRpZiAocGVfbmFtZV9sZW4pIHtcXG4gNzY3OlxcdFxcdFxcdFxcdC8qIEFkZCBQRV9OQU1FICovXFxuIDc2ODpcXHRcXHRcXHRcXHQqKHArKykgPSBJUFZTX09QVF9QRV9OQU1FO1xcbiA3Njk6XFx0XFx0XFx0XFx0KihwKyspID0gcGVfbmFtZV9sZW47XFxuIDc3MDpcXHRcXHRcXHRcXHRtZW1jcHkocCwgY3AtXFx1MDAzZXBlLVxcdTAwM2VuYW1lLCBwZV9uYW1lX2xlbik7XFxuIDc3MTpcXHRcXHRcXHRcXHRwICs9IHBlX25hbWVfbGVuO1xcbiA3NzI6XFx0XFx0XFx0fVxcbiA3NzM6XFx0XFx0fVxcbiA3NzQ6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDE3OjQzOjQ5LjgwODU5Mzc3WiIsIlNlcSI6MjksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjkxNDc5ODIwOTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBCdWcgRml4OiBBIERlZXAgRGl2ZSoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IHJldmVhbHMgYSBjbGFzc2ljIHJhY2UgY29uZGl0aW9uIGluIHRoZSBgaXBfdnNfc3luY19jb25uX3YwYCBhbmQgYGlwX3ZzX3N5bmNfY29ubmAgZnVuY3Rpb25zLiBUaGUgY29yZSBpc3N1ZSBpcyB0aGUgbXVsdGlwbGUsIHVuc3luY2hyb25pemVkIHJlYWRzIG9mIGBjcC1cdTAwM2VmbGFnc2AuIFRoZSBwb3RlbnRpYWwgZm9yIHRyb3VibGUgYXJpc2VzIHdoZW4gd2UgZXZhbHVhdGUgYGNwLVx1MDAzZWZsYWdzIFx1MDAyNiBJUF9WU19DT05OX0ZfU0VRX01BU0tgIGZvciBsZW5ndGggY2FsY3VsYXRpb24gKGBsZW5gKSBhbmQgdGhlbiwgKmJlZm9yZSogYWN0dWFsbHkgdXNpbmcgdGhhdCBjYWxjdWxhdGVkIGxlbmd0aCwgYGNwLVx1MDAzZWZsYWdzYCBjaGFuZ2VzIGNvbmN1cnJlbnRseS5cblxuVGhpcyBjYW4gcmVzdWx0IGluIHR3byB1bmRlc2lyYWJsZSBzY2VuYXJpb3M6XG5cbjEuICAqKkJ1ZmZlciBPdmVyZmxvdzoqKiBJZiBgY3AtXHUwMDNlZmxhZ3NgIHRyYW5zaXRpb25zIGZyb20gMCB0byBgU0VRX01BU0tgICphZnRlciogYGxlbmAgaXMgY2FsY3VsYXRlZCB3aXRob3V0IGNvbnNpZGVyaW5nIHNlcXVlbmNlIGRhdGEgc3BhY2UsIGJ1dCAqYmVmb3JlKiB0aGUgYGlmYCBzdGF0ZW1lbnQgaXMgZXhlY3V0ZWQsIHRoZSBgaWZgIGJyYW5jaCBnZXRzIHRha2VuLCB3cml0aW5nIGJleW9uZCB0aGUgYWxsb2NhdGVkIGJ1ZmZlciBzcGFjZS5cbjIuICAqKlVuZmlsbGVkIEJ1ZmZlcjoqKiBDb252ZXJzZWx5LCBpZiBgY3AtXHUwMDNlZmxhZ3NgIGZsaXBzIGZyb20gYFNFUV9NQVNLYCB0byAwLCBgbGVuYCBpcyBjYWxjdWxhdGVkICp3aXRoKiBzZXF1ZW5jZSBzcGFjZSwgYnV0IHRoZSBgaWZgIGlzIHNraXBwZWQuIFRoaXMgbGVhdmVzIHRoZSBidWZmZXIgcGFydGlhbGx5IGZpbGxlZCwgYXMgYGxlbmAgYnl0ZXMgYXJlIGFjY291bnRlZCBmb3IsIGJ1dCB0aGUgdGFpbCBvZiB0aGUgYnVmZmVyIGlzbid0IHBvcHVsYXRlZC5cblxuVGhlIHBhdGNoJ3Mgc29sdXRpb24gaXMgZWxlZ2FudDogaXQgdXNlcyBgUkVBRF9PTkNFKGNwLVx1MDAzZWZsYWdzKWAgdG8gZ3JhYiBhICpzaW5nbGUsIGNvbnNpc3RlbnQqIHNuYXBzaG90IG9mIGBjcC1cdTAwM2VmbGFnc2AgaW50byBhIGxvY2FsIHZhcmlhYmxlLCBgZmxhZ3NgLiBUaGVuLCBgc2VxX21hc2tgIGlzIGRlcml2ZWQgZnJvbSB0aGF0IHNuYXBzaG90LiBUaGlzIGVuc3VyZXMgYm90aCBgbGVuYCBjYWxjdWxhdGlvbiBhbmQgc3Vic2VxdWVudCBkYXRhIGVtaXNzaW9uIHVzZSB0aGUgKmV4YWN0IHNhbWUqIHZhbHVlLlxuXG5Ob3csIGxldCdzIGFkZHJlc3MgdGhlIGNydWNpYWwgcXVlc3Rpb246IGRvZXMgdGhpcyBpbnRyb2R1Y2UgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3M/IFRoaXMgaXMgd2hlcmUgbXkgS01TQU4ga25vd2xlZGdlIGNvbWVzIGludG8gcGxheS4gS01TQU4gaXMgdGhlIHRvb2wgdGhhdCBmbGFncyByZWFkcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeS4gQnV0LCBoZXJlJ3Mgd2hhdCBJIHNlZTpcblxuKiAgIEtNU0FOIGZvY3VzZXMgb24ga2VybmVsLXRvLXVzZXIgaW5mby1sZWFrcyBhbmQgcmVhZHMgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkuXG4qICAgS0FTQU4vS0NTQU4gaGFuZGxlIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMvb3ZlcmZsb3dzIGFuZCBkYXRhIHJhY2VzLlxuKiAgIFRoZSBmaXggYWRkcmVzc2VzICpjb25jdXJyZW5jeSogKGRhdGEgcmFjZSBvbiBgY3AtXHUwMDNlZmxhZ3NgKS5cbiogICBgZmxhZ3NgIGlzIGluaXRpYWxpemVkIHdpdGggYFJFQURfT05DRShjcC1cdTAwM2VmbGFncylgLlxuKiAgIGBzZXFfbWFza2AgaXMgaW5pdGlhbGl6ZWQgd2l0aCBgZmxhZ3MgXHUwMDI2IElQX1ZTX0NPTk5fRl9TRVFfTUFTS2AuXG5cblRoZXJlIGFyZSBubyBuZXcgYnVmZmVycywgc3RydWN0dXJlcywgcGFkZGluZywgb3IgdW5pbml0aWFsaXplZCByZWFkcyBpbnRyb2R1Y2VkLiBBbGwgdmFyaWFibGVzIGFyZSBzY2FsYXIgYW5kIGluaXRpYWxpemVkIGRpcmVjdGx5IGF0IGRlY2xhcmF0aW9uL3VzZS4gTm8gdXNlcnNwYWNlIGNvcHkgZnVuY3Rpb25zIGFyZSB0b3VjaGVkLiBObyB1bmluaXRpYWxpemVkIGZpZWxkcyBhcmUgcmVhZC5cblxuVGhlcmVmb3JlLCB0aGlzIGlzIHNvbGVseSBhIGNvbmN1cnJlbmN5L3JhY2UtY29uZGl0aW9uIGZpeC4gSXQgKnByZXZlbnRzKiBvdXQtb2YtYm91bmRzIHdyaXRlcyBvciBtZXNzYWdlIGNvcnJ1cHRpb24uIEtNU0FOIGlzIG5vdCByZXF1aXJlZC4gS0FTQU4vS0NTQU4gYXJlIHRoZSBjb3JyZWN0IGRldGVjdG9ycyBiZWNhdXNlIHRoZXkgaGFuZGxlIHRoZSByZWxldmFudCBidWcgY2xhc3NlcyBvZiB0aGlzIHR5cGUgKE9PQiwgY29uY3VycmVuY3kpLlxuXG5MZXQncyBkb3VibGUtY2hlY2sgdGhlIHJlcXVpcmVtZW50czpcblxuMS4gIE5vIGtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlcnNwYWNlIHdoZXJlIHBhZGRpbmcgbWlnaHQgYmUgdW5pbml0aWFsaXplZC5cbjIuICBObyBjb25kaXRpb25hbCBsb2dpYyBkZXBlbmRlbnQgb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMuXG4zLiAgTm8gY29tcGxleCBkYXRhIHN0cnVjdHVyZSBhbGxvY2F0aW9uIHRoYXQgY291bGQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgZmllbGRzLlxuNC4gIE5vIGxlbmd0aC9ib3VuZHMgbG9naWMgdGhhdCBleHBvc2VzIHVuaW5pdGlhbGl6ZWQgYnl0ZXMuXG5cbktNU0FOIFJlYXNvbmluZzpcblxuVGhlIHBhdGNoIGludHJvZHVjZXMgYFJFQURfT05DRWAgdG8gZW5zdXJlIGNvbnNpc3RlbnQgZXZhbHVhdGlvbiBvZiBgc2VxX21hc2tgIGZvciBzeW5jIGJ1ZmZlciBsZW5ndGggY2FsY3VsYXRpb24gYW5kIHNlcmlhbGl6YXRpb24sIHRodXMgcmVzb2x2aW5nIGEgcmFjZSBjb25kaXRpb24uIFRoZSByYWNlIHByZXZpb3VzbHkgbGVkIHRvIHBvdGVudGlhbCBidWZmZXIgb3V0LW9mLWJvdW5kcyBvciBtZXNzYWdlIGNvcnJ1cHRpb24gaWYgYGNwLVx1MDAzZWZsYWdzYCBjaGFuZ2VkIGNvbmN1cnJlbnRseSwgYSBwcm9ibGVtIHRoYXQgS0FTQU4gYW5kIEtDU0FOIHByb3Blcmx5IGFkZHJlc3MuIEtNU0FOIGlzIG5vdCBuZWVkZWQgYmVjYXVzZSBhbGwgdmFyaWFibGVzIGFyZSBmdWxseSBpbml0aWFsaXplZCBzY2FsYXJzLCB3aXRoIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWQsIGFsbG9jYXRlZCwgb3IgY29waWVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4Njc4LCJPdXRwdXRUb2tlbnMiOjE5NSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjk0NywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDE3OjQzOjU4Ljk1NjU3OTI5NFoiLCJTZXEiOjMwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI0OTUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcmVzc2VzIGEgY29uY3VycmVuY3kgaXNzdWUgaW4gSVBWUyBjb25uZWN0aW9uIHN5bmNocm9uaXphdGlvbiAoaXBfdnNfc3luY19jb25uIGFuZCBpcF92c19zeW5jX2Nvbm5fdjApIHdoZXJlIGNwLVxcdTAwM2VmbGFncyB3YXMgcmVhZCBtdWx0aXBsZSB0aW1lcyB3aXRob3V0IFJFQURfT05DRSwgcG90ZW50aWFsbHkgY2F1c2luZyBhIG1pc21hdGNoIGJldHdlZW4gdGhlIGNhbGN1bGF0ZWQgYnVmZmVyIGxlbmd0aCBhbmQgdGhlIGFjdHVhbCBkYXRhIHdyaXR0ZW4gaWYgZmxhZ3Mgd2VyZSBtb2RpZmllZCBjb25jdXJyZW50bHkuXFxuXFxuVGhlIGZpeCBpbnRyb2R1Y2VzIGxvY2FsIHNjYWxhciB2YXJpYWJsZXMgKGZsYWdzLCBzZXFfbWFzaykgdGhhdCBhcmUgaW1tZWRpYXRlbHkgaW5pdGlhbGl6ZWQgdmlhIFJFQURfT05DRShjcC1cXHUwMDNlZmxhZ3MpLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSB1bmluaXRpYWxpemVkIHN0YWNrIG9yIGhlYXAgYWxsb2NhdGlvbnMsIHVuaW5pdGlhbGl6ZWQgc3RydWN0dXJlIGZpZWxkcywgaW5mby1sZWFrcyB0byB1c2Vyc3BhY2UsIG9yIHJlYWRzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGUgcmlza3MgYXNzb2NpYXRlZCB3aXRoIHRoZSBvcmlnaW5hbCByYWNlIGNvbmRpdGlvbiAob3V0LW9mLWJvdW5kcyBidWZmZXIgd3JpdGVzIC8gZGF0YSBjb3JydXB0aW9uKSBhcmUgY292ZXJlZCBieSBLQVNBTiBhbmQgS0NTQU4sIHNvIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHJlc3NlcyBhIGNvbmN1cnJlbmN5IGlzc3VlIGluIElQVlMgY29ubmVjdGlvbiBzeW5jaHJvbml6YXRpb24gKGlwX3ZzX3N5bmNfY29ubiBhbmQgaXBfdnNfc3luY19jb25uX3YwKSB3aGVyZSBjcC1cXHUwMDNlZmxhZ3Mgd2FzIHJlYWQgbXVsdGlwbGUgdGltZXMgd2l0aG91dCBSRUFEX09OQ0UsIHBvdGVudGlhbGx5IGNhdXNpbmcgYSBtaXNtYXRjaCBiZXR3ZWVuIHRoZSBjYWxjdWxhdGVkIGJ1ZmZlciBsZW5ndGggYW5kIHRoZSBhY3R1YWwgZGF0YSB3cml0dGVuIGlmIGZsYWdzIHdlcmUgbW9kaWZpZWQgY29uY3VycmVudGx5LlxcblxcblRoZSBmaXggaW50cm9kdWNlcyBsb2NhbCBzY2FsYXIgdmFyaWFibGVzIChmbGFncywgc2VxX21hc2spIHRoYXQgYXJlIGltbWVkaWF0ZWx5IGluaXRpYWxpemVkIHZpYSBSRUFEX09OQ0UoY3AtXFx1MDAzZWZsYWdzKS4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgdW5pbml0aWFsaXplZCBzdGFjayBvciBoZWFwIGFsbG9jYXRpb25zLCB1bmluaXRpYWxpemVkIHN0cnVjdHVyZSBmaWVsZHMsIGluZm8tbGVha3MgdG8gdXNlcnNwYWNlLCBvciByZWFkcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhlIHJpc2tzIGFzc29jaWF0ZWQgd2l0aCB0aGUgb3JpZ2luYWwgcmFjZSBjb25kaXRpb24gKG91dC1vZi1ib3VuZHMgYnVmZmVyIHdyaXRlcyAvIGRhdGEgY29ycnVwdGlvbikgYXJlIGNvdmVyZWQgYnkgS0FTQU4gYW5kIEtDU0FOLCBzbyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowmpbfx[1] Phase: Succeeded StartedAt: 2026-09-09 17:44:10 +0000 UTC FinishedAt: 2026-09-09 17:44:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmpbfx[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-09 17:44:10 +0000 UTC FinishedAt: 2026-09-09 17:44:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmpbfx[2] Phase: Succeeded StartedAt: 2026-09-09 17:44:10 +0000 UTC FinishedAt: 2026-09-09 21:24:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmpbfx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","NETFILTER","INET"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_sync_conn","ip_vs_sync_conn_v0"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","NETFILTER","INET"],"series_id":"a8939cd2-3461-4726-8668-65da8a001409","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-09-09 17:44:10 +0000 UTC FinishedAt: 2026-09-09 21:24:17 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","NETFILTER","INET"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_sync_conn","ip_vs_sync_conn_v0"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","NETFILTER","INET"],"series_id":"a8939cd2-3461-4726-8668-65da8a001409","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowmpbfx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","NETFILTER","INET"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_sync_conn","ip_vs_sync_conn_v0"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","NETFILTER","INET"],"series_id":"a8939cd2-3461-4726-8668-65da8a001409","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-09-09 17:44:10 +0000 UTC FinishedAt: 2026-09-09 17:44:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmpbfx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","NETFILTER","INET"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_sync_conn","ip_vs_sync_conn_v0"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","NETFILTER","INET"],"series_id":"a8939cd2-3461-4726-8668-65da8a001409","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-09-09 17:44:10 +0000 UTC FinishedAt: 2026-09-09 17:44:15 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","NETFILTER","INET"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.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-workflowmpbfx/series-workflowmpbfx-convert-artifact-494279704/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowmpbfx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","NETFILTER","INET"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_sync_conn","ip_vs_sync_conn_v0"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","NETFILTER","INET"],"series_id":"a8939cd2-3461-4726-8668-65da8a001409","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-09-09 17:44:20 +0000 UTC FinishedAt: 2026-09-09 18:01:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmpbfx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","NETFILTER","INET"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_sync_conn","ip_vs_sync_conn_v0"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","NETFILTER","INET"],"series_id":"a8939cd2-3461-4726-8668-65da8a001409","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-09-09 17:44:20 +0000 UTC FinishedAt: 2026-09-09 18:01:01 +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:*2ad84acc-960b-40cf-bf77-38559257c1c9,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-workflowmpbfx/series-workflowmpbfx-convert-artifact-494279704/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": "1677003c-0c98-48e8-88a4-469473448440", "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-workflowmpbfx/series-workflowmpbfx-build-action-2074433870/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowmpbfx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","NETFILTER","INET"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_sync_conn","ip_vs_sync_conn_v0"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","NETFILTER","INET"],"series_id":"a8939cd2-3461-4726-8668-65da8a001409","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-09-09 17:44:20 +0000 UTC FinishedAt: 2026-09-09 18:00:51 +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:*2ad84acc-960b-40cf-bf77-38559257c1c9,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-workflowmpbfx/series-workflowmpbfx-convert-artifact-494279704/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": "1677003c-0c98-48e8-88a4-469473448440", "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-workflowmpbfx/series-workflowmpbfx-build-action-2074433870/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowmpbfx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","NETFILTER","INET"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_sync_conn","ip_vs_sync_conn_v0"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","NETFILTER","INET"],"series_id":"a8939cd2-3461-4726-8668-65da8a001409","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-09-09 18:01:01 +0000 UTC FinishedAt: 2026-09-09 18:01:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmpbfx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","NETFILTER","INET"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_sync_conn","ip_vs_sync_conn_v0"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","NETFILTER","INET"],"series_id":"a8939cd2-3461-4726-8668-65da8a001409","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-09-09 18:01:01 +0000 UTC FinishedAt: 2026-09-09 18:01:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmpbfx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","NETFILTER","INET"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_sync_conn","ip_vs_sync_conn_v0"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","NETFILTER","INET"],"series_id":"a8939cd2-3461-4726-8668-65da8a001409","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-09-09 18:01:01 +0000 UTC FinishedAt: 2026-09-09 18:01:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmpbfx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","NETFILTER","INET"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_sync_conn","ip_vs_sync_conn_v0"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","NETFILTER","INET"],"series_id":"a8939cd2-3461-4726-8668-65da8a001409","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-09-09 18:01:01 +0000 UTC FinishedAt: 2026-09-09 18:01:06 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","NETFILTER","INET"],"series_id":"a8939cd2-3461-4726-8668-65da8a001409","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.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-workflowmpbfx/series-workflowmpbfx-convert-artifact-1213705087/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowmpbfx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","NETFILTER","INET"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_sync_conn","ip_vs_sync_conn_v0"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","NETFILTER","INET"],"series_id":"a8939cd2-3461-4726-8668-65da8a001409","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-09-09 18:01:11 +0000 UTC FinishedAt: 2026-09-09 18:03:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmpbfx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","NETFILTER","INET"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_sync_conn","ip_vs_sync_conn_v0"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","NETFILTER","INET"],"series_id":"a8939cd2-3461-4726-8668-65da8a001409","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-09-09 18:01:11 +0000 UTC FinishedAt: 2026-09-09 18:03:11 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*1677003c-0c98-48e8-88a4-469473448440,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-workflowmpbfx/series-workflowmpbfx-build-action-2074433870/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-workflowmpbfx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","NETFILTER","INET"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_sync_conn","ip_vs_sync_conn_v0"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","NETFILTER","INET"],"series_id":"a8939cd2-3461-4726-8668-65da8a001409","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-09-09 18:03:21 +0000 UTC FinishedAt: 2026-09-09 18:03:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmpbfx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","NETFILTER","INET"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_sync_conn","ip_vs_sync_conn_v0"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","NETFILTER","INET"],"series_id":"a8939cd2-3461-4726-8668-65da8a001409","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-09-09 18:03:21 +0000 UTC FinishedAt: 2026-09-09 18:03:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmpbfx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","NETFILTER","INET"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_sync_conn","ip_vs_sync_conn_v0"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","NETFILTER","INET"],"series_id":"a8939cd2-3461-4726-8668-65da8a001409","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-09-09 18:03:21 +0000 UTC FinishedAt: 2026-09-09 18:19:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmpbfx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","NETFILTER","INET"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_sync_conn","ip_vs_sync_conn_v0"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","NETFILTER","INET"],"series_id":"a8939cd2-3461-4726-8668-65da8a001409","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-09-09 18:03:21 +0000 UTC FinishedAt: 2026-09-09 18:19:21 +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:*2ad84acc-960b-40cf-bf77-38559257c1c9,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-workflowmpbfx/series-workflowmpbfx-convert-artifact-1213705087/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": "94b7b2a0-3897-4eb5-b829-fe9a0f822821", "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-workflowmpbfx/series-workflowmpbfx-build-action-2758439315/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowmpbfx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","NETFILTER","INET"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_sync_conn","ip_vs_sync_conn_v0"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","NETFILTER","INET"],"series_id":"a8939cd2-3461-4726-8668-65da8a001409","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-09-09 18:03:21 +0000 UTC FinishedAt: 2026-09-09 18:19:12 +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:*2ad84acc-960b-40cf-bf77-38559257c1c9,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-workflowmpbfx/series-workflowmpbfx-convert-artifact-1213705087/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": "94b7b2a0-3897-4eb5-b829-fe9a0f822821", "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-workflowmpbfx/series-workflowmpbfx-build-action-2758439315/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowmpbfx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","NETFILTER","INET"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_sync_conn","ip_vs_sync_conn_v0"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","NETFILTER","INET"],"series_id":"a8939cd2-3461-4726-8668-65da8a001409","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-09-09 18:19:21 +0000 UTC FinishedAt: 2026-09-09 18:19:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmpbfx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","NETFILTER","INET"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_sync_conn","ip_vs_sync_conn_v0"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","NETFILTER","INET"],"series_id":"a8939cd2-3461-4726-8668-65da8a001409","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-09-09 18:19:21 +0000 UTC FinishedAt: 2026-09-09 18:19:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmpbfx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","NETFILTER","INET"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_sync_conn","ip_vs_sync_conn_v0"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","NETFILTER","INET"],"series_id":"a8939cd2-3461-4726-8668-65da8a001409","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-09-09 18:19:21 +0000 UTC FinishedAt: 2026-09-09 18:21:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmpbfx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","NETFILTER","INET"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_sync_conn","ip_vs_sync_conn_v0"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","NETFILTER","INET"],"series_id":"a8939cd2-3461-4726-8668-65da8a001409","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-09-09 18:19:21 +0000 UTC FinishedAt: 2026-09-09 18:21:05 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*94b7b2a0-3897-4eb5-b829-fe9a0f822821,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-workflowmpbfx/series-workflowmpbfx-build-action-2758439315/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-workflowmpbfx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","NETFILTER","INET"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_sync_conn","ip_vs_sync_conn_v0"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","NETFILTER","INET"],"series_id":"a8939cd2-3461-4726-8668-65da8a001409","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-09-09 18:21:15 +0000 UTC FinishedAt: 2026-09-09 21:24:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmpbfx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","NETFILTER","INET"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_sync_conn","ip_vs_sync_conn_v0"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","NETFILTER","INET"],"series_id":"a8939cd2-3461-4726-8668-65da8a001409","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-09-09 18:21:15 +0000 UTC FinishedAt: 2026-09-09 21:24:17 +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":["ip_vs_sync_conn","ip_vs_sync_conn_v0"],"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:*1677003c-0c98-48e8-88a4-469473448440,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*94b7b2a0-3897-4eb5-b829-fe9a0f822821,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-workflowmpbfx/series-workflowmpbfx-build-action-2074433870/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-workflowmpbfx/series-workflowmpbfx-build-action-2758439315/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowmpbfx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","NETFILTER","INET"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_sync_conn","ip_vs_sync_conn_v0"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","NETFILTER","INET"],"series_id":"a8939cd2-3461-4726-8668-65da8a001409","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-09-09 18:21:15 +0000 UTC FinishedAt: 2026-09-09 18:21:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmpbfx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","NETFILTER","INET"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_sync_conn","ip_vs_sync_conn_v0"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","NETFILTER","INET"],"series_id":"a8939cd2-3461-4726-8668-65da8a001409","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-09-09 18:21:15 +0000 UTC FinishedAt: 2026-09-09 18:21:20 +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":["ip_vs_sync_conn","ip_vs_sync_conn_v0"],"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-workflowmpbfx/series-workflowmpbfx-convert-artifact-1565979416/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowmpbfx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","NETFILTER","INET"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_sync_conn","ip_vs_sync_conn_v0"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","NETFILTER","INET"],"series_id":"a8939cd2-3461-4726-8668-65da8a001409","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-09-09 18:21:15 +0000 UTC FinishedAt: 2026-09-09 18:21:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmpbfx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","NETFILTER","INET"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_sync_conn","ip_vs_sync_conn_v0"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","NETFILTER","INET"],"series_id":"a8939cd2-3461-4726-8668-65da8a001409","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-09-09 18:21:15 +0000 UTC FinishedAt: 2026-09-09 18:21:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmpbfx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","NETFILTER","INET"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_sync_conn","ip_vs_sync_conn_v0"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","NETFILTER","INET"],"series_id":"a8939cd2-3461-4726-8668-65da8a001409","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-09-09 18:21:15 +0000 UTC FinishedAt: 2026-09-09 18:21:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmpbfx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","NETFILTER","INET"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_sync_conn","ip_vs_sync_conn_v0"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","NETFILTER","INET"],"series_id":"a8939cd2-3461-4726-8668-65da8a001409","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-09-09 18:21:25 +0000 UTC FinishedAt: 2026-09-09 21:24:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmpbfx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","NETFILTER","INET"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_sync_conn","ip_vs_sync_conn_v0"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","NETFILTER","INET"],"series_id":"a8939cd2-3461-4726-8668-65da8a001409","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-09-09 18:21:25 +0000 UTC FinishedAt: 2026-09-09 21:24:07 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*1677003c-0c98-48e8-88a4-469473448440,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*94b7b2a0-3897-4eb5-b829-fe9a0f822821,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-workflowmpbfx/series-workflowmpbfx-build-action-2074433870/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-workflowmpbfx/series-workflowmpbfx-build-action-2758439315/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-workflowmpbfx/series-workflowmpbfx-convert-artifact-1565979416/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,}