Name: series-workflowng56w Phase: Succeeded StartedAt: 2026-09-08 01:52:20 +0000 UTC FinishedAt: 2026-09-08 06:46:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowng56w[0] Phase: Succeeded StartedAt: 2026-09-08 01:52:20 +0000 UTC FinishedAt: 2026-09-08 03:00:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowng56w[0].run-triage Phase: Succeeded StartedAt: 2026-09-08 01:52:20 +0000 UTC FinishedAt: 2026-09-08 03:00:12 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "AF_RXRPC", "INET", "NET_NS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "AF_RXRPC", "INET", "NET_NS" ], "series_id": "72f7714d-3fb8-4e04-aa6f-2891301ed056" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "rxrpc_pre_exit_net", "rxrpc_exit_net", "rxrpc_destroy_all_peers" ], "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+CgkJCTx0ZD4yMDI2LzA5LzA4IDAyOjU5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0FGX1JYUlBDJiMzNDssCiAgICAmIzM0O0lORVQmIzM0OywKICAgICYjMzQ7TkVUX05TJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7cnhycGNfcHJlX2V4aXRfbmV0JiMzNDssCiAgICAmIzM0O3J4cnBjX2V4aXRfbmV0JiMzNDssCiAgICAmIzM0O3J4cnBjX2Rlc3Ryb3lfYWxsX3BlZXJzJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHBlcm5ldCBuYW1lc3BhY2UgZXhpdCBjYWxsYmFja3MgaW4gQUZfUlhSUEMgKHNwbGl0dGluZyB0ZWFyZG93biBiZXR3ZWVuIHByZV9leGl0IGFuZCBleGl0KSBhbmQgYWRkcyBzcGlubG9jayBzeW5jaHJvbml6YXRpb24gKHBlZXJfaGFzaF9sb2NrKSBpbiByeHJwY19kZXN0cm95X2FsbF9wZWVycygpIHRvIHByb3RlY3QgYWdhaW5zdCBjb25jdXJyZW50IHVubGlua2luZyBhbmQgdXNlLWFmdGVyLWZyZWUuXG5cbk5vIG5ldyBtZW1vcnkgYWxsb2NhdGlvbnMsIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGUgdXNlcywgdXNlci1jb3B5IG9wZXJhdGlvbnMsIG9yIGFsdGVyZWQgZGF0YS1wYXJzaW5nL2J1ZmZlci1sZW5ndGggbG9naWMgYXJlIGludHJvZHVjZWQuIFRoZSBwb3RlbnRpYWwgaXNzdWVzIGFkZHJlc3NlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoaXMgcGF0Y2ggcmVsYXRlIGV4Y2x1c2l2ZWx5IHRvIHRlYXJkb3duIG9yZGVyaW5nLCBzeW5jaHJvbml6YXRpb24sIGxvY2tpbmcsIGFuZCB1c2UtYWZ0ZXItZnJlZSwgYWxsIG9mIHdoaWNoIGFyZSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIHNhbml0aXplcnMgKEtBU0FOLCBMT0NLREVQKS4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIFJ4UlBDIG5ldHdvcmsgbmFtZXNwYWNlIHRlYXJkb3duIGxpZmVjeWNsZSBieSBzcGxpdHRpbmcgbmV0bnMgY2xlYW51cCBpbnRvIHByZV9leGl0IGFuZCBleGl0IGhhbmRsZXJzIChyeHJwY19wcmVfZXhpdF9uZXQgYW5kIHJ4cnBjX2V4aXRfbmV0KSBhbmQgYWRkcyBsb2NraW5nIChwZWVyX2hhc2hfbG9jaykgaW4gcnhycGNfZGVzdHJveV9hbGxfcGVlcnMgdG8gcHJldmVudCB1c2UtYWZ0ZXItZnJlZSBjb25kaXRpb25zIGR1cmluZyBwZWVyIGhhc2ggdGFibGUgdHJhdmVyc2FsLiBUaGVzZSBjaGFuZ2VzIHRvdWNoIHJlYWNoYWJsZSBuZXR3b3JraW5nIGNvZGUgdGhhdCBpcyBleGVyY2lzZWQgZHVyaW5nIG5ldG5zIGxpZmVjeWNsZSBhbmQgQUZfUlhSUEMgc29ja2V0IG9wZXJhdGlvbnMsIG1ha2luZyBpdCB3b3J0aHdoaWxlIHRvIGZ1enouJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDI6NTk8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBlMjVkMjE5Yzk4ZDc1Y2Y3Njg0OGMxNjljMWJmM2RkMWZkYWNjMTYwXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBTZXAgOCAwMjo1OTowOCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvcnhycGMvbmV0X25zLmMgYi9uZXQvcnhycGMvbmV0X25zLmNcbmluZGV4IDlhOTgzNDE0NWU4MWUuLjE2OTExNjczNTM2NjMgMTAwNjQ0XG4tLS0gYS9uZXQvcnhycGMvbmV0X25zLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9yeHJwYy9uZXRfbnMuY1xuQEAgLTk3LDEwICYjNDM7OTcsNyBAQCBzdGF0aWMgX19uZXRfaW5pdCBpbnQgcnhycGNfaW5pdF9uZXQoc3RydWN0IG5ldCAqbmV0KVxuIFx0cmV0dXJuIHJldDtcbiB9XG4gXG4tLypcbi0gKiBDbGVhbiB1cCBhIHBlci1uZXR3b3JrIG5hbWVzcGFjZSByZWNvcmQuXG4tICovXG4tc3RhdGljIF9fbmV0X2V4aXQgdm9pZCByeHJwY19leGl0X25ldChzdHJ1Y3QgbmV0ICpuZXQpXG4mIzQzO3N0YXRpYyBfX25ldF9leGl0IHZvaWQgcnhycGNfcHJlX2V4aXRfbmV0KHN0cnVjdCBuZXQgKm5ldClcbiB7XG4gXHRzdHJ1Y3QgcnhycGNfbmV0ICpyeG5ldCA9IHJ4cnBjX25ldChuZXQpO1xuIFxuQEAgLTExMSwxNCAmIzQzOzEwOCwyNCBAQCBzdGF0aWMgX19uZXRfZXhpdCB2b2lkIHJ4cnBjX2V4aXRfbmV0KHN0cnVjdCBuZXQgKm5ldClcbiBcdHRpbWVyX2RlbGV0ZV9zeW5jKFx1MDAyNnJ4bmV0LVx1MDAzZXBlZXJfa2VlcGFsaXZlX3RpbWVyKTtcbiBcdHJ4cnBjX2Rlc3Ryb3lfYWxsX2NhbGxzKHJ4bmV0KTtcbiBcdHJ4cnBjX2Rlc3Ryb3lfYWxsX2Nvbm5lY3Rpb25zKHJ4bmV0KTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LypcbiYjNDM7ICogQ2xlYW4gdXAgYSBwZXItbmV0d29yayBuYW1lc3BhY2UgcmVjb3JkLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIF9fbmV0X2V4aXQgdm9pZCByeHJwY19leGl0X25ldChzdHJ1Y3QgbmV0ICpuZXQpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgcnhycGNfbmV0ICpyeG5ldCA9IHJ4cnBjX25ldChuZXQpO1xuJiM0MztcbiBcdHJ4cnBjX2Rlc3Ryb3lfYWxsX3BlZXJzKHJ4bmV0KTtcbiBcdHJ4cnBjX2Rlc3Ryb3lfYWxsX2xvY2FscyhyeG5ldCk7XG4gXHRwcm9jX3JlbW92ZShyeG5ldC1cdTAwM2Vwcm9jX25ldCk7XG4gfVxuIFxuIHN0cnVjdCBwZXJuZXRfb3BlcmF0aW9ucyByeHJwY19uZXRfb3BzID0ge1xuLVx0LmluaXRcdD0gcnhycGNfaW5pdF9uZXQsXG4tXHQuZXhpdFx0PSByeHJwY19leGl0X25ldCxcbi1cdC5pZFx0PSBcdTAwMjZyeHJwY19uZXRfaWQsXG4tXHQuc2l6ZVx0PSBzaXplb2Yoc3RydWN0IHJ4cnBjX25ldCksXG4mIzQzO1x0LmluaXRcdFx0PSByeHJwY19pbml0X25ldCxcbiYjNDM7XHQucHJlX2V4aXRcdD0gcnhycGNfcHJlX2V4aXRfbmV0LFxuJiM0MztcdC5leGl0XHRcdD0gcnhycGNfZXhpdF9uZXQsXG4mIzQzO1x0LmlkXHRcdD0gXHUwMDI2cnhycGNfbmV0X2lkLFxuJiM0MztcdC5zaXplXHRcdD0gc2l6ZW9mKHN0cnVjdCByeHJwY19uZXQpLFxuIH07XG5kaWZmIC0tZ2l0IGEvbmV0L3J4cnBjL3BlZXJfb2JqZWN0LmMgYi9uZXQvcnhycGMvcGVlcl9vYmplY3QuY1xuaW5kZXggZmE5YTQwNmUxMTY4My4uZmFhMjk4MzYzOGIyYiAxMDA2NDRcbi0tLSBhL25ldC9yeHJwYy9wZWVyX29iamVjdC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvcnhycGMvcGVlcl9vYmplY3QuY1xuQEAgLTQ1NCw2ICYjNDM7NDU0LDEyIEBAIHZvaWQgcnhycGNfZGVzdHJveV9hbGxfcGVlcnMoc3RydWN0IHJ4cnBjX25ldCAqcnhuZXQpXG4gXHRzdHJ1Y3QgcnhycGNfcGVlciAqcGVlcjtcbiBcdGludCBpO1xuIFxuJiM0MztcdC8qXG4mIzQzO1x0ICogUHJldmVudCB1c2UtYWZ0ZXItZnJlZSBpZiBhIHBlZXIgaXMgY29uY3VycmVudGx5IHVubGlua2VkIGZyb20gdGhlXG4mIzQzO1x0ICogaGFzaCB0YWJsZSBhbmQgZnJlZWQgdmlhIFJDVSBkdXJpbmcgaXRlcmF0aW9uLlxuJiM0MztcdCAqL1xuJiM0MztcdHNwaW5fbG9ja19iaChcdTAwMjZyeG5ldC1cdTAwM2VwZWVyX2hhc2hfbG9jayk7XG4mIzQzO1xuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgSEFTSF9TSVpFKHJ4bmV0LVx1MDAzZXBlZXJfaGFzaCk7IGkmIzQzOyYjNDM7KSB7XG4gXHRcdGlmIChobGlzdF9lbXB0eShcdTAwMjZyeG5ldC1cdTAwM2VwZWVyX2hhc2hbaV0pKVxuIFx0XHRcdGNvbnRpbnVlO1xuQEAgLTQ2NSw2ICYjNDM7NDcxLDggQEAgdm9pZCByeHJwY19kZXN0cm95X2FsbF9wZWVycyhzdHJ1Y3QgcnhycGNfbmV0ICpyeG5ldClcbiBcdFx0XHQgICAgICAgXHUwMDI2cGVlci1cdTAwM2VzcngudHJhbnNwb3J0KTtcbiBcdFx0fVxuIFx0fVxuJiM0MztcbiYjNDM7XHRzcGluX3VubG9ja19iaChcdTAwMjZyeG5ldC1cdTAwM2VwZWVyX2hhc2hfbG9jayk7XG4gfVxuIFxuIC8qKlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDAyOjU5PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0FGX1JYUlBDJiMzNDssCiAgICAmIzM0O0lORVQmIzM0OywKICAgICYjMzQ7TkVUX05TJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7cnhycGNfcHJlX2V4aXRfbmV0JiMzNDssCiAgICAmIzM0O3J4cnBjX2V4aXRfbmV0JiMzNDssCiAgICAmIzM0O3J4cnBjX2Rlc3Ryb3lfYWxsX3BlZXJzJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBSeFJQQyBuZXR3b3JrIG5hbWVzcGFjZSB0ZWFyZG93biBsaWZlY3ljbGUgYnkgc3BsaXR0aW5nIG5ldG5zIGNsZWFudXAgaW50byBwcmVfZXhpdCBhbmQgZXhpdCBoYW5kbGVycyAocnhycGNfcHJlX2V4aXRfbmV0IGFuZCByeHJwY19leGl0X25ldCkgYW5kIGFkZHMgbG9ja2luZyAocGVlcl9oYXNoX2xvY2spIGluIHJ4cnBjX2Rlc3Ryb3lfYWxsX3BlZXJzIHRvIHByZXZlbnQgdXNlLWFmdGVyLWZyZWUgY29uZGl0aW9ucyBkdXJpbmcgcGVlciBoYXNoIHRhYmxlIHRyYXZlcnNhbC4gVGhlc2UgY2hhbmdlcyB0b3VjaCByZWFjaGFibGUgbmV0d29ya2luZyBjb2RlIHRoYXQgaXMgZXhlcmNpc2VkIGR1cmluZyBuZXRucyBsaWZlY3ljbGUgYW5kIEFGX1JYUlBDIHNvY2tldCBvcGVyYXRpb25zLCBtYWtpbmcgaXQgd29ydGh3aGlsZSB0byBmdXp6LiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3MKdG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncywKYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy4KCi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6CiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZAogIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuCiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLAogIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy4KCi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgJiMzNDtOTyBGVU5DVElPTkFMIENIQU5HRSYjMzQ7IChORkNJKSBPUiAmIzM0O1JFRkFDVE9SSU5HJiMzNDsgQ0xBSU1TOgogIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgJiMzNDtjbGVhbnVwcyYjMzQ7LCAmIzM0O3JlZmFjdG9yaW5ncyYjMzQ7LCBvciBzdGF0ZQogICYjMzQ7Tm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWQmIzM0Oy4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuCiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50CiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuCiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC4KCi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6CiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLAogIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLgogIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXIKICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoyLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOgoKLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOgogICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLgogICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pCiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuCiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50cwogICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy4KICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy4KLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6CiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczoKICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZwogICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuCiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQozLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6Ci0gQ29yZSBTdWJzeXN0ZW1zOgogICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLAogICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLgotIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczoKICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy4KLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6CiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuCi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczoKICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpXaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjoKCi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOgogIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzCiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHQKICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS4KICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgJiMzNDtmb2N1c2VkJiMzNDssCiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLgoKLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6CiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzCiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuCgotIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKToKICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrCiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuCiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyCiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlncwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOgotIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCi0gQ2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC4KLSBTdHJpcCBhbnkgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgZTI1ZDIxOWM5OGQ3NWNmNzY4NDhjMTY5YzFiZjNkZDFmZGFjYzE2MApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUdWUgU2VwIDggMDI6NTk6MDggMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQvcnhycGMvbmV0X25zLmMgYi9uZXQvcnhycGMvbmV0X25zLmMKaW5kZXggOWE5ODM0MTQ1ZTgxZS4uMTY5MTE2NzM1MzY2MyAxMDA2NDQKLS0tIGEvbmV0L3J4cnBjL25ldF9ucy5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9yeHJwYy9uZXRfbnMuYwpAQCAtOTcsMTAgJiM0Mzs5Nyw3IEBAIHN0YXRpYyBfX25ldF9pbml0IGludCByeHJwY19pbml0X25ldChzdHJ1Y3QgbmV0ICpuZXQpCiAJcmV0dXJuIHJldDsKIH0KIAotLyoKLSAqIENsZWFuIHVwIGEgcGVyLW5ldHdvcmsgbmFtZXNwYWNlIHJlY29yZC4KLSAqLwotc3RhdGljIF9fbmV0X2V4aXQgdm9pZCByeHJwY19leGl0X25ldChzdHJ1Y3QgbmV0ICpuZXQpCiYjNDM7c3RhdGljIF9fbmV0X2V4aXQgdm9pZCByeHJwY19wcmVfZXhpdF9uZXQoc3RydWN0IG5ldCAqbmV0KQogewogCXN0cnVjdCByeHJwY19uZXQgKnJ4bmV0ID0gcnhycGNfbmV0KG5ldCk7CiAKQEAgLTExMSwxNCAmIzQzOzEwOCwyNCBAQCBzdGF0aWMgX19uZXRfZXhpdCB2b2lkIHJ4cnBjX2V4aXRfbmV0KHN0cnVjdCBuZXQgKm5ldCkKIAl0aW1lcl9kZWxldGVfc3luYygmYW1wO3J4bmV0LSZndDtwZWVyX2tlZXBhbGl2ZV90aW1lcik7CiAJcnhycGNfZGVzdHJveV9hbGxfY2FsbHMocnhuZXQpOwogCXJ4cnBjX2Rlc3Ryb3lfYWxsX2Nvbm5lY3Rpb25zKHJ4bmV0KTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBDbGVhbiB1cCBhIHBlci1uZXR3b3JrIG5hbWVzcGFjZSByZWNvcmQuCiYjNDM7ICovCiYjNDM7c3RhdGljIF9fbmV0X2V4aXQgdm9pZCByeHJwY19leGl0X25ldChzdHJ1Y3QgbmV0ICpuZXQpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgcnhycGNfbmV0ICpyeG5ldCA9IHJ4cnBjX25ldChuZXQpOwomIzQzOwogCXJ4cnBjX2Rlc3Ryb3lfYWxsX3BlZXJzKHJ4bmV0KTsKIAlyeHJwY19kZXN0cm95X2FsbF9sb2NhbHMocnhuZXQpOwogCXByb2NfcmVtb3ZlKHJ4bmV0LSZndDtwcm9jX25ldCk7CiB9CiAKIHN0cnVjdCBwZXJuZXRfb3BlcmF0aW9ucyByeHJwY19uZXRfb3BzID0gewotCS5pbml0CT0gcnhycGNfaW5pdF9uZXQsCi0JLmV4aXQJPSByeHJwY19leGl0X25ldCwKLQkuaWQJPSAmYW1wO3J4cnBjX25ldF9pZCwKLQkuc2l6ZQk9IHNpemVvZihzdHJ1Y3QgcnhycGNfbmV0KSwKJiM0MzsJLmluaXQJCT0gcnhycGNfaW5pdF9uZXQsCiYjNDM7CS5wcmVfZXhpdAk9IHJ4cnBjX3ByZV9leGl0X25ldCwKJiM0MzsJLmV4aXQJCT0gcnhycGNfZXhpdF9uZXQsCiYjNDM7CS5pZAkJPSAmYW1wO3J4cnBjX25ldF9pZCwKJiM0MzsJLnNpemUJCT0gc2l6ZW9mKHN0cnVjdCByeHJwY19uZXQpLAogfTsKZGlmZiAtLWdpdCBhL25ldC9yeHJwYy9wZWVyX29iamVjdC5jIGIvbmV0L3J4cnBjL3BlZXJfb2JqZWN0LmMKaW5kZXggZmE5YTQwNmUxMTY4My4uZmFhMjk4MzYzOGIyYiAxMDA2NDQKLS0tIGEvbmV0L3J4cnBjL3BlZXJfb2JqZWN0LmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3J4cnBjL3BlZXJfb2JqZWN0LmMKQEAgLTQ1NCw2ICYjNDM7NDU0LDEyIEBAIHZvaWQgcnhycGNfZGVzdHJveV9hbGxfcGVlcnMoc3RydWN0IHJ4cnBjX25ldCAqcnhuZXQpCiAJc3RydWN0IHJ4cnBjX3BlZXIgKnBlZXI7CiAJaW50IGk7CiAKJiM0MzsJLyoKJiM0MzsJICogUHJldmVudCB1c2UtYWZ0ZXItZnJlZSBpZiBhIHBlZXIgaXMgY29uY3VycmVudGx5IHVubGlua2VkIGZyb20gdGhlCiYjNDM7CSAqIGhhc2ggdGFibGUgYW5kIGZyZWVkIHZpYSBSQ1UgZHVyaW5nIGl0ZXJhdGlvbi4KJiM0MzsJICovCiYjNDM7CXNwaW5fbG9ja19iaCgmYW1wO3J4bmV0LSZndDtwZWVyX2hhc2hfbG9jayk7CiYjNDM7CiAJZm9yIChpID0gMDsgaSAmbHQ7IEhBU0hfU0laRShyeG5ldC0mZ3Q7cGVlcl9oYXNoKTsgaSYjNDM7JiM0MzspIHsKIAkJaWYgKGhsaXN0X2VtcHR5KCZhbXA7cnhuZXQtJmd0O3BlZXJfaGFzaFtpXSkpCiAJCQljb250aW51ZTsKQEAgLTQ2NSw2ICYjNDM7NDcxLDggQEAgdm9pZCByeHJwY19kZXN0cm95X2FsbF9wZWVycyhzdHJ1Y3QgcnhycGNfbmV0ICpyeG5ldCkKIAkJCSAgICAgICAmYW1wO3BlZXItJmd0O3NyeC50cmFuc3BvcnQpOwogCQl9CiAJfQomIzQzOwomIzQzOwlzcGluX3VubG9ja19iaCgmYW1wO3J4bmV0LSZndDtwZWVyX2hhc2hfbG9jayk7CiB9CiAKIC8qKgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwMjo1OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNTU4CgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogMjk3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgcnhycGMgUGF0Y2ggZm9yIGFtZDY0KioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBwYXRjaCB0YXJnZXRpbmcgdGhlIGFtZDY0IGFyY2hpdGVjdHVyZS4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IHBvaW50cyB0byBtb2RpZmljYXRpb25zIGluIGBuZXQvcnhycGMvbmV0X25zLmNgIGFuZCBgbmV0L3J4cnBjL3BlZXJfb2JqZWN0LmNgLiBJdCBsb29rcyBsaWtlIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggc29tZSBuYW1lc3BhY2UgY2xlYW51cCBhbmQgcGVlciBtYW5hZ2VtZW50IGNoYW5nZXMgd2l0aGluIHRoZSByeHJwYyBzdWJzeXN0ZW0uCgpTcGVjaWZpY2FsbHksIGluIGBuZXRfbnMuY2AsIHRoZSByZWZhY3RvcmluZyBpcyBpbnRlcmVzdGluZy4gU3BsaXR0aW5nIGByeHJwY19leGl0X25ldGAgaW50byBgLnByZV9leGl0YCBhbmQgYC5leGl0YCBzdWdnZXN0cyBhIG1vcmUgZ3JhbnVsYXIgYXBwcm9hY2ggdG8gbmV0d29yayBuYW1lc3BhY2UgdGVhcmRvd24uICBgcnhycGNfcHJlX2V4aXRfbmV0YCBpcyBub3cgcmVzcG9uc2libGUgZm9yIHNldHRpbmcgYHJ4bmV0LSZndDtsaXZlID0gZmFsc2VgLCBzeW5jaW5nIHRpbWVycywgYW5kIGRlc3Ryb3lpbmcgY2FsbHMgYW5kIGNvbm5lY3Rpb25zLiBUaGF0JiMzOTtzIGEgcmVhc29uYWJsZSBvcmRlcmluZy4gVGhlIHNlY29uZCBwYXJ0LCBgcnhycGNfZXhpdF9uZXRgLCBoYW5kbGVzIHBlZXIsIGxvY2FsIGVuZHBvaW50IGRlc3RydWN0aW9uLCBhbmQgcHJvY2ZzIGNsZWFudXAuIFNvdW5kcyBsb2dpY2FsIHRvIG1lLiAgVGhpcyBzZXBhcmF0aW9uIGxpa2VseSBhaW1zIGZvciBiZXR0ZXIgc3luY2hyb25pemF0aW9uIG9yIHRoZSBuZWVkIHRvIG9yZGVyIGNsZWFudXAgYWN0aW9ucy4KCk92ZXIgaW4gYHBlZXJfb2JqZWN0LmNgLCB0aGUgYWRkaXRpb24gb2YgYHNwaW5fbG9ja19iaGAgYW5kIGBzcGluX3VubG9ja19iaGAgYXJvdW5kIHRoZSBgcnhuZXQtJmd0O3BlZXJfaGFzaF9sb2NrYCB3aXRoaW4gYHJ4cnBjX2Rlc3Ryb3lfYWxsX3BlZXJzYCBpcyBhIGNsZWFyIGluZGljYXRpb24gb2YgYSBjb25jdXJyZW5jeSBjb25jZXJuLiBJdCBzZWVtcyB3ZSBhcmUgdHJ5aW5nIHRvIGJldHRlciBwcm90ZWN0IHRoZSBwZWVyIGhhc2ggdGFibGUgZHVyaW5nIGRlc3RydWN0aW9uLCBwb3NzaWJseSB0byBhdm9pZCByYWNlIGNvbmRpdGlvbnMgd2hlbiBkZXN0cm95aW5nIHBlZXJzLgoKTm93LCB0byBnZXQgYSBzb2xpZCB1bmRlcnN0YW5kaW5nIG9mIHRoZSBpbXBsaWNhdGlvbnMsIEkgbmVlZCB0byBjaGVjayB0aGUgZGVwZW5kZW5jaWVzIGFuZCB0aGUgY29udGV4dCBvZiB0aGVzZSBjaGFuZ2VzLiBJJiMzOTtsbCBuZWVkIHRvIHVzZSBgZ3JlcGAgb3IgZGl2ZSBpbnRvIHRoZSBjb2RlIGRpcmVjdGx5IHRvIGlkZW50aWZ5IGFueSBjb25maWd1cmF0aW9uIG9wdGlvbnMgcmVxdWlyZWQgZm9yIHRoaXMgcGF0Y2ggdG8gd29yaywgYW5kIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBtb2RpZmllZCBmdW5jdGlvbnMgYXJlIGNhbGxlZCBhbmQgd2hhdCBvdGhlciBmdW5jdGlvbnMgdGhleSBpbnRlcmFjdCB3aXRoLiAgSSB3YW50IHRvIHNlZSB3aGF0IHRyaWdnZXJzIHRoZSBuYW1lc3BhY2UgZXhpdCBwcm9jZXNzLiBUaGF0JiMzOTtzIHdoZXJlIHRoZSByZWFsIHN0b3J5IGxpZXMuIFRoaXMgbG9va3MgbGlrZSBhIG5lY2Vzc2FyeSBjbGVhbnVwIHRvIGJldHRlciBoYW5kbGUgZGVzdHJ1Y3Rpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDI6NTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7QUZfUlhSUEMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvcnhycGMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3J4cnBjLy5rdW5pdGNvbmZpZz0zPUNPTkZJR19JTkVUPXlcbm5ldC9yeHJwYy8ua3VuaXRjb25maWc6NDpDT05GSUdfQUZfUlhSUEM9eVxubmV0L3J4cnBjLy5rdW5pdGNvbmZpZy01LUNPTkZJR19SWEtBRD15XG5uZXQvcnhycGMvLmt1bml0Y29uZmlnOjY6Q09ORklHX0FGX1JYUlBDX0tVTklUX1RFU1Q9eVxuLS1cbm5ldC9yeHJwYy9LY29uZmlnLTUtXG5uZXQvcnhycGMvS2NvbmZpZzo2OmNvbmZpZyBBRl9SWFJQQ1xubmV0L3J4cnBjL0tjb25maWctNy1cdHRyaXN0YXRlIFwmIzM0O1J4UlBDIHNlc3Npb24gc29ja2V0c1wmIzM0O1xuLS1cbm5ldC9yeHJwYy9LY29uZmlnLTI0LVxubmV0L3J4cnBjL0tjb25maWc6MjU6aWYgQUZfUlhSUENcbm5ldC9yeHJwYy9LY29uZmlnLTI2LVxubmV0L3J4cnBjL0tjb25maWc6Mjc6Y29uZmlnIEFGX1JYUlBDX0lQVjZcbm5ldC9yeHJwYy9LY29uZmlnLTI4LVx0Ym9vbCBcJiMzNDtJUHY2IHN1cHBvcnQgZm9yIFJ4UlBDXCYjMzQ7XG4tLVxubmV0L3J4cnBjL0tjb25maWctMzAtXHRoZWxwXG5uZXQvcnhycGMvS2NvbmZpZzozMTpcdCAgU2F5IFkgaGVyZSB0byBhbGxvdyBBRl9SWFJQQyB0byB1c2UgSVBWNiBVRFAgYXMgd2VsbCBhcyBJUFY0IFVEUCBhc1xubmV0L3J4cnBjL0tjb25maWctMzItXHQgIGl0cyBuZXR3b3JrIHRyYW5zcG9ydC5cbm5ldC9yeHJwYy9LY29uZmlnLTMzLVxubmV0L3J4cnBjL0tjb25maWc6MzQ6Y29uZmlnIEFGX1JYUlBDX0lOSkVDVF9MT1NTXG5uZXQvcnhycGMvS2NvbmZpZy0zNS1cdGJvb2wgXCYjMzQ7SW5qZWN0IHBhY2tldCBsb3NzIGludG8gUnhSUEMgcGFja2V0IHN0cmVhbVwmIzM0O1xuLS1cbm5ldC9yeHJwYy9LY29uZmlnLTM5LVxubmV0L3J4cnBjL0tjb25maWc6NDA6Y29uZmlnIEFGX1JYUlBDX0lOSkVDVF9SWF9ERUxBWVxubmV0L3J4cnBjL0tjb25maWctNDEtXHRib29sIFwmIzM0O0luamVjdCBkZWxheSBpbnRvIHBhY2tldCByZWNlcHRpb25cJiMzNDtcbi0tXG5uZXQvcnhycGMvS2NvbmZpZy00OS1cbm5ldC9yeHJwYy9LY29uZmlnOjUwOmNvbmZpZyBBRl9SWFJQQ19ERUJVR1xubmV0L3J4cnBjL0tjb25maWctNTEtXHRib29sIFwmIzM0O1J4UlBDIGR5bmFtaWMgZGVidWdnaW5nXCYjMzQ7XG4tLVxubmV0L3J4cnBjL0tjb25maWc9NTg9Y29uZmlnIFJYS0FEXG4tLVxubmV0L3J4cnBjL0tjb25maWctNjAtXHRoZWxwXG5uZXQvcnhycGMvS2NvbmZpZzo2MTpcdCAgUHJvdmlkZSBrZXJiZXJvcyA0IGFuZCBBRlMga2FzZXJ2ZXIgc2VjdXJpdHkgaGFuZGxpbmcgZm9yIEFGX1JYUlBDXG5uZXQvcnhycGMvS2NvbmZpZy02Mi1cdCAgdGhyb3VnaCB0aGUgdXNlIG9mIHRoZSBrZXkgcmV0ZW50aW9uIHNlcnZpY2UuXG4tLVxubmV0L3J4cnBjL0tjb25maWc9ODk9Y29uZmlnIFJYUEVSRlxuLS1cbm5ldC9yeHJwYy9LY29uZmlnLTk1LVxubmV0L3J4cnBjL0tjb25maWc6OTY6Y29uZmlnIEFGX1JYUlBDX0tVTklUX1RFU1Rcbm5ldC9yeHJwYy9LY29uZmlnLTk3LVx0dHJpc3RhdGUgXCYjMzQ7UnhSUEMgY3J5cHRvIEtVbml0IHRlc3RcJiMzNDsgaWYgIUtVTklUX0FMTF9URVNUU1xuLS1cbm5ldC9yeHJwYy9NYWtlZmlsZS01LVxubmV0L3J4cnBjL01ha2VmaWxlOjY6b2JqLSQoQ09ORklHX0FGX1JYUlBDKSAmIzQzOz0gcnhycGMub1xubmV0L3J4cnBjL01ha2VmaWxlLTctXG4tLVxubmV0L3J4cnBjL2FmX3J4cnBjLmMtMS0vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vci1sYXRlclxubmV0L3J4cnBjL2FmX3J4cnBjLmM6MjovKiBBRl9SWFJQQyBpbXBsZW1lbnRhdGlvblxubmV0L3J4cnBjL2FmX3J4cnBjLmMtMy0gKlxuLS1cbm5ldC9yeHJwYy9hZl9yeHJwYy5jPTc3PXN0YXRpYyBpbnQgcnhycGNfdmFsaWRhdGVfYWRkcmVzcyhzdHJ1Y3QgcnhycGNfc29jayAqcngsXG4tLVxubmV0L3J4cnBjL2FmX3J4cnBjLmMtODUtXG5uZXQvcnhycGMvYWZfcnhycGMuYzo4NjpcdGlmIChzcngtXHUwMDNlc3J4X2ZhbWlseSAhPSBBRl9SWFJQQylcbm5ldC9yeHJwYy9hZl9yeHJwYy5jLTg3LVx0XHRyZXR1cm4gLUVBRk5PU1VQUE9SVDtcbi0tXG5uZXQvcnhycGMvYWZfcnhycGMuYy0xMDYtXG5uZXQvcnhycGMvYWZfcnhycGMuYzoxMDc6I2lmZGVmIENPTkZJR19BRl9SWFJQQ19JUFY2XG5uZXQvcnhycGMvYWZfcnhycGMuYy0xMDgtXHRjYXNlIEFGX0lORVQ2OlxuLS1cbm5ldC9yeHJwYy9hZl9yeHJwYy5jPTUzOD1zdGF0aWMgaW50IHJ4cnBjX3NlbmRtc2coc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbSwgc2l6ZV90IGxlbilcbi0tXG5uZXQvcnhycGMvYWZfcnhycGMuYy01NjEtXHRjYXNlIFJYUlBDX0NMSUVOVF9VTkJPVU5EOlxubmV0L3J4cnBjL2FmX3J4cnBjLmM6NTYyOlx0XHRyeC1cdTAwM2Vzcnguc3J4X2ZhbWlseSA9IEFGX1JYUlBDO1xubmV0L3J4cnBjL2FmX3J4cnBjLmMtNTYzLVx0XHRyeC1cdTAwM2Vzcnguc3J4X3NlcnZpY2UgPSAwO1xuLS1cbm5ldC9yeHJwYy9hZl9yeHJwYy5jLTU2OS1cdFx0XHRicmVhaztcbm5ldC9yeHJwYy9hZl9yeHJwYy5jOjU3MDojaWZkZWYgQ09ORklHX0FGX1JYUlBDX0lQVjZcbm5ldC9yeHJwYy9hZl9yeHJwYy5jLTU3MS1cdFx0Y2FzZSBBRl9JTkVUNjpcbi0tXG5uZXQvcnhycGMvYWZfcnhycGMuYz04MDI9c3RhdGljIGludCByeHJwY19jcmVhdGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBpbnQgcHJvdG9jb2wsXG4tLVxubmV0L3J4cnBjL2FmX3J4cnBjLmMtODEyLVx0aWYgKHByb3RvY29sICE9IFBGX0lORVQgXHUwMDI2XHUwMDI2XG5uZXQvcnhycGMvYWZfcnhycGMuYzo4MTM6XHQgICAgSVNfRU5BQkxFRChDT05GSUdfQUZfUlhSUENfSVBWNikgXHUwMDI2XHUwMDI2IHByb3RvY29sICE9IFBGX0lORVQ2KVxubmV0L3J4cnBjL2FmX3J4cnBjLmMtODE0LVx0XHRyZXR1cm4gLUVQUk9UT05PU1VQUE9SVDtcbi0tXG5uZXQvcnhycGMvYXItaW50ZXJuYWwuaC0xLS8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9yLWxhdGVyICovXG5uZXQvcnhycGMvYXItaW50ZXJuYWwuaDoyOi8qIEFGX1JYUlBDIGludGVybmFsIGRlZmluaXRpb25zXG5uZXQvcnhycGMvYXItaW50ZXJuYWwuaC0zLSAqXG4tLVxubmV0L3J4cnBjL2FyLWludGVybmFsLmg9MjY1PXN0cnVjdCByeHJwY19zZWN1cml0eSB7XG4tLVxubmV0L3J4cnBjL2FyLWludGVybmFsLmgtMzQzLSAqIFJ4UlBDIGxvY2FsIHRyYW5zcG9ydCBlbmRwb2ludCBkZXNjcmlwdGlvblxubmV0L3J4cnBjL2FyLWludGVybmFsLmg6MzQ0OiAqIC0gb3duZWQgYnkgYSBzaW5nbGUgQUZfUlhSUEMgc29ja2V0XG5uZXQvcnhycGMvYXItaW50ZXJuYWwuaC0zNDUtICogLSBwb2ludGVkIHRvIGJ5IHRyYW5zcG9ydCBzb2NrZXQgc3RydWN0IHNrX3VzZXJfZGF0YVxuLS1cbm5ldC9yeHJwYy9hci1pbnRlcm5hbC5oPTM0Nz1zdHJ1Y3QgcnhycGNfbG9jYWwge1xuLS1cbm5ldC9yeHJwYy9hci1pbnRlcm5hbC5oLTM1OC1cdHN0cnVjdCByeHJwY19zb2NrXHQqc2VydmljZTtcdC8qIFNlcnZpY2UocykgbGlzdGVuaW5nIG9uIHRoaXMgZW5kcG9pbnQgKi9cbm5ldC9yeHJwYy9hci1pbnRlcm5hbC5oOjM1OTojaWZkZWYgQ09ORklHX0FGX1JYUlBDX0lOSkVDVF9SWF9ERUxBWVxubmV0L3J4cnBjL2FyLWludGVybmFsLmgtMzYwLVx0c3RydWN0IHNrX2J1ZmZfaGVhZFx0cnhfZGVsYXlfcXVldWU7XHQvKiBEZWxheSBpbmplY3Rpb24gcXVldWUgKi9cbi0tXG5uZXQvcnhycGMvYXItaW50ZXJuYWwuaD0xMzY0PWV4dGVybiB1bnNpZ25lZCBpbnQgcnhycGNfcnhfanVtYm9fbWF4O1xubmV0L3J4cnBjL2FyLWludGVybmFsLmg6MTM2NTojaWZkZWYgQ09ORklHX0FGX1JYUlBDX0lOSkVDVF9SWF9ERUxBWVxubmV0L3J4cnBjL2FyLWludGVybmFsLmgtMTM2Ni1leHRlcm4gdW5zaWduZWQgbG9uZyByeHJwY19pbmplY3RfcnhfZGVsYXk7XG4tLVxubmV0L3J4cnBjL2FyLWludGVybmFsLmg9MTYyMT1leHRlcm4gdW5zaWduZWQgaW50IHJ4cnBjX2RlYnVnO1xuLS1cbm5ldC9yeHJwYy9hci1pbnRlcm5hbC5oLTE2MzUtXG5uZXQvcnhycGMvYXItaW50ZXJuYWwuaDoxNjM2OiNlbGlmIGRlZmluZWQoQ09ORklHX0FGX1JYUlBDX0RFQlVHKVxubmV0L3J4cnBjL2FyLWludGVybmFsLmgtMTYzNy0jZGVmaW5lIFJYUlBDX0RFQlVHX0tFTlRFUlx0MHgwMVxuLS1cbm5ldC9yeHJwYy9jb25uX2NsaWVudC5jPTU0PXN0YXRpYyB2b2lkIHJ4cnBjX2Rlc3Ryb3lfY2xpZW50X2Nvbm5faWRzKHN0cnVjdCByeHJwY19sb2NhbCAqbG9jYWwpXG4tLVxubmV0L3J4cnBjL2Nvbm5fY2xpZW50LmMtNjAtXHRcdGlkcl9mb3JfZWFjaF9lbnRyeShcdTAwMjZsb2NhbC1cdTAwM2Vjb25uX2lkcywgY29ubiwgaWQpIHtcbm5ldC9yeHJwYy9jb25uX2NsaWVudC5jOjYxOlx0XHRcdHByX2VycihcJiMzNDtBRl9SWFJQQzogTGVha2VkIGNsaWVudCBjb25uICVwIHslZH1cXG5cJiMzNDssXG5uZXQvcnhycGMvY29ubl9jbGllbnQuYy02Mi1cdFx0XHQgICAgICAgY29ubiwgcmVmY291bnRfcmVhZChcdTAwMjZjb25uLVx1MDAzZXJlZikpO1xuLS1cbm5ldC9yeHJwYy9jb25uX29iamVjdC5jPTk3PXN0cnVjdCByeHJwY19jb25uZWN0aW9uICpyeHJwY19maW5kX2NsaWVudF9jb25uZWN0aW9uX3JjdShzdHJ1Y3QgcnhycGNfbG9jYWwgKmxvY2FsLFxuLS1cbm5ldC9yeHJwYy9jb25uX29iamVjdC5jLTEyNi1cdFx0YnJlYWs7XG5uZXQvcnhycGMvY29ubl9vYmplY3QuYzoxMjc6I2lmZGVmIENPTkZJR19BRl9SWFJQQ19JUFY2XG5uZXQvcnhycGMvY29ubl9vYmplY3QuYy0xMjgtXHRjYXNlIEFGX0lORVQ2OlxuLS1cbm5ldC9yeHJwYy9jb25uX29iamVjdC5jPTQ2Nj12b2lkIHJ4cnBjX2Rlc3Ryb3lfYWxsX2Nvbm5lY3Rpb25zKHN0cnVjdCByeHJwY19uZXQgKnJ4bmV0KVxuLS1cbm5ldC9yeHJwYy9jb25uX29iamVjdC5jLTQ4MC1cdGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShjb25uLCBfcCwgXHUwMDI2cnhuZXQtXHUwMDNlc2VydmljZV9jb25ucywgbGluaykge1xubmV0L3J4cnBjL2Nvbm5fb2JqZWN0LmM6NDgxOlx0XHRwcl9lcnIoXCYjMzQ7QUZfUlhSUEM6IExlYWtlZCBjb25uICVwIHslZH1cXG5cJiMzNDssXG5uZXQvcnhycGMvY29ubl9vYmplY3QuYy00ODItXHRcdCAgICAgICBjb25uLCByZWZjb3VudF9yZWFkKFx1MDAyNmNvbm4tXHUwMDNlcmVmKSk7XG4tLVxubmV0L3J4cnBjL2lvX3RocmVhZC5jPTI2PWludCByeHJwY19lbmNhcF9yY3Yoc3RydWN0IHNvY2sgKnVkcF9zaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvcnhycGMvaW9fdGhyZWFkLmMtNDYtXHRyeF9xdWV1ZSA9IFx1MDAyNmxvY2FsLVx1MDAzZXJ4X3F1ZXVlO1xubmV0L3J4cnBjL2lvX3RocmVhZC5jOjQ3OiNpZmRlZiBDT05GSUdfQUZfUlhSUENfSU5KRUNUX1JYX0RFTEFZXG5uZXQvcnhycGMvaW9fdGhyZWFkLmMtNDgtXHRpZiAocnhycGNfaW5qZWN0X3J4X2RlbGF5IHx8XG4tLVxubmV0L3J4cnBjL2lvX3RocmVhZC5jPTE5NT1zdGF0aWMgYm9vbCByeHJwY19pbnB1dF9wYWNrZXQoc3RydWN0IHJ4cnBjX2xvY2FsICpsb2NhbCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvcnhycGMvaW9fdGhyZWFkLmMtMjEwLVxubmV0L3J4cnBjL2lvX3RocmVhZC5jOjIxMTpcdGlmIChJU19FTkFCTEVEKENPTkZJR19BRl9SWFJQQ19JTkpFQ1RfTE9TUykpIHtcbm5ldC9yeHJwYy9pb190aHJlYWQuYy0yMTItXHRcdHN0YXRpYyBpbnQgbG9zZTtcbi0tXG5uZXQvcnhycGMvaW9fdGhyZWFkLmMtMjc1LVx0ICAgICBsb2NhbC1cdTAwM2VzcngudHJhbnNwb3J0LmZhbWlseSAhPSBBRl9JTkVUNikpIHtcbm5ldC9yeHJwYy9pb190aHJlYWQuYzoyNzY6XHRcdHByX3dhcm5fcmF0ZWxpbWl0ZWQoXCYjMzQ7QUZfUlhSUEM6IFByb3RvY29sIG1pc21hdGNoICV1IG5vdCAldVxcblwmIzM0Oyxcbm5ldC9yeHJwYy9pb190aHJlYWQuYy0yNzctXHRcdFx0XHQgICAgcGVlcl9zcngudHJhbnNwb3J0LmZhbWlseSxcbi0tXG5uZXQvcnhycGMvaW9fdGhyZWFkLmM9NDMwPWludCByeHJwY19pb190aHJlYWQodm9pZCAqZGF0YSlcbi0tXG5uZXQvcnhycGMvaW9fdGhyZWFkLmMtNDM2LVx0c3RydWN0IHNrX2J1ZmYgKnNrYjtcbm5ldC9yeHJwYy9pb190aHJlYWQuYzo0Mzc6I2lmZGVmIENPTkZJR19BRl9SWFJQQ19JTkpFQ1RfUlhfREVMQVlcbm5ldC9yeHJwYy9pb190aHJlYWQuYy00MzgtXHRrdGltZV90IG5vdztcbi0tXG5uZXQvcnhycGMvaW9fdGhyZWFkLmMtNDUzLVx0XHQvKiBJbmplY3QgYSBkZWxheSBpbnRvIHBhY2tldHMgaWYgcmVxdWVzdGVkLiAqL1xubmV0L3J4cnBjL2lvX3RocmVhZC5jOjQ1NDojaWZkZWYgQ09ORklHX0FGX1JYUlBDX0lOSkVDVF9SWF9ERUxBWVxubmV0L3J4cnBjL2lvX3RocmVhZC5jLTQ1NS1cdFx0bm93ID0ga3RpbWVfZ2V0X3JlYWwoKTtcbi0tXG5uZXQvcnhycGMvaW9fdGhyZWFkLmMtNTUyLVxubmV0L3J4cnBjL2lvX3RocmVhZC5jOjU1MzojaWZkZWYgQ09ORklHX0FGX1JYUlBDX0lOSkVDVF9SWF9ERUxBWVxubmV0L3J4cnBjL2lvX3RocmVhZC5jLTU1NC1cdFx0c2tiID0gc2tiX3BlZWsoXHUwMDI2bG9jYWwtXHUwMDNlcnhfZGVsYXlfcXVldWUpO1xuLS1cbm5ldC9yeHJwYy9sb2NhbF9ldmVudC5jLTEtLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb3ItbGF0ZXJcbm5ldC9yeHJwYy9sb2NhbF9ldmVudC5jOjI6LyogQUZfUlhSUEMgbG9jYWwgZW5kcG9pbnQgbWFuYWdlbWVudFxubmV0L3J4cnBjL2xvY2FsX2V2ZW50LmMtMy0gKlxuLS1cbm5ldC9yeHJwYy9sb2NhbF9ldmVudC5jLTE4LVxubmV0L3J4cnBjL2xvY2FsX2V2ZW50LmM6MTk6c3RhdGljIGNoYXIgcnhycGNfdmVyc2lvbl9zdHJpbmdbNjVdOyAvLyBcJiMzNDtsaW51eC1cJiMzNDsgVVRTX1JFTEVBU0UgXCYjMzQ7IEFGX1JYUlBDXCYjMzQ7O1xubmV0L3J4cnBjL2xvY2FsX2V2ZW50LmMtMjAtXG4tLVxubmV0L3J4cnBjL2xvY2FsX2V2ZW50LmM9MjQ9dm9pZCByeHJwY19nZW5fdmVyc2lvbl9zdHJpbmcodm9pZClcbi0tXG5uZXQvcnhycGMvbG9jYWxfZXZlbnQuYy0yNi1cdHNucHJpbnRmKHJ4cnBjX3ZlcnNpb25fc3RyaW5nLCBzaXplb2YocnhycGNfdmVyc2lvbl9zdHJpbmcpLFxubmV0L3J4cnBjL2xvY2FsX2V2ZW50LmM6Mjc6XHRcdCBcJiMzNDtsaW51eC0lLjQ5cyBBRl9SWFJQQ1wmIzM0OywgVVRTX1JFTEVBU0UpO1xubmV0L3J4cnBjL2xvY2FsX2V2ZW50LmMtMjgtfVxuLS1cbm5ldC9yeHJwYy9sb2NhbF9vYmplY3QuYz0zMD1zdGF0aWMgdm9pZCByeHJwY19lbmNhcF9lcnJfcmN2KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IGVycixcbi0tXG5uZXQvcnhycGMvbG9jYWxfb2JqZWN0LmMtMzQtXHRcdHJldHVybiBpcF9pY21wX2Vycm9yKHNrLCBza2IsIGVyciwgcG9ydCwgaW5mbywgcGF5bG9hZCk7XG5uZXQvcnhycGMvbG9jYWxfb2JqZWN0LmM6MzU6XHRpZiAoSVNfRU5BQkxFRChDT05GSUdfQUZfUlhSUENfSVBWNikpXG5uZXQvcnhycGMvbG9jYWxfb2JqZWN0LmMtMzYtXHRcdHJldHVybiBpcHY2X2ljbXBfZXJyb3Ioc2ssIHNrYiwgZXJyLCBwb3J0LCBpbmZvLCBwYXlsb2FkKTtcbi0tXG5uZXQvcnhycGMvbG9jYWxfb2JqZWN0LmM9NTk9c3RhdGljIGxvbmcgcnhycGNfbG9jYWxfY21wX2tleShjb25zdCBzdHJ1Y3QgcnhycGNfbG9jYWwgKmxvY2FsLFxuLS1cbm5ldC9yeHJwYy9sb2NhbF9vYmplY3QuYy03OS1cdFx0XHQgICAgICAgc2l6ZW9mKHN0cnVjdCBpbl9hZGRyKSk7XG5uZXQvcnhycGMvbG9jYWxfb2JqZWN0LmM6ODA6I2lmZGVmIENPTkZJR19BRl9SWFJQQ19JUFY2XG5uZXQvcnhycGMvbG9jYWxfb2JqZWN0LmMtODEtXHRjYXNlIEFGX0lORVQ2OlxuLS1cbm5ldC9yeHJwYy9sb2NhbF9vYmplY3QuYz0xMDk9c3RhdGljIHN0cnVjdCByeHJwY19sb2NhbCAqcnhycGNfYWxsb2NfbG9jYWwoc3RydWN0IG5ldCAqbmV0LFxuLS1cbm5ldC9yeHJwYy9sb2NhbF9vYmplY3QuYy0xMjItXHRcdGluaXRfY29tcGxldGlvbihcdTAwMjZsb2NhbC1cdTAwM2Vpb190aHJlYWRfcmVhZHkpO1xubmV0L3J4cnBjL2xvY2FsX29iamVjdC5jOjEyMzojaWZkZWYgQ09ORklHX0FGX1JYUlBDX0lOSkVDVF9SWF9ERUxBWVxubmV0L3J4cnBjL2xvY2FsX29iamVjdC5jLTEyNC1cdFx0c2tiX3F1ZXVlX2hlYWRfaW5pdChcdTAwMjZsb2NhbC1cdTAwM2VyeF9kZWxheV9xdWV1ZSk7XG4tLVxubmV0L3J4cnBjL2xvY2FsX29iamVjdC5jPTE2Mj1zdGF0aWMgaW50IHJ4cnBjX29wZW5fc29ja2V0KHN0cnVjdCByeHJwY19sb2NhbCAqbG9jYWwsIHN0cnVjdCBuZXQgKm5ldClcbi0tXG5uZXQvcnhycGMvbG9jYWxfb2JqZWN0LmMtMTc4LVx0XHR1ZHBfY29uZi5sb2NhbF91ZHBfcG9ydCA9IHNyeC1cdTAwM2V0cmFuc3BvcnQuc2luLnNpbl9wb3J0O1xubmV0L3J4cnBjL2xvY2FsX29iamVjdC5jOjE3OTojaWYgSVNfRU5BQkxFRChDT05GSUdfQUZfUlhSUENfSVBWNilcbm5ldC9yeHJwYy9sb2NhbF9vYmplY3QuYy0xODAtXHR9IGVsc2Uge1xuLS1cbm5ldC9yeHJwYy9sb2NhbF9vYmplY3QuYz00MjA9dm9pZCByeHJwY19kZXN0cm95X2xvY2FsKHN0cnVjdCByeHJwY19sb2NhbCAqbG9jYWwpXG4tLVxubmV0L3J4cnBjL2xvY2FsX29iamVjdC5jLTQ0Ni1cdCAqL1xubmV0L3J4cnBjL2xvY2FsX29iamVjdC5jOjQ0NzojaWZkZWYgQ09ORklHX0FGX1JYUlBDX0lOSkVDVF9SWF9ERUxBWVxubmV0L3J4cnBjL2xvY2FsX29iamVjdC5jLTQ0OC1cdHJ4cnBjX3B1cmdlX3F1ZXVlKFx1MDAyNmxvY2FsLVx1MDAzZXJ4X2RlbGF5X3F1ZXVlKTtcbi0tXG5uZXQvcnhycGMvbG9jYWxfb2JqZWN0LmM9NDY5PXZvaWQgcnhycGNfZGVzdHJveV9hbGxfbG9jYWxzKHN0cnVjdCByeHJwY19uZXQgKnJ4bmV0KVxuLS1cbm5ldC9yeHJwYy9sb2NhbF9vYmplY3QuYy00NzktXHRcdGhsaXN0X2Zvcl9lYWNoX2VudHJ5KGxvY2FsLCBcdTAwMjZyeG5ldC1cdTAwM2Vsb2NhbF9lbmRwb2ludHMsIGxpbmspIHtcbm5ldC9yeHJwYy9sb2NhbF9vYmplY3QuYzo0ODA6XHRcdFx0cHJfZXJyKFwmIzM0O0FGX1JYUlBDOiBMZWFrZWQgbG9jYWwgJXAgeyVkfVxcblwmIzM0Oyxcbm5ldC9yeHJwYy9sb2NhbF9vYmplY3QuYy00ODEtXHRcdFx0ICAgICAgIGxvY2FsLCByZWZjb3VudF9yZWFkKFx1MDAyNmxvY2FsLVx1MDAzZXJlZikpO1xuLS1cbm5ldC9yeHJwYy9taXNjLmM9NTU9dW5zaWduZWQgaW50IHJ4cnBjX3J4X2p1bWJvX21heCA9IDQ2O1xubmV0L3J4cnBjL21pc2MuYy01Ni1cbm5ldC9yeHJwYy9taXNjLmM6NTc6I2lmZGVmIENPTkZJR19BRl9SWFJQQ19JTkpFQ1RfUlhfREVMQVlcbm5ldC9yeHJwYy9taXNjLmMtNTgtLypcbi0tXG5uZXQvcnhycGMvb3V0cHV0LmM9MTk9c3NpemVfdCBkb191ZHBfc2VuZG1zZyhzdHJ1Y3Qgc29ja2V0ICpzb2NrZXQsIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IGxlbilcbi0tXG5uZXQvcnhycGMvb3V0cHV0LmMtMjMtXG5uZXQvcnhycGMvb3V0cHV0LmM6MjQ6XHRpZiAoSVNfRU5BQkxFRChDT05GSUdfQUZfUlhSUENfSVBWNikpIHtcbm5ldC9yeHJwYy9vdXRwdXQuYy0yNS1cdFx0aWYgKHNhLVx1MDAzZXNhX2ZhbWlseSA9PSBBRl9JTkVUNikge1xuLS1cbm5ldC9yeHJwYy9vdXRwdXQuYz02Mzk9dm9pZCByeHJwY19zZW5kX2RhdGFfcGFja2V0KHN0cnVjdCByeHJwY19jYWxsICpjYWxsLCBzdHJ1Y3QgcnhycGNfc2VuZF9kYXRhX3JlcSAqcmVxKVxuLS1cbm5ldC9yeHJwYy9vdXRwdXQuYy02OTMtXG5uZXQvcnhycGMvb3V0cHV0LmM6Njk0Olx0aWYgKElTX0VOQUJMRUQoQ09ORklHX0FGX1JYUlBDX0lOSkVDVF9MT1NTKSkge1xubmV0L3J4cnBjL291dHB1dC5jLTY5NS1cdFx0c3RhdGljIGludCBsb3NlO1xuLS1cbm5ldC9yeHJwYy9wZWVyX2V2ZW50LmM9Mjg9c3RhdGljIHN0cnVjdCByeHJwY19wZWVyICpyeHJwY19sb29rdXBfcGVlcl9sb2NhbF9yY3Uoc3RydWN0IHJ4cnBjX2xvY2FsICpsb2NhbCxcbi0tXG5uZXQvcnhycGMvcGVlcl9ldmVudC5jLTY2LVxubmV0L3J4cnBjL3BlZXJfZXZlbnQuYzo2NzojaWZkZWYgQ09ORklHX0FGX1JYUlBDX0lQVjZcbm5ldC9yeHJwYy9wZWVyX2V2ZW50LmMtNjgtXHRjYXNlIEFGX0lORVQ2OlxuLS1cbm5ldC9yeHJwYy9wZWVyX29iamVjdC5jPTMwPXN0YXRpYyB1bnNpZ25lZCBsb25nIHJ4cnBjX3BlZXJfaGFzaF9rZXkoc3RydWN0IHJ4cnBjX2xvY2FsICpsb2NhbCxcbi0tXG5uZXQvcnhycGMvcGVlcl9vYmplY3QuYy00OS1cdFx0YnJlYWs7XG5uZXQvcnhycGMvcGVlcl9vYmplY3QuYzo1MDojaWZkZWYgQ09ORklHX0FGX1JYUlBDX0lQVjZcbm5ldC9yeHJwYy9wZWVyX29iamVjdC5jLTUxLVx0Y2FzZSBBRl9JTkVUNjpcbi0tXG5uZXQvcnhycGMvcGVlcl9vYmplY3QuYy01Ny1cdGRlZmF1bHQ6XG5uZXQvcnhycGMvcGVlcl9vYmplY3QuYzo1ODpcdFx0V0FSTigxLCBcJiMzNDtBRl9SWFJQQzogVW5zdXBwb3J0ZWQgdHJhbnNwb3J0IGFkZHJlc3MgZmFtaWx5XFxuXCYjMzQ7KTtcbm5ldC9yeHJwYy9wZWVyX29iamVjdC5jLTU5LVx0XHRyZXR1cm4gMDtcbi0tXG5uZXQvcnhycGMvcGVlcl9vYmplY3QuYz03OD1zdGF0aWMgbG9uZyByeHJwY19wZWVyX2NtcF9rZXkoY29uc3Qgc3RydWN0IHJ4cnBjX3BlZXIgKnBlZXIsXG4tLVxubmV0L3J4cnBjL3BlZXJfb2JqZWN0LmMtOTktXHRcdFx0ICAgICAgIHNpemVvZihzdHJ1Y3QgaW5fYWRkcikpO1xubmV0L3J4cnBjL3BlZXJfb2JqZWN0LmM6MTAwOiNpZmRlZiBDT05GSUdfQUZfUlhSUENfSVBWNlxubmV0L3J4cnBjL3BlZXJfb2JqZWN0LmMtMTAxLVx0Y2FzZSBBRl9JTkVUNjpcbi0tXG5uZXQvcnhycGMvcGVlcl9vYmplY3QuYz0xNTI9dm9pZCByeHJwY19hc3Nlc3NfTVRVX3NpemUoc3RydWN0IHJ4cnBjX2xvY2FsICpsb2NhbCwgc3RydWN0IHJ4cnBjX3BlZXIgKnBlZXIpXG4tLVxubmV0L3J4cnBjL3BlZXJfb2JqZWN0LmMtMTU4LVx0c3RydWN0IGZsb3dpNCAqZmw0ID0gXHUwMDI2ZmwudS5pcDQ7XG5uZXQvcnhycGMvcGVlcl9vYmplY3QuYzoxNTk6I2lmZGVmIENPTkZJR19BRl9SWFJQQ19JUFY2XG5uZXQvcnhycGMvcGVlcl9vYmplY3QuYy0xNjAtXHRzdHJ1Y3QgZmxvd2k2ICpmbDYgPSBcdTAwMjZmbC51LmlwNjtcbi0tXG5uZXQvcnhycGMvcGVlcl9vYmplY3QuYy0xODMtXG5uZXQvcnhycGMvcGVlcl9vYmplY3QuYzoxODQ6I2lmZGVmIENPTkZJR19BRl9SWFJQQ19JUFY2XG5uZXQvcnhycGMvcGVlcl9vYmplY3QuYy0xODUtXHRjYXNlIEFGX0lORVQ2OlxuLS1cbm5ldC9yeHJwYy9wZWVyX29iamVjdC5jPTI1MD1zdGF0aWMgdm9pZCByeHJwY19pbml0X3BlZXIoc3RydWN0IHJ4cnBjX2xvY2FsICpsb2NhbCwgc3RydWN0IHJ4cnBjX3BlZXIgKnBlZXIsXG4tLVxubmV0L3J4cnBjL3BlZXJfb2JqZWN0LmMtMjU5LVx0XHRicmVhaztcbm5ldC9yeHJwYy9wZWVyX29iamVjdC5jOjI2MDojaWZkZWYgQ09ORklHX0FGX1JYUlBDX0lQVjZcbm5ldC9yeHJwYy9wZWVyX29iamVjdC5jLTI2MS1cdGNhc2UgQUZfSU5FVDY6XG4tLVxubmV0L3J4cnBjL3BlZXJfb2JqZWN0LmM9NTM4PUVYUE9SVF9TWU1CT0wocnhycGNfa2VybmVsX3JlbW90ZV9hZGRyKTtcbi0tXG5uZXQvcnhycGMvcGVlcl9vYmplY3QuYy01NDQtICpcbm5ldC9yeHJwYy9wZWVyX29iamVjdC5jOjU0NTogKiBTZXQgdGhlIGFwcC1zcGVjaWZpYyBkYXRhIG9uIGEgcGVlci4gIEFGX1JYUlBDIG1ha2VzIG5vIGVmZm9ydCB0byByZXRhaW5cbm5ldC9yeHJwYy9wZWVyX29iamVjdC5jLTU0Ni0gKiBhbnl0aGluZyB0aGUgZGF0YSBtaWdodCByZWZlciB0by5cbi0tXG5uZXQvcnhycGMvcHJvYy5jLTEtLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb3ItbGF0ZXJcbm5ldC9yeHJwYy9wcm9jLmM6MjovKiAvcHJvYy9uZXQvIHN1cHBvcnQgZm9yIEFGX1JYUlBDXG5uZXQvcnhycGMvcHJvYy5jLTMtICpcbi0tXG5uZXQvcnhycGMvcnR0LmMtMy0gKlxubmV0L3J4cnBjL3J0dC5jOjQ6ICogQWRhcHRlZCBmcm9tIFRDUCBmb3IgQUZfUlhSUEMgYnkgRGF2aWQgSG93ZWxscyAoZGhvd2VsbHNAcmVkaGF0LmNvbSlcbm5ldC9yeHJwYy9ydHQuYy01LSAqXG4tLVxubmV0L3J4cnBjL3J4cGVyZi5jPTE4NT1zdGF0aWMgaW50IHJ4cGVyZl9vcGVuX3NvY2tldCh2b2lkKVxuLS1cbm5ldC9yeHJwYy9yeHBlcmYuYy0xOTAtXG5uZXQvcnhycGMvcnhwZXJmLmM6MTkxOlx0cmV0ID0gc29ja19jcmVhdGVfa2VybihcdTAwMjZpbml0X25ldCwgQUZfUlhSUEMsIFNPQ0tfREdSQU0sIFBGX0lORVQ2LFxubmV0L3J4cnBjL3J4cGVyZi5jLTE5Mi1cdFx0XHQgICAgICAgXHUwMDI2c29ja2V0KTtcbi0tXG5uZXQvcnhycGMvcnhwZXJmLmMtMTk5LVx0bWVtc2V0KFx1MDAyNnNyeCwgMCwgc2l6ZW9mKHNyeCkpO1xubmV0L3J4cnBjL3J4cGVyZi5jOjIwMDpcdHNyeC5zcnhfZmFtaWx5XHRcdFx0PSBBRl9SWFJQQztcbm5ldC9yeHJwYy9yeHBlcmYuYy0yMDEtXHRzcnguc3J4X3NlcnZpY2VcdFx0XHQ9IFJYX1BFUkZfU0VSVklDRTtcbi0tXG5uZXQvcnhycGMvc2VuZG1zZy5jLTEtLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb3ItbGF0ZXJcbm5ldC9yeHJwYy9zZW5kbXNnLmM6MjovKiBBRl9SWFJQQyBzZW5kbXNnKCkgaW1wbGVtZW50YXRpb24uXG5uZXQvcnhycGMvc2VuZG1zZy5jLTMtICpcbi0tXG5uZXQvcnhycGMvc3lzY3RsLmM9MjM9c3RhdGljIGNvbnN0IHVuc2lnbmVkIGxvbmcgbWF4X2ppZmZpZXMgPSBNQVhfSklGRllfT0ZGU0VUO1xubmV0L3J4cnBjL3N5c2N0bC5jOjI0OiNpZmRlZiBDT05GSUdfQUZfUlhSUENfSU5KRUNUX1JYX0RFTEFZXG5uZXQvcnhycGMvc3lzY3RsLmMtMjUtc3RhdGljIGNvbnN0IHVuc2lnbmVkIGxvbmcgbWF4XzUwMCA9IDUwMDtcbi0tXG5uZXQvcnhycGMvc3lzY3RsLmM9MzQ9c3RhdGljIHN0cnVjdCBjdGxfdGFibGUgcnhycGNfc3lzY3RsX3RhYmxlW10gPSB7XG4tLVxubmV0L3J4cnBjL3N5c2N0bC5jLTczLVx0LyogVmFsdWVzIHVzZWQgaW4gbWlsbGlzZWNvbmRzICovXG5uZXQvcnhycGMvc3lzY3RsLmM6NzQ6I2lmZGVmIENPTkZJR19BRl9SWFJQQ19JTkpFQ1RfUlhfREVMQVlcbm5ldC9yeHJwYy9zeXNjdGwuYy03NS1cdHtcbi0tXG5uZXQvcnhycGMvdGVzdHMvTWFrZWZpbGUtMi1cbm5ldC9yeHJwYy90ZXN0cy9NYWtlZmlsZTozOm9iai0kKENPTkZJR19BRl9SWFJQQ19LVU5JVF9URVNUKSAmIzQzOz0gcnhycGNfa3VuaXQub1xuLS1cbm5ldC9yeHJwYy91dGlscy5jPTE2PWludCByeHJwY19leHRyYWN0X2FkZHJfZnJvbV9za2Ioc3RydWN0IHNvY2thZGRyX3J4cnBjICpzcngsIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L3J4cnBjL3V0aWxzLmMtMjgtXG5uZXQvcnhycGMvdXRpbHMuYzoyOTojaWZkZWYgQ09ORklHX0FGX1JYUlBDX0lQVjZcbm5ldC9yeHJwYy91dGlscy5jLTMwLVx0Y2FzZSBFVEhfUF9JUFY2OlxuLS1cbm5ldC9yeHJwYy91dGlscy5jLTM5LVx0ZGVmYXVsdDpcbm5ldC9yeHJwYy91dGlscy5jOjQwOlx0XHRwcl93YXJuX3JhdGVsaW1pdGVkKFwmIzM0O0FGX1JYUlBDOiBVbmtub3duIGV0aCBwcm90b2NvbCAldVxcblwmIzM0Oyxcbm5ldC9yeHJwYy91dGlscy5jLTQxLVx0XHRcdFx0ICAgIG50b2hzKHNrYi1cdTAwM2Vwcm90b2NvbCkpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDAyOjU5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwMTU3CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOgoKKipLY29uZmlnIERlcGVuZGVuY3kgQ2hlY2sgZm9yIEFGX1JYUlBDKioKCkFscmlnaHQsIGxldCYjMzk7cyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGRlcGVuZGVuY2llcyByZWxhdGVkIHRvIGBDT05GSUdfQUZfUlhSUENgLiBHaXZlbiBteSBleHBlcmllbmNlLCB0aGUgZmlyc3QgcGxhY2UgSSYjMzk7ZCBsb29rIGlzIHRoZSBrZXJuZWwmIzM5O3MgY29uZmlndXJhdGlvbiBmaWxlcy4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIHRoaW5raW5nIEkgc2hvdWxkIHN0YXJ0IGRpZ2dpbmcgaW50byB0aGUgYG5ldC9yeHJwYy9LY29uZmlnYCBmaWxlLiBUaGF0JiMzOTtzIHRoZSBtb3N0IGxvZ2ljYWwgc3BvdCBmb3IgZmlndXJpbmcgb3V0IHdoYXQgb3RoZXIgY29uZmlndXJhdGlvbnMgbWlnaHQgbmVlZCB0byBiZSBlbmFibGVkIG9yIGFyZSByZWxhdGVkIHRvIGdldCBgQUZfUlhSUENgIGZ1bmN0aW9uYWwuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgdG8gbWFrZSBhIHJlY29tbWVuZGF0aW9uLiBJIGhhdmUgdG8gbWFrZSBzdXJlIEkgZG9uJiMzOTt0IG92ZXJsb29rIGFueSBpbXBsaWNpdCBkZXBlbmRlbmNpZXMuIEkmIzM5O2xsIG5lZWQgdG8ga25vdyB3aGljaCBvdGhlciBmZWF0dXJlcyBpdCByZWxpZXMgdXBvbiwgYW5kIGFsc28gYW55IHJlbGF0aW9uc2hpcHMgd2l0aCByZWxhdGVkIHN1Yi1zeXN0ZW1zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDAyOjU5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L3J4cnBjL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiAgIDI6XHQjXG4gICAzOlx0IyBSeFJQQyBzZXNzaW9uIHNvY2tldHNcbiAgIDQ6XHQjXG4gICA1Olx0XG4gICA2Olx0Y29uZmlnIEFGX1JYUlBDXG4gICA3Olx0XHR0cmlzdGF0ZSBcJiMzNDtSeFJQQyBzZXNzaW9uIHNvY2tldHNcJiMzNDtcbiAgIDg6XHRcdGRlcGVuZHMgb24gSU5FVFxuICAgOTpcdFx0c2VsZWN0IENSWVBUT1xuICAxMDpcdFx0c2VsZWN0IENSWVBUT19MSUJfREVTIGlmIFJYS0FEXG4gIDExOlx0XHRzZWxlY3QgS0VZU1xuICAxMjpcdFx0c2VsZWN0IE5FVF9VRFBfVFVOTkVMXG4gIDEzOlx0XHRoZWxwXG4gIDE0Olx0XHQgIFNheSBZIG9yIE0gaGVyZSB0byBpbmNsdWRlIHN1cHBvcnQgZm9yIFJ4UlBDIHNlc3Npb24gc29ja2V0cyAoanVzdFxuICAxNTpcdFx0ICB0aGUgdHJhbnNwb3J0IHBhcnQsIG5vdCB0aGUgcHJlc2VudGF0aW9uIHBhcnQ6ICh1biltYXJzaGFsbGluZyBpc1xuICAxNjpcdFx0ICBsZWZ0IHRvIHRoZSBhcHBsaWNhdGlvbikuXG4gIDE3Olx0XG4gIDE4Olx0XHQgIFRoZXNlIGFyZSB1c2VkIGZvciBBRlMga2VybmVsIGZpbGVzeXN0ZW0gYW5kIHVzZXJzcGFjZSB1dGlsaXRpZXMuXG4gIDE5Olx0XG4gIDIwOlx0XHQgIFRoaXMgbW9kdWxlIGF0IHRoZSBtb21lbnQgb25seSBzdXBwb3J0cyBjbGllbnQgb3BlcmF0aW9ucyBhbmQgaXNcbiAgMjE6XHRcdCAgY3VycmVudGx5IGluY29tcGxldGUuXG4gIDIyOlx0XG4gIDIzOlx0XHQgIFNlZSBEb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvcnhycGMucnN0LlxuICAyNDpcdFxuICAyNTpcdGlmIEFGX1JYUlBDXG4gIDI2Olx0XG4gIDI3Olx0Y29uZmlnIEFGX1JYUlBDX0lQVjZcbiAgMjg6XHRcdGJvb2wgXCYjMzQ7SVB2NiBzdXBwb3J0IGZvciBSeFJQQ1wmIzM0O1xuICAyOTpcdFx0ZGVwZW5kcyBvbiBJUFY2XG4gIDMwOlx0XHRoZWxwXG4gIDMxOlx0XHQgIFNheSBZIGhlcmUgdG8gYWxsb3cgQUZfUlhSUEMgdG8gdXNlIElQVjYgVURQIGFzIHdlbGwgYXMgSVBWNCBVRFAgYXNcbiAgMzI6XHRcdCAgaXRzIG5ldHdvcmsgdHJhbnNwb3J0LlxuICAzMzpcdFxuICAzNDpcdGNvbmZpZyBBRl9SWFJQQ19JTkpFQ1RfTE9TU1xuICAzNTpcdFx0Ym9vbCBcJiMzNDtJbmplY3QgcGFja2V0IGxvc3MgaW50byBSeFJQQyBwYWNrZXQgc3RyZWFtXCYjMzQ7XG4gIDM2Olx0XHRoZWxwXG4gIDM3Olx0XHQgIFNheSBZIGhlcmUgdG8gaW5qZWN0IHBhY2tldCBsb3NzIGJ5IGRpc2NhcmRpbmcgc29tZSByZWNlaXZlZCBhbmQgc29tZVxuICAzODpcdFx0ICB0cmFuc21pdHRlZCBwYWNrZXRzLlxuICAzOTpcdFxuICA0MDpcdGNvbmZpZyBBRl9SWFJQQ19JTkpFQ1RfUlhfREVMQVlcbiAgNDE6XHRcdGJvb2wgXCYjMzQ7SW5qZWN0IGRlbGF5IGludG8gcGFja2V0IHJlY2VwdGlvblwmIzM0O1xuICA0MjpcdFx0ZGVwZW5kcyBvbiBTWVNDVExcbiAgNDM6XHRcdGhlbHBcbiAgNDQ6XHRcdCAgU2F5IFkgaGVyZSB0byBpbmplY3QgYSBkZWxheSBpbnRvIHBhY2tldCByZWNlcHRpb24sIGFsbG93aW5nIGFuXG4gIDQ1Olx0XHQgIGV4dGVuZGVkIFJUVCB0aW1lIHRvIGJlIG1vZGVsbGVkLiAgVGhlIGRlbGF5IGNhbiBiZSBjb25maWd1cmVkIHVzaW5nXG4gIDQ2Olx0XHQgIC9wcm9jL3N5cy9uZXQvcnhycGMvcnhycGNfaW5qZWN0X3J4X2RlbGF5LCBzZXR0aW5nIGEgbnVtYmVyIG9mXG4gIDQ3Olx0XHQgIG1pbGxpc2Vjb25kcyB1cCB0byAwLjVzIChub3RlIHRoYXQgdGhlIGdyYW51bGFyaXR5IGlzIGFjdHVhbGx5IGluXG4gIDQ4Olx0XHQgIGppZmZpZXMpLlxuICA0OTpcdFxuICA1MDpcdGNvbmZpZyBBRl9SWFJQQ19ERUJVR1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDAyOjU5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExMDUyCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYW5hbHlzaXMgb2YgdGhlIHNpdHVhdGlvbiwgcHJlc2VudGVkIGZyb20gbXkgcGVyc3BlY3RpdmUgYXMgYW4gZXhwZXJ0OgoKKipEaXZpbmcgaW50byB0aGUgUnhSUEMgTmV0d29yayBDb2RlKioKCk9rYXksIHNvIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gdGhlIGlubmVyIHdvcmtpbmdzIG9mIFJ4UlBDJiMzOTtzIG5ldHdvcmsgbmFtZXNwYWNlIGFuZCBwZWVyIG9iamVjdCBtYW5hZ2VtZW50LiBJIHNob3VsZCBzdGFydCBieSBkaWdnaW5nIGludG8gYG5ldC9yeHJwYy9uZXRfbnMuY2AgYW5kIGBuZXQvcnhycGMvcGVlcl9vYmplY3QuY2AuIFRob3NlIGZpbGVzIHNob3VsZCBjb250YWluIHRoZSBjb3JlIGltcGxlbWVudGF0aW9ucyBmb3IgaG93IFJ4UlBDIGludGVyYWN0cyB3aXRoIHRoZSBuZXR3b3JrIG5hbWVzcGFjZSBpbmZyYXN0cnVjdHVyZSBhbmQgaG93IGl0IGhhbmRsZXMgcGVlciBjb25uZWN0aW9ucyBhbmQgYXNzb2NpYXRlZCBkYXRhLiBJIGV4cGVjdCB0byBmaW5kIHRoZSBjcnVjaWFsIGRhdGEgc3RydWN0dXJlcyBhbmQgZnVuY3Rpb25zIHRoYXQgZ292ZXJuIHNvY2tldCBjcmVhdGlvbiwgYWRkcmVzcyBiaW5kaW5nLCBjb25uZWN0aW9uIGVzdGFibGlzaG1lbnQsIGFuZCBwZWVyIHRyYWNraW5nIHRoZXJlLiBNeSBnb2FsIGlzIHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIGVsZW1lbnRzIGludGVycmVsYXRlIGFuZCBob3cgdGhlIFJ4UlBDIHByb3RvY29sIGxldmVyYWdlcyB0aGUgdW5kZXJseWluZyBuZXR3b3JrIHN0YWNrLiBJJiMzOTttIGVzcGVjaWFsbHkgaW50ZXJlc3RlZCBpbiBjb25jdXJyZW5jeSBjb25zaWRlcmF0aW9ucyBhbmQgcG90ZW50aWFsIGJvdHRsZW5lY2tzIHdpdGhpbiB0aGVzZSBwYXJ0cyBvZiB0aGUgY29kZS4gVGhpcyB3aWxsIGJlIHRoZSBmb3VuZGF0aW9uIHRvIHNlZSBhYm91dCB0aGUgbmV0d29yayBuYW1lc3BhY2UgaW50ZXJhY3Rpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDI6NTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvcnhycGMvbmV0X25zLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA5MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDkwOlx0XHRcdFx0c2l6ZW9mKHN0cnVjdCBzZXFfbmV0X3ByaXZhdGUpKTtcbiAgOTE6XHRcdHByb2NfY3JlYXRlX25ldF9zaW5nbGVfd3JpdGUoXCYjMzQ7c3RhdHNcJiMzNDssIFNfSUZSRUcgfCAwNjQ0LCByeG5ldC1cdTAwM2Vwcm9jX25ldCxcbiAgOTI6XHRcdFx0XHRcdCAgICAgcnhycGNfc3RhdHNfc2hvdywgcnhycGNfc3RhdHNfY2xlYXIsIE5VTEwpO1xuICA5MzpcdFx0cmV0dXJuIDA7XG4gIDk0Olx0XG4gIDk1Olx0ZXJyX3Byb2M6XG4gIDk2Olx0XHRyeG5ldC1cdTAwM2VsaXZlID0gZmFsc2U7XG4gIDk3Olx0XHRyZXR1cm4gcmV0O1xuICA5ODpcdH1cbiAgOTk6XHRcbiAxMDA6XHRzdGF0aWMgX19uZXRfZXhpdCB2b2lkIHJ4cnBjX3ByZV9leGl0X25ldChzdHJ1Y3QgbmV0ICpuZXQpXG4gMTAxOlx0e1xuIDEwMjpcdFx0c3RydWN0IHJ4cnBjX25ldCAqcnhuZXQgPSByeHJwY19uZXQobmV0KTtcbiAxMDM6XHRcbiAxMDQ6XHRcdHJ4bmV0LVx1MDAzZWxpdmUgPSBmYWxzZTtcbiAxMDU6XHRcdHRpbWVyX2RlbGV0ZV9zeW5jKFx1MDAyNnJ4bmV0LVx1MDAzZXBlZXJfa2VlcGFsaXZlX3RpbWVyKTtcbiAxMDY6XHRcdGNhbmNlbF93b3JrX3N5bmMoXHUwMDI2cnhuZXQtXHUwMDNlcGVlcl9rZWVwYWxpdmVfd29yayk7XG4gMTA3Olx0XHQvKiBSZW1vdmUgdGhlIHRpbWVyIGFnYWluIGFzIHRoZSB3b3JrZXIgbWF5IGhhdmUgcmVzdGFydGVkIGl0LiAqL1xuIDEwODpcdFx0dGltZXJfZGVsZXRlX3N5bmMoXHUwMDI2cnhuZXQtXHUwMDNlcGVlcl9rZWVwYWxpdmVfdGltZXIpO1xuIDEwOTpcdFx0cnhycGNfZGVzdHJveV9hbGxfY2FsbHMocnhuZXQpO1xuIDExMDpcdFx0cnhycGNfZGVzdHJveV9hbGxfY29ubmVjdGlvbnMocnhuZXQpO1xuIDExMTpcdH1cbiAxMTI6XHRcbiAxMTM6XHQvKlxuIDExNDpcdCAqIENsZWFuIHVwIGEgcGVyLW5ldHdvcmsgbmFtZXNwYWNlIHJlY29yZC5cbiAxMTU6XHQgKi9cbiAxMTY6XHRzdGF0aWMgX19uZXRfZXhpdCB2b2lkIHJ4cnBjX2V4aXRfbmV0KHN0cnVjdCBuZXQgKm5ldClcbiAxMTc6XHR7XG4gMTE4Olx0XHRzdHJ1Y3QgcnhycGNfbmV0ICpyeG5ldCA9IHJ4cnBjX25ldChuZXQpO1xuIDExOTpcdFxuIDEyMDpcdFx0cnhycGNfZGVzdHJveV9hbGxfcGVlcnMocnhuZXQpO1xuIDEyMTpcdFx0cnhycGNfZGVzdHJveV9hbGxfbG9jYWxzKHJ4bmV0KTtcbiAxMjI6XHRcdHByb2NfcmVtb3ZlKHJ4bmV0LVx1MDAzZXByb2NfbmV0KTtcbiAxMjM6XHR9XG4gMTI0Olx0XG4gMTI1Olx0c3RydWN0IHBlcm5ldF9vcGVyYXRpb25zIHJ4cnBjX25ldF9vcHMgPSB7XG4gMTI2Olx0XHQuaW5pdFx0XHQ9IHJ4cnBjX2luaXRfbmV0LFxuIDEyNzpcdFx0LnByZV9leGl0XHQ9IHJ4cnBjX3ByZV9leGl0X25ldCxcbiAxMjg6XHRcdC5leGl0XHRcdD0gcnhycGNfZXhpdF9uZXQsXG4gMTI5Olx0XHQuaWRcdFx0PSBcdTAwMjZyeHJwY19uZXRfaWQsXG4gMTMwOlx0XHQuc2l6ZVx0XHQ9IHNpemVvZihzdHJ1Y3QgcnhycGNfbmV0KSxcbiAxMzE6XHR9O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDAyOjU5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExOTcyCgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czoKCioqUGVlcmluZyBEZWVwZXIgaW50byBQZWVyIE9iamVjdHMqKgoKT2theSwgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJiMzOTttIG5vdCBtaXNzaW5nIGFueXRoaW5nIGNydWNpYWwsIGVzcGVjaWFsbHkgd2hlbiBkZWFsaW5nIHdpdGggdGhlIGNvcmUgbmV0d29yayBpbnRlcmFjdGlvbnMuIFdoaWxlIEkmIzM5O3ZlIGZvY3VzZWQgb24gWCBhbmQgWSwgbXkgZ3V0IGZlZWxpbmcgdGVsbHMgbWUgdG8gYnJvYWRlbiB0aGUgc2NvcGUgYSBiaXQuIExldCYjMzk7cyBkaWcgaW50byBgbmV0L3J4cnBjL3BlZXJfb2JqZWN0LmNgLiBJdCYjMzk7cyBhIGtleSBwaWVjZSBvZiB0aGUgcHV6emxlLCBhbmQgSSBuZWVkIHRvIGVuc3VyZSB0aGF0IHRoZSBsb2dpYyB3aXRoaW4gdGhhdCBtb2R1bGUgcGxheXMgbmljZSB3aXRoIHRoZSBvdGhlciBhcmVhcyBJJiMzOTttIGludmVzdGlnYXRpbmcuIEkgd2FudCBhIGNvbXByZWhlbnNpdmUgdW5kZXJzdGFuZGluZywgYW5kIHRoaXMgc3BlY2lmaWMgZmlsZSBzZWVtcyBsaWtlIGEgZ29vZCBuZXh0IHN0ZXAgaW4gYWNoaWV2aW5nIHRoYXQuIExldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyBoYXBwZW5pbmcgdGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDAyOjU5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L3J4cnBjL3BlZXJfb2JqZWN0LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA0NDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDQ0MDpcdFx0aWYgKHBlZXIpIHtcbiA0NDE6XHRcdFx0ZGVidWdfaWQgPSBwZWVyLVx1MDAzZWRlYnVnX2lkO1xuIDQ0MjpcdFx0XHRkZWFkID0gX19yZWZjb3VudF9kZWNfYW5kX3Rlc3QoXHUwMDI2cGVlci1cdTAwM2VyZWYsIFx1MDAyNnIpO1xuIDQ0MzpcdFx0XHR0cmFjZV9yeHJwY19wZWVyKGRlYnVnX2lkLCByIC0gMSwgd2h5KTtcbiA0NDQ6XHRcdFx0aWYgKGRlYWQpXG4gNDQ1Olx0XHRcdFx0X19yeHJwY19wdXRfcGVlcihwZWVyKTtcbiA0NDY6XHRcdH1cbiA0NDc6XHR9XG4gNDQ4Olx0XG4gNDQ5Olx0LypcbiA0NTA6XHQgKiBNYWtlIHN1cmUgYWxsIHBlZXIgcmVjb3JkcyBoYXZlIGJlZW4gZGlzY2FyZGVkLlxuIDQ1MTpcdCAqL1xuIDQ1MjpcdHZvaWQgcnhycGNfZGVzdHJveV9hbGxfcGVlcnMoc3RydWN0IHJ4cnBjX25ldCAqcnhuZXQpXG4gNDUzOlx0e1xuIDQ1NDpcdFx0c3RydWN0IHJ4cnBjX3BlZXIgKnBlZXI7XG4gNDU1Olx0XHRpbnQgaTtcbiA0NTY6XHRcbiA0NTc6XHRcdC8qXG4gNDU4Olx0XHQgKiBQcmV2ZW50IHVzZS1hZnRlci1mcmVlIGlmIGEgcGVlciBpcyBjb25jdXJyZW50bHkgdW5saW5rZWQgZnJvbSB0aGVcbiA0NTk6XHRcdCAqIGhhc2ggdGFibGUgYW5kIGZyZWVkIHZpYSBSQ1UgZHVyaW5nIGl0ZXJhdGlvbi5cbiA0NjA6XHRcdCAqL1xuIDQ2MTpcdFx0c3Bpbl9sb2NrX2JoKFx1MDAyNnJ4bmV0LVx1MDAzZXBlZXJfaGFzaF9sb2NrKTtcbiA0NjI6XHRcbiA0NjM6XHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIEhBU0hfU0laRShyeG5ldC1cdTAwM2VwZWVyX2hhc2gpOyBpJiM0MzsmIzQzOykge1xuIDQ2NDpcdFx0XHRpZiAoaGxpc3RfZW1wdHkoXHUwMDI2cnhuZXQtXHUwMDNlcGVlcl9oYXNoW2ldKSlcbiA0NjU6XHRcdFx0XHRjb250aW51ZTtcbiA0NjY6XHRcbiA0Njc6XHRcdFx0aGxpc3RfZm9yX2VhY2hfZW50cnkocGVlciwgXHUwMDI2cnhuZXQtXHUwMDNlcGVlcl9oYXNoW2ldLCBoYXNoX2xpbmspIHtcbiA0Njg6XHRcdFx0XHRwcl9lcnIoXCYjMzQ7TGVha2VkIHBlZXIgJXggeyV1fSAlcElTcFxcblwmIzM0OyxcbiA0Njk6XHRcdFx0XHQgICAgICAgcGVlci1cdTAwM2VkZWJ1Z19pZCxcbiA0NzA6XHRcdFx0XHQgICAgICAgcmVmY291bnRfcmVhZChcdTAwMjZwZWVyLVx1MDAzZXJlZiksXG4gNDcxOlx0XHRcdFx0ICAgICAgIFx1MDAyNnBlZXItXHUwMDNlc3J4LnRyYW5zcG9ydCk7XG4gNDcyOlx0XHRcdH1cbiA0NzM6XHRcdH1cbiA0NzQ6XHRcbiA0NzU6XHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNnJ4bmV0LVx1MDAzZXBlZXJfaGFzaF9sb2NrKTtcbiA0NzY6XHR9XG4gNDc3Olx0XG4gNDc4Olx0LyoqXG4gNDc5Olx0ICogcnhycGNfa2VybmVsX2dldF9jYWxsX3BlZXIgLSBHZXQgdGhlIHBlZXIgYWRkcmVzcyBvZiBhIGNhbGxcbiA0ODA6XHQgKiBAc29jazogVGhlIHNvY2tldCBvbiB3aGljaCB0aGUgY2FsbCBpcyBpbiBwcm9ncmVzcy5cbiA0ODE6XHQgKiBAY2FsbDogVGhlIGNhbGwgdG8gcXVlcnlcbiA0ODI6XHQgKlxuIDQ4MzpcdCAqIEdldCBhIHJlY29yZCBmb3IgdGhlIHJlbW90ZSBwZWVyIGluIGEgY2FsbC5cbiA0ODQ6XHQgKlxuIDQ4NTpcdCAqIFJldHVybjogVGhlIGNhbGwmIzM5O3MgcGVlciByZWNvcmQuXG4gNDg2Olx0ICovXG4gNDg3Olx0c3RydWN0IHJ4cnBjX3BlZXIgKnJ4cnBjX2tlcm5lbF9nZXRfY2FsbF9wZWVyKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCByeHJwY19jYWxsICpjYWxsKVxuIDQ4ODpcdHtcbiA0ODk6XHRcdHJldHVybiByeHJwY19nZXRfcGVlcihjYWxsLVx1MDAzZXBlZXIsIHJ4cnBjX3BlZXJfZ2V0X2FwcGxpY2F0aW9uKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDI6NTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI5NDMKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiAyMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKk5hdmlnYXRpbmcgdGhlIENvZGViYXNlKioKCk9rYXksIGhlcmUmIzM5O3MgdGhlIHNpdHVhdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBjaGFuZ2UsIHRoaXMgcGFydGljdWxhciBjb21taXQsIHJlYWxseSBxdWlja2x5LiBUaGUgZmlyc3QgdGhpbmcgSSBhbHdheXMgZG8gaXMgdHJhY2UgYmFjayB0aGUgY29udGV4dC4gV2hhdCB3YXMgdGhlICppbnRlbnQqIGJlaGluZCB0aGlzIGNvZGU/IEkgbmVlZCB0byBqb2cgbXkgbWVtb3J5LCBhbmQgb2Z0ZW4gdGhlIGJlc3QgcGxhY2UgdG8gc3RhcnQgaXMgdGhlIGNvbW1pdCBtZXNzYWdlLiAmIzM0O0dpdCBsb2cmIzM0OyBpcyB0aGUgZ28tdG8gdG9vbCBmb3IgdGhhdCwgaXQmIzM5O3MgbXkgZmlyc3Qgc3RvcCB0byBnZXQgYSBoaWdoLWxldmVsIG92ZXJ2aWV3LiBGcm9tIHRoZSBjb21taXQgbWVzc2FnZSBJIGNhbiB0aGVuIGRlZHVjZSB3aGF0IHByb2JsZW1zIHRoZSBjb2RlIGFpbXMgdG8gc29sdmUsIHdoYXQgZGVzaWduIGRlY2lzaW9ucyB3ZXJlIGluIHBsYXksIG9yIGFueSBvdGhlciBwZXJ0aW5lbnQgaW5mb3JtYXRpb24uIEl0IGdpdmVzIG1lIGEgc3RhcnRpbmcgcG9pbnQgZnJvbSB3aGljaCB0byBhbmFseXplIHRoaXMgc3BlY2lmaWMgcGllY2Ugb2YgdGhlIGNvZGViYXNlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwMjo1OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwZWVyX2hhc2hfbG9jayYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9yeHJwYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvcnhycGMvYXItaW50ZXJuYWwuaD04Nj1zdHJ1Y3QgcnhycGNfbmV0IHtcbi0tXG5uZXQvcnhycGMvYXItaW50ZXJuYWwuaC0xMDgtXHRERUNMQVJFX0hBU0hUQUJMRVx0KHBlZXJfaGFzaCwgMTApO1xubmV0L3J4cnBjL2FyLWludGVybmFsLmg6MTA5Olx0c3BpbmxvY2tfdFx0XHRwZWVyX2hhc2hfbG9jaztcdC8qIExvY2sgZm9yIC1cdTAwM2VwZWVyX2hhc2ggKi9cbm5ldC9yeHJwYy9hci1pbnRlcm5hbC5oLTExMC1cbi0tXG5uZXQvcnhycGMvbmV0X25zLmM9MzQ9c3RhdGljIF9fbmV0X2luaXQgaW50IHJ4cnBjX2luaXRfbmV0KHN0cnVjdCBuZXQgKm5ldClcbi0tXG5uZXQvcnhycGMvbmV0X25zLmMtNjItXHRoYXNoX2luaXQocnhuZXQtXHUwMDNlcGVlcl9oYXNoKTtcbm5ldC9yeHJwYy9uZXRfbnMuYzo2MzpcdHNwaW5fbG9ja19pbml0KFx1MDAyNnJ4bmV0LVx1MDAzZXBlZXJfaGFzaF9sb2NrKTtcbm5ldC9yeHJwYy9uZXRfbnMuYy02NC1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIEFSUkFZX1NJWkUocnhuZXQtXHUwMDNlcGVlcl9rZWVwYWxpdmUpOyBpJiM0MzsmIzQzOylcbi0tXG5uZXQvcnhycGMvcGVlcl9ldmVudC5jPTI1OD1zdGF0aWMgdm9pZCByeHJwY19wZWVyX2tlZXBhbGl2ZV9kaXNwYXRjaChzdHJ1Y3QgcnhycGNfbmV0ICpyeG5ldCxcbi0tXG5uZXQvcnhycGMvcGVlcl9ldmVudC5jLTI2OC1cbm5ldC9yeHJwYy9wZWVyX2V2ZW50LmM6MjY5Olx0c3Bpbl9sb2NrX2JoKFx1MDAyNnJ4bmV0LVx1MDAzZXBlZXJfaGFzaF9sb2NrKTtcbm5ldC9yeHJwYy9wZWVyX2V2ZW50LmMtMjcwLVxuLS1cbm5ldC9yeHJwYy9wZWVyX2V2ZW50LmMtMjc5LVx0XHR1c2UgPSBfX3J4cnBjX3VzZV9sb2NhbChwZWVyLVx1MDAzZWxvY2FsLCByeHJwY19sb2NhbF91c2VfcGVlcl9rZWVwYWxpdmUpO1xubmV0L3J4cnBjL3BlZXJfZXZlbnQuYzoyODA6XHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNnJ4bmV0LVx1MDAzZXBlZXJfaGFzaF9sb2NrKTtcbm5ldC9yeHJwYy9wZWVyX2V2ZW50LmMtMjgxLVxuLS1cbm5ldC9yeHJwYy9wZWVyX2V2ZW50LmMtMjk5LVx0XHRcdHNsb3QgXHUwMDI2PSBtYXNrO1xubmV0L3J4cnBjL3BlZXJfZXZlbnQuYzozMDA6XHRcdFx0c3Bpbl9sb2NrX2JoKFx1MDAyNnJ4bmV0LVx1MDAzZXBlZXJfaGFzaF9sb2NrKTtcbm5ldC9yeHJwYy9wZWVyX2V2ZW50LmMtMzAxLVx0XHRcdGxpc3RfYWRkX3RhaWwoXHUwMDI2cGVlci1cdTAwM2VrZWVwYWxpdmVfbGluayxcbm5ldC9yeHJwYy9wZWVyX2V2ZW50LmMtMzAyLVx0XHRcdFx0ICAgICAgXHUwMDI2cnhuZXQtXHUwMDNlcGVlcl9rZWVwYWxpdmVbc2xvdCBcdTAwMjYgbWFza10pO1xubmV0L3J4cnBjL3BlZXJfZXZlbnQuYzozMDM6XHRcdFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2cnhuZXQtXHUwMDNlcGVlcl9oYXNoX2xvY2spO1xubmV0L3J4cnBjL3BlZXJfZXZlbnQuYy0zMDQtXHRcdFx0cnhycGNfdW51c2VfbG9jYWwocGVlci1cdTAwM2Vsb2NhbCwgcnhycGNfbG9jYWxfdW51c2VfcGVlcl9rZWVwYWxpdmUpO1xuLS1cbm5ldC9yeHJwYy9wZWVyX2V2ZW50LmMtMzA2LVx0XHRyeHJwY19wdXRfcGVlcihwZWVyLCByeHJwY19wZWVyX3B1dF9rZWVwYWxpdmUpO1xubmV0L3J4cnBjL3BlZXJfZXZlbnQuYzozMDc6XHRcdHNwaW5fbG9ja19iaChcdTAwMjZyeG5ldC1cdTAwM2VwZWVyX2hhc2hfbG9jayk7XG5uZXQvcnhycGMvcGVlcl9ldmVudC5jLTMwOC1cdH1cbm5ldC9yeHJwYy9wZWVyX2V2ZW50LmMtMzA5LVxubmV0L3J4cnBjL3BlZXJfZXZlbnQuYzozMTA6XHRzcGluX3VubG9ja19iaChcdTAwMjZyeG5ldC1cdTAwM2VwZWVyX2hhc2hfbG9jayk7XG5uZXQvcnhycGMvcGVlcl9ldmVudC5jLTMxMS19XG4tLVxubmV0L3J4cnBjL3BlZXJfZXZlbnQuYz0zMTY9dm9pZCByeHJwY19wZWVyX2tlZXBhbGl2ZV93b3JrZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuLS1cbm5ldC9yeHJwYy9wZWVyX2V2ZW50LmMtMzM5LVx0ICovXG5uZXQvcnhycGMvcGVlcl9ldmVudC5jOjM0MDpcdHNwaW5fbG9ja19iaChcdTAwMjZyeG5ldC1cdTAwM2VwZWVyX2hhc2hfbG9jayk7XG5uZXQvcnhycGMvcGVlcl9ldmVudC5jLTM0MS1cdGxpc3Rfc3BsaWNlX2luaXQoXHUwMDI2cnhuZXQtXHUwMDNlcGVlcl9rZWVwYWxpdmVfbmV3LCBcdTAwMjZjb2xsZWN0b3IpO1xuLS1cbm5ldC9yeHJwYy9wZWVyX2V2ZW50LmMtMzUxLVx0YmFzZSA9IG5vdztcbm5ldC9yeHJwYy9wZWVyX2V2ZW50LmM6MzUyOlx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2cnhuZXQtXHUwMDNlcGVlcl9oYXNoX2xvY2spO1xubmV0L3J4cnBjL3BlZXJfZXZlbnQuYy0zNTMtXG4tLVxubmV0L3J4cnBjL3BlZXJfb2JqZWN0LmM9MzE3PXZvaWQgcnhycGNfbmV3X2luY29taW5nX3BlZXIoc3RydWN0IHJ4cnBjX2xvY2FsICpsb2NhbCwgc3RydWN0IHJ4cnBjX3BlZXIgKnBlZXIpXG4tLVxubmV0L3J4cnBjL3BlZXJfb2JqZWN0LmMtMzI0LVxubmV0L3J4cnBjL3BlZXJfb2JqZWN0LmM6MzI1Olx0c3Bpbl9sb2NrKFx1MDAyNnJ4bmV0LVx1MDAzZXBlZXJfaGFzaF9sb2NrKTtcbm5ldC9yeHJwYy9wZWVyX29iamVjdC5jLTMyNi1cdGhhc2hfYWRkX3JjdShyeG5ldC1cdTAwM2VwZWVyX2hhc2gsIFx1MDAyNnBlZXItXHUwMDNlaGFzaF9saW5rLCBoYXNoX2tleSk7XG5uZXQvcnhycGMvcGVlcl9vYmplY3QuYy0zMjctXHRsaXN0X2FkZF90YWlsKFx1MDAyNnBlZXItXHUwMDNla2VlcGFsaXZlX2xpbmssIFx1MDAyNnJ4bmV0LVx1MDAzZXBlZXJfa2VlcGFsaXZlX25ldyk7XG5uZXQvcnhycGMvcGVlcl9vYmplY3QuYzozMjg6XHRzcGluX3VubG9jayhcdTAwMjZyeG5ldC1cdTAwM2VwZWVyX2hhc2hfbG9jayk7XG5uZXQvcnhycGMvcGVlcl9vYmplY3QuYy0zMjktfVxuLS1cbm5ldC9yeHJwYy9wZWVyX29iamVjdC5jPTMzND1zdHJ1Y3QgcnhycGNfcGVlciAqcnhycGNfbG9va3VwX3BlZXIoc3RydWN0IHJ4cnBjX2xvY2FsICpsb2NhbCxcbi0tXG5uZXQvcnhycGMvcGVlcl9vYmplY3QuYy0zNTktXG5uZXQvcnhycGMvcGVlcl9vYmplY3QuYzozNjA6XHRcdHNwaW5fbG9ja19iaChcdTAwMjZyeG5ldC1cdTAwM2VwZWVyX2hhc2hfbG9jayk7XG5uZXQvcnhycGMvcGVlcl9vYmplY3QuYy0zNjEtXG4tLVxubmV0L3J4cnBjL3BlZXJfb2JqZWN0LmMtMzcyLVxubmV0L3J4cnBjL3BlZXJfb2JqZWN0LmM6MzczOlx0XHRzcGluX3VubG9ja19iaChcdTAwMjZyeG5ldC1cdTAwM2VwZWVyX2hhc2hfbG9jayk7XG5uZXQvcnhycGMvcGVlcl9vYmplY3QuYy0zNzQtXG4tLVxubmV0L3J4cnBjL3BlZXJfb2JqZWN0LmM9NDE3PXN0YXRpYyB2b2lkIF9fcnhycGNfcHV0X3BlZXIoc3RydWN0IHJ4cnBjX3BlZXIgKnBlZXIpXG4tLVxubmV0L3J4cnBjL3BlZXJfb2JqZWN0LmMtNDIyLVxubmV0L3J4cnBjL3BlZXJfb2JqZWN0LmM6NDIzOlx0c3Bpbl9sb2NrX2JoKFx1MDAyNnJ4bmV0LVx1MDAzZXBlZXJfaGFzaF9sb2NrKTtcbm5ldC9yeHJwYy9wZWVyX29iamVjdC5jLTQyNC1cdGhhc2hfZGVsX3JjdShcdTAwMjZwZWVyLVx1MDAzZWhhc2hfbGluayk7XG5uZXQvcnhycGMvcGVlcl9vYmplY3QuYy00MjUtXHRsaXN0X2RlbF9pbml0KFx1MDAyNnBlZXItXHUwMDNla2VlcGFsaXZlX2xpbmspO1xubmV0L3J4cnBjL3BlZXJfb2JqZWN0LmM6NDI2Olx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2cnhuZXQtXHUwMDNlcGVlcl9oYXNoX2xvY2spO1xubmV0L3J4cnBjL3BlZXJfb2JqZWN0LmMtNDI3LVxuLS1cbm5ldC9yeHJwYy9wZWVyX29iamVjdC5jPTQ1Mj12b2lkIHJ4cnBjX2Rlc3Ryb3lfYWxsX3BlZXJzKHN0cnVjdCByeHJwY19uZXQgKnJ4bmV0KVxuLS1cbm5ldC9yeHJwYy9wZWVyX29iamVjdC5jLTQ2MC1cdCAqL1xubmV0L3J4cnBjL3BlZXJfb2JqZWN0LmM6NDYxOlx0c3Bpbl9sb2NrX2JoKFx1MDAyNnJ4bmV0LVx1MDAzZXBlZXJfaGFzaF9sb2NrKTtcbm5ldC9yeHJwYy9wZWVyX29iamVjdC5jLTQ2Mi1cbi0tXG5uZXQvcnhycGMvcGVlcl9vYmplY3QuYy00NzQtXG5uZXQvcnhycGMvcGVlcl9vYmplY3QuYzo0NzU6XHRzcGluX3VubG9ja19iaChcdTAwMjZyeG5ldC1cdTAwM2VwZWVyX2hhc2hfbG9jayk7XG5uZXQvcnhycGMvcGVlcl9vYmplY3QuYy00NzYtfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwMjo1OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDg5OQoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDM5MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgVGhpcyBQYXRjaCBmb3IgRnV6emluZyBQb3RlbnRpYWwqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgcGF0Y2ggZG93biBmcm9tIGEgZnV6emluZyBwZXJzcGVjdGl2ZS4gSXQmIzM5O3MgdGFyZ2V0aW5nIHRoZSBgbmV0L3J4cnBjYCBzdWJzeXN0ZW0sIHdoaWNoIGlzIEFGX1JYUlBDLCBhIG5ldHdvcmtpbmcgcHJvdG9jb2wuIEZpcnN0LCBhIHNhbml0eSBjaGVjazogY2FuIHN5emthbGxlciBldmVuIHJlYWNoIGl0PyBZZXAsIGl0JiMzOTtzIHNvY2tldC1iYXNlZCAoYHNvY2tldChBRl9SWFJQQywgLi4uKWApIGFuZCBwbGF5cyBuaWNlbHkgd2l0aCBuZXR3b3JrIG5hbWVzcGFjZXMgKGB1bnNoYXJlKENMT05FX05FV05FVClgKSwgYW5kIHN5emthbGxlciYjMzk7cyBnb3QgdGhlIG5hbWVzcGFjZSBjbGVhbnVwIGRvd24gcGF0IHdpdGggYHByZV9leGl0YCBhbmQgYGV4aXRgIHJvdXRpbmVzLgoKVGhlIHBhdGNoIGl0c2VsZiBpcyB0b3VjaGluZyBzb21lIGludGVyZXN0aW5nIGFyZWFzOiBgcnhycGNfcHJlX2V4aXRfbmV0YCwgYSBuZXcgYHByZV9leGl0YCBoYW5kbGVyLCBgcnhycGNfZXhpdF9uZXRgLCBhbmQgYHJ4cnBjX2Rlc3Ryb3lfYWxsX3BlZXJzYC4gVGhhdCYjMzk7cyBhIHN0cm9uZyBzaWduYWwsIGVzcGVjaWFsbHkgd2hlbiBjb25zaWRlcmluZyBsaWZlY3ljbGUgbWFuYWdlbWVudCB3aXRoaW4gbmV0d29yayBuYW1lc3BhY2VzIGFuZCBzeW5jaHJvbml6YXRpb24gaXNzdWVzIHdpdGhpbiBgcnhycGNfZGVzdHJveV9hbGxfcGVlcnNgLCB3aGljaCBvZnRlbiBsZWFkcyB0byBpbnRlcmVzdGluZyByYWNlIGNvbmRpdGlvbnMuCgpOb3csIGFjY2Vzc2liaWxpdHkuIFRoaXMgaXMgYSBmdWxseSBzb2Z0d2FyZS1iYXNlZCBwcm90b2NvbCwgd2hpY2ggbWVhbnMgaXQgc2hvdWxkIGJlIHJlYWNoYWJsZSBpbiBRRU1VIG9yIEdDRSBlbnZpcm9ubWVudHMg4oCTIG5vIGhhcmR3YXJlIGRlcGVuZGVuY2llcywgd2hpY2ggaXMgZ3JlYXQgZm9yIG91ciBwdXJwb3Nlcy4KCklzIHRoaXMgd29ydGggdGhlIGVmZm9ydD8gQWJzb2x1dGVseS4gQ29yZSBuZXR3b3JraW5nIHByb3RvY29sPyBDaGVjay4gTGlmZWN5Y2xlIG1hbmFnZW1lbnQgd2l0aGluIG5ldG5zPyBDaGVjaywgYW5kIHRoYXQmIzM5O3Mgb2Z0ZW4gYSB0cmVhc3VyZSB0cm92ZSBmb3IgZmluZGluZyBidWdzLCBsaWtlIG5ldG5zIGV4aXQgYnVncyBhbmQgc29ja2V0IGNsZWFudXAgaXNzdWVzLiBUaGUgdXNlIG9mIGBwcmVfZXhpdGAgaXMgcGFydGljdWxhcmx5IGludGVyZXN0aW5nLgoKQmVmb3JlIHdlIHByb2NlZWQsIGxldCYjMzk7cyBxdWlja2x5IGNoZWNrIHRoZSByZXF1aXJlZCBjb25maWd1cmF0aW9ucy4gV2UmIzM5O2xsIG5lZWQgYEFGX1JYUlBDYCAoUnhSUEMgc2Vzc2lvbiBzb2NrZXRzLCB3aGljaCBkZXBlbmRzIG9uIGBJTkVUYCkgYW5kIGBJTkVUYCAoc3RhbmRhcmQgSVB2NCBuZXR3b3JraW5nKS4gQW55IG90aGVyIGRlcGVuZGVuY2llcz8gTGV0JiMzOTtzIHF1aWNrbHkgc2NhbiB0aGUgYG5ldC9yeHJwYy9NYWtlZmlsZWAgdG8gYmUgc3VyZSwgYW5kIG5vIG90aGVyIGNvbmZpZ3Mgd2VyZSBmb3VuZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDI6NTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvcnhycGMvTWFrZWZpbGUmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4gICAyOlx0I1xuICAgMzpcdCMgTWFrZWZpbGUgZm9yIExpbnV4IGtlcm5lbCBSeFJQQ1xuICAgNDpcdCNcbiAgIDU6XHRcbiAgIDY6XHRvYmotJChDT05GSUdfQUZfUlhSUEMpICYjNDM7PSByeHJwYy5vXG4gICA3Olx0XG4gICA4Olx0cnhycGMteSA6PSBcXFxuICAgOTpcdFx0YWZfcnhycGMubyBcXFxuICAxMDpcdFx0Y2FsbF9hY2NlcHQubyBcXFxuICAxMTpcdFx0Y2FsbF9ldmVudC5vIFxcXG4gIDEyOlx0XHRjYWxsX29iamVjdC5vIFxcXG4gIDEzOlx0XHRjYWxsX3N0YXRlLm8gXFxcbiAgMTQ6XHRcdGNvbm5fY2xpZW50Lm8gXFxcbiAgMTU6XHRcdGNvbm5fZXZlbnQubyBcXFxuICAxNjpcdFx0Y29ubl9vYmplY3QubyBcXFxuICAxNzpcdFx0Y29ubl9zZXJ2aWNlLm8gXFxcbiAgMTg6XHRcdGlucHV0Lm8gXFxcbiAgMTk6XHRcdGlucHV0X3JhY2subyBcXFxuICAyMDpcdFx0aW5zZWN1cmUubyBcXFxuICAyMTpcdFx0aW9fdGhyZWFkLm8gXFxcbiAgMjI6XHRcdGtleS5vIFxcXG4gIDIzOlx0XHRsb2NhbF9ldmVudC5vIFxcXG4gIDI0Olx0XHRsb2NhbF9vYmplY3QubyBcXFxuICAyNTpcdFx0bWlzYy5vIFxcXG4gIDI2Olx0XHRuZXRfbnMubyBcXFxuICAyNzpcdFx0b29iLm8gXFxcbiAgMjg6XHRcdG91dHB1dC5vIFxcXG4gIDI5Olx0XHRwZWVyX2V2ZW50Lm8gXFxcbiAgMzA6XHRcdHBlZXJfb2JqZWN0Lm8gXFxcbiAgMzE6XHRcdHJlY3Ztc2cubyBcXFxuICAzMjpcdFx0cnR0Lm8gXFxcbiAgMzM6XHRcdHNlY3VyaXR5Lm8gXFxcbiAgMzQ6XHRcdHNlbmRtc2cubyBcXFxuICAzNTpcdFx0c2VydmVyX2tleS5vIFxcXG4gIDM2Olx0XHRza2J1ZmYubyBcXFxuICAzNzpcdFx0dHhidWYubyBcXFxuICAzODpcdFx0dXRpbHMub1xuICAzOTpcdFxuICA0MDpcdHJ4cnBjLSQoQ09ORklHX1BST0NfRlMpICYjNDM7PSBwcm9jLm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDI6NTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTYxNjkKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAyODIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIEFGX1JYUlBDIE5ldG5zL1BlZXIgTGlmZWN5Y2xlIGZvciBGb2N1cyBTeW1ib2xzKioKCk9rYXksIGxldCYjMzk7cyB6ZXJvIGluIG9uIHRoZXNlIGZvY3VzIHN5bWJvbHMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBhY3Qgb2YgdGhlc2UgbW9kaWZpY2F0aW9ucy4gRnJvbSB3aGF0IEkgc2VlLCB0aGUgcHJpbWFyeSBmdW5jdGlvbnMgYWZmZWN0ZWQgYXJlIGByeHJwY19wcmVfZXhpdF9uZXRgLCBgcnhycGNfZXhpdF9uZXRgLCBhbmQgYHJ4cnBjX2Rlc3Ryb3lfYWxsX3BlZXJzYC4gVGhlc2Ugc2VlbSB0byBiZSB0aGUgY29yZSBvZiB0aGUgbmV0IG5hbWVzcGFjZSBhbmQgcGVlciBsaWZlY3ljbGUgY2hhbmdlcyB3aXRoaW4gQUZfUlhSUEMuCgpgcnhycGNfZGVzdHJveV9hbGxfcGVlcnNgIGluIHBhcnRpY3VsYXIgaXMgaW50ZXJlc3RpbmcsIGJlaW5nIG5vbi1zdGF0aWMgaW4gYHBlZXJfb2JqZWN0LmNgIGFuZCBjYWxsZWQgYnkgYHJ4cnBjX2V4aXRfbmV0YC4gIE15IGludHVpdGlvbiB0ZWxscyBtZSB0byBkcmlsbCBkb3duIGZ1cnRoZXIgaW50byB0aGUgcmVsYXRpb25zaGlwcyBhbmQgY2FsbC1ncmFwaCBoZXJlLiAgSSBuZWVkIHRvIHNlZSBpZiBpdCYjMzk7cyBleHBvcnRlZCBvciB1c2VkIGVsc2V3aGVyZS4gVGhlbiwgYHJ4cnBjX3ByZV9leGl0X25ldGAgYW5kIGByeHJwY19leGl0X25ldGAgYXJlIHN0YXRpYyBmdW5jdGlvbnMgcmVnaXN0ZXJlZCB0aHJvdWdoIGByeHJwY19uZXRfb3BzYCDigJMgdGhhdCBjb250ZXh0IGlzIGltcG9ydGFudC4KCkkgc2hvdWxkIGFsc28gcXVpY2tseSByZXZpZXcgb3RoZXIgcmVsZXZhbnQgZnVuY3Rpb25zIHdpdGhpbiBBRl9SWFJQQywgbGlrZSBgcnhycGNfaW5pdF9uZXRgLCBgcnhycGNfbG9va3VwX3BlZXJgLCBgX19yeHJwY19wdXRfcGVlcmAsIGFuZCBgcnhycGNfbmV3X2luY29taW5nX3BlZXJgLiBBcmUgYW55IG9mIHRoZXNlIGluZGlyZWN0bHkgYWZmZWN0ZWQgYnkgdGhlc2UgY2hhbmdlcywgcGVyaGFwcyB2aWEgZGF0YSBzdHJ1Y3R1cmVzIG9yIHNoYXJlZCByZXNvdXJjZXM/CgpNeSBmb2N1cywgZm9yIHRoaXMgc3BlY2lmaWMgYW5hbHlzaXMsIHJlbWFpbnMgZmlybWx5IG9uIGByeHJwY19kZXN0cm95X2FsbF9wZWVyc2AsIGByeHJwY19leGl0X25ldGAsIGFuZCBgcnhycGNfcHJlX2V4aXRfbmV0YCwgYXMgdGhleSYjMzk7cmUgdGhlIGRpcmVjdCB0YXJnZXRzIGFuZCBlbnRyeSBwb2ludHMgZm9yIHRoaXMgY2hhbmdlZCBsb2dpYy4gSSByZWFsbHkgbmVlZCB0byBjaGVjayBpZiBgcnhycGNfZGVzdHJveV9hbGxfcGVlcnNgIGlzIGRlY2xhcmVkIG9yIHVzZWQgYnkgYW55IGhlYWRlciBmaWxlcywgc3BlY2lmaWNhbGx5IGluIGBhci1pbnRlcm5hbC5oYCwgdG8gZ2F1Z2UgaXRzIGZ1bGwgc2NvcGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDAyOjU5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3J4cnBjX2Rlc3Ryb3lfYWxsX3BlZXJzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3J4cnBjJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9yeHJwYy9hci1pbnRlcm5hbC5oPTE0MjY9dm9pZCByeHJwY19uZXdfaW5jb21pbmdfcGVlcihzdHJ1Y3QgcnhycGNfbG9jYWwgKmxvY2FsLCBzdHJ1Y3QgcnhycGNfcGVlciAqcGVlcik7XG5uZXQvcnhycGMvYXItaW50ZXJuYWwuaDoxNDI3OnZvaWQgcnhycGNfZGVzdHJveV9hbGxfcGVlcnMoc3RydWN0IHJ4cnBjX25ldCAqKTtcbm5ldC9yeHJwYy9hci1pbnRlcm5hbC5oLTE0Mjgtc3RydWN0IHJ4cnBjX3BlZXIgKnJ4cnBjX2dldF9wZWVyKHN0cnVjdCByeHJwY19wZWVyICosIGVudW0gcnhycGNfcGVlcl90cmFjZSk7XG4tLVxubmV0L3J4cnBjL25ldF9ucy5jPTExNj1zdGF0aWMgX19uZXRfZXhpdCB2b2lkIHJ4cnBjX2V4aXRfbmV0KHN0cnVjdCBuZXQgKm5ldClcbi0tXG5uZXQvcnhycGMvbmV0X25zLmMtMTE5LVxubmV0L3J4cnBjL25ldF9ucy5jOjEyMDpcdHJ4cnBjX2Rlc3Ryb3lfYWxsX3BlZXJzKHJ4bmV0KTtcbm5ldC9yeHJwYy9uZXRfbnMuYy0xMjEtXHRyeHJwY19kZXN0cm95X2FsbF9sb2NhbHMocnhuZXQpO1xuLS1cbm5ldC9yeHJwYy9wZWVyX29iamVjdC5jPTQzND12b2lkIHJ4cnBjX3B1dF9wZWVyKHN0cnVjdCByeHJwY19wZWVyICpwZWVyLCBlbnVtIHJ4cnBjX3BlZXJfdHJhY2Ugd2h5KVxuLS1cbm5ldC9yeHJwYy9wZWVyX29iamVjdC5jLTQ1MS0gKi9cbm5ldC9yeHJwYy9wZWVyX29iamVjdC5jOjQ1Mjp2b2lkIHJ4cnBjX2Rlc3Ryb3lfYWxsX3BlZXJzKHN0cnVjdCByeHJwY19uZXQgKnJ4bmV0KVxubmV0L3J4cnBjL3BlZXJfb2JqZWN0LmMtNDUzLXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDI6NTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTcyMTgKCQkJCQkJCW91dHB1dDogMTc5CgkJCQkJCQl0aG91Z2h0czogMjk3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIFJ4UlBDIE5ldHdvcmsgTmFtZXNwYWNlIEhhbmRsaW5nKioKCk9rYXksIGxldCYjMzk7cyBzZWUsIHdoYXQgd2UmIzM5O3ZlIGdvdCBoZXJlLiBGaXJzdCwgSSBuZWVkIHRvIGNvbmZpcm0gdGhlIGtleSBzeW1ib2xzIGludm9sdmVkIGFuZCBob3cgdGhleSBpbnRlcmFjdC4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8ga25vdyBhYm91dCBgcnhycGNfZGVzdHJveV9hbGxfcGVlcnNgLCBgcnhycGNfZXhpdF9uZXRgLCBhbmQgYHJ4cnBjX3ByZV9leGl0X25ldGAuIFRoZXNlIGFyZSB0aGUgY3J1Y2lhbCBob29rcywgc28gbGV0JiMzOTtzIGRvdWJsZS1jaGVjayB0aGUgY29uZmlncy4gV2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBgQUZfUlhSUENgIGZvciB0aGUgUnhSUEMgc2Vzc2lvbiBzb2NrZXRzLCB3aGljaCwgb2YgY291cnNlLCByZWxpZXMgb24gYElORVRgLiBBbmQsIG1vc3QgaW1wb3J0YW50bHksIGBORVRfTlNgIGlzIGdvaW5nIHRvIGJlIHBpdm90YWwgYmVjYXVzZSwgZnJvbSB3aGF0IEkga25vdywgcGVybmV0IG9wZXJhdGlvbnMgYXJlIGxpbmtlZCB0byBuZXR3b3JrIG5hbWVzcGFjZSBzdXBwb3J0LgoKTm93LCBsZXQmIzM5O3MgZHJpbGwgZG93biBhbmQgY29uZmlybSB0aGF0IGBDT05GSUdfTkVUX05TYCBpcyBlbmFibGVkLiBBaCwgeWVzLCB0aGVyZSBpdCBpcyEgV2l0aG91dCBgQ09ORklHX05FVF9OU2AsIGByeHJwY19leGl0X25ldGAgd291bGQgb25seSBmaXJlIG9uIG1vZHVsZSB1bmxvYWQgb3Igc3lzdGVtIHNodXRkb3duLCBhIG11Y2ggbGVzcyBpbnRlcmVzdGluZyBzY2VuYXJpby4gSG93ZXZlciwgd2l0aCBgQ09ORklHX05FVF9OUz15YCwgaXQmIzM5O3MgY2FsbGVkIGV2ZXJ5IHRpbWUgYSBuZXR3b3JrIG5hbWVzcGFjZSBpcyBkZXN0cm95ZWQuIFRoYXQmIzM5O3MgYSBzaWduaWZpY2FudCBkaWZmZXJlbmNlIGFuZCBkZWZpbml0ZWx5IGFsaWducyB3aXRoIHN5emthbGxlciYjMzk7cyB0cmlnZ2VyLiBUaGVyZWZvcmUsIGl0IGlzIGNsZWFyIHRoYXQgd2UgaGF2ZSBhIGRlcGVuZGVuY3kgb24gYEFGX1JYUlBDYCwgYElORVRgLCBhbmQgYE5FVF9OU2AuCgpGaW5hbGx5LCBqdXN0IHRvIGJlIGFic29sdXRlbHkgY2VydGFpbiwgbGV0JiMzOTtzIHJ1biB0aHJvdWdoIHRoZXNlIGluc3RydWN0aW9ucyBhZ2FpbjoKCiogICAqKldvcnRoRnV6emluZzogdHJ1ZSoqIOKAkyBPYnZpb3VzLiBUaGlzIG1lcml0cyBkZXRhaWxlZCBpbnZlc3RpZ2F0aW9uLgoqICAgKipFbmFibGVDb25maWdzOiBcWyYjMzQ7QUZcX1JYUlBDJiMzNDssICYjMzQ7SU5FVCYjMzQ7LCAmIzM0O05FVFxfTlMmIzM0O1xdKiog4oCTIFllcywgdGhhdCYjMzk7cyB3aGF0IHdlIG5lZWQuCiogICAqKkZvY3VzU3ltYm9sczogXFsmIzM0O3J4cnBjXF9wcmVcX2V4aXRcX25ldCYjMzQ7LCAmIzM0O3J4cnBjXF9leGl0XF9uZXQmIzM0OywgJiMzNDtyeHJwY1xfZGVzdHJveVxfYWxsXF9wZWVycyYjMzQ7XF0qKiDigJMgQ29uZmlybWVkLiBUaGVzZSBzeW1ib2xzIGFyZSB0aGUgcHJlY2lzZSBwb2ludHMgb2YgaW50ZXJlc3QuCiogICAqKlJlYXNvbmluZzogQ29uY2lzZSBleHBsYW5hdGlvbiBvZiB0aGUgdmVyZGljdC4qKiDigJMgR29vZCEKCk9rYXksIHRpbWUgdG8gc3VibWl0IHRoZXNlIGZpbmRpbmdzIHRvIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDAyOjU5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtBRl9SWFJQQyYjMzQ7LAogICAgJiMzNDtJTkVUJiMzNDssCiAgICAmIzM0O05FVF9OUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3J4cnBjX3ByZV9leGl0X25ldCYjMzQ7LAogICAgJiMzNDtyeHJwY19leGl0X25ldCYjMzQ7LAogICAgJiMzNDtyeHJwY19kZXN0cm95X2FsbF9wZWVycyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgUnhSUEMgbmV0d29yayBuYW1lc3BhY2UgdGVhcmRvd24gbGlmZWN5Y2xlIGJ5IHNwbGl0dGluZyBuZXRucyBjbGVhbnVwIGludG8gcHJlX2V4aXQgYW5kIGV4aXQgaGFuZGxlcnMgKHJ4cnBjX3ByZV9leGl0X25ldCBhbmQgcnhycGNfZXhpdF9uZXQpIGFuZCBhZGRzIGxvY2tpbmcgKHBlZXJfaGFzaF9sb2NrKSBpbiByeHJwY19kZXN0cm95X2FsbF9wZWVycyB0byBwcmV2ZW50IHVzZS1hZnRlci1mcmVlIGNvbmRpdGlvbnMgZHVyaW5nIHBlZXIgaGFzaCB0YWJsZSB0cmF2ZXJzYWwuIFRoZXNlIGNoYW5nZXMgdG91Y2ggcmVhY2hhYmxlIG5ldHdvcmtpbmcgY29kZSB0aGF0IGlzIGV4ZXJjaXNlZCBkdXJpbmcgbmV0bnMgbGlmZWN5Y2xlIGFuZCBBRl9SWFJQQyBzb2NrZXQgb3BlcmF0aW9ucywgbWFraW5nIGl0IHdvcnRod2hpbGUgdG8gZnV6ei4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QUZfUlhSUEMmIzM0OywKICAgICYjMzQ7SU5FVCYjMzQ7LAogICAgJiMzNDtORVRfTlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtyeHJwY19wcmVfZXhpdF9uZXQmIzM0OywKICAgICYjMzQ7cnhycGNfZXhpdF9uZXQmIzM0OywKICAgICYjMzQ7cnhycGNfZGVzdHJveV9hbGxfcGVlcnMmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIFJ4UlBDIG5ldHdvcmsgbmFtZXNwYWNlIHRlYXJkb3duIGxpZmVjeWNsZSBieSBzcGxpdHRpbmcgbmV0bnMgY2xlYW51cCBpbnRvIHByZV9leGl0IGFuZCBleGl0IGhhbmRsZXJzIChyeHJwY19wcmVfZXhpdF9uZXQgYW5kIHJ4cnBjX2V4aXRfbmV0KSBhbmQgYWRkcyBsb2NraW5nIChwZWVyX2hhc2hfbG9jaykgaW4gcnhycGNfZGVzdHJveV9hbGxfcGVlcnMgdG8gcHJldmVudCB1c2UtYWZ0ZXItZnJlZSBjb25kaXRpb25zIGR1cmluZyBwZWVyIGhhc2ggdGFibGUgdHJhdmVyc2FsLiBUaGVzZSBjaGFuZ2VzIHRvdWNoIHJlYWNoYWJsZSBuZXR3b3JraW5nIGNvZGUgdGhhdCBpcyBleGVyY2lzZWQgZHVyaW5nIG5ldG5zIGxpZmVjeWNsZSBhbmQgQUZfUlhSUEMgc29ja2V0IG9wZXJhdGlvbnMsIG1ha2luZyBpdCB3b3J0aHdoaWxlIHRvIGZ1enouJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDAyOjU5PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDI6NTk8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgcGVybmV0IG5hbWVzcGFjZSBleGl0IGNhbGxiYWNrcyBpbiBBRl9SWFJQQyAoc3BsaXR0aW5nIHRlYXJkb3duIGJldHdlZW4gcHJlX2V4aXQgYW5kIGV4aXQpIGFuZCBhZGRzIHNwaW5sb2NrIHN5bmNocm9uaXphdGlvbiAocGVlcl9oYXNoX2xvY2spIGluIHJ4cnBjX2Rlc3Ryb3lfYWxsX3BlZXJzKCkgdG8gcHJvdGVjdCBhZ2FpbnN0IGNvbmN1cnJlbnQgdW5saW5raW5nIGFuZCB1c2UtYWZ0ZXItZnJlZS5cblxuTm8gbmV3IG1lbW9yeSBhbGxvY2F0aW9ucywgdW5pbml0aWFsaXplZCB2YXJpYWJsZSB1c2VzLCB1c2VyLWNvcHkgb3BlcmF0aW9ucywgb3IgYWx0ZXJlZCBkYXRhLXBhcnNpbmcvYnVmZmVyLWxlbmd0aCBsb2dpYyBhcmUgaW50cm9kdWNlZC4gVGhlIHBvdGVudGlhbCBpc3N1ZXMgYWRkcmVzc2VkIG9yIGludHJvZHVjZWQgYnkgdGhpcyBwYXRjaCByZWxhdGUgZXhjbHVzaXZlbHkgdG8gdGVhcmRvd24gb3JkZXJpbmcsIHN5bmNocm9uaXphdGlvbiwgbG9ja2luZywgYW5kIHVzZS1hZnRlci1mcmVlLCBhbGwgb2Ygd2hpY2ggYXJlIGNvdmVyZWQgYnkgc3RhbmRhcmQgc2FuaXRpemVycyAoS0FTQU4sIExPQ0tERVApLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgZTI1ZDIxOWM5OGQ3NWNmNzY4NDhjMTY5YzFiZjNkZDFmZGFjYzE2MApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUdWUgU2VwIDggMDI6NTk6MDggMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQvcnhycGMvbmV0X25zLmMgYi9uZXQvcnhycGMvbmV0X25zLmMKaW5kZXggOWE5ODM0MTQ1ZTgxZS4uMTY5MTE2NzM1MzY2MyAxMDA2NDQKLS0tIGEvbmV0L3J4cnBjL25ldF9ucy5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9yeHJwYy9uZXRfbnMuYwpAQCAtOTcsMTAgJiM0Mzs5Nyw3IEBAIHN0YXRpYyBfX25ldF9pbml0IGludCByeHJwY19pbml0X25ldChzdHJ1Y3QgbmV0ICpuZXQpCiAJcmV0dXJuIHJldDsKIH0KIAotLyoKLSAqIENsZWFuIHVwIGEgcGVyLW5ldHdvcmsgbmFtZXNwYWNlIHJlY29yZC4KLSAqLwotc3RhdGljIF9fbmV0X2V4aXQgdm9pZCByeHJwY19leGl0X25ldChzdHJ1Y3QgbmV0ICpuZXQpCiYjNDM7c3RhdGljIF9fbmV0X2V4aXQgdm9pZCByeHJwY19wcmVfZXhpdF9uZXQoc3RydWN0IG5ldCAqbmV0KQogewogCXN0cnVjdCByeHJwY19uZXQgKnJ4bmV0ID0gcnhycGNfbmV0KG5ldCk7CiAKQEAgLTExMSwxNCAmIzQzOzEwOCwyNCBAQCBzdGF0aWMgX19uZXRfZXhpdCB2b2lkIHJ4cnBjX2V4aXRfbmV0KHN0cnVjdCBuZXQgKm5ldCkKIAl0aW1lcl9kZWxldGVfc3luYygmYW1wO3J4bmV0LSZndDtwZWVyX2tlZXBhbGl2ZV90aW1lcik7CiAJcnhycGNfZGVzdHJveV9hbGxfY2FsbHMocnhuZXQpOwogCXJ4cnBjX2Rlc3Ryb3lfYWxsX2Nvbm5lY3Rpb25zKHJ4bmV0KTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBDbGVhbiB1cCBhIHBlci1uZXR3b3JrIG5hbWVzcGFjZSByZWNvcmQuCiYjNDM7ICovCiYjNDM7c3RhdGljIF9fbmV0X2V4aXQgdm9pZCByeHJwY19leGl0X25ldChzdHJ1Y3QgbmV0ICpuZXQpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgcnhycGNfbmV0ICpyeG5ldCA9IHJ4cnBjX25ldChuZXQpOwomIzQzOwogCXJ4cnBjX2Rlc3Ryb3lfYWxsX3BlZXJzKHJ4bmV0KTsKIAlyeHJwY19kZXN0cm95X2FsbF9sb2NhbHMocnhuZXQpOwogCXByb2NfcmVtb3ZlKHJ4bmV0LSZndDtwcm9jX25ldCk7CiB9CiAKIHN0cnVjdCBwZXJuZXRfb3BlcmF0aW9ucyByeHJwY19uZXRfb3BzID0gewotCS5pbml0CT0gcnhycGNfaW5pdF9uZXQsCi0JLmV4aXQJPSByeHJwY19leGl0X25ldCwKLQkuaWQJPSAmYW1wO3J4cnBjX25ldF9pZCwKLQkuc2l6ZQk9IHNpemVvZihzdHJ1Y3QgcnhycGNfbmV0KSwKJiM0MzsJLmluaXQJCT0gcnhycGNfaW5pdF9uZXQsCiYjNDM7CS5wcmVfZXhpdAk9IHJ4cnBjX3ByZV9leGl0X25ldCwKJiM0MzsJLmV4aXQJCT0gcnhycGNfZXhpdF9uZXQsCiYjNDM7CS5pZAkJPSAmYW1wO3J4cnBjX25ldF9pZCwKJiM0MzsJLnNpemUJCT0gc2l6ZW9mKHN0cnVjdCByeHJwY19uZXQpLAogfTsKZGlmZiAtLWdpdCBhL25ldC9yeHJwYy9wZWVyX29iamVjdC5jIGIvbmV0L3J4cnBjL3BlZXJfb2JqZWN0LmMKaW5kZXggZmE5YTQwNmUxMTY4My4uZmFhMjk4MzYzOGIyYiAxMDA2NDQKLS0tIGEvbmV0L3J4cnBjL3BlZXJfb2JqZWN0LmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3J4cnBjL3BlZXJfb2JqZWN0LmMKQEAgLTQ1NCw2ICYjNDM7NDU0LDEyIEBAIHZvaWQgcnhycGNfZGVzdHJveV9hbGxfcGVlcnMoc3RydWN0IHJ4cnBjX25ldCAqcnhuZXQpCiAJc3RydWN0IHJ4cnBjX3BlZXIgKnBlZXI7CiAJaW50IGk7CiAKJiM0MzsJLyoKJiM0MzsJICogUHJldmVudCB1c2UtYWZ0ZXItZnJlZSBpZiBhIHBlZXIgaXMgY29uY3VycmVudGx5IHVubGlua2VkIGZyb20gdGhlCiYjNDM7CSAqIGhhc2ggdGFibGUgYW5kIGZyZWVkIHZpYSBSQ1UgZHVyaW5nIGl0ZXJhdGlvbi4KJiM0MzsJICovCiYjNDM7CXNwaW5fbG9ja19iaCgmYW1wO3J4bmV0LSZndDtwZWVyX2hhc2hfbG9jayk7CiYjNDM7CiAJZm9yIChpID0gMDsgaSAmbHQ7IEhBU0hfU0laRShyeG5ldC0mZ3Q7cGVlcl9oYXNoKTsgaSYjNDM7JiM0MzspIHsKIAkJaWYgKGhsaXN0X2VtcHR5KCZhbXA7cnhuZXQtJmd0O3BlZXJfaGFzaFtpXSkpCiAJCQljb250aW51ZTsKQEAgLTQ2NSw2ICYjNDM7NDcxLDggQEAgdm9pZCByeHJwY19kZXN0cm95X2FsbF9wZWVycyhzdHJ1Y3QgcnhycGNfbmV0ICpyeG5ldCkKIAkJCSAgICAgICAmYW1wO3BlZXItJmd0O3NyeC50cmFuc3BvcnQpOwogCQl9CiAJfQomIzQzOwomIzQzOwlzcGluX3VubG9ja19iaCgmYW1wO3J4bmV0LSZndDtwZWVyX2hhc2hfbG9jayk7CiB9CiAKIC8qKgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDI6NTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjc3MAoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDYwMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipLTVNBTiBGdXp6aW5nIFNlc3Npb24gRXZhbHVhdGlvbioqCgpPa2F5LCBsZXQmIzM5O3MgYXNzZXNzIHdoZXRoZXIgdGhpcyBwYXRjaCB3YXJyYW50cyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uIE15IGluaXRpYWwgaW1wcmVzc2lvbiwgYWZ0ZXIgcmV2aWV3aW5nIHRoZSBjaGFuZ2VzLCBpcyB0aGF0IGl0JiMzOTtzIGxpa2VseSAqbm90KiBhIHN0cm9uZyBjYW5kaWRhdGUuIFRoZSBwYXRjaCB0b3VjaGVzIGBuZXQvcnhycGMvbmV0X25zLmNgIGFuZCBgbmV0L3J4cnBjL3BlZXJfb2JqZWN0LmNgLiBJIHNlZSB0aGF0IGByeHJwY19leGl0X25ldGAgaGFzIGJlZW4gc3BsaXQgaW50byBgcnhycGNfcHJlX2V4aXRfbmV0YCBhbmQgYHJ4cnBjX2V4aXRfbmV0YCwgYSBjbGVhciBzaWduYWwgdGhhdCB0aGVyZSYjMzk7cyBiZWVuIGF0dGVudGlvbiBwYWlkIHRvIHRoZSB0ZWFyZG93biBzZXF1ZW5jZS4gU3BlY2lmaWNhbGx5LCBgcnhycGNfcHJlX2V4aXRfbmV0YCBub3cgaGFuZGxlcyB0aGUgbW9yZSBpbW1lZGlhdGUgY2xlYW51cCB0YXNrcyBsaWtlIHNldHRpbmcgYGxpdmUgPSBmYWxzZWAsIGtpbGxpbmcgdGltZXJzLCBhbmQgZGVzdHJveWluZyBjYWxscyBhbmQgY29ubmVjdGlvbnMsIGJlZm9yZSBgcnhycGNfZXhpdF9uZXRgIGRlYWxzIHdpdGggcGVlcnMsIGxvY2FscywgYW5kIHByb2MgZW50cmllcy4gVGhpcyBpcyByZWdpc3RlcmVkIHZpYSB0aGUgYHBlcm5ldF9vcGVyYXRpb25zYCBzdHJ1Y3QuCgpGdXJ0aGVybW9yZSwgd2l0aGluIGByeHJwY19kZXN0cm95X2FsbF9wZWVyc2AsIEkmIzM5O3ZlIG9ic2VydmVkIHRoZSBhZGRpdGlvbiBvZiBgc3Bpbl9sb2NrX2JoYCBjYWxscyBhcm91bmQgdGhlIGhhc2ggdGFibGUgaXRlcmF0aW9uLiBUaGlzIGluZGljYXRlcyBhIGNvbmNlcm4gYWJvdXQgY29uY3VycmVudCBhY2Nlc3MgYW5kIHBvdGVudGlhbCB1c2UtYWZ0ZXItZnJlZSBzY2VuYXJpb3MgZHVyaW5nIHBlZXIgdW5saW5raW5nLiBQcmVjaXNlbHkgdGhlIGtpbmQgb2Ygc2NlbmFyaW8gdGhhdCBLQVNBTiBhbmQgTE9DS0RFUCB3b3VsZCBsb3ZlIHRvIGZpbmQgcHJvYmxlbXMgd2l0aCEKCk5vdywgdGhlIGltcG9ydGFudCBwYXJ0OiBLTVNBTiB0YXJnZXRzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzZS4gTG9va2luZyBvdmVyIHRoZSBwYXRjaCBkZXRhaWxzIEkgc2VlOiBubyBuZXcgbWVtb3J5IGFsbG9jYXRpb25zLCBubyBjb3B5aW5nIHRvIHVzZXJzcGFjZSAod2hpY2ggSSYjMzk7ZCBiZSBlc3BlY2lhbGx5IHdhcnkgb2YpLCBubyBkaXJlY3QgYWNjZXNzZXMgdG8gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMuIFRoZSBjb3JlIG9mIHRoZSBjaGFuZ2VzIHNlZW0gdG8gcmV2b2x2ZSBhcm91bmQgKm9yZGVyaW5nKiBvZiB0ZWFyZG93biBhbmQgcHJvcGVyIGxvY2tpbmcgdG8gcHJldmVudCBjb25jdXJyZW5jeSBpc3N1ZXMgYW5kIFVBRnMuIFRoaXMgaXMgY2xhc3NpYyBzdHVmZiBmb3IgcmFjZSBjb25kaXRpb24gZGV0ZWN0aW9uIGFuZCBtZW1vcnkgY29ycnVwdGlvbiByZWxhdGVkIHRvIGNvbmN1cnJlbmN5LiBLQVNBTiBpcyB1c2VmdWwgaGVyZS4gS01TQU4uLi4gTm90IHNvIG11Y2guCgpKdXN0IHRvIGJlIGFic29sdXRlbHkgc3VyZSwgbGV0JiMzOTtzIHRha2UgYSBxdWljayBsb29rLiBJJiMzOTtsbCBxdWlja2x5IGNoZWNrIGByeHJwY19kZXN0cm95X2FsbF9wZWVyc2AuIEkmIzM5O20gZ29pbmcgdG8gcXVpY2tseSBjaGVjayBgbmV0L3J4cnBjL3BlZXJfb2JqZWN0LmNgIHVzaW5nIHNvbWV0aGluZyBsaWtlIGEgYHJlYWQtZmlsZWAgb3IgYGdyZXBwZXJgIGNhbGwgdG8gZW5zdXJlIEkmIzM5O20gbm90IG1pc3NpbmcgYW55dGhpbmcgb2J2aW91cywgdGhvdWdoIEkmIzM5O20gZmFpcmx5IGNvbmZpZGVudCBiYXNlZCBvbiB0aGlzIGZpcnN0IHBhc3MuCgpTbywgZ2l2ZW4gbXkgYW5hbHlzaXMsIEkmIzM5O20gbGVhbmluZyBoZWF2aWx5IHRvd2FyZHMgKm5vKiBLTVNBTiBzZXNzaW9uIGJlaW5nIG5lY2Vzc2FyeSBoZXJlLiBUaGUgaXNzdWVzIGFkZHJlc3NlZCBhcmUgbW9yZSBpbiB0aGUgcmVhbG0gb2YgY29uY3VycmVuY3ksIGxpZmV0aW1lIG1hbmFnZW1lbnQsIGFuZCBzeW5jaHJvbml6YXRpb24sIGFyZWFzIHdoZXJlIEtBU0FOLCBMT0NLREVQLCBhbmQgb3RoZXIgc2FuaXRpemVycyBhcmUgbXVjaCBtb3JlIGFwcGxpY2FibGUuIFVubGVzcyBJIGZpbmQgc29tZXRoaW5nIGV4dHJlbWVseSB1bmV4cGVjdGVkIGluIHRoZSBmaWxlIGluc3BlY3Rpb24sIEkmIzM5O2xsIHJlY29tbWVuZCB3ZSBza2lwIEtNU0FOIGZvciB0aGlzIG9uZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDI6NTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cnhycGNfZGVzdHJveV9hbGxfcGVlcnMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvcnhycGMvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9yeHJwYy9hci1pbnRlcm5hbC5oPTE0MjY9dm9pZCByeHJwY19uZXdfaW5jb21pbmdfcGVlcihzdHJ1Y3QgcnhycGNfbG9jYWwgKmxvY2FsLCBzdHJ1Y3QgcnhycGNfcGVlciAqcGVlcik7XG5uZXQvcnhycGMvYXItaW50ZXJuYWwuaDoxNDI3OnZvaWQgcnhycGNfZGVzdHJveV9hbGxfcGVlcnMoc3RydWN0IHJ4cnBjX25ldCAqKTtcbm5ldC9yeHJwYy9hci1pbnRlcm5hbC5oLTE0Mjgtc3RydWN0IHJ4cnBjX3BlZXIgKnJ4cnBjX2dldF9wZWVyKHN0cnVjdCByeHJwY19wZWVyICosIGVudW0gcnhycGNfcGVlcl90cmFjZSk7XG4tLVxubmV0L3J4cnBjL25ldF9ucy5jPTExNj1zdGF0aWMgX19uZXRfZXhpdCB2b2lkIHJ4cnBjX2V4aXRfbmV0KHN0cnVjdCBuZXQgKm5ldClcbi0tXG5uZXQvcnhycGMvbmV0X25zLmMtMTE5LVxubmV0L3J4cnBjL25ldF9ucy5jOjEyMDpcdHJ4cnBjX2Rlc3Ryb3lfYWxsX3BlZXJzKHJ4bmV0KTtcbm5ldC9yeHJwYy9uZXRfbnMuYy0xMjEtXHRyeHJwY19kZXN0cm95X2FsbF9sb2NhbHMocnhuZXQpO1xuLS1cbm5ldC9yeHJwYy9wZWVyX29iamVjdC5jPTQzND12b2lkIHJ4cnBjX3B1dF9wZWVyKHN0cnVjdCByeHJwY19wZWVyICpwZWVyLCBlbnVtIHJ4cnBjX3BlZXJfdHJhY2Ugd2h5KVxuLS1cbm5ldC9yeHJwYy9wZWVyX29iamVjdC5jLTQ1MS0gKi9cbm5ldC9yeHJwYy9wZWVyX29iamVjdC5jOjQ1Mjp2b2lkIHJ4cnBjX2Rlc3Ryb3lfYWxsX3BlZXJzKHN0cnVjdCByeHJwY19uZXQgKnJ4bmV0KVxubmV0L3J4cnBjL3BlZXJfb2JqZWN0LmMtNDUzLXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDI6NTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDMwOAoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDI4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqRGl2aW5nIGludG8gYHBlZXJfb2JqZWN0LmNgKioKCk9rYXksIHNvIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gdGhpcyBmdW5jdGlvbi4gTGV0JiMzOTtzIHN0YXJ0IGJ5IHBpbnBvaW50aW5nIHRoZSByZWxldmFudCBjb2RlLiBNeSBpbnR1aXRpb24sIGJhc2VkIG9uIHRoZSBjb250ZXh0LCBzdWdnZXN0cyB0aGUgYXJlYSBhcm91bmQgbGluZSA0NTAgaW4gYG5ldC9yeHJwYy9wZWVyX29iamVjdC5jYCBpcyB3aGVyZSB0aGUga2V5IGxvZ2ljIHJlc2lkZXMuIEkmIzM5O2xsIGp1bXAgdGhlcmUgZGlyZWN0bHkgdG8gZ2V0IHRoZSB3aG9sZSBmdW5jdGlvbiBpbiBjb250ZXh0LiBJdCYjMzk7cyB0aGUgYmVzdCB3YXkgdG8gdW5kZXJzdGFuZCB0aGUgY29udHJvbCBmbG93IGFuZCBhc3NvY2lhdGVkIGRhdGEgc3RydWN0dXJlcyBxdWlja2x5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwMjo1OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9yeHJwYy9wZWVyX29iamVjdC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNDQ1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA0NDU6XHRcdFx0XHRfX3J4cnBjX3B1dF9wZWVyKHBlZXIpO1xuIDQ0NjpcdFx0fVxuIDQ0NzpcdH1cbiA0NDg6XHRcbiA0NDk6XHQvKlxuIDQ1MDpcdCAqIE1ha2Ugc3VyZSBhbGwgcGVlciByZWNvcmRzIGhhdmUgYmVlbiBkaXNjYXJkZWQuXG4gNDUxOlx0ICovXG4gNDUyOlx0dm9pZCByeHJwY19kZXN0cm95X2FsbF9wZWVycyhzdHJ1Y3QgcnhycGNfbmV0ICpyeG5ldClcbiA0NTM6XHR7XG4gNDU0Olx0XHRzdHJ1Y3QgcnhycGNfcGVlciAqcGVlcjtcbiA0NTU6XHRcdGludCBpO1xuIDQ1NjpcdFxuIDQ1NzpcdFx0LypcbiA0NTg6XHRcdCAqIFByZXZlbnQgdXNlLWFmdGVyLWZyZWUgaWYgYSBwZWVyIGlzIGNvbmN1cnJlbnRseSB1bmxpbmtlZCBmcm9tIHRoZVxuIDQ1OTpcdFx0ICogaGFzaCB0YWJsZSBhbmQgZnJlZWQgdmlhIFJDVSBkdXJpbmcgaXRlcmF0aW9uLlxuIDQ2MDpcdFx0ICovXG4gNDYxOlx0XHRzcGluX2xvY2tfYmgoXHUwMDI2cnhuZXQtXHUwMDNlcGVlcl9oYXNoX2xvY2spO1xuIDQ2MjpcdFxuIDQ2MzpcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgSEFTSF9TSVpFKHJ4bmV0LVx1MDAzZXBlZXJfaGFzaCk7IGkmIzQzOyYjNDM7KSB7XG4gNDY0Olx0XHRcdGlmIChobGlzdF9lbXB0eShcdTAwMjZyeG5ldC1cdTAwM2VwZWVyX2hhc2hbaV0pKVxuIDQ2NTpcdFx0XHRcdGNvbnRpbnVlO1xuIDQ2NjpcdFxuIDQ2NzpcdFx0XHRobGlzdF9mb3JfZWFjaF9lbnRyeShwZWVyLCBcdTAwMjZyeG5ldC1cdTAwM2VwZWVyX2hhc2hbaV0sIGhhc2hfbGluaykge1xuIDQ2ODpcdFx0XHRcdHByX2VycihcJiMzNDtMZWFrZWQgcGVlciAleCB7JXV9ICVwSVNwXFxuXCYjMzQ7LFxuIDQ2OTpcdFx0XHRcdCAgICAgICBwZWVyLVx1MDAzZWRlYnVnX2lkLFxuIDQ3MDpcdFx0XHRcdCAgICAgICByZWZjb3VudF9yZWFkKFx1MDAyNnBlZXItXHUwMDNlcmVmKSxcbiA0NzE6XHRcdFx0XHQgICAgICAgXHUwMDI2cGVlci1cdTAwM2VzcngudHJhbnNwb3J0KTtcbiA0NzI6XHRcdFx0fVxuIDQ3MzpcdFx0fVxuIDQ3NDpcdFxuIDQ3NTpcdFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2cnhuZXQtXHUwMDNlcGVlcl9oYXNoX2xvY2spO1xuIDQ3NjpcdH1cbiA0Nzc6XHRcbiA0Nzg6XHQvKipcbiA0Nzk6XHQgKiByeHJwY19rZXJuZWxfZ2V0X2NhbGxfcGVlciAtIEdldCB0aGUgcGVlciBhZGRyZXNzIG9mIGEgY2FsbFxuIDQ4MDpcdCAqIEBzb2NrOiBUaGUgc29ja2V0IG9uIHdoaWNoIHRoZSBjYWxsIGlzIGluIHByb2dyZXNzLlxuIDQ4MTpcdCAqIEBjYWxsOiBUaGUgY2FsbCB0byBxdWVyeVxuIDQ4MjpcdCAqXG4gNDgzOlx0ICogR2V0IGEgcmVjb3JkIGZvciB0aGUgcmVtb3RlIHBlZXIgaW4gYSBjYWxsLlxuIDQ4NDpcdCAqXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDAyOjU5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUwNzMKCQkJCQkJCW91dHB1dDogMTczCgkJCQkJCQl0aG91Z2h0czogMTY1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIFByb3Bvc2VkIENoYW5nZXMqKgoKT2theSwgc28gdGhlIGNoYW5nZXMgYXJlIHN0cmFpZ2h0Zm9yd2FyZC4gV2UmIzM5O3JlIHNwbGl0dGluZyBgcnhycGNfZXhpdF9uZXRgIGludG8gdHdvIHBhcnRzIHdpdGhpbiBgcGVybmV0X29wZXJhdGlvbnNgOiBhIHByZS1leGl0IGZ1bmN0aW9uLCBgcnhycGNfcHJlX2V4aXRfbmV0YCwgYW5kIHRoZSBhY3R1YWwgZXhpdCBmdW5jdGlvbiwgYHJ4cnBjX2V4aXRfbmV0YC4gQW5kLCBjcnVjaWFsbHksIHdlJiMzOTtyZSBhZGRpbmcgc3BpbmxvY2sgcHJvdGVjdGlvbiBhcm91bmQgYHJ4cnBjX2Rlc3Ryb3lfYWxsX3BlZXJzYCB0byB0YWNrbGUgdGhvc2UgcmFjZSBhbmQgVXNlLUFmdGVyLUZyZWUgaXNzdWVzIHRoYXQgcG9wIHVwIGR1cmluZyBwZWVyIGhhc2ggaXRlcmF0aW9uLiBHb29kLCBnb29kLgoKRnJvbSBteSBwZXJzcGVjdGl2ZSwgdGhlcmUmIzM5O3Mgbm90aGluZyBpbW1lZGlhdGVseSBhbGFybWluZyBoZXJlLiBObyB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZXMsIG5vIHVzZXItc3BhY2UgY29waWVzIHRvIHdvcnJ5IGFib3V0LCBubyBmaWRkbGluZyB3aXRoIGJ1ZmZlciBzaXplcyBvciB1bmluaXRpYWxpemVkIHZhcmlhYmxlIGFjY2Vzc2VzIOKAkyBhbGwgdGhpbmdzIEkmIzM5O2QgYmUgbG9va2luZyBmb3IuIEFuZCBnaXZlbiB0aGUgbmF0dXJlIG9mIHRoZSBjaGFuZ2VzLCBJIHdvdWxkIGV4cGVjdCBhbnkgcG90ZW50aWFsIHByb2JsZW1zLCBsaWtlIHRob3NlIGxvY2tpbmcgYnVncywgZGVhZGxvY2tzLCB1c2UtYWZ0ZXItZnJlZSBzY2VuYXJpb3MsIG9yIGRvdWJsZSBmcmVlcyB0byBiZSBjYXVnaHQgYnkgTE9DS0RFUCBhbmQgS0FTQU4uIFdlIGFyZSB0YWtpbmcgdGhlIHN0ZXBzIHRoYXQgd2lsbCBrZWVwIHVzIHNhZmUgaGVyZS4gVGhlcmVmb3JlLCBJIGRvbiYjMzk7dCBzZWUgYW55IHJlYXNvbiB3aHkgdGhpcyBuZWVkcyBLTVNBTiBpbnRlcnZlbnRpb24uIEkmIzM5O20gc2F0aXNmaWVkLgoKTm93LCBsZXQmIzM5O3MgZ2V0IHJlYWR5IGZvciB0aGUgYHNldC1yZXN1bHRzYCBjYWxsLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwMzowMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgcGVybmV0IG5hbWVzcGFjZSBleGl0IGNhbGxiYWNrcyBpbiBBRl9SWFJQQyAoc3BsaXR0aW5nIHRlYXJkb3duIGJldHdlZW4gcHJlX2V4aXQgYW5kIGV4aXQpIGFuZCBhZGRzIHNwaW5sb2NrIHN5bmNocm9uaXphdGlvbiAocGVlcl9oYXNoX2xvY2spIGluIHJ4cnBjX2Rlc3Ryb3lfYWxsX3BlZXJzKCkgdG8gcHJvdGVjdCBhZ2FpbnN0IGNvbmN1cnJlbnQgdW5saW5raW5nIGFuZCB1c2UtYWZ0ZXItZnJlZS5cblxuTm8gbmV3IG1lbW9yeSBhbGxvY2F0aW9ucywgdW5pbml0aWFsaXplZCB2YXJpYWJsZSB1c2VzLCB1c2VyLWNvcHkgb3BlcmF0aW9ucywgb3IgYWx0ZXJlZCBkYXRhLXBhcnNpbmcvYnVmZmVyLWxlbmd0aCBsb2dpYyBhcmUgaW50cm9kdWNlZC4gVGhlIHBvdGVudGlhbCBpc3N1ZXMgYWRkcmVzc2VkIG9yIGludHJvZHVjZWQgYnkgdGhpcyBwYXRjaCByZWxhdGUgZXhjbHVzaXZlbHkgdG8gdGVhcmRvd24gb3JkZXJpbmcsIHN5bmNocm9uaXphdGlvbiwgbG9ja2luZywgYW5kIHVzZS1hZnRlci1mcmVlLCBhbGwgb2Ygd2hpY2ggYXJlIGNvdmVyZWQgYnkgc3RhbmRhcmQgc2FuaXRpemVycyAoS0FTQU4sIExPQ0tERVApLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHBlcm5ldCBuYW1lc3BhY2UgZXhpdCBjYWxsYmFja3MgaW4gQUZfUlhSUEMgKHNwbGl0dGluZyB0ZWFyZG93biBiZXR3ZWVuIHByZV9leGl0IGFuZCBleGl0KSBhbmQgYWRkcyBzcGlubG9jayBzeW5jaHJvbml6YXRpb24gKHBlZXJfaGFzaF9sb2NrKSBpbiByeHJwY19kZXN0cm95X2FsbF9wZWVycygpIHRvIHByb3RlY3QgYWdhaW5zdCBjb25jdXJyZW50IHVubGlua2luZyBhbmQgdXNlLWFmdGVyLWZyZWUuXG5cbk5vIG5ldyBtZW1vcnkgYWxsb2NhdGlvbnMsIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGUgdXNlcywgdXNlci1jb3B5IG9wZXJhdGlvbnMsIG9yIGFsdGVyZWQgZGF0YS1wYXJzaW5nL2J1ZmZlci1sZW5ndGggbG9naWMgYXJlIGludHJvZHVjZWQuIFRoZSBwb3RlbnRpYWwgaXNzdWVzIGFkZHJlc3NlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoaXMgcGF0Y2ggcmVsYXRlIGV4Y2x1c2l2ZWx5IHRvIHRlYXJkb3duIG9yZGVyaW5nLCBzeW5jaHJvbml6YXRpb24sIGxvY2tpbmcsIGFuZCB1c2UtYWZ0ZXItZnJlZSwgYWxsIG9mIHdoaWNoIGFyZSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIHNhbml0aXplcnMgKEtBU0FOLCBMT0NLREVQKS4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMDhUMDI6NTk6MTAuNDgxMTk3MTk5WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDk5NTI5Nzk5OTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQUZfUlhSUENcIixcbiAgICBcIklORVRcIixcbiAgICBcIk5FVF9OU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInJ4cnBjX3ByZV9leGl0X25ldFwiLFxuICAgIFwicnhycGNfZXhpdF9uZXRcIixcbiAgICBcInJ4cnBjX2Rlc3Ryb3lfYWxsX3BlZXJzXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgcGVybmV0IG5hbWVzcGFjZSBleGl0IGNhbGxiYWNrcyBpbiBBRl9SWFJQQyAoc3BsaXR0aW5nIHRlYXJkb3duIGJldHdlZW4gcHJlX2V4aXQgYW5kIGV4aXQpIGFuZCBhZGRzIHNwaW5sb2NrIHN5bmNocm9uaXphdGlvbiAocGVlcl9oYXNoX2xvY2spIGluIHJ4cnBjX2Rlc3Ryb3lfYWxsX3BlZXJzKCkgdG8gcHJvdGVjdCBhZ2FpbnN0IGNvbmN1cnJlbnQgdW5saW5raW5nIGFuZCB1c2UtYWZ0ZXItZnJlZS5cXG5cXG5ObyBuZXcgbWVtb3J5IGFsbG9jYXRpb25zLCB1bmluaXRpYWxpemVkIHZhcmlhYmxlIHVzZXMsIHVzZXItY29weSBvcGVyYXRpb25zLCBvciBhbHRlcmVkIGRhdGEtcGFyc2luZy9idWZmZXItbGVuZ3RoIGxvZ2ljIGFyZSBpbnRyb2R1Y2VkLiBUaGUgcG90ZW50aWFsIGlzc3VlcyBhZGRyZXNzZWQgb3IgaW50cm9kdWNlZCBieSB0aGlzIHBhdGNoIHJlbGF0ZSBleGNsdXNpdmVseSB0byB0ZWFyZG93biBvcmRlcmluZywgc3luY2hyb25pemF0aW9uLCBsb2NraW5nLCBhbmQgdXNlLWFmdGVyLWZyZWUsIGFsbCBvZiB3aGljaCBhcmUgY292ZXJlZCBieSBzdGFuZGFyZCBzYW5pdGl6ZXJzIChLQVNBTiwgTE9DS0RFUCkuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIFJ4UlBDIG5ldHdvcmsgbmFtZXNwYWNlIHRlYXJkb3duIGxpZmVjeWNsZSBieSBzcGxpdHRpbmcgbmV0bnMgY2xlYW51cCBpbnRvIHByZV9leGl0IGFuZCBleGl0IGhhbmRsZXJzIChyeHJwY19wcmVfZXhpdF9uZXQgYW5kIHJ4cnBjX2V4aXRfbmV0KSBhbmQgYWRkcyBsb2NraW5nIChwZWVyX2hhc2hfbG9jaykgaW4gcnhycGNfZGVzdHJveV9hbGxfcGVlcnMgdG8gcHJldmVudCB1c2UtYWZ0ZXItZnJlZSBjb25kaXRpb25zIGR1cmluZyBwZWVyIGhhc2ggdGFibGUgdHJhdmVyc2FsLiBUaGVzZSBjaGFuZ2VzIHRvdWNoIHJlYWNoYWJsZSBuZXR3b3JraW5nIGNvZGUgdGhhdCBpcyBleGVyY2lzZWQgZHVyaW5nIG5ldG5zIGxpZmVjeWNsZSBhbmQgQUZfUlhSUEMgc29ja2V0IG9wZXJhdGlvbnMsIG1ha2luZyBpdCB3b3J0aHdoaWxlIHRvIGZ1enouXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDAyOjU5OjEwLjQ4MTIwNTMxOVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQyNzQ1NjgxMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGUyNWQyMTljOThkNzVjZjc2ODQ4YzE2OWMxYmYzZGQxZmRhY2MxNjBcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFR1ZSBTZXAgOCAwMjo1OTowOCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9uZXQvcnhycGMvbmV0X25zLmMgYi9uZXQvcnhycGMvbmV0X25zLmNcXG5pbmRleCA5YTk4MzQxNDVlODFlLi4xNjkxMTY3MzUzNjYzIDEwMDY0NFxcbi0tLSBhL25ldC9yeHJwYy9uZXRfbnMuY1xcbisrKyBiL25ldC9yeHJwYy9uZXRfbnMuY1xcbkBAIC05NywxMCArOTcsNyBAQCBzdGF0aWMgX19uZXRfaW5pdCBpbnQgcnhycGNfaW5pdF9uZXQoc3RydWN0IG5ldCAqbmV0KVxcbiBcXHRyZXR1cm4gcmV0O1xcbiB9XFxuIFxcbi0vKlxcbi0gKiBDbGVhbiB1cCBhIHBlci1uZXR3b3JrIG5hbWVzcGFjZSByZWNvcmQuXFxuLSAqL1xcbi1zdGF0aWMgX19uZXRfZXhpdCB2b2lkIHJ4cnBjX2V4aXRfbmV0KHN0cnVjdCBuZXQgKm5ldClcXG4rc3RhdGljIF9fbmV0X2V4aXQgdm9pZCByeHJwY19wcmVfZXhpdF9uZXQoc3RydWN0IG5ldCAqbmV0KVxcbiB7XFxuIFxcdHN0cnVjdCByeHJwY19uZXQgKnJ4bmV0ID0gcnhycGNfbmV0KG5ldCk7XFxuIFxcbkBAIC0xMTEsMTQgKzEwOCwyNCBAQCBzdGF0aWMgX19uZXRfZXhpdCB2b2lkIHJ4cnBjX2V4aXRfbmV0KHN0cnVjdCBuZXQgKm5ldClcXG4gXFx0dGltZXJfZGVsZXRlX3N5bmMoXFx1MDAyNnJ4bmV0LVxcdTAwM2VwZWVyX2tlZXBhbGl2ZV90aW1lcik7XFxuIFxcdHJ4cnBjX2Rlc3Ryb3lfYWxsX2NhbGxzKHJ4bmV0KTtcXG4gXFx0cnhycGNfZGVzdHJveV9hbGxfY29ubmVjdGlvbnMocnhuZXQpO1xcbit9XFxuK1xcbisvKlxcbisgKiBDbGVhbiB1cCBhIHBlci1uZXR3b3JrIG5hbWVzcGFjZSByZWNvcmQuXFxuKyAqL1xcbitzdGF0aWMgX19uZXRfZXhpdCB2b2lkIHJ4cnBjX2V4aXRfbmV0KHN0cnVjdCBuZXQgKm5ldClcXG4re1xcbitcXHRzdHJ1Y3QgcnhycGNfbmV0ICpyeG5ldCA9IHJ4cnBjX25ldChuZXQpO1xcbitcXG4gXFx0cnhycGNfZGVzdHJveV9hbGxfcGVlcnMocnhuZXQpO1xcbiBcXHRyeHJwY19kZXN0cm95X2FsbF9sb2NhbHMocnhuZXQpO1xcbiBcXHRwcm9jX3JlbW92ZShyeG5ldC1cXHUwMDNlcHJvY19uZXQpO1xcbiB9XFxuIFxcbiBzdHJ1Y3QgcGVybmV0X29wZXJhdGlvbnMgcnhycGNfbmV0X29wcyA9IHtcXG4tXFx0LmluaXRcXHQ9IHJ4cnBjX2luaXRfbmV0LFxcbi1cXHQuZXhpdFxcdD0gcnhycGNfZXhpdF9uZXQsXFxuLVxcdC5pZFxcdD0gXFx1MDAyNnJ4cnBjX25ldF9pZCxcXG4tXFx0LnNpemVcXHQ9IHNpemVvZihzdHJ1Y3QgcnhycGNfbmV0KSxcXG4rXFx0LmluaXRcXHRcXHQ9IHJ4cnBjX2luaXRfbmV0LFxcbitcXHQucHJlX2V4aXRcXHQ9IHJ4cnBjX3ByZV9leGl0X25ldCxcXG4rXFx0LmV4aXRcXHRcXHQ9IHJ4cnBjX2V4aXRfbmV0LFxcbitcXHQuaWRcXHRcXHQ9IFxcdTAwMjZyeHJwY19uZXRfaWQsXFxuK1xcdC5zaXplXFx0XFx0PSBzaXplb2Yoc3RydWN0IHJ4cnBjX25ldCksXFxuIH07XFxuZGlmZiAtLWdpdCBhL25ldC9yeHJwYy9wZWVyX29iamVjdC5jIGIvbmV0L3J4cnBjL3BlZXJfb2JqZWN0LmNcXG5pbmRleCBmYTlhNDA2ZTExNjgzLi5mYWEyOTgzNjM4YjJiIDEwMDY0NFxcbi0tLSBhL25ldC9yeHJwYy9wZWVyX29iamVjdC5jXFxuKysrIGIvbmV0L3J4cnBjL3BlZXJfb2JqZWN0LmNcXG5AQCAtNDU0LDYgKzQ1NCwxMiBAQCB2b2lkIHJ4cnBjX2Rlc3Ryb3lfYWxsX3BlZXJzKHN0cnVjdCByeHJwY19uZXQgKnJ4bmV0KVxcbiBcXHRzdHJ1Y3QgcnhycGNfcGVlciAqcGVlcjtcXG4gXFx0aW50IGk7XFxuIFxcbitcXHQvKlxcbitcXHQgKiBQcmV2ZW50IHVzZS1hZnRlci1mcmVlIGlmIGEgcGVlciBpcyBjb25jdXJyZW50bHkgdW5saW5rZWQgZnJvbSB0aGVcXG4rXFx0ICogaGFzaCB0YWJsZSBhbmQgZnJlZWQgdmlhIFJDVSBkdXJpbmcgaXRlcmF0aW9uLlxcbitcXHQgKi9cXG4rXFx0c3Bpbl9sb2NrX2JoKFxcdTAwMjZyeG5ldC1cXHUwMDNlcGVlcl9oYXNoX2xvY2spO1xcbitcXG4gXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIEhBU0hfU0laRShyeG5ldC1cXHUwMDNlcGVlcl9oYXNoKTsgaSsrKSB7XFxuIFxcdFxcdGlmIChobGlzdF9lbXB0eShcXHUwMDI2cnhuZXQtXFx1MDAzZXBlZXJfaGFzaFtpXSkpXFxuIFxcdFxcdFxcdGNvbnRpbnVlO1xcbkBAIC00NjUsNiArNDcxLDggQEAgdm9pZCByeHJwY19kZXN0cm95X2FsbF9wZWVycyhzdHJ1Y3QgcnhycGNfbmV0ICpyeG5ldClcXG4gXFx0XFx0XFx0ICAgICAgIFxcdTAwMjZwZWVyLVxcdTAwM2VzcngudHJhbnNwb3J0KTtcXG4gXFx0XFx0fVxcbiBcXHR9XFxuK1xcbitcXHRzcGluX3VubG9ja19iaChcXHUwMDI2cnhuZXQtXFx1MDAzZXBlZXJfaGFzaF9sb2NrKTtcXG4gfVxcbiBcXG4gLyoqXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDAyOjU5OjExLjkwOTIyMDQ5MVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6Mjg2MTgwMzQxODEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQUZfUlhSUENcIixcbiAgICBcIklORVRcIixcbiAgICBcIk5FVF9OU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInJ4cnBjX3ByZV9leGl0X25ldFwiLFxuICAgIFwicnhycGNfZXhpdF9uZXRcIixcbiAgICBcInJ4cnBjX2Rlc3Ryb3lfYWxsX3BlZXJzXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIFJ4UlBDIG5ldHdvcmsgbmFtZXNwYWNlIHRlYXJkb3duIGxpZmVjeWNsZSBieSBzcGxpdHRpbmcgbmV0bnMgY2xlYW51cCBpbnRvIHByZV9leGl0IGFuZCBleGl0IGhhbmRsZXJzIChyeHJwY19wcmVfZXhpdF9uZXQgYW5kIHJ4cnBjX2V4aXRfbmV0KSBhbmQgYWRkcyBsb2NraW5nIChwZWVyX2hhc2hfbG9jaykgaW4gcnhycGNfZGVzdHJveV9hbGxfcGVlcnMgdG8gcHJldmVudCB1c2UtYWZ0ZXItZnJlZSBjb25kaXRpb25zIGR1cmluZyBwZWVyIGhhc2ggdGFibGUgdHJhdmVyc2FsLiBUaGVzZSBjaGFuZ2VzIHRvdWNoIHJlYWNoYWJsZSBuZXR3b3JraW5nIGNvZGUgdGhhdCBpcyBleGVyY2lzZWQgZHVyaW5nIG5ldG5zIGxpZmVjeWNsZSBhbmQgQUZfUlhSUEMgc29ja2V0IG9wZXJhdGlvbnMsIG1ha2luZyBpdCB3b3J0aHdoaWxlIHRvIGZ1enouXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3NcbnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4xLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncyxcbmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuXG5cbi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6XG4gIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWRcbiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS5cbiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLFxuICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuXG5cbi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgXCJOTyBGVU5DVElPTkFMIENIQU5HRVwiIChORkNJKSBPUiBcIlJFRkFDVE9SSU5HXCIgQ0xBSU1TOlxuICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzIFwiY2xlYW51cHNcIiwgXCJyZWZhY3RvcmluZ3NcIiwgb3Igc3RhdGVcbiAgXCJObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZFwiLiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS5cbiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50XG4gIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLlxuICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLlxuXG4tIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOlxuICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosXG4gIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLlxuICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyXG4gIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczpcblxuLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOlxuICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy5cbiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLylcbiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuXG4gICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHNcbiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLlxuICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy5cbi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOlxuICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6XG4gICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nXG4gICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuXG4gICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6XG4tIENvcmUgU3Vic3lzdGVtczpcbiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksXG4gICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLlxuLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6XG4gICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLlxuLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6XG4gICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLlxuLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOlxuICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOlxuXG4tIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzpcbiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXNcbiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHRcbiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuXG4gIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyBcImZvY3VzZWRcIixcbiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLlxuXG4tIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzpcbiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzXG4gIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LlxuXG4tIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKTpcbiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFja1xuICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy5cbiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyXG4gIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3Ncbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5JZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOlxuLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuLSBDaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLlxuLSBTdHJpcCBhbnkgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgZTI1ZDIxOWM5OGQ3NWNmNzY4NDhjMTY5YzFiZjNkZDFmZGFjYzE2MFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgU2VwIDggMDI6NTk6MDggMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvcnhycGMvbmV0X25zLmMgYi9uZXQvcnhycGMvbmV0X25zLmNcbmluZGV4IDlhOTgzNDE0NWU4MWUuLjE2OTExNjczNTM2NjMgMTAwNjQ0XG4tLS0gYS9uZXQvcnhycGMvbmV0X25zLmNcbisrKyBiL25ldC9yeHJwYy9uZXRfbnMuY1xuQEAgLTk3LDEwICs5Nyw3IEBAIHN0YXRpYyBfX25ldF9pbml0IGludCByeHJwY19pbml0X25ldChzdHJ1Y3QgbmV0ICpuZXQpXG4gXHRyZXR1cm4gcmV0O1xuIH1cbiBcbi0vKlxuLSAqIENsZWFuIHVwIGEgcGVyLW5ldHdvcmsgbmFtZXNwYWNlIHJlY29yZC5cbi0gKi9cbi1zdGF0aWMgX19uZXRfZXhpdCB2b2lkIHJ4cnBjX2V4aXRfbmV0KHN0cnVjdCBuZXQgKm5ldClcbitzdGF0aWMgX19uZXRfZXhpdCB2b2lkIHJ4cnBjX3ByZV9leGl0X25ldChzdHJ1Y3QgbmV0ICpuZXQpXG4ge1xuIFx0c3RydWN0IHJ4cnBjX25ldCAqcnhuZXQgPSByeHJwY19uZXQobmV0KTtcbiBcbkBAIC0xMTEsMTQgKzEwOCwyNCBAQCBzdGF0aWMgX19uZXRfZXhpdCB2b2lkIHJ4cnBjX2V4aXRfbmV0KHN0cnVjdCBuZXQgKm5ldClcbiBcdHRpbWVyX2RlbGV0ZV9zeW5jKFx1MDAyNnJ4bmV0LVx1MDAzZXBlZXJfa2VlcGFsaXZlX3RpbWVyKTtcbiBcdHJ4cnBjX2Rlc3Ryb3lfYWxsX2NhbGxzKHJ4bmV0KTtcbiBcdHJ4cnBjX2Rlc3Ryb3lfYWxsX2Nvbm5lY3Rpb25zKHJ4bmV0KTtcbit9XG4rXG4rLypcbisgKiBDbGVhbiB1cCBhIHBlci1uZXR3b3JrIG5hbWVzcGFjZSByZWNvcmQuXG4rICovXG4rc3RhdGljIF9fbmV0X2V4aXQgdm9pZCByeHJwY19leGl0X25ldChzdHJ1Y3QgbmV0ICpuZXQpXG4re1xuK1x0c3RydWN0IHJ4cnBjX25ldCAqcnhuZXQgPSByeHJwY19uZXQobmV0KTtcbitcbiBcdHJ4cnBjX2Rlc3Ryb3lfYWxsX3BlZXJzKHJ4bmV0KTtcbiBcdHJ4cnBjX2Rlc3Ryb3lfYWxsX2xvY2FscyhyeG5ldCk7XG4gXHRwcm9jX3JlbW92ZShyeG5ldC1cdTAwM2Vwcm9jX25ldCk7XG4gfVxuIFxuIHN0cnVjdCBwZXJuZXRfb3BlcmF0aW9ucyByeHJwY19uZXRfb3BzID0ge1xuLVx0LmluaXRcdD0gcnhycGNfaW5pdF9uZXQsXG4tXHQuZXhpdFx0PSByeHJwY19leGl0X25ldCxcbi1cdC5pZFx0PSBcdTAwMjZyeHJwY19uZXRfaWQsXG4tXHQuc2l6ZVx0PSBzaXplb2Yoc3RydWN0IHJ4cnBjX25ldCksXG4rXHQuaW5pdFx0XHQ9IHJ4cnBjX2luaXRfbmV0LFxuK1x0LnByZV9leGl0XHQ9IHJ4cnBjX3ByZV9leGl0X25ldCxcbitcdC5leGl0XHRcdD0gcnhycGNfZXhpdF9uZXQsXG4rXHQuaWRcdFx0PSBcdTAwMjZyeHJwY19uZXRfaWQsXG4rXHQuc2l6ZVx0XHQ9IHNpemVvZihzdHJ1Y3QgcnhycGNfbmV0KSxcbiB9O1xuZGlmZiAtLWdpdCBhL25ldC9yeHJwYy9wZWVyX29iamVjdC5jIGIvbmV0L3J4cnBjL3BlZXJfb2JqZWN0LmNcbmluZGV4IGZhOWE0MDZlMTE2ODMuLmZhYTI5ODM2MzhiMmIgMTAwNjQ0XG4tLS0gYS9uZXQvcnhycGMvcGVlcl9vYmplY3QuY1xuKysrIGIvbmV0L3J4cnBjL3BlZXJfb2JqZWN0LmNcbkBAIC00NTQsNiArNDU0LDEyIEBAIHZvaWQgcnhycGNfZGVzdHJveV9hbGxfcGVlcnMoc3RydWN0IHJ4cnBjX25ldCAqcnhuZXQpXG4gXHRzdHJ1Y3QgcnhycGNfcGVlciAqcGVlcjtcbiBcdGludCBpO1xuIFxuK1x0LypcbitcdCAqIFByZXZlbnQgdXNlLWFmdGVyLWZyZWUgaWYgYSBwZWVyIGlzIGNvbmN1cnJlbnRseSB1bmxpbmtlZCBmcm9tIHRoZVxuK1x0ICogaGFzaCB0YWJsZSBhbmQgZnJlZWQgdmlhIFJDVSBkdXJpbmcgaXRlcmF0aW9uLlxuK1x0ICovXG4rXHRzcGluX2xvY2tfYmgoXHUwMDI2cnhuZXQtXHUwMDNlcGVlcl9oYXNoX2xvY2spO1xuK1xuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgSEFTSF9TSVpFKHJ4bmV0LVx1MDAzZXBlZXJfaGFzaCk7IGkrKykge1xuIFx0XHRpZiAoaGxpc3RfZW1wdHkoXHUwMDI2cnhuZXQtXHUwMDNlcGVlcl9oYXNoW2ldKSlcbiBcdFx0XHRjb250aW51ZTtcbkBAIC00NjUsNiArNDcxLDggQEAgdm9pZCByeHJwY19kZXN0cm95X2FsbF9wZWVycyhzdHJ1Y3QgcnhycGNfbmV0ICpyeG5ldClcbiBcdFx0XHQgICAgICAgXHUwMDI2cGVlci1cdTAwM2VzcngudHJhbnNwb3J0KTtcbiBcdFx0fVxuIFx0fVxuK1xuK1x0c3Bpbl91bmxvY2tfYmgoXHUwMDI2cnhuZXQtXHUwMDNlcGVlcl9oYXNoX2xvY2spO1xuIH1cbiBcbiAvKipcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDAyOjU5OjExLjkwOTIyMjQzMVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjkxMDAzODUwNTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSByeHJwYyBQYXRjaCBmb3IgYW1kNjQqKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXZlIGludG8gdGhpcyBwYXRjaCB0YXJnZXRpbmcgdGhlIGFtZDY0IGFyY2hpdGVjdHVyZS4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IHBvaW50cyB0byBtb2RpZmljYXRpb25zIGluIGBuZXQvcnhycGMvbmV0X25zLmNgIGFuZCBgbmV0L3J4cnBjL3BlZXJfb2JqZWN0LmNgLiBJdCBsb29rcyBsaWtlIHdlJ3JlIGRlYWxpbmcgd2l0aCBzb21lIG5hbWVzcGFjZSBjbGVhbnVwIGFuZCBwZWVyIG1hbmFnZW1lbnQgY2hhbmdlcyB3aXRoaW4gdGhlIHJ4cnBjIHN1YnN5c3RlbS5cblxuU3BlY2lmaWNhbGx5LCBpbiBgbmV0X25zLmNgLCB0aGUgcmVmYWN0b3JpbmcgaXMgaW50ZXJlc3RpbmcuIFNwbGl0dGluZyBgcnhycGNfZXhpdF9uZXRgIGludG8gYC5wcmVfZXhpdGAgYW5kIGAuZXhpdGAgc3VnZ2VzdHMgYSBtb3JlIGdyYW51bGFyIGFwcHJvYWNoIHRvIG5ldHdvcmsgbmFtZXNwYWNlIHRlYXJkb3duLiAgYHJ4cnBjX3ByZV9leGl0X25ldGAgaXMgbm93IHJlc3BvbnNpYmxlIGZvciBzZXR0aW5nIGByeG5ldC1cdTAwM2VsaXZlID0gZmFsc2VgLCBzeW5jaW5nIHRpbWVycywgYW5kIGRlc3Ryb3lpbmcgY2FsbHMgYW5kIGNvbm5lY3Rpb25zLiBUaGF0J3MgYSByZWFzb25hYmxlIG9yZGVyaW5nLiBUaGUgc2Vjb25kIHBhcnQsIGByeHJwY19leGl0X25ldGAsIGhhbmRsZXMgcGVlciwgbG9jYWwgZW5kcG9pbnQgZGVzdHJ1Y3Rpb24sIGFuZCBwcm9jZnMgY2xlYW51cC4gU291bmRzIGxvZ2ljYWwgdG8gbWUuICBUaGlzIHNlcGFyYXRpb24gbGlrZWx5IGFpbXMgZm9yIGJldHRlciBzeW5jaHJvbml6YXRpb24gb3IgdGhlIG5lZWQgdG8gb3JkZXIgY2xlYW51cCBhY3Rpb25zLlxuXG5PdmVyIGluIGBwZWVyX29iamVjdC5jYCwgdGhlIGFkZGl0aW9uIG9mIGBzcGluX2xvY2tfYmhgIGFuZCBgc3Bpbl91bmxvY2tfYmhgIGFyb3VuZCB0aGUgYHJ4bmV0LVx1MDAzZXBlZXJfaGFzaF9sb2NrYCB3aXRoaW4gYHJ4cnBjX2Rlc3Ryb3lfYWxsX3BlZXJzYCBpcyBhIGNsZWFyIGluZGljYXRpb24gb2YgYSBjb25jdXJyZW5jeSBjb25jZXJuLiBJdCBzZWVtcyB3ZSBhcmUgdHJ5aW5nIHRvIGJldHRlciBwcm90ZWN0IHRoZSBwZWVyIGhhc2ggdGFibGUgZHVyaW5nIGRlc3RydWN0aW9uLCBwb3NzaWJseSB0byBhdm9pZCByYWNlIGNvbmRpdGlvbnMgd2hlbiBkZXN0cm95aW5nIHBlZXJzLlxuXG5Ob3csIHRvIGdldCBhIHNvbGlkIHVuZGVyc3RhbmRpbmcgb2YgdGhlIGltcGxpY2F0aW9ucywgSSBuZWVkIHRvIGNoZWNrIHRoZSBkZXBlbmRlbmNpZXMgYW5kIHRoZSBjb250ZXh0IG9mIHRoZXNlIGNoYW5nZXMuIEknbGwgbmVlZCB0byB1c2UgYGdyZXBgIG9yIGRpdmUgaW50byB0aGUgY29kZSBkaXJlY3RseSB0byBpZGVudGlmeSBhbnkgY29uZmlndXJhdGlvbiBvcHRpb25zIHJlcXVpcmVkIGZvciB0aGlzIHBhdGNoIHRvIHdvcmssIGFuZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgbW9kaWZpZWQgZnVuY3Rpb25zIGFyZSBjYWxsZWQgYW5kIHdoYXQgb3RoZXIgZnVuY3Rpb25zIHRoZXkgaW50ZXJhY3Qgd2l0aC4gIEkgd2FudCB0byBzZWUgd2hhdCB0cmlnZ2VycyB0aGUgbmFtZXNwYWNlIGV4aXQgcHJvY2Vzcy4gVGhhdCdzIHdoZXJlIHRoZSByZWFsIHN0b3J5IGxpZXMuIFRoaXMgbG9va3MgbGlrZSBhIG5lY2Vzc2FyeSBjbGVhbnVwIHRvIGJldHRlciBoYW5kbGUgZGVzdHJ1Y3Rpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM1NTgsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOTcsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwMjo1OToyMS4wMDk2MDkwOTVaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA5NDI5MDgyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkFGX1JYUlBDXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9yeHJwY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvcnhycGMvLmt1bml0Y29uZmlnPTM9Q09ORklHX0lORVQ9eVxcbm5ldC9yeHJwYy8ua3VuaXRjb25maWc6NDpDT05GSUdfQUZfUlhSUEM9eVxcbm5ldC9yeHJwYy8ua3VuaXRjb25maWctNS1DT05GSUdfUlhLQUQ9eVxcbm5ldC9yeHJwYy8ua3VuaXRjb25maWc6NjpDT05GSUdfQUZfUlhSUENfS1VOSVRfVEVTVD15XFxuLS1cXG5uZXQvcnhycGMvS2NvbmZpZy01LVxcbm5ldC9yeHJwYy9LY29uZmlnOjY6Y29uZmlnIEFGX1JYUlBDXFxubmV0L3J4cnBjL0tjb25maWctNy1cXHR0cmlzdGF0ZSBcXFwiUnhSUEMgc2Vzc2lvbiBzb2NrZXRzXFxcIlxcbi0tXFxubmV0L3J4cnBjL0tjb25maWctMjQtXFxubmV0L3J4cnBjL0tjb25maWc6MjU6aWYgQUZfUlhSUENcXG5uZXQvcnhycGMvS2NvbmZpZy0yNi1cXG5uZXQvcnhycGMvS2NvbmZpZzoyNzpjb25maWcgQUZfUlhSUENfSVBWNlxcbm5ldC9yeHJwYy9LY29uZmlnLTI4LVxcdGJvb2wgXFxcIklQdjYgc3VwcG9ydCBmb3IgUnhSUENcXFwiXFxuLS1cXG5uZXQvcnhycGMvS2NvbmZpZy0zMC1cXHRoZWxwXFxubmV0L3J4cnBjL0tjb25maWc6MzE6XFx0ICBTYXkgWSBoZXJlIHRvIGFsbG93IEFGX1JYUlBDIHRvIHVzZSBJUFY2IFVEUCBhcyB3ZWxsIGFzIElQVjQgVURQIGFzXFxubmV0L3J4cnBjL0tjb25maWctMzItXFx0ICBpdHMgbmV0d29yayB0cmFuc3BvcnQuXFxubmV0L3J4cnBjL0tjb25maWctMzMtXFxubmV0L3J4cnBjL0tjb25maWc6MzQ6Y29uZmlnIEFGX1JYUlBDX0lOSkVDVF9MT1NTXFxubmV0L3J4cnBjL0tjb25maWctMzUtXFx0Ym9vbCBcXFwiSW5qZWN0IHBhY2tldCBsb3NzIGludG8gUnhSUEMgcGFja2V0IHN0cmVhbVxcXCJcXG4tLVxcbm5ldC9yeHJwYy9LY29uZmlnLTM5LVxcbm5ldC9yeHJwYy9LY29uZmlnOjQwOmNvbmZpZyBBRl9SWFJQQ19JTkpFQ1RfUlhfREVMQVlcXG5uZXQvcnhycGMvS2NvbmZpZy00MS1cXHRib29sIFxcXCJJbmplY3QgZGVsYXkgaW50byBwYWNrZXQgcmVjZXB0aW9uXFxcIlxcbi0tXFxubmV0L3J4cnBjL0tjb25maWctNDktXFxubmV0L3J4cnBjL0tjb25maWc6NTA6Y29uZmlnIEFGX1JYUlBDX0RFQlVHXFxubmV0L3J4cnBjL0tjb25maWctNTEtXFx0Ym9vbCBcXFwiUnhSUEMgZHluYW1pYyBkZWJ1Z2dpbmdcXFwiXFxuLS1cXG5uZXQvcnhycGMvS2NvbmZpZz01OD1jb25maWcgUlhLQURcXG4tLVxcbm5ldC9yeHJwYy9LY29uZmlnLTYwLVxcdGhlbHBcXG5uZXQvcnhycGMvS2NvbmZpZzo2MTpcXHQgIFByb3ZpZGUga2VyYmVyb3MgNCBhbmQgQUZTIGthc2VydmVyIHNlY3VyaXR5IGhhbmRsaW5nIGZvciBBRl9SWFJQQ1xcbm5ldC9yeHJwYy9LY29uZmlnLTYyLVxcdCAgdGhyb3VnaCB0aGUgdXNlIG9mIHRoZSBrZXkgcmV0ZW50aW9uIHNlcnZpY2UuXFxuLS1cXG5uZXQvcnhycGMvS2NvbmZpZz04OT1jb25maWcgUlhQRVJGXFxuLS1cXG5uZXQvcnhycGMvS2NvbmZpZy05NS1cXG5uZXQvcnhycGMvS2NvbmZpZzo5Njpjb25maWcgQUZfUlhSUENfS1VOSVRfVEVTVFxcbm5ldC9yeHJwYy9LY29uZmlnLTk3LVxcdHRyaXN0YXRlIFxcXCJSeFJQQyBjcnlwdG8gS1VuaXQgdGVzdFxcXCIgaWYgIUtVTklUX0FMTF9URVNUU1xcbi0tXFxubmV0L3J4cnBjL01ha2VmaWxlLTUtXFxubmV0L3J4cnBjL01ha2VmaWxlOjY6b2JqLSQoQ09ORklHX0FGX1JYUlBDKSArPSByeHJwYy5vXFxubmV0L3J4cnBjL01ha2VmaWxlLTctXFxuLS1cXG5uZXQvcnhycGMvYWZfcnhycGMuYy0xLS8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9yLWxhdGVyXFxubmV0L3J4cnBjL2FmX3J4cnBjLmM6MjovKiBBRl9SWFJQQyBpbXBsZW1lbnRhdGlvblxcbm5ldC9yeHJwYy9hZl9yeHJwYy5jLTMtICpcXG4tLVxcbm5ldC9yeHJwYy9hZl9yeHJwYy5jPTc3PXN0YXRpYyBpbnQgcnhycGNfdmFsaWRhdGVfYWRkcmVzcyhzdHJ1Y3QgcnhycGNfc29jayAqcngsXFxuLS1cXG5uZXQvcnhycGMvYWZfcnhycGMuYy04NS1cXG5uZXQvcnhycGMvYWZfcnhycGMuYzo4NjpcXHRpZiAoc3J4LVxcdTAwM2VzcnhfZmFtaWx5ICE9IEFGX1JYUlBDKVxcbm5ldC9yeHJwYy9hZl9yeHJwYy5jLTg3LVxcdFxcdHJldHVybiAtRUFGTk9TVVBQT1JUO1xcbi0tXFxubmV0L3J4cnBjL2FmX3J4cnBjLmMtMTA2LVxcbm5ldC9yeHJwYy9hZl9yeHJwYy5jOjEwNzojaWZkZWYgQ09ORklHX0FGX1JYUlBDX0lQVjZcXG5uZXQvcnhycGMvYWZfcnhycGMuYy0xMDgtXFx0Y2FzZSBBRl9JTkVUNjpcXG4tLVxcbm5ldC9yeHJwYy9hZl9yeHJwYy5jPTUzOD1zdGF0aWMgaW50IHJ4cnBjX3NlbmRtc2coc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbSwgc2l6ZV90IGxlbilcXG4tLVxcbm5ldC9yeHJwYy9hZl9yeHJwYy5jLTU2MS1cXHRjYXNlIFJYUlBDX0NMSUVOVF9VTkJPVU5EOlxcbm5ldC9yeHJwYy9hZl9yeHJwYy5jOjU2MjpcXHRcXHRyeC1cXHUwMDNlc3J4LnNyeF9mYW1pbHkgPSBBRl9SWFJQQztcXG5uZXQvcnhycGMvYWZfcnhycGMuYy01NjMtXFx0XFx0cngtXFx1MDAzZXNyeC5zcnhfc2VydmljZSA9IDA7XFxuLS1cXG5uZXQvcnhycGMvYWZfcnhycGMuYy01NjktXFx0XFx0XFx0YnJlYWs7XFxubmV0L3J4cnBjL2FmX3J4cnBjLmM6NTcwOiNpZmRlZiBDT05GSUdfQUZfUlhSUENfSVBWNlxcbm5ldC9yeHJwYy9hZl9yeHJwYy5jLTU3MS1cXHRcXHRjYXNlIEFGX0lORVQ2Olxcbi0tXFxubmV0L3J4cnBjL2FmX3J4cnBjLmM9ODAyPXN0YXRpYyBpbnQgcnhycGNfY3JlYXRlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNvY2tldCAqc29jaywgaW50IHByb3RvY29sLFxcbi0tXFxubmV0L3J4cnBjL2FmX3J4cnBjLmMtODEyLVxcdGlmIChwcm90b2NvbCAhPSBQRl9JTkVUIFxcdTAwMjZcXHUwMDI2XFxubmV0L3J4cnBjL2FmX3J4cnBjLmM6ODEzOlxcdCAgICBJU19FTkFCTEVEKENPTkZJR19BRl9SWFJQQ19JUFY2KSBcXHUwMDI2XFx1MDAyNiBwcm90b2NvbCAhPSBQRl9JTkVUNilcXG5uZXQvcnhycGMvYWZfcnhycGMuYy04MTQtXFx0XFx0cmV0dXJuIC1FUFJPVE9OT1NVUFBPUlQ7XFxuLS1cXG5uZXQvcnhycGMvYXItaW50ZXJuYWwuaC0xLS8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9yLWxhdGVyICovXFxubmV0L3J4cnBjL2FyLWludGVybmFsLmg6MjovKiBBRl9SWFJQQyBpbnRlcm5hbCBkZWZpbml0aW9uc1xcbm5ldC9yeHJwYy9hci1pbnRlcm5hbC5oLTMtICpcXG4tLVxcbm5ldC9yeHJwYy9hci1pbnRlcm5hbC5oPTI2NT1zdHJ1Y3QgcnhycGNfc2VjdXJpdHkge1xcbi0tXFxubmV0L3J4cnBjL2FyLWludGVybmFsLmgtMzQzLSAqIFJ4UlBDIGxvY2FsIHRyYW5zcG9ydCBlbmRwb2ludCBkZXNjcmlwdGlvblxcbm5ldC9yeHJwYy9hci1pbnRlcm5hbC5oOjM0NDogKiAtIG93bmVkIGJ5IGEgc2luZ2xlIEFGX1JYUlBDIHNvY2tldFxcbm5ldC9yeHJwYy9hci1pbnRlcm5hbC5oLTM0NS0gKiAtIHBvaW50ZWQgdG8gYnkgdHJhbnNwb3J0IHNvY2tldCBzdHJ1Y3Qgc2tfdXNlcl9kYXRhXFxuLS1cXG5uZXQvcnhycGMvYXItaW50ZXJuYWwuaD0zNDc9c3RydWN0IHJ4cnBjX2xvY2FsIHtcXG4tLVxcbm5ldC9yeHJwYy9hci1pbnRlcm5hbC5oLTM1OC1cXHRzdHJ1Y3QgcnhycGNfc29ja1xcdCpzZXJ2aWNlO1xcdC8qIFNlcnZpY2UocykgbGlzdGVuaW5nIG9uIHRoaXMgZW5kcG9pbnQgKi9cXG5uZXQvcnhycGMvYXItaW50ZXJuYWwuaDozNTk6I2lmZGVmIENPTkZJR19BRl9SWFJQQ19JTkpFQ1RfUlhfREVMQVlcXG5uZXQvcnhycGMvYXItaW50ZXJuYWwuaC0zNjAtXFx0c3RydWN0IHNrX2J1ZmZfaGVhZFxcdHJ4X2RlbGF5X3F1ZXVlO1xcdC8qIERlbGF5IGluamVjdGlvbiBxdWV1ZSAqL1xcbi0tXFxubmV0L3J4cnBjL2FyLWludGVybmFsLmg9MTM2ND1leHRlcm4gdW5zaWduZWQgaW50IHJ4cnBjX3J4X2p1bWJvX21heDtcXG5uZXQvcnhycGMvYXItaW50ZXJuYWwuaDoxMzY1OiNpZmRlZiBDT05GSUdfQUZfUlhSUENfSU5KRUNUX1JYX0RFTEFZXFxubmV0L3J4cnBjL2FyLWludGVybmFsLmgtMTM2Ni1leHRlcm4gdW5zaWduZWQgbG9uZyByeHJwY19pbmplY3RfcnhfZGVsYXk7XFxuLS1cXG5uZXQvcnhycGMvYXItaW50ZXJuYWwuaD0xNjIxPWV4dGVybiB1bnNpZ25lZCBpbnQgcnhycGNfZGVidWc7XFxuLS1cXG5uZXQvcnhycGMvYXItaW50ZXJuYWwuaC0xNjM1LVxcbm5ldC9yeHJwYy9hci1pbnRlcm5hbC5oOjE2MzY6I2VsaWYgZGVmaW5lZChDT05GSUdfQUZfUlhSUENfREVCVUcpXFxubmV0L3J4cnBjL2FyLWludGVybmFsLmgtMTYzNy0jZGVmaW5lIFJYUlBDX0RFQlVHX0tFTlRFUlxcdDB4MDFcXG4tLVxcbm5ldC9yeHJwYy9jb25uX2NsaWVudC5jPTU0PXN0YXRpYyB2b2lkIHJ4cnBjX2Rlc3Ryb3lfY2xpZW50X2Nvbm5faWRzKHN0cnVjdCByeHJwY19sb2NhbCAqbG9jYWwpXFxuLS1cXG5uZXQvcnhycGMvY29ubl9jbGllbnQuYy02MC1cXHRcXHRpZHJfZm9yX2VhY2hfZW50cnkoXFx1MDAyNmxvY2FsLVxcdTAwM2Vjb25uX2lkcywgY29ubiwgaWQpIHtcXG5uZXQvcnhycGMvY29ubl9jbGllbnQuYzo2MTpcXHRcXHRcXHRwcl9lcnIoXFxcIkFGX1JYUlBDOiBMZWFrZWQgY2xpZW50IGNvbm4gJXAgeyVkfVxcXFxuXFxcIixcXG5uZXQvcnhycGMvY29ubl9jbGllbnQuYy02Mi1cXHRcXHRcXHQgICAgICAgY29ubiwgcmVmY291bnRfcmVhZChcXHUwMDI2Y29ubi1cXHUwMDNlcmVmKSk7XFxuLS1cXG5uZXQvcnhycGMvY29ubl9vYmplY3QuYz05Nz1zdHJ1Y3QgcnhycGNfY29ubmVjdGlvbiAqcnhycGNfZmluZF9jbGllbnRfY29ubmVjdGlvbl9yY3Uoc3RydWN0IHJ4cnBjX2xvY2FsICpsb2NhbCxcXG4tLVxcbm5ldC9yeHJwYy9jb25uX29iamVjdC5jLTEyNi1cXHRcXHRicmVhaztcXG5uZXQvcnhycGMvY29ubl9vYmplY3QuYzoxMjc6I2lmZGVmIENPTkZJR19BRl9SWFJQQ19JUFY2XFxubmV0L3J4cnBjL2Nvbm5fb2JqZWN0LmMtMTI4LVxcdGNhc2UgQUZfSU5FVDY6XFxuLS1cXG5uZXQvcnhycGMvY29ubl9vYmplY3QuYz00NjY9dm9pZCByeHJwY19kZXN0cm95X2FsbF9jb25uZWN0aW9ucyhzdHJ1Y3QgcnhycGNfbmV0ICpyeG5ldClcXG4tLVxcbm5ldC9yeHJwYy9jb25uX29iamVjdC5jLTQ4MC1cXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoY29ubiwgX3AsIFxcdTAwMjZyeG5ldC1cXHUwMDNlc2VydmljZV9jb25ucywgbGluaykge1xcbm5ldC9yeHJwYy9jb25uX29iamVjdC5jOjQ4MTpcXHRcXHRwcl9lcnIoXFxcIkFGX1JYUlBDOiBMZWFrZWQgY29ubiAlcCB7JWR9XFxcXG5cXFwiLFxcbm5ldC9yeHJwYy9jb25uX29iamVjdC5jLTQ4Mi1cXHRcXHQgICAgICAgY29ubiwgcmVmY291bnRfcmVhZChcXHUwMDI2Y29ubi1cXHUwMDNlcmVmKSk7XFxuLS1cXG5uZXQvcnhycGMvaW9fdGhyZWFkLmM9MjY9aW50IHJ4cnBjX2VuY2FwX3JjdihzdHJ1Y3Qgc29jayAqdWRwX3NrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L3J4cnBjL2lvX3RocmVhZC5jLTQ2LVxcdHJ4X3F1ZXVlID0gXFx1MDAyNmxvY2FsLVxcdTAwM2VyeF9xdWV1ZTtcXG5uZXQvcnhycGMvaW9fdGhyZWFkLmM6NDc6I2lmZGVmIENPTkZJR19BRl9SWFJQQ19JTkpFQ1RfUlhfREVMQVlcXG5uZXQvcnhycGMvaW9fdGhyZWFkLmMtNDgtXFx0aWYgKHJ4cnBjX2luamVjdF9yeF9kZWxheSB8fFxcbi0tXFxubmV0L3J4cnBjL2lvX3RocmVhZC5jPTE5NT1zdGF0aWMgYm9vbCByeHJwY19pbnB1dF9wYWNrZXQoc3RydWN0IHJ4cnBjX2xvY2FsICpsb2NhbCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9yeHJwYy9pb190aHJlYWQuYy0yMTAtXFxubmV0L3J4cnBjL2lvX3RocmVhZC5jOjIxMTpcXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfQUZfUlhSUENfSU5KRUNUX0xPU1MpKSB7XFxubmV0L3J4cnBjL2lvX3RocmVhZC5jLTIxMi1cXHRcXHRzdGF0aWMgaW50IGxvc2U7XFxuLS1cXG5uZXQvcnhycGMvaW9fdGhyZWFkLmMtMjc1LVxcdCAgICAgbG9jYWwtXFx1MDAzZXNyeC50cmFuc3BvcnQuZmFtaWx5ICE9IEFGX0lORVQ2KSkge1xcbm5ldC9yeHJwYy9pb190aHJlYWQuYzoyNzY6XFx0XFx0cHJfd2Fybl9yYXRlbGltaXRlZChcXFwiQUZfUlhSUEM6IFByb3RvY29sIG1pc21hdGNoICV1IG5vdCAldVxcXFxuXFxcIixcXG5uZXQvcnhycGMvaW9fdGhyZWFkLmMtMjc3LVxcdFxcdFxcdFxcdCAgICBwZWVyX3NyeC50cmFuc3BvcnQuZmFtaWx5LFxcbi0tXFxubmV0L3J4cnBjL2lvX3RocmVhZC5jPTQzMD1pbnQgcnhycGNfaW9fdGhyZWFkKHZvaWQgKmRhdGEpXFxuLS1cXG5uZXQvcnhycGMvaW9fdGhyZWFkLmMtNDM2LVxcdHN0cnVjdCBza19idWZmICpza2I7XFxubmV0L3J4cnBjL2lvX3RocmVhZC5jOjQzNzojaWZkZWYgQ09ORklHX0FGX1JYUlBDX0lOSkVDVF9SWF9ERUxBWVxcbm5ldC9yeHJwYy9pb190aHJlYWQuYy00MzgtXFx0a3RpbWVfdCBub3c7XFxuLS1cXG5uZXQvcnhycGMvaW9fdGhyZWFkLmMtNDUzLVxcdFxcdC8qIEluamVjdCBhIGRlbGF5IGludG8gcGFja2V0cyBpZiByZXF1ZXN0ZWQuICovXFxubmV0L3J4cnBjL2lvX3RocmVhZC5jOjQ1NDojaWZkZWYgQ09ORklHX0FGX1JYUlBDX0lOSkVDVF9SWF9ERUxBWVxcbm5ldC9yeHJwYy9pb190aHJlYWQuYy00NTUtXFx0XFx0bm93ID0ga3RpbWVfZ2V0X3JlYWwoKTtcXG4tLVxcbm5ldC9yeHJwYy9pb190aHJlYWQuYy01NTItXFxubmV0L3J4cnBjL2lvX3RocmVhZC5jOjU1MzojaWZkZWYgQ09ORklHX0FGX1JYUlBDX0lOSkVDVF9SWF9ERUxBWVxcbm5ldC9yeHJwYy9pb190aHJlYWQuYy01NTQtXFx0XFx0c2tiID0gc2tiX3BlZWsoXFx1MDAyNmxvY2FsLVxcdTAwM2VyeF9kZWxheV9xdWV1ZSk7XFxuLS1cXG5uZXQvcnhycGMvbG9jYWxfZXZlbnQuYy0xLS8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9yLWxhdGVyXFxubmV0L3J4cnBjL2xvY2FsX2V2ZW50LmM6MjovKiBBRl9SWFJQQyBsb2NhbCBlbmRwb2ludCBtYW5hZ2VtZW50XFxubmV0L3J4cnBjL2xvY2FsX2V2ZW50LmMtMy0gKlxcbi0tXFxubmV0L3J4cnBjL2xvY2FsX2V2ZW50LmMtMTgtXFxubmV0L3J4cnBjL2xvY2FsX2V2ZW50LmM6MTk6c3RhdGljIGNoYXIgcnhycGNfdmVyc2lvbl9zdHJpbmdbNjVdOyAvLyBcXFwibGludXgtXFxcIiBVVFNfUkVMRUFTRSBcXFwiIEFGX1JYUlBDXFxcIjtcXG5uZXQvcnhycGMvbG9jYWxfZXZlbnQuYy0yMC1cXG4tLVxcbm5ldC9yeHJwYy9sb2NhbF9ldmVudC5jPTI0PXZvaWQgcnhycGNfZ2VuX3ZlcnNpb25fc3RyaW5nKHZvaWQpXFxuLS1cXG5uZXQvcnhycGMvbG9jYWxfZXZlbnQuYy0yNi1cXHRzbnByaW50ZihyeHJwY192ZXJzaW9uX3N0cmluZywgc2l6ZW9mKHJ4cnBjX3ZlcnNpb25fc3RyaW5nKSxcXG5uZXQvcnhycGMvbG9jYWxfZXZlbnQuYzoyNzpcXHRcXHQgXFxcImxpbnV4LSUuNDlzIEFGX1JYUlBDXFxcIiwgVVRTX1JFTEVBU0UpO1xcbm5ldC9yeHJwYy9sb2NhbF9ldmVudC5jLTI4LX1cXG4tLVxcbm5ldC9yeHJwYy9sb2NhbF9vYmplY3QuYz0zMD1zdGF0aWMgdm9pZCByeHJwY19lbmNhcF9lcnJfcmN2KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IGVycixcXG4tLVxcbm5ldC9yeHJwYy9sb2NhbF9vYmplY3QuYy0zNC1cXHRcXHRyZXR1cm4gaXBfaWNtcF9lcnJvcihzaywgc2tiLCBlcnIsIHBvcnQsIGluZm8sIHBheWxvYWQpO1xcbm5ldC9yeHJwYy9sb2NhbF9vYmplY3QuYzozNTpcXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfQUZfUlhSUENfSVBWNikpXFxubmV0L3J4cnBjL2xvY2FsX29iamVjdC5jLTM2LVxcdFxcdHJldHVybiBpcHY2X2ljbXBfZXJyb3Ioc2ssIHNrYiwgZXJyLCBwb3J0LCBpbmZvLCBwYXlsb2FkKTtcXG4tLVxcbm5ldC9yeHJwYy9sb2NhbF9vYmplY3QuYz01OT1zdGF0aWMgbG9uZyByeHJwY19sb2NhbF9jbXBfa2V5KGNvbnN0IHN0cnVjdCByeHJwY19sb2NhbCAqbG9jYWwsXFxuLS1cXG5uZXQvcnhycGMvbG9jYWxfb2JqZWN0LmMtNzktXFx0XFx0XFx0ICAgICAgIHNpemVvZihzdHJ1Y3QgaW5fYWRkcikpO1xcbm5ldC9yeHJwYy9sb2NhbF9vYmplY3QuYzo4MDojaWZkZWYgQ09ORklHX0FGX1JYUlBDX0lQVjZcXG5uZXQvcnhycGMvbG9jYWxfb2JqZWN0LmMtODEtXFx0Y2FzZSBBRl9JTkVUNjpcXG4tLVxcbm5ldC9yeHJwYy9sb2NhbF9vYmplY3QuYz0xMDk9c3RhdGljIHN0cnVjdCByeHJwY19sb2NhbCAqcnhycGNfYWxsb2NfbG9jYWwoc3RydWN0IG5ldCAqbmV0LFxcbi0tXFxubmV0L3J4cnBjL2xvY2FsX29iamVjdC5jLTEyMi1cXHRcXHRpbml0X2NvbXBsZXRpb24oXFx1MDAyNmxvY2FsLVxcdTAwM2Vpb190aHJlYWRfcmVhZHkpO1xcbm5ldC9yeHJwYy9sb2NhbF9vYmplY3QuYzoxMjM6I2lmZGVmIENPTkZJR19BRl9SWFJQQ19JTkpFQ1RfUlhfREVMQVlcXG5uZXQvcnhycGMvbG9jYWxfb2JqZWN0LmMtMTI0LVxcdFxcdHNrYl9xdWV1ZV9oZWFkX2luaXQoXFx1MDAyNmxvY2FsLVxcdTAwM2VyeF9kZWxheV9xdWV1ZSk7XFxuLS1cXG5uZXQvcnhycGMvbG9jYWxfb2JqZWN0LmM9MTYyPXN0YXRpYyBpbnQgcnhycGNfb3Blbl9zb2NrZXQoc3RydWN0IHJ4cnBjX2xvY2FsICpsb2NhbCwgc3RydWN0IG5ldCAqbmV0KVxcbi0tXFxubmV0L3J4cnBjL2xvY2FsX29iamVjdC5jLTE3OC1cXHRcXHR1ZHBfY29uZi5sb2NhbF91ZHBfcG9ydCA9IHNyeC1cXHUwMDNldHJhbnNwb3J0LnNpbi5zaW5fcG9ydDtcXG5uZXQvcnhycGMvbG9jYWxfb2JqZWN0LmM6MTc5OiNpZiBJU19FTkFCTEVEKENPTkZJR19BRl9SWFJQQ19JUFY2KVxcbm5ldC9yeHJwYy9sb2NhbF9vYmplY3QuYy0xODAtXFx0fSBlbHNlIHtcXG4tLVxcbm5ldC9yeHJwYy9sb2NhbF9vYmplY3QuYz00MjA9dm9pZCByeHJwY19kZXN0cm95X2xvY2FsKHN0cnVjdCByeHJwY19sb2NhbCAqbG9jYWwpXFxuLS1cXG5uZXQvcnhycGMvbG9jYWxfb2JqZWN0LmMtNDQ2LVxcdCAqL1xcbm5ldC9yeHJwYy9sb2NhbF9vYmplY3QuYzo0NDc6I2lmZGVmIENPTkZJR19BRl9SWFJQQ19JTkpFQ1RfUlhfREVMQVlcXG5uZXQvcnhycGMvbG9jYWxfb2JqZWN0LmMtNDQ4LVxcdHJ4cnBjX3B1cmdlX3F1ZXVlKFxcdTAwMjZsb2NhbC1cXHUwMDNlcnhfZGVsYXlfcXVldWUpO1xcbi0tXFxubmV0L3J4cnBjL2xvY2FsX29iamVjdC5jPTQ2OT12b2lkIHJ4cnBjX2Rlc3Ryb3lfYWxsX2xvY2FscyhzdHJ1Y3QgcnhycGNfbmV0ICpyeG5ldClcXG4tLVxcbm5ldC9yeHJwYy9sb2NhbF9vYmplY3QuYy00NzktXFx0XFx0aGxpc3RfZm9yX2VhY2hfZW50cnkobG9jYWwsIFxcdTAwMjZyeG5ldC1cXHUwMDNlbG9jYWxfZW5kcG9pbnRzLCBsaW5rKSB7XFxubmV0L3J4cnBjL2xvY2FsX29iamVjdC5jOjQ4MDpcXHRcXHRcXHRwcl9lcnIoXFxcIkFGX1JYUlBDOiBMZWFrZWQgbG9jYWwgJXAgeyVkfVxcXFxuXFxcIixcXG5uZXQvcnhycGMvbG9jYWxfb2JqZWN0LmMtNDgxLVxcdFxcdFxcdCAgICAgICBsb2NhbCwgcmVmY291bnRfcmVhZChcXHUwMDI2bG9jYWwtXFx1MDAzZXJlZikpO1xcbi0tXFxubmV0L3J4cnBjL21pc2MuYz01NT11bnNpZ25lZCBpbnQgcnhycGNfcnhfanVtYm9fbWF4ID0gNDY7XFxubmV0L3J4cnBjL21pc2MuYy01Ni1cXG5uZXQvcnhycGMvbWlzYy5jOjU3OiNpZmRlZiBDT05GSUdfQUZfUlhSUENfSU5KRUNUX1JYX0RFTEFZXFxubmV0L3J4cnBjL21pc2MuYy01OC0vKlxcbi0tXFxubmV0L3J4cnBjL291dHB1dC5jPTE5PXNzaXplX3QgZG9fdWRwX3NlbmRtc2coc3RydWN0IHNvY2tldCAqc29ja2V0LCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBsZW4pXFxuLS1cXG5uZXQvcnhycGMvb3V0cHV0LmMtMjMtXFxubmV0L3J4cnBjL291dHB1dC5jOjI0OlxcdGlmIChJU19FTkFCTEVEKENPTkZJR19BRl9SWFJQQ19JUFY2KSkge1xcbm5ldC9yeHJwYy9vdXRwdXQuYy0yNS1cXHRcXHRpZiAoc2EtXFx1MDAzZXNhX2ZhbWlseSA9PSBBRl9JTkVUNikge1xcbi0tXFxubmV0L3J4cnBjL291dHB1dC5jPTYzOT12b2lkIHJ4cnBjX3NlbmRfZGF0YV9wYWNrZXQoc3RydWN0IHJ4cnBjX2NhbGwgKmNhbGwsIHN0cnVjdCByeHJwY19zZW5kX2RhdGFfcmVxICpyZXEpXFxuLS1cXG5uZXQvcnhycGMvb3V0cHV0LmMtNjkzLVxcbm5ldC9yeHJwYy9vdXRwdXQuYzo2OTQ6XFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX0FGX1JYUlBDX0lOSkVDVF9MT1NTKSkge1xcbm5ldC9yeHJwYy9vdXRwdXQuYy02OTUtXFx0XFx0c3RhdGljIGludCBsb3NlO1xcbi0tXFxubmV0L3J4cnBjL3BlZXJfZXZlbnQuYz0yOD1zdGF0aWMgc3RydWN0IHJ4cnBjX3BlZXIgKnJ4cnBjX2xvb2t1cF9wZWVyX2xvY2FsX3JjdShzdHJ1Y3QgcnhycGNfbG9jYWwgKmxvY2FsLFxcbi0tXFxubmV0L3J4cnBjL3BlZXJfZXZlbnQuYy02Ni1cXG5uZXQvcnhycGMvcGVlcl9ldmVudC5jOjY3OiNpZmRlZiBDT05GSUdfQUZfUlhSUENfSVBWNlxcbm5ldC9yeHJwYy9wZWVyX2V2ZW50LmMtNjgtXFx0Y2FzZSBBRl9JTkVUNjpcXG4tLVxcbm5ldC9yeHJwYy9wZWVyX29iamVjdC5jPTMwPXN0YXRpYyB1bnNpZ25lZCBsb25nIHJ4cnBjX3BlZXJfaGFzaF9rZXkoc3RydWN0IHJ4cnBjX2xvY2FsICpsb2NhbCxcXG4tLVxcbm5ldC9yeHJwYy9wZWVyX29iamVjdC5jLTQ5LVxcdFxcdGJyZWFrO1xcbm5ldC9yeHJwYy9wZWVyX29iamVjdC5jOjUwOiNpZmRlZiBDT05GSUdfQUZfUlhSUENfSVBWNlxcbm5ldC9yeHJwYy9wZWVyX29iamVjdC5jLTUxLVxcdGNhc2UgQUZfSU5FVDY6XFxuLS1cXG5uZXQvcnhycGMvcGVlcl9vYmplY3QuYy01Ny1cXHRkZWZhdWx0Olxcbm5ldC9yeHJwYy9wZWVyX29iamVjdC5jOjU4OlxcdFxcdFdBUk4oMSwgXFxcIkFGX1JYUlBDOiBVbnN1cHBvcnRlZCB0cmFuc3BvcnQgYWRkcmVzcyBmYW1pbHlcXFxcblxcXCIpO1xcbm5ldC9yeHJwYy9wZWVyX29iamVjdC5jLTU5LVxcdFxcdHJldHVybiAwO1xcbi0tXFxubmV0L3J4cnBjL3BlZXJfb2JqZWN0LmM9Nzg9c3RhdGljIGxvbmcgcnhycGNfcGVlcl9jbXBfa2V5KGNvbnN0IHN0cnVjdCByeHJwY19wZWVyICpwZWVyLFxcbi0tXFxubmV0L3J4cnBjL3BlZXJfb2JqZWN0LmMtOTktXFx0XFx0XFx0ICAgICAgIHNpemVvZihzdHJ1Y3QgaW5fYWRkcikpO1xcbm5ldC9yeHJwYy9wZWVyX29iamVjdC5jOjEwMDojaWZkZWYgQ09ORklHX0FGX1JYUlBDX0lQVjZcXG5uZXQvcnhycGMvcGVlcl9vYmplY3QuYy0xMDEtXFx0Y2FzZSBBRl9JTkVUNjpcXG4tLVxcbm5ldC9yeHJwYy9wZWVyX29iamVjdC5jPTE1Mj12b2lkIHJ4cnBjX2Fzc2Vzc19NVFVfc2l6ZShzdHJ1Y3QgcnhycGNfbG9jYWwgKmxvY2FsLCBzdHJ1Y3QgcnhycGNfcGVlciAqcGVlcilcXG4tLVxcbm5ldC9yeHJwYy9wZWVyX29iamVjdC5jLTE1OC1cXHRzdHJ1Y3QgZmxvd2k0ICpmbDQgPSBcXHUwMDI2ZmwudS5pcDQ7XFxubmV0L3J4cnBjL3BlZXJfb2JqZWN0LmM6MTU5OiNpZmRlZiBDT05GSUdfQUZfUlhSUENfSVBWNlxcbm5ldC9yeHJwYy9wZWVyX29iamVjdC5jLTE2MC1cXHRzdHJ1Y3QgZmxvd2k2ICpmbDYgPSBcXHUwMDI2ZmwudS5pcDY7XFxuLS1cXG5uZXQvcnhycGMvcGVlcl9vYmplY3QuYy0xODMtXFxubmV0L3J4cnBjL3BlZXJfb2JqZWN0LmM6MTg0OiNpZmRlZiBDT05GSUdfQUZfUlhSUENfSVBWNlxcbm5ldC9yeHJwYy9wZWVyX29iamVjdC5jLTE4NS1cXHRjYXNlIEFGX0lORVQ2Olxcbi0tXFxubmV0L3J4cnBjL3BlZXJfb2JqZWN0LmM9MjUwPXN0YXRpYyB2b2lkIHJ4cnBjX2luaXRfcGVlcihzdHJ1Y3QgcnhycGNfbG9jYWwgKmxvY2FsLCBzdHJ1Y3QgcnhycGNfcGVlciAqcGVlcixcXG4tLVxcbm5ldC9yeHJwYy9wZWVyX29iamVjdC5jLTI1OS1cXHRcXHRicmVhaztcXG5uZXQvcnhycGMvcGVlcl9vYmplY3QuYzoyNjA6I2lmZGVmIENPTkZJR19BRl9SWFJQQ19JUFY2XFxubmV0L3J4cnBjL3BlZXJfb2JqZWN0LmMtMjYxLVxcdGNhc2UgQUZfSU5FVDY6XFxuLS1cXG5uZXQvcnhycGMvcGVlcl9vYmplY3QuYz01Mzg9RVhQT1JUX1NZTUJPTChyeHJwY19rZXJuZWxfcmVtb3RlX2FkZHIpO1xcbi0tXFxubmV0L3J4cnBjL3BlZXJfb2JqZWN0LmMtNTQ0LSAqXFxubmV0L3J4cnBjL3BlZXJfb2JqZWN0LmM6NTQ1OiAqIFNldCB0aGUgYXBwLXNwZWNpZmljIGRhdGEgb24gYSBwZWVyLiAgQUZfUlhSUEMgbWFrZXMgbm8gZWZmb3J0IHRvIHJldGFpblxcbm5ldC9yeHJwYy9wZWVyX29iamVjdC5jLTU0Ni0gKiBhbnl0aGluZyB0aGUgZGF0YSBtaWdodCByZWZlciB0by5cXG4tLVxcbm5ldC9yeHJwYy9wcm9jLmMtMS0vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vci1sYXRlclxcbm5ldC9yeHJwYy9wcm9jLmM6MjovKiAvcHJvYy9uZXQvIHN1cHBvcnQgZm9yIEFGX1JYUlBDXFxubmV0L3J4cnBjL3Byb2MuYy0zLSAqXFxuLS1cXG5uZXQvcnhycGMvcnR0LmMtMy0gKlxcbm5ldC9yeHJwYy9ydHQuYzo0OiAqIEFkYXB0ZWQgZnJvbSBUQ1AgZm9yIEFGX1JYUlBDIGJ5IERhdmlkIEhvd2VsbHMgKGRob3dlbGxzQHJlZGhhdC5jb20pXFxubmV0L3J4cnBjL3J0dC5jLTUtICpcXG4tLVxcbm5ldC9yeHJwYy9yeHBlcmYuYz0xODU9c3RhdGljIGludCByeHBlcmZfb3Blbl9zb2NrZXQodm9pZClcXG4tLVxcbm5ldC9yeHJwYy9yeHBlcmYuYy0xOTAtXFxubmV0L3J4cnBjL3J4cGVyZi5jOjE5MTpcXHRyZXQgPSBzb2NrX2NyZWF0ZV9rZXJuKFxcdTAwMjZpbml0X25ldCwgQUZfUlhSUEMsIFNPQ0tfREdSQU0sIFBGX0lORVQ2LFxcbm5ldC9yeHJwYy9yeHBlcmYuYy0xOTItXFx0XFx0XFx0ICAgICAgIFxcdTAwMjZzb2NrZXQpO1xcbi0tXFxubmV0L3J4cnBjL3J4cGVyZi5jLTE5OS1cXHRtZW1zZXQoXFx1MDAyNnNyeCwgMCwgc2l6ZW9mKHNyeCkpO1xcbm5ldC9yeHJwYy9yeHBlcmYuYzoyMDA6XFx0c3J4LnNyeF9mYW1pbHlcXHRcXHRcXHQ9IEFGX1JYUlBDO1xcbm5ldC9yeHJwYy9yeHBlcmYuYy0yMDEtXFx0c3J4LnNyeF9zZXJ2aWNlXFx0XFx0XFx0PSBSWF9QRVJGX1NFUlZJQ0U7XFxuLS1cXG5uZXQvcnhycGMvc2VuZG1zZy5jLTEtLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb3ItbGF0ZXJcXG5uZXQvcnhycGMvc2VuZG1zZy5jOjI6LyogQUZfUlhSUEMgc2VuZG1zZygpIGltcGxlbWVudGF0aW9uLlxcbm5ldC9yeHJwYy9zZW5kbXNnLmMtMy0gKlxcbi0tXFxubmV0L3J4cnBjL3N5c2N0bC5jPTIzPXN0YXRpYyBjb25zdCB1bnNpZ25lZCBsb25nIG1heF9qaWZmaWVzID0gTUFYX0pJRkZZX09GRlNFVDtcXG5uZXQvcnhycGMvc3lzY3RsLmM6MjQ6I2lmZGVmIENPTkZJR19BRl9SWFJQQ19JTkpFQ1RfUlhfREVMQVlcXG5uZXQvcnhycGMvc3lzY3RsLmMtMjUtc3RhdGljIGNvbnN0IHVuc2lnbmVkIGxvbmcgbWF4XzUwMCA9IDUwMDtcXG4tLVxcbm5ldC9yeHJwYy9zeXNjdGwuYz0zND1zdGF0aWMgc3RydWN0IGN0bF90YWJsZSByeHJwY19zeXNjdGxfdGFibGVbXSA9IHtcXG4tLVxcbm5ldC9yeHJwYy9zeXNjdGwuYy03My1cXHQvKiBWYWx1ZXMgdXNlZCBpbiBtaWxsaXNlY29uZHMgKi9cXG5uZXQvcnhycGMvc3lzY3RsLmM6NzQ6I2lmZGVmIENPTkZJR19BRl9SWFJQQ19JTkpFQ1RfUlhfREVMQVlcXG5uZXQvcnhycGMvc3lzY3RsLmMtNzUtXFx0e1xcbi0tXFxubmV0L3J4cnBjL3Rlc3RzL01ha2VmaWxlLTItXFxubmV0L3J4cnBjL3Rlc3RzL01ha2VmaWxlOjM6b2JqLSQoQ09ORklHX0FGX1JYUlBDX0tVTklUX1RFU1QpICs9IHJ4cnBjX2t1bml0Lm9cXG4tLVxcbm5ldC9yeHJwYy91dGlscy5jPTE2PWludCByeHJwY19leHRyYWN0X2FkZHJfZnJvbV9za2Ioc3RydWN0IHNvY2thZGRyX3J4cnBjICpzcngsIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvcnhycGMvdXRpbHMuYy0yOC1cXG5uZXQvcnhycGMvdXRpbHMuYzoyOTojaWZkZWYgQ09ORklHX0FGX1JYUlBDX0lQVjZcXG5uZXQvcnhycGMvdXRpbHMuYy0zMC1cXHRjYXNlIEVUSF9QX0lQVjY6XFxuLS1cXG5uZXQvcnhycGMvdXRpbHMuYy0zOS1cXHRkZWZhdWx0Olxcbm5ldC9yeHJwYy91dGlscy5jOjQwOlxcdFxcdHByX3dhcm5fcmF0ZWxpbWl0ZWQoXFxcIkFGX1JYUlBDOiBVbmtub3duIGV0aCBwcm90b2NvbCAldVxcXFxuXFxcIixcXG5uZXQvcnhycGMvdXRpbHMuYy00MS1cXHRcXHRcXHRcXHQgICAgbnRvaHMoc2tiLVxcdTAwM2Vwcm90b2NvbCkpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwMjo1OToyMS4xMTkwNDIyODdaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxODE2MzkxMDM5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOlxuXG4qKktjb25maWcgRGVwZW5kZW5jeSBDaGVjayBmb3IgQUZfUlhSUEMqKlxuXG5BbHJpZ2h0LCBsZXQncyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGRlcGVuZGVuY2llcyByZWxhdGVkIHRvIGBDT05GSUdfQUZfUlhSUENgLiBHaXZlbiBteSBleHBlcmllbmNlLCB0aGUgZmlyc3QgcGxhY2UgSSdkIGxvb2sgaXMgdGhlIGtlcm5lbCdzIGNvbmZpZ3VyYXRpb24gZmlsZXMuIFNwZWNpZmljYWxseSwgSSdtIHRoaW5raW5nIEkgc2hvdWxkIHN0YXJ0IGRpZ2dpbmcgaW50byB0aGUgYG5ldC9yeHJwYy9LY29uZmlnYCBmaWxlLiBUaGF0J3MgdGhlIG1vc3QgbG9naWNhbCBzcG90IGZvciBmaWd1cmluZyBvdXQgd2hhdCBvdGhlciBjb25maWd1cmF0aW9ucyBtaWdodCBuZWVkIHRvIGJlIGVuYWJsZWQgb3IgYXJlIHJlbGF0ZWQgdG8gZ2V0IGBBRl9SWFJQQ2AgZnVuY3Rpb25hbC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyB0byBtYWtlIGEgcmVjb21tZW5kYXRpb24uIEkgaGF2ZSB0byBtYWtlIHN1cmUgSSBkb24ndCBvdmVybG9vayBhbnkgaW1wbGljaXQgZGVwZW5kZW5jaWVzLiBJJ2xsIG5lZWQgdG8ga25vdyB3aGljaCBvdGhlciBmZWF0dXJlcyBpdCByZWxpZXMgdXBvbiwgYW5kIGFsc28gYW55IHJlbGF0aW9uc2hpcHMgd2l0aCByZWxhdGVkIHN1Yi1zeXN0ZW1zLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDE1NywiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDAyOjU5OjIyLjkzNTQzODc3NloiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY2MTUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9yeHJwYy9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuICAgMjpcXHQjXFxuICAgMzpcXHQjIFJ4UlBDIHNlc3Npb24gc29ja2V0c1xcbiAgIDQ6XFx0I1xcbiAgIDU6XFx0XFxuICAgNjpcXHRjb25maWcgQUZfUlhSUENcXG4gICA3OlxcdFxcdHRyaXN0YXRlIFxcXCJSeFJQQyBzZXNzaW9uIHNvY2tldHNcXFwiXFxuICAgODpcXHRcXHRkZXBlbmRzIG9uIElORVRcXG4gICA5OlxcdFxcdHNlbGVjdCBDUllQVE9cXG4gIDEwOlxcdFxcdHNlbGVjdCBDUllQVE9fTElCX0RFUyBpZiBSWEtBRFxcbiAgMTE6XFx0XFx0c2VsZWN0IEtFWVNcXG4gIDEyOlxcdFxcdHNlbGVjdCBORVRfVURQX1RVTk5FTFxcbiAgMTM6XFx0XFx0aGVscFxcbiAgMTQ6XFx0XFx0ICBTYXkgWSBvciBNIGhlcmUgdG8gaW5jbHVkZSBzdXBwb3J0IGZvciBSeFJQQyBzZXNzaW9uIHNvY2tldHMgKGp1c3RcXG4gIDE1OlxcdFxcdCAgdGhlIHRyYW5zcG9ydCBwYXJ0LCBub3QgdGhlIHByZXNlbnRhdGlvbiBwYXJ0OiAodW4pbWFyc2hhbGxpbmcgaXNcXG4gIDE2OlxcdFxcdCAgbGVmdCB0byB0aGUgYXBwbGljYXRpb24pLlxcbiAgMTc6XFx0XFxuICAxODpcXHRcXHQgIFRoZXNlIGFyZSB1c2VkIGZvciBBRlMga2VybmVsIGZpbGVzeXN0ZW0gYW5kIHVzZXJzcGFjZSB1dGlsaXRpZXMuXFxuICAxOTpcXHRcXG4gIDIwOlxcdFxcdCAgVGhpcyBtb2R1bGUgYXQgdGhlIG1vbWVudCBvbmx5IHN1cHBvcnRzIGNsaWVudCBvcGVyYXRpb25zIGFuZCBpc1xcbiAgMjE6XFx0XFx0ICBjdXJyZW50bHkgaW5jb21wbGV0ZS5cXG4gIDIyOlxcdFxcbiAgMjM6XFx0XFx0ICBTZWUgRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3J4cnBjLnJzdC5cXG4gIDI0OlxcdFxcbiAgMjU6XFx0aWYgQUZfUlhSUENcXG4gIDI2OlxcdFxcbiAgMjc6XFx0Y29uZmlnIEFGX1JYUlBDX0lQVjZcXG4gIDI4OlxcdFxcdGJvb2wgXFxcIklQdjYgc3VwcG9ydCBmb3IgUnhSUENcXFwiXFxuICAyOTpcXHRcXHRkZXBlbmRzIG9uIElQVjZcXG4gIDMwOlxcdFxcdGhlbHBcXG4gIDMxOlxcdFxcdCAgU2F5IFkgaGVyZSB0byBhbGxvdyBBRl9SWFJQQyB0byB1c2UgSVBWNiBVRFAgYXMgd2VsbCBhcyBJUFY0IFVEUCBhc1xcbiAgMzI6XFx0XFx0ICBpdHMgbmV0d29yayB0cmFuc3BvcnQuXFxuICAzMzpcXHRcXG4gIDM0OlxcdGNvbmZpZyBBRl9SWFJQQ19JTkpFQ1RfTE9TU1xcbiAgMzU6XFx0XFx0Ym9vbCBcXFwiSW5qZWN0IHBhY2tldCBsb3NzIGludG8gUnhSUEMgcGFja2V0IHN0cmVhbVxcXCJcXG4gIDM2OlxcdFxcdGhlbHBcXG4gIDM3OlxcdFxcdCAgU2F5IFkgaGVyZSB0byBpbmplY3QgcGFja2V0IGxvc3MgYnkgZGlzY2FyZGluZyBzb21lIHJlY2VpdmVkIGFuZCBzb21lXFxuICAzODpcXHRcXHQgIHRyYW5zbWl0dGVkIHBhY2tldHMuXFxuICAzOTpcXHRcXG4gIDQwOlxcdGNvbmZpZyBBRl9SWFJQQ19JTkpFQ1RfUlhfREVMQVlcXG4gIDQxOlxcdFxcdGJvb2wgXFxcIkluamVjdCBkZWxheSBpbnRvIHBhY2tldCByZWNlcHRpb25cXFwiXFxuICA0MjpcXHRcXHRkZXBlbmRzIG9uIFNZU0NUTFxcbiAgNDM6XFx0XFx0aGVscFxcbiAgNDQ6XFx0XFx0ICBTYXkgWSBoZXJlIHRvIGluamVjdCBhIGRlbGF5IGludG8gcGFja2V0IHJlY2VwdGlvbiwgYWxsb3dpbmcgYW5cXG4gIDQ1OlxcdFxcdCAgZXh0ZW5kZWQgUlRUIHRpbWUgdG8gYmUgbW9kZWxsZWQuICBUaGUgZGVsYXkgY2FuIGJlIGNvbmZpZ3VyZWQgdXNpbmdcXG4gIDQ2OlxcdFxcdCAgL3Byb2Mvc3lzL25ldC9yeHJwYy9yeHJwY19pbmplY3RfcnhfZGVsYXksIHNldHRpbmcgYSBudW1iZXIgb2ZcXG4gIDQ3OlxcdFxcdCAgbWlsbGlzZWNvbmRzIHVwIHRvIDAuNXMgKG5vdGUgdGhhdCB0aGUgZ3JhbnVsYXJpdHkgaXMgYWN0dWFsbHkgaW5cXG4gIDQ4OlxcdFxcdCAgamlmZmllcykuXFxuICA0OTpcXHRcXG4gIDUwOlxcdGNvbmZpZyBBRl9SWFJQQ19ERUJVR1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwMjo1OToyMi45MzU1MDY0NDZaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMDI5MzY5MzY2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYW5hbHlzaXMgb2YgdGhlIHNpdHVhdGlvbiwgcHJlc2VudGVkIGZyb20gbXkgcGVyc3BlY3RpdmUgYXMgYW4gZXhwZXJ0OlxuXG4qKkRpdmluZyBpbnRvIHRoZSBSeFJQQyBOZXR3b3JrIENvZGUqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBpbm5lciB3b3JraW5ncyBvZiBSeFJQQydzIG5ldHdvcmsgbmFtZXNwYWNlIGFuZCBwZWVyIG9iamVjdCBtYW5hZ2VtZW50LiBJIHNob3VsZCBzdGFydCBieSBkaWdnaW5nIGludG8gYG5ldC9yeHJwYy9uZXRfbnMuY2AgYW5kIGBuZXQvcnhycGMvcGVlcl9vYmplY3QuY2AuIFRob3NlIGZpbGVzIHNob3VsZCBjb250YWluIHRoZSBjb3JlIGltcGxlbWVudGF0aW9ucyBmb3IgaG93IFJ4UlBDIGludGVyYWN0cyB3aXRoIHRoZSBuZXR3b3JrIG5hbWVzcGFjZSBpbmZyYXN0cnVjdHVyZSBhbmQgaG93IGl0IGhhbmRsZXMgcGVlciBjb25uZWN0aW9ucyBhbmQgYXNzb2NpYXRlZCBkYXRhLiBJIGV4cGVjdCB0byBmaW5kIHRoZSBjcnVjaWFsIGRhdGEgc3RydWN0dXJlcyBhbmQgZnVuY3Rpb25zIHRoYXQgZ292ZXJuIHNvY2tldCBjcmVhdGlvbiwgYWRkcmVzcyBiaW5kaW5nLCBjb25uZWN0aW9uIGVzdGFibGlzaG1lbnQsIGFuZCBwZWVyIHRyYWNraW5nIHRoZXJlLiBNeSBnb2FsIGlzIHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIGVsZW1lbnRzIGludGVycmVsYXRlIGFuZCBob3cgdGhlIFJ4UlBDIHByb3RvY29sIGxldmVyYWdlcyB0aGUgdW5kZXJseWluZyBuZXR3b3JrIHN0YWNrLiBJJ20gZXNwZWNpYWxseSBpbnRlcmVzdGVkIGluIGNvbmN1cnJlbmN5IGNvbnNpZGVyYXRpb25zIGFuZCBwb3RlbnRpYWwgYm90dGxlbmVja3Mgd2l0aGluIHRoZXNlIHBhcnRzIG9mIHRoZSBjb2RlLiBUaGlzIHdpbGwgYmUgdGhlIGZvdW5kYXRpb24gdG8gc2VlIGFib3V0IHRoZSBuZXR3b3JrIG5hbWVzcGFjZSBpbnRlcmFjdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTEwNTIsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDAyOjU5OjI0Ljk2NDg3OTE0MVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg3NzYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9yeHJwYy9uZXRfbnMuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA5MCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICA5MDpcXHRcXHRcXHRcXHRzaXplb2Yoc3RydWN0IHNlcV9uZXRfcHJpdmF0ZSkpO1xcbiAgOTE6XFx0XFx0cHJvY19jcmVhdGVfbmV0X3NpbmdsZV93cml0ZShcXFwic3RhdHNcXFwiLCBTX0lGUkVHIHwgMDY0NCwgcnhuZXQtXFx1MDAzZXByb2NfbmV0LFxcbiAgOTI6XFx0XFx0XFx0XFx0XFx0ICAgICByeHJwY19zdGF0c19zaG93LCByeHJwY19zdGF0c19jbGVhciwgTlVMTCk7XFxuICA5MzpcXHRcXHRyZXR1cm4gMDtcXG4gIDk0OlxcdFxcbiAgOTU6XFx0ZXJyX3Byb2M6XFxuICA5NjpcXHRcXHRyeG5ldC1cXHUwMDNlbGl2ZSA9IGZhbHNlO1xcbiAgOTc6XFx0XFx0cmV0dXJuIHJldDtcXG4gIDk4OlxcdH1cXG4gIDk5OlxcdFxcbiAxMDA6XFx0c3RhdGljIF9fbmV0X2V4aXQgdm9pZCByeHJwY19wcmVfZXhpdF9uZXQoc3RydWN0IG5ldCAqbmV0KVxcbiAxMDE6XFx0e1xcbiAxMDI6XFx0XFx0c3RydWN0IHJ4cnBjX25ldCAqcnhuZXQgPSByeHJwY19uZXQobmV0KTtcXG4gMTAzOlxcdFxcbiAxMDQ6XFx0XFx0cnhuZXQtXFx1MDAzZWxpdmUgPSBmYWxzZTtcXG4gMTA1OlxcdFxcdHRpbWVyX2RlbGV0ZV9zeW5jKFxcdTAwMjZyeG5ldC1cXHUwMDNlcGVlcl9rZWVwYWxpdmVfdGltZXIpO1xcbiAxMDY6XFx0XFx0Y2FuY2VsX3dvcmtfc3luYyhcXHUwMDI2cnhuZXQtXFx1MDAzZXBlZXJfa2VlcGFsaXZlX3dvcmspO1xcbiAxMDc6XFx0XFx0LyogUmVtb3ZlIHRoZSB0aW1lciBhZ2FpbiBhcyB0aGUgd29ya2VyIG1heSBoYXZlIHJlc3RhcnRlZCBpdC4gKi9cXG4gMTA4OlxcdFxcdHRpbWVyX2RlbGV0ZV9zeW5jKFxcdTAwMjZyeG5ldC1cXHUwMDNlcGVlcl9rZWVwYWxpdmVfdGltZXIpO1xcbiAxMDk6XFx0XFx0cnhycGNfZGVzdHJveV9hbGxfY2FsbHMocnhuZXQpO1xcbiAxMTA6XFx0XFx0cnhycGNfZGVzdHJveV9hbGxfY29ubmVjdGlvbnMocnhuZXQpO1xcbiAxMTE6XFx0fVxcbiAxMTI6XFx0XFxuIDExMzpcXHQvKlxcbiAxMTQ6XFx0ICogQ2xlYW4gdXAgYSBwZXItbmV0d29yayBuYW1lc3BhY2UgcmVjb3JkLlxcbiAxMTU6XFx0ICovXFxuIDExNjpcXHRzdGF0aWMgX19uZXRfZXhpdCB2b2lkIHJ4cnBjX2V4aXRfbmV0KHN0cnVjdCBuZXQgKm5ldClcXG4gMTE3OlxcdHtcXG4gMTE4OlxcdFxcdHN0cnVjdCByeHJwY19uZXQgKnJ4bmV0ID0gcnhycGNfbmV0KG5ldCk7XFxuIDExOTpcXHRcXG4gMTIwOlxcdFxcdHJ4cnBjX2Rlc3Ryb3lfYWxsX3BlZXJzKHJ4bmV0KTtcXG4gMTIxOlxcdFxcdHJ4cnBjX2Rlc3Ryb3lfYWxsX2xvY2FscyhyeG5ldCk7XFxuIDEyMjpcXHRcXHRwcm9jX3JlbW92ZShyeG5ldC1cXHUwMDNlcHJvY19uZXQpO1xcbiAxMjM6XFx0fVxcbiAxMjQ6XFx0XFxuIDEyNTpcXHRzdHJ1Y3QgcGVybmV0X29wZXJhdGlvbnMgcnhycGNfbmV0X29wcyA9IHtcXG4gMTI2OlxcdFxcdC5pbml0XFx0XFx0PSByeHJwY19pbml0X25ldCxcXG4gMTI3OlxcdFxcdC5wcmVfZXhpdFxcdD0gcnhycGNfcHJlX2V4aXRfbmV0LFxcbiAxMjg6XFx0XFx0LmV4aXRcXHRcXHQ9IHJ4cnBjX2V4aXRfbmV0LFxcbiAxMjk6XFx0XFx0LmlkXFx0XFx0PSBcXHUwMDI2cnhycGNfbmV0X2lkLFxcbiAxMzA6XFx0XFx0LnNpemVcXHRcXHQ9IHNpemVvZihzdHJ1Y3QgcnhycGNfbmV0KSxcXG4gMTMxOlxcdH07XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDAyOjU5OjI0Ljk2NDk2ODYwMVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE5OTUwNzIyMzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOlxuXG4qKlBlZXJpbmcgRGVlcGVyIGludG8gUGVlciBPYmplY3RzKipcblxuT2theSwgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJ20gbm90IG1pc3NpbmcgYW55dGhpbmcgY3J1Y2lhbCwgZXNwZWNpYWxseSB3aGVuIGRlYWxpbmcgd2l0aCB0aGUgY29yZSBuZXR3b3JrIGludGVyYWN0aW9ucy4gV2hpbGUgSSd2ZSBmb2N1c2VkIG9uIFggYW5kIFksIG15IGd1dCBmZWVsaW5nIHRlbGxzIG1lIHRvIGJyb2FkZW4gdGhlIHNjb3BlIGEgYml0LiBMZXQncyBkaWcgaW50byBgbmV0L3J4cnBjL3BlZXJfb2JqZWN0LmNgLiBJdCdzIGEga2V5IHBpZWNlIG9mIHRoZSBwdXp6bGUsIGFuZCBJIG5lZWQgdG8gZW5zdXJlIHRoYXQgdGhlIGxvZ2ljIHdpdGhpbiB0aGF0IG1vZHVsZSBwbGF5cyBuaWNlIHdpdGggdGhlIG90aGVyIGFyZWFzIEknbSBpbnZlc3RpZ2F0aW5nLiBJIHdhbnQgYSBjb21wcmVoZW5zaXZlIHVuZGVyc3RhbmRpbmcsIGFuZCB0aGlzIHNwZWNpZmljIGZpbGUgc2VlbXMgbGlrZSBhIGdvb2QgbmV4dCBzdGVwIGluIGFjaGlldmluZyB0aGF0LiBMZXQncyBzZWUgd2hhdCdzIGhhcHBlbmluZyB0aGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE5NzIsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDAyOjU5OjI2Ljk2MDA0NDMxM1oiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTM1ODksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3J4cnBjL3BlZXJfb2JqZWN0LmNcIixcbiAgXCJGaXJzdExpbmVcIjogNDQwLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNDQwOlxcdFxcdGlmIChwZWVyKSB7XFxuIDQ0MTpcXHRcXHRcXHRkZWJ1Z19pZCA9IHBlZXItXFx1MDAzZWRlYnVnX2lkO1xcbiA0NDI6XFx0XFx0XFx0ZGVhZCA9IF9fcmVmY291bnRfZGVjX2FuZF90ZXN0KFxcdTAwMjZwZWVyLVxcdTAwM2VyZWYsIFxcdTAwMjZyKTtcXG4gNDQzOlxcdFxcdFxcdHRyYWNlX3J4cnBjX3BlZXIoZGVidWdfaWQsIHIgLSAxLCB3aHkpO1xcbiA0NDQ6XFx0XFx0XFx0aWYgKGRlYWQpXFxuIDQ0NTpcXHRcXHRcXHRcXHRfX3J4cnBjX3B1dF9wZWVyKHBlZXIpO1xcbiA0NDY6XFx0XFx0fVxcbiA0NDc6XFx0fVxcbiA0NDg6XFx0XFxuIDQ0OTpcXHQvKlxcbiA0NTA6XFx0ICogTWFrZSBzdXJlIGFsbCBwZWVyIHJlY29yZHMgaGF2ZSBiZWVuIGRpc2NhcmRlZC5cXG4gNDUxOlxcdCAqL1xcbiA0NTI6XFx0dm9pZCByeHJwY19kZXN0cm95X2FsbF9wZWVycyhzdHJ1Y3QgcnhycGNfbmV0ICpyeG5ldClcXG4gNDUzOlxcdHtcXG4gNDU0OlxcdFxcdHN0cnVjdCByeHJwY19wZWVyICpwZWVyO1xcbiA0NTU6XFx0XFx0aW50IGk7XFxuIDQ1NjpcXHRcXG4gNDU3OlxcdFxcdC8qXFxuIDQ1ODpcXHRcXHQgKiBQcmV2ZW50IHVzZS1hZnRlci1mcmVlIGlmIGEgcGVlciBpcyBjb25jdXJyZW50bHkgdW5saW5rZWQgZnJvbSB0aGVcXG4gNDU5OlxcdFxcdCAqIGhhc2ggdGFibGUgYW5kIGZyZWVkIHZpYSBSQ1UgZHVyaW5nIGl0ZXJhdGlvbi5cXG4gNDYwOlxcdFxcdCAqL1xcbiA0NjE6XFx0XFx0c3Bpbl9sb2NrX2JoKFxcdTAwMjZyeG5ldC1cXHUwMDNlcGVlcl9oYXNoX2xvY2spO1xcbiA0NjI6XFx0XFxuIDQ2MzpcXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgSEFTSF9TSVpFKHJ4bmV0LVxcdTAwM2VwZWVyX2hhc2gpOyBpKyspIHtcXG4gNDY0OlxcdFxcdFxcdGlmIChobGlzdF9lbXB0eShcXHUwMDI2cnhuZXQtXFx1MDAzZXBlZXJfaGFzaFtpXSkpXFxuIDQ2NTpcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4gNDY2OlxcdFxcbiA0Njc6XFx0XFx0XFx0aGxpc3RfZm9yX2VhY2hfZW50cnkocGVlciwgXFx1MDAyNnJ4bmV0LVxcdTAwM2VwZWVyX2hhc2hbaV0sIGhhc2hfbGluaykge1xcbiA0Njg6XFx0XFx0XFx0XFx0cHJfZXJyKFxcXCJMZWFrZWQgcGVlciAleCB7JXV9ICVwSVNwXFxcXG5cXFwiLFxcbiA0Njk6XFx0XFx0XFx0XFx0ICAgICAgIHBlZXItXFx1MDAzZWRlYnVnX2lkLFxcbiA0NzA6XFx0XFx0XFx0XFx0ICAgICAgIHJlZmNvdW50X3JlYWQoXFx1MDAyNnBlZXItXFx1MDAzZXJlZiksXFxuIDQ3MTpcXHRcXHRcXHRcXHQgICAgICAgXFx1MDAyNnBlZXItXFx1MDAzZXNyeC50cmFuc3BvcnQpO1xcbiA0NzI6XFx0XFx0XFx0fVxcbiA0NzM6XFx0XFx0fVxcbiA0NzQ6XFx0XFxuIDQ3NTpcXHRcXHRzcGluX3VubG9ja19iaChcXHUwMDI2cnhuZXQtXFx1MDAzZXBlZXJfaGFzaF9sb2NrKTtcXG4gNDc2OlxcdH1cXG4gNDc3OlxcdFxcbiA0Nzg6XFx0LyoqXFxuIDQ3OTpcXHQgKiByeHJwY19rZXJuZWxfZ2V0X2NhbGxfcGVlciAtIEdldCB0aGUgcGVlciBhZGRyZXNzIG9mIGEgY2FsbFxcbiA0ODA6XFx0ICogQHNvY2s6IFRoZSBzb2NrZXQgb24gd2hpY2ggdGhlIGNhbGwgaXMgaW4gcHJvZ3Jlc3MuXFxuIDQ4MTpcXHQgKiBAY2FsbDogVGhlIGNhbGwgdG8gcXVlcnlcXG4gNDgyOlxcdCAqXFxuIDQ4MzpcXHQgKiBHZXQgYSByZWNvcmQgZm9yIHRoZSByZW1vdGUgcGVlciBpbiBhIGNhbGwuXFxuIDQ4NDpcXHQgKlxcbiA0ODU6XFx0ICogUmV0dXJuOiBUaGUgY2FsbCdzIHBlZXIgcmVjb3JkLlxcbiA0ODY6XFx0ICovXFxuIDQ4NzpcXHRzdHJ1Y3QgcnhycGNfcGVlciAqcnhycGNfa2VybmVsX2dldF9jYWxsX3BlZXIoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHJ4cnBjX2NhbGwgKmNhbGwpXFxuIDQ4ODpcXHR7XFxuIDQ4OTpcXHRcXHRyZXR1cm4gcnhycGNfZ2V0X3BlZXIoY2FsbC1cXHUwMDNlcGVlciwgcnhycGNfcGVlcl9nZXRfYXBwbGljYXRpb24pO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwMjo1OToyNi45NjAyMDI0MTNaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTcyNjAzMzA2NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKipOYXZpZ2F0aW5nIHRoZSBDb2RlYmFzZSoqXG5cbk9rYXksIGhlcmUncyB0aGUgc2l0dWF0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIGNoYW5nZSwgdGhpcyBwYXJ0aWN1bGFyIGNvbW1pdCwgcmVhbGx5IHF1aWNrbHkuIFRoZSBmaXJzdCB0aGluZyBJIGFsd2F5cyBkbyBpcyB0cmFjZSBiYWNrIHRoZSBjb250ZXh0LiBXaGF0IHdhcyB0aGUgKmludGVudCogYmVoaW5kIHRoaXMgY29kZT8gSSBuZWVkIHRvIGpvZyBteSBtZW1vcnksIGFuZCBvZnRlbiB0aGUgYmVzdCBwbGFjZSB0byBzdGFydCBpcyB0aGUgY29tbWl0IG1lc3NhZ2UuIFwiR2l0IGxvZ1wiIGlzIHRoZSBnby10byB0b29sIGZvciB0aGF0LCBpdCdzIG15IGZpcnN0IHN0b3AgdG8gZ2V0IGEgaGlnaC1sZXZlbCBvdmVydmlldy4gRnJvbSB0aGUgY29tbWl0IG1lc3NhZ2UgSSBjYW4gdGhlbiBkZWR1Y2Ugd2hhdCBwcm9ibGVtcyB0aGUgY29kZSBhaW1zIHRvIHNvbHZlLCB3aGF0IGRlc2lnbiBkZWNpc2lvbnMgd2VyZSBpbiBwbGF5LCBvciBhbnkgb3RoZXIgcGVydGluZW50IGluZm9ybWF0aW9uLiBJdCBnaXZlcyBtZSBhIHN0YXJ0aW5nIHBvaW50IGZyb20gd2hpY2ggdG8gYW5hbHl6ZSB0aGlzIHNwZWNpZmljIHBpZWNlIG9mIHRoZSBjb2RlYmFzZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI5NDMsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDAyOjU5OjI4LjY4NjIzOTQzNloiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTMxNjI1OTA5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInBlZXJfaGFzaF9sb2NrXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9yeHJwY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvcnhycGMvYXItaW50ZXJuYWwuaD04Nj1zdHJ1Y3QgcnhycGNfbmV0IHtcXG4tLVxcbm5ldC9yeHJwYy9hci1pbnRlcm5hbC5oLTEwOC1cXHRERUNMQVJFX0hBU0hUQUJMRVxcdChwZWVyX2hhc2gsIDEwKTtcXG5uZXQvcnhycGMvYXItaW50ZXJuYWwuaDoxMDk6XFx0c3BpbmxvY2tfdFxcdFxcdHBlZXJfaGFzaF9sb2NrO1xcdC8qIExvY2sgZm9yIC1cXHUwMDNlcGVlcl9oYXNoICovXFxubmV0L3J4cnBjL2FyLWludGVybmFsLmgtMTEwLVxcbi0tXFxubmV0L3J4cnBjL25ldF9ucy5jPTM0PXN0YXRpYyBfX25ldF9pbml0IGludCByeHJwY19pbml0X25ldChzdHJ1Y3QgbmV0ICpuZXQpXFxuLS1cXG5uZXQvcnhycGMvbmV0X25zLmMtNjItXFx0aGFzaF9pbml0KHJ4bmV0LVxcdTAwM2VwZWVyX2hhc2gpO1xcbm5ldC9yeHJwYy9uZXRfbnMuYzo2MzpcXHRzcGluX2xvY2tfaW5pdChcXHUwMDI2cnhuZXQtXFx1MDAzZXBlZXJfaGFzaF9sb2NrKTtcXG5uZXQvcnhycGMvbmV0X25zLmMtNjQtXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIEFSUkFZX1NJWkUocnhuZXQtXFx1MDAzZXBlZXJfa2VlcGFsaXZlKTsgaSsrKVxcbi0tXFxubmV0L3J4cnBjL3BlZXJfZXZlbnQuYz0yNTg9c3RhdGljIHZvaWQgcnhycGNfcGVlcl9rZWVwYWxpdmVfZGlzcGF0Y2goc3RydWN0IHJ4cnBjX25ldCAqcnhuZXQsXFxuLS1cXG5uZXQvcnhycGMvcGVlcl9ldmVudC5jLTI2OC1cXG5uZXQvcnhycGMvcGVlcl9ldmVudC5jOjI2OTpcXHRzcGluX2xvY2tfYmgoXFx1MDAyNnJ4bmV0LVxcdTAwM2VwZWVyX2hhc2hfbG9jayk7XFxubmV0L3J4cnBjL3BlZXJfZXZlbnQuYy0yNzAtXFxuLS1cXG5uZXQvcnhycGMvcGVlcl9ldmVudC5jLTI3OS1cXHRcXHR1c2UgPSBfX3J4cnBjX3VzZV9sb2NhbChwZWVyLVxcdTAwM2Vsb2NhbCwgcnhycGNfbG9jYWxfdXNlX3BlZXJfa2VlcGFsaXZlKTtcXG5uZXQvcnhycGMvcGVlcl9ldmVudC5jOjI4MDpcXHRcXHRzcGluX3VubG9ja19iaChcXHUwMDI2cnhuZXQtXFx1MDAzZXBlZXJfaGFzaF9sb2NrKTtcXG5uZXQvcnhycGMvcGVlcl9ldmVudC5jLTI4MS1cXG4tLVxcbm5ldC9yeHJwYy9wZWVyX2V2ZW50LmMtMjk5LVxcdFxcdFxcdHNsb3QgXFx1MDAyNj0gbWFzaztcXG5uZXQvcnhycGMvcGVlcl9ldmVudC5jOjMwMDpcXHRcXHRcXHRzcGluX2xvY2tfYmgoXFx1MDAyNnJ4bmV0LVxcdTAwM2VwZWVyX2hhc2hfbG9jayk7XFxubmV0L3J4cnBjL3BlZXJfZXZlbnQuYy0zMDEtXFx0XFx0XFx0bGlzdF9hZGRfdGFpbChcXHUwMDI2cGVlci1cXHUwMDNla2VlcGFsaXZlX2xpbmssXFxubmV0L3J4cnBjL3BlZXJfZXZlbnQuYy0zMDItXFx0XFx0XFx0XFx0ICAgICAgXFx1MDAyNnJ4bmV0LVxcdTAwM2VwZWVyX2tlZXBhbGl2ZVtzbG90IFxcdTAwMjYgbWFza10pO1xcbm5ldC9yeHJwYy9wZWVyX2V2ZW50LmM6MzAzOlxcdFxcdFxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZyeG5ldC1cXHUwMDNlcGVlcl9oYXNoX2xvY2spO1xcbm5ldC9yeHJwYy9wZWVyX2V2ZW50LmMtMzA0LVxcdFxcdFxcdHJ4cnBjX3VudXNlX2xvY2FsKHBlZXItXFx1MDAzZWxvY2FsLCByeHJwY19sb2NhbF91bnVzZV9wZWVyX2tlZXBhbGl2ZSk7XFxuLS1cXG5uZXQvcnhycGMvcGVlcl9ldmVudC5jLTMwNi1cXHRcXHRyeHJwY19wdXRfcGVlcihwZWVyLCByeHJwY19wZWVyX3B1dF9rZWVwYWxpdmUpO1xcbm5ldC9yeHJwYy9wZWVyX2V2ZW50LmM6MzA3OlxcdFxcdHNwaW5fbG9ja19iaChcXHUwMDI2cnhuZXQtXFx1MDAzZXBlZXJfaGFzaF9sb2NrKTtcXG5uZXQvcnhycGMvcGVlcl9ldmVudC5jLTMwOC1cXHR9XFxubmV0L3J4cnBjL3BlZXJfZXZlbnQuYy0zMDktXFxubmV0L3J4cnBjL3BlZXJfZXZlbnQuYzozMTA6XFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNnJ4bmV0LVxcdTAwM2VwZWVyX2hhc2hfbG9jayk7XFxubmV0L3J4cnBjL3BlZXJfZXZlbnQuYy0zMTEtfVxcbi0tXFxubmV0L3J4cnBjL3BlZXJfZXZlbnQuYz0zMTY9dm9pZCByeHJwY19wZWVyX2tlZXBhbGl2ZV93b3JrZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbi0tXFxubmV0L3J4cnBjL3BlZXJfZXZlbnQuYy0zMzktXFx0ICovXFxubmV0L3J4cnBjL3BlZXJfZXZlbnQuYzozNDA6XFx0c3Bpbl9sb2NrX2JoKFxcdTAwMjZyeG5ldC1cXHUwMDNlcGVlcl9oYXNoX2xvY2spO1xcbm5ldC9yeHJwYy9wZWVyX2V2ZW50LmMtMzQxLVxcdGxpc3Rfc3BsaWNlX2luaXQoXFx1MDAyNnJ4bmV0LVxcdTAwM2VwZWVyX2tlZXBhbGl2ZV9uZXcsIFxcdTAwMjZjb2xsZWN0b3IpO1xcbi0tXFxubmV0L3J4cnBjL3BlZXJfZXZlbnQuYy0zNTEtXFx0YmFzZSA9IG5vdztcXG5uZXQvcnhycGMvcGVlcl9ldmVudC5jOjM1MjpcXHRzcGluX3VubG9ja19iaChcXHUwMDI2cnhuZXQtXFx1MDAzZXBlZXJfaGFzaF9sb2NrKTtcXG5uZXQvcnhycGMvcGVlcl9ldmVudC5jLTM1My1cXG4tLVxcbm5ldC9yeHJwYy9wZWVyX29iamVjdC5jPTMxNz12b2lkIHJ4cnBjX25ld19pbmNvbWluZ19wZWVyKHN0cnVjdCByeHJwY19sb2NhbCAqbG9jYWwsIHN0cnVjdCByeHJwY19wZWVyICpwZWVyKVxcbi0tXFxubmV0L3J4cnBjL3BlZXJfb2JqZWN0LmMtMzI0LVxcbm5ldC9yeHJwYy9wZWVyX29iamVjdC5jOjMyNTpcXHRzcGluX2xvY2soXFx1MDAyNnJ4bmV0LVxcdTAwM2VwZWVyX2hhc2hfbG9jayk7XFxubmV0L3J4cnBjL3BlZXJfb2JqZWN0LmMtMzI2LVxcdGhhc2hfYWRkX3JjdShyeG5ldC1cXHUwMDNlcGVlcl9oYXNoLCBcXHUwMDI2cGVlci1cXHUwMDNlaGFzaF9saW5rLCBoYXNoX2tleSk7XFxubmV0L3J4cnBjL3BlZXJfb2JqZWN0LmMtMzI3LVxcdGxpc3RfYWRkX3RhaWwoXFx1MDAyNnBlZXItXFx1MDAzZWtlZXBhbGl2ZV9saW5rLCBcXHUwMDI2cnhuZXQtXFx1MDAzZXBlZXJfa2VlcGFsaXZlX25ldyk7XFxubmV0L3J4cnBjL3BlZXJfb2JqZWN0LmM6MzI4OlxcdHNwaW5fdW5sb2NrKFxcdTAwMjZyeG5ldC1cXHUwMDNlcGVlcl9oYXNoX2xvY2spO1xcbm5ldC9yeHJwYy9wZWVyX29iamVjdC5jLTMyOS19XFxuLS1cXG5uZXQvcnhycGMvcGVlcl9vYmplY3QuYz0zMzQ9c3RydWN0IHJ4cnBjX3BlZXIgKnJ4cnBjX2xvb2t1cF9wZWVyKHN0cnVjdCByeHJwY19sb2NhbCAqbG9jYWwsXFxuLS1cXG5uZXQvcnhycGMvcGVlcl9vYmplY3QuYy0zNTktXFxubmV0L3J4cnBjL3BlZXJfb2JqZWN0LmM6MzYwOlxcdFxcdHNwaW5fbG9ja19iaChcXHUwMDI2cnhuZXQtXFx1MDAzZXBlZXJfaGFzaF9sb2NrKTtcXG5uZXQvcnhycGMvcGVlcl9vYmplY3QuYy0zNjEtXFxuLS1cXG5uZXQvcnhycGMvcGVlcl9vYmplY3QuYy0zNzItXFxubmV0L3J4cnBjL3BlZXJfb2JqZWN0LmM6MzczOlxcdFxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZyeG5ldC1cXHUwMDNlcGVlcl9oYXNoX2xvY2spO1xcbm5ldC9yeHJwYy9wZWVyX29iamVjdC5jLTM3NC1cXG4tLVxcbm5ldC9yeHJwYy9wZWVyX29iamVjdC5jPTQxNz1zdGF0aWMgdm9pZCBfX3J4cnBjX3B1dF9wZWVyKHN0cnVjdCByeHJwY19wZWVyICpwZWVyKVxcbi0tXFxubmV0L3J4cnBjL3BlZXJfb2JqZWN0LmMtNDIyLVxcbm5ldC9yeHJwYy9wZWVyX29iamVjdC5jOjQyMzpcXHRzcGluX2xvY2tfYmgoXFx1MDAyNnJ4bmV0LVxcdTAwM2VwZWVyX2hhc2hfbG9jayk7XFxubmV0L3J4cnBjL3BlZXJfb2JqZWN0LmMtNDI0LVxcdGhhc2hfZGVsX3JjdShcXHUwMDI2cGVlci1cXHUwMDNlaGFzaF9saW5rKTtcXG5uZXQvcnhycGMvcGVlcl9vYmplY3QuYy00MjUtXFx0bGlzdF9kZWxfaW5pdChcXHUwMDI2cGVlci1cXHUwMDNla2VlcGFsaXZlX2xpbmspO1xcbm5ldC9yeHJwYy9wZWVyX29iamVjdC5jOjQyNjpcXHRzcGluX3VubG9ja19iaChcXHUwMDI2cnhuZXQtXFx1MDAzZXBlZXJfaGFzaF9sb2NrKTtcXG5uZXQvcnhycGMvcGVlcl9vYmplY3QuYy00MjctXFxuLS1cXG5uZXQvcnhycGMvcGVlcl9vYmplY3QuYz00NTI9dm9pZCByeHJwY19kZXN0cm95X2FsbF9wZWVycyhzdHJ1Y3QgcnhycGNfbmV0ICpyeG5ldClcXG4tLVxcbm5ldC9yeHJwYy9wZWVyX29iamVjdC5jLTQ2MC1cXHQgKi9cXG5uZXQvcnhycGMvcGVlcl9vYmplY3QuYzo0NjE6XFx0c3Bpbl9sb2NrX2JoKFxcdTAwMjZyeG5ldC1cXHUwMDNlcGVlcl9oYXNoX2xvY2spO1xcbm5ldC9yeHJwYy9wZWVyX29iamVjdC5jLTQ2Mi1cXG4tLVxcbm5ldC9yeHJwYy9wZWVyX29iamVjdC5jLTQ3NC1cXG5uZXQvcnhycGMvcGVlcl9vYmplY3QuYzo0NzU6XFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNnJ4bmV0LVxcdTAwM2VwZWVyX2hhc2hfbG9jayk7XFxubmV0L3J4cnBjL3BlZXJfb2JqZWN0LmMtNDc2LX1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDI6NTk6MjguODE3ODcwOTE1WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjM2ODA4MTQ5MzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIFRoaXMgUGF0Y2ggZm9yIEZ1enppbmcgUG90ZW50aWFsKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBwYXRjaCBkb3duIGZyb20gYSBmdXp6aW5nIHBlcnNwZWN0aXZlLiBJdCdzIHRhcmdldGluZyB0aGUgYG5ldC9yeHJwY2Agc3Vic3lzdGVtLCB3aGljaCBpcyBBRl9SWFJQQywgYSBuZXR3b3JraW5nIHByb3RvY29sLiBGaXJzdCwgYSBzYW5pdHkgY2hlY2s6IGNhbiBzeXprYWxsZXIgZXZlbiByZWFjaCBpdD8gWWVwLCBpdCdzIHNvY2tldC1iYXNlZCAoYHNvY2tldChBRl9SWFJQQywgLi4uKWApIGFuZCBwbGF5cyBuaWNlbHkgd2l0aCBuZXR3b3JrIG5hbWVzcGFjZXMgKGB1bnNoYXJlKENMT05FX05FV05FVClgKSwgYW5kIHN5emthbGxlcidzIGdvdCB0aGUgbmFtZXNwYWNlIGNsZWFudXAgZG93biBwYXQgd2l0aCBgcHJlX2V4aXRgIGFuZCBgZXhpdGAgcm91dGluZXMuXG5cblRoZSBwYXRjaCBpdHNlbGYgaXMgdG91Y2hpbmcgc29tZSBpbnRlcmVzdGluZyBhcmVhczogYHJ4cnBjX3ByZV9leGl0X25ldGAsIGEgbmV3IGBwcmVfZXhpdGAgaGFuZGxlciwgYHJ4cnBjX2V4aXRfbmV0YCwgYW5kIGByeHJwY19kZXN0cm95X2FsbF9wZWVyc2AuIFRoYXQncyBhIHN0cm9uZyBzaWduYWwsIGVzcGVjaWFsbHkgd2hlbiBjb25zaWRlcmluZyBsaWZlY3ljbGUgbWFuYWdlbWVudCB3aXRoaW4gbmV0d29yayBuYW1lc3BhY2VzIGFuZCBzeW5jaHJvbml6YXRpb24gaXNzdWVzIHdpdGhpbiBgcnhycGNfZGVzdHJveV9hbGxfcGVlcnNgLCB3aGljaCBvZnRlbiBsZWFkcyB0byBpbnRlcmVzdGluZyByYWNlIGNvbmRpdGlvbnMuXG5cbk5vdywgYWNjZXNzaWJpbGl0eS4gVGhpcyBpcyBhIGZ1bGx5IHNvZnR3YXJlLWJhc2VkIHByb3RvY29sLCB3aGljaCBtZWFucyBpdCBzaG91bGQgYmUgcmVhY2hhYmxlIGluIFFFTVUgb3IgR0NFIGVudmlyb25tZW50cyDigJMgbm8gaGFyZHdhcmUgZGVwZW5kZW5jaWVzLCB3aGljaCBpcyBncmVhdCBmb3Igb3VyIHB1cnBvc2VzLlxuXG5JcyB0aGlzIHdvcnRoIHRoZSBlZmZvcnQ/IEFic29sdXRlbHkuIENvcmUgbmV0d29ya2luZyBwcm90b2NvbD8gQ2hlY2suIExpZmVjeWNsZSBtYW5hZ2VtZW50IHdpdGhpbiBuZXRucz8gQ2hlY2ssIGFuZCB0aGF0J3Mgb2Z0ZW4gYSB0cmVhc3VyZSB0cm92ZSBmb3IgZmluZGluZyBidWdzLCBsaWtlIG5ldG5zIGV4aXQgYnVncyBhbmQgc29ja2V0IGNsZWFudXAgaXNzdWVzLiBUaGUgdXNlIG9mIGBwcmVfZXhpdGAgaXMgcGFydGljdWxhcmx5IGludGVyZXN0aW5nLlxuXG5CZWZvcmUgd2UgcHJvY2VlZCwgbGV0J3MgcXVpY2tseSBjaGVjayB0aGUgcmVxdWlyZWQgY29uZmlndXJhdGlvbnMuIFdlJ2xsIG5lZWQgYEFGX1JYUlBDYCAoUnhSUEMgc2Vzc2lvbiBzb2NrZXRzLCB3aGljaCBkZXBlbmRzIG9uIGBJTkVUYCkgYW5kIGBJTkVUYCAoc3RhbmRhcmQgSVB2NCBuZXR3b3JraW5nKS4gQW55IG90aGVyIGRlcGVuZGVuY2llcz8gTGV0J3MgcXVpY2tseSBzY2FuIHRoZSBgbmV0L3J4cnBjL01ha2VmaWxlYCB0byBiZSBzdXJlLCBhbmQgbm8gb3RoZXIgY29uZmlncyB3ZXJlIGZvdW5kLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDg5OSwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM5MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwMjo1OTozMi40OTg2ODkwNDdaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA0ODQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9yeHJwYy9NYWtlZmlsZVwiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG4gICAyOlxcdCNcXG4gICAzOlxcdCMgTWFrZWZpbGUgZm9yIExpbnV4IGtlcm5lbCBSeFJQQ1xcbiAgIDQ6XFx0I1xcbiAgIDU6XFx0XFxuICAgNjpcXHRvYmotJChDT05GSUdfQUZfUlhSUEMpICs9IHJ4cnBjLm9cXG4gICA3OlxcdFxcbiAgIDg6XFx0cnhycGMteSA6PSBcXFxcXFxuICAgOTpcXHRcXHRhZl9yeHJwYy5vIFxcXFxcXG4gIDEwOlxcdFxcdGNhbGxfYWNjZXB0Lm8gXFxcXFxcbiAgMTE6XFx0XFx0Y2FsbF9ldmVudC5vIFxcXFxcXG4gIDEyOlxcdFxcdGNhbGxfb2JqZWN0Lm8gXFxcXFxcbiAgMTM6XFx0XFx0Y2FsbF9zdGF0ZS5vIFxcXFxcXG4gIDE0OlxcdFxcdGNvbm5fY2xpZW50Lm8gXFxcXFxcbiAgMTU6XFx0XFx0Y29ubl9ldmVudC5vIFxcXFxcXG4gIDE2OlxcdFxcdGNvbm5fb2JqZWN0Lm8gXFxcXFxcbiAgMTc6XFx0XFx0Y29ubl9zZXJ2aWNlLm8gXFxcXFxcbiAgMTg6XFx0XFx0aW5wdXQubyBcXFxcXFxuICAxOTpcXHRcXHRpbnB1dF9yYWNrLm8gXFxcXFxcbiAgMjA6XFx0XFx0aW5zZWN1cmUubyBcXFxcXFxuICAyMTpcXHRcXHRpb190aHJlYWQubyBcXFxcXFxuICAyMjpcXHRcXHRrZXkubyBcXFxcXFxuICAyMzpcXHRcXHRsb2NhbF9ldmVudC5vIFxcXFxcXG4gIDI0OlxcdFxcdGxvY2FsX29iamVjdC5vIFxcXFxcXG4gIDI1OlxcdFxcdG1pc2MubyBcXFxcXFxuICAyNjpcXHRcXHRuZXRfbnMubyBcXFxcXFxuICAyNzpcXHRcXHRvb2IubyBcXFxcXFxuICAyODpcXHRcXHRvdXRwdXQubyBcXFxcXFxuICAyOTpcXHRcXHRwZWVyX2V2ZW50Lm8gXFxcXFxcbiAgMzA6XFx0XFx0cGVlcl9vYmplY3QubyBcXFxcXFxuICAzMTpcXHRcXHRyZWN2bXNnLm8gXFxcXFxcbiAgMzI6XFx0XFx0cnR0Lm8gXFxcXFxcbiAgMzM6XFx0XFx0c2VjdXJpdHkubyBcXFxcXFxuICAzNDpcXHRcXHRzZW5kbXNnLm8gXFxcXFxcbiAgMzU6XFx0XFx0c2VydmVyX2tleS5vIFxcXFxcXG4gIDM2OlxcdFxcdHNrYnVmZi5vIFxcXFxcXG4gIDM3OlxcdFxcdHR4YnVmLm8gXFxcXFxcbiAgMzg6XFx0XFx0dXRpbHMub1xcbiAgMzk6XFx0XFxuICA0MDpcXHRyeHJwYy0kKENPTkZJR19QUk9DX0ZTKSArPSBwcm9jLm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDI6NTk6MzIuNDk4Nzk1OTk2WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjM0NzUzMDMzNDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIEFGX1JYUlBDIE5ldG5zL1BlZXIgTGlmZWN5Y2xlIGZvciBGb2N1cyBTeW1ib2xzKipcblxuT2theSwgbGV0J3MgemVybyBpbiBvbiB0aGVzZSBmb2N1cyBzeW1ib2xzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wYWN0IG9mIHRoZXNlIG1vZGlmaWNhdGlvbnMuIEZyb20gd2hhdCBJIHNlZSwgdGhlIHByaW1hcnkgZnVuY3Rpb25zIGFmZmVjdGVkIGFyZSBgcnhycGNfcHJlX2V4aXRfbmV0YCwgYHJ4cnBjX2V4aXRfbmV0YCwgYW5kIGByeHJwY19kZXN0cm95X2FsbF9wZWVyc2AuIFRoZXNlIHNlZW0gdG8gYmUgdGhlIGNvcmUgb2YgdGhlIG5ldCBuYW1lc3BhY2UgYW5kIHBlZXIgbGlmZWN5Y2xlIGNoYW5nZXMgd2l0aGluIEFGX1JYUlBDLlxuXG5gcnhycGNfZGVzdHJveV9hbGxfcGVlcnNgIGluIHBhcnRpY3VsYXIgaXMgaW50ZXJlc3RpbmcsIGJlaW5nIG5vbi1zdGF0aWMgaW4gYHBlZXJfb2JqZWN0LmNgIGFuZCBjYWxsZWQgYnkgYHJ4cnBjX2V4aXRfbmV0YC4gIE15IGludHVpdGlvbiB0ZWxscyBtZSB0byBkcmlsbCBkb3duIGZ1cnRoZXIgaW50byB0aGUgcmVsYXRpb25zaGlwcyBhbmQgY2FsbC1ncmFwaCBoZXJlLiAgSSBuZWVkIHRvIHNlZSBpZiBpdCdzIGV4cG9ydGVkIG9yIHVzZWQgZWxzZXdoZXJlLiBUaGVuLCBgcnhycGNfcHJlX2V4aXRfbmV0YCBhbmQgYHJ4cnBjX2V4aXRfbmV0YCBhcmUgc3RhdGljIGZ1bmN0aW9ucyByZWdpc3RlcmVkIHRocm91Z2ggYHJ4cnBjX25ldF9vcHNgIOKAkyB0aGF0IGNvbnRleHQgaXMgaW1wb3J0YW50LlxuXG5JIHNob3VsZCBhbHNvIHF1aWNrbHkgcmV2aWV3IG90aGVyIHJlbGV2YW50IGZ1bmN0aW9ucyB3aXRoaW4gQUZfUlhSUEMsIGxpa2UgYHJ4cnBjX2luaXRfbmV0YCwgYHJ4cnBjX2xvb2t1cF9wZWVyYCwgYF9fcnhycGNfcHV0X3BlZXJgLCBhbmQgYHJ4cnBjX25ld19pbmNvbWluZ19wZWVyYC4gQXJlIGFueSBvZiB0aGVzZSBpbmRpcmVjdGx5IGFmZmVjdGVkIGJ5IHRoZXNlIGNoYW5nZXMsIHBlcmhhcHMgdmlhIGRhdGEgc3RydWN0dXJlcyBvciBzaGFyZWQgcmVzb3VyY2VzP1xuXG5NeSBmb2N1cywgZm9yIHRoaXMgc3BlY2lmaWMgYW5hbHlzaXMsIHJlbWFpbnMgZmlybWx5IG9uIGByeHJwY19kZXN0cm95X2FsbF9wZWVyc2AsIGByeHJwY19leGl0X25ldGAsIGFuZCBgcnhycGNfcHJlX2V4aXRfbmV0YCwgYXMgdGhleSdyZSB0aGUgZGlyZWN0IHRhcmdldHMgYW5kIGVudHJ5IHBvaW50cyBmb3IgdGhpcyBjaGFuZ2VkIGxvZ2ljLiBJIHJlYWxseSBuZWVkIHRvIGNoZWNrIGlmIGByeHJwY19kZXN0cm95X2FsbF9wZWVyc2AgaXMgZGVjbGFyZWQgb3IgdXNlZCBieSBhbnkgaGVhZGVyIGZpbGVzLCBzcGVjaWZpY2FsbHkgaW4gYGFyLWludGVybmFsLmhgLCB0byBnYXVnZSBpdHMgZnVsbCBzY29wZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTYxNjksIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyODIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwMjo1OTozNS45NzQxMDIwNloiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjU2OTAyODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicnhycGNfZGVzdHJveV9hbGxfcGVlcnNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3J4cnBjXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9yeHJwYy9hci1pbnRlcm5hbC5oPTE0MjY9dm9pZCByeHJwY19uZXdfaW5jb21pbmdfcGVlcihzdHJ1Y3QgcnhycGNfbG9jYWwgKmxvY2FsLCBzdHJ1Y3QgcnhycGNfcGVlciAqcGVlcik7XFxubmV0L3J4cnBjL2FyLWludGVybmFsLmg6MTQyNzp2b2lkIHJ4cnBjX2Rlc3Ryb3lfYWxsX3BlZXJzKHN0cnVjdCByeHJwY19uZXQgKik7XFxubmV0L3J4cnBjL2FyLWludGVybmFsLmgtMTQyOC1zdHJ1Y3QgcnhycGNfcGVlciAqcnhycGNfZ2V0X3BlZXIoc3RydWN0IHJ4cnBjX3BlZXIgKiwgZW51bSByeHJwY19wZWVyX3RyYWNlKTtcXG4tLVxcbm5ldC9yeHJwYy9uZXRfbnMuYz0xMTY9c3RhdGljIF9fbmV0X2V4aXQgdm9pZCByeHJwY19leGl0X25ldChzdHJ1Y3QgbmV0ICpuZXQpXFxuLS1cXG5uZXQvcnhycGMvbmV0X25zLmMtMTE5LVxcbm5ldC9yeHJwYy9uZXRfbnMuYzoxMjA6XFx0cnhycGNfZGVzdHJveV9hbGxfcGVlcnMocnhuZXQpO1xcbm5ldC9yeHJwYy9uZXRfbnMuYy0xMjEtXFx0cnhycGNfZGVzdHJveV9hbGxfbG9jYWxzKHJ4bmV0KTtcXG4tLVxcbm5ldC9yeHJwYy9wZWVyX29iamVjdC5jPTQzND12b2lkIHJ4cnBjX3B1dF9wZWVyKHN0cnVjdCByeHJwY19wZWVyICpwZWVyLCBlbnVtIHJ4cnBjX3BlZXJfdHJhY2Ugd2h5KVxcbi0tXFxubmV0L3J4cnBjL3BlZXJfb2JqZWN0LmMtNDUxLSAqL1xcbm5ldC9yeHJwYy9wZWVyX29iamVjdC5jOjQ1Mjp2b2lkIHJ4cnBjX2Rlc3Ryb3lfYWxsX3BlZXJzKHN0cnVjdCByeHJwY19uZXQgKnJ4bmV0KVxcbm5ldC9yeHJwYy9wZWVyX29iamVjdC5jLTQ1My17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDAyOjU5OjM2LjAzOTc5NzM0WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQzNTMyNjMwNjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgUnhSUEMgTmV0d29yayBOYW1lc3BhY2UgSGFuZGxpbmcqKlxuXG5Pa2F5LCBsZXQncyBzZWUsIHdoYXQgd2UndmUgZ290IGhlcmUuIEZpcnN0LCBJIG5lZWQgdG8gY29uZmlybSB0aGUga2V5IHN5bWJvbHMgaW52b2x2ZWQgYW5kIGhvdyB0aGV5IGludGVyYWN0LiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byBrbm93IGFib3V0IGByeHJwY19kZXN0cm95X2FsbF9wZWVyc2AsIGByeHJwY19leGl0X25ldGAsIGFuZCBgcnhycGNfcHJlX2V4aXRfbmV0YC4gVGhlc2UgYXJlIHRoZSBjcnVjaWFsIGhvb2tzLCBzbyBsZXQncyBkb3VibGUtY2hlY2sgdGhlIGNvbmZpZ3MuIFdlJ3JlIGRlYWxpbmcgd2l0aCBgQUZfUlhSUENgIGZvciB0aGUgUnhSUEMgc2Vzc2lvbiBzb2NrZXRzLCB3aGljaCwgb2YgY291cnNlLCByZWxpZXMgb24gYElORVRgLiBBbmQsIG1vc3QgaW1wb3J0YW50bHksIGBORVRfTlNgIGlzIGdvaW5nIHRvIGJlIHBpdm90YWwgYmVjYXVzZSwgZnJvbSB3aGF0IEkga25vdywgcGVybmV0IG9wZXJhdGlvbnMgYXJlIGxpbmtlZCB0byBuZXR3b3JrIG5hbWVzcGFjZSBzdXBwb3J0LlxuXG5Ob3csIGxldCdzIGRyaWxsIGRvd24gYW5kIGNvbmZpcm0gdGhhdCBgQ09ORklHX05FVF9OU2AgaXMgZW5hYmxlZC4gQWgsIHllcywgdGhlcmUgaXQgaXMhIFdpdGhvdXQgYENPTkZJR19ORVRfTlNgLCBgcnhycGNfZXhpdF9uZXRgIHdvdWxkIG9ubHkgZmlyZSBvbiBtb2R1bGUgdW5sb2FkIG9yIHN5c3RlbSBzaHV0ZG93biwgYSBtdWNoIGxlc3MgaW50ZXJlc3Rpbmcgc2NlbmFyaW8uIEhvd2V2ZXIsIHdpdGggYENPTkZJR19ORVRfTlM9eWAsIGl0J3MgY2FsbGVkIGV2ZXJ5IHRpbWUgYSBuZXR3b3JrIG5hbWVzcGFjZSBpcyBkZXN0cm95ZWQuIFRoYXQncyBhIHNpZ25pZmljYW50IGRpZmZlcmVuY2UgYW5kIGRlZmluaXRlbHkgYWxpZ25zIHdpdGggc3l6a2FsbGVyJ3MgdHJpZ2dlci4gVGhlcmVmb3JlLCBpdCBpcyBjbGVhciB0aGF0IHdlIGhhdmUgYSBkZXBlbmRlbmN5IG9uIGBBRl9SWFJQQ2AsIGBJTkVUYCwgYW5kIGBORVRfTlNgLlxuXG5GaW5hbGx5LCBqdXN0IHRvIGJlIGFic29sdXRlbHkgY2VydGFpbiwgbGV0J3MgcnVuIHRocm91Z2ggdGhlc2UgaW5zdHJ1Y3Rpb25zIGFnYWluOlxuXG4qICAgKipXb3J0aEZ1enppbmc6IHRydWUqKiDigJMgT2J2aW91cy4gVGhpcyBtZXJpdHMgZGV0YWlsZWQgaW52ZXN0aWdhdGlvbi5cbiogICAqKkVuYWJsZUNvbmZpZ3M6IFxcW1wiQUZcXF9SWFJQQ1wiLCBcIklORVRcIiwgXCJORVRcXF9OU1wiXFxdKiog4oCTIFllcywgdGhhdCdzIHdoYXQgd2UgbmVlZC5cbiogICAqKkZvY3VzU3ltYm9sczogXFxbXCJyeHJwY1xcX3ByZVxcX2V4aXRcXF9uZXRcIiwgXCJyeHJwY1xcX2V4aXRcXF9uZXRcIiwgXCJyeHJwY1xcX2Rlc3Ryb3lcXF9hbGxcXF9wZWVyc1wiXFxdKiog4oCTIENvbmZpcm1lZC4gVGhlc2Ugc3ltYm9scyBhcmUgdGhlIHByZWNpc2UgcG9pbnRzIG9mIGludGVyZXN0LlxuKiAgICoqUmVhc29uaW5nOiBDb25jaXNlIGV4cGxhbmF0aW9uIG9mIHRoZSB2ZXJkaWN0LioqIOKAkyBHb29kIVxuXG5Pa2F5LCB0aW1lIHRvIHN1Ym1pdCB0aGVzZSBmaW5kaW5ncyB0byBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzIxOCwiT3V0cHV0VG9rZW5zIjoxNzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDI6NTk6NDAuMzkzMDYzMzkzWiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM0MTg3NjQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJBRl9SWFJQQ1wiLFxuICAgIFwiSU5FVFwiLFxuICAgIFwiTkVUX05TXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwicnhycGNfcHJlX2V4aXRfbmV0XCIsXG4gICAgXCJyeHJwY19leGl0X25ldFwiLFxuICAgIFwicnhycGNfZGVzdHJveV9hbGxfcGVlcnNcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgUnhSUEMgbmV0d29yayBuYW1lc3BhY2UgdGVhcmRvd24gbGlmZWN5Y2xlIGJ5IHNwbGl0dGluZyBuZXRucyBjbGVhbnVwIGludG8gcHJlX2V4aXQgYW5kIGV4aXQgaGFuZGxlcnMgKHJ4cnBjX3ByZV9leGl0X25ldCBhbmQgcnhycGNfZXhpdF9uZXQpIGFuZCBhZGRzIGxvY2tpbmcgKHBlZXJfaGFzaF9sb2NrKSBpbiByeHJwY19kZXN0cm95X2FsbF9wZWVycyB0byBwcmV2ZW50IHVzZS1hZnRlci1mcmVlIGNvbmRpdGlvbnMgZHVyaW5nIHBlZXIgaGFzaCB0YWJsZSB0cmF2ZXJzYWwuIFRoZXNlIGNoYW5nZXMgdG91Y2ggcmVhY2hhYmxlIG5ldHdvcmtpbmcgY29kZSB0aGF0IGlzIGV4ZXJjaXNlZCBkdXJpbmcgbmV0bnMgbGlmZWN5Y2xlIGFuZCBBRl9SWFJQQyBzb2NrZXQgb3BlcmF0aW9ucywgbWFraW5nIGl0IHdvcnRod2hpbGUgdG8gZnV6ei5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJBRl9SWFJQQ1wiLFxuICAgIFwiSU5FVFwiLFxuICAgIFwiTkVUX05TXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwicnhycGNfcHJlX2V4aXRfbmV0XCIsXG4gICAgXCJyeHJwY19leGl0X25ldFwiLFxuICAgIFwicnhycGNfZGVzdHJveV9hbGxfcGVlcnNcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgUnhSUEMgbmV0d29yayBuYW1lc3BhY2UgdGVhcmRvd24gbGlmZWN5Y2xlIGJ5IHNwbGl0dGluZyBuZXRucyBjbGVhbnVwIGludG8gcHJlX2V4aXQgYW5kIGV4aXQgaGFuZGxlcnMgKHJ4cnBjX3ByZV9leGl0X25ldCBhbmQgcnhycGNfZXhpdF9uZXQpIGFuZCBhZGRzIGxvY2tpbmcgKHBlZXJfaGFzaF9sb2NrKSBpbiByeHJwY19kZXN0cm95X2FsbF9wZWVycyB0byBwcmV2ZW50IHVzZS1hZnRlci1mcmVlIGNvbmRpdGlvbnMgZHVyaW5nIHBlZXIgaGFzaCB0YWJsZSB0cmF2ZXJzYWwuIFRoZXNlIGNoYW5nZXMgdG91Y2ggcmVhY2hhYmxlIG5ldHdvcmtpbmcgY29kZSB0aGF0IGlzIGV4ZXJjaXNlZCBkdXJpbmcgbmV0bnMgbGlmZWN5Y2xlIGFuZCBBRl9SWFJQQyBzb2NrZXQgb3BlcmF0aW9ucywgbWFraW5nIGl0IHdvcnRod2hpbGUgdG8gZnV6ei5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDI6NTk6NDAuNTI3MjU4MzAyWiIsIlNlcSI6MTksIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTkwNjkxMTA3NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDAyOjU5OjQwLjUyNzY5ODc4MloiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjE5OTA2NDY2MjM1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgcGVybmV0IG5hbWVzcGFjZSBleGl0IGNhbGxiYWNrcyBpbiBBRl9SWFJQQyAoc3BsaXR0aW5nIHRlYXJkb3duIGJldHdlZW4gcHJlX2V4aXQgYW5kIGV4aXQpIGFuZCBhZGRzIHNwaW5sb2NrIHN5bmNocm9uaXphdGlvbiAocGVlcl9oYXNoX2xvY2spIGluIHJ4cnBjX2Rlc3Ryb3lfYWxsX3BlZXJzKCkgdG8gcHJvdGVjdCBhZ2FpbnN0IGNvbmN1cnJlbnQgdW5saW5raW5nIGFuZCB1c2UtYWZ0ZXItZnJlZS5cXG5cXG5ObyBuZXcgbWVtb3J5IGFsbG9jYXRpb25zLCB1bmluaXRpYWxpemVkIHZhcmlhYmxlIHVzZXMsIHVzZXItY29weSBvcGVyYXRpb25zLCBvciBhbHRlcmVkIGRhdGEtcGFyc2luZy9idWZmZXItbGVuZ3RoIGxvZ2ljIGFyZSBpbnRyb2R1Y2VkLiBUaGUgcG90ZW50aWFsIGlzc3VlcyBhZGRyZXNzZWQgb3IgaW50cm9kdWNlZCBieSB0aGlzIHBhdGNoIHJlbGF0ZSBleGNsdXNpdmVseSB0byB0ZWFyZG93biBvcmRlcmluZywgc3luY2hyb25pemF0aW9uLCBsb2NraW5nLCBhbmQgdXNlLWFmdGVyLWZyZWUsIGFsbCBvZiB3aGljaCBhcmUgY292ZXJlZCBieSBzdGFuZGFyZCBzYW5pdGl6ZXJzIChLQVNBTiwgTE9DS0RFUCkuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgZTI1ZDIxOWM5OGQ3NWNmNzY4NDhjMTY5YzFiZjNkZDFmZGFjYzE2MFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgU2VwIDggMDI6NTk6MDggMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvcnhycGMvbmV0X25zLmMgYi9uZXQvcnhycGMvbmV0X25zLmNcbmluZGV4IDlhOTgzNDE0NWU4MWUuLjE2OTExNjczNTM2NjMgMTAwNjQ0XG4tLS0gYS9uZXQvcnhycGMvbmV0X25zLmNcbisrKyBiL25ldC9yeHJwYy9uZXRfbnMuY1xuQEAgLTk3LDEwICs5Nyw3IEBAIHN0YXRpYyBfX25ldF9pbml0IGludCByeHJwY19pbml0X25ldChzdHJ1Y3QgbmV0ICpuZXQpXG4gXHRyZXR1cm4gcmV0O1xuIH1cbiBcbi0vKlxuLSAqIENsZWFuIHVwIGEgcGVyLW5ldHdvcmsgbmFtZXNwYWNlIHJlY29yZC5cbi0gKi9cbi1zdGF0aWMgX19uZXRfZXhpdCB2b2lkIHJ4cnBjX2V4aXRfbmV0KHN0cnVjdCBuZXQgKm5ldClcbitzdGF0aWMgX19uZXRfZXhpdCB2b2lkIHJ4cnBjX3ByZV9leGl0X25ldChzdHJ1Y3QgbmV0ICpuZXQpXG4ge1xuIFx0c3RydWN0IHJ4cnBjX25ldCAqcnhuZXQgPSByeHJwY19uZXQobmV0KTtcbiBcbkBAIC0xMTEsMTQgKzEwOCwyNCBAQCBzdGF0aWMgX19uZXRfZXhpdCB2b2lkIHJ4cnBjX2V4aXRfbmV0KHN0cnVjdCBuZXQgKm5ldClcbiBcdHRpbWVyX2RlbGV0ZV9zeW5jKFx1MDAyNnJ4bmV0LVx1MDAzZXBlZXJfa2VlcGFsaXZlX3RpbWVyKTtcbiBcdHJ4cnBjX2Rlc3Ryb3lfYWxsX2NhbGxzKHJ4bmV0KTtcbiBcdHJ4cnBjX2Rlc3Ryb3lfYWxsX2Nvbm5lY3Rpb25zKHJ4bmV0KTtcbit9XG4rXG4rLypcbisgKiBDbGVhbiB1cCBhIHBlci1uZXR3b3JrIG5hbWVzcGFjZSByZWNvcmQuXG4rICovXG4rc3RhdGljIF9fbmV0X2V4aXQgdm9pZCByeHJwY19leGl0X25ldChzdHJ1Y3QgbmV0ICpuZXQpXG4re1xuK1x0c3RydWN0IHJ4cnBjX25ldCAqcnhuZXQgPSByeHJwY19uZXQobmV0KTtcbitcbiBcdHJ4cnBjX2Rlc3Ryb3lfYWxsX3BlZXJzKHJ4bmV0KTtcbiBcdHJ4cnBjX2Rlc3Ryb3lfYWxsX2xvY2FscyhyeG5ldCk7XG4gXHRwcm9jX3JlbW92ZShyeG5ldC1cdTAwM2Vwcm9jX25ldCk7XG4gfVxuIFxuIHN0cnVjdCBwZXJuZXRfb3BlcmF0aW9ucyByeHJwY19uZXRfb3BzID0ge1xuLVx0LmluaXRcdD0gcnhycGNfaW5pdF9uZXQsXG4tXHQuZXhpdFx0PSByeHJwY19leGl0X25ldCxcbi1cdC5pZFx0PSBcdTAwMjZyeHJwY19uZXRfaWQsXG4tXHQuc2l6ZVx0PSBzaXplb2Yoc3RydWN0IHJ4cnBjX25ldCksXG4rXHQuaW5pdFx0XHQ9IHJ4cnBjX2luaXRfbmV0LFxuK1x0LnByZV9leGl0XHQ9IHJ4cnBjX3ByZV9leGl0X25ldCxcbitcdC5leGl0XHRcdD0gcnhycGNfZXhpdF9uZXQsXG4rXHQuaWRcdFx0PSBcdTAwMjZyeHJwY19uZXRfaWQsXG4rXHQuc2l6ZVx0XHQ9IHNpemVvZihzdHJ1Y3QgcnhycGNfbmV0KSxcbiB9O1xuZGlmZiAtLWdpdCBhL25ldC9yeHJwYy9wZWVyX29iamVjdC5jIGIvbmV0L3J4cnBjL3BlZXJfb2JqZWN0LmNcbmluZGV4IGZhOWE0MDZlMTE2ODMuLmZhYTI5ODM2MzhiMmIgMTAwNjQ0XG4tLS0gYS9uZXQvcnhycGMvcGVlcl9vYmplY3QuY1xuKysrIGIvbmV0L3J4cnBjL3BlZXJfb2JqZWN0LmNcbkBAIC00NTQsNiArNDU0LDEyIEBAIHZvaWQgcnhycGNfZGVzdHJveV9hbGxfcGVlcnMoc3RydWN0IHJ4cnBjX25ldCAqcnhuZXQpXG4gXHRzdHJ1Y3QgcnhycGNfcGVlciAqcGVlcjtcbiBcdGludCBpO1xuIFxuK1x0LypcbitcdCAqIFByZXZlbnQgdXNlLWFmdGVyLWZyZWUgaWYgYSBwZWVyIGlzIGNvbmN1cnJlbnRseSB1bmxpbmtlZCBmcm9tIHRoZVxuK1x0ICogaGFzaCB0YWJsZSBhbmQgZnJlZWQgdmlhIFJDVSBkdXJpbmcgaXRlcmF0aW9uLlxuK1x0ICovXG4rXHRzcGluX2xvY2tfYmgoXHUwMDI2cnhuZXQtXHUwMDNlcGVlcl9oYXNoX2xvY2spO1xuK1xuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgSEFTSF9TSVpFKHJ4bmV0LVx1MDAzZXBlZXJfaGFzaCk7IGkrKykge1xuIFx0XHRpZiAoaGxpc3RfZW1wdHkoXHUwMDI2cnhuZXQtXHUwMDNlcGVlcl9oYXNoW2ldKSlcbiBcdFx0XHRjb250aW51ZTtcbkBAIC00NjUsNiArNDcxLDggQEAgdm9pZCByeHJwY19kZXN0cm95X2FsbF9wZWVycyhzdHJ1Y3QgcnhycGNfbmV0ICpyeG5ldClcbiBcdFx0XHQgICAgICAgXHUwMDI2cGVlci1cdTAwM2VzcngudHJhbnNwb3J0KTtcbiBcdFx0fVxuIFx0fVxuK1xuK1x0c3Bpbl91bmxvY2tfYmgoXHUwMDI2cnhuZXQtXHUwMDNlcGVlcl9oYXNoX2xvY2spO1xuIH1cbiBcbiAvKipcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDAyOjU5OjQwLjUyNzY5OTg2MloiLCJTZXEiOjIxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxNDU5OTEyMTIwNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipLTVNBTiBGdXp6aW5nIFNlc3Npb24gRXZhbHVhdGlvbioqXG5cbk9rYXksIGxldCdzIGFzc2VzcyB3aGV0aGVyIHRoaXMgcGF0Y2ggd2FycmFudHMgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLiBNeSBpbml0aWFsIGltcHJlc3Npb24sIGFmdGVyIHJldmlld2luZyB0aGUgY2hhbmdlcywgaXMgdGhhdCBpdCdzIGxpa2VseSAqbm90KiBhIHN0cm9uZyBjYW5kaWRhdGUuIFRoZSBwYXRjaCB0b3VjaGVzIGBuZXQvcnhycGMvbmV0X25zLmNgIGFuZCBgbmV0L3J4cnBjL3BlZXJfb2JqZWN0LmNgLiBJIHNlZSB0aGF0IGByeHJwY19leGl0X25ldGAgaGFzIGJlZW4gc3BsaXQgaW50byBgcnhycGNfcHJlX2V4aXRfbmV0YCBhbmQgYHJ4cnBjX2V4aXRfbmV0YCwgYSBjbGVhciBzaWduYWwgdGhhdCB0aGVyZSdzIGJlZW4gYXR0ZW50aW9uIHBhaWQgdG8gdGhlIHRlYXJkb3duIHNlcXVlbmNlLiBTcGVjaWZpY2FsbHksIGByeHJwY19wcmVfZXhpdF9uZXRgIG5vdyBoYW5kbGVzIHRoZSBtb3JlIGltbWVkaWF0ZSBjbGVhbnVwIHRhc2tzIGxpa2Ugc2V0dGluZyBgbGl2ZSA9IGZhbHNlYCwga2lsbGluZyB0aW1lcnMsIGFuZCBkZXN0cm95aW5nIGNhbGxzIGFuZCBjb25uZWN0aW9ucywgYmVmb3JlIGByeHJwY19leGl0X25ldGAgZGVhbHMgd2l0aCBwZWVycywgbG9jYWxzLCBhbmQgcHJvYyBlbnRyaWVzLiBUaGlzIGlzIHJlZ2lzdGVyZWQgdmlhIHRoZSBgcGVybmV0X29wZXJhdGlvbnNgIHN0cnVjdC5cblxuRnVydGhlcm1vcmUsIHdpdGhpbiBgcnhycGNfZGVzdHJveV9hbGxfcGVlcnNgLCBJJ3ZlIG9ic2VydmVkIHRoZSBhZGRpdGlvbiBvZiBgc3Bpbl9sb2NrX2JoYCBjYWxscyBhcm91bmQgdGhlIGhhc2ggdGFibGUgaXRlcmF0aW9uLiBUaGlzIGluZGljYXRlcyBhIGNvbmNlcm4gYWJvdXQgY29uY3VycmVudCBhY2Nlc3MgYW5kIHBvdGVudGlhbCB1c2UtYWZ0ZXItZnJlZSBzY2VuYXJpb3MgZHVyaW5nIHBlZXIgdW5saW5raW5nLiBQcmVjaXNlbHkgdGhlIGtpbmQgb2Ygc2NlbmFyaW8gdGhhdCBLQVNBTiBhbmQgTE9DS0RFUCB3b3VsZCBsb3ZlIHRvIGZpbmQgcHJvYmxlbXMgd2l0aCFcblxuTm93LCB0aGUgaW1wb3J0YW50IHBhcnQ6IEtNU0FOIHRhcmdldHMgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNlLiBMb29raW5nIG92ZXIgdGhlIHBhdGNoIGRldGFpbHMgSSBzZWU6IG5vIG5ldyBtZW1vcnkgYWxsb2NhdGlvbnMsIG5vIGNvcHlpbmcgdG8gdXNlcnNwYWNlICh3aGljaCBJJ2QgYmUgZXNwZWNpYWxseSB3YXJ5IG9mKSwgbm8gZGlyZWN0IGFjY2Vzc2VzIHRvIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLiBUaGUgY29yZSBvZiB0aGUgY2hhbmdlcyBzZWVtIHRvIHJldm9sdmUgYXJvdW5kICpvcmRlcmluZyogb2YgdGVhcmRvd24gYW5kIHByb3BlciBsb2NraW5nIHRvIHByZXZlbnQgY29uY3VycmVuY3kgaXNzdWVzIGFuZCBVQUZzLiBUaGlzIGlzIGNsYXNzaWMgc3R1ZmYgZm9yIHJhY2UgY29uZGl0aW9uIGRldGVjdGlvbiBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gcmVsYXRlZCB0byBjb25jdXJyZW5jeS4gS0FTQU4gaXMgdXNlZnVsIGhlcmUuIEtNU0FOLi4uIE5vdCBzbyBtdWNoLlxuXG5KdXN0IHRvIGJlIGFic29sdXRlbHkgc3VyZSwgbGV0J3MgdGFrZSBhIHF1aWNrIGxvb2suIEknbGwgcXVpY2tseSBjaGVjayBgcnhycGNfZGVzdHJveV9hbGxfcGVlcnNgLiBJJ20gZ29pbmcgdG8gcXVpY2tseSBjaGVjayBgbmV0L3J4cnBjL3BlZXJfb2JqZWN0LmNgIHVzaW5nIHNvbWV0aGluZyBsaWtlIGEgYHJlYWQtZmlsZWAgb3IgYGdyZXBwZXJgIGNhbGwgdG8gZW5zdXJlIEknbSBub3QgbWlzc2luZyBhbnl0aGluZyBvYnZpb3VzLCB0aG91Z2ggSSdtIGZhaXJseSBjb25maWRlbnQgYmFzZWQgb24gdGhpcyBmaXJzdCBwYXNzLlxuXG5TbywgZ2l2ZW4gbXkgYW5hbHlzaXMsIEknbSBsZWFuaW5nIGhlYXZpbHkgdG93YXJkcyAqbm8qIEtNU0FOIHNlc3Npb24gYmVpbmcgbmVjZXNzYXJ5IGhlcmUuIFRoZSBpc3N1ZXMgYWRkcmVzc2VkIGFyZSBtb3JlIGluIHRoZSByZWFsbSBvZiBjb25jdXJyZW5jeSwgbGlmZXRpbWUgbWFuYWdlbWVudCwgYW5kIHN5bmNocm9uaXphdGlvbiwgYXJlYXMgd2hlcmUgS0FTQU4sIExPQ0tERVAsIGFuZCBvdGhlciBzYW5pdGl6ZXJzIGFyZSBtdWNoIG1vcmUgYXBwbGljYWJsZS4gVW5sZXNzIEkgZmluZCBzb21ldGhpbmcgZXh0cmVtZWx5IHVuZXhwZWN0ZWQgaW4gdGhlIGZpbGUgaW5zcGVjdGlvbiwgSSdsbCByZWNvbW1lbmQgd2Ugc2tpcCBLTVNBTiBmb3IgdGhpcyBvbmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI3NzAsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MDIsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwMjo1OTo1NS4xMjY4MjM5MjZaIiwiU2VxIjoyMiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYwMjU2NjU0MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJyeHJwY19kZXN0cm95X2FsbF9wZWVyc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvcnhycGMvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9yeHJwYy9hci1pbnRlcm5hbC5oPTE0MjY9dm9pZCByeHJwY19uZXdfaW5jb21pbmdfcGVlcihzdHJ1Y3QgcnhycGNfbG9jYWwgKmxvY2FsLCBzdHJ1Y3QgcnhycGNfcGVlciAqcGVlcik7XFxubmV0L3J4cnBjL2FyLWludGVybmFsLmg6MTQyNzp2b2lkIHJ4cnBjX2Rlc3Ryb3lfYWxsX3BlZXJzKHN0cnVjdCByeHJwY19uZXQgKik7XFxubmV0L3J4cnBjL2FyLWludGVybmFsLmgtMTQyOC1zdHJ1Y3QgcnhycGNfcGVlciAqcnhycGNfZ2V0X3BlZXIoc3RydWN0IHJ4cnBjX3BlZXIgKiwgZW51bSByeHJwY19wZWVyX3RyYWNlKTtcXG4tLVxcbm5ldC9yeHJwYy9uZXRfbnMuYz0xMTY9c3RhdGljIF9fbmV0X2V4aXQgdm9pZCByeHJwY19leGl0X25ldChzdHJ1Y3QgbmV0ICpuZXQpXFxuLS1cXG5uZXQvcnhycGMvbmV0X25zLmMtMTE5LVxcbm5ldC9yeHJwYy9uZXRfbnMuYzoxMjA6XFx0cnhycGNfZGVzdHJveV9hbGxfcGVlcnMocnhuZXQpO1xcbm5ldC9yeHJwYy9uZXRfbnMuYy0xMjEtXFx0cnhycGNfZGVzdHJveV9hbGxfbG9jYWxzKHJ4bmV0KTtcXG4tLVxcbm5ldC9yeHJwYy9wZWVyX29iamVjdC5jPTQzND12b2lkIHJ4cnBjX3B1dF9wZWVyKHN0cnVjdCByeHJwY19wZWVyICpwZWVyLCBlbnVtIHJ4cnBjX3BlZXJfdHJhY2Ugd2h5KVxcbi0tXFxubmV0L3J4cnBjL3BlZXJfb2JqZWN0LmMtNDUxLSAqL1xcbm5ldC9yeHJwYy9wZWVyX29iamVjdC5jOjQ1Mjp2b2lkIHJ4cnBjX2Rlc3Ryb3lfYWxsX3BlZXJzKHN0cnVjdCByeHJwY19uZXQgKnJ4bmV0KVxcbm5ldC9yeHJwYy9wZWVyX29iamVjdC5jLTQ1My17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDAyOjU5OjU1LjcyOTM5NzQxOVoiLCJTZXEiOjIzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxNzAzNDE2Njc4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOlxuXG4qKkRpdmluZyBpbnRvIGBwZWVyX29iamVjdC5jYCoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gdGhpcyBmdW5jdGlvbi4gTGV0J3Mgc3RhcnQgYnkgcGlucG9pbnRpbmcgdGhlIHJlbGV2YW50IGNvZGUuIE15IGludHVpdGlvbiwgYmFzZWQgb24gdGhlIGNvbnRleHQsIHN1Z2dlc3RzIHRoZSBhcmVhIGFyb3VuZCBsaW5lIDQ1MCBpbiBgbmV0L3J4cnBjL3BlZXJfb2JqZWN0LmNgIGlzIHdoZXJlIHRoZSBrZXkgbG9naWMgcmVzaWRlcy4gSSdsbCBqdW1wIHRoZXJlIGRpcmVjdGx5IHRvIGdldCB0aGUgd2hvbGUgZnVuY3Rpb24gaW4gY29udGV4dC4gSXQncyB0aGUgYmVzdCB3YXkgdG8gdW5kZXJzdGFuZCB0aGUgY29udHJvbCBmbG93IGFuZCBhc3NvY2lhdGVkIGRhdGEgc3RydWN0dXJlcyBxdWlja2x5LlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MzA4LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDI6NTk6NTcuNDMyODE2NDY3WiIsIlNlcSI6MjQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY1ODAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9yeHJwYy9wZWVyX29iamVjdC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDQ0NSxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDQ0NTpcXHRcXHRcXHRcXHRfX3J4cnBjX3B1dF9wZWVyKHBlZXIpO1xcbiA0NDY6XFx0XFx0fVxcbiA0NDc6XFx0fVxcbiA0NDg6XFx0XFxuIDQ0OTpcXHQvKlxcbiA0NTA6XFx0ICogTWFrZSBzdXJlIGFsbCBwZWVyIHJlY29yZHMgaGF2ZSBiZWVuIGRpc2NhcmRlZC5cXG4gNDUxOlxcdCAqL1xcbiA0NTI6XFx0dm9pZCByeHJwY19kZXN0cm95X2FsbF9wZWVycyhzdHJ1Y3QgcnhycGNfbmV0ICpyeG5ldClcXG4gNDUzOlxcdHtcXG4gNDU0OlxcdFxcdHN0cnVjdCByeHJwY19wZWVyICpwZWVyO1xcbiA0NTU6XFx0XFx0aW50IGk7XFxuIDQ1NjpcXHRcXG4gNDU3OlxcdFxcdC8qXFxuIDQ1ODpcXHRcXHQgKiBQcmV2ZW50IHVzZS1hZnRlci1mcmVlIGlmIGEgcGVlciBpcyBjb25jdXJyZW50bHkgdW5saW5rZWQgZnJvbSB0aGVcXG4gNDU5OlxcdFxcdCAqIGhhc2ggdGFibGUgYW5kIGZyZWVkIHZpYSBSQ1UgZHVyaW5nIGl0ZXJhdGlvbi5cXG4gNDYwOlxcdFxcdCAqL1xcbiA0NjE6XFx0XFx0c3Bpbl9sb2NrX2JoKFxcdTAwMjZyeG5ldC1cXHUwMDNlcGVlcl9oYXNoX2xvY2spO1xcbiA0NjI6XFx0XFxuIDQ2MzpcXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgSEFTSF9TSVpFKHJ4bmV0LVxcdTAwM2VwZWVyX2hhc2gpOyBpKyspIHtcXG4gNDY0OlxcdFxcdFxcdGlmIChobGlzdF9lbXB0eShcXHUwMDI2cnhuZXQtXFx1MDAzZXBlZXJfaGFzaFtpXSkpXFxuIDQ2NTpcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4gNDY2OlxcdFxcbiA0Njc6XFx0XFx0XFx0aGxpc3RfZm9yX2VhY2hfZW50cnkocGVlciwgXFx1MDAyNnJ4bmV0LVxcdTAwM2VwZWVyX2hhc2hbaV0sIGhhc2hfbGluaykge1xcbiA0Njg6XFx0XFx0XFx0XFx0cHJfZXJyKFxcXCJMZWFrZWQgcGVlciAleCB7JXV9ICVwSVNwXFxcXG5cXFwiLFxcbiA0Njk6XFx0XFx0XFx0XFx0ICAgICAgIHBlZXItXFx1MDAzZWRlYnVnX2lkLFxcbiA0NzA6XFx0XFx0XFx0XFx0ICAgICAgIHJlZmNvdW50X3JlYWQoXFx1MDAyNnBlZXItXFx1MDAzZXJlZiksXFxuIDQ3MTpcXHRcXHRcXHRcXHQgICAgICAgXFx1MDAyNnBlZXItXFx1MDAzZXNyeC50cmFuc3BvcnQpO1xcbiA0NzI6XFx0XFx0XFx0fVxcbiA0NzM6XFx0XFx0fVxcbiA0NzQ6XFx0XFxuIDQ3NTpcXHRcXHRzcGluX3VubG9ja19iaChcXHUwMDI2cnhuZXQtXFx1MDAzZXBlZXJfaGFzaF9sb2NrKTtcXG4gNDc2OlxcdH1cXG4gNDc3OlxcdFxcbiA0Nzg6XFx0LyoqXFxuIDQ3OTpcXHQgKiByeHJwY19rZXJuZWxfZ2V0X2NhbGxfcGVlciAtIEdldCB0aGUgcGVlciBhZGRyZXNzIG9mIGEgY2FsbFxcbiA0ODA6XFx0ICogQHNvY2s6IFRoZSBzb2NrZXQgb24gd2hpY2ggdGhlIGNhbGwgaXMgaW4gcHJvZ3Jlc3MuXFxuIDQ4MTpcXHQgKiBAY2FsbDogVGhlIGNhbGwgdG8gcXVlcnlcXG4gNDgyOlxcdCAqXFxuIDQ4MzpcXHQgKiBHZXQgYSByZWNvcmQgZm9yIHRoZSByZW1vdGUgcGVlciBpbiBhIGNhbGwuXFxuIDQ4NDpcXHQgKlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwMjo1OTo1Ny40MzI4ODM4OTdaIiwiU2VxIjoyNSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzAwMTI2MzAxMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBQcm9wb3NlZCBDaGFuZ2VzKipcblxuT2theSwgc28gdGhlIGNoYW5nZXMgYXJlIHN0cmFpZ2h0Zm9yd2FyZC4gV2UncmUgc3BsaXR0aW5nIGByeHJwY19leGl0X25ldGAgaW50byB0d28gcGFydHMgd2l0aGluIGBwZXJuZXRfb3BlcmF0aW9uc2A6IGEgcHJlLWV4aXQgZnVuY3Rpb24sIGByeHJwY19wcmVfZXhpdF9uZXRgLCBhbmQgdGhlIGFjdHVhbCBleGl0IGZ1bmN0aW9uLCBgcnhycGNfZXhpdF9uZXRgLiBBbmQsIGNydWNpYWxseSwgd2UncmUgYWRkaW5nIHNwaW5sb2NrIHByb3RlY3Rpb24gYXJvdW5kIGByeHJwY19kZXN0cm95X2FsbF9wZWVyc2AgdG8gdGFja2xlIHRob3NlIHJhY2UgYW5kIFVzZS1BZnRlci1GcmVlIGlzc3VlcyB0aGF0IHBvcCB1cCBkdXJpbmcgcGVlciBoYXNoIGl0ZXJhdGlvbi4gR29vZCwgZ29vZC5cblxuRnJvbSBteSBwZXJzcGVjdGl2ZSwgdGhlcmUncyBub3RoaW5nIGltbWVkaWF0ZWx5IGFsYXJtaW5nIGhlcmUuIE5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3Vlcywgbm8gdXNlci1zcGFjZSBjb3BpZXMgdG8gd29ycnkgYWJvdXQsIG5vIGZpZGRsaW5nIHdpdGggYnVmZmVyIHNpemVzIG9yIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGUgYWNjZXNzZXMg4oCTIGFsbCB0aGluZ3MgSSdkIGJlIGxvb2tpbmcgZm9yLiBBbmQgZ2l2ZW4gdGhlIG5hdHVyZSBvZiB0aGUgY2hhbmdlcywgSSB3b3VsZCBleHBlY3QgYW55IHBvdGVudGlhbCBwcm9ibGVtcywgbGlrZSB0aG9zZSBsb2NraW5nIGJ1Z3MsIGRlYWRsb2NrcywgdXNlLWFmdGVyLWZyZWUgc2NlbmFyaW9zLCBvciBkb3VibGUgZnJlZXMgdG8gYmUgY2F1Z2h0IGJ5IExPQ0tERVAgYW5kIEtBU0FOLiBXZSBhcmUgdGFraW5nIHRoZSBzdGVwcyB0aGF0IHdpbGwga2VlcCB1cyBzYWZlIGhlcmUuIFRoZXJlZm9yZSwgSSBkb24ndCBzZWUgYW55IHJlYXNvbiB3aHkgdGhpcyBuZWVkcyBLTVNBTiBpbnRlcnZlbnRpb24uIEknbSBzYXRpc2ZpZWQuXG5cbk5vdywgbGV0J3MgZ2V0IHJlYWR5IGZvciB0aGUgYHNldC1yZXN1bHRzYCBjYWxsLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MDczLCJPdXRwdXRUb2tlbnMiOjE3MywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2NSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDAzOjAwOjAwLjQzNDE0ODk4N1oiLCJTZXEiOjI2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0ODAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHBlcm5ldCBuYW1lc3BhY2UgZXhpdCBjYWxsYmFja3MgaW4gQUZfUlhSUEMgKHNwbGl0dGluZyB0ZWFyZG93biBiZXR3ZWVuIHByZV9leGl0IGFuZCBleGl0KSBhbmQgYWRkcyBzcGlubG9jayBzeW5jaHJvbml6YXRpb24gKHBlZXJfaGFzaF9sb2NrKSBpbiByeHJwY19kZXN0cm95X2FsbF9wZWVycygpIHRvIHByb3RlY3QgYWdhaW5zdCBjb25jdXJyZW50IHVubGlua2luZyBhbmQgdXNlLWFmdGVyLWZyZWUuXFxuXFxuTm8gbmV3IG1lbW9yeSBhbGxvY2F0aW9ucywgdW5pbml0aWFsaXplZCB2YXJpYWJsZSB1c2VzLCB1c2VyLWNvcHkgb3BlcmF0aW9ucywgb3IgYWx0ZXJlZCBkYXRhLXBhcnNpbmcvYnVmZmVyLWxlbmd0aCBsb2dpYyBhcmUgaW50cm9kdWNlZC4gVGhlIHBvdGVudGlhbCBpc3N1ZXMgYWRkcmVzc2VkIG9yIGludHJvZHVjZWQgYnkgdGhpcyBwYXRjaCByZWxhdGUgZXhjbHVzaXZlbHkgdG8gdGVhcmRvd24gb3JkZXJpbmcsIHN5bmNocm9uaXphdGlvbiwgbG9ja2luZywgYW5kIHVzZS1hZnRlci1mcmVlLCBhbGwgb2Ygd2hpY2ggYXJlIGNvdmVyZWQgYnkgc3RhbmRhcmQgc2FuaXRpemVycyAoS0FTQU4sIExPQ0tERVApLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBwZXJuZXQgbmFtZXNwYWNlIGV4aXQgY2FsbGJhY2tzIGluIEFGX1JYUlBDIChzcGxpdHRpbmcgdGVhcmRvd24gYmV0d2VlbiBwcmVfZXhpdCBhbmQgZXhpdCkgYW5kIGFkZHMgc3BpbmxvY2sgc3luY2hyb25pemF0aW9uIChwZWVyX2hhc2hfbG9jaykgaW4gcnhycGNfZGVzdHJveV9hbGxfcGVlcnMoKSB0byBwcm90ZWN0IGFnYWluc3QgY29uY3VycmVudCB1bmxpbmtpbmcgYW5kIHVzZS1hZnRlci1mcmVlLlxcblxcbk5vIG5ldyBtZW1vcnkgYWxsb2NhdGlvbnMsIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGUgdXNlcywgdXNlci1jb3B5IG9wZXJhdGlvbnMsIG9yIGFsdGVyZWQgZGF0YS1wYXJzaW5nL2J1ZmZlci1sZW5ndGggbG9naWMgYXJlIGludHJvZHVjZWQuIFRoZSBwb3RlbnRpYWwgaXNzdWVzIGFkZHJlc3NlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoaXMgcGF0Y2ggcmVsYXRlIGV4Y2x1c2l2ZWx5IHRvIHRlYXJkb3duIG9yZGVyaW5nLCBzeW5jaHJvbml6YXRpb24sIGxvY2tpbmcsIGFuZCB1c2UtYWZ0ZXItZnJlZSwgYWxsIG9mIHdoaWNoIGFyZSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIHNhbml0aXplcnMgKEtBU0FOLCBMT0NLREVQKS4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflowng56w[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-08 01:52:20 +0000 UTC FinishedAt: 2026-09-08 03:00:02 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "AF_RXRPC", "INET", "NET_NS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "AF_RXRPC", "INET", "NET_NS" ], "series_id": "72f7714d-3fb8-4e04-aa6f-2891301ed056" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "rxrpc_pre_exit_net", "rxrpc_exit_net", "rxrpc_destroy_all_peers" ], "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+CgkJCTx0ZD4yMDI2LzA5LzA4IDAyOjU5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0FGX1JYUlBDJiMzNDssCiAgICAmIzM0O0lORVQmIzM0OywKICAgICYjMzQ7TkVUX05TJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7cnhycGNfcHJlX2V4aXRfbmV0JiMzNDssCiAgICAmIzM0O3J4cnBjX2V4aXRfbmV0JiMzNDssCiAgICAmIzM0O3J4cnBjX2Rlc3Ryb3lfYWxsX3BlZXJzJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHBlcm5ldCBuYW1lc3BhY2UgZXhpdCBjYWxsYmFja3MgaW4gQUZfUlhSUEMgKHNwbGl0dGluZyB0ZWFyZG93biBiZXR3ZWVuIHByZV9leGl0IGFuZCBleGl0KSBhbmQgYWRkcyBzcGlubG9jayBzeW5jaHJvbml6YXRpb24gKHBlZXJfaGFzaF9sb2NrKSBpbiByeHJwY19kZXN0cm95X2FsbF9wZWVycygpIHRvIHByb3RlY3QgYWdhaW5zdCBjb25jdXJyZW50IHVubGlua2luZyBhbmQgdXNlLWFmdGVyLWZyZWUuXG5cbk5vIG5ldyBtZW1vcnkgYWxsb2NhdGlvbnMsIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGUgdXNlcywgdXNlci1jb3B5IG9wZXJhdGlvbnMsIG9yIGFsdGVyZWQgZGF0YS1wYXJzaW5nL2J1ZmZlci1sZW5ndGggbG9naWMgYXJlIGludHJvZHVjZWQuIFRoZSBwb3RlbnRpYWwgaXNzdWVzIGFkZHJlc3NlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoaXMgcGF0Y2ggcmVsYXRlIGV4Y2x1c2l2ZWx5IHRvIHRlYXJkb3duIG9yZGVyaW5nLCBzeW5jaHJvbml6YXRpb24sIGxvY2tpbmcsIGFuZCB1c2UtYWZ0ZXItZnJlZSwgYWxsIG9mIHdoaWNoIGFyZSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIHNhbml0aXplcnMgKEtBU0FOLCBMT0NLREVQKS4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIFJ4UlBDIG5ldHdvcmsgbmFtZXNwYWNlIHRlYXJkb3duIGxpZmVjeWNsZSBieSBzcGxpdHRpbmcgbmV0bnMgY2xlYW51cCBpbnRvIHByZV9leGl0IGFuZCBleGl0IGhhbmRsZXJzIChyeHJwY19wcmVfZXhpdF9uZXQgYW5kIHJ4cnBjX2V4aXRfbmV0KSBhbmQgYWRkcyBsb2NraW5nIChwZWVyX2hhc2hfbG9jaykgaW4gcnhycGNfZGVzdHJveV9hbGxfcGVlcnMgdG8gcHJldmVudCB1c2UtYWZ0ZXItZnJlZSBjb25kaXRpb25zIGR1cmluZyBwZWVyIGhhc2ggdGFibGUgdHJhdmVyc2FsLiBUaGVzZSBjaGFuZ2VzIHRvdWNoIHJlYWNoYWJsZSBuZXR3b3JraW5nIGNvZGUgdGhhdCBpcyBleGVyY2lzZWQgZHVyaW5nIG5ldG5zIGxpZmVjeWNsZSBhbmQgQUZfUlhSUEMgc29ja2V0IG9wZXJhdGlvbnMsIG1ha2luZyBpdCB3b3J0aHdoaWxlIHRvIGZ1enouJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDI6NTk8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBlMjVkMjE5Yzk4ZDc1Y2Y3Njg0OGMxNjljMWJmM2RkMWZkYWNjMTYwXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBTZXAgOCAwMjo1OTowOCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvcnhycGMvbmV0X25zLmMgYi9uZXQvcnhycGMvbmV0X25zLmNcbmluZGV4IDlhOTgzNDE0NWU4MWUuLjE2OTExNjczNTM2NjMgMTAwNjQ0XG4tLS0gYS9uZXQvcnhycGMvbmV0X25zLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9yeHJwYy9uZXRfbnMuY1xuQEAgLTk3LDEwICYjNDM7OTcsNyBAQCBzdGF0aWMgX19uZXRfaW5pdCBpbnQgcnhycGNfaW5pdF9uZXQoc3RydWN0IG5ldCAqbmV0KVxuIFx0cmV0dXJuIHJldDtcbiB9XG4gXG4tLypcbi0gKiBDbGVhbiB1cCBhIHBlci1uZXR3b3JrIG5hbWVzcGFjZSByZWNvcmQuXG4tICovXG4tc3RhdGljIF9fbmV0X2V4aXQgdm9pZCByeHJwY19leGl0X25ldChzdHJ1Y3QgbmV0ICpuZXQpXG4mIzQzO3N0YXRpYyBfX25ldF9leGl0IHZvaWQgcnhycGNfcHJlX2V4aXRfbmV0KHN0cnVjdCBuZXQgKm5ldClcbiB7XG4gXHRzdHJ1Y3QgcnhycGNfbmV0ICpyeG5ldCA9IHJ4cnBjX25ldChuZXQpO1xuIFxuQEAgLTExMSwxNCAmIzQzOzEwOCwyNCBAQCBzdGF0aWMgX19uZXRfZXhpdCB2b2lkIHJ4cnBjX2V4aXRfbmV0KHN0cnVjdCBuZXQgKm5ldClcbiBcdHRpbWVyX2RlbGV0ZV9zeW5jKFx1MDAyNnJ4bmV0LVx1MDAzZXBlZXJfa2VlcGFsaXZlX3RpbWVyKTtcbiBcdHJ4cnBjX2Rlc3Ryb3lfYWxsX2NhbGxzKHJ4bmV0KTtcbiBcdHJ4cnBjX2Rlc3Ryb3lfYWxsX2Nvbm5lY3Rpb25zKHJ4bmV0KTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LypcbiYjNDM7ICogQ2xlYW4gdXAgYSBwZXItbmV0d29yayBuYW1lc3BhY2UgcmVjb3JkLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIF9fbmV0X2V4aXQgdm9pZCByeHJwY19leGl0X25ldChzdHJ1Y3QgbmV0ICpuZXQpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgcnhycGNfbmV0ICpyeG5ldCA9IHJ4cnBjX25ldChuZXQpO1xuJiM0MztcbiBcdHJ4cnBjX2Rlc3Ryb3lfYWxsX3BlZXJzKHJ4bmV0KTtcbiBcdHJ4cnBjX2Rlc3Ryb3lfYWxsX2xvY2FscyhyeG5ldCk7XG4gXHRwcm9jX3JlbW92ZShyeG5ldC1cdTAwM2Vwcm9jX25ldCk7XG4gfVxuIFxuIHN0cnVjdCBwZXJuZXRfb3BlcmF0aW9ucyByeHJwY19uZXRfb3BzID0ge1xuLVx0LmluaXRcdD0gcnhycGNfaW5pdF9uZXQsXG4tXHQuZXhpdFx0PSByeHJwY19leGl0X25ldCxcbi1cdC5pZFx0PSBcdTAwMjZyeHJwY19uZXRfaWQsXG4tXHQuc2l6ZVx0PSBzaXplb2Yoc3RydWN0IHJ4cnBjX25ldCksXG4mIzQzO1x0LmluaXRcdFx0PSByeHJwY19pbml0X25ldCxcbiYjNDM7XHQucHJlX2V4aXRcdD0gcnhycGNfcHJlX2V4aXRfbmV0LFxuJiM0MztcdC5leGl0XHRcdD0gcnhycGNfZXhpdF9uZXQsXG4mIzQzO1x0LmlkXHRcdD0gXHUwMDI2cnhycGNfbmV0X2lkLFxuJiM0MztcdC5zaXplXHRcdD0gc2l6ZW9mKHN0cnVjdCByeHJwY19uZXQpLFxuIH07XG5kaWZmIC0tZ2l0IGEvbmV0L3J4cnBjL3BlZXJfb2JqZWN0LmMgYi9uZXQvcnhycGMvcGVlcl9vYmplY3QuY1xuaW5kZXggZmE5YTQwNmUxMTY4My4uZmFhMjk4MzYzOGIyYiAxMDA2NDRcbi0tLSBhL25ldC9yeHJwYy9wZWVyX29iamVjdC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvcnhycGMvcGVlcl9vYmplY3QuY1xuQEAgLTQ1NCw2ICYjNDM7NDU0LDEyIEBAIHZvaWQgcnhycGNfZGVzdHJveV9hbGxfcGVlcnMoc3RydWN0IHJ4cnBjX25ldCAqcnhuZXQpXG4gXHRzdHJ1Y3QgcnhycGNfcGVlciAqcGVlcjtcbiBcdGludCBpO1xuIFxuJiM0MztcdC8qXG4mIzQzO1x0ICogUHJldmVudCB1c2UtYWZ0ZXItZnJlZSBpZiBhIHBlZXIgaXMgY29uY3VycmVudGx5IHVubGlua2VkIGZyb20gdGhlXG4mIzQzO1x0ICogaGFzaCB0YWJsZSBhbmQgZnJlZWQgdmlhIFJDVSBkdXJpbmcgaXRlcmF0aW9uLlxuJiM0MztcdCAqL1xuJiM0MztcdHNwaW5fbG9ja19iaChcdTAwMjZyeG5ldC1cdTAwM2VwZWVyX2hhc2hfbG9jayk7XG4mIzQzO1xuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgSEFTSF9TSVpFKHJ4bmV0LVx1MDAzZXBlZXJfaGFzaCk7IGkmIzQzOyYjNDM7KSB7XG4gXHRcdGlmIChobGlzdF9lbXB0eShcdTAwMjZyeG5ldC1cdTAwM2VwZWVyX2hhc2hbaV0pKVxuIFx0XHRcdGNvbnRpbnVlO1xuQEAgLTQ2NSw2ICYjNDM7NDcxLDggQEAgdm9pZCByeHJwY19kZXN0cm95X2FsbF9wZWVycyhzdHJ1Y3QgcnhycGNfbmV0ICpyeG5ldClcbiBcdFx0XHQgICAgICAgXHUwMDI2cGVlci1cdTAwM2VzcngudHJhbnNwb3J0KTtcbiBcdFx0fVxuIFx0fVxuJiM0MztcbiYjNDM7XHRzcGluX3VubG9ja19iaChcdTAwMjZyeG5ldC1cdTAwM2VwZWVyX2hhc2hfbG9jayk7XG4gfVxuIFxuIC8qKlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDAyOjU5PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0FGX1JYUlBDJiMzNDssCiAgICAmIzM0O0lORVQmIzM0OywKICAgICYjMzQ7TkVUX05TJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7cnhycGNfcHJlX2V4aXRfbmV0JiMzNDssCiAgICAmIzM0O3J4cnBjX2V4aXRfbmV0JiMzNDssCiAgICAmIzM0O3J4cnBjX2Rlc3Ryb3lfYWxsX3BlZXJzJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBSeFJQQyBuZXR3b3JrIG5hbWVzcGFjZSB0ZWFyZG93biBsaWZlY3ljbGUgYnkgc3BsaXR0aW5nIG5ldG5zIGNsZWFudXAgaW50byBwcmVfZXhpdCBhbmQgZXhpdCBoYW5kbGVycyAocnhycGNfcHJlX2V4aXRfbmV0IGFuZCByeHJwY19leGl0X25ldCkgYW5kIGFkZHMgbG9ja2luZyAocGVlcl9oYXNoX2xvY2spIGluIHJ4cnBjX2Rlc3Ryb3lfYWxsX3BlZXJzIHRvIHByZXZlbnQgdXNlLWFmdGVyLWZyZWUgY29uZGl0aW9ucyBkdXJpbmcgcGVlciBoYXNoIHRhYmxlIHRyYXZlcnNhbC4gVGhlc2UgY2hhbmdlcyB0b3VjaCByZWFjaGFibGUgbmV0d29ya2luZyBjb2RlIHRoYXQgaXMgZXhlcmNpc2VkIGR1cmluZyBuZXRucyBsaWZlY3ljbGUgYW5kIEFGX1JYUlBDIHNvY2tldCBvcGVyYXRpb25zLCBtYWtpbmcgaXQgd29ydGh3aGlsZSB0byBmdXp6LiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3MKdG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncywKYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy4KCi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6CiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZAogIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuCiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLAogIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy4KCi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgJiMzNDtOTyBGVU5DVElPTkFMIENIQU5HRSYjMzQ7IChORkNJKSBPUiAmIzM0O1JFRkFDVE9SSU5HJiMzNDsgQ0xBSU1TOgogIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgJiMzNDtjbGVhbnVwcyYjMzQ7LCAmIzM0O3JlZmFjdG9yaW5ncyYjMzQ7LCBvciBzdGF0ZQogICYjMzQ7Tm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWQmIzM0Oy4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuCiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50CiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuCiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC4KCi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6CiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLAogIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLgogIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXIKICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoyLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOgoKLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOgogICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLgogICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pCiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuCiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50cwogICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy4KICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy4KLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6CiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczoKICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZwogICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuCiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQozLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6Ci0gQ29yZSBTdWJzeXN0ZW1zOgogICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLAogICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLgotIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczoKICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy4KLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6CiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuCi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczoKICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpXaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjoKCi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOgogIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzCiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHQKICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS4KICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgJiMzNDtmb2N1c2VkJiMzNDssCiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLgoKLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6CiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzCiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuCgotIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKToKICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrCiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuCiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyCiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlncwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOgotIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCi0gQ2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC4KLSBTdHJpcCBhbnkgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgZTI1ZDIxOWM5OGQ3NWNmNzY4NDhjMTY5YzFiZjNkZDFmZGFjYzE2MApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUdWUgU2VwIDggMDI6NTk6MDggMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQvcnhycGMvbmV0X25zLmMgYi9uZXQvcnhycGMvbmV0X25zLmMKaW5kZXggOWE5ODM0MTQ1ZTgxZS4uMTY5MTE2NzM1MzY2MyAxMDA2NDQKLS0tIGEvbmV0L3J4cnBjL25ldF9ucy5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9yeHJwYy9uZXRfbnMuYwpAQCAtOTcsMTAgJiM0Mzs5Nyw3IEBAIHN0YXRpYyBfX25ldF9pbml0IGludCByeHJwY19pbml0X25ldChzdHJ1Y3QgbmV0ICpuZXQpCiAJcmV0dXJuIHJldDsKIH0KIAotLyoKLSAqIENsZWFuIHVwIGEgcGVyLW5ldHdvcmsgbmFtZXNwYWNlIHJlY29yZC4KLSAqLwotc3RhdGljIF9fbmV0X2V4aXQgdm9pZCByeHJwY19leGl0X25ldChzdHJ1Y3QgbmV0ICpuZXQpCiYjNDM7c3RhdGljIF9fbmV0X2V4aXQgdm9pZCByeHJwY19wcmVfZXhpdF9uZXQoc3RydWN0IG5ldCAqbmV0KQogewogCXN0cnVjdCByeHJwY19uZXQgKnJ4bmV0ID0gcnhycGNfbmV0KG5ldCk7CiAKQEAgLTExMSwxNCAmIzQzOzEwOCwyNCBAQCBzdGF0aWMgX19uZXRfZXhpdCB2b2lkIHJ4cnBjX2V4aXRfbmV0KHN0cnVjdCBuZXQgKm5ldCkKIAl0aW1lcl9kZWxldGVfc3luYygmYW1wO3J4bmV0LSZndDtwZWVyX2tlZXBhbGl2ZV90aW1lcik7CiAJcnhycGNfZGVzdHJveV9hbGxfY2FsbHMocnhuZXQpOwogCXJ4cnBjX2Rlc3Ryb3lfYWxsX2Nvbm5lY3Rpb25zKHJ4bmV0KTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBDbGVhbiB1cCBhIHBlci1uZXR3b3JrIG5hbWVzcGFjZSByZWNvcmQuCiYjNDM7ICovCiYjNDM7c3RhdGljIF9fbmV0X2V4aXQgdm9pZCByeHJwY19leGl0X25ldChzdHJ1Y3QgbmV0ICpuZXQpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgcnhycGNfbmV0ICpyeG5ldCA9IHJ4cnBjX25ldChuZXQpOwomIzQzOwogCXJ4cnBjX2Rlc3Ryb3lfYWxsX3BlZXJzKHJ4bmV0KTsKIAlyeHJwY19kZXN0cm95X2FsbF9sb2NhbHMocnhuZXQpOwogCXByb2NfcmVtb3ZlKHJ4bmV0LSZndDtwcm9jX25ldCk7CiB9CiAKIHN0cnVjdCBwZXJuZXRfb3BlcmF0aW9ucyByeHJwY19uZXRfb3BzID0gewotCS5pbml0CT0gcnhycGNfaW5pdF9uZXQsCi0JLmV4aXQJPSByeHJwY19leGl0X25ldCwKLQkuaWQJPSAmYW1wO3J4cnBjX25ldF9pZCwKLQkuc2l6ZQk9IHNpemVvZihzdHJ1Y3QgcnhycGNfbmV0KSwKJiM0MzsJLmluaXQJCT0gcnhycGNfaW5pdF9uZXQsCiYjNDM7CS5wcmVfZXhpdAk9IHJ4cnBjX3ByZV9leGl0X25ldCwKJiM0MzsJLmV4aXQJCT0gcnhycGNfZXhpdF9uZXQsCiYjNDM7CS5pZAkJPSAmYW1wO3J4cnBjX25ldF9pZCwKJiM0MzsJLnNpemUJCT0gc2l6ZW9mKHN0cnVjdCByeHJwY19uZXQpLAogfTsKZGlmZiAtLWdpdCBhL25ldC9yeHJwYy9wZWVyX29iamVjdC5jIGIvbmV0L3J4cnBjL3BlZXJfb2JqZWN0LmMKaW5kZXggZmE5YTQwNmUxMTY4My4uZmFhMjk4MzYzOGIyYiAxMDA2NDQKLS0tIGEvbmV0L3J4cnBjL3BlZXJfb2JqZWN0LmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3J4cnBjL3BlZXJfb2JqZWN0LmMKQEAgLTQ1NCw2ICYjNDM7NDU0LDEyIEBAIHZvaWQgcnhycGNfZGVzdHJveV9hbGxfcGVlcnMoc3RydWN0IHJ4cnBjX25ldCAqcnhuZXQpCiAJc3RydWN0IHJ4cnBjX3BlZXIgKnBlZXI7CiAJaW50IGk7CiAKJiM0MzsJLyoKJiM0MzsJICogUHJldmVudCB1c2UtYWZ0ZXItZnJlZSBpZiBhIHBlZXIgaXMgY29uY3VycmVudGx5IHVubGlua2VkIGZyb20gdGhlCiYjNDM7CSAqIGhhc2ggdGFibGUgYW5kIGZyZWVkIHZpYSBSQ1UgZHVyaW5nIGl0ZXJhdGlvbi4KJiM0MzsJICovCiYjNDM7CXNwaW5fbG9ja19iaCgmYW1wO3J4bmV0LSZndDtwZWVyX2hhc2hfbG9jayk7CiYjNDM7CiAJZm9yIChpID0gMDsgaSAmbHQ7IEhBU0hfU0laRShyeG5ldC0mZ3Q7cGVlcl9oYXNoKTsgaSYjNDM7JiM0MzspIHsKIAkJaWYgKGhsaXN0X2VtcHR5KCZhbXA7cnhuZXQtJmd0O3BlZXJfaGFzaFtpXSkpCiAJCQljb250aW51ZTsKQEAgLTQ2NSw2ICYjNDM7NDcxLDggQEAgdm9pZCByeHJwY19kZXN0cm95X2FsbF9wZWVycyhzdHJ1Y3QgcnhycGNfbmV0ICpyeG5ldCkKIAkJCSAgICAgICAmYW1wO3BlZXItJmd0O3NyeC50cmFuc3BvcnQpOwogCQl9CiAJfQomIzQzOwomIzQzOwlzcGluX3VubG9ja19iaCgmYW1wO3J4bmV0LSZndDtwZWVyX2hhc2hfbG9jayk7CiB9CiAKIC8qKgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwMjo1OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNTU4CgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogMjk3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgcnhycGMgUGF0Y2ggZm9yIGFtZDY0KioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBwYXRjaCB0YXJnZXRpbmcgdGhlIGFtZDY0IGFyY2hpdGVjdHVyZS4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IHBvaW50cyB0byBtb2RpZmljYXRpb25zIGluIGBuZXQvcnhycGMvbmV0X25zLmNgIGFuZCBgbmV0L3J4cnBjL3BlZXJfb2JqZWN0LmNgLiBJdCBsb29rcyBsaWtlIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggc29tZSBuYW1lc3BhY2UgY2xlYW51cCBhbmQgcGVlciBtYW5hZ2VtZW50IGNoYW5nZXMgd2l0aGluIHRoZSByeHJwYyBzdWJzeXN0ZW0uCgpTcGVjaWZpY2FsbHksIGluIGBuZXRfbnMuY2AsIHRoZSByZWZhY3RvcmluZyBpcyBpbnRlcmVzdGluZy4gU3BsaXR0aW5nIGByeHJwY19leGl0X25ldGAgaW50byBgLnByZV9leGl0YCBhbmQgYC5leGl0YCBzdWdnZXN0cyBhIG1vcmUgZ3JhbnVsYXIgYXBwcm9hY2ggdG8gbmV0d29yayBuYW1lc3BhY2UgdGVhcmRvd24uICBgcnhycGNfcHJlX2V4aXRfbmV0YCBpcyBub3cgcmVzcG9uc2libGUgZm9yIHNldHRpbmcgYHJ4bmV0LSZndDtsaXZlID0gZmFsc2VgLCBzeW5jaW5nIHRpbWVycywgYW5kIGRlc3Ryb3lpbmcgY2FsbHMgYW5kIGNvbm5lY3Rpb25zLiBUaGF0JiMzOTtzIGEgcmVhc29uYWJsZSBvcmRlcmluZy4gVGhlIHNlY29uZCBwYXJ0LCBgcnhycGNfZXhpdF9uZXRgLCBoYW5kbGVzIHBlZXIsIGxvY2FsIGVuZHBvaW50IGRlc3RydWN0aW9uLCBhbmQgcHJvY2ZzIGNsZWFudXAuIFNvdW5kcyBsb2dpY2FsIHRvIG1lLiAgVGhpcyBzZXBhcmF0aW9uIGxpa2VseSBhaW1zIGZvciBiZXR0ZXIgc3luY2hyb25pemF0aW9uIG9yIHRoZSBuZWVkIHRvIG9yZGVyIGNsZWFudXAgYWN0aW9ucy4KCk92ZXIgaW4gYHBlZXJfb2JqZWN0LmNgLCB0aGUgYWRkaXRpb24gb2YgYHNwaW5fbG9ja19iaGAgYW5kIGBzcGluX3VubG9ja19iaGAgYXJvdW5kIHRoZSBgcnhuZXQtJmd0O3BlZXJfaGFzaF9sb2NrYCB3aXRoaW4gYHJ4cnBjX2Rlc3Ryb3lfYWxsX3BlZXJzYCBpcyBhIGNsZWFyIGluZGljYXRpb24gb2YgYSBjb25jdXJyZW5jeSBjb25jZXJuLiBJdCBzZWVtcyB3ZSBhcmUgdHJ5aW5nIHRvIGJldHRlciBwcm90ZWN0IHRoZSBwZWVyIGhhc2ggdGFibGUgZHVyaW5nIGRlc3RydWN0aW9uLCBwb3NzaWJseSB0byBhdm9pZCByYWNlIGNvbmRpdGlvbnMgd2hlbiBkZXN0cm95aW5nIHBlZXJzLgoKTm93LCB0byBnZXQgYSBzb2xpZCB1bmRlcnN0YW5kaW5nIG9mIHRoZSBpbXBsaWNhdGlvbnMsIEkgbmVlZCB0byBjaGVjayB0aGUgZGVwZW5kZW5jaWVzIGFuZCB0aGUgY29udGV4dCBvZiB0aGVzZSBjaGFuZ2VzLiBJJiMzOTtsbCBuZWVkIHRvIHVzZSBgZ3JlcGAgb3IgZGl2ZSBpbnRvIHRoZSBjb2RlIGRpcmVjdGx5IHRvIGlkZW50aWZ5IGFueSBjb25maWd1cmF0aW9uIG9wdGlvbnMgcmVxdWlyZWQgZm9yIHRoaXMgcGF0Y2ggdG8gd29yaywgYW5kIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBtb2RpZmllZCBmdW5jdGlvbnMgYXJlIGNhbGxlZCBhbmQgd2hhdCBvdGhlciBmdW5jdGlvbnMgdGhleSBpbnRlcmFjdCB3aXRoLiAgSSB3YW50IHRvIHNlZSB3aGF0IHRyaWdnZXJzIHRoZSBuYW1lc3BhY2UgZXhpdCBwcm9jZXNzLiBUaGF0JiMzOTtzIHdoZXJlIHRoZSByZWFsIHN0b3J5IGxpZXMuIFRoaXMgbG9va3MgbGlrZSBhIG5lY2Vzc2FyeSBjbGVhbnVwIHRvIGJldHRlciBoYW5kbGUgZGVzdHJ1Y3Rpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDI6NTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7QUZfUlhSUEMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvcnhycGMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3J4cnBjLy5rdW5pdGNvbmZpZz0zPUNPTkZJR19JTkVUPXlcbm5ldC9yeHJwYy8ua3VuaXRjb25maWc6NDpDT05GSUdfQUZfUlhSUEM9eVxubmV0L3J4cnBjLy5rdW5pdGNvbmZpZy01LUNPTkZJR19SWEtBRD15XG5uZXQvcnhycGMvLmt1bml0Y29uZmlnOjY6Q09ORklHX0FGX1JYUlBDX0tVTklUX1RFU1Q9eVxuLS1cbm5ldC9yeHJwYy9LY29uZmlnLTUtXG5uZXQvcnhycGMvS2NvbmZpZzo2OmNvbmZpZyBBRl9SWFJQQ1xubmV0L3J4cnBjL0tjb25maWctNy1cdHRyaXN0YXRlIFwmIzM0O1J4UlBDIHNlc3Npb24gc29ja2V0c1wmIzM0O1xuLS1cbm5ldC9yeHJwYy9LY29uZmlnLTI0LVxubmV0L3J4cnBjL0tjb25maWc6MjU6aWYgQUZfUlhSUENcbm5ldC9yeHJwYy9LY29uZmlnLTI2LVxubmV0L3J4cnBjL0tjb25maWc6Mjc6Y29uZmlnIEFGX1JYUlBDX0lQVjZcbm5ldC9yeHJwYy9LY29uZmlnLTI4LVx0Ym9vbCBcJiMzNDtJUHY2IHN1cHBvcnQgZm9yIFJ4UlBDXCYjMzQ7XG4tLVxubmV0L3J4cnBjL0tjb25maWctMzAtXHRoZWxwXG5uZXQvcnhycGMvS2NvbmZpZzozMTpcdCAgU2F5IFkgaGVyZSB0byBhbGxvdyBBRl9SWFJQQyB0byB1c2UgSVBWNiBVRFAgYXMgd2VsbCBhcyBJUFY0IFVEUCBhc1xubmV0L3J4cnBjL0tjb25maWctMzItXHQgIGl0cyBuZXR3b3JrIHRyYW5zcG9ydC5cbm5ldC9yeHJwYy9LY29uZmlnLTMzLVxubmV0L3J4cnBjL0tjb25maWc6MzQ6Y29uZmlnIEFGX1JYUlBDX0lOSkVDVF9MT1NTXG5uZXQvcnhycGMvS2NvbmZpZy0zNS1cdGJvb2wgXCYjMzQ7SW5qZWN0IHBhY2tldCBsb3NzIGludG8gUnhSUEMgcGFja2V0IHN0cmVhbVwmIzM0O1xuLS1cbm5ldC9yeHJwYy9LY29uZmlnLTM5LVxubmV0L3J4cnBjL0tjb25maWc6NDA6Y29uZmlnIEFGX1JYUlBDX0lOSkVDVF9SWF9ERUxBWVxubmV0L3J4cnBjL0tjb25maWctNDEtXHRib29sIFwmIzM0O0luamVjdCBkZWxheSBpbnRvIHBhY2tldCByZWNlcHRpb25cJiMzNDtcbi0tXG5uZXQvcnhycGMvS2NvbmZpZy00OS1cbm5ldC9yeHJwYy9LY29uZmlnOjUwOmNvbmZpZyBBRl9SWFJQQ19ERUJVR1xubmV0L3J4cnBjL0tjb25maWctNTEtXHRib29sIFwmIzM0O1J4UlBDIGR5bmFtaWMgZGVidWdnaW5nXCYjMzQ7XG4tLVxubmV0L3J4cnBjL0tjb25maWc9NTg9Y29uZmlnIFJYS0FEXG4tLVxubmV0L3J4cnBjL0tjb25maWctNjAtXHRoZWxwXG5uZXQvcnhycGMvS2NvbmZpZzo2MTpcdCAgUHJvdmlkZSBrZXJiZXJvcyA0IGFuZCBBRlMga2FzZXJ2ZXIgc2VjdXJpdHkgaGFuZGxpbmcgZm9yIEFGX1JYUlBDXG5uZXQvcnhycGMvS2NvbmZpZy02Mi1cdCAgdGhyb3VnaCB0aGUgdXNlIG9mIHRoZSBrZXkgcmV0ZW50aW9uIHNlcnZpY2UuXG4tLVxubmV0L3J4cnBjL0tjb25maWc9ODk9Y29uZmlnIFJYUEVSRlxuLS1cbm5ldC9yeHJwYy9LY29uZmlnLTk1LVxubmV0L3J4cnBjL0tjb25maWc6OTY6Y29uZmlnIEFGX1JYUlBDX0tVTklUX1RFU1Rcbm5ldC9yeHJwYy9LY29uZmlnLTk3LVx0dHJpc3RhdGUgXCYjMzQ7UnhSUEMgY3J5cHRvIEtVbml0IHRlc3RcJiMzNDsgaWYgIUtVTklUX0FMTF9URVNUU1xuLS1cbm5ldC9yeHJwYy9NYWtlZmlsZS01LVxubmV0L3J4cnBjL01ha2VmaWxlOjY6b2JqLSQoQ09ORklHX0FGX1JYUlBDKSAmIzQzOz0gcnhycGMub1xubmV0L3J4cnBjL01ha2VmaWxlLTctXG4tLVxubmV0L3J4cnBjL2FmX3J4cnBjLmMtMS0vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vci1sYXRlclxubmV0L3J4cnBjL2FmX3J4cnBjLmM6MjovKiBBRl9SWFJQQyBpbXBsZW1lbnRhdGlvblxubmV0L3J4cnBjL2FmX3J4cnBjLmMtMy0gKlxuLS1cbm5ldC9yeHJwYy9hZl9yeHJwYy5jPTc3PXN0YXRpYyBpbnQgcnhycGNfdmFsaWRhdGVfYWRkcmVzcyhzdHJ1Y3QgcnhycGNfc29jayAqcngsXG4tLVxubmV0L3J4cnBjL2FmX3J4cnBjLmMtODUtXG5uZXQvcnhycGMvYWZfcnhycGMuYzo4NjpcdGlmIChzcngtXHUwMDNlc3J4X2ZhbWlseSAhPSBBRl9SWFJQQylcbm5ldC9yeHJwYy9hZl9yeHJwYy5jLTg3LVx0XHRyZXR1cm4gLUVBRk5PU1VQUE9SVDtcbi0tXG5uZXQvcnhycGMvYWZfcnhycGMuYy0xMDYtXG5uZXQvcnhycGMvYWZfcnhycGMuYzoxMDc6I2lmZGVmIENPTkZJR19BRl9SWFJQQ19JUFY2XG5uZXQvcnhycGMvYWZfcnhycGMuYy0xMDgtXHRjYXNlIEFGX0lORVQ2OlxuLS1cbm5ldC9yeHJwYy9hZl9yeHJwYy5jPTUzOD1zdGF0aWMgaW50IHJ4cnBjX3NlbmRtc2coc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbSwgc2l6ZV90IGxlbilcbi0tXG5uZXQvcnhycGMvYWZfcnhycGMuYy01NjEtXHRjYXNlIFJYUlBDX0NMSUVOVF9VTkJPVU5EOlxubmV0L3J4cnBjL2FmX3J4cnBjLmM6NTYyOlx0XHRyeC1cdTAwM2Vzcnguc3J4X2ZhbWlseSA9IEFGX1JYUlBDO1xubmV0L3J4cnBjL2FmX3J4cnBjLmMtNTYzLVx0XHRyeC1cdTAwM2Vzcnguc3J4X3NlcnZpY2UgPSAwO1xuLS1cbm5ldC9yeHJwYy9hZl9yeHJwYy5jLTU2OS1cdFx0XHRicmVhaztcbm5ldC9yeHJwYy9hZl9yeHJwYy5jOjU3MDojaWZkZWYgQ09ORklHX0FGX1JYUlBDX0lQVjZcbm5ldC9yeHJwYy9hZl9yeHJwYy5jLTU3MS1cdFx0Y2FzZSBBRl9JTkVUNjpcbi0tXG5uZXQvcnhycGMvYWZfcnhycGMuYz04MDI9c3RhdGljIGludCByeHJwY19jcmVhdGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBpbnQgcHJvdG9jb2wsXG4tLVxubmV0L3J4cnBjL2FmX3J4cnBjLmMtODEyLVx0aWYgKHByb3RvY29sICE9IFBGX0lORVQgXHUwMDI2XHUwMDI2XG5uZXQvcnhycGMvYWZfcnhycGMuYzo4MTM6XHQgICAgSVNfRU5BQkxFRChDT05GSUdfQUZfUlhSUENfSVBWNikgXHUwMDI2XHUwMDI2IHByb3RvY29sICE9IFBGX0lORVQ2KVxubmV0L3J4cnBjL2FmX3J4cnBjLmMtODE0LVx0XHRyZXR1cm4gLUVQUk9UT05PU1VQUE9SVDtcbi0tXG5uZXQvcnhycGMvYXItaW50ZXJuYWwuaC0xLS8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9yLWxhdGVyICovXG5uZXQvcnhycGMvYXItaW50ZXJuYWwuaDoyOi8qIEFGX1JYUlBDIGludGVybmFsIGRlZmluaXRpb25zXG5uZXQvcnhycGMvYXItaW50ZXJuYWwuaC0zLSAqXG4tLVxubmV0L3J4cnBjL2FyLWludGVybmFsLmg9MjY1PXN0cnVjdCByeHJwY19zZWN1cml0eSB7XG4tLVxubmV0L3J4cnBjL2FyLWludGVybmFsLmgtMzQzLSAqIFJ4UlBDIGxvY2FsIHRyYW5zcG9ydCBlbmRwb2ludCBkZXNjcmlwdGlvblxubmV0L3J4cnBjL2FyLWludGVybmFsLmg6MzQ0OiAqIC0gb3duZWQgYnkgYSBzaW5nbGUgQUZfUlhSUEMgc29ja2V0XG5uZXQvcnhycGMvYXItaW50ZXJuYWwuaC0zNDUtICogLSBwb2ludGVkIHRvIGJ5IHRyYW5zcG9ydCBzb2NrZXQgc3RydWN0IHNrX3VzZXJfZGF0YVxuLS1cbm5ldC9yeHJwYy9hci1pbnRlcm5hbC5oPTM0Nz1zdHJ1Y3QgcnhycGNfbG9jYWwge1xuLS1cbm5ldC9yeHJwYy9hci1pbnRlcm5hbC5oLTM1OC1cdHN0cnVjdCByeHJwY19zb2NrXHQqc2VydmljZTtcdC8qIFNlcnZpY2UocykgbGlzdGVuaW5nIG9uIHRoaXMgZW5kcG9pbnQgKi9cbm5ldC9yeHJwYy9hci1pbnRlcm5hbC5oOjM1OTojaWZkZWYgQ09ORklHX0FGX1JYUlBDX0lOSkVDVF9SWF9ERUxBWVxubmV0L3J4cnBjL2FyLWludGVybmFsLmgtMzYwLVx0c3RydWN0IHNrX2J1ZmZfaGVhZFx0cnhfZGVsYXlfcXVldWU7XHQvKiBEZWxheSBpbmplY3Rpb24gcXVldWUgKi9cbi0tXG5uZXQvcnhycGMvYXItaW50ZXJuYWwuaD0xMzY0PWV4dGVybiB1bnNpZ25lZCBpbnQgcnhycGNfcnhfanVtYm9fbWF4O1xubmV0L3J4cnBjL2FyLWludGVybmFsLmg6MTM2NTojaWZkZWYgQ09ORklHX0FGX1JYUlBDX0lOSkVDVF9SWF9ERUxBWVxubmV0L3J4cnBjL2FyLWludGVybmFsLmgtMTM2Ni1leHRlcm4gdW5zaWduZWQgbG9uZyByeHJwY19pbmplY3RfcnhfZGVsYXk7XG4tLVxubmV0L3J4cnBjL2FyLWludGVybmFsLmg9MTYyMT1leHRlcm4gdW5zaWduZWQgaW50IHJ4cnBjX2RlYnVnO1xuLS1cbm5ldC9yeHJwYy9hci1pbnRlcm5hbC5oLTE2MzUtXG5uZXQvcnhycGMvYXItaW50ZXJuYWwuaDoxNjM2OiNlbGlmIGRlZmluZWQoQ09ORklHX0FGX1JYUlBDX0RFQlVHKVxubmV0L3J4cnBjL2FyLWludGVybmFsLmgtMTYzNy0jZGVmaW5lIFJYUlBDX0RFQlVHX0tFTlRFUlx0MHgwMVxuLS1cbm5ldC9yeHJwYy9jb25uX2NsaWVudC5jPTU0PXN0YXRpYyB2b2lkIHJ4cnBjX2Rlc3Ryb3lfY2xpZW50X2Nvbm5faWRzKHN0cnVjdCByeHJwY19sb2NhbCAqbG9jYWwpXG4tLVxubmV0L3J4cnBjL2Nvbm5fY2xpZW50LmMtNjAtXHRcdGlkcl9mb3JfZWFjaF9lbnRyeShcdTAwMjZsb2NhbC1cdTAwM2Vjb25uX2lkcywgY29ubiwgaWQpIHtcbm5ldC9yeHJwYy9jb25uX2NsaWVudC5jOjYxOlx0XHRcdHByX2VycihcJiMzNDtBRl9SWFJQQzogTGVha2VkIGNsaWVudCBjb25uICVwIHslZH1cXG5cJiMzNDssXG5uZXQvcnhycGMvY29ubl9jbGllbnQuYy02Mi1cdFx0XHQgICAgICAgY29ubiwgcmVmY291bnRfcmVhZChcdTAwMjZjb25uLVx1MDAzZXJlZikpO1xuLS1cbm5ldC9yeHJwYy9jb25uX29iamVjdC5jPTk3PXN0cnVjdCByeHJwY19jb25uZWN0aW9uICpyeHJwY19maW5kX2NsaWVudF9jb25uZWN0aW9uX3JjdShzdHJ1Y3QgcnhycGNfbG9jYWwgKmxvY2FsLFxuLS1cbm5ldC9yeHJwYy9jb25uX29iamVjdC5jLTEyNi1cdFx0YnJlYWs7XG5uZXQvcnhycGMvY29ubl9vYmplY3QuYzoxMjc6I2lmZGVmIENPTkZJR19BRl9SWFJQQ19JUFY2XG5uZXQvcnhycGMvY29ubl9vYmplY3QuYy0xMjgtXHRjYXNlIEFGX0lORVQ2OlxuLS1cbm5ldC9yeHJwYy9jb25uX29iamVjdC5jPTQ2Nj12b2lkIHJ4cnBjX2Rlc3Ryb3lfYWxsX2Nvbm5lY3Rpb25zKHN0cnVjdCByeHJwY19uZXQgKnJ4bmV0KVxuLS1cbm5ldC9yeHJwYy9jb25uX29iamVjdC5jLTQ4MC1cdGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShjb25uLCBfcCwgXHUwMDI2cnhuZXQtXHUwMDNlc2VydmljZV9jb25ucywgbGluaykge1xubmV0L3J4cnBjL2Nvbm5fb2JqZWN0LmM6NDgxOlx0XHRwcl9lcnIoXCYjMzQ7QUZfUlhSUEM6IExlYWtlZCBjb25uICVwIHslZH1cXG5cJiMzNDssXG5uZXQvcnhycGMvY29ubl9vYmplY3QuYy00ODItXHRcdCAgICAgICBjb25uLCByZWZjb3VudF9yZWFkKFx1MDAyNmNvbm4tXHUwMDNlcmVmKSk7XG4tLVxubmV0L3J4cnBjL2lvX3RocmVhZC5jPTI2PWludCByeHJwY19lbmNhcF9yY3Yoc3RydWN0IHNvY2sgKnVkcF9zaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvcnhycGMvaW9fdGhyZWFkLmMtNDYtXHRyeF9xdWV1ZSA9IFx1MDAyNmxvY2FsLVx1MDAzZXJ4X3F1ZXVlO1xubmV0L3J4cnBjL2lvX3RocmVhZC5jOjQ3OiNpZmRlZiBDT05GSUdfQUZfUlhSUENfSU5KRUNUX1JYX0RFTEFZXG5uZXQvcnhycGMvaW9fdGhyZWFkLmMtNDgtXHRpZiAocnhycGNfaW5qZWN0X3J4X2RlbGF5IHx8XG4tLVxubmV0L3J4cnBjL2lvX3RocmVhZC5jPTE5NT1zdGF0aWMgYm9vbCByeHJwY19pbnB1dF9wYWNrZXQoc3RydWN0IHJ4cnBjX2xvY2FsICpsb2NhbCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvcnhycGMvaW9fdGhyZWFkLmMtMjEwLVxubmV0L3J4cnBjL2lvX3RocmVhZC5jOjIxMTpcdGlmIChJU19FTkFCTEVEKENPTkZJR19BRl9SWFJQQ19JTkpFQ1RfTE9TUykpIHtcbm5ldC9yeHJwYy9pb190aHJlYWQuYy0yMTItXHRcdHN0YXRpYyBpbnQgbG9zZTtcbi0tXG5uZXQvcnhycGMvaW9fdGhyZWFkLmMtMjc1LVx0ICAgICBsb2NhbC1cdTAwM2VzcngudHJhbnNwb3J0LmZhbWlseSAhPSBBRl9JTkVUNikpIHtcbm5ldC9yeHJwYy9pb190aHJlYWQuYzoyNzY6XHRcdHByX3dhcm5fcmF0ZWxpbWl0ZWQoXCYjMzQ7QUZfUlhSUEM6IFByb3RvY29sIG1pc21hdGNoICV1IG5vdCAldVxcblwmIzM0Oyxcbm5ldC9yeHJwYy9pb190aHJlYWQuYy0yNzctXHRcdFx0XHQgICAgcGVlcl9zcngudHJhbnNwb3J0LmZhbWlseSxcbi0tXG5uZXQvcnhycGMvaW9fdGhyZWFkLmM9NDMwPWludCByeHJwY19pb190aHJlYWQodm9pZCAqZGF0YSlcbi0tXG5uZXQvcnhycGMvaW9fdGhyZWFkLmMtNDM2LVx0c3RydWN0IHNrX2J1ZmYgKnNrYjtcbm5ldC9yeHJwYy9pb190aHJlYWQuYzo0Mzc6I2lmZGVmIENPTkZJR19BRl9SWFJQQ19JTkpFQ1RfUlhfREVMQVlcbm5ldC9yeHJwYy9pb190aHJlYWQuYy00MzgtXHRrdGltZV90IG5vdztcbi0tXG5uZXQvcnhycGMvaW9fdGhyZWFkLmMtNDUzLVx0XHQvKiBJbmplY3QgYSBkZWxheSBpbnRvIHBhY2tldHMgaWYgcmVxdWVzdGVkLiAqL1xubmV0L3J4cnBjL2lvX3RocmVhZC5jOjQ1NDojaWZkZWYgQ09ORklHX0FGX1JYUlBDX0lOSkVDVF9SWF9ERUxBWVxubmV0L3J4cnBjL2lvX3RocmVhZC5jLTQ1NS1cdFx0bm93ID0ga3RpbWVfZ2V0X3JlYWwoKTtcbi0tXG5uZXQvcnhycGMvaW9fdGhyZWFkLmMtNTUyLVxubmV0L3J4cnBjL2lvX3RocmVhZC5jOjU1MzojaWZkZWYgQ09ORklHX0FGX1JYUlBDX0lOSkVDVF9SWF9ERUxBWVxubmV0L3J4cnBjL2lvX3RocmVhZC5jLTU1NC1cdFx0c2tiID0gc2tiX3BlZWsoXHUwMDI2bG9jYWwtXHUwMDNlcnhfZGVsYXlfcXVldWUpO1xuLS1cbm5ldC9yeHJwYy9sb2NhbF9ldmVudC5jLTEtLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb3ItbGF0ZXJcbm5ldC9yeHJwYy9sb2NhbF9ldmVudC5jOjI6LyogQUZfUlhSUEMgbG9jYWwgZW5kcG9pbnQgbWFuYWdlbWVudFxubmV0L3J4cnBjL2xvY2FsX2V2ZW50LmMtMy0gKlxuLS1cbm5ldC9yeHJwYy9sb2NhbF9ldmVudC5jLTE4LVxubmV0L3J4cnBjL2xvY2FsX2V2ZW50LmM6MTk6c3RhdGljIGNoYXIgcnhycGNfdmVyc2lvbl9zdHJpbmdbNjVdOyAvLyBcJiMzNDtsaW51eC1cJiMzNDsgVVRTX1JFTEVBU0UgXCYjMzQ7IEFGX1JYUlBDXCYjMzQ7O1xubmV0L3J4cnBjL2xvY2FsX2V2ZW50LmMtMjAtXG4tLVxubmV0L3J4cnBjL2xvY2FsX2V2ZW50LmM9MjQ9dm9pZCByeHJwY19nZW5fdmVyc2lvbl9zdHJpbmcodm9pZClcbi0tXG5uZXQvcnhycGMvbG9jYWxfZXZlbnQuYy0yNi1cdHNucHJpbnRmKHJ4cnBjX3ZlcnNpb25fc3RyaW5nLCBzaXplb2YocnhycGNfdmVyc2lvbl9zdHJpbmcpLFxubmV0L3J4cnBjL2xvY2FsX2V2ZW50LmM6Mjc6XHRcdCBcJiMzNDtsaW51eC0lLjQ5cyBBRl9SWFJQQ1wmIzM0OywgVVRTX1JFTEVBU0UpO1xubmV0L3J4cnBjL2xvY2FsX2V2ZW50LmMtMjgtfVxuLS1cbm5ldC9yeHJwYy9sb2NhbF9vYmplY3QuYz0zMD1zdGF0aWMgdm9pZCByeHJwY19lbmNhcF9lcnJfcmN2KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IGVycixcbi0tXG5uZXQvcnhycGMvbG9jYWxfb2JqZWN0LmMtMzQtXHRcdHJldHVybiBpcF9pY21wX2Vycm9yKHNrLCBza2IsIGVyciwgcG9ydCwgaW5mbywgcGF5bG9hZCk7XG5uZXQvcnhycGMvbG9jYWxfb2JqZWN0LmM6MzU6XHRpZiAoSVNfRU5BQkxFRChDT05GSUdfQUZfUlhSUENfSVBWNikpXG5uZXQvcnhycGMvbG9jYWxfb2JqZWN0LmMtMzYtXHRcdHJldHVybiBpcHY2X2ljbXBfZXJyb3Ioc2ssIHNrYiwgZXJyLCBwb3J0LCBpbmZvLCBwYXlsb2FkKTtcbi0tXG5uZXQvcnhycGMvbG9jYWxfb2JqZWN0LmM9NTk9c3RhdGljIGxvbmcgcnhycGNfbG9jYWxfY21wX2tleShjb25zdCBzdHJ1Y3QgcnhycGNfbG9jYWwgKmxvY2FsLFxuLS1cbm5ldC9yeHJwYy9sb2NhbF9vYmplY3QuYy03OS1cdFx0XHQgICAgICAgc2l6ZW9mKHN0cnVjdCBpbl9hZGRyKSk7XG5uZXQvcnhycGMvbG9jYWxfb2JqZWN0LmM6ODA6I2lmZGVmIENPTkZJR19BRl9SWFJQQ19JUFY2XG5uZXQvcnhycGMvbG9jYWxfb2JqZWN0LmMtODEtXHRjYXNlIEFGX0lORVQ2OlxuLS1cbm5ldC9yeHJwYy9sb2NhbF9vYmplY3QuYz0xMDk9c3RhdGljIHN0cnVjdCByeHJwY19sb2NhbCAqcnhycGNfYWxsb2NfbG9jYWwoc3RydWN0IG5ldCAqbmV0LFxuLS1cbm5ldC9yeHJwYy9sb2NhbF9vYmplY3QuYy0xMjItXHRcdGluaXRfY29tcGxldGlvbihcdTAwMjZsb2NhbC1cdTAwM2Vpb190aHJlYWRfcmVhZHkpO1xubmV0L3J4cnBjL2xvY2FsX29iamVjdC5jOjEyMzojaWZkZWYgQ09ORklHX0FGX1JYUlBDX0lOSkVDVF9SWF9ERUxBWVxubmV0L3J4cnBjL2xvY2FsX29iamVjdC5jLTEyNC1cdFx0c2tiX3F1ZXVlX2hlYWRfaW5pdChcdTAwMjZsb2NhbC1cdTAwM2VyeF9kZWxheV9xdWV1ZSk7XG4tLVxubmV0L3J4cnBjL2xvY2FsX29iamVjdC5jPTE2Mj1zdGF0aWMgaW50IHJ4cnBjX29wZW5fc29ja2V0KHN0cnVjdCByeHJwY19sb2NhbCAqbG9jYWwsIHN0cnVjdCBuZXQgKm5ldClcbi0tXG5uZXQvcnhycGMvbG9jYWxfb2JqZWN0LmMtMTc4LVx0XHR1ZHBfY29uZi5sb2NhbF91ZHBfcG9ydCA9IHNyeC1cdTAwM2V0cmFuc3BvcnQuc2luLnNpbl9wb3J0O1xubmV0L3J4cnBjL2xvY2FsX29iamVjdC5jOjE3OTojaWYgSVNfRU5BQkxFRChDT05GSUdfQUZfUlhSUENfSVBWNilcbm5ldC9yeHJwYy9sb2NhbF9vYmplY3QuYy0xODAtXHR9IGVsc2Uge1xuLS1cbm5ldC9yeHJwYy9sb2NhbF9vYmplY3QuYz00MjA9dm9pZCByeHJwY19kZXN0cm95X2xvY2FsKHN0cnVjdCByeHJwY19sb2NhbCAqbG9jYWwpXG4tLVxubmV0L3J4cnBjL2xvY2FsX29iamVjdC5jLTQ0Ni1cdCAqL1xubmV0L3J4cnBjL2xvY2FsX29iamVjdC5jOjQ0NzojaWZkZWYgQ09ORklHX0FGX1JYUlBDX0lOSkVDVF9SWF9ERUxBWVxubmV0L3J4cnBjL2xvY2FsX29iamVjdC5jLTQ0OC1cdHJ4cnBjX3B1cmdlX3F1ZXVlKFx1MDAyNmxvY2FsLVx1MDAzZXJ4X2RlbGF5X3F1ZXVlKTtcbi0tXG5uZXQvcnhycGMvbG9jYWxfb2JqZWN0LmM9NDY5PXZvaWQgcnhycGNfZGVzdHJveV9hbGxfbG9jYWxzKHN0cnVjdCByeHJwY19uZXQgKnJ4bmV0KVxuLS1cbm5ldC9yeHJwYy9sb2NhbF9vYmplY3QuYy00NzktXHRcdGhsaXN0X2Zvcl9lYWNoX2VudHJ5KGxvY2FsLCBcdTAwMjZyeG5ldC1cdTAwM2Vsb2NhbF9lbmRwb2ludHMsIGxpbmspIHtcbm5ldC9yeHJwYy9sb2NhbF9vYmplY3QuYzo0ODA6XHRcdFx0cHJfZXJyKFwmIzM0O0FGX1JYUlBDOiBMZWFrZWQgbG9jYWwgJXAgeyVkfVxcblwmIzM0Oyxcbm5ldC9yeHJwYy9sb2NhbF9vYmplY3QuYy00ODEtXHRcdFx0ICAgICAgIGxvY2FsLCByZWZjb3VudF9yZWFkKFx1MDAyNmxvY2FsLVx1MDAzZXJlZikpO1xuLS1cbm5ldC9yeHJwYy9taXNjLmM9NTU9dW5zaWduZWQgaW50IHJ4cnBjX3J4X2p1bWJvX21heCA9IDQ2O1xubmV0L3J4cnBjL21pc2MuYy01Ni1cbm5ldC9yeHJwYy9taXNjLmM6NTc6I2lmZGVmIENPTkZJR19BRl9SWFJQQ19JTkpFQ1RfUlhfREVMQVlcbm5ldC9yeHJwYy9taXNjLmMtNTgtLypcbi0tXG5uZXQvcnhycGMvb3V0cHV0LmM9MTk9c3NpemVfdCBkb191ZHBfc2VuZG1zZyhzdHJ1Y3Qgc29ja2V0ICpzb2NrZXQsIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IGxlbilcbi0tXG5uZXQvcnhycGMvb3V0cHV0LmMtMjMtXG5uZXQvcnhycGMvb3V0cHV0LmM6MjQ6XHRpZiAoSVNfRU5BQkxFRChDT05GSUdfQUZfUlhSUENfSVBWNikpIHtcbm5ldC9yeHJwYy9vdXRwdXQuYy0yNS1cdFx0aWYgKHNhLVx1MDAzZXNhX2ZhbWlseSA9PSBBRl9JTkVUNikge1xuLS1cbm5ldC9yeHJwYy9vdXRwdXQuYz02Mzk9dm9pZCByeHJwY19zZW5kX2RhdGFfcGFja2V0KHN0cnVjdCByeHJwY19jYWxsICpjYWxsLCBzdHJ1Y3QgcnhycGNfc2VuZF9kYXRhX3JlcSAqcmVxKVxuLS1cbm5ldC9yeHJwYy9vdXRwdXQuYy02OTMtXG5uZXQvcnhycGMvb3V0cHV0LmM6Njk0Olx0aWYgKElTX0VOQUJMRUQoQ09ORklHX0FGX1JYUlBDX0lOSkVDVF9MT1NTKSkge1xubmV0L3J4cnBjL291dHB1dC5jLTY5NS1cdFx0c3RhdGljIGludCBsb3NlO1xuLS1cbm5ldC9yeHJwYy9wZWVyX2V2ZW50LmM9Mjg9c3RhdGljIHN0cnVjdCByeHJwY19wZWVyICpyeHJwY19sb29rdXBfcGVlcl9sb2NhbF9yY3Uoc3RydWN0IHJ4cnBjX2xvY2FsICpsb2NhbCxcbi0tXG5uZXQvcnhycGMvcGVlcl9ldmVudC5jLTY2LVxubmV0L3J4cnBjL3BlZXJfZXZlbnQuYzo2NzojaWZkZWYgQ09ORklHX0FGX1JYUlBDX0lQVjZcbm5ldC9yeHJwYy9wZWVyX2V2ZW50LmMtNjgtXHRjYXNlIEFGX0lORVQ2OlxuLS1cbm5ldC9yeHJwYy9wZWVyX29iamVjdC5jPTMwPXN0YXRpYyB1bnNpZ25lZCBsb25nIHJ4cnBjX3BlZXJfaGFzaF9rZXkoc3RydWN0IHJ4cnBjX2xvY2FsICpsb2NhbCxcbi0tXG5uZXQvcnhycGMvcGVlcl9vYmplY3QuYy00OS1cdFx0YnJlYWs7XG5uZXQvcnhycGMvcGVlcl9vYmplY3QuYzo1MDojaWZkZWYgQ09ORklHX0FGX1JYUlBDX0lQVjZcbm5ldC9yeHJwYy9wZWVyX29iamVjdC5jLTUxLVx0Y2FzZSBBRl9JTkVUNjpcbi0tXG5uZXQvcnhycGMvcGVlcl9vYmplY3QuYy01Ny1cdGRlZmF1bHQ6XG5uZXQvcnhycGMvcGVlcl9vYmplY3QuYzo1ODpcdFx0V0FSTigxLCBcJiMzNDtBRl9SWFJQQzogVW5zdXBwb3J0ZWQgdHJhbnNwb3J0IGFkZHJlc3MgZmFtaWx5XFxuXCYjMzQ7KTtcbm5ldC9yeHJwYy9wZWVyX29iamVjdC5jLTU5LVx0XHRyZXR1cm4gMDtcbi0tXG5uZXQvcnhycGMvcGVlcl9vYmplY3QuYz03OD1zdGF0aWMgbG9uZyByeHJwY19wZWVyX2NtcF9rZXkoY29uc3Qgc3RydWN0IHJ4cnBjX3BlZXIgKnBlZXIsXG4tLVxubmV0L3J4cnBjL3BlZXJfb2JqZWN0LmMtOTktXHRcdFx0ICAgICAgIHNpemVvZihzdHJ1Y3QgaW5fYWRkcikpO1xubmV0L3J4cnBjL3BlZXJfb2JqZWN0LmM6MTAwOiNpZmRlZiBDT05GSUdfQUZfUlhSUENfSVBWNlxubmV0L3J4cnBjL3BlZXJfb2JqZWN0LmMtMTAxLVx0Y2FzZSBBRl9JTkVUNjpcbi0tXG5uZXQvcnhycGMvcGVlcl9vYmplY3QuYz0xNTI9dm9pZCByeHJwY19hc3Nlc3NfTVRVX3NpemUoc3RydWN0IHJ4cnBjX2xvY2FsICpsb2NhbCwgc3RydWN0IHJ4cnBjX3BlZXIgKnBlZXIpXG4tLVxubmV0L3J4cnBjL3BlZXJfb2JqZWN0LmMtMTU4LVx0c3RydWN0IGZsb3dpNCAqZmw0ID0gXHUwMDI2ZmwudS5pcDQ7XG5uZXQvcnhycGMvcGVlcl9vYmplY3QuYzoxNTk6I2lmZGVmIENPTkZJR19BRl9SWFJQQ19JUFY2XG5uZXQvcnhycGMvcGVlcl9vYmplY3QuYy0xNjAtXHRzdHJ1Y3QgZmxvd2k2ICpmbDYgPSBcdTAwMjZmbC51LmlwNjtcbi0tXG5uZXQvcnhycGMvcGVlcl9vYmplY3QuYy0xODMtXG5uZXQvcnhycGMvcGVlcl9vYmplY3QuYzoxODQ6I2lmZGVmIENPTkZJR19BRl9SWFJQQ19JUFY2XG5uZXQvcnhycGMvcGVlcl9vYmplY3QuYy0xODUtXHRjYXNlIEFGX0lORVQ2OlxuLS1cbm5ldC9yeHJwYy9wZWVyX29iamVjdC5jPTI1MD1zdGF0aWMgdm9pZCByeHJwY19pbml0X3BlZXIoc3RydWN0IHJ4cnBjX2xvY2FsICpsb2NhbCwgc3RydWN0IHJ4cnBjX3BlZXIgKnBlZXIsXG4tLVxubmV0L3J4cnBjL3BlZXJfb2JqZWN0LmMtMjU5LVx0XHRicmVhaztcbm5ldC9yeHJwYy9wZWVyX29iamVjdC5jOjI2MDojaWZkZWYgQ09ORklHX0FGX1JYUlBDX0lQVjZcbm5ldC9yeHJwYy9wZWVyX29iamVjdC5jLTI2MS1cdGNhc2UgQUZfSU5FVDY6XG4tLVxubmV0L3J4cnBjL3BlZXJfb2JqZWN0LmM9NTM4PUVYUE9SVF9TWU1CT0wocnhycGNfa2VybmVsX3JlbW90ZV9hZGRyKTtcbi0tXG5uZXQvcnhycGMvcGVlcl9vYmplY3QuYy01NDQtICpcbm5ldC9yeHJwYy9wZWVyX29iamVjdC5jOjU0NTogKiBTZXQgdGhlIGFwcC1zcGVjaWZpYyBkYXRhIG9uIGEgcGVlci4gIEFGX1JYUlBDIG1ha2VzIG5vIGVmZm9ydCB0byByZXRhaW5cbm5ldC9yeHJwYy9wZWVyX29iamVjdC5jLTU0Ni0gKiBhbnl0aGluZyB0aGUgZGF0YSBtaWdodCByZWZlciB0by5cbi0tXG5uZXQvcnhycGMvcHJvYy5jLTEtLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb3ItbGF0ZXJcbm5ldC9yeHJwYy9wcm9jLmM6MjovKiAvcHJvYy9uZXQvIHN1cHBvcnQgZm9yIEFGX1JYUlBDXG5uZXQvcnhycGMvcHJvYy5jLTMtICpcbi0tXG5uZXQvcnhycGMvcnR0LmMtMy0gKlxubmV0L3J4cnBjL3J0dC5jOjQ6ICogQWRhcHRlZCBmcm9tIFRDUCBmb3IgQUZfUlhSUEMgYnkgRGF2aWQgSG93ZWxscyAoZGhvd2VsbHNAcmVkaGF0LmNvbSlcbm5ldC9yeHJwYy9ydHQuYy01LSAqXG4tLVxubmV0L3J4cnBjL3J4cGVyZi5jPTE4NT1zdGF0aWMgaW50IHJ4cGVyZl9vcGVuX3NvY2tldCh2b2lkKVxuLS1cbm5ldC9yeHJwYy9yeHBlcmYuYy0xOTAtXG5uZXQvcnhycGMvcnhwZXJmLmM6MTkxOlx0cmV0ID0gc29ja19jcmVhdGVfa2VybihcdTAwMjZpbml0X25ldCwgQUZfUlhSUEMsIFNPQ0tfREdSQU0sIFBGX0lORVQ2LFxubmV0L3J4cnBjL3J4cGVyZi5jLTE5Mi1cdFx0XHQgICAgICAgXHUwMDI2c29ja2V0KTtcbi0tXG5uZXQvcnhycGMvcnhwZXJmLmMtMTk5LVx0bWVtc2V0KFx1MDAyNnNyeCwgMCwgc2l6ZW9mKHNyeCkpO1xubmV0L3J4cnBjL3J4cGVyZi5jOjIwMDpcdHNyeC5zcnhfZmFtaWx5XHRcdFx0PSBBRl9SWFJQQztcbm5ldC9yeHJwYy9yeHBlcmYuYy0yMDEtXHRzcnguc3J4X3NlcnZpY2VcdFx0XHQ9IFJYX1BFUkZfU0VSVklDRTtcbi0tXG5uZXQvcnhycGMvc2VuZG1zZy5jLTEtLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb3ItbGF0ZXJcbm5ldC9yeHJwYy9zZW5kbXNnLmM6MjovKiBBRl9SWFJQQyBzZW5kbXNnKCkgaW1wbGVtZW50YXRpb24uXG5uZXQvcnhycGMvc2VuZG1zZy5jLTMtICpcbi0tXG5uZXQvcnhycGMvc3lzY3RsLmM9MjM9c3RhdGljIGNvbnN0IHVuc2lnbmVkIGxvbmcgbWF4X2ppZmZpZXMgPSBNQVhfSklGRllfT0ZGU0VUO1xubmV0L3J4cnBjL3N5c2N0bC5jOjI0OiNpZmRlZiBDT05GSUdfQUZfUlhSUENfSU5KRUNUX1JYX0RFTEFZXG5uZXQvcnhycGMvc3lzY3RsLmMtMjUtc3RhdGljIGNvbnN0IHVuc2lnbmVkIGxvbmcgbWF4XzUwMCA9IDUwMDtcbi0tXG5uZXQvcnhycGMvc3lzY3RsLmM9MzQ9c3RhdGljIHN0cnVjdCBjdGxfdGFibGUgcnhycGNfc3lzY3RsX3RhYmxlW10gPSB7XG4tLVxubmV0L3J4cnBjL3N5c2N0bC5jLTczLVx0LyogVmFsdWVzIHVzZWQgaW4gbWlsbGlzZWNvbmRzICovXG5uZXQvcnhycGMvc3lzY3RsLmM6NzQ6I2lmZGVmIENPTkZJR19BRl9SWFJQQ19JTkpFQ1RfUlhfREVMQVlcbm5ldC9yeHJwYy9zeXNjdGwuYy03NS1cdHtcbi0tXG5uZXQvcnhycGMvdGVzdHMvTWFrZWZpbGUtMi1cbm5ldC9yeHJwYy90ZXN0cy9NYWtlZmlsZTozOm9iai0kKENPTkZJR19BRl9SWFJQQ19LVU5JVF9URVNUKSAmIzQzOz0gcnhycGNfa3VuaXQub1xuLS1cbm5ldC9yeHJwYy91dGlscy5jPTE2PWludCByeHJwY19leHRyYWN0X2FkZHJfZnJvbV9za2Ioc3RydWN0IHNvY2thZGRyX3J4cnBjICpzcngsIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L3J4cnBjL3V0aWxzLmMtMjgtXG5uZXQvcnhycGMvdXRpbHMuYzoyOTojaWZkZWYgQ09ORklHX0FGX1JYUlBDX0lQVjZcbm5ldC9yeHJwYy91dGlscy5jLTMwLVx0Y2FzZSBFVEhfUF9JUFY2OlxuLS1cbm5ldC9yeHJwYy91dGlscy5jLTM5LVx0ZGVmYXVsdDpcbm5ldC9yeHJwYy91dGlscy5jOjQwOlx0XHRwcl93YXJuX3JhdGVsaW1pdGVkKFwmIzM0O0FGX1JYUlBDOiBVbmtub3duIGV0aCBwcm90b2NvbCAldVxcblwmIzM0Oyxcbm5ldC9yeHJwYy91dGlscy5jLTQxLVx0XHRcdFx0ICAgIG50b2hzKHNrYi1cdTAwM2Vwcm90b2NvbCkpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDAyOjU5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwMTU3CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOgoKKipLY29uZmlnIERlcGVuZGVuY3kgQ2hlY2sgZm9yIEFGX1JYUlBDKioKCkFscmlnaHQsIGxldCYjMzk7cyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGRlcGVuZGVuY2llcyByZWxhdGVkIHRvIGBDT05GSUdfQUZfUlhSUENgLiBHaXZlbiBteSBleHBlcmllbmNlLCB0aGUgZmlyc3QgcGxhY2UgSSYjMzk7ZCBsb29rIGlzIHRoZSBrZXJuZWwmIzM5O3MgY29uZmlndXJhdGlvbiBmaWxlcy4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIHRoaW5raW5nIEkgc2hvdWxkIHN0YXJ0IGRpZ2dpbmcgaW50byB0aGUgYG5ldC9yeHJwYy9LY29uZmlnYCBmaWxlLiBUaGF0JiMzOTtzIHRoZSBtb3N0IGxvZ2ljYWwgc3BvdCBmb3IgZmlndXJpbmcgb3V0IHdoYXQgb3RoZXIgY29uZmlndXJhdGlvbnMgbWlnaHQgbmVlZCB0byBiZSBlbmFibGVkIG9yIGFyZSByZWxhdGVkIHRvIGdldCBgQUZfUlhSUENgIGZ1bmN0aW9uYWwuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgdG8gbWFrZSBhIHJlY29tbWVuZGF0aW9uLiBJIGhhdmUgdG8gbWFrZSBzdXJlIEkgZG9uJiMzOTt0IG92ZXJsb29rIGFueSBpbXBsaWNpdCBkZXBlbmRlbmNpZXMuIEkmIzM5O2xsIG5lZWQgdG8ga25vdyB3aGljaCBvdGhlciBmZWF0dXJlcyBpdCByZWxpZXMgdXBvbiwgYW5kIGFsc28gYW55IHJlbGF0aW9uc2hpcHMgd2l0aCByZWxhdGVkIHN1Yi1zeXN0ZW1zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDAyOjU5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L3J4cnBjL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiAgIDI6XHQjXG4gICAzOlx0IyBSeFJQQyBzZXNzaW9uIHNvY2tldHNcbiAgIDQ6XHQjXG4gICA1Olx0XG4gICA2Olx0Y29uZmlnIEFGX1JYUlBDXG4gICA3Olx0XHR0cmlzdGF0ZSBcJiMzNDtSeFJQQyBzZXNzaW9uIHNvY2tldHNcJiMzNDtcbiAgIDg6XHRcdGRlcGVuZHMgb24gSU5FVFxuICAgOTpcdFx0c2VsZWN0IENSWVBUT1xuICAxMDpcdFx0c2VsZWN0IENSWVBUT19MSUJfREVTIGlmIFJYS0FEXG4gIDExOlx0XHRzZWxlY3QgS0VZU1xuICAxMjpcdFx0c2VsZWN0IE5FVF9VRFBfVFVOTkVMXG4gIDEzOlx0XHRoZWxwXG4gIDE0Olx0XHQgIFNheSBZIG9yIE0gaGVyZSB0byBpbmNsdWRlIHN1cHBvcnQgZm9yIFJ4UlBDIHNlc3Npb24gc29ja2V0cyAoanVzdFxuICAxNTpcdFx0ICB0aGUgdHJhbnNwb3J0IHBhcnQsIG5vdCB0aGUgcHJlc2VudGF0aW9uIHBhcnQ6ICh1biltYXJzaGFsbGluZyBpc1xuICAxNjpcdFx0ICBsZWZ0IHRvIHRoZSBhcHBsaWNhdGlvbikuXG4gIDE3Olx0XG4gIDE4Olx0XHQgIFRoZXNlIGFyZSB1c2VkIGZvciBBRlMga2VybmVsIGZpbGVzeXN0ZW0gYW5kIHVzZXJzcGFjZSB1dGlsaXRpZXMuXG4gIDE5Olx0XG4gIDIwOlx0XHQgIFRoaXMgbW9kdWxlIGF0IHRoZSBtb21lbnQgb25seSBzdXBwb3J0cyBjbGllbnQgb3BlcmF0aW9ucyBhbmQgaXNcbiAgMjE6XHRcdCAgY3VycmVudGx5IGluY29tcGxldGUuXG4gIDIyOlx0XG4gIDIzOlx0XHQgIFNlZSBEb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvcnhycGMucnN0LlxuICAyNDpcdFxuICAyNTpcdGlmIEFGX1JYUlBDXG4gIDI2Olx0XG4gIDI3Olx0Y29uZmlnIEFGX1JYUlBDX0lQVjZcbiAgMjg6XHRcdGJvb2wgXCYjMzQ7SVB2NiBzdXBwb3J0IGZvciBSeFJQQ1wmIzM0O1xuICAyOTpcdFx0ZGVwZW5kcyBvbiBJUFY2XG4gIDMwOlx0XHRoZWxwXG4gIDMxOlx0XHQgIFNheSBZIGhlcmUgdG8gYWxsb3cgQUZfUlhSUEMgdG8gdXNlIElQVjYgVURQIGFzIHdlbGwgYXMgSVBWNCBVRFAgYXNcbiAgMzI6XHRcdCAgaXRzIG5ldHdvcmsgdHJhbnNwb3J0LlxuICAzMzpcdFxuICAzNDpcdGNvbmZpZyBBRl9SWFJQQ19JTkpFQ1RfTE9TU1xuICAzNTpcdFx0Ym9vbCBcJiMzNDtJbmplY3QgcGFja2V0IGxvc3MgaW50byBSeFJQQyBwYWNrZXQgc3RyZWFtXCYjMzQ7XG4gIDM2Olx0XHRoZWxwXG4gIDM3Olx0XHQgIFNheSBZIGhlcmUgdG8gaW5qZWN0IHBhY2tldCBsb3NzIGJ5IGRpc2NhcmRpbmcgc29tZSByZWNlaXZlZCBhbmQgc29tZVxuICAzODpcdFx0ICB0cmFuc21pdHRlZCBwYWNrZXRzLlxuICAzOTpcdFxuICA0MDpcdGNvbmZpZyBBRl9SWFJQQ19JTkpFQ1RfUlhfREVMQVlcbiAgNDE6XHRcdGJvb2wgXCYjMzQ7SW5qZWN0IGRlbGF5IGludG8gcGFja2V0IHJlY2VwdGlvblwmIzM0O1xuICA0MjpcdFx0ZGVwZW5kcyBvbiBTWVNDVExcbiAgNDM6XHRcdGhlbHBcbiAgNDQ6XHRcdCAgU2F5IFkgaGVyZSB0byBpbmplY3QgYSBkZWxheSBpbnRvIHBhY2tldCByZWNlcHRpb24sIGFsbG93aW5nIGFuXG4gIDQ1Olx0XHQgIGV4dGVuZGVkIFJUVCB0aW1lIHRvIGJlIG1vZGVsbGVkLiAgVGhlIGRlbGF5IGNhbiBiZSBjb25maWd1cmVkIHVzaW5nXG4gIDQ2Olx0XHQgIC9wcm9jL3N5cy9uZXQvcnhycGMvcnhycGNfaW5qZWN0X3J4X2RlbGF5LCBzZXR0aW5nIGEgbnVtYmVyIG9mXG4gIDQ3Olx0XHQgIG1pbGxpc2Vjb25kcyB1cCB0byAwLjVzIChub3RlIHRoYXQgdGhlIGdyYW51bGFyaXR5IGlzIGFjdHVhbGx5IGluXG4gIDQ4Olx0XHQgIGppZmZpZXMpLlxuICA0OTpcdFxuICA1MDpcdGNvbmZpZyBBRl9SWFJQQ19ERUJVR1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDAyOjU5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExMDUyCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYW5hbHlzaXMgb2YgdGhlIHNpdHVhdGlvbiwgcHJlc2VudGVkIGZyb20gbXkgcGVyc3BlY3RpdmUgYXMgYW4gZXhwZXJ0OgoKKipEaXZpbmcgaW50byB0aGUgUnhSUEMgTmV0d29yayBDb2RlKioKCk9rYXksIHNvIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gdGhlIGlubmVyIHdvcmtpbmdzIG9mIFJ4UlBDJiMzOTtzIG5ldHdvcmsgbmFtZXNwYWNlIGFuZCBwZWVyIG9iamVjdCBtYW5hZ2VtZW50LiBJIHNob3VsZCBzdGFydCBieSBkaWdnaW5nIGludG8gYG5ldC9yeHJwYy9uZXRfbnMuY2AgYW5kIGBuZXQvcnhycGMvcGVlcl9vYmplY3QuY2AuIFRob3NlIGZpbGVzIHNob3VsZCBjb250YWluIHRoZSBjb3JlIGltcGxlbWVudGF0aW9ucyBmb3IgaG93IFJ4UlBDIGludGVyYWN0cyB3aXRoIHRoZSBuZXR3b3JrIG5hbWVzcGFjZSBpbmZyYXN0cnVjdHVyZSBhbmQgaG93IGl0IGhhbmRsZXMgcGVlciBjb25uZWN0aW9ucyBhbmQgYXNzb2NpYXRlZCBkYXRhLiBJIGV4cGVjdCB0byBmaW5kIHRoZSBjcnVjaWFsIGRhdGEgc3RydWN0dXJlcyBhbmQgZnVuY3Rpb25zIHRoYXQgZ292ZXJuIHNvY2tldCBjcmVhdGlvbiwgYWRkcmVzcyBiaW5kaW5nLCBjb25uZWN0aW9uIGVzdGFibGlzaG1lbnQsIGFuZCBwZWVyIHRyYWNraW5nIHRoZXJlLiBNeSBnb2FsIGlzIHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIGVsZW1lbnRzIGludGVycmVsYXRlIGFuZCBob3cgdGhlIFJ4UlBDIHByb3RvY29sIGxldmVyYWdlcyB0aGUgdW5kZXJseWluZyBuZXR3b3JrIHN0YWNrLiBJJiMzOTttIGVzcGVjaWFsbHkgaW50ZXJlc3RlZCBpbiBjb25jdXJyZW5jeSBjb25zaWRlcmF0aW9ucyBhbmQgcG90ZW50aWFsIGJvdHRsZW5lY2tzIHdpdGhpbiB0aGVzZSBwYXJ0cyBvZiB0aGUgY29kZS4gVGhpcyB3aWxsIGJlIHRoZSBmb3VuZGF0aW9uIHRvIHNlZSBhYm91dCB0aGUgbmV0d29yayBuYW1lc3BhY2UgaW50ZXJhY3Rpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDI6NTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvcnhycGMvbmV0X25zLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA5MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDkwOlx0XHRcdFx0c2l6ZW9mKHN0cnVjdCBzZXFfbmV0X3ByaXZhdGUpKTtcbiAgOTE6XHRcdHByb2NfY3JlYXRlX25ldF9zaW5nbGVfd3JpdGUoXCYjMzQ7c3RhdHNcJiMzNDssIFNfSUZSRUcgfCAwNjQ0LCByeG5ldC1cdTAwM2Vwcm9jX25ldCxcbiAgOTI6XHRcdFx0XHRcdCAgICAgcnhycGNfc3RhdHNfc2hvdywgcnhycGNfc3RhdHNfY2xlYXIsIE5VTEwpO1xuICA5MzpcdFx0cmV0dXJuIDA7XG4gIDk0Olx0XG4gIDk1Olx0ZXJyX3Byb2M6XG4gIDk2Olx0XHRyeG5ldC1cdTAwM2VsaXZlID0gZmFsc2U7XG4gIDk3Olx0XHRyZXR1cm4gcmV0O1xuICA5ODpcdH1cbiAgOTk6XHRcbiAxMDA6XHRzdGF0aWMgX19uZXRfZXhpdCB2b2lkIHJ4cnBjX3ByZV9leGl0X25ldChzdHJ1Y3QgbmV0ICpuZXQpXG4gMTAxOlx0e1xuIDEwMjpcdFx0c3RydWN0IHJ4cnBjX25ldCAqcnhuZXQgPSByeHJwY19uZXQobmV0KTtcbiAxMDM6XHRcbiAxMDQ6XHRcdHJ4bmV0LVx1MDAzZWxpdmUgPSBmYWxzZTtcbiAxMDU6XHRcdHRpbWVyX2RlbGV0ZV9zeW5jKFx1MDAyNnJ4bmV0LVx1MDAzZXBlZXJfa2VlcGFsaXZlX3RpbWVyKTtcbiAxMDY6XHRcdGNhbmNlbF93b3JrX3N5bmMoXHUwMDI2cnhuZXQtXHUwMDNlcGVlcl9rZWVwYWxpdmVfd29yayk7XG4gMTA3Olx0XHQvKiBSZW1vdmUgdGhlIHRpbWVyIGFnYWluIGFzIHRoZSB3b3JrZXIgbWF5IGhhdmUgcmVzdGFydGVkIGl0LiAqL1xuIDEwODpcdFx0dGltZXJfZGVsZXRlX3N5bmMoXHUwMDI2cnhuZXQtXHUwMDNlcGVlcl9rZWVwYWxpdmVfdGltZXIpO1xuIDEwOTpcdFx0cnhycGNfZGVzdHJveV9hbGxfY2FsbHMocnhuZXQpO1xuIDExMDpcdFx0cnhycGNfZGVzdHJveV9hbGxfY29ubmVjdGlvbnMocnhuZXQpO1xuIDExMTpcdH1cbiAxMTI6XHRcbiAxMTM6XHQvKlxuIDExNDpcdCAqIENsZWFuIHVwIGEgcGVyLW5ldHdvcmsgbmFtZXNwYWNlIHJlY29yZC5cbiAxMTU6XHQgKi9cbiAxMTY6XHRzdGF0aWMgX19uZXRfZXhpdCB2b2lkIHJ4cnBjX2V4aXRfbmV0KHN0cnVjdCBuZXQgKm5ldClcbiAxMTc6XHR7XG4gMTE4Olx0XHRzdHJ1Y3QgcnhycGNfbmV0ICpyeG5ldCA9IHJ4cnBjX25ldChuZXQpO1xuIDExOTpcdFxuIDEyMDpcdFx0cnhycGNfZGVzdHJveV9hbGxfcGVlcnMocnhuZXQpO1xuIDEyMTpcdFx0cnhycGNfZGVzdHJveV9hbGxfbG9jYWxzKHJ4bmV0KTtcbiAxMjI6XHRcdHByb2NfcmVtb3ZlKHJ4bmV0LVx1MDAzZXByb2NfbmV0KTtcbiAxMjM6XHR9XG4gMTI0Olx0XG4gMTI1Olx0c3RydWN0IHBlcm5ldF9vcGVyYXRpb25zIHJ4cnBjX25ldF9vcHMgPSB7XG4gMTI2Olx0XHQuaW5pdFx0XHQ9IHJ4cnBjX2luaXRfbmV0LFxuIDEyNzpcdFx0LnByZV9leGl0XHQ9IHJ4cnBjX3ByZV9leGl0X25ldCxcbiAxMjg6XHRcdC5leGl0XHRcdD0gcnhycGNfZXhpdF9uZXQsXG4gMTI5Olx0XHQuaWRcdFx0PSBcdTAwMjZyeHJwY19uZXRfaWQsXG4gMTMwOlx0XHQuc2l6ZVx0XHQ9IHNpemVvZihzdHJ1Y3QgcnhycGNfbmV0KSxcbiAxMzE6XHR9O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDAyOjU5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExOTcyCgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czoKCioqUGVlcmluZyBEZWVwZXIgaW50byBQZWVyIE9iamVjdHMqKgoKT2theSwgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJiMzOTttIG5vdCBtaXNzaW5nIGFueXRoaW5nIGNydWNpYWwsIGVzcGVjaWFsbHkgd2hlbiBkZWFsaW5nIHdpdGggdGhlIGNvcmUgbmV0d29yayBpbnRlcmFjdGlvbnMuIFdoaWxlIEkmIzM5O3ZlIGZvY3VzZWQgb24gWCBhbmQgWSwgbXkgZ3V0IGZlZWxpbmcgdGVsbHMgbWUgdG8gYnJvYWRlbiB0aGUgc2NvcGUgYSBiaXQuIExldCYjMzk7cyBkaWcgaW50byBgbmV0L3J4cnBjL3BlZXJfb2JqZWN0LmNgLiBJdCYjMzk7cyBhIGtleSBwaWVjZSBvZiB0aGUgcHV6emxlLCBhbmQgSSBuZWVkIHRvIGVuc3VyZSB0aGF0IHRoZSBsb2dpYyB3aXRoaW4gdGhhdCBtb2R1bGUgcGxheXMgbmljZSB3aXRoIHRoZSBvdGhlciBhcmVhcyBJJiMzOTttIGludmVzdGlnYXRpbmcuIEkgd2FudCBhIGNvbXByZWhlbnNpdmUgdW5kZXJzdGFuZGluZywgYW5kIHRoaXMgc3BlY2lmaWMgZmlsZSBzZWVtcyBsaWtlIGEgZ29vZCBuZXh0IHN0ZXAgaW4gYWNoaWV2aW5nIHRoYXQuIExldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyBoYXBwZW5pbmcgdGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDAyOjU5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L3J4cnBjL3BlZXJfb2JqZWN0LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA0NDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDQ0MDpcdFx0aWYgKHBlZXIpIHtcbiA0NDE6XHRcdFx0ZGVidWdfaWQgPSBwZWVyLVx1MDAzZWRlYnVnX2lkO1xuIDQ0MjpcdFx0XHRkZWFkID0gX19yZWZjb3VudF9kZWNfYW5kX3Rlc3QoXHUwMDI2cGVlci1cdTAwM2VyZWYsIFx1MDAyNnIpO1xuIDQ0MzpcdFx0XHR0cmFjZV9yeHJwY19wZWVyKGRlYnVnX2lkLCByIC0gMSwgd2h5KTtcbiA0NDQ6XHRcdFx0aWYgKGRlYWQpXG4gNDQ1Olx0XHRcdFx0X19yeHJwY19wdXRfcGVlcihwZWVyKTtcbiA0NDY6XHRcdH1cbiA0NDc6XHR9XG4gNDQ4Olx0XG4gNDQ5Olx0LypcbiA0NTA6XHQgKiBNYWtlIHN1cmUgYWxsIHBlZXIgcmVjb3JkcyBoYXZlIGJlZW4gZGlzY2FyZGVkLlxuIDQ1MTpcdCAqL1xuIDQ1MjpcdHZvaWQgcnhycGNfZGVzdHJveV9hbGxfcGVlcnMoc3RydWN0IHJ4cnBjX25ldCAqcnhuZXQpXG4gNDUzOlx0e1xuIDQ1NDpcdFx0c3RydWN0IHJ4cnBjX3BlZXIgKnBlZXI7XG4gNDU1Olx0XHRpbnQgaTtcbiA0NTY6XHRcbiA0NTc6XHRcdC8qXG4gNDU4Olx0XHQgKiBQcmV2ZW50IHVzZS1hZnRlci1mcmVlIGlmIGEgcGVlciBpcyBjb25jdXJyZW50bHkgdW5saW5rZWQgZnJvbSB0aGVcbiA0NTk6XHRcdCAqIGhhc2ggdGFibGUgYW5kIGZyZWVkIHZpYSBSQ1UgZHVyaW5nIGl0ZXJhdGlvbi5cbiA0NjA6XHRcdCAqL1xuIDQ2MTpcdFx0c3Bpbl9sb2NrX2JoKFx1MDAyNnJ4bmV0LVx1MDAzZXBlZXJfaGFzaF9sb2NrKTtcbiA0NjI6XHRcbiA0NjM6XHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIEhBU0hfU0laRShyeG5ldC1cdTAwM2VwZWVyX2hhc2gpOyBpJiM0MzsmIzQzOykge1xuIDQ2NDpcdFx0XHRpZiAoaGxpc3RfZW1wdHkoXHUwMDI2cnhuZXQtXHUwMDNlcGVlcl9oYXNoW2ldKSlcbiA0NjU6XHRcdFx0XHRjb250aW51ZTtcbiA0NjY6XHRcbiA0Njc6XHRcdFx0aGxpc3RfZm9yX2VhY2hfZW50cnkocGVlciwgXHUwMDI2cnhuZXQtXHUwMDNlcGVlcl9oYXNoW2ldLCBoYXNoX2xpbmspIHtcbiA0Njg6XHRcdFx0XHRwcl9lcnIoXCYjMzQ7TGVha2VkIHBlZXIgJXggeyV1fSAlcElTcFxcblwmIzM0OyxcbiA0Njk6XHRcdFx0XHQgICAgICAgcGVlci1cdTAwM2VkZWJ1Z19pZCxcbiA0NzA6XHRcdFx0XHQgICAgICAgcmVmY291bnRfcmVhZChcdTAwMjZwZWVyLVx1MDAzZXJlZiksXG4gNDcxOlx0XHRcdFx0ICAgICAgIFx1MDAyNnBlZXItXHUwMDNlc3J4LnRyYW5zcG9ydCk7XG4gNDcyOlx0XHRcdH1cbiA0NzM6XHRcdH1cbiA0NzQ6XHRcbiA0NzU6XHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNnJ4bmV0LVx1MDAzZXBlZXJfaGFzaF9sb2NrKTtcbiA0NzY6XHR9XG4gNDc3Olx0XG4gNDc4Olx0LyoqXG4gNDc5Olx0ICogcnhycGNfa2VybmVsX2dldF9jYWxsX3BlZXIgLSBHZXQgdGhlIHBlZXIgYWRkcmVzcyBvZiBhIGNhbGxcbiA0ODA6XHQgKiBAc29jazogVGhlIHNvY2tldCBvbiB3aGljaCB0aGUgY2FsbCBpcyBpbiBwcm9ncmVzcy5cbiA0ODE6XHQgKiBAY2FsbDogVGhlIGNhbGwgdG8gcXVlcnlcbiA0ODI6XHQgKlxuIDQ4MzpcdCAqIEdldCBhIHJlY29yZCBmb3IgdGhlIHJlbW90ZSBwZWVyIGluIGEgY2FsbC5cbiA0ODQ6XHQgKlxuIDQ4NTpcdCAqIFJldHVybjogVGhlIGNhbGwmIzM5O3MgcGVlciByZWNvcmQuXG4gNDg2Olx0ICovXG4gNDg3Olx0c3RydWN0IHJ4cnBjX3BlZXIgKnJ4cnBjX2tlcm5lbF9nZXRfY2FsbF9wZWVyKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCByeHJwY19jYWxsICpjYWxsKVxuIDQ4ODpcdHtcbiA0ODk6XHRcdHJldHVybiByeHJwY19nZXRfcGVlcihjYWxsLVx1MDAzZXBlZXIsIHJ4cnBjX3BlZXJfZ2V0X2FwcGxpY2F0aW9uKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDI6NTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI5NDMKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiAyMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKk5hdmlnYXRpbmcgdGhlIENvZGViYXNlKioKCk9rYXksIGhlcmUmIzM5O3MgdGhlIHNpdHVhdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBjaGFuZ2UsIHRoaXMgcGFydGljdWxhciBjb21taXQsIHJlYWxseSBxdWlja2x5LiBUaGUgZmlyc3QgdGhpbmcgSSBhbHdheXMgZG8gaXMgdHJhY2UgYmFjayB0aGUgY29udGV4dC4gV2hhdCB3YXMgdGhlICppbnRlbnQqIGJlaGluZCB0aGlzIGNvZGU/IEkgbmVlZCB0byBqb2cgbXkgbWVtb3J5LCBhbmQgb2Z0ZW4gdGhlIGJlc3QgcGxhY2UgdG8gc3RhcnQgaXMgdGhlIGNvbW1pdCBtZXNzYWdlLiAmIzM0O0dpdCBsb2cmIzM0OyBpcyB0aGUgZ28tdG8gdG9vbCBmb3IgdGhhdCwgaXQmIzM5O3MgbXkgZmlyc3Qgc3RvcCB0byBnZXQgYSBoaWdoLWxldmVsIG92ZXJ2aWV3LiBGcm9tIHRoZSBjb21taXQgbWVzc2FnZSBJIGNhbiB0aGVuIGRlZHVjZSB3aGF0IHByb2JsZW1zIHRoZSBjb2RlIGFpbXMgdG8gc29sdmUsIHdoYXQgZGVzaWduIGRlY2lzaW9ucyB3ZXJlIGluIHBsYXksIG9yIGFueSBvdGhlciBwZXJ0aW5lbnQgaW5mb3JtYXRpb24uIEl0IGdpdmVzIG1lIGEgc3RhcnRpbmcgcG9pbnQgZnJvbSB3aGljaCB0byBhbmFseXplIHRoaXMgc3BlY2lmaWMgcGllY2Ugb2YgdGhlIGNvZGViYXNlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwMjo1OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwZWVyX2hhc2hfbG9jayYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9yeHJwYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvcnhycGMvYXItaW50ZXJuYWwuaD04Nj1zdHJ1Y3QgcnhycGNfbmV0IHtcbi0tXG5uZXQvcnhycGMvYXItaW50ZXJuYWwuaC0xMDgtXHRERUNMQVJFX0hBU0hUQUJMRVx0KHBlZXJfaGFzaCwgMTApO1xubmV0L3J4cnBjL2FyLWludGVybmFsLmg6MTA5Olx0c3BpbmxvY2tfdFx0XHRwZWVyX2hhc2hfbG9jaztcdC8qIExvY2sgZm9yIC1cdTAwM2VwZWVyX2hhc2ggKi9cbm5ldC9yeHJwYy9hci1pbnRlcm5hbC5oLTExMC1cbi0tXG5uZXQvcnhycGMvbmV0X25zLmM9MzQ9c3RhdGljIF9fbmV0X2luaXQgaW50IHJ4cnBjX2luaXRfbmV0KHN0cnVjdCBuZXQgKm5ldClcbi0tXG5uZXQvcnhycGMvbmV0X25zLmMtNjItXHRoYXNoX2luaXQocnhuZXQtXHUwMDNlcGVlcl9oYXNoKTtcbm5ldC9yeHJwYy9uZXRfbnMuYzo2MzpcdHNwaW5fbG9ja19pbml0KFx1MDAyNnJ4bmV0LVx1MDAzZXBlZXJfaGFzaF9sb2NrKTtcbm5ldC9yeHJwYy9uZXRfbnMuYy02NC1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIEFSUkFZX1NJWkUocnhuZXQtXHUwMDNlcGVlcl9rZWVwYWxpdmUpOyBpJiM0MzsmIzQzOylcbi0tXG5uZXQvcnhycGMvcGVlcl9ldmVudC5jPTI1OD1zdGF0aWMgdm9pZCByeHJwY19wZWVyX2tlZXBhbGl2ZV9kaXNwYXRjaChzdHJ1Y3QgcnhycGNfbmV0ICpyeG5ldCxcbi0tXG5uZXQvcnhycGMvcGVlcl9ldmVudC5jLTI2OC1cbm5ldC9yeHJwYy9wZWVyX2V2ZW50LmM6MjY5Olx0c3Bpbl9sb2NrX2JoKFx1MDAyNnJ4bmV0LVx1MDAzZXBlZXJfaGFzaF9sb2NrKTtcbm5ldC9yeHJwYy9wZWVyX2V2ZW50LmMtMjcwLVxuLS1cbm5ldC9yeHJwYy9wZWVyX2V2ZW50LmMtMjc5LVx0XHR1c2UgPSBfX3J4cnBjX3VzZV9sb2NhbChwZWVyLVx1MDAzZWxvY2FsLCByeHJwY19sb2NhbF91c2VfcGVlcl9rZWVwYWxpdmUpO1xubmV0L3J4cnBjL3BlZXJfZXZlbnQuYzoyODA6XHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNnJ4bmV0LVx1MDAzZXBlZXJfaGFzaF9sb2NrKTtcbm5ldC9yeHJwYy9wZWVyX2V2ZW50LmMtMjgxLVxuLS1cbm5ldC9yeHJwYy9wZWVyX2V2ZW50LmMtMjk5LVx0XHRcdHNsb3QgXHUwMDI2PSBtYXNrO1xubmV0L3J4cnBjL3BlZXJfZXZlbnQuYzozMDA6XHRcdFx0c3Bpbl9sb2NrX2JoKFx1MDAyNnJ4bmV0LVx1MDAzZXBlZXJfaGFzaF9sb2NrKTtcbm5ldC9yeHJwYy9wZWVyX2V2ZW50LmMtMzAxLVx0XHRcdGxpc3RfYWRkX3RhaWwoXHUwMDI2cGVlci1cdTAwM2VrZWVwYWxpdmVfbGluayxcbm5ldC9yeHJwYy9wZWVyX2V2ZW50LmMtMzAyLVx0XHRcdFx0ICAgICAgXHUwMDI2cnhuZXQtXHUwMDNlcGVlcl9rZWVwYWxpdmVbc2xvdCBcdTAwMjYgbWFza10pO1xubmV0L3J4cnBjL3BlZXJfZXZlbnQuYzozMDM6XHRcdFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2cnhuZXQtXHUwMDNlcGVlcl9oYXNoX2xvY2spO1xubmV0L3J4cnBjL3BlZXJfZXZlbnQuYy0zMDQtXHRcdFx0cnhycGNfdW51c2VfbG9jYWwocGVlci1cdTAwM2Vsb2NhbCwgcnhycGNfbG9jYWxfdW51c2VfcGVlcl9rZWVwYWxpdmUpO1xuLS1cbm5ldC9yeHJwYy9wZWVyX2V2ZW50LmMtMzA2LVx0XHRyeHJwY19wdXRfcGVlcihwZWVyLCByeHJwY19wZWVyX3B1dF9rZWVwYWxpdmUpO1xubmV0L3J4cnBjL3BlZXJfZXZlbnQuYzozMDc6XHRcdHNwaW5fbG9ja19iaChcdTAwMjZyeG5ldC1cdTAwM2VwZWVyX2hhc2hfbG9jayk7XG5uZXQvcnhycGMvcGVlcl9ldmVudC5jLTMwOC1cdH1cbm5ldC9yeHJwYy9wZWVyX2V2ZW50LmMtMzA5LVxubmV0L3J4cnBjL3BlZXJfZXZlbnQuYzozMTA6XHRzcGluX3VubG9ja19iaChcdTAwMjZyeG5ldC1cdTAwM2VwZWVyX2hhc2hfbG9jayk7XG5uZXQvcnhycGMvcGVlcl9ldmVudC5jLTMxMS19XG4tLVxubmV0L3J4cnBjL3BlZXJfZXZlbnQuYz0zMTY9dm9pZCByeHJwY19wZWVyX2tlZXBhbGl2ZV93b3JrZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuLS1cbm5ldC9yeHJwYy9wZWVyX2V2ZW50LmMtMzM5LVx0ICovXG5uZXQvcnhycGMvcGVlcl9ldmVudC5jOjM0MDpcdHNwaW5fbG9ja19iaChcdTAwMjZyeG5ldC1cdTAwM2VwZWVyX2hhc2hfbG9jayk7XG5uZXQvcnhycGMvcGVlcl9ldmVudC5jLTM0MS1cdGxpc3Rfc3BsaWNlX2luaXQoXHUwMDI2cnhuZXQtXHUwMDNlcGVlcl9rZWVwYWxpdmVfbmV3LCBcdTAwMjZjb2xsZWN0b3IpO1xuLS1cbm5ldC9yeHJwYy9wZWVyX2V2ZW50LmMtMzUxLVx0YmFzZSA9IG5vdztcbm5ldC9yeHJwYy9wZWVyX2V2ZW50LmM6MzUyOlx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2cnhuZXQtXHUwMDNlcGVlcl9oYXNoX2xvY2spO1xubmV0L3J4cnBjL3BlZXJfZXZlbnQuYy0zNTMtXG4tLVxubmV0L3J4cnBjL3BlZXJfb2JqZWN0LmM9MzE3PXZvaWQgcnhycGNfbmV3X2luY29taW5nX3BlZXIoc3RydWN0IHJ4cnBjX2xvY2FsICpsb2NhbCwgc3RydWN0IHJ4cnBjX3BlZXIgKnBlZXIpXG4tLVxubmV0L3J4cnBjL3BlZXJfb2JqZWN0LmMtMzI0LVxubmV0L3J4cnBjL3BlZXJfb2JqZWN0LmM6MzI1Olx0c3Bpbl9sb2NrKFx1MDAyNnJ4bmV0LVx1MDAzZXBlZXJfaGFzaF9sb2NrKTtcbm5ldC9yeHJwYy9wZWVyX29iamVjdC5jLTMyNi1cdGhhc2hfYWRkX3JjdShyeG5ldC1cdTAwM2VwZWVyX2hhc2gsIFx1MDAyNnBlZXItXHUwMDNlaGFzaF9saW5rLCBoYXNoX2tleSk7XG5uZXQvcnhycGMvcGVlcl9vYmplY3QuYy0zMjctXHRsaXN0X2FkZF90YWlsKFx1MDAyNnBlZXItXHUwMDNla2VlcGFsaXZlX2xpbmssIFx1MDAyNnJ4bmV0LVx1MDAzZXBlZXJfa2VlcGFsaXZlX25ldyk7XG5uZXQvcnhycGMvcGVlcl9vYmplY3QuYzozMjg6XHRzcGluX3VubG9jayhcdTAwMjZyeG5ldC1cdTAwM2VwZWVyX2hhc2hfbG9jayk7XG5uZXQvcnhycGMvcGVlcl9vYmplY3QuYy0zMjktfVxuLS1cbm5ldC9yeHJwYy9wZWVyX29iamVjdC5jPTMzND1zdHJ1Y3QgcnhycGNfcGVlciAqcnhycGNfbG9va3VwX3BlZXIoc3RydWN0IHJ4cnBjX2xvY2FsICpsb2NhbCxcbi0tXG5uZXQvcnhycGMvcGVlcl9vYmplY3QuYy0zNTktXG5uZXQvcnhycGMvcGVlcl9vYmplY3QuYzozNjA6XHRcdHNwaW5fbG9ja19iaChcdTAwMjZyeG5ldC1cdTAwM2VwZWVyX2hhc2hfbG9jayk7XG5uZXQvcnhycGMvcGVlcl9vYmplY3QuYy0zNjEtXG4tLVxubmV0L3J4cnBjL3BlZXJfb2JqZWN0LmMtMzcyLVxubmV0L3J4cnBjL3BlZXJfb2JqZWN0LmM6MzczOlx0XHRzcGluX3VubG9ja19iaChcdTAwMjZyeG5ldC1cdTAwM2VwZWVyX2hhc2hfbG9jayk7XG5uZXQvcnhycGMvcGVlcl9vYmplY3QuYy0zNzQtXG4tLVxubmV0L3J4cnBjL3BlZXJfb2JqZWN0LmM9NDE3PXN0YXRpYyB2b2lkIF9fcnhycGNfcHV0X3BlZXIoc3RydWN0IHJ4cnBjX3BlZXIgKnBlZXIpXG4tLVxubmV0L3J4cnBjL3BlZXJfb2JqZWN0LmMtNDIyLVxubmV0L3J4cnBjL3BlZXJfb2JqZWN0LmM6NDIzOlx0c3Bpbl9sb2NrX2JoKFx1MDAyNnJ4bmV0LVx1MDAzZXBlZXJfaGFzaF9sb2NrKTtcbm5ldC9yeHJwYy9wZWVyX29iamVjdC5jLTQyNC1cdGhhc2hfZGVsX3JjdShcdTAwMjZwZWVyLVx1MDAzZWhhc2hfbGluayk7XG5uZXQvcnhycGMvcGVlcl9vYmplY3QuYy00MjUtXHRsaXN0X2RlbF9pbml0KFx1MDAyNnBlZXItXHUwMDNla2VlcGFsaXZlX2xpbmspO1xubmV0L3J4cnBjL3BlZXJfb2JqZWN0LmM6NDI2Olx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2cnhuZXQtXHUwMDNlcGVlcl9oYXNoX2xvY2spO1xubmV0L3J4cnBjL3BlZXJfb2JqZWN0LmMtNDI3LVxuLS1cbm5ldC9yeHJwYy9wZWVyX29iamVjdC5jPTQ1Mj12b2lkIHJ4cnBjX2Rlc3Ryb3lfYWxsX3BlZXJzKHN0cnVjdCByeHJwY19uZXQgKnJ4bmV0KVxuLS1cbm5ldC9yeHJwYy9wZWVyX29iamVjdC5jLTQ2MC1cdCAqL1xubmV0L3J4cnBjL3BlZXJfb2JqZWN0LmM6NDYxOlx0c3Bpbl9sb2NrX2JoKFx1MDAyNnJ4bmV0LVx1MDAzZXBlZXJfaGFzaF9sb2NrKTtcbm5ldC9yeHJwYy9wZWVyX29iamVjdC5jLTQ2Mi1cbi0tXG5uZXQvcnhycGMvcGVlcl9vYmplY3QuYy00NzQtXG5uZXQvcnhycGMvcGVlcl9vYmplY3QuYzo0NzU6XHRzcGluX3VubG9ja19iaChcdTAwMjZyeG5ldC1cdTAwM2VwZWVyX2hhc2hfbG9jayk7XG5uZXQvcnhycGMvcGVlcl9vYmplY3QuYy00NzYtfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwMjo1OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDg5OQoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDM5MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgVGhpcyBQYXRjaCBmb3IgRnV6emluZyBQb3RlbnRpYWwqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgcGF0Y2ggZG93biBmcm9tIGEgZnV6emluZyBwZXJzcGVjdGl2ZS4gSXQmIzM5O3MgdGFyZ2V0aW5nIHRoZSBgbmV0L3J4cnBjYCBzdWJzeXN0ZW0sIHdoaWNoIGlzIEFGX1JYUlBDLCBhIG5ldHdvcmtpbmcgcHJvdG9jb2wuIEZpcnN0LCBhIHNhbml0eSBjaGVjazogY2FuIHN5emthbGxlciBldmVuIHJlYWNoIGl0PyBZZXAsIGl0JiMzOTtzIHNvY2tldC1iYXNlZCAoYHNvY2tldChBRl9SWFJQQywgLi4uKWApIGFuZCBwbGF5cyBuaWNlbHkgd2l0aCBuZXR3b3JrIG5hbWVzcGFjZXMgKGB1bnNoYXJlKENMT05FX05FV05FVClgKSwgYW5kIHN5emthbGxlciYjMzk7cyBnb3QgdGhlIG5hbWVzcGFjZSBjbGVhbnVwIGRvd24gcGF0IHdpdGggYHByZV9leGl0YCBhbmQgYGV4aXRgIHJvdXRpbmVzLgoKVGhlIHBhdGNoIGl0c2VsZiBpcyB0b3VjaGluZyBzb21lIGludGVyZXN0aW5nIGFyZWFzOiBgcnhycGNfcHJlX2V4aXRfbmV0YCwgYSBuZXcgYHByZV9leGl0YCBoYW5kbGVyLCBgcnhycGNfZXhpdF9uZXRgLCBhbmQgYHJ4cnBjX2Rlc3Ryb3lfYWxsX3BlZXJzYC4gVGhhdCYjMzk7cyBhIHN0cm9uZyBzaWduYWwsIGVzcGVjaWFsbHkgd2hlbiBjb25zaWRlcmluZyBsaWZlY3ljbGUgbWFuYWdlbWVudCB3aXRoaW4gbmV0d29yayBuYW1lc3BhY2VzIGFuZCBzeW5jaHJvbml6YXRpb24gaXNzdWVzIHdpdGhpbiBgcnhycGNfZGVzdHJveV9hbGxfcGVlcnNgLCB3aGljaCBvZnRlbiBsZWFkcyB0byBpbnRlcmVzdGluZyByYWNlIGNvbmRpdGlvbnMuCgpOb3csIGFjY2Vzc2liaWxpdHkuIFRoaXMgaXMgYSBmdWxseSBzb2Z0d2FyZS1iYXNlZCBwcm90b2NvbCwgd2hpY2ggbWVhbnMgaXQgc2hvdWxkIGJlIHJlYWNoYWJsZSBpbiBRRU1VIG9yIEdDRSBlbnZpcm9ubWVudHMg4oCTIG5vIGhhcmR3YXJlIGRlcGVuZGVuY2llcywgd2hpY2ggaXMgZ3JlYXQgZm9yIG91ciBwdXJwb3Nlcy4KCklzIHRoaXMgd29ydGggdGhlIGVmZm9ydD8gQWJzb2x1dGVseS4gQ29yZSBuZXR3b3JraW5nIHByb3RvY29sPyBDaGVjay4gTGlmZWN5Y2xlIG1hbmFnZW1lbnQgd2l0aGluIG5ldG5zPyBDaGVjaywgYW5kIHRoYXQmIzM5O3Mgb2Z0ZW4gYSB0cmVhc3VyZSB0cm92ZSBmb3IgZmluZGluZyBidWdzLCBsaWtlIG5ldG5zIGV4aXQgYnVncyBhbmQgc29ja2V0IGNsZWFudXAgaXNzdWVzLiBUaGUgdXNlIG9mIGBwcmVfZXhpdGAgaXMgcGFydGljdWxhcmx5IGludGVyZXN0aW5nLgoKQmVmb3JlIHdlIHByb2NlZWQsIGxldCYjMzk7cyBxdWlja2x5IGNoZWNrIHRoZSByZXF1aXJlZCBjb25maWd1cmF0aW9ucy4gV2UmIzM5O2xsIG5lZWQgYEFGX1JYUlBDYCAoUnhSUEMgc2Vzc2lvbiBzb2NrZXRzLCB3aGljaCBkZXBlbmRzIG9uIGBJTkVUYCkgYW5kIGBJTkVUYCAoc3RhbmRhcmQgSVB2NCBuZXR3b3JraW5nKS4gQW55IG90aGVyIGRlcGVuZGVuY2llcz8gTGV0JiMzOTtzIHF1aWNrbHkgc2NhbiB0aGUgYG5ldC9yeHJwYy9NYWtlZmlsZWAgdG8gYmUgc3VyZSwgYW5kIG5vIG90aGVyIGNvbmZpZ3Mgd2VyZSBmb3VuZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDI6NTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvcnhycGMvTWFrZWZpbGUmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4gICAyOlx0I1xuICAgMzpcdCMgTWFrZWZpbGUgZm9yIExpbnV4IGtlcm5lbCBSeFJQQ1xuICAgNDpcdCNcbiAgIDU6XHRcbiAgIDY6XHRvYmotJChDT05GSUdfQUZfUlhSUEMpICYjNDM7PSByeHJwYy5vXG4gICA3Olx0XG4gICA4Olx0cnhycGMteSA6PSBcXFxuICAgOTpcdFx0YWZfcnhycGMubyBcXFxuICAxMDpcdFx0Y2FsbF9hY2NlcHQubyBcXFxuICAxMTpcdFx0Y2FsbF9ldmVudC5vIFxcXG4gIDEyOlx0XHRjYWxsX29iamVjdC5vIFxcXG4gIDEzOlx0XHRjYWxsX3N0YXRlLm8gXFxcbiAgMTQ6XHRcdGNvbm5fY2xpZW50Lm8gXFxcbiAgMTU6XHRcdGNvbm5fZXZlbnQubyBcXFxuICAxNjpcdFx0Y29ubl9vYmplY3QubyBcXFxuICAxNzpcdFx0Y29ubl9zZXJ2aWNlLm8gXFxcbiAgMTg6XHRcdGlucHV0Lm8gXFxcbiAgMTk6XHRcdGlucHV0X3JhY2subyBcXFxuICAyMDpcdFx0aW5zZWN1cmUubyBcXFxuICAyMTpcdFx0aW9fdGhyZWFkLm8gXFxcbiAgMjI6XHRcdGtleS5vIFxcXG4gIDIzOlx0XHRsb2NhbF9ldmVudC5vIFxcXG4gIDI0Olx0XHRsb2NhbF9vYmplY3QubyBcXFxuICAyNTpcdFx0bWlzYy5vIFxcXG4gIDI2Olx0XHRuZXRfbnMubyBcXFxuICAyNzpcdFx0b29iLm8gXFxcbiAgMjg6XHRcdG91dHB1dC5vIFxcXG4gIDI5Olx0XHRwZWVyX2V2ZW50Lm8gXFxcbiAgMzA6XHRcdHBlZXJfb2JqZWN0Lm8gXFxcbiAgMzE6XHRcdHJlY3Ztc2cubyBcXFxuICAzMjpcdFx0cnR0Lm8gXFxcbiAgMzM6XHRcdHNlY3VyaXR5Lm8gXFxcbiAgMzQ6XHRcdHNlbmRtc2cubyBcXFxuICAzNTpcdFx0c2VydmVyX2tleS5vIFxcXG4gIDM2Olx0XHRza2J1ZmYubyBcXFxuICAzNzpcdFx0dHhidWYubyBcXFxuICAzODpcdFx0dXRpbHMub1xuICAzOTpcdFxuICA0MDpcdHJ4cnBjLSQoQ09ORklHX1BST0NfRlMpICYjNDM7PSBwcm9jLm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDI6NTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTYxNjkKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAyODIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIEFGX1JYUlBDIE5ldG5zL1BlZXIgTGlmZWN5Y2xlIGZvciBGb2N1cyBTeW1ib2xzKioKCk9rYXksIGxldCYjMzk7cyB6ZXJvIGluIG9uIHRoZXNlIGZvY3VzIHN5bWJvbHMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBhY3Qgb2YgdGhlc2UgbW9kaWZpY2F0aW9ucy4gRnJvbSB3aGF0IEkgc2VlLCB0aGUgcHJpbWFyeSBmdW5jdGlvbnMgYWZmZWN0ZWQgYXJlIGByeHJwY19wcmVfZXhpdF9uZXRgLCBgcnhycGNfZXhpdF9uZXRgLCBhbmQgYHJ4cnBjX2Rlc3Ryb3lfYWxsX3BlZXJzYC4gVGhlc2Ugc2VlbSB0byBiZSB0aGUgY29yZSBvZiB0aGUgbmV0IG5hbWVzcGFjZSBhbmQgcGVlciBsaWZlY3ljbGUgY2hhbmdlcyB3aXRoaW4gQUZfUlhSUEMuCgpgcnhycGNfZGVzdHJveV9hbGxfcGVlcnNgIGluIHBhcnRpY3VsYXIgaXMgaW50ZXJlc3RpbmcsIGJlaW5nIG5vbi1zdGF0aWMgaW4gYHBlZXJfb2JqZWN0LmNgIGFuZCBjYWxsZWQgYnkgYHJ4cnBjX2V4aXRfbmV0YC4gIE15IGludHVpdGlvbiB0ZWxscyBtZSB0byBkcmlsbCBkb3duIGZ1cnRoZXIgaW50byB0aGUgcmVsYXRpb25zaGlwcyBhbmQgY2FsbC1ncmFwaCBoZXJlLiAgSSBuZWVkIHRvIHNlZSBpZiBpdCYjMzk7cyBleHBvcnRlZCBvciB1c2VkIGVsc2V3aGVyZS4gVGhlbiwgYHJ4cnBjX3ByZV9leGl0X25ldGAgYW5kIGByeHJwY19leGl0X25ldGAgYXJlIHN0YXRpYyBmdW5jdGlvbnMgcmVnaXN0ZXJlZCB0aHJvdWdoIGByeHJwY19uZXRfb3BzYCDigJMgdGhhdCBjb250ZXh0IGlzIGltcG9ydGFudC4KCkkgc2hvdWxkIGFsc28gcXVpY2tseSByZXZpZXcgb3RoZXIgcmVsZXZhbnQgZnVuY3Rpb25zIHdpdGhpbiBBRl9SWFJQQywgbGlrZSBgcnhycGNfaW5pdF9uZXRgLCBgcnhycGNfbG9va3VwX3BlZXJgLCBgX19yeHJwY19wdXRfcGVlcmAsIGFuZCBgcnhycGNfbmV3X2luY29taW5nX3BlZXJgLiBBcmUgYW55IG9mIHRoZXNlIGluZGlyZWN0bHkgYWZmZWN0ZWQgYnkgdGhlc2UgY2hhbmdlcywgcGVyaGFwcyB2aWEgZGF0YSBzdHJ1Y3R1cmVzIG9yIHNoYXJlZCByZXNvdXJjZXM/CgpNeSBmb2N1cywgZm9yIHRoaXMgc3BlY2lmaWMgYW5hbHlzaXMsIHJlbWFpbnMgZmlybWx5IG9uIGByeHJwY19kZXN0cm95X2FsbF9wZWVyc2AsIGByeHJwY19leGl0X25ldGAsIGFuZCBgcnhycGNfcHJlX2V4aXRfbmV0YCwgYXMgdGhleSYjMzk7cmUgdGhlIGRpcmVjdCB0YXJnZXRzIGFuZCBlbnRyeSBwb2ludHMgZm9yIHRoaXMgY2hhbmdlZCBsb2dpYy4gSSByZWFsbHkgbmVlZCB0byBjaGVjayBpZiBgcnhycGNfZGVzdHJveV9hbGxfcGVlcnNgIGlzIGRlY2xhcmVkIG9yIHVzZWQgYnkgYW55IGhlYWRlciBmaWxlcywgc3BlY2lmaWNhbGx5IGluIGBhci1pbnRlcm5hbC5oYCwgdG8gZ2F1Z2UgaXRzIGZ1bGwgc2NvcGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDAyOjU5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3J4cnBjX2Rlc3Ryb3lfYWxsX3BlZXJzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3J4cnBjJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9yeHJwYy9hci1pbnRlcm5hbC5oPTE0MjY9dm9pZCByeHJwY19uZXdfaW5jb21pbmdfcGVlcihzdHJ1Y3QgcnhycGNfbG9jYWwgKmxvY2FsLCBzdHJ1Y3QgcnhycGNfcGVlciAqcGVlcik7XG5uZXQvcnhycGMvYXItaW50ZXJuYWwuaDoxNDI3OnZvaWQgcnhycGNfZGVzdHJveV9hbGxfcGVlcnMoc3RydWN0IHJ4cnBjX25ldCAqKTtcbm5ldC9yeHJwYy9hci1pbnRlcm5hbC5oLTE0Mjgtc3RydWN0IHJ4cnBjX3BlZXIgKnJ4cnBjX2dldF9wZWVyKHN0cnVjdCByeHJwY19wZWVyICosIGVudW0gcnhycGNfcGVlcl90cmFjZSk7XG4tLVxubmV0L3J4cnBjL25ldF9ucy5jPTExNj1zdGF0aWMgX19uZXRfZXhpdCB2b2lkIHJ4cnBjX2V4aXRfbmV0KHN0cnVjdCBuZXQgKm5ldClcbi0tXG5uZXQvcnhycGMvbmV0X25zLmMtMTE5LVxubmV0L3J4cnBjL25ldF9ucy5jOjEyMDpcdHJ4cnBjX2Rlc3Ryb3lfYWxsX3BlZXJzKHJ4bmV0KTtcbm5ldC9yeHJwYy9uZXRfbnMuYy0xMjEtXHRyeHJwY19kZXN0cm95X2FsbF9sb2NhbHMocnhuZXQpO1xuLS1cbm5ldC9yeHJwYy9wZWVyX29iamVjdC5jPTQzND12b2lkIHJ4cnBjX3B1dF9wZWVyKHN0cnVjdCByeHJwY19wZWVyICpwZWVyLCBlbnVtIHJ4cnBjX3BlZXJfdHJhY2Ugd2h5KVxuLS1cbm5ldC9yeHJwYy9wZWVyX29iamVjdC5jLTQ1MS0gKi9cbm5ldC9yeHJwYy9wZWVyX29iamVjdC5jOjQ1Mjp2b2lkIHJ4cnBjX2Rlc3Ryb3lfYWxsX3BlZXJzKHN0cnVjdCByeHJwY19uZXQgKnJ4bmV0KVxubmV0L3J4cnBjL3BlZXJfb2JqZWN0LmMtNDUzLXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDI6NTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTcyMTgKCQkJCQkJCW91dHB1dDogMTc5CgkJCQkJCQl0aG91Z2h0czogMjk3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIFJ4UlBDIE5ldHdvcmsgTmFtZXNwYWNlIEhhbmRsaW5nKioKCk9rYXksIGxldCYjMzk7cyBzZWUsIHdoYXQgd2UmIzM5O3ZlIGdvdCBoZXJlLiBGaXJzdCwgSSBuZWVkIHRvIGNvbmZpcm0gdGhlIGtleSBzeW1ib2xzIGludm9sdmVkIGFuZCBob3cgdGhleSBpbnRlcmFjdC4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8ga25vdyBhYm91dCBgcnhycGNfZGVzdHJveV9hbGxfcGVlcnNgLCBgcnhycGNfZXhpdF9uZXRgLCBhbmQgYHJ4cnBjX3ByZV9leGl0X25ldGAuIFRoZXNlIGFyZSB0aGUgY3J1Y2lhbCBob29rcywgc28gbGV0JiMzOTtzIGRvdWJsZS1jaGVjayB0aGUgY29uZmlncy4gV2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBgQUZfUlhSUENgIGZvciB0aGUgUnhSUEMgc2Vzc2lvbiBzb2NrZXRzLCB3aGljaCwgb2YgY291cnNlLCByZWxpZXMgb24gYElORVRgLiBBbmQsIG1vc3QgaW1wb3J0YW50bHksIGBORVRfTlNgIGlzIGdvaW5nIHRvIGJlIHBpdm90YWwgYmVjYXVzZSwgZnJvbSB3aGF0IEkga25vdywgcGVybmV0IG9wZXJhdGlvbnMgYXJlIGxpbmtlZCB0byBuZXR3b3JrIG5hbWVzcGFjZSBzdXBwb3J0LgoKTm93LCBsZXQmIzM5O3MgZHJpbGwgZG93biBhbmQgY29uZmlybSB0aGF0IGBDT05GSUdfTkVUX05TYCBpcyBlbmFibGVkLiBBaCwgeWVzLCB0aGVyZSBpdCBpcyEgV2l0aG91dCBgQ09ORklHX05FVF9OU2AsIGByeHJwY19leGl0X25ldGAgd291bGQgb25seSBmaXJlIG9uIG1vZHVsZSB1bmxvYWQgb3Igc3lzdGVtIHNodXRkb3duLCBhIG11Y2ggbGVzcyBpbnRlcmVzdGluZyBzY2VuYXJpby4gSG93ZXZlciwgd2l0aCBgQ09ORklHX05FVF9OUz15YCwgaXQmIzM5O3MgY2FsbGVkIGV2ZXJ5IHRpbWUgYSBuZXR3b3JrIG5hbWVzcGFjZSBpcyBkZXN0cm95ZWQuIFRoYXQmIzM5O3MgYSBzaWduaWZpY2FudCBkaWZmZXJlbmNlIGFuZCBkZWZpbml0ZWx5IGFsaWducyB3aXRoIHN5emthbGxlciYjMzk7cyB0cmlnZ2VyLiBUaGVyZWZvcmUsIGl0IGlzIGNsZWFyIHRoYXQgd2UgaGF2ZSBhIGRlcGVuZGVuY3kgb24gYEFGX1JYUlBDYCwgYElORVRgLCBhbmQgYE5FVF9OU2AuCgpGaW5hbGx5LCBqdXN0IHRvIGJlIGFic29sdXRlbHkgY2VydGFpbiwgbGV0JiMzOTtzIHJ1biB0aHJvdWdoIHRoZXNlIGluc3RydWN0aW9ucyBhZ2FpbjoKCiogICAqKldvcnRoRnV6emluZzogdHJ1ZSoqIOKAkyBPYnZpb3VzLiBUaGlzIG1lcml0cyBkZXRhaWxlZCBpbnZlc3RpZ2F0aW9uLgoqICAgKipFbmFibGVDb25maWdzOiBcWyYjMzQ7QUZcX1JYUlBDJiMzNDssICYjMzQ7SU5FVCYjMzQ7LCAmIzM0O05FVFxfTlMmIzM0O1xdKiog4oCTIFllcywgdGhhdCYjMzk7cyB3aGF0IHdlIG5lZWQuCiogICAqKkZvY3VzU3ltYm9sczogXFsmIzM0O3J4cnBjXF9wcmVcX2V4aXRcX25ldCYjMzQ7LCAmIzM0O3J4cnBjXF9leGl0XF9uZXQmIzM0OywgJiMzNDtyeHJwY1xfZGVzdHJveVxfYWxsXF9wZWVycyYjMzQ7XF0qKiDigJMgQ29uZmlybWVkLiBUaGVzZSBzeW1ib2xzIGFyZSB0aGUgcHJlY2lzZSBwb2ludHMgb2YgaW50ZXJlc3QuCiogICAqKlJlYXNvbmluZzogQ29uY2lzZSBleHBsYW5hdGlvbiBvZiB0aGUgdmVyZGljdC4qKiDigJMgR29vZCEKCk9rYXksIHRpbWUgdG8gc3VibWl0IHRoZXNlIGZpbmRpbmdzIHRvIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDAyOjU5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtBRl9SWFJQQyYjMzQ7LAogICAgJiMzNDtJTkVUJiMzNDssCiAgICAmIzM0O05FVF9OUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3J4cnBjX3ByZV9leGl0X25ldCYjMzQ7LAogICAgJiMzNDtyeHJwY19leGl0X25ldCYjMzQ7LAogICAgJiMzNDtyeHJwY19kZXN0cm95X2FsbF9wZWVycyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgUnhSUEMgbmV0d29yayBuYW1lc3BhY2UgdGVhcmRvd24gbGlmZWN5Y2xlIGJ5IHNwbGl0dGluZyBuZXRucyBjbGVhbnVwIGludG8gcHJlX2V4aXQgYW5kIGV4aXQgaGFuZGxlcnMgKHJ4cnBjX3ByZV9leGl0X25ldCBhbmQgcnhycGNfZXhpdF9uZXQpIGFuZCBhZGRzIGxvY2tpbmcgKHBlZXJfaGFzaF9sb2NrKSBpbiByeHJwY19kZXN0cm95X2FsbF9wZWVycyB0byBwcmV2ZW50IHVzZS1hZnRlci1mcmVlIGNvbmRpdGlvbnMgZHVyaW5nIHBlZXIgaGFzaCB0YWJsZSB0cmF2ZXJzYWwuIFRoZXNlIGNoYW5nZXMgdG91Y2ggcmVhY2hhYmxlIG5ldHdvcmtpbmcgY29kZSB0aGF0IGlzIGV4ZXJjaXNlZCBkdXJpbmcgbmV0bnMgbGlmZWN5Y2xlIGFuZCBBRl9SWFJQQyBzb2NrZXQgb3BlcmF0aW9ucywgbWFraW5nIGl0IHdvcnRod2hpbGUgdG8gZnV6ei4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QUZfUlhSUEMmIzM0OywKICAgICYjMzQ7SU5FVCYjMzQ7LAogICAgJiMzNDtORVRfTlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtyeHJwY19wcmVfZXhpdF9uZXQmIzM0OywKICAgICYjMzQ7cnhycGNfZXhpdF9uZXQmIzM0OywKICAgICYjMzQ7cnhycGNfZGVzdHJveV9hbGxfcGVlcnMmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIFJ4UlBDIG5ldHdvcmsgbmFtZXNwYWNlIHRlYXJkb3duIGxpZmVjeWNsZSBieSBzcGxpdHRpbmcgbmV0bnMgY2xlYW51cCBpbnRvIHByZV9leGl0IGFuZCBleGl0IGhhbmRsZXJzIChyeHJwY19wcmVfZXhpdF9uZXQgYW5kIHJ4cnBjX2V4aXRfbmV0KSBhbmQgYWRkcyBsb2NraW5nIChwZWVyX2hhc2hfbG9jaykgaW4gcnhycGNfZGVzdHJveV9hbGxfcGVlcnMgdG8gcHJldmVudCB1c2UtYWZ0ZXItZnJlZSBjb25kaXRpb25zIGR1cmluZyBwZWVyIGhhc2ggdGFibGUgdHJhdmVyc2FsLiBUaGVzZSBjaGFuZ2VzIHRvdWNoIHJlYWNoYWJsZSBuZXR3b3JraW5nIGNvZGUgdGhhdCBpcyBleGVyY2lzZWQgZHVyaW5nIG5ldG5zIGxpZmVjeWNsZSBhbmQgQUZfUlhSUEMgc29ja2V0IG9wZXJhdGlvbnMsIG1ha2luZyBpdCB3b3J0aHdoaWxlIHRvIGZ1enouJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDAyOjU5PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDI6NTk8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgcGVybmV0IG5hbWVzcGFjZSBleGl0IGNhbGxiYWNrcyBpbiBBRl9SWFJQQyAoc3BsaXR0aW5nIHRlYXJkb3duIGJldHdlZW4gcHJlX2V4aXQgYW5kIGV4aXQpIGFuZCBhZGRzIHNwaW5sb2NrIHN5bmNocm9uaXphdGlvbiAocGVlcl9oYXNoX2xvY2spIGluIHJ4cnBjX2Rlc3Ryb3lfYWxsX3BlZXJzKCkgdG8gcHJvdGVjdCBhZ2FpbnN0IGNvbmN1cnJlbnQgdW5saW5raW5nIGFuZCB1c2UtYWZ0ZXItZnJlZS5cblxuTm8gbmV3IG1lbW9yeSBhbGxvY2F0aW9ucywgdW5pbml0aWFsaXplZCB2YXJpYWJsZSB1c2VzLCB1c2VyLWNvcHkgb3BlcmF0aW9ucywgb3IgYWx0ZXJlZCBkYXRhLXBhcnNpbmcvYnVmZmVyLWxlbmd0aCBsb2dpYyBhcmUgaW50cm9kdWNlZC4gVGhlIHBvdGVudGlhbCBpc3N1ZXMgYWRkcmVzc2VkIG9yIGludHJvZHVjZWQgYnkgdGhpcyBwYXRjaCByZWxhdGUgZXhjbHVzaXZlbHkgdG8gdGVhcmRvd24gb3JkZXJpbmcsIHN5bmNocm9uaXphdGlvbiwgbG9ja2luZywgYW5kIHVzZS1hZnRlci1mcmVlLCBhbGwgb2Ygd2hpY2ggYXJlIGNvdmVyZWQgYnkgc3RhbmRhcmQgc2FuaXRpemVycyAoS0FTQU4sIExPQ0tERVApLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgZTI1ZDIxOWM5OGQ3NWNmNzY4NDhjMTY5YzFiZjNkZDFmZGFjYzE2MApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUdWUgU2VwIDggMDI6NTk6MDggMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQvcnhycGMvbmV0X25zLmMgYi9uZXQvcnhycGMvbmV0X25zLmMKaW5kZXggOWE5ODM0MTQ1ZTgxZS4uMTY5MTE2NzM1MzY2MyAxMDA2NDQKLS0tIGEvbmV0L3J4cnBjL25ldF9ucy5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9yeHJwYy9uZXRfbnMuYwpAQCAtOTcsMTAgJiM0Mzs5Nyw3IEBAIHN0YXRpYyBfX25ldF9pbml0IGludCByeHJwY19pbml0X25ldChzdHJ1Y3QgbmV0ICpuZXQpCiAJcmV0dXJuIHJldDsKIH0KIAotLyoKLSAqIENsZWFuIHVwIGEgcGVyLW5ldHdvcmsgbmFtZXNwYWNlIHJlY29yZC4KLSAqLwotc3RhdGljIF9fbmV0X2V4aXQgdm9pZCByeHJwY19leGl0X25ldChzdHJ1Y3QgbmV0ICpuZXQpCiYjNDM7c3RhdGljIF9fbmV0X2V4aXQgdm9pZCByeHJwY19wcmVfZXhpdF9uZXQoc3RydWN0IG5ldCAqbmV0KQogewogCXN0cnVjdCByeHJwY19uZXQgKnJ4bmV0ID0gcnhycGNfbmV0KG5ldCk7CiAKQEAgLTExMSwxNCAmIzQzOzEwOCwyNCBAQCBzdGF0aWMgX19uZXRfZXhpdCB2b2lkIHJ4cnBjX2V4aXRfbmV0KHN0cnVjdCBuZXQgKm5ldCkKIAl0aW1lcl9kZWxldGVfc3luYygmYW1wO3J4bmV0LSZndDtwZWVyX2tlZXBhbGl2ZV90aW1lcik7CiAJcnhycGNfZGVzdHJveV9hbGxfY2FsbHMocnhuZXQpOwogCXJ4cnBjX2Rlc3Ryb3lfYWxsX2Nvbm5lY3Rpb25zKHJ4bmV0KTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBDbGVhbiB1cCBhIHBlci1uZXR3b3JrIG5hbWVzcGFjZSByZWNvcmQuCiYjNDM7ICovCiYjNDM7c3RhdGljIF9fbmV0X2V4aXQgdm9pZCByeHJwY19leGl0X25ldChzdHJ1Y3QgbmV0ICpuZXQpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgcnhycGNfbmV0ICpyeG5ldCA9IHJ4cnBjX25ldChuZXQpOwomIzQzOwogCXJ4cnBjX2Rlc3Ryb3lfYWxsX3BlZXJzKHJ4bmV0KTsKIAlyeHJwY19kZXN0cm95X2FsbF9sb2NhbHMocnhuZXQpOwogCXByb2NfcmVtb3ZlKHJ4bmV0LSZndDtwcm9jX25ldCk7CiB9CiAKIHN0cnVjdCBwZXJuZXRfb3BlcmF0aW9ucyByeHJwY19uZXRfb3BzID0gewotCS5pbml0CT0gcnhycGNfaW5pdF9uZXQsCi0JLmV4aXQJPSByeHJwY19leGl0X25ldCwKLQkuaWQJPSAmYW1wO3J4cnBjX25ldF9pZCwKLQkuc2l6ZQk9IHNpemVvZihzdHJ1Y3QgcnhycGNfbmV0KSwKJiM0MzsJLmluaXQJCT0gcnhycGNfaW5pdF9uZXQsCiYjNDM7CS5wcmVfZXhpdAk9IHJ4cnBjX3ByZV9leGl0X25ldCwKJiM0MzsJLmV4aXQJCT0gcnhycGNfZXhpdF9uZXQsCiYjNDM7CS5pZAkJPSAmYW1wO3J4cnBjX25ldF9pZCwKJiM0MzsJLnNpemUJCT0gc2l6ZW9mKHN0cnVjdCByeHJwY19uZXQpLAogfTsKZGlmZiAtLWdpdCBhL25ldC9yeHJwYy9wZWVyX29iamVjdC5jIGIvbmV0L3J4cnBjL3BlZXJfb2JqZWN0LmMKaW5kZXggZmE5YTQwNmUxMTY4My4uZmFhMjk4MzYzOGIyYiAxMDA2NDQKLS0tIGEvbmV0L3J4cnBjL3BlZXJfb2JqZWN0LmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3J4cnBjL3BlZXJfb2JqZWN0LmMKQEAgLTQ1NCw2ICYjNDM7NDU0LDEyIEBAIHZvaWQgcnhycGNfZGVzdHJveV9hbGxfcGVlcnMoc3RydWN0IHJ4cnBjX25ldCAqcnhuZXQpCiAJc3RydWN0IHJ4cnBjX3BlZXIgKnBlZXI7CiAJaW50IGk7CiAKJiM0MzsJLyoKJiM0MzsJICogUHJldmVudCB1c2UtYWZ0ZXItZnJlZSBpZiBhIHBlZXIgaXMgY29uY3VycmVudGx5IHVubGlua2VkIGZyb20gdGhlCiYjNDM7CSAqIGhhc2ggdGFibGUgYW5kIGZyZWVkIHZpYSBSQ1UgZHVyaW5nIGl0ZXJhdGlvbi4KJiM0MzsJICovCiYjNDM7CXNwaW5fbG9ja19iaCgmYW1wO3J4bmV0LSZndDtwZWVyX2hhc2hfbG9jayk7CiYjNDM7CiAJZm9yIChpID0gMDsgaSAmbHQ7IEhBU0hfU0laRShyeG5ldC0mZ3Q7cGVlcl9oYXNoKTsgaSYjNDM7JiM0MzspIHsKIAkJaWYgKGhsaXN0X2VtcHR5KCZhbXA7cnhuZXQtJmd0O3BlZXJfaGFzaFtpXSkpCiAJCQljb250aW51ZTsKQEAgLTQ2NSw2ICYjNDM7NDcxLDggQEAgdm9pZCByeHJwY19kZXN0cm95X2FsbF9wZWVycyhzdHJ1Y3QgcnhycGNfbmV0ICpyeG5ldCkKIAkJCSAgICAgICAmYW1wO3BlZXItJmd0O3NyeC50cmFuc3BvcnQpOwogCQl9CiAJfQomIzQzOwomIzQzOwlzcGluX3VubG9ja19iaCgmYW1wO3J4bmV0LSZndDtwZWVyX2hhc2hfbG9jayk7CiB9CiAKIC8qKgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDI6NTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjc3MAoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDYwMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipLTVNBTiBGdXp6aW5nIFNlc3Npb24gRXZhbHVhdGlvbioqCgpPa2F5LCBsZXQmIzM5O3MgYXNzZXNzIHdoZXRoZXIgdGhpcyBwYXRjaCB3YXJyYW50cyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uIE15IGluaXRpYWwgaW1wcmVzc2lvbiwgYWZ0ZXIgcmV2aWV3aW5nIHRoZSBjaGFuZ2VzLCBpcyB0aGF0IGl0JiMzOTtzIGxpa2VseSAqbm90KiBhIHN0cm9uZyBjYW5kaWRhdGUuIFRoZSBwYXRjaCB0b3VjaGVzIGBuZXQvcnhycGMvbmV0X25zLmNgIGFuZCBgbmV0L3J4cnBjL3BlZXJfb2JqZWN0LmNgLiBJIHNlZSB0aGF0IGByeHJwY19leGl0X25ldGAgaGFzIGJlZW4gc3BsaXQgaW50byBgcnhycGNfcHJlX2V4aXRfbmV0YCBhbmQgYHJ4cnBjX2V4aXRfbmV0YCwgYSBjbGVhciBzaWduYWwgdGhhdCB0aGVyZSYjMzk7cyBiZWVuIGF0dGVudGlvbiBwYWlkIHRvIHRoZSB0ZWFyZG93biBzZXF1ZW5jZS4gU3BlY2lmaWNhbGx5LCBgcnhycGNfcHJlX2V4aXRfbmV0YCBub3cgaGFuZGxlcyB0aGUgbW9yZSBpbW1lZGlhdGUgY2xlYW51cCB0YXNrcyBsaWtlIHNldHRpbmcgYGxpdmUgPSBmYWxzZWAsIGtpbGxpbmcgdGltZXJzLCBhbmQgZGVzdHJveWluZyBjYWxscyBhbmQgY29ubmVjdGlvbnMsIGJlZm9yZSBgcnhycGNfZXhpdF9uZXRgIGRlYWxzIHdpdGggcGVlcnMsIGxvY2FscywgYW5kIHByb2MgZW50cmllcy4gVGhpcyBpcyByZWdpc3RlcmVkIHZpYSB0aGUgYHBlcm5ldF9vcGVyYXRpb25zYCBzdHJ1Y3QuCgpGdXJ0aGVybW9yZSwgd2l0aGluIGByeHJwY19kZXN0cm95X2FsbF9wZWVyc2AsIEkmIzM5O3ZlIG9ic2VydmVkIHRoZSBhZGRpdGlvbiBvZiBgc3Bpbl9sb2NrX2JoYCBjYWxscyBhcm91bmQgdGhlIGhhc2ggdGFibGUgaXRlcmF0aW9uLiBUaGlzIGluZGljYXRlcyBhIGNvbmNlcm4gYWJvdXQgY29uY3VycmVudCBhY2Nlc3MgYW5kIHBvdGVudGlhbCB1c2UtYWZ0ZXItZnJlZSBzY2VuYXJpb3MgZHVyaW5nIHBlZXIgdW5saW5raW5nLiBQcmVjaXNlbHkgdGhlIGtpbmQgb2Ygc2NlbmFyaW8gdGhhdCBLQVNBTiBhbmQgTE9DS0RFUCB3b3VsZCBsb3ZlIHRvIGZpbmQgcHJvYmxlbXMgd2l0aCEKCk5vdywgdGhlIGltcG9ydGFudCBwYXJ0OiBLTVNBTiB0YXJnZXRzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzZS4gTG9va2luZyBvdmVyIHRoZSBwYXRjaCBkZXRhaWxzIEkgc2VlOiBubyBuZXcgbWVtb3J5IGFsbG9jYXRpb25zLCBubyBjb3B5aW5nIHRvIHVzZXJzcGFjZSAod2hpY2ggSSYjMzk7ZCBiZSBlc3BlY2lhbGx5IHdhcnkgb2YpLCBubyBkaXJlY3QgYWNjZXNzZXMgdG8gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMuIFRoZSBjb3JlIG9mIHRoZSBjaGFuZ2VzIHNlZW0gdG8gcmV2b2x2ZSBhcm91bmQgKm9yZGVyaW5nKiBvZiB0ZWFyZG93biBhbmQgcHJvcGVyIGxvY2tpbmcgdG8gcHJldmVudCBjb25jdXJyZW5jeSBpc3N1ZXMgYW5kIFVBRnMuIFRoaXMgaXMgY2xhc3NpYyBzdHVmZiBmb3IgcmFjZSBjb25kaXRpb24gZGV0ZWN0aW9uIGFuZCBtZW1vcnkgY29ycnVwdGlvbiByZWxhdGVkIHRvIGNvbmN1cnJlbmN5LiBLQVNBTiBpcyB1c2VmdWwgaGVyZS4gS01TQU4uLi4gTm90IHNvIG11Y2guCgpKdXN0IHRvIGJlIGFic29sdXRlbHkgc3VyZSwgbGV0JiMzOTtzIHRha2UgYSBxdWljayBsb29rLiBJJiMzOTtsbCBxdWlja2x5IGNoZWNrIGByeHJwY19kZXN0cm95X2FsbF9wZWVyc2AuIEkmIzM5O20gZ29pbmcgdG8gcXVpY2tseSBjaGVjayBgbmV0L3J4cnBjL3BlZXJfb2JqZWN0LmNgIHVzaW5nIHNvbWV0aGluZyBsaWtlIGEgYHJlYWQtZmlsZWAgb3IgYGdyZXBwZXJgIGNhbGwgdG8gZW5zdXJlIEkmIzM5O20gbm90IG1pc3NpbmcgYW55dGhpbmcgb2J2aW91cywgdGhvdWdoIEkmIzM5O20gZmFpcmx5IGNvbmZpZGVudCBiYXNlZCBvbiB0aGlzIGZpcnN0IHBhc3MuCgpTbywgZ2l2ZW4gbXkgYW5hbHlzaXMsIEkmIzM5O20gbGVhbmluZyBoZWF2aWx5IHRvd2FyZHMgKm5vKiBLTVNBTiBzZXNzaW9uIGJlaW5nIG5lY2Vzc2FyeSBoZXJlLiBUaGUgaXNzdWVzIGFkZHJlc3NlZCBhcmUgbW9yZSBpbiB0aGUgcmVhbG0gb2YgY29uY3VycmVuY3ksIGxpZmV0aW1lIG1hbmFnZW1lbnQsIGFuZCBzeW5jaHJvbml6YXRpb24sIGFyZWFzIHdoZXJlIEtBU0FOLCBMT0NLREVQLCBhbmQgb3RoZXIgc2FuaXRpemVycyBhcmUgbXVjaCBtb3JlIGFwcGxpY2FibGUuIFVubGVzcyBJIGZpbmQgc29tZXRoaW5nIGV4dHJlbWVseSB1bmV4cGVjdGVkIGluIHRoZSBmaWxlIGluc3BlY3Rpb24sIEkmIzM5O2xsIHJlY29tbWVuZCB3ZSBza2lwIEtNU0FOIGZvciB0aGlzIG9uZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDI6NTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cnhycGNfZGVzdHJveV9hbGxfcGVlcnMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvcnhycGMvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9yeHJwYy9hci1pbnRlcm5hbC5oPTE0MjY9dm9pZCByeHJwY19uZXdfaW5jb21pbmdfcGVlcihzdHJ1Y3QgcnhycGNfbG9jYWwgKmxvY2FsLCBzdHJ1Y3QgcnhycGNfcGVlciAqcGVlcik7XG5uZXQvcnhycGMvYXItaW50ZXJuYWwuaDoxNDI3OnZvaWQgcnhycGNfZGVzdHJveV9hbGxfcGVlcnMoc3RydWN0IHJ4cnBjX25ldCAqKTtcbm5ldC9yeHJwYy9hci1pbnRlcm5hbC5oLTE0Mjgtc3RydWN0IHJ4cnBjX3BlZXIgKnJ4cnBjX2dldF9wZWVyKHN0cnVjdCByeHJwY19wZWVyICosIGVudW0gcnhycGNfcGVlcl90cmFjZSk7XG4tLVxubmV0L3J4cnBjL25ldF9ucy5jPTExNj1zdGF0aWMgX19uZXRfZXhpdCB2b2lkIHJ4cnBjX2V4aXRfbmV0KHN0cnVjdCBuZXQgKm5ldClcbi0tXG5uZXQvcnhycGMvbmV0X25zLmMtMTE5LVxubmV0L3J4cnBjL25ldF9ucy5jOjEyMDpcdHJ4cnBjX2Rlc3Ryb3lfYWxsX3BlZXJzKHJ4bmV0KTtcbm5ldC9yeHJwYy9uZXRfbnMuYy0xMjEtXHRyeHJwY19kZXN0cm95X2FsbF9sb2NhbHMocnhuZXQpO1xuLS1cbm5ldC9yeHJwYy9wZWVyX29iamVjdC5jPTQzND12b2lkIHJ4cnBjX3B1dF9wZWVyKHN0cnVjdCByeHJwY19wZWVyICpwZWVyLCBlbnVtIHJ4cnBjX3BlZXJfdHJhY2Ugd2h5KVxuLS1cbm5ldC9yeHJwYy9wZWVyX29iamVjdC5jLTQ1MS0gKi9cbm5ldC9yeHJwYy9wZWVyX29iamVjdC5jOjQ1Mjp2b2lkIHJ4cnBjX2Rlc3Ryb3lfYWxsX3BlZXJzKHN0cnVjdCByeHJwY19uZXQgKnJ4bmV0KVxubmV0L3J4cnBjL3BlZXJfb2JqZWN0LmMtNDUzLXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDI6NTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDMwOAoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDI4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqRGl2aW5nIGludG8gYHBlZXJfb2JqZWN0LmNgKioKCk9rYXksIHNvIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gdGhpcyBmdW5jdGlvbi4gTGV0JiMzOTtzIHN0YXJ0IGJ5IHBpbnBvaW50aW5nIHRoZSByZWxldmFudCBjb2RlLiBNeSBpbnR1aXRpb24sIGJhc2VkIG9uIHRoZSBjb250ZXh0LCBzdWdnZXN0cyB0aGUgYXJlYSBhcm91bmQgbGluZSA0NTAgaW4gYG5ldC9yeHJwYy9wZWVyX29iamVjdC5jYCBpcyB3aGVyZSB0aGUga2V5IGxvZ2ljIHJlc2lkZXMuIEkmIzM5O2xsIGp1bXAgdGhlcmUgZGlyZWN0bHkgdG8gZ2V0IHRoZSB3aG9sZSBmdW5jdGlvbiBpbiBjb250ZXh0LiBJdCYjMzk7cyB0aGUgYmVzdCB3YXkgdG8gdW5kZXJzdGFuZCB0aGUgY29udHJvbCBmbG93IGFuZCBhc3NvY2lhdGVkIGRhdGEgc3RydWN0dXJlcyBxdWlja2x5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwMjo1OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9yeHJwYy9wZWVyX29iamVjdC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNDQ1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA0NDU6XHRcdFx0XHRfX3J4cnBjX3B1dF9wZWVyKHBlZXIpO1xuIDQ0NjpcdFx0fVxuIDQ0NzpcdH1cbiA0NDg6XHRcbiA0NDk6XHQvKlxuIDQ1MDpcdCAqIE1ha2Ugc3VyZSBhbGwgcGVlciByZWNvcmRzIGhhdmUgYmVlbiBkaXNjYXJkZWQuXG4gNDUxOlx0ICovXG4gNDUyOlx0dm9pZCByeHJwY19kZXN0cm95X2FsbF9wZWVycyhzdHJ1Y3QgcnhycGNfbmV0ICpyeG5ldClcbiA0NTM6XHR7XG4gNDU0Olx0XHRzdHJ1Y3QgcnhycGNfcGVlciAqcGVlcjtcbiA0NTU6XHRcdGludCBpO1xuIDQ1NjpcdFxuIDQ1NzpcdFx0LypcbiA0NTg6XHRcdCAqIFByZXZlbnQgdXNlLWFmdGVyLWZyZWUgaWYgYSBwZWVyIGlzIGNvbmN1cnJlbnRseSB1bmxpbmtlZCBmcm9tIHRoZVxuIDQ1OTpcdFx0ICogaGFzaCB0YWJsZSBhbmQgZnJlZWQgdmlhIFJDVSBkdXJpbmcgaXRlcmF0aW9uLlxuIDQ2MDpcdFx0ICovXG4gNDYxOlx0XHRzcGluX2xvY2tfYmgoXHUwMDI2cnhuZXQtXHUwMDNlcGVlcl9oYXNoX2xvY2spO1xuIDQ2MjpcdFxuIDQ2MzpcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgSEFTSF9TSVpFKHJ4bmV0LVx1MDAzZXBlZXJfaGFzaCk7IGkmIzQzOyYjNDM7KSB7XG4gNDY0Olx0XHRcdGlmIChobGlzdF9lbXB0eShcdTAwMjZyeG5ldC1cdTAwM2VwZWVyX2hhc2hbaV0pKVxuIDQ2NTpcdFx0XHRcdGNvbnRpbnVlO1xuIDQ2NjpcdFxuIDQ2NzpcdFx0XHRobGlzdF9mb3JfZWFjaF9lbnRyeShwZWVyLCBcdTAwMjZyeG5ldC1cdTAwM2VwZWVyX2hhc2hbaV0sIGhhc2hfbGluaykge1xuIDQ2ODpcdFx0XHRcdHByX2VycihcJiMzNDtMZWFrZWQgcGVlciAleCB7JXV9ICVwSVNwXFxuXCYjMzQ7LFxuIDQ2OTpcdFx0XHRcdCAgICAgICBwZWVyLVx1MDAzZWRlYnVnX2lkLFxuIDQ3MDpcdFx0XHRcdCAgICAgICByZWZjb3VudF9yZWFkKFx1MDAyNnBlZXItXHUwMDNlcmVmKSxcbiA0NzE6XHRcdFx0XHQgICAgICAgXHUwMDI2cGVlci1cdTAwM2VzcngudHJhbnNwb3J0KTtcbiA0NzI6XHRcdFx0fVxuIDQ3MzpcdFx0fVxuIDQ3NDpcdFxuIDQ3NTpcdFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2cnhuZXQtXHUwMDNlcGVlcl9oYXNoX2xvY2spO1xuIDQ3NjpcdH1cbiA0Nzc6XHRcbiA0Nzg6XHQvKipcbiA0Nzk6XHQgKiByeHJwY19rZXJuZWxfZ2V0X2NhbGxfcGVlciAtIEdldCB0aGUgcGVlciBhZGRyZXNzIG9mIGEgY2FsbFxuIDQ4MDpcdCAqIEBzb2NrOiBUaGUgc29ja2V0IG9uIHdoaWNoIHRoZSBjYWxsIGlzIGluIHByb2dyZXNzLlxuIDQ4MTpcdCAqIEBjYWxsOiBUaGUgY2FsbCB0byBxdWVyeVxuIDQ4MjpcdCAqXG4gNDgzOlx0ICogR2V0IGEgcmVjb3JkIGZvciB0aGUgcmVtb3RlIHBlZXIgaW4gYSBjYWxsLlxuIDQ4NDpcdCAqXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDAyOjU5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUwNzMKCQkJCQkJCW91dHB1dDogMTczCgkJCQkJCQl0aG91Z2h0czogMTY1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIFByb3Bvc2VkIENoYW5nZXMqKgoKT2theSwgc28gdGhlIGNoYW5nZXMgYXJlIHN0cmFpZ2h0Zm9yd2FyZC4gV2UmIzM5O3JlIHNwbGl0dGluZyBgcnhycGNfZXhpdF9uZXRgIGludG8gdHdvIHBhcnRzIHdpdGhpbiBgcGVybmV0X29wZXJhdGlvbnNgOiBhIHByZS1leGl0IGZ1bmN0aW9uLCBgcnhycGNfcHJlX2V4aXRfbmV0YCwgYW5kIHRoZSBhY3R1YWwgZXhpdCBmdW5jdGlvbiwgYHJ4cnBjX2V4aXRfbmV0YC4gQW5kLCBjcnVjaWFsbHksIHdlJiMzOTtyZSBhZGRpbmcgc3BpbmxvY2sgcHJvdGVjdGlvbiBhcm91bmQgYHJ4cnBjX2Rlc3Ryb3lfYWxsX3BlZXJzYCB0byB0YWNrbGUgdGhvc2UgcmFjZSBhbmQgVXNlLUFmdGVyLUZyZWUgaXNzdWVzIHRoYXQgcG9wIHVwIGR1cmluZyBwZWVyIGhhc2ggaXRlcmF0aW9uLiBHb29kLCBnb29kLgoKRnJvbSBteSBwZXJzcGVjdGl2ZSwgdGhlcmUmIzM5O3Mgbm90aGluZyBpbW1lZGlhdGVseSBhbGFybWluZyBoZXJlLiBObyB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZXMsIG5vIHVzZXItc3BhY2UgY29waWVzIHRvIHdvcnJ5IGFib3V0LCBubyBmaWRkbGluZyB3aXRoIGJ1ZmZlciBzaXplcyBvciB1bmluaXRpYWxpemVkIHZhcmlhYmxlIGFjY2Vzc2VzIOKAkyBhbGwgdGhpbmdzIEkmIzM5O2QgYmUgbG9va2luZyBmb3IuIEFuZCBnaXZlbiB0aGUgbmF0dXJlIG9mIHRoZSBjaGFuZ2VzLCBJIHdvdWxkIGV4cGVjdCBhbnkgcG90ZW50aWFsIHByb2JsZW1zLCBsaWtlIHRob3NlIGxvY2tpbmcgYnVncywgZGVhZGxvY2tzLCB1c2UtYWZ0ZXItZnJlZSBzY2VuYXJpb3MsIG9yIGRvdWJsZSBmcmVlcyB0byBiZSBjYXVnaHQgYnkgTE9DS0RFUCBhbmQgS0FTQU4uIFdlIGFyZSB0YWtpbmcgdGhlIHN0ZXBzIHRoYXQgd2lsbCBrZWVwIHVzIHNhZmUgaGVyZS4gVGhlcmVmb3JlLCBJIGRvbiYjMzk7dCBzZWUgYW55IHJlYXNvbiB3aHkgdGhpcyBuZWVkcyBLTVNBTiBpbnRlcnZlbnRpb24uIEkmIzM5O20gc2F0aXNmaWVkLgoKTm93LCBsZXQmIzM5O3MgZ2V0IHJlYWR5IGZvciB0aGUgYHNldC1yZXN1bHRzYCBjYWxsLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwMzowMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgcGVybmV0IG5hbWVzcGFjZSBleGl0IGNhbGxiYWNrcyBpbiBBRl9SWFJQQyAoc3BsaXR0aW5nIHRlYXJkb3duIGJldHdlZW4gcHJlX2V4aXQgYW5kIGV4aXQpIGFuZCBhZGRzIHNwaW5sb2NrIHN5bmNocm9uaXphdGlvbiAocGVlcl9oYXNoX2xvY2spIGluIHJ4cnBjX2Rlc3Ryb3lfYWxsX3BlZXJzKCkgdG8gcHJvdGVjdCBhZ2FpbnN0IGNvbmN1cnJlbnQgdW5saW5raW5nIGFuZCB1c2UtYWZ0ZXItZnJlZS5cblxuTm8gbmV3IG1lbW9yeSBhbGxvY2F0aW9ucywgdW5pbml0aWFsaXplZCB2YXJpYWJsZSB1c2VzLCB1c2VyLWNvcHkgb3BlcmF0aW9ucywgb3IgYWx0ZXJlZCBkYXRhLXBhcnNpbmcvYnVmZmVyLWxlbmd0aCBsb2dpYyBhcmUgaW50cm9kdWNlZC4gVGhlIHBvdGVudGlhbCBpc3N1ZXMgYWRkcmVzc2VkIG9yIGludHJvZHVjZWQgYnkgdGhpcyBwYXRjaCByZWxhdGUgZXhjbHVzaXZlbHkgdG8gdGVhcmRvd24gb3JkZXJpbmcsIHN5bmNocm9uaXphdGlvbiwgbG9ja2luZywgYW5kIHVzZS1hZnRlci1mcmVlLCBhbGwgb2Ygd2hpY2ggYXJlIGNvdmVyZWQgYnkgc3RhbmRhcmQgc2FuaXRpemVycyAoS0FTQU4sIExPQ0tERVApLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHBlcm5ldCBuYW1lc3BhY2UgZXhpdCBjYWxsYmFja3MgaW4gQUZfUlhSUEMgKHNwbGl0dGluZyB0ZWFyZG93biBiZXR3ZWVuIHByZV9leGl0IGFuZCBleGl0KSBhbmQgYWRkcyBzcGlubG9jayBzeW5jaHJvbml6YXRpb24gKHBlZXJfaGFzaF9sb2NrKSBpbiByeHJwY19kZXN0cm95X2FsbF9wZWVycygpIHRvIHByb3RlY3QgYWdhaW5zdCBjb25jdXJyZW50IHVubGlua2luZyBhbmQgdXNlLWFmdGVyLWZyZWUuXG5cbk5vIG5ldyBtZW1vcnkgYWxsb2NhdGlvbnMsIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGUgdXNlcywgdXNlci1jb3B5IG9wZXJhdGlvbnMsIG9yIGFsdGVyZWQgZGF0YS1wYXJzaW5nL2J1ZmZlci1sZW5ndGggbG9naWMgYXJlIGludHJvZHVjZWQuIFRoZSBwb3RlbnRpYWwgaXNzdWVzIGFkZHJlc3NlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoaXMgcGF0Y2ggcmVsYXRlIGV4Y2x1c2l2ZWx5IHRvIHRlYXJkb3duIG9yZGVyaW5nLCBzeW5jaHJvbml6YXRpb24sIGxvY2tpbmcsIGFuZCB1c2UtYWZ0ZXItZnJlZSwgYWxsIG9mIHdoaWNoIGFyZSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIHNhbml0aXplcnMgKEtBU0FOLCBMT0NLREVQKS4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMDhUMDI6NTk6MTAuNDgxMTk3MTk5WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDk5NTI5Nzk5OTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQUZfUlhSUENcIixcbiAgICBcIklORVRcIixcbiAgICBcIk5FVF9OU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInJ4cnBjX3ByZV9leGl0X25ldFwiLFxuICAgIFwicnhycGNfZXhpdF9uZXRcIixcbiAgICBcInJ4cnBjX2Rlc3Ryb3lfYWxsX3BlZXJzXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgcGVybmV0IG5hbWVzcGFjZSBleGl0IGNhbGxiYWNrcyBpbiBBRl9SWFJQQyAoc3BsaXR0aW5nIHRlYXJkb3duIGJldHdlZW4gcHJlX2V4aXQgYW5kIGV4aXQpIGFuZCBhZGRzIHNwaW5sb2NrIHN5bmNocm9uaXphdGlvbiAocGVlcl9oYXNoX2xvY2spIGluIHJ4cnBjX2Rlc3Ryb3lfYWxsX3BlZXJzKCkgdG8gcHJvdGVjdCBhZ2FpbnN0IGNvbmN1cnJlbnQgdW5saW5raW5nIGFuZCB1c2UtYWZ0ZXItZnJlZS5cXG5cXG5ObyBuZXcgbWVtb3J5IGFsbG9jYXRpb25zLCB1bmluaXRpYWxpemVkIHZhcmlhYmxlIHVzZXMsIHVzZXItY29weSBvcGVyYXRpb25zLCBvciBhbHRlcmVkIGRhdGEtcGFyc2luZy9idWZmZXItbGVuZ3RoIGxvZ2ljIGFyZSBpbnRyb2R1Y2VkLiBUaGUgcG90ZW50aWFsIGlzc3VlcyBhZGRyZXNzZWQgb3IgaW50cm9kdWNlZCBieSB0aGlzIHBhdGNoIHJlbGF0ZSBleGNsdXNpdmVseSB0byB0ZWFyZG93biBvcmRlcmluZywgc3luY2hyb25pemF0aW9uLCBsb2NraW5nLCBhbmQgdXNlLWFmdGVyLWZyZWUsIGFsbCBvZiB3aGljaCBhcmUgY292ZXJlZCBieSBzdGFuZGFyZCBzYW5pdGl6ZXJzIChLQVNBTiwgTE9DS0RFUCkuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIFJ4UlBDIG5ldHdvcmsgbmFtZXNwYWNlIHRlYXJkb3duIGxpZmVjeWNsZSBieSBzcGxpdHRpbmcgbmV0bnMgY2xlYW51cCBpbnRvIHByZV9leGl0IGFuZCBleGl0IGhhbmRsZXJzIChyeHJwY19wcmVfZXhpdF9uZXQgYW5kIHJ4cnBjX2V4aXRfbmV0KSBhbmQgYWRkcyBsb2NraW5nIChwZWVyX2hhc2hfbG9jaykgaW4gcnhycGNfZGVzdHJveV9hbGxfcGVlcnMgdG8gcHJldmVudCB1c2UtYWZ0ZXItZnJlZSBjb25kaXRpb25zIGR1cmluZyBwZWVyIGhhc2ggdGFibGUgdHJhdmVyc2FsLiBUaGVzZSBjaGFuZ2VzIHRvdWNoIHJlYWNoYWJsZSBuZXR3b3JraW5nIGNvZGUgdGhhdCBpcyBleGVyY2lzZWQgZHVyaW5nIG5ldG5zIGxpZmVjeWNsZSBhbmQgQUZfUlhSUEMgc29ja2V0IG9wZXJhdGlvbnMsIG1ha2luZyBpdCB3b3J0aHdoaWxlIHRvIGZ1enouXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDAyOjU5OjEwLjQ4MTIwNTMxOVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQyNzQ1NjgxMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGUyNWQyMTljOThkNzVjZjc2ODQ4YzE2OWMxYmYzZGQxZmRhY2MxNjBcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFR1ZSBTZXAgOCAwMjo1OTowOCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9uZXQvcnhycGMvbmV0X25zLmMgYi9uZXQvcnhycGMvbmV0X25zLmNcXG5pbmRleCA5YTk4MzQxNDVlODFlLi4xNjkxMTY3MzUzNjYzIDEwMDY0NFxcbi0tLSBhL25ldC9yeHJwYy9uZXRfbnMuY1xcbisrKyBiL25ldC9yeHJwYy9uZXRfbnMuY1xcbkBAIC05NywxMCArOTcsNyBAQCBzdGF0aWMgX19uZXRfaW5pdCBpbnQgcnhycGNfaW5pdF9uZXQoc3RydWN0IG5ldCAqbmV0KVxcbiBcXHRyZXR1cm4gcmV0O1xcbiB9XFxuIFxcbi0vKlxcbi0gKiBDbGVhbiB1cCBhIHBlci1uZXR3b3JrIG5hbWVzcGFjZSByZWNvcmQuXFxuLSAqL1xcbi1zdGF0aWMgX19uZXRfZXhpdCB2b2lkIHJ4cnBjX2V4aXRfbmV0KHN0cnVjdCBuZXQgKm5ldClcXG4rc3RhdGljIF9fbmV0X2V4aXQgdm9pZCByeHJwY19wcmVfZXhpdF9uZXQoc3RydWN0IG5ldCAqbmV0KVxcbiB7XFxuIFxcdHN0cnVjdCByeHJwY19uZXQgKnJ4bmV0ID0gcnhycGNfbmV0KG5ldCk7XFxuIFxcbkBAIC0xMTEsMTQgKzEwOCwyNCBAQCBzdGF0aWMgX19uZXRfZXhpdCB2b2lkIHJ4cnBjX2V4aXRfbmV0KHN0cnVjdCBuZXQgKm5ldClcXG4gXFx0dGltZXJfZGVsZXRlX3N5bmMoXFx1MDAyNnJ4bmV0LVxcdTAwM2VwZWVyX2tlZXBhbGl2ZV90aW1lcik7XFxuIFxcdHJ4cnBjX2Rlc3Ryb3lfYWxsX2NhbGxzKHJ4bmV0KTtcXG4gXFx0cnhycGNfZGVzdHJveV9hbGxfY29ubmVjdGlvbnMocnhuZXQpO1xcbit9XFxuK1xcbisvKlxcbisgKiBDbGVhbiB1cCBhIHBlci1uZXR3b3JrIG5hbWVzcGFjZSByZWNvcmQuXFxuKyAqL1xcbitzdGF0aWMgX19uZXRfZXhpdCB2b2lkIHJ4cnBjX2V4aXRfbmV0KHN0cnVjdCBuZXQgKm5ldClcXG4re1xcbitcXHRzdHJ1Y3QgcnhycGNfbmV0ICpyeG5ldCA9IHJ4cnBjX25ldChuZXQpO1xcbitcXG4gXFx0cnhycGNfZGVzdHJveV9hbGxfcGVlcnMocnhuZXQpO1xcbiBcXHRyeHJwY19kZXN0cm95X2FsbF9sb2NhbHMocnhuZXQpO1xcbiBcXHRwcm9jX3JlbW92ZShyeG5ldC1cXHUwMDNlcHJvY19uZXQpO1xcbiB9XFxuIFxcbiBzdHJ1Y3QgcGVybmV0X29wZXJhdGlvbnMgcnhycGNfbmV0X29wcyA9IHtcXG4tXFx0LmluaXRcXHQ9IHJ4cnBjX2luaXRfbmV0LFxcbi1cXHQuZXhpdFxcdD0gcnhycGNfZXhpdF9uZXQsXFxuLVxcdC5pZFxcdD0gXFx1MDAyNnJ4cnBjX25ldF9pZCxcXG4tXFx0LnNpemVcXHQ9IHNpemVvZihzdHJ1Y3QgcnhycGNfbmV0KSxcXG4rXFx0LmluaXRcXHRcXHQ9IHJ4cnBjX2luaXRfbmV0LFxcbitcXHQucHJlX2V4aXRcXHQ9IHJ4cnBjX3ByZV9leGl0X25ldCxcXG4rXFx0LmV4aXRcXHRcXHQ9IHJ4cnBjX2V4aXRfbmV0LFxcbitcXHQuaWRcXHRcXHQ9IFxcdTAwMjZyeHJwY19uZXRfaWQsXFxuK1xcdC5zaXplXFx0XFx0PSBzaXplb2Yoc3RydWN0IHJ4cnBjX25ldCksXFxuIH07XFxuZGlmZiAtLWdpdCBhL25ldC9yeHJwYy9wZWVyX29iamVjdC5jIGIvbmV0L3J4cnBjL3BlZXJfb2JqZWN0LmNcXG5pbmRleCBmYTlhNDA2ZTExNjgzLi5mYWEyOTgzNjM4YjJiIDEwMDY0NFxcbi0tLSBhL25ldC9yeHJwYy9wZWVyX29iamVjdC5jXFxuKysrIGIvbmV0L3J4cnBjL3BlZXJfb2JqZWN0LmNcXG5AQCAtNDU0LDYgKzQ1NCwxMiBAQCB2b2lkIHJ4cnBjX2Rlc3Ryb3lfYWxsX3BlZXJzKHN0cnVjdCByeHJwY19uZXQgKnJ4bmV0KVxcbiBcXHRzdHJ1Y3QgcnhycGNfcGVlciAqcGVlcjtcXG4gXFx0aW50IGk7XFxuIFxcbitcXHQvKlxcbitcXHQgKiBQcmV2ZW50IHVzZS1hZnRlci1mcmVlIGlmIGEgcGVlciBpcyBjb25jdXJyZW50bHkgdW5saW5rZWQgZnJvbSB0aGVcXG4rXFx0ICogaGFzaCB0YWJsZSBhbmQgZnJlZWQgdmlhIFJDVSBkdXJpbmcgaXRlcmF0aW9uLlxcbitcXHQgKi9cXG4rXFx0c3Bpbl9sb2NrX2JoKFxcdTAwMjZyeG5ldC1cXHUwMDNlcGVlcl9oYXNoX2xvY2spO1xcbitcXG4gXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIEhBU0hfU0laRShyeG5ldC1cXHUwMDNlcGVlcl9oYXNoKTsgaSsrKSB7XFxuIFxcdFxcdGlmIChobGlzdF9lbXB0eShcXHUwMDI2cnhuZXQtXFx1MDAzZXBlZXJfaGFzaFtpXSkpXFxuIFxcdFxcdFxcdGNvbnRpbnVlO1xcbkBAIC00NjUsNiArNDcxLDggQEAgdm9pZCByeHJwY19kZXN0cm95X2FsbF9wZWVycyhzdHJ1Y3QgcnhycGNfbmV0ICpyeG5ldClcXG4gXFx0XFx0XFx0ICAgICAgIFxcdTAwMjZwZWVyLVxcdTAwM2VzcngudHJhbnNwb3J0KTtcXG4gXFx0XFx0fVxcbiBcXHR9XFxuK1xcbitcXHRzcGluX3VubG9ja19iaChcXHUwMDI2cnhuZXQtXFx1MDAzZXBlZXJfaGFzaF9sb2NrKTtcXG4gfVxcbiBcXG4gLyoqXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDAyOjU5OjExLjkwOTIyMDQ5MVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6Mjg2MTgwMzQxODEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQUZfUlhSUENcIixcbiAgICBcIklORVRcIixcbiAgICBcIk5FVF9OU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInJ4cnBjX3ByZV9leGl0X25ldFwiLFxuICAgIFwicnhycGNfZXhpdF9uZXRcIixcbiAgICBcInJ4cnBjX2Rlc3Ryb3lfYWxsX3BlZXJzXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIFJ4UlBDIG5ldHdvcmsgbmFtZXNwYWNlIHRlYXJkb3duIGxpZmVjeWNsZSBieSBzcGxpdHRpbmcgbmV0bnMgY2xlYW51cCBpbnRvIHByZV9leGl0IGFuZCBleGl0IGhhbmRsZXJzIChyeHJwY19wcmVfZXhpdF9uZXQgYW5kIHJ4cnBjX2V4aXRfbmV0KSBhbmQgYWRkcyBsb2NraW5nIChwZWVyX2hhc2hfbG9jaykgaW4gcnhycGNfZGVzdHJveV9hbGxfcGVlcnMgdG8gcHJldmVudCB1c2UtYWZ0ZXItZnJlZSBjb25kaXRpb25zIGR1cmluZyBwZWVyIGhhc2ggdGFibGUgdHJhdmVyc2FsLiBUaGVzZSBjaGFuZ2VzIHRvdWNoIHJlYWNoYWJsZSBuZXR3b3JraW5nIGNvZGUgdGhhdCBpcyBleGVyY2lzZWQgZHVyaW5nIG5ldG5zIGxpZmVjeWNsZSBhbmQgQUZfUlhSUEMgc29ja2V0IG9wZXJhdGlvbnMsIG1ha2luZyBpdCB3b3J0aHdoaWxlIHRvIGZ1enouXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3NcbnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4xLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncyxcbmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuXG5cbi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6XG4gIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWRcbiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS5cbiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLFxuICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuXG5cbi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgXCJOTyBGVU5DVElPTkFMIENIQU5HRVwiIChORkNJKSBPUiBcIlJFRkFDVE9SSU5HXCIgQ0xBSU1TOlxuICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzIFwiY2xlYW51cHNcIiwgXCJyZWZhY3RvcmluZ3NcIiwgb3Igc3RhdGVcbiAgXCJObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZFwiLiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS5cbiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50XG4gIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLlxuICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLlxuXG4tIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOlxuICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosXG4gIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLlxuICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyXG4gIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczpcblxuLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOlxuICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy5cbiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLylcbiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuXG4gICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHNcbiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLlxuICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy5cbi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOlxuICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6XG4gICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nXG4gICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuXG4gICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6XG4tIENvcmUgU3Vic3lzdGVtczpcbiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksXG4gICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLlxuLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6XG4gICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLlxuLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6XG4gICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLlxuLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOlxuICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOlxuXG4tIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzpcbiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXNcbiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHRcbiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuXG4gIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyBcImZvY3VzZWRcIixcbiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLlxuXG4tIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzpcbiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzXG4gIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LlxuXG4tIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKTpcbiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFja1xuICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy5cbiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyXG4gIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3Ncbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5JZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOlxuLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuLSBDaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLlxuLSBTdHJpcCBhbnkgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgZTI1ZDIxOWM5OGQ3NWNmNzY4NDhjMTY5YzFiZjNkZDFmZGFjYzE2MFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgU2VwIDggMDI6NTk6MDggMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvcnhycGMvbmV0X25zLmMgYi9uZXQvcnhycGMvbmV0X25zLmNcbmluZGV4IDlhOTgzNDE0NWU4MWUuLjE2OTExNjczNTM2NjMgMTAwNjQ0XG4tLS0gYS9uZXQvcnhycGMvbmV0X25zLmNcbisrKyBiL25ldC9yeHJwYy9uZXRfbnMuY1xuQEAgLTk3LDEwICs5Nyw3IEBAIHN0YXRpYyBfX25ldF9pbml0IGludCByeHJwY19pbml0X25ldChzdHJ1Y3QgbmV0ICpuZXQpXG4gXHRyZXR1cm4gcmV0O1xuIH1cbiBcbi0vKlxuLSAqIENsZWFuIHVwIGEgcGVyLW5ldHdvcmsgbmFtZXNwYWNlIHJlY29yZC5cbi0gKi9cbi1zdGF0aWMgX19uZXRfZXhpdCB2b2lkIHJ4cnBjX2V4aXRfbmV0KHN0cnVjdCBuZXQgKm5ldClcbitzdGF0aWMgX19uZXRfZXhpdCB2b2lkIHJ4cnBjX3ByZV9leGl0X25ldChzdHJ1Y3QgbmV0ICpuZXQpXG4ge1xuIFx0c3RydWN0IHJ4cnBjX25ldCAqcnhuZXQgPSByeHJwY19uZXQobmV0KTtcbiBcbkBAIC0xMTEsMTQgKzEwOCwyNCBAQCBzdGF0aWMgX19uZXRfZXhpdCB2b2lkIHJ4cnBjX2V4aXRfbmV0KHN0cnVjdCBuZXQgKm5ldClcbiBcdHRpbWVyX2RlbGV0ZV9zeW5jKFx1MDAyNnJ4bmV0LVx1MDAzZXBlZXJfa2VlcGFsaXZlX3RpbWVyKTtcbiBcdHJ4cnBjX2Rlc3Ryb3lfYWxsX2NhbGxzKHJ4bmV0KTtcbiBcdHJ4cnBjX2Rlc3Ryb3lfYWxsX2Nvbm5lY3Rpb25zKHJ4bmV0KTtcbit9XG4rXG4rLypcbisgKiBDbGVhbiB1cCBhIHBlci1uZXR3b3JrIG5hbWVzcGFjZSByZWNvcmQuXG4rICovXG4rc3RhdGljIF9fbmV0X2V4aXQgdm9pZCByeHJwY19leGl0X25ldChzdHJ1Y3QgbmV0ICpuZXQpXG4re1xuK1x0c3RydWN0IHJ4cnBjX25ldCAqcnhuZXQgPSByeHJwY19uZXQobmV0KTtcbitcbiBcdHJ4cnBjX2Rlc3Ryb3lfYWxsX3BlZXJzKHJ4bmV0KTtcbiBcdHJ4cnBjX2Rlc3Ryb3lfYWxsX2xvY2FscyhyeG5ldCk7XG4gXHRwcm9jX3JlbW92ZShyeG5ldC1cdTAwM2Vwcm9jX25ldCk7XG4gfVxuIFxuIHN0cnVjdCBwZXJuZXRfb3BlcmF0aW9ucyByeHJwY19uZXRfb3BzID0ge1xuLVx0LmluaXRcdD0gcnhycGNfaW5pdF9uZXQsXG4tXHQuZXhpdFx0PSByeHJwY19leGl0X25ldCxcbi1cdC5pZFx0PSBcdTAwMjZyeHJwY19uZXRfaWQsXG4tXHQuc2l6ZVx0PSBzaXplb2Yoc3RydWN0IHJ4cnBjX25ldCksXG4rXHQuaW5pdFx0XHQ9IHJ4cnBjX2luaXRfbmV0LFxuK1x0LnByZV9leGl0XHQ9IHJ4cnBjX3ByZV9leGl0X25ldCxcbitcdC5leGl0XHRcdD0gcnhycGNfZXhpdF9uZXQsXG4rXHQuaWRcdFx0PSBcdTAwMjZyeHJwY19uZXRfaWQsXG4rXHQuc2l6ZVx0XHQ9IHNpemVvZihzdHJ1Y3QgcnhycGNfbmV0KSxcbiB9O1xuZGlmZiAtLWdpdCBhL25ldC9yeHJwYy9wZWVyX29iamVjdC5jIGIvbmV0L3J4cnBjL3BlZXJfb2JqZWN0LmNcbmluZGV4IGZhOWE0MDZlMTE2ODMuLmZhYTI5ODM2MzhiMmIgMTAwNjQ0XG4tLS0gYS9uZXQvcnhycGMvcGVlcl9vYmplY3QuY1xuKysrIGIvbmV0L3J4cnBjL3BlZXJfb2JqZWN0LmNcbkBAIC00NTQsNiArNDU0LDEyIEBAIHZvaWQgcnhycGNfZGVzdHJveV9hbGxfcGVlcnMoc3RydWN0IHJ4cnBjX25ldCAqcnhuZXQpXG4gXHRzdHJ1Y3QgcnhycGNfcGVlciAqcGVlcjtcbiBcdGludCBpO1xuIFxuK1x0LypcbitcdCAqIFByZXZlbnQgdXNlLWFmdGVyLWZyZWUgaWYgYSBwZWVyIGlzIGNvbmN1cnJlbnRseSB1bmxpbmtlZCBmcm9tIHRoZVxuK1x0ICogaGFzaCB0YWJsZSBhbmQgZnJlZWQgdmlhIFJDVSBkdXJpbmcgaXRlcmF0aW9uLlxuK1x0ICovXG4rXHRzcGluX2xvY2tfYmgoXHUwMDI2cnhuZXQtXHUwMDNlcGVlcl9oYXNoX2xvY2spO1xuK1xuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgSEFTSF9TSVpFKHJ4bmV0LVx1MDAzZXBlZXJfaGFzaCk7IGkrKykge1xuIFx0XHRpZiAoaGxpc3RfZW1wdHkoXHUwMDI2cnhuZXQtXHUwMDNlcGVlcl9oYXNoW2ldKSlcbiBcdFx0XHRjb250aW51ZTtcbkBAIC00NjUsNiArNDcxLDggQEAgdm9pZCByeHJwY19kZXN0cm95X2FsbF9wZWVycyhzdHJ1Y3QgcnhycGNfbmV0ICpyeG5ldClcbiBcdFx0XHQgICAgICAgXHUwMDI2cGVlci1cdTAwM2VzcngudHJhbnNwb3J0KTtcbiBcdFx0fVxuIFx0fVxuK1xuK1x0c3Bpbl91bmxvY2tfYmgoXHUwMDI2cnhuZXQtXHUwMDNlcGVlcl9oYXNoX2xvY2spO1xuIH1cbiBcbiAvKipcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDAyOjU5OjExLjkwOTIyMjQzMVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjkxMDAzODUwNTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSByeHJwYyBQYXRjaCBmb3IgYW1kNjQqKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXZlIGludG8gdGhpcyBwYXRjaCB0YXJnZXRpbmcgdGhlIGFtZDY0IGFyY2hpdGVjdHVyZS4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IHBvaW50cyB0byBtb2RpZmljYXRpb25zIGluIGBuZXQvcnhycGMvbmV0X25zLmNgIGFuZCBgbmV0L3J4cnBjL3BlZXJfb2JqZWN0LmNgLiBJdCBsb29rcyBsaWtlIHdlJ3JlIGRlYWxpbmcgd2l0aCBzb21lIG5hbWVzcGFjZSBjbGVhbnVwIGFuZCBwZWVyIG1hbmFnZW1lbnQgY2hhbmdlcyB3aXRoaW4gdGhlIHJ4cnBjIHN1YnN5c3RlbS5cblxuU3BlY2lmaWNhbGx5LCBpbiBgbmV0X25zLmNgLCB0aGUgcmVmYWN0b3JpbmcgaXMgaW50ZXJlc3RpbmcuIFNwbGl0dGluZyBgcnhycGNfZXhpdF9uZXRgIGludG8gYC5wcmVfZXhpdGAgYW5kIGAuZXhpdGAgc3VnZ2VzdHMgYSBtb3JlIGdyYW51bGFyIGFwcHJvYWNoIHRvIG5ldHdvcmsgbmFtZXNwYWNlIHRlYXJkb3duLiAgYHJ4cnBjX3ByZV9leGl0X25ldGAgaXMgbm93IHJlc3BvbnNpYmxlIGZvciBzZXR0aW5nIGByeG5ldC1cdTAwM2VsaXZlID0gZmFsc2VgLCBzeW5jaW5nIHRpbWVycywgYW5kIGRlc3Ryb3lpbmcgY2FsbHMgYW5kIGNvbm5lY3Rpb25zLiBUaGF0J3MgYSByZWFzb25hYmxlIG9yZGVyaW5nLiBUaGUgc2Vjb25kIHBhcnQsIGByeHJwY19leGl0X25ldGAsIGhhbmRsZXMgcGVlciwgbG9jYWwgZW5kcG9pbnQgZGVzdHJ1Y3Rpb24sIGFuZCBwcm9jZnMgY2xlYW51cC4gU291bmRzIGxvZ2ljYWwgdG8gbWUuICBUaGlzIHNlcGFyYXRpb24gbGlrZWx5IGFpbXMgZm9yIGJldHRlciBzeW5jaHJvbml6YXRpb24gb3IgdGhlIG5lZWQgdG8gb3JkZXIgY2xlYW51cCBhY3Rpb25zLlxuXG5PdmVyIGluIGBwZWVyX29iamVjdC5jYCwgdGhlIGFkZGl0aW9uIG9mIGBzcGluX2xvY2tfYmhgIGFuZCBgc3Bpbl91bmxvY2tfYmhgIGFyb3VuZCB0aGUgYHJ4bmV0LVx1MDAzZXBlZXJfaGFzaF9sb2NrYCB3aXRoaW4gYHJ4cnBjX2Rlc3Ryb3lfYWxsX3BlZXJzYCBpcyBhIGNsZWFyIGluZGljYXRpb24gb2YgYSBjb25jdXJyZW5jeSBjb25jZXJuLiBJdCBzZWVtcyB3ZSBhcmUgdHJ5aW5nIHRvIGJldHRlciBwcm90ZWN0IHRoZSBwZWVyIGhhc2ggdGFibGUgZHVyaW5nIGRlc3RydWN0aW9uLCBwb3NzaWJseSB0byBhdm9pZCByYWNlIGNvbmRpdGlvbnMgd2hlbiBkZXN0cm95aW5nIHBlZXJzLlxuXG5Ob3csIHRvIGdldCBhIHNvbGlkIHVuZGVyc3RhbmRpbmcgb2YgdGhlIGltcGxpY2F0aW9ucywgSSBuZWVkIHRvIGNoZWNrIHRoZSBkZXBlbmRlbmNpZXMgYW5kIHRoZSBjb250ZXh0IG9mIHRoZXNlIGNoYW5nZXMuIEknbGwgbmVlZCB0byB1c2UgYGdyZXBgIG9yIGRpdmUgaW50byB0aGUgY29kZSBkaXJlY3RseSB0byBpZGVudGlmeSBhbnkgY29uZmlndXJhdGlvbiBvcHRpb25zIHJlcXVpcmVkIGZvciB0aGlzIHBhdGNoIHRvIHdvcmssIGFuZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgbW9kaWZpZWQgZnVuY3Rpb25zIGFyZSBjYWxsZWQgYW5kIHdoYXQgb3RoZXIgZnVuY3Rpb25zIHRoZXkgaW50ZXJhY3Qgd2l0aC4gIEkgd2FudCB0byBzZWUgd2hhdCB0cmlnZ2VycyB0aGUgbmFtZXNwYWNlIGV4aXQgcHJvY2Vzcy4gVGhhdCdzIHdoZXJlIHRoZSByZWFsIHN0b3J5IGxpZXMuIFRoaXMgbG9va3MgbGlrZSBhIG5lY2Vzc2FyeSBjbGVhbnVwIHRvIGJldHRlciBoYW5kbGUgZGVzdHJ1Y3Rpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM1NTgsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOTcsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwMjo1OToyMS4wMDk2MDkwOTVaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA5NDI5MDgyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkFGX1JYUlBDXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9yeHJwY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvcnhycGMvLmt1bml0Y29uZmlnPTM9Q09ORklHX0lORVQ9eVxcbm5ldC9yeHJwYy8ua3VuaXRjb25maWc6NDpDT05GSUdfQUZfUlhSUEM9eVxcbm5ldC9yeHJwYy8ua3VuaXRjb25maWctNS1DT05GSUdfUlhLQUQ9eVxcbm5ldC9yeHJwYy8ua3VuaXRjb25maWc6NjpDT05GSUdfQUZfUlhSUENfS1VOSVRfVEVTVD15XFxuLS1cXG5uZXQvcnhycGMvS2NvbmZpZy01LVxcbm5ldC9yeHJwYy9LY29uZmlnOjY6Y29uZmlnIEFGX1JYUlBDXFxubmV0L3J4cnBjL0tjb25maWctNy1cXHR0cmlzdGF0ZSBcXFwiUnhSUEMgc2Vzc2lvbiBzb2NrZXRzXFxcIlxcbi0tXFxubmV0L3J4cnBjL0tjb25maWctMjQtXFxubmV0L3J4cnBjL0tjb25maWc6MjU6aWYgQUZfUlhSUENcXG5uZXQvcnhycGMvS2NvbmZpZy0yNi1cXG5uZXQvcnhycGMvS2NvbmZpZzoyNzpjb25maWcgQUZfUlhSUENfSVBWNlxcbm5ldC9yeHJwYy9LY29uZmlnLTI4LVxcdGJvb2wgXFxcIklQdjYgc3VwcG9ydCBmb3IgUnhSUENcXFwiXFxuLS1cXG5uZXQvcnhycGMvS2NvbmZpZy0zMC1cXHRoZWxwXFxubmV0L3J4cnBjL0tjb25maWc6MzE6XFx0ICBTYXkgWSBoZXJlIHRvIGFsbG93IEFGX1JYUlBDIHRvIHVzZSBJUFY2IFVEUCBhcyB3ZWxsIGFzIElQVjQgVURQIGFzXFxubmV0L3J4cnBjL0tjb25maWctMzItXFx0ICBpdHMgbmV0d29yayB0cmFuc3BvcnQuXFxubmV0L3J4cnBjL0tjb25maWctMzMtXFxubmV0L3J4cnBjL0tjb25maWc6MzQ6Y29uZmlnIEFGX1JYUlBDX0lOSkVDVF9MT1NTXFxubmV0L3J4cnBjL0tjb25maWctMzUtXFx0Ym9vbCBcXFwiSW5qZWN0IHBhY2tldCBsb3NzIGludG8gUnhSUEMgcGFja2V0IHN0cmVhbVxcXCJcXG4tLVxcbm5ldC9yeHJwYy9LY29uZmlnLTM5LVxcbm5ldC9yeHJwYy9LY29uZmlnOjQwOmNvbmZpZyBBRl9SWFJQQ19JTkpFQ1RfUlhfREVMQVlcXG5uZXQvcnhycGMvS2NvbmZpZy00MS1cXHRib29sIFxcXCJJbmplY3QgZGVsYXkgaW50byBwYWNrZXQgcmVjZXB0aW9uXFxcIlxcbi0tXFxubmV0L3J4cnBjL0tjb25maWctNDktXFxubmV0L3J4cnBjL0tjb25maWc6NTA6Y29uZmlnIEFGX1JYUlBDX0RFQlVHXFxubmV0L3J4cnBjL0tjb25maWctNTEtXFx0Ym9vbCBcXFwiUnhSUEMgZHluYW1pYyBkZWJ1Z2dpbmdcXFwiXFxuLS1cXG5uZXQvcnhycGMvS2NvbmZpZz01OD1jb25maWcgUlhLQURcXG4tLVxcbm5ldC9yeHJwYy9LY29uZmlnLTYwLVxcdGhlbHBcXG5uZXQvcnhycGMvS2NvbmZpZzo2MTpcXHQgIFByb3ZpZGUga2VyYmVyb3MgNCBhbmQgQUZTIGthc2VydmVyIHNlY3VyaXR5IGhhbmRsaW5nIGZvciBBRl9SWFJQQ1xcbm5ldC9yeHJwYy9LY29uZmlnLTYyLVxcdCAgdGhyb3VnaCB0aGUgdXNlIG9mIHRoZSBrZXkgcmV0ZW50aW9uIHNlcnZpY2UuXFxuLS1cXG5uZXQvcnhycGMvS2NvbmZpZz04OT1jb25maWcgUlhQRVJGXFxuLS1cXG5uZXQvcnhycGMvS2NvbmZpZy05NS1cXG5uZXQvcnhycGMvS2NvbmZpZzo5Njpjb25maWcgQUZfUlhSUENfS1VOSVRfVEVTVFxcbm5ldC9yeHJwYy9LY29uZmlnLTk3LVxcdHRyaXN0YXRlIFxcXCJSeFJQQyBjcnlwdG8gS1VuaXQgdGVzdFxcXCIgaWYgIUtVTklUX0FMTF9URVNUU1xcbi0tXFxubmV0L3J4cnBjL01ha2VmaWxlLTUtXFxubmV0L3J4cnBjL01ha2VmaWxlOjY6b2JqLSQoQ09ORklHX0FGX1JYUlBDKSArPSByeHJwYy5vXFxubmV0L3J4cnBjL01ha2VmaWxlLTctXFxuLS1cXG5uZXQvcnhycGMvYWZfcnhycGMuYy0xLS8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9yLWxhdGVyXFxubmV0L3J4cnBjL2FmX3J4cnBjLmM6MjovKiBBRl9SWFJQQyBpbXBsZW1lbnRhdGlvblxcbm5ldC9yeHJwYy9hZl9yeHJwYy5jLTMtICpcXG4tLVxcbm5ldC9yeHJwYy9hZl9yeHJwYy5jPTc3PXN0YXRpYyBpbnQgcnhycGNfdmFsaWRhdGVfYWRkcmVzcyhzdHJ1Y3QgcnhycGNfc29jayAqcngsXFxuLS1cXG5uZXQvcnhycGMvYWZfcnhycGMuYy04NS1cXG5uZXQvcnhycGMvYWZfcnhycGMuYzo4NjpcXHRpZiAoc3J4LVxcdTAwM2VzcnhfZmFtaWx5ICE9IEFGX1JYUlBDKVxcbm5ldC9yeHJwYy9hZl9yeHJwYy5jLTg3LVxcdFxcdHJldHVybiAtRUFGTk9TVVBQT1JUO1xcbi0tXFxubmV0L3J4cnBjL2FmX3J4cnBjLmMtMTA2LVxcbm5ldC9yeHJwYy9hZl9yeHJwYy5jOjEwNzojaWZkZWYgQ09ORklHX0FGX1JYUlBDX0lQVjZcXG5uZXQvcnhycGMvYWZfcnhycGMuYy0xMDgtXFx0Y2FzZSBBRl9JTkVUNjpcXG4tLVxcbm5ldC9yeHJwYy9hZl9yeHJwYy5jPTUzOD1zdGF0aWMgaW50IHJ4cnBjX3NlbmRtc2coc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbSwgc2l6ZV90IGxlbilcXG4tLVxcbm5ldC9yeHJwYy9hZl9yeHJwYy5jLTU2MS1cXHRjYXNlIFJYUlBDX0NMSUVOVF9VTkJPVU5EOlxcbm5ldC9yeHJwYy9hZl9yeHJwYy5jOjU2MjpcXHRcXHRyeC1cXHUwMDNlc3J4LnNyeF9mYW1pbHkgPSBBRl9SWFJQQztcXG5uZXQvcnhycGMvYWZfcnhycGMuYy01NjMtXFx0XFx0cngtXFx1MDAzZXNyeC5zcnhfc2VydmljZSA9IDA7XFxuLS1cXG5uZXQvcnhycGMvYWZfcnhycGMuYy01NjktXFx0XFx0XFx0YnJlYWs7XFxubmV0L3J4cnBjL2FmX3J4cnBjLmM6NTcwOiNpZmRlZiBDT05GSUdfQUZfUlhSUENfSVBWNlxcbm5ldC9yeHJwYy9hZl9yeHJwYy5jLTU3MS1cXHRcXHRjYXNlIEFGX0lORVQ2Olxcbi0tXFxubmV0L3J4cnBjL2FmX3J4cnBjLmM9ODAyPXN0YXRpYyBpbnQgcnhycGNfY3JlYXRlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNvY2tldCAqc29jaywgaW50IHByb3RvY29sLFxcbi0tXFxubmV0L3J4cnBjL2FmX3J4cnBjLmMtODEyLVxcdGlmIChwcm90b2NvbCAhPSBQRl9JTkVUIFxcdTAwMjZcXHUwMDI2XFxubmV0L3J4cnBjL2FmX3J4cnBjLmM6ODEzOlxcdCAgICBJU19FTkFCTEVEKENPTkZJR19BRl9SWFJQQ19JUFY2KSBcXHUwMDI2XFx1MDAyNiBwcm90b2NvbCAhPSBQRl9JTkVUNilcXG5uZXQvcnhycGMvYWZfcnhycGMuYy04MTQtXFx0XFx0cmV0dXJuIC1FUFJPVE9OT1NVUFBPUlQ7XFxuLS1cXG5uZXQvcnhycGMvYXItaW50ZXJuYWwuaC0xLS8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9yLWxhdGVyICovXFxubmV0L3J4cnBjL2FyLWludGVybmFsLmg6MjovKiBBRl9SWFJQQyBpbnRlcm5hbCBkZWZpbml0aW9uc1xcbm5ldC9yeHJwYy9hci1pbnRlcm5hbC5oLTMtICpcXG4tLVxcbm5ldC9yeHJwYy9hci1pbnRlcm5hbC5oPTI2NT1zdHJ1Y3QgcnhycGNfc2VjdXJpdHkge1xcbi0tXFxubmV0L3J4cnBjL2FyLWludGVybmFsLmgtMzQzLSAqIFJ4UlBDIGxvY2FsIHRyYW5zcG9ydCBlbmRwb2ludCBkZXNjcmlwdGlvblxcbm5ldC9yeHJwYy9hci1pbnRlcm5hbC5oOjM0NDogKiAtIG93bmVkIGJ5IGEgc2luZ2xlIEFGX1JYUlBDIHNvY2tldFxcbm5ldC9yeHJwYy9hci1pbnRlcm5hbC5oLTM0NS0gKiAtIHBvaW50ZWQgdG8gYnkgdHJhbnNwb3J0IHNvY2tldCBzdHJ1Y3Qgc2tfdXNlcl9kYXRhXFxuLS1cXG5uZXQvcnhycGMvYXItaW50ZXJuYWwuaD0zNDc9c3RydWN0IHJ4cnBjX2xvY2FsIHtcXG4tLVxcbm5ldC9yeHJwYy9hci1pbnRlcm5hbC5oLTM1OC1cXHRzdHJ1Y3QgcnhycGNfc29ja1xcdCpzZXJ2aWNlO1xcdC8qIFNlcnZpY2UocykgbGlzdGVuaW5nIG9uIHRoaXMgZW5kcG9pbnQgKi9cXG5uZXQvcnhycGMvYXItaW50ZXJuYWwuaDozNTk6I2lmZGVmIENPTkZJR19BRl9SWFJQQ19JTkpFQ1RfUlhfREVMQVlcXG5uZXQvcnhycGMvYXItaW50ZXJuYWwuaC0zNjAtXFx0c3RydWN0IHNrX2J1ZmZfaGVhZFxcdHJ4X2RlbGF5X3F1ZXVlO1xcdC8qIERlbGF5IGluamVjdGlvbiBxdWV1ZSAqL1xcbi0tXFxubmV0L3J4cnBjL2FyLWludGVybmFsLmg9MTM2ND1leHRlcm4gdW5zaWduZWQgaW50IHJ4cnBjX3J4X2p1bWJvX21heDtcXG5uZXQvcnhycGMvYXItaW50ZXJuYWwuaDoxMzY1OiNpZmRlZiBDT05GSUdfQUZfUlhSUENfSU5KRUNUX1JYX0RFTEFZXFxubmV0L3J4cnBjL2FyLWludGVybmFsLmgtMTM2Ni1leHRlcm4gdW5zaWduZWQgbG9uZyByeHJwY19pbmplY3RfcnhfZGVsYXk7XFxuLS1cXG5uZXQvcnhycGMvYXItaW50ZXJuYWwuaD0xNjIxPWV4dGVybiB1bnNpZ25lZCBpbnQgcnhycGNfZGVidWc7XFxuLS1cXG5uZXQvcnhycGMvYXItaW50ZXJuYWwuaC0xNjM1LVxcbm5ldC9yeHJwYy9hci1pbnRlcm5hbC5oOjE2MzY6I2VsaWYgZGVmaW5lZChDT05GSUdfQUZfUlhSUENfREVCVUcpXFxubmV0L3J4cnBjL2FyLWludGVybmFsLmgtMTYzNy0jZGVmaW5lIFJYUlBDX0RFQlVHX0tFTlRFUlxcdDB4MDFcXG4tLVxcbm5ldC9yeHJwYy9jb25uX2NsaWVudC5jPTU0PXN0YXRpYyB2b2lkIHJ4cnBjX2Rlc3Ryb3lfY2xpZW50X2Nvbm5faWRzKHN0cnVjdCByeHJwY19sb2NhbCAqbG9jYWwpXFxuLS1cXG5uZXQvcnhycGMvY29ubl9jbGllbnQuYy02MC1cXHRcXHRpZHJfZm9yX2VhY2hfZW50cnkoXFx1MDAyNmxvY2FsLVxcdTAwM2Vjb25uX2lkcywgY29ubiwgaWQpIHtcXG5uZXQvcnhycGMvY29ubl9jbGllbnQuYzo2MTpcXHRcXHRcXHRwcl9lcnIoXFxcIkFGX1JYUlBDOiBMZWFrZWQgY2xpZW50IGNvbm4gJXAgeyVkfVxcXFxuXFxcIixcXG5uZXQvcnhycGMvY29ubl9jbGllbnQuYy02Mi1cXHRcXHRcXHQgICAgICAgY29ubiwgcmVmY291bnRfcmVhZChcXHUwMDI2Y29ubi1cXHUwMDNlcmVmKSk7XFxuLS1cXG5uZXQvcnhycGMvY29ubl9vYmplY3QuYz05Nz1zdHJ1Y3QgcnhycGNfY29ubmVjdGlvbiAqcnhycGNfZmluZF9jbGllbnRfY29ubmVjdGlvbl9yY3Uoc3RydWN0IHJ4cnBjX2xvY2FsICpsb2NhbCxcXG4tLVxcbm5ldC9yeHJwYy9jb25uX29iamVjdC5jLTEyNi1cXHRcXHRicmVhaztcXG5uZXQvcnhycGMvY29ubl9vYmplY3QuYzoxMjc6I2lmZGVmIENPTkZJR19BRl9SWFJQQ19JUFY2XFxubmV0L3J4cnBjL2Nvbm5fb2JqZWN0LmMtMTI4LVxcdGNhc2UgQUZfSU5FVDY6XFxuLS1cXG5uZXQvcnhycGMvY29ubl9vYmplY3QuYz00NjY9dm9pZCByeHJwY19kZXN0cm95X2FsbF9jb25uZWN0aW9ucyhzdHJ1Y3QgcnhycGNfbmV0ICpyeG5ldClcXG4tLVxcbm5ldC9yeHJwYy9jb25uX29iamVjdC5jLTQ4MC1cXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoY29ubiwgX3AsIFxcdTAwMjZyeG5ldC1cXHUwMDNlc2VydmljZV9jb25ucywgbGluaykge1xcbm5ldC9yeHJwYy9jb25uX29iamVjdC5jOjQ4MTpcXHRcXHRwcl9lcnIoXFxcIkFGX1JYUlBDOiBMZWFrZWQgY29ubiAlcCB7JWR9XFxcXG5cXFwiLFxcbm5ldC9yeHJwYy9jb25uX29iamVjdC5jLTQ4Mi1cXHRcXHQgICAgICAgY29ubiwgcmVmY291bnRfcmVhZChcXHUwMDI2Y29ubi1cXHUwMDNlcmVmKSk7XFxuLS1cXG5uZXQvcnhycGMvaW9fdGhyZWFkLmM9MjY9aW50IHJ4cnBjX2VuY2FwX3JjdihzdHJ1Y3Qgc29jayAqdWRwX3NrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L3J4cnBjL2lvX3RocmVhZC5jLTQ2LVxcdHJ4X3F1ZXVlID0gXFx1MDAyNmxvY2FsLVxcdTAwM2VyeF9xdWV1ZTtcXG5uZXQvcnhycGMvaW9fdGhyZWFkLmM6NDc6I2lmZGVmIENPTkZJR19BRl9SWFJQQ19JTkpFQ1RfUlhfREVMQVlcXG5uZXQvcnhycGMvaW9fdGhyZWFkLmMtNDgtXFx0aWYgKHJ4cnBjX2luamVjdF9yeF9kZWxheSB8fFxcbi0tXFxubmV0L3J4cnBjL2lvX3RocmVhZC5jPTE5NT1zdGF0aWMgYm9vbCByeHJwY19pbnB1dF9wYWNrZXQoc3RydWN0IHJ4cnBjX2xvY2FsICpsb2NhbCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9yeHJwYy9pb190aHJlYWQuYy0yMTAtXFxubmV0L3J4cnBjL2lvX3RocmVhZC5jOjIxMTpcXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfQUZfUlhSUENfSU5KRUNUX0xPU1MpKSB7XFxubmV0L3J4cnBjL2lvX3RocmVhZC5jLTIxMi1cXHRcXHRzdGF0aWMgaW50IGxvc2U7XFxuLS1cXG5uZXQvcnhycGMvaW9fdGhyZWFkLmMtMjc1LVxcdCAgICAgbG9jYWwtXFx1MDAzZXNyeC50cmFuc3BvcnQuZmFtaWx5ICE9IEFGX0lORVQ2KSkge1xcbm5ldC9yeHJwYy9pb190aHJlYWQuYzoyNzY6XFx0XFx0cHJfd2Fybl9yYXRlbGltaXRlZChcXFwiQUZfUlhSUEM6IFByb3RvY29sIG1pc21hdGNoICV1IG5vdCAldVxcXFxuXFxcIixcXG5uZXQvcnhycGMvaW9fdGhyZWFkLmMtMjc3LVxcdFxcdFxcdFxcdCAgICBwZWVyX3NyeC50cmFuc3BvcnQuZmFtaWx5LFxcbi0tXFxubmV0L3J4cnBjL2lvX3RocmVhZC5jPTQzMD1pbnQgcnhycGNfaW9fdGhyZWFkKHZvaWQgKmRhdGEpXFxuLS1cXG5uZXQvcnhycGMvaW9fdGhyZWFkLmMtNDM2LVxcdHN0cnVjdCBza19idWZmICpza2I7XFxubmV0L3J4cnBjL2lvX3RocmVhZC5jOjQzNzojaWZkZWYgQ09ORklHX0FGX1JYUlBDX0lOSkVDVF9SWF9ERUxBWVxcbm5ldC9yeHJwYy9pb190aHJlYWQuYy00MzgtXFx0a3RpbWVfdCBub3c7XFxuLS1cXG5uZXQvcnhycGMvaW9fdGhyZWFkLmMtNDUzLVxcdFxcdC8qIEluamVjdCBhIGRlbGF5IGludG8gcGFja2V0cyBpZiByZXF1ZXN0ZWQuICovXFxubmV0L3J4cnBjL2lvX3RocmVhZC5jOjQ1NDojaWZkZWYgQ09ORklHX0FGX1JYUlBDX0lOSkVDVF9SWF9ERUxBWVxcbm5ldC9yeHJwYy9pb190aHJlYWQuYy00NTUtXFx0XFx0bm93ID0ga3RpbWVfZ2V0X3JlYWwoKTtcXG4tLVxcbm5ldC9yeHJwYy9pb190aHJlYWQuYy01NTItXFxubmV0L3J4cnBjL2lvX3RocmVhZC5jOjU1MzojaWZkZWYgQ09ORklHX0FGX1JYUlBDX0lOSkVDVF9SWF9ERUxBWVxcbm5ldC9yeHJwYy9pb190aHJlYWQuYy01NTQtXFx0XFx0c2tiID0gc2tiX3BlZWsoXFx1MDAyNmxvY2FsLVxcdTAwM2VyeF9kZWxheV9xdWV1ZSk7XFxuLS1cXG5uZXQvcnhycGMvbG9jYWxfZXZlbnQuYy0xLS8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9yLWxhdGVyXFxubmV0L3J4cnBjL2xvY2FsX2V2ZW50LmM6MjovKiBBRl9SWFJQQyBsb2NhbCBlbmRwb2ludCBtYW5hZ2VtZW50XFxubmV0L3J4cnBjL2xvY2FsX2V2ZW50LmMtMy0gKlxcbi0tXFxubmV0L3J4cnBjL2xvY2FsX2V2ZW50LmMtMTgtXFxubmV0L3J4cnBjL2xvY2FsX2V2ZW50LmM6MTk6c3RhdGljIGNoYXIgcnhycGNfdmVyc2lvbl9zdHJpbmdbNjVdOyAvLyBcXFwibGludXgtXFxcIiBVVFNfUkVMRUFTRSBcXFwiIEFGX1JYUlBDXFxcIjtcXG5uZXQvcnhycGMvbG9jYWxfZXZlbnQuYy0yMC1cXG4tLVxcbm5ldC9yeHJwYy9sb2NhbF9ldmVudC5jPTI0PXZvaWQgcnhycGNfZ2VuX3ZlcnNpb25fc3RyaW5nKHZvaWQpXFxuLS1cXG5uZXQvcnhycGMvbG9jYWxfZXZlbnQuYy0yNi1cXHRzbnByaW50ZihyeHJwY192ZXJzaW9uX3N0cmluZywgc2l6ZW9mKHJ4cnBjX3ZlcnNpb25fc3RyaW5nKSxcXG5uZXQvcnhycGMvbG9jYWxfZXZlbnQuYzoyNzpcXHRcXHQgXFxcImxpbnV4LSUuNDlzIEFGX1JYUlBDXFxcIiwgVVRTX1JFTEVBU0UpO1xcbm5ldC9yeHJwYy9sb2NhbF9ldmVudC5jLTI4LX1cXG4tLVxcbm5ldC9yeHJwYy9sb2NhbF9vYmplY3QuYz0zMD1zdGF0aWMgdm9pZCByeHJwY19lbmNhcF9lcnJfcmN2KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IGVycixcXG4tLVxcbm5ldC9yeHJwYy9sb2NhbF9vYmplY3QuYy0zNC1cXHRcXHRyZXR1cm4gaXBfaWNtcF9lcnJvcihzaywgc2tiLCBlcnIsIHBvcnQsIGluZm8sIHBheWxvYWQpO1xcbm5ldC9yeHJwYy9sb2NhbF9vYmplY3QuYzozNTpcXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfQUZfUlhSUENfSVBWNikpXFxubmV0L3J4cnBjL2xvY2FsX29iamVjdC5jLTM2LVxcdFxcdHJldHVybiBpcHY2X2ljbXBfZXJyb3Ioc2ssIHNrYiwgZXJyLCBwb3J0LCBpbmZvLCBwYXlsb2FkKTtcXG4tLVxcbm5ldC9yeHJwYy9sb2NhbF9vYmplY3QuYz01OT1zdGF0aWMgbG9uZyByeHJwY19sb2NhbF9jbXBfa2V5KGNvbnN0IHN0cnVjdCByeHJwY19sb2NhbCAqbG9jYWwsXFxuLS1cXG5uZXQvcnhycGMvbG9jYWxfb2JqZWN0LmMtNzktXFx0XFx0XFx0ICAgICAgIHNpemVvZihzdHJ1Y3QgaW5fYWRkcikpO1xcbm5ldC9yeHJwYy9sb2NhbF9vYmplY3QuYzo4MDojaWZkZWYgQ09ORklHX0FGX1JYUlBDX0lQVjZcXG5uZXQvcnhycGMvbG9jYWxfb2JqZWN0LmMtODEtXFx0Y2FzZSBBRl9JTkVUNjpcXG4tLVxcbm5ldC9yeHJwYy9sb2NhbF9vYmplY3QuYz0xMDk9c3RhdGljIHN0cnVjdCByeHJwY19sb2NhbCAqcnhycGNfYWxsb2NfbG9jYWwoc3RydWN0IG5ldCAqbmV0LFxcbi0tXFxubmV0L3J4cnBjL2xvY2FsX29iamVjdC5jLTEyMi1cXHRcXHRpbml0X2NvbXBsZXRpb24oXFx1MDAyNmxvY2FsLVxcdTAwM2Vpb190aHJlYWRfcmVhZHkpO1xcbm5ldC9yeHJwYy9sb2NhbF9vYmplY3QuYzoxMjM6I2lmZGVmIENPTkZJR19BRl9SWFJQQ19JTkpFQ1RfUlhfREVMQVlcXG5uZXQvcnhycGMvbG9jYWxfb2JqZWN0LmMtMTI0LVxcdFxcdHNrYl9xdWV1ZV9oZWFkX2luaXQoXFx1MDAyNmxvY2FsLVxcdTAwM2VyeF9kZWxheV9xdWV1ZSk7XFxuLS1cXG5uZXQvcnhycGMvbG9jYWxfb2JqZWN0LmM9MTYyPXN0YXRpYyBpbnQgcnhycGNfb3Blbl9zb2NrZXQoc3RydWN0IHJ4cnBjX2xvY2FsICpsb2NhbCwgc3RydWN0IG5ldCAqbmV0KVxcbi0tXFxubmV0L3J4cnBjL2xvY2FsX29iamVjdC5jLTE3OC1cXHRcXHR1ZHBfY29uZi5sb2NhbF91ZHBfcG9ydCA9IHNyeC1cXHUwMDNldHJhbnNwb3J0LnNpbi5zaW5fcG9ydDtcXG5uZXQvcnhycGMvbG9jYWxfb2JqZWN0LmM6MTc5OiNpZiBJU19FTkFCTEVEKENPTkZJR19BRl9SWFJQQ19JUFY2KVxcbm5ldC9yeHJwYy9sb2NhbF9vYmplY3QuYy0xODAtXFx0fSBlbHNlIHtcXG4tLVxcbm5ldC9yeHJwYy9sb2NhbF9vYmplY3QuYz00MjA9dm9pZCByeHJwY19kZXN0cm95X2xvY2FsKHN0cnVjdCByeHJwY19sb2NhbCAqbG9jYWwpXFxuLS1cXG5uZXQvcnhycGMvbG9jYWxfb2JqZWN0LmMtNDQ2LVxcdCAqL1xcbm5ldC9yeHJwYy9sb2NhbF9vYmplY3QuYzo0NDc6I2lmZGVmIENPTkZJR19BRl9SWFJQQ19JTkpFQ1RfUlhfREVMQVlcXG5uZXQvcnhycGMvbG9jYWxfb2JqZWN0LmMtNDQ4LVxcdHJ4cnBjX3B1cmdlX3F1ZXVlKFxcdTAwMjZsb2NhbC1cXHUwMDNlcnhfZGVsYXlfcXVldWUpO1xcbi0tXFxubmV0L3J4cnBjL2xvY2FsX29iamVjdC5jPTQ2OT12b2lkIHJ4cnBjX2Rlc3Ryb3lfYWxsX2xvY2FscyhzdHJ1Y3QgcnhycGNfbmV0ICpyeG5ldClcXG4tLVxcbm5ldC9yeHJwYy9sb2NhbF9vYmplY3QuYy00NzktXFx0XFx0aGxpc3RfZm9yX2VhY2hfZW50cnkobG9jYWwsIFxcdTAwMjZyeG5ldC1cXHUwMDNlbG9jYWxfZW5kcG9pbnRzLCBsaW5rKSB7XFxubmV0L3J4cnBjL2xvY2FsX29iamVjdC5jOjQ4MDpcXHRcXHRcXHRwcl9lcnIoXFxcIkFGX1JYUlBDOiBMZWFrZWQgbG9jYWwgJXAgeyVkfVxcXFxuXFxcIixcXG5uZXQvcnhycGMvbG9jYWxfb2JqZWN0LmMtNDgxLVxcdFxcdFxcdCAgICAgICBsb2NhbCwgcmVmY291bnRfcmVhZChcXHUwMDI2bG9jYWwtXFx1MDAzZXJlZikpO1xcbi0tXFxubmV0L3J4cnBjL21pc2MuYz01NT11bnNpZ25lZCBpbnQgcnhycGNfcnhfanVtYm9fbWF4ID0gNDY7XFxubmV0L3J4cnBjL21pc2MuYy01Ni1cXG5uZXQvcnhycGMvbWlzYy5jOjU3OiNpZmRlZiBDT05GSUdfQUZfUlhSUENfSU5KRUNUX1JYX0RFTEFZXFxubmV0L3J4cnBjL21pc2MuYy01OC0vKlxcbi0tXFxubmV0L3J4cnBjL291dHB1dC5jPTE5PXNzaXplX3QgZG9fdWRwX3NlbmRtc2coc3RydWN0IHNvY2tldCAqc29ja2V0LCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBsZW4pXFxuLS1cXG5uZXQvcnhycGMvb3V0cHV0LmMtMjMtXFxubmV0L3J4cnBjL291dHB1dC5jOjI0OlxcdGlmIChJU19FTkFCTEVEKENPTkZJR19BRl9SWFJQQ19JUFY2KSkge1xcbm5ldC9yeHJwYy9vdXRwdXQuYy0yNS1cXHRcXHRpZiAoc2EtXFx1MDAzZXNhX2ZhbWlseSA9PSBBRl9JTkVUNikge1xcbi0tXFxubmV0L3J4cnBjL291dHB1dC5jPTYzOT12b2lkIHJ4cnBjX3NlbmRfZGF0YV9wYWNrZXQoc3RydWN0IHJ4cnBjX2NhbGwgKmNhbGwsIHN0cnVjdCByeHJwY19zZW5kX2RhdGFfcmVxICpyZXEpXFxuLS1cXG5uZXQvcnhycGMvb3V0cHV0LmMtNjkzLVxcbm5ldC9yeHJwYy9vdXRwdXQuYzo2OTQ6XFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX0FGX1JYUlBDX0lOSkVDVF9MT1NTKSkge1xcbm5ldC9yeHJwYy9vdXRwdXQuYy02OTUtXFx0XFx0c3RhdGljIGludCBsb3NlO1xcbi0tXFxubmV0L3J4cnBjL3BlZXJfZXZlbnQuYz0yOD1zdGF0aWMgc3RydWN0IHJ4cnBjX3BlZXIgKnJ4cnBjX2xvb2t1cF9wZWVyX2xvY2FsX3JjdShzdHJ1Y3QgcnhycGNfbG9jYWwgKmxvY2FsLFxcbi0tXFxubmV0L3J4cnBjL3BlZXJfZXZlbnQuYy02Ni1cXG5uZXQvcnhycGMvcGVlcl9ldmVudC5jOjY3OiNpZmRlZiBDT05GSUdfQUZfUlhSUENfSVBWNlxcbm5ldC9yeHJwYy9wZWVyX2V2ZW50LmMtNjgtXFx0Y2FzZSBBRl9JTkVUNjpcXG4tLVxcbm5ldC9yeHJwYy9wZWVyX29iamVjdC5jPTMwPXN0YXRpYyB1bnNpZ25lZCBsb25nIHJ4cnBjX3BlZXJfaGFzaF9rZXkoc3RydWN0IHJ4cnBjX2xvY2FsICpsb2NhbCxcXG4tLVxcbm5ldC9yeHJwYy9wZWVyX29iamVjdC5jLTQ5LVxcdFxcdGJyZWFrO1xcbm5ldC9yeHJwYy9wZWVyX29iamVjdC5jOjUwOiNpZmRlZiBDT05GSUdfQUZfUlhSUENfSVBWNlxcbm5ldC9yeHJwYy9wZWVyX29iamVjdC5jLTUxLVxcdGNhc2UgQUZfSU5FVDY6XFxuLS1cXG5uZXQvcnhycGMvcGVlcl9vYmplY3QuYy01Ny1cXHRkZWZhdWx0Olxcbm5ldC9yeHJwYy9wZWVyX29iamVjdC5jOjU4OlxcdFxcdFdBUk4oMSwgXFxcIkFGX1JYUlBDOiBVbnN1cHBvcnRlZCB0cmFuc3BvcnQgYWRkcmVzcyBmYW1pbHlcXFxcblxcXCIpO1xcbm5ldC9yeHJwYy9wZWVyX29iamVjdC5jLTU5LVxcdFxcdHJldHVybiAwO1xcbi0tXFxubmV0L3J4cnBjL3BlZXJfb2JqZWN0LmM9Nzg9c3RhdGljIGxvbmcgcnhycGNfcGVlcl9jbXBfa2V5KGNvbnN0IHN0cnVjdCByeHJwY19wZWVyICpwZWVyLFxcbi0tXFxubmV0L3J4cnBjL3BlZXJfb2JqZWN0LmMtOTktXFx0XFx0XFx0ICAgICAgIHNpemVvZihzdHJ1Y3QgaW5fYWRkcikpO1xcbm5ldC9yeHJwYy9wZWVyX29iamVjdC5jOjEwMDojaWZkZWYgQ09ORklHX0FGX1JYUlBDX0lQVjZcXG5uZXQvcnhycGMvcGVlcl9vYmplY3QuYy0xMDEtXFx0Y2FzZSBBRl9JTkVUNjpcXG4tLVxcbm5ldC9yeHJwYy9wZWVyX29iamVjdC5jPTE1Mj12b2lkIHJ4cnBjX2Fzc2Vzc19NVFVfc2l6ZShzdHJ1Y3QgcnhycGNfbG9jYWwgKmxvY2FsLCBzdHJ1Y3QgcnhycGNfcGVlciAqcGVlcilcXG4tLVxcbm5ldC9yeHJwYy9wZWVyX29iamVjdC5jLTE1OC1cXHRzdHJ1Y3QgZmxvd2k0ICpmbDQgPSBcXHUwMDI2ZmwudS5pcDQ7XFxubmV0L3J4cnBjL3BlZXJfb2JqZWN0LmM6MTU5OiNpZmRlZiBDT05GSUdfQUZfUlhSUENfSVBWNlxcbm5ldC9yeHJwYy9wZWVyX29iamVjdC5jLTE2MC1cXHRzdHJ1Y3QgZmxvd2k2ICpmbDYgPSBcXHUwMDI2ZmwudS5pcDY7XFxuLS1cXG5uZXQvcnhycGMvcGVlcl9vYmplY3QuYy0xODMtXFxubmV0L3J4cnBjL3BlZXJfb2JqZWN0LmM6MTg0OiNpZmRlZiBDT05GSUdfQUZfUlhSUENfSVBWNlxcbm5ldC9yeHJwYy9wZWVyX29iamVjdC5jLTE4NS1cXHRjYXNlIEFGX0lORVQ2Olxcbi0tXFxubmV0L3J4cnBjL3BlZXJfb2JqZWN0LmM9MjUwPXN0YXRpYyB2b2lkIHJ4cnBjX2luaXRfcGVlcihzdHJ1Y3QgcnhycGNfbG9jYWwgKmxvY2FsLCBzdHJ1Y3QgcnhycGNfcGVlciAqcGVlcixcXG4tLVxcbm5ldC9yeHJwYy9wZWVyX29iamVjdC5jLTI1OS1cXHRcXHRicmVhaztcXG5uZXQvcnhycGMvcGVlcl9vYmplY3QuYzoyNjA6I2lmZGVmIENPTkZJR19BRl9SWFJQQ19JUFY2XFxubmV0L3J4cnBjL3BlZXJfb2JqZWN0LmMtMjYxLVxcdGNhc2UgQUZfSU5FVDY6XFxuLS1cXG5uZXQvcnhycGMvcGVlcl9vYmplY3QuYz01Mzg9RVhQT1JUX1NZTUJPTChyeHJwY19rZXJuZWxfcmVtb3RlX2FkZHIpO1xcbi0tXFxubmV0L3J4cnBjL3BlZXJfb2JqZWN0LmMtNTQ0LSAqXFxubmV0L3J4cnBjL3BlZXJfb2JqZWN0LmM6NTQ1OiAqIFNldCB0aGUgYXBwLXNwZWNpZmljIGRhdGEgb24gYSBwZWVyLiAgQUZfUlhSUEMgbWFrZXMgbm8gZWZmb3J0IHRvIHJldGFpblxcbm5ldC9yeHJwYy9wZWVyX29iamVjdC5jLTU0Ni0gKiBhbnl0aGluZyB0aGUgZGF0YSBtaWdodCByZWZlciB0by5cXG4tLVxcbm5ldC9yeHJwYy9wcm9jLmMtMS0vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vci1sYXRlclxcbm5ldC9yeHJwYy9wcm9jLmM6MjovKiAvcHJvYy9uZXQvIHN1cHBvcnQgZm9yIEFGX1JYUlBDXFxubmV0L3J4cnBjL3Byb2MuYy0zLSAqXFxuLS1cXG5uZXQvcnhycGMvcnR0LmMtMy0gKlxcbm5ldC9yeHJwYy9ydHQuYzo0OiAqIEFkYXB0ZWQgZnJvbSBUQ1AgZm9yIEFGX1JYUlBDIGJ5IERhdmlkIEhvd2VsbHMgKGRob3dlbGxzQHJlZGhhdC5jb20pXFxubmV0L3J4cnBjL3J0dC5jLTUtICpcXG4tLVxcbm5ldC9yeHJwYy9yeHBlcmYuYz0xODU9c3RhdGljIGludCByeHBlcmZfb3Blbl9zb2NrZXQodm9pZClcXG4tLVxcbm5ldC9yeHJwYy9yeHBlcmYuYy0xOTAtXFxubmV0L3J4cnBjL3J4cGVyZi5jOjE5MTpcXHRyZXQgPSBzb2NrX2NyZWF0ZV9rZXJuKFxcdTAwMjZpbml0X25ldCwgQUZfUlhSUEMsIFNPQ0tfREdSQU0sIFBGX0lORVQ2LFxcbm5ldC9yeHJwYy9yeHBlcmYuYy0xOTItXFx0XFx0XFx0ICAgICAgIFxcdTAwMjZzb2NrZXQpO1xcbi0tXFxubmV0L3J4cnBjL3J4cGVyZi5jLTE5OS1cXHRtZW1zZXQoXFx1MDAyNnNyeCwgMCwgc2l6ZW9mKHNyeCkpO1xcbm5ldC9yeHJwYy9yeHBlcmYuYzoyMDA6XFx0c3J4LnNyeF9mYW1pbHlcXHRcXHRcXHQ9IEFGX1JYUlBDO1xcbm5ldC9yeHJwYy9yeHBlcmYuYy0yMDEtXFx0c3J4LnNyeF9zZXJ2aWNlXFx0XFx0XFx0PSBSWF9QRVJGX1NFUlZJQ0U7XFxuLS1cXG5uZXQvcnhycGMvc2VuZG1zZy5jLTEtLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb3ItbGF0ZXJcXG5uZXQvcnhycGMvc2VuZG1zZy5jOjI6LyogQUZfUlhSUEMgc2VuZG1zZygpIGltcGxlbWVudGF0aW9uLlxcbm5ldC9yeHJwYy9zZW5kbXNnLmMtMy0gKlxcbi0tXFxubmV0L3J4cnBjL3N5c2N0bC5jPTIzPXN0YXRpYyBjb25zdCB1bnNpZ25lZCBsb25nIG1heF9qaWZmaWVzID0gTUFYX0pJRkZZX09GRlNFVDtcXG5uZXQvcnhycGMvc3lzY3RsLmM6MjQ6I2lmZGVmIENPTkZJR19BRl9SWFJQQ19JTkpFQ1RfUlhfREVMQVlcXG5uZXQvcnhycGMvc3lzY3RsLmMtMjUtc3RhdGljIGNvbnN0IHVuc2lnbmVkIGxvbmcgbWF4XzUwMCA9IDUwMDtcXG4tLVxcbm5ldC9yeHJwYy9zeXNjdGwuYz0zND1zdGF0aWMgc3RydWN0IGN0bF90YWJsZSByeHJwY19zeXNjdGxfdGFibGVbXSA9IHtcXG4tLVxcbm5ldC9yeHJwYy9zeXNjdGwuYy03My1cXHQvKiBWYWx1ZXMgdXNlZCBpbiBtaWxsaXNlY29uZHMgKi9cXG5uZXQvcnhycGMvc3lzY3RsLmM6NzQ6I2lmZGVmIENPTkZJR19BRl9SWFJQQ19JTkpFQ1RfUlhfREVMQVlcXG5uZXQvcnhycGMvc3lzY3RsLmMtNzUtXFx0e1xcbi0tXFxubmV0L3J4cnBjL3Rlc3RzL01ha2VmaWxlLTItXFxubmV0L3J4cnBjL3Rlc3RzL01ha2VmaWxlOjM6b2JqLSQoQ09ORklHX0FGX1JYUlBDX0tVTklUX1RFU1QpICs9IHJ4cnBjX2t1bml0Lm9cXG4tLVxcbm5ldC9yeHJwYy91dGlscy5jPTE2PWludCByeHJwY19leHRyYWN0X2FkZHJfZnJvbV9za2Ioc3RydWN0IHNvY2thZGRyX3J4cnBjICpzcngsIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvcnhycGMvdXRpbHMuYy0yOC1cXG5uZXQvcnhycGMvdXRpbHMuYzoyOTojaWZkZWYgQ09ORklHX0FGX1JYUlBDX0lQVjZcXG5uZXQvcnhycGMvdXRpbHMuYy0zMC1cXHRjYXNlIEVUSF9QX0lQVjY6XFxuLS1cXG5uZXQvcnhycGMvdXRpbHMuYy0zOS1cXHRkZWZhdWx0Olxcbm5ldC9yeHJwYy91dGlscy5jOjQwOlxcdFxcdHByX3dhcm5fcmF0ZWxpbWl0ZWQoXFxcIkFGX1JYUlBDOiBVbmtub3duIGV0aCBwcm90b2NvbCAldVxcXFxuXFxcIixcXG5uZXQvcnhycGMvdXRpbHMuYy00MS1cXHRcXHRcXHRcXHQgICAgbnRvaHMoc2tiLVxcdTAwM2Vwcm90b2NvbCkpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwMjo1OToyMS4xMTkwNDIyODdaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxODE2MzkxMDM5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOlxuXG4qKktjb25maWcgRGVwZW5kZW5jeSBDaGVjayBmb3IgQUZfUlhSUEMqKlxuXG5BbHJpZ2h0LCBsZXQncyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGRlcGVuZGVuY2llcyByZWxhdGVkIHRvIGBDT05GSUdfQUZfUlhSUENgLiBHaXZlbiBteSBleHBlcmllbmNlLCB0aGUgZmlyc3QgcGxhY2UgSSdkIGxvb2sgaXMgdGhlIGtlcm5lbCdzIGNvbmZpZ3VyYXRpb24gZmlsZXMuIFNwZWNpZmljYWxseSwgSSdtIHRoaW5raW5nIEkgc2hvdWxkIHN0YXJ0IGRpZ2dpbmcgaW50byB0aGUgYG5ldC9yeHJwYy9LY29uZmlnYCBmaWxlLiBUaGF0J3MgdGhlIG1vc3QgbG9naWNhbCBzcG90IGZvciBmaWd1cmluZyBvdXQgd2hhdCBvdGhlciBjb25maWd1cmF0aW9ucyBtaWdodCBuZWVkIHRvIGJlIGVuYWJsZWQgb3IgYXJlIHJlbGF0ZWQgdG8gZ2V0IGBBRl9SWFJQQ2AgZnVuY3Rpb25hbC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyB0byBtYWtlIGEgcmVjb21tZW5kYXRpb24uIEkgaGF2ZSB0byBtYWtlIHN1cmUgSSBkb24ndCBvdmVybG9vayBhbnkgaW1wbGljaXQgZGVwZW5kZW5jaWVzLiBJJ2xsIG5lZWQgdG8ga25vdyB3aGljaCBvdGhlciBmZWF0dXJlcyBpdCByZWxpZXMgdXBvbiwgYW5kIGFsc28gYW55IHJlbGF0aW9uc2hpcHMgd2l0aCByZWxhdGVkIHN1Yi1zeXN0ZW1zLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDE1NywiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDAyOjU5OjIyLjkzNTQzODc3NloiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY2MTUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9yeHJwYy9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuICAgMjpcXHQjXFxuICAgMzpcXHQjIFJ4UlBDIHNlc3Npb24gc29ja2V0c1xcbiAgIDQ6XFx0I1xcbiAgIDU6XFx0XFxuICAgNjpcXHRjb25maWcgQUZfUlhSUENcXG4gICA3OlxcdFxcdHRyaXN0YXRlIFxcXCJSeFJQQyBzZXNzaW9uIHNvY2tldHNcXFwiXFxuICAgODpcXHRcXHRkZXBlbmRzIG9uIElORVRcXG4gICA5OlxcdFxcdHNlbGVjdCBDUllQVE9cXG4gIDEwOlxcdFxcdHNlbGVjdCBDUllQVE9fTElCX0RFUyBpZiBSWEtBRFxcbiAgMTE6XFx0XFx0c2VsZWN0IEtFWVNcXG4gIDEyOlxcdFxcdHNlbGVjdCBORVRfVURQX1RVTk5FTFxcbiAgMTM6XFx0XFx0aGVscFxcbiAgMTQ6XFx0XFx0ICBTYXkgWSBvciBNIGhlcmUgdG8gaW5jbHVkZSBzdXBwb3J0IGZvciBSeFJQQyBzZXNzaW9uIHNvY2tldHMgKGp1c3RcXG4gIDE1OlxcdFxcdCAgdGhlIHRyYW5zcG9ydCBwYXJ0LCBub3QgdGhlIHByZXNlbnRhdGlvbiBwYXJ0OiAodW4pbWFyc2hhbGxpbmcgaXNcXG4gIDE2OlxcdFxcdCAgbGVmdCB0byB0aGUgYXBwbGljYXRpb24pLlxcbiAgMTc6XFx0XFxuICAxODpcXHRcXHQgIFRoZXNlIGFyZSB1c2VkIGZvciBBRlMga2VybmVsIGZpbGVzeXN0ZW0gYW5kIHVzZXJzcGFjZSB1dGlsaXRpZXMuXFxuICAxOTpcXHRcXG4gIDIwOlxcdFxcdCAgVGhpcyBtb2R1bGUgYXQgdGhlIG1vbWVudCBvbmx5IHN1cHBvcnRzIGNsaWVudCBvcGVyYXRpb25zIGFuZCBpc1xcbiAgMjE6XFx0XFx0ICBjdXJyZW50bHkgaW5jb21wbGV0ZS5cXG4gIDIyOlxcdFxcbiAgMjM6XFx0XFx0ICBTZWUgRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3J4cnBjLnJzdC5cXG4gIDI0OlxcdFxcbiAgMjU6XFx0aWYgQUZfUlhSUENcXG4gIDI2OlxcdFxcbiAgMjc6XFx0Y29uZmlnIEFGX1JYUlBDX0lQVjZcXG4gIDI4OlxcdFxcdGJvb2wgXFxcIklQdjYgc3VwcG9ydCBmb3IgUnhSUENcXFwiXFxuICAyOTpcXHRcXHRkZXBlbmRzIG9uIElQVjZcXG4gIDMwOlxcdFxcdGhlbHBcXG4gIDMxOlxcdFxcdCAgU2F5IFkgaGVyZSB0byBhbGxvdyBBRl9SWFJQQyB0byB1c2UgSVBWNiBVRFAgYXMgd2VsbCBhcyBJUFY0IFVEUCBhc1xcbiAgMzI6XFx0XFx0ICBpdHMgbmV0d29yayB0cmFuc3BvcnQuXFxuICAzMzpcXHRcXG4gIDM0OlxcdGNvbmZpZyBBRl9SWFJQQ19JTkpFQ1RfTE9TU1xcbiAgMzU6XFx0XFx0Ym9vbCBcXFwiSW5qZWN0IHBhY2tldCBsb3NzIGludG8gUnhSUEMgcGFja2V0IHN0cmVhbVxcXCJcXG4gIDM2OlxcdFxcdGhlbHBcXG4gIDM3OlxcdFxcdCAgU2F5IFkgaGVyZSB0byBpbmplY3QgcGFja2V0IGxvc3MgYnkgZGlzY2FyZGluZyBzb21lIHJlY2VpdmVkIGFuZCBzb21lXFxuICAzODpcXHRcXHQgIHRyYW5zbWl0dGVkIHBhY2tldHMuXFxuICAzOTpcXHRcXG4gIDQwOlxcdGNvbmZpZyBBRl9SWFJQQ19JTkpFQ1RfUlhfREVMQVlcXG4gIDQxOlxcdFxcdGJvb2wgXFxcIkluamVjdCBkZWxheSBpbnRvIHBhY2tldCByZWNlcHRpb25cXFwiXFxuICA0MjpcXHRcXHRkZXBlbmRzIG9uIFNZU0NUTFxcbiAgNDM6XFx0XFx0aGVscFxcbiAgNDQ6XFx0XFx0ICBTYXkgWSBoZXJlIHRvIGluamVjdCBhIGRlbGF5IGludG8gcGFja2V0IHJlY2VwdGlvbiwgYWxsb3dpbmcgYW5cXG4gIDQ1OlxcdFxcdCAgZXh0ZW5kZWQgUlRUIHRpbWUgdG8gYmUgbW9kZWxsZWQuICBUaGUgZGVsYXkgY2FuIGJlIGNvbmZpZ3VyZWQgdXNpbmdcXG4gIDQ2OlxcdFxcdCAgL3Byb2Mvc3lzL25ldC9yeHJwYy9yeHJwY19pbmplY3RfcnhfZGVsYXksIHNldHRpbmcgYSBudW1iZXIgb2ZcXG4gIDQ3OlxcdFxcdCAgbWlsbGlzZWNvbmRzIHVwIHRvIDAuNXMgKG5vdGUgdGhhdCB0aGUgZ3JhbnVsYXJpdHkgaXMgYWN0dWFsbHkgaW5cXG4gIDQ4OlxcdFxcdCAgamlmZmllcykuXFxuICA0OTpcXHRcXG4gIDUwOlxcdGNvbmZpZyBBRl9SWFJQQ19ERUJVR1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwMjo1OToyMi45MzU1MDY0NDZaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMDI5MzY5MzY2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYW5hbHlzaXMgb2YgdGhlIHNpdHVhdGlvbiwgcHJlc2VudGVkIGZyb20gbXkgcGVyc3BlY3RpdmUgYXMgYW4gZXhwZXJ0OlxuXG4qKkRpdmluZyBpbnRvIHRoZSBSeFJQQyBOZXR3b3JrIENvZGUqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBpbm5lciB3b3JraW5ncyBvZiBSeFJQQydzIG5ldHdvcmsgbmFtZXNwYWNlIGFuZCBwZWVyIG9iamVjdCBtYW5hZ2VtZW50LiBJIHNob3VsZCBzdGFydCBieSBkaWdnaW5nIGludG8gYG5ldC9yeHJwYy9uZXRfbnMuY2AgYW5kIGBuZXQvcnhycGMvcGVlcl9vYmplY3QuY2AuIFRob3NlIGZpbGVzIHNob3VsZCBjb250YWluIHRoZSBjb3JlIGltcGxlbWVudGF0aW9ucyBmb3IgaG93IFJ4UlBDIGludGVyYWN0cyB3aXRoIHRoZSBuZXR3b3JrIG5hbWVzcGFjZSBpbmZyYXN0cnVjdHVyZSBhbmQgaG93IGl0IGhhbmRsZXMgcGVlciBjb25uZWN0aW9ucyBhbmQgYXNzb2NpYXRlZCBkYXRhLiBJIGV4cGVjdCB0byBmaW5kIHRoZSBjcnVjaWFsIGRhdGEgc3RydWN0dXJlcyBhbmQgZnVuY3Rpb25zIHRoYXQgZ292ZXJuIHNvY2tldCBjcmVhdGlvbiwgYWRkcmVzcyBiaW5kaW5nLCBjb25uZWN0aW9uIGVzdGFibGlzaG1lbnQsIGFuZCBwZWVyIHRyYWNraW5nIHRoZXJlLiBNeSBnb2FsIGlzIHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIGVsZW1lbnRzIGludGVycmVsYXRlIGFuZCBob3cgdGhlIFJ4UlBDIHByb3RvY29sIGxldmVyYWdlcyB0aGUgdW5kZXJseWluZyBuZXR3b3JrIHN0YWNrLiBJJ20gZXNwZWNpYWxseSBpbnRlcmVzdGVkIGluIGNvbmN1cnJlbmN5IGNvbnNpZGVyYXRpb25zIGFuZCBwb3RlbnRpYWwgYm90dGxlbmVja3Mgd2l0aGluIHRoZXNlIHBhcnRzIG9mIHRoZSBjb2RlLiBUaGlzIHdpbGwgYmUgdGhlIGZvdW5kYXRpb24gdG8gc2VlIGFib3V0IHRoZSBuZXR3b3JrIG5hbWVzcGFjZSBpbnRlcmFjdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTEwNTIsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDAyOjU5OjI0Ljk2NDg3OTE0MVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg3NzYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9yeHJwYy9uZXRfbnMuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA5MCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICA5MDpcXHRcXHRcXHRcXHRzaXplb2Yoc3RydWN0IHNlcV9uZXRfcHJpdmF0ZSkpO1xcbiAgOTE6XFx0XFx0cHJvY19jcmVhdGVfbmV0X3NpbmdsZV93cml0ZShcXFwic3RhdHNcXFwiLCBTX0lGUkVHIHwgMDY0NCwgcnhuZXQtXFx1MDAzZXByb2NfbmV0LFxcbiAgOTI6XFx0XFx0XFx0XFx0XFx0ICAgICByeHJwY19zdGF0c19zaG93LCByeHJwY19zdGF0c19jbGVhciwgTlVMTCk7XFxuICA5MzpcXHRcXHRyZXR1cm4gMDtcXG4gIDk0OlxcdFxcbiAgOTU6XFx0ZXJyX3Byb2M6XFxuICA5NjpcXHRcXHRyeG5ldC1cXHUwMDNlbGl2ZSA9IGZhbHNlO1xcbiAgOTc6XFx0XFx0cmV0dXJuIHJldDtcXG4gIDk4OlxcdH1cXG4gIDk5OlxcdFxcbiAxMDA6XFx0c3RhdGljIF9fbmV0X2V4aXQgdm9pZCByeHJwY19wcmVfZXhpdF9uZXQoc3RydWN0IG5ldCAqbmV0KVxcbiAxMDE6XFx0e1xcbiAxMDI6XFx0XFx0c3RydWN0IHJ4cnBjX25ldCAqcnhuZXQgPSByeHJwY19uZXQobmV0KTtcXG4gMTAzOlxcdFxcbiAxMDQ6XFx0XFx0cnhuZXQtXFx1MDAzZWxpdmUgPSBmYWxzZTtcXG4gMTA1OlxcdFxcdHRpbWVyX2RlbGV0ZV9zeW5jKFxcdTAwMjZyeG5ldC1cXHUwMDNlcGVlcl9rZWVwYWxpdmVfdGltZXIpO1xcbiAxMDY6XFx0XFx0Y2FuY2VsX3dvcmtfc3luYyhcXHUwMDI2cnhuZXQtXFx1MDAzZXBlZXJfa2VlcGFsaXZlX3dvcmspO1xcbiAxMDc6XFx0XFx0LyogUmVtb3ZlIHRoZSB0aW1lciBhZ2FpbiBhcyB0aGUgd29ya2VyIG1heSBoYXZlIHJlc3RhcnRlZCBpdC4gKi9cXG4gMTA4OlxcdFxcdHRpbWVyX2RlbGV0ZV9zeW5jKFxcdTAwMjZyeG5ldC1cXHUwMDNlcGVlcl9rZWVwYWxpdmVfdGltZXIpO1xcbiAxMDk6XFx0XFx0cnhycGNfZGVzdHJveV9hbGxfY2FsbHMocnhuZXQpO1xcbiAxMTA6XFx0XFx0cnhycGNfZGVzdHJveV9hbGxfY29ubmVjdGlvbnMocnhuZXQpO1xcbiAxMTE6XFx0fVxcbiAxMTI6XFx0XFxuIDExMzpcXHQvKlxcbiAxMTQ6XFx0ICogQ2xlYW4gdXAgYSBwZXItbmV0d29yayBuYW1lc3BhY2UgcmVjb3JkLlxcbiAxMTU6XFx0ICovXFxuIDExNjpcXHRzdGF0aWMgX19uZXRfZXhpdCB2b2lkIHJ4cnBjX2V4aXRfbmV0KHN0cnVjdCBuZXQgKm5ldClcXG4gMTE3OlxcdHtcXG4gMTE4OlxcdFxcdHN0cnVjdCByeHJwY19uZXQgKnJ4bmV0ID0gcnhycGNfbmV0KG5ldCk7XFxuIDExOTpcXHRcXG4gMTIwOlxcdFxcdHJ4cnBjX2Rlc3Ryb3lfYWxsX3BlZXJzKHJ4bmV0KTtcXG4gMTIxOlxcdFxcdHJ4cnBjX2Rlc3Ryb3lfYWxsX2xvY2FscyhyeG5ldCk7XFxuIDEyMjpcXHRcXHRwcm9jX3JlbW92ZShyeG5ldC1cXHUwMDNlcHJvY19uZXQpO1xcbiAxMjM6XFx0fVxcbiAxMjQ6XFx0XFxuIDEyNTpcXHRzdHJ1Y3QgcGVybmV0X29wZXJhdGlvbnMgcnhycGNfbmV0X29wcyA9IHtcXG4gMTI2OlxcdFxcdC5pbml0XFx0XFx0PSByeHJwY19pbml0X25ldCxcXG4gMTI3OlxcdFxcdC5wcmVfZXhpdFxcdD0gcnhycGNfcHJlX2V4aXRfbmV0LFxcbiAxMjg6XFx0XFx0LmV4aXRcXHRcXHQ9IHJ4cnBjX2V4aXRfbmV0LFxcbiAxMjk6XFx0XFx0LmlkXFx0XFx0PSBcXHUwMDI2cnhycGNfbmV0X2lkLFxcbiAxMzA6XFx0XFx0LnNpemVcXHRcXHQ9IHNpemVvZihzdHJ1Y3QgcnhycGNfbmV0KSxcXG4gMTMxOlxcdH07XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDAyOjU5OjI0Ljk2NDk2ODYwMVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE5OTUwNzIyMzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOlxuXG4qKlBlZXJpbmcgRGVlcGVyIGludG8gUGVlciBPYmplY3RzKipcblxuT2theSwgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJ20gbm90IG1pc3NpbmcgYW55dGhpbmcgY3J1Y2lhbCwgZXNwZWNpYWxseSB3aGVuIGRlYWxpbmcgd2l0aCB0aGUgY29yZSBuZXR3b3JrIGludGVyYWN0aW9ucy4gV2hpbGUgSSd2ZSBmb2N1c2VkIG9uIFggYW5kIFksIG15IGd1dCBmZWVsaW5nIHRlbGxzIG1lIHRvIGJyb2FkZW4gdGhlIHNjb3BlIGEgYml0LiBMZXQncyBkaWcgaW50byBgbmV0L3J4cnBjL3BlZXJfb2JqZWN0LmNgLiBJdCdzIGEga2V5IHBpZWNlIG9mIHRoZSBwdXp6bGUsIGFuZCBJIG5lZWQgdG8gZW5zdXJlIHRoYXQgdGhlIGxvZ2ljIHdpdGhpbiB0aGF0IG1vZHVsZSBwbGF5cyBuaWNlIHdpdGggdGhlIG90aGVyIGFyZWFzIEknbSBpbnZlc3RpZ2F0aW5nLiBJIHdhbnQgYSBjb21wcmVoZW5zaXZlIHVuZGVyc3RhbmRpbmcsIGFuZCB0aGlzIHNwZWNpZmljIGZpbGUgc2VlbXMgbGlrZSBhIGdvb2QgbmV4dCBzdGVwIGluIGFjaGlldmluZyB0aGF0LiBMZXQncyBzZWUgd2hhdCdzIGhhcHBlbmluZyB0aGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE5NzIsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDAyOjU5OjI2Ljk2MDA0NDMxM1oiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTM1ODksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3J4cnBjL3BlZXJfb2JqZWN0LmNcIixcbiAgXCJGaXJzdExpbmVcIjogNDQwLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNDQwOlxcdFxcdGlmIChwZWVyKSB7XFxuIDQ0MTpcXHRcXHRcXHRkZWJ1Z19pZCA9IHBlZXItXFx1MDAzZWRlYnVnX2lkO1xcbiA0NDI6XFx0XFx0XFx0ZGVhZCA9IF9fcmVmY291bnRfZGVjX2FuZF90ZXN0KFxcdTAwMjZwZWVyLVxcdTAwM2VyZWYsIFxcdTAwMjZyKTtcXG4gNDQzOlxcdFxcdFxcdHRyYWNlX3J4cnBjX3BlZXIoZGVidWdfaWQsIHIgLSAxLCB3aHkpO1xcbiA0NDQ6XFx0XFx0XFx0aWYgKGRlYWQpXFxuIDQ0NTpcXHRcXHRcXHRcXHRfX3J4cnBjX3B1dF9wZWVyKHBlZXIpO1xcbiA0NDY6XFx0XFx0fVxcbiA0NDc6XFx0fVxcbiA0NDg6XFx0XFxuIDQ0OTpcXHQvKlxcbiA0NTA6XFx0ICogTWFrZSBzdXJlIGFsbCBwZWVyIHJlY29yZHMgaGF2ZSBiZWVuIGRpc2NhcmRlZC5cXG4gNDUxOlxcdCAqL1xcbiA0NTI6XFx0dm9pZCByeHJwY19kZXN0cm95X2FsbF9wZWVycyhzdHJ1Y3QgcnhycGNfbmV0ICpyeG5ldClcXG4gNDUzOlxcdHtcXG4gNDU0OlxcdFxcdHN0cnVjdCByeHJwY19wZWVyICpwZWVyO1xcbiA0NTU6XFx0XFx0aW50IGk7XFxuIDQ1NjpcXHRcXG4gNDU3OlxcdFxcdC8qXFxuIDQ1ODpcXHRcXHQgKiBQcmV2ZW50IHVzZS1hZnRlci1mcmVlIGlmIGEgcGVlciBpcyBjb25jdXJyZW50bHkgdW5saW5rZWQgZnJvbSB0aGVcXG4gNDU5OlxcdFxcdCAqIGhhc2ggdGFibGUgYW5kIGZyZWVkIHZpYSBSQ1UgZHVyaW5nIGl0ZXJhdGlvbi5cXG4gNDYwOlxcdFxcdCAqL1xcbiA0NjE6XFx0XFx0c3Bpbl9sb2NrX2JoKFxcdTAwMjZyeG5ldC1cXHUwMDNlcGVlcl9oYXNoX2xvY2spO1xcbiA0NjI6XFx0XFxuIDQ2MzpcXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgSEFTSF9TSVpFKHJ4bmV0LVxcdTAwM2VwZWVyX2hhc2gpOyBpKyspIHtcXG4gNDY0OlxcdFxcdFxcdGlmIChobGlzdF9lbXB0eShcXHUwMDI2cnhuZXQtXFx1MDAzZXBlZXJfaGFzaFtpXSkpXFxuIDQ2NTpcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4gNDY2OlxcdFxcbiA0Njc6XFx0XFx0XFx0aGxpc3RfZm9yX2VhY2hfZW50cnkocGVlciwgXFx1MDAyNnJ4bmV0LVxcdTAwM2VwZWVyX2hhc2hbaV0sIGhhc2hfbGluaykge1xcbiA0Njg6XFx0XFx0XFx0XFx0cHJfZXJyKFxcXCJMZWFrZWQgcGVlciAleCB7JXV9ICVwSVNwXFxcXG5cXFwiLFxcbiA0Njk6XFx0XFx0XFx0XFx0ICAgICAgIHBlZXItXFx1MDAzZWRlYnVnX2lkLFxcbiA0NzA6XFx0XFx0XFx0XFx0ICAgICAgIHJlZmNvdW50X3JlYWQoXFx1MDAyNnBlZXItXFx1MDAzZXJlZiksXFxuIDQ3MTpcXHRcXHRcXHRcXHQgICAgICAgXFx1MDAyNnBlZXItXFx1MDAzZXNyeC50cmFuc3BvcnQpO1xcbiA0NzI6XFx0XFx0XFx0fVxcbiA0NzM6XFx0XFx0fVxcbiA0NzQ6XFx0XFxuIDQ3NTpcXHRcXHRzcGluX3VubG9ja19iaChcXHUwMDI2cnhuZXQtXFx1MDAzZXBlZXJfaGFzaF9sb2NrKTtcXG4gNDc2OlxcdH1cXG4gNDc3OlxcdFxcbiA0Nzg6XFx0LyoqXFxuIDQ3OTpcXHQgKiByeHJwY19rZXJuZWxfZ2V0X2NhbGxfcGVlciAtIEdldCB0aGUgcGVlciBhZGRyZXNzIG9mIGEgY2FsbFxcbiA0ODA6XFx0ICogQHNvY2s6IFRoZSBzb2NrZXQgb24gd2hpY2ggdGhlIGNhbGwgaXMgaW4gcHJvZ3Jlc3MuXFxuIDQ4MTpcXHQgKiBAY2FsbDogVGhlIGNhbGwgdG8gcXVlcnlcXG4gNDgyOlxcdCAqXFxuIDQ4MzpcXHQgKiBHZXQgYSByZWNvcmQgZm9yIHRoZSByZW1vdGUgcGVlciBpbiBhIGNhbGwuXFxuIDQ4NDpcXHQgKlxcbiA0ODU6XFx0ICogUmV0dXJuOiBUaGUgY2FsbCdzIHBlZXIgcmVjb3JkLlxcbiA0ODY6XFx0ICovXFxuIDQ4NzpcXHRzdHJ1Y3QgcnhycGNfcGVlciAqcnhycGNfa2VybmVsX2dldF9jYWxsX3BlZXIoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHJ4cnBjX2NhbGwgKmNhbGwpXFxuIDQ4ODpcXHR7XFxuIDQ4OTpcXHRcXHRyZXR1cm4gcnhycGNfZ2V0X3BlZXIoY2FsbC1cXHUwMDNlcGVlciwgcnhycGNfcGVlcl9nZXRfYXBwbGljYXRpb24pO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwMjo1OToyNi45NjAyMDI0MTNaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTcyNjAzMzA2NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKipOYXZpZ2F0aW5nIHRoZSBDb2RlYmFzZSoqXG5cbk9rYXksIGhlcmUncyB0aGUgc2l0dWF0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIGNoYW5nZSwgdGhpcyBwYXJ0aWN1bGFyIGNvbW1pdCwgcmVhbGx5IHF1aWNrbHkuIFRoZSBmaXJzdCB0aGluZyBJIGFsd2F5cyBkbyBpcyB0cmFjZSBiYWNrIHRoZSBjb250ZXh0LiBXaGF0IHdhcyB0aGUgKmludGVudCogYmVoaW5kIHRoaXMgY29kZT8gSSBuZWVkIHRvIGpvZyBteSBtZW1vcnksIGFuZCBvZnRlbiB0aGUgYmVzdCBwbGFjZSB0byBzdGFydCBpcyB0aGUgY29tbWl0IG1lc3NhZ2UuIFwiR2l0IGxvZ1wiIGlzIHRoZSBnby10byB0b29sIGZvciB0aGF0LCBpdCdzIG15IGZpcnN0IHN0b3AgdG8gZ2V0IGEgaGlnaC1sZXZlbCBvdmVydmlldy4gRnJvbSB0aGUgY29tbWl0IG1lc3NhZ2UgSSBjYW4gdGhlbiBkZWR1Y2Ugd2hhdCBwcm9ibGVtcyB0aGUgY29kZSBhaW1zIHRvIHNvbHZlLCB3aGF0IGRlc2lnbiBkZWNpc2lvbnMgd2VyZSBpbiBwbGF5LCBvciBhbnkgb3RoZXIgcGVydGluZW50IGluZm9ybWF0aW9uLiBJdCBnaXZlcyBtZSBhIHN0YXJ0aW5nIHBvaW50IGZyb20gd2hpY2ggdG8gYW5hbHl6ZSB0aGlzIHNwZWNpZmljIHBpZWNlIG9mIHRoZSBjb2RlYmFzZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI5NDMsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDAyOjU5OjI4LjY4NjIzOTQzNloiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTMxNjI1OTA5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInBlZXJfaGFzaF9sb2NrXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9yeHJwY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvcnhycGMvYXItaW50ZXJuYWwuaD04Nj1zdHJ1Y3QgcnhycGNfbmV0IHtcXG4tLVxcbm5ldC9yeHJwYy9hci1pbnRlcm5hbC5oLTEwOC1cXHRERUNMQVJFX0hBU0hUQUJMRVxcdChwZWVyX2hhc2gsIDEwKTtcXG5uZXQvcnhycGMvYXItaW50ZXJuYWwuaDoxMDk6XFx0c3BpbmxvY2tfdFxcdFxcdHBlZXJfaGFzaF9sb2NrO1xcdC8qIExvY2sgZm9yIC1cXHUwMDNlcGVlcl9oYXNoICovXFxubmV0L3J4cnBjL2FyLWludGVybmFsLmgtMTEwLVxcbi0tXFxubmV0L3J4cnBjL25ldF9ucy5jPTM0PXN0YXRpYyBfX25ldF9pbml0IGludCByeHJwY19pbml0X25ldChzdHJ1Y3QgbmV0ICpuZXQpXFxuLS1cXG5uZXQvcnhycGMvbmV0X25zLmMtNjItXFx0aGFzaF9pbml0KHJ4bmV0LVxcdTAwM2VwZWVyX2hhc2gpO1xcbm5ldC9yeHJwYy9uZXRfbnMuYzo2MzpcXHRzcGluX2xvY2tfaW5pdChcXHUwMDI2cnhuZXQtXFx1MDAzZXBlZXJfaGFzaF9sb2NrKTtcXG5uZXQvcnhycGMvbmV0X25zLmMtNjQtXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIEFSUkFZX1NJWkUocnhuZXQtXFx1MDAzZXBlZXJfa2VlcGFsaXZlKTsgaSsrKVxcbi0tXFxubmV0L3J4cnBjL3BlZXJfZXZlbnQuYz0yNTg9c3RhdGljIHZvaWQgcnhycGNfcGVlcl9rZWVwYWxpdmVfZGlzcGF0Y2goc3RydWN0IHJ4cnBjX25ldCAqcnhuZXQsXFxuLS1cXG5uZXQvcnhycGMvcGVlcl9ldmVudC5jLTI2OC1cXG5uZXQvcnhycGMvcGVlcl9ldmVudC5jOjI2OTpcXHRzcGluX2xvY2tfYmgoXFx1MDAyNnJ4bmV0LVxcdTAwM2VwZWVyX2hhc2hfbG9jayk7XFxubmV0L3J4cnBjL3BlZXJfZXZlbnQuYy0yNzAtXFxuLS1cXG5uZXQvcnhycGMvcGVlcl9ldmVudC5jLTI3OS1cXHRcXHR1c2UgPSBfX3J4cnBjX3VzZV9sb2NhbChwZWVyLVxcdTAwM2Vsb2NhbCwgcnhycGNfbG9jYWxfdXNlX3BlZXJfa2VlcGFsaXZlKTtcXG5uZXQvcnhycGMvcGVlcl9ldmVudC5jOjI4MDpcXHRcXHRzcGluX3VubG9ja19iaChcXHUwMDI2cnhuZXQtXFx1MDAzZXBlZXJfaGFzaF9sb2NrKTtcXG5uZXQvcnhycGMvcGVlcl9ldmVudC5jLTI4MS1cXG4tLVxcbm5ldC9yeHJwYy9wZWVyX2V2ZW50LmMtMjk5LVxcdFxcdFxcdHNsb3QgXFx1MDAyNj0gbWFzaztcXG5uZXQvcnhycGMvcGVlcl9ldmVudC5jOjMwMDpcXHRcXHRcXHRzcGluX2xvY2tfYmgoXFx1MDAyNnJ4bmV0LVxcdTAwM2VwZWVyX2hhc2hfbG9jayk7XFxubmV0L3J4cnBjL3BlZXJfZXZlbnQuYy0zMDEtXFx0XFx0XFx0bGlzdF9hZGRfdGFpbChcXHUwMDI2cGVlci1cXHUwMDNla2VlcGFsaXZlX2xpbmssXFxubmV0L3J4cnBjL3BlZXJfZXZlbnQuYy0zMDItXFx0XFx0XFx0XFx0ICAgICAgXFx1MDAyNnJ4bmV0LVxcdTAwM2VwZWVyX2tlZXBhbGl2ZVtzbG90IFxcdTAwMjYgbWFza10pO1xcbm5ldC9yeHJwYy9wZWVyX2V2ZW50LmM6MzAzOlxcdFxcdFxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZyeG5ldC1cXHUwMDNlcGVlcl9oYXNoX2xvY2spO1xcbm5ldC9yeHJwYy9wZWVyX2V2ZW50LmMtMzA0LVxcdFxcdFxcdHJ4cnBjX3VudXNlX2xvY2FsKHBlZXItXFx1MDAzZWxvY2FsLCByeHJwY19sb2NhbF91bnVzZV9wZWVyX2tlZXBhbGl2ZSk7XFxuLS1cXG5uZXQvcnhycGMvcGVlcl9ldmVudC5jLTMwNi1cXHRcXHRyeHJwY19wdXRfcGVlcihwZWVyLCByeHJwY19wZWVyX3B1dF9rZWVwYWxpdmUpO1xcbm5ldC9yeHJwYy9wZWVyX2V2ZW50LmM6MzA3OlxcdFxcdHNwaW5fbG9ja19iaChcXHUwMDI2cnhuZXQtXFx1MDAzZXBlZXJfaGFzaF9sb2NrKTtcXG5uZXQvcnhycGMvcGVlcl9ldmVudC5jLTMwOC1cXHR9XFxubmV0L3J4cnBjL3BlZXJfZXZlbnQuYy0zMDktXFxubmV0L3J4cnBjL3BlZXJfZXZlbnQuYzozMTA6XFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNnJ4bmV0LVxcdTAwM2VwZWVyX2hhc2hfbG9jayk7XFxubmV0L3J4cnBjL3BlZXJfZXZlbnQuYy0zMTEtfVxcbi0tXFxubmV0L3J4cnBjL3BlZXJfZXZlbnQuYz0zMTY9dm9pZCByeHJwY19wZWVyX2tlZXBhbGl2ZV93b3JrZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbi0tXFxubmV0L3J4cnBjL3BlZXJfZXZlbnQuYy0zMzktXFx0ICovXFxubmV0L3J4cnBjL3BlZXJfZXZlbnQuYzozNDA6XFx0c3Bpbl9sb2NrX2JoKFxcdTAwMjZyeG5ldC1cXHUwMDNlcGVlcl9oYXNoX2xvY2spO1xcbm5ldC9yeHJwYy9wZWVyX2V2ZW50LmMtMzQxLVxcdGxpc3Rfc3BsaWNlX2luaXQoXFx1MDAyNnJ4bmV0LVxcdTAwM2VwZWVyX2tlZXBhbGl2ZV9uZXcsIFxcdTAwMjZjb2xsZWN0b3IpO1xcbi0tXFxubmV0L3J4cnBjL3BlZXJfZXZlbnQuYy0zNTEtXFx0YmFzZSA9IG5vdztcXG5uZXQvcnhycGMvcGVlcl9ldmVudC5jOjM1MjpcXHRzcGluX3VubG9ja19iaChcXHUwMDI2cnhuZXQtXFx1MDAzZXBlZXJfaGFzaF9sb2NrKTtcXG5uZXQvcnhycGMvcGVlcl9ldmVudC5jLTM1My1cXG4tLVxcbm5ldC9yeHJwYy9wZWVyX29iamVjdC5jPTMxNz12b2lkIHJ4cnBjX25ld19pbmNvbWluZ19wZWVyKHN0cnVjdCByeHJwY19sb2NhbCAqbG9jYWwsIHN0cnVjdCByeHJwY19wZWVyICpwZWVyKVxcbi0tXFxubmV0L3J4cnBjL3BlZXJfb2JqZWN0LmMtMzI0LVxcbm5ldC9yeHJwYy9wZWVyX29iamVjdC5jOjMyNTpcXHRzcGluX2xvY2soXFx1MDAyNnJ4bmV0LVxcdTAwM2VwZWVyX2hhc2hfbG9jayk7XFxubmV0L3J4cnBjL3BlZXJfb2JqZWN0LmMtMzI2LVxcdGhhc2hfYWRkX3JjdShyeG5ldC1cXHUwMDNlcGVlcl9oYXNoLCBcXHUwMDI2cGVlci1cXHUwMDNlaGFzaF9saW5rLCBoYXNoX2tleSk7XFxubmV0L3J4cnBjL3BlZXJfb2JqZWN0LmMtMzI3LVxcdGxpc3RfYWRkX3RhaWwoXFx1MDAyNnBlZXItXFx1MDAzZWtlZXBhbGl2ZV9saW5rLCBcXHUwMDI2cnhuZXQtXFx1MDAzZXBlZXJfa2VlcGFsaXZlX25ldyk7XFxubmV0L3J4cnBjL3BlZXJfb2JqZWN0LmM6MzI4OlxcdHNwaW5fdW5sb2NrKFxcdTAwMjZyeG5ldC1cXHUwMDNlcGVlcl9oYXNoX2xvY2spO1xcbm5ldC9yeHJwYy9wZWVyX29iamVjdC5jLTMyOS19XFxuLS1cXG5uZXQvcnhycGMvcGVlcl9vYmplY3QuYz0zMzQ9c3RydWN0IHJ4cnBjX3BlZXIgKnJ4cnBjX2xvb2t1cF9wZWVyKHN0cnVjdCByeHJwY19sb2NhbCAqbG9jYWwsXFxuLS1cXG5uZXQvcnhycGMvcGVlcl9vYmplY3QuYy0zNTktXFxubmV0L3J4cnBjL3BlZXJfb2JqZWN0LmM6MzYwOlxcdFxcdHNwaW5fbG9ja19iaChcXHUwMDI2cnhuZXQtXFx1MDAzZXBlZXJfaGFzaF9sb2NrKTtcXG5uZXQvcnhycGMvcGVlcl9vYmplY3QuYy0zNjEtXFxuLS1cXG5uZXQvcnhycGMvcGVlcl9vYmplY3QuYy0zNzItXFxubmV0L3J4cnBjL3BlZXJfb2JqZWN0LmM6MzczOlxcdFxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZyeG5ldC1cXHUwMDNlcGVlcl9oYXNoX2xvY2spO1xcbm5ldC9yeHJwYy9wZWVyX29iamVjdC5jLTM3NC1cXG4tLVxcbm5ldC9yeHJwYy9wZWVyX29iamVjdC5jPTQxNz1zdGF0aWMgdm9pZCBfX3J4cnBjX3B1dF9wZWVyKHN0cnVjdCByeHJwY19wZWVyICpwZWVyKVxcbi0tXFxubmV0L3J4cnBjL3BlZXJfb2JqZWN0LmMtNDIyLVxcbm5ldC9yeHJwYy9wZWVyX29iamVjdC5jOjQyMzpcXHRzcGluX2xvY2tfYmgoXFx1MDAyNnJ4bmV0LVxcdTAwM2VwZWVyX2hhc2hfbG9jayk7XFxubmV0L3J4cnBjL3BlZXJfb2JqZWN0LmMtNDI0LVxcdGhhc2hfZGVsX3JjdShcXHUwMDI2cGVlci1cXHUwMDNlaGFzaF9saW5rKTtcXG5uZXQvcnhycGMvcGVlcl9vYmplY3QuYy00MjUtXFx0bGlzdF9kZWxfaW5pdChcXHUwMDI2cGVlci1cXHUwMDNla2VlcGFsaXZlX2xpbmspO1xcbm5ldC9yeHJwYy9wZWVyX29iamVjdC5jOjQyNjpcXHRzcGluX3VubG9ja19iaChcXHUwMDI2cnhuZXQtXFx1MDAzZXBlZXJfaGFzaF9sb2NrKTtcXG5uZXQvcnhycGMvcGVlcl9vYmplY3QuYy00MjctXFxuLS1cXG5uZXQvcnhycGMvcGVlcl9vYmplY3QuYz00NTI9dm9pZCByeHJwY19kZXN0cm95X2FsbF9wZWVycyhzdHJ1Y3QgcnhycGNfbmV0ICpyeG5ldClcXG4tLVxcbm5ldC9yeHJwYy9wZWVyX29iamVjdC5jLTQ2MC1cXHQgKi9cXG5uZXQvcnhycGMvcGVlcl9vYmplY3QuYzo0NjE6XFx0c3Bpbl9sb2NrX2JoKFxcdTAwMjZyeG5ldC1cXHUwMDNlcGVlcl9oYXNoX2xvY2spO1xcbm5ldC9yeHJwYy9wZWVyX29iamVjdC5jLTQ2Mi1cXG4tLVxcbm5ldC9yeHJwYy9wZWVyX29iamVjdC5jLTQ3NC1cXG5uZXQvcnhycGMvcGVlcl9vYmplY3QuYzo0NzU6XFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNnJ4bmV0LVxcdTAwM2VwZWVyX2hhc2hfbG9jayk7XFxubmV0L3J4cnBjL3BlZXJfb2JqZWN0LmMtNDc2LX1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDI6NTk6MjguODE3ODcwOTE1WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjM2ODA4MTQ5MzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIFRoaXMgUGF0Y2ggZm9yIEZ1enppbmcgUG90ZW50aWFsKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBwYXRjaCBkb3duIGZyb20gYSBmdXp6aW5nIHBlcnNwZWN0aXZlLiBJdCdzIHRhcmdldGluZyB0aGUgYG5ldC9yeHJwY2Agc3Vic3lzdGVtLCB3aGljaCBpcyBBRl9SWFJQQywgYSBuZXR3b3JraW5nIHByb3RvY29sLiBGaXJzdCwgYSBzYW5pdHkgY2hlY2s6IGNhbiBzeXprYWxsZXIgZXZlbiByZWFjaCBpdD8gWWVwLCBpdCdzIHNvY2tldC1iYXNlZCAoYHNvY2tldChBRl9SWFJQQywgLi4uKWApIGFuZCBwbGF5cyBuaWNlbHkgd2l0aCBuZXR3b3JrIG5hbWVzcGFjZXMgKGB1bnNoYXJlKENMT05FX05FV05FVClgKSwgYW5kIHN5emthbGxlcidzIGdvdCB0aGUgbmFtZXNwYWNlIGNsZWFudXAgZG93biBwYXQgd2l0aCBgcHJlX2V4aXRgIGFuZCBgZXhpdGAgcm91dGluZXMuXG5cblRoZSBwYXRjaCBpdHNlbGYgaXMgdG91Y2hpbmcgc29tZSBpbnRlcmVzdGluZyBhcmVhczogYHJ4cnBjX3ByZV9leGl0X25ldGAsIGEgbmV3IGBwcmVfZXhpdGAgaGFuZGxlciwgYHJ4cnBjX2V4aXRfbmV0YCwgYW5kIGByeHJwY19kZXN0cm95X2FsbF9wZWVyc2AuIFRoYXQncyBhIHN0cm9uZyBzaWduYWwsIGVzcGVjaWFsbHkgd2hlbiBjb25zaWRlcmluZyBsaWZlY3ljbGUgbWFuYWdlbWVudCB3aXRoaW4gbmV0d29yayBuYW1lc3BhY2VzIGFuZCBzeW5jaHJvbml6YXRpb24gaXNzdWVzIHdpdGhpbiBgcnhycGNfZGVzdHJveV9hbGxfcGVlcnNgLCB3aGljaCBvZnRlbiBsZWFkcyB0byBpbnRlcmVzdGluZyByYWNlIGNvbmRpdGlvbnMuXG5cbk5vdywgYWNjZXNzaWJpbGl0eS4gVGhpcyBpcyBhIGZ1bGx5IHNvZnR3YXJlLWJhc2VkIHByb3RvY29sLCB3aGljaCBtZWFucyBpdCBzaG91bGQgYmUgcmVhY2hhYmxlIGluIFFFTVUgb3IgR0NFIGVudmlyb25tZW50cyDigJMgbm8gaGFyZHdhcmUgZGVwZW5kZW5jaWVzLCB3aGljaCBpcyBncmVhdCBmb3Igb3VyIHB1cnBvc2VzLlxuXG5JcyB0aGlzIHdvcnRoIHRoZSBlZmZvcnQ/IEFic29sdXRlbHkuIENvcmUgbmV0d29ya2luZyBwcm90b2NvbD8gQ2hlY2suIExpZmVjeWNsZSBtYW5hZ2VtZW50IHdpdGhpbiBuZXRucz8gQ2hlY2ssIGFuZCB0aGF0J3Mgb2Z0ZW4gYSB0cmVhc3VyZSB0cm92ZSBmb3IgZmluZGluZyBidWdzLCBsaWtlIG5ldG5zIGV4aXQgYnVncyBhbmQgc29ja2V0IGNsZWFudXAgaXNzdWVzLiBUaGUgdXNlIG9mIGBwcmVfZXhpdGAgaXMgcGFydGljdWxhcmx5IGludGVyZXN0aW5nLlxuXG5CZWZvcmUgd2UgcHJvY2VlZCwgbGV0J3MgcXVpY2tseSBjaGVjayB0aGUgcmVxdWlyZWQgY29uZmlndXJhdGlvbnMuIFdlJ2xsIG5lZWQgYEFGX1JYUlBDYCAoUnhSUEMgc2Vzc2lvbiBzb2NrZXRzLCB3aGljaCBkZXBlbmRzIG9uIGBJTkVUYCkgYW5kIGBJTkVUYCAoc3RhbmRhcmQgSVB2NCBuZXR3b3JraW5nKS4gQW55IG90aGVyIGRlcGVuZGVuY2llcz8gTGV0J3MgcXVpY2tseSBzY2FuIHRoZSBgbmV0L3J4cnBjL01ha2VmaWxlYCB0byBiZSBzdXJlLCBhbmQgbm8gb3RoZXIgY29uZmlncyB3ZXJlIGZvdW5kLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDg5OSwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM5MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwMjo1OTozMi40OTg2ODkwNDdaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA0ODQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9yeHJwYy9NYWtlZmlsZVwiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG4gICAyOlxcdCNcXG4gICAzOlxcdCMgTWFrZWZpbGUgZm9yIExpbnV4IGtlcm5lbCBSeFJQQ1xcbiAgIDQ6XFx0I1xcbiAgIDU6XFx0XFxuICAgNjpcXHRvYmotJChDT05GSUdfQUZfUlhSUEMpICs9IHJ4cnBjLm9cXG4gICA3OlxcdFxcbiAgIDg6XFx0cnhycGMteSA6PSBcXFxcXFxuICAgOTpcXHRcXHRhZl9yeHJwYy5vIFxcXFxcXG4gIDEwOlxcdFxcdGNhbGxfYWNjZXB0Lm8gXFxcXFxcbiAgMTE6XFx0XFx0Y2FsbF9ldmVudC5vIFxcXFxcXG4gIDEyOlxcdFxcdGNhbGxfb2JqZWN0Lm8gXFxcXFxcbiAgMTM6XFx0XFx0Y2FsbF9zdGF0ZS5vIFxcXFxcXG4gIDE0OlxcdFxcdGNvbm5fY2xpZW50Lm8gXFxcXFxcbiAgMTU6XFx0XFx0Y29ubl9ldmVudC5vIFxcXFxcXG4gIDE2OlxcdFxcdGNvbm5fb2JqZWN0Lm8gXFxcXFxcbiAgMTc6XFx0XFx0Y29ubl9zZXJ2aWNlLm8gXFxcXFxcbiAgMTg6XFx0XFx0aW5wdXQubyBcXFxcXFxuICAxOTpcXHRcXHRpbnB1dF9yYWNrLm8gXFxcXFxcbiAgMjA6XFx0XFx0aW5zZWN1cmUubyBcXFxcXFxuICAyMTpcXHRcXHRpb190aHJlYWQubyBcXFxcXFxuICAyMjpcXHRcXHRrZXkubyBcXFxcXFxuICAyMzpcXHRcXHRsb2NhbF9ldmVudC5vIFxcXFxcXG4gIDI0OlxcdFxcdGxvY2FsX29iamVjdC5vIFxcXFxcXG4gIDI1OlxcdFxcdG1pc2MubyBcXFxcXFxuICAyNjpcXHRcXHRuZXRfbnMubyBcXFxcXFxuICAyNzpcXHRcXHRvb2IubyBcXFxcXFxuICAyODpcXHRcXHRvdXRwdXQubyBcXFxcXFxuICAyOTpcXHRcXHRwZWVyX2V2ZW50Lm8gXFxcXFxcbiAgMzA6XFx0XFx0cGVlcl9vYmplY3QubyBcXFxcXFxuICAzMTpcXHRcXHRyZWN2bXNnLm8gXFxcXFxcbiAgMzI6XFx0XFx0cnR0Lm8gXFxcXFxcbiAgMzM6XFx0XFx0c2VjdXJpdHkubyBcXFxcXFxuICAzNDpcXHRcXHRzZW5kbXNnLm8gXFxcXFxcbiAgMzU6XFx0XFx0c2VydmVyX2tleS5vIFxcXFxcXG4gIDM2OlxcdFxcdHNrYnVmZi5vIFxcXFxcXG4gIDM3OlxcdFxcdHR4YnVmLm8gXFxcXFxcbiAgMzg6XFx0XFx0dXRpbHMub1xcbiAgMzk6XFx0XFxuICA0MDpcXHRyeHJwYy0kKENPTkZJR19QUk9DX0ZTKSArPSBwcm9jLm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDI6NTk6MzIuNDk4Nzk1OTk2WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjM0NzUzMDMzNDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIEFGX1JYUlBDIE5ldG5zL1BlZXIgTGlmZWN5Y2xlIGZvciBGb2N1cyBTeW1ib2xzKipcblxuT2theSwgbGV0J3MgemVybyBpbiBvbiB0aGVzZSBmb2N1cyBzeW1ib2xzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wYWN0IG9mIHRoZXNlIG1vZGlmaWNhdGlvbnMuIEZyb20gd2hhdCBJIHNlZSwgdGhlIHByaW1hcnkgZnVuY3Rpb25zIGFmZmVjdGVkIGFyZSBgcnhycGNfcHJlX2V4aXRfbmV0YCwgYHJ4cnBjX2V4aXRfbmV0YCwgYW5kIGByeHJwY19kZXN0cm95X2FsbF9wZWVyc2AuIFRoZXNlIHNlZW0gdG8gYmUgdGhlIGNvcmUgb2YgdGhlIG5ldCBuYW1lc3BhY2UgYW5kIHBlZXIgbGlmZWN5Y2xlIGNoYW5nZXMgd2l0aGluIEFGX1JYUlBDLlxuXG5gcnhycGNfZGVzdHJveV9hbGxfcGVlcnNgIGluIHBhcnRpY3VsYXIgaXMgaW50ZXJlc3RpbmcsIGJlaW5nIG5vbi1zdGF0aWMgaW4gYHBlZXJfb2JqZWN0LmNgIGFuZCBjYWxsZWQgYnkgYHJ4cnBjX2V4aXRfbmV0YC4gIE15IGludHVpdGlvbiB0ZWxscyBtZSB0byBkcmlsbCBkb3duIGZ1cnRoZXIgaW50byB0aGUgcmVsYXRpb25zaGlwcyBhbmQgY2FsbC1ncmFwaCBoZXJlLiAgSSBuZWVkIHRvIHNlZSBpZiBpdCdzIGV4cG9ydGVkIG9yIHVzZWQgZWxzZXdoZXJlLiBUaGVuLCBgcnhycGNfcHJlX2V4aXRfbmV0YCBhbmQgYHJ4cnBjX2V4aXRfbmV0YCBhcmUgc3RhdGljIGZ1bmN0aW9ucyByZWdpc3RlcmVkIHRocm91Z2ggYHJ4cnBjX25ldF9vcHNgIOKAkyB0aGF0IGNvbnRleHQgaXMgaW1wb3J0YW50LlxuXG5JIHNob3VsZCBhbHNvIHF1aWNrbHkgcmV2aWV3IG90aGVyIHJlbGV2YW50IGZ1bmN0aW9ucyB3aXRoaW4gQUZfUlhSUEMsIGxpa2UgYHJ4cnBjX2luaXRfbmV0YCwgYHJ4cnBjX2xvb2t1cF9wZWVyYCwgYF9fcnhycGNfcHV0X3BlZXJgLCBhbmQgYHJ4cnBjX25ld19pbmNvbWluZ19wZWVyYC4gQXJlIGFueSBvZiB0aGVzZSBpbmRpcmVjdGx5IGFmZmVjdGVkIGJ5IHRoZXNlIGNoYW5nZXMsIHBlcmhhcHMgdmlhIGRhdGEgc3RydWN0dXJlcyBvciBzaGFyZWQgcmVzb3VyY2VzP1xuXG5NeSBmb2N1cywgZm9yIHRoaXMgc3BlY2lmaWMgYW5hbHlzaXMsIHJlbWFpbnMgZmlybWx5IG9uIGByeHJwY19kZXN0cm95X2FsbF9wZWVyc2AsIGByeHJwY19leGl0X25ldGAsIGFuZCBgcnhycGNfcHJlX2V4aXRfbmV0YCwgYXMgdGhleSdyZSB0aGUgZGlyZWN0IHRhcmdldHMgYW5kIGVudHJ5IHBvaW50cyBmb3IgdGhpcyBjaGFuZ2VkIGxvZ2ljLiBJIHJlYWxseSBuZWVkIHRvIGNoZWNrIGlmIGByeHJwY19kZXN0cm95X2FsbF9wZWVyc2AgaXMgZGVjbGFyZWQgb3IgdXNlZCBieSBhbnkgaGVhZGVyIGZpbGVzLCBzcGVjaWZpY2FsbHkgaW4gYGFyLWludGVybmFsLmhgLCB0byBnYXVnZSBpdHMgZnVsbCBzY29wZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTYxNjksIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyODIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwMjo1OTozNS45NzQxMDIwNloiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjU2OTAyODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicnhycGNfZGVzdHJveV9hbGxfcGVlcnNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3J4cnBjXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9yeHJwYy9hci1pbnRlcm5hbC5oPTE0MjY9dm9pZCByeHJwY19uZXdfaW5jb21pbmdfcGVlcihzdHJ1Y3QgcnhycGNfbG9jYWwgKmxvY2FsLCBzdHJ1Y3QgcnhycGNfcGVlciAqcGVlcik7XFxubmV0L3J4cnBjL2FyLWludGVybmFsLmg6MTQyNzp2b2lkIHJ4cnBjX2Rlc3Ryb3lfYWxsX3BlZXJzKHN0cnVjdCByeHJwY19uZXQgKik7XFxubmV0L3J4cnBjL2FyLWludGVybmFsLmgtMTQyOC1zdHJ1Y3QgcnhycGNfcGVlciAqcnhycGNfZ2V0X3BlZXIoc3RydWN0IHJ4cnBjX3BlZXIgKiwgZW51bSByeHJwY19wZWVyX3RyYWNlKTtcXG4tLVxcbm5ldC9yeHJwYy9uZXRfbnMuYz0xMTY9c3RhdGljIF9fbmV0X2V4aXQgdm9pZCByeHJwY19leGl0X25ldChzdHJ1Y3QgbmV0ICpuZXQpXFxuLS1cXG5uZXQvcnhycGMvbmV0X25zLmMtMTE5LVxcbm5ldC9yeHJwYy9uZXRfbnMuYzoxMjA6XFx0cnhycGNfZGVzdHJveV9hbGxfcGVlcnMocnhuZXQpO1xcbm5ldC9yeHJwYy9uZXRfbnMuYy0xMjEtXFx0cnhycGNfZGVzdHJveV9hbGxfbG9jYWxzKHJ4bmV0KTtcXG4tLVxcbm5ldC9yeHJwYy9wZWVyX29iamVjdC5jPTQzND12b2lkIHJ4cnBjX3B1dF9wZWVyKHN0cnVjdCByeHJwY19wZWVyICpwZWVyLCBlbnVtIHJ4cnBjX3BlZXJfdHJhY2Ugd2h5KVxcbi0tXFxubmV0L3J4cnBjL3BlZXJfb2JqZWN0LmMtNDUxLSAqL1xcbm5ldC9yeHJwYy9wZWVyX29iamVjdC5jOjQ1Mjp2b2lkIHJ4cnBjX2Rlc3Ryb3lfYWxsX3BlZXJzKHN0cnVjdCByeHJwY19uZXQgKnJ4bmV0KVxcbm5ldC9yeHJwYy9wZWVyX29iamVjdC5jLTQ1My17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDAyOjU5OjM2LjAzOTc5NzM0WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQzNTMyNjMwNjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgUnhSUEMgTmV0d29yayBOYW1lc3BhY2UgSGFuZGxpbmcqKlxuXG5Pa2F5LCBsZXQncyBzZWUsIHdoYXQgd2UndmUgZ290IGhlcmUuIEZpcnN0LCBJIG5lZWQgdG8gY29uZmlybSB0aGUga2V5IHN5bWJvbHMgaW52b2x2ZWQgYW5kIGhvdyB0aGV5IGludGVyYWN0LiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byBrbm93IGFib3V0IGByeHJwY19kZXN0cm95X2FsbF9wZWVyc2AsIGByeHJwY19leGl0X25ldGAsIGFuZCBgcnhycGNfcHJlX2V4aXRfbmV0YC4gVGhlc2UgYXJlIHRoZSBjcnVjaWFsIGhvb2tzLCBzbyBsZXQncyBkb3VibGUtY2hlY2sgdGhlIGNvbmZpZ3MuIFdlJ3JlIGRlYWxpbmcgd2l0aCBgQUZfUlhSUENgIGZvciB0aGUgUnhSUEMgc2Vzc2lvbiBzb2NrZXRzLCB3aGljaCwgb2YgY291cnNlLCByZWxpZXMgb24gYElORVRgLiBBbmQsIG1vc3QgaW1wb3J0YW50bHksIGBORVRfTlNgIGlzIGdvaW5nIHRvIGJlIHBpdm90YWwgYmVjYXVzZSwgZnJvbSB3aGF0IEkga25vdywgcGVybmV0IG9wZXJhdGlvbnMgYXJlIGxpbmtlZCB0byBuZXR3b3JrIG5hbWVzcGFjZSBzdXBwb3J0LlxuXG5Ob3csIGxldCdzIGRyaWxsIGRvd24gYW5kIGNvbmZpcm0gdGhhdCBgQ09ORklHX05FVF9OU2AgaXMgZW5hYmxlZC4gQWgsIHllcywgdGhlcmUgaXQgaXMhIFdpdGhvdXQgYENPTkZJR19ORVRfTlNgLCBgcnhycGNfZXhpdF9uZXRgIHdvdWxkIG9ubHkgZmlyZSBvbiBtb2R1bGUgdW5sb2FkIG9yIHN5c3RlbSBzaHV0ZG93biwgYSBtdWNoIGxlc3MgaW50ZXJlc3Rpbmcgc2NlbmFyaW8uIEhvd2V2ZXIsIHdpdGggYENPTkZJR19ORVRfTlM9eWAsIGl0J3MgY2FsbGVkIGV2ZXJ5IHRpbWUgYSBuZXR3b3JrIG5hbWVzcGFjZSBpcyBkZXN0cm95ZWQuIFRoYXQncyBhIHNpZ25pZmljYW50IGRpZmZlcmVuY2UgYW5kIGRlZmluaXRlbHkgYWxpZ25zIHdpdGggc3l6a2FsbGVyJ3MgdHJpZ2dlci4gVGhlcmVmb3JlLCBpdCBpcyBjbGVhciB0aGF0IHdlIGhhdmUgYSBkZXBlbmRlbmN5IG9uIGBBRl9SWFJQQ2AsIGBJTkVUYCwgYW5kIGBORVRfTlNgLlxuXG5GaW5hbGx5LCBqdXN0IHRvIGJlIGFic29sdXRlbHkgY2VydGFpbiwgbGV0J3MgcnVuIHRocm91Z2ggdGhlc2UgaW5zdHJ1Y3Rpb25zIGFnYWluOlxuXG4qICAgKipXb3J0aEZ1enppbmc6IHRydWUqKiDigJMgT2J2aW91cy4gVGhpcyBtZXJpdHMgZGV0YWlsZWQgaW52ZXN0aWdhdGlvbi5cbiogICAqKkVuYWJsZUNvbmZpZ3M6IFxcW1wiQUZcXF9SWFJQQ1wiLCBcIklORVRcIiwgXCJORVRcXF9OU1wiXFxdKiog4oCTIFllcywgdGhhdCdzIHdoYXQgd2UgbmVlZC5cbiogICAqKkZvY3VzU3ltYm9sczogXFxbXCJyeHJwY1xcX3ByZVxcX2V4aXRcXF9uZXRcIiwgXCJyeHJwY1xcX2V4aXRcXF9uZXRcIiwgXCJyeHJwY1xcX2Rlc3Ryb3lcXF9hbGxcXF9wZWVyc1wiXFxdKiog4oCTIENvbmZpcm1lZC4gVGhlc2Ugc3ltYm9scyBhcmUgdGhlIHByZWNpc2UgcG9pbnRzIG9mIGludGVyZXN0LlxuKiAgICoqUmVhc29uaW5nOiBDb25jaXNlIGV4cGxhbmF0aW9uIG9mIHRoZSB2ZXJkaWN0LioqIOKAkyBHb29kIVxuXG5Pa2F5LCB0aW1lIHRvIHN1Ym1pdCB0aGVzZSBmaW5kaW5ncyB0byBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzIxOCwiT3V0cHV0VG9rZW5zIjoxNzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDI6NTk6NDAuMzkzMDYzMzkzWiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM0MTg3NjQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJBRl9SWFJQQ1wiLFxuICAgIFwiSU5FVFwiLFxuICAgIFwiTkVUX05TXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwicnhycGNfcHJlX2V4aXRfbmV0XCIsXG4gICAgXCJyeHJwY19leGl0X25ldFwiLFxuICAgIFwicnhycGNfZGVzdHJveV9hbGxfcGVlcnNcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgUnhSUEMgbmV0d29yayBuYW1lc3BhY2UgdGVhcmRvd24gbGlmZWN5Y2xlIGJ5IHNwbGl0dGluZyBuZXRucyBjbGVhbnVwIGludG8gcHJlX2V4aXQgYW5kIGV4aXQgaGFuZGxlcnMgKHJ4cnBjX3ByZV9leGl0X25ldCBhbmQgcnhycGNfZXhpdF9uZXQpIGFuZCBhZGRzIGxvY2tpbmcgKHBlZXJfaGFzaF9sb2NrKSBpbiByeHJwY19kZXN0cm95X2FsbF9wZWVycyB0byBwcmV2ZW50IHVzZS1hZnRlci1mcmVlIGNvbmRpdGlvbnMgZHVyaW5nIHBlZXIgaGFzaCB0YWJsZSB0cmF2ZXJzYWwuIFRoZXNlIGNoYW5nZXMgdG91Y2ggcmVhY2hhYmxlIG5ldHdvcmtpbmcgY29kZSB0aGF0IGlzIGV4ZXJjaXNlZCBkdXJpbmcgbmV0bnMgbGlmZWN5Y2xlIGFuZCBBRl9SWFJQQyBzb2NrZXQgb3BlcmF0aW9ucywgbWFraW5nIGl0IHdvcnRod2hpbGUgdG8gZnV6ei5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJBRl9SWFJQQ1wiLFxuICAgIFwiSU5FVFwiLFxuICAgIFwiTkVUX05TXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwicnhycGNfcHJlX2V4aXRfbmV0XCIsXG4gICAgXCJyeHJwY19leGl0X25ldFwiLFxuICAgIFwicnhycGNfZGVzdHJveV9hbGxfcGVlcnNcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgUnhSUEMgbmV0d29yayBuYW1lc3BhY2UgdGVhcmRvd24gbGlmZWN5Y2xlIGJ5IHNwbGl0dGluZyBuZXRucyBjbGVhbnVwIGludG8gcHJlX2V4aXQgYW5kIGV4aXQgaGFuZGxlcnMgKHJ4cnBjX3ByZV9leGl0X25ldCBhbmQgcnhycGNfZXhpdF9uZXQpIGFuZCBhZGRzIGxvY2tpbmcgKHBlZXJfaGFzaF9sb2NrKSBpbiByeHJwY19kZXN0cm95X2FsbF9wZWVycyB0byBwcmV2ZW50IHVzZS1hZnRlci1mcmVlIGNvbmRpdGlvbnMgZHVyaW5nIHBlZXIgaGFzaCB0YWJsZSB0cmF2ZXJzYWwuIFRoZXNlIGNoYW5nZXMgdG91Y2ggcmVhY2hhYmxlIG5ldHdvcmtpbmcgY29kZSB0aGF0IGlzIGV4ZXJjaXNlZCBkdXJpbmcgbmV0bnMgbGlmZWN5Y2xlIGFuZCBBRl9SWFJQQyBzb2NrZXQgb3BlcmF0aW9ucywgbWFraW5nIGl0IHdvcnRod2hpbGUgdG8gZnV6ei5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDI6NTk6NDAuNTI3MjU4MzAyWiIsIlNlcSI6MTksIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTkwNjkxMTA3NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDAyOjU5OjQwLjUyNzY5ODc4MloiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjE5OTA2NDY2MjM1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgcGVybmV0IG5hbWVzcGFjZSBleGl0IGNhbGxiYWNrcyBpbiBBRl9SWFJQQyAoc3BsaXR0aW5nIHRlYXJkb3duIGJldHdlZW4gcHJlX2V4aXQgYW5kIGV4aXQpIGFuZCBhZGRzIHNwaW5sb2NrIHN5bmNocm9uaXphdGlvbiAocGVlcl9oYXNoX2xvY2spIGluIHJ4cnBjX2Rlc3Ryb3lfYWxsX3BlZXJzKCkgdG8gcHJvdGVjdCBhZ2FpbnN0IGNvbmN1cnJlbnQgdW5saW5raW5nIGFuZCB1c2UtYWZ0ZXItZnJlZS5cXG5cXG5ObyBuZXcgbWVtb3J5IGFsbG9jYXRpb25zLCB1bmluaXRpYWxpemVkIHZhcmlhYmxlIHVzZXMsIHVzZXItY29weSBvcGVyYXRpb25zLCBvciBhbHRlcmVkIGRhdGEtcGFyc2luZy9idWZmZXItbGVuZ3RoIGxvZ2ljIGFyZSBpbnRyb2R1Y2VkLiBUaGUgcG90ZW50aWFsIGlzc3VlcyBhZGRyZXNzZWQgb3IgaW50cm9kdWNlZCBieSB0aGlzIHBhdGNoIHJlbGF0ZSBleGNsdXNpdmVseSB0byB0ZWFyZG93biBvcmRlcmluZywgc3luY2hyb25pemF0aW9uLCBsb2NraW5nLCBhbmQgdXNlLWFmdGVyLWZyZWUsIGFsbCBvZiB3aGljaCBhcmUgY292ZXJlZCBieSBzdGFuZGFyZCBzYW5pdGl6ZXJzIChLQVNBTiwgTE9DS0RFUCkuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgZTI1ZDIxOWM5OGQ3NWNmNzY4NDhjMTY5YzFiZjNkZDFmZGFjYzE2MFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgU2VwIDggMDI6NTk6MDggMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvcnhycGMvbmV0X25zLmMgYi9uZXQvcnhycGMvbmV0X25zLmNcbmluZGV4IDlhOTgzNDE0NWU4MWUuLjE2OTExNjczNTM2NjMgMTAwNjQ0XG4tLS0gYS9uZXQvcnhycGMvbmV0X25zLmNcbisrKyBiL25ldC9yeHJwYy9uZXRfbnMuY1xuQEAgLTk3LDEwICs5Nyw3IEBAIHN0YXRpYyBfX25ldF9pbml0IGludCByeHJwY19pbml0X25ldChzdHJ1Y3QgbmV0ICpuZXQpXG4gXHRyZXR1cm4gcmV0O1xuIH1cbiBcbi0vKlxuLSAqIENsZWFuIHVwIGEgcGVyLW5ldHdvcmsgbmFtZXNwYWNlIHJlY29yZC5cbi0gKi9cbi1zdGF0aWMgX19uZXRfZXhpdCB2b2lkIHJ4cnBjX2V4aXRfbmV0KHN0cnVjdCBuZXQgKm5ldClcbitzdGF0aWMgX19uZXRfZXhpdCB2b2lkIHJ4cnBjX3ByZV9leGl0X25ldChzdHJ1Y3QgbmV0ICpuZXQpXG4ge1xuIFx0c3RydWN0IHJ4cnBjX25ldCAqcnhuZXQgPSByeHJwY19uZXQobmV0KTtcbiBcbkBAIC0xMTEsMTQgKzEwOCwyNCBAQCBzdGF0aWMgX19uZXRfZXhpdCB2b2lkIHJ4cnBjX2V4aXRfbmV0KHN0cnVjdCBuZXQgKm5ldClcbiBcdHRpbWVyX2RlbGV0ZV9zeW5jKFx1MDAyNnJ4bmV0LVx1MDAzZXBlZXJfa2VlcGFsaXZlX3RpbWVyKTtcbiBcdHJ4cnBjX2Rlc3Ryb3lfYWxsX2NhbGxzKHJ4bmV0KTtcbiBcdHJ4cnBjX2Rlc3Ryb3lfYWxsX2Nvbm5lY3Rpb25zKHJ4bmV0KTtcbit9XG4rXG4rLypcbisgKiBDbGVhbiB1cCBhIHBlci1uZXR3b3JrIG5hbWVzcGFjZSByZWNvcmQuXG4rICovXG4rc3RhdGljIF9fbmV0X2V4aXQgdm9pZCByeHJwY19leGl0X25ldChzdHJ1Y3QgbmV0ICpuZXQpXG4re1xuK1x0c3RydWN0IHJ4cnBjX25ldCAqcnhuZXQgPSByeHJwY19uZXQobmV0KTtcbitcbiBcdHJ4cnBjX2Rlc3Ryb3lfYWxsX3BlZXJzKHJ4bmV0KTtcbiBcdHJ4cnBjX2Rlc3Ryb3lfYWxsX2xvY2FscyhyeG5ldCk7XG4gXHRwcm9jX3JlbW92ZShyeG5ldC1cdTAwM2Vwcm9jX25ldCk7XG4gfVxuIFxuIHN0cnVjdCBwZXJuZXRfb3BlcmF0aW9ucyByeHJwY19uZXRfb3BzID0ge1xuLVx0LmluaXRcdD0gcnhycGNfaW5pdF9uZXQsXG4tXHQuZXhpdFx0PSByeHJwY19leGl0X25ldCxcbi1cdC5pZFx0PSBcdTAwMjZyeHJwY19uZXRfaWQsXG4tXHQuc2l6ZVx0PSBzaXplb2Yoc3RydWN0IHJ4cnBjX25ldCksXG4rXHQuaW5pdFx0XHQ9IHJ4cnBjX2luaXRfbmV0LFxuK1x0LnByZV9leGl0XHQ9IHJ4cnBjX3ByZV9leGl0X25ldCxcbitcdC5leGl0XHRcdD0gcnhycGNfZXhpdF9uZXQsXG4rXHQuaWRcdFx0PSBcdTAwMjZyeHJwY19uZXRfaWQsXG4rXHQuc2l6ZVx0XHQ9IHNpemVvZihzdHJ1Y3QgcnhycGNfbmV0KSxcbiB9O1xuZGlmZiAtLWdpdCBhL25ldC9yeHJwYy9wZWVyX29iamVjdC5jIGIvbmV0L3J4cnBjL3BlZXJfb2JqZWN0LmNcbmluZGV4IGZhOWE0MDZlMTE2ODMuLmZhYTI5ODM2MzhiMmIgMTAwNjQ0XG4tLS0gYS9uZXQvcnhycGMvcGVlcl9vYmplY3QuY1xuKysrIGIvbmV0L3J4cnBjL3BlZXJfb2JqZWN0LmNcbkBAIC00NTQsNiArNDU0LDEyIEBAIHZvaWQgcnhycGNfZGVzdHJveV9hbGxfcGVlcnMoc3RydWN0IHJ4cnBjX25ldCAqcnhuZXQpXG4gXHRzdHJ1Y3QgcnhycGNfcGVlciAqcGVlcjtcbiBcdGludCBpO1xuIFxuK1x0LypcbitcdCAqIFByZXZlbnQgdXNlLWFmdGVyLWZyZWUgaWYgYSBwZWVyIGlzIGNvbmN1cnJlbnRseSB1bmxpbmtlZCBmcm9tIHRoZVxuK1x0ICogaGFzaCB0YWJsZSBhbmQgZnJlZWQgdmlhIFJDVSBkdXJpbmcgaXRlcmF0aW9uLlxuK1x0ICovXG4rXHRzcGluX2xvY2tfYmgoXHUwMDI2cnhuZXQtXHUwMDNlcGVlcl9oYXNoX2xvY2spO1xuK1xuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgSEFTSF9TSVpFKHJ4bmV0LVx1MDAzZXBlZXJfaGFzaCk7IGkrKykge1xuIFx0XHRpZiAoaGxpc3RfZW1wdHkoXHUwMDI2cnhuZXQtXHUwMDNlcGVlcl9oYXNoW2ldKSlcbiBcdFx0XHRjb250aW51ZTtcbkBAIC00NjUsNiArNDcxLDggQEAgdm9pZCByeHJwY19kZXN0cm95X2FsbF9wZWVycyhzdHJ1Y3QgcnhycGNfbmV0ICpyeG5ldClcbiBcdFx0XHQgICAgICAgXHUwMDI2cGVlci1cdTAwM2VzcngudHJhbnNwb3J0KTtcbiBcdFx0fVxuIFx0fVxuK1xuK1x0c3Bpbl91bmxvY2tfYmgoXHUwMDI2cnhuZXQtXHUwMDNlcGVlcl9oYXNoX2xvY2spO1xuIH1cbiBcbiAvKipcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDAyOjU5OjQwLjUyNzY5OTg2MloiLCJTZXEiOjIxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxNDU5OTEyMTIwNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipLTVNBTiBGdXp6aW5nIFNlc3Npb24gRXZhbHVhdGlvbioqXG5cbk9rYXksIGxldCdzIGFzc2VzcyB3aGV0aGVyIHRoaXMgcGF0Y2ggd2FycmFudHMgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLiBNeSBpbml0aWFsIGltcHJlc3Npb24sIGFmdGVyIHJldmlld2luZyB0aGUgY2hhbmdlcywgaXMgdGhhdCBpdCdzIGxpa2VseSAqbm90KiBhIHN0cm9uZyBjYW5kaWRhdGUuIFRoZSBwYXRjaCB0b3VjaGVzIGBuZXQvcnhycGMvbmV0X25zLmNgIGFuZCBgbmV0L3J4cnBjL3BlZXJfb2JqZWN0LmNgLiBJIHNlZSB0aGF0IGByeHJwY19leGl0X25ldGAgaGFzIGJlZW4gc3BsaXQgaW50byBgcnhycGNfcHJlX2V4aXRfbmV0YCBhbmQgYHJ4cnBjX2V4aXRfbmV0YCwgYSBjbGVhciBzaWduYWwgdGhhdCB0aGVyZSdzIGJlZW4gYXR0ZW50aW9uIHBhaWQgdG8gdGhlIHRlYXJkb3duIHNlcXVlbmNlLiBTcGVjaWZpY2FsbHksIGByeHJwY19wcmVfZXhpdF9uZXRgIG5vdyBoYW5kbGVzIHRoZSBtb3JlIGltbWVkaWF0ZSBjbGVhbnVwIHRhc2tzIGxpa2Ugc2V0dGluZyBgbGl2ZSA9IGZhbHNlYCwga2lsbGluZyB0aW1lcnMsIGFuZCBkZXN0cm95aW5nIGNhbGxzIGFuZCBjb25uZWN0aW9ucywgYmVmb3JlIGByeHJwY19leGl0X25ldGAgZGVhbHMgd2l0aCBwZWVycywgbG9jYWxzLCBhbmQgcHJvYyBlbnRyaWVzLiBUaGlzIGlzIHJlZ2lzdGVyZWQgdmlhIHRoZSBgcGVybmV0X29wZXJhdGlvbnNgIHN0cnVjdC5cblxuRnVydGhlcm1vcmUsIHdpdGhpbiBgcnhycGNfZGVzdHJveV9hbGxfcGVlcnNgLCBJJ3ZlIG9ic2VydmVkIHRoZSBhZGRpdGlvbiBvZiBgc3Bpbl9sb2NrX2JoYCBjYWxscyBhcm91bmQgdGhlIGhhc2ggdGFibGUgaXRlcmF0aW9uLiBUaGlzIGluZGljYXRlcyBhIGNvbmNlcm4gYWJvdXQgY29uY3VycmVudCBhY2Nlc3MgYW5kIHBvdGVudGlhbCB1c2UtYWZ0ZXItZnJlZSBzY2VuYXJpb3MgZHVyaW5nIHBlZXIgdW5saW5raW5nLiBQcmVjaXNlbHkgdGhlIGtpbmQgb2Ygc2NlbmFyaW8gdGhhdCBLQVNBTiBhbmQgTE9DS0RFUCB3b3VsZCBsb3ZlIHRvIGZpbmQgcHJvYmxlbXMgd2l0aCFcblxuTm93LCB0aGUgaW1wb3J0YW50IHBhcnQ6IEtNU0FOIHRhcmdldHMgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNlLiBMb29raW5nIG92ZXIgdGhlIHBhdGNoIGRldGFpbHMgSSBzZWU6IG5vIG5ldyBtZW1vcnkgYWxsb2NhdGlvbnMsIG5vIGNvcHlpbmcgdG8gdXNlcnNwYWNlICh3aGljaCBJJ2QgYmUgZXNwZWNpYWxseSB3YXJ5IG9mKSwgbm8gZGlyZWN0IGFjY2Vzc2VzIHRvIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLiBUaGUgY29yZSBvZiB0aGUgY2hhbmdlcyBzZWVtIHRvIHJldm9sdmUgYXJvdW5kICpvcmRlcmluZyogb2YgdGVhcmRvd24gYW5kIHByb3BlciBsb2NraW5nIHRvIHByZXZlbnQgY29uY3VycmVuY3kgaXNzdWVzIGFuZCBVQUZzLiBUaGlzIGlzIGNsYXNzaWMgc3R1ZmYgZm9yIHJhY2UgY29uZGl0aW9uIGRldGVjdGlvbiBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gcmVsYXRlZCB0byBjb25jdXJyZW5jeS4gS0FTQU4gaXMgdXNlZnVsIGhlcmUuIEtNU0FOLi4uIE5vdCBzbyBtdWNoLlxuXG5KdXN0IHRvIGJlIGFic29sdXRlbHkgc3VyZSwgbGV0J3MgdGFrZSBhIHF1aWNrIGxvb2suIEknbGwgcXVpY2tseSBjaGVjayBgcnhycGNfZGVzdHJveV9hbGxfcGVlcnNgLiBJJ20gZ29pbmcgdG8gcXVpY2tseSBjaGVjayBgbmV0L3J4cnBjL3BlZXJfb2JqZWN0LmNgIHVzaW5nIHNvbWV0aGluZyBsaWtlIGEgYHJlYWQtZmlsZWAgb3IgYGdyZXBwZXJgIGNhbGwgdG8gZW5zdXJlIEknbSBub3QgbWlzc2luZyBhbnl0aGluZyBvYnZpb3VzLCB0aG91Z2ggSSdtIGZhaXJseSBjb25maWRlbnQgYmFzZWQgb24gdGhpcyBmaXJzdCBwYXNzLlxuXG5TbywgZ2l2ZW4gbXkgYW5hbHlzaXMsIEknbSBsZWFuaW5nIGhlYXZpbHkgdG93YXJkcyAqbm8qIEtNU0FOIHNlc3Npb24gYmVpbmcgbmVjZXNzYXJ5IGhlcmUuIFRoZSBpc3N1ZXMgYWRkcmVzc2VkIGFyZSBtb3JlIGluIHRoZSByZWFsbSBvZiBjb25jdXJyZW5jeSwgbGlmZXRpbWUgbWFuYWdlbWVudCwgYW5kIHN5bmNocm9uaXphdGlvbiwgYXJlYXMgd2hlcmUgS0FTQU4sIExPQ0tERVAsIGFuZCBvdGhlciBzYW5pdGl6ZXJzIGFyZSBtdWNoIG1vcmUgYXBwbGljYWJsZS4gVW5sZXNzIEkgZmluZCBzb21ldGhpbmcgZXh0cmVtZWx5IHVuZXhwZWN0ZWQgaW4gdGhlIGZpbGUgaW5zcGVjdGlvbiwgSSdsbCByZWNvbW1lbmQgd2Ugc2tpcCBLTVNBTiBmb3IgdGhpcyBvbmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI3NzAsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MDIsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwMjo1OTo1NS4xMjY4MjM5MjZaIiwiU2VxIjoyMiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYwMjU2NjU0MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJyeHJwY19kZXN0cm95X2FsbF9wZWVyc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvcnhycGMvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9yeHJwYy9hci1pbnRlcm5hbC5oPTE0MjY9dm9pZCByeHJwY19uZXdfaW5jb21pbmdfcGVlcihzdHJ1Y3QgcnhycGNfbG9jYWwgKmxvY2FsLCBzdHJ1Y3QgcnhycGNfcGVlciAqcGVlcik7XFxubmV0L3J4cnBjL2FyLWludGVybmFsLmg6MTQyNzp2b2lkIHJ4cnBjX2Rlc3Ryb3lfYWxsX3BlZXJzKHN0cnVjdCByeHJwY19uZXQgKik7XFxubmV0L3J4cnBjL2FyLWludGVybmFsLmgtMTQyOC1zdHJ1Y3QgcnhycGNfcGVlciAqcnhycGNfZ2V0X3BlZXIoc3RydWN0IHJ4cnBjX3BlZXIgKiwgZW51bSByeHJwY19wZWVyX3RyYWNlKTtcXG4tLVxcbm5ldC9yeHJwYy9uZXRfbnMuYz0xMTY9c3RhdGljIF9fbmV0X2V4aXQgdm9pZCByeHJwY19leGl0X25ldChzdHJ1Y3QgbmV0ICpuZXQpXFxuLS1cXG5uZXQvcnhycGMvbmV0X25zLmMtMTE5LVxcbm5ldC9yeHJwYy9uZXRfbnMuYzoxMjA6XFx0cnhycGNfZGVzdHJveV9hbGxfcGVlcnMocnhuZXQpO1xcbm5ldC9yeHJwYy9uZXRfbnMuYy0xMjEtXFx0cnhycGNfZGVzdHJveV9hbGxfbG9jYWxzKHJ4bmV0KTtcXG4tLVxcbm5ldC9yeHJwYy9wZWVyX29iamVjdC5jPTQzND12b2lkIHJ4cnBjX3B1dF9wZWVyKHN0cnVjdCByeHJwY19wZWVyICpwZWVyLCBlbnVtIHJ4cnBjX3BlZXJfdHJhY2Ugd2h5KVxcbi0tXFxubmV0L3J4cnBjL3BlZXJfb2JqZWN0LmMtNDUxLSAqL1xcbm5ldC9yeHJwYy9wZWVyX29iamVjdC5jOjQ1Mjp2b2lkIHJ4cnBjX2Rlc3Ryb3lfYWxsX3BlZXJzKHN0cnVjdCByeHJwY19uZXQgKnJ4bmV0KVxcbm5ldC9yeHJwYy9wZWVyX29iamVjdC5jLTQ1My17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDAyOjU5OjU1LjcyOTM5NzQxOVoiLCJTZXEiOjIzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxNzAzNDE2Njc4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOlxuXG4qKkRpdmluZyBpbnRvIGBwZWVyX29iamVjdC5jYCoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gdGhpcyBmdW5jdGlvbi4gTGV0J3Mgc3RhcnQgYnkgcGlucG9pbnRpbmcgdGhlIHJlbGV2YW50IGNvZGUuIE15IGludHVpdGlvbiwgYmFzZWQgb24gdGhlIGNvbnRleHQsIHN1Z2dlc3RzIHRoZSBhcmVhIGFyb3VuZCBsaW5lIDQ1MCBpbiBgbmV0L3J4cnBjL3BlZXJfb2JqZWN0LmNgIGlzIHdoZXJlIHRoZSBrZXkgbG9naWMgcmVzaWRlcy4gSSdsbCBqdW1wIHRoZXJlIGRpcmVjdGx5IHRvIGdldCB0aGUgd2hvbGUgZnVuY3Rpb24gaW4gY29udGV4dC4gSXQncyB0aGUgYmVzdCB3YXkgdG8gdW5kZXJzdGFuZCB0aGUgY29udHJvbCBmbG93IGFuZCBhc3NvY2lhdGVkIGRhdGEgc3RydWN0dXJlcyBxdWlja2x5LlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MzA4LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDI6NTk6NTcuNDMyODE2NDY3WiIsIlNlcSI6MjQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY1ODAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9yeHJwYy9wZWVyX29iamVjdC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDQ0NSxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDQ0NTpcXHRcXHRcXHRcXHRfX3J4cnBjX3B1dF9wZWVyKHBlZXIpO1xcbiA0NDY6XFx0XFx0fVxcbiA0NDc6XFx0fVxcbiA0NDg6XFx0XFxuIDQ0OTpcXHQvKlxcbiA0NTA6XFx0ICogTWFrZSBzdXJlIGFsbCBwZWVyIHJlY29yZHMgaGF2ZSBiZWVuIGRpc2NhcmRlZC5cXG4gNDUxOlxcdCAqL1xcbiA0NTI6XFx0dm9pZCByeHJwY19kZXN0cm95X2FsbF9wZWVycyhzdHJ1Y3QgcnhycGNfbmV0ICpyeG5ldClcXG4gNDUzOlxcdHtcXG4gNDU0OlxcdFxcdHN0cnVjdCByeHJwY19wZWVyICpwZWVyO1xcbiA0NTU6XFx0XFx0aW50IGk7XFxuIDQ1NjpcXHRcXG4gNDU3OlxcdFxcdC8qXFxuIDQ1ODpcXHRcXHQgKiBQcmV2ZW50IHVzZS1hZnRlci1mcmVlIGlmIGEgcGVlciBpcyBjb25jdXJyZW50bHkgdW5saW5rZWQgZnJvbSB0aGVcXG4gNDU5OlxcdFxcdCAqIGhhc2ggdGFibGUgYW5kIGZyZWVkIHZpYSBSQ1UgZHVyaW5nIGl0ZXJhdGlvbi5cXG4gNDYwOlxcdFxcdCAqL1xcbiA0NjE6XFx0XFx0c3Bpbl9sb2NrX2JoKFxcdTAwMjZyeG5ldC1cXHUwMDNlcGVlcl9oYXNoX2xvY2spO1xcbiA0NjI6XFx0XFxuIDQ2MzpcXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgSEFTSF9TSVpFKHJ4bmV0LVxcdTAwM2VwZWVyX2hhc2gpOyBpKyspIHtcXG4gNDY0OlxcdFxcdFxcdGlmIChobGlzdF9lbXB0eShcXHUwMDI2cnhuZXQtXFx1MDAzZXBlZXJfaGFzaFtpXSkpXFxuIDQ2NTpcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4gNDY2OlxcdFxcbiA0Njc6XFx0XFx0XFx0aGxpc3RfZm9yX2VhY2hfZW50cnkocGVlciwgXFx1MDAyNnJ4bmV0LVxcdTAwM2VwZWVyX2hhc2hbaV0sIGhhc2hfbGluaykge1xcbiA0Njg6XFx0XFx0XFx0XFx0cHJfZXJyKFxcXCJMZWFrZWQgcGVlciAleCB7JXV9ICVwSVNwXFxcXG5cXFwiLFxcbiA0Njk6XFx0XFx0XFx0XFx0ICAgICAgIHBlZXItXFx1MDAzZWRlYnVnX2lkLFxcbiA0NzA6XFx0XFx0XFx0XFx0ICAgICAgIHJlZmNvdW50X3JlYWQoXFx1MDAyNnBlZXItXFx1MDAzZXJlZiksXFxuIDQ3MTpcXHRcXHRcXHRcXHQgICAgICAgXFx1MDAyNnBlZXItXFx1MDAzZXNyeC50cmFuc3BvcnQpO1xcbiA0NzI6XFx0XFx0XFx0fVxcbiA0NzM6XFx0XFx0fVxcbiA0NzQ6XFx0XFxuIDQ3NTpcXHRcXHRzcGluX3VubG9ja19iaChcXHUwMDI2cnhuZXQtXFx1MDAzZXBlZXJfaGFzaF9sb2NrKTtcXG4gNDc2OlxcdH1cXG4gNDc3OlxcdFxcbiA0Nzg6XFx0LyoqXFxuIDQ3OTpcXHQgKiByeHJwY19rZXJuZWxfZ2V0X2NhbGxfcGVlciAtIEdldCB0aGUgcGVlciBhZGRyZXNzIG9mIGEgY2FsbFxcbiA0ODA6XFx0ICogQHNvY2s6IFRoZSBzb2NrZXQgb24gd2hpY2ggdGhlIGNhbGwgaXMgaW4gcHJvZ3Jlc3MuXFxuIDQ4MTpcXHQgKiBAY2FsbDogVGhlIGNhbGwgdG8gcXVlcnlcXG4gNDgyOlxcdCAqXFxuIDQ4MzpcXHQgKiBHZXQgYSByZWNvcmQgZm9yIHRoZSByZW1vdGUgcGVlciBpbiBhIGNhbGwuXFxuIDQ4NDpcXHQgKlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwMjo1OTo1Ny40MzI4ODM4OTdaIiwiU2VxIjoyNSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzAwMTI2MzAxMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBQcm9wb3NlZCBDaGFuZ2VzKipcblxuT2theSwgc28gdGhlIGNoYW5nZXMgYXJlIHN0cmFpZ2h0Zm9yd2FyZC4gV2UncmUgc3BsaXR0aW5nIGByeHJwY19leGl0X25ldGAgaW50byB0d28gcGFydHMgd2l0aGluIGBwZXJuZXRfb3BlcmF0aW9uc2A6IGEgcHJlLWV4aXQgZnVuY3Rpb24sIGByeHJwY19wcmVfZXhpdF9uZXRgLCBhbmQgdGhlIGFjdHVhbCBleGl0IGZ1bmN0aW9uLCBgcnhycGNfZXhpdF9uZXRgLiBBbmQsIGNydWNpYWxseSwgd2UncmUgYWRkaW5nIHNwaW5sb2NrIHByb3RlY3Rpb24gYXJvdW5kIGByeHJwY19kZXN0cm95X2FsbF9wZWVyc2AgdG8gdGFja2xlIHRob3NlIHJhY2UgYW5kIFVzZS1BZnRlci1GcmVlIGlzc3VlcyB0aGF0IHBvcCB1cCBkdXJpbmcgcGVlciBoYXNoIGl0ZXJhdGlvbi4gR29vZCwgZ29vZC5cblxuRnJvbSBteSBwZXJzcGVjdGl2ZSwgdGhlcmUncyBub3RoaW5nIGltbWVkaWF0ZWx5IGFsYXJtaW5nIGhlcmUuIE5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3Vlcywgbm8gdXNlci1zcGFjZSBjb3BpZXMgdG8gd29ycnkgYWJvdXQsIG5vIGZpZGRsaW5nIHdpdGggYnVmZmVyIHNpemVzIG9yIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGUgYWNjZXNzZXMg4oCTIGFsbCB0aGluZ3MgSSdkIGJlIGxvb2tpbmcgZm9yLiBBbmQgZ2l2ZW4gdGhlIG5hdHVyZSBvZiB0aGUgY2hhbmdlcywgSSB3b3VsZCBleHBlY3QgYW55IHBvdGVudGlhbCBwcm9ibGVtcywgbGlrZSB0aG9zZSBsb2NraW5nIGJ1Z3MsIGRlYWRsb2NrcywgdXNlLWFmdGVyLWZyZWUgc2NlbmFyaW9zLCBvciBkb3VibGUgZnJlZXMgdG8gYmUgY2F1Z2h0IGJ5IExPQ0tERVAgYW5kIEtBU0FOLiBXZSBhcmUgdGFraW5nIHRoZSBzdGVwcyB0aGF0IHdpbGwga2VlcCB1cyBzYWZlIGhlcmUuIFRoZXJlZm9yZSwgSSBkb24ndCBzZWUgYW55IHJlYXNvbiB3aHkgdGhpcyBuZWVkcyBLTVNBTiBpbnRlcnZlbnRpb24uIEknbSBzYXRpc2ZpZWQuXG5cbk5vdywgbGV0J3MgZ2V0IHJlYWR5IGZvciB0aGUgYHNldC1yZXN1bHRzYCBjYWxsLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MDczLCJPdXRwdXRUb2tlbnMiOjE3MywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2NSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDAzOjAwOjAwLjQzNDE0ODk4N1oiLCJTZXEiOjI2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0ODAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHBlcm5ldCBuYW1lc3BhY2UgZXhpdCBjYWxsYmFja3MgaW4gQUZfUlhSUEMgKHNwbGl0dGluZyB0ZWFyZG93biBiZXR3ZWVuIHByZV9leGl0IGFuZCBleGl0KSBhbmQgYWRkcyBzcGlubG9jayBzeW5jaHJvbml6YXRpb24gKHBlZXJfaGFzaF9sb2NrKSBpbiByeHJwY19kZXN0cm95X2FsbF9wZWVycygpIHRvIHByb3RlY3QgYWdhaW5zdCBjb25jdXJyZW50IHVubGlua2luZyBhbmQgdXNlLWFmdGVyLWZyZWUuXFxuXFxuTm8gbmV3IG1lbW9yeSBhbGxvY2F0aW9ucywgdW5pbml0aWFsaXplZCB2YXJpYWJsZSB1c2VzLCB1c2VyLWNvcHkgb3BlcmF0aW9ucywgb3IgYWx0ZXJlZCBkYXRhLXBhcnNpbmcvYnVmZmVyLWxlbmd0aCBsb2dpYyBhcmUgaW50cm9kdWNlZC4gVGhlIHBvdGVudGlhbCBpc3N1ZXMgYWRkcmVzc2VkIG9yIGludHJvZHVjZWQgYnkgdGhpcyBwYXRjaCByZWxhdGUgZXhjbHVzaXZlbHkgdG8gdGVhcmRvd24gb3JkZXJpbmcsIHN5bmNocm9uaXphdGlvbiwgbG9ja2luZywgYW5kIHVzZS1hZnRlci1mcmVlLCBhbGwgb2Ygd2hpY2ggYXJlIGNvdmVyZWQgYnkgc3RhbmRhcmQgc2FuaXRpemVycyAoS0FTQU4sIExPQ0tERVApLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBwZXJuZXQgbmFtZXNwYWNlIGV4aXQgY2FsbGJhY2tzIGluIEFGX1JYUlBDIChzcGxpdHRpbmcgdGVhcmRvd24gYmV0d2VlbiBwcmVfZXhpdCBhbmQgZXhpdCkgYW5kIGFkZHMgc3BpbmxvY2sgc3luY2hyb25pemF0aW9uIChwZWVyX2hhc2hfbG9jaykgaW4gcnhycGNfZGVzdHJveV9hbGxfcGVlcnMoKSB0byBwcm90ZWN0IGFnYWluc3QgY29uY3VycmVudCB1bmxpbmtpbmcgYW5kIHVzZS1hZnRlci1mcmVlLlxcblxcbk5vIG5ldyBtZW1vcnkgYWxsb2NhdGlvbnMsIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGUgdXNlcywgdXNlci1jb3B5IG9wZXJhdGlvbnMsIG9yIGFsdGVyZWQgZGF0YS1wYXJzaW5nL2J1ZmZlci1sZW5ndGggbG9naWMgYXJlIGludHJvZHVjZWQuIFRoZSBwb3RlbnRpYWwgaXNzdWVzIGFkZHJlc3NlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoaXMgcGF0Y2ggcmVsYXRlIGV4Y2x1c2l2ZWx5IHRvIHRlYXJkb3duIG9yZGVyaW5nLCBzeW5jaHJvbml6YXRpb24sIGxvY2tpbmcsIGFuZCB1c2UtYWZ0ZXItZnJlZSwgYWxsIG9mIHdoaWNoIGFyZSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIHNhbml0aXplcnMgKEtBU0FOLCBMT0NLREVQKS4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflowng56w[1] Phase: Succeeded StartedAt: 2026-09-08 03:00:12 +0000 UTC FinishedAt: 2026-09-08 03:00:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowng56w[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-08 03:00:12 +0000 UTC FinishedAt: 2026-09-08 03:00:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowng56w[2] Phase: Succeeded StartedAt: 2026-09-08 03:00:12 +0000 UTC FinishedAt: 2026-09-08 06:46:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowng56w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["AF_RXRPC","INET","NET_NS"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rxrpc_pre_exit_net","rxrpc_exit_net","rxrpc_destroy_all_peers"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["AF_RXRPC","INET","NET_NS"],"series_id":"72f7714d-3fb8-4e04-aa6f-2891301ed056","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-09-08 03:00:12 +0000 UTC FinishedAt: 2026-09-08 06:46:44 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["AF_RXRPC","INET","NET_NS"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rxrpc_pre_exit_net","rxrpc_exit_net","rxrpc_destroy_all_peers"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["AF_RXRPC","INET","NET_NS"],"series_id":"72f7714d-3fb8-4e04-aa6f-2891301ed056","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowng56w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["AF_RXRPC","INET","NET_NS"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rxrpc_pre_exit_net","rxrpc_exit_net","rxrpc_destroy_all_peers"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["AF_RXRPC","INET","NET_NS"],"series_id":"72f7714d-3fb8-4e04-aa6f-2891301ed056","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-09-08 03:00:12 +0000 UTC FinishedAt: 2026-09-08 03:00:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowng56w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["AF_RXRPC","INET","NET_NS"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rxrpc_pre_exit_net","rxrpc_exit_net","rxrpc_destroy_all_peers"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["AF_RXRPC","INET","NET_NS"],"series_id":"72f7714d-3fb8-4e04-aa6f-2891301ed056","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-09-08 03:00:12 +0000 UTC FinishedAt: 2026-09-08 03:00:17 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["AF_RXRPC","INET","NET_NS"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowng56w/series-workflowng56w-convert-artifact-1298938924/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowng56w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["AF_RXRPC","INET","NET_NS"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rxrpc_pre_exit_net","rxrpc_exit_net","rxrpc_destroy_all_peers"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["AF_RXRPC","INET","NET_NS"],"series_id":"72f7714d-3fb8-4e04-aa6f-2891301ed056","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-09-08 03:00:22 +0000 UTC FinishedAt: 2026-09-08 03:19:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowng56w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["AF_RXRPC","INET","NET_NS"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rxrpc_pre_exit_net","rxrpc_exit_net","rxrpc_destroy_all_peers"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["AF_RXRPC","INET","NET_NS"],"series_id":"72f7714d-3fb8-4e04-aa6f-2891301ed056","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-09-08 03:00:22 +0000 UTC FinishedAt: 2026-09-08 03:19: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:*71bf170b-1fae-47fe-ac8a-d0d339407f94,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-workflowng56w/series-workflowng56w-convert-artifact-1298938924/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": "dc796db1-1c7f-4888-813d-f21ae1339b38", "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-workflowng56w/series-workflowng56w-build-action-388973146/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowng56w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["AF_RXRPC","INET","NET_NS"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rxrpc_pre_exit_net","rxrpc_exit_net","rxrpc_destroy_all_peers"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["AF_RXRPC","INET","NET_NS"],"series_id":"72f7714d-3fb8-4e04-aa6f-2891301ed056","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-09-08 03:00:22 +0000 UTC FinishedAt: 2026-09-08 03:18: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:*71bf170b-1fae-47fe-ac8a-d0d339407f94,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-workflowng56w/series-workflowng56w-convert-artifact-1298938924/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": "dc796db1-1c7f-4888-813d-f21ae1339b38", "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-workflowng56w/series-workflowng56w-build-action-388973146/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowng56w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["AF_RXRPC","INET","NET_NS"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rxrpc_pre_exit_net","rxrpc_exit_net","rxrpc_destroy_all_peers"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["AF_RXRPC","INET","NET_NS"],"series_id":"72f7714d-3fb8-4e04-aa6f-2891301ed056","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-09-08 03:19:01 +0000 UTC FinishedAt: 2026-09-08 03:19:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowng56w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["AF_RXRPC","INET","NET_NS"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rxrpc_pre_exit_net","rxrpc_exit_net","rxrpc_destroy_all_peers"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["AF_RXRPC","INET","NET_NS"],"series_id":"72f7714d-3fb8-4e04-aa6f-2891301ed056","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-09-08 03:19:01 +0000 UTC FinishedAt: 2026-09-08 03:19:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowng56w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["AF_RXRPC","INET","NET_NS"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rxrpc_pre_exit_net","rxrpc_exit_net","rxrpc_destroy_all_peers"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["AF_RXRPC","INET","NET_NS"],"series_id":"72f7714d-3fb8-4e04-aa6f-2891301ed056","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-09-08 03:19:01 +0000 UTC FinishedAt: 2026-09-08 03:19:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowng56w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["AF_RXRPC","INET","NET_NS"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rxrpc_pre_exit_net","rxrpc_exit_net","rxrpc_destroy_all_peers"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["AF_RXRPC","INET","NET_NS"],"series_id":"72f7714d-3fb8-4e04-aa6f-2891301ed056","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-09-08 03:19:01 +0000 UTC FinishedAt: 2026-09-08 03:19:08 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["AF_RXRPC","INET","NET_NS"],"series_id":"72f7714d-3fb8-4e04-aa6f-2891301ed056","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowng56w/series-workflowng56w-convert-artifact-861843691/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowng56w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["AF_RXRPC","INET","NET_NS"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rxrpc_pre_exit_net","rxrpc_exit_net","rxrpc_destroy_all_peers"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["AF_RXRPC","INET","NET_NS"],"series_id":"72f7714d-3fb8-4e04-aa6f-2891301ed056","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-09-08 03:19:11 +0000 UTC FinishedAt: 2026-09-08 03:21:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowng56w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["AF_RXRPC","INET","NET_NS"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rxrpc_pre_exit_net","rxrpc_exit_net","rxrpc_destroy_all_peers"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["AF_RXRPC","INET","NET_NS"],"series_id":"72f7714d-3fb8-4e04-aa6f-2891301ed056","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-09-08 03:19:12 +0000 UTC FinishedAt: 2026-09-08 03:20:56 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*dc796db1-1c7f-4888-813d-f21ae1339b38,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-workflowng56w/series-workflowng56w-build-action-388973146/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-workflowng56w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["AF_RXRPC","INET","NET_NS"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rxrpc_pre_exit_net","rxrpc_exit_net","rxrpc_destroy_all_peers"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["AF_RXRPC","INET","NET_NS"],"series_id":"72f7714d-3fb8-4e04-aa6f-2891301ed056","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-09-08 03:21:06 +0000 UTC FinishedAt: 2026-09-08 03:21:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowng56w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["AF_RXRPC","INET","NET_NS"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rxrpc_pre_exit_net","rxrpc_exit_net","rxrpc_destroy_all_peers"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["AF_RXRPC","INET","NET_NS"],"series_id":"72f7714d-3fb8-4e04-aa6f-2891301ed056","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-09-08 03:21:06 +0000 UTC FinishedAt: 2026-09-08 03:21:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowng56w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["AF_RXRPC","INET","NET_NS"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rxrpc_pre_exit_net","rxrpc_exit_net","rxrpc_destroy_all_peers"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["AF_RXRPC","INET","NET_NS"],"series_id":"72f7714d-3fb8-4e04-aa6f-2891301ed056","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-09-08 03:21:06 +0000 UTC FinishedAt: 2026-09-08 03:37:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowng56w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["AF_RXRPC","INET","NET_NS"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rxrpc_pre_exit_net","rxrpc_exit_net","rxrpc_destroy_all_peers"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["AF_RXRPC","INET","NET_NS"],"series_id":"72f7714d-3fb8-4e04-aa6f-2891301ed056","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-09-08 03:21:06 +0000 UTC FinishedAt: 2026-09-08 03:37:56 +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:*71bf170b-1fae-47fe-ac8a-d0d339407f94,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-workflowng56w/series-workflowng56w-convert-artifact-861843691/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": "6dafa5c2-5fb1-49b9-b4e5-8877f26c5afd", "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-workflowng56w/series-workflowng56w-build-action-2442391055/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowng56w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["AF_RXRPC","INET","NET_NS"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rxrpc_pre_exit_net","rxrpc_exit_net","rxrpc_destroy_all_peers"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["AF_RXRPC","INET","NET_NS"],"series_id":"72f7714d-3fb8-4e04-aa6f-2891301ed056","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-09-08 03:21:06 +0000 UTC FinishedAt: 2026-09-08 03:37:46 +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:*71bf170b-1fae-47fe-ac8a-d0d339407f94,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-workflowng56w/series-workflowng56w-convert-artifact-861843691/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": "6dafa5c2-5fb1-49b9-b4e5-8877f26c5afd", "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-workflowng56w/series-workflowng56w-build-action-2442391055/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowng56w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["AF_RXRPC","INET","NET_NS"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rxrpc_pre_exit_net","rxrpc_exit_net","rxrpc_destroy_all_peers"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["AF_RXRPC","INET","NET_NS"],"series_id":"72f7714d-3fb8-4e04-aa6f-2891301ed056","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-09-08 03:37:56 +0000 UTC FinishedAt: 2026-09-08 03:37:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowng56w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["AF_RXRPC","INET","NET_NS"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rxrpc_pre_exit_net","rxrpc_exit_net","rxrpc_destroy_all_peers"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["AF_RXRPC","INET","NET_NS"],"series_id":"72f7714d-3fb8-4e04-aa6f-2891301ed056","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-09-08 03:37:56 +0000 UTC FinishedAt: 2026-09-08 03:37:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowng56w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["AF_RXRPC","INET","NET_NS"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rxrpc_pre_exit_net","rxrpc_exit_net","rxrpc_destroy_all_peers"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["AF_RXRPC","INET","NET_NS"],"series_id":"72f7714d-3fb8-4e04-aa6f-2891301ed056","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-09-08 03:37:56 +0000 UTC FinishedAt: 2026-09-08 03:39:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowng56w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["AF_RXRPC","INET","NET_NS"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rxrpc_pre_exit_net","rxrpc_exit_net","rxrpc_destroy_all_peers"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["AF_RXRPC","INET","NET_NS"],"series_id":"72f7714d-3fb8-4e04-aa6f-2891301ed056","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-09-08 03:37:56 +0000 UTC FinishedAt: 2026-09-08 03:39:46 +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:*6dafa5c2-5fb1-49b9-b4e5-8877f26c5afd,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-workflowng56w/series-workflowng56w-build-action-2442391055/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-workflowng56w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["AF_RXRPC","INET","NET_NS"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rxrpc_pre_exit_net","rxrpc_exit_net","rxrpc_destroy_all_peers"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["AF_RXRPC","INET","NET_NS"],"series_id":"72f7714d-3fb8-4e04-aa6f-2891301ed056","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-09-08 03:39:56 +0000 UTC FinishedAt: 2026-09-08 06:46:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowng56w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["AF_RXRPC","INET","NET_NS"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rxrpc_pre_exit_net","rxrpc_exit_net","rxrpc_destroy_all_peers"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["AF_RXRPC","INET","NET_NS"],"series_id":"72f7714d-3fb8-4e04-aa6f-2891301ed056","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-09-08 03:39:56 +0000 UTC FinishedAt: 2026-09-08 06:46:44 +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":["rxrpc_pre_exit_net","rxrpc_exit_net","rxrpc_destroy_all_peers"],"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:*dc796db1-1c7f-4888-813d-f21ae1339b38,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*6dafa5c2-5fb1-49b9-b4e5-8877f26c5afd,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-workflowng56w/series-workflowng56w-build-action-388973146/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-workflowng56w/series-workflowng56w-build-action-2442391055/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowng56w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["AF_RXRPC","INET","NET_NS"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rxrpc_pre_exit_net","rxrpc_exit_net","rxrpc_destroy_all_peers"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["AF_RXRPC","INET","NET_NS"],"series_id":"72f7714d-3fb8-4e04-aa6f-2891301ed056","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-09-08 03:39:56 +0000 UTC FinishedAt: 2026-09-08 03:40:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowng56w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["AF_RXRPC","INET","NET_NS"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rxrpc_pre_exit_net","rxrpc_exit_net","rxrpc_destroy_all_peers"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["AF_RXRPC","INET","NET_NS"],"series_id":"72f7714d-3fb8-4e04-aa6f-2891301ed056","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-09-08 03:39:56 +0000 UTC FinishedAt: 2026-09-08 03:39:59 +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":["rxrpc_pre_exit_net","rxrpc_exit_net","rxrpc_destroy_all_peers"],"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-workflowng56w/series-workflowng56w-convert-artifact-3514295044/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowng56w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["AF_RXRPC","INET","NET_NS"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rxrpc_pre_exit_net","rxrpc_exit_net","rxrpc_destroy_all_peers"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["AF_RXRPC","INET","NET_NS"],"series_id":"72f7714d-3fb8-4e04-aa6f-2891301ed056","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-09-08 03:39:56 +0000 UTC FinishedAt: 2026-09-08 03:39:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowng56w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["AF_RXRPC","INET","NET_NS"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rxrpc_pre_exit_net","rxrpc_exit_net","rxrpc_destroy_all_peers"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["AF_RXRPC","INET","NET_NS"],"series_id":"72f7714d-3fb8-4e04-aa6f-2891301ed056","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-09-08 03:39:56 +0000 UTC FinishedAt: 2026-09-08 03:39:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowng56w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["AF_RXRPC","INET","NET_NS"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rxrpc_pre_exit_net","rxrpc_exit_net","rxrpc_destroy_all_peers"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["AF_RXRPC","INET","NET_NS"],"series_id":"72f7714d-3fb8-4e04-aa6f-2891301ed056","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-09-08 03:39:56 +0000 UTC FinishedAt: 2026-09-08 03:39:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowng56w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["AF_RXRPC","INET","NET_NS"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rxrpc_pre_exit_net","rxrpc_exit_net","rxrpc_destroy_all_peers"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["AF_RXRPC","INET","NET_NS"],"series_id":"72f7714d-3fb8-4e04-aa6f-2891301ed056","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-09-08 03:40:06 +0000 UTC FinishedAt: 2026-09-08 06:46:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowng56w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["AF_RXRPC","INET","NET_NS"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rxrpc_pre_exit_net","rxrpc_exit_net","rxrpc_destroy_all_peers"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["AF_RXRPC","INET","NET_NS"],"series_id":"72f7714d-3fb8-4e04-aa6f-2891301ed056","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-09-08 03:40:06 +0000 UTC FinishedAt: 2026-09-08 06:46:24 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*dc796db1-1c7f-4888-813d-f21ae1339b38,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*6dafa5c2-5fb1-49b9-b4e5-8877f26c5afd,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-workflowng56w/series-workflowng56w-build-action-388973146/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-workflowng56w/series-workflowng56w-build-action-2442391055/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-workflowng56w/series-workflowng56w-convert-artifact-3514295044/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,}